ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDBiZjMxZWEuLjliZjcxNGEgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTE5NCwxNSArMTE5NCw5IEBACiBTOiBVU0EKIAogTjogVHJpc3RhbiBHcmVhdmVzCi1FOiBUcmlzdGFuLkdyZWF2ZXNAaWNsLmNvbQotRTogdG1nMjk2QGVjcy5zb3Rvbi5hYy51awotVzogaHR0cDovL3d3dy5lY3Muc290b24uYWMudWsvfnRtZzI5NgorRTogdHJpc3RhbkBleHRyaWNhdGUub3JnCitXOiBodHRwOi8vd3d3LmV4dHJpY2F0ZS5vcmcvCiBEOiBNaXNjZWxsYW5lb3VzIGlwdjQgc3lzY3RsIHBhdGNoZXMKLVM6IDE1IExpdHRsZSBNZWFkCi1TOiBEZW5tZWFkCi1TOiBIYW1wc2hpcmUKLVM6IFBPNyA2SFMKLVM6IFVuaXRlZCBLaW5nZG9tCiAKIE46IE1pY2hhZWwgQS4gR3JpZmZpdGgKIEU6IGdyaWZAY3MudWNyLmVkdQpAQCAtMzI0NywxNCArMzI0MSw5IEBACiBTOiBCZWF2ZXJ0b24sIE9yZWdvbiA5NzAwNQogUzogVVNBCiAKLU46IE1hcmNlbG8gVy4gVG9zYXR0aQotRTogbWFyY2Vsby50b3NhdHRpQGN5Y2xhZGVzLmNvbQotRDogTWlzY2VsbGFuZW91cyBrZXJuZWwgaGFja2VyCitOOiBNYXJjZWxvIFRvc2F0dGkKK0U6IG1hcmNlbG9Aa3ZhY2sub3JnCiBEOiB2Mi40IGtlcm5lbCBtYWludGFpbmVyCi1EOiBDdXJyZW50IHBjMzAwL2N5Y2xhZGVzIG1haW50YWluZXIKLVM6IEN5Y2xhZGVzIENvcnBvcmF0aW9uCi1TOiBBdiBDcmlzdG92YW8gQ29sb21ibywgNDYyLiBGbG9yZXN0YS4KLVM6IFBvcnRvIEFsZWdyZQogUzogQnJhemlsCiAKIE46IFN0ZWZhbiBUcmFieQpAQCAtMzM4Miw3ICszMzcxLDcgQEAKIAogTjogR2VlcnQgVXl0dGVyaG9ldmVuCiBFOiBnZWVydEBsaW51eC1tNjhrLm9yZwotVzogaHR0cDovL2hvbWUudHZkLmJlL2NyMjY4NjQvCitXOiBodHRwOi8vdXNlcnMudGVsZW5ldC5iZS9nZWVydHUvCiBQOiAxMDI0Lzg2MjY3OEE2IEM1MUQgMzYxQyAwQkQxIDRDOTAgQjI3NSAgQzU1MyA2RUVBIDExQkEgODYyNiA3OEE2CiBEOiBtNjhrL0FtaWdhIGFuZCBQUEMvQ0hSUCBMb25ndHJhaWwgY29vcmRpbmF0b3IKIEQ6IEZyYW1lIGJ1ZmZlciBkZXZpY2UgYW5kIFhGNjhfRkJEZXYgbWFpbnRhaW5lcgpAQCAtMzM5Miw4ICszMzgxLDggQEAKIEQ6IEF0YXJpIEZhbGNvbiBjaGlwc2V0IElERQogRDogQW1pZ2EgR2F5bGUgY2hpcHNldCBJREUKIEQ6IG1pcHNlbCBORUMgRERCIFZyYy01MDc0Ci1TOiBFbWllbCBWbGllYmVyZ2hsYWFuIDJBLzIxCi1TOiBCLTMwMTAgS2Vzc2VsLUxvCitTOiBIYXRlcmJlZWtzdHJhYXQgNTVCCitTOiBCLTMyMDAgQWFyc2Nob3QKIFM6IEJlbGdpdW0KIAogTjogQ2hyaXMgVmFuY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CmluZGV4IDFhZjBmMmQuLjJmZmIwZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dApAQCAtMzMsNyArMzMsOSBAQAogCiBDb25zaXN0ZW50IG1lbW9yeSBpcyBtZW1vcnkgZm9yIHdoaWNoIGEgd3JpdGUgYnkgZWl0aGVyIHRoZSBkZXZpY2Ugb3IKIHRoZSBwcm9jZXNzb3IgY2FuIGltbWVkaWF0ZWx5IGJlIHJlYWQgYnkgdGhlIHByb2Nlc3NvciBvciBkZXZpY2UKLXdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGNhY2hpbmcgZWZmZWN0cy4KK3dpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGNhY2hpbmcgZWZmZWN0cy4gIChZb3UgbWF5IGhvd2V2ZXIgbmVlZAordG8gbWFrZSBzdXJlIHRvIGZsdXNoIHRoZSBwcm9jZXNzb3IncyB3cml0ZSBidWZmZXJzIGJlZm9yZSB0ZWxsaW5nCitkZXZpY2VzIHRvIHJlYWQgdGhhdCBtZW1vcnkuKQogCiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGEgcmVnaW9uIG9mIDxzaXplPiBieXRlcyBvZiBjb25zaXN0ZW50IG1lbW9yeS4KIGl0IGFsc28gcmV0dXJucyBhIDxkbWFfaGFuZGxlPiB3aGljaCBtYXkgYmUgY2FzdCB0byBhbiB1bnNpZ25lZApAQCAtMzA0LDEyICszMDYsMTIgQEAKIGNvdWxkIG5vdCBiZSBjcmVhdGVkIGFuZCB0aGUgZHJpdmVyIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiAoZWcKIHJlZHVjZSBjdXJyZW50IERNQSBtYXBwaW5nIHVzYWdlIG9yIGRlbGF5IGFuZCB0cnkgYWdhaW4gbGF0ZXIpLgogCi1pbnQKLWRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotaW50Ci1wY2lfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCisJaW50CisJZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCWludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCWludAorCXBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCiAKIE1hcHMgYSBzY2F0dGVyIGdhdGhlciBsaXN0IGZyb20gdGhlIGJsb2NrIGxheWVyLgogCkBAIC0zMjcsMTIgKzMyOSwzMyBAQAogYWJvcnRpbmcgdGhlIHJlcXVlc3Qgb3IgZXZlbiBvb3BzaW5nIGlzIGJldHRlciB0aGFuIGRvaW5nIG5vdGhpbmcgYW5kCiBjb3JydXB0aW5nIHRoZSBmaWxlc3lzdGVtLgogCi12b2lkCi1kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKLQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXZvaWQKLXBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCitXaXRoIHNjYXR0ZXJsaXN0cywgeW91IHVzZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcgbGlrZSB0aGlzOgorCisJaW50IGksIGNvdW50ID0gZG1hX21hcF9zZyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCWZvciAoaSA9IDAsIHNnID0gc2dsaXN0OyBpIDwgY291bnQ7IGkrKywgc2crKykgeworCQlod19hZGRyZXNzW2ldID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQlod19sZW5baV0gPSBzZ19kbWFfbGVuKHNnKTsKKwl9CisKK3doZXJlIG5lbnRzIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2dsaXN0LgorCitUaGUgaW1wbGVtZW50YXRpb24gaXMgZnJlZSB0byBtZXJnZSBzZXZlcmFsIGNvbnNlY3V0aXZlIHNnbGlzdCBlbnRyaWVzCitpbnRvIG9uZSAoZS5nLiB3aXRoIGFuIElPTU1VLCBvciBpZiBzZXZlcmFsIHBhZ2VzIGp1c3QgaGFwcGVuIHRvIGJlCitwaHlzaWNhbGx5IGNvbnRpZ3VvdXMpIGFuZCByZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNnIGVudHJpZXMgaXQKK21hcHBlZCB0aGVtIHRvLiBPbiBmYWlsdXJlIDAsIGlzIHJldHVybmVkLgorCitUaGVuIHlvdSBzaG91bGQgbG9vcCBjb3VudCB0aW1lcyAobm90ZTogdGhpcyBjYW4gYmUgbGVzcyB0aGFuIG5lbnRzIHRpbWVzKQorYW5kIHVzZSBzZ19kbWFfYWRkcmVzcygpIGFuZCBzZ19kbWFfbGVuKCkgbWFjcm9zIHdoZXJlIHlvdSBwcmV2aW91c2x5CithY2Nlc3NlZCBzZy0+YWRkcmVzcyBhbmQgc2ctPmxlbmd0aCBhcyBzaG93biBhYm92ZS4KKworCXZvaWQKKwlkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCXZvaWQKKwlwY2lfdW5tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCiAKIHVubWFwIHRoZSBwcmV2aW91c2x5IG1hcHBlZCBzY2F0dGVyL2dhdGhlciBsaXN0LiAgQWxsIHRoZSBwYXJhbWV0ZXJzCiBtdXN0IGJlIHRoZSBzYW1lIGFzIHRob3NlIGFuZCBwYXNzZWQgaW4gdG8gdGhlIHNjYXR0ZXIvZ2F0aGVyIG1hcHBpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKaW5kZXggZWU0YmI3My4uN2M3MTc2OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKQEAgLTU4LDExICs1OCwxNSBAQAogc29tZXRoaW5nIGxpa2UgX192YSgpLiAgWyBFRElUOiBVcGRhdGUgdGhpcyB3aGVuIHdlIGludGVncmF0ZQogR2VyZCBLbm9ycidzIGdlbmVyaWMgY29kZSB3aGljaCBkb2VzIHRoaXMuIF0KIAotVGhpcyBydWxlIGFsc28gbWVhbnMgdGhhdCB5b3UgbWF5IG5vdCB1c2Uga2VybmVsIGltYWdlIGFkZHJlc3NlcwotKGllLiBpdGVtcyBpbiB0aGUga2VybmVsJ3MgZGF0YS90ZXh0L2JzcyBzZWdtZW50LCBvciB5b3VyIGRyaXZlcidzKQotbm9yIG1heSB5b3UgdXNlIGtlcm5lbCBzdGFjayBhZGRyZXNzZXMgZm9yIERNQS4gIEJvdGggb2YgdGhlc2UgaXRlbXMKLW1pZ2h0IGJlIG1hcHBlZCBzb21ld2hlcmUgZW50aXJlbHkgZGlmZmVyZW50IHRoYW4gdGhlIHJlc3Qgb2YgcGh5c2ljYWwKLW1lbW9yeS4KK1RoaXMgcnVsZSBhbHNvIG1lYW5zIHRoYXQgeW91IG1heSB1c2UgbmVpdGhlciBrZXJuZWwgaW1hZ2UgYWRkcmVzc2VzCisoaXRlbXMgaW4gZGF0YS90ZXh0L2JzcyBzZWdtZW50cyksIG5vciBtb2R1bGUgaW1hZ2UgYWRkcmVzc2VzLCBub3IKK3N0YWNrIGFkZHJlc3NlcyBmb3IgRE1BLiAgVGhlc2UgY291bGQgYWxsIGJlIG1hcHBlZCBzb21ld2hlcmUgZW50aXJlbHkKK2RpZmZlcmVudCB0aGFuIHRoZSByZXN0IG9mIHBoeXNpY2FsIG1lbW9yeS4gIEV2ZW4gaWYgdGhvc2UgY2xhc3NlcyBvZgorbWVtb3J5IGNvdWxkIHBoeXNpY2FsbHkgd29yayB3aXRoIERNQSwgeW91J2QgbmVlZCB0byBlbnN1cmUgdGhlIEkvTworYnVmZmVycyB3ZXJlIGNhY2hlbGluZS1hbGlnbmVkLiAgV2l0aG91dCB0aGF0LCB5b3UnZCBzZWUgY2FjaGVsaW5lCitzaGFyaW5nIHByb2JsZW1zIChkYXRhIGNvcnJ1cHRpb24pIG9uIENQVXMgd2l0aCBETUEtaW5jb2hlcmVudCBjYWNoZXMuCisoVGhlIENQVSBjb3VsZCB3cml0ZSB0byBvbmUgd29yZCwgRE1BIHdvdWxkIHdyaXRlIHRvIGEgZGlmZmVyZW50IG9uZQoraW4gdGhlIHNhbWUgY2FjaGUgbGluZSwgYW5kIG9uZSBvZiB0aGVtIGNvdWxkIGJlIG92ZXJ3cml0dGVuLikKIAogQWxzbywgdGhpcyBtZWFucyB0aGF0IHlvdSBjYW5ub3QgdGFrZSB0aGUgcmV0dXJuIG9mIGEga21hcCgpCiBjYWxsIGFuZCBETUEgdG8vZnJvbSB0aGF0LiAgVGhpcyBpcyBzaW1pbGFyIHRvIHZtYWxsb2MoKS4KQEAgLTE5NCw3ICsxOTgsNyBAQAogRmluYWxseSwgaWYgeW91ciBkZXZpY2UgY2FuIG9ubHkgZHJpdmUgdGhlIGxvdyAyNC1iaXRzIG9mCiBhZGRyZXNzIGR1cmluZyBQQ0kgYnVzIG1hc3RlcmluZyB5b3UgbWlnaHQgZG8gc29tZXRoaW5nIGxpa2U6CiAKLQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCAweDAwZmZmZmZmKSkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8yNEJJVF9NQVNLKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAibXlkZXY6IDI0LWJpdCBETUEgYWRkcmVzc2luZyBub3QgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOwpAQCAtMjEyLDcgKzIxNiw3IEBACiBmdW5jdGlvbnMpIGFuZCB0aGUgdmFyaW91cyBkaWZmZXJlbnQgZnVuY3Rpb25zIGhhdmUgX2RpZmZlcmVudF8KIERNQSBhZGRyZXNzaW5nIGxpbWl0YXRpb25zLCB5b3UgbWF5IHdpc2ggdG8gcHJvYmUgZWFjaCBtYXNrIGFuZAogb25seSBwcm92aWRlIHRoZSBmdW5jdGlvbmFsaXR5IHdoaWNoIHRoZSBtYWNoaW5lIGNhbiBoYW5kbGUuICBJdAotaXMgaW1wb3J0YW50IHRoYXQgdGhlIGxhc3QgY2FsbCB0byBwY2lfc2V0X2RtYV9tYXNrKCkgYmUgZm9yIHRoZSAKK2lzIGltcG9ydGFudCB0aGF0IHRoZSBsYXN0IGNhbGwgdG8gcGNpX3NldF9kbWFfbWFzaygpIGJlIGZvciB0aGUKIG1vc3Qgc3BlY2lmaWMgbWFzay4KIAogSGVyZSBpcyBwc2V1ZG8tY29kZSBzaG93aW5nIGhvdyB0aGlzIG1pZ2h0IGJlIGRvbmU6CkBAIC0yODQsNiArMjg4LDExIEBACiAKICAgICAgICAgICAgICBpbiBvcmRlciB0byBnZXQgY29ycmVjdCBiZWhhdmlvciBvbiBhbGwgcGxhdGZvcm1zLgogCisJICAgICBBbHNvLCBvbiBzb21lIHBsYXRmb3JtcyB5b3VyIGRyaXZlciBtYXkgbmVlZCB0byBmbHVzaCBDUFUgd3JpdGUKKwkgICAgIGJ1ZmZlcnMgaW4gbXVjaCB0aGUgc2FtZSB3YXkgYXMgaXQgbmVlZHMgdG8gZmx1c2ggd3JpdGUgYnVmZmVycworCSAgICAgZm91bmQgaW4gUENJIGJyaWRnZXMgKHN1Y2ggYXMgYnkgcmVhZGluZyBhIHJlZ2lzdGVyJ3MgdmFsdWUKKwkgICAgIGFmdGVyIHdyaXRpbmcgaXQpLgorCiAtIFN0cmVhbWluZyBETUEgbWFwcGluZ3Mgd2hpY2ggYXJlIHVzdWFsbHkgbWFwcGVkIGZvciBvbmUgRE1BIHRyYW5zZmVyLAogICB1bm1hcHBlZCByaWdodCBhZnRlciBpdCAodW5sZXNzIHlvdSB1c2UgcGNpX2RtYV9zeW5jXyogYmVsb3cpIGFuZCBmb3Igd2hpY2gKICAgaGFyZHdhcmUgY2FuIG9wdGltaXplIGZvciBzZXF1ZW50aWFsIGFjY2Vzc2VzLgpAQCAtMzAzLDYgKzMxMiw5IEBACiAKIE5laXRoZXIgdHlwZSBvZiBETUEgbWFwcGluZyBoYXMgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyB0aGF0IGNvbWUKIGZyb20gUENJLCBhbHRob3VnaCBzb21lIGRldmljZXMgbWF5IGhhdmUgc3VjaCByZXN0cmljdGlvbnMuCitBbHNvLCBzeXN0ZW1zIHdpdGggY2FjaGVzIHRoYXQgYXJlbid0IERNQS1jb2hlcmVudCB3aWxsIHdvcmsgYmV0dGVyCit3aGVuIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcnMgZG9uJ3Qgc2hhcmUgY2FjaGUgbGluZXMgd2l0aCBvdGhlciBkYXRhLgorCiAKIAkJIFVzaW5nIENvbnNpc3RlbnQgRE1BIG1hcHBpbmdzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKaW5kZXggN2Q4N2RkNy4uNWEyODgyZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgVGhpcyBtYWtlZmlsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiwKICMgcHJpbWFyaWx5IGJhc2VkIG9uIGluLWxpbmUgY29tbWVudHMgaW4gdmFyaW91cyBzb3VyY2UgZmlsZXMuCiAjIFNlZSBEb2N1bWVudGF0aW9uL2tlcm5lbC1kb2MtbmFuby1IT1dUTy50eHQgZm9yIGluc3RydWN0aW9uIGluIGhvdwotIyB0byBkdWN1bWVudCB0aGUgU1JDIC0gYW5kIGhvdyB0byByZWFkIGl0LgorIyB0byBkb2N1bWVudCB0aGUgU1JDIC0gYW5kIGhvdyB0byByZWFkIGl0LgogIyBUbyBhZGQgYSBuZXcgYm9vayB0aGUgb25seSBzdGVwIHJlcXVpcmVkIGlzIHRvIGFkZCB0aGUgYm9vayB0byB0aGUKICMgbGlzdCBvZiBET0NCT09LUy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggOGM5YzY3MC4uY2EwMmUwNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC0zMjIsNyArMzIyLDYgQEAKICAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KICAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgogIUVmcy9zeXNmcy9maWxlLmMKLSFFZnMvc3lzZnMvZGlyLmMKICFFZnMvc3lzZnMvc3ltbGluay5jCiAhRWZzL3N5c2ZzL2Jpbi5jCiAgIDwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbAppbmRleCA1YmNiYjZlLi5mODY5YjAzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsCkBAIC03MDUsNyArNzA1LDcgQEAKIAogCTxzZWN0MT48dGl0bGU+YXRhX3Njc2lfZXJyb3IoKTwvdGl0bGU+CiAJPHBhcmE+Ci0JYXRhX3Njc2lfZXJyb3IoKSBpcyB0aGUgY3VycmVudCBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpCisJYXRhX3Njc2lfZXJyb3IoKSBpcyB0aGUgY3VycmVudCB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkKIAlmb3IgbGliYXRhLiAgQXMgZGlzY3Vzc2VkIGFib3ZlLCB0aGlzIHdpbGwgYmUgZW50ZXJlZCBpbiB0d28KIAljYXNlcyAtIHRpbWVvdXQgYW5kIEFUQVBJIGVycm9yIGNvbXBsZXRpb24uICBUaGlzIGZ1bmN0aW9uCiAJY2FsbHMgbG93IGxldmVsIGxpYmF0YSBkcml2ZXIncyBlbmdfdGltZW91dCgpIGNhbGxiYWNrLCB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSE9XVE8gYi9Eb2N1bWVudGF0aW9uL0hPV1RPCmluZGV4IDZjOWU3NDYuLjkxNWFlOGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vSE9XVE8KKysrIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwpAQCAtNjAzLDcgKzYwMyw4IEBACiAKIAogLS0tLS0tLS0tLQotVGhhbmtzIHRvIFBhb2xvIENpYXJyb2NjaGkgd2hvIGFsbG93ZWQgdGhlICJEZXZlbG9wbWVudCBQcm9jZXNzIiBzZWN0aW9uCitUaGFua3MgdG8gUGFvbG8gQ2lhcnJvY2NoaSB3aG8gYWxsb3dlZCB0aGUgIkRldmVsb3BtZW50IFByb2Nlc3MiCisoaHR0cDovL2xpbnV4LnRhci5iei9hcnRpY2xlcy8yLjYtZGV2ZWxvcG1lbnRfcHJvY2Vzcykgc2VjdGlvbgogdG8gYmUgYmFzZWQgb24gdGV4dCBoZSBoYWQgd3JpdHRlbiwgYW5kIHRvIFJhbmR5IER1bmxhcCBhbmQgR2Vycml0CiBIdWl6ZW5nYSBmb3Igc29tZSBvZiB0aGUgbGlzdCBvZiB0aGluZ3MgeW91IHNob3VsZCBhbmQgc2hvdWxkIG5vdCBzYXkuCiBBbHNvIHRoYW5rcyB0byBQYXQgTW9jaGVsLCBIYW5uYSBMaW5kZXIsIFJhbmR5IER1bmxhcCwgS2F5IFNpZXZlcnMsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjcGktaG90a2V5LnR4dCBiL0RvY3VtZW50YXRpb24vYWNwaS1ob3RrZXkudHh0CmluZGV4IDc0NGYxYWUuLjM4MDQwZmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWNwaS1ob3RrZXkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYWNwaS1ob3RrZXkudHh0CkBAIC0zMCw3ICszMCw3IEBACiBlY2hvICJldmVudF9udW06ZXZlbnRfdHlwZTpldmVudF9hcmd1bWVudCIgPiAKIAkvcHJvYy9hY3BpL2hvdGtleS9hY3Rpb24uCiBUaGUgcmVzdWx0IG9mIHRoZSBleGVjdXRpb24gb2YgdGhpcyBhbWwgbWV0aG9kIGlzIAotYXR0YWNoZWQgdG8gL3Byb2MvYWNwaS9ob3RrZXkvcG9sbF9tZXRob2QsIHdoaWNoIGlzIGRueWFtaWNhbGx5CithdHRhY2hlZCB0byAvcHJvYy9hY3BpL2hvdGtleS9wb2xsX21ldGhvZCwgd2hpY2ggaXMgZHluYW1pY2FsbHkKIGNyZWF0ZWQuICBQbGVhc2UgdXNlIGNvbW1hbmQgImNhdCAvcHJvYy9hY3BpL2hvdGtleS9wb2xsaW5nX21ldGhvZCIgCiB0byByZXRyaWV2ZSBpdC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTEzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQKQEAgLTAsMCArMSwyMiBAQAorQXMgb2YgdGhlIExpbnV4IDIuNi4xMCBrZXJuZWwsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlCitJTyBzY2hlZHVsZXIgZm9yIGEgZ2l2ZW4gYmxvY2sgZGV2aWNlIG9uIHRoZSBmbHkgKHRodXMgbWFraW5nIGl0IHBvc3NpYmxlLAorZm9yIGluc3RhbmNlLCB0byBzZXQgdGhlIENGUSBzY2hlZHVsZXIgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCwgYnV0CitzZXQgYSBzcGVjaWZpYyBkZXZpY2UgdG8gdXNlIHRoZSBhbnRpY2lwYXRvcnkgb3Igbm9vcCBzY2hlZHVsZXJzIC0gd2hpY2gKK2NhbiBpbXByb3ZlIHRoYXQgZGV2aWNlJ3MgdGhyb3VnaHB1dCkuCisKK1RvIHNldCBhIHNwZWNpZmljIHNjaGVkdWxlciwgc2ltcGx5IGRvIHRoaXM6CisKK2VjaG8gU0NIRUROQU1FID4gL3N5cy9ibG9jay9ERVYvcXVldWUvc2NoZWR1bGVyCisKK3doZXJlIFNDSEVETkFNRSBpcyB0aGUgbmFtZSBvZiBhIGRlZmluZWQgSU8gc2NoZWR1bGVyLCBhbmQgREVWIGlzIHRoZQorZGV2aWNlIG5hbWUgKGhkYSwgaGRiLCBzZ2EsIG9yIHdoYXRldmVyIHlvdSBoYXBwZW4gdG8gaGF2ZSkuCisKK1RoZSBsaXN0IG9mIGRlZmluZWQgc2NoZWR1bGVycyBjYW4gYmUgZm91bmQgYnkgc2ltcGx5IGRvaW5nCithICJjYXQgL3N5cy9ibG9jay9ERVYvcXVldWUvc2NoZWR1bGVyIiAtIHRoZSBsaXN0IG9mIHZhbGlkIG5hbWVzCit3aWxsIGJlIGRpc3BsYXllZCwgd2l0aCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNjaGVkdWxlciBpbiBicmFja2V0czoKKworIyBjYXQgL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCitub29wIGFudGljaXBhdG9yeSBkZWFkbGluZSBbY2ZxXQorIyBlY2hvIGFudGljaXBhdG9yeSA+IC9zeXMvYmxvY2svaGRhL3F1ZXVlL3NjaGVkdWxlcgorIyBjYXQgL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCitub29wIFthbnRpY2lwYXRvcnldIGRlYWRsaW5lIGNmcQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2luZGV4LnR4dAppbmRleCA1MDA5ODA1Li5mZmRiNTMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2luZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2luZGV4LnR4dApAQCAtNTMsNCArNTMsNCBAQAogKiBodHRwOi8vbGlzdHMubGludXgub3JnLnVrL21haWxtYW4vbGlzdGluZm8vY3B1ZnJlcQogCiBDbG9jayBhbmQgdm9sdGFnZSBzY2FsaW5nIGZvciB0aGUgU0EtMTEwMDoKLSogaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvcHJvamVjdHMvc2NhbGluZworKiBodHRwOi8vd3d3LmxhcnRtYWtlci5ubC9wcm9qZWN0cy9zY2FsaW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAppbmRleCAzYzQwNmFjLi5iMzY5YThjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKQEAgLTE3MjEsMTEgKzE3MjEsNiBAQAogCQlUaGVzZSBkZXZpY2VzIHN1cHBvcnQgdGhlIHNhbWUgQVBJIGFzIHRoZSBnZW5lcmljIFNDU0kKIAkJZGV2aWNlcy4KIAotIDk3IGJsb2NrCVBhY2tldCB3cml0aW5nIGZvciBDRC9EVkQgZGV2aWNlcwotCQkgIDAgPSAvZGV2L3BrdGNkdmQwCUZpcnN0IHBhY2tldC13cml0aW5nIG1vZHVsZQotCQkgIDEgPSAvZGV2L3BrdGNkdmQxCVNlY29uZCBwYWNrZXQtd3JpdGluZyBtb2R1bGUKLQkJICAgIC4uLgotCiAgOTggY2hhcglDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgKGNvbWVkaSkKIAkJICAwID0gL2Rldi9jb21lZGkwCUZpcnN0IGNvbWVkaSBkZXZpY2UKIAkJICAxID0gL2Rldi9jb21lZGkxCVNlY29uZCBjb21lZGkgZGV2aWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQppbmRleCAxNWZjOGZiLi40ODIwMzY2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKQEAgLTI1OSw5ICsyNTksOSBAQAogfQogCiBzdWIgbnh0MjAwMiB7Ci0gICAgbXkgJHNvdXJjZWZpbGUgPSAiQnJvYWRiYW5kNFBDXzRfMl8xMS56aXAiOworICAgIG15ICRzb3VyY2VmaWxlID0gIlRlY2huaXNhdF9EVkItUENfNF80X0NPTVBBQ1QuemlwIjsKICAgICBteSAkdXJsID0gImh0dHA6Ly93d3cuYmJ0aS51cy9kb3dubG9hZC93aW5kb3dzLyRzb3VyY2VmaWxlIjsKLSAgICBteSAkaGFzaCA9ICJjNmQyZWE0N2E4ZjQ1NmQ4ODdhZGEwY2ZiNzE4ZmYyYSI7CisgICAgbXkgJGhhc2ggPSAiNDc2YmVmYWU4YzdjMWJiOTY0ODk1NDA2MGIxZWVjMWYiOwogICAgIG15ICRvdXRmaWxlID0gImR2Yi1mZS1ueHQyMDAyLmZ3IjsKICAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOwogCkBAIC0yNjksOCArMjY5LDggQEAKIAogICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKICAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7Ci0gICAgdmVyaWZ5KCIkdG1wZGlyL1NreU5FVFUuc3lzIiwgJGhhc2gpOwotICAgIGV4dHJhY3QoIiR0bXBkaXIvU2t5TkVUVS5zeXMiLCAzNzU4MzIsIDU5MDgsICRvdXRmaWxlKTsKKyAgICB2ZXJpZnkoIiR0bXBkaXIvU2t5TkVULnN5cyIsICRoYXNoKTsKKyAgICBleHRyYWN0KCIkdG1wZGlyL1NreU5FVC5zeXMiLCAzMzE2MjQsIDU5MDgsICRvdXRmaWxlKTsKIAogICAgICRvdXRmaWxlOwogfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDQ5NTg1OGIuLjQzYWIxMTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTI1LDggKzI1LDkgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CWRyaXZlcnMgZGVwZW5kaW5nIG9uIE9CU09MRVRFX09TU19EUklWRVIKLVdoZW46CUphbnVhcnkgMjAwNgorV2hhdDoJZHJpdmVycyB0aGF0IHdlcmUgZGVwZW5kaW5nIG9uIE9CU09MRVRFX09TU19EUklWRVIKKyAgICAgICAgKGNvbmZpZyBvcHRpb25zIGFscmVhZHkgcmVtb3ZlZCkKK1doZW46CWJlZm9yZSAyLjYuMTkKIFdoeToJT1NTIGRyaXZlcnMgd2l0aCBBTFNBIHJlcGxhY2VtZW50cwogV2hvOglBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+CiAKQEAgLTU2LDYgKzU3LDE1IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglzYnAyOiBtb2R1bGUgcGFyYW1ldGVyICJmb3JjZV9pbnF1aXJ5X2hhY2siCitXaGVuOglKdWx5IDIwMDYKK1doeToJU3VwZXJjZWRlZCBieSBwYXJhbWV0ZXIgIndvcmthcm91bmRzIi4gQm90aCBwYXJhbWV0ZXJzIGFyZSBtZWFudCB0byBiZQorCXVzZWQgYWQtaG9jIGFuZCBmb3Igc2luZ2xlIGRldmljZXMgb25seSwgaS5lLiBub3QgaW4gbW9kcHJvYmUuY29uZiwKKwl0aGVyZWZvcmUgdGhlIGltcGFjdCBvZiB0aGlzIGZlYXR1cmUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIGxvdy4KK1dobzoJU3RlZmFuIFJpY2h0ZXIgPHN0ZWZhbnJAczVyNi5pbi1iZXJsaW4uZGU+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OglWaWRlbzRMaW51eCBBUEkgMSBpb2N0bHMgYW5kIHZpZGVvX2RlY29kZXIuaCBmcm9tIFZpZGVvIGRldmljZXMuCiBXaGVuOglKdWx5IDIwMDYKIFdoeToJVjRMMSBBUDEgd2FzIHJlcGxhY2VkIGJ5IFY0TDIgQVBJLiBkdXJpbmcgbWlncmF0aW9uIGZyb20gMi40IHRvIDIuNgpAQCAtNzEsMTQgKzgxLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CXJlbW92ZSBFWFBPUlRfU1lNQk9MKHBhbmljX3RpbWVvdXQpCi1XaGVuOglBcHJpbCAyMDA2Ci1GaWxlczoJa2VybmVsL3BhbmljLmMKLVdoeToJTm8gbW9kdWxhciB1c2FnZSBpbiB0aGUga2VybmVsLgotV2hvOglBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglyZW1vdmUgRVhQT1JUX1NZTUJPTChpbnNlcnRfcmVzb3VyY2UpCiBXaGVuOglBcHJpbCAyMDA2CiBGaWxlczoJa2VybmVsL3Jlc291cmNlLmMKQEAgLTEyNywxMyArMTI5LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CUVYUE9SVF9TWU1CT0wobG9va3VwX2hhc2gpCi1XaGVuOglKYW51YXJ5IDIwMDYKLVdoeToJVG9vIGxvdy1sZXZlbCBpbnRlcmZhY2UuICBVc2UgbG9va3VwX29uZV9sZW4gb3IgbG9va3VwX2NyZWF0ZSBpbnN0ZWFkLgotV2hvOglDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CUNPTkZJR19GT1JDRURfSU5MSU5JTkcKIFdoZW46CUp1bmUgMjAwNgogV2h5OglDb25maWcgb3B0aW9uIGlzIHRoZXJlIHRvIHNlZSBpZiBnY2MgaXMgZ29vZCBlbm91Z2guIChpbiBqYW51YXJ5CkBAIC0yNDEsMyArMjM2LDE1IEBACiBXaG86CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglmaW5kX3RyeWxvY2tfcGFnZQorV2hlbjoJSmFudWFyeSAyMDA3CitXaHk6CVRoZSBpbnRlcmZhY2Ugbm8gbG9uZ2VyIGhhcyBhbnkgY2FsbGVycyBsZWZ0IGluIHRoZSBrZXJuZWwuIEl0CisJaXMgYW4gb2RkIGludGVyZmFjZSAoY29tcGFyZWQgd2l0aCBvdGhlciBmaW5kXypfcGFnZSBmdW5jdGlvbnMpLCBpbgorCXRoYXQgaXQgZG9lcyBub3QgdGFrZSBhIHJlZmNvdW50IHRvIHRoZSBwYWdlLCBvbmx5IHRoZSBwYWdlIGxvY2suCisJSXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggZmluZF9nZXRfcGFnZSBvciBmaW5kX2xvY2tfcGFnZSBpZiBwb3NzaWJsZS4KKwlUaGlzIGZlYXR1cmUgcmVtb3ZhbCBjYW4gYmUgcmVldmFsdWF0ZWQgaWYgdXNlcnMgb2YgdGhlIGludGVyZmFjZQorCWNhbm5vdCBjbGVhbmx5IHVzZSBzb21ldGhpbmcgZWxzZS4KK1dobzoJTmljayBQaWdnaW4gPG5waWdnaW5Ac3VzZS5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CmluZGV4IGM4YmNlODIuLjg5YjFkMTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CkBAIC0yNDYsNiArMjQ2LDcgQEAKIGRldmljZXMvCiBmaXJtd2FyZS8KIG5ldC8KK2ZzLwogCiBkZXZpY2VzLyBjb250YWlucyBhIGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gb2YgdGhlIGRldmljZSB0cmVlLiBJdCBtYXBzCiBkaXJlY3RseSB0byB0aGUgaW50ZXJuYWwga2VybmVsIGRldmljZSB0cmVlLCB3aGljaCBpcyBhIGhpZXJhcmNoeSBvZgpAQCAtMjY0LDYgKzI2NSwxMCBAQAogZm9yIGRldmljZXMgb24gdGhhdCBwYXJ0aWN1bGFyIGJ1cyAodGhpcyBhc3N1bWVzIHRoYXQgZHJpdmVycyBkbyBub3QKIHNwYW4gbXVsdGlwbGUgYnVzIHR5cGVzKS4KIAorZnMvIGNvbnRhaW5zIGEgZGlyZWN0b3J5IGZvciBzb21lIGZpbGVzeXN0ZW1zLiAgQ3VycmVudGx5IGVhY2gKK2ZpbGVzeXN0ZW0gd2FudGluZyB0byBleHBvcnQgYXR0cmlidXRlcyBtdXN0IGNyZWF0ZSBpdHMgb3duIGhpZXJhcmNoeQorYmVsb3cgZnMvIChzZWUgLi9mdXNlLnR4dCBmb3IgYW4gZXhhbXBsZSkuCisKIAogTW9yZSBpbmZvcm1hdGlvbiBjYW4gZHJpdmVyLW1vZGVsIHNwZWNpZmljIGZlYXR1cmVzIGNhbiBiZSBmb3VuZCBpbgogRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvLiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAppbmRleCBhZGFhODk5Li4zYTJlNTUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CkBAIC02OTQsNyArNjk0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBkZXNjcmliZXMgaG93IHRoZSBWRlMgY2FuIG1hbmlwdWxhdGUgYW4gb3BlbiBmaWxlLiBBcyBvZiBrZXJuZWwKLTIuNi4xMywgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgorMi42LjE3LCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIGRlZmluZWQ6CiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgewogCWxvZmZfdCAoKmxsc2VlaykgKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKQEAgLTcyMyw2ICs3MjMsMTAgQEAKIAlpbnQgKCpjaGVja19mbGFncykoaW50KTsKIAlpbnQgKCpkaXJfbm90aWZ5KShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCWludCAoKmZsb2NrKSAoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworCXNzaXplX3QgKCpzcGxpY2Vfd3JpdGUpKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCAKK2ludCk7CisJc3NpemVfdCAoKnNwbGljZV9yZWFkKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgIAoraW50KTsKIH07CiAKIEFnYWluLCBhbGwgbWV0aG9kcyBhcmUgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzIGJlaW5nIGhlbGQsIHVubGVzcwpAQCAtNzkwLDYgKzc5NCwxMiBAQAogCiAgIGZsb2NrOiBjYWxsZWQgYnkgdGhlIGZsb2NrKDIpIHN5c3RlbSBjYWxsCiAKKyAgc3BsaWNlX3dyaXRlOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBzcGxpY2UgZGF0YSBmcm9tIGEgcGlwZSB0byBhIGZpbGUuIFRoaXMKKwkJbWV0aG9kIGlzIHVzZWQgYnkgdGhlIHNwbGljZSgyKSBzeXN0ZW0gY2FsbAorCisgIHNwbGljZV9yZWFkOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBzcGxpY2UgZGF0YSBmcm9tIGZpbGUgdG8gYSBwaXBlLiBUaGlzCisJICAgICAgIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBzcGxpY2UoMikgc3lzdGVtIGNhbGwKKwogTm90ZSB0aGF0IHRoZSBmaWxlIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSBzcGVjaWZpYwogZmlsZXN5c3RlbSBpbiB3aGljaCB0aGUgaW5vZGUgcmVzaWRlcy4gV2hlbiBvcGVuaW5nIGEgZGV2aWNlIG5vZGUKIChjaGFyYWN0ZXIgb3IgYmxvY2sgc3BlY2lhbCkgbW9zdCBmaWxlc3lzdGVtcyB3aWxsIGNhbGwgc3BlY2lhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL1JFQURNRQppbmRleCA0M2U4MzZjLi5lOWNjOGJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL1JFQURNRQpAQCAtMTA1LDIwICsxMDUsMyBAQAogICAgb24gdGhlIHNldHVwLCBzbyBJIHRoaW5rIHRoYXQgdGhlIGNob2ljZSBvbiB3aGF0IGZpcm13YXJlIHRvIG1ha2UKICAgIHBlcnNpc3RlbnQgc2hvdWxkIGJlIGxlZnQgdG8gdXNlcnNwYWNlLgogCi0gLSBXaHkgcmVnaXN0ZXJfZmlybXdhcmUoKStfX2luaXQgY2FuIGJlIHVzZWZ1bDoKLSAJLSBGb3IgYm9vdCBkZXZpY2VzIG5lZWRpbmcgZmlybXdhcmUuCi0JLSBUbyBtYWtlIHRoZSB0cmFuc2l0aW9uIGVhc2llcjoKLQkJVGhlIGZpcm13YXJlIGNhbiBiZSBkZWNsYXJlZCBfX2luaXQgYW5kIHJlZ2lzdGVyX2Zpcm13YXJlKCkKLQkJY2FsbGVkIG9uIG1vZHVsZV9pbml0LiBUaGVuIHRoZSBmaXJtd2FyZSBpcyB3YXJyYW50ZWQgdG8gYmUKLQkJdGhlcmUgZXZlbiBpZiAiZmlybXdhcmUgaG90cGx1ZyB1c2Vyc3BhY2UiIGlzIG5vdCB0aGVyZSB5ZXQgb3IKLQkJaXQgZG9lc24ndCB5ZXQgcHJvdmlkZSB0aGUgbmVlZGVkIGZpcm13YXJlLgotCQlPbmNlIHRoZSBmaXJtd2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGluIHVzZXJzcGFjZSwgaXQgY2FuIGJlCi0JCXJlbW92ZWQgZnJvbSB0aGUga2VybmVsLiBPciBtYWRlIG9wdGlvbmFsIChDT05GSUdfLipfRklSTVdBUkUpLgotCi0JSW4gZWl0aGVyIGNhc2UsIGlmIGZpcm13YXJlIGhvdHBsdWcgc3VwcG9ydCBpcyB0aGVyZSwgaXQgY2FuIG1vdmUgdGhlCi0JZmlybXdhcmUgb3V0IG9mIGtlcm5lbCBtZW1vcnkgaW50byB0aGUgcmVhbCBmaWxlc3lzdGVtIGZvciBsYXRlcgotCXVzYWdlLgotCi0JTm90ZTogSWYgcGVyc2lzdGVuY2UgaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mIGluaXRyYW1mcywKLQlyZWdpc3Rlcl9maXJtd2FyZSgpIG1heSBub3QgYmUgYXBwcm9wcmlhdGUuCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2RyaXZlci5jIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMKaW5kZXggYWQzZWRhYi4uODdmZWNjZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMKQEAgLTUsOCArNSw2IEBACiAgKgogICogU2FtcGxlIGNvZGUgb24gaG93IHRvIHVzZSByZXF1ZXN0X2Zpcm13YXJlKCkgZnJvbSBkcml2ZXJzLgogICoKLSAqIE5vdGUgdGhhdCByZWdpc3Rlcl9maXJtd2FyZSgpIGlzIGN1cnJlbnRseSB1c2VsZXNzLgotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNywxMSArMTUsNiBAQAogCiAjaW5jbHVkZSAibGludXgvZmlybXdhcmUuaCIKIAotI2RlZmluZSBXRV9DQU5fTkVFRF9GSVJNV0FSRV9CRUZPUkVfVVNFUlNQQUNFX0lTX0FWQUlMQUJMRQotI2lmZGVmIFdFX0NBTl9ORUVEX0ZJUk1XQVJFX0JFRk9SRV9VU0VSU1BBQ0VfSVNfQVZBSUxBQkxFCi1jaGFyIF9faW5pdCBpbmtlcm5lbF9maXJtd2FyZVtdID0gImxldCdzIHNheSB0aGF0IHRoaXMgaXMgZmlybXdhcmVcbiI7Ci0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBkZXZpY2UgZ2hvc3RfZGV2aWNlID0gewogCS5idXNfaWQgICAgPSAiZ2hvc3QwIiwKIH07CkBAIC0xMDQsMTAgKzk3LDYgQEAKIAogc3RhdGljIGludCBzYW1wbGVfaW5pdCh2b2lkKQogewotI2lmZGVmIFdFX0NBTl9ORUVEX0ZJUk1XQVJFX0JFRk9SRV9VU0VSU1BBQ0VfSVNfQVZBSUxBQkxFCi0JcmVnaXN0ZXJfZmlybXdhcmUoInNhbXBsZV9kcml2ZXJfZnciLCBpbmtlcm5lbF9maXJtd2FyZSwKLQkJCSAgc2l6ZW9mKGlua2VybmVsX2Zpcm13YXJlKSk7Ci0jZW5kaWYKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmZ2hvc3RfZGV2aWNlKTsKIAkvKiBzaW5jZSB0aGVyZSBpcyBubyByZWFsIGhhcmR3YXJlIGluc2VydGlvbiBJIGp1c3QgY2FsbCB0aGUKIAkgKiBzYW1wbGUgcHJvYmUgZnVuY3Rpb25zIGhlcmUgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYva2VybmVsLUFCSS50eHQgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2tlcm5lbC1BQkkudHh0CmluZGV4IDBlZDliMGEuLjhiMGE1ZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYva2VybmVsLUFCSS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9rZXJuZWwtQUJJLnR4dApAQCAtMSwxNyArMSwxOSBAQAotCQkJCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQkJCQkgSU5URVJOQUwgS0VSTkVMIEFCSSBGT1IgRlItViBBUkNICi0JCQkJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQlJTlRFUk5BTCBLRVJORUwgQUJJIEZPUiBGUi1WIEFSQ0gKKwkJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgaW50ZXJuYWwgRlJWIGtlcm5lbCBBQkkgaXMgbm90IHF1aXRlIHRoZSBzYW1lIGFzIHRoZSB1c2Vyc3BhY2UgQUJJLiBBIG51bWJlciBvZiB0aGUgcmVnaXN0ZXJzCi1hcmUgdXNlZCBmb3Igc3BlY2lhbCBwdXJwb3NlZCwgYW5kIHRoZSBBQkkgaXMgbm90IGNvbnNpc3RlbnQgYmV0d2VlbiBtb2R1bGVzIHZzIGNvcmUsIGFuZCBNTVUgdnMKLW5vLU1NVS4KK1RoZSBpbnRlcm5hbCBGUlYga2VybmVsIEFCSSBpcyBub3QgcXVpdGUgdGhlIHNhbWUgYXMgdGhlIHVzZXJzcGFjZSBBQkkuIEEKK251bWJlciBvZiB0aGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvciBzcGVjaWFsIHB1cnBvc2VkLCBhbmQgdGhlIEFCSSBpcyBub3QKK2NvbnNpc3RlbnQgYmV0d2VlbiBtb2R1bGVzIHZzIGNvcmUsIGFuZCBNTVUgdnMgbm8tTU1VLgogCi1UaGlzIHBhcnRseSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgRlJWIENQVXMgZG8gbm90IGhhdmUgYSBzZXBhcmF0ZSBzdXBlcnZpc29yIHN0YWNrIHBvaW50ZXIsIGFuZAotbW9zdCBvZiB0aGVtIGRvIG5vdCBoYXZlIGFueSBzY3JhdGNoIHJlZ2lzdGVycywgdGh1cyByZXF1aXJpbmcgYXQgbGVhc3Qgb25lIGdlbmVyYWwgcHVycG9zZQotcmVnaXN0ZXIgdG8gYmUgY2xvYmJlcmVkIGluIHN1Y2ggYW4gZXZlbnQuIEFsc28sIHdpdGhpbiB0aGUga2VybmVsIGNvcmUsIGl0IGlzIHBvc3NpYmxlIHRvIHNpbXBseQotanVtcCBvciBjYWxsIGRpcmVjdGx5IGJldHdlZW4gZnVuY3Rpb25zIHVzaW5nIGEgcmVsYXRpdmUgb2Zmc2V0LiBUaGlzIGNhbm5vdCBiZSBleHRlbmRlZCB0byBtb2R1bGVzCi1mb3IgdGhlIGRpc3BsYWNlbWVudCBpcyBsaWtlbHkgdG8gYmUgdG9vIGZhci4gVGh1cyBpbiBtb2R1bGVzIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gdG8gY2FsbAotbXVzdCBiZSBjYWxjdWxhdGVkIGluIGEgcmVnaXN0ZXIgYW5kIHRoZW4gdXNlZCwgcmVxdWlyaW5nIHR3byBleHRyYSBpbnN0cnVjdGlvbnMuCitUaGlzIHBhcnRseSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgRlJWIENQVXMgZG8gbm90IGhhdmUgYSBzZXBhcmF0ZQorc3VwZXJ2aXNvciBzdGFjayBwb2ludGVyLCBhbmQgbW9zdCBvZiB0aGVtIGRvIG5vdCBoYXZlIGFueSBzY3JhdGNoCityZWdpc3RlcnMsIHRodXMgcmVxdWlyaW5nIGF0IGxlYXN0IG9uZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgdG8gYmUKK2Nsb2JiZXJlZCBpbiBzdWNoIGFuIGV2ZW50LiBBbHNvLCB3aXRoaW4gdGhlIGtlcm5lbCBjb3JlLCBpdCBpcyBwb3NzaWJsZSB0bworc2ltcGx5IGp1bXAgb3IgY2FsbCBkaXJlY3RseSBiZXR3ZWVuIGZ1bmN0aW9ucyB1c2luZyBhIHJlbGF0aXZlIG9mZnNldC4KK1RoaXMgY2Fubm90IGJlIGV4dGVuZGVkIHRvIG1vZHVsZXMgZm9yIHRoZSBkaXNwbGFjZW1lbnQgaXMgbGlrZWx5IHRvIGJlIHRvbworZmFyLiBUaHVzIGluIG1vZHVsZXMgdGhlIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiB0byBjYWxsIG11c3QgYmUgY2FsY3VsYXRlZAoraW4gYSByZWdpc3RlciBhbmQgdGhlbiB1c2VkLCByZXF1aXJpbmcgdHdvIGV4dHJhIGluc3RydWN0aW9ucy4KIAogVGhpcyBkb2N1bWVudCBoYXMgdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKIApAQCAtMzksNyArNDEsOCBAQAogQ1BVIE9QRVJBVElORyBNT0RFUwogPT09PT09PT09PT09PT09PT09PQogCi1UaGUgRlItViBDUFUgaGFzIHRocmVlIGJhc2ljIG9wZXJhdGluZyBtb2Rlcy4gSW4gb3JkZXIgb2YgaW5jcmVhc2luZyBjYXBhYmlsaXR5OgorVGhlIEZSLVYgQ1BVIGhhcyB0aHJlZSBiYXNpYyBvcGVyYXRpbmcgbW9kZXMuIEluIG9yZGVyIG9mIGluY3JlYXNpbmcKK2NhcGFiaWxpdHk6CiAKICAgKDEpIFVzZXIgbW9kZS4KIApAQCAtNDcsNDIgKzUwLDQ2IEBACiAKICAgKDIpIEtlcm5lbCBtb2RlLgogCi0gICAgICBOb3JtYWwga2VybmVsIG1vZGUuIFRoZXJlIGFyZSBtYW55IGFkZGl0aW9uYWwgY29udHJvbCByZWdpc3RlcnMgYXZhaWxhYmxlIHRoYXQgbWF5IGJlCi0gICAgICBhY2Nlc3NlZCBpbiB0aGlzIG1vZGUsIGluIGFkZGl0aW9uIHRvIGFsbCB0aGUgc3R1ZmYgYXZhaWxhYmxlIHRvIHVzZXIgbW9kZS4gVGhpcyBoYXMgdHdvCi0gICAgICBzdWJtb2RlczoKKyAgICAgIE5vcm1hbCBrZXJuZWwgbW9kZS4gVGhlcmUgYXJlIG1hbnkgYWRkaXRpb25hbCBjb250cm9sIHJlZ2lzdGVycworICAgICAgYXZhaWxhYmxlIHRoYXQgbWF5IGJlIGFjY2Vzc2VkIGluIHRoaXMgbW9kZSwgaW4gYWRkaXRpb24gdG8gYWxsIHRoZQorICAgICAgc3R1ZmYgYXZhaWxhYmxlIHRvIHVzZXIgbW9kZS4gVGhpcyBoYXMgdHdvIHN1Ym1vZGVzOgogCiAgICAgICAoYSkgRXhjZXB0aW9ucyBlbmFibGVkIChQU1IuVCA9PSAxKS4KIAotICAgICAgCSAgRXhjZXB0aW9ucyB3aWxsIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgbm9ybWFsIGtlcm5lbCBtb2RlIGhhbmRsZXIuIE9uIGVudHJ5IHRvIHRoZQotICAgICAgCSAgaGFuZGxlciwgdGhlIFBTUi5UIGJpdCB3aWxsIGJlIGNsZWFyZWQuCisJICBFeGNlcHRpb25zIHdpbGwgaW52b2tlIHRoZSBhcHByb3ByaWF0ZSBub3JtYWwga2VybmVsIG1vZGUKKwkgIGhhbmRsZXIuIE9uIGVudHJ5IHRvIHRoZSBoYW5kbGVyLCB0aGUgUFNSLlQgYml0IHdpbGwgYmUgY2xlYXJlZC4KIAogICAgICAgKGIpIEV4Y2VwdGlvbnMgZGlzYWJsZWQgKFBTUi5UID09IDApLgogCi0gICAgICAJICBObyBleGNlcHRpb25zIG9yIGludGVycnVwdHMgbWF5IGhhcHBlbi4gQW55IG1hbmRhdG9yeSBleGNlcHRpb25zIHdpbGwgY2F1c2UgdGhlIENQVSB0bwotICAgICAgCSAgaGFsdCB1bmxlc3MgdGhlIENQVSBpcyB0b2xkIHRvIGp1bXAgaW50byBkZWJ1ZyBtb2RlIGluc3RlYWQuCisJICBObyBleGNlcHRpb25zIG9yIGludGVycnVwdHMgbWF5IGhhcHBlbi4gQW55IG1hbmRhdG9yeSBleGNlcHRpb25zCisJICB3aWxsIGNhdXNlIHRoZSBDUFUgdG8gaGFsdCB1bmxlc3MgdGhlIENQVSBpcyB0b2xkIHRvIGp1bXAgaW50bworCSAgZGVidWcgbW9kZSBpbnN0ZWFkLgogCiAgICgzKSBEZWJ1ZyBtb2RlLgogCi0gICAgICBObyBleGNlcHRpb25zIG1heSBoYXBwZW4gaW4gdGhpcyBtb2RlLiBNZW1vcnkgcHJvdGVjdGlvbiBhbmQgbWFuYWdlbWVudCBleGNlcHRpb25zIHdpbGwgYmUKLSAgICAgIGZsYWdnZWQgZm9yIGxhdGVyIGNvbnNpZGVyYXRpb24sIGJ1dCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgd29uJ3QgYmUgaW52b2tlZC4gRGVidWdnaW5nIHRyYXBzCi0gICAgICBzdWNoIGFzIGhhcmR3YXJlIGJyZWFrcG9pbnRzIGFuZCB3YXRjaHBvaW50cyB3aWxsIGJlIGlnbm9yZWQuIFRoaXMgbW9kZSBpcyBlbnRlcmVkIG9ubHkgYnkKLSAgICAgIGRlYnVnZ2luZyBldmVudHMgb2J0YWluZWQgZnJvbSB0aGUgb3RoZXIgdHdvIG1vZGVzLgorICAgICAgTm8gZXhjZXB0aW9ucyBtYXkgaGFwcGVuIGluIHRoaXMgbW9kZS4gTWVtb3J5IHByb3RlY3Rpb24gYW5kCisgICAgICBtYW5hZ2VtZW50IGV4Y2VwdGlvbnMgd2lsbCBiZSBmbGFnZ2VkIGZvciBsYXRlciBjb25zaWRlcmF0aW9uLCBidXQKKyAgICAgIHRoZSBleGNlcHRpb24gaGFuZGxlciB3b24ndCBiZSBpbnZva2VkLiBEZWJ1Z2dpbmcgdHJhcHMgc3VjaCBhcworICAgICAgaGFyZHdhcmUgYnJlYWtwb2ludHMgYW5kIHdhdGNocG9pbnRzIHdpbGwgYmUgaWdub3JlZC4gVGhpcyBtb2RlIGlzCisgICAgICBlbnRlcmVkIG9ubHkgYnkgZGVidWdnaW5nIGV2ZW50cyBvYnRhaW5lZCBmcm9tIHRoZSBvdGhlciB0d28gbW9kZXMuCiAKLSAgICAgIEFsbCBrZXJuZWwgbW9kZSByZWdpc3RlcnMgbWF5IGJlIGFjY2Vzc2VkLCBwbHVzIGEgZmV3IGV4dHJhIGRlYnVnZ2luZyBzcGVjaWZpYyByZWdpc3RlcnMuCisgICAgICBBbGwga2VybmVsIG1vZGUgcmVnaXN0ZXJzIG1heSBiZSBhY2Nlc3NlZCwgcGx1cyBhIGZldyBleHRyYSBkZWJ1Z2dpbmcKKyAgICAgIHNwZWNpZmljIHJlZ2lzdGVycy4KIAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIElOVEVSTkFMIEtFUk5FTC1NT0RFIFJFR0lTVEVSIEFCSQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZXJlIGFyZSBhIG51bWJlciBvZiBwZXJtYW5lbnQgcmVnaXN0ZXIgYXNzaWdubWVudHMgdGhhdCBhcmUgc2V0IHVwIGJ5IGVudHJ5LlMgaW4gdGhlIGV4Y2VwdGlvbgotcHJvbG9ndWUuIE5vdGUgdGhhdCB0aGVyZSBpcyBhIGNvbXBsZXRlIHNldCBvZiBleGNlcHRpb24gcHJvbG9ndWVzIGZvciBlYWNoIG9mIHVzZXItPmtlcm5lbAotdHJhbnNpdGlvbiBhbmQga2VybmVsLT5rZXJuZWwgdHJhbnNpdGlvbi4gVGhlcmUgYXJlIGFsc28gdXNlci0+ZGVidWcgYW5kIGtlcm5lbC0+ZGVidWcgbW9kZQotdHJhbnNpdGlvbiBwcm9sb2d1ZXMuCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgcGVybWFuZW50IHJlZ2lzdGVyIGFzc2lnbm1lbnRzIHRoYXQgYXJlIHNldCB1cCBieQorZW50cnkuUyBpbiB0aGUgZXhjZXB0aW9uIHByb2xvZ3VlLiBOb3RlIHRoYXQgdGhlcmUgaXMgYSBjb21wbGV0ZSBzZXQgb2YKK2V4Y2VwdGlvbiBwcm9sb2d1ZXMgZm9yIGVhY2ggb2YgdXNlci0+a2VybmVsIHRyYW5zaXRpb24gYW5kIGtlcm5lbC0+a2VybmVsCit0cmFuc2l0aW9uLiBUaGVyZSBhcmUgYWxzbyB1c2VyLT5kZWJ1ZyBhbmQga2VybmVsLT5kZWJ1ZyBtb2RlIHRyYW5zaXRpb24KK3Byb2xvZ3Vlcy4KIAogCiAJUkVHSVNURVIJRkxBVk9VUglVU0UKLQk9PT09PT09PT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJPT09PT09PT09PT09PT09CT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCUdSMQkJCVN1cGVydmlzb3Igc3RhY2sgcG9pbnRlcgogCUdSMTUJCQlDdXJyZW50IHRocmVhZCBpbmZvIHBvaW50ZXIKIAlHUjE2CQkJR1AtUmVsIGJhc2UgcmVnaXN0ZXIgZm9yIHNtYWxsIGRhdGEKQEAgLTkyLDEwICs5OSwxMiBAQAogCUdSMzEJCU5PTU1VCURlc3Ryb3llZCBieSBkZWJ1ZyBtb2RlIGVudHJ5CiAJR1IzMQkJTU1VCURlc3Ryb3llZCBieSBUTEIgbWlzcyBrZXJuZWwgbW9kZSBlbnRyeQogCUNDUi5JQ0MyCQlWaXJ0dWFsIGludGVycnVwdCBkaXNhYmxlbWVudCB0cmFja2luZwotCUNDQ1IuQ0MzCQlDbGVhcmVkIGJ5IGV4Y2VwdGlvbiBwcm9sb2d1ZSAoYXRvbWljIG9wIGVtdWxhdGlvbikKKwlDQ0NSLkNDMwkJQ2xlYXJlZCBieSBleGNlcHRpb24gcHJvbG9ndWUgCisJCQkJKGF0b21pYyBvcCBlbXVsYXRpb24pCiAJU0NSMAkJTU1VCVNlZSBtbXUtbGF5b3V0LnR4dC4KIAlTQ1IxCQlNTVUJU2VlIG1tdS1sYXlvdXQudHh0LgotCVNDUjIJCU1NVQlTYXZlIGZvciBFQVIwIChkZXN0cm95ZWQgYnkgaWNhY2hlIGluc25zIGluIGRlYnVnIG1vZGUpCisJU0NSMgkJTU1VCVNhdmUgZm9yIEVBUjAgKGRlc3Ryb3llZCBieSBpY2FjaGUgaW5zbnMgCisJCQkJCSAgICAgICBpbiBkZWJ1ZyBtb2RlKQogCVNDUjMJCU1NVQlTYXZlIGZvciBHUjMxIGR1cmluZyBkZWJ1ZyBleGNlcHRpb25zCiAJREFNUi9JQU1SCU5PTU1VCUZpeGVkIG1lbW9yeSBwcm90ZWN0aW9uIGxheW91dC4KIAlEQU1SL0lBTVIJTU1VCVNlZSBtbXUtbGF5b3V0LnR4dC4KQEAgLTEwNCwxOCArMTEzLDIxIEBACiBDZXJ0YWluIHJlZ2lzdGVycyBhcmUgYWxzbyB1c2VkIG9yIG1vZGlmaWVkIGFjcm9zcyBmdW5jdGlvbiBjYWxsczoKIAogCVJFR0lTVEVSCUNBTEwJCQkJUkVUVVJOCi0JPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT0KIAlHUjAJCUZpeGVkIFplcm8JCQktCiAJR1IyCQlGdW5jdGlvbiBjYWxsIGZyYW1lIHBvaW50ZXIKIAlHUjMJCVNwZWNpYWwJCQkJUHJlc2VydmVkCiAJR1IzLUdSNwkJLQkJCQlDbG9iYmVyZWQKLQlHUjgJCUZ1bmN0aW9uIGNhbGwgYXJnICMxCQlSZXR1cm4gdmFsdWUgKG9yIGNsb2JiZXJlZCkKLQlHUjkJCUZ1bmN0aW9uIGNhbGwgYXJnICMyCQlSZXR1cm4gdmFsdWUgTVNXIChvciBjbG9iYmVyZWQpCisJR1I4CQlGdW5jdGlvbiBjYWxsIGFyZyAjMQkJUmV0dXJuIHZhbHVlIAorCQkJCQkJCShvciBjbG9iYmVyZWQpCisJR1I5CQlGdW5jdGlvbiBjYWxsIGFyZyAjMgkJUmV0dXJuIHZhbHVlIE1TVyAKKwkJCQkJCQkob3IgY2xvYmJlcmVkKQogCUdSMTAtR1IxMwlGdW5jdGlvbiBjYWxsIGFyZyAjMy0jNgkJQ2xvYmJlcmVkCiAJR1IxNAkJLQkJCQlDbG9iYmVyZWQKIAlHUjE1LUdSMTYJU3BlY2lhbAkJCQlQcmVzZXJ2ZWQKIAlHUjE3LUdSMjcJLQkJCQlQcmVzZXJ2ZWQKLQlHUjI4LUdSMzEJU3BlY2lhbAkJCQlPbmx5IGFjY2Vzc2VkIGV4cGxpY2l0bHkKKwlHUjI4LUdSMzEJU3BlY2lhbAkJCQlPbmx5IGFjY2Vzc2VkIAorCQkJCQkJCWV4cGxpY2l0bHkKIAlMUgkJUmV0dXJuIGFkZHJlc3MgYWZ0ZXIgQ0FMTAlDbG9iYmVyZWQKIAlDQ1IvQ0NDUgktCQkJCU1vc3RseSBDbG9iYmVyZWQKIApAQCAtMTI0LDQ2ICsxMzYsNTMgQEAKIElOVEVSTkFMIERFQlVHLU1PREUgUkVHSVNURVIgQUJJCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBrZXJuZWwtbW9kZSByZWdpc3RlciBBQkkgZm9yIGZ1bmN0aW9ucyBjYWxscy4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBpbgotZGVidWctbW9kZSB0aGVyZSdzIGEgZGlmZmVyZW50IHN0YWNrIGFuZCBhIGRpZmZlcmVudCBleGNlcHRpb24gZnJhbWUuIEFsbW9zdCBhbGwgdGhlIGdsb2JhbAotcmVnaXN0ZXJzIGZyb20ga2VybmVsLW1vZGUgKGluY2x1ZGluZyB0aGUgc3RhY2sgcG9pbnRlcikgbWF5IGJlIGNoYW5nZWQuCitUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBrZXJuZWwtbW9kZSByZWdpc3RlciBBQkkgZm9yIGZ1bmN0aW9ucyBjYWxscy4gVGhlCitkaWZmZXJlbmNlIGlzIHRoYXQgaW4gZGVidWctbW9kZSB0aGVyZSdzIGEgZGlmZmVyZW50IHN0YWNrIGFuZCBhIGRpZmZlcmVudAorZXhjZXB0aW9uIGZyYW1lLiBBbG1vc3QgYWxsIHRoZSBnbG9iYWwgcmVnaXN0ZXJzIGZyb20ga2VybmVsLW1vZGUKKyhpbmNsdWRpbmcgdGhlIHN0YWNrIHBvaW50ZXIpIG1heSBiZSBjaGFuZ2VkLgogCiAJUkVHSVNURVIJRkxBVk9VUglVU0UKLQk9PT09PT09PT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJPT09PT09PT09PT09PT09CT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCUdSMQkJCURlYnVnIHN0YWNrIHBvaW50ZXIKIAlHUjE2CQkJR1AtUmVsIGJhc2UgcmVnaXN0ZXIgZm9yIHNtYWxsIGRhdGEKLQlHUjMxCQkJQ3VycmVudCBkZWJ1ZyBleGNlcHRpb24gZnJhbWUgcG9pbnRlciAoX19kZWJ1Z19mcmFtZSkKKwlHUjMxCQkJQ3VycmVudCBkZWJ1ZyBleGNlcHRpb24gZnJhbWUgcG9pbnRlciAKKwkJCQkoX19kZWJ1Z19mcmFtZSkKIAlTQ1IzCQlNTVUJU2F2ZWQgdmFsdWUgb2YgR1IzMQogCiAKLU5vdGUgdGhhdCBkZWJ1ZyBtb2RlIGlzIGFibGUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIGtlcm5lbCdzIGVtdWxhdGVkIGF0b21pYyBvcHMsIHNvIGl0IG11c3QgYmUKLWV4Y2VlZGluZ2x5IGNhcmVmdWwgbm90IHRvIGRvIGFueSB0aGF0IHdvdWxkIGludGVyYWN0IHdpdGggdGhlIG1haW4ga2VybmVsIGluIHRoaXMgcmVnYXJkLiBIZW5jZQotdGhlIGRlYnVnIG1vZGUgY29kZSAoZ2Ric3R1YikgaXMgYWxtb3N0IGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQuIFRoZSBvbmx5IGV4dGVybmFsIGNvZGUgdXNlZCBpcwotdGhlIHNwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KK05vdGUgdGhhdCBkZWJ1ZyBtb2RlIGlzIGFibGUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIGtlcm5lbCdzIGVtdWxhdGVkIGF0b21pYworb3BzLCBzbyBpdCBtdXN0IGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgbm90IHRvIGRvIGFueSB0aGF0IHdvdWxkIGludGVyYWN0Cit3aXRoIHRoZSBtYWluIGtlcm5lbCBpbiB0aGlzIHJlZ2FyZC4gSGVuY2UgdGhlIGRlYnVnIG1vZGUgY29kZSAoZ2Ric3R1YikgaXMKK2FsbW9zdCBjb21wbGV0ZWx5IHNlbGYtY29udGFpbmVkLiBUaGUgb25seSBleHRlcm5hbCBjb2RlIHVzZWQgaXMgdGhlCitzcHJpbnRmIGZhbWlseSBvZiBmdW5jdGlvbnMuCiAKLUZ1dGhlcm1vcmUsIGJyZWFrLlMgaXMgc28gY29tcGxpY2F0ZWQgYmVjYXVzZSBzaW5nbGUtc3RlcCBtb2RlIGRvZXMgbm90IHN3aXRjaCBvZmYgb24gZW50cnkgdG8gYW4KLWV4Y2VwdGlvbi4gVGhhdCBtZWFucyB1bmxlc3MgbWFudWFsbHkgZGlzYWJsZWQsIHNpbmdsZS1zdGVwcGluZyB3aWxsIGJsaXRoZWx5IGdvIG9uIHN0ZXBwaW5nIGludG8KLXRoaW5ncyBsaWtlIGludGVycnVwdHMuIFNlZSBnZGJzdHViLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK0Z1dGhlcm1vcmUsIGJyZWFrLlMgaXMgc28gY29tcGxpY2F0ZWQgYmVjYXVzZSBzaW5nbGUtc3RlcCBtb2RlIGRvZXMgbm90Citzd2l0Y2ggb2ZmIG9uIGVudHJ5IHRvIGFuIGV4Y2VwdGlvbi4gVGhhdCBtZWFucyB1bmxlc3MgbWFudWFsbHkgZGlzYWJsZWQsCitzaW5nbGUtc3RlcHBpbmcgd2lsbCBibGl0aGVseSBnbyBvbiBzdGVwcGluZyBpbnRvIHRoaW5ncyBsaWtlIGludGVycnVwdHMuCitTZWUgZ2Ric3R1Yi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT0KIFZJUlRVQUwgSU5URVJSVVBUIEhBTkRMSU5HCiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1CZWNhdXNlIGFjY2Vzc2VzIHRvIHRoZSBQU1IgaXMgc28gc2xvdywgYW5kIHRvIGRpc2FibGUgaW50ZXJydXB0cyB3ZSBoYXZlIHRvIGFjY2VzcyBpdCB0d2ljZSAob25jZQotdG8gcmVhZCBhbmQgb25jZSB0byB3cml0ZSksIHdlIGRvbid0IGFjdHVhbGx5IGRpc2FibGUgaW50ZXJydXB0cyBhdCBhbGwgaWYgd2UgZG9uJ3QgaGF2ZSB0by4gV2hhdAotd2UgZG8gaW5zdGVhZCBpcyB1c2UgdGhlIElDQzIgY29uZGl0aW9uIGNvZGUgZmxhZ3MgdG8gbm90ZSB2aXJ0dWFsIGRpc2FibGVtZW50LCBzdWNoIHRoYXQgaWYgd2UKLXRoZW4gZG8gdGFrZSBhbiBpbnRlcnJ1cHQsIHdlIG5vdGUgdGhlIGZsYWcsIHJlYWxseSBkaXNhYmxlIGludGVycnVwdHMsIHNldCBhbm90aGVyIGZsYWcgYW5kIHJlc3VtZQotZXhlY3V0aW9uIGF0IHRoZSBwb2ludCB0aGUgaW50ZXJydXB0IGhhcHBlbmVkLiBTZXR0aW5nIGNvbmRpdGlvbiBmbGFncyBhcyBhIHNpZGUgZWZmZWN0IG9mIGFuCi1hcml0aG1ldGljIG9yIGxvZ2ljYWwgaW5zdHJ1Y3Rpb24gaXMgcmVhbGx5IGZhc3QuIFRoaXMgdXNlIG9mIHRoZSBJQ0MyIG9ubHkgb2NjdXJzIHdpdGhpbiB0aGUKK0JlY2F1c2UgYWNjZXNzZXMgdG8gdGhlIFBTUiBpcyBzbyBzbG93LCBhbmQgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIHdlIGhhdmUKK3RvIGFjY2VzcyBpdCB0d2ljZSAob25jZSB0byByZWFkIGFuZCBvbmNlIHRvIHdyaXRlKSwgd2UgZG9uJ3QgYWN0dWFsbHkKK2Rpc2FibGUgaW50ZXJydXB0cyBhdCBhbGwgaWYgd2UgZG9uJ3QgaGF2ZSB0by4gV2hhdCB3ZSBkbyBpbnN0ZWFkIGlzIHVzZQordGhlIElDQzIgY29uZGl0aW9uIGNvZGUgZmxhZ3MgdG8gbm90ZSB2aXJ0dWFsIGRpc2FibGVtZW50LCBzdWNoIHRoYXQgaWYgd2UKK3RoZW4gZG8gdGFrZSBhbiBpbnRlcnJ1cHQsIHdlIG5vdGUgdGhlIGZsYWcsIHJlYWxseSBkaXNhYmxlIGludGVycnVwdHMsIHNldAorYW5vdGhlciBmbGFnIGFuZCByZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBwb2ludCB0aGUgaW50ZXJydXB0IGhhcHBlbmVkLgorU2V0dGluZyBjb25kaXRpb24gZmxhZ3MgYXMgYSBzaWRlIGVmZmVjdCBvZiBhbiBhcml0aG1ldGljIG9yIGxvZ2ljYWwKK2luc3RydWN0aW9uIGlzIHJlYWxseSBmYXN0LiBUaGlzIHVzZSBvZiB0aGUgSUNDMiBvbmx5IG9jY3VycyB3aXRoaW4gdGhlCiBrZXJuZWwgLSBpdCBkb2VzIG5vdCBhZmZlY3QgdXNlcnNwYWNlLgogCiBUaGUgZmxhZ3Mgd2UgdXNlIGFyZToKIAogICgqKSBDQ1IuSUNDMi5aIFtaZXJvIGZsYWddCiAKLSAgICAgU2V0IHRvIHZpcnR1YWxseSBkaXNhYmxlIGludGVycnVwdHMsIGNsZWFyIHdoZW4gaW50ZXJydXB0cyBhcmUgdmlydHVhbGx5IGVuYWJsZWQuIENhbiBiZQotICAgICBtb2RpZmllZCBieSBsb2dpY2FsIGluc3RydWN0aW9ucyB3aXRob3V0IGFmZmVjdGluZyB0aGUgQ2FycnkgZmxhZy4KKyAgICAgU2V0IHRvIHZpcnR1YWxseSBkaXNhYmxlIGludGVycnVwdHMsIGNsZWFyIHdoZW4gaW50ZXJydXB0cyBhcmUKKyAgICAgdmlydHVhbGx5IGVuYWJsZWQuIENhbiBiZSBtb2RpZmllZCBieSBsb2dpY2FsIGluc3RydWN0aW9ucyB3aXRob3V0CisgICAgIGFmZmVjdGluZyB0aGUgQ2FycnkgZmxhZy4KIAogICgqKSBDQ1IuSUNDMi5DIFtDYXJyeSBmbGFnXQogCkBAIC0xNzYsOCArMTk1LDkgQEAKIAogCUlDQzIuWiBpcyAwLCBJQ0MyLkMgaXMgMS4KIAotICgyKSBBbiBpbnRlcnJ1cHQgb2NjdXJzLiBUaGUgZXhjZXB0aW9uIHByb2xvZ3VlIGV4YW1pbmVzIElDQzIuWiBhbmQgZGV0ZXJtaW5lcyB0aGF0IG5vdGhpbmcgbmVlZHMKLSAgICAgZG9pbmcuIFRoaXMgaXMgZG9uZSBzaW1wbHkgd2l0aCBhbiB1bmxpa2VseSBCRVEgaW5zdHJ1Y3Rpb24uCisgKDIpIEFuIGludGVycnVwdCBvY2N1cnMuIFRoZSBleGNlcHRpb24gcHJvbG9ndWUgZXhhbWluZXMgSUNDMi5aIGFuZAorICAgICBkZXRlcm1pbmVzIHRoYXQgbm90aGluZyBuZWVkcyBkb2luZy4gVGhpcyBpcyBkb25lIHNpbXBseSB3aXRoIGFuCisgICAgIHVubGlrZWx5IEJFUSBpbnN0cnVjdGlvbi4KIAogICgzKSBUaGUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKGxvY2FsX2lycV9kaXNhYmxlKQogCkBAIC0xODcsNDggKzIwNyw1NiBAQAogCiAJSUNDMi5aIHdvdWxkIGJlIHNldCB0byAwLgogCi0gICAgIEEgVElISSAjMiBpbnN0cnVjdGlvbiAodHJhcCAjMiBpZiBjb25kaXRpb24gSEkgLSBaPT0wICYmIEM9PTApIHdvdWxkIGJlIHVzZWQgdG8gdHJhcCBpZgotICAgICBpbnRlcnJ1cHRzIHdlcmUgbm93IHZpcnR1YWxseSBlbmFibGVkLCBidXQgcGh5c2ljYWxseSBkaXNhYmxlZCAtIHdoaWNoIHRoZXkncmUgbm90LCBzbyB0aGUKLSAgICAgdHJhcCBpc24ndCB0YWtlbi4gVGhlIGtlcm5lbCB3b3VsZCB0aGVuIGJlIGJhY2sgdG8gc3RhdGUgKDEpLgorICAgICBBIFRJSEkgIzIgaW5zdHJ1Y3Rpb24gKHRyYXAgIzIgaWYgY29uZGl0aW9uIEhJIC0gWj09MCAmJiBDPT0wKSB3b3VsZAorICAgICBiZSB1c2VkIHRvIHRyYXAgaWYgaW50ZXJydXB0cyB3ZXJlIG5vdyB2aXJ0dWFsbHkgZW5hYmxlZCwgYnV0CisgICAgIHBoeXNpY2FsbHkgZGlzYWJsZWQgLSB3aGljaCB0aGV5J3JlIG5vdCwgc28gdGhlIHRyYXAgaXNuJ3QgdGFrZW4uIFRoZQorICAgICBrZXJuZWwgd291bGQgdGhlbiBiZSBiYWNrIHRvIHN0YXRlICgxKS4KIAotICg1KSBBbiBpbnRlcnJ1cHQgb2NjdXJzLiBUaGUgZXhjZXB0aW9uIHByb2xvZ3VlIGV4YW1pbmVzIElDQzIuWiBhbmQgZGV0ZXJtaW5lcyB0aGF0IHRoZSBpbnRlcnJ1cHQKLSAgICAgc2hvdWxkbid0IGFjdHVhbGx5IGhhdmUgaGFwcGVuZWQuIEl0IGp1bXBzIGFzaWRlLCBhbmQgdGhlcmUgZGlzYWJsZWQgaW50ZXJydXB0cyBieSBzZXR0aW5nCi0gICAgIFBTUi5QSUwgdG8gMTQgYW5kIHRoZW4gaXQgY2xlYXJzIElDQzIuQy4KKyAoNSkgQW4gaW50ZXJydXB0IG9jY3Vycy4gVGhlIGV4Y2VwdGlvbiBwcm9sb2d1ZSBleGFtaW5lcyBJQ0MyLlogYW5kCisgICAgIGRldGVybWluZXMgdGhhdCB0aGUgaW50ZXJydXB0IHNob3VsZG4ndCBhY3R1YWxseSBoYXZlIGhhcHBlbmVkLiBJdAorICAgICBqdW1wcyBhc2lkZSwgYW5kIHRoZXJlIGRpc2FibGVkIGludGVycnVwdHMgYnkgc2V0dGluZyBQU1IuUElMIHRvIDE0CisgICAgIGFuZCB0aGVuIGl0IGNsZWFycyBJQ0MyLkMuCiAKICAoNikgSWYgaW50ZXJydXB0cyB3ZXJlIHRoZW4gc2F2ZWQgYW5kIGRpc2FibGVkIGFnYWluIChsb2NhbF9pcnFfc2F2ZSk6CiAKLQlJQ0MyLlogd291bGQgYmUgc2hpZnRlZCBpbnRvIHRoZSBzYXZlIHZhcmlhYmxlIGFuZCBtYXNrZWQgb2ZmIChnaXZpbmcgYSAxKS4KKwlJQ0MyLlogd291bGQgYmUgc2hpZnRlZCBpbnRvIHRoZSBzYXZlIHZhcmlhYmxlIGFuZCBtYXNrZWQgb2ZmIAorCShnaXZpbmcgYSAxKS4KIAotCUlDQzIuWiB3b3VsZCB0aGVuIGJlIHNldCB0byAxICh0aHVzIHVuY2hhbmdlZCksIGFuZCBJQ0MyLkMgd291bGQgYmUgdW5hZmZlY3RlZCAoaWU6IDApLgorCUlDQzIuWiB3b3VsZCB0aGVuIGJlIHNldCB0byAxICh0aHVzIHVuY2hhbmdlZCksIGFuZCBJQ0MyLkMgd291bGQgYmUKKwl1bmFmZmVjdGVkIChpZTogMCkuCiAKICAoNykgSWYgaW50ZXJydXB0cyB3ZXJlIHRoZW4gcmVzdG9yZWQgZnJvbSBzdGF0ZSAoNikgKGxvY2FsX2lycV9yZXN0b3JlKToKIAotCUlDQzIuWiB3b3VsZCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIHJlc3VsdCBvZiBYT1InaW5nIHRoZSBzYXZlZCB2YWx1ZSAoaWU6IDEpIHdpdGggMSwgd2hpY2gKLQlnaXZlcyBhIHJlc3VsdCBvZiAwIC0gdGh1cyBsZWF2aW5nIElDQzIuWiBzZXQuCisJSUNDMi5aIHdvdWxkIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IG9mIFhPUidpbmcgdGhlIHNhdmVkCisJdmFsdWUgKGllOiAxKSB3aXRoIDEsIHdoaWNoIGdpdmVzIGEgcmVzdWx0IG9mIDAgLSB0aHVzIGxlYXZpbmcKKwlJQ0MyLlogc2V0LgogCiAJSUNDMi5DIHdvdWxkIHJlbWFpbiB1bmFmZmVjdGVkIChpZTogMCkuCiAKLSAgICAgQSBUSUhJICMyIGluc3RydWN0aW9uIHdvdWxkIGJlIHVzZWQgdG8gYWdhaW4gYXNzYXkgdGhlIGN1cnJlbnQgc3RhdGUsIGJ1dCB0aGlzIHdvdWxkIGRvCi0gICAgIG5vdGhpbmcgYXMgWj09MS4KKyAgICAgQSBUSUhJICMyIGluc3RydWN0aW9uIHdvdWxkIGJlIHVzZWQgdG8gYWdhaW4gYXNzYXkgdGhlIGN1cnJlbnQgc3RhdGUsCisgICAgIGJ1dCB0aGlzIHdvdWxkIGRvIG5vdGhpbmcgYXMgWj09MS4KIAogICg4KSBJZiBpbnRlcnJ1cHRzIHdlcmUgdGhlbiBlbmFibGVkIChsb2NhbF9pcnFfZW5hYmxlKToKIAotCUlDQzIuWiB3b3VsZCBiZSBjbGVhcmVkLiBJQ0MyLkMgd291bGQgYmUgbGVmdCB1bmFmZmVjdGVkLiBCb3RoIGZsYWdzIHdvdWxkIG5vdyBiZSAwLgorCUlDQzIuWiB3b3VsZCBiZSBjbGVhcmVkLiBJQ0MyLkMgd291bGQgYmUgbGVmdCB1bmFmZmVjdGVkLiBCb3RoCisJZmxhZ3Mgd291bGQgbm93IGJlIDAuCiAKLSAgICAgQSBUSUhJICMyIGluc3RydWN0aW9uIGFnYWluIGlzc3VlZCB0byBhc3NheSB0aGUgY3VycmVudCBzdGF0ZSB3b3VsZCB0aGVuIHRyYXAgYXMgYm90aCBaPT0wCi0gICAgIFtpbnRlcnJ1cHRzIHZpcnR1YWxseSBlbmFibGVkXSBhbmQgQz09MCBbaW50ZXJydXB0cyByZWFsbHkgZGlzYWJsZWRdIHdvdWxkIHRoZW4gYmUgdHJ1ZS4KKyAgICAgQSBUSUhJICMyIGluc3RydWN0aW9uIGFnYWluIGlzc3VlZCB0byBhc3NheSB0aGUgY3VycmVudCBzdGF0ZSB3b3VsZAorICAgICB0aGVuIHRyYXAgYXMgYm90aCBaPT0wIFtpbnRlcnJ1cHRzIHZpcnR1YWxseSBlbmFibGVkXSBhbmQgQz09MAorICAgICBbaW50ZXJydXB0cyByZWFsbHkgZGlzYWJsZWRdIHdvdWxkIHRoZW4gYmUgdHJ1ZS4KIAotICg5KSBUaGUgdHJhcCAjMiBoYW5kbGVyIHdvdWxkIHNpbXBseSBlbmFibGUgaGFyZHdhcmUgaW50ZXJydXB0cyAoc2V0IFBTUi5QSUwgdG8gMCksIHNldCBJQ0MyLkMgdG8KLSAgICAgMSBhbmQgcmV0dXJuLgorICg5KSBUaGUgdHJhcCAjMiBoYW5kbGVyIHdvdWxkIHNpbXBseSBlbmFibGUgaGFyZHdhcmUgaW50ZXJydXB0cyAKKyAgICAgKHNldCBQU1IuUElMIHRvIDApLCBzZXQgSUNDMi5DIHRvIDEgYW5kIHJldHVybi4KIAogKDEwKSBJbW1lZGlhdGVseSB1cG9uIHJldHVybmluZywgdGhlIHBlbmRpbmcgaW50ZXJydXB0IHdvdWxkIGJlIHRha2VuLgogCi0oMTEpIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3b3VsZCB0YWtlIHRoZSBwYXRoIG9mIGFjdHVhbGx5IHByb2Nlc3NpbmcgdGhlIGludGVycnVwdCAoSUNDMi5aIGlzCi0gICAgIGNsZWFyLCBCRVEgZmFpbHMgYXMgcGVyIHN0ZXAgKDIpKS4KKygxMSkgVGhlIGludGVycnVwdCBoYW5kbGVyIHdvdWxkIHRha2UgdGhlIHBhdGggb2YgYWN0dWFsbHkgcHJvY2Vzc2luZyB0aGUKKyAgICAgaW50ZXJydXB0IChJQ0MyLlogaXMgY2xlYXIsIEJFUSBmYWlscyBhcyBwZXIgc3RlcCAoMikpLgogCi0oMTIpIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3b3VsZCB0aGVuIHNldCBJQ0MyLkMgdG8gMSBzaW5jZSBoYXJkd2FyZSBpbnRlcnJ1cHRzIGFyZSBkZWZpbml0ZWx5Ci0gICAgIGVuYWJsZWQgLSBvciBlbHNlIHRoZSBrZXJuZWwgd291bGRuJ3QgYmUgaGVyZS4KKygxMikgVGhlIGludGVycnVwdCBoYW5kbGVyIHdvdWxkIHRoZW4gc2V0IElDQzIuQyB0byAxIHNpbmNlIGhhcmR3YXJlCisgICAgIGludGVycnVwdHMgYXJlIGRlZmluaXRlbHkgZW5hYmxlZCAtIG9yIGVsc2UgdGhlIGtlcm5lbCB3b3VsZG4ndCBiZSBoZXJlLgogCiAoMTMpIE9uIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgdGhpbmdzIHdvdWxkIGJlIGJhY2sgdG8gc3RhdGUgKDEpLgogCi1UaGlzIHRyYXAgKCMyKSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBrZXJuZWwgbW9kZS4gSW4gdXNlciBtb2RlIGl0IHdpbGwgcmVzdWx0IGluIFNJR0lMTC4KK1RoaXMgdHJhcCAoIzIpIGlzIG9ubHkgYXZhaWxhYmxlIGluIGtlcm5lbCBtb2RlLiBJbiB1c2VyIG1vZGUgaXQgd2lsbAorcmVzdWx0IGluIFNJR0lMTC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydAppbmRleCBkOWYyM2MwLi43N2I5OTVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0CkBAIC0xMiwxOCArMTIsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICB0ZWxldGV4dCBhZGFwdGVycykKIAogSXQgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKLSAqIFBoaWxpcHMgYWRhcHRlcgotICogaG9tZSBicmV3IHRlbGV0ZXh0IGFkYXB0ZXIKLSAqIFZlbGxlbWFuIEs4MDAwIGFkYXB0ZXIKLSAqIEVMViBhZGFwdGVyCi0gKiBBbmFsb2cgRGV2aWNlcyBldmFsdWF0aW9uIGJvYXJkcyAoQURNMTAyNSwgQURNMTAzMCwgQURNMTAzMSwgQURNMTAzMikKLSAqIEJhcmNvIExQVC0+RFZJIChLNTgwMDIzNikgYWRhcHRlcgorICogKHR5cGU9MCkgUGhpbGlwcyBhZGFwdGVyCisgKiAodHlwZT0xKSBob21lIGJyZXcgdGVsZXRleHQgYWRhcHRlcgorICogKHR5cGU9MikgVmVsbGVtYW4gSzgwMDAgYWRhcHRlcgorICogKHR5cGU9MykgRUxWIGFkYXB0ZXIKKyAqICh0eXBlPTQpIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgZXZhbHVhdGlvbiBib2FyZAorICogKHR5cGU9NSkgQW5hbG9nIERldmljZXMgZXZhbHVhdGlvbiBib2FyZHM6IEFETTEwMjUsIEFETTEwMzAsIEFETTEwMzEKKyAqICh0eXBlPTYpIEJhcmNvIExQVC0+RFZJIChLNTgwMDIzNikgYWRhcHRlcgogCiBUaGVzZSBkZXZpY2VzIHVzZSBkaWZmZXJlbnQgcGlub3V0IGNvbmZpZ3VyYXRpb25zLCBzbyB5b3UgaGF2ZSB0byB0ZWxsCiB0aGUgZHJpdmVyIHdoYXQgeW91IGhhdmUsIHVzaW5nIHRoZSB0eXBlIG1vZHVsZSBwYXJhbWV0ZXIuIFRoZXJlIGlzIG5vCiB3YXkgdG8gYXV0b2RldGVjdCB0aGUgZGV2aWNlcy4gU3VwcG9ydCBmb3IgZGlmZmVyZW50IHBpbm91dCBjb25maWd1cmF0aW9ucwogY2FuIGJlIGVhc2lseSBhZGRlZCB3aGVuIG5lZWRlZC4KIAorRWFybGllciBrZXJuZWxzIGRlZmF1bHRlZCB0byB0eXBlPTAgKFBoaWxpcHMpLiAgQnV0IG5vdywgaWYgdGhlIHR5cGUKK3BhcmFtZXRlciBpcyBtaXNzaW5nLCB0aGUgZHJpdmVyIHdpbGwgc2ltcGx5IGZhaWwgdG8gaW5pdGlhbGl6ZS4KKwogCiBCdWlsZGluZyB5b3VyIG93biBhZGFwdGVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dAppbmRleCA4OGEwMTFjLi5kNTM3YzQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKQEAgLTM2LDEyICszNiwxMiBAQAogCiAgIEFsbCBORVMgYW5kIFNORVMgdXNlIHRoZSBzYW1lIHN5bmNocm9ub3VzIHNlcmlhbCBwcm90b2NvbCwgY2xvY2tlZCBmcm9tCiB0aGUgY29tcHV0ZXIncyBzaWRlIChhbmQgdGh1cyB0aW1pbmcgaW5zZW5zaXRpdmUpLiBUbyBhbGxvdyB1cCB0byA1IE5FUwotYW5kL29yIFNORVMgZ2FtZXBhZHMgY29ubmVjdGVkIHRvIHRoZSBwYXJhbGxlbCBwb3J0IGF0IG9uY2UsIHRoZSBvdXRwdXQKLWxpbmVzIG9mIHRoZSBwYXJhbGxlbCBwb3J0IGFyZSBzaGFyZWQsIHdoaWxlIG9uZSBvZiA1IGF2YWlsYWJsZSBpbnB1dCBsaW5lcwotaXMgYXNzaWduZWQgdG8gZWFjaCBnYW1lcGFkLgorYW5kL29yIFNORVMgZ2FtZXBhZHMgYW5kL29yIFNORVMgbWljZSBjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQgYXQgb25jZSwKK3RoZSBvdXRwdXQgbGluZXMgb2YgdGhlIHBhcmFsbGVsIHBvcnQgYXJlIHNoYXJlZCwgd2hpbGUgb25lIG9mIDUgYXZhaWxhYmxlCitpbnB1dCBsaW5lcyBpcyBhc3NpZ25lZCB0byBlYWNoIGdhbWVwYWQuCiAKICAgVGhpcyBwcm90b2NvbCBpcyBoYW5kbGVkIGJ5IHRoZSBnYW1lY29uLmMgZHJpdmVyLCBzbyB0aGF0J3MgdGhlIG9uZQoteW91J2xsIHVzZSBmb3IgTkVTIGFuZCBTTkVTIGdhbWVwYWRzLgoreW91J2xsIHVzZSBmb3IgTkVTLCBTTkVTIGdhbWVwYWRzIGFuZCBTTkVTIG1pY2UuCiAKICAgVGhlIG1haW4gcHJvYmxlbSB3aXRoIFBDIHBhcmFsbGVsIHBvcnRzIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlICs1ViBwb3dlcgogc291cmNlIG9uIGFueSBvZiB0aGVpciBwaW5zLiBTbywgaWYgeW91IHdhbnQgYSByZWxpYWJsZSBzb3VyY2Ugb2YgcG93ZXIKQEAgLTEwNiw3ICsxMDYsNyBAQAogZWl0aGVyIGEgTkVTIG9yIE5FUyBjbG9uZSBhbmQgd2lsbCB3b3JrIHdpdGggdGhpcyBjb25uZWN0aW9uLiBTTkVTIGdhbWVwYWRzCiBhbHNvIHVzZSA1IHdpcmVzLCBidXQgaGF2ZSBtb3JlIGJ1dHRvbnMuIFRoZXkgd2lsbCB3b3JrIGFzIHdlbGwsIG9mIGNvdXJzZS4KIAotUGlub3V0IGZvciBORVMgZ2FtZXBhZHMgICAgICAgICAgICAgICAgIFBpbm91dCBmb3IgU05FUyBnYW1lcGFkcworUGlub3V0IGZvciBORVMgZ2FtZXBhZHMgICAgICAgICAgICAgICAgIFBpbm91dCBmb3IgU05FUyBnYW1lcGFkcyBhbmQgbWljZQogCiAJICAgKy0tLS0+IFBvd2VyICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKIAkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgfCBvICBvICBvICBvIHwgIHggIHggIG8gIHwgMQpAQCAtNDU0LDYgKzQ1NCw3IEBACiAJICA2ICB8IE42NCBwYWQKIAkgIDcgIHwgU29ueSBQU1ggY29udHJvbGxlcgogCSAgOCAgfCBTb255IFBTWCBERFIgY29udHJvbGxlcgorCSAgOSAgfCBTTkVTIG1vdXNlCiAKICAgVGhlIGV4YWN0IHR5cGUgb2YgdGhlIFBTWCBjb250cm9sbGVyIHR5cGUgaXMgYXV0b3Byb2JlZCB3aGVuIHVzZWQgc28KIGhvdCBzd2FwcGluZyBzaG91bGQgd29yayAoYnV0IGlzIG5vdCByZWNvbWVuZGVkKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldCBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE2NGRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0CkBAIC0wLDAgKzEsMjg2IEBACitHaWdhU2V0IDMwN3ggRGV2aWNlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gICBSZXF1aXJlbWVudHMKKyAgICAgLS0tLS0tLS0tLS0tCisxLjEuIEhhcmR3YXJlCisgICAgIC0tLS0tLS0tCisgICAgIFRoaXMgcmVsZWFzZSBzdXBwb3J0cyB0aGUgY29ubmVjdGlvbiBvZiB0aGUgR2lnYXNldCAzMDd4LzQxN3ggZmFtaWx5IG9mCisgICAgIElTRE4gREVDVCBiYXNlcyB2aWEgR2lnYXNldCBNMTAxIERhdGEsIEdpZ2FzZXQgTTEwNSBEYXRhIG9yIGRpcmVjdCBVU0IKKyAgICAgY29ubmVjdGlvbi4gVGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSByZXBvcnRlZCB0byBiZSBjb21wYXRpYmxlOgorICAgICAzMDd4LzQxN3g6CisgICAgICAgIEdpZ2FzZXQgU1gyNTVpc2RuCisgICAgICAgIEdpZ2FzZXQgU1gzNTNpc2RuCisgICAgICAgIFNpbnVzIDQ1IFtBQl0gaXNkbiAoRGV1dHNjaGUgVGVsZWtvbSkKKyAgICAgICAgU2ludXMgNzIxWC9YQQorICAgICAgICBWb3ggQ2hpY2FnbyAzOTAgSVNETiAoS1BOIFRlbGVjb20pCisgICAgIE0xMDE6CisgICAgICAgIFNpbnVzIDQ1IERhdGEgMSAoVGVsZWtvbSkKKyAgICAgTTEwNToKKyAgICAgICAgR2lnYXNldCBVU0IgQWRhcHRlciBERUNUCisgICAgICAgIFNpbnVzIDQ1IERhdGEgMiAoVGVsZWtvbSkKKyAgICAgICAgU2ludXMgNzIxIGRhdGEKKyAgICAgICAgQ2hpY2FnbyAzOTAgVVNCIChLUE4pCisgICAgIFNlZSBhbHNvIGh0dHA6Ly93d3cuZXJiemUuaW5mby9zaW51c19naWdhc2V0Lmh0bSBhbmQKKyAgICAgICAgICAgICAgaHR0cDovL2dpZ2FzZXQzMDd4LnNvdXJjZWZvcmdlLm5ldC8KKworICAgICBXZSBoYWQgYWxzbyByZXBvcnRzIGZyb20gdXNlcnMgb2YgR2lnYXNldCBNMTA1IHdobyBjb3VsZCB1c2UgdGhlIGRyaXZlcnMKKyAgICAgd2l0aCBTWCAxMDAgYW5kIENYIDEwMCBJU0ROIGJhc2VzIChvbmx5IGluIHVuaW1vZGVtIG1vZGUsIHNlZSBzZWN0aW9uIDIuNC4pCisgICAgIElmIHlvdSBoYXZlIGFub3RoZXIgZGV2aWNlIHRoYXQgd29ya3Mgd2l0aCBvdXIgZHJpdmVyLCBwbGVhc2UgbGV0IHVzIGtub3cuCisgICAgIEZvciBleGFtcGxlLCBHaWdhc2V0IFNYMjA1aXNkbi9TaW51cyA3MjEgWCBTRSBhbmQgR2lnYXNldCBTWDMwM2lzZG4gYmFzZXMKKyAgICAgYXJlIGp1c3QgdmVyc2lvbnMgd2l0aG91dCBhbnN3ZXJpbmcgbWFjaGluZSBvZiBtb2RlbHMga25vd24gdG8gd29yaywgc28KKyAgICAgdGhleSBzaG91bGQgd29yayBqdXN0IGFzIHdlbGw7IGJ1dCBzbyBmYXIgd2UgYXJlIGxhY2tpbmcgcG9zaXRpdmUgcmVwb3J0cworICAgICBvbiB0aGVzZS4KKworICAgICBDaGFuY2VzIG9mIGdldHRpbmcgYW4gVVNCIGRldmljZSB0byB3b3JrIGFyZSBnb29kIGlmIHRoZSBvdXRwdXQgb2YKKyAgICAgICAgbHN1c2IKKyAgICAgYXQgdGhlIGNvbW1hbmQgbGluZSBjb250YWlucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgSUQgMDY4MTowMDAxCisgICAgICAgIElEIDA2ODE6MDAwMgorICAgICAgICBJRCAwNjgxOjAwMDkKKyAgICAgICAgSUQgMDY4MTowMDIxCisgICAgICAgIElEIDA2ODE6MDAyMgorCisxLjIuIFNvZnR3YXJlCisgICAgIC0tLS0tLS0tCisgICAgIFRoZSBkcml2ZXIgd29ya3Mgd2l0aCBJU0RONGxpbnV4IGFuZCBzbyBjYW4gYmUgdXNlZCB3aXRoIGFueSBzb2Z0d2FyZQorICAgICB3aGljaCBpcyBhYmxlIHRvIHVzZSBJU0RONGxpbnV4IGZvciBJU0ROIGNvbm5lY3Rpb25zICh2b2ljZSBvciBkYXRhKS4KKyAgICAgQ0FQSTRMaW51eCBzdXBwb3J0IGlzIHBsYW5uZWQgYnV0IG5vdCB5ZXQgYXZhaWxhYmxlLgorCisgICAgIFRoZXJlIGFyZSBzb21lIHVzZXIgc3BhY2UgdG9vbHMgYXZhaWxhYmxlIGF0CisgICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2lnYXNldDMwN3gvCisgICAgIHdoaWNoIHByb3ZpZGUgYWNjZXNzIHRvIGFkZGl0aW9uYWwgZGV2aWNlIHNwZWNpZmljIGZ1bmN0aW9ucyBsaWtlIFNNUywKKyAgICAgcGhvbmVib29rIG9yIGNhbGwgam91cm5hbC4KKworCisyLiAgIEhvdyB0byB1c2UgdGhlIGRyaXZlcgorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIuMS4gTW9kdWxlcworICAgICAtLS0tLS0tCisgICAgIFRvIGdldCB0aGUgZGV2aWNlIHdvcmtpbmcsIHlvdSBoYXZlIHRvIGxvYWQgdGhlIHByb3BlciBrZXJuZWwgbW9kdWxlLiBZb3UKKyAgICAgY2FuIGRvIHRoaXMgdXNpbmcKKyAgICAgICAgIG1vZHByb2JlIG1vZHVsZW5hbWUKKyAgICAgd2hlcmUgbW9kdWxlbmFtZSBpcyB1c2JfZ2lnYXNldCAoTTEwNSkgb3IgYmFzX2dpZ2FzZXQgKGRpcmVjdCBVU0IKKyAgICAgY29ubmVjdGlvbiB0byB0aGUgYmFzZSkuCisKKzIuMi4gRGV2aWNlIG5vZGVzIGZvciB1c2VyIHNwYWNlIHByb2dyYW1zCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBUaGUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHVzZXIgc3BhY2UgKGVnLiBieSB0aGUgdXNlciBzcGFjZSB0b29scworICAgICBtZW50aW9uZWQgaW4gMS4yLikgdGhyb3VnaCB0aGUgZGV2aWNlIG5vZGVzOgorCisgICAgIC0gL2Rldi90dHlHVTAgZm9yIE0xMDUgKFVTQiBkYXRhIGJveGVzKQorICAgICAtIC9kZXYvdHR5R0IwIGZvciB0aGUgYmFzZSBkcml2ZXIgKGRpcmVjdCBVU0IgY29ubmVjdGlvbikKKworICAgICBZb3UgY2FuIGFsc28gc2VsZWN0IGEgImRlZmF1bHQgZGV2aWNlIiB3aGljaCBpcyB1c2VkIGJ5IHRoZSBmcm9udGVuZHMgd2hlbgorICAgICBubyBkZXZpY2Ugbm9kZSBpcyBnaXZlbiBhcyBwYXJhbWV0ZXIsIGJ5IGNyZWF0aW5nIGEgc3ltbGluayAvZGV2L3R0eUcgdG8KKyAgICAgb25lIG9mIHRoZW0sIGVnLjoKKworICAgICAgICBsbiAtcyAvZGV2L3R0eUdCMCAvZGV2L3R0eUcKKworMi4zLiBJU0RONGxpbnV4CisgICAgIC0tLS0tLS0tLS0KKyAgICAgVGhpcyBpcyB0aGUgIm5vcm1hbCIgbW9kZSBvZiBvcGVyYXRpb24uIEFmdGVyIGxvYWRpbmcgdGhlIG1vZHVsZSB5b3UgY2FuCisgICAgIHNldCB1cCB0aGUgSVNETiBzeXN0ZW0ganVzdCBhcyB5b3UnZCBkbyB3aXRoIGFueSBJU0ROIGNhcmQuCisgICAgIFlvdXIgZGlzdHJpYnV0aW9uIHNob3VsZCBwcm92aWRlIHNvbWUgY29uZmlndXJhdGlvbiB1dGlsaXR5LgorICAgICBJZiBub3QsIHlvdSBjYW4gdXNlIHNvbWUgSE9XVE9zIGxpa2UKKyAgICAgICAgIGh0dHA6Ly93d3cubGludXhoYXZlbi5kZS9kbGhwL0hPV1RPL0RFLUlTRE4tSE9XVE8tNS5odG1sCisgICAgIElmIHRoaXMgZG9lc24ndCB3b3JrLCBiZWNhdXNlIHlvdSBoYXZlIHNvbWUgcmVjZW50IGRldmljZSBsaWtlIFNYMTAwIHdoZXJlCisgICAgIGRlYnVnIG91dHB1dCAoc2VlIHNlY3Rpb24gMy4yLikgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhpcyB3aGVuIGRpYWxpbmcKKyAgICAgICAgIENNRCBSZWNlaXZlZDogRVJST1IKKyAgICAgICAgIEF2YWlsYWJsZSBQYXJhbXM6IDAKKyAgICAgICAgIENvbm5lY3Rpb24gU3RhdGU6IDAsIFJlc3BvbnNlOiAtMQorICAgICAgICAgZ2lnYXNldF9wcm9jZXNzX3Jlc3BvbnNlOiByZXNwX2NvZGUgLTEgaW4gQ29uU3RhdGUgMCAhCisgICAgICAgICBUaW1lb3V0IG9jY3VycmVkCisgICAgIHlvdSBtaWdodCBuZWVkIHRvIHVzZSB1bmltb2RlbSBtb2RlOgorCisyLjQuIFVuaW1vZGVtIG1vZGUKKyAgICAgLS0tLS0tLS0tLS0tLQorICAgICBUaGlzIGlzIG5lZWRlZCBmb3Igc29tZSBkZXZpY2VzIFtlLmcuIFNYMTAwXSBhcyB0aGV5IGhhdmUgcHJvYmxlbXMgd2l0aAorICAgICB0aGUgIm5vcm1hbCIgY29tbWFuZHMuCisKKyAgICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb21tYW5kIGxpbmUgdG9vbCBnaWdhY29udHIsIHlvdSBjYW4gZW50ZXIKKyAgICAgdW5pbW9kZW0gbW9kZSB1c2luZworICAgICAgICAgZ2lnYWNvbnRyIC0tbW9kZSB1bmltb2RlbQorICAgICBZb3UgY2FuIHN3aXRjaCBiYWNrIHVzaW5nCisgICAgICAgICBnaWdhY29udHIgLS1tb2RlIGlzZG4KKworICAgICBZb3UgY2FuIGFsc28gbG9hZCB0aGUgZHJpdmVyIHVzaW5nIGUuZy4KKyAgICAgICAgIG1vZHByb2JlIHVzYl9naWdhc2V0IHN0YXJ0bW9kZT0wCisgICAgIHRvIHByZXZlbnQgdGhlIGRyaXZlciBmcm9tIHN0YXJ0aW5nIGluICJpc2RuNGxpbnV4IG1vZGUiLgorCisgICAgIEluIHRoaXMgbW9kZSB0aGUgZGV2aWNlIHdvcmtzIGxpa2UgYSBtb2RlbSBjb25uZWN0ZWQgdG8gYSBzZXJpYWwgcG9ydAorICAgICAodGhlIC9kZXYvdHR5R1UwLCAuLi4gbWVudGlvbmVkIGFib3ZlKSB3aGljaCB1bmRlcnN0YW5kcyB0aGUgY29tbWFuZHMKKyAgICAgICAgIEFUWiAgICAgICAgICAgICAgICAgaW5pdCwgcmVzZXQKKyAgICAgICAgICAgICA9PiBPSyBvciBFUlJPUgorICAgICAgICAgQVRECisgICAgICAgICBBVERUICAgICAgICAgICAgICAgIGRpYWwKKyAgICAgICAgICAgICA9PiBPSywgQ09OTkVDVCwKKyAgICAgICAgICAgICAgICBCVVNZLAorICAgICAgICAgICAgICAgIE5PIERJQUwgVE9ORSwKKyAgICAgICAgICAgICAgICBOTyBDQVJSSUVSLAorICAgICAgICAgICAgICAgIE5PIEFOU1dFUgorICAgICAgICAgPHBhdXNlPisrKzxwYXVzZT4gICBjaGFuZ2UgdG8gY29tbWFuZCBtb2RlIHdoZW4gY29ubmVjdGVkCisgICAgICAgICBBVEggICAgICAgICAgICAgICAgIGhhbmd1cAorCisgICAgIFlvdSBjYW4gdXNlIHNvbWUgY29uZmlndXJhdGlvbiB0b29sIG9mIHlvdXIgZGlzdHJpYnV0aW9uIHRvIGNvbmZpZ3VyZSB0aGlzCisgICAgICJtb2RlbSIgb3IgY29uZmlndXJlIHBwcGQvd3ZkaWFsIG1hbnVhbGx5LiBUaGVyZSBhcmUgc29tZSBleGFtcGxlIHBwcAorICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBjaGF0IHNjcmlwdHMgaW4gdGhlIGdpZ2FzZXQtVkVSU0lPTi9wcHAgZGlyZWN0b3J5LgorICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBVU0IgZHJpdmVycyBhcmUgbm90IGFibGUgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUKKyAgICAgY29udHJvbCBsaW5lcyAodGhlIE0xMDUgZHJpdmVyIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBzb21lIHVuZG9jdW1lbnRlZAorICAgICBjb250cm9sIHJlcXVlc3RzLCBpZiB5b3UgcmVhbGx5IG5lZWQgdGhlIGNvbnRyb2wgbGluZXMsIHRob3VnaCkuIFRoaXMgbWVhbnMKKyAgICAgeW91IG11c3QgdXNlICJTdHVwaWQgTW9kZSIgaWYgeW91IGFyZSB1c2luZyB3dmRpYWwgb3IgeW91IHNob3VsZCB1c2UgdGhlCisgICAgIG5vY3J0c2N0cyBvcHRpb24gb2YgcHBwZC4KKyAgICAgWW91IG11c3QgYWxzbyBhc3N1cmUgdGhhdCB0aGUgcHBwX2FzeW5jIG1vZHVsZSBpcyBsb2FkZWQgd2l0aCB0aGUgcGFyYW1ldGVyCisgICAgIGZsYWdfdGltZT0wLiBZb3UgY2FuIGRvIHRoaXMgZS5nLiBieSBhZGRpbmcgYSBsaW5lIGxpa2UKKworICAgICAgICBvcHRpb25zIHBwcF9hc3luYyBmbGFnX3RpbWU9MAorCisgICAgIHRvIC9ldGMvbW9kcHJvYmUuY29uZi4gSWYgeW91ciBkaXN0cmlidXRpb24gaGFzIHNvbWUgbG9jYWwgbW9kdWxlCisgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIC9ldGMvbW9kcHJvYmUuY29uZi5sb2NhbCwKKyAgICAgdXNpbmcgdGhhdCBzaG91bGQgYmUgcHJlZmVycmVkLgorCisyLjUuIENhbGwtSUQgKENJRCkgbW9kZQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQ2FsbC1JRHMgYXJlIG51bWJlcnMgdXNlZCB0byB0YWcgY29tbWFuZHMgdG8sIGFuZCByZXNwb25zZXMgZnJvbSwgdGhlCisgICAgIEdpZ2FzZXQgYmFzZSBpbiBvcmRlciB0byBzdXBwb3J0IHRoZSBzaW11bHRhbmVvdXMgaGFuZGxpbmcgb2YgbXVsdGlwbGUKKyAgICAgSVNETiBjYWxscy4gVGhlaXIgdXNlIGNhbiBiZSBlbmFibGVkICgiQ0lEIG1vZGUiKSBvciBkaXNhYmxlZCAoIlVuaW1vZGVtCisgICAgIG1vZGUiKS4gV2l0aG91dCBDYWxsLUlEcyAoaW4gVW5pbW9kZW0gbW9kZSksIG9ubHkgYSB2ZXJ5IGxpbWl0ZWQgc2V0IG9mCisgICAgIGZ1bmN0aW9ucyBpcyBhdmFpbGFibGUuIEl0IGFsbG93cyBvdXRnb2luZyBkYXRhIGNvbm5lY3Rpb25zIG9ubHksIGJ1dAorICAgICBkb2VzIG5vdCBzaWduYWwgaW5jb21pbmcgY2FsbHMgb3Igb3RoZXIgYmFzZSBldmVudHMuCisKKyAgICAgREVDVCBjb3JkbGVzcyBkYXRhIGRldmljZXMgKE0xMHgpIHBlcm1hbmVudGx5IG9jY3VweSB0aGUgY29yZGxlc3MKKyAgICAgY29ubmVjdGlvbiB0byB0aGUgYmFzZSB3aGlsZSBDYWxsLUlEcyBhcmUgYWN0aXZhdGVkLiBBcyB0aGUgR2lnYXNldAorICAgICBiYXNlcyBvbmx5IHN1cHBvcnQgb25lIERFQ1QgZGF0YSBjb25uZWN0aW9uIGF0IGEgdGltZSwgdGhpcyBwcmV2ZW50cworICAgICBvdGhlciBERUNUIGNvcmRsZXNzIGRhdGEgZGV2aWNlcyBmcm9tIGFjY2Vzc2luZyB0aGUgYmFzZS4KKworICAgICBEdXJpbmcgYWN0aXZlIG9wZXJhdGlvbiwgdGhlIGRyaXZlciBzd2l0Y2hlcyB0byB0aGUgbmVjZXNzYXJ5IG1vZGUKKyAgICAgYXV0b21hdGljYWxseS4gSG93ZXZlciwgZm9yIHRoZSByZWFzb25zIGFib3ZlLCB0aGUgbW9kZSBjaG9zZW4gd2hlbgorICAgICB0aGUgZGV2aWNlIGlzIG5vdCBpbiB1c2UgKGlkbGUpIGNhbiBiZSBzZWxlY3RlZCBieSB0aGUgdXNlci4KKyAgICAgLSBJZiB5b3Ugd2FudCB0byByZWNlaXZlIGluY29taW5nIGNhbGxzLCB5b3UgY2FuIHVzZSB0aGUgZGVmYXVsdAorICAgICAgIHNldHRpbmdzIChDSUQgbW9kZSkuCisgICAgIC0gSWYgeW91IGhhdmUgc2V2ZXJhbCBERUNUIGRhdGEgZGV2aWNlcyAoTTEweCkgd2hpY2ggeW91IHdhbnQgdG8gdXNlCisgICAgICAgaW4gdHVybiwgc2VsZWN0IFVuaW1vZGVtIG1vZGUgYnkgcGFzc2luZyB0aGUgcGFyYW1ldGVyICJjaWRtb2RlPTAiIHRvCisgICAgICAgdGhlIGRyaXZlciAoIm1vZHByb2JlIHVzYl9naWdhc2V0IGNpZG1vZGU9MCIgb3IgbW9kcHJvYmUuY29uZikuCisKKyAgICAgSWYgeW91IHdhbnQgYm90aCBvZiB0aGVzZSBhdCBvbmNlLCB5b3UgYXJlIG91dCBvZiBsdWNrLgorCisgICAgIFlvdSBjYW4gYWxzbyB1c2UgL3N5cy9tb2R1bGUvPG5hbWU+L3BhcmFtZXRlcnMvY2lkbW9kZSBmb3IgY2hhbmdpbmcKKyAgICAgdGhlIENJRCBtb2RlIHNldHRpbmcgKDxuYW1lPiBpcyB1c2JfZ2lnYXNldCBvciBiYXNfZ2lnYXNldCkuCisKKworMy4gICBUcm91Ymxlc2hvb3RpbmcKKyAgICAgLS0tLS0tLS0tLS0tLS0tCiszLjEuIFNvbHV0aW9ucyB0byBmcmVxdWVudGx5IHJlcG9ydGVkIHByb2JsZW1zCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIFByb2JsZW06CisgICAgICAgIFlvdSBoYXZlIGEgc2xvdyBwcm92aWRlciBhbmQgaXNkbjRsaW51eCBnaXZlcyB1cCBkaWFsaW5nIHRvbyBlYXJseS4KKyAgICAgU29sdXRpb246CisgICAgICAgIExvYWQgdGhlIGlzZG4gbW9kdWxlIHVzaW5nIHRoZSBkaWFsdGltZW91dCBvcHRpb24uIFlvdSBjYW4gZG8gdGhpcyBlLmcuCisgICAgICAgIGJ5IGFkZGluZyBhIGxpbmUgbGlrZQorCisgICAgICAgICAgIG9wdGlvbnMgaXNkbiBkaWFsdGltZW91dD0xNQorCisgICAgICAgIHRvIC9ldGMvbW9kcHJvYmUuY29uZi4gSWYgeW91ciBkaXN0cmlidXRpb24gaGFzIHNvbWUgbG9jYWwgbW9kdWxlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIC9ldGMvbW9kcHJvYmUuY29uZi5sb2NhbCwKKyAgICAgICAgdXNpbmcgdGhhdCBzaG91bGQgYmUgcHJlZmVycmVkLgorCisgICAgIFByb2JsZW06CisgICAgICAgIFlvdXIgaXNkbiBzY3JpcHQgYWJvcnRzIHdpdGggYSBtZXNzYWdlIGFib3V0IGlzZG5sb2cuCisgICAgIFNvbHV0aW9uOgorICAgICAgICBUcnkgZGVhY3RpdmF0aW5nIChvciBjb21tZW50aW5nIG91dCkgaXNkbmxvZy4gVGhpcyBkcml2ZXIgZG9lcyBub3QKKyAgICAgICAgc3VwcG9ydCBpdC4KKworICAgICBQcm9ibGVtOgorICAgICAgICBZb3UgaGF2ZSB0d28gb3IgbW9yZSBERUNUIGRhdGEgYWRhcHRlcnMgKE0xMDEvTTEwNSkgYW5kIG9ubHkgdGhlCisgICAgICAgIGZpcnN0IG9uZSB5b3UgdHVybiBvbiB3b3Jrcy4KKyAgICAgU29sdXRpb246CisgICAgICAgIFNlbGVjdCBVbmltb2RlbSBtb2RlIGZvciBhbGwgREVDVCBkYXRhIGFkYXB0ZXJzLiAoc2VlIHNlY3Rpb24gMi40LikKKworMy4yLiBUZWxsaW5nIHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQnVpbGRpbmcgdGhlIGRyaXZlciB3aXRoIHRoZSAiR2lnYXNldCBkZWJ1Z2dpbmciIGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgIG9wdGlvbiAoQ09ORklHX0dJR0FTRVRfREVCVUcpIGdpdmVzIGl0IHRoZSBhYmlsaXR5IHRvIHByb2R1Y2UgYWRkaXRpb25hbAorICAgICBpbmZvcm1hdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKworICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhlIGRyaXZlciBwcm9kdWNlcyBieQorICAgICB3cml0aW5nIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHRvIC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZywgZS5nLgorICAgICAgICBlY2hvIDAgPiAvc3lzL21vZHVsZS9naWdhc2V0L3BhcmFtZXRlcnMvZGVidWcKKyAgICAgc3dpdGNoZXMgb2ZmIGRlYnVnZ2luZyBvdXRwdXQgY29tcGxldGVseSwKKyAgICAgICAgZWNobyAweDEwYTAyMCA+IC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZworICAgICBlbmFibGVzIHRoZSBzdGFuZGFyZCBzZXQgb2YgZGVidWdnaW5nIG91dHB1dCBtZXNzYWdlcy4gVGhlc2UgdmFsdWVzIGFyZQorICAgICBiaXQgcGF0dGVybnMgd2hlcmUgZXZlcnkgYml0IGNvbnRyb2xzIGEgY2VydGFpbiB0eXBlIG9mIGRlYnVnZ2luZyBvdXRwdXQuCisgICAgIFNlZSB0aGUgY29uc3RhbnRzIERFQlVHXyogaW4gdGhlIHNvdXJjZSBmaWxlIGdpZ2FzZXQuaCBmb3IgZGV0YWlscy4KKworICAgICBUaGUgaW5pdGlhbCB2YWx1ZSBjYW4gYmUgc2V0IHVzaW5nIHRoZSBkZWJ1ZyBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIHRoZQorICAgICBtb2R1bGUgImdpZ2FzZXQiLCBlLmcuIGJ5IGFkZGluZyBhIGxpbmUKKyAgICAgICAgb3B0aW9ucyBnaWdhc2V0IGRlYnVnPTAKKyAgICAgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mLCAuLi4KKworICAgICBHZW5lcmF0ZWQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZAorICAgICAtIGFzIG91dHB1dCBvZiB0aGUgY29tbWFuZAorICAgICAgICAgZG1lc2cKKyAgICAgLSBpbiBzeXN0ZW0gbG9nIGZpbGVzIHdyaXR0ZW4gYnkgeW91ciBzeXNsb2cgZGFlbW9uLCB1c3VhbGx5CisgICAgICAgaW4gL3Zhci9sb2cvLCBlLmcuIC92YXIvbG9nL21lc3NhZ2VzLgorCiszLjMuIFJlcG9ydGluZyBwcm9ibGVtcyBhbmQgYnVncworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgSWYgeW91IGNhbid0IHNvbHZlIHByb2JsZW1zIHdpdGggdGhlIGRyaXZlciBvbiB5b3VyIG93biwgZmVlbCBmcmVlIHRvCisgICAgIHVzZSBvbmUgb2YgdGhlIGZvcnVtcywgYnVnIHRyYWNrZXJzLCBvciBtYWlsaW5nIGxpc3RzIG9uCisgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dpZ2FzZXQzMDd4CisgICAgIG9yIHdyaXRlIGFuIGVsZWN0cm9uaWMgbWFpbCB0byB0aGUgbWFpbnRhaW5lcnMuCisKKyAgICAgVHJ5IHRvIHByb3ZpZGUgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSwgc3VjaCBhcworICAgICAtIGRpc3RyaWJ1dGlvbgorICAgICAtIGtlcm5lbCB2ZXJzaW9uICh1bmFtZSAtcikKKyAgICAgLSBnY2MgdmVyc2lvbiAoZ2NjIC0tdmVyc2lvbikKKyAgICAgLSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgKHVuYW1lIC1tLCAuLi4pCisgICAgIC0gdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiBvZiB5b3VyIGRldmljZSAoYmFzZSBhbmQgd2lyZWxlc3MgbW9kdWxlLAorICAgICAgIGlmIGFueSkKKyAgICAgLSBvdXRwdXQgb2YgImxzdXNiIC12IiAoaWYgdXNpbmcgYW4gVVNCIGRldmljZSkKKyAgICAgLSBlcnJvciBtZXNzYWdlcworICAgICAtIHJlbGV2YW50IHN5c3RlbSBsb2cgbWVzc2FnZXMgKGl0IHdvdWxkIGhlbHAgaWYgeW91IGFjdGl2YXRlIGRlYnVnCisgICAgICAgb3V0cHV0IGFzIGRlc2NyaWJlZCBpbiAzLjIuKQorCisgICAgIEZvciBoZWxwIHdpdGggZ2VuZXJhbCBjb25maWd1cmF0aW9uIHByb2JsZW1zIG5vdCBzcGVjaWZpYyB0byBvdXIgZHJpdmVyLAorICAgICBzdWNoIGFzIGlzZG40bGludXggYW5kIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpc3N1ZXMsIHBsZWFzZSByZWZlciB0byB0aGUKKyAgICAgYXBwcm9wcmlhdGUgZm9ydW1zIGFuZCBuZXdzZ3JvdXBzLgorCiszLjQuIFJlcG9ydGluZyBwcm9ibGVtIHNvbHV0aW9ucworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgSWYgeW91IHNvbHZlZCBhIHByb2JsZW0gd2l0aCBvdXIgZHJpdmVycywgd3JvdGUgc3RhcnR1cCBzY3JpcHRzIGZvciB5b3VyCisgICAgIGRpc3RyaWJ1dGlvbiwgLi4uIGZlZWwgZnJlZSB0byBjb250YWN0IHVzICh1c2luZyBvbmUgb2YgdGhlIHBsYWNlcworICAgICBtZW50aW9uZWQgaW4gMy4zLikuIFdlJ2QgbGlrZSB0byBhZGQgc2NyaXB0cywgaGludHMsIGRvY3VtZW50YXRpb24KKyAgICAgdG8gdGhlIGRyaXZlciBhbmQvb3IgdGhlIHByb2plY3Qgd2ViIHBhZ2UuCisKKworNC4gICBMaW5rcywgb3RoZXIgc29mdHdhcmUKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIC0gU291cmNlZm9yZ2UgcHJvamVjdCBkZXZlbG9waW5nIHRoaXMgZHJpdmVyIGFuZCBhc3NvY2lhdGVkIHRvb2xzCisgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dpZ2FzZXQzMDd4CisgICAgIC0gWWFob28hIEdyb3VwIG9uIHRoZSBTaWVtZW5zIEdpZ2FzZXQgZmFtaWx5IG9mIGRldmljZXMKKyAgICAgICAgIGh0dHA6Ly9kZS5ncm91cHMueWFob28uY29tL2dyb3VwL1NpZW1lbnMtR2lnYXNldAorICAgICAtIFNpZW1lbnMgR2lnYXNldC9ULVNpbnVzIGNvbXBhdGliaWxpdHkgdGFibGUKKyAgICAgICAgIGh0dHA6Ly93d3cuZXJiemUuaW5mby9zaW51c19naWdhc2V0Lmh0bQorCisKKzUuICAgQ3JlZGl0cworICAgICAtLS0tLS0tCisgICAgIFRoYW5rcyB0bworCisgICAgIEthcnN0ZW4gS2VpbAorICAgICAgICBmb3IgaGlzIGhlbHAgd2l0aCBpc2RuNGxpbnV4CisgICAgIERldGkgRmxpZWdsCisgICAgICAgIGZvciBoaXMgYmFzZSBkcml2ZXIgY29kZQorICAgICBEZW5uaXMgRGlldHJpY2gKKyAgICAgICAgZm9yIGhpcyBrZXJuZWwgMi42IHBhdGNoZXMKKyAgICAgQW5kcmVhcyBSdW1tZWwKKyAgICAgICAgZm9yIGhpcyB3b3JrIGFuZCBsb2dzIHRvIGdldCB1bmltb2RlbSBtb2RlIHdvcmtpbmcKKyAgICAgQW5kcmVhcyBEZWdlcnQKKyAgICAgICAgZm9yIGhpcyBsb2dzIGFuZCBwYXRjaGVzIHRvIGdldCBjeCAxMDAgd29ya2luZworICAgICBEaWV0cmljaCBGZWlzdAorICAgICAgICBmb3IgaGlzIGdlbmVyb3VzIGRvbmF0aW9uIG9mIG9uZSBNMTA1IGFuZCB0d28gTTEwMSBjb3JkbGVzcyBhZGFwdGVycworICAgICBDaHJpc3RvcGggU2Nod2VlcnMKKyAgICAgICAgZm9yIGhpcyBnZW5lcm91cyBkb25hdGlvbiBvZiBhIE0zNCBkZXZpY2UKKworICAgICBhbmQgYWxsIHRoZSBvdGhlciBwZW9wbGUgd2hvIHNlbnQgbG9ncyBhbmQgb3RoZXIgaW5mb3JtYXRpb24uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKaW5kZXggZmNjY2YyNC4uNjFmYzA3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKQEAgLTQ0LDcgKzQ0LDcgQEAKIG9mIG1vZHVsZXMuIFRoZSBhdXRob3Igb2YgYW4gZXh0ZXJuYWwgbW9kdWxlcyBzaG91bGQgc3VwcGx5CiBhIG1ha2VmaWxlIHRoYXQgaGlkZXMgbW9zdCBvZiB0aGUgY29tcGxleGl0eSBzbyBvbmUgb25seSBoYXMgdG8gdHlwZQogJ21ha2UnIHRvIGJ1aWxkIHRoZSBtb2R1bGUuIEEgY29tcGxldGUgZXhhbXBsZSB3aWxsIGJlIHByZXNlbnQgaW4KLWNoYXB0ZXIgpC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlIi4KK2NoYXB0ZXIgNCwgIkNyZWF0aW5nIGEga2J1aWxkIGZpbGUgZm9yIGFuIGV4dGVybmFsIG1vZHVsZSIuCiAKIAogPT09IDIuIEhvdyB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDc4ZWI2NmIuLmE4NTNlODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0xLDQgKzEsNCBAQAotRmVicnVhcnkgMjAwMyAgICAgICAgICAgICBLZXJuZWwgUGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgIHYyLjUuNTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsIFBhcmFtZXRlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn4KIAogVGhlIGZvbGxvd2luZyBpcyBhIGNvbnNvbGlkYXRlZCBsaXN0IG9mIHRoZSBrZXJuZWwgcGFyYW1ldGVycyBhcyBpbXBsZW1lbnRlZApAQCAtMTcsOSArMTcsMTcgQEAKIAogCXVzYmNvcmUuYmxpbmtlbmxpZ2h0cz0xCiAKLVRoZSB0ZXh0IGluIHNxdWFyZSBicmFja2V0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXNjcmlwdGlvbiBzdGF0ZXMgdGhlCi1yZXN0cmljdGlvbnMgb24gdGhlIGtlcm5lbCBmb3IgdGhlIHNhaWQga2VybmVsIHBhcmFtZXRlciB0byBiZSB2YWxpZC4gVGhlCi1yZXN0cmljdGlvbnMgcmVmZXJyZWQgdG8gYXJlIHRoYXQgdGhlIHJlbGV2YW50IG9wdGlvbiBpcyB2YWxpZCBpZjoKK1RoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZSBlbnRpcmVseSB1cCB0byBkYXRlIGFuZCBjb21wcmVoZW5zaXZlLiBUaGUgY29tbWFuZAorIm1vZGluZm8gLXAgJHttb2R1bGVuYW1lfSIgc2hvd3MgYSBjdXJyZW50IGxpc3Qgb2YgYWxsIHBhcmFtZXRlcnMgb2YgYSBsb2FkYWJsZQorbW9kdWxlLiBMb2FkYWJsZSBtb2R1bGVzLCBhZnRlciBiZWluZyBsb2FkZWQgaW50byB0aGUgcnVubmluZyBrZXJuZWwsIGFsc28KK3JldmVhbCB0aGVpciBwYXJhbWV0ZXJzIGluIC9zeXMvbW9kdWxlLyR7bW9kdWxlbmFtZX0vcGFyYW1ldGVycy8uIFNvbWUgb2YgdGhlc2UKK3BhcmFtZXRlcnMgbWF5IGJlIGNoYW5nZWQgYXQgcnVudGltZSBieSB0aGUgY29tbWFuZAorImVjaG8gLW4gJHt2YWx1ZX0gPiAvc3lzL21vZHVsZS8ke21vZHVsZW5hbWV9L3BhcmFtZXRlcnMvJHtwYXJtfSIuCisKK1RoZSBwYXJhbWV0ZXJzIGxpc3RlZCBiZWxvdyBhcmUgb25seSB2YWxpZCBpZiBjZXJ0YWluIGtlcm5lbCBidWlsZCBvcHRpb25zIHdlcmUKK2VuYWJsZWQgYW5kIGlmIHJlc3BlY3RpdmUgaGFyZHdhcmUgaXMgcHJlc2VudC4gVGhlIHRleHQgaW4gc3F1YXJlIGJyYWNrZXRzIGF0Cit0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZGVzY3JpcHRpb24gc3RhdGVzIHRoZSByZXN0cmljdGlvbnMgd2l0aGluIHdoaWNoIGEKK3BhcmFtZXRlciBpcyBhcHBsaWNhYmxlOgogCiAJQUNQSQlBQ1BJIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlBTFNBCUFMU0Egc291bmQgc3VwcG9ydCBpcyBlbmFibGVkLgpAQCAtMTA0OSwxMCArMTA1NywxMCBAQAogCW5vbHRsYnMJCVtQUENdIERvIG5vdCB1c2UgbGFyZ2UgcGFnZS90bGIgZW50cmllcyBmb3Iga2VybmVsCiAJCQlsb3dtZW0gbWFwcGluZyBvbiBQUEM0MHguCiAKLQlub21jZQkJW0lBLTMyXSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbgotCiAJbm9tY2EJCVtJQS02NF0gRGlzYWJsZSBtYWNoaW5lIGNoZWNrIGFib3J0IGhhbmRsaW5nCiAKKwlub21jZQkJW0lBLTMyXSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbgorCiAJbm9yZXNpZHVhbAlbUFBDXSBEb24ndCB1c2UgcmVzaWR1YWwgZGF0YSBvbiBQUmVQIG1hY2hpbmVzLgogCiAJbm9yZXN1bWUJW1NXU1VTUF0gRGlzYWJsZXMgcmVzdW1lIGFuZCByZXN0b3JlcyBvcmlnaW5hbCBzd2FwCkBAIC0xNjg1LDIwICsxNjkzLDYgQEAKIAogCiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi1DaGFuZ2Vsb2c6Ci0KLTIwMDAtMDYtPz8JTXIuIFVua25vd24KLQlUaGUgbGFzdCBrbm93biB1cGRhdGUgKGZvciAyLjQuMCkgLSB0aGUgY2hhbmdlbG9nIHdhcyBub3Qga2VwdCBiZWZvcmUuCi0KLTIwMDItMTEtMjQJUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4KLQkJUmFuZHkgRHVubGFwIDxyYW5keS5kdW5sYXBAdmVyaXpvbi5uZXQ+Ci0JVXBkYXRlIGZvciAyLjUuNDksIGRlc2NyaXB0aW9uIGZvciBtb3N0IG9mIHRoZSBvcHRpb25zIGludHJvZHVjZWQsCi0JcmVmZXJlbmNlcyB0byBvdGhlciBkb2N1bWVudGF0aW9uIChDIGZpbGVzLCBSRUFETUVzLCAuLiksIGFkZGVkIFMzOTAsCi0JUFBDLCBTUEFSQywgTVRELCBBTFNBIGFuZCBPU1MgY2F0ZWdvcnkuIE1pbm9yIGNvcnJlY3Rpb25zIGFuZAotCXJlZm9ybWF0dGluZy4KLQotMjAwNS0xMC0xOQlSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgotCUxvdHMgb2YgdHlwb3MsIHdoaXRlc3BhY2UsIHNvbWUgcmVmb3JtYXR0aW5nLgogCiBUT0RPOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CmluZGV4IGIxOGUyMTYuLjU2OTZlODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CkBAIC05MTksMTEgKzkxOSwxMSBAQAogICAgIGludCBzZXR0bGVfdGltZSA9IDYwOwogCiAgICAgLyogUGFyc2UgdGhlIHNpbXBsZSBjb21tYW5kLWxpbmUgKi8KLSAgICBpZiAoYWMgPT0gMikKLQlkaXNrID0gYXZbMV07Ci0gICAgZWxzZSBpZiAoYWMgPT0gNCkgewotCXNldHRsZV90aW1lID0gYXRvaShhdlsyXSk7Ci0JZGlzayA9IGF2WzNdOworICAgIGlmIChhcmdjID09IDIpCisJZGlzayA9IGFyZ3ZbMV07CisgICAgZWxzZSBpZiAoYXJnYyA9PSA0KSB7CisJc2V0dGxlX3RpbWUgPSBhdG9pKGFyZ3ZbMl0pOworCWRpc2sgPSBhcmd2WzNdOwogICAgIH0gZWxzZQogCXVzYWdlKCk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy1jbGFzcy50eHQgYi9Eb2N1bWVudGF0aW9uL2xlZHMtY2xhc3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMzVjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xlZHMtY2xhc3MudHh0CkBAIC0wLDAgKzEsNzEgQEAKK0xFRCBoYW5kbGluZyB1bmRlciBMaW51eAorPT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSdyZSByZWFkaW5nIHRoaXMgYW5kIHRoaW5raW5nIGFib3V0IGtleWJvYXJkIGxlZHMsIHRoZXNlIGFyZQoraGFuZGxlZCBieSB0aGUgaW5wdXQgc3Vic3lzdGVtIGFuZCB0aGUgbGVkIGNsYXNzIGlzICpub3QqIG5lZWRlZC4KKworSW4gaXRzIHNpbXBsZXN0IGZvcm0sIHRoZSBMRUQgY2xhc3MganVzdCBhbGxvd3MgY29udHJvbCBvZiBMRURzIGZyb20KK3VzZXJzcGFjZS4gTEVEcyBhcHBlYXIgaW4gL3N5cy9jbGFzcy9sZWRzLy4gVGhlIGJyaWdodG5lc3MgZmlsZSB3aWxsCitzZXQgdGhlIGJyaWdodG5lc3Mgb2YgdGhlIExFRCAodGFraW5nIGEgdmFsdWUgMC0yNTUpLiBNb3N0IExFRHMgZG9uJ3QKK2hhdmUgaGFyZHdhcmUgYnJpZ2h0bmVzcyBzdXBwb3J0IHNvIHdpbGwganVzdCBiZSB0dXJuZWQgb24gZm9yIG5vbi16ZXJvCiticmlnaHRuZXNzIHNldHRpbmdzLgorCitUaGUgY2xhc3MgYWxzbyBpbnRyb2R1Y2VzIHRoZSBvcHRpb25hbCBjb25jZXB0IG9mIGFuIExFRCB0cmlnZ2VyLiBBIHRyaWdnZXIKK2lzIGEga2VybmVsIGJhc2VkIHNvdXJjZSBvZiBsZWQgZXZlbnRzLiBUcmlnZ2VycyBjYW4gZWl0aGVyIGJlIHNpbXBsZSBvcgorY29tcGxleC4gQSBzaW1wbGUgdHJpZ2dlciBpc24ndCBjb25maWd1cmFibGUgYW5kIGlzIGRlc2lnbmVkIHRvIHNsb3QgaW50bworZXhpc3Rpbmcgc3Vic3lzdGVtcyB3aXRoIG1pbmltYWwgYWRkaXRpb25hbCBjb2RlLiBFeGFtcGxlcyBhcmUgdGhlIGlkZS1kaXNrLAorbmFuZC1kaXNrIGFuZCBzaGFycHNsLWNoYXJnZSB0cmlnZ2Vycy4gV2l0aCBsZWQgdHJpZ2dlcnMgZGlzYWJsZWQsIHRoZSBjb2RlCitvcHRpbWlzZXMgYXdheS4KKworQ29tcGxleCB0cmlnZ2VycyB3aGlsc3QgYXZhaWxhYmxlIHRvIGFsbCBMRURzIGhhdmUgTEVEIHNwZWNpZmljCitwYXJhbWV0ZXJzIGFuZCB3b3JrIG9uIGEgcGVyIExFRCBiYXNpcy4gVGhlIHRpbWVyIHRyaWdnZXIgaXMgYW4gZXhhbXBsZS4KKworWW91IGNhbiBjaGFuZ2UgdHJpZ2dlcnMgaW4gYSBzaW1pbGFyIG1hbm5lciB0byB0aGUgd2F5IGFuIElPIHNjaGVkdWxlcgoraXMgY2hvc2VuICh2aWEgL3N5cy9jbGFzcy9sZWRzLzxkZXZpY2U+L3RyaWdnZXIpLiBUcmlnZ2VyIHNwZWNpZmljCitwYXJhbWV0ZXJzIGNhbiBhcHBlYXIgaW4gL3N5cy9jbGFzcy9sZWRzLzxkZXZpY2U+IG9uY2UgYSBnaXZlbiB0cmlnZ2VyIGlzCitzZWxlY3RlZC4KKworCitEZXNpZ24gUGhpbG9zb3BoeQorPT09PT09PT09PT09PT09PT0KKworVGhlIHVuZGVybHlpbmcgZGVzaWduIHBoaWxvc29waHkgaXMgc2ltcGxpY2l0eS4gTEVEcyBhcmUgc2ltcGxlIGRldmljZXMKK2FuZCB0aGUgYWltIGlzIHRvIGtlZXAgYSBzbWFsbCBhbW91bnQgb2YgY29kZSBnaXZpbmcgYXMgbXVjaCBmdW5jdGlvbmFsaXR5CithcyBwb3NzaWJsZS4gIFBsZWFzZSBrZWVwIHRoaXMgaW4gbWluZCB3aGVuIHN1Z2dlc3RpbmcgZW5oYW5jZW1lbnRzLgorCisKK0xFRCBEZXZpY2UgTmFtaW5nCis9PT09PT09PT09PT09PT09PQorCitJcyBjdXJyZW50bHkgb2YgdGhlIGZvcm06CisKKyJkZXZpY2VuYW1lOmNvbG91ciIKKworVGhlcmUgaGF2ZSBiZWVuIGNhbGxzIGZvciBMRUQgcHJvcGVydGllcyBzdWNoIGFzIGNvbG91ciB0byBiZSBleHBvcnRlZCBhcworaW5kaXZpZHVhbCBsZWQgY2xhc3MgYXR0cmlidXRlcy4gQXMgYSBzb2x1dGlvbiB3aGljaCBkb2Vzbid0IGluY3VyIGFzIG11Y2gKK292ZXJoZWFkLCBJIHN1Z2dlc3QgdGhlc2UgYmVjb21lIHBhcnQgb2YgdGhlIGRldmljZSBuYW1lLiBUaGUgbmFtaW5nIHNjaGVtZQorYWJvdmUgbGVhdmVzIHNjb3BlIGZvciBmdXJ0aGVyIGF0dHJpYnV0ZXMgc2hvdWxkIHRoZXkgYmUgbmVlZGVkLgorCisKK0tub3duIElzc3VlcworPT09PT09PT09PT09CisKK1RoZSBMRUQgVHJpZ2dlciBjb3JlIGNhbm5vdCBiZSBhIG1vZHVsZSBhcyB0aGUgc2ltcGxlIHRyaWdnZXIgZnVuY3Rpb25zCit3b3VsZCBjYXVzZSBuaWdodG1hcmUgZGVwZW5kZW5jeSBpc3N1ZXMuIEkgc2VlIHRoaXMgYXMgYSBtaW5vciBpc3N1ZQorY29tcGFyZWQgdG8gdGhlIGJlbmVmaXRzIHRoZSBzaW1wbGUgdHJpZ2dlciBmdW5jdGlvbmFsaXR5IGJyaW5ncy4gVGhlCityZXN0IG9mIHRoZSBMRUQgc3Vic3lzdGVtIGNhbiBiZSBtb2R1bGFyLgorCitTb21lIGxlZHMgY2FuIGJlIHByb2dyYW1tZWQgdG8gZmxhc2ggaW4gaGFyZHdhcmUuIEFzIHRoaXMgaXNuJ3QgYSBnZW5lcmljCitMRUQgZGV2aWNlIHByb3BlcnR5LCB0aGlzIHNob3VsZCBiZSBleHBvcnRlZCBhcyBhIGRldmljZSBzcGVjaWZpYyBzeXNmcworYXR0cmlidXRlIHJhdGhlciB0aGFuIHBhcnQgb2YgdGhlIGNsYXNzIGlmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZXF1aXJlZC4KKworCitGdXR1cmUgRGV2ZWxvcG1lbnQKKz09PT09PT09PT09PT09PT09PQorCitBdCB0aGUgbW9tZW50LCBhIHRyaWdnZXIgY2FuJ3QgYmUgY3JlYXRlZCBzcGVjaWZpY2FsbHkgZm9yIGEgc2luZ2xlIExFRC4KK1RoZXJlIGFyZSBhIG51bWJlciBvZiBjYXNlcyB3aGVyZSBhIHRyaWdnZXIgbWlnaHQgb25seSBiZSBtYXBwYWJsZSB0byBhCitwYXJ0aWN1bGFyIExFRCAoQUNQST8pLiBUaGUgYWRkaXRpb24gb2YgdHJpZ2dlcnMgcHJvdmlkZWQgYnkgdGhlIExFRCBkcml2ZXIKK3Nob3VsZCBjb3ZlciB0aGlzIG9wdGlvbiBhbmQgYmUgcG9zc2libGUgdG8gYWRkIHdpdGhvdXQgYnJlYWtpbmcgdGhlCitjdXJyZW50IGludGVyZmFjZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTA4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTAsMCArMSwyMTMzIEBACisJCQkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJIExJTlVYIEtFUk5FTCBNRU1PUlkgQkFSUklFUlMKKwkJCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0J5OiBEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgorCitDb250ZW50czoKKworICgqKSBBYnN0cmFjdCBtZW1vcnkgYWNjZXNzIG1vZGVsLgorCisgICAgIC0gRGV2aWNlIG9wZXJhdGlvbnMuCisgICAgIC0gR3VhcmFudGVlcy4KKworICgqKSBXaGF0IGFyZSBtZW1vcnkgYmFycmllcnM/CisKKyAgICAgLSBWYXJpZXRpZXMgb2YgbWVtb3J5IGJhcnJpZXIuCisgICAgIC0gV2hhdCBtYXkgbm90IGJlIGFzc3VtZWQgYWJvdXQgbWVtb3J5IGJhcnJpZXJzPworICAgICAtIERhdGEgZGVwZW5kZW5jeSBiYXJyaWVycy4KKyAgICAgLSBDb250cm9sIGRlcGVuZGVuY2llcy4KKyAgICAgLSBTTVAgYmFycmllciBwYWlyaW5nLgorICAgICAtIEV4YW1wbGVzIG9mIG1lbW9yeSBiYXJyaWVyIHNlcXVlbmNlcy4KKyAgICAgLSBSZWFkIG1lbW9yeSBiYXJyaWVycyB2cyBsb2FkIHNwZWN1bGF0aW9uLgorCisgKCopIEV4cGxpY2l0IGtlcm5lbCBiYXJyaWVycy4KKworICAgICAtIENvbXBpbGVyIGJhcnJpZXIuCisgICAgIC0gVGhlIENQVSBtZW1vcnkgYmFycmllcnMuCisgICAgIC0gTU1JTyB3cml0ZSBiYXJyaWVyLgorCisgKCopIEltcGxpY2l0IGtlcm5lbCBtZW1vcnkgYmFycmllcnMuCisKKyAgICAgLSBMb2NraW5nIGZ1bmN0aW9ucy4KKyAgICAgLSBJbnRlcnJ1cHQgZGlzYWJsaW5nIGZ1bmN0aW9ucy4KKyAgICAgLSBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucy4KKworICgqKSBJbnRlci1DUFUgbG9ja2luZyBiYXJyaWVyIGVmZmVjdHMuCisKKyAgICAgLSBMb2NrcyB2cyBtZW1vcnkgYWNjZXNzZXMuCisgICAgIC0gTG9ja3MgdnMgSS9PIGFjY2Vzc2VzLgorCisgKCopIFdoZXJlIGFyZSBtZW1vcnkgYmFycmllcnMgbmVlZGVkPworCisgICAgIC0gSW50ZXJwcm9jZXNzb3IgaW50ZXJhY3Rpb24uCisgICAgIC0gQXRvbWljIG9wZXJhdGlvbnMuCisgICAgIC0gQWNjZXNzaW5nIGRldmljZXMuCisgICAgIC0gSW50ZXJydXB0cy4KKworICgqKSBLZXJuZWwgSS9PIGJhcnJpZXIgZWZmZWN0cy4KKworICgqKSBBc3N1bWVkIG1pbmltdW0gZXhlY3V0aW9uIG9yZGVyaW5nIG1vZGVsLgorCisgKCopIFRoZSBlZmZlY3RzIG9mIHRoZSBjcHUgY2FjaGUuCisKKyAgICAgLSBDYWNoZSBjb2hlcmVuY3kuCisgICAgIC0gQ2FjaGUgY29oZXJlbmN5IHZzIERNQS4KKyAgICAgLSBDYWNoZSBjb2hlcmVuY3kgdnMgTU1JTy4KKworICgqKSBUaGUgdGhpbmdzIENQVXMgZ2V0IHVwIHRvLgorCisgICAgIC0gQW5kIHRoZW4gdGhlcmUncyB0aGUgQWxwaGEuCisKKyAoKikgUmVmZXJlbmNlcy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBQlNUUkFDVCBNRU1PUlkgQUNDRVNTIE1PREVMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYWJzdHJhY3QgbW9kZWwgb2YgdGhlIHN5c3RlbToKKworCQkgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIDoKKwkJICAgICAgICAgICAgOiAgICAgICAgICAgICAgICA6CisJCSAgICAgICAgICAgIDogICAgICAgICAgICAgICAgOgorCQkrLS0tLS0tLSsgICA6ICAgKy0tLS0tLS0tKyAgIDogICArLS0tLS0tLSsKKwkJfCAgICAgICB8ICAgOiAgIHwgICAgICAgIHwgICA6ICAgfCAgICAgICB8CisJCXwgICAgICAgfCAgIDogICB8ICAgICAgICB8ICAgOiAgIHwgICAgICAgfAorCQl8IENQVSAxIHw8LS0tLS0+fCBNZW1vcnkgfDwtLS0tLT58IENQVSAyIHwKKwkJfCAgICAgICB8ICAgOiAgIHwgICAgICAgIHwgICA6ICAgfCAgICAgICB8CisJCXwgICAgICAgfCAgIDogICB8ICAgICAgICB8ICAgOiAgIHwgICAgICAgfAorCQkrLS0tLS0tLSsgICA6ICAgKy0tLS0tLS0tKyAgIDogICArLS0tLS0tLSsKKwkJICAgIF4gICAgICAgOiAgICAgICBeICAgICAgICA6ICAgICAgIF4KKwkJICAgIHwgICAgICAgOiAgICAgICB8ICAgICAgICA6ICAgICAgIHwKKwkJICAgIHwgICAgICAgOiAgICAgICB8ICAgICAgICA6ICAgICAgIHwKKwkJICAgIHwgICAgICAgOiAgICAgICB2ICAgICAgICA6ICAgICAgIHwKKwkJICAgIHwgICAgICAgOiAgICstLS0tLS0tLSsgICA6ICAgICAgIHwKKwkJICAgIHwgICAgICAgOiAgIHwgICAgICAgIHwgICA6ICAgICAgIHwKKwkJICAgIHwgICAgICAgOiAgIHwgICAgICAgIHwgICA6ICAgICAgIHwKKwkJICAgICstLS0tLS0tLS0tPnwgRGV2aWNlIHw8LS0tLS0tLS0tLSsKKwkJICAgICAgICAgICAgOiAgIHwgICAgICAgIHwgICA6CisJCSAgICAgICAgICAgIDogICB8ICAgICAgICB8ICAgOgorCQkgICAgICAgICAgICA6ICAgKy0tLS0tLS0tKyAgIDoKKwkJICAgICAgICAgICAgOiAgICAgICAgICAgICAgICA6CisKK0VhY2ggQ1BVIGV4ZWN1dGVzIGEgcHJvZ3JhbSB0aGF0IGdlbmVyYXRlcyBtZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnMuICBJbiB0aGUKK2Fic3RyYWN0IENQVSwgbWVtb3J5IG9wZXJhdGlvbiBvcmRlcmluZyBpcyB2ZXJ5IHJlbGF4ZWQsIGFuZCBhIENQVSBtYXkgYWN0dWFsbHkKK3BlcmZvcm0gdGhlIG1lbW9yeSBvcGVyYXRpb25zIGluIGFueSBvcmRlciBpdCBsaWtlcywgcHJvdmlkZWQgcHJvZ3JhbSBjYXVzYWxpdHkKK2FwcGVhcnMgdG8gYmUgbWFpbnRhaW5lZC4gIFNpbWlsYXJseSwgdGhlIGNvbXBpbGVyIG1heSBhbHNvIGFycmFuZ2UgdGhlCitpbnN0cnVjdGlvbnMgaXQgZW1pdHMgaW4gYW55IG9yZGVyIGl0IGxpa2VzLCBwcm92aWRlZCBpdCBkb2Vzbid0IGFmZmVjdCB0aGUKK2FwcGFyZW50IG9wZXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KKworU28gaW4gdGhlIGFib3ZlIGRpYWdyYW0sIHRoZSBlZmZlY3RzIG9mIHRoZSBtZW1vcnkgb3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgYQorQ1BVIGFyZSBwZXJjZWl2ZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBhcyB0aGUgb3BlcmF0aW9ucyBjcm9zcyB0aGUKK2ludGVyZmFjZSBiZXR3ZWVuIHRoZSBDUFUgYW5kIHJlc3Qgb2YgdGhlIHN5c3RlbSAodGhlIGRvdHRlZCBsaW5lcykuCisKKworRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzOgorCisJQ1BVIDEJCUNQVSAyCisJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQorCXsgQSA9PSAxOyBCID09IDIgfQorCUEgPSAzOwkJeCA9IEE7CisJQiA9IDQ7CQl5ID0gQjsKKworVGhlIHNldCBvZiBhY2Nlc3NlcyBhcyBzZWVuIGJ5IHRoZSBtZW1vcnkgc3lzdGVtIGluIHRoZSBtaWRkbGUgY2FuIGJlIGFycmFuZ2VkCitpbiAyNCBkaWZmZXJlbnQgY29tYmluYXRpb25zOgorCisJU1RPUkUgQT0zLAlTVE9SRSBCPTQsCXg9TE9BRCBBLT4zLAl5PUxPQUQgQi0+NAorCVNUT1JFIEE9MywJU1RPUkUgQj00LAl5PUxPQUQgQi0+NCwJeD1MT0FEIEEtPjMKKwlTVE9SRSBBPTMsCXg9TE9BRCBBLT4zLAlTVE9SRSBCPTQsCXk9TE9BRCBCLT40CisJU1RPUkUgQT0zLAl4PUxPQUQgQS0+MywJeT1MT0FEIEItPjIsCVNUT1JFIEI9NAorCVNUT1JFIEE9MywJeT1MT0FEIEItPjIsCVNUT1JFIEI9NCwJeD1MT0FEIEEtPjMKKwlTVE9SRSBBPTMsCXk9TE9BRCBCLT4yLAl4PUxPQUQgQS0+MywJU1RPUkUgQj00CisJU1RPUkUgQj00LAlTVE9SRSBBPTMsCXg9TE9BRCBBLT4zLAl5PUxPQUQgQi0+NAorCVNUT1JFIEI9NCwgLi4uCisJLi4uCisKK2FuZCBjYW4gdGh1cyByZXN1bHQgaW4gZm91ciBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIHZhbHVlczoKKworCXggPT0gMSwgeSA9PSAyCisJeCA9PSAxLCB5ID09IDQKKwl4ID09IDMsIHkgPT0gMgorCXggPT0gMywgeSA9PSA0CisKKworRnVydGhlcm1vcmUsIHRoZSBzdG9yZXMgY29tbWl0dGVkIGJ5IGEgQ1BVIHRvIHRoZSBtZW1vcnkgc3lzdGVtIG1heSBub3QgYmUKK3BlcmNlaXZlZCBieSB0aGUgbG9hZHMgbWFkZSBieSBhbm90aGVyIENQVSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgc3RvcmVzIHdlcmUKK2NvbW1pdHRlZC4KKworCitBcyBhIGZ1cnRoZXIgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBzZXF1ZW5jZSBvZiBldmVudHM6CisKKwlDUFUgMQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09CisJeyBBID09IDEsIEIgPT0gMiwgQyA9IDMsIFAgPT0gJkEsIFEgPT0gJkMgfQorCUIgPSA0OwkJUSA9IFA7CisJUCA9ICZCCQlEID0gKlE7CisKK1RoZXJlIGlzIGFuIG9idmlvdXMgZGF0YSBkZXBlbmRlbmN5IGhlcmUsIGFzIHRoZSB2YWx1ZSBsb2FkZWQgaW50byBEIGRlcGVuZHMgb24KK3RoZSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFAgYnkgQ1BVIDIuICBBdCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSwgYW55IG9mIHRoZQorZm9sbG93aW5nIHJlc3VsdHMgYXJlIHBvc3NpYmxlOgorCisJKFEgPT0gJkEpIGFuZCAoRCA9PSAxKQorCShRID09ICZCKSBhbmQgKEQgPT0gMikKKwkoUSA9PSAmQikgYW5kIChEID09IDQpCisKK05vdGUgdGhhdCBDUFUgMiB3aWxsIG5ldmVyIHRyeSBhbmQgbG9hZCBDIGludG8gRCBiZWNhdXNlIHRoZSBDUFUgd2lsbCBsb2FkIFAKK2ludG8gUSBiZWZvcmUgaXNzdWluZyB0aGUgbG9hZCBvZiAqUS4KKworCitERVZJQ0UgT1BFUkFUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZSBkZXZpY2VzIHByZXNlbnQgdGhlaXIgY29udHJvbCBpbnRlcmZhY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG1lbW9yeQorbG9jYXRpb25zLCBidXQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgaXMgdmVyeQoraW1wb3J0YW50LiAgRm9yIGluc3RhbmNlLCBpbWFnaW5lIGFuIGV0aGVybmV0IGNhcmQgd2l0aCBhIHNldCBvZiBpbnRlcm5hbAorcmVnaXN0ZXJzIHRoYXQgYXJlIGFjY2Vzc2VkIHRocm91Z2ggYW4gYWRkcmVzcyBwb3J0IHJlZ2lzdGVyIChBKSBhbmQgYSBkYXRhCitwb3J0IHJlZ2lzdGVyIChEKS4gIFRvIHJlYWQgaW50ZXJuYWwgcmVnaXN0ZXIgNSwgdGhlIGZvbGxvd2luZyBjb2RlIG1pZ2h0IHRoZW4KK2JlIHVzZWQ6CisKKwkqQSA9IDU7CisJeCA9ICpEOworCitidXQgdGhpcyBtaWdodCBzaG93IHVwIGFzIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIHR3byBzZXF1ZW5jZXM6CisKKwlTVE9SRSAqQSA9IDUsIHggPSBMT0FEICpECisJeCA9IExPQUQgKkQsIFNUT1JFICpBID0gNQorCit0aGUgc2Vjb25kIG9mIHdoaWNoIHdpbGwgYWxtb3N0IGNlcnRhaW5seSByZXN1bHQgaW4gYSBtYWxmdW5jdGlvbiwgc2luY2UgaXQgc2V0Cit0aGUgYWRkcmVzcyBfYWZ0ZXJfIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgcmVnaXN0ZXIuCisKKworR1VBUkFOVEVFUworLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgc29tZSBtaW5pbWFsIGd1YXJhbnRlZXMgdGhhdCBtYXkgYmUgZXhwZWN0ZWQgb2YgYSBDUFU6CisKKyAoKikgT24gYW55IGdpdmVuIENQVSwgZGVwZW5kZW50IG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGJlIGlzc3VlZCBpbiBvcmRlciwgd2l0aAorICAgICByZXNwZWN0IHRvIGl0c2VsZi4gIFRoaXMgbWVhbnMgdGhhdCBmb3I6CisKKwlRID0gUDsgRCA9ICpROworCisgICAgIHRoZSBDUFUgd2lsbCBpc3N1ZSB0aGUgZm9sbG93aW5nIG1lbW9yeSBvcGVyYXRpb25zOgorCisJUSA9IExPQUQgUCwgRCA9IExPQUQgKlEKKworICAgICBhbmQgYWx3YXlzIGluIHRoYXQgb3JkZXIuCisKKyAoKikgT3ZlcmxhcHBpbmcgbG9hZHMgYW5kIHN0b3JlcyB3aXRoaW4gYSBwYXJ0aWN1bGFyIENQVSB3aWxsIGFwcGVhciB0byBiZQorICAgICBvcmRlcmVkIHdpdGhpbiB0aGF0IENQVS4gIFRoaXMgbWVhbnMgdGhhdCBmb3I6CisKKwlhID0gKlg7ICpYID0gYjsKKworICAgICB0aGUgQ1BVIHdpbGwgb25seSBpc3N1ZSB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIG1lbW9yeSBvcGVyYXRpb25zOgorCisJYSA9IExPQUQgKlgsIFNUT1JFICpYID0gYgorCisgICAgIEFuZCBmb3I6CisKKwkqWCA9IGM7IGQgPSAqWDsKKworICAgICB0aGUgQ1BVIHdpbGwgb25seSBpc3N1ZToKKworCVNUT1JFICpYID0gYywgZCA9IExPQUQgKlgKKworICAgICAoTG9hZHMgYW5kIHN0b3JlcyBvdmVybGFwIGlmIHRoZXkgYXJlIHRhcmdldHRlZCBhdCBvdmVybGFwcGluZyBwaWVjZXMgb2YKKyAgICAgbWVtb3J5KS4KKworQW5kIHRoZXJlIGFyZSBhIG51bWJlciBvZiB0aGluZ3MgdGhhdCBfbXVzdF8gb3IgX211c3Rfbm90XyBiZSBhc3N1bWVkOgorCisgKCopIEl0IF9tdXN0X25vdF8gYmUgYXNzdW1lZCB0aGF0IGluZGVwZW5kZW50IGxvYWRzIGFuZCBzdG9yZXMgd2lsbCBiZSBpc3N1ZWQKKyAgICAgaW4gdGhlIG9yZGVyIGdpdmVuLiAgVGhpcyBtZWFucyB0aGF0IGZvcjoKKworCVggPSAqQTsgWSA9ICpCOyAqRCA9IFo7CisKKyAgICAgd2UgbWF5IGdldCBhbnkgb2YgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZXM6CisKKwlYID0gTE9BRCAqQSwgIFkgPSBMT0FEICpCLCAgU1RPUkUgKkQgPSBaCisJWCA9IExPQUQgKkEsICBTVE9SRSAqRCA9IFosIFkgPSBMT0FEICpCCisJWSA9IExPQUQgKkIsICBYID0gTE9BRCAqQSwgIFNUT1JFICpEID0gWgorCVkgPSBMT0FEICpCLCAgU1RPUkUgKkQgPSBaLCBYID0gTE9BRCAqQQorCVNUT1JFICpEID0gWiwgWCA9IExPQUQgKkEsICBZID0gTE9BRCAqQgorCVNUT1JFICpEID0gWiwgWSA9IExPQUQgKkIsICBYID0gTE9BRCAqQQorCisgKCopIEl0IF9tdXN0XyBiZSBhc3N1bWVkIHRoYXQgb3ZlcmxhcHBpbmcgbWVtb3J5IGFjY2Vzc2VzIG1heSBiZSBtZXJnZWQgb3IKKyAgICAgZGlzY2FyZGVkLiAgVGhpcyBtZWFucyB0aGF0IGZvcjoKKworCVggPSAqQTsgWSA9ICooQSArIDQpOworCisgICAgIHdlIG1heSBnZXQgYW55IG9uZSBvZiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlczoKKworCVggPSBMT0FEICpBOyBZID0gTE9BRCAqKEEgKyA0KTsKKwlZID0gTE9BRCAqKEEgKyA0KTsgWCA9IExPQUQgKkE7CisJe1gsIFl9ID0gTE9BRCB7KkEsICooQSArIDQpIH07CisKKyAgICAgQW5kIGZvcjoKKworCSpBID0gWDsgWSA9ICpBOworCisgICAgIHdlIG1heSBnZXQgZWl0aGVyIG9mOgorCisJU1RPUkUgKkEgPSBYOyBZID0gTE9BRCAqQTsKKwlTVE9SRSAqQSA9IFkgPSBYOworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT0KK1dIQVQgQVJFIE1FTU9SWSBCQVJSSUVSUz8KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXMgY2FuIGJlIHNlZW4gYWJvdmUsIGluZGVwZW5kZW50IG1lbW9yeSBvcGVyYXRpb25zIGFyZSBlZmZlY3RpdmVseSBwZXJmb3JtZWQKK2luIHJhbmRvbSBvcmRlciwgYnV0IHRoaXMgY2FuIGJlIGEgcHJvYmxlbSBmb3IgQ1BVLUNQVSBpbnRlcmFjdGlvbiBhbmQgZm9yIEkvTy4KK1doYXQgaXMgcmVxdWlyZWQgaXMgc29tZSB3YXkgb2YgaW50ZXJ2ZW5pbmcgdG8gaW5zdHJ1Y3QgdGhlIGNvbXBpbGVyIGFuZCB0aGUKK0NQVSB0byByZXN0cmljdCB0aGUgb3JkZXIuCisKK01lbW9yeSBiYXJyaWVycyBhcmUgc3VjaCBpbnRlcnZlbnRpb25zLiAgVGhleSBpbXBvc2UgYSBwZXJjZWl2ZWQgcGFydGlhbAorb3JkZXJpbmcgYmV0d2VlbiB0aGUgbWVtb3J5IG9wZXJhdGlvbnMgc3BlY2lmaWVkIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBiYXJyaWVyLgorVGhleSByZXF1ZXN0IHRoYXQgdGhlIHNlcXVlbmNlIG9mIG1lbW9yeSBldmVudHMgZ2VuZXJhdGVkIGFwcGVhcnMgdG8gb3RoZXIKK3BhcnRzIG9mIHRoZSBzeXN0ZW0gYXMgaWYgdGhlIGJhcnJpZXIgaXMgZWZmZWN0aXZlIG9uIHRoYXQgQ1BVLgorCisKK1ZBUklFVElFUyBPRiBNRU1PUlkgQkFSUklFUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01lbW9yeSBiYXJyaWVycyBjb21lIGluIGZvdXIgYmFzaWMgdmFyaWV0aWVzOgorCisgKDEpIFdyaXRlIChvciBzdG9yZSkgbWVtb3J5IGJhcnJpZXJzLgorCisgICAgIEEgd3JpdGUgbWVtb3J5IGJhcnJpZXIgZ2l2ZXMgYSBndWFyYW50ZWUgdGhhdCBhbGwgdGhlIFNUT1JFIG9wZXJhdGlvbnMKKyAgICAgc3BlY2lmaWVkIGJlZm9yZSB0aGUgYmFycmllciB3aWxsIGFwcGVhciB0byBoYXBwZW4gYmVmb3JlIGFsbCB0aGUgU1RPUkUKKyAgICAgb3BlcmF0aW9ucyBzcGVjaWZpZWQgYWZ0ZXIgdGhlIGJhcnJpZXIgd2l0aCByZXNwZWN0IHRvIHRoZSBvdGhlcgorICAgICBjb21wb25lbnRzIG9mIHRoZSBzeXN0ZW0uCisKKyAgICAgQSB3cml0ZSBiYXJyaWVyIGlzIGEgcGFydGlhbCBvcmRlcmluZyBvbiBzdG9yZXMgb25seTsgaXQgaXMgbm90IHJlcXVpcmVkCisgICAgIHRvIGhhdmUgYW55IGVmZmVjdCBvbiBsb2Fkcy4KKworICAgICBBIENQVSBjYW4gYmUgdmlld2VkIGFzIGFzIGNvbW1pdGluZyBhIHNlcXVlbmNlIG9mIHN0b3JlIG9wZXJhdGlvbnMgdG8gdGhlCisgICAgIG1lbW9yeSBzeXN0ZW0gYXMgdGltZSBwcm9ncmVzc2VzLiAgQWxsIHN0b3JlcyBiZWZvcmUgYSB3cml0ZSBiYXJyaWVyIHdpbGwKKyAgICAgb2NjdXIgaW4gdGhlIHNlcXVlbmNlIF9iZWZvcmVfIGFsbCB0aGUgc3RvcmVzIGFmdGVyIHRoZSB3cml0ZSBiYXJyaWVyLgorCisgICAgIFshXSBOb3RlIHRoYXQgd3JpdGUgYmFycmllcnMgc2hvdWxkIG5vcm1hbGx5IGJlIHBhaXJlZCB3aXRoIHJlYWQgb3IgZGF0YQorICAgICBkZXBlbmRlbmN5IGJhcnJpZXJzOyBzZWUgdGhlICJTTVAgYmFycmllciBwYWlyaW5nIiBzdWJzZWN0aW9uLgorCisKKyAoMikgRGF0YSBkZXBlbmRlbmN5IGJhcnJpZXJzLgorCisgICAgIEEgZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXIgaXMgYSB3ZWFrZXIgZm9ybSBvZiByZWFkIGJhcnJpZXIuICBJbiB0aGUgY2FzZQorICAgICB3aGVyZSB0d28gbG9hZHMgYXJlIHBlcmZvcm1lZCBzdWNoIHRoYXQgdGhlIHNlY29uZCBkZXBlbmRzIG9uIHRoZSByZXN1bHQKKyAgICAgb2YgdGhlIGZpcnN0IChlZzogdGhlIGZpcnN0IGxvYWQgcmV0cmlldmVzIHRoZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBzZWNvbmQKKyAgICAgbG9hZCB3aWxsIGJlIGRpcmVjdGVkKSwgYSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciB3b3VsZCBiZSByZXF1aXJlZCB0bworICAgICBtYWtlIHN1cmUgdGhhdCB0aGUgdGFyZ2V0IG9mIHRoZSBzZWNvbmQgbG9hZCBpcyB1cGRhdGVkIGJlZm9yZSB0aGUgYWRkcmVzcworICAgICBvYnRhaW5lZCBieSB0aGUgZmlyc3QgbG9hZCBpcyBhY2Nlc3NlZC4KKworICAgICBBIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyIGlzIGEgcGFydGlhbCBvcmRlcmluZyBvbiBpbnRlcmRlcGVuZGVudCBsb2FkcworICAgICBvbmx5OyBpdCBpcyBub3QgcmVxdWlyZWQgdG8gaGF2ZSBhbnkgZWZmZWN0IG9uIHN0b3JlcywgaW5kZXBlbmRlbnQgbG9hZHMKKyAgICAgb3Igb3ZlcmxhcHBpbmcgbG9hZHMuCisKKyAgICAgQXMgbWVudGlvbmVkIGluICgxKSwgdGhlIG90aGVyIENQVXMgaW4gdGhlIHN5c3RlbSBjYW4gYmUgdmlld2VkIGFzCisgICAgIGNvbW1pdHRpbmcgc2VxdWVuY2VzIG9mIHN0b3JlcyB0byB0aGUgbWVtb3J5IHN5c3RlbSB0aGF0IHRoZSBDUFUgYmVpbmcKKyAgICAgY29uc2lkZXJlZCBjYW4gdGhlbiBwZXJjZWl2ZS4gIEEgZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXIgaXNzdWVkIGJ5IHRoZSBDUFUKKyAgICAgdW5kZXIgY29uc2lkZXJhdGlvbiBndWFyYW50ZWVzIHRoYXQgZm9yIGFueSBsb2FkIHByZWNlZGluZyBpdCwgaWYgdGhhdAorICAgICBsb2FkIHRvdWNoZXMgb25lIG9mIGEgc2VxdWVuY2Ugb2Ygc3RvcmVzIGZyb20gYW5vdGhlciBDUFUsIHRoZW4gYnkgdGhlCisgICAgIHRpbWUgdGhlIGJhcnJpZXIgY29tcGxldGVzLCB0aGUgZWZmZWN0cyBvZiBhbGwgdGhlIHN0b3JlcyBwcmlvciB0byB0aGF0CisgICAgIHRvdWNoZWQgYnkgdGhlIGxvYWQgd2lsbCBiZSBwZXJjZXB0aWJsZSB0byBhbnkgbG9hZHMgaXNzdWVkIGFmdGVyIHRoZSBkYXRhCisgICAgIGRlcGVuZGVuY3kgYmFycmllci4KKworICAgICBTZWUgdGhlICJFeGFtcGxlcyBvZiBtZW1vcnkgYmFycmllciBzZXF1ZW5jZXMiIHN1YnNlY3Rpb24gZm9yIGRpYWdyYW1zCisgICAgIHNob3dpbmcgdGhlIG9yZGVyaW5nIGNvbnN0cmFpbnRzLgorCisgICAgIFshXSBOb3RlIHRoYXQgdGhlIGZpcnN0IGxvYWQgcmVhbGx5IGhhcyB0byBoYXZlIGEgX2RhdGFfIGRlcGVuZGVuY3kgYW5kCisgICAgIG5vdCBhIGNvbnRyb2wgZGVwZW5kZW5jeS4gIElmIHRoZSBhZGRyZXNzIGZvciB0aGUgc2Vjb25kIGxvYWQgaXMgZGVwZW5kZW50CisgICAgIG9uIHRoZSBmaXJzdCBsb2FkLCBidXQgdGhlIGRlcGVuZGVuY3kgaXMgdGhyb3VnaCBhIGNvbmRpdGlvbmFsIHJhdGhlciB0aGFuCisgICAgIGFjdHVhbGx5IGxvYWRpbmcgdGhlIGFkZHJlc3MgaXRzZWxmLCB0aGVuIGl0J3MgYSBfY29udHJvbF8gZGVwZW5kZW5jeSBhbmQKKyAgICAgYSBmdWxsIHJlYWQgYmFycmllciBvciBiZXR0ZXIgaXMgcmVxdWlyZWQuICBTZWUgdGhlICJDb250cm9sIGRlcGVuZGVuY2llcyIKKyAgICAgc3Vic2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICBbIV0gTm90ZSB0aGF0IGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVycyBzaG91bGQgbm9ybWFsbHkgYmUgcGFpcmVkIHdpdGgKKyAgICAgd3JpdGUgYmFycmllcnM7IHNlZSB0aGUgIlNNUCBiYXJyaWVyIHBhaXJpbmciIHN1YnNlY3Rpb24uCisKKworICgzKSBSZWFkIChvciBsb2FkKSBtZW1vcnkgYmFycmllcnMuCisKKyAgICAgQSByZWFkIGJhcnJpZXIgaXMgYSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciBwbHVzIGEgZ3VhcmFudGVlIHRoYXQgYWxsIHRoZQorICAgICBMT0FEIG9wZXJhdGlvbnMgc3BlY2lmaWVkIGJlZm9yZSB0aGUgYmFycmllciB3aWxsIGFwcGVhciB0byBoYXBwZW4gYmVmb3JlCisgICAgIGFsbCB0aGUgTE9BRCBvcGVyYXRpb25zIHNwZWNpZmllZCBhZnRlciB0aGUgYmFycmllciB3aXRoIHJlc3BlY3QgdG8gdGhlCisgICAgIG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIHN5c3RlbS4KKworICAgICBBIHJlYWQgYmFycmllciBpcyBhIHBhcnRpYWwgb3JkZXJpbmcgb24gbG9hZHMgb25seTsgaXQgaXMgbm90IHJlcXVpcmVkIHRvCisgICAgIGhhdmUgYW55IGVmZmVjdCBvbiBzdG9yZXMuCisKKyAgICAgUmVhZCBtZW1vcnkgYmFycmllcnMgaW1wbHkgZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXJzLCBhbmQgc28gY2FuIHN1YnN0aXR1dGUKKyAgICAgZm9yIHRoZW0uCisKKyAgICAgWyFdIE5vdGUgdGhhdCByZWFkIGJhcnJpZXJzIHNob3VsZCBub3JtYWxseSBiZSBwYWlyZWQgd2l0aCB3cml0ZSBiYXJyaWVyczsKKyAgICAgc2VlIHRoZSAiU01QIGJhcnJpZXIgcGFpcmluZyIgc3Vic2VjdGlvbi4KKworCisgKDQpIEdlbmVyYWwgbWVtb3J5IGJhcnJpZXJzLgorCisgICAgIEEgZ2VuZXJhbCBtZW1vcnkgYmFycmllciBnaXZlcyBhIGd1YXJhbnRlZSB0aGF0IGFsbCB0aGUgTE9BRCBhbmQgU1RPUkUKKyAgICAgb3BlcmF0aW9ucyBzcGVjaWZpZWQgYmVmb3JlIHRoZSBiYXJyaWVyIHdpbGwgYXBwZWFyIHRvIGhhcHBlbiBiZWZvcmUgYWxsCisgICAgIHRoZSBMT0FEIGFuZCBTVE9SRSBvcGVyYXRpb25zIHNwZWNpZmllZCBhZnRlciB0aGUgYmFycmllciB3aXRoIHJlc3BlY3QgdG8KKyAgICAgdGhlIG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIHN5c3RlbS4KKworICAgICBBIGdlbmVyYWwgbWVtb3J5IGJhcnJpZXIgaXMgYSBwYXJ0aWFsIG9yZGVyaW5nIG92ZXIgYm90aCBsb2FkcyBhbmQgc3RvcmVzLgorCisgICAgIEdlbmVyYWwgbWVtb3J5IGJhcnJpZXJzIGltcGx5IGJvdGggcmVhZCBhbmQgd3JpdGUgbWVtb3J5IGJhcnJpZXJzLCBhbmQgc28KKyAgICAgY2FuIHN1YnN0aXR1dGUgZm9yIGVpdGhlci4KKworCitBbmQgYSBjb3VwbGUgb2YgaW1wbGljaXQgdmFyaWV0aWVzOgorCisgKDUpIExPQ0sgb3BlcmF0aW9ucy4KKworICAgICBUaGlzIGFjdHMgYXMgYSBvbmUtd2F5IHBlcm1lYWJsZSBiYXJyaWVyLiAgSXQgZ3VhcmFudGVlcyB0aGF0IGFsbCBtZW1vcnkKKyAgICAgb3BlcmF0aW9ucyBhZnRlciB0aGUgTE9DSyBvcGVyYXRpb24gd2lsbCBhcHBlYXIgdG8gaGFwcGVuIGFmdGVyIHRoZSBMT0NLCisgICAgIG9wZXJhdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIHN5c3RlbS4KKworICAgICBNZW1vcnkgb3BlcmF0aW9ucyB0aGF0IG9jY3VyIGJlZm9yZSBhIExPQ0sgb3BlcmF0aW9uIG1heSBhcHBlYXIgdG8gaGFwcGVuCisgICAgIGFmdGVyIGl0IGNvbXBsZXRlcy4KKworICAgICBBIExPQ0sgb3BlcmF0aW9uIHNob3VsZCBhbG1vc3QgYWx3YXlzIGJlIHBhaXJlZCB3aXRoIGFuIFVOTE9DSyBvcGVyYXRpb24uCisKKworICg2KSBVTkxPQ0sgb3BlcmF0aW9ucy4KKworICAgICBUaGlzIGFsc28gYWN0cyBhcyBhIG9uZS13YXkgcGVybWVhYmxlIGJhcnJpZXIuICBJdCBndWFyYW50ZWVzIHRoYXQgYWxsCisgICAgIG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSB0aGUgVU5MT0NLIG9wZXJhdGlvbiB3aWxsIGFwcGVhciB0byBoYXBwZW4gYmVmb3JlCisgICAgIHRoZSBVTkxPQ0sgb3BlcmF0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgc3lzdGVtLgorCisgICAgIE1lbW9yeSBvcGVyYXRpb25zIHRoYXQgb2NjdXIgYWZ0ZXIgYW4gVU5MT0NLIG9wZXJhdGlvbiBtYXkgYXBwZWFyIHRvCisgICAgIGhhcHBlbiBiZWZvcmUgaXQgY29tcGxldGVzLgorCisgICAgIExPQ0sgYW5kIFVOTE9DSyBvcGVyYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGFwcGVhciB3aXRoIHJlc3BlY3QgdG8gZWFjaAorICAgICBvdGhlciBzdHJpY3RseSBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgorCisgICAgIFRoZSB1c2Ugb2YgTE9DSyBhbmQgVU5MT0NLIG9wZXJhdGlvbnMgZ2VuZXJhbGx5IHByZWNsdWRlcyB0aGUgbmVlZCBmb3IKKyAgICAgb3RoZXIgc29ydHMgb2YgbWVtb3J5IGJhcnJpZXIgKGJ1dCBub3RlIHRoZSBleGNlcHRpb25zIG1lbnRpb25lZCBpbiB0aGUKKyAgICAgc3Vic2VjdGlvbiAiTU1JTyB3cml0ZSBiYXJyaWVyIikuCisKKworTWVtb3J5IGJhcnJpZXJzIGFyZSBvbmx5IHJlcXVpcmVkIHdoZXJlIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSBvZiBpbnRlcmFjdGlvbgorYmV0d2VlbiB0d28gQ1BVcyBvciBiZXR3ZWVuIGEgQ1BVIGFuZCBhIGRldmljZS4gIElmIGl0IGNhbiBiZSBndWFyYW50ZWVkIHRoYXQKK3RoZXJlIHdvbid0IGJlIGFueSBzdWNoIGludGVyYWN0aW9uIGluIGFueSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUsIHRoZW4KK21lbW9yeSBiYXJyaWVycyBhcmUgdW5uZWNlc3NhcnkgaW4gdGhhdCBwaWVjZSBvZiBjb2RlLgorCisKK05vdGUgdGhhdCB0aGVzZSBhcmUgdGhlIF9taW5pbXVtXyBndWFyYW50ZWVzLiAgRGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgbWF5IGdpdmUKK21vcmUgc3Vic3RhbnRpYWwgZ3VhcmFudGVlcywgYnV0IHRoZXkgbWF5IF9ub3RfIGJlIHJlbGllZCB1cG9uIG91dHNpZGUgb2YgYXJjaAorc3BlY2lmaWMgY29kZS4KKworCitXSEFUIE1BWSBOT1QgQkUgQVNTVU1FRCBBQk9VVCBNRU1PUlkgQkFSUklFUlM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBjZXJ0YWluIHRoaW5ncyB0aGF0IHRoZSBMaW51eCBrZXJuZWwgbWVtb3J5IGJhcnJpZXJzIGRvIG5vdCBndWFyYW50ZWU6CisKKyAoKikgVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYW55IG9mIHRoZSBtZW1vcnkgYWNjZXNzZXMgc3BlY2lmaWVkIGJlZm9yZSBhCisgICAgIG1lbW9yeSBiYXJyaWVyIHdpbGwgYmUgX2NvbXBsZXRlXyBieSB0aGUgY29tcGxldGlvbiBvZiBhIG1lbW9yeSBiYXJyaWVyCisgICAgIGluc3RydWN0aW9uOyB0aGUgYmFycmllciBjYW4gYmUgY29uc2lkZXJlZCB0byBkcmF3IGEgbGluZSBpbiB0aGF0IENQVSdzCisgICAgIGFjY2VzcyBxdWV1ZSB0aGF0IGFjY2Vzc2VzIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG1heSBub3QgY3Jvc3MuCisKKyAoKikgVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaXNzdWluZyBhIG1lbW9yeSBiYXJyaWVyIG9uIG9uZSBDUFUgd2lsbCBoYXZlCisgICAgIGFueSBkaXJlY3QgZWZmZWN0IG9uIGFub3RoZXIgQ1BVIG9yIGFueSBvdGhlciBoYXJkd2FyZSBpbiB0aGUgc3lzdGVtLiAgVGhlCisgICAgIGluZGlyZWN0IGVmZmVjdCB3aWxsIGJlIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgc2Vjb25kIENQVSBzZWVzIHRoZSBlZmZlY3RzCisgICAgIG9mIHRoZSBmaXJzdCBDUFUncyBhY2Nlc3NlcyBvY2N1ciwgYnV0IHNlZSB0aGUgbmV4dCBwb2ludDoKKworICgqKSBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgYSBDUFUgd2lsbCBzZWUgdGhlIGNvcnJlY3Qgb3JkZXIgb2YgZWZmZWN0cworICAgICBmcm9tIGEgc2Vjb25kIENQVSdzIGFjY2Vzc2VzLCBldmVuIF9pZl8gdGhlIHNlY29uZCBDUFUgdXNlcyBhIG1lbW9yeQorICAgICBiYXJyaWVyLCB1bmxlc3MgdGhlIGZpcnN0IENQVSBfYWxzb18gdXNlcyBhIG1hdGNoaW5nIG1lbW9yeSBiYXJyaWVyIChzZWUKKyAgICAgdGhlIHN1YnNlY3Rpb24gb24gIlNNUCBCYXJyaWVyIFBhaXJpbmciKS4KKworICgqKSBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBzb21lIGludGVydmVuaW5nIHBpZWNlIG9mIG9mZi10aGUtQ1BVCisgICAgIGhhcmR3YXJlWypdIHdpbGwgbm90IHJlb3JkZXIgdGhlIG1lbW9yeSBhY2Nlc3Nlcy4gIENQVSBjYWNoZSBjb2hlcmVuY3kKKyAgICAgbWVjaGFuaXNtcyBzaG91bGQgcHJvcGFnYXRlIHRoZSBpbmRpcmVjdCBlZmZlY3RzIG9mIGEgbWVtb3J5IGJhcnJpZXIKKyAgICAgYmV0d2VlbiBDUFVzLCBidXQgbWlnaHQgbm90IGRvIHNvIGluIG9yZGVyLgorCisJWypdIEZvciBpbmZvcm1hdGlvbiBvbiBidXMgbWFzdGVyaW5nIERNQSBhbmQgY29oZXJlbmN5IHBsZWFzZSByZWFkOgorCisJICAgIERvY3VtZW50YXRpb24vcGNpLnR4dAorCSAgICBEb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dAorCSAgICBEb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CisKKworREFUQSBERVBFTkRFTkNZIEJBUlJJRVJTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHVzYWdlIHJlcXVpcmVtZW50cyBvZiBkYXRhIGRlcGVuZGVuY3kgYmFycmllcnMgYXJlIGEgbGl0dGxlIHN1YnRsZSwgYW5kCitpdCdzIG5vdCBhbHdheXMgb2J2aW91cyB0aGF0IHRoZXkncmUgbmVlZGVkLiAgVG8gaWxsdXN0cmF0ZSwgY29uc2lkZXIgdGhlCitmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzOgorCisJQ1BVIDEJCUNQVSAyCisJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQorCXsgQSA9PSAxLCBCID09IDIsIEMgPSAzLCBQID09ICZBLCBRID09ICZDIH0KKwlCID0gNDsKKwk8d3JpdGUgYmFycmllcj4KKwlQID0gJkIKKwkJCVEgPSBQOworCQkJRCA9ICpROworCitUaGVyZSdzIGEgY2xlYXIgZGF0YSBkZXBlbmRlbmN5IGhlcmUsIGFuZCBpdCB3b3VsZCBzZWVtIHRoYXQgYnkgdGhlIGVuZCBvZiB0aGUKK3NlcXVlbmNlLCBRIG11c3QgYmUgZWl0aGVyICZBIG9yICZCLCBhbmQgdGhhdDoKKworCShRID09ICZBKSBpbXBsaWVzIChEID09IDEpCisJKFEgPT0gJkIpIGltcGxpZXMgKEQgPT0gNCkKKworQnV0ISBDUFUgMidzIHBlcmNlcHRpb24gb2YgUCBtYXkgYmUgdXBkYXRlZCBfYmVmb3JlXyBpdHMgcGVyY2VwdGlvbiBvZiBCLCB0aHVzCitsZWFkaW5nIHRvIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorCisJKFEgPT0gJkIpIGFuZCAoRCA9PSAyKSA/Pz8/CisKK1doaWxzdCB0aGlzIG1heSBzZWVtIGxpa2UgYSBmYWlsdXJlIG9mIGNvaGVyZW5jeSBvciBjYXVzYWxpdHkgbWFpbnRlbmFuY2UsIGl0Citpc24ndCwgYW5kIHRoaXMgYmVoYXZpb3VyIGNhbiBiZSBvYnNlcnZlZCBvbiBjZXJ0YWluIHJlYWwgQ1BVcyAoc3VjaCBhcyB0aGUgREVDCitBbHBoYSkuCisKK1RvIGRlYWwgd2l0aCB0aGlzLCBhIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyIG11c3QgYmUgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUKK2FkZHJlc3MgbG9hZCBhbmQgdGhlIGRhdGEgbG9hZDoKKworCUNQVSAxCQlDUFUgMgorCT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT0KKwl7IEEgPT0gMSwgQiA9PSAyLCBDID0gMywgUCA9PSAmQSwgUSA9PSAmQyB9CisJQiA9IDQ7CisJPHdyaXRlIGJhcnJpZXI+CisJUCA9ICZCCisJCQlRID0gUDsKKwkJCTxkYXRhIGRlcGVuZGVuY3kgYmFycmllcj4KKwkJCUQgPSAqUTsKKworVGhpcyBlbmZvcmNlcyB0aGUgb2NjdXJyZW5jZSBvZiBvbmUgb2YgdGhlIHR3byBpbXBsaWNhdGlvbnMsIGFuZCBwcmV2ZW50cyB0aGUKK3RoaXJkIHBvc3NpYmlsaXR5IGZyb20gYXJpc2luZy4KKworWyFdIE5vdGUgdGhhdCB0aGlzIGV4dHJlbWVseSBjb3VudGVyaW50dWl0aXZlIHNpdHVhdGlvbiBhcmlzZXMgbW9zdCBlYXNpbHkgb24KK21hY2hpbmVzIHdpdGggc3BsaXQgY2FjaGVzLCBzbyB0aGF0LCBmb3IgZXhhbXBsZSwgb25lIGNhY2hlIGJhbmsgcHJvY2Vzc2VzCitldmVuLW51bWJlcmVkIGNhY2hlIGxpbmVzIGFuZCB0aGUgb3RoZXIgYmFuayBwcm9jZXNzZXMgb2RkLW51bWJlcmVkIGNhY2hlCitsaW5lcy4gIFRoZSBwb2ludGVyIFAgbWlnaHQgYmUgc3RvcmVkIGluIGFuIG9kZC1udW1iZXJlZCBjYWNoZSBsaW5lLCBhbmQgdGhlCit2YXJpYWJsZSBCIG1pZ2h0IGJlIHN0b3JlZCBpbiBhbiBldmVuLW51bWJlcmVkIGNhY2hlIGxpbmUuICBUaGVuLCBpZiB0aGUKK2V2ZW4tbnVtYmVyZWQgYmFuayBvZiB0aGUgcmVhZGluZyBDUFUncyBjYWNoZSBpcyBleHRyZW1lbHkgYnVzeSB3aGlsZSB0aGUKK29kZC1udW1iZXJlZCBiYW5rIGlzIGlkbGUsIG9uZSBjYW4gc2VlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHBvaW50ZXIgUCAoJkIpLAorYnV0IHRoZSBvbGQgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIEIgKDEpLgorCisKK0Fub3RoZXIgZXhhbXBsZSBvZiB3aGVyZSBkYXRhIGRlcGVuZGVuY3kgYmFycmllcnMgbWlnaHQgYnkgcmVxdWlyZWQgaXMgd2hlcmUgYQorbnVtYmVyIGlzIHJlYWQgZnJvbSBtZW1vcnkgYW5kIHRoZW4gdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluZGV4IGZvciBhbiBhcnJheQorYWNjZXNzOgorCisJQ1BVIDEJCUNQVSAyCisJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQorCXsgTVswXSA9PSAxLCBNWzFdID09IDIsIE1bM10gPSAzLCBQID09IDAsIFEgPT0gMyB9CisJTVsxXSA9IDQ7CisJPHdyaXRlIGJhcnJpZXI+CisJUCA9IDEKKwkJCVEgPSBQOworCQkJPGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyPgorCQkJRCA9IE1bUV07CisKKworVGhlIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyIGlzIHZlcnkgaW1wb3J0YW50IHRvIHRoZSBSQ1Ugc3lzdGVtLCBmb3IgZXhhbXBsZS4KK1NlZSByY3VfZGVyZWZlcmVuY2UoKSBpbiBpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmguICBUaGlzIHBlcm1pdHMgdGhlIGN1cnJlbnQKK3RhcmdldCBvZiBhbiBSQ1UnZCBwb2ludGVyIHRvIGJlIHJlcGxhY2VkIHdpdGggYSBuZXcgbW9kaWZpZWQgdGFyZ2V0LCB3aXRob3V0Cit0aGUgcmVwbGFjZW1lbnQgdGFyZ2V0IGFwcGVhcmluZyB0byBiZSBpbmNvbXBsZXRlbHkgaW5pdGlhbGlzZWQuCisKK1NlZSBhbHNvIHRoZSBzdWJzZWN0aW9uIG9uICJDYWNoZSBDb2hlcmVuY3kiIGZvciBhIG1vcmUgdGhvcm91Z2ggZXhhbXBsZS4KKworCitDT05UUk9MIERFUEVOREVOQ0lFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBjb250cm9sIGRlcGVuZGVuY3kgcmVxdWlyZXMgYSBmdWxsIHJlYWQgbWVtb3J5IGJhcnJpZXIsIG5vdCBzaW1wbHkgYSBkYXRhCitkZXBlbmRlbmN5IGJhcnJpZXIgdG8gbWFrZSBpdCB3b3JrIGNvcnJlY3RseS4gIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYml0IG9mCitjb2RlOgorCisJcSA9ICZhOworCWlmIChwKQorCQlxID0gJmI7CisJPGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyPgorCXggPSAqcTsKKworVGhpcyB3aWxsIG5vdCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCBiZWNhdXNlIHRoZXJlIGlzIG5vIGFjdHVhbCBkYXRhCitkZXBlbmRlbmN5LCBidXQgcmF0aGVyIGEgY29udHJvbCBkZXBlbmRlbmN5IHRoYXQgdGhlIENQVSBtYXkgc2hvcnQtY2lyY3VpdCBieQorYXR0ZW1wdGluZyB0byBwcmVkaWN0IHRoZSBvdXRjb21lIGluIGFkdmFuY2UuICBJbiBzdWNoIGEgY2FzZSB3aGF0J3MgYWN0dWFsbHkKK3JlcXVpcmVkIGlzOgorCisJcSA9ICZhOworCWlmIChwKQorCQlxID0gJmI7CisJPHJlYWQgYmFycmllcj4KKwl4ID0gKnE7CisKKworU01QIEJBUlJJRVIgUEFJUklORworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGRlYWxpbmcgd2l0aCBDUFUtQ1BVIGludGVyYWN0aW9ucywgY2VydGFpbiB0eXBlcyBvZiBtZW1vcnkgYmFycmllciBzaG91bGQKK2Fsd2F5cyBiZSBwYWlyZWQuICBBIGxhY2sgb2YgYXBwcm9wcmlhdGUgcGFpcmluZyBpcyBhbG1vc3QgY2VydGFpbmx5IGFuIGVycm9yLgorCitBIHdyaXRlIGJhcnJpZXIgc2hvdWxkIGFsd2F5cyBiZSBwYWlyZWQgd2l0aCBhIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyIG9yIHJlYWQKK2JhcnJpZXIsIHRob3VnaCBhIGdlbmVyYWwgYmFycmllciB3b3VsZCBhbHNvIGJlIHZpYWJsZS4gIFNpbWlsYXJseSBhIHJlYWQKK2JhcnJpZXIgb3IgYSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciBzaG91bGQgYWx3YXlzIGJlIHBhaXJlZCB3aXRoIGF0IGxlYXN0IGFuCit3cml0ZSBiYXJyaWVyLCB0aG91Z2gsIGFnYWluLCBhIGdlbmVyYWwgYmFycmllciBpcyB2aWFibGU6CisKKwlDUFUgMQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09CisJYSA9IDE7CisJPHdyaXRlIGJhcnJpZXI+CisJYiA9IDI7CQl4ID0gYjsKKwkJCTxyZWFkIGJhcnJpZXI+CisJCQl5ID0gYTsKKworT3I6CisKKwlDUFUgMQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCWEgPSAxOworCTx3cml0ZSBiYXJyaWVyPgorCWIgPSAmYTsJCXggPSBiOworCQkJPGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyPgorCQkJeSA9ICp4OworCitCYXNpY2FsbHksIHRoZSByZWFkIGJhcnJpZXIgYWx3YXlzIGhhcyB0byBiZSB0aGVyZSwgZXZlbiB0aG91Z2ggaXQgY2FuIGJlIG9mCit0aGUgIndlYWtlciIgdHlwZS4KKworWyFdIE5vdGUgdGhhdCB0aGUgc3RvcmVzIGJlZm9yZSB0aGUgd3JpdGUgYmFycmllciB3b3VsZCBub3JtYWxseSBiZSBleHBlY3RlZCB0bworbWF0Y2ggdGhlIGxvYWRzIGFmdGVyIHRoZSByZWFkIGJhcnJpZXIgb3IgZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXIsIGFuZCB2aWNlCit2ZXJzYToKKworCUNQVSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVIDIKKwk9PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PQorCWEgPSAxOyAgICAgICAgICAgfS0tLS0gICAtLS0+eyAgdiA9IGMKKwliID0gMjsgICAgICAgICAgIH0gICAgXCAvICAgIHsgIHcgPSBkCisJPHdyaXRlIGJhcnJpZXI+ICAgICAgICBcICAgICAgICA8cmVhZCBiYXJyaWVyPgorCWMgPSAzOyAgICAgICAgICAgfSAgICAvIFwgICAgeyAgeCA9IGE7CisJZCA9IDQ7ICAgICAgICAgICB9LS0tLSAgIC0tLT57ICB5ID0gYjsKKworCitFWEFNUExFUyBPRiBNRU1PUlkgQkFSUklFUiBTRVFVRU5DRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXJzdGx5LCB3cml0ZSBiYXJyaWVycyBhY3QgYXMgYSBwYXJ0aWFsIG9yZGVyaW5ncyBvbiBzdG9yZSBvcGVyYXRpb25zLgorQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVudHM6CisKKwlDUFUgMQorCT09PT09PT09PT09PT09PT09PT09PT09CisJU1RPUkUgQSA9IDEKKwlTVE9SRSBCID0gMgorCVNUT1JFIEMgPSAzCisJPHdyaXRlIGJhcnJpZXI+CisJU1RPUkUgRCA9IDQKKwlTVE9SRSBFID0gNQorCitUaGlzIHNlcXVlbmNlIG9mIGV2ZW50cyBpcyBjb21taXR0ZWQgdG8gdGhlIG1lbW9yeSBjb2hlcmVuY2Ugc3lzdGVtIGluIGFuIG9yZGVyCit0aGF0IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gbWlnaHQgcGVyY2VpdmUgYXMgdGhlIHVub3JkZXJlZCBzZXQgb2YgeyBTVE9SRSBBLAorU1RPUkUgQiwgU1RPUkUgQyB9IGFsbCBvY2N1cmluZyBiZWZvcmUgdGhlIHVub3JkZXJlZCBzZXQgb2YgeyBTVE9SRSBELCBTVE9SRSBFCit9OgorCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQz0zICB8ICAgICB9ICAgICAvXAorCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyAgICAgfS0tLS0tICBcICAtLS0tLT4gRXZlbnRzIHBlcmNlcHRpYmxlCisJfCAgICAgICB8ICA6ICAgIHwgQT0xICB8ICAgICB9ICAgICAgICBcLyAgICAgICB0byByZXN0IG9mIHN5c3RlbQorCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyAgICAgfQorCXwgQ1BVIDEgfCAgOiAgICB8IEI9MiAgfCAgICAgfQorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgfQorCXwgICAgICAgfCAgIHd3d3d3d3d3d3d3d3d3d3cgfSAgIDwtLS0gQXQgdGhpcyBwb2ludCB0aGUgd3JpdGUgYmFycmllcgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgfSAgICAgICAgcmVxdWlyZXMgYWxsIHN0b3JlcyBwcmlvciB0byB0aGUKKwl8ICAgICAgIHwgIDogICAgfCBFPTUgIHwgICAgIH0gICAgICAgIGJhcnJpZXIgdG8gYmUgY29tbWl0dGVkIGJlZm9yZQorCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyAgICAgfSAgICAgICAgZnVydGhlciBzdG9yZXMgbWF5IGJlIHRha2UgcGxhY2UuCisJfCAgICAgICB8LS0tLS0tPnwgRD00ICB8ICAgICB9CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6CisJICAgICAgICAgICAgICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgfCBTZXF1ZW5jZSBpbiB3aGljaCBzdG9yZXMgYXJlIGNvbW1pdHRlZCB0byB0aGUKKwkgICAgICAgICAgICAgICAgICAgfCBtZW1vcnkgc3lzdGVtIGJ5IENQVSAxCisJICAgICAgICAgICAgICAgICAgIFYKKworCitTZWNvbmRseSwgZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXJzIGFjdCBhcyBhIHBhcnRpYWwgb3JkZXJpbmdzIG9uIGRhdGEtZGVwZW5kZW50Citsb2Fkcy4gIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzOgorCisJQ1BVIDEJCQlDUFUgMgorCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJCXsgQiA9IDc7IFggPSA5OyBZID0gODsgQyA9ICZZIH0KKwlTVE9SRSBBID0gMQorCVNUT1JFIEIgPSAyCisJPHdyaXRlIGJhcnJpZXI+CisJU1RPUkUgQyA9ICZCCQlMT0FEIFgKKwlTVE9SRSBEID0gNAkJTE9BRCBDIChnZXRzICZCKQorCQkJCUxPQUQgKkMgKHJlYWRzIEIpCisKK1dpdGhvdXQgaW50ZXJ2ZW50aW9uLCBDUFUgMiBtYXkgcGVyY2VpdmUgdGhlIGV2ZW50cyBvbiBDUFUgMSBpbiBzb21lCitlZmZlY3RpdmVseSByYW5kb20gb3JkZXIsIGRlc3BpdGUgdGhlIHdyaXRlIGJhcnJpZXIgaXNzdWVkIGJ5IENQVSAxOgorCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLSsgIHwgU2VxdWVuY2Ugb2YgdXBkYXRlCisJfCAgICAgICB8LS0tLS0tPnwgQj0yICB8LS0tLS0gICAgICAgLS0tPnwgWS0+OCAgfCAgfCBvZiBwZXJjZXB0aW9uIG9uCisJfCAgICAgICB8ICA6ICAgICstLS0tLS0rICAgICBcICAgICAgICAgICstLS0tLS0tKyAgfCBDUFUgMgorCXwgQ1BVIDEgfCAgOiAgICB8IEE9MSAgfCAgICAgIFwgICAgIC0tLT58IEMtPiZZIHwgIFYKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgfCAgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8ICAgd3d3d3d3d3d3d3d3d3d3dyAgIHwgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICB8ICAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgIDogICAgfCBDPSZCIHwtLS0gICAgfCAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyAgIFwgICB8ICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJfCAgICAgICB8LS0tLS0tPnwgRD00ICB8ICAgIC0tLS0tLS0tLS0tPnwgQy0+JkIgfC0tLS0tLT58ICAgICAgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgfCAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICB8ICAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgOiAgICAgICA6ICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgIEFwcGFyZW50bHkgaW5jb3JyZWN0IC0tLT4gIHwgICAgICAgIHwgQi0+NyAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgcGVyY2VwdGlvbiBvZiBCICghKSAgICAgICAgfCAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgVGhlIGxvYWQgb2YgWCBob2xkcyAtLS0+ICAgIFwgICAgICAgfCBYLT45ICB8LS0tLS0tPnwgICAgICAgfAorCSAgICB1cCB0aGUgbWFpbnRlbmFuY2UgICAgICAgICAgIFwgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgIG9mIGNvaGVyZW5jZSBvZiBCICAgICAgICAgICAgIC0tLS0tPnwgQi0+MiAgfCAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOgorCisKK0luIHRoZSBhYm92ZSBleGFtcGxlLCBDUFUgMiBwZXJjZWl2ZXMgdGhhdCBCIGlzIDcsIGRlc3BpdGUgdGhlIGxvYWQgb2YgKkMKKyh3aGljaCB3b3VsZCBiZSBCKSBjb21pbmcgYWZ0ZXIgdGhlIHRoZSBMT0FEIG9mIEMuCisKK0lmLCBob3dldmVyLCBhIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyIHdlcmUgdG8gYmUgcGxhY2VkIGJldHdlZW4gdGhlIGxvYWQgb2YgQworYW5kIHRoZSBsb2FkIG9mICpDIChpZTogQikgb24gQ1BVIDI6CisKKwlDUFUgMQkJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0KKwkJeyBCID0gNzsgWCA9IDk7IFkgPSA4OyBDID0gJlkgfQorCVNUT1JFIEEgPSAxCisJU1RPUkUgQiA9IDIKKwk8d3JpdGUgYmFycmllcj4KKwlTVE9SRSBDID0gJkIJCUxPQUQgWAorCVNUT1JFIEQgPSA0CQlMT0FEIEMgKGdldHMgJkIpCisJCQkJPGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyPgorCQkJCUxPQUQgKkMgKHJlYWRzIEIpCisKK3RoZW4gdGhlIGZvbGxvd2luZyB3aWxsIG9jY3VyOgorCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBCPTIgIHwtLS0tLSAgICAgICAtLS0+fCBZLT44ICB8CisJfCAgICAgICB8ICA6ICAgICstLS0tLS0rICAgICBcICAgICAgICAgICstLS0tLS0tKworCXwgQ1BVIDEgfCAgOiAgICB8IEE9MSAgfCAgICAgIFwgICAgIC0tLT58IEMtPiZZIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgfCAgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8ICAgd3d3d3d3d3d3d3d3d3d3dyAgIHwgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICB8ICAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgIDogICAgfCBDPSZCIHwtLS0gICAgfCAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyAgIFwgICB8ICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJfCAgICAgICB8LS0tLS0tPnwgRD00ICB8ICAgIC0tLS0tLS0tLS0tPnwgQy0+JkIgfC0tLS0tLT58ICAgICAgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgfCAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICB8ICAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgOiAgICAgICA6ICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgWC0+OSAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgTWFrZXMgc3VyZSBhbGwgZWZmZWN0cyAtLS0+ICAgXCAgIGRkZGRkZGRkZGRkZGRkZGRkICAgfCAgICAgICB8CisJICBwcmlvciB0byB0aGUgc3RvcmUgb2YgQyAgICAgICAgXCAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgIGFyZSBwZXJjZXB0aWJsZSB0byAgICAgICAgICAgICAgLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgc3Vic2VxdWVudCBsb2FkcyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKworCitBbmQgdGhpcmRseSwgYSByZWFkIGJhcnJpZXIgYWN0cyBhcyBhIHBhcnRpYWwgb3JkZXIgb24gbG9hZHMuICBDb25zaWRlciB0aGUKK2ZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVudHM6CisKKwlDUFUgMQkJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0KKwkJeyBBID0gMCwgQiA9IDkgfQorCVNUT1JFIEE9MQorCTx3cml0ZSBiYXJyaWVyPgorCVNUT1JFIEI9MgorCQkJCUxPQUQgQgorCQkJCUxPQUQgQQorCitXaXRob3V0IGludGVydmVudGlvbiwgQ1BVIDIgbWF5IHRoZW4gY2hvb3NlIHRvIHBlcmNlaXZlIHRoZSBldmVudHMgb24gQ1BVIDEgaW4KK3NvbWUgZWZmZWN0aXZlbHkgcmFuZG9tIG9yZGVyLCBkZXNwaXRlIHRoZSB3cml0ZSBiYXJyaWVyIGlzc3VlZCBieSBDUFUgMToKKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICAgICAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQT0xICB8LS0tLS0tICAgICAgLS0tPnwgQS0+MCAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgIFwgICAgICAgICArLS0tLS0tLSsKKwl8IENQVSAxIHwgICB3d3d3d3d3d3d3d3d3d3d3ICAgXCAgICAtLS0+fCBCLT45ICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICB8ICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEI9MiAgfC0tLSAgICAgfCAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICBcICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICBcICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tPnwgQi0+MiAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8IEEtPjAgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICA6ICAgICAgIDoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgKy0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tPnwgQS0+MSAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6CisKKworSWYsIGhvd2V2ZXIsIGEgcmVhZCBiYXJyaWVyIHdlcmUgdG8gYmUgcGxhY2VkIGJldHdlZW4gdGhlIGxvYWQgb2YgRSBhbmQgdGhlCitsb2FkIG9mIEEgb24gQ1BVIDI6CisKKwlDUFUgMQkJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0KKwkJeyBBID0gMCwgQiA9IDkgfQorCVNUT1JFIEE9MQorCTx3cml0ZSBiYXJyaWVyPgorCVNUT1JFIEI9MgorCQkJCUxPQUQgQgorCQkJCTxyZWFkIGJhcnJpZXI+CisJCQkJTE9BRCBBCisKK3RoZW4gdGhlIHBhcnRpYWwgb3JkZXJpbmcgaW1wb3NlZCBieSBDUFUgMSB3aWxsIGJlIHBlcmNlaXZlZCBjb3JyZWN0bHkgYnkgQ1BVCisyOgorCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBBPTEgIHwtLS0tLS0gICAgICAtLS0+fCBBLT4wICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgXCAgICAgICAgICstLS0tLS0tKworCXwgQ1BVIDEgfCAgIHd3d3d3d3d3d3d3d3d3d3cgICBcICAgIC0tLT58IEItPjkgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgIHwgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQj0yICB8LS0tICAgICB8ICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgIFwgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgIFwgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgQXQgdGhpcyBwb2ludCB0aGUgcmVhZCAtLS0tPiAgIFwgIHJycnJycnJycnJycnJycnJyICAgfCAgICAgICB8CisJICBiYXJyaWVyIGNhdXNlcyBhbGwgZWZmZWN0cyAgICAgIFwgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgIHByaW9yIHRvIHRoZSBzdG9yYWdlIG9mIEIgICAgICAgIC0tLS0+fCBBLT4xICB8LS0tLS0tPnwgICAgICAgfAorCSAgdG8gYmUgcGVyY2VwdGlibGUgdG8gQ1BVIDIgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKworCitUbyBpbGx1c3RyYXRlIHRoaXMgbW9yZSBjb21wbGV0ZWx5LCBjb25zaWRlciB3aGF0IGNvdWxkIGhhcHBlbiBpZiB0aGUgY29kZQorY29udGFpbmVkIGEgbG9hZCBvZiBBIGVpdGhlciBzaWRlIG9mIHRoZSByZWFkIGJhcnJpZXI6CisKKwlDUFUgMQkJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0KKwkJeyBBID0gMCwgQiA9IDkgfQorCVNUT1JFIEE9MQorCTx3cml0ZSBiYXJyaWVyPgorCVNUT1JFIEI9MgorCQkJCUxPQUQgQgorCQkJCUxPQUQgQSBbZmlyc3QgbG9hZCBvZiBBXQorCQkJCTxyZWFkIGJhcnJpZXI+CisJCQkJTE9BRCBBIFtzZWNvbmQgbG9hZCBvZiBBXQorCitFdmVuIHRob3VnaCB0aGUgdHdvIGxvYWRzIG9mIEEgYm90aCBvY2N1ciBhZnRlciB0aGUgbG9hZCBvZiBCLCB0aGV5IG1heSBib3RoCitjb21lIHVwIHdpdGggZGlmZmVyZW50IHZhbHVlczoKKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICAgICAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQT0xICB8LS0tLS0tICAgICAgLS0tPnwgQS0+MCAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgIFwgICAgICAgICArLS0tLS0tLSsKKwl8IENQVSAxIHwgICB3d3d3d3d3d3d3d3d3d3d3ICAgXCAgICAtLS0+fCBCLT45ICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICB8ICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEI9MiAgfC0tLSAgICAgfCAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICBcICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICBcICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tPnwgQi0+MiAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8IEEtPjAgIHwtLS0tLS0+fCAxc3QgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgIEF0IHRoaXMgcG9pbnQgdGhlIHJlYWQgLS0tLT4gICBcICBycnJycnJycnJycnJycnJyciAgIHwgICAgICAgfAorCSAgYmFycmllciBjYXVzZXMgYWxsIGVmZmVjdHMgICAgICBcICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICBwcmlvciB0byB0aGUgc3RvcmFnZSBvZiBCICAgICAgICAtLS0tPnwgQS0+MSAgfC0tLS0tLT58IDJuZCAgIHwKKwkgIHRvIGJlIHBlcmNlcHRpYmxlIHRvIENQVSAyICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisKKworQnV0IGl0IG1heSBiZSB0aGF0IHRoZSB1cGRhdGUgdG8gQSBmcm9tIENQVSAxIGJlY29tZXMgcGVyY2VwdGlibGUgdG8gQ1BVIDIKK2JlZm9yZSB0aGUgcmVhZCBiYXJyaWVyIGNvbXBsZXRlcyBhbnl3YXk6CisKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgICAgICAgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEE9MSAgfC0tLS0tLSAgICAgIC0tLT58IEEtPjAgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICBcICAgICAgICAgKy0tLS0tLS0rCisJfCBDUFUgMSB8ICAgd3d3d3d3d3d3d3d3d3d3dyAgIFwgICAgLS0tPnwgQi0+OSAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgfCAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBCPTIgIHwtLS0gICAgIHwgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgXCAgICB8ICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgXCAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0+fCBBLT4xICB8LS0tLS0tPnwgMXN0ICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJycnJycnJycnJycnJycnIgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEEtPjEgIHwtLS0tLS0+fCAybmQgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCisKK1RoZSBndWFyYW50ZWUgaXMgdGhhdCB0aGUgc2Vjb25kIGxvYWQgd2lsbCBhbHdheXMgY29tZSB1cCB3aXRoIEEgPT0gMSBpZiB0aGUKK2xvYWQgb2YgQiBjYW1lIHVwIHdpdGggQiA9PSAyLiAgTm8gc3VjaCBndWFyYW50ZWUgZXhpc3RzIGZvciB0aGUgZmlyc3QgbG9hZCBvZgorQTsgdGhhdCBtYXkgY29tZSB1cCB3aXRoIGVpdGhlciBBID09IDAgb3IgQSA9PSAxLgorCisKK1JFQUQgTUVNT1JZIEJBUlJJRVJTIFZTIExPQUQgU1BFQ1VMQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFueSBDUFVzIHNwZWN1bGF0ZSB3aXRoIGxvYWRzOiB0aGF0IGlzIHRoZXkgc2VlIHRoYXQgdGhleSB3aWxsIG5lZWQgdG8gbG9hZCBhbgoraXRlbSBmcm9tIG1lbW9yeSwgYW5kIHRoZXkgZmluZCBhIHRpbWUgd2hlcmUgdGhleSdyZSBub3QgdXNpbmcgdGhlIGJ1cyBmb3IgYW55CitvdGhlciBsb2FkcywgYW5kIHNvIGRvIHRoZSBsb2FkIGluIGFkdmFuY2UgLSBldmVuIHRob3VnaCB0aGV5IGhhdmVuJ3QgYWN0dWFsbHkKK2dvdCB0byB0aGF0IHBvaW50IGluIHRoZSBpbnN0cnVjdGlvbiBleGVjdXRpb24gZmxvdyB5ZXQuICBUaGlzIHBlcm1pdHMgdGhlCithY3R1YWwgbG9hZCBpbnN0cnVjdGlvbiB0byBwb3RlbnRpYWxseSBjb21wbGV0ZSBpbW1lZGlhdGVseSBiZWNhdXNlIHRoZSBDUFUKK2FscmVhZHkgaGFzIHRoZSB2YWx1ZSB0byBoYW5kLgorCitJdCBtYXkgdHVybiBvdXQgdGhhdCB0aGUgQ1BVIGRpZG4ndCBhY3R1YWxseSBuZWVkIHRoZSB2YWx1ZSAtIHBlcmhhcHMgYmVjYXVzZSBhCiticmFuY2ggY2lyY3VtdmVudGVkIHRoZSBsb2FkIC0gaW4gd2hpY2ggY2FzZSBpdCBjYW4gZGlzY2FyZCB0aGUgdmFsdWUgb3IganVzdAorY2FjaGUgaXQgZm9yIGxhdGVyIHVzZS4KKworQ29uc2lkZXI6CisKKwlDUFUgMQkgICAJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0KKwkgCSAgIAkJTE9BRCBCCisJIAkgICAJCURJVklERQkJfSBEaXZpZGUgaW5zdHJ1Y3Rpb25zIGdlbmVyYWxseQorCSAJICAgCQlESVZJREUJCX0gdGFrZSBhIGxvbmcgdGltZSB0byBwZXJmb3JtCisJIAkgICAJCUxPQUQgQQorCitXaGljaCBtaWdodCBhcHBlYXIgYXMgdGhpczoKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCVRoZSBDUFUgYmVpbmcgYnVzeSBkb2luZyBhIC0tLT4gICAgIC0tLT58IEEtPjAgIHx+fn5+ICAgfCAgICAgICB8CisJZGl2aXNpb24gc3BlY3VsYXRlcyBvbiB0aGUgICAgICAgICAgICAgICstLS0tLS0tKyAgIH4gICB8ICAgICAgIHwKKwlMT0FEIG9mIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDpESVZJREUgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwlPbmNlIHRoZSBkaXZpc2lvbnMgYXJlIGNvbXBsZXRlIC0tPiAgICAgOiAgICAgICA6ICAgfi0tPnwgICAgICAgfAorCXRoZSBDUFUgY2FuIHRoZW4gcGVyZm9ybSB0aGUgICAgICAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJTE9BRCB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKworCitQbGFjaW5nIGEgcmVhZCBiYXJyaWVyIG9yIGEgZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXIganVzdCBiZWZvcmUgdGhlIHNlY29uZAorbG9hZDoKKworCUNQVSAxCSAgIAkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCSAJICAgCQlMT0FEIEIKKwkgCSAgIAkJRElWSURFCisJIAkgICAJCURJVklERQorCQkJCTxyZWFkIGJhcnJpZXI+CisJIAkgICAJCUxPQUQgQQorCit3aWxsIGZvcmNlIGFueSB2YWx1ZSBzcGVjdWxhdGl2ZWx5IG9idGFpbmVkIHRvIGJlIHJlY29uc2lkZXJlZCB0byBhbiBleHRlbnQKK2RlcGVuZGVudCBvbiB0aGUgdHlwZSBvZiBiYXJyaWVyIHVzZWQuICBJZiB0aGVyZSB3YXMgbm8gY2hhbmdlIG1hZGUgdG8gdGhlCitzcGVjdWxhdGVkIG1lbW9yeSBsb2NhdGlvbiwgdGhlbiB0aGUgc3BlY3VsYXRlZCB2YWx1ZSB3aWxsIGp1c3QgYmUgdXNlZDoKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCVRoZSBDUFUgYmVpbmcgYnVzeSBkb2luZyBhIC0tLT4gICAgIC0tLT58IEEtPjAgIHx+fn5+ICAgfCAgICAgICB8CisJZGl2aXNpb24gc3BlY3VsYXRlcyBvbiB0aGUgICAgICAgICAgICAgICstLS0tLS0tKyAgIH4gICB8ICAgICAgIHwKKwlMT0FEIG9mIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDpESVZJREUgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJycnJycnJycnJycnJycnJ+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfi0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKworCitidXQgaWYgdGhlcmUgd2FzIGFuIHVwZGF0ZSBvciBhbiBpbnZhbGlkYXRpb24gZnJvbSBhbm90aGVyIENQVSBwZW5kaW5nLCB0aGVuCit0aGUgc3BlY3VsYXRpb24gd2lsbCBiZSBjYW5jZWxsZWQgYW5kIHRoZSB2YWx1ZSByZWxvYWRlZDoKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCVRoZSBDUFUgYmVpbmcgYnVzeSBkb2luZyBhIC0tLT4gICAgIC0tLT58IEEtPjAgIHx+fn5+ICAgfCAgICAgICB8CisJZGl2aXNpb24gc3BlY3VsYXRlcyBvbiB0aGUgICAgICAgICAgICAgICstLS0tLS0tKyAgIH4gICB8ICAgICAgIHwKKwlMT0FEIG9mIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDpESVZJREUgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJycnJycnJycnJycnJycnJyICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwlUaGUgc3BlY3VsYXRpb24gaXMgZGlzY2FyZGVkIC0tLT4gICAtLS0+fCBBLT4xICB8LS0tLS0tPnwgICAgICAgfAorCWFuZCBhbiB1cGRhdGVkIHZhbHVlIGlzICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJcmV0cmlldmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKworCis9PT09PT09PT09PT09PT09PT09PT09PT0KK0VYUExJQ0lUIEtFUk5FTCBCQVJSSUVSUworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBMaW51eCBrZXJuZWwgaGFzIGEgdmFyaWV0eSBvZiBkaWZmZXJlbnQgYmFycmllcnMgdGhhdCBhY3QgYXQgZGlmZmVyZW50CitsZXZlbHM6CisKKyAgKCopIENvbXBpbGVyIGJhcnJpZXIuCisKKyAgKCopIENQVSBtZW1vcnkgYmFycmllcnMuCisKKyAgKCopIE1NSU8gd3JpdGUgYmFycmllci4KKworCitDT01QSUxFUiBCQVJSSUVSCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBMaW51eCBrZXJuZWwgaGFzIGFuIGV4cGxpY2l0IGNvbXBpbGVyIGJhcnJpZXIgZnVuY3Rpb24gdGhhdCBwcmV2ZW50cyB0aGUKK2NvbXBpbGVyIGZyb20gbW92aW5nIHRoZSBtZW1vcnkgYWNjZXNzZXMgZWl0aGVyIHNpZGUgb2YgaXQgdG8gdGhlIG90aGVyIHNpZGU6CisKKwliYXJyaWVyKCk7CisKK1RoaXMgYSBnZW5lcmFsIGJhcnJpZXIgLSBsZXNzZXIgdmFyaWV0aWVzIG9mIGNvbXBpbGVyIGJhcnJpZXIgZG8gbm90IGV4aXN0LgorCitUaGUgY29tcGlsZXIgYmFycmllciBoYXMgbm8gZGlyZWN0IGVmZmVjdCBvbiB0aGUgQ1BVLCB3aGljaCBtYXkgdGhlbiByZW9yZGVyCit0aGluZ3MgaG93ZXZlciBpdCB3aXNoZXMuCisKKworQ1BVIE1FTU9SWSBCQVJSSUVSUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgTGludXgga2VybmVsIGhhcyBlaWdodCBiYXNpYyBDUFUgbWVtb3J5IGJhcnJpZXJzOgorCisJVFlQRQkJTUFOREFUT1JZCQlTTVAgQ09ORElUSU9OQUwKKwk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09CisJR0VORVJBTAkJbWIoKQkJCXNtcF9tYigpCisJV1JJVEUJCXdtYigpCQkJc21wX3dtYigpCisJUkVBRAkJcm1iKCkJCQlzbXBfcm1iKCkKKwlEQVRBIERFUEVOREVOQ1kJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorCisKK0FsbCBDUFUgbWVtb3J5IGJhcnJpZXJzIHVuY29uZGl0aW9uYWxseSBpbXBseSBjb21waWxlciBiYXJyaWVycy4KKworU01QIG1lbW9yeSBiYXJyaWVycyBhcmUgcmVkdWNlZCB0byBjb21waWxlciBiYXJyaWVycyBvbiB1bmlwcm9jZXNzb3IgY29tcGlsZWQKK3N5c3RlbXMgYmVjYXVzZSBpdCBpcyBhc3N1bWVkIHRoYXQgYSBDUFUgd2lsbCBiZSBhcHBlYXIgdG8gYmUgc2VsZi1jb25zaXN0ZW50LAorYW5kIHdpbGwgb3JkZXIgb3ZlcmxhcHBpbmcgYWNjZXNzZXMgY29ycmVjdGx5IHdpdGggcmVzcGVjdCB0byBpdHNlbGYuCisKK1shXSBOb3RlIHRoYXQgU01QIG1lbW9yeSBiYXJyaWVycyBfbXVzdF8gYmUgdXNlZCB0byBjb250cm9sIHRoZSBvcmRlcmluZyBvZgorcmVmZXJlbmNlcyB0byBzaGFyZWQgbWVtb3J5IG9uIFNNUCBzeXN0ZW1zLCB0aG91Z2ggdGhlIHVzZSBvZiBsb2NraW5nIGluc3RlYWQKK2lzIHN1ZmZpY2llbnQuCisKK01hbmRhdG9yeSBiYXJyaWVycyBzaG91bGQgbm90IGJlIHVzZWQgdG8gY29udHJvbCBTTVAgZWZmZWN0cywgc2luY2UgbWFuZGF0b3J5CitiYXJyaWVycyB1bm5lY2Vzc2FyaWx5IGltcG9zZSBvdmVyaGVhZCBvbiBVUCBzeXN0ZW1zLiBUaGV5IG1heSwgaG93ZXZlciwgYmUKK3VzZWQgdG8gY29udHJvbCBNTUlPIGVmZmVjdHMgb24gYWNjZXNzZXMgdGhyb3VnaCByZWxheGVkIG1lbW9yeSBJL08gd2luZG93cy4KK1RoZXNlIGFyZSByZXF1aXJlZCBldmVuIG9uIG5vbi1TTVAgc3lzdGVtcyBhcyB0aGV5IGFmZmVjdCB0aGUgb3JkZXIgaW4gd2hpY2gKK21lbW9yeSBvcGVyYXRpb25zIGFwcGVhciB0byBhIGRldmljZSBieSBwcm9oaWJpdGluZyBib3RoIHRoZSBjb21waWxlciBhbmQgdGhlCitDUFUgZnJvbSByZW9yZGVyaW5nIHRoZW0uCisKKworVGhlcmUgYXJlIHNvbWUgbW9yZSBhZHZhbmNlZCBiYXJyaWVyIGZ1bmN0aW9uczoKKworICgqKSBzZXRfbWIodmFyLCB2YWx1ZSkKKyAoKikgc2V0X3dtYih2YXIsIHZhbHVlKQorCisgICAgIFRoZXNlIGFzc2lnbiB0aGUgdmFsdWUgdG8gdGhlIHZhcmlhYmxlIGFuZCB0aGVuIGluc2VydCBhdCBsZWFzdCBhIHdyaXRlCisgICAgIGJhcnJpZXIgYWZ0ZXIgaXQsIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb24uICBUaGV5IGFyZW4ndCBndWFyYW50ZWVkIHRvCisgICAgIGluc2VydCBhbnl0aGluZyBtb3JlIHRoYW4gYSBjb21waWxlciBiYXJyaWVyIGluIGEgVVAgY29tcGlsYXRpb24uCisKKworICgqKSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCk7CisgKCopIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworICgqKSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7CisgKCopIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCisgICAgIFRoZXNlIGFyZSBmb3IgdXNlIHdpdGggYXRvbWljIGFkZCwgc3VidHJhY3QsIGluY3JlbWVudCBhbmQgZGVjcmVtZW50CisgICAgIGZ1bmN0aW9ucyB0aGF0IGRvbid0IHJldHVybiBhIHZhbHVlLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCBmb3IgcmVmZXJlbmNlCisgICAgIGNvdW50aW5nLiAgVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBpbXBseSBtZW1vcnkgYmFycmllcnMuCisKKyAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgYSBwaWVjZSBvZiBjb2RlIHRoYXQgbWFya3MgYW4gb2JqZWN0IGFzIGJlaW5nIGRlYWQKKyAgICAgYW5kIHRoZW4gZGVjcmVtZW50cyB0aGUgb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50OgorCisJb2JqLT5kZWFkID0gMTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCk7CisJYXRvbWljX2RlYygmb2JqLT5yZWZfY291bnQpOworCisgICAgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBkZWF0aCBtYXJrIG9uIHRoZSBvYmplY3QgaXMgcGVyY2VpdmVkIHRvIGJlIHNldAorICAgICAqYmVmb3JlKiB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQuCisKKyAgICAgU2VlIERvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBTZWUgdGhlICJBdG9taWMKKyAgICAgb3BlcmF0aW9ucyIgc3Vic2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gd2hlcmUgdG8gdXNlIHRoZXNlLgorCisKKyAoKikgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KHZvaWQpOworICgqKSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCh2b2lkKTsKKworICAgICBUaGVzZSBhcmUgZm9yIHVzZSBzaW1pbGFyIHRvIHRoZSBhdG9taWMgaW5jL2RlYyBiYXJyaWVycy4gIFRoZXNlIGFyZQorICAgICB0eXBpY2FsbHkgdXNlZCBmb3IgYml0d2lzZSB1bmxvY2tpbmcgb3BlcmF0aW9ucywgc28gY2FyZSBtdXN0IGJlIHRha2VuIGFzCisgICAgIHRoZXJlIGFyZSBubyBpbXBsaWNpdCBtZW1vcnkgYmFycmllcnMgaGVyZSBlaXRoZXIuCisKKyAgICAgQ29uc2lkZXIgaW1wbGVtZW50aW5nIGFuIHVubG9jayBvcGVyYXRpb24gb2Ygc29tZSBuYXR1cmUgYnkgY2xlYXJpbmcgYQorICAgICBsb2NraW5nIGJpdC4gIFRoZSBjbGVhcl9iaXQoKSB3b3VsZCB0aGVuIG5lZWQgdG8gYmUgYmFycmllcmVkIGxpa2UgdGhpczoKKworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdCggLi4uICk7CisKKyAgICAgVGhpcyBwcmV2ZW50cyBtZW1vcnkgb3BlcmF0aW9ucyBiZWZvcmUgdGhlIGNsZWFyIGxlYWtpbmcgdG8gYWZ0ZXIgaXQuICBTZWUKKyAgICAgdGhlIHN1YnNlY3Rpb24gb24gIkxvY2tpbmcgRnVuY3Rpb25zIiB3aXRoIHJlZmVyZW5jZSB0byBVTkxPQ0sgb3BlcmF0aW9uCisgICAgIGltcGxpY2F0aW9ucy4KKworICAgICBTZWUgRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIFNlZSB0aGUgIkF0b21pYworICAgICBvcGVyYXRpb25zIiBzdWJzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byB1c2UgdGhlc2UuCisKKworTU1JTyBXUklURSBCQVJSSUVSCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIExpbnV4IGtlcm5lbCBhbHNvIGhhcyBhIHNwZWNpYWwgYmFycmllciBmb3IgdXNlIHdpdGggbWVtb3J5LW1hcHBlZCBJL08KK3dyaXRlczoKKworCW1taW93YigpOworCitUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBtYW5kYXRvcnkgd3JpdGUgYmFycmllciB0aGF0IGNhdXNlcyB3cml0ZXMgdG8gd2Vha2x5CitvcmRlcmVkIEkvTyByZWdpb25zIHRvIGJlIHBhcnRpYWxseSBvcmRlcmVkLiAgSXRzIGVmZmVjdHMgbWF5IGdvIGJleW9uZCB0aGUKK0NQVS0+SGFyZHdhcmUgaW50ZXJmYWNlIGFuZCBhY3R1YWxseSBhZmZlY3QgdGhlIGhhcmR3YXJlIGF0IHNvbWUgbGV2ZWwuCisKK1NlZSB0aGUgc3Vic2VjdGlvbiAiTG9ja3MgdnMgSS9PIGFjY2Vzc2VzIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJTVBMSUNJVCBLRVJORUwgTUVNT1JZIEJBUlJJRVJTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgbGludXgga2VybmVsIGltcGx5IG1lbW9yeSBiYXJyaWVycywgYW1vbmdzdAord2hpY2ggYXJlIGxvY2tpbmcgYW5kIHNjaGVkdWxpbmcgZnVuY3Rpb25zLgorCitUaGlzIHNwZWNpZmljYXRpb24gaXMgYSBfbWluaW11bV8gZ3VhcmFudGVlOyBhbnkgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgbWF5Citwcm92aWRlIG1vcmUgc3Vic3RhbnRpYWwgZ3VhcmFudGVlcywgYnV0IHRoZXNlIG1heSBub3QgYmUgcmVsaWVkIHVwb24gb3V0c2lkZQorb2YgYXJjaCBzcGVjaWZpYyBjb2RlLgorCisKK0xPQ0tJTkcgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgTGludXgga2VybmVsIGhhcyBhIG51bWJlciBvZiBsb2NraW5nIGNvbnN0cnVjdHM6CisKKyAoKikgc3BpbiBsb2NrcworICgqKSBSL1cgc3BpbiBsb2NrcworICgqKSBtdXRleGVzCisgKCopIHNlbWFwaG9yZXMKKyAoKikgUi9XIHNlbWFwaG9yZXMKKyAoKikgUkNVCisKK0luIGFsbCBjYXNlcyB0aGVyZSBhcmUgdmFyaWFudHMgb24gIkxPQ0siIG9wZXJhdGlvbnMgYW5kICJVTkxPQ0siIG9wZXJhdGlvbnMKK2ZvciBlYWNoIGNvbnN0cnVjdC4gIFRoZXNlIG9wZXJhdGlvbnMgYWxsIGltcGx5IGNlcnRhaW4gYmFycmllcnM6CisKKyAoMSkgTE9DSyBvcGVyYXRpb24gaW1wbGljYXRpb246CisKKyAgICAgTWVtb3J5IG9wZXJhdGlvbnMgaXNzdWVkIGFmdGVyIHRoZSBMT0NLIHdpbGwgYmUgY29tcGxldGVkIGFmdGVyIHRoZSBMT0NLCisgICAgIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgorCisgICAgIE1lbW9yeSBvcGVyYXRpb25zIGlzc3VlZCBiZWZvcmUgdGhlIExPQ0sgbWF5IGJlIGNvbXBsZXRlZCBhZnRlciB0aGUgTE9DSworICAgICBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KKworICgyKSBVTkxPQ0sgb3BlcmF0aW9uIGltcGxpY2F0aW9uOgorCisgICAgIE1lbW9yeSBvcGVyYXRpb25zIGlzc3VlZCBiZWZvcmUgdGhlIFVOTE9DSyB3aWxsIGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlCisgICAgIFVOTE9DSyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KKworICAgICBNZW1vcnkgb3BlcmF0aW9ucyBpc3N1ZWQgYWZ0ZXIgdGhlIFVOTE9DSyBtYXkgYmUgY29tcGxldGVkIGJlZm9yZSB0aGUKKyAgICAgVU5MT0NLIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgorCisgKDMpIExPQ0sgdnMgTE9DSyBpbXBsaWNhdGlvbjoKKworICAgICBBbGwgTE9DSyBvcGVyYXRpb25zIGlzc3VlZCBiZWZvcmUgYW5vdGhlciBMT0NLIG9wZXJhdGlvbiB3aWxsIGJlIGNvbXBsZXRlZAorICAgICBiZWZvcmUgdGhhdCBMT0NLIG9wZXJhdGlvbi4KKworICg0KSBMT0NLIHZzIFVOTE9DSyBpbXBsaWNhdGlvbjoKKworICAgICBBbGwgTE9DSyBvcGVyYXRpb25zIGlzc3VlZCBiZWZvcmUgYW4gVU5MT0NLIG9wZXJhdGlvbiB3aWxsIGJlIGNvbXBsZXRlZAorICAgICBiZWZvcmUgdGhlIFVOTE9DSyBvcGVyYXRpb24uCisKKyAgICAgQWxsIFVOTE9DSyBvcGVyYXRpb25zIGlzc3VlZCBiZWZvcmUgYSBMT0NLIG9wZXJhdGlvbiB3aWxsIGJlIGNvbXBsZXRlZAorICAgICBiZWZvcmUgdGhlIExPQ0sgb3BlcmF0aW9uLgorCisgKDUpIEZhaWxlZCBjb25kaXRpb25hbCBMT0NLIGltcGxpY2F0aW9uOgorCisgICAgIENlcnRhaW4gdmFyaWFudHMgb2YgdGhlIExPQ0sgb3BlcmF0aW9uIG1heSBmYWlsLCBlaXRoZXIgZHVlIHRvIGJlaW5nCisgICAgIHVuYWJsZSB0byBnZXQgdGhlIGxvY2sgaW1tZWRpYXRlbHksIG9yIGR1ZSB0byByZWNlaXZpbmcgYW4gdW5ibG9ja2VkCisgICAgIHNpZ25hbCB3aGlsc3QgYXNsZWVwIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZSBhdmFpbGFibGUuICBGYWlsZWQKKyAgICAgbG9ja3MgZG8gbm90IGltcGx5IGFueSBzb3J0IG9mIGJhcnJpZXIuCisKK1RoZXJlZm9yZSwgZnJvbSAoMSksICgyKSBhbmQgKDQpIGFuIFVOTE9DSyBmb2xsb3dlZCBieSBhbiB1bmNvbmRpdGlvbmFsIExPQ0sgaXMKK2VxdWl2YWxlbnQgdG8gYSBmdWxsIGJhcnJpZXIsIGJ1dCBhIExPQ0sgZm9sbG93ZWQgYnkgYW4gVU5MT0NLIGlzIG5vdC4KKworWyFdIE5vdGU6IG9uZSBvZiB0aGUgY29uc2VxdWVuY2Ugb2YgTE9DS3MgYW5kIFVOTE9DS3MgYmVpbmcgb25seSBvbmUtd2F5CisgICAgYmFycmllcnMgaXMgdGhhdCB0aGUgZWZmZWN0cyBpbnN0cnVjdGlvbnMgb3V0c2lkZSBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gbWF5CisgICAgc2VlcCBpbnRvIHRoZSBpbnNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uCisKK0EgTE9DSyBmb2xsb3dlZCBieSBhbiBVTkxPQ0sgbWF5IG5vdCBiZSBhc3N1bWVkIHRvIGJlIGZ1bGwgbWVtb3J5IGJhcnJpZXIKK2JlY2F1c2UgaXQgaXMgcG9zc2libGUgZm9yIGFuIGFjY2VzcyBwcmVjZWRpbmcgdGhlIExPQ0sgdG8gaGFwcGVuIGFmdGVyIHRoZQorTE9DSywgYW5kIGFuIGFjY2VzcyBmb2xsb3dpbmcgdGhlIFVOTE9DSyB0byBoYXBwZW4gYmVmb3JlIHRoZSBVTkxPQ0ssIGFuZCB0aGUKK3R3byBhY2Nlc3NlcyBjYW4gdGhlbXNlbHZlcyB0aGVuIGNyb3NzOgorCisJKkEgPSBhOworCUxPQ0sKKwlVTkxPQ0sKKwkqQiA9IGI7CisKK21heSBvY2N1ciBhczoKKworCUxPQ0ssIFNUT1JFICpCLCBTVE9SRSAqQSwgVU5MT0NLCisKK0xvY2tzIGFuZCBzZW1hcGhvcmVzIG1heSBub3QgcHJvdmlkZSBhbnkgZ3VhcmFudGVlIG9mIG9yZGVyaW5nIG9uIFVQIGNvbXBpbGVkCitzeXN0ZW1zLCBhbmQgc28gY2Fubm90IGJlIGNvdW50ZWQgb24gaW4gc3VjaCBhIHNpdHVhdGlvbiB0byBhY3R1YWxseSBhY2hpZXZlCithbnl0aGluZyBhdCBhbGwgLSBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byBJL08gYWNjZXNzZXMgLSB1bmxlc3MgY29tYmluZWQKK3dpdGggaW50ZXJydXB0IGRpc2FibGluZyBvcGVyYXRpb25zLgorCitTZWUgYWxzbyB0aGUgc2VjdGlvbiBvbiAiSW50ZXItQ1BVIGxvY2tpbmcgYmFycmllciBlZmZlY3RzIi4KKworCitBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nOgorCisJKkEgPSBhOworCSpCID0gYjsKKwlMT0NLCisJKkMgPSBjOworCSpEID0gZDsKKwlVTkxPQ0sKKwkqRSA9IGU7CisJKkYgPSBmOworCitUaGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGV2ZW50cyBpcyBhY2NlcHRhYmxlOgorCisJTE9DSywgeypGLCpBfSwgKkUsIHsqQywqRH0sICpCLCBVTkxPQ0sKKworCVsrXSBOb3RlIHRoYXQgeypGLCpBfSBpbmRpY2F0ZXMgYSBjb21iaW5lZCBhY2Nlc3MuCisKK0J1dCBub25lIG9mIHRoZSBmb2xsb3dpbmcgYXJlOgorCisJeypGLCpBfSwgKkIsCUxPQ0ssICpDLCAqRCwJVU5MT0NLLCAqRQorCSpBLCAqQiwgKkMsCUxPQ0ssICpELAlVTkxPQ0ssICpFLCAqRgorCSpBLCAqQiwJCUxPQ0ssICpDLAlVTkxPQ0ssICpELCAqRSwgKkYKKwkqQiwJCUxPQ0ssICpDLCAqRCwJVU5MT0NLLCB7KkYsKkF9LCAqRQorCisKKworSU5URVJSVVBUIERJU0FCTElORyBGVU5DVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Z1bmN0aW9ucyB0aGF0IGRpc2FibGUgaW50ZXJydXB0cyAoTE9DSyBlcXVpdmFsZW50KSBhbmQgZW5hYmxlIGludGVycnVwdHMKKyhVTkxPQ0sgZXF1aXZhbGVudCkgd2lsbCBhY3QgYXMgY29tcGlsZXIgYmFycmllcnMgb25seS4gIFNvIGlmIG1lbW9yeSBvciBJL08KK2JhcnJpZXJzIGFyZSByZXF1aXJlZCBpbiBzdWNoIGEgc2l0dWF0aW9uLCB0aGV5IG11c3QgYmUgcHJvdmlkZWQgZnJvbSBzb21lCitvdGhlciBtZWFucy4KKworCitNSVNDRUxMQU5FT1VTIEZVTkNUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3RoZXIgZnVuY3Rpb25zIHRoYXQgaW1wbHkgYmFycmllcnM6CisKKyAoKikgc2NoZWR1bGUoKSBhbmQgc2ltaWxhciBpbXBseSBmdWxsIG1lbW9yeSBiYXJyaWVycy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lOVEVSLUNQVSBMT0NLSU5HIEJBUlJJRVIgRUZGRUNUUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09uIFNNUCBzeXN0ZW1zIGxvY2tpbmcgcHJpbWl0aXZlcyBnaXZlIGEgbW9yZSBzdWJzdGFudGlhbCBmb3JtIG9mIGJhcnJpZXI6IG9uZQordGhhdCBkb2VzIGFmZmVjdCBtZW1vcnkgYWNjZXNzIG9yZGVyaW5nIG9uIG90aGVyIENQVXMsIHdpdGhpbiB0aGUgY29udGV4dCBvZgorY29uZmxpY3Qgb24gYW55IHBhcnRpY3VsYXIgbG9jay4KKworCitMT0NLUyBWUyBNRU1PUlkgQUNDRVNTRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb25zaWRlciB0aGUgZm9sbG93aW5nOiB0aGUgc3lzdGVtIGhhcyBhIHBhaXIgb2Ygc3BpbmxvY2tzIChNKSBhbmQgKFEpLCBhbmQKK3RocmVlIENQVXM7IHRoZW4gc2hvdWxkIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzIG9jY3VyOgorCisJQ1BVIDEJCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkqQSA9IGE7CQkJCSpFID0gZTsKKwlMT0NLIE0JCQkJTE9DSyBRCisJKkIgPSBiOwkJCQkqRiA9IGY7CisJKkMgPSBjOwkJCQkqRyA9IGc7CisJVU5MT0NLIE0JCQlVTkxPQ0sgUQorCSpEID0gZDsJCQkJKkggPSBoOworCitUaGVuIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBhcyB0byB3aGF0IG9yZGVyIENQVSAjMyB3aWxsIHNlZSB0aGUgYWNjZXNzZXMgdG8gKkEKK3Rocm91Z2ggKkggb2NjdXIgaW4sIG90aGVyIHRoYW4gdGhlIGNvbnN0cmFpbnRzIGltcG9zZWQgYnkgdGhlIHNlcGFyYXRlIGxvY2tzCitvbiB0aGUgc2VwYXJhdGUgQ1BVcy4gSXQgbWlnaHQsIGZvciBleGFtcGxlLCBzZWU6CisKKwkqRSwgTE9DSyBNLCBMT0NLIFEsICpHLCAqQywgKkYsICpBLCAqQiwgVU5MT0NLIFEsICpELCAqSCwgVU5MT0NLIE0KKworQnV0IGl0IHdvbid0IHNlZSBhbnkgb2Y6CisKKwkqQiwgKkMgb3IgKkQgcHJlY2VkaW5nIExPQ0sgTQorCSpBLCAqQiBvciAqQyBmb2xsb3dpbmcgVU5MT0NLIE0KKwkqRiwgKkcgb3IgKkggcHJlY2VkaW5nIExPQ0sgUQorCSpFLCAqRiBvciAqRyBmb2xsb3dpbmcgVU5MT0NLIFEKKworCitIb3dldmVyLCBpZiB0aGUgZm9sbG93aW5nIG9jY3VyczoKKworCUNQVSAxCQkJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJKkEgPSBhOworCUxPQ0sgTQkJWzFdCisJKkIgPSBiOworCSpDID0gYzsKKwlVTkxPQ0sgTQlbMV0KKwkqRCA9IGQ7CQkJCSpFID0gZTsKKwkJCQkJTE9DSyBNCQlbMl0KKwkJCQkJKkYgPSBmOworCQkJCQkqRyA9IGc7CisJCQkJCVVOTE9DSyBNCVsyXQorCQkJCQkqSCA9IGg7CisKK0NQVSAjMyBtaWdodCBzZWU6CisKKwkqRSwgTE9DSyBNIFsxXSwgKkMsICpCLCAqQSwgVU5MT0NLIE0gWzFdLAorCQlMT0NLIE0gWzJdLCAqSCwgKkYsICpHLCBVTkxPQ0sgTSBbMl0sICpECisKK0J1dCBhc3N1bWluZyBDUFUgIzEgZ2V0cyB0aGUgbG9jayBmaXJzdCwgaXQgd29uJ3Qgc2VlIGFueSBvZjoKKworCSpCLCAqQywgKkQsICpGLCAqRyBvciAqSCBwcmVjZWRpbmcgTE9DSyBNIFsxXQorCSpBLCAqQiBvciAqQyBmb2xsb3dpbmcgVU5MT0NLIE0gWzFdCisJKkYsICpHIG9yICpIIHByZWNlZGluZyBMT0NLIE0gWzJdCisJKkEsICpCLCAqQywgKkUsICpGIG9yICpHIGZvbGxvd2luZyBVTkxPQ0sgTSBbMl0KKworCitMT0NLUyBWUyBJL08gQUNDRVNTRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgKGVzcGVjaWFsbHkgaW52b2x2aW5nIE5VTUEpLCBJL08gYWNjZXNzZXMgd2l0aGluCit0d28gc3BpbmxvY2tlZCBzZWN0aW9ucyBvbiB0d28gZGlmZmVyZW50IENQVXMgbWF5IGJlIHNlZW4gYXMgaW50ZXJsZWF2ZWQgYnkgdGhlCitQQ0kgYnJpZGdlLCBiZWNhdXNlIHRoZSBQQ0kgYnJpZGdlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHBhcnRpY2lwYXRlIGluIHRoZQorY2FjaGUtY29oZXJlbmNlIHByb3RvY29sLCBhbmQgaXMgdGhlcmVmb3JlIGluY2FwYWJsZSBvZiBpc3N1aW5nIHRoZSByZXF1aXJlZAorcmVhZCBtZW1vcnkgYmFycmllcnMuCisKK0ZvciBleGFtcGxlOgorCisJQ1BVIDEJCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlzcGluX2xvY2soUSkKKwl3cml0ZWwoMCwgQUREUikKKwl3cml0ZWwoMSwgREFUQSk7CisJc3Bpbl91bmxvY2soUSk7CisJCQkJCXNwaW5fbG9jayhRKTsKKwkJCQkJd3JpdGVsKDQsIEFERFIpOworCQkJCQl3cml0ZWwoNSwgREFUQSk7CisJCQkJCXNwaW5fdW5sb2NrKFEpOworCittYXkgYmUgc2VlbiBieSB0aGUgUENJIGJyaWRnZSBhcyBmb2xsb3dzOgorCisJU1RPUkUgKkFERFIgPSAwLCBTVE9SRSAqQUREUiA9IDQsIFNUT1JFICpEQVRBID0gMSwgU1RPUkUgKkRBVEEgPSA1CisKK3doaWNoIHdvdWxkIHByb2JhYmx5IGNhdXNlIHRoZSBoYXJkd2FyZSB0byBtYWxmdW5jdGlvbi4KKworCitXaGF0IGlzIG5lY2Vzc2FyeSBoZXJlIGlzIHRvIGludGVydmVuZSB3aXRoIGFuIG1taW93YigpIGJlZm9yZSBkcm9wcGluZyB0aGUKK3NwaW5sb2NrLCBmb3IgZXhhbXBsZToKKworCUNQVSAxCQkJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJc3Bpbl9sb2NrKFEpCisJd3JpdGVsKDAsIEFERFIpCisJd3JpdGVsKDEsIERBVEEpOworCW1taW93YigpOworCXNwaW5fdW5sb2NrKFEpOworCQkJCQlzcGluX2xvY2soUSk7CisJCQkJCXdyaXRlbCg0LCBBRERSKTsKKwkJCQkJd3JpdGVsKDUsIERBVEEpOworCQkJCQltbWlvd2IoKTsKKwkJCQkJc3Bpbl91bmxvY2soUSk7CisKK3RoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgdHdvIHN0b3JlcyBpc3N1ZWQgb24gQ1BVICMxIGFwcGVhciBhdCB0aGUgUENJIGJyaWRnZQorYmVmb3JlIGVpdGhlciBvZiB0aGUgc3RvcmVzIGlzc3VlZCBvbiBDUFUgIzIuCisKKworRnVydGhlcm1vcmUsIGZvbGxvd2luZyBhIHN0b3JlIGJ5IGEgbG9hZCB0byB0aGUgc2FtZSBkZXZpY2Ugb2J2aWF0ZXMgdGhlIG5lZWQKK2ZvciBhbiBtbWlvd2IoKSwgYmVjYXVzZSB0aGUgbG9hZCBmb3JjZXMgdGhlIHN0b3JlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUgbG9hZAoraXMgcGVyZm9ybWVkOgorCisJQ1BVIDEJCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlzcGluX2xvY2soUSkKKwl3cml0ZWwoMCwgQUREUikKKwlhID0gcmVhZGwoREFUQSk7CisJc3Bpbl91bmxvY2soUSk7CisJCQkJCXNwaW5fbG9jayhRKTsKKwkJCQkJd3JpdGVsKDQsIEFERFIpOworCQkJCQliID0gcmVhZGwoREFUQSk7CisJCQkJCXNwaW5fdW5sb2NrKFEpOworCisKK1NlZSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXSEVSRSBBUkUgTUVNT1JZIEJBUlJJRVJTIE5FRURFRD8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbmRlciBub3JtYWwgb3BlcmF0aW9uLCBtZW1vcnkgb3BlcmF0aW9uIHJlb3JkZXJpbmcgaXMgZ2VuZXJhbGx5IG5vdCBnb2luZyB0bworYmUgYSBwcm9ibGVtIGFzIGEgc2luZ2xlLXRocmVhZGVkIGxpbmVhciBwaWVjZSBvZiBjb2RlIHdpbGwgc3RpbGwgYXBwZWFyIHRvCit3b3JrIGNvcnJlY3RseSwgZXZlbiBpZiBpdCdzIGluIGFuIFNNUCBrZXJuZWwuICBUaGVyZSBhcmUsIGhvd2V2ZXIsIHRocmVlCitjaXJjdW1zdGFuY2VzIGluIHdoaWNoIHJlb3JkZXJpbmcgZGVmaW5pdGVseSBfY291bGRfIGJlIGEgcHJvYmxlbToKKworICgqKSBJbnRlcnByb2Nlc3NvciBpbnRlcmFjdGlvbi4KKworICgqKSBBdG9taWMgb3BlcmF0aW9ucy4KKworICgqKSBBY2Nlc3NpbmcgZGV2aWNlcyAoSS9PKS4KKworICgqKSBJbnRlcnJ1cHRzLgorCisKK0lOVEVSUFJPQ0VTU09SIElOVEVSQUNUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHRoZXJlJ3MgYSBzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIHByb2Nlc3NvciwgbW9yZSB0aGFuIG9uZSBDUFUgaW4gdGhlCitzeXN0ZW0gbWF5IGJlIHdvcmtpbmcgb24gdGhlIHNhbWUgZGF0YSBzZXQgYXQgdGhlIHNhbWUgdGltZS4gIFRoaXMgY2FuIGNhdXNlCitzeW5jaHJvbmlzYXRpb24gcHJvYmxlbXMsIGFuZCB0aGUgdXN1YWwgd2F5IG9mIGRlYWxpbmcgd2l0aCB0aGVtIGlzIHRvIHVzZQorbG9ja3MuICBMb2NrcywgaG93ZXZlciwgYXJlIHF1aXRlIGV4cGVuc2l2ZSwgYW5kIHNvIGl0IG1heSBiZSBwcmVmZXJhYmxlIHRvCitvcGVyYXRlIHdpdGhvdXQgdGhlIHVzZSBvZiBhIGxvY2sgaWYgYXQgYWxsIHBvc3NpYmxlLiAgSW4gc3VjaCBhIGNhc2UKK29wZXJhdGlvbnMgdGhhdCBhZmZlY3QgYm90aCBDUFVzIG1heSBoYXZlIHRvIGJlIGNhcmVmdWxseSBvcmRlcmVkIHRvIHByZXZlbnQKK2EgbWFsZnVuY3Rpb24uCisKK0NvbnNpZGVyLCBmb3IgZXhhbXBsZSwgdGhlIFIvVyBzZW1hcGhvcmUgc2xvdyBwYXRoLiAgSGVyZSBhIHdhaXRpbmcgcHJvY2VzcyBpcworcXVldWVkIG9uIHRoZSBzZW1hcGhvcmUsIGJ5IHZpcnR1ZSBvZiBpdCBoYXZpbmcgYSBwaWVjZSBvZiBpdHMgc3RhY2sgbGlua2VkIHRvCit0aGUgc2VtYXBob3JlJ3MgbGlzdCBvZiB3YWl0aW5nIHByb2Nlc3NlczoKKworCXN0cnVjdCByd19zZW1hcGhvcmUgeworCQkuLi4KKwkJc3BpbmxvY2tfdCBsb2NrOworCQlzdHJ1Y3QgbGlzdF9oZWFkIHdhaXRlcnM7CisJfTsKKworCXN0cnVjdCByd3NlbV93YWl0ZXIgeworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl9OworCitUbyB3YWtlIHVwIGEgcGFydGljdWxhciB3YWl0ZXIsIHRoZSB1cF9yZWFkKCkgb3IgdXBfd3JpdGUoKSBmdW5jdGlvbnMgaGF2ZSB0bzoKKworICgxKSByZWFkIHRoZSBuZXh0IHBvaW50ZXIgZnJvbSB0aGlzIHdhaXRlcidzIHJlY29yZCB0byBrbm93IGFzIHRvIHdoZXJlIHRoZQorICAgICBuZXh0IHdhaXRlciByZWNvcmQgaXM7CisKKyAoNCkgcmVhZCB0aGUgcG9pbnRlciB0byB0aGUgd2FpdGVyJ3MgdGFzayBzdHJ1Y3R1cmU7CisKKyAoMykgY2xlYXIgdGhlIHRhc2sgcG9pbnRlciB0byB0ZWxsIHRoZSB3YWl0ZXIgaXQgaGFzIGJlZW4gZ2l2ZW4gdGhlIHNlbWFwaG9yZTsKKworICg0KSBjYWxsIHdha2VfdXBfcHJvY2VzcygpIG9uIHRoZSB0YXNrOyBhbmQKKworICg1KSByZWxlYXNlIHRoZSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgd2FpdGVyJ3MgdGFzayBzdHJ1Y3QuCisKK0luIG90aGVyd29yZHMsIGl0IGhhcyB0byBwZXJmb3JtIHRoaXMgc2VxdWVuY2Ugb2YgZXZlbnRzOgorCisJTE9BRCB3YWl0ZXItPmxpc3QubmV4dDsKKwlMT0FEIHdhaXRlci0+dGFzazsKKwlTVE9SRSB3YWl0ZXItPnRhc2s7CisJQ0FMTCB3YWtldXAKKwlSRUxFQVNFIHRhc2sKKworYW5kIGlmIGFueSBvZiB0aGVzZSBzdGVwcyBvY2N1ciBvdXQgb2Ygb3JkZXIsIHRoZW4gdGhlIHdob2xlIHRoaW5nIG1heQorbWFsZnVuY3Rpb24uCisKK09uY2UgaXQgaGFzIHF1ZXVlZCBpdHNlbGYgYW5kIGRyb3BwZWQgdGhlIHNlbWFwaG9yZSBsb2NrLCB0aGUgd2FpdGVyIGRvZXMgbm90CitnZXQgdGhlIGxvY2sgYWdhaW47IGl0IGluc3RlYWQganVzdCB3YWl0cyBmb3IgaXRzIHRhc2sgcG9pbnRlciB0byBiZSBjbGVhcmVkCitiZWZvcmUgcHJvY2VlZGluZy4gIFNpbmNlIHRoZSByZWNvcmQgaXMgb24gdGhlIHdhaXRlcidzIHN0YWNrLCB0aGlzIG1lYW5zIHRoYXQKK2lmIHRoZSB0YXNrIHBvaW50ZXIgaXMgY2xlYXJlZCBfYmVmb3JlXyB0aGUgbmV4dCBwb2ludGVyIGluIHRoZSBsaXN0IGlzIHJlYWQsCithbm90aGVyIENQVSBtaWdodCBzdGFydCBwcm9jZXNzaW5nIHRoZSB3YWl0ZXIgYW5kIG1pZ2h0IGNsb2JiZXIgdGhlIHdhaXRlcidzCitzdGFjayBiZWZvcmUgdGhlIHVwKigpIGZ1bmN0aW9uIGhhcyBhIGNoYW5jZSB0byByZWFkIHRoZSBuZXh0IHBvaW50ZXIuCisKK0NvbnNpZGVyIHRoZW4gd2hhdCBtaWdodCBoYXBwZW4gdG8gdGhlIGFib3ZlIHNlcXVlbmNlIG9mIGV2ZW50czoKKworCUNQVSAxCQkJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCWRvd25feHh4KCkKKwkJCQkJUXVldWUgd2FpdGVyCisJCQkJCVNsZWVwCisJdXBfeXl5KCkKKwlMT0FEIHdhaXRlci0+dGFzazsKKwlTVE9SRSB3YWl0ZXItPnRhc2s7CisJCQkJCVdva2VuIHVwIGJ5IG90aGVyIGV2ZW50CisJPHByZWVtcHQ+CisJCQkJCVJlc3VtZSBwcm9jZXNzaW5nCisJCQkJCWRvd25feHh4KCkgcmV0dXJucworCQkJCQljYWxsIGZvbygpCisJCQkJCWZvbygpIGNsb2JiZXJzICp3YWl0ZXIKKwk8L3ByZWVtcHQ+CisJTE9BRCB3YWl0ZXItPmxpc3QubmV4dDsKKwktLS0gT09QUyAtLS0KKworVGhpcyBjb3VsZCBiZSBkZWFsdCB3aXRoIHVzaW5nIHRoZSBzZW1hcGhvcmUgbG9jaywgYnV0IHRoZW4gdGhlIGRvd25feHh4KCkKK2Z1bmN0aW9uIGhhcyB0byBuZWVkbGVzc2x5IGdldCB0aGUgc3BpbmxvY2sgYWdhaW4gYWZ0ZXIgYmVpbmcgd29rZW4gdXAuCisKK1RoZSB3YXkgdG8gZGVhbCB3aXRoIHRoaXMgaXMgdG8gaW5zZXJ0IGEgZ2VuZXJhbCBTTVAgbWVtb3J5IGJhcnJpZXI6CisKKwlMT0FEIHdhaXRlci0+bGlzdC5uZXh0OworCUxPQUQgd2FpdGVyLT50YXNrOworCXNtcF9tYigpOworCVNUT1JFIHdhaXRlci0+dGFzazsKKwlDQUxMIHdha2V1cAorCVJFTEVBU0UgdGFzaworCitJbiB0aGlzIGNhc2UsIHRoZSBiYXJyaWVyIG1ha2VzIGEgZ3VhcmFudGVlIHRoYXQgYWxsIG1lbW9yeSBhY2Nlc3NlcyBiZWZvcmUgdGhlCitiYXJyaWVyIHdpbGwgYXBwZWFyIHRvIGhhcHBlbiBiZWZvcmUgYWxsIHRoZSBtZW1vcnkgYWNjZXNzZXMgYWZ0ZXIgdGhlIGJhcnJpZXIKK3dpdGggcmVzcGVjdCB0byB0aGUgb3RoZXIgQ1BVcyBvbiB0aGUgc3lzdGVtLiAgSXQgZG9lcyBfbm90XyBndWFyYW50ZWUgdGhhdCBhbGwKK3RoZSBtZW1vcnkgYWNjZXNzZXMgYmVmb3JlIHRoZSBiYXJyaWVyIHdpbGwgYmUgY29tcGxldGUgYnkgdGhlIHRpbWUgdGhlIGJhcnJpZXIKK2luc3RydWN0aW9uIGl0c2VsZiBpcyBjb21wbGV0ZS4KKworT24gYSBVUCBzeXN0ZW0gLSB3aGVyZSB0aGlzIHdvdWxkbid0IGJlIGEgcHJvYmxlbSAtIHRoZSBzbXBfbWIoKSBpcyBqdXN0IGEKK2NvbXBpbGVyIGJhcnJpZXIsIHRodXMgbWFraW5nIHN1cmUgdGhlIGNvbXBpbGVyIGVtaXRzIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlCityaWdodCBvcmRlciB3aXRob3V0IGFjdHVhbGx5IGludGVydmVuaW5nIGluIHRoZSBDUFUuICBTaW5jZSB0aGVyZSB0aGVyZSdzIG9ubHkKK29uZSBDUFUsIHRoYXQgQ1BVJ3MgZGVwZW5kZW5jeSBvcmRlcmluZyBsb2dpYyB3aWxsIHRha2UgY2FyZSBvZiBldmVyeXRoaW5nCitlbHNlLgorCisKK0FUT01JQyBPUEVSQVRJT05TCistLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsc3QgdGhleSBhcmUgdGVjaG5pY2FsbHkgaW50ZXJwcm9jZXNzb3IgaW50ZXJhY3Rpb24gY29uc2lkZXJhdGlvbnMsIGF0b21pYworb3BlcmF0aW9ucyBhcmUgbm90ZWQgc3BlY2lhbGx5IGFzIHNvbWUgb2YgdGhlbSBpbXBseSBmdWxsIG1lbW9yeSBiYXJyaWVycyBhbmQKK3NvbWUgZG9uJ3QsIGJ1dCB0aGV5J3JlIHZlcnkgaGVhdmlseSByZWxpZWQgb24gYXMgYSBncm91cCB0aHJvdWdob3V0IHRoZQora2VybmVsLgorCitBbnkgYXRvbWljIG9wZXJhdGlvbiB0aGF0IG1vZGlmaWVzIHNvbWUgc3RhdGUgaW4gbWVtb3J5IGFuZCByZXR1cm5zIGluZm9ybWF0aW9uCithYm91dCB0aGUgc3RhdGUgKG9sZCBvciBuZXcpIGltcGxpZXMgYW4gU01QLWNvbmRpdGlvbmFsIGdlbmVyYWwgbWVtb3J5IGJhcnJpZXIKKyhzbXBfbWIoKSkgb24gZWFjaCBzaWRlIG9mIHRoZSBhY3R1YWwgb3BlcmF0aW9uLiAgVGhlc2UgaW5jbHVkZToKKworCXhjaGcoKTsKKwljbXB4Y2hnKCk7CisJYXRvbWljX2NtcHhjaGcoKTsKKwlhdG9taWNfaW5jX3JldHVybigpOworCWF0b21pY19kZWNfcmV0dXJuKCk7CisJYXRvbWljX2FkZF9yZXR1cm4oKTsKKwlhdG9taWNfc3ViX3JldHVybigpOworCWF0b21pY19pbmNfYW5kX3Rlc3QoKTsKKwlhdG9taWNfZGVjX2FuZF90ZXN0KCk7CisJYXRvbWljX3N1Yl9hbmRfdGVzdCgpOworCWF0b21pY19hZGRfbmVnYXRpdmUoKTsKKwlhdG9taWNfYWRkX3VubGVzcygpOworCXRlc3RfYW5kX3NldF9iaXQoKTsKKwl0ZXN0X2FuZF9jbGVhcl9iaXQoKTsKKwl0ZXN0X2FuZF9jaGFuZ2VfYml0KCk7CisKK1RoZXNlIGFyZSB1c2VkIGZvciBzdWNoIHRoaW5ncyBhcyBpbXBsZW1lbnRpbmcgTE9DSy1jbGFzcyBhbmQgVU5MT0NLLWNsYXNzCitvcGVyYXRpb25zIGFuZCBhZGp1c3RpbmcgcmVmZXJlbmNlIGNvdW50ZXJzIHRvd2FyZHMgb2JqZWN0IGRlc3RydWN0aW9uLCBhbmQgYXMKK3N1Y2ggdGhlIGltcGxpY2l0IG1lbW9yeSBiYXJyaWVyIGVmZmVjdHMgYXJlIG5lY2Vzc2FyeS4KKworCitUaGUgZm9sbG93aW5nIG9wZXJhdGlvbiBhcmUgcG90ZW50aWFsIHByb2JsZW1zIGFzIHRoZXkgZG8gX25vdF8gaW1wbHkgbWVtb3J5CitiYXJyaWVycywgYnV0IG1pZ2h0IGJlIHVzZWQgZm9yIGltcGxlbWVudGluZyBzdWNoIHRoaW5ncyBhcyBVTkxPQ0stY2xhc3MKK29wZXJhdGlvbnM6CisKKwlhdG9taWNfc2V0KCk7CisJc2V0X2JpdCgpOworCWNsZWFyX2JpdCgpOworCWNoYW5nZV9iaXQoKTsKKworV2l0aCB0aGVzZSB0aGUgYXBwcm9wcmlhdGUgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXIgc2hvdWxkIGJlIHVzZWQgaWYgbmVjZXNzYXJ5Cisoc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgZm9yIGluc3RhbmNlKS4KKworCitUaGUgZm9sbG93aW5nIGFsc28gZG8gX25vdF8gaW1wbHkgbWVtb3J5IGJhcnJpZXJzLCBhbmQgc28gbWF5IHJlcXVpcmUgZXhwbGljaXQKK21lbW9yeSBiYXJyaWVycyB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMgKHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKSBmb3IKK2luc3RhbmNlKSk6CisKKwlhdG9taWNfYWRkKCk7CisJYXRvbWljX3N1YigpOworCWF0b21pY19pbmMoKTsKKwlhdG9taWNfZGVjKCk7CisKK0lmIHRoZXkncmUgdXNlZCBmb3Igc3RhdGlzdGljcyBnZW5lcmF0aW9uLCB0aGVuIHRoZXkgcHJvYmFibHkgZG9uJ3QgbmVlZCBtZW1vcnkKK2JhcnJpZXJzLCB1bmxlc3MgdGhlcmUncyBhIGNvdXBsaW5nIGJldHdlZW4gc3RhdGlzdGljYWwgZGF0YS4KKworSWYgdGhleSdyZSB1c2VkIGZvciByZWZlcmVuY2UgY291bnRpbmcgb24gYW4gb2JqZWN0IHRvIGNvbnRyb2wgaXRzIGxpZmV0aW1lLAordGhleSBwcm9iYWJseSBkb24ndCBuZWVkIG1lbW9yeSBiYXJyaWVycyBiZWNhdXNlIGVpdGhlciB0aGUgcmVmZXJlbmNlIGNvdW50Cit3aWxsIGJlIGFkanVzdGVkIGluc2lkZSBhIGxvY2tlZCBzZWN0aW9uLCBvciB0aGUgY2FsbGVyIHdpbGwgYWxyZWFkeSBob2xkCitzdWZmaWNpZW50IHJlZmVyZW5jZXMgdG8gbWFrZSB0aGUgbG9jaywgYW5kIHRodXMgYSBtZW1vcnkgYmFycmllciB1bm5lY2Vzc2FyeS4KKworSWYgdGhleSdyZSB1c2VkIGZvciBjb25zdHJ1Y3RpbmcgYSBsb2NrIG9mIHNvbWUgZGVzY3JpcHRpb24sIHRoZW4gdGhleSBwcm9iYWJseQorZG8gbmVlZCBtZW1vcnkgYmFycmllcnMgYXMgYSBsb2NrIHByaW1pdGl2ZSBnZW5lcmFsbHkgaGFzIHRvIGRvIHRoaW5ncyBpbiBhCitzcGVjaWZpYyBvcmRlci4KKworCitCYXNpY2FsbHksIGVhY2ggdXNhZ2UgY2FzZSBoYXMgdG8gYmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgYXMgdG8gd2hldGhlciBtZW1vcnkKK2JhcnJpZXJzIGFyZSBuZWVkZWQgb3Igbm90LgorCitbIV0gTm90ZSB0aGF0IHNwZWNpYWwgbWVtb3J5IGJhcnJpZXIgcHJpbWl0aXZlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGVzZQorc2l0dWF0aW9ucyBiZWNhdXNlIG9uIHNvbWUgQ1BVcyB0aGUgYXRvbWljIGluc3RydWN0aW9ucyB1c2VkIGltcGx5IGZ1bGwgbWVtb3J5CitiYXJyaWVycywgYW5kIHNvIGJhcnJpZXIgaW5zdHJ1Y3Rpb25zIGFyZSBzdXBlcmZsdW91cyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZW0sCithbmQgaW4gc3VjaCBjYXNlcyB0aGUgc3BlY2lhbCBiYXJyaWVyIHByaW1pdGl2ZXMgd2lsbCBiZSBuby1vcHMuCisKK1NlZSBEb2N1bWVudGF0aW9uL2F0b21pY19vcHMudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK0FDQ0VTU0lORyBERVZJQ0VTCistLS0tLS0tLS0tLS0tLS0tLQorCitNYW55IGRldmljZXMgY2FuIGJlIG1lbW9yeSBtYXBwZWQsIGFuZCBzbyBhcHBlYXIgdG8gdGhlIENQVSBhcyBpZiB0aGV5J3JlIGp1c3QKK2Egc2V0IG9mIG1lbW9yeSBsb2NhdGlvbnMuICBUbyBjb250cm9sIHN1Y2ggYSBkZXZpY2UsIHRoZSBkcml2ZXIgdXN1YWxseSBoYXMgdG8KK21ha2UgdGhlIHJpZ2h0IG1lbW9yeSBhY2Nlc3NlcyBpbiBleGFjdGx5IHRoZSByaWdodCBvcmRlci4KKworSG93ZXZlciwgaGF2aW5nIGEgY2xldmVyIENQVSBvciBhIGNsZXZlciBjb21waWxlciBjcmVhdGVzIGEgcG90ZW50aWFsIHByb2JsZW0KK2luIHRoYXQgdGhlIGNhcmVmdWxseSBzZXF1ZW5jZWQgYWNjZXNzZXMgaW4gdGhlIGRyaXZlciBjb2RlIHdvbid0IHJlYWNoIHRoZQorZGV2aWNlIGluIHRoZSByZXF1aXNpdGUgb3JkZXIgaWYgdGhlIENQVSBvciB0aGUgY29tcGlsZXIgdGhpbmtzIGl0IGlzIG1vcmUKK2VmZmljaWVudCB0byByZW9yZGVyLCBjb21iaW5lIG9yIG1lcmdlIGFjY2Vzc2VzIC0gc29tZXRoaW5nIHRoYXQgd291bGQgY2F1c2UKK3RoZSBkZXZpY2UgdG8gbWFsZnVuY3Rpb24uCisKK0luc2lkZSBvZiB0aGUgTGludXgga2VybmVsLCBJL08gc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgYWNjZXNzb3IKK3JvdXRpbmVzIC0gc3VjaCBhcyBpbmIoKSBvciB3cml0ZWwoKSAtIHdoaWNoIGtub3cgaG93IHRvIG1ha2Ugc3VjaCBhY2Nlc3NlcworYXBwcm9wcmlhdGVseSBzZXF1ZW50aWFsLiAgV2hpbHN0IHRoaXMsIGZvciB0aGUgbW9zdCBwYXJ0LCByZW5kZXJzIHRoZSBleHBsaWNpdAordXNlIG9mIG1lbW9yeSBiYXJyaWVycyB1bm5lY2Vzc2FyeSwgdGhlcmUgYXJlIGEgY291cGxlIG9mIHNpdHVhdGlvbnMgd2hlcmUgdGhleQorbWlnaHQgYmUgbmVlZGVkOgorCisgKDEpIE9uIHNvbWUgc3lzdGVtcywgSS9PIHN0b3JlcyBhcmUgbm90IHN0cm9uZ2x5IG9yZGVyZWQgYWNyb3NzIGFsbCBDUFVzLCBhbmQKKyAgICAgc28gZm9yIF9hbGxfIGdlbmVyYWwgZHJpdmVycyBsb2NrcyBzaG91bGQgYmUgdXNlZCBhbmQgbW1pb3diKCkgbXVzdCBiZQorICAgICBpc3N1ZWQgcHJpb3IgdG8gdW5sb2NraW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uLgorCisgKDIpIElmIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gSS9PIG1lbW9yeSB3aW5kb3cgd2l0aAorICAgICByZWxheGVkIG1lbW9yeSBhY2Nlc3MgcHJvcGVydGllcywgdGhlbiBfbWFuZGF0b3J5XyBtZW1vcnkgYmFycmllcnMgYXJlCisgICAgIHJlcXVpcmVkIHRvIGVuZm9yY2Ugb3JkZXJpbmcuCisKK1NlZSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworSU5URVJSVVBUUworLS0tLS0tLS0tLQorCitBIGRyaXZlciBtYXkgYmUgaW50ZXJydXB0ZWQgYnkgaXRzIG93biBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLCBhbmQgdGh1cyB0aGUKK3R3byBwYXJ0cyBvZiB0aGUgZHJpdmVyIG1heSBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyJ3MgYXR0ZW1wdHMgdG8gY29udHJvbCBvcgorYWNjZXNzIHRoZSBkZXZpY2UuCisKK1RoaXMgbWF5IGJlIGFsbGV2aWF0ZWQgLSBhdCBsZWFzdCBpbiBwYXJ0IC0gYnkgZGlzYWJsaW5nIGxvY2FsIGludGVycnVwdHMgKGEKK2Zvcm0gb2YgbG9ja2luZyksIHN1Y2ggdGhhdCB0aGUgY3JpdGljYWwgb3BlcmF0aW9ucyBhcmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4KK3RoZSBpbnRlcnJ1cHQtZGlzYWJsZWQgc2VjdGlvbiBpbiB0aGUgZHJpdmVyLiAgV2hpbHN0IHRoZSBkcml2ZXIncyBpbnRlcnJ1cHQKK3JvdXRpbmUgaXMgZXhlY3V0aW5nLCB0aGUgZHJpdmVyJ3MgY29yZSBtYXkgbm90IHJ1biBvbiB0aGUgc2FtZSBDUFUsIGFuZCBpdHMKK2ludGVycnVwdCBpcyBub3QgcGVybWl0dGVkIHRvIGhhcHBlbiBhZ2FpbiB1bnRpbCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgaGFzIGJlZW4KK2hhbmRsZWQsIHRodXMgdGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgbm90IG5lZWQgdG8gbG9jayBhZ2FpbnN0IHRoYXQuCisKK0hvd2V2ZXIsIGNvbnNpZGVyIGEgZHJpdmVyIHRoYXQgd2FzIHRhbGtpbmcgdG8gYW4gZXRoZXJuZXQgY2FyZCB0aGF0IHNwb3J0cyBhbgorYWRkcmVzcyByZWdpc3RlciBhbmQgYSBkYXRhIHJlZ2lzdGVyLiAgSWYgdGhhdCBkcml2ZXIncyBjb3JlIHRhbGtzIHRvIHRoZSBjYXJkCit1bmRlciBpbnRlcnJ1cHQtZGlzYWJsZW1lbnQgYW5kIHRoZW4gdGhlIGRyaXZlcidzIGludGVycnVwdCBoYW5kbGVyIGlzIGludm9rZWQ6CisKKwlMT0NBTCBJUlEgRElTQUJMRQorCXdyaXRldyhBRERSLCAzKTsKKwl3cml0ZXcoREFUQSwgeSk7CisJTE9DQUwgSVJRIEVOQUJMRQorCTxpbnRlcnJ1cHQ+CisJd3JpdGV3KEFERFIsIDQpOworCXEgPSByZWFkdyhEQVRBKTsKKwk8L2ludGVycnVwdD4KKworVGhlIHN0b3JlIHRvIHRoZSBkYXRhIHJlZ2lzdGVyIG1pZ2h0IGhhcHBlbiBhZnRlciB0aGUgc2Vjb25kIHN0b3JlIHRvIHRoZQorYWRkcmVzcyByZWdpc3RlciBpZiBvcmRlcmluZyBydWxlcyBhcmUgc3VmZmljaWVudGx5IHJlbGF4ZWQ6CisKKwlTVE9SRSAqQUREUiA9IDMsIFNUT1JFICpBRERSID0gNCwgU1RPUkUgKkRBVEEgPSB5LCBxID0gTE9BRCAqREFUQQorCisKK0lmIG9yZGVyaW5nIHJ1bGVzIGFyZSByZWxheGVkLCBpdCBtdXN0IGJlIGFzc3VtZWQgdGhhdCBhY2Nlc3NlcyBkb25lIGluc2lkZSBhbgoraW50ZXJydXB0IGRpc2FibGVkIHNlY3Rpb24gbWF5IGxlYWsgb3V0c2lkZSBvZiBpdCBhbmQgbWF5IGludGVybGVhdmUgd2l0aAorYWNjZXNzZXMgcGVyZm9ybWVkIGluIGFuIGludGVycnVwdCAtIGFuZCB2aWNlIHZlcnNhIC0gdW5sZXNzIGltcGxpY2l0IG9yCitleHBsaWNpdCBiYXJyaWVycyBhcmUgdXNlZC4KKworTm9ybWFsbHkgdGhpcyB3b24ndCBiZSBhIHByb2JsZW0gYmVjYXVzZSB0aGUgSS9PIGFjY2Vzc2VzIGRvbmUgaW5zaWRlIHN1Y2gKK3NlY3Rpb25zIHdpbGwgaW5jbHVkZSBzeW5jaHJvbm91cyBsb2FkIG9wZXJhdGlvbnMgb24gc3RyaWN0bHkgb3JkZXJlZCBJL08KK3JlZ2lzdGVycyB0aGF0IGZvcm0gaW1wbGljaXQgSS9PIGJhcnJpZXJzLiBJZiB0aGlzIGlzbid0IHN1ZmZpY2llbnQgdGhlbiBhbgorbW1pb3diKCkgbWF5IG5lZWQgdG8gYmUgdXNlZCBleHBsaWNpdGx5LgorCisKK0Egc2ltaWxhciBzaXR1YXRpb24gbWF5IG9jY3VyIGJldHdlZW4gYW4gaW50ZXJydXB0IHJvdXRpbmUgYW5kIHR3byByb3V0aW5lcworcnVubmluZyBvbiBzZXBhcmF0ZSBDUFVzIHRoYXQgY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyLiBJZiBzdWNoIGEgY2FzZSBpcworbGlrZWx5LCB0aGVuIGludGVycnVwdC1kaXNhYmxpbmcgbG9ja3Mgc2hvdWxkIGJlIHVzZWQgdG8gZ3VhcmFudGVlIG9yZGVyaW5nLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitLRVJORUwgSS9PIEJBUlJJRVIgRUZGRUNUUworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBhY2Nlc3NpbmcgSS9PIG1lbW9yeSwgZHJpdmVycyBzaG91bGQgdXNlIHRoZSBhcHByb3ByaWF0ZSBhY2Nlc3NvcgorZnVuY3Rpb25zOgorCisgKCopIGluWCgpLCBvdXRYKCk6CisKKyAgICAgVGhlc2UgYXJlIGludGVuZGVkIHRvIHRhbGsgdG8gSS9PIHNwYWNlIHJhdGhlciB0aGFuIG1lbW9yeSBzcGFjZSwgYnV0CisgICAgIHRoYXQncyBwcmltYXJpbHkgYSBDUFUtc3BlY2lmaWMgY29uY2VwdC4gVGhlIGkzODYgYW5kIHg4Nl82NCBwcm9jZXNzb3JzIGRvCisgICAgIGluZGVlZCBoYXZlIHNwZWNpYWwgSS9PIHNwYWNlIGFjY2VzcyBjeWNsZXMgYW5kIGluc3RydWN0aW9ucywgYnV0IG1hbnkKKyAgICAgQ1BVcyBkb24ndCBoYXZlIHN1Y2ggYSBjb25jZXB0LgorCisgICAgIFRoZSBQQ0kgYnVzLCBhbW9uZ3N0IG90aGVycywgZGVmaW5lcyBhbiBJL08gc3BhY2UgY29uY2VwdCAtIHdoaWNoIG9uIHN1Y2gKKyAgICAgQ1BVcyBhcyBpMzg2IGFuZCB4ODZfNjQgY3B1cyByZWFkaWx5IG1hcHMgdG8gdGhlIENQVSdzIGNvbmNlcHQgb2YgSS9PCisgICAgIHNwYWNlLiAgSG93ZXZlciwgaXQgbWF5IGFsc28gbWFwcGVkIGFzIGEgdmlydHVhbCBJL08gc3BhY2UgaW4gdGhlIENQVSdzCisgICAgIG1lbW9yeSBtYXAsIHBhcnRpY3VsYXJseSBvbiB0aG9zZSBDUFVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBhbHRlcm5hdGUKKyAgICAgSS9PIHNwYWNlcy4KKworICAgICBBY2Nlc3NlcyB0byB0aGlzIHNwYWNlIG1heSBiZSBmdWxseSBzeW5jaHJvbm91cyAoYXMgb24gaTM4NiksIGJ1dAorICAgICBpbnRlcm1lZGlhcnkgYnJpZGdlcyAoc3VjaCBhcyB0aGUgUENJIGhvc3QgYnJpZGdlKSBtYXkgbm90IGZ1bGx5IGhvbm91cgorICAgICB0aGF0LgorCisgICAgIFRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gYmUgZnVsbHkgb3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4KKworICAgICBUaGV5IGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBvcmRlcmVkIHdpdGggcmVzcGVjdCB0byBvdGhlciB0eXBlcyBvZgorICAgICBtZW1vcnkgYW5kIEkvTyBvcGVyYXRpb24uCisKKyAoKikgcmVhZFgoKSwgd3JpdGVYKCk6CisKKyAgICAgV2hldGhlciB0aGVzZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBvcmRlcmVkIGFuZCB1bmNvbWJpbmVkIHdpdGgKKyAgICAgcmVzcGVjdCB0byBlYWNoIG90aGVyIG9uIHRoZSBpc3N1aW5nIENQVSBkZXBlbmRzIG9uIHRoZSBjaGFyYWN0ZXJpc3RpY3MKKyAgICAgZGVmaW5lZCBmb3IgdGhlIG1lbW9yeSB3aW5kb3cgdGhyb3VnaCB3aGljaCB0aGV5J3JlIGFjY2Vzc2luZy4gT24gbGF0ZXIKKyAgICAgaTM4NiBhcmNoaXRlY3R1cmUgbWFjaGluZXMsIGZvciBleGFtcGxlLCB0aGlzIGlzIGNvbnRyb2xsZWQgYnkgd2F5IG9mIHRoZQorICAgICBNVFJSIHJlZ2lzdGVycy4KKworICAgICBPcmRpbmFyaWx5LCB0aGVzZSB3aWxsIGJlIGd1YXJhbnRlZWQgdG8gYmUgZnVsbHkgb3JkZXJlZCBhbmQgdW5jb21iaW5lZCwsCisgICAgIHByb3ZpZGVkIHRoZXkncmUgbm90IGFjY2Vzc2luZyBhIHByZWZldGNoYWJsZSBkZXZpY2UuCisKKyAgICAgSG93ZXZlciwgaW50ZXJtZWRpYXJ5IGhhcmR3YXJlIChzdWNoIGFzIGEgUENJIGJyaWRnZSkgbWF5IGluZHVsZ2UgaW4KKyAgICAgZGVmZXJyYWwgaWYgaXQgc28gd2lzaGVzOyB0byBmbHVzaCBhIHN0b3JlLCBhIGxvYWQgZnJvbSB0aGUgc2FtZSBsb2NhdGlvbgorICAgICBpcyBwcmVmZXJyZWRbKl0sIGJ1dCBhIGxvYWQgZnJvbSB0aGUgc2FtZSBkZXZpY2Ugb3IgZnJvbSBjb25maWd1cmF0aW9uCisgICAgIHNwYWNlIHNob3VsZCBzdWZmaWNlIGZvciBQQ0kuCisKKyAgICAgWypdIE5PVEUhIGF0dGVtcHRpbmcgdG8gbG9hZCBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uIGFzIHdhcyB3cml0dGVuIHRvIG1heQorICAgICAJIGNhdXNlIGEgbWFsZnVuY3Rpb24gLSBjb25zaWRlciB0aGUgMTY1NTAgUngvVHggc2VyaWFsIHJlZ2lzdGVycyBmb3IKKyAgICAgCSBleGFtcGxlLgorCisgICAgIFVzZWQgd2l0aCBwcmVmZXRjaGFibGUgSS9PIG1lbW9yeSwgYW4gbW1pb3diKCkgYmFycmllciBtYXkgYmUgcmVxdWlyZWQgdG8KKyAgICAgZm9yY2Ugc3RvcmVzIHRvIGJlIG9yZGVyZWQuCisKKyAgICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBQQ0kgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpbnRlcmFjdGlvbnMKKyAgICAgYmV0d2VlbiBQQ0kgdHJhbnNhY3Rpb25zLgorCisgKCopIHJlYWRYX3JlbGF4ZWQoKQorCisgICAgIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHJlYWRYKCksIGJ1dCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgb3JkZXJlZCBpbiBhbnkKKyAgICAgd2F5LiBCZSBhd2FyZSB0aGF0IHRoZXJlIGlzIG5vIEkvTyByZWFkIGJhcnJpZXIgYXZhaWxhYmxlLgorCisgKCopIGlvcmVhZFgoKSwgaW93cml0ZVgoKQorCisgICAgIFRoZXNlIHdpbGwgcGVyZm9ybSBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHR5cGUgb2YgYWNjZXNzIHRoZXkncmUgYWN0dWFsbHkKKyAgICAgZG9pbmcsIGJlIGl0IGluWCgpL291dFgoKSBvciByZWFkWCgpL3dyaXRlWCgpLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0FTU1VNRUQgTUlOSU1VTSBFWEVDVVRJT04gT1JERVJJTkcgTU9ERUwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSXQgaGFzIHRvIGJlIGFzc3VtZWQgdGhhdCB0aGUgY29uY2VwdHVhbCBDUFUgaXMgd2Vha2x5LW9yZGVyZWQgYnV0IHRoYXQgaXQgd2lsbAorbWFpbnRhaW4gdGhlIGFwcGVhcmFuY2Ugb2YgcHJvZ3JhbSBjYXVzYWxpdHkgd2l0aCByZXNwZWN0IHRvIGl0c2VsZi4gIFNvbWUgQ1BVcworKHN1Y2ggYXMgaTM4NiBvciB4ODZfNjQpIGFyZSBtb3JlIGNvbnN0cmFpbmVkIHRoYW4gb3RoZXJzIChzdWNoIGFzIHBvd2VycGMgb3IKK2ZydiksIGFuZCBzbyB0aGUgbW9zdCByZWxheGVkIGNhc2UgKG5hbWVseSBERUMgQWxwaGEpIG11c3QgYmUgYXNzdW1lZCBvdXRzaWRlCitvZiBhcmNoLXNwZWNpZmljIGNvZGUuCisKK1RoaXMgbWVhbnMgdGhhdCBpdCBtdXN0IGJlIGNvbnNpZGVyZWQgdGhhdCB0aGUgQ1BVIHdpbGwgZXhlY3V0ZSBpdHMgaW5zdHJ1Y3Rpb24KK3N0cmVhbSBpbiBhbnkgb3JkZXIgaXQgZmVlbHMgbGlrZSAtIG9yIGV2ZW4gaW4gcGFyYWxsZWwgLSBwcm92aWRlZCB0aGF0IGlmIGFuCitpbnN0cnVjdGlvbiBpbiB0aGUgc3RyZWFtIGRlcGVuZHMgb24gdGhlIGFuIGVhcmxpZXIgaW5zdHJ1Y3Rpb24sIHRoZW4gdGhhdAorZWFybGllciBpbnN0cnVjdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBjb21wbGV0ZVsqXSBiZWZvcmUgdGhlIGxhdGVyCitpbnN0cnVjdGlvbiBtYXkgcHJvY2VlZDsgaW4gb3RoZXIgd29yZHM6IHByb3ZpZGVkIHRoYXQgdGhlIGFwcGVhcmFuY2Ugb2YKK2NhdXNhbGl0eSBpcyBtYWludGFpbmVkLgorCisgWypdIFNvbWUgaW5zdHJ1Y3Rpb25zIGhhdmUgbW9yZSB0aGFuIG9uZSBlZmZlY3QgLSBzdWNoIGFzIGNoYW5naW5nIHRoZQorICAgICBjb25kaXRpb24gY29kZXMsIGNoYW5naW5nIHJlZ2lzdGVycyBvciBjaGFuZ2luZyBtZW1vcnkgLSBhbmQgZGlmZmVyZW50CisgICAgIGluc3RydWN0aW9ucyBtYXkgZGVwZW5kIG9uIGRpZmZlcmVudCBlZmZlY3RzLgorCitBIENQVSBtYXkgYWxzbyBkaXNjYXJkIGFueSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB0aGF0IHdpbmRzIHVwIGhhdmluZyBubwordWx0aW1hdGUgZWZmZWN0LiAgRm9yIGV4YW1wbGUsIGlmIHR3byBhZGphY2VudCBpbnN0cnVjdGlvbnMgYm90aCBsb2FkIGFuCitpbW1lZGlhdGUgdmFsdWUgaW50byB0aGUgc2FtZSByZWdpc3RlciwgdGhlIGZpcnN0IG1heSBiZSBkaXNjYXJkZWQuCisKKworU2ltaWxhcmx5LCBpdCBoYXMgdG8gYmUgYXNzdW1lZCB0aGF0IGNvbXBpbGVyIG1pZ2h0IHJlb3JkZXIgdGhlIGluc3RydWN0aW9uCitzdHJlYW0gaW4gYW55IHdheSBpdCBzZWVzIGZpdCwgYWdhaW4gcHJvdmlkZWQgdGhlIGFwcGVhcmFuY2Ugb2YgY2F1c2FsaXR5IGlzCittYWludGFpbmVkLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RIRSBFRkZFQ1RTIE9GIFRIRSBDUFUgQ0FDSEUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHdheSBjYWNoZWQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIHBlcmNlaXZlZCBhY3Jvc3MgdGhlIHN5c3RlbSBpcyBhZmZlY3RlZCB0bworYSBjZXJ0YWluIGV4dGVudCBieSB0aGUgY2FjaGVzIHRoYXQgbGllIGJldHdlZW4gQ1BVcyBhbmQgbWVtb3J5LCBhbmQgYnkgdGhlCittZW1vcnkgY29oZXJlbmNlIHN5c3RlbSB0aGF0IG1haW50YWlucyB0aGUgY29uc2lzdGVuY3kgb2Ygc3RhdGUgaW4gdGhlIHN5c3RlbS4KKworQXMgZmFyIGFzIHRoZSB3YXkgYSBDUFUgaW50ZXJhY3RzIHdpdGggYW5vdGhlciBwYXJ0IG9mIHRoZSBzeXN0ZW0gdGhyb3VnaCB0aGUKK2NhY2hlcyBnb2VzLCB0aGUgbWVtb3J5IHN5c3RlbSBoYXMgdG8gaW5jbHVkZSB0aGUgQ1BVJ3MgY2FjaGVzLCBhbmQgbWVtb3J5CitiYXJyaWVycyBmb3IgdGhlIG1vc3QgcGFydCBhY3QgYXQgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBDUFUgYW5kIGl0cyBjYWNoZQorKG1lbW9yeSBiYXJyaWVycyBsb2dpY2FsbHkgYWN0IG9uIHRoZSBkb3R0ZWQgbGluZSBpbiB0aGUgZm9sbG93aW5nIGRpYWdyYW0pOgorCisJICAgIDwtLS0gQ1BVIC0tLT4gICAgICAgICA6ICAgICAgIDwtLS0tLS0tLS0tLSBNZW1vcnkgLS0tLS0tLS0tLS0+CisJICAgICAgICAgICAgICAgICAgICAgICAgICA6CisJKy0tLS0tLS0tKyAgICArLS0tLS0tLS0rICA6ICAgKy0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0rCisJfCAgICAgICAgfCAgICB8ICAgICAgICB8ICA6ICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICB8ICAgICstLS0tLS0tLSsKKwl8ICBDUFUgICB8ICAgIHwgTWVtb3J5IHwgIDogICB8IENQVSAgICB8ICAgIHwgICAgICAgICAgIHwgICAgfAkgICAgICB8CisJfCAgQ29yZSAgfC0tLT58IEFjY2VzcyB8LS0tLS0+fCBDYWNoZSAgfDwtLT58ICAgICAgICAgICB8ICAgIHwJICAgICAgfAorCXwgICAgICAgIHwgICAgfCBRdWV1ZSAgfCAgOiAgIHwgICAgICAgIHwgICAgfCAgICAgICAgICAgfC0tLT58IE1lbW9yeSB8CisJfCAgICAgICAgfCAgICB8ICAgICAgICB8ICA6ICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICB8ICAgIHwJICAgICAgfAorCSstLS0tLS0tLSsgICAgKy0tLS0tLS0tKyAgOiAgICstLS0tLS0tLSsgICAgfCAgICAgICAgICAgfCAgICB8IAkgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICB8IENhY2hlICAgICB8ICAgICstLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgIHwgQ29oZXJlbmN5IHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgIHwgTWVjaGFuaXNtIHwgICAgKy0tLS0tLS0tKworCSstLS0tLS0tLSsgICAgKy0tLS0tLS0tKyAgOiAgICstLS0tLS0tLSsgICAgfCAgICAgICAgICAgfCAgICB8CSAgICAgIHwKKwl8ICAgICAgICB8ICAgIHwgICAgICAgIHwgIDogICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgIHwgICAgfCAgICAgICAgfAorCXwgIENQVSAgIHwgICAgfCBNZW1vcnkgfCAgOiAgIHwgQ1BVICAgIHwgICAgfCAgICAgICAgICAgfC0tLT58IERldmljZSB8CisJfCAgQ29yZSAgfC0tLT58IEFjY2VzcyB8LS0tLS0+fCBDYWNoZSAgfDwtLT58ICAgICAgICAgICB8ICAgIHwgCSAgICAgIHwKKwl8ICAgICAgICB8ICAgIHwgUXVldWUgIHwgIDogICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgIHwgICAgfCAJICAgICAgfAorCXwgICAgICAgIHwgICAgfCAgICAgICAgfCAgOiAgIHwgICAgICAgIHwgICAgfCAgICAgICAgICAgfCAgICArLS0tLS0tLS0rCisJKy0tLS0tLS0tKyAgICArLS0tLS0tLS0rICA6ICAgKy0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICA6CisJICAgICAgICAgICAgICAgICAgICAgICAgICA6CisKK0FsdGhvdWdoIGFueSBwYXJ0aWN1bGFyIGxvYWQgb3Igc3RvcmUgbWF5IG5vdCBhY3R1YWxseSBhcHBlYXIgb3V0c2lkZSBvZiB0aGUKK0NQVSB0aGF0IGlzc3VlZCBpdCBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIHNhdGlzZmllZCB3aXRoaW4gdGhlIENQVSdzIG93biBjYWNoZSwKK2l0IHdpbGwgc3RpbGwgYXBwZWFyIGFzIGlmIHRoZSBmdWxsIG1lbW9yeSBhY2Nlc3MgaGFkIHRha2VuIHBsYWNlIGFzIGZhciBhcyB0aGUKK290aGVyIENQVXMgYXJlIGNvbmNlcm5lZCBzaW5jZSB0aGUgY2FjaGUgY29oZXJlbmN5IG1lY2hhbmlzbXMgd2lsbCBtaWdyYXRlIHRoZQorY2FjaGVsaW5lIG92ZXIgdG8gdGhlIGFjY2Vzc2luZyBDUFUgYW5kIHByb3BhZ2F0ZSB0aGUgZWZmZWN0cyB1cG9uIGNvbmZsaWN0LgorCitUaGUgQ1BVIGNvcmUgbWF5IGV4ZWN1dGUgaW5zdHJ1Y3Rpb25zIGluIGFueSBvcmRlciBpdCBkZWVtcyBmaXQsIHByb3ZpZGVkIHRoZQorZXhwZWN0ZWQgcHJvZ3JhbSBjYXVzYWxpdHkgYXBwZWFycyB0byBiZSBtYWludGFpbmVkLiAgU29tZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zCitnZW5lcmF0ZSBsb2FkIGFuZCBzdG9yZSBvcGVyYXRpb25zIHdoaWNoIHRoZW4gZ28gaW50byB0aGUgcXVldWUgb2YgbWVtb3J5CithY2Nlc3NlcyB0byBiZSBwZXJmb3JtZWQuICBUaGUgY29yZSBtYXkgcGxhY2UgdGhlc2UgaW4gdGhlIHF1ZXVlIGluIGFueSBvcmRlcgoraXQgd2lzaGVzLCBhbmQgY29udGludWUgZXhlY3V0aW9uIHVudGlsIGl0IGlzIGZvcmNlZCB0byB3YWl0IGZvciBhbiBpbnN0cnVjdGlvbgordG8gY29tcGxldGUuCisKK1doYXQgbWVtb3J5IGJhcnJpZXJzIGFyZSBjb25jZXJuZWQgd2l0aCBpcyBjb250cm9sbGluZyB0aGUgb3JkZXIgaW4gd2hpY2gKK2FjY2Vzc2VzIGNyb3NzIGZyb20gdGhlIENQVSBzaWRlIG9mIHRoaW5ncyB0byB0aGUgbWVtb3J5IHNpZGUgb2YgdGhpbmdzLCBhbmQKK3RoZSBvcmRlciBpbiB3aGljaCB0aGUgZWZmZWN0cyBhcmUgcGVyY2VpdmVkIHRvIGhhcHBlbiBieSB0aGUgb3RoZXIgb2JzZXJ2ZXJzCitpbiB0aGUgc3lzdGVtLgorCitbIV0gTWVtb3J5IGJhcnJpZXJzIGFyZSBfbm90XyBuZWVkZWQgd2l0aGluIGEgZ2l2ZW4gQ1BVLCBhcyBDUFVzIGFsd2F5cyBzZWUKK3RoZWlyIG93biBsb2FkcyBhbmQgc3RvcmVzIGFzIGlmIHRoZXkgaGFkIGhhcHBlbmVkIGluIHByb2dyYW0gb3JkZXIuCisKK1shXSBNTUlPIG9yIG90aGVyIGRldmljZSBhY2Nlc3NlcyBtYXkgYnlwYXNzIHRoZSBjYWNoZSBzeXN0ZW0uICBUaGlzIGRlcGVuZHMgb24KK3RoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtZW1vcnkgd2luZG93IHRocm91Z2ggd2hpY2ggZGV2aWNlcyBhcmUgYWNjZXNzZWQgYW5kL29yCit0aGUgdXNlIG9mIGFueSBzcGVjaWFsIGRldmljZSBjb21tdW5pY2F0aW9uIGluc3RydWN0aW9ucyB0aGUgQ1BVIG1heSBoYXZlLgorCisKK0NBQ0hFIENPSEVSRU5DWQorLS0tLS0tLS0tLS0tLS0tCisKK0xpZmUgaXNuJ3QgcXVpdGUgYXMgc2ltcGxlIGFzIGl0IG1heSBhcHBlYXIgYWJvdmUsIGhvd2V2ZXI6IGZvciB3aGlsZSB0aGUKK2NhY2hlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgY29oZXJlbnQsIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgdGhhdCBjb2hlcmVuY3kKK3dpbGwgYmUgb3JkZXJlZC4gIFRoaXMgbWVhbnMgdGhhdCB3aGlsc3QgY2hhbmdlcyBtYWRlIG9uIG9uZSBDUFUgd2lsbAorZXZlbnR1YWxseSBiZWNvbWUgdmlzaWJsZSBvbiBhbGwgQ1BVcywgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB0aGV5IHdpbGwKK2JlY29tZSBhcHBhcmVudCBpbiB0aGUgc2FtZSBvcmRlciBvbiB0aG9zZSBvdGhlciBDUFVzLgorCisKK0NvbnNpZGVyIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGhhcyBwYWlyIG9mIENQVXMgKDEgJiAyKSwgZWFjaCBvZiB3aGljaCBoYXMKK2EgcGFpciBvZiBwYXJhbGxlbCBkYXRhIGNhY2hlcyAoQ1BVIDEgaGFzIEEvQiwgYW5kIENQVSAyIGhhcyBDL0QpOgorCisJICAgICAgICAgICAgOgorCSAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLSsKKwkgICAgICAgICAgICA6ICAgICAgKy0tLS0tLS0tLSsgICAgICAgICB8ICAgICAgICB8CisJKy0tLS0tLS0tKyAgOiArLS0tPnwgQ2FjaGUgQSB8PC0tLS0tLS0+fCAgICAgICAgfAorCXwgICAgICAgIHwgIDogfCAgICArLS0tLS0tLS0tKyAgICAgICAgIHwgICAgICAgIHwKKwl8ICBDUFUgMSB8PC0tLSsgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisJfCAgICAgICAgfCAgOiB8ICAgICstLS0tLS0tLS0rICAgICAgICAgfCAgICAgICAgfAorCSstLS0tLS0tLSsgIDogKy0tLT58IENhY2hlIEIgfDwtLS0tLS0tPnwgICAgICAgIHwKKwkgICAgICAgICAgICA6ICAgICAgKy0tLS0tLS0tLSsgICAgICAgICB8ICAgICAgICB8CisJICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZW1vcnkgfAorCSAgICAgICAgICAgIDogICAgICArLS0tLS0tLS0tKyAgICAgICAgIHwgU3lzdGVtIHwKKwkrLS0tLS0tLS0rICA6ICstLS0+fCBDYWNoZSBDIHw8LS0tLS0tLT58ICAgICAgICB8CisJfCAgICAgICAgfCAgOiB8ICAgICstLS0tLS0tLS0rICAgICAgICAgfCAgICAgICAgfAorCXwgIENQVSAyIHw8LS0tKyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKwl8ICAgICAgICB8ICA6IHwgICAgKy0tLS0tLS0tLSsgICAgICAgICB8ICAgICAgICB8CisJKy0tLS0tLS0tKyAgOiArLS0tPnwgQ2FjaGUgRCB8PC0tLS0tLS0+fCAgICAgICAgfAorCSAgICAgICAgICAgIDogICAgICArLS0tLS0tLS0tKyAgICAgICAgIHwgICAgICAgIHwKKwkgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0rCisJICAgICAgICAgICAgOgorCitJbWFnaW5lIHRoZSBzeXN0ZW0gaGFzIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKworICgqKSBhbiBvZGQtbnVtYmVyZWQgY2FjaGUgbGluZSBtYXkgYmUgaW4gY2FjaGUgQSwgY2FjaGUgQyBvciBpdCBtYXkgc3RpbGwgYmUKKyAgICAgcmVzaWRlbnQgaW4gbWVtb3J5OworCisgKCopIGFuIGV2ZW4tbnVtYmVyZWQgY2FjaGUgbGluZSBtYXkgYmUgaW4gY2FjaGUgQiwgY2FjaGUgRCBvciBpdCBtYXkgc3RpbGwgYmUKKyAgICAgcmVzaWRlbnQgaW4gbWVtb3J5OworCisgKCopIHdoaWxzdCB0aGUgQ1BVIGNvcmUgaXMgaW50ZXJyb2dhdGluZyBvbmUgY2FjaGUsIHRoZSBvdGhlciBjYWNoZSBtYXkgYmUKKyAgICAgbWFraW5nIHVzZSBvZiB0aGUgYnVzIHRvIGFjY2VzcyB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIC0gcGVyaGFwcyB0bworICAgICBkaXNwbGFjZSBhIGRpcnR5IGNhY2hlbGluZSBvciB0byBkbyBhIHNwZWN1bGF0aXZlIGxvYWQ7CisKKyAoKikgZWFjaCBjYWNoZSBoYXMgYSBxdWV1ZSBvZiBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoYXQgY2FjaGUKKyAgICAgdG8gbWFpbnRhaW4gY29oZXJlbmN5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbTsKKworICgqKSB0aGUgY29oZXJlbmN5IHF1ZXVlIGlzIG5vdCBmbHVzaGVkIGJ5IG5vcm1hbCBsb2FkcyB0byBsaW5lcyBhbHJlYWR5CisgICAgIHByZXNlbnQgaW4gdGhlIGNhY2hlLCBldmVuIHRob3VnaCB0aGUgY29udGVudHMgb2YgdGhlIHF1ZXVlIG1heQorICAgICBwb3RlbnRpYWxseSBlZmZlY3QgdGhvc2UgbG9hZHMuCisKK0ltYWdpbmUsIHRoZW4sIHRoYXQgdHdvIHdyaXRlcyBhcmUgbWFkZSBvbiB0aGUgZmlyc3QgQ1BVLCB3aXRoIGEgd3JpdGUgYmFycmllcgorYmV0d2VlbiB0aGVtIHRvIGd1YXJhbnRlZSB0aGF0IHRoZXkgd2lsbCBhcHBlYXIgdG8gcmVhY2ggdGhhdCBDUFUncyBjYWNoZXMgaW4KK3RoZSByZXF1aXNpdGUgb3JkZXI6CisKKwlDUFUgMQkJQ1BVIDIJCUNPTU1FTlQKKwk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQl1ID09IDAsIHYgPT0gMSBhbmQgcCA9PSAmdSwgcSA9PSAmdQorCXYgPSAyOworCXNtcF93bWIoKTsJCQlNYWtlIHN1cmUgY2hhbmdlIHRvIHYgdmlzaWJsZSBiZWZvcmUKKwkJCQkJIGNoYW5nZSB0byBwCisJPEE6bW9kaWZ5IHY9Mj4JCQl2IGlzIG5vdyBpbiBjYWNoZSBBIGV4Y2x1c2l2ZWx5CisJcCA9ICZ2OworCTxCOm1vZGlmeSBwPSZ2PgkJCXAgaXMgbm93IGluIGNhY2hlIEIgZXhjbHVzaXZlbHkKKworVGhlIHdyaXRlIG1lbW9yeSBiYXJyaWVyIGZvcmNlcyB0aGUgb3RoZXIgQ1BVcyBpbiB0aGUgc3lzdGVtIHRvIHBlcmNlaXZlIHRoYXQKK3RoZSBsb2NhbCBDUFUncyBjYWNoZXMgaGF2ZSBhcHBhcmVudGx5IGJlZW4gdXBkYXRlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gIEJ1dAorbm93IGltYWdpbmUgdGhhdCB0aGUgc2Vjb25kIENQVSB0aGF0IHdhbnRzIHRvIHJlYWQgdGhvc2UgdmFsdWVzOgorCisJQ1BVIDEJCUNQVSAyCQlDT01NRU5UCisJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkuLi4KKwkJCXEgPSBwOworCQkJeCA9ICpxOworCitUaGUgYWJvdmUgcGFpciBvZiByZWFkcyBtYXkgdGhlbiBmYWlsIHRvIGhhcHBlbiBpbiBleHBlY3RlZCBvcmRlciwgYXMgdGhlCitjYWNoZWxpbmUgaG9sZGluZyBwIG1heSBnZXQgdXBkYXRlZCBpbiBvbmUgb2YgdGhlIHNlY29uZCBDUFUncyBjYWNoZXMgd2hpbHN0Cit0aGUgdXBkYXRlIHRvIHRoZSBjYWNoZWxpbmUgaG9sZGluZyB2IGlzIGRlbGF5ZWQgaW4gdGhlIG90aGVyIG9mIHRoZSBzZWNvbmQKK0NQVSdzIGNhY2hlcyBieSBzb21lIG90aGVyIGNhY2hlIGV2ZW50OgorCisJQ1BVIDEJCUNQVSAyCQlDT01NRU5UCisJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJdSA9PSAwLCB2ID09IDEgYW5kIHAgPT0gJnUsIHEgPT0gJnUKKwl2ID0gMjsKKwlzbXBfd21iKCk7CisJPEE6bW9kaWZ5IHY9Mj4JPEM6YnVzeT4KKwkJCTxDOnF1ZXVlIHY9Mj4KKwlwID0gJnY7CQlxID0gcDsKKwkJCTxEOnJlcXVlc3QgcD4KKwk8Qjptb2RpZnkgcD0mdj4JPEQ6Y29tbWl0IHA9JnY+CisJCSAgCTxEOnJlYWQgcD4KKwkJCXggPSAqcTsKKwkJCTxDOnJlYWQgKnE+CVJlYWRzIGZyb20gdiBiZWZvcmUgdiB1cGRhdGVkIGluIGNhY2hlCisJCQk8Qzp1bmJ1c3k+CisJCQk8Qzpjb21taXQgdj0yPgorCitCYXNpY2FsbHksIHdoaWxzdCBib3RoIGNhY2hlbGluZXMgd2lsbCBiZSB1cGRhdGVkIG9uIENQVSAyIGV2ZW50dWFsbHksIHRoZXJlJ3MKK25vIGd1YXJhbnRlZSB0aGF0LCB3aXRob3V0IGludGVydmVudGlvbiwgdGhlIG9yZGVyIG9mIHVwZGF0ZSB3aWxsIGJlIHRoZSBzYW1lCithcyB0aGF0IGNvbW1pdHRlZCBvbiBDUFUgMS4KKworCitUbyBpbnRlcnZlbmUsIHdlIG5lZWQgdG8gaW50ZXJwb2xhdGUgYSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciBvciBhIHJlYWQKK2JhcnJpZXIgYmV0d2VlbiB0aGUgbG9hZHMuICBUaGlzIHdpbGwgZm9yY2UgdGhlIGNhY2hlIHRvIGNvbW1pdCBpdHMgY29oZXJlbmN5CitxdWV1ZSBiZWZvcmUgcHJvY2Vzc2luZyBhbnkgZnVydGhlciByZXF1ZXN0czoKKworCUNQVSAxCQlDUFUgMgkJQ09NTUVOVAorCT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCXUgPT0gMCwgdiA9PSAxIGFuZCBwID09ICZ1LCBxID09ICZ1CisJdiA9IDI7CisJc21wX3dtYigpOworCTxBOm1vZGlmeSB2PTI+CTxDOmJ1c3k+CisJCQk8QzpxdWV1ZSB2PTI+CisJcCA9ICZiOwkJcSA9IHA7CisJCQk8RDpyZXF1ZXN0IHA+CisJPEI6bW9kaWZ5IHA9JnY+CTxEOmNvbW1pdCBwPSZ2PgorCQkgIAk8RDpyZWFkIHA+CisJCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorCQkJPEM6dW5idXN5PgorCQkJPEM6Y29tbWl0IHY9Mj4KKwkJCXggPSAqcTsKKwkJCTxDOnJlYWQgKnE+CVJlYWRzIGZyb20gdiBhZnRlciB2IHVwZGF0ZWQgaW4gY2FjaGUKKworCitUaGlzIHNvcnQgb2YgcHJvYmxlbSBjYW4gYmUgZW5jb3VudGVyZWQgb24gREVDIEFscGhhIHByb2Nlc3NvcnMgYXMgdGhleSBoYXZlIGEKK3NwbGl0IGNhY2hlIHRoYXQgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYnkgbWFraW5nIGJldHRlciB1c2Ugb2YgdGhlIGRhdGEgYnVzLgorV2hpbHN0IG1vc3QgQ1BVcyBkbyBpbXBseSBhIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyIG9uIHRoZSByZWFkIHdoZW4gYSBtZW1vcnkKK2FjY2VzcyBkZXBlbmRzIG9uIGEgcmVhZCwgbm90IGFsbCBkbywgc28gaXQgbWF5IG5vdCBiZSByZWxpZWQgb24uCisKK090aGVyIENQVXMgbWF5IGFsc28gaGF2ZSBzcGxpdCBjYWNoZXMsIGJ1dCBtdXN0IGNvb3JkaW5hdGUgYmV0d2VlbiB0aGUgdmFyaW91cworY2FjaGVsZXRzIGZvciBub3JtYWwgbWVtb3J5IGFjY2Vzc3MuICBUaGUgc2VtYW50aWNzIG9mIHRoZSBBbHBoYSByZW1vdmVzIHRoZQorbmVlZCBmb3IgY29vcmRpbmF0aW9uIGluIGFic2VuY2Ugb2YgbWVtb3J5IGJhcnJpZXJzLgorCisKK0NBQ0hFIENPSEVSRU5DWSBWUyBETUEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90IGFsbCBzeXN0ZW1zIG1haW50YWluIGNhY2hlIGNvaGVyZW5jeSB3aXRoIHJlc3BlY3QgdG8gZGV2aWNlcyBkb2luZyBETUEuICBJbgorc3VjaCBjYXNlcywgYSBkZXZpY2UgYXR0ZW1wdGluZyBETUEgbWF5IG9idGFpbiBzdGFsZSBkYXRhIGZyb20gUkFNIGJlY2F1c2UKK2RpcnR5IGNhY2hlIGxpbmVzIG1heSBiZSByZXNpZGVudCBpbiB0aGUgY2FjaGVzIG9mIHZhcmlvdXMgQ1BVcywgYW5kIG1heSBub3QKK2hhdmUgYmVlbiB3cml0dGVuIGJhY2sgdG8gUkFNIHlldC4gIFRvIGRlYWwgd2l0aCB0aGlzLCB0aGUgYXBwcm9wcmlhdGUgcGFydCBvZgordGhlIGtlcm5lbCBtdXN0IGZsdXNoIHRoZSBvdmVybGFwcGluZyBiaXRzIG9mIGNhY2hlIG9uIGVhY2ggQ1BVIChhbmQgbWF5YmUKK2ludmFsaWRhdGUgdGhlbSBhcyB3ZWxsKS4KKworSW4gYWRkaXRpb24sIHRoZSBkYXRhIERNQSdkIHRvIFJBTSBieSBhIGRldmljZSBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgZGlydHkKK2NhY2hlIGxpbmVzIGJlaW5nIHdyaXR0ZW4gYmFjayB0byBSQU0gZnJvbSBhIENQVSdzIGNhY2hlIGFmdGVyIHRoZSBkZXZpY2UgaGFzCitpbnN0YWxsZWQgaXRzIG93biBkYXRhLCBvciBjYWNoZSBsaW5lcyBzaW1wbHkgcHJlc2VudCBpbiBhIENQVXMgY2FjaGUgbWF5CitzaW1wbHkgb2JzY3VyZSB0aGUgZmFjdCB0aGF0IFJBTSBoYXMgYmVlbiB1cGRhdGVkLCB1bnRpbCBhdCBzdWNoIHRpbWUgYXMgdGhlCitjYWNoZWxpbmUgaXMgZGlzY2FyZGVkIGZyb20gdGhlIENQVSdzIGNhY2hlIGFuZCByZWxvYWRlZC4gIFRvIGRlYWwgd2l0aCB0aGlzLAordGhlIGFwcHJvcHJpYXRlIHBhcnQgb2YgdGhlIGtlcm5lbCBtdXN0IGludmFsaWRhdGUgdGhlIG92ZXJsYXBwaW5nIGJpdHMgb2YgdGhlCitjYWNoZSBvbiBlYWNoIENQVS4KKworU2VlIERvY3VtZW50YXRpb24vY2FjaGV0bGIudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNhY2hlIG1hbmFnZW1lbnQuCisKKworQ0FDSEUgQ09IRVJFTkNZIFZTIE1NSU8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01lbW9yeSBtYXBwZWQgSS9PIHVzdWFsbHkgdGFrZXMgcGxhY2UgdGhyb3VnaCBtZW1vcnkgbG9jYXRpb25zIHRoYXQgYXJlIHBhcnQgb2YKK2Egd2luZG93IGluIHRoZSBDUFUncyBtZW1vcnkgc3BhY2UgdGhhdCBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGFzc2lnbmVkIHRoYW4KK3RoZSB1c3VhbCBSQU0gZGlyZWN0ZWQgd2luZG93LgorCitBbW9uZ3N0IHRoZXNlIHByb3BlcnRpZXMgaXMgdXN1YWxseSB0aGUgZmFjdCB0aGF0IHN1Y2ggYWNjZXNzZXMgYnlwYXNzIHRoZQorY2FjaGluZyBlbnRpcmVseSBhbmQgZ28gZGlyZWN0bHkgdG8gdGhlIGRldmljZSBidXNlcy4gIFRoaXMgbWVhbnMgTU1JTyBhY2Nlc3NlcworbWF5LCBpbiBlZmZlY3QsIG92ZXJ0YWtlIGFjY2Vzc2VzIHRvIGNhY2hlZCBtZW1vcnkgdGhhdCB3ZXJlIGVtaXR0ZWQgZWFybGllci4KK0EgbWVtb3J5IGJhcnJpZXIgaXNuJ3Qgc3VmZmljaWVudCBpbiBzdWNoIGEgY2FzZSwgYnV0IHJhdGhlciB0aGUgY2FjaGUgbXVzdCBiZQorZmx1c2hlZCBiZXR3ZWVuIHRoZSBjYWNoZWQgbWVtb3J5IHdyaXRlIGFuZCB0aGUgTU1JTyBhY2Nlc3MgaWYgdGhlIHR3byBhcmUgaW4KK2FueSB3YXkgZGVwZW5kZW50LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT0KK1RIRSBUSElOR1MgQ1BVUyBHRVQgVVAgVE8KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSBwcm9ncmFtbWVyIG1pZ2h0IHRha2UgaXQgZm9yIGdyYW50ZWQgdGhhdCB0aGUgQ1BVIHdpbGwgcGVyZm9ybSBtZW1vcnkKK29wZXJhdGlvbnMgaW4gZXhhY3RseSB0aGUgb3JkZXIgc3BlY2lmaWVkLCBzbyB0aGF0IGlmIGEgQ1BVIGlzLCBmb3IgZXhhbXBsZSwKK2dpdmVuIHRoZSBmb2xsb3dpbmcgcGllY2Ugb2YgY29kZSB0byBleGVjdXRlOgorCisJYSA9ICpBOworCSpCID0gYjsKKwljID0gKkM7CisJZCA9ICpEOworCSpFID0gZTsKKworVGhleSB3b3VsZCB0aGVuIGV4cGVjdCB0aGF0IHRoZSBDUFUgd2lsbCBjb21wbGV0ZSB0aGUgbWVtb3J5IG9wZXJhdGlvbiBmb3IgZWFjaAoraW5zdHJ1Y3Rpb24gYmVmb3JlIG1vdmluZyBvbiB0byB0aGUgbmV4dCBvbmUsIGxlYWRpbmcgdG8gYSBkZWZpbml0ZSBzZXF1ZW5jZSBvZgorb3BlcmF0aW9ucyBhcyBzZWVuIGJ5IGV4dGVybmFsIG9ic2VydmVycyBpbiB0aGUgc3lzdGVtOgorCisJTE9BRCAqQSwgU1RPUkUgKkIsIExPQUQgKkMsIExPQUQgKkQsIFNUT1JFICpFLgorCisKK1JlYWxpdHkgaXMsIG9mIGNvdXJzZSwgbXVjaCBtZXNzaWVyLiAgV2l0aCBtYW55IENQVXMgYW5kIGNvbXBpbGVycywgdGhlIGFib3ZlCithc3N1bXB0aW9uIGRvZXNuJ3QgaG9sZCBiZWNhdXNlOgorCisgKCopIGxvYWRzIGFyZSBtb3JlIGxpa2VseSB0byBuZWVkIHRvIGJlIGNvbXBsZXRlZCBpbW1lZGlhdGVseSB0byBwZXJtaXQKKyAgICAgZXhlY3V0aW9uIHByb2dyZXNzLCB3aGVyZWFzIHN0b3JlcyBjYW4gb2Z0ZW4gYmUgZGVmZXJyZWQgd2l0aG91dCBhCisgICAgIHByb2JsZW07CisKKyAoKikgbG9hZHMgbWF5IGJlIGRvbmUgc3BlY3VsYXRpdmVseSwgYW5kIHRoZSByZXN1bHQgZGlzY2FyZGVkIHNob3VsZCBpdCBwcm92ZQorICAgICB0byBoYXZlIGJlZW4gdW5uZWNlc3Nhcnk7CisKKyAoKikgbG9hZHMgbWF5IGJlIGRvbmUgc3BlY3VsYXRpdmVseSwgbGVhZGluZyB0byB0aGUgcmVzdWx0IGhhdmluZyBiZWluZworICAgICBmZXRjaGVkIGF0IHRoZSB3cm9uZyB0aW1lIGluIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBvZiBldmVudHM7CisKKyAoKikgdGhlIG9yZGVyIG9mIHRoZSBtZW1vcnkgYWNjZXNzZXMgbWF5IGJlIHJlYXJyYW5nZWQgdG8gcHJvbW90ZSBiZXR0ZXIgdXNlCisgICAgIG9mIHRoZSBDUFUgYnVzZXMgYW5kIGNhY2hlczsKKworICgqKSBsb2FkcyBhbmQgc3RvcmVzIG1heSBiZSBjb21iaW5lZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIHdoZW4gdGFsa2luZyB0bworICAgICBtZW1vcnkgb3IgSS9PIGhhcmR3YXJlIHRoYXQgY2FuIGRvIGJhdGNoZWQgYWNjZXNzZXMgb2YgYWRqYWNlbnQgbG9jYXRpb25zLAorICAgICB0aHVzIGN1dHRpbmcgZG93biBvbiB0cmFuc2FjdGlvbiBzZXR1cCBjb3N0cyAobWVtb3J5IGFuZCBQQ0kgZGV2aWNlcyBtYXkKKyAgICAgYm90aCBiZSBhYmxlIHRvIGRvIHRoaXMpOyBhbmQKKworICgqKSB0aGUgQ1BVJ3MgZGF0YSBjYWNoZSBtYXkgYWZmZWN0IHRoZSBvcmRlcmluZywgYW5kIHdoaWxzdCBjYWNoZS1jb2hlcmVuY3kKKyAgICAgbWVjaGFuaXNtcyBtYXkgYWxsZXZpYXRlIHRoaXMgLSBvbmNlIHRoZSBzdG9yZSBoYXMgYWN0dWFsbHkgaGl0IHRoZSBjYWNoZQorICAgICAtIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGNvaGVyZW5jeSBtYW5hZ2VtZW50IHdpbGwgYmUgcHJvcGFnYXRlZCBpbgorICAgICBvcmRlciB0byBvdGhlciBDUFVzLgorCitTbyB3aGF0IGFub3RoZXIgQ1BVLCBzYXksIG1pZ2h0IGFjdHVhbGx5IG9ic2VydmUgZnJvbSB0aGUgYWJvdmUgcGllY2Ugb2YgY29kZQoraXM6CisKKwlMT0FEICpBLCAuLi4sIExPQUQgeypDLCpEfSwgU1RPUkUgKkUsIFNUT1JFICpCCisKKwkoV2hlcmUgIkxPQUQgeypDLCpEfSIgaXMgYSBjb21iaW5lZCBsb2FkKQorCisKK0hvd2V2ZXIsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBhIENQVSB3aWxsIGJlIHNlbGYtY29uc2lzdGVudDogaXQgd2lsbCBzZWUgaXRzCitfb3duXyBhY2Nlc3NlcyBhcHBlYXIgdG8gYmUgY29ycmVjdGx5IG9yZGVyZWQsIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEgbWVtb3J5CitiYXJyaWVyLiAgRm9yIGluc3RhbmNlIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOgorCisJVSA9ICpBOworCSpBID0gVjsKKwkqQSA9IFc7CisJWCA9ICpBOworCSpBID0gWTsKKwlaID0gKkE7CisKK2FuZCBhc3N1bWluZyBubyBpbnRlcnZlbnRpb24gYnkgYW4gZXh0ZXJuYWwgaW5mbHVlbmNlLCBpdCBjYW4gYmUgYXNzdW1lZCB0aGF0Cit0aGUgZmluYWwgcmVzdWx0IHdpbGwgYXBwZWFyIHRvIGJlOgorCisJVSA9PSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgKkEKKwlYID09IFcKKwlaID09IFkKKwkqQSA9PSBZCisKK1RoZSBjb2RlIGFib3ZlIG1heSBjYXVzZSB0aGUgQ1BVIHRvIGdlbmVyYXRlIHRoZSBmdWxsIHNlcXVlbmNlIG9mIG1lbW9yeQorYWNjZXNzZXM6CisKKwlVPUxPQUQgKkEsIFNUT1JFICpBPVYsIFNUT1JFICpBPVcsIFg9TE9BRCAqQSwgU1RPUkUgKkE9WSwgWj1MT0FEICpBCisKK2luIHRoYXQgb3JkZXIsIGJ1dCwgd2l0aG91dCBpbnRlcnZlbnRpb24sIHRoZSBzZXF1ZW5jZSBtYXkgaGF2ZSBhbG1vc3QgYW55Citjb21iaW5hdGlvbiBvZiBlbGVtZW50cyBjb21iaW5lZCBvciBkaXNjYXJkZWQsIHByb3ZpZGVkIHRoZSBwcm9ncmFtJ3MgdmlldyBvZgordGhlIHdvcmxkIHJlbWFpbnMgY29uc2lzdGVudC4KKworVGhlIGNvbXBpbGVyIG1heSBhbHNvIGNvbWJpbmUsIGRpc2NhcmQgb3IgZGVmZXIgZWxlbWVudHMgb2YgdGhlIHNlcXVlbmNlIGJlZm9yZQordGhlIENQVSBldmVuIHNlZXMgdGhlbS4KKworRm9yIGluc3RhbmNlOgorCisJKkEgPSBWOworCSpBID0gVzsKKworbWF5IGJlIHJlZHVjZWQgdG86CisKKwkqQSA9IFc7CisKK3NpbmNlLCB3aXRob3V0IGEgd3JpdGUgYmFycmllciwgaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGUgZWZmZWN0IG9mIHRoZQorc3RvcmFnZSBvZiBWIHRvICpBIGlzIGxvc3QuICBTaW1pbGFybHk6CisKKwkqQSA9IFk7CisJWiA9ICpBOworCittYXksIHdpdGhvdXQgYSBtZW1vcnkgYmFycmllciwgYmUgcmVkdWNlZCB0bzoKKworCSpBID0gWTsKKwlaID0gWTsKKworYW5kIHRoZSBMT0FEIG9wZXJhdGlvbiBuZXZlciBhcHBlYXIgb3V0c2lkZSBvZiB0aGUgQ1BVLgorCisKK0FORCBUSEVOIFRIRVJFJ1MgVEhFIEFMUEhBCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgREVDIEFscGhhIENQVSBpcyBvbmUgb2YgdGhlIG1vc3QgcmVsYXhlZCBDUFVzIHRoZXJlIGlzLiAgTm90IG9ubHkgdGhhdCwKK3NvbWUgdmVyc2lvbnMgb2YgdGhlIEFscGhhIENQVSBoYXZlIGEgc3BsaXQgZGF0YSBjYWNoZSwgcGVybWl0dGluZyB0aGVtIHRvIGhhdmUKK3R3byBzZW1hbnRpY2FsbHkgcmVsYXRlZCBjYWNoZSBsaW5lcyB1cGRhdGluZyBhdCBzZXBhcmF0ZSB0aW1lcy4gIFRoaXMgaXMgd2hlcmUKK3RoZSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciByZWFsbHkgYmVjb21lcyBuZWNlc3NhcnkgYXMgdGhpcyBzeW5jaHJvbmlzZXMgYm90aAorY2FjaGVzIHdpdGggdGhlIG1lbW9yeSBjb2hlcmVuY2Ugc3lzdGVtLCB0aHVzIG1ha2luZyBpdCBzZWVtIGxpa2UgcG9pbnRlcgorY2hhbmdlcyB2cyBuZXcgZGF0YSBvY2N1ciBpbiB0aGUgcmlnaHQgb3JkZXIuCisKK1RoZSBBbHBoYSBkZWZpbmVzIHRoZSBMaW51eCdzIGtlcm5lbCdzIG1lbW9yeSBiYXJyaWVyIG1vZGVsLgorCitTZWUgdGhlIHN1YnNlY3Rpb24gb24gIkNhY2hlIENvaGVyZW5jeSIgYWJvdmUuCisKKworPT09PT09PT09PQorUkVGRVJFTkNFUworPT09PT09PT09PQorCitBbHBoYSBBWFAgQXJjaGl0ZWN0dXJlIFJlZmVyZW5jZSBNYW51YWwsIFNlY29uZCBFZGl0aW9uIChTaXRlcyAmIFdpdGVrLAorRGlnaXRhbCBQcmVzcykKKwlDaGFwdGVyIDUuMjogUGh5c2ljYWwgQWRkcmVzcyBTcGFjZSBDaGFyYWN0ZXJpc3RpY3MKKwlDaGFwdGVyIDUuNDogQ2FjaGVzIGFuZCBXcml0ZSBCdWZmZXJzCisJQ2hhcHRlciA1LjU6IERhdGEgU2hhcmluZworCUNoYXB0ZXIgNS42OiBSZWFkL1dyaXRlIE9yZGVyaW5nCisKK0FNRDY0IEFyY2hpdGVjdHVyZSBQcm9ncmFtbWVyJ3MgTWFudWFsIFZvbHVtZSAyOiBTeXN0ZW0gUHJvZ3JhbW1pbmcKKwlDaGFwdGVyIDcuMTogTWVtb3J5LUFjY2VzcyBPcmRlcmluZworCUNoYXB0ZXIgNy40OiBCdWZmZXJpbmcgYW5kIENvbWJpbmluZyBNZW1vcnkgV3JpdGVzCisKK0lBLTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAzOgorU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlCisJQ2hhcHRlciA3LjE6IExvY2tlZCBBdG9taWMgT3BlcmF0aW9ucworCUNoYXB0ZXIgNy4yOiBNZW1vcnkgT3JkZXJpbmcKKwlDaGFwdGVyIDcuNDogU2VyaWFsaXppbmcgSW5zdHJ1Y3Rpb25zCisKK1RoZSBTUEFSQyBBcmNoaXRlY3R1cmUgTWFudWFsLCBWZXJzaW9uIDkKKwlDaGFwdGVyIDg6IE1lbW9yeSBNb2RlbHMKKwlBcHBlbmRpeCBEOiBGb3JtYWwgU3BlY2lmaWNhdGlvbiBvZiB0aGUgTWVtb3J5IE1vZGVscworCUFwcGVuZGl4IEo6IFByb2dyYW1taW5nIHdpdGggdGhlIE1lbW9yeSBNb2RlbHMKKworVWx0cmFTUEFSQyBQcm9ncmFtbWVyIFJlZmVyZW5jZSBNYW51YWwKKwlDaGFwdGVyIDU6IE1lbW9yeSBBY2Nlc3NlcyBhbmQgQ2FjaGVhYmlsaXR5CisJQ2hhcHRlciAxNTogU3BhcmMtVjkgTWVtb3J5IE1vZGVscworCitVbHRyYVNQQVJDIElJSSBDdSBVc2VyJ3MgTWFudWFsCisJQ2hhcHRlciA5OiBNZW1vcnkgTW9kZWxzCisKK1VsdHJhU1BBUkMgSUlJaSBQcm9jZXNzb3IgVXNlcidzIE1hbnVhbAorCUNoYXB0ZXIgODogTWVtb3J5IE1vZGVscworCitVbHRyYVNQQVJDIEFyY2hpdGVjdHVyZSAyMDA1CisJQ2hhcHRlciA5OiBNZW1vcnkKKwlBcHBlbmRpeCBEOiBGb3JtYWwgU3BlY2lmaWNhdGlvbnMgb2YgdGhlIE1lbW9yeSBNb2RlbHMKKworVWx0cmFTUEFSQyBUMSBTdXBwbGVtZW50IHRvIHRoZSBVbHRyYVNQQVJDIEFyY2hpdGVjdHVyZSAyMDA1CisJQ2hhcHRlciA4OiBNZW1vcnkgTW9kZWxzCisJQXBwZW5kaXggRjogQ2FjaGVzIGFuZCBDYWNoZSBDb2hlcmVuY3kKKworU29sYXJpcyBJbnRlcm5hbHMsIENvcmUgS2VybmVsIEFyY2hpdGVjdHVyZSwgcDYzLTY4OgorCUNoYXB0ZXIgMy4zOiBIYXJkd2FyZSBDb25zaWRlcmF0aW9ucyBmb3IgTG9ja3MgYW5kCisJCQlTeW5jaHJvbml6YXRpb24KKworVW5peCBTeXN0ZW1zIGZvciBNb2Rlcm4gQXJjaGl0ZWN0dXJlcywgU3ltbWV0cmljIE11bHRpcHJvY2Vzc2luZyBhbmQgQ2FjaGluZworZm9yIEtlcm5lbCBQcm9ncmFtbWVyczoKKwlDaGFwdGVyIDEzOiBPdGhlciBNZW1vcnkgTW9kZWxzCisKK0ludGVsIEl0YW5pdW0gQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbDogVm9sdW1lIDE6CisJU2VjdGlvbiAyLjY6IFNwZWN1bGF0aW9uCisJU2VjdGlvbiA0LjQ6IE1lbW9yeSBBY2Nlc3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbXRyci50eHQgYi9Eb2N1bWVudGF0aW9uL210cnIudHh0CmluZGV4IGI3OGFmMWMzMi4uYzM5YWMzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL210cnIudHh0CkBAIC0xMzgsMTkgKzEzOCwyOSBAQAogCiAqLwogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jZGVmaW5lIE1UUlJfTkVFRF9TVFJJTkdTCiAjaW5jbHVkZSA8YXNtL210cnIuaD4KIAogI2RlZmluZSBUUlVFIDEKICNkZWZpbmUgRkFMU0UgMAogI2RlZmluZSBFUlJTVFJJTkcgc3RyZXJyb3IgKGVycm5vKQogCitzdGF0aWMgY2hhciAqbXRycl9zdHJpbmdzW01UUlJfTlVNX1RZUEVTXSA9Cit7CisgICAgInVuY2FjaGFibGUiLCAgICAgICAgICAgICAgIC8qIDAgKi8KKyAgICAid3JpdGUtY29tYmluaW5nIiwgICAgICAgICAgLyogMSAqLworICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisgICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMgKi8KKyAgICAid3JpdGUtdGhyb3VnaCIsICAgICAgICAgICAgLyogNCAqLworICAgICJ3cml0ZS1wcm90ZWN0IiwgICAgICAgICAgICAvKiA1ICovCisgICAgIndyaXRlLWJhY2siLCAgICAgICAgICAgICAgIC8qIDYgKi8KK307CiAKIGludCBtYWluICgpCiB7CkBAIC0yMzIsMTMgKzI0MiwyMiBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KLSNkZWZpbmUgTVRSUl9ORUVEX1NUUklOR1MKICNpbmNsdWRlIDxhc20vbXRyci5oPgogCiAjZGVmaW5lIFRSVUUgMQogI2RlZmluZSBGQUxTRSAwCiAjZGVmaW5lIEVSUlNUUklORyBzdHJlcnJvciAoZXJybm8pCiAKK3N0YXRpYyBjaGFyICptdHJyX3N0cmluZ3NbTVRSUl9OVU1fVFlQRVNdID0KK3sKKyAgICAidW5jYWNoYWJsZSIsICAgICAgICAgICAgICAgLyogMCAqLworICAgICJ3cml0ZS1jb21iaW5pbmciLCAgICAgICAgICAvKiAxICovCisgICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgKi8KKyAgICAiPyIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMyAqLworICAgICJ3cml0ZS10aHJvdWdoIiwgICAgICAgICAgICAvKiA0ICovCisgICAgIndyaXRlLXByb3RlY3QiLCAgICAgICAgICAgIC8qIDUgKi8KKyAgICAid3JpdGUtYmFjayIsICAgICAgICAgICAgICAgLyogNiAqLworfTsKIAogaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vcGVyc3RhdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vcGVyc3RhdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTIxZDliCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29wZXJzdGF0ZXMudHh0CkBAIC0wLDAgKzEsMTYxIEBACisKKzEuIEludHJvZHVjdGlvbgorCitMaW51eCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gYWRtaW5pc3RyYXRpdmUgYW5kIG9wZXJhdGlvbmFsIHN0YXRlIG9mIGFuCitpbnRlcmZhY2UuIEFkbWluaW5zdHJhdGl2ZSBzdGF0ZSBpcyB0aGUgcmVzdWx0IG9mICJpcCBsaW5rIHNldCBkZXYKKzxkZXY+IHVwIG9yIGRvd24iIGFuZCByZWZsZWN0cyB3aGV0aGVyIHRoZSBhZG1pbmlzdHJhdG9yIHdhbnRzIHRvIHVzZQordGhlIGRldmljZSBmb3IgdHJhZmZpYy4KKworSG93ZXZlciwgYW4gaW50ZXJmYWNlIGlzIG5vdCB1c2FibGUganVzdCBiZWNhdXNlIHRoZSBhZG1pbiBlbmFibGVkIGl0CistIGV0aGVybmV0IHJlcXVpcmVzIHRvIGJlIHBsdWdnZWQgaW50byB0aGUgc3dpdGNoIGFuZCwgZGVwZW5kaW5nIG9uCithIHNpdGUncyBuZXR3b3JraW5nIHBvbGljeSBhbmQgY29uZmlndXJhdGlvbiwgYW4gODAyLjFYIGF1dGhlbnRpY2F0aW9uCit0byBiZSBwZXJmb3JtZWQgYmVmb3JlIHVzZXIgZGF0YSBjYW4gYmUgdHJhbnNmZXJyZWQuIE9wZXJhdGlvbmFsIHN0YXRlCitzaG93cyB0aGUgYWJpbGl0eSBvZiBhbiBpbnRlcmZhY2UgdG8gdHJhbnNtaXQgdGhpcyB1c2VyIGRhdGEuCisKK1RoYW5rcyB0byA4MDIuMVgsIHVzZXJzcGFjZSBtdXN0IGJlIGdyYW50ZWQgdGhlIHBvc3NpYmlsaXR5IHRvCitpbmZsdWVuY2Ugb3BlcmF0aW9uYWwgc3RhdGUuIFRvIGFjY29tbW9kYXRlIHRoaXMsIG9wZXJhdGlvbmFsIHN0YXRlIGlzCitzcGxpdCBpbnRvIHR3byBwYXJ0czogVHdvIGZsYWdzIHRoYXQgY2FuIGJlIHNldCBieSB0aGUgZHJpdmVyIG9ubHksIGFuZAorYSBSRkMyODYzIGNvbXBhdGlibGUgc3RhdGUgdGhhdCBpcyBkZXJpdmVkIGZyb20gdGhlc2UgZmxhZ3MsIGEgcG9saWN5LAorYW5kIGNoYW5nZWFibGUgZnJvbSB1c2Vyc3BhY2UgdW5kZXIgY2VydGFpbiBydWxlcy4KKworCisyLiBRdWVyeWluZyBmcm9tIHVzZXJzcGFjZQorCitCb3RoIGFkbWluIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSBjYW4gYmUgcXVlcmllZCB2aWEgdGhlIG5ldGxpbmsKK29wZXJhdGlvbiBSVE1fR0VUTElOSy4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzdWJzY3JpYmUgdG8gUlRNR1JQX0xJTksKK3RvIGJlIG5vdGlmaWVkIG9mIHVwZGF0ZXMuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzZXR0aW5nIGZyb20gdXNlcnNwYWNlLgorCitUaGVzZSB2YWx1ZXMgY29udGFpbiBpbnRlcmZhY2Ugc3RhdGU6CisKK2lmaW5mb21zZzo6aWZfZmxhZ3MgJiBJRkZfVVA6CisgSW50ZXJmYWNlIGlzIGFkbWluIHVwCitpZmluZm9tc2c6OmlmX2ZsYWdzICYgSUZGX1JVTk5JTkc6CisgSW50ZXJmYWNlIGlzIGluIFJGQzI4NjMgb3BlcmF0aW9uYWwgc3RhdGUgVVAgb3IgVU5LTk9XTi4gVGhpcyBpcyBmb3IKKyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCByb3V0aW5nIGRhZW1vbnMsIGRoY3AgY2xpZW50cyBjYW4gdXNlIHRoaXMKKyBmbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgc2hvdWxkIHVzZSB0aGUgaW50ZXJmYWNlLgoraWZpbmZvbXNnOjppZl9mbGFncyAmIElGRl9MT1dFUl9VUDoKKyBEcml2ZXIgaGFzIHNpZ25hbGVkIG5ldGlmX2NhcnJpZXJfb24oKQoraWZpbmZvbXNnOjppZl9mbGFncyAmIElGRl9ET1JNQU5UOgorIERyaXZlciBoYXMgc2lnbmFsZWQgbmV0aWZfZG9ybWFudF9vbigpCisKK1RoZXNlIGludGVyZmFjZSBmbGFncyBjYW4gYWxzbyBiZSBxdWVyaWVkIHdpdGhvdXQgbmV0bGluayB1c2luZyB0aGUKK1NJT0NHSUZGTEFHUyBpb2N0bC4KKworVExWIElGTEFfT1BFUlNUQVRFCisKK2NvbnRhaW5zIFJGQzI4NjMgc3RhdGUgb2YgdGhlIGludGVyZmFjZSBpbiBudW1lcmljIHJlcHJlc2VudGF0aW9uOgorCitJRl9PUEVSX1VOS05PV04gKDApOgorIEludGVyZmFjZSBpcyBpbiB1bmtub3duIHN0YXRlLCBuZWl0aGVyIGRyaXZlciBub3IgdXNlcnNwYWNlIGhhcyBzZXQKKyBvcGVyYXRpb25hbCBzdGF0ZS4gSW50ZXJmYWNlIG11c3QgYmUgY29uc2lkZXJlZCBmb3IgdXNlciBkYXRhIGFzCisgc2V0dGluZyBvcGVyYXRpb25hbCBzdGF0ZSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgaW4gZXZlcnkgZHJpdmVyLgorSUZfT1BFUl9OT1RQUkVTRU5UICgxKToKKyBVbnVzZWQgaW4gY3VycmVudCBrZXJuZWwgKG5vdHByZXNlbnQgaW50ZXJmYWNlcyBub3JtYWxseSBkaXNhcHBlYXIpLAorIGp1c3QgYSBudW1lcmljYWwgcGxhY2Vob2xkZXIuCitJRl9PUEVSX0RPV04gKDIpOgorIEludGVyZmFjZSBpcyB1bmFibGUgdG8gdHJhbnNmZXIgZGF0YSBvbiBMMSwgZi5lLiBldGhlcm5ldCBpcyBub3QKKyBwbHVnZ2VkIG9yIGludGVyZmFjZSBpcyBBRE1JTiBkb3duLgorSUZfT1BFUl9MT1dFUkxBWUVSRE9XTiAoMyk6CisgSW50ZXJmYWNlcyBzdGFja2VkIG9uIGFuIGludGVyZmFjZSB0aGF0IGlzIElGX09QRVJfRE9XTiBzaG93IHRoaXMKKyBzdGF0ZSAoZi5lLiBWTEFOKS4KK0lGX09QRVJfVEVTVElORyAoNCk6CisgVW51c2VkIGluIGN1cnJlbnQga2VybmVsLgorSUZfT1BFUl9ET1JNQU5UICg1KToKKyBJbnRlcmZhY2UgaXMgTDEgdXAsIGJ1dCB3YWl0aW5nIGZvciBhbiBleHRlcm5hbCBldmVudCwgZi5lLiBmb3IgYQorIHByb3RvY29sIHRvIGVzdGFibGlzaC4gKDgwMi4xWCkKK0lGX09QRVJfVVAgKDYpOgorIEludGVyZmFjZSBpcyBvcGVyYXRpb25hbCB1cCBhbmQgY2FuIGJlIHVzZWQuCisKK1RoaXMgVExWIGNhbiBhbHNvIGJlIHF1ZXJpZWQgdmlhIHN5c2ZzLgorCitUTFYgSUZMQV9MSU5LTU9ERQorCitjb250YWlucyBsaW5rIHBvbGljeS4gVGhpcyBpcyBuZWVkZWQgZm9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbgorZGVzY3JpYmVkIGJlbG93LgorCitUaGlzIFRMViBjYW4gYWxzbyBiZSBxdWVyaWVkIHZpYSBzeXNmcy4KKworCiszLiBLZXJuZWwgZHJpdmVyIEFQSQorCitLZXJuZWwgZHJpdmVycyBoYXZlIGFjY2VzcyB0byB0d28gZmxhZ3MgdGhhdCBtYXAgdG8gSUZGX0xPV0VSX1VQIGFuZAorSUZGX0RPUk1BTlQuIFRoZXNlIGZsYWdzIGNhbiBiZSBzZXQgZnJvbSBldmVyeXdoZXJlLCBldmVuIGZyb20KK2ludGVycnVwdHMuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCBvbmx5IHRoZSBkcml2ZXIgaGFzIHdyaXRlIGFjY2VzcywKK2hvd2V2ZXIsIGlmIGRpZmZlcmVudCBsYXllcnMgb2YgdGhlIGRyaXZlciBtYW5pcHVsYXRlIHRoZSBzYW1lIGZsYWcsCit0aGUgZHJpdmVyIGhhcyB0byBwcm92aWRlIHRoZSBzeW5jaHJvbmlzYXRpb24gbmVlZGVkLgorCitfX0xJTktfU1RBVEVfTk9DQVJSSUVSLCBtYXBzIHRvICFJRkZfTE9XRVJfVVA6CisKK1RoZSBkcml2ZXIgdXNlcyBuZXRpZl9jYXJyaWVyX29uKCkgdG8gY2xlYXIgYW5kIG5ldGlmX2NhcnJpZXJfb2ZmKCkgdG8KK3NldCB0aGlzIGZsYWcuIE9uIG5ldGlmX2NhcnJpZXJfb2ZmKCksIHRoZSBzY2hlZHVsZXIgc3RvcHMgc2VuZGluZworcGFja2V0cy4gVGhlIG5hbWUgJ2NhcnJpZXInIGFuZCB0aGUgaW52ZXJzaW9uIGFyZSBoaXN0b3JpY2FsLCB0aGluayBvZgoraXQgYXMgbG93ZXIgbGF5ZXIuCisKK25ldGlmX2NhcnJpZXJfb2soKSBjYW4gYmUgdXNlZCB0byBxdWVyeSB0aGF0IGJpdC4KKworX19MSU5LX1NUQVRFX0RPUk1BTlQsIG1hcHMgdG8gSUZGX0RPUk1BTlQ6CisKK1NldCBieSB0aGUgZHJpdmVyIHRvIGV4cHJlc3MgdGhhdCB0aGUgZGV2aWNlIGNhbm5vdCB5ZXQgYmUgdXNlZAorYmVjYXVzZSBzb21lIGRyaXZlciBjb250cm9sbGVkIHByb3RvY29sIGVzdGFibGlzaG1lbnQgaGFzIHRvCitjb21wbGV0ZS4gQ29ycmVzcG9uZGluZyBmdW5jdGlvbnMgYXJlIG5ldGlmX2Rvcm1hbnRfb24oKSB0byBzZXQgdGhlCitmbGFnLCBuZXRpZl9kb3JtYW50X29mZigpIHRvIGNsZWFyIGl0IGFuZCBuZXRpZl9kb3JtYW50KCkgdG8gcXVlcnkuCisKK09uIGRldmljZSBhbGxvY2F0aW9uLCBuZXR3b3JraW5nIGNvcmUgc2V0cyB0aGUgZmxhZ3MgZXF1aXZhbGVudCB0bworbmV0aWZfY2Fycmllcl9vaygpIGFuZCAhbmV0aWZfZG9ybWFudCgpLgorCisKK1doZW5ldmVyIHRoZSBkcml2ZXIgQ0hBTkdFUyBvbmUgb2YgdGhlc2UgZmxhZ3MsIGEgd29ya3F1ZXVlIGV2ZW50IGlzCitzY2hlZHVsZWQgdG8gdHJhbnNsYXRlIHRoZSBmbGFnIGNvbWJpbmF0aW9uIHRvIElGTEFfT1BFUlNUQVRFIGFzCitmb2xsb3dzOgorCishbmV0aWZfY2Fycmllcl9vaygpOgorIElGX09QRVJfTE9XRVJMQVlFUkRPV04gaWYgdGhlIGludGVyZmFjZSBpcyBzdGFja2VkLCBJRl9PUEVSX0RPV04KKyBvdGhlcndpc2UuIEtlcm5lbCBjYW4gcmVjb2duaXNlIHN0YWNrZWQgaW50ZXJmYWNlcyBiZWNhdXNlIHRoZWlyCisgaWZpbmRleCAhPSBpZmxpbmsuCisKK25ldGlmX2NhcnJpZXJfb2soKSAmJiBuZXRpZl9kb3JtYW50KCk6CisgSUZfT1BFUl9ET1JNQU5UCisKK25ldGlmX2NhcnJpZXJfb2soKSAmJiAhbmV0aWZfZG9ybWFudCgpOgorIElGX09QRVJfVVAgaWYgdXNlcnNwYWNlIGludGVyYWN0aW9uIGlzIGRpc2FibGVkLiBPdGhlcndpc2UKKyBJRl9PUEVSX0RPUk1BTlQgd2l0aCB0aGUgcG9zc2liaWxpdHkgZm9yIHVzZXJzcGFjZSB0byBpbml0aWF0ZSB0aGUKKyBJRl9PUEVSX1VQIHRyYW5zaXRpb24gYWZ0ZXJ3YXJkcy4KKworCis0LiBTZXR0aW5nIGZyb20gdXNlcnNwYWNlCisKK0FwcGxpY2F0aW9ucyBoYXZlIHRvIHVzZSB0aGUgbmV0bGluayBpbnRlcmZhY2UgdG8gaW5mbHVlbmNlIHRoZQorUkZDMjg2MyBvcGVyYXRpb25hbCBzdGF0ZSBvZiBhbiBpbnRlcmZhY2UuIFNldHRpbmcgSUZMQV9MSU5LTU9ERSB0byAxCit2aWEgUlRNX1NFVExJTksgaW5zdHJ1Y3RzIHRoZSBrZXJuZWwgdGhhdCBhbiBpbnRlcmZhY2Ugc2hvdWxkIGdvIHRvCitJRl9PUEVSX0RPUk1BTlQgaW5zdGVhZCBvZiBJRl9PUEVSX1VQIHdoZW4gdGhlIGNvbWJpbmF0aW9uCituZXRpZl9jYXJyaWVyX29rKCkgJiYgIW5ldGlmX2Rvcm1hbnQoKSBpcyBzZXQgYnkgdGhlCitkcml2ZXIuIEFmdGVyd2FyZHMsIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gY2FuIHNldCBJRkxBX09QRVJTVEFURQordG8gSUZfT1BFUl9ET1JNQU5UIG9yIElGX09QRVJfVVAgYXMgbG9uZyBhcyB0aGUgZHJpdmVyIGRvZXMgbm90IHNldAorbmV0aWZfY2Fycmllcl9vZmYoKSBvciBuZXRpZl9kb3JtYW50X29uKCkuIENoYW5nZXMgbWFkZSBieSB1c2Vyc3BhY2UKK2FyZSBtdWx0aWNhc3RlZCBvbiB0aGUgbmV0bGluayBncm91cCBSVE1HUlBfTElOSy4KKworU28gYmFzaWNhbGx5IGEgODAyLjFYIHN1cHBsaWNhbnQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCBsaWtlIHRoaXM6CisKKy1zdWJzY3JpYmUgdG8gUlRNR1JQX0xJTksKKy1zZXQgSUZMQV9MSU5LTU9ERSB0byAxIHZpYSBSVE1fU0VUTElOSworLXF1ZXJ5IFJUTV9HRVRMSU5LIG9uY2UgdG8gZ2V0IGluaXRpYWwgc3RhdGUKKy1pZiBpbml0aWFsIGZsYWdzIGFyZSBub3QgKElGRl9MT1dFUl9VUCAmJiAhSUZGX0RPUk1BTlQpLCB3YWl0IHVudGlsCisgbmV0bGluayBtdWx0aWNhc3Qgc2lnbmFscyB0aGlzIHN0YXRlCistZG8gODAyLjFYLCBldmVudHVhbGx5IGFib3J0IGlmIGZsYWdzIGdvIGRvd24gYWdhaW4KKy1zZW5kIFJUTV9TRVRMSU5LIHRvIHNldCBvcGVyc3RhdGUgdG8gSUZfT1BFUl9VUCBpZiBhdXRoZW50aWNhdGlvbgorIHN1Y2NlZWRzLCBJRl9PUEVSX0RPUk1BTlQgb3RoZXJ3aXNlCistc2VlIGhvdyBvcGVyc3RhdGUgYW5kIElGRl9SVU5OSU5HIGlzIGVjaG9lZCB2aWEgbmV0bGluayBtdWx0aWNhc3QKKy1zZXQgaW50ZXJmYWNlIGJhY2sgdG8gSUZfT1BFUl9ET1JNQU5UIGlmIDgwMi4xWCByZWF1dGhlbnRpY2F0aW9uCisgZmFpbHMKKy1yZXN0YXJ0IGlmIGtlcm5lbCBjaGFuZ2VzIElGRl9MT1dFUl9VUCBvciBJRkZfRE9STUFOVCBmbGFnCisKK2lmIHN1cHBsaWNhbnQgZ29lcyBkb3duLCBicmluZyBiYWNrIElGTEFfTElOS01PREUgdG8gMCBhbmQKK0lGTEFfT1BFUlNUQVRFIHRvIGEgc2FuZSB2YWx1ZS4KKworQSByb3V0aW5nIGRhZW1vbiBvciBkaGNwIGNsaWVudCBqdXN0IG5lZWRzIHRvIGNhcmUgZm9yIElGRl9SVU5OSU5HIG9yCit3YWl0aW5nIGZvciBvcGVyc3RhdGUgdG8gZ28gSUZfT1BFUl9VUC9JRl9PUEVSX1VOS05PV04gYmVmb3JlCitjb25zaWRlcmluZyB0aGUgaW50ZXJmYWNlIC8gcXVlcnlpbmcgYSBESENQIGFkZHJlc3MuCisKKworRm9yIHRlY2huaWNhbCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHBsZWFzZSBlLW1haWwgdG8gU3RlZmFuIFJvbXBmCisoc3RlZmFuIGF0IGxvcGxvZi5kZSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dAppbmRleCA0ZmM4ZTk4Li5hYWY5OWQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAJPGJsb2NrIG51bWJlcj4gKiA8YmxvY2sgc2l6ZT4gLyA8ZnJhbWUgc2l6ZT4KIAotU3Vwb3NzZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMsIHdoaWNoIGFwcGx5IGZvciAyLjYga2VybmVsIGFuZCBhbgorU3VwcG9zZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMsIHdoaWNoIGFwcGx5IGZvciAyLjYga2VybmVsIGFuZCBhbgogaTM4NiBhcmNoaXRlY3R1cmU6CiAKIAk8c2l6ZS1tYXg+ID0gMTMxMDcyIGJ5dGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0CmluZGV4IGVjM2QxMDkuLjc2NzUwZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0CkBAIC0xMzgsNyArMTM4LDcgQEAKIGV0aGVybmV0IGZyYW1lcyB3aGVuIHVzaW5nIHRhcC4KIAogNS4gV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEJQRiBhbmQgVFVOL1RBUCBkcml2ZXI/Ci1CRlAgaXMgYW4gYWR2YW5jZWQgcGFja2V0IGZpbHRlci4gSXQgY2FuIGJlIGF0dGFjaGVkIHRvIGV4aXN0aW5nCitCUEYgaXMgYW4gYWR2YW5jZWQgcGFja2V0IGZpbHRlci4gSXQgY2FuIGJlIGF0dGFjaGVkIHRvIGV4aXN0aW5nCiBuZXR3b3JrIGludGVyZmFjZS4gSXQgZG9lcyBub3QgcHJvdmlkZSBhIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UuCiBBIFRVTi9UQVAgZHJpdmVyIGRvZXMgcHJvdmlkZSBhIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgYW5kIGl0IGlzIHBvc3NpYmxlCiB0byBhdHRhY2ggQlBGIHRvIHRoaXMgaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm1fc3luYy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybV9zeW5jLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmU2MjZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm1fc3luYy50eHQKQEAgLTAsMCArMSwxNjYgQEAKKworVGhlIHN5bmMgcGF0Y2hlcyB3b3JrIGlzIGJhc2VkIG9uIGluaXRpYWwgcGF0Y2hlcyBmcm9tCitLcmlzenRpYW4gPGhpZGRlbkBiYWxhYml0Lmh1PiBhbmQgb3RoZXJzIGFuZCBhZGRpdGlvbmFsIHBhdGNoZXMKK2Zyb20gSmFtYWwgPGhhZGlAY3liZXJ1cy5jYT4uCisKK1RoZSBlbmQgZ29hbCBmb3Igc3luY2luZyBpcyB0byBiZSBhYmxlIHRvIGluc2VydCBhdHRyaWJ1dGVzICsgZ2VuZXJhdGUKK2V2ZW50cyBzbyB0aGF0IHRoZSBhbiBTQSBjYW4gYmUgc2FmZWx5IG1vdmVkIGZyb20gb25lIG1hY2hpbmUgdG8gYW5vdGhlcgorZm9yIEhBIHB1cnBvc2VzLgorVGhlIGlkZWEgaXMgdG8gc3luY2hyb25pemUgdGhlIFNBIHNvIHRoYXQgdGhlIHRha2VvdmVyIG1hY2hpbmUgY2FuIGRvCit0aGUgcHJvY2Vzc2luZyBvZiB0aGUgU0EgYXMgYWNjdXJhdGUgYXMgcG9zc2libGUgaWYgaXQgaGFzIGFjY2VzcyB0byBpdC4KKworV2UgYWxyZWFkeSBoYXZlIHRoZSBhYmlsaXR5IHRvIGdlbmVyYXRlIFNBIGFkZC9kZWwvdXBkIGV2ZW50cy4KK1RoZXNlIHBhdGNoZXMgYWRkIGFiaWxpdHkgdG8gc3luYyBhbmQgaGF2ZSBhY2N1cmF0ZSBsaWZldGltZSBieXRlICh0bworZW5zdXJlIHByb3BlciBkZWNheSBvZiBTQXMpIGFuZCByZXBsYXkgY291bnRlcnMgdG8gYXZvaWQgcmVwbGF5IGF0dGFja3MKK3dpdGggYXMgbWluaW1hbCBsb3NzIGF0IGZhaWxvdmVyIHRpbWUuCitUaGlzIHdheSBhIGJhY2t1cCBzdGF5cyBhcyBjbG9zZWx5IHVwdG9kYXRlIGFzIGFuIGFjdGl2ZSBtZW1iZXIuCisKK0JlY2F1c2UgdGhlIGFib3ZlIGl0ZW1zIGNoYW5nZSBmb3IgZXZlcnkgcGFja2V0IHRoZSBTQSByZWNlaXZlcywKK2l0IGlzIHBvc3NpYmxlIGZvciBhIGxvdCBvZiB0aGUgZXZlbnRzIHRvIGJlIGdlbmVyYXRlZC4KK0ZvciB0aGlzIHJlYXNvbiwgd2UgYWxzbyBhZGQgYSBuYWdsZS1saWtlIGFsZ29yaXRobSB0byByZXN0cmljdAordGhlIGV2ZW50cy4gaS5lIHdlIGFyZSBnb2luZyB0byBzZXQgdGhyZXNob2xkcyB0byBzYXkgImxldCBtZQora25vdyBpZiB0aGUgcmVwbGF5IHNlcXVlbmNlIHRocmVzaG9sZCBpcyByZWFjaGVkIG9yIDEwIHNlY3MgaGF2ZSBwYXNzZWQiCitUaGVzZSB0aHJlc2hvbGRzIGFyZSBzZXQgc3lzdGVtLXdpZGUgdmlhIHN5c2N0bHMgb3IgY2FuIGJlIHVwZGF0ZWQKK3BlciBTQS4KKworVGhlIGlkZW50aWZpZWQgaXRlbXMgdGhhdCBuZWVkIHRvIGJlIHN5bmNocm9uaXplZCBhcmU6CistIHRoZSBsaWZldGltZSBieXRlIGNvdW50ZXIKK25vdGUgdGhhdDogbGlmZXRpbWUgdGltZSBsaW1pdCBpcyBub3QgaW1wb3J0YW50IGlmIHlvdSBhc3N1bWUgdGhlIGZhaWxvdmVyCittYWNoaW5lIGlzIGtub3duIGFoZWFkIG9mIHRpbWUgc2luY2UgdGhlIGRlY2F5IG9mIHRoZSB0aW1lIGNvdW50ZG93bgoraXMgbm90IGRyaXZlbiBieSBwYWNrZXQgYXJyaXZhbC4KKy0gdGhlIHJlcGxheSBzZXF1ZW5jZSBmb3IgYm90aCBpbmJvdW5kIGFuZCBvdXRib3VuZAorCisxKSBNZXNzYWdlIFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitubG1zZ2hkcjphZXZlbnRfaWQ6b3B0aW9uYWwtVExWcy4KKworVGhlIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyBhcmU6CisKK1hGUk1fTVNHX05FV0FFIGFuZCBYRlJNX01TR19HRVRBRS4KKworQSBYRlJNX01TR19HRVRBRSBkb2VzIG5vdCBoYXZlIFRMVnMuCitBIFhGUk1fTVNHX05FV0FFIHdpbGwgaGF2ZSBhdCBsZWFzdCB0d28gVExWcyAoYXMgaXMKK2Rpc2N1c3NlZCBmdXJ0aGVyIGJlbG93KS4KKworYWV2ZW50X2lkIHN0cnVjdHVyZSBsb29rcyBsaWtlOgorCisgICBzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgeworICAgICAgICAgICAgIHN0cnVjdCB4ZnJtX3VzZXJzYV9pZCAgICAgICAgICAgc2FfaWQ7CisgICAgICAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyAgIH07CisKK3hmcm1fdXNlcnNhX2lkIGluIHRoaXMgbWVzc2FnZSBsYXlvdXQgaWRlbnRpZmllcyB0aGUgU0EuCisKK2ZsYWdzIGFyZSB1c2VkIHRvIGluZGljYXRlIGRpZmZlcmVudCB0aGluZ3MuIFRoZSBwb3NzaWJsZQorZmxhZ3MgYXJlOgorICAgICAgICBYRlJNX0FFX1JUSFI9MSwgLyogcmVwbGF5IHRocmVzaG9sZCovCisgICAgICAgIFhGUk1fQUVfUlZBTD0yLCAvKiByZXBsYXkgdmFsdWUgKi8KKyAgICAgICAgWEZSTV9BRV9MVkFMPTQsIC8qIGxpZmV0aW1lIHZhbHVlICovCisgICAgICAgIFhGUk1fQUVfRVRIUj04LCAvKiBleHBpcnkgdGltZXIgdGhyZXNob2xkICovCisgICAgICAgIFhGUk1fQUVfQ1I9MTYsIC8qIEV2ZW50IGNhdXNlIGlzIHJlcGxheSB1cGRhdGUgKi8KKyAgICAgICAgWEZSTV9BRV9DRT0zMiwgLyogRXZlbnQgY2F1c2UgaXMgdGltZXIgZXhwaXJ5ICovCisgICAgICAgIFhGUk1fQUVfQ1U9NjQsIC8qIEV2ZW50IGNhdXNlIGlzIHBvbGljeSB1cGRhdGUgKi8KKworSG93IHRoZXNlIGZsYWdzIGFyZSB1c2VkIGlzIGRlcGVuZGVudCBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZQorbWVzc2FnZSAoa2VybmVsPC0+dXNlcikgYXMgd2VsbCB0aGUgY2F1c2UgKGNvbmZpZywgcXVlcnkgb3IgZXZlbnQpLgorVGhpcyBpcyBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIGRpZmZlcmVudCBtZXNzYWdlcy4KKworVGhlIHBpZCB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5IGluIG5ldGxpbmsgdG8gcmVjb2duaXplIGRpcmVjdGlvbgorKDAgdG8gdGhlIGtlcm5lbCBhbmQgcGlkID0gcHJvY2Vzc2lkIHRoYXQgY3JlYXRlZCB0aGUgZXZlbnQKK3doZW4gZ29pbmcgZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZSkKKworQSBwcm9ncmFtIG5lZWRzIHRvIHN1YnNjcmliZSB0byBtdWx0aWNhc3QgZ3JvdXAgWEZSTU5MR1JQX0FFVkVOVFMKK3RvIGdldCBub3RpZmllZCBvZiB0aGVzZSBldmVudHMuCisKKzIpIFRMVlMgcmVmbGVjdCB0aGUgZGlmZmVyZW50IHBhcmFtZXRlcnM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithKSBieXRlIHZhbHVlIChYRlJNQV9MVElNRV9WQUwpCitUaGlzIFRMViBjYXJyaWVzIHRoZSBydW5uaW5nL2N1cnJlbnQgY291bnRlciBmb3IgYnl0ZSBsaWZldGltZSBzaW5jZQorbGFzdCBldmVudC4KKworYilyZXBsYXkgdmFsdWUgKFhGUk1BX1JFUExBWV9WQUwpCitUaGlzIFRMViBjYXJyaWVzIHRoZSBydW5uaW5nL2N1cnJlbnQgY291bnRlciBmb3IgcmVwbGF5IHNlcXVlbmNlIHNpbmNlCitsYXN0IGV2ZW50LgorCitjKXJlcGxheSB0aHJlc2hvbGQgKFhGUk1BX1JFUExBWV9USFJFU0gpCitUaGlzIFRMViBjYXJyaWVzIHRoZSB0aHJlc2hvbGQgYmVpbmcgdXNlZCBieSB0aGUga2VybmVsIHRvIHRyaWdnZXIgZXZlbnRzCit3aGVuIHRoZSByZXBsYXkgc2VxdWVuY2UgaXMgZXhjZWVkZWQuCisKK2QpIGV4cGlyeSB0aW1lciAoWEZSTUFfRVRJTUVSX1RIUkVTSCkKK1RoaXMgaXMgYSB0aW1lciB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgd2hpY2ggaXMgdXNlZCBhcyB0aGUgbmFnbGUKK3ZhbHVlIHRvIHJhdGUgbGltaXQgdGhlIGV2ZW50cy4KKworMykgRGVmYXVsdCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHBhcmFtZXRlcnM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQgdGhlc2UgZXZlbnRzIHNob3VsZCBiZSB0dXJuZWQgb2ZmIHVubGVzcyB0aGVyZSBpcworYXQgbGVhc3Qgb25lIGxpc3RlbmVyIHJlZ2lzdGVyZWQgdG8gbGlzdGVuIHRvIHRoZSBtdWx0aWNhc3QKK2dyb3VwIFhGUk1OTEdSUF9BRVZFTlRTLgorCitQcm9ncmFtcyBpbnN0YWxsaW5nIFNBcyB3aWxsIG5lZWQgdG8gc3BlY2lmeSB0aGUgdHdvIHRocmVzaG9sZHMsIGhvd2V2ZXIsCitpbiBvcmRlciB0byBub3QgY2hhbmdlIGV4aXN0aW5nIGFwcGxpY2F0aW9ucyBzdWNoIGFzIHJhY29vbgord2UgYWxzbyBwcm92aWRlIGRlZmF1bHQgdGhyZXNob2xkIHZhbHVlcyBmb3IgdGhlc2UgZGlmZmVyZW50IHBhcmFtZXRlcnMKK2luIGNhc2UgdGhleSBhcmUgbm90IHNwZWNpZmllZC4KKwordGhlIHR3byBzeXNjdGxzL3Byb2MgZW50cmllcyBhcmU6CithKSAvcHJvYy9zeXMvbmV0L2NvcmUvc3lzY3RsX3hmcm1fYWV2ZW50X2V0aW1lCit1c2VkIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBYRlJNQV9FVElNRVJfVEhSRVNIIGluIGluY3JlbWVudGFsCit1bml0cyBvZiB0aW1lIG9mIDEwMG1zLiBUaGUgZGVmYXVsdCBpcyAxMCAoMSBzZWNvbmQpCisKK2IpIC9wcm9jL3N5cy9uZXQvY29yZS9zeXNjdGxfeGZybV9hZXZlbnRfcnNlcXRoCit1c2VkIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIFhGUk1BX1JFUExBWV9USFJFU0ggcGFyYW1ldGVyCitpbiBpbmNyZW1lbnRhbCBwYWNrZXQgY291bnQuIFRoZSBkZWZhdWx0IGlzIHR3byBwYWNrZXRzLgorCis0KSBNZXNzYWdlIHR5cGVzCistLS0tLS0tLS0tLS0tLS0tCisKK2EpIFhGUk1fTVNHX0dFVEFFIGlzc3VlZCBieSB1c2VyLS0+a2VybmVsLgorWEZSTV9NU0dfR0VUQUUgZG9lcyBub3QgY2FycnkgYW55IFRMVnMuCitUaGUgcmVzcG9uc2UgaXMgYSBYRlJNX01TR19ORVdBRSB3aGljaCBpcyBmb3JtYXR0ZWQgYmFzZWQgb24gd2hhdAorWEZSTV9NU0dfR0VUQUUgcXVlcmllZCBmb3IuCitUaGUgcmVzcG9uc2Ugd2lsbCBhbHdheXMgaGF2ZSBYRlJNQV9MVElNRV9WQUwgYW5kIFhGUk1BX1JFUExBWV9WQUwgVExWcy4KKyppZiBYRlJNX0FFX1JUSFIgZmxhZyBpcyBzZXQsIHRoZW4gWEZSTUFfUkVQTEFZX1RIUkVTSCBpcyBhbHNvIHJldHJpZXZlZAorKmlmIFhGUk1fQUVfRVRIUiBmbGFnIGlzIHNldCwgdGhlbiBYRlJNQV9FVElNRVJfVEhSRVNIIGlzIGFsc28gcmV0cmlldmVkCisKK2IpIFhGUk1fTVNHX05FV0FFIGlzIGlzc3VlZCBieSBlaXRoZXIgdXNlciBzcGFjZSB0byBjb25maWd1cmUKK29yIGtlcm5lbCB0byBhbm5vdW5jZSBldmVudHMgb3IgcmVzcG9uZCB0byBhIFhGUk1fTVNHX0dFVEFFLgorCitpKSB1c2VyIC0tPiBrZXJuZWwgdG8gY29uZmlndXJlIGEgc3BlY2lmaWMgU0EuCithbnkgb2YgdGhlIHZhbHVlcyBvciB0aHJlc2hvbGQgcGFyYW1ldGVycyBjYW4gYmUgdXBkYXRlZCBieSBwYXNzaW5nIHRoZQorYXBwcm9wcmlhdGUgVExWLgorQSByZXNwb25zZSBpcyBpc3N1ZWQgYmFjayB0byB0aGUgc2VuZGVyIGluIHVzZXIgc3BhY2UgdG8gaW5kaWNhdGUgc3VjY2Vzcworb3IgZmFpbHVyZS4KK0luIHRoZSBjYXNlIG9mIHN1Y2Nlc3MsIGFkZGl0aW9uYWxseSBhbiBldmVudCB3aXRoCitYRlJNX01TR19ORVdBRSBpcyBhbHNvIGlzc3VlZCB0byBhbnkgbGlzdGVuZXJzIGFzIGRlc2NyaWJlZCBpbiBpaWkpLgorCitpaSkga2VybmVsLT51c2VyIGRpcmVjdGlvbiBhcyBhIHJlc3BvbnNlIHRvIFhGUk1fTVNHX0dFVEFFCitUaGUgcmVzcG9uc2Ugd2lsbCBhbHdheXMgaGF2ZSBYRlJNQV9MVElNRV9WQUwgYW5kIFhGUk1BX1JFUExBWV9WQUwgVExWcy4KK1RoZSB0aHJlc2hvbGQgVExWcyB3aWxsIGJlIGluY2x1ZGVkIGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGluCit0aGUgWEZSTV9NU0dfR0VUQUUgbWVzc2FnZS4KKworaWlpKSBrZXJuZWwtPnVzZXIgdG8gcmVwb3J0IGFzIGV2ZW50IGlmIHNvbWVvbmUgc2V0cyBhbnkgdmFsdWVzIG9yCit0aHJlc2hvbGRzIGZvciBhbiBTQSB1c2luZyBYRlJNX01TR19ORVdBRSAoYXMgZGVzY3JpYmVkIGluICNpIGFib3ZlKS4KK0luIHN1Y2ggYSBjYXNlIFhGUk1fQUVfQ1UgZmxhZyBpcyBzZXQgdG8gaW5mb3JtIHRoZSB1c2VyIHRoYXQKK3RoZSBjaGFuZ2UgaGFwcGVuZWQgYXMgYSByZXN1bHQgb2YgYW4gdXBkYXRlLgorVGhlIG1lc3NhZ2Ugd2lsbCBhbHdheXMgaGF2ZSBYRlJNQV9MVElNRV9WQUwgYW5kIFhGUk1BX1JFUExBWV9WQUwgVExWcy4KKworaXYpIGtlcm5lbC0+dXNlciB0byByZXBvcnQgZXZlbnQgd2hlbiByZXBsYXkgdGhyZXNob2xkIG9yIGEgdGltZW91dAoraXMgZXhjZWVkZWQuCitJbiBzdWNoIGEgY2FzZSBlaXRoZXIgWEZSTV9BRV9DUiAocmVwbGF5IGV4Y2VlZGVkKSBvciBYRlJNX0FFX0NFICh0aW1lb3V0CitoYXBwZW5lZCkgaXMgc2V0IHRvIGluZm9ybSB0aGUgdXNlciB3aGF0IGhhcHBlbmVkLgorTm90ZSB0aGUgdHdvIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCitUaGUgbWVzc2FnZSB3aWxsIGFsd2F5cyBoYXZlIFhGUk1BX0xUSU1FX1ZBTCBhbmQgWEZSTUFfUkVQTEFZX1ZBTCBUTFZzLgorCitFeGNlcHRpb25zIHRvIHRocmVzaG9sZCBzZXR0aW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGhhdmUgYW4gU0EgdGhhdCBpcyBnZXR0aW5nIGhpdCBieSB0cmFmZmljIGluIGJ1cnN0cyBzdWNoIHRoYXQKK3RoZXJlIGlzIGEgcGVyaW9kIHdoZXJlIHRoZSB0aW1lciB0aHJlc2hvbGQgZXhwaXJlcyB3aXRoIG5vIHBhY2tldHMKK3NlZW4sIHRoZW4gYW4gb2RkIGJlaGF2aW9yIGlzIHNlZW4gYXMgZm9sbG93czoKK1RoZSBmaXJzdCBwYWNrZXQgYXJyaXZhbCBhZnRlciBhIHRpbWVyIGV4cGlyeSB3aWxsIHRyaWdnZXIgYSB0aW1lb3V0CithZXZlbnQ7IGkuZSB3ZSBkb250IHdhaXQgZm9yIGEgdGltZW91dCBwZXJpb2Qgb3IgYSBwYWNrZXQgdGhyZXNob2xkCit0byBiZSByZWFjaGVkLiBUaGlzIGlzIGRvbmUgZm9yIHNpbXBsaWNpdHkgYW5kIGVmZmljaWVuY3kgcmVhc29ucy4KKworLUpIUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9wY2kudHh0CmluZGV4IDcxMTIxMGIuLjY2YmJiZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3BjaS50eHQKQEAgLTI1OSw3ICsyNTksMTcgQEAKIHRvIGJlIGhhbmRsZWQgYnkgcGxhdGZvcm0gYW5kIGdlbmVyaWMgY29kZSwgbm90IGluZGl2aWR1YWwgZHJpdmVycy4KIAogCi04LiBPYnNvbGV0ZSBmdW5jdGlvbnMKKzguIFZlbmRvciBhbmQgZGV2aWNlIGlkZW50aWZpY2F0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGb3IgdGhlIGZ1dHVyZSwgbGV0J3MgYXZvaWQgYWRkaW5nIGRldmljZSBpZHMgdG8gaW5jbHVkZS9saW51eC9wY2lfaWRzLmguCisKK1BDSV9WRU5ET1JfSURfeHh4IGZvciB2ZW5kb3JzLCBhbmQgYSBoZXggY29uc3RhbnQgZm9yIGRldmljZSBpZHMuCisKK1JhdGlvbmFsZTogIFBDSV9WRU5ET1JfSURfeHh4IGNvbnN0YW50cyBhcmUgcmUtdXNlZCwgYnV0IGRldmljZSBpZHMgYXJlIG5vdC4KKyAgICBGdXJ0aGVyLCBkZXZpY2UgaWRzIGFyZSBhcmJpdHJhcnkgaGV4IG51bWJlcnMsIG5vcm1hbGx5IHVzZWQgb25seSBpbiBhCisgICAgc2luZ2xlIGxvY2F0aW9uLCB0aGUgcGNpX2RldmljZV9pZCB0YWJsZS4KKworOS4gT2Jzb2xldGUgZnVuY3Rpb25zCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIFRoZXJlIGFyZSBzZXZlcmFsIGZ1bmN0aW9ucyB3aGljaCB5b3UgbWlnaHQgY29tZSBhY3Jvc3Mgd2hlbiB0cnlpbmcgdG8KIHBvcnQgYW4gb2xkIGRyaXZlciB0byB0aGUgbmV3IFBDSSBpbnRlcmZhY2UuICBUaGV5IGFyZSBubyBsb25nZXIgcHJlc2VudApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLWNoYW5nZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLWNoYW5nZXMudHh0CmluZGV4IDk3NDIwZjAuLjQ3MzljNWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQKQEAgLTEsNSArMSwxMSBAQAogVGhpcyBmaWxlIGRldGFpbHMgY2hhbmdlcyBpbiAyLjYgd2hpY2ggYWZmZWN0IFBDTUNJQSBjYXJkIGRyaXZlciBhdXRob3JzOgogCisqIE5ldyByZWxlYXNlIGhlbHBlciAoYXMgb2YgMi42LjE3KQorICAgSW5zdGVhZCBvZiBjYWxsaW5nIHBjbWNpYV9yZWxlYXNlX3tjb25maWd1cmF0aW9uLGlvLGlycSx3aW59LCBhbGwgdGhhdCdzCisgICBuZWNlc3Nhcnkgbm93IGlzIGNhbGxpbmcgcGNtY2lhX2Rpc2FibGVfZGV2aWNlLiBBcyB0aGVyZSBpcyBubyB2YWxpZAorICAgcmVhc29uIGxlZnQgdG8gY2FsbCBwY21jaWFfcmVsZWFzZV9pbyBhbmQgcGNtY2lhX3JlbGVhc2VfaXJxLCB0aGUKKyAgIGV4cG9ydHMgZm9yIHRoZW0gd2VyZSByZW1vdmVkLgorCiAqIFVuaWZ5IGRldGFjaCBhbmQgUkVNT1ZBTCBldmVudCBjb2RlLCBhcyB3ZWxsIGFzIGF0dGFjaCBhbmQgSU5TRVJUSU9OCiAgIGNvZGUgKGFzIG9mIDIuNi4xNikKICAgICAgICB2b2lkICgqcmVtb3ZlKSAgICAgICAgICAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CmluZGV4IGQxOGE1N2QuLjQzYTg4OWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CkBAIC0xNDAsNyArMTQwLDcgQEAKIElCTSBUUCBUNDIJCQlzM19iaW9zICgyKQogSUJNIFRoaW5rUGFkIFQ0MnAgKDIzNzMtR1RHKQlzM19iaW9zICgyKQogSUJNIFRQIFgyMAkJCT8/PyAoKikKLUlCTSBUUCBYMzAJCQlzM19iaW9zICgyKQorSUJNIFRQIFgzMAkJCXMzX2Jpb3MsIHMzX21vZGUgKDQpCiBJQk0gVFAgWDMxIC8gVHlwZSAyNjcyLVhYSCAgICAgIG5vbmUgKDEpLCB1c2UgcmFkZW9udG9vbCAoaHR0cDovL2ZkZC5jb20vc29mdHdhcmUvcmFkZW9uLykgdG8gdHVybiBvZmYgYmFja2xpZ2h0LgogSUJNIFRQIFgzMgkJCW5vbmUgKDEpLCBidXQgYmFja2xpZ2h0IGlzIG9uIGFuZCB2aWRlbyBpcyB0cmFzaGVkIGFmdGVyIGxvbmcgc3VzcGVuZC4gczNfYmlvcyxzM19tb2RlICg0KSB3b3JrcyB0b28uIFBlcmhhcHMgdGhhdCBnZXRzIGJldHRlciByZXN1bHRzPwogSUJNIFRoaW5rcGFkIFg0MCBUeXBlIDIzNzEtN0pHICBzM19iaW9zLHMzX21vZGUgKDQpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAppbmRleCAwOWY2MzAwLi5jMTczODA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKQEAgLTEsMyArMSwyOCBAQAorUmVsZWFzZSBEYXRlCTogTW9uIEFwciAxMSAxMjoyNzoyMiBFU1QgMjAwNiAtIFNlb2ttYW5uIEp1IDxzanVAbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24gOiAyLjIwLjQuOCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNiAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuNyAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNiAoY21tIG1vZHVsZSkKKworMS4JRml4ZWQgYSBidWcgaW4gbWVnYXJhaWRfcmVzZXRfaGFuZGxlcigpLgorCUN1c3RvbWVyIHJlcG9ydGVkICJVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UKKwlhdCB2aXJ0dWFsIGFkZHJlc3MgMDAwMDAwMDAiIHdoZW4gc3lzdGVtIGdvZXMgdG8gcmVzZXQgY29uZGl0aW9uCisJZm9yIHNvbWUgcmVhc29uLiBJdCBoYXBwZW5lZCByYW5kb21seS4KKwlSb290IENhdXNlOiBpbiB0aGUgbWVnYXJhaWRfcmVzZXRfaGFuZGxlcigpLCB0aGVyZSBpcyBwb3NzaWJpbGl0eSBub3QKKwlyZXR1cm5pbmcgcGVuZGluZyBwYWNrZXRzIGluIHRoZSBwZW5kX2xpc3QgaWYgdGhlcmUgYXJlIG11bHRpcGxlCisJcGVuZGluZyBwYWNrZXRzLgorCUZpeDogTWFkZSB0aGUgY2hhbmdlIGluIHRoZSBkcml2ZXIgc28gdGhhdCBpdCB3aWxsIHJldHVybiBhbGwgcGFja2V0cworCWluIHRoZSBwZW5kX2xpc3QuCisKKzIuCUFkZGVkIGNoYW5nZSByZXF1ZXN0LgorCUFzIGZvdW5kIGluIHRoZSBmb2xsb3dpbmcgVVJMLCBybWIoKSBvbmx5IGRpZG4ndCBoZWxwIHRoZQorCXByb2JsZW0uIEkgaGFkIHRvIGluY3JlYXNlIHRoZSBsb29wIGNvdW50ZXIgdG8gMHhGRkZGRkYuICg2IEYncykKKwlodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPWxpbnV4LXNjc2kmbT0xMTA5NzEwNjA1MDI0OTcmdz0yCisKKwlJIGF0dGFjaGVkIGEgcGF0Y2ggZm9yIHlvdXIgcmVmZXJlbmNlLCB0b28uCisJQ291bGQgeW91IGNoZWNrIGFuZCBnZXQgdGhpcyBmaXggaW4geW91ciBkcml2ZXI/CisKKwlCZXN0IFJlZ2FyZHMsCisJSnVuJ2ljaGkgTm9tdXJhCisKIFJlbGVhc2UgRGF0ZQk6IEZyaSBOb3YgMTEgMTI6Mjc6MjIgRVNUIDIwMDUgLSBTZW9rbWFubiBKdSA8c2p1QGxzaWwuY29tPgogQ3VycmVudCBWZXJzaW9uIDogMi4yMC40LjcgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjYgKGNtbSBtb2R1bGUpCiBPbGRlciBWZXJzaW9uCTogMi4yMC40LjYgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjYgKGNtbSBtb2R1bGUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQKaW5kZXggMzMxYWZkNy4uY2U3NjdiOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dApAQCAtMTksOSArMTksOSBAQAogCVsyLTEtMV0gT3ZlcnZpZXcKIAlbMi0xLTJdIEZsb3cgb2Ygc2NtZHMgdGhyb3VnaCBFSAogCVsyLTEtM10gRmxvdyBvZiBjb250cm9sCi0gICAgWzItMl0gRUggdGhyb3VnaCBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpCi0JWzItMi0xXSBQcmUgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKLQlbMi0yLTJdIFBvc3QgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKKyAgICBbMi0yXSBFSCB0aHJvdWdoIHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQorCVsyLTItMV0gUHJlIHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKKwlbMi0yLTJdIFBvc3QgdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucwogCVsyLTItM10gVGhpbmdzIHRvIGNvbnNpZGVyCiAKIApAQCAtNDEzLDkgKzQxMyw5IEBACiAJICAgIGxheWVyIG9mIGZhaWx1cmUgb2YgdGhlIHNjbWRzLgogCiAKLVsyLTJdIEVIIHRocm91Z2ggaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQorWzItMl0gRUggdGhyb3VnaCB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkKIAotIGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgaXMgaW52b2tlZCBpbiB0aGUgcGxhY2Ugb2YKKyB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgaXMgaW52b2tlZCBpbiB0aGUgcGxhY2Ugb2YKIHNjc2lfdW5qYW1faG9zdCgpIGFuZCBpdCBpcyByZXNwb25zaWJsZSBmb3Igd2hvbGUgcmVjb3ZlcnkgcHJvY2Vzcy4KIE9uIGNvbXBsZXRpb24sIHRoZSBoYW5kbGVyIHNob3VsZCBoYXZlIG1hZGUgbG93ZXIgbGF5ZXJzIGZvcmdldCBhYm91dAogYWxsIGZhaWxlZCBzY21kcyBhbmQgZWl0aGVyIHJlYWR5IGZvciBuZXcgY29tbWFuZHMgb3Igb2ZmbGluZS4gIEFsc28sCkBAIC00MjQsNyArNDI0LDcgQEAKIGV4Y2VwdCBmb3IgIzEgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlaF9zdHJhdGVneV9oYW5kbGVyKCkuCiAKIAotWzItMi0xXSBQcmUgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKK1syLTItMV0gUHJlIHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKIAogIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZSBvbiBlbnRyeSB0byB0aGUgaGFuZGxlci4KIApAQCAtNDM3LDcgKzQzNyw3IEBACiAgLSBzaG9zdC0+aG9zdF9mYWlsZWQgPT0gc2hvc3QtPmhvc3RfYnVzeQogCiAKLVsyLTItMl0gUG9zdCBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucworWzItMi0yXSBQb3N0IHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKIAogIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUgb24gZXhpdCBmcm9tIHRoZSBoYW5kbGVyLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKaW5kZXggOGJiYWUzZS4uNzVhNTM1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dApAQCAtODA0LDcgKzgwNCw2IEBACiAgICBlaF9idXNfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgYnVzIHJlc2V0CiAgICBlaF9kZXZpY2VfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgZGV2aWNlIHJlc2V0CiAgICBlaF9ob3N0X3Jlc2V0X2hhbmRsZXIgLSByZXNldCBob3N0IChob3N0IGJ1cyBhZGFwdGVyKQotICAgZWhfc3RyYXRlZ3lfaGFuZGxlciAtIGRyaXZlciBzdXBwbGllZCBhbHRlcm5hdGUgdG8gc2NzaV91bmphbV9ob3N0KCkKICAgIGluZm8gLSBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4gaG9zdAogICAgaW9jdGwgLSBkcml2ZXIgY2FuIHJlc3BvbmQgdG8gaW9jdGxzCiAgICBwcm9jX2luZm8gLSBzdXBwb3J0cyAvcHJvYy9zY3NpL3tkcml2ZXJfbmFtZX0ve2hvc3Rfbm99CkBAIC05NzAsMjQgKzk2OSw2IEBACiAKIAogLyoqCi0gKiAgICAgIGVoX3N0cmF0ZWd5X2hhbmRsZXIgLSBkcml2ZXIgc3VwcGxpZWQgYWx0ZXJuYXRlIHRvIHNjc2lfdW5qYW1faG9zdCgpCi0gKiAgICAgIEBzaHA6IGhvc3Qgb24gd2hpY2ggZXJyb3IgaGFzIG9jY3VycmVkCi0gKgotICogICAgICBSZXR1cm5zIFRSVUUgaWYgaG9zdCB1bmphbW1lZCwgZWxzZSBGQUxTRS4KLSAqCi0gKiAgICAgIExvY2tzOiBub25lCi0gKgotICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGtlcm5lbCB0aHJlYWQKLSAqCi0gKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9laCB0aHJlYWQuIExMRCBzdXBwbGllZCBhbHRlcm5hdGUgdG8gCi0gKiAgICAgIHNjc2lfdW5qYW1faG9zdCgpIGZvdW5kIGluIHNjc2lfZXJyb3IuYwotICoKLSAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKLSAqKi8KLSAgICAgaW50IGVoX3N0cmF0ZWd5X2hhbmRsZXIoc3RydWN0IFNjc2lfSG9zdCAqIHNocCkKLQotCi0vKioKICAqICAgICAgaW5mbyAtIHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dCBnaXZlbiBob3N0OiBkcml2ZXIgbmFtZSBwbHVzIGRhdGEKICAqICAgICAgICAgICAgIHRvIGRpc3Rpbmd1aXNoIGdpdmVuIGhvc3QKICAqICAgICAgQHNocDogaG9zdCB0byBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlciBiL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlcgppbmRleCA0MmVmOTk3Li44OGFkNjE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC9kcml2ZXIKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyCkBAIC0zLDE0ICszLDExIEBACiAJCQktLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLSAgICRJZDogZHJpdmVyLHYgMS4xMCAyMDAyLzA3LzIyIDE1OjI3OjMwIHJtayBFeHAgJAotCi0KIFRoaXMgZG9jdW1lbnQgaXMgbWVhbnQgYXMgYSBicmllZiBvdmVydmlldyBvZiBzb21lIGFzcGVjdHMgb2YgdGhlIG5ldyBzZXJpYWwKIGRyaXZlci4gIEl0IGlzIG5vdCBjb21wbGV0ZSwgYW55IHF1ZXN0aW9ucyB5b3UgaGF2ZSBzaG91bGQgYmUgZGlyZWN0ZWQgdG8KIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KIAotVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBjb250YWluZWQgd2l0aGluIHNlcmlhbF9hbWJhLmMuCitUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGNvbnRhaW5lZCB3aXRoaW4gYW1iYV9wbDAxMS5jLgogCiAKIApAQCAtMzEsNiArMjgsMTEgQEAKIHRoZSBjb3JyZWN0IHBvcnQgc3RydWN0dXJlICh2aWEgdWFydF9nZXRfY29uc29sZSkgYW5kIGRlY29kaW5nIGNvbW1hbmQgbGluZQogYXJndW1lbnRzICh1YXJ0X3BhcnNlX29wdGlvbnMpLgogCitUaGVyZSBpcyBhbHNvIGEgaGVscGVyIGZ1bmN0aW9uICh1YXJ0X3dyaXRlX2NvbnNvbGUpIHdoaWNoIHBlcmZvcm1zIGEKK2NoYXJhY3RlciBieSBjaGFyYWN0ZXIgd3JpdGUsIHRyYW5zbGF0aW5nIG5ld2xpbmVzIHRvIENSTEYgc2VxdWVuY2VzLgorRHJpdmVyIHdyaXRlcnMgYXJlIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGltcGxlbWVudGluZwordGhlaXIgb3duIHZlcnNpb24uCisKIAogTG9ja2luZwogLS0tLS0tLQpAQCAtODYsNiArODgsNyBAQAogCQktIFRJT0NNX0RUUglEVFIgc2lnbmFsLgogCQktIFRJT0NNX09VVDEJT1VUMSBzaWduYWwuCiAJCS0gVElPQ01fT1VUMglPVVQyIHNpZ25hbC4KKwkJLSBUSU9DTV9MT09QCVNldCB0aGUgcG9ydCBpbnRvIGxvb3BiYWNrIG1vZGUuCiAJSWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQsIHRoZSBzaWduYWwgc2hvdWxkIGJlIGRyaXZlbgogCWFjdGl2ZS4gIElmIHRoZSBiaXQgaXMgY2xlYXIsIHRoZSBzaWduYWwgc2hvdWxkIGJlIGRyaXZlbgogCWluYWN0aXZlLgpAQCAtMTQxLDYgKzE0NCwxMCBAQAogICBlbmFibGVfbXMocG9ydCkKIAlFbmFibGUgdGhlIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHRzLgogCisJVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gIE1vZGVtIHN0YXR1cworCWludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gdGhlIHNodXRkb3duIG1ldGhvZCBpcworCWNhbGxlZC4KKwogCUxvY2tpbmc6IHBvcnQtPmxvY2sgdGFrZW4uCiAJSW50ZXJydXB0czogbG9jYWxseSBkaXNhYmxlZC4KIAlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKQEAgLTE2MCw2ICsxNjcsOCBAQAogCXN0YXRlLiAgRW5hYmxlIHRoZSBwb3J0IGZvciByZWNlcHRpb24uICBJdCBzaG91bGQgbm90IGFjdGl2YXRlCiAJUlRTIG5vciBEVFI7IHRoaXMgd2lsbCBiZSBkb25lIHZpYSBhIHNlcGFyYXRlIGNhbGwgdG8gc2V0X21jdHJsLgogCisJVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBwb3J0IGlzIGluaXRpYWxseSBvcGVuZWQuCisKIAlMb2NraW5nOiBwb3J0X3NlbSB0YWtlbi4KIAlJbnRlcnJ1cHRzOiBnbG9iYWxseSBkaXNhYmxlZC4KIApAQCAtMTY5LDYgKzE3OCwxMSBAQAogCVJUUyBub3IgRFRSOyB0aGlzIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSB2aWEgYSBzZXBhcmF0ZQogCWNhbGwgdG8gc2V0X21jdHJsLgogCisJRHJpdmVycyBtdXN0IG5vdCBhY2Nlc3MgcG9ydC0+aW5mbyBvbmNlIHRoaXMgY2FsbCBoYXMgY29tcGxldGVkLgorCisJVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIHVzZXJzIG9mCisJdGhpcyBwb3J0LgorCiAJTG9ja2luZzogcG9ydF9zZW0gdGFrZW4uCiAJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KIApAQCAtMjAwLDEyICsyMTQsMTMgQEAKIAlUaGUgaW50ZXJhY3Rpb24gb2YgdGhlIGlmbGFnIGJpdHMgaXMgYXMgZm9sbG93cyAocGFyaXR5IGVycm9yCiAJZ2l2ZW4gYXMgYW4gZXhhbXBsZSk6CiAJUGFyaXR5IGVycm9yCUlOUENLCUlHTlBBUgotCU5vbmUJCW4vYQluL2EJY2hhcmFjdGVyIHJlY2VpdmVkCi0JWWVzCQluL2EJMAljaGFyYWN0ZXIgZGlzY2FyZGVkCi0JWWVzCQkwCTEJY2hhcmFjdGVyIHJlY2VpdmVkLCBtYXJrZWQgYXMKKwluL2EJCTAJbi9hCWNoYXJhY3RlciByZWNlaXZlZCwgbWFya2VkIGFzCiAJCQkJCVRUWV9OT1JNQUwKLQlZZXMJCTEJMQljaGFyYWN0ZXIgcmVjZWl2ZWQsIG1hcmtlZCBhcworCU5vbmUJCTEJbi9hCWNoYXJhY3RlciByZWNlaXZlZCwgbWFya2VkIGFzCisJCQkJCVRUWV9OT1JNQUwKKwlZZXMJCTEJMAljaGFyYWN0ZXIgcmVjZWl2ZWQsIG1hcmtlZCBhcwogCQkJCQlUVFlfUEFSSVRZCisJWWVzCQkxCTEJY2hhcmFjdGVyIGRpc2NhcmRlZAogCiAJT3RoZXIgZmxhZ3MgbWF5IGJlIHVzZWQgKGVnLCB4b24veG9mZiBjaGFyYWN0ZXJzKSBpZiB5b3VyCiAJaGFyZHdhcmUgc3VwcG9ydHMgaGFyZHdhcmUgInNvZnQiIGZsb3cgY29udHJvbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggMWRlZjYwNC4uMGVlMmM3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTEyMCw2ICsxMjAsMzQgQEAKICAgICBlbmFibGUgIAktIGVuYWJsZSBjYXJkCiAJCS0gRGVmYXVsdDogZW5hYmxlZCwgZm9yIFBDSSBhbmQgSVNBIFBuUCBjYXJkcwogCisgIE1vZHVsZSBzbmQtYWRsaWIKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBBZExpYiBGTSBjYXJkcy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIE9QTCBjaGlwCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4gSXQgZG9lcyBub3Qgc3VwcG9ydCBhdXRvcHJvYmUsIHNvCisgICAgdGhlIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQuIEZvciBhY3R1YWwgQWRMaWIgRk0gY2FyZHMgaXQgd2lsbCBiZSAweDM4OC4KKyAgICBOb3RlIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGhhdmUgUENNIHN1cHBvcnQgYW5kIG5vIG1peGVyOyBvbmx5IEZNCisgICAgc3ludGhlc2lzLgorCisgICAgTWFrZSBzdXJlIHlvdSBoYXZlICJzYmlsb2FkIiBmcm9tIHRoZSBhbHNhLXRvb2xzIHBhY2thZ2UgYXZhaWxhYmxlIGFuZCwKKyAgICBhZnRlciBsb2FkaW5nIHRoZSBtb2R1bGUsIGZpbmQgb3V0IHRoZSBhc3NpZ25lZCBBTFNBIHNlcXVlbmNlciBwb3J0CisgICAgbnVtYmVyIHRocm91Z2ggInNiaWxvYWQgLWwiLiBFeGFtcGxlIG91dHB1dDoKKworICAgICAgUG9ydCAgICAgQ2xpZW50IG5hbWUgICAgICAgICAgICAgICAgICAgICAgIFBvcnQgbmFtZQorICAgICAgNjQ6MCAgICAgT1BMMiBGTSBzeW50aCAgICAgICAgICAgICAgICAgICAgIE9QTDIgRk0gUG9ydAorCisgICAgTG9hZCB0aGUgc3RkLnNiIGFuZCBkcnVtcy5zYiBwYXRjaGVzIGFsc28gc3VwcGxpZWQgYnkgc2JpbG9hZDoKKworICAgICAgc2JpbG9hZCAtcCA2NDowIHN0ZC5zYiBkcnVtcy5zYgorCisgICAgSWYgeW91IHVzZSB0aGlzIGRyaXZlciB0byBkcml2ZSBhbiBPUEwzLCB5b3UgY2FuIHVzZSBzdGQubzMgYW5kIGRydW1zLm8zCisgICAgaW5zdGVhZC4gVG8gaGF2ZSB0aGUgY2FyZCBwcm9kdWNlIHNvdW5kLCB1c2UgYXBsYXltaWRpIGZyb20gYWxzYS11dGlsczoKKworICAgICAgYXBsYXltaWRpIC1wIDY0OjAgZm9vLm1pZAorCiAgIE1vZHVsZSBzbmQtYWQxODE2YQogICAtLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTkwLDYgKzIxOCwxNSBAQAogCiAgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgogCisgIE1vZHVsZSBzbmQtYWxzMzAwCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yICBBdmFuY2UgTG9naWMgQUxTMzAwIGFuZCBBTFMzMDArCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKwogICBNb2R1bGUgc25kLWFsczQwMDAKICAgLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTcwMSw2ICs3MzgsNyBAQAogCSAgdW5pd2lsbAkzLWphY2sKIAkgIEYxNzM0CQkyLWphY2sKIAkgIGxnCQlMRyBsYXB0b3AgKG0xIGV4cHJlc3MgZHVhbCkKKwkgIGxnLWx3CQlMRyBMVzIwIGxhcHRvcAogCSAgdGVzdAkJZm9yIHRlc3RpbmcvZGVidWdnaW5nIHB1cnBvc2UsIGFsbW9zdCBhbGwgY29udHJvbHMgY2FuIGJlCiAJCQlhZGp1c3RlZC4gIEFwcGVhcmluZyBvbmx5IHdoZW4gY29tcGlsZWQgd2l0aAogCQkJJENPTkZJR19TTkRfREVCVUc9eQpAQCAtMTAxMyw2ICsxMDUxLDIzIEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgTW9kdWxlIHNuZC1taXJvCisgIC0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBNaXJvIHNvdW5kY2FyZHM6IG1pcm9TT1VORCBQQ00gMSBwcm8sIAorCQkJCW1pcm9TT1VORCBQQ00gMTIsCisJCQkJbWlyb1NPVU5EIFBDTSAyMCBSYWRpby4KKworICAgIHBvcnQJLSBQb3J0ICMgKDB4NTMwLDB4NjA0LDB4ZTgwLDB4ZjQwKQorICAgIGlycQkJLSBJUlEgIyAoNSw3LDksMTAsMTEpCisgICAgZG1hMQktIDFzdCBkbWEgIyAoMCwxLDMpCisgICAgZG1hMgktIDJuZCBkbWEgIyAoMCwxKQorICAgIG1wdV9wb3J0CS0gTVBVLTQwMSBwb3J0ICMgKDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwKQorICAgIG1wdV9pcnEJLSBNUFUtNDAxIGlycSAjICg1LDcsOSwxMCkKKyAgICBmbV9wb3J0CS0gRk0gUG9ydCAjICgweDM4OCkKKyAgICB3c3MJCS0gZW5hYmxlIFdTUyBtb2RlCisgICAgaWRlCQktIGVuYWJsZSBvbmJvYXJkIGlkZSBzdXBwb3J0CisKICAgTW9kdWxlIHNuZC1taXhhcnQKICAgLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTIwMiw2ICsxMjU3LDIwIEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgTW9kdWxlIHNuZC1yaXB0aWRlCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBDb25leGFudCBSaXB0aWRlIGNoaXAKKworICAgICAgam95c3RpY2tfcG9ydAktIEpveXN0aWNrIHBvcnQgIyAoZGVmYXVsdDogMHgyMDApCisgICAgICBtcHVfcG9ydAkJLSBNUFU0MDEgcG9ydCAjIChkZWZhdWx0OiAweDMzMCkKKyAgICAgIG9wbDNfcG9ydAkJLSBPUEwzIHBvcnQgIyAoZGVmYXVsdDogMHgzODgpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4KKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIHRoZSBmaXJtd2FyZSBsb2FkZXIgc3VwcG9ydCBvbiBrZXJuZWwuCisgICAgWW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgZmlybXdhcmUgZmlsZSAicmlwdGlkZS5oZXgiIHRvIHRoZSBzdGFuZGFyZAorICAgIGZpcm13YXJlIHBhdGggKGUuZy4gL2xpYi9maXJtd2FyZSkuCisKICAgTW9kdWxlIHNuZC1ybWUzMgogICAtLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpb3BoaWxlLVVzYi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQXVkaW9waGlsZS1Vc2IudHh0CmluZGV4IDQ2OTJjOGUuLmI1MzVjMmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpb3BoaWxlLVVzYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0F1ZGlvcGhpbGUtVXNiLnR4dApAQCAtMSw0ICsxLDQgQEAKLQlHdWlkZSB0byB1c2luZyBNLUF1ZGlvIEF1ZGlvcGhpbGUgVVNCIHdpdGggQUxTQSBhbmQgSmFjawl2MS4yCisJR3VpZGUgdG8gdXNpbmcgTS1BdWRpbyBBdWRpb3BoaWxlIFVTQiB3aXRoIEFMU0EgYW5kIEphY2sJdjEuMwogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAkgICAgVGhpYmF1bHQgTGUgTWV1ciA8VGhpYmF1bHQuTGVNZXVyQHN1cGVsZWMuZnI+CkBAIC0yMiwxNiArMjIsMTYgQEAKICAqIE1pZGkgSW4gKE1pKQogICogTWlkaSBPdXQgKE1vKQogCi1UaGUgaW50ZXJuYWwgREFDL0FEQyBoYXMgdGhlIGZvbGxvd2luZyBjYXJhY3RlcmlzdGljczoKK1RoZSBpbnRlcm5hbCBEQUMvQURDIGhhcyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcmlzdGljczoKICogc2FtcGxlIGRlcHRoIG9mIDE2IG9yIDI0IGJpdHMKICogc2FtcGxlIHJhdGUgZnJvbSA4a0h6IHRvIDk2a0h6Ci0qIFR3byBwb3J0cyBjYW4ndCB1c2UgZGlmZmVyZW50IHNhbXBsZSBkZXB0aHMgYXQgdGhlIHNhbWUgdGltZS5Nb3Jlb3ZlciwgdGhlIAorKiBUd28gcG9ydHMgY2FuJ3QgdXNlIGRpZmZlcmVudCBzYW1wbGUgZGVwdGhzIGF0IHRoZSBzYW1lIHRpbWUuIE1vcmVvdmVyLCB0aGUgCiBBdWRpb3BoaWxlIFVTQiBkb2N1bWVudGF0aW9uIGdpdmVzIHRoZSBmb2xsb3dpbmcgV2FybmluZzogIlBsZWFzZSBleGl0IGFueSAKIGF1ZGlvIGFwcGxpY2F0aW9uIHJ1bm5pbmcgYmVmb3JlIHN3aXRjaGluZyBiZXR3ZWVuIGJpdCBkZXB0aHMiCiAKIER1ZSB0byB0aGUgVVNCIDEuMSBiYW5kd2lkdGggbGltaXRhdGlvbiwgYSBsaW1pdGVkIG51bWJlciBvZiBpbnRlcmZhY2VzIGNhbiBiZSAKIGFjdGl2YXRlZCBhdCB0aGUgc2FtZSB0aW1lIGRlcGVuZGluZyBvbiB0aGUgYXVkaW8gbW9kZSBzZWxlY3RlZDoKLSAqIDE2LWJpdC80OGtIeiA9PT4gNCBjaGFubmVscyBpbi8gNCBjaGFubmVscyBvdXQKKyAqIDE2LWJpdC80OGtIeiA9PT4gNCBjaGFubmVscyBpbi80IGNoYW5uZWxzIG91dAogICAgLSBBaStBbytEaStEbwogICogMjQtYml0LzQ4a0h6ID09PiA0IGNoYW5uZWxzIGluLzIgY2hhbm5lbHMgb3V0LCAKICAgICAgICAgICAgICAgICAgICAgb3IgMiBjaGFubmVscyBpbi80IGNoYW5uZWxzIG91dApAQCAtNDEsOCArNDEsOCBAQAogCiBJbXBvcnRhbnQgZmFjdHMgYWJvdXQgdGhlIERpZ2l0YWwgaW50ZXJmYWNlOgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRoZSBEbyBwb3J0IGFkZGl0aW9ubmFseSBzdXBwb3J0cyBzdXJyb3VuZC1lbmNvZGVkIEFDLTMgYW5kIERUUyBwYXNzdGhyb3VnaCwgCi10aG91Z2ggSSBoYXZlbid0IHRlc3RlZCBpdCB1bmRlciBsaW51eAorICogVGhlIERvIHBvcnQgYWRkaXRpb25hbGx5IHN1cHBvcnRzIHN1cnJvdW5kLWVuY29kZWQgQUMtMyBhbmQgRFRTIHBhc3N0aHJvdWdoLCAKK3Rob3VnaCBJIGhhdmVuJ3QgdGVzdGVkIGl0IHVuZGVyIExpbnV4CiAgICAtIE5vdGUgdGhhdCBpbiB0aGlzIHNldHVwIG9ubHkgdGhlIERvIGludGVyZmFjZSBjYW4gYmUgZW5hYmxlZAogICogQXBhcnQgZnJvbSByZWNvcmRpbmcgYW4gYXVkaW8gZGlnaXRhbCBzdHJlYW0sIGVuYWJsaW5nIHRoZSBEaSBwb3J0IGlzIGEgd2F5IAogdG8gc3luY2hyb25pemUgdGhlIGRldmljZSB0byBhbiBleHRlcm5hbCBzYW1wbGUgY2xvY2sKQEAgLTYwLDI0ICs2MCwyMyBAQAogVGhlIEF1ZGlvcGhpbGUgVVNCIE1JREkgcG9ydHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN1cHBvcnRlZCBvbmNlIHRoZSAKIGZvbGxvd2luZyBtb2R1bGVzIGhhdmUgYmVlbiBsb2FkZWQ6CiAgKiBzbmQtdXNiLWF1ZGlvCi0gKiBzbmQtc2VxCiAgKiBzbmQtc2VxLW1pZGkKIAotTm8gYWRkaXRpb25uYWwgc2V0dGluZyBpcyByZXF1aXJlZC4KK05vIGFkZGl0aW9uYWwgc2V0dGluZyBpcyByZXF1aXJlZC4KIAogMi4yIC0gQXVkaW8gcG9ydHMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKIEF1ZGlvIGZ1bmN0aW9ucyBvZiB0aGUgQXVkaW9waGlsZSBVU0IgZGV2aWNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBzbmQtdXNiLWF1ZGlvIAogbW9kdWxlLiBUaGlzIG1vZHVsZSBjYW4gd29yayBpbiBhIGRlZmF1bHQgbW9kZSAod2l0aG91dCBhbnkgZGV2aWNlLXNwZWNpZmljIAotcGFyYW1ldGVyKSwgb3IgaW4gYW4gYWR2YW5jZWQgbW9kZSB3aXRoIHRoZSBkZXZpY2Utc3BlY2lmaWMgcGFyYW1ldGVyIGNhbGxlZCAKK3BhcmFtZXRlciksIG9yIGluIGFuICJhZHZhbmNlZCIgbW9kZSB3aXRoIHRoZSBkZXZpY2Utc3BlY2lmaWMgcGFyYW1ldGVyIGNhbGxlZCAKICJkZXZpY2Vfc2V0dXAiLgogCiAyLjIuMSAtIERlZmF1bHQgQWxzYSBkcml2ZXIgbW9kZQogCi1UaGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGhlIHNuZC11c2ItYXVkaW8gZHJpdmVyIGlzIHRvIHBhcnNlIHRoZSBkZXZpY2UgCitUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgc25kLXVzYi1hdWRpbyBkcml2ZXIgaXMgdG8gcGFyc2UgdGhlIGRldmljZSAKIGNhcGFiaWxpdGllcyBhdCBzdGFydHVwIGFuZCBlbmFibGUgYWxsIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIGRldmljZSAoaW5jbHVkaW5nIAotYWxsIHBvcnRzIGF0IGFueSBzYW1wbGUgcmF0ZXMgYW5kIGFueSBzYW1wbGUgZGVwdGhzIHN1cHBvcnRlZCkuIFRoaXMgYXBwcm9hY2ggCithbGwgcG9ydHMgYXQgYW55IHN1cHBvcnRlZCBzYW1wbGUgcmF0ZXMgYW5kIHNhbXBsZSBkZXB0aHMpLiBUaGlzIGFwcHJvYWNoIAogaGFzIHRoZSBhZHZhbnRhZ2UgdG8gbGV0IHRoZSBkcml2ZXIgZWFzaWx5IHN3aXRjaCBmcm9tIHNhbXBsZSByYXRlcy9kZXB0aHMgCiBhdXRvbWF0aWNhbGx5IGFjY29yZGluZyB0byB0aGUgbmVlZCBvZiB0aGUgYXBwbGljYXRpb24gY2xhaW1pbmcgdGhlIGRldmljZS4KIApAQCAtMTE0LDkgKzExMyw5IEBACiBGb3IgcGVvcGxlIGhhdmluZyB0aGlzIHByb2JsZW0sIHRoZSBzbmQtdXNiLWF1ZGlvIG1vZHVsZSBoYXMgYSBuZXcgbW9kdWxlIAogcGFyYW1ldGVyIGNhbGxlZCAiZGV2aWNlX3NldHVwIi4KIAotMi4yLjIuMSAtIEluaXRpYWxpemluZyB0aGUgd29ya2luZyBtb2RlIG9mIHRoZSBBdWRpb2hpbGUgVVNCCisyLjIuMi4xIC0gSW5pdGlhbGl6aW5nIHRoZSB3b3JraW5nIG1vZGUgb2YgdGhlIEF1ZGlvcGhpbGUgVVNCCiAKLUFzIGZhciBhcyB0aGUgQXVkaW9oaWxlIFVTQiBkZXZpY2UgaXMgY29uY2VybmVkLCB0aGlzIHZhbHVlIGxldCB0aGUgdXNlciAKK0FzIGZhciBhcyB0aGUgQXVkaW9waGlsZSBVU0IgZGV2aWNlIGlzIGNvbmNlcm5lZCwgdGhpcyB2YWx1ZSBsZXQgdGhlIHVzZXIgCiBzcGVjaWZ5OgogICogdGhlIHNhbXBsZSBkZXB0aAogICogdGhlIHNhbXBsZSByYXRlCkBAIC0xNzQsMjAgKzE3MywyMCBAQAogCiBJTVBPUlRBTlQgTk9URSBXSEVOIFNXSVRDSElORyBDT05GSUdVUkFUSU9OOgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogWW91IG1heSBuZWVkIHRvIF9maXJzdF8gaW50aWFsaXplIHRoZSBtb2R1bGUgd2l0aCB0aGUgY29ycmVjdCBkZXZpY2Vfc2V0dXAgCisgKiBZb3UgbWF5IG5lZWQgdG8gX2ZpcnN0XyBpbml0aWFsaXplIHRoZSBtb2R1bGUgd2l0aCB0aGUgY29ycmVjdCBkZXZpY2Vfc2V0dXAgCiAgICBwYXJhbWV0ZXIgYW5kIF9vbmx5X2FmdGVyXyB0dXJuIG9uIHRoZSBBdWRpb3BoaWxlIFVTQiBkZXZpY2UKICAqIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIHdoZW4gc3dpdGNoaW5nIHRoZSBzYW1wbGUgZGVwdGg6Ci0gICAtIGZpcnN0IHRydW4gb2ZmIHRoZSBkZXZpY2UKLSAgIC0gZGUtcmVnaXN0ZXIgdGhlIHNuZC11c2ItYXVkaW8gbW9kdWxlCi0gICAtIGNoYW5nZSB0aGUgZGV2aWNlX3NldHVwIHBhcmFtZXRlciAoYnkgZWl0aGVyIG1hbnVhbGx5IHJlcHJvYmluZyB0aGUgbW9kdWxlIAotICAgICBvciBjaGFuZ2luZyBtb2Rwcm9iZS5jb25mKQorICAgLSBmaXJzdCB0dXJuIG9mZiB0aGUgZGV2aWNlCisgICAtIGRlLXJlZ2lzdGVyIHRoZSBzbmQtdXNiLWF1ZGlvIG1vZHVsZSAobW9kcHJvYmUgLXIpCisgICAtIGNoYW5nZSB0aGUgZGV2aWNlX3NldHVwIHBhcmFtZXRlciBieSBjaGFuZ2luZyB0aGUgZGV2aWNlX3NldHVwCisgICAgIG9wdGlvbiBpbiAvZXRjL21vZHByb2JlLmNvbmYgCiAgICAtIHR1cm4gb24gdGhlIGRldmljZQogCiAyLjIuMi4zIC0gQXVkaW9waGlsZSBVU0IncyBkZXZpY2Vfc2V0dXAgc3RydWN0dXJlCiAKIElmIHlvdSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZV9zZXR1cCBtYWdpYyBudW1iZXJzIGZvciB0aGUgQXVkaW9waGlsZSAKIFVTQiwgeW91IG5lZWQgc29tZSB2ZXJ5IGJhc2ljIHVuZGVyc3RhbmRpbmcgb2YgYmluYXJ5IGNvbXB1dGF0aW9uLiBIb3dldmVyLCAKLXRoaXMgaXMgbm90IHJlcXVpcmVkIHRvIHVzZSB0aGUgcGFyYW1ldGVyIGFuZCB5b3UgbWF5IHNraXAgdGhpIHNlY3Rpb24uCit0aGlzIGlzIG5vdCByZXF1aXJlZCB0byB1c2UgdGhlIHBhcmFtZXRlciBhbmQgeW91IG1heSBza2lwIHRoaXMgc2VjdGlvbi4KIAogVGhlIGRldmljZV9zZXR1cCBpcyBvbmUgYnl0ZSBsb25nIGFuZCBpdHMgc3RydWN0dXJlIGlzIHRoZSBmb2xsb3dpbmc6CiAKQEAgLTIzMSwxMSArMjMwLDExIEBACiAKIDIuMi4zIC0gIFVTQiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGlzIGRldmljZQogCi1Zb3UgbWF5IHNhZmVseSBza2lwIHRoaXMgc2VjdGlvbiBpZiB5b3UncmUgbm90IGludGVycmVzdGVkIGluIGRyaXZlciAKK1lvdSBtYXkgc2FmZWx5IHNraXAgdGhpcyBzZWN0aW9uIGlmIHlvdSdyZSBub3QgaW50ZXJlc3RlZCBpbiBkcml2ZXIgCiBkZXZlbG9wbWVudC4KIAotVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzb21lIGludGVybmFscyBhc3BlY3Qgb2YgdGhlIGRldmljZSBhbmQgc3VtbWFyaXplIHRoZSAKLWRhdGEgSSBnb3QgYnkgdXNiLXNub29waW5nIHRoZSB3aW5kb3dzIGFuZCBsaW51eCBkcml2ZXJzLgorVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzb21lIGludGVybmFsIGFzcGVjdHMgb2YgdGhlIGRldmljZSBhbmQgc3VtbWFyaXplIHRoZSAKK2RhdGEgSSBnb3QgYnkgdXNiLXNub29waW5nIHRoZSB3aW5kb3dzIGFuZCBMaW51eCBkcml2ZXJzLgogCiBUaGUgTS1BdWRpbyBBdWRpb3BoaWxlIFVTQiBoYXMgNyBVU0IgSW50ZXJmYWNlczoKIGEgIlVTQiBpbnRlcmZhY2UiOgpAQCAtMjc3LDkgKzI3Niw5IEBACiAgIC0gMTYtYml0IGRlcHRoLCA4LTQ4a0h6IHNhbXBsZSBtb2RlCiAgIC0gU3luY2ggcGxheWJhY2sgKERvKSwgYXVkaW8gZm9ybWF0IHR5cGUgSUlJIElFQzE5MzdfQUMtMwogCi1JbiBvcmRlciB0byBlbnN1cmUgYSBjb3JyZWN0IGludGlhbGl6YXRpb24gb2YgdGhlIGRldmljZSwgdGhlIGRyaXZlciAKK0luIG9yZGVyIHRvIGVuc3VyZSBhIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRldmljZSwgdGhlIGRyaXZlciAKIF9tdXN0X2tub3dfIGhvdyB0aGUgZGV2aWNlIHdpbGwgYmUgdXNlZDoKLSAqIGlmIERUUyBpcyBjaG9vc2VuLCBvbmx5IEludGVyZmFjZSAyIHdpdGggQWx0U2V0IG5iLjYgbXVzdCBiZQorICogaWYgRFRTIGlzIGNob3Nlbiwgb25seSBJbnRlcmZhY2UgMiB3aXRoIEFsdFNldCBuYi42IG11c3QgYmUKICAgIHJlZ2lzdGVyZWQKICAqIGlmIDk2S0h6IG9ubHkgQWx0U2V0cyBuYi4xIG9mIGVhY2ggaW50ZXJmYWNlIG11c3QgYmUgc2VsZWN0ZWQKICAqIGlmIHNhbXBsZXMgYXJlIHVzaW5nIDI0Yml0cy80OEtIeiB0aGVuIEFsdFNldCAyIG11c3QgbWUgdXNlZCBpZgpAQCAtMjkwLDcgKzI4OSw3IEBACiAgICBpcyBub3QgY29ubmVjdGVkCiAKIFdoZW4gZGV2aWNlX3NldHVwIGlzIGdpdmVuIGFzIGEgcGFyYW1ldGVyIHRvIHRoZSBzbmQtdXNiLWF1ZGlvIG1vZHVsZSwgdGhlIAotcGFyc2VfYXVkaW9fZW5wb2ludCBmdW5jdGlvbiB1c2VzIGEgcXVpcmsgY2FsbGVkIAorcGFyc2VfYXVkaW9fZW5kcG9pbnRzIGZ1bmN0aW9uIHVzZXMgYSBxdWlyayBjYWxsZWQgCiAiYXVkaW9waGlsZV9za2lwX3NldHRpbmdfcXVpcmsiIGluIG9yZGVyIHRvIHByZXZlbnQgQWx0U2V0dGluZ3Mgbm90IAogY29ycmVzcG9uZGluZyB0byBkZXZpY2Vfc2V0dXAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGluIHRoZSBkcml2ZXIuCiAKQEAgLTMxNyw5ICszMTYsOCBAQAogdXNpbmcgdGhlICJkZWZhdWx0IiBBTFNBIGRldmljZS4gVGhpcyBpcyBsZXNzIGVmZmljaWVudCB0aGFuIGl0IGNvdWxkIGJlLiAKIENvbnNpZGVyIHVzaW5nIGEgaGFyZHdhcmUgZGV2aWNlIGluc3RlYWQgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIHBsdWcgbGF5ZXIuIgogCi0KIDMuMiAtIFBhdGNoaW5nIGFsc2EgdG8gdXNlIGRpcmVjdCBwY20gZGV2aWNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQSBwYXRjaCBmb3IgSmFjayBieSBBbmRyZWFzIFN0ZWlubWV0eiBhZGRzIHN1cHBvcnQgZm9yIEJpZyBFbmRpYW4gZGV2aWNlcy4gCiBIb3dldmVyIGl0IGhhcyBub3QgYmVlbiBpbmNsdWRlZCBpbiB0aGUgQ1ZTIHRyZWUuCiAKQEAgLTMzMSwzICszMjksMzIgQEAKIGxpbmU6CiAgICUgamFja2QgLVIgLWRhbHNhIC1QaHc6MSwwIC1yNDgwMDAgLXAxMjggLW4yIC1EIC1DaHc6MSwxCiAKKzMuMiAtIEdldHRpbmcgMiBpbnB1dCBhbmQvb3Igb3V0cHV0IGludGVyZmFjZXMgaW4gSmFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHlvdSBjYW4gc2VlLCBzdGFydGluZyB0aGUgSmFjayBzZXJ2ZXIgdGhpcyB3YXkgd2lsbCBvbmx5IGVuYWJsZSAxIHN0ZXJlbworaW5wdXQgKERpIG9yIEFpKSBhbmQgMSBzdGVyZW8gb3V0cHV0IChBbyBvciBEbykuCisKK1RoaXMgaXMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorKiBKYWNrIGNhbiBvbmx5IG9wZW4gb25lIGNhcHR1cmUgZGV2aWNlIGFuZCBvbmUgcGxheWJhY2sgZGV2aWNlIGF0IGEgdGltZQorKiBUaGUgQXVkaW9waGlsZSBVU0IgaXMgc2VlbiBhcyAyIChvciB0aHJlZSkgQWxzYSBkZXZpY2VzOiBodzoxLDAsIGh3OjEsMQorICAoYW5kIG9wdGlvbmFsbHkgaHc6MSwyKQorSWYgeW91IHdhbnQgdG8gZ2V0IEFpK0RpIGFuZC9vciBBbytEbyBzdXBwb3J0IHdpdGggSmFjaywgeW91IHdvdWxkIG5lZWQgdG8KK2NvbWJpbmUgdGhlIEFsc2EgZGV2aWNlcyBpbnRvIG9uZSBsb2dpY2FsICJjb21wbGV4IiBkZXZpY2UuCisKK0lmIHlvdSB3YW50IHRvIGdpdmUgaXQgYSB0cnksIEkgcmVjb21tZW5kIHJlYWRpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20KK3RoaXMgcGFnZTogaHR0cDovL3d3dy5zb3VuZC1tYW4uY28udWsvbGludXhhdWRpby9pY2UxNzEybXVsdGkuaHRtbAorSXQgaXMgcmVsYXRlZCB0byBhbm90aGVyIGRldmljZSAoaWNlMTcxMikgYnV0IGNhbiBiZSBhZGFwdGVkIHRvIHN1aXQKK3RoZSBBdWRpb3BoaWxlIFVTQi4KKworRW5hYmxpbmcgbXVsdGlwbGUgQXVkaW9waGlsZSBVU0IgaW50ZXJmYWNlcyBmb3IgSmFja2Qgd2lsbCBjZXJ0YWlubHkgcmVxdWlyZToKKyogcGF0Y2hpbmcgSmFjayB3aXRoIHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCAiQmlnIEVuZGlhbiIgcGF0Y2gKKyogcGF0Y2hpbmcgSmFja2Qgd2l0aCB0aGUgTU1BUF9DT01QTEVYIHBhdGNoIChzZWUgdGhlIGljZTE3MTIgcGFnZSkKKyogcGF0Y2hpbmcgdGhlIGFsc2EtbGliL3NyYy9wY20vcGNtX211bHRpLmMgZmlsZSAoc2VlIHRoZSBpY2UxNzEyIHBhZ2UpCisqIGRlZmluZSBhIG11bHRpIGRldmljZSAoY29tYmluYXRpb24gb2YgaHc6MSwwIGFuZCBodzoxLDEpIGluIHlvdXIgLmFzb3VuZHJjCisgIGZpbGUgCisqIHN0YXJ0IGphY2tkIHdpdGggdGhpcyBkZXZpY2UKKworSSBoYWQgbm8gc3VjY2VzcyBpbiB0ZXN0aW5nIHRoaXMgZm9yIG5vdywgYnV0IHRoaXMgbWF5IGJlIGR1ZSB0byBteSBPUworY29uZmlndXJhdGlvbi4gSWYgeW91IGhhdmUgYW55IHN1Y2Nlc3Mgd2l0aCB0aGlzIGtpbmQgb2Ygc2V0dXAsIHBsZWFzZQorZHJvcCBtZSBhbiBlbWFpbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbAppbmRleCA2ZmVlZjllLi4xZmFmNzYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCkBAIC0xMTIzLDggKzExMjMsOCBAQAogICAgICAgICAgIGlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAvKiBjaGVjayBQQ0kgYXZhaWxhYmlsaXR5ICgyOGJpdCBETUEpICovCi0gICAgICAgICAgaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDAgfHwKLSAgICAgICAgICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwKSB7CisgICAgICAgICAgaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwIHx8CisgICAgICAgICAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDApIHsKICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZXJyb3IgdG8gc2V0IDI4Yml0IG1hc2sgRE1BXG4iKTsKICAgICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKQEAgLTExNzIsNyArMTE3Miw3IEBACiAgIH0gICAgICAgIAogCiAgIC8qIFBDSSBJRHMgKi8KLSAgc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9teWNoaXBfaWRzW10gPSB7CisgIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbXljaGlwX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAgICAgICAgICAgeyBQQ0lfVkVORE9SX0lEX0ZPTywgUENJX0RFVklDRV9JRF9CQVIsCiAgICAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAogICAgICAgICAgIC4uLi4KQEAgLTEyMTYsNyArMTIxNiw3IEBACiAgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIFBDSSByZXNvdXJjZXMgaXMgZG9uZSBpbiB0aGUKICAgICAgIDxmdW5jdGlvbj5wcm9iZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIGFuZCB1c3VhbGx5IGFuIGV4dHJhCiAgICAgICA8ZnVuY3Rpb24+eHh4X2NyZWF0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgd3JpdHRlbiBmb3IgdGhpcwotICAgICAgcHVycG9zZS4gCisgICAgICBwdXJwb3NlLgogICAgICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KQEAgLTEyMjUsNyArMTIyNSw3IEBACiAgICAgICBhbGxvY2F0aW5nIHJlc291cmNlcy4gQWxzbywgeW91IG5lZWQgdG8gc2V0IHRoZSBwcm9wZXIgUENJIERNQQogICAgICAgbWFzayB0byBsaW1pdCB0aGUgYWNjZXNzZWQgaS9vIHJhbmdlLiBJbiBzb21lIGNhc2VzLCB5b3UgbWlnaHQKICAgICAgIG5lZWQgdG8gY2FsbCA8ZnVuY3Rpb24+cGNpX3NldF9tYXN0ZXIoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLAotICAgICAgdG9vLiAKKyAgICAgIHRvby4KICAgICAgIDwvcGFyYT4KIAogICAgICAgPHBhcmE+CkBAIC0xMjM2LDggKzEyMzYsOCBAQAogPCFbQ0RBVEFbCiAgIGlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogICAgICAgICAgIHJldHVybiBlcnI7Ci0gIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwIHx8Ci0gICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDApIHsKKyAgaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwIHx8CisgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7CiAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOwogICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogICAgICAgICAgIHJldHVybiAtRU5YSU87CkBAIC0xMjU2LDEzICsxMjU2LDEzIEBACiAgICAgICBmdW5jdGlvbnMuIFVubGlrZSBBTFNBIHZlci4wLjUueC4sIHRoZXJlIGFyZSBubyBoZWxwZXJzIGZvcgogICAgICAgdGhhdC4gQW5kIHRoZXNlIHJlc291cmNlcyBtdXN0IGJlIHJlbGVhc2VkIGluIHRoZSBkZXN0cnVjdG9yCiAgICAgICBmdW5jdGlvbiAoc2VlIGJlbG93KS4gQWxzbywgb24gQUxTQSAwLjkueCwgeW91IGRvbid0IG5lZWQgdG8KLSAgICAgIGFsbG9jYXRlIChwc2V1ZG8tKURNQSBmb3IgUENJIGxpa2UgQUxTQSAwLjUueC4gCisgICAgICBhbGxvY2F0ZSAocHNldWRvLSlETUEgZm9yIFBDSSBsaWtlIEFMU0EgMC41LnguCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgogICAgICAgICBOb3cgYXNzdW1lIHRoYXQgdGhpcyBQQ0kgZGV2aWNlIGhhcyBhbiBJL08gcG9ydCB3aXRoIDggYnl0ZXMKICAgICAgICAgYW5kIGFuIGludGVycnVwdC4gVGhlbiBzdHJ1Y3QgPHN0cnVjdG5hbWU+bXljaGlwPC9zdHJ1Y3RuYW1lPiB3aWxsIGhhdmUgdGhlCi0gICAgICAgIGZvbGxvd2luZyBmaWVsZHM6IAorICAgICAgICBmb2xsb3dpbmcgZmllbGRzOgogCiAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CiAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgpAQCAtMTU2NSw3ICsxNTY1LDcgQEAKICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiA8IVtDREFUQVsKLSAgc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9teWNoaXBfaWRzW10gPSB7CisgIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbXljaGlwX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAgICAgICAgICAgeyBQQ0lfVkVORE9SX0lEX0ZPTywgUENJX0RFVklDRV9JRF9CQVIsCiAgICAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAogICAgICAgICAgIC4uLi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eCBiL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzQ1ZjNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CkBAIC0wLDAgKzEsMjM0IEBACivvu79QWEEyeHggU1BJIG9uIFNTUCBkcml2ZXIgSE9XVE8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBhIG1pbmkgaG93dG8gb24gdGhlIHB4YTJ4eF9zcGkgZHJpdmVyLiAgVGhlIGRyaXZlciB0dXJucyBhIFBYQTJ4eAorc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgaW50byBhIFNQSSBtYXN0ZXIgY29udHJvbGxlcgorKHNlZSBEb2N1bWVudGF0aW9uL3NwaS9zcGlfc3VtbWFyeSkuIFRoZSBkcml2ZXIgaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMKKworLSBTdXBwb3J0IGZvciBhbnkgUFhBMnh4IFNTUAorLSBTU1AgUElPIGFuZCBTU1AgRE1BIGRhdGEgdHJhbnNmZXJzLgorLSBFeHRlcm5hbCBhbmQgSW50ZXJuYWwgKFNTUEZSTSkgY2hpcCBzZWxlY3RzLgorLSBQZXIgc2xhdmUgZGV2aWNlIChjaGlwKSBjb25maWd1cmF0aW9uLgorLSBGdWxsIHN1c3BlbmQsIGZyZWV6ZSwgcmVzdW1lIHN1cHBvcnQuCisKK1RoZSBkcml2ZXIgaXMgYnVpbHQgYXJvdW5kIGEgInNwaV9tZXNzYWdlIiBmaWZvIHNlcnZpY2VkIGJ5IHdvcmtxdWV1ZSBhbmQgYQordGFza2xldC4gVGhlIHdvcmtxdWV1ZSwgInB1bXBfbWVzc2FnZXMiLCBkcml2ZXMgbWVzc2FnZSBmaWZvIGFuZCB0aGUgdGFza2xldAorKHB1bXBfdHJhbnNmZXIpIGlzIHJlc3BvbnNpYmxlIGZvciBxdWV1aW5nIFNQSSB0cmFuc2FjdGlvbnMgYW5kIHNldHRpbmcgdXAgYW5kCitsYXVuY2hpbmcgdGhlIGRtYS9pbnRlcnJ1cHQgZHJpdmVuIHRyYW5zZmVycy4KKworRGVjbGFyaW5nIFBYQTJ4eCBNYXN0ZXIgQ29udHJvbGxlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUeXBpY2FsbHkgYSBTUEkgbWFzdGVyIGlzIGRlZmluZWQgaW4gdGhlIGFyY2gvLi4uL21hY2gtKi9ib2FyZC0qLmMgYXMgYQorInBsYXRmb3JtIGRldmljZSIuICBUaGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gaXMgcGFzc2VkIHRvIHRoZSBkcml2ZXIgdmlhIGEgdGFibGUKK2ZvdW5kIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHhfc3BpLmg6CisKK3N0cnVjdCBweGEyeHhfc3BpX21hc3RlciB7CisJZW51bSBweGFfc3NwX3R5cGUgc3NwX3R5cGU7CisJdTMyIGNsb2NrX2VuYWJsZTsKKwl1MTYgbnVtX2NoaXBzZWxlY3Q7CisJdTggZW5hYmxlX2RtYTsKK307CisKK1RoZSAicHhhMnh4X3NwaV9tYXN0ZXIuc3NwX3R5cGUiIGZpZWxkIG11c3QgaGF2ZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMyBhbmQKK2luZm9ybXMgdGhlIGRyaXZlciB3aGljaCBmZWF0dXJlcyBhIHBhcnRpY3VsYXIgU1NQIHN1cHBvcnRzLgorCitUaGUgInB4YTJ4eF9zcGlfbWFzdGVyLmNsb2NrX2VuYWJsZSIgZmllbGQgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSB0aGUKK2NvcnJlc3BvbmRpbmcgU1NQIHBlcmlwaGVyYWwgYmxvY2sgaW4gdGhlICJDbG9jayBFbmFibGUgUmVnaXN0ZXIgKENLRU4iKS4gU2VlCit0aGUgIlBYQTJ4eCBEZXZlbG9wZXIgTWFudWFsIiBzZWN0aW9uICJDbG9ja3MgYW5kIFBvd2VyIE1hbmFnZW1lbnQiLgorCitUaGUgInB4YTJ4eF9zcGlfbWFzdGVyLm51bV9jaGlwc2VsZWN0IiBmaWVsZCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mCitzbGF2ZSBkZXZpY2UgKGNoaXBzKSBhdHRhY2hlZCB0byB0aGlzIFNQSSBtYXN0ZXIuCisKK1RoZSAicHhhMnh4X3NwaV9tYXN0ZXIuZW5hYmxlX2RtYSIgZmllbGQgaW5mb3JtcyB0aGUgZHJpdmVyIHRoYXQgU1NQIERNQSBzaG91bGQKK2JlIHVzZWQuICBUaGlzIGNhdXNlZCB0aGUgZHJpdmVyIHRvIGFjcXVpcmUgdHdvIERNQSBjaGFubmVsczogcnhfY2hhbm5lbCBhbmQKK3R4X2NoYW5uZWwuICBUaGUgcnhfY2hhbm5lbCBoYXMgYSBoaWdoZXIgRE1BIHNlcnZpY2UgcHJpb3JpdHkgdGhlIHR4X2NoYW5uZWwuCitTZWUgdGhlICJQWEEyeHggRGV2ZWxvcGVyIE1hbnVhbCIgc2VjdGlvbiAiRE1BIENvbnRyb2xsZXIiLgorCitOU1NQIE1BU1RFUiBTQU1QTEUKKy0tLS0tLS0tLS0tLS0tLS0tLQorQmVsb3cgaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiB1c2luZyB0aGUgUFhBMjU1IE5TU1AuCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhX3NwaV9uc3NwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gX19QUkVHKFNTQ1IwX1AoMikpLCAvKiBTdGFydCBhZGRyZXNzIG9mIE5TU1AgKi8KKwkJLmVuZAk9IF9fUFJFRyhTU0NSMF9QKDIpKSArIDB4MmMsIC8qIFJhbmdlIG9mIHJlZ2lzdGVycyAqLworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX05TU1AsIC8qIE5TU1AgSVJRICovCisJCS5lbmQJPSBJUlFfTlNTUCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgcHhhX25zc3BfbWFzdGVyX2luZm8gPSB7CisJLnNzcF90eXBlID0gUFhBMjV4X05TU1AsIC8qIFR5cGUgb2YgU1NQICovCisJLmNsb2NrX2VuYWJsZSA9IENLRU45X05TU1AsIC8qIE5TU1AgUGVyaXBoZXJhbCBjbG9jayAqLworCS5udW1fY2hpcHNlbGVjdCA9IDEsIC8qIE1hdGNoZXMgdGhlIG51bWJlciBvZiBjaGlwcyBhdHRhY2hlZCB0byBOU1NQICovCisJLmVuYWJsZV9kbWEgPSAxLCAvKiBFbmFibGVzIE5TU1AgRE1BICovCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGFfc3BpX25zc3AgPSB7CisJLm5hbWUgPSAicHhhMnh4LXNwaSIsIC8qIE1VU1QgQkUgVEhJUyBWQUxVRSwgc28gZGV2aWNlIG1hdGNoIGRyaXZlciAqLworCS5pZCA9IDIsIC8qIEJ1cyBudW1iZXIsIE1VU1QgTUFUQ0ggU1NQIG51bWJlciAxLi5uICovCisJLnJlc291cmNlID0gcHhhX3NwaV9uc3NwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUocHhhX3NwaV9uc3NwX3Jlc291cmNlcyksCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcHhhX25zc3BfbWFzdGVyX2luZm8sIC8qIFBhc3NlZCB0byBkcml2ZXIgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZweGFfc3BpX25zc3AsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYm9hcmRfaW5pdCh2b2lkKQoreworCSh2b2lkKXBsYXRmb3JtX2FkZF9kZXZpY2UoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK0RlY2xhcmluZyBTbGF2ZSBEZXZpY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVHlwaWNhbGx5IGVhY2ggU1BJIHNsYXZlIChjaGlwKSBpcyBkZWZpbmVkIGluIHRoZSBhcmNoLy4uLi9tYWNoLSovYm9hcmQtKi5jCit1c2luZyB0aGUgInNwaV9ib2FyZF9pbmZvIiBzdHJ1Y3R1cmUgZm91bmQgaW4gImxpbnV4L3NwaS9zcGkuaCIuIFNlZQorIkRvY3VtZW50YXRpb24vc3BpL3NwaV9zdW1tYXJ5IiBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKworRWFjaCBzbGF2ZSBkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIFBYQSBtdXN0IHByb3ZpZGUgc2xhdmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbgoraW5mb3JtYXRpb24gdmlhIHRoZSBzdHJ1Y3R1cmUgInB4YTJ4eF9zcGlfY2hpcCIgZm91bmQgaW4KKyJpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhMnh4X3NwaS5oIi4gIFRoZSBweGEyeHhfc3BpIG1hc3RlciBjb250cm9sbGVyIGRyaXZlcgord2lsbCB1c2VzIHRoZSBjb25maWd1cmF0aW9uIHdoZW5ldmVyIHRoZSBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGggdGhlIHNsYXZlCitkZXZpY2UuCisKK3N0cnVjdCBweGEyeHhfc3BpX2NoaXAgeworCXU4IHR4X3RocmVzaG9sZDsKKwl1OCByeF90aHJlc2hvbGQ7CisJdTggZG1hX2J1cnN0X3NpemU7CisJdTMyIHRpbWVvdXRfbWljcm9zZWNzOworCXU4IGVuYWJsZV9sb29wYmFjazsKKwl2b2lkICgqY3NfY29udHJvbCkodTMyIGNvbW1hbmQpOworfTsKKworVGhlICJweGEyeHhfc3BpX2NoaXAudHhfdGhyZXNob2xkIiBhbmQgInB4YTJ4eF9zcGlfY2hpcC5yeF90aHJlc2hvbGQiIGZpZWxkcyBhcmUKK3VzZWQgdG8gY29uZmlndXJlIHRoZSBTU1AgaGFyZHdhcmUgZmlmby4gIFRoZXNlIGZpZWxkcyBhcmUgY3JpdGljYWwgdG8gdGhlCitwZXJmb3JtYW5jZSBvZiBweGEyeHhfc3BpIGRyaXZlciBhbmQgbWlzY29uZmlndXJhdGlvbiB3aWxsIHJlc3VsdCBpbiByeAorZmlmbyBvdmVycnVucyAoZXNwZWNpYWxseSBpbiBQSU8gbW9kZSB0cmFuc2ZlcnMpLiBHb29kIGRlZmF1bHQgdmFsdWVzIGFyZQorCisJLnR4X3RocmVzaG9sZCA9IDEyLAorCS5yeF90aHJlc2hvbGQgPSA0LAorCitUaGUgInB4YTJ4eF9zcGlfY2hpcC5kbWFfYnVyc3Rfc2l6ZSIgZmllbGQgaXMgdXNlZCB0byBjb25maWd1cmUgUFhBMnh4IERNQQorZW5naW5lIGFuZCBpcyByZWxhdGVkIHRoZSAic3BpX2RldmljZS5iaXRzX3Blcl93b3JkIiBmaWVsZC4gIFJlYWQgYW5kIHVuZGVyc3RhbmQKK3RoZSBQWEEyeHggIkRldmVsb3BlciBNYW51YWwiIHNlY3Rpb25zIG9uIHRoZSBETUEgY29udHJvbGxlciBhbmQgU1NQIENvbnRyb2xsZXJzCit0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdmFsdWUuIEFuIFNTUCBjb25maWd1cmVkIGZvciBieXRlLXdpZGUgdHJhbnNmZXJzIHdvdWxkCit1c2UgYSB2YWx1ZSBvZiA4LgorCitUaGUgInB4YTJ4eF9zcGlfY2hpcC50aW1lb3V0X21pY3Jvc2VjcyIgZmllbGRzIGlzIHVzZWQgdG8gZWZmaWNpZW50bHkgaGFuZGxlCit0cmFpbGluZyBieXRlcyBpbiB0aGUgU1NQIHJlY2VpdmVyIGZpZm8uICBUaGUgY29ycmVjdCB2YWx1ZSBmb3IgdGhpcyBmaWVsZCBpcworZGVwZW5kZW50IG9uIHRoZSBTUEkgYnVzIHNwZWVkICgic3BpX2JvYXJkX2luZm8ubWF4X3NwZWVkX2h6IikgYW5kIHRoZSBzcGVjaWZpYworc2xhdmUgZGV2aWNlLiAgUGxlYXNlIG5vdGUgdGhlIHRoZSBQWEEyeHggU1NQIDEgZG9lcyBub3Qgc3VwcG9ydCB0cmFpbGluZyBieXRlCit0aW1lb3V0cyBhbmQgbXVzdCBidXN5LXdhaXQgYW55IHRyYWlsaW5nIGJ5dGVzLgorCitUaGUgInB4YTJ4eF9zcGlfY2hpcC5lbmFibGVfbG9vcGJhY2siIGZpZWxkIGlzIHVzZWQgdG8gcGxhY2UgdGhlIFNTUCBwb3J0aW5nCitpbnRvIGludGVybmFsIGxvb3BiYWNrIG1vZGUuICBJbiB0aGlzIG1vZGUgdGhlIFNTUCBjb250cm9sbGVyIGludGVybmFsbHkKK2Nvbm5lY3RzIHRoZSBTU1BUWCBwaW4gdGhlIHRoZSBTU1BSWCBwaW4uICBUaGlzIGlzIHVzZWZ1bCBmb3IgaW5pdGlhbCBzZXR1cAordGVzdGluZy4KKworVGhlICJweGEyeHhfc3BpX2NoaXAuY3NfY29udHJvbCIgZmllbGQgaXMgdXNlZCB0byBwb2ludCB0byBhIGJvYXJkIHNwZWNpZmljCitmdW5jdGlvbiBmb3IgYXNzZXJ0aW5nL2RlYXNzZXJ0aW5nIGEgc2xhdmUgZGV2aWNlIGNoaXAgc2VsZWN0LiAgSWYgdGhlIGZpZWxkIGlzCitOVUxMLCB0aGUgcHhhMnh4X3NwaSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXIgYXNzdW1lcyB0aGF0IHRoZSBTU1AgcG9ydCBpcworY29uZmlndXJlZCB0byB1c2UgU1NQRlJNIGluc3RlYWQuCisKK05TU1AgU0FMVkUgU0FNUExFCistLS0tLS0tLS0tLS0tLS0tLQorVGhlIHB4YTJ4eF9zcGlfY2hpcCBzdHJ1Y3R1cmUgaXMgcGFzc2VkIHRvIHRoZSBweGEyeHhfc3BpIGRyaXZlciBpbiB0aGUKKyJzcGlfYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEiIGZpZWxkLiBCZWxvdyBpcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uIHVzaW5nCit0aGUgUFhBMjU1IE5TU1AuCisKKy8qIENoaXAgU2VsZWN0IGNvbnRyb2wgZm9yIHRoZSBDUzg0MTVBIFNQSSBzbGF2ZSBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGNzODQxNWFfY3NfY29udHJvbCh1MzIgY29tbWFuZCkKK3sKKwlpZiAoY29tbWFuZCAmIFBYQTJYWF9DU19BU1NFUlQpCisJCUdQQ1IoMikgPSBHUElPX2JpdCgyKTsKKwllbHNlCisJCUdQU1IoMikgPSBHUElPX2JpdCgyKTsKK30KKworLyogQ2hpcCBTZWxlY3QgY29udHJvbCBmb3IgdGhlIENTODQwNUEgU1BJIHNsYXZlIGRldmljZSAqLworc3RhdGljIHZvaWQgY3M4NDA1YV9jc19jb250cm9sKHUzMiBjb21tYW5kKQoreworCWlmIChjb21tYW5kICYgUFhBMlhYX0NTX0FTU0VSVCkKKwkJR1BDUigzKSA9IEdQSU9fYml0KDMpOworCWVsc2UKKwkJR1BTUigzKSA9IEdQSU9fYml0KDMpOworfQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBjczg0MTVhX2NoaXBfaW5mbyA9IHsKKwkudHhfdGhyZXNob2xkID0gMTIsIC8qIFNTUCBoYXJkd2FyZCBGSUZPIHRocmVzaG9sZCAqLworCS5yeF90aHJlc2hvbGQgPSA0LCAvKiBTU1AgaGFyZHdhcmQgRklGTyB0aHJlc2hvbGQgKi8KKwkuZG1hX2J1cnN0X3NpemUgPSA4LCAvKiBCeXRlIHdpZGUgdHJhbnNmZXJzIHVzZWQgc28gOCBieXRlIGJ1cnN0cyAqLworCS50aW1lb3V0X21pY3Jvc2VjcyA9IDY0LCAvKiBXYWl0IGF0IGxlYXN0IDY0dXNlYyB0byBoYW5kbGUgdHJhaWxpbmcgKi8KKwkuY3NfY29udHJvbCA9IGNzODQxNWFfY3NfY29udHJvbCwgLyogVXNlIGV4dGVybmFsIGNoaXAgc2VsZWN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBjczg0MDVhX2NoaXBfaW5mbyA9IHsKKwkudHhfdGhyZXNob2xkID0gMTIsIC8qIFNTUCBoYXJkd2FyZCBGSUZPIHRocmVzaG9sZCAqLworCS5yeF90aHJlc2hvbGQgPSA0LCAvKiBTU1AgaGFyZHdhcmQgRklGTyB0aHJlc2hvbGQgKi8KKwkuZG1hX2J1cnN0X3NpemUgPSA4LCAvKiBCeXRlIHdpZGUgdHJhbnNmZXJzIHVzZWQgc28gOCBieXRlIGJ1cnN0cyAqLworCS50aW1lb3V0X21pY3Jvc2VjcyA9IDY0LCAvKiBXYWl0IGF0IGxlYXN0IDY0dXNlYyB0byBoYW5kbGUgdHJhaWxpbmcgKi8KKwkuY3NfY29udHJvbCA9IGNzODQwNWFfY3NfY29udHJvbCwgLyogVXNlIGV4dGVybmFsIGNoaXAgc2VsZWN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHN0cmVldHJhY2VyX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJjczg0MTVhIiwgLyogTmFtZSBvZiBzcGlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLworCQkubWF4X3NwZWVkX2h6ID0gMzY4NjQwMCwgLyogUnVuIFNTUCBhcyBmYXN0IGEgcG9zc2JpbGUgKi8KKwkJLmJ1c19udW0gPSAyLCAvKiBGcmFtZXdvcmsgYnVzIG51bWJlciAqLworCQkuY2hpcF9zZWxlY3QgPSAwLCAvKiBGcmFtZXdvcmsgY2hpcCBzZWxlY3QgKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMOyAvKiBObyBzcGlfZHJpdmVyIHNwZWNpZmljIGNvbmZpZyAqLworCQkuY29udHJvbGxlcl9kYXRhID0gJmNzODQxNWFfY2hpcF9pbmZvLCAvKiBNYXN0ZXIgY2hpcCBjb25maWcgKi8KKwkJLmlycSA9IFNUUkVFVFJBQ0VSX0FQQ0lfSVJRLCAvKiBTbGF2ZSBkZXZpY2UgaW50ZXJydXB0ICovCisJfSwKKwl7CisJCS5tb2RhbGlhcyA9ICJjczg0MDVhIiwgLyogTmFtZSBvZiBzcGlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLworCQkubWF4X3NwZWVkX2h6ID0gMzY4NjQwMCwgLyogUnVuIFNTUCBhcyBmYXN0IGEgcG9zc2JpbGUgKi8KKwkJLmJ1c19udW0gPSAyLCAvKiBGcmFtZXdvcmsgYnVzIG51bWJlciAqLworCQkuY2hpcF9zZWxlY3QgPSAxLCAvKiBGcmFtZXdvcmsgY2hpcCBzZWxlY3QgKi8KKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZjczg0MDVhX2NoaXBfaW5mbywgLyogTWFzdGVyIGNoaXAgY29uZmlnICovCisJCS5pcnEgPSBTVFJFRVRSQUNFUl9BUENJX0lSUSwgLyogU2xhdmUgZGV2aWNlIGludGVycnVwdCAqLworCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc3RyZWV0cmFjZXJfaW5pdCh2b2lkKQoreworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHN0cmVldHJhY2VyX3NwaV9ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoc3RyZWV0cmFjZXJfc3BpX2JvYXJkX2luZm8pKTsKK30KKworCitETUEgYW5kIFBJTyBJL08gU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBweGEyeHhfc3BpIGRyaXZlciBzdXBwb3J0IGJvdGggRE1BIGFuZCBpbnRlcnJ1cHQgZHJpdmVuIFBJTyBtZXNzYWdlCit0cmFuc2ZlcnMuICBUaGUgZHJpdmVyIGRlZmF1bHRzIHRvIFBJTyBtb2RlIGFuZCBETUEgdHJhbnNmZXJzIG11c3QgZW5hYmxlZCBieQorc2V0dGluZyB0aGUgImVuYWJsZV9kbWEiIGZsYWcgaW4gdGhlICJweGEyeHhfc3BpX21hc3RlciIgc3RydWN0dXJlIGFuZCBhbmQKK2Vuc3VyaW5nIHRoYXQgdGhlICJweGEyeHhfc3BpX2NoaXAuZG1hX2J1cnN0X3NpemUiIGZpZWxkIGlzIG5vbi16ZXJvLiAgVGhlIERNQQorbW9kZSBzdXBwb3J0IGJvdGggY29oZXJlbnQgYW5kIHN0cmVhbSBiYXNlZCBETUEgbWFwcGluZ3MuCisKK1RoZSBmb2xsb3dpbmcgbG9naWMgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgSS9PIHRvIGJlIHVzZWQgb24KK2EgcGVyICJzcGlfdHJhbnNmZXIiIGJhc2lzOgorCitpZiAhZW5hYmxlX2RtYSBvciBkbWFfYnVyc3Rfc2l6ZSA9PSAwIHRoZW4KKwlhbHdheXMgdXNlIFBJTyB0cmFuc2ZlcnMKKworaWYgc3BpX21lc3NhZ2UuaXNfZG1hX21hcHBlZCBhbmQgcnhfZG1hX2J1ZiAhPSAwIGFuZCB0eF9kbWFfYnVmICE9IDAgdGhlbgorCXVzZSBjb2hlcmVudCBETUEgbW9kZQorCitpZiByeF9idWYgYW5kIHR4X2J1ZiBhcmUgYWxpZ25lZCBvbiA4IGJ5dGUgYm91bmRhcnkgdGhlbgorCXVzZSBzdHJlYW1pbmcgRE1BIG1vZGUKKworb3RoZXJ3aXNlCisJdXNlIFBJTyB0cmFuc2ZlcgorCitUSEFOS1MgVE8KKy0tLS0tLS0tLQorCitEYXZpZCBCcm93bmVsbCBhbmQgb3RoZXJzIGZvciBtZW50b3JpbmcgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgZHJpdmVyLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeSBiL0RvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5CmluZGV4IGE1ZmZiYTMuLjA2ODczMmQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQorKysgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQpAQCAtNDE0LDcgKzQxNCwzMyBAQAogVGhlIGRyaXZlciB3aWxsIGluaXRpYWxpemUgdGhlIGZpZWxkcyBvZiB0aGF0IHNwaV9tYXN0ZXIsIGluY2x1ZGluZyB0aGUKIGJ1cyBudW1iZXIgKG1heWJlIHRoZSBzYW1lIGFzIHRoZSBwbGF0Zm9ybSBkZXZpY2UgSUQpIGFuZCB0aHJlZSBtZXRob2RzCiB1c2VkIHRvIGludGVyYWN0IHdpdGggdGhlIFNQSSBjb3JlIGFuZCBTUEkgcHJvdG9jb2wgZHJpdmVycy4gIEl0IHdpbGwKLWFsc28gaW5pdGlhbGl6ZSBpdHMgb3duIGludGVybmFsIHN0YXRlLgorYWxzbyBpbml0aWFsaXplIGl0cyBvd24gaW50ZXJuYWwgc3RhdGUuICAoU2VlIGJlbG93IGFib3V0IGJ1cyBudW1iZXJpbmcKK2FuZCB0aG9zZSBtZXRob2RzLikKKworQWZ0ZXIgeW91IGluaXRpYWxpemUgdGhlIHNwaV9tYXN0ZXIsIHRoZW4gdXNlIHNwaV9yZWdpc3Rlcl9tYXN0ZXIoKSB0bworcHVibGlzaCBpdCB0byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiAgQXQgdGhhdCB0aW1lLCBkZXZpY2Ugbm9kZXMgZm9yCit0aGUgY29udHJvbGxlciBhbmQgYW55IHByZWRlY2xhcmVkIHNwaSBkZXZpY2VzIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUsCithbmQgdGhlIGRyaXZlciBtb2RlbCBjb3JlIHdpbGwgdGFrZSBjYXJlIG9mIGJpbmRpbmcgdGhlbSB0byBkcml2ZXJzLgorCitJZiB5b3UgbmVlZCB0byByZW1vdmUgeW91ciBTUEkgY29udHJvbGxlciBkcml2ZXIsIHNwaV91bnJlZ2lzdGVyX21hc3RlcigpCit3aWxsIHJldmVyc2UgdGhlIGVmZmVjdCBvZiBzcGlfcmVnaXN0ZXJfbWFzdGVyKCkuCisKKworQlVTIE5VTUJFUklORworCitCdXMgbnVtYmVyaW5nIGlzIGltcG9ydGFudCwgc2luY2UgdGhhdCdzIGhvdyBMaW51eCBpZGVudGlmaWVzIGEgZ2l2ZW4KK1NQSSBidXMgKHNoYXJlZCBTQ0ssIE1PU0ksIE1JU08pLiAgVmFsaWQgYnVzIG51bWJlcnMgc3RhcnQgYXQgemVyby4gIE9uCitTT0Mgc3lzdGVtcywgdGhlIGJ1cyBudW1iZXJzIHNob3VsZCBtYXRjaCB0aGUgbnVtYmVycyBkZWZpbmVkIGJ5IHRoZSBjaGlwCittYW51ZmFjdHVyZXIuICBGb3IgZXhhbXBsZSwgaGFyZHdhcmUgY29udHJvbGxlciBTUEkyIHdvdWxkIGJlIGJ1cyBudW1iZXIgMiwKK2FuZCBzcGlfYm9hcmRfaW5mbyBmb3IgZGV2aWNlcyBjb25uZWN0ZWQgdG8gaXQgd291bGQgdXNlIHRoYXQgbnVtYmVyLgorCitJZiB5b3UgZG9uJ3QgaGF2ZSBzdWNoIGhhcmR3YXJlLWFzc2lnbmVkIGJ1cyBudW1iZXIsIGFuZCBmb3Igc29tZSByZWFzb24KK3lvdSBjYW4ndCBqdXN0IGFzc2lnbiB0aGVtLCB0aGVuIHByb3ZpZGUgYSBuZWdhdGl2ZSBidXMgbnVtYmVyLiAgVGhhdCB3aWxsCit0aGVuIGJlIHJlcGxhY2VkIGJ5IGEgZHluYW1pY2FsbHkgYXNzaWduZWQgbnVtYmVyLiBZb3UnZCB0aGVuIG5lZWQgdG8gdHJlYXQKK3RoaXMgYXMgYSBub24tc3RhdGljIGNvbmZpZ3VyYXRpb24gKHNlZSBhYm92ZSkuCisKKworU1BJIE1BU1RFUiBNRVRIT0RTCiAKICAgICBtYXN0ZXItPnNldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiAJVGhpcyBzZXRzIHVwIHRoZSBkZXZpY2UgY2xvY2sgcmF0ZSwgU1BJIG1vZGUsIGFuZCB3b3JkIHNpemVzLgpAQCAtNDMxLDYgKzQ1Nyw5IEBACiAJc3RhdGUgaXQgZHluYW1pY2FsbHkgYXNzb2NpYXRlcyB3aXRoIHRoYXQgZGV2aWNlLiAgSWYgeW91IGRvIHRoYXQsCiAJYmUgc3VyZSB0byBwcm92aWRlIHRoZSBjbGVhbnVwKCkgbWV0aG9kIHRvIGZyZWUgdGhhdCBzdGF0ZS4KIAorCitTUEkgTUVTU0FHRSBRVUVVRQorCiBUaGUgYnVsayBvZiB0aGUgZHJpdmVyIHdpbGwgYmUgbWFuYWdpbmcgdGhlIEkvTyBxdWV1ZSBmZWQgYnkgdHJhbnNmZXIoKS4KIAogVGhhdCBxdWV1ZSBjb3VsZCBiZSBwdXJlbHkgY29uY2VwdHVhbC4gIEZvciBleGFtcGxlLCBhIGRyaXZlciB1c2VkIG9ubHkKQEAgLTQ0MCw2ICs0NjksOSBAQAogb2Z0ZW4gRE1BIChlc3BlY2lhbGx5IGlmIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgaW4gU1BJIGZsYXNoKSwgYW5kCiBleGVjdXRpb24gY29udGV4dHMgbGlrZSBJUlEgaGFuZGxlcnMsIHRhc2tsZXRzLCBvciB3b3JrcXVldWVzIChzdWNoCiBhcyBrZXZlbnRkKS4gIFlvdXIgZHJpdmVyIGNhbiBiZSBhcyBmYW5jeSwgb3IgYXMgc2ltcGxlLCBhcyB5b3UgbmVlZC4KK1N1Y2ggYSB0cmFuc2ZlcigpIG1ldGhvZCB3b3VsZCBub3JtYWxseSBqdXN0IGFkZCB0aGUgbWVzc2FnZSB0byBhCitxdWV1ZSwgYW5kIHRoZW4gc3RhcnQgc29tZSBhc3luY2hyb25vdXMgdHJhbnNmZXIgZW5naW5lICh1bmxlc3MgaXQncworYWxyZWFkeSBydW5uaW5nKS4KIAogCiBUSEFOS1MgVE8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCA4YzcxOTU0Li5iY2E1MDkwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC01Miw3ICs1Miw3IEBACiAgNTEgLT4gUHJvVmlkZW8gUFY5NTIgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTU0MDo5NTI0XQogIDUyIC0+IEF2ZXJNZWRpYSBBdmVyVFYvMzA1ICAgICAgICAgICAgICAgICAgICAgWzE0NjE6MjEwOF0KICA1MyAtPiBBU1VTIFRWLUZNIDcxMzUgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjQ4NDVdCi0gNTQgLT4gTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gRk0gICAgICAgICAgICAgICBbNTE2ODowMjE0LDE0ODk6MDIxNF0KKyA1NCAtPiBMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSAvIEdvbGQgICAgICAgIFs1MTY4OjAyMTQsMTQ4OTowMjE0LDUxNjg6MDMwNF0KICA1NSAtPiBMaWZlVmlldyBGbHlEVkItVCBEVU8gICAgICAgICAgICAgICAgICAgIFs1MTY4OjAzMDZdCiAgNTYgLT4gQXZlcm1lZGlhIEFWZXJUViAzMDcgICAgICAgICAgICAgICAgICAgICBbMTQ2MTphNzBhXQogIDU3IC0+IEF2ZXJtZWRpYSBBVmVyVFYgR08gMDA3IEZNICAgICAgICAgICAgICAgWzE0NjE6ZjMxZl0KQEAgLTg0LDcgKzg0LDcgQEAKICA4MyAtPiBUZXJyYXRlYyBDaW5lcmd5IDI1MCBQQ0kgVFYgICAgICAgICAgICAgIFsxNTNiOjExNjBdCiAgODQgLT4gTGlmZVZpZXcgRmx5RFZCIFRyaW8gICAgICAgICAgICAgICAgICAgICBbNTE2ODowMzE5XQogIDg1IC0+IEF2ZXJUViBEVkItVCA3NzcgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6MmMwNV0KLSA4NiAtPiBMaWZlVmlldyBGbHlEVkItVCAgICAgICAgICAgICAgICAgICAgICAgIFs1MTY4OjAzMDFdCisgODYgLT4gTGlmZVZpZXcgRmx5RFZCLVQgLyBHZW5pdXMgVmlkZW9Xb25kZXIgRFZCLVQgWzUxNjg6MDMwMSwxNDg5OjAzMDFdCiAgODcgLT4gQURTIEluc3RhbnQgVFYgRHVvIENhcmRidXMgUFRWMzMxICAgICAgICBbMDMzMToxNDIxXQogIDg4IC0+IFRldmlvbi9LV29ybGQgRFZCLVQgMjIwUkYgICAgICAgICAgICAgICAgWzE3ZGU6NzIwMV0KICA4OSAtPiBFTFNBIEVYLVZJU0lPTiA3MDBUViAgICAgICAgICAgICAgICAgICAgIFsxMDQ4OjIyNmNdCkBAIC05MiwzICs5Miw0IEBACiAgOTEgLT4gQVZlck1lZGlhIEExNjkgQiAgICAgICAgICAgICAgICAgICAgICAgICBbMTQ2MTo3MzYwXQogIDkyIC0+IEFWZXJNZWRpYSBBMTY5IEIxICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6NjM2MF0KICA5MyAtPiBNZWRpb24gNzEzNCBCcmlkZ2UgIzIgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDVdCisgOTQgLT4gTGlmZVZpZXcgRmx5RFZCLVQgSHlicmlkIENhcmRidXMgICAgICAgICBbNTE2ODozMzA2LDUxNjg6MzUwMl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2V0NjF4MjUxLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZXQ2MXgyNTEudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3VzYi9ldDYxeDI1MS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvZXQ2MXgyNTEudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9pYm1jYW0udHh0CnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vdXNiL2libWNhbS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvaWJtY2FtLnR4dAppbmRleCBjMjUwMDM2Li40YTQwYTJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvaWJtY2FtLnR4dApAQCAtMTIyLDcgKzEyMiw3IEBACiAtIEEgTGludXggYm94IHdpdGggVVNCIHN1cHBvcnQgKDIuMy8yLjQ7IDIuMiB3L2JhY2twb3J0IG1heSB3b3JrKQogCiAtIEEgVmlkZW80TGludXggY29tcGF0aWJsZSBmcmFtZSBncmFiYmVyIHByb2dyYW0gc3VjaCBhcyB4YXd0di4KLSAgCisKIEhPVyBUTyBDT01QSUxFIFRIRSBEUklWRVI6CiAKIFlvdSBuZWVkIHRvIGNvbXBpbGUgdGhlIGRyaXZlciBvbmx5IGlmIHlvdSBhcmUgYSBkZXZlbG9wZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL292NTExLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvb3Y1MTEudHh0CnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vdXNiL292NTExLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9vdjUxMS50eHQKaW5kZXggYTdmYzA0My4uMTQyNzQxZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Ivb3Y1MTEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvb3Y1MTEudHh0CkBAIC05LDcgKzksNyBAQAogCiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgT1Y1MTEsIGEgVVNCLW9ubHkgY2hpcCB1c2VkIGluIG1hbnkgIndlYmNhbSIgZGV2aWNlcy4KIEFueSBjYW1lcmEgdXNpbmcgdGhlIE9WNTExL09WNTExKyBhbmQgdGhlIE9WNjYyMC9PVjc2MTAvMjAvMjBBRSBzaG91bGQgd29yay4KLVZpZGVvIGNhcHR1cmUgZGV2aWNlcyB0aGF0IHVzZSB0aGUgUGhpbGlwcyBTQUE3MTExQSBkZWNvZGVyIGFsc28gd29yay4gSXQgCitWaWRlbyBjYXB0dXJlIGRldmljZXMgdGhhdCB1c2UgdGhlIFBoaWxpcHMgU0FBNzExMUEgZGVjb2RlciBhbHNvIHdvcmsuIEl0CiBzdXBwb3J0cyBzdHJlYW1pbmcgYW5kIGNhcHR1cmUgb2YgY29sb3Igb3IgbW9ub2Nocm9tZSB2aWRlbyB2aWEgdGhlIFZpZGVvNExpbnV4CiBBUEkuIE1vc3QgVjRMIGFwcHMgYXJlIGNvbXBhdGlibGUgd2l0aCBpdC4gTW9zdCByZXNvbHV0aW9ucyB3aXRoIGEgd2lkdGggYW5kCiBoZWlnaHQgdGhhdCBhcmUgYSBtdWx0aXBsZSBvZiA4IGFyZSBzdXBwb3J0ZWQuCkBAIC01MiwxNSArNTIsMTUgQEAKIAogCWNobW9kIDY2NiAvZGV2L3ZpZGVvCiAJY2htb2QgNjY2IC9kZXYvdmlkZW8wIChpZiBuZWNlc3NhcnkpCi0JCisKIE5vdyB5b3UgYXJlIHJlYWR5IHRvIHJ1biBhIHZpZGVvIGFwcCEgQm90aCB2aWRjYXQgYW5kIHhhd3R2IHdvcmsgd2VsbCBmb3IgbWUKIGF0IDY0MHg0ODAuCi0JCisKIFtVc2luZyB2aWRjYXQ6XQogCiAJdmlkY2F0IC1zIDY0MHg0ODAgLXAgYyA+IHRlc3QuanBnCiAJeHZpZXcgdGVzdC5qcGcKLQkKKwogW1VzaW5nIHhhd3R2Ol0KIAogRnJvbSB0aGUgbWFpbiB4YXd0diBkaXJlY3Rvcnk6CkBAIC03MCw3ICs3MCw3IEBACiAJbWFrZQogCW1ha2UgaW5zdGFsbAogCi1Ob3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIHJ1biB4YXd0di4gUmlnaHQgY2xpY2sgZm9yIHRoZSBvcHRpb25zIGRpYWxvZy4gCitOb3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIHJ1biB4YXd0di4gUmlnaHQgY2xpY2sgZm9yIHRoZSBvcHRpb25zIGRpYWxvZy4KIAogTU9EVUxFIFBBUkFNRVRFUlM6CiAKQEAgLTI4Niw0ICsyODYsMyBAQAogYW5kIHRoZSBVU0Igc3RhY2suIFRoYW5rcyB0byBCcmV0IFdhbGxhY2ggZm9yIGdldHRpbmcgY2FtZXJhIHJlZyBJTywgSVNPQywgYW5kCiBpbWFnZSBjYXB0dXJlIHdvcmtpbmcuIFRoYW5rcyB0byBPcmlvbiBTa3kgTGF3bG9yLCBLZXZpbiBNb29yZSwgYW5kIENsYXVkaW8KIE1hdHN1b2thIGZvciB0aGVpciB3b3JrIGFzIHdlbGwuCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3NlNDAxLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2U0MDEudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3VzYi9zZTQwMS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2U0MDEudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9zbjljMTAyLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc245YzEwMi50eHQKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi91c2Ivc245YzEwMi50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvc245YzEwMi50eHQKaW5kZXggYjk1N2JlYS4uMTQyOTIwYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Ivc245YzEwMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zbjljMTAyLnR4dApAQCAtMTc0LDcgKzE3NCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgdmlkZW9fbnIKIFR5cGU6ICAgICAgICAgICBzaG9ydCBhcnJheSAobWluID0gMCwgbWF4ID0gNjQpCi1TeW50YXg6ICAgICAgICAgPC0xfG5bLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDwtMXxuWywuLi5dPgogRGVzY3JpcHRpb246ICAgIFNwZWNpZnkgVjRMMiBtaW5vciBtb2RlIG51bWJlcjoKICAgICAgICAgICAgICAgICAtMSA9IHVzZSBuZXh0IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICBuID0gdXNlIG1pbm9yIG51bWJlciBuCkBAIC0xODcsNyArMTg3LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBmb3JjZV9tdW5tYXAKIFR5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSA2NCkKLVN5bnRheDogICAgICAgICA8MHwxWywuLi5dPiAKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgogRGVzY3JpcHRpb246ICAgIEZvcmNlIHRoZSBhcHBsaWNhdGlvbiB0byB1bm1hcCBwcmV2aW91c2x5IG1hcHBlZCBidWZmZXIgbWVtb3J5CiAgICAgICAgICAgICAgICAgYmVmb3JlIGNhbGxpbmcgYW55IFZJRElPQ19TX0NST1Agb3IgVklESU9DX1NfRk1UIGlvY3RsJ3MuIE5vdAogICAgICAgICAgICAgICAgIGFsbCB0aGUgYXBwbGljYXRpb25zIHN1cHBvcnQgdGhpcyBmZWF0dXJlLiBUaGlzIHBhcmFtZXRlciBpcwpAQCAtMjA2LDcgKzIwNiw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgZGVidWcKIFR5cGU6ICAgICAgICAgICB1c2hvcnQKLVN5bnRheDogICAgICAgICA8bj4gCitTeW50YXg6ICAgICAgICAgPG4+CiBEZXNjcmlwdGlvbjogICAgRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gMzoKICAgICAgICAgICAgICAgICAwID0gbm9uZSAodXNlIGNhcmVmdWxseSkKICAgICAgICAgICAgICAgICAxID0gY3JpdGljYWwgZXJyb3JzCkBAIC0yNjcsNyArMjY3LDcgQEAKIGZyYW1lIGhlYWRlciBvZiB0aGUgbW9zdCByZWNlbnQgcmVxdWVzdGVkIGFuZCBjYXB0dXJlZCB2aWRlbyBmcmFtZS4gVGhlIGhlYWRlcgogaXMgYWx3YXlzIDE4LWJ5dGVzIGxvbmcgYW5kIGlzIGFwcGVuZGVkIHRvIGV2ZXJ5IHZpZGVvIGZyYW1lIGJ5IHRoZSBTTjlDMTB4CiBjb250cm9sbGVycy4gQXMgYW4gZXhhbXBsZSwgdGhpcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSB1c2VyCi1hcHBsaWNhdGlvbiBmb3IgaW1wbGVtZW50aW5nIGF1dG8tZXhwb3N1cmUgZmVhdHVyZXMgdmlhIHNvZnR3YXJlLiAKK2FwcGxpY2F0aW9uIGZvciBpbXBsZW1lbnRpbmcgYXV0by1leHBvc3VyZSBmZWF0dXJlcyB2aWEgc29mdHdhcmUuCiAKIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHRoZSBmcmFtZSBoZWFkZXI6CiAKQEAgLTQ0MSw3ICs0NDEsNyBAQAogdmFsdWUgYW5kIGlzIGRpc3Bvc2VkIGluIG1lbW9yeSBhY2NvcmRpbmcgdG8gdGhlIHBhdHRlcm4gc2hvd24gYmVsb3c6CiAKIEJbMF0gICBHWzFdICAgIEJbMl0gICAgR1szXSAgICAuLi4gICBCW20tMl0gICAgICAgICBHW20tMV0KLUdbbV0gICBSW20rMV0gIEdbbSsyXSAgUlttKzJdICAuLi4gICBHWzJtLTJdICAgICAgICBSWzJtLTFdIAorR1ttXSAgIFJbbSsxXSAgR1ttKzJdICBSW20rMl0gIC4uLiAgIEdbMm0tMl0gICAgICAgIFJbMm0tMV0KIC4uLgogLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJbKG4tMSkobS0yKV0gIEdbKG4tMSkobS0xKV0KIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHW24obS0yKV0gICAgICBSW24obS0xKV0KQEAgLTQ3MiwxMiArNDcyLDEyIEBACiBUaGUgYWxnb3JpdGhtIHB1cmVseSBkZXNjcmliZXMgdGhlIGNvbnZlcnNpb24gZnJvbSBjb21wcmVzc2VkIEJheWVyIGNvZGUgdXNlZAogaW4gdGhlIFNOOUMxMHggY2hpcHMgdG8gdW5jb21wcmVzc2VkIEJheWVyLiBBZGRpdGlvbmFsIHN0ZXBzIGFyZSByZXF1aXJlZCB0bwogY29udmVydCB0aGlzIHRvIGEgY29sb3IgaW1hZ2UgKGkuZS4gYSBjb2xvciBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobSkuCi0gCisKIFRoZSBmb2xsb3dpbmcgSHVmZm1hbiBjb2RlcyBoYXZlIGJlZW4gZm91bmQ6Ci0wOiArMCAocmVsYXRpdmUgdG8gcmVmZXJlbmNlIHBpeGVsIHZhbHVlKSAKKzA6ICswIChyZWxhdGl2ZSB0byByZWZlcmVuY2UgcGl4ZWwgdmFsdWUpCiAxMDA6ICs0CiAxMDE6IC00PwotMTExMHh4eHg6IHNldCBhYnNvbHV0ZSB2YWx1ZSB0byB4eHh4LjAwMDAgCisxMTEweHh4eDogc2V0IGFic29sdXRlIHZhbHVlIHRvIHh4eHguMDAwMAogMTEwMTogKzExCiAxMTExOiAtMTEKIDExMDAxOiArMjAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3N0djY4MC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3N0djY4MC50eHQKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi91c2Ivc3R2NjgwLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zdHY2ODAudHh0CmluZGV4IDY0NDgwNDEuLjRmODk0NmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3N0djY4MC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zdHY2ODAudHh0CkBAIC01LDE1ICs1LDE1IEBACiAKIElOVFJPRFVDVElPTjoKIAotU1RNaWNyb2VsZWN0cm9uaWNzIHByb2R1Y2VzIHRoZSBTVFYwNjgwQiBjaGlwLCB3aGljaCBjb21lcyBpbiB0d28gCi10eXBlcywgLTAwMSBhbmQgLTAwMy4gVGhlIC0wMDMgdmVyc2lvbiBhbGxvd3MgdGhlIHJlY29yZGluZyBhbmQgZG93bmxvYWRpbmcgCi1vZiBzb3VuZCBjbGlwcyBmcm9tIHRoZSBjYW1lcmEsIGFuZCBhbGxvd3MgYSBmbGFzaCBhdHRhY2htZW50LiBPdGhlcndpc2UsIAotaXQgdXNlcyB0aGUgc2FtZSBjb21tYW5kcyBhcyB0aGUgLTAwMSB2ZXJzaW9uLiBCb3RoIHZlcnNpb25zIHN1cHBvcnQgYSAKLXZhcmlldHkgb2YgU0RSQU0gc2l6ZXMgYW5kIHNlbnNvcnMsIGFsbG93aW5nIGZvciBhIG1heGltdW0gb2YgMjYgVkdBIG9yIDIwIAotQ0lGIHBpY3R1cmVzLiBUaGUgU1RWMDY4MCBzdXBwb3J0cyBlaXRoZXIgYSBzZXJpYWwgb3IgYSB1c2IgaW50ZXJmYWNlLCBhbmQgCitTVE1pY3JvZWxlY3Ryb25pY3MgcHJvZHVjZXMgdGhlIFNUVjA2ODBCIGNoaXAsIHdoaWNoIGNvbWVzIGluIHR3bwordHlwZXMsIC0wMDEgYW5kIC0wMDMuIFRoZSAtMDAzIHZlcnNpb24gYWxsb3dzIHRoZSByZWNvcmRpbmcgYW5kIGRvd25sb2FkaW5nCitvZiBzb3VuZCBjbGlwcyBmcm9tIHRoZSBjYW1lcmEsIGFuZCBhbGxvd3MgYSBmbGFzaCBhdHRhY2htZW50LiBPdGhlcndpc2UsCitpdCB1c2VzIHRoZSBzYW1lIGNvbW1hbmRzIGFzIHRoZSAtMDAxIHZlcnNpb24uIEJvdGggdmVyc2lvbnMgc3VwcG9ydCBhCit2YXJpZXR5IG9mIFNEUkFNIHNpemVzIGFuZCBzZW5zb3JzLCBhbGxvd2luZyBmb3IgYSBtYXhpbXVtIG9mIDI2IFZHQSBvciAyMAorQ0lGIHBpY3R1cmVzLiBUaGUgU1RWMDY4MCBzdXBwb3J0cyBlaXRoZXIgYSBzZXJpYWwgb3IgYSB1c2IgaW50ZXJmYWNlLCBhbmQKIHZpZGVvIGlzIHBvc3NpYmxlIHRocm91Z2ggdGhlIHVzYiBpbnRlcmZhY2UuCiAKLVRoZSBmb2xsb3dpbmcgY2FtZXJhcyBhcmUga25vd24gdG8gd29yayB3aXRoIHRoaXMgZHJpdmVyLCBhbHRob3VnaCBhbnkgCitUaGUgZm9sbG93aW5nIGNhbWVyYXMgYXJlIGtub3duIHRvIHdvcmsgd2l0aCB0aGlzIGRyaXZlciwgYWx0aG91Z2ggYW55CiBjYW1lcmEgd2l0aCBWZW5kb3IvUHJvZHVjdCBjb2RlcyBvZiAwNTUzLzAyMDIgc2hvdWxkIHdvcms6CiAKIEFpcHRlayBQZW5jYW0gKHZhcmlvdXMgbW9kZWxzKQpAQCAtMzQsMTUgKzM0LDE1IEBACiBNT0RVTEUgT1BUSU9OUzoKIAogV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHNldCBhICJzd2FwUkdCPTEiCi1vcHRpb24sIGlmIG5lY2Vzc2FyeSwgZm9yIHRob3NlIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgaXQgCi0oc3VjaCBhcyB4YXd0dikuIEhvd2V2ZXIsIHRoZSBkcml2ZXIgc2hvdWxkIGRldGVjdCBhbmQgc2V0IHRoaXMgCitvcHRpb24sIGlmIG5lY2Vzc2FyeSwgZm9yIHRob3NlIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgaXQKKyhzdWNoIGFzIHhhd3R2KS4gSG93ZXZlciwgdGhlIGRyaXZlciBzaG91bGQgZGV0ZWN0IGFuZCBzZXQgdGhpcwogYXV0b21hdGljYWxseSwgc28gdGhpcyBvcHRpb24gc2hvdWxkIG5vdCBub3JtYWxseSBiZSB1c2VkLgogCiAKIEtOT1dOIFBST0JMRU1TOgogCi1UaGUgZHJpdmVyIHNlZW1zIHRvIHdvcmsgYmV0dGVyIHdpdGggdGhlIHVzYi1vaGNpIHRoYW4gdGhlIHVzYi11aGNpIGhvc3QgCi1jb250cm9sbGVyIGRyaXZlci4gCitUaGUgZHJpdmVyIHNlZW1zIHRvIHdvcmsgYmV0dGVyIHdpdGggdGhlIHVzYi1vaGNpIHRoYW4gdGhlIHVzYi11aGNpIGhvc3QKK2NvbnRyb2xsZXIgZHJpdmVyLgogCiBIRUxQOgogCkBAIC01MCw2ICs1MCw0IEBACiBodHRwOi8vcGVyc29uYWwuY2x0LmJlbGxzb3V0aC5uZXQvfmtqc2lzc29uIG9yIGF0CiBodHRwOi8vc3R2MDY4MC11c2Iuc291cmNlZm9yZ2UubmV0CiAKLUFueSBxdWVzdGlvbnMgdG8gbWUgY2FuIGJlIHNlbmQgdG86ICBranNpc3NvbkBiZWxsc291dGgubmV0Ci0KLQorQW55IHF1ZXN0aW9ucyB0byBtZSBjYW4gYmUgc2VuZCB0bzogIGtqc2lzc29uQGJlbGxzb3V0aC5uZXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi93OTk2OGNmLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjhjZi50eHQKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjhjZi50eHQKaW5kZXggOWQ0NmNkMC4uM2I3MDRmMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2OGNmLnR4dApAQCAtMSw1ICsxLDUgQEAKIAotICAgICAgICAgICAgICAgICAgIFc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwIAorICAgICAgICAgICAgICAgICAgIFc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwCiAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIgZm9yIExpbnV4IDIuNiAoYmFzaWMgdmVyc2lvbikKICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xMTUsNyArMTE1LDcgQEAKID09PT09PT09PT09PT09PT09PT09PT0KIEZvciBpdCB0byB3b3JrIHByb3Blcmx5LCB0aGUgZHJpdmVyIG5lZWRzIGtlcm5lbCBzdXBwb3J0IGZvciBWaWRlbzRMaW51eCwgVVNCCiBhbmQgSTJDLCBhbmQgdGhlICJvdmNhbWNoaXAiIG1vZHVsZSBmb3IgdGhlIGltYWdlIHNlbnNvci4gTWFrZSBzdXJlIHlvdSBhcmUgbm90Ci1hY3R1YWxseSB1c2luZyBhbnkgZXh0ZXJuYWwgIm92Y2FtY2hpcCIgbW9kdWxlLCBnaXZlbiB0aGF0IHRoZSBXOTk2Wzg3XUNGIAorYWN0dWFsbHkgdXNpbmcgYW55IGV4dGVybmFsICJvdmNhbWNoaXAiIG1vZHVsZSwgZ2l2ZW4gdGhhdCB0aGUgVzk5Nls4N11DRgogZHJpdmVyIGRlcGVuZHMgb24gdGhlIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBwcmVzZW50IGluIHRoZSBvZmZpY2lhbCBrZXJuZWxzLgogCiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCBiZSBlbmFibGVkIGFuZApAQCAtMTk3LDE2ICsxOTcsMTYgQEAKICAgICAgICAgICAgICAgICAgZW5hYmxlZCBmb3IgdGhlICdvdmNhbWNoaXAnIG1vZHVsZSB0byBiZSBsb2FkZWQgYW5kIGZvcgogICAgICAgICAgICAgICAgICB0aGlzIHBhcmFtZXRlciB0byBiZSBwcmVzZW50LgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTmFtZTogICAgICAgICAgIHNpbWNhbXMgCi1UeXBlOiAgICAgICAgICAgaW50IAotU3ludGF4OiAgICAgICAgIDxuPiAKK05hbWU6ICAgICAgICAgICBzaW1jYW1zCitUeXBlOiAgICAgICAgICAgaW50CitTeW50YXg6ICAgICAgICAgPG4+CiBEZXNjcmlwdGlvbjogICAgTnVtYmVyIG9mIGNhbWVyYXMgYWxsb3dlZCB0byBzdHJlYW0gc2ltdWx0YW5lb3VzbHkuCiAgICAgICAgICAgICAgICAgbiBtYXkgdmFyeSBmcm9tIDAgdG8gMzIuCiBEZWZhdWx0OiAgICAgICAgMzIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICB2aWRlb19ucgogVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPC0xfG5bLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDwtMXxuWywuLi5dPgogRGVzY3JpcHRpb246ICAgIFNwZWNpZnkgVjRMIG1pbm9yIG1vZGUgbnVtYmVyLgogICAgICAgICAgICAgICAgIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgIG4gPSB1c2UgbWlub3IgbnVtYmVyIG4KQEAgLTIxOSw3ICsyMTksNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIHBhY2tldF9zaXplCiBUeXBlOiAgICAgICAgICAgaW50IGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKLVN5bnRheDogICAgICAgICA8blssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+CiBEZXNjcmlwdGlvbjogICAgU3BlY2lmeSB0aGUgbWF4aW11bSBkYXRhIHBheWxvYWQgc2l6ZSBpbiBieXRlcyBmb3IgYWx0ZXJuYXRlCiAgICAgICAgICAgICAgICAgc2V0dGluZ3MsIGZvciBlYWNoIGRldmljZS4gbiBpcyBzY2FsZWQgYmV0d2VlbiA2MyBhbmQgMTAyMy4KIERlZmF1bHQ6ICAgICAgICAxMDIzCkBAIC0yMzQsNyArMjM0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBkb3VibGVfYnVmZmVyCiBUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBIYXJkd2FyZSBkb3VibGUgYnVmZmVyaW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuCiAgICAgICAgICAgICAgICAgSXQgc2hvdWxkIGJlIGVuYWJsZWQgaWYgeW91IHdhbnQgc21vb3RoIHZpZGVvIG91dHB1dDogaWYgeW91CiAgICAgICAgICAgICAgICAgb2J0YWluIG91dCBvZiBzeW5jLiB2aWRlbywgZGlzYWJsZSBpdCwgb3IgdHJ5IHRvCkBAIC0yNDMsMTMgKzI0MywxMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIGNsYW1waW5nCiBUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBWaWRlbyBkYXRhIGNsYW1waW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuCiBEZWZhdWx0OiAgICAgICAgMCBmb3IgZXZlcnkgZGV2aWNlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIGZpbHRlcl90eXBlCiBUeXBlOiAgICAgICAgICAgaW50IGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKLVN5bnRheDogICAgICAgICA8MHwxfDJbLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDwwfDF8MlssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBWaWRlbyBmaWx0ZXIgdHlwZS4KICAgICAgICAgICAgICAgICAwIG5vbmUsIDEgKDEtMi0xKSAzLXRhcCBmaWx0ZXIsIDIgKDItMy02LTMtMikgNS10YXAgZmlsdGVyLgogICAgICAgICAgICAgICAgIFRoZSBmaWx0ZXIgaXMgdXNlZCB0byByZWR1Y2Ugbm9pc2UgYW5kIGFsaWFzaW5nIGFydGlmYWN0cwpAQCAtMjU4LDEzICsyNTgsMTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBsYXJnZXZpZXcKIFR5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKLVN5bnRheDogICAgICAgICA8MHwxWywuLi5dPiAKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgogRGVzY3JpcHRpb246ICAgIExhcmdlIHZpZXc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4KIERlZmF1bHQ6ICAgICAgICAxIGZvciBldmVyeSBkZXZpY2UuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgdXBzY2FsaW5nCiBUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBTb2Z0d2FyZSBzY2FsaW5nIChmb3Igbm9uLWNvbXByZXNzZWQgdmlkZW8gb25seSk6CiAgICAgICAgICAgICAgICAgMCBkaXNhYmxlZCwgMSBlbmFibGVkLgogICAgICAgICAgICAgICAgIERpc2FibGUgaXQgaWYgeW91IGhhdmUgYSBzbG93IENQVSBvciB5b3UgZG9uJ3QgaGF2ZSBlbm91Z2gKQEAgLTM0MSw4ICszNDEsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIGJhbmRpbmdmaWx0ZXIKIFR5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKLVN5bnRheDogICAgICAgICA8MHwxWywuLi5dPiAKLURlc2NyaXB0aW9uOiAgICBCYW5kaW5nIGZpbHRlciB0byByZWR1Y2UgZWZmZWN0cyBvZiBmbHVvcmVzY2VudCAKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgorRGVzY3JpcHRpb246ICAgIEJhbmRpbmcgZmlsdGVyIHRvIHJlZHVjZSBlZmZlY3RzIG9mIGZsdW9yZXNjZW50CiAgICAgICAgICAgICAgICAgbGlnaHRpbmc6CiAgICAgICAgICAgICAgICAgMCBkaXNhYmxlZCwgMSBlbmFibGVkLgogICAgICAgICAgICAgICAgIFRoaXMgZmlsdGVyIHRyaWVzIHRvIHJlZHVjZSB0aGUgcGF0dGVybiBvZiBob3Jpem9udGFsCkBAIC0zNzQsNyArMzc0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBtb25vY2hyb21lCiBUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBUaGUgaW1hZ2Ugc2Vuc29yIGlzIG1vbm9jaHJvbWU6CiAgICAgICAgICAgICAgICAgMCA9IG5vLCAxID0geWVzCiBEZWZhdWx0OiAgICAgICAgMCBmb3IgZXZlcnkgZGV2aWNlLgpAQCAtNDAwLDE5ICs0MDAsMTkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBjb250cmFzdAogVHlwZTogICAgICAgICAgIGxvbmcgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQotU3ludGF4OiAgICAgICAgIDxuWywuLi5dPiAKK1N5bnRheDogICAgICAgICA8blssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBTZXQgcGljdHVyZSBjb250cmFzdCAoMC02NTUzNSkuCiBEZWZhdWx0OiAgICAgICAgNTAwMDAgZm9yIGV2ZXJ5IGRldmljZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICB3aGl0ZW5lc3MKIFR5cGU6ICAgICAgICAgICBsb25nIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKLVN5bnRheDogICAgICAgICA8blssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+CiBEZXNjcmlwdGlvbjogICAgU2V0IHBpY3R1cmUgd2hpdGVuZXNzICgwLTY1NTM1KS4KIERlZmF1bHQ6ICAgICAgICAzMjc2OCBmb3IgZXZlcnkgZGV2aWNlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIGRlYnVnCiBUeXBlOiAgICAgICAgICAgaW50Ci1TeW50YXg6ICAgICAgICAgPG4+IAorU3ludGF4OiAgICAgICAgIDxuPgogRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDY6CiAgICAgICAgICAgICAgICAgMCA9IG5vbmUgKHVzZSBjYXJlZnVsbHkpCiAgICAgICAgICAgICAgICAgMSA9IGNyaXRpY2FsIGVycm9ycwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvemMwMzAxLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvemMwMzAxLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi91c2IvemMwMzAxLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96YzAzMDEudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CmluZGV4IDFhZDlhZjEuLjY4NzEwNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CkBAIC0yNywxMiArMjcsMjEgQEAKIHRoZSBjb25maWd1cmVkIGh1Z2VwYWdlIHNpemUgLSB0aGlzIGlzIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgcHJvcGVyCiBhbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIGFyZ3VtZW50cyB0byB0aGUgYWJvdmUgc3lzdGVtIGNhbGxzLgogCi1UaGUgb3V0cHV0IG9mICJjYXQgL3Byb2MvbWVtaW5mbyIgd2lsbCBoYXZlIG91dHB1dCBsaWtlOgorVGhlIG91dHB1dCBvZiAiY2F0IC9wcm9jL21lbWluZm8iIHdpbGwgaGF2ZSBsaW5lcyBsaWtlOgogCiAuLi4uLgogSHVnZVBhZ2VzX1RvdGFsOiB4eHgKIEh1Z2VQYWdlc19GcmVlOiAgeXl5Ci1IdWdlcGFnZXNpemU6ICAgIHp6eiBLQgorSHVnZVBhZ2VzX1JzdmQ6ICB3d3cKK0h1Z2VwYWdlc2l6ZTogICAgenp6IGtCCisKK3doZXJlOgorSHVnZVBhZ2VzX1RvdGFsIGlzIHRoZSBzaXplIG9mIHRoZSBwb29sIG9mIGh1Z2VwYWdlcy4KK0h1Z2VQYWdlc19GcmVlIGlzIHRoZSBudW1iZXIgb2YgaHVnZXBhZ2VzIGluIHRoZSBwb29sIHRoYXQgYXJlIG5vdCB5ZXQKK2FsbG9jYXRlZC4KK0h1Z2VQYWdlc19Sc3ZkIGlzIHNob3J0IGZvciAicmVzZXJ2ZWQsIiBhbmQgaXMgdGhlIG51bWJlciBvZiBodWdlcGFnZXMKK2ZvciB3aGljaCBhIGNvbW1pdG1lbnQgdG8gYWxsb2NhdGUgZnJvbSB0aGUgcG9vbCBoYXMgYmVlbiBtYWRlLCBidXQgbm8KK2FsbG9jYXRpb24gaGFzIHlldCBiZWVuIG1hZGUuIEl0J3MgdmFndWVseSBhbmFsb2dvdXMgdG8gb3ZlcmNvbW1pdC4KIAogL3Byb2MvZmlsZXN5c3RlbXMgc2hvdWxkIGFsc28gc2hvdyBhIGZpbGVzeXN0ZW0gb2YgdHlwZSAiaHVnZXRsYmZzIiBjb25maWd1cmVkCiBpbiB0aGUga2VybmVsLgpAQCAtNDIsMTEgKzUxLDExIEBACiBwcmUtY29uZmlndXJlZCkgaHVnZXBhZ2VzLgogVGhlIGFsbG9jYXRpb24gKG9yIGRlYWxsb2NhdGlvbikgb2YgaHVnZXRsYiBwYWdlcyBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZQogZW5vdWdoIHBoeXNpY2FsbHkgY29udGlndW91cyBmcmVlIHBhZ2VzIGluIHN5c3RlbSAoZnJlZWluZyBvZiBodWdlcGFnZXMgaXMKLXBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgYXJlIGVub3VnaCBodWdldGxiIHBhZ2VzIGZyZWUgdGhhdCBjYW4gYmUgdHJhbnNmZXJlZAorcG9zc2libGUgb25seSBpZiB0aGVyZSBhcmUgZW5vdWdoIGh1Z2V0bGIgcGFnZXMgZnJlZSB0aGF0IGNhbiBiZSB0cmFuc2ZlcnJlZAogYmFjayB0byByZWd1bGFyIG1lbW9yeSBwb29sKS4KIAotUGFnZXMgdGhhdCBhcmUgdXNlZCBhcyBodWdldGxiIHBhZ2VzIGFyZSByZXNlcnZlZCBpbnNpZGUgdGhlIGtlcm5lbCBhbmQgY2FuCi1ub3QgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCitQYWdlcyB0aGF0IGFyZSB1c2VkIGFzIGh1Z2V0bGIgcGFnZXMgYXJlIHJlc2VydmVkIGluc2lkZSB0aGUga2VybmVsIGFuZCBjYW5ub3QKK2JlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgogCiBPbmNlIHRoZSBrZXJuZWwgd2l0aCBIdWdldGxiIHBhZ2Ugc3VwcG9ydCBpcyBidWlsdCBhbmQgcnVubmluZywgYSB1c2VyIGNhbgogdXNlIGVpdGhlciB0aGUgbW1hcCBzeXN0ZW0gY2FsbCBvciBzaGFyZWQgbWVtb3J5IHN5c3RlbSBjYWxscyB0byBzdGFydCB1c2luZwpAQCAtNjAsNyArNjksNyBAQAogVGhpcyBjb21tYW5kIHdpbGwgdHJ5IHRvIGNvbmZpZ3VyZSAyMCBodWdlcGFnZXMgaW4gdGhlIHN5c3RlbS4gIFRoZSBzdWNjZXNzCiBvciBmYWlsdXJlIG9mIGFsbG9jYXRpb24gZGVwZW5kcyBvbiB0aGUgYW1vdW50IG9mIHBoeXNpY2FsbHkgY29udGlndW91cwogbWVtb3J5IHRoYXQgaXMgcHJlc2V0IGluIHN5c3RlbSBhdCB0aGlzIHRpbWUuICBTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWF5IHdhbnQKLXRvIHB1dCB0aGlzIGNvbW1hbmQgaW4gb25lIG9mIHRoZSBsb2NhbCByYyBpbml0IGZpbGUuICBUaGlzIHdpbGwgZW5hYmxlIHRoZQordG8gcHV0IHRoaXMgY29tbWFuZCBpbiBvbmUgb2YgdGhlIGxvY2FsIHJjIGluaXQgZmlsZXMuICBUaGlzIHdpbGwgZW5hYmxlIHRoZQoga2VybmVsIHRvIHJlcXVlc3QgaHVnZSBwYWdlcyBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzICh3aGVuIHRoZSBwb3NzaWJpbGl0eQogb2YgZ2V0dGluZyBwaHlzaWNhbCBjb250aWd1b3VzIHBhZ2VzIGlzIHN0aWxsIHZlcnkgaGlnaCkuCiAKQEAgLTc4LDggKzg3LDggQEAKIG1vZGUgb2Ygcm9vdCBvZiBmaWxlIHN5c3RlbSB0byB2YWx1ZSAmIDA3NzcuICBUaGlzIHZhbHVlIGlzIGdpdmVuIGluIG9jdGFsLgogQnkgZGVmYXVsdCB0aGUgdmFsdWUgMDc1NSBpcyBwaWNrZWQuIFRoZSBzaXplIG9wdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHZhbHVlIG9mCiBtZW1vcnkgKGh1Z2UgcGFnZXMpIGFsbG93ZWQgZm9yIHRoYXQgZmlsZXN5c3RlbSAoL21udC9odWdlKS4gVGhlIHNpemUgaXMKLXJvdW5kZWQgZG93biB0byBIUEFHRV9TSVpFLiAgVGhlIG9wdGlvbiBucl9pbm9kZSBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZgotaW5vZGVzIHRoYXQgL21udC9odWdlIGNhbiB1c2UuICBJZiB0aGUgc2l6ZSBvciBucl9pbm9kZSBvcHRpb25zIGFyZSBub3QKK3JvdW5kZWQgZG93biB0byBIUEFHRV9TSVpFLiAgVGhlIG9wdGlvbiBucl9pbm9kZXMgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YKK2lub2RlcyB0aGF0IC9tbnQvaHVnZSBjYW4gdXNlLiAgSWYgdGhlIHNpemUgb3IgbnJfaW5vZGVzIG9wdGlvbnMgYXJlIG5vdAogcHJvdmlkZWQgb24gY29tbWFuZCBsaW5lIHRoZW4gbm8gbGltaXRzIGFyZSBzZXQuICBGb3Igc2l6ZSBhbmQgbnJfaW5vZGVzCiBvcHRpb25zLCB5b3UgY2FuIHVzZSBbR3xnXS9bTXxtXS9bS3xrXSB0byByZXByZXNlbnQgZ2lnYS9tZWdhL2tpbG8uIEZvcgogZXhhbXBsZSwgc2l6ZT0ySyBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBzaXplPTIwNDguIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYXQKQEAgLTg4LDcgKzk3LDcgQEAKIHJlYWQgYW5kIHdyaXRlIHN5c3RlbSBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmaWxlcyB0aGF0IHJlc2lkZSBvbiBodWdldGxiCiBmaWxlIHN5c3RlbXMuCiAKLUEgcmVndWxhciBjaG93biwgY2hncnAgYW5kIGNobW9kIGNvbW1hbmRzICh3aXRoIHJpZ2h0IHBlcm1pc3Npb25zKSBjb3VsZCBiZQorUmVndWxhciBjaG93biwgY2hncnAsIGFuZCBjaG1vZCBjb21tYW5kcyAod2l0aCByaWdodCBwZXJtaXNzaW9ucykgY291bGQgYmUKIHVzZWQgdG8gY2hhbmdlIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb24gaHVnZXRsYmZzLgogCiBBbHNvLCBpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IG5vIHN1Y2ggbW91bnQgY29tbWFuZCBpcyByZXF1aXJlZCBpZiB0aGUKQEAgLTk2LDggKzEwNSw4IEBACiB3aXNoIHRvIHVzZSBodWdldGxiIHBhZ2UgdmlhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBzaG91bGQgYmUgYSBtZW1iZXIgb2YKIGEgc3VwcGxlbWVudGFyeSBncm91cCBhbmQgc3lzdGVtIGFkbWluIG5lZWRzIHRvIGNvbmZpZ3VyZSB0aGF0IGdpZCBpbnRvCiAvcHJvYy9zeXMvdm0vaHVnZXRsYl9zaG1fZ3JvdXAuICBJdCBpcyBwb3NzaWJsZSBmb3Igc2FtZSBvciBkaWZmZXJlbnQKLWFwcGxpY2F0aW9ucyB0byB1c2UgYW55IGNvbWJpbmF0aW9uIG9mIG1tYXBzIGFuZCBzaG0qIGNhbGxzLiAgVGhvdWdoIHRoZQotbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwcy4KK2FwcGxpY2F0aW9ucyB0byB1c2UgYW55IGNvbWJpbmF0aW9uIG9mIG1tYXBzIGFuZCBzaG0qIGNhbGxzLCB0aG91Z2ggdGhlCittb3VudCBvZiBmaWxlc3lzdGVtIHdpbGwgYmUgcmVxdWlyZWQgZm9yIHVzaW5nIG1tYXAgY2FsbHMuCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0CmluZGV4IGM1YmViNTQuLjIxZWQ1MTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2ctYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQKQEAgLTM2LDYgKzM2LDkgQEAKIHNvbWUgZGF0YSB0byB0aGUgZGV2aWNlLiAgU28gYSB2ZXJ5IHNpbXBsZSB3YXRjaGRvZyBkYWVtb24gd291bGQgbG9vawogbGlrZSB0aGlzOgogCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKwogaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkgewogCWludCBmZD1vcGVuKCIvZGV2L3dhdGNoZG9nIixPX1dST05MWSk7CiAJaWYgKGZkPT0tMSkgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggMTkyMTM1My4uZjJjZDZlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CkBAIC0xNTEsNiArMTUxLDExIEBACiAKICAgbnVtYT1mYWtlPVggICBGYWtlIFggbm9kZXMgYW5kIGlnbm9yZSBOVU1BIHNldHVwIG9mIHRoZSBhY3R1YWwgbWFjaGluZS4KIAorICBudW1hPWhvdGFkZD1wZXJjZW50CisJCU9ubHkgYWxsb3cgaG90YWRkIG1lbW9yeSB0byBwcmVhbGxvY2F0ZSBwYWdlIHN0cnVjdHVyZXMgdXB0bworCQlwZXJjZW50IG9mIGFscmVhZHkgYXZhaWxhYmxlIG1lbW9yeS4KKwkJbnVtYT1ob3RhZGQ9MCB3aWxsIGRpc2FibGUgaG90YWRkIG1lbW9yeS4KKwogQUNQSQogCiAgIGFjcGk9b2ZmCURvbid0IGVuYWJsZSBBQ1BJCmRpZmYgLS1naXQgYS9LYnVpbGQgYi9LYnVpbGQKaW5kZXggOTVkNmEwMC4uMmQ0Zjk1ZSAxMDA2NDQKLS0tIGEvS2J1aWxkCisrKyBiL0tidWlsZApAQCAtMTgsNyArMTgsNyBAQAogCSIvXi0+L3tzOl4tPlwoW14gXSpcKSBbXCQkI10qXChbXiBdKlwpIFwoLipcKTojZGVmaW5lIFwxIFwyIC8qIFwzICovOjsgczotPjo6OyBwO30iCiBlbmRlZgogIyBPdmVycmlkZSBkZWZhdWx0IHJlZ2V4cCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcwotc2VkLSQoQ09ORklHX01JUFMpIDo9ICIvXkBAQC9zLy8vcCIKK3NlZC0kKENPTkZJR19NSVBTKSA6PSAiL15AQEAve3MvXkBAQC8vOyBzLyBcIy4qXCQkLy87IHA7fSIKIAogcXVpZXRfY21kX29mZnNldHMgPSBHRU4gICAgICRACiBkZWZpbmUgY21kX29mZnNldHMKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYzk0NjU4MS4uYzNjNTg0MiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTQwLDExICs0MCwyMCBAQAogCVBMRUFTRSBkb2N1bWVudCBrbm93biBidWdzLiBJZiBpdCBkb2Vzbid0IHdvcmsgZm9yIGV2ZXJ5dGhpbmcKIAlvciBkb2VzIHNvbWV0aGluZyB2ZXJ5IG9kZCBvbmNlIGEgbW9udGggZG9jdW1lbnQgaXQuCiAKKwlQTEVBU0UgcmVtZW1iZXIgdGhhdCBzdWJtaXNzaW9ucyBtdXN0IGJlIG1hZGUgdW5kZXIgdGhlIHRlcm1zCisJb2YgdGhlIE9TREwgY2VydGlmaWNhdGUgb2YgY29udHJpYnV0aW9uCisJKGh0dHA6Ly93d3cub3NkbC5vcmcvbmV3c3Jvb20vcHJlc3NfcmVsZWFzZXMvMjAwNC8yMDA0XzA1XzI0X2Rjby5odG1sKQorCWFuZCBzaG91bGQgaW5jbHVkZSBhIFNpZ25lZC1vZmYtYnk6IGxpbmUuCisKIDYuCU1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgcmlnaHQgdG8gc2VuZCBhbnkgY2hhbmdlcyB5b3UgbWFrZS4gSWYgeW91CiAJZG8gY2hhbmdlcyBhdCB3b3JrIHlvdSBtYXkgZmluZCB5b3VyIGVtcGxveWVyIG93bnMgdGhlIHBhdGNoCiAJbm90IHlvdS4KIAotNy4JSGFwcHkgaGFja2luZy4KKzcuCVdoZW4gc2VuZGluZyBzZWN1cml0eSByZWxhdGVkIGNoYW5nZXMgb3IgcmVwb3J0cyB0byBhIG1haW50YWluZXIKKwlwbGVhc2UgQ2M6IHNlY3VyaXR5QGtlcm5lbC5vcmcsIGVzcGVjaWFsbHkgaWYgdGhlIG1haW50YWluZXIKKwlkb2VzIG5vdCByZXNwb25kLgorCis4LglIYXBweSBoYWNraW5nLgogCiAgCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00MTEsNiArNDIwLDcgQEAKIFA6CVJhbGYgQmFlY2hsZQogTToJcmFsZkBsaW51eC1taXBzLm9yZwogTDoJbGludXgtaGFtc0B2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubGludXgtYXgyNS5vcmcvCiBTOglNYWludGFpbmVkCiAKIEJBWUNPTS9IRExDRFJWIERSSVZFUlMgRk9SIEFYLjI1CkBAIC00MjAsNiArNDMwLDE0IEBACiBXOglodHRwOi8vd3d3LmJheWNvbS5vcmcvfnRvbS9oYW0vaGFtLmh0bWwKIFM6CU1haW50YWluZWQKIAorQkNNNDNYWCBXSVJFTEVTUyBEUklWRVIKK1A6CU1pY2hhZWwgQnVlc2NoCitNOgltYkBidTNzY2guZGUKK1A6CVN0ZWZhbm8gQnJpdmlvCitNOglzdDNAcmlzZXVwLm5ldAorVzoJaHR0cDovL2JjbTQzeHguYmVybGlvcy5kZS8KK1M6CU1haW50YWluZWQKKwogQkVGUyBGSUxFIFNZU1RFTQogUDoJU2VyZ2V5IFMuIEtvc3R5bGlvdgogTToJcmF0aGFtYWhhdGFAcGhwNC5ydQpAQCAtNTQ3LDcgKzU2NSwxOSBAQAogUDoJQXJuZCBCZXJnbWFubgogTToJYXJuZEBhcm5kYi5kZQogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKLVc6CWh0dHA6Ly9saW51eHBwYzY0Lm9yZworVzoJaHR0cDovL3d3dy5wZW5ndWlucHBjLm9yZy9wcGM2NC8KK1M6CVN1cHBvcnRlZAorCitCUk9BRENPTSBCTlgyIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCitQOglNaWNoYWVsIENoYW4KK006CW1jaGFuQGJyb2FkY29tLmNvbQorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCisKK0JST0FEQ09NIFRHMyBHSUdBQklUIEVUSEVSTkVUIERSSVZFUgorUDoJTWljaGFlbCBDaGFuCitNOgltY2hhbkBicm9hZGNvbS5jb20KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogCiBCVFRWIFZJREVPNExJTlVYIERSSVZFUgpAQCAtOTYwLDcgKzk5MCw3IEBACiBFWFQzIEZJTEUgU1lTVEVNCiBQOglTdGVwaGVuIFR3ZWVkaWUsIEFuZHJldyBNb3J0b24KIE06CXNjdEByZWRoYXQuY29tLCBha3BtQG9zZGwub3JnLCBhZGlsZ2VyQGNsdXN0ZXJmcy5jb20KLUw6CWV4dDMtdXNlcnNAcmVkaGF0LmNvbQorTDoJZXh0Mi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIAogRjcxODA1RiBIQVJEV0FSRSBNT05JVE9SSU5HIERSSVZFUgpAQCAtMTQ1MSw2ICsxNDgxLDE5IEBACiBNOglqamNpYXJsYUByYWl6LnVuY3UuZWR1LmFyCiBTOglNYWludGFpbmVkCiAKK0lQQVRIIERSSVZFUjoKK1A6CUJyeWFuIE8nU3VsbGl2YW4KK006CXN1cHBvcnRAcGF0aHNjYWxlLmNvbQorTDoJb3BlbmliLWdlbmVyYWxAb3BlbmliLm9yZworUzoJU3VwcG9ydGVkCisKK0lQTUkgU1VCU1lTVEVNCitQOglDb3JleSBNaW55YXJkCitNOgltaW55YXJkQGFjbS5vcmcKK0w6CW9wZW5pcG1pLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1c6CWh0dHA6Ly9vcGVuaXBtaS5zb3VyY2Vmb3JnZS5uZXQvCitTOglTdXBwb3J0ZWQKKwogSVBYIE5FVFdPUksgTEFZRVIKIFA6CUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbwogTToJYWNtZUBjb25lY3RpdmEuY29tLmJyCkBAIC0xNDU4LDEwICsxNTAxLDExIEBACiBTOglNYWludGFpbmVkCiAKIElSREEgU1VCU1lTVEVNCi1QOglKZWFuIFRvdXJyaWxoZXMKK1A6CVNhbXVlbCBPcnRpegorTToJc2FtdWVsQHNvcnRpei5vcmcKIEw6CWlyZGEtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQogVzoJaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LwotUzoJT2RkIEZpeGVzCitTOglNYWludGFpbmVkCiAKIElTQVBOUAogUDoJSmFyb3NsYXYgS3lzZWxhCkBAIC0xNTA3LDEyICsxNTUxLDI4IEBACiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NoYWdneS9qZnMtMi42LmdpdAogUzoJU3VwcG9ydGVkCiAKK0pPVVJOQUxMSU5HIExBWUVSIEZPUiBCTE9DSyBERVZJQ1MgKEpCRCkKK1A6CVN0ZXBoZW4gVHdlZWRpZSwgQW5kcmV3IE1vcnRvbgorTToJc2N0QHJlZGhhdC5jb20sIGFrcG1Ab3NkbC5vcmcKK0w6CWV4dDItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitTOglNYWludGFpbmVkCisKIEtDT05GSUcKIFA6CVJvbWFuIFppcHBlbAogTToJemlwcGVsQGxpbnV4LW02OGsub3JnCiBMOglrYnVpbGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKK0tEVU1QCitQOglWaXZlayBHb3lhbAorTToJdmdveWFsQGluLmlibS5jb20KK1A6CUhhcmVuIE15bmVuaQorTToJaGJhYnVAdXMuaWJtLmNvbQorTDoJZmFzdGJvb3RAbGlzdHMub3NkbC5vcmcKK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly9sc2Uuc291cmNlZm9yZ2UubmV0L2tkdW1wLworUzoJTWFpbnRhaW5lZAorCiBLRVJORUwgQVVUT01PVU5URVIgKEFVVE9GUykKIFA6CUguIFBldGVyIEFudmluCiBNOglocGFAenl0b3IuY29tCkBAIC0xNTUwLDkgKzE2MTAsNyBAQAogCiBLRVhFQwogUDoJRXJpYyBCaWVkZXJtYW4KLVA6CVJhbmR5IER1bmxhcAogTToJZWJpZWRlcm1AeG1pc3Npb24uY29tCi1NOglyZHVubGFwQHhlbm90aW1lLm5ldAogVzoJaHR0cDovL3d3dy54bWlzc2lvbi5jb20vfmViaWVkZXJtL2ZpbGVzL2tleGVjLwogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogTDoJZmFzdGJvb3RAb3NkbC5vcmcKQEAgLTE1ODIsNiArMTY0MCwxMSBAQAogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorTEVEIFNVQlNZU1RFTQorUDoJUmljaGFyZCBQdXJkaWUKK006CXJwdXJkaWVAcnBzeXMubmV0CitTOglNYWludGFpbmVkCisKIExFR08gVVNCIFRvd2VyIGRyaXZlcgogUDoJSnVlcmdlbiBTdHViZXIKIE06CXN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldApAQCAtMTY0MSw3ICsxNzA0LDcgQEAKIAogTElOVVggRk9SIFBPV0VSUEMgRU1CRURERUQgUFBDOFhYCiBQOglNYXJjZWxvIFRvc2F0dGkKLU06CW1hcmNlbG8udG9zYXR0aUBjeWNsYWRlcy5jb20KK006CW1hcmNlbG9Aa3ZhY2sub3JnCiBXOglodHRwOi8vd3d3LnBlbmd1aW5wcGMub3JnLwogTDoJbGludXhwcGMtZW1iZWRkZWRAb3psYWJzLm9yZwogUzoJTWFpbnRhaW5lZApAQCAtMTY2NSw3ICsxNzI4LDcgQEAKIFA6CUFudG9uIEJsYW5jaGFyZAogTToJYW50b25Ac2FtYmEub3JnCiBNOglhbnRvbkBhdS5pYm0uY29tCi1XOglodHRwOi8vbGludXhwcGM2NC5vcmcKK1c6CWh0dHA6Ly93d3cucGVuZ3VpbnBwYy5vcmcvcHBjNjQvCiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwogUzoJU3VwcG9ydGVkCiAKQEAgLTE4MjYsNiArMTg4OSwxMSBAQAogVzoJaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgva2VybmVsLXBhdGNoZXMuaHRtbAogUzoJTWFpbnRhaW5lZAogCitNVUxUSU1FRElBIENBUkQgU1VCU1lTVEVNCitQOglSdXNzZWxsIEtpbmcKK006CXJtayttbWNAYXJtLmxpbnV4Lm9yZy51aworUzoJTWFpbnRhaW5lZAorCiBNVUxUSVNPVU5EIFNPVU5EIERSSVZFUgogUDoJQW5kcmV3IFZlbGlhdGgKIE06CWFuZHJld3R2QHVzYS5uZXQKQEAgLTE4NDgsNiArMTkxNiwxMiBAQAogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorTkVURU0gTkVUV09SSyBFTVVMQVRPUgorUDoJU3RlcGhlbiBIZW1taW5nZXIKK006CXNoZW1taW5nZXJAb3NkbC5vcmcKK0w6CW5ldGVtQG9zZGwub3JnCitTOglNYWludGFpbmVkCisKIE5FVEZJTFRFUi9JUFRBQkxFUy9JUENIQUlOUwogUDoJUnVzdHkgUnVzc2VsbAogUDoJTWFyYyBCb3VjaGVyCkBAIC0xODY1LDYgKzE5MzksNyBAQAogUDoJUmFsZiBCYWVjaGxlCiBNOglyYWxmQGxpbnV4LW1pcHMub3JnCiBMOglsaW51eC1oYW1zQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5saW51eC1heDI1Lm9yZy8KIFM6CU1haW50YWluZWQKIAogTkVUV09SSyBCTE9DSyBERVZJQ0UKQEAgLTIwNTIsOCArMjEyNywxMiBAQAogTToJbWF0dGhld0B3aWwuY3gKIFA6CUdyYW50IEdydW5kbGVyCiBNOglncnVuZGxlckBwYXJpc2MtbGludXgub3JnCitQOglLeWxlIE1jTWFydGluCitNOglreWxlQHBhcmlzYy1saW51eC5vcmcKIEw6CXBhcmlzYy1saW51eEBwYXJpc2MtbGludXgub3JnCiBXOglodHRwOi8vd3d3LnBhcmlzYy1saW51eC5vcmcvCitUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2t5bGUvcGFyaXNjLTIuNi5naXQKK1Q6CWN2cyBjdnMucGFyaXNjLWxpbnV4Lm9yZzovdmFyL2N2cy9saW51eC0yLjYKIFM6CU1haW50YWluZWQKIAogUENJIEVSUk9SIFJFQ09WRVJZCkBAIC0yMjU2LDYgKzIzMzUsNyBAQAogUDoJUmFsZiBCYWVjaGxlCiBNOglyYWxmQGxpbnV4LW1pcHMub3JnCiBMOglsaW51eC1oYW1zQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5saW51eC1heDI1Lm9yZy8KIFM6CU1haW50YWluZWQKIAogUklTQ09NOCBEUklWRVIKQEAgLTI0ODYsNiArMjU2NiwxMiBAQAogTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCiBTOglNYWludGFpbmVkCiAKK1NQSSBTVUJTWVNURU0KK1A6CURhdmlkIEJyb3duZWxsCitNOglkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0CitMOglzcGktZGV2ZWwtZ2VuZXJhbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1M6CU1haW50YWluZWQKKwogVFBNIERFVklDRSBEUklWRVIKIFA6CUt5bGVuZSBIYWxsCiBNOglramhhbGxAdXMuaWJtLmNvbQpAQCAtMzA1NCwxMyArMzE0MCw2IEBACiBMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCiBTOglPZGQgRml4ZXMKIAotV0FOIFJPVVRFUiAmIFNBTkdPTUEgV0FOUElQRSBEUklWRVJTICYgQVBJIChYLjI1LCBGUkFNRSBSRUxBWSwgUFBQLCBDSVNDTyBIRExDKQotUDoJTmVuYWQgQ29yYmljCi1NOgluY29yYmljQHNhbmdvbWEuY29tCi1NOglkbUBzYW5nb21hLmNvbQotVzoJaHR0cDovL3d3dy5zYW5nb21hLmNvbQotUzoJU3VwcG9ydGVkCi0KIFdBVENIRE9HIERFVklDRSBEUklWRVJTCiBQOglXaW0gVmFuIFNlYnJvZWNrCiBNOgl3aW1AaWd1YW5hLmJlCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGFmNjIxMGQuLmEzYTdiYWEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDggKzEsOCBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2Ci1TVUJMRVZFTCA9IDE2Ci1FWFRSQVZFUlNJT04gPQotTkFNRT1TbGlkaW5nIFNub3cgTGVvcGFyZAorU1VCTEVWRUwgPSAxNworRVhUUkFWRVJTSU9OID0tcmM2CitOQU1FPUNyYXplZCBTbm93LVdlYXNlbAogCiAjICpET0NVTUVOVEFUSU9OKgogIyBUbyBzZWUgYSBsaXN0IG9mIHR5cGljYWwgdGFyZ2V0cyBleGVjdXRlICJtYWtlIGhlbHAiCkBAIC0zNDQsMTYgKzM0NCwxNCBAQAogc2NyaXB0cy9iYXNpYy8lOiBzY3JpcHRzX2Jhc2ljIDsKIAogUEhPTlkgKz0gb3V0cHV0bWFrZWZpbGUKLSMgb3V0cHV0bWFrZWZpbGUgZ2VuZXJhdGUgYSBNYWtlZmlsZSB0byBiZSBwbGFjZWQgaW4gb3V0cHV0IGRpcmVjdG9yeSwgaWYKLSMgdXNpbmcgYSBzZXBlcmF0ZSBvdXRwdXQgZGlyZWN0b3J5LiBUaGlzIGFsbG93cyBjb252aW5pZW50IHVzZQotIyBvZiBtYWtlIGluIG91dHB1dCBkaXJlY3RvcnkKKyMgb3V0cHV0bWFrZWZpbGUgZ2VuZXJhdGVzIGEgTWFrZWZpbGUgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnksIGlmIHVzaW5nIGEKKyMgc2VwYXJhdGUgb3V0cHV0IGRpcmVjdG9yeS4gVGhpcyBhbGxvd3MgY29udmVuaWVudCB1c2Ugb2YgbWFrZSBpbiB0aGUKKyMgb3V0cHV0IGRpcmVjdG9yeS4KIG91dHB1dG1ha2VmaWxlOgotCSQoUSlpZiB0ZXN0ICEgJChzcmN0cmVlKSAtZWYgJChvYmp0cmVlKTsgdGhlbiBcCi0JJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9ta21ha2VmaWxlICAgICAgICAgICAgICBcCi0JICAgICQoc3JjdHJlZSkgJChvYmp0cmVlKSAkKFZFUlNJT04pICQoUEFUQ0hMRVZFTCkgICAgICAgICBcCi0JICAgID4gJChvYmp0cmVlKS9NYWtlZmlsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgIGVjaG8gJyAgR0VOICAgICQob2JqdHJlZSkvTWFrZWZpbGUnOyAgICAgICAgICAgICAgICAgICBcCi0JZmkKK2lmbmVxICgkKEtCVUlMRF9TUkMpLCkKKwkkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9ta21ha2VmaWxlIFwKKwkgICAgJChzcmN0cmVlKSAkKG9ianRyZWUpICQoVkVSU0lPTikgJChQQVRDSExFVkVMKQorZW5kaWYKIAogIyBUbyBtYWtlIHN1cmUgd2UgZG8gbm90IGluY2x1ZGUgLmNvbmZpZyBmb3IgYW55IG9mIHRoZSAqY29uZmlnIHRhcmdldHMKICMgY2F0Y2ggdGhlbSBlYXJseSwgYW5kIGhhbmQgdGhlbSBvdmVyIHRvIHNjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQpAQCAtNzk2LDggKzc5NCw4IEBACiBwcmVwYXJlMTogcHJlcGFyZTIgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggaW5jbHVkZS9hc20gXAogICAgICAgICAgICAgICAgICAgIGluY2x1ZGUvY29uZmlnL01BUktFUgogaWZuZXEgKCQoS0JVSUxEX01PRFVMRVMpLCkKLQkkKFEpcm0gLXJmICQoTU9EVkVSRElSKQogCSQoUSlta2RpciAtcCAkKE1PRFZFUkRJUikKKwkkKFEpcm0gLWYgJChNT0RWRVJESVIpLyoKIGVuZGlmCiAKIGFyY2hwcmVwYXJlOiBwcmVwYXJlMSBzY3JpcHRzX2Jhc2ljCkBAIC0xMDg2LDggKzEwODQsOCBAQAogS0JVSUxEX01PRFVMRVMgOj0gMQogUEhPTlkgKz0gY3Jtb2R2ZXJkaXIKIGNybW9kdmVyZGlyOgotCSQoUSlybSAtcmYgJChNT0RWRVJESVIpCiAJJChRKW1rZGlyIC1wICQoTU9EVkVSRElSKQorCSQoUSlybSAtZiAkKE1PRFZFUkRJUikvKgogCiBQSE9OWSArPSAkKG9ianRyZWUpL01vZHVsZS5zeW12ZXJzCiAkKG9ianRyZWUpL01vZHVsZS5zeW12ZXJzOgpAQCAtMTExMiw3ICsxMTEwLDYgQEAKIGluc3RhbGwtZGlyIDo9ICQoaWYgJChJTlNUQUxMX01PRF9ESVIpLCQoSU5TVEFMTF9NT0RfRElSKSxleHRyYSkKIFBIT05ZICs9IF9lbW9kaW5zdF8KIF9lbW9kaW5zdF86Ci0JJChRKXJtIC1yZiAkKE1PRExJQikvJChpbnN0YWxsLWRpcikKIAkkKFEpbWtkaXIgLXAgJChNT0RMSUIpLyQoaW5zdGFsbC1kaXIpCiAJJChRKSQoTUFLRSkgLXJSIC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5tb2RpbnN0CiAKQEAgLTEyNzUsNDAgKzEyNzIsNDMgQEAKIAogIyBTaW5nbGUgdGFyZ2V0cwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhlIGRpcmVjdG9yeSBwYXJ0IGlzIHRha2VuIGZyb20gZmlyc3QgcHJlcmVxdWlzaXRlLCBzbyB0aGlzCi0jIHdvcmtzIGV2ZW4gd2l0aCBleHRlcm5hbCBtb2R1bGVzCi0lLnM6ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCi0lLmk6ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCi0lLm86ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCi0lLmxzdDogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoZGlyICQ8KSAkKGRpciAkPCkkKG5vdGRpciAkQCkKLSUuczogJS5TIHByZXBhcmUgc2NyaXB0cyBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoZGlyICQ8KSAkKGRpciAkPCkkKG5vdGRpciAkQCkKLSUubzogJS5TIHByZXBhcmUgc2NyaXB0cyBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoZGlyICQ8KSAkKGRpciAkPCkkKG5vdGRpciAkQCkKKyMgU2luZ2xlIHRhcmdldHMgYXJlIGNvbXBhdGlibGUgd2l0aDoKKyMgLSBidWlsZCB3aGl0aCBtaXhlZCBzb3VyY2UgYW5kIG91dHB1dAorIyAtIGJ1aWxkIHdpdGggc2VwYXJhdGUgb3V0cHV0IGRpciAnbWFrZSBPPS4uLicKKyMgLSBleHRlcm5hbCBtb2R1bGVzCisjCisjICB0YXJnZXQtZGlyID0+IHdoZXJlIHRvIHN0b3JlIG91dHB1dGZpbGUKKyMgIGJ1aWxkLWRpciAgPT4gZGlyZWN0b3J5IGluIGtlcm5lbCBzb3VyY2UgdHJlZSB0byB1c2UKIAotIyBGb3IgZXh0ZXJuYWwgbW9kdWxlcyB3ZSBzaGFsbCBpbmNsdWRlIGFueSBkaXJlY3Rvcnkgb2YgdGhlIHRhcmdldCwKLSMgYnV0IHVzdWFsIGNhc2UgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IHBhcnQuCi0jIG1ha2UgTT1gcHdkYCBtb2R1bGUubyAgICAgPT4gJChkaXIgJEApPS4vCi0jIG1ha2UgTT1gcHdkYCBmb28vbW9kdWxlLm8gPT4gJChkaXIgJEApPWZvby8KLSMgbWFrZSBNPWBwd2RgIC8gICAgICAgICAgICA9PiAkKGRpciAkQCk9LwotIAogaWZlcSAoJChLQlVJTERfRVhUTU9EKSwpCi0gICAgICAgIHRhcmdldC1kaXIgPSAkKEBEKQorICAgICAgICBidWlsZC1kaXIgID0gJChwYXRzdWJzdCAlLywlLCQoZGlyICRAKSkKKyAgICAgICAgdGFyZ2V0LWRpciA9ICQoZGlyICRAKQogZWxzZQogICAgICAgICB6YXAtc2xhc2g9JChmaWx0ZXItb3V0IC4sJChwYXRzdWJzdCAlLywlLCQoZGlyICRAKSkpCi0gICAgICAgIHRhcmdldC1kaXIgPSAkKEtCVUlMRF9FWFRNT0QpJChpZiAkKHphcC1zbGFzaCksLyQoemFwLXNsYXNoKSkKKyAgICAgICAgYnVpbGQtZGlyICA9ICQoS0JVSUxEX0VYVE1PRCkkKGlmICQoemFwLXNsYXNoKSwvJCh6YXAtc2xhc2gpKQorICAgICAgICB0YXJnZXQtZGlyID0gJChpZiAkKEtCVUlMRF9FWFRNT0QpLCQoZGlyICQ8KSwkKGRpciAkQCkpCiBlbmRpZgogCi0vICUvOiAgICAgIHNjcmlwdHMgcHJlcGFyZSBGT1JDRQorJS5zOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChidWlsZC1kaXIpICQodGFyZ2V0LWRpcikkKG5vdGRpciAkQCkKKyUuaTogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKHRhcmdldC1kaXIpJChub3RkaXIgJEApCislLm86ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJCh0YXJnZXQtZGlyKSQobm90ZGlyICRAKQorJS5sc3Q6ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJCh0YXJnZXQtZGlyKSQobm90ZGlyICRAKQorJS5zOiAlLlMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChidWlsZC1kaXIpICQodGFyZ2V0LWRpcikkKG5vdGRpciAkQCkKKyUubzogJS5TIHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKHRhcmdldC1kaXIpJChub3RkaXIgJEApCisKKyMgTW9kdWxlcworLyAlLzogcHJlcGFyZSBzY3JpcHRzIEZPUkNFCiAJJChRKSQoTUFLRSkgS0JVSUxEX01PRFVMRVM9JChpZiAkKENPTkZJR19NT0RVTEVTKSwxKSBcCi0JJChidWlsZCk9JCh0YXJnZXQtZGlyKQotJS5rbzogc2NyaXB0cyBGT1JDRQorCSQoYnVpbGQpPSQoYnVpbGQtZGlyKQorJS5rbzogcHJlcGFyZSBzY3JpcHRzIEZPUkNFCiAJJChRKSQoTUFLRSkgS0JVSUxEX01PRFVMRVM9JChpZiAkKENPTkZJR19NT0RVTEVTKSwxKSAgIFwKLQkkKGJ1aWxkKT0kKHRhcmdldC1kaXIpICQoQDoua289Lm8pCisJJChidWlsZCk9JChidWlsZC1kaXIpICQoQDoua289Lm8pCiAJJChRKSQoTUFLRSkgLXJSIC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CiAKICMgRklYTUUgU2hvdWxkIGdvIGludG8gYSBtYWtlLmxpYiBvciBzb21ldGhpbmcgCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggMDVlMDU1NS4uM2UyNjQ3MiAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMTY1LDEwICsxNjUsMzEgQEAKIAkibWFrZSB4Y29uZmlnIiAgICAgWCB3aW5kb3dzIChRdCkgYmFzZWQgY29uZmlndXJhdGlvbiB0b29sLgogCSJtYWtlIGdjb25maWciICAgICBYIHdpbmRvd3MgKEd0aykgYmFzZWQgY29uZmlndXJhdGlvbiB0b29sLgogCSJtYWtlIG9sZGNvbmZpZyIgICBEZWZhdWx0IGFsbCBxdWVzdGlvbnMgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mCi0JCQkgICB5b3VyIGV4aXN0aW5nIC4vLmNvbmZpZyBmaWxlLgorCQkJICAgeW91ciBleGlzdGluZyAuLy5jb25maWcgZmlsZSBhbmQgYXNraW5nIGFib3V0CisJCQkgICBuZXcgY29uZmlnIHN5bWJvbHMuCiAJIm1ha2Ugc2lsZW50b2xkY29uZmlnIgogCQkJICAgTGlrZSBhYm92ZSwgYnV0IGF2b2lkcyBjbHV0dGVyaW5nIHRoZSBzY3JlZW4KIAkJCSAgIHdpdGggcXVlc3Rpb25zIGFscmVhZHkgYW5zd2VyZWQuCisJIm1ha2UgZGVmY29uZmlnIiAgIENyZWF0ZSBhIC4vLmNvbmZpZyBmaWxlIGJ5IHVzaW5nIHRoZSBkZWZhdWx0CisJCQkgICBzeW1ib2wgdmFsdWVzIGZyb20gYXJjaC8kQVJDSC9kZWZjb25maWcuCisJIm1ha2UgYWxseWVzY29uZmlnIgorCQkJICAgQ3JlYXRlIGEgLi8uY29uZmlnIGZpbGUgYnkgc2V0dGluZyBzeW1ib2wKKwkJCSAgIHZhbHVlcyB0byAneScgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkibWFrZSBhbGxtb2Rjb25maWciCisJCQkgICBDcmVhdGUgYSAuLy5jb25maWcgZmlsZSBieSBzZXR0aW5nIHN5bWJvbAorCQkJICAgdmFsdWVzIHRvICdtJyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSJtYWtlIGFsbG5vY29uZmlnIiBDcmVhdGUgYSAuLy5jb25maWcgZmlsZSBieSBzZXR0aW5nIHN5bWJvbAorCQkJICAgdmFsdWVzIHRvICduJyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSJtYWtlIHJhbmRjb25maWciICBDcmVhdGUgYSAuLy5jb25maWcgZmlsZSBieSBzZXR0aW5nIHN5bWJvbAorCQkJICAgdmFsdWVzIHRvIHJhbmRvbSB2YWx1ZXMuCisKKyAgIFRoZSBhbGx5ZXNjb25maWcvYWxsbW9kY29uZmlnL2FsbG5vY29uZmlnL3JhbmRjb25maWcgdmFyaWFudHMgY2FuCisgICBhbHNvIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgS0NPTkZJR19BTExDT05GSUcgdG8gc3BlY2lmeSBhCisgICBmaWxlbmFtZSB0aGF0IGNvbnRhaW5zIGNvbmZpZyBvcHRpb25zIHRoYXQgdGhlIHVzZXIgcmVxdWlyZXMgdG8gYmUKKyAgIHNldCB0byBhIHNwZWNpZmljIHZhbHVlLiAgSWYgS0NPTkZJR19BTExDT05GSUc9ZmlsZW5hbWUgaXMgbm90IHVzZWQsCisgICAibWFrZSAqY29uZmlnIiBjaGVja3MgZm9yIGEgZmlsZSBuYW1lZCAiYWxse3llcy9tb2Qvbm8vcmFuZG9tfS5jb25maWciCisgICBmb3Igc3ltYm9sIHZhbHVlcyB0aGF0IGFyZSB0byBiZSBmb3JjZWQuICBJZiB0aGlzIGZpbGUgaXMgbm90IGZvdW5kLAorICAgaXQgY2hlY2tzIGZvciBhIGZpbGUgbmFtZWQgImFsbC5jb25maWciIHRvIGNvbnRhaW4gZm9yY2VkIHZhbHVlcy4KICAgIAogCU5PVEVTIG9uICJtYWtlIGNvbmZpZyI6CiAJLSBoYXZpbmcgdW5uZWNlc3NhcnkgZHJpdmVycyB3aWxsIG1ha2UgdGhlIGtlcm5lbCBiaWdnZXIsIGFuZCBjYW4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCA5YmVmNjFiLi4yMTNjNzg1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC00NTMsNyArNDUzLDcgQEAKIAogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWJvb2wKLQlkZWZhdWx0IHkgaWYgIUFMUEhBX0VWNiAmJiAhQUxQSEFfRVY2NworCWRlZmF1bHQgeSBpZiAhQUxQSEFfRVY2NwogCiBjb25maWcgQUxQSEFfQVZBTlRJCiAJYm9vbApAQCAtNTQ5LDYgKzU0OSwxMSBAQAogCSAgQWNjZXNzKS4gIFRoaXMgb3B0aW9uIGlzIGZvciBjb25maWd1cmluZyBoaWdoLWVuZCBtdWx0aXByb2Nlc3NvcgogCSAgc2VydmVyIG1hY2hpbmVzLiAgSWYgaW4gZG91YnQsIHNheSBOLgogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICI3IgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiAjIExBUkdFX1ZNQUxMT0MgaXMgcmFjeSwgaWYgeW91ICpyZWFsbHkqIG5lZWQgaXQgdGhlbiBmaXggaXQgZmlyc3QKIGNvbmZpZyBBTFBIQV9MQVJHRV9WTUFMTE9DCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvYWxwaGFfa3N5bXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMKaW5kZXggMTg5OGVhNy4uMmIyNDVhZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvYWxwaGFfa3N5bXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9hbHBoYV9rc3ltcy5jCkBAIC03Niw3ICs3Niw2IEBACiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwogRVhQT1JUX1NZTUJPTChzdHJuY2F0KTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTChtZW1jbXApOwpAQCAtMTgzLDcgKzE4Miw2IEBACiBFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uKTsKIEVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fb25fY3B1KTsKIEVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwotRVhQT1JUX1NZTUJPTChjcHVfcHJlc2VudF9tYXNrKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCkBAIC0yMTYsOCArMjE0LDYgQEAKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0wobWVtY2hyKTsKIAotRVhQT1JUX1NZTUJPTChnZXRfd2NoYW4pOwotCiAjaWZkZWYgQ09ORklHX0FMUEhBX0lST05HQVRFCiBFWFBPUlRfU1lNQk9MKGlyb25nYXRlX2lvcmVtYXApOwogRVhQT1JUX1NZTUJPTChpcm9uZ2F0ZV9pb3VubWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jCmluZGV4IDQ0ODY2Y2IuLjdmNmE5ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYwpAQCAtNDM1LDcgKzQzNSw3IEBACiAJCXN0ciA9IHBjaGFyOwogCX0gd2hpbGUoKnN0cik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImlvNz0iLCBtYXJ2ZWxfc3BlY2lmeV9pbzcpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOTkyNGZkMC4uYzc2MGE4MyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwpAQCAtOTQsNyArOTQsNyBAQAogCWlmIChjcHVpZCAhPSBib290X2NwdWlkKSB7CiAJCWZsYWdzIHw9IDB4MDAwNDAwMDBVTDsgLyogInJlbWFpbiBoYWx0ZWQiICovCiAJCSpwZmxhZ3MgPSBmbGFnczsKLQkJY2xlYXJfYml0KGNwdWlkLCAmY3B1X3ByZXNlbnRfbWFzayk7CisJCWNwdV9jbGVhcihjcHVpZCwgY3B1X3ByZXNlbnRfbWFwKTsKIAkJaGFsdCgpOwogCX0KICNlbmRpZgpAQCAtMTIwLDggKzEyMCw4IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogV2FpdCBmb3IgdGhlIHNlY29uZGFyaWVzIHRvIGhhbHQuICovCi0JY3B1X2NsZWFyKGJvb3RfY3B1aWQsIGNwdV9wb3NzaWJsZV9tYXApOwotCXdoaWxlIChjcHVzX3dlaWdodChjcHVfcG9zc2libGVfbWFwKSkKKwljcHVfY2xlYXIoYm9vdF9jcHVpZCwgY3B1X3ByZXNlbnRfbWFwKTsKKwl3aGlsZSAoY3B1c193ZWlnaHQoY3B1X3ByZXNlbnRfbWFwKSkKIAkJYmFycmllcigpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCmluZGV4IGRkODc2OTYuLjU1OGI4MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwpAQCAtMjQsMTAgKzI0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIENPTkZJR19BTFBIQV9MQ0EgZXRjICovCiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC00NzAsNiArNDcyLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0CityZWdpc3Rlcl9jcHVzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQlzdHJ1Y3QgY3B1ICpwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJlZ2lzdGVyX2NwdShwLCBpLCBOVUxMKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwocmVnaXN0ZXJfY3B1cyk7CisKIHZvaWQgX19pbml0CiBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7CkBAIC0xNDc4LDMgKzE0OTYsMjAgQEAKICNlbmRpZgogICAgICAgICByZXR1cm4gTk9USUZZX0RPTkU7CiB9CisKK3N0YXRpYyBfX2luaXQgaW50IGFkZF9wY3Nwa3Iodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKwlpbnQgcmV0OworCisJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInBjc3BrciIsIC0xKTsKKwlpZiAoIXBkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQocGQpOworCisJcmV0dXJuIHJldDsKK30KK2RldmljZV9pbml0Y2FsbChhZGRfcGNzcGtyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKaW5kZXggMDJjMmRiMC4uNGRjMjczZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKQEAgLTY4LDcgKzY4LDYgQEAKIHN0YXRpYyBpbnQgc21wX3NlY29uZGFyeV9hbGl2ZSBfX2luaXRkYXRhID0gMDsKIAogLyogV2hpY2ggY3B1cyBpZHMgY2FtZSBvbmxpbmUuICAqLwotY3B1bWFza190IGNwdV9wcmVzZW50X21hc2s7CiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CiAKIEVYUE9SVF9TWU1CT0woY3B1X29ubGluZV9tYXApOwpAQCAtNDM5LDcgKzQzOCw3IEBACiAJCQlpZiAoKGNwdS0+ZmxhZ3MgJiAweDFjYykgPT0gMHgxY2MpIHsKIAkJCQlzbXBfbnVtX3Byb2JlZCsrOwogCQkJCS8qIEFzc3VtZSBoZXJlIHRoYXQgIndoYW1pIiA9PSBpbmRleCAqLwotCQkJCWNwdV9zZXQoaSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCQkJY3B1X3NldChpLCBjcHVfcHJlc2VudF9tYXApOwogCQkJCWNwdS0+cGFsX3JldmlzaW9uID0gYm9vdF9jcHVfcGFscmV2OwogCQkJfQogCkBAIC00NTAsMTIgKzQ0OSwxMCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJc21wX251bV9wcm9iZWQgPSAxOwotCQljcHVfc2V0KGJvb3RfY3B1aWQsIGNwdV9wb3NzaWJsZV9tYXApOwogCX0KLQljcHVfcHJlc2VudF9tYXNrID0gY3B1bWFza19vZl9jcHUoYm9vdF9jcHVpZCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTTVA6ICVkIENQVXMgcHJvYmVkIC0tIGNwdV9wcmVzZW50X21hc2sgPSAlbHhcbiIsCi0JICAgICAgIHNtcF9udW1fcHJvYmVkLCBjcHVfcG9zc2libGVfbWFwLmJpdHNbMF0pOworCXByaW50ayhLRVJOX0lORk8gIlNNUDogJWQgQ1BVcyBwcm9iZWQgLS0gY3B1X3ByZXNlbnRfbWFwID0gJWx4XG4iLAorCSAgICAgICBzbXBfbnVtX3Byb2JlZCwgY3B1X3ByZXNlbnRfbWFwLmJpdHNbMF0pOwogfQogCiAvKgpAQCAtNDc0LDcgKzQ3MSw3IEBACiAKIAkvKiBOb3RoaW5nIHRvIGRvIG9uIGEgVVAgYm94LCBvciB3aGVuIHRvbGQgbm90IHRvLiAgKi8KIAlpZiAoc21wX251bV9wcm9iZWQgPT0gMSB8fCBtYXhfY3B1cyA9PSAwKSB7Ci0JCWNwdV9wcmVzZW50X21hc2sgPSBjcHVtYXNrX29mX2NwdShib290X2NwdWlkKTsKKwkJY3B1X3ByZXNlbnRfbWFwID0gY3B1bWFza19vZl9jcHUoYm9vdF9jcHVpZCk7CiAJCXByaW50ayhLRVJOX0lORk8gIlNNUCBtb2RlIGRlYWN0aXZhdGVkLlxuIik7CiAJCXJldHVybjsKIAl9CkBAIC00ODcsMTEgKzQ4NCw2IEBACiB2b2lkIF9fZGV2aW5pdAogc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKIHsKLQkvKgotCSAqIE1hcmsgdGhlIGJvb3QgY3B1IChjdXJyZW50IGNwdSkgYXMgYm90aCBwcmVzZW50IGFuZCBvbmxpbmUKLQkgKi8gCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9wcmVzZW50X21hc2spOwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CiB9CiAKIGludCBfX2RldmluaXQKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKaW5kZXggNWY4NDQxNy4uMjU1MWZiNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlyZWdpc3RlciBpbnQgYmNwdSA9IGJvb3RfY3B1aWQ7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JY3B1bWFza190IGNwbSA9IGNwdV9wcmVzZW50X21hc2s7CisJY3B1bWFza190IGNwbSA9IGNwdV9wcmVzZW50X21hcDsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpkaW0wLCAqZGltMSwgKmRpbTIsICpkaW0zOwogCXVuc2lnbmVkIGxvbmcgbWFzazAsIG1hc2sxLCBtYXNrMiwgbWFzazMsIGR1bW15OwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2xpYi9zdHJuY3B5LlMgYi9hcmNoL2FscGhhL2xpYi9zdHJuY3B5LlMKaW5kZXggMzM4NTUxYy4uYmJkZWYxYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9saWIvc3RybmNweS5TCisrKyBiL2FyY2gvYWxwaGEvbGliL3N0cm5jcHkuUwpAQCAtNDMsOCArNDMsOCBAQAogCiAJLmFsaWduCTQKICRtdWx0aXdvcmQ6Ci0Jc3VicQkkMjQsIDEsICQyCSMgY2xlYXIgdGhlIGZpbmFsIGJpdHMgaW4gdGhlIHByZXYgd29yZAotCW9yCSQyLCAkMjQsICQyCisJc3VicQkkMjcsIDEsICQyCSMgY2xlYXIgdGhlIGZpbmFsIGJpdHMgaW4gdGhlIHByZXYgd29yZAorCW9yCSQyLCAkMjcsICQyCiAJemFwbm90CSQxLCAkMiwgJDEKIAlzdWJxCSQxOCwgMSwgJDE4CiAKQEAgLTcwLDggKzcwLDggQEAKIAlibmUJJDE4LCAwYgogCiAxOglsZHFfdQkkMSwgMCgkMTYpCSMgY2xlYXIgdGhlIGxlYWRpbmcgYml0cyBpbiB0aGUgZmluYWwgd29yZAotCXN1YnEJJDI3LCAxLCAkMgotCW9yCSQyLCAkMjcsICQyCisJc3VicQkkMjQsIDEsICQyCisJb3IJJDIsICQyNCwgJDIKIAogCXphcAkkMSwgJDIsICQxCiAJc3RxX3UJJDEsIDAoJDE2KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggYmE0NmQ3Ny4uMDhiN2NjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC03Nyw2ICs3NywxNCBAQAogY29uZmlnIEFSQ0hfTVREX1hJUAogCWJvb2wKIAorY29uZmlnIFZFQ1RPUlNfQkFTRQorCWhleAorCWRlZmF1bHQgMHhmZmZmMDAwMCBpZiBNTVUKKwlkZWZhdWx0IERSQU1fQkFTRSBpZiBSRU1BUF9WRUNUT1JTX1RPX1JBTQorCWRlZmF1bHQgMHgwMDAwMDAwMAorCWhlbHAKKwkgIFRoZSBiYXNlIGFkZHJlc3Mgb2YgZXhjZXB0aW9uIHZlY3RvcnMuCisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCiBtZW51ICJTeXN0ZW0gVHlwZSIKQEAgLTE0Miw4ICsxNTAsNiBAQAogCiBjb25maWcgQVJDSF9JWFA0WFgKIAlib29sICJJWFA0eHgtYmFzZWQiCi0Jc2VsZWN0IERNQUJPVU5DRQotCXNlbGVjdCBQQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDRYWCAoWFNjYWxlKSBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KIApAQCAtNTA0LDYgKzUxMCwxMiBAQAogCSAgb3IgaGF2ZSBodWdlIGhvbGVzIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGZvciBvdGhlciByZWFzb25zLgogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdm0vbnVtYT4gZm9yIG1vcmUuCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjQiIGlmIEFSQ0hfTEg3QTQwWAorCWRlZmF1bHQgIjIiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKQEAgLTgzOSw2ICs4NTEsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWZkL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9sZWRzL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWctbm9tbXUgYi9hcmNoL2FybS9LY29uZmlnLW5vbW11Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTc0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9LY29uZmlnLW5vbW11CkBAIC0wLDAgKzEsNDQgQEAKKyMKKyMgS2NvbmZpZyBmb3IgdUNsaW51eChub24tcGFnZWQgTU0pIGRlcGVuZCBjb25maWd1cmF0aW9ucworIyBIeW9rIFMuIENob2kgPGh5b2suY2hvaUBzYW1zdW5nLmNvbT4KKyMgCisKK2NvbmZpZyBTRVRfTUVNX1BBUkFNCisJYm9vbCAiU2V0IGZsYXNoL3NkcmFtIHNpemUgYW5kIGJhc2UgYWRkciIKKwloZWxwCisJIFNheSBZIHRvIG1hbnVhbGx5IHNldCB0aGUgYmFzZSBhZGRyZXNzZXMgYW5kIHNpemVzLgorCSBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYXNzaWduZWQuCisKK2NvbmZpZyBEUkFNX0JBU0UKKwloZXggJyhTKURSQU0gQmFzZSBBZGRyZXNzJyBpZiBTRVRfTUVNX1BBUkFNCisJZGVmYXVsdCAweDAwODAwMDAwCisKK2NvbmZpZyBEUkFNX1NJWkUKKwloZXggJyhTKURSQU0gU0laRScgaWYgU0VUX01FTV9QQVJBTQorCWRlZmF1bHQgMHgwMDgwMDAwMAorCitjb25maWcgRkxBU0hfTUVNX0JBU0UKKwloZXggJ0ZMQVNIIEJhc2UgQWRkcmVzcycgaWYgU0VUX01FTV9QQVJBTQorCWRlZmF1bHQgMHgwMDQwMDAwMAorCitjb25maWcgRkxBU0hfU0laRQorCWhleCAnRkxBU0ggU2l6ZScgaWYgU0VUX01FTV9QQVJBTQorCWRlZmF1bHQgMHgwMDQwMDAwMAorCitjb25maWcgUkVNQVBfVkVDVE9SU19UT19SQU0KKwlib29sICdJbnN0YWxsIHZlY3RvcnMgdG8gdGhlIGJlZ2luaW5nIG9mIFJBTScgaWYgRFJBTV9CQVNFCisJZGVwZW5kcyBvbiBEUkFNX0JBU0UKKwloZWxwCisJICBUaGUga2VybmVsIG5lZWRzIHRvIGNoYW5nZSB0aGUgaGFyZHdhcmUgZXhjZXB0aW9uIHZlY3RvcnMuCisJICBJbiBub21tdSBtb2RlLCB0aGUgaGFyZHdhcmUgZXhjZXB0aW9uIHZlY3RvcnMgYXJlIG5vcm1hbGx5CisJICBwbGFjZWQgYXQgYWRkcmVzcyAweDAwMDAwMDAwLiBIb3dldmVyLCB0aGlzIHJlZ2lvbiBtYXkgYmUKKwkgIG9jY3VwaWVkIGJ5IHJlYWQtb25seSBtZW1vcnkgZGVwZW5kaW5nIG9uIEgvVyBkZXNpZ24uCisKKwkgIElmIHRoZSByZWdpb24gY29udGFpbnMgcmVhZC13cml0ZSBtZW1vcnksIHNheSAnbicgaGVyZS4KKworCSAgSWYgeW91ciBDUFUgcHJvdmlkZXMgYSByZW1hcCBmYWNpbGl0eSB3aGljaCBhbGxvd3MgdGhlIGV4Y2VwdGlvbgorCSAgdmVjdG9ycyB0byBiZSBtYXBwZWQgdG8gd3JpdGFibGUgbWVtb3J5LCBzYXkgJ24nIGhlcmUuCisKKwkgIE90aGVyd2lzZSwgc2F5ICd5JyBoZXJlLiAgSW4gdGhpcyBjYXNlLCB0aGUga2VybmVsIHdpbGwgcmVxdWlyZQorCSAgZXh0ZXJuYWwgc3VwcG9ydCB0byByZWRpcmVjdCB0aGUgaGFyZHdhcmUgZXhjZXB0aW9uIHZlY3RvcnMgdG8KKwkgIHRoZSB3cml0YWJsZSB2ZXJzaW9ucyBsb2NhdGVkIGF0IERSQU1fQkFTRS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IDVkM2FjZmYuLmQyMmYzOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJaGVscAogCSAgQ2hvaWNlIGZvciBVQVJUIGZvciBrZXJuZWwgbG93LWxldmVsIHVzaW5nIFMzQzI0MTAgVUFSVFMsCiAJICBzaG91bGQgYmUgYmV0d2VlbiB6ZXJvIGFuZCB0d28uIFRoZSBwb3J0IG11c3QgaGF2ZSBiZWVuCi0JICBpbml0YWxpc2VkIGJ5IHRoZSBib290LWxvYWRlciBiZWZvcmUgdXNlLgorCSAgaW5pdGlhbGlzZWQgYnkgdGhlIGJvb3QtbG9hZGVyIGJlZm9yZSB1c2UuCiAKIAkgIFRoZSB1bmNvbXByZXNzb3IgY29kZSBwb3J0IGNvbmZpZ3VyYXRpb24gaXMgbm93IGhhbmRsZWQKIAkgIGJ5IENPTkZJR19TM0MyNDEwX0xPV0xFVkVMX1VBUlRfUE9SVC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggY2UzZTgwNC4uNmY4ZTg0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTIwLDYgKzIwLDExIEBACiAjIFNlbGVjdCBhIHBsYXRmb3JtIHRodCBpcyBrZXB0IHVwLXRvLWRhdGUKIEtCVUlMRF9ERUZDT05GSUcgOj0gdmVyc2F0aWxlX2RlZmNvbmZpZwogCisjIGRlZmluZXMgZmlsZW5hbWUgZXh0ZW5zaW9uIGRlcGVuZGluZyBtZW1vcnkgbWFuZW1lbnQgdHlwZS4KK2lmZXEgKCQoQ09ORklHX01NVSksKQorTU1VRVhUCQk6PSAtbm9tbXUKK2VuZGlmCisKIGlmZXEgKCQoQ09ORklHX0ZSQU1FX1BPSU5URVIpLHkpCiBDRkxBR1MJCSs9LWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLW1hcGNzIC1tbm8tc2NoZWQtcHJvbG9nCiBlbmRpZgpAQCAtNjEsNyArNjYsNyBAQAogdHVuZS0kKENPTkZJR19DUFVfVjYpCQk6PSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPWFybTExMzZqLXMsLW10dW5lPXN0cm9uZ2FybSkKIAogaWZlcSAoJChDT05GSUdfQUVBQkkpLHkpCi1DRkxBR1NfQUJJCTo9LW1hYmk9YWFwY3MgLW1uby10aHVtYi1pbnRlcndvcmsKK0NGTEFHU19BQkkJOj0tbWFiaT1hYXBjcy1saW51eCAtbW5vLXRodW1iLWludGVyd29yawogZWxzZQogQ0ZMQUdTX0FCSQk6PSQoY2FsbCBjYy1vcHRpb24sLW1hcGNzLTMyLC1tYWJpPWFwY3MtZ251KSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tdGh1bWItaW50ZXJ3b3JrLCkKIGVuZGlmCkBAIC03Myw3ICs3OCw3IEBACiBDSEVDS0ZMQUdTCSs9IC1EX19hcm1fXwogCiAjRGVmYXVsdCB2YWx1ZQotaGVhZC15CQk6PSBhcmNoL2FybS9rZXJuZWwvaGVhZC5vIGFyY2gvYXJtL2tlcm5lbC9pbml0X3Rhc2subworaGVhZC15CQk6PSBhcmNoL2FybS9rZXJuZWwvaGVhZCQoTU1VRVhUKS5vIGFyY2gvYXJtL2tlcm5lbC9pbml0X3Rhc2subwogdGV4dG9mcy15CTo9IDB4MDAwMDgwMDAKIAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9SUEMpCSAgIDo9IHJwYwpAQCAtMTMzLDcgKzEzOCw3IEBACiBNQUNISU5FICA6PQogZW5kaWYKICAgCi1leHBvcnQJVEVYVF9PRkZTRVQgR1pGTEFHUworZXhwb3J0CVRFWFRfT0ZGU0VUIEdaRkxBR1MgTU1VRVhUCiAKICMgRG8gd2UgaGF2ZSBGQVNURlBFPwogRkFTVEZQRQkJOj1hcmNoL2FybS9mYXN0ZnBlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCA0OTFjN2U0Li5iNTZmNWU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTIsNiArMiw3IEBACiAgKiAgbGludXgvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgSHlvayBTLiBDaG9pIChNUFUgc3VwcG9ydCkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTMyMCw2ICszMjEsNjIgQEAKIGNhY2hlX29uOgltb3YJcjMsICM4CQkJQCBjYWNoZV9vbiBmdW5jdGlvbgogCQliCWNhbGxfY2FjaGVfZm4KIAorLyoKKyAqIEluaXRpYWxpemUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcHJvdGVjdGlvbiByZWdpb24sIFBSNworICogdG8gY292ZXIgYWxsIDMyYml0IGFkZHJlc3MgYW5kIGNhY2hlYWJsZSBhbmQgYnVmZmVyYWJsZS4KKyAqLworX19hcm12NF9tcHVfY2FjaGVfb246CisJCW1vdglyMCwgIzB4M2YJCUAgNEcsIHRoZSB3aG9sZQorCQltY3IJcDE1LCAwLCByMCwgYzYsIGM3LCAwCUAgUFI3IEFyZWEgU2V0dGluZworCQltY3IgCXAxNSwgMCwgcjAsIGM2LCBjNywgMQorCisJCW1vdglyMCwgIzB4ODAJCUAgUFI3CisJCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJQCBELWNhY2hlIG9uCisJCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDEJQCBJLWNhY2hlIG9uCisJCW1jcglwMTUsIDAsIHIwLCBjMywgYzAsIDAJQCB3cml0ZS1idWZmZXIgb24KKworCQltb3YJcjAsICMweGMwMDAKKwkJbWNyCXAxNSwgMCwgcjAsIGM1LCBjMCwgMQlAIEktYWNjZXNzIHBlcm1pc3Npb24KKwkJbWNyCXAxNSwgMCwgcjAsIGM1LCBjMCwgMAlAIEQtYWNjZXNzIHBlcm1pc3Npb24KKworCQltb3YJcjAsICMwCisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJQCBmbHVzaChpbnZhbCkgSS1DYWNoZQorCQltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAwCUAgZmx1c2goaW52YWwpIEQtQ2FjaGUKKwkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKKwkJCQkJCUAgLi4uSSAuLi4uIC4uRC4gV0MuTQorCQlvcnIJcjAsIHIwLCAjMHgwMDJkCQlAIC4uLi4gLi4uLiAuLjEuIDExLjEKKwkJb3JyCXIwLCByMCwgIzB4MTAwMAkJQCAuLi4xIC4uLi4gLi4uLiAuLi4uCisKKwkJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHdyaXRlIGNvbnRyb2wgcmVnCisKKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCUAgZmx1c2goaW52YWwpIEktQ2FjaGUKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMAlAIGZsdXNoKGludmFsKSBELUNhY2hlCisJCW1vdglwYywgbHIKKworX19hcm12M19tcHVfY2FjaGVfb246CisJCW1vdglyMCwgIzB4M2YJCUAgNEcsIHRoZSB3aG9sZQorCQltY3IJcDE1LCAwLCByMCwgYzYsIGM3LCAwCUAgUFI3IEFyZWEgU2V0dGluZworCisJCW1vdglyMCwgIzB4ODAJCUAgUFI3CisJCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJQCBjYWNoZSBvbgorCQltY3IJcDE1LCAwLCByMCwgYzMsIGMwLCAwCUAgd3JpdGUtYnVmZmVyIG9uCisKKwkJbW92CXIwLCAjMHhjMDAwCisJCW1jcglwMTUsIDAsIHIwLCBjNSwgYzAsIDAJQCBhY2Nlc3MgcGVybWlzc2lvbgorCisJCW1vdglyMCwgIzAKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgMAlAIGludmFsaWRhdGUgd2hvbGUgY2FjaGUgdjMKKwkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKKwkJCQkJCUAgLi4uLiAuLi4uIC4uLi4gV0MuTQorCQlvcnIJcjAsIHIwLCAjMHgwMDBkCQlAIC4uLi4gLi4uLiAuLi4uIDExLjEKKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgd3JpdGUgY29udHJvbCByZWcKKworCQltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCAwCUAgaW52YWxpZGF0ZSB3aG9sZSBjYWNoZSB2MworCQltb3YJcGMsIGxyCisKIF9fc2V0dXBfbW11OglzdWIJcjMsIHI0LCAjMTYzODQJCUAgUGFnZSBkaXJlY3Rvcnkgc2l6ZQogCQliaWMJcjMsIHIzLCAjMHhmZgkJQCBBbGlnbiB0aGUgcG9pbnRlcgogCQliaWMJcjMsIHIzLCAjMHgzZjAwCkBAIC00OTYsNiArNTUzLDE4IEBACiAJCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCiAJCW1vdglwYywgbHIKIAorCQkud29yZAkweDQxMDA3NDAwCQlAIEFSTTc0eAorCQkud29yZAkweGZmMDBmZjAwCisJCWIJX19hcm12M19tcHVfY2FjaGVfb24KKwkJYglfX2FybXYzX21wdV9jYWNoZV9vZmYKKwkJYglfX2FybXYzX21wdV9jYWNoZV9mbHVzaAorCQkKKwkJLndvcmQJMHg0MTAwOTQwMAkJQCBBUk05NHgKKwkJLndvcmQJMHhmZjAwZmYwMAorCQliCV9fYXJtdjRfbXB1X2NhY2hlX29uCisJCWIJX19hcm12NF9tcHVfY2FjaGVfb2ZmCisJCWIJX19hcm12NF9tcHVfY2FjaGVfZmx1c2gKKwogCQkud29yZAkweDAwMDA3MDAwCQlAIEFSTTcgSURzCiAJCS53b3JkCTB4MDAwMGYwMDAKIAkJbW92CXBjLCBscgpAQCAtNTYyLDYgKzYzMSwyNCBAQAogY2FjaGVfb2ZmOgltb3YJcjMsICMxMgkJCUAgY2FjaGVfb2ZmIGZ1bmN0aW9uCiAJCWIJY2FsbF9jYWNoZV9mbgogCitfX2FybXY0X21wdV9jYWNoZV9vZmY6CisJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAKKwkJYmljCXIwLCByMCwgIzB4MDAwZAorCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwCUAgdHVybiBNUFUgYW5kIGNhY2hlIG9mZgorCQltb3YJcjAsICMwCisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDAJQCBmbHVzaCBELUNhY2hlCisJCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJQCBmbHVzaCBJLUNhY2hlCisJCW1vdglwYywgbHIKKworX19hcm12M19tcHVfY2FjaGVfb2ZmOgorCQltcmMJcDE1LCAwLCByMCwgYzEsIGMwCisJCWJpYwlyMCwgcjAsICMweDAwMGQKKwkJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHR1cm4gTVBVIGFuZCBjYWNoZSBvZmYKKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCAwCUAgaW52YWxpZGF0ZSB3aG9sZSBjYWNoZSB2MworCQltb3YJcGMsIGxyCisKIF9fYXJtdjRfbW11X2NhY2hlX29mZjoKIAkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAogCQliaWMJcjAsIHIwLCAjMHgwMDBkCkBAIC02MDEsNiArNjg4LDI0IEBACiAJCW1vdglyMywgIzE2CiAJCWIJY2FsbF9jYWNoZV9mbgogCitfX2FybXY0X21wdV9jYWNoZV9mbHVzaDoKKwkJbW92CXIyLCAjMQorCQltb3YJcjMsICMwCisJCW1jcglwMTUsIDAsIGlwLCBjNywgYzYsIDAJQCBpbnZhbGlkYXRlIEQgY2FjaGUKKwkJbW92CXIxLCAjNyA8PCA1CQlAIDggc2VnbWVudHMKKzE6CQlvcnIJcjMsIHIxLCAjNjMgPDwgMjYJQCA2NCBlbnRyaWVzCisyOgkJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTQsIDIJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBpbmRleAorCQlzdWJzCXIzLCByMywgIzEgPDwgMjYKKwkJYmNzCTJiCQkJQCBlbnRyaWVzIDYzIHRvIDAKKwkJc3VicyAJcjEsIHIxLCAjMSA8PCA1CisJCWJjcwkxYgkJCUAgc2VnbWVudHMgNyB0byAwCisKKwkJdGVxCXIyLCAjMAorCQltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwkJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJQCBkcmFpbiBXQgorCQltb3YJcGMsIGxyCisJCQorCiBfX2FybXY2X21tdV9jYWNoZV9mbHVzaDoKIAkJbW92CXIxLCAjMAogCQltY3IJcDE1LCAwLCByMSwgYzcsIGMxNCwgMAlAIGNsZWFuK2ludmFsaWRhdGUgRApAQCAtNjM4LDYgKzc0Myw3IEBACiAJCW1vdglwYywgbHIKIAogX19hcm12M19tbXVfY2FjaGVfZmx1c2g6CitfX2FybXYzX21wdV9jYWNoZV9mbHVzaDoKIAkJbW92CXIxLCAjMAogCQltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCAwCUAgaW52YWxpZGF0ZSB3aG9sZSBjYWNoZSB2MwogCQltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAwYWYzNzcyLi5hY2UzZmI1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0zOCwxMCArMzgsMTAgQEAKIAkJaWYgKC0taSA8IDApCiAJCQlyZXR1cm47CiAKLQkJYXNtKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMwLCAwIiA6ICI9ciIgKHN0YXR1cykpOworCQlhc20gdm9sYXRpbGUgKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMwLCAwIiA6ICI9ciIgKHN0YXR1cykpOwogCX0gd2hpbGUgKHN0YXR1cyAmIDIpOwogCi0JYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIiA6IDogInIiIChjaCkpOworCWFzbSgibWNyIHAxNCwgMCwgJTAsIGMxLCBjMCwgMCIgOiA6ICJyIiAoY2gpKTsKIH0KIAogI2RlZmluZSBwdXRjKGNoKQlpY2VkY2NfcHV0YyhjaCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbiBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgppbmRleCBlZWQ2MTYxLi4xNTNhMDdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgX3N0YXJ0ID0gLjsKICAgICAqKC5zdGFydCkKICAgICAqKC50ZXh0KQorICAgICooLnRleHQuKikKICAgICAqKC5maXh1cCkKICAgICAqKC5nbnUud2FybmluZykKICAgICAqKC5yb2RhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCmluZGV4IDVlODMwZjQuLjMxNGViZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCkBAIC0xOCw2ICsxOCwxOCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgogCisvKiBQQ01DSUEgdG8gU2Nvb3AgbGlua2FnZQorCisgICBUaGVyZSBpcyBubyBlYXN5IHdheSB0byBsaW5rIG11bHRpcGxlIHNjb29wIGRldmljZXMgaW50byBvbmUKKyAgIHNpbmdsZSBlbnRpdHkgZm9yIHRoZSBweGEyeHhfcGNtY2lhIGRldmljZSBzbyB0aGlzIHN0cnVjdHVyZQorICAgaXMgdXNlZCB3aGljaCBpcyBzZXR1cCBieSB0aGUgcGxhdGZvcm0gY29kZS4KKworICAgVGhpcyBmaWxlIGlzIG5ldmVyIG1vZHVsYXIgc28gdGhpcyBzeW1ib2wgaXMgYWx3YXlzCisgICBhY2Nlc3NpbGUgdG8gdGhlIGJvYXJkIHN1cHBvcnQgZmlsZXMuCisqLworc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fc2Nvb3BfY29uZmlnKTsKKwogI2RlZmluZSBTQ09PUF9SRUcoZCxhZHIpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KikoZCArKGFkcikpKQogCiBzdHJ1Y3QgIHNjb29wX2RldiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYwppbmRleCA5NzhkMzJlLi4zY2Q4YzllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC03NSw2ICs3Niw3IEBACiBzdHJ1Y3Qgc2hhcnBzbF9wbV9zdGF0dXMgc2hhcnBzbF9wbTsKIERFQ0xBUkVfV09SSyh0b2dnbGVfY2hhcmdlciwgc2hhcnBzbF9jaGFyZ2VfdG9nZ2xlLCBOVUxMKTsKIERFQ0xBUkVfV09SSyhzaGFycHNsX2JhdCwgc2hhcnBzbF9iYXR0ZXJ5X3RocmVhZCwgTlVMTCk7CitERUZJTkVfTEVEX1RSSUdHRVIoc2hhcnBzbF9jaGFyZ2VfbGVkX3RyaWdnZXIpOwogCiAKIHN0YXRpYyBpbnQgZ2V0X3BlcmNlbnRhZ2UoaW50IHZvbHRhZ2UpCkBAIC0xOTAsMTAgKzE5MiwxMCBAQAogCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdpbmcgRXJyb3IhXG4iKTsKIAl9IGVsc2UgaWYgKHZhbCA9PSBTSEFSUFNMX0xFRF9PTikgewogCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIExFRCBPblxuIik7Ci0KKwkJbGVkX3RyaWdnZXJfZXZlbnQoc2hhcnBzbF9jaGFyZ2VfbGVkX3RyaWdnZXIsIExFRF9GVUxMKTsKIAl9IGVsc2UgewogCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIExFRCBPZmZcbiIpOwotCisJCWxlZF90cmlnZ2VyX2V2ZW50KHNoYXJwc2xfY2hhcmdlX2xlZF90cmlnZ2VyLCBMRURfT0ZGKTsKIAl9CiB9CiAKQEAgLTc4Niw2ICs3ODgsOCBAQAogCWluaXRfdGltZXIoJnNoYXJwc2xfcG0uY2hyZ19mdWxsX3RpbWVyKTsKIAlzaGFycHNsX3BtLmNocmdfZnVsbF90aW1lci5mdW5jdGlvbiA9IHNoYXJwc2xfY2hyZ19mdWxsX3RpbWVyOwogCisJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJzaGFycHNsLWNoYXJnZSIsICZzaGFycHNsX2NoYXJnZV9sZWRfdHJpZ2dlcik7CisKIAlzaGFycHNsX3BtLm1hY2hpbmZvLT5pbml0KCk7CiAKIAlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2JhdHRlcnlfcGVyY2VudGFnZSk7CkBAIC04MDcsNiArODExLDggQEAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2JhdHRlcnlfcGVyY2VudGFnZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9iYXR0ZXJ5X3ZvbHRhZ2UpOwogCisJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoc2hhcnBzbF9jaGFyZ2VfbGVkX3RyaWdnZXIpOworCiAJc2hhcnBzbF9wbS5tYWNoaW5mby0+ZXhpdCgpOwogCiAJZGVsX3RpbWVyX3N5bmMoJnNoYXJwc2xfcG0uY2hyZ19mdWxsX3RpbWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZwppbmRleCAxZmU3M2QxLi45ZTFjMWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCkBAIC0zNzksNyArMzc5LDcgQEAKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIPXkKLUNPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRD15CisjIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCmluZGV4IGI3ZDkzNGMuLjZlMDgwNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKQEAgLTM3MCw3ICszNzAsNyBAQAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0g9eQotQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEPXkKKyMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKIAogIwogIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKaW5kZXggYzlhYTg3OC4uMDc0YzQ3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwpAQCAtMSwyMSArMSwyMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXJjMwotIyBTdW4gT2N0ICA5IDE2OjU1OjE0IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzEKKyMgRnJpIEFwciAxNCAxOTowOTo1MiAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKQEAgLTIzLDQ1ICsyMyw1OCBAQAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ET1VCTEVGQVVMVD15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19CQVNFX1NNQUxMPTEKK0NPTkZJR19TTE9CPXkKK0NPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT15CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKICMKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCiAKICMKICMgU3lzdGVtIFR5cGUKQEAgLTcwLDExICs4MywxMyBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CkBAIC04NCw5ICs5OSwxMSBAQAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogCiAjCiAjIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKQEAgLTEyOCwyMCArMTQ1LDMyIEBACiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfSVNBPXkKLUNPTkZJR19JU0FfRE1BX0FQST15CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAogIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQV9ERUJVRz15CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorQ09ORklHX1BDTUNJQV9JT0NUTD15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCisjIENPTkZJR19JODIzNjUgaXMgbm90IHNldAorIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1NBMTEwMD15CiAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQorQ09ORklHX05PREVTX1NISUZUPTIKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMPXkKQEAgLTE1MCw2ICsxNzksNyBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKICMgQ09ORklHX0xFRFMgaXMgbm90IHNldAogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKIApAQCAtMTU4LDcgKzE4OCw3IEBACiAjCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMG44IGNvbnNvbGU9dHR5MSBub2luaXRyZCByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9amZmczIgICBkZWJ1ZyIKK0NPTkZJR19DTURMSU5FPSJub2luaXRyZCByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9amZmczIgZmJjb249cm90YXRlOjEiCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTgxLDE0ICsyMTEsMTYgQEAKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQklORk1UX0FPVVQ9bQotQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQorQ09ORklHX1BNX0xFR0FDWT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQVBNPXkKIAogIwpAQCAtMTk5LDYgKzIzMSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjExLDE2ICsyNDQsMTkgQEAKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIzMiw2ICsyNjgsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI0NCw4ICsyODUsMTEgQEAKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwpAQCAtMjY1LDEwICszMDksMTUgQEAKICMKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogQ09ORklHX01URD15CkBAIC0yODcsMzIgKzMzNiw0OSBAQAogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKICMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CiAjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0k0PXkKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09CU09MRVRFX0NISVBTPXkKIENPTkZJR19NVERfU0hBUlA9eQorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfU0ExMTAwPXkKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTMyMSw3ICszODcsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTMzNyw2ICs0MDIsMTEgQEAKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKIAogIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKICMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CiAjCiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKQEAgLTM0OSw3ICs0MTksNiBAQAogIwogIyBCbG9jayBkZXZpY2VzCiAjCi0jIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CkBAIC0zNTksMjAgKzQyOCwzNSBAQAogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCi0jIENPTkZJR19JREUgaXMgbm90IHNldAorQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKK0NPTkZJR19JREVESVNLX01VTFRJX01PREU9eQorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC00MDIsNiArNDg2LDM5IEBACiAjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKK0NPTkZJR19QUFA9eQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9eQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIApAQCAtNDI0LDcgKzU0MSw3IEBACiBDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCiBDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCiBDT05GSUdfSU5QVVRfRVZERVY9eQotQ09ORklHX0lOUFVUX0VWQlVHPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwpAQCAtNDM4LDcgKzU1NSwxMSBAQAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCkBAIC00NjEsNyArNTgyLDE2IEBACiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfQ1M9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CiAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydApAQCAtNDgzLDk0ICs2MTMsNDggQEAKICMKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKICMgVFBNIGRldmljZXMKICMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CiAjCi1DT05GSUdfSTJDPW0KLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIEFsZ29yaXRobXMKKyMgU1BJIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfQUxHT0JJVD1tCi0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjIERhbGxhcydzIDEtd2lyZSBidXMKICMKLSMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCi1DT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCkBAIC01NzksNDIgKzY2MywzMyBAQAogIwogIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKICMKLSMgQ09ORklHX01DUF9TQTExWDAgaXMgbm90IHNldAorQ09ORklHX01DUD15CitDT05GSUdfTUNQX1NBMTFYMD15CitDT05GSUdfTUNQX1VDQjEyMDA9eQorQ09ORklHX01DUF9VQ0IxMjAwX1RTPXkKKworIworIyBMRUQgZGV2aWNlcworIworQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworQ09ORklHX0xFRFNfTE9DT01PPXkKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSz15CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCi1DT05GSUdfVklERU9fREVWPW0KLQotIwotIyBWaWRlbyBGb3IgTGludXgKLSMKLQotIwotIyBWaWRlbyBBZGFwdGVycwotIwotIyBDT05GSUdfVklERU9fUE1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU5FUl8zMDM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFkaW8gQWRhcHRlcnMKLSMKLSMgQ09ORklHX1JBRElPX0NBREVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1JUUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19SVFJBQ0syIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX0FaVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19HRU1URUsgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fTUFFU1RSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19TRjE2Rk1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1NGMTZGTVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RFUlJBVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RSVVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RZUEhPT04gaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fWk9MVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTYyOCw4ICs3MDMsOCBAQAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLUNPTkZJR19GQl9TT0ZUX0NVUlNPUj15CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TQTExMDA9eQpAQCAtNjQzLDE0ICs3MTgsMTUgQEAKICMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKIENPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF9NSU5JXzR4Nj15CiAjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKQEAgLTY1OSw3ICs3MzUsMTEgQEAKICMgTG9nbyBjb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfREVWSUNFPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19MQ0RfREVWSUNFPXkKIAogIwogIyBTb3VuZApAQCAtNjcxLDIwICs3NTEsMTcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwotQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKICMgTU1DL1NEIENhcmQgc3VwcG9ydApAQCAtNjkyLDIzICs3NjksMjQgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9eQotQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CkBAIC03MjUsNyArODAzLDcgQEAKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0ZBVF9GUz15Ci1DT05GSUdfTVNET1NfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgpAQCAtNzM5LDcgKzgxNyw3IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03NTUsMTEgKzgzMywxMiBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc4OSw3ICs4NjgsNyBAQAogIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldApAQCAtODEzLDcgKzg5Miw3IEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotQ09ORklHX05MU19JU084ODU5XzE9bQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtODI2LDcgKzkwNSw3IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydApAQCAtODM3LDIwICs5MTYsMjMgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0VSUk9SUz15CkBAIC04NzQsNyArOTU2LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKaW5kZXggOGRjYzhlOC4uYjY5ZTg4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZwpAQCAtMSwxMiArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2Ci0jIE1vbiBNYXIgMjAgMTQ6NTQ6NTEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBXZWQgQXByIDE5IDIxOjIxOjAxIDIwMDYKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTI4LDYgKzMwLDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX1VJRDE2PXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC00MywxMCArNDYsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC01OSw3ICs1OCw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtNjcsNiArNjUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtOTQsNiArOTMsNyBAQAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKQEAgLTExMiw3ICsxMTIsNiBAQAogIwogIyBDaXJydXMgRVA5M3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKICMKLUNPTkZJR19DUlVOQ0g9eQogCiAjCiAjIEVQOTN4eCBQbGF0Zm9ybXMKQEAgLTIzMiwxMiArMjMxLDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM0Niw3ICszNDgsNiBAQAogIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKIENPTkZJR19NVERfQ0ZJX1NUQUE9eQogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTM3MSw3ICszNzIsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTQxMiw3ICs0MTIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIApAQCAtNTc2LDEzICs1NzYsMTMgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0VQOTNYWF9XQVRDSERPRz15CiAKICMKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIApAQCAtNjI2LDkgKzYyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CkBAIC02OTAsNyArNjg4LDE2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKICMKIAogIwpAQCAtNzAyLDYgKzcwOSw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03MTgsNiArNzI2LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15CiAKQEAgLTc3NiwxNSArNzg1LDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTgxMyw2ICs4MTMsNyBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CkBAIC04MjUsNiArODI2LDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz15CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKQEAgLTg2NSw2ICs4NjcsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NNDhUODY9eQorQ09ORklHX1JUQ19EUlZfRVA5M1hYPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05MTIsNyArOTQwLDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMDQ0LDYgKzEwNzEsNyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NMQUI9eQorIyBDT05GSUdfREVCVUdfU0xBQl9MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CkBAIC0xMDUzLDYgKzEwODEsNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCmluZGV4IDdiMDJjYTAuLmU2ZjNlNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZwpAQCAtMSwxOCArMSwxOSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMgotIyBXZWQgRmViICA4IDA0OjQ5OjExIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgV2VkIEFwciAxOSAyMToxMjo0OSAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX1VJRDE2PXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC00NCwxMCArNDYsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC02MCw3ICs1OCw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CkBAIC02OCw2ICs2NSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC04OSwxMSArODcsMTMgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JWFAyMDAwPXkKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKQEAgLTEyMyw2ICsxMjMsNyBAQAogQ09ORklHX0FSQ0hfSVhEUDJYMDA9eQogQ09ORklHX0FSQ0hfSVhEUDI0MDE9eQogQ09ORklHX0FSQ0hfSVhEUDI4MDE9eQorQ09ORklHX01BQ0hfSVhEUDI4WDU9eQogQ09ORklHX0FSQ0hfSVhEUDJYMDE9eQogIyBDT05GSUdfSVhQMjAwMF9TVVBQT1JUX0JST0tFTl9QQ0lfSU8gaXMgbm90IHNldAogCkBAIC0xNDcsNyArMTQ4LDYgQEAKICMgQnVzIHN1cHBvcnQKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xNjAsNiArMTYwLDcgQEAKICMKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCiAjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjEzLDYgKzIxNCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjMyLDEyICsyMzQsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzQ3LDcgKzM1Miw2IEBACiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTM2Niw3ICszNzAsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTYxNCw4ICs2MTcsOSBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTMKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIzLDYgKzYyNyw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjUwLDcgKzY1NSw2IEBACiAjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC02OTYsNyArNzAwLDYgQEAKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldApAQCAtNzE1LDkgKzcxOCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC03MzAsNiArNzMxLDExIEBACiAjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiBDT05GSUdfSFdNT049eQpAQCAtNzQyLDYgKzc0OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldApAQCAtNzc2LDcgKzc4MywxNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCiAjCiAKICMKQEAgLTgwNCw2ICs4MjAsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC04MjEsNiArODM4LDEyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg3MCw3ICs4OTMsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk3Miw2ICs5OTQsNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCmluZGV4IDFhMjc1MWUuLjljZTg5OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZwpAQCAtMSwxMiArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2Ci0jIFR1ZSBNYXIgMjEgMDM6Mjc6MjAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBXZWQgQXByIDE5IDIxOjEzOjUwIDIwMDYKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTI4LDYgKzMwLDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtNDMsMTAgKzQ2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNTksNyArNTgsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtNjcsNiArNjUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTQzLDcgKzE0Miw2IEBACiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMwLDEyICsyMjgsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzY1LDcgKzM2Niw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNTI3LDcgKzUyNyw2IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CkBAIC03MzUsNiArNzM0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC03NzYsNyArNzc2LDYgQEAKICMKICMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldApAQCAtODIxLDcgKzgyMCw2IEBACiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTg0MCw5ICs4MzgsNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtOTA3LDcgKzkwMywxNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCiAjCiAKICMKQEAgLTkxOSw2ICs5MjQsNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtOTM1LDYgKzk0MSw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTAwMCw5ICsxMDA3LDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTAxNywxNSArMTAyMiw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMDc2LDYgKzEwNzIsMTIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTEyNyw3ICsxMTI5LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMjY4LDYgKzEyNjksNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwppbmRleCAyNjg3YTIyLi45NmI3YTc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCkBAIC0xLDUwICsxLDU1IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBNb24gTWFyIDI4IDAwOjIwOjUwIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzMKKyMgTW9uIE1heSAgOCAyMDoxNTo1NyAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19VSUQxNj15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT15CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTUyLDIzICs1Nyw0MiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQogCiAjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKICMgU3lzdGVtIFR5cGUKICMKICMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CkBAIC03OCwxNCArMTAyLDE3IEBACiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1ZFUlNBVElMRT15CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogCiAjCiAjIFZlcnNhdGlsZSBwbGF0Zm9ybSB0eXBlCiAjCiBDT05GSUdfQVJDSF9WRVJTQVRJTEVfUEI9eQotIyBDT05GSUdfTUFDSF9WRVJTQVRJTEVfQUIgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCPXkKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTA2LDEyICsxMzMsMTQgQEAKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorQ09ORklHX0FSTV9WSUM9eQogQ09ORklHX0lDU1QzMDc9eQogCiAjCiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfQVJNX0FNQkE9eQorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0xMjIsNiArMTUxLDE4IEBACiAjIEtlcm5lbCBGZWF0dXJlcwogIwogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiBDT05GSUdfTEVEUz15CiBDT05GSUdfTEVEU19USU1FUj15CiBDT05GSUdfTEVEU19DUFU9eQpAQCAtMTQ1LDcgKzE4Niw3IEBACiBDT05GSUdfRlBFX05XRlBFPXkKICMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CiAjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CiAKICMKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCkBAIC0xNTksOSArMjAwLDkyIEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogQ09ORklHX1BNPXkKK0NPTkZJR19QTV9MRUdBQ1k9eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKIAogIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCiAjIERldmljZSBEcml2ZXJzCiAjCiAKQEAgLTE3NCw2ICsyOTgsMTEgQEAKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCiBDT05GSUdfTVREPXkKQEAgLTE5Miw2ICszMjEsNyBAQAogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTIxNCw2ICszNDQsNyBAQAogQ09ORklHX01URF9DRklfSTI9eQogIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKQEAgLTIyMSw3ICszNTIsNyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTIyOSw3ICszNjAsNyBAQAogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9BUk1fSU5URUdSQVRPUj15Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCkBAIC0yMzcsNyArMzY4LDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC0yNTMsNiArMzgzLDExIEBACiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCiAjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAogIwogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CkBAIC0yNjQsNyArMzk5LDYgQEAKICMKICMgQmxvY2sgZGV2aWNlcwogIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKQEAgLTI3MiwyMSArNDA2LDEzIEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAogCiAjCkBAIC0yOTcsNiArNDIzLDcgQEAKICMKICMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC0zMDcsNzEgKzQzNCw4IEBACiAjCiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKQEAgLTM3OSwxMSArNDQzLDE3IEBACiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogCiAjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKICMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiBDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTQxMCw2ICs0ODAsOCBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC00NTksNyArNTMxLDYgQEAKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTQ3NCwxNyArNTQ1LDE2IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9bQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX01VTFRJUE9SVD15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTE9eQogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DT1JFPXkKQEAgLTUwMywyMCArNTczLDE5IEBACiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKICMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCiAjCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC01MzQsNjAgKzYwMyw2MCBAQAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLSMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotQ09ORklHX0kyQ19TRU5TT1I9bQotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0VFUFJPTT1tCiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKworIwogIyBNaXNjIGRldmljZXMKICMKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjA0LDI3ICs2NzMsMzEgQEAKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci1DT05GSUdfRkJfU09GVF9DVVJTT1I9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKIENPTkZJR19GQl9BUk1DTENEPXkKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQogIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAogQ09ORklHX0ZPTlRfQUNPUk5fOHg4PXkKICMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CiAKICMKICMgTG9nbyBjb25maWd1cmF0aW9uCkBAIC02NDcsMTIgKzcyMCwxOCBAQAogQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBHZW5lcmljIGRldmljZXMKICMKK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCitDT05GSUdfU05EX0FDOTdfQlVTPW0KICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldApAQCAtNjYxLDYgKzc0MCw3IEBACiAjCiAjIEFMU0EgQVJNIGRldmljZXMKICMKK0NPTkZJR19TTkRfQVJNQUFDST1tCiAKICMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KQEAgLTY3Miw5ICs3NTIsMTQgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC02ODgsMjUgKzc3MywzMSBAQAogQ09ORklHX01NQ19BUk1NTUNJPW0KIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPXkKIENPTkZJR19ST01GU19GUz15CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTcyOSwxMSArODIwLDEwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTc0OCw4ICs4MzgsOCBAQAogIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9SVElNRT15CkBAIC03NjYsMTYgKzg1NiwxOSBAQAogIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKQEAgLTc4NCw2ICs4NzcsNyBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTgwMyw2ICs4OTcsNyBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCkBAIC04NTgsMTggKzk1MywyNCBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0VSUk9SUz15CkBAIC04OTUsNiArOTk2LDcgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMmNlMGUzYS4uYTYwMWI4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogICBvYmoteQkJKz0gaW8ubwogZW5kaWYKIAotaGVhZC15CQkJOj0gaGVhZC5vCitoZWFkLXkJCQk6PSBoZWFkJChNTVVFWFQpLm8KIG9iai0kKENPTkZJR19ERUJVR19MTCkJKz0gZGVidWcubwogCiBleHRyYS15IDo9ICQoaGVhZC15KSBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwppbmRleCAxNTc0OTQxLi5jNDliNWQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwpAQCAtMTAwLDIzICsxMDAsMTEgQEAKICNlbmRpZgogCiAJLyogc3RyaW5nIC8gbWVtIGZ1bmN0aW9ucyAqLwotRVhQT1JUX1NZTUJPTChzdHJjcHkpOwotRVhQT1JUX1NZTUJPTChzdHJuY3B5KTsKLUVYUE9SVF9TWU1CT0woc3RyY2F0KTsKLUVYUE9SVF9TWU1CT0woc3RybmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNtcCk7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jbXApOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJsZW4pOwotRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKLUVYUE9SVF9TWU1CT0wobWVtY21wKTsKLUVYUE9SVF9TWU1CT0wobWVtc2Nhbik7CiBFWFBPUlRfU1lNQk9MKG1lbWNocik7CiBFWFBPUlRfU1lNQk9MKF9fbWVtemVybyk7CiAKQEAgLTE5MCw4ICsxNzgsNiBAQAogCiAJLyogc3lzY2FsbHMgKi8KIEVYUE9SVF9TWU1CT0woc3lzX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0woc3lzX3JlYWQpOwogRVhQT1JUX1NZTUJPTChzeXNfbHNlZWspOwotRVhQT1JUX1NZTUJPTChzeXNfb3Blbik7CiBFWFBPUlRfU1lNQk9MKHN5c19leGl0KTsKIEVYUE9SVF9TWU1CT0woc3lzX3dhaXQ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggYjMyNGRjYS4uMzk2ZWZiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTk1LDUgKzk1LDEzIEBACiAgIERFRklORShTWVNfRVJST1IwLAkJMHg5ZjAwMDApOwogICBCTEFOSygpOwogICBERUZJTkUoU0laRU9GX01BQ0hJTkVfREVTQywJc2l6ZW9mKHN0cnVjdCBtYWNoaW5lX2Rlc2MpKTsKKyAgREVGSU5FKE1BQ0hJTkZPX1RZUEUsCQlvZmZzZXRvZihzdHJ1Y3QgbWFjaGluZV9kZXNjLCBucikpOworICBERUZJTkUoTUFDSElORk9fTkFNRSwJCW9mZnNldG9mKHN0cnVjdCBtYWNoaW5lX2Rlc2MsIG5hbWUpKTsKKyAgREVGSU5FKE1BQ0hJTkZPX1BIWVNJTywJb2Zmc2V0b2Yoc3RydWN0IG1hY2hpbmVfZGVzYywgcGh5c19pbykpOworICBERUZJTkUoTUFDSElORk9fUEdPRkZJTywJb2Zmc2V0b2Yoc3RydWN0IG1hY2hpbmVfZGVzYywgaW9fcGdfb2Zmc3QpKTsKKyAgQkxBTksoKTsKKyAgREVGSU5FKFBST0NfSU5GT19TWiwJCXNpemVvZihzdHJ1Y3QgcHJvY19pbmZvX2xpc3QpKTsKKyAgREVGSU5FKFBST0NJTkZPX0lOSVRGVU5DLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY19pbmZvX2xpc3QsIF9fY3B1X2ZsdXNoKSk7CisgIERFRklORShQUk9DSU5GT19NTVVGTEFHUywJb2Zmc2V0b2Yoc3RydWN0IHByb2NfaW5mb19saXN0LCBfX2NwdV9tbXVfZmxhZ3MpKTsKICAgcmV0dXJuIDA7IAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKaW5kZXggMDM1MzI3Ni4uMGEzZTlhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jCkBAIC0xNDMsMTIgKzE0MywyMyBAQAogCS5yZXNpZHVlCT0gaXNhX2dldF9kbWFfcmVzaWR1ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG1hX3Jlc291cmNlc1tdID0gewotCXsgImRtYTEiLAkJMHgwMDAwLCAweDAwMGYgfSwKLQl7ICJkbWEgbG93IHBhZ2UiLCAJMHgwMDgwLCAweDAwOGYgfSwKLQl7ICJkbWEyIiwJCTB4MDBjMCwgMHgwMGRmIH0sCi0JeyAiZG1hIGhpZ2ggcGFnZSIsCTB4MDQ4MCwgMHgwNDhmIH0KLX07CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtYV9yZXNvdXJjZXNbXSA9IHsgeworCS5uYW1lCT0gImRtYTEiLAorCS5zdGFydAk9IDB4MDAwMCwKKwkuZW5kCT0gMHgwMDBmCit9LCB7CisJLm5hbWUJPSAiZG1hIGxvdyBwYWdlIiwKKwkuc3RhcnQJPSAweDAwODAsCisJLmVuZCAJPSAweDAwOGYKK30sIHsKKwkubmFtZQk9ICJkbWEyIiwKKwkuc3RhcnQJPSAweDAwYzAsCisJLmVuZAk9IDB4MDBkZgorfSwgeworCS5uYW1lCT0gImRtYSBoaWdoIHBhZ2UiLAorCS5zdGFydAk9IDB4MDQ4MCwKKwkuZW5kCT0gMHgwNDhmCit9IH07CiAKIHZvaWQgX19pbml0IGlzYV9pbml0X2RtYShkbWFfdCAqZG1hKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggMzU1OTE0Zi4uYWI4ZTYwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC02NjYsNyArNjY2LDcgQEAKICAqCiAgKiAjZGVmaW5lIF9fa2VybmVsX2RtYigpIFwKICAqICAgICAgICAgYXNtIHZvbGF0aWxlICggIm1vdiByMCwgIzB4ZmZmZjBmZmY7IG1vdiBsciwgcGM7IHN1YiBwYywgcjAsICM5NSIgXAotICoJICAgICAgICA6IDogOiAibHIiLCJjYyIgKQorICoJICAgICAgICA6IDogOiAicjAiLCAibHIiLCJjYyIgKQogICovCiAKIF9fa3VzZXJfbWVtb3J5X2JhcnJpZXI6CQkJCUAgMHhmZmZmMGZhMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTJkYTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChjKSAyMDAzIEFSTSBMaW1pdGVkCisgKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKwkudHlwZQlfX3N3aXRjaF9kYXRhLCAlb2JqZWN0CitfX3N3aXRjaF9kYXRhOgorCS5sb25nCV9fbW1hcF9zd2l0Y2hlZAorCS5sb25nCV9fZGF0YV9sb2MJCQlAIHI0CisJLmxvbmcJX19kYXRhX3N0YXJ0CQkJQCByNQorCS5sb25nCV9fYnNzX3N0YXJ0CQkJQCByNgorCS5sb25nCV9lbmQJCQkJQCByNworCS5sb25nCXByb2Nlc3Nvcl9pZAkJCUAgcjQKKwkubG9uZwlfX21hY2hpbmVfYXJjaF90eXBlCQlAIHI1CisJLmxvbmcJY3JfYWxpZ25tZW50CQkJQCByNgorCS5sb25nCWluaXRfdGhyZWFkX3VuaW9uICsgVEhSRUFEX1NUQVJUX1NQIEAgc3AKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnJhZ21lbnQgb2YgY29kZSBpcyBleGVjdXRlZCB3aXRoIHRoZSBNTVUgb24gaW4gTU1VIG1vZGUsCisgKiBhbmQgdXNlcyBhYnNvbHV0ZSBhZGRyZXNzZXM7IHRoaXMgaXMgbm90IHBvc2l0aW9uIGluZGVwZW5kZW50LgorICoKKyAqICByMCAgPSBjcCMxNSBjb250cm9sIHJlZ2lzdGVyCisgKiAgcjEgID0gbWFjaGluZSBJRAorICogIHI5ICA9IHByb2Nlc3NvciBJRAorICovCisJLnR5cGUJX19tbWFwX3N3aXRjaGVkLCAlZnVuY3Rpb24KK19fbW1hcF9zd2l0Y2hlZDoKKwlhZHIJcjMsIF9fc3dpdGNoX2RhdGEgKyA0CisKKwlsZG1pYQlyMyEsIHtyNCwgcjUsIHI2LCByN30KKwljbXAJcjQsIHI1CQkJCUAgQ29weSBkYXRhIHNlZ21lbnQgaWYgbmVlZGVkCisxOgljbXBuZQlyNSwgcjYKKwlsZHJuZQlmcCwgW3I0XSwgIzQKKwlzdHJuZQlmcCwgW3I1XSwgIzQKKwlibmUJMWIKKworCW1vdglmcCwgIzAJCQkJQCBDbGVhciBCU1MgKGFuZCB6ZXJvIGZwKQorMToJY21wCXI2LCByNworCXN0cmNjCWZwLCBbcjZdLCM0CisJYmNjCTFiCisKKwlsZG1pYQlyMywge3I0LCByNSwgcjYsIHNwfQorCXN0cglyOSwgW3I0XQkJCUAgU2F2ZSBwcm9jZXNzb3IgSUQKKwlzdHIJcjEsIFtyNV0JCQlAIFNhdmUgbWFjaGluZSB0eXBlCisJYmljCXI0LCByMCwgI0NSX0EJCQlAIENsZWFyICdBJyBiaXQKKwlzdG1pYQlyNiwge3IwLCByNH0JCQlAIFNhdmUgY29udHJvbCByZWdpc3RlciB2YWx1ZXMKKwliCXN0YXJ0X2tlcm5lbAorCisvKgorICogRXhjZXB0aW9uIGhhbmRsaW5nLiAgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIGNhbid0IHByb2NlZWQuICBXZQorICogb3VnaHQgdG8gdGVsbCB0aGUgdXNlciwgYnV0IHNpbmNlIHdlIGRvbid0IGhhdmUgYW55IGd1YXJhbnRlZSB0aGF0CisgKiB3ZSdyZSBldmVuIHJ1bm5pbmcgb24gdGhlIHJpZ2h0IGFyY2hpdGVjdHVyZSwgd2UgZG8gdmlydHVhbGx5IG5vdGhpbmcuCisgKgorICogSWYgQ09ORklHX0RFQlVHX0xMIGlzIHNldCB3ZSB0cnkgdG8gcHJpbnQgb3V0IHNvbWV0aGluZyBhYm91dCB0aGUgZXJyb3IKKyAqIGFuZCBob3BlIGZvciB0aGUgYmVzdCAodXNlZnVsIGlmIGJvb3Rsb2FkZXIgZmFpbHMgdG8gcGFzcyBhIHByb3BlcgorICogbWFjaGluZSBJRCBmb3IgZXhhbXBsZSkuCisgKi8KKworCS50eXBlCV9fZXJyb3JfcCwgJWZ1bmN0aW9uCitfX2Vycm9yX3A6CisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJYWRyCXIwLCBzdHJfcDEKKwlibAlwcmludGFzY2lpCisJYglfX2Vycm9yCitzdHJfcDE6CS5hc2NpegkiXG5FcnJvcjogdW5yZWNvZ25pemVkL3Vuc3VwcG9ydGVkIHByb2Nlc3NvciB2YXJpYW50LlxuIgorCS5hbGlnbgorI2VuZGlmCisKKwkudHlwZQlfX2Vycm9yX2EsICVmdW5jdGlvbgorX19lcnJvcl9hOgorI2lmZGVmIENPTkZJR19ERUJVR19MTAorCW1vdglyNCwgcjEJCQkJQCBwcmVzZXJ2ZSBtYWNoaW5lIElECisJYWRyCXIwLCBzdHJfYTEKKwlibAlwcmludGFzY2lpCisJbW92CXIwLCByNAorCWJsCXByaW50aGV4OAorCWFkcglyMCwgc3RyX2EyCisJYmwJcHJpbnRhc2NpaQorCWFkcglyMywgM2YKKwlsZG1pYQlyMywge3I0LCByNSwgcjZ9CQlAIGdldCBtYWNoaW5lIGRlc2MgbGlzdAorCXN1YglyNCwgcjMsIHI0CQkJQCBnZXQgb2Zmc2V0IGJldHdlZW4gdmlydCZwaHlzCisJYWRkCXI1LCByNSwgcjQJCQlAIGNvbnZlcnQgdmlydCBhZGRyZXNzZXMgdG8KKwlhZGQJcjYsIHI2LCByNAkJCUAgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorMToJbGRyCXIwLCBbcjUsICNNQUNISU5GT19UWVBFXQlAIGdldCBtYWNoaW5lIHR5cGUKKwlibAlwcmludGhleDgKKwltb3YJcjAsICMnXHQnCisJYmwJcHJpbnRjaAorCWxkciAgICAgcjAsIFtyNSwgI01BQ0hJTkZPX05BTUVdCUAgZ2V0IG1hY2hpbmUgbmFtZQorCWFkZAlyMCwgcjAsIHI0CisJYmwJcHJpbnRhc2NpaQorCW1vdglyMCwgIydcbicKKwlibAlwcmludGNoCisJYWRkCXI1LCByNSwgI1NJWkVPRl9NQUNISU5FX0RFU0MJQCBuZXh0IG1hY2hpbmVfZGVzYworCWNtcAlyNSwgcjYKKwlibG8JMWIKKwlhZHIJcjAsIHN0cl9hMworCWJsCXByaW50YXNjaWkKKwliCV9fZXJyb3IKK3N0cl9hMToJLmFzY2l6CSJcbkVycm9yOiB1bnJlY29nbml6ZWQvdW5zdXBwb3J0ZWQgbWFjaGluZSBJRCAocjEgPSAweCIKK3N0cl9hMjoJLmFzY2l6CSIpLlxuXG5BdmFpbGFibGUgbWFjaGluZSBzdXBwb3J0OlxuXG5JRCAoaGV4KVx0TkFNRVxuIgorc3RyX2EzOgkuYXNjaXoJIlxuUGxlYXNlIGNoZWNrIHlvdXIga2VybmVsIGNvbmZpZyBhbmQvb3IgYm9vdGxvYWRlci5cbiIKKwkuYWxpZ24KKyNlbmRpZgorCisJLnR5cGUJX19lcnJvciwgJWZ1bmN0aW9uCitfX2Vycm9yOgorI2lmZGVmIENPTkZJR19BUkNIX1JQQworLyoKKyAqIFR1cm4gdGhlIHNjcmVlbiByZWQgb24gYSBlcnJvciAtIFJpc2NQQyBvbmx5LgorICovCisJbW92CXIwLCAjMHgwMjAwMDAwMAorCW1vdglyMywgIzB4MTEKKwlvcnIJcjMsIHIzLCByMywgbHNsICM4CisJb3JyCXIzLCByMywgcjMsIGxzbCAjMTYKKwlzdHIJcjMsIFtyMF0sICM0CisJc3RyCXIzLCBbcjBdLCAjNAorCXN0cglyMywgW3IwXSwgIzQKKwlzdHIJcjMsIFtyMF0sICM0CisjZW5kaWYKKzE6CW1vdglyMCwgcjAKKwliCTFiCisKKworLyoKKyAqIFJlYWQgcHJvY2Vzc29yIElEIHJlZ2lzdGVyIChDUCMxNSwgQ1IwKSwgYW5kIGxvb2sgdXAgaW4gdGhlIGxpbmtlci1idWlsdAorICogc3VwcG9ydGVkIHByb2Nlc3NvciBsaXN0LiAgTm90ZSB0aGF0IHdlIGNhbid0IHVzZSB0aGUgYWJzb2x1dGUgYWRkcmVzc2VzCisgKiBmb3IgdGhlIF9fcHJvY19pbmZvIGxpc3RzIHNpbmNlIHdlIGFyZW4ndCBydW5uaW5nIHdpdGggdGhlIE1NVSBvbgorICogKGFuZCB0aGVyZWZvcmUsIHdlIGFyZSBub3QgaW4gdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSkuICBXZSBoYXZlIHRvCisgKiBjYWxjdWxhdGUgdGhlIG9mZnNldC4KKyAqCisgKglyOSA9IGNwdWlkCisgKiBSZXR1cm5zOgorICoJcjMsIHI0LCByNiBjb3JydXB0ZWQKKyAqCXI1ID0gcHJvY19pbmZvIHBvaW50ZXIgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorICoJcjkgPSBjcHVpZCAocHJlc2VydmVkKQorICovCisJLnR5cGUJX19sb29rdXBfcHJvY2Vzc29yX3R5cGUsICVmdW5jdGlvbgorX19sb29rdXBfcHJvY2Vzc29yX3R5cGU6CisJYWRyCXIzLCAzZgorCWxkbWRhCXIzLCB7cjUgLSByN30KKwlzdWIJcjMsIHIzLCByNwkJCUAgZ2V0IG9mZnNldCBiZXR3ZWVuIHZpcnQmcGh5cworCWFkZAlyNSwgcjUsIHIzCQkJQCBjb252ZXJ0IHZpcnQgYWRkcmVzc2VzIHRvCisJYWRkCXI2LCByNiwgcjMJCQlAIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UKKzE6CWxkbWlhCXI1LCB7cjMsIHI0fQkJCUAgdmFsdWUsIG1hc2sKKwlhbmQJcjQsIHI0LCByOQkJCUAgbWFzayB3YW50ZWQgYml0cworCXRlcQlyMywgcjQKKwliZXEJMmYKKwlhZGQJcjUsIHI1LCAjUFJPQ19JTkZPX1NaCQlAIHNpemVvZihwcm9jX2luZm9fbGlzdCkKKwljbXAJcjUsIHI2CisJYmxvCTFiCisJbW92CXI1LCAjMAkJCQlAIHVua25vd24gcHJvY2Vzc29yCisyOgltb3YJcGMsIGxyCisKKy8qCisgKiBUaGlzIHByb3ZpZGVzIGEgQy1BUEkgdmVyc2lvbiBvZiB0aGUgYWJvdmUgZnVuY3Rpb24uCisgKi8KK0VOVFJZKGxvb2t1cF9wcm9jZXNzb3JfdHlwZSkKKwlzdG1mZAlzcCEsIHtyNCAtIHI3LCByOSwgbHJ9CisJbW92CXI5LCByMAorCWJsCV9fbG9va3VwX3Byb2Nlc3Nvcl90eXBlCisJbW92CXIwLCByNQorCWxkbWZkCXNwISwge3I0IC0gcjcsIHI5LCBwY30KKworLyoKKyAqIExvb2sgaW4gaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmggYW5kIGFyY2gvYXJtL2tlcm5lbC9hcmNoLltjaF0gZm9yCisgKiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBfX3Byb2NfaW5mbyBhbmQgX19hcmNoX2luZm8gc3RydWN0dXJlcy4KKyAqLworCS5sb25nCV9fcHJvY19pbmZvX2JlZ2luCisJLmxvbmcJX19wcm9jX2luZm9fZW5kCiszOgkubG9uZwkuCisJLmxvbmcJX19hcmNoX2luZm9fYmVnaW4KKwkubG9uZwlfX2FyY2hfaW5mb19lbmQKKworLyoKKyAqIExvb2t1cCBtYWNoaW5lIGFyY2hpdGVjdHVyZSBpbiB0aGUgbGlua2VyLWJ1aWxkIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcy4KKyAqIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGFic29sdXRlIGFkZHJlc3NlcyBmb3IgdGhlIF9fYXJjaF9pbmZvCisgKiBsaXN0cyBzaW5jZSB3ZSBhcmVuJ3QgcnVubmluZyB3aXRoIHRoZSBNTVUgb24gKGFuZCB0aGVyZWZvcmUsIHdlIGFyZQorICogbm90IGluIHRoZSBjb3JyZWN0IGFkZHJlc3Mgc3BhY2UpLiAgV2UgaGF2ZSB0byBjYWxjdWxhdGUgdGhlIG9mZnNldC4KKyAqCisgKiAgcjEgPSBtYWNoaW5lIGFyY2hpdGVjdHVyZSBudW1iZXIKKyAqIFJldHVybnM6CisgKiAgcjMsIHI0LCByNiBjb3JydXB0ZWQKKyAqICByNSA9IG1hY2hfaW5mbyBwb2ludGVyIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UKKyAqLworCS50eXBlCV9fbG9va3VwX21hY2hpbmVfdHlwZSwgJWZ1bmN0aW9uCitfX2xvb2t1cF9tYWNoaW5lX3R5cGU6CisJYWRyCXIzLCAzYgorCWxkbWlhCXIzLCB7cjQsIHI1LCByNn0KKwlzdWIJcjMsIHIzLCByNAkJCUAgZ2V0IG9mZnNldCBiZXR3ZWVuIHZpcnQmcGh5cworCWFkZAlyNSwgcjUsIHIzCQkJQCBjb252ZXJ0IHZpcnQgYWRkcmVzc2VzIHRvCisJYWRkCXI2LCByNiwgcjMJCQlAIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UKKzE6CWxkcglyMywgW3I1LCAjTUFDSElORk9fVFlQRV0JQCBnZXQgbWFjaGluZSB0eXBlCisJdGVxCXIzLCByMQkJCQlAIG1hdGNoZXMgbG9hZGVyIG51bWJlcj8KKwliZXEJMmYJCQkJQCBmb3VuZAorCWFkZAlyNSwgcjUsICNTSVpFT0ZfTUFDSElORV9ERVNDCUAgbmV4dCBtYWNoaW5lX2Rlc2MKKwljbXAJcjUsIHI2CisJYmxvCTFiCisJbW92CXI1LCAjMAkJCQlAIHVua25vd24gbWFjaGluZQorMjoJbW92CXBjLCBscgorCisvKgorICogVGhpcyBwcm92aWRlcyBhIEMtQVBJIHZlcnNpb24gb2YgdGhlIGFib3ZlIGZ1bmN0aW9uLgorICovCitFTlRSWShsb29rdXBfbWFjaGluZV90eXBlKQorCXN0bWZkCXNwISwge3I0IC0gcjYsIGxyfQorCW1vdglyMSwgcjAKKwlibAlfX2xvb2t1cF9tYWNoaW5lX3R5cGUKKwltb3YJcjAsIHI1CisJbGRtZmQJc3AhLCB7cjQgLSByNiwgcGN9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGY2MmU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0yMDAyIFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IEh5b2sgUy4gQ2hvaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvbW1vbiBrZXJuZWwgc3RhcnR1cCBjb2RlIChub24tcGFnZWQgTU0pCisgKiAgICBmb3IgMzItYml0IENQVXMgd2hpY2ggaGFzIGEgcHJvY2VzcyBJRCByZWdpc3RlcihDUDE1KS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworLyoKKyAqIEtlcm5lbCBzdGFydHVwIGVudHJ5IHBvaW50LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhpcyBpcyBub3JtYWxseSBjYWxsZWQgZnJvbSB0aGUgZGVjb21wcmVzc29yIGNvZGUuICBUaGUgcmVxdWlyZW1lbnRzCisgKiBhcmU6IE1NVSA9IG9mZiwgRC1jYWNoZSA9IG9mZiwgSS1jYWNoZSA9IGRvbnQgY2FyZSwgcjAgPSAwLAorICogcjEgPSBtYWNoaW5lIG5yLgorICoKKyAqIFNlZSBsaW51eC9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGZvciB0aGUgY29tcGxldGUgbGlzdCBvZiBtYWNoaW5lCisgKiBudW1iZXJzIGZvciByMS4KKyAqCisgKi8KKwlfX0lOSVQKKwkudHlwZQlzdGV4dCwgJWZ1bmN0aW9uCitFTlRSWShzdGV4dCkKKwltc3IJY3Bzcl9jLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgTU9ERV9TVkMgQCBlbnN1cmUgc3ZjIG1vZGUKKwkJCQkJCUAgYW5kIGlycXMgZGlzYWJsZWQKKwltcmMJcDE1LCAwLCByOSwgYzAsIGMwCQlAIGdldCBwcm9jZXNzb3IgaWQKKwlibAlfX2xvb2t1cF9wcm9jZXNzb3JfdHlwZQkJQCByNT1wcm9jaW5mbyByOT1jcHVpZAorCW1vdnMJcjEwLCByNQkJCQlAIGludmFsaWQgcHJvY2Vzc29yIChyNT0wKT8KKwliZXEJX19lcnJvcl9wCQkJCUAgeWVzLCBlcnJvciAncCcKKwlibAlfX2xvb2t1cF9tYWNoaW5lX3R5cGUJCUAgcjU9bWFjaGluZm8KKwltb3ZzCXI4LCByNQkJCQlAIGludmFsaWQgbWFjaGluZSAocjU9MCk/CisJYmVxCV9fZXJyb3JfYQkJCUAgeWVzLCBlcnJvciAnYScKKworCWxkcglyMTMsIF9fc3dpdGNoX2RhdGEJCUAgYWRkcmVzcyB0byBqdW1wIHRvIGFmdGVyCisJCQkJCQlAIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lCisJYWRyCWxyLCBfX2FmdGVyX3Byb2NfaW5pdAkJQCByZXR1cm4gKFBJQykgYWRkcmVzcworCWFkZAlwYywgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMKKworLyoKKyAqIFNldCB0aGUgQ29udHJvbCBSZWdpc3RlciBhbmQgUmVhZCB0aGUgcHJvY2VzcyBJRC4KKyAqLworCS50eXBlCV9fYWZ0ZXJfcHJvY19pbml0LCAlZnVuY3Rpb24KK19fYWZ0ZXJfcHJvY19pbml0OgorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgcmVhZCBjb250cm9sIHJlZworI2lmZGVmIENPTkZJR19BTElHTk1FTlRfVFJBUAorCW9ycglyMCwgcjAsICNDUl9BCisjZWxzZQorCWJpYwlyMCwgcjAsICNDUl9BCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCisJYmljCXIwLCByMCwgI0NSX0MKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRQorCWJpYwlyMCwgcjAsICNDUl9aCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCisJYmljCXIwLCByMCwgI0NSX0kKKyNlbmRpZgorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgd3JpdGUgY29udHJvbCByZWcKKworCW1vdglwYywgcjEzCQkJCUAgY2xlYXIgdGhlIEJTUyBhbmQganVtcAorCQkJCQkJQCB0byBzdGFydF9rZXJuZWwKKwkubHRvcmcKKworI2luY2x1ZGUgImhlYWQtY29tbW9uLlMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCA1M2I2OTAxLi4wNGY3MzQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKQEAgLTI0LDE0ICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jZGVmaW5lIFBST0NJTkZPX01NVUZMQUdTCTgKLSNkZWZpbmUgUFJPQ0lORk9fSU5JVEZVTkMJMTIKLQotI2RlZmluZSBNQUNISU5GT19UWVBFCQkwCi0jZGVmaW5lIE1BQ0hJTkZPX1BIWVNJTwkJNAotI2RlZmluZSBNQUNISU5GT19QR09GRklPCTgKLSNkZWZpbmUgTUFDSElORk9fTkFNRQkJMTIKLQogI2RlZmluZSBLRVJORUxfUkFNX0FERFIJKFBBR0VfT0ZGU0VUICsgVEVYVF9PRkZTRVQpCiAKIC8qCkBAIC0xMDIsNDkgKzk0LDYgQEAKIAlhZHIJbHIsIF9fZW5hYmxlX21tdQkJQCByZXR1cm4gKFBJQykgYWRkcmVzcwogCWFkZAlwYywgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMKIAotCS50eXBlCV9fc3dpdGNoX2RhdGEsICVvYmplY3QKLV9fc3dpdGNoX2RhdGE6Ci0JLmxvbmcJX19tbWFwX3N3aXRjaGVkCi0JLmxvbmcJX19kYXRhX2xvYwkJCUAgcjQKLQkubG9uZwlfX2RhdGFfc3RhcnQJCQlAIHI1Ci0JLmxvbmcJX19ic3Nfc3RhcnQJCQlAIHI2Ci0JLmxvbmcJX2VuZAkJCQlAIHI3Ci0JLmxvbmcJcHJvY2Vzc29yX2lkCQkJQCByNAotCS5sb25nCV9fbWFjaGluZV9hcmNoX3R5cGUJCUAgcjUKLQkubG9uZwljcl9hbGlnbm1lbnQJCQlAIHI2Ci0JLmxvbmcJaW5pdF90aHJlYWRfdW5pb24gKyBUSFJFQURfU1RBUlRfU1AgQCBzcAotCi0vKgotICogVGhlIGZvbGxvd2luZyBmcmFnbWVudCBvZiBjb2RlIGlzIGV4ZWN1dGVkIHdpdGggdGhlIE1NVSBvbiwgYW5kIHVzZXMKLSAqIGFic29sdXRlIGFkZHJlc3NlczsgdGhpcyBpcyBub3QgcG9zaXRpb24gaW5kZXBlbmRlbnQuCi0gKgotICogIHIwICA9IGNwIzE1IGNvbnRyb2wgcmVnaXN0ZXIKLSAqICByMSAgPSBtYWNoaW5lIElECi0gKiAgcjkgID0gcHJvY2Vzc29yIElECi0gKi8KLQkudHlwZQlfX21tYXBfc3dpdGNoZWQsICVmdW5jdGlvbgotX19tbWFwX3N3aXRjaGVkOgotCWFkcglyMywgX19zd2l0Y2hfZGF0YSArIDQKLQotCWxkbWlhCXIzISwge3I0LCByNSwgcjYsIHI3fQotCWNtcAlyNCwgcjUJCQkJQCBDb3B5IGRhdGEgc2VnbWVudCBpZiBuZWVkZWQKLTE6CWNtcG5lCXI1LCByNgotCWxkcm5lCWZwLCBbcjRdLCAjNAotCXN0cm5lCWZwLCBbcjVdLCAjNAotCWJuZQkxYgotCi0JbW92CWZwLCAjMAkJCQlAIENsZWFyIEJTUyAoYW5kIHplcm8gZnApCi0xOgljbXAJcjYsIHI3Ci0Jc3RyY2MJZnAsIFtyNl0sIzQKLQliY2MJMWIKLQotCWxkbWlhCXIzLCB7cjQsIHI1LCByNiwgc3B9Ci0Jc3RyCXI5LCBbcjRdCQkJQCBTYXZlIHByb2Nlc3NvciBJRAotCXN0cglyMSwgW3I1XQkJCUAgU2F2ZSBtYWNoaW5lIHR5cGUKLQliaWMJcjQsIHIwLCAjQ1JfQQkJCUAgQ2xlYXIgJ0EnIGJpdAotCXN0bWlhCXI2LCB7cjAsIHI0fQkJCUAgU2F2ZSBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcwotCWIJc3RhcnRfa2VybmVsCi0KICNpZiBkZWZpbmVkKENPTkZJR19TTVApCiAJLnR5cGUgICBzZWNvbmRhcnlfc3RhcnR1cCwgI2Z1bmN0aW9uCiBFTlRSWShzZWNvbmRhcnlfc3RhcnR1cCkKQEAgLTM2NywxNjYgKzMxNiw0IEBACiAJbW92CXBjLCBscgogCS5sdG9yZwogCi0KLQotLyoKLSAqIEV4Y2VwdGlvbiBoYW5kbGluZy4gIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSBjYW4ndCBwcm9jZWVkLiAgV2UKLSAqIG91Z2h0IHRvIHRlbGwgdGhlIHVzZXIsIGJ1dCBzaW5jZSB3ZSBkb24ndCBoYXZlIGFueSBndWFyYW50ZWUgdGhhdAotICogd2UncmUgZXZlbiBydW5uaW5nIG9uIHRoZSByaWdodCBhcmNoaXRlY3R1cmUsIHdlIGRvIHZpcnR1YWxseSBub3RoaW5nLgotICoKLSAqIElmIENPTkZJR19ERUJVR19MTCBpcyBzZXQgd2UgdHJ5IHRvIHByaW50IG91dCBzb21ldGhpbmcgYWJvdXQgdGhlIGVycm9yCi0gKiBhbmQgaG9wZSBmb3IgdGhlIGJlc3QgKHVzZWZ1bCBpZiBib290bG9hZGVyIGZhaWxzIHRvIHBhc3MgYSBwcm9wZXIKLSAqIG1hY2hpbmUgSUQgZm9yIGV4YW1wbGUpLgotICovCi0KLQkudHlwZQlfX2Vycm9yX3AsICVmdW5jdGlvbgotX19lcnJvcl9wOgotI2lmZGVmIENPTkZJR19ERUJVR19MTAotCWFkcglyMCwgc3RyX3AxCi0JYmwJcHJpbnRhc2NpaQotCWIJX19lcnJvcgotc3RyX3AxOgkuYXNjaXoJIlxuRXJyb3I6IHVucmVjb2duaXplZC91bnN1cHBvcnRlZCBwcm9jZXNzb3IgdmFyaWFudC5cbiIKLQkuYWxpZ24KLSNlbmRpZgotCi0JLnR5cGUJX19lcnJvcl9hLCAlZnVuY3Rpb24KLV9fZXJyb3JfYToKLSNpZmRlZiBDT05GSUdfREVCVUdfTEwKLQltb3YJcjQsIHIxCQkJCUAgcHJlc2VydmUgbWFjaGluZSBJRAotCWFkcglyMCwgc3RyX2ExCi0JYmwJcHJpbnRhc2NpaQotCW1vdglyMCwgcjQKLQlibAlwcmludGhleDgKLQlhZHIJcjAsIHN0cl9hMgotCWJsCXByaW50YXNjaWkKLQlhZHIJcjMsIDNmCi0JbGRtaWEJcjMsIHtyNCwgcjUsIHI2fQkJQCBnZXQgbWFjaGluZSBkZXNjIGxpc3QKLQlzdWIJcjQsIHIzLCByNAkJCUAgZ2V0IG9mZnNldCBiZXR3ZWVuIHZpcnQmcGh5cwotCWFkZAlyNSwgcjUsIHI0CQkJQCBjb252ZXJ0IHZpcnQgYWRkcmVzc2VzIHRvCi0JYWRkCXI2LCByNiwgcjQJCQlAIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UKLTE6CWxkcglyMCwgW3I1LCAjTUFDSElORk9fVFlQRV0JQCBnZXQgbWFjaGluZSB0eXBlCi0JYmwJcHJpbnRoZXg4Ci0JbW92CXIwLCAjJ1x0JwotCWJsCXByaW50Y2gKLQlsZHIgICAgIHIwLCBbcjUsICNNQUNISU5GT19OQU1FXQlAIGdldCBtYWNoaW5lIG5hbWUKLQlhZGQJcjAsIHIwLCByNAotCWJsCXByaW50YXNjaWkKLQltb3YJcjAsICMnXG4nCi0JYmwJcHJpbnRjaAotCWFkZAlyNSwgcjUsICNTSVpFT0ZfTUFDSElORV9ERVNDCUAgbmV4dCBtYWNoaW5lX2Rlc2MKLQljbXAJcjUsIHI2Ci0JYmxvCTFiCi0JYWRyCXIwLCBzdHJfYTMKLQlibAlwcmludGFzY2lpCi0JYglfX2Vycm9yCi1zdHJfYTE6CS5hc2NpegkiXG5FcnJvcjogdW5yZWNvZ25pemVkL3Vuc3VwcG9ydGVkIG1hY2hpbmUgSUQgKHIxID0gMHgiCi1zdHJfYTI6CS5hc2NpegkiKS5cblxuQXZhaWxhYmxlIG1hY2hpbmUgc3VwcG9ydDpcblxuSUQgKGhleClcdE5BTUVcbiIKLXN0cl9hMzoJLmFzY2l6CSJcblBsZWFzZSBjaGVjayB5b3VyIGtlcm5lbCBjb25maWcgYW5kL29yIGJvb3Rsb2FkZXIuXG4iCi0JLmFsaWduCi0jZW5kaWYKLQotCS50eXBlCV9fZXJyb3IsICVmdW5jdGlvbgotX19lcnJvcjoKLSNpZmRlZiBDT05GSUdfQVJDSF9SUEMKLS8qCi0gKiBUdXJuIHRoZSBzY3JlZW4gcmVkIG9uIGEgZXJyb3IgLSBSaXNjUEMgb25seS4KLSAqLwotCW1vdglyMCwgIzB4MDIwMDAwMDAKLQltb3YJcjMsICMweDExCi0Jb3JyCXIzLCByMywgcjMsIGxzbCAjOAotCW9ycglyMywgcjMsIHIzLCBsc2wgIzE2Ci0Jc3RyCXIzLCBbcjBdLCAjNAotCXN0cglyMywgW3IwXSwgIzQKLQlzdHIJcjMsIFtyMF0sICM0Ci0Jc3RyCXIzLCBbcjBdLCAjNAotI2VuZGlmCi0xOgltb3YJcjAsIHIwCi0JYgkxYgotCi0KLS8qCi0gKiBSZWFkIHByb2Nlc3NvciBJRCByZWdpc3RlciAoQ1AjMTUsIENSMCksIGFuZCBsb29rIHVwIGluIHRoZSBsaW5rZXItYnVpbHQKLSAqIHN1cHBvcnRlZCBwcm9jZXNzb3IgbGlzdC4gIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGFic29sdXRlIGFkZHJlc3NlcwotICogZm9yIHRoZSBfX3Byb2NfaW5mbyBsaXN0cyBzaW5jZSB3ZSBhcmVuJ3QgcnVubmluZyB3aXRoIHRoZSBNTVUgb24KLSAqIChhbmQgdGhlcmVmb3JlLCB3ZSBhcmUgbm90IGluIHRoZSBjb3JyZWN0IGFkZHJlc3Mgc3BhY2UpLiAgV2UgaGF2ZSB0bwotICogY2FsY3VsYXRlIHRoZSBvZmZzZXQuCi0gKgotICoJcjkgPSBjcHVpZAotICogUmV0dXJuczoKLSAqCXIzLCByNCwgcjYgY29ycnVwdGVkCi0gKglyNSA9IHByb2NfaW5mbyBwb2ludGVyIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UKLSAqCXI5ID0gY3B1aWQgKHByZXNlcnZlZCkKLSAqLwotCS50eXBlCV9fbG9va3VwX3Byb2Nlc3Nvcl90eXBlLCAlZnVuY3Rpb24KLV9fbG9va3VwX3Byb2Nlc3Nvcl90eXBlOgotCWFkcglyMywgM2YKLQlsZG1kYQlyMywge3I1IC0gcjd9Ci0Jc3ViCXIzLCByMywgcjcJCQlAIGdldCBvZmZzZXQgYmV0d2VlbiB2aXJ0JnBoeXMKLQlhZGQJcjUsIHI1LCByMwkJCUAgY29udmVydCB2aXJ0IGFkZHJlc3NlcyB0bwotCWFkZAlyNiwgcjYsIHIzCQkJQCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCi0xOglsZG1pYQlyNSwge3IzLCByNH0JCQlAIHZhbHVlLCBtYXNrCi0JYW5kCXI0LCByNCwgcjkJCQlAIG1hc2sgd2FudGVkIGJpdHMKLQl0ZXEJcjMsIHI0Ci0JYmVxCTJmCi0JYWRkCXI1LCByNSwgI1BST0NfSU5GT19TWgkJQCBzaXplb2YocHJvY19pbmZvX2xpc3QpCi0JY21wCXI1LCByNgotCWJsbwkxYgotCW1vdglyNSwgIzAJCQkJQCB1bmtub3duIHByb2Nlc3NvcgotMjoJbW92CXBjLCBscgotCi0vKgotICogVGhpcyBwcm92aWRlcyBhIEMtQVBJIHZlcnNpb24gb2YgdGhlIGFib3ZlIGZ1bmN0aW9uLgotICovCi1FTlRSWShsb29rdXBfcHJvY2Vzc29yX3R5cGUpCi0Jc3RtZmQJc3AhLCB7cjQgLSByNywgcjksIGxyfQotCW1vdglyOSwgcjAKLQlibAlfX2xvb2t1cF9wcm9jZXNzb3JfdHlwZQotCW1vdglyMCwgcjUKLQlsZG1mZAlzcCEsIHtyNCAtIHI3LCByOSwgcGN9Ci0KLS8qCi0gKiBMb29rIGluIGluY2x1ZGUvYXNtLWFybS9wcm9jaW5mby5oIGFuZCBhcmNoL2FybS9rZXJuZWwvYXJjaC5bY2hdIGZvcgotICogbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgX19wcm9jX2luZm8gYW5kIF9fYXJjaF9pbmZvIHN0cnVjdHVyZXMuCi0gKi8KLQkubG9uZwlfX3Byb2NfaW5mb19iZWdpbgotCS5sb25nCV9fcHJvY19pbmZvX2VuZAotMzoJLmxvbmcJLgotCS5sb25nCV9fYXJjaF9pbmZvX2JlZ2luCi0JLmxvbmcJX19hcmNoX2luZm9fZW5kCi0KLS8qCi0gKiBMb29rdXAgbWFjaGluZSBhcmNoaXRlY3R1cmUgaW4gdGhlIGxpbmtlci1idWlsZCBsaXN0IG9mIGFyY2hpdGVjdHVyZXMuCi0gKiBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIHRoZSBhYnNvbHV0ZSBhZGRyZXNzZXMgZm9yIHRoZSBfX2FyY2hfaW5mbwotICogbGlzdHMgc2luY2Ugd2UgYXJlbid0IHJ1bm5pbmcgd2l0aCB0aGUgTU1VIG9uIChhbmQgdGhlcmVmb3JlLCB3ZSBhcmUKLSAqIG5vdCBpbiB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlKS4gIFdlIGhhdmUgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQuCi0gKgotICogIHIxID0gbWFjaGluZSBhcmNoaXRlY3R1cmUgbnVtYmVyCi0gKiBSZXR1cm5zOgotICogIHIzLCByNCwgcjYgY29ycnVwdGVkCi0gKiAgcjUgPSBtYWNoX2luZm8gcG9pbnRlciBpbiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCi0gKi8KLQkudHlwZQlfX2xvb2t1cF9tYWNoaW5lX3R5cGUsICVmdW5jdGlvbgotX19sb29rdXBfbWFjaGluZV90eXBlOgotCWFkcglyMywgM2IKLQlsZG1pYQlyMywge3I0LCByNSwgcjZ9Ci0Jc3ViCXIzLCByMywgcjQJCQlAIGdldCBvZmZzZXQgYmV0d2VlbiB2aXJ0JnBoeXMKLQlhZGQJcjUsIHI1LCByMwkJCUAgY29udmVydCB2aXJ0IGFkZHJlc3NlcyB0bwotCWFkZAlyNiwgcjYsIHIzCQkJQCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCi0xOglsZHIJcjMsIFtyNSwgI01BQ0hJTkZPX1RZUEVdCUAgZ2V0IG1hY2hpbmUgdHlwZQotCXRlcQlyMywgcjEJCQkJQCBtYXRjaGVzIGxvYWRlciBudW1iZXI/Ci0JYmVxCTJmCQkJCUAgZm91bmQKLQlhZGQJcjUsIHI1LCAjU0laRU9GX01BQ0hJTkVfREVTQwlAIG5leHQgbWFjaGluZV9kZXNjCi0JY21wCXI1LCByNgotCWJsbwkxYgotCW1vdglyNSwgIzAJCQkJQCB1bmtub3duIG1hY2hpbmUKLTI6CW1vdglwYywgbHIKLQotLyoKLSAqIFRoaXMgcHJvdmlkZXMgYSBDLUFQSSB2ZXJzaW9uIG9mIHRoZSBhYm92ZSBmdW5jdGlvbi4KLSAqLwotRU5UUlkobG9va3VwX21hY2hpbmVfdHlwZSkKLQlzdG1mZAlzcCEsIHtyNCAtIHI2LCBscn0KLQltb3YJcjEsIHIwCi0JYmwJX19sb29rdXBfbWFjaGluZV90eXBlCi0JbW92CXIwLCByNQotCWxkbWZkCXNwISwge3I0IC0gcjYsIHBjfQorI2luY2x1ZGUgImhlYWQtY29tbW9uLlMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCA0ODljMDY5Li43ZGY2ZTFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI2NCw4ICsyNjQsMTIgQEAKIC8qCiAgKiBUYXNrIHN0cnVjdHVyZSBhbmQga2VybmVsIHN0YWNrIGFsbG9jYXRpb24uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nICp0aHJlYWRfaW5mb19oZWFkOwotc3RhdGljIHVuc2lnbmVkIGludCBucl90aHJlYWRfaW5mbzsKK3N0cnVjdCB0aHJlYWRfaW5mb19saXN0IHsKKwl1bnNpZ25lZCBsb25nICpoZWFkOworCXVuc2lnbmVkIGludCBucjsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGhyZWFkX2luZm9fbGlzdCwgdGhyZWFkX2luZm9fbGlzdCkgPSB7IE5VTEwsIDAgfTsKIAogI2RlZmluZSBFWFRSQV9UQVNLX1NUUlVDVAk0CiAKQEAgLTI3NCwxMiArMjc4LDE1IEBACiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBOVUxMOwogCiAJaWYgKEVYVFJBX1RBU0tfU1RSVUNUKSB7Ci0JCXVuc2lnbmVkIGxvbmcgKnAgPSB0aHJlYWRfaW5mb19oZWFkOworCQlzdHJ1Y3QgdGhyZWFkX2luZm9fbGlzdCAqdGggPSAmZ2V0X2NwdV92YXIodGhyZWFkX2luZm9fbGlzdCk7CisJCXVuc2lnbmVkIGxvbmcgKnAgPSB0aC0+aGVhZDsKIAogCQlpZiAocCkgewotCQkJdGhyZWFkX2luZm9faGVhZCA9ICh1bnNpZ25lZCBsb25nICopcFswXTsKLQkJCW5yX3RocmVhZF9pbmZvIC09IDE7CisJCQl0aC0+aGVhZCA9ICh1bnNpZ25lZCBsb25nICopcFswXTsKKwkJCXRoLT5uciAtPSAxOwogCQl9CisJCXB1dF9jcHVfdmFyKHRocmVhZF9pbmZvX2xpc3QpOworCiAJCXRocmVhZCA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKilwOwogCX0KIApAQCAtMzAwLDEzICszMDcsMTkgQEAKIAogdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQogewotCWlmIChFWFRSQV9UQVNLX1NUUlVDVCAmJiBucl90aHJlYWRfaW5mbyA8IEVYVFJBX1RBU0tfU1RSVUNUKSB7Ci0JCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKXRocmVhZDsKLQkJcFswXSA9ICh1bnNpZ25lZCBsb25nKXRocmVhZF9pbmZvX2hlYWQ7Ci0JCXRocmVhZF9pbmZvX2hlYWQgPSBwOwotCQlucl90aHJlYWRfaW5mbyArPSAxOwotCX0gZWxzZQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXRocmVhZCwgVEhSRUFEX1NJWkVfT1JERVIpOworCWlmIChFWFRSQV9UQVNLX1NUUlVDVCkgeworCQlzdHJ1Y3QgdGhyZWFkX2luZm9fbGlzdCAqdGggPSAmZ2V0X2NwdV92YXIodGhyZWFkX2luZm9fbGlzdCk7CisJCWlmICh0aC0+bnIgPCBFWFRSQV9UQVNLX1NUUlVDVCkgeworCQkJdW5zaWduZWQgbG9uZyAqcCA9ICh1bnNpZ25lZCBsb25nICopdGhyZWFkOworCQkJcFswXSA9ICh1bnNpZ25lZCBsb25nKXRoLT5oZWFkOworCQkJdGgtPmhlYWQgPSBwOworCQkJdGgtPm5yICs9IDE7CisJCQlwdXRfY3B1X3Zhcih0aHJlYWRfaW5mb19saXN0KTsKKwkJCXJldHVybjsKKwkJfQorCQlwdXRfY3B1X3Zhcih0aHJlYWRfaW5mb19saXN0KTsKKwl9CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl0aHJlYWQsIFRIUkVBRF9TSVpFX09SREVSKTsKIH0KIAogLyoKQEAgLTQ3NCw0ICs0ODcsMyBAQAogCX0gd2hpbGUgKGNvdW50ICsrIDwgMTYpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChnZXRfd2NoYW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCBiN2NkMjgwLi45ZmM5YWY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMjUyLDYgKzI1Miw5IEBACiAJCQlkdW1wX2NhY2hlKCJjYWNoZSIsIGNwdSwgQ0FDSEVfSVNJWkUoaW5mbykpOwogCQl9CiAJfQorCisJaWYgKGFyY2hfaXNfY29oZXJlbnQoKSkKKwkJcHJpbnRrKCJDYWNoZSBjb2hlcmVuY3kgZW5hYmxlZFxuIik7CiB9CiAKIGludCBjcHVfYXJjaGl0ZWN0dXJlKHZvaWQpCkBAIC0zMTksNiArMzIyLDEyIEBACiAJc3ByaW50ZihzeXN0ZW1fdXRzbmFtZS5tYWNoaW5lLCAiJXMlYyIsIGxpc3QtPmFyY2hfbmFtZSwgRU5ESUFOTkVTUyk7CiAJc3ByaW50ZihlbGZfcGxhdGZvcm0sICIlcyVjIiwgbGlzdC0+ZWxmX25hbWUsIEVORElBTk5FU1MpOwogCWVsZl9od2NhcCA9IGxpc3QtPmVsZl9od2NhcDsKKyNpZm5kZWYgQ09ORklHX0FSTV9USFVNQgorCWVsZl9od2NhcCAmPSB+SFdDQVBfVEhVTUI7CisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX1ZGUAorCWVsZl9od2NhcCAmPSB+SFdDQVBfVkZQOworI2VuZGlmCiAKIAljcHVfcHJvY19pbml0KCk7CiB9CkBAIC0zOTgsNyArNDA3LDcgQEAKIH0KIF9fZWFybHlfcGFyYW0oImluaXRyZD0iLCBlYXJseV9pbml0cmQpOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYWRkX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgYXJtX2FkZF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCS8qCiAJICogRW5zdXJlIHRoYXQgc3RhcnQvc2l6ZSBhcmUgYWxpZ25lZCB0byBhIHBhZ2UgYm91bmRhcnkuCkBAIC00MzYsNyArNDQ1LDcgQEAKIAlpZiAoKipwID09ICdAJykKIAkJc3RhcnQgPSBtZW1wYXJzZSgqcCArIDEsIHApOwogCi0JYWRkX21lbW9yeShzdGFydCwgc2l6ZSk7CisJYXJtX2FkZF9tZW1vcnkoc3RhcnQsIHNpemUpOwogfQogX19lYXJseV9wYXJhbSgibWVtPSIsIGVhcmx5X21lbSk7CiAKQEAgLTU3OCw3ICs1ODcsNyBAQAogCQkJdGFnLT51Lm1lbS5zdGFydCwgdGFnLT51Lm1lbS5zaXplIC8gMTAyNCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlhZGRfbWVtb3J5KHRhZy0+dS5tZW0uc3RhcnQsIHRhZy0+dS5tZW0uc2l6ZSk7CisJYXJtX2FkZF9tZW1vcnkodGFnLT51Lm1lbS5zdGFydCwgdGFnLT51Lm1lbS5zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzk4LDcgKzgwNyw3IEBACiB7CiAJaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdShjcHUpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLmNwdSwgY3B1LCBOVUxMKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCmluZGV4IDk5OTEwNDkuLjI3YmVlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaAorKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKQEAgLTcsNiArNyw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNkZWZpbmUgS0VSTl9TSUdSRVRVUk5fQ09ERQkweGZmZmYwNTAwCisjZGVmaW5lIEtFUk5fU0lHUkVUVVJOX0NPREUJKENPTkZJR19WRUNUT1JTX0JBU0UgKyAweDAwMDAwNTAwKQogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzaWdyZXR1cm5fY29kZXNbN107CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCmluZGV4IGQ1NjZkNWYuLjM1MjMwYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCkBAIC02ODgsNiArNjg4LDcgQEAKIAogdm9pZCBfX2luaXQgdHJhcF9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyB2ZWN0b3JzID0gQ09ORklHX1ZFQ1RPUlNfQkFTRTsKIAlleHRlcm4gY2hhciBfX3N0dWJzX3N0YXJ0W10sIF9fc3R1YnNfZW5kW107CiAJZXh0ZXJuIGNoYXIgX192ZWN0b3JzX3N0YXJ0W10sIF9fdmVjdG9yc19lbmRbXTsKIAlleHRlcm4gY2hhciBfX2t1c2VyX2hlbHBlcl9zdGFydFtdLCBfX2t1c2VyX2hlbHBlcl9lbmRbXTsKQEAgLTY5OCw5ICs2OTksOSBAQAogCSAqIGludG8gdGhlIHZlY3RvciBwYWdlLCBtYXBwZWQgYXQgMHhmZmZmMDAwMCwgYW5kIGVuc3VyZSB0aGVzZQogCSAqIGFyZSB2aXNpYmxlIHRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uCiAJICovCi0JbWVtY3B5KCh2b2lkICopMHhmZmZmMDAwMCwgX192ZWN0b3JzX3N0YXJ0LCBfX3ZlY3RvcnNfZW5kIC0gX192ZWN0b3JzX3N0YXJ0KTsKLQltZW1jcHkoKHZvaWQgKikweGZmZmYwMjAwLCBfX3N0dWJzX3N0YXJ0LCBfX3N0dWJzX2VuZCAtIF9fc3R1YnNfc3RhcnQpOwotCW1lbWNweSgodm9pZCAqKTB4ZmZmZjEwMDAgLSBrdXNlcl9zeiwgX19rdXNlcl9oZWxwZXJfc3RhcnQsIGt1c2VyX3N6KTsKKwltZW1jcHkoKHZvaWQgKil2ZWN0b3JzLCBfX3ZlY3RvcnNfc3RhcnQsIF9fdmVjdG9yc19lbmQgLSBfX3ZlY3RvcnNfc3RhcnQpOworCW1lbWNweSgodm9pZCAqKXZlY3RvcnMgKyAweDIwMCwgX19zdHVic19zdGFydCwgX19zdHVic19lbmQgLSBfX3N0dWJzX3N0YXJ0KTsKKwltZW1jcHkoKHZvaWQgKil2ZWN0b3JzICsgMHgxMDAwIC0ga3VzZXJfc3osIF9fa3VzZXJfaGVscGVyX3N0YXJ0LCBrdXNlcl9zeik7CiAKIAkvKgogCSAqIENvcHkgc2lnbmFsIHJldHVybiBoYW5kbGVycyBpbnRvIHRoZSB2ZWN0b3IgcGFnZSwgYW5kCkBAIC03MDksNiArNzEwLDYgQEAKIAltZW1jcHkoKHZvaWQgKilLRVJOX1NJR1JFVFVSTl9DT0RFLCBzaWdyZXR1cm5fY29kZXMsCiAJICAgICAgIHNpemVvZihzaWdyZXR1cm5fY29kZXMpKTsKIAotCWZsdXNoX2ljYWNoZV9yYW5nZSgweGZmZmYwMDAwLCAweGZmZmYwMDAwICsgUEFHRV9TSVpFKTsKKwlmbHVzaF9pY2FjaGVfcmFuZ2UodmVjdG9ycywgdmVjdG9ycyArIFBBR0VfU0laRSk7CiAJbW9kaWZ5X2RvbWFpbihET01BSU5fVVNFUiwgRE9NQUlOX0NMSUVOVCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMgYi9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMKaW5kZXggM2JkYzhjNi4uMTYxNTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2JhY2t0cmFjZS5TCisrKyBiL2FyY2gvYXJtL2xpYi9iYWNrdHJhY2UuUwpAQCAtMTIyLDcgKzEyMiw3IEBACiAjZGVmaW5lIHJlZyAgIHI1CiAjZGVmaW5lIHN0YWNrIHI2CiAKLS5MZHVtcHN0bToJc3RtZmQJc3AhLCB7aW5zdHIsIHJlZywgc3RhY2ssIHI3LCBscn0KKy5MZHVtcHN0bToJc3RtZmQJc3AhLCB7aW5zdHIsIHJlZywgc3RhY2ssIHI3LCByOCwgbHJ9CiAJCW1vdglzdGFjaywgcjAKIAkJbW92CWluc3RyLCByMQogCQltb3YJcmVnLCAjOQpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCWFkcm5lCXIwLCAuTGNyCiAJCWJsbmUJcHJpbnRrCiAJCW1vdglyMCwgc3RhY2sKLQkJTE9BRFJFR1MoZmQsIHNwISwge2luc3RyLCByZWcsIHN0YWNrLCByNywgcGN9KQorCQlMT0FEUkVHUyhmZCwgc3AhLCB7aW5zdHIsIHJlZywgc3RhY2ssIHI3LCByOCwgcGN9KQogCiAuTGZwOgkJLmFzY2l6CSIgciVkID0gJTA4WCVjIgogLkxjcjoJCS5hc2NpegkiXG4iCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZGl2NjQuUyBiL2FyY2gvYXJtL2xpYi9kaXY2NC5TCmluZGV4IGVjOWExY2QuLjU4ZWVmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9kaXY2NC5TCisrKyBiL2FyY2gvYXJtL2xpYi9kaXY2NC5TCkBAIC0xODksMTIgKzE4OSwxMiBAQAogCW1vdmVxCXBjLCBscgogCiAJQCBEaXZpc2lvbiBieSAwOgotCXN0cglsciwgW3NwLCAjLTRdIQorCXN0cglsciwgW3NwLCAjLThdIQogCWJsCV9fZGl2MAogCiAJQCBhcyB3cm9uZyBhcyBpdCBjb3VsZCBiZS4uLgogCW1vdgl5bCwgIzAKIAltb3YJeWgsICMwCiAJbW92CXhoLCAjMAotCWxkcglwYywgW3NwXSwgIzQKKwlsZHIJcGMsIFtzcF0sICM4CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvYWFlZDIwMDAuYyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvYWFlZDIwMDAuYwppbmRleCBkYzVmYThlLi44M2Y1N2RhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2FhZWQyMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9hYWVkMjAwMC5jCkBAIC03OSw3ICs3OSwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFhZWQyMDAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotICB7IEVYVF9HUElPX1ZCQVNFLCBFWFRfR1BJT19QQkFTRSwgRVhUX0dQSU9fTEVOR1RILCBNVF9ERVZJQ0UgfSwgLyogRXh0IEdQSU8gKi8KKwl7CisJCS52aXJ0dWFsCT0gRVhUX0dQSU9fVkJBU0UsCisJCS5wZm4gICAgICAgICAgICA9IF9fcGh5c190b19wZm4oRVhUX0dQSU9fUEJBU0UpLAorCQkubGVuZ3RoICAgICAgICAgPSBFWFRfR1BJT19MRU5HVEgsCisJCS50eXBlICAgICAgICAgICA9IE1UX0RFVklDRQorCX0sCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgYWFlZDIwMDBfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5jCmluZGV4IGRjZTQ4MTUuLjY1YmU1ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNTAsMTIgKzQ5LDEyIEBACiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHN0YW5kYXJkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBWSU9fQVBCX0JBU0UsCi0JCS5waHlzaWNhbAk9IF9fcGh5c190b19wZm4oUElPX0FQQl9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBJT19BUEJfQkFTRSksCiAJCS5sZW5ndGgJCT0gSU9fQVBCX0xFTkdUSCwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZJT19BSEJfQkFTRSwKLQkJLnBoeXNpY2FsCT0gX19waHlzX3RvX3BmbihQSU9fQUhCX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUElPX0FIQl9CQVNFKSwKIAkJLmxlbmd0aAkJPSBJT19BSEJfTEVOR1RILAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5oCmluZGV4IGI2MDI5YTkuLjU5NTAxYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5oCkBAIC05LDYgKzksNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KIAogc3RydWN0IHN5c190aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9NYWtlZmlsZQppbmRleCA3NWU2ZWUzLi5lZjg4YzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlCkBAIC0xNiwxMSArMTYsMTIgQEAKICNvYmotJChDT05GSUdfTUFDSF9LQjkyMDApCSs9IGJvYXJkLWtiOTIwMi5vCiAKICMgTEVEcyBzdXBwb3J0Ci0jbGVkLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLKQkrPSBsZWRzLm8KLSNsZWQtJChDT05GSUdfTUFDSF9BVDkxUk05MjAwRUspCSs9IGxlZHMubwotI2xlZC0kKENPTkZJR19NQUNIX0NTQjMzNykJKz0gbGVkcy5vCi0jbGVkLSQoQ09ORklHX01BQ0hfQ1NCNjM3KQkrPSBsZWRzLm8KK2xlZC0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDBESykJKz0gbGVkcy5vCitsZWQtJChDT05GSUdfTUFDSF9BVDkxUk05MjAwRUspCSs9IGxlZHMubworbGVkLSQoQ09ORklHX01BQ0hfQ1NCMzM3KQkrPSBsZWRzLm8KK2xlZC0kKENPTkZJR19NQUNIX0NTQjYzNykJKz0gbGVkcy5vCiAjbGVkLSQoQ09ORklHX01BQ0hfS0I5MjAwKQkrPSBsZWRzLm8KKyNsZWQtJChDT05GSUdfTUFDSF9LQUZBKQkrPSBsZWRzLm8KIG9iai0kKENPTkZJR19MRURTKSArPSAkKGxlZC15KQogCiAjIFZHQSBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMKaW5kZXggNTQwMjJlNS4uZjQ1MTA0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjMzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jc2IzMzcuYwpAQCAtNjcsNiArNjcsOSBAQAogCS8qIEluaXRpYWxpemUgY2xvY2tzOiAzLjY4NjQgTUh6IGNyeXN0YWwgKi8KIAlhdDkxX2Nsb2NrX2luaXQoMzY4NjQwMCk7CiAKKwkvKiBTZXR1cCB0aGUgTEVEcyAqLworCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BCMiwgQVQ5MV9QSU5fUEIyKTsKKwogI2lmZGVmIENPTkZJR19TRVJJQUxfQVQ5MQogCWF0OTFfY29uc29sZV9wb3J0ID0gQ1NCMzM3X1NFUklBTF9DT05TT0xFOwogCW1lbWNweShhdDkxX3NlcmlhbF9tYXAsIHNlcmlhbCwgc2l6ZW9mKHNlcmlhbCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jCmluZGV4IDgxOTVmOWQuLmYyYzJkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jc2I2MzcuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiNjM3LmMKQEAgLTY3LDYgKzY3LDkgQEAKIAkvKiBJbml0aWFsaXplIGNsb2NrczogMy42ODY0IE1IeiBjcnlzdGFsICovCiAJYXQ5MV9jbG9ja19pbml0KDM2ODY0MDApOwogCisJLyogU2V0dXAgdGhlIExFRHMgKi8KKwlhdDkxX2luaXRfbGVkcyhBVDkxX1BJTl9QQjIsIEFUOTFfUElOX1BCMik7CisKICNpZmRlZiBDT05GSUdfU0VSSUFMX0FUOTEKIAlhdDkxX2NvbnNvbGVfcG9ydCA9IENTQjYzN19TRVJJQUxfQ09OU09MRTsKIAltZW1jcHkoYXQ5MV9zZXJpYWxfbWFwLCBzZXJpYWwsIHNpemVvZihzZXJpYWwpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1kay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKaW5kZXggOGE3ODMzNi4uMmQ3MjAwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKQEAgLTcwLDYgKzcwLDkgQEAKIAkvKiBJbml0aWFsaXplIGNsb2NrczogMTguNDMyIE1IeiBjcnlzdGFsICovCiAJYXQ5MV9jbG9ja19pbml0KDE4NDMyMDAwKTsKIAorCS8qIFNldHVwIHRoZSBMRURzICovCisJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEIyLCBBVDkxX1BJTl9QQjIpOworCiAjaWZkZWYgQ09ORklHX1NFUklBTF9BVDkxCiAJYXQ5MV9jb25zb2xlX3BvcnQgPSBES19TRVJJQUxfQ09OU09MRTsKIAltZW1jcHkoYXQ5MV9zZXJpYWxfbWFwLCBzZXJpYWwsIHNpemVvZihzZXJpYWwpKTsKQEAgLTExOCw5ICsxMjEsMTQgQEAKIAlhdDkxX2FkZF9kZXZpY2VfdWRjKCZka191ZGNfZGF0YSk7CiAJLyogQ29tcGFjdCBGbGFzaCAqLwogCWF0OTFfYWRkX2RldmljZV9jZigmZGtfY2ZfZGF0YSk7CisjaWZkZWYgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJECisJLyogRGF0YUZsYXNoIGNhcmQgKi8KKwlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjcsIDApOworI2Vsc2UKIAkvKiBNTUMgKi8KLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjcsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuIGRlZmF1bHQ6IE1NQyAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCNywgMSk7CS8qIHRoaXMgTU1DIGNhcmQgc2xvdCBjYW4gb3B0aW9uYWxseSB1c2UgU1BJIHNpZ25hbGluZyAoQ1MzKS4gKi8KIAlhdDkxX2FkZF9kZXZpY2VfbW1jKCZka19tbWNfZGF0YSk7CisjZW5kaWYKIAkvKiBWR0EgKi8KIC8vCWRrX2FkZF9kZXZpY2VfdmlkZW8oKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKaW5kZXggZmQwNzUyZS4uODBkOTBmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKQEAgLTcwLDYgKzcwLDkgQEAKIAkvKiBJbml0aWFsaXplIGNsb2NrczogMTguNDMyIE1IeiBjcnlzdGFsICovCiAJYXQ5MV9jbG9ja19pbml0KDE4NDMyMDAwKTsKIAorCS8qIFNldHVwIHRoZSBMRURzICovCisJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEIxLCBBVDkxX1BJTl9QQjIpOworCiAjaWZkZWYgQ09ORklHX1NFUklBTF9BVDkxCiAJYXQ5MV9jb25zb2xlX3BvcnQgPSBFS19TRVJJQUxfQ09OU09MRTsKIAltZW1jcHkoYXQ5MV9zZXJpYWxfbWFwLCBzZXJpYWwsIHNpemVvZihzZXJpYWwpKTsKQEAgLTExMSw5ICsxMTQsMTQgQEAKIAlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKIAkvKiBVU0IgRGV2aWNlICovCiAJYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOworI2lmZGVmIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRAorCS8qIERhdGFGbGFzaCBjYXJkICovCisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIyMiwgMCk7CisjZWxzZQogCS8qIE1NQyAqLwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCMjIsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuIGRlZmF1bHQ6IE1NQyAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCMjIsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuICovCiAJYXQ5MV9hZGRfZGV2aWNlX21tYygmZWtfbW1jX2RhdGEpOworI2VuZGlmCiAJLyogVkdBICovCiAvLwlla19hZGRfZGV2aWNlX3ZpZGVvKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYwppbmRleCA1N2VlZGQ1Li5iZmU0N2JkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CiBzdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIHVzYmhfZGF0YTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxcm05MjAwX3VzYmhfcmVzb3VyY2VbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV91c2JoX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBBVDkxX1VIUF9CQVNFLAotCQkuZW5kCT0gQVQ5MV9VSFBfQkFTRSArIFNaXzFNIC0xLAorCQkuZW5kCT0gQVQ5MV9VSFBfQkFTRSArIFNaXzFNIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC00OSw4ICs0OSw4IEBACiAJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKIAkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAogCX0sCi0JLnJlc291cmNlCT0gYXQ5MXJtOTIwMF91c2JoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxcm05MjAwX3VzYmhfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGF0OTFfdXNiaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MV91c2JoX3Jlc291cmNlKSwKIH07CiAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKQEAgLTEyMSw2ICsxMjEsMTkgQEAKIHN0YXRpYyB1NjQgZXRoX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CiBzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgZXRoX2RhdGE7CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9ldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX0JBU0VfRU1BQywKKwkJLmVuZAk9IEFUOTFfQkFTRV9FTUFDICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfSURfRU1BQywKKwkJLmVuZAk9IEFUOTFfSURfRU1BQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfZXRoX2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV9ldGhlciIsCiAJLmlkCQk9IC0xLApAQCAtMTI5LDcgKzE0Miw4IEBACiAJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKIAkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZXRoX2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCisJLnJlc291cmNlCT0gYXQ5MV9ldGhfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxX2V0aF9yZXNvdXJjZXMpLAogfTsKIAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkKQEAgLTE4MCwxMyArMTk0LDIzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVQ5MV9DRikgfHwgZGVmaW5lZChDT05GSUdfQVQ5MV9DRl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZl9kYXRhOwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF0OTFfY2ZfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX0NGX0JBU0UsCisJCS8qIHRpZXMgdXAgQ1M0LCBDUzUsIGFuZCBDUzYgKi8KKwkJLmVuZAk9IEFUOTFfQ0ZfQkFTRSArICgweDMwMDAwMDAwIC0gMSksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEFORDE2QklULAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2NmX2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV9jZiIsCiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewogCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjZl9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSAwLAorCS5yZXNvdXJjZQk9IGF0OTFfY2ZfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxX2NmX3Jlc291cmNlcyksCiB9OwogCiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSkKQEAgLTIyNCwxNSArMjQ4LDIwIEBACiBzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgbW1jX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9tbWNfcmVzb3VyY2VzW10gPSB7Ci0JeworCVswXSA9IHsKIAkJLnN0YXJ0CT0gQVQ5MV9CQVNFX01DSSwKIAkJLmVuZAk9IEFUOTFfQkFTRV9NQ0kgKyBTWl8xNksgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9CisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfSURfTUNJLAorCQkuZW5kCT0gQVQ5MV9JRF9NQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX21tY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFybTkyMDBfbWNpIiwKKwkubmFtZQkJPSAiYXQ5MV9tY2kiLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKIAkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLApAQCAtMjkwLDQgKzMxOSwxMjMgQEAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpIHt9CiAjZW5kaWYKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBOQU5EIC8gU21hcnRNZWRpYQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUOTFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBhdDkxX25hbmRfZGF0YSBuYW5kX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9uYW5kX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gQVQ5MV9TTUFSVE1FRElBX0JBU0UsCisJCS5lbmQJPSBBVDkxX1NNQVJUTUVESUFfQkFTRSArIFNaXzhNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYXQ5MV9uYW5kX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MV9uYW5kX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwkvKiBlbmFibGUgcGluICovCisJaWYgKGRhdGEtPmVuYWJsZV9waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOworCisJLyogcmVhZHkvYnVzeSBwaW4gKi8KKwlpZiAoZGF0YS0+cmR5X3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5yZHlfcGluLCAxKTsKKworCS8qIGNhcmQgZGV0ZWN0IHBpbiAqLworCWlmIChkYXRhLT5kZXRfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJCS8qIFNNT0UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMsIDApOwkJLyogU01XRSAqLworCisJbmFuZF9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX25hbmRfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRXSSAoaTJjKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3R3aV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyh2b2lkKQoreworCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkJLyogVFdEICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyNSwgMSk7CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAwKTsJCS8qIFRXQ0sgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI2LCAxKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF90d2lfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJUQworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUOTFfUlRDKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX1JUQ19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3J0Y19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfcnRjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0Yyh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9ydGNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIExFRHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTKQordTggYXQ5MV9sZWRzX2NwdTsKK3U4IGF0OTFfbGVkc190aW1lcjsKKwordm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKQoreworCWF0OTFfbGVkc19jcHUgICA9IGNwdV9sZWQ7CisJYXQ5MV9sZWRzX3RpbWVyID0gdGltZXJfbGVkOworfQorCisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKSB7fQorI2VuZGlmCisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTUwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvbGVkcy5jCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogTEVEIGRyaXZlciBmb3IgQXRtZWwgQVQ5MS1iYXNlZCBib2FyZHMuCisgKgorICogIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZSAoUHR5KSBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ5MV9sZWRfb24odW5zaWduZWQgaW50IGxlZCkKK3sKKwlhdDkxX3NldF9ncGlvX3ZhbHVlKGxlZCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX2xlZF9vZmYodW5zaWduZWQgaW50IGxlZCkKK3sKKwlhdDkxX3NldF9ncGlvX3ZhbHVlKGxlZCwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX2xlZF90b2dnbGUodW5zaWduZWQgaW50IGxlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlzX29mZiA9IGF0OTFfZ2V0X2dwaW9fdmFsdWUobGVkKTsKKwlpZiAoaXNfb2ZmKQorCQlhdDkxX2xlZF9vbihsZWQpOworCWVsc2UKKwkJYXQ5MV9sZWRfb2ZmKGxlZCk7Cit9CisKKworLyoKKyAqIEhhbmRsZSBMRUQgZXZlbnRzLgorICovCitzdGF0aWMgdm9pZCBhdDkxX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2goZXZ0KSB7CisJY2FzZSBsZWRfc3RhcnQ6CQkvKiBTeXN0ZW0gc3RhcnR1cCAqLworCQlhdDkxX2xlZF9vbihhdDkxX2xlZHNfY3B1KTsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9zdG9wOgkJLyogU3lzdGVtIHN0b3AgLyBzdXNwZW5kICovCisJCWF0OTFfbGVkX29mZihhdDkxX2xlZHNfY3B1KTsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCWNhc2UgbGVkX3RpbWVyOgkJLyogRXZlcnkgNTAgdGltZXIgdGlja3MgKi8KKwkJYXQ5MV9sZWRfdG9nZ2xlKGF0OTFfbGVkc190aW1lcik7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTEVEU19DUFUKKwljYXNlIGxlZF9pZGxlX3N0YXJ0OgkvKiBFbnRlcmluZyBpZGxlIHN0YXRlICovCisJCWF0OTFfbGVkX29mZihhdDkxX2xlZHNfY3B1KTsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9pZGxlX2VuZDoJLyogRXhpdCBpZGxlIHN0YXRlICovCisJCWF0OTFfbGVkX29uKGF0OTFfbGVkc19jcHUpOworCQlicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQoreworCWlmICghYXQ5MV9sZWRzX3RpbWVyIHx8ICFhdDkxX2xlZHNfY3B1KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEVuYWJsZSBQSU8gdG8gYWNjZXNzIHRoZSBMRURzICovCisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoYXQ5MV9sZWRzX3RpbWVyLCAxKTsKKwlhdDkxX3NldF9ncGlvX291dHB1dChhdDkxX2xlZHNfY3B1LCAxKTsKKworCWxlZHNfZXZlbnQgPSBhdDkxX2xlZHNfZXZlbnQ7CisKKwlsZWRzX2V2ZW50KGxlZF9zdGFydCk7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwobGVkc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCAyZDg5MmU0Li5kY2Q0MTc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC00MjQsNiArNDI0LDE0IEBACiAJLnBlcmlwaGlkCT0gMHgwMDA0MTAxMCwKIH07CiAKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X3J0Y19kZXZpY2UgPSB7CisgICAgICAgLm5hbWUgICAgICAgICAgID0gImVwOTN4eC1ydGMiLAorICAgICAgIC5pZCAgICAgICAgICAgICA9IC0xLAorICAgICAgIC5udW1fcmVzb3VyY2VzICA9IDAsCit9OworCisKIHZvaWQgX19pbml0IGVwOTN4eF9pbml0X2RldmljZXModm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdjsKQEAgLTQzOSw0ICs0NDcsNiBAQAogCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKCZ1YXJ0MV9kZXZpY2UsICZpb21lbV9yZXNvdXJjZSk7CiAJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoJnVhcnQyX2RldmljZSwgJmlvbWVtX3Jlc291cmNlKTsKIAlhbWJhX2RldmljZV9yZWdpc3RlcigmdWFydDNfZGV2aWNlLCAmaW9tZW1fcmVzb3VyY2UpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfcnRjX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCmluZGV4IDc3N2U3NWQuLmUyNDU2NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L200OHQ4Ni5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zOSw2ICs0MSwxNiBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oVFM3MlhYX09QVElPTlMyX1BIWVNfQkFTRSksCiAJCS5sZW5ndGgJCT0gVFM3MlhYX09QVElPTlMyX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gVFM3MlhYX1JUQ19JTkRFWF9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUzcyWFhfUlRDX0lOREVYX1BIWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gVFM3MlhYX1JUQ19JTkRFWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IFRTNzJYWF9SVENfREFUQV9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUzcyWFhfUlRDX0RBVEFfUEhZU19CQVNFKSwKKwkJLmxlbmd0aAkJPSBUUzcyWFhfUlRDX0RBVEFfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0KIH07CiAKQEAgLTk5LDExICsxMTEsMzggQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHRzNzJ4eF9ydGNfcmVhZGJ5dGUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fcmF3X3dyaXRlYihhZGRyLCBUUzcyWFhfUlRDX0lOREVYX1ZJUlRfQkFTRSk7CisJcmV0dXJuIF9fcmF3X3JlYWRiKFRTNzJYWF9SVENfREFUQV9WSVJUX0JBU0UpOworfQorCitzdGF0aWMgdm9pZCB0czcyeHhfcnRjX3dyaXRlYnl0ZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19yYXdfd3JpdGViKGFkZHIsIFRTNzJYWF9SVENfSU5ERVhfVklSVF9CQVNFKTsKKwlfX3Jhd193cml0ZWIodmFsdWUsIFRTNzJYWF9SVENfREFUQV9WSVJUX0JBU0UpOworfQorCitzdGF0aWMgc3RydWN0IG00OHQ4Nl9vcHMgdHM3Mnh4X3J0Y19vcHMgPSB7CisJLnJlYWRieXRlCQk9IHRzNzJ4eF9ydGNfcmVhZGJ5dGUsCisJLndyaXRlYnl0ZQkJPSB0czcyeHhfcnRjX3dyaXRlYnl0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRzNzJ4eF9ydGNfZGV2aWNlID0geworCS5uYW1lCQkJPSAicnRjLW00OHQ4NiIsCisJLmlkCQkJPSAtMSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ0czcyeHhfcnRjX29wcywKKwl9LAorCS5udW1fcmVzb3VyY2VzCQk9IDAsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgdHM3Mnh4X2luaXRfbWFjaGluZSh2b2lkKQogewogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKIAlpZiAoYm9hcmRfaXNfdHM3MjAwKCkpCiAJCXBoeXNtYXBfY29uZmlndXJlKFRTNzJYWF9OT1JfUEhZU19CQVNFLCAweDAxMDAwMDAwLCAxLCBOVUxMKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRzNzJ4eF9ydGNfZGV2aWNlKTsKIH0KIAogTUFDSElORV9TVEFSVChUUzcyWFgsICJUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTcyeHggU0JDIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKaW5kZXggNzFhNTllMS4uNGNhNTFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKQEAgLTcsMTEgKzcsMTggQEAKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqICAwMy8wMy8yMDA0IFNhc2NoYSBIYXVlciA8c2FzY2hhQHNhc2NoYWhhdWVyLmRlPgorICogIDIwMDQtMDMtMDMgU2FzY2hhIEhhdWVyIDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CiAgKiAgICAgICAgICAgICBpbml0aWFsIHZlcnNpb24gaGVhdmlseSBpbnNwaXJlZCBieQogICogICAgICAgICAgICAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKKyAqCisgKiAgMjAwNS0wNC0xNyBQYXZlbCBQaXNhIDxwaXNhQGNtcC5mZWxrLmN2dXQuY3o+CisgKiAgICAgICAgICAgICBDaGFuZ2VkIHRvIHN1cHBvcnQgc2NhdHRlciBnYXRoZXIgRE1BCisgKiAgICAgICAgICAgICBieSB0YWtpbmcgUnVzc2VsbCdzIGNvZGUgZnJvbSBSaXNjUEMKKyAqCiAgKi8KIAorI3VuZGVmIERFQlVHCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMiw2OSArMjksMzY4IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtZG1hLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5uZWwgewotCWNoYXIgKm5hbWU7Ci0Jdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwotCXZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKLQl2b2lkICpkYXRhOwotfSBkbWFfY2hhbm5lbHNbMTFdOworc3RydWN0IGlteF9kbWFfY2hhbm5lbCBpbXhfZG1hX2NoYW5uZWxzW0lNWF9ETUFfQ0hBTk5FTFNdOwogCi0vKiBzZXQgZXJyX2hhbmRsZXIgdG8gTlVMTCB0byBoYXZlIHRoZSBzdGFuZGFyZCBpbmZvLW9ubHkgZXJyb3IgaGFuZGxlciAqLwotaW50Ci1pbXhfcmVxdWVzdF9kbWEoY2hhciAqbmFtZSwgaW14X2RtYV9wcmlvIHByaW8sCi0JCXZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKLQkJdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB2b2lkICpkYXRhKQorLyoKKyAqIGlteF9kbWFfc2dfbmV4dCAtIHByZXBhcmUgbmV4dCBjaHVuayBmb3Igc2NhdHRlci1nYXRoZXIgRE1BIGVtdWxhdGlvbgorICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBsYXN0Y291bnQ6IG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBkdXJpbmcgbGFzdCB0cmFuc2ZlcgorICoKKyAqIEZ1bmN0aW9ucyBwcmVwYXJlcyBETUEgY29udHJvbGxlciBmb3IgbmV4dCBzZyBkYXRhIGNodW5rIHRyYW5zZmVyLgorICogVGhlIEBsYXN0Y291bnQgYXJndW1lbnQgaW5mb3JtcyBmdW5jdGlvbiBhYm91dCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQKKyAqIGR1cmluZyBsYXN0IGJsb2NrLiBaZXJvIHZhbHVlIGNhbiBiZSB1c2VkIGZvciBAbGFzdGNvdW50IHRvIHNldHVwIERNQQorICogZm9yIHRoZSBmaXJzdCBjaHVuay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaW14X2RtYV9zZ19uZXh0KGlteF9kbWFjaF90IGRtYV9jaCwgdW5zaWduZWQgaW50IGxhc3Rjb3VudCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpLCBmb3VuZCA9IDA7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbZG1hX2NoXTsKKwl1bnNpZ25lZCBpbnQgbmV4dGNvdW50OworCXVuc2lnbmVkIGludCBuZXh0YWRkcjsKIAotCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoIW5hbWUgfHwgIWlycV9oYW5kbGVyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm90IGFsbG9jYXRlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBkbWFfY2gpOworCQlyZXR1cm4gMDsKKwl9CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaW14ZG1hLT5yZXNieXRlcyAtPSBsYXN0Y291bnQ7CiAKLQkvKiB0cnkgZ3JhYmJpbmcgYSBETUEgY2hhbm5lbCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgKi8KLQlmb3IgKGkgPSBwcmlvOyBpIDwgcHJpbyArIChwcmlvID09IERNQV9QUklPX0xPVykgPyA4IDogNDsgaSsrKSB7Ci0JCWlmICghZG1hX2NoYW5uZWxzW2ldLm5hbWUpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOworCWlmICghaW14ZG1hLT5zZykgeworCQlwcl9kZWJ1ZygiaW14ZG1hJWQ6IG5vIHNnIGRhdGFcbiIsIGRtYV9jaCk7CisJCXJldHVybiAwOworCX0KKworCWlteGRtYS0+c2diYyArPSBsYXN0Y291bnQ7CisJaWYgKChpbXhkbWEtPnNnYmMgPj0gaW14ZG1hLT5zZy0+bGVuZ3RoKSB8fCAhaW14ZG1hLT5yZXNieXRlcykgeworCQlpZiAoKGlteGRtYS0+c2djb3VudCA8PSAxKSB8fCAhaW14ZG1hLT5yZXNieXRlcykgeworCQkJcHJfZGVidWcoImlteGRtYSVkOiBzZyB0cmFuc2ZlciBsaW1pdCByZWFjaGVkXG4iLAorCQkJCSBkbWFfY2gpOworCQkJaW14ZG1hLT5zZ2NvdW50PTA7CisJCQlpbXhkbWEtPnNnID0gTlVMTDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaW14ZG1hLT5zZ2NvdW50LS07CisJCQlpbXhkbWEtPnNnKys7CisJCQlpbXhkbWEtPnNnYmMgPSAwOwogCQl9CiAJfQorCW5leHRjb3VudCA9IGlteGRtYS0+c2ctPmxlbmd0aCAtIGlteGRtYS0+c2diYzsKKwluZXh0YWRkciA9IGlteGRtYS0+c2ctPmRtYV9hZGRyZXNzICsgaW14ZG1hLT5zZ2JjOwogCi0JaWYgKCFmb3VuZCkgewotCQkvKiByZXF1ZXN0ZWQgcHJpbyBncm91cCBpcyBmdWxsLCB0cnkgaGllciBwcmlvcml0aWVzICovCi0JCWZvciAoaSA9IHByaW8gLSAxOyBpID49IDA7IGktLSkgewotCQkJaWYgKCFkbWFfY2hhbm5lbHNbaV0ubmFtZSkgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KKwlpZihpbXhkbWEtPnJlc2J5dGVzIDwgbmV4dGNvdW50KQorCQluZXh0Y291bnQgPSBpbXhkbWEtPnJlc2J5dGVzOwogCi0JaWYgKGZvdW5kKSB7Ci0JCURJTVIgJj0gfigxIDw8IGkpOwotCQlkbWFfY2hhbm5lbHNbaV0ubmFtZSA9IG5hbWU7Ci0JCWRtYV9jaGFubmVsc1tpXS5pcnFfaGFuZGxlciA9IGlycV9oYW5kbGVyOwotCQlkbWFfY2hhbm5lbHNbaV0uZXJyX2hhbmRsZXIgPSBlcnJfaGFuZGxlcjsKLQkJZG1hX2NoYW5uZWxzW2ldLmRhdGEgPSBkYXRhOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIG1vcmUgYXZhaWxhYmxlIERNQSBjaGFubmVscyBmb3IgJXNcbiIsCi0JCSAgICAgICBuYW1lKTsKLQkJaSA9IC1FTk9ERVY7Ci0JfQorCWlmICgoaW14ZG1hLT5kbWFfbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1JFQUQpCisJCURBUihkbWFfY2gpID0gbmV4dGFkZHI7CisJZWxzZQorCQlTQVIoZG1hX2NoKSA9IG5leHRhZGRyOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBpOworCUNOVFIoZG1hX2NoKSA9IG5leHRjb3VudDsKKwlwcl9kZWJ1ZygiaW14ZG1hJWQ6IG5leHQgc2cgY2h1bmsgZHN0IDB4JTA4eCwgc3JjIDB4JTA4eCwgc2l6ZSAweCUwOHhcbiIsCisJCSBkbWFfY2gsIERBUihkbWFfY2gpLCBTQVIoZG1hX2NoKSwgQ05UUihkbWFfY2gpKTsKKworCXJldHVybiBuZXh0Y291bnQ7CiB9CiAKLXZvaWQKLWlteF9mcmVlX2RtYShpbnQgZG1hX2NoKQorLyoKKyAqIGlteF9kbWFfc2V0dXBfc2dfYmFzZSAtIHNjYXR0ZXItZ2F0aGVyIERNQSBlbXVsYXRpb24KKyAqIEBkbWFfY2g6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCisgKiBAc2c6IHBvaW50ZXIgdG8gdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QvdmVjdG9yCisgKiBAc2djb3VudDogc2NhdHRlci1nYXRoZXIgbGlzdCBodW5ncyBjb3VudAorICoKKyAqIEZ1bmN0aW9ucyBzZXRzIHVwIGkuTVggRE1BIHN0YXRlIGZvciBlbXVsYXRlZCBzY2F0dGVyLWdhdGhlciB0cmFuc2ZlcgorICogYW5kIHNldHMgdXAgY2hhbm5lbCByZWdpc3RlcnMgdG8gYmUgcmVhZHkgZm9yIHRoZSBmaXJzdCBjaHVuaworICovCitzdGF0aWMgaW50CitpbXhfZG1hX3NldHVwX3NnX2Jhc2UoaW14X2RtYWNoX3QgZG1hX2NoLAorCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2djb3VudCkKK3sKKwlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tkbWFfY2hdOworCisJaW14ZG1hLT5zZyA9IHNnOworCWlteGRtYS0+c2djb3VudCA9IHNnY291bnQ7CisJaW14ZG1hLT5zZ2JjID0gMDsKKwlyZXR1cm4gaW14X2RtYV9zZ19uZXh0KGRtYV9jaCwgMCk7Cit9CisKKy8qKgorICogaW14X2RtYV9zZXR1cF9zaW5nbGUgLSBzZXR1cCBpLk1YIERNQSBjaGFubmVsIGZvciBsaW5lYXIgbWVtb3J5IHRvL2Zyb20gZGV2aWNlIHRyYW5zZmVyCisgKiBAZG1hX2NoOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgorICogQGRtYV9hZGRyZXNzOiB0aGUgRE1BL3BoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIG9mIHRoZSBsaW5lYXIgZGF0YSBibG9jaworICoJCXRvIHRyYW5zZmVyCisgKiBAZG1hX2xlbmd0aDogbGVuZ3RoIG9mIHRoZSBkYXRhIGJsb2NrIGluIGJ5dGVzCisgKiBAZGV2X2FkZHI6IHBoeXNpY2FsIGRldmljZSBwb3J0IGFkZHJlc3MKKyAqIEBkbWFtb2RlOiBETUEgdHJhbnNmZXIgbW9kZSwgJURNQV9NT0RFX1JFQUQgZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBtZW1vcnkKKyAqICAgICAgICAgICBvciAlRE1BX01PREVfV1JJVEUgZnJvbSBtZW1vcnkgdG8gdGhlIGRldmljZQorICoKKyAqIFRoZSBmdW5jdGlvbiBzZXR1cHMgRE1BIGNoYW5uZWwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgZm9yIHRyYW5zZmVyCisgKiBzcGVjaWZpZWQgYnkgcHJvdmlkZWQgcGFyYW1ldGVycy4gVGhlIHNjYXR0ZXItZ2F0aGVyIGVtdWxhdGlvbiBpcyBkaXNhYmxlZCwKKyAqIGJlY2F1c2UgbGluZWFyIGRhdGEgYmxvY2sKKyAqIGZvcm0gdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaXMgdHJhbnNmZXJlZC4KKyAqIFJldHVybiB2YWx1ZTogaWYgaW5jb3JyZWN0IHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkIC0lRUlOVkFMLgorICoJCVplcm8gaW5kaWNhdGVzIHN1Y2Nlc3MuCisgKi8KK2ludAoraW14X2RtYV9zZXR1cF9zaW5nbGUoaW14X2RtYWNoX3QgZG1hX2NoLCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAorCQkgICAgIHVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsCisJCSAgICAgZG1hbW9kZV90IGRtYW1vZGUpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbZG1hX2NoXTsKKworCWlteGRtYS0+c2cgPSBOVUxMOworCWlteGRtYS0+c2djb3VudCA9IDA7CisJaW14ZG1hLT5kbWFfbW9kZSA9IGRtYW1vZGU7CisJaW14ZG1hLT5yZXNieXRlcyA9IGRtYV9sZW5ndGg7CisKKwlpZiAoIWRtYV9hZGRyZXNzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2luZ2xlIG51bGwgYWRkcmVzc1xuIiwKKwkJICAgICAgIGRtYV9jaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZG1hX2xlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NpbmdsZSB6ZXJvIGxlbmd0aFxuIiwKKwkJICAgICAgIGRtYV9jaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1JFQUQpIHsKKwkJcHJfZGVidWcoImlteGRtYSVkOiBteF9kbWFfc2V0dXBfc2luZ2xlMmRldiBkbWFfYWRkcmVzc2c9MHglMDh4IGRtYV9sZW5ndGg9JWQgZGV2X2FkZHI9MHglMDh4IGZvciByZWFkXG4iLAorCQkJZG1hX2NoLCAodW5zaWduZWQgaW50KWRtYV9hZGRyZXNzLCBkbWFfbGVuZ3RoLAorCQkJZGV2X2FkZHIpOworCQlTQVIoZG1hX2NoKSA9IGRldl9hZGRyOworCQlEQVIoZG1hX2NoKSA9ICh1bnNpZ25lZCBpbnQpZG1hX2FkZHJlc3M7CisJfSBlbHNlIGlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1dSSVRFKSB7CisJCXByX2RlYnVnKCJpbXhkbWElZDogbXhfZG1hX3NldHVwX3NpbmdsZTJkZXYgZG1hX2FkZHJlc3NnPTB4JTA4eCBkbWFfbGVuZ3RoPSVkIGRldl9hZGRyPTB4JTA4eCBmb3Igd3JpdGVcbiIsCisJCQlkbWFfY2gsICh1bnNpZ25lZCBpbnQpZG1hX2FkZHJlc3MsIGRtYV9sZW5ndGgsCisJCQlkZXZfYWRkcik7CisJCVNBUihkbWFfY2gpID0gKHVuc2lnbmVkIGludClkbWFfYWRkcmVzczsKKwkJREFSKGRtYV9jaCkgPSBkZXZfYWRkcjsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NpbmdsZSBiYWQgZG1hbW9kZVxuIiwKKwkJICAgICAgIGRtYV9jaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCUNOVFIoZG1hX2NoKSA9IGRtYV9sZW5ndGg7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbXhfZG1hX3NldHVwX3NnIC0gc2V0dXAgaS5NWCBETUEgY2hhbm5lbCBTRyBsaXN0IHRvL2Zyb20gZGV2aWNlIHRyYW5zZmVyCisgKiBAZG1hX2NoOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgorICogQHNnOiBwb2ludGVyIHRvIHRoZSBzY2F0dGVyLWdhdGhlciBsaXN0L3ZlY3RvcgorICogQHNnY291bnQ6IHNjYXR0ZXItZ2F0aGVyIGxpc3QgaHVuZ3MgY291bnQKKyAqIEBkbWFfbGVuZ3RoOiB0b3RhbCBsZW5ndGggb2YgdGhlIHRyYW5zZmVyIHJlcXVlc3QgaW4gYnl0ZXMKKyAqIEBkZXZfYWRkcjogcGh5c2ljYWwgZGV2aWNlIHBvcnQgYWRkcmVzcworICogQGRtYW1vZGU6IERNQSB0cmFuc2ZlciBtb2RlLCAlRE1BX01PREVfUkVBRCBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIG1lbW9yeQorICogICAgICAgICAgIG9yICVETUFfTU9ERV9XUklURSBmcm9tIG1lbW9yeSB0byB0aGUgZGV2aWNlCisgKgorICogVGhlIGZ1bmN0aW9uIHNldHVwcyBETUEgY2hhbm5lbCBzdGF0ZSBhbmQgcmVnaXN0ZXJzIHRvIGJlIHJlYWR5IGZvciB0cmFuc2ZlcgorICogc3BlY2lmaWVkIGJ5IHByb3ZpZGVkIHBhcmFtZXRlcnMuIFRoZSBzY2F0dGVyLWdhdGhlciBlbXVsYXRpb24gaXMgc2V0IHVwCisgKiBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMuCisgKgorICogVGhlIGZ1bGwgcHJlcGFyYXRpb24gb2YgdGhlIHRyYW5zZmVyIHJlcXVpcmVzIHNldHVwIG9mIG1vcmUgcmVnaXN0ZXIKKyAqIGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGlteF9kbWFfZW5hYmxlKCkgY2FuIGJlIGNhbGxlZC4KKyAqCisgKiAlQkxSKGRtYV9jaCkgaG9sZHMgdHJhbnNmZXIgYnVyc3QgbGVuZ3RoIGluIGJ5dGVzLCAwIG1lYW5zIDY0IGJ5dGVzCisgKgorICogJVJTU1IoZG1hX2NoKSBoYXMgdG8gYmUgc2V0IHRvIHRoZSBETUEgcmVxdWVzdCBsaW5lIHNvdXJjZSAlRE1BX1JFUV94eHgKKyAqCisgKiAlQ0NSKGRtYV9jaCkgaGFzIHRvIHNwZWNpZnkgdHJhbnNmZXIgcGFyYW1ldGVycywgdGhlIG5leHQgc2V0dGluZ3MgaXMgdHlwaWNhbAorICogZm9yIGxpbmVhciBvciBzaW1wbGUgc2NhdHRlci1nYXRoZXIgdHJhbnNmZXJzIGlmICVETUFfTU9ERV9SRUFEIGlzIHNwZWNpZmllZAorICoKKyAqICVDQ1JfRE1PRF9MSU5FQVIgfCAlQ0NSX0RTSVpfMzIgfCAlQ0NSX1NNT0RfRklGTyB8ICVDQ1JfU1NJWl94CisgKgorICogVGhlIHR5cGljYWwgc2V0dXAgZm9yICVETUFfTU9ERV9XUklURSBpcyBzcGVjaWZpZWQgYnkgbmV4dCBvcHRpb25zIGNvbWJpbmF0aW9uCisgKgorICogJUNDUl9TTU9EX0xJTkVBUiB8ICVDQ1JfU1NJWl8zMiB8ICVDQ1JfRE1PRF9GSUZPIHwgJUNDUl9EU0laX3gKKyAqCisgKiBCZSBjYXJlZnVsbCB0aGVyZSBhbmQgZG8gbm90IG1pc3Rha2VubHkgbWl4IHNvdXJjZSBhbmQgdGFyZ2V0IGRldmljZQorICogcG9ydCBzaXplcyBjb25zdGFudHMsIHRoZXkgYXJlIHJlYWxseSBkaWZmZXJlbnQ6CisgKiAlQ0NSX1NTSVpfOCwgJUNDUl9TU0laXzE2LCAlQ0NSX1NTSVpfMzIsCisgKiAlQ0NSX0RTSVpfOCwgJUNDUl9EU0laXzE2LCAlQ0NSX0RTSVpfMzIKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGlmIGluY29ycmVjdCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCAtJUVJTlZBTC4KKyAqIFplcm8gaW5kaWNhdGVzIHN1Y2Nlc3MuCisgKi8KK2ludAoraW14X2RtYV9zZXR1cF9zZyhpbXhfZG1hY2hfdCBkbWFfY2gsCisJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2djb3VudCwgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsCisJCSB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIGRtYW1vZGVfdCBkbWFtb2RlKQoreworCWludCByZXM7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbZG1hX2NoXTsKKworCWlteGRtYS0+c2cgPSBOVUxMOworCWlteGRtYS0+c2djb3VudCA9IDA7CisJaW14ZG1hLT5kbWFfbW9kZSA9IGRtYW1vZGU7CisJaW14ZG1hLT5yZXNieXRlcyA9IGRtYV9sZW5ndGg7CisKKwlpZiAoIXNnIHx8ICFzZ2NvdW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2cgZXB0eSBzZyBsaXN0XG4iLAorCQkgICAgICAgZG1hX2NoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzZy0+bGVuZ3RoKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2cgemVybyBsZW5ndGhcbiIsCisJCSAgICAgICBkbWFfY2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKGRtYW1vZGUgJiBETUFfTU9ERV9NQVNLKSA9PSBETUFfTU9ERV9SRUFEKSB7CisJCXByX2RlYnVnKCJpbXhkbWElZDogbXhfZG1hX3NldHVwX3NnMmRldiBzZz0lcCBzZ2NvdW50PSVkIHRvdGFsIGxlbmd0aD0lZCBkZXZfYWRkcj0weCUwOHggZm9yIHJlYWRcbiIsCisJCQlkbWFfY2gsIHNnLCBzZ2NvdW50LCBkbWFfbGVuZ3RoLCBkZXZfYWRkcik7CisJCVNBUihkbWFfY2gpID0gZGV2X2FkZHI7CisJfSBlbHNlIGlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1dSSVRFKSB7CisJCXByX2RlYnVnKCJpbXhkbWElZDogbXhfZG1hX3NldHVwX3NnMmRldiBzZz0lcCBzZ2NvdW50PSVkIHRvdGFsIGxlbmd0aD0lZCBkZXZfYWRkcj0weCUwOHggZm9yIHdyaXRlXG4iLAorCQkJZG1hX2NoLCBzZywgc2djb3VudCwgZG1hX2xlbmd0aCwgZGV2X2FkZHIpOworCQlEQVIoZG1hX2NoKSA9IGRldl9hZGRyOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2cgYmFkIGRtYW1vZGVcbiIsCisJCSAgICAgICBkbWFfY2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSBpbXhfZG1hX3NldHVwX3NnX2Jhc2UoZG1hX2NoLCBzZywgc2djb3VudCk7CisJaWYgKHJlcyA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IG5vIHNnIGNodW5rIHJlYWR5XG4iLCBkbWFfY2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbXhfZG1hX3NldHVwX2hhbmRsZXJzIC0gc2V0dXAgaS5NWCBETUEgY2hhbm5lbCBlbmQgYW5kIGVycm9yIG5vdGlmaWNhdGlvbiBoYW5kbGVycworICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBpcnFfaGFuZGxlcjogdGhlIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIGNhbGxlZCBpZiB0aGUgdHJhbnNmZXIKKyAqCQllbmRzIHN1Y2Nlc3NmdWxseQorICogQGVycl9oYW5kbGVyOiB0aGUgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gY2FsbGVkIGlmIHRoZSBwcmVtYXR1cmUKKyAqCQllbmQgY2F1c2VkIGJ5IGVycm9yIG9jY3VycworICogQGRhdGE6IHVzZXIgc3BlY2lmaWVkIHZhbHVlIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlcnMKKyAqLworaW50CitpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGlteF9kbWFjaF90IGRtYV9jaCwKKwkJICAgICAgIHZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJICAgICAgIHZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbZG1hX2NoXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFpbXhkbWEtPm5hbWUpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNhbGxlZCBmb3IgIG5vdCBhbGxvY2F0ZWQgY2hhbm5lbCAlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgZG1hX2NoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCURJU1IgPSAoMSA8PCBkbWFfY2gpOworCWlteGRtYS0+aXJxX2hhbmRsZXIgPSBpcnFfaGFuZGxlcjsKKwlpbXhkbWEtPmVycl9oYW5kbGVyID0gZXJyX2hhbmRsZXI7CisJaW14ZG1hLT5kYXRhID0gZGF0YTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW14X2RtYV9lbmFibGUgLSBmdW5jdGlvbiB0byBzdGFydCBpLk1YIERNQSBjaGFubmVsIG9wZXJhdGlvbgorICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqCisgKiBUaGUgY2hhbm5lbCBoYXMgdG8gYmUgYWxsb2NhdGVkIGJ5IGRyaXZlciB0aHJvdWdoIGlteF9kbWFfcmVxdWVzdCgpCisgKiBvciBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbygpIGZ1bmN0aW9uLgorICogVGhlIHRyYW5zZmVyIHBhcmFtZXRlcnMgaGFzIHRvIGJlIHNldCB0byB0aGUgY2hhbm5lbCByZWdpc3RlcnMgdGhyb3VnaAorICogY2FsbCBvZiB0aGUgaW14X2RtYV9zZXR1cF9zaW5nbGUoKSBvciBpbXhfZG1hX3NldHVwX3NnKCkgZnVuY3Rpb24KKyAqIGFuZCByZWdpc3RlcnMgJUJMUihkbWFfY2gpLCAlUlNTUihkbWFfY2gpIGFuZCAlQ0NSKGRtYV9jaCkgaGFzIHRvCisgKiBiZSBzZXQgcHJpb3IgdGhpcyBmdW5jdGlvbiBjYWxsIGJ5IHRoZSBjaGFubmVsIHVzZXIuCisgKi8KK3ZvaWQgaW14X2RtYV9lbmFibGUoaW14X2RtYWNoX3QgZG1hX2NoKQoreworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2RtYV9jaF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCJpbXhkbWElZDogaW14X2RtYV9lbmFibGVcbiIsIGRtYV9jaCk7CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm90IGFsbG9jYXRlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBkbWFfY2gpOworCQlyZXR1cm47CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCURJU1IgPSAoMSA8PCBkbWFfY2gpOworCURJTVIgJj0gfigxIDw8IGRtYV9jaCk7CisJQ0NSKGRtYV9jaCkgfD0gQ0NSX0NFTjsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qKgorICogaW14X2RtYV9kaXNhYmxlIC0gc3RvcCwgZmluaXNoIGkuTVggRE1BIGNoYW5uZWwgb3BlcmF0aW4KKyAqIEBkbWFfY2g6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCisgKi8KK3ZvaWQgaW14X2RtYV9kaXNhYmxlKGlteF9kbWFjaF90IGRtYV9jaCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lKSB7CisJcHJfZGVidWcoImlteGRtYSVkOiBpbXhfZG1hX2Rpc2FibGVcbiIsIGRtYV9jaCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRElNUiB8PSAoMSA8PCBkbWFfY2gpOworCUNDUihkbWFfY2gpICY9IH5DQ1JfQ0VOOworCURJU1IgPSAoMSA8PCBkbWFfY2gpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoqCisgKiBpbXhfZG1hX3JlcXVlc3QgLSByZXF1ZXN0L2FsbG9jYXRlIHNwZWNpZmllZCBjaGFubmVsIG51bWJlcgorICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBuYW1lOiB0aGUgZHJpdmVyL2NhbGxlciBvd24gbm9uLSVOVUxMIGlkZW50aWZpY2F0aW9uCisgKi8KK2ludCBpbXhfZG1hX3JlcXVlc3QoaW14X2RtYWNoX3QgZG1hX2NoLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2RtYV9jaF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRtYV9jaCA+PSBJTVhfRE1BX0NIQU5ORUxTKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjYWxsZWQgZm9yICBub24tZXhpc3RlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBkbWFfY2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKGlteGRtYS0+bmFtZSkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlteGRtYS0+bmFtZSA9IG5hbWU7CisJaW14ZG1hLT5pcnFfaGFuZGxlciA9IE5VTEw7CisJaW14ZG1hLT5lcnJfaGFuZGxlciA9IE5VTEw7CisJaW14ZG1hLT5kYXRhID0gTlVMTDsKKwlpbXhkbWEtPnNnID0gTlVMTDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW14X2RtYV9mcmVlIC0gcmVsZWFzZSBwcmV2aW91c2x5IGFjcXVpcmVkIGNoYW5uZWwKKyAqIEBkbWFfY2g6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCisgKi8KK3ZvaWQgaW14X2RtYV9mcmVlKGlteF9kbWFjaF90IGRtYV9jaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2RtYV9jaF07CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgewogCQlwcmludGsoS0VSTl9DUklUCiAJCSAgICAgICAiJXM6IHRyeWluZyB0byBmcmVlIGNoYW5uZWwgJWQgd2hpY2ggaXMgYWxyZWFkeSBmcmVlZFxuIiwKIAkJICAgICAgIF9fRlVOQ1RJT05fXywgZG1hX2NoKTsKQEAgLTkyLDI3ICszOTgsODQgQEAKIAl9CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JRElNUiAmPSB+KDEgPDwgZG1hX2NoKTsKLQlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlESU1SIHw9ICgxIDw8IGRtYV9jaCk7CisJQ0NSKGRtYV9jaCkgJj0gfkNDUl9DRU47CisJaW14ZG1hLT5uYW1lID0gTlVMTDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdAotZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisvKioKKyAqIGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvIC0gZmluZCBhbmQgcmVxdWVzdCBzb21lIG9mIGZyZWUgY2hhbm5lbHMgYmVzdCBzdWl0aW5nIHJlcXVlc3RlZCBwcmlvcml0eQorICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBuYW1lOiB0aGUgZHJpdmVyL2NhbGxlciBvd24gbm9uLSVOVUxMIGlkZW50aWZpY2F0aW9uCisgKiBAcHJpbzogb25lIG9mIHRoZSBoYXJkd2FyZSBkaXN0aW5ndWlzaGVkIHByaW9yaXR5IGxldmVsOgorICogICAgICAgICVETUFfUFJJT19ISUdILCAlRE1BX1BSSU9fTUVESVVNLCAlRE1BX1BSSU9fTE9XCisgKgorICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaW5kIGZyZWUgY2hhbm5lbCBpbiB0aGUgc3BlY2lmaWVkIHByaW9yaXR5IGdyb3VwCisgKiBpZiB0aGUgcHJpb3JpdHkgY2Fubm90IGJlIGFjaGlldmVkIGl0IHRyaWVzIHRvIGxvb2sgZm9yIGZyZWUgY2hhbm5lbAorICogaW4gdGhlIGhpZ2hlciBhbmQgdGhlbiBldmVuIGxvd2VyIHByaW9yaXR5IGdyb3Vwcy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IElmIHRoZXJlIGlzIG5vIGZyZWUgY2hhbm5lbCB0byBhbGxvY2F0ZSwgLSVFTk9ERVYgaXMgcmV0dXJuZWQuCisgKiAgICAgICAgICAgICAgIFplcm8gdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3NmdWwgY2hhbm5lbCBhbGxvY2F0aW9uLgorICovCitpbnQKK2lteF9kbWFfcmVxdWVzdF9ieV9wcmlvKGlteF9kbWFjaF90ICogcGRtYV9jaCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCWlteF9kbWFfcHJpbyBwcmlvKQoreworCWludCBpOworCWludCBiZXN0OworCisJc3dpdGNoIChwcmlvKSB7CisJY2FzZSAoRE1BX1BSSU9fSElHSCk6CisJCWJlc3QgPSA4OworCQlicmVhazsKKwljYXNlIChETUFfUFJJT19NRURJVU0pOgorCQliZXN0ID0gNDsKKwkJYnJlYWs7CisJY2FzZSAoRE1BX1BSSU9fTE9XKToKKwlkZWZhdWx0OgorCQliZXN0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gYmVzdDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgeworCQlpZiAoIWlteF9kbWFfcmVxdWVzdChpLCBuYW1lKSkgeworCQkJKnBkbWFfY2ggPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlmb3IgKGkgPSBiZXN0IC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKCFpbXhfZG1hX3JlcXVlc3QoaSwgbmFtZSkpIHsKKwkJCSpwZG1hX2NoID0gaTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gZnJlZSBETUEgY2hhbm5lbCBmb3VuZFxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGksIGRpc3IgPSBESVNSOwotCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICpjaGFubmVsOwogCXVuc2lnbmVkIGludCBlcnJfbWFzayA9IERCVE9TUiB8IERSVE9TUiB8IERTRVNSIHwgREJPU1I7CiAKIAlESVNSID0gZGlzcjsKLQlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewotCQljaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgSU1YX0RNQV9DSEFOTkVMUzsgaSsrKSB7CisJCWNoYW5uZWwgPSAmaW14X2RtYV9jaGFubmVsc1tpXTsKIAotCQlpZiAoIChlcnJfbWFzayAmIDE8PGkpICYmIGNoYW5uZWwtPm5hbWUgJiYgY2hhbm5lbC0+ZXJyX2hhbmRsZXIpIHsKKwkJaWYgKChlcnJfbWFzayAmIDEgPDwgaSkgJiYgY2hhbm5lbC0+bmFtZQorCQkgICAgJiYgY2hhbm5lbC0+ZXJyX2hhbmRsZXIpIHsKIAkJCWNoYW5uZWwtPmVycl9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEsIHJlZ3MpOwogCQkJY29udGludWU7CiAJCX0KIAorCQlpbXhfZG1hX2NoYW5uZWxzW2ldLnNnID0gTlVMTDsKKwogCQlpZiAoREJUT1NSICYgKDEgPDwgaSkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiQnVyc3QgdGltZW91dCBvbiBjaGFubmVsICVkICglcylcbiIsCkBAIC0xNDEsMTcgKzUwNCwyNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlycXJldHVybl90Ci1kbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaSwgZGlzciA9IERJU1I7CiAKKwlwcl9kZWJ1ZygiaW14ZG1hOiBkbWFfaXJxX2hhbmRsZXIgY2FsbGVkLCBkaXNyPTB4JTA4eFxuIiwKKwkJICAgICBkaXNyKTsKKwogCURJU1IgPSBkaXNyOwotCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgewogCQlpZiAoZGlzciAmICgxIDw8IGkpKSB7Ci0JCQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwgPSAmZG1hX2NoYW5uZWxzW2ldOwotCQkJaWYgKGNoYW5uZWwtPm5hbWUgJiYgY2hhbm5lbC0+aXJxX2hhbmRsZXIpIHsKLQkJCQljaGFubmVsLT5pcnFfaGFuZGxlcihpLCBjaGFubmVsLT5kYXRhLCByZWdzKTsKKwkJCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmNoYW5uZWwgPSAmaW14X2RtYV9jaGFubmVsc1tpXTsKKwkJCWlmIChjaGFubmVsLT5uYW1lKSB7CisJCQkJaWYgKGlteF9kbWFfc2dfbmV4dChpLCBDTlRSKGkpKSkgeworCQkJCQlDQ1IoaSkgJj0gfkNDUl9DRU47CisJCQkJCW1iKCk7CisJCQkJCUNDUihpKSB8PSBDQ1JfQ0VOOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChjaGFubmVsLT5pcnFfaGFuZGxlcikKKwkJCQkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksCisJCQkJCQkJY2hhbm5lbC0+ZGF0YSwgcmVncyk7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgpAQCAtMTY1LDEwICs1MzgsMTAgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1pbXhfZG1hX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGlteF9kbWFfaW5pdCh2b2lkKQogewogCWludCByZXQ7CisJaW50IGk7CiAKIAkvKiByZXNldCBETUEgbW9kdWxlICovCiAJRENSID0gRENSX0RSU1Q7CkBAIC0xODksMTUgKzU2MiwyNyBAQAogCURDUiA9IERDUl9ERU47CiAKIAkvKiBjbGVhciBhbGwgaW50ZXJydXB0cyAqLwotCURJU1IgPSAweDNmZjsKKwlESVNSID0gKDEgPDwgSU1YX0RNQV9DSEFOTkVMUykgLSAxOwogCiAJLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlESU1SID0gMDsKKwlESU1SID0gKDEgPDwgSU1YX0RNQV9DSEFOTkVMUykgLSAxOworCisJZm9yIChpID0gMDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgeworCQlpbXhfZG1hX2NoYW5uZWxzW2ldLnNnID0gTlVMTDsKKwkJaW14X2RtYV9jaGFubmVsc1tpXS5kbWFfbnVtID0gaTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQogCiBhcmNoX2luaXRjYWxsKGlteF9kbWFfaW5pdCk7CiAKLUVYUE9SVF9TWU1CT0woaW14X3JlcXVlc3RfZG1hKTsKLUVYUE9SVF9TWU1CT0woaW14X2ZyZWVfZG1hKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9zZXR1cF9zaW5nbGUpOworRVhQT1JUX1NZTUJPTChpbXhfZG1hX3NldHVwX3NnKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9zZXR1cF9oYW5kbGVycyk7CitFWFBPUlRfU1lNQk9MKGlteF9kbWFfZW5hYmxlKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9kaXNhYmxlKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9mcmVlKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8pOworRVhQT1JUX1NZTUJPTChpbXhfZG1hX2NoYW5uZWxzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYwppbmRleCAzNzYxM2FkNi4uMTJlYTU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KIAogdm9pZCBpbXhfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCiB7CkBAIC0xNzUsNjIgKzE3NiwyNCBAQAogCX0sCiB9OwogCitzdGF0aWMgdTY0IGlteG1tbWNfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X21tY19kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImlteC1tbWMiLAogCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmaW14bW1tY19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF9tbWNfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBpbXhfbW1jX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgwMDIwNjAwMCwKLQkJLmVuZAk9IDB4MDAyMDYwRkYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9SWCksCi0JCS5lbmQJPSAoVUFSVDFfTUlOVF9SWCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9UWCksCi0JCS5lbmQJPSAoVUFSVDFfTUlOVF9UWCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpbXgtdWFydCIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF91YXJ0MV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGlteF91YXJ0MV9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF91YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4MDAyMDcwMDAsCi0JCS5lbmQJPSAweDAwMjA3MEZGLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfUlgpLAotCQkuZW5kCT0gKFVBUlQyX01JTlRfUlgpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfVFgpLAotCQkuZW5kCT0gKFVBUlQyX01JTlRfVFgpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3VhcnQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaW14LXVhcnQiLAotCS5pZAkJPSAxLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbXhfdWFydDJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBpbXhfdWFydDJfcmVzb3VyY2VzLAotfTsKK3ZvaWQgX19pbml0IGlteF9zZXRfbW1jX2luZm8oc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhICppbmZvKQoreworCWlteF9tbWNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKK30KK0VYUE9SVF9TWU1CT0woaW14X3NldF9tbWNfaW5mbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvIGlteF9mYl9pbmZvOwogCkBAIC0yNzAsOCArMjMzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmaW14X21tY19kZXZpY2UsCiAJJmlteGZiX2RldmljZSwKLQkmaW14X3VhcnQxX2RldmljZSwKLQkmaW14X3VhcnQyX2RldmljZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9pcnEuYwppbmRleCBlZWI4YTZkLi5hNWRlNWYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pcnEuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiBpbXhfZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJREVCVUdfSVJRKCIlczogaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7Ci0JSVNSKElSUV9UT19SRUcoaXJxKSkgfD0gMSA8PCAoKGlycSAtIElSUV9HUElPQSgwKSkgJSAzMik7CisJSVNSKElSUV9UT19SRUcoaXJxKSkgPSAxIDw8ICgoaXJxIC0gSVJRX0dQSU9BKDApKSAlIDMyKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L214MWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbXgxYWRzLmMKaW5kZXggOGFiMWIwNC4uZGE4OTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbXgxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbXgxYWRzLmMKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCkBAIC00NywxNiArNDksMTA2IEBACiAJLnJlc291cmNlCT0gY3M4OXgwX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHgwMDIwNjAwMCwKKwkJLmVuZAk9IDB4MDAyMDYwRkYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9SWCksCisJCS5lbmQJPSAoVUFSVDFfTUlOVF9SWCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9UWCksCisJCS5lbmQJPSAoVUFSVDFfTUlOVF9UWCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDFfZGV2aWNlID0geworCS5uYW1lCQk9ICJpbXgtdWFydCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF91YXJ0MV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGlteF91YXJ0MV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdWFydF9wZGF0YSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF91YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4MDAyMDcwMDAsCisJCS5lbmQJPSAweDAwMjA3MEZGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfUlgpLAorCQkuZW5kCT0gKFVBUlQyX01JTlRfUlgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfVFgpLAorCQkuZW5kCT0gKFVBUlQyX01JTlRfVFgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3VhcnQyX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaW14LXVhcnQiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbXhfdWFydDJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBpbXhfdWFydDJfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnVhcnRfcGRhdGEsCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZjczg5eDBfZGV2aWNlLAorCSZpbXhfdWFydDFfZGV2aWNlLAorCSZpbXhfdWFydDJfZGV2aWNlLAogfTsKIAorI2lmZGVmIENPTkZJR19NTUNfSU1YCitzdGF0aWMgaW50IG14MWFkc19tbWNfY2FyZF9wcmVzZW50KHZvaWQpCit7CisJLyogTU1DL1NEIENhcmQgRGV0ZWN0IGlzIFBCIDIwIG9uIE1YMUFEUyBWMS4wLjcgKi8KKwlyZXR1cm4gKFNTUigxKSAmICgxIDw8IDIwKSA/IDAgOiAxKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBteDFhZHNfbW1jX2luZm8gPSB7CisgICAgICAgLmNhcmRfcHJlc2VudCA9IG14MWFkc19tbWNfY2FyZF9wcmVzZW50LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQKIG14MWFkc19pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0xFRFMKIAlpbXhfZ3Bpb19tb2RlKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IDIpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX01NQ19JTVgKKwkvKiBTRC9NTUMgY2FyZCBkZXRlY3QgKi8KKwlpbXhfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCBHUElPX0dJVVMgfCBHUElPX0lOIHwgMjApOworCWlteF9zZXRfbW1jX2luZm8oJm14MWFkc19tbWNfaW5mbyk7CisjZW5kaWYKKworCWlteF9ncGlvX21vZGUoUEM5X1BGX1VBUlQxX0NUUyk7CisJaW14X2dwaW9fbW9kZShQQzEwX1BGX1VBUlQxX1JUUyk7CisJaW14X2dwaW9fbW9kZShQQzExX1BGX1VBUlQxX1RYRCk7CisJaW14X2dwaW9fbW9kZShQQzEyX1BGX1VBUlQxX1JYRCk7CisKKwlpbXhfZ3Bpb19tb2RlKFBCMjhfUEZfVUFSVDJfQ1RTKTsKKwlpbXhfZ3Bpb19tb2RlKFBCMjlfUEZfVUFSVDJfUlRTKTsKKwlpbXhfZ3Bpb19tb2RlKFBCMzBfUEZfVUFSVDJfVFhEKTsKKwlpbXhfZ3Bpb19tb2RlKFBCMzFfUEZfVUFSVDJfUlhEKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQogCkBAIC02OSw3ICsxNjEsNyBAQAogTUFDSElORV9TVEFSVChNWDFBRFMsICJNb3Rvcm9sYSBNWDFBRFMiKQogCS8qIE1haW50YWluZXI6IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXggKi8KIAkucGh5c19pbwk9IDB4MDAyMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgweGUwMjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmlvX3BnX29mZnN0CT0gKCgweGUwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHgwODAwMDEwMCwKIAkubWFwX2lvCQk9IG14MWFkc19tYXBfaW8sCiAJLmluaXRfaXJxCT0gaW14X2luaXRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggYTA3MjRmMi4uOWY1NWY1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCkBAIC0yMzIsOCArMjMyLDYgQEAKIAlmb3IgKGkgPSBJUlFfUElDX1NUQVJUOyBpIDw9IElSUV9QSUNfRU5EOyBpKyspIHsKIAkJaWYgKGkgPT0gMTEpCiAJCQlpID0gMjI7Ci0JCWlmIChpID09IElSUV9DUF9DUFBMRElOVCkKLQkJCWkrKzsKIAkJaWYgKGkgPT0gMjkpCiAJCQlicmVhazsKIAkJc2V0X2lycV9jaGlwKGksICZwaWNfY2hpcCk7CkBAIC0yNTksOCArMjU3LDcgQEAKIAkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CiAJfQogCi0Jc2V0X2lycV9oYW5kbGVyKElSUV9DUF9DUFBMRElOVCwgc2ljX2hhbmRsZV9pcnEpOwotCXBpY191bm1hc2tfaXJxKElSUV9DUF9DUFBMRElOVCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0NQX0NQUExESU5ULCBzaWNfaGFuZGxlX2lycSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2NvcmUuYwppbmRleCAwOTJlZTEyLi5hZmZkMWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9jb3JlLmMKQEAgLTE3OCw4ICsxNzgsMTIgQEAKIAogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmludHJfcmVnID0gSVhQMjNYWF9JTlRSX0VOMSArIChpcnEgLyAzMik7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaW50cl9yZWc7CiAKKwlpZiAoaXJxID49IDU2KQorCQlpcnEgKz0gODsKKworCWludHJfcmVnID0gSVhQMjNYWF9JTlRSX0VOMSArIChpcnEgLyAzMik7CiAJKmludHJfcmVnICY9IH4oMSA8PCAoaXJxICUgMzIpKTsKIH0KIApAQCAtMTk5LDE3ICsyMDMsMjUgQEAKICAqLwogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfbGV2ZWxfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaW50cl9yZWcgPSBJWFAyM1hYX0lOVFJfRU4xICsgKGlycSAvIDMyKTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppbnRyX3JlZzsKIAogCWl4cDIzeHhfaXJxX2FjayhpcnEpOwogCisJaWYgKGlycSA+PSA1NikKKwkJaXJxICs9IDg7CisKKwlpbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOwogCSppbnRyX3JlZyB8PSAoMSA8PCAoaXJxICUgMzIpKTsKIH0KIAogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfZWRnZV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmludHJfcmVnOwogCisJaWYgKGlycSA+PSA1NikKKwkJaXJxICs9IDg7CisKKwlpbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOwogCSppbnRyX3JlZyB8PSAoMSA8PCAoaXJxICUgMzIpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2VzcHJlc3NvLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYwppbmRleCAyMzI3Yzk3Li5iZjY4OGMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYwpAQCAtNDQsNiArNDQsMTUgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KIAorc3RhdGljIGludCBfX2luaXQgZXNwcmVzc29fcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19lc3ByZXNzbygpKQorCQlpeHAyM3h4X3BjaV9zbGF2ZV9pbml0KCk7CisKKwlyZXR1cm4gMDsKK307CitzdWJzeXNfaW5pdGNhbGwoZXNwcmVzc29fcGNpX2luaXQpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgZXNwcmVzc29faW5pdCh2b2lkKQogewogCXBoeXNtYXBfY29uZmlndXJlKDB4OTAwMDAwMDAsIDB4MDIwMDAwMDAsIDIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3BjaS5jCmluZGV4IDUzMzBhZDcuLmFjNzJmOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvcGNpLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9faW5pdCBpeHAyM3h4X3BjaV9wcmVpbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaXhwMjN4eF9wY2lfY29tbW9uX2luaXQodm9pZCkKIHsKICNpZmRlZiBfX0FSTUVCX18KIAkqSVhQMjNYWF9QQ0lfQ09OVFJPTCB8PSAweDIwMDAwOwkvKiBzZXQgSS9PIHN3YXBwaW5nICovCkBAIC0yMTksNyArMjE5LDE4IEBACiAJCSpJWFAyM1hYX1BDSV9DUFBfQUREUl9CSVRTICY9IH4oMSA8PCAxKTsKIAl9IGVsc2UgewogCQkqSVhQMjNYWF9QQ0lfQ1BQX0FERFJfQklUUyB8PSAoMSA8PCAxKTsKKworCQkvKgorCQkgKiBFbmFibGUgY29oZXJlbmN5IG9uIEEyIHNpbGljb24uCisJCSAqLworCQlpZiAoYXJjaF9pc19jb2hlcmVudCgpKQorCQkJKklYUDIzWFhfQ1BQMlhTSV9DVVJSX1hGRVJfUkVHMyAmPSB+SVhQMjNYWF9DUFAyWFNJX0NPSF9PRkY7CiAJfQorfQorCit2b2lkIF9faW5pdCBpeHAyM3h4X3BjaV9wcmVpbml0KHZvaWQpCit7CisJaXhwMjN4eF9wY2lfY29tbW9uX2luaXQoKTsKIAogCWhvb2tfZmF1bHRfY29kZSgxNis2LCBpeHAyM3h4X3BjaV9hYm9ydF9oYW5kbGVyLCBTSUdCVVMsCiAJCQkiUENJIGNvbmZpZyBjeWNsZSB0byBub24tZXhpc3RlbnQgZGV2aWNlIik7CkBAIC0yNzMsMyArMjg0LDggQEAKIAogCXJldHVybiAxOwogfQorCit2b2lkIGl4cDIzeHhfcGNpX3NsYXZlX2luaXQodm9pZCkKK3sKKwlpeHAyM3h4X3BjaV9jb21tb25faW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKaW5kZXggNWJmNTBhMi4uM2IyM2Y0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCkBAIC0xMSw2ICsxMSw3IEBACiBjb25maWcgTUFDSF9OU0xVMgogCWJvb2wKIAlwcm9tcHQgIkxpbmtzeXMgTlNMVTIiCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IExpbmtzeXMncwogCSAgTlNMVTIgTkFTIGRldmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKQEAgLTE4LDYgKzE5LDcgQEAKIAogY29uZmlnIEFSQ0hfQVZJTEEKIAlib29sICJBdmlsYSIKKwlzZWxlY3QgUENJCiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEdhdGV3b3JrcwogCSAgQXZpbGEgTmV0d29yayBQbGF0Zm9ybS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKQEAgLTI1LDYgKzI3LDcgQEAKIAogY29uZmlnIEFSQ0hfQURJX0NPWU9URQogCWJvb2wgIkNveW90ZSIKKwlzZWxlY3QgUENJCiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEFESSAKIAkgIEVuZ2luZWVyaW5nIENveW90ZSBHYXRld2F5IFJlZmVyZW5jZSBQbGF0Zm9ybS4gRm9yIG1vcmUKQEAgLTMyLDYgKzM1LDcgQEAKIAogY29uZmlnIEFSQ0hfSVhEUDQyNQogCWJvb2wgIklYRFA0MjUiCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IEludGVsJ3MgCiAJICBJWERQNDI1IERldmVsb3BtZW50IFBsYXRmb3JtIChBbHNvIGtub3duIGFzIFJpY2hmaWVsZCkuICAKQEAgLTM5LDYgKzQzLDcgQEAKIAogY29uZmlnIE1BQ0hfSVhEUEc0MjUKIAlib29sICJJWERQRzQyNSIKKwlzZWxlY3QgUENJCiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgSW50ZWwncwogCSAgSVhEUEc0MjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKEFsc28ga25vd24gYXMgTW9udGFqYWRlKS4KQEAgLTQ2LDYgKzUxLDcgQEAKIAogY29uZmlnIE1BQ0hfSVhEUDQ2NQogCWJvb2wgIklYRFA0NjUiCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IEludGVsJ3MKIAkgIElYRFA0NjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKEFsc28ga25vd24gYXMgQk1QKS4KQEAgLTcyLDYgKzc4LDcgQEAKIGNvbmZpZyBNQUNIX05BUzEwMEQKIAlib29sCiAJcHJvbXB0ICJOQVMxMDBEIgorCXNlbGVjdCBQQ0kKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCBJb21lZ2EncwogCSAgTkFTIDEwMGQgZGV2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHBsYXRmb3JtLApAQCAtOTYsNiArMTAzLDcgQEAKIGNvbmZpZyBNQUNIX0dUV1g1NzE1CiAJYm9vbCAiR2VtdGVrIFdYNTcxNSAoTGlua3N5cyBXUlY1NEcpIgogCWRlcGVuZHMgb24gQVJDSF9JWFA0WFgKKwlzZWxlY3QgUENJCiAJaGVscAogCQlUaGlzIGJvYXJkIGlzIGN1cnJlbnRseSBpbnNpZGUgdGhlIExpbmtzeXMgV1JWNTRHIEdhdGV3YXlzLgogCkBAIC0xMTAsMTEgKzExOCwxNiBAQAogCQkiSGlnaCBTcGVlZCIgVUFSVCBpcyBuL2MgKGFzIGZhciBhcyBJIGNhbiB0ZWxsKQogCQkyMCBQaW4gQVJNL1hzY2FsZSBKVEFHIGludGVyZmFjZSBvbiBKMgogCi0KIGNvbW1lbnQgIklYUDR4eCBPcHRpb25zIgogCitjb25maWcgRE1BQk9VTkNFCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gUENJCisKIGNvbmZpZyBJWFA0WFhfSU5ESVJFQ1RfUENJCiAJYm9vbCAiVXNlIGluZGlyZWN0IFBDSSBtZW1vcnkgYWNjZXNzIgorCWRlcGVuZHMgb24gUENJCiAJaGVscAogICAgICAgICAgIElYUDR4eCBwcm92aWRlcyB0d28gbWV0aG9kcyBvZiBhY2Nlc3NpbmcgUENJIG1lbW9yeSBzcGFjZToKIApAQCAtMTI4LDcgKzE0MSw3IEBACiAgICAgICAgICAgMikgSWYgPiA2NE1CIG9mIG1lbW9yeSBzcGFjZSBpcyByZXF1aXJlZCwgdGhlIElYUDR4eCBjYW4gYmUgCiAJICAgICBjb25maWd1cmVkIHRvIHVzZSBpbmRpcmVjdCByZWdpc3RlcnMgdG8gYWNjZXNzIFBDSSBUaGlzIGFsbG93cyAKIAkgICAgIGZvciB1cCB0byAxMjhNQiAoMHg0ODAwMDAwMCB0byAweDRmZmZmZmZmKSBvZiBtZW1vcnkgb24gdGhlIGJ1cy4gCi0JICAgICBUaGUgZGlzYWR2YW50YWRnZSBvZiB0aGlzIGlzIHRoYXQgZXZlcnkgUENJIGFjY2VzcyByZXF1aXJlcyAKKwkgICAgIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcyB0aGF0IGV2ZXJ5IFBDSSBhY2Nlc3MgcmVxdWlyZXMgCiAJICAgICB0aHJlZSBsb2NhbCByZWdpc3RlciBhY2Nlc3NlcyBwbHVzIGEgc3BpbmxvY2ssIGJ1dCBpbiBzb21lIAogCSAgICAgY2FzZXMgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBhY2NlcHRhYmxlLiBJbiBhZGRpdGlvbiwgeW91IGNhbm5vdCAKIAkgICAgIG1tYXAoKSBQQ0kgZGV2aWNlcyBpbiB0aGlzIGNhc2UgZHVlIHRvIHRoZSBpbmRpcmVjdCBuYXR1cmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKaW5kZXggMDQ3MTA0NC4uNWE0YWFhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKQEAgLTIsOCArMiw5IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwogCi1vYmoteQkrPSBjb21tb24ubyBjb21tb24tcGNpLm8gCitvYmoteQkrPSBjb21tb24ubwogCitvYmotJChDT05GSUdfUENJKQkJKz0gY29tbW9uLXBjaS5vCiBvYmotJChDT05GSUdfQVJDSF9JWERQNFhYKQkrPSBpeGRwNDI1LXBjaS5vIGl4ZHA0MjUtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfSVhEUEc0MjUpCSs9IGl4ZHBnNDI1LXBjaS5vIGNveW90ZS1zZXR1cC5vCiBvYmotJChDT05GSUdfQVJDSF9BRElfQ09ZT1RFKQkrPSBjb3lvdGUtcGNpLm8gY295b3RlLXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggYTA4ODhlMS4uMDBiNzYxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTkxLDcgKzkxLDcgQEAKIC8qCiAgKiBJUlEgLT4gR1BJTyBtYXBwaW5nIHRhYmxlCiAgKi8KLXN0YXRpYyBjaGFyIGlycTJncGlvWzMyXSA9IHsKK3N0YXRpYyBzaWduZWQgY2hhciBpcnEyZ3Bpb1szMl0gPSB7CiAJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgIDAsICAxLAogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAktMSwgLTEsIC0xLCAgMiwgIDMsICA0LCAgNSwgIDYsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggODZhMGYwZC4uZjhkNzE2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtNjksMTIgKzY5LDYgQEAKIAkgIFN1cHBvcnQgZm9yIFZvaWNlYmx1ZSBHU00vVm9JUCBnYXRld2F5LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlCiAJICBzdWNoIGEgYm9hcmQuCiAKLWNvbmZpZyBNQUNIX05FVFNUQVIKLQlib29sICJOZXRTdGFyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVAxNVhYCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgTmV0U3RhciBQQlguIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaCBhIGJvYXJkLgotCiBjb25maWcgTUFDSF9PTUFQX1BBTE1URQogCWJvb2wgIlBhbG0gVHVuZ3N0ZW4gRSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTVYWApAQCAtODUsNiArNzksMjAgQEAKICAgICAgICAgICBpbmZvcm1hdGlvbnMuCiAgICAgICAgICAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoIGEgUERBLCBzYXkgTk8gb3RoZXJ3aXNlLgogCitjb25maWcgTUFDSF9OT0tJQTc3MAorCWJvb2wgIk5va2lhIDc3MCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBOb2tpYSA3NzAgSW50ZXJuZXQgVGFibGV0LiBTYXkgWSBoZXJlIGlmIHlvdQorCSAgaGF2ZSBzdWNoIGEgZGV2aWNlLgorCitjb25maWcgTUFDSF9BTVNfREVMVEEKKwlib29sICJBbXN0cmFkIEUzIChEZWx0YSkiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1WFgKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgQW1zdHJhZCBFMyAoY29kZW5hbWUgRGVsdGEpIHZpZGVvcGhvbmUuIFNheSBZIGhlcmUKKwkgIGlmIHlvdSBoYXZlIHN1Y2ggYSBkZXZpY2UuCisKIGNvbmZpZyBNQUNIX09NQVBfR0VORVJJQwogCWJvb2wgIkdlbmVyaWMgT01BUCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCmluZGV4IGIwYjAwMTUuLjllYTcxOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQpAQCAtMyw3ICszLDEzIEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlvLm8gaWQubyBjbG9jay5vIGlycS5vIHRpbWUubyBtdXgubyBzZXJpYWwubyBkZXZpY2VzLm8KK29iai15IDo9IGlvLm8gaWQubyBjbG9jay5vIGlycS5vIG11eC5vIHNlcmlhbC5vIGRldmljZXMubworCitvYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCQkrPSB0aW1lLm8KKworIyBQb3dlciBNYW5hZ2VtZW50CitvYmotJChDT05GSUdfUE0pICs9IHBtLm8gc2xlZXAubworCiBsZWQteSA6PSBsZWRzLm8KIAogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CkBAIC0xNCw4ICsyMCw5IEBACiBvYmotJChDT05GSUdfTUFDSF9PTUFQX09TSykJCSs9IGJvYXJkLW9zay5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0gzKQkJKz0gYm9hcmQtaDMubwogb2JqLSQoQ09ORklHX01BQ0hfVk9JQ0VCTFVFKQkJKz0gYm9hcmQtdm9pY2VibHVlLm8KLW9iai0kKENPTkZJR19NQUNIX05FVFNUQVIpCQkrPSBib2FyZC1uZXRzdGFyLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfUEFMTVRFKQkJKz0gYm9hcmQtcGFsbXRlLm8KK29iai0kKENPTkZJR19NQUNIX05PS0lBNzcwKQkJKz0gYm9hcmQtbm9raWE3NzAubworb2JqLSQoQ09ORklHX01BQ0hfQU1TX0RFTFRBKQkJKz0gYm9hcmQtYW1zLWRlbHRhLm8KIAogaWZlcSAoJChDT05GSUdfQVJDSF9PTUFQMTVYWCkseSkKICMgSW5ub3ZhdG9yLTE1MTAgRlBHQQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3OGYwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCisgKgorICogTW9kaWZpZWQgZnJvbSBib2FyZC1nZW5lcmljLmMKKyAqCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0cyBmb3IgdGhlIEFtc3RyYWQgRTMgKGNvZGVuYW1lIERlbHRhKSB2aWRlb3Bob25lCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEpvbmF0aGFuIE1jRG93ZWxsIDxub29kbGVzQGVhcnRoLmxpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQtYW1zLWRlbHRhLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisKK3N0YXRpYyB1OCBhbXNfZGVsdGFfbGF0Y2gxX3JlZzsKK3N0YXRpYyB1MTYgYW1zX2RlbHRhX2xhdGNoMl9yZWc7CisKK3ZvaWQgYW1zX2RlbHRhX2xhdGNoMV93cml0ZSh1OCBtYXNrLCB1OCB2YWx1ZSkKK3sKKwlhbXNfZGVsdGFfbGF0Y2gxX3JlZyAmPSB+bWFzazsKKwlhbXNfZGVsdGFfbGF0Y2gxX3JlZyB8PSB2YWx1ZTsKKwkqKHZvbGF0aWxlIF9fdTggKikgQU1TX0RFTFRBX0xBVENIMV9WSVJUID0gYW1zX2RlbHRhX2xhdGNoMV9yZWc7Cit9CisKK3ZvaWQgYW1zX2RlbHRhX2xhdGNoMl93cml0ZSh1MTYgbWFzaywgdTE2IHZhbHVlKQoreworCWFtc19kZWx0YV9sYXRjaDJfcmVnICY9IH5tYXNrOworCWFtc19kZWx0YV9sYXRjaDJfcmVnIHw9IHZhbHVlOworCSoodm9sYXRpbGUgX191MTYgKikgQU1TX0RFTFRBX0xBVENIMl9WSVJUID0gYW1zX2RlbHRhX2xhdGNoMl9yZWc7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbXNfZGVsdGFfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwMV9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFtc19kZWx0YV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvLyBBTVNfREVMVEFfTEFUQ0gxCisJeworCQkudmlydHVhbAk9IEFNU19ERUxUQV9MQVRDSDFfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFNU19ERUxUQV9MQVRDSDFfUEhZUyksCisJCS5sZW5ndGgJCT0gMHgwMTAwMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwkvLyBBTVNfREVMVEFfTEFUQ0gyCisJeworCQkudmlydHVhbAk9IEFNU19ERUxUQV9MQVRDSDJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFNU19ERUxUQV9MQVRDSDJfUEhZUyksCisJCS5sZW5ndGgJCT0gMHgwMTAwMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwkvLyBBTVNfREVMVEFfTU9ERU0KKwl7CisJCS52aXJ0dWFsCT0gQU1TX0RFTFRBX01PREVNX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBTVNfREVMVEFfTU9ERU1fUEhZUyksCisJCS5sZW5ndGgJCT0gMHgwMTAwMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGFtc19kZWx0YV91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGFtc19kZWx0YV9jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZhbXNfZGVsdGFfdWFydF9jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbXNfZGVsdGFfaW5pdCh2b2lkKQoreworCWlvdGFibGVfaW5pdChhbXNfZGVsdGFfaW9fZGVzYywgQVJSQVlfU0laRShhbXNfZGVsdGFfaW9fZGVzYykpOworCisJb21hcF9ib2FyZF9jb25maWcgPSBhbXNfZGVsdGFfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGFtc19kZWx0YV9jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKKworCS8qIENsZWFyIGxhdGNoMiAoTkFORCwgTENELCBtb2RlbSBlbmFibGUpICovCisJYW1zX2RlbHRhX2xhdGNoMl93cml0ZSh+MCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbXNfZGVsdGFfbWFwX2lvKHZvaWQpCit7CisJb21hcDFfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKEFNU19ERUxUQSwgIkFtc3RyYWQgRTMgKERlbHRhKSIpCisJLyogTWFpbnRhaW5lcjogSm9uYXRoYW4gTWNEb3dlbGwgPG5vb2RsZXNAZWFydGgubGk+ICovCisJLnBoeXNfaW8JPSAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCisJLm1hcF9pbwkJPSBhbXNfZGVsdGFfbWFwX2lvLAorCS5pbml0X2lycQk9IGFtc19kZWx0YV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gYW1zX2RlbHRhX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKKworRVhQT1JUX1NZTUJPTChhbXNfZGVsdGFfbGF0Y2gxX3dyaXRlKTsKK0VYUE9SVF9TWU1CT0woYW1zX2RlbHRhX2xhdGNoMl93cml0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IGExNzdlNzguLjMzZDAxYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCkBAIC04OCw3ICs4OCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlnZW5lcmljX2NvbmZpZ1swXS5kYXRhID0gJmdlbmVyaWMxNTEwX3VzYl9jb25maWc7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKaW5kZXggODlmMGNjNy4uY2QzYTA2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwpAQCAtMjQsNyArMjQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM1LDEyICszNyw1NSBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAtYWxzYS5oPgogCiBleHRlcm4gaW50IG9tYXBfZ3Bpb19pbml0KHZvaWQpOwogCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDJfcGFydGl0aW9uc1tdID0geworc3RhdGljIGludCBoMl9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0xFRlQpLAorCUtFWSgwLCAxLCBLRVlfUklHSFQpLAorCUtFWSgwLCAyLCBLRVlfMyksCisJS0VZKDAsIDMsIEtFWV9GMTApLAorCUtFWSgwLCA0LCBLRVlfRjUpLAorCUtFWSgwLCA1LCBLRVlfOSksCisJS0VZKDEsIDAsIEtFWV9ET1dOKSwKKwlLRVkoMSwgMSwgS0VZX1VQKSwKKwlLRVkoMSwgMiwgS0VZXzIpLAorCUtFWSgxLCAzLCBLRVlfRjkpLAorCUtFWSgxLCA0LCBLRVlfRjcpLAorCUtFWSgxLCA1LCBLRVlfMCksCisJS0VZKDIsIDAsIEtFWV9FTlRFUiksCisJS0VZKDIsIDEsIEtFWV82KSwKKwlLRVkoMiwgMiwgS0VZXzEpLAorCUtFWSgyLCAzLCBLRVlfRjIpLAorCUtFWSgyLCA0LCBLRVlfRjYpLAorCUtFWSgyLCA1LCBLRVlfSE9NRSksCisJS0VZKDMsIDAsIEtFWV84KSwKKwlLRVkoMywgMSwgS0VZXzUpLAorCUtFWSgzLCAyLCBLRVlfRjEyKSwKKwlLRVkoMywgMywgS0VZX0YzKSwKKwlLRVkoMywgNCwgS0VZX0Y4KSwKKwlLRVkoMywgNSwgS0VZX0VORCksCisJS0VZKDQsIDAsIEtFWV83KSwKKwlLRVkoNCwgMSwgS0VZXzQpLAorCUtFWSg0LCAyLCBLRVlfRjExKSwKKwlLRVkoNCwgMywgS0VZX0YxKSwKKwlLRVkoNCwgNCwgS0VZX0Y0KSwKKwlLRVkoNCwgNSwgS0VZX0VTQyksCisJS0VZKDUsIDAsIEtFWV9GMTMpLAorCUtFWSg1LCAxLCBLRVlfRjE0KSwKKwlLRVkoNSwgMiwgS0VZX0YxNSksCisJS0VZKDUsIDMsIEtFWV9GMTYpLAorCUtFWSg1LCA0LCBLRVlfU0xFRVApLAorCTAKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBoMl9ub3JfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CiAJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLApAQCAtNzEsMjYgKzExNiwyNiBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBoMl9mbGFzaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGgyX25vcl9kYXRhID0gewogCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAogCS53aWR0aAkJPSAyLAotCS5wYXJ0cwkJPSBoMl9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDJfcGFydGl0aW9ucyksCisJLnBhcnRzCQk9IGgyX25vcl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDJfbm9yX3BhcnRpdGlvbnMpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoMl9mbGFzaF9yZXNvdXJjZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDJfbm9yX3Jlc291cmNlID0gewogCS8qIFRoaXMgaXMgb24gQ1MzLCB3aGVyZXZlciBpdCdzIG1hcHBlZCAqLwogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX2ZsYXNoX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX25vcl9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmgyX2ZsYXNoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmgyX25vcl9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZoMl9mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmaDJfbm9yX3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoMl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CkBAIC0xMTMsOSArMTU4LDExOSBAQAogCS5yZXNvdXJjZQk9IGgyX3NtYzkxeF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGgyX2twX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gSU5UX0tFWUJPQVJELAorCQkuZW5kCT0gSU5UX0tFWUJPQVJELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgaDJfa3BfZGF0YSA9IHsKKwkucm93cwk9IDgsCisJLmNvbHMJPSA4LAorCS5rZXltYXAgPSBoMl9rZXltYXAsCisJLnJlcAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoMl9rcF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAta2V5cGFkIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmgyX2twX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaDJfa3BfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoMl9rcF9yZXNvdXJjZXMsCit9OworCisjZGVmaW5lIEgyX0lSREFfRklSU0VMX0dQSU9fUElOCTE3CisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0lSX01PRFVMRSkKK3N0YXRpYyBpbnQgaDJfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgJiBJUl9TSVJNT0RFKQorCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4sIDApOworCWVsc2UgICAgLyogTUlSL0ZJUiAqLworCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4sIDEpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBvbWFwX2lyZGFfY29uZmlnIGgyX2lyZGFfZGF0YSA9IHsKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX01JUk1PREUgfCBJUl9GSVJNT0RFLAorCS5yeF9jaGFubmVsCQk9IE9NQVBfRE1BX1VBUlQzX1JYLAorCS50eF9jaGFubmVsCQk9IE9NQVBfRE1BX1VBUlQzX1RYLAorCS5kZXN0X3N0YXJ0CQk9IFVBUlQzX1RIUiwKKwkuc3JjX3N0YXJ0CQk9IFVBUlQzX1JIUiwKKwkudHhfdHJpZ2dlcgkJPSAwLAorCS5yeF90cmlnZ2VyCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGgyX2lyZGFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTlRfVUFSVDMsCisJCS5lbmQJPSBJTlRfVUFSVDMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDJfaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBpcmRhIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaDJfaXJkYV9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGgyX2lyZGFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoMl9pcmRhX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxjZF9oMiIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgbWNic3BfcmVncyA9IHsKKwkuc3BjcjIgPSBGUkVFIHwgRlJTVCB8IEdSU1QgfCBYUlNUIHwgWElOVE0oMyksCisJLnNwY3IxID0gUklOVE0oMykgfCBSUlNULAorCS5yY3IyICA9IFJQSEFTRSB8IFJGUkxFTjIoT01BUF9NQ0JTUF9XT1JEXzgpIHwKKyAgICAgICAgICAgICAgICBSV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNikgfCBSREFURExZKDEpLAorCS5yY3IxICA9IFJGUkxFTjEoT01BUF9NQ0JTUF9XT1JEXzgpIHwgUldETEVOMShPTUFQX01DQlNQX1dPUkRfMTYpLAorCS54Y3IyICA9IFhQSEFTRSB8IFhGUkxFTjIoT01BUF9NQ0JTUF9XT1JEXzgpIHwKKyAgICAgICAgICAgICAgICBYV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNikgfCBYREFURExZKDEpIHwgWEZJRywKKwkueGNyMSAgPSBYRlJMRU4xKE9NQVBfTUNCU1BfV09SRF84KSB8IFhXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KSwKKwkuc3JncjEgPSBGV0lEKDE1KSwKKwkuc3JncjIgPSBHU1lOQyB8IENMS1NQIHwgRlNHTSB8IEZQRVIoMzEpLAorCisJLnBjcjAgID0gQ0xLWE0gfCBDTEtSTSB8IEZTWFAgfCBGU1JQIHwgQ0xLWFAgfCBDTEtSUCwKKwkvLy5wY3IwID0gQ0xLWFAgfCBDTEtSUCwgICAgICAgIC8qIG1jYnNwOiBzbGF2ZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Fsc2FfY29kZWNfY29uZmlnIGFsc2FfY29uZmlnID0geworCS5uYW1lICAgICAgICAgICAgICAgICAgID0gIkgyIFRTQzIxMDEiLAorCS5tY2JzcF9yZWdzX2Fsc2EgICAgICAgID0gJm1jYnNwX3JlZ3MsCisJLmNvZGVjX2NvbmZpZ3VyZV9kZXYgICAgPSBOVUxMLCAvLyB0c2MyMTAxX2NvbmZpZ3VyZSwKKwkuY29kZWNfc2V0X3NhbXBsZXJhdGUgICA9IE5VTEwsIC8vIHRzYzIxMDFfc2V0X3NhbXBsZXJhdGUsCisJLmNvZGVjX2Nsb2NrX3NldHVwICAgICAgPSBOVUxMLCAvLyB0c2MyMTAxX2Nsb2NrX3NldHVwLAorCS5jb2RlY19jbG9ja19vbiAgICAgICAgID0gTlVMTCwgLy8gdHNjMjEwMV9jbG9ja19vbiwKKwkuY29kZWNfY2xvY2tfb2ZmICAgICAgICA9IE5VTEwsIC8vIHRzYzIxMDFfY2xvY2tfb2ZmLAorCS5nZXRfZGVmYXVsdF9zYW1wbGVyYXRlID0gTlVMTCwgLy8gdHNjMjEwMV9nZXRfZGVmYXVsdF9zYW1wbGVyYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDJfbWNic3AxX2RldmljZSA9IHsKKwkubmFtZQk9ICJvbWFwX2Fsc2FfbWNic3AiLAorCS5pZAk9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYWxzYV9jb25maWcsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpoMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmaDJfZmxhc2hfZGV2aWNlLAorCSZoMl9ub3JfZGV2aWNlLAogCSZoMl9zbWM5MXhfZGV2aWNlLAorCSZoMl9pcmRhX2RldmljZSwKKwkmaDJfa3BfZGV2aWNlLAorCSZoMl9sY2RfZGV2aWNlLAorCSZoMl9tY2JzcDFfZGV2aWNlLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGgyX2luaXRfc21jOTF4KHZvaWQpCkBAIC0xNjQsNyArMzE5LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGgyX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJoMiIsCiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCkBAIC0xNzcsMTYgKzMzMSwzNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDJfaW5pdCh2b2lkKQogewotCS8qIE5PVEU6IHJldkMgYm9hcmRzIHN1cHBvcnQgTkFORC1ib290LCB3aGljaCBjYW4gcHV0IE5PUiBvbiBDUzJCCi0JICogYW5kIE5BTkQgKGVpdGhlciAxNmJpdCBvciA4Yml0KSBvbiBDUzMuCisJLyogSGVyZSB3ZSBhc3N1bWUgdGhlIE5PUiBib290IGNvbmZpZzogIE5PUiBvbiBDUzMgKHBvc3NpYmx5IHN3YXBwZWQKKwkgKiB0byBhZGRyZXNzIDAgYnkgYSBkaXAgc3dpdGNoKSwgTkFORCBvbiBDUzJCLiAgVGhlIE5BTkQgZHJpdmVyIHdpbGwKKwkgKiBub3RpY2Ugd2hldGhlciBhIE5BTkQgY2hpcCBpcyBlbmFibGVkIGF0IHByb2JlIHRpbWUuCisJICoKKwkgKiBGSVhNRSByZXZDIGJvYXJkcyAoYW5kIEgzKSBzdXBwb3J0IE5BTkQtYm9vdCwgd2l0aCBhIGRpcCBzd2l0Y2ggdG8KKwkgKiBwdXQgTk9SIG9uIENTMkIgYW5kIE5BTkQgKHdoaWNoIG9uIEgyIG1heSBiZSAxNmJpdCkgb24gQ1MzLiAgVHJ5CisJICogZGV0ZWN0aW5nIHRoYXQgaW4gY29kZSBoZXJlLCB0byBhdm9pZCBwcm9iaW5nIGV2ZXJ5IHBvc3NpYmxlIGZsYXNoCisJICogY29uZmlndXJhdGlvbi4uLgogCSAqLwotCWgyX2ZsYXNoX3Jlc291cmNlLmVuZCA9IGgyX2ZsYXNoX3Jlc291cmNlLnN0YXJ0ID0gb21hcF9jczNfcGh5cygpOwotCWgyX2ZsYXNoX3Jlc291cmNlLmVuZCArPSBTWl8zMk0gLSAxOworCWgyX25vcl9yZXNvdXJjZS5lbmQgPSBoMl9ub3JfcmVzb3VyY2Uuc3RhcnQgPSBvbWFwX2NzM19waHlzKCk7CisJaDJfbm9yX3Jlc291cmNlLmVuZCArPSBTWl8zMk0gLSAxOworCisJb21hcF9jZmdfcmVnKEwzXzE2MTBfRkxBU0hfQ1MyQl9PRSk7CisJb21hcF9jZmdfcmVnKE04XzE2MTBfRkxBU0hfQ1MyQl9XRSk7CiAKIAkvKiBNTUM6ICBjYXJkIGRldGVjdCBhbmQgV1AgKi8KIAkvLyBvbWFwX2NmZ19yZWcoVTE5X0FSTUlPMSk7CQkvKiBDRCAqLwogCW9tYXBfY2ZnX3JlZyhCQUxMT1VUX1Y4X0FSTUlPMyk7CS8qIFdQICovCiAKKwkvKiBJcmRhICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9JUikgfHwgZGVmaW5lZChDT05GSUdfT01BUF9JUl9NT0RVTEUpCisJb21hcF93cml0ZWwob21hcF9yZWFkbChGVU5DX01VWF9DVFJMX0EpIHwgNywgRlVOQ19NVVhfQ1RSTF9BKTsKKwlpZiAoIShvbWFwX3JlcXVlc3RfZ3BpbyhIMl9JUkRBX0ZJUlNFTF9HUElPX1BJTikpKSB7CisJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKEgyX0lSREFfRklSU0VMX0dQSU9fUElOLCAwKTsKKwkJaDJfaXJkYV9kYXRhLnRyYW5zY2VpdmVyX21vZGUgPSBoMl90cmFuc2NlaXZlcl9tb2RlOworCX0KKyNlbmRpZgorCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaDJfZGV2aWNlcywgQVJSQVlfU0laRShoMl9kZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDJfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCBkOWYzODYyLi40YjhkMGVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC0yMSw4ICsyMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTMzLDE1ICszNiw1OSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW9leHBhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAogZXh0ZXJuIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKTsKIAotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGgzX3BhcnRpdGlvbnNbXSA9IHsKK3N0YXRpYyBpbnQgaDNfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9MRUZUKSwKKwlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfRjEwKSwKKwlLRVkoMCwgNCwgS0VZX0Y1KSwKKwlLRVkoMCwgNSwgS0VZXzkpLAorCUtFWSgxLCAwLCBLRVlfRE9XTiksCisJS0VZKDEsIDEsIEtFWV9VUCksCisJS0VZKDEsIDIsIEtFWV8yKSwKKwlLRVkoMSwgMywgS0VZX0Y5KSwKKwlLRVkoMSwgNCwgS0VZX0Y3KSwKKwlLRVkoMSwgNSwgS0VZXzApLAorCUtFWSgyLCAwLCBLRVlfRU5URVIpLAorCUtFWSgyLCAxLCBLRVlfNiksCisJS0VZKDIsIDIsIEtFWV8xKSwKKwlLRVkoMiwgMywgS0VZX0YyKSwKKwlLRVkoMiwgNCwgS0VZX0Y2KSwKKwlLRVkoMiwgNSwgS0VZX0hPTUUpLAorCUtFWSgzLCAwLCBLRVlfOCksCisJS0VZKDMsIDEsIEtFWV81KSwKKwlLRVkoMywgMiwgS0VZX0YxMiksCisJS0VZKDMsIDMsIEtFWV9GMyksCisJS0VZKDMsIDQsIEtFWV9GOCksCisJS0VZKDMsIDUsIEtFWV9FTkQpLAorCUtFWSg0LCAwLCBLRVlfNyksCisJS0VZKDQsIDEsIEtFWV80KSwKKwlLRVkoNCwgMiwgS0VZX0YxMSksCisJS0VZKDQsIDMsIEtFWV9GMSksCisJS0VZKDQsIDQsIEtFWV9GNCksCisJS0VZKDQsIDUsIEtFWV9FU0MpLAorCUtFWSg1LCAwLCBLRVlfRjEzKSwKKwlLRVkoNSwgMSwgS0VZX0YxNCksCisJS0VZKDUsIDIsIEtFWV9GMTUpLAorCUtFWSg1LCAzLCBLRVlfRjE2KSwKKwlLRVkoNSwgNCwgS0VZX1NMRUVQKSwKKwkwCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CiAJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLApAQCAtNzIsMjYgKzExOSw4MCBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBoM19mbGFzaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG5vcl9kYXRhID0gewogCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAogCS53aWR0aAkJPSAyLAotCS5wYXJ0cwkJPSBoM19wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDNfcGFydGl0aW9ucyksCisJLnBhcnRzCQk9IG5vcl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobm9yX3BhcnRpdGlvbnMpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoM19mbGFzaF9yZXNvdXJjZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX3Jlc291cmNlID0gewogCS8qIFRoaXMgaXMgb24gQ1MzLCB3aGVyZXZlciBpdCdzIG1hcHBlZCAqLwogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZsYXNoX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcl9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmgzX2ZsYXNoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZoM19mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmbm9yX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5hbmRfcGFydGl0aW9uc1tdID0geworI2lmIDAKKwkvKiBSRVZJU0lUOiBlbmFibGUgdGhlc2UgcGFydGl0aW9ucyBpZiB5b3UgbWFrZSBOQU5EIEJPT1Qgd29yayAqLworCXsKKwkJLm5hbWUJCT0gInhsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IDY0ICogMTAyNCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMjU2ICogMTAyNCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gInBhcmFtcyIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSAxOTIgKiAxMDI0LAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDIgKiBTWl8xTSwKKwl9LAorI2VuZGlmCisJeworCQkubmFtZQkJPSAiZmlsZXN5c3RlbSIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sCit9OworCisvKiBkaXAgc3dpdGNoZXMgY29udHJvbCBOQU5EIGNoaXAgYWNjZXNzOiAgOCBiaXQsIDE2IGJpdCwgb3IgbmVpdGhlciAqLworc3RhdGljIHN0cnVjdCBuYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9kYXRhID0geworCS5vcHRpb25zCT0gTkFORF9TQU1TVU5HX0xQX09QVElPTlMsCisJLnBhcnRzCQk9IG5hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5hbmRfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBuYW5kIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZuYW5kX3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CkBAIC0xMzgsMTAgKzIzOSwxMzYgQEAKIAkucmVzb3VyY2UgICAgICAgPSBpbnRsYXRfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoM19rcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElOVF9LRVlCT0FSRCwKKwkJLmVuZAk9IElOVF9LRVlCT0FSRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGgzX2twX2RhdGEgPSB7CisJLnJvd3MJPSA4LAorCS5jb2xzCT0gOCwKKwkua2V5bWFwID0gaDNfa2V5bWFwLAorCS5yZXAJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDNfa3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZoM19rcF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGgzX2twX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDNfa3BfcmVzb3VyY2VzLAorfTsKKworCisvKiBTZWxlY3QgYmV0d2VlbiB0aGUgSXJEQSBhbmQgYUdQUyBtb2R1bGUKKyAqLworc3RhdGljIGludCBoM19zZWxlY3RfaXJkYShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGV4cGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHJlYWRfZ3Bpb19leHBhKCZleHBhLCAweDI2KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIGZyb20gSS9PIEVYUEFOREVSIFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogJ1A2JyBlbmFibGUvZGlzYWJsZSBJUkRBX1RYIGFuZCBJUkRBX1JYICovCisJaWYgKHN0YXRlICYgSVJfU0VMKSB7IC8qIElyREEgKi8KKwkJaWYgKChlcnIgPSB3cml0ZV9ncGlvX2V4cGEoZXhwYSB8IDB4NDAsIDB4MjYpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3cml0aW5nIHRvIEkvTyBFWFBBTkRFUiBcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgoZXJyID0gd3JpdGVfZ3Bpb19leHBhKGV4cGEgJiB+MHg0MCwgMHgyNikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdyaXRpbmcgdG8gSS9PIEVYUEFOREVSIFxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90cmFuc19tb2RlKHZvaWQgKmRhdGEpCit7CisJaW50ICptb2RlID0gZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGV4cGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHJlYWRfZ3Bpb19leHBhKCZleHBhLCAweDI3KSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlYWRpbmcgZnJvbSBJL08gZXhwYW5kZXJcbiIpOworCX0KKworCWV4cGEgJj0gfjB4MDM7CisKKwlpZiAoKm1vZGUgJiBJUl9TSVJNT0RFKSB7CisJCWV4cGEgfD0gMHgwMTsKKwl9IGVsc2UgeyAvKiBNSVIvRklSICovCisJCWV4cGEgfD0gMHgwMzsKKwl9CisKKwlpZiAoKGVyciA9IHdyaXRlX2dwaW9fZXhwYShleHBhLCAweDI3KSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdyaXRpbmcgdG8gSS9PIGV4cGFuZGVyXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaDNfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCXN0cnVjdCBvbWFwX2lyZGFfY29uZmlnICppcmRhX2NvbmZpZyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmlyZGFfY29uZmlnLT5ncGlvX2V4cGEpOworCVBSRVBBUkVfV09SSygmaXJkYV9jb25maWctPmdwaW9fZXhwYSwgc2V0X3RyYW5zX21vZGUsICZtb2RlKTsKKwlzY2hlZHVsZV93b3JrKCZpcmRhX2NvbmZpZy0+Z3Bpb19leHBhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfaXJkYV9jb25maWcgaDNfaXJkYV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfTUlSTU9ERSB8IElSX0ZJUk1PREUsCisJLnRyYW5zY2VpdmVyX21vZGUJPSBoM190cmFuc2NlaXZlcl9tb2RlLAorCS5zZWxlY3RfaXJkYQkgCT0gaDNfc2VsZWN0X2lyZGEsCisJLnJ4X2NoYW5uZWwJCT0gT01BUF9ETUFfVUFSVDNfUlgsCisJLnR4X2NoYW5uZWwJCT0gT01BUF9ETUFfVUFSVDNfVFgsCisJLmRlc3Rfc3RhcnQJCT0gVUFSVDNfVEhSLAorCS5zcmNfc3RhcnQJCT0gVUFSVDNfUkhSLAorCS50eF90cmlnZ2VyCQk9IDAsCisJLnJ4X3RyaWdnZXIJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDNfaXJkYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElOVF9VQVJUMywKKwkJLmVuZAk9IElOVF9VQVJUMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgzX2lyZGFfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwaXJkYSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmgzX2lyZGFfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoM19pcmRhX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDNfaXJkYV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoM19sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJsY2RfaDMiLAorCS5pZAkJPSAtMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmZmxhc2hfZGV2aWNlLAorCSZub3JfZGV2aWNlLAorCSZuYW5kX2RldmljZSwKICAgICAgICAgJnNtYzkxeF9kZXZpY2UsCiAJJmludGxhdF9kZXZpY2UsCisJJmgzX2lyZGFfZGV2aWNlLAorCSZoM19rcF9kZXZpY2UsCisJJmgzX2xjZF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBoM191c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CkBAIC0xNzEsNyArMzk4LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGgzX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJoMyIsCiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCkBAIC0xODIsMTEgKzQwOCwzNiBAQAogCXsgT01BUF9UQUdfTENELAkJJmgzX2xjZF9jb25maWcgfSwKIH07CiAKKyNkZWZpbmUgSDNfTkFORF9SQl9HUElPX1BJTgkxMAorCitzdGF0aWMgaW50IG5hbmRfZGV2X3JlYWR5KHN0cnVjdCBuYW5kX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKEgzX05BTkRfUkJfR1BJT19QSU4pOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfaW5pdCh2b2lkKQogewotCWgzX2ZsYXNoX3Jlc291cmNlLmVuZCA9IGgzX2ZsYXNoX3Jlc291cmNlLnN0YXJ0ID0gb21hcF9jczNfcGh5cygpOwotCWgzX2ZsYXNoX3Jlc291cmNlLmVuZCArPSBPTUFQX0NTM19TSVpFIC0gMTsKLQkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJLyogSGVyZSB3ZSBhc3N1bWUgdGhlIE5PUiBib290IGNvbmZpZzogIE5PUiBvbiBDUzMgKHBvc3NpYmx5IHN3YXBwZWQKKwkgKiB0byBhZGRyZXNzIDAgYnkgYSBkaXAgc3dpdGNoKSwgTkFORCBvbiBDUzJCLiAgVGhlIE5BTkQgZHJpdmVyIHdpbGwKKwkgKiBub3RpY2Ugd2hldGhlciBhIE5BTkQgY2hpcCBpcyBlbmFibGVkIGF0IHByb2JlIHRpbWUuCisJICoKKwkgKiBIMyBzdXBwb3J0IE5BTkQtYm9vdCwgd2l0aCBhIGRpcCBzd2l0Y2ggdG8gcHV0IE5PUiBvbiBDUzJCIGFuZCBOQU5ECisJICogKHdoaWNoIG9uIEgyIG1heSBiZSAxNmJpdCkgb24gQ1MzLiAgVHJ5IGRldGVjdGluZyB0aGF0IGluIGNvZGUgaGVyZSwKKwkgKiB0byBhdm9pZCBwcm9iaW5nIGV2ZXJ5IHBvc3NpYmxlIGZsYXNoIGNvbmZpZ3VyYXRpb24uLi4KKwkgKi8KKwlub3JfcmVzb3VyY2UuZW5kID0gbm9yX3Jlc291cmNlLnN0YXJ0ID0gb21hcF9jczNfcGh5cygpOworCW5vcl9yZXNvdXJjZS5lbmQgKz0gU1pfMzJNIC0gMTsKKworCW5hbmRfcmVzb3VyY2UuZW5kID0gbmFuZF9yZXNvdXJjZS5zdGFydCA9IE9NQVBfQ1MyQl9QSFlTOworCW5hbmRfcmVzb3VyY2UuZW5kICs9IFNaXzRLIC0gMTsKKwlpZiAoIShvbWFwX3JlcXVlc3RfZ3BpbyhIM19OQU5EX1JCX0dQSU9fUElOKSkpCisJCW5hbmRfZGF0YS5kZXZfcmVhZHkgPSBuYW5kX2Rldl9yZWFkeTsKKworCS8qIEdQSU8xMCBGdW5jX01VWF9DVFJMIHJlZyBiaXQgMjk6MjcsIENvbmZpZ3VyZSBWMiB0byBtb2RlMSBhcyBHUElPICovCisJLyogR1BJTzEwIHB1bGx1cC9kb3duIHJlZ2lzdGVyLCBFbmFibGUgcHVsbHVwIG9uIEdQSU8xMCAqLworCW9tYXBfY2ZnX3JlZyhWMl8xNzEwX0dQSU8xMCk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGgzX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShoM19jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCmluZGV4IGEwNGU0MzMuLmU5MGMxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zNCw4ICszNSwyMiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2tleXBhZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgogCitzdGF0aWMgaW50IGlubm92YXRvcl9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0YxKSwKKwlLRVkoMCwgMywgS0VZX0RPV04pLAorCUtFWSgxLCAxLCBLRVlfRjIpLAorCUtFWSgxLCAyLCBLRVlfUklHSFQpLAorCUtFWSgyLCAwLCBLRVlfRjMpLAorCUtFWSgyLCAxLCBLRVlfRjQpLAorCUtFWSgyLCAyLCBLRVlfVVApLAorCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgzLCAzLCBLRVlfTEVGVCksCisJMAorfTsKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGlubm92YXRvcl9wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTk3LDYgKzExMiwzMSBAQAogCS5yZXNvdXJjZQk9ICZpbm5vdmF0b3JfZmxhc2hfcmVzb3VyY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlubm92YXRvcl9rcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElOVF9LRVlCT0FSRCwKKwkJLmVuZAk9IElOVF9LRVlCT0FSRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGlubm92YXRvcl9rcF9kYXRhID0geworCS5yb3dzCT0gOCwKKwkuY29scwk9IDgsCisJLmtleW1hcCA9IGlubm92YXRvcl9rZXltYXAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbm5vdmF0b3Jfa3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpbm5vdmF0b3Jfa3BfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbm5vdmF0b3Jfa3BfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBpbm5vdmF0b3Jfa3BfcmVzb3VyY2VzLAorfTsKKworCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAogLyogT25seSBGUEdBIG5lZWRzIHRvIGJlIG1hcHBlZCBoZXJlLiBBbGwgb3RoZXJzIGFyZSBkb25lIHdpdGggaW9yZW1hcCAqLwpAQCAtMTI5LDkgKzE2OSwxNiBAQAogCS5yZXNvdXJjZQk9IGlubm92YXRvcjE1MTBfc21jOTF4X3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlubm92YXRvcjE1MTBfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAibGNkX2lubjE1MTAiLAorCS5pZAkJPSAtMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbm5vdmF0b3IxNTEwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZpbm5vdmF0b3JfZmxhc2hfZGV2aWNlLAogCSZpbm5vdmF0b3IxNTEwX3NtYzkxeF9kZXZpY2UsCisJJmlubm92YXRvcl9rcF9kZXZpY2UsCisJJmlubm92YXRvcjE1MTBfbGNkX2RldmljZSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCAqLwpAQCAtMTU4LDkgKzIwNSwxNiBAQAogCS5yZXNvdXJjZQk9IGlubm92YXRvcjE2MTBfc21jOTF4X3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlubm92YXRvcjE2MTBfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaW5uMTYxMF9sY2QiLAorCS5pZAkJPSAtMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbm5vdmF0b3IxNjEwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZpbm5vdmF0b3JfZmxhc2hfZGV2aWNlLAogCSZpbm5vdmF0b3IxNjEwX3NtYzkxeF9kZXZpY2UsCisJJmlubm92YXRvcl9rcF9kZXZpY2UsCisJJmlubm92YXRvcjE2MTBfbGNkX2RldmljZSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLwpAQCAtMjA2LDcgKzI2MCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBpbm5vdmF0b3IxNTEwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJpbm4xNTEwIiwKIAkuY3RybF9uYW1lCT0gImludGVybmFsIiwKIH07CiAjZW5kaWYKQEAgLTIyOCw3ICsyODEsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgaW5ub3ZhdG9yMTYxMF9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLnBhbmVsX25hbWUJPSAiaW5uMTYxMCIsCiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5ldHN0YXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbmV0c3Rhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTIwZTYwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbmV0c3Rhci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBNb2RpZmllZCBmcm9tIGJvYXJkLWdlbmVyaWMuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCAyTiBUZWxla29tdW5pa2FjZSwgTGFkaXNsYXYgTWljaGwgPG1pY2hsQDJuLmN6PgotICoKLSAqIENvZGUgZm9yIE5ldHN0YXIgT01BUCBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBvbWFwX2luaXRfdGltZSh2b2lkKTsKLWV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmV0c3Rhcl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBPTUFQX0NTMV9QSFlTICsgMHgzMDAsCi0JCS5lbmQJPSBPTUFQX0NTMV9QSFlTICsgMHgzMDAgKyAxNiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoOCksCi0JCS5lbmQJPSBPTUFQX0dQSU9fSVJRKDgpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmV0c3Rhcl9zbWM5MXhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbWM5MXgiLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuZXRzdGFyX3NtYzkxeF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG5ldHN0YXJfc21jOTF4X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuZXRzdGFyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZuZXRzdGFyX3NtYzkxeF9kZXZpY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgbmV0c3Rhcl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBuZXRzdGFyX2NvbmZpZ1tdID0gewotCXsgT01BUF9UQUdfVUFSVCwJJm5ldHN0YXJfdWFydF9jb25maWcgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBuZXRzdGFyX2luaXRfaXJxKHZvaWQpCi17Ci0Jb21hcDFfaW5pdF9jb21tb25faHcoKTsKLQlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG5ldHN0YXJfaW5pdCh2b2lkKQotewotCS8qIGdyZWVuIExFRCAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDQpOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDQsIDApOwotCS8qIHNtYzkxeCByZXNldCAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDcpOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDcsIDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCg3LCAxKTsKLQl1ZGVsYXkoMik7CS8qIHdhaXQgYXQgbGVhc3QgMTAwbnMgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoNywgMCk7Ci0JbWRlbGF5KDUwKTsJLyogNTBtcyB1bnRpbCBQSFkgcmVhZHkgKi8KLQkvKiBzbWM5MXggaW50ZXJydXB0IHBpbiAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDgpOwotCi0Jb21hcF9yZXF1ZXN0X2dwaW8oMTIpOwotCW9tYXBfcmVxdWVzdF9ncGlvKDEzKTsKLQlvbWFwX3JlcXVlc3RfZ3BpbygxNCk7Ci0Jb21hcF9yZXF1ZXN0X2dwaW8oMTUpOwotCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKDEyKSwgSVJRVF9GQUxMSU5HKTsKLQlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUSgxMyksIElSUVRfRkFMTElORyk7Ci0Jc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoMTQpLCBJUlFUX0ZBTExJTkcpOwotCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKDE1KSwgSVJRVF9GQUxMSU5HKTsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG5ldHN0YXJfZGV2aWNlcywgQVJSQVlfU0laRShuZXRzdGFyX2RldmljZXMpKTsKLQotCS8qIFN3aXRjaCBvbiBncmVlbiBMRUQgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoNCwgMCk7Ci0JLyogU3dpdGNoIG9mZiByZWQgTEVEICovCi0Jb21hcF93cml0ZWIoMHgwMCwgT01BUF9MUEcxX1BNUik7CS8qIERpc2FibGUgY2xvY2sgKi8KLQlvbWFwX3dyaXRlYigweDgwLCBPTUFQX0xQRzFfTENSKTsKLQotCW9tYXBfYm9hcmRfY29uZmlnID0gbmV0c3Rhcl9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUobmV0c3Rhcl9jb25maWcpOwotCW9tYXBfc2VyaWFsX2luaXQoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG5ldHN0YXJfbWFwX2lvKHZvaWQpCi17Ci0Jb21hcDFfbWFwX2NvbW1vbl9pbygpOwotfQotCi0jZGVmaW5lIE1BQ0hJTkVfUEFOSUNFRAkJMQotI2RlZmluZSBNQUNISU5FX1JFQk9PVElORwkyCi0jZGVmaW5lIE1BQ0hJTkVfUkVCT09UCQk0Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBtYWNoaW5lX3N0YXRlOwotCi1zdGF0aWMgaW50IHBhbmljX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKLQkgdm9pZCAqcHRyKQotewotCWlmICh0ZXN0X2FuZF9zZXRfYml0KE1BQ0hJTkVfUEFOSUNFRCwgJm1hY2hpbmVfc3RhdGUpKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KLQkvKiBTd2l0Y2ggb2ZmIGdyZWVuIExFRCAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCg0LCAxKTsKLQkvKiBGbGFzaCByZWQgTEVEICovCi0Jb21hcF93cml0ZWIoMHg3OCwgT01BUF9MUEcxX0xDUik7Ci0Jb21hcF93cml0ZWIoMHgwMSwgT01BUF9MUEcxX1BNUik7CS8qIEVuYWJsZSBjbG9jayAqLwotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljX2Jsb2NrID0gewotCS5ub3RpZmllcl9jYWxsCT0gcGFuaWNfZXZlbnQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBuZXRzdGFyX2xhdGVfaW5pdCh2b2lkKQotewotCS8qIFRPRE86IFNldHVwIGZyb250IHBhbmVsIHN3aXRjaCBoZXJlICovCi0KLQkvKiBTZXR1cCBwYW5pYyBub3RpZmllciAqLwotCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljX2Jsb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1wb3N0Y29yZV9pbml0Y2FsbChuZXRzdGFyX2xhdGVfaW5pdCk7Ci0KLU1BQ0hJTkVfU1RBUlQoTkVUU1RBUiwgIk5ldFN0YXIgT01BUDU5MTAiKQotCS8qIE1haW50YWluZXI6IExhZGlzbGF2IE1pY2hsIDxtaWNobEAybi5jej4gKi8KLQkucGh5c19pbwk9IDB4ZmZmMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgweGZlZjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKLQkubWFwX2lvCQk9IG5ldHN0YXJfbWFwX2lvLAotCS5pbml0X2lycQk9IG5ldHN0YXJfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IG5ldHN0YXJfaW5pdCwKLQkudGltZXIJCT0gJm9tYXBfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjk4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKKyAqCisgKiBNb2RpZmllZCBmcm9tIGJvYXJkLWdlbmVyaWMuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2tleXBhZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9haWMyMy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbm9raWE3NzBfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBPbiBOb2tpYSA3NzAsIHRoZSBTbGVlcFggc2lnbmFsIGlzIG1hc2tlZCB3aXRoIGFuCisJICogTVBVSU8gbGluZSBieSBkZWZhdWx0LiAgSXQgaGFzIHRvIGJlIHVubWFza2VkIGZvciBpdAorCSAqIHRvIGJlY29tZSBmdW5jdGlvbmFsICovCisKKwkvKiBTbGVlcFggbWFzayBkaXJlY3Rpb24gKi8KKwlvbWFwX3dyaXRldygob21hcF9yZWFkdygweGZmZmI1MDA4KSAmIH4yKSwgMHhmZmZiNTAwOCk7CisJLyogVW5tYXNrIFNsZWVwWCBzaWduYWwgKi8KKwlvbWFwX3dyaXRldygob21hcF9yZWFkdygweGZmZmI1MDA0KSAmIH4yKSwgMHhmZmZiNTAwNCk7CisKKwlvbWFwMV9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKK30KKworc3RhdGljIGludCBub2tpYTc3MF9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMSwgR1JPVVBfMCB8IEtFWV9VUCksCisJS0VZKDAsIDIsIEdST1VQXzEgfCBLRVlfRjUpLAorCUtFWSgxLCAwLCBHUk9VUF8wIHwgS0VZX0xFRlQpLAorCUtFWSgxLCAxLCBHUk9VUF8wIHwgS0VZX0VOVEVSKSwKKwlLRVkoMSwgMiwgR1JPVVBfMCB8IEtFWV9SSUdIVCksCisJS0VZKDIsIDAsIEdST1VQXzEgfCBLRVlfRVNDKSwKKwlLRVkoMiwgMSwgR1JPVVBfMCB8IEtFWV9ET1dOKSwKKwlLRVkoMiwgMiwgR1JPVVBfMSB8IEtFWV9GNCksCisJS0VZKDMsIDAsIEdST1VQXzIgfCBLRVlfRjcpLAorCUtFWSgzLCAxLCBHUk9VUF8yIHwgS0VZX0Y4KSwKKwlLRVkoMywgMiwgR1JPVVBfMiB8IEtFWV9GNiksCisJMAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBub2tpYTc3MF9rcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElOVF9LRVlCT0FSRCwKKwkJLmVuZAk9IElOVF9LRVlCT0FSRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIG5va2lhNzcwX2twX2RhdGEgPSB7CisJLnJvd3MgICA9IDgsCisJLmNvbHMgICA9IDgsCisJLmtleW1hcCA9IG5va2lhNzcwX2tleW1hcAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9raWE3NzBfa3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZub2tpYTc3MF9rcF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5va2lhNzcwX2twX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbm9raWE3NzBfa3BfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm5va2lhNzcwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworICAgICAgICAmbm9raWE3NzBfa3BfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgbm9raWE3NzBfYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgPSB7CisJLnhfbWF4CQk9IDB4MGZmZiwKKwkueV9tYXgJCT0gMHgwZmZmLAorCS54X3BsYXRlX29obXMJPSAxODAsCisJLnByZXNzdXJlX21heAk9IDI1NSwKKwkuZGVib3VuY2VfbWF4CT0gMTAsCisJLmRlYm91bmNlX3RvbAk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG5va2lhNzcwX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5tb2RhbGlhcyAgICAgICA9ICJsY2RfbHBoODkyMyIsCisJCS5idXNfbnVtICAgICAgICA9IDIsCisJCS5jaGlwX3NlbGVjdCAgICA9IDMsCisJCS5tYXhfc3BlZWRfaHogICA9IDEyMDAwMDAwLAorCX0sCisJWzFdID0geworCQkubW9kYWxpYXMgICAgICAgPSAiYWRzNzg0NiIsCisJCS5idXNfbnVtICAgICAgICA9IDIsCisJCS5jaGlwX3NlbGVjdCAgICA9IDAsCisJCS5tYXhfc3BlZWRfaHogICA9IDI1MDAwMDAsCisJCS5pcnEJCT0gT01BUF9HUElPX0lSUSgxNSksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5va2lhNzcwX2Fkczc4NDZfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworCisvKiBhc3N1bWUgbm8gTWluaS1BQiBwb3J0ICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnIG5va2lhNzcwX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkub3RnCQk9IDEsCisJLnJlZ2lzdGVyX2hvc3QJPSAxLAorCS5yZWdpc3Rlcl9kZXYJPSAxLAorCS5obWNfbW9kZQk9IDE2LAorCS5waW5zWzBdCT0gNiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIG5va2lhNzcwX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jWzBdID0geworCQkuZW5hYmxlZAk9IDAsCisJCS53aXJlNAkJPSAwLAorCQkud3BfcGluCQk9IC0xLAorCQkucG93ZXJfcGluCT0gLTEsCisJCS5zd2l0Y2hfcGluCT0gLTEsCisJfSwKKwkubW1jWzFdID0geworCQkuZW5hYmxlZAk9IDAsCisJCS53aXJlNAkJPSAwLAorCQkud3BfcGluCQk9IC0xLAorCQkucG93ZXJfcGluCT0gLTEsCisJCS5zd2l0Y2hfcGluCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG5va2lhNzcwX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVVNCLAkJTlVMTCB9LAorCXsgT01BUF9UQUdfTU1DLAkJJm5va2lhNzcwX21tY19jb25maWcgfSwKK307CisKKy8qCisgKiBhdWRpbyBwb3dlciBjb250cm9sCisgKi8KKyNkZWZpbmUJSEVBRFBIT05FX0dQSU8JCTE0CisjZGVmaW5lCUFNUExJRklFUl9DVFJMX0dQSU8JNTgKKworc3RhdGljIHN0cnVjdCBjbGsgKmRzcHhvcl9jazsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGF1ZGlvX3B3cl9zZW0pOworLyoKKyAqIGF1ZGlvX3B3cl9zdGF0ZQorICogKy0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfC0xfGRvd24JCQl8cG93ZXItdXAgcmVxdWVzdCAtPiAwCQkJfAorICogKy0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCAwfHVwCQkJfHBvd2VyLWRvd24oMSkgcmVxdWVzdCAtPiAxCQl8CisgKiB8ICB8CQkJCXxwb3dlci1kb3duKDIpIHJlcXVlc3QgLT4gKGlnbm9yZSkJfAorICogKy0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCAxfHVwLAkJCXxwb3dlci11cCByZXF1ZXN0IC0+IDAJCQl8CisgKiB8ICB8cmVjZWl2ZWQgZG93bigxKSByZXF1ZXN0CXxwb3dlci1kb3duKDIpIHJlcXVlc3QgLT4gLTEJCXwKKyAqICstLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworc3RhdGljIGludCBhdWRpb19wd3Jfc3RhdGUgPSAtMTsKKworLyoKKyAqIGF1ZGlvX3B3cl91cCAvIGRvd24gc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBhdWRpb19wd3Jfc2VtCisgKi8KK3N0YXRpYyB2b2lkIG5va2lhNzcwX2F1ZGlvX3B3cl91cCh2b2lkKQoreworCWNsa19lbmFibGUoZHNweG9yX2NrKTsKKworCS8qIFR1cm4gb24gY29kZWMgKi8KKwl0bHYzMjBhaWMyM19wb3dlcl91cCgpOworCisJaWYgKG9tYXBfZ2V0X2dwaW9fZGF0YWluKEhFQURQSE9ORV9HUElPKSkKKwkJLyogSFAgbm90IGNvbm5lY3RlZCwgdHVybiBvbiBhbXBsaWZpZXIgKi8KKwkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFNUExJRklFUl9DVFJMX0dQSU8sIDEpOworCWVsc2UKKwkJLyogSFAgY29ubmVjdGVkLCBkbyBub3QgdHVybiBvbiBhbXBsaWZpZXIgKi8KKwkJcHJpbnRrKCJIUCBjb25uZWN0ZWRcbiIpOworfQorCitzdGF0aWMgdm9pZCBjb2RlY19kZWxheWVkX3Bvd2VyX2Rvd24odm9pZCAqYXJnKQoreworCWRvd24oJmF1ZGlvX3B3cl9zZW0pOworCWlmIChhdWRpb19wd3Jfc3RhdGUgPT0gLTEpCisJCXRsdjMyMGFpYzIzX3Bvd2VyX2Rvd24oKTsKKwljbGtfZGlzYWJsZShkc3B4b3JfY2spOworCXVwKCZhdWRpb19wd3Jfc2VtKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhjb2RlY19wb3dlcl9kb3duX3dvcmssIGNvZGVjX2RlbGF5ZWRfcG93ZXJfZG93biwgTlVMTCk7CisKK3N0YXRpYyB2b2lkIG5va2lhNzcwX2F1ZGlvX3B3cl9kb3duKHZvaWQpCit7CisJLyogVHVybiBvZmYgYW1wbGlmaWVyICovCisJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFNUExJRklFUl9DVFJMX0dQSU8sIDApOworCisJLyogVHVybiBvZmYgY29kZWM6IHNjaGVkdWxlIGRlbGF5ZWQgd29yayAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWNfcG93ZXJfZG93bl93b3JrLCBIWiAvIDIwKTsJLyogNTBtcyAqLworfQorCit2b2lkIG5va2lhNzcwX2F1ZGlvX3B3cl91cF9yZXF1ZXN0KGludCBzdGFnZSkKK3sKKwlkb3duKCZhdWRpb19wd3Jfc2VtKTsKKwlpZiAoYXVkaW9fcHdyX3N0YXRlID09IC0xKQorCQlub2tpYTc3MF9hdWRpb19wd3JfdXAoKTsKKwkvKiBmb3JjZSBhdWRpb19wd3Jfc3RhdGUgPSAwLCBldmVuIGlmIGl0IHdhcyAxLiAqLworCWF1ZGlvX3B3cl9zdGF0ZSA9IDA7CisJdXAoJmF1ZGlvX3B3cl9zZW0pOworfQorCit2b2lkIG5va2lhNzcwX2F1ZGlvX3B3cl9kb3duX3JlcXVlc3QoaW50IHN0YWdlKQoreworCWRvd24oJmF1ZGlvX3B3cl9zZW0pOworCXN3aXRjaCAoc3RhZ2UpIHsKKwljYXNlIDE6CisJCWlmIChhdWRpb19wd3Jfc3RhdGUgPT0gMCkKKwkJCWF1ZGlvX3B3cl9zdGF0ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKGF1ZGlvX3B3cl9zdGF0ZSA9PSAxKSB7CisJCQlub2tpYTc3MF9hdWRpb19wd3JfZG93bigpOworCQkJYXVkaW9fcHdyX3N0YXRlID0gLTE7CisJCX0KKwkJYnJlYWs7CisJfQorCXVwKCZhdWRpb19wd3Jfc2VtKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbm9raWE3NzBfaW5pdCh2b2lkKQoreworCW5va2lhNzcwX2NvbmZpZ1swXS5kYXRhID0gJm5va2lhNzcwX3VzYl9jb25maWc7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhub2tpYTc3MF9kZXZpY2VzLCBBUlJBWV9TSVpFKG5va2lhNzcwX2RldmljZXMpKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhub2tpYTc3MF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKG5va2lhNzcwX3NwaV9ib2FyZF9pbmZvKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBub2tpYTc3MF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUobm9raWE3NzBfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJb21hcF9kc3BfYXVkaW9fcHdyX3VwX3JlcXVlc3QgPSBub2tpYTc3MF9hdWRpb19wd3JfdXBfcmVxdWVzdDsKKwlvbWFwX2RzcF9hdWRpb19wd3JfZG93bl9yZXF1ZXN0ID0gbm9raWE3NzBfYXVkaW9fcHdyX2Rvd25fcmVxdWVzdDsKKwlkc3B4b3JfY2sgPSBjbGtfZ2V0KDAsICJkc3B4b3JfY2siKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbm9raWE3NzBfbWFwX2lvKHZvaWQpCit7CisJb21hcDFfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE5PS0lBNzcwLCAiTm9raWEgNzcwIikKKwkucGh5c19pbwk9IDB4ZmZmMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGZlZjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXBfbm9raWE3NzBfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfbm9raWE3NzBfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfbm9raWE3NzBfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggNTQzZmExMy4uMTE2MDA5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTQ0LDcgKzQ1LDI0IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAtYWxzYS5oPgorCitzdGF0aWMgaW50IG9za19rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0YxKSwKKwlLRVkoMCwgMywgS0VZX1VQKSwKKwlLRVkoMSwgMSwgS0VZX0xFRlRDVFJMKSwKKwlLRVkoMSwgMiwgS0VZX0xFRlQpLAorCUtFWSgyLCAwLCBLRVlfU1BBQ0UpLAorCUtFWSgyLCAxLCBLRVlfRVNDKSwKKwlLRVkoMiwgMiwgS0VZX0RPV04pLAorCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgzLCAzLCBLRVlfUklHSFQpLAorCTAKK307CisKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9za19wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwpAQCAtMTMzLDkgKzE1MSw2OSBAQAogCS5yZXNvdXJjZQk9IG9zazU5MTJfY2ZfcmVzb3VyY2VzLAogfTsKIAorI2RlZmluZSBERUZBVUxUX0JJVFBFUlNBTVBMRSAxNgorCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyBtY2JzcF9yZWdzID0geworCS5zcGNyMiA9IEZSRUUgfCBGUlNUIHwgR1JTVCB8IFhSU1QgfCBYSU5UTSgzKSwKKwkuc3BjcjEgPSBSSU5UTSgzKSB8IFJSU1QsCisJLnJjcjIgPSBSUEhBU0UgfCBSRlJMRU4yKE9NQVBfTUNCU1BfV09SRF84KSB8CisJICAgIFJXRExFTjIoT01BUF9NQ0JTUF9XT1JEXzE2KSB8IFJEQVRETFkoMCksCisJLnJjcjEgPSBSRlJMRU4xKE9NQVBfTUNCU1BfV09SRF84KSB8IFJXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KSwKKwkueGNyMiA9IFhQSEFTRSB8IFhGUkxFTjIoT01BUF9NQ0JTUF9XT1JEXzgpIHwKKwkgICAgWFdETEVOMihPTUFQX01DQlNQX1dPUkRfMTYpIHwgWERBVERMWSgwKSB8IFhGSUcsCisJLnhjcjEgPSBYRlJMRU4xKE9NQVBfTUNCU1BfV09SRF84KSB8IFhXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KSwKKwkuc3JncjEgPSBGV0lEKERFRkFVTFRfQklUUEVSU0FNUExFIC0gMSksCisJLnNyZ3IyID0gR1NZTkMgfCBDTEtTUCB8IEZTR00gfCBGUEVSKERFRkFVTFRfQklUUEVSU0FNUExFICogMiAtIDEpLAorCS8qLnBjcjAgPSBGU1hNIHwgRlNSTSB8IENMS1hNIHwgQ0xLUk0gfCBDTEtYUCB8IENMS1JQLCovIC8qIG1jYnNwOiBtYXN0ZXIgKi8KKwkucGNyMCA9IENMS1hQIHwgQ0xLUlAsICAvKiBtY2JzcDogc2xhdmUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9hbHNhX2NvZGVjX2NvbmZpZyBhbHNhX2NvbmZpZyA9IHsKKwkubmFtZQkJCT0gIk9TSyBBSUMyMyIsCisJLm1jYnNwX3JlZ3NfYWxzYQk9ICZtY2JzcF9yZWdzLAorCS5jb2RlY19jb25maWd1cmVfZGV2CT0gTlVMTCwgLy8gYWljMjNfY29uZmlndXJlLAorCS5jb2RlY19zZXRfc2FtcGxlcmF0ZQk9IE5VTEwsIC8vIGFpYzIzX3NldF9zYW1wbGVyYXRlLAorCS5jb2RlY19jbG9ja19zZXR1cAk9IE5VTEwsIC8vIGFpYzIzX2Nsb2NrX3NldHVwLAorCS5jb2RlY19jbG9ja19vbgkJPSBOVUxMLCAvLyBhaWMyM19jbG9ja19vbiwKKwkuY29kZWNfY2xvY2tfb2ZmCT0gTlVMTCwgLy8gYWljMjNfY2xvY2tfb2ZmLAorCS5nZXRfZGVmYXVsdF9zYW1wbGVyYXRlCT0gTlVMTCwgLy8gYWljMjNfZ2V0X2RlZmF1bHRfc2FtcGxlcmF0ZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9zazU5MTJfbWNic3AxX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcF9tY2JzcCIsCi0JLmlkCQk9IDEsCisJLm5hbWUJPSAib21hcF9hbHNhX21jYnNwIiwKKyAJLmlkCT0gMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZhbHNhX2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvc2s1OTEyX2twX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gSU5UX0tFWUJPQVJELAorCQkuZW5kCT0gSU5UX0tFWUJPQVJELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgb3NrX2twX2RhdGEgPSB7CisJLnJvd3MJPSA4LAorCS5jb2xzCT0gOCwKKwkua2V5bWFwID0gb3NrX2tleW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9zazU5MTJfa3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvc2tfa3BfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvc2s1OTEyX2twX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb3NrNTkxMl9rcF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvc2s1OTEyX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxjZF9vc2siLAorCS5pZAkJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvc2s1OTEyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtMTQzLDYgKzIyMSw4IEBACiAJJm9zazU5MTJfc21jOTF4X2RldmljZSwKIAkmb3NrNTkxMl9jZl9kZXZpY2UsCiAJJm9zazU5MTJfbWNic3AxX2RldmljZSwKKwkmb3NrNTkxMl9rcF9kZXZpY2UsCisJJm9zazU5MTJfbGNkX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvc2tfaW5pdF9zbWM5MXgodm9pZCkKQEAgLTE5Nyw3ICsyNzcsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb3NrX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJvc2siLAogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKIApAQCAtMjU1LDggKzMzNCwxOCBAQAogc3RhdGljIHZvaWQgX19pbml0IG9za19taXN0cmFsX2luaXQodm9pZCkgeyB9CiAjZW5kaWYKIAorI2RlZmluZSBFTUlGU19DUzNfVkFMCSgweDg4MDEzMTQxKQorCiBzdGF0aWMgdm9pZCBfX2luaXQgb3NrX2luaXQodm9pZCkKIHsKKwkvKiBXb3JrYXJvdW5kIGZvciB3cm9uZyBDUzMgKE5PUiBmbGFzaCkgdGltaW5nCisJICogVGhlcmUgYXJlIHNvbWUgVS1Cb290IHZlcnNpb25zIG91dCB0aGVyZSB3aGljaCBjb25maWd1cmUKKwkgKiB3cm9uZyBDUzMgbWVtb3J5IHRpbWluZ3MuIFRoaXMgbWFpbmx5IGxlYWRzIHRvIENSQworCSAqIG9yIHNpbWlsaWFyIGVycm9ycyBpZiB5b3UgdXNlIE5PUiBmbGFzaCAoZS5nLiB3aXRoIEpGRlMyKQorCSAqLworCWlmIChFTUlGU19DQ1MoMykgIT0gRU1JRlNfQ1MzX1ZBTCkKKwkJRU1JRlNfQ0NTKDMpID0gRU1JRlNfQ1MzX1ZBTDsKKwogCW9za19mbGFzaF9yZXNvdXJjZS5lbmQgPSBvc2tfZmxhc2hfcmVzb3VyY2Uuc3RhcnQgPSBvbWFwX2NzM19waHlzKCk7CiAJb3NrX2ZsYXNoX3Jlc291cmNlLmVuZCArPSBTWl8zMk0gLSAxOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG9zazU5MTJfZGV2aWNlcywgQVJSQVlfU0laRShvc2s1OTEyX2RldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCmluZGV4IGU0ODhmNzIuLjRiYzhhNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwpAQCAtMzgsNiArMzgsMTUgQEAKIAlvbWFwX2luaXRfaXJxKCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10ZV9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJsY2RfcGFsbXRlIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnBhbG10ZV9sY2RfZGV2aWNlLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgcGFsbXRlX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKIAkucmVnaXN0ZXJfZGV2CT0gMSwKIAkuaG1jX21vZGUJPSAwLApAQCAtNTUsNyArNjQsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGFsbXRlX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJwYWxtdGUiLAogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKIApAQCAtNjksNiArNzcsOCBAQAogewogCW9tYXBfYm9hcmRfY29uZmlnID0gcGFsbXRlX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShwYWxtdGVfY29uZmlnKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCmluZGV4IDM5MTNhM2MuLjY0YjQ1ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKQEAgLTE2LDcgKzE2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0yOCw5ICszMCw0NCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9mcGdhLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KIAorc3RhdGljIGludCBwMl9rZXltYXBbXSA9IHsKKwlLRVkoMCwwLEtFWV9VUCksCisJS0VZKDAsMSxLRVlfUklHSFQpLAorCUtFWSgwLDIsS0VZX0xFRlQpLAorCUtFWSgwLDMsS0VZX0RPV04pLAorCUtFWSgwLDQsS0VZX0NFTlRFUiksCisJS0VZKDAsNSxLRVlfMF81KSwKKwlLRVkoMSwwLEtFWV9TT0ZUMiksCisJS0VZKDEsMSxLRVlfU0VORCksCisJS0VZKDEsMixLRVlfRU5EKSwKKwlLRVkoMSwzLEtFWV9WT0xVTUVET1dOKSwKKwlLRVkoMSw0LEtFWV9WT0xVTUVVUCksCisJS0VZKDEsNSxLRVlfUkVDT1JEKSwKKwlLRVkoMiwwLEtFWV9TT0ZUMSksCisJS0VZKDIsMSxLRVlfMyksCisJS0VZKDIsMixLRVlfNiksCisJS0VZKDIsMyxLRVlfOSksCisJS0VZKDIsNCxLRVlfU0hBUlApLAorCUtFWSgyLDUsS0VZXzJfNSksCisJS0VZKDMsMCxLRVlfQkFDSyksCisJS0VZKDMsMSxLRVlfMiksCisJS0VZKDMsMixLRVlfNSksCisJS0VZKDMsMyxLRVlfOCksCisJS0VZKDMsNCxLRVlfMCksCisJS0VZKDMsNSxLRVlfSEVBRFNFVEhPT0spLAorCUtFWSg0LDAsS0VZX0hPTUUpLAorCUtFWSg0LDEsS0VZXzEpLAorCUtFWSg0LDIsS0VZXzQpLAorCUtFWSg0LDMsS0VZXzcpLAorCUtFWSg0LDQsS0VZX1NUQVIpLAorCUtFWSg0LDUsS0VZX1BPV0VSKSwKKwkwCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IEgyUDJfREJHX0ZQR0FfRVRIUl9TVEFSVCwJLyogUGh5c2ljYWwgKi8KQEAgLTQ0LDcgKzgxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHAyX3BhcnRpdGlvbnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CiAJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLApAQCAtNzUsMjcgKzExMiw0NyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgcDJfZmxhc2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBub3JfZGF0YSA9IHsKIAkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKIAkud2lkdGgJCT0gMiwKLQkucGFydHMJCT0gcDJfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHAyX3BhcnRpdGlvbnMpLAorCS5wYXJ0cwkJPSBub3JfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5vcl9wYXJ0aXRpb25zKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcDJfZmxhc2hfcmVzb3VyY2UgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gT01BUF9DUzBfUEhZUywKIAkuZW5kCQk9IE9NQVBfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHAyX2ZsYXNoX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcl9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnAyX2ZsYXNoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZwMl9mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmbm9yX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9kYXRhID0geworCS5vcHRpb25zCT0gTkFORF9TQU1TVU5HX0xQX09QVElPTlMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IE9NQVBfQ1MzX1BIWVMsCisJLmVuZAkJPSBPTUFQX0NTM19QSFlTICsgU1pfNEsgLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwbmFuZCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmbmFuZF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CkBAIC0xMDUsMTcgKzE2Miw1NSBAQAogCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnAyX2ZsYXNoX2RldmljZSwKLQkmc21jOTF4X2RldmljZSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3BfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTlRfNzMwX01QVUlPX0tFWVBBRCwKKwkJLmVuZAk9IElOVF83MzBfTVBVSU9fS0VZUEFELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEga3BfZGF0YSA9IHsKKwkucm93cwk9IDgsCisJLmNvbHMJPSA4LAorCS5rZXltYXAgPSBwMl9rZXltYXAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBrcF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAta2V5cGFkIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmtwX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoa3BfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBrcF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJsY2RfcDIiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbm9yX2RldmljZSwKKwkmbmFuZF9kZXZpY2UsCisJJnNtYzkxeF9kZXZpY2UsCisJJmtwX2RldmljZSwKKwkmbGNkX2RldmljZSwKK307CisKKyNkZWZpbmUgUDJfTkFORF9SQl9HUElPX1BJTgk2MgorCitzdGF0aWMgaW50IG5hbmRfZGV2X3JlYWR5KHN0cnVjdCBuYW5kX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKFAyX05BTkRfUkJfR1BJT19QSU4pOworfQorCiBzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgcGVyc2V1czJfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKIAkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHBlcnNldXMyX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJwMiIsCiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCkBAIC0xMjYsNyArMjIxLDEzIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BlcnNldXMyX2luaXQodm9pZCkKIHsKLQkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJaWYgKCEob21hcF9yZXF1ZXN0X2dwaW8oUDJfTkFORF9SQl9HUElPX1BJTikpKQorCQluYW5kX2RhdGEuZGV2X3JlYWR5ID0gbmFuZF9kZXZfcmVhZHk7CisKKwlvbWFwX2NmZ19yZWcoTDNfMTYxMF9GTEFTSF9DUzJCX09FKTsKKwlvbWFwX2NmZ19yZWcoTThfMTYxMF9GTEFTSF9DUzJCX1dFKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBwZXJzZXVzMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUocGVyc2V1czJfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IDUyZTRhOWQuLjQ0N2E1ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTU1LDkgKzE1NSw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCB2b2ljZWJsdWVfY29uZmlnW10gPSB7Ci0JeyBPTUFQX1RBR19VU0IsICZ2b2ljZWJsdWVfdXNiX2NvbmZpZyB9LAotCXsgT01BUF9UQUdfTU1DLCAmdm9pY2VibHVlX21tY19jb25maWcgfSwKLQl7IE9NQVBfVEFHX1VBUlQsCSZ2b2ljZWJsdWVfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VTQiwgICZ2b2ljZWJsdWVfdXNiX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTU1DLCAgJnZvaWNlYmx1ZV9tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19VQVJULCAmdm9pY2VibHVlX3VhcnRfY29uZmlnIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX2luaXRfaXJxKHZvaWQpCkBAIC0yMzUsNyArMjM1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IHZvaWNlYmx1ZV9zZXR1cCh2b2lkKQogewogCS8qIFNldHVwIHBhbmljIG5vdGlmaWVyICovCi0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNfYmxvY2spOworCW5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNfYmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKaW5kZXggNzUxMTBiYS4uNjE5ZGIxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJICovCiAJZm9yIChkc29yID0gMjsgZHNvciA8IDk2OyArK2Rzb3IpIHsKIAkJaWYgKChkc29yICYgMSkgJiYgZHNvciA+IDgpCi0JCSAgCWNvbnRpbnVlOworCQkJY29udGludWU7CiAJCWlmIChyYXRlID49IDk2MDAwMDAwIC8gZHNvcikKIAkJCWJyZWFrOwogCX0KQEAgLTY4Nyw2ICs2ODcsMTEgQEAKIAkJCWNsa19yZWdpc3RlcigqY2xrcCk7CiAJCQljb250aW51ZTsKIAkJfQorCisJCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAzMTApICYmIGNwdV9pc19vbWFwMzEwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQogCX0KIAogCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfQ0xPQ0ssIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyk7CkBAIC03ODQsNyArNzg5LDcgQEAKIAljbGtfZW5hYmxlKCZhcm14b3JfY2suY2xrKTsKIAljbGtfZW5hYmxlKCZhcm10aW1fY2suY2xrKTsgLyogVGhpcyBzaG91bGQgYmUgZG9uZSBieSB0aW1lciBjb2RlICovCiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQljbGtfZW5hYmxlKCZhcm1fZ3Bpb19jayk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAppbmRleCA0ZjE4ZDFiLi5iN2M2ODgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkubmFtZQkJPSAiY2tfcmVmIiwKIAkucmF0ZQkJPSAxMjAwMDAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAorCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAogCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJLm5hbWUJCT0gImNrX2RwbGwxIiwKIAkucGFyZW50CQk9ICZja19yZWYsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKIAkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKQEAgLTE4Myw3ICsxODMsOCBAQAogCS5uYW1lCQk9ICJhcm1fY2siLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkgIEFMV0FZU19FTkFCTEVELAogCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKQEAgLTE5NSw3ICsxOTYsOCBAQAogCQkubmFtZQkJPSAiYXJtcGVyX2NrIiwKIAkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIFJBVEVfQ0tDVEwgfCBDTE9DS19JRExFX0NPTlRST0wsCisJCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9DS0NUTCB8CisJCQkJICBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCQkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAogCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9QRVJESVZfT0ZGU0VULApAQCAtMjA5LDcgKzIxMSw3IEBACiBzdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKIAkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwLAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCS5lbmFibGVfYml0CT0gRU5fR1BJT0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMjIsNyArMjI0LDcgQEAKIAkJLm5hbWUJCT0gImFybXhvcl9jayIsCiAJCS5wYXJlbnQJCT0gJmNrX3JlZiwKIAkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKIAkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCiAJCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM3LDcgKzIzOSw3IEBACiAJCS5uYW1lCQk9ICJhcm10aW1fY2siLAogCQkucGFyZW50CQk9ICZja19yZWYsCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCQkuZW5hYmxlX2JpdAk9IEVOX1RJTUNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjUyLDcgKzI1NCw3IEBACiAJCS5uYW1lCQk9ICJhcm13ZHRfY2siLAogCQkucGFyZW50CQk9ICZja19yZWYsCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCQkuZW5hYmxlX2JpdAk9IEVOX1dEVENLLAogCQkucmVjYWxjCQk9ICZvbWFwMV93YXRjaGRvZ19yZWNhbGMsCkBAIC0zNDQsOSArMzQ2LDkgQEAKIAkJLm5hbWUJCT0gInRjX2NrIiwKIAkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lOX09NQVA3MzAgfCBSQVRFX0NLQ1RMIHwKLQkJCQkgIFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVEIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJCQkgIENMT0NLX0lOX09NQVA3MzAgfCBDTE9DS19JTl9PTUFQMzEwIHwKKwkJCQkgIFJBVEVfQ0tDVEwgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCSAgQUxXQVlTX0VOQUJMRUQgfCBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5yYXRlX29mZnNldAk9IENLQ1RMX1RDRElWX09GRlNFVCwKIAkJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAogCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCkBAIC0zNTgsNyArMzYwLDggQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0gewogCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8CisJCQkgIEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLyogTm90ZTogT24gMTUxMCB0aGUgZnJlcXVlbmN5IGZvbGxvd3MgVENfQ0sKIAkgKgpAQCAtMzcyLDcgKzM3NSw4IEBACiAJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KIAkubmFtZQkJPSAidGlicF9jayIsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAorCQkJICBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKIAkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLApAQCAtNDE3LDcgKzQyMSw3IEBACiAJLm5hbWUJCT0gImRtYV9jayIsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCisJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKIAkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLApAQCAtNDM3LDcgKzQ0MSw3IEBACiAJCS5uYW1lCQk9ICJhcGlfY2siLAogCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCQkuZW5hYmxlX2JpdAk9IEVOX0FQSUNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtNDUxLDcgKzQ1NSw4IEBACiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImxiX2NrIiwKIAkJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JRExFX0NPTlRST0wsCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAorCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAogCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKIAkJLmVuYWJsZV9iaXQJPSBFTl9MQkNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtNDk1LDggKzUwMCw4IEBACiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImxjZF9jayIsCiAJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBSQVRFX0NLQ1RMIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8CisJCQkJICBSQVRFX0NLQ1RMIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAogCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKIAkJLmVuYWJsZV9iaXQJPSBFTl9MQ0RDSywKIAkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfTENERElWX09GRlNFVCwKQEAgLTUxMiw4ICs1MTcsOSBAQAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKKwkJCSAgRU5BQkxFX1JFR18zMkJJVCB8IEFMV0FZU19FTkFCTEVEIHwKKwkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAogCS5lbmFibGVfYml0CT0gMjksCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3VhcnRfcmF0ZSwKQEAgLTU0NCw4ICs1NTAsOCBAQAogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gMTIwMDAwMDAsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQgfAotCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKIAkuZW5hYmxlX2JpdAk9IDMwLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCkBAIC01NTksOCArNTY1LDkgQEAKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgRU5BQkxFX1JFR18zMkJJVCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVEIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8CisJCQkgIEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCB8CisJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKIAkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCkBAIC01OTAsNyArNTk3LDcgQEAKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA2MDAwMDAwLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilVTFBEX0NMT0NLX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBVU0JfTUNMS19FTl9CSVQsCiAJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLApAQCAtNjAxLDcgKzYwOCw3IEBACiAJLm5hbWUJCT0gInVzYl9oaGNfY2siLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLCAvKiBBY3R1YWxseSAyIGNsb2NrcywgMTJNSHogYW5kIDQ4TUh6ICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKIAkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAogCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLApAQCAtNjM3LDcgKzY0NCw5IEBACiAJLm5hbWUJCT0gIm1jbGsiLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IFJBVEVfRklYRUQsCisgCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVELAorIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilTT0ZUX1JFUV9SRUcsCisgCS5lbmFibGVfYml0CT0gNiwKIAkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCiAJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CkBAIC02NTksNyArNjY4LDcgQEAKIAkubmFtZQkJPSAiYmNsayIsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9GSVhFRCwKIAkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCiAJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CkBAIC02NzgsMTIgKzY4NywxNCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKLQkubmFtZQkJPSAibW1jMV9jayIsCisJLm5hbWUJCT0gIm1tY19jayIsCisJLmlkCQk9IDEsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8CisJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKIAkuZW5hYmxlX2JpdAk9IDIzLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKQEAgLTY5MSw3ICs3MDIsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jMl9jayA9IHsKLQkubmFtZQkJPSAibW1jMl9jayIsCisJLm5hbWUJCT0gIm1tY19jayIsCisJLmlkCQk9IDIsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKQEAgLTcwNiw3ICs3MTgsNyBAQAogc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7CiAJLm5hbWUJCT0gIm1wdSIsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCisJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLwogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NlbGVjdF90YWJsZV9yYXRlLApAQCAtNzE1LDYgKzcyNywyMCBAQAogCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCisvKiB2aXJ0dWFsIGZ1bmN0aW9uYWwgY2xvY2sgZG9tYWluIGZvciBJMkMuIEp1c3QgZm9yIG1ha2luZyBzdXJlIHRoYXQgQVJNWE9SX0NLCityZW1haW5zIGFjdGl2ZSBkdXJpbmcgTVBVIGlkbGUgd2hlbmV2ZXIgdGhpcyBpcyBlbmFibGVkICovCitzdGF0aWMgc3RydWN0IGNsayBpMmNfZmNrID0geworCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkuaWQJCT0gMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFZJUlRVQUxfQ0xPQ0sgfCBDTE9DS19OT19JRExFX1BBUkVOVCB8CisJCQkgIEFMV0FZU19FTkFCTEVELAorCS5wYXJlbnQJCT0gJmFybXhvcl9jay5jbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrICogb25jaGlwX2Nsa3NbXSA9IHsKIAkvKiBub24tVUxQRCBjbG9ja3MgKi8KIAkmY2tfcmVmLApAQCAtNzYzLDYgKzc4OSw3IEBACiAJJm1tYzJfY2ssCiAJLyogVmlydHVhbCBjbG9ja3MgKi8KIAkmdmlydHVhbF9ja19tcHUsCisJJmkyY19mY2ssCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggZWNiYzQ3NS4uODQ3MzI5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTI1LDEwICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCi1leHRlcm4gdm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KICNpZglkZWZpbmVkKENPTkZJR19PTUFQMTYxMF9JUikgfHwgZGVmaW5lZChDT05GSUdfT01BUDE2MU9fSVJfTU9EVUxFKQogCiBzdGF0aWMgdTY0IGlyZGFfZG1hbWFzayA9IDB4ZmZmZmZmZmY7CkBAIC0zNyw3ICszMyw2IEBACiAJLm5hbWUgPSAib21hcDE2MTAtaXIiLAogCS5pZCA9IC0xLAogCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKIAkJLmRtYV9tYXNrCT0gJmlyZGFfZG1hbWFzaywKIAl9LAogfTsKQEAgLTg0LDkgKzc5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfcnRjX2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAib21hcF9ydGMiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlICAgICAgICA9IG9tYXBfbm9wX3JlbGVhc2UsCi0JfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocnRjX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gcnRjX3Jlc291cmNlcywKIH07CkBAIC05OSw2ICs5MSw0MiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ydGModm9pZCkge30KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9TVEkpCisKKyNkZWZpbmUgT01BUDFfU1RJX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZlYTAwMCkKKyNkZWZpbmUgT01BUDFfU1RJX0NIQU5ORUxfQkFTRQkoT01BUDFfU1RJX0JBU0UgKyAweDQwMCkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdGlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDFfU1RJX0JBU0UsCisJCS5lbmQJCT0gT01BUDFfU1RJX0JBU0UgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAxX1NUSV9DSEFOTkVMX0JBU0UsCisJCS5lbmQJCT0gT01BUDFfU1RJX0NIQU5ORUxfQkFTRSArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gSU5UXzE2MTBfU1RJLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic3RpIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHN0aV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHN0aV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3N0aSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3RpX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9zdGkodm9pZCkge30KKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMjksNiArMTU3LDcgQEAKIAkgKi8KIAlvbWFwX2luaXRfaXJkYSgpOwogCW9tYXBfaW5pdF9ydGMoKTsKKwlvbWFwX2luaXRfc3RpKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYwppbmRleCA4MmQ1NTZiLi5iZTNhMmE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwZmIuaD4KIAogZXh0ZXJuIGludCBvbWFwMV9jbGtfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfY2hlY2tfcmV2aXNpb24odm9pZCk7CkBAIC0xMTAsNyArMTExLDcgQEAKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlpb3RhYmxlX2luaXQob21hcDE1MTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMTUxMF9pb19kZXNjKSk7CiAJfQogI2VuZGlmCkBAIC0xMjEsNiArMTIyLDcgQEAKICNlbmRpZgogCiAJb21hcF9zcmFtX2luaXQoKTsKKwlvbWFwZmJfcmVzZXJ2ZV9tZW0oKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCmluZGV4IGVkNjVhN2QuLmEwNDMxYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwpAQCAtNjAsNyArNjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgd2FrZV9lbmFibGU7CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlycV9iYW5rX2NvdW50ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX2JhbmtfY291bnQ7CiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2JhbmsgKmlycV9iYW5rczsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXJxX2JhbmtfcmVhZGwoaW50IGJhbmssIGludCBvZmZzZXQpCkBAIC0xNDIsMjggKzE0MiwyOCBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIG9tYXA3MzBfaXJxX2JhbmtzW10gPSB7Ci0JeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmOGUyMmYgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZGI5YzFmMiB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmOGUyMmYgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGZkYjljMWYyIH0sCiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFICsgMHgxMDAsCS50cmlnZ2VyX21hcCA9IDB4ODAwMDQwZjMgfSwKIH07CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE1MTBfaXJxX2JhbmtzW10gPSB7Ci0JeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZmJmZmZlZCB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGZmYmZmZmVkIH0sCiB9Owogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIG9tYXAzMTBfaXJxX2JhbmtzW10gPSB7Ci0JeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmYWVmYzMgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHg2NWIzYzA2MSB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmYWVmYzMgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweDY1YjNjMDYxIH0sCiB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE2MTBfaXJxX2JhbmtzW10gPSB7Ci0JeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWZlOGYgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZGI3YzFmZCB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWZlOGYgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGZkYjdjMWZkIH0sCiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFICsgMHgxMDAsCS50cmlnZ2VyX21hcCA9IDB4ZmZmZmI3ZmYgfSwKIAl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UgKyAweDIwMCwJLnRyaWdnZXJfbWFwID0gMHhmZmZmZmZmZiB9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCmluZGV4IGQ0YjhkNjIuLjEwZmUwYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwpAQCAtMzUsMTYgKzM1LDIwIEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCiBzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwNzMwX3BpbnNbXSA9IHsKLU1VWF9DRkdfNzMwKCJFMl83MzBfS0JSMCIsCTEyLCAgIDIxLCAgICAwLAkgIDAsICAgMjAsICAgMSwJICBOQSwJIDAsICAwKQotTVVYX0NGR183MzAoIko3XzczMF9LQlIxIiwJMTIsICAgMjUsICAgIDAsCSAgMCwgICAyNCwgICAxLAkgIE5BLAkgMCwgIDApCi1NVVhfQ0ZHXzczMCgiRTFfNzMwX0tCUjIiLAkxMiwgICAyOSwgICAgMCwJICAwLCAgIDI4LCAgIDEsCSAgTkEsCSAwLCAgMCkKLU1VWF9DRkdfNzMwKCJGM183MzBfS0JSMyIsCTEzLCAgICAxLCAgICAwLAkgIDAsICAgMCwgICAgMSwJICBOQSwJIDAsICAwKQotTVVYX0NGR183MzAoIkQyXzczMF9LQlI0IiwJMTMsICAgIDUsICAgIDAsCSAgMCwgICA0LCAgICAxLAkgIE5BLAkgMCwgIDApCi1NVVhfQ0ZHXzczMCgiQzJfNzMwX0tCQzAiLAkxMywgICAgOSwgICAgMCwJICAwLAk4LCAgIDEsCSAgTkEsCSAwLCAgMCkKLU1VWF9DRkdfNzMwKCJEM183MzBfS0JDMSIsCTEzLCAgIDEzLCAgICAwLAkgIDAsICAgMTIsICAgMSwJICBOQSwJIDAsICAwKQotTVVYX0NGR183MzAoIkU0XzczMF9LQkMyIiwJMTMsICAgMTcsICAgIDAsCSAgMCwgICAxNiwgICAxLAkgIE5BLAkgMCwgIDApCi1NVVhfQ0ZHXzczMCgiRjRfNzMwX0tCQzMiLAkxMywgICAyMSwgICAgMCwJICAwLCAgIDIwLCAgIDEsCSAgTkEsCSAwLCAgMCkKLU1VWF9DRkdfNzMwKCJFM183MzBfS0JDNCIsCTEzLCAgIDI1LCAgICAwLAkgIDAsICAgMjQsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkUyXzczMF9LQlIwIiwgICAgICAgIDEyLCAgIDIxLCAgICAwLCAgIDIwLCAgIDEsIDApCitNVVhfQ0ZHXzczMCgiSjdfNzMwX0tCUjEiLCAgICAgICAgMTIsICAgMjUsICAgIDAsICAgMjQsICAgMSwgMCkKK01VWF9DRkdfNzMwKCJFMV83MzBfS0JSMiIsICAgICAgICAxMiwgICAyOSwgICAgMCwgICAyOCwgICAxLCAwKQorTVVYX0NGR183MzAoIkYzXzczMF9LQlIzIiwgICAgICAgIDEzLCAgICAxLCAgICAwLCAgICAwLCAgIDEsIDApCitNVVhfQ0ZHXzczMCgiRDJfNzMwX0tCUjQiLCAgICAgICAgMTMsICAgIDUsICAgIDAsICAgIDQsICAgMSwgMCkKK01VWF9DRkdfNzMwKCJDMl83MzBfS0JDMCIsICAgICAgICAxMywgICAgOSwgICAgMCwgICAgOCwgICAxLCAwKQorTVVYX0NGR183MzAoIkQzXzczMF9LQkMxIiwgICAgICAgIDEzLCAgIDEzLCAgICAwLCAgIDEyLCAgIDEsIDApCitNVVhfQ0ZHXzczMCgiRTRfNzMwX0tCQzIiLCAgICAgICAgMTMsICAgMTcsICAgIDAsICAgMTYsICAgMSwgMCkKK01VWF9DRkdfNzMwKCJGNF83MzBfS0JDMyIsICAgICAgICAxMywgICAyMSwgICAgMCwgICAyMCwgICAxLCAwKQorTVVYX0NGR183MzAoIkUzXzczMF9LQkM0IiwgICAgICAgIDEzLCAgIDI1LCAgICAwLCAgIDI0LCAgIDEsIDApCisKK01VWF9DRkdfNzMwKCJBQTE3XzczMF9VU0JfRE0iLCAgICAgMiwgICAyMSwgICAgMCwgICAyMCwgICAwLCAwKQorTVVYX0NGR183MzAoIlcxNl83MzBfVVNCX1BVX0VOIiwgICAyLCAgIDI1LCAgICAwLCAgIDI0LCAgIDAsIDApCitNVVhfQ0ZHXzczMCgiVzE3XzczMF9VU0JfVkJVU0kiLCAgIDIsICAgMjksICAgIDAsICAgMjgsICAgMCwgMCkKIH07CiAjZW5kaWYKIApAQCAtNzMsOCArNzcsOCBAQAogTVVYX0NGRygiWTE1XzE2MTBfVUFSVDNfUlRTIiwJIEEsICAgIDAsICAgIDEsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQogCiAvKiBQV1QgJiBQV0wsIGNvbmZsaWN0cyB3aXRoIFVBUlQzICovCi1NVVhfQ0ZHKCJQV1QiLAkJIAkgNiwgICAgMCwgICAgMiwJICAwLCAgMzAsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJQV0wiLAkJIAkgNiwgICAgMywgICAgMSwJICAwLCAgMzEsICAgMSwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJQV1QiLAkJCSA2LCAgICAwLCAgICAyLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlBXTCIsCQkJIDYsICAgIDMsICAgIDEsCSAgMCwgIDMxLCAgIDEsCSBOQSwJIDAsICAwKQogCiAvKiBVU0IgaW50ZXJuYWwgbWFzdGVyIGdlbmVyaWMgKi8KIE1VWF9DRkcoIlIxOF9VU0JfVkJVUyIsCQkgNywgICAgOSwgICAgMiwJICAxLCAgMTEsICAgMCwJIE5BLAkgMCwgIDEpCkBAIC0xNTEsNyArMTU1LDcgQEAKIAogLyogTWlzYyBiYWxsb3V0cyAqLwogTVVYX0NGRygiQkFMTE9VVF9WOF9BUk1JTzMiLAkgQiwgICAxOCwgICAgMCwJICAyLCAgMjUsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJOMjBfSERRIiwJICAgICAgIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKK01VWF9DRkcoIk4yMF9IRFEiLAkJIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKIAogLyogT01BUC0xNjEwIE1NQzIgKi8KIE1VWF9DRkcoIlc4XzE2MTBfTU1DMl9EQVQwIiwJIEIsICAgMjEsICAgIDYsCSAgMiwgIDIzLCAgIDEsCSAgMiwJIDEsICAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZjZiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKQEAgLTAsMCArMSw3NzAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKKyAqCisgKiBPTUFQIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBPcmlnaW5hbCBjb2RlIGZvciB0aGUgU0ExMXgwOgorICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgorICoKKyAqIE1vZGlmaWVkIGZvciB0aGUgUFhBMjUwIGJ5IE5pY29sYXMgUGl0cmU6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBNb2RpZmllZCBmb3IgdGhlIE9NQVAxNTEwIGJ5IERhdmlkIFNpbmdsZXRvbjoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBNb250YSBWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIENsZWFudXAgMjAwNCBmb3IgT01BUDE1MTAvMTYxMCBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC90cHM2NTAxMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbXRpbWVyLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXJtX3NsZWVwX3NhdmVbQVJNX1NMRUVQX1NBVkVfU0laRV07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZHNwX3NsZWVwX3NhdmVbRFNQX1NMRUVQX1NBVkVfU0laRV07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgdWxwZF9zbGVlcF9zYXZlW1VMUERfU0xFRVBfU0FWRV9TSVpFXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV9TSVpFXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkVdOworc3RhdGljIHVuc2lnbmVkIGludCBtcHVpMTYxMF9zbGVlcF9zYXZlW01QVUkxNjEwX1NMRUVQX1NBVkVfU0laRV07CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBlbmFibGVfZHluX3NsZWVwID0gMTsKKworc3RhdGljIHNzaXplX3Qgb21hcF9wbV9zbGVlcF93aGlsZV9pZGxlX3Nob3coc3RydWN0IHN1YnN5c3RlbSAqIHN1YnN5cywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVodVxuIiwgZW5hYmxlX2R5bl9zbGVlcCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9tYXBfcG1fc2xlZXBfd2hpbGVfaWRsZV9zdG9yZShzdHJ1Y3Qgc3Vic3lzdGVtICogc3Vic3lzLAorCQkJCQkgICAgICBjb25zdCBjaGFyICogYnVmLAorCQkJCQkgICAgICBzaXplX3QgbikKK3sKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZ2YWx1ZSkgIT0gMSB8fAorCSAgICAodmFsdWUgIT0gMCAmJiB2YWx1ZSAhPSAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgImlkbGVfc2xlZXBfc3RvcmU6IEludmFsaWQgdmFsdWVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZW5hYmxlX2R5bl9zbGVlcCA9IHZhbHVlOworCXJldHVybiBuOworfQorCitzdGF0aWMgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgc2xlZXBfd2hpbGVfaWRsZV9hdHRyID0geworCS5hdHRyICAgPSB7CisJCS5uYW1lID0gX19zdHJpbmdpZnkoc2xlZXBfd2hpbGVfaWRsZSksCisJCS5tb2RlID0gMDY0NCwKKwl9LAorCS5zaG93ICAgPSBvbWFwX3BtX3NsZWVwX3doaWxlX2lkbGVfc2hvdywKKwkuc3RvcmUgID0gb21hcF9wbV9zbGVlcF93aGlsZV9pZGxlX3N0b3JlLAorfTsKKworZXh0ZXJuIHN0cnVjdCBzdWJzeXN0ZW0gcG93ZXJfc3Vic3lzOworc3RhdGljIHZvaWQgKCpvbWFwX3NyYW1faWRsZSkodm9pZCkgPSBOVUxMOworc3RhdGljIHZvaWQgKCpvbWFwX3NyYW1fc3VzcGVuZCkodW5zaWduZWQgbG9uZyByMCwgdW5zaWduZWQgbG9uZyByMSkgPSBOVUxMOworCisvKgorICogTGV0J3MgcG93ZXIgZG93biBvbiBpZGxlLCBidXQgb25seSBpZiB3ZSBhcmUgcmVhbGx5CisgKiBpZGxlLCBiZWNhdXNlIG9uY2Ugd2Ugc3RhcnQgZG93biB0aGUgcGF0aCBvZgorICogZ29pbmcgaWRsZSB3ZSBjb250aW51ZSB0byBkbyBpZGxlIGV2ZW4gaWYgd2UgZ2V0CisgKiBhIGNsb2NrIHRpY2sgaW50ZXJydXB0IC4gLgorICovCit2b2lkIG9tYXBfcG1faWRsZSh2b2lkKQoreworCWV4dGVybiBfX3UzMiBhcm1faWRsZWN0MV9tYXNrOworCV9fdTMyIHVzZV9pZGxlY3QxID0gYXJtX2lkbGVjdDFfbWFzazsKKyNpZm5kZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCisJaW50IGRvX3NsZWVwOworI2VuZGlmCisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2ZpcV9lbmFibGUoKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBTaW5jZSBhbiBpbnRlcnJ1cHQgbWF5IHNldCB1cCBhIHRpbWVyLCB3ZSBkb24ndCB3YW50IHRvCisJICogcmVwcm9ncmFtIHRoZSBoYXJkd2FyZSB0aW1lciB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4KKwkgKiBSZS1lbmFibGUgaW50ZXJydXB0cyBvbmx5IGFmdGVyIHJldHVybmluZyBmcm9tIGlkbGUuCisJICovCisJdGltZXJfZHluX3JlcHJvZ3JhbSgpOworCisjaWZkZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCisjd2FybmluZyBFbmFibGUgMzJrSHogT1MgdGltZXIgaW4gb3JkZXIgdG8gYWxsb3cgc2xlZXAgc3RhdGVzIGluIGlkbGUKKwl1c2VfaWRsZWN0MSA9IHVzZV9pZGxlY3QxICYgfigxIDw8IDkpOworI2Vsc2UKKworCWRvX3NsZWVwID0gMDsKKwl3aGlsZSAoZW5hYmxlX2R5bl9zbGVlcCkgeworCisjaWZkZWYgQ09ORklHX0NCVVNfVEFIVk9fVVNCCisJCWV4dGVybiBpbnQgdmJ1c19hY3RpdmU7CisJCS8qIENsb2NrIHJlcXVpcmVtZW50cz8gKi8KKwkJaWYgKHZidXNfYWN0aXZlKQorCQkJYnJlYWs7CisjZW5kaWYKKwkJZG9fc2xlZXAgPSAxOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBDT05GSUdfT01BUF9ETV9USU1FUgorCXVzZV9pZGxlY3QxID0gb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2sodXNlX2lkbGVjdDEpOworI2VuZGlmCisKKwlpZiAob21hcF9kbWFfcnVubmluZygpKSB7CisJCXVzZV9pZGxlY3QxICY9IH4oMSA8PCA2KTsKKwkJaWYgKG9tYXBfbGNkX2RtYV9leHRfcnVubmluZygpKQorCQkJdXNlX2lkbGVjdDEgJj0gfigxIDw8IDEyKTsKKwl9CisKKwkvKiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhlIGRvX3NsZWVwIHZhcmlhYmxlIGFuZCBtdWx0aXBsZQorCSAqIHRlc3RzIGFib3ZlIGFzIHNvb24gYXMgZHJpdmVycywgdGltZXIgYW5kIERNQSBjb2RlIGhhdmUgYmVlbiBmaXhlZC4KKwkgKiBFdmVuIHRoZSBzbGVlcCBibG9jayBjb3VudCBzaG91bGQgYmVjb21lIG9ic29sZXRlLiAqLworCWlmICgodXNlX2lkbGVjdDEgIT0gfjApIHx8ICFkb19zbGVlcCkgeworCisJCV9fdTMyIHNhdmVkX2lkbGVjdDEgPSBvbWFwX3JlYWRsKEFSTV9JRExFQ1QxKTsKKwkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQkJdXNlX2lkbGVjdDEgJj0gT01BUDE1MTBfQklHX1NMRUVQX1JFUVVFU1Q7CisJCWVsc2UKKwkJCXVzZV9pZGxlY3QxICY9IE9NQVAxNjEwX0lETEVDVDFfU0xFRVBfVkFMOworCQlvbWFwX3dyaXRlbCh1c2VfaWRsZWN0MSwgQVJNX0lETEVDVDEpOworCQlfX2FzbV9fIHZvbGF0aWxlICgibWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNCIpOworCQlvbWFwX3dyaXRlbChzYXZlZF9pZGxlY3QxLCBBUk1fSURMRUNUMSk7CisKKwkJbG9jYWxfZmlxX2VuYWJsZSgpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXJldHVybjsKKwl9CisJb21hcF9zcmFtX3N1c3BlbmQob21hcF9yZWFkbChBUk1fSURMRUNUMSksCisJCQkgIG9tYXBfcmVhZGwoQVJNX0lETEVDVDIpKTsKKyNlbmRpZgorCisJbG9jYWxfZmlxX2VuYWJsZSgpOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworLyoKKyAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIHdha2V1cCBldmVudCBpcyBib2FyZCBzcGVjaWZpYy4gRm9yIHRoZQorICogbW9tZW50IHdlIHB1dCBpdCBpbnRvIHRoaXMgaGVscGVyIGZ1bmN0aW9uLiBMYXRlciBpdCBtYXkgbW92ZQorICogdG8gYm9hcmQgc3BlY2lmaWMgZmlsZXMuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfcG1fd2FrZXVwX3NldHVwKHZvaWQpCit7CisJdTMyIGxldmVsMV93YWtlID0gMDsKKwl1MzIgbGV2ZWwyX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX1VBUlQyKTsKKworCS8qCisJICogVHVybiBvZmYgYWxsIGludGVycnVwdHMgZXhjZXB0IEdQSU8gYmFuayAxLCBMMS0ybmQgbGV2ZWwgY2FzY2FkZSwKKwkgKiBhbmQgdGhlIEwyIHdha2V1cCBpbnRlcnJ1cHRzOiBrZXlwYWQgYW5kIFVBUlQyLiBOb3RlIHRoYXQgdGhlCisJICogZHJpdmVycyBtdXN0IHN0aWxsIHNlcGFyYXRlbHkgY2FsbCBvbWFwX3NldF9ncGlvX3dha2V1cCgpIHRvCisJICogd2FrZSB1cCB0byBhIEdQSU8gaW50ZXJydXB0LgorCSAqLworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfNzMwX0dQSU9fQkFOSzEpIHwKKwkJCU9NQVBfSVJRX0JJVChJTlRfNzMwX0lIMl9JUlEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfR1BJT19CQU5LMSkgfAorCQkJT01BUF9JUlFfQklUKElOVF8xNTEwX0lIMl9JUlEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfR1BJT19CQU5LMSkgfAorCQkJT01BUF9JUlFfQklUKElOVF8xNjEwX0lIMl9JUlEpOworCisJb21hcF93cml0ZWwofmxldmVsMV93YWtlLCBPTUFQX0lIMV9NSVIpOworCisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCBPTUFQX0lIMl8wX01JUik7CisJCW9tYXBfd3JpdGVsKH4oT01BUF9JUlFfQklUKElOVF83MzBfV0FLRV9VUF9SRVEpIHwKKwkJCQlPTUFQX0lSUV9CSVQoSU5UXzczMF9NUFVJT19LRVlQQUQpKSwKKwkJCQlPTUFQX0lIMl8xX01JUik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQlsZXZlbDJfd2FrZSB8PSBPTUFQX0lSUV9CSVQoSU5UX0tFWUJPQVJEKTsKKwkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCAgT01BUF9JSDJfTUlSKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCWxldmVsMl93YWtlIHw9IE9NQVBfSVJRX0JJVChJTlRfS0VZQk9BUkQpOworCQlvbWFwX3dyaXRlbCh+bGV2ZWwyX3dha2UsIE9NQVBfSUgyXzBfTUlSKTsKKworCQkvKiBJTlRfMTYxMF9XQUtFX1VQX1JFUSBpcyBuZWVkZWQgZm9yIEdQSU8gd2FrZXVwLi4uICovCisJCW9tYXBfd3JpdGVsKH5PTUFQX0lSUV9CSVQoSU5UXzE2MTBfV0FLRV9VUF9SRVEpLAorCQkJICAgIE9NQVBfSUgyXzFfTUlSKTsKKwkJb21hcF93cml0ZWwofjB4MCwgT01BUF9JSDJfMl9NSVIpOworCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8zX01JUik7CisJfQorCisJLyogIE5ldyBJUlEgYWdyZWVtZW50LCByZWNhbGN1bGF0ZSBpbiBjYXNjYWRlIG9yZGVyICovCisJb21hcF93cml0ZWwoMSwgT01BUF9JSDJfQ09OVFJPTCk7CisJb21hcF93cml0ZWwoMSwgT01BUF9JSDFfQ09OVFJPTCk7Cit9CisKKyNkZWZpbmUgRU5fRFNQQ0sJMTMJLyogQVJNX0NLQ1RMICovCisjZGVmaW5lIEVOX0FQSUNLCTYJLyogQVJNX0lETEVDVDIgKi8KKyNkZWZpbmUgRFNQX0VOCQkxCS8qIEFSTV9SU1RDVDEgKi8KKwordm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFyZzAgPSAwLCBhcmcxID0gMDsKKworCXByaW50aygiUE06IE9NQVAleCBpcyB0cnlpbmcgdG8gZW50ZXIgZGVlcCBzbGVlcC4uLlxuIiwgc3lzdGVtX3Jldik7CisKKwlvbWFwX3NlcmlhbF93YWtlX3RyaWdnZXIoMSk7CisKKwlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKSB7CisJCS8qIFN0b3AgTEVEMSAoRDkpIGJsaW5rICovCisJCXRwczY1MDEwX3NldF9sZWQoTEVEMSwgT0ZGKTsKKwl9CisKKwlvbWFwX3dyaXRldygweGZmZmYsIFVMUERfU09GVF9ESVNBQkxFX1JFUV9SRUcpOworCisJLyoKKwkgKiBTdGVwIDE6IHR1cm4gb2ZmIGludGVycnVwdHMgKEZJWE1FOiBOT1RFOiBhbHJlYWR5IGRpc2FibGVkKQorCSAqLworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9maXFfZGlzYWJsZSgpOworCisJLyoKKwkgKiBTdGVwIDI6IHNhdmUgcmVnaXN0ZXJzCisJICoKKwkgKiBUaGUgb21hcCBpcyBhIHN0cmFuZ2UvYmVhdXRpZnVsIGRldmljZS4gVGhlIGNhY2hlcywgbWVtb3J5CisJICogYW5kIHJlZ2lzdGVyIHN0YXRlIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIHBvd2VyIHNhdmVzLgorCSAqIFdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSB2ZXJ5IGxpdHRsZSByZWdpc3RlciBzdGF0ZSB0bworCSAqIGlkbGUgdGhlIG9tYXAuCisgICAgICAgICAqCisJICogU2F2ZSBpbnRlcnJ1cHQsIE1QVUksIEFSTSBhbmQgVVBMRCBjb250cm9sIHJlZ2lzdGVycy4KKwkgKi8KKworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCU1QVUk3MzBfU0FWRShPTUFQX0lIMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCU1QVUkxNTEwX1NBVkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTE1MTBfU0FWRShPTUFQX0lIMl9NSVIpOworCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJMTUxMF9TQVZFKEVNSUZTX0NPTkZJRyk7CisJCU1QVUkxNTEwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCU1QVUkxNjEwX1NBVkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTE2MTBfU0FWRShPTUFQX0lIMl8wX01JUik7CisJCU1QVUkxNjEwX1NBVkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJMTYxMF9TQVZFKE9NQVBfSUgyXzJfTUlSKTsKKwkJTVBVSTE2MTBfU0FWRShPTUFQX0lIMl8zX01JUik7CisJCU1QVUkxNjEwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTE2MTBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNjEwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNjEwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTE2MTBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOworCX0KKworCUFSTV9TQVZFKEFSTV9DS0NUTCk7CisJQVJNX1NBVkUoQVJNX0lETEVDVDEpOworCUFSTV9TQVZFKEFSTV9JRExFQ1QyKTsKKwlpZiAoIShjcHVfaXNfb21hcDE1eHgoKSkpCisJCUFSTV9TQVZFKEFSTV9JRExFQ1QzKTsKKwlBUk1fU0FWRShBUk1fRVdVUENUKTsKKwlBUk1fU0FWRShBUk1fUlNUQ1QxKTsKKwlBUk1fU0FWRShBUk1fUlNUQ1QyKTsKKwlBUk1fU0FWRShBUk1fU1lTU1QpOworCVVMUERfU0FWRShVTFBEX0NMT0NLX0NUUkwpOworCVVMUERfU0FWRShVTFBEX1NUQVRVU19SRVEpOworCisJLyogKFN0ZXAgMyByZW1vdmVkIC0gd2Ugbm93IGFsbG93IGRlZXAgc2xlZXAgYnkgZGVmYXVsdCkgKi8KKworCS8qCisJICogU3RlcCA0OiBPTUFQIERTUCBTaHV0ZG93bgorCSAqLworCisJLyogc3RvcCBEU1AgKi8KKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9SU1RDVDEpICYgfigxIDw8IERTUF9FTiksIEFSTV9SU1RDVDEpOworCisJLyogc2h1dCBkb3duIGRzcF9jayAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSAmIH4oMSA8PCBFTl9EU1BDSyksIEFSTV9DS0NUTCk7CisKKwkvKiB0ZW1wb3JhcmlseSBlbmFibGluZyBhcGlfY2sgdG8gYWNjZXNzIERTUCByZWdpc3RlcnMgKi8KKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9JRExFQ1QyKSB8IDEgPDwgRU5fQVBJQ0ssIEFSTV9JRExFQ1QyKTsKKworCS8qIHNhdmUgRFNQIHJlZ2lzdGVycyAqLworCURTUF9TQVZFKERTUF9JRExFQ1QyKTsKKworCS8qIFN0b3AgYWxsIERTUCBkb21haW4gY2xvY2tzICovCisJX19yYXdfd3JpdGV3KDAsIERTUF9JRExFQ1QyKTsKKworCS8qCisJICogU3RlcCA1OiBXYWtldXAgRXZlbnQgU2V0dXAKKwkgKi8KKworCW9tYXBfcG1fd2FrZXVwX3NldHVwKCk7CisKKwkvKgorCSAqIFN0ZXAgNjogQVJNIGFuZCBUcmFmZmljIGNvbnRyb2xsZXIgc2h1dGRvd24KKwkgKi8KKworCS8qIGRpc2FibGUgQVJNIHdhdGNoZG9nICovCisJb21hcF93cml0ZWwoMHgwMEY1LCBPTUFQX1dEVF9USU1FUl9NT0RFKTsKKwlvbWFwX3dyaXRlbCgweDAwQTAsIE9NQVBfV0RUX1RJTUVSX01PREUpOworCisJLyoKKwkgKiBTdGVwIDZiOiBBUk0gYW5kIFRyYWZmaWMgY29udHJvbGxlciBzaHV0ZG93bgorCSAqCisJICogU3RlcCA2IGNvbnRpbnVlcyBoZXJlLiBQcmVwYXJlIGp1bXAgdG8gcG93ZXIgbWFuYWdlbWVudAorCSAqIGFzc2VtYmx5IGNvZGUgaW4gaW50ZXJuYWwgU1JBTS4KKwkgKgorCSAqIFNpbmNlIHRoZSBvbWFwX2NwdV9zdXNwZW5kIHJvdXRpbmUgaGFzIGJlZW4gY29waWVkIHRvCisJICogU1JBTSwgd2UnbGwgZG8gYW4gaW5kaXJlY3QgcHJvY2VkdXJlIGNhbGwgdG8gaXQgYW5kIHBhc3MgdGhlCisJICogY29udGVudHMgb2YgYXJtX2lkbGVjdDEgYW5kIGFybV9pZGxlY3QyIHNvIGl0IGNhbiByZXN0b3JlCisJICogdGhlbSB3aGVuIGl0IHdha2VzIHVwIGFuZCBpdCB3aWxsIHJldHVybi4KKwkgKi8KKworCWFyZzAgPSBhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMV07CisJYXJnMSA9IGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFX0FSTV9JRExFQ1QyXTsKKworCS8qCisJICogU3RlcCA2YzogQVJNIGFuZCBUcmFmZmljIGNvbnRyb2xsZXIgc2h1dGRvd24KKwkgKgorCSAqIEp1bXAgdG8gYXNzZW1ibHkgY29kZS4gVGhlIHByb2Nlc3NvciB3aWxsIHN0YXkgdGhlcmUKKwkgKiB1bnRpbCB3YWtlIHVwLgorCSAqLworICAgICAgICBvbWFwX3NyYW1fc3VzcGVuZChhcmcwLCBhcmcxKTsKKworCS8qCisJICogSWYgd2UgYXJlIGhlcmUsIHByb2Nlc3NvciBpcyB3b2tlbiB1cCEKKwkgKi8KKworCS8qCisJICogUmVzdG9yZSBEU1AgY2xvY2tzCisJICovCisKKwkvKiBhZ2FpbiB0ZW1wb3JhcmlseSBlbmFibGluZyBhcGlfY2sgdG8gYWNjZXNzIERTUCByZWdpc3RlcnMgKi8KKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9JRExFQ1QyKSB8IDEgPDwgRU5fQVBJQ0ssIEFSTV9JRExFQ1QyKTsKKworCS8qIFJlc3RvcmUgRFNQIGRvbWFpbiBjbG9ja3MgKi8KKwlEU1BfUkVTVE9SRShEU1BfSURMRUNUMik7CisKKwkvKgorCSAqIFJlc3RvcmUgQVJNIHN0YXRlLCBleGNlcHQgQVJNX0lETEVDVDEvMiB3aGljaCBvbWFwX2NwdV9zdXNwZW5kIGRpZAorCSAqLworCisJaWYgKCEoY3B1X2lzX29tYXAxNXh4KCkpKQorCQlBUk1fUkVTVE9SRShBUk1fSURMRUNUMyk7CisJQVJNX1JFU1RPUkUoQVJNX0NLQ1RMKTsKKwlBUk1fUkVTVE9SRShBUk1fRVdVUENUKTsKKwlBUk1fUkVTVE9SRShBUk1fUlNUQ1QxKTsKKwlBUk1fUkVTVE9SRShBUk1fUlNUQ1QyKTsKKwlBUk1fUkVTVE9SRShBUk1fU1lTU1QpOworCVVMUERfUkVTVE9SRShVTFBEX0NMT0NLX0NUUkwpOworCVVMUERfUkVTVE9SRShVTFBEX1NUQVRVU19SRVEpOworCisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJTVBVSTczMF9SRVNUT1JFKEVNSUZTX0NPTkZJRyk7CisJCU1QVUk3MzBfUkVTVE9SRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTczMF9SRVNUT1JFKE9NQVBfSUgyXzBfTUlSKTsKKwkJTVBVSTczMF9SRVNUT1JFKE9NQVBfSUgyXzFfTUlSKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCU1QVUkxNTEwX1JFU1RPUkUoTVBVSV9DVFJMKTsKKwkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNTEwX1JFU1RPUkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNTEwX1JFU1RPUkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTE1MTBfUkVTVE9SRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJMTUxMF9SRVNUT1JFKE9NQVBfSUgxX01JUik7CisJCU1QVUkxNTEwX1JFU1RPUkUoT01BUF9JSDJfTUlSKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCU1QVUkxNjEwX1JFU1RPUkUoTVBVSV9DVFJMKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNjEwX1JFU1RPUkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNjEwX1JFU1RPUkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShFTUlGRl9TRFJBTV9DT05GSUcpOworCisJCU1QVUkxNjEwX1JFU1RPUkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShPTUFQX0lIMl8wX01JUik7CisJCU1QVUkxNjEwX1JFU1RPUkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJMTYxMF9SRVNUT1JFKE9NQVBfSUgyXzJfTUlSKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShPTUFQX0lIMl8zX01JUik7CisJfQorCisJb21hcF93cml0ZXcoMCwgVUxQRF9TT0ZUX0RJU0FCTEVfUkVRX1JFRyk7CisKKwkvKgorCSAqIFJlZW5hYmxlIGludGVycnVwdHMKKwkgKi8KKworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlsb2NhbF9maXFfZW5hYmxlKCk7CisKKwlvbWFwX3NlcmlhbF93YWtlX3RyaWdnZXIoMCk7CisKKwlwcmludGsoIlBNOiBPTUFQJXggaXMgcmUtc3RhcnRpbmcgZnJvbSBkZWVwIHNsZWVwLi4uXG4iLCBzeXN0ZW1fcmV2KTsKKworCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKKwkJLyogTGV0IExFRDEgKEQ5KSBibGluayBhZ2FpbiAqLworCQl0cHM2NTAxMF9zZXRfbGVkKExFRDEsIEJMSU5LKTsKKwl9Cit9CisKKyNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorc3RhdGljIGludCBnX3JlYWRfY29tcGxldGVkOworCisvKgorICogUmVhZCBzeXN0ZW0gUE0gcmVnaXN0ZXJzIGZvciBkZWJ1Z2dpbmcKKyAqLworc3RhdGljIGludCBvbWFwX3BtX3JlYWRfcHJvYygKKwljaGFyICpwYWdlX2J1ZmZlciwKKwljaGFyICoqbXlfZmlyc3RfYnl0ZSwKKwlvZmZfdCB2aXJ0dWFsX3N0YXJ0LAorCWludCBsZW5ndGgsCisJaW50ICplb2YsCisJdm9pZCAqZGF0YSkKK3sKKwlpbnQgbXlfYnVmZmVyX29mZnNldCA9IDA7CisJY2hhciAqIGNvbnN0IG15X2Jhc2UgPSBwYWdlX2J1ZmZlcjsKKworCUFSTV9TQVZFKEFSTV9DS0NUTCk7CisJQVJNX1NBVkUoQVJNX0lETEVDVDEpOworCUFSTV9TQVZFKEFSTV9JRExFQ1QyKTsKKwlpZiAoIShjcHVfaXNfb21hcDE1eHgoKSkpCisJCUFSTV9TQVZFKEFSTV9JRExFQ1QzKTsKKwlBUk1fU0FWRShBUk1fRVdVUENUKTsKKwlBUk1fU0FWRShBUk1fUlNUQ1QxKTsKKwlBUk1fU0FWRShBUk1fUlNUQ1QyKTsKKwlBUk1fU0FWRShBUk1fU1lTU1QpOworCisJVUxQRF9TQVZFKFVMUERfSVRfU1RBVFVTKTsKKwlVTFBEX1NBVkUoVUxQRF9DTE9DS19DVFJMKTsKKwlVTFBEX1NBVkUoVUxQRF9TT0ZUX1JFUSk7CisJVUxQRF9TQVZFKFVMUERfU1RBVFVTX1JFUSk7CisJVUxQRF9TQVZFKFVMUERfRFBMTF9DVFJMKTsKKwlVTFBEX1NBVkUoVUxQRF9QT1dFUl9DVFJMKTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCU1QVUk3MzBfU0FWRShNUFVJX0NUUkwpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfU1RBVFVTKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZTX0NPTkZJRyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfU1RBVFVTKTsKKwkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNTEwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwkJTVBVSTE1MTBfU0FWRShFTUlGU19DT05GSUcpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJTVBVSTE2MTBfU0FWRShNUFVJX0NUUkwpOworCQlNUFVJMTYxMF9TQVZFKE1QVUlfRFNQX1NUQVRVUyk7CisJCU1QVUkxNjEwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJMTYxMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJMTYxMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisJCU1QVUkxNjEwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwl9CisKKwlpZiAodmlydHVhbF9zdGFydCA9PSAwKSB7CisJCWdfcmVhZF9jb21wbGV0ZWQgPSAwOworCisJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJICAgIkFSTV9DS0NUTF9SRUc6ICAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9JRExFQ1QxX1JFRzogICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9JRExFQ1QyX1JFRzogICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9JRExFQ1QzX1JFRzoJICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9FV1VQQ1RfUkVHOiAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9SU1RDVDFfUkVHOiAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9SU1RDVDJfUkVHOiAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9TWVNTVF9SRUc6ICAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIlVMUERfSVRfU1RBVFVTX1JFRzogICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfQ0xPQ0tfQ1RSTF9SRUc6ICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfU09GVF9SRVFfUkVHOiAgICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfRFBMTF9DVFJMX1JFRzogICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfU1RBVFVTX1JFUV9SRUc6ICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfUE9XRVJfQ1RSTF9SRUc6ICAgICAgMHglLTR4ICAgICBcbiIsCisJCSAgIEFSTV9TSE9XKEFSTV9DS0NUTCksCisJCSAgIEFSTV9TSE9XKEFSTV9JRExFQ1QxKSwKKwkJICAgQVJNX1NIT1coQVJNX0lETEVDVDIpLAorCQkgICBBUk1fU0hPVyhBUk1fSURMRUNUMyksCisJCSAgIEFSTV9TSE9XKEFSTV9FV1VQQ1QpLAorCQkgICBBUk1fU0hPVyhBUk1fUlNUQ1QxKSwKKwkJICAgQVJNX1NIT1coQVJNX1JTVENUMiksCisJCSAgIEFSTV9TSE9XKEFSTV9TWVNTVCksCisJCSAgIFVMUERfU0hPVyhVTFBEX0lUX1NUQVRVUyksCisJCSAgIFVMUERfU0hPVyhVTFBEX0NMT0NLX0NUUkwpLAorCQkgICBVTFBEX1NIT1coVUxQRF9TT0ZUX1JFUSksCisJCSAgIFVMUERfU0hPVyhVTFBEX0RQTExfQ1RSTCksCisJCSAgIFVMUERfU0hPVyhVTFBEX1NUQVRVU19SRVEpLAorCQkgICBVTFBEX1NIT1coVUxQRF9QT1dFUl9DVFJMKSk7CisKKwkJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJCSAgICJNUFVJNzMwX0NUUkxfUkVHCSAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX0JPT1RfQ09ORklHX1JFRzogMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX0FQSV9DT05GSUdfUkVHOiAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfU0RSQU1fQ09ORklHX1JFRzogICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRU1JRlNfQ09ORklHX1JFRzogICAgMHglLTh4IFxuIiwKKwkJCSAgIE1QVUk3MzBfU0hPVyhNUFVJX0NUUkwpLAorCQkJICAgTVBVSTczMF9TSE9XKE1QVUlfRFNQX1NUQVRVUyksCisJCQkgICBNUFVJNzMwX1NIT1coTVBVSV9EU1BfQk9PVF9DT05GSUcpLAorCQkJICAgTVBVSTczMF9TSE9XKE1QVUlfRFNQX0FQSV9DT05GSUcpLAorCQkJICAgTVBVSTczMF9TSE9XKEVNSUZGX1NEUkFNX0NPTkZJRyksCisJCQkgICBNUFVJNzMwX1NIT1coRU1JRlNfQ09ORklHKSk7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJCSAgICJNUFVJMTUxMF9DVFJMX1JFRyAgICAgICAgICAgICAweCUtOHggXG4iCisJCQkgICAiTVBVSTE1MTBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNTEwX0RTUF9CT09UX0NPTkZJR19SRUc6IDB4JS04eCBcbiIKKwkJCSAgICJNUFVJMTUxMF9EU1BfQVBJX0NPTkZJR19SRUc6ICAweCUtOHggXG4iCisJCQkgICAiTVBVSTE1MTBfU0RSQU1fQ09ORklHX1JFRzogICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNTEwX0VNSUZTX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIsCisJCQkgICBNUFVJMTUxMF9TSE9XKE1QVUlfQ1RSTCksCisJCQkgICBNUFVJMTUxMF9TSE9XKE1QVUlfRFNQX1NUQVRVUyksCisJCQkgICBNUFVJMTUxMF9TSE9XKE1QVUlfRFNQX0JPT1RfQ09ORklHKSwKKwkJCSAgIE1QVUkxNTEwX1NIT1coTVBVSV9EU1BfQVBJX0NPTkZJRyksCisJCQkgICBNUFVJMTUxMF9TSE9XKEVNSUZGX1NEUkFNX0NPTkZJRyksCisJCQkgICBNUFVJMTUxMF9TSE9XKEVNSUZTX0NPTkZJRykpOworCQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCQlteV9idWZmZXJfb2Zmc2V0ICs9IHNwcmludGYobXlfYmFzZSArIG15X2J1ZmZlcl9vZmZzZXQsCisJCQkgICAiTVBVSTE2MTBfQ1RSTF9SRUcgICAgICAgICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNjEwX0RTUF9TVEFUVVNfUkVHOiAgICAgIDB4JS04eCBcbiIKKwkJCSAgICJNUFVJMTYxMF9EU1BfQk9PVF9DT05GSUdfUkVHOiAweCUtOHggXG4iCisJCQkgICAiTVBVSTE2MTBfRFNQX0FQSV9DT05GSUdfUkVHOiAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNjEwX1NEUkFNX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIKKwkJCSAgICJNUFVJMTYxMF9FTUlGU19DT05GSUdfUkVHOiAgICAweCUtOHggXG4iLAorCQkJICAgTVBVSTE2MTBfU0hPVyhNUFVJX0NUUkwpLAorCQkJICAgTVBVSTE2MTBfU0hPVyhNUFVJX0RTUF9TVEFUVVMpLAorCQkJICAgTVBVSTE2MTBfU0hPVyhNUFVJX0RTUF9CT09UX0NPTkZJRyksCisJCQkgICBNUFVJMTYxMF9TSE9XKE1QVUlfRFNQX0FQSV9DT05GSUcpLAorCQkJICAgTVBVSTE2MTBfU0hPVyhFTUlGRl9TRFJBTV9DT05GSUcpLAorCQkJICAgTVBVSTE2MTBfU0hPVyhFTUlGU19DT05GSUcpKTsKKwkJfQorCisJCWdfcmVhZF9jb21wbGV0ZWQrKzsKKwl9IGVsc2UgaWYgKGdfcmVhZF9jb21wbGV0ZWQgPj0gMSkgeworCQkgKmVvZiA9IDE7CisJCSByZXR1cm4gMDsKKwl9CisJZ19yZWFkX2NvbXBsZXRlZCsrOworCisJKm15X2ZpcnN0X2J5dGUgPSBwYWdlX2J1ZmZlcjsKKwlyZXR1cm4gIG15X2J1ZmZlcl9vZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfcG1faW5pdF9wcm9jKHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZHJpdmVyL29tYXBfcG0iLAorCQkJCSAgICAgICBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKKwkJCQkgICAgICAgb21hcF9wbV9yZWFkX3Byb2MsIE5VTEwpOworfQorCisjZW5kaWYgLyogREVCVUcgJiYgQ09ORklHX1BST0NfRlMgKi8KKworc3RhdGljIHZvaWQgKCpzYXZlZF9pZGxlKSh2b2lkKSA9IE5VTEw7CisKKy8qCisgKglvbWFwX3BtX3ByZXBhcmUgLSBEbyBwcmVsaW1pbmFyeSBzdXNwZW5kIHdvcmsuCisgKglAc3RhdGU6CQlzdXNwZW5kIHN0YXRlIHdlJ3JlIGVudGVyaW5nLgorICoKKyAqLworc3RhdGljIGludCBvbWFwX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWludCBlcnJvciA9IDA7CisKKwkvKiBXZSBjYW5ub3Qgc2xlZXAgaW4gaWRsZSB1bnRpbCB3ZSBoYXZlIHJlc3VtZWQgKi8KKwlzYXZlZF9pZGxlID0gcG1faWRsZTsKKwlwbV9pZGxlID0gTlVMTDsKKworCXN3aXRjaCAoc3RhdGUpCisJeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCWJyZWFrOworCisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKworLyoKKyAqCW9tYXBfcG1fZW50ZXIgLSBBY3R1YWxseSBlbnRlciBhIHNsZWVwIHN0YXRlLgorICoJQHN0YXRlOgkJU3RhdGUgd2UncmUgZW50ZXJpbmcuCisgKgorICovCisKK3N0YXRpYyBpbnQgb21hcF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkKKwl7CisJY2FzZSBQTV9TVVNQRU5EX1NUQU5EQlk6CisJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJb21hcF9wbV9zdXNwZW5kKCk7CisJCWJyZWFrOworCisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqCW9tYXBfcG1fZmluaXNoIC0gRmluaXNoIHVwIHN1c3BlbmQgc2VxdWVuY2UuCisgKglAc3RhdGU6CQlTdGF0ZSB3ZSdyZSBjb21pbmcgb3V0IG9mLgorICoKKyAqCVRoaXMgaXMgY2FsbGVkIGFmdGVyIHdlIHdha2UgYmFjayB1cCAob3IgaWYgZW50ZXJpbmcgdGhlIHNsZWVwIHN0YXRlCisgKglmYWlsZWQpLgorICovCisKK3N0YXRpYyBpbnQgb21hcF9wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXBtX2lkbGUgPSBzYXZlZF9pZGxlOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCAgb21hcF93YWtldXBfaW50ZXJydXB0KGludCAgaXJxLCB2b2lkICogIGRldiwKKwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICogIHJlZ3MpCit7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwX3dha2V1cF9pcnEgPSB7CisJLm5hbWUJCT0gInBlcmlwaGVyYWwgd2FrZXVwIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gb21hcF93YWtldXBfaW50ZXJydXB0Cit9OworCisKKworc3RhdGljIHN0cnVjdCBwbV9vcHMgb21hcF9wbV9vcHMgPXsKKwkucG1fZGlza19tb2RlCT0gMCwKKwkucHJlcGFyZQk9IG9tYXBfcG1fcHJlcGFyZSwKKwkuZW50ZXIJCT0gb21hcF9wbV9lbnRlciwKKwkuZmluaXNoCQk9IG9tYXBfcG1fZmluaXNoLAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9wbV9pbml0KHZvaWQpCit7CisJcHJpbnRrKCJQb3dlciBNYW5hZ2VtZW50IGZvciBUSSBPTUFQLlxuIik7CisKKwkvKgorCSAqIFdlIGNvcHkgdGhlIGFzc2VtYmxlciBzbGVlcC93YWtldXAgcm91dGluZXMgdG8gU1JBTS4KKwkgKiBUaGVzZSByb3V0aW5lcyBuZWVkIHRvIGJlIGluIFNSQU0gYXMgdGhhdCdzIHRoZSBvbmx5CisJICogbWVtb3J5IHRoZSBNUFUgY2FuIHNlZSB3aGVuIGl0IHdha2VzIHVwLgorCSAqLworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCW9tYXBfc3JhbV9pZGxlID0gb21hcF9zcmFtX3B1c2gob21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZCwKKwkJCQkJCW9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmRfc3opOworCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXA3MzBfY3B1X3N1c3BlbmQsCisJCQkJCQkgICBvbWFwNzMwX2NwdV9zdXNwZW5kX3N6KTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCW9tYXBfc3JhbV9pZGxlID0gb21hcF9zcmFtX3B1c2gob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQsCisJCQkJCQlvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeik7CisJCW9tYXBfc3JhbV9zdXNwZW5kID0gb21hcF9zcmFtX3B1c2gob21hcDE1MTBfY3B1X3N1c3BlbmQsCisJCQkJCQkgICBvbWFwMTUxMF9jcHVfc3VzcGVuZF9zeik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlvbWFwX3NyYW1faWRsZSA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kLAorCQkJCQkJb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOworCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNjEwX2NwdV9zdXNwZW5kLAorCQkJCQkJICAgb21hcDE2MTBfY3B1X3N1c3BlbmRfc3opOworCX0KKworCWlmIChvbWFwX3NyYW1faWRsZSA9PSBOVUxMIHx8IG9tYXBfc3JhbV9zdXNwZW5kID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQTSBub3QgaW5pdGlhbGl6ZWQ6IE1pc3NpbmcgU1JBTSBzdXBwb3J0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcG1faWRsZSA9IG9tYXBfcG1faWRsZTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlzZXR1cF9pcnEoSU5UXzczMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCXNldHVwX2lycShJTlRfMTYxMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisKKwkvKiBQcm9ncmFtIG5ldyBwb3dlciByYW1wLXVwIHRpbWUKKwkgKiAoMCBmb3IgbW9zdCBib2FyZHMgc2luY2Ugd2UgZG9uJ3QgbG93ZXIgdm9sdGFnZSB3aGVuIGluIGRlZXAgc2xlZXApCisJICovCisJb21hcF93cml0ZXcoVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zX1ZBTCwgVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zKTsKKworCS8qIFNldHVwIFVMUEQgUE9XRVJfQ1RSTF9SRUcgLSBlbnRlciBkZWVwIHNsZWVwIHdoZW5ldmVyIHBvc3NpYmxlICovCisJb21hcF93cml0ZXcoVUxQRF9QT1dFUl9DVFJMX1JFR19WQUwsIFVMUERfUE9XRVJfQ1RSTCk7CisKKwkvKiBDb25maWd1cmUgSURMRUNUMyAqLworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlvbWFwX3dyaXRlbChPTUFQNzMwX0lETEVDVDNfVkFMLCBPTUFQNzMwX0lETEVDVDMpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvbWFwX3dyaXRlbChPTUFQMTYxMF9JRExFQ1QzX1ZBTCwgT01BUDE2MTBfSURMRUNUMyk7CisKKwlwbV9zZXRfb3BzKCZvbWFwX3BtX29wcyk7CisKKyNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorCW9tYXBfcG1faW5pdF9wcm9jKCk7CisjZW5kaWYKKworCXN1YnN5c19jcmVhdGVfZmlsZSgmcG93ZXJfc3Vic3lzLCAmc2xlZXBfd2hpbGVfaWRsZV9hdHRyKTsKKworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQkvKiBjb25maWd1cmUgTE9XX1BXUiBwaW4gKi8KKwkJb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCX0KKworCXJldHVybiAwOworfQorX19pbml0Y2FsbChvbWFwX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKaW5kZXggZTkyNGUwYy4uOWI0Y2Q2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2NrID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDJfY2sgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0M19jayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2NrOworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0Ml9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDNfY2s7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9tYXBfc2VyaWFsX2luKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqdXAsCiAJCQkJCSAgaW50IG9mZnNldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zbGVlcC5TCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKaW5kZXggNGNkN2QyOS4uZTU4Mjk1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zbGVlcC5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKICAqCiAgKiBMb3ctbGV2ZWwgT01BUDczMC8xNTEwLzE2MTAgc2xlZXAvd2FrZVVwIHN1cHBvcnQKICAqCkBAIC0zODMsNjAgKzM4MywxMzMgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAogCW5vcAogCi0JQCBsb2FkIGJhc2UgYWRkcmVzcyBvZiBUcmFmZmljIENvbnRyb2xsZXIKKwlAIExvYWQgYmFzZSBhZGRyZXNzIG9mIFRyYWZmaWMgQ29udHJvbGxlcgogCW1vdglyNiwgI1RDTUlGX0FTTV9CQVNFICYgMHhmZjAwMDAwMAogCW9ycglyNiwgcjYsICNUQ01JRl9BU01fQkFTRSAmIDB4MDBmZjAwMDAKIAlvcnIJcjYsIHI2LCAjVENNSUZfQVNNX0JBU0UgJiAweDAwMDBmZjAwCiAKLQlAIHByZXBhcmUgdG8gcHV0IFNEUkFNIGludG8gc2VsZi1yZWZyZXNoIG1hbnVhbGx5CisJQCBQcmVwYXJlIHRvIHB1dCBTRFJBTSBpbnRvIHNlbGYtcmVmcmVzaCBtYW51YWxseQogCWxkcglyNywgW3I2LCAjRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQogCW9ycglyOSwgcjcsICNTRUxGX1JFRlJFU0hfTU9ERSAmIDB4ZmYwMDAwMDAKIAlvcnIJcjksIHI5LCAjU0VMRl9SRUZSRVNIX01PREUgJiAweDAwMDAwMGZmCiAJc3RyCXI5LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAKLQlAIHByZXBhcmUgdG8gcHV0IEVNSUZTIHRvIFNsZWVwCisJQCBQcmVwYXJlIHRvIHB1dCBFTUlGUyB0byBTbGVlcAogCWxkcglyOCwgW3I2LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQogCW9ycglyOSwgcjgsICNJRExFX0VNSUZTX1JFUVVFU1QgJiAweGZmCiAJc3RyCXI5LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAKLQlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMgorCUAgTG9hZCBiYXNlIGFkZHJlc3Mgb2YgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyCiAJbW92CXI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4ZmYwMDAwMDAKIAlvcnIJcjQsIHI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4MDBmZjAwMDAKIAlvcnIJcjQsIHI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4MDAwMGZmMDAKIAotCUAgdHVybiBvZmYgY2xvY2sgZG9tYWlucwotCUAgZG8gbm90IGRpc2FibGUgUEVSQ0sgKDB4MDQpCisJQCBUdXJuIG9mZiBjbG9jayBkb21haW5zCisJQCBEbyBub3QgZGlzYWJsZSBQRVJDSyAoMHgwNCkKIAltb3YJcjUsICNPTUFQMTYxMF9JRExFQ1QyX1NMRUVQX1ZBTCAmIDB4ZmYKIAlvcnIJcjUsIHI1LCAjT01BUDE2MTBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKIAlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KIAotCUAgcmVxdWVzdCBBUk0gaWRsZQorCUAgUmVxdWVzdCBBUk0gaWRsZQogCW1vdglyMywgI09NQVAxNjEwX0lETEVDVDFfU0xFRVBfVkFMICYgMHhmZgogCW9ycglyMywgcjMsICNPTUFQMTYxMF9JRExFQ1QxX1NMRUVQX1ZBTCAmIDB4ZmYwMAogCXN0cmgJcjMsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQogCi0JQCBkaXNhYmxlIGluc3RydWN0aW9uIGNhY2hlCi0JbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMAotCWJpYwlyMiwgcjksICMweDEwMDAKLQltY3IJcDE1LCAwLCByMiwgYzEsIGMwLCAwCi0Jbm9wCi0KIC8qCiAgKiBMZXQncyB3YWl0IGZvciB0aGUgbmV4dCB3YWtlIHVwIGV2ZW50IHRvIHdha2UgdXMgdXAuIHIwIGNhbid0IGJlCiAgKiB1c2VkIGhlcmUgYmVjYXVzZSByMCBob2xkcyBBUk1fSURMRUNUMQogICovCiAJbW92CXIyLCAjMAogCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJCUAgd2FpdCBmb3IgaW50ZXJydXB0CisKKwlAIEVycmF0YSAoSEVMM1NVNDY3LCBzZWN0aW9uIDEuNC40KSBzcGVjaWZpZXMgbm9wLWluc3RydWN0aW9ucworCUAgYWNjb3JkaW5nIHRvIHRoaXMgZm9ybXVsYToKKwlAIDIgKyAoNCpEUExMX01VTFQpL0RQTExfRElWL0FSTURJVgorCUAgTWF4IERQTExfTVVMVCA9IDE4CisJQCBEUExMX0RJViA9IDEKKwlAIEFSTURJViA9IDEKKwlAID0+IDc0IG5vcC1pbnN0cnVjdGlvbnMKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AJQDEwCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCUAyMAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAlAMzAKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AJQDQwCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCUA1MAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAlANjAKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AJQDcwCisJbm9wCisJbm9wCisJbm9wCisJbm9wCUA3NAogLyoKICAqIG9tYXAxNjEwX2NwdV9zdXNwZW5kKCkncyByZXN1bWUgcG9pbnQuCiAgKgogICogSXQgd2lsbCBqdXN0IHN0YXJ0IGV4ZWN1dGluZyBoZXJlLCBzbyB3ZSdsbCByZXN0b3JlIHN0dWZmIGZyb20gdGhlCiAgKiBzdGFjay4KICAqLwotCUAgcmUtZW5hYmxlIEljYWNoZQotCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDAKLQotCUAgcmVzZXQgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KKwlAIFJlc3RvcmUgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KIAlzdHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KIAlzdHJoCXIwLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KIApAQCAtNDQ0LDcgKzUxNyw3IEBACiAJc3RyCXI3LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAJc3RyCXI4LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAKLQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisJQCBSZXN0b3JlIHJlZ3MgYW5kIHJldHVybgogCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30KIAogRU5UUlkob21hcDE2MTBfY3B1X3N1c3BlbmRfc3opCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IGNkYmY0ZDcuLmE4NWZlNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC01MSw4ICs1MSw2IEBACiAKIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKIAotI2lmZGVmIENPTkZJR19PTUFQX01QVV9USU1FUgotCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBNUFUgdGltZXIKQEAgLTIyMiwxOTUgKzIyMCw2IEBACiAKIAlyZXR1cm4gY3ljbGVzXzJfbnModGlja3M2NCk7CiB9Ci0jZW5kaWYJLyogQ09ORklHX09NQVBfTVBVX1RJTUVSICovCi0KLSNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCi0jZXJyb3IgT01BUCAzMktIeiB0aW1lciBkb2VzIG5vdCBjdXJyZW50bHkgd29yayBvbiAxNVhYIQotI2VuZGlmCi0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDMyS0h6IE9TIHRpbWVyCi0gKgotICogVGhpcyBjdXJyZW50bHkgd29ya3Mgb25seSBvbiAxNnh4LCBhcyAxNTEwIGRvZXMgbm90IGhhdmUgdGhlIGNvbnRpbnVvdXMKLSAqIDMyS0h6IHN5bmNocm9ub3VzIHRpbWVyLiBUaGUgMzJLSHogc3luY2hyb25vdXMgdGltZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrCi0gKiBvZiB0aW1lIGluIGFkZGl0aW9uIHRvIHRoZSAzMktIeiBPUyB0aW1lci4gVXNpbmcgb25seSB0aGUgMzJLSHogT1MgdGltZXIKLSAqIG9uIDE1MTAgd291bGQgYmUgcG9zc2libGUsIGJ1dCB0aGUgdGltZXIgd291bGQgbm90IGJlIGFzIGFjY3VyYXRlIGFzCi0gKiB3aXRoIHRoZSAzMktIeiBzeW5jaHJvbml6ZWQgdGltZXIuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBPTUFQXzMyS19USU1FUl9CQVNFCQkweGZmZmI5MDAwCi0jZGVmaW5lIE9NQVBfMzJLX1RJTUVSX0NSCQkweDA4Ci0jZGVmaW5lIE9NQVBfMzJLX1RJTUVSX1RWUgkJMHgwMAotI2RlZmluZSBPTUFQXzMyS19USU1FUl9UQ1IJCTB4MDQKLQotI2RlZmluZSBPTUFQXzMyS19USUNLU19QRVJfSFoJCSgzMjc2OCAvIEhaKQotCi0vKgotICogVFJNIHNheXMgMSAvIEhaID0gKCBUVlIgKyAxKSAvIDMyNzY4LCBzbyBUUlYgPSAoMzI3NjggLyBIWikgLSAxCi0gKiBzbyB3aXRoIEhaID0gMTAwLCBUVlIgPSAzMjcuNjguCi0gKi8KLSNkZWZpbmUgT01BUF8zMktfVElNRVJfVElDS19QRVJJT0QJKCgzMjc2OCAvIEhaKSAtIDEpCi0jZGVmaW5lIFRJTUVSXzMyS19TWU5DSFJPTklaRUQJCTB4ZmZmYmM0MTAKLQotI2RlZmluZSBKSUZGSUVTX1RPX0hXX1RJQ0tTKG5yX2ppZmZpZXMsIGNsb2NrX3JhdGUpCQkJXAotCQkJCSgoKG5yX2ppZmZpZXMpICogKGNsb2NrX3JhdGUpKSAvIEhaKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfd3JpdGUoaW50IHZhbCwgaW50IHJlZykKLXsKLQlvbWFwX3dyaXRldyh2YWwsIHJlZyArIE9NQVBfMzJLX1RJTUVSX0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGltZXJfcmVhZChpbnQgcmVnKQotewotCXJldHVybiBvbWFwX3JlYWRsKHJlZyArIE9NQVBfMzJLX1RJTUVSX0JBU0UpICYgMHhmZmZmZmY7Ci19Ci0KLS8qCi0gKiBUaGUgMzJLSHogc3luY2hyb25pemVkIHRpbWVyIGlzIGFuIGFkZGl0aW9uYWwgdGltZXIgb24gMTZ4eC4KLSAqIEl0IGlzIGFsd2F5cyBydW5uaW5nLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfc3luY190aW1lcl9yZWFkKHZvaWQpCi17Ci0JcmV0dXJuIG9tYXBfcmVhZGwoVElNRVJfMzJLX1NZTkNIUk9OSVpFRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQotewotCW9tYXBfMzJrX3RpbWVyX3dyaXRlKGxvYWRfdmFsLCBPTUFQXzMyS19USU1FUl9UVlIpOwotCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MGYsIE9NQVBfMzJLX1RJTUVSX0NSKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0b3Aodm9pZCkKLXsKLQlvbWFwXzMya190aW1lcl93cml0ZSgweDAsIE9NQVBfMzJLX1RJTUVSX0NSKTsKLX0KLQotLyoKLSAqIFJvdW5kcyBkb3duIHRvIG5lYXJlc3QgdXNlYy4gTm90ZSB0aGF0IHRoaXMgd2lsbCBvdmVyZmxvdyBmb3IgbGFyZ2VyIHZhbHVlcy4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9tYXBfMzJrX3RpY2tzX3RvX3VzZWNzKHVuc2lnbmVkIGxvbmcgdGlja3NfMzJrKQotewotCXJldHVybiAodGlja3NfMzJrICogNSo1KjUqNSo1KjUpID4+IDk7Ci19Ci0KLS8qCi0gKiBSb3VuZHMgZG93biB0byBuZWFyZXN0IG5zZWMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nCi1vbWFwXzMya190aWNrc190b19uc2Vjcyh1bnNpZ25lZCBsb25nIHRpY2tzXzMyaykKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykgdGlja3NfMzJrICogMTAwMCAqIDUqNSo1KjUqNSo1ID4+IDk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfMzJrX2xhc3RfdGljayA9IDA7Ci0KLS8qCi0gKiBSZXR1cm5zIGVsYXBzZWQgdXNlY3Mgc2luY2UgbGFzdCAzMmsgdGltZXIgaW50ZXJydXB0Ci0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfMzJrX3RpbWVyX2dldHRpbWVvZmZzZXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG5vdyA9IG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpOwotCXJldHVybiBvbWFwXzMya190aWNrc190b191c2Vjcyhub3cgLSBvbWFwXzMya19sYXN0X3RpY2spOwotfQotCi0vKgotICogUmV0dXJucyBjdXJyZW50IHRpbWUgZnJvbSBib290IGluIG5zZWNzLiBJdCdzIE9LIGZvciB0aGlzIHRvIHdyYXAKLSAqIGFyb3VuZCBmb3Igbm93LCBhcyBpdCdzIGp1c3QgYSByZWxhdGl2ZSB0aW1lIHN0YW1wLgotICovCi11bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gb21hcF8zMmtfdGlja3NfdG9fbnNlY3Mob21hcF8zMmtfc3luY190aW1lcl9yZWFkKCkpOwotfQotCi0vKgotICogVGltZXIgaW50ZXJydXB0IGZvciAzMktIeiB0aW1lci4gV2hlbiBkeW5hbWljIHRpY2sgaXMgZW5hYmxlZCwgdGhpcwotICogZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgZnJvbSBvdGhlciBpbnRlcnJ1cHRzIHRvIHJlbW92ZSBsYXRlbmN5Ci0gKiBpc3N1ZXMgd2l0aCBkeW5hbWljIHRpY2suIEluIHRoZSBkeW5hbWljIHRpY2sgY2FzZSwgd2UgbmVlZCB0byBsb2NrCi0gKiB3aXRoIGlycXNhdmUuCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAotCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIG5vdzsKLQotCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCW5vdyA9IG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpOwotCi0Jd2hpbGUgKG5vdyAtIG9tYXBfMzJrX2xhc3RfdGljayA+PSBPTUFQXzMyS19USUNLU19QRVJfSFopIHsKLQkJb21hcF8zMmtfbGFzdF90aWNrICs9IE9NQVBfMzJLX1RJQ0tTX1BFUl9IWjsKLQkJdGltZXJfdGljayhyZWdzKTsKLQl9Ci0KLQkvKiBSZXN0YXJ0IHRpbWVyIHNvIHdlIGRvbid0IGRyaWZ0IG9mZiBkdWUgdG8gbW9kdWxvIG9yIGR5bmFtaWMgdGljay4KLQkgKiBCeSBkZWZhdWx0IHdlIHByb2dyYW0gdGhlIG5leHQgdGltZXIgdG8gYmUgY29udGludW91cyB0byBhdm9pZAotCSAqIGxhdGVuY2llcyBkdXJpbmcgaGlnaCBzeXN0ZW0gbG9hZC4gRHVyaW5nIGR5bmFtaWMgdGljayBvcGVyYXRpb24gdGhlCi0JICogY29udGludW91cyB0aW1lciBjYW4gYmUgb3ZlcnJpZGRlbiBmcm9tIHBtX2lkbGUgdG8gYmUgbG9uZ2VyLgotCSAqLwotCW9tYXBfMzJrX3RpbWVyX3N0YXJ0KG9tYXBfMzJrX2xhc3RfdGljayArIE9NQVBfMzJLX1RJQ0tTX1BFUl9IWiAtIG5vdyk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotI2lmZGVmIENPTkZJR19OT19JRExFX0haCi0vKgotICogUHJvZ3JhbXMgdGhlIG5leHQgdGltZXIgaW50ZXJydXB0IG5lZWRlZC4gQ2FsbGVkIHdoZW4gZHluYW1pYyB0aWNrIGlzCi0gKiBlbmFibGVkLCBhbmQgdG8gcmVwcm9ncmFtIHRoZSB0aWNrcyB0byBza2lwIGZyb20gcG1faWRsZS4gTm90ZSB0aGF0Ci0gKiB3ZSBjYW4ga2VlcCB0aGUgdGltZXIgY29udGludW91cywgYW5kIGRvbid0IG5lZWQgdG8gc2V0IGl0IHRvIHJ1biBpbgotICogb25lLXNob3QgbW9kZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSB0aW1lciB3aWxsIGdldCByZXByb2dyYW1tZWQgYWdhaW4KLSAqIGFmdGVyIG5leHQgaW50ZXJydXB0LgotICovCi12b2lkIG9tYXBfMzJrX3RpbWVyX3JlcHJvZ3JhbSh1bnNpZ25lZCBsb25nIG5leHRfdGljaykKLXsKLQlvbWFwXzMya190aW1lcl9zdGFydChKSUZGSUVTX1RPX0hXX1RJQ0tTKG5leHRfdGljaywgMzI3NjgpICsgMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXBfMzJrX3RpbWVyX2lycTsKLWV4dGVybiBzdHJ1Y3QgdGltZXJfdXBkYXRlX2hhbmRsZXIgdGltZXJfdXBkYXRlOwotCi1zdGF0aWMgaW50IG9tYXBfMzJrX3RpbWVyX2VuYWJsZV9keW5fdGljayh2b2lkKQotewotCS8qIE5vIG5lZWQgdG8gcmVwcm9ncmFtIHRpbWVyLCBqdXN0IHVzZSB0aGUgbmV4dCBpbnRlcnJ1cHQgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvbWFwXzMya190aW1lcl9kaXNhYmxlX2R5bl90aWNrKHZvaWQpCi17Ci0Jb21hcF8zMmtfdGltZXJfc3RhcnQoT01BUF8zMktfVElNRVJfVElDS19QRVJJT0QpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGR5bl90aWNrX3RpbWVyIG9tYXBfZHluX3RpY2tfdGltZXIgPSB7Ci0JLmVuYWJsZQkJPSBvbWFwXzMya190aW1lcl9lbmFibGVfZHluX3RpY2ssCi0JLmRpc2FibGUJPSBvbWFwXzMya190aW1lcl9kaXNhYmxlX2R5bl90aWNrLAotCS5yZXByb2dyYW0JPSBvbWFwXzMya190aW1lcl9yZXByb2dyYW0sCi0JLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQsCi19OwotI2VuZGlmCS8qIENPTkZJR19OT19JRExFX0haICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXBfMzJrX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiMzJLSHogdGltZXIiLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKLQkuaGFuZGxlcgk9IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdCwKLX07Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBvbWFwX2luaXRfMzJrX3RpbWVyKHZvaWQpCi17Ci0KLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotCW9tYXBfdGltZXIuZHluX3RpY2sgPSAmb21hcF9keW5fdGlja190aW1lcjsKLSNlbmRpZgotCi0Jc2V0dXBfaXJxKElOVF9PU19USU1FUiwgJm9tYXBfMzJrX3RpbWVyX2lycSk7Ci0Jb21hcF90aW1lci5vZmZzZXQgID0gb21hcF8zMmtfdGltZXJfZ2V0dGltZW9mZnNldDsKLQlvbWFwXzMya19sYXN0X3RpY2sgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKLQlvbWFwXzMya190aW1lcl9zdGFydChPTUFQXzMyS19USU1FUl9USUNLX1BFUklPRCk7Ci19Ci0jZW5kaWYJLyogQ09ORklHX09NQVBfMzJLX1RJTUVSICovCiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQxOSwxMyArMjI4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfdGltZXJfaW5pdCh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVBVX1RJTUVSKQogCW9tYXBfaW5pdF9tcHVfdGltZXIoKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX09NQVBfMzJLX1RJTUVSKQotCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKLSNlbHNlCi0jZXJyb3IgTm8gc3lzdGVtIHRpbWVyIHNlbGVjdGVkIGluIEtjb25maWchCi0jZW5kaWYKIH0KIAogc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDU3ODg4MDkuLjUzN2RkMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTIwLDMgKzIwLDYgQEAKIAlib29sICJPTUFQIDI0MjAgSDQgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKIAorY29uZmlnIE1BQ0hfT01BUF9BUE9MTE9OCisJYm9vbCAiT01BUCAyNDIwIEFwb2xsb24gYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IDQyMDQxMTYuLjExMWVhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMywxMSArMywxNSBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIGNsb2NrLm8gbXV4Lm8gZGV2aWNlcy5vIHNlcmlhbC5vCitvYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIG1lbW9yeS5vIHByY20ubyBjbG9jay5vIG11eC5vIGRldmljZXMubyBzZXJpYWwubwogCiBvYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCQkrPSB0aW1lci1ncC5vCiAKKyMgUG93ZXIgTWFuYWdlbWVudAorb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KKwogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMpCQkrPSBib2FyZC1nZW5lcmljLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfSDQpCQkrPSBib2FyZC1oNC5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04pCQkrPSBib2FyZC1hcG9sbG9uLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZiYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvYm9hcmQtYXBvbGxvbi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQXV0aG9yOiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgorICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwL29tYXAyL2JvYXJkLWg0LmMKKyAqCisgKiBDb2RlIGZvciBhcG9sbG9uIE9NQVAyIGJvYXJkLiBTaG91bGQgd29yayBvbiBtYW55IE9NQVAyIHN5c3RlbXMgd2hlcmUKKyAqIHRoZSBib290bG9hZGVyIHBhc3NlcyB0aGUgYm9hcmQtc3BlY2lmaWMgZGF0YSB0byB0aGUga2VybmVsLgorICogRG8gbm90IHB1dCBhbnkgYm9hcmQgc3BlY2lmaWMgY29kZSB0byB0aGlzIGZpbGU7IGNyZWF0ZSBhIG5ldyBtYWNoaW5lCisgKiB0eXBlIGlmIHlvdSBuZWVkIGN1c3RvbSBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb25zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvb25lbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisjaW5jbHVkZSAicHJjbS1yZWdzLmgiCisKKy8qIExFRCAmIFN3aXRjaCBtYWNyb3MgKi8KKyNkZWZpbmUgTEVEMF9HUElPMTMJCTEzCisjZGVmaW5lIExFRDFfR1BJTzE0CQkxNAorI2RlZmluZSBMRUQyX0dQSU8xNQkJMTUKKyNkZWZpbmUgU1dfRU5URVJfR1BJTzE2CQkxNgorI2RlZmluZSBTV19VUF9HUElPMTcJCTE3CisjZGVmaW5lIFNXX0RPV05fR1BJTzU4CQk1OAorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYXBvbGxvbl9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiWC1Mb2FkZXIgKyBVLUJvb3QiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IFNaXzEyOEssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gInBhcmFtcyIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl8xMjhLLAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzJNLAorCX0sCisJeworCQkubmFtZQkJPSAicm9vdGZzIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzE2TSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImZpbGVzeXN0ZW0wMCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl8zMk0sCisJfSwKKwl7CisJCS5uYW1lCQk9ICJmaWxlc3lzdGVtMDEiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGFwb2xsb25fZmxhc2hfZGF0YSA9IHsKKwkucGFydHMJCT0gYXBvbGxvbl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoYXBvbGxvbl9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXBvbGxvbl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gQVBPTExPTl9DUzBfQkFTRSwKKwkuZW5kCQk9IEFQT0xMT05fQ1MwX0JBU0UgKyBTWl8xMjhLLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFwb2xsb25fb25lbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9uZW5hbmQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYXBvbGxvbl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKCZhcG9sbG9uX2ZsYXNoX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSAmYXBvbGxvbl9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXBvbGxvbl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBUE9MTE9OX0VUSFJfU1RBUlQsCQkvKiBQaHlzaWNhbCAqLworCQkuZW5kCT0gQVBPTExPTl9FVEhSX1NUQVJUICsgMHhmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoQVBPTExPTl9FVEhSX0dQSU9fSVJRKSwKKwkJLmVuZAk9IE9NQVBfR1BJT19JUlEoQVBPTExPTl9FVEhSX0dQSU9fSVJRKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFwb2xsb25fc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFwb2xsb25fc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gYXBvbGxvbl9zbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXBvbGxvbl9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJhcG9sbG9uX2xjZCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFwb2xsb25fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmFwb2xsb25fb25lbmFuZF9kZXZpY2UsCisJJmFwb2xsb25fc21jOTF4X2RldmljZSwKKwkmYXBvbGxvbl9sY2RfZGV2aWNlLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBhcG9sbG9uX2luaXRfc21jOTF4KHZvaWQpCit7CisJLyogTWFrZSBzdXJlIENTMSB0aW1pbmdzIGFyZSBjb3JyZWN0ICovCisJR1BNQ19DT05GSUcxXzEgPSAweDAwMDExMjAzOworCUdQTUNfQ09ORklHMl8xID0gMHgwMDFmMWYwMTsKKwlHUE1DX0NPTkZJRzNfMSA9IDB4MDAwODA4MDM7CisJR1BNQ19DT05GSUc0XzEgPSAweDFjMDkxYzA5OworCUdQTUNfQ09ORklHNV8xID0gMHgwNDFmMWYxZjsKKwlHUE1DX0NPTkZJRzZfMSA9IDB4MDAwMDA0YzQ7CisJR1BNQ19DT05GSUc3XzEgPSAweDAwMDAwZjQwIHwgKEFQT0xMT05fQ1MxX0JBU0UgPj4gMjQpOworCXVkZWxheSgxMDApOworCisJb21hcF9jZmdfcmVnKFc0X18yNFhYX0dQSU83NCk7CisJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKEFQT0xMT05fRVRIUl9HUElPX0lSUSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBzbWM5MXggSVJRXG4iLAorCQkJQVBPTExPTl9FVEhSX0dQSU9fSVJRKTsKKwkJcmV0dXJuOworCX0KKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihBUE9MTE9OX0VUSFJfR1BJT19JUlEsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXRfaXJxKHZvaWQpCit7CisJb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKKwlhcG9sbG9uX2luaXRfc21jOTF4KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBhcG9sbG9uX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoMSA8PCAwKSB8ICgwIDw8IDEpIHwgKDAgPDwgMiksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyBhcG9sbG9uX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jIFswXSA9IHsKKwkJLmVuYWJsZWQgCT0gMCwKKwkJLndpcmU0CQk9IDAsCisJCS53cF9waW4JCT0gLTEsCisJCS5wb3dlcl9waW4JPSAtMSwKKwkJLnN3aXRjaF9waW4JPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgYXBvbGxvbl9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBhcG9sbG9uX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJmFwb2xsb25fdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJCSZhcG9sbG9uX21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZhcG9sbG9uX2xjZF9jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcG9sbG9uX2xlZF9pbml0KHZvaWQpCit7CisJLyogTEVEMCAtIEFBMTAgKi8KKwlvbWFwX2NmZ19yZWcoQUExMF8yNDJYX0dQSU8xMyk7CisJb21hcF9yZXF1ZXN0X2dwaW8oTEVEMF9HUElPMTMpOworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKExFRDBfR1BJTzEzLCAwKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMF9HUElPMTMsIDApOworCS8qIExFRDEgIC0gQUE2ICovCisJb21hcF9jZmdfcmVnKEFBNl8yNDJYX0dQSU8xNCk7CisJb21hcF9yZXF1ZXN0X2dwaW8oTEVEMV9HUElPMTQpOworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKExFRDFfR1BJTzE0LCAwKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMV9HUElPMTQsIDApOworCS8qIExFRDIgIC0gQUE0ICovCisJb21hcF9jZmdfcmVnKEFBNF8yNDJYX0dQSU8xNSk7CisJb21hcF9yZXF1ZXN0X2dwaW8oTEVEMl9HUElPMTUpOworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKExFRDJfR1BJTzE1LCAwKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMl9HUElPMTUsIDApOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXBvbGxvbl9zd19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqaWdub3JlZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCBsZWQwLCBsZWQxLCBsZWQyOworCisJaWYgKGlycSA9PSBPTUFQX0dQSU9fSVJRKFNXX0VOVEVSX0dQSU8xNikpCisJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChMRUQwX0dQSU8xMywgbGVkMCBePSAxKTsKKwllbHNlIGlmIChpcnEgPT0gT01BUF9HUElPX0lSUShTV19VUF9HUElPMTcpKQorCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMV9HUElPMTQsIGxlZDEgXj0gMSk7CisJZWxzZSBpZiAoaXJxID09IE9NQVBfR1BJT19JUlEoU1dfRE9XTl9HUElPNTgpKQorCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMl9HUElPMTUsIGxlZDIgXj0gMSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcG9sbG9uX3N3X2luaXQodm9pZCkKK3sKKwkvKiBFbnRlciBTVyAtIFkxMSAqLworCW9tYXBfY2ZnX3JlZyhZMTFfMjQyWF9HUElPMTYpOworCW9tYXBfcmVxdWVzdF9ncGlvKFNXX0VOVEVSX0dQSU8xNik7CisJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oU1dfRU5URVJfR1BJTzE2LCAxKTsKKwkvKiBVcCBTVyAtIEFBMTIgKi8KKwlvbWFwX2NmZ19yZWcoQUExMl8yNDJYX0dQSU8xNyk7CisJb21hcF9yZXF1ZXN0X2dwaW8oU1dfVVBfR1BJTzE3KTsKKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihTV19VUF9HUElPMTcsIDEpOworCS8qIERvd24gU1cgLSBBQTggKi8KKwlvbWFwX2NmZ19yZWcoQUE4XzI0MlhfR1BJTzU4KTsKKwlvbWFwX3JlcXVlc3RfZ3BpbyhTV19ET1dOX0dQSU81OCk7CisJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oU1dfRE9XTl9HUElPNTgsIDEpOworCisJc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoU1dfRU5URVJfR1BJTzE2KSwgSVJRVF9SSVNJTkcpOworCWlmIChyZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKFNXX0VOVEVSX0dQSU8xNiksICZhcG9sbG9uX3N3X2ludGVycnVwdCwKKwkJCQlTQV9TSElSUSwgImVudGVyIHN3IiwKKwkJCQkmYXBvbGxvbl9zd19pbnRlcnJ1cHQpKQorCQlyZXR1cm47CisJc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoU1dfVVBfR1BJTzE3KSwgSVJRVF9SSVNJTkcpOworCWlmIChyZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKFNXX1VQX0dQSU8xNyksICZhcG9sbG9uX3N3X2ludGVycnVwdCwKKwkJCQlTQV9TSElSUSwgInVwIHN3IiwKKwkJCQkmYXBvbGxvbl9zd19pbnRlcnJ1cHQpKQorCQlyZXR1cm47CisJc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoU1dfRE9XTl9HUElPNTgpLCBJUlFUX1JJU0lORyk7CisJaWYgKHJlcXVlc3RfaXJxKE9NQVBfR1BJT19JUlEoU1dfRE9XTl9HUElPNTgpLCAmYXBvbGxvbl9zd19pbnRlcnJ1cHQsCisJCQkJU0FfU0hJUlEsICJkb3duIHN3IiwKKwkJCQkmYXBvbGxvbl9zd19pbnRlcnJ1cHQpKQorCQlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2Fwb2xsb25faW5pdCh2b2lkKQoreworCWFwb2xsb25fbGVkX2luaXQoKTsKKwlhcG9sbG9uX3N3X2luaXQoKTsKKworCS8qIFJFVklTSVQ6IHdoZXJlJ3MgdGhlIGNvcnJlY3QgcGxhY2UgKi8KKwlvbWFwX2NmZ19yZWcoVzE5XzI0WFhfU1lTX05JUlEpOworCisJLyoKKyAJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCisJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCisJICogaWYgbm90IG5lZWRlZC4KKwkgKi8KKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhhcG9sbG9uX2RldmljZXMsIEFSUkFZX1NJWkUoYXBvbGxvbl9kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBhcG9sbG9uX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShhcG9sbG9uX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX21hcF9pbyh2b2lkKQoreworCW9tYXAyX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0FQT0xMT04sICJPTUFQMjR4eCBBcG9sbG9uIikKKwkvKiBNYWludGFpbmVyOiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPiAqLworCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9hcG9sbG9uX21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwX2Fwb2xsb25faW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfYXBvbGxvbl9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKaW5kZXggYTMwMGQ2My4uNDkzM2ZjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0yNSwxNSArMjcsNTcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW9leHBhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW5lbGF1cy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorI2luY2x1ZGUgInByY20tcmVncy5oIgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm93X2dwaW9zWzZdID0geyA4OCwgODksIDEyNCwgMTEsIDYsIDk2IH07CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbF9ncGlvc1s3XSA9IHsgOTAsIDkxLCAxMDAsIDM2LCAxMiwgOTcsIDk4IH07CisKK3N0YXRpYyBpbnQgaDRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9MRUZUKSwKKwlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKKwlLRVkoMCwgMiwgS0VZX0EpLAorCUtFWSgwLCAzLCBLRVlfQiksCisJS0VZKDAsIDQsIEtFWV9DKSwKKwlLRVkoMSwgMCwgS0VZX0RPV04pLAorCUtFWSgxLCAxLCBLRVlfVVApLAorCUtFWSgxLCAyLCBLRVlfRSksCisJS0VZKDEsIDMsIEtFWV9GKSwKKwlLRVkoMSwgNCwgS0VZX0cpLAorCUtFWSgyLCAwLCBLRVlfRU5URVIpLAorCUtFWSgyLCAxLCBLRVlfSSksCisJS0VZKDIsIDIsIEtFWV9KKSwKKwlLRVkoMiwgMywgS0VZX0spLAorCUtFWSgyLCA0LCBLRVlfMyksCisJS0VZKDMsIDAsIEtFWV9NKSwKKwlLRVkoMywgMSwgS0VZX04pLAorCUtFWSgzLCAyLCBLRVlfTyksCisJS0VZKDMsIDMsIEtFWV9QKSwKKwlLRVkoMywgNCwgS0VZX1EpLAorCUtFWSg0LCAwLCBLRVlfUiksCisJS0VZKDQsIDEsIEtFWV80KSwKKwlLRVkoNCwgMiwgS0VZX1QpLAorCUtFWSg0LCAzLCBLRVlfVSksCisJS0VZKDQsIDQsIEtFWV9FTlRFUiksCisJS0VZKDUsIDAsIEtFWV9WKSwKKwlLRVkoNSwgMSwgS0VZX1cpLAorCUtFWSg1LCAyLCBLRVlfTCksCisJS0VZKDUsIDMsIEtFWV9TKSwKKwlLRVkoNSwgNCwgS0VZX0VOVEVSKSwKKwkwCit9OworCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDRfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CkBAIC0xMDgsOSArMTUyLDEyMyBAQAogCS5yZXNvdXJjZQk9IGg0X3NtYzkxeF9yZXNvdXJjZXMsCiB9OwogCisvKiBTZWxlY3QgYmV0d2VlbiB0aGUgSXJEQSBhbmQgYUdQUyBtb2R1bGUKKyAqLworc3RhdGljIGludCBoNF9zZWxlY3RfaXJkYShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGV4cGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHJlYWRfZ3Bpb19leHBhKCZleHBhLCAweDIxKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIGZyb20gSS9PIGV4cGFuZGVyXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiAnUDYnIGVuYWJsZS9kaXNhYmxlIElSREFfVFggYW5kIElSREFfUlggKi8KKwlpZiAoc3RhdGUgJiBJUl9TRUwpIHsJLyogSXJEYSAqLworCQlpZiAoKGVyciA9IHdyaXRlX2dwaW9fZXhwYShleHBhIHwgMHgwMSwgMHgyMSkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdyaXRpbmcgdG8gSS9PIGV4cGFuZGVyXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGVyciA9IHdyaXRlX2dwaW9fZXhwYShleHBhICYgfjB4MDEsIDB4MjEpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3cml0aW5nIHRvIEkvTyBleHBhbmRlclxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90cmFuc19tb2RlKHZvaWQgKmRhdGEpCit7CisJaW50ICptb2RlID0gZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGV4cGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHJlYWRfZ3Bpb19leHBhKCZleHBhLCAweDIwKSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlYWRpbmcgZnJvbSBJL08gZXhwYW5kZXJcbiIpOworCX0KKworCWV4cGEgJj0gfjB4MDE7CisKKwlpZiAoISgqbW9kZSAmIElSX1NJUk1PREUpKSB7IC8qIE1JUi9GSVIgKi8KKwkJZXhwYSB8PSAweDAxOworCX0KKworCWlmICgoZXJyID0gd3JpdGVfZ3Bpb19leHBhKGV4cGEsIDB4MjApKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd3JpdGluZyB0byBJL08gZXhwYW5kZXJcbiIpOworCX0KK30KKworc3RhdGljIGludCBoNF90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCit7CisJc3RydWN0IG9tYXBfaXJkYV9jb25maWcgKmlyZGFfY29uZmlnID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXJkYV9jb25maWctPmdwaW9fZXhwYSk7CisJUFJFUEFSRV9XT1JLKCZpcmRhX2NvbmZpZy0+Z3Bpb19leHBhLCBzZXRfdHJhbnNfbW9kZSwgJm1vZGUpOworCXNjaGVkdWxlX3dvcmsoJmlyZGFfY29uZmlnLT5ncGlvX2V4cGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pcmRhX2NvbmZpZyBoNF9pcmRhX2RhdGEgPSB7CisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9NSVJNT0RFIHwgSVJfRklSTU9ERSwKKwkudHJhbnNjZWl2ZXJfbW9kZQk9IGg0X3RyYW5zY2VpdmVyX21vZGUsCisJLnNlbGVjdF9pcmRhCSAJPSBoNF9zZWxlY3RfaXJkYSwKKwkucnhfY2hhbm5lbAkJPSBPTUFQMjRYWF9ETUFfVUFSVDNfUlgsCisJLnR4X2NoYW5uZWwJCT0gT01BUDI0WFhfRE1BX1VBUlQzX1RYLAorCS5kZXN0X3N0YXJ0CQk9IE9NQVBfVUFSVDNfQkFTRSwKKwkuc3JjX3N0YXJ0CQk9IE9NQVBfVUFSVDNfQkFTRSwKKwkudHhfdHJpZ2dlcgkJPSBPTUFQMjRYWF9ETUFfVUFSVDNfVFgsCisJLnJ4X3RyaWdnZXIJCT0gT01BUDI0WFhfRE1BX1VBUlQzX1JYLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoNF9pcmRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gSU5UXzI0WFhfVUFSVDNfSVJRLAorCQkuZW5kCT0gSU5UXzI0WFhfVUFSVDNfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDRfaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBpcmRhIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmg0X2lyZGFfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSBoNF9pcmRhX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGg0X2twX2RhdGEgPSB7CisJLnJvd3MJCT0gNiwKKwkuY29scwkJPSA3LAorCS5rZXltYXAgCT0gaDRfa2V5bWFwLAorCS5yZXAJCT0gMSwKKwkucm93X2dwaW9zIAk9IHJvd19ncGlvcywKKwkuY29sX2dwaW9zIAk9IGNvbF9ncGlvcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGg0X2twX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcC1rZXlwYWQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaDRfa3BfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDRfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAibGNkX2g0IiwKKwkuaWQJCT0gLTEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaDRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmg0X3NtYzkxeF9kZXZpY2UsCiAJJmg0X2ZsYXNoX2RldmljZSwKKwkmaDRfaXJkYV9kZXZpY2UsCisJJmg0X2twX2RldmljZSwKKwkmaDRfbGNkX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaDRfaW5pdF9zbWM5MXgodm9pZCkKQEAgLTE1Nyw3ICszMTUsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgaDRfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5wYW5lbF9uYW1lCT0gImg0IiwKIAkuY3RybF9uYW1lCT0gImludGVybmFsIiwKIH07CiAKQEAgLTE3NCw2ICszMzEsMTkgQEAKIAkgKiBZb3UgaGF2ZSB0byBtdXggdGhlbSBvZmYgaW4gZGV2aWNlIGRyaXZlcnMgbGF0ZXIgb24KIAkgKiBpZiBub3QgbmVlZGVkLgogCSAqLworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfSVIpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfSVJfTU9EVUxFKQorCW9tYXBfY2ZnX3JlZyhLMTVfMjRYWF9VQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKEsxNF8yNFhYX1VBUlQzX1JYKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfT01BUF9NT0RVTEUpCisJaWYgKG9tYXBfaGFzX21lbmVsYXVzKCkpIHsKKwkJcm93X2dwaW9zWzVdID0gMDsKKwkJY29sX2dwaW9zWzJdID0gMTU7CisJCWNvbF9ncGlvc1s2XSA9IDE4OworCX0KKyNlbmRpZgorCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaDRfZGV2aWNlcywgQVJSQVlfU0laRShoNF9kZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoNF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDRfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwppbmRleCAxODBmNjc1Li43MmViNGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCkBAIC0yOCwxNCArMjgsMTQgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KIAorI2luY2x1ZGUgInByY20tcmVncy5oIgorI2luY2x1ZGUgIm1lbW9yeS5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKIC8vI2RlZmluZSBET1dOX1ZBUklBQkxFX0RQTEwgMQkJCS8qIEV4cGVyaW1lbnRhbCAqLwogCiBzdGF0aWMgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0Owotc3RhdGljIHN0cnVjdCBtZW1vcnlfdGltaW5ncyBtZW1fdGltaW5nczsKIHN0YXRpYyB1MzIgY3Vycl9wZXJmX2xldmVsID0gUFJDTV9GVUxMX1NQRUVEOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU0LDExICs1NCwxMyBAQAogCiBzdGF0aWMgdTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqIHRjbGspCiB7Ci0JaW50IGRwbGxfY2xrLCBkcGxsX211bHQsIGRwbGxfZGl2LCBhbXVsdDsKKwlsb25nIGxvbmcgZHBsbF9jbGs7CisJaW50IGRwbGxfbXVsdCwgZHBsbF9kaXYsIGFtdWx0OwogCiAJZHBsbF9tdWx0ID0gKENNX0NMS1NFTDFfUExMID4+IDEyKSAmIDB4MDNmZjsJLyogMTAgYml0cyAqLwogCWRwbGxfZGl2ID0gKENNX0NMS1NFTDFfUExMID4+IDgpICYgMHgwZjsJLyogNCBiaXRzICovCi0JZHBsbF9jbGsgPSAodGNsay0+cGFyZW50LT5yYXRlICogZHBsbF9tdWx0KSAvIChkcGxsX2RpdiArIDEpOworCWRwbGxfY2xrID0gKGxvbmcgbG9uZyl0Y2xrLT5wYXJlbnQtPnJhdGUgKiBkcGxsX211bHQ7CisJZG9fZGl2KGRwbGxfY2xrLCBkcGxsX2RpdiArIDEpOwogCWFtdWx0ID0gQ01fQ0xLU0VMMl9QTEwgJiAweDM7CiAJZHBsbF9jbGsgKj0gYW11bHQ7CiAKQEAgLTM4NSw3NSArMzg3LDIzIEBACiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMl9pbml0X21lbW9yeV9wYXJhbXModTMyIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpCi17Ci0JdW5zaWduZWQgbG9uZyBkbGxfY250OwotCXUzMiBmYXN0X2RsbCA9IDA7Ci0KLQltZW1fdGltaW5ncy5tX3R5cGUgPSAhKChTRFJDX01SXzAgJiAweDMpID09IDB4MSk7IC8qIEREUiA9IDEsIFNEUiA9IDAgKi8KLQotCS8qIDI0MjIgZXMyLjA1IGFuZCBiZXlvbmQgaGFzIGEgc2luZ2xlIFNJUCBERFIgaW5zdGVhZCBvZiAyIGxpa2Ugb3RoZXJzLgotCSAqIEluIHRoZSBjYXNlIG9mIDI0MjIsIGl0cyBvayB0byB1c2UgQ1MxIGluc3RlYWQgb2YgQ1MwLgotCSAqLwotCi0jaWYgMAkvKiBGSVhNRTogRW5hYmxlIGFmdGVyIDI0eHggY3B1IGRldGVjdGlvbiB3b3JrcyAqLwotCWN0eXBlID0gZ2V0X2NwdV90eXBlKCk7Ci0JaWYgKGNwdV9pc19vbWFwMjQyMigpKQotCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMTsKLQllbHNlCi0jZW5kaWYKLQkJbWVtX3RpbWluZ3MuYmFzZV9jcyA9IDA7Ci0KLQlpZiAobWVtX3RpbWluZ3MubV90eXBlICE9IE1fRERSKQotCQlyZXR1cm47Ci0KLQkvKiBXaXRoIEREUiB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgbG93IGZyZXF1ZW5jeSBETEwgdmFsdWUgKi8KLQlpZiAoKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgKDEgPDwgMikpID09IE1fTE9DS19DVFJMKSkKLQkJbWVtX3RpbWluZ3MuZGxsX21vZGUgPSBNX1VOTE9DSzsKLQllbHNlCi0JCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9MT0NLOwotCi0JaWYgKG1lbV90aW1pbmdzLmJhc2VfY3MgPT0gMCkgewotCQlmYXN0X2RsbCA9IFNEUkNfRExMQV9DVFJMOwotCQlkbGxfY250ID0gU0RSQ19ETExBX1NUQVRVUyAmIDB4ZmYwMDsKLQl9IGVsc2UgewotCQlmYXN0X2RsbCA9IFNEUkNfRExMQl9DVFJMOwotCQlkbGxfY250ID0gU0RSQ19ETExCX1NUQVRVUyAmIDB4ZmYwMDsKLQl9Ci0JaWYgKGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpIHsKLQkJZmFzdF9kbGwgJj0gfjB4ZmYwMDsKLQkJZmFzdF9kbGwgfD0gZGxsX2NudDsJCS8qIEN1cnJlbnQgbG9jayBtb2RlICovCi0JfQotCW1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgPSBmYXN0X2RsbDsKLQotCS8qIE5vIGRpc3J1cHRpb25zLCBERFIgd2lsbCBiZSBvZmZsaW5lICYgQy1BQkkgbm90IGZvbGxvd2VkICovCi0Jb21hcDJfc3JhbV9kZHJfaW5pdCgmbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCwKLQkJCSAgICBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsLAotCQkJICAgIG1lbV90aW1pbmdzLmJhc2VfY3MsCi0JCQkgICAgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7Ci0JbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCAmPSAweGZmMDA7CS8qIEtlZXAgbG9jayB2YWx1ZSAqLwotCi0JLyogVHVybiBzdGF0dXMgaW50byB1bmxvY2sgY3RybCAqLwotCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0KLQkJKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgMHhGKSB8ICgxIDw8IDIpKTsKLQotCS8qIDkwIGRlZ3JlZSBwaGFzZSBmb3IgYW55dGhpbmcgYmVsb3cgMTMzTWh6ICovCi0JbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PSAoMSA8PCAxKTsKLX0KLQogc3RhdGljIHUzMiBvbWFwMl9yZXByb2dyYW1fc2RyYyh1MzIgbGV2ZWwsIHUzMiBmb3JjZSkKIHsKKwl1MzIgc2xvd19kbGxfY3RybCwgZmFzdF9kbGxfY3RybCwgbV90eXBlOwogCXUzMiBwcmV2ID0gY3Vycl9wZXJmX2xldmVsLCBmbGFnczsKIAogCWlmICgoY3Vycl9wZXJmX2xldmVsID09IGxldmVsKSAmJiAhZm9yY2UpCiAJCXJldHVybiBwcmV2OwogCisJbV90eXBlID0gb21hcDJfbWVtb3J5X2dldF90eXBlKCk7CisJc2xvd19kbGxfY3RybCA9IG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCgpOworCWZhc3RfZGxsX2N0cmwgPSBvbWFwMl9tZW1vcnlfZ2V0X2Zhc3RfZGxsX2N0cmwoKTsKKwogCWlmIChsZXZlbCA9PSBQUkNNX0hBTEZfU1BFRUQpIHsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlQUkNNX1ZPTFRTRVRVUCA9IDB4ZmZmZjsKIAkJb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyhQUkNNX0hBTEZfU1BFRUQsCi0JCQkJCSAgbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCwKLQkJCQkJICBtZW1fdGltaW5ncy5tX3R5cGUpOworCQkJCQkgIHNsb3dfZGxsX2N0cmwsIG1fdHlwZSk7CiAJCWN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fSEFMRl9TUEVFRDsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KQEAgLTQ2MSw4ICs0MTEsNyBAQAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCVBSQ01fVk9MVFNFVFVQID0gMHhmZmZmOwogCQlvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKFBSQ01fRlVMTF9TUEVFRCwKLQkJCQkJICBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsLAotCQkJCQkgIG1lbV90aW1pbmdzLm1fdHlwZSk7CisJCQkJCSAgZmFzdF9kbGxfY3RybCwgbV90eXBlKTsKIAkJY3Vycl9wZXJmX2xldmVsID0gUFJDTV9GVUxMX1NQRUVEOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQpAQCAtNjUwLDcgKzU5OSw3IEBACiAJCWNhc2UgMTM6CQkJCS8qIGRzczIgKi8KIAkJCW1hc2sgPSAweDE7IGJyZWFrOwogCQljYXNlIDI1OgkJCQkvKiB1c2IgKi8KLQkJCW1hc2sgPSAweGY7IGJyZWFrOworCQkJbWFzayA9IDB4NzsgYnJlYWs7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAppbmRleCA2Y2FiMjBiLi42Yzc4ZDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC0zMywyMCArMzMsNiBAQAogI2RlZmluZSBSQVRFX0lOXzI0MlgJKDEgPDwgMCkKICNkZWZpbmUgUkFURV9JTl8yNDNYCSgxIDw8IDEpCiAKLS8qIE1lbW9yeSB0aW1pbmdzICovCi0jZGVmaW5lIE1fRERSCQkxCi0jZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCi0jZGVmaW5lIE1fVU5MT0NLCTAKLSNkZWZpbmUgTV9MT0NLCQkxCi0KLXN0cnVjdCBtZW1vcnlfdGltaW5ncyB7Ci0JdTMyIG1fdHlwZTsJCS8qIGRkciA9IDEsIHNkciA9IDAgKi8KLQl1MzIgZGxsX21vZGU7CQkvKiB1c2UgbG9jayBtb2RlID0gMSwgdW5sb2NrIG1vZGUgPSAwICovCi0JdTMyIHNsb3dfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIHNsb3cgc3BlZWQgKi8KLQl1MzIgZmFzdF9kbGxfY3RybDsJLyogdW5sb2NrIG1vZGUsIGRsbCB2YWx1ZSBmb3IgZmFzdCBzcGVlZCAqLwotCXUzMiBiYXNlX2NzOwkJLyogYmFzZSBjaGlwIHNlbGVjdCB0byB1c2UgZm9yIGNhbGN1bGF0aW9ucyAqLwotfTsKLQogLyogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KICAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSxDTV9DTEtTRUxfRFNQCiAgKiBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMIENNX0NMS1NFTDJfUExMLCBDTV9DTEtTRUxfTURNCkBAIC03MzEsNiArNzE3LDE2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdWxfY2sgPSB7CisJLm5hbWUJCT0gImVtdWxfY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtFTVVMX0NUUkwsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorCit9OworCiAvKgogICogTVBVIGNsb2NrIGRvbWFpbgogICoJQ2xvY2tzOgpAQCAtMTcwMiw3ICsxNjk4LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewotCS5uYW1lCQk9ICJpMmMyX2ljayIsCisJLm5hbWUJCT0gImkyY19pY2siLAorCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCkBAIC0xNzExLDcgKzE3MDgsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7Ci0JLm5hbWUJCT0gImkyYzJfZmNrIiwKKwkubmFtZQkJPSAiaTJjX2ZjayIsCisJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKQEAgLTE3MjksNyArMTcyNyw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKLQkubmFtZQkJPSAiaTJjMV9pY2siLAorCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLApAQCAtMTczOCw3ICsxNzM3LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfZmNrID0gewotCS5uYW1lCQk9ICJpMmMxX2ZjayIsCisJLm5hbWUJCT0gImkyY19mY2siLAorCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCkBAIC0xOTcxLDYgKzE5NzEsNyBAQAogCSZ3ZHQxX29zY19jaywKIAkmc3lzX2Nsa291dCwKIAkmc3lzX2Nsa291dDIsCisJJmVtdWxfY2ssCiAJLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KIAkmbXB1X2NrLAogCS8qIGRzcCBkb21haW4gY2xvY2tzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IDcxODFlZGIuLmZiN2Y5MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC0yNSwxMCArMjUsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAotZXh0ZXJuIHZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCiAKICNkZWZpbmUgT01BUDJfSTJDX0JBU0UyCQkweDQ4MDcyMDAwCkBAIC00OSw5ICs0NSw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2kyY19kZXZpY2UyID0gewogICAgICAgICAubmFtZSAgICAgICAgICAgPSAiaTJjX29tYXAiLAogICAgICAgICAuaWQgICAgICAgICAgICAgPSAyLAotICAgICAgICAuZGV2ID0gewotICAgICAgICAgICAgICAgIC5yZWxlYXNlICAgICAgICA9IG9tYXBfbm9wX3JlbGVhc2UsCi0gICAgICAgIH0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMyKSwKIAkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzMiwKIH07CkBAIC03NCw2ICs2Nyw0NCBAQAogCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfU1RJKQorCisjZGVmaW5lIE9NQVAyX1NUSV9CQVNFCQlJT19BRERSRVNTKDB4NDgwNjgwMDApCisjZGVmaW5lIE9NQVAyX1NUSV9DSEFOTkVMX0JBU0UJMHg1NDAwMDAwMAorI2RlZmluZSBPTUFQMl9TVElfSVJRCQk0CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9CQVNFLAorCQkuZW5kCQk9IE9NQVAyX1NUSV9CQVNFICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9DSEFOTkVMX0JBU0UsCisJCS5lbmQJCT0gT01BUDJfU1RJX0NIQU5ORUxfQkFTRSArIFNaXzY0SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9JUlEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdGlfZGV2aWNlID0geworCS5uYW1lCQk9ICJzdGkiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3RpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc3RpX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc3RpKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzdGlfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3N0aSh2b2lkKSB7fQorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAyX2luaXRfZGV2aWNlcyh2b2lkKQpAQCAtODIsNiArMTEzLDcgQEAKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwogCW9tYXBfaW5pdF9pMmMoKTsKKwlvbWFwX2luaXRfc3RpKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCA4ZWE2N2JmLi43ZDU3MTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0xNiw5ICsxNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcGZiLmg+CiAKIGV4dGVybiB2b2lkIG9tYXBfc3JhbV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKQEAgLTQzLDExICs0NywyNCBAQAogCX0KIH07CiAKLXZvaWQgX19pbml0IG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKQordm9pZCBfX2luaXQgb21hcDJfbWFwX2NvbW1vbl9pbyh2b2lkKQogewogCWlvdGFibGVfaW5pdChvbWFwMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyX2lvX2Rlc2MpKTsKKworCS8qIE5vcm1hbGx5IGRldmljZW1hcHNfaW5pdCgpIHdvdWxkIGZsdXNoIGNhY2hlcyBhbmQgdGxiIGFmdGVyCisJICogbWRlc2MtPm1hcF9pbygpLCBidXQgd2UgbXVzdCBhbHNvIGRvIGl0IGhlcmUgYmVjYXVzZSBvZiB0aGUgQ1BVCisJICogcmV2aXNpb24gY2hlY2sgYmVsb3cuCisJICovCisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCWZsdXNoX2NhY2hlX2FsbCgpOworCiAJb21hcDJfY2hlY2tfcmV2aXNpb24oKTsKIAlvbWFwX3NyYW1faW5pdCgpOworCW9tYXBmYl9yZXNlcnZlX21lbSgpOworfQorCit2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9odyh2b2lkKQorewogCW9tYXAyX211eF9pbml0KCk7CiAJb21hcDJfY2xrX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTI1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYworICoKKyAqIE1lbW9yeSB0aW1pbmcgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyNFhYCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CisKKyNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKKyNpbmNsdWRlICJtZW1vcnkuaCIKKworc3RhdGljIHN0cnVjdCBtZW1vcnlfdGltaW5ncyBtZW1fdGltaW5nczsKKwordTMyIG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCh2b2lkKQoreworCXJldHVybiBtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsOworfQorCit1MzIgb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKHZvaWQpCit7CisJcmV0dXJuIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmw7Cit9CisKK3UzMiBvbWFwMl9tZW1vcnlfZ2V0X3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gbWVtX3RpbWluZ3MubV90eXBlOworfQorCit2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CisJdTMyIGZhc3RfZGxsID0gMDsKKworCW1lbV90aW1pbmdzLm1fdHlwZSA9ICEoKFNEUkNfTVJfMCAmIDB4MykgPT0gMHgxKTsgLyogRERSID0gMSwgU0RSID0gMCAqLworCisJLyogMjQyMiBlczIuMDUgYW5kIGJleW9uZCBoYXMgYSBzaW5nbGUgU0lQIEREUiBpbnN0ZWFkIG9mIDIgbGlrZSBvdGhlcnMuCisJICogSW4gdGhlIGNhc2Ugb2YgMjQyMiwgaXRzIG9rIHRvIHVzZSBDUzEgaW5zdGVhZCBvZiBDUzAuCisJICovCisJaWYgKGNwdV9pc19vbWFwMjQyMigpKQorCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMTsKKwllbHNlCisJCW1lbV90aW1pbmdzLmJhc2VfY3MgPSAwOworCisJaWYgKG1lbV90aW1pbmdzLm1fdHlwZSAhPSBNX0REUikKKwkJcmV0dXJuOworCisJLyogV2l0aCBERFIgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGxvdyBmcmVxdWVuY3kgRExMIHZhbHVlICovCisJaWYgKCgobWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCAmICgxIDw8IDIpKSA9PSBNX0xPQ0tfQ1RSTCkpCisJCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9VTkxPQ0s7CisJZWxzZQorCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fTE9DSzsKKworCWlmIChtZW1fdGltaW5ncy5iYXNlX2NzID09IDApIHsKKwkJZmFzdF9kbGwgPSBTRFJDX0RMTEFfQ1RSTDsKKwkJZGxsX2NudCA9IFNEUkNfRExMQV9TVEFUVVMgJiAweGZmMDA7CisJfSBlbHNlIHsKKwkJZmFzdF9kbGwgPSBTRFJDX0RMTEJfQ1RSTDsKKwkJZGxsX2NudCA9IFNEUkNfRExMQl9TVEFUVVMgJiAweGZmMDA7CisJfQorCWlmIChmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKSB7CisJCWZhc3RfZGxsICY9IH4weGZmMDA7CisJCWZhc3RfZGxsIHw9IGRsbF9jbnQ7CQkvKiBDdXJyZW50IGxvY2sgbW9kZSAqLworCX0KKwkvKiBzZXQgZmFzdCB0aW1pbmdzIHdpdGggRExMIGZpbHRlciBkaXNhYmxlZCAqLworCW1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgPSAoZmFzdF9kbGwgfCAoMyA8PCA4KSk7CisKKwkvKiBObyBkaXNydXB0aW9ucywgRERSIHdpbGwgYmUgb2ZmbGluZSAmIEMtQUJJIG5vdCBmb2xsb3dlZCAqLworCW9tYXAyX3NyYW1fZGRyX2luaXQoJm1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwsCisJCQkgICAgbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCwKKwkJCSAgICBtZW1fdGltaW5ncy5iYXNlX2NzLAorCQkJICAgIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpOworCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgJj0gMHhmZjAwOwkvKiBLZWVwIGxvY2sgdmFsdWUgKi8KKworCS8qIFR1cm4gc3RhdHVzIGludG8gdW5sb2NrIGN0cmwgKi8KKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsIHw9CisJCSgobWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCAmIDB4RikgfCAoMSA8PCAyKSk7CisKKwkvKiA5MCBkZWdyZWUgcGhhc2UgZm9yIGFueXRoaW5nIGJlbG93IDEzM01oeiArIGRpc2FibGUgRExMIGZpbHRlciAqLworCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0gKCgxIDw8IDEpIHwgKDMgPDwgOCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIxMmVlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKKyAqCisgKiBJbnRlcmZhY2UgZm9yIG1lbW9yeSB0aW1pbmcgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyNFhYCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKiBNZW1vcnkgdGltaW5ncyAqLworI2RlZmluZSBNX0REUgkJMQorI2RlZmluZSBNX0xPQ0tfQ1RSTAkoMSA8PCAyKQorI2RlZmluZSBNX1VOTE9DSwkwCisjZGVmaW5lIE1fTE9DSwkJMQorCitzdHJ1Y3QgbWVtb3J5X3RpbWluZ3MgeworCXUzMiBtX3R5cGU7CQkvKiBkZHIgPSAxLCBzZHIgPSAwICovCisJdTMyIGRsbF9tb2RlOwkJLyogdXNlIGxvY2sgbW9kZSA9IDEsIHVubG9jayBtb2RlID0gMCAqLworCXUzMiBzbG93X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBzbG93IHNwZWVkICovCisJdTMyIGZhc3RfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIGZhc3Qgc3BlZWQgKi8KKwl1MzIgYmFzZV9jczsJCS8qIGJhc2UgY2hpcCBzZWxlY3QgdG8gdXNlIGZvciBjYWxjdWxhdGlvbnMgKi8KK307CisKK2V4dGVybiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7CitleHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCh2b2lkKTsKK2V4dGVybiB1MzIgb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKHZvaWQpOworZXh0ZXJuIHUzMiBvbWFwMl9tZW1vcnlfZ2V0X3R5cGUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCBlYTQ2NTQ4Li4xMTk3ZGMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTUwLDkgKzUwLDU0IEBACiAvKiBNZW5lbGF1cyBpbnRlcnJ1cHQgKi8KIE1VWF9DRkdfMjRYWCgiVzE5XzI0WFhfU1lTX05JUlEiLAkweDEyYywJMCwJMSwJMSwJMSkKIAorLyogMjR4eCBjbG9ja3MgKi8KK01VWF9DRkdfMjRYWCgiVzE0XzI0WFhfU1lTX0NMS09VVCIsCTB4MTM3LAkwLAkxLAkxLAkxKQorCisvKiAyNHh4IE1jQlNQICovCitNVVhfQ0ZHXzI0WFgoIlkxNV8yNFhYX01DQlNQMl9DTEtYIiwJMHgxMjQsCTEsCTEsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlIxNF8yNFhYX01DQlNQMl9GU1giLAkweDEyNSwJMSwJMSwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVzE1XzI0WFhfTUNCU1AyX0RSIiwJMHgxMjYsCTEsCTEsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlYxNV8yNFhYX01DQlNQMl9EWCIsCTB4MTI3LAkxLAkxLAkwLAkxKQorCiAvKiAyNHh4IEdQSU8gKi8KK01VWF9DRkdfMjRYWCgiTTIxXzI0MlhfR1BJTzExIiwJIDB4MGM5LCAgMywgICAgICAxLCAgICAgIDEsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUExMF8yNDJYX0dQSU8xMyIsCTB4MGU1LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUE2XzI0MlhfR1BJTzE0IiwJIDB4MGU2LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUE0XzI0MlhfR1BJTzE1IiwJIDB4MGU3LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiWTExXzI0MlhfR1BJTzE2IiwJIDB4MGU4LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUExMl8yNDJYX0dQSU8xNyIsCTB4MGU5LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUE4XzI0MlhfR1BJTzU4IiwJIDB4MGVhLCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKIE1VWF9DRkdfMjRYWCgiWTIwXzI0WFhfR1BJTzYwIiwJCTB4MTJjLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJXNF9fMjRYWF9HUElPNzQiLAkgMHgwZjIsICAzLCAgICAgIDAsICAgICAgMCwgICAgICAxKQogTVVYX0NGR18yNFhYKCJNMTVfMjRYWF9HUElPOTIiLAkJMHgxMGEsCTMsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlYxNF8yNFhYX0dQSU8xMTciLAkweDEyOCwJMywJMSwJMCwJMSkKKworLyogVFNDIElSUSAqLworTVVYX0NGR18yNFhYKCJQMjBfMjRYWF9UU0NfSVJRIiwJMHgxMDgsCTAsCTAsCTAsCTEpCisKKy8qIFVBUlQzICAqLworTVVYX0NGR18yNFhYKCJLMTVfMjRYWF9VQVJUM19UWCIsCTB4MTE4LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJLMTRfMjRYWF9VQVJUM19SWCIsCTB4MTE5LAkwLAkwLAkwLAkxKQorCisvKiBLZXlwYWQgR1BJTyovCitNVVhfQ0ZHXzI0WFgoIlQxOV8yNFhYX0tCUjAiLAkJMHgxMDYsCTMsCTEsCTEsCTEpCitNVVhfQ0ZHXzI0WFgoIlIxOV8yNFhYX0tCUjEiLAkJMHgxMDcsCTMsCTEsCTEsCTEpCitNVVhfQ0ZHXzI0WFgoIlYxOF8yNFhYX0tCUjIiLAkJMHgxMzksCTMsCTEsCTEsCTEpCitNVVhfQ0ZHXzI0WFgoIk0yMV8yNFhYX0tCUjMiLAkJMHhjOSwJMywJMSwJMSwJMSkKK01VWF9DRkdfMjRYWCgiRTVfXzI0WFhfS0JSNCIsCQkweDEzOCwJMywJMSwJMSwJMSkKK01VWF9DRkdfMjRYWCgiTTE4XzI0WFhfS0JSNSIsCQkweDEwZSwJMywJMSwJMSwJMSkKK01VWF9DRkdfMjRYWCgiUjIwXzI0WFhfS0JDMCIsCQkweDEwOCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiTTE0XzI0WFhfS0JDMSIsCQkweDEwOSwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSDE5XzI0WFhfS0JDMiIsCQkweDExNCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVjE3XzI0WFhfS0JDMyIsCQkweDEzNSwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiUDIxXzI0WFhfS0JDNCIsCQkweGNhLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJMMTRfMjRYWF9LQkM1IiwJCTB4MTBmLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJOMTlfMjRYWF9LQkM2IiwJCTB4MTEwLAkzLAkwLAkwLAkxKQorCisvKiAyNHh4IE1lbmVsYXVzIEtleXBhZCBHUElPICovCitNVVhfQ0ZHXzI0WFgoIkIzX18yNFhYX0tCUjUiLAkJMHgzMCwJMywJMSwJMSwJMSkKK01VWF9DRkdfMjRYWCgiQUE0XzI0WFhfS0JDMiIsCQkweGU3LAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJCMTNfMjRYWF9LQkM2IiwJCTB4MTEwLAkzLAkwLAkwLAkxKQogCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyMTY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYworICoKKyAqIE9NQVAyIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogQmFzZWQgb24gcG0uYyBmb3Igb21hcDEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKworc3RhdGljIHN0cnVjdCBjbGsgKnZjbGs7CitzdGF0aWMgdm9pZCAoKm9tYXAyX3NyYW1faWRsZSkodm9pZCk7CitzdGF0aWMgdm9pZCAoKm9tYXAyX3NyYW1fc3VzcGVuZCkoaW50IGRsbGN0cmwsIGludCBjcHVfcmV2KTsKK3N0YXRpYyB2b2lkICgqc2F2ZWRfaWRsZSkodm9pZCk7CisKK3ZvaWQgb21hcDJfcG1faWRsZSh2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfZmlxX2Rpc2FibGUoKTsKKwlpZiAobmVlZF9yZXNjaGVkKCkpIHsKKwkJbG9jYWxfZmlxX2VuYWJsZSgpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNpbmNlIGFuIGludGVycnVwdCBtYXkgc2V0IHVwIGEgdGltZXIsIHdlIGRvbid0IHdhbnQgdG8KKwkgKiByZXByb2dyYW0gdGhlIGhhcmR3YXJlIHRpbWVyIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLgorCSAqIFJlLWVuYWJsZSBpbnRlcnJ1cHRzIG9ubHkgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gaWRsZS4KKwkgKi8KKwl0aW1lcl9keW5fcmVwcm9ncmFtKCk7CisKKwlvbWFwMl9zcmFtX2lkbGUoKTsKKwlsb2NhbF9maXFfZW5hYmxlKCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW50IG9tYXAyX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWludCBlcnJvciA9IDA7CisKKwkvKiBXZSBjYW5ub3Qgc2xlZXAgaW4gaWRsZSB1bnRpbCB3ZSBoYXZlIHJlc3VtZWQgKi8KKwlzYXZlZF9pZGxlID0gcG1faWRsZTsKKwlwbV9pZGxlID0gTlVMTDsKKworCXN3aXRjaCAoc3RhdGUpCisJeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCWJyZWFrOworCisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpCisJeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCS8qIEZJWE1FOiBBZGQgc3VzcGVuZCAqLworCQlicmVhazsKKworCWNhc2UgUE1fU1VTUEVORF9ESVNLOgorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlwbV9pZGxlID0gc2F2ZWRfaWRsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbV9vcHMgb21hcF9wbV9vcHMgPSB7CisJLnBtX2Rpc2tfbW9kZQk9IDAsCisJLnByZXBhcmUJPSBvbWFwMl9wbV9wcmVwYXJlLAorCS5lbnRlcgkJPSBvbWFwMl9wbV9lbnRlciwKKwkuZmluaXNoCQk9IG9tYXAyX3BtX2ZpbmlzaCwKK307CisKK2ludCBfX2luaXQgb21hcDJfcG1faW5pdCh2b2lkKQoreworCXByaW50aygiUG93ZXIgTWFuYWdlbWVudCBmb3IgVEkgT01BUC5cbiIpOworCisJdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlpZiAoSVNfRVJSKHZjbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBQTSB2Y2xrXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyoKKwkgKiBXZSBjb3B5IHRoZSBhc3NlbWJsZXIgc2xlZXAvd2FrZXVwIHJvdXRpbmVzIHRvIFNSQU0uCisJICogVGhlc2Ugcm91dGluZXMgbmVlZCB0byBiZSBpbiBTUkFNIGFzIHRoYXQncyB0aGUgb25seQorCSAqIG1lbW9yeSB0aGUgTVBVIGNhbiBzZWUgd2hlbiBpdCB3YWtlcyB1cC4KKwkgKi8KKwlvbWFwMl9zcmFtX2lkbGUgPSBvbWFwX3NyYW1fcHVzaChvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCwKKwkJCQkJIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6KTsKKworCW9tYXAyX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAyNHh4X2NwdV9zdXNwZW5kLAorCQkJCQkgICAgb21hcDI0eHhfY3B1X3N1c3BlbmRfc3opOworCisJcG1fc2V0X29wcygmb21hcF9wbV9vcHMpOworCXBtX2lkbGUgPSBvbWFwMl9wbV9pZGxlOworCisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwob21hcDJfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1yZWdzLmgKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1yZWdzLmgKaW5kZXggMmViODliOS4uMjJhYzdiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLXJlZ3MuaApAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBwcmNtLmggLSBBY2Nlc3MgZGVmaW5hdGlvbnMgZm9yIHVzZSBpbiBPTUFQMjRYWCBjbG9jayBhbmQgcG93ZXIgbWFuYWdlbWVudAorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLXJlZy5oCisgKgorICogT01BUDI0WFggUG93ZXIgUmVzZXQgYW5kIENsb2NrIE1hbmFnZW1lbnQgKFBSQ00pIHJlZ2lzdGVycwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgogICoKQEAgLTE4LDggKzIwLDggQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICi0jZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSQ01fSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJDTV9ICiAKIC8qIFNFVF9QRVJGT1JNQU5DRV9MRVZFTCBQQVJBTUVURVJTICovCiAjZGVmaW5lIFBSQ01fSEFMRl9TUEVFRCAxCkBAIC0xNTksNTQgKzE2MSw2MyBAQAogI2RlZmluZSBDTV9GQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzAwKQogI2RlZmluZSBDTV9JQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzEwKQogI2RlZmluZSBDTV9JRExFU1RfTURNCQlQUkNNX1JFRzMyKDB4QzIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9NRE0JCVBSQ01fUkVHMzIoMHhDMzApCiAjZGVmaW5lIENNX0NMS1NFTF9NRE0JCVBSQ01fUkVHMzIoMHhDNDApCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9NRE0JUFJDTV9SRUczMigweEM0OCkKKyNkZWZpbmUgUk1fUlNUQ1RSTF9NRE0JCVBSQ01fUkVHMzIoMHhDNTApCisjZGVmaW5lIFJNX1JTVFNUX01ETQkJUFJDTV9SRUczMigweEM1OCkKKyNkZWZpbmUgUE1fV0tFTl9NRE0JCVBSQ01fUkVHMzIoMHhDQTApCisjZGVmaW5lIFBNX1dLU1RfTURNCQlQUkNNX1JFRzMyKDB4Q0IwKQorI2RlZmluZSBQTV9XS0RFUF9NRE0JCVBSQ01fUkVHMzIoMHhDQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX01ETQkJUFJDTV9SRUczMigweENFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX01ETQkJUFJDTV9SRUczMigweENFNCkKIAotLyogRklYTUU6IE1vdmUgdG8gaGVhZGVyIGZvciAyNDMwICovCi0jZGVmaW5lIERJU1BfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg1MDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfTDRfSU9fQkFTRQkweDQ4MDAwMDAwCisKKyNkZWZpbmUgRElTUF9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4NTAwMDApCiAjZGVmaW5lIERJU1BfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKERJU1BfQkFTRSArIChvZmZzZXQpKQogCi0jZGVmaW5lIEdQTUNfQkFTRQkJKE9NQVAyNFhYX0dQTUNfQkFTRSkKLSNkZWZpbmUgR1BNQ19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BNQ19CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIE9NQVAyNFhYX0dQTUNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHhhMDAwKQorI2RlZmluZSBHUE1DX1JFRzMyKG9mZnNldCkJX19SRUczMihPTUFQMjRYWF9HUE1DX0JBU0UgKyAob2Zmc2V0KSkKIAotI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQMjRYWF9HUFQxKQorLyogRklYTUU6IE1vdmUgdGhlc2UgdG8gdGltZXIgY29kZSAqLworI2RlZmluZSBHUFQxX0JBU0UJCSgweDQ4MDI4MDAwKQogI2RlZmluZSBHUFQxX1JFRzMyKG9mZnNldCkJX19SRUczMihHUFQxX0JBU0UgKyAob2Zmc2V0KSkKIAogLyogTWlzYyBzeXNjb25maWcgKi8KICNkZWZpbmUgRElTUENfU1lTQ09ORklHCQlESVNQX1JFRzMyKDB4NDEwKQotI2RlZmluZSBTUElfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5ODAwMCkKKyNkZWZpbmUgU1BJX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg5ODAwMCkKICNkZWZpbmUgTUNTUEkxX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFICsgMHgxMCkKLSNkZWZpbmUgTUNTUEkyX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFKzB4MjAwMCArIDB4MTApCisjZGVmaW5lIE1DU1BJMl9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSArIDB4MjAwMCArIDB4MTApCisjZGVmaW5lIE1DU1BJM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFICsgMHhiODAxMCkKIAotLy8jZGVmaW5lIERTUF9NTVVfU1lTQ09ORklHCTB4NUEwMDAwMTAKLSNkZWZpbmUgQ0FNRVJBX01NVV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHgyQzEwKQotLy8jZGVmaW5lIElWQV9NTVVfU1lTQ09ORklHCTB4NUQwMDAwMTAKLS8vI2RlZmluZSBEU1BfRE1BX1NZU0NPTkZJRwkweDAwRkNDMDJDCi0jZGVmaW5lIENBTUVSQV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MjgyQykKLSNkZWZpbmUgU1lTVEVNX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHg2MDJDKQorI2RlZmluZSBDQU1FUkFfTU1VX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSArIDB4MkMxMCkKKyNkZWZpbmUgQ0FNRVJBX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UgKyAweDI4MkMpCisjZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFICsgMHg2MDJDKQogI2RlZmluZSBHUE1DX1NZU0NPTkZJRwkJR1BNQ19SRUczMigweDAxMCkKLSNkZWZpbmUgTUFJTEJPWEVTX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5NDAxMCkKLSNkZWZpbmUgVUFSVDFfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2QTA1NCkKLSNkZWZpbmUgVUFSVDJfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2QzA1NCkKLSNkZWZpbmUgVUFSVDNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2RTA1NCkKLS8vI2RlZmluZSBJVkFfU1lTQ09ORklHCQkweDVDMDYwMDEwCi0jZGVmaW5lIFNEUkNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDEwKQotI2RlZmluZSBTTVNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NNU19CQVNFKzB4MTApCi0jZGVmaW5lIFNTSV9TWVNDT05GSUcJCV9fUkVHMzIoRElTUF9CQVNFKzB4ODAxMCkKLS8vI2RlZmluZSBWTFlOUV9TWVNDT05GSUcJMHg2N0ZGRkUxMAorI2RlZmluZSBNQUlMQk9YRVNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4OTQwMTApCisjZGVmaW5lIFVBUlQxX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg2QTA1NCkKKyNkZWZpbmUgVUFSVDJfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDZDMDU0KQorI2RlZmluZSBVQVJUM19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4NkUwNTQpCisjZGVmaW5lIFNEUkNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MTApCisjZGVmaW5lIE9NQVAyNFhYX1NNU19CQVNFCShMM18yNFhYX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIFNNU19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfU01TX0JBU0UgKyAweDEwKQorI2RlZmluZSBTU0lfU1lTQ09ORklHCQlfX1JFRzMyKERJU1BfQkFTRSArIDB4ODAxMCkKIAogLyogcmt3IC0gZ29vZCBjYW5uaWRhdGVzIGZvciBQTV8gdG8gc3RhcnQgd2hhdCBubSB3YXMgdHJ5aW5nICovCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4MkEwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDQJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0EwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0MwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0UwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDcJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODAwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODIwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODQwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDEwCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg2MDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4ODAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OEEwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHgyQTAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMwkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDc4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ0CQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4N0EwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg3QzAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUNgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDdFMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ3CQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4ODAwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg4MjAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUOQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDg0MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDg4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDhBMDAwKQogCisvKiBGSVhNRTogTW92ZSB0aGVzZSB0byB0aW1lciBjb2RlICovCiAjZGVmaW5lIEdQVElNRVIxX1NZU0NPTkZJRwlHUFQxX1JFRzMyKDB4MDEwKQogI2RlZmluZSBHUFRJTUVSMl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQyICsgMHgxMCkKICNkZWZpbmUgR1BUSU1FUjNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMyArIDB4MTApCkBAIC0yMjAsMTIgKzIzMSwxOCBAQAogI2RlZmluZSBHUFRJTUVSMTFfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTEgKyAweDEwKQogI2RlZmluZSBHUFRJTUVSMTJfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTIgKyAweDEwKQogCi0jZGVmaW5lIEdQSU9YX0JBU0UoWCkJCShPTUFQMjRYWF9HUElPX0JBU0UrKDB4MjAwMCooKFgpLTEpKSkKKy8qIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIGdwaW8gY29kZSAqLworI2RlZmluZSBPTUFQMjRYWF9HUElPX0JBU0UJMHg0ODAxODAwMAorI2RlZmluZSBHUElPWF9CQVNFKFgpCQkoT01BUDI0WFhfR1BJT19CQVNFICsgKDB4MjAwMCAqICgoWCkgLSAxKSkpCiAKLSNkZWZpbmUgR1BJTzFfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDEpKzB4MTApKQotI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikrMHgxMCkpCi0jZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSsweDEwKSkKLSNkZWZpbmUgR1BJTzRfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDQpKzB4MTApKQorI2RlZmluZSBHUElPMV9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMSkgKyAweDEwKSkKKyNkZWZpbmUgR1BJTzJfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDIpICsgMHgxMCkpCisjZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSArIDB4MTApKQorI2RlZmluZSBHUElPNF9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoNCkgKyAweDEwKSkKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0M1gpCisjZGVmaW5lIEdQSU81X1NZU0NPTkZJRwkJX19SRUczMigoT01BUDI0WFhfR1BJTzVfQkFTRSArIDB4MTApKQorI2VuZGlmCiAKIC8qIEdQIFRJTUVSIDEgKi8KICNkZWZpbmUgR1BUSU1FUjFfVElTVEFUCQlHUFQxX1JFRzMyKDB4MDE0KQpAQCAtMjQzLDE1ICsyNjAsMTUgQEAKICNkZWZpbmUgR1BUSU1FUjFfVENBUjIJCUdQVDFfUkVHMzIoMHgwNDQpCiAKIC8qIHJrdyAtLSBiYXNlIGZpeCB1cCBwbGVhc2UuLi4gKi8KLSNkZWZpbmUgR1BUSU1FUjNfVElTUgkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMTgpCisjZGVmaW5lIEdQVElNRVIzX1RJU1IJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4NzgwMTgpCiAKIC8qIFNEUkMgKi8KLSNkZWZpbmUgU0RSQ19ETExBX0NUUkwJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDYwKQotI2RlZmluZSBTRFJDX0RMTEFfU1RBVFVTCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDY0KQotI2RlZmluZSBTRFJDX0RMTEJfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjgpCi0jZGVmaW5lIFNEUkNfRExMQl9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNkMpCi0jZGVmaW5lIFNEUkNfUE9XRVIJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDcwKQotI2RlZmluZSBTRFJDX01SXzAJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDg0KQorI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDA2MCkKKyNkZWZpbmUgU0RSQ19ETExBX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDY0KQorI2RlZmluZSBTRFJDX0RMTEJfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDA2OCkKKyNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDZDKQorI2RlZmluZSBTRFJDX1BPV0VSCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDcwKQorI2RlZmluZSBTRFJDX01SXzAJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFICsgMHgwODQpCiAKIC8qIEdQSU8gMSAqLwogI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCkBAIC0yNzgsNiArMjk1LDggQEAKICNkZWZpbmUgR1BJTzJfREFUQUlOCQlHUElPMl9SRUczMigweDAzOCkKICNkZWZpbmUgR1BJTzJfT0UJCUdQSU8yX1JFRzMyKDB4MDM0KQogI2RlZmluZSBHUElPMl9EQVRBT1VUCQlHUElPMl9SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzJfREVCT1VOQ0VOQUJMRQlHUElPMl9SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzJfREVCT1VOQ0lOR1RJTUUJR1BJTzJfUkVHMzIoMHgwNTQpCiAKIC8qIEdQSU8gMyAqLwogI2RlZmluZSBHUElPM19CQVNFCQlHUElPWF9CQVNFKDMpCkBAIC0yOTQsNiArMzEzLDggQEAKICNkZWZpbmUgR1BJTzNfREFUQU9VVAkJR1BJTzNfUkVHMzIoMHgwM0MpCiAjZGVmaW5lIEdQSU8zX0RFQk9VTkNFTkFCTEUJR1BJTzNfUkVHMzIoMHgwNTApCiAjZGVmaW5lIEdQSU8zX0RFQk9VTkNJTkdUSU1FCUdQSU8zX1JFRzMyKDB4MDU0KQorI2RlZmluZSBHUElPM19ERUJPVU5DRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPM19ERUJPVU5DSU5HVElNRQlHUElPM19SRUczMigweDA1NCkKIAogLyogR1BJTyA0ICovCiAjZGVmaW5lIEdQSU80X0JBU0UJCUdQSU9YX0JBU0UoNCkKQEAgLTMxMSwxMCArMzMyLDI2IEBACiAjZGVmaW5lIEdQSU80X0RFQk9VTkNFTkFCTEUJR1BJTzRfUkVHMzIoMHgwNTApCiAjZGVmaW5lIEdQSU80X0RFQk9VTkNJTkdUSU1FCUdQSU80X1JFRzMyKDB4MDU0KQogCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzWCkKKy8qIEdQSU8gNSAqLworI2RlZmluZSBHUElPNV9SRUczMihvZmZzZXQpCV9fUkVHMzIoKE9NQVAyNFhYX0dQSU81X0JBU0UgKyAob2Zmc2V0KSkpCisjZGVmaW5lIEdQSU81X0lSUUVOQUJMRTEJR1BJTzVfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU81X0lSUVNUQVRVUzEJR1BJTzVfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU81X0lSUUVOQUJMRTIJR1BJTzVfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU81X0lSUVNUQVRVUzIJR1BJTzVfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU81X1dBS0VVUEVOQUJMRQlHUElPNV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzVfUklTSU5HREVURUNUCUdQSU81X1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPNV9GQUxMSU5HREVURUNUCUdQSU81X1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPNV9EQVRBSU4JCUdQSU81X1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPNV9PRQkJR1BJTzVfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU81X0RBVEFPVVQJCUdQSU81X1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPNV9ERUJPVU5DRU5BQkxFCUdQSU81X1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPNV9ERUJPVU5DSU5HVElNRQlHUElPNV9SRUczMigweDA1NCkKKyNlbmRpZgogCiAvKiBJTyBDT05GSUcgKi8KLSNkZWZpbmUgQ09OVFJPTF9CQVNFCQkoT01BUDI0WFhfQ1RSTF9CQVNFKQotI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJX19SRUczMihDT05UUk9MX0JBU0UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgT01BUDI0WFhfQ1RSTF9CQVNFCQkoTDRfMjRYWF9CQVNFKQorI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJCV9fUkVHMzIoT01BUDI0WFhfQ1RSTF9CQVNFICsgKG9mZnNldCkpCiAKICNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMglDT05UUk9MX1JFRzMyKDB4MTA0KQogI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1lTX1hUQUxPVVQJQ09OVFJPTF9SRUczMigweDEzNCkKQEAgLTMyMiwxNSArMzU5LDE4IEBACiAjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFgJQ09OVFJPTF9SRUczMigweDEwQykKICNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNAlDT05UUk9MX1JFRzMyKDB4MDkwKQogI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q1CQlDT05UUk9MX1JFRzMyKDB4MEI4KQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q5CQlDT05UUk9MX1JFRzMyKDB4MEJDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q5CQlDT05UUk9MX1JFRzMyKDB4MEJDKQkvKiAyNDIwICovCiAjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQogI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfTklSUVcwCUNPTlRST0xfUkVHMzIoMHgwQkMpCS8qIDI0MzAgKi8KKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NTSTFfRkxBR19UWAlDT05UUk9MX1JFRzMyKDB4MTA4KQkvKiAyNDMwICovCiAKIC8qIENPTlRST0wgKi8KICNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQorI2RlZmluZSBDT05UUk9MX0RFVkNPTkYxCUNPTlRST0xfUkVHMzIoMHgyRTgpCiAKIC8qIElOVEVSUlVQVCBDT05UUk9MTEVSICovCi0jZGVmaW5lIElOVENfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHhmZTAwMCkKKyNkZWZpbmUgSU5UQ19CQVNFCQkoKEw0XzI0WFhfQkFTRSkgKyAweGZlMDAwKQogI2RlZmluZSBJTlRDX1JFRzMyKG9mZnNldCkJX19SRUczMihJTlRDX0JBU0UgKyAob2Zmc2V0KSkKIAogI2RlZmluZSBJTlRDMV9VX0JBU0UJCUlOVENfUkVHMzIoMHgwMDApCkBAIC0zNDgsMTAgKzM4OCwxMiBAQAogI2RlZmluZSBJTlRDX0lTUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwRDQpCiAjZGVmaW5lIElOVENfU0lSX0lSUQkJSU5UQ19SRUczMigweDA0MCkKICNkZWZpbmUgSU5UQ19DT05UUk9MCQlJTlRDX1JFRzMyKDB4MDQ4KQotI2RlZmluZSBJTlRDX0lMUjExCQlJTlRDX1JFRzMyKDB4MTJDKQorI2RlZmluZSBJTlRDX0lMUjExCQlJTlRDX1JFRzMyKDB4MTJDKQkvKiBQUkNNIG9uIE1QVSBQSUMgKi8KKyNkZWZpbmUgSU5UQ19JTFIzMAkJSU5UQ19SRUczMigweDE3OCkKKyNkZWZpbmUgSU5UQ19JTFIzMQkJSU5UQ19SRUczMigweDE3QykKICNkZWZpbmUgSU5UQ19JTFIzMgkJSU5UQ19SRUczMigweDE4MCkKLSNkZWZpbmUgSU5UQ19JTFIzNwkJSU5UQ19SRUczMigweDE5NCkKLSNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCUlOVENfUkVHMzIoMHgwMTApCisjZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCS8qIEdQSU80IG9uIE1QVSBQSUMgKi8KKyNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCUlOVENfUkVHMzIoMHgwMTApCS8qIEdQVDEgb24gTVBVIFBJQyAqLwogCiAvKiBSQU0gRklSRVdBTEwgKi8KICNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCkBAIC0zNzMsNiArNDE1LDI0IEBACiAjZGVmaW5lIEdQTUNfQ09ORklHNl8wCQlHUE1DX1JFRzMyKDB4MDc0KQogI2RlZmluZSBHUE1DX0NPTkZJRzdfMAkJR1BNQ19SRUczMigweDA3OCkKIAorLyogR1BNQyBDUzEgKi8KKyNkZWZpbmUgR1BNQ19DT05GSUcxXzEJCUdQTUNfUkVHMzIoMHgwOTApCisjZGVmaW5lIEdQTUNfQ09ORklHMl8xCQlHUE1DX1JFRzMyKDB4MDk0KQorI2RlZmluZSBHUE1DX0NPTkZJRzNfMQkJR1BNQ19SRUczMigweDA5OCkKKyNkZWZpbmUgR1BNQ19DT05GSUc0XzEJCUdQTUNfUkVHMzIoMHgwOUMpCisjZGVmaW5lIEdQTUNfQ09ORklHNV8xCQlHUE1DX1JFRzMyKDB4MGEwKQorI2RlZmluZSBHUE1DX0NPTkZJRzZfMQkJR1BNQ19SRUczMigweDBhNCkKKyNkZWZpbmUgR1BNQ19DT05GSUc3XzEJCUdQTUNfUkVHMzIoMHgwYTgpCisKKy8qIEdQTUMgQ1MzICovCisjZGVmaW5lIEdQTUNfQ09ORklHMV8zCQlHUE1DX1JFRzMyKDB4MEYwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMwkJR1BNQ19SRUczMigweDBGNCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzMJCUdQTUNfUkVHMzIoMHgwRjgpCisjZGVmaW5lIEdQTUNfQ09ORklHNF8zCQlHUE1DX1JFRzMyKDB4MEZDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMwkJR1BNQ19SRUczMigweDEwMCkKKyNkZWZpbmUgR1BNQ19DT05GSUc2XzMJCUdQTUNfUkVHMzIoMHgxMDQpCisjZGVmaW5lIEdQTUNfQ09ORklHN18zCQlHUE1DX1JFRzMyKDB4MTA4KQorCiAvKiBEU1MgKi8KICNkZWZpbmUgRFNTX0NPTlRST0wJCURJU1BfUkVHMzIoMHgwNDApCiAjZGVmaW5lIERJU1BDX0NPTlRST0wJCURJU1BfUkVHMzIoMHg0NDApCkBAIC00MDUsMTEgKzQ2NSwxNSBAQAogI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMglESVNQX1JFRzMyKDB4NUQ4KQogI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMwlESVNQX1JFRzMyKDB4NURDKQogCi0vKiBXYWtlIHVwIGRlZmluZSBmb3IgYm9hcmQgKi8KLSNkZWZpbmUgR1BJTzk3CQkJKDEgPDwgMSkKLSNkZWZpbmUgR1BJTzg4CQkJKDEgPDwgMjQpCisvKiBIU1VTQiBTdXNwZW5kICovCisjZGVmaW5lIEhTVVNCX0NUUkwJCV9fUkVHOCgweDQ4MEFDMDAxKQorI2RlZmluZSBVU0JPVEdfUE9XRVIJCV9fUkVHMzIoMHg0ODBBQzAwMCkKIAotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KKy8qIEhTIE1NQyAqLworI2RlZmluZSBNTUNIUzFfU1lTQ09ORklHCV9fUkVHMzIoMHg0ODA5QzAxMCkKKyNkZWZpbmUgTU1DSFMyX1NZU0NPTkZJRwlfX1JFRzMyKDB4NDgwYjQwMTApCisKKyNlbmRpZgkvKiBfX0FTU0VNQkxFUl9fICovCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OTM0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYwpAQCAtMCwwICsxLDQwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMKKyAqCisgKiBPTUFQIDI0eHggUG93ZXIgUmVzZXQgYW5kIENsb2NrIE1hbmFnZW1lbnQgKFBSQ00pIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueS5saW5kZ3JlbkBub2tpYS5jb20+CisgKgorICogU29tZSBwaWVjZXMgb2YgY29kZSBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSAicHJjbS1yZWdzLmgiCisKK3UzMiBvbWFwX3ByY21fZ2V0X3Jlc2V0X3NvdXJjZXModm9pZCkKK3sKKwlyZXR1cm4gUk1fUlNUU1RfV0tVUCAmIDB4N2Y7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfcHJjbV9nZXRfcmVzZXRfc291cmNlcyk7CisKKy8qIFJlc2V0cyBjbG9jayByYXRlcyBhbmQgcmVib290cyB0aGUgc3lzdGVtLiBPbmx5IGNhbGxlZCBmcm9tIHN5c3RlbS5oICovCit2b2lkIG9tYXBfcHJjbV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwl1MzIgcmF0ZTsKKwlzdHJ1Y3QgY2xrICp2Y2xrLCAqc2NsazsKKworCXZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7CisJc2NsayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisJY2xrX3NldF9yYXRlKHZjbGssIHJhdGUpOwkvKiBnbyB0byBieXBhc3MgZm9yIE9NQVAgbGltaXRhdGlvbiAqLworCVJNX1JTVENUUkxfV0tVUCB8PSAyOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMjk5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgL1BVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorCisjZGVmaW5lIEFfMzJLU1lOQ19DUl9WCQlJT19BRERSRVNTKE9NQVBfVElNRVIzMktfQkFTRSsweDEwKQorI2RlZmluZSBBX1BSQ01fVk9MVENUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDUwKQorI2RlZmluZSBBX1BSQ01fQ0xLQ0ZHX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDgwKQorI2RlZmluZSBBX0NNX0NMS0VOX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFKzB4NTAwKQorI2RlZmluZSBBX0NNX0lETEVTVF9DS0dFTl9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFKzB4NTIwKQorI2RlZmluZSBBX0NNX0NMS1NFTDFfUExMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UrMHg1NDApCisjZGVmaW5lIEFfQ01fQ0xLU0VMMl9QTExfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDU0NCkKKworI2RlZmluZSBBX1NEUkNfRExMQV9DVFJMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9TRFJDX0JBU0UrMHg2MCkKKyNkZWZpbmUJQV9TRFJDX1BPV0VSX1YJCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFKzB4NzApCisjZGVmaW5lIEFfU0RSQ19SRlJfQ1RSTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFKzB4QTQpCisjZGVmaW5lIEFfU0RSQzBfVgkJKDB4QzAwMDAwMDApCisjZGVmaW5lIEFfU0RSQ19NQU5VQUxfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9TRFJDX0JBU0UrMHhBOCkKKworCS50ZXh0CisKKy8qCisgKiBGb3JjZXMgT01BUCBpbnRvIGlkbGUgc3RhdGUKKyAqCisgKiBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCgpIC0gVGhpcyBiaXQgb2YgY29kZSBqdXN0IGV4ZWN1dGVzIHRoZSBXRkkKKyAqIGZvciBub3JtYWwgaWRsZXMuCisgKgorICogTm90ZTogVGhpcyBjb2RlIGdldCdzIGNvcGllZCB0byBpbnRlcm5hbCBTUkFNIGF0IGJvb3QuIFdoZW4gdGhlIE9NQVAKKyAqCSB3YWtlcyB1cCBpdCBjb250aW51ZXMgZXhlY3V0aW9uIGF0IHRoZSBwb2ludCBpdCB3ZW50IHRvIHNsZWVwLgorICovCitFTlRSWShvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyMCwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJbW92CXIwLCAjMAkJCUAgY2xlYXIgZm9yIG1jciBzZXR1cAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKwlsZG1mZAlzcCEsIHtyMCwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0VOVFJZKG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZAorCisvKgorICogb21hcDI0MnhfY3B1X3N1c3BlbmQoKSAtIEZvcmNlcyBPTUFQIGludG8gZGVlcCBzbGVlcCBzdGF0ZSBieSBjb21wbGV0aW5nCisgKiBTRFJDIHNodXRkb3duIHRoZW4gQVJNIHNodXRkb3duLiAgVXBvbiB3YWtlIE1QVSBpcyBiYWNrIG9uIHNvIGp1c3QgcmVzdG9yZQorICogU0RSQy4KKyAqCisgKiBJbnB1dDoKKyAqIFIwIDoJRExMIGN0cmwgdmFsdWUgcHJlLVNsZWVwCisgKiBSMSA6IFByb2Nlc3NvcitSZXZpc2lvbgorICoJMjQyMDogMHgyMSA9IDI0MnhFUzEsIDB4MjYgPSAyNDJ4RVMyLjIKKyAqCTI0MzA6IDB4MzEgPSAyNDMwRVMxLCAweDMyID0gMjQzMEVTMgorICoKKyAqIFRoZSBpZiB0aGUgRFBMTCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFjayBvbgorICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4gIFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCisgKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRlIHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KKyAqIGlmIGluIHVubG9ja2VkIG1vZGUuCisgKgorICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24gd2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKKyAqIG9zY2lsbGF0b3Igd2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAxMk1IegorICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMgYXQgRFNQIGFuZCBJVkEuCisgKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dpdGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCisgKiBQb3N0IHNsZWVwIHdlIHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCisgKiBDTV9JRExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlvdSBuZWVkIHRvIHdhaXQKKyAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3aXRjaC4KKyAqCisgKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9OIG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKyAqIGF0IHdha2UKKyAqLworRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmQpCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbAorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGhvcGUgU0RSL0REUiBmaW5pc2hlZAorCW5vcAorCW5vcAorCWxkcglyMywgQV9TRFJDX1BPV0VSCUAgYWRkciBvZiBzZHJjIHBvd2VyCisJbGRyCXI0LCBbcjNdCQlAIHZhbHVlIG9mIHNkcmMgcG93ZXIKKwlvcnIJcjQsIHI0LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCisJbW92CXI1LCAjMHgyMDAwCQlAIHNldCBkZWxheSAoRFBMTCByZWxvY2sgKyBETEwgcmVsb2NrKQorCXN0cglyNCwgW3IzXQkJQCBtYWtlIGl0IHNvCisJbW92CXIyLCAjMAorCW5vcAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKwlub3AKK2xvb3A6CisJc3VicwlyNSwgcjUsICMweDEJCUAgYXdha2UsIHdhaXQganVzdCBhIGJpdAorCWJuZQlsb29wCisKKwkvKiBUaGUgRFBMTCBoYXMgb24gYmVmb3JlIHdlIHRha2UgdGhlIEREUiBvdXQgb2Ygc2VsZiByZWZyZXNoICovCisJYmljCXI0LCByNCwgIzB4NDAJCUAgbm93IGNsZWFyIHNlbGYgcmVmcmVzaCBiaXQuCisJc3RyCXI0LCBbcjNdCQlAIHB1dCB2bGF1ZSBiYWNrLgorCWxkcglyNCwgQV9TRFJDMAkJQCBtYWtlIGEgY2xvY2sgaGFwcGVuCisJbGRyCXI0LCBbcjRdCisJbm9wCQkJCUAgc3RhcnQgYXV0byByZWZyZXNoIG9ubHkgYWZ0ZXIgY2xrIG9rCisJbW92cwlyMCwgcjAJCQlAIHNlZSBpZiBERFIgb3IgU0RSCisJbGRybmUJcjEsIEFfU0RSQ19ETExBX0NUUkxfUwlAIGdldCBhZGRyIG9mIERMTCBjdHJsCisJc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExBIHRvIGZvcmNlIERMTCByZWxvYWQKKwlhZGRuZQlyMSwgcjEsICMweDgJCUAgbW92ZSB0byBETExCCisJc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExCIHRvIGZvcmNlIERMTCByZWxvYWQKKworCW1vdglyNSwgIzB4MTAwMAorbG9vcDI6CisJc3VicwlyNSwgcjUsICMweDEKKwlibmUJbG9vcDIKKwkvKiByZXN1bWUqLworCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCitBX1NEUkNfUE9XRVI6CisJLndvcmQgQV9TRFJDX1BPV0VSX1YKK0FfU0RSQzA6CisJLndvcmQgQV9TRFJDMF9WCitBX0NNX0NMS1NFTDJfUExMX1M6CisJLndvcmQgQV9DTV9DTEtTRUwyX1BMTF9WCitBX0NNX0NMS0VOX1BMTDoKKwkud29yZCBBX0NNX0NMS0VOX1BMTF9WCitBX1NEUkNfRExMQV9DVFJMX1M6CisJLndvcmQgQV9TRFJDX0RMTEFfQ1RSTF9WCitBX1NEUkNfTUFOVUFMX1M6CisJLndvcmQgQV9TRFJDX01BTlVBTF9WCisKK0VOVFJZKG9tYXAyNHh4X2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwMjR4eF9jcHVfc3VzcGVuZAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCmluZGV4IDJhODY5ZTIuLmQyNjFlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvc3JhbS5TCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uUwogICoKICAqIE9tYXAyIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KICAqCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KKyNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKIAogI2RlZmluZSBUSU1FUl8zMktTWU5DVF9DUl9WCUlPX0FERFJFU1MoT01BUDI0WFhfMzJLU1lOQ1RfQkFTRSArIDB4MDEwKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwppbmRleCA2ODkyM2IxLi5kNmQ3MjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKQEAgLTE0MSw2ICsxNDEsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gY29yZ2lfYmxfbWFjaGluZm8gPSB7CiAJLm1heF9pbnRlbnNpdHkgPSAweDJmLAorCS5kZWZhdWx0X2ludGVuc2l0eSA9IDB4MWYsCisJLmxpbWl0X21hc2sgPSAweDBiLAogCS5zZXRfYmxfaW50ZW5zaXR5ID0gY29yZ2lfYmxfc2V0X2ludGVuc2l0eSwKIH07CiAKQEAgLTE2NCw2ICsxNjYsMTQgQEAKIAogCiAvKgorICogQ29yZ2kgTEVEcworICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaWxlZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImNvcmdpLWxlZCIsCisJLmlkCQk9IC0xLAorfTsKKworLyoKICAqIENvcmdpIFRvdWNoIFNjcmVlbiBEZXZpY2UKICAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb3JnaXRzX3Jlc291cmNlc1tdID0gewpAQCAtMjk3LDYgKzMwNyw3IEBACiAJJmNvcmdpa2JkX2RldmljZSwKIAkmY29yZ2libF9kZXZpY2UsCiAJJmNvcmdpdHNfZGV2aWNlLAorCSZjb3JnaWxlZF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY29yZ2lfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwppbmRleCBiMzcxZDcyLi44YTI1YTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwpAQCAtMTk2LDEyICsxOTYsOSBAQAogCWludCByZXQ7CiAKIAkvKiBDaGlwIFNlbGVjdCAtIERpc2FibGUgQWxsICovCi0JR1BEUihzc3BfbWFjaGluZm8tPmNzX2xjZGNvbikgfD0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pOyAvKiBvdXRwdXQgKi8KLQlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKTsgIC8qIEhpZ2ggLSBEaXNhYmxlIExDRCBDb250cm9sL1RpbWluZyBHZW4gKi8KLQlHUERSKHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSkgfD0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKTsgLyogb3V0cHV0ICovCi0JR1BTUihzc3BfbWFjaGluZm8tPmNzX21heDExMTEpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKTsgIC8qIEhpZ2ggLSBEaXNhYmxlIE1BWDExMTEqLwotCUdQRFIoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSB8PSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOyAgLyogb3V0cHV0ICovCi0JR1BTUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsgICAvKiBIaWdoIC0gRGlzYWJsZSBBRFM3ODQ2Ki8KKwlweGFfZ3Bpb19tb2RlKHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uICB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOworICAgICAgICBweGFfZ3Bpb19tb2RlKHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOworICAgICAgICBweGFfZ3Bpb19tb2RlKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NiB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOwogCiAJcmV0ID0gc3NwX2luaXQoJmNvcmdpX3NzcF9kZXYsIHNzcF9tYWNoaW5mby0+cG9ydCwgMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKaW5kZXggNDU4MTEyYi4uN2Q4Yzg1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKQEAgLTQ1LDIzICs0NSwxNiBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0JLyogdHJ5IGdyYWJiaW5nIGEgRE1BIGNoYW5uZWwgd2l0aCB0aGUgcmVxdWVzdGVkIHByaW9yaXR5ICovCi0JZm9yIChpID0gcHJpbzsgaSA8IHByaW8gKyBQWEFfRE1BX05CQ0gocHJpbyk7IGkrKykgewotCQlpZiAoIWRtYV9jaGFubmVsc1tpXS5uYW1lKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpIHsKLQkJLyogcmVxdWVzdGVkIHByaW8gZ3JvdXAgaXMgZnVsbCwgdHJ5IGhpZXIgcHJpb3JpdGllcyAqLwotCQlmb3IgKGkgPSBwcmlvLTE7IGkgPj0gMDsgaS0tKSB7CisJZG8geworCQkvKiB0cnkgZ3JhYmJpbmcgYSBETUEgY2hhbm5lbCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgKi8KKwkJcHhhX2Zvcl9lYWNoX2RtYV9wcmlvIChpLCBwcmlvKSB7CiAJCQlpZiAoIWRtYV9jaGFubmVsc1tpXS5uYW1lKSB7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JfQorCQkvKiBpZiByZXF1ZXN0ZWQgcHJpbyBncm91cCBpcyBmdWxsLCB0cnkgYSBoaWVyIHByaW9yaXR5ICovCisJfSB3aGlsZSAoIWZvdW5kICYmIHByaW8tLSk7CiAKIAlpZiAoZm91bmQpIHsKIAkJRENTUihpKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKaW5kZXggOTgzNTZmOC4uYjMwN2YxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKQEAgLTk1LDcgKzk1LDEwIEBACiAJZm9yKGlycSA9IE1BSU5TVE9ORV9JUlEoMCk7IGlycSA8PSBNQUlOU1RPTkVfSVJRKDE1KTsgaXJxKyspIHsKIAkJc2V0X2lycV9jaGlwKGlycSwgJm1haW5zdG9uZV9pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCWlmIChpcnEgPT0gTUFJTlNUT05FX0lSUSgxMCkgfHwgaXJxID09IE1BSU5TVE9ORV9JUlEoMTQpKQorCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFIHwgSVJRRl9OT0FVVE9FTik7CisJCWVsc2UKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CiAJfQogCXNldF9pcnFfZmxhZ3MoTUFJTlNUT05FX0lSUSg4KSwgMCk7CiAJc2V0X2lycV9mbGFncyhNQUlOU1RPTkVfSVJRKDEyKSwgMCk7CkBAIC00OTAsNiArNDkzLDcgQEAKIE1BQ0hJTkVfU1RBUlQoTUFJTlNUT05FLCAiSW50ZWwgSENEREJCVkEwIERldmVsb3BtZW50IFBsYXRmb3JtIChha2EgTWFpbnN0b25lKSIpCiAJLyogTWFpbnRhaW5lcjogTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuICovCiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCS8qIEJMT0IgYm9vdCBwYXJhbWV0ZXIgc2V0dGluZyAqLwogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5tYXBfaW8JCT0gbWFpbnN0b25lX21hcF9pbywKIAkuaW5pdF9pcnEJPSBtYWluc3RvbmVfaW5pdF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IGI0NTU2MGEuLmEwNDI0NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0zMDcsNiArMzA3LDEwIEBACiAJCXN0cnVjdCB0YWcgKnRhZ3MsIGNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCiB7CiAJc2hhcnBzbF9zYXZlX3BhcmFtKCk7CisJbWktPm5yX2JhbmtzPTE7CisJbWktPmJhbmtbMF0uc3RhcnQgPSAweGEwMDAwMDAwOworCW1pLT5iYW5rWzBdLm5vZGUgPSAwOworCW1pLT5iYW5rWzBdLnNpemUgPSAoMzIqMTAyNCoxMDI0KTsKIH0KIAogTUFDSElORV9TVEFSVChQT09ETEUsICJTSEFSUCBQb29kbGUiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKaW5kZXggMGRiYjA3OS4uNDRiY2I4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCkBAIC0yMjAsNiArMjIwLDggQEAKICAqIFNwaXR6IEJhY2tsaWdodCBEZXZpY2UKICAqLwogc3RhdGljIHN0cnVjdCBjb3JnaWJsX21hY2hpbmZvIHNwaXR6X2JsX21hY2hpbmZvID0geworCS5kZWZhdWx0X2ludGVuc2l0eSA9IDB4MWYsCisJLmxpbWl0X21hc2sgPSAweDBiLAogCS5tYXhfaW50ZW5zaXR5ID0gMHgyZiwKIH07CiAKQEAgLTI0Miw2ICsyNDQsMTQgQEAKIAogCiAvKgorICogU3BpdHogTEVEcworICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0emxlZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNwaXR6LWxlZCIsCisJLmlkCQk9IC0xLAorfTsKKworLyoKICAqIFNwaXR6IFRvdWNoIFNjcmVlbiBEZXZpY2UKICAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGl0enRzX3Jlc291cmNlc1tdID0gewpAQCAtMzYxLDYgKzM3MSw3IEBACiBzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBzcGl0el9vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CiAJLnBvcnRfbW9kZQk9IFBNTV9OUFNfTU9ERSwKIAkuaW5pdAkJPSBzcGl0el9vaGNpX2luaXQsCisJLnBvd2VyX2J1ZGdldAk9IDE1MCwKIH07CiAKIApAQCAtNDE4LDYgKzQyOSw3IEBACiAJJnNwaXR6a2JkX2RldmljZSwKIAkmc3BpdHp0c19kZXZpY2UsCiAJJnNwaXR6YmxfZGV2aWNlLAorCSZzcGl0emxlZF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY29tbW9uX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCA2NmVjNzE3Li43NmMwZTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0yNTEsMTAgKzI1MSwxOSBAQAogCS5pZAkJPSAtMSwKIH07CiAKKy8qCisgKiBUb3NhIExFRHMKKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG9zYWxlZF9kZXZpY2UgPSB7CisgICAgLm5hbWUgICA9ICJ0b3NhLWxlZCIsCisgICAgLmlkICAgICA9IC0xLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZ0b3Nhc2Nvb3BfZGV2aWNlLAogCSZ0b3Nhc2Nvb3BfamNfZGV2aWNlLAogCSZ0b3Nha2JkX2RldmljZSwKKwkmdG9zYWxlZF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdG9zYV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggZDRhNTg2ZS4uNjkzZmIxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtMTM3LDggKzEzNywxMSBAQAogc3RhdGljIHZvaWQgX19pbml0IGdpY19pbml0X2lycSh2b2lkKQogewogI2lmZGVmIENPTkZJR19SRUFMVklFV19NUENPUkUKKwl1bnNpZ25lZCBpbnQgcGxkY3RybDsKIAl3cml0ZWwoMHgwMDAwYTA1ZiwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19MT0NLKSk7Ci0Jd3JpdGVsKDB4MDA4MDAzYzAsIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyAweGQ4KTsKKwlwbGRjdHJsID0gcmVhZGwoX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKQkrIDB4ZDgpOworCXBsZGN0cmwgfD0gMHgwMDgwMDAwMDsJLyogTmV3IGlycSBtb2RlICovCisJd3JpdGVsKHBsZGN0cmwsIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyAweGQ4KTsKIAl3cml0ZWwoMHgwMDAwMDAwMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19MT0NLKSk7CiAjZW5kaWYKIAlnaWNfZGlzdF9pbml0KF9faW9fYWRkcmVzcyhSRUFMVklFV19HSUNfRElTVF9CQVNFKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IGVkMDdjNDEuLjk3MGY5OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC01MCw5ICs1MCwxNSBAQAogCiAJICA8aHR0cDovL3pvby53ZWluaWdlbC5zZS9uMzA+LgogCitjb25maWcgTUFDSF9TTURLCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBtYWNoaW5lIGNvZGUgZm9yIFNNREsyNDEwIGFuZCBTTURLMjQ0MAorCiBjb25maWcgQVJDSF9TTURLMjQxMAogCWJvb2wgIlNNREsyNDEwL0E5TTI0MTAiCiAJc2VsZWN0IENQVV9TM0MyNDEwCisJc2VsZWN0IE1BQ0hfU01ESwogCWhlbHAKIAkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNNREsyNDEwIG9yIHRoZSBkZXJpdmVkIG1vZHVsZSBBOU0yNDEwCiAgICAgICAgICAgIDxodHRwOi8vd3d3LmZzZm9ydGguZGU+CkBAIC02MCw2ICs2Niw3IEBACiBjb25maWcgQVJDSF9TM0MyNDQwCiAJYm9vbCAiU01ESzI0NDAiCiAJc2VsZWN0IENQVV9TM0MyNDQwCisJc2VsZWN0IE1BQ0hfU01ESwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU01ESzI0NDAuCiAKQEAgLTE2Myw3ICsxNzAsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIFBNCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB2ZXJib3NlIGRlYnVnZ2luZyBmcm9tIHRoZSBQTSBTdXNwZW5kIGFuZAotCSAgUmVzdW1lIGNvZGUuIFNlZSBgRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc2luZy1TM0MyNFhYL1N1c3BlbmQudHh0YAorCSAgUmVzdW1lIGNvZGUuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQ+CiAJICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogY29uZmlnIFMzQzI0MTBfUE1fQ0hFQ0sKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQppbmRleCAxYjNiNDc2Li4zZTU3MTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCkBAIC00OCwzICs0OCw1IEBACiBvYmotJChDT05GSUdfTUFDSF9SWDM3MTUpCSs9IG1hY2gtcngzNzE1Lm8KIG9iai0kKENPTkZJR19NQUNIX09UT00pCQkrPSBtYWNoLW90b20ubwogb2JqLSQoQ09ORklHX01BQ0hfTkVYQ09ERVJfMjQ0MCkgKz0gbWFjaC1uZXhjb2Rlci5vCisKK29iai0kKENPTkZJR19NQUNIX1NNREspCQkrPSBjb21tb24tc21kay5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwppbmRleCBmZWMwMmM5Li42ZGU3MTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAKIAkvKiBpZiB3ZSBzdGFydGVkIHRoZSBVUExMLCB0aGVuIGFsbG93IHRvIHNldHRsZSAqLwogCi0JaWYgKGVuYWJsZSAmJiAhKG9yaWcgJiBTM0MyNDEwX0NMS1NMT1dfVUNMS19PRkYpKQorCWlmIChlbmFibGUgJiYgKG9yaWcgJiBTM0MyNDEwX0NMS1NMT1dfVUNMS19PRkYpKQogCQl1ZGVsYXkoMjAwKTsKIAogCXJldHVybiAwOwpAQCAtMzY3LDYgKzM2Nyw4IEBACiAJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfVVBMTDsKIAllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19mKQogCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0ZDTEs7CisJZWxzZSBpZiAocGFyZW50ID09ICZjbGtfaCkKKwkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9IQ0xLOwogCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX3ApCiAJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfUENMSzsKIAllbHNlIGlmIChjbGsgPT0gJnMzYzI0eHhfY2xrb3V0MCAmJiBwYXJlbnQgPT0gJnMzYzI0eHhfZGNsazApCkBAIC0zNzYsNiArMzc4LDggQEAKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisKIAlpZiAoY2xrID09ICZzM2MyNHh4X2RjbGswKQogCQltYXNrID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9NQVNLOwogCWVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTQwODkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKQEAgLTAsMCArMSwxMzUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIENvbW1vbiBjb2RlIGZvciBTTURLMjQxMCBhbmQgU01ESzI0NDAgYm9hcmRzCisgKgorICogaHR0cDovL3d3dy5mbHVmZi5vcmcvYmVuL3NtZGsyNDQwLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9uYW5kLmg+CisKKyNpbmNsdWRlICJjb21tb24tc21kay5oIgorI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJwbS5oIgorCisvKiBOQU5EIHBhcml0aXRvbiBmcm9tIDIuNC4xOC1zd2w1ICovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzbWRrX2RlZmF1bHRfbmFuZF9wYXJ0W10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJCb290IEFnZW50IiwKKwkJLnNpemUJPSBTWl8xNkssCisJCS5vZmZzZXQJPSAwLAorCX0sCisJWzFdID0geworCQkubmFtZQk9ICJTM0MyNDEwIGZsYXNoIHBhcnRpdGlvbiAxIiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplCT0gU1pfMk0sCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lCT0gIlMzQzI0MTAgZmxhc2ggcGFydGl0aW9uIDIiLAorCQkub2Zmc2V0ID0gU1pfNE0sCisJCS5zaXplCT0gU1pfNE0sCisJfSwKKwlbM10gPSB7CisJCS5uYW1lCT0gIlMzQzI0MTAgZmxhc2ggcGFydGl0aW9uIDMiLAorCQkub2Zmc2V0CT0gU1pfOE0sCisJCS5zaXplCT0gU1pfMk0sCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lCT0gIlMzQzI0MTAgZmxhc2ggcGFydGl0aW9uIDQiLAorCQkub2Zmc2V0ID0gU1pfMU0gKiAxMCwKKwkJLnNpemUJPSBTWl80TSwKKwl9LAorCVs1XSA9IHsKKwkJLm5hbWUJPSAiUzNDMjQxMCBmbGFzaCBwYXJ0aXRpb24gNSIsCisJCS5vZmZzZXQJPSBTWl8xTSAqIDE0LAorCQkuc2l6ZQk9IFNaXzFNICogMTAsCisJfSwKKwlbNl0gPSB7CisJCS5uYW1lCT0gIlMzQzI0MTAgZmxhc2ggcGFydGl0aW9uIDYiLAorCQkub2Zmc2V0CT0gU1pfMU0gKiAyNCwKKwkJLnNpemUJPSBTWl8xTSAqIDI0LAorCX0sCisJWzddID0geworCQkubmFtZQk9ICJTM0MyNDEwIGZsYXNoIHBhcnRpdGlvbiA3IiwKKwkJLm9mZnNldCA9IFNaXzFNICogNDgsCisJCS5zaXplCT0gU1pfMTZNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCBzbWRrX25hbmRfc2V0c1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gIk5BTkQiLAorCQkubnJfY2hpcHMJPSAxLAorCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUoc21ka19kZWZhdWx0X25hbmRfcGFydCksCisJCS5wYXJ0aXRpb25zCT0gc21ka19kZWZhdWx0X25hbmRfcGFydCwKKwl9LAorfTsKKworLyogY2hvb3NlIGEgc2V0IG9mIHRpbWluZ3Mgd2hpY2ggc2hvdWxkIHN1aXQgbW9zdCA1MTJNYml0CisgKiBjaGlwcyBhbmQgYmV5b25kLgorKi8KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgc21ka19uYW5kX2luZm8gPSB7CisJLnRhY2xzCQk9IDIwLAorCS50d3JwaDAJCT0gNjAsCisJLnR3cnBoMQkJPSAyMCwKKwkubnJfc2V0cwk9IEFSUkFZX1NJWkUoc21ka19uYW5kX3NldHMpLAorCS5zZXRzCQk9IHNtZGtfbmFuZF9zZXRzLAorfTsKKworLyogZGV2aWNlcyB3ZSBpbml0aWFsaXNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIF9faW5pdGRhdGEgKnNtZGtfZGV2c1tdID0geworCSZzM2NfZGV2aWNlX25hbmQsCit9OworCit2b2lkIF9faW5pdCBzbWRrX21hY2hpbmVfaW5pdCh2b2lkKQoreworCS8qIENvbmZpZ3VyZSB0aGUgTEVEcyAoZXZlbiBpZiB3ZSBoYXZlIG5vIExFRCBzdXBwb3J0KSovCisKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BGNCwgUzNDMjQxMF9HUEY0X09VVFApOworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEY1LCBTM0MyNDEwX0dQRjVfT1VUUCk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjYsIFMzQzI0MTBfR1BGNl9PVVRQKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BGNywgUzNDMjQxMF9HUEY3X09VVFApOworCisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjQsIDEpOworCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEY1LCAxKTsKKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGNiwgMSk7CisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjcsIDEpOworCisJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNtZGtfbmFuZF9pbmZvOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoc21ka19kZXZzLCBBUlJBWV9TSVpFKHNtZGtfZGV2cykpOworCisJczNjMjQxMF9wbV9pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlM2EzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuaApAQCAtMCwwICsxLDE1IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBDb21tb24gY29kZSBmb3IgU01ESzI0MTAgYW5kIFNNREsyNDQwIGJvYXJkcworICoKKyAqIGh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9zbWRrMjQ0MC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworZXh0ZXJuIHZvaWQgc21ka19tYWNoaW5lX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCmluZGV4IDNlMzI3YjguLmNjOTdmYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCkBAIC0yMzIsOCArMjMyLDggQEAKIAogc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgYW51YmlzX25hbmRfaW5mbyA9IHsKIAkudGFjbHMJCT0gMjUsCi0JLnR3cnBoMAkJPSA4MCwKLQkudHdycGgxCQk9IDgwLAorCS50d3JwaDAJCT0gNTUsCisJLnR3cnBoMQkJPSA0MCwKIAkubnJfc2V0cwk9IEFSUkFZX1NJWkUoYW51YmlzX25hbmRfc2V0cyksCiAJLnNldHMJCT0gYW51YmlzX25hbmRfc2V0cywKIAkuc2VsZWN0X2NoaXAJPSBhbnViaXNfbmFuZF9zZWxlY3QsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCmluZGV4IDAyNjBlZDUuLjMwNmFmYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCkBAIC0zMiw2ICszMiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpAQCAtNDYsNiArNTEsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbGNkLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC9uYW5kLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZmIuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCkBAIC0xNzAsMTIgKzE3NiwzOSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcngzNzE1X25hbmRfcGFydFtdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gIldob2xlIEZsYXNoIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX25hbmRfc2V0IHJ4MzcxNV9uYW5kX3NldHNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJJbnRlcm5hbCIsCisJCS5ucl9jaGlwcwk9IDEsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShyeDM3MTVfbmFuZF9wYXJ0KSwKKwkJLnBhcnRpdGlvbnMJPSByeDM3MTVfbmFuZF9wYXJ0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCByeDM3MTVfbmFuZF9pbmZvID0geworCS50YWNscwkJPSAyNSwKKwkudHdycGgwCQk9IDUwLAorCS50d3JwaDEJCT0gMTUsCisJLm5yX3NldHMJPSBBUlJBWV9TSVpFKHJ4MzcxNV9uYW5kX3NldHMpLAorCS5zZXRzCQk9IHJ4MzcxNV9uYW5kX3NldHMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcngzNzE1X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzM2NfZGV2aWNlX3VzYiwKIAkmczNjX2RldmljZV9sY2QsCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYywKIAkmczNjX2RldmljZV9paXMsCisJJnMzY19kZXZpY2VfbmFuZCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ib2FyZCByeDM3MTVfYm9hcmQgX19pbml0ZGF0YSA9IHsKQEAgLTE4NSw2ICsyMTgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcngzNzE1X21hcF9pbyh2b2lkKQogeworCXMzY19kZXZpY2VfbmFuZC5kZXYucGxhdGZvcm1fZGF0YSA9ICZyeDM3MTVfbmFuZF9pbmZvOworCiAJczNjMjR4eF9pbml0X2lvKHJ4MzcxNV9pb2Rlc2MsIEFSUkFZX1NJWkUocngzNzE1X2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTY5MzQwMDApOwogCXMzYzI0eHhfaW5pdF91YXJ0cyhyeDM3MTVfdWFydGNmZ3MsIEFSUkFZX1NJWkUocngzNzE1X3VhcnRjZmdzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwppbmRleCAxZTc2ZTFmLi4yZGI5MzJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKQEAgLTI4LDcgKzI4LDggQEAKICAqIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiAxMC1NYXItMjAwNSBMQ1ZSICBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQotICogMjAtU2VwLTIwMDUgQkpEICBBZGRlZCBzdGF0aWMgdG8gbm9uLWV4cG9ydGVkIGl0ZW1zCisgKiAyMC1TZXAtMjAwNSBCSkQgICBBZGRlZCBzdGF0aWMgdG8gbm9uLWV4cG9ydGVkIGl0ZW1zCisgKiAwMS1BcHItMjAwNiBCSkQgICBNb3ZlZCBpbml0IGNvZGUgdG8gY29tbW9uIHNtZGsKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTU0LDYgKzU1LDggQEAKICNpbmNsdWRlICJkZXZzLmgiCiAjaW5jbHVkZSAiY3B1LmgiCiAKKyNpbmNsdWRlICJjb21tb24tc21kay5oIgorCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KIH07CkBAIC0xMDcsMTEgKzExMCw2IEBACiAJczNjMjR4eF9zZXRfYm9hcmQoJnNtZGsyNDEwX2JvYXJkKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDEwX2luaXRfaXJxKHZvaWQpCi17Ci0JczNjMjR4eF9pbml0X2lycSgpOwotfQotCiBNQUNISU5FX1NUQVJUKFNNREsyNDEwLCAiU01ESzI0MTAiKSAvKiBAVE9ETzogcmVxdWVzdCBhIG5ldyBpZGVudGlmaWVyIGFuZCBzd2l0Y2gKIAkJCQkgICAgKiB0byBTTURLMjQxMCAqLwogCS8qIE1haW50YWluZXI6IEpvbmFzIERpZXRzY2hlICovCkBAIC0xMTksNyArMTE3LDggQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDMjRYWF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUzNDMjQxMF9TRFJBTV9QQSArIDB4MTAwLAogCS5tYXBfaW8JCT0gc21kazI0MTBfbWFwX2lvLAotCS5pbml0X2lycQk9IHNtZGsyNDEwX2luaXRfaXJxLAorCS5pbml0X2lycQk9IHMzYzI0eHhfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IHNtZGtfbWFjaGluZV9pbml0LAogCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKIE1BQ0hJTkVfRU5ECiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCmluZGV4IGY0MzE1NzIuLjVmZmZkMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYwpAQCAtNTMsNyArNTMsOCBAQAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiZGV2cy5oIgogI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgInBtLmgiCisKKyNpbmNsdWRlICJjb21tb24tc21kay5oIgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVNBIElPIFNwYWNlIG1hcCAobWVtb3J5IHNwYWNlIHNlbGVjdGVkIGJ5IEEyNCkgKi8KQEAgLTE5NywyMSArMTk4LDkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDQwX21hY2hpbmVfaW5pdCh2b2lkKQogewotCS8qIENvbmZpZ3VyZSB0aGUgTEVEcyAoZXZlbiBpZiB3ZSBoYXZlIG5vIExFRCBzdXBwb3J0KSovCi0KLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BGNCwgUzNDMjQxMF9HUEY0X09VVFApOwotCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEY1LCBTM0MyNDEwX0dQRjVfT1VUUCk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjYsIFMzQzI0MTBfR1BGNl9PVVRQKTsKLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BGNywgUzNDMjQxMF9HUEY3X09VVFApOwotCi0JczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjQsIDApOwotCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEY1LCAwKTsKLQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGNiwgMCk7Ci0JczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjcsIDApOwotCiAJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJnNtZGsyNDQwX2xjZF9jZmcpOwogCi0JczNjMjQxMF9wbV9pbml0KCk7CisJc21ka19tYWNoaW5lX2luaXQoKTsKIH0KIAogTUFDSElORV9TVEFSVChTM0MyNDQwLCAiU01ESzI0NDAiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWNsb2NrLmMKaW5kZXggNTdhMTU5Ny4uZDdhMzBlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1jbG9jay5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAogCQljbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKIAkJY2xrZGl2biB8PSBTM0MyNDQwX0NMS0RJVk5fVUNMSzsKLQkJX19yYXdfd3JpdGVsKGNhbWRpdm4sIFMzQzI0MTBfQ0xLRElWTik7CisJCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDEwX0NMS0RJVk4pOwogCiAJCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TCmluZGV4IDgzMmZiODYuLjczZGUyZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TCkBAIC01OSw4ICs1OSw3IEBACiAJbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJQCBQSUQKIAltcmMJcDE1LCAwLCByNiwgYzMsIGMwLCAwCUAgRG9tYWluIElECiAJbXJjCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcmVzcwotCW1yYwlwMTUsIDAsIHI4LCBjMiwgYzAsIDAJQCBhdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgotCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJQCBjb250cm9sIHJlZ2lzdGVyCisJbXJjCXAxNSwgMCwgcjgsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnaXN0ZXIKIAogCXN0bWlhCXIwLCB7IHI0IC0gcjEzIH0KIApAQCAtMTY1LDcgKzE2NCw2IEBACiAJbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECiAJbWNyCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBEb21haW4gSUQKIAltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UKLQltY3IJcDE1LCAwLCByOCwgYzEsIGMxLCAwCQlAIGF1eGlsbGlhcnkgY29udHJvbAogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1JFU1VNRQogCW1vdglyMywgIydSJwpAQCAtMTczLDcgKzE3MSw3IEBACiAjZW5kaWYKIAogCWxkcglyMiwgPXJlc3VtZV93aXRoX21tdQotCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDAJCUAgdHVybiBvbiBNTVUsIGV0YworCW1jcglwMTUsIDAsIHI4LCBjMSwgYzAsIDAJCUAgdHVybiBvbiBNTVUsIGV0YwogCW5vcAkJCQkJQCBzZWNvbmQtdG8tbGFzdCBiZWZvcmUgbW11CiAJbW92CXBjLCByMgkJCQlAIGdvIGJhY2sgdG8gdmlydHVhbCBhZGRyZXNzCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMKaW5kZXggMTAyNDU0MC4uNjc2YjVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMKQEAgLTExLDcgKzExLDggQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIENoYW5nZUxvZzoKLSAqICAwMy0wNi0yMDA0IEpvaG4gTGVueiA8amVsZW56QHdpc2MuZWR1PgorICogIDIwMDYgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICogIDAzLTA2LTIwMDQgSm9obiBMZW56IDxsZW56QGNzLndpc2MuZWR1PgogICogIDA2LTA0LTIwMDIgQ2hyaXMgTGFyc29uIDxrZXJnb3RoQGRpZ2l0YWxuZW1lc2lzLm5ldD4KICAqICAwNC0xNi0yMDAxIExpbmVvIEphcGFuLEluYy4gLi4uCiAgKi8KQEAgLTg3LDEyICs4OCw3NSBAQAogCS5zY2xrX3JhdGUgICAgICA9IDExOTgxMDAwLAogfTsKIAorI2lmZGVmIENPTkZJR19TSEFSUF9MT0NPTU8KKy8qCisgKiBsb3ctbGV2ZWwgVUFSVCBmZWF0dXJlcy4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NvbW9fZGV2ICp1YXJ0X2RldiA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGNvbGxpZV91YXJ0X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1X2ludCBtY3RybCkKK3sKKyAJaWYgKCF1YXJ0X2RldikgcmV0dXJuOworCisgCWlmIChtY3RybCAmIFRJT0NNX1JUUykKKwkJbG9jb21vX2dwaW9fd3JpdGUodWFydF9kZXYsIExPQ09NT19HUElPX1JUUywgMCk7CisgCWVsc2UKKwkJbG9jb21vX2dwaW9fd3JpdGUodWFydF9kZXYsIExPQ09NT19HUElPX1JUUywgMSk7CisKKyAJaWYgKG1jdHJsICYgVElPQ01fRFRSKQorCQlsb2NvbW9fZ3Bpb193cml0ZSh1YXJ0X2RldiwgTE9DT01PX0dQSU9fRFRSLCAwKTsKKyAJZWxzZQorCQlsb2NvbW9fZ3Bpb193cml0ZSh1YXJ0X2RldiwgTE9DT01PX0dQSU9fRFRSLCAxKTsKK30KKworc3RhdGljIHVfaW50IGNvbGxpZV91YXJ0X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWludCByZXQgPSBUSU9DTV9DRDsKKwl1bnNpZ25lZCBpbnQgcjsKKwlpZiAoIXVhcnRfZGV2KSByZXR1cm4gcmV0OworCisJciA9IGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KHVhcnRfZGV2LCBMT0NPTU9fR1BJT19DVFMgJiBMT0NPTU9fR1BJT19EU1IpOworCWlmIChyICYgTE9DT01PX0dQSU9fQ1RTKQorCQlyZXQgfD0gVElPQ01fQ1RTOworCWlmIChyICYgTE9DT01PX0dQSU9fRFNSKQorCQlyZXQgfD0gVElPQ01fRFNSOworCisJcmV0dXJuIHJldDsKK30KIAogc3RhdGljIHN0cnVjdCBzYTExMDBfcG9ydF9mbnMgY29sbGllX3BvcnRfZm5zIF9faW5pdGRhdGEgPSB7CiAJLnNldF9tY3RybAk9IGNvbGxpZV91YXJ0X3NldF9tY3RybCwKIAkuZ2V0X21jdHJsCT0gY29sbGllX3VhcnRfZ2V0X21jdHJsLAogfTsKIAorc3RhdGljIGludCBjb2xsaWVfdWFydF9wcm9iZShzdHJ1Y3QgbG9jb21vX2RldiAqZGV2KQoreworCXVhcnRfZGV2ID0gZGV2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxpZV91YXJ0X3JlbW92ZShzdHJ1Y3QgbG9jb21vX2RldiAqZGV2KQoreworCXVhcnRfZGV2ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsb2NvbW9fZHJpdmVyIGNvbGxpZV91YXJ0X2RyaXZlciA9IHsKKwkuZHJ2ID0geworCQkubmFtZSA9ICJjb2xsaWVfdWFydCIsCisJfSwKKwkuZGV2aWQJPSBMT0NPTU9fREVWSURfVUFSVCwKKwkucHJvYmUJPSBjb2xsaWVfdWFydF9wcm9iZSwKKwkucmVtb3ZlCT0gY29sbGllX3VhcnRfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY29sbGllX3VhcnRfaW5pdCh2b2lkKSB7CisJcmV0dXJuIGxvY29tb19kcml2ZXJfcmVnaXN0ZXIoJmNvbGxpZV91YXJ0X2RyaXZlcik7Cit9CitkZXZpY2VfaW5pdGNhbGwoY29sbGllX3VhcnRfaW5pdCk7CisKKyNlbmRpZgorCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbG9jb21vX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTIxOCw2ICsyODIsMTIgQEAKIHsKIAlzYTExMDBfbWFwX2lvKCk7CiAJaW90YWJsZV9pbml0KGNvbGxpZV9pb19kZXNjLCBBUlJBWV9TSVpFKGNvbGxpZV9pb19kZXNjKSk7CisKKyNpZmRlZiBDT05GSUdfU0hBUlBfTE9DT01PCisJc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKCZjb2xsaWVfcG9ydF9mbnMpOworI2VuZGlmCisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMCwgMyk7CisJc2ExMTAwX3JlZ2lzdGVyX3VhcnQoMSwgMSk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoQ09MTElFLCAiU2hhcnAtQ29sbGllIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKaW5kZXggYzEzMWE1Mi4uYjNhNTYwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKQEAgLTE5OSwxMCArMTk5LDI2IEBACiAJSUNNUiB8PSAoMSA8PCBpcnEpOwogfQogCisvKgorICogQXBhcnQgZm9ybSBHUElPcywgb25seSB0aGUgUlRDIGFsYXJtIGNhbiBiZSBhIHdha2V1cCBldmVudC4KKyAqLworc3RhdGljIGludCBzYTExMDBfc2V0X3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQoreworCWlmIChpcnEgPT0gSVJRX1JUQ0Fscm0pIHsKKwkJaWYgKG9uKQorCQkJUFdFUiB8PSBQV0VSX1JUQzsKKwkJZWxzZQorCQkJUFdFUiAmPSB+UFdFUl9SVEM7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIHN0cnVjdCBpcnFjaGlwIHNhMTEwMF9ub3JtYWxfY2hpcCA9IHsKIAkuYWNrCQk9IHNhMTEwMF9tYXNrX2lycSwKIAkubWFzawkJPSBzYTExMDBfbWFza19pcnEsCiAJLnVubWFzawkJPSBzYTExMDBfdW5tYXNrX2lycSwKKwkuc2V0X3dha2UJPSBzYTExMDBfc2V0X3dha2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlycV9yZXNvdXJjZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCmluZGV4IDllMDJiYzMuLmFmNmQyNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwpAQCAtNTksNiArNTksMTQgQEAKIAkJaWYgKGlyciAmIChJUlJfRVRIRVJORVQgfCBJUlJfVVNBUikpIHsKIAkJCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKIAorCQkJLyoKKwkJCSAqIEFjayB0aGUgaW50ZXJydXB0IG5vdyB0byBwcmV2ZW50IHJlLWVudGVyaW5nCisJCQkgKiB0aGlzIG5lcG9uc2V0IGhhbmRsZXIuICBBZ2FpbiwgdGhpcyBpcyBzYWZlCisJCQkgKiBzaW5jZSB3ZSdsbCBjaGVjayB0aGUgSVJSIHJlZ2lzdGVyIHByaW9yIHRvCisJCQkgKiBsZWF2aW5nLgorCQkJICovCisJCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwogCQkJaWYgKGlyciAmIElSUl9FVEhFUk5FVCkgewogCQkJCWQgPSBpcnFfZGVzYyArIElSUV9ORVBPTlNFVF9TTUM5MTk2OwogCQkJCWRlc2NfaGFuZGxlX2lycShJUlFfTkVQT05TRVRfU01DOTE5NiwgZCwgcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggNzk5Njk3ZC4uY2ViZDQ4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtMTEyLDEwICsxMTIsOSBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JdmljX2luaXQoVkFfVklDX0JBU0UsIElSUV9WSUNfU1RBUlQsIH4oMSA8PCAzMSkpOworCXZpY19pbml0KFZBX1ZJQ19CQVNFLCBJUlFfVklDX1NUQVJULCB+MCk7CiAKLQlzZXRfaXJxX2hhbmRsZXIoSVJRX1ZJQ1NPVVJDRTMxLCBzaWNfaGFuZGxlX2lycSk7Ci0JZW5hYmxlX2lycShJUlFfVklDU09VUkNFMzEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9WSUNTT1VSQ0UzMSwgc2ljX2hhbmRsZV9pcnEpOwogCiAJLyogRG8gc2Vjb25kIGludGVycnVwdCBjb250cm9sbGVyICovCiAJd3JpdGVsKH4wLCBWQV9TSUNfQkFTRSArIFNJQ19JUlFfRU5BQkxFX0NMRUFSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUwppbmRleCA1YzQwNTViLi41NGUzYzViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgogCkBAIC00Niw2ICs0NiwxMSBAQAogICovCiAjZGVmaW5lIENBQ0hFX0RMSU1JVAkoQ0FDSEVfRFNJWkUgKiA0KQogCisJLmRhdGEKK2ZsdXNoX2Jhc2U6CisJLmxvbmcJRkxVU0hfQkFTRQorCS50ZXh0CisKIC8qCiAgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCiAgKgpAQCAtNjMsMTEgKzY4LDIxIEBACiAJbW92CWlwLCAjMAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCiBfX2ZsdXNoX3dob2xlX2NhY2hlOgotCW1vdglyMCwgI0ZMVVNIX0JBU0UKLQlhZGQJcjEsIHIwLCAjQ0FDSEVfRFNJWkUKLTE6CWxkcglyMiwgW3IwXSwgIzMyCi0JY21wCXIwLCByMQorCWxkcglyMywgPWZsdXNoX2Jhc2UKKwlsZHIJcjEsIFtyMywgIzBdCisJZW9yCXIxLCByMSwgI0NBQ0hFX0RTSVpFCisJc3RyCXIxLCBbcjMsICMwXQorCWFkZAlyMiwgcjEsICNDQUNIRV9EU0laRQorMToJbGRyCXIzLCBbcjFdLCAjMzIKKwljbXAJcjEsIHIyCiAJYmxvCTFiCisjaWZkZWYgRkxVU0hfQkFTRV9NSU5JQ0FDSEUKKwlhZGQJcjIsIHIyLCAjRkxVU0hfQkFTRV9NSU5JQ0FDSEUgLSBGTFVTSF9CQVNFCisJc3ViCXIxLCByMiwgIzUxMgkJCUAgb25seSA1MTIgYnl0ZXMKKzE6CWxkcglyMywgW3IxXSwgIzMyCisJY21wCXIxLCByMgorCWJsbwkxYgorI2VuZGlmCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCiAJbW92CXBjLCBscgogCkBAIC04Miw2ICs5Nyw3IEBACiAgKgktIGZsYWdzCS0gdm1hX2FyZWFfc3RydWN0IGZsYWdzIGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQogICovCiBFTlRSWSh2NHdiX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAogCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQogCXRzdAlyMiwgI1ZNX0VYRUMJCQlAIGV4ZWN1dGFibGUgcmVnaW9uPwogCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYyBiL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYwppbmRleCA4YTFiZmNkLi41MGU2YjZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb25zaXN0ZW50LmMKKysrIGIvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpAQCAtMjcyLDYgKzI3MywxNyBAQAogdm9pZCAqCiBkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLCBnZnBfdCBnZnApCiB7CisJaWYgKGFyY2hfaXNfY29oZXJlbnQoKSkgeworCQl2b2lkICp2aXJ0OworCisJCXZpcnQgPSBrbWFsbG9jKHNpemUsIGdmcCk7CisJCWlmICghdmlydCkKKwkJCXJldHVybiBOVUxMOworCQkqaGFuZGxlID0gIHZpcnRfdG9fZG1hKGRldiwgdmlydCk7CisKKwkJcmV0dXJuIHZpcnQ7CisJfQorCiAJcmV0dXJuIF9fZG1hX2FsbG9jKGRldiwgc2l6ZSwgaGFuZGxlLCBnZnAsCiAJCQkgICBwZ3Byb3Rfbm9uY2FjaGVkKHBncHJvdF9rZXJuZWwpKTsKIH0KQEAgLTM1MCw2ICszNjIsMTEgQEAKIAogCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKIAorCWlmIChhcmNoX2lzX2NvaGVyZW50KCkpIHsKKwkJa2ZyZWUoY3B1X2FkZHIpOworCQlyZXR1cm47CisJfQorCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggODgyNzkxMi4uOWVhMWY4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC00NTUsMTQgKzQ1NiwxNCBAQAogI2lmZGVmIEZMVVNIX0JBU0UKIAltYXAucGZuID0gX19waHlzX3RvX3BmbihGTFVTSF9CQVNFX1BIWVMpOwogCW1hcC52aXJ0dWFsID0gRkxVU0hfQkFTRTsKLQltYXAubGVuZ3RoID0gUEdESVJfU0laRTsKKwltYXAubGVuZ3RoID0gU1pfMU07CiAJbWFwLnR5cGUgPSBNVF9DQUNIRUNMRUFOOwogCWNyZWF0ZV9tYXBwaW5nKCZtYXApOwogI2VuZGlmCiAjaWZkZWYgRkxVU0hfQkFTRV9NSU5JQ0FDSEUKLQltYXAucGZuID0gX19waHlzX3RvX3BmbihGTFVTSF9CQVNFX1BIWVMgKyBQR0RJUl9TSVpFKTsKKwltYXAucGZuID0gX19waHlzX3RvX3BmbihGTFVTSF9CQVNFX1BIWVMgKyBTWl8xTSk7CiAJbWFwLnZpcnR1YWwgPSBGTFVTSF9CQVNFX01JTklDQUNIRTsKLQltYXAubGVuZ3RoID0gUEdESVJfU0laRTsKKwltYXAubGVuZ3RoID0gU1pfMU07CiAJbWFwLnR5cGUgPSBNVF9NSU5JQ0xFQU47CiAJY3JlYXRlX21hcHBpbmcoJm1hcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwppbmRleCAyNWUwY2EzZS4uYzFmNzE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgCQlyZXR1cm4gTlVMTDsKICAJYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CiAgCWlmIChyZW1hcF9hcmVhX3BhZ2VzKGFkZHIsIHBmbiwgc2l6ZSwgZmxhZ3MpKSB7Ci0gCQl2ZnJlZSgodm9pZCAqKWFkZHIpOworIAkJdnVubWFwKCh2b2lkICopYWRkcik7CiAgCQlyZXR1cm4gTlVMTDsKICAJfQogIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgKGNoYXIgKilhZGRyKTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCiB2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JdmZyZWUoKHZvaWQgKikgKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKSBhZGRyKSk7CisJdnVubWFwKCh2b2lkICopKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKWFkZHIpKTsKIH0KIEVYUE9SVF9TWU1CT0woX19pb3VubWFwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW0tYXJtdi5jIGIvYXJjaC9hcm0vbW0vbW0tYXJtdi5jCmluZGV4IDVlNWQwNWIuLjk1MjczZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tLWFybXYuYworKysgYi9hcmNoL2FybS9tbS9tbS1hcm12LmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCQllY2NfbWFzayA9IDA7CiAJfQogCi0JaWYgKGNwdV9hcmNoIDw9IENQVV9BUkNIX0FSTXY1VEVKKSB7CisJaWYgKGNwdV9hcmNoIDw9IENQVV9BUkNIX0FSTXY1VEVKICYmICFjcHVfaXNfeHNjYWxlKCkpIHsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWVtX3R5cGVzKTsgaSsrKSB7CiAJCQlpZiAobWVtX3R5cGVzW2ldLnByb3RfbDEpCiAJCQkJbWVtX3R5cGVzW2ldLnByb3RfbDEgfD0gUE1EX0JJVDQ7CkBAIC0zODksNiArMzg5LDE3IEBACiAJa2Vybl9wZ3Byb3QgPSB1c2VyX3BncHJvdCA9IGNwLT5wdGU7CiAKIAkvKgorCSAqIEVuYWJsZSBDUFUtc3BlY2lmaWMgY29oZXJlbmN5IGlmIHN1cHBvcnRlZC4KKwkgKiAoT25seSBhdmFpbGFibGUgb24gWFNDMyBhdCB0aGUgbW9tZW50LikKKwkgKi8KKwlpZiAoYXJjaF9pc19jb2hlcmVudCgpKSB7CisJCWlmIChjcHVfaXNfeHNjMygpKSB7CisJCQltZW1fdHlwZXNbTVRfTUVNT1JZXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfUzsKKwkJCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3RfcHRlIHw9IExfUFRFX0NPSEVSRU5UOworCQl9CisJfQorCisJLyoKIAkgKiBBUk12NiBhbmQgYWJvdmUgaGF2ZSBleHRlbmRlZCBwYWdlIHRhYmxlcy4KIAkgKi8KIAlpZiAoY3B1X2FyY2ggPj0gQ1BVX0FSQ0hfQVJNdjYgJiYgKGNyICYgQ1JfWFApKSB7CkBAIC02MjAsNyArNjMxLDcgQEAKIAkJcGdkID0gaW5pdF9tbS5wZ2Q7CiAKIAliYXNlX3BtZHZhbCA9IFBNRF9TRUNUX0FQX1dSSVRFIHwgUE1EX1NFQ1RfQVBfUkVBRCB8IFBNRF9UWVBFX1NFQ1Q7Ci0JaWYgKGNwdV9hcmNoaXRlY3R1cmUoKSA8PSBDUFVfQVJDSF9BUk12NVRFSikKKwlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpIDw9IENQVV9BUkNIX0FSTXY1VEVKICYmICFjcHVfaXNfeHNjYWxlKCkpCiAJCWJhc2VfcG1kdmFsIHw9IFBNRF9CSVQ0OwogCiAJZm9yIChpID0gMDsgaSA8IEZJUlNUX1VTRVJfUEdEX05SICsgVVNFUl9QVFJTX1BFUl9QR0Q7IGkrKywgcGdkKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwppbmRleCBjOTE2YTZjLi5hMmRkNWFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCkBAIC0yNiwyMiArMjYsNyBAQAogICogdGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZQogICovCiAjZGVmaW5lIERDQUNIRUxJTkVTSVpFCTMyCi0jZGVmaW5lIEZMVVNIX09GRlNFVAkzMjc2OAogCi0JLm1hY3JvIGZsdXNoXzExMF9kY2FjaGUJcmQsIHJhLCByZQotCWxkcglccmQsID1mbHVzaF9iYXNlCi0JbGRyCVxyYSwgW1xyZF0KLQllb3IJXHJhLCBccmEsICNGTFVTSF9PRkZTRVQKLQlzdHIJXHJhLCBbXHJkXQotCWFkZAlccmUsIFxyYSwgIzE2Mzg0CQlAIG9ubHkgbmVjZXNzYXJ5IGZvciAxNmsKLTEwMDE6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMWIKLQkuZW5kbQotCi0JLmRhdGEKLWZsdXNoX2Jhc2U6Ci0JLmxvbmcJRkxVU0hfQkFTRQogCS50ZXh0CiAKIC8qCkBAIC0xNDUsMTMgKzEzMCwxMSBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9zYTExMF9zd2l0Y2hfbW0pCi0JZmx1c2hfMTEwX2RjYWNoZQlyMywgaXAsIHIxCi0JbW92CXIxLCAjMAotCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwlzdHIJbHIsIFtzcCwgIy00XSEKKwlibAl2NHdiX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCUAgY2xlYXJzIElQCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgotCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCi0JbW92CXBjLCBscgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbGRyCXBjLCBbc3BdLCAjNAogCiAvKgogICogY3B1X3NhMTEwX3NldF9wdGUocHRlcCwgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggNDFmMjFmMi4uNzc3YWQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0zMCwzMCArMzAsNiBAQAogICogdGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZQogICovCiAjZGVmaW5lIERDQUNIRUxJTkVTSVpFCTMyCi0jZGVmaW5lIEZMVVNIX09GRlNFVAkzMjc2OAotCi0JLm1hY3JvIGZsdXNoXzExMDBfZGNhY2hlIHJkLCByYSwgcmUKLQlsZHIJXHJkLCA9Zmx1c2hfYmFzZQotCWxkcglccmEsIFtccmRdCi0JZW9yCVxyYSwgXHJhLCAjRkxVU0hfT0ZGU0VUCi0Jc3RyCVxyYSwgW1xyZF0KLQlhZGQJXHJlLCBccmEsICM4MTkyCQkJQCBvbmx5IG5lY2Vzc2FyeSBmb3IgOGsKLTEwMDE6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMWIKLSNpZmRlZiBGTFVTSF9CQVNFX01JTklDQUNIRQotCWFkZAlccmEsIFxyYSwgI0ZMVVNIX0JBU0VfTUlOSUNBQ0hFIC0gRkxVU0hfQkFTRQotCWFkZAlccmUsIFxyYSwgIzUxMgkJCUAgb25seSA1MTIgYnl0ZXMKLTEwMDI6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMmIKLSNlbmRpZgotCS5lbmRtCi0KLQkuZGF0YQotZmx1c2hfYmFzZToKLQkubG9uZwlGTFVTSF9CQVNFCi0JLnRleHQKIAogCV9fSU5JVAogCkBAIC03OSw5ICs1NSw4IEBACiAJc3RtZmQJc3AhLCB7bHJ9CiAJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKIAltc3IJY3Bzcl9jLCBpcAotCWZsdXNoXzExMDBfZGNhY2hlIHIwLCByMSwgcjIJCUAgY2xlYW4gY2FjaGVzCi0JbW92CXIwLCAjMAotCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMyLCAyCQlAIERpc2FibGUgY2xvY2sgc3dpdGNoaW5nCisJYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1jcglwMTUsIDAsIGlwLCBjMTUsIGMyLCAyCQlAIERpc2FibGUgY2xvY2sgc3dpdGNoaW5nCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KQEAgLTE2NywxNCArMTQyLDEyIEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X3NhMTEwMF9zd2l0Y2hfbW0pCi0JZmx1c2hfMTEwMF9kY2FjaGUgcjMsIGlwLCByMQotCW1vdglpcCwgIzAKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCXN0cglsciwgW3NwLCAjLTRdIQorCWJsCXY0d2JfZmx1c2hfa2Vybl9jYWNoZV9hbGwJQCBjbGVhcnMgSVAKIAltY3IJcDE1LCAwLCBpcCwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcwotCW1vdglwYywgbHIKKwlsZHIJcGMsIFtzcF0sICM0CiAKIC8qCiAgKiBjcHVfc2ExMTAwX3NldF9wdGUocHRlcCwgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwppbmRleCBmOTA1MTNlLi44ZDMyZTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgpAQCAtMzcwLDcgKzM3MSw3IEBACiBFTlRSWShjcHVfeHNjM19zZXRfcHRlKQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAotCWJpYwlyMiwgcjEsICMweGZmMAorCWJpYwlyMiwgcjEsICMweGRmMAkJCUAgS2VlcCBDLCBCLCBjb2hlcmVuY3kgYml0cwogCW9ycglyMiwgcjIsICNQVEVfVFlQRV9FWFQJCUAgZXh0ZW5kZWQgcGFnZQogCiAJZW9yCXIzLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKQEAgLTQyNiwxMiArNDI3LDEzIEBACiAjZW5kaWYKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIHNldCBhdXhpbGlhcnkgY29udHJvbCByZWcKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCi0JYmljCXIwLCByMCwgIzB4MDIwMAkJCUAgLi4uLiAuLlIuIC4uLi4gLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMDIJCQlAIC4uLi4gLi4uLiAuLi4uIC4uQS4KIAlvcnIJcjAsIHIwLCAjMHgwMDA1CQkJQCAuLi4uIC4uLi4gLi4uLiAuQy5NCiAjaWYgQlRCX0VOQUJMRQorCWJpYwlyMCwgcjAsICMweDAyMDAJCQlAIC4uLi4gLi5SLiAuLi4uIC4uLi4KIAlvcnIJcjAsIHIwLCAjMHgzOTAwCQkJQCAuLlZJIFouLlMgLi4uLiAuLi4uCiAjZWxzZQorCWJpYwlyMCwgcjAsICMweDBhMDAJCQlAIC4uLi4gWi5SLiAuLi4uIC4uLi4KIAlvcnIJcjAsIHIwLCAjMHgzMTAwCQkJQCAuLlZJIC4uLlMgLi4uLiAuLi4uCiAjZW5kaWYKICNpZiBMMl9DQUNIRV9FTkFCTEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggMDg4N2JiMi4uZWM0OTQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTcwLDEzICs3MCwxMyBAQAogCiBjb25maWcgT01BUF8zMktfVElNRVIKIAlib29sICJVc2UgMzJLSHogdGltZXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFgKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBPTUFQIDMyS0h6IHRpbWVyLgogCSAgVGhpcyB0aW1lciBzYXZlcyBwb3dlciBjb21wYXJlZCB0byB0aGUgT01BUF9NUFVfVElNRVIsIGFuZCBoYXMKIAkgIHN1cHBvcnQgZm9yIG5vIHRpY2sgZHVyaW5nIGlkbGUuIFRoZSAzMktIeiB0aW1lciBwcm92aWRlcyBsZXNzCiAJICBpbnRyYS10aWNrIHJlc29sdXRpb24gdGhhbiBPTUFQX01QVV9USU1FUi4gVGhlIDMyS0h6IHRpbWVyIGlzCi0JICBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIE9NQVAtMTZ4eC4KKwkgIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgT01BUDE2WFggYW5kIDI0WFguCiAKIGVuZGNob2ljZQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKaW5kZXggOWNjZjE5NC4uMjg5NmI0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpAQCAtMywxNiArMywxNiBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBtY2JzcC5vIHVzYi5vCitvYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBtY2JzcC5vIHVzYi5vIGZiLm8KIG9iai1tIDo9CiBvYmotbiA6PQogb2JqLSAgOj0KIAorb2JqLSQoQ09ORklHX09NQVBfMzJLX1RJTUVSKQkrPSB0aW1lcjMyay5vCisKICMgT0NQSSBpbnRlcmNvbm5lY3Qgc3VwcG9ydCBmb3IgMTcxMCwgMTYxMCBhbmQgNTkxMgogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDE2WFgpICs9IG9jcGkubwogCi0jIFBvd2VyIE1hbmFnZW1lbnQKLW9iai0kKENPTkZJR19QTSkgKz0gcG0ubyBzbGVlcC5vCiAKIG9iai0kKENPTkZJR19DUFVfRlJFUSkgKz0gY3B1LW9tYXAubwogb2JqLSQoQ09ORklHX09NQVBfRE1fVElNRVIpICs9IGRtdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCAzYzJiZmMwLi4zMmVjMDRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CkBAIC0zNywxNyArMzgsMzggQEAKICAqIFN0YW5kYXJkIGNsb2NrIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvY2xrLmgKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBSZXR1cm5zIGEgY2xvY2suIE5vdGUgdGhhdCB3ZSBmaXJzdCB0cnkgdG8gdXNlIGRldmljZSBpZCBvbiB0aGUgYnVzCisgKiBhbmQgY2xvY2sgbmFtZS4gSWYgdGhpcyBmYWlscywgd2UgdHJ5IHRvIHVzZSBjbG9jayBuYW1lIG9ubHkuCisgKi8KIHN0cnVjdCBjbGsgKiBjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisJaW50IGlkbm87CisKKwlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5idXMgIT0gJnBsYXRmb3JtX2J1c190eXBlKQorCQlpZG5vID0gLTE7CisJZWxzZQorCQlpZG5vID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmlkOwogCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAocC0+aWQgPT0gaWRubyAmJgorCQkgICAgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgeworCQkJY2xrID0gcDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKIAkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKIAkJCWNsayA9IHA7CiAJCQlicmVhazsKIAkJfQogCX0KKworZm91bmQ6CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwogCiAJcmV0dXJuIGNsazsKQEAgLTU5LDYgKzgxLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX2VuYWJsZSkKIAkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX2VuYWJsZShjbGspOwpAQCAtNzIsNiArOTcsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX2Rpc2FibGUpCiAJCWFyY2hfY2xvY2stPmNsa19kaXNhYmxlKGNsayk7CkBAIC04NCw2ICsxMTIsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiAwOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCXJldCA9IGNsay0+dXNlY291bnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CkBAIC05Nyw2ICsxMjgsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm4gMDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlyZXQgPSBjbGstPnJhdGU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CkBAIC0xMjEsNiArMTU1LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgcmV0ID0gMDsKIAorCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuIHJldDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX3JvdW5kX3JhdGUpCiAJCXJldCA9IGFyY2hfY2xvY2stPmNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CkBAIC0xMzMsNyArMTcwLDEwIEBACiBpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAJaWYgKGFyY2hfY2xvY2stPmNsa19zZXRfcmF0ZSkKQEAgLTE0Nyw3ICsxODcsMTAgQEAKIGludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspIHx8IHBhcmVudCA9PSBOVUxMIHx8IElTX0VSUihwYXJlbnQpKQorCQlyZXR1cm4gcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKQEAgLTE2Myw2ICsyMDYsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNsayAqIHJldCA9IE5VTEw7CiAKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiByZXQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAJaWYgKGFyY2hfY2xvY2stPmNsa19nZXRfcGFyZW50KQogCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfZ2V0X3BhcmVudChjbGspOwpAQCAtMTk5LDYgKzI0NSw5IEBACiAvKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgKi8KIHZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm47CisKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKIH0KIApAQCAtMjA3LDYgKzI1Niw5IEBACiB7CiAJc3RydWN0IGNsayAqY2xrcDsKIAorCWlmICh0Y2xrID09IE5VTEwgfHwgSVNfRVJSKHRjbGspKQorCQlyZXR1cm47CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKIAkJaWYgKGxpa2VseShjbGtwLT5wYXJlbnQgIT0gdGNsaykpCiAJCQljb250aW51ZTsKQEAgLTIxNyw2ICsyNjksOSBAQAogCiBpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKIHsKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKIAlsaXN0X2FkZCgmY2xrLT5ub2RlLCAmY2xvY2tzKTsKIAlpZiAoY2xrLT5pbml0KQpAQCAtMjI5LDYgKzI4NCw5IEBACiAKIHZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQogeworCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuOworCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKIAlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKIAltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CkBAIC0yMzksNiArMjk3LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAJaWYgKGFyY2hfY2xvY2stPmNsa19kZW55X2lkbGUpCiAJCWFyY2hfY2xvY2stPmNsa19kZW55X2lkbGUoY2xrKTsKQEAgLTI1MCw2ICszMTEsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX2FsbG93X2lkbGUpCiAJCWFyY2hfY2xvY2stPmNsa19hbGxvd19pZGxlKGNsayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCA5ZGNjZTkwLi41ZDVkNmViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTI0LDE0ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0KLQotdm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLSAgICAgICAgLyogTm90aGluZyAqLwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgPGFzbS9hcmNoL21lbmVsYXVzLmg+CiAKICNpZiAJZGVmaW5lZChDT05GSUdfSTJDX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0kyQ19PTUFQX01PRFVMRSkKIApAQCAtNTgsOSArNTEsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlMSA9IHsKICAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKICAgICAgICAgLmlkICAgICAgICAgICAgID0gMSwKLSAgICAgICAgLmRldiA9IHsKLSAgICAgICAgICAgICAgICAucmVsZWFzZSAgICAgICAgPSBvbWFwX25vcF9yZWxlYXNlLAotICAgICAgICB9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzMSksCiAJLnJlc291cmNlCT0gaTJjX3Jlc291cmNlczEsCiB9OwpAQCAtOTgsNiArODgsNjIgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmCWRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVBfTU9EVUxFKQorCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfa3Aodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkgfHwgbWFjaGluZV9pc19vbWFwX2gzKCkpIHsKKwkJb21hcF9jZmdfcmVnKEYxOF8xNjEwX0tCQzApOworCQlvbWFwX2NmZ19yZWcoRDIwXzE2MTBfS0JDMSk7CisJCW9tYXBfY2ZnX3JlZyhEMTlfMTYxMF9LQkMyKTsKKwkJb21hcF9jZmdfcmVnKEUxOF8xNjEwX0tCQzMpOworCQlvbWFwX2NmZ19yZWcoQzIxXzE2MTBfS0JDNCk7CisKKwkJb21hcF9jZmdfcmVnKEcxOF8xNjEwX0tCUjApOworCQlvbWFwX2NmZ19yZWcoRjE5XzE2MTBfS0JSMSk7CisJCW9tYXBfY2ZnX3JlZyhIMTRfMTYxMF9LQlIyKTsKKwkJb21hcF9jZmdfcmVnKEUyMF8xNjEwX0tCUjMpOworCQlvbWFwX2NmZ19yZWcoRTE5XzE2MTBfS0JSNCk7CisJCW9tYXBfY2ZnX3JlZyhOMTlfMTYxMF9LQlI1KTsKKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKSB7CisJCW9tYXBfY2ZnX3JlZyhFMl83MzBfS0JSMCk7CisJCW9tYXBfY2ZnX3JlZyhKN183MzBfS0JSMSk7CisJCW9tYXBfY2ZnX3JlZyhFMV83MzBfS0JSMik7CisJCW9tYXBfY2ZnX3JlZyhGM183MzBfS0JSMyk7CisJCW9tYXBfY2ZnX3JlZyhEMl83MzBfS0JSNCk7CisKKwkJb21hcF9jZmdfcmVnKEMyXzczMF9LQkMwKTsKKwkJb21hcF9jZmdfcmVnKEQzXzczMF9LQkMxKTsKKwkJb21hcF9jZmdfcmVnKEU0XzczMF9LQkMyKTsKKwkJb21hcF9jZmdfcmVnKEY0XzczMF9LQkMzKTsKKwkJb21hcF9jZmdfcmVnKEUzXzczMF9LQkM0KTsKKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9oNCgpKSB7CisJCW9tYXBfY2ZnX3JlZyhUMTlfMjRYWF9LQlIwKTsKKwkJb21hcF9jZmdfcmVnKFIxOV8yNFhYX0tCUjEpOworCQlvbWFwX2NmZ19yZWcoVjE4XzI0WFhfS0JSMik7CisJCW9tYXBfY2ZnX3JlZyhNMjFfMjRYWF9LQlIzKTsKKwkJb21hcF9jZmdfcmVnKEU1X18yNFhYX0tCUjQpOworCQlpZiAob21hcF9oYXNfbWVuZWxhdXMoKSkgeworCQkJb21hcF9jZmdfcmVnKEIzX18yNFhYX0tCUjUpOworCQkJb21hcF9jZmdfcmVnKEFBNF8yNFhYX0tCQzIpOworCQkJb21hcF9jZmdfcmVnKEIxM18yNFhYX0tCQzYpOworCQl9IGVsc2UgeworCQkJb21hcF9jZmdfcmVnKE0xOF8yNFhYX0tCUjUpOworCQkJb21hcF9jZmdfcmVnKEgxOV8yNFhYX0tCQzIpOworCQkJb21hcF9jZmdfcmVnKE4xOV8yNFhYX0tCQzYpOworCQl9CisJCW9tYXBfY2ZnX3JlZyhSMjBfMjRYWF9LQkMwKTsKKwkJb21hcF9jZmdfcmVnKE0xNF8yNFhYX0tCQzEpOworCQlvbWFwX2NmZ19yZWcoVjE3XzI0WFhfS0JDMyk7CisJCW9tYXBfY2ZnX3JlZyhQMjFfMjRYWF9LQkM0KTsKKwkJb21hcF9jZmdfcmVnKEwxNF8yNFhYX0tCQzUpOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2twKHZvaWQpIHt9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmCWRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpCiAKQEAgLTEzMCw3ICsxNzYsNiBAQAogCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAogCS5pZAkJPSAxLAogCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKIAkJLmRtYV9tYXNrCT0gJm1tYzFfZG1hbWFzaywKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMV9jb25mLAogCX0sCkBAIC0xNjAsNyArMjA1LDYgQEAKIAkubmFtZQkJPSAibW1jaS1vbWFwIiwKIAkuaWQJCT0gMiwKIAkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCiAJCS5kbWFfbWFzawk9ICZtbWMyX2RtYW1hc2ssCiAJCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzJfY29uZiwKIAl9LApAQCAtMjQwLDYgKzI4NCw1MiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tbWModm9pZCkge30KICNlbmRpZgogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBOdW1iZXJpbmcgZm9yIHRoZSBTUEktY2FwYWJsZSBjb250cm9sbGVycyB3aGVuIHVzZWQgZm9yIFNQSToKKyAqIHNwaQkJPSAxCisgKiB1d2lyZQk9IDIKKyAqIG1tYzEuLjIJPSAzLi40CisgKiBtY2JzcDEuLjMJPSA1Li43CisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9PTUFQX1VXSVJFKSB8fCBkZWZpbmVkKENPTkZJR19TUElfT01BUF9VV0lSRV9NT0RVTEUpCisKKyNkZWZpbmUJT01BUF9VV0lSRV9CQVNFCQkweGZmZmIzMDAwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXdpcmVfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUF9VV0lSRV9CQVNFLAorCQkuZW5kCQk9IE9NQVBfVVdJUkVfQkFTRSArIDB4MjAsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF91d2lyZV9kZXZpY2UgPSB7CisJLm5hbWUJICAgPSAib21hcF91d2lyZSIsCisJLmlkCSAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXdpcmVfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1d2lyZV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfdXdpcmUodm9pZCkKK3sKKwkvKiBGSVhNRSBkZWZpbmUgYW5kIHVzZSBhIGJvb3QgdGFnOyBub3QgYWxsIGJvYXJkcyB3aWxsIGJlIGhvb2tpbmcKKwkgKiB1cCBkZXZpY2VzIHRvIHRoZSBtaWNyb3dpcmUgY29udHJvbGxlciwgYW5kIG11bHRpLWJvYXJkIGNvbmZpZ3MKKwkgKiBtZWFuIHRoYXQgQ09ORklHX1NQSV9PTUFQX1VXSVJFIG1heSBiZSBjb25maWd1cmVkIGFueXdheS4uLgorCSAqLworCisJLyogYm9hcmQtc3BlY2lmaWMgY29kZSBtdXN0IGNvbmZpZ3VyZSBjaGlwc2VsZWN0cyAob25seSBhIGZldworCSAqIGFyZSBub3JtYWxseSB1c2VkKSBhbmQgU0NMSy9TREkvU0RPIChlYWNoIGhhcyB0d28gY2hvaWNlcykuCisJICovCisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF91d2lyZV9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfdXdpcmUodm9pZCkge30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjaWYJZGVmaW5lZChDT05GSUdfT01BUF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9XQVRDSERPR19NT0RVTEUpCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWApAQCAtMjU5LDkgKzM0OSw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJICAgPSAib21hcF93ZHQiLAogCS5pZAkgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCiB9OwpAQCAtMjk1LDkgKzM4Miw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3JuZ19kZXZpY2UgPSB7CiAJLm5hbWUJICAgPSAib21hcF9ybmciLAogCS5pZAkgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJuZ19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHJuZ19yZXNvdXJjZXMsCiB9OwpAQCAtMzEwLDQwICszOTQsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ybmcodm9pZCkge30KICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfRkJfT01BUF9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIG9tYXBfZmJfY29uZjsKLQotc3RhdGljIHU2NCBvbWFwX2ZiX2RtYV9tYXNrID0gfih1MzIpMDsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9mYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmYiIsCi0JLmlkCQk9IC0xLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCQk9IG9tYXBfbm9wX3JlbGVhc2UsCi0JCS5kbWFfbWFzawkJPSAmb21hcF9mYl9kbWFfbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gfih1MzIpMCwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gJm9tYXBfZmJfY29uZiwKLQl9LAotCS5udW1fcmVzb3VyY2VzID0gMCwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfZmIodm9pZCkKLXsKLQljb25zdCBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnICpjb25mOwotCi0JY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19MQ0QsIHN0cnVjdCBvbWFwX2xjZF9jb25maWcpOwotCWlmIChjb25mICE9IE5VTEwpCi0JCW9tYXBfZmJfY29uZiA9ICpjb25mOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9mYl9kZXZpY2UpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2ZiKHZvaWQpIHt9Ci0KLSNlbmRpZgotCiAvKgogICogVGhpcyBnZXRzIGNhbGxlZCBhZnRlciBib2FyZC1zcGVjaWZpYyBJTklUX01BQ0hJTkUsIGFuZCBpbml0aWFsaXplcyBtb3N0CiAgKiBvbi1jaGlwIHBlcmlwaGVyYWxzIGFjY2Vzc2libGUgb24gdGhpcyBib2FyZCAoZXhjZXB0IGZvciBmZXcgbGlrZSBVU0IpOgpAQCAtMzY5LDkgKzQxOSwxMCBAQAogCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCi0Jb21hcF9pbml0X2ZiKCk7CiAJb21hcF9pbml0X2kyYygpOworCW9tYXBfaW5pdF9rcCgpOwogCW9tYXBfaW5pdF9tbWMoKTsKKwlvbWFwX2luaXRfdXdpcmUoKTsKIAlvbWFwX2luaXRfd2R0KCk7CiAJb21hcF9pbml0X3JuZygpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggYTRlNWFjNy4uNWRhYzQyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTI1OCw2ICsxMjU4LDExIEBACiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKIH0KIAoraW50IG9tYXBfbGNkX2RtYV9leHRfcnVubmluZyh2b2lkKQoreworCXJldHVybiBsY2RfZG1hLmV4dF9jdHJsICYmIGxjZF9kbWEuYWN0aXZlOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZG1hKHZvaWQpCkBAIC0xMzg5LDYgKzEzOTQsNyBAQAogRVhQT1JUX1NZTUJPTChvbWFwX2VuYWJsZV9sY2RfZG1hKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zZXR1cF9sY2RfZG1hKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zdG9wX2xjZF9kbWEpOworRVhQT1JUX1NZTUJPTChvbWFwX2xjZF9kbWFfZXh0X3J1bm5pbmcpOwogRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2IxKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfbGNkX2RtYV9zaW5nbGVfdHJhbnNmZXIpOwogRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2V4dF9jb250cm9sbGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCmluZGV4IDM4ZDdlYmYuLmViYTNjYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwpAQCAtOTcsNiArOTcsMzIgQEAKIH0KIAogCisvKioKKyAqIG9tYXBfZG1fdGltZXJfbW9kaWZ5X2lkbGVjdF9tYXNrIC0gQ2hlY2sgaWYgYW55IHJ1bm5pbmcgdGltZXJzIHVzZSBBUk1YT1IKKyAqIEBpbnB1dG1hc2s6IGN1cnJlbnQgdmFsdWUgb2YgaWRsZWN0IG1hc2sKKyAqLworX191MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2soX191MzIgaW5wdXRtYXNrKQoreworCWludCBuOworCisJLyogSWYgQVJNWE9SIGNhbm5vdCBiZSBpZGxlZCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgdW5uZWNlc3NhcnkgKi8KKwlpZiAoIShpbnB1dG1hc2sgJiAoMSA8PCAxKSkpCisJCXJldHVybiBpbnB1dG1hc2s7CisKKwkvKiBJZiBhbnkgYWN0aXZlIHRpbWVyIGlzIHVzaW5nIEFSTVhPUiByZXR1cm4gbW9kaWZpZWQgbWFzayAqLworCWZvciAobiA9IDA7IGRtX3RpbWVyc1tuXS5iYXNlOyArK24pCisJCWlmIChvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKCZkbV90aW1lcnNbbl0sIE9NQVBfVElNRVJfQ1RSTF9SRUcpJgorCQkgICAgT01BUF9USU1FUl9DVFJMX1NUKSB7CisJCQlpZiAoKChvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMSk+PihuKjIpKSAmIDB4MDMpID09IDApCisJCQkJaW5wdXRtYXNrICY9IH4oMSA8PCAxKTsKKwkJCWVsc2UKKwkJCQlpbnB1dG1hc2sgJj0gfigxIDw8IDIpOworCQl9CisKKwlyZXR1cm4gaW5wdXRtYXNrOworfQorCisKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfc291cmNlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHNvdXJjZSkKIHsKIAlpbnQgbiA9ICh0aW1lciAtIGRtX3RpbWVycykgPDwgMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9mYi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1ZTliOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9mYi5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXBmYi5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfRkJfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfRkJfT01BUF9NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcGZiX3BsYXRmb3JtX2RhdGEgb21hcGZiX2NvbmZpZzsKKworc3RhdGljIHU2NCBvbWFwX2ZiX2RtYV9tYXNrID0gfih1MzIpMDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9mYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBmYiIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmb21hcF9mYl9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gfih1MzIpMCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJm9tYXBmYl9jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDAsCit9OworCisvKiBjYWxsZWQgZnJvbSBtYXBfaW8gKi8KK3ZvaWQgb21hcGZiX3Jlc2VydmVfbWVtKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnICpmYm1lbV9jb25mOworCisJb21hcGZiX2NvbmZpZy5mYm1lbS5mYl9zcmFtX3N0YXJ0ID0gb21hcF9mYl9zcmFtX3N0YXJ0OworCW9tYXBmYl9jb25maWcuZmJtZW0uZmJfc3JhbV9zaXplID0gb21hcF9mYl9zcmFtX3NpemU7CisKKwlmYm1lbV9jb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0ZCTUVNLCBzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcpOworCisJaWYgKGZibWVtX2NvbmYgIT0gTlVMTCkgeworCQkvKiBpbmRpY2F0ZSB0aGF0IHRoZSBib290bG9hZGVyIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhlCisJCSAqIGZiIGRldmljZSwgc28gd2UnbGwgc2tpcCB0aGF0IHBhcnQgaW4gdGhlIGZiIGRyaXZlcgorCQkgKi8KKwkJb21hcGZiX2NvbmZpZy5mYm1lbS5mYl9zZHJhbV9zdGFydCA9IGZibWVtX2NvbmYtPmZiX3NkcmFtX3N0YXJ0OworCQlvbWFwZmJfY29uZmlnLmZibWVtLmZiX3NkcmFtX3NpemUgPSBmYm1lbV9jb25mLT5mYl9zZHJhbV9zaXplOworCQlpZiAoZmJtZW1fY29uZi0+ZmJfc2RyYW1fc2l6ZSkgeworCQkJcHJfaW5mbygiUmVzZXJ2aW5nICV1IGJ5dGVzIFNEUkFNIGZvciBmcmFtZSBidWZmZXJcbiIsCisJCQkJZmJtZW1fY29uZi0+ZmJfc2RyYW1fc2l6ZSk7CisJCQlyZXNlcnZlX2Jvb3RtZW0oZmJtZW1fY29uZi0+ZmJfc2RyYW1fc3RhcnQsCisJCQkJCWZibWVtX2NvbmYtPmZiX3NkcmFtX3NpemUpOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBvbWFwX2luaXRfZmIodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnICpjb25mOworCisJY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19MQ0QsIHN0cnVjdCBvbWFwX2xjZF9jb25maWcpOworCWlmIChjb25mID09IE5VTEwpCisJCXJldHVybiAwOworCisJb21hcGZiX2NvbmZpZy5sY2QgPSAqY29uZjsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfZmJfZGV2aWNlKTsKK30KKworYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZmIpOworCisjZWxzZQorCit2b2lkIG9tYXBmYl9yZXNlcnZlX21lbSh2b2lkKSB7fQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCBiNGQ1YjllLi5kM2M4ZWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3Bpb19iYW5rICpnZXRfZ3Bpb19iYW5rKGludCBncGlvKQogewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCWlmIChPTUFQX0dQSU9fSVNfTVBVSU8oZ3BpbykpCiAJCQlyZXR1cm4gJmdwaW9fYmFua1swXTsKIAkJcmV0dXJuICZncGlvX2JhbmtbMV07CkBAIC0yMjMsNyArMjIzLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpICYmIGdwaW8gPCAxNikKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkgJiYgZ3BpbyA8IDE2KQogCQlyZXR1cm4gMDsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCkBAIC00MDIsMTMgKzQwMiwxMyBAQAogCXUzMiBncGlvX2JpdCA9IDEgPDwgZ3BpbzsKIAogCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwLCBncGlvX2JpdCwKLQkJdHJpZ2dlciAmIElSUVRfTE9XKTsKKwkJdHJpZ2dlciAmIF9fSVJRVF9MT1dMVkwpOwogCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxLCBncGlvX2JpdCwKLQkJdHJpZ2dlciAmIElSUVRfSElHSCk7CisJCXRyaWdnZXIgJiBfX0lSUVRfSElHSExWTCk7CiAJTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QsIGdwaW9fYml0LAotCQl0cmlnZ2VyICYgSVJRVF9SSVNJTkcpOworCQl0cmlnZ2VyICYgX19JUlFUX1JJU0VER0UpOwogCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCwgZ3Bpb19iaXQsCi0JCXRyaWdnZXIgJiBJUlFUX0ZBTExJTkcpOworCQl0cmlnZ2VyICYgX19JUlFUX0ZBTEVER0UpOwogCS8qIEZJWE1FOiBQb3NzaWJseSBkbyAnc2V0X2lycV9oYW5kbGVyKGosIGRvX2xldmVsX0lSUSknIGlmIG9ubHkgbGV2ZWwKIAkgKiB0cmlnZ2VyaW5nIHJlcXVlc3RlZC4gKi8KIH0KQEAgLTQyMiw5ICs0MjIsOSBAQAogCWNhc2UgTUVUSE9EX01QVUlPOgogCQlyZWcgKz0gT01BUF9NUFVJT19HUElPX0lOVF9FREdFOwogCQlsID0gX19yYXdfcmVhZGwocmVnKTsKLQkJaWYgKHRyaWdnZXIgPT0gSVJRVF9SSVNJTkcpCisJCWlmICh0cmlnZ2VyICYgX19JUlFUX1JJU0VER0UpCiAJCQlsIHw9IDEgPDwgZ3BpbzsKLQkJZWxzZSBpZiAodHJpZ2dlciA9PSBJUlFUX0ZBTExJTkcpCisJCWVsc2UgaWYgKHRyaWdnZXIgJiBfX0lSUVRfRkFMRURHRSkKIAkJCWwgJj0gfigxIDw8IGdwaW8pOwogCQllbHNlCiAJCQlnb3RvIGJhZDsKQEAgLTQzMiw5ICs0MzIsOSBAQAogCWNhc2UgTUVUSE9EX0dQSU9fMTUxMDoKIAkJcmVnICs9IE9NQVAxNTEwX0dQSU9fSU5UX0NPTlRST0w7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCQlpZiAodHJpZ2dlciA9PSBJUlFUX1JJU0lORykKKwkJaWYgKHRyaWdnZXIgJiBfX0lSUVRfUklTRURHRSkKIAkJCWwgfD0gMSA8PCBncGlvOwotCQllbHNlIGlmICh0cmlnZ2VyID09IElSUVRfRkFMTElORykKKwkJZWxzZSBpZiAodHJpZ2dlciAmIF9fSVJRVF9GQUxFREdFKQogCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CiAJCWVsc2UKIAkJCWdvdG8gYmFkOwpAQCAtNDQ2LDIwICs0NDYsMjEgQEAKIAkJCXJlZyArPSBPTUFQMTYxMF9HUElPX0VER0VfQ1RSTDE7CiAJCWdwaW8gJj0gMHgwNzsKIAkJLyogV2UgYWxsb3cgb25seSBlZGdlIHRyaWdnZXJpbmcsIGkuZS4gdHdvIGxvd2VzdCBiaXRzICovCi0JCWlmICh0cmlnZ2VyICYgfklSUVRfQk9USEVER0UpCisJCWlmICh0cmlnZ2VyICYgKF9fSVJRVF9MT1dMVkwgfCBfX0lSUVRfSElHSExWTCkpCiAJCQlCVUcoKTsKLQkJLyogTk9URToga25vd3MgX19JUlFUX3tGQUwsUklTfUVER0UgbWF0Y2ggT01BUCBoYXJkd2FyZSAqLwotCQl0cmlnZ2VyICY9IDB4MDM7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwogCQlsICY9IH4oMyA8PCAoZ3BpbyA8PCAxKSk7Ci0JCWwgfD0gdHJpZ2dlciA8PCAoZ3BpbyA8PCAxKTsKKwkJaWYgKHRyaWdnZXIgJiBfX0lSUVRfUklTRURHRSkKKwkJCWwgfD0gMiA8PCAoZ3BpbyA8PCAxKTsKKwkJaWYgKHRyaWdnZXIgJiBfX0lSUVRfRkFMRURHRSkKKwkJCWwgfD0gMSA8PCAoZ3BpbyA8PCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBNRVRIT0RfR1BJT183MzA6CiAJCXJlZyArPSBPTUFQNzMwX0dQSU9fSU5UX0NPTlRST0w7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCQlpZiAodHJpZ2dlciA9PSBJUlFUX1JJU0lORykKKwkJaWYgKHRyaWdnZXIgJiBfX0lSUVRfUklTRURHRSkKIAkJCWwgfD0gMSA8PCBncGlvOwotCQllbHNlIGlmICh0cmlnZ2VyID09IElSUVRfRkFMTElORykKKwkJZWxzZSBpZiAodHJpZ2dlciAmIF9fSVJRVF9GQUxFREdFKQogCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CiAJCWVsc2UKIAkJCWdvdG8gYmFkOwpAQCAtNDkxLDcgKzQ5Miw5IEBACiAJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh0eXBlICYgKF9fSVJRVF9MT1dMVkx8X19JUlFUX0hJR0hMVkx8SVJRVF9QUk9CRSkpCisJaWYgKHR5cGUgJiBJUlFUX1BST0JFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICh0eXBlICYgKF9fSVJRVF9MT1dMVkx8X19JUlFUX0hJR0hMVkwpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAliYW5rID0gZ2V0X2dwaW9fYmFuayhncGlvKTsKQEAgLTc1NSwxMyArNzU4LDMyIEBACiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18yNFhYKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMTsKICNlbmRpZgotCiAJd2hpbGUoMSkgewotCQlpc3IgPSBfX3Jhd19yZWFkbChpc3JfcmVnKTsKLQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyLCAwKTsKLQkJX2NsZWFyX2dwaW9faXJxYmFuayhiYW5rLCBpc3IpOwotCQlfZW5hYmxlX2dwaW9faXJxYmFuayhiYW5rLCBpc3IsIDEpOwotCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJdTMyIGlzcl9zYXZlZCwgbGV2ZWxfbWFzayA9IDA7CisKKwkJaXNyX3NhdmVkID0gaXNyID0gX19yYXdfcmVhZGwoaXNyX3JlZyk7CisKKwkJaWYgKGNwdV9pc19vbWFwMTV4eCgpICYmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX01QVUlPKSkKKwkJCWlzciAmPSAweDAwMDBmZmZmOworCisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWxldmVsX21hc2sgPQorCQkJCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQlPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCkgfAorCQkJCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQlPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMSk7CisKKwkJLyogY2xlYXIgZWRnZSBzZW5zaXRpdmUgaW50ZXJydXB0cyBiZWZvcmUgaGFuZGxlcihzKSBhcmUKKwkJY2FsbGVkIHNvIHRoYXQgd2UgZG9uJ3QgbWlzcyBhbnkgaW50ZXJydXB0IG9jY3VycmVkIHdoaWxlCisJCWV4ZWN1dGluZyB0aGVtICovCisJCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlzcl9zYXZlZCAmIH5sZXZlbF9tYXNrLCAwKTsKKwkJX2NsZWFyX2dwaW9faXJxYmFuayhiYW5rLCBpc3Jfc2F2ZWQgJiB+bGV2ZWxfbWFzayk7CisJCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlzcl9zYXZlZCAmIH5sZXZlbF9tYXNrLCAxKTsKKworCQkvKiBpZiB0aGVyZSBpcyBvbmx5IGVkZ2Ugc2Vuc2l0aXZlIEdQSU8gcGluIGludGVycnVwdHMKKwkJY29uZmlndXJlZCwgd2UgY291bGQgdW5tYXNrIEdQSU8gYmFuayBpbnRlcnJ1cHQgaW1tZWRpYXRlbHkgKi8KKwkJaWYgKCFsZXZlbF9tYXNrKQorCQkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CiAKIAkJaWYgKCFpc3IpCiAJCQlicmVhazsKQEAgLTc3NCw2ICs3OTYsMjAgQEAKIAkJCWQgPSBpcnFfZGVzYyArIGdwaW9faXJxOwogCQkJZGVzY19oYW5kbGVfaXJxKGdwaW9faXJxLCBkLCByZWdzKTsKIAkJfQorCisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQkJLyogY2xlYXIgbGV2ZWwgc2Vuc2l0aXZlIGludGVycnVwdHMgYWZ0ZXIgaGFuZGxlcihzKSAqLworCQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyX3NhdmVkICYgbGV2ZWxfbWFzaywgMCk7CisJCQlfY2xlYXJfZ3Bpb19pcnFiYW5rKGJhbmssIGlzcl9zYXZlZCAmIGxldmVsX21hc2spOworCQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyX3NhdmVkICYgbGV2ZWxfbWFzaywgMSk7CisJCX0KKworCQkvKiBpZiBiYW5rIGhhcyBhbnkgbGV2ZWwgc2Vuc2l0aXZlIEdQSU8gcGluIGludGVycnVwdAorCQljb25maWd1cmVkLCB3ZSBtdXN0IHVubWFzayB0aGUgYmFuayBpbnRlcnJ1cHQgb25seSBhZnRlcgorCQloYW5kbGVyKHMpIGFyZSBleGVjdXRlZCBpbiBvcmRlciB0byBhdm9pZCBzcHVyaW91cyBiYW5rCisJCWludGVycnVwdCAqLworCQlpZiAobGV2ZWxfbWFzaykKKwkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogCX0KIH0KIApAQCAtODQ4LDcgKzg4NCw3IEBACiAKIAlpbml0aWFsaXplZCA9IDE7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJZ3Bpb19pY2sgPSBjbGtfZ2V0KE5VTEwsICJhcm1fZ3Bpb19jayIpOwogCQlpZiAoSVNfRVJSKGdwaW9faWNrKSkKIAkJCXByaW50aygiQ291bGQgbm90IGdldCBhcm1fZ3Bpb19ja1xuIik7CkBAIC04NjksNyArOTA1LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMTUxMCBHUElPIGhhcmR3YXJlXG4iKTsKIAkJZ3Bpb19iYW5rX2NvdW50ID0gMjsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzE1MTA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCmluZGV4IDFjZDJjYWMuLjE5NmFhYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCkBAIC0zNCw3ICszNCw3IEBACiAjaWZkZWYgQ09ORklHX01DQlNQX0RFQlVHCiAjZGVmaW5lIERCRyh4Li4uKQlwcmludGsoeCkKICNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERCRyh4Li4uKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiBzdHJ1Y3Qgb21hcF9tY2JzcCB7CkBAIC00NCw2ICs0NCw3IEBACiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCAgICAgICByeF93b3JkX2xlbmd0aDsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoICAgICAgIHR4X3dvcmRfbGVuZ3RoOwogCisJb21hcF9tY2JzcF9pb190eXBlX3QgICAgICAgICBpb190eXBlOyAvKiBJUlEgb3IgcG9sbCAqLwogCS8qIElSUSBiYXNlZCBUWC9SWCAqLwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfaXJxOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgdHhfaXJxOwpAQCAtNjQsMTAgKzY1LDE5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3AgbWNic3BbT01BUF9NQVhfTUNCU1BfQ09VTlRdOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiBzdGF0aWMgc3RydWN0IGNsayAqbWNic3BfZHNwX2NrID0gMDsKIHN0YXRpYyBzdHJ1Y3QgY2xrICptY2JzcF9hcGlfY2sgPSAwOwogc3RhdGljIHN0cnVjdCBjbGsgKm1jYnNwX2RzcHhvcl9jayA9IDA7Ci0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCitzdGF0aWMgc3RydWN0IGNsayAqbWNic3AxX2ljayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqbWNic3AxX2ZjayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqbWNic3AyX2ljayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqbWNic3AyX2ZjayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqc3lzX2NrID0gMDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpzeXNfY2xrb3V0ID0gMDsKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBvbWFwX21jYnNwX2R1bXBfcmVnKHU4IGlkKQogewpAQCAtODgsNyArOTgsNiBAQAogCURCRygiKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwogfQogCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX21jYnNwX3R4X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKiBtY2JzcF90eCA9IChzdHJ1Y3Qgb21hcF9tY2JzcCAqKShkZXZfaWQpOwpAQCAtMTA5LDcgKzExOCw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0KIHN0YXRpYyB2b2lkIG9tYXBfbWNic3BfdHhfZG1hX2NhbGxiYWNrKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKiBtY2JzcF9kbWFfdHggPSAoc3RydWN0IG9tYXBfbWNic3AgKikoZGF0YSk7CkBAIC0xNzYsNyArMTg0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWlmIChpZCA+IE9NQVBfTUFYX01DQlNQX0NPVU5UKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgZG9lc24ndCBleGlzdFxuIiwgaWQgKyAxKTsKIAkJCXJldHVybiAtMTsKQEAgLTE4Nyw5ICsxOTUsMTAgQEAKIAlyZXR1cm4gLTE7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kc3BfcmVxdWVzdCh2b2lkKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgewogCQljbGtfZW5hYmxlKG1jYnNwX2RzcF9jayk7CiAJCWNsa19lbmFibGUobWNic3BfYXBpX2NrKTsKIApAQCAtMjA3LDEyICsyMTYsNDkgQEAKIAogc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kc3BfZnJlZSh2b2lkKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgewogCQljbGtfZGlzYWJsZShtY2JzcF9kc3B4b3JfY2spOwogCQljbGtfZGlzYWJsZShtY2JzcF9kc3BfY2spOwogCQljbGtfZGlzYWJsZShtY2JzcF9hcGlfY2spOwogCX0KIH0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKK3N0YXRpYyB2b2lkIG9tYXAyX21jYnNwMl9tdXhfc2V0dXAodm9pZCkKK3sKKwlvbWFwX2NmZ19yZWcoWTE1XzI0WFhfTUNCU1AyX0NMS1gpOworCW9tYXBfY2ZnX3JlZyhSMTRfMjRYWF9NQ0JTUDJfRlNYKTsKKwlvbWFwX2NmZ19yZWcoVzE1XzI0WFhfTUNCU1AyX0RSKTsKKwlvbWFwX2NmZ19yZWcoVjE1XzI0WFhfTUNCU1AyX0RYKTsKKwlvbWFwX2NmZ19yZWcoVjE0XzI0WFhfR1BJTzExNyk7CisJb21hcF9jZmdfcmVnKFcxNF8yNFhYX1NZU19DTEtPVVQpOworfQorI2VuZGlmCisKKy8qCisgKiBXZSBjYW4gY2hvb3NlIGJldHdlZW4gSVJRIGJhc2VkIG9yIHBvbGxlZCBJTy4KKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBvbWFwX21jYnNwX3JlcXVlc3QoKS4KKyAqLworaW50IG9tYXBfbWNic3Bfc2V0X2lvX3R5cGUodW5zaWduZWQgaW50IGlkLCBvbWFwX21jYnNwX2lvX3R5cGVfdCBpb190eXBlKQoreworCWlmIChvbWFwX21jYnNwX2NoZWNrKGlkKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisKKwlpZiAoIW1jYnNwW2lkXS5mcmVlKSB7CisJCXByaW50ayAoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgaXMgY3VycmVudGx5IGluIHVzZVxuIiwgaWQgKyAxKTsKKwkJc3Bpbl91bmxvY2soJm1jYnNwW2lkXS5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWNic3BbaWRdLmlvX3R5cGUgPSBpb190eXBlOworCisJc3Bpbl91bmxvY2soJm1jYnNwW2lkXS5sb2NrKTsKKworCXJldHVybiAwOworfQogCiBpbnQgb21hcF9tY2JzcF9yZXF1ZXN0KHVuc2lnbmVkIGludCBpZCkKIHsKQEAgLTIyMSwxMiArMjY3LDI2IEBACiAJaWYgKG9tYXBfbWNic3BfY2hlY2soaWQpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCS8qCiAJICogT24gMTUxMCwgMTYxMCBhbmQgMTcxMCwgTWNCU1AxIGFuZCBNY0JTUDMKIAkgKiBhcmUgRFNQIHB1YmxpYyBwZXJpcGhlcmFscy4KIAkgKi8KIAlpZiAoaWQgPT0gT01BUF9NQ0JTUDEgfHwgaWQgPT0gT01BUF9NQ0JTUDMpCiAJCW9tYXBfbWNic3BfZHNwX3JlcXVlc3QoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKGlkID09IE9NQVBfTUNCU1AxKSB7CisJCQljbGtfZW5hYmxlKG1jYnNwMV9pY2spOworCQkJY2xrX2VuYWJsZShtY2JzcDFfZmNrKTsKKwkJfSBlbHNlIHsKKwkJCWNsa19lbmFibGUobWNic3AyX2ljayk7CisJCQljbGtfZW5hYmxlKG1jYnNwMl9mY2spOworCQl9CisJfQorI2VuZGlmCiAKIAlzcGluX2xvY2soJm1jYnNwW2lkXS5sb2NrKTsKIAlpZiAoIW1jYnNwW2lkXS5mcmVlKSB7CkBAIC0yMzgsMzAgKzI5OCwzMyBAQAogCW1jYnNwW2lkXS5mcmVlID0gMDsKIAlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOwogCi0JLyogV2UgbmVlZCB0byBnZXQgSVJRcyBoZXJlICovCi0JZXJyID0gcmVxdWVzdF9pcnEobWNic3BbaWRdLnR4X2lycSwgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlciwgMCwKLQkJCSAgIk1jQlNQIiwKLQkJCSAgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJPTUFQLU1jQlNQOiBVbmFibGUgdG8gcmVxdWVzdCBUWCBJUlEgJWQgZm9yIE1jQlNQJWRcbiIsCi0JCSAgICAgICBtY2JzcFtpZF0udHhfaXJxLCBtY2JzcFtpZF0uaWQpOwotCQlyZXR1cm4gZXJyOworCWlmIChtY2JzcFtpZF0uaW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgeworCQkvKiBXZSBuZWVkIHRvIGdldCBJUlFzIGhlcmUgKi8KKwkJZXJyID0gcmVxdWVzdF9pcnEobWNic3BbaWRdLnR4X2lycSwgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlciwgMCwKKwkJCQkgICJNY0JTUCIsCisJCQkJICAodm9pZCAqKSAoJm1jYnNwW2lkXSkpOworCQlpZiAoZXJyICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogVW5hYmxlIHRvIHJlcXVlc3QgVFggSVJRICVkIGZvciBNY0JTUCVkXG4iLAorCQkJICAgICAgIG1jYnNwW2lkXS50eF9pcnEsIG1jYnNwW2lkXS5pZCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2lycV9jb21wbGV0aW9uKSk7CisKKworCQllcnIgPSByZXF1ZXN0X2lycShtY2JzcFtpZF0ucnhfaXJxLCBvbWFwX21jYnNwX3J4X2lycV9oYW5kbGVyLCAwLAorCQkJCSAgIk1jQlNQIiwKKwkJCQkgICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCWlmIChlcnIgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJPTUFQLU1jQlNQOiBVbmFibGUgdG8gcmVxdWVzdCBSWCBJUlEgJWQgZm9yIE1jQlNQJWRcbiIsCisJCQkgICAgICAgbWNic3BbaWRdLnJ4X2lycSwgbWNic3BbaWRdLmlkKTsKKwkJCWZyZWVfaXJxKG1jYnNwW2lkXS50eF9pcnEsICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnJ4X2lycV9jb21wbGV0aW9uKSk7CiAJfQogCi0JaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2lycV9jb21wbGV0aW9uKSk7Ci0KLQotCWVyciA9IHJlcXVlc3RfaXJxKG1jYnNwW2lkXS5yeF9pcnEsIG9tYXBfbWNic3BfcnhfaXJxX2hhbmRsZXIsIDAsCi0JCQkgICJNY0JTUCIsCi0JCQkgICh2b2lkICopICgmbWNic3BbaWRdKSk7Ci0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogVW5hYmxlIHRvIHJlcXVlc3QgUlggSVJRICVkIGZvciBNY0JTUCVkXG4iLAotCQkgICAgICAgbWNic3BbaWRdLnJ4X2lycSwgbWNic3BbaWRdLmlkKTsKLQkJZnJlZV9pcnEobWNic3BbaWRdLnR4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfaXJxX2NvbXBsZXRpb24pKTsKIAlyZXR1cm4gMDsKIAogfQpAQCAtMjcxLDggKzMzNCwyNCBAQAogCWlmIChvbWFwX21jYnNwX2NoZWNrKGlkKSA8IDApCiAJCXJldHVybjsKIAotCWlmIChpZCA9PSBPTUFQX01DQlNQMSB8fCBpZCA9PSBPTUFQX01DQlNQMykKLQkJb21hcF9tY2JzcF9kc3BfZnJlZSgpOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCWlmIChpZCA9PSBPTUFQX01DQlNQMSB8fCBpZCA9PSBPTUFQX01DQlNQMykKKwkJCW9tYXBfbWNic3BfZHNwX2ZyZWUoKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmIChpZCA9PSBPTUFQX01DQlNQMSkgeworCQkJY2xrX2Rpc2FibGUobWNic3AxX2ljayk7CisJCQljbGtfZGlzYWJsZShtY2JzcDFfZmNrKTsKKwkJfSBlbHNlIHsKKwkJCWNsa19kaXNhYmxlKG1jYnNwMl9pY2spOworCQkJY2xrX2Rpc2FibGUobWNic3AyX2Zjayk7CisJCX0KKwl9CisjZW5kaWYKIAogCXNwaW5fbG9jaygmbWNic3BbaWRdLmxvY2spOwogCWlmIChtY2JzcFtpZF0uZnJlZSkgewpAQCAtMjg0LDkgKzM2MywxMSBAQAogCW1jYnNwW2lkXS5mcmVlID0gMTsKIAlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOwogCi0JLyogRnJlZSBJUlFzICovCi0JZnJlZV9pcnEobWNic3BbaWRdLnJ4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKLQlmcmVlX2lycShtY2JzcFtpZF0udHhfaXJxLCAodm9pZCAqKSAoJm1jYnNwW2lkXSkpOworCWlmIChtY2JzcFtpZF0uaW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgeworCQkvKiBGcmVlIElSUXMgKi8KKwkJZnJlZV9pcnEobWNic3BbaWRdLnJ4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwkJZnJlZV9pcnEobWNic3BbaWRdLnR4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwl9CiB9CiAKIC8qCkBAIC00NjEsNiArNTQyLDExNSBAQAogfQogCiAKK2ludCBvbWFwX21jYnNwX3NwaV9tYXN0ZXJfeG1pdF93b3JkX3BvbGwodW5zaWduZWQgaW50IGlkLCB1MzIgd29yZCkKK3sKKwl1MzIgaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOworCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggdHhfd29yZF9sZW5ndGggPSBtY2JzcFtpZF0udHhfd29yZF9sZW5ndGg7CisJb21hcF9tY2JzcF93b3JkX2xlbmd0aCByeF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aDsKKwl1MTYgc3BjcjIsIHNwY3IxLCBhdHRlbXB0cyA9IDAsIHdvcmRfbHNiLCB3b3JkX21zYiA9IDA7CisKKwlpZiAodHhfd29yZF9sZW5ndGggIT0gcnhfd29yZF9sZW5ndGgpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmlyc3Qgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0dGVyIHRvIGJlIHJlYWR5ICovCisJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCXdoaWxlICghKHNwY3IyICYgWFJEWSkpIHsKKwkJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCQlpZiAoYXR0ZW1wdHMrKyA+IDEwMDApIHsKKwkJCS8qIFdlIG11c3QgcmVzZXQgdGhlIHRyYW5zbWl0dGVyICovCisJCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCBzcGNyMiAmICh+WFJTVCkpOworCQkJdWRlbGF5KDEwKTsKKwkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CisJCQl1ZGVsYXkoMTApOworCQkJcHJpbnRrKCJNY0JTUCB0cmFuc21pdHRlciBub3QgcmVhZHlcbiIpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisKKwkvKiBOb3cgd2UgY2FuIHB1c2ggdGhlIGRhdGEgKi8KKwlpZiAodHhfd29yZF9sZW5ndGggPiBPTUFQX01DQlNQX1dPUkRfMTYpCisJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgRFhSMiwgd29yZCA+PiAxNik7CisJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBEWFIxLCB3b3JkICYgMHhmZmZmKTsKKworCS8qIFdlIHdhaXQgZm9yIHRoZSByZWNlaXZlciB0byBiZSByZWFkeSAqLworCXNwY3IxID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKKwl3aGlsZSAoIShzcGNyMSAmIFJSRFkpKSB7CisJCXNwY3IxID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKKwkJaWYgKGF0dGVtcHRzKysgPiAxMDAwKSB7CisJCQkvKiBXZSBtdXN0IHJlc2V0IHRoZSByZWNlaXZlciAqLworCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgc3BjcjEgJiAoflJSU1QpKTsKKwkJCXVkZWxheSgxMCk7CisJCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCBzcGNyMSB8IFJSU1QpOworCQkJdWRlbGF5KDEwKTsKKwkJCXByaW50aygiTWNCU1AgcmVjZWl2ZXIgbm90IHJlYWR5XG4iKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCisJLyogUmVjZWl2ZXIgaXMgcmVhZHksIGxldCdzIHJlYWQgdGhlIGR1bW15IGRhdGEgKi8KKwlpZiAocnhfd29yZF9sZW5ndGggPiBPTUFQX01DQlNQX1dPUkRfMTYpCisJCXdvcmRfbXNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjIpOworCXdvcmRfbHNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBvbWFwX21jYnNwX3NwaV9tYXN0ZXJfcmVjdl93b3JkX3BvbGwodW5zaWduZWQgaW50IGlkLCB1MzIgKiB3b3JkKQoreworCXUzMiBpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2UsIGNsb2NrX3dvcmQgPSAwOworCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggdHhfd29yZF9sZW5ndGggPSBtY2JzcFtpZF0udHhfd29yZF9sZW5ndGg7CisJb21hcF9tY2JzcF93b3JkX2xlbmd0aCByeF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aDsKKwl1MTYgc3BjcjIsIHNwY3IxLCBhdHRlbXB0cyA9IDAsIHdvcmRfbHNiLCB3b3JkX21zYiA9IDA7CisKKwlpZiAodHhfd29yZF9sZW5ndGggIT0gcnhfd29yZF9sZW5ndGgpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmlyc3Qgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0dGVyIHRvIGJlIHJlYWR5ICovCisJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCXdoaWxlICghKHNwY3IyICYgWFJEWSkpIHsKKwkJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCQlpZiAoYXR0ZW1wdHMrKyA+IDEwMDApIHsKKwkJCS8qIFdlIG11c3QgcmVzZXQgdGhlIHRyYW5zbWl0dGVyICovCisJCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCBzcGNyMiAmICh+WFJTVCkpOworCQkJdWRlbGF5KDEwKTsKKwkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CisJCQl1ZGVsYXkoMTApOworCQkJcHJpbnRrKCJNY0JTUCB0cmFuc21pdHRlciBub3QgcmVhZHlcbiIpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisKKwkvKiBXZSBmaXJzdCBuZWVkIHRvIGVuYWJsZSB0aGUgYnVzIGNsb2NrICovCisJaWYgKHR4X3dvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQorCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjIsIGNsb2NrX3dvcmQgPj4gMTYpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgRFhSMSwgY2xvY2tfd29yZCAmIDB4ZmZmZik7CisKKwkvKiBXZSB3YWl0IGZvciB0aGUgcmVjZWl2ZXIgdG8gYmUgcmVhZHkgKi8KKwlzcGNyMSA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7CisJd2hpbGUgKCEoc3BjcjEgJiBSUkRZKSkgeworCQlzcGNyMSA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7CisJCWlmIChhdHRlbXB0cysrID4gMTAwMCkgeworCQkJLyogV2UgbXVzdCByZXNldCB0aGUgcmVjZWl2ZXIgKi8KKwkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHNwY3IxICYgKH5SUlNUKSk7CisJCQl1ZGVsYXkoMTApOworCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgc3BjcjEgfCBSUlNUKTsKKwkJCXVkZWxheSgxMCk7CisJCQlwcmludGsoIk1jQlNQIHJlY2VpdmVyIG5vdCByZWFkeVxuIik7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCX0KKworCS8qIFJlY2VpdmVyIGlzIHJlYWR5LCB0aGVyZSBpcyBzb21ldGhpbmcgZm9yIHVzICovCisJaWYgKHJ4X3dvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQorCQl3b3JkX21zYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIyKTsKKwl3b3JkX2xzYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIxKTsKKworCXdvcmRbMF0gPSAod29yZF9sc2IgfCAod29yZF9tc2IgPDwgMTYpKTsKKworCXJldHVybiAwOworfQorCisKIC8qCiAgKiBTaW1wbGUgRE1BIGJhc2VkIGJ1ZmZlciByeC90eCByb3V0aW5lcy4KICAqIE5vdGhpbmcgZmFuY3ksIGp1c3QgYSBzaW5nbGUgYnVmZmVyIHR4L3J4IHRocm91Z2ggRE1BLgpAQCAtNDcxLDYgKzY2MSw5IEBACiBpbnQgb21hcF9tY2JzcF94bWl0X2J1ZmZlcih1bnNpZ25lZCBpbnQgaWQsIGRtYV9hZGRyX3QgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewogCWludCBkbWFfdHhfY2g7CisJaW50IHNyY19wb3J0ID0gMDsKKwlpbnQgZGVzdF9wb3J0ID0gMDsKKwlpbnQgc3luY19kZXYgPSAwOwogCiAJaWYgKG9tYXBfbWNic3BfY2hlY2soaWQpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00ODcsMjAgKzY4MCwyNyBAQAogCiAJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2RtYV9jb21wbGV0aW9uKSk7CiAKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJc3JjX3BvcnQgPSBPTUFQX0RNQV9QT1JUX1RJUEI7CisJCWRlc3RfcG9ydCA9IE9NQVBfRE1BX1BPUlRfRU1JRkY7CisJfQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJc3luY19kZXYgPSBtY2JzcFtpZF0uZG1hX3R4X3N5bmM7CisKIAlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCSAgICAgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCQkgICAgIGxlbmd0aCA+PiAxLCAxLAogCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5ULAotCQkJCSAgICAgMCwgMCk7CisJIHN5bmNfZGV2LCAwKTsKIAogCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKLQkJCQkgT01BUF9ETUFfUE9SVF9USVBCLAorCQkJCSBzcmNfcG9ydCwKIAkJCQkgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCiAJCQkJIG1jYnNwW2lkXS5pb19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFhSMSwKIAkJCQkgMCwgMCk7CiAKIAlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKLQkJCQlPTUFQX0RNQV9QT1JUX0VNSUZGLAorCQkJCWRlc3RfcG9ydCwKIAkJCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKIAkJCQlidWZmZXIsCiAJCQkJMCwgMCk7CkBAIC01MTQsNiArNzE0LDkgQEAKIGludCBvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKHVuc2lnbmVkIGludCBpZCwgZG1hX2FkZHJfdCBidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJaW50IGRtYV9yeF9jaDsKKwlpbnQgc3JjX3BvcnQgPSAwOworCWludCBkZXN0X3BvcnQgPSAwOworCWludCBzeW5jX2RldiA9IDA7CiAKIAlpZiAob21hcF9tY2JzcF9jaGVjayhpZCkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUzMCwyMCArNzMzLDI3IEBACiAKIAlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKIAorCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlzcmNfcG9ydCA9IE9NQVBfRE1BX1BPUlRfVElQQjsKKwkJZGVzdF9wb3J0ID0gT01BUF9ETUFfUE9SVF9FTUlGRjsKKwl9CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlzeW5jX2RldiA9IG1jYnNwW2lkXS5kbWFfcnhfc3luYzsKKwogCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJICAgICBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAogCQkJCSAgICAgbGVuZ3RoID4+IDEsIDEsCiAJCQkJICAgICBPTUFQX0RNQV9TWU5DX0VMRU1FTlQsCi0JCQkJICAgICAwLCAwKTsKKwkgc3luY19kZXYsIDApOwogCiAJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCi0JCQkJT01BUF9ETUFfUE9SVF9USVBCLAorCQkJCXNyY19wb3J0LAogCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAogCQkJCW1jYnNwW2lkXS5pb19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSwKIAkJCQkwLCAwKTsKIAogCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKLQkJCQkgT01BUF9ETUFfUE9SVF9FTUlGRiwKKwkJCQkgZGVzdF9wb3J0LAogCQkJCSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKIAkJCQkgYnVmZmVyLAogCQkJCSAwLCAwKTsKQEAgLTY4OCw2ICs4OTgsMjMgQEAKIH07CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfaW5mbyBtY2JzcF8yNHh4W10gPSB7CisJWzBdID0geyAudmlydF9iYXNlID0gSU9fQUREUkVTUyhPTUFQMjRYWF9NQ0JTUDFfQkFTRSksCisJCS5kbWFfcnhfc3luYyA9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlgsCisJCS5kbWFfdHhfc3luYyA9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsCisJCS5yeF9pcnEgPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAorCQkudHhfaXJxID0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKKwkJfSwKKwlbMV0gPSB7IC52aXJ0X2Jhc2UgPSBJT19BRERSRVNTKE9NQVAyNFhYX01DQlNQMl9CQVNFKSwKKwkJLmRtYV9yeF9zeW5jID0gT01BUDI0WFhfRE1BX01DQlNQMl9SWCwKKwkJLmRtYV90eF9zeW5jID0gT01BUDI0WFhfRE1BX01DQlNQMl9UWCwKKwkJLnJ4X2lycSA9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCisJCS50eF9pcnEgPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYLAorCQl9LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX21jYnNwX2luaXQodm9pZCkKIHsKIAlpbnQgbWNic3BfY291bnQgPSAwLCBpOwpAQCAtNjk1LDYgKzkyMiw3IEBACiAKIAlwcmludGsoIkluaXRpYWxpemluZyBPTUFQIE1jQlNQIHN5c3RlbVxuIik7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCW1jYnNwX2RzcF9jayA9IGNsa19nZXQoMCwgImRzcF9jayIpOwogCWlmIChJU19FUlIobWNic3BfZHNwX2NrKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBkc3BfY2sgaGFuZGxlLlxuIik7CkBAIC03MTAsNiArOTM4LDI5IEBACiAJCXByaW50ayhLRVJOX0VSUiAibWNic3A6IGNvdWxkIG5vdCBhY3F1aXJlIGRzcHhvcl9jayBoYW5kbGUuXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIobWNic3BfZHNweG9yX2NrKTsKIAl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCW1jYnNwMV9pY2sgPSBjbGtfZ2V0KDAsICJtY2JzcDFfaWNrIik7CisJaWYgKElTX0VSUihtY2JzcDFfaWNrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBtY2JzcDFfaWNrIGhhbmRsZS5cbiIpOworCQlyZXR1cm4gUFRSX0VSUihtY2JzcDFfaWNrKTsKKwl9CisJbWNic3AxX2ZjayA9IGNsa19nZXQoMCwgIm1jYnNwMV9mY2siKTsKKwlpZiAoSVNfRVJSKG1jYnNwMV9mY2spKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWNic3A6IGNvdWxkIG5vdCBhY3F1aXJlIG1jYnNwMV9mY2sgaGFuZGxlLlxuIik7CisJCXJldHVybiBQVFJfRVJSKG1jYnNwMV9mY2spOworCX0KKwltY2JzcDJfaWNrID0gY2xrX2dldCgwLCAibWNic3AyX2ljayIpOworCWlmIChJU19FUlIobWNic3AyX2ljaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtY2JzcDogY291bGQgbm90IGFjcXVpcmUgbWNic3AyX2ljayBoYW5kbGUuXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIobWNic3AyX2ljayk7CisJfQorCW1jYnNwMl9mY2sgPSBjbGtfZ2V0KDAsICJtY2JzcDJfZmNrIik7CisJaWYgKElTX0VSUihtY2JzcDJfZmNrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBtY2JzcDJfZmNrIGhhbmRsZS5cbiIpOworCQlyZXR1cm4gUFRSX0VSUihtY2JzcDJfZmNrKTsKKwl9CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewpAQCAtNzE4LDcgKzk2OSw3IEBACiAJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJbWNic3BfaW5mbyA9IG1jYnNwXzE1MTA7CiAJCW1jYnNwX2NvdW50ID0gQVJSQVlfU0laRShtY2JzcF8xNTEwKTsKIAl9CkBAIC03MjksNiArOTgwLDE5IEBACiAJCW1jYnNwX2NvdW50ID0gQVJSQVlfU0laRShtY2JzcF8xNjEwKTsKIAl9CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQltY2JzcF9pbmZvID0gbWNic3BfMjR4eDsKKwkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzI0eHgpOworCisJCS8qIFJFVklTSVQ6IHdoZXJlJ3MgdGhlIHJpZ2h0IHBsYWNlPyAqLworCQlvbWFwMl9tY2JzcDJfbXV4X3NldHVwKCk7CisJCXN5c19jayA9IGNsa19nZXQoMCwgInN5c19jayIpOworCQlzeXNfY2xrb3V0ID0gY2xrX2dldCgwLCAic3lzX2Nsa291dCIpOworCQljbGtfc2V0X3BhcmVudChzeXNfY2xrb3V0LCBzeXNfY2spOworCQljbGtfZW5hYmxlKHN5c19jbGtvdXQpOworCX0KKyNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBPTUFQX01BWF9NQ0JTUF9DT1VOVCA7IGkrKykgewogCQlpZiAoaSA+PSBtY2JzcF9jb3VudCkgewogCQkJbWNic3BbaV0uaW9fYmFzZSA9IDA7CkBAIC03NDEsNiArMTAwNSw3IEBACiAJCW1jYnNwW2ldLmRtYV9yeF9sY2ggPSAtMTsKIAogCQltY2JzcFtpXS5pb19iYXNlID0gbWNic3BfaW5mb1tpXS52aXJ0X2Jhc2U7CisJCW1jYnNwW2ldLmlvX3R5cGUgPSBPTUFQX01DQlNQX0lSUV9JTzsgLyogRGVmYXVsdCBJL08gaXMgSVJRIGJhc2VkICovCiAJCW1jYnNwW2ldLnR4X2lycSA9IG1jYnNwX2luZm9baV0udHhfaXJxOwogCQltY2JzcFtpXS5yeF9pcnEgPSBtY2JzcF9pbmZvW2ldLnJ4X2lycTsKIAkJbWNic3BbaV0uZG1hX3J4X3N5bmMgPSBtY2JzcF9pbmZvW2ldLmRtYV9yeF9zeW5jOwpAQCAtNzUxLDExICsxMDE2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLQogYXJjaF9pbml0Y2FsbChvbWFwX21jYnNwX2luaXQpOwogCiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfY29uZmlnKTsKIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zZXRfaW9fdHlwZSk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfZnJlZSk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc3RhcnQpOwogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3N0b3ApOwpAQCAtNzYzLDQgKzEwMjgsNiBAQAogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3JlY3Zfd29yZCk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfeG1pdF9idWZmZXIpOwogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zcGlfbWFzdGVyX3htaXRfd29yZF9wb2xsKTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zcGlfbWFzdGVyX3JlY3Zfd29yZF9wb2xsKTsKIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zZXRfc3BpX21vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMKaW5kZXggNWNjNjc3NS4uMzc3OTJkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvb2NwaS5jCkBAIC02Miw5ICs2Miw2IEBACiAJaWYgKCFjcHVfaXNfb21hcDE2eHgoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUncyBjbG9jayBmb3IgT0NQSSAqLwotCWNsa19lbmFibGUob2NwaV9jayk7Ci0KIAkvKiBFbmFibGUgYWNjZXNzIGZvciBPSENJIGluIE9DUEkgKi8KIAl2YWwgPSBvbWFwX3JlYWRsKE9DUElfUFJPVCk7CiAJdmFsICY9IH4weGZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYwppbmRleCAwOTNlZmQ3Li4xYTI0ZTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggZWU4Mjc2My4uYjdiZjA5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0xNiwyNCArMTYsOTQgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCiAjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAKICNkZWZpbmUgT01BUDFfU1JBTV9QQQkJMHgyMDAwMDAwMAogI2RlZmluZSBPTUFQMV9TUkFNX1ZBCQkweGQwMDAwMDAwCiAjZGVmaW5lIE9NQVAyX1NSQU1fUEEJCTB4NDAyMDAwMDAKKyNkZWZpbmUgT01BUDJfU1JBTV9QVUJfUEEJMHg0MDIwZjgwMAogI2RlZmluZSBPTUFQMl9TUkFNX1ZBCQkweGQwMDAwMDAwCisjZGVmaW5lIE9NQVAyX1NSQU1fUFVCX1ZBCTB4ZDAwMDA4MDAKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisjZGVmaW5lIFNSQU1fQk9PVExPQURFUl9TWgkweDAwCisjZWxzZQogI2RlZmluZSBTUkFNX0JPT1RMT0FERVJfU1oJMHg4MAorI2VuZGlmCisKKyNkZWZpbmUgVkFfUkVRSU5GT1BFUk0wCQlJT19BRERSRVNTKDB4NjgwMDUwNDgpCisjZGVmaW5lIFZBX1JFQURQRVJNMAkJSU9fQUREUkVTUygweDY4MDA1MDUwKQorI2RlZmluZSBWQV9XUklURVBFUk0wCQlJT19BRERSRVNTKDB4NjgwMDUwNTgpCisjZGVmaW5lIFZBX0NPTlRST0xfU1RBVAkJSU9fQUREUkVTUygweDQ4MDAwMkY4KQorI2RlZmluZSBHUF9ERVZJQ0UJCTB4MzAwCisjZGVmaW5lIFRZUEVfTUFTSwkJMHg3MDAKKworI2RlZmluZSBST1VORF9ET1dOKHZhbHVlLGJvdW5kYXJ5KQkoKHZhbHVlKSAmICh+KChib3VuZGFyeSktMSkpKQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwX3NyYW1fYmFzZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9zaXplOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF9zcmFtX2NlaWw7CiAKK3Vuc2lnbmVkIGxvbmcgb21hcF9mYl9zcmFtX3N0YXJ0OwordW5zaWduZWQgbG9uZyBvbWFwX2ZiX3NyYW1fc2l6ZTsKKworLyogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgUkFNRlMgZmlyZXdhbGwgc2V0dXAsIHRoZSBwdWJsaWMgdXNhYmxlIGFtb3VudCBvZgorICogU1JBTSB2YXJpZXMuICBUaGUgZGVmYXVsdCBhY2Nlc3NhYmxlIHNpemUgZm9yIGFsbCBkZXZpY2UgdHlwZXMgaXMgMmsuIEEgR1AKKyAqIGRldmljZSBhbGxvd3MgQVJNMTEgYnV0IG5vdCBvdGhlciBpbml0YXRvcnMgZm9yIGZ1bGwgc2l6ZS4gVGhpcworICogZnVuY3Rpb25hbGl0eSBzZWVtcyBvayB1bnRpbCBzb21lIG5pY2Ugc2VjdXJpdHkgQVBJIGhhcHBlbnMuCisgKi8KK3N0YXRpYyBpbnQgaXNfc3JhbV9sb2NrZWQodm9pZCkKK3sKKwlpbnQgdHlwZSA9IDA7CisKKwlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpCisJCXR5cGUgPSBfX3Jhd19yZWFkbChWQV9DT05UUk9MX1NUQVQpICYgVFlQRV9NQVNLOworCisJaWYgKHR5cGUgPT0gR1BfREVWSUNFKSB7CisJCS8qIFJBTUZXOiBSL1cgYWNjZXNzIHRvIGFsbCBpbml0YXRvcnMgZm9yIGFsbCBxdWFsaWZpZXIgc2V0cyAqLworCQlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpIHsKKwkJCV9fcmF3X3dyaXRlbCgweEZGLCBWQV9SRVFJTkZPUEVSTTApOyAvKiBhbGwgcS12ZWN0cyAqLworCQkJX19yYXdfd3JpdGVsKDB4Q0ZERSwgVkFfUkVBRFBFUk0wKTsgIC8qIGFsbCBpLXJlYWQgKi8KKwkJCV9fcmF3X3dyaXRlbCgweENGREUsIFZBX1dSSVRFUEVSTTApOyAvKiBhbGwgaS13cml0ZSAqLworCQl9CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsgLyogYXNzdW1lIGxvY2tlZCB3aXRoIG5vIFBQQSBvciBzZWN1cml0eSBkcml2ZXIgKi8KK30KKwordm9pZCBnZXRfZmJfc3JhbV9jb25mKHVuc2lnbmVkIGxvbmcgc3RhcnRfYXZhaWwsIHVuc2lnbmVkIHNpemVfYXZhaWwsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWNvbnN0IHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyAqZmJtZW1fY29uZjsKKworCWZibWVtX2NvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfRkJNRU0sIHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyk7CisJaWYgKGZibWVtX2NvbmYgIT0gTlVMTCkgeworCQkqc3RhcnQgPSBmYm1lbV9jb25mLT5mYl9zcmFtX3N0YXJ0OworCQkqc2l6ZSA9IGZibWVtX2NvbmYtPmZiX3NyYW1fc2l6ZTsKKwl9IGVsc2UgeworCQkqc2l6ZSA9IDA7CisJCSpzdGFydCA9IDA7CisJfQorCisJaWYgKCpzaXplICYmICgKKwkgICAgKnN0YXJ0IDwgc3RhcnRfYXZhaWwgfHwKKwkgICAgKnN0YXJ0ICsgKnNpemUgPiBzdGFydF9hdmFpbCArIHNpemVfYXZhaWwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBGQiBTUkFNIGNvbmZpZ3VyYXRpb25cbiIpOworCQkqc3RhcnQgPSBzdGFydF9hdmFpbDsKKwkJKnNpemUgPSBzaXplX2F2YWlsOworCX0KKworCWlmICgqc2l6ZSkKKwkJcHJfaW5mbygiUmVzZXJ2aW5nICVsdSBieXRlcyBTUkFNIGZvciBmcmFtZSBidWZmZXJcbiIsICpzaXplKTsKK30KKwogLyoKICAqIFRoZSBhbW91bnQgb2YgU1JBTSBkZXBlbmRzIG9uIHRoZSBjb3JlIHR5cGUuCiAgKiBOb3RlIHRoYXQgd2UgY2Fubm90IHRyeSB0byB0ZXN0IGZvciBTUkFNIGhlcmUgYmVjYXVzZSB3cml0ZXMKQEAgLTQyLDI2ICsxMTIsNDUgQEAKICAqLwogdm9pZCBfX2luaXQgb21hcF9kZXRlY3Rfc3JhbSh2b2lkKQogewotCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJdW5zaWduZWQgbG9uZyBzcmFtX3N0YXJ0OworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmIChpc19zcmFtX2xvY2tlZCgpKSB7CisJCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAyX1NSQU1fUFVCX1ZBOworCQkJc3JhbV9zdGFydCA9IE9NQVAyX1NSQU1fUFVCX1BBOworCQkJb21hcF9zcmFtX3NpemUgPSAweDgwMDsgLyogMksgKi8KKwkJfSBlbHNlIHsKKwkJCW9tYXBfc3JhbV9iYXNlID0gT01BUDJfU1JBTV9WQTsKKwkJCXNyYW1fc3RhcnQgPSBPTUFQMl9TUkFNX1BBOworCQkJaWYgKGNwdV9pc19vbWFwMjQyeCgpKQorCQkJCW9tYXBfc3JhbV9zaXplID0gMHhhMDAwMDsgLyogNjQwSyAqLworCQkJZWxzZSBpZiAoY3B1X2lzX29tYXAyNDN4KCkpCisJCQkJb21hcF9zcmFtX3NpemUgPSAweDEwMDAwOyAvKiA2NEsgKi8KKwkJfQorCX0gZWxzZSB7CiAJCW9tYXBfc3JhbV9iYXNlID0gT01BUDFfU1JBTV9WQTsKLQllbHNlCi0JCW9tYXBfc3JhbV9iYXNlID0gT01BUDJfU1JBTV9WQTsKKwkJc3JhbV9zdGFydCA9IE9NQVAxX1NSQU1fUEE7CiAKLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDMyMDAwOwkvKiAyMDBLICovCi0JZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpCi0JCW9tYXBfc3JhbV9zaXplID0gMHgzMDAwMDsJLyogMTkySyAqLwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTYxMCgpIHx8IGNwdV9pc19vbWFwMTYyMSgpIHx8IGNwdV9pc19vbWFwMTcxMCgpKQotCQlvbWFwX3NyYW1fc2l6ZSA9IDB4NDAwMDsJLyogMTZLICovCi0JZWxzZSBpZiAoY3B1X2lzX29tYXAxNjExKCkpCi0JCW9tYXBfc3JhbV9zaXplID0gMHgzZTgwMDsJLyogMjUwSyAqLwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQyMCgpKQotCQlvbWFwX3NyYW1fc2l6ZSA9IDB4YTAwMTQ7CS8qIDY0MEsgKi8KLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGV0ZWN0IFNSQU0gc2l6ZVxuIik7Ci0JCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOworCQlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJCW9tYXBfc3JhbV9zaXplID0gMHgzMjAwMDsJLyogMjAwSyAqLworCQllbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJCW9tYXBfc3JhbV9zaXplID0gMHgzMDAwMDsJLyogMTkySyAqLworCQllbHNlIGlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE2MjEoKSB8fAorCQkgICAgIGNwdV9pc19vbWFwMTcxMCgpKQorCQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CS8qIDE2SyAqLworCQllbHNlIGlmIChjcHVfaXNfb21hcDE2MTEoKSkKKwkJCW9tYXBfc3JhbV9zaXplID0gMHgzZTgwMDsJLyogMjUwSyAqLworCQllbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGRldGVjdCBTUkFNIHNpemVcbiIpOworCQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CisJCX0KIAl9Ci0KKwlnZXRfZmJfc3JhbV9jb25mKHNyYW1fc3RhcnQgKyBTUkFNX0JPT1RMT0FERVJfU1osCisJCQkgb21hcF9zcmFtX3NpemUgLSBTUkFNX0JPT1RMT0FERVJfU1osCisJCQkgJm9tYXBfZmJfc3JhbV9zdGFydCwgJm9tYXBfZmJfc3JhbV9zaXplKTsKKwlpZiAob21hcF9mYl9zcmFtX3NpemUpCisJCW9tYXBfc3JhbV9zaXplIC09IHNyYW1fc3RhcnQgKyBvbWFwX3NyYW1fc2l6ZSAtCisJCQkJICBvbWFwX2ZiX3NyYW1fc3RhcnQ7CiAJb21hcF9zcmFtX2NlaWwgPSBvbWFwX3NyYW1fYmFzZSArIG9tYXBfc3JhbV9zaXplOwogfQogCkBAIC04MCwxMiArMTY5LDIwIEBACiAgKi8KIHZvaWQgX19pbml0IG9tYXBfbWFwX3NyYW0odm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKIAlpZiAob21hcF9zcmFtX3NpemUgPT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCW9tYXBfc3JhbV9pb19kZXNjWzBdLnZpcnR1YWwgPSBPTUFQMl9TUkFNX1ZBOwotCQlvbWFwX3NyYW1faW9fZGVzY1swXS5wZm4gPSBfX3BoeXNfdG9fcGZuKE9NQVAyX1NSQU1fUEEpOworCisJCWlmIChpc19zcmFtX2xvY2tlZCgpKQorCQkJYmFzZSA9IE9NQVAyX1NSQU1fUFVCX1BBOworCQllbHNlCisJCQliYXNlID0gT01BUDJfU1JBTV9QQTsKKwkJYmFzZSA9IFJPVU5EX0RPV04oYmFzZSwgUEFHRV9TSVpFKTsKKwkJb21hcF9zcmFtX2lvX2Rlc2NbMF0ucGZuID0gX19waHlzX3RvX3BmbihiYXNlKTsKIAl9CiAKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggPSAob21hcF9zcmFtX3NpemUgKyBQQUdFX1NJWkUtMSkvUEFHRV9TSVpFOwpAQCAtOTMsNyArMTkwLDggQEAKIAlpb3RhYmxlX2luaXQob21hcF9zcmFtX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcF9zcmFtX2lvX2Rlc2MpKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlNSQU06IE1hcHBlZCBwYSAweCUwOGx4IHRvIHZhIDB4JTA4bHggc2l6ZTogMHglbHhcbiIsCi0JICAgICAgIG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiwgb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKKwlfX3Bmbl90b19waHlzKG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiksCisJb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKIAkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoKTsKIAogCS8qCkBAIC0xMTgsOCArMjE2LDkgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJOb3QgZW5vdWdoIHNwYWNlIGluIFNSQU1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisKIAlvbWFwX3NyYW1fY2VpbCAtPSBzaXplOwotCW9tYXBfc3JhbV9jZWlsICY9IH4weDM7CisJb21hcF9zcmFtX2NlaWwgPSBST1VORF9ET1dOKG9tYXBfc3JhbV9jZWlsLCBzaXplb2Yodm9pZCAqKSk7CiAJbWVtY3B5KCh2b2lkICopb21hcF9zcmFtX2NlaWwsIHN0YXJ0LCBzaXplKTsKIAogCXJldHVybiAodm9pZCAqKW9tYXBfc3JhbV9jZWlsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3RpbWVyMzJrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE5NDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3RpbWVyMzJrLmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYworICoKKyAqIE9NQVAgMzJLIFRpbWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGFydGlhbCB0aW1lciByZXdyaXRlIGFuZCBhZGRpdGlvbmFsIGR5bmFtaWMgdGljayB0aW1lciBzdXBwb3J0IGJ5CisgKiBUb255IExpbmRnZW4gPHRvbnlAYXRvbWlkZS5jb20+IGFuZAorICogVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKgorICogTVBVIHRpbWVyIGNvZGUgYmFzZWQgb24gdGhlIG9sZGVyIE1QVSB0aW1lciBjb2RlIGZvciBPTUFQCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUmlkZ2VSdW4sIEluYy4KKyAqIEF1dGhvcjogR3JlZyBMb25ub24gPGdsb25ub25AcmlkZ2VydW4uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK3N0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMzJLSHogT1MgdGltZXIKKyAqCisgKiBUaGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IG9uIDE2eHgsIGFzIDE1MTAgZG9lcyBub3QgaGF2ZSB0aGUgY29udGludW91cworICogMzJLSHogc3luY2hyb25vdXMgdGltZXIuIFRoZSAzMktIeiBzeW5jaHJvbm91cyB0aW1lciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sKKyAqIG9mIHRpbWUgaW4gYWRkaXRpb24gdG8gdGhlIDMyS0h6IE9TIHRpbWVyLiBVc2luZyBvbmx5IHRoZSAzMktIeiBPUyB0aW1lcgorICogb24gMTUxMCB3b3VsZCBiZSBwb3NzaWJsZSwgYnV0IHRoZSB0aW1lciB3b3VsZCBub3QgYmUgYXMgYWNjdXJhdGUgYXMKKyAqIHdpdGggdGhlIDMyS0h6IHN5bmNocm9uaXplZCB0aW1lci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkweGZmZmJjNDEwCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkweDQ4MDA0MDEwCisjZWxzZQorI2Vycm9yIE9NQVAgMzJLSHogdGltZXIgZG9lcyBub3QgY3VycmVudGx5IHdvcmsgb24gMTVYWCEKKyNlbmRpZgorCisvKiAxNnh4IHNwZWNpZmljIGRlZmluZXMgKi8KKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX0JBU0UJCTB4ZmZmYjkwMDAKKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX0NSCQkweDA4CisjZGVmaW5lIE9NQVAxXzMyS19USU1FUl9UVlIJCTB4MDAKKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX1RDUgkJMHgwNAorCisvKiAyNHh4IHNwZWNpZmljIGRlZmluZXMgKi8KKyNkZWZpbmUgT01BUDJfR1BfVElNRVJfQkFTRQkJMHg0ODAyODAwMAorI2RlZmluZSBDTV9DTEtTRUxfV0tVUAkJCTB4NDgwMDg0NDAKKyNkZWZpbmUgR1BfVElNRVJfVElEUgkJCTB4MDAKKyNkZWZpbmUgR1BfVElNRVJfVElTUgkJCTB4MTgKKyNkZWZpbmUgR1BfVElNRVJfVElFUgkJCTB4MWMKKyNkZWZpbmUgR1BfVElNRVJfVENMUgkJCTB4MjQKKyNkZWZpbmUgR1BfVElNRVJfVENSUgkJCTB4MjgKKyNkZWZpbmUgR1BfVElNRVJfVExEUgkJCTB4MmMKKyNkZWZpbmUgR1BfVElNRVJfVFRHUgkJCTB4MzAKKyNkZWZpbmUgR1BfVElNRVJfVFNJQ1IJCQkweDQwCisKKyNkZWZpbmUgT01BUF8zMktfVElDS1NfUEVSX0haCQkoMzI3NjggLyBIWikKKworLyoKKyAqIFRSTSBzYXlzIDEgLyBIWiA9ICggVFZSICsgMSkgLyAzMjc2OCwgc28gVFJWID0gKDMyNzY4IC8gSFopIC0gMQorICogc28gd2l0aCBIWiA9IDEyOCwgVFZSID0gMjU1LgorICovCisjZGVmaW5lIE9NQVBfMzJLX1RJTUVSX1RJQ0tfUEVSSU9ECSgoMzI3NjggLyBIWikgLSAxKQorCisjZGVmaW5lIEpJRkZJRVNfVE9fSFdfVElDS1MobnJfamlmZmllcywgY2xvY2tfcmF0ZSkJCQlcCisJCQkJKCgobnJfamlmZmllcykgKiAoY2xvY2tfcmF0ZSkpIC8gSFopCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl93cml0ZShpbnQgdmFsLCBpbnQgcmVnKQoreworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJb21hcF93cml0ZXcodmFsLCBPTUFQMV8zMktfVElNRVJfQkFTRSArIHJlZyk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCW9tYXBfd3JpdGVsKHZhbCwgT01BUDJfR1BfVElNRVJfQkFTRSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvbWFwXzMya190aW1lcl9yZWFkKGludCByZWcpCit7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlyZXR1cm4gb21hcF9yZWFkbChPTUFQMV8zMktfVElNRVJfQkFTRSArIHJlZykgJiAweGZmZmZmZjsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDJfR1BfVElNRVJfQkFTRSArIHJlZyk7Cit9CisKKy8qCisgKiBUaGUgMzJLSHogc3luY2hyb25pemVkIHRpbWVyIGlzIGFuIGFkZGl0aW9uYWwgdGltZXIgb24gMTZ4eC4KKyAqIEl0IGlzIGFsd2F5cyBydW5uaW5nLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfc3luY190aW1lcl9yZWFkKHZvaWQpCit7CisJcmV0dXJuIG9tYXBfcmVhZGwoVElNRVJfMzJLX1NZTkNIUk9OSVpFRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQoreworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlvbWFwXzMya190aW1lcl93cml0ZShsb2FkX3ZhbCwgT01BUDFfMzJLX1RJTUVSX1RWUik7CisJCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MGYsIE9NQVAxXzMyS19USU1FUl9DUik7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4ZmZmZmZmZmYgLSBsb2FkX3ZhbCwgR1BfVElNRVJfVENSUik7CisJCW9tYXBfMzJrX3RpbWVyX3dyaXRlKCgxIDw8IDEpLCBHUF9USU1FUl9USUVSKTsKKwkJb21hcF8zMmtfdGltZXJfd3JpdGUoKDEgPDwgMSkgfCAxLCBHUF9USU1FUl9UQ0xSKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdG9wKHZvaWQpCit7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlvbWFwXzMya190aW1lcl93cml0ZSgweDAsIE9NQVAxXzMyS19USU1FUl9DUik7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MCwgR1BfVElNRVJfVENMUik7Cit9CisKKy8qCisgKiBSb3VuZHMgZG93biB0byBuZWFyZXN0IHVzZWMuIE5vdGUgdGhhdCB0aGlzIHdpbGwgb3ZlcmZsb3cgZm9yIGxhcmdlciB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvbWFwXzMya190aWNrc190b191c2Vjcyh1bnNpZ25lZCBsb25nIHRpY2tzXzMyaykKK3sKKwlyZXR1cm4gKHRpY2tzXzMyayAqIDUqNSo1KjUqNSo1KSA+PiA5OworfQorCisvKgorICogUm91bmRzIGRvd24gdG8gbmVhcmVzdCBuc2VjLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZworb21hcF8zMmtfdGlja3NfdG9fbnNlY3ModW5zaWduZWQgbG9uZyB0aWNrc18zMmspCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpY2tzXzMyayAqIDEwMDAgKiA1KjUqNSo1KjUqNSA+PiA5OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwXzMya19sYXN0X3RpY2sgPSAwOworCisvKgorICogUmV0dXJucyBlbGFwc2VkIHVzZWNzIHNpbmNlIGxhc3QgMzJrIHRpbWVyIGludGVycnVwdAorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwXzMya190aW1lcl9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKKwlyZXR1cm4gb21hcF8zMmtfdGlja3NfdG9fdXNlY3Mobm93IC0gb21hcF8zMmtfbGFzdF90aWNrKTsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCB0aW1lIGZyb20gYm9vdCBpbiBuc2Vjcy4gSXQncyBPSyBmb3IgdGhpcyB0byB3cmFwCisgKiBhcm91bmQgZm9yIG5vdywgYXMgaXQncyBqdXN0IGEgcmVsYXRpdmUgdGltZSBzdGFtcC4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIG9tYXBfMzJrX3RpY2tzX3RvX25zZWNzKG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpKTsKK30KKworLyoKKyAqIFRpbWVyIGludGVycnVwdCBmb3IgMzJLSHogdGltZXIuIFdoZW4gZHluYW1pYyB0aWNrIGlzIGVuYWJsZWQsIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGZyb20gb3RoZXIgaW50ZXJydXB0cyB0byByZW1vdmUgbGF0ZW5jeQorICogaXNzdWVzIHdpdGggZHluYW1pYyB0aWNrLiBJbiB0aGUgZHluYW1pYyB0aWNrIGNhc2UsIHdlIG5lZWQgdG8gbG9jaworICogd2l0aCBpcnFzYXZlLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF8zMmtfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQl1MzIgc3RhdHVzID0gb21hcF8zMmtfdGltZXJfcmVhZChHUF9USU1FUl9USVNSKTsKKwkJb21hcF8zMmtfdGltZXJfd3JpdGUoc3RhdHVzLCBHUF9USU1FUl9USVNSKTsKKwl9CisKKwlub3cgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKKworCXdoaWxlIChub3cgLSBvbWFwXzMya19sYXN0X3RpY2sgPj0gT01BUF8zMktfVElDS1NfUEVSX0haKSB7CisJCW9tYXBfMzJrX2xhc3RfdGljayArPSBPTUFQXzMyS19USUNLU19QRVJfSFo7CisJCXRpbWVyX3RpY2socmVncyk7CisJfQorCisJLyogUmVzdGFydCB0aW1lciBzbyB3ZSBkb24ndCBkcmlmdCBvZmYgZHVlIHRvIG1vZHVsbyBvciBkeW5hbWljIHRpY2suCisJICogQnkgZGVmYXVsdCB3ZSBwcm9ncmFtIHRoZSBuZXh0IHRpbWVyIHRvIGJlIGNvbnRpbnVvdXMgdG8gYXZvaWQKKwkgKiBsYXRlbmNpZXMgZHVyaW5nIGhpZ2ggc3lzdGVtIGxvYWQuIER1cmluZyBkeW5hbWljIHRpY2sgb3BlcmF0aW9uIHRoZQorCSAqIGNvbnRpbnVvdXMgdGltZXIgY2FuIGJlIG92ZXJyaWRkZW4gZnJvbSBwbV9pZGxlIHRvIGJlIGxvbmdlci4KKwkgKi8KKwlvbWFwXzMya190aW1lcl9zdGFydChvbWFwXzMya19sYXN0X3RpY2sgKyBPTUFQXzMyS19USUNLU19QRVJfSFogLSBub3cpOworCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorLyoKKyAqIFByb2dyYW1zIHRoZSBuZXh0IHRpbWVyIGludGVycnVwdCBuZWVkZWQuIENhbGxlZCB3aGVuIGR5bmFtaWMgdGljayBpcworICogZW5hYmxlZCwgYW5kIHRvIHJlcHJvZ3JhbSB0aGUgdGlja3MgdG8gc2tpcCBmcm9tIHBtX2lkbGUuIE5vdGUgdGhhdAorICogd2UgY2FuIGtlZXAgdGhlIHRpbWVyIGNvbnRpbnVvdXMsIGFuZCBkb24ndCBuZWVkIHRvIHNldCBpdCB0byBydW4gaW4KKyAqIG9uZS1zaG90IG1vZGUuIFRoaXMgaXMgYmVjYXVzZSB0aGUgdGltZXIgd2lsbCBnZXQgcmVwcm9ncmFtbWVkIGFnYWluCisgKiBhZnRlciBuZXh0IGludGVycnVwdC4KKyAqLwordm9pZCBvbWFwXzMya190aW1lcl9yZXByb2dyYW0odW5zaWduZWQgbG9uZyBuZXh0X3RpY2spCit7CisJb21hcF8zMmtfdGltZXJfc3RhcnQoSklGRklFU19UT19IV19USUNLUyhuZXh0X3RpY2ssIDMyNzY4KSArIDEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwXzMya190aW1lcl9pcnE7CitleHRlcm4gc3RydWN0IHRpbWVyX3VwZGF0ZV9oYW5kbGVyIHRpbWVyX3VwZGF0ZTsKKworc3RhdGljIGludCBvbWFwXzMya190aW1lcl9lbmFibGVfZHluX3RpY2sodm9pZCkKK3sKKwkvKiBObyBuZWVkIHRvIHJlcHJvZ3JhbSB0aW1lciwganVzdCB1c2UgdGhlIG5leHQgaW50ZXJydXB0ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF8zMmtfdGltZXJfZGlzYWJsZV9keW5fdGljayh2b2lkKQoreworCW9tYXBfMzJrX3RpbWVyX3N0YXJ0KE9NQVBfMzJLX1RJTUVSX1RJQ0tfUEVSSU9EKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkeW5fdGlja190aW1lciBvbWFwX2R5bl90aWNrX3RpbWVyID0geworCS5lbmFibGUJCT0gb21hcF8zMmtfdGltZXJfZW5hYmxlX2R5bl90aWNrLAorCS5kaXNhYmxlCT0gb21hcF8zMmtfdGltZXJfZGlzYWJsZV9keW5fdGljaywKKwkucmVwcm9ncmFtCT0gb21hcF8zMmtfdGltZXJfcmVwcm9ncmFtLAorCS5oYW5kbGVyCT0gb21hcF8zMmtfdGltZXJfaW50ZXJydXB0LAorfTsKKyNlbmRpZgkvKiBDT05GSUdfTk9fSURMRV9IWiAqLworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwXzMya190aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIjMyS0h6IHRpbWVyIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqIGdwdDFfaWNrOworc3RhdGljIHN0cnVjdCBjbGsgKiBncHQxX2ZjazsKKworc3RhdGljIF9faW5pdCB2b2lkIG9tYXBfaW5pdF8zMmtfdGltZXIodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorCW9tYXBfdGltZXIuZHluX3RpY2sgPSAmb21hcF9keW5fdGlja190aW1lcjsKKyNlbmRpZgorCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlzZXR1cF9pcnEoSU5UX09TX1RJTUVSLCAmb21hcF8zMmtfdGltZXJfaXJxKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXNldHVwX2lycSgzNywgJm9tYXBfMzJrX3RpbWVyX2lycSk7CisJb21hcF90aW1lci5vZmZzZXQgID0gb21hcF8zMmtfdGltZXJfZ2V0dGltZW9mZnNldDsKKwlvbWFwXzMya19sYXN0X3RpY2sgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKKworCS8qIFJFVklTSVQ6IENoZWNrIDI0eHggVElPQ1BfQ0ZHIHNldHRpbmdzIGFmdGVyIGlkbGUgd29ya3MgKi8KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcF8zMmtfdGltZXJfd3JpdGUoMCwgR1BfVElNRVJfVENMUik7CisJCW9tYXBfd3JpdGVsKDAsIENNX0NMS1NFTF9XS1VQKTsJCS8qIDMyS0h6IGNsb2NrIHNvdXJjZSAqLworCisJCWdwdDFfaWNrID0gY2xrX2dldChOVUxMLCAiZ3B0MV9pY2siKTsKKwkJaWYgKElTX0VSUihncHQxX2ljaykpCisJCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgZ3B0MV9pY2tcbiIpOworCQllbHNlCisJCQljbGtfZW5hYmxlKGdwdDFfaWNrKTsKKworCQlncHQxX2ZjayA9IGNsa19nZXQoTlVMTCwgImdwdDFfZmNrIik7CisJCWlmIChJU19FUlIoZ3B0MV9mY2spKQorCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IGdwdDFfZmNrXG4iKTsKKwkJZWxzZQorCQkJY2xrX2VuYWJsZShncHQxX2Zjayk7CisKKwkJbWRlbGF5KDEwMCk7CQkvKiBXYWl0IGZvciBjbG9ja3MgdG8gc3RhYmlsaXplICovCisKKwkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHg3LCBHUF9USU1FUl9USVNSKTsKKwl9CisKKwlvbWFwXzMya190aW1lcl9zdGFydChPTUFQXzMyS19USU1FUl9USUNLX1BFUklPRCk7Cit9CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRpbWVyIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfdGltZXJfaW5pdCh2b2lkKQoreworCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKK30KKworc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0geworCS5pbml0CQk9IG9tYXBfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IE5VTEwsCQkvKiBJbml0aWFsaXplZCBsYXRlciAqLworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDhhYjUzMDAuLjZkN2RlOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IE1vbiBGZWIgMjAgMTA6MTg6MDIgMjAwNgorIyBMYXN0IHVwZGF0ZTogTW9uIE1heSA4IDIwOjExOjA1IDIwMDYKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtNTY2LDggKzU2Niw4IEBACiBlbnNfY211CQkJTUFDSF9FTlNfQ01VCQlFTlNfQ01VCQkJNTUwCiBtbTZfc2RiCQkJTUFDSF9NTTZfU0RCCQlNTTZfU0RCCQkJNTUxCiBzYXR1cm4JCQlNQUNIX1NBVFVSTgkJU0FUVVJOCQkJNTUyCi1hcmdvbnBsdXNldmIJCU1BQ0hfQVJHT05QTFVTRVZCCUFSR09OUExVU0VWQgkJNTUzCi1zY21hMTFldmIJCU1BQ0hfU0NNQTExRVZCCQlTQ01BMTFFVkIJCTU1NAoraTMwMDMwZXZiCQlNQUNIX0FSR09OUExVU0VWQglBUkdPTlBMVVNFVkIJCTU1MworbXhjMjc1MzBldmIJCU1BQ0hfU0NNQTExRVZCCQlTQ01BMTFFVkIJCTU1NAogc21kazI4MDAJCU1BQ0hfU01ESzI4MDAJCVNNREsyODAwCQk1NTUKIG10d2lsc29uCQlNQUNIX01UV0lMU09OCQlNVFdJTFNPTgkJNTU2CiB6aXRpCQkJTUFDSF9aSVRJCQlaSVRJCQkJNTU3CkBAIC02NDcsNyArNjQ3LDcgQEAKIG14MmphenoJCQlNQUNIX01YMkpBWloJCU1YMkpBWloJCQk2MzEKIG11bHRpaW8JCQlNQUNIX01VTFRJSU8JCU1VTFRJSU8JCQk2MzIKIGhyZGlzcGxheQkJTUFDSF9IUkRJU1BMQVkJCUhSRElTUExBWQkJNjMzCi1zY21hMTFiYgkJTUFDSF9TQ01BMTFCQgkJU0NNQTExQkIJCTYzNAorbXhjMjc1MzBhZHMJCU1BQ0hfU0NNQTExQkIJCVNDTUExMUJCCQk2MzQKIHRyaXplcHMzCQlNQUNIX1RSSVpFUFMzCQlUUklaRVBTMwkJNjM1CiB6ZWZlZXJkemEJCU1BQ0hfWkVGRUVSRFpBCQlaRUZFRVJEWkEJCTYzNgogemVmZWVyZHpiCQlNQUNIX1pFRkVFUkRaQgkJWkVGRUVSRFpCCQk2MzcKQEAgLTcyMSw3ICs3MjEsNyBAQAogZ2VtCQkJTUFDSF9HRU0JCUdFTQkJCTcwNwogaTg1OAkJCU1BQ0hfSTg1OAkJSTg1OAkJCTcwOAogaHgyNzUwCQkJTUFDSF9IWDI3NTAJCUhYMjc1MAkJCTcwOQotemV1c2V2YgkJCU1BQ0hfWkVVU0VWQgkJWkVVU0VWQgkJCTcxMAorbXhjOTExMzFldmIJCU1BQ0hfWkVVU0VWQgkJWkVVU0VWQgkJCTcxMAogcDcwMAkJCU1BQ0hfUDcwMAkJUDcwMAkJCTcxMQogY3BlCQkJTUFDSF9DUEUJCUNQRQkJCTcxMgogc3BpdHoJCQlNQUNIX1NQSVRaCQlTUElUWgkJCTcxMwpAQCAtODAyLDcgKzgwMiw3IEBACiByZWE5MjAwCQkJTUFDSF9SRUE5MjAwCQlSRUE5MjAwCQkJNzg4CiBhY3RzX3B1bmVfc2ExMTEwCU1BQ0hfQUNUU19QVU5FX1NBMTExMAlBQ1RTX1BVTkVfU0ExMTEwCTc4OQogaXhwNDI1CQkJTUFDSF9JWFA0MjUJCUlYUDQyNQkJCTc5MAotYXJnb25wbHVzb2R5c3NleQlNQUNIX0FSR09OUExVU09EWVNTRVkJQVJHT05QTFVTT0RZU1NFWQk3OTEKK2kzMDAzMGFkcwkJTUFDSF9BUkdPTlBMVVNPRFlTU0VZCUFSR09OUExVU09EWVNTRVkJNzkxCiBwZXJjaAkJCU1BQ0hfUEVSQ0gJCVBFUkNICQkJNzkyCiBlaXMwNXIxCQkJTUFDSF9FSVMwNVIxCQlFSVMwNVIxCQkJNzkzCiBwZXBwZXJwYWQJCU1BQ0hfUEVQUEVSUEFECQlQRVBQRVJQQUQJCTc5NApAQCAtODI3LDcgKzgyNyw3IEBACiB1YzU0NzFkc3AJCU1BQ0hfVUM1NDcxRFNQCQlVQzU0NzFEU1AJCTgxMwogc2o1NDcxZW5nCQlNQUNIX1NKNTQ3MUVORwkJU0o1NDcxRU5HCQk4MTQKIG5vbmUJCQlNQUNIX0NNUFhBMjZYCQlDTVBYQTI2WAkJODE1Ci1uYwkJCU1BQ0hfTkMJCQlOQwkJCTgxNgorbmMxCQkJTUFDSF9OQwkJCU5DCQkJODE2CiBvbWFwX3BhbG10ZQkJTUFDSF9PTUFQX1BBTE1URQlPTUFQX1BBTE1URQkJODE3CiBhamF4NTJ4CQkJTUFDSF9BSkFYNTJYCQlBSkFYNTJYCQkJODE4CiBzaXJpdXN0YXIJCU1BQ0hfU0lSSVVTVEFSCQlTSVJJVVNUQVIJCTgxOQpAQCAtOTMwLDcgKzkzMCw3IEBACiB4c2NhbGVfcGFsbXR0NQkJTUFDSF9YU0NBTEVfUEFMTVRUNQlYU0NBTEVfUEFMTVRUNQkJOTE3CiB4c2NhbGVfcGFsbXRjCQlNQUNIX09NQVBfUEFMTVRDCU9NQVBfUEFMTVRDCQk5MTgKIG9tYXBfYXBvbGxvbgkJTUFDSF9PTUFQX0FQT0xMT04JT01BUF9BUE9MTE9OCQk5MTkKLWFyZ29ubHZldmIJCU1BQ0hfQVJHT05MVkVWQgkJQVJHT05MVkVWQgkJOTIwCitteGMzMDAzMGV2YgkJTUFDSF9BUkdPTkxWRVZCCQlBUkdPTkxWRVZCCQk5MjAKIHJlYV8yZAkJCU1BQ0hfUkVBXzJECQlSRUFfMkQJCQk5MjEKIGV0aTNlNTI0CQlNQUNIX1RJM0U1MjQJCVRJM0U1MjQJCQk5MjIKIGF0ZWI5MjAwCQlNQUNIX0FURUI5MjAwCQlBVEVCOTIwMAkJOTIzCkBAIC05NjUsNyArOTY1LDc4IEBACiByeDE5NTAJCQlNQUNIX1JYMTk1MAkJUlgxOTUwCQkJOTUyCiB0c2NfdmVudXMJCU1BQ0hfVFNDX1ZFTlVTCQlUU0NfVkVOVVMJCTk1MwogZHMxMDFqCQkJTUFDSF9EUzEwMUoJCURTMTAxSgkJCTk1NAotbXhjMzAwXzMwYWRzCQlNQUNIX01YQzMwMDMwQURTCU1YQzMwMDMwQURTCQk5NTUKK214YzMwMDMwYWRzCQlNQUNIX01YQzMwMDMwQURTCU1YQzMwMDMwQURTCQk5NTUKIGZ1aml0c3Vfd2ltYXhzb2MJTUFDSF9GVUpJVFNVX1dJTUFYU09DCUZVSklUU1VfV0lNQVhTT0MJOTU2CiBkdWFscGNtb2RlbQkJTUFDSF9EVUFMUENNT0RFTQlEVUFMUENNT0RFTQkJOTU3CiBnZXNiYzkzMTIJCU1BQ0hfR0VTQkM5MzEyCQlHRVNCQzkzMTIJCTk1OAoraHRjYXBhY2hlCQlNQUNIX0hUQ0FQQUNIRQkJSFRDQVBBQ0hFCQk5NTkKK2l4ZHA0MzUJCQlNQUNIX0lYRFA0MzUJCUlYRFA0MzUJCQk5NjAKK2NhdHByb3Z0MTAwCQlNQUNIX0NBVFBST1ZUMTAwCUNBVFBST1ZUMTAwCQk5NjEKK3BpY290dXgxeHgJCU1BQ0hfUElDT1RVWDFYWAkJUElDT1RVWDFYWAkJOTYyCitwaWNvdHV4Mnh4CQlNQUNIX1BJQ09UVVgyWFgJCVBJQ09UVVgyWFgJCTk2MworZHNtZzYwMAkJCU1BQ0hfRFNNRzYwMAkJRFNNRzYwMAkJCTk2NAorZW1wYzIJCQlNQUNIX0VNUEMyCQlFTVBDMgkJCTk2NQordmVudHVyYQkJCU1BQ0hfVkVOVFVSQQkJVkVOVFVSQQkJCTk2NgorcGhpZGdldF9zYmMJCU1BQ0hfUEhJREdFVF9TQkMJUEhJREdFVF9TQkMJCTk2NworaWozawkJCU1BQ0hfSUozSwkJSUozSwkJCTk2OAorcGlzZ2FoCQkJTUFDSF9QSVNHQUgJCVBJU0dBSAkJCTk2OQorb21hcF9mc2FtcGxlCQlNQUNIX09NQVBfRlNBTVBMRQlPTUFQX0ZTQU1QTEUJCTk3MAorc2c3MjAJCQlNQUNIX1NHNzIwCQlTRzcyMAkJCTk3MQorcmVkZm94CQkJTUFDSF9SRURGT1gJCVJFREZPWAkJCTk3MgorbXlzaF9lcDkzMTVfMQkJTUFDSF9NWVNIX0VQOTMxNV8xCU1ZU0hfRVA5MzE1XzEJCTk3MwordHBmMTA2CQkJTUFDSF9UUEYxMDYJCVRQRjEwNgkJCTk3NAorYXQ5MXJtOTIwMGtnCQlNQUNIX0FUOTFSTTkyMDBLRwlBVDkxUk05MjAwS0cJCTk3NQorcmFjZW10MgkJCU1BQ0hfU0xFREIJCVNMRURCCQkJOTc2CitvbnRyYWNrCQkJTUFDSF9PTlRSQUNLCQlPTlRSQUNLCQkJOTc3CitwbTEyMDAJCQlNQUNIX1BNMTIwMAkJUE0xMjAwCQkJOTc4Citlc3MyNDU2MgkJTUFDSF9FU1MyNFhYWAkJRVNTMjRYWFgJCTk3OQorY29yZW1wNwkJCU1BQ0hfQ09SRU1QNwkJQ09SRU1QNwkJCTk4MAorbmV4Y29kZXJfNjQ0NgkJTUFDSF9ORVhDT0RFUl82NDQ2CU5FWENPREVSXzY0NDYJCTk4MQorc3R2YzgzODAJCU1BQ0hfU1RWQzgzODAJCVNUVkM4MzgwCQk5ODIKK3Rla2x5bngJCQlNQUNIX1RFS0xZTlgJCVRFS0xZTlgJCQk5ODMKK2NhcmJvbmFkbwkJTUFDSF9DQVJCT05BRE8JCUNBUkJPTkFETwkJOTg0CitzeXNtb3NfbXA3MzAJCU1BQ0hfU1lTTU9TX01QNzMwCVNZU01PU19NUDczMAkJOTg1CitzbmFwcGVyX2NsMTUJCU1BQ0hfU05BUFBFUl9DTDE1CVNOQVBQRVJfQ0wxNQkJOTg2CitwZ2lnaW0JCQlNQUNIX1BHSUdJTQkJUEdJR0lNCQkJOTg3CitwdHg5MTYwcDIJCU1BQ0hfUFRYOTE2MFAyCQlQVFg5MTYwUDIJCTk4OAorZGNvcmUxCQkJTUFDSF9EQ09SRTEJCURDT1JFMQkJCTk4OQordmljdG9ycHhhCQlNQUNIX1ZJQ1RPUlBYQQkJVklDVE9SUFhBCQk5OTAKK214MmR0YgkJCU1BQ0hfTVgyRFRCCQlNWDJEVEIJCQk5OTEKK3B4YV9pcmV4X2VyMDEwMAkJTUFDSF9QWEFfSVJFWF9FUjAxMDAJUFhBX0lSRVhfRVIwMTAwCQk5OTIKK29tYXBfcGFsbXo3MQkJTUFDSF9PTUFQX1BBTE1aNzEJT01BUF9QQUxNWjcxCQk5OTMKK2JhcnRlY19kZWcJCU1BQ0hfQkFSVEVDX0RFRwkJQkFSVEVDX0RFRwkJOTk0CitodzUwMjUxCQkJTUFDSF9IVzUwMjUxCQlIVzUwMjUxCQkJOTk1CitpYm94CQkJTUFDSF9JQk9YCQlJQk9YCQkJOTk2CithdGxhc2xoN2E0MDQJCU1BQ0hfQVRMQVNMSDdBNDA0CUFUTEFTTEg3QTQwNAkJOTk3CitwdDIwMjYJCQlNQUNIX1BUMjAyNgkJUFQyMDI2CQkJOTk4CitodGNhbHBpbmUJCU1BQ0hfSFRDQUxQSU5FCQlIVENBTFBJTkUJCTk5OQorYmFydGVjX3Z0dQkJTUFDSF9CQVJURUNfVlRVCQlCQVJURUNfVlRVCQkxMDAwCit2Y29yZWlpCQkJTUFDSF9WQ09SRUlJCQlWQ09SRUlJCQkJMTAwMQorcGRuYjMJCQlNQUNIX1BETkIzCQlQRE5CMwkJCTEwMDIKK2h0Y2JlZXRsZXMJCU1BQ0hfSFRDQkVFVExFUwkJSFRDQkVFVExFUwkJMTAwMworczNjNjQwMAkJCU1BQ0hfUzNDNjQwMAkJUzNDNjQwMAkJCTEwMDQKK3MzYzI0NDMJCQlNQUNIX1MzQzI0NDMJCVMzQzI0NDMJCQkxMDA1CitvbWFwX2xkawkJTUFDSF9PTUFQX0xESwkJT01BUF9MREsJCTEwMDYKK3NtZGsyNDYwCQlNQUNIX1NNREsyNDYwCQlTTURLMjQ2MAkJMTAwNworc21kazI0NDAJCU1BQ0hfU01ESzI0NDAJCVNNREsyNDQwCQkxMDA4CitzbWRrMjQxMgkJTUFDSF9TTURLMjQxMgkJU01ESzI0MTIJCTEwMDkKK3dlYmJveAkJCU1BQ0hfV0VCQk9YCQlXRUJCT1gJCQkxMDEwCitjd3duZHAJCQlNQUNIX0NXV05EUAkJQ1dXTkRQCQkJMTAxMQorZHJhZ29uCQkJTUFDSF9EUkFHT04JCURSQUdPTgkJCTEwMTIKK29wZW5kb19jcHVfYm9hcmQJTUFDSF9PUEVORE9fQ1BVX0JPQVJECU9QRU5ET19DUFVfQk9BUkQJMTAxMworY2NtMjIwMAkJCU1BQ0hfQ0NNMjIwMAkJQ0NNMjIwMAkJCTEwMTQKK2V0d2FybQkJCU1BQ0hfRVRXQVJNCQlFVFdBUk0JCQkxMDE1CittOTMwMzAJCQlNQUNIX005MzAzMAkJTTkzMDMwCQkJMTAxNgorY2M3dQkJCU1BQ0hfQ0M3VQkJQ0M3VQkJCTEwMTcKK210dF9yYW5nZXIJCU1BQ0hfTVRUX1JBTkdFUgkJTVRUX1JBTkdFUgkJMTAxOAorbmV4dXMJCQlNQUNIX05FWFVTCQlORVhVUwkJCTEwMTkKK2Rlc21hbgkJCU1BQ0hfREVTTUFOCQlERVNNQU4JCQkxMDIwCitia2RlMzAzCQkJTUFDSF9CS0RFMzAzCQlCS0RFMzAzCQkJMTAyMQorc21kazI0MTMJCU1BQ0hfU01ESzI0MTMJCVNNREsyNDEzCQkxMDIyCithbWxfbTcyMDAJCU1BQ0hfQU1MX003MjAwCQlBTUxfTTcyMDAJCTEwMjMKK2FtbF9tNTkwMAkJTUFDSF9BTUxfTTU5MDAJCUFNTF9NNTkwMAkJMTAyNAorc2c2NDAJCQlNQUNIX1NHNjQwCQlTRzY0MAkJCTEwMjUKK2VkZzc5NTI0CQlNQUNIX0VERzc5NTI0CQlFREc3OTUyNAkJMTAyNgorYWkyNDEwCQkJTUFDSF9BSTI0MTAJCUFJMjQxMAkJCTEwMjcKK2l4cDQ2NQkJCU1BQ0hfSVhQNDY1CQlJWFA0NjUJCQkxMDI4CitiYWxsb29uMwkJTUFDSF9CQUxMT09OMwkJQkFMTE9PTjMJCTEwMjkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYwppbmRleCA5YjM2N2E2Li4wMDkwMzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJCSBkZCwgZCwgZXhjZXB0aW9ucyk7CiAJCXZmcF9wdXRfZG91YmxlKGRkLCBkKTsKIAl9Ci0JcmV0dXJuIGV4Y2VwdGlvbnMgJiB+VkZQX05BTl9GTEFHOworCXJldHVybiBleGNlcHRpb25zOwogfQogCiAvKgpAQCAtNTg4LDYgKzU4OCw3IEBACiAJc3RydWN0IHZmcF9kb3VibGUgdmRtOwogCXUzMiBkLCBleGNlcHRpb25zID0gMDsKIAlpbnQgcm1vZGUgPSBmcHNjciAmIEZQU0NSX1JNT0RFX01BU0s7CisJaW50IHRtOwogCiAJdmZwX2RvdWJsZV91bnBhY2soJnZkbSwgdmZwX2dldF9kb3VibGUoZG0pKTsKIAl2ZnBfZG91YmxlX2R1bXAoIlZETSIsICZ2ZG0pOwpAQCAtNTk1LDEwICs1OTYsMTQgQEAKIAkvKgogCSAqIERvIHdlIGhhdmUgZGVub3JtYWxpc2VkIG51bWJlcj8KIAkgKi8KLQlpZiAodmZwX2RvdWJsZV90eXBlKCZ2ZG0pICYgVkZQX0RFTk9STUFMKQorCXRtID0gdmZwX2RvdWJsZV90eXBlKCZ2ZG0pOworCWlmICh0bSAmIFZGUF9ERU5PUk1BTCkKIAkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JREM7CiAKLQlpZiAodmRtLmV4cG9uZW50ID49IDEwMjMgKyAzMikgeworCWlmICh0bSAmIFZGUF9OQU4pIHsKKwkJZCA9IDA7CisJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSU9DOworCX0gZWxzZSBpZiAodmRtLmV4cG9uZW50ID49IDEwMjMgKyAzMikgewogCQlkID0gMHg3ZmZmZmZmZjsKIAkJaWYgKHZkbS5zaWduKQogCQkJZCA9IH5kOwpAQCAtMTEyMiw5ICsxMTI3LDkgQEAKIHsKIAl1MzIgb3AgPSBpbnN0ICYgRk9QX01BU0s7CiAJdTMyIGV4Y2VwdGlvbnMgPSAwOwotCXVuc2lnbmVkIGludCBkZCA9IHZmcF9nZXRfc2QoaW5zdCk7Ci0JdW5zaWduZWQgaW50IGRuID0gdmZwX2dldF9zbihpbnN0KTsKLQl1bnNpZ25lZCBpbnQgZG0gPSB2ZnBfZ2V0X3NtKGluc3QpOworCXVuc2lnbmVkIGludCBkZCA9IHZmcF9nZXRfZGQoaW5zdCk7CisJdW5zaWduZWQgaW50IGRuID0gdmZwX2dldF9kbihpbnN0KTsKKwl1bnNpZ25lZCBpbnQgZG0gPSB2ZnBfZ2V0X2RtKGluc3QpOwogCXVuc2lnbmVkIGludCB2ZWNpdHIsIHZlY2xlbiwgdmVjc3RyaWRlOwogCXUzMiAoKmZvcCkoaW50LCBpbnQsIHMzMiwgdTMyKTsKIApAQCAtMTE0MSw3ICsxMTQ2LDcgQEAKIAlwcl9kZWJ1ZygiVkZQOiB2ZWNzdHJpZGU9JXUgdmVjbGVuPSV1XG4iLCB2ZWNzdHJpZGUsCiAJCSAodmVjbGVuID4+IEZQU0NSX0xFTkdUSF9CSVQpICsgMSk7CiAKLQlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW2RuXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOworCWZvcCA9IChvcCA9PSBGT1BfRVhUKSA/IGZvcF9leHRmbnNbRkVYVF9UT19JRFgoaW5zdCldIDogZm9wX2Zuc1tGT1BfVE9fSURYKG9wKV07CiAJaWYgKCFmb3ApCiAJCWdvdG8gaW52YWxpZDsKIApAQCAtMTE0OSwxNyArMTE1NCwxMyBAQAogCQl1MzIgZXhjZXB0OwogCiAJCWlmIChvcCA9PSBGT1BfRVhUKQotCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKGQldS4ldSkgPSBvcFsldV0gKGQldS4ldSlcbiIsCisJCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoZCV1KSA9IG9wWyV1XSAoZCV1KVxuIiwKIAkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsCi0JCQkJIGRkID4+IDEsIGRkICYgMSwgZG4sCi0JCQkJIGRtID4+IDEsIGRtICYgMSk7CisJCQkJIGRkLCBkbiwgZG0pOwogCQllbHNlCi0JCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoZCV1LiV1KSA9IChkJXUuJXUpIG9wWyV1XSAoZCV1LiV1KVxuIiwKKwkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUpID0gKGQldSkgb3BbJXVdIChkJXUpXG4iLAogCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKLQkJCQkgZGQgPj4gMSwgZGQgJiAxLAotCQkJCSBkbiA+PiAxLCBkbiAmIDEsCi0JCQkJIEZPUF9UT19JRFgob3ApLAotCQkJCSBkbSA+PiAxLCBkbSAmIDEpOworCQkJCSBkZCwgZG4sIEZPUF9UT19JRFgob3ApLCBkbSk7CiAKIAkJZXhjZXB0ID0gZm9wKGRkLCBkbiwgZG0sIGZwc2NyKTsKIAkJcHJfZGVidWcoIlZGUDogaXRyJWQ6IGV4Y2VwdGlvbnM9JTA4eFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBody5TIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKaW5kZXggYjdlZDU3ZS4uYTNmNjViNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKQEAgLTE4OSwxMSArMTg5LDEwIEBACiAKIAkuZ2xvYmwJdmZwX2dldF9kb3VibGUKIHZmcF9nZXRfZG91YmxlOgotCW1vdglyMCwgcjAsIGxzciAjMQogCWFkZAlwYywgcGMsIHIwLCBsc2wgIzMKIAltb3YJcjAsIHIwCiAJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1Ci0JbXJyYwlwMTAsIDEsIHIwLCByMSwgY1xkcglAIGZtcnJkCXIwLCByMSwgZFxkcgorCW1ycmMJcDExLCAxLCByMCwgcjEsIGNcZHIJQCBmbXJyZAlyMCwgcjEsIGRcZHIKIAltb3YJcGMsIGxyCiAJLmVuZHIKIApAQCAtMjA0LDEwICsyMDMsOSBAQAogCiAJLmdsb2JsCXZmcF9wdXRfZG91YmxlCiB2ZnBfcHV0X2RvdWJsZToKLQltb3YJcjAsIHIwLCBsc3IgIzEKIAlhZGQJcGMsIHBjLCByMCwgbHNsICMzCiAJbW92CXIwLCByMAogCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQotCW1jcnIJcDEwLCAxLCByMSwgcjIsIGNcZHIJQCBmbXJyZAlyMSwgcjIsIGRcZHIKKwltY3JyCXAxMSwgMSwgcjEsIHIyLCBjXGRyCUAgZm1kcnIJcjEsIHIyLCBkXGRyCiAJbW92CXBjLCBscgogCS5lbmRyCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggMjJmM2RhNC4uMDM0ODZiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCSAqIGVtdWxhdGUgaXQuCiAJCSAqLwogCX0KLQlyZXR1cm4gZXhjZXB0aW9uczsKKwlyZXR1cm4gZXhjZXB0aW9ucyAmIH5WRlBfTkFOX0ZMQUc7CiB9CiAKIC8qCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkgKi8KIAliYXJyaWVyKCk7CiAJdHJpZ2dlciA9IGZtcngoRlBJTlNUMik7Ci0JZnBzY3IgPSBmbXJ4KEZQU0NSKTsKKwlvcmlnX2Zwc2NyID0gZnBzY3IgPSBmbXJ4KEZQU0NSKTsKIAogIGVtdWxhdGU6CiAJZXhjZXB0aW9ucyA9IHZmcF9lbXVsYXRlX2luc3RydWN0aW9uKHRyaWdnZXIsIGZwc2NyLCByZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYwppbmRleCAxNGRkNjk2Li5kYWUyYzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwc2luZ2xlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJdmZwX3B1dF9mbG9hdChzZCwgZCk7CiAJfQogCi0JcmV0dXJuIGV4Y2VwdGlvbnMgJiB+VkZQX05BTl9GTEFHOworCXJldHVybiBleGNlcHRpb25zOwogfQogCiAvKgpAQCAtNjMyLDYgKzYzMiw3IEBACiAJc3RydWN0IHZmcF9zaW5nbGUgdnNtOwogCXUzMiBkLCBleGNlcHRpb25zID0gMDsKIAlpbnQgcm1vZGUgPSBmcHNjciAmIEZQU0NSX1JNT0RFX01BU0s7CisJaW50IHRtOwogCiAJdmZwX3NpbmdsZV91bnBhY2soJnZzbSwgbSk7CiAJdmZwX3NpbmdsZV9kdW1wKCJWU00iLCAmdnNtKTsKQEAgLTYzOSwxMCArNjQwLDE0IEBACiAJLyoKIAkgKiBEbyB3ZSBoYXZlIGEgZGVub3JtYWxpc2VkIG51bWJlcj8KIAkgKi8KKwl0bSA9IHZmcF9zaW5nbGVfdHlwZSgmdnNtKTsKIAlpZiAodmZwX3NpbmdsZV90eXBlKCZ2c20pICYgVkZQX0RFTk9STUFMKQogCQlleGNlcHRpb25zIHw9IEZQU0NSX0lEQzsKIAotCWlmICh2c20uZXhwb25lbnQgPj0gMTI3ICsgMzIpIHsKKwlpZiAodG0gJiBWRlBfTkFOKSB7CisJCWQgPSAwOworCQlleGNlcHRpb25zIHw9IEZQU0NSX0lPQzsKKwl9IGVsc2UgaWYgKHZzbS5leHBvbmVudCA+PSAxMjcgKyAzMikgewogCQkvKgogCQkgKiBtID49IDJeMzEtMl43OiBpbnZhbGlkCiAJCSAqLwpAQCAtMTE4OCw3ICsxMTkzLDcgQEAKIAlwcl9kZWJ1ZygiVkZQOiB2ZWNzdHJpZGU9JXUgdmVjbGVuPSV1XG4iLCB2ZWNzdHJpZGUsCiAJCSAodmVjbGVuID4+IEZQU0NSX0xFTkdUSF9CSVQpICsgMSk7CiAKLQlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW3NuXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOworCWZvcCA9IChvcCA9PSBGT1BfRVhUKSA/IGZvcF9leHRmbnNbRkVYVF9UT19JRFgoaW5zdCldIDogZm9wX2Zuc1tGT1BfVE9fSURYKG9wKV07CiAJaWYgKCFmb3ApCiAJCWdvdG8gaW52YWxpZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtMjYva2VybmVsL2FybWtzeW1zLmMKaW5kZXggODExYTYzNzZjLi45ZDY2YzI3IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9hcm1rc3ltcy5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL2FybWtzeW1zLmMKQEAgLTE1Miw3ICsxNTIsNiBAQAogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwpAQCAtMjEyLDggKzIxMSw2IEBACiBFWFBPUlRfU1lNQk9MKHN5c19leGl0KTsKIEVYUE9SVF9TWU1CT0woc3lzX3dhaXQ0KTsKIAotRVhQT1JUX1NZTUJPTChnZXRfd2NoYW4pOwotCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIEVYUE9SVF9TWU1CT0woa2VybmVsX2ZsYWcpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jIGIvYXJjaC9jcmlzL2tlcm5lbC9jcmlza3N5bXMuYwppbmRleCBkZTM5NzI1Li5kNTc4NTkwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMKQEAgLTM5LDcgKzM5LDYgQEAKIC8qIFN0cmluZyBmdW5jdGlvbnMgKi8KIEVYUE9SVF9TWU1CT0wobWVtY21wKTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChzdHJjcHkpOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUwppbmRleCAxZDIxYzhkLi5hOWI1OTUyIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUwpAQCAtMTE3MCwxMiArMTE3MCw2IEBACiAjIHN5c2NhbGwgdmVjdG9yIHRhYmxlCiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jaWZkZWYgQ09ORklHX01NVQotI2RlZmluZSBfX01NVShYKSBYCi0jZWxzZQotI2RlZmluZSBfX01NVShYKSBzeXNfbmlfc3lzY2FsbAotI2VuZGlmCi0KIAkuc2VjdGlvbiAucm9kYXRhCiBBTElHTgogCS5nbG9ibAkJc3lzX2NhbGxfdGFibGUKQEAgLTEzMDUsNyArMTI5OSw3IEBACiAJLmxvbmcgc3lzX25ld3VuYW1lCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJjYWNoZWZsdXNoIiAqLwogCS5sb25nIHN5c19hZGp0aW1leAotCS5sb25nIF9fTU1VKHN5c19tcHJvdGVjdCkgLyogMTI1ICovCisJLmxvbmcgc3lzX21wcm90ZWN0CS8qIDEyNSAqLwogCS5sb25nIHN5c19zaWdwcm9jbWFzawogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAiY3JlYXRlX21vZHVsZSIgKi8KIAkubG9uZyBzeXNfaW5pdF9tb2R1bGUKQEAgLTEzMjQsMTYgKzEzMTgsMTYgQEAKIAkubG9uZyBzeXNfZ2V0ZGVudHMKIAkubG9uZyBzeXNfc2VsZWN0CiAJLmxvbmcgc3lzX2Zsb2NrCi0JLmxvbmcgX19NTVUoc3lzX21zeW5jKQorCS5sb25nIHN5c19tc3luYwogCS5sb25nIHN5c19yZWFkdgkJLyogMTQ1ICovCiAJLmxvbmcgc3lzX3dyaXRldgogCS5sb25nIHN5c19nZXRzaWQKIAkubG9uZyBzeXNfZmRhdGFzeW5jCiAJLmxvbmcgc3lzX3N5c2N0bAotCS5sb25nIF9fTU1VKHN5c19tbG9jaykJCS8qIDE1MCAqLwotCS5sb25nIF9fTU1VKHN5c19tdW5sb2NrKQotCS5sb25nIF9fTU1VKHN5c19tbG9ja2FsbCkKLQkubG9uZyBfX01NVShzeXNfbXVubG9ja2FsbCkKKwkubG9uZyBzeXNfbWxvY2sJCS8qIDE1MCAqLworCS5sb25nIHN5c19tdW5sb2NrCisJLmxvbmcgc3lzX21sb2NrYWxsCisJLmxvbmcgc3lzX211bmxvY2thbGwKIAkubG9uZyBzeXNfc2NoZWRfc2V0cGFyYW0KIAkubG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0gICAvKiAxNTUgKi8KIAkubG9uZyBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyCkBAIC0xMzQzLDcgKzEzMzcsNyBAQAogCS5sb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluICAvKiAxNjAgKi8KIAkubG9uZyBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsCiAJLmxvbmcgc3lzX25hbm9zbGVlcAotCS5sb25nIF9fTU1VKHN5c19tcmVtYXApCisJLmxvbmcgc3lzX21yZW1hcAogCS5sb25nIHN5c19zZXRyZXN1aWQxNgogCS5sb25nIHN5c19nZXRyZXN1aWQxNgkvKiAxNjUgKi8KIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBmb3Igdm04NiAqLwpAQCAtMTM5OCw4ICsxMzkyLDggQEAKIAkubG9uZyBzeXNfc2V0ZnN1aWQJCS8qIDIxNSAqLwogCS5sb25nIHN5c19zZXRmc2dpZAogCS5sb25nIHN5c19waXZvdF9yb290Ci0JLmxvbmcgX19NTVUoc3lzX21pbmNvcmUpCi0JLmxvbmcgX19NTVUoc3lzX21hZHZpc2UpCisJLmxvbmcgc3lzX21pbmNvcmUKKwkubG9uZyBzeXNfbWFkdmlzZQogCS5sb25nIHN5c19nZXRkZW50czY0CS8qIDIyMCAqLwogCS5sb25nIHN5c19mY250bDY0CiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIFRVWCAqLwpAQCAtMTQzNyw3ICsxNDMxLDcgQEAKIAkubG9uZyBzeXNfZXBvbGxfY3JlYXRlCiAJLmxvbmcgc3lzX2Vwb2xsX2N0bAkvKiAyNTUgKi8KIAkubG9uZyBzeXNfZXBvbGxfd2FpdAotIAkubG9uZyBfX01NVShzeXNfcmVtYXBfZmlsZV9wYWdlcykKKyAJLmxvbmcgc3lzX3JlbWFwX2ZpbGVfcGFnZXMKICAJLmxvbmcgc3lzX3NldF90aWRfYWRkcmVzcwogIAkubG9uZyBzeXNfdGltZXJfY3JlYXRlCiAgCS5sb25nIHN5c190aW1lcl9zZXR0aW1lCQkvKiAyNjAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYyBiL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYwppbmRleCBhYTZiN2QwLi4wZjI3M2E3IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZnJ2X2tzeW1zLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jCkBAIC0yNyw3ICsyNyw2IEBACiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwogCiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CkBAIC03OSw4ICs3OCw2IEBACiBFWFBPUlRfU1lNQk9MKF9fb3V0c2xfbnMpOwogRVhQT1JUX1NZTUJPTChfX2luc2xfbnMpOwogCi1FWFBPUlRfU1lNQk9MKGdldF93Y2hhbik7Ci0KICNpZmRlZiBDT05GSUdfRlJWX09VVE9GTElORV9BVE9NSUNfT1BTCiBFWFBPUlRfU1lNQk9MKGF0b21pY190ZXN0X2FuZF9BTkROT1RfbWFzayk7CiBFWFBPUlRfU1lNQk9MKGF0b21pY190ZXN0X2FuZF9PUl9tYXNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jCmluZGV4IDY5ZDZhZDMuLmY4ZDZkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYwpAQCAtMjUsNyArMjUsNiBAQAogLyogcGxhdGZvcm0gZGVwZW5kZW50IHN1cHBvcnQgKi8KIAogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwpAQCAtNTUsOCArNTQsNiBAQAogRVhQT1JUX1NZTUJPTChtZW1zY2FuKTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7CiAKLUVYUE9SVF9TWU1CT0woZ2V0X3djaGFuKTsKLQogLyoKICAqIGxpYmdjYyBmdW5jdGlvbnMgLSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZQogICogY29tcGlsZXIuLi4gIChwcm90b3R5cGVzIGFyZSBub3QgY29ycmVjdCB0aG91Z2gsIGJ1dCB0aGF0CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZyBiL2FyY2gvaTM4Ni9LY29uZmlnCmluZGV4IGYxN2JkMWQuLjhkZmEzMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnCisrKyBiL2FyY2gvaTM4Ni9LY29uZmlnCkBAIC01Myw2ICs1MywzNSBAQAogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKK2NvbmZpZyBTTVAKKwlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUuIElmIHlvdSBoYXZlCisJICBhIHN5c3RlbSB3aXRoIG9ubHkgb25lIENQVSwgbGlrZSBtb3N0IHBlcnNvbmFsIGNvbXB1dGVycywgc2F5IE4uIElmCisJICB5b3UgaGF2ZSBhIHN5c3RlbSB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLCBzYXkgWS4KKworCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZSBrZXJuZWwgd2lsbCBydW4gb24gc2luZ2xlIGFuZCBtdWx0aXByb2Nlc3NvcgorCSAgbWFjaGluZXMsIGJ1dCB3aWxsIHVzZSBvbmx5IG9uZSBDUFUgb2YgYSBtdWx0aXByb2Nlc3NvciBtYWNoaW5lLiBJZgorCSAgeW91IHNheSBZIGhlcmUsIHRoZSBrZXJuZWwgd2lsbCBydW4gb24gbWFueSwgYnV0IG5vdCBhbGwsCisJICBzaW5nbGVwcm9jZXNzb3IgbWFjaGluZXMuIE9uIGEgc2luZ2xlcHJvY2Vzc29yIG1hY2hpbmUsIHRoZSBrZXJuZWwKKwkgIHdpbGwgcnVuIGZhc3RlciBpZiB5b3Ugc2F5IE4gaGVyZS4KKworCSAgTm90ZSB0aGF0IGlmIHlvdSBzYXkgWSBoZXJlIGFuZCBjaG9vc2UgYXJjaGl0ZWN0dXJlICI1ODYiIG9yCisJICAiUGVudGl1bSIgdW5kZXIgIlByb2Nlc3NvciBmYW1pbHkiLCB0aGUga2VybmVsIHdpbGwgbm90IHdvcmsgb24gNDg2CisJICBhcmNoaXRlY3R1cmVzLiBTaW1pbGFybHksIG11bHRpcHJvY2Vzc29yIGtlcm5lbHMgZm9yIHRoZSAiUFBybyIKKwkgIGFyY2hpdGVjdHVyZSBtYXkgbm90IHdvcmsgb24gYWxsIFBlbnRpdW0gYmFzZWQgYm9hcmRzLgorCisJICBQZW9wbGUgdXNpbmcgbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMgd2hvIHNheSBZIGhlcmUgc2hvdWxkIGFsc28gc2F5CisJICBZIHRvICJFbmhhbmNlZCBSZWFsIFRpbWUgQ2xvY2sgU3VwcG9ydCIsIGJlbG93LiBUaGUgIkFkdmFuY2VkIFBvd2VyCisJICBNYW5hZ2VtZW50IiBjb2RlIHdpbGwgYmUgZGlzYWJsZWQgaWYgeW91IHNheSBZIGhlcmUuCisKKwkgIFNlZSBhbHNvIHRoZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NtcC50eHQ+LAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9pMzg2L0lPLUFQSUMudHh0PiwKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbm1pX3dhdGNoZG9nLnR4dD4gYW5kIHRoZSBTTVAtSE9XVE8gYXZhaWxhYmxlIGF0CisJICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgorCiBjaG9pY2UKIAlwcm9tcHQgIlN1YmFyY2hpdGVjdHVyZSBUeXBlIgogCWRlZmF1bHQgWDg2X1BDCkBAIC0xNzgsMzUgKzIwNyw2IEBACiAJZGVwZW5kcyBvbiBIUEVUX1RJTUVSICYmIFJUQz15CiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBTTVAKLQlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUuIElmIHlvdSBoYXZlCi0JICBhIHN5c3RlbSB3aXRoIG9ubHkgb25lIENQVSwgbGlrZSBtb3N0IHBlcnNvbmFsIGNvbXB1dGVycywgc2F5IE4uIElmCi0JICB5b3UgaGF2ZSBhIHN5c3RlbSB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLCBzYXkgWS4KLQotCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZSBrZXJuZWwgd2lsbCBydW4gb24gc2luZ2xlIGFuZCBtdWx0aXByb2Nlc3NvcgotCSAgbWFjaGluZXMsIGJ1dCB3aWxsIHVzZSBvbmx5IG9uZSBDUFUgb2YgYSBtdWx0aXByb2Nlc3NvciBtYWNoaW5lLiBJZgotCSAgeW91IHNheSBZIGhlcmUsIHRoZSBrZXJuZWwgd2lsbCBydW4gb24gbWFueSwgYnV0IG5vdCBhbGwsCi0JICBzaW5nbGVwcm9jZXNzb3IgbWFjaGluZXMuIE9uIGEgc2luZ2xlcHJvY2Vzc29yIG1hY2hpbmUsIHRoZSBrZXJuZWwKLQkgIHdpbGwgcnVuIGZhc3RlciBpZiB5b3Ugc2F5IE4gaGVyZS4KLQotCSAgTm90ZSB0aGF0IGlmIHlvdSBzYXkgWSBoZXJlIGFuZCBjaG9vc2UgYXJjaGl0ZWN0dXJlICI1ODYiIG9yCi0JICAiUGVudGl1bSIgdW5kZXIgIlByb2Nlc3NvciBmYW1pbHkiLCB0aGUga2VybmVsIHdpbGwgbm90IHdvcmsgb24gNDg2Ci0JICBhcmNoaXRlY3R1cmVzLiBTaW1pbGFybHksIG11bHRpcHJvY2Vzc29yIGtlcm5lbHMgZm9yIHRoZSAiUFBybyIKLQkgIGFyY2hpdGVjdHVyZSBtYXkgbm90IHdvcmsgb24gYWxsIFBlbnRpdW0gYmFzZWQgYm9hcmRzLgotCi0JICBQZW9wbGUgdXNpbmcgbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMgd2hvIHNheSBZIGhlcmUgc2hvdWxkIGFsc28gc2F5Ci0JICBZIHRvICJFbmhhbmNlZCBSZWFsIFRpbWUgQ2xvY2sgU3VwcG9ydCIsIGJlbG93LiBUaGUgIkFkdmFuY2VkIFBvd2VyCi0JICBNYW5hZ2VtZW50IiBjb2RlIHdpbGwgYmUgZGlzYWJsZWQgaWYgeW91IHNheSBZIGhlcmUuCi0KLQkgIFNlZSBhbHNvIHRoZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NtcC50eHQ+LAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9pMzg2L0lPLUFQSUMudHh0PiwKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vbm1pX3dhdGNoZG9nLnR4dD4gYW5kIHRoZSBTTVAtSE9XVE8gYXZhaWxhYmxlIGF0Ci0JICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LgotCi0JICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgotCiBjb25maWcgTlJfQ1BVUwogCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi0yNTUpIgogCXJhbmdlIDIgMjU1CkBAIC00NjcsNyArNDY3LDcgQEAKIAogY2hvaWNlCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgIVg4Nl9QQUUKLQlwcm9tcHQgIk1lbW9yeSBzcGxpdCIKKwlwcm9tcHQgIk1lbW9yeSBzcGxpdCIgaWYgRU1CRURERUQKIAlkZWZhdWx0IFZNU1BMSVRfM0cKIAloZWxwCiAJICBTZWxlY3QgdGhlIGRlc2lyZWQgc3BsaXQgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgbWVtb3J5LgpAQCAtNTIyLDYgKzUyMiwxMiBAQAogY29tbWVudCAiTlVNQSAoU3VtbWl0KSByZXF1aXJlcyBTTVAsIDY0R0IgaGlnaG1lbSBzdXBwb3J0LCBBQ1BJIgogCWRlcGVuZHMgb24gWDg2X1NVTU1JVCAmJiAoIUhJR0hNRU02NEcgfHwgIUFDUEkpCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjQiIGlmIFg4Nl9OVU1BUQorCWRlZmF1bHQgIjMiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIGNvbmZpZyBIQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCiAJYm9vbAogCWRlcGVuZHMgb24gTlVNQQpAQCAtNzUwLDIxICs3NTYsMTIgQEAKIAogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU01QICYmIEhPVFBMVUcgJiYgRVhQRVJJTUVOVEFMICYmICFYODZfVk9ZQUdFUiAmJiAhWDg2X1BDCisJZGVwZW5kcyBvbiBTTVAgJiYgSE9UUExVRyAmJiBFWFBFUklNRU5UQUwgJiYgIVg4Nl9WT1lBR0VSCiAJLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSB0byBleHBlcmltZW50IHdpdGggdHVybmluZyBDUFVzIG9mZiBhbmQgb24uICBDUFVzCi0JICBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1LgorCSAgU2F5IFkgaGVyZSB0byBleHBlcmltZW50IHdpdGggdHVybmluZyBDUFVzIG9mZiBhbmQgb24sIGFuZCB0bworCSAgZW5hYmxlIHN1c3BlbmQgb24gU01QIHN5c3RlbXMuIENQVXMgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaAorCSAgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUuCiAKLQkgIFNheSBOLgotCi1jb25maWcgRE9VQkxFRkFVTFQKLQlkZWZhdWx0IHkKLQlib29sICJFbmFibGUgZG91YmxlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIiIGlmIEVNQkVEREVECi0JaGVscAotICAgICAgICAgIFRoaXMgb3B0aW9uIGFsbG93cyB0cmFwcGluZyBvZiByYXJlIGRvdWJsZWZhdWx0IGV4Y2VwdGlvbnMgdGhhdAotICAgICAgICAgIHdvdWxkIG90aGVyd2lzZSBjYXVzZSBhIHN5c3RlbSB0byBzaWxlbnRseSByZWJvb3QuIERpc2FibGluZyB0aGlzCi0gICAgICAgICAgb3B0aW9uIHNhdmVzIGFib3V0IDRrIGFuZCBtaWdodCBjYXVzZSB5b3UgbXVjaCBhZGRpdGlvbmFsIGdyZXkKLSAgICAgICAgICBoYWlyLgogCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9LY29uZmlnLmNwdSBiL2FyY2gvaTM4Ni9LY29uZmlnLmNwdQppbmRleCA3OTYwM2IzLi5lYjEzMDQ4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC9pMzg2L0tjb25maWcuY3B1CkBAIC0zMTEsNSArMzExLDUgQEAKIAogY29uZmlnIFg4Nl9UU0MKIAlib29sCi0JZGVwZW5kcyBvbiAoTVdJTkNISVAzRCB8fCBNV0lOQ0hJUDIgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgTUNZUklYSUlJIHx8IE1LNyB8fCBNSzYgfHwgTVBFTlRJVU00IHx8IE1QRU5USVVNTSB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE1LOCB8fCBNVklBQzNfMiB8fCBNR0VPREVHWDEpICYmICFYODZfTlVNQVEKKwlkZXBlbmRzIG9uIChNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTUs4IHx8IE1WSUFDM18yIHx8IE1HRU9ERUdYMSB8fCBNR0VPREVfTFgpICYmICFYODZfTlVNQVEKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9LY29uZmlnLmRlYnVnIGIvYXJjaC9pMzg2L0tjb25maWcuZGVidWcKaW5kZXggNmU5N2RmNi4uYzkyMTkxYiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9pMzg2L0tjb25maWcuZGVidWcKQEAgLTgxLDQgKzgxLDEzIEBACiAJZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQyAmJiAhWDg2X1ZJU1dTCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBET1VCTEVGQVVMVAorCWRlZmF1bHQgeQorCWJvb2wgIkVuYWJsZSBkb3VibGVmYXVsdCBleGNlcHRpb24gaGFuZGxlciIgaWYgRU1CRURERUQKKwloZWxwCisgICAgICAgICAgVGhpcyBvcHRpb24gYWxsb3dzIHRyYXBwaW5nIG9mIHJhcmUgZG91YmxlZmF1bHQgZXhjZXB0aW9ucyB0aGF0CisgICAgICAgICAgd291bGQgb3RoZXJ3aXNlIGNhdXNlIGEgc3lzdGVtIHRvIHNpbGVudGx5IHJlYm9vdC4gRGlzYWJsaW5nIHRoaXMKKyAgICAgICAgICBvcHRpb24gc2F2ZXMgYWJvdXQgNGsgYW5kIG1pZ2h0IGNhdXNlIHlvdSBtdWNoIGFkZGl0aW9uYWwgZ3JleQorICAgICAgICAgIGhhaXIuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMgYi9hcmNoL2kzODYvYm9vdC92aWRlby5TCmluZGV4IDAwMDBhMjYuLmM5MzQzYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMKKysrIGIvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUwpAQCAtOTcsNiArOTcsNyBAQAogI2RlZmluZSBQQVJBTV9WRVNBUE1fT0ZGCTB4MzAKICNkZWZpbmUgUEFSQU1fTEZCX1BBR0VTCQkweDMyCiAjZGVmaW5lIFBBUkFNX1ZFU0FfQVRUUklCCTB4MzQKKyNkZWZpbmUgUEFSQU1fQ0FQQUJJTElUSUVTCTB4MzYKIAogLyogRGVmaW5lIERPX1NUT1JFIGFjY29yZGluZyB0byBDT05GSUdfVklERU9fUkVUQUlOICovCiAjaWZkZWYgQ09ORklHX1ZJREVPX1JFVEFJTgpAQCAtMjMzLDYgKzIzNCwxMCBAQAogCW1vdncJMTgoJWRpKSwgJWF4CiAJbW92bAklZWF4LCAlZnM6KFBBUkFNX0xGQl9TSVpFKQogCisjIHN0b3JlIG1vZGUgY2FwYWJpbGl0aWVzCisJbW92bCAxMCglZGkpLCAlZWF4CisJbW92bCAlZWF4LCAlZnM6KFBBUkFNX0NBUEFCSUxJVElFUykKKwogIyBzd2l0Y2hpbmcgdGhlIERBQyB0byA4LWJpdCBpcyBmb3IgPD0gOCBicHAgb25seQogCW1vdncJJWZzOihQQVJBTV9MRkJfREVQVEgpLCAlYXgKIAljbXB3CSQ4LCAlYXgKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCmluZGV4IDViOWVkMjEuLjk2ZmI4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogb2JqLXkJOj0gcHJvY2Vzcy5vIHNlbWFwaG9yZS5vIHNpZ25hbC5vIGVudHJ5Lm8gdHJhcHMubyBpcnEubyBcCiAJCXB0cmFjZS5vIHRpbWUubyBpb3BvcnQubyBsZHQubyBzZXR1cC5vIGk4MjU5Lm8gc3lzX2kzODYubyBcCi0JCXBjaS1kbWEubyBpMzg2X2tzeW1zLm8gaTM4Ny5vIGRtaV9zY2FuLm8gYm9vdGZsYWcubyBcCisJCXBjaS1kbWEubyBpMzg2X2tzeW1zLm8gaTM4Ny5vIGJvb3RmbGFnLm8gXAogCQlxdWlya3MubyBpODIzNy5vIHRvcG9sb2d5Lm8gYWx0ZXJuYXRpdmUubwogCiBvYmoteQkJCQkrPSBjcHUvCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCAwMzMwNjYxLi41Y2NiZjU4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogewogCXN0cnVjdCBhY3BpX3RhYmxlX21hZHQgKm1hZHQgPSBOVUxMOwogCi0JaWYgKCFwaHlzX2FkZHIgfHwgIXNpemUpCisJaWYgKCFwaHlzX2FkZHIgfHwgIXNpemUgfHwgIWNwdV9oYXNfYXBpYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltYWR0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX21hZHQgKilfX2FjcGlfbWFwX3RhYmxlKHBoeXNfYWRkciwgc2l6ZSk7CkBAIC02MjEsOSArNjIxLDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWNwaV9wYXJzZV9mYWR0KHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqZmFkdCA9IE5VTEw7CisJc3RydWN0IGZhZHRfZGVzY3JpcHRvciAqZmFkdCA9IE5VTEw7CiAKLQlmYWR0ID0gKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqKV9fYWNwaV9tYXBfdGFibGUocGh5cywgc2l6ZSk7CisJZmFkdCA9IChzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICopX19hY3BpX21hcF90YWJsZShwaHlzLCBzaXplKTsKIAlpZiAoIWZhZHQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIlVuYWJsZSB0byBtYXAgRkFEVFxuIik7CiAJCXJldHVybiAwOwpAQCAtNjkzLDYgKzY5Myw5IEBACiB7CiAJaW50IGNvdW50OwogCisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtRU5PREVWOworCiAJLyogCiAJICogTm90ZSB0aGF0IHRoZSBMQVBJQyBhZGRyZXNzIGlzIG9idGFpbmVkIGZyb20gdGhlIE1BRFQgKDMyLWJpdCB2YWx1ZSkKIAkgKiBhbmQgKG9wdGlvbmFsbHkpIG92ZXJyaWRlbiBieSBhIExBUElDX0FERFJfT1ZSIGVudHJ5ICg2NC1iaXQgdmFsdWUpLgpAQCAtNzUxLDYgKzc1NCw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWlmICghY3B1X2hhc19hcGljKSAKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKgogCSAqIGlmICJub2FwaWMiIGJvb3Qgb3B0aW9uLCBkb24ndCBsb29rIGZvciBJTy1BUElDcwogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Vhcmx5cXVpcmsuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMKaW5kZXggMmUzYjY0My4uMTY0OWExNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Vhcmx5cXVpcmsuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvZWFybHlxdWlyay5jCkBAIC01LDE3ICs1LDM0IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKwogI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+CiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogCisjaWZkZWYgQ09ORklHX0FDUEkKKworc3RhdGljIGludCBudmlkaWFfaHBldF9kZXRlY3RlZCBfX2luaXRkYXRhOworCitzdGF0aWMgaW50IF9faW5pdCBudmlkaWFfaHBldF9jaGVjayh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwludmlkaWFfaHBldF9kZXRlY3RlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgY2hlY2tfYnJpZGdlKGludCB2ZW5kb3IsIGludCBkZXZpY2UpCiB7CiAjaWZkZWYgQ09ORklHX0FDUEkKLQkvKiBBY2NvcmRpbmcgdG8gTnZpZGlhIGFsbCB0aW1lciBvdmVycmlkZXMgYXJlIGJvZ3VzLiBKdXN0IGlnbm9yZQotCSAgIHRoZW0gYWxsLiAqLworCS8qIEFjY29yZGluZyB0byBOdmlkaWEgYWxsIHRpbWVyIG92ZXJyaWRlcyBhcmUgYm9ndXMgdW5sZXNzIEhQRVQKKwkgICBpcyBlbmFibGVkLiAqLwogCWlmICh2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OVklESUEpIHsKLQkJYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlID0gMTsKKwkJbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPSAwOworCQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfSFBFVCwgbnZpZGlhX2hwZXRfY2hlY2spOworCQlpZiAobnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPT0gMCkgeworCQkJYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlID0gMTsKKwkJfQogCX0KICNlbmRpZgogCWlmICh2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkgJiYgdGltZXJfb3Zlcl84MjU0ID09IDEpIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKaW5kZXggZWI1Mjc5ZC4uM2Q0YjJmMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKQEAgLTYyLDYgKzYyLDE4IEBACiAKIHN0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCk7CiAKK2ludCBtb2Rlcm5fYXBpYyh2b2lkKQoreworCXVuc2lnbmVkIGludCBsdnIsIHZlcnNpb247CisJLyogQU1EIHN5c3RlbXMgdXNlIG9sZCBBUElDIHZlcnNpb25zLCBzbyBjaGVjayB0aGUgQ1BVICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgorCQlib290X2NwdV9kYXRhLng4NiA+PSAweGYpCisJCXJldHVybiAxOworCWx2ciA9IGFwaWNfcmVhZChBUElDX0xWUik7CisJdmVyc2lvbiA9IEdFVF9BUElDX1ZFUlNJT04obHZyKTsKKwlyZXR1cm4gdmVyc2lvbiA+PSAweDE0OworfQorCiAvKgogICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCiAgKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KQEAgLTExOSwxMCArMTMxLDcgQEAKIAogaW50IGdldF9waHlzaWNhbF9icm9hZGNhc3Qodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgbHZyLCB2ZXJzaW9uOwotCWx2ciA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JdmVyc2lvbiA9IEdFVF9BUElDX1ZFUlNJT04obHZyKTsKLQlpZiAoIUFQSUNfSU5URUdSQVRFRCh2ZXJzaW9uKSB8fCB2ZXJzaW9uID49IDB4MTQpCisJaWYgKG1vZGVybl9hcGljKCkpCiAJCXJldHVybiAweGZmOwogCWVsc2UKIAkJcmV0dXJuIDB4ZjsKQEAgLTM0OSw5ICszNTgsOSBAQAogCiB2b2lkIF9faW5pdCBzeW5jX0FyYl9JRHModm9pZCkKIHsKLQkvKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMSAqLwotCXVuc2lnbmVkIGludCB2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOwotCWlmICh2ZXIgPj0gMHgxNCkJLyogUDQgb3IgaGlnaGVyICovCisJLyogVW5zdXBwb3J0ZWQgb24gUDQgLSBzZWUgSW50ZWwgRGV2LiBNYW51YWwgVm9sLiAzLCBDaC4gOC42LjEKKwkgICBBbmQgbm90IG5lZWRlZCBvbiBBTUQgKi8KKwlpZiAobW9kZXJuX2FwaWMoKSkKIAkJcmV0dXJuOwogCS8qCiAJICogV2FpdCBmb3IgaWRsZS4KQEAgLTQxNSw2ICs0MjQsNyBAQAogdm9pZCBfX2RldmluaXQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgb2xkdmFsdWUsIHZhbHVlLCB2ZXIsIG1heGx2dDsKKwlpbnQgaSwgajsKIAogCS8qIFBvdW5kIHRoZSBFU1IgcmVhbGx5IGhhcmQgb3ZlciB0aGUgaGVhZCB3aXRoIGEgYmlnIGhhbW1lciAtIG1ibGlnaCAqLwogCWlmIChlc3JfZGlzYWJsZSkgewpAQCAtNDUyLDYgKzQ2MiwyNSBAQAogCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfVEFTS1BSSSwgdmFsdWUpOwogCiAJLyoKKwkgKiBBZnRlciBhIGNyYXNoLCB3ZSBubyBsb25nZXIgc2VydmljZSB0aGUgaW50ZXJydXB0cyBhbmQgYSBwZW5kaW5nCisJICogaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsIG1pZ2h0IHN0aWxsIGhhdmUgSVNSIGJpdCBzZXQuCisJICoKKwkgKiBNb3N0IHByb2JhYmx5IGJ5IG5vdyBDUFUgaGFzIHNlcnZpY2VkIHRoYXQgcGVuZGluZyBpbnRlcnJ1cHQgYW5kCisJICogaXQgbWlnaHQgbm90IGhhdmUgZG9uZSB0aGUgYWNrX0FQSUNfaXJxKCkgYmVjYXVzZSBpdCB0aG91Z2h0LAorCSAqIGludGVycnVwdCBjYW1lIGZyb20gaTgyNTkgYXMgRXh0SW50LiBMQVBJQyBkaWQgbm90IGdldCBFT0kgc28gaXQKKwkgKiBkb2VzIG5vdCBjbGVhciB0aGUgSVNSIGJpdCBhbmQgY3B1IHRoaW5rcyBpdCBoYXMgYWxyZWFkeSBzZXJpdmNlZAorCSAqIHRoZSBpbnRlcnJ1cHQuIEhlbmNlIGEgdmVjdG9yIG1pZ2h0IGdldCBsb2NrZWQuIEl0IHdhcyBub3RpY2VkCisJICogZm9yIHRpbWVyIGlycSAodmVjdG9yIDB4MzEpLiBJc3N1ZSBhbiBleHRyYSBFT0kgdG8gY2xlYXIgSVNSLgorCSAqLworCWZvciAoaSA9IEFQSUNfSVNSX05SIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19JU1IgKyBpKjB4MTApOworCQlmb3IgKGogPSAzMTsgaiA+PSAwOyBqLS0pIHsKKwkJCWlmICh2YWx1ZSAmICgxPDxqKSkKKwkJCQlhY2tfQVBJQ19pcnEoKTsKKwkJfQorCX0KKworCS8qCiAJICogTm93IHRoYXQgd2UgYXJlIGFsbCBzZXQgdXAsIGVuYWJsZSB0aGUgQVBJQwogCSAqLwogCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7CkBAIC03MjgsMTEgKzc1Nyw3IEBACiAJCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19ERUJVRzsKIAllbHNlIGlmIChzdHJjbXAoInZlcmJvc2UiLCBzdHIpID09IDApCiAJCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19WRVJCT1NFOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyBWZXJib3NpdHkgbGV2ZWwgJXMgbm90IHJlY29nbmlzZWQiCi0JCQkJIiB1c2UgYXBpYz12ZXJib3NlIG9yIGFwaWM9ZGVidWdcbiIsIHN0cik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgiYXBpYz0iLCBhcGljX3NldF92ZXJib3NpdHkpOwpAQCAtMTMxNiw2ICsxMzQxLDE0IEBACiAKIAljb25uZWN0X2JzcF9BUElDKCk7CiAKKwkvKgorCSAqIEhhY2s6IEluIGNhc2Ugb2Yga2R1bXAsIGFmdGVyIGEgY3Jhc2gsIGtlcm5lbCBtaWdodCBiZSBib290aW5nCisJICogb24gYSBjcHUgd2l0aCBub24temVybyBsYXBpYyBpZC4gQnV0IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAorCSAqIG1pZ2h0IGJlIHplcm8gaWYgcmVhZCBmcm9tIE1QIHRhYmxlcy4gR2V0IGl0IGZyb20gTEFQSUMuCisJICovCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpOworI2VuZGlmCiAJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKIAogCXNldHVwX2xvY2FsX0FQSUMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCmluZGV4IGRhMzBhMzcuLmRmMGUxNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCWlmIChlcnJvciA9PSBBUE1fTk9UX0VOR0FHRUQgJiYgc3RhdGUgIT0gQVBNX1NUQVRFX1JFQURZKSB7CisJaWYgKGVycm9yID09IEFQTV9OT1RfRU5HQUdFRCkgewogCQlzdGF0aWMgaW50IHRyaWVkOwogCQlpbnQgZW5nX2Vycm9yOwogCQlpZiAodHJpZWQrKyA9PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDA4MTBmODEuLjc4NmQxYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC0yMDcsMTMgKzIwNywxMyBAQAogCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0s3LCBjLT54ODZfY2FwYWJpbGl0eSk7IAogCQlicmVhazsKIAl9CisJaWYgKGMtPng4NiA+PSA2KQorCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLLCBjLT54ODZfY2FwYWJpbGl0eSk7CiAKIAlkaXNwbGF5X2NhY2hlaW5mbyhjKTsKIAogCWlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwOCkgewogCQljLT54ODZfbWF4X2NvcmVzID0gKGNwdWlkX2VjeCgweDgwMDAwMDA4KSAmIDB4ZmYpICsgMTsKLQkJaWYgKGMtPng4Nl9tYXhfY29yZXMgJiAoYy0+eDg2X21heF9jb3JlcyAtIDEpKQotCQkJYy0+eDg2X21heF9jb3JlcyA9IDE7CiAJfQogCiAJaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3KSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggNzEyYTI2Yi4uNzFmZmZhMSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtNDYsNyArNDYsNyBAQAogCiAjZGVmaW5lIFBGWCAicG93ZXJub3ctazg6ICIKICNkZWZpbmUgQkZYIFBGWCAiQklPUyBlcnJvcjogIgotI2RlZmluZSBWRVJTSU9OICJ2ZXJzaW9uIDEuNjAuMSIKKyNkZWZpbmUgVkVSU0lPTiAidmVyc2lvbiAxLjYwLjIiCiAjaW5jbHVkZSAicG93ZXJub3ctazguaCIKIAogLyogc2VyaWFsaXplIGZyZXEgY2hhbmdlcyAgKi8KQEAgLTU1LDcgKzU1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqcG93ZXJub3dfZGF0YVtOUl9DUFVTXTsKIAogI2lmbmRlZiBDT05GSUdfU01QCi1zdGF0aWMgY3B1bWFza190IGNwdV9jb3JlX21hcFsxXSA9IHsgQ1BVX01BU0tfQUxMIH07CitzdGF0aWMgY3B1bWFza190IGNwdV9jb3JlX21hcFsxXTsKICNlbmRpZgogCiAvKiBSZXR1cm4gYSBmcmVxdWVuY3kgaW4gTUh6LCBnaXZlbiBhbiBpbnB1dCBmaWQgKi8KQEAgLTkwNSwxMSArOTA1LDE3IEBACiB7CiAJY3B1bWFza190IG9sZG1hc2sgPSBDUFVfTUFTS19BTEw7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEgPSBwb3dlcm5vd19kYXRhW3BvbC0+Y3B1XTsKLQl1MzIgY2hlY2tmaWQgPSBkYXRhLT5jdXJyZmlkOwotCXUzMiBjaGVja3ZpZCA9IGRhdGEtPmN1cnJ2aWQ7CisJdTMyIGNoZWNrZmlkOworCXUzMiBjaGVja3ZpZDsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGU7CiAJaW50IHJldCA9IC1FSU87CiAKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJY2hlY2tmaWQgPSBkYXRhLT5jdXJyZmlkOworCWNoZWNrdmlkID0gZGF0YS0+Y3VycnZpZDsKKwogCS8qIG9ubHkgcnVuIG9uIHNwZWNpZmljIENQVSBmcm9tIGhlcmUgb24gKi8KIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUocG9sLT5jcHUpKTsKQEAgLTk2OSw2ICs5NzUsOSBAQAogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhID0gcG93ZXJub3dfZGF0YVtwb2wtPmNwdV07CiAKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlKTsKIH0KIApAQCAtOTc3LDcgKzk4Niw3IEBACiB7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7CiAJY3B1bWFza190IG9sZG1hc2sgPSBDUFVfTUFTS19BTEw7Ci0JaW50IHJjLCBpOworCWludCByYzsKIAogCWlmICghY3B1X29ubGluZShwb2wtPmNwdSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTA2Myw4ICsxMDcyLDcgQEAKIAlwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCSAgICAgICBkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9jb3JlX21hcFtwb2wtPmNwdV0pCi0JCXBvd2Vybm93X2RhdGFbaV0gPSBkYXRhOworCXBvd2Vybm93X2RhdGFbcG9sLT5jcHVdID0gZGF0YTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDlkZjg3YjAuLmM4NTQ3YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC02NDIsNyArNjQyLDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IGNhY2hlaW5mb19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IGNhY2hlaW5mb19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IDYxNzBhZjMuLmFmYTA4ODggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKQEAgLTY0LDEzICs2NCwxMyBAQAogc3RhdGljIGludCBfX2luaXQgbWNoZWNrX2Rpc2FibGUoY2hhciAqc3RyKQogewogCW1jZV9kaXNhYmxlZCA9IDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG1jaGVja19lbmFibGUoY2hhciAqc3RyKQogewogCW1jZV9kaXNhYmxlZCA9IC0xOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBfX3NldHVwKCJub21jZSIsIG1jaGVja19kaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCAwMDYxNDFkLi4xZDlhNGFiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHVpZC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjcHVpZF9jbGFzc19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQorc3RhdGljIGludCBjcHVpZF9jbGFzc19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMgYi9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKaW5kZXggZTNjNWZjYTAuLjJiMGNmY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAkgKiBmb3IgdGhlIGRhdGEgSSBwYXNzLCBhbmQgSSBuZWVkIHRhZ3MKIAkgKiBvbiB0aGUgZGF0YSB0byBpbmRpY2F0ZSB3aGF0IGluZm9ybWF0aW9uIEkgaGF2ZQogCSAqIHNxdWlycmVsbGVkIGF3YXkuICBFTEYgbm90ZXMgaGFwcGVuIHRvIHByb3ZpZGUKLQkgKiBhbGwgb2YgdGhhdCB0aGF0IG5vIG5lZWQgdG8gaW52ZW50IHNvbWV0aGluZyBuZXcuCisJICogYWxsIG9mIHRoYXQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW52ZW50IHNvbWV0aGluZyBuZXcuCiAJICovCiAJYnVmID0gKHUzMiopcGVyX2NwdV9wdHIoY3Jhc2hfbm90ZXMsIGNwdSk7CiAJaWYgKCFidWYpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jCmluZGV4IDA1NTMyNTAuLjAzNmE5ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jCkBAIC0xOSw3ICsxOSw2IEBACiBFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfNCk7CiBFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfOCk7CiAKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDNiMzI5YWYuLmQ3MGYyYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCkBAIC02NDQsNyArNjQ0LDcgQEAKIGludCBfX2luaXQgaXJxYmFsYW5jZV9kaXNhYmxlKGNoYXIgKnN0cikKIHsKIAlpcnFiYWxhbmNlX2Rpc2FibGVkID0gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgibm9pcnFiYWxhbmNlIiwgaXJxYmFsYW5jZV9kaXNhYmxlKTsKQEAgLTIyMzgsNiArMjIzOCw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIH0KIAoraW50IHRpbWVyX3VzZXNfaW9hcGljX3Bpbl8wOworCiAvKgogICogVGhpcyBjb2RlIG1heSBsb29rIGEgYml0IHBhcmFub2lkLCBidXQgaXQncyBzdXBwb3NlZCB0byBjb29wZXJhdGUgd2l0aAogICogYSB3aWRlIHJhbmdlIG9mIGJvYXJkcyBhbmQgQklPUyBidWdzLiAgRm9ydHVuYXRlbHkgb25seSB0aGUgdGltZXIgSVJRCkBAIC0yMjc0LDYgKzIyNzYsOSBAQAogCXBpbjIgID0gaW9hcGljX2k4MjU5LnBpbjsKIAlhcGljMiA9IGlvYXBpY19pODI1OS5hcGljOwogCisJaWYgKHBpbjEgPT0gMCkKKwkJdGltZXJfdXNlc19pb2FwaWNfcGluXzAgPSAxOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiLi5USU1FUjogdmVjdG9yPTB4JTAyWCBhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCiAJCXZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYwppbmRleCBmMTk3Njg3Li4zODgwNmY0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYwpAQCAtNDMsNyArNDMsNyBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZV9jdGxibGssIGtwcm9iZV9jdGxibGspOwogCiAvKiBpbnNlcnQgYSBqbXAgY29kZSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNldF9qbXBfb3Aodm9pZCAqZnJvbSwgdm9pZCAqdG8pCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc2V0X2ptcF9vcCh2b2lkICpmcm9tLCB2b2lkICp0bykKIHsKIAlzdHJ1Y3QgX19hcmNoX2ptcF9vcCB7CiAJCWNoYXIgb3A7CkBAIC01Nyw3ICs1Nyw3IEBACiAvKgogICogcmV0dXJucyBub24temVybyBpZiBvcGNvZGVzIGNhbiBiZSBib29zdGVkLgogICovCi1zdGF0aWMgaW5saW5lIGludCBjYW5fYm9vc3Qoa3Byb2JlX29wY29kZV90IG9wY29kZSkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGNhbl9ib29zdChrcHJvYmVfb3Bjb2RlX3Qgb3Bjb2RlKQogewogCXN3aXRjaCAob3Bjb2RlICYgMHhmMCApIHsKIAljYXNlIDB4NzA6CkBAIC04OCw3ICs4OCw3IEBACiAvKgogICogcmV0dXJucyBub24temVybyBpZiBvcGNvZGUgbW9kaWZpZXMgdGhlIGludGVycnVwdCBmbGFnLgogICovCi1zdGF0aWMgaW5saW5lIGludCBpc19JRl9tb2RpZmllcihrcHJvYmVfb3Bjb2RlX3Qgb3Bjb2RlKQorc3RhdGljIGludCBfX2twcm9iZXMgaXNfSUZfbW9kaWZpZXIoa3Byb2JlX29wY29kZV90IG9wY29kZSkKIHsKIAlzd2l0Y2ggKG9wY29kZSkgewogCWNhc2UgMHhmYToJCS8qIGNsaSAqLwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOwogCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJa2NiLT5wcmV2X2twcm9iZS5zYXZlZF9lZmxhZ3MgPSBrY2ItPmtwcm9iZV9zYXZlZF9lZmxhZ3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBrY2ItPnByZXZfa3Byb2JlLmtwOwogCWtjYi0+a3Byb2JlX3N0YXR1cyA9IGtjYi0+cHJldl9rcHJvYmUuc3RhdHVzOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJa2NiLT5rcHJvYmVfc2F2ZWRfZWZsYWdzID0ga2NiLT5wcmV2X2twcm9iZS5zYXZlZF9lZmxhZ3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBwOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCWtjYi0+a3Byb2JlX3NhdmVkX2VmbGFncyAmPSB+SUZfTUFTSzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBwcmVwYXJlX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcmVncy0+ZWZsYWdzIHw9IFRGX01BU0s7CiAJcmVncy0+ZWZsYWdzICY9IH5JRl9NQVNLOwpAQCAtMjQyLDEwICsyNDIsNiBAQAogCQkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX1JFRU5URVI7CiAJCQlyZXR1cm4gMTsKIAkJfSBlbHNlIHsKLQkJCWlmIChyZWdzLT5lZmxhZ3MgJiBWTV9NQVNLKSB7Ci0JCQkvKiBXZSBhcmUgaW4gdmlydHVhbC04MDg2IG1vZGUuIFJldHVybiAwICovCi0JCQkJZ290byBub19rcHJvYmU7Ci0JCQl9CiAJCQlpZiAoKmFkZHIgIT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikgewogCQkJLyogVGhlIGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24gd2FzIHJlbW92ZWQgYnkKIAkJCSAqIGFub3RoZXIgY3B1IHJpZ2h0IGFmdGVyIHdlIGhpdCwgbm8gZnVydGhlcgpAQCAtMjY1LDExICsyNjEsNiBAQAogCiAJcCA9IGdldF9rcHJvYmUoYWRkcik7CiAJaWYgKCFwKSB7Ci0JCWlmIChyZWdzLT5lZmxhZ3MgJiBWTV9NQVNLKSB7Ci0JCQkvKiBXZSBhcmUgaW4gdmlydHVhbC04MDg2IG1vZGUuIFJldHVybiAwICovCi0JCQlnb3RvIG5vX2twcm9iZTsKLQkJfQotCiAJCWlmICgqYWRkciAhPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKSB7CiAJCQkvKgogCQkJICogVGhlIGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24gd2FzIHJlbW92ZWQgcmlnaHQKQEAgLTQ1MiwxMCArNDQzLDExIEBACiAJCSp0b3MgJj0gfihURl9NQVNLIHwgSUZfTUFTSyk7CiAJCSp0b3MgfD0ga2NiLT5rcHJvYmVfb2xkX2VmbGFnczsKIAkJYnJlYWs7Ci0JY2FzZSAweGMzOgkJLyogcmV0L2xyZXQgKi8KLQljYXNlIDB4Y2I6Ci0JY2FzZSAweGMyOgorCWNhc2UgMHhjMjoJCS8qIGlyZXQvcmV0L2xyZXQgKi8KKwljYXNlIDB4YzM6CiAJY2FzZSAweGNhOgorCWNhc2UgMHhjYjoKKwljYXNlIDB4Y2Y6CiAJY2FzZSAweGVhOgkJLyogam1wIGFic29sdXRlIC0tIGVpcCBpcyBjb3JyZWN0ICovCiAJCS8qIGVpcCBpcyBhbHJlYWR5IGFkanVzdGVkLCBubyBtb3JlIGNoYW5nZXMgcmVxdWlyZWQgKi8KIAkJcC0+YWluc24uYm9vc3RhYmxlID0gMTsKQEAgLTQ2MywxMCArNDU1LDEzIEBACiAJY2FzZSAweGU4OgkJLyogY2FsbCByZWxhdGl2ZSAtIEZpeCByZXR1cm4gYWRkciAqLwogCQkqdG9zID0gb3JpZ19laXAgKyAoKnRvcyAtIGNvcHlfZWlwKTsKIAkJYnJlYWs7CisJY2FzZSAweDlhOgkJLyogY2FsbCBhYnNvbHV0ZSAtLSBzYW1lIGFzIGNhbGwgYWJzb2x1dGUsIGluZGlyZWN0ICovCisJCSp0b3MgPSBvcmlnX2VpcCArICgqdG9zIC0gY29weV9laXApOworCQlnb3RvIG5vX2NoYW5nZTsKIAljYXNlIDB4ZmY6CiAJCWlmICgocC0+YWluc24uaW5zblsxXSAmIDB4MzApID09IDB4MTApIHsKLQkJCS8qIGNhbGwgYWJzb2x1dGUsIGluZGlyZWN0ICovCiAJCQkvKgorCQkJICogY2FsbCBhYnNvbHV0ZSwgaW5kaXJlY3QKIAkJCSAqIEZpeCByZXR1cm4gYWRkcjsgZWlwIGlzIGNvcnJlY3QuCiAJCQkgKiBCdXQgdGhpcyBpcyBub3QgYm9vc3RhYmxlCiAJCQkgKi8KQEAgLTUwNyw3ICs1MDIsNyBAQAogICogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgb24gZW50cnkgYXMgdHJhcDEgaXMgYW4gaW50ZXJydXB0IGdhdGUgYW5kIHRoZXkKICAqIHJlbWFpbiBkaXNhYmxlZCB0aG9yb3VnaG91dCB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW5saW5lIGludCBwb3N0X2twcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCBfX2twcm9iZXMgcG9zdF9rcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOwogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOwpAQCAtNTQzLDcgKzUzOCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQorc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCiB7CiAJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMKaW5kZXggOGQ4YWE5ZC4uNmIxMzkyZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTM4LDEyICszOCw2IEBACiBpbnQgc21wX2ZvdW5kX2NvbmZpZzsKIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIG1heGNwdXMgPSBOUl9DUFVTOwogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0jZGVmaW5lIENQVV9IT1RQTFVHX0VOQUJMRUQJKDEpCi0jZWxzZQotI2RlZmluZSBDUFVfSE9UUExVR19FTkFCTEVECSgwKQotI2VuZGlmCi0KIC8qCiAgKiBWYXJpb3VzIExpbnV4LWludGVybmFsIGRhdGEgc3RydWN0dXJlcyBjcmVhdGVkIGZyb20gdGhlCiAgKiBNUC10YWJsZS4KQEAgLTExMCwyMSArMTA0LDYgQEAKIHN0YXRpYyBpbnQgbXBjX3JlY29yZDsgCiBzdGF0aWMgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uX3RhYmxlW01BWF9NUENfRU5UUlldIF9faW5pdGRhdGE7CiAKLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi1zdGF0aWMgaW50IE1QX3ZhbGlkX2FwaWNpZChpbnQgYXBpY2lkLCBpbnQgdmVyc2lvbikKLXsKLQlyZXR1cm4gaHdlaWdodF9sb25nKGFwaWNpZCAmIDB4ZikgPT0gMSAmJiAoYXBpY2lkID4+IDQpICE9IDB4ZjsKLX0KLSNlbHNlCi1zdGF0aWMgaW50IE1QX3ZhbGlkX2FwaWNpZChpbnQgYXBpY2lkLCBpbnQgdmVyc2lvbikKLXsKLQlpZiAodmVyc2lvbiA+PSAweDE0KQotCQlyZXR1cm4gYXBpY2lkIDwgMHhmZjsKLQllbHNlCi0JCXJldHVybiBhcGljaWQgPCAweGY7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgX19kZXZpbml0IE1QX3Byb2Nlc3Nvcl9pbmZvIChzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pCiB7CiAgCWludCB2ZXIsIGFwaWNpZDsKQEAgLTE5MCwxMiArMTY5LDYgQEAKIAogCXZlciA9IG0tPm1wY19hcGljdmVyOwogCi0JaWYgKCFNUF92YWxpZF9hcGljaWQoYXBpY2lkLCB2ZXIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlByb2Nlc3NvciAjJWQgSU5WQUxJRC4gKE1heCBJRDogJWQpLlxuIiwKLQkJCW0tPm1wY19hcGljaWQsIE1BWF9BUElDUyk7Ci0JCXJldHVybjsKLQl9Ci0KIAkvKgogCSAqIFZhbGlkYXRlIHZlcnNpb24KIAkgKi8KQEAgLTIyNSw3ICsxOTgsMTQgQEAKIAljcHVfc2V0KG51bV9wcm9jZXNzb3JzLCBjcHVfcG9zc2libGVfbWFwKTsKIAludW1fcHJvY2Vzc29ycysrOwogCi0JaWYgKENQVV9IT1RQTFVHX0VOQUJMRUQgfHwgKG51bV9wcm9jZXNzb3JzID4gOCkpIHsKKwkvKgorCSAqIFdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3dpdGNoIHRvIGJpZ3NtcCB3aGVuIENPTkZJR19IT1RQTFVHX0NQVT15CisJICogYnV0IHdlIG5lZWQgdG8gd29yayBvdGhlciBkZXBlbmRlbmNpZXMgbGlrZSBTTVBfU1VTUEVORCBldGMKKwkgKiBiZWZvcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IHNvbWUgY29uZnVzaW9uLgorCSAqIGlmIChDUFVfSE9UUExVR19FTkFCTEVEIHx8IG51bV9wcm9jZXNzb3JzID4gOCkKKwkgKiAgICAgICAtIEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4KKwkgKi8KKwlpZiAobnVtX3Byb2Nlc3NvcnMgPiA4KSB7CiAJCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CiAJCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKIAkJCWlmICghQVBJQ19YQVBJQyh2ZXIpKSB7CkBAIC0yNDksNiArMjI5LDEzIEBACiAKIAltcGNfb2VtX2J1c19pbmZvKG0sIHN0ciwgdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0pOwogCisJaWYgKG0tPm1wY19idXNpZCA+PSBNQVhfTVBfQlVTU0VTKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1QIHRhYmxlIGJ1c2lkIHZhbHVlICglZCkgZm9yIGJ1c3R5cGUgJXMgIgorCQkJIiBpcyB0b28gbGFyZ2UsIG1heC4gc3VwcG9ydGVkIGlzICVkXG4iLAorCQkJbS0+bXBjX2J1c2lkLCBzdHIsIE1BWF9NUF9CVVNTRVMgLSAxKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChzdHJuY21wKHN0ciwgQlVTVFlQRV9JU0EsIHNpemVvZihCVVNUWVBFX0lTQSktMSkgPT0gMCkgewogCQltcF9idXNfaWRfdG9fdHlwZVttLT5tcGNfYnVzaWRdID0gTVBfQlVTX0lTQTsKIAl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBCVVNUWVBFX0VJU0EsIHNpemVvZihCVVNUWVBFX0VJU0EpLTEpID09IDApIHsKQEAgLTExNDMsNyArMTEzMCwxNyBAQAogCQkgKi8KIAkJaW50IGlycSA9IGdzaTsKIAkJaWYgKGdzaSA8IE1BWF9HU0lfTlVNKSB7Ci0JCQlpZiAoZ3NpID4gMTUpCisJCQkvKgorCQkJICogUmV0YWluIHRoZSBWSUEgY2hpcHNldCB3b3JrLWFyb3VuZCAoZ3NpID4gMTUpLCBidXQKKwkJCSAqIGF2b2lkIGEgcHJvYmxlbSB3aGVyZSB0aGUgODI1NCB0aW1lciAoSVJRMCkgaXMgc2V0dXAKKwkJCSAqIHZpYSBhbiBvdmVycmlkZSAoc28gaXQncyBub3Qgb24gcGluIDAgb2YgdGhlIGlvYXBpYyksCisJCQkgKiBhbmQgYXQgdGhlIHNhbWUgdGltZSwgdGhlIHBpbiAwIGludGVycnVwdCBpcyBhIFBDSQorCQkJICogdHlwZS4gIFRoZSBnc2kgPiAxNSB0ZXN0IGNvdWxkIGNhdXNlIHRoZXNlIHR3byBwaW5zCisJCQkgKiB0byBiZSBzaGFyZWQgYXMgSVJRMCwgYW5kIHRoZXkgYXJlIG5vdCBzaGFyZWFibGUuCisJCQkgKiBTbyB0ZXN0IGZvciB0aGlzIGNvbmRpdGlvbiwgYW5kIGlmIG5lY2Vzc2FyeSwgYXZvaWQKKwkJCSAqIHRoZSBwaW4gY29sbGlzaW9uLgorCQkJICovCisJCQlpZiAoZ3NpID4gMTUgfHwgKGdzaSA9PSAwICYmICF0aW1lcl91c2VzX2lvYXBpY19waW5fMCkpCiAJCQkJZ3NpID0gcGNpX2lycSsrOwogCQkJLyoKIAkJCSAqIERvbid0IGFzc2lnbiBJUlEgdXNlZCBieSBBQ1BJIFNDSQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMKaW5kZXggMWQwYTU1ZS4uN2EzMjgyMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL2kzODYva2VybmVsL21zci5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtc3JfY2xhc3NfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3N0YXRpYyBpbnQgbXNyX2NsYXNzX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMjRiM2U3NC4uNjI1OWFmZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTc4MSw3ICs3ODEsNiBAQAogCX0gd2hpbGUgKGNvdW50KysgPCAxNik7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGdldF93Y2hhbik7CiAKIC8qCiAgKiBzeXNfYWxsb2NfdGhyZWFkX2FyZWE6IGdldCBhIHlldCB1bnVzZWQgVExTIGRlc2NyaXB0b3IgaW5kZXguCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCA1MDY0NjJlLi5mZDdlYWY3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTY3MSw3ICs2NzEsNyBAQAogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKSB7CiAJCWlmIChlbnRyeWV4aXQpCi0JCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgQVVESVRTQ19SRVNVTFQocmVncy0+ZWF4KSwKKwkJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5lYXgpLAogCQkJCQkJcmVncy0+ZWF4KTsKIAkJLyogRGVidWcgdHJhcHMsIHdoZW4gdXNpbmcgUFRSQUNFX1NJTkdMRVNURVAsIG11c3QgYmUgc2VudCBvbmx5CiAJCSAqIG9uIHRoZSBzeXNjYWxsIGV4aXQgcGF0aC4gTm9ybWFsbHksIHdoZW4gVElGX1NZU0NBTExfQVVESVQgaXMKQEAgLTcyMCwxNCArNzIwLDEzIEBACiAJcmV0ID0gaXNfc3lzZW11Owogb3V0OgogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhZW50cnlleGl0KQotCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsIEFVRElUX0FSQ0hfSTM4NiwgcmVncy0+b3JpZ19lYXgsCisJCWF1ZGl0X3N5c2NhbGxfZW50cnkoQVVESVRfQVJDSF9JMzg2LCByZWdzLT5vcmlnX2VheCwKIAkJCQkgICAgcmVncy0+ZWJ4LCByZWdzLT5lY3gsIHJlZ3MtPmVkeCwgcmVncy0+ZXNpKTsKIAlpZiAocmV0ID09IDApCiAJCXJldHVybiAwOwogCiAJcmVncy0+b3JpZ19lYXggPSAtMTsgLyogZm9yY2Ugc2tpcCBvZiBzeXNjYWxsIHJlc3RhcnRpbmcgKi8KIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLT5lYXgpLAotCQkJCXJlZ3MtPmVheCk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5lYXgpLCByZWdzLT5lYXgpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYwppbmRleCAxMGUyMWE0Li45OWFhYjQxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYworKysgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYwpAQCAtNTEsNyArNTEsNSBAQAogCiAJCWN1ci0+cmVib290X2ZpeHVwKGRldik7CiAJfQotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gcmVib290IGZpeHVwIGZvdW5kIGZvciB5b3VyIGhhcmR3YXJlXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDhjMDg2NjAuLmRkNmIwZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvbWNhLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KQEAgLTk2Miw2ICs5NjMsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAorIC8qCisgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGVudGlyZSByYW5nZSA8c3RhcnQsZW5kPiBpcyBtYXBwZWQgd2l0aCB0eXBlLgorICAqCisgICogTm90ZTogdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGNvcnJlY3QgaWYgdGhlIGU4MjAgdGFibGUgaXMgc29ydGVkIGFuZAorICAqIG5vdC1vdmVybGFwcGluZywgd2hpY2ggaXMgdGhlIGNhc2UKKyAgKi8KK2ludCBfX2luaXQKK2U4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHMsIHVuc2lnbmVkIGxvbmcgZSwgdW5zaWduZWQgdHlwZSkKK3sKKwl1NjQgc3RhcnQgPSBzOworCXU2NCBlbmQgPSBlOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CisJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjAubWFwW2ldOworCQlpZiAodHlwZSAmJiBlaS0+dHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisJCS8qIGlzIHRoZSByZWdpb24gKHBhcnQpIGluIG92ZXJsYXAgd2l0aCB0aGUgY3VycmVudCByZWdpb24gPyovCisJCWlmIChlaS0+YWRkciA+PSBlbmQgfHwgZWktPmFkZHIgKyBlaS0+c2l6ZSA8PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCQkvKiBpZiB0aGUgcmVnaW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgPHN0YXJ0LGVuZD4gd2UgbW92ZQorCQkgKiBzdGFydCB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24gc2luY2UgaXQncyBvayB1bnRpbCB0aGVyZQorCQkgKi8KKwkJaWYgKGVpLT5hZGRyIDw9IHN0YXJ0KQorCQkJc3RhcnQgPSBlaS0+YWRkciArIGVpLT5zaXplOworCQkvKiBpZiBzdGFydCBpcyBub3cgYXQgb3IgYmV5b25kIGVuZCwgd2UncmUgZG9uZSwgZnVsbAorCQkgKiBjb3ZlcmFnZSAqLworCQlpZiAoc3RhcnQgPj0gZW5kKQorCQkJcmV0dXJuIDE7IC8qIHdlJ3JlIGRvbmUgKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBGaW5kIHRoZSBoaWdoZXN0IHBhZ2UgZnJhbWUgbnVtYmVyIHdlIGhhdmUgYXZhaWxhYmxlCiAgKi8KQEAgLTEyODcsNiArMTMyMCw4IEBACiAJcHJvYmVfcm9tcygpOwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCQlpZiAoZTgyMC5tYXBbaV0uYWRkciArIGU4MjAubWFwW2ldLnNpemUgPiAweDEwMDAwMDAwMFVMTCkKKwkJCWNvbnRpbnVlOwogCQlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfQVRPTUlDKTsKIAkJc3dpdGNoIChlODIwLm1hcFtpXS50eXBlKSB7CiAJCWNhc2UgRTgyMF9SQU06CXJlcy0+bmFtZSA9ICJTeXN0ZW0gUkFNIjsgYnJlYWs7CkBAIC0xMzE2LDggKzEzNTEsOCBAQAogLyoKICAqIFJlcXVlc3QgYWRkcmVzcyBzcGFjZSBmb3IgYWxsIHN0YW5kYXJkIHJlc291cmNlcwogICoKLSAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHBjaWJpb3NfYXNzaWduX3Jlc291cmNlcygpLCB3aGljaCBpcyBhbHNvCi0gKiBhbiBmc19pbml0Y2FsbCwgYnV0IGlzIGxpbmtlZCBpbiBsYXRlciAoaW4gYXJjaC9pMzg2L3BjaS9pMzg2LmMpLgorICogVGhpcyBpcyBjYWxsZWQganVzdCBiZWZvcmUgcGNpYmlvc19pbml0KCksIHdoaWNoIGlzIGFsc28gYQorICogc3Vic3lzX2luaXRjYWxsLCBidXQgaXMgbGlua2VkIGluIGxhdGVyIChpbiBhcmNoL2kzODYvcGNpL2NvbW1vbi5jKS4KICAqLwogc3RhdGljIGludCBfX2luaXQgcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXModm9pZCkKIHsKQEAgLTEzMzgsNyArMTM3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWZzX2luaXRjYWxsKHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKTsKK3N1YnN5c19pbml0Y2FsbChyZXF1ZXN0X3N0YW5kYXJkX3Jlc291cmNlcyk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZWdpc3Rlcl9tZW1vcnkodm9pZCkKIHsKQEAgLTE1MTIsMTUgKzE1NDcsMTggQEAKIAlpZiAoZWZpX2VuYWJsZWQpCiAJCWVmaV9tYXBfbWVtbWFwKCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQljaGVja19hY3BpX3BjaSgpOwkvKiBDaGVja3MgbW9yZSB0aGFuIGp1c3QgQUNQSSBhY3R1YWxseSAqLwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQUNQSQogCS8qCiAJICogUGFyc2UgdGhlIEFDUEkgdGFibGVzIGZvciBwb3NzaWJsZSBib290LXRpbWUgU01QIGNvbmZpZ3VyYXRpb24uCiAJICovCiAJYWNwaV9ib290X3RhYmxlX2luaXQoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJY2hlY2tfYWNwaV9wY2koKTsJLyogQ2hlY2tzIG1vcmUgdGhhbiBqdXN0IEFDUEkgYWN0dWFsbHkgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FDUEkKIAlhY3BpX2Jvb3RfaW5pdCgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19YODZfUEMpCkBAIC0xNTQ3LDYgKzE1ODUsMjMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgX19pbml0IGludCBhZGRfcGNzcGtyKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldDsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwY3Nwa3IiLCAtMSk7CisJaWYgKCFwZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKKworCXJldHVybiByZXQ7Cit9CitkZXZpY2VfaW5pdGNhbGwoYWRkX3Bjc3Brcik7CisKICNpbmNsdWRlICJzZXR1cF9hcmNoX3Bvc3QuaCIKIC8qCiAgKiBMb2NhbCBWYXJpYWJsZXM6CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGE2OTY5OTAuLjgyNWIyYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0zMTMsNyArMzEzLDkgQEAKIAkJCWlmICh0c2NfdmFsdWVzW2ldIDwgYXZnKQogCQkJCXJlYWxkZWx0YSA9IC1yZWFsZGVsdGE7CiAKLQkJCXByaW50ayhLRVJOX0lORk8gIkNQVSMlZCBoYWQgJWxkIHVzZWNzIFRTQyBza2V3LCBmaXhlZCBpdCB1cC5cbiIsIGksIHJlYWxkZWx0YSk7CisJCQlpZiAocmVhbGRlbHRhID4gMCkKKwkJCQlwcmludGsoS0VSTl9JTkZPICJDUFUjJWQgaGFkICVsZCB1c2VjcyBUU0MgIgorCQkJCQkic2tldywgZml4ZWQgaXQgdXAuXG4iLCBpLCByZWFsZGVsdGEpOwogCQl9CiAKIAkJc3VtICs9IGRlbHRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCBjZTNlZjRmLi5hZjU2OTg3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtMzEzLDMgKzMxMyw2IEBACiAJLmxvbmcgc3lzX3NldF9yb2J1c3RfbGlzdAogCS5sb25nIHN5c19nZXRfcm9idXN0X2xpc3QKIAkubG9uZyBzeXNfc3BsaWNlCisJLmxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZQorCS5sb25nIHN5c190ZWUJCQkvKiAzMTUgKi8KKwkubG9uZyBzeXNfdm1zcGxpY2UKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfdHNjLmMKaW5kZXggNWU0MWVlMi4uZjExODdkZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfdHNjLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfdHNjLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKIAotCWlmICh2YWwgIT0gQ1BVRlJFUV9SRVNVTUVDSEFOR0UpCisJaWYgKHZhbCAhPSBDUFVGUkVRX1JFU1VNRUNIQU5HRSAmJiB2YWwgIT0gQ1BVRlJFUV9TVVNQRU5EQ0hBTkdFKQogCQl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CiAJaWYgKCFyZWZfZnJlcSkgewogCQlpZiAoIWZyZXEtPm9sZCl7CkBAIC0zMTIsNyArMzEyLDcgQEAKIAl9CiAKIGVuZDoKLQlpZiAodmFsICE9IENQVUZSRVFfUkVTVU1FQ0hBTkdFKQorCWlmICh2YWwgIT0gQ1BVRlJFUV9SRVNVTUVDSEFOR0UgJiYgdmFsICE9IENQVUZSRVFfU1VTUEVORENIQU5HRSkKIAkJd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCA2YjYzYTVhLi4wZTQ5ODM2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCkBAIC0xMzAsOSArMTMwLDggQEAKIAlwcmludF9zeW1ib2woIiVzIiwgYWRkcik7CiAKIAlwcmludGVkID0gKHByaW50ZWQgKyAxKSAlIENPTkZJR19TVEFDS19CQUNLVFJBQ0VfQ09MUzsKLQogCWlmIChwcmludGVkKQotCQlwcmludGsoIiAgIik7CisJCXByaW50aygiICIpOwogCWVsc2UKIAkJcHJpbnRrKCJcbiIpOwogCkBAIC0yMTIsNyArMjExLDYgQEAKIAl9CiAKIAlzdGFjayA9IGVzcDsKLQlwcmludGsobG9nX2x2bCk7CiAJZm9yKGkgPSAwOyBpIDwga3N0YWNrX2RlcHRoX3RvX3ByaW50OyBpKyspIHsKIAkJaWYgKGtzdGFja19lbmQoc3RhY2spKQogCQkJYnJlYWs7CkBAIC0zNjUsNiArMzYzLDkgQEAKIAogCWlmICgrK2RpZS5sb2NrX293bmVyX2RlcHRoIDwgMykgewogCQlpbnQgbmwgPSAwOworCQl1bnNpZ25lZCBsb25nIGVzcDsKKwkJdW5zaWduZWQgc2hvcnQgc3M7CisKIAkJaGFuZGxlX0JVRyhyZWdzKTsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiAlMDRseCBbIyVkXVxuIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllX2NvdW50ZXIpOwogI2lmZGVmIENPTkZJR19QUkVFTVBUCkBAIC0zODcsOCArMzg4LDE5IEBACiAJCQlwcmludGsoIlxuIik7CiAJCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwKIAkJCQkJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpICE9Ci0JCQkJTk9USUZZX1NUT1ApCisJCQkJTk9USUZZX1NUT1ApIHsKIAkJCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOworCQkJLyogRXhlY3V0aXZlIHN1bW1hcnkgaW4gY2FzZSB0aGUgb29wcyBzY3JvbGxlZCBhd2F5ICovCisJCQllc3AgPSAodW5zaWduZWQgbG9uZykgKCZyZWdzLT5lc3ApOworCQkJc2F2ZXNlZ21lbnQoc3MsIHNzKTsKKwkJCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJCQllc3AgPSByZWdzLT5lc3A7CisJCQkJc3MgPSByZWdzLT54c3MgJiAweGZmZmY7CisJCQl9CisJCQlwcmludGsoS0VSTl9FTUVSRyAiRUlQOiBbPCUwOGx4Pl0gIiwgcmVncy0+ZWlwKTsKKwkJCXByaW50X3N5bWJvbCgiJXMiLCByZWdzLT5laXApOworCQkJcHJpbnRrKCIgU1M6RVNQICUwNHg6JTA4bHhcbiIsIHNzLCBlc3ApOworCQl9CiAJCWVsc2UKIAkJCXJlZ3MgPSBOVUxMOwogICAJfSBlbHNlCkBAIC0xMTkzLDYgKzEyMDUsNiBAQAogc3RhdGljIGludCBfX2luaXQga3N0YWNrX3NldHVwKGNoYXIgKnMpCiB7CiAJa3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJrc3RhY2s9Iiwga3N0YWNrX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdm04Ni5jIGIvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKaW5kZXggYWVlMTRmYS4uMDBlMDExOCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCiAJLypjYWxsIGF1ZGl0X3N5c2NhbGxfZXhpdCBzaW5jZSB3ZSBkbyBub3QgZXhpdCB2aWEgdGhlIG5vcm1hbCBwYXRocyAqLwogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKLQkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIEFVRElUU0NfUkVTVUxUKGVheCksIGVheCk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChlYXgpLCBlYXgpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJtb3ZsICUwLCUlZXNwXG5cdCIKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdnN5c2NhbGwtc2lncmV0dXJuLlMgYi9hcmNoL2kzODYva2VybmVsL3ZzeXNjYWxsLXNpZ3JldHVybi5TCmluZGV4IGZhZGI1YmMuLmE5MjI2MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdnN5c2NhbGwtc2lncmV0dXJuLlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92c3lzY2FsbC1zaWdyZXR1cm4uUwpAQCAtNDQsNyArNDQsNyBAQAogLkxTVEFSVENJRURMU0kxOgogCS5sb25nIDAJCQkvKiBDSUUgSUQgKi8KIAkuYnl0ZSAxCQkJLyogVmVyc2lvbiBudW1iZXIgKi8KLQkuc3RyaW5nICJ6UiIJCS8qIE5VTC10ZXJtaW5hdGVkIGF1Z21lbnRhdGlvbiBzdHJpbmcgKi8KKwkuc3RyaW5nICJ6UlMiCQkvKiBOVUwtdGVybWluYXRlZCBhdWdtZW50YXRpb24gc3RyaW5nICovCiAJLnVsZWIxMjggMQkJLyogQ29kZSBhbGlnbm1lbnQgZmFjdG9yICovCiAJLnNsZWIxMjggLTQJCS8qIERhdGEgYWxpZ25tZW50IGZhY3RvciAqLwogCS5ieXRlIDgJCQkvKiBSZXR1cm4gYWRkcmVzcyByZWdpc3RlciBjb2x1bW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYwppbmRleCBjZWE1YjNjLi5kNTVmYTdiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL3Byb2JlLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jCkBAIC05Myw5ICs5MywxMSBAQAogCWludCBpOwogCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07ICsraSkgeyAKIAkJaWYgKGFwaWNfcHJvYmVbaV0tPm1wc19vZW1fY2hlY2sobXBjLG9lbSxwcm9kdWN0aWQpKSB7IAotCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07Ci0JCQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBBUElDIGRyaXZlciBgJXMnLlxuIiwgCi0JCQkgICAgICAgZ2VuYXBpYy0+bmFtZSk7CisJCQlpZiAoIWNtZGxpbmVfYXBpYykgeworCQkJCWdlbmFwaWMgPSBhcGljX3Byb2JlW2ldOworCQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLAorCQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKKwkJCX0KIAkJCXJldHVybiAxOwogCQl9IAogCX0gCkBAIC0xMDcsOSArMTA5LDExIEBACiAJaW50IGk7CiAJZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgKytpKSB7IAogCQlpZiAoYXBpY19wcm9iZVtpXS0+YWNwaV9tYWR0X29lbV9jaGVjayhvZW1faWQsIG9lbV90YWJsZV9pZCkpIHsgCi0JCQlnZW5hcGljID0gYXBpY19wcm9iZVtpXTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLCAKLQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKKwkJCWlmICghY21kbGluZV9hcGljKSB7CisJCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gQVBJQyBkcml2ZXIgYCVzJy5cbiIsCisJCQkJICAgICAgIGdlbmFwaWMtPm5hbWUpOworCQkJfQogCQkJcmV0dXJuIDE7CiAJCX0gCiAJfSAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYwppbmRleCAyMzk2N2ZlLi4xMGQyMWRmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jCkBAIC0xMDYsMTUgKzEwNiwyMCBAQAogCiAvKiB0aGUgSS9PIHBvcnQgYXNzaWdubWVudHMgZm9yIHRoZSBWSUMgYW5kIFFJQyAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2aWNfcmVzID0gewotCSJWb3lhZ2VyIEludGVycnVwdCBDb250cm9sbGVyIiwgMHhGQzAwLCAweEZDNkYgfTsKKwkubmFtZQk9ICJWb3lhZ2VyIEludGVycnVwdCBDb250cm9sbGVyIiwKKwkuc3RhcnQJPSAweEZDMDAsCisJLmVuZAk9IDB4RkM2RgorfTsKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcWljX3JlcyA9IHsKLQkiUXVhZCBJbnRlcnJ1cHQgQ29udHJvbGxlciIsIDB4RkM3MCwgMHhGQ0ZGIH07CisJLm5hbWUJPSAiUXVhZCBJbnRlcnJ1cHQgQ29udHJvbGxlciIsCisJLnN0YXJ0CT0gMHhGQzcwLAorCS5lbmQJPSAweEZDRkYKK307CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYWNrIGEgZGF0YSBiaXQgc3RyZWFtIGluc2lkZSBhIG1lc3NhZ2UuCiAgKiBJdCB3cml0ZXMgbnVtX2JpdHMgb2YgdGhlIGRhdGEgYnVmZmVyIGluIG1zZyBzdGFydGluZyBhdCBzdGFydF9iaXQuCiAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhbnkgdW51c2VkIGJpdCBpbiB0aGUgZGF0YSBzdHJlYW0KICAqIGlzIHNldCB0byB6ZXJvIHNvIHRoYXQgdGhlIG9ycyB3aWxsIHdvcmsgY29ycmVjdGx5ICovCi0jZGVmaW5lIEJJVFNfUEVSX0JZVEUgOAogc3RhdGljIHZvaWQKIGNhdF9wYWNrKF9fdTggKm1zZywgY29uc3QgX191MTYgc3RhcnRfYml0LCBfX3U4ICpkYXRhLCBjb25zdCBfX3UxNiBudW1fYml0cykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9pbml0LmMgYi9hcmNoL2kzODYvbW0vaW5pdC5jCmluZGV4IDlmNjZhYzUuLjNkZjEzNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC9pMzg2L21tL2luaXQuYwpAQCAtNjUxLDYgKzY1MSw3IEBACiAgKiBTcGVjaWZpY2FsbHksIGluIHRoZSBjYXNlIG9mIHg4Niwgd2Ugd2lsbCBhbHdheXMgYWRkCiAgKiBtZW1vcnkgdG8gdGhlIGhpZ2htZW0gZm9yIG5vdy4KICAqLworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogaW50IGFkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKQEAgLTY2Nyw2ICs2NjgsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogI2VuZGlmCisjZW5kaWYKIAoga21lbV9jYWNoZV90ICpwZ2RfY2FjaGU7CiBrbWVtX2NhY2hlX3QgKnBtZF9jYWNoZTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IDFhMjA3NmMuLmVjMGZkM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMKKysrIGIvYXJjaC9pMzg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtMzMyLDEwICszMzIsMTEgQEAKIHsKIAlfX3U4IGNwdV9tb2RlbCA9IGJvb3RfY3B1X2RhdGEueDg2X21vZGVsOwogCi0JaWYgKGNwdV9tb2RlbCA+IDB4ZCkKKwlpZiAoY3B1X21vZGVsID09IDE0KQorCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlIjsKKwllbHNlIGlmIChjcHVfbW9kZWwgPiAweGQpCiAJCXJldHVybiAwOwotCi0JaWYgKGNwdV9tb2RlbCA9PSA5KSB7CisJZWxzZSBpZiAoY3B1X21vZGVsID09IDkpIHsKIAkJKmNwdV90eXBlID0gImkzODYvcDZfbW9iaWxlIjsKIAl9IGVsc2UgaWYgKGNwdV9tb2RlbCA+IDUpIHsKIAkJKmNwdV90eXBlID0gImkzODYvcGlpaSI7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2RpcmVjdC5jIGIvYXJjaC9pMzg2L3BjaS9kaXJlY3QuYwppbmRleCA5OTAxMmI5Li41ZDgxZmI1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2RpcmVjdC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvZGlyZWN0LmMKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKIC8qCkBAIC0xOCw4ICsxOSwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIXZhbHVlIHx8IChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpCisJaWYgKChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpIHsKKwkJKnZhbHVlID0gLTE7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2lfY29uZmlnX2xvY2ssIGZsYWdzKTsKIApAQCAtOTEsOCArOTQsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBkZXYsIGZuOwogCi0JaWYgKCF2YWx1ZSB8fCAoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiAyNTUpKQorCWlmICgoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiAyNTUpKSB7CisJCSp2YWx1ZSA9IC0xOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlkZXYgPSBQQ0lfU0xPVChkZXZmbik7CiAJZm4gPSBQQ0lfRlVOQyhkZXZmbik7CkBAIC0xODgsNiArMTkzLDEwIEBACiAKIAlpZiAocGNpX3Byb2JlICYgUENJX05PX0NIRUNLUykKIAkJcmV0dXJuIDE7CisJLyogQXNzdW1lIFR5cGUgMSB3b3JrcyBmb3IgbmV3ZXIgc3lzdGVtcy4KKwkgICBUaGlzIGhhbmRsZXMgbWFjaGluZXMgdGhhdCBkb24ndCBoYXZlIGFueXRoaW5nIG9uIFBDSSBCdXMgMC4gKi8KKwlpZiAoZG1pX2dldF95ZWFyKERNSV9CSU9TX0RBVEUpID49IDIwMDEpCisJCXJldHVybiAxOwogCiAJZm9yIChkZXZmbiA9IDA7IGRldmZuIDwgMHgxMDA7IGRldmZuKyspIHsKIAkJaWYgKG8tPnJlYWQoMCwgMCwgZGV2Zm4sIFBDSV9DTEFTU19ERVZJQ0UsIDIsICZ4KSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMgYi9hcmNoL2kzODYvcGNpL2lycS5jCmluZGV4IDNjYTU5Y2EuLjA2ZGFiMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9pcnEuYwpAQCAtNTg4LDcgKzU4OCw5IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTY6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODY6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMxOgorCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODIzM0E6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM1OgorCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODIzNzoKIAkJLyogRklYTUU6IGFkZCBuZXcgb25lcyBmb3IgODIzMy81ICovCiAJCXItPm5hbWUgPSAiVklBIjsKIAkJci0+Z2V0ID0gcGlycV92aWFfZ2V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jIGIvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCmluZGV4IDYxMzc4OTAuLjZiMWVhMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYworKysgYi9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKQEAgLTEyLDE0ICsxMiwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlICJwY2kuaCIKIAorI2RlZmluZSBNTUNPTkZJR19BUEVSX1NJWkUgKDI1NioxMDI0KjEwMjQpCisKKy8qIEFzc3VtZSBzeXN0ZW1zIHdpdGggbW9yZSBidXNzZXMgaGF2ZSBjb3JyZWN0IE1DRkcgKi8KKyNkZWZpbmUgTUFYX0NIRUNLX0JVUyAxNgorCiAjZGVmaW5lIG1tY2ZnX3ZpcnRfYWRkciAoKHZvaWQgX19pb21lbSAqKSBmaXhfdG9fdmlydChGSVhfUENJRV9NQ0ZHKSkKIAogLyogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbGFzdCBNTUNPTkZJRyBkZXZpY2UgYWNjZXNzZWQgKi8KIHN0YXRpYyB1MzIgbW1jZmdfbGFzdF9hY2Nlc3NlZF9kZXZpY2U7CiAKLXN0YXRpYyBERUNMQVJFX0JJVE1BUChmYWxsYmFja19zbG90cywgMzIpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCBNQVhfQ0hFQ0tfQlVTKjMyKTsKIAogLyoKICAqIEZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHdpdGggTU1DT05GSUcgYWNjZXNzZXMKQEAgLTI5LDggKzM1LDggQEAKIAlpbnQgY2ZnX251bSA9IC0xOwogCXN0cnVjdCBhY3BpX3RhYmxlX21jZmdfY29uZmlnICpjZmc7CiAKLQlpZiAoc2VnID09IDAgJiYgYnVzID09IDAgJiYKLQkgICAgdGVzdF9iaXQoUENJX1NMT1QoZGV2Zm4pLCBmYWxsYmFja19zbG90cykpCisJaWYgKHNlZyA9PSAwICYmIGJ1cyA8IE1BWF9DSEVDS19CVVMgJiYKKwkgICAgdGVzdF9iaXQoUENJX1NMT1QoZGV2Zm4pICsgMzIqYnVzLCBmYWxsYmFja19zbG90cykpCiAJCXJldHVybiAwOwogCiAJd2hpbGUgKDEpIHsKQEAgLTc0LDggKzgwLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgYmFzZTsKIAotCWlmICghdmFsdWUgfHwgKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gNDA5NSkpCisJaWYgKChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDQwOTUpKSB7CisJCSp2YWx1ZSA9IC0xOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAliYXNlID0gZ2V0X2Jhc2VfYWRkcihzZWcsIGJ1cywgZGV2Zm4pOwogCWlmICghYmFzZSkKQEAgLTE0NiwyOSArMTU0LDM0IEBACiAgICBOb3JtYWxseSB0aGlzIGNhbiBiZSBleHByZXNzZWQgaW4gdGhlIE1DRkcgYnkgbm90IGxpc3RpbmcgdGhlbQogICAgYW5kIGFzc2lnbmluZyBzdWl0YWJsZSBfU0VHcywgYnV0IHRoaXMgaXNuJ3QgaW1wbGVtZW50ZWQgaW4gc29tZSBCSU9TLgogICAgSW5zdGVhZCB0cnkgdG8gZGlzY292ZXIgYWxsIGRldmljZXMgb24gYnVzIDAgdGhhdCBhcmUgdW5yZWFjaGFibGUgdXNpbmcgTU0KLSAgIGFuZCBmYWxsYmFjayBmb3IgdGhlbS4KLSAgIFdlIG9ubHkgZG8gdGhpcyBmb3IgYnVzIDAvc2VnIDAgKi8KKyAgIGFuZCBmYWxsYmFjayBmb3IgdGhlbS4gKi8KIHN0YXRpYyBfX2luaXQgdm9pZCB1bnJlYWNoYWJsZV9kZXZpY2VzKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIGs7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiB2YWwxOwotCQl1MzIgYWRkcjsKKwlmb3IgKGsgPSAwOyBrIDwgTUFYX0NIRUNLX0JVUzsgaysrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQl1MzIgdmFsMTsKKwkJCXUzMiBhZGRyOwogCi0JCXBjaV9jb25mMV9yZWFkKDAsIDAsIFBDSV9ERVZGTihpLCAwKSwgMCwgNCwgJnZhbDEpOwotCQlpZiAodmFsMSA9PSAweGZmZmZmZmZmKQotCQkJY29udGludWU7CisJCQlwY2lfY29uZjFfcmVhZCgwLCBrLCBQQ0lfREVWRk4oaSwgMCksIDAsIDQsICZ2YWwxKTsKKwkJCWlmICh2YWwxID09IDB4ZmZmZmZmZmYpCisJCQkJY29udGludWU7CiAKLQkJLyogTG9ja2luZyBwcm9iYWJseSBub3QgbmVlZGVkLCBidXQgc2FmZXIgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOwotCQlhZGRyID0gZ2V0X2Jhc2VfYWRkcigwLCAwLCBQQ0lfREVWRk4oaSwgMCkpOwotCQlpZiAoYWRkciAhPSAwKQotCQkJcGNpX2V4cF9zZXRfZGV2X2Jhc2UoYWRkciwgMCwgUENJX0RFVkZOKGksIDApKTsKLQkJaWYgKGFkZHIgPT0gMCB8fCByZWFkbCgodTMyIF9faW9tZW0gKiltbWNmZ192aXJ0X2FkZHIpICE9IHZhbDEpCi0JCQlzZXRfYml0KGksIGZhbGxiYWNrX3Nsb3RzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7CisJCQkvKiBMb2NraW5nIHByb2JhYmx5IG5vdCBuZWVkZWQsIGJ1dCBzYWZlciAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOworCQkJYWRkciA9IGdldF9iYXNlX2FkZHIoMCwgaywgUENJX0RFVkZOKGksIDApKTsKKwkJCWlmIChhZGRyICE9IDApCisJCQkJcGNpX2V4cF9zZXRfZGV2X2Jhc2UoYWRkciwgaywgUENJX0RFVkZOKGksIDApKTsKKwkJCWlmIChhZGRyID09IDAgfHwKKwkJCSAgICByZWFkbCgodTMyIF9faW9tZW0gKiltbWNmZ192aXJ0X2FkZHIpICE9IHZhbDEpIHsKKwkJCQlzZXRfYml0KGksIGZhbGxiYWNrX3Nsb3RzKTsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJQQ0k6IE5vIG1tY29uZmlnIHBvc3NpYmxlIG9uICV4OiV4XG4iLCBrLCBpKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOworCQl9CiAJfQogfQogCkBAIC0xODMsNiArMTk2LDE0IEBACiAJICAgIChwY2lfbW1jZmdfY29uZmlnWzBdLmJhc2VfYWRkcmVzcyA9PSAwKSkKIAkJcmV0dXJuOwogCisJaWYgKCFlODIwX2FsbF9tYXBwZWQocGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MsCisJCQlwY2lfbW1jZmdfY29uZmlnWzBdLmJhc2VfYWRkcmVzcyArIE1NQ09ORklHX0FQRVJfU0laRSwKKwkJCUU4MjBfUkVTRVJWRUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBCSU9TIEJ1ZzogTUNGRyBhcmVhIGlzIG5vdCBFODIwLXJlc2VydmVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IE5vdCB1c2luZyBNTUNPTkZJRy5cbiIpOworCQlyZXR1cm47CisJfQorCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBVc2luZyBNTUNPTkZJR1xuIik7CiAJcmF3X3BjaV9vcHMgPSAmcGNpX21tY2ZnOwogCXBjaV9wcm9iZSA9IChwY2lfcHJvYmUgJiB+UENJX1BST0JFX01BU0spIHwgUENJX1BST0JFX01NQ09ORjsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wb3dlci9jcHUuYyBiL2FyY2gvaTM4Ni9wb3dlci9jcHUuYwppbmRleCA1MGEwYmVmLi43OWIyMzcwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcG93ZXIvY3B1LmMKKysrIGIvYXJjaC9pMzg2L3Bvd2VyL2NwdS5jCkBAIC05Miw3ICs5Miw3IEBACiAJd3JpdGVfY3I0KGN0eHQtPmNyNCk7CiAJd3JpdGVfY3IzKGN0eHQtPmNyMyk7CiAJd3JpdGVfY3IyKGN0eHQtPmNyMik7Ci0Jd3JpdGVfY3IyKGN0eHQtPmNyMCk7CisJd3JpdGVfY3IwKGN0eHQtPmNyMCk7CiAKIAkvKgogCSAqIG5vdyByZXN0b3JlIHRoZSBkZXNjcmlwdG9yIHRhYmxlcyB0byB0aGVpciBwcm9wZXIgdmFsdWVzCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IGVkZmZlMjUuLmYwMjUyZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC03Nyw2ICs3Nyw3IEBACiBjb25maWcgSUE2NF9HRU5FUklDCiAJYm9vbCAiZ2VuZXJpYyIKIAlzZWxlY3QgQUNQSQorCXNlbGVjdCBQQ0kKIAlzZWxlY3QgTlVNQQogCXNlbGVjdCBBQ1BJX05VTUEKIAloZWxwCkBAIC0yNjAsMTUgKzI2MSw2IEBACiAJICB0aGFuIDY0IHdpbGwgY2F1c2UgdGhlIHVzZSBvZiBhIENQVSBtYXNrIGFycmF5LCBjYXVzaW5nIGEgc21hbGwKIAkgIHBlcmZvcm1hbmNlIGhpdC4KIAotY29uZmlnIElBNjRfTlJfTk9ERVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIE5PREVzICgyNTYtMTAyNCkiIGlmIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDKQotCXJhbmdlIDI1NiAxMDI0Ci0JZGVwZW5kcyBvbiBJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDCi0JZGVmYXVsdCAiMjU2IgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW4geW91ciBTU0kgc3lzdGVtLgotCSAgSWYgaW4gZG91YnQsIHVzZSB0aGUgZGVmYXVsdC4KLQogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU01QICYmIEVYUEVSSU1FTlRBTApAQCAtMzUyLDYgKzM0NCwxNiBAQAogCSAgQWNjZXNzKS4gIFRoaXMgb3B0aW9uIGlzIGZvciBjb25maWd1cmluZyBoaWdoLWVuZCBtdWx0aXByb2Nlc3NvcgogCSAgc2VydmVyIHN5c3RlbXMuICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludCAiTWF4IG51bSBub2RlcyBzaGlmdCgzLTEwKSIKKwlyYW5nZSAzIDEwCisJZGVmYXVsdCAiOCIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIHlvdXIgU1NJIHN5c3RlbS4KKwkgIE1BWF9OVU1OT0RFUyB3aWxsIGJlIDJeKFRoaXMgdmFsdWUpLgorCSAgSWYgaW4gZG91YnQsIHVzZSB0aGUgZGVmYXVsdC4KKwogIyBWSVJUVUFMX01FTV9NQVAgYW5kIEZMQVRfTk9ERV9NRU1fTUFQIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KICMgVklSVFVBTF9NRU1fTUFQIGhhcyBiZWVuIHJldGFpbmVkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuCiBjb25maWcgVklSVFVBTF9NRU1fTUFQCkBAIC00MTIsNiArNDE0LDggQEAKIGNvbmZpZyBTR0lfU04KIAlkZWZfYm9vbCB5IGlmIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDKQogCitzb3VyY2UgImRyaXZlcnMvc24vS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2Zpcm13YXJlL0tjb25maWciCiAKIHNvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZwppbmRleCBhNzE4MDM0Li45ZWEzNTM5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3NuMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1Ci0jIE1vbiBGZWIgMjcgMTY6MDY6MzggMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMworIyBUaHUgQXByIDI3IDExOjQ4OjIzIDIwMDYKICMKIAogIwpAQCAtMjQsNiArMjQsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0NQVVNFVFM9eQorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldApAQCAtMzgsMTAgKzM5LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNTMsNyArNTAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtNjIsNiArNTgsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtODQsOCArODEsMTAgQEAKIENPTkZJR19NTVU9eQogQ09ORklHX1NXSU9UTEI9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT049eQorQ09ORklHX0RNST15CiBDT05GSUdfRUZJPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQpAQCAtMTE2LDcgKzExNSw2IEBACiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNwogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0xMDI0Ci1DT05GSUdfSUE2NF9OUl9OT0RFUz0yNTYKICMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1BSRUVNUFQ9eQpAQCAtMTM2LDYgKzEzNCw3IEBACiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9ERUZBVUxUPXkKIENPTkZJR19OVU1BPXkKK0NPTkZJR19OT0RFU19TSElGVD0xMAogQ09ORklHX1ZJUlRVQUxfTUVNX01BUD15CiBDT05GSUdfSE9MRVNfSU5fWk9ORT15CiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQpAQCAtMTg3LDcgKzE4Niw2IEBACiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15CiAjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMxLDYgKzIyOSw3IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz1tCiBDT05GSUdfSU5FVF9UQ1BfRElBRz1tCkBAIC0yMzgsOSArMjM3LDExIEBACiBDT05GSUdfVENQX0NPTkdfQklDPXkKIENPTkZJR19JUFY2PW0KICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC00NjgsOSArNDY5LDE0IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MD15Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTEFfRkM9eQorQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRT15CisjIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAorQ09ORklHX1NDU0lfUUxBMjJYWD15CitDT05GSUdfU0NTSV9RTEEyMzAwPXkKK0NPTkZJR19TQ1NJX1FMQTIzMjI9eQorIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC00ODYsNiArNDkyLDcgQEAKIENPTkZJR19NRF9SQUlEMT15CiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ1PXkKKyMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAogIyBDT05GSUdfTURfUkFJRDYgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD15CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldApAQCAtNjk0LDYgKzcwMSw3IEBACiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwogQ09ORklHX0FHUD15CisjIENPTkZJR19BR1BfVklBIGlzIG5vdCBzZXQKIENPTkZJR19BR1BfU0dJX1RJT0NBPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj1tCkBAIC03MzUsMTAgKzc0Myw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc1MSw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03NTcsNiArNzYyLDcgQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiAKICMKQEAgLTc2OSw2ICs3NzUsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPW0KICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTgyOSw5ICs4MzYsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC04NDYsMTUgKzg1MSw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC05MDUsMTUgKzkwMSwyOSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiBDT05GSUdfSU5GSU5JQkFORD1tCiAjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTPW0KIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KLSMgQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CisjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfU1JQPW0KIAogIwpAQCAtOTIzLDEwICs5MzMsMTUgQEAKIENPTkZJR19TR0lfSU9DMz15CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTk5Nyw3ICsxMDEyLDYgQEAKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMTQ1LDcgKzExNTksNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCBiZGNjZDBiLi5kZDRhMmY3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTE5OTksNyArMTk5OSw3IEBACiAJCWlmICghaW92cF9zaGlmdCkKIAkJCWlvdnBfc2hpZnQgPSBtaW4oUEFHRV9TSElGVCwgMTYpOwogCX0KLQlBQ1BJX01FTV9GUkVFKGRldl9pbmZvKTsKKwlrZnJlZShkZXZfaW5mbyk7CiAKIAkvKgogCSAqIGRlZmF1bHQgYW55dGhpbmcgbm90IGNhdWdodCBhYm92ZSBvciBzcGVjaWZpZWQgb24gY21kbGluZSB0byA0awpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMgYi9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYwppbmRleCA0ZTdhNmExLi5kYTAzYzA2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYworKysgYi9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYwpAQCAtMzUsNiArMzUsOSBAQAogCiBzdGF0aWMgdm9pZCBlbGYzMl9zZXRfcGVyc29uYWxpdHkgKHZvaWQpOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZSAoKHVudXNlZCkpCityYW5kb21pemVfc3RhY2tfdG9wKHVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wKTsKKwogI2RlZmluZSBzZXR1cF9hcmdfcGFnZXMoYnBybSx0b3MsZXhlYykJCWlhMzJfc2V0dXBfYXJnX3BhZ2VzKGJwcm0sZXhlYykKICNkZWZpbmUgZWxmX21hcAkJCQllbGYzMl9tYXAKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCmluZGV4IDk1ZmUwNDQuLmEzMmNkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUworKysgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKQEAgLTMzNCw3ICszMzQsNyBAQAogCWRhdGE4IHN5c19zZXRkb21haW5uYW1lCiAJZGF0YTggc3lzMzJfbmV3dW5hbWUKIAlkYXRhOCBzeXMzMl9tb2RpZnlfbGR0Ci0JZGF0YTggc3lzX25pX3N5c2NhbGwJLyogYWRqdGltZXggKi8KKwlkYXRhOCBjb21wYXRfc3lzX2FkanRpbWV4CiAJZGF0YTggc3lzMzJfbXByb3RlY3QJICAvKiAxMjUgKi8KIAlkYXRhOCBjb21wYXRfc3lzX3NpZ3Byb2NtYXNrCiAJZGF0YTggc3lzX25pX3N5c2NhbGwJLyogY3JlYXRlX21vZHVsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNTllODcxZC4uMDlhMGRiYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogb2JqLXkgOj0gYWNwaS5vIGVudHJ5Lm8gZWZpLm8gZWZpX3N0dWIubyBnYXRlLWRhdGEubyBmc3lzLm8gaWE2NF9rc3ltcy5vIGlycS5vIGlycV9pYTY0Lm8JXAogCSBpcnFfbHNhcGljLm8gaXZ0Lm8gbWFjaHZlYy5vIHBhbC5vIHBhdGNoLm8gcHJvY2Vzcy5vIHBlcmZtb24ubyBwdHJhY2UubyBzYWwubwkJXAogCSBzYWxpbmZvLm8gc2VtYXBob3JlLm8gc2V0dXAubyBzaWduYWwubyBzeXNfaWE2NC5vIHRpbWUubyB0cmFwcy5vIHVuYWxpZ25lZC5vIFwKLQkgdW53aW5kLm8gbWNhLm8gbWNhX2FzbS5vIHRvcG9sb2d5Lm8gZG1pX3NjYW4ubworCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubwogCiBvYmotJChDT05GSUdfSUE2NF9CUkxfRU1VKQkrPSBicmxfZW11Lm8KIG9iai0kKENPTkZJR19JQTY0X0dFTkVSSUMpCSs9IGFjcGktZXh0Lm8KQEAgLTMwLDcgKzMwLDYgQEAKIG9iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vIGpwcm9iZXMubwogb2JqLSQoQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SKQkrPSB1bmNhY2hlZC5vCiBtY2FfcmVjb3ZlcnkteQkJCSs9IG1jYV9kcnYubyBtY2FfZHJ2X2FzbS5vCi1kbWlfc2Nhbi15CQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvZG1pX3NjYW4ubwogCiAjIFRoZSBnYXRlIERTTyBpbWFnZSBpcyBidWlsdCB1c2luZyBhIHNwZWNpYWwgbGlua2VyIHNjcmlwdC4KIHRhcmdldHMgKz0gZ2F0ZS5zbyBnYXRlLXN5bXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jCmluZGV4IDRhNTU3NGYuLmZmZjgyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGktZXh0LmMKQEAgLTEsMTA1ICsxLDEwNCBAQAogLyoKLSAqIGFyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYworICogKGMpIENvcHlyaWdodCAyMDAzLCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglBbGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkBocC5jb20+CisgKglCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkCi0gKiBDb3B5cmlnaHQgKEMpIEFsZXggV2lsbGlhbXNvbgotICogQ29weXJpZ2h0IChDKSBCam9ybiBIZWxnYWFzCi0gKgotICogVmVuZG9yIHNwZWNpZmljIGV4dGVuc2lvbnMgdG8gQUNQSS4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogCiAjaW5jbHVkZSA8YXNtL2FjcGktZXh0Lmg+CiAKLXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yIHsKLQl1OCBndWlkX2lkOwotCWVmaV9ndWlkX3QgZ3VpZDsKKy8qCisgKiBEZXZpY2UgQ1NScyB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gUENJIGNvbmZpZyBzcGFjZSBzaG91bGQgYmUgZGVzY3JpYmVkCisgKiB2aWEgQUNQSS4gIFRoaXMgd291bGQgbm9ybWFsbHkgYmUgZG9uZSB3aXRoIEFkZHJlc3MgU3BhY2UgRGVzY3JpcHRvcnMKKyAqIG1hcmtlZCBhcyAiY29uc3VtZXItb25seSwiIGJ1dCBvbGQgdmVyc2lvbnMgb2YgV2luZG93cyBhbmQgTGludXggaWdub3JlCisgKiB0aGUgcHJvZHVjZXIvY29uc3VtZXIgZmxhZywgc28gSFAgaW52ZW50ZWQgYSB2ZW5kb3ItZGVmaW5lZCByZXNvdXJjZSB0bworICogZGVzY3JpYmUgdGhlIGxvY2F0aW9uIGFuZCBzaXplIG9mIENTUiBzcGFjZS4KKyAqLworCitzdHJ1Y3QgYWNwaV92ZW5kb3JfdXVpZCBocF9jY3NyX3V1aWQgPSB7CisJLnN1YnR5cGUgPSAyLAorCS5kYXRhID0geyAweGY5LCAweGFkLCAweGU5LCAweDY5LCAweDRmLCAweDkyLCAweDVmLCAweGFiLCAweGY2LCAweDRhLAorCSAgICAweDI0LCAweGQyLCAweDAxLCAweDM3LCAweDBlLCAweGFkIH0sCiB9OwogCi1zdHJ1Y3QgYWNwaV92ZW5kb3JfaW5mbyB7Ci0Jc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgKmRlc2NyaXB0b3I7Ci0JdTggKmRhdGE7Ci0JdTMyIGxlbmd0aDsKLX07Ci0KLWFjcGlfc3RhdHVzCi1hY3BpX3ZlbmRvcl9yZXNvdXJjZV9tYXRjaChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmNvbnRleHQpCi17Ci0Jc3RydWN0IGFjcGlfdmVuZG9yX2luZm8gKmluZm8gPSAoc3RydWN0IGFjcGlfdmVuZG9yX2luZm8gKiljb250ZXh0OwotCXN0cnVjdCBhY3BpX3Jlc291cmNlX3ZlbmRvciAqdmVuZG9yOwotCXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yICpkZXNjcmlwdG9yOwotCXUzMiBieXRlX2xlbmd0aDsKLQotCWlmIChyZXNvdXJjZS0+dHlwZSAhPSBBQ1BJX1JFU09VUkNFX1RZUEVfVkVORE9SKQotCQlyZXR1cm4gQUVfT0s7Ci0KLQl2ZW5kb3IgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2VfdmVuZG9yICopJnJlc291cmNlLT5kYXRhOwotCWRlc2NyaXB0b3IgPSAoc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgKil2ZW5kb3ItPmJ5dGVfZGF0YTsKLQlpZiAodmVuZG9yLT5ieXRlX2xlbmd0aCA8PSBzaXplb2YoKmluZm8tPmRlc2NyaXB0b3IpIHx8Ci0JICAgIGRlc2NyaXB0b3ItPmd1aWRfaWQgIT0gaW5mby0+ZGVzY3JpcHRvci0+Z3VpZF9pZCB8fAotCSAgICBlZmlfZ3VpZGNtcChkZXNjcmlwdG9yLT5ndWlkLCBpbmZvLT5kZXNjcmlwdG9yLT5ndWlkKSkKLQkJcmV0dXJuIEFFX09LOwotCi0JYnl0ZV9sZW5ndGggPSB2ZW5kb3ItPmJ5dGVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yKTsKLQlpbmZvLT5kYXRhID0gYWNwaV9vc19hbGxvY2F0ZShieXRlX2xlbmd0aCk7Ci0JaWYgKCFpbmZvLT5kYXRhKQotCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwotCi0JbWVtY3B5KGluZm8tPmRhdGEsCi0JICAgICAgIHZlbmRvci0+Ynl0ZV9kYXRhICsgc2l6ZW9mKHN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yKSwKLQkgICAgICAgYnl0ZV9sZW5ndGgpOwotCWluZm8tPmxlbmd0aCA9IGJ5dGVfbGVuZ3RoOwotCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKLX0KLQotYWNwaV9zdGF0dXMKLWFjcGlfZmluZF92ZW5kb3JfcmVzb3VyY2UoYWNwaV9oYW5kbGUgb2JqLCBzdHJ1Y3QgYWNwaV92ZW5kb3JfZGVzY3JpcHRvciAqIGlkLAotCQkJICB1OCAqKiBkYXRhLCB1MzIgKiBieXRlX2xlbmd0aCkKLXsKLQlzdHJ1Y3QgYWNwaV92ZW5kb3JfaW5mbyBpbmZvOwotCi0JaW5mby5kZXNjcmlwdG9yID0gaWQ7Ci0JaW5mby5kYXRhID0gTlVMTDsKLQotCWFjcGlfd2Fsa19yZXNvdXJjZXMob2JqLCBNRVRIT0RfTkFNRV9fQ1JTLCBhY3BpX3ZlbmRvcl9yZXNvdXJjZV9tYXRjaCwKLQkJCSAgICAmaW5mbyk7Ci0JaWYgKCFpbmZvLmRhdGEpCi0JCXJldHVybiBBRV9OT1RfRk9VTkQ7Ci0KLQkqZGF0YSA9IGluZm8uZGF0YTsKLQkqYnl0ZV9sZW5ndGggPSBpbmZvLmxlbmd0aDsKLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yIGhwX2Njc3JfZGVzY3JpcHRvciA9IHsKLQkuZ3VpZF9pZCA9IDIsCi0JLmd1aWQgPQotCSAgICBFRklfR1VJRCgweDY5ZTlhZGY5LCAweDkyNGYsIDB4YWI1ZiwgMHhmNiwgMHg0YSwgMHgyNCwgMHhkMiwgMHgwMSwKLQkJICAgICAweDM3LCAweDBlLCAweGFkKQotfTsKLQotYWNwaV9zdGF0dXMgaHBfYWNwaV9jc3Jfc3BhY2UoYWNwaV9oYW5kbGUgb2JqLCB1NjQgKiBjc3JfYmFzZSwgdTY0ICogY3NyX2xlbmd0aCkKK3N0YXRpYyBhY3BpX3N0YXR1cyBocF9jY3NyX2xvY2F0ZShhY3BpX2hhbmRsZSBvYmosIHU2NCAqYmFzZSwgdTY0ICpsZW5ndGgpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXU4ICpkYXRhOwotCXUzMiBsZW5ndGg7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2U7CisJc3RydWN0IGFjcGlfcmVzb3VyY2VfdmVuZG9yX3R5cGVkICp2ZW5kb3I7CiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2ZpbmRfdmVuZG9yX3Jlc291cmNlKG9iaiwgJmhwX2Njc3JfZGVzY3JpcHRvciwgJmRhdGEsICZsZW5ndGgpOworCXN0YXR1cyA9IGFjcGlfZ2V0X3ZlbmRvcl9yZXNvdXJjZShvYmosIE1FVEhPRF9OQU1FX19DUlMsICZocF9jY3NyX3V1aWQsCisJCSZidWZmZXIpOwogCi0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpIHx8IGxlbmd0aCAhPSAxNikKKwlyZXNvdXJjZSA9IGJ1ZmZlci5wb2ludGVyOworCXZlbmRvciA9ICZyZXNvdXJjZS0+ZGF0YS52ZW5kb3JfdHlwZWQ7CisKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgdmVuZG9yLT5ieXRlX2xlbmd0aCA8IDE2KSB7CisJCXN0YXR1cyA9IEFFX05PVF9GT1VORDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweShiYXNlLCB2ZW5kb3ItPmJ5dGVfZGF0YSwgc2l6ZW9mKCpiYXNlKSk7CisJbWVtY3B5KGxlbmd0aCwgdmVuZG9yLT5ieXRlX2RhdGEgKyA4LCBzaXplb2YoKmxlbmd0aCkpOworCisgIGV4aXQ6CisJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdHJ1Y3QgY3NyX3NwYWNlIHsKKwl1NjQJYmFzZTsKKwl1NjQJbGVuZ3RoOworfTsKKworc3RhdGljIGFjcGlfc3RhdHVzIGZpbmRfY3NyX3NwYWNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3NyX3NwYWNlICpzcGFjZSA9IGRhdGE7CisJc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0IGFkZHI7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQocmVzb3VyY2UsICZhZGRyKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYKKwkgICAgYWRkci5yZXNvdXJjZV90eXBlID09IEFDUElfTUVNT1JZX1JBTkdFICYmCisJICAgIGFkZHIuYWRkcmVzc19sZW5ndGggJiYKKwkgICAgYWRkci5wcm9kdWNlcl9jb25zdW1lciA9PSBBQ1BJX0NPTlNVTUVSKSB7CisJCXNwYWNlLT5iYXNlID0gYWRkci5taW5pbXVtOworCQlzcGFjZS0+bGVuZ3RoID0gYWRkci5hZGRyZXNzX2xlbmd0aDsKKwkJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOworCX0KKwlyZXR1cm4gQUVfT0s7CQkvKiBrZWVwIGxvb2tpbmcgKi8KK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGhwX2Nyc19sb2NhdGUoYWNwaV9oYW5kbGUgb2JqLCB1NjQgKmJhc2UsIHU2NCAqbGVuZ3RoKQoreworCXN0cnVjdCBjc3Jfc3BhY2Ugc3BhY2UgPSB7IDAsIDAgfTsKKworCWFjcGlfd2Fsa19yZXNvdXJjZXMob2JqLCBNRVRIT0RfTkFNRV9fQ1JTLCBmaW5kX2Nzcl9zcGFjZSwgJnNwYWNlKTsKKwlpZiAoIXNwYWNlLmxlbmd0aCkKIAkJcmV0dXJuIEFFX05PVF9GT1VORDsKIAotCW1lbWNweShjc3JfYmFzZSwgZGF0YSwgc2l6ZW9mKCpjc3JfYmFzZSkpOwotCW1lbWNweShjc3JfbGVuZ3RoLCBkYXRhICsgOCwgc2l6ZW9mKCpjc3JfbGVuZ3RoKSk7Ci0JYWNwaV9vc19mcmVlKGRhdGEpOwotCisJKmJhc2UgPSBzcGFjZS5iYXNlOworCSpsZW5ndGggPSBzcGFjZS5sZW5ndGg7CiAJcmV0dXJuIEFFX09LOwogfQogCithY3BpX3N0YXR1cyBocF9hY3BpX2Nzcl9zcGFjZShhY3BpX2hhbmRsZSBvYmosIHU2NCAqY3NyX2Jhc2UsIHU2NCAqY3NyX2xlbmd0aCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBocF9jY3NyX2xvY2F0ZShvYmosIGNzcl9iYXNlLCBjc3JfbGVuZ3RoKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gaHBfY3JzX2xvY2F0ZShvYmosIGNzcl9iYXNlLCBjc3JfbGVuZ3RoKTsKK30KIEVYUE9SVF9TWU1CT0woaHBfYWNwaV9jc3Jfc3BhY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDc1MGU4ZTcuLmJjYjgwY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKQEAgLTE2MDYsNSArMTYwNiwxMCBAQAogCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkJLy8gMTI5NSByZXNlcnZlZCBmb3IgcHBvbGwKIAlkYXRhOCBzeXNfdW5zaGFyZQogCWRhdGE4IHN5c19zcGxpY2UKKwlkYXRhOCBzeXNfc2V0X3JvYnVzdF9saXN0CisJZGF0YTggc3lzX2dldF9yb2J1c3RfbGlzdAorCWRhdGE4IHN5c19zeW5jX2ZpbGVfcmFuZ2UJCS8vIDEzMDAKKwlkYXRhOCBzeXNfdGVlCisJZGF0YTggc3lzX3Ztc3BsaWNlCiAKIAkub3JnIHN5c19jYWxsX3RhYmxlICsgOCpOUl9zeXNjYWxscwkvLyBndWFyZCBhZ2FpbnN0IGZhaWx1cmVzIHRvIGluY3JlYXNlIE5SX3N5c2NhbGxzCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCmluZGV4IDc5NTZlYjkuLmQ1OGMxYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAlpYTY0X3ZlY3RvciB2ZWMgPSBpcnFfdG9fdmVjdG9yKGlycSk7CiAJc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZTsKIAotCW1vdmVfaXJxKGlycSk7CisJbW92ZV9uYXRpdmVfaXJxKGlycSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShydGUsICZpb3NhcGljX2ludHJfaW5mb1t2ZWNdLnJ0ZXMsIHJ0ZV9saXN0KQogCQlpb3NhcGljX2VvaShydGUtPmFkZHIsIHZlYyk7CiB9CkBAIC00NTgsNyArNDU4LDcgQEAKIHsKIAlpcnFfZGVzY190ICppZGVzYyA9IGlycV9kZXNjcChpcnEpOwogCi0JbW92ZV9pcnEoaXJxKTsKKwltb3ZlX25hdGl2ZV9pcnEoaXJxKTsKIAkvKgogCSAqIE9uY2Ugd2UgaGF2ZSByZWNvcmRlZCBJUlFfUEVORElORyBhbHJlYWR5LCB3ZSBjYW4gbWFzayB0aGUKIAkgKiBpbnRlcnJ1cHQgZm9yIHJlYWwuIFRoaXMgcHJldmVudHMgSVJRIHN0b3JtcyBmcm9tIHVuaGFuZGxlZApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKaW5kZXggNWNlOTA4ZS4uOWM3MmVhMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCkBAIC0xMDEsNyArMTAxLDYgQEAKIAogCWlmIChpcnEgPCBOUl9JUlFTKSB7CiAJCWlycV9hZmZpbml0eVtpcnFdID0gbWFzazsKLQkJc2V0X2lycV9pbmZvKGlycSwgbWFzayk7CiAJCWlycV9yZWRpcltpcnFdID0gKGNoYXIpIChyZWRpciAmIDB4ZmYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNzg5ODgxYy4uZjkwMzlmOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXVwZGF0ZV9rcHJvYmVfaW5zdF9mbGFnKHRlbXBsYXRlLCBzbG90LCBtYWpvcl9vcGNvZGUsIGtwcm9iZV9pbnN0LCBwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdldF9rcHJvYmVfaW5zdChidW5kbGVfdCAqYnVuZGxlLCB1aW50IHNsb3QsCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgZ2V0X2twcm9iZV9pbnN0KGJ1bmRsZV90ICpidW5kbGUsIHVpbnQgc2xvdCwKIAkgICAgICAgCXVuc2lnbmVkIGxvbmcgKmtwcm9iZV9pbnN0LCB1aW50ICptYWpvcl9vcGNvZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBrcHJvYmVfaW5zdF9wMCwga3Byb2JlX2luc3RfcDE7CkBAIC0yNzgsNyArMjc4LDcgQEAKIH0KIAogLyogUmV0dXJucyBub24temVybyBpZiB0aGUgYWRkciBpcyBpbiB0aGUgSW50ZXJydXB0IFZlY3RvciBUYWJsZSAqLwotc3RhdGljIGlubGluZSBpbnQgaW5faXZ0X2Z1bmN0aW9ucyh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBpbl9pdnRfZnVuY3Rpb25zKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlyZXR1cm4gKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX19zdGFydF9pdnRfdGV4dAogCQkmJiBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX19lbmRfaXZ0X3RleHQpOwpAQCAtMzA4LDE5ICszMDgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlrY2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlrY2ItPnByZXZfa3Byb2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7CiAJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwKIAkJCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggODk2MzE3MS4uNmEwODgwNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC01ODEsMTAgKzU4MSwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgaWE2NF9tY2Ffbm90aWZ5X2RpZSBuZCA9CisJCXsgLnNvcyA9IE5VTEwsIC5tb25hcmNoX2NwdSA9ICZtb25hcmNoX2NwdSB9OwogCiAJLyogTWFzayBhbGwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfRU5URVIsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC01OTQsNyArNTk2LDcgQEAKIAkgKi8KIAlpYTY0X3NhbF9tY19yZW5kZXooKTsKIAotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX1BST0NFU1MsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX1BST0NFU1MsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC02MDIsNyArNjA0LDcgQEAKIAl3aGlsZSAobW9uYXJjaF9jcHUgIT0gLTEpCiAJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggbGVhdmVzICovCiAKLQlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19MRUFWRSwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfTEVBVkUsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC05NjEsNyArOTYzLDcgQEAKICAqLwogCiBzdGF0aWMgdm9pZAotaWE2NF93YWl0X2Zvcl9zbGF2ZXMoaW50IG1vbmFyY2gpCitpYTY0X3dhaXRfZm9yX3NsYXZlcyhpbnQgbW9uYXJjaCwgY29uc3QgY2hhciAqdHlwZSkKIHsKIAlpbnQgYywgd2FpdCA9IDAsIG1pc3NpbmcgPSAwOwogCWZvcl9lYWNoX29ubGluZV9jcHUoYykgewpAQCAtOTg3LDcgKzk4OSw3IEBACiAJfQogCWlmICghbWlzc2luZykKIAkJZ290byBhbGxfaW47Ci0JcHJpbnRrKEtFUk5fSU5GTyAiT1MgTUNBIHNsYXZlIGRpZCBub3QgcmVuZGV6dm91cyBvbiBjcHUiKTsKKwlwcmludGsoS0VSTl9JTkZPICJPUyAlcyBzbGF2ZSBkaWQgbm90IHJlbmRlenZvdXMgb24gY3B1IiwgdHlwZSk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjKSB7CiAJCWlmIChjID09IG1vbmFyY2gpCiAJCQljb250aW51ZTsKQEAgLTk5OCw3ICsxMDAwLDcgQEAKIAlyZXR1cm47CiAKIGFsbF9pbjoKLQlwcmludGsoS0VSTl9JTkZPICJBbGwgT1MgTUNBIHNsYXZlcyBoYXZlIHJlYWNoZWQgcmVuZGV6dm91c1xuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiQWxsIE9TICVzIHNsYXZlcyBoYXZlIHJlYWNoZWQgcmVuZGV6dm91c1xuIiwgdHlwZSk7CiAJcmV0dXJuOwogfQogCkBAIC0xMDIzLDYgKzEwMjUsOCBAQAogCQkmc29zLT5wcm9jX3N0YXRlX3BhcmFtOwogCWludCByZWNvdmVyLCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdGFza190ICpwcmV2aW91c19jdXJyZW50OworCXN0cnVjdCBpYTY0X21jYV9ub3RpZnlfZGllIG5kID0KKwkJeyAuc29zID0gc29zLCAubW9uYXJjaF9jcHUgPSAmbW9uYXJjaF9jcHUgfTsKIAogCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkvKiBGSVhNRTogbWFrZSBwcmludGsgTk1JL01DQS9JTklUIHNhZmUgKi8KIAljb25zb2xlX2xvZ2xldmVsID0gMTU7CS8qIG1ha2Ugc3VyZSBwcmludGtzIG1ha2UgaXQgdG8gY29uc29sZSAqLwpAQCAtMTAzMSwxMCArMTAzNSwxMCBAQAogCiAJcHJldmlvdXNfY3VycmVudCA9IGlhNjRfbWNhX21vZGlmeV9vcmlnaW5hbF9zdGFjayhyZWdzLCBzdywgc29zLCAiTUNBIik7CiAJbW9uYXJjaF9jcHUgPSBjcHU7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0VOVEVSLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfRU5URVIsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwotCWlhNjRfd2FpdF9mb3Jfc2xhdmVzKGNwdSk7CisJaWE2NF93YWl0X2Zvcl9zbGF2ZXMoY3B1LCAiTUNBIik7CiAKIAkvKiBXYWtldXAgYWxsIHRoZSBwcm9jZXNzb3JzIHdoaWNoIGFyZSBzcGlubmluZyBpbiB0aGUgcmVuZGV6dm91cyBsb29wLgogCSAqIFRoZXkgd2lsbCBsZWF2ZSBTQUwsIHRoZW4gc3BpbiBpbiB0aGUgT1Mgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCkBAIC0xMDQzLDcgKzEwNDcsNyBAQAogCSAqIHNwaW5uaW5nIGluIFNBTCBkb2VzIG5vdCB3b3JrLgogCSAqLwogCWlhNjRfbWNhX3dha2V1cF9hbGwoKTsKLQlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX1BST0NFU1MsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC0xMDY0LDcgKzEwNjgsNyBAQAogCQlpYTY0X3NhbF9jbGVhcl9zdGF0ZV9pbmZvKFNBTF9JTkZPX1RZUEVfTUNBKTsKIAkJc29zLT5vc19zdGF0dXMgPSBJQTY0X01DQV9DT1JSRUNURUQ7CiAJfQotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9MRUFWRSwgIk1DQSIsIHJlZ3MsIDAsIDAsIHJlY292ZXIpCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0xFQVZFLCAiTUNBIiwgcmVncywgKGxvbmcpJm5kLCAwLCByZWNvdmVyKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIApAQCAtMTM1MSwxMCArMTM1NSwxNCBAQAogCXN0YXRpYyBhdG9taWNfdCBtb25hcmNoczsKIAl0YXNrX3QgKnByZXZpb3VzX2N1cnJlbnQ7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgaWE2NF9tY2Ffbm90aWZ5X2RpZSBuZCA9CisJCXsgLnNvcyA9IHNvcywgLm1vbmFyY2hfY3B1ID0gJm1vbmFyY2hfY3B1IH07CiAKIAlvb3BzX2luX3Byb2dyZXNzID0gMTsJLyogRklYTUU6IG1ha2UgcHJpbnRrIE5NSS9NQ0EvSU5JVCBzYWZlICovCiAJY29uc29sZV9sb2dsZXZlbCA9IDE1OwkvKiBtYWtlIHN1cmUgcHJpbnRrcyBtYWtlIGl0IHRvIGNvbnNvbGUgKi8KIAorCSh2b2lkKSBub3RpZnlfZGllKERJRV9JTklUX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCk7CisKIAlwcmludGsoS0VSTl9JTkZPICJFbnRlcmVkIE9TIElOSVQgaGFuZGxlci4gUFNQPSVseCBjcHU9JWQgbW9uYXJjaD0lbGRcbiIsCiAJCXNvcy0+cHJvY19zdGF0ZV9wYXJhbSwgY3B1LCBzb3MtPm1vbmFyY2gpOwogCXNhbGluZm9fbG9nX3dha2V1cChTQUxfSU5GT19UWVBFX0lOSVQsIE5VTEwsIDAsIDApOwpAQCAtMTM5MCwxNSArMTM5OCwxNSBAQAogCQlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9JTklUOwogCQl3aGlsZSAobW9uYXJjaF9jcHUgPT0gLTEpCiAJCSAgICAgICBjcHVfcmVsYXgoKTsJLyogc3BpbiB1bnRpbCBtb25hcmNoIGVudGVycyAqLwotCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9FTlRFUiwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9FTlRFUiwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCiAJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7Ci0JCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX1BST0NFU1MsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCiAJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKIAkJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggbGVhdmVzICovCi0JCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCQk9PSBOT1RJRllfU1RPUCkKIAkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAkJcHJpbnRrKCJTbGF2ZSBvbiBjcHUgJWQgcmV0dXJuaW5nIHRvIG5vcm1hbCBzZXJ2aWNlLlxuIiwgY3B1KTsKQEAgLTE0MDksNyArMTQxNyw3IEBACiAJfQogCiAJbW9uYXJjaF9jcHUgPSBjcHU7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfRU5URVIsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIApAQCAtMTQyMSwxNSArMTQyOSwxNSBAQAogCSAqLwogCXByaW50aygiRGVsYXlpbmcgZm9yIDUgc2Vjb25kcy4uLlxuIik7CiAJdWRlbGF5KDUqMTAwMDAwMCk7Ci0JaWE2NF93YWl0X2Zvcl9zbGF2ZXMoY3B1KTsKKwlpYTY0X3dhaXRfZm9yX3NsYXZlcyhjcHUsICJJTklUIik7CiAJLyogSWYgbm9ib2R5IGludGVyY2VwdHMgRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTIHRoZW4gd2UgZHJvcCB0aHJvdWdoCiAJICogdG8gZGVmYXVsdF9tb25hcmNoX2luaXRfcHJvY2VzcygpIGFib3ZlIGFuZCBqdXN0IHByaW50IGFsbCB0aGUKIAkgKiB0YXNrcy4KIAkgKi8KLQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKLQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCXByaW50aygiXG5JTklUIGR1bXAgY29tcGxldGUuICBNb25hcmNoIG9uIGNwdSAlZCByZXR1cm5pbmcgdG8gbm9ybWFsIHNlcnZpY2UuXG4iLCBjcHUpOwpAQCAtMTYzMSw2ICsxNjM5LDcgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIkluY3JlYXNpbmcgTUNBIHJlbmRlenZvdXMgdGltZW91dCBmcm9tICIKIAkJCQkiJWxkIHRvICVsZCBtaWxsaXNlY29uZHNcbiIsIHRpbWVvdXQsIGlzcnYudjApOwogCQkJdGltZW91dCA9IGlzcnYudjA7CisJCQkodm9pZCkgbm90aWZ5X2RpZShESUVfTUNBX05FV19USU1FT1VULCAiTUNBIiwgTlVMTCwgdGltZW91dCwgMCwgMCk7CiAJCQljb250aW51ZTsKIAkJfQogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciByZW5kZXp2b3VzIGludGVycnVwdCAiCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TCmluZGV4IDYwYTQ2NGIuLjZkZmYwMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TCkBAIC04MjcsNyArODI3LDcgQEAKIAlsZDggcjk9W3RlbXAyXSwxNgkvLyBzYWxfZ3AKIAk7OwogCWxkOCByMjI9W3RlbXAxXSwxNgkvLyBwYWxfbWluX3N0YXRlLCB2aXJ0dWFsCi0JbGQ4IHIyMT1bdGVtcDJdLDE2CS8vIHByZXZfSUE2NF9LUl9DVVJSRU5UCisJbGQ4IHIxMz1bdGVtcDJdLDE2CS8vIHByZXZfSUE2NF9LUl9DVVJSRU5UCiAJOzsKIAlsZDggcjE2PVt0ZW1wMV0sMTYJLy8gcHJldl9JQTY0X0tSX0NVUlJFTlRfU1RBQ0sKIAlsZDggcjIwPVt0ZW1wMl0sMTYJLy8gcHJldl90YXNrCkBAIC04NDgsNyArODQ4LDcgQEAKIAltb3YgY3IuaWltPXRlbXAzCiAJbW92IGNyLmloYT10ZW1wNAogCWRlcCByMjI9MCxyMjIsNjIsMQkvLyBwYWxfbWluX3N0YXRlLCBwaHlzaWNhbCwgdW5jYWNoZWQKLQltb3YgSUE2NF9LUihDVVJSRU5UKT1yMjEKKwltb3YgSUE2NF9LUihDVVJSRU5UKT1yMTMKIAlsZDggcjg9W3RlbXAxXQkJLy8gb3Nfc3RhdHVzCiAJbGQ4IHIxMD1bdGVtcDJdCQkvLyBjb250ZXh0CiAKQEAgLTg1Niw3ICs4NTYsNyBAQAogCSAqIGF2b2lkIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGFsZ29yaXRobSBpbiBpYTY0X3N3aXRjaF90bygpLCBqdXN0CiAJICogcHVyZ2UgYW55IGV4aXN0aW5nIENVUlJFTlRfU1RBQ0sgbWFwcGluZyBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lLgogCSAqCi0JICogcjE2IGNvbnRhaW5zIHByZXZfSUE2NF9LUl9DVVJSRU5UX1NUQUNLLCByMjEgY29udGFpbnMKKwkgKiByMTYgY29udGFpbnMgcHJldl9JQTY0X0tSX0NVUlJFTlRfU1RBQ0ssIHIxMyBjb250YWlucwogCSAqIHByZXZfSUE2NF9LUl9DVVJSRU5ULCB0aGVzZSB2YWx1ZXMgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5IHRoZSBDCiAJICogY29kZS4gIERvIG5vdCB1c2UgcjgsIHI5LCByMTAsIHIyMiwgdGhleSBjb250YWluIHZhbHVlcyByZWFkeSBmb3IKIAkgKiB0aGUgcmV0dXJuIHRvIFNBTC4KQEAgLTg3Myw3ICs4NzMsNyBAQAogCTs7CiAJc3Jsei5kCiAKLQlleHRyLnUgcjE5PXIyMSw2MSwzCQkJLy8gcjIxID0gcHJldl9JQTY0X0tSX0NVUlJFTlQKKwlleHRyLnUgcjE5PXIxMyw2MSwzCQkJLy8gcjEzID0gcHJldl9JQTY0X0tSX0NVUlJFTlQKIAlzaGwgcjIwPXIxNixJQTY0X0dSQU5VTEVfU0hJRlQJCS8vIHIxNiA9IHByZXZfSUE2NF9LUl9DVVJSRU5UX1NUQUNLCiAJbW92bCByMjE9UEFHRV9LRVJORUwJCQkvLyBwYWdlIHByb3BlcnRpZXMKIAk7OwpAQCAtODgzLDcgKzg4Myw3IEBACiAocDYpCWJyLnNwbnQgMWYJCQkJLy8gdGhlIGRyZWFkZWQgY3B1IDAgaWRsZSB0YXNrIGluIHJlZ2lvbiA1OigKIAk7OwogCW1vdiBjci5pdGlyPXIxOAotCW1vdiBjci5pZmE9cjIxCisJbW92IGNyLmlmYT1yMTMKIAltb3YgcjIwPUlBNjRfVFJfQ1VSUkVOVF9TVEFDSwogCTs7CiAJaXRyLmQgZHRyW3IyMF09cjIxCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCmluZGV4IDM3Yzg4ZWIuLmNhNjY2NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCkBAIC02Miw2ICs2MiwxMSBAQAogCUlTT0xBVEVfTk9ORQogfSBpc29sYXRlX3N0YXR1c190OwogCit0eXBlZGVmIGVudW0geworCU1DQV9OT1RfUkVDT1ZFUkVEID0gMCwKKwlNQ0FfUkVDT1ZFUkVECSAgPSAxCit9IHJlY292ZXJ5X3N0YXR1c190OworCiAvKgogICogIFRoaXMgcG9vbCBrZWVwcyBwb2ludGVycyB0byB0aGUgc2VjdGlvbiBwYXJ0IG9mIFNBTCBlcnJvciByZWNvcmQKICAqLwpAQCAtNzEsNiArNzYsMTggQEAKIAlpbnQJICAgICBtYXhfaWR4OyAvKiBNYXhpbXVtIGluZGV4IG9mIHNlY3Rpb24gcG9pbnRlciBsaXN0IHBvb2wgKi8KIH0gc2xpZHhfcG9vbDsKIAorc3RhdGljIGludAorZmF0YWxfbWNhKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnByaW50ayhmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCXJldHVybiBNQ0FfTk9UX1JFQ09WRVJFRDsKK30KKwogLyoqCiAgKiBtY2FfcGFnZV9pc29sYXRlIC0gaXNvbGF0ZSBhIHBvaXNvbmVkIHBhZ2UgaW4gb3JkZXIgbm90IHRvIHVzZSBpdCBsYXRlcgogICogQHBhZGRyOglwb2lzb25lZCBtZW1vcnkgbG9jYXRpb24KQEAgLTQyNCw3ICs0NDEsNyBAQAogCiAJLyogSXMgdGFyZ2V0IGFkZHJlc3MgdmFsaWQ/ICovCiAJaWYgKCFwYmNpLT50dikKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiB0YXJnZXQgYWRkcmVzcyBub3QgdmFsaWRcbiIpOwogCiAJLyoKIAkgKiBjcHUgcmVhZCBvciBtZW1vcnktbWFwcGVkIGlvIHJlYWQKQEAgLTQ0Miw3ICs0NTksNyBAQAogCiAJLyogSXMgbWluc3RhdGUgdmFsaWQ/ICovCiAJaWYgKCFwZWlkeF9ib3R0b20ocGVpZHgpIHx8ICEocGVpZHhfYm90dG9tKHBlaWR4KS0+dmFsaWQubWluc3RhdGUpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IG1pbnN0YXRlIG5vdCB2YWxpZFxuIik7CiAJcHNyMSA9KHN0cnVjdCBpYTY0X3BzciAqKSYocGVpZHhfbWluc3RhdGVfYXJlYShwZWlkeCktPnBtc2FfaXBzcik7CiAJcHNyMiA9KHN0cnVjdCBpYTY0X3BzciAqKSYocGVpZHhfbWluc3RhdGVfYXJlYShwZWlkeCktPnBtc2FfeHBzcik7CiAKQEAgLTQ3NiwxMiArNDkzLDEzIEBACiAJCQlwc3IyLT5ibiAgPSAxOwogCQkJcHNyMi0+aSAgPSAwOwogCi0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiBNQ0FfUkVDT1ZFUkVEOwogCQl9CiAKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQToga2VybmVsIGNvbnRleHQgbm90IHJlY292ZXJlZCwiCisJCQkgICIgaWlwIDB4JWx4XG4iLCBwbXNhLT5wbXNhX2lpcCk7CiB9CiAKIC8qKgpAQCAtNTY3LDEzICs1ODUsMTMgQEAKIAkgKiBUaGUgbWFjaGluZSBjaGVjayBpcyBjb3JyZWN0ZWQuCiAJICovCiAJaWYgKHBzcC0+Y20gPT0gMSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiBNQ0FfUkVDT1ZFUkVEOwogCiAJLyoKIAkgKiBUaGUgZXJyb3Igd2FzIG5vdCBjb250YWluZWQuICBTb2Z0d2FyZSBtdXN0IGJlIHJlc2V0LgogCSAqLwogCWlmIChwc3AtPnVzIHx8IHBzcC0+Y2kgPT0gMCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBlcnJvciBub3QgY29udGFpbmVkXG4iKTsKIAogCS8qCiAJICogVGhlIGNhY2hlIGNoZWNrIGFuZCBidXMgY2hlY2sgYml0cyBoYXZlIGZvdXIgcG9zc2libGUgc3RhdGVzCkBAIC01ODQsMjAgKzYwMiwyMiBAQAogCSAqICAgIDEgIDEJTWVtb3J5IGVycm9yLCBhdHRlbXB0IHJlY292ZXJ5CiAJICovCiAJaWYgKHBzcC0+YmMgPT0gMCB8fCBwYmNpID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogTm8gYnVzIGNoZWNrXG4iKTsKIAogCS8qCiAJICogU29ycnksIHdlIGNhbm5vdCBoYW5kbGUgc28gbWFueS4KIAkgKi8KIAlpZiAocGVpZHhfYnVzX2NoZWNrX251bShwZWlkeCkgPiAxKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IFRvbyBtYW55IGJ1cyBjaGVja3NcbiIpOwogCS8qCiAJICogV2VsbCwgaGVyZSBpcyBvbmx5IG9uZSBidXMgZXJyb3IuCiAJICovCi0JaWYgKHBiY2ktPmliIHx8IHBiY2ktPmNjKQotCQlyZXR1cm4gMDsKKwlpZiAocGJjaS0+aWIpCisJCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBJbnRlcm5hbCBCdXMgZXJyb3JcbiIpOworCWlmIChwYmNpLT5jYykKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IENhY2hlLWNhY2hlIGVycm9yXG4iKTsKIAlpZiAocGJjaS0+ZWIgJiYgcGJjaS0+YnNpID4gMCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBFeHRlcm5hbCBidXMgY2hlY2sgZmF0YWwgc3RhdHVzXG4iKTsKIAogCS8qCiAJICogVGhpcyBpcyBhIGxvY2FsIE1DQSBhbmQgZXN0aW1hdGVkIGFzIHJlY292ZXJibGUgZXh0ZXJuYWwgYnVzIGVycm9yLgpAQCAtNjA5LDcgKzYyOSw3IEBACiAJLyoKIAkgKiBPbiBhY2NvdW50IG9mIHN0cmFuZ2UgU0FMIGVycm9yIHJlY29yZCwgd2UgY2Fubm90IHJlY292ZXIuCiAJICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IFN0cmFuZ2UgU0FMIHJlY29yZFxuIik7CiB9CiAKIC8qKgpAQCAtNjM4LDEyICs2NTgsMTAgQEAKIAogCSAvKiBOb3csIE9TIGNhbiByZWNvdmVyIHdoZW4gdGhlcmUgaXMgb25lIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uICovCiAJaWYgKG5fcHJvY19lcnIgPiAxKQotCQlyZXR1cm4gMDsKLQllbHNlIGlmIChuX3Byb2NfZXJyID09IDApIHsKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IFRvbyBNYW55IEVycm9yc1xuIik7CisJZWxzZSBpZiAobl9wcm9jX2VyciA9PSAwKQogCQkvKiBXZWlyZCBTQUwgcmVjb3JkIC4uLiBXZSBuZWVkIG5vdCB0byByZWNvdmVyICovCi0KLQkJcmV0dXJuIDE7Ci0JfQorCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogV2VpcmQgU0FMIHJlY29yZFxuIik7CiAKIAkvKiBNYWtlIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uICovCiAJbWNhX21ha2VfcGVpZHgoKHNhbF9sb2dfcHJvY2Vzc29yX2luZm9fdCopCkBAIC02NTQsNyArNjcyLDcgQEAKIAogCS8qIENoZWNrIHdoZXRoZXIgTUNBIGlzIGdsb2JhbCBvciBub3QgKi8KIAlpZiAoaXNfbWNhX2dsb2JhbCgmcGVpZHgsICZwYmNpLCBzb3MpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IGdsb2JhbCBNQ0FcbiIpOwogCQogCS8qIFRyeSB0byByZWNvdmVyIGEgcHJvY2Vzc29yIGVycm9yICovCiAJcmV0dXJuIHJlY292ZXJfZnJvbV9wcm9jZXNzb3JfZXJyb3IocGxhdGZvcm1fZXJyLCAmc2xpZHgsICZwZWlkeCwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCmluZGV4IDdhMmYwYTcuLjNhMzBjZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYwpAQCAtOTQ3LDcgKzk0Nyw3IEBACiBwZXJjcHVfbW9kY29weSAodm9pZCAqcGNwdWRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdW5zaWduZWQgaW50IGk7Ci0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQltZW1jcHkocGNwdWRzdCArIF9fcGVyX2NwdV9vZmZzZXRbaV0sIHNyYywgc2l6ZSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMgYi9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYwppbmRleCA4OWZhYTYwLi44NTlmYjM3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJCQl9CiAJCQlwICs9IHNwcmludGYocCwKIAkJCQkgICAgICIlcyBDYWNoZSBsZXZlbCAlbHU6XG4iCi0JCQkJICAgICAiXHRTaXplICAgICAgICAgICA6ICVsdSBieXRlc1xuIgorCQkJCSAgICAgIlx0U2l6ZSAgICAgICAgICAgOiAldSBieXRlc1xuIgogCQkJCSAgICAgIlx0QXR0cmlidXRlcyAgICAgOiAiLAogCQkJCSAgICAgY2FjaGVfdHlwZXNbaitjY2kucGNjaV91bmlmaWVkXSwgaSsxLAogCQkJCSAgICAgY2NpLnBjY2lfY2FjaGVfc2l6ZSk7CkBAIC02NDgsOSArNjQ4LDkgQEAKIAlpZiAoaWE2NF9wYWxfZnJlcV9yYXRpb3MoJnByb2MsICZidXMsICZpdGMpICE9IDApIHJldHVybiAwOwogCiAJcCArPSBzcHJpbnRmKHAsCi0JCSAgICAgIlByb2Nlc3Nvci9DbG9jayByYXRpbyAgIDogJWxkLyVsZFxuIgotCQkgICAgICJCdXMvQ2xvY2sgcmF0aW8gICAgICAgICA6ICVsZC8lbGRcbiIKLQkJICAgICAiSVRDL0Nsb2NrIHJhdGlvICAgICAgICAgOiAlbGQvJWxkXG4iLAorCQkgICAgICJQcm9jZXNzb3IvQ2xvY2sgcmF0aW8gICA6ICVkLyVkXG4iCisJCSAgICAgIkJ1cy9DbG9jayByYXRpbyAgICAgICAgIDogJWQvJWRcbiIKKwkJICAgICAiSVRDL0Nsb2NrIHJhdGlvICAgICAgICAgOiAlZC8lZFxuIiwKIAkJICAgICBwcm9jLm51bSwgcHJvYy5kZW4sIGJ1cy5udW0sIGJ1cy5kZW4sIGl0Yy5udW0sIGl0Yy5kZW4pOwogCiAJcmV0dXJuIHAgLSBwYWdlOwpAQCAtOTU5LDcgKzk1OSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYWxpbmZvX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKK3N0YXRpYyBpbnQgcGFsaW5mb19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAogCQkJCQkJCQl2b2lkICpoY3B1KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOTg4N2M4Ny4uZTYxZTE1ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCkBAIC0xNjQ0LDcgKzE2NDQsNyBAQAogCQkJYXJjaCA9IEFVRElUX0FSQ0hfSUE2NDsKIAkJfQogCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgYXJjaCwgc3lzY2FsbCwgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7CisJCWF1ZGl0X3N5c2NhbGxfZW50cnkoYXJjaCwgc3lzY2FsbCwgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7CiAJfQogCiB9CkBAIC0xNjYyLDcgKzE2NjIsNyBAQAogCiAJCWlmIChzdWNjZXNzICE9IEFVRElUU0NfU1VDQ0VTUykKIAkJCXJlc3VsdCA9IC1yZXN1bHQ7Ci0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBzdWNjZXNzLCByZXN1bHQpOworCQlhdWRpdF9zeXNjYWxsX2V4aXQoc3VjY2VzcywgcmVzdWx0KTsKIAl9CiAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMKaW5kZXggOWQ1YTgyMy4uNjYzYTE4NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMKQEAgLTU3Miw3ICs1NzIsNyBAQAogfTsKIAogI2lmZGVmCUNPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIGludCBfX2RldmluaXQKK3N0YXRpYyBpbnQKIHNhbGluZm9fY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBpLCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwppbmRleCBhYzE2NzQzLi40OTk1ODkwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJaXRjX2ZyZXEgPSAocGxhdGZvcm1fYmFzZV9mcmVxKml0Y19yYXRpby5udW0pL2l0Y19yYXRpby5kZW47CiAKIAlsb2NhbF9jcHVfZGF0YS0+aXRtX2RlbHRhID0gKGl0Y19mcmVxICsgSFovMikgLyBIWjsKLQlwcmludGsoS0VSTl9ERUJVRyAiQ1BVICVkOiBiYXNlIGZyZXE9JWx1LiUwM2x1TUh6LCBJVEMgcmF0aW89JWx1LyVsdSwgIgorCXByaW50ayhLRVJOX0RFQlVHICJDUFUgJWQ6IGJhc2UgZnJlcT0lbHUuJTAzbHVNSHosIElUQyByYXRpbz0ldS8ldSwgIgogCSAgICAgICAiSVRDIGZyZXE9JWx1LiUwM2x1TUh6Iiwgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCSAgICAgICBwbGF0Zm9ybV9iYXNlX2ZyZXEgLyAxMDAwMDAwLCAocGxhdGZvcm1fYmFzZV9mcmVxIC8gMTAwMCkgJSAxMDAwLAogCSAgICAgICBpdGNfcmF0aW8ubnVtLCBpdGNfcmF0aW8uZGVuLCBpdGNfZnJlcSAvIDEwMDAwMDAsIChpdGNfZnJlcSAvIDEwMDApICUgMTAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggM2I2ZmQ3OS4uNGYzYTE2YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtOSw2ICs5LDggQEAKICAqIAkJMjAwMi8wOC8wNyBFcmljaCBGb2NodCA8ZWZvY2h0QGVzcy5uZWMuZGU+CiAgKiBQb3B1bGF0ZSBjcHUgZW50cmllcyBpbiBzeXNmcyBmb3Igbm9uLW51bWEgc3lzdGVtcyBhcyB3ZWxsCiAgKiAgCUludGVsIENvcnBvcmF0aW9uIC0gQXNob2sgUmFqCisgKiAwMi8yNy8yMDA2IFpoYW5nLCBZYW5taW4KKyAqCVBvcHVsYXRlIGNwdSBjYWNoZSBlbnRyaWVzIGluIHN5c2ZzIGZvciBjcHUgY2FjaGUgaW5mbwogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTE5LDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xMDEsMyArMTA0LDM2NCBAQAogfQogCiBzdWJzeXNfaW5pdGNhbGwodG9wb2xvZ3lfaW5pdCk7CisKKworLyoKKyAqIEV4cG9ydCBjcHUgY2FjaGUgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcworICovCisKKy8qCisgKiAgQSBidW5jaCBvZiBzdHJpbmcgYXJyYXkgdG8gZ2V0IHByZXR0eSBwcmludGluZworICovCitzdGF0aWMgY29uc3QgY2hhciAqY2FjaGVfdHlwZXNbXSA9IHsKKwkiIiwJCQkvKiBub3QgdXNlZCAqLworCSJJbnN0cnVjdGlvbiIsCisJIkRhdGEiLAorCSJVbmlmaWVkIgkvKiB1bmlmaWVkICovCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY2FjaGVfbWF0dHJpYltdPXsKKwkiV3JpdGVUaHJvdWdoIiwKKwkiV3JpdGVCYWNrIiwKKwkiIiwJCS8qIHJlc2VydmVkICovCisJIiIJCS8qIHJlc2VydmVkICovCit9OworCitzdHJ1Y3QgY2FjaGVfaW5mbyB7CisJcGFsX2NhY2hlX2NvbmZpZ19pbmZvX3QJY2NpOworCWNwdW1hc2tfdCBzaGFyZWRfY3B1X21hcDsKKwlpbnQgbGV2ZWw7CisJaW50IHR5cGU7CisJc3RydWN0IGtvYmplY3Qga29iajsKK307CisKK3N0cnVjdCBjcHVfY2FjaGVfaW5mbyB7CisJc3RydWN0IGNhY2hlX2luZm8gKmNhY2hlX2xlYXZlczsKKwlpbnQJbnVtX2NhY2hlX2xlYXZlczsKKwlzdHJ1Y3Qga29iamVjdCBrb2JqOworfTsKKworc3RhdGljIHN0cnVjdCBjcHVfY2FjaGVfaW5mbwlhbGxfY3B1X2NhY2hlX2luZm9bTlJfQ1BVU107CisjZGVmaW5lIExFQUZfS09CSkVDVF9QVFIoeCx5KSAgICAoJmFsbF9jcHVfY2FjaGVfaW5mb1t4XS5jYWNoZV9sZWF2ZXNbeV0pCisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBjYWNoZV9zaGFyZWRfY3B1X21hcF9zZXR1cCggdW5zaWduZWQgaW50IGNwdSwKKwkJc3RydWN0IGNhY2hlX2luZm8gKiB0aGlzX2xlYWYpCit7CisJcGFsX2NhY2hlX3NoYXJlZF9pbmZvX3QJY3NpOworCWludCBudW1fc2hhcmVkLCBpID0gMDsKKwl1bnNpZ25lZCBpbnQgajsKKworCWlmIChjcHVfZGF0YShjcHUpLT50aHJlYWRzX3Blcl9jb3JlIDw9IDEgJiYKKwkJY3B1X2RhdGEoY3B1KS0+Y29yZXNfcGVyX3NvY2tldCA8PSAxKSB7CisJCWNwdV9zZXQoY3B1LCB0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpYTY0X3BhbF9jYWNoZV9zaGFyZWRfaW5mbyh0aGlzX2xlYWYtPmxldmVsLAorCQkJCQl0aGlzX2xlYWYtPnR5cGUsCisJCQkJCTAsCisJCQkJCSZjc2kpICE9IFBBTF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuOworCisJbnVtX3NoYXJlZCA9IChpbnQpIGNzaS5udW1fc2hhcmVkOworCWRvIHsKKwkJZm9yX2VhY2hfY3B1KGopCisJCQlpZiAoY3B1X2RhdGEoY3B1KS0+c29ja2V0X2lkID09IGNwdV9kYXRhKGopLT5zb2NrZXRfaWQKKwkJCQkmJiBjcHVfZGF0YShqKS0+Y29yZV9pZCA9PSBjc2kubG9nMV9jaWQKKwkJCQkmJiBjcHVfZGF0YShqKS0+dGhyZWFkX2lkID09IGNzaS5sb2cxX3RpZCkKKwkJCQljcHVfc2V0KGosIHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApOworCisJCWkrKzsKKwl9IHdoaWxlIChpIDwgbnVtX3NoYXJlZCAmJgorCQlpYTY0X3BhbF9jYWNoZV9zaGFyZWRfaW5mbyh0aGlzX2xlYWYtPmxldmVsLAorCQkJCXRoaXNfbGVhZi0+dHlwZSwKKwkJCQlpLAorCQkJCSZjc2kpID09IFBBTF9TVEFUVVNfU1VDQ0VTUyk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgY2FjaGVfc2hhcmVkX2NwdV9tYXBfc2V0dXAodW5zaWduZWQgaW50IGNwdSwKKwkJc3RydWN0IGNhY2hlX2luZm8gKiB0aGlzX2xlYWYpCit7CisJY3B1X3NldChjcHUsIHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApOworCXJldHVybjsKK30KKyNlbmRpZgorCitzdGF0aWMgc3NpemVfdCBzaG93X2NvaGVyZW5jeV9saW5lX3NpemUoc3RydWN0IGNhY2hlX2luZm8gKnRoaXNfbGVhZiwKKwkJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAxIDw8IHRoaXNfbGVhZi0+Y2NpLnBjY2lfbGluZV9zaXplKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd193YXlzX29mX2Fzc29jaWF0aXZpdHkoc3RydWN0IGNhY2hlX2luZm8gKnRoaXNfbGVhZiwKKwkJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB0aGlzX2xlYWYtPmNjaS5wY2NpX2Fzc29jKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hdHRyaWJ1dGVzKHN0cnVjdCBjYWNoZV9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsCisJCQkiJXNcbiIsCisJCQljYWNoZV9tYXR0cmliW3RoaXNfbGVhZi0+Y2NpLnBjY2lfY2FjaGVfYXR0cl0pOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3NpemUoc3RydWN0IGNhY2hlX2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1S1xuIiwgdGhpc19sZWFmLT5jY2kucGNjaV9jYWNoZV9zaXplIC8gMTAyNCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbnVtYmVyX29mX3NldHMoc3RydWN0IGNhY2hlX2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQoreworCXVuc2lnbmVkIG51bWJlcl9vZl9zZXRzID0gdGhpc19sZWFmLT5jY2kucGNjaV9jYWNoZV9zaXplOworCW51bWJlcl9vZl9zZXRzIC89IHRoaXNfbGVhZi0+Y2NpLnBjY2lfYXNzb2M7CisJbnVtYmVyX29mX3NldHMgLz0gMSA8PCB0aGlzX2xlYWYtPmNjaS5wY2NpX2xpbmVfc2l6ZTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBudW1iZXJfb2Zfc2V0cyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2hhcmVkX2NwdV9tYXAoc3RydWN0IGNhY2hlX2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQoreworCXNzaXplX3QJbGVuOworCWNwdW1hc2tfdCBzaGFyZWRfY3B1X21hcDsKKworCWNwdXNfYW5kKHNoYXJlZF9jcHVfbWFwLCB0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwLCBjcHVfb25saW5lX21hcCk7CisJbGVuID0gY3B1bWFza19zY25wcmludGYoYnVmLCBOUl9DUFVTKzEsIHNoYXJlZF9jcHVfbWFwKTsKKwlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiXG4iKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3R5cGUoc3RydWN0IGNhY2hlX2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQoreworCWludCB0eXBlID0gdGhpc19sZWFmLT50eXBlICsgdGhpc19sZWFmLT5jY2kucGNjaV91bmlmaWVkOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjYWNoZV90eXBlc1t0eXBlXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbGV2ZWwoc3RydWN0IGNhY2hlX2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB0aGlzX2xlYWYtPmxldmVsKTsKK30KKworc3RydWN0IGNhY2hlX2F0dHIgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGNhY2hlX2luZm8gKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBjYWNoZV9pbmZvICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90IGNvdW50KTsKK307CisKKyNpZmRlZiBkZWZpbmVfb25lX3JvCisJI3VuZGVmIGRlZmluZV9vbmVfcm8KKyNlbmRpZgorI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKSBcCisJc3RhdGljIHN0cnVjdCBjYWNoZV9hdHRyIF9uYW1lID0gXAorX19BVFRSKF9uYW1lLCAwNDQ0LCBzaG93XyMjX25hbWUsIE5VTEwpCisKK2RlZmluZV9vbmVfcm8obGV2ZWwpOworZGVmaW5lX29uZV9ybyh0eXBlKTsKK2RlZmluZV9vbmVfcm8oY29oZXJlbmN5X2xpbmVfc2l6ZSk7CitkZWZpbmVfb25lX3JvKHdheXNfb2ZfYXNzb2NpYXRpdml0eSk7CitkZWZpbmVfb25lX3JvKHNpemUpOworZGVmaW5lX29uZV9ybyhudW1iZXJfb2Zfc2V0cyk7CitkZWZpbmVfb25lX3JvKHNoYXJlZF9jcHVfbWFwKTsKK2RlZmluZV9vbmVfcm8oYXR0cmlidXRlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogY2FjaGVfZGVmYXVsdF9hdHRyc1tdID0geworCSZ0eXBlLmF0dHIsCisJJmxldmVsLmF0dHIsCisJJmNvaGVyZW5jeV9saW5lX3NpemUuYXR0ciwKKwkmd2F5c19vZl9hc3NvY2lhdGl2aXR5LmF0dHIsCisJJmF0dHJpYnV0ZXMuYXR0ciwKKwkmc2l6ZS5hdHRyLAorCSZudW1iZXJfb2Zfc2V0cy5hdHRyLAorCSZzaGFyZWRfY3B1X21hcC5hdHRyLAorCU5VTEwKK307CisKKyNkZWZpbmUgdG9fb2JqZWN0KGspIGNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgY2FjaGVfaW5mbywga29iaikKKyNkZWZpbmUgdG9fYXR0cihhKSBjb250YWluZXJfb2YoYSwgc3RydWN0IGNhY2hlX2F0dHIsIGF0dHIpCisKK3N0YXRpYyBzc2l6ZV90IGNhY2hlX3Nob3coc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwgY2hhciAqIGJ1ZikKK3sKKwlzdHJ1Y3QgY2FjaGVfYXR0ciAqZmF0dHIgPSB0b19hdHRyKGF0dHIpOworCXN0cnVjdCBjYWNoZV9pbmZvICp0aGlzX2xlYWYgPSB0b19vYmplY3Qoa29iaik7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSBmYXR0ci0+c2hvdyA/IGZhdHRyLT5zaG93KHRoaXNfbGVhZiwgYnVmKSA6IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgY2FjaGVfc3lzZnNfb3BzID0geworCS5zaG93ICAgPSBjYWNoZV9zaG93Cit9OworCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBjYWNoZV9rdHlwZSA9IHsKKwkuc3lzZnNfb3BzCT0gJmNhY2hlX3N5c2ZzX29wcywKKwkuZGVmYXVsdF9hdHRycwk9IGNhY2hlX2RlZmF1bHRfYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBjYWNoZV9rdHlwZV9wZXJjcHVfZW50cnkgPSB7CisJLnN5c2ZzX29wcwk9ICZjYWNoZV9zeXNmc19vcHMsCit9OworCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgY3B1X2NhY2hlX3N5c2ZzX2V4aXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlrZnJlZShhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5jYWNoZV9sZWF2ZXMpOworCWFsbF9jcHVfY2FjaGVfaW5mb1tjcHVdLmNhY2hlX2xlYXZlcyA9IE5VTEw7CisJYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ubnVtX2NhY2hlX2xlYXZlcyA9IDA7CisJbWVtc2V0KCZhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5rb2JqLCAwLCBzaXplb2Yoc3RydWN0IGtvYmplY3QpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgX19jcHVpbml0IGNwdV9jYWNoZV9zeXNmc19pbml0KHVuc2lnbmVkIGludCBjcHUpCit7CisJdTY0IGksIGxldmVscywgdW5pcXVlX2NhY2hlczsKKwlwYWxfY2FjaGVfY29uZmlnX2luZm9fdCBjY2k7CisJaW50IGo7CisJczY0IHN0YXR1czsKKwlzdHJ1Y3QgY2FjaGVfaW5mbyAqdGhpc19jYWNoZTsKKwlpbnQgbnVtX2NhY2hlX2xlYXZlcyA9IDA7CisKKwlpZiAoKHN0YXR1cyA9IGlhNjRfcGFsX2NhY2hlX3N1bW1hcnkoJmxldmVscywgJnVuaXF1ZV9jYWNoZXMpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaWE2NF9wYWxfY2FjaGVfc3VtbWFyeT0lbGRcbiIsIHN0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9CisKKwl0aGlzX2NhY2hlPWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjYWNoZV9pbmZvKSp1bmlxdWVfY2FjaGVzLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHRoaXNfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGk9MDsgaSA8IGxldmVsczsgaSsrKSB7CisJCWZvciAoaj0yOyBqID4wIDsgai0tKSB7CisJCQlpZiAoKHN0YXR1cz1pYTY0X3BhbF9jYWNoZV9jb25maWdfaW5mbyhpLGosICZjY2kpKSAhPQorCQkJCQlQQUxfU1RBVFVTX1NVQ0NFU1MpCisJCQkJY29udGludWU7CisKKwkJCXRoaXNfY2FjaGVbbnVtX2NhY2hlX2xlYXZlc10uY2NpID0gY2NpOworCQkJdGhpc19jYWNoZVtudW1fY2FjaGVfbGVhdmVzXS5sZXZlbCA9IGkgKyAxOworCQkJdGhpc19jYWNoZVtudW1fY2FjaGVfbGVhdmVzXS50eXBlID0gajsKKworCQkJY2FjaGVfc2hhcmVkX2NwdV9tYXBfc2V0dXAoY3B1LAorCQkJCQkmdGhpc19jYWNoZVtudW1fY2FjaGVfbGVhdmVzXSk7CisJCQludW1fY2FjaGVfbGVhdmVzICsrOworCQl9CisJfQorCisJYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0uY2FjaGVfbGVhdmVzID0gdGhpc19jYWNoZTsKKwlhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5udW1fY2FjaGVfbGVhdmVzID0gbnVtX2NhY2hlX2xlYXZlczsKKworCW1lbXNldCgmYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ua29iaiwgMCwgc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQWRkIGNhY2hlIGludGVyZmFjZSBmb3IgQ1BVIGRldmljZSAqLworc3RhdGljIGludCBfX2NwdWluaXQgY2FjaGVfYWRkX2RldihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c19kZXYpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOworCXVuc2lnbmVkIGxvbmcgaSwgajsKKwlzdHJ1Y3QgY2FjaGVfaW5mbyAqdGhpc19vYmplY3Q7CisJaW50IHJldHZhbCA9IDA7CisJY3B1bWFza190IG9sZG1hc2s7CisKKwlpZiAoYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ua29iai5wYXJlbnQpCisJCXJldHVybiAwOworCisJb2xkbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKKwlyZXR2YWwgPSBzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCWlmICh1bmxpa2VseShyZXR2YWwpKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gY3B1X2NhY2hlX3N5c2ZzX2luaXQoY3B1KTsKKwlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZG1hc2spOworCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWFsbF9jcHVfY2FjaGVfaW5mb1tjcHVdLmtvYmoucGFyZW50ID0gJnN5c19kZXYtPmtvYmo7CisJa29iamVjdF9zZXRfbmFtZSgmYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ua29iaiwgIiVzIiwgImNhY2hlIik7CisJYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ua29iai5rdHlwZSA9ICZjYWNoZV9rdHlwZV9wZXJjcHVfZW50cnk7CisJcmV0dmFsID0ga29iamVjdF9yZWdpc3RlcigmYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ua29iaik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ubnVtX2NhY2hlX2xlYXZlczsgaSsrKSB7CisJCXRoaXNfb2JqZWN0ID0gTEVBRl9LT0JKRUNUX1BUUihjcHUsaSk7CisJCXRoaXNfb2JqZWN0LT5rb2JqLnBhcmVudCA9ICZhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5rb2JqOworCQlrb2JqZWN0X3NldF9uYW1lKCYodGhpc19vYmplY3QtPmtvYmopLCAiaW5kZXglMWx1IiwgaSk7CisJCXRoaXNfb2JqZWN0LT5rb2JqLmt0eXBlID0gJmNhY2hlX2t0eXBlOworCQlyZXR2YWwgPSBrb2JqZWN0X3JlZ2lzdGVyKCYodGhpc19vYmplY3QtPmtvYmopKTsKKwkJaWYgKHVubGlrZWx5KHJldHZhbCkpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCQlrb2JqZWN0X3VucmVnaXN0ZXIoCisJCQkJCSYoTEVBRl9LT0JKRUNUX1BUUihjcHUsaiktPmtvYmopKTsKKwkJCX0KKwkJCWtvYmplY3RfdW5yZWdpc3RlcigmYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ua29iaik7CisJCQljcHVfY2FjaGVfc3lzZnNfZXhpdChjcHUpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogUmVtb3ZlIGNhY2hlIGludGVyZmFjZSBmb3IgQ1BVIGRldmljZSAqLworc3RhdGljIGludCBfX2NwdWluaXQgY2FjaGVfcmVtb3ZlX2RldihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c19kZXYpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5udW1fY2FjaGVfbGVhdmVzOyBpKyspCisJCWtvYmplY3RfdW5yZWdpc3RlcigmKExFQUZfS09CSkVDVF9QVFIoY3B1LGkpLT5rb2JqKSk7CisKKwlpZiAoYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ua29iai5wYXJlbnQpIHsKKwkJa29iamVjdF91bnJlZ2lzdGVyKCZhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5rb2JqKTsKKwkJbWVtc2V0KCZhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5rb2JqLAorCQkJMCwKKwkJCXNpemVvZihzdHJ1Y3Qga29iamVjdCkpOworCX0KKworCWNwdV9jYWNoZV9zeXNmc19leGl0KGNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdoZW4gYSBjcHUgaXMgaG90LXBsdWdnZWQsIGRvIGEgY2hlY2sgYW5kIGluaXRpYXRlCisgKiBjYWNoZSBrb2JqZWN0IGlmIG5lY2Vzc2FyeQorICovCitzdGF0aWMgaW50IGNhY2hlX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisJc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXY7CisKKwlzeXNfZGV2ID0gZ2V0X2NwdV9zeXNkZXYoY3B1KTsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX09OTElORToKKwkJY2FjaGVfYWRkX2RldihzeXNfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfREVBRDoKKwkJY2FjaGVfcmVtb3ZlX2RldihzeXNfZGV2KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2FjaGVfY3B1X25vdGlmaWVyID0KK3sKKwkubm90aWZpZXJfY2FsbCA9IGNhY2hlX2NwdV9jYWxsYmFjaworfTsKKworc3RhdGljIGludCBfX2NwdWluaXQgY2FjaGVfc3lzZnNfaW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWNhY2hlX2NwdV9jYWxsYmFjaygmY2FjaGVfY3B1X25vdGlmaWVyLCBDUFVfT05MSU5FLAorCQkJCSh2b2lkICopKGxvbmcpaSk7CisJfQorCisJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjYWNoZV9jcHVfbm90aWZpZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2RldmljZV9pbml0Y2FsbChjYWNoZV9zeXNmc19pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9tZW1jcHlfbWNrLlMgYi9hcmNoL2lhNjQvbGliL21lbWNweV9tY2suUwppbmRleCA0NmM5MzMxLi45ZTUzNGQ1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbGliL21lbWNweV9tY2suUworKysgYi9hcmNoL2lhNjQvbGliL21lbWNweV9tY2suUwpAQCAtNiw3ICs2LDkgQEAKICAqCWluMToJc291cmNlIGFkZHJlc3MKICAqCWluMjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKICAqIE91dHB1dDoKLSAqIAkwIGlmIHN1Y2Nlc3MsIG9yIG51bWJlciBvZiBieXRlIE5PVCBjb3BpZWQgaWYgZXJyb3Igb2NjdXJyZWQuCisgKglmb3IgbWVtY3B5OiAgICByZXR1cm4gZGVzdAorICogCWZvciBjb3B5X3VzZXI6IHJldHVybiAwIGlmIHN1Y2Nlc3MsCisgKgkJICAgICAgIG9yIG51bWJlciBvZiBieXRlIE5PVCBjb3BpZWQgaWYgZXJyb3Igb2NjdXJyZWQuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnAuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgS2VuIENoZW4gPGtlbm5ldGgudy5jaGVuQGludGVsLmNvbT4KQEAgLTczLDYgKzc1LDcgQEAKIAlhbmQJcjI4PTB4NyxpbjAKIAlhbmQJcjI5PTB4NyxpbjEKIAltb3YJZjY9ZjAKKwltb3YJcmV0dmFsPWluMAogCWJyLmNvbmQuc3B0ayAuY29tbW9uX2NvZGUKIAk7OwogRU5EKG1lbWNweSkKQEAgLTg0LDcgKzg3LDcgQEAKIAltb3YJZjY9ZjEKIAltb3YJc2F2ZWRfaW4wPWluMAkvLyBzYXZlIGRlc3QgcG9pbnRlcgogCW1vdglzYXZlZF9pbjE9aW4xCS8vIHNhdmUgc3JjIHBvaW50ZXIKLQltb3YJc2F2ZWRfaW4yPWluMgkvLyBzYXZlIGxlbgorCW1vdglyZXR2YWw9cjAJLy8gaW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUKIAk7OwogLmNvbW1vbl9jb2RlOgogCWNtcC5ndAlwMTUscDA9OCxpbjIJLy8gY2hlY2sgZm9yIHNtYWxsIHNpemUKQEAgLTkyLDcgKzk1LDcgQEAKIAljbXAubmUJcDE0LHAwPTAscjI5CS8vIGNoZWNrIHNyYyBhbGlnbm1lbnQKIAlhZGQJc3JjMD0wLGluMQogCXN1YglyMzA9OCxyMjgJLy8gZm9yIC5hbGlnbl9kZXN0Ci0JbW92CXJldHZhbD1yMAkvLyBpbml0aWFsaXplIHJldHVybiB2YWx1ZQorCW1vdglzYXZlZF9pbjI9aW4yCS8vIHNhdmUgbGVuCiAJOzsKIAlhZGQJZHN0MD0wLGluMAogCWFkZAlkc3QxPTEsaW4wCS8vIGRlc3Qgb2RkIGluZGV4CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKaW5kZXggZWM5ZWViOC4uYjZiY2M5ZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwpAQCAtNTE5LDYgKzUxOSw2OCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF92YWxpZF9wZm5fZm9yX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBpKQoreworCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHJlc3MsIGhvbGVfbmV4dF9wZm47CisJdW5zaWduZWQgbG9uZyBzdG9wX2FkZHJlc3M7CisKKwllbmRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSAmdm1lbV9tYXBbcGdkYXQtPm5vZGVfc3RhcnRfcGZuICsgaV07CisJZW5kX2FkZHJlc3MgPSBQQUdFX0FMSUdOKGVuZF9hZGRyZXNzKTsKKworCXN0b3BfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSAmdm1lbV9tYXBbCisJCXBnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXNdOworCisJZG8geworCQlwZ2RfdCAqcGdkOworCQlwdWRfdCAqcHVkOworCQlwbWRfdCAqcG1kOworCQlwdGVfdCAqcHRlOworCisJCXBnZCA9IHBnZF9vZmZzZXRfayhlbmRfYWRkcmVzcyk7CisJCWlmIChwZ2Rfbm9uZSgqcGdkKSkgeworCQkJZW5kX2FkZHJlc3MgKz0gUEdESVJfU0laRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHVkID0gcHVkX29mZnNldChwZ2QsIGVuZF9hZGRyZXNzKTsKKwkJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CisJCQllbmRfYWRkcmVzcyArPSBQVURfU0laRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcG1kID0gcG1kX29mZnNldChwdWQsIGVuZF9hZGRyZXNzKTsKKwkJaWYgKHBtZF9ub25lKCpwbWQpKSB7CisJCQllbmRfYWRkcmVzcyArPSBQTURfU0laRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBlbmRfYWRkcmVzcyk7CityZXRyeV9wdGU6CisJCWlmIChwdGVfbm9uZSgqcHRlKSkgeworCQkJZW5kX2FkZHJlc3MgKz0gUEFHRV9TSVpFOworCQkJcHRlKys7CisJCQlpZiAoKGVuZF9hZGRyZXNzIDwgc3RvcF9hZGRyZXNzKSAmJgorCQkJICAgIChlbmRfYWRkcmVzcyAhPSBBTElHTihlbmRfYWRkcmVzcywgMVVMIDw8IFBNRF9TSElGVCkpKQorCQkJCWdvdG8gcmV0cnlfcHRlOworCQkJY29udGludWU7CisJCX0KKwkJLyogRm91bmQgbmV4dCB2YWxpZCB2bWVtX21hcCBwYWdlICovCisJCWJyZWFrOworCX0gd2hpbGUgKGVuZF9hZGRyZXNzIDwgc3RvcF9hZGRyZXNzKTsKKworCWVuZF9hZGRyZXNzID0gbWluKGVuZF9hZGRyZXNzLCBzdG9wX2FkZHJlc3MpOworCWVuZF9hZGRyZXNzID0gZW5kX2FkZHJlc3MgLSAodW5zaWduZWQgbG9uZykgdm1lbV9tYXAgKyBzaXplb2Yoc3RydWN0IHBhZ2UpIC0gMTsKKwlob2xlX25leHRfcGZuID0gZW5kX2FkZHJlc3MgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOworCXJldHVybiBob2xlX25leHRfcGZuIC0gcGdkYXQtPm5vZGVfc3RhcnRfcGZuOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF92YWxpZF9wZm5fZm9yX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBpKQoreworCXJldHVybiBpICsgMTsKK30KKyNlbmRpZgorCiAvKioKICAqIHNob3dfbWVtIC0gZ2l2ZSBzaG9ydCBzdW1tYXJ5IG9mIG1lbW9yeSBzdGF0cwogICoKQEAgLTU0Nyw4ICs2MDksMTAgQEAKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwogCQkJaWYgKHBmbl92YWxpZChwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBpKSkKIAkJCQlwYWdlID0gcGZuX3RvX3BhZ2UocGdkYXQtPm5vZGVfc3RhcnRfcGZuICsgaSk7Ci0JCQllbHNlCisJCQllbHNlIHsKKwkJCQlpID0gZmluZF9uZXh0X3ZhbGlkX3Bmbl9mb3JfcGdkYXQocGdkYXQsIGkpIC0gMTsKIAkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJcmVzZXJ2ZWQrKzsKIAkJCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZmF1bHQuYyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCmluZGV4IGFmN2ViMDguLmQ5OGVjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCkBAIC02MCw2ICs2MCw5IEBACiAJc3RydWN0IHNpZ2luZm8gc2k7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCisJLyogbW1hcF9zZW0gaXMgcGVyZm9ybWFuY2UgY3JpdGljYWwuLi4uICovCisJcHJlZmV0Y2h3KCZtbS0+bW1hcF9zZW0pOworCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQgb3IgaGF2ZSBubyB1c2VyIGNvbnRleHQsIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0Li4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDliYTMyYjIuLmFiODI5YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAKLQogLyoKICAqIExvdy1sZXZlbCBTQUwtYmFzZWQgUENJIGNvbmZpZ3VyYXRpb24gYWNjZXNzIGZ1bmN0aW9ucy4gTm90ZSB0aGF0IFNBTAogICogY2FsbHMgYXJlIGFscmVhZHkgc2VyaWFsaXplZCAodmlhIHNhbF9sb2NrKSwgc28gd2UgZG9uJ3QgbmVlZCBhbm90aGVyCkBAIC03MDcsNyArNzA2LDcgQEAKICAqCiAgKiBTaW1wbHkgd3JpdGVzIEBzaXplIGJ5dGVzIG9mIEB2YWwgdG8gQHBvcnQuCiAgKi8KLWludCBpYTY0X3BjaV9sZWdhY3lfd3JpdGUoc3RydWN0IHBjaV9kZXYgKmJ1cywgdTE2IHBvcnQsIHUzMiB2YWwsIHU4IHNpemUpCitpbnQgaWE2NF9wY2lfbGVnYWN5X3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIHUxNiBwb3J0LCB1MzIgdmFsLCB1OCBzaXplKQogewogCWludCByZXQgPSBzaXplOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCmluZGV4IGQ5MTdhZmEuLjczOWM5NDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCkBAIC0yODQsNiArMjg0LDggQEAKIAkvKiBmaW5kIG5lYXJlc3Qgbm9kZSB3aXRoIGNwdXMgYW5kIG5lYXJlc3QgbWVtb3J5ICovCiAJZm9yIChyb3V0ZXI9TlVMTCwgaj0wOyBqIDwgb3AtPnBvcnRzOyBqKyspIHsKIAkJZGVzdCA9IHNuX2h3cGVyZl9maW5kb2JqX2lkKG9iamJ1Ziwgbm9iaiwgcHRkYXRhW2pdLmNvbm5faWQpOworCQlpZiAoZGVzdCAmJiBTTl9IV1BFUkZfSVNfUk9VVEVSKGRlc3QpKQorCQkJcm91dGVyID0gZGVzdDsKIAkJaWYgKCFkZXN0IHx8IFNOX0hXUEVSRl9GT1JFSUdOKGRlc3QpIHx8CiAJCSAgICAhU05fSFdQRVJGX0lTX05PREUoZGVzdCkgfHwgU05fSFdQRVJGX0lTX0lPTk9ERShkZXN0KSkgewogCQkJY29udGludWU7CkBAIC0yOTksOCArMzAxLDYgQEAKIAkJCQkqbmVhcl9tZW1fbm9kZSA9IGM7CiAJCQlmb3VuZF9tZW0rKzsKIAkJfQotCQlpZiAoU05fSFdQRVJGX0lTX1JPVVRFUihkZXN0KSkKLQkJCXJvdXRlciA9IGRlc3Q7CiAJfQogCiAJaWYgKHJvdXRlciAmJiAoIWZvdW5kX2NwdSB8fCAhZm91bmRfbWVtKSkgewpAQCAtNDkzLDcgKzQ5Myw3IEBACiAJCSAqIG51bWFsaW5rIHBvcnRzCiAJCSAqLwogCQlzeiA9IG9iai0+cG9ydHMgKiBzaXplb2Yoc3RydWN0IHNuX2h3cGVyZl9wb3J0X2luZm8pOwotCQlpZiAoKHB0ZGF0YSA9IHZtYWxsb2Moc3opKSA9PSBOVUxMKQorCQlpZiAoKHB0ZGF0YSA9IGttYWxsb2Moc3osIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWUgPSBpYTY0X3NuX2h3cGVyZl9vcChzbl9od3BlcmZfbWFzdGVyX25hc2lkLAogCQkJCSAgICAgIFNOX0hXUEVSRl9FTlVNX1BPUlRTLCBvYmotPmlkLCBzeiwKQEAgLTU0MSw3ICs1NDEsNyBAQAogCQkJCShTTl9IV1BFUkZfSVNfTkwzUk9VVEVSKG9iaikgfHwKIAkJCQlTTl9IV1BFUkZfSVNfTkwzUk9VVEVSKHApKSA/ICAiTExQMyIgOiAiTExQNCIpOwogCQl9Ci0JCXZmcmVlKHB0ZGF0YSk7CisJCWtmcmVlKHB0ZGF0YSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKaW5kZXggZDBhYmRkZC4uODI1NWE5YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYwpAQCAtMTgzMSw3ICsxODMxLDcgQEAKIHsKIAlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOwogCWVudW0geHBjX3JldHZhbCByZXQgPSB4cGNVbmtub3duUmVhc29uOwotCXN0cnVjdCB4cGNfbXNnICptc2c7CisJc3RydWN0IHhwY19tc2cgKm1zZyA9IE5VTEw7CiAKIAogCURCVUdfT04ocGFydGlkIDw9IDAgfHwgcGFydGlkID49IFhQX01BWF9QQVJUSVRJT05TKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKaW5kZXggOTQyMTE0Mi4uMmE4OWNmYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKQEAgLTEzNiw5ICsxMzYsNyBAQAogCQl9CiAKIAkJaWYgKEwxX0NBQ0hFX0FMSUdOKGxlbikgPiBidWZfbGVuKSB7Ci0JCQlpZiAoYnVmX2Jhc2UgIT0gTlVMTCkgewotCQkJCWtmcmVlKGJ1Zl9iYXNlKTsKLQkJCX0KKwkJCWtmcmVlKGJ1Zl9iYXNlKTsKIAkJCWJ1Zl9sZW4gPSBMMV9DQUNIRV9BTElHTihsZW4pOwogCQkJYnVmID0gKHU2NCkgeHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoYnVmX2xlbiwKIAkJCQkJCQlHRlBfS0VSTkVMLCAmYnVmX2Jhc2UpOwpAQCAtMTU5LDkgKzE1Nyw3IEBACiAJCX0KIAl9CiAKLQlpZiAoYnVmX2Jhc2UgIT0gTlVMTCkgewotCQlrZnJlZShidWZfYmFzZSk7Ci0JfQorCWtmcmVlKGJ1Zl9iYXNlKTsKIAogCWlmIChzdGF0dXMgIT0gU0FMUkVUX09LKSB7CiAJCXJwX3BhID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwppbmRleCBmYTA3M2NjLi44MzMyOTU2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCkBAIC02ODIsOSArNjgyLDYgQEAKIAlpbnQgYXRlX2luZGV4LCBsYXN0X2F0ZSwgcHM7CiAJc3RydWN0IHRpb2NlICpjZV9tbXI7CiAKLQlpZiAoIVRJT0NFX00zMl9BRERSKGJhc2UpKQotCQlyZXR1cm47Ci0KIAljZV9tbXIgPSAoc3RydWN0IHRpb2NlICopY2Vfa2Vybi0+Y2VfY29tbW9uLT5jZV9wY2lidXMuYnNfYmFzZTsKIAlwcyA9IGNlX2tlcm4tPmNlX2F0ZTMyNDBfcGFnZXNpemU7CiAJYXRlX2luZGV4ID0gQVRFX1BBR0UoYmFzZSwgcHMpOwpAQCAtNjkzLDYgKzY5MCw5IEBACiAJaWYgKGF0ZV9pbmRleCA8IDY0KQogCQlhdGVfaW5kZXggPSA2NDsKIAorCWlmIChsYXN0X2F0ZSA+PSBUSU9DRV9OVU1fTTMyNDBfQVRFUykKKwkJbGFzdF9hdGUgPSBUSU9DRV9OVU1fTTMyNDBfQVRFUyAtIDE7CisKIAl3aGlsZSAoYXRlX2luZGV4IDw9IGxhc3RfYXRlKSB7CiAJCXU2NCBhdGU7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggMDVjODY0Yy4uNDFmZDQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTI4NSw2ICsyODUsMTEgQEAKIAlkZXBlbmRzIG9uIFNNUCAmJiBCUk9LRU4KIAlkZWZhdWx0IG4KIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiMSIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogIyB0dXJuaW5nIHRoaXMgb24gd2FzdGVzIGEgYnVuY2ggb2Ygc3BhY2UuCiAjIFN1bW1pdCBuZWVkcyBpdCBvbmx5IHdoZW4gTlVNQSBpcyBvbgogY29uZmlnIEJPT1RfSU9SRU1BUApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCmluZGV4IDM4NzFiNjUuLjkyMGJiNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFN0YWNrIGxheW91dCBpbiAncmV0X2Zyb21fc3lzdGVtX2NhbGwnOgogICogCXB0cmFjZSBuZWVkcyB0byBoYXZlIGFsbCByZWdzIG9uIHRoZSBzdGFjay4KICAqCWlmIHRoZSBvcmRlciBoZXJlIGlzIGNoYW5nZWQsIGl0IG5lZWRzIHRvIGJlCi0gKgl1cGRhdGVkIGluIGZvcmsuYzpjb3B5X3Byb2Nlc3MsIHNpZ25hbC5jOmRvX3NpZ25hbCwKKyAqCXVwZGF0ZWQgaW4gZm9yay5jOmNvcHlfdGhyZWFkLCBzaWduYWwuYzpkb19zaWduYWwsCiAgKglwdHJhY2UuYyBhbmQgcHRyYWNlLmgKICAqCiAgKiBNMzJSeC9NMzJSMgkJCQlNMzJSCkBAIC00MSwxOCArNDEsMTcgQEAKICAqICAgICAgIEAoMHgzOCxzcCkgLSBzeXNjYWxsX25yCWRpdHRvCiAgKiAgICAgICBAKDB4M2Msc3ApIC0gYWNjMGgJCUAoMHgzYyxzcCkgLSBhY2NoCiAgKiAgICAgICBAKDB4NDAsc3ApIC0gYWNjMGwJCUAoMHg0MCxzcCkgLSBhY2NsCi0gKiAgICAgICBAKDB4NDQsc3ApIC0gYWNjMWgJCUAoMHg0NCxzcCkgLSBwc3cKLSAqICAgICAgIEAoMHg0OCxzcCkgLSBhY2MxbAkJQCgweDQ4LHNwKSAtIGJwYwotICogICAgICAgQCgweDRjLHNwKSAtIHBzdwkJQCgweDRjLHNwKSAtIGJicHN3Ci0gKiAgICAgICBAKDB4NTAsc3ApIC0gYnBjCQlAKDB4NTAsc3ApIC0gYmJwYwotICogICAgICAgQCgweDU0LHNwKSAtIGJicHN3CQlAKDB4NTQsc3ApIC0gc3B1IChjcjMpCi0gKiAgICAgICBAKDB4NTgsc3ApIC0gYmJwYwkJQCgweDU4LHNwKSAtIGZwIChyMTMpCi0gKiAgICAgICBAKDB4NWMsc3ApIC0gc3B1IChjcjMpCQlAKDB4NWMsc3ApIC0gbHIgKHIxNCkKLSAqICAgICAgIEAoMHg2MCxzcCkgLSBmcCAocjEzKQkJQCgweDYwLHNwKSAtIHNwaSAoY3IxMikKLSAqICAgICAgIEAoMHg2NCxzcCkgLSBsciAocjE0KQkJQCgweDY0LHNwKSAtIG9yaWdfcjAKLSAqICAgICAgIEAoMHg2OCxzcCkgLSBzcGkgKGNyMikKLSAqICAgICAgIEAoMHg2YyxzcCkgLSBvcmlnX3IwCi0gKgorICogICAgICAgQCgweDQ0LHNwKSAtIGFjYzFoCQlAKDB4NDQsc3ApIC0gZHVtbXlfYWNjMWgKKyAqICAgICAgIEAoMHg0OCxzcCkgLSBhY2MxbAkJQCgweDQ4LHNwKSAtIGR1bW15X2FjYzFsCisgKiAgICAgICBAKDB4NGMsc3ApIC0gcHN3CQlkaXR0bworICogICAgICAgQCgweDUwLHNwKSAtIGJwYwkJZGl0dG8KKyAqICAgICAgIEAoMHg1NCxzcCkgLSBiYnBzdwkJZGl0dG8KKyAqICAgICAgIEAoMHg1OCxzcCkgLSBiYnBjCQlkaXR0bworICogICAgICAgQCgweDVjLHNwKSAtIHNwdSAoY3IzKQkJZGl0dG8KKyAqICAgICAgIEAoMHg2MCxzcCkgLSBmcCAocjEzKQkJZGl0dG8KKyAqICAgICAgIEAoMHg2NCxzcCkgLSBsciAocjE0KQkJZGl0dG8KKyAqICAgICAgIEAoMHg2OCxzcCkgLSBzcGkgKGNyMikJCWRpdHRvCisgKiAgICAgICBAKDB4NmMsc3ApIC0gb3JpZ19yMAkJZGl0dG8KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0xMDIsNiArMTAxLDEyIEBACiAjZGVmaW5lIEFDQzBMKHJlZykJCUAoMHg0MCxyZWcpCiAjZGVmaW5lIEFDQzFIKHJlZykJCUAoMHg0NCxyZWcpCiAjZGVmaW5lIEFDQzFMKHJlZykJCUAoMHg0OCxyZWcpCisjZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQorI2RlZmluZSBBQ0NIKHJlZykJCUAoMHgzQyxyZWcpCisjZGVmaW5lIEFDQ0wocmVnKQkJQCgweDQwLHJlZykKKyNlbHNlCisjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgorI2VuZGlmCiAjZGVmaW5lIFBTVyhyZWcpCQlAKDB4NEMscmVnKQogI2RlZmluZSBCUEMocmVnKQkJQCgweDUwLHJlZykKICNkZWZpbmUgQkJQU1cocmVnKQkJQCgweDU0LHJlZykKQEAgLTExMSwyMSArMTE2LDYgQEAKICNkZWZpbmUgTFIocmVnKQkJCUAoMHg2NCxyZWcpCiAjZGVmaW5lIFNQKHJlZykJCQlAKDB4NjgscmVnKQogI2RlZmluZSBPUklHX1IwKHJlZykJCUAoMHg2QyxyZWcpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQotI2RlZmluZSBBQ0NIKHJlZykJCUAoMHgzQyxyZWcpCi0jZGVmaW5lIEFDQ0wocmVnKQkJQCgweDQwLHJlZykKLSNkZWZpbmUgUFNXKHJlZykJCUAoMHg0NCxyZWcpCi0jZGVmaW5lIEJQQyhyZWcpCQlAKDB4NDgscmVnKQotI2RlZmluZSBCQlBTVyhyZWcpCQlAKDB4NEMscmVnKQotI2RlZmluZSBCQlBDKHJlZykJCUAoMHg1MCxyZWcpCi0jZGVmaW5lIFNQVShyZWcpCQlAKDB4NTQscmVnKQotI2RlZmluZSBGUChyZWcpCQkJQCgweDU4LHJlZykgIC8qIEZQID0gUjEzICovCi0jZGVmaW5lIExSKHJlZykJCQlAKDB4NUMscmVnKQotI2RlZmluZSBTUChyZWcpCQkJQCgweDYwLHJlZykKLSNkZWZpbmUgT1JJR19SMChyZWcpCQlAKDB4NjQscmVnKQotI2Vsc2UKLSNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCi0jZW5kaWYKIAogQ0ZfTUFTSwkJPSAweDAwMDAwMDAxCiBURl9NQVNLCQk9IDB4MDAwMDAxMDAKQEAgLTE0Miw3ICsxMzIsNyBAQAogI2VuZGlmCiAKIEVOVFJZKHJldF9mcm9tX2ZvcmspCi0JbGQJcjAsIEBzcCsKKwlwb3AJcjAKIAlibAlzY2hlZHVsZV90YWlsCiAJR0VUX1RIUkVBRF9JTkZPKHI4KQogCWJyYQlzeXNjYWxsX2V4aXQKQEAgLTIzMSw3ICsyMjEsNyBAQAogCVJFU1RPUkVfQUxMCiAKIAkjIHBlcmZvcm0gd29yayB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgaW1tZWRpYXRlbHkgYmVmb3JlIHJlc3VtcHRpb24KLQkjIHI5IDogZnJhZ3MKKwkjIHI5IDogZmxhZ3MKIAlBTElHTgogd29ya19wZW5kaW5nOgogCWFuZDMJcjQsIHI5LCAjX1RJRl9ORUVEX1JFU0NIRUQKQEAgLTMyMCw3ICszMTAsNyBAQAogOyAgICBHRVRfSUNVX1NUQVRVUzsKIAlzZXRoCXIwLCAjc2hpZ2goTTMyUl9JQ1VfSVNUU19BRERSKQogCWxkCXIwLCBAKGxvdyhNMzJSX0lDVV9JU1RTX0FERFIpLHIwKQotCXN0CXIwLCBALXNwCisJcHVzaAlyMAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKIAkvKgogCSAqIElmIElSUSA9PSAwICAgICAgLS0+IE5vdGhpbmcgdG8gZG8sICBOb3Qgd3JpdGUgSU1BU0sKQEAgLTU1Nyw3ICs1NDcsNyBAQAogI2VuZGlmICAvKiBDT05GSUdfUExBVF9NMzIxMDRVVCAqLwogCWJsCWRvX0lSUQogI2VuZGlmICAvKiBDT05GSUdfU01QICovCi0JbGQJcjE0LCBAc3ArCisJcG9wCXIxNAogCXNldGgJcjAsICNzaGlnaChNMzJSX0lDVV9JTUFTS19BRERSKQogCXN0CXIxNCwgQChsb3coTTMyUl9JQ1VfSU1BU0tfQUREUikscjApCiAjZWxzZQpAQCAtMTAxNSw0ICsxMDA1LDMgQEAKIAkubG9uZyBzeXNfd2FpdGlkCiAKIHN5c2NhbGxfdGFibGVfc2l6ZT0oLi1zeXNfY2FsbF90YWJsZSkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwppbmRleCBiZThiNzExLi5jNTAzMzBmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYworKysgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwpAQCAtMjMsOSArMjMsNiBAQAogRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CiBFWFBPUlRfU1lNQk9MKF9faW9yZW1hcCk7CiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwotRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxKTsKLUVYUE9SVF9TWU1CT0woZGlzYWJsZV9pcnEpOwotRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycV9ub3N5bmMpOwogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIEVYUE9SVF9TWU1CT0woX19kb3duKTsKIEVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwpAQCAtMzgsMTMgKzM1LDYgQEAKIEVYUE9SVF9TWU1CT0woX19kZWxheSk7CiBFWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKIAotRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzEpOwotRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzIpOwotRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzQpOwotCi1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwotRVhQT1JUX1NZTUJPTChzdHJzdHIpOwotCiBFWFBPUlRfU1lNQk9MKHN0cm5jcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0woX19zdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKGNsZWFyX3VzZXIpOwpAQCAtNTksMTEgKzQ5LDggQEAKIEVYUE9SVF9TWU1CT0woZGNhY2hlX2R1bW15KTsKICNlbmRpZgogRVhQT1JUX1NZTUJPTChjcHVfZGF0YSk7Ci1FWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKLUVYUE9SVF9TWU1CT0woY3B1X2NhbGxvdXRfbWFwKTsKIAogLyogR2xvYmFsIFNNUCBzdHVmZiAqLwotRVhQT1JUX1NZTUJPTChzeW5jaHJvbml6ZV9pcnEpOwogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbik7CiAKIC8qIFRMQiBmbHVzaGluZyAqLwpAQCAtODMsMjcgKzcwLDExIEBACiBFWFBPUlRfU1lNQk9MKF9fbXVsZGkzKTsKIAogLyogbWVtb3J5IGFuZCBzdHJpbmcgb3BlcmF0aW9ucyAqLwotRVhQT1JUX1NZTUJPTChtZW1jaHIpOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwotLyogRVhQT1JUX1NZTUJPTChtZW1jcHlfZnJvbWlvKTsgLy8gbm90IGltcGxlbWVudCB5ZXQgKi8KLS8qIEVYUE9SVF9TWU1CT0wobWVtY3B5X3RvaW8pOyAvLyBub3QgaW1wbGVtZW50IHlldCAqLwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwotLyogRVhQT1JUX1NZTUJPTChtZW1zZXRfaW8pOyAvLyBub3QgaW1wbGVtZW50IHlldCAqLwotRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKLUVYUE9SVF9TWU1CT0wobWVtY21wKTsKLUVYUE9SVF9TWU1CT0wobWVtc2Nhbik7CiBFWFBPUlRfU1lNQk9MKGNvcHlfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGNsZWFyX3BhZ2UpOwotCi1FWFBPUlRfU1lNQk9MKHN0cmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNocik7Ci1FWFBPUlRfU1lNQk9MKHN0cmNtcCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNweSk7CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jYXQpOwotRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKLUVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jcHkpOwogCiBFWFBPUlRfU1lNQk9MKF9pbmIpOwogRVhQT1JUX1NZTUJPTChfaW53KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWRmYzdlYS4uMDY1ZjVlNyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTExNiw2ICsxMTYsMTAgQEAKIAogdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqX191bnVzZWQpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCisJb3V0dygxLCAodW5zaWduZWQgbG9uZylQTERfUkVCT09UKTsKKyNlbmRpZgorCiAJcHJpbnRrKCJQbGVhc2UgcHVzaCByZXNldCBidXR0b24hXG4iKTsKIAl3aGlsZSAoMSkKIAkJY3B1X3JlbGF4KCk7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwLmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwLmMKaW5kZXggMGQ3ODk0Mi4uM2NkM2MyOSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXAuYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yMTksOCArMjIwLDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNldHVwX21lbW9yeSh2b2lkKTsKICNlbmRpZgkvKiBDT05GSUdfRElTQ09OVElHTUVNICovCiAKLSNkZWZpbmUgTTMyUl9QQ0NfUENBVENSCTB4MDBlZjcwMTQJLyogd2lsbCBtb3ZlIHRvIG0zMnIuaCAqLwotCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJUk9PVF9ERVYgPSBvbGRfZGVjb2RlX2RldihPUklHX1JPT1RfREVWKTsKQEAgLTI2OSwxNSArMjY4LDE0IEBACiAJcGFnaW5nX2luaXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjcHUgY3B1W05SX0NQVVNdOworc3RhdGljIHN0cnVjdCBjcHUgY3B1X2RldmljZXNbTlJfQ1BVU107CiAKIHN0YXRpYyBpbnQgX19pbml0IHRvcG9sb2d5X2luaXQodm9pZCkKIHsKLQlpbnQgY3B1X2lkOworCWludCBpOwogCi0JZm9yIChjcHVfaWQgPSAwOyBjcHVfaWQgPCBOUl9DUFVTOyBjcHVfaWQrKykKLQkJaWYgKGNwdV9wb3NzaWJsZShjcHVfaWQpKQotCQkJcmVnaXN0ZXJfY3B1KCZjcHVbY3B1X2lkXSwgY3B1X2lkLCBOVUxMKTsKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShpKQorCQlyZWdpc3Rlcl9jcHUoJmNwdV9kZXZpY2VzW2ldLCBpLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKaW5kZXggY2IzMzA5Ny4uNjQ5OGVlNyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NpZ25hbC5jCkBAIC0xMTgsNiArMTE4LDggQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgfHwgZGVmaW5lZChDT05GSUdfSVNBX00zMlIpCiAJQ09QWShhY2NoKTsKIAlDT1BZKGFjY2wpOworCUNPUFkoZHVtbXlfYWNjMWgpOworCUNPUFkoZHVtbXlfYWNjMWwpOwogI2Vsc2UKICNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCiAjZW5kaWYKQEAgLTIwMyw2ICsyMDUsOCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKIAlDT1BZKGFjY2gpOwogCUNPUFkoYWNjbCk7CisJQ09QWShkdW1teV9hY2MxaCk7CisJQ09QWShkdW1teV9hY2MxbCk7CiAjZWxzZQogI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwppbmRleCBkN2VjMTZlLi44NDBiNDM0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwpAQCAtMzksOCArMzksMTAgQEAKICAqCQlNYXJ0aW4gSi4gQmxpZ2gJOiAJQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGktcXVhZCBzeXN0ZW1zCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC03MiwxMSArNzQsMTUgQEAKIAogLyogQml0bWFzayBvZiBjdXJyZW50bHkgb25saW5lIENQVXMgKi8KIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKK0VYUE9SVF9TWU1CT0woY3B1X29ubGluZV9tYXApOwogCiBjcHVtYXNrX3QgY3B1X2Jvb3RvdXRfbWFwOwogY3B1bWFza190IGNwdV9ib290aW5fbWFwOwotY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKIHN0YXRpYyBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CitjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOworRVhQT1JUX1NZTUJPTChjcHVfY2FsbG91dF9tYXApOworY3B1bWFza190IGNwdV9wb3NzaWJsZV9tYXAgPSBDUFVfTUFTS19BTEw7CitFWFBPUlRfU1lNQk9MKGNwdV9wb3NzaWJsZV9tYXApOwogCiAvKiBQZXIgQ1BVIGJvZ29taXBzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgY3B1aW5mb19tMzJyIGNwdV9kYXRhW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CkBAIC0xMTAsNyArMTE2LDYgQEAKIAogdm9pZCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKTsKIHZvaWQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQpOwotc3RhdGljIHZvaWQgc21wX3R1bmVfc2NoZWR1bGluZyh2b2lkKTsKIHN0YXRpYyB2b2lkIGluaXRfaXBpX2xvY2sodm9pZCk7CiBzdGF0aWMgdm9pZCBkb19ib290X2NwdShpbnQpOwogaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCk7CkBAIC0xNzcsNiArMTgyLDkgQEAKIAl9CiAJZm9yIChwaHlzX2lkID0gMCA7IHBoeXNfaWQgPCBucl9jcHUgOyBwaHlzX2lkKyspCiAJCXBoeXNpZF9zZXQocGh5c19pZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworI2lmbmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwljcHVfcHJlc2VudF9tYXAgPSBjcHVfcG9zc2libGVfbWFwOworI2VuZGlmCiAKIAlzaG93X21wX2luZm8obnJfY3B1KTsKIApAQCAtMTg2LDcgKzE5NCw2IEBACiAJICogU2V0dXAgYm9vdCBDUFUgaW5mb3JtYXRpb24KIAkgKi8KIAlzbXBfc3RvcmVfY3B1X2luZm8oMCk7IC8qIEZpbmFsIGZ1bGwgdmVyc2lvbiBvZiB0aGUgZGF0YSAqLwotCXNtcF90dW5lX3NjaGVkdWxpbmcoKTsKIAogCS8qCiAJICogSWYgU01QIHNob3VsZCBiZSBkaXNhYmxlZCwgdGhlbiByZWFsbHkgZGlzYWJsZSBpdCEKQEAgLTIzMCwxMSArMjM3LDYgQEAKIAlEcHJpbnRrKCJCb290IGRvbmUuXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNtcF90dW5lX3NjaGVkdWxpbmcodm9pZCkKLXsKLQkvKiBOb3RoaW5nIHRvIGRvLiAqLwotfQotCiAvKgogICogaW5pdF9pcGlfbG9jayA6IEluaXRpYWxpemUgSVBJIGxvY2tzLgogICovCkBAIC02MjksNCArNjMxLDMgQEAKIAlwaHlzaWRfMl9jcHVbcGh5c19pZF0gPSAtMTsKIAljcHVfMl9waHlzaWRbY3B1X2lkXSA9IC0xOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbGliL01ha2VmaWxlIGIvYXJjaC9tMzJyL2xpYi9NYWtlZmlsZQppbmRleCBlNjMyZDEwLi5kMTZiNGU0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvbTMyci9saWIvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBNMzJSLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1saWIteSAgOj0gY2hlY2tzdW0ubyBhc2h4ZGkzLm8gbWVtc2V0Lm8gbWVtY3B5Lm8gZ2V0dXNlci5vIFwKLQkgIHB1dHVzZXIubyBkZWxheS5vIHN0cmxlbi5vIHVzZXJjb3B5Lm8gY3N1bV9wYXJ0aWFsX2NvcHkubworbGliLXkgIDo9IGNoZWNrc3VtLm8gYXNoeGRpMy5vIG1lbXNldC5vIG1lbWNweS5vIFwKKwkgIGRlbGF5Lm8gc3RybGVuLm8gdXNlcmNvcHkubyBjc3VtX3BhcnRpYWxfY29weS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvZ2V0dXNlci5TIGIvYXJjaC9tMzJyL2xpYi9nZXR1c2VyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YTBkYjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tMzJyL2xpYi9nZXR1c2VyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICogX19nZXRfdXNlciBmdW5jdGlvbnMuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAxIEhpcm9rYXp1IFRha2F0YQotICoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgbm9uLXN0YW5kYXJkIGNhbGwgaW50ZXJmYWNlCi0gKiB0byBtYWtlIHRoZW0gbW9yZSBlZmZpY2llbnQsIGVzcGVjaWFsbHkgYXMgdGhleQotICogcmV0dXJuIGFuIGVycm9yIHZhbHVlIGluIGFkZGl0aW9uIHRvIHRoZSAicmVhbCIKLSAqIHJldHVybiB2YWx1ZS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLS8qCi0gKiBfX2dldF91c2VyX1gKLSAqCi0gKiBJbnB1dHM6CXIwIGNvbnRhaW5zIHRoZSBhZGRyZXNzCi0gKgotICogT3V0cHV0czoJcjAgaXMgZXJyb3IgY29kZSAoMCBvciAtRUZBVUxUKQotICoJCXIxIGNvbnRhaW5zIHplcm8tZXh0ZW5kZWQgdmFsdWUKLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBtb2RpZnkgYW55IG90aGVyIHJlZ2lzdGVycywKLSAqIGFzIHRoZXkgZ2V0IGNhbGxlZCBmcm9tIHdpdGhpbiBpbmxpbmUgYXNzZW1ibHkuCi0gKi8KLQotI2lmZGVmIENPTkZJR19JU0FfRFVBTF9JU1NVRQotCi0JLnRleHQKLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19nZXRfdXNlcl8xCi1fX2dldF91c2VyXzE6Ci0xOglsZHViCXIxLCBAcjAJCSAgICB8fAlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fZ2V0X3VzZXJfMgotX19nZXRfdXNlcl8yOgotMjoJbGR1aAlyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX2dldF91c2VyXzQKLV9fZ2V0X3VzZXJfNDoKLTM6CWxkCXIxLCBAcjAJCSAgICB8fAlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi1iYWRfZ2V0X3VzZXI6Ci0JbGRpCXIxLCAjMAkJICAgIHx8CWxkaQlyMCwgIy0xNAotCWptcAlyMTQKLQotI2Vsc2UgLyogbm90IENPTkZJR19JU0FfRFVBTF9JU1NVRSAqLwotCi0JLnRleHQKLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19nZXRfdXNlcl8xCi1fX2dldF91c2VyXzE6Ci0xOglsZHViCXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fZ2V0X3VzZXJfMgotX19nZXRfdXNlcl8yOgotMjoJbGR1aAlyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX2dldF91c2VyXzQKLV9fZ2V0X3VzZXJfNDoKLTM6CWxkCXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi1iYWRfZ2V0X3VzZXI6Ci0JbGRpCXIxLCAjMAotCWxkaQlyMCwgIy0xNAotCWptcAlyMTQKLQotI2VuZGlmIC8qIG5vdCBDT05GSUdfSVNBX0RVQUxfSVNTVUUgKi8KLQotLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkubG9uZyAxYixiYWRfZ2V0X3VzZXIKLQkubG9uZyAyYixiYWRfZ2V0X3VzZXIKLQkubG9uZyAzYixiYWRfZ2V0X3VzZXIKLS5wcmV2aW91cwotCi0JLmVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9wdXR1c2VyLlMgYi9hcmNoL20zMnIvbGliL3B1dHVzZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE4MTU0Yy4uMDAwMDAwMAotLS0gYS9hcmNoL20zMnIvbGliL3B1dHVzZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBfX3B1dF91c2VyIGZ1bmN0aW9ucy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTggTGludXMgVG9ydmFsZHMKLSAqIChDKSBDb3B5cmlnaHQgMjAwMSBIaXJva2F6dSBUYWthdGEKLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsIGludGVyZmFjZQotICogdG8gbWFrZSB0aGVtIG1vcmUgZWZmaWNpZW50LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotLyoKLSAqIF9fcHV0X3VzZXJfWAotICoKLSAqIElucHV0czoJcjAgY29udGFpbnMgdGhlIGFkZHJlc3MKLSAqCQlyMSBjb250YWlucyB0aGUgdmFsdWUKLSAqCi0gKiBPdXRwdXRzOglyMCBpcyBlcnJvciBjb2RlICgwIG9yIC1FRkFVTFQpCi0gKgkJcjEgaXMgY29ycnVwdGVkICh3aWxsIGNvbnRhaW4gImN1cnJlbnRfdGFzayIpLgotICoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgbm90IG1vZGlmeSBhbnkgb3RoZXIgcmVnaXN0ZXJzLAotICogYXMgdGhleSBnZXQgY2FsbGVkIGZyb20gd2l0aGluIGlubGluZSBhc3NlbWJseS4KLSAqLwotCi0jaWZkZWYgQ09ORklHX0lTQV9EVUFMX0lTU1VFCi0KLQkudGV4dAotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzEKLV9fcHV0X3VzZXJfMToKLTE6CXN0YglyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzIKLV9fcHV0X3VzZXJfMjoKLTI6CXN0aAlyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzQKLV9fcHV0X3VzZXJfNDoKLTM6CXN0CXIxLCBAcjAJCSAgICB8fAlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi1iYWRfcHV0X3VzZXI6Ci0JbGRpCXIwLCAjLTE0CSAgICB8fAlqbXAJcjE0Ci0KLSNlbHNlIC8qIG5vdCBDT05GSUdfSVNBX0RVQUxfSVNTVUUgKi8KLQotCS50ZXh0Ci0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fcHV0X3VzZXJfMQotX19wdXRfdXNlcl8xOgotMToJc3RiCXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fcHV0X3VzZXJfMgotX19wdXRfdXNlcl8yOgotMjoJc3RoCXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fcHV0X3VzZXJfNAotX19wdXRfdXNlcl80OgotMzoJc3QJcjEsIEByMAotCWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLWJhZF9wdXRfdXNlcjoKLQlsZGkJcjAsICMtMTQKLQlqbXAJcjE0Ci0KLSNlbmRpZiAvKiBub3QgQ09ORklHX0lTQV9EVUFMX0lTU1VFICovCi0KLS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLmxvbmcgMWIsYmFkX3B1dF91c2VyCi0JLmxvbmcgMmIsYmFkX3B1dF91c2VyCi0JLmxvbmcgM2IsYmFkX3B1dF91c2VyCi0ucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKaW5kZXggM2Q3ZjIwMC4uNWI3OTUyZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKQEAgLTU3LDcgKzU3LDYgQEAKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CkBAIC03OSw0ICs3OCwzIEBACiBFWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWRfdHJ5bG9jayk7CiBFWFBPUlRfU1lNQk9MKF9fdXBfd2FrZXVwKTsKIAotRVhQT1JUX1NZTUJPTChnZXRfd2NoYW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9tNjhrX2tzeW1zLmMKaW5kZXggZDg0NGM3NS4uNDMyMGQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC0yNiw3ICsyNiw2IEBACiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwogRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CkBAIC01Nyw4ICs1Niw2IEBACiBFWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWRfdHJ5bG9jayk7CiBFWFBPUlRfU1lNQk9MKF9fdXBfd2FrZXVwKTsKIAotRVhQT1JUX1NZTUJPTChnZXRfd2NoYW4pOwotCiAvKgogICogbGliZ2NjIGZ1bmN0aW9ucyAtIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHkgYnkgdGhlCiAgKiBjb21waWxlci4uLiAgKHByb3RvdHlwZXMgYXJlIG5vdCBjb3JyZWN0IHRob3VnaCwgYnV0IHRoYXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggNTA4MGVhMS4uZThmZjA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTEzLDcgKzEzLDcgQEAKIAlkZWZhdWx0IFNHSV9JUDIyCiAKIGNvbmZpZyBNSVBTX01UWDEKLQlib29sICJTdXBwb3J0IGZvciA0RyBTeXN0ZW1zIE1UWC0xIGJvYXJkIgorCWJvb2wgIjRHIFN5c3RlbXMgTVRYLTEgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNPQ19BVTE1MDAKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgTUlQU19DT0JBTFQKLQlib29sICJTdXBwb3J0IGZvciBDb2JhbHQgU2VydmVyIgorCWJvb2wgIkNvYmFsdCBTZXJ2ZXIiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IEk4MjU5CkBAIC0xMzIsNyArMTMyLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIE1BQ0hfREVDU1RBVElPTgotCWJvb2wgIlN1cHBvcnQgZm9yIERFQ3N0YXRpb25zIgorCWJvb2wgIkRFQ3N0YXRpb25zIgogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBFQVJMWV9QUklOVEsKQEAgLTE1OCw3ICsxNTgsNyBAQAogCSAgb3RoZXJ3aXNlIGNob29zZSBSMzAwMC4KIAogY29uZmlnIE1JUFNfRVY2NDEyMAotCWJvb2wgIlN1cHBvcnQgZm9yIEdhbGlsZW8gRVY2NDEyMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIkdhbGlsZW8gRVY2NDEyMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC0xNzUsNyArMTc1LDcgQEAKIAkgIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KIAogY29uZmlnIE1JUFNfRVY5NjEwMAotCWJvb2wgIlN1cHBvcnQgZm9yIEdhbGlsZW8gRVY5NjEwMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIkdhbGlsZW8gRVY5NjEwMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkgIGhlcmUgaWYgeW91IHdpc2ggdG8gYnVpbGQgYSBrZXJuZWwgZm9yIHRoaXMgcGxhdGZvcm0uCiAKIGNvbmZpZyBNSVBTX0lWUgotCWJvb2wgIlN1cHBvcnQgZm9yIEdsb2Jlc3BhbiBJVlIgYm9hcmQiCisJYm9vbCAiR2xvYmVzcGFuIElWUiBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVRFX0JPQVJEX0dFTgpAQCAtMjExLDcgKzIxMSw3IEBACiAJICBidWlsZCBhIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KIAogY29uZmlnIE1JUFNfSVRFODE3MgotCWJvb2wgIlN1cHBvcnQgZm9yIElURSA4MTcyRyBib2FyZCIKKwlib29sICJJVEUgODE3MkcgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElURV9CT0FSRF9HRU4KQEAgLTIyOCwxMSArMjI4LDEyIEBACiAJICBhIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KIAogY29uZmlnIE1BQ0hfSkFaWgotCWJvb2wgIlN1cHBvcnQgZm9yIHRoZSBKYXp6IGZhbWlseSBvZiBtYWNoaW5lcyIKKwlib29sICJKYXp6IGZhbWlseSBvZiBtYWNoaW5lcyIKIAlzZWxlY3QgQVJDCiAJc2VsZWN0IEFSQzMyCiAJc2VsZWN0IEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJc2VsZWN0IEdFTkVSSUNfSVNBX0RNQQorCXNlbGVjdCBJODI1MwogCXNlbGVjdCBJODI1OQogCXNlbGVjdCBJU0EKIAlzZWxlY3QgU1lTX0hBU19DUFVfUjRYMDAKQEAgLTI0NSw3ICsyNDYsNyBAQAogCSBPbGl2ZXR0aSBNNzAwLTEwIHdvcmtzdGF0aW9ucy4KIAogY29uZmlnIExBU0FUCi0JYm9vbCAiU3VwcG9ydCBmb3IgTEFTQVQgTmV0d29ya3MgcGxhdGZvcm1zIgorCWJvb2wgIkxBU0FUIE5ldHdvcmtzIHBsYXRmb3JtcyIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgTUlQU19HVDY0MTIwCkBAIC0yNTcsNyArMjU4LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIE1JUFNfQVRMQVMKLQlib29sICJTdXBwb3J0IGZvciBNSVBTIEF0bGFzIGJvYXJkIgorCWJvb2wgIk1JUFMgQXRsYXMgYm9hcmQiCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IElSUV9DUFUKQEAgLTI4Miw3ICsyODMsNyBAQAogCSAgYm9hcmQuCiAKIGNvbmZpZyBNSVBTX01BTFRBCi0JYm9vbCAiU3VwcG9ydCBmb3IgTUlQUyBNYWx0YSBib2FyZCIKKwlib29sICJNSVBTIE1hbHRhIGJvYXJkIgogCXNlbGVjdCBBUkNIX01BWV9IQVZFX1BDX0ZEQwogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCkBAIC0zMTAsNyArMzExLDcgQEAKIAkgIGJvYXJkLgogCiBjb25maWcgTUlQU19TRUFECi0JYm9vbCAiU3VwcG9ydCBmb3IgTUlQUyBTRUFEIGJvYXJkIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIk1JUFMgU0VBRCBib2FyZCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVApAQCAtMzI3LDcgKzMyOCw3IEBACiAJICBib2FyZC4KIAogY29uZmlnIE1JUFNfU0lNCi0JYm9vbCAnU3VwcG9ydCBmb3IgTUlQUyBzaW11bGF0b3IgKE1JUFNzaW0pJworCWJvb2wgJ01JUFMgc2ltdWxhdG9yIChNSVBTc2ltKScKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCkBAIC0zNDAsNyArMzQxLDcgQEAKIAkgIGVtdWxhdG9yLgogCiBjb25maWcgTU9NRU5DT19KQUdVQVJfQVRYCi0JYm9vbCAiU3VwcG9ydCBmb3IgTW9tZW50dW0gSmFndWFyIGJvYXJkIgorCWJvb2wgIk1vbWVudHVtIEphZ3VhciBib2FyZCIKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQpAQCAtMzYwLDcgKzM2MSw3IEBACiAJICBNb21lbnR1bSBDb21wdXRlciA8aHR0cDovL3d3dy5tb21lbmNvLmNvbS8+LgogCiBjb25maWcgTU9NRU5DT19PQ0VMT1QKLQlib29sICJTdXBwb3J0IGZvciBNb21lbnR1bSBPY2Vsb3QgYm9hcmQiCisJYm9vbCAiTW9tZW50dW0gT2NlbG90IGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCkBAIC0zNzcsNyArMzc4LDcgQEAKIAkgIE1vbWVudHVtIENvbXB1dGVyIDxodHRwOi8vd3d3Lm1vbWVuY28uY29tLz4uCiAKIGNvbmZpZyBNT01FTkNPX09DRUxPVF8zCi0JYm9vbCAiU3VwcG9ydCBmb3IgTW9tZW50dW0gT2NlbG90LTMgYm9hcmQiCisJYm9vbCAiTW9tZW50dW0gT2NlbG90LTMgYm9hcmQiCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKQEAgLTM5Niw3ICszOTcsNyBAQAogCSAgUE1DLVNpZXJyYSBSbTc5MDAwIGNvcmUuCiAKIGNvbmZpZyBNT01FTkNPX09DRUxPVF9DCi0JYm9vbCAiU3VwcG9ydCBmb3IgTW9tZW50dW0gT2NlbG90LUMgYm9hcmQiCisJYm9vbCAiTW9tZW50dW0gT2NlbG90LUMgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKQEAgLTQxMyw3ICs0MTQsNyBAQAogCSAgTW9tZW50dW0gQ29tcHV0ZXIgPGh0dHA6Ly93d3cubW9tZW5jby5jb20vPi4KIAogY29uZmlnIE1PTUVOQ09fT0NFTE9UX0cKLQlib29sICJTdXBwb3J0IGZvciBNb21lbnR1bSBPY2Vsb3QtRyBib2FyZCIKKwlib29sICJNb21lbnR1bSBPY2Vsb3QtRyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQpAQCAtNDMwLDIzICs0MzEsMjMgQEAKIAkgIE1vbWVudHVtIENvbXB1dGVyIDxodHRwOi8vd3d3Lm1vbWVuY28uY29tLz4uCiAKIGNvbmZpZyBNSVBTX1hYUzE1MDAKLQlib29sICJTdXBwb3J0IGZvciBNeUNhYmxlIFhYUzE1MDAgYm9hcmQiCisJYm9vbCAiTXlDYWJsZSBYWFMxNTAwIGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU09DX0FVMTUwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgUE5YODU1MF9WMlBDSQotCWJvb2wgIlN1cHBvcnQgZm9yIFBoaWxpcHMgUE5YODU1MCBiYXNlZCBWaXBlcjItUENJIGJvYXJkIgorCWJvb2wgIlBoaWxpcHMgUE5YODU1MCBiYXNlZCBWaXBlcjItUENJIGJvYXJkIgogCXNlbGVjdCBQTlg4NTUwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBQTlg4NTUwX0pCUwotCWJvb2wgIlN1cHBvcnQgZm9yIFBoaWxpcHMgUE5YODU1MCBiYXNlZCBKQlMgYm9hcmQiCisJYm9vbCAiUGhpbGlwcyBQTlg4NTUwIGJhc2VkIEpCUyBib2FyZCIKIAlzZWxlY3QgUE5YODU1MAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgRERCNTA3NAotCWJvb2wgIlN1cHBvcnQgZm9yIE5FQyBEREIgVnJjLTUwNzQgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiTkVDIEREQiBWcmMtNTA3NCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBEREI1WFhYX0NPTU1PTgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKQEAgLTQ2NCw3ICs0NjUsNyBAQAogCSAgZXZhbHVhdGlvbiBib2FyZC4KIAogY29uZmlnIEREQjU0NzYKLQlib29sICJTdXBwb3J0IGZvciBORUMgRERCIFZyYy01NDc2IgorCWJvb2wgIk5FQyBEREIgVnJjLTU0NzYiCiAJc2VsZWN0IEREQjVYWFhfQ09NTU9OCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVApAQCAtNDg1LDcgKzQ4Niw3IEBACiAJICBJREUgY29udHJvbGxlciwgUFMyIGtleWJvYXJkLCBQUzIgbW91c2UsIGV0Yy4KIAogY29uZmlnIEREQjU0NzcKLQlib29sICJTdXBwb3J0IGZvciBORUMgRERCIFZyYy01NDc3IgorCWJvb2wgIk5FQyBEREIgVnJjLTU0NzciCiAJc2VsZWN0IEREQjVYWFhfQ09NTU9OCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC01MDMsMTMgKzUwNCwxMyBAQAogCSAgZXRoZXIgcG9ydCBVU0IsIEFDOTcsIFBDSSwgZXRjLgogCiBjb25maWcgTUFDSF9WUjQxWFgKLQlib29sICJTdXBwb3J0IGZvciBORUMgVlI0MTAwIHNlcmllcyBiYXNlZCBtYWNoaW5lcyIKKwlib29sICJORUMgVlI0MVhYLWJhc2VkIG1hY2hpbmVzIgogCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEVYUEVSSU1FTlRBTAogCiBjb25maWcgUE1DX1lPU0VNSVRFCi0JYm9vbCAiU3VwcG9ydCBmb3IgUE1DLVNpZXJyYSBZb3NlbWl0ZSBldmFsIGJvYXJkIgorCWJvb2wgIlBNQy1TaWVycmEgWW9zZW1pdGUgZXZhbCBib2FyZCIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQpAQCAtNTI2LDEwICs1MjcsMTEgQEAKIAkgIG1hbnVmYWN0dXJlZCBieSBQTUMtU2llcnJhLgogCiBjb25maWcgUUVNVQotCWJvb2wgIlN1cHBvcnQgZm9yIFFlbXUiCisJYm9vbCAiUWVtdSIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEdFTkVSSUNfSVNBX0RNQQogCXNlbGVjdCBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVAorCXNlbGVjdCBJODI1MwogCXNlbGVjdCBJODI1OQogCXNlbGVjdCBJU0EKIAlzZWxlY3QgU1dBUF9JT19TUEFDRQpAQCAtNTQ1LDcgKzU0Nyw3IEBACiAJICBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5saW51eC1taXBzLm9yZy93aWtpL1FlbXUuCiAKIGNvbmZpZyBTR0lfSVAyMgotCWJvb2wgIlN1cHBvcnQgZm9yIFNHSSBJUDIyIChJbmR5L0luZGlnbzIpIgorCWJvb2wgIlNHSSBJUDIyIChJbmR5L0luZGlnbzIpIgogCXNlbGVjdCBBUkMKIAlzZWxlY3QgQVJDMzIKIAlzZWxlY3QgQk9PVF9FTEYzMgpAQCAtNTY1LDcgKzU2Nyw3IEBACiAJICB0aGF0IHJ1bnMgb24gdGhlc2UsIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBTR0lfSVAyNwotCWJvb2wgIlN1cHBvcnQgZm9yIFNHSSBJUDI3IChPcmlnaW4yMDAvMjAwMCkiCisJYm9vbCAiU0dJIElQMjcgKE9yaWdpbjIwMC8yMDAwKSIKIAlzZWxlY3QgQVJDCiAJc2VsZWN0IEFSQzY0CiAJc2VsZWN0IEJPT1RfRUxGNjQKQEAgLTU4MSw3ICs1ODMsNyBAQAogCSAgaGVyZS4KIAogY29uZmlnIFNHSV9JUDMyCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0dJIElQMzIgKE8yKSAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJTR0kgSVAzMiAoTzIpIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEFSQwogCXNlbGVjdCBBUkMzMgpAQCAtNjAyLDcgKzYwNCw3IEBACiAJICBJZiB5b3Ugd2FudCB0aGlzIGtlcm5lbCB0byBydW4gb24gU0dJIE8yIHdvcmtzdGF0aW9uLCBzYXkgWSBoZXJlLgogCiBjb25maWcgU0lCWVRFX0JJR1NVUgotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTQ4MEItQmlnU3VyIgorCWJvb2wgIlNpYnl0ZSBCQ005MTQ4MEItQmlnU3VyIgogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVAogCXNlbGVjdCBQQ0lfRE9NQUlOUwpAQCAtNjEzLDcgKzYxNSw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTSUJZVEVfU1dBUk0KLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBBLVNXQVJNIgorCWJvb2wgIlNpYnl0ZSBCQ005MTI1MEEtU1dBUk0iCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IFNJQllURV9TQjEyNTAKQEAgLTYyNCw3ICs2MjYsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX1NFTlRPU0EKLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBFLVNlbnRvc2EiCisJYm9vbCAiU2lieXRlIEJDTTkxMjUwRS1TZW50b3NhIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCkBAIC02MzUsNyArNjM3LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFNJQllURV9SSE9ORQotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTEyNUUtUmhvbmUiCisJYm9vbCAiU2lieXRlIEJDTTkxMTI1RS1SaG9uZSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVApAQCAtNjQ2LDcgKzY0OCw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTSUJZVEVfQ0FSTUVMCi0JYm9vbCAiU3VwcG9ydCBmb3IgU2lieXRlIEJDTTkxMTIweC1DYXJtZWwiCisJYm9vbCAiU2lieXRlIEJDTTkxMTIweC1DYXJtZWwiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY1Nyw3ICs2NTksNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX1BUU1dBUk0KLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBQVC1QVFNXQVJNIgorCWJvb2wgIlNpYnl0ZSBCQ005MTI1MFBULVBUU1dBUk0iCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY2OSw3ICs2NzEsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX0xJVFRMRVNVUgotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTI1MEMyLUxpdHRsZVN1ciIKKwlib29sICJTaWJ5dGUgQkNNOTEyNTBDMi1MaXR0bGVTdXIiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY4MSw3ICs2ODMsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX0NSSElORQotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTEyMEMtQ1JoaW5lIgorCWJvb2wgIlNpYnl0ZSBCQ005MTEyMEMtQ1JoaW5lIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCkBAIC02OTIsNyArNjk0LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFNJQllURV9DUkhPTkUKLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTExMjVDLUNSaG9uZSIKKwlib29sICJTaWJ5dGUgQkNNOTExMjVDLUNSaG9uZSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVApAQCAtNzA0LDcgKzcwNiw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTTklfUk0yMDBfUENJCi0JYm9vbCAiU3VwcG9ydCBmb3IgU05JIFJNMjAwIFBDSSIKKwlib29sICJTTkkgUk0yMDAgUENJIgogCXNlbGVjdCBBUkMKIAlzZWxlY3QgQVJDMzIKIAlzZWxlY3QgQVJDSF9NQVlfSEFWRV9QQ19GREMKQEAgLTcxNCw2ICs3MTYsNyBAQAogCXNlbGVjdCBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVAogCXNlbGVjdCBIV19IQVNfRUlTQQogCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IEk4MjUzCiAJc2VsZWN0IEk4MjU5CiAJc2VsZWN0IElTQQogCXNlbGVjdCBTWVNfSEFTX0NQVV9SNFgwMApAQCAtNzI5LDcgKzczMiw3IEBACiAJICBzdXBwb3J0IHRoaXMgbWFjaGluZSB0eXBlLgogCiBjb25maWcgVE9TSElCQV9KTVIzOTI3Ci0JYm9vbCAiU3VwcG9ydCBmb3IgVG9zaGliYSBKTVItVFgzOTI3IGJvYXJkIgorCWJvb2wgIlRvc2hpYmEgSk1SLVRYMzkyNyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgTUlQU19UWDM5MjcKQEAgLTc0MCw3ICs3NDMsNyBAQAogCXNlbGVjdCBUT1NISUJBX0JPQVJEUwogCiBjb25maWcgVE9TSElCQV9SQlRYNDkyNwotCWJvb2wgIlN1cHBvcnQgZm9yIFRvc2hpYmEgVEJUWDQ5WzIzXTcgYm9hcmQiCisJYm9vbCAiVG9zaGliYSBUQlRYNDlbMjNdNyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhBU19UWFg5X1NFUklBTAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC03NTcsNyArNzYwLDcgQEAKIAkgIHN1cHBvcnQgdGhpcyBtYWNoaW5lIHR5cGUKIAogY29uZmlnIFRPU0hJQkFfUkJUWDQ5MzgKLQlib29sICJTdXBwb3J0IGZvciBUb3NoaWJhIFJCVFg0OTM4IGJvYXJkIgorCWJvb2wgIlRvc2hpYmEgUkJUWDQ5MzggYm9hcmQiCiAJc2VsZWN0IEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBHRU5FUklDX0lTQV9ETUEKQEAgLTgxMyw2ICs4MTYsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBTQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIKKwlib29sCisJZGVmYXVsdCB5CisKICMKICMgU2VsZWN0IHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdXNlciBzZWxlY3Rpb25zLgogIwpAQCAtMTA2MCw2ICsxMDY3LDcgQEAKIGNvbmZpZyBDUFVfTUlQUzMyX1IxCiAJYm9vbCAiTUlQUzMyIFJlbGVhc2UgMSIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX01JUFMzMl9SMQorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU19ISUdITUVNCkBAIC0xMDc3LDYgKzEwODUsNyBAQAogY29uZmlnIENQVV9NSVBTMzJfUjIKIAlib29sICJNSVBTMzIgUmVsZWFzZSAyIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfTUlQUzMyX1IyCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KQEAgLTEwOTAsNiArMTA5OSw3IEBACiBjb25maWcgQ1BVX01JUFM2NF9SMQogCWJvb2wgIk1JUFM2NCBSZWxlYXNlIDEiCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9NSVBTNjRfUjEKKwlzZWxlY3QgQ1BVX0hBU19MTFNDCiAJc2VsZWN0IENQVV9IQVNfUFJFRkVUQ0gKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCkBAIC0xMTA4LDYgKzExMTgsNyBAQAogY29uZmlnIENQVV9NSVBTNjRfUjIKIAlib29sICJNSVBTNjQgUmVsZWFzZSAyIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfTUlQUzY0X1IyCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTApAQCAtMTEyMiw2ICsxMTMzLDcgQEAKIGNvbmZpZyBDUFVfUjMwMDAKIAlib29sICJSMzAwMCIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1IzMDAwCisJc2VsZWN0IENQVV9IQVNfV0IKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfSElHSE1FTQogCWhlbHAKQEAgLTExNTEsNiArMTE2Myw3IEBACiBjb25maWcgQ1BVX1I0MzAwCiAJYm9vbCAiUjQzMDAiCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9SNDMwMAorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJaGVscApAQCAtMTE1OSw2ICsxMTcyLDcgQEAKIGNvbmZpZyBDUFVfUjRYMDAKIAlib29sICJSNHgwMCIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1I0WDAwCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAloZWxwCkBAIC0xMTY4LDYgKzExODIsNyBAQAogY29uZmlnIENQVV9UWDQ5WFgKIAlib29sICJSNDlYWCIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1RYNDlYWAorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKQEAgLTExNzUsNiArMTE5MCw3IEBACiBjb25maWcgQ1BVX1I1MDAwCiAJYm9vbCAiUjUwMDAiCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9SNTAwMAorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJaGVscApAQCAtMTE4MywxMiArMTE5OSwxNCBAQAogY29uZmlnIENQVV9SNTQzMgogCWJvb2wgIlI1NDMyIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfUjU0MzIKKwlzZWxlY3QgQ1BVX0hBU19MTFNDCiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCiBjb25maWcgQ1BVX1I2MDAwCiAJYm9vbCAiUjYwMDAiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQ1BVX0hBU19MTFNDCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9SNjAwMAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJaGVscApAQCAtMTE5OCw2ICsxMjE2LDcgQEAKIGNvbmZpZyBDUFVfTkVWQURBCiAJYm9vbCAiUk01Mnh4IgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfTkVWQURBCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAloZWxwCkBAIC0xMjA3LDYgKzEyMjYsNyBAQAogCWJvb2wgIlI4MDAwIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9SODAwMAorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJaGVscApAQCAtMTIxNiw2ICsxMjM2LDcgQEAKIGNvbmZpZyBDUFVfUjEwMDAwCiAJYm9vbCAiUjEwMDAwIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfUjEwMDAwCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTApAQCAtMTIyNiw2ICsxMjQ3LDcgQEAKIGNvbmZpZyBDUFVfUk03MDAwCiAJYm9vbCAiUk03MDAwIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfUk03MDAwCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTApAQCAtMTIzNCw2ICsxMjU2LDcgQEAKIGNvbmZpZyBDUFVfUk05MDAwCiAJYm9vbCAiUk05MDAwIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfUk05MDAwCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTApAQCAtMTI0Miw2ICsxMjY1LDcgQEAKIGNvbmZpZyBDUFVfU0IxCiAJYm9vbCAiU0IxIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfU0IxCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KQEAgLTEzODcsMTMgKzE0MTEsMTIgQEAKIAogY29uZmlnIFBBR0VfU0laRV8xNktCCiAJYm9vbCAiMTZrQiIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAhQ1BVX1IzMDAwICYmICFDUFVfVFgzOVhYCisJZGVwZW5kcyBvbiAhQ1BVX1IzMDAwICYmICFDUFVfVFgzOVhYCiAJaGVscAogCSAgVXNpbmcgMTZrQiBwYWdlIHNpemUgd2lsbCByZXN1bHQgaW4gaGlnaGVyIHBlcmZvcm1hbmNlIGtlcm5lbCBhdAogCSAgdGhlIHByaWNlIG9mIGhpZ2hlciBtZW1vcnkgY29uc3VtcHRpb24uICBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb24KLQkgIGFsbCBub24tUjMwMDAgZmFtaWx5IHByb2Nlc3Nvci4gIE5vdCB0aGF0IGF0IHRoZSB0aW1lIG9mIHRoaXMKLQkgIHdyaXRpbmcgdGhpcyBvcHRpb24gaXMgc3RpbGwgaGlnaCBleHBlcmltZW50YWw7IHRoZXJlIGFyZSBhbHNvCi0JICBpc3N1ZXMgd2l0aCBjb21wYXRpYmlsaXR5IG9mIHVzZXIgYXBwbGljYXRpb25zLgorCSAgYWxsIG5vbi1SMzAwMCBmYW1pbHkgcHJvY2Vzc29ycy4gIE5vdGUgdGhhdCB5b3Ugd2lsbCBuZWVkIGEgc3VpdGFibGUKKwkgIExpbnV4IGRpc3RyaWJ1dGlvbiB0byBzdXBwb3J0IHRoaXMuCiAKIGNvbmZpZyBQQUdFX1NJWkVfNjRLQgogCWJvb2wgIjY0a0IiCkBAIC0xNDAyLDggKzE0MjUsNyBAQAogCSAgVXNpbmcgNjRrQiBwYWdlIHNpemUgd2lsbCByZXN1bHQgaW4gaGlnaGVyIHBlcmZvcm1hbmNlIGtlcm5lbCBhdAogCSAgdGhlIHByaWNlIG9mIGhpZ2hlciBtZW1vcnkgY29uc3VtcHRpb24uICBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb24KIAkgIGFsbCBub24tUjMwMDAgZmFtaWx5IHByb2Nlc3Nvci4gIE5vdCB0aGF0IGF0IHRoZSB0aW1lIG9mIHRoaXMKLQkgIHdyaXRpbmcgdGhpcyBvcHRpb24gaXMgc3RpbGwgaGlnaCBleHBlcmltZW50YWw7IHRoZXJlIGFyZSBhbHNvCi0JICBpc3N1ZXMgd2l0aCBjb21wYXRpYmlsaXR5IG9mIHVzZXIgYXBwbGljYXRpb25zLgorCSAgd3JpdGluZyB0aGlzIG9wdGlvbiBpcyBzdGlsbCBoaWdoIGV4cGVyaW1lbnRhbC4KIAogZW5kY2hvaWNlCiAKQEAgLTE0NDAsNiArMTQ2MiwxMiBAQAogCXByb21wdCAiTUlQUyBNVCBvcHRpb25zIgogCWRlcGVuZHMgb24gTUlQU19NVAogCitjb25maWcgTUlQU19NVF9TTVRDCisJYm9vbCAiU01UQzogVXNlIGFsbCBUQ3Mgb24gYWxsIFZQRXMgZm9yIFNNUCIKKwlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfVkkKKwlzZWxlY3QgQ1BVX01JUFNSMl9TUlMKKwlzZWxlY3QgU01QCisKIGNvbmZpZyBNSVBTX01UX1NNUAogCWJvb2wgIlVzZSAxIFRDIG9uIGVhY2ggYXZhaWxhYmxlIFZQRSBmb3IgU01QIgogCXNlbGVjdCBTTVAKQEAgLTE0NTMsNiArMTQ4MSwxMSBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIE1JUFNfTVRfRlBBRkYKKwlib29sICJEeW5hbWljIEZQVSBhZmZpbml0eSBmb3IgRlAtaW50ZW5zaXZlIHRocmVhZHMiCisJZGVwZW5kcyBvbiBNSVBTX01UCisJZGVmYXVsdCB5CisKIGNvbmZpZyBNSVBTX1ZQRV9MT0FERVJfVE9NCiAJYm9vbCAiTG9hZCBWUEUgcHJvZ3JhbSBpbnRvIG1lbW9yeSBoaWRkZW4gZnJvbSBsaW51eCIKIAlkZXBlbmRzIG9uIE1JUFNfVlBFX0xPQURFUgpAQCAtMTQ2OSw2ICsxNTAyLDE2IEBACiAJZGVwZW5kcyBvbiBNSVBTX1ZQRV9MT0FERVIKIAloZWxwCiAKK2NvbmZpZyBNSVBTX0FQU1BfS1NQRAorCWJvb2wgIkVuYWJsZSBLU1BEIgorCWRlcGVuZHMgb24gTUlQU19WUEVfQVBTUF9BUEkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBLU1BEIGlzIGEga2VybmVsIGRhZW1vbiB0aGF0IGFjY2VwdHMgc3lzY2FsbCByZXF1ZXN0cyBmcm9tIHRoZSBTUAorCSAgc2lkZSwgYWN0aW9ucyB0aGVtIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLiBJdCBhbHNvIGhhbmRsZXMgdGhlCisJICAiZXhpdCIgc3lzY2FsbCBub3RpZnlpbmcgb3RoZXIga2VybmVsIG1vZHVsZXMgdGhlIFNQIHByb2dyYW0gaXMKKwkgIGV4aXRpbmcuICBZb3UgcHJvYmFibHkgd2FudCB0byBzYXkgeWVzIGhlcmUuCisKIGNvbmZpZyBTQjFfUEFTU18xX1dPUktBUk9VTkRTCiAJYm9vbAogCWRlcGVuZHMgb24gQ1BVX1NCMV9QQVNTXzEKQEAgLTE0ODgsMzggKzE1MzEsMTUgQEAKIAlib29sICJTdXBwb3J0IGZvciA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSIKIAlkZXBlbmRzIG9uIChDUFVfUjRYMDAgfHwgQ1BVX1I1MDAwIHx8IENQVV9STTcwMDAgfHwgQ1BVX1JNOTAwMCB8fCBDUFVfUjEwMDAwIHx8IENQVV9TQjEgfHwgQ1BVX01JUFMzMiB8fCBDUFVfTUlQUzY0KSAmJiAzMkJJVAogCi1jb25maWcgQ1BVX0FEVkFOQ0VECi0JYm9vbCAiT3ZlcnJpZGUgQ1BVIE9wdGlvbnMiCi0JZGVwZW5kcyBvbiAzMkJJVAotCWhlbHAKLQkgIFNheWluZyB5ZXMgaGVyZSBhbGxvd3MgeW91IHRvIHNlbGVjdCBzdXBwb3J0IGZvciB2YXJpb3VzIGZlYXR1cmVzCi0JICB5b3VyIENQVSBtYXkgb3IgbWF5IG5vdCBoYXZlLiAgTW9zdCBwZW9wbGUgc2hvdWxkIHNheSBOIGhlcmUuCi0KIGNvbmZpZyBDUFVfSEFTX0xMU0MKLQlib29sICJsbC9zYyBJbnN0cnVjdGlvbnMgYXZhaWxhYmxlIiBpZiBDUFVfQURWQU5DRUQKLQlkZWZhdWx0IHkgaWYgIUNQVV9BRFZBTkNFRCAmJiAhQ1BVX1IzMDAwICYmICFDUFVfVlI0MVhYICYmICFDUFVfVFgzOVhYCi0JaGVscAotCSAgTUlQUyBSNDAwMCBzZXJpZXMgYW5kIGxhdGVyIHByb3ZpZGUgdGhlIExvYWQgTGlua2VkIChsbCkKLQkgIGFuZCBTdG9yZSBDb25kaXRpb25hbCAoc2MpIGluc3RydWN0aW9ucy4gTW9yZSBpbmZvcm1hdGlvbiBpcwotCSAgYXZhaWxhYmxlIGF0IDxodHRwOi8vd3d3LmdvLWVjcy5jb20vbWlwcy9taXB0ZWsxLmh0bT4uCi0KLQkgIFNheSBZIGhlcmUgaWYgeW91ciBDUFUgaGFzIHRoZSBsbCBhbmQgc2MgaW5zdHJ1Y3Rpb25zLiAgU2F5IFkgaGVyZQotCSAgZm9yIGJldHRlciBwZXJmb3JtYW5jZSwgTiBpZiB5b3UgZG9uJ3Qga25vdy4gIFlvdSBtdXN0IHNheSBZIGhlcmUKLQkgIGZvciBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcy4KKwlib29sCiAKIGNvbmZpZyBDUFVfSEFTX1dCCi0JYm9vbCAiV3JpdGViYWNrIEJ1ZmZlciBhdmFpbGFibGUiIGlmIENQVV9BRFZBTkNFRAotCWRlZmF1bHQgeSBpZiAhQ1BVX0FEVkFOQ0VEICYmIENQVV9SMzAwMCAmJiBNQUNIX0RFQ1NUQVRJT04KLQloZWxwCi0JICBTYXkgTiBoZXJlIGZvciBzbGlnaHRseSBiZXR0ZXIgcGVyZm9ybWFuY2UuICBZb3UgbXVzdCBzYXkgWSBoZXJlIGZvcgotCSAgbWFjaGluZXMgd2hpY2ggcmVxdWlyZSBmbHVzaGluZyBvZiB3cml0ZSBidWZmZXJzIGluIHNvZnR3YXJlLiAgU2F5aW5nCi0JICBZIGlzIHRoZSBzYWZlIG9wdGlvbjsgTiBtYXkgcmVzdWx0IGluIGtlcm5lbCBtYWxmdW5jdGlvbiBhbmQgY3Jhc2hlcy4KLQotbWVudSAiTUlQU1IyIEludGVycnVwdCBoYW5kbGluZyIKLQlkZXBlbmRzIG9uIENQVV9NSVBTUjIgJiYgQ1BVX0FEVkFOQ0VECisJYm9vbAogCiBjb25maWcgQ1BVX01JUFNSMl9JUlFfVkkKIAlib29sICJWZWN0b3JlZCBpbnRlcnJ1cHQgbW9kZSIKKwlkZXBlbmRzIG9uIENQVV9NSVBTUjIKIAloZWxwCiAJICAgVmVjdG9yZWQgaW50ZXJydXB0IG1vZGUgYWxsb3dpbmcgZmFzdGVyIGRpc3BhdGNoaW5nIG9mIGludGVycnVwdHMuCiAJICAgVGhlIGJvYXJkIHN1cHBvcnQgY29kZSBuZWVkcyB0byBiZSB3cml0dGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMKQEAgLTE1MjksNiArMTU0OSw3IEBACiAKIGNvbmZpZyBDUFVfTUlQU1IyX0lSUV9FSQogCWJvb2wgIkV4dGVybmFsIGludGVycnVwdCBjb250cm9sbGVyIG1vZGUiCisJZGVwZW5kcyBvbiBDUFVfTUlQU1IyCiAJaGVscAogCSAgIEV4dGVuZGVkIGludGVycnVwdCBtb2RlIHRha2VzIGFkdmFudGFnZSBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQKIAkgICBjb250cm9sbGVyIHRvIGFsbG93IGZhc3QgZGlzcGF0Y2hpbmcgZnJvbSBtYW55IHBvc3NpYmxlIGludGVycnVwdApAQCAtMTU0Miw3ICsxNTYzLDYgQEAKIAkgICBBbGxvdyB0aGUga2VybmVsIHRvIHVzZSBzaGFkb3cgcmVnaXN0ZXIgc2V0cyBmb3IgZmFzdCBpbnRlcnJ1cHRzLgogCSAgIEludGVycnVwdCBoYW5kbGVycyBtdXN0IGJlIHNwZWNpYWxseSB3cml0dGVuIHRvIHVzZSBzaGFkb3cgc2V0cy4KIAkgICBTYXkgTiB1bmxlc3MgeW91IGtub3cgdGhhdCBzaGFkb3cgcmVnaXN0ZXIgc2V0IHVwcG9ydCBpcyBuZWVkZWQuCi1lbmRtZW51CiAKIGNvbmZpZyBDUFVfSEFTX1NZTkMKIAlib29sCkBAIC0xNTg3LDExICsxNjA3LDE2IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gIU5VTUEKIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNiIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogc291cmNlICJtbS9LY29uZmlnIgogCiBjb25maWcgU01QCiAJYm9vbCAiTXVsdGktUHJvY2Vzc2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1JNOTAwMCB8fCAoKFNJQllURV9CQ00xeDgwIHx8IFNJQllURV9CQ00xeDU1IHx8IFNJQllURV9TQjEyNTAgfHwgUUVNVSkgJiYgIVNJQllURV9TVEFOREFMT05FKSB8fCBTR0lfSVAyNyB8fCBNSVBTX01UX1NNUAorCWRlcGVuZHMgb24gQ1BVX1JNOTAwMCB8fCAoKFNJQllURV9CQ00xeDgwIHx8IFNJQllURV9CQ00xeDU1IHx8IFNJQllURV9TQjEyNTAgfHwgUUVNVSkgJiYgIVNJQllURV9TVEFOREFMT05FKSB8fCBTR0lfSVAyNyB8fCBNSVBTX01UX1NNUCB8fCBNSVBTX01UX1NNVEMKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQogCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgpAQCAtMTcyMSw2ICsxNzQ2LDkgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBJODI1MworCWJvb2wKKwogc291cmNlICJkcml2ZXJzL3BjbWNpYS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKaW5kZXggZDNjNWNjMy4uNTE1ZjllNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKQEAgLTYsNyArNiwxMyBAQAogCWJvb2wgIkFyZSB5b3UgdXNpbmcgYSBjcm9zc2NvbXBpbGVyIgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBjb21waWxpbmcgdGhlIGtlcm5lbCBvbiBhIGRpZmZlcmVudAotCSAgYXJjaGl0ZWN0dXJlIHRoYW4gdGhlIG9uZSBpdCBpcyBpbnRlbmRlZCB0byBydW4gb24uCisJICBhcmNoaXRlY3R1cmUgdGhhbiB0aGUgb25lIGl0IGlzIGludGVuZGVkIHRvIHJ1biBvbi4gIFRoaXMgaXMganVzdCBhCisJICBjb252ZW5pZW5jZSBvcHRpb24gd2hpY2ggd2lsbCBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGZvcgorCSAgdGhlIENST1NTX0NPTVBJTEUgbWFrZSB2YXJpYWJsZSB3aGljaCBvdGhlcndpc2UgaGFzIHRvIGJlIHBhc3NlZCBvbgorCSAgdGhlIGNvbW1hbmQgbGluZSBmcm9tIG1pcHMtbGludXgtLCBtaXBzZWwtbGludXgtLCBtaXBzNjQtbGludXgtIGFuZAorCSAgbWlwczY0ZWwtbGludXgtIGFzIGFwcHJvcHJpYXRlIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZ3VyYXRpb24uCisJICBZb3Ugd2lsbCBoYXZlIHRvIHBhc3MgdGhlIHZhbHVlIGZvciBDUk9TU19DT01QSUxFIG1hbnVhbGx5IGlmIHRoZQorCSAgbmFtZSBwcmVmaXggZm9yIHlvdXIgdG9vbHMgaXMgZGlmZmVyZW50LgogCiBjb25maWcgQ01ETElORQogCXN0cmluZyAiRGVmYXVsdCBrZXJuZWwgY29tbWFuZCBzdHJpbmciCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggOWE2OWUwZi4uMTMzOTAwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMTA1LDE4ICsxMDUsMTggQEAKIGNmbGFncy0kKENPTkZJR19DUFVfVlI0MVhYKQkrPSAtbWFyY2g9cjQxMDAgLVdhLC0tdHJhcAogY2ZsYWdzLSQoQ09ORklHX0NQVV9SNFgwMCkJKz0gLW1hcmNoPXI0NjAwIC1XYSwtLXRyYXAKIGNmbGFncy0kKENPTkZJR19DUFVfVFg0OVhYKQkrPSAtbWFyY2g9cjQ2MDAgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMiwtbWlwczIgLW10dW5lPXI0NjAwKSBcCitjZmxhZ3MtJChDT05GSUdfQ1BVX01JUFMzMl9SMSkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczMyLC1taXBzMzIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMzMikgXAogCQkJLVdhLC1taXBzMzIgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMnIyLC1taXBzMiAtbXR1bmU9cjQ2MDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzMyX1IyKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzMzJyMiwtbWlwczMycjIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMzMikgXAogCQkJLVdhLC1taXBzMzJyMiAtV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFM2NF9SMSkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczY0LC1taXBzMiAtbXR1bmU9cjQ2MDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IxKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzNjQsLW1pcHM2NCAtVV9NSVBTX0lTQSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzY0KSBcCiAJCQktV2EsLW1pcHM2NCAtV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFM2NF9SMikJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczY0cjIsLW1pcHMyIC1tdHVuZT1yNDYwMCApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IyKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzNjRyMiwtbWlwczY0cjIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFM2NCkgXAogCQkJLVdhLC1taXBzNjRyMiAtV2EsLS10cmFwCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1I1MDAwKQkrPSAtbWFyY2g9cjUwMDAgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9SNTQzMikJKz0gJChjYWxsIGNjLW9wdGlvbnMsLW1hcmNoPXI1NDAwLC1tYXJjaD1yNTAwMCkgXAorY2ZsYWdzLSQoQ09ORklHX0NQVV9SNTQzMikJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cjU0MDAsLW1hcmNoPXI1MDAwKSBcCiAJCQktV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX05FVkFEQSkJKz0gJChjYWxsIGNjLW9wdGlvbnMsLW1hcmNoPXJtNTIwMCwtbWFyY2g9cjUwMDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTkVWQURBKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1ybTUyMDAsLW1hcmNoPXI1MDAwKSBcCiAJCQktV2EsLS10cmFwCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1JNNzAwMCkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cm03MDAwLC1tYXJjaD1yNTAwMCkgXAogCQkJLVdhLC0tdHJhcApAQCAtNjE1LDcgKzYxNSwxMCBAQAogaWZkZWYgQ09ORklHX01JUFMKIENIRUNLRkxBR1MgKz0gJChzaGVsbCAkKENDKSAkKENGTEFHUykgLWRNIC1FIC14YyAvZGV2L251bGwgfCBcCiAJZWdyZXAgLXZ3ICdfX0dOVUNfKE1BSk9SfE1JTk9SfFBBVENITEVWRUwpX18nIHwgXAotCXNlZCAtZSAncy9eXCNkZWZpbmUgLy1ELycgLWUgJ3MvIC89Ii8nIC1lICdzLyQkLyIvJykKKwlzZWQgLWUgJ3MvXlwjZGVmaW5lIC8tRC8nIC1lICJzLyAvPScvIiAtZSAicy8kJC8nLyIpCitpZmRlZiBDT05GSUdfNjRCSVQKK0NIRUNLRkxBR1MJCSs9IC1tNjQKK2VuZGlmCiBlbmRpZgogCiBPQkpDT1BZRkxBR1MJCSs9IC0tcmVtb3ZlLXNlY3Rpb249LnJlZ2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vTWFrZWZpbGUKaW5kZXggYTFlZGZkMS4uYmY2ODJmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBBdTEwMDAgQ1BVLCBnZW5lcmljIGZpbGVzLgogIwogCi1vYmoteSArPSBwcm9tLm8gaW50LWhhbmRsZXIubyBpcnEubyBwdXRzLm8gdGltZS5vIHJlc2V0Lm8gXAorb2JqLXkgKz0gcHJvbS5vIGlycS5vIHB1dHMubyB0aW1lLm8gcmVzZXQubyBcCiAJYXUxeHh4X2lycW1hcC5vIGNsb2Nrcy5vIHBsYXRmb3JtLm8gcG93ZXIubyBzZXR1cC5vIFwKIAlzbGVlcGVyLm8gY3B1dGFibGUubyBkbWEubyBkYmRtYS5vIGdwaW8ubwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0Y2E4OC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBwcG9wb3ZAbXZpc3RhLmNvbQotICoKLSAqIEludGVycnVwdCBkaXNwYXRjaGVyIGZvciBBdTEwMDAgYm9hcmRzLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQlpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mCXRoZSBHTlUgR2VuZXJhbAkgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCS50ZXh0Ci0JLnNldAltYWNybwotCS5zZXQJbm9hdAotCS5hbGlnbgk1Ci0KLU5FU1RFRChhdTEwMDBfSVJRLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQkJCQkjIEltcG9ydGFudDogbWFyayBLRVJORUwgbW9kZSAhCi0KLQltZmMwCXQwLENQMF9DQVVTRQkJIyBnZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JbWZjMAl0MSxDUDBfU1RBVFVTCQkjIGdldCBlbmFibGVkIGludGVycnVwdHMKLQlhbmQJdDAsdDEJCQkjIGlzb2xhdGUgYWxsb3dlZCBvbmVzCi0KLQlhbmRpCXQwLDB4ZmYwMAkJIyBpc29sYXRlIHBlbmRpbmcgYml0cwotCWJlcXoJdDAsIDNmCQkJIyBzcHVyaW91cyBpbnRlcnJ1cHQKLQotCWFuZGkJYTAsIHQwLCBDQVVTRUZfSVA3Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCW1vdmUJYTAsIHNwCi0JamFsCW1pcHNfdGltZXJfaW50ZXJydXB0Ci0JaglyZXRfZnJvbV9pcnEKLQotMToKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQMgkjIEludGVycnVwdCBDb250cm9sbGVyIDAsIFJlcXVlc3QgMAotCWJlcQlhMCwgemVybywgMmYKLQltb3ZlCWEwLHNwCi0JamFsCWludGMwX3JlcTBfaXJxZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotMjoKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQMwkjIEludGVycnVwdCBDb250cm9sbGVyIDAsIFJlcXVlc3QgMQotCWJlcQlhMCwgemVybywgM2YKLQltb3ZlCWEwLHNwCi0JamFsCWludGMwX3JlcTFfaXJxZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotMzoKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQNAkjIEludGVycnVwdCBDb250cm9sbGVyIDEsIFJlcXVlc3QgMAotCWJlcQlhMCwgemVybywgNGYKLQltb3ZlCWEwLHNwCi0JamFsCWludGMxX3JlcTBfaXJxZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotNDoKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQNQkjIEludGVycnVwdCBDb250cm9sbGVyIDEsIFJlcXVlc3QgMQotCWJlcQlhMCwgemVybywgNWYKLQltb3ZlCWEwLCBzcAotCWphbAlpbnRjMV9yZXExX2lycWRpc3BhdGNoCi0JaglyZXRfZnJvbV9pcnEKLQotNToKLQltb3ZlCWEwLCBzcAotCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci1FTkQoYXUxMDAwX0lSUSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKaW5kZXggMTMzOWEwOS4uYWZlMDVlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKQEAgLTY2LDkgKzY2LDkgQEAKICNkZWZpbmUgRVhUX0lOVEMxX1JFUTEgNSAvKiBJUCA1ICovCiAjZGVmaW5lIE1JUFNfVElNRVJfSVAgIDcgLyogSVAgNyAqLwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGF1MTAwMF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBzZXRfZGVidWdfdHJhcHModm9pZCk7CiBleHRlcm4gaXJxX2NwdXN0YXRfdCBpcnFfc3RhdCBbTlJfQ1BVU107CitleHRlcm4gdm9pZCBtaXBzX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIHN0YXRpYyB2b2lkIHNldHVwX2xvY2FsX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgdHlwZSwgaW50IGludF9yZXEpOwogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKQEAgLTQ0Niw3ICs0NDYsNiBAQAogCWV4dGVybiBpbnQgYXUxeHh4X2ljMF9ucl9pcnFzOwogCiAJY3AwX3N0YXR1cyA9IHJlYWRfYzBfc3RhdHVzKCk7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgYXUxMDAwX0lSUSk7CiAKIAkvKiBJbml0aWFsaXplIGludGVycnVwdCBjb250cm9sbGVycyB0byBhIHNhZmUgc3RhdGUuCiAJKi8KQEAgLTY2MSwzICs2NjAsMjEgQEAKIAlhdV93cml0ZWwoc2xlZXBfaW50Y3RsX21hc2tbMF0sIElDMF9NQVNLU0VUKTsgYXVfc3luYygpOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpICYgU1QwX0lNOworCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KQorCQltaXBzX3RpbWVyX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikKKwkJaW50YzBfcmVxMF9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykKKwkJaW50YzBfcmVxMV9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJaW50YzFfcmVxMF9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICAmIENBVVNFRl9JUDUpCisJCWludGMxX3JlcTFfaXJxZGlzcGF0Y2gocmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wcm9tLmMKaW5kZXggOWMxNzFhZi4uYWU3ZDhjNTdiZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Byb20uYwpAQCAtMSwxMCArMSw5IEBACiAvKgogICoKICAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICogICAgUFJPTSBsaWJyYXJ5IGluaXRpYWxpc2F0aW9uIGNvZGUsIGFzc3VtaW5nIGEgdmVyc2lvbiBvZgotICogICAgcG1vbiBpcyB0aGUgYm9vdCBjb2RlLgorICogICAgUFJPTSBsaWJyYXJ5IGluaXRpYWxpc2F0aW9uIGNvZGUsIGFzc3VtaW5nIFlBTU9OIGlzIHRoZSBib290IGxvYWRlci4KICAqCi0gKiBDb3B5cmlnaHQgMjAwMCwyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCiAgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCiAgKgpAQCAtNDksOSArNDgsOSBAQAogCiB0eXBlZGVmIHN0cnVjdAogewotICAgIGNoYXIgKm5hbWU7Ci0vKiAgICBjaGFyICp2YWw7ICovCi19dF9lbnZfdmFyOworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsOworfSB0X2Vudl92YXI7CiAKIAogY2hhciAqIHByb21fZ2V0Y21kbGluZSh2b2lkKQpAQCAtODUsMjEgKzg0LDE2IEBACiB7CiAJLyoKIAkgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQkgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHN0b3JlZCBpbiB0aGUgZm9ybSBvZiAibWVtc2l6ZT02NCIuCiAJICovCiAKIAl0X2Vudl92YXIgKmVudiA9ICh0X2Vudl92YXIgKilwcm9tX2VudnA7Ci0JaW50IGk7CiAKLQlpID0gc3RybGVuKGVudm5hbWUpOwotCi0Jd2hpbGUoZW52LT5uYW1lKSB7Ci0JCWlmKHN0cm5jbXAoZW52bmFtZSwgZW52LT5uYW1lLCBpKSA9PSAwKSB7Ci0JCQlyZXR1cm4oZW52LT5uYW1lICsgc3RybGVuKGVudm5hbWUpICsgMSk7Ci0JCX0KKwl3aGlsZSAoZW52LT5uYW1lKSB7CisJCWlmIChzdHJjbXAoZW52bmFtZSwgZW52LT5uYW1lKSA9PSAwKQorCQkJcmV0dXJuIGVudi0+dmFsOwogCQllbnYrKzsKIAl9Ci0JcmV0dXJuKE5VTEwpOworCXJldHVybiBOVUxMOwogfQogCiBpbmxpbmUgdW5zaWduZWQgY2hhciBzdHIyaGV4bnVtKHVuc2lnbmVkIGNoYXIgYykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NsZWVwZXIuUyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NsZWVwZXIuUwppbmRleCA0NGRhYzNiLi42ODNkOWRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zbGVlcGVyLlMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2xlZXBlci5TCkBAIC0xMTIsNiArMTEyLDExIEBACiAJbXRjMAlrMCwgQ1AwX1BBR0VNQVNLCiAJbHcJazAsIDB4MTQoc3ApCiAJbXRjMAlrMCwgQ1AwX0NPTkZJRworCisJLyogV2UgbmVlZCB0byBjYXRjaCB0aGUgZWFscnkgQWxjaGVteSBTT0NzIHdpdGgKKwkgKiB0aGUgd3JpdGUtb25seSBDb25maWdbT0RdIGJpdCBhbmQgc2V0IGl0IGJhY2sgdG8gb25lLi4uCisJICovCisJamFsCWF1MXgwMF9maXh1cF9jb25maWdfb2QKIAlsdwkkMSwgUFRfUjEoc3ApCiAJbHcJJDIsIFBUX1IyKHNwKQogCWx3CSQzLCBQVF9SMyhzcCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYwppbmRleCBmODVmMTUyLi5mNzRkNjZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCkBAIC0xMTYsNiArMTE2LDcgQEAKIAogbnVsbDoKIAlhY2tfcjRrdGltZXIoMCk7CisJaXJxX2V4aXQoKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUKaW5kZXggNzIwZTc1Ny4uMjI1YWM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvY29iYWx0L01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIENvYmFsdCBtaWNybyBzeXN0ZW1zIGZhbWlseSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCiAKLW9iai15CSA6PSBpcnEubyBpbnQtaGFuZGxlci5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJIDo9IGlycS5vIHJlc2V0Lm8gc2V0dXAubwogCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBjb25zb2xlLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2NvYmFsdC9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzVkNWUzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDMgYnkgUmFsZiBCYWVjaGxlCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgYnkgTGlhbSBEYXZpZXMgKGxkYXZpZXNAYWdpbGUudHYpCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtY29iYWx0L2NvYmFsdC5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JCS50ZXh0Ci0JCS5hbGlnbgk1Ci0JCU5FU1RFRChjb2JhbHRfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCi0JCVBUUl9MQQlyYSwgcmV0X2Zyb21faXJxCi0JCW1vdmUJYTAsIHNwCi0JCWoJY29iYWx0X2lycQotCi0JCUVORChjb2JhbHRfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvaXJxLmMgYi9hcmNoL21pcHMvY29iYWx0L2lycS5jCmluZGV4IGY5YTEwODguLjBiNzVmNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvaXJxLmMKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9pcnEuYwpAQCAtMjAsOCArMjAsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtY29iYWx0L2NvYmFsdC5oPgogCi1leHRlcm4gdm9pZCBjb2JhbHRfaGFuZGxlX2ludCh2b2lkKTsKLQogLyoKICAqIFdlIGhhdmUgdHdvIHR5cGVzIG9mIGludGVycnVwdHMgdGhhdCB3ZSBoYW5kbGUsIG9uZXMgdGhhdCBjb21lIGluIHRocm91Z2gKICAqIHRoZSBDUFUgaW50ZXJydXB0IGxpbmVzLCBhbmQgb25lcyB0aGF0IGNvbWUgaW4gb24gdGhlIHZpYSBjaGlwLiBUaGUgQ1BVCkBAIC03OSw3ICs3Nyw3IEBACiAJCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCi1hc21saW5rYWdlIHZvaWQgY29iYWx0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBwZW5kaW5nOwogCkBAIC0xMjIsOCArMTIwLDYgQEAKIAkgKi8KIAlHQUxJTEVPX09VVEwoMCwgR1RfSU5UUk1BU0tfT0ZTKTsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIGNvYmFsdF9oYW5kbGVfaW50KTsKLQogCWluaXRfaTgyNTlfaXJxcygpOwkJCQkvKiAgMCAuLi4gMTUgKi8KIAltaXBzX2NwdV9pcnFfaW5pdChDT0JBTFRfQ1BVX0lSUSk7CQkvKiAxNiAuLi4gMjMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnCmluZGV4IDllMWFlOTUuLjRiMDgwYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9hdGxhc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6Mzk6NTIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUwOjU1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMjcsMTEgKzEyOSwxMSBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xNDksNyArMTUxLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTY1LDYgKzE2Niw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3OCwxMCArMTgwLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTkzLDcgKzE5MSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTIwMiw2ICsxOTksOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMjEsNyArMjIwLDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjQ5LDYgKzI0Nyw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjgxLDYgKzI4MCw3IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTMyMiw5ICszMjIsMTIgQEAKIENPTkZJR19JUF9WU19GVFA9bQogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMzQ4LDExICszNTEsMTQgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkBAIC0zNzYsMjAgKzM4MiwxOSBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfUFBUUD1tCitDT05GSUdfSVBfTkZfSDMyMz1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KQEAgLTQwNyw2ICs0MTIsNyBAQAogQ09ORklHX0lQX05GX05BVF9URlRQPW0KIENPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KIENPTkZJR19JUF9ORl9OQVRfUFBUUD1tCitDT05GSUdfSVBfTkZfTkFUX0gzMjM9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC00MjcsMTIgKzQzMywxMCBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDc4LDYgKzQ4MiwxMSBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX0JSSURHRT1tCiBDT05GSUdfVkxBTl84MDIxUT1tCkBAIC00OTIsMTEgKzUwMSw2IEBACiBDT05GSUdfSVBERFBfREVDQVA9eQogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01NTYsNiArNTYwLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC02OTQsOSArNzAxLDggQEAKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNzE1LDYgKzcyMSw3IEBACiBDT05GSUdfTURfUkFJRDE9bQogQ09ORklHX01EX1JBSUQxMD1tCiBDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQogQ09ORklHX01EX1JBSUQ2PW0KIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCkBAIC05MjEsNiArOTI4LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPW0KIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC05MzAsNiArOTM4LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC05ODgsMTAgKzk5Nyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtMTAyMiw2ICsxMDI3LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzOSwxNSArMTA0NSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTExMjAsNyArMTE0NCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE0MCw3ICsxMTYzLDYgQEAKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKQEAgLTEyMzIsNiArMTI1NCw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKaW5kZXggMzI5ODQxMC4uZDg1Y2RhNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjM5OjUzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MDo1NSAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTgwLDYgKzgwLDggQEAKICMgQ09ORklHX1NJQllURV9TQjEyNTBfUFJPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfVEJQUk9GIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQpAQCAtMTU0LDcgKzE1Niw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNzIsNiArMTczLDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTg2LDEwICsxODgsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0yMDEsNyArMTk5LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMjEwLDYgKzIwNyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMzAsNyArMjI4LDYgQEAKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX1BDSV9ERUJVRz15CiBDT05GSUdfTU1VPXkKIApAQCAtMjQ5LDYgKzI0Niw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfQlVJTERfRUxGNjQ9eQogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CkBAIC0yNjMsNiArMjYxLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yODQsMTIgKzI4MywxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzAxLDYgKzMwMywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzEwLDExICszMTcsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM3Nyw3ICszNzksNyBAQAogQ09ORklHX0JMS19ERVZfTkJEPW0KICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCkBAIC01NzUsNiArNTc3LDcgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjM3LDcgKzY0MCw2IEBACiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0lCWVRFPXkKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTY1Niw5ICs2NTgsNyBAQAogQ09ORklHX1NFTlNPUlNfUENGODU3ND15CiBDT05GSUdfU0VOU09SU19QQ0E5NTM5PXkKIENPTkZJR19TRU5TT1JTX1BDRjg1OTE9eQotQ09ORklHX1NFTlNPUlNfUlRDODU2ND15CiBDT05GSUdfU0VOU09SU19NQVg2ODc1PXkKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CkBAIC02ODYsMTAgKzY4Niw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzE0LDYgKzcxMCw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTczMSwxNSArNzI4LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzg1LDcgKzgwMCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKaW5kZXggNmMyOTYxYS4uY2EwYWYxNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1NCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIFR1ZSBBcHIgMjUgMDA6MDg6MDYgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC03Miw2ICs3Miw4IEBACiBDT05GSUdfUENJX1ZSNDFYWD15CiAjIENPTkZJR19WUkM0MTczIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC05MCw3ICs5Miw3IEBACiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorQ09ORklHX0NQVV9WUjQxWFg9eQogIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKQEAgLTEwMywxOCArMTA1LDIxIEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQogIwotIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTEzNSw3ICsxNDAsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTEsNiArMTU1LDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjQsMTAgKzE2OSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE3OSw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xODcsNiArMTg3LDkgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjA2LDcgKzIwOSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTIyNCw2ICsyMjYsNyBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjMzLDYgKzIzNiw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjU1LDEyICsyNTksMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3Miw2ICsyNzksMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4MSwxMSArMjkzLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDIsMTAgKzMwOSw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNDgsMTAgKzM1MiwxMiBAQAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTU3OCw2ICs1ODQsMTEgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjAxLDYgKzYxMiw3IEBACiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1ZSNDFYWD15CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjM2LDEwICs2NDgsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY3MCw2ICs2NzgsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02ODcsMTUgKzY5Niw1MCBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9WUjQxWFg9eQorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTcxMiw3ICs3NTYsNyBAQAogQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0ZVU0VfRlM9bQogCkBAIC03MzUsMTAgKzc3OSw5IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04MDUsNDQgKzg0OCwyMCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5VlIwLDM4NDAwIgogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCi1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC04NTIsOCArODcxLDYgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCmluZGV4IDgzMzZiMjEuLjdkMjY5ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1NSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTcgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02Myw3ICs2MywxMCBAQAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTMsNyArMTE2LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzUsNyArMTM3LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUxLDYgKzE1Miw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NCwxMCArMTY2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgyLDYgKzE4MCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwMSw3ICsyMDEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMjksNiArMjI4LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI0NywxMiArMjQ3LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNjQsNiArMjY3LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNzMsMTEgKzI4MSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMjk4LDYgKzMwMSw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz15CisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzQzLDcgKzM0OSw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTkzLDYgKzU5OSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNjAyLDYgKzYwOSw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjYwLDEwICs2NjgsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY5NCw2ICs2OTgsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC03MTEsMTUgKzcxNiwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTc2NSw3ICs3ODgsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTgyOCw2ICs4NTAsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCmluZGV4IDdmMDcxNDAuLjU3OWI2NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1NiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTcgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNCwxMSArMTE2LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzYsNyArMTM4LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUyLDYgKzE1Myw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY3LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgxLDcgKzE3OSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5MCw2ICsxODcsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yNDUsNiArMjQ0LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI2Nyw3ICsyNjcsOCBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTI3OCw2ICsyNzksOCBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yOTQsMTAgKzI5NywxMyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zMjEsNiArMzI3LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMzAsMTEgKzM0MSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzU2LDYgKzM2Miw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDEyLDcgKzQyMSw2IEBACiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTQzNCw3ICs0NDIsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ3MSw3ICs0NzgsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC03MjIsMTAgKzcyOSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzU2LDYgKzc1OSw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzczLDE0ICs3NzcsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODM2LDcgKzg1OCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk0NSw2ICs5NjYsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCmluZGV4IDk4NTkwY2EuLmU1ZWI1MzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1NyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTggMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNCwxMSArMTE2LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzYsNyArMTM4LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUyLDYgKzE1Myw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY3LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgxLDcgKzE3OSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5MCw2ICsxODcsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMzQsNiArMjMzLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI1Niw3ICsyNTYsOCBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTI2Nyw2ICsyNjgsOCBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yODMsMTAgKzI4NiwxMyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zMTAsNiArMzE2LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMTksMTEgKzMzMCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzQ1LDYgKzM1MSw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDAxLDcgKzQxMCw2IEBACiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTQyMyw3ICs0MzEsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2MCw3ICs0NjcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC02OTAsMTAgKzY5Nyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzExLDYgKzcxNCw3IEBACiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtNzU1LDYgKzc1OSw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzcyLDE0ICs3NzcsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODM1LDcgKzg1OCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk0NCw2ICs5NjYsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IDkyODg4NDcuLmE0M2ZiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1OCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTggMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19NSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFPXkKQEAgLTExNCwxMSArMTE2LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzYsNyArMTM4LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUzLDYgKzE1NCw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjYsMTAgKzE2OCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Miw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTEsNiArMTg4LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjQ0LDYgKzI0Myw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNjMsNyArMjYzLDggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yNzQsNiArMjc1LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjg4LDEwICsyOTEsMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzE1LDYgKzMyMSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzI0LDExICszMzUsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTQwMyw3ICs0MDksNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC00MjUsNyArNDMwLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC03NjMsMTAgKzc2Nyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzg0LDYgKzc4NCw3IEBACiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtNzk0LDYgKzc5NSw3IEBACiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CiAKQEAgLTgxNiw2ICs4MTgsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC04MzIsNiArODM1LDcgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CiAKQEAgLTg0NCwxNCArODQ4LDMyIEBACiBDT05GSUdfTU1DX0FVMVg9eQogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTkxMyw3ICs5MzUsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMjcsNiArMTA0OCw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9Im1lbT00OE0iCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCmluZGV4IDVhNDE1YjEuLmFkNjMyZDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1OSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTkgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNiwxMSArMTE4LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzgsNyArMTQwLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU0LDYgKzE1NSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NywxMCArMTY5LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgzLDcgKzE4MSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5Miw2ICsxODksOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMTEsNyArMjEwLDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjUzLDYgKzI1MSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNzUsNyArMjc0LDggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yODYsNiArMjg2LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMzAyLDEwICszMDQsMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzI5LDYgKzMzNCwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzM4LDExICszNDgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM2NCw2ICszNjksOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyMCw3ICs0MjgsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9VVElMPXkKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldApAQCAtNDQzLDcgKzQ1MCw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNDg2LDcgKzQ5Miw3IEBACiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC03MTQsNiArNzIwLDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC03MjUsNiArNzMyLDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC03OTAsMTAgKzc5OCw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODAyLDYgKzgwNiw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04MjUsOSArODMwLDExIEBACiBDT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtODQ2LDYgKzg1Myw3IEBACiAjIFBDSSBkZXZpY2VzCiAjCiAjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTg3Nyw2ICs4ODUsNyBAQAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldApAQCAtOTA1LDM0ICs5MTQsMjIgQEAKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT15Ci1DT05GSUdfT0JTT0xFVEVfT1NTX0RSSVZFUj15CiAjIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9DTVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRVMxMzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0VTMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FU1NTT0xPMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NQUVTVFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01BRVNUUk8zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0lDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FVMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FMSTU0NTUgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRk9SVEUgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUk1FOTZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtOTU4LDcgKzk1NSw2IEBACiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKQEAgLTk4NSw5ICs5ODEsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1lFQUxJTks9bQogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTAwMSwxNSArOTk1LDYgQEAKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMDU5LDE1ICsxMDQ0LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTEyMyw3ICsxMTI2LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIzMiw2ICsxMjM0LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwppbmRleCA4ZGMxZjE4Li44MTMwZTIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjAwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTUsMTEgKzExNywxMSBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTM3LDcgKzEzOSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1Myw2ICsxNTQsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjYsMTAgKzE2OCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Miw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTEsNiArMTg4LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjEwLDcgKzIwOSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI1Miw2ICsyNTAsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjc0LDcgKzI3Myw4IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMjg1LDYgKzI4NSw4IEBACiAjCiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTMwMSwxMCArMzAzLDEzIEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQEAgLTMyOCw2ICszMzMsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTMzNywxMSArMzQ3LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zNjMsNiArMzY4LDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MTksNyArNDI3LDYgQEAKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9VVElMPXkKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldApAQCAtNDQyLDcgKzQ0OSw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNDg5LDcgKzQ5NSw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNzU0LDYgKzc2MCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApAQCAtNzY1LDYgKzc3Miw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtODMwLDEwICs4MzgsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTg1OCw2ICs4NjIsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC04NzUsMTUgKzg4MCwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTkzOSw3ICs5NjIsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMDQ4LDYgKzEwNzAsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcKaW5kZXggOGZhZTYzZS4uOGQ4OGFjMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjAwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTQsNyArMTE2LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzYsNyArMTM3LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUyLDYgKzE1Miw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgzLDYgKzE4MCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwMiw3ICsyMDEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19JU0E9eQogQ09ORklHX01NVT15CiAKQEAgLTIzMSw2ICsyMjksNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjUyLDEyICsyNTEsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI2OSw2ICsyNzEsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI3OCwxMSArMjg1LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDMsNiArMzA1LDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPXkKKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNDgsNyArMzUzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9eQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC01NzEsNiArNTc2LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC01ODAsNiArNTg2LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MzgsMTAgKzY0NSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjU5LDYgKzY2Miw3IEBACiAjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC02NzAsNyArNjc0LDYgQEAKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKQEAgLTcwOCw2ICs3MTEsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC03MjUsMTUgKzcyOSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTc3Niw3ICs3OTgsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTg0MCw2ICs4NjEsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJpcD1hbnkiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKaW5kZXggYTBmY2Q0NC4uOGM5MTFiNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjAxIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjUsNiArNjUsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfRERCNTQ3N19CVVNfRlJFUVVFTkNZPTAKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTQsNyArMTE2LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzYsNyArMTM3LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUyLDYgKzE1Miw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgzLDYgKzE4MCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwMiw3ICsyMDEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMzAsNiArMjI4LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI1MSwxMiArMjUwLDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNjgsNiArMjcwLDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNzcsMTEgKzI4NCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzAyLDYgKzMwNCw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz15CisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzQ2LDcgKzM1MSw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTU2LDYgKzU2MSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNTY1LDYgKzU3MSw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjIzLDEwICs2MzAsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY1Nyw2ICs2NjAsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02NzQsMTUgKzY3OCwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTcyNSw3ICs3NDcsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Miw2ICs4MTMsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJpcD1hbnkiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKaW5kZXggNWExODFlYS4uZDgzODQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjAxIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjMsMTEgKzYzLDEzIEBACiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CkBAIC0xMTMsNyArMTE1LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1dCPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xMzUsNyArMTM2LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUxLDYgKzE1MSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgwLDcgKzE3Nyw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTg5LDYgKzE4NSw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIzMywxMSArMjMxLDEwIEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yNTQsMTIgKzI1MSwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjcxLDYgKzI3MSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjgwLDExICsyODUsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwNSw2ICszMDUsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM0NSw3ICszNDgsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCkBAIC01NjcsMTAgKzU3MCw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTg4LDYgKzU4Nyw3IEBACiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtNjE3LDYgKzYxNyw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC02MzMsMTQgKzYzNCwzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC02ODYsNyArNzA1LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzA1LDcgKzcyMyw2IEBACiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfVUZTX0ZTPXkKLUNPTkZJR19VRlNfRlNfV1JJVEU9eQogCiAjCiAjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZwppbmRleCA4ZmJmYzA2Li4wNzYwZjQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBUdWUgQXByIDI1IDAwOjA4OjIwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNzAsNiArNzAsOCBAQAogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTg4LDcgKzkwLDcgQEAKICMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1ZSNDFYWD15CiAjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldApAQCAtMTAxLDE4ICsxMDMsMjEgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQorQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCiAjCiAjIEtlcm5lbCB0eXBlCiAjCi0jIENPTkZJR18zMkJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQogIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQpAQCAtMTMzLDcgKzEzOCw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE0NCwxMSArMTQ4LDEwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2MiwxMCArMTY1LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTc3LDcgKzE3Niw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE4NSw2ICsxODMsOSBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMTksODUgKzIyMCwxMiBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgTmV0d29ya2luZwogIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzEzLDcgKzI0MSw2IEBACiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKICMKLUNPTkZJR19DT05ORUNUT1I9bQogCiAjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKQEAgLTMzNSwxMSArMjYyLDExIEBACiAjCiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT1tCiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CkBAIC0zOTgsODEgKzMyNSw4IEBACiAjCiAKICMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19QSFlMSUI9bQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCiAjIElTRE4gc3Vic3lzdGVtCiAjCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwogIyBUZWxlcGhvbnkgU3VwcG9ydApAQCAtNTA4LDExICszNjIsNyBAQAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTUzMSw2ICszODEsMTAgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU2NSw2ICs0MTksNyBAQAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKK0NPTkZJR19HUElPX1ZSNDFYWD15CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjAwLDEwICs0NTUsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTYxMSw3ICs0NjIsNiBAQAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTYzNSw2ICs0ODUsNyBAQAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNjUxLDE0ICs1MDIsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNjY5LDEzICs1MzgsMTIgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKIENPTkZJR19GVVNFX0ZTPW0KIApAQCAtNjk4LDEwICs1NjYsOSBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzIyLDI5ICs1ODksNiBAQAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIAogIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz1tCi0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTc2Nyw0NCArNjExLDIwIEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5VlIwLDE5MjAwIG1lbT04TSIKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCi1DT05GSUdfS0VZUz15Ci1DT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQorIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtODE0LDggKzYzNCw2IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMTY9bQotQ09ORklHX0NSQzMyPW0KLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ldjY0MTIwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCmluZGV4IGYyZDQzYmUuLjcwNjdmNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjA1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MTowMiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY1LDYgKzY1LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogIyBDT05GSUdfRVZCX1BDSTEgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNiw3ICsxMTgsNiBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzgsNyArMTM5LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU0LDYgKzE1NCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NywxMCArMTY4LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgyLDcgKzE3OSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldApAQCAtMTkxLDYgKzE4Nyw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIxMCw3ICsyMDgsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMzgsNiArMjM1LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQpAQCAtMjU4LDEyICsyNTYsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NSw2ICsyNzYsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4NCwxMSArMjkwLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDksNiArMzEwLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNTIsNyArMzU2LDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC01NTAsNiArNTU0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC01NTksNiArNTY0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MTcsMTAgKzYyMyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjUxLDYgKzY1Myw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTY2OCwxNSArNjcxLDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzE5LDcgKzc0MCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzgzLDYgKzgwMyw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0xOTIuMTY4LjEuMTovbW50L2Rpc2syL2ZzLmdhbCBpcD0xOTIuMTY4LjEuMjExOjE5Mi4xNjguMS4xOjo6Z3Q6OiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZwppbmRleCBhYzU4NDFjLi4wMGI1NmVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDowNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MDMgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExOSw3ICsxMjEsNiBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xNDIsNyArMTQzLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU4LDYgKzE1OCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3MSwxMCArMTcyLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg2LDcgKzE4Myw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldApAQCAtMTk1LDYgKzE5MSw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTI0MCw2ICsyMzgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNjAsMTIgKzI1OSwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc3LDYgKzI3OSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjg2LDExICsyOTMsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMxMSw2ICszMTMsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM0OSw3ICszNTQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC01NjcsMTAgKzU3Miw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjAxLDYgKzYwMiw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC02MTcsMTQgKzYxOSwzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC02NjcsNyArNjg3LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC03MzEsNiArNzUwLDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCmluZGV4IDQyZDVjZDcuLjYwN2UyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjM5OjUxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MDo1NCAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19BUkM9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CkBAIC0xMjEsNyArMTIzLDYgQEAKIENPTkZJR19JUDIyX0NQVV9TQ0FDSEU9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xNDMsNyArMTQ0LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTYwLDYgKzE2MCw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTczLDEwICsxNzQsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODgsNyArMTg1LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTk3LDYgKzE5Myw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTI0Miw2ICsyNDAsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI2NCw2ICsyNjMsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0zMDUsOSArMzA1LDEyIEBACiBDT05GSUdfSVBfVlNfRlRQPW0KIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTMzMCwxMSArMzMzLDE0IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzU3LDIwICszNjMsMTkgQEAKIENPTkZJR19JUF9ORl9URlRQPW0KIENPTkZJR19JUF9ORl9BTUFOREE9bQogQ09ORklHX0lQX05GX1BQVFA9bQorQ09ORklHX0lQX05GX0gzMjM9bQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCkBAIC0zODgsNiArMzkzLDcgQEAKIENPTkZJR19JUF9ORl9OQVRfVEZUUD1tCiBDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfTkFUX1BQVFA9bQorQ09ORklHX0lQX05GX05BVF9IMzIzPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQpAQCAtNDA4LDEyICs0MTQsMTAgQEAKIENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCi1DT05GSUdfSVA2X05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KQEAgLTQzNSw2ICs0MzksMTEgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTQ0NCwxMSArNDUzLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogQ09ORklHX05FVF9ESVZFUlQ9eQogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtNTA4LDYgKzUxMiw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNTQ2LDcgKzU1Myw3IEBACiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTgxMiwxMCArODE5LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC04NTcsNiArODYwLDcgQEAKICMKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKQEAgLTg3MywxNCArODc3LDMyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPW0KQEAgLTk0NCw3ICs5NjYsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2Myw3ICs5ODQsNiBAQAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogQ09ORklHX1VGU19GUz1tCi0jIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCkBAIC0xMDc4LDYgKzEwOTgsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKaW5kZXggOGM0MDU5MC4uZjcyNGI0YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM0Ci0jIFR1ZSBGZWIgMjEgMTM6NDQ6MzEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA0IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNzAsNiArNzAsOCBAQAogIyBDT05GSUdfUkVQTElDQVRFX0tURVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFUExJQ0FURV9FWEhBTkRMRVJTIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0FSQz15CiBDT05GSUdfRE1BX0lQMjc9eQpAQCAtMTIzLDYgKzEyNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKK0NPTkZJR19OT0RFU19TSElGVD02CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CkBAIC0xNjIsNiArMTY1LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNzUsMTAgKzE3OSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE5MCw3ICsxOTAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5OSw2ICsxOTgsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjE5LDcgKzIxOSw2IEBACiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMzcsNiArMjM2LDcgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0VMRjY0IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTMzJfQ09NUEFUPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX01JUFMzMl9PMzI9eQpAQCAtMjc0LDEyICsyNzQsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM2Myw2ICszNjYsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQwNyw3ICs0MTMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTQ3Myw3ICs0NzksNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKQEAgLTQ5MSw2ICs0OTYsNyBAQAogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ1PXkKK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtNjU0LDYgKzY2MCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKQEAgLTcyNywxMCArNzM0LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03NTUsNiArNzU4LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzcyLDE3ICs3NzYsMzEgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKKyMgUmVhbCBUaW1lIENsb2NrCiAjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtODQwLDcgKzg1OCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtOTIyLDYgKzkzOSw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwppbmRleCA3ZmRjYWY1Li44ZjExZDM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDowOSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MDUgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfQVJDPXkKIENPTkZJR19ETUFfSVAzMj15CkBAIC0xNDIsNyArMTQ0LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU5LDYgKzE2MCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3MiwxMCArMTc0LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg5LDYgKzE4Nyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMDgsNyArMjA3LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjI2LDYgKzIyNCw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfQlVJTERfRUxGNjQgaXMgbm90IHNldAogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CkBAIC0yNDAsNiArMjM5LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yNjEsMTIgKzI2MSwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc4LDYgKzI4MSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjg3LDExICsyOTUsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMxMiw2ICszMTUsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9eQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM1Nyw3ICszNjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD15CiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTQyOCw3ICs0MzQsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNjE1LDYgKzYyMCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNjI0LDYgKzYzMCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjgyLDEwICs2ODksNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTcxNiw2ICs3MTksNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC03MzMsMTUgKzczNywzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTc4NCw3ICs4MDYsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04NjEsNiArODgyLDggQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZwppbmRleCBjNzE2OTk2Li43NTdhZGYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjUsNiArNjUsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19JVDgxNzJfUkVWQyBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTE1LDcgKzExNyw2IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTM3LDcgKzEzOCw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1NCw2ICsxNTQsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjcsMTAgKzE2OCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Myw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTIsNiArMTg4LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjM3LDYgKzIzNSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjU4LDEyICsyNTcsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NSw2ICsyNzcsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4NCwxMSArMjkxLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDksNiArMzExLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zODcsNyArMzkyLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC00MjQsNyArNDI4LDcgQEAKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNjY2LDEwICs2NzAsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTcwNCw3ICs3MDQsNiBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKLSMgQ09ORklHX09CU09MRVRFX09TU19EUklWRVIgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX0lUODE3Mj15CiAjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKQEAgLTcxNCw2ICs3MTMsNyBAQAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNzMwLDE0ICs3MzAsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzgwLDcgKzc5OCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODQ2LDYgKzg2Myw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2l2cl9kZWZjb25maWcKaW5kZXggYTgzNzZkMS4uMDIxNzYxYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjExIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MTowNiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTEyLDcgKzExNCw2IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTM0LDcgKzEzNSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1MSw2ICsxNTEsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjQsMTAgKzE2NSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE3OSw3ICsxNzYsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xODgsNiArMTg0LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjA3LDcgKzIwNSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTIzNSw2ICsyMzIsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI1NiwxMiArMjU0LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNzMsNiArMjc0LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yODIsMTEgKzI4OCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzA3LDYgKzMwOCw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzUwLDcgKzM1NCw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTY1LDYgKzU2OSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNTc0LDYgKzU3OSw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjMxLDEwICs2MzcsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2NjcsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02ODIsMTUgKzY4NSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTczMyw3ICs3NTQsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Nyw2ICs4MTcsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKaW5kZXggMzE2MDE1My4uMDhmNmMzMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA2IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjUsNiArNjUsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfSkFHVUFSX0RNQUxPVz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTIyLDcgKzEyNCw2IEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKQEAgLTE0NCw3ICsxNDUsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKICMgQ09ORklHX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE2MCw2ICsxNjAsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC0xNzIsMTAgKzE3Myw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Niw3ICsxODMsNiBAQAogIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTUsNiArMTkxLDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjE0LDcgKzIxMiw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI0MSw2ICsyMzgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNjAsMTYgKzI1OCwxOSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldApAQCAtMzM4LDEwICszMzksOSBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCkBAIC00MjMsNiArNDIzLDcgQEAKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk8xMDA9eQogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CkBAIC00NDYsNiArNDQ3LDcgQEAKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTUxNCw2ICs1MTYsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTUyMyw2ICs1MjYsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU3OSwxMCArNTgzLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02MDcsNiArNjA3LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI0LDEyICs2MjUsMjkgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKICMKIAogIwpAQCAtNjcyLDcgKzY5MCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03MTgsNiArNzM1LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCmluZGV4IDUzZmJlZjEuLjM4YjFlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjEzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MTowNyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTExLDcgKzExMyw2IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xMzMsNyArMTM0LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTQ5LDYgKzE0OSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2MiwxMCArMTYzLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgwLDYgKzE3Nyw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE5OSw3ICsxOTgsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMjcsNiArMjI1LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI0OCwxMiArMjQ3LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNjUsNiArMjY3LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNzQsMTEgKzI4MSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMjk5LDYgKzMwMSw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz15CisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzQzLDcgKzM0OCw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTUxLDcgKzU1NiwxMiBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9UWFg5PXkKIENPTkZJR19IQVNfVFhYOV9TRVJJQUw9eQorIyBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVFhYOV9TVERTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTklYOThfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MTAsMTAgKzYyMCw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjMxLDYgKzYzNyw3IEBACiAjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC02NDIsNyArNjQ5LDYgQEAKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKQEAgLTY3OSw2ICs2ODUsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02OTYsMTUgKzcwMywzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldApAQCAtNzQ1LDcgKzc3MCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODA5LDYgKzgzMyw4IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnCmluZGV4IGVmMGZhOWYuLjRkMjU5OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA3IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjgsNiArNjgsOCBAQAogQ09ORklHX0RTMTYwMz15CiBDT05GSUdfTEFTQVRfU1lTQ1RMPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTksNyArMTIxLDYgQEAKIENPTkZJR19SNTAwMF9DUFVfU0NBQ0hFPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTQxLDcgKzE0Miw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1Nyw2ICsxNTcsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNzAsMTAgKzE3MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Niw3ICsxODMsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTUsNiArMTkxLDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjE0LDcgKzIxMiw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI0Miw2ICsyMzksNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNTksMTIgKzI1NywxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc2LDYgKzI3NywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjg1LDExICsyOTEsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMxMCw2ICszMTEsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM2Niw3ICszNzAsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC0zODksNyArMzkyLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC00MzAsNyArNDMyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC02NzIsNiArNjc0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC02ODEsNiArNjg0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC03MzksMTAgKzc0Myw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzczLDYgKzc3Myw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTc5MCwxNSArNzkxLDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODQ3LDcgKzg2Niw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtOTE0LDYgKzkzMiw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCmluZGV4IDM2N2QyNzkuLjk3N2Y1MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTUgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA4IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQpAQCAtMTI4LDE2ICsxMzAsMjEgQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UPXkKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19WUEVfTE9BREVSPXkKK0NPTkZJR19NSVBTX01UX0ZQQUZGPXkKIENPTkZJR19NSVBTX1ZQRV9MT0FERVJfVE9NPXkKIENPTkZJR19NSVBTX1ZQRV9BUFNQX0FQST15CitDT05GSUdfTUlQU19BUFNQX0tTUEQ9eQogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKKyMgQ09ORklHX0NQVV9NSVBTUjJfSVJRX1ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTUjJfSVJRX0VJIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTU1LDcgKzE2Miw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE3MSw2ICsxNzcsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xODQsMTAgKzE5MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE5OSw3ICsyMDIsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0yMDgsNiArMjEwLDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjI3LDcgKzIzMSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI1NSw2ICsyNTgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI4Nyw2ICsyOTEsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0zMjgsOSArMzMzLDEyIEBACiBDT05GSUdfSVBfVlNfRlRQPW0KIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTM1NCwxMSArMzYyLDE0IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkBAIC0zODIsMjAgKzM5MywxOSBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfUFBUUD1tCitDT05GSUdfSVBfTkZfSDMyMz1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KQEAgLTQxMyw2ICs0MjMsNyBAQAogQ09ORklHX0lQX05GX05BVF9URlRQPW0KIENPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KIENPTkZJR19JUF9ORl9OQVRfUFBUUD1tCitDT05GSUdfSVBfTkZfTkFUX0gzMjM9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC00MzMsMTIgKzQ0NCwxMCBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDg0LDYgKzQ5MywxMSBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX0JSSURHRT1tCiBDT05GSUdfVkxBTl84MDIxUT1tCkBAIC00OTgsMTEgKzUxMiw2IEBACiBDT05GSUdfSVBERFBfREVDQVA9eQogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01NjIsNiArNTcxLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC03MzQsNyArNzQ2LDYgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKQEAgLTc1Myw2ICs3NjQsNyBAQAogQ09ORklHX01EX1JBSUQxPW0KIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtOTU2LDYgKzk2OCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtOTY1LDYgKzk3OCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtMTAyMiwxMCArMTAzNiw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtMTA1Niw2ICsxMDY2LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA3MywxNSArMTA4NCwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTExNTQsNyArMTE4Myw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3NCw3ICsxMjAyLDYgQEAKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKQEAgLTEyNjYsNiArMTI5Myw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZwppbmRleCBmZTc4OTYxLi4wMDU2MGUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoxNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MDkgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNCwxNiArMTE2LDE5IEBACiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVD15CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogQ09ORklHX01JUFNfVlBFX0xPQURFUj15CitDT05GSUdfTUlQU19NVF9GUEFGRj15CiBDT05GSUdfTUlQU19WUEVfTE9BREVSX1RPTT15CiBDT05GSUdfTUlQU19WUEVfQVBTUF9BUEk9eQorQ09ORklHX01JUFNfQVBTUF9LU1BEPXkKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTE0MSw3ICsxNDYsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTcsNiArMTYxLDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNzEsMTAgKzE3Niw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Niw3ICsxODcsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTUsNiArMTk1LDcgQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIzOCw2ICsyMzksNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI2OCwxMiArMjcwLDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI5MCw2ICsyOTUsMTEgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI5OSwxMSArMzA5LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogQ09ORklHX05FVF9ESVZFUlQ9eQogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzk3LDcgKzQwMiw3IEBACiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCkBAIC01MzIsNyArNTM3LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MQotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MQogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC01OTYsMTAgKzYwMSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjI0LDYgKzYyNSw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC02NDAsMTQgKzY0MiwzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC02OTAsOCArNzEwLDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKaW5kZXggZTQ2MjBlNy4uMjg2YTAxOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjE3IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MTowOSAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTcyLDYgKzcyLDggQEAKIENPTkZJR19QQ0lfVlI0MVhYPXkKIENPTkZJR19WUkM0MTczPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC05MCw3ICs5Miw3IEBACiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorQ09ORklHX0NQVV9WUjQxWFg9eQogIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKQEAgLTEwMywxOCArMTA1LDIxIEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQogIwotIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTEzNSw3ICsxNDAsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTEsNiArMTU1LDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTY0LDEwICsxNjksNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xNzksNyArMTgwLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTg3LDYgKzE4Nyw5IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwNiw3ICsyMDksNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMjUsNiArMjI3LDcgQEAKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1ZSQzQxNzMgaXMgbm90IHNldAogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTIzNiw2ICsyMzksNyBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjQ1LDYgKzI0OSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjY0LDEyICsyNjksMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI4MSw2ICsyODksMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI5MCwxMSArMzAzLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMTYsNiArMzI0LDkgQEAKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNjAsNyArMzcxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCkBAIC00NzUsNiArNDg2LDcgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiBDT05GSUdfTkVUX1JBRElPPXkKKyMgQ09ORklHX05FVF9XSVJFTEVTU19SVE5FVExJTksgaXMgbm90IHNldAogCiAjCiAjIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCkBAIC01MTMsNiArNTI1LDcgQEAKICMKICMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQzWFggaXMgbm90IHNldAogQ09ORklHX05FVF9XSVJFTEVTUz15CiAKICMKQEAgLTYwNCw2ICs2MTcsOCBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTYzNCw2ICs2NDksNyBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjY5LDEwICs2ODUsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY4MSw2ICs2OTMsNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzAzLDYgKzcxNiw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9bQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtNzU2LDkgKzc3MCw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTc3MiwxNSArNzg0LDYgQEAKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC04MzIsMTUgKzgzNSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg4Myw3ICs5MDQsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk0Niw2ICs5NjYsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5VlIwLDE5MjAwIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKaW5kZXggOTI1ZDhhZC4uMWNlNDMxMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoxOCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTAgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTEyMCw3ICsxMjIsNiBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xNDQsNyArMTQ1LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTYxLDYgKzE2MSw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTc0LDEwICsxNzUsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODksNyArMTg2LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CkBAIC0xOTgsNiArMTk0LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjE3LDcgKzIxNSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI0NSw2ICsyNDIsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjY2LDYgKzI2NCw3IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yNzgsOSArMjc3LDEyIEBACiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj1tCiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CiAjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTI5OSwxMCArMzAxLDEzIEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQEAgLTMzMiw2ICszMzcsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTM0MSwxMSArMzUxLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zNjcsNiArMzcyLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MTEsNyArNDE5LDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIApAQCAtNDc1LDcgKzQ4Myw2IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CkBAIC02OTAsNiArNjk3LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC02OTksNiArNzA3LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC03NTYsMTAgKzc2NSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzc3LDYgKzc4Miw3IEBACiAjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldApAQCAtNzg4LDcgKzc5NCw2IEBACiAjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CkBAIC04MzIsNiArODM3LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtODQ5LDE1ICs4NTUsMzMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05MTQsNyArOTM4LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAyNSw2ICsxMDQ4LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iaXA9YW55IHJvb3Q9bmZzIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcKaW5kZXggZWUxY2Y5Yi4uOGE2YWE1MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoxOSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTAgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTEzOSw3ICsxNDEsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTUsNiArMTU2LDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTY4LDEwICsxNzAsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODUsNiArMTgzLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwNCw3ICsyMDMsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMjIsNiArMjIwLDcgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0VMRjY0IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTMzJfQ09NUEFUPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX01JUFMzMl9PMzI9eQpAQCAtMjM2LDYgKzIzNSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKQEAgLTI1NiwxMiArMjU2LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNzMsNiArMjc2LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yODIsMTEgKzI5MCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzA3LDYgKzMxMCw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz15CisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzUxLDcgKzM1Nyw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTQyLDYgKzU0OCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNTUxLDYgKzU1OCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjA5LDEwICs2MTcsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY0Myw2ICs2NDcsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02NjAsMTUgKzY2NSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTcxMSw3ICs3MzQsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTc3OCw2ICs4MDAsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnCmluZGV4IGQ4MGZmMjcuLmY5ZWUzNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoyMCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTEgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTEyMSw3ICsxMjMsNiBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xNDQsNyArMTQ1LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTYwLDYgKzE2MCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3MywxMCArMTc0LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTkxLDYgKzE4OCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIzNiw2ICsyMzUsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNTYsMTIgKzI1NiwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjczLDYgKzI3NiwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjgyLDExICsyOTAsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwNyw2ICszMTAsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9eQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM0Niw3ICszNTIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9eQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC01NjMsMTAgKzU2OSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTk3LDYgKzU5OSw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC02MTMsMTQgKzYxNiwzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC02NjMsNyArNjg0LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC03MzAsNiArNzUwLDggQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcKaW5kZXggYzBmNTA4ZC4uYjQ4YmRlZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoyMSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTEgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTE0Miw3ICsxNDQsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTgsNiArMTU5LDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTcxLDEwICsxNzMsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODgsNiArMTg2LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwNyw3ICsyMDYsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMjUsNiArMjIzLDcgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0VMRjY0IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTMzJfQ09NUEFUPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX01JUFMzMl9PMzI9eQpAQCAtMjM5LDYgKzIzOCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKQEAgLTI1OSwxMiArMjU5LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNzYsNiArMjc5LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yODUsMTEgKzI5Myw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzEwLDYgKzMxMyw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz15CisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzU0LDcgKzM2MCw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTQ1LDYgKzU1MSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNTU0LDYgKzU2MSw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjEyLDEwICs2MjAsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY0Niw2ICs2NTAsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02NjMsMTUgKzY2OCwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTcxNCw3ICs3MzcsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTc4MSw2ICs4MDMsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCmluZGV4IDE5NGIzYzcuLjAxYWFjNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoyMiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTIgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNiwxMSArMTE4LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzgsNyArMTQwLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU0LDYgKzE1NSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NywxMCArMTY5LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgzLDcgKzE4MSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5Miw2ICsxODksOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yNDcsNiArMjQ2LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI2OSw3ICsyNjksOCBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTI4MCw2ICsyODEsOCBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yOTYsMTAgKzI5OSwxMyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zMjMsNiArMzI5LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMzIsMTEgKzM0Myw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzU4LDYgKzM2NCw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDE0LDcgKzQyMyw2IEBACiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTQzNiw3ICs0NDQsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ3Myw3ICs0ODAsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC03MTYsMTAgKzcyMyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzUwLDYgKzc1Myw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY3LDE0ICs3NzEsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODMwLDcgKzg1Miw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTkzOSw2ICs5NjAsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCmluZGV4IDg5ODU3MjUuLjM5OGMzYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoyNCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTMgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNSwxMSArMTE3LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzcsNyArMTM5LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUzLDYgKzE1NCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NiwxMCArMTY4LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgyLDcgKzE4MCw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5MSw2ICsxODgsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMTAsNyArMjA5LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjUzLDYgKzI1MSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNzUsNyArMjc0LDggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yODYsNiArMjg2LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMzAyLDEwICszMDQsMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzI5LDYgKzMzNCwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzM4LDExICszNDgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM2NCw2ICszNjksOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyMCw3ICs0MjgsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC00NDMsNyArNDUwLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC00ODUsNyArNDkxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC03NTAsNiArNzU2LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC03NjEsNiArNzY4LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC04MjYsMTAgKzgzNCw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODU0LDYgKzg1OCw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTg3MSwxNSArODc2LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTM1LDcgKzk1OCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDQsNiArMTA2Niw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKaW5kZXggYWRiZjk5Ny4uZWEyODJhNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjI1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MToxMyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTE1LDExICsxMTcsMTEgQEAKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTEzNyw3ICsxMzksNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTMsNiArMTU0LDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTY2LDEwICsxNjgsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODIsNyArMTgwLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTkxLDYgKzE4OCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIxMCw3ICsyMDksNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yNTMsNiArMjUxLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI3NSw3ICsyNzQsOCBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTI4Niw2ICsyODYsOCBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0zMDIsMTAgKzMwNCwxMyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zMjksNiArMzM0LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMzgsMTEgKzM0OCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzY0LDYgKzM2OSw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDIwLDcgKzQyOCw2IEBACiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTQ0Myw3ICs0NTAsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ4NSw3ICs0OTEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTc0Miw2ICs3NDgsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKQEAgLTc1Myw2ICs3NjAsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTgxOCwxMCArODI2LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC04NDYsNiArODUwLDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtODYzLDE1ICs4NjgsMzMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05MjcsNyArOTUwLDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzNiw2ICsxMDU4LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKaW5kZXggYjVkYjcwMC4uNGM1N2U1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoyNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTQgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNCwxMSArMTE2LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTEzNiw3ICsxMzgsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTMsNiArMTU0LDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NywxMCArMTY5LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgxLDcgKzE3OSw2IEBACiAjCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CkBAIC0xOTAsNiArMTg3LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjA5LDcgKzIwOCw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01NVT15CiAKQEAgLTIzOCw2ICsyMzYsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjU3LDEyICsyNTYsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc0LDYgKzI3NiwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjgzLDExICsyOTAsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTQ2OSw3ICs0NzEsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNjcxLDYgKzY3Miw3IEBACiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKICMgQ09ORklHX1NFUklBTF9JUDMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNzIzLDYgKzcyNSw3IEBACiAjCiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwpAQCAtNzMwLDEwICs3MzMsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTc0Miw2ICs3NDEsNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzY0LDYgKzc2NCw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtODI3LDkgKzgyOCw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTg0NCwxNSArODQzLDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTkwMiwxNSArODkyLDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTU2LDcgKzk2NCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA2Nyw2ICsxMDc0LDcgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TTEFCPXkKKyMgQ09ORklHX0RFQlVHX1NMQUJfTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCmluZGV4IDQxODcyODcuLjNjOGYzNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjI4IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MToxNCAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTE0LDEyICsxMTYsMTEgQEAKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfQURWQU5DRUQ9eQogQ09ORklHX0NQVV9IQVNfTExTQz15Ci0jIENPTkZJR19DUFVfSEFTX1dCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTM3LDcgKzEzOCw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1NCw2ICsxNTQsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTY3LDEwICsxNjgsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODEsNyArMTc4LDYgQEAKICMKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTE5MCw2ICsxODYsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMDksNyArMjA3LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMzcsNiArMjM0LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI1Niw2ICsyNTQsNyBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMjY4LDkgKzI2NywxMiBAQAogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogQ09ORklHX0lQVjY9bQogIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKK0NPTkZJR19JUFY2X1JPVVRFX0lORk89eQogIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CkBAIC0yODcsMTAgKzI4OSwxMiBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zMjAsNiArMzI0LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMjksMTEgKzMzOCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtNTIxLDcgKzUyNSw2IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CkBAIC03NTcsNiArNzYwLDcgQEAKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwogIyBDT05GSUdfU0VSSUFMX0lQMzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC04MTYsNyArODIwLDYgQEAKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldApAQCAtODM1LDkgKzgzOCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC04NjcsNiArODY4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CkBAIC05MDEsMTAgKzkwMyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtOTEzLDYgKzkxMSw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC05MjIsNiArOTIxLDcgQEAKICMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKQEAgLTkzMyw3ICs5MzMsNiBAQAogIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldApAQCAtOTcwLDYgKzk2OSw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTAzMCw5ICsxMDMwLDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTA0NywxNSArMTA0NSw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMTA2LDE1ICsxMDk1LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTE3MSw3ICsxMTc4LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMjgwLDYgKzEyODYsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKaW5kZXggMzFmNWFmYS4uNGJjYzAxZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCi0jIFN1biBGZWIgMTIgMTk6MTg6NTUgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjE1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKQEAgLTExNSwxNiArMTE3LDE3IEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMTQ3LDYgKzE1MCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC0xNTksMTAgKzE2Myw2IEBACiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiBDT05GSUdfVElOWV9TSE1FTT15CiBDT05GSUdfQkFTRV9TTUFMTD0xCkBAIC0xNzcsNiArMTc3LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTk2LDYgKzE5OCw3IEBACiAjCiBDT05GSUdfSVNBPXkKIENPTkZJR19NTVU9eQorQ09ORklHX0k4MjUzPXkKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0yNDEsMTIgKzI0NCwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzA4LDcgKzMxNCw3IEBACiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKQEAgLTUzMCwxMCArNTM2LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC01NTIsNiArNTU0LDcgQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiAKQEAgLTU2NSw2ICs1NjgsNyBAQAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNTgxLDE1ICs1ODUsMjggQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCisjIFJlYWwgVGltZSBDbG9jawogIwogCiAjCkBAIC02MzIsNyArNjQ5LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9eQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTY4MCw2ICs2OTYsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCmluZGV4IGIxMjZmNzYuLjNkNDQxOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDozMCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTYgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC03MSw2ICs3MSw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4X01QTEVYX05BTkQgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOF9NUExFWF9BVEEgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTEyMSwxMCArMTIzLDkgQEAKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0FEVkFOQ0VEPXkKIENPTkZJR19DUFVfSEFTX0xMU0M9eQotQ09ORklHX0NQVV9IQVNfV0I9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQpAQCAtMTQ1LDcgKzE0Niw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE2Miw2ICsxNjIsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3NSwxMCArMTc2LDYgQEAKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE5MCw3ICsxODcsNiBAQAogIwogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtMTk5LDYgKzE5NSw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIxOCw3ICsyMTYsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAogQ09ORklHX0lTQT15CiBDT05GSUdfTU1VPXkKIApAQCAtMjQ3LDYgKzI0NCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNjcsNiArMjY1LDcgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTI3OSw5ICsyNzgsMTIgQEAKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMzAwLDEwICszMDIsMTIgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzMzLDYgKzMzNywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzQyLDExICszNTEsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzMsOSBAQAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyNSw3ICs0MzIsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9VVElMPXkKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldApAQCAtNDQ3LDcgKzQ1Myw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNzAyLDYgKzcwNyw3IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogQ09ORklHX05FVF9SQURJTz15CisjIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKIAogIwogIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQpAQCAtNzE1LDYgKzcyMSw4IEBACiAjCiAjIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JUFcyMjAwPW0KKyMgQ09ORklHX0lQVzIyMDBfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdfUU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVzIyMDBfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKQEAgLTcyNCw2ICs3MzIsNyBAQAogIwogIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDNYWCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1dJUkVMRVNTPXkKIAogIwpAQCAtODIxLDcgKzgzMCwxMiBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9UWFg5PXkKIENPTkZJR19IQVNfVFhYOV9TRVJJQUw9eQorIyBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVFhYOV9TVERTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtODc0LDYgKzg4OCw3IEBACiAjCiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwpAQCAtODgxLDEwICs4OTYsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTg5Myw2ICs5MDQsNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtOTAyLDYgKzkxNCw3IEBACiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKQEAgLTkxMyw3ICs5MjYsNiBAQAogIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVRZPXkKQEAgLTkzNCw2ICs5NDYsNyBAQAogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKIENPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldApAQCAtOTU0LDYgKzk2Nyw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTAwMyw5ICsxMDE3LDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9ZRUFMSU5LPW0KICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTEwMTksMTUgKzEwMzEsNiBAQAogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTEwNzgsMTUgKzEwODEsMzMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xMTQ4LDcgKzExNjksNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMjY2LDYgKzEyODYsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwppbmRleCA0NjNlZDNkLi5lZGZiOTY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjMxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MToxNiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19BUkM9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKQEAgLTEyMiw3ICsxMjQsNiBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xNDUsNyArMTQ2LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTYzLDYgKzE2Myw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTc2LDEwICsxNzcsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xOTEsNyArMTg4LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CkBAIC0yMDAsNiArMTk2LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjIwLDEwICsyMTgsMTAgQEAKIENPTkZJR19IV19IQVNfRUlTQT15CiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX0lTQT15CiAjIENPTkZJR19FSVNBIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQorQ09ORklHX0k4MjUzPXkKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0yNTAsNiArMjQ4LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPW0KIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yNzIsNiArMjcxLDcgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yODQsOSArMjg0LDEyIEBACiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKK0NPTkZJR19JUFY2X1JPVVRFX0lORk89eQogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQogQ09ORklHX05FVEZJTFRFUj15CkBAIC0zMDksMTEgKzMxMiwxNCBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KQEAgLTMzNywyMCArMzQzLDE5IEBACiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KIENPTkZJR19JUF9ORl9QUFRQPW0KK0NPTkZJR19JUF9ORl9IMzIzPW0KIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQpAQCAtMzY4LDYgKzM3Myw3IEBACiBDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQogQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQogQ09ORklHX0lQX05GX05BVF9QUFRQPW0KK0NPTkZJR19JUF9ORl9OQVRfSDMyMz1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTM4OCwxMiArMzk0LDEwIEBACiBDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0FIPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCkBAIC00MzksMjEgKzQ0MywyMiBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLUNPTkZJR19CUklER0U9bQotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVDTkVUPW0KLSMgQ09ORklHX0RFQ05FVF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogCiAjCiAjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUNORVQ9bQorIyBDT05GSUdfREVDTkVUX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtNTMzLDYgKzUzOCw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNjIwLDYgKzYyOCw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09bQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTcwMCwxMiArNzA5LDExIEBACiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0xCiBDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYX0lPTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QU0kyNDBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CkBAIC03MzEsNiArNzM5LDcgQEAKIENPTkZJR19NRF9SQUlEMT1tCiBDT05GSUdfTURfUkFJRDEwPW0KIENPTkZJR19NRF9SQUlENT1tCitDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CiAjIENPTkZJR19NRF9SQUlENiBpcyBub3Qgc2V0CiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtOTY1LDYgKzk3NCw3IEBACiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9bQorQ09ORklHX1NFUklBTF84MjUwX1BDST1tCiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKQEAgLTk3Nyw2ICs5ODcsNyBAQAogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9bQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtMTAyNywxMiArMTAzOCwxOSBAQAogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiBDT05GSUdfVzE9bQotQ09ORklHX1cxX01BVFJPWD1tCi1DT05GSUdfVzFfRFM5NDkwPW0KLSMgQ09ORklHX1cxX0RTOTQ5MF9CUklER0UgaXMgbm90IHNldAotQ09ORklHX1cxX1RIRVJNPW0KLUNPTkZJR19XMV9TTUVNPW0KLSMgQ09ORklHX1cxX0RTMjQzMyBpcyBub3Qgc2V0CisKKyMKKyMgMS13aXJlIEJ1cyBNYXN0ZXJzCisjCisjIENPTkZJR19XMV9NQVNURVJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX01BU1RFUl9EUzk0OTAgaXMgbm90IHNldAorCisjCisjIDEtd2lyZSBTbGF2ZXMKKyMKKyMgQ09ORklHX1cxX1NMQVZFX1RIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX1NNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTEwNDUsMTAgKzEwNjMsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTEwNTcsNiArMTA3MSw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RBQlVTQj1tCiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtMTA2Nyw2ICsxMDgyLDcgQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiAKQEAgLTEwODAsNiArMTA5Niw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9bQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTE1MSw5ICsxMTY4LDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9LQlRBQj1tCiBDT05GSUdfVVNCX1BPV0VSTUFURT1tCi0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VHQUxBWD1tCisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9ZRUFMSU5LPW0KIENPTkZJR19VU0JfWFBBRD1tCiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC0xMTY4LDE1ICsxMTgzLDYgQEAKIENPTkZJR19VU0JfTUlDUk9URUs9bQogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLUNPTkZJR19VU0JfREFCVVNCPW0KLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogQ09ORklHX1VTQl9DQVRDPW0KQEAgLTEyMTMsNiArMTIxOSw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KIENPTkZJR19VU0JfU0VSSUFMX0lSPW0KQEAgLTEyMzcsNiArMTI0NCw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9LTFNJPW0KIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVD1tCiBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQogQ09ORklHX1VTQl9TRVJJQUxfSFA0WD1tCiBDT05GSUdfVVNCX1NFUklBTF9TQUZFPW0KQEAgLTEyODEsMTUgKzEyODksMzMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz1tCkBAIC0xMzU4LDcgKzEzODQsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzksNyArMTQwNCw2IEBACiBDT05GSUdfUU5YNEZTX0ZTPW0KIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQotIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwpAQCAtMTUwMCw2ICsxNTI0LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwppbmRleCBkYTY4YzNmLi5lMzg4YTNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MzIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjE3IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtODEsNiArODEsOCBAQAogIyBDT05GSUdfU0lCWVRFX1NCMTI1MF9QUk9GIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9UQlBST0YgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC0xNTgsNyArMTYwLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE3NSw2ICsxNzYsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0NQVVNFVFM9eQorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTg4LDEwICsxOTAsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0yMDMsNyArMjAxLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMjEyLDYgKzIwOSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMzEsNyArMjI5LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjQ5LDYgKzI0Niw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19NSVBTMzJfTzMyPXkKQEAgLTI2Myw2ICsyNjEsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI4NCwxMiArMjgzLDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0zMDEsNiArMzAzLDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMTAsMTEgKzMxNyw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzM1LDYgKzMzNyw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNTg5LDYgKzU5NCw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTY0NywxMCArNjUzLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02NzUsNiArNjc3LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjkyLDE1ICs2OTUsMzMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC03NDYsNyArNzY3LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04MTIsNiArODMyLDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogIyBDT05GSUdfU0IxWFhYX0NPUkVMSVMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2VhZF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZwppbmRleCA5YTkzNmQ3Li42YjhhNmE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDozMyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTcgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExOCwxMSArMTIwLDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTE0MCw3ICsxNDIsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTQsNiArMTU1LDcgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjcsMTAgKzE2OSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4NSw2ICsxODMsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yOTYsMTIgKzI5Niw2IEBACiAjCiAKICMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwogIyBJU0ROIHN1YnN5c3RlbQogIwogCkBAIC0zOTcsMTAgKzM5MSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNDI0LDYgKzQxNCw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC00NDAsMTQgKzQzMSwzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC00ODksNyArNDk4LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC01NDMsNiArNTUxLDggQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwppbmRleCBjMmRlZTBkLi5kYmEwYmRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MzQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBUdWUgQXByIDI1IDAwOjA4OjQxIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjgsMTIgKzY4LDE0IEBACiAjIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKIENPTkZJR19UQU5CQUNfVEIwMjJYPXkKIENPTkZJR19UQU5CQUNfVEIwMjI2PXkKLUNPTkZJR19UQU5CQUNfVEIwMjg3PXkKKyMgQ09ORklHX1RBTkJBQ19UQjAyODcgaXMgbm90IHNldAogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1BDSV9WUjQxWFg9eQogIyBDT05GSUdfVlJDNDE3MyBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtOTIsNyArOTQsNyBAQAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfVlI0MVhYPXkKICMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CkBAIC0xMDUsMTggKzEwNywyMSBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorQ09ORklHX1NZU19IQVNfQ1BVX1ZSNDFYWD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKICMKICMgS2VybmVsIHR5cGUKICMKLSMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CiAjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xMzcsNyArMTQyLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUzLDYgKzE1Nyw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTY2LDEwICsxNzEsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODEsNyArMTgyLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTg5LDYgKzE4OSw5IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwOCw3ICsyMTEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAogQ09ORklHX01NVT15CiAKICMKQEAgLTIyNiw2ICsyMjgsNyBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjM1LDExICsyMzgsMTAgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI2MywxMiArMjY1LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yODAsNiArMjg1LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yODksMTEgKzI5OSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzEwLDEwICszMTUsNyBAQAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzU4LDExICszNjAsMTIgQEAKIENPTkZJR19CTEtfREVWX05CRD1tCiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT1tCitDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CkBAIC0zOTcsMTQgKzQwMCwxNCBAQAogIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9GQ19BVFRSUz15Ci1DT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKICMKLUNPTkZJR19JU0NTSV9UQ1A9bQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTQyNCw3ICs0MjcsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNTA3LDggKzUwOSw4IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotQ09ORklHX0VFUFJPMTAwPXkKLSMgQ09ORklHX0UxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQogIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKICMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAogIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldApAQCAtNjI1LDYgKzYyNywxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9WUjQxWFg9eQorQ09ORklHX1NFUklBTF9WUjQxWFhfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02ODUsMTAgKzY5Miw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjk3LDYgKzcwMCw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03MTksNiArNzIzLDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogCkBAIC03NTYsNyArNzYxLDcgQEAKICMKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwotQ09ORklHX1VTQl9TVE9SQUdFPW0KK0NPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldApAQCAtNzgzLDkgKzc4OCw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTgwMCwxNSArODAzLDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTgxNiw3ICs4MTAsNyBAQAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC04NjAsMTUgKzg1NCw1MCBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9WUjQxWFg9eQorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTkxMSw3ICs5NDAsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC05NTIsOSArOTgwLDcgQEAKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi1DT05GSUdfU01CX05MU19ERUZBVUxUPXkKLUNPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A5MzIiCisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC05NzAsNDYgKzk5Niw3IEBACiAjCiAjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CiAjCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotQ09ORklHX05MU19JU084ODU5XzE9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydApAQCAtMTAyMyw0NCArMTAxMCwyMCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5VlIwLDExNTIwMCIKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCi1DT05GSUdfS0VZUz15Ci1DT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQorIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtMTA2OSw5ICsxMDMyLDggQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQotQ09ORklHX0NSQzMyPW0KLUNPTkZJR19MSUJDUkMzMkM9bQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKaW5kZXggYmU5OTI2MS4uNWE5MjRjMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjM1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgVHVlIEFwciAyNSAwMDowODo1OSAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY4LDEyICs2OCwxNCBAQAogIyBDT05GSUdfTkVDX0NNQlZSNDEzMyBpcyBub3Qgc2V0CiBDT05GSUdfVEFOQkFDX1RCMDIyWD15CiAjIENPTkZJR19UQU5CQUNfVEIwMjI2IGlzIG5vdCBzZXQKLUNPTkZJR19UQU5CQUNfVEIwMjg3PXkKKyMgQ09ORklHX1RBTkJBQ19UQjAyODcgaXMgbm90IHNldAogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1BDSV9WUjQxWFg9eQogIyBDT05GSUdfVlJDNDE3MyBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtOTIsNyArOTQsNyBAQAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfVlI0MVhYPXkKICMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CkBAIC0xMDUsMTggKzEwNywyMSBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorQ09ORklHX1NZU19IQVNfQ1BVX1ZSNDFYWD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKICMKICMgS2VybmVsIHR5cGUKICMKLSMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CiAjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xMzcsNyArMTQyLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUzLDYgKzE1Nyw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTY2LDEwICsxNzEsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODEsNyArMTgyLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTg5LDYgKzE4OSw5IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwOCw3ICsyMTEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAogQ09ORklHX01NVT15CiAKICMKQEAgLTIyNiw2ICsyMjgsNyBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjM1LDExICsyMzgsMTAgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI2NCwxMiArMjY2LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yODEsNiArMjg2LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yOTAsMTEgKzMwMCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzExLDEwICszMTYsNyBAQAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzI1LDEyICszMjcsMTIgQEAKICMKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCiAjCi1DT05GSUdfQ09OTkVDVE9SPW0KKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiAKICMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQpAQCAtMzYzLDEwICszNjUsOCBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTQ0MywzMCArNDQzLDcgQEAKICMKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD15Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPTz15Ci1DT05GSUdfODEzOVRPT19QSU89eQotIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTl9TQUE5NzMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC00ODMsNyArNDYwLDYgQEAKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAKQEAgLTUxMCwxOSArNDg2LDggQEAKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX1NZTkNfVFRZPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCi1DT05GSUdfUFBQX0JTRENPTVA9bQotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCi1DT05GSUdfU0xJUD1tCi1DT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKLUNPTkZJR19TTElQX1NNQVJUPXkKLUNPTkZJR19TTElQX01PREVfU0xJUDY9eQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CkBAIC01ODMsNiArNTQ4LDExIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1ZSNDFYWD15CitDT05GSUdfU0VSSUFMX1ZSNDFYWF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTYwNyw2ICs1NzcsNyBAQAogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19WUjQxWFg9eQogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY0MiwxMCArNjEzLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02NTQsNiArNjIxLDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTY3Niw2ICs2NDQsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPW0KICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTczMSw5ICs3MDAsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC03NDcsMTUgKzcxNCw2IEBACiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtODA3LDQ2ICs3NjUsNjUgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKworIworIyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfVlI0MVhYPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPW0KLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLUNPTkZJR19KQkQ9bQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGU19GUz1tCi0jIENPTkZJR19KRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfWEZTX0ZTPXkKLUNPTkZJR19YRlNfRVhQT1JUPXkKLUNPTkZJR19YRlNfUVVPVEE9eQotIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPW0KIENPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19RVU9UQUNUTD15CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQpAQCAtODU1LDIwICs4MzIsMTQgQEAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwotQ09ORklHX0lTTzk2NjBfRlM9eQotQ09ORklHX0pPTElFVD15Ci1DT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9eQorIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAogCiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKLUNPTkZJR19GQVRfRlM9bQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTg4MCw3ICs4NTEsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC05MjEsOSArODkxLDcgQEAKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi1DT05GSUdfU01CX05MU19ERUZBVUxUPXkKLUNPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A5MzIiCisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC05MzksNDYgKzkwNyw3IEBACiAjCiAjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CiAjCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotQ09ORklHX05MU19JU084ODU5XzE9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydApAQCAtOTkyLDQ0ICs5MjEsMjAgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVZSMCwxMTUyMDAgaXA9YW55IHJvb3Q9L2Rldi9uZnMiCiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwotQ09ORklHX0tFWVM9eQotQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogCiAjCiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKQEAgLTEwMzgsOSArOTQzLDggQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT1tCisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjIxNWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwpAQCAtMCwwICsxLDExMzIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgVHVlIEFwciAyNSAwMDowOToxNyAyMDA2CisjCitDT05GSUdfTUlQUz15CisKKyMKKyMgTWFjaGluZSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0VBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1QgaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfMyBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVF9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0cgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0CisjIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVlI0MVhYPXkKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19RRU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9QVFNXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNJT19FNTUgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX1dPUktQQUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX0NNQlZSNDEzMyBpcyBub3Qgc2V0CitDT05GSUdfVEFOQkFDX1RCMDIyWD15CisjIENPTkZJR19UQU5CQUNfVEIwMjI2IGlzIG5vdCBzZXQKK0NPTkZJR19UQU5CQUNfVEIwMjg3PXkKKyMgQ09ORklHX1ZJQ1RPUl9NUEMzMFggaXMgbm90IHNldAorIyBDT05GSUdfWkFPX0NBUENFTExBIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfVlI0MVhYPXkKKyMgQ09ORklHX1ZSQzQxNzMgaXMgbm90IHNldAorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX01JUFMzMl9SMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1ZSNDFYWD15CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IxMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKKworIworIyBLZXJuZWwgdHlwZQorIworQ09ORklHXzMyQklUPXkKKyMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19TWU5DPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQorIworQ09ORklHX0hXX0hBU19QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfTU1VPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkKKworIworIyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sCisjCitDT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz1tCitDT05GSUdfVENQX0NPTkdfV0VTVFdPT0Q9bQorQ09ORklHX1RDUF9DT05HX0hUQ1A9bQorIyBDT05GSUdfVENQX0NPTkdfSFNUQ1AgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfSFlCTEEgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfVkVHQVMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfU0NBTEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorQ09ORklHX0JMS19ERVZfSURFUENJPXkKKyMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9QQ0lfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU0lJTUFHRT15CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKyMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworQ09ORklHX0lFRUUxMzk0PW0KKworIworIyBTdWJzeXN0ZW0gT3B0aW9ucworIworIyBDT05GSUdfSUVFRTEzOTRfVkVSQk9TRURFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0X09VSV9EQiBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTRfRVhUUkFfQ09ORklHX1JPTVM9eQorQ09ORklHX0lFRUUxMzk0X0NPTkZJR19ST01fSVAxMzk0PXkKKyMgQ09ORklHX0lFRUUxMzk0X0VYUE9SVF9GVUxMX0FQSSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBUZXhhcyBJbnN0cnVtZW50cyBQQ0lMeW54IHJlcXVpcmVzIEkyQworIworQ09ORklHX0lFRUUxMzk0X09IQ0kxMzk0PW0KKworIworIyBQcm90b2NvbCBEcml2ZXJzCisjCitDT05GSUdfSUVFRTEzOTRfVklERU8xMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9TQlAyPW0KKyMgQ09ORklHX0lFRUUxMzk0X1NCUDJfUEhZU19ETUEgaXMgbm90IHNldAorQ09ORklHX0lFRUUxMzk0X0VUSDEzOTQ9bQorQ09ORklHX0lFRUUxMzk0X0RWMTM5ND1tCitDT05GSUdfSUVFRTEzOTRfUkFXSU89bQorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorCisjCisjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorQ09ORklHX1I4MTY5PXkKKyMgQ09ORklHX1I4MTY5X05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1ZSNDFYWD15CitDT05GSUdfU0VSSUFMX1ZSNDFYWF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBTkJBQ19UQjAyMTkgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1ZSNDFYWD15CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TTUlWR1g9eQorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj1tCisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9bQorQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKworIworIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisKKyMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX1hGU19GUz15CitDT05GSUdfWEZTX1FVT1RBPXkKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPW0KK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlWUjAsMTE1MjAwIGlwPWFueSByb290PS9kZXYvbmZzIgorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZwppbmRleCA3MTMyZTI5Li5hYzc3NjVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDozNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIFR1ZSBBcHIgMjUgMDA6MDk6MzMgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC03MCw2ICs3MCw4IEBACiAjIENPTkZJR19WSUNUT1JfTVBDMzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtODgsNyArOTAsNyBAQAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfVlI0MVhYPXkKICMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CkBAIC0xMDEsMTggKzEwMywyMSBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorQ09ORklHX1NZU19IQVNfQ1BVX1ZSNDFYWD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKICMKICMgS2VybmVsIHR5cGUKICMKLSMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CiAjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xMzMsNyArMTM4LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTQ5LDYgKzE1Myw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTYyLDEwICsxNjcsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xNzcsNyArMTc4LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTg1LDYgKzE4NSw5IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIyMCw2ICsyMjMsNyBAQAogIyBDT05GSUdfSTgyMzY1IGlzIG5vdCBzZXQKICMgQ09ORklHX1RDSUMgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9QUk9CRT15CitDT05GSUdfUENNQ0lBX1ZSQzQxNzE9eQogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTIzMCw2ICsyMzQsNyBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjM5LDYgKzI0NCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjU4LDEyICsyNjQsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NSw2ICsyODQsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4NCwxMSArMjk4LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDUsMTAgKzMxNCw4IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM0NywxMCArMzU0LDEyIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT1tCiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTQ2OCw3ICs0NzcsMzggQEAKICMKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorQ09ORklHX05FVF9SQURJTz15CisjIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQorIworIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJMQU4gaXMgbm90IHNldAorIyBDT05GSUdfV0FWRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0FWRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfTkVUV0FWRSBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgODAyLjExIEZyZXF1ZW5jeSBIb3BwaW5nIGNhcmRzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19IRVJNRVM9bQorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMWIgUGNtY2lhL0NhcmRidXMgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX1BDTUNJQV9IRVJNRVM9bQorIyBDT05GSUdfUENNQ0lBX1NQRUNUUlVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9XSVJFTEVTUz15CiAKICMKICMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTUxMiwxMCArNTUyLDcgQEAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKQEAgLTUzMywxMSArNTcwLDcgQEAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC01NTYsNiArNTg5LDEwIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1ZSNDFYWD15CitDT05GSUdfU0VSSUFMX1ZSNDFYWF9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC01NjgsMjAgKzYwNSw3IEBACiAjCiAjIFdhdGNoZG9nIENhcmRzCiAjCi1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBJU0EtYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTUlYQ09NV0QgaXMgbm90IHNldAotIyBDT05GSUdfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldApAQCAtNTk3LDYgKzYyMSw3IEBACiAjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCkBAIC02MzIsMTAgKzY1Nyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjY3LDYgKzY4OCw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC02ODMsMTQgKzcwNSwzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC03MTAsNyArNzUwLDcgQEAKIENPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKIENPTkZJR19GVVNFX0ZTPW0KIApAQCAtNzMzLDEwICs3NzMsOSBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODAyLDQ0ICs4NDEsMjAgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlWUjAsMTkyMDAgbWVtPTE2TSIKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCi1DT05GSUdfS0VZUz15Ci1DT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQorIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtODQ5LDggKzg2NCw2IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMTY9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKaW5kZXggNjc0NTc4NS4uYjUyZDcwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDozNyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MjAgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NSw2ICs2NSw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKICMgQ09ORklHX0hZUEVSVFJBTlNQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQpAQCAtMTE2LDcgKzExOCw2IEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKQEAgLTE0MCw3ICsxNDEsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKICMgQ09ORklHX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTcsNiArMTU3LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC0xNzAsMTAgKzE3MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4NCw3ICsxODEsNiBAQAogIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTE5NCw2ICsxOTAsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMTMsNyArMjExLDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01NVT15CiAKQEAgLTI0MSw2ICsyMzgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9bQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI2MSwxNiArMjU5LDE5IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiBDT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC0zNDAsMTAgKzM0MSw5IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKQEAgLTQzMyw2ICs0MzMsNyBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKQEAgLTQ5Nyw2ICs0OTgsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTUwNiw2ICs1MDgsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU2MywxMCArNTY2LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC01OTEsNiArNTkwLDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjA4LDEyICs2MDgsMjkgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKICMKIAogIwpAQCAtNjU2LDcgKzY3Myw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvTWFrZWZpbGUKaW5kZXggNDg4MjA2Yi4uMzA0YzAyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L01ha2VmaWxlCkBAIC0zLDYgKzMsNiBAQAogIyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkJCQkrPSBzZXR1cC5vIGlycS5vIGludC1oYW5kbGVyLm8gbmlsZTRfcGljLm8KK29iai15CQkJKz0gc2V0dXAubyBpcnEubyBuaWxlNF9waWMubwogCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ODY0NDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiAgYXJjaC9taXBzL2RkYjUwNzQvaW50LWhhbmRsZXIuUyAtLSBORUMgRERCIFZyYy01MDc0IGludGVycnVwdCBoYW5kbGVyCi0gKgotICogIEJhc2VkIG9uIGFyY2gvbWlwcy9zZ2kva2VybmVsL2luZHlJUlEuUwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMCBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgotICogICAgICAgICAgICAgICAgICAgICBTb255IFNvZnR3YXJlIERldmVsb3BtZW50IENlbnRlciBFdXJvcGUgKFNEQ0UpLCBCcnVzc2VscwotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKiBBIGxvdCBvZiBjb21wbGljYXRpb24gaGVyZSBpcyB0YWtlbiBhd2F5IGJlY2F1c2U6Ci0gKgotICogMSkgV2UgaGFuZGxlIG9uZSBpbnRlcnJ1cHQgYW5kIHJldHVybiwgc2l0dGluZyBpbiBhIGxvb3AgYW5kIG1vdmluZyBhY3Jvc3MKLSAqICAgIGFsbCB0aGUgcGVuZGluZyBJUlEgYml0cyBpbiB0aGUgY2F1c2UgcmVnaXN0ZXIgaXMgX05PVF8gdGhlIGFuc3dlciwgdGhlCi0gKiAgICBjb21tb24gY2FzZSBpcyBvbmUgcGVuZGluZyBJUlEgc28gb3B0aW1pemUgaW4gdGhhdCBkaXJlY3Rpb24uCi0gKgotICogMikgV2UgbmVlZCBub3QgY2hlY2sgYWdhaW5zdCBiaXRzIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgSVJRIG1hc2ssIHRoYXQKLSAqICAgIHdvdWxkIG1ha2UgdGhpcyByb3V0aW5lIHNsb3cgYXMgaGVsbC4KLSAqCi0gKiAzKSBMaW51eCBvbmx5IHRoaW5rcyBpbiB0ZXJtcyBvZiBhbGwgSVJRcyBvbiBvciBhbGwgSVJRcyBvZmYsIG5vdGhpbmcgaW4KLSAqICAgIGJldHdlZW4gbGlrZSBCU0Qgc3BsKCkgYnJhaW4tZGFtYWdlLgotICoKLSAqIEZ1cnRoZXJtb3JlLCB0aGUgSVJRcyBvbiB0aGUgSU5EWSBsb29rIGJhc2ljYWxseSAoYmFycmluZyBzb2Z0d2FyZSBJUlFzCi0gKiB3aGljaCB3ZSBkb24ndCB1c2UgYXQgYWxsKSBsaWtlOgotICoKLSAqCU1JUFMgSVJRCVNvdXJjZQotICogICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tCi0gKiAgICAgICAgICAgICAwCVNvZnR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgMSAgICAgICAgU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAyICAgICAgICBMb2NhbCBJUlEgbGV2ZWwgemVybwotICogICAgICAgICAgICAgMyAgICAgICAgTG9jYWwgSVJRIGxldmVsIG9uZQotICogICAgICAgICAgICAgNCAgICAgICAgODI1NCBUaW1lciB6ZXJvCi0gKiAgICAgICAgICAgICA1ICAgICAgICA4MjU0IFRpbWVyIG9uZQotICogICAgICAgICAgICAgNiAgICAgICAgQnVzIEVycm9yCi0gKiAgICAgICAgICAgICA3ICAgICAgICBSNGsgdGltZXIgKHdoYXQgd2UgdXNlKQotICoKLSAqIFdlIGhhbmRsZSB0aGUgSVJRIGFjY29yZGluZyB0byBfb3VyXyBwcmlvcml0eSB3aGljaCBpczoKLSAqCi0gKiBIaWdoZXN0IC0tLS0gICAgIFI0ayBUaW1lcgotICogICAgICAgICAgICAgICAgICBMb2NhbCBJUlEgemVybwotICogICAgICAgICAgICAgICAgICBMb2NhbCBJUlEgb25lCi0gKiAgICAgICAgICAgICAgICAgIEJ1cyBFcnJvcgotICogICAgICAgICAgICAgICAgICA4MjU0IFRpbWVyIHplcm8KLSAqIExvd2VzdCAgLS0tLSAgICAgODI1NCBUaW1lciBvbmUKLSAqCi0gKiB0aGVuIHdlIGp1c3QgcmV0dXJuLCBpZiBtdWx0aXBsZSBJUlFzIGFyZSBwZW5kaW5nIHRoZW4gd2Ugd2lsbCBqdXN0IHRha2UKLSAqIGFub3RoZXIgZXhjZXB0aW9uLCBiaWcgZGVhbC4KLSAqLwotCi0JLnRleHQKLQkuc2V0CW5vcmVvcmRlcgotCS5zZXQJbm9hdAotCS5hbGlnbgk1Ci0JTkVTVEVEKGRkYklSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0JbWZjMAlzMCwgQ1AwX0NBVVNFCQkjIGdldCBpcnEgbWFzawotCi0jaWYgMQotCW1mYzAJdDIsQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JYW5kCXMwLHQyCQkJIyBpc29sYXRlIGFsbG93ZWQgb25lcwotI2VuZGlmCi0JLyogRmlyc3Qgd2UgY2hlY2sgZm9yIHI0ayBjb3VudGVyL3RpbWVyIElSUS4gKi8KLQlhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQMgkjIGRlbGF5IHNsb3QsIGNoZWNrIGxvY2FsIGxldmVsIHplcm8KLQliZXEJYTAsIHplcm8sIDFmCi0JIGFuZGkJYTAsIHMwLCBDQVVTRUZfSVAzCSMgZGVsYXkgc2xvdCwgY2hlY2sgbG9jYWwgbGV2ZWwgb25lCi0KLQkvKiBXaGVlZSwgbG9jYWwgbGV2ZWwgemVybyBpbnRlcnJ1cHQuICovCi0JamFsCWRkYl9sb2NhbDBfaXJxZGlzcGF0Y2gKLQkgbW92ZQlhMCwgc3AJCQkjIGRlbGF5IHNsb3QKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLQotMToKLQliZXEJYTAsIHplcm8sIDFmCi0JIGFuZGkJYTAsIHMwLCBDQVVTRUZfSVA2CSMgZGVsYXkgc2xvdCwgY2hlY2sgYnVzIGVycm9yCi0KLQkvKiBXaGVlZSwgbG9jYWwgbGV2ZWwgb25lIGludGVycnVwdC4gKi8KLQltb3ZlCWEwLCBzcAotCWphbAlkZGJfbG9jYWwxX2lycWRpc3BhdGNoCi0JIG5vcAotCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0KLTE6Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCSBub3AKLQotCS8qIFdoZWVlLCBhbiBhc3luY2hyb25vdXMgYnVzIGVycm9yLi4uICovCi0JbW92ZQlhMCwgc3AKLQlqYWwJZGRiX2J1c2Vycm9yX2lycQotCSBub3AKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCi0xOgotCS8qIEhlcmUgYnkgbWlzdGFrZT8gIFRoaXMgaXMgcG9zc2libGUsIHdoYXQgY2FuIGhhcHBlbgotCSAqIGlzIHRoYXQgYnkgdGhlIHRpbWUgd2UgdGFrZSB0aGUgZXhjZXB0aW9uIHRoZSBJUlEKLQkgKiBwaW4gZ29lcyBsb3csIHNvIGp1c3QgbGVhdmUgaWYgdGhpcyBpcyB0aGUgY2FzZS4KLQkgKi8KLQlhbmRpCWEwLCBzMCwgKENBVVNFRl9JUDQgfCBDQVVTRUZfSVA1KQotCWJlcQlhMCwgemVybywgMWYKLQotCS8qIE11c3QgYmUgb25lIG9mIHRoZSA4MjU0IHRpbWVycy4uLiAqLwotCW1vdmUJYTAsIHNwCi0JamFsCWRkYl84MjU0dGltZXJfaXJxCi0JIG5vcAotMToKLQlqCXJldF9mcm9tX2lycQotCSBub3AKLQlFTkQoZGRiSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pcnEuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaXJxLmMKaW5kZXggNDUwODhhMS4uNjBjMDg3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pcnEuYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L2lycS5jCkBAIC0yMSw4ICsyMSw2IEBACiAjaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTA3NC5oPgogCiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgZGRiSVJRKHZvaWQpOwotCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfY2FzY2FkZSA9IHsgbm9fYWN0aW9uLCAwLCBDUFVfTUFTS19OT05FLCAiY2FzY2FkZSIsIE5VTEwsIE5VTEwgfTsKIAogI2RlZmluZSBNMTU0M19QTlBfQ09ORklHCTB4MDNmMAkvKiBQblAgQ29uZmlnIFBvcnQgKi8KQEAgLTkwLDcgKzg4LDcgQEAKIAogfQogCi12b2lkIGRkYl9sb2NhbDBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBkZGJfbG9jYWwwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXUzMiBtYXNrOwogCWludCBuaWxlNF9pcnE7CkBAIC0xMTgsMjkgKzExNiw0MSBAQAogCQl9CiB9CiAKLXZvaWQgZGRiX2xvY2FsMV9pcnFkaXNwYXRjaCh2b2lkKQorc3RhdGljIHZvaWQgZGRiX2xvY2FsMV9pcnFkaXNwYXRjaCh2b2lkKQogewogCXByaW50aygiZGRiX2xvY2FsMV9pcnFkaXNwYXRjaCBjYWxsZWRcbiIpOwogfQogCi12b2lkIGRkYl9idXNlcnJvcl9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIGRkYl9idXNlcnJvcl9pcnEodm9pZCkKIHsKIAlwcmludGsoImRkYl9idXNlcnJvcl9pcnEgY2FsbGVkXG4iKTsKIH0KIAotdm9pZCBkZGJfODI1NHRpbWVyX2lycSh2b2lkKQorc3RhdGljIHZvaWQgZGRiXzgyNTR0aW1lcl9pcnEodm9pZCkKIHsKIAlwcmludGsoImRkYl84MjU0dGltZXJfaXJxIGNhbGxlZFxuIik7CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCk7CisKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpCisJCWRkYl9sb2NhbDBfaXJxZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDMpCisJCWRkYl9sb2NhbDFfaXJxZGlzcGF0Y2goKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNikKKwkJZGRiX2J1c2Vycm9yX2lycSgpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAoQ0FVU0VGX0lQNCB8IENBVVNFRl9JUDUpKQorCQlkZGJfODI1NHRpbWVyX2lycSgpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogc2V0dXAgY2FzY2FkZSBpbnRlcnJ1cHRzICovCiAJc2V0dXBfaXJxKE5JTEU0X0lSUV9CQVNFICArIE5JTEU0X0lOVF9JTlRFLCAmaXJxX2Nhc2NhZGUpOwogCXNldHVwX2lycShDUFVfSVJRX0JBU0UgKyBDUFVfTklMRTRfQ0FTQ0FERSwgJmlycV9jYXNjYWRlKTsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIGRkYklSUSk7Ci0KIAluaWxlNF9pcnFfc2V0dXAoTklMRTRfSVJRX0JBU0UpOwogCW0xNTQzX2lycV9zZXR1cCgpOwogCWluaXRfaTgyNTlfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9NYWtlZmlsZSBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvTWFrZWZpbGUKaW5kZXggNjFlZWMzNi4uYWIwMzEyYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkJCQkrPSBzZXR1cC5vIGlycS5vIGludC1oYW5kbGVyLm8gbmlsZTRfcGljLm8gdnJjNTQ3Nl9pcnEubworb2JqLXkJCQkrPSBzZXR1cC5vIGlycS5vIG5pbGU0X3BpYy5vIHZyYzU0NzZfaXJxLm8KIG9iai0kKENPTkZJR19LR0RCKQkrPSBkYmdfaW8ubwogCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2RiZ19pby5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9kYmdfaW8uYwppbmRleCA4NWU5ZTUwLi5mMjI5NmE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2RiZ19pby5jCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvZGJnX2lvLmMKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAgICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfSU5UUl9FTkFCTEUsIDApOwogCi0gICAgICAgIC8qIHNldCB1cCBidWFkIHJhdGUgKi8KKyAgICAgICAgLyogc2V0IHVwIGJhdWQgcmF0ZSAqLwogICAgICAgICB7CiAgICAgICAgICAgICAgICAgdWludDMyIGRpdmlzb3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjMjkyZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogRmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIGRkYjU0NzYKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjU0NzYuaD4KLQotLyoKLSAqIGZpcnN0IGxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBvY2Vsb3QgYm9hcmQgLQotICogV2UgY2hlY2sgZm9yIHRoZSB0aW1lciBmaXJzdCwgdGhlbiBjaGVjayBQQ0kgaW50cyBBIGFuZCBELgotICogVGhlbiBjaGVjayBmb3Igc2VyaWFsIElSUSBhbmQgZmFsbCB0aHJvdWdoLgotICovCi0JLmFsaWduCTUKLQlORVNURUQoZGRiNTQ3Nl9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCS5zZXQJYXQKLQkuc2V0CW5vcmVvcmRlcgotCW1mYzAJdDAsIENQMF9DQVVTRQotCW1mYzAJdDIsIENQMF9TVEFUVVMKLQotCWFuZAl0MCwgdDIKLQotICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDcgICAgIC8qIGNwdSB0aW1lciAqLwotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXA3Ci0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiB2cmM1NDc2ICYgaTgyNTkgKi8KLSAgICAgICAgYm5leiAgICB0MSwgbGxfY3B1X2lwMgotICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDMKLSAgICAgICAgYm5leiAgICB0MSwgbGxfY3B1X2lwMwotICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDQKLSAgICAgICAgYm5leiAgICB0MSwgbGxfY3B1X2lwNAotICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDUKLSAgICAgICAgYm5leiAgICB0MSwgbGxfY3B1X2lwNQotICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDYKLSAgICAgICAgYm5leiAgICB0MSwgbGxfY3B1X2lwNgotICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDAgICAgIC8qIHNvZnR3YXJlIGludCAwICovCi0gICAgICAgIGJuZXogICAgdDEsIGxsX2NwdV9pcDAKLSAgICAgICAgYW5kaSAgICB0MSwgdDAsIFNUQVRVU0ZfSVAxICAgICAvKiBzb2Z0d2FyZSBpbnQgMSAqLwotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXAxCi0gICAgICAgIG5vcAotCi0JLnNldAlyZW9yZGVyCi0KLQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JLy8gaglzcHVyaW91c19pbnRlcnJ1cHQKLQltb3ZlIAlhMCwgc3AKLQlqYWwJdnJjNTQ3Nl9pcnFfZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotCW5vcAotCi0JLmFsaWduCTUKLQotbGxfY3B1X2lwMDoKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgMAotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDE6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDEKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHVfaXAyOgkJLyoganVtcCB0byBzZWNvbmQtbGV2ZWwgZGlzcGF0Y2hpbmcgKi8KLQltb3ZlCWEwLCBzcAotCWphbAl2cmM1NDc2X2lycV9kaXNwYXRjaAotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDM6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDMKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHVfaXA0OgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyA0Ci0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1X2lwNToKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgNQotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDY6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDYKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHVfaXA3OgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyA3Ci0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotCUVORChkZGI1NDc2X2hhbmRsZV9pbnQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2lycS5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9pcnEuYwppbmRleCA1Mzg4YjU4Li43NTgzYTFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2lycS5jCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaXJxLmMKQEAgLTExMCwxMSArMTEwLDM2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfY2FzY2FkZSA9IHsgbm9fYWN0aW9uLCAwLCBDUFVfTUFTS19OT05FLCAiY2FzY2FkZSIsIE5VTEwsIE5VTEwgfTsKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9lcnJvciA9IHsgbm9fYWN0aW9uLCAwLCBDUFVfTUFTS19OT05FLCAiZXJyb3IiLCBOVUxMLCBOVUxMIH07CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgZGRiNTQ3Nl9oYW5kbGVfaW50KHZvaWQpOwogZXh0ZXJuIGludCBzZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqaXJxYWN0aW9uKTsKIGV4dGVybiB2b2lkIG1pcHNfY3B1X2lycV9pbml0KHUzMiBpcnFfYmFzZSk7CiBleHRlcm4gdm9pZCB2cmM1NDc2X2lycV9pbml0KHUzMiBpcnFfYmFzZSk7CiAKK2V4dGVybiB2b2lkIHZyYzU0NzZfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCisJCWRvX0lSUShDUFVfSVJRX0JBU0UgKyA3LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCisJCXZyYzU0NzZfaXJxX2Rpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDMsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDUsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDYsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgMSwgcmVncyk7CisKKwl2cmM1NDc2X2lycV9kaXNwYXRjaChyZWdzKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCS8qIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uICovCkBAIC0xMzcsNyArMTYyLDQgQEAKIAlzZXR1cF9pcnEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX0xCUlQsICZpcnFfZXJyb3IpOwogCXNldHVwX2lycShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JUlFfUENJUywgJmlycV9lcnJvcik7CiAJc2V0dXBfaXJxKFZSQzU0NzZfSVJRX0JBU0UgKyBWUkM1NDc2X0lSUV9QQ0ksICZpcnFfZXJyb3IpOwotCi0JLyogc2V0dXAgdGhlIGdyYW5kcGEgaW50ciB2ZWN0b3IgKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBkZGI1NDc2X2hhbmRsZV9pbnQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni92cmM1NDc2X2lycS5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni92cmM1NDc2X2lycS5jCmluZGV4IGY2NmZlNWIuLmEzYzVlN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvdnJjNTQ3Nl9pcnEuYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3ZyYzU0NzZfaXJxLmMKQEAgLTc3LDExICs3Nyw5IEBACiB9CiAKIAotYXNtbGlua2FnZSB2b2lkCit2b2lkCiB2cmM1NDc2X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlleHRlcm4gdm9pZCBzcHVyaW91c19pbnRlcnJ1cHQodm9pZCk7Ci0KIAl1MzIgbWFzazsKIAlpbnQgbmlsZTRfaXJxOwogCkBAIC0xMDcsNSArMTA1LDUgQEAKIAkJCXJldHVybjsKIAkJfQogCX0KLQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKKwlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L01ha2VmaWxlIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9NYWtlZmlsZQppbmRleCBiNzliNDNjLi5lYTY4ODE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBORUMgRERCLVZyYzU0NzcgYm9hcmQKICMKIAotb2JqLXkJIAkJKz0gaW50LWhhbmRsZXIubyBpcnEubyBpcnFfNTQ3Ny5vIHNldHVwLm8gbGNkNDQ3ODAubworb2JqLXkJIAkJKz0gaXJxLm8gaXJxXzU0NzcubyBzZXR1cC5vIGxjZDQ0NzgwLm8KIAogb2JqLSQoQ09ORklHX1JVTlRJTUVfREVCVUcpIAkrPSBkZWJ1Zy5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGJfaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjUwMmExLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqIEZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBkZGI1NDc3Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTQ3Ny5oPgotCi0vKgotICogZmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIG9jZWxvdCBib2FyZCAtCi0gKiBXZSBjaGVjayBmb3IgdGhlIHRpbWVyIGZpcnN0LCB0aGVuIGNoZWNrIFBDSSBpbnRzIEEgYW5kIEQuCi0gKiBUaGVuIGNoZWNrIGZvciBzZXJpYWwgSVJRIGFuZCBmYWxsIHRocm91Z2guCi0gKi8KLQkuYWxpZ24JNQotCU5FU1RFRChkZGI1NDc3X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCi0JLnNldAlhdAotCS5zZXQJbm9yZW9yZGVyCi0JbWZjMAl0MCwgQ1AwX0NBVVNFCi0JbWZjMAl0MiwgQ1AwX1NUQVRVUwotCi0JYW5kCXQwLCB0MgotCi0JYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCWJuZXoJdDEsIGxsX2NwdXRpbWVyX2lycQotCWFuZGkJdDEsIHQwLCAoU1RBVFVTRl9JUDIgfCBTVEFUVVNGX0lQMyB8IFNUQVRVU0ZfSVA0IHwgU1RBVFVTRl9JUDUgfCBTVEFUVVNGX0lQNiApCi0JYm5legl0MSwgbGxfdnJjNTQ3N19pcnEKLQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDAJLyogc29mdHdhcmUgaW50IDAgKi8KLQlibmV6CXQxLCBsbF9jcHVfaXAwCi0JYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHNvZnR3YXJlIGludCAxICovCi0JYm5legl0MSwgbGxfY3B1X2lwMQotCW5vcAotCS5zZXQJcmVvcmRlcgotCi0JLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0Jbm9wCi0JRU5EKGRkYjU0NzdfaGFuZGxlX2ludCkKLQotCS5hbGlnbgk1Ci0KLWxsX3ZyYzU0NzdfaXJxOgotCW1vdmUJYTAsIHNwCi0JamFsCXZyYzU0NzdfaXJxX2Rpc3BhdGNoCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1dGltZXJfaXJxOgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyA3Ci0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotCi1sbF9jcHVfaXAwOgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyAwCi0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1X2lwMToKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgMQotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycS5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnEuYwppbmRleCA5ZmZlMWE5Li5kZTQzM2NmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycS5jCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxLmMKQEAgLTc1LDcgKzc1LDYgQEAKIAogZXh0ZXJuIHZvaWQgdnJjNTQ3N19pcnFfaW5pdCh1MzIgYmFzZSk7CiBleHRlcm4gdm9pZCBtaXBzX2NwdV9pcnFfaW5pdCh1MzIgYmFzZSk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGRkYjU0NzdfaGFuZGxlX2ludCh2b2lkKTsKIGV4dGVybiBpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmlycWFjdGlvbik7CiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfY2FzY2FkZSA9IHsgbm9fYWN0aW9uLCAwLCBDUFVfTUFTS19OT05FLCAiY2FzY2FkZSIsIE5VTEwsIE5VTEwgfTsKIApAQCAtMTM1LDkgKzEzNCw2IEBACiAJLyogc2V0dXAgY2FzY2FkZSBpbnRlcnJ1cHRzICovCiAJc2V0dXBfaXJxKFZSQzU0NzdfSVJRX0JBU0UgKyBWUkM1NDc3X0k4MjU5X0NBU0NBREUsICZpcnFfY2FzY2FkZSk7CiAJc2V0dXBfaXJxKENQVV9JUlFfQkFTRSArIENQVV9WUkM1NDc3X0NBU0NBREUsICZpcnFfY2FzY2FkZSk7Ci0KLQkvKiBob29rIHVwIHRoZSBmaXJzdC1sZXZlbCBpbnRlcnJ1cHQgaGFuZGxlciAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGRkYjU0NzdfaGFuZGxlX2ludCk7CiB9CiAKIHU4IGk4MjU5X2ludGVycnVwdF9hY2sodm9pZCkKQEAgLTE1OSw3ICsxNTUsNyBAQAogICogdGhlIGZpcnN0IGxldmVsIGludC1oYW5kbGVyIHdpbGwganVtcCBoZXJlIGlmIGl0IGlzIGEgdnJjNTQ3NyBpcnEKICAqLwogI2RlZmluZQlOVU1fNTQ3N19JUlFTCTMyCi1hc21saW5rYWdlIHZvaWQKK3N0YXRpYyB2b2lkCiB2cmM1NDc3X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1MzIgaW50U3RhdHVzOwpAQCAtMTk3LDMgKzE5MywyMSBAQAogCQl9CiAJfQogfQorCisjZGVmaW5lIFZSNTQ3N0lOVFMgKFNUQVRVU0ZfSVAyfFNUQVRVU0ZfSVAzfFNUQVRVU0ZfSVA0fFNUQVRVU0ZfSVA1fFNUQVRVU0ZfSVA2KQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDcsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBWUjU0NzdJTlRTKQorCQl2cmM1NDc3X2lycV9kaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDApCisJCWRvX0lSUShDUFVfSVJRX0JBU0UsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDEsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9rZ2RiX2lvLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2tnZGJfaW8uYwppbmRleCAxZDE4ZDU5Li4zODViYmRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2tnZGJfaW8uYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2tnZGJfaW8uYwpAQCAtODYsNyArODYsNyBAQAogICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KICAgICAgICAgVUFSVDE2NTUwX1dSSVRFKE9GU19JTlRSX0VOQUJMRSwgMCk7CiAKLSAgICAgICAgLyogc2V0IHVwIGJ1YWQgcmF0ZSAqLworICAgICAgICAvKiBzZXQgdXAgYmF1ZCByYXRlICovCiAgICAgICAgIHsKICAgICAgICAgICAgICAgICB1aW50MzIgZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9ib290L2RlY3N0YXRpb24uYyBiL2FyY2gvbWlwcy9kZWMvYm9vdC9kZWNzdGF0aW9uLmMKaW5kZXggNTZmZDQyNy4uNGRiOGJhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9ib290L2RlY3N0YXRpb24uYworKysgYi9hcmNoL21pcHMvZGVjL2Jvb3QvZGVjc3RhdGlvbi5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIGFyY2gvbWlwcy9kZWMvZGVjc3RhdGlvbi5jCiAgKi8KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogI2RlZmluZSBSRUxPQwogI2RlZmluZSBJTklUUkQKQEAgLTI0LDcgKzI1LDcgQEAKICNkZWZpbmUgSU5JVFJEX1NUQVJUICgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MjE4KSkKICNkZWZpbmUgSU5JVFJEX1NJWkUgKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgyMWMpKQogCi1leHRlcm4gaW50IF9mdGV4dCwgX2VuZDsJCS8qIGJlZ2luIGFuZCBlbmQgb2Yga2VybmVsIGltYWdlICovCitleHRlcm4gaW50IF9mdGV4dDsJCQkvKiBiZWdpbiBhbmQgZW5kIG9mIGtlcm5lbCBpbWFnZSAqLwogZXh0ZXJuIHZvaWQga2VybmVsX2VudHJ5KGludCwgY2hhciAqKiwgdW5zaWduZWQgbG9uZywgaW50ICopOwogCiB2b2lkICogbWVtY3B5KHZvaWQgKiBkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBjb3VudCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9kZWMvaW50LWhhbmRsZXIuUwppbmRleCA0MWZhMzcyLi5lOGVjOTNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL2ludC1oYW5kbGVyLlMKKysrIGIvYXJjaC9taXBzL2RlYy9pbnQtaGFuZGxlci5TCkBAIC0zNiw3ICszNiw3IEBACiAJCS50ZXh0CiAJCS5zZXQJbm9yZW9yZGVyCiAvKgotICogZGVjc3RhdGlvbl9oYW5kbGVfaW50OiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgREVDc3RhdGlvbnMKKyAqIHBsYXRfaXJxX2Rpc3BhdGNoOiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgREVDc3RhdGlvbnMKICAqCiAgKiBXZSBmb2xsb3cgdGhlIG1vZGVsIGluIHRoZSBJbmR5IGludGVycnVwdCBjb2RlIGJ5IERhdmlkIE1pbGxlciwgd2hlcmUgaGUKICAqIHNheXM6IGEgbG90IG9mIGNvbXBsaWNhdGlvbiBoZXJlIGlzIHRha2VuIGF3YXkgYmVjYXVzZToKQEAgLTEyNSwxMSArMTI1LDcgQEAKICAqIGp1c3QgdGFrZSBhbm90aGVyIGV4Y2VwdGlvbiwgYmlnIGRlYWwuCiAgKi8KIAkJLmFsaWduCTUKLQkJTkVTVEVEKGRlY3N0YXRpb25faGFuZGxlX2ludCwgUFRfU0laRSwgcmEpCi0JCS5zZXQJbm9hdAotCQlTQVZFX0FMTAotCQlDTEkJCQkJIyBURVNUOiBpbnRlcnJ1cHRzIHNob3VsZCBiZSBvZmYKLQkJLnNldAlhdAorCQlORVNURUQocGxhdF9pcnFfZGlzcGF0Y2gsIFBUX1NJWkUsIHJhKQogCQkuc2V0CW5vcmVvcmRlcgogCiAJCS8qCkBAIC0yODIsOSArMjc4LDExIEBACiAjZW5kaWYKIAogc3B1cmlvdXM6Ci0JCWoJc3B1cmlvdXNfaW50ZXJydXB0CisJCWphbAlzcHVyaW91c19pbnRlcnJ1cHQKIAkJIG5vcAotCQlFTkQoZGVjc3RhdGlvbl9oYW5kbGVfaW50KQorCQlqCXJldF9mcm9tX2lycQorCQkgbm9wCisJCUVORChwbGF0X2lycV9kaXNwYXRjaCkKIAogLyoKICAqIEdlbmVyaWMgdW5pbXBsZW1lbnRlZCBpbnRlcnJ1cHQgcm91dGluZXMgLS0gY3B1X21hc2tfbnJfdGJsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3NldHVwLmMgYi9hcmNoL21pcHMvZGVjL3NldHVwLmMKaW5kZXggN2MxY2E4Zi4uYWQ1ZDQzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9kZWMvc2V0dXAuYwpAQCAtNDgsOCArNDgsNiBAQAogZXh0ZXJuIHZvaWQgZGVjX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpOwogZXh0ZXJuIGlycXJldHVybl90IGRlY19pbnRyX2hhbHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgZGVjc3RhdGlvbl9oYW5kbGVfaW50KHZvaWQpOwotCiB1bnNpZ25lZCBsb25nIGRlY19rbl9zbG90X2Jhc2UsIGRlY19rbl9zbG90X3NpemU7CiAKIEVYUE9SVF9TWU1CT0woZGVjX2tuX3Nsb3RfYmFzZSk7CkBAIC03NDQsNyArNzQyLDYgQEAKIAkJcGFuaWMoIkRvbid0IGtub3cgaG93IHRvIHNldCB0aGlzIHVwISIpOwogCQlicmVhazsKIAl9Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgZGVjc3RhdGlvbl9oYW5kbGVfaW50KTsKIAogCS8qIEZyZWUgdGhlIEZQVSBpbnRlcnJ1cHQgaWYgdGhlIGV4Y2VwdGlvbiBpcyBwcmVzZW50LiAqLwogCWlmICghY3B1X2hhc19ub2ZwdWV4KSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVmY29uZmlnIGIvYXJjaC9taXBzL2RlZmNvbmZpZwppbmRleCA0MmQ1Y2Q3Li42MDdlMjk4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6Mzk6NTEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUwOjU0IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0FSQz15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKQEAgLTEyMSw3ICsxMjMsNiBAQAogQ09ORklHX0lQMjJfQ1BVX1NDQUNIRT15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKQEAgLTE0Myw3ICsxNDQsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNjAsNiArMTYwLDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNzMsMTAgKzE3NCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4OCw3ICsxODUsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTcsNiArMTkzLDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjQyLDYgKzI0MCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjY0LDYgKzI2Myw3IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTMwNSw5ICszMDUsMTIgQEAKIENPTkZJR19JUF9WU19GVFA9bQogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMzMwLDExICszMzMsMTQgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zNTcsMjAgKzM2MywxOSBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfUFBUUD1tCitDT05GSUdfSVBfTkZfSDMyMz1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KQEAgLTM4OCw2ICszOTMsNyBAQAogQ09ORklHX0lQX05GX05BVF9URlRQPW0KIENPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KIENPTkZJR19JUF9ORl9OQVRfUFBUUD1tCitDT05GSUdfSVBfTkZfTkFUX0gzMjM9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC00MDgsMTIgKzQxNCwxMCBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDM1LDYgKzQzOSwxMSBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtNDQ0LDExICs0NTMsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01MDgsNiArNTEyLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC01NDYsNyArNTUzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtODEyLDEwICs4MTksNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTg1Nyw2ICs4NjAsNyBAQAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtODczLDE0ICs4NzcsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9bQpAQCAtOTQ0LDcgKzk2Niw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtOTYzLDcgKzk4NCw2IEBACiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKQEAgLTEwNzgsNiArMTA5OCw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9NYWtlZmlsZQppbmRleCA1OGMwMmY5Li5jZDg2OGVjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9NYWtlZmlsZQpAQCAtNiw0ICs2LDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBHYWxpbGVvIEVWOTYxMDAgYm9hcmQuCiAjCiAKLW9iai15CQkrPSBpbml0Lm8gaXJxLm8gcHV0cy5vIHJlc2V0Lm8gdGltZS5vIGludC1oYW5kbGVyLm8gc2V0dXAubworb2JqLXkJCSs9IGluaXQubyBpcnEubyBwdXRzLm8gcmVzZXQubyB0aW1lLm8gc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNGQxMGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLQkuc2V0CW5vYXQKLQkuYWxpZ24JNQotCi1ORVNURUQoZXY5NjEwMElSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkJCQkJIyBJbXBvcnRhbnQ6IG1hcmsgS0VSTkVMIG1vZGUgIQotCi0JbWZjMAl0MCwgQ1AwX0NBVVNFCQkjIGdldCBwZW5kaW5nIGludGVycnVwdHMKLQltZmMwCXQxLCBDUDBfU1RBVFVTCQkjIGdldCBlbmFibGVkIGludGVycnVwdHMKLQlhbmQJdDAsIHQxCQkJIyBpc29sYXRlIGFsbG93ZWQgb25lcwotCi0JIyBGSVggTUUgYWRkIFI3MDAwIGV4dGVuc2lvbnMKLQlhbmRpCXQwLDB4ZmYwMAkJIyBpc29sYXRlIHBlbmRpbmcgYml0cwotCWFuZGkJYTAsIHQwLCBDQVVTRUZfSVA3Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCW1vdmUJYTAsIHNwCi0JamFsCW1pcHNfdGltZXJfaW50ZXJydXB0Ci0JaglyZXRfZnJvbV9pcnEKLQotMToJYmVxegl0MCwgM2YJCQkjIHNwdXJpb3VzIGludGVycnVwdAotCi0JbW92ZQlhMCwgdDAKLQltb3ZlCWExLCBzcAotCWphbAlldjk2MTAwX2NwdV9pcnEKLQlqCXJldF9mcm9tX2lycQotCi0zOglqCXNwdXJpb3VzX2ludGVycnVwdAotCUVORChldjk2MTAwSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvaXJxLmMgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pcnEuYwppbmRleCA5N2JmMDk0Li5lZTVkNjcyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pcnEuYworKysgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pcnEuYwpAQCAtNDAsOCArNDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgZXY5NjEwMElSUSh2b2lkKTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZmZ6OCh1bnNpZ25lZCBpbnQgd29yZCkKIHsKIAl1bnNpZ25lZCBsb25nIGs7CkBAIC01NCwxMyArNTIsMjYgQEAKIAlyZXR1cm4gazsKIH0KIAotYXNtbGlua2FnZSB2b2lkIGV2OTYxMDBfY3B1X2lycSh1bnNpZ25lZCBpbnQgcGVuZGluKQorZXh0ZXJuIHZvaWQgbWlwc190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCithc21saW5rYWdlIHZvaWQgZXY5NjEwMF9jcHVfaXJxKHVuc2lnbmVkIGludCBwZW5kaW5nLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlkb19JUlEoZmZ6OChwZW5kaW5nID4+IDgpLCByZWdzKTsKIH0KIAorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKSAmIFNUMF9JTTsKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJbWlwc190aW1lcl9pbnRlcnJ1cHQocmVncyk7CisJZWxzZSBpZiAocGVuZGluZykKKwkJZXY5NjEwMF9jcHVfaXJxKHBlbmRpbmcsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgZXY5NjEwMElSUSk7CiAJbWlwc19jcHVfaXJxX2luaXQoMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL01ha2VmaWxlIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9NYWtlZmlsZQppbmRleCBlYmU5MWM1Li5iMmM1M2E4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvTWFrZWZpbGUKQEAgLTYsNiArNiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgR2FsaWxlbyBFVjY0MTIwIGJvYXJkLgogIwogCi1vYmoteQkrPSBpbnQtaGFuZGxlci5vIGlycS5vIHByb21jb24ubyByZXNldC5vIHNlcmlhbEdULm8gc2V0dXAubworb2JqLXkJKz0gaXJxLm8gcHJvbWNvbi5vIHJlc2V0Lm8gc2VyaWFsR1QubyBzZXR1cC5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUyNDM1Zi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqIGludC1oYW5kbGVyLlMKLSAqCi0gKiBCYXNlZCBvbiB0aGUgY29iYWx0IGhhbmRsZXIuCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogZ2FsaWxlb19oYW5kbGVfaW50IC0KLSAqICAgICAgV2UgY2hlY2sgZm9yIHRoZSB0aW1lciBmaXJzdCwgdGhlbiBjaGVjayBQQ0kgaW50cyBBIGFuZCBELgotICogICAgICBUaGVuIGNoZWNrIGZvciBzZXJpYWwgSVJRIGFuZCBmYWxsIHRocm91Z2guCi0gKi8KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi0JCS5zZXQJbm9hdAotCQlORVNURUQoZ2FsaWxlb19oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQkJbWZjMAl0MCxDUDBfQ0FVU0UKLQkJbWZjMAl0MixDUDBfU1RBVFVTCi0KLQkJYW5kCXQwLHQyCi0KLQkJYW5kaQl0MSx0MCxTVEFUVVNGX0lQNCAvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKHRpbWVyKSAqLwotCQlibmV6CXQxLGxsX2d0NjQxMjBfaXJxCi0JCWFuZGkJdDEsdDAsU1RBVFVTRl9JUDIgLyogaW50MCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsbGxfcGNpX2ludEEKLQkJYW5kaQl0MSx0MCxTVEFUVVNGX0lQNSAvKiBpbnQzIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSxsbF9wY2lfaW50RAotCQlhbmRpCXQxLHQwLFNUQVRVU0ZfSVA2IC8qIGludDQgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLGxsX3NlcmlhbF9pcnEKLQkJYW5kaQl0MSx0MCxTVEFUVVNGX0lQNyAvKiBjb21wYXJlIGludCAqLwotCQlibmV6CXQxLGxsX2NvbXBhcmVfaXJxCi0JCW5vcAotCi0gICAgLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKGdhbGlsZW9faGFuZGxlX2ludCkKLQotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfZ3Q2NDEyMF9pcnE6Ci0JCWxpCWEwLDQKLQkJbW92ZQlhMSxzcAotCQlqYWwJZG9fSVJRCi0JCW5vcAotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLQotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLWxsX2NvbXBhcmVfaXJxOgotCQlsaSAJYTAsNwotCQltb3ZlCWExLHNwCi0JCWphbAlkb19JUlEKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcAotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfcGNpX2ludEE6Ci0JCW1vdmUJYTAsc3AKLQkJamFsCXBjaV9pbnRBCi0JCW5vcAotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLQotI2lmIDAKLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF9wY2lfaW50QjoKLQkJbW92ZSAJYTAsc3AKLQkJamFsCXBjaV9pbnRCCi0JCW5vcAotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLQotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLWxsX3BjaV9pbnRDOgotCQltb3ZlIAlhMCxzcAotCQlqYWwJcGNpX2ludEMKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcAotI2VuZGlmCi0KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF9wY2lfaW50RDoKLQkJbW92ZSAJYTAsc3AKLQkJamFsCXBjaV9pbnRECi0JCW5vcAotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLQotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLWxsX3NlcmlhbF9pcnE6Ci0JCWxpCWEwLDYKLQkJbW92ZQlhMSxzcAotCQlqYWwJZG9fSVJRCi0JCW5vcAotCQlqCXJldF9mcm9tX2lycQotCQlub3AKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvaXJxLmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL2lycS5jCmluZGV4IDNiMTg2MTUuLjQ2YzQ2OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvaXJxLmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pcnEuYwpAQCAtNDYsMTQgKzQ2LDIyIEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+CiAKLWFzbWxpbmthZ2UgaW5saW5lIHZvaWQgcGNpX2ludEEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JZG9fSVJRKEdUX0lOVEEsIHJlZ3MpOwotfQorCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKIAotYXNtbGlua2FnZSBpbmxpbmUgdm9pZCBwY2lfaW50RChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlkb19JUlEoR1RfSU5URCwgcmVncyk7CisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkJCS8qIGludDIgaGFyZHdhcmUgbGluZSAodGltZXIpICovCisJCWRvX0lSUSg0LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCQkvKiBpbnQwIGhhcmR3YXJlIGxpbmUgKi8KKwkJZG9fSVJRKEdUX0lOVEEsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkJCS8qIGludDMgaGFyZHdhcmUgbGluZSAqLworCQlkb19JUlEoR1RfSU5URCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQkJLyogaW50NCBoYXJkd2FyZSBsaW5lICovCisJCWRvX0lSUSg2LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCQkvKiBjb21wYXJlIGludCAqLworCQlkb19JUlEoNywgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfZXY2NDEyMF9pcnEodW5zaWduZWQgaW50IGlycV9ucikKQEAgLTEwOSwxNiArMTE3LDExIEBACiAKIHZvaWQgZ3Q2NDEyMF9pcnFfc2V0dXAodm9pZCkKIHsKLQlleHRlcm4gYXNtbGlua2FnZSB2b2lkIGdhbGlsZW9faGFuZGxlX2ludCh2b2lkKTsKLQogCS8qCiAJICogQ2xlYXIgYWxsIG9mIHRoZSBpbnRlcnJ1cHRzIHdoaWxlIHdlIGNoYW5nZSB0aGUgYWJsZSBhcm91bmQgYSBiaXQuCiAJICovCiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9JTSk7CiAKLQkvKiBTZXRzIHRoZSBleGNlcHRpb25faGFuZGxlciBhcnJheS4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBnYWxpbGVvX2hhbmRsZV9pbnQpOwotCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL3NlcmlhbEdULmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL3NlcmlhbEdULmMKaW5kZXggMTZlMzRhNS4uOGYwZDgzNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9zZXJpYWxHVC5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2VyaWFsR1QuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAjZWxzZQogCS8qCiAJICogTm90ZTogU2V0IGJhdWQgcmF0ZSwgaGFyZGNvZGVkIGhlcmUgZm9yIHJhdGUgb2YgMTE1MjAwCi0JICogc2luY2UgYmVjYW1lIHVuc3VyZSBvZiBhYm92ZSAiYnVhZCByYXRlIiBhbGdvcml0aG0gKD8/KS4KKwkgKiBzaW5jZSBiZWNhbWUgdW5zdXJlIG9mIGFib3ZlICJiYXVkIHJhdGUiIGFsZ29yaXRobSAoPz8pLgogCSAqLwogCW91dHJlZyhjaGFubmVsLCBMQ1IsIDB4ODMpOwogCW91dHJlZyhjaGFubmVsLCBETE0sIDB4MDApOwkvLyBTZWUgbm90ZSBhYm92ZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvTWFrZWZpbGUgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9NYWtlZmlsZQppbmRleCA3YjU5YzY1Li42ZjcwOGRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIE1vbWVudHVtJ3MgT2NlbG90IGJvYXJkLgogIwogCi1vYmoteQkgCQkrPSBpbnQtaGFuZGxlci5vIGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KK29iai15CSAJCSs9IGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KIAogb2JqLSQoQ09ORklHX0tHREIpCSs9IGRiZ19pby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2RiZ19pby5jIGIvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvZGJnX2lvLmMKaW5kZXggODcyMGJjYy4uZjBhNmEzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvZGJnX2lvLmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvZGJnX2lvLmMKQEAgLTczLDcgKzczLDcgQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKIAotCS8qIHNldCB1cCBidWFkIHJhdGUgKi8KKwkvKiBzZXQgdXAgYmF1ZCByYXRlICovCiAJewogCQl1aW50MzIgZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOGFjZWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBGaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3Igb2NlbG90IGJvYXJkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogZmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIG9jZWxvdCBib2FyZCAtCi0gKiBXZSBjaGVjayBmb3IgdGhlIHRpbWVyIGZpcnN0LCB0aGVuIGNoZWNrIFBDSSBpbnRzIEEgYW5kIEQuCi0gKiBUaGVuIGNoZWNrIGZvciBzZXJpYWwgSVJRIGFuZCBmYWxsIHRocm91Z2guCi0gKi8KLQkJLmFsaWduCTUKLQkJTkVTVEVEKG9jZWxvdF9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDIsIENQMF9TVEFUVVMKLQotCQlhbmQJdDAsIHQyCi0KLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiBpbnQwIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcHJpX2VuZXRfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDMJLyogaW50MSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3NlY19lbmV0X2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA0CS8qIGludDIgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF91YXJ0MV9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNQkvKiBpbnQzIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfY3BjaV9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNgkvKiBpbnQ0IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfZ2FsaWxlb19pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNwkvKiBjcHUgdGltZXIgKi8KLQkJYm5legl0MSwgbGxfY3B1dGltZXJfaXJxCi0KLSAgICAgICAgICAgICAgICAvKiBub3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cyAqLwotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJY2ZjMAl0MSwgQ1AwX1MxX0lOVENPTlRST0wKLQotCQkvKiBzaGlmdCB0aGUgbWFzayA4IGJpdHMgbGVmdCB0byBsaW5lIHVwIHRoZSBiaXRzICovCi0JCSBzbGwJdDIsIHQxLCA4Ci0KLQkJIGFuZAl0MCwgdDIKLQkJIHNybAl0MCwgdDAsIDE2Ci0KLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQOAkvKiBpbnQ2IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcG1jMV9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQOQkvKiBpbnQ3IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcG1jMl9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMTAJLyogaW50OCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX2NwY2lfYWJjZF9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMTEJLyogaW50OSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3VhcnQyX2lycQotCi0JCS5zZXQJcmVvcmRlcgotCi0JCS8qIHdyb25nIGFsYXJtIG9yIG1hc2tlZCAuLi4gKi8KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCUVORChvY2Vsb3RfaGFuZGxlX2ludCkKLQotCQkuYWxpZ24JNQotbGxfcHJpX2VuZXRfaXJxOgotCQlsaQlhMCwgMgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3NlY19lbmV0X2lycToKLQkJbGkJYTAsIDMKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF91YXJ0MV9pcnE6Ci0JCWxpCWEwLCA0Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfY3BjaV9pcnE6Ci0JCWxpCWEwLCA1Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfZ2FsaWxlb19pcnE6Ci0JCWxpCWEwLCA2Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1dGltZXJfaXJxOgotCQlsaQlhMCwgNwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BtYzFfaXJxOgotCQlsaQlhMCwgOAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BtYzJfaXJxOgotCQlsaQlhMCwgOQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwY2lfYWJjZF9pcnE6Ci0JCWxpCWEwLCAxMAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnQyX2lycToKLQkJbGkJYTAsIDExCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2lycS5jIGIvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvaXJxLmMKaW5kZXggNGYxMDhkYS4uODg1ZjY3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvaXJxLmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvaXJxLmMKQEAgLTQ4LDcgKzQ4LDM4IEBACiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG9jZWxvdF9oYW5kbGVfaW50KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCQkvKiBpbnQwIGhhcmR3YXJlIGxpbmUgKi8KKwkJZG9fSVJRKDIsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykJCS8qIGludDEgaGFyZHdhcmUgbGluZSAqLworCQlkb19JUlEoMywgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQkJLyogaW50MiBoYXJkd2FyZSBsaW5lICovCisJCWRvX0lSUSg0LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDUpCQkvKiBpbnQzIGhhcmR3YXJlIGxpbmUgKi8KKwkJZG9fSVJRKDUsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikJCS8qIGludDQgaGFyZHdhcmUgbGluZSAqLworCQlkb19JUlEoNiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA3KQkJLyogY3B1IHRpbWVyICovCisJCWRvX0lSUSg3LCByZWdzKTsKKwllbHNlIHsKKwkJLyoKKwkJICogTm93IGxvb2sgYXQgdGhlIGV4dGVuZGVkIGludGVycnVwdHMKKwkJICovCisJCXBlbmRpbmcgPSAocmVhZF9jMF9jYXVzZSgpICYgKHJlYWRfYzBfaW50Y29udHJvbCgpIDw8IDgpKSA+PiAxNjsKKworCQlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA4KQkJLyogaW50NiBoYXJkd2FyZSBsaW5lICovCisJCQlkb19JUlEoOCwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQOSkJCS8qIGludDcgaGFyZHdhcmUgbGluZSAqLworCQkJZG9fSVJRKDksIHJlZ3MpOworCQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEwKQkvKiBpbnQ4IGhhcmR3YXJlIGxpbmUgKi8KKwkJCWRvX0lSUSgxMCwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMTEpCS8qIGludDkgaGFyZHdhcmUgbGluZSAqLworCQkJZG9fSVJRKDExLCByZWdzKTsKKwl9Cit9CiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKQEAgLTU5LDkgKzkwLDYgQEAKIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JLyogU2V0cyB0aGUgZmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIuICovCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgb2NlbG90X2hhbmRsZV9pbnQpOwotCiAJbWlwc19jcHVfaXJxX2luaXQoMCk7CiAJcm03a19jcHVfaXJxX2luaXQoOCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL01ha2VmaWxlIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZQppbmRleCAwZTc4NTNmLi42MzQzMTUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgSVRFIDgxNzIgKHFlZC00bi1zMDFiKSBib2FyZCwgZ2VuZXJpYyBmaWxlcy4KICMKIAotb2JqLXkJCQkrPSBpdDgxNzJfc2V0dXAubyBpcnEubyBpbnQtaGFuZGxlci5vIHBtb25fcHJvbS5vIFwKK29iai15CQkJKz0gaXQ4MTcyX3NldHVwLm8gaXJxLm8gcG1vbl9wcm9tLm8gXAogCQkJICAgdGltZS5vIGxwYy5vIHB1dHMubyByZXNldC5vCiAKIG9iai0kKENPTkZJR19JVDgxNzJfQ0lSKSs9IGl0ODE3Ml9jaXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9kYmdfaW8uYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvZGJnX2lvLmMKaW5kZXggYzRmODUzMC4uNmE3Y2NhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2RiZ19pby5jCkBAIC03Miw3ICs3Miw3IEBACiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJVUFSVDE2NTUwX1dSSVRFKE9GU19JTlRSX0VOQUJMRSwgMCk7CiAKLQkvKiBzZXQgdXAgYnVhZCByYXRlICovCisJLyogc2V0IHVwIGJhdWQgcmF0ZSAqLwogCXsKIAkJdWludDMyIGRpdmlzb3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE5MGQ4YS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLnRleHQKLQkuc2V0ICAgIG1hY3JvCi0JLnNldCAgICBub2F0Ci0JLmFsaWduCTUKLQotTkVTVEVEKGl0ODE3Ml9JUlEsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCQkJCSMgSW1wb3J0YW50OiBtYXJrIEtFUk5FTCBtb2RlICEKLQotICAgICAgICAvKiBXZSdyZSB3b3JraW5nIHdpdGggJ3Jlb3JkZXInIHNldCBhdCB0aGlzIHBvaW50LiAqLwotCS8qCi0JICogR2V0IHBlbmRpbmcgaW50ZXJydXB0cwotCSAqLwotCi0JbWZjMAl0MCxDUDBfQ0FVU0UJCSMgZ2V0IHBlbmRpbmcgaW50ZXJydXB0cwotCW1mYzAJdDEsQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JYW5kCXQwLHQxCQkJIyBpc29sYXRlIGFsbG93ZWQgb25lcwotCi0JYW5kaQl0MCwweGZmMDAJCSMgaXNvbGF0ZSBwZW5kaW5nIGJpdHMKLSAgICAgICAgYmVxeiAgICB0MCwgM2YgICAgICAgICAgICAgICAgICAjIHNwdXJpb3VzIGludGVycnVwdAotCi0gICAgICAgIGFuZGkgICAgYTAsIHQwLCBDQVVTRUZfSVA3Ci0gICAgICAgIGJlcSAgICAgYTAsIHplcm8sIDFmCi0KLSAgICAgICAgbGkJYTAsIDEyNwkJCSMgTUlQU19DUFVfVElNRVJfSVJRID0gKE5SX0lSUVMtMSkKLSAgICAgICAgbW92ZSAgICBhMSwgc3AKLSAgICAgICAgamFsICAgICBsbF90aW1lcl9pbnRlcnJ1cHQKLQlqCXJldF9mcm9tX2lycQotICAgICAgICBub3AKLQotMToKLSAgICAgICAgYW5kaSAgICBhMCwgdDAsIENBVVNFRl9JUDIgICAgICAjIHRoZSBvbmx5IGludCB3ZSBleHBlY3QgYXQgdGhpcyB0aW1lCi0gICAgICAgIGJlcSAgICAgYTAsIHplcm8sIDNmCi0JbW92ZQlhMCxzcAotCWphbAlpdDgxNzJfaHcwX2lycWRpc3BhdGNoCi0KLQltZmMwCXQwLENQMF9TVEFUVVMJCSMgZGlzYWJsZSBpbnRlcnJ1cHRzCi0Jb3JpCXQwLDEKLQl4b3JpCXQwLDEKLQltdGMwCXQwLENQMF9TVEFUVVMKLSAgICAgICAgbm9wCi0gICAgICAgIG5vcAotICAgICAgICBub3AKLQotCWxhICAgICAgYTEsIHJldF9mcm9tX2lycQotCWpyCWExCi0gICAgICAgIG5vcAotCi0zOgotCW1vdmUgYTAsIHNwCi0JamFsCW1pcHNfc3B1cmlvdXNfaW50ZXJydXB0Ci0gICAgICAgIG5vcAotCWxhICAgICAgYTEsIHJldF9mcm9tX2lycQotCWpyCWExCi0gICAgICAgIG5vcAotCi1FTkQoaXQ4MTcyX0lSUSkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pcnEuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXJxLmMKaW5kZXggZTY3Zjk2MS4uNzdiZTcyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pcnEuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2lycS5jCkBAIC02MiwxMiArNjIsOCBAQAogCiAjZGVmaW5lIEFMTElOVFNfTk9USU1FUiAoSUVfSVJRMCB8IElFX0lSUTEgfCBJRV9JUlEyIHwgSUVfSVJRMyB8IElFX0lSUTQpCiAKLXZvaWQgZGlzYWJsZV9pdDgxNzJfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpOwotdm9pZCBlbmFibGVfaXQ4MTcyX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKTsKLQogZXh0ZXJuIHZvaWQgc2V0X2RlYnVnX3RyYXBzKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWlwc190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBpdDgxNzJfSVJRKHZvaWQpOwogCiBzdHJ1Y3QgaXQ4MTcyX2ludGNfcmVncyB2b2xhdGlsZSAqaXQ4MTcyX2h3MF9pY3JlZ3MgPQogCShzdHJ1Y3QgaXQ4MTcyX2ludGNfcmVncyB2b2xhdGlsZSAqKShLU0VHMUFERFIoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfSU5UQ19CQVNFKSk7CkBAIC0xODEsOCArMTc3LDYgQEAKIAlpbnQgaTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgICAgICBzZXRfZXhjZXB0X3ZlY3RvcigwLCBpdDgxNzJfSVJRKTsKLQogCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KIAlpdDgxNzJfaHcwX2ljcmVncy0+bGJfbWFzayAgPSAweGZmZmY7CiAJaXQ4MTcyX2h3MF9pY3JlZ3MtPmxwY19tYXNrID0gMHhmZmZmOwpAQCAtMjgyLDYgKzI3NiwxOCBAQAogCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCisJaWYgKCFwZW5kaW5nKQorCQltaXBzX3NwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJbGxfdGltZXJfaW50ZXJydXB0KDEyNywgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpCisJCWl0ODE3Ml9odzBfaXJxZGlzcGF0Y2gocmVncyk7Cit9CisKIHZvaWQgc2hvd19wZW5kaW5nX2lycXModm9pZCkKIHsKIAlmcHV0cygiaW50c3RhdHVzOiAgIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL3RpbWUuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCmluZGV4IGI3OTgxN2IuLmRlZTQ5N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogCiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9pbml0LmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9pdnIvaW5pdC5jCmluZGV4IGI3NzRkYjAuLjA1Y2Y5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9pbml0LmMKKysrIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvaXZyL2luaXQuYwpAQCAtMzQsMTMgKzM0LDEzIEBACiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzIuaD4KICNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Ml9kYmcuaD4KIAogaW50IHByb21fYXJnYzsKIGNoYXIgKipwcm9tX2FyZ3YsICoqcHJvbV9lbnZwOwogCi1leHRlcm4gY2hhciBfZW5kOwogZXh0ZXJuIHZvaWQgIF9faW5pdCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBwcm9tX2dldF9tZW1zaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IGl0ODE3Ml9pbml0X3JhbV9yZXNvdXJjZSh1bnNpZ25lZCBsb25nIG1lbXNpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvaW5pdC5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvaW5pdC5jCmluZGV4IGU4ZWM4YmUuLmVhMmE3NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL3FlZC00bi1zMDFiL2luaXQuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9xZWQtNG4tczAxYi9pbml0LmMKQEAgLTM0LDEzICszNCwxMyBAQAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+CiAjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfZGJnLmg+CiAKIGludCBwcm9tX2FyZ2M7CiBjaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKIAotZXh0ZXJuIGNoYXIgX2VuZDsKIGV4dGVybiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9nZXRfbWVtc2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBpdDgxNzJfaW5pdF9yYW1fcmVzb3VyY2UodW5zaWduZWQgbG9uZyBtZW1zaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L01ha2VmaWxlIGIvYXJjaC9taXBzL2phenovTWFrZWZpbGUKaW5kZXggODU3NDkyNC4uMDJiZDM5YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2phenovTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgSmF6eiBmYW1pbHkgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAogIwogCi1vYmoteQkgCTo9IGludC1oYW5kbGVyLm8gaXJxLm8gamF6emRtYS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJIAk6PSBpcnEubyBqYXp6ZG1hLm8gcmVzZXQubyBzZXR1cC5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvamF6ei9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzc1MmM2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9qYXp6L2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCBieSBSYWxmIEJhZWNobGUgYW5kIEFuZHJlYXMgQnVzc2UKLSAqCi0gKiBKYXp6IGZhbWlseSBzcGVjaWZpYyBpbnRlcnJ1cHQgc3R1ZmYKLSAqCi0gKiBUbyBkbzogT24gSmF6eiBtYWNoaW5lcyB3ZSByZW1hcCBzb21lIG5vbi1JU0EgaW50ZXJydXB0cyB0byBJU0EKLSAqICAgICAgICBpbnRlcnJ1cHRzLiAgVGhlc2UgaW50ZXJydXB0cyBzaG91bGQgdXNlIHRoZWlyIG93biB2ZWN0b3JzLgotICogICAgICAgIFNxdWVlemUgdGhlIGxhc3QgY3ljbGVzIG91dCBvZiB0aGUgaGFuZGxlcnMuICBPbmx5IGEgZGVhZAotICogICAgICAgIGN5Y2xlIGlzIGEgZ29vZCBjeWNsZS4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vamF6ei5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogamF6el9oYW5kbGVfaW50OiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIEFDRVIgUGljYS02MSBib2FyZHMKLSAqLwotCQkuc2V0CW5vcmVvcmRlcgotCi0JCU5FU1RFRChqYXp6X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHJhKQotCQkuc2V0CW5vYXQKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQotCQkvKgotCQkgKiBHZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JCSAqLwotCQltZmMwCXQwLENQMF9DQVVTRQkJIyBnZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JCW1mYzAJdDEsQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JCWFuZAl0MCx0MQkJCSMgaXNvbGF0ZSBhbGxvd2VkIG9uZXMKLQkJYW5kaQl0MCwweGZmMDAJCSMgaXNvbGF0ZSBwZW5kaW5nIGJpdHMKLQkJYmVxegl0MCwzZgotCQlzbGwJdDAsMTYJCQkjIGRlbGF5IHNsb3QKLQotCQkvKgotCQkgKiBGaW5kIGlycSB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkKLQkJICogRklYTUU6IFRoaXMgaXMgc2xvdyAtIHVzZSBiaW5hcnkgc2VhcmNoCi0JCSAqLwotCQlsYQl0MSxsbF92ZWN0b3JzCi0xOgkJYmx0egl0MCwyZgkJCSMgZm91bmQgcGVuZGluZyBpcnEKLQkJc2xsCXQwLDEKLQkJYgkxYgotCQlzdWJ1CXQxLFBUUlNJWkUJCSMgZGVsYXkgc2xvdAotCi0JCS8qCi0JCSAqIERvIHRoZSBsb3ctbGV2ZWwgc3R1ZmYKLQkJICovCi0yOgkJbHcJdDAsKHQxKQotCQlqcgl0MAotCQlub3AJCQkJIyBkZWxheSBzbG90Ci0JCUVORChqYXp6X2hhbmRsZV9pbnQpCi0KLWxsX3N3MDoJCWxpCXMxLH5JRV9TVzAKLQkJbWZjMAl0MCxDUDBfQ0FVU0UKLQkJYW5kCXQwLHMxCi0JCW10YzAJdDAsQ1AwX0NBVVNFCi0JCVBBTklDKCJVbmltcGxlbWVudGVkIHN3MCBoYW5kbGVyIikKLQotbGxfc3cxOgkJbGkJczEsfklFX1NXMQotCQltZmMwCXQwLENQMF9DQVVTRQotCQlhbmQJdDAsczEKLQkJbXRjMAl0MCxDUDBfQ0FVU0UKLQkJUEFOSUMoIlVuaW1wbGVtZW50ZWQgc3cxIGhhbmRsZXIiKQotCi1sbF9sb2NhbF9kbWE6CWxpCXMxLH5JRV9JUlEwCi0JCVBBTklDKCJVbmltcGxlbWVudGVkIGxvY2FsX2RtYSBoYW5kbGVyIikKLQotbGxfbG9jYWxfZGV2OglsYnUJdDAsSkFaWl9JT19JUlFfU09VUkNFCi0jaWYgUFRSU0laRSA9PSA4CS8qIFRydWUgNjQgYml0IGtlcm5lbCAqLwotCQlkc2xsCXQwLDEKLSNlbmRpZgotCQkuc2V0CXJlb3JkZXIKLQkJTE9OR19MCXQwLGxvY2FsX3ZlY3Rvcih0MCkKLQkJanIJdDAKLQkJLnNldAlub3Jlb3JkZXIKLQotLyoKLSAqIFRoZSBicmFpbmRlYWQgUElDQSBoYXJkd2FyZSBnaXZlcyB1cyBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggaWYgd2UgcmVhbGx5Ci0gKiByZWNlaXZlZCBpbnRlcnJ1cHQgNyBmcm9tIHRoZSAoRSlJU0EgYnVzIG9yIGlmIHdlIGp1c3QgcmVjZWl2ZWQgYW4KLSAqIGludGVycnVwdCB3aXRoIG5vIGZpbmRhYmxlIGNhdXNlLiAgVGhpcyBzb21ldGltZXMgaGFwcGVucyB3aXRoIGJyYWluZGVhZAotICogY2FyZHMuICBPaCB3ZWxsIC0gZm9yIGFsbCB0aGUgSmF6eiBib3hlcyBzbG90cyBhcmUgbW9yZSBvciBsZXNzIGp1c3QKLSAqIHdoaXN0bGVzIGFuZCBiZWxscyBhbmQgd2UncmUgYXdhcmUgb2YgdGhlIHByb2JsZW0uCi0gKi8KLWxsX2lzYV9pcnE6CWx3CWEwLCBKQVpaX0VJU0FfSVJRX0FDSwotCi0JCWphbAlkb19JUlEKLQkJIG1vdmUJYTEsc3AKLQotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLQotLyoKLSAqIEhtbS4uLiAgVGhpcyBpcyBub3QganVzdCBhIHBsYWluIFBDIGNsb25lIHNvIHRoZSBxdWVzdGlvbiBpcwotICogd2hpY2ggZGV2aWNlcyBvbiBKYXp6IG1hY2hpbmVzIGNhbiBnZW5lcmF0ZSBhbiAoRSlJU0EgTk1JPwotICogKFdyaXRpbmcgdG8gbm9uZXhpc3RlbnQgbWVtb3J5PykKLSAqLwotbGxfaXNhX25taToJbGkJczEsfklFX0lSUTMKLQkJUEFOSUMoIlVuaW1wbGVtZW50ZWQgaXNhX25taSBoYW5kbGVyIikKLQotLyoKLSAqIFRpbWVyIElSUSAtIHJlbWFwcGVkIHRvIGJlIG1vcmUgc2ltaWxhciB0byBhbiBJQk0gY29tcGF0aWJsZS4KLSAqCi0gKiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIGhhbmRsZWQgc3BlY2lhbGx5IHRvIGVuc3VyZSB0aGF0IHRoZSBqaWZmaWVzCi0gKiB2YXJpYWJsZSBpcyB1cGRhdGVkIGF0IGFsbCB0aW1lcy4gIFNwZWNpZmljYWxseSwgdGhlIHRpbWVyIGludGVycnVwdCBpcwotICoganVzdCBsaWtlIHRoZSBjb21wbGV0ZSBoYW5kbGVycyBleGNlcHQgdGhhdCBpdCBpcyBpbnZva2VkIHdpdGggaW50ZXJydXB0cwotICogZGlzYWJsZWQgYW5kIHNob3VsZCBuZXZlciByZS1lbmFibGUgdGhlbS4gIElmIG90aGVyIGludGVycnVwdHMgd2VyZQotICogYWxsb3dlZCB0byBiZSBwcm9jZXNzZWQgd2hpbGUgdGhlIHRpbWVyIGludGVycnVwdCBpcyBhY3RpdmUsIHRoZW4gdGhlCi0gKiBvdGhlciBpbnRlcnJ1cHRzIHdvdWxkIGhhdmUgdG8gYXZvaWQgdXNpbmcgdGhlIGppZmZpZXMgdmFyaWFibGUgZm9yIGRlbGF5Ci0gKiBhbmQgaW50ZXJ2YWwgdGltaW5nIG9wZXJhdGlvbnMgdG8gYXZvaWQgaGFuZ2luZyB0aGUgc3lzdGVtLgotICovCi1sbF90aW1lcjoJbHcJemVybyxKQVpaX1RJTUVSX1JFR0lTVEVSICMgdGltZXIgaXJxIGNsZWFyZWQgb24gcmVhZAotCQlsaQlzMSx+SUVfSVJRNAotCi0JCWxpCWEwLCBKQVpaX1RJTUVSX0lSUQotCQlqYWwJZG9fSVJRCi0JCSBtb3ZlCWExLHNwCi0KLQkJbWZjMAl0MCxDUDBfU1RBVFVTCQkjIGRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbgotCQlvcmkJdDAsMQotCQl4b3JpCXQwLDEKLQkJbXRjMAl0MCxDUDBfU1RBVFVTCi0KLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0vKgotICogQ1BVIGNvdW50L2NvbXBhcmUgSVJRICh1bnVzZWQpCi0gKi8KLWxsX2NvdW50OglqCXJldF9mcm9tX2lycQotCQkgbXRjMAl6ZXJvLENQMF9DT01QQVJFCi0KLSNpZiAwCi0vKgotICogQ2FsbCB0aGUgaGFuZGxlciBmb3IgdGhlIGludGVycnVwdAotICogKEN1cnJlbnRseSB1bnVzZWQpCi0gKi8KLWNhbGxfcmVhbDoJLyoKLQkJICogdGVtcG9yYXJpbHkgZGlzYWJsZSBpbnRlcnJ1cHQKLQkJICovCi0JCW1mYzAJdDIsQ1AwX1NUQVRVUwotCQlhbmQJdDIsczEKLQkJbXRjMAl0MixDUDBfU1RBVFVTCi0JCW5vcglzMSx6ZXJvLHMxCi0JCWphbAlkb19JUlEKLQotCQkvKgotCQkgKiByZWVuYWJsZSBpbnRlcnJ1cHQKLQkJICovCi0JCW1mYzAJdDIsQ1AwX1NUQVRVUwotCQlvcgl0MixzMQotCQltdGMwCXQyLENQMF9TVEFUVVMKLQkJaglyZXRfZnJvbV9pcnEKLSNlbmRpZgotCi0JCS5kYXRhCi0JCVBUUglsbF9zdzAJCQkjIFNXMAotCQlQVFIJbGxfc3cxCQkJIyBTVzEKLQkJUFRSCWxsX2xvY2FsX2RtYQkJIyBMb2NhbCBETUEKLQkJUFRSCWxsX2xvY2FsX2RldgkJIyBMb2NhbCBkZXZpY2VzCi0JCVBUUglsbF9pc2FfaXJxCQkjIElTQSBJUlEKLQkJUFRSCWxsX2lzYV9ubWkJCSMgSVNBIE5NSQotCQlQVFIJbGxfdGltZXIJCSMgVGltZXIKLWxsX3ZlY3RvcnM6CVBUUglsbF9jb3VudAkJIyBDb3VudC9Db21wYXJlIElSUQotCi0JCS8qCi0JCSAqIEludGVycnVwdCBoYW5kbGVycyBmb3IgbG9jYWwgZGV2aWNlcy4KLQkJICovCi0JCS50ZXh0Ci0JCS5zZXQJcmVvcmRlcgotbG9jX25vX2lycToJUEFOSUMoIlVuaW1wbGVtZW50ZWQgbG9jX25vX2lycSBoYW5kbGVyIikKLS8qCi0gKiBQYXJhbGxlbCBwb3J0IElSUQotICovCi1sb2NfcGFyYWxsZWw6CWxpCXMxLH5KQVpaX0lFX1BBUkFMTEVMCi0JCWxpCWEwLEpBWlpfUEFSQUxMRUxfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIEZsb3BweSBJUlEKLSAqLwotbG9jX2Zsb3BweToJbGkJczEsfkpBWlpfSUVfRkxPUFBZCi0JCWxpCWEwLEpBWlpfRkxPUFBZX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBTb3VuZCBJUlEKLSAqLwotbG9jX3NvdW5kOglQQU5JQygiVW5pbXBsZW1lbnRlZCBsb2Nfc291bmQgaGFuZGxlciIpCi1sb2NfdmlkZW86CVBBTklDKCJVbmltcGxlbWVudGVkIGxvY192aWRlbyBoYW5kbGVyIikKLQotLyoKLSAqIEV0aGVybmV0IGludGVycnVwdCBoYW5kbGVyCi0gKi8KLWxvY19ldGhlcm5ldDogCWxpCXMxLH5KQVpaX0lFX0VUSEVSTkVUCi0JCWxpCWEwLEpBWlpfRVRIRVJORVRfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIFNDU0kgaW50ZXJydXB0IGhhbmRsZXIKLSAqLwotbG9jX3Njc2k6CWxpCXMxLH5KQVpaX0lFX1NDU0kKLQkJbGkJYTAsSkFaWl9TQ1NJX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBLZXlib2FyZCBpbnRlcnJ1cHQgaGFuZGxlcgotICovCi1sb2Nfa2V5Ym9hcmQ6CWxpCXMxLH5KQVpaX0lFX0tFWUJPQVJECi0JCWxpCWEwLEpBWlpfS0VZQk9BUkRfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIE1vdXNlIGludGVycnVwdCBoYW5kbGVyCi0gKi8KLWxvY19tb3VzZToJbGkJczEsfkpBWlpfSUVfTU9VU0UKLQkJbGkJYTAsSkFaWl9NT1VTRV9JUlEKLQkJYglsb2NfY2FsbAotCi0vKgotICogU2VyaWFsIHBvcnQgMSBJUlEKLSAqLwotbG9jX3NlcmlhbDE6CWxpCXMxLH5KQVpaX0lFX1NFUklBTDEKLQkJbGkJYTAsSkFaWl9TRVJJQUwxX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBTZXJpYWwgcG9ydCAyIElSUQotICovCi1sb2Nfc2VyaWFsMjoJbGkJczEsfkpBWlpfSUVfU0VSSUFMMgotCQlsaQlhMCxKQVpaX1NFUklBTDJfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIENhbGwgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciBhbiBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGJ5IGEKLSAqIGxvY2FsIGRldmljZS4KLSAqLwotbG9jX2NhbGw6CS8qCi0JCSAqIFRlbXBvcmFyaWx5IGRpc2FibGUgaW50ZXJydXB0IHNvdXJjZQotCQkgKi8KLQkJbGh1CXQyLEpBWlpfSU9fSVJRX0VOQUJMRQotCQlhbmQJdDIsczEKLQkJc2gJdDIsSkFaWl9JT19JUlFfRU5BQkxFCi0KLQkJbm9yCXMxLHplcm8sczEKLQkJamFsCWRvX0lSUQotCi0JCS8qCi0JCSAqIFJlZW5hYmxlIGludGVycnVwdAotCQkgKi8KLQkJbGh1CXQyLEpBWlpfSU9fSVJRX0VOQUJMRQotCQlvcgl0MixzMQotCQlzaAl0MixKQVpaX0lPX0lSUV9FTkFCTEUKLQotCQlqCXJldF9mcm9tX2lycQotCi0vKgotICogIkp1bXAgZXh0ZW5kZXIiIHRvIHJlYWNoIHNwdXJpb3VzX2ludGVycnVwdAotICovCi0zOgkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQotLyoKLSAqIFZlY3RvcnMgZm9yIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5IGxvY2FsIGRldmljZXMKLSAqLwotCQkuZGF0YQotbG9jYWxfdmVjdG9yOglQVFIJbG9jX25vX2lycQotCQlQVFIJbG9jX3BhcmFsbGVsCi0JCVBUUglsb2NfZmxvcHB5Ci0JCVBUUglsb2Nfc291bmQKLQkJUFRSCWxvY192aWRlbwotCQlQVFIJbG9jX2V0aGVybmV0Ci0JCVBUUglsb2Nfc2NzaQotCQlQVFIJbG9jX2tleWJvYXJkCi0JCVBUUglsb2NfbW91c2UKLQkJUFRSCWxvY19zZXJpYWwxCi0JCVBUUglsb2Nfc2VyaWFsMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovaXJxLmMgYi9hcmNoL21pcHMvamF6ei9pcnEuYwppbmRleCBiMzA5YjFiLi5iZWNjOWFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9pcnEuYworKysgYi9hcmNoL21pcHMvamF6ei9pcnEuYwpAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9qYXp6Lmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgamF6el9oYW5kbGVfaW50KHZvaWQpOwotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHI0MDMwX2xvY2spOwogCiBzdGF0aWMgdm9pZCBlbmFibGVfcjQwMzBfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC05MCwxMCArODgsODIgQEAKICAqLwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCXNldF9leGNlcHRfdmVjdG9yKDAsIGphenpfaGFuZGxlX2ludCk7Ci0KIAlpbml0X2k4MjU5X2lycXMoKTsJCQkvKiBJbnRlZ3JhdGVkIGk4MjU5ICAqLwogCWluaXRfcjQwMzBfaW50cygpOwogCiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTQgfCBJRV9JUlEzIHwgSUVfSVJRMiB8IElFX0lSUTEpOwogfQorCitzdGF0aWMgdm9pZCBsb2NfY2FsbCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG1hc2spCit7CisJcjQwMzBfd3JpdGVfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFLAorCSAgICAgICAgICAgICAgICAgIHI0MDMwX3JlYWRfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFKSAmIG1hc2spOworCWRvX0lSUShpcnEsIHJlZ3MpOworCXI0MDMwX3dyaXRlX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSwKKwkgICAgICAgICAgICAgICAgICByNDAzMF9yZWFkX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSkgfCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgbGxfbG9jYWxfZGV2KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN3aXRjaCAocjQwMzBfcmVhZF9yZWczMihKQVpaX0lPX0lSUV9TT1VSQ0UpKSB7CisJY2FzZSAwOgorCQlwYW5pYygiVW5pbXBsZW1lbnRlZCBsb2Nfbm9faXJxIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlsb2NfY2FsbChKQVpaX1BBUkFMTEVMX0lSUSwgcmVncywgSkFaWl9JRV9QQVJBTExFTCk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJbG9jX2NhbGwoSkFaWl9QQVJBTExFTF9JUlEsIHJlZ3MsIEpBWlpfSUVfRkxPUFBZKTsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgbG9jX3NvdW5kIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgbG9jX3ZpZGVvIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSAyMDoKKwkJbG9jX2NhbGwoSkFaWl9FVEhFUk5FVF9JUlEsIHJlZ3MsIEpBWlpfSUVfRVRIRVJORVQpOworCQlicmVhazsKKwljYXNlIDI0OgorCQlsb2NfY2FsbChKQVpaX1NDU0lfSVJRLCByZWdzLCBKQVpaX0lFX1NDU0kpOworCQlicmVhazsKKwljYXNlIDI4OgorCQlsb2NfY2FsbChKQVpaX0tFWUJPQVJEX0lSUSwgcmVncywgSkFaWl9JRV9LRVlCT0FSRCk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWxvY19jYWxsKEpBWlpfTU9VU0VfSVJRLCByZWdzLCBKQVpaX0lFX01PVVNFKTsKKwkJYnJlYWs7CisJY2FzZSAzNjoKKwkJbG9jX2NhbGwoSkFaWl9TRVJJQUwxX0lSUSwgcmVncywgSkFaWl9JRV9TRVJJQUwxKTsKKwkJYnJlYWs7CisJY2FzZSA0MDoKKwkJbG9jX2NhbGwoSkFaWl9TRVJJQUwyX0lSUSwgcmVncywgSkFaWl9JRV9TRVJJQUwyKTsKKwkJYnJlYWs7CisJfQorfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCisJaWYgKHBlbmRpbmcgJiBJRV9JUlE1KQorCQl3cml0ZV9jMF9jb21wYXJlKDApOworCWVsc2UgaWYgKHBlbmRpbmcgJiBJRV9JUlE0KSB7CisJCXI0MDMwX3JlYWRfcmVnMzIoSkFaWl9USU1FUl9SRUdJU1RFUik7CisJCWRvX0lSUShKQVpaX1RJTUVSX0lSUSwgcmVncyk7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgSUVfSVJRMykKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgSVNBIE5NSSBoYW5kbGVyIik7CisJZWxzZSBpZiAocGVuZGluZyAmIElFX0lSUTIpCisJCWRvX0lSUShyNDAzMF9yZWFkX3JlZzMyKEpBWlpfRUlTQV9JUlFfQUNLKSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIElFX0lSUTEpIHsKKwkJbGxfbG9jYWxfZGV2KHJlZ3MpOworCX0gZWxzZSBpZiAodW5saWtlbHkocGVuZGluZyAmIElFX0lSUTApKQorCQlwYW5pYygiVW5pbXBsZW1lbnRlZCBsb2NhbF9kbWEgaGFuZGxlciIpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBJRV9TVzEpIHsKKwkJY2xlYXJfYzBfY2F1c2UoSUVfU1cxKTsKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgc3cxIGhhbmRsZXIiKTsKKwl9IGVsc2UgaWYgKHBlbmRpbmcgJiBJRV9TVzApIHsKKwkJY2xlYXJfYzBfY2F1c2UoSUVfU1cwKTsKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgc3cwIGhhbmRsZXIiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9jb21tb24vcnRjX2RzMTc0Mi5jIGIvYXJjaC9taXBzL2ptcjM5MjcvY29tbW9uL3J0Y19kczE3NDIuYwppbmRleCBhNmJkM2Y0Li5lNjU2MTM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvam1yMzkyNy9jb21tb24vcnRjX2RzMTc0Mi5jCisrKyBiL2FyY2gvbWlwcy9qbXIzOTI3L2NvbW1vbi9ydGNfZHMxNzQyLmMKQEAgLTYwLDE1ICs2MCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQlDTU9TX1dSSVRFKFJUQ19SRUFELCBSVENfQ09OVFJPTCk7Ci0Jc2Vjb25kID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7Ci0JbWludXRlID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX01JTlVURVMpKTsKLQlob3VyID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX0hPVVJTKSk7Ci0JZGF5ID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX0RBVEUpKTsKLQltb250aCA9IEJDRDJCSU4oQ01PU19SRUFEKFJUQ19NT05USCkpOwotCXllYXIgPSBCQ0QyQklOKENNT1NfUkVBRChSVENfWUVBUikpOwotCWNlbnR1cnkgPSBCQ0QyQklOKENNT1NfUkVBRChSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLKTsKLQlDTU9TX1dSSVRFKDAsIFJUQ19DT05UUk9MKTsKKwlydGNfd3JpdGUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKKwlzZWNvbmQgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19TRUNPTkRTKSAmIFJUQ19TRUNPTkRTX01BU0spOworCW1pbnV0ZSA9IEJDRDJCSU4ocnRjX3JlYWQoUlRDX01JTlVURVMpKTsKKwlob3VyID0gQkNEMkJJTihydGNfcmVhZChSVENfSE9VUlMpKTsKKwlkYXkgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19EQVRFKSk7CisJbW9udGggPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19NT05USCkpOworCXllYXIgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19ZRUFSKSk7CisJY2VudHVyeSA9IEJDRDJCSU4ocnRjX3JlYWQoUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSyk7CisJcnRjX3dyaXRlKDAsIFJUQ19DT05UUk9MKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJeWVhciArPSBjZW50dXJ5ICogMTAwOwpAQCAtODcsMTYgKzg3LDE2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCUNNT1NfV1JJVEUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKLQljbW9zX3NlY29uZCA9ICh1OCkoQ01PU19SRUFEKFJUQ19TRUNPTkRTKSAmIFJUQ19TRUNPTkRTX01BU0spOwotCWNtb3NfbWludXRlID0gKHU4KUNNT1NfUkVBRChSVENfTUlOVVRFUyk7Ci0JY21vc19ob3VyID0gKHU4KUNNT1NfUkVBRChSVENfSE9VUlMpOwotCWNtb3NfZGF5ID0gKHU4KUNNT1NfUkVBRChSVENfREFURSk7Ci0JY21vc19tb250aCA9ICh1OClDTU9TX1JFQUQoUlRDX01PTlRIKTsKLQljbW9zX3llYXIgPSAodTgpQ01PU19SRUFEKFJUQ19ZRUFSKTsKLQljbW9zX2NlbnR1cnkgPSBDTU9TX1JFQUQoUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSzsKKwlydGNfd3JpdGUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKKwljbW9zX3NlY29uZCA9ICh1OCkocnRjX3JlYWQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7CisJY21vc19taW51dGUgPSAodTgpcnRjX3JlYWQoUlRDX01JTlVURVMpOworCWNtb3NfaG91ciA9ICh1OClydGNfcmVhZChSVENfSE9VUlMpOworCWNtb3NfZGF5ID0gKHU4KXJ0Y19yZWFkKFJUQ19EQVRFKTsKKwljbW9zX21vbnRoID0gKHU4KXJ0Y19yZWFkKFJUQ19NT05USCk7CisJY21vc195ZWFyID0gKHU4KXJ0Y19yZWFkKFJUQ19ZRUFSKTsKKwljbW9zX2NlbnR1cnkgPSBydGNfcmVhZChSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLOwogCi0JQ01PU19XUklURShSVENfV1JJVEUsIFJUQ19DT05UUk9MKTsKKwlydGNfd3JpdGUoUlRDX1dSSVRFLCBSVENfQ09OVFJPTCk7CiAKIAkvKiBjb252ZXJ0ICovCiAJdG9fdG0odCwgJnRtKTsKQEAgLTEwNCwxOCArMTA0LDE4IEBACiAJLyogY2hlY2sgZWFjaCBmaWVsZCBvbmUgYnkgb25lICovCiAJeWVhciA9IEJJTjJCQ0QodG0udG1feWVhciAtIEVQT0NIKTsKIAlpZiAoeWVhciAhPSBjbW9zX3llYXIpIHsKLQkJQ01PU19XUklURSh5ZWFyLFJUQ19ZRUFSKTsKKwkJcnRjX3dyaXRlKHllYXIsUlRDX1lFQVIpOwogCX0KIAogCW1vbnRoID0gQklOMkJDRCh0bS50bV9tb24pOwogCWlmIChtb250aCAhPSAoY21vc19tb250aCAmIDB4MWYpKSB7Ci0JCUNNT1NfV1JJVEUoKG1vbnRoICYgMHgxZikgfCAoY21vc19tb250aCAmIH4weDFmKSxSVENfTU9OVEgpOworCQlydGNfd3JpdGUoKG1vbnRoICYgMHgxZikgfCAoY21vc19tb250aCAmIH4weDFmKSxSVENfTU9OVEgpOwogCX0KIAogCWRheSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CiAJaWYgKGRheSAhPSBjbW9zX2RheSkgewogCi0JCUNNT1NfV1JJVEUoZGF5LCBSVENfREFURSk7CisJCXJ0Y193cml0ZShkYXksIFJUQ19EQVRFKTsKIAl9CiAKIAlpZiAoY21vc19ob3VyICYgMHg0MCkgewpAQCAtMTMwLDIwICsxMzAsMjAgQEAKIAkJLyogMjQgaG91ciBmb3JtYXQgKi8KIAkJaG91ciA9IEJJTjJCQ0QodG0udG1faG91cikgJiAweDNmOwogCX0KLQlpZiAoaG91ciAhPSBjbW9zX2hvdXIpIENNT1NfV1JJVEUoaG91ciwgUlRDX0hPVVJTKTsKKwlpZiAoaG91ciAhPSBjbW9zX2hvdXIpIHJ0Y193cml0ZShob3VyLCBSVENfSE9VUlMpOwogCiAJbWludXRlID0gQklOMkJDRCh0bS50bV9taW4pOwogCWlmIChtaW51dGUgIT0gIGNtb3NfbWludXRlKSB7Ci0JCUNNT1NfV1JJVEUobWludXRlLCBSVENfTUlOVVRFUyk7CisJCXJ0Y193cml0ZShtaW51dGUsIFJUQ19NSU5VVEVTKTsKIAl9CiAKIAlzZWNvbmQgPSBCSU4yQkNEKHRtLnRtX3NlYyk7CiAJaWYgKHNlY29uZCAhPSAgY21vc19zZWNvbmQpIHsKLQkJQ01PU19XUklURShzZWNvbmQgJiBSVENfU0VDT05EU19NQVNLLFJUQ19TRUNPTkRTKTsKKwkJcnRjX3dyaXRlKHNlY29uZCAmIFJUQ19TRUNPTkRTX01BU0ssUlRDX1NFQ09ORFMpOwogCX0KIAogCS8qIFJUQ19DRU5UVVJZIGFuZCBSVENfQ09OVFJPTCBzaGFyZSBzYW1lIGFkZHJlc3MuLi4gKi8KLQlDTU9TX1dSSVRFKGNtb3NfY2VudHVyeSwgUlRDX0NPTlRST0wpOworCXJ0Y193cml0ZShjbW9zX2NlbnR1cnksIFJUQ19DT05UUk9MKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xNjMsOSArMTYzLDkgQEAKIAlydGNfbWlwc19zZXRfdGltZSA9IHJ0Y19kczE3NDJfc2V0X3RpbWU7CiAKIAkvKiBjbGVhciBvc2NpbGxhdG9yIHN0b3AgYml0ICovCi0JQ01PU19XUklURShSVENfUkVBRCwgUlRDX0NPTlRST0wpOwotCWNtb3Nfc2Vjb25kID0gKHU4KShDTU9TX1JFQUQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7Ci0JQ01PU19XUklURShSVENfV1JJVEUsIFJUQ19DT05UUk9MKTsKLQlDTU9TX1dSSVRFKGNtb3Nfc2Vjb25kLCBSVENfU0VDT05EUyk7IC8qIGNsZWFyIG1zYiAqLwotCUNNT1NfV1JJVEUoMCwgUlRDX0NPTlRST0wpOworCXJ0Y193cml0ZShSVENfUkVBRCwgUlRDX0NPTlRST0wpOworCWNtb3Nfc2Vjb25kID0gKHU4KShydGNfcmVhZChSVENfU0VDT05EUykgJiBSVENfU0VDT05EU19NQVNLKTsKKwlydGNfd3JpdGUoUlRDX1dSSVRFLCBSVENfQ09OVFJPTCk7CisJcnRjX3dyaXRlKGNtb3Nfc2Vjb25kLCBSVENfU0VDT05EUyk7IC8qIGNsZWFyIG1zYiAqLworCXJ0Y193cml0ZSgwLCBSVENfQ09OVFJPTCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvTWFrZWZpbGUKaW5kZXggNzViZjQxOC4uYmFmNTA3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIFRPU0hJQkEgSk1SLVRYMzkyNyBib2FyZAogIwogCi1vYmoteQkgCQkJKz0gaW5pdC5vIGludC1oYW5kbGVyLm8gaXJxLm8gc2V0dXAubworb2JqLXkJIAkJCSs9IGluaXQubyBpcnEubyBzZXR1cC5vCiBvYmotJChDT05GSUdfUlVOVElNRV9ERUJVRykgCSs9IGRlYnVnLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYl9pby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NWJiZjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgICAgICBhaGVubmVzc3lAbXZpc3RhLmNvbQotICoKLSAqIEJhc2VkIG9uIGFyY2gvbWlwcy90c2RiL2tlcm5lbC9pbnQtaGFuZGxlci5TCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgVG9zaGliYSBDb3Jwb3JhdGlvbgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2ptcjM5MjcuaD4KLQotCS8qIEEgbG90IG9mIGNvbXBsaWNhdGlvbiBoZXJlIGlzIHRha2VuIGF3YXkgYmVjYXVzZToKLQkgKgotCSAqIDEpIFdlIGhhbmRsZSBvbmUgaW50ZXJydXB0IGFuZCByZXR1cm4sIHNpdHRpbmcgaW4gYSBsb29wCi0JICogICAgYW5kIG1vdmluZyBhY3Jvc3MgYWxsIHRoZSBwZW5kaW5nIElSUSBiaXRzIGluIHRoZSBjYXVzZQotCSAqICAgIHJlZ2lzdGVyIGlzIF9OT1RfIHRoZSBhbnN3ZXIsIHRoZSBjb21tb24gY2FzZSBpcyBvbmUKLQkgKiAgICBwZW5kaW5nIElSUSBzbyBvcHRpbWl6ZSBpbiB0aGF0IGRpcmVjdGlvbi4KLQkgKgotCSAqIDIpIFdlIG5lZWQgbm90IGNoZWNrIGFnYWluc3QgYml0cyBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyCi0JICogICAgSVJRIG1hc2ssIHRoYXQgd291bGQgbWFrZSB0aGlzIHJvdXRpbmUgc2xvdyBhcyBoZWxsLgotCSAqCi0JICogMykgTGludXggb25seSB0aGlua3MgaW4gdGVybXMgb2YgYWxsIElSUXMgb24gb3IgYWxsIElSUXMKLQkgKiAgICBvZmYsIG5vdGhpbmcgaW4gYmV0d2VlbiBsaWtlIEJTRCBzcGwoKSBicmFpbi1kYW1hZ2UuCi0JICoKLQkgKi8KLQotLyogRmx1c2ggd3JpdGUgYnVmZmVyIChuZWVkZWQ/KQotICogTk9URTogVFgzOXh4IHBlcmZvcm1zICJub24tYmxvY2tpbmcgbG9hZCIsIHNvIGV4cGxpY2l0bHkgdXNlIHRoZSB0YXJnZXQKLSAqIHJlZ2lzdGVyIG9mIExCVSB0byBmbHVzaCBpbW1lZGlhdGVseS4KLSAqLwotI2RlZmluZSBGTFVTSF9XQih0bXApCVwKLQlsYQl0bXAsIEpNUjM5MjdfSU9DX1JFVl9BRERSOyBcCi0JbGJ1CXRtcCwgKHRtcCk7IFwKLQltb3ZlCXRtcCwgemVybzsKLQotCS50ZXh0Ci0JLnNldAlub3Jlb3JkZXIKLQkuc2V0CW5vYXQKLQkuYWxpZ24JNQotCU5FU1RFRChqbXIzOTI3X0lSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0JamFsCWptcjM5MjdfaXJjX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCi0JRkxVU0hfV0IodDApCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0JRU5EKGptcjM5MjdfSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2lycS5jIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2lycS5jCmluZGV4IDI4MTA3MjcuLjExMzA0ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pcnEuYworKysgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaXJxLmMKQEAgLTc3LDggKzc3LDYgQEAKIH0KICNlbmRpZgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGptcjM5MjdfSVJRKHZvaWQpOwotCiAjZGVmaW5lIGlyY19kbGV2ZWwJMAogI2RlZmluZSBpcmNfZWxldmVsCTEKIApAQCAtMjYyLDcgKzI2MCw3IEBACiAJICAgICAgIHJlZ3MtPmNwMF9jYXVzZSwgcmVncy0+Y3AwX2VwYywgcmVncy0+cmVnc1szMV0pOwogfQogCi12b2lkIGptcjM5MjdfaXJjX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnE7CiAKQEAgLTM5OCw4ICszOTYsNiBAQAogCiAJam1yMzkyN19pcnFfaW5pdChOUl9JU0FfSVJRUyk7CiAKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBqbXIzOTI3X0lSUSk7Ci0KIAkvKiBzZXR1cCBpcnEgc3BhY2UgKi8KIAlhZGRfdGJfaXJxX3NwYWNlKCZqbXIzOTI3X2lzYWNfaXJxc3BhY2UpOwogCWFkZF90Yl9pcnFfc3BhY2UoJmptcjM5MjdfaW9jX2lycXNwYWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IGYzNmM0ZjIuLjM0ZThhMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzQsOCArMzQsMTEgQEAKIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCiAKLW9iai0kKENPTkZJR19NSVBTX01UX1NNUCkJKz0gc21wX210Lm8KK29iai0kKENPTkZJR19NSVBTX01UKQkJKz0gbWlwcy1tdC5vCitvYmotJChDT05GSUdfTUlQU19NVF9TTVRDKQkrPSBzbXRjLm8gc210Yy1hc20ubyBzbXRjLXByb2Mubworb2JqLSQoQ09ORklHX01JUFNfTVRfU01QKQkrPSBzbXAtbXQubwogCitvYmotJChDT05GSUdfTUlQU19BUFNQX0tTUEQpCSs9IGtzcGQubwogb2JqLSQoQ09ORklHX01JUFNfVlBFX0xPQURFUikJKz0gdnBlLm8KIG9iai0kKENPTkZJR19NSVBTX1ZQRV9BUFNQX0FQSSkJKz0gcnRseC5vCiAKQEAgLTU5LDYgKzYyLDggQEAKIAogb2JqLSQoQ09ORklHXzY0QklUKQkJKz0gY3B1LWJ1Z3M2NC5vCiAKK29iai0kKENPTkZJR19JODI1MykJCSs9IGk4MjUzLm8KKwogQ0ZMQUdTX2NwdS1idWdzNjQubwk9ICQoc2hlbGwgaWYgJChDQykgJChDRkxBR1MpIC1XYSwtbWRhZGRpIC1jIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbiBlY2hvICItREhBVkVfQVNfU0VUX0RBRERJIjsgZmkpCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBjYTZiMDNjLi4wZmFjZmFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC02OSw2ICs2OSw5IEBACiAJb2Zmc2V0KCIjZGVmaW5lIFBUX0JWQUREUiAiLCBzdHJ1Y3QgcHRfcmVncywgY3AwX2JhZHZhZGRyKTsKIAlvZmZzZXQoIiNkZWZpbmUgUFRfU1RBVFVTICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfc3RhdHVzKTsKIAlvZmZzZXQoIiNkZWZpbmUgUFRfQ0FVU0UgICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfY2F1c2UpOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlvZmZzZXQoIiNkZWZpbmUgUFRfVENTVEFUVVMgICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfdGNzdGF0dXMpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlzaXplKCIjZGVmaW5lIFBUX1NJWkUgICAiLCBzdHJ1Y3QgcHRfcmVncyk7CiAJbGluZWZlZWQ7CiB9CkBAIC0yNjksOCArMjcyLDggQEAKIAl0ZXh0KCIvKiBMaW51eCBzaWdjb250ZXh0IG9mZnNldHMuICovIik7CiAJb2Zmc2V0KCIjZGVmaW5lIFNDX1JFR1MgICAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX3JlZ3MpOwogCW9mZnNldCgiI2RlZmluZSBTQ19GUFJFR1MgICAgICIsIHN0cnVjdCBzaWdjb250ZXh0LCBzY19mcHJlZ3MpOwotCW9mZnNldCgiI2RlZmluZSBTQ19NREhJICAgICAgICIsIHN0cnVjdCBzaWdjb250ZXh0LCBzY19oaSk7Ci0Jb2Zmc2V0KCIjZGVmaW5lIFNDX01ETE8gICAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX2xvKTsKKwlvZmZzZXQoIiNkZWZpbmUgU0NfTURISSAgICAgICAiLCBzdHJ1Y3Qgc2lnY29udGV4dCwgc2NfbWRoaSk7CisJb2Zmc2V0KCIjZGVmaW5lIFNDX01ETE8gICAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX21kbG8pOwogCW9mZnNldCgiI2RlZmluZSBTQ19QQyAgICAgICAgICIsIHN0cnVjdCBzaWdjb250ZXh0LCBzY19wYyk7CiAJb2Zmc2V0KCIjZGVmaW5lIFNDX0ZQQ19DU1IgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX2ZwY19jc3IpOwogCWxpbmVmZWVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9icmFuY2guYyBiL2FyY2gvbWlwcy9rZXJuZWwvYnJhbmNoLmMKaW5kZXggMzc0ZGU4My4uYjYyMzJkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9icmFuY2guYworKysgYi9hcmNoL21pcHMva2VybmVsL2JyYW5jaC5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAkJYml0ID0gKGluc24uaV9mb3JtYXQucnQgPj4gMik7CiAJCWJpdCArPSAoYml0ICE9IDApOwogCQliaXQgKz0gMjM7Ci0JCXN3aXRjaCAoaW5zbi5pX2Zvcm1hdC5ydCkgeworCQlzd2l0Y2ggKGluc24uaV9mb3JtYXQucnQgJiAzKSB7CiAJCWNhc2UgMDoJLyogYmMxZiAqLwogCQljYXNlIDI6CS8qIGJjMWZsICovCiAJCQlpZiAofmZjcjMxICYgKDEgPDwgYml0KSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKaW5kZXggNDdhMDg3Yi4uZDI2ODgyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQkiZGFkZGkJJTAsICUxLCAlM1xuXHQiCiAJCSIuc2V0CXBvcCIKIAkJOiAiPXIiICh2KSwgIj0mciIgKHRtcCkKLQkJOiAiSSIgKDB4ZmZmZmZmZmZmZmZmZGI5YSksICJJIiAoMHgxMjM0KSk7CisJCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWFVTCksICJJIiAoMHgxMjM0KSk7CiAJc2V0X2V4Y2VwdF92ZWN0b3IoMTIsIGhhbmRsZXIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMjI0LDcgKzIyNCw3IEBACiAJCSJkc3JsCSUxLCAlMSwgMVxuXHQiCiAJCSJkYWRkaQklMCwgJTEsICUzIgogCQk6ICI9ciIgKHYpLCAiPSZyIiAodG1wKQotCQk6ICJJIiAoMHhmZmZmZmZmZmZmZmZkYjlhKSwgIkkiICgweDEyMzQpKTsKKwkJOiAiSSIgKDB4ZmZmZmZmZmZmZmZmZGI5YVVMKSwgIkkiICgweDEyMzQpKTsKIAlzZXRfZXhjZXB0X3ZlY3RvcigxMiwgaGFuZGxlcik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0yODAsNyArMjgwLDcgQEAKIAkJImRhZGR1CSUxLCAlMlxuXHQiCiAJCSIuc2V0CXBvcCIKIAkJOiAiPSZyIiAodiksICI9JnIiICh3KSwgIj0mciIgKHRtcCkKLQkJOiAiSSIgKDB4ZmZmZmZmZmZmZmZmZGI5YSksICJJIiAoMHgxMjM0KSk7CisJCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWFVTCksICJJIiAoMHgxMjM0KSk7CiAKIAlpZiAodiA9PSB3KSB7CiAJCXByaW50aygibm8uXG4iKTsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQkiYWRkaXUJJTEsICQwLCAlNFxuXHQiCiAJCSJkYWRkdQklMSwgJTIiCiAJCTogIj0mciIgKHYpLCAiPSZyIiAodyksICI9JnIiICh0bXApCi0JCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWEpLCAiSSIgKDB4MTIzNCkpOworCQk6ICJJIiAoMHhmZmZmZmZmZmZmZmZkYjlhVUwpLCAiSSIgKDB4MTIzNCkpOwogCiAJaWYgKHYgPT0gdykgewogCQlwcmludGsoInllcy5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggNThiM2IxNC4uOGMyYzM1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0xMjEsNiArMTIxLDcgQEAKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMjVLRjoKIAljYXNlIENQVV8zNEs6CisJY2FzZSBDUFVfNzRLOgogIAljYXNlIENQVV9QUjQ0NTA6CiAJCWNwdV93YWl0ID0gcjRrX3dhaXQ7CiAJCXByaW50aygiIGF2YWlsYWJsZS5cbiIpOwpAQCAtNDMyLDYgKzQzMywxNSBAQAogCQkgICAgICAgICAgICAgTUlQU19DUFVfTExTQzsKIAkJYy0+dGxic2l6ZSA9IDY0OwogCQlicmVhazsKKwljYXNlIFBSSURfSU1QX1IxNDAwMDoKKwkJYy0+Y3B1dHlwZSA9IENQVV9SMTQwMDA7CisJCWMtPmlzYV9sZXZlbCA9IE1JUFNfQ1BVX0lTQV9JVjsKKwkJYy0+b3B0aW9ucyA9IE1JUFNfQ1BVX1RMQiB8IE1JUFNfQ1BVXzRLX0NBQ0hFIHwgTUlQU19DUFVfNEtFWCB8CisJCSAgICAgICAgICAgICBNSVBTX0NQVV9GUFUgfCBNSVBTX0NQVV8zMkZQUiB8CisJCQkgICAgIE1JUFNfQ1BVX0NPVU5URVIgfCBNSVBTX0NQVV9XQVRDSCB8CisJCSAgICAgICAgICAgICBNSVBTX0NQVV9MTFNDOworCQljLT50bGJzaXplID0gNjQ7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtNTkzLDYgKzYwMyw5IEBACiAJY2FzZSBQUklEX0lNUF8zNEs6CiAJCWMtPmNwdXR5cGUgPSBDUFVfMzRLOwogCQlicmVhazsKKwljYXNlIFBSSURfSU1QXzc0SzoKKwkJYy0+Y3B1dHlwZSA9IENQVV83NEs7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtNjQyLDcgKzY1NSw3IEBACiAJY2FzZSBQUklEX0lNUF9TQjE6CiAJCWMtPmNwdXR5cGUgPSBDUFVfU0IxOwogCQkvKiBGUFUgaW4gcGFzczEgaXMga25vd24gdG8gaGF2ZSBpc3N1ZXMuICovCi0JCWlmICgoYy0+cHJvY2Vzc29yX2lkICYgMHhmZikgPCAweDIwKQorCQlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYpIDwgMHgwMikKIAkJCWMtPm9wdGlvbnMgJj0gfihNSVBTX0NQVV9GUFUgfCBNSVBTX0NQVV8zMkZQUik7CiAJCWJyZWFrOwogCWNhc2UgUFJJRF9JTVBfU0IxQToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUwppbmRleCA4M2M4N2ZlLi5hOWM2ZGUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TCkBAIC0xNyw2ICsxNyw5IEBACiAjaW5jbHVkZSA8YXNtL2lzYWRlcC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS93YXIuaD4KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIAkubWFjcm8JcHJlZW1wdF9zdG9wCkBAIC03NSw2ICs3OCwzNyBAQAogCWJuZXoJdDAsIHN5c2NhbGxfZXhpdF93b3JrCiAKIEZFWFBPUlQocmVzdG9yZV9hbGwpCQkJIyByZXN0b3JlIGZ1bGwgZnJhbWUKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisvKiBEZXRlY3QgYW5kIGV4ZWN1dGUgZGVmZXJyZWQgSVBJICJpbnRlcnJ1cHRzIiAqLworCW1vdmUJYTAsc3AKKwlqYWwJZGVmZXJyZWRfc210Y19pcGkKKy8qIFJlLWFybSBhbnkgdGVtcG9yYXJpbHkgbWFza2VkIGludGVycnVwdHMgbm90IGV4cGxpY2l0bHkgImFja2VkIiAqLworCW1mYzAJdjAsIENQMF9UQ1NUQVRVUworCW9yaQl2MSwgdjAsIFRDU1RBVFVTX0lYTVQKKwltdGMwCXYxLCBDUDBfVENTVEFUVVMKKwlhbmRpCXYwLCBUQ1NUQVRVU19JWE1UCisJZWhiCisJbWZjMAl0MCwgQ1AwX1RDQ09OVEVYVAorCURNVAk5CQkJCSMgZG10IHQxCisJamFsCW1pcHNfaWhiCisJbWZjMAl0MiwgQ1AwX1NUQVRVUworCWFuZGkJdDMsIHQwLCAweGZmMDAKKwlvcgl0MiwgdDIsIHQzCisJbXRjMAl0MiwgQ1AwX1NUQVRVUworCWVoYgorCWFuZGkJdDEsIHQxLCBWUEVDT05UUk9MX1RFCisJYmVxegl0MSwgMWYKKwlFTVQKKzE6CisJbWZjMAl2MSwgQ1AwX1RDU1RBVFVTCisJLyogV2Ugc2V0IElYTVQgYWJvdmUsIFhPUiBzaG91bGQgY2xlYXIgaXQgaGVyZSAqLworCXhvcmkJdjEsIHYxLCBUQ1NUQVRVU19JWE1UCisJb3IJdjEsIHYwLCB2MQorCW10YzAJdjEsIENQMF9UQ1NUQVRVUworCWVoYgorCXhvcgl0MCwgdDAsIHQzCisJbXRjMAl0MCwgQ1AwX1RDQ09OVEVYVAorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkuc2V0CW5vYXQKIAlSRVNUT1JFX1RFTVAKIAlSRVNUT1JFX0FUCkBAIC0xMjAsMjggKzE1NCwxNyBAQAogCWphbAlkb19zeXNjYWxsX3RyYWNlCiAJYglyZXN1bWVfdXNlcnNwYWNlCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX01UKQorCiAvKgotICogQ29tbW9uIHNwdXJpb3VzIGludGVycnVwdCBoYW5kbGVyLgorICogTUlQUzMyUjIgSW5zdHJ1Y3Rpb24gSGF6YXJkIEJhcnJpZXIgLSBtdXN0IGJlIGNhbGxlZAorICoKKyAqIEZvciBDIGNvZGUgdXNlIHRoZSBpbmxpbmUgdmVyc2lvbiBuYW1lZCBpbnN0cnVjdGlvbl9oYXphcmQoKS4KICAqLwotTEVBRihzcHVyaW91c19pbnRlcnJ1cHQpCi0JLyoKLQkgKiBTb21lb25lIHRyaWVkIHRvIGZvb2wgdXMgYnkgc2VuZGluZyBhbiBpbnRlcnJ1cHQgYnV0IHdlCi0JICogY291bGRuJ3QgZmluZCBhIGNhdXNlIGZvciBpdC4KLQkgKi8KLQlQVFJfTEEJdDEsIGlycV9lcnJfY291bnQKLSNpZmRlZiBDT05GSUdfU01QCi0xOglsbCAgICAgIHQwLCAodDEpCi0JYWRkaXUgICB0MCwgMQotCXNjICAgICAgdDAsICh0MSkKLSNpZiBSMTAwMDBfTExTQ19XQVIKLQliZXF6bAl0MCwgMWIKLSNlbHNlCi0JYmVxegl0MCwgMWIKLSNlbmRpZgotI2Vsc2UKLQlsdyAgICAgIHQwLCAodDEpCi0JYWRkaXUgICB0MCwgMQotCXN3ICAgICAgdDAsICh0MSkKLSNlbmRpZgotCWoJcmV0X2Zyb21faXJxCi0JRU5EKHNwdXJpb3VzX2ludGVycnVwdCkKK0xFQUYobWlwc19paGIpCisJLnNldAltaXBzMzJyMgorCWpyLmhiCXJhCisJbm9wCisJRU5EKG1pcHNfaWhiKQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9NSVBTUjIgb3IgQ09ORklHX01JUFNfTVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLWxvdy5TIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKaW5kZXggMjM1YWQ5Zi4uNWZkN2E4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKQEAgLTU0LDkgKzU0LDExIEBACiAJCSAqLwogCQltZmMwCWswLCBDUDBfQ0FVU0UKIAkJYW5kaQlrMCwgazAsIDB4N2MKLQkJYWRkCWsxLCBrMSwgazAKLQkJUFRSX0wJazAsIHNhdmVkX3ZlY3RvcnMoazEpCi0JCWpyCWswCisjaWZkZWYgQ09ORklHXzY0QklUCisJCWRzbGwJazAsIGswLCAxCisjZW5kaWYKKwkJUFRSX0wJazEsIHNhdmVkX3ZlY3RvcnMoazApCisJCWpyCWsxCiAJCW5vcAogMToKIAkJbW92ZQlrMCwgc3AKQEAgLTI4MywxMSArMjg1LDMzIEBACiAgKi8KIAogMzoKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS8qIFJlYWQtbW9kaWZ5IHdyaXRlIG9mIFN0YXR1cyBtdXN0IGJlIGF0b21pYyAqLworCQltZmMwCXQyLCBDUDBfVENTVEFUVVMKKwkJb3JpCXQxLCB0MiwgVENTVEFUVVNfSVhNVAorCQltdGMwCXQxLCBDUDBfVENTVEFUVVMKKwkJYW5kaQl0MiwgdDIsIFRDU1RBVFVTX0lYTVQKKwkJZWhiCisJCURNVAk5CQkJCSMgZG10CXQxCisJCWphbAltaXBzX2loYgorCQlub3AKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCW1mYzAJdDAsIENQMF9TVEFUVVMKIAkJb3JpCXQwLCAweDFmCiAJCXhvcmkJdDAsIDB4MWYKIAkJbXRjMAl0MCwgQ1AwX1NUQVRVUwotCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworICAgICAgICAJYW5kaSAgICB0MSwgdDEsIFZQRUNPTlRST0xfVEUKKyAgICAgICAgCWJlcXogICAgdDEsIDlmCisJCW5vcAorICAgICAgICAJRU1UCQkJCQkjIGVtdAorOToKKwkJbWZjMAl0MSwgQ1AwX1RDU1RBVFVTCisJCXhvcmkJdDEsIHQxLCBUQ1NUQVRVU19JWE1UCisJCW9yCXQxLCB0MSwgdDIKKwkJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCisJCWVoYgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJTE9OR19MCXYwLCBHREJfRlJfU1RBVFVTKHNwKQogCQlMT05HX0wJdjEsIEdEQl9GUl9FUEMoc3ApCiAJCW10YzAJdjAsIENQMF9TVEFUVVMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYwppbmRleCBkNGY4OGUwLi42ZWNiZGMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2dkYi1zdHViLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItc3R1Yi5jCkBAIC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+CiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKIC8qCiAgKiBleHRlcm5hbCBsb3ctbGV2ZWwgc3VwcG9ydCByb3V0aW5lcwpAQCAtNjY5LDYgKzY3MCw2NCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorLyoKKyAqIEdEQiBzdHViIG5lZWRzIHRvIGNhbGwga2dkYl93YWl0IG9uIGFsbCBwcm9jZXNzb3Igd2l0aCBpbnRlcnJ1cHRzCisgKiBkaXNhYmxlZCwgc28gaXQgdXNlcyBpdCdzIG93biBzcGVjaWFsIHZhcmlhbnQuCisgKi8KK3N0YXRpYyBpbnQga2dkYl9zbXBfY2FsbF9rZ2RiX3dhaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgZGF0YTsKKwlpbnQgaSwgY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiBDYW4gZGllIHNwZWN0YWN1bGFybHkgaWYgdGhpcyBDUFUgaXNuJ3QgeWV0IG1hcmtlZCBvbmxpbmUKKwkgKi8KKwlCVUdfT04oIWNwdV9vbmxpbmUoY3B1KSk7CisKKwlpZiAoIWNwdXMpCisJCXJldHVybiAwOworCisJaWYgKHNwaW5faXNfbG9ja2VkKCZzbXBfY2FsbF9sb2NrKSkgeworCQkvKgorCQkgKiBTb21lIG90aGVyIHByb2Nlc3NvciBpcyB0cnlpbmcgdG8gbWFrZSB1cyBkbyBzb21ldGhpbmcKKwkJICogYnV0IHdlJ3JlIG5vdCBnb2luZyB0byByZXNwb25kLi4uIGdpdmUgdXAKKwkJICovCisJCXJldHVybiAtMTsKKwkJfQorCisJLyoKKwkgKiBXZSB3aWxsIGNvbnRpbnVlIGhlcmUsIGFjY2VwdGluZyB0aGUgZmFjdCB0aGF0CisJICogdGhlIGtlcm5lbCBtYXkgZGVhZGxvY2sgaWYgYW5vdGhlciBDUFUgYXR0ZW1wdHMKKwkgKiB0byBjYWxsIHNtcF9jYWxsX2Z1bmN0aW9uIG5vdy4uLgorCSAqLworCisJZGF0YS5mdW5jID0ga2dkYl93YWl0OworCWRhdGEuaW5mbyA9IE5VTEw7CisJYXRvbWljX3NldCgmZGF0YS5zdGFydGVkLCAwKTsKKwlkYXRhLndhaXQgPSAwOworCisJc3Bpbl9sb2NrKCZzbXBfY2FsbF9sb2NrKTsKKwljYWxsX2RhdGEgPSAmZGF0YTsKKwltYigpOworCisJLyogU2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG90aGVyIENQVXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gcmVzcG9uZCAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCisJCWlmIChjcHVfb25saW5lKGkpICYmIGkgIT0gY3B1KQorCQkJY29yZV9zZW5kX2lwaShpLCBTTVBfQ0FMTF9GVU5DVElPTik7CisKKwkvKiBXYWl0IGZvciByZXNwb25zZSAqLworCS8qIEZJWE1FOiBsb2NrLXVwIGRldGVjdGlvbiwgYmFja3RyYWNlIG9uIGxvY2stdXAgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuc3RhcnRlZCkgIT0gY3B1cykKKwkJYmFycmllcigpOworCisJY2FsbF9kYXRhID0gTlVMTDsKKwlzcGluX3VubG9jaygmc21wX2NhbGxfbG9jayk7CisjZW5kaWYKKworCXJldHVybiAwOworfQogCiAvKgogICogVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBjb21tYW5kIHByb2Nlc3NpbmcgZm9yIGludGVyZmFjaW5nIHRvIGdkYi4gIEl0CkBAIC03MTgsNyArNzc3LDcgQEAKIAkvKgogCSAqIGZvcmNlIG90aGVyIGNwdXMgdG8gZW50ZXIga2dkYgogCSAqLwotCXNtcF9jYWxsX2Z1bmN0aW9uKGtnZGJfd2FpdCwgTlVMTCwgMCwgMCk7CisJa2dkYl9zbXBfY2FsbF9rZ2RiX3dhaXQoKTsKIAogCS8qCiAJICogSWYgd2UncmUgaW4gYnJlYWtwb2ludCgpIGluY3JlbWVudCB0aGUgUEMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2VuZXguUyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2VuZXguUwppbmRleCAxM2YyMmQxLi5mZjdhZjM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2dlbmV4LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZW5leC5TCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZW9wcy5oPgogI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KICNpbmNsdWRlIDxhc20vZnByZWdkZWYuaD4KQEAgLTEyMiw2ICsxMjMsMjAgQEAKIAkuc2V0CXBvcAogCUVORChleGNlcHRfdmVjM19yNDAwMCkKIAorCV9fRklOSVQKKworCS5hbGlnbiAgNQorTkVTVEVEKGhhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQorCVNBVkVfQUxMCisJQ0xJCisKKwlQVFJfTEEJcmEsIHJldF9mcm9tX2lycQorCW1vdmUJYTAsIHNwCisJaglwbGF0X2lycV9kaXNwYXRjaAorCUVORChoYW5kbGVfaW50KQorCisJX19JTklUCisKIC8qCiAgKiBTcGVjaWFsIGludGVycnVwdCB2ZWN0b3IgZm9yIE1JUFM2NCBJU0EgJiBlbWJlZGRlZCBNSVBTIHByb2Nlc3NvcnMuCiAgKiBUaGlzIGlzIGEgZGVkaWNhdGVkIGludGVycnVwdCBleGNlcHRpb24gdmVjdG9yIHdoaWNoIHJlZHVjZXMgdGhlCkBAIC0xNTcsNiArMTcyLDE1IEBACiAJU0FWRV9BVAogCS5zZXQJcHVzaAogCS5zZXQJbm9yZW9yZGVyCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qCisJICogVG8ga2VlcCBmcm9tIGJsaW5kbHkgYmxvY2tpbmcgKmFsbCogaW50ZXJydXB0cworCSAqIGR1cmluZyBzZXJ2aWNlIGJ5IFNNVEMga2VybmVsLCB3ZSBhbHNvIHdhbnQgdG8KKwkgKiBwYXNzIHRoZSBJTSB2YWx1ZSB0byBiZSBjbGVhcmVkLgorCSAqLworRVhQT1JUKGV4Y2VwdF92ZWNfdmlfbW9yaSkKKwlvcmkJYTAsICQwLCAwCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogRVhQT1JUKGV4Y2VwdF92ZWNfdmlfbHVpKQogCWx1aQl2MCwgMAkJLyogUGF0Y2hlZCAqLwogCWoJZXhjZXB0X3ZlY192aV9oYW5kbGVyCkBAIC0xNzMsNiArMTk3LDI1IEBACiBORVNURUQoZXhjZXB0X3ZlY192aV9oYW5kbGVyLCAwLCBzcCkKIAlTQVZFX1RFTVAKIAlTQVZFX1NUQVRJQworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIFNNVEMgaGFzIGFuIGludGVyZXN0aW5nIHByb2JsZW0gdGhhdCBpbnRlcnJ1cHRzIGFyZSBsZXZlbC10cmlnZ2VyZWQsCisJICogYW5kIHRoZSBDTEkgbWFjcm8gd2lsbCBjbGVhciBFWEwsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBkdXBsaWNhdGUKKwkgKiBpbnRlcnJ1cHQgc2VydmljZSBpbnZvY2F0aW9uLiBTbyB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBhc3NvY2lhdGVkCisJICogSU0gYml0IG9mIFN0YXR1cyBwcmlvciB0byBkb2luZyBDTEksIGFuZCByZXN0b3JlIGl0IGFmdGVyIHRoZQorCSAqIHNlcnZpY2Ugcm91dGluZSBoYXMgYmVlbiBpbnZva2VkIC0gd2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUKKwkgKiBzZXJ2aWNlIHJvdXRpbmUgd2lsbCBoYXZlIGNsZWFyZWQgdGhlIHN0YXRlLCBhbmQgYW55IGFjdGl2ZQorCSAqIGxldmVsIHJlcHJlc2VudHMgYSBuZXcgb3Igb3RoZXJ3aXNlZCB1bnNlcnZpY2VkIGV2ZW50Li4uCisJICovCisJbWZjMAl0MSwgQ1AwX1NUQVRVUworCWFuZAl0MCwgYTAsIHQxCisJbWZjMAl0MiwgQ1AwX1RDQ09OVEVYVAorCW9yCXQwLCB0MCwgdDIKKwltdGMwCXQwLCBDUDBfVENDT05URVhUCisJeG9yCXQxLCB0MSwgdDAKKwltdGMwCXQxLCBDUDBfU1RBVFVTCisJZWhiCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCUNMSQogCW1vdmUJYTAsIHNwCiAJamFscgl2MApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwppbmRleCAyZTkxMjJhLi5iZGY2ZjZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KICNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KQEAgLTgyLDEyICs4MywzMyBAQAogCSAqLwogCS5tYWNybwlzZXR1cF9jMF9zdGF0dXMgc2V0IGNscgogCS5zZXQJcHVzaAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIEZvciBTTVRDLCB3ZSBuZWVkIHRvIHNldCBwcml2aWxlZ2UgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbmx5IGZvcgorCSAqIHRoZSBjdXJyZW50IFRDLCB1c2luZyB0aGUgVENTdGF0dXMgcmVnaXN0ZXIuCisJICovCisJbWZjMAl0MCwgQ1AwX1RDU1RBVFVTCisJLyogRm9ydHVuYXRlbHkgQ1UgMCBpcyBpbiB0aGUgc2FtZSBwbGFjZSBpbiBib3RoIHJlZ2lzdGVycyAqLworCS8qIFNldCBUQ1UwLCBUTVgsIFRLU1UgKGZvciBsYXRlciBpbnZlcnNpb24pIGFuZCBJWE1UICovCisJbGkJdDEsIFNUMF9DVTAgfCAweDA4MDAxYzAwCisJb3IJdDAsIHQxCisJLyogQ2xlYXIgVEtTVSwgbGVhdmUgSVhNVCAqLworCXhvcmkJdDAsIDB4MDAwMDE4MDAKKwltdGMwCXQwLCBDUDBfVENTVEFUVVMKKwllaGIKKwkvKiBXZSBuZWVkIHRvIGxlYXZlIHRoZSBnbG9iYWwgSUUgYml0IHNldCwgYnV0IGNsZWFyIEVYTC4uLiovCisJbWZjMAl0MCwgQ1AwX1NUQVRVUworCW9yCXQwLCBTVDBfQ1UwIHwgU1QwX0VYTCB8IFNUMF9FUkwgfCBcc2V0IHwgXGNscgorCXhvcgl0MCwgU1QwX0VYTCB8IFNUMF9FUkwgfCBcY2xyCisJbXRjMAl0MCwgQ1AwX1NUQVRVUworI2Vsc2UKIAltZmMwCXQwLCBDUDBfU1RBVFVTCiAJb3IJdDAsIFNUMF9DVTB8XHNldHwweDFmfFxjbHIKIAl4b3IJdDAsIDB4MWZ8XGNscgogCW10YzAJdDAsIENQMF9TVEFUVVMKIAkuc2V0CW5vcmVvcmRlcgogCXNsbAl6ZXJvLDMJCQkJIyBlaGIKKyNlbmRpZgogCS5zZXQJcG9wCiAJLmVuZG0KIApAQCAtMTM0LDYgKzE1NiwyNCBAQAogCiAJQVJDNjRfVFdJRERMRV9QQwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qCisJICogSW4gU01UQyBrZXJuZWwsICJDTEkiIGlzIHRocmVhZC1zcGVjaWZpYywgaW4gVENTdGF0dXMuCisJICogV2Ugc3RpbGwgbmVlZCB0byBlbmFibGUgaW50ZXJydXB0cyBnbG9iYWxseSBpbiBTdGF0dXMsCisJICogYW5kIGNsZWFyIEVYTC9FUkwuCisJICoKKwkgKiBUQ0NvbnRleHQgaXMgdXNlZCB0byB0cmFjayBpbnRlcnJ1cHQgbGV2ZWxzIHVuZGVyCisJICogc2VydmljZSBpbiBTTVRDIGtlcm5lbC4gQ2xlYXIgZm9yIGJvb3QgVEMgYmVmb3JlCisJICogYWxsb3dpbmcgYW55IGludGVycnVwdHMuCisJICovCisJbXRjMAl6ZXJvLCBDUDBfVENDT05URVhUCisKKwltZmMwCXQwLCBDUDBfU1RBVFVTCisJb3JpCXQwLCB0MCwgMHhmZjFmCisJeG9yaQl0MCwgdDAsIDB4MDAxZQorCW10YzAJdDAsIENQMF9TVEFUVVMKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAlQVFJfTEEJCXQwLCBfX2Jzc19zdGFydAkJIyBjbGVhciAuYnNzCiAJTE9OR19TCQl6ZXJvLCAodDApCiAJUFRSX0xBCQl0MSwgX19ic3Nfc3RvcCAtIExPTkdTSVpFCkBAIC0xNjYsOCArMjA2LDI1IEBACiAgKiBmdW5jdGlvbiBhZnRlciBzZXR0aW5nIHVwIHRoZSBzdGFjayBhbmQgZ3AgcmVnaXN0ZXJzLgogICovCiBORVNURUQoc21wX2Jvb3RzdHJhcCwgMTYsIHNwKQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIFJlYWQtbW9kaWZ5LXdyaXRlcyBvZiBTdGF0dXMgbXVzdCBiZSBhdG9taWMsIGFuZCB0aGlzCisJICogaXMgb25lIGNhc2Ugd2hlcmUgQ0xJIGlzIGludm9rZWQgd2l0aG91dCBFWEwgYmVpbmcKKwkgKiBuZWNlc3NhcmlseSBzZXQuIFRoZSBDTEkgYW5kIHNldHVwX2MwX3N0YXR1cyB3aWxsCisJICogaW4gZmFjdCBiZSByZWR1bmRhbnQgZm9yIGFsbCBidXQgdGhlIGZpcnN0IFRDIG9mCisJICogZWFjaCBWUEUgYmVpbmcgYm9vdGVkLgorCSAqLworCURNVAkxMAkjIGRtdCB0MiAvKiB0MCwgdDEgYXJlIHVzZWQgYnkgQ0xJIGFuZCBzZXR1cF9jMF9zdGF0dXMoKSAqLworCWphbAltaXBzX2loYgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlzZXR1cF9jMF9zdGF0dXNfc2VjCiAJc21wX3NsYXZlX3NldHVwCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWFuZGkJdDIsIHQyLCBWUEVDT05UUk9MX1RFCisJYmVxegl0MiwgMmYKKwlFTVQJCSMgZW10CisyOgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlqCXN0YXJ0X3NlY29uZGFyeQogCUVORChzbXBfYm9vdHN0cmFwKQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzVkZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKgorICogSW1wbGVtZW50cyBkZXZpY2UgaW5mb3JtYXRpb24gZm9yIGk4MjUzIHRpbWVyIGNoaXAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitzdGF0aWMgX19pbml0IGludCBhZGRfcGNzcGtyKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldDsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwY3Nwa3IiLCAtMSk7CisJaWYgKCFwZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKKworCXJldHVybiByZXQ7Cit9CitkZXZpY2VfaW5pdGNhbGwoYWRkX3Bjc3Brcik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKaW5kZXggYjk3NGFjOS4uMjEyNWJhNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwpAQCAtMTg3LDYgKzE4NywxMCBAQAogCQlvdXRiKGNhY2hlZF8yMSwweDIxKTsKIAkJb3V0YigweDYwK2lycSwweDIwKTsJLyogJ1NwZWNpZmljIEVPSScgdG8gbWFzdGVyICovCiAJfQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyAgICAgICAgaWYgKGlycV9od21hc2tbaXJxXSAmIFNUMF9JTSkKKyAgICAgICAgCXNldF9jMF9zdGF0dXMoaXJxX2h3bWFza1tpcnFdICYgU1QwX0lNKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCmluZGV4IDNmNjUzYzcuLjk3ZWJkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYwpAQCAtNzYsNiArNzYsMTEgQEAKIAltYXNrX21zY19pcnEoaXJxKTsKIAlpZiAoIWNwdV9oYXNfdmVpYykKIAkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfRU9JLCAwKTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyogVGhpcyBhY3R1YWxseSBuZWVkcyB0byBiZSBhIGNhbGwgaW50byBwbGF0Zm9ybSBjb2RlICovCisJaWYgKGlycV9od21hc2tbaXJxXSAmIFNUMF9JTSkKKwkJc2V0X2MwX3N0YXR1cyhpcnFfaHdtYXNrW2lycV0gJiBTVDBfSU0pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIH0KIAogLyoKQEAgLTkyLDYgKzk3LDEwIEBACiAJCU1TQ0lDX1dSSVRFKE1TQzAxX0lDX1NVUCtpcnEqOCwgciB8IH5NU0MwMV9JQ19TVVBfRURHRV9CSVQpOwogCQlNU0NJQ19XUklURShNU0MwMV9JQ19TVVAraXJxKjgsIHIpOwogCX0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJaWYgKGlycV9od21hc2tbaXJxXSAmIFNUMF9JTSkKKwkJc2V0X2MwX3N0YXR1cyhpcnFfaHdtYXNrW2lycV0gJiBTVDBfSU0pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IDNkZDc2YjMuLjNkY2U3NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtMzgsNiArMzgsMTUgQEAKIAogYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBTTVRDIEtlcm5lbCBuZWVkcyB0byBtYW5pcHVsYXRlIGxvdy1sZXZlbCBDUFUgaW50ZXJydXB0IG1hc2sKKyAqIGluIGRvX0lSUS4gVGhlc2UgYXJlIHBhc3NlZCBpbiBzZXR1cF9pcnFfc210YygpIGFuZCBzdG9yZWQKKyAqIGluIHRoaXMgdGFibGUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgaXJxX2h3bWFza1tOUl9JUlFTXTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKICN1bmRlZiBkb19JUlEKIAogLyoKQEAgLTQ5LDYgKzU4LDcgQEAKIHsKIAlpcnFfZW50ZXIoKTsKIAorCV9fRE9fSVJRX1NNVENfSE9PSygpOwogCV9fZG9fSVJRKGlycSwgcmVncyk7CiAKIAlpcnFfZXhpdCgpOwpAQCAtMTAxLDYgKzExMSwxMSBAQAogCXJldHVybiAwOwogfQogCithc21saW5rYWdlIHZvaWQgc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOworfQorCiAjaWZkZWYgQ09ORklHX0tHREIKIGV4dGVybiB2b2lkIGJyZWFrcG9pbnQodm9pZCk7CiBleHRlcm4gdm9pZCBzZXRfZGVidWdfdHJhcHModm9pZCk7CkBAIC0xMjQsNiArMTM5LDkgQEAKIAkJaXJxX2Rlc2NbaV0uZGVwdGggICA9IDE7CiAJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmbm9faXJxX3R5cGU7CiAJCXNwaW5fbG9ja19pbml0KCZpcnFfZGVzY1tpXS5sb2NrKTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCWlycV9od21hc2tbaV0gPSAwOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAl9CiAKIAlhcmNoX2luaXRfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2tzcGQuYyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmExNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL2tzcGQuYwpAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL3ZwZS5oPgorI2luY2x1ZGUgPGFzbS9ydGx4Lmg+CisjaW5jbHVkZSA8YXNtL2tzcGQuaD4KKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWUgPSBOVUxMOworc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVfa2h6OworCitzdHJ1Y3QgbXRzcF9zeXNjYWxsIHsKKwlpbnQgY21kOworCXVuc2lnbmVkIGNoYXIgYWJpOworCXVuc2lnbmVkIGNoYXIgc2l6ZTsKK307CisKK3N0cnVjdCBtdHNwX3N5c2NhbGxfcmV0IHsKKwlpbnQgcmV0dmFsOworCWludCBlcnJubzsKK307CisKK3N0cnVjdCBtdHNwX3N5c2NhbGxfZ2VuZXJpYyB7CisJaW50IGFyZzA7CisJaW50IGFyZzE7CisJaW50IGFyZzI7CisJaW50IGFyZzM7CisJaW50IGFyZzQ7CisJaW50IGFyZzU7CisJaW50IGFyZzY7Cit9OworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBrc3BkX25vdGlmeWxpc3Q7CitzdGF0aWMgaW50IHNwX3N0b3BwaW5nID0gMDsKKworLyogdGhlc2Ugc2hvdWxkIG1hdGNoIHdpdGggdGhvc2UgaW4gdGhlIFNERSBraXQgKi8KKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0JBU0UJMAorI2RlZmluZSBNVFNQX1NZU0NBTExfRVhJVAkoTVRTUF9TWVNDQUxMX0JBU0UgKyAwKQorI2RlZmluZSBNVFNQX1NZU0NBTExfT1BFTgkoTVRTUF9TWVNDQUxMX0JBU0UgKyAxKQorI2RlZmluZSBNVFNQX1NZU0NBTExfUkVBRAkoTVRTUF9TWVNDQUxMX0JBU0UgKyAyKQorI2RlZmluZSBNVFNQX1NZU0NBTExfV1JJVEUJKE1UU1BfU1lTQ0FMTF9CQVNFICsgMykKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0NMT1NFCShNVFNQX1NZU0NBTExfQkFTRSArIDQpCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9MU0VFSzMyCShNVFNQX1NZU0NBTExfQkFTRSArIDUpCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9JU0FUVFkJKE1UU1BfU1lTQ0FMTF9CQVNFICsgNikKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0dFVFRJTUUJKE1UU1BfU1lTQ0FMTF9CQVNFICsgNykKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX1BJUEVGUkVRCShNVFNQX1NZU0NBTExfQkFTRSArIDgpCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9HRVRUT0QJKE1UU1BfU1lTQ0FMTF9CQVNFICsgOSkKKworI2RlZmluZSBNVFNQX09fUkRPTkxZCQkweDAwMDAKKyNkZWZpbmUgTVRTUF9PX1dST05MWQkJMHgwMDAxCisjZGVmaW5lIE1UU1BfT19SRFdSCQkweDAwMDIKKyNkZWZpbmUgTVRTUF9PX05PTkJMT0NLCQkweDAwMDQKKyNkZWZpbmUgTVRTUF9PX0FQUEVORAkJMHgwMDA4CisjZGVmaW5lIE1UU1BfT19TSExPQ0sJCTB4MDAxMAorI2RlZmluZSBNVFNQX09fRVhMT0NLCQkweDAwMjAKKyNkZWZpbmUgTVRTUF9PX0FTWU5DCQkweDAwNDAKKyNkZWZpbmUgTVRTUF9PX0ZTWU5DCQlPX1NZTkMKKyNkZWZpbmUgTVRTUF9PX05PRk9MTE9XCQkweDAxMDAKKyNkZWZpbmUgTVRTUF9PX1NZTkMJCTB4MDA4MAorI2RlZmluZSBNVFNQX09fQ1JFQVQJCTB4MDIwMAorI2RlZmluZSBNVFNQX09fVFJVTkMJCTB4MDQwMAorI2RlZmluZSBNVFNQX09fRVhDTAkJMHgwODAwCisjZGVmaW5lIE1UU1BfT19CSU5BUlkJCTB4ODAwMAorCisjZGVmaW5lIFNQX1ZQRSAxCisKK3N0cnVjdCBhcHNwX3RhYmxlICB7CisJaW50IHNwOworCWludCBhcDsKK307CisKKy8qIHdlIG1pZ2h0IHdhbnQgdG8gZG8gdGhlIG1vZGUgZmxhZ3MgdG9vICovCitzdHJ1Y3QgYXBzcF90YWJsZSBvcGVuX2ZsYWdzX3RhYmxlW10gPSB7CisJeyBNVFNQX09fUkRXUiwgT19SRFdSIH0sCisJeyBNVFNQX09fV1JPTkxZLCBPX1dST05MWSB9LAorCXsgTVRTUF9PX0NSRUFULCBPX0NSRUFUIH0sCisJeyBNVFNQX09fVFJVTkMsIE9fVFJVTkMgfSwKKwl7IE1UU1BfT19OT05CTE9DSywgT19OT05CTE9DSyB9LAorCXsgTVRTUF9PX0FQUEVORCwgT19BUFBFTkQgfSwKKwl7IE1UU1BfT19OT0ZPTExPVywgT19OT0ZPTExPVyB9Cit9OworCitzdHJ1Y3QgYXBzcF90YWJsZSBzeXNjYWxsX2NvbW1hbmRfdGFibGVbXSA9IHsKKwl7IE1UU1BfU1lTQ0FMTF9PUEVOLCBfX05SX29wZW4gfSwKKwl7IE1UU1BfU1lTQ0FMTF9DTE9TRSwgX19OUl9jbG9zZSB9LAorCXsgTVRTUF9TWVNDQUxMX1JFQUQsIF9fTlJfcmVhZCB9LAorCXsgTVRTUF9TWVNDQUxMX1dSSVRFLCBfX05SX3dyaXRlIH0sCisJeyBNVFNQX1NZU0NBTExfTFNFRUszMiwgX19OUl9sc2VlayB9Cit9OworCitzdGF0aWMgaW50IHNwX3N5c2NhbGwoaW50IG51bSwgaW50IGFyZzAsIGludCBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMpCit7CisJcmVnaXN0ZXIgbG9uZyBpbnQgX251bSAgX19hc21fXyAoIiQyIikgPSBudW07CisJcmVnaXN0ZXIgbG9uZyBpbnQgX2FyZzAgIF9fYXNtX18gKCIkNCIpID0gYXJnMDsKKwlyZWdpc3RlciBsb25nIGludCBfYXJnMSAgX19hc21fXyAoIiQ1IikgPSBhcmcxOworCXJlZ2lzdGVyIGxvbmcgaW50IF9hcmcyICBfX2FzbV9fICgiJDYiKSA9IGFyZzI7CisJcmVnaXN0ZXIgbG9uZyBpbnQgX2FyZzMgIF9fYXNtX18gKCIkNyIpID0gYXJnMzsKKworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisKKwlvbGRfZnMgPSBnZXRfZnMoKTsKKyAJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKyAgCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyAJIglzeXNjYWxsCQkJCQlcbiIKKyAJOiAiPXIiIChfbnVtKSwgIj1yIiAoX2FyZzMpCisgCTogInIiIChfbnVtKSwgInIiIChfYXJnMCksICJyIiAoX2FyZzEpLCAiciIgKF9hcmcyKSwgInIiIChfYXJnMykpOworCisJc2V0X2ZzKG9sZF9mcyk7CisKKwkvKiAkYTMgaXMgZXJyb3IgZmxhZyAqLworCWlmIChfYXJnMykKKwkJcmV0dXJuIC1fbnVtOworCisJcmV0dXJuIF9udW07Cit9CisKK3N0YXRpYyBpbnQgdHJhbnNsYXRlX3N5c2NhbGxfY29tbWFuZChpbnQgY21kKQoreworCWludCBpOworCWludCByZXQgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN5c2NhbGxfY29tbWFuZF90YWJsZSk7IGkrKykgeworCQlpZiAoKGNtZCA9PSBzeXNjYWxsX2NvbW1hbmRfdGFibGVbaV0uc3ApKQorCQkJcmV0dXJuIHN5c2NhbGxfY29tbWFuZF90YWJsZVtpXS5hcDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRyYW5zbGF0ZV9vcGVuX2ZsYWdzKGludCBmbGFncykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKG9wZW5fZmxhZ3NfdGFibGUpIC8gc2l6ZW9mKHN0cnVjdCBhcHNwX3RhYmxlKSk7CisJICAgICBpKyspIHsKKwkJaWYoIChmbGFncyAmIG9wZW5fZmxhZ3NfdGFibGVbaV0uc3ApICkgeworCQkJcmV0IHw9IG9wZW5fZmxhZ3NfdGFibGVbaV0uYXA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIHNwX3NldGZzdWlkZ2lkKCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKK3sKKwljdXJyZW50LT5mc3VpZCA9IHVpZDsKKwljdXJyZW50LT5mc2dpZCA9IGdpZDsKKworCWtleV9mc3VpZF9jaGFuZ2VkKGN1cnJlbnQpOworCWtleV9mc2dpZF9jaGFuZ2VkKGN1cnJlbnQpOworfQorCisvKgorICogRXhwZWN0cyBhIHJlcXVlc3QgdG8gYmUgb24gdGhlIHN5c2lvIGNoYW5uZWwuIFJlYWRzIGl0LiAgRGVjaWRlcyB3aGV0aGVyCisgKiBpdHMgYSBsaW51eCBzeXNjYWxsIGFuZCBydW5zIGl0LCBvciB3aGF0ZXZlci4gIFB1dHMgdGhlIHJldHVybiBjb2RlIGJhY2sKKyAqIGludG8gdGhlIHJlcXVlc3QgYW5kIHNlbmRzIHRoZSB3aG9sZSB0aGluZyBiYWNrLgorICovCit2b2lkIHNwX3dvcmtfaGFuZGxlX3JlcXVlc3Qodm9pZCkKK3sKKwlzdHJ1Y3QgbXRzcF9zeXNjYWxsIHNjOworCXN0cnVjdCBtdHNwX3N5c2NhbGxfZ2VuZXJpYyBnZW5lcmljOworCXN0cnVjdCBtdHNwX3N5c2NhbGxfcmV0IHJldDsKKwlzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zICpuOworCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0aW1lem9uZSB0ejsKKwlpbnQgY21kOworCisJY2hhciAqdmN3ZDsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzOworCWludCBzaXplOworCisJcmV0LnJldHZhbCA9IC0xOworCisJaWYgKCFydGx4X3JlYWQoUlRMWF9DSEFOTkVMX1NZU0lPLCAmc2MsIHNpemVvZihzdHJ1Y3QgbXRzcF9zeXNjYWxsKSwgMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFeHBlY3RlZCByZXF1ZXN0IGJ1dCBub3RoaW5nIHRvIHJlYWRcbiIpOworCQlyZXR1cm47CisJfQorCisJc2l6ZSA9IHNjLnNpemU7CisKKwlpZiAoc2l6ZSkgeworCQlpZiAoIXJ0bHhfcmVhZChSVExYX0NIQU5ORUxfU1lTSU8sICZnZW5lcmljLCBzaXplLCAwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFeHBlY3RlZCByZXF1ZXN0IGJ1dCBub3RoaW5nIHRvIHJlYWRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogUnVuIHRoZSBzeXNjYWxsIGF0IHRoZSBwcml2aWxlZGdlIG9mIHRoZSB1c2VyIHdobyBsb2FkZWQgdGhlCisJICAgU1AgcHJvZ3JhbSAqLworCisJaWYgKHZwZV9nZXR1aWQoU1BfVlBFKSkKKwkJc3Bfc2V0ZnN1aWRnaWQoIHZwZV9nZXR1aWQoU1BfVlBFKSwgdnBlX2dldGdpZChTUF9WUEUpKTsKKworCXN3aXRjaCAoc2MuY21kKSB7CisJLyogbmVlZHMgdGhlIGZsYWdzIGFyZ3VtZW50IHRyYW5zbGF0aW5nIGZyb20gU0RFIGtpdCB0bworCSAgIGxpbnV4ICovCisgCWNhc2UgTVRTUF9TWVNDQUxMX1BJUEVGUkVROgorIAkJcmV0LnJldHZhbCA9IGNwdV9raHogKiAxMDAwOworIAkJcmV0LmVycm5vID0gMDsKKyAJCWJyZWFrOworCisgCWNhc2UgTVRTUF9TWVNDQUxMX0dFVFRPRDoKKyAJCW1lbXNldCgmdHosIDAsIHNpemVvZih0eikpOworIAkJaWYgKChyZXQucmV0dmFsID0gc3Bfc3lzY2FsbChfX05SX2dldHRpbWVvZmRheSwgKGludCkmdHYsCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpJnR6LCAwLDApKSA9PSAwKQorCQlyZXQucmV0dmFsID0gdHYudHZfc2VjOworCisJCXJldC5lcnJubyA9IGVycm5vOworCQlicmVhazsKKworIAljYXNlIE1UU1BfU1lTQ0FMTF9FWElUOgorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG4sICZrc3BkX25vdGlmeWxpc3QsIGxpc3QpCisgCQkJbi0+a3NwZF9zcF9leGl0KFNQX1ZQRSk7CisJCXNwX3N0b3BwaW5nID0gMTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiS1NQRCBnb3QgZXhpdCBzeXNjYWxsIGZyb20gU1AgZXhpdGNvZGUgJWRcbiIsCisJCSAgICAgICBnZW5lcmljLmFyZzApOworIAkJYnJlYWs7CisKKyAJY2FzZSBNVFNQX1NZU0NBTExfT1BFTjoKKyAJCWdlbmVyaWMuYXJnMSA9IHRyYW5zbGF0ZV9vcGVuX2ZsYWdzKGdlbmVyaWMuYXJnMSk7CisKKyAJCXZjd2QgPSB2cGVfZ2V0Y3dkKFNQX1ZQRSk7CisKKyAJCS8qIGNoYW5nZSB0byB0aGUgY3dkIG9mIHRoZSBwcm9jZXNzIHRoYXQgbG9hZGVkIHRoZSBTUCBwcm9ncmFtICovCisJCW9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKwkJc3lzX2NoZGlyKHZjd2QpOworCQlzZXRfZnMob2xkX2ZzKTsKKworIAkJc2MuY21kID0gX19OUl9vcGVuOworCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisgIAlkZWZhdWx0OgorIAkJaWYgKChzYy5jbWQgPj0gX19OUl9MaW51eCkgJiYKKwkJICAgIChzYy5jbWQgPD0gKF9fTlJfTGludXggKyAgX19OUl9MaW51eF9zeXNjYWxscykpICkKKwkJCWNtZCA9IHNjLmNtZDsKKwkJZWxzZQorCQkJY21kID0gdHJhbnNsYXRlX3N5c2NhbGxfY29tbWFuZChzYy5jbWQpOworCisJCWlmIChjbWQgPj0gMCkgeworCQkJcmV0LnJldHZhbCA9IHNwX3N5c2NhbGwoY21kLCBnZW5lcmljLmFyZzAsIGdlbmVyaWMuYXJnMSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWMuYXJnMiwgZ2VuZXJpYy5hcmczKTsKKwkJCXJldC5lcnJubyA9IGVycm5vOworCQl9IGVsc2UKKyAJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIktTUEQ6IFVua25vd24gU1Agc3lzY2FsbCBudW1iZXIgJWRcbiIsIHNjLmNtZCk7CisJCWJyZWFrOworIAl9IC8qIHN3aXRjaCAqLworCisJaWYgKHZwZV9nZXR1aWQoU1BfVlBFKSkKKwkJc3Bfc2V0ZnN1aWRnaWQoIDAsIDApOworCisJaWYgKChydGx4X3dyaXRlKFJUTFhfQ0hBTk5FTF9TWVNJTywgJnJldCwgc2l6ZW9mKHN0cnVjdCBtdHNwX3N5c2NhbGxfcmV0KSwgMCkpCisJICAgIDwgc2l6ZW9mKHN0cnVjdCBtdHNwX3N5c2NhbGxfcmV0KSkKKwkJcHJpbnRrKCJLU1BEOiBzcF93b3JrX2hhbmRsZV9yZXF1ZXN0IGZhaWxlZCB0byBzZW5kIHRvIFNQXG4iKTsKK30KKworc3RhdGljIHZvaWQgc3BfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzID0gY3VycmVudC0+ZmlsZXM7CisJaW50IGksIGo7CisJc3RydWN0IGZkdGFibGUgKmZkdDsKKworCWogPSAwOworCisJLyoKKwkgKiBJdCBpcyBzYWZlIHRvIGRlcmVmZXJlbmNlIHRoZSBmZCB0YWJsZSB3aXRob3V0IFJDVSBvcgorCSAqIC0+ZmlsZV9sb2NrCisJICovCisJZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBsb25nIHNldDsKKwkJaSA9IGogKiBfX05GREJJVFM7CisJCWlmIChpID49IGZkdC0+bWF4X2Zkc2V0IHx8IGkgPj0gZmR0LT5tYXhfZmRzKQorCQkJYnJlYWs7CisJCXNldCA9IGZkdC0+b3Blbl9mZHMtPmZkc19iaXRzW2orK107CisJCXdoaWxlIChzZXQpIHsKKwkJCWlmIChzZXQgJiAxKSB7CisJCQkJc3RydWN0IGZpbGUgKiBmaWxlID0geGNoZygmZmR0LT5mZFtpXSwgTlVMTCk7CisJCQkJaWYgKGZpbGUpCisJCQkJCWZpbHBfY2xvc2UoZmlsZSwgZmlsZXMpOworCQkJfQorCQkJaSsrOworCQkJc2V0ID4+PSAxOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNoYW5uZWxfb3BlbiA9IDA7CisKKy8qIHRoZSB3b3JrIGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIHNwX3dvcmsodm9pZCAqZGF0YSkKK3sKKwlpZiAoIWNoYW5uZWxfb3BlbikgeworCQlpZiggcnRseF9vcGVuKFJUTFhfQ0hBTk5FTF9TWVNJTywgMSkgIT0gMCkgeworCQkJcHJpbnRrKCJLU1BEOiB1bmFibGUgdG8gb3BlbiBzcCBjaGFubmVsXG4iKTsKKwkJCXNwX3N0b3BwaW5nID0gMTsKKwkJfSBlbHNlIHsKKwkJCWNoYW5uZWxfb3BlbisrOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIktTUEQ6IFNQIGNoYW5uZWwgb3BlbmVkXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHdhaXQgZm9yIHNvbWUgZGF0YSwgYWxsb3cgaXQgdG8gc2xlZXAgKi8KKwkJcnRseF9yZWFkX3BvbGwoUlRMWF9DSEFOTkVMX1NZU0lPLCAxKTsKKworCQkvKiBDaGVjayB3ZSBoYXZlbid0IGJlZW4gd29rZW4gYmVjYXVzZSB3ZSBhcmUgc3RvcHBpbmcgKi8KKwkJaWYgKCFzcF9zdG9wcGluZykKKwkJCXNwX3dvcmtfaGFuZGxlX3JlcXVlc3QoKTsKKwl9CisKKwlpZiAoIXNwX3N0b3BwaW5nKQorCQlxdWV1ZV93b3JrKHdvcmtxdWV1ZSwgJndvcmspOworCWVsc2UKKwkJc3BfY2xlYW51cCgpOworfQorCitzdGF0aWMgdm9pZCBzdGFydHdvcmsoaW50IHZwZSkKK3sKKwlzcF9zdG9wcGluZyA9IGNoYW5uZWxfb3BlbiA9IDA7CisKKwlpZiAod29ya3F1ZXVlID09IE5VTEwpIHsKKwkJaWYgKCh3b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3NwZCIpKSA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBzdGFydCBrc3BkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCUlOSVRfV09SSygmd29yaywgc3Bfd29yaywgTlVMTCk7CisJCXF1ZXVlX3dvcmsod29ya3F1ZXVlLCAmd29yayk7CisJfSBlbHNlCisJCXF1ZXVlX3dvcmsod29ya3F1ZXVlLCAmd29yayk7CisKK30KKworc3RhdGljIHZvaWQgc3RvcHdvcmsoaW50IHZwZSkKK3sKKwlzcF9zdG9wcGluZyA9IDE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiS1NQRDogU1Agc3RvcHBpbmdcbiIpOworfQorCit2b2lkIGtzcGRfbm90aWZ5KHN0cnVjdCBrc3BkX25vdGlmaWNhdGlvbnMgKm5vdGlmeSkKK3sKKwlsaXN0X2FkZCgmbm90aWZ5LT5saXN0LCAma3NwZF9ub3RpZnlsaXN0KTsKK30KKworc3RhdGljIHN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyBub3RpZnk7CitzdGF0aWMgaW50IGtzcGRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlJTklUX0xJU1RfSEVBRCgma3NwZF9ub3RpZnlsaXN0KTsKKworCW5vdGlmeS5zdGFydCA9IHN0YXJ0d29yazsKKwlub3RpZnkuc3RvcCA9IHN0b3B3b3JrOworCXZwZV9ub3RpZnkoU1BfVlBFLCAmbm90aWZ5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrc3BkX21vZHVsZV9leGl0KHZvaWQpCit7CisKK30KKworbW9kdWxlX2luaXQoa3NwZF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChrc3BkX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNSVBTIEtTUEQiKTsKK01PRFVMRV9BVVRIT1IoIkVsaXphYmV0aCBPbGRoYW0sIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDNmNDBjMzcuLmE3ZDJiYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC0zNTYsNzMgKzM1NiwxMyBAQAogYXNtbGlua2FnZSBzc2l6ZV90IHN5czMyX3ByZWFkKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKiBidWYsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50LCB1MzIgdW51c2VkLCB1NjQgYTQsIHU2NCBhNSkKIHsKLQlzc2l6ZV90IHJldDsKLQlzdHJ1Y3QgZmlsZSAqIGZpbGU7Ci0Jc3NpemVfdCAoKnJlYWQpKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwotCWxvZmZfdCBwb3M7Ci0KLQlyZXQgPSAtRUJBREY7Ci0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBiYWRfZmlsZTsKLQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKLQkJZ290byBvdXQ7Ci0JcG9zID0gbWVyZ2VfNjQoYTQsIGE1KTsKLQlyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBmaWxlLCAmcG9zLCBjb3VudCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKCFmaWxlLT5mX29wIHx8ICEocmVhZCA9IGZpbGUtPmZfb3AtPnJlYWQpKQotCQlnb3RvIG91dDsKLQlpZiAocG9zIDwgMCkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gLUVTUElQRTsKLQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9QUkVBRCkpCi0JCWdvdG8gb3V0OwotCXJldCA9IHJlYWQoZmlsZSwgYnVmLCBjb3VudCwgJnBvcyk7Ci0JaWYgKHJldCA+IDApCi0JCWRub3RpZnlfcGFyZW50KGZpbGUtPmZfZGVudHJ5LCBETl9BQ0NFU1MpOwotb3V0OgotCWZwdXQoZmlsZSk7Ci1iYWRfZmlsZToKLQlyZXR1cm4gcmV0OworCXJldHVybiBzeXNfcHJlYWQ2NChmZCwgYnVmLCBjb3VudCwgbWVyZ2VfNjQoYTQsIGE1KSk7CiB9CiAKIGFzbWxpbmthZ2Ugc3NpemVfdCBzeXMzMl9wd3JpdGUodW5zaWduZWQgaW50IGZkLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKIAkJCSAgICAgICAgc2l6ZV90IGNvdW50LCB1MzIgdW51c2VkLCB1NjQgYTQsIHU2NCBhNSkKIHsKLQlzc2l6ZV90IHJldDsKLQlzdHJ1Y3QgZmlsZSAqIGZpbGU7Ci0Jc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKLQlsb2ZmX3QgcG9zOwotCi0JcmV0ID0gLUVCQURGOwotCWZpbGUgPSBmZ2V0KGZkKTsKLQlpZiAoIWZpbGUpCi0JCWdvdG8gYmFkX2ZpbGU7Ci0JaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQotCQlnb3RvIG91dDsKLQlwb3MgPSBtZXJnZV82NChhNCwgYTUpOwotCXJldCA9IHJ3X3ZlcmlmeV9hcmVhKFdSSVRFLCBmaWxlLCAmcG9zLCBjb3VudCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKCFmaWxlLT5mX29wIHx8ICEod3JpdGUgPSBmaWxlLT5mX29wLT53cml0ZSkpCi0JCWdvdG8gb3V0OwotCWlmIChwb3MgPCAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IC1FU1BJUEU7Ci0JaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUFdSSVRFKSkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3cml0ZShmaWxlLCBidWYsIGNvdW50LCAmcG9zKTsKLQlpZiAocmV0ID4gMCkKLQkJZG5vdGlmeV9wYXJlbnQoZmlsZS0+Zl9kZW50cnksIEROX01PRElGWSk7Ci1vdXQ6Ci0JZnB1dChmaWxlKTsKLWJhZF9maWxlOgotCXJldHVybiByZXQ7CisJcmV0dXJuIHN5c19wd3JpdGU2NChmZCwgYnVmLCBjb3VudCwgbWVyZ2VfNjQoYTQsIGE1KSk7CiB9CiAKIGFzbWxpbmthZ2UgaW50IHN5czMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbChjb21wYXRfcGlkX3QgcGlkLApAQCAtMTE4Miw2ICsxMTIyLDE2IEBACiAJcmV0dXJuIHN5c19yZWFkYWhlYWQoZmQsIG1lcmdlXzY0KGEyLCBhMyksIGNvdW50KTsKIH0KIAorYXNtbGlua2FnZSBsb25nIHN5czMyX3N5bmNfZmlsZV9yYW5nZShpbnQgZmQsIGludCBfX3BhZCwKKwl1bnNpZ25lZCBsb25nIGEyLCB1bnNpZ25lZCBsb25nIGEzLAorCXVuc2lnbmVkIGxvbmcgYTQsIHVuc2lnbmVkIGxvbmcgYTUsCisJaW50IGZsYWdzKQoreworCXJldHVybiBzeXNfc3luY19maWxlX3JhbmdlKGZkLAorCQkJbWVyZ2VfNjQoYTIsIGEzKSwgbWVyZ2VfNjQoYTQsIGE1KSwKKwkJCWZsYWdzKTsKK30KKwogLyogQXJndW1lbnQgbGlzdCBzaXplcyBmb3Igc3lzX3NvY2tldGNhbGwgKi8KICNkZWZpbmUgQUwoeCkgKCh4KSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKQogc3RhdGljIHVuc2lnbmVkIGNoYXIgc29ja2V0Y2FsbF9uYXJnc1sxOF09e0FMKDApLEFMKDMpLEFMKDMpLEFMKDMpLEFMKDIpLEFMKDMpLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9taXBzLW10LmMgYi9hcmNoL21pcHMva2VybmVsL21pcHMtbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjIzN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzLW10LmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgKiBHZW5lcmFsIE1JUFMgTVQgc3VwcG9ydCByb3V0aW5lcywgdXNhYmxlIGluIEFQL1NQLCBTTVZQLCBvciBTTVRDIGtlcm5lbHMKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNaXBzIFRlY2hub2xvZ2llcywgSW5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3I0a2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworLyoKKyAqIENQVSBtYXNrIHVzZWQgdG8gc2V0IHByb2Nlc3MgYWZmaW5pdHkgZm9yIE1UIFZQRXMvVENzIHdpdGggRlBVcworICovCisKK2NwdW1hc2tfdCBtdF9mcHVfY3B1bWFzazsKKworI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCisKKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKK3Vuc2lnbmVkIGxvbmcgbXRfZnBlbXVsX3RocmVzaG9sZCA9IDA7CisKKy8qCisgKiBSZXBsYWNlbWVudCBmdW5jdGlvbnMgZm9yIHRoZSBzeXNfc2NoZWRfc2V0YWZmaW5pdHkoKSBhbmQKKyAqIHN5c19zY2hlZF9nZXRhZmZpbml0eSgpIHN5c3RlbSBjYWxscywgc28gdGhhdCB3ZSBjYW4gaW50ZWdyYXRlCisgKiBGUFUgYWZmaW5pdHkgd2l0aCB0aGUgdXNlcidzIHJlcXVlc3RlZCBwcm9jZXNzb3IgYWZmaW5pdHkuCisgKiBUaGlzIGNvZGUgaXMgOTglIGlkZW50aWNhbCB3aXRoIHRoZSBzeXNfc2NoZWRfc2V0YWZmaW5pdHkoKQorICogYW5kIHN5c19zY2hlZF9nZXRhZmZpbml0eSgpIHN5c3RlbSBjYWxscywgYW5kIHNob3VsZCBiZQorICogdXBkYXRlZCB3aGVuIGtlcm5lbC9zY2hlZC5jIGNoYW5nZXMuCisgKi8KKworLyoKKyAqIGZpbmRfcHJvY2Vzc19ieV9waWQgLSBmaW5kIGEgcHJvY2VzcyB3aXRoIGEgbWF0Y2hpbmcgUElEIHZhbHVlLgorICogdXNlZCBpbiBzeXNfc2NoZWRfc2V0L2dldGFmZmluaXR5KCkgaW4ga2VybmVsL3NjaGVkLmMsIHNvCisgKiBjbG9uZWQgaGVyZS4KKyAqLworc3RhdGljIGlubGluZSB0YXNrX3QgKmZpbmRfcHJvY2Vzc19ieV9waWQocGlkX3QgcGlkKQoreworCXJldHVybiBwaWQgPyBmaW5kX3Rhc2tfYnlfcGlkKHBpZCkgOiBjdXJyZW50OworfQorCisKKy8qCisgKiBtaXBzbXRfc3lzX3NjaGVkX3NldGFmZmluaXR5IC0gc2V0IHRoZSBjcHUgYWZmaW5pdHkgb2YgYSBwcm9jZXNzCisgKi8KK2FzbWxpbmthZ2UgbG9uZyBtaXBzbXRfc3lzX3NjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIF9fdXNlciAqdXNlcl9tYXNrX3B0cikKK3sKKwljcHVtYXNrX3QgbmV3X21hc2s7CisJY3B1bWFza190IGVmZmVjdGl2ZV9tYXNrOworCWludCByZXR2YWw7CisJdGFza190ICpwOworCisJaWYgKGxlbiA8IHNpemVvZihuZXdfbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfbWFzaywgdXNlcl9tYXNrX3B0ciwgc2l6ZW9mKG5ld19tYXNrKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJbG9ja19jcHVfaG90cGx1ZygpOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisKKwlwID0gZmluZF9wcm9jZXNzX2J5X3BpZChwaWQpOworCWlmICghcCkgeworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXVubG9ja19jcHVfaG90cGx1ZygpOworCQlyZXR1cm4gLUVTUkNIOworCX0KKworCS8qCisJICogSXQgaXMgbm90IHNhZmUgdG8gY2FsbCBzZXRfY3B1c19hbGxvd2VkIHdpdGggdGhlCisJICogdGFza2xpc3RfbG9jayBoZWxkLiAgV2Ugd2lsbCBidW1wIHRoZSB0YXNrX3N0cnVjdCdzCisJICogdXNhZ2UgY291bnQgYW5kIGRyb3AgdGFza2xpc3RfbG9jayBiZWZvcmUgaW52b2tpbmcKKwkgKiBzZXRfY3B1c19hbGxvd2VkLgorCSAqLworCWdldF90YXNrX3N0cnVjdChwKTsKKworCXJldHZhbCA9IC1FUEVSTTsKKwlpZiAoKGN1cnJlbnQtPmV1aWQgIT0gcC0+ZXVpZCkgJiYgKGN1cnJlbnQtPmV1aWQgIT0gcC0+dWlkKSAmJgorCQkJIWNhcGFibGUoQ0FQX1NZU19OSUNFKSkgeworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBSZWNvcmQgbmV3IHVzZXItc3BlY2lmaWVkIENQVSBzZXQgZm9yIGZ1dHVyZSByZWZlcmVuY2UgKi8KKwlwLT50aHJlYWQudXNlcl9jcHVzX2FsbG93ZWQgPSBuZXdfbWFzazsKKworCS8qIFVubG9jayB0aGUgdGFzayBsaXN0ICovCisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCisJLyogQ29tcHV0ZSBuZXcgZ2xvYmFsIGFsbG93ZWQgQ1BVIHNldCBpZiBuZWNlc3NhcnkgKi8KKwlpZiggKHAtPnRocmVhZC5tZmxhZ3MgJiBNRl9GUFVCT1VORCkKKwkmJiBjcHVzX2ludGVyc2VjdHMobmV3X21hc2ssIG10X2ZwdV9jcHVtYXNrKSkgeworCQljcHVzX2FuZChlZmZlY3RpdmVfbWFzaywgbmV3X21hc2ssIG10X2ZwdV9jcHVtYXNrKTsKKwkJcmV0dmFsID0gc2V0X2NwdXNfYWxsb3dlZChwLCBlZmZlY3RpdmVfbWFzayk7CisJfSBlbHNlIHsKKwkJcC0+dGhyZWFkLm1mbGFncyAmPSB+TUZfRlBVQk9VTkQ7CisJCXJldHZhbCA9IHNldF9jcHVzX2FsbG93ZWQocCwgbmV3X21hc2spOworCX0KKworCitvdXRfdW5sb2NrOgorCXB1dF90YXNrX3N0cnVjdChwKTsKKwl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogbWlwc210X3N5c19zY2hlZF9nZXRhZmZpbml0eSAtIGdldCB0aGUgY3B1IGFmZmluaXR5IG9mIGEgcHJvY2VzcworICovCithc21saW5rYWdlIGxvbmcgbWlwc210X3N5c19zY2hlZF9nZXRhZmZpbml0eShwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgKnVzZXJfbWFza19wdHIpCit7CisJdW5zaWduZWQgaW50IHJlYWxfbGVuOworCWNwdW1hc2tfdCBtYXNrOworCWludCByZXR2YWw7CisJdGFza190ICpwOworCisJcmVhbF9sZW4gPSBzaXplb2YobWFzayk7CisJaWYgKGxlbiA8IHJlYWxfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2tfY3B1X2hvdHBsdWcoKTsKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCisJcmV0dmFsID0gLUVTUkNIOworCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CisJaWYgKCFwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlyZXR2YWwgPSAwOworCisJY3B1c19hbmQobWFzaywgcC0+dGhyZWFkLnVzZXJfY3B1c19hbGxvd2VkLCBjcHVfcG9zc2libGVfbWFwKTsKKworb3V0X3VubG9jazoKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpZiAoY29weV90b191c2VyKHVzZXJfbWFza19wdHIsICZtYXNrLCByZWFsX2xlbikpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiByZWFsX2xlbjsKK30KKworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCisKKy8qCisgKiBEdW1wIG5ldyBNSVBTIE1UIHN0YXRlIGZvciB0aGUgY29yZS4gRG9lcyBub3QgbGVhdmUgVENzIGhhbHRlZC4KKyAqIFRha2VzIGFuIGFyZ3VtZW50IHdoaWNoIHRha2VuIHRvIGJlIGEgcHJlLWNhbGwgTVZQQ29udHJvbCB2YWx1ZS4KKyAqLworCit2b2lkIG1pcHNfbXRfcmVnZHVtcCh1bnNpZ25lZCBsb25nIG12cGN0bCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdnBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG12cGNvbmYwOworCWludCBudnBlOworCWludCBudGM7CisJaW50IGk7CisJaW50IHRjOworCXVuc2lnbmVkIGxvbmcgaGFsdHZhbDsKKwl1bnNpZ25lZCBsb25nIHRjc3RhdHZhbDsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJdm9pZCBzbXRjX3NvZnRfZHVtcCh2b2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQVF9NVF9TTVRDICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdnBmbGFncyA9IGR2cGUoKTsKKwlwcmludGsoIj09PSBNSVBTIE1UIFN0YXRlIER1bXAgPT09XG4iKTsKKwlwcmludGsoIi0tIEdsb2JhbCBTdGF0ZSAtLVxuIik7CisJcHJpbnRrKCIgICBNVlBDb250cm9sIFBhc3NlZDogJTA4bHhcbiIsIG12cGN0bCk7CisJcHJpbnRrKCIgICBNVlBDb250cm9sIFJlYWQ6ICUwOGx4XG4iLCB2cGZsYWdzKTsKKwlwcmludGsoIiAgIE1WUENvbmYwIDogJTA4bHhcbiIsIChtdnBjb25mMCA9IHJlYWRfYzBfbXZwY29uZjAoKSkpOworCW52cGUgPSAoKG12cGNvbmYwICYgTVZQQ09ORjBfUFZQRSkgPj4gTVZQQ09ORjBfUFZQRV9TSElGVCkgKyAxOworCW50YyA9ICgobXZwY29uZjAgJiBNVlBDT05GMF9QVEMpID4+IE1WUENPTkYwX1BUQ19TSElGVCkgKyAxOworCXByaW50aygiLS0gcGVyLVZQRSBTdGF0ZSAtLVxuIik7CisJZm9yKGkgPSAwOyBpIDwgbnZwZTsgaSsrKSB7CisJICAgIGZvcih0YyA9IDA7IHRjIDwgbnRjOyB0YysrKSB7CisJCQlzZXR0Yyh0Yyk7CisJCWlmKChyZWFkX3RjX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlZQRSkgPT0gaSkgeworCQkgICAgcHJpbnRrKCIgIFZQRSAlZFxuIiwgaSk7CisJCSAgICBwcmludGsoIiAgIFZQRUNvbnRyb2wgOiAlMDhseFxuIiwgcmVhZF92cGVfYzBfdnBlY29udHJvbCgpKTsKKwkJICAgIHByaW50aygiICAgVlBFQ29uZjAgOiAlMDhseFxuIiwgcmVhZF92cGVfYzBfdnBlY29uZjAoKSk7CisJCSAgICBwcmludGsoIiAgIFZQRSVkLlN0YXR1cyA6ICUwOGx4XG4iLAorCQkJCWksIHJlYWRfdnBlX2MwX3N0YXR1cygpKTsKKwkJICAgIHByaW50aygiICAgVlBFJWQuRVBDIDogJTA4bHhcbiIsIGksIHJlYWRfdnBlX2MwX2VwYygpKTsKKwkJICAgIHByaW50aygiICAgVlBFJWQuQ2F1c2UgOiAlMDhseFxuIiwgaSwgcmVhZF92cGVfYzBfY2F1c2UoKSk7CisJCSAgICBwcmludGsoIiAgIFZQRSVkLkNvbmZpZzcgOiAlMDhseFxuIiwKKwkJCQlpLCByZWFkX3ZwZV9jMF9jb25maWc3KCkpOworCQkgICAgYnJlYWs7IC8qIE5leHQgVlBFICovCisJCX0KKwkgICAgfQorCX0KKwlwcmludGsoIi0tIHBlci1UQyBTdGF0ZSAtLVxuIik7CisJZm9yKHRjID0gMDsgdGMgPCBudGM7IHRjKyspIHsKKwkJc2V0dGModGMpOworCQlpZihyZWFkX3RjX2MwX3RjYmluZCgpID09IHJlYWRfYzBfdGNiaW5kKCkpIHsKKwkJCS8qIEFyZSB3ZSBkdW1waW5nIG91cnNlbGY/ICAqLworCQkJaGFsdHZhbCA9IDA7IC8qIFRoZW4gd2UncmUgbm90IGhhbHRlZCwgYW5kIG11c3RuJ3QgYmUgKi8KKwkJCXRjc3RhdHZhbCA9IGZsYWdzOyAvKiBBbmQgcHJlLWR1bXAgVENTdGF0dXMgaXMgZmxhZ3MgKi8KKwkJCXByaW50aygiICBUQyAlZCAoY3VycmVudCBUQyB3aXRoIFZQRSBFUEMgYWJvdmUpXG4iLCB0Yyk7CisJCX0gZWxzZSB7CisJCQloYWx0dmFsID0gcmVhZF90Y19jMF90Y2hhbHQoKTsKKwkJCXdyaXRlX3RjX2MwX3RjaGFsdCgxKTsKKwkJCXRjc3RhdHZhbCA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKKwkJCXByaW50aygiICBUQyAlZFxuIiwgdGMpOworCQl9CisJCXByaW50aygiICAgVENTdGF0dXMgOiAlMDhseFxuIiwgdGNzdGF0dmFsKTsKKwkJcHJpbnRrKCIgICBUQ0JpbmQgOiAlMDhseFxuIiwgcmVhZF90Y19jMF90Y2JpbmQoKSk7CisJCXByaW50aygiICAgVENSZXN0YXJ0IDogJTA4bHhcbiIsIHJlYWRfdGNfYzBfdGNyZXN0YXJ0KCkpOworCQlwcmludGsoIiAgIFRDSGFsdCA6ICUwOGx4XG4iLCBoYWx0dmFsKTsKKwkJcHJpbnRrKCIgICBUQ0NvbnRleHQgOiAlMDhseFxuIiwgcmVhZF90Y19jMF90Y2NvbnRleHQoKSk7CisJCWlmICghaGFsdHZhbCkKKwkJCXdyaXRlX3RjX2MwX3RjaGFsdCgwKTsKKwl9CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXNtdGNfc29mdF9kdW1wKCk7CisjZW5kaWYgLyogQ09ORklHX01JUFRfTVRfU01UQyAqLworCXByaW50aygiPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlldnBlKHZwZmxhZ3MpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBtdF9vcHRfbm9ycHMgPSAwOworc3RhdGljIGludCBtdF9vcHRfcnBzY3RsID0gLTE7CitzdGF0aWMgaW50IG10X29wdF9uYmxzdSA9IC0xOworc3RhdGljIGludCBtdF9vcHRfZm9yY2Vjb25maWc3ID0gMDsKK3N0YXRpYyBpbnQgbXRfb3B0X2NvbmZpZzcgPSAtMTsKKworc3RhdGljIGludCBfX2luaXQgcnBzX2Rpc2FibGUoY2hhciAqcykKK3sKKwltdF9vcHRfbm9ycHMgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgibm9ycHMiLCBycHNfZGlzYWJsZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHJwc2N0bF9zZXQoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJm10X29wdF9ycHNjdGwpOworCXJldHVybiAxOworfQorX19zZXR1cCgicnBzY3RsPSIsIHJwc2N0bF9zZXQpOworCitzdGF0aWMgaW50IF9faW5pdCBuYmxzdV9zZXQoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJm10X29wdF9uYmxzdSk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJuYmxzdT0iLCBuYmxzdV9zZXQpOworCitzdGF0aWMgaW50IF9faW5pdCBjb25maWc3X3NldChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbXRfb3B0X2NvbmZpZzcpOworCW10X29wdF9mb3JjZWNvbmZpZzcgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgiY29uZmlnNz0iLCBjb25maWc3X3NldCk7CisKKy8qIEV4cGVyaW1lbnRhbCBjYWNoZSBmbHVzaCBjb250cm9sIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgZ28gYXdheSBzb21lIGRheSAqLworaW50IG10X3Byb3RpZmx1c2ggPSAwOworaW50IG10X3Byb3RkZmx1c2ggPSAwOworaW50IG10X25faWZsdXNoZXMgPSAxOworaW50IG10X25fZGZsdXNoZXMgPSAxOworCitzdGF0aWMgaW50IF9faW5pdCBzZXRfcHJvdGlmbHVzaChjaGFyICpzKQoreworCW10X3Byb3RpZmx1c2ggPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgicHJvdGlmbHVzaCIsIHNldF9wcm90aWZsdXNoKTsKKworc3RhdGljIGludCBfX2luaXQgc2V0X3Byb3RkZmx1c2goY2hhciAqcykKK3sKKwltdF9wcm90ZGZsdXNoID0gMTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInByb3RkZmx1c2giLCBzZXRfcHJvdGRmbHVzaCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG5pZmx1c2goY2hhciAqcykKK3sKKwlnZXRfb3B0aW9uKCZzLCAmbXRfbl9pZmx1c2hlcyk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJuaWZsdXNoPSIsIG5pZmx1c2gpOworCitzdGF0aWMgaW50IF9faW5pdCBuZGZsdXNoKGNoYXIgKnMpCit7CisJZ2V0X29wdGlvbigmcywgJm10X25fZGZsdXNoZXMpOworCXJldHVybiAxOworfQorX19zZXR1cCgibmRmbHVzaD0iLCBuZGZsdXNoKTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorc3RhdGljIGludCBmcGFmZl90aHJlc2hvbGQgPSAtMTsKKworc3RhdGljIGludCBfX2luaXQgZnBhZmZfdGhyZXNoKGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZmcGFmZl90aHJlc2hvbGQpOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJmcGFmZj0iLCBmcGFmZl90aHJlc2gpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXRjX2Jhc2UgPSAwOworCitzdGF0aWMgaW50IF9faW5pdCBzZXRfaXRjX2Jhc2UoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJml0Y19iYXNlKTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiaXRjYmFzZT0iLCBzZXRfaXRjX2Jhc2UpOworCit2b2lkIG1pcHNfbXRfc2V0X2NwdW9wdGlvbnModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgb2NvbmZpZzcgPSByZWFkX2MwX2NvbmZpZzcoKTsKKwl1bnNpZ25lZCBpbnQgbmNvbmZpZzcgPSBvY29uZmlnNzsKKworCWlmIChtdF9vcHRfbm9ycHMpIHsKKwkJcHJpbnRrKCJcIm5vcnBzXCIgb3B0aW9uIGRlcHJlY3RhdGVkOiB1c2UgXCJycHNjdGw9XCJcbiIpOworCX0KKwlpZiAobXRfb3B0X3Jwc2N0bCA+PSAwKSB7CisJCXByaW50aygiMzRLIHJldHVybiBwcmVkaWN0aW9uIHN0YWNrIG92ZXJyaWRlIHNldCB0byAlZC5cbiIsCisJCQltdF9vcHRfcnBzY3RsKTsKKwkJaWYgKG10X29wdF9ycHNjdGwpCisJCQluY29uZmlnNyB8PSAoMSA8PCAyKTsKKwkJZWxzZQorCQkJbmNvbmZpZzcgJj0gfigxIDw8IDIpOworCX0KKwlpZiAobXRfb3B0X25ibHN1ID49IDApIHsKKwkJcHJpbnRrKCIzNEsgQUxVL0xTVSBzeW5jIG92ZXJyaWRlIHNldCB0byAlZC5cbiIsIG10X29wdF9uYmxzdSk7CisJCWlmIChtdF9vcHRfbmJsc3UpCisJCQluY29uZmlnNyB8PSAoMSA8PCA1KTsKKwkJZWxzZQorCQkJbmNvbmZpZzcgJj0gfigxIDw8IDUpOworCX0KKwlpZiAobXRfb3B0X2ZvcmNlY29uZmlnNykgeworCQlwcmludGsoIkNQMC5Db25maWc3IGZvcmNlZCB0byAweCUwOHguXG4iLCBtdF9vcHRfY29uZmlnNyk7CisJCW5jb25maWc3ID0gbXRfb3B0X2NvbmZpZzc7CisJfQorCWlmIChvY29uZmlnNyAhPSBuY29uZmlnNykgeworCQlfX2FzbV9fIF9fdm9sYXRpbGUoInN5bmMiKTsKKwkJd3JpdGVfYzBfY29uZmlnNyhuY29uZmlnNyk7CisJCWVoYiAoKTsKKwkJcHJpbnRrKCJDb25maWc3OiAweCUwOHhcbiIsIHJlYWRfYzBfY29uZmlnNygpKTsKKwl9CisKKwkvKiBSZXBvcnQgQ2FjaGUgbWFuYWdlbWVudCBkZWJ1ZyBvcHRpb25zICovCisJaWYgKG10X3Byb3RpZmx1c2gpCisJCXByaW50aygiSS1jYWNoZSBmbHVzaGVzIHNpbmdsZS10aHJlYWRlZFxuIik7CisJaWYgKG10X3Byb3RkZmx1c2gpCisJCXByaW50aygiRC1jYWNoZSBmbHVzaGVzIHNpbmdsZS10aHJlYWRlZFxuIik7CisJaWYgKG10X25faWZsdXNoZXMgIT0gMSkKKwkJcHJpbnRrKCJJLUNhY2hlIEZsdXNoZXMgUmVwZWF0ZWQgJWQgdGltZXNcbiIsIG10X25faWZsdXNoZXMpOworCWlmIChtdF9uX2RmbHVzaGVzICE9IDEpCisJCXByaW50aygiRC1DYWNoZSBGbHVzaGVzIFJlcGVhdGVkICVkIHRpbWVzXG4iLCBtdF9uX2RmbHVzaGVzKTsKKworI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCisJLyogRlBVIFVzZSBGYWN0b3IgZW1waXJpY2FsbHkgZGVyaXZlZCBmcm9tIGV4cGVyaW1lbnRzIG9uIDM0SyAqLworI2RlZmluZSBGUFVTRUZBQ1RPUiAzMzMKKworCWlmIChmcGFmZl90aHJlc2hvbGQgPj0gMCkgeworCQltdF9mcGVtdWxfdGhyZXNob2xkID0gZnBhZmZfdGhyZXNob2xkOworCX0gZWxzZSB7CisJCW10X2ZwZW11bF90aHJlc2hvbGQgPQorCQkJKEZQVVNFRkFDVE9SICogKGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSkpIC8gSFo7CisJfQorCXByaW50aygiRlBVIEFmZmluaXR5IHNldCBhZnRlciAlbGQgZW11bGF0aW9uc1xuIiwKKwkJCW10X2ZwZW11bF90aHJlc2hvbGQpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCisKKwlpZiAoaXRjX2Jhc2UgIT0gMCkgeworCQkvKgorCQkgKiBDb25maWd1cmUgSVRDIG1hcHBpbmcuICBUaGlzIGNvZGUgaXMgdmVyeQorCQkgKiBzcGVjaWZpYyB0byB0aGUgMzRLIGNvcmUgZmFtaWx5LCB3aGljaCB1c2VzCisJCSAqIGEgc3BlY2lhbCBtb2RlIGJpdCAoIklUQyIpIGluIHRoZSBFcnJDdGwKKwkJICogcmVnaXN0ZXIgdG8gZW5hYmxlIGFjY2VzcyB0byBJVEMgY29udHJvbAorCQkgKiByZWdpc3RlcnMgdmlhIGNhY2hlICJ0YWciIG9wZXJhdGlvbnMuCisJCSAqLworCQl1bnNpZ25lZCBsb25nIGVjdGx2YWw7CisJCXVuc2lnbmVkIGxvbmcgaXRjYmxrZ3JuOworCisJCS8qIEVyckN0bCByZWdpc3RlciBpcyBrbm93biBhcyAiZWNjIiB0byBMaW51eCAqLworCQllY3RsdmFsID0gcmVhZF9jMF9lY2MoKTsKKwkJd3JpdGVfYzBfZWNjKGVjdGx2YWwgfCAoMHgxIDw8IDI2KSk7CisJCWVoYigpOworI2RlZmluZSBJTkRFWF8wICgweDgwMDAwMDAwKQorI2RlZmluZSBJTkRFWF84ICgweDgwMDAwMDA4KQorCQkvKiBSZWFkICJjYWNoZSB0YWciIGZvciBEY2FjaGUgcHNldWRvLWluZGV4IDggKi8KKwkJY2FjaGVfb3AoSW5kZXhfTG9hZF9UYWdfRCwgSU5ERVhfOCk7CisJCWVoYigpOworCQlpdGNibGtncm4gPSByZWFkX2MwX2R0YWdsbygpOworCQlpdGNibGtncm4gJj0gMHhmZmZlMDAwMDsKKwkJLyogU2V0IGZvciAxMjggYnl0ZSBwaXRjaCBvZiBJVEMgY2VsbHMgKi8KKwkJaXRjYmxrZ3JuIHw9IDB4MDAwMDBjMDA7CisJCS8qIFN0YWdlIGluIFRhZyByZWdpc3RlciAqLworCQl3cml0ZV9jMF9kdGFnbG8oaXRjYmxrZ3JuKTsKKwkJZWhiKCk7CisJCS8qIFdyaXRlIG91dCB0byBJVFUgd2l0aCBDQUNIRSBvcCAqLworCQljYWNoZV9vcChJbmRleF9TdG9yZV9UYWdfRCwgSU5ERVhfOCk7CisJCS8qIE5vdyBzZXQgYmFzZSBhZGRyZXNzLCBhbmQgdHVybiBJVEMgb24gd2l0aCAweDEgYml0ICovCisJCXdyaXRlX2MwX2R0YWdsbygoaXRjX2Jhc2UgJiAweGZmZmZmYzAwKSB8IDB4MSApOworCQllaGIoKTsKKwkJLyogV3JpdGUgb3V0IHRvIElUVSB3aXRoIENBQ0hFIG9wICovCisJCWNhY2hlX29wKEluZGV4X1N0b3JlX1RhZ19ELCBJTkRFWF8wKTsKKwkJd3JpdGVfYzBfZWNjKGVjdGx2YWwpOworCQllaGIoKTsKKwkJcHJpbnRrKCJNYXBwZWQgJWxkIElUQyBjZWxscyBzdGFydGluZyBhdCAweCUwOHhcbiIsCisJCQkoKGl0Y2Jsa2dybiAmIDB4N2ZlMDAwMDApID4+IDIwKSwgaXRjX2Jhc2UpOworCX0KK30KKworLyoKKyAqIEZ1bmN0aW9uIHRvIHByb3RlY3QgY2FjaGUgZmx1c2hlcyBmcm9tIGNvbmN1cnJlbnQgZXhlY3V0aW9uCisgKiBkZXBlbmRzIG9uIE1QIHNvZnR3YXJlIG1vZGVsIGNob3Nlbi4KKyAqLworCit2b2lkIG10X2NmbHVzaF9sb2NrZG93bih2b2lkKQoreworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl2b2lkIHNtdGNfY2ZsdXNoX2xvY2tkb3duKHZvaWQpOworCisJc210Y19jZmx1c2hfbG9ja2Rvd24oKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJLyogRklMTCBJTiBWU01QIGFuZCBBUC9TUCBWRVJTSU9OUyBIRVJFICovCit9CisKK3ZvaWQgbXRfY2ZsdXNoX3JlbGVhc2Uodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJdm9pZCBzbXRjX2NmbHVzaF9yZWxlYXNlKHZvaWQpOworCisJc210Y19jZmx1c2hfcmVsZWFzZSgpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwkvKiBGSUxMIElOIFZTTVAgYW5kIEFQL1NQIFZFUlNJT05TIEhFUkUgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKaW5kZXggODZlNDJjNi4uMGE3MWE0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKQEAgLTI4LDIyICsyOCw5IEBACiAvKgogICogU3RyaW5nIGZ1bmN0aW9ucwogICovCi1FWFBPUlRfU1lNQk9MKG1lbWNocik7Ci1FWFBPUlRfU1lNQk9MKG1lbWNtcCk7CiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7CiBFWFBPUlRfU1lNQk9MKG1lbWNweSk7CiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwotRVhQT1JUX1NZTUJPTChzdHJjYXQpOwotRVhQT1JUX1NZTUJPTChzdHJjaHIpOwotI2lmZGVmIENPTkZJR182NEJJVAotRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKLSNlbmRpZgotRVhQT1JUX1NZTUJPTChzdHJsZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKLUVYUE9SVF9TWU1CT0woc3RybmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIAogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIApAQCAtNjIsNiArNDksMyBAQAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOwogCiBFWFBPUlRfU1lNQk9MKGludmFsaWRfcHRlX3RhYmxlKTsKLSNpZmRlZiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkUKLUVYUE9SVF9TWU1CT0wocHJvYmVfaXJxX21hc2spOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL21vZHVsZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYwppbmRleCBlNTRhN2Y0Li5kN2JmMDIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMKQEAgLTI4OCw2ICsyODgsOSBAQAogCQlzeW0gPSAoRWxmX1N5bSAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHIKIAkJCSsgRUxGX01JUFNfUl9TWU0ocmVsW2ldKTsKIAkJaWYgKCFzeW0tPnN0X3ZhbHVlKSB7CisJCQkvKiBJZ25vcmUgdW5yZXNvbHZlZCB3ZWFrIHN5bWJvbCAqLworCQkJaWYgKEVMRl9TVF9CSU5EKHN5bS0+c3RfaW5mbykgPT0gU1RCX1dFQUspCisJCQkJY29udGludWU7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBzeW1ib2wgJXNcbiIsCiAJCQkgICAgICAgbWUtPm5hbWUsIHN0cnRhYiArIHN5bS0+c3RfbmFtZSk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTMyNSw2ICszMjgsOSBAQAogCQlzeW0gPSAoRWxmX1N5bSAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHIKIAkJCSsgRUxGX01JUFNfUl9TWU0ocmVsW2ldKTsKIAkJaWYgKCFzeW0tPnN0X3ZhbHVlKSB7CisJCQkvKiBJZ25vcmUgdW5yZXNvbHZlZCB3ZWFrIHN5bWJvbCAqLworCQkJaWYgKEVMRl9TVF9CSU5EKHN5bS0+c3RfaW5mbykgPT0gU1RCX1dFQUspCisJCQkJY29udGludWU7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBzeW1ib2wgJXNcbiIsCiAJCQkgICAgICAgbWUtPm5hbWUsIHN0cnRhYiArIHN5bS0+c3RfbmFtZSk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKaW5kZXggODRhYjk1OS4uOWRlZjU1NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKQEAgLTQyLDYgKzQyLDcgQEAKIAlbQ1BVX1I4MDAwXQk9ICJSODAwMCIsCiAJW0NQVV9SMTAwMDBdCT0gIlIxMDAwMCIsCiAJW0NQVV9SMTIwMDBdCT0gIlIxMjAwMCIsCisJW0NQVV9SMTQwMDBdCT0gIlIxNDAwMCIsCiAJW0NQVV9SNDMwMF0JPSAiUjQzMDAiLAogCVtDUFVfUjQ2NTBdCT0gIlI0NjUwIiwKIAlbQ1BVX1I0NzAwXQk9ICJSNDcwMCIsCkBAIC03NCw2ICs3NSw3IEBACiAJW0NQVV8yNEtdCT0gIk1JUFMgMjRLIiwKIAlbQ1BVXzI1S0ZdCT0gIk1JUFMgMjVLZiIsCiAJW0NQVV8zNEtdCT0gIk1JUFMgMzRLIiwKKwlbQ1BVXzc0S10JPSAiTUlQUyA3NEsiLAogCVtDUFVfVlI0MTExXQk9ICJORUMgVlI0MTExIiwKIAlbQ1BVX1ZSNDEyMV0JPSAiTkVDIFZSNDEyMSIsCiAJW0NQVV9WUjQxMjJdCT0gIk5FQyBWUjQxMjIiLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwppbmRleCBhOGY0MzVkLi4xOTlhMDZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDEsNiArNDEsMTAgQEAKICNpbmNsdWRlIDxhc20vZWxmLmg+CiAjaW5jbHVkZSA8YXNtL2lzYWRlcC5oPgogI2luY2x1ZGUgPGFzbS9pbnN0Lmg+CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CitleHRlcm4gdm9pZCBzbXRjX2lkbGVfbG9vcF9ob29rKHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogLyoKICAqIFRoZSBpZGxlIHRocmVhZC4gVGhlcmUncyBubyB1c2VmdWwgd29yayB0byBiZSBkb25lLCBzbyBqdXN0IHRyeSB0byBjb25zZXJ2ZQpAQCAtNTEsOSArNTUsMTMgQEAKIHsKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7Ci0JCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCQlzbXRjX2lkbGVfbG9vcF9ob29rKCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQkJaWYgKGNwdV93YWl0KQogCQkJCSgqY3B1X3dhaXQpKCk7CisJCX0KIAkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOwogCQlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTE3Nyw2ICsxODUsMTcgQEAKIAljaGlsZHJlZ3MtPmNwMF9zdGF0dXMgJj0gfihTVDBfQ1UyfFNUMF9DVTEpOwogCWNsZWFyX3Rza190aHJlYWRfZmxhZyhwLCBUSUZfVVNFREZQVSk7CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorCS8qCisJICogRlBVIGFmZmluaXR5IHN1cHBvcnQgaXMgY2xlYW5lciBpZiB3ZSB0cmFjayB0aGUKKwkgKiB1c2VyLXZpc2libGUgQ1BVIGFmZmluaXR5IGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nLgorCSAqIFRoZSBnZW5lcmljIGNwdXNfYWxsb3dlZCBtYXNrIHdpbGwgYWxyZWFkeSBoYXZlCisJICogYmVlbiBjb3BpZWQgZnJvbSB0aGUgcGFyZW50IGJlZm9yZSBjb3B5X3RocmVhZAorCSAqIGlzIGludm9rZWQuCisJICovCisJcC0+dGhyZWFkLnVzZXJfY3B1c19hbGxvd2VkID0gcC0+Y3B1c19hbGxvd2VkOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCisKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCiAJCXRpLT50cF92YWx1ZSA9IHJlZ3MtPnJlZ3NbN107CiAKQEAgLTQxOSw0ICs0MzgsMyBAQAogCXJldHVybiBwYzsKIH0KIAotRVhQT1JUX1NZTUJPTChnZXRfd2NoYW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZjgzOGIzNi4uOWI0NzMzYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0yNDgsMTAgKzI0OCwyMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgRlBDX0VJUjogewkvKiBpbXBsZW1lbnRhdGlvbiAvIHZlcnNpb24gcmVnaXN0ZXIgKi8KIAkJCXVuc2lnbmVkIGludCBmbGFnczsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCQl1bnNpZ25lZCBpbnQgaXJxZmxhZ3M7CisJCQl1bnNpZ25lZCBpbnQgbXRmbGFnczsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAkJCWlmICghY3B1X2hhc19mcHUpCiAJCQkJYnJlYWs7CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCQkvKiBSZWFkLW1vZGlmeS13cml0ZSBvZiBTdGF0dXMgbXVzdCBiZSBhdG9taWMgKi8KKwkJCWxvY2FsX2lycV9zYXZlKGlycWZsYWdzKTsKKwkJCW10ZmxhZ3MgPSBkbXQoKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAkJCXByZWVtcHRfZGlzYWJsZSgpOwogCQkJaWYgKGNwdV9oYXNfbWlwc210KSB7CiAJCQkJdW5zaWduZWQgaW50IHZwZmxhZ3MgPSBkdnBlKCk7CkBAIC0yNjYsNiArMjc2LDEwIEBACiAJCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNmYzFcdCUwLCQwIjogIj1yIiAodG1wKSk7CiAJCQkJd3JpdGVfYzBfc3RhdHVzKGZsYWdzKTsKIAkJCX0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCQllbXQobXRmbGFncyk7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFmbGFncyk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQkJcHJlZW1wdF9lbmFibGUoKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00NjksNyArNDgzLDcgQEAKIGFzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZW50cnlleGl0KQogewogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiBlbnRyeWV4aXQpCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLT5yZWdzWzJdKSwKKwkJYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKHJlZ3MtPnJlZ3NbMl0pLAogCQkgICAgICAgICAgICAgICAgICAgcmVncy0+cmVnc1syXSk7CiAKIAlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKQEAgLTQ5Myw3ICs1MDcsNyBAQAogCX0KICBvdXQ6CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpICYmICFlbnRyeWV4aXQpCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgYXVkaXRfYXJjaCgpLCByZWdzLT5yZWdzWzJdLAorCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGF1ZGl0X2FyY2goKSwgcmVncy0+cmVnc1syXSwKIAkJCQkgICAgcmVncy0+cmVnc1s0XSwgcmVncy0+cmVnc1s1XSwKIAkJCQkgICAgcmVncy0+cmVnc1s2XSwgcmVncy0+cmVnc1s3XSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMKaW5kZXggMGQ1Y2Y5Ny4uODcwNGRjMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYwpAQCAtMTczLDEyICsxNzMsMjIgQEAKIAkJCWJyZWFrOwogCQljYXNlIEZQQ19FSVI6IHsJLyogaW1wbGVtZW50YXRpb24gLyB2ZXJzaW9uIHJlZ2lzdGVyICovCiAJCQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkJdW5zaWduZWQgaW50IGlycWZsYWdzOworCQkJdW5zaWduZWQgaW50IG10ZmxhZ3M7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJCQlpZiAoIWNwdV9oYXNfZnB1KSB7CiAJCQkJdG1wID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJCS8qIFJlYWQtbW9kaWZ5LXdyaXRlIG9mIFN0YXR1cyBtdXN0IGJlIGF0b21pYyAqLworCQkJbG9jYWxfaXJxX3NhdmUoaXJxZmxhZ3MpOworCQkJbXRmbGFncyA9IGRtdCgpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogCQkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCQlpZiAoY3B1X2hhc19taXBzbXQpIHsKIAkJCQl1bnNpZ25lZCBpbnQgdnBmbGFncyA9IGR2cGUoKTsKQEAgLTE5Myw2ICsyMDMsMTAgQEAKIAkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2ZjMVx0JTAsJDAiOiAiPXIiICh0bXApKTsKIAkJCQl3cml0ZV9jMF9zdGF0dXMoZmxhZ3MpOwogCQkJfQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJCWVtdChtdGZsYWdzKTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGlycWZsYWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjRrX3N3aXRjaC5TIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKaW5kZXggZDJhZmJkMS4uMGIxYjU0YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKQEAgLTg4LDcgKzg4LDE4IEBACiAKIAlQVFJfQURESVUJdDAsICQyOCwgX1RIUkVBRF9TSVpFIC0gMzIKIAlzZXRfc2F2ZWRfc3AJdDAsIHQxLCB0MgotCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qIFJlYWQtbW9kaWZ5LXdyaXRlcyBvZiBTdGF0dXMgbXVzdCBiZSBhdG9taWMgb24gYSBWUEUgKi8KKwltZmMwCXQyLCBDUDBfVENTVEFUVVMKKwlvcmkJdDEsIHQyLCBUQ1NUQVRVU19JWE1UCisJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCisJYW5kaQl0MiwgdDIsIFRDU1RBVFVTX0lYTVQKKwllaGIKKwlETVQJOAkJCQkjIGRtdAl0MAorCW1vdmUJdDEscmEKKwlqYWwJbWlwc19paGIKKwltb3ZlCXJhLHQxCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCW1mYzAJdDEsIENQMF9TVEFUVVMJCS8qIERvIHdlIHJlYWxseSBuZWVkIHRoaXM/ICovCiAJbGkJYTMsIDB4ZmYwMQogCWFuZAl0MSwgYTMKQEAgLTk3LDYgKzEwOCwxOCBAQAogCWFuZAlhMiwgYTMKIAlvcglhMiwgdDEKIAltdGMwCWEyLCBDUDBfU1RBVFVTCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWVoYgorCWFuZGkJdDAsIHQwLCBWUEVDT05UUk9MX1RFCisJYmVxegl0MCwgMWYKKwllbXQKKzE6CisJbWZjMAl0MSwgQ1AwX1RDU1RBVFVTCisJeG9yaQl0MSwgdDEsIFRDU1RBVFVTX0lYTVQKKwlvcgl0MSwgdDEsIHQyCisJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCisJZWhiCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCW1vdmUJdjAsIGEwCiAJanIJcmEKIAlFTkQocmVzdW1lKQpAQCAtMTMxLDEwICsxNTQsMTkgQEAKICNkZWZpbmUgRlBVX0RFRkFVTFQgIDB4MDAwMDAwMDAKIAogTEVBRihfaW5pdF9mcHUpCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qIFJhdGhlciB0aGFuIG1hbmlwdWxhdGUgcGVyLVZQRSBTdGF0dXMsIHNldCBwZXItVEMgYml0IGluIFRDU3RhdHVzICovCisJbWZjMAl0MCwgQ1AwX1RDU1RBVFVTCisJLyogQml0IHBvc2l0aW9uIGlzIHRoZSBzYW1lIGZvciBTdGF0dXMsIFRDU3RhdHVzICovCisJbGkJdDEsIFNUMF9DVTEKKwlvcgl0MCwgdDEKKwltdGMwCXQwLCBDUDBfVENTVEFUVVMKKyNlbHNlIC8qIE5vcm1hbCBNSVBTIENVMSBlbmFibGUgKi8KIAltZmMwCXQwLCBDUDBfU1RBVFVTCiAJbGkJdDEsIFNUMF9DVTEKIAlvcgl0MCwgdDEKIAltdGMwCXQwLCBDUDBfU1RBVFVTCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCWZwdV9lbmFibGVfaGF6YXJkCiAKIAlsaQl0MSwgRlBVX0RFRkFVTFQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKaW5kZXggOTg2YTljZi4uY2FmNzc3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKQEAgLTIxLDQ1ICsyMSw0NCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS92cGUuaD4KICNpbmNsdWRlIDxhc20vcnRseC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgUlRMWF9UQVJHX1ZQRSAxCiAKIHN0YXRpYyBzdHJ1Y3QgcnRseF9pbmZvICpydGx4Owogc3RhdGljIGludCBtYWpvcjsKIHN0YXRpYyBjaGFyIG1vZHVsZV9uYW1lW10gPSAicnRseCI7Ci1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnE7Ci1zdGF0aWMgaW50IGlycV9udW07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNwYWNlZnJlZShpbnQgcmVhZCwgaW50IHdyaXRlLCBpbnQgc2l6ZSkKLXsKLQlpZiAocmVhZCA9PSB3cml0ZSkgewotCQkvKgotCQkgKiBuZXZlciBmaWxsIHRoZSBidWZmZXIgY29tcGxldGVseSwgc28gaW5kZXhlcyBhcmUgYWx3YXlzCi0JCSAqIGVxdWFsIGlmIGVtcHR5IGFuZCBvbmx5IGVtcHR5LCBvciAhZXF1YWwgaWYgZGF0YSBhdmFpbGFibGUKLQkJICovCi0JCXJldHVybiBzaXplIC0gMTsKLQl9Ci0KLQlyZXR1cm4gKChyZWFkICsgc2l6ZSAtIHdyaXRlKSAlIHNpemUpIC0gMTsKLX0KIAogc3RhdGljIHN0cnVjdCBjaGFuX3dhaXRxdWV1ZXMgewogCXdhaXRfcXVldWVfaGVhZF90IHJ0X3F1ZXVlOwogCXdhaXRfcXVldWVfaGVhZF90IGx4X3F1ZXVlOworCWludCBpbl9vcGVuOwogfSBjaGFubmVsX3dxc1tSVExYX0NIQU5ORUxTXTsKIAorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxOworc3RhdGljIGludCBpcnFfbnVtOworc3RhdGljIHN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyBub3RpZnk7CitzdGF0aWMgaW50IHNwX3N0b3BwaW5nID0gMDsKKwogZXh0ZXJuIHZvaWQgKnZwZV9nZXRfc2hhcmVkKGludCBpbmRleCk7CiAKIHN0YXRpYyB2b2lkIHJ0bHhfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC02NywxNzQgKzY2LDI5OCBAQAogCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU19DUFVfUlRMWF9JUlEsIHJlZ3MpOwogfQogCisKKy8qIEludGVycnVwdCBoYW5kbGVyIG1heSBiZSBjYWxsZWQgYmVmb3JlIHJ0bHhfaW5pdCBoYXMgb3RoZXJ3aXNlIGhhZAorICAgYSBjaGFuY2UgdG8gcnVuLgorKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBydGx4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykgewotCQlzdHJ1Y3QgcnRseF9jaGFubmVsICpjaGFuID0gJnJ0bHgtPmNoYW5uZWxbaV07Ci0KLQkJaWYgKGNoYW4tPmx4X3JlYWQgIT0gY2hhbi0+bHhfd3JpdGUpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKKwkJCXdha2VfdXAoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKKwkJCXdha2VfdXAoJmNoYW5uZWxfd3FzW2ldLnJ0X3F1ZXVlKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIGNhbGwgd2hlbiB3ZSBoYXZlIHRoZSBhZGRyZXNzIG9mIHRoZSBzaGFyZWQgc3RydWN0dXJlIGZyb20gdGhlIFNQIHNpZGUuICovCi1zdGF0aWMgaW50IHJ0bHhfaW5pdChzdHJ1Y3QgcnRseF9pbmZvICpydGx4aSkKK3N0YXRpYyBfX2F0dHJpYnV0ZV91c2VkX18gdm9pZCBkdW1wX3J0bHgodm9pZCkKIHsKIAlpbnQgaTsKIAorCXByaW50aygiaWQgMHglbHggc3RhdGUgJWRcbiIsIHJ0bHgtPmlkLCBydGx4LT5zdGF0ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlRMWF9DSEFOTkVMUzsgaSsrKSB7CisJCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW4gPSAmcnRseC0+Y2hhbm5lbFtpXTsKKworCQlwcmludGsoIiBydF9zdGF0ZSAlZCBseF9zdGF0ZSAlZCBidWZmZXJfc2l6ZSAlZFxuIiwKKwkJICAgICAgIGNoYW4tPnJ0X3N0YXRlLCBjaGFuLT5seF9zdGF0ZSwgY2hhbi0+YnVmZmVyX3NpemUpOworCisJCXByaW50aygiIHJ0X3JlYWQgJWQgcnRfd3JpdGUgJWRcbiIsCisJCSAgICAgICBjaGFuLT5ydF9yZWFkLCBjaGFuLT5ydF93cml0ZSk7CisKKwkJcHJpbnRrKCIgbHhfcmVhZCAlZCBseF93cml0ZSAlZFxuIiwKKwkJICAgICAgIGNoYW4tPmx4X3JlYWQsIGNoYW4tPmx4X3dyaXRlKTsKKworCQlwcmludGsoIiBydF9idWZmZXIgPCVzPlxuIiwgY2hhbi0+cnRfYnVmZmVyKTsKKwkJcHJpbnRrKCIgbHhfYnVmZmVyIDwlcz5cbiIsIGNoYW4tPmx4X2J1ZmZlcik7CisJfQorfQorCisvKiBjYWxsIHdoZW4gd2UgaGF2ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc2hhcmVkIHN0cnVjdHVyZSBmcm9tIHRoZSBTUCBzaWRlLiAqLworc3RhdGljIGludCBydGx4X2luaXQoc3RydWN0IHJ0bHhfaW5mbyAqcnRseGkpCit7CiAJaWYgKHJ0bHhpLT5pZCAhPSBSVExYX0lEKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm5vIHZhbGlkIFJUTFggaWQgYXQgMHglcFxuIiwgcnRseGkpOworCQlwcmludGsoS0VSTl9FUlIgIm5vIHZhbGlkIFJUTFggaWQgYXQgMHglcCAweCV4XG4iLCBydGx4aSwgcnRseGktPmlkKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAotCS8qIGluaXRpYWxpc2UgdGhlIHdhaXQgcXVldWVzICovCi0JZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykgewotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGFubmVsX3dxc1tpXS5ydF9xdWV1ZSk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKLQl9Ci0KLQkvKiBzZXQgdXAgZm9yIGludGVycnVwdCBoYW5kbGluZyAqLwotCW1lbXNldCgmaXJxLCAwLCBzaXplb2Yoc3RydWN0IGlycWFjdGlvbikpOwotCi0JaWYgKGNwdV9oYXNfdmludCkKLQkJc2V0X3ZpX2hhbmRsZXIoTUlQU19DUFVfUlRMWF9JUlEsIHJ0bHhfZGlzcGF0Y2gpOwotCi0JaXJxX251bSA9IE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9SVExYX0lSUTsKLQlpcnEuaGFuZGxlciA9IHJ0bHhfaW50ZXJydXB0OwotCWlycS5mbGFncyA9IFNBX0lOVEVSUlVQVDsKLQlpcnEubmFtZSA9ICJSVExYIjsKLQlpcnEuZGV2X2lkID0gcnRseDsKLQlzZXR1cF9pcnEoaXJxX251bSwgJmlycSk7Ci0KIAlydGx4ID0gcnRseGk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogb25seSBhbGxvdyBvbmUgb3BlbiBwcm9jZXNzIGF0IGEgdGltZSB0byBvcGVuIGVhY2ggY2hhbm5lbCAqLwotc3RhdGljIGludCBydGx4X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCisvKiBub3RpZmljYXRpb25zICovCitzdGF0aWMgdm9pZCBzdGFydGluZyhpbnQgdnBlKQogewotCWludCBtaW5vciwgcmV0OwotCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW47CisJaW50IGk7CisJc3Bfc3RvcHBpbmcgPSAwOwogCi0JLyogYXNzdW1lIG9ubHkgMSBkZXZpY2UgYXQgdGhlIG1vLiAqLwotCW1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CisJLyogZm9yY2UgYSByZWxvYWQgb2YgcnRseCAqLworCXJ0bHg9TlVMTDsKKworCS8qIHdha2UgdXAgYW55IHNsZWVwaW5nIHJ0bHhfb3BlbidzICovCisJZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaGFubmVsX3dxc1tpXS5seF9xdWV1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BwaW5nKGludCB2cGUpCit7CisJaW50IGk7CisKKwlzcF9zdG9wcGluZyA9IDE7CisJZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaGFubmVsX3dxc1tpXS5seF9xdWV1ZSk7Cit9CisKKworaW50IHJ0bHhfb3BlbihpbnQgaW5kZXgsIGludCBjYW5fc2xlZXApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcnRseF9jaGFubmVsICpjaGFuOworCXZvbGF0aWxlIHN0cnVjdCBydGx4X2luZm8gKipwOworCisJaWYgKGluZGV4ID49IFJUTFhfQ0hBTk5FTFMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJ0bHhfb3BlbiBpbmRleCBvdXQgb2YgcmFuZ2VcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAoY2hhbm5lbF93cXNbaW5kZXhdLmluX29wZW4pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJ0bHhfb3BlbiBjaGFubmVsICVkIGFscmVhZHkgb3BlbmVkXG4iLCBpbmRleCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY2hhbm5lbF93cXNbaW5kZXhdLmluX29wZW4rKzsKIAogCWlmIChydGx4ID09IE5VTEwpIHsKLQkJc3RydWN0IHJ0bHhfaW5mbyAqKnA7CiAJCWlmKCAocCA9IHZwZV9nZXRfc2hhcmVkKFJUTFhfVEFSR19WUEUpKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInZwZV9nZXRfc2hhcmVkIGlzIE5VTEwuICIKLQkJCSAgICAgICAiSGFzIGFuIFNQIHByb2dyYW0gYmVlbiBsb2FkZWQ/XG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKGNhbl9zbGVlcCkgeworCQkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJCQkJLyogZ28gdG8gc2xlZXAgKi8KKwkJCQlhZGRfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbaW5kZXhdLmx4X3F1ZXVlLCAmd2FpdCk7CisKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCXdoaWxlICgocCA9IHZwZV9nZXRfc2hhcmVkKFJUTFhfVEFSR19WUEUpKSA9PSBOVUxMKSB7CisJCQkJCXNjaGVkdWxlKCk7CisJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJfQorCisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbaW5kZXhdLmx4X3F1ZXVlLCAmd2FpdCk7CisKKwkJCQkvKiBiYWNrIHJ1bm5pbmcgKi8KKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKCBLRVJOX0RFQlVHICJObyBTUCBwcm9ncmFtIGxvYWRlZCwgYW5kIGRldmljZSAiCisJCQkJCSJvcGVuZWQgd2l0aCBPX05PTkJMT0NLXG4iKTsKKwkJCQljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQl9CiAJCX0KIAogCQlpZiAoKnAgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ2cGVfc2hhcmVkICVwICVwXG4iLCBwLCAqcCk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWlmIChjYW5fc2xlZXApIHsKKwkJCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCQkJCS8qIGdvIHRvIHNsZWVwICovCisJCQkJYWRkX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW2luZGV4XS5seF9xdWV1ZSwgJndhaXQpOworCisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQl3aGlsZSAoKnAgPT0gTlVMTCkgeworCQkJCQlzY2hlZHVsZSgpOworCisJCQkJCS8qIHJlc2V0IHRhc2sgc3RhdGUgdG8gaW50ZXJydXB0YWJsZSBvdGhlcndpc2UKKwkJCQkJICAgd2UnbGwgd2hpenogcm91bmQgaGVyZSBsaWtlIGEgdmVyeSBmYXN0IGxvb3B5CisJCQkJCSAgIHRoaW5nLiBzY2hlZHVsZSgpIGFwcGVhcnMgdG8gcmV0dXJuIHdpdGggc3RhdGUKKwkJCQkJICAgc2V0IHRvIFRBU0tfUlVOTklORy4KKworCQkJCQkgICBJZiB0aGUgbG9hZGVkIFNQIHByb2dyYW0sIGZvciB3aGF0ZXZlciByZWFzb24sCisJCQkJCSAgIGRvZXNuJ3Qgc2V0IHVwIHRoZSBzaGFyZWQgc3RydWN0dXJlICpwIHdpbGwgbmV2ZXIKKwkJCQkJICAgYmVjb21lIHRydWUuIFNvIHdob2V2ZXIgY29ubmVjdGVkIHRvIGVpdGhlciAvZGV2L3J0PworCQkJCQkgICBvciBpZiBpdCB3YXMga3NwZCwgd2lsbCB0aGVuIHRha2UgdXAgcmF0aGVyIGEgbG90IG9mCisJCQkJCSAgIHByb2Nlc3NvciBjeWNsZXMuCisJCQkJCSovCisKKwkJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQl9CisKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1tpbmRleF0ubHhfcXVldWUsICZ3YWl0KTsKKworCQkJCS8qIGJhY2sgcnVubmluZyAqLworCQkJfQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCIgKnZwZV9nZXRfc2hhcmVkIGlzIE5VTEwuICIKKwkJCQkgICAgICAgIkhhcyBhbiBTUCBwcm9ncmFtIGJlZW4gbG9hZGVkP1xuIik7CisJCQkJY2hhbm5lbF93cXNbaW5kZXhdLmluX29wZW4gPSAwOworCQkJCXJldHVybiAtRU5PU1lTOworCQkJfQogCQl9CiAKLQkJaWYgKChyZXQgPSBydGx4X2luaXQoKnApKSA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlpZiAoKHVuc2lnbmVkIGludCkqcCA8IEtTRUcwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2cGVfZ2V0X3NoYXJlZCByZXR1cm5lZCBhbiBpbnZhbGlkIHBvaW50ZXIgIgorCQkJICAgICAgICJtYXliZSBhbiBlcnJvciBjb2RlICVkXG4iLCAoaW50KSpwKTsKKyAJCQljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCisgCQlpZiAoKHJldCA9IHJ0bHhfaW5pdCgqcCkpIDwgMCkgeworIAkJCWNoYW5uZWxfd3FzW2luZGV4XS5pbl9vcGVuID0gMDsKKyAgCQkJcmV0dXJuIHJldDsKKyAJCX0KIAl9CiAKLQljaGFuID0gJnJ0bHgtPmNoYW5uZWxbbWlub3JdOworCWNoYW4gPSAmcnRseC0+Y2hhbm5lbFtpbmRleF07CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdChSVExYX1NUQVRFX09QRU5FRCwgJmNoYW4tPmx4X3N0YXRlKSkKLQkJcmV0dXJuIC1FQlVTWTsKKyAJaWYgKGNoYW4tPmx4X3N0YXRlID09IFJUTFhfU1RBVEVfT1BFTkVEKSB7CisgCQljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CisgIAkJcmV0dXJuIC1FQlVTWTsKKyAJfQogCisgIAljaGFuLT5seF9zdGF0ZSA9IFJUTFhfU1RBVEVfT1BFTkVEOworIAljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnRseF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoraW50IHJ0bHhfcmVsZWFzZShpbnQgaW5kZXgpCiB7Ci0JaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7Ci0KLQljbGVhcl9iaXQoUlRMWF9TVEFURV9PUEVORUQsICZydGx4LT5jaGFubmVsW21pbm9yXS5seF9zdGF0ZSk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQorCXJ0bHgtPmNoYW5uZWxbaW5kZXhdLmx4X3N0YXRlID0gUlRMWF9TVEFURV9VTlVTRUQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnRseF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKK3Vuc2lnbmVkIGludCBydGx4X3JlYWRfcG9sbChpbnQgaW5kZXgsIGludCBjYW5fc2xlZXApCiB7Ci0JaW50IG1pbm9yOwotCXVuc2lnbmVkIGludCBtYXNrID0gMDsKLQlzdHJ1Y3QgcnRseF9jaGFubmVsICpjaGFuOworIAlzdHJ1Y3QgcnRseF9jaGFubmVsICpjaGFuOwogCi0JbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKLQljaGFuID0gJnJ0bHgtPmNoYW5uZWxbbWlub3JdOworIAlpZiAocnRseCA9PSBOVUxMKQorIAkJcmV0dXJuIDA7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJmNoYW5uZWxfd3FzW21pbm9yXS5ydF9xdWV1ZSwgd2FpdCk7Ci0JcG9sbF93YWl0KGZpbGUsICZjaGFubmVsX3dxc1ttaW5vcl0ubHhfcXVldWUsIHdhaXQpOworIAljaGFuID0gJnJ0bHgtPmNoYW5uZWxbaW5kZXhdOwogCiAJLyogZGF0YSBhdmFpbGFibGUgdG8gcmVhZD8gKi8KLQlpZiAoY2hhbi0+bHhfcmVhZCAhPSBjaGFuLT5seF93cml0ZSkKLQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCWlmIChjaGFuLT5seF9yZWFkID09IGNoYW4tPmx4X3dyaXRlKSB7CisJCWlmIChjYW5fc2xlZXApIHsKKwkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCi0JLyogc3BhY2UgdG8gd3JpdGUgKi8KLQlpZiAoc3BhY2VmcmVlKGNoYW4tPnJ0X3JlYWQsIGNoYW4tPnJ0X3dyaXRlLCBjaGFuLT5idWZmZXJfc2l6ZSkpCi0JCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJCQkvKiBnbyB0byBzbGVlcCAqLworCQkJYWRkX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW2luZGV4XS5seF9xdWV1ZSwgJndhaXQpOwogCi0JcmV0dXJuIG1hc2s7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJd2hpbGUgKGNoYW4tPmx4X3JlYWQgPT0gY2hhbi0+bHhfd3JpdGUpIHsKKwkJCQlzY2hlZHVsZSgpOworCisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQkJCWlmIChzcF9zdG9wcGluZykgeworCQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbaW5kZXhdLmx4X3F1ZXVlLCAmd2FpdCk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1tpbmRleF0ubHhfcXVldWUsICZ3YWl0KTsKKworCQkJLyogYmFjayBydW5uaW5nICovCisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIChjaGFuLT5seF93cml0ZSArIGNoYW4tPmJ1ZmZlcl9zaXplIC0gY2hhbi0+bHhfcmVhZCkKKwkgICAgICAgJSBjaGFuLT5idWZmZXJfc2l6ZTsKIH0KIAotc3RhdGljIHNzaXplX3QgcnRseF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LAotCQkJIGxvZmZfdCAqIHBwb3MpCitzdGF0aWMgaW5saW5lIGludCB3cml0ZV9zcGFjZWZyZWUoaW50IHJlYWQsIGludCB3cml0ZSwgaW50IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmYWlsZWQ7Ci0Jc2l6ZV90IGZsID0gMEw7Ci0JaW50IG1pbm9yOwotCXN0cnVjdCBydGx4X2NoYW5uZWwgKmx4OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKLQlseCA9ICZydGx4LT5jaGFubmVsW21pbm9yXTsKLQotCS8qIGRhdGEgYXZhaWxhYmxlPyAqLwotCWlmIChseC0+bHhfd3JpdGUgPT0gbHgtPmx4X3JlYWQpIHsKLQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQkJcmV0dXJuIDA7CS8qIC1FQUdBSU4gbWFrZXMgY2F0IHdoaW5nZSAqLwotCi0JCS8qIGdvIHRvIHNsZWVwICovCi0JCWFkZF93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1ttaW5vcl0ubHhfcXVldWUsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQl3aGlsZSAobHgtPmx4X3dyaXRlID09IGx4LT5seF9yZWFkKQotCQkJc2NoZWR1bGUoKTsKLQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbbWlub3JdLmx4X3F1ZXVlLCAmd2FpdCk7Ci0KLQkJLyogYmFjayBydW5uaW5nICovCisJaWYgKHJlYWQgPT0gd3JpdGUpIHsKKwkJLyoKKwkJICogTmV2ZXIgZmlsbCB0aGUgYnVmZmVyIGNvbXBsZXRlbHksIHNvIGluZGV4ZXMgYXJlIGFsd2F5cworCQkgKiBlcXVhbCBpZiBlbXB0eSBhbmQgb25seSBlbXB0eSwgb3IgIWVxdWFsIGlmIGRhdGEgYXZhaWxhYmxlCisJCSAqLworCQlyZXR1cm4gc2l6ZSAtIDE7CiAJfQogCisJcmV0dXJuICgocmVhZCArIHNpemUgLSB3cml0ZSkgJSBzaXplKSAtIDE7Cit9CisKK3Vuc2lnbmVkIGludCBydGx4X3dyaXRlX3BvbGwoaW50IGluZGV4KQoreworCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW4gPSAmcnRseC0+Y2hhbm5lbFtpbmRleF07CisJcmV0dXJuIHdyaXRlX3NwYWNlZnJlZShjaGFuLT5ydF9yZWFkLCBjaGFuLT5ydF93cml0ZSwgY2hhbi0+YnVmZmVyX3NpemUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV90byh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGNvdW50LCBpbnQgdXNlcikKK3sKKwlpZiAodXNlcikKKwkJY29weV90b191c2VyKGRzdCwgc3JjLCBjb3VudCk7CisJZWxzZQorCQltZW1jcHkoZHN0LCBzcmMsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfZnJvbSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGNvdW50LCBpbnQgdXNlcikKK3sKKwlpZiAodXNlcikKKwkJY29weV9mcm9tX3VzZXIoZHN0LCBzcmMsIGNvdW50KTsKKwllbHNlCisJCW1lbWNweShkc3QsIHNyYywgY291bnQpOworfQorCitzc2l6ZV90IHJ0bHhfcmVhZChpbnQgaW5kZXgsIHZvaWQgKmJ1ZmYsIHNpemVfdCBjb3VudCwgaW50IHVzZXIpCit7CisJc2l6ZV90IGZsID0gMEw7CisJc3RydWN0IHJ0bHhfY2hhbm5lbCAqbHg7CisKKwlpZiAocnRseCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWx4ID0gJnJ0bHgtPmNoYW5uZWxbaW5kZXhdOworCiAJLyogZmluZCBvdXQgaG93IG11Y2ggaW4gdG90YWwgKi8KIAljb3VudCA9IG1pbihjb3VudCwKLQkJICAgIChzaXplX3QpKGx4LT5seF93cml0ZSArIGx4LT5idWZmZXJfc2l6ZSAtIGx4LT5seF9yZWFkKSAlIGx4LT5idWZmZXJfc2l6ZSk7CisJCSAgICAgKHNpemVfdCkobHgtPmx4X3dyaXRlICsgbHgtPmJ1ZmZlcl9zaXplIC0gbHgtPmx4X3JlYWQpCisJCSAgICAgJSBseC0+YnVmZmVyX3NpemUpOwogCiAJLyogdGhlbiBob3cgbXVjaCBmcm9tIHRoZSByZWFkIHBvaW50ZXIgb253YXJkcyAqLwotCWZsID0gbWluKGNvdW50LCAoc2l6ZV90KWx4LT5idWZmZXJfc2l6ZSAtIGx4LT5seF9yZWFkKTsKKwlmbCA9IG1pbiggY291bnQsIChzaXplX3QpbHgtPmJ1ZmZlcl9zaXplIC0gbHgtPmx4X3JlYWQpOwogCi0JZmFpbGVkID0gY29weV90b191c2VyIChidWZmZXIsICZseC0+bHhfYnVmZmVyW2x4LT5seF9yZWFkXSwgZmwpOwotCWlmIChmYWlsZWQpIHsKLQkJY291bnQgPSBmbCAtIGZhaWxlZDsKLQkJZ290byBvdXQ7Ci0JfQorCWNvcHlfdG8oYnVmZiwgJmx4LT5seF9idWZmZXJbbHgtPmx4X3JlYWRdLCBmbCwgdXNlcik7CiAKIAkvKiBhbmQgaWYgdGhlcmUgaXMgYW55dGhpbmcgbGVmdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLQlpZiAoY291bnQgLSBmbCkgewotCQlmYWlsZWQgPSBjb3B5X3RvX3VzZXIgKGJ1ZmZlciArIGZsLCBseC0+bHhfYnVmZmVyLCBjb3VudCAtIGZsKTsKLQkJaWYgKGZhaWxlZCkgewotCQkJY291bnQgLT0gZmFpbGVkOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9CisJaWYgKCBjb3VudCAtIGZsICkKKwkJY29weV90byAoYnVmZiArIGZsLCBseC0+bHhfYnVmZmVyLCBjb3VudCAtIGZsLCB1c2VyKTsKIAotb3V0OgogCS8qIHVwZGF0ZSB0aGUgaW5kZXggKi8KIAlseC0+bHhfcmVhZCArPSBjb3VudDsKIAlseC0+bHhfcmVhZCAlPSBseC0+YnVmZmVyX3NpemU7CkBAIC0yNDIsMjAgKzM2NSwxMDAgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHJ0bHhfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAotCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCitzc2l6ZV90IHJ0bHhfd3JpdGUoaW50IGluZGV4LCB2b2lkICpidWZmZXIsIHNpemVfdCBjb3VudCwgaW50IHVzZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmYWlsZWQ7Ci0JaW50IG1pbm9yOwogCXN0cnVjdCBydGx4X2NoYW5uZWwgKnJ0OwogCXNpemVfdCBmbDsKKworCWlmIChydGx4ID09IE5VTEwpCisJCXJldHVybigtRU5PU1lTKTsKKworCXJ0ID0gJnJ0bHgtPmNoYW5uZWxbaW5kZXhdOworCisJLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKi8KKwljb3VudCA9IG1pbihjb3VudCwKKwkJICAgIChzaXplX3Qpd3JpdGVfc3BhY2VmcmVlKHJ0LT5ydF9yZWFkLCBydC0+cnRfd3JpdGUsCisJCQkJCSAgICBydC0+YnVmZmVyX3NpemUpKTsKKworCS8qIGZpcnN0IGJpdCBmcm9tIHdyaXRlIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBvciBjb3VudCAqLworCWZsID0gbWluKGNvdW50LCAoc2l6ZV90KSBydC0+YnVmZmVyX3NpemUgLSBydC0+cnRfd3JpdGUpOworCisJY29weV9mcm9tICgmcnQtPnJ0X2J1ZmZlcltydC0+cnRfd3JpdGVdLCBidWZmZXIsIGZsLCB1c2VyKTsKKworCS8qIGlmIHRoZXJlJ3MgYW55IGxlZnQgY29weSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KKwlpZiggY291bnQgLSBmbCApCisJCWNvcHlfZnJvbSAocnQtPnJ0X2J1ZmZlciwgYnVmZmVyICsgZmwsIGNvdW50IC0gZmwsIHVzZXIpOworCisJcnQtPnJ0X3dyaXRlICs9IGNvdW50OworCXJ0LT5ydF93cml0ZSAlPSBydC0+YnVmZmVyX3NpemU7CisKKwlyZXR1cm4oY291bnQpOworfQorCisKK3N0YXRpYyBpbnQgZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisKKwlyZXR1cm4gcnRseF9vcGVuKG1pbm9yLCAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpOworfQorCitzdGF0aWMgaW50IGZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCisJcmV0dXJuIHJ0bHhfcmVsZWFzZShtaW5vcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmlsZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKK3sKKwlpbnQgbWlub3I7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCisJcG9sbF93YWl0KGZpbGUsICZjaGFubmVsX3dxc1ttaW5vcl0ucnRfcXVldWUsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmY2hhbm5lbF93cXNbbWlub3JdLmx4X3F1ZXVlLCB3YWl0KTsKKworCWlmIChydGx4ID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogZGF0YSBhdmFpbGFibGUgdG8gcmVhZD8gKi8KKwlpZiAocnRseF9yZWFkX3BvbGwobWlub3IsIDApKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwkvKiBzcGFjZSB0byB3cml0ZSAqLworCWlmIChydGx4X3dyaXRlX3BvbGwobWlub3IpKQorCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCwKKwkJCSBsb2ZmX3QgKiBwcG9zKQoreworCWludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisKKwkvKiBkYXRhIGF2YWlsYWJsZT8gKi8KKwlpZiAoIXJ0bHhfcmVhZF9wb2xsKG1pbm9yLCAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpKSB7CisJCXJldHVybiAwOwkvLyAtRUFHQUlOIG1ha2VzIGNhdCB3aGluZ2UKKwl9CisKKwlyZXR1cm4gcnRseF9yZWFkKG1pbm9yLCBidWZmZXIsIGNvdW50LCAxKTsKK30KKworc3RhdGljIHNzaXplX3QgZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlpbnQgbWlub3I7CisJc3RydWN0IHJ0bHhfY2hhbm5lbCAqcnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKLQltaW5vciA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOworCW1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlydCA9ICZydGx4LT5jaGFubmVsW21pbm9yXTsKIAogCS8qIGFueSBzcGFjZSBsZWZ0Li4uICovCi0JaWYgKCFzcGFjZWZyZWUocnQtPnJ0X3JlYWQsIHJ0LT5ydF93cml0ZSwgcnQtPmJ1ZmZlcl9zaXplKSkgeworCWlmICghcnRseF93cml0ZV9wb2xsKG1pbm9yKSkgewogCiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCXJldHVybiAtRUFHQUlOOwpAQCAtMjYzLDYxICs0NjYsNjQgQEAKIAkJYWRkX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW21pbm9yXS5ydF9xdWV1ZSwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCXdoaWxlICghc3BhY2VmcmVlKHJ0LT5ydF9yZWFkLCBydC0+cnRfd3JpdGUsIHJ0LT5idWZmZXJfc2l6ZSkpCisJCXdoaWxlICghcnRseF93cml0ZV9wb2xsKG1pbm9yKSkKIAkJCXNjaGVkdWxlKCk7CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW21pbm9yXS5ydF9xdWV1ZSwgJndhaXQpOwogCX0KIAotCS8qIHRvdGFsIG51bWJlciBvZiBieXRlcyB0byBjb3B5ICovCi0JY291bnQgPSBtaW4oY291bnQsIChzaXplX3Qpc3BhY2VmcmVlKHJ0LT5ydF9yZWFkLCBydC0+cnRfd3JpdGUsIHJ0LT5idWZmZXJfc2l6ZSkgKTsKLQotCS8qIGZpcnN0IGJpdCBmcm9tIHdyaXRlIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBvciBjb3VudCAqLwotCWZsID0gbWluKGNvdW50LCAoc2l6ZV90KSBydC0+YnVmZmVyX3NpemUgLSBydC0+cnRfd3JpdGUpOwotCi0JZmFpbGVkID0gY29weV9mcm9tX3VzZXIoJnJ0LT5ydF9idWZmZXJbcnQtPnJ0X3dyaXRlXSwgYnVmZmVyLCBmbCk7Ci0JaWYgKGZhaWxlZCkgewotCQljb3VudCA9IGZsIC0gZmFpbGVkOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBpZiB0aGVyZSdzIGFueSBsZWZ0IGNvcHkgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCi0JaWYgKGNvdW50IC0gZmwpIHsKLQkJZmFpbGVkID0gY29weV9mcm9tX3VzZXIocnQtPnJ0X2J1ZmZlciwgYnVmZmVyICsgZmwsIGNvdW50IC0gZmwpOwotCQlpZiAoZmFpbGVkKSB7Ci0JCQljb3VudCAtPSBmYWlsZWQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotb3V0OgotCXJ0LT5ydF93cml0ZSArPSBjb3VudDsKLQlydC0+cnRfd3JpdGUgJT0gcnQtPmJ1ZmZlcl9zaXplOwotCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBydGx4X3dyaXRlKG1pbm9yLCAodm9pZCAqKWJ1ZmZlciwgY291bnQsIDEpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydGx4X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHJ0bHhfb3BlbiwKLQkucmVsZWFzZQk9IHJ0bHhfcmVsZWFzZSwKLQkud3JpdGUJCT0gcnRseF93cml0ZSwKLQkucmVhZAkJPSBydGx4X3JlYWQsCi0JLnBvbGwJCT0gcnRseF9wb2xsCisJLm93bmVyID0gICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgIGZpbGVfb3BlbiwKKwkucmVsZWFzZSA9IGZpbGVfcmVsZWFzZSwKKwkud3JpdGUgPSAgIGZpbGVfd3JpdGUsCisJLnJlYWQgPSAgICBmaWxlX3JlYWQsCisJLnBvbGwgPSAgICBmaWxlX3BvbGwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHJ0bHhfaXJxID0geworCS5oYW5kbGVyCT0gcnRseF9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkubmFtZQkJPSAiUlRMWCIsCit9OworCitzdGF0aWMgaW50IHJ0bHhfaXJxX251bSA9IE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9SVExYX0lSUTsKKwogc3RhdGljIGNoYXIgcmVnaXN0ZXJfY2hyZGV2X2ZhaWxlZFtdIF9faW5pdGRhdGEgPQogCUtFUk5fRVJSICJydGx4X21vZHVsZV9pbml0OiB1bmFibGUgdG8gcmVnaXN0ZXIgZGV2aWNlXG4iOwogCi1zdGF0aWMgaW50IF9faW5pdCBydGx4X21vZHVsZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IHJ0bHhfbW9kdWxlX2luaXQodm9pZCkKIHsKKwlpbnQgaTsKKwogCW1ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIG1vZHVsZV9uYW1lLCAmcnRseF9mb3BzKTsKIAlpZiAobWFqb3IgPCAwKSB7CiAJCXByaW50ayhyZWdpc3Rlcl9jaHJkZXZfZmFpbGVkKTsKIAkJcmV0dXJuIG1ham9yOwogCX0KIAorCS8qIGluaXRpYWxpc2UgdGhlIHdhaXQgcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGFubmVsX3dxc1tpXS5ydF9xdWV1ZSk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKKwkJY2hhbm5lbF93cXNbaV0uaW5fb3BlbiA9IDA7CisJfQorCisJLyogc2V0IHVwIG5vdGlmaWVycyAqLworCW5vdGlmeS5zdGFydCA9IHN0YXJ0aW5nOworCW5vdGlmeS5zdG9wID0gc3RvcHBpbmc7CisJdnBlX25vdGlmeShSVExYX1RBUkdfVlBFLCAmbm90aWZ5KTsKKworCWlmIChjcHVfaGFzX3ZpbnQpCisJCXNldF92aV9oYW5kbGVyKE1JUFNfQ1BVX1JUTFhfSVJRLCBydGx4X2Rpc3BhdGNoKTsKKworCXJ0bHhfaXJxLmRldl9pZCA9IHJ0bHg7CisJc2V0dXBfaXJxKHJ0bHhfaXJxX251bSwgJnJ0bHhfaXJxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzAsNSArNTM2LDUgQEAKIG1vZHVsZV9leGl0KHJ0bHhfbW9kdWxlX2V4aXQpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1JUFMgUlRMWCIpOwotTU9EVUxFX0FVVEhPUigiRWxpemFiZXRoIENsYXJrZSwgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4iKTsKK01PRFVMRV9BVVRIT1IoIkVsaXphYmV0aCBPbGRoYW0sIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggMmYyZGM1NC4uYTBhYzBlNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNTY5LDggKzU2OSwxOSBAQAogCXN5cwlzeXNfdGtpbGwJCTIKIAlzeXMJc3lzX3NlbmRmaWxlNjQJCTUKIAlzeXMJc3lzX2Z1dGV4CQk2CisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKgorCSAqIEZvciBGUFUgYWZmaW5pdHkgc2NoZWR1bGluZyBvbiBNSVBTIE1UIHByb2Nlc3NvcnMsIHdlIG5lZWQgdG8KKwkgKiBpbnRlcmNlcHQgc3lzX3NjaGVkX3h4eGFmZmluaXR5KCkgY2FsbHMgdW50aWwgd2UgZ2V0IGEgcHJvcGVyIGhvb2sKKwkgKiBpbiBrZXJuZWwvc2NoZWQuYy4gIENvbnNpZGVyZWQgb25seSB0ZW1wb3Jhcnkgd2Ugb25seSBzdXBwb3J0IHRoZXNlCisJICogaG9va3MgZm9yIHRoZSAzMi1iaXQga2VybmVsIC0gdGhlcmUgaXMgbm8gTUlQUzY0IE1UIHByb2Nlc3NvciBhdG0uCisJICovCisJc3lzCW1pcHNtdF9zeXNfc2NoZWRfc2V0YWZmaW5pdHkJMworCXN5cwltaXBzbXRfc3lzX3NjaGVkX2dldGFmZmluaXR5CTMKKyNlbHNlCiAJc3lzCXN5c19zY2hlZF9zZXRhZmZpbml0eQkzCiAJc3lzCXN5c19zY2hlZF9nZXRhZmZpbml0eQkzCS8qIDQyNDAgKi8KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLwogCXN5cwlzeXNfaW9fc2V0dXAJCTIKIAlzeXMJc3lzX2lvX2Rlc3Ryb3kJCTEKIAlzeXMJc3lzX2lvX2dldGV2ZW50cwk1CkBAIC02MzQsNiArNjQ1LDggQEAKIAlzeXMJc3lzX3BzZWxlY3Q2CQk2CiAJc3lzCXN5c19wcG9sbAkJNQogCXN5cwlzeXNfdW5zaGFyZQkJMQorCXN5cwlzeXNfc3BsaWNlCQk0CisJc3lzCXN5c19zeW5jX2ZpbGVfcmFuZ2UJNwkvKiA0MzA1ICovCiAJLmVuZG0KIAogCS8qIFdlIHByZS1jb21wdXRlIHRoZSBudW1iZXIgb2YgX2luc3RydWN0aW9uXyBieXRlcyBuZWVkZWQgdG8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKaW5kZXggOThiZjI1ZC4uOWJhNzUwOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKQEAgLTQ2MCwzICs0NjAsNSBAQAogCVBUUglzeXNfcHNlbGVjdDYJCQkvKiA1MjYwICovCiAJUFRSCXN5c19wcG9sbAogCVBUUglzeXNfdW5zaGFyZQorCVBUUglzeXNfc3BsaWNlCisJUFRSCXN5c19zeW5jX2ZpbGVfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCAwNWEyYzA1Li45NDJhY2EyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC0zODYsMyArMzg2LDUgQEAKIAlQVFIJc3lzX3BzZWxlY3Q2CiAJUFRSCXN5c19wcG9sbAkJCS8qIDYyNjUgKi8KIAlQVFIJc3lzX3Vuc2hhcmUKKwlQVFIJc3lzX3NwbGljZQorCVBUUglzeXNfc3luY19maWxlX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggMTljNGNhNC4uOGVmYjIzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJUFRSCXN5c19mb3JrCiAJUFRSCXN5c19yZWFkCiAJUFRSCXN5c193cml0ZQotCVBUUglzeXNfb3BlbgkJCS8qIDQwMDUgKi8KKwlQVFIJY29tcGF0X3N5c19vcGVuCQkJLyogNDAwNSAqLwogCVBUUglzeXNfY2xvc2UKIAlQVFIJc3lzX3dhaXRwaWQKIAlQVFIJc3lzX2NyZWF0CkBAIC01MDgsNCArNTA4LDYgQEAKIAlQVFIJc3lzX3BzZWxlY3Q2CiAJUFRSCXN5c19wcG9sbAogCVBUUglzeXNfdW5zaGFyZQorCVBUUglzeXNfc3BsaWNlCisJUFRSCXN5czMyX3N5bmNfZmlsZV9yYW5nZQkJLyogNDMwNSAqLwogCS5zaXplCXN5c19jYWxsX3RhYmxlLC4tc3lzX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwppbmRleCBkY2JmZDI3Li4zOTdhNzBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAkvKiBIQUNLOiBHdWVzcyBpZiB0aGUgc2lnbiBleHRlbnNpb24gd2FzIGZvcmdvdHRlbiAqLwogCWlmIChzdGFydCA+IDB4MDAwMDAwMDA4MDAwMDAwMCAmJiBzdGFydCA8IDB4MDAwMDAwMDBmZmZmZmZmZikKLQkJc3RhcnQgfD0gMHhmZmZmZmZmZjAwMDAwMDAwOworCQlzdGFydCB8PSAweGZmZmZmZmZmMDAwMDAwMDBVTDsKICNlbmRpZgogCiAJZW5kID0gc3RhcnQgKyBzaXplOwpAQCAtMzU1LDggKzM1NSw2IEBACiAJfQogI2VuZGlmCiAKLQltZW1vcnlfcHJlc2VudCgwLCBmaXJzdF91c2FibGVfcGZuLCBtYXhfbG93X3Bmbik7Ci0KIAkvKiBJbml0aWFsaXplIHRoZSBib290LXRpbWUgYWxsb2NhdG9yIHdpdGggbG93IG1lbW9yeSBvbmx5LiAgKi8KIAlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW0oZmlyc3RfdXNhYmxlX3BmbiwgbWF4X2xvd19wZm4pOwogCkBAIC00MTAsNiArNDA4LDcgQEAKIAogCQkvKiBSZWdpc3RlciBsb3dtZW0gcmFuZ2VzICovCiAJCWZyZWVfYm9vdG1lbShQRk5fUEhZUyhjdXJyX3BmbiksIFBGTl9QSFlTKHNpemUpKTsKKwkJbWVtb3J5X3ByZXNlbnQoMCwgY3Vycl9wZm4sIGN1cnJfcGZuICsgc2l6ZSAtIDEpOwogCX0KIAogCS8qIFJlc2VydmUgdGhlIGJvb3RtYXAgbWVtb3J5LiAgKi8KQEAgLTQxOSwxNyArNDE4LDIwIEBACiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKIAlpZiAoaW5pdHJkX3N0YXJ0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgaW5pdHJkX3NpemUgPSAoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfZW5kKSAtICgodW5zaWduZWQgY2hhciAqKWluaXRyZF9zdGFydCk7CisJCXVuc2lnbmVkIGxvbmcgaW5pdHJkX3NpemUgPSAoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfZW5kKSAtCisJCQkoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfc3RhcnQpOworCQljb25zdCBpbnQgd2lkdGggPSBzaXplb2YobG9uZykgKiAyOworCiAJCXByaW50aygiSW5pdGlhbCByYW1kaXNrIGF0OiAweCVwICglbHUgYnl0ZXMpXG4iLAogCQkgICAgICAgKHZvaWQgKilpbml0cmRfc3RhcnQsIGluaXRyZF9zaXplKTsKIAogCQlpZiAoQ1BIWVNBRERSKGluaXRyZF9lbmQpID4gUEZOX1BIWVMobWF4X2xvd19wZm4pKSB7CiAJCQlwcmludGsoImluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5ICIKIAkJCSAgICAgICAiKDB4JTAqTHggPiAweCUwKkx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKLQkJCSAgICAgICBzaXplb2YobG9uZykgKiAyLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpQ1BIWVNBRERSKGluaXRyZF9lbmQpLAotCQkJICAgICAgIHNpemVvZihsb25nKSAqIDIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylQRk5fUEhZUyhtYXhfbG93X3BmbikpOworCQkJICAgICAgIHdpZHRoLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIENQSFlTQUREUihpbml0cmRfZW5kKSwKKwkJCSAgICAgICB3aWR0aCwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBQRk5fUEhZUyhtYXhfbG93X3BmbikpOwogCQkJaW5pdHJkX3N0YXJ0ID0gaW5pdHJkX2VuZCA9IDA7CiAJCQlpbml0cmRfcmVzZXJ2ZV9ib290bWVtID0gMDsKIAkJfQpAQCAtNTI5LDcgKzUzMSwxMCBAQAogCiBpbnQgX19pbml0IGZwdV9kaXNhYmxlKGNoYXIgKnMpCiB7Ci0JY3B1X2RhdGFbMF0ub3B0aW9ucyAmPSB+TUlQU19DUFVfRlBVOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKKwkJY3B1X2RhdGFbaV0ub3B0aW9ucyAmPSB+TUlQU19DUFVfRlBVOwogCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaCBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLWNvbW1vbi5oCmluZGV4IDNjYTc4NjIuLmNlNmNiOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLWNvbW1vbi5oCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLWNvbW1vbi5oCkBAIC0zMSw3ICszMSw2IEBACiAJc2F2ZV9ncF9yZWcoMzEpOwogI3VuZGVmIHNhdmVfZ3BfcmVnCiAKLSNpZmRlZiBDT05GSUdfMzJCSVQKIAllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5oaSwgJnNjLT5zY19tZGhpKTsKIAllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5sbywgJnNjLT5zY19tZGxvKTsKIAlpZiAoY3B1X2hhc19kc3ApIHsKQEAgLTQzLDIwICs0Miw2IEBACiAJCWVyciB8PSBfX3B1dF91c2VyKG1mbG8zKCksICZzYy0+c2NfbG8zKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIocmRkc3AoRFNQX01BU0spLCAmc2MtPnNjX2RzcCk7CiAJfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+aGksICZzYy0+c2NfaGlbMF0pOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmxvLCAmc2MtPnNjX2xvWzBdKTsKLQlpZiAoY3B1X2hhc19kc3ApIHsKLQkJZXJyIHw9IF9fcHV0X3VzZXIobWZoaTEoKSwgJnNjLT5zY19oaVsxXSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKG1mbG8xKCksICZzYy0+c2NfbG9bMV0pOwotCQllcnIgfD0gX19wdXRfdXNlcihtZmhpMigpLCAmc2MtPnNjX2hpWzJdKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIobWZsbzIoKSwgJnNjLT5zY19sb1syXSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKG1maGkzKCksICZzYy0+c2NfaGlbM10pOwotCQllcnIgfD0gX19wdXRfdXNlcihtZmxvMygpLCAmc2MtPnNjX2xvWzNdKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIocmRkc3AoRFNQX01BU0spLCAmc2MtPnNjX2RzcCk7Ci0JfQotI2VuZGlmCiAKIAllcnIgfD0gX19wdXRfdXNlcighIXVzZWRfbWF0aCgpLCAmc2MtPnNjX3VzZWRfbWF0aCk7CiAKQEAgLTkyLDcgKzc3LDYgQEAKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2suZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGw7CiAKIAllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5jcDBfZXBjLCAmc2MtPnNjX3BjKTsKLSNpZmRlZiBDT05GSUdfMzJCSVQKIAllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5oaSwgJnNjLT5zY19tZGhpKTsKIAllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5sbywgJnNjLT5zY19tZGxvKTsKIAlpZiAoY3B1X2hhc19kc3ApIHsKQEAgLTEwNCwyMCArODgsNiBAQAogCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2xvMyk7IG10bG8zKHRyZWcpOwogCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2RzcCk7IHdyZHNwKHRyZWcsIERTUF9NQVNLKTsKIAl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5oaSwgJnNjLT5zY19oaVswXSk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+bG8sICZzYy0+c2NfbG9bMF0pOwotCWlmIChjcHVfaGFzX2RzcCkgewotCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2hpWzFdKTsgbXRoaTEodHJlZyk7Ci0JCWVyciB8PSBfX2dldF91c2VyKHRyZWcsICZzYy0+c2NfbG9bMV0pOyBtdGhpMSh0cmVnKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19oaVsyXSk7IG10aGkyKHRyZWcpOwotCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2xvWzJdKTsgbXRoaTIodHJlZyk7Ci0JCWVyciB8PSBfX2dldF91c2VyKHRyZWcsICZzYy0+c2NfaGlbM10pOyBtdGhpMyh0cmVnKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19sb1szXSk7IG10aGkzKHRyZWcpOwotCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2RzcCk7IHdyZHNwKHRyZWcsIERTUF9NQVNLKTsKLQl9Ci0jZW5kaWYKIAogI2RlZmluZSByZXN0b3JlX2dwX3JlZyhpKSBkbyB7CQkJCQkJXAogCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnJlZ3NbaV0sICZzYy0+c2NfcmVnc1tpXSk7CQlcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcF9tdC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYwpzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSBhcmNoL21pcHMva2VybmVsL3NtcF9tdC5jCnJlbmFtZSB0byBhcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCmluZGV4IDk5M2I4YmYuLjU3NzcwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wX210LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYwpAQCAtMSw4ICsxLDQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIEVsaXphYmV0aCBDbGFya2UgKGJldGhAbWlwcy5jb20pCi0gKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKICAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KQEAgLTE2LDYgKzEyLDEwIEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAwNSwgMDYgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqICAgIEVsaXphYmV0aCBDbGFya2UgKGJldGhAbWlwcy5jb20pCisgKiAgICBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0zMyw4ICszNCw4IEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21hbHRhaW50Lmg+CisjaW5jbHVkZSA8YXNtL21pcHNfbXQuaD4KKyNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvbWFsdGFpbnQuaD4gIC8qIFRoaXMgaXMgZipja2luZyB3cm9uZyAqLwogCiAjZGVmaW5lIE1JUFNfQ1BVX0lQSV9SRVNDSEVEX0lSUSAwCiAjZGVmaW5lIE1JUFNfQ1BVX0lQSV9DQUxMX0lSUSAxCkBAIC02Niw2ICs2Nyw3IEBACiAJaWYgKCFjcHVfaGFzX21pcHNtdCkKIAkJcmV0dXJuOwogCisJLyogRW5hYmxlIFZQQyAqLwogCXNldF9jMF9tdnBjb250cm9sKE1WUENPTlRST0xfVlBDKTsKIAogCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsKQEAgLTEwNiwxMiArMTA4LDEyIEBACiAKIHN0YXRpYyB2b2lkIGlwaV9yZXNjaGVkX2Rpc3BhdGNoIChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlkb19JUlEoTUlQU19DUFVfSVBJX1JFU0NIRURfSVJRLCByZWdzKTsKKwlkb19JUlEoTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX0lQSV9SRVNDSEVEX0lSUSwgcmVncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwaV9jYWxsX2Rpc3BhdGNoIChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlkb19JUlEoTUlQU19DUFVfSVBJX0NBTExfSVJRLCByZWdzKTsKKwlkb19JUlEoTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX0lQSV9DQUxMX0lSUSwgcmVncyk7CiB9CiAKIGlycXJldHVybl90IGlwaV9yZXNjaGVkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMTQ4LDYgKzE1MCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBpLCBudW07CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorCS8qIElmIHdlIGhhdmUgYW4gRlBVLCBlbnJvbGwgb3Vyc2VsdmVzIGluIHRoZSBGUFUtZnVsbCBtYXNrICovCisJaWYgKGNwdV9oYXNfZnB1KQorCQljcHVfc2V0KDAsIG10X2ZwdV9jcHVtYXNrKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLwogCWlmICghY3B1X2hhc19taXBzbXQpCiAJCXJldHVybjsKIApAQCAtMTU1LDYgKzE2Miw4IEBACiAJZHZwZSgpOwogCWRtdCgpOwogCisJbWlwc19tdF9zZXRfY3B1b3B0aW9ucygpOworCiAJLyogUHV0IE1WUEUncyBpbnRvICdjb25maWd1cmF0aW9uIHN0YXRlJyAqLwogCXNldF9jMF9tdnBjb250cm9sKE1WUENPTlRST0xfVlBDKTsKIApAQCAtMTg5LDExICsxOTgsMTMgQEAKIAogCQkJaWYgKGkgIT0gMCkgewogCQkJCXdyaXRlX3ZwZV9jMF9zdGF0dXMoKHJlYWRfYzBfc3RhdHVzKCkgJiB+KFNUMF9JTSB8IFNUMF9JRSB8IFNUMF9LU1UpKSB8IFNUMF9DVTApOwotCQkJCXdyaXRlX3ZwZV9jMF9jYXVzZShyZWFkX3ZwZV9jMF9jYXVzZSgpICYgfkNBVVNFRl9JUCk7CiAKIAkJCQkvKiBzZXQgY29uZmlnIHRvIGJlIHRoZSBzYW1lIGFzIHZwZTAsIHBhcnRpY3VsYXJseSBrc2VnMCBjb2hlcmVuY3kgYWxnICovCiAJCQkJd3JpdGVfdnBlX2MwX2NvbmZpZyggcmVhZF9jMF9jb25maWcoKSk7CiAKKwkJCQkvKiBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHNvZnR3YXJlIGludGVycnVwdHMgcGVuZGluZyAqLworCQkJCXdyaXRlX3ZwZV9jMF9jYXVzZShyZWFkX3ZwZV9jMF9jYXVzZSgpICYgfihDX1NXMXxDX1NXMCkpOworCiAJCQkJLyogUHJvcGFnYXRlIENvbmZpZzcgKi8KIAkJCQl3cml0ZV92cGVfYzBfY29uZmlnNyhyZWFkX2MwX2NvbmZpZzcoKSk7CiAJCQl9CkBAIC0yMzMsMTYgKzI0NCwxNiBAQAogCS8qIFdlJ2xsIHdhaXQgdW50aWwgc3RhcnRpbmcgdGhlIHNlY29uZGFyaWVzIGJlZm9yZSBzdGFydGluZyBNVlBFICovCiAKIAlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCAlaSBhdmFpbGFibGUgc2Vjb25kYXJ5IENQVShzKVxuIiwgbnVtKTsKK30KIAordm9pZCBfX2luaXQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQorewogCS8qIHNldCB1cCBpcGkgaW50ZXJydXB0cyAqLwogCWlmIChjcHVfaGFzX3ZpbnQpIHsKIAkJc2V0X3ZpX2hhbmRsZXIgKE1JUFNfQ1BVX0lQSV9SRVNDSEVEX0lSUSwgaXBpX3Jlc2NoZWRfZGlzcGF0Y2gpOwogCQlzZXRfdmlfaGFuZGxlciAoTUlQU19DUFVfSVBJX0NBTExfSVJRLCBpcGlfY2FsbF9kaXNwYXRjaCk7CiAJfQotfQogCi12b2lkIF9faW5pdCBwbGF0X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17CiAJY3B1X2lwaV9yZXNjaGVkX2lycSA9IE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9JUElfUkVTQ0hFRF9JUlE7CiAJY3B1X2lwaV9jYWxsX2lycSA9IE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9JUElfQ0FMTF9JUlE7CiAKQEAgLTI4Nyw3ICsyOTgsOCBAQAogCS8qIGdsb2JhbCBwb2ludGVyICovCiAJd3JpdGVfdGNfZ3ByX2dwKCh1bnNpZ25lZCBsb25nKWdwKTsKIAotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylncCwgKHVuc2lnbmVkIGxvbmcpKGdwICsgMSkpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylncCwKKwkgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKGdwICsgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfaW5mbykpKTsKIAogCS8qIGZpbmFsbHkgb3V0IG9mIGNvbmZpZ3VyYXRpb24gYW5kIGludG8gY2hhb3MgKi8KIAljbGVhcl9jMF9tdnBjb250cm9sKE1WUENPTlRST0xfVlBDKTsKQEAgLTMwNSw2ICszMTcsMTIgQEAKIHsKIAl3cml0ZV9jMF9jb21wYXJlKHJlYWRfYzBfY291bnQoKSArICg4KiBtaXBzX2hwdF9mcmVxdWVuY3kvSFopKTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCisJLyogSWYgd2UgaGF2ZSBhbiBGUFUsIGVucm9sbCBvdXJzZWx2ZXMgaW4gdGhlIEZQVS1mdWxsIG1hc2sgKi8KKwlpZiAoY3B1X2hhc19mcHUpCisJCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtdF9mcHVfY3B1bWFzayk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKwogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKaW5kZXggNzhkMTcxYi4uMjk4ZjgyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogY3B1bWFza190IHBoeXNfY3B1X3ByZXNlbnRfbWFwOwkJLyogQml0bWFzayBvZiBhdmFpbGFibGUgQ1BVcyAqLwogdm9sYXRpbGUgY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwkvKiBCaXRtYXNrIG9mIHN0YXJ0ZWQgc2Vjb25kYXJpZXMgKi8KIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsJCS8qIEJpdG1hc2sgb2YgY3VycmVudGx5IG9ubGluZSBDUFVzICovCkBAIC04NSw2ICs4OSwxMCBAQAogewogCXVuc2lnbmVkIGludCBjcHU7CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyogT25seSBkbyBjcHVfcHJvYmUgZm9yIGZpcnN0IFRDIG9mIENQVSAqLworCWlmICgocmVhZF9jMF90Y2JpbmQoKSAmIFRDQklORF9DVVJUQykgPT0gMCkKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJY3B1X3Byb2JlKCk7CiAJY3B1X3JlcG9ydCgpOwogCXBlcl9jcHVfdHJhcF9pbml0KCk7CkBAIC0xNzksMTEgKzE4NywxMyBAQAogCWlmICh3YWl0KQogCQl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpICE9IGNwdXMpCiAJCQliYXJyaWVyKCk7CisJY2FsbF9kYXRhID0gTlVMTDsKIAlzcGluX3VubG9jaygmc21wX2NhbGxfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAorCiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKQogewogCXZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbykgPSBjYWxsX2RhdGEtPmZ1bmM7CkBAIC0yMzcsNiArMjQ3LDkgQEAKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IDA7CiAJc21wX3R1bmVfc2NoZWR1bGluZygpOwogCXBsYXRfcHJlcGFyZV9jcHVzKG1heF9jcHVzKTsKKyNpZm5kZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJY3B1X3ByZXNlbnRfbWFwID0gY3B1X3Bvc3NpYmxlX21hcDsKKyNlbmRpZgogfQogCiAvKiBwcmVsb2FkIFNNUCBzdGF0ZSBmb3IgYm9vdCBjcHUgKi8KQEAgLTQzMiw3ICs0NDUsNyBAQAogCWludCBjcHU7CiAJaW50IHJldDsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKIAkJcmV0ID0gcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBjcHUpLCBjcHUsIE5VTEwpOwogCQlpZiAocmV0KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidG9wb2xvZ3lfaW5pdDogcmVnaXN0ZXJfY3B1ICVkICIKQEAgLTQ0Niw1ICs0NTksMyBAQAogCiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX29uZSk7Ci1FWFBPUlRfU1lNQk9MKGNwdV9kYXRhKTsKLUVYUE9SVF9TWU1CT0woc3luY2hyb25pemVfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQ2NTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLWFzbS5TCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQXNzZW1ibHkgTGFuZ3VhZ2UgRnVuY3Rpb25zIGZvciBNSVBTIE1UIFNNVEMgc3VwcG9ydAorICovCisKKy8qCisgKiBUaGlzIGZpbGUgc2hvdWxkIGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvbmx5IGlmIENPTkZJR19NSVBTX01UX1NNVEMgaXMgc2V0LiAqLworCisjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgorI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgorI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KKworLyoKKyAqICJTb2Z0d2FyZSBJbnRlcnJ1cHQiIGxpbmthZ2UuCisgKgorICogVGhpcyBpcyBpbnZva2VkIHdoZW4gYW4gIkludGVycnVwdCIgaXMgc2VudCBmcm9tIG9uZSBUQyB0byBhbm90aGVyLAorICogd2hlcmUgdGhlIFRDIHRvIGJlIGludGVycnVwdGVkIGlzIGhhbHRlZCwgaGFzIGl0J3MgUmVzdGFydCBhZGRyZXNzCisgKiBhbmQgU3RhdHVzIHZhbHVlcyBzYXZlZCBieSB0aGUgInJlbW90ZSBjb250cm9sIiB0aHJlYWQsIHRoZW4gbW9kaWZpZWQKKyAqIHRvIGNhdXNlIGV4ZWN1dGlvbiB0byBiZWdpbiBoZXJlLCBpbiBrZW5lbCBtb2RlLiBUaGlzIGNvZGUgdGhlbgorICogZGlzZ3Vpc2VzIHRoZSBUQyBzdGF0ZSBhcyB0aGF0IG9mIGFuIGV4Y2VwdGlvbiBhbmQgdHJhbnNmZXJzCisgKiBjb250cm9sIHRvIHRoZSBnZW5lcmFsIGV4Y2VwdGlvbiBvciB2ZWN0b3JlZCBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworCS5zZXQgbm9yZW9yZGVyCisKKy8qCitUaGUgX19zbXRjX2lwaV92ZWN0b3Igd291bGQgdXNlIGswIGFuZCBrMSBhcyB0ZW1wb3JhcmllcyBhbmQKKzEpIFNldCBFWEwgKHRoaXMgaXMgcGVyLVZQRSwgc28gdGhpcyBjYW4ndCBiZSBkb25lIGJ5IHByb3h5ISkKKzIpIFJlc3RvcmUgdGhlIEsvQ1UgYW5kIElYTVQgYml0cyB0byB0aGUgcHJlICJleGNlcHRpb24iIHN0YXRlCisgICAoRVhMIG1lYW5zIG5vIGludGVycnVwdHMgYW5kIGFjY2VzcyB0byB0aGUga2VybmVsIG1hcCkuCiszKSBTZXQgRVBDIHRvIGJlIHRoZSBzYXZlZCB2YWx1ZSBvZiBUQ1Jlc3RhcnQuCis0KSBKdW1wIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlciBlbnRyeSBwb2ludCBwYXNzZWQgYnkgdGhlIHNlbmRlci4KKworQ0FOIFdFIFBST1ZFIFRIQVQgV0UgV09OJ1QgRE8gVEhJUyBJRiBJTlRTIERJU0FCTEVEPz8KKyovCisKKy8qCisgKiBSZXZpbGVkIGFuZCBzbGFuZGVyZWQgdmlzaW9uOiBTZXQgRVhMIGFuZCByZXN0b3JlIEsvQ1UvSVhNVAorICogc3RhdGUgb2YgcHJlLWhhbHQgdGhyZWFkLCB0aGVuIHNhdmUgZXZlcnl0aGluZyBhbmQgY2FsbAorICogdGhvdWdodCBzb21lIGZ1bmN0aW9uIHBvaW50ZXIgdG8gaW1hZ2luYXJ5X2V4Y2VwdGlvbiwgd2hpY2gKKyAqIHdpbGwgcGFyc2UgYSByZWdpc3RlciB2YWx1ZSBvciBtZW1vcnkgbWVzc2FnZSBxdWV1ZSB0bworICogZGVsaXZlciB0aGluZ3MgbGlrZSBpbnRlcnByb2Nlc3NvciBpbnRlcnJ1cHRzLiBPbiByZXR1cm4KKyAqIGZyb20gdGhhdCBmdW5jdGlvbiwganVtcCB0byB0aGUgZ2xvYmFsIHJldF9mcm9tX2lycSBjb2RlCisgKiB0byBpbnZva2UgdGhlIHNjaGVkdWxlciBhbmQgcmV0dXJuIGFzIGFwcHJvcHJpYXRlLgorICovCisKKyNkZWZpbmUgUFRfUEFEU0xPVDQgKFBUX1IwLTgpCisjZGVmaW5lIFBUX1BBRFNMT1Q1IChQVF9SMC00KQorCisJLnRleHQKKwkuYWxpZ24gNQorRkVYUE9SVChfX3NtdGNfaXBpX3ZlY3RvcikKKwkuc2V0CW5vYXQKKwkvKiBEaXNhYmxlIHRocmVhZCBzY2hlZHVsaW5nIHRvIG1ha2UgU3RhdHVzIHVwZGF0ZSBhdG9taWMgKi8KKwlETVQJMjcJCQkJCSMgZG10CWsxCisJZWhiCisJLyogU2V0IEVYTCAqLworCW1mYzAJazAsQ1AwX1NUQVRVUworCW9yaQlrMCxrMCxTVDBfRVhMCisJbXRjMAlrMCxDUDBfU1RBVFVTCisJZWhiCisJLyogVGhyZWFkIHNjaGVkdWxpbmcgbm93IGluaGliaXRlZCBieSBFWEwuIFJlc3RvcmUgVEUgc3RhdGUuICovCisJYW5kaQlrMSxrMSxWUEVDT05UUk9MX1RFCisJYmVxeglrMSwxZgorCWVtdAorMToKKwkvKgorCSAqIFRoZSBJUEkgc2VuZGVyIGhhcyBwdXQgc29tZSBpbmZvcm1hdGlvbiBvbiB0aGUgYW50aWNpcGF0ZWQKKwkgKiBrZXJuZWwgc3RhY2sgZnJhbWUuICBJZiB3ZSB3ZXJlIGluIHVzZXIgbW9kZSwgdGhpcyB3aWxsIGJlCisJICogYnVpbHQgYWJvdmUgdGhlIHNhdmVkIGtlcm5lbCBTUC4gIElmIHdlIHdlcmUgYWxyZWFkeSBpbiB0aGUKKwkgKiBrZXJuZWwsIGl0IHdpbGwgYmUgYnVpbHQgYWJvdmUgdGhlIGN1cnJlbnQgQ1BVIFNQLgorCSAqCisJICogV2VyZSB3ZSBpbiBrZXJuZWwgbW9kZSwgYXMgaW5kaWNhdGVkIGJ5IENVMD8KKwkgKi8KKwlzbGwJazEsazAsMworCS5zZXQgbm9yZW9yZGVyCisJYmx0eglrMSwyZgorCW1vdmUJazEsc3AKKwkuc2V0IHJlb3JkZXIKKwkvKgorCSAqIElmIHByZXZpb3VzbHkgaW4gdXNlciBtb2RlLCBzZXQgQ1UwIGFuZCB1c2Uga2VybmVsIHN0YWNrLgorCSAqLworCWxpCWsxLFNUMF9DVTAKKwlvcglrMSxrMSxrMAorCW10YzAJazEsQ1AwX1NUQVRVUworCWVoYgorCWdldF9zYXZlZF9zcAorCS8qIEludGVycnVwdGluZyBUQyB3aWxsIGhhdmUgcHJlLXNldCB2YWx1ZXMgaW4gc2xvdHMgaW4gdGhlIG5ldyBmcmFtZSAqLworMjoJc3VidQlrMSxrMSxQVF9TSVpFCisJLyogTG9hZCBUQ1N0YXR1cyBWYWx1ZSAqLworCWx3CWswLFBUX1RDU1RBVFVTKGsxKQorCS8qIFdyaXRlIGl0IHRvIFRDU3RhdHVzIHRvIHJlc3RvcmUgQ1UvS1NVL0lYTVQgc3RhdGUgKi8KKwltdGMwCWswLCQyLDEKKwllaGIKKwlsdwlrMCxQVF9FUEMoazEpCisJbXRjMAlrMCxDUDBfRVBDCisJLyogU2F2ZSBhbGwgd2lsbCByZWR1bmRhbnRseSByZWNvbXB1dGUgdGhlIFNQLCBidXQgdXNlIGl0IGZvciBub3cgKi8KKwlTQVZFX0FMTAorCUNMSQorCW1vdmUJYTAsc3AKKwkvKiBGdW5jdGlvbiB0byBiZSBpbnZva2VkIHBhc3NlZCBzdGFjayBwYWQgc2xvdCA1ICovCisJbHcJdDAsUFRfUEFEU0xPVDUoc3ApCisJLyogQXJndW1lbnQgZnJvbSBzZW5kZXIgcGFzc2VkIGluIHN0YWNrIHBhZCBzbG90IDQgKi8KKwlsdwlhMSxQVF9QQURTTE9UNChzcCkKKwlqYWxyCXQwCisJbm9wCisJaglyZXRfZnJvbV9pcnEKKwlub3AKKworLyoKKyAqIENhbGxlZCBmcm9tIGlkbGUgbG9vcCB0byBwcm92b2tlIHByb2Nlc3Npbmcgb2YgcXVldWVkIElQSXMKKyAqIEZpcnN0IElQSSBtZXNzYWdlIGluIHF1ZXVlIHBhc3NlZCBhcyBhcmd1bWVudC4KKyAqLworCitMRUFGKHNlbGZfaXBpKQorCS8qIEJlZm9yZSBhbnl0aGluZyBlbHNlLCBibG9jayBpbnRlcnJ1cHRzICovCisJbWZjMAl0MCxDUDBfVENTVEFUVVMKKwlvcmkJdDEsdDAsVENTVEFUVVNfSVhNVAorCW10YzAJdDEsQ1AwX1RDU1RBVFVTCisJZWhiCisJLyogV2Uga25vdyB3ZSdyZSBpbiBrZXJuZWwgbW9kZSwgc28gcHJlcGFyZSBzdGFjayBmcmFtZSAqLworCXN1YnUJdDEsc3AsUFRfU0laRQorCXN3CXJhLFBUX0VQQyh0MSkKKwlzdwlhMCxQVF9QQURTTE9UNCh0MSkKKwlsYQl0MixpcGlfZGVjb2RlCisJc3cJdDIsUFRfUEFEU0xPVDUodDEpCisJLyogU2F2ZSBwcmUtZGlzYWJsZSB2YWx1ZSBvZiBUQ1N0YXR1cyAqLworCXN3CXQwLFBUX1RDU1RBVFVTKHQxKQorCWoJX19zbXRjX2lwaV92ZWN0b3IKKwlub3AKK0VORChzZWxmX2lwaSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1wcm9jLmMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMtcHJvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMzcwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMtcHJvYy5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiAvcHJvYyBob29rcyBmb3IgU01UQyBrZXJuZWwKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNaXBzIFRlY2hub2xvZ2llcywgSW5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSA8YXNtL3NtdGNfcHJvYy5oPgorCisvKgorICogL3Byb2MgZGlhZ25vc3RpYyBhbmQgc3RhdGlzdGljcyBob29rcworICovCisKKy8qCisgKiBTdGF0aXN0aWNzIGdhdGhlcmVkCisgKi8KK3Vuc2lnbmVkIGxvbmcgc2VsZmlwaXNbTlJfQ1BVU107CisKK3N0cnVjdCBzbXRjX2NwdV9wcm9jIHNtdGNfY3B1X3N0YXRzW05SX0NQVVNdOworCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzbXRjX3N0YXRzOworCithdG9taWNfdCBzbXRjX2ZwdV9yZWNvdmVyaWVzOworCitzdGF0aWMgaW50IHByb2NfcmVhZF9zbXRjKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCB0b3RhbGVuID0gMDsKKwlpbnQgbGVuOworCWludCBpOworCWV4dGVybiB1bnNpZ25lZCBsb25nIGViYXNlOworCisJbGVuID0gc3ByaW50ZihwYWdlLCAiU01UQyBTdGF0dXMgV29yZDogMHglMDh4XG4iLCBzbXRjX3N0YXR1cyk7CisJdG90YWxlbiArPSBsZW47CisJcGFnZSArPSBsZW47CisJbGVuID0gc3ByaW50ZihwYWdlLCAiQ29uZmlnNzogMHglMDh4XG4iLCByZWFkX2MwX2NvbmZpZzcoKSk7CisJdG90YWxlbiArPSBsZW47CisJcGFnZSArPSBsZW47CisJbGVuID0gc3ByaW50ZihwYWdlLCAiRUJBU0U6IDB4JTA4bHhcbiIsIGViYXNlKTsKKwl0b3RhbGVuICs9IGxlbjsKKwlwYWdlICs9IGxlbjsKKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICJDb3VudGVyIEludGVycnVwdHMgdGFrZW4gcGVyIENQVSAoVEMpXG4iKTsKKwl0b3RhbGVuICs9IGxlbjsKKwlwYWdlICs9IGxlbjsKKwlmb3IgKGk9MDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlZDogJWxkXG4iLCBpLCBzbXRjX2NwdV9zdGF0c1tpXS50aW1lcmludHMpOworCQl0b3RhbGVuICs9IGxlbjsKKwkJcGFnZSArPSBsZW47CisJfQorCWxlbiA9IHNwcmludGYocGFnZSwgIlNlbGYtSVBJcyBieSBDUFU6XG4iKTsKKwl0b3RhbGVuICs9IGxlbjsKKwlwYWdlICs9IGxlbjsKKwlmb3IoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJbGVuID0gc3ByaW50ZihwYWdlLCAiJWQ6ICVsZFxuIiwgaSwgc210Y19jcHVfc3RhdHNbaV0uc2VsZmlwaXMpOworCQl0b3RhbGVuICs9IGxlbjsKKwkJcGFnZSArPSBsZW47CisJfQorCWxlbiA9IHNwcmludGYocGFnZSwgIiVkIFJlY292ZXJpZXMgb2YgXCJzdG9sZW5cIiBGUFVcbiIsCisJICAgICAgICAgICAgICBhdG9taWNfcmVhZCgmc210Y19mcHVfcmVjb3ZlcmllcykpOworCXRvdGFsZW4gKz0gbGVuOworCXBhZ2UgKz0gbGVuOworCisJcmV0dXJuIHRvdGFsZW47Cit9CisKK3ZvaWQgaW5pdF9zbXRjX3N0YXRzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTxOUl9DUFVTOyBpKyspIHsKKwkJc210Y19jcHVfc3RhdHNbaV0udGltZXJpbnRzID0gMDsKKwkJc210Y19jcHVfc3RhdHNbaV0uc2VsZmlwaXMgPSAwOworCX0KKworCWF0b21pY19zZXQoJnNtdGNfZnB1X3JlY292ZXJpZXMsIDApOworCisJc210Y19zdGF0cyA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInNtdGMiLCAwNDQ0LCBOVUxMLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfcmVhZF9zbXRjLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4ZTUyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC0wLDAgKzEsMTMyMiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA0IE1pcHMgVGVjaG5vbG9naWVzLCBJbmMgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vc210Yy5oPgorI2luY2x1ZGUgPGFzbS9zbXRjX2lwaS5oPgorI2luY2x1ZGUgPGFzbS9zbXRjX3Byb2MuaD4KKworLyoKKyAqIFRoaXMgZmlsZSBzaG91bGQgYmUgYnVpbHQgaW50byB0aGUga2VybmVsIG9ubHkgaWYgQ09ORklHX01JUFNfTVRfU01UQyBpcyBzZXQuCisgKi8KKworLyoKKyAqIE1JUFNDUFVfSU5UX0JBU0UgaXMgaWRlbnRpY2FsbHkgZGVmaW5lZCBpbiBib3RoCisgKiBhc20tbWlwcy9taXBzLWJvYXJkcy9tYWx0YWludC5oIGFuZCBhc20tbWlwcy9taXBzLWJvYXJkcy9zaW1pbnQuaCwKKyAqIGJ1dCBhcyB5ZXQgdGhlcmUncyBubyBwcm9wZXJseSBvcmdhbml6ZWQgaW5jbHVkZSBzdHJ1Y3R1cmUgdGhhdAorICogd2lsbCBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgKmludC5oIGZpbGUgd2lsbCBiZSBpbmNsdWRlZCBmb3IgYQorICogZ2l2ZW4gcGxhdGZvcm0gYnVpbGQuCisgKi8KKworI2RlZmluZSBNSVBTQ1BVX0lOVF9CQVNFCTE2CisKKyNkZWZpbmUgTUlQU19DUFVfSVBJX0lSUQkxCisKKyNkZWZpbmUgTE9DS19NVF9QUkEoKSBcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCisJbXRmbGFncyA9IGRtdCgpCisKKyNkZWZpbmUgVU5MT0NLX01UX1BSQSgpIFwKKwllbXQobXRmbGFncyk7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncykKKworI2RlZmluZSBMT0NLX0NPUkVfUFJBKCkgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCW10ZmxhZ3MgPSBkdnBlKCkKKworI2RlZmluZSBVTkxPQ0tfQ09SRV9QUkEoKSBcCisJZXZwZShtdGZsYWdzKTsgXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQorCisvKgorICogRGF0YSBzdHJ1Y3R1cmVzIHB1cmVseSBhc3NvY2lhdGVkIHdpdGggU01UQyBwYXJhbGxlbGlzbQorICovCisKKworLyoKKyAqIFRhYmxlIGZvciB0cmFja2luZyBBU0lEcyB3aG9zZSBsaWZldGltZSBpcyBwcm9sb25nZWQuCisgKi8KKworYXNpZHVzZSBzbXRjX2xpdmVfYXNpZFtNQVhfU01UQ19UTEJTXVtNQVhfU01UQ19BU0lEU107CisKKy8qCisgKiBDbG9jayBpbnRlcnJ1cHQgImxhdGNoIiBidWZmZXJzLCBwZXIgIkNQVSIKKyAqLworCit1bnNpZ25lZCBpbnQgaXBpX3RpbWVyX2xhdGNoW05SX0NQVVNdOworCisvKgorICogTnVtYmVyIG9mIEludGVyUHJvY2Vzc29yIEludGVydXB0IChJUEkpIG1lc3NhZ2UgYnVmZmVycyB0byBhbGxvY2F0ZQorICovCisKKyNkZWZpbmUgSVBJQlVGX1BFUl9DUFUgNAorCitzdHJ1Y3Qgc210Y19pcGlfcSBJUElRW05SX0NQVVNdOworc3RydWN0IHNtdGNfaXBpX3EgZnJlZUlQSXE7CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KKwordm9pZCBpcGlfZGVjb2RlKHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBzbXRjX2lwaSAqKTsKK3ZvaWQgcG9zdF9kaXJlY3RfaXBpKGludCBjcHUsIHN0cnVjdCBzbXRjX2lwaSAqcGlwaSk7Cit2b2lkIHNldHVwX2Nyb3NzX3ZwZV9pbnRlcnJ1cHRzKHZvaWQpOwordm9pZCBpbml0X3NtdGNfc3RhdHModm9pZCk7CisKKy8qIEdsb2JhbCBTTVRDIFN0YXR1cyAqLworCit1bnNpZ25lZCBpbnQgc210Y19zdGF0dXMgPSAwOworCisvKiBCb290IGNvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uIG92ZXJyaWRlcyAqLworCitzdGF0aWMgaW50IHZwZWxpbWl0ID0gMDsKK3N0YXRpYyBpbnQgdGNsaW1pdCA9IDA7CitzdGF0aWMgaW50IGlwaWJ1ZmZlcnMgPSAwOworc3RhdGljIGludCBub3N0bGIgPSAwOworc3RhdGljIGludCBhc2lkbWFzayA9IDA7Cit1bnNpZ25lZCBsb25nIHNtdGNfYXNpZF9tYXNrID0gMHhmZjsKKworc3RhdGljIGludCBfX2luaXQgbWF4dnBlcyhjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmdnBlbGltaXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtYXh0Y3MoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJnRjbGltaXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpcGlidWZzKGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZpcGlidWZmZXJzKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgc3RsYl9kaXNhYmxlKGNoYXIgKnMpCit7CisJbm9zdGxiID0gMTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgYXNpZG1hc2tfc2V0KGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZhc2lkbWFzayk7CisJc3dpdGNoKGFzaWRtYXNrKSB7CisJY2FzZSAweDE6CisJY2FzZSAweDM6CisJY2FzZSAweDc6CisJY2FzZSAweGY6CisJY2FzZSAweDFmOgorCWNhc2UgMHgzZjoKKwljYXNlIDB4N2Y6CisJY2FzZSAweGZmOgorCQlzbXRjX2FzaWRfbWFzayA9ICh1bnNpZ25lZCBsb25nKWFzaWRtYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIklMTEVHQUwgQVNJRCBtYXNrIDB4JXggZnJvbSBjb21tYW5kIGxpbmVcbiIsIGFzaWRtYXNrKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm1heHZwZXM9IiwgbWF4dnBlcyk7CitfX3NldHVwKCJtYXh0Y3M9IiwgbWF4dGNzKTsKK19fc2V0dXAoImlwaWJ1ZnM9IiwgaXBpYnVmcyk7CitfX3NldHVwKCJub3N0bGIiLCBzdGxiX2Rpc2FibGUpOworX19zZXR1cCgiYXNpZG1hc2s9IiwgYXNpZG1hc2tfc2V0KTsKKworLyogRW5hYmxlIGFkZGl0aW9uYWwgZGVidWcgY2hlY2tzIGJlZm9yZSBnb2luZyBpbnRvIENQVSBpZGxlIGxvb3AgKi8KKyNkZWZpbmUgU01UQ19JRExFX0hPT0tfREVCVUcKKworI2lmZGVmIFNNVENfSURMRV9IT09LX0RFQlVHCisKK3N0YXRpYyBpbnQgaGFuZ190cmlnID0gMDsKKworc3RhdGljIGludCBfX2luaXQgaGFuZ3RyaWdfZW5hYmxlKGNoYXIgKnMpCit7CisJaGFuZ190cmlnID0gMTsKKwlyZXR1cm4gMTsKK30KKworCitfX3NldHVwKCJoYW5ndHJpZyIsIGhhbmd0cmlnX2VuYWJsZSk7CisKKyNkZWZpbmUgREVGQVVMVF9CTE9DS0VEX0lQSV9MSU1JVCAzMgorCitzdGF0aWMgaW50IHRpbWVycV9saW1pdCA9IERFRkFVTFRfQkxPQ0tFRF9JUElfTElNSVQ7CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbnRxKGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZ0aW1lcnFfbGltaXQpOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJ0aW50cT0iLCB0aW50cSk7CisKK2ludCBpbXN0dWNrY291bnRbMl1bOF07CisvKiB2cGVtYXNrIHJlcHJlc2VudHMgSU0vSUUgYml0cyBvZiBwZXItVlBFIFN0YXR1cyByZWdpc3RlcnMsIGxvdy10by1oaWdoICovCitpbnQgdnBlbWFza1syXVs4XSA9IHt7MCwxLDEsMCwwLDAsMCwxfSx7MCwxLDAsMCwwLDAsMCwxfX07CitpbnQgdGNub3Byb2dbTlJfQ1BVU107CitzdGF0aWMgYXRvbWljX3QgaWRsZV9ob29rX2luaXRpYWxpemVkID0gezB9Oworc3RhdGljIGludCBjbG9ja19oYW5nX3JlcG9ydGVkW05SX0NQVVNdOworCisjZW5kaWYgLyogU01UQ19JRExFX0hPT0tfREVCVUcgKi8KKworLyogSW5pdGlhbGl6ZSBzaGFyZWQgVExCIC0gdGhlIHNob3VsZCBwcm9iYWJseSBtaWdyYXRlIHRvIHNtdGNfc2V0dXBfY3B1cygpICovCisKK3ZvaWQgX19pbml0IHNhbml0aXplX3RsYl9lbnRyaWVzKHZvaWQpCit7CisJcHJpbnRrKCJEZXByZWNhdGVkIHNhbml0aXplX3RsYl9lbnRyaWVzKCkgaW52b2tlZFxuIik7Cit9CisKKworLyoKKyAqIENvbmZpZ3VyZSBzaGFyZWQgVExCIC0gVlBDIGNvbmZpZ3VyYXRpb24gYml0IG11c3QgYmUgc2V0IGJ5IGNhbGxlcgorICovCisKK3ZvaWQgc210Y19jb25maWd1cmVfdGxiKHZvaWQpCit7CisJaW50IGksdGxic2l6LHZwZXM7CisJdW5zaWduZWQgbG9uZyBtdnBjb25mMDsKKwl1bnNpZ25lZCBsb25nIGNvbmZpZzF2YWw7CisKKwkvKiBTZXQgdXAgQVNJRCBwcmVzZXJ2YXRpb24gdGFibGUgKi8KKwlmb3IgKHZwZXM9MDsgdnBlczxNQVhfU01UQ19UTEJTOyB2cGVzKyspIHsKKwkgICAgZm9yKGkgPSAwOyBpIDwgTUFYX1NNVENfQVNJRFM7IGkrKykgeworCQlzbXRjX2xpdmVfYXNpZFt2cGVzXVtpXSA9IDA7CisJICAgIH0KKwl9CisJbXZwY29uZjAgPSByZWFkX2MwX212cGNvbmYwKCk7CisKKwlpZiAoKHZwZXMgPSAoKG12cGNvbmYwICYgTVZQQ09ORjBfUFZQRSkKKwkJCT4+IE1WUENPTkYwX1BWUEVfU0hJRlQpICsgMSkgPiAxKSB7CisJICAgIC8qIElmIHdlIGhhdmUgbXVsdGlwbGUgVlBFcywgdHJ5IHRvIHNoYXJlIHRoZSBUTEIgKi8KKwkgICAgaWYgKChtdnBjb25mMCAmIE1WUENPTkYwX1RMQlMpICYmICFub3N0bGIpIHsKKwkJLyoKKwkJICogSWYgVExCIHNpemluZyBpcyBwcm9ncmFtbWFibGUsIHNoYXJlZCBUTEIKKwkJICogc2l6ZSBpcyB0aGUgdG90YWwgYXZhaWxhYmxlIGNvbXBsZW1lbnQuCisJCSAqIE90aGVyd2lzZSwgd2UgaGF2ZSB0byB0YWtlIHRoZSBzdW0gb2YgYWxsCisJCSAqIHN0YXRpYyBWUEUgVExCIGVudHJpZXMuCisJCSAqLworCQlpZiAoKHRsYnNpeiA9ICgobXZwY29uZjAgJiBNVlBDT05GMF9QVExCRSkKKwkJCQk+PiBNVlBDT05GMF9QVExCRV9TSElGVCkpID09IDApIHsKKwkJICAgIC8qCisJCSAgICAgKiBJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgVlBFLCB0aGVyZSBoYWQgYmV0dGVyCisJCSAgICAgKiBiZSBtb3JlIHRoYW4gb25lIFRDLCBiZWNhdXNlIHdlIG5lZWQgb25lIHRvIGJpbmQKKwkJICAgICAqIHRvIGVhY2ggVlBFIGluIHR1cm4gdG8gYmUgYWJsZSB0byByZWFkCisJCSAgICAgKiBpdHMgY29uZmlndXJhdGlvbiBzdGF0ZSEKKwkJICAgICAqLworCQkgICAgc2V0dGMoMSk7CisJCSAgICAvKiBTdG9wIHRoZSBUQyBmcm9tIGRvaW5nIGFueXRoaW5nIGZvb2xpc2ggKi8KKwkJICAgIHdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisJCSAgICBtaXBzX2loYigpOworCQkgICAgLyogTm8gbmVlZCB0byB1bi1IYWx0IC0gdGhhdCBoYXBwZW5zIGxhdGVyIGFueXdheSAqLworCQkgICAgZm9yIChpPTA7IGkgPCB2cGVzOyBpKyspIHsKKwkJICAgIAl3cml0ZV90Y19jMF90Y2JpbmQoaSk7CisJCQkvKgorCQkJICogVG8gYmUgMTAwJSBzdXJlIHdlJ3JlIHJlYWxseSBnZXR0aW5nIHRoZSByaWdodAorCQkJICogaW5mb3JtYXRpb24sIHdlIGV4aXQgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUKKwkJCSAqIGFuZCBkbyBhbiBJSEIgYWZ0ZXIgZWFjaCByZWJpbmRpbmcuCisJCQkgKi8KKwkJCXdyaXRlX2MwX212cGNvbnRyb2woCisJCQkJcmVhZF9jMF9tdnBjb250cm9sKCkgJiB+IE1WUENPTlRST0xfVlBDICk7CisJCQltaXBzX2loYigpOworCQkJLyoKKwkJCSAqIE9ubHkgY291bnQgaWYgdGhlIE1NVSBUeXBlIGluZGljYXRlZCBpcyBUTEIKKwkJCSAqLworCQkJaWYoKChyZWFkX3ZwZV9jMF9jb25maWcoKSAmIE1JUFNfQ09ORl9NVCkgPj4gNykgPT0gMSkgeworCQkJCWNvbmZpZzF2YWwgPSByZWFkX3ZwZV9jMF9jb25maWcxKCk7CisJCQkJdGxic2l6ICs9ICgoY29uZmlnMXZhbCA+PiAyNSkgJiAweDNmKSArIDE7CisJCQl9CisKKwkJCS8qIFB1dCBjb3JlIGJhY2sgaW4gY29uZmlndXJhdGlvbiBzdGF0ZSAqLworCQkJd3JpdGVfYzBfbXZwY29udHJvbCgKKwkJCQlyZWFkX2MwX212cGNvbnRyb2woKSB8IE1WUENPTlRST0xfVlBDICk7CisJCQltaXBzX2loYigpOworCQkgICAgfQorCQl9CisJCXdyaXRlX2MwX212cGNvbnRyb2wocmVhZF9jMF9tdnBjb250cm9sKCkgfCBNVlBDT05UUk9MX1NUTEIpOworCisJCS8qCisJCSAqIFNldHVwIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlIHNvZnR3YXJlIHRvdGFsLAorCQkgKiByYXRoZXIgdGhhbiByZWFkIHRoZSBwZXItVlBFIENvbmZpZzEgdmFsdWUuIFRoZSB2YWx1ZXMKKwkJICogZm9yICJDUFUgMCIgZ2V0cyBjb3BpZWQgdG8gYWxsIHRoZSBvdGhlciBDUFVzIGFzIHBhcnQKKwkJICogb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gaW4gc210Y19jcHVfc2V0dXAoKS4KKwkJICovCisKKwkJdGxic2l6ID0gdGxic2l6ICYgMHgzZjsJLyogTUlQUzMyIGxpbWl0cyBUTEIgaW5kaWNlcyB0byA2NCAqLworCQljcHVfZGF0YVswXS50bGJzaXplID0gdGxic2l6OworCQlzbXRjX3N0YXR1cyB8PSBTTVRDX1RMQl9TSEFSRUQ7CisKKwkJcHJpbnRrKCJUTEIgb2YgJWQgZW50cnkgcGFpcnMgc2hhcmVkIGJ5ICVkIFZQRXNcbiIsCisJCQl0bGJzaXosIHZwZXMpOworCSAgICB9IGVsc2UgeworCQlwcmludGsoIldBUk5JTkc6IFRMQiBOb3QgU2hhcmFibGUgb24gU01UQyBCb290IVxuIik7CisJICAgIH0KKwl9Cit9CisKKworLyoKKyAqIEluY3JlbWVudGFsbHkgYnVpbGQgdGhlIENQVSBtYXAgb3V0IG9mIGNvbnN0aXR1ZW50IE1JUFMgTVQgY29yZXMsCisgKiB1c2luZyB0aGUgc3BlY2lmaWVkIGF2YWlsYWJsZSBWUEVzIGFuZCBUQ3MuICBQbGFmb3JtIGNvZGUgbmVlZHMKKyAqIHRvIGVuc3VyZSB0aGF0IGVhY2ggTUlQUyBNVCBjb3JlIGludm9rZXMgdGhpcyByb3V0aW5lIG9uIHJlc2V0LAorICogb25lIGF0IGEgdGltZSghKS4KKyAqCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGJ1aWxkX2NwdV9tYXAgYW5kIHByZXBhcmVfY3B1cyByb3V0aW5lcyBhc3N1bWVzCisgKiB0aGF0ICphbGwqIFRDcyBvZiBhIE1JUFMgTVQgY29yZSB3aWxsIGJlIHVzZWQgZm9yIExpbnV4LCBhbmQgdGhhdAorICogdGhleSB3aWxsIGJlIHNwcmVhZCBhY3Jvc3MgKmFsbCogYXZhaWxhYmxlIFZQRXMgKHRvIG1pbmltaXNlIHRoZQorICogbG9zcyBvZiBlZmZpY2llbmN5IGR1ZSB0byBleGNlcHRpb24gc2VydmljZSBzZXJpYWxpemF0aW9uKS4KKyAqIEFuIGltcHJvdmVkIHZlcnNpb24gd291bGQgcGljayB1cCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZAorICogcG9zc2libHkgbGVhdmUgc29tZSBUQ3MvVlBFcyBhcyAic2xhdmUiIHByb2Nlc3NvcnMuCisgKgorICogVXNlIGMwX01WUENvbmYwIHRvIGZpbmQgb3V0IGhvdyBtYW55IFRDcyBhcmUgYXZhaWxhYmxlLCBzZXR0aW5nIHVwCisgKiBwaHlzX2NwdV9wcmVzZW50X21hcCBhbmQgdGhlIGxvZ2ljYWwvcGh5c2ljYWwgbWFwcGluZ3MuCisgKi8KKworaW50IF9faW5pdCBtaXBzbXRfYnVpbGRfY3B1X21hcChpbnQgc3RhcnRfY3B1X3Nsb3QpCit7CisJaW50IGksIG50Y3M7CisKKwkvKgorCSAqIFRoZSBDUFUgbWFwIGlzbid0IGFjdHVhbGx5IHVzZWQgZm9yIGFueXRoaW5nIGF0IHRoaXMgcG9pbnQsCisJICogc28gaXQncyBub3QgY2xlYXIgd2hhdCBlbHNlIHdlIHNob3VsZCBkbyBhcGFydCBmcm9tIHNldAorCSAqIGV2ZXJ5dGhpbmcgdXAgc28gdGhhdCAibG9naWNhbCIgPSAicGh5c2ljYWwiLgorCSAqLworCW50Y3MgPSAoKHJlYWRfYzBfbXZwY29uZjAoKSAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKSArIDE7CisJZm9yIChpPXN0YXJ0X2NwdV9zbG90OyBpPE5SX0NQVVMgJiYgaTxudGNzOyBpKyspIHsKKwkJY3B1X3NldChpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJCV9fY3B1X251bWJlcl9tYXBbaV0gPSBpOworCQlfX2NwdV9sb2dpY2FsX21hcFtpXSA9IGk7CisJfQorCS8qIEluaXRpYWxpemUgbWFwIG9mIENQVXMgd2l0aCBGUFVzICovCisJY3B1c19jbGVhcihtdF9mcHVfY3B1bWFzayk7CisKKwkvKiBPbmUgb2YgdGhvc2UgVEMncyBpcyB0aGUgb25lIGJvb3RpbmcsIGFuZCBub3QgYSBzZWNvbmRhcnkuLi4gKi8KKwlwcmludGsoIiVpIGF2YWlsYWJsZSBzZWNvbmRhcnkgQ1BVIFRDKHMpXG4iLCBpIC0gMSk7CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIENvbW1vbiBzZXR1cCBiZWZvcmUgYW55IHNlY29uZGFyaWVzIGFyZSBzdGFydGVkCisgKiBNYWtlIHN1cmUgYWxsIENQVSdzIGFyZSBpbiBhIHNlbnNpYmxlIHN0YXRlIGJlZm9yZSB3ZSBib290IGFueSBvZiB0aGUKKyAqIHNlY29uZGFyaWVzLgorICoKKyAqIEZvciBNSVBTIE1UICJTTVRDIiBvcGVyYXRpb24sIHdlIHNldCB1cCBhbGwgVENzLCBzcHJlYWQgYXMgZXZlbmx5CisgKiBhcyBwb3NzaWJsZSBhY3Jvc3MgdGhlIGF2YWlsYWJsZSBWUEVzLgorICovCisKK3N0YXRpYyB2b2lkIHNtdGNfdGNfc2V0dXAoaW50IHZwZSwgaW50IHRjLCBpbnQgY3B1KQoreworCXNldHRjKHRjKTsKKwl3cml0ZV90Y19jMF90Y2hhbHQoVENIQUxUX0gpOworCW1pcHNfaWhiKCk7CisJd3JpdGVfdGNfYzBfdGNzdGF0dXMoKHJlYWRfdGNfYzBfdGNzdGF0dXMoKQorCQkJJiB+KFRDU1RBVFVTX1RLU1UgfCBUQ1NUQVRVU19EQSB8IFRDU1RBVFVTX0lYTVQpKQorCQkJfCBUQ1NUQVRVU19BKTsKKwl3cml0ZV90Y19jMF90Y2NvbnRleHQoMCk7CisJLyogQmluZCB0YyB0byB2cGUgKi8KKwl3cml0ZV90Y19jMF90Y2JpbmQodnBlKTsKKwkvKiBJbiBnZW5lcmFsLCBhbGwgVENzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGNwdV9kYXRhIGluZGljYXRpb25zICovCisJbWVtY3B5KCZjcHVfZGF0YVtjcHVdLCAmY3B1X2RhdGFbMF0sIHNpemVvZihzdHJ1Y3QgY3B1aW5mb19taXBzKSk7CisJLyogRm9yIDM0S2YsIHN0YXJ0IHdpdGggVEMvQ1BVIDAgYXMgc29sZSBvd25lciBvZiBzaW5nbGUgRlBVIGNvbnRleHQgKi8KKwlpZiAoY3B1X2RhdGFbMF0uY3B1dHlwZSA9PSBDUFVfMzRLKQorCQljcHVfZGF0YVtjcHVdLm9wdGlvbnMgJj0gfk1JUFNfQ1BVX0ZQVTsKKwljcHVfZGF0YVtjcHVdLnZwZV9pZCA9IHZwZTsKKwljcHVfZGF0YVtjcHVdLnRjX2lkID0gdGM7Cit9CisKKwordm9pZCBtaXBzbXRfcHJlcGFyZV9jcHVzKHZvaWQpCit7CisJaW50IGksIHZwZSwgdGMsIG50YywgbnZwZSwgdGNwZXJ2cGUsIHNsb3AsIGNwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBuaXBpOworCXN0cnVjdCBzbXRjX2lwaSAqcGlwaTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0cyBzbyB3ZSBjYW4gZGlzYWJsZSBNVCAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkvKiBkaXNhYmxlIE1UIHNvIHdlIGNhbiBjb25maWd1cmUgKi8KKwlkdnBlKCk7CisJZG10KCk7CisKKwlmcmVlSVBJcS5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCisJLyoKKwkgKiBXZSBwcm9iYWJseSBkb24ndCBoYXZlIGFzIG1hbnkgVlBFcyBhcyB3ZSBkbyBTTVAgIkNQVXMiLAorCSAqIGJ1dCBpdCdzIHBvc3NpYmxlIC0gYW5kIGluIGFueSBjYXNlIHdlJ2xsIG5ldmVyIHVzZSBtb3JlIQorCSAqLworCWZvciAoaT0wOyBpPE5SX0NQVVM7IGkrKykgeworCQlJUElRW2ldLmhlYWQgPSBJUElRW2ldLnRhaWwgPSBOVUxMOworCQlJUElRW2ldLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJCUlQSVFbaV0uZGVwdGggPSAwOworCQlpcGlfdGltZXJfbGF0Y2hbaV0gPSAwOworCX0KKworCS8qIGNwdV9kYXRhIGluZGV4IHN0YXJ0cyBhdCB6ZXJvICovCisJY3B1ID0gMDsKKwljcHVfZGF0YVtjcHVdLnZwZV9pZCA9IDA7CisJY3B1X2RhdGFbY3B1XS50Y19pZCA9IDA7CisJY3B1Kys7CisKKwkvKiBSZXBvcnQgb24gYm9vdC10aW1lIG9wdGlvbnMgKi8KKwltaXBzX210X3NldF9jcHVvcHRpb25zICgpOworCWlmICh2cGVsaW1pdCA+IDApCisJCXByaW50aygiTGltaXQgb2YgJWQgVlBFcyBzZXRcbiIsIHZwZWxpbWl0KTsKKwlpZiAodGNsaW1pdCA+IDApCisJCXByaW50aygiTGltaXQgb2YgJWQgVENzIHNldFxuIiwgdGNsaW1pdCk7CisJaWYgKG5vc3RsYikgeworCQlwcmludGsoIlNoYXJlZCBUTEIgVXNlIEluaGliaXRlZCAtIFVOU0FGRSBmb3IgTXVsdGktVlBFIE9wZXJhdGlvblxuIik7CisJfQorCWlmIChhc2lkbWFzaykKKwkJcHJpbnRrKCJBU0lEIG1hc2sgdmFsdWUgb3ZlcnJpZGUgdG8gMHgleFxuIiwgYXNpZG1hc2spOworCisJLyogVGVtcG9yYXJ5ICovCisjaWZkZWYgU01UQ19JRExFX0hPT0tfREVCVUcKKwlpZiAoaGFuZ190cmlnKQorCQlwcmludGsoIkxvZ2ljIEFuYWx5c2VyIFRyaWdnZXIgb24gc3VzcGVjdGVkIFRDIGhhbmdcbiIpOworI2VuZGlmIC8qIFNNVENfSURMRV9IT09LX0RFQlVHICovCisKKwkvKiBQdXQgTVZQRSdzIGludG8gJ2NvbmZpZ3VyYXRpb24gc3RhdGUnICovCisJd3JpdGVfYzBfbXZwY29udHJvbCggcmVhZF9jMF9tdnBjb250cm9sKCkgfCBNVlBDT05UUk9MX1ZQQyApOworCisJdmFsID0gcmVhZF9jMF9tdnBjb25mMCgpOworCW52cGUgPSAoKHZhbCAmIE1WUENPTkYwX1BWUEUpID4+IE1WUENPTkYwX1BWUEVfU0hJRlQpICsgMTsKKwlpZiAodnBlbGltaXQgPiAwICYmIG52cGUgPiB2cGVsaW1pdCkKKwkJbnZwZSA9IHZwZWxpbWl0OworCW50YyA9ICgodmFsICYgTVZQQ09ORjBfUFRDKSA+PiBNVlBDT05GMF9QVENfU0hJRlQpICsgMTsKKwlpZiAobnRjID4gTlJfQ1BVUykKKwkJbnRjID0gTlJfQ1BVUzsKKwlpZiAodGNsaW1pdCA+IDAgJiYgbnRjID4gdGNsaW1pdCkKKwkJbnRjID0gdGNsaW1pdDsKKwl0Y3BlcnZwZSA9IG50YyAvIG52cGU7CisJc2xvcCA9IG50YyAlIG52cGU7CS8qIFJlc2lkdWFsIFRDcywgPCBOVlBFICovCisKKwkvKiBTZXQgdXAgc2hhcmVkIFRMQiAqLworCXNtdGNfY29uZmlndXJlX3RsYigpOworCisJZm9yICh0YyA9IDAsIHZwZSA9IDAgOyAodnBlIDwgbnZwZSkgJiYgKHRjIDwgbnRjKSA7IHZwZSsrKSB7CisJCS8qCisJCSAqIFNldCB0aGUgTVZQIGJpdHMuCisJCSAqLworCQlzZXR0Yyh0Yyk7CisJCXdyaXRlX3ZwZV9jMF92cGVjb25mMChyZWFkX3ZwZV9jMF92cGVjb25mMCgpIHwgVlBFQ09ORjBfTVZQKTsKKwkJaWYgKHZwZSAhPSAwKQorCQkJcHJpbnRrKCIsICIpOworCQlwcmludGsoIlZQRSAlZDogVEMiLCB2cGUpOworCQlmb3IgKGkgPSAwOyBpIDwgdGNwZXJ2cGU7IGkrKykgeworCQkJLyoKKwkJCSAqIFRDIDAgaXMgYm91bmQgdG8gVlBFIDAgYXQgcmVzZXQsCisJCQkgKiBhbmQgaXMgcHJlc3VtYWJseSBleGVjdXRpbmcgdGhpcworCQkJICogY29kZS4gIExlYXZlIGl0IGFsb25lIQorCQkJICovCisJCQlpZiAodGMgIT0gMCkgeworCQkJCXNtdGNfdGNfc2V0dXAodnBlLHRjLCBjcHUpOworCQkJCWNwdSsrOworCQkJfQorCQkJcHJpbnRrKCIgJWQiLCB0Yyk7CisJCQl0YysrOworCQl9CisJCWlmIChzbG9wKSB7CisJCQlpZiAodGMgIT0gMCkgeworCQkJCXNtdGNfdGNfc2V0dXAodnBlLHRjLCBjcHUpOworCQkJCWNwdSsrOworCQkJfQorCQkJcHJpbnRrKCIgJWQiLCB0Yyk7CisJCQl0YysrOworCQkJc2xvcC0tOworCQl9CisJCWlmICh2cGUgIT0gMCkgeworCQkJLyoKKwkJCSAqIENsZWFyIGFueSBzdGFsZSBzb2Z0d2FyZSBpbnRlcnJ1cHRzIGZyb20gVlBFJ3MgQ2F1c2UKKwkJCSAqLworCQkJd3JpdGVfdnBlX2MwX2NhdXNlKDApOworCisJCQkvKgorCQkJICogQ2xlYXIgRVJML0VYTCBvZiBWUEVzIG90aGVyIHRoYW4gMAorCQkJICogYW5kIHNldCByZXN0cmljdGVkIGludGVycnVwdCBlbmFibGUvbWFzay4KKwkJCSAqLworCQkJd3JpdGVfdnBlX2MwX3N0YXR1cygocmVhZF92cGVfYzBfc3RhdHVzKCkKKwkJCQkmIH4oU1QwX0JFViB8IFNUMF9FUkwgfCBTVDBfRVhMIHwgU1QwX0lNKSkKKwkJCQl8IChTVEFUVVNGX0lQMCB8IFNUQVRVU0ZfSVAxIHwgU1RBVFVTRl9JUDcKKwkJCQl8IFNUMF9JRSkpOworCQkJLyoKKwkJCSAqIHNldCBjb25maWcgdG8gYmUgdGhlIHNhbWUgYXMgdnBlMCwKKwkJCSAqICBwYXJ0aWN1bGFybHkga3NlZzAgY29oZXJlbmN5IGFsZworCQkJICovCisJCQl3cml0ZV92cGVfYzBfY29uZmlnKHJlYWRfYzBfY29uZmlnKCkpOworCQkJLyogQ2xlYXIgYW55IHBlbmRpbmcgdGltZXIgaW50ZXJydXB0ICovCisJCQl3cml0ZV92cGVfYzBfY29tcGFyZSgwKTsKKwkJCS8qIFByb3BhZ2F0ZSBDb25maWc3ICovCisJCQl3cml0ZV92cGVfYzBfY29uZmlnNyhyZWFkX2MwX2NvbmZpZzcoKSk7CisJCX0KKwkJLyogZW5hYmxlIG11bHRpLXRocmVhZGluZyB3aXRoaW4gVlBFICovCisJCXdyaXRlX3ZwZV9jMF92cGVjb250cm9sKHJlYWRfdnBlX2MwX3ZwZWNvbnRyb2woKSB8IFZQRUNPTlRST0xfVEUpOworCQkvKiBlbmFibGUgdGhlIFZQRSAqLworCQl3cml0ZV92cGVfYzBfdnBlY29uZjAocmVhZF92cGVfYzBfdnBlY29uZjAoKSB8IFZQRUNPTkYwX1ZQQSk7CisJfQorCisJLyoKKwkgKiBQdWxsIGFueSBwaHlzaWNhbGx5IHByZXNlbnQgYnV0IHVudXNlZCBUQ3Mgb3V0IG9mIGNpcmN1bGF0aW9uLgorCSAqLworCXdoaWxlICh0YyA8ICgoKHZhbCAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKSArIDEpKSB7CisJCWNwdV9jbGVhcih0YywgcGh5c19jcHVfcHJlc2VudF9tYXApOworCQljcHVfY2xlYXIodGMsIGNwdV9wcmVzZW50X21hcCk7CisJCXRjKys7CisJfQorCisJLyogcmVsZWFzZSBjb25maWcgc3RhdGUgKi8KKwl3cml0ZV9jMF9tdnBjb250cm9sKCByZWFkX2MwX212cGNvbnRyb2woKSAmIH4gTVZQQ09OVFJPTF9WUEMgKTsKKworCXByaW50aygiXG4iKTsKKworCS8qIFNldCB1cCBjb3Byb2Nlc3NvciBhZmZpbml0eSBDUFUgbWFzayhzKSAqLworCisJZm9yICh0YyA9IDA7IHRjIDwgbnRjOyB0YysrKSB7CisJCWlmKGNwdV9kYXRhW3RjXS5vcHRpb25zICYgTUlQU19DUFVfRlBVKQorCQkJY3B1X3NldCh0YywgbXRfZnB1X2NwdW1hc2spOworCX0KKworCS8qIHNldCB1cCBpcGkgaW50ZXJydXB0cy4uLiAqLworCisJLyogSWYgd2UgaGF2ZSBtdWx0aXBsZSBWUEVzIHJ1bm5pbmcsIHNldCB1cCB0aGUgY3Jvc3MtVlBFIGludGVycnVwdCAqLworCisJaWYgKG52cGUgPiAxKQorCQlzZXR1cF9jcm9zc192cGVfaW50ZXJydXB0cygpOworCisJLyogU2V0IHVwIHF1ZXVlIG9mIGZyZWUgSVBJICJtZXNzYWdlcyIuICovCisJbmlwaSA9IE5SX0NQVVMgKiBJUElCVUZfUEVSX0NQVTsKKwlpZiAoaXBpYnVmZmVycyA+IDApCisJCW5pcGkgPSBpcGlidWZmZXJzOworCisJcGlwaSA9IGttYWxsb2MobmlwaSAqc2l6ZW9mKHN0cnVjdCBzbXRjX2lwaSksIEdGUF9LRVJORUwpOworCWlmIChwaXBpID09IE5VTEwpCisJCXBhbmljKCJrbWFsbG9jIG9mIElQSSBtZXNzYWdlIGJ1ZmZlcnMgZmFpbGVkXG4iKTsKKwllbHNlCisJCXByaW50aygiSVBJIGJ1ZmZlciBwb29sIG9mICVkIGJ1ZmZlcnNcbiIsIG5pcGkpOworCWZvciAoaSA9IDA7IGkgPCBuaXBpOyBpKyspIHsKKwkJc210Y19pcGlfbnEoJmZyZWVJUElxLCBwaXBpKTsKKwkJcGlwaSsrOworCX0KKworCS8qIEFybSBtdWx0aXRocmVhZGluZyBhbmQgZW5hYmxlIG90aGVyIFZQRXMgLSBidXQgYWxsIFRDcyBhcmUgSGFsdGVkICovCisJZW10KEVNVF9FTkFCTEUpOworCWV2cGUoRVZQRV9FTkFCTEUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkvKiBJbml0aWFsaXplIFNNVEMgL3Byb2Mgc3RhdGlzdGljcy9kaWFnbm9zdGljcyAqLworCWluaXRfc210Y19zdGF0cygpOworfQorCisKKy8qCisgKiBTZXR1cCB0aGUgUEMsIFNQLCBhbmQgR1Agb2YgYSBzZWNvbmRhcnkgcHJvY2Vzc29yIGFuZCBzdGFydCBpdAorICogcnVubmluZyEKKyAqIHNtcF9ib290c3RyYXAgaXMgdGhlIHBsYWNlIHRvIHJlc3VtZSBmcm9tCisgKiBfX0tTVEtfVE9TKGlkbGUpIGlzIGFwcGFyZW50bHkgdGhlIHN0YWNrIHBvaW50ZXIKKyAqICh1bnNpZ25lZCBsb25nKWlkbGUtPnRocmVhZF9pbmZvIHRoZSBncAorICoKKyAqLwordm9pZCBzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3sKKwlleHRlcm4gdTMyIGtlcm5lbHNwW05SX0NQVVNdOworCWxvbmcgZmxhZ3M7CisJaW50IG10ZmxhZ3M7CisKKwlMT0NLX01UX1BSQSgpOworCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCAhPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZCkgeworCQlkdnBlKCk7CisJfQorCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOworCisJLyogcGMgKi8KKwl3cml0ZV90Y19jMF90Y3Jlc3RhcnQoKHVuc2lnbmVkIGxvbmcpJnNtcF9ib290c3RyYXApOworCisJLyogc3RhY2sgcG9pbnRlciAqLworCWtlcm5lbHNwW2NwdV0gPSBfX0tTVEtfVE9TKGlkbGUpOworCXdyaXRlX3RjX2dwcl9zcChfX0tTVEtfVE9TKGlkbGUpKTsKKworCS8qIGdsb2JhbCBwb2ludGVyICovCisJd3JpdGVfdGNfZ3ByX2dwKCh1bnNpZ25lZCBsb25nKWlkbGUtPnRocmVhZF9pbmZvKTsKKworCXNtdGNfc3RhdHVzIHw9IFNNVENfTVRDX0FDVElWRTsKKwl3cml0ZV90Y19jMF90Y2hhbHQoMCk7CisJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkICE9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udnBlX2lkKSB7CisJCWV2cGUoRVZQRV9FTkFCTEUpOworCX0KKwlVTkxPQ0tfTVRfUFJBKCk7Cit9CisKK3ZvaWQgc210Y19pbml0X3NlY29uZGFyeSh2b2lkKQoreworCS8qCisJICogU3RhcnQgdGltZXIgb24gc2Vjb25kYXJ5IFZQRXMgaWYgbmVjZXNzYXJ5LgorCSAqIG1pcHNfdGltZXJfc2V0dXAgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGludm9rZWQgYnkgaW5pdC9tYWluCisJICogb24gImJvb3QiIFRDLiAgTGlrZSBwZXJfY3B1X3RyYXBfaW5pdCgpIGhhY2ssIHRoaXMgYXNzdW1lcyB0aGF0CisJICogU01UQyBpbml0IGNvZGUgYXNzaWducyBUQ3MgY29uc2RlY3V0aXZlbHkgYW5kIGluIGFzY2VuZGluZyBvcmRlcgorCSAqIHRvIGFjcm9zcyBhdmFpbGFibGUgVlBFcy4KKwkgKi8KKwlpZigoKHJlYWRfYzBfdGNiaW5kKCkgJiBUQ0JJTkRfQ1VSVEMpICE9IDApCisJJiYgKChyZWFkX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlZQRSkKKwkgICAgIT0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpIC0gMV0udnBlX2lkKSl7CisJCXdyaXRlX2MwX2NvbXBhcmUgKHJlYWRfYzBfY291bnQoKSArIG1pcHNfaHB0X2ZyZXF1ZW5jeS9IWik7CisJfQorCisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCit2b2lkIHNtdGNfc21wX2ZpbmlzaCh2b2lkKQoreworCXByaW50aygiVEMgJWQgZ29pbmcgb24tbGluZSBhcyBDUFUgJWRcbiIsCisJCWNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udGNfaWQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKK3ZvaWQgc210Y19jcHVzX2RvbmUodm9pZCkKK3sKK30KKworLyoKKyAqIFN1cHBvcnQgZm9yIFNNVEMtb3B0aW1pemVkIGRyaXZlciBJUlEgcmVnaXN0cmF0aW9uCisgKi8KKworLyoKKyAqIFNNVEMgS2VybmVsIG5lZWRzIHRvIG1hbmlwdWxhdGUgbG93LWxldmVsIENQVSBpbnRlcnJ1cHQgbWFzaworICogaW4gZG9fSVJRLiBUaGVzZSBhcmUgcGFzc2VkIGluIHNldHVwX2lycV9zbXRjKCkgYW5kIHN0b3JlZAorICogaW4gdGhpcyB0YWJsZS4KKyAqLworCitpbnQgc2V0dXBfaXJxX3NtdGModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqIG5ldywKKwkJCXVuc2lnbmVkIGxvbmcgaHdtYXNrKQoreworCWlycV9od21hc2tbaXJxXSA9IGh3bWFzazsKKworCXJldHVybiBzZXR1cF9pcnEoaXJxLCBuZXcpOworfQorCisvKgorICogSVBJIG1vZGVsIGZvciBTTVRDIGlzIHRyaWNreSwgYmVjYXVzZSBpbnRlcnJ1cHRzIGFyZW4ndCBUQy1zcGVjaWZpYy4KKyAqIFdpdGhpbiBhIFZQRSBvbmUgVEMgY2FuIGludGVycnVwdCBhbm90aGVyIGJ5IGRpZmZlcmVudCBhcHByb2FjaGVzLgorICogVGhlIGVhc2llc3QgdG8gZ2V0IHJpZ2h0IHdvdWxkIHByb2JhYmx5IGJlIHRvIG1ha2UgYWxsIFRDcyBleGNlcHQKKyAqIHRoZSB0YXJnZXQgSVhNVCBhbmQgc2V0IGEgc29mdHdhcmUgaW50ZXJydXB0LCBidXQgYW4gSVhNVC1iYXNlZAorICogc2NoZW1lIHJlcXVpcmVzIHRoYXQgYSBoYW5kbGVyIG11c3QgcnVuIGJlZm9yZSBhIG5ldyBJUEkgY291bGQKKyAqIGJlIHNlbnQsIHdoaWNoIHdvdWxkIGJyZWFrIHRoZSAiYnJvYWRjYXN0IiBsb29wcyBpbiBNSVBTIE1ULgorICogQSBtb3JlIGdvbnpvIGFwcHJvYWNoIHdpdGhpbiBhIFZQRSBpcyB0byBoYWx0IHRoZSBUQywgZXh0cmFjdAorICogaXRzIFJlc3RhcnQsIFN0YXR1cywgYW5kIGEgY291cGxlIG9mIEdQUnMsIGFuZCBwcm9ncmFtIHRoZSBSZXN0YXJ0CisgKiBhZGRyZXNzIHRvIGVtdWxhdGUgYW4gaW50ZXJydXB0LgorICoKKyAqIFdpdGhpbiBhIFZQRSwgb25lIGNhbiBiZSBjb25maWRlbnQgdGhhdCB0aGUgdGFyZ2V0IFRDIGlzbid0IGluCisgKiBhIGNyaXRpY2FsIEVYTCBzdGF0ZSB3aGVuIGhhbHRlZCwgc2luY2UgdGhlIHdyaXRlIHRvIHRoZSBIYWx0CisgKiByZWdpc3RlciBjb3VsZCBub3QgaGF2ZSBpc3N1ZWQgb24gdGhlIHdyaXRpbmcgdGhyZWFkIGlmIHRoZQorICogaGFsdGluZyB0aHJlYWQgaGFkIEVYTCBzZXQuIFNvIGswIGFuZCBrMSBvZiB0aGUgdGFyZ2V0IFRDCisgKiBjYW4gYmUgdXNlZCBieSB0aGUgaW5qZWN0aW9uIGNvZGUuICBBY3Jvc3MgVlBFcywgb25lIGNhbid0CisgKiBiZSBjZXJ0YWluIHRoYXQgdGhlIHRhcmdldCBUQyBpc24ndCBpbiBhIGNyaXRpY2FsIGV4Y2VwdGlvbgorICogc3RhdGUuIFNvIHdlIHRyeSBhIHR3by1zdGVwIHByb2Nlc3Mgb2Ygc2VuZGluZyBhIHNvZnR3YXJlCisgKiBpbnRlcnJ1cHQgdG8gdGhlIHRhcmdldCBWUEUsIHdoaWNoIGVpdGhlciBoYW5kbGVzIHRoZSBldmVudAorICogaXRzZWxmIChpZiBpdCB3YXMgdGhlIHRhcmdldCkgb3IgaW5qZWN0cyB0aGUgZXZlbnQgd2l0aGluCisgKiB0aGUgVlBFLgorICovCisKK3ZvaWQgc210Y19pcGlfcWR1bXAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTIDtpKyspIHsKKwkJcHJpbnRrKCJJUElRWyVkXTogaGVhZCA9IDB4JXgsIHRhaWwgPSAweCV4LCBkZXB0aCA9ICVkXG4iLAorCQkJaSwgKHVuc2lnbmVkKUlQSVFbaV0uaGVhZCwgKHVuc2lnbmVkKUlQSVFbaV0udGFpbCwKKwkJCUlQSVFbaV0uZGVwdGgpOworCX0KK30KKworLyoKKyAqIFRoZSBzdGFuZGFyZCBhdG9taWMuaCBwcmltaXRpdmVzIGRvbid0IHF1aXRlIGRvIHdoYXQgd2Ugd2FudAorICogaGVyZTogV2UgbmVlZCBhbiBhdG9taWMgYWRkLWFuZC1yZXR1cm4tcHJldmlvdXMtdmFsdWUgKHdoaWNoCisgKiBjb3VsZCBiZSBkb25lIHdpdGggYXRvbWljX2FkZF9yZXR1cm4gYW5kIGEgZGVjcmVtZW50KSBhbmQgYW4KKyAqIGF0b21pYyBzZXQvemVyby1hbmQtcmV0dXJuLXByZXZpb3VzLXZhbHVlICh3aGljaCBjYW4ndCByZWFsbHkKKyAqIGJlIGRvbmUgd2l0aCB0aGUgYXRvbWljLmggcHJpbWl0aXZlcykuIEFuZCBzaW5jZSB0aGlzIGlzCisgKiBNSVBTIE1ULCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZSBMTC9TQy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19wb3N0aW5jcmVtZW50KHVuc2lnbmVkIGludCAqcHYpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGwJJTAsICUyCQkJCQlcbiIKKwkiCWFkZHUJJTEsICUwLCAxCQkJCVxuIgorCSIJc2MJJTEsICUyCQkJCQlcbiIKKwkiCWJlcXoJJTEsIDFiCQkJCQlcbiIKKwkiCXN5bmMJCQkJCQlcbiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodGVtcCksICI9bSIgKCpwdikKKwk6ICJtIiAoKnB2KQorCTogIm1lbW9yeSIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogTm8gbG9uZ2VyIHVzZWQgaW4gSVBJIGRpc3BhdGNoLCBidXQgcmV0YWluZWQgZm9yIGZ1dHVyZSByZWN5Y2xpbmcgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19wb3N0Y2xlYXIodW5zaWduZWQgaW50ICpwdikKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsbAklMCwgJTIJCQkJCVxuIgorCSIJb3IJJTEsICQwLCAkMAkJCQlcbiIKKwkiCXNjCSUxLCAlMgkJCQkJXG4iCisJIgliZXF6CSUxLCAxYgkJCQkJXG4iCisJIglzeW5jCQkJCQkJXG4iCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRlbXApLCAiPW0iICgqcHYpCisJOiAibSIgKCpwdikKKwk6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKwordm9pZCBzbXRjX3NlbmRfaXBpKGludCBjcHUsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgYWN0aW9uKQoreworCWludCB0Y3N0YXR1czsKKwlzdHJ1Y3Qgc210Y19pcGkgKnBpcGk7CisJbG9uZyBmbGFnczsKKwlpbnQgbXRmbGFnczsKKworCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXByaW50aygiQ2Fubm90IFNlbmQgSVBJIHRvIHNlbGYhXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBTZXQgdXAgYSBkZXNjcmlwdG9yLCB0byBiZSBkZWxpdmVyZWQgZWl0aGVyIHByb21wdGx5IG9yIHF1ZXVlZCAqLworCXBpcGkgPSBzbXRjX2lwaV9kcSgmZnJlZUlQSXEpOworCWlmIChwaXBpID09IE5VTEwpIHsKKwkJYnVzdF9zcGlubG9ja3MoMSk7CisJCW1pcHNfbXRfcmVnZHVtcChkdnBlKCkpOworCQlwYW5pYygiSVBJIE1zZy4gQnVmZmVycyBEZXBsZXRlZFxuIik7CisJfQorCXBpcGktPnR5cGUgPSB0eXBlOworCXBpcGktPmFyZyA9ICh2b2lkICopYWN0aW9uOworCXBpcGktPmRlc3QgPSBjcHU7CisJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkICE9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udnBlX2lkKSB7CisJCS8qIElmIG5vdCBvbiBzYW1lIFZQRSwgZW5xdWV1ZSBhbmQgc2VuZCBjcm9zcy1WUEUgaW50ZXJ1cHQgKi8KKwkJc210Y19pcGlfbnEoJklQSVFbY3B1XSwgcGlwaSk7CisJCUxPQ0tfQ09SRV9QUkEoKTsKKwkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CisJCXdyaXRlX3ZwZV9jMF9jYXVzZShyZWFkX3ZwZV9jMF9jYXVzZSgpIHwgQ19TVzEpOworCQlVTkxPQ0tfQ09SRV9QUkEoKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBOb3Qgc3VmZmljaWVudCB0byBkbyBhIExPQ0tfTVRfUFJBIChkbXQpIGhlcmUsCisJCSAqIHNpbmNlIEFTSUQgc2hvb3Rkb3duIG9uIHRoZSBvdGhlciBWUEUgbWF5CisJCSAqIGNvbGxpZGUgd2l0aCB0aGlzIG9wZXJhdGlvbi4KKwkJICovCisJCUxPQ0tfQ09SRV9QUkEoKTsKKwkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CisJCS8qIEhhbHQgdGhlIHRhcmdldGVkIFRDICovCisJCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisJCW1pcHNfaWhiKCk7CisKKwkJLyoKKwkgCSAqIEluc3BlY3QgVENTdGF0dXMgLSBpZiBJWE1UIGlzIHNldCwgd2UgaGF2ZSB0byBxdWV1ZQorCQkgKiBhIG1lc3NhZ2UuIE90aGVyd2lzZSwgd2Ugc2V0IHVwIHRoZSAiaW50ZXJydXB0IgorCQkgKiBvZiB0aGUgb3RoZXIgVEMKKwkgCSAqLworCQl0Y3N0YXR1cyA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKKworCQlpZiAoKHRjc3RhdHVzICYgVENTVEFUVVNfSVhNVCkgIT0gMCkgeworCQkJLyoKKwkJCSAqIFNwaW4td2FpdGluZyBoZXJlIGNhbiBkZWFkbG9jaywKKwkJCSAqIHNvIHdlIHF1ZXVlIHRoZSBtZXNzYWdlIGZvciB0aGUgdGFyZ2V0IFRDLgorCQkJICovCisJCQl3cml0ZV90Y19jMF90Y2hhbHQoMCk7CisJCQlVTkxPQ0tfQ09SRV9QUkEoKTsKKwkJCS8qIFRyeSB0byByZWR1Y2UgcmVkdW5kYW50IHRpbWVyIGludGVycnVwdCBtZXNzYWdlcyAqLworCQkJaWYodHlwZSA9PSBTTVRDX0NMT0NLX1RJQ0spIHsKKwkJCSAgICBpZihhdG9taWNfcG9zdGluY3JlbWVudCgmaXBpX3RpbWVyX2xhdGNoW2NwdV0pIT0wKSB7CisJCQkJc210Y19pcGlfbnEoJmZyZWVJUElxLCBwaXBpKTsKKwkJCQlyZXR1cm47CisJCQkgICAgfQorCQkJfQorCQkJc210Y19pcGlfbnEoJklQSVFbY3B1XSwgcGlwaSk7CisJCX0gZWxzZSB7CisJCQlwb3N0X2RpcmVjdF9pcGkoY3B1LCBwaXBpKTsKKwkJCXdyaXRlX3RjX2MwX3RjaGFsdCgwKTsKKwkJCVVOTE9DS19DT1JFX1BSQSgpOworCQl9CisJfQorfQorCisvKgorICogU2VuZCBJUEkgbWVzc2FnZSB0byBIYWx0ZWQgVEMsIFRhcmdUQy9UYXJnVlBFIGFscmVhZHkgaGF2aW5nIGJlZW4gc2V0CisgKi8KK3ZvaWQgcG9zdF9kaXJlY3RfaXBpKGludCBjcHUsIHN0cnVjdCBzbXRjX2lwaSAqcGlwaSkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqa3N0YWNrOworCXVuc2lnbmVkIGxvbmcgdGNzdGF0dXM7CisJdW5zaWduZWQgbG9uZyB0Y3Jlc3RhcnQ7CisJZXh0ZXJuIHUzMiBrZXJuZWxzcFtOUl9DUFVTXTsKKwlleHRlcm4gdm9pZCBfX3NtdGNfaXBpX3ZlY3Rvcih2b2lkKTsKKworCS8qIEV4dHJhY3QgU3RhdHVzLCBFUEMgZnJvbSBoYWx0ZWQgVEMgKi8KKwl0Y3N0YXR1cyA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKKwl0Y3Jlc3RhcnQgPSByZWFkX3RjX2MwX3RjcmVzdGFydCgpOworCS8qIElmIFRDUmVzdGFydCBpbmRpY2F0ZXMgYSBXQUlUIGluc3RydWN0aW9uLCBhZHZhbmNlIHRoZSBQQyAqLworCWlmICgodGNyZXN0YXJ0ICYgMHg4MDAwMDAwMCkKKwkgICAgJiYgKCgqKHVuc2lnbmVkIGludCAqKXRjcmVzdGFydCAmIDB4ZmUwMDAwM2YpID09IDB4NDIwMDAwMjApKSB7CisJCXRjcmVzdGFydCArPSA0OworCX0KKwkvKgorCSAqIFNhdmUgb24gVEMncyBmdXR1cmUga2VybmVsIHN0YWNrCisJICoKKwkgKiBDVSBiaXQgb2YgU3RhdHVzIGlzIGluZGljYXRvciB0aGF0IFRDIHdhcworCSAqIGFscmVhZHkgcnVubmluZyBvbiBhIGtlcm5lbCBzdGFjay4uLgorCSAqLworCWlmKHRjc3RhdHVzICYgU1QwX0NVMCkgIHsKKwkJLyogTm90ZSB0aGF0IHRoaXMgIi0gMSIgaXMgcG9pbnRlciBhcml0aG1ldGljICovCisJCWtzdGFjayA9ICgoc3RydWN0IHB0X3JlZ3MgKilyZWFkX3RjX2dwcl9zcCgpKSAtIDE7CisJfSBlbHNlIHsKKwkJa3N0YWNrID0gKChzdHJ1Y3QgcHRfcmVncyAqKWtlcm5lbHNwW2NwdV0pIC0gMTsKKwl9CisKKwlrc3RhY2stPmNwMF9lcGMgPSAobG9uZyl0Y3Jlc3RhcnQ7CisJLyogU2F2ZSBUQ1N0YXR1cyAqLworCWtzdGFjay0+Y3AwX3Rjc3RhdHVzID0gdGNzdGF0dXM7CisJLyogUGFzcyB0b2tlbiBvZiBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkIGtlcm5lbCBzdGFjayBwYWQgYXJlYSAqLworCWtzdGFjay0+cGFkMFs0XSA9ICh1bnNpZ25lZCBsb25nKXBpcGk7CisJLyogUGFzcyBhZGRyZXNzIG9mIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBsaWtld2lzZSAqLworCWtzdGFjay0+cGFkMFs1XSA9ICh1bnNpZ25lZCBsb25nKSZpcGlfZGVjb2RlOworCS8qIFNldCBpbnRlcnJ1cHQgZXhlbXB0IGFuZCBrZXJuZWwgbW9kZSAqLworCXRjc3RhdHVzIHw9IFRDU1RBVFVTX0lYTVQ7CisJdGNzdGF0dXMgJj0gflRDU1RBVFVTX1RLU1U7CisJd3JpdGVfdGNfYzBfdGNzdGF0dXModGNzdGF0dXMpOworCWVoYigpOworCS8qIFNldCBUQyBSZXN0YXJ0IGFkZHJlc3MgdG8gYmUgU01UQyBJUEkgdmVjdG9yICovCisJd3JpdGVfdGNfYzBfdGNyZXN0YXJ0KF9fc210Y19pcGlfdmVjdG9yKTsKK30KKwordm9pZCBpcGlfcmVzY2hlZF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogUmV0dXJuIGZyb20gaW50ZXJydXB0IHNob3VsZCBiZSBlbm91Z2ggdG8gY2F1c2Ugc2NoZWR1bGVyIGNoZWNrICovCit9CisKKwordm9pZCBpcGlfY2FsbF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogSW52b2tlIGdlbmVyaWMgZnVuY3Rpb24gaW52b2NhdGlvbiBjb2RlIGluIHNtcC5jICovCisJc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7Cit9CisKK3ZvaWQgaXBpX2RlY29kZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHNtdGNfaXBpICpwaXBpKQoreworCXZvaWQgKmFyZ19jb3B5ID0gcGlwaS0+YXJnOworCWludCB0eXBlX2NvcHkgPSBwaXBpLT50eXBlOworCWludCBkZXN0X2NvcHkgPSBwaXBpLT5kZXN0OworCisJc210Y19pcGlfbnEoJmZyZWVJUElxLCBwaXBpKTsKKwlzd2l0Y2ggKHR5cGVfY29weSkgeworCQljYXNlIFNNVENfQ0xPQ0tfVElDSzoKKwkJCS8qIEludm9rZSBDbG9jayAiSW50ZXJydXB0IiAqLworCQkJaXBpX3RpbWVyX2xhdGNoW2Rlc3RfY29weV0gPSAwOworI2lmZGVmIFNNVENfSURMRV9IT09LX0RFQlVHCisJCQljbG9ja19oYW5nX3JlcG9ydGVkW2Rlc3RfY29weV0gPSAwOworI2VuZGlmIC8qIFNNVENfSURMRV9IT09LX0RFQlVHICovCisJCQlsb2NhbF90aW1lcl9pbnRlcnJ1cHQoMCwgTlVMTCwgcmVncyk7CisJCQlicmVhazsKKwkJY2FzZSBMSU5VWF9TTVBfSVBJOgorCQkJc3dpdGNoICgoaW50KWFyZ19jb3B5KSB7CisJCQljYXNlIFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGOgorCQkJCWlwaV9yZXNjaGVkX2ludGVycnVwdChyZWdzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU01QX0NBTExfRlVOQ1RJT046CisJCQkJaXBpX2NhbGxfaW50ZXJydXB0KHJlZ3MpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIkltcG9zc2libGUgU01UQyBJUEkgQXJndW1lbnQgMHgleFxuIiwKKwkJCQkJKGludClhcmdfY29weSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiSW1wb3NzaWJsZSBTTVRDIElQSSBUeXBlIDB4JXhcbiIsIHR5cGVfY29weSk7CisJCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgZGVmZXJyZWRfc210Y19pcGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNtdGNfaXBpICpwaXBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisvKiBERUJVRyAqLworCWludCBxID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiBUZXN0IGlzIG5vdCBhdG9taWMsIGJ1dCBtdWNoIGZhc3RlciB0aGFuIGEgZGVxdWV1ZSwKKwkgKiBhbmQgdGhlIHZhc3QgbWFqb3JpdHkgb2YgaW52b2NhdGlvbnMgd2lsbCBoYXZlIGEgbnVsbCBxdWV1ZS4KKwkgKi8KKwlpZihJUElRW3FdLmhlYWQgIT0gTlVMTCkgeworCQl3aGlsZSgocGlwaSA9IHNtdGNfaXBpX2RxKCZJUElRW3FdKSkgIT0gTlVMTCkgeworCQkJLyogaXBpX2RlY29kZSgpIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIG9mZiAqLworCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJaXBpX2RlY29kZShyZWdzLCBwaXBpKTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFNlbmQgY2xvY2sgdGljayB0byBhbGwgVENzIGV4Y2VwdCB0aGUgb25lIGV4ZWN1dGluZyB0aGUgZnVudGlvbgorICovCisKK3ZvaWQgc210Y190aW1lcl9icm9hZGNhc3QoaW50IHZwZSkKK3sKKwlpbnQgY3B1OworCWludCBteVRDID0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXS50Y19pZDsKKwlpbnQgbXlWUEUgPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZDsKKworCXNtdGNfY3B1X3N0YXRzW3NtcF9wcm9jZXNzb3JfaWQoKV0udGltZXJpbnRzKys7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQgPT0gbXlWUEUgJiYKKwkJICAgIGNwdV9kYXRhW2NwdV0udGNfaWQgIT0gbXlUQykKKwkJCXNtdGNfc2VuZF9pcGkoY3B1LCBTTVRDX0NMT0NLX1RJQ0ssIDApOworCX0KK30KKworLyoKKyAqIENyb3NzLVZQRSBpbnRlcnJ1cHRzIGluIHRoZSBTTVRDIHByb3RvdHlwZSB1c2UgInNvZnR3YXJlIGludGVycnVwdHMiCisgKiBzZXQgdmlhIGNyb3NzLVZQRSBNVFRSIG1hbmlwdWxhdGlvbiBvZiB0aGUgQ2F1c2UgcmVnaXN0ZXIuIEl0IHdvdWxkIGJlCisgKiBpbiBzb21lIHJlZ2FyZHMgcHJlZmVyYWJsZSB0byBoYXZlIGV4dGVybmFsIGxvZ2ljIGZvciAiZG9vcmJlbGwiIGhhcmR3YXJlCisgKiBpbnRlcnJ1cHRzLgorICovCisKK3N0YXRpYyBpbnQgY3B1X2lwaV9pcnEgPSBNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU19DUFVfSVBJX0lSUTsKKworc3RhdGljIGlycXJldHVybl90IGlwaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IG15X3ZwZSA9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udnBlX2lkOworCWludCBteV90YyA9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udGNfaWQ7CisJaW50IGNwdTsKKwlzdHJ1Y3Qgc210Y19pcGkgKnBpcGk7CisJdW5zaWduZWQgbG9uZyB0Y3N0YXR1czsKKwlpbnQgc2VudDsKKwlsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtdGZsYWdzOworCXVuc2lnbmVkIGludCB2cGZsYWdzOworCisJLyoKKwkgKiBTbyBsb25nIGFzIGNyb3NzLVZQRSBpbnRlcnJ1cHRzIGFyZSBkb25lIHZpYQorCSAqIE1GVFIvTVRUUiByZWFkLW1vZGlmeS13cml0ZXMgb2YgQ2F1c2UsIHdlIG5lZWQKKwkgKiB0byBzdG9wIG90aGVyIFZQRXMgd2hlbmV2ZXIgdGhlIGxvY2FsIFZQRSBkb2VzCisJICogYW55dGhpbmcgc2ltaWxhci4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdnBmbGFncyA9IGR2cGUoKTsKKwljbGVhcl9jMF9jYXVzZSgweDEwMCA8PCBNSVBTX0NQVV9JUElfSVJRKTsKKwlzZXRfYzBfc3RhdHVzKDB4MTAwIDw8IE1JUFNfQ1BVX0lQSV9JUlEpOworCWlycV9lbmFibGVfaGF6YXJkKCk7CisJZXZwZSh2cGZsYWdzKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkvKgorCSAqIENyb3NzLVZQRSBJbnRlcnJ1cHQgaGFuZGxlcjogVHJ5IHRvIGRpcmVjdGx5IGRlbGl2ZXIgSVBJcworCSAqIHF1ZXVlZCBmb3IgVENzIG9uIHRoaXMgVlBFIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lLgorCSAqIFJldHVybi1mcm9tLWludGVycnVwdCBzaG91bGQgY2F1c2UgdXMgdG8gZHJhaW4gdGhlIHF1ZXVlCisJICogZm9yIHRoZSBjdXJyZW50IFRDLCBzbyB3ZSBvdWdodCBub3QgdG8gaGF2ZSB0byBkbyBpdCBleHBsaWNpdGx5IGhlcmUuCisJICovCisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQgIT0gbXlfdnBlKQorCQkJY29udGludWU7CisKKwkJcGlwaSA9IHNtdGNfaXBpX2RxKCZJUElRW2NwdV0pOworCQlpZiAocGlwaSAhPSBOVUxMKSB7CisJCQlpZiAoY3B1X2RhdGFbY3B1XS50Y19pZCAhPSBteV90YykgeworCQkJCXNlbnQgPSAwOworCQkJCUxPQ0tfTVRfUFJBKCk7CisJCQkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CisJCQkJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKKwkJCQltaXBzX2loYigpOworCQkJCXRjc3RhdHVzID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOworCQkJCWlmICgodGNzdGF0dXMgJiBUQ1NUQVRVU19JWE1UKSA9PSAwKSB7CisJCQkJCXBvc3RfZGlyZWN0X2lwaShjcHUsIHBpcGkpOworCQkJCQlzZW50ID0gMTsKKwkJCQl9CisJCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOworCQkJCVVOTE9DS19NVF9QUkEoKTsKKwkJCQlpZiAoIXNlbnQpIHsKKwkJCQkJc210Y19pcGlfcmVxKCZJUElRW2NwdV0sIHBpcGkpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBpcGlfZGVjb2RlKCkgc2hvdWxkIGJlIGNhbGxlZAorCQkJCSAqIHdpdGggaW50ZXJydXB0cyBvZmYKKwkJCQkgKi8KKwkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQkJaXBpX2RlY29kZShyZWdzLCBwaXBpKTsKKwkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwaV9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZG9fSVJRKGNwdV9pcGlfaXJxLCByZWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2lwaTsKKwordm9pZCBzZXR1cF9jcm9zc192cGVfaW50ZXJydXB0cyh2b2lkKQoreworCWlmICghY3B1X2hhc192aW50KQorCQlwYW5pYygiU01UQyBLZXJuZWwgcmVxdWlyZXMgVmVjdG9yZWQgSW50ZXJ1cHQgc3VwcG9ydCIpOworCisJc2V0X3ZpX2hhbmRsZXIoTUlQU19DUFVfSVBJX0lSUSwgaXBpX2lycV9kaXNwYXRjaCk7CisKKwlpcnFfaXBpLmhhbmRsZXIgPSBpcGlfaW50ZXJydXB0OworCWlycV9pcGkuZmxhZ3MgPSBTQV9JTlRFUlJVUFQ7CisJaXJxX2lwaS5uYW1lID0gIlNNVENfSVBJIjsKKworCXNldHVwX2lycV9zbXRjKGNwdV9pcGlfaXJxLCAmaXJxX2lwaSwgKDB4MTAwIDw8IE1JUFNfQ1BVX0lQSV9JUlEpKTsKKworCWlycV9kZXNjW2NwdV9pcGlfaXJxXS5zdGF0dXMgfD0gSVJRX1BFUl9DUFU7Cit9CisKKy8qCisgKiBTTVRDLXNwZWNpZmljIGhhY2tzIGludm9rZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbC4KKyAqLworCit2b2lkIHNtdGNfaWRsZV9sb29wX2hvb2sodm9pZCkKK3sKKyNpZmRlZiBTTVRDX0lETEVfSE9PS19ERUJVRworCWludCBpbTsKKwlpbnQgZmxhZ3M7CisJaW50IG10ZmxhZ3M7CisJaW50IGJpdDsKKwlpbnQgdnBlOworCWludCB0YzsKKwlpbnQgaG9va19udGNzOworCS8qCisJICogcHJpbnRrIHdpdGhpbiBETVQtcHJvdGVjdGVkIHJlZ2lvbnMgY2FuIGRlYWRsb2NrLAorCSAqIHNvIGJ1ZmZlciBkaWFnbm9zdGljIG1lc3NhZ2VzIGZvciBsYXRlciBvdXRwdXQuCisJICovCisJY2hhciAqcGRiX21zZzsKKwljaGFyIGlkX2hvX2RiX21zZ1s3NjhdOyAvKiB3b3JzdC1jYXNlIHVzZSBzaG91bGQgYmUgbGVzcyB0aGFuIDcwMCAqLworCisJaWYgKGF0b21pY19yZWFkKCZpZGxlX2hvb2tfaW5pdGlhbGl6ZWQpID09IDApIHsgLyogZmFzdCB0ZXN0ICovCisJCWlmIChhdG9taWNfYWRkX3JldHVybigxLCAmaWRsZV9ob29rX2luaXRpYWxpemVkKSA9PSAxKSB7CisJCQlpbnQgbXZwY29uZjA7CisJCQkvKiBUZWRpb3VzIHN0dWZmIHRvIGp1c3QgZG8gb25jZSAqLworCQkJbXZwY29uZjAgPSByZWFkX2MwX212cGNvbmYwKCk7CisJCQlob29rX250Y3MgPSAoKG12cGNvbmYwICYgTVZQQ09ORjBfUFRDKSA+PiBNVlBDT05GMF9QVENfU0hJRlQpICsgMTsKKwkJCWlmIChob29rX250Y3MgPiBOUl9DUFVTKQorCQkJCWhvb2tfbnRjcyA9IE5SX0NQVVM7CisJCQlmb3IgKHRjID0gMDsgdGMgPCBob29rX250Y3M7IHRjKyspIHsKKwkJCQl0Y25vcHJvZ1t0Y10gPSAwOworCQkJCWNsb2NrX2hhbmdfcmVwb3J0ZWRbdGNdID0gMDsKKwkgICAgCQl9CisJCQlmb3IgKHZwZSA9IDA7IHZwZSA8IDI7IHZwZSsrKQorCQkJCWZvciAoaW0gPSAwOyBpbSA8IDg7IGltKyspCisJCQkJCWltc3R1Y2tjb3VudFt2cGVdW2ltXSA9IDA7CisJCQlwcmludGsoIklkbGUgbG9vcCB0ZXN0IGhvb2sgaW5pdGlhbGl6ZWQgZm9yICVkIFRDc1xuIiwgaG9va19udGNzKTsKKwkJCWF0b21pY19zZXQoJmlkbGVfaG9va19pbml0aWFsaXplZCwgMTAwMCk7CisJCX0gZWxzZSB7CisJCQkvKiBTb21lb25lIGVsc2UgaXMgaW5pdGlhbGl6aW5nIGluIHBhcmFsbGVsIC0gbGV0ICdlbSBmaW5pc2ggKi8KKwkJCXdoaWxlIChhdG9taWNfcmVhZCgmaWRsZV9ob29rX2luaXRpYWxpemVkKSA8IDEwMDApCisJCQkJOworCQl9CisJfQorCisJLyogSGF2ZSB3ZSBzdHVwaWRseSBsZWZ0IElYTVQgc2V0IHNvbWV3aGVyZT8gKi8KKwlpZiAocmVhZF9jMF90Y3N0YXR1cygpICYgMHg0MDApIHsKKwkJd3JpdGVfYzBfdGNzdGF0dXMocmVhZF9jMF90Y3N0YXR1cygpICYgfjB4NDAwKTsKKwkJZWhiKCk7CisJCXByaW50aygiRGFuZ2xpbmcgSVhNVCBpbiBjcHVfaWRsZSgpXG4iKTsKKwl9CisKKwkvKiBIYXZlIHdlIHN0dXBpZGx5IGxlZnQgYW4gSU0gYml0IHR1cm5lZCBvZmY/ICovCisjZGVmaW5lIElNX0xJTUlUIDIwMDAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbXRmbGFncyA9IGRtdCgpOworCXBkYl9tc2cgPSAmaWRfaG9fZGJfbXNnWzBdOworCWltID0gcmVhZF9jMF9zdGF0dXMoKTsKKwl2cGUgPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZDsKKwlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7CisJCS8qCisJCSAqIEluIGN1cnJlbnQgcHJvdG90eXBlLCBJL08gaW50ZXJydXB0cworCQkgKiBhcmUgbWFza2VkIGZvciBWUEUgPiAwCisJCSAqLworCQlpZiAodnBlbWFza1t2cGVdW2JpdF0pIHsKKwkJCWlmICghKGltICYgKDB4MTAwIDw8IGJpdCkpKQorCQkJCWltc3R1Y2tjb3VudFt2cGVdW2JpdF0rKzsKKwkJCWVsc2UKKwkJCQlpbXN0dWNrY291bnRbdnBlXVtiaXRdID0gMDsKKwkJCWlmIChpbXN0dWNrY291bnRbdnBlXVtiaXRdID4gSU1fTElNSVQpIHsKKwkJCQlzZXRfYzBfc3RhdHVzKDB4MTAwIDw8IGJpdCk7CisJCQkJZWhiKCk7CisJCQkJaW1zdHVja2NvdW50W3ZwZV1bYml0XSA9IDA7CisJCQkJcGRiX21zZyArPSBzcHJpbnRmKHBkYl9tc2csCisJCQkJCSJEYW5nbGluZyBJTSAlZCBmaXhlZCBmb3IgVlBFICVkXG4iLCBiaXQsCisJCQkJCXZwZSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGxpbWl0IG91dHN0YW5kaW5nIHRpbWVyIElQSXMsIGNoZWNrIGZvciBodW5nIFRDCisJICovCisJZm9yICh0YyA9IDA7IHRjIDwgTlJfQ1BVUzsgdGMrKykgeworCQkvKiBEb24ndCBjaGVjayBvdXJzZWxmIC0gd2UnbGwgZGVxdWV1ZSBJUElzIGp1c3QgYmVsb3cgKi8KKwkJaWYgKCh0YyAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpICYmCisJCSAgICBpcGlfdGltZXJfbGF0Y2hbdGNdID4gdGltZXJxX2xpbWl0KSB7CisJCSAgICBpZiAoY2xvY2tfaGFuZ19yZXBvcnRlZFt0Y10gPT0gMCkgeworCQkJcGRiX21zZyArPSBzcHJpbnRmKHBkYl9tc2csCisJCQkJIlRDICVkIGxvb2tzIGh1bmcgd2l0aCB0aW1lciBsYXRjaCBhdCAlZFxuIiwKKwkJCQl0YywgaXBpX3RpbWVyX2xhdGNoW3RjXSk7CisJCQljbG9ja19oYW5nX3JlcG9ydGVkW3RjXSsrOworCQkJfQorCQl9CisJfQorCWVtdChtdGZsYWdzKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJaWYgKHBkYl9tc2cgIT0gJmlkX2hvX2RiX21zZ1swXSkKKwkJcHJpbnRrKCJDUFUlZDogJXMiLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkX2hvX2RiX21zZyk7CisjZW5kaWYgLyogU01UQ19JRExFX0hPT0tfREVCVUcgKi8KKwkvKgorCSAqIFRvIHRoZSBleHRlbnQgdGhhdCB3ZSd2ZSBldmVyIHR1cm5lZCBpbnRlcnJ1cHRzIG9mZiwKKwkgKiB3ZSBtYXkgaGF2ZSBhY2N1bXVsYXRlZCBkZWZlcnJlZCBJUElzLiAgVGhpcyBpcyBzdWJ0bGUuCisJICogSWYgd2UgdXNlIHRoZSBzbXRjX2lwaV9xZGVwdGgoKSBtYWNybywgd2UnbGwgZ2V0IGFuCisJICogZXhhY3QgbnVtYmVyIC0gYnV0IHdlJ2xsIGFsc28gZGlzYWJsZSBpbnRlcnJ1cHRzCisJICogYW5kIGNyZWF0ZSBhIHdpbmRvdyBvZiBmYWlsdXJlIHdoZXJlIGEgbmV3IElQSSBnZXRzCisJICogcXVldWVkIGFmdGVyIHdlIHRlc3QgdGhlIGRlcHRoIGJ1dCBiZWZvcmUgd2UgcmUtZW5hYmxlCisJICogaW50ZXJydXB0cy4gU28gbG9uZyBhcyBJWE1UIG5ldmVyIGdldHMgc2V0LCBob3dldmVyLAorCSAqIHdlIHNob3VsZCBiZSBPSzogIElmIHdlIHBpY2sgdXAgc29tZXRoaW5nIGFuZCBkaXNwYXRjaAorCSAqIGl0IGhlcmUsIHRoYXQncyBncmVhdC4gSWYgd2Ugc2VlIG5vdGhpbmcsIGJ1dCBjb25jdXJyZW50CisJICogd2l0aCB0aGlzIG9wZXJhdGlvbiwgYW5vdGhlciBUQyBzZW5kcyB1cyBhbiBJUEksIElYTVQKKwkgKiBpcyBjbGVhciwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBhcyBhIHJlYWwgcHNldWRvLWludGVycnVwdAorCSAqIGFuZCBub3QgYSBwc2V1ZG8tcHNldWRvIGludGVycnVwdC4KKwkgKi8KKwlpZiAoSVBJUVtzbXBfcHJvY2Vzc29yX2lkKCldLmRlcHRoID4gMCkgeworCQlzdHJ1Y3Qgc210Y19pcGkgKnBpcGk7CisJCWV4dGVybiB2b2lkIHNlbGZfaXBpKHN0cnVjdCBzbXRjX2lwaSAqKTsKKworCQlpZiAoKHBpcGkgPSBzbXRjX2lwaV9kcSgmSVBJUVtzbXBfcHJvY2Vzc29yX2lkKCldKSkgIT0gTlVMTCkgeworCQkJc2VsZl9pcGkocGlwaSk7CisJCQlzbXRjX2NwdV9zdGF0c1tzbXBfcHJvY2Vzc29yX2lkKCldLnNlbGZpcGlzKys7CisJCX0KKwl9Cit9CisKK3ZvaWQgc210Y19zb2Z0X2R1bXAodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50aygiQ291bnRlciBJbnRlcnJ1cHRzIHRha2VuIHBlciBDUFUgKFRDKVxuIik7CisJZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJcHJpbnRrKCIlZDogJWxkXG4iLCBpLCBzbXRjX2NwdV9zdGF0c1tpXS50aW1lcmludHMpOworCX0KKwlwcmludGsoIlNlbGYtSVBJIGludm9jYXRpb25zOlxuIik7CisJZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJcHJpbnRrKCIlZDogJWxkXG4iLCBpLCBzbXRjX2NwdV9zdGF0c1tpXS5zZWxmaXBpcyk7CisJfQorCXNtdGNfaXBpX3FkdW1wKCk7CisJcHJpbnRrKCJUaW1lciBJUEkgQmFja2xvZ3M6XG4iKTsKKwlmb3IgKGk9MDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQlwcmludGsoIiVkOiAlZFxuIiwgaSwgaXBpX3RpbWVyX2xhdGNoW2ldKTsKKwl9CisJcHJpbnRrKCIlZCBSZWNvdmVyaWVzIG9mIFwic3RvbGVuXCIgRlBVXG4iLAorCSAgICAgICBhdG9taWNfcmVhZCgmc210Y19mcHVfcmVjb3ZlcmllcykpOworfQorCisKKy8qCisgKiBUTEIgbWFuYWdlbWVudCByb3V0aW5lcyBzcGVjaWFsIHRvIFNNVEMKKyAqLworCit2b2lkIHNtdGNfZ2V0X25ld19tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgbXRmbGFncywgdGNzdGF0LCBwcmV2aGFsdCwgYXNpZDsKKwlpbnQgdGxiLCBpOworCisJLyoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gdXNlIGEgc3BpbmxvY2sgaGVyZSwKKwkgKiBidXQgdGhpcyBpcyBpbnZva2VkIGZyb20gd2l0aGluIFRMQiBmbHVzaCByb3V0aW5lcworCSAqIHRoYXQgcHJvdGVjdCB0aGVtc2VsdmVzIHdpdGggRFZQRSwgc28gaWYgYSBsb2NrIGlzCisgICAgICAgICAqIGhlbGQgYnkgYW5vdGhlciBUQywgaXQnbGwgbmV2ZXIgYmUgZnJlZWQuCisJICoKKwkgKiBEVlBFL0RNVCBtdXN0IG5vdCBiZSBkb25lIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLAorCSAqIHNvIGV2ZW4gc28gbW9zdCBjYWxsZXJzIHdpbGwgYWxyZWFkeSBoYXZlIGRpc2FibGVkCisJICogdGhlbSwgbGV0J3MgYmUgcmVhbGx5IGNhcmVmdWwuLi4KKwkgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpIHsKKwkJbXRmbGFncyA9IGR2cGUoKTsKKwkJdGxiID0gMDsKKwl9IGVsc2UgeworCQltdGZsYWdzID0gZG10KCk7CisJCXRsYiA9IGNwdV9kYXRhW2NwdV0udnBlX2lkOworCX0KKwlhc2lkID0gYXNpZF9jYWNoZShjcHUpOworCisJZG8geworCQlpZiAoISgoYXNpZCArPSBBU0lEX0lOQykgJiBBU0lEX01BU0spICkgeworCQkJaWYgKGNwdV9oYXNfdnRhZ19pY2FjaGUpCisJCQkJZmx1c2hfaWNhY2hlX2FsbCgpOworCQkJLyogVHJhdmVyc2UgYWxsIG9ubGluZSBDUFVzIChoYWNrIHJlcXVpcmVzIGNvbnRpZ291cyByYW5nZSkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fb25saW5lX2NwdXMoKTsgaSsrKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG91ciBvd24gQ1BVLCBub3IgdGhvc2Ugb2YKKwkJCQkgKiBDUFVzIHdobyBkb24ndCBzaGFyZSBvdXIgVExCLgorCQkJCSAqLworCQkJCWlmICgoaSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpICYmCisJCQkJICAgICgoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpIHx8CisJCQkJICAgICAoY3B1X2RhdGFbaV0udnBlX2lkID09IGNwdV9kYXRhW2NwdV0udnBlX2lkKSkpIHsKKwkJCQkJc2V0dGMoY3B1X2RhdGFbaV0udGNfaWQpOworCQkJCQlwcmV2aGFsdCA9IHJlYWRfdGNfYzBfdGNoYWx0KCkgJiBUQ0hBTFRfSDsKKwkJCQkJaWYgKCFwcmV2aGFsdCkgeworCQkJCQkJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKKwkJCQkJCW1pcHNfaWhiKCk7CisJCQkJCX0KKwkJCQkJdGNzdGF0ID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOworCQkJCQlzbXRjX2xpdmVfYXNpZFt0bGJdWyh0Y3N0YXQgJiBBU0lEX01BU0spXSB8PSAoYXNpZHVzZSkoMHgxIDw8IGkpOworCQkJCQlpZiAoIXByZXZoYWx0KQorCQkJCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOworCQkJCX0KKwkJCX0KKwkJCWlmICghYXNpZCkJCS8qIGZpeCB2ZXJzaW9uIGlmIG5lZWRlZCAqLworCQkJCWFzaWQgPSBBU0lEX0ZJUlNUX1ZFUlNJT047CisJCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CS8qIHN0YXJ0IG5ldyBhc2lkIGN5Y2xlICovCisJCX0KKwl9IHdoaWxlIChzbXRjX2xpdmVfYXNpZFt0bGJdWyhhc2lkICYgQVNJRF9NQVNLKV0pOworCisJLyoKKwkgKiBTTVRDIHNoYXJlcyB0aGUgVExCIHdpdGhpbiBWUEVzIGFuZCBwb3NzaWJseSBhY3Jvc3MgYWxsIFZQRXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bV9vbmxpbmVfY3B1cygpOyBpKyspIHsKKwkJaWYgKChzbXRjX3N0YXR1cyAmIFNNVENfVExCX1NIQVJFRCkgfHwKKwkJICAgIChjcHVfZGF0YVtpXS52cGVfaWQgPT0gY3B1X2RhdGFbY3B1XS52cGVfaWQpKQorCQkJY3B1X2NvbnRleHQoaSwgbW0pID0gYXNpZF9jYWNoZShpKSA9IGFzaWQ7CisJfQorCisJaWYgKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKQorCQlldnBlKG10ZmxhZ3MpOworCWVsc2UKKwkJZW10KG10ZmxhZ3MpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIEludm9rZWQgZnJvbSBtYWNyb3MgZGVmaW5lZCBpbiBtbXVfY29udGV4dC5oCisgKiB3aGljaCBtdXN0IGFscmVhZHkgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzCisgKiBhbmQgZG9uZSBhIERWUEUgb3IgRE1UIGFzIGFwcHJvcHJpYXRlLgorICovCisKK3ZvaWQgc210Y19mbHVzaF90bGJfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpCit7CisJaW50IGVudHJ5OworCXVuc2lnbmVkIGxvbmcgZWhpOworCisJZW50cnkgPSByZWFkX2MwX3dpcmVkKCk7CisKKwkvKiBUcmF2ZXJzZSBhbGwgbm9uLXdpcmVkIGVudHJpZXMgKi8KKwl3aGlsZSAoZW50cnkgPCBjdXJyZW50X2NwdV9kYXRhLnRsYnNpemUpIHsKKwkJd3JpdGVfYzBfaW5kZXgoZW50cnkpOworCQllaGIoKTsKKwkJdGxiX3JlYWQoKTsKKwkJZWhiKCk7CisJCWVoaSA9IHJlYWRfYzBfZW50cnloaSgpOworCQlpZigoZWhpICYgQVNJRF9NQVNLKSA9PSBhc2lkKSB7CisJCSAgICAvKgorCQkgICAgICogSW52YWxpZGF0ZSBvbmx5IGVudHJpZXMgd2l0aCBzcGVjaWZpZWQgQVNJRCwKKwkJICAgICAqIG1ha2lpbmcgc3VyZSBhbGwgZW50cmllcyBkaWZmZXIuCisJCSAgICAgKi8KKwkJICAgIHdyaXRlX2MwX2VudHJ5aGkoQ0tTRUcwICsgKGVudHJ5IDw8IChQQUdFX1NISUZUICsgMSkpKTsKKwkJICAgIHdyaXRlX2MwX2VudHJ5bG8wKDApOworCQkgICAgd3JpdGVfYzBfZW50cnlsbzEoMCk7CisJCSAgICBtdGMwX3RsYndfaGF6YXJkKCk7CisJCSAgICB0bGJfd3JpdGVfaW5kZXhlZCgpOworCQl9CisJCWVudHJ5Kys7CisJfQorCXdyaXRlX2MwX2luZGV4KFBBUktFRF9JTkRFWCk7CisJdGxid191c2VfaGF6YXJkKCk7Cit9CisKKy8qCisgKiBTdXBwb3J0IGZvciBzaW5nbGUtdGhyZWFkaW5nIGNhY2hlIGZsdXNoIG9wZXJhdGlvbnMuCisgKi8KKworaW50IGhhbHRfc3RhdGVfc2F2ZVtOUl9DUFVTXTsKKworLyoKKyAqIFRvIHJlYWxseSwgcmVhbGx5IGJlIHN1cmUgdGhhdCBub3RoaW5nIGlzIGJlaW5nIGRvbmUKKyAqIGJ5IG90aGVyIFRDcywgaGFsdCB0aGVtIGFsbC4gIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQKKyAqIGEgRFZQRSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUsIHNvIHdoaWxlIHRoZWlyIEhhbHRlZAorICogc3RhdGUgaXMgdGhlb3JldGljYWxseSBhcmNoaXRlY3R1cmFsbHkgdW5zdGFibGUsIGluCisgKiBwcmFjdGljZSwgaXQncyBub3QgZ29pbmcgdG8gY2hhbmdlIHdoaWxlIHdlJ3JlIGxvb2tpbmcKKyAqIGF0IGl0LgorICovCisKK3ZvaWQgc210Y19jZmx1c2hfbG9ja2Rvd24odm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKKwkJCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOworCQkJaGFsdF9zdGF0ZV9zYXZlW2NwdV0gPSByZWFkX3RjX2MwX3RjaGFsdCgpOworCQkJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKKwkJfQorCX0KKwltaXBzX2loYigpOworfQorCisvKiBJdCB3b3VsZCBiZSBjaGVhdGluZyB0byBjaGFuZ2UgdGhlIGNwdV9vbmxpbmUgc3RhdGVzIGR1cmluZyBhIGZsdXNoISAqLworCit2b2lkIHNtdGNfY2ZsdXNoX3JlbGVhc2Uodm9pZCkKK3sKKwlpbnQgY3B1OworCisJLyoKKwkgKiBTdGFydCB3aXRoIGEgaGF6YXJkIGJhcnJpZXIgdG8gZW5zdXJlCisJICogdGhhdCBhbGwgQ0FDSEUgb3BzIGhhdmUgcGxheWVkIHRocm91Z2guCisJICovCisJbWlwc19paGIoKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmIChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCQlzZXR0YyhjcHVfZGF0YVtjcHVdLnRjX2lkKTsKKwkJCXdyaXRlX3RjX2MwX3RjaGFsdChoYWx0X3N0YXRlX3NhdmVbY3B1XSk7CisJCX0KKwl9CisJbWlwc19paGIoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggMmFlYWEyZi4uNWU4YTE4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTI3NiwzMSArMjc2LDkgQEAKIAogYXNtbGlua2FnZSBpbnQgX3N5c19zeXNtaXBzKGludCBjbWQsIGxvbmcgYXJnMSwgaW50IGFyZzIsIGludCBhcmczKQogewotCWludAl0bXAsIGxlbjsKLQljaGFyCV9fdXNlciAqbmFtZTsKKwlpbnQJdG1wOwogCiAJc3dpdGNoKGNtZCkgewotCWNhc2UgU0VUTkFNRTogewotCQljaGFyIG5vZGVuYW1lW19fTkVXX1VUU19MRU4gKyAxXTsKLQotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCW5hbWUgPSAoY2hhciBfX3VzZXIgKikgYXJnMTsKLQotCQlsZW4gPSBzdHJuY3B5X2Zyb21fdXNlcihub2RlbmFtZSwgbmFtZSwgX19ORVdfVVRTX0xFTik7Ci0JCWlmIChsZW4gPCAwKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJZG93bl93cml0ZSgmdXRzX3NlbSk7Ci0JCXN0cm5jcHkoc3lzdGVtX3V0c25hbWUubm9kZW5hbWUsIG5vZGVuYW1lLCBsZW4pOwotCQlub2RlbmFtZVtfX05FV19VVFNfTEVOXSA9ICdcMCc7Ci0JCXN0cmxjcHkoc3lzdGVtX3V0c25hbWUubm9kZW5hbWUsIG5vZGVuYW1lLAotCQkgICAgICAgIHNpemVvZihzeXN0ZW1fdXRzbmFtZS5ub2RlbmFtZSkpOwotCQl1cF93cml0ZSgmdXRzX3NlbSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWNhc2UgTUlQU19BVE9NSUNfU0VUOgogCQlwcmludGsoS0VSTl9DUklUICJIb3cgZGlkIEkgZ2V0IGhlcmU/XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTMsOSArMjkxLDYgQEAKIAljYXNlIEZMVVNIX0NBQ0hFOgogCQlfX2ZsdXNoX2NhY2hlX2FsbCgpOwogCQlyZXR1cm4gMDsKLQotCWNhc2UgTUlQU19SRE5WUkFNOgotCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKaW5kZXggNWU1MWEyZC4uMTNmZjRkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKQEAgLTExNiw4ICsxMTYsNyBAQAogCXdyaXRlX2MwX2NvbXBhcmUoZXhwaXJlbG8pOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgbWlzc2VkIGFueSB0aW1lciBpbnRlcnJ1cHRzLiAgKi8KLQljb3VudCA9IHJlYWRfYzBfY291bnQoKTsKLQlpZiAoKGNvdW50IC0gZXhwaXJlbG8pIDwgMHg3ZmZmZmZmZikgeworCXdoaWxlICgoKGNvdW50ID0gcmVhZF9jMF9jb3VudCgpKSAtIGV4cGlyZWxvKSA8IDB4N2ZmZmZmZmYpIHsKIAkJLyogbWlzc2VkX3RpbWVyX2NvdW50Kys7ICovCiAJCWV4cGlyZWxvID0gY291bnQgKyBjeWNsZXNfcGVyX2ppZmZ5OwogCQl3cml0ZV9jMF9jb21wYXJlKGV4cGlyZWxvKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCBiZWQwZWI2Li5hNzU2NGIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8YXNtL3dhdGNoLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgaGFuZGxlX2ludCh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgaGFuZGxlX3RsYm0odm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIGhhbmRsZV90bGJsKHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfdGxicyh2b2lkKTsKQEAgLTI3OSw5ICsyODAsMTYgQEAKIE5PUkVUX1RZUEUgdm9pZCBBVFRSSUJfTk9SRVQgZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl1bnNpZ25lZCBsb25nIGR2cHJldCA9IGR2cGUoKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAljb25zb2xlX3ZlcmJvc2UoKTsKIAlzcGluX2xvY2tfaXJxKCZkaWVfbG9jayk7CisJYnVzdF9zcGlubG9ja3MoMSk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCW1pcHNfbXRfcmVnZHVtcChkdnByZXQpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlwcmludGsoIiVzWyMlZF06XG4iLCBzdHIsICsrZGllX2NvdW50ZXIpOwogCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwpAQCAtNzUwLDEyICs3NTgsNDMgQEAKIAkJCQkJCSZjdXJyZW50LT50aHJlYWQuZnB1LnNvZnQpOwogCQkJaWYgKHNpZykKIAkJCQlmb3JjZV9zaWcoc2lnLCBjdXJyZW50KTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorCQkJZWxzZSB7CisJCQkvKgorCQkJICogTUlQUyBNVCBwcm9jZXNzb3JzIG1heSBoYXZlIGZld2VyIEZQVSBjb250ZXh0cworCQkJICogdGhhbiBDUFUgdGhyZWFkcy4gSWYgd2UndmUgZW11bGF0ZWQgbW9yZSB0aGFuCisJCQkgKiBzb21lIHRocmVzaG9sZCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zLCBmb3JjZQorCQkJICogbWlncmF0aW9uIHRvIGEgIkNQVSIgdGhhdCBoYXMgRlAgc3VwcG9ydC4KKwkJCSAqLworCQkJIGlmKG10X2ZwZW11bF90aHJlc2hvbGQgPiAwCisJCQkgJiYgKChjdXJyZW50LT50aHJlYWQuZW11bGF0ZWRfZnArKworCQkJICAgID4gbXRfZnBlbXVsX3RocmVzaG9sZCkpKSB7CisJCQkgIC8qCisJCQkgICAqIElmIHRoZXJlJ3Mgbm8gRlBVIHByZXNlbnQsIG9yIGlmIHRoZQorCQkJICAgKiBhcHBsaWNhdGlvbiBoYXMgYWxyZWFkeSByZXN0cmljdGVkCisJCQkgICAqIHRoZSBhbGxvd2VkIHNldCB0byBleGNsdWRlIGFueSBDUFVzCisJCQkgICAqIHdpdGggRlBVcywgd2UnbGwgc2tpcCB0aGUgcHJvY2VkdXJlLgorCQkJICAgKi8KKwkJCSAgaWYgKGNwdXNfaW50ZXJzZWN0cyhjdXJyZW50LT5jcHVzX2FsbG93ZWQsCisJCQkgIAkJCW10X2ZwdV9jcHVtYXNrKSkgeworCQkJICAgIGNwdW1hc2tfdCB0bWFzazsKKworCQkJICAgIGNwdXNfYW5kKHRtYXNrLAorCQkJCQljdXJyZW50LT50aHJlYWQudXNlcl9jcHVzX2FsbG93ZWQsCisJCQkJCW10X2ZwdV9jcHVtYXNrKTsKKwkJCSAgICBzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHRtYXNrKTsKKwkJCSAgICBjdXJyZW50LT50aHJlYWQubWZsYWdzIHw9IE1GX0ZQVUJPVU5EOworCQkJICB9CisJCQkgfQorCQkJfQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCiAJCX0KIAogCQlyZXR1cm47CiAKIAljYXNlIDI6CiAJY2FzZSAzOgorCQlkaWVfaWZfa2VybmVsKCJkb19jcHUgaW52b2tlZCBmcm9tIGtlcm5lbCBjb250ZXh0ISIsIHJlZ3MpOwogCQlicmVhazsKIAl9CiAKQEAgLTc4MCwxOSArODE5LDY0IEBACiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19tY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJY29uc3QgaW50IGZpZWxkID0gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwlpbnQgbXVsdGlfbWF0Y2ggPSByZWdzLT5jcDBfc3RhdHVzICYgU1QwX1RTOworCiAJc2hvd19yZWdzKHJlZ3MpOwotCWR1bXBfdGxiX2FsbCgpOworCisJaWYgKG11bHRpX21hdGNoKSB7CisJCXByaW50aygiSW5kZXggICA6ICUweFxuIiwgcmVhZF9jMF9pbmRleCgpKTsKKwkJcHJpbnRrKCJQYWdlbWFzazogJTB4XG4iLCByZWFkX2MwX3BhZ2VtYXNrKCkpOworCQlwcmludGsoIkVudHJ5SGkgOiAlMCpseFxuIiwgZmllbGQsIHJlYWRfYzBfZW50cnloaSgpKTsKKwkJcHJpbnRrKCJFbnRyeUxvMDogJTAqbHhcbiIsIGZpZWxkLCByZWFkX2MwX2VudHJ5bG8wKCkpOworCQlwcmludGsoIkVudHJ5TG8xOiAlMCpseFxuIiwgZmllbGQsIHJlYWRfYzBfZW50cnlsbzEoKSk7CisJCXByaW50aygiXG4iKTsKKwkJZHVtcF90bGJfYWxsKCk7CisJfQorCisJc2hvd19jb2RlKCh1bnNpZ25lZCBpbnQgKikgcmVncy0+Y3AwX2VwYyk7CisKIAkvKgogCSAqIFNvbWUgY2hpcHMgbWF5IGhhdmUgb3RoZXIgY2F1c2VzIG9mIG1hY2hpbmUgY2hlY2sgKGUuZy4gU0IxCiAJICogZ3JhZHVhdGlvbiB0aW1lcikKIAkgKi8KIAlwYW5pYygiQ2F1Z2h0IE1hY2hpbmUgQ2hlY2sgZXhjZXB0aW9uIC0gJXNjYXVzZWQgYnkgbXVsdGlwbGUgIgogCSAgICAgICJtYXRjaGluZyBlbnRyaWVzIGluIHRoZSBUTEIuIiwKLQkgICAgICAocmVncy0+Y3AwX3N0YXR1cyAmIFNUMF9UUykgPyAiIiA6ICJub3QgIik7CisJICAgICAgKG11bHRpX21hdGNoKSA/ICIiIDogIm5vdCAiKTsKIH0KIAogYXNtbGlua2FnZSB2b2lkIGRvX210KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCWludCBzdWJjb2RlOworCisJZGllX2lmX2tlcm5lbCgiTUlQUyBNVCBUaHJlYWQgZXhjZXB0aW9uIGluIGtlcm5lbCIsIHJlZ3MpOworCisJc3ViY29kZSA9IChyZWFkX3ZwZV9jMF92cGVjb250cm9sKCkgJiBWUEVDT05UUk9MX0VYQ1BUKQorCQkJPj4gVlBFQ09OVFJPTF9FWENQVF9TSElGVDsKKwlzd2l0Y2ggKHN1YmNvZGUpIHsKKwljYXNlIDA6CisJCXByaW50ayhLRVJOX0VSUiAiVGhyZWFkIFVuZGVyZmxvd1xuIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHJpbnRrKEtFUk5fRVJSICJUaHJlYWQgT3ZlcmZsb3dcbiIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBZSUVMRCBRdWFsaWZpZXJcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByaW50ayhLRVJOX0VSUiAiR2F0aW5nIFN0b3JhZ2UgRXhjZXB0aW9uXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwcmludGsoS0VSTl9FUlIgIllJRUxEIFNjaGVkdWxlciBFeGNlcHRpb25cbiIpOworCQlicmVhazsKKwljYXNlIDU6CisJCXByaW50ayhLRVJOX0VSUiAiR2F0aW5nIFN0b3JhZ2UgU2NoZWR1bGllciBFeGNlcHRpb25cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIioqKiBVTktOT1dOIFRIUkVBRCBFWENFUFRJT04gJWQgKioqXG4iLAorCQkJc3ViY29kZSk7CisJCWJyZWFrOworCX0KIAlkaWVfaWZfa2VybmVsKCJNSVBTIE1UIFRocmVhZCBleGNlcHRpb24gaW4ga2VybmVsIiwgcmVncyk7CiAKIAlmb3JjZV9zaWcoU0lHSUxMLCBjdXJyZW50KTsKQEAgLTgzMyw2ICs5MTcsNyBAQAogewogCXN3aXRjaCAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlKSB7CiAJY2FzZSBDUFVfMjRLOgorCWNhc2UgQ1BVXzM0SzoKIAljYXNlIENQVV81S0M6CiAJCXdyaXRlX2MwX2VjYygweDgwMDAwMDAwKTsKIAkJYmFja190b19iYWNrX2MwX2hhemFyZCgpOwpAQCAtOTI4LDcgKzEwMTMsMTUgQEAKICAqLwogdm9pZCBubWlfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXVuc2lnbmVkIGxvbmcgZHZwcmV0ID0gZHZwZSgpOworCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCXByaW50aygiTk1JIHRha2VuISEhIVxuIik7CisJbWlwc19tdF9yZWdkdW1wKGR2cHJldCk7CisjZWxzZQorCWJ1c3Rfc3BpbmxvY2tzKDEpOworCXByaW50aygiTk1JIHRha2VuISEhIVxuIik7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCWRpZSgiTk1JIiwgcmVncyk7CiAJd2hpbGUoMSkgOwogfQpAQCAtOTYwLDI3ICsxMDUzLDI5IEBACiAKICNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgogLyoKLSAqIFNoYWRvdyByZWdpc3RlciBhbGxvY2F0aW9uCisgKiBNSVBTUjIgc2hhZG93IHJlZ2lzdGVyIHNldCBhbGxvY2F0aW9uCiAgKiBGSVhNRTogU01QLi4uCiAgKi8KIAotLyogTUlQU1IyIHNoYWRvdyByZWdpc3RlciBzZXRzICovCi1zdHJ1Y3Qgc2hhZG93X3JlZ2lzdGVycyB7Ci0Jc3BpbmxvY2tfdCBzcl9sb2NrOwkvKiAgKi8KLQlpbnQgc3Jfc3VwcG9ydGVkOwkvKiBOdW1iZXIgb2Ygc2hhZG93IHJlZ2lzdGVyIHNldHMgc3VwcG9ydGVkICovCi0JaW50IHNyX2FsbG9jYXRlZDsJLyogQml0bWFwIG9mIGFsbG9jYXRlZCBzaGFkb3cgcmVnaXN0ZXJzICovCitzdGF0aWMgc3RydWN0IHNoYWRvd19yZWdpc3RlcnMgeworCS8qCisJICogTnVtYmVyIG9mIHNoYWRvdyByZWdpc3RlciBzZXRzIHN1cHBvcnRlZAorCSAqLworCXVuc2lnbmVkIGxvbmcgc3Jfc3VwcG9ydGVkOworCS8qCisJICogQml0bWFwIG9mIGFsbG9jYXRlZCBzaGFkb3cgcmVnaXN0ZXJzCisJICovCisJdW5zaWduZWQgbG9uZyBzcl9hbGxvY2F0ZWQ7CiB9IHNoYWRvd19yZWdpc3RlcnM7CiAKLXZvaWQgbWlwc19zcnNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgbWlwc19zcnNfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyX1NSUwogCXNoYWRvd19yZWdpc3RlcnMuc3Jfc3VwcG9ydGVkID0gKChyZWFkX2MwX3Nyc2N0bCgpID4+IDI2KSAmIDB4MGYpICsgMTsKLQlwcmludGsgKCIlZCBNSVBTUjIgcmVnaXN0ZXIgc2V0cyBhdmFpbGFibGVcbiIsIHNoYWRvd19yZWdpc3RlcnMuc3Jfc3VwcG9ydGVkKTsKLSNlbHNlCi0Jc2hhZG93X3JlZ2lzdGVycy5zcl9zdXBwb3J0ZWQgPSAxOworCXByaW50ayhLRVJOX0lORk8gIiVkIE1JUFNSMiByZWdpc3RlciBzZXRzIGF2YWlsYWJsZVxuIiwKKwkgICAgICAgc2hhZG93X3JlZ2lzdGVycy5zcl9zdXBwb3J0ZWQpOwogI2VuZGlmCiAJc2hhZG93X3JlZ2lzdGVycy5zcl9hbGxvY2F0ZWQgPSAxOwkvKiBTZXQgMCB1c2VkIGJ5IGtlcm5lbCAqLwotCXNwaW5fbG9ja19pbml0KCZzaGFkb3dfcmVnaXN0ZXJzLnNyX2xvY2spOwogfQogCiBpbnQgbWlwc19zcnNfbWF4KHZvaWQpCkBAIC05ODgsMzggKzEwODMsMzAgQEAKIAlyZXR1cm4gc2hhZG93X3JlZ2lzdGVycy5zcl9zdXBwb3J0ZWQ7CiB9CiAKLWludCBtaXBzX3Nyc19hbGxvYyAodm9pZCkKK2ludCBtaXBzX3Nyc19hbGxvYyh2b2lkKQogewogCXN0cnVjdCBzaGFkb3dfcmVnaXN0ZXJzICpzciA9ICZzaGFkb3dfcmVnaXN0ZXJzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNldDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzci0+c3JfbG9jaywgZmxhZ3MpOworYWdhaW46CisJc2V0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmc3ItPnNyX2FsbG9jYXRlZCwgc3ItPnNyX3N1cHBvcnRlZCk7CisJaWYgKHNldCA+PSBzci0+c3Jfc3VwcG9ydGVkKQorCQlyZXR1cm4gLTE7CiAKLQlmb3IgKHNldCA9IDA7IHNldCA8IHNyLT5zcl9zdXBwb3J0ZWQ7IHNldCsrKSB7Ci0JCWlmICgoc3ItPnNyX2FsbG9jYXRlZCAmICgxIDw8IHNldCkpID09IDApIHsKLQkJCXNyLT5zcl9hbGxvY2F0ZWQgfD0gMSA8PCBzZXQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzci0+c3JfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIHNldDsKLQkJfQotCX0KKwlpZiAodGVzdF9hbmRfc2V0X2JpdChzZXQsICZzci0+c3JfYWxsb2NhdGVkKSkKKwkJZ290byBhZ2FpbjsKIAotCS8qIE5vbmUgYXZhaWxhYmxlICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3ItPnNyX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHNldDsKIH0KIAotdm9pZCBtaXBzX3Nyc19mcmVlIChpbnQgc2V0KQordm9pZCBtaXBzX3Nyc19mcmVlKGludCBzZXQpCiB7CiAJc3RydWN0IHNoYWRvd19yZWdpc3RlcnMgKnNyID0gJnNoYWRvd19yZWdpc3RlcnM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzci0+c3JfbG9jaywgZmxhZ3MpOwotCXNyLT5zcl9hbGxvY2F0ZWQgJj0gfigxIDw8IHNldCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3ItPnNyX2xvY2ssIGZsYWdzKTsKKwljbGVhcl9iaXQoc2V0LCAmc3ItPnNyX2FsbG9jYXRlZCk7CiB9CiAKLXZvaWQgKnNldF92aV9zcnNfaGFuZGxlciAoaW50IG4sIHZvaWQgKmFkZHIsIGludCBzcnMpCitzdGF0aWMgdm9pZCAqc2V0X3ZpX3Nyc19oYW5kbGVyKGludCBuLCB2b2lkICphZGRyLCBpbnQgc3JzKQogewogCXVuc2lnbmVkIGxvbmcgaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIG9sZF9oYW5kbGVyID0gdmlfaGFuZGxlcnNbbl07CkBAIC0xMDMyLDggKzExMTksNyBAQAogCWlmIChhZGRyID09IE5VTEwpIHsKIAkJaGFuZGxlciA9ICh1bnNpZ25lZCBsb25nKSBkb19kZWZhdWx0X3ZpOwogCQlzcnMgPSAwOwotCX0KLQllbHNlCisJfSBlbHNlCiAJCWhhbmRsZXIgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKIAl2aV9oYW5kbGVyc1tuXSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOwogCkBAIC0xMDQ1LDggKzExMzEsNyBAQAogCWlmIChjcHVfaGFzX3ZlaWMpIHsKIAkJaWYgKGJvYXJkX2JpbmRfZWljX2ludGVycnVwdCkKIAkJCWJvYXJkX2JpbmRfZWljX2ludGVycnVwdCAobiwgc3JzKTsKLQl9Ci0JZWxzZSBpZiAoY3B1X2hhc192aW50KSB7CisJfSBlbHNlIGlmIChjcHVfaGFzX3ZpbnQpIHsKIAkJLyogU1JTTWFwIGlzIG9ubHkgZGVmaW5lZCBpZiBzaGFkb3cgc2V0cyBhcmUgaW1wbGVtZW50ZWQgKi8KIAkJaWYgKG1pcHNfc3JzX21heCgpID4gMSkKIAkJCWNoYW5nZV9jMF9zcnNtYXAgKDB4ZiA8PCBuKjQsIHNycyA8PCBuKjQpOwpAQCAtMTA2MCw2ICsxMTQ1LDE1IEBACiAKIAkJZXh0ZXJuIGNoYXIgZXhjZXB0X3ZlY192aSwgZXhjZXB0X3ZlY192aV9sdWk7CiAJCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWNfdmlfb3JpLCBleGNlcHRfdmVjX3ZpX2VuZDsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgU01UQyB2ZWN0b3JlZCBpbnRlcnJ1cHQgaGFuZGxlcgorCQkgKiBub3Qgb25seSB3aXRoIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyLCBidXQgd2l0aCB0aGUKKwkJICogU3RhdHVzLklNIGJpdCB0byBiZSBtYXNrZWQgYmVmb3JlIGdvaW5nIHRoZXJlLgorCQkgKi8KKwkJZXh0ZXJuIGNoYXIgZXhjZXB0X3ZlY192aV9tb3JpOworCQljb25zdCBpbnQgbW9yaV9vZmZzZXQgPSAmZXhjZXB0X3ZlY192aV9tb3JpIC0gJmV4Y2VwdF92ZWNfdmk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQljb25zdCBpbnQgaGFuZGxlcl9sZW4gPSAmZXhjZXB0X3ZlY192aV9lbmQgLSAmZXhjZXB0X3ZlY192aTsKIAkJY29uc3QgaW50IGx1aV9vZmZzZXQgPSAmZXhjZXB0X3ZlY192aV9sdWkgLSAmZXhjZXB0X3ZlY192aTsKIAkJY29uc3QgaW50IG9yaV9vZmZzZXQgPSAmZXhjZXB0X3ZlY192aV9vcmkgLSAmZXhjZXB0X3ZlY192aTsKQEAgLTEwNzMsNiArMTE2NywxMiBAQAogCQl9CiAKIAkJbWVtY3B5IChiLCAmZXhjZXB0X3ZlY192aSwgaGFuZGxlcl9sZW4pOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJaWYgKG4gPiA3KQorCQkJcHJpbnRrKCJWZWN0b3IgaW5kZXggJWQgZXhjZWVkcyBTTVRDIG1heGltdW1cbiIsIG4pOworCQl3ID0gKHUzMiAqKShiICsgbW9yaV9vZmZzZXQpOworCQkqdyA9ICgqdyAmIDB4ZmZmZjAwMDApIHwgKDB4MTAwIDw8IG4pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJdyA9ICh1MzIgKikoYiArIGx1aV9vZmZzZXQpOwogCQkqdyA9ICgqdyAmIDB4ZmZmZjAwMDApIHwgKCgodTMyKWhhbmRsZXIgPj4gMTYpICYgMHhmZmZmKTsKIAkJdyA9ICh1MzIgKikoYiArIG9yaV9vZmZzZXQpOwpAQCAtMTA5NSw5ICsxMTk1LDkgQEAKIAlyZXR1cm4gKHZvaWQgKilvbGRfaGFuZGxlcjsKIH0KIAotdm9pZCAqc2V0X3ZpX2hhbmRsZXIgKGludCBuLCB2b2lkICphZGRyKQordm9pZCAqc2V0X3ZpX2hhbmRsZXIoaW50IG4sIHZvaWQgKmFkZHIpCiB7Ci0JcmV0dXJuIHNldF92aV9zcnNfaGFuZGxlciAobiwgYWRkciwgMCk7CisJcmV0dXJuIHNldF92aV9zcnNfaGFuZGxlcihuLCBhZGRyLCAwKTsKIH0KICNlbmRpZgogCkBAIC0xMTEzLDggKzEyMTMsMjkgQEAKIGV4dGVybiBhc21saW5rYWdlIGludCBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0ICpzYyk7CiBleHRlcm4gYXNtbGlua2FnZSBpbnQgZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpOwogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCBzbXBfc2F2ZV9mcF9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0ICpzYykKK3sKKwlyZXR1cm4gY3B1X2hhc19mcHUKKwkgICAgICAgPyBfc2F2ZV9mcF9jb250ZXh0KHNjKQorCSAgICAgICA6IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQoc2MpOworfQorCitzdGF0aWMgaW50IHNtcF9yZXN0b3JlX2ZwX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgKnNjKQoreworCXJldHVybiBjcHVfaGFzX2ZwdQorCSAgICAgICA/IF9yZXN0b3JlX2ZwX2NvbnRleHQoc2MpCisJICAgICAgIDogZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dChzYyk7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSB2b2lkIHNpZ25hbF9pbml0KHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qIEZvciBub3cganVzdCBkbyB0aGUgY3B1X2hhc19mcHUgY2hlY2sgd2hlbiB0aGUgZnVuY3Rpb25zIGFyZSBpbnZva2VkICovCisJc2F2ZV9mcF9jb250ZXh0ID0gc21wX3NhdmVfZnBfY29udGV4dDsKKwlyZXN0b3JlX2ZwX2NvbnRleHQgPSBzbXBfcmVzdG9yZV9mcF9jb250ZXh0OworI2Vsc2UKIAlpZiAoY3B1X2hhc19mcHUpIHsKIAkJc2F2ZV9mcF9jb250ZXh0ID0gX3NhdmVfZnBfY29udGV4dDsKIAkJcmVzdG9yZV9mcF9jb250ZXh0ID0gX3Jlc3RvcmVfZnBfY29udGV4dDsKQEAgLTExMjIsNiArMTI0Myw3IEBACiAJCXNhdmVfZnBfY29udGV4dCA9IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQ7CiAJCXJlc3RvcmVfZnBfY29udGV4dCA9IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQ7CiAJfQorI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfTUlQUzMyX0NPTVBBVApAQCAtMTE1OCw2ICsxMjgwLDIwIEBACiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzX3NldCA9IFNUMF9DVTA7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWludCBzZWNvbmRhcnlUQyA9IDA7CisJaW50IGJvb3RUQyA9IChjcHUgPT0gMCk7CisKKwkvKgorCSAqIE9ubHkgZG8gcGVyX2NwdV90cmFwX2luaXQoKSBmb3IgZmlyc3QgVEMgb2YgRWFjaCBWUEUuCisJICogTm90ZSB0aGF0IHRoaXMgaGFjayBhc3N1bWVzIHRoYXQgdGhlIFNNVEMgaW5pdCBjb2RlCisJICogYXNzaWducyBUQ3MgY29uc2VjdXRpdmVseSBhbmQgaW4gYXNjZW5kaW5nIG9yZGVyLgorCSAqLworCisJaWYgKCgocmVhZF9jMF90Y2JpbmQoKSAmIFRDQklORF9DVVJUQykgIT0gMCkgJiYKKwkgICAgKChyZWFkX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlZQRSkgPT0gY3B1X2RhdGFbY3B1IC0gMV0udnBlX2lkKSkKKwkJc2Vjb25kYXJ5VEMgPSAxOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogCS8qCiAJICogRGlzYWJsZSBjb3Byb2Nlc3NvcnMgYW5kIHNlbGVjdCAzMi1iaXQgb3IgNjQtYml0IGFkZHJlc3NpbmcKQEAgLTExODAsNiArMTMxNiwxMCBAQAogCXdyaXRlX2MwX2h3cmVuYSAoMHgwMDAwMDAwZik7IC8qIEFsbG93IHJkaHdyIHRvIGFsbCByZWdpc3RlcnMgKi8KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWlmICghc2Vjb25kYXJ5VEMpIHsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAkvKgogCSAqIEludGVycnVwdCBoYW5kbGluZy4KIAkgKi8KQEAgLTExOTYsNiArMTMzNiw5IEBACiAJCX0gZWxzZQogCQkJc2V0X2MwX2NhdXNlKENBVVNFRl9JVik7CiAJfQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl9CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJY3B1X2RhdGFbY3B1XS5hc2lkX2NhY2hlID0gQVNJRF9GSVJTVF9WRVJTSU9OOwogCVRMQk1JU1NfSEFORExFUl9TRVRVUCgpOwpAQCAtMTIwNSw4ICsxMzQ4LDE0IEBACiAJQlVHX09OKGN1cnJlbnQtPm1tKTsKIAllbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgY3VycmVudCk7CiAKLQljcHVfY2FjaGVfaW5pdCgpOwotCXRsYl9pbml0KCk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWlmIChib290VEMpIHsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJCWNwdV9jYWNoZV9pbml0KCk7CisJCXRsYl9pbml0KCk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCX0KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiB9CiAKIC8qIEluc3RhbGwgQ1BVIGV4Y2VwdGlvbiBoYW5kbGVyICovCkBAIC0xMjc4LDcgKzE0MjcsNyBAQAogCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KSB7CiAJCWludCBudmVjID0gY3B1X2hhc192ZWljID8gNjQgOiA4OwogCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKQotCQkJc2V0X3ZpX2hhbmRsZXIgKGksIE5VTEwpOworCQkJc2V0X3ZpX2hhbmRsZXIoaSwgTlVMTCk7CiAJfQogCWVsc2UgaWYgKGNwdV9oYXNfZGl2ZWMpCiAJCXNldF9oYW5kbGVyKDB4MjAwLCAmZXhjZXB0X3ZlYzQsIDB4OCk7CkBAIC0xMjk3LDYgKzE0NDYsNyBAQAogCWlmIChib2FyZF9iZV9pbml0KQogCQlib2FyZF9iZV9pbml0KCk7CiAKKwlzZXRfZXhjZXB0X3ZlY3RvcigwLCBoYW5kbGVfaW50KTsKIAlzZXRfZXhjZXB0X3ZlY3RvcigxLCBoYW5kbGVfdGxibSk7CiAJc2V0X2V4Y2VwdF92ZWN0b3IoMiwgaGFuZGxlX3RsYmwpOwogCXNldF9leGNlcHRfdmVjdG9yKDMsIGhhbmRsZV90bGJzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAyYWQwY2VkLi5iODRkMWY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKLSN1bmRlZiBtaXBzCQkvKiBDUFAgcmVhbGx5IHN1Y2tzIGZvciB0aGlzIGpvYiAgKi8KKyN1bmRlZiBtaXBzCiAjZGVmaW5lIG1pcHMgbWlwcwogT1VUUFVUX0FSQ0gobWlwcykKIEVOVFJZKGtlcm5lbF9lbnRyeSkKQEAgLTE1MSwyMyArMTUxLDEzIEBACiAKICAgLyogVGhpcyBpcyB0aGUgTUlQUyBzcGVjaWZpYyBtZGVidWcgc2VjdGlvbi4gICovCiAgIC5tZGVidWcgOiB7ICooLm1kZWJ1ZykgfQotICAvKiBUaGVzZSBhcmUgbmVlZGVkIGZvciBFTEYgYmFja2VuZHMgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4KLSAgICAgY29udmVydGVkIHRvIHRoZSBuZXcgc3R5bGUgbGlua2VyLiAgKi8KLSAgLnN0YWIgMCA6IHsgKiguc3RhYikgfQotICAuc3RhYnN0ciAwIDogeyAqKC5zdGFic3RyKSB9Ci0gIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgotICAgICBTeW1ib2xzIGluIHRoZSAuZGVidWcgRFdBUkYgc2VjdGlvbiBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgICAgc2VjdGlvbiBzbyB3ZSBiZWdpbiAuZGVidWcgYXQgMC4gIEl0J3Mgbm90IGNsZWFyIHlldCB3aGF0IG5lZWRzIHRvIGhhcHBlbgotICAgICBmb3IgdGhlIG90aGVycy4gICAqLwotICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KLSAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KLSAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KLSAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9Ci0gIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9Ci0gIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisKKyAgU1RBQlNfREVCVUcKKworICBEV0FSRl9ERUJVRworCiAgIC8qIFRoZXNlIG11c3QgYXBwZWFyIHJlZ2FyZGxlc3Mgb2YgIC4gICovCiAgIC5ncHRhYi5zZGF0YSA6IHsgKiguZ3B0YWIuZGF0YSkgKiguZ3B0YWIuc2RhdGEpIH0KICAgLmdwdGFiLnNic3MgOiB7ICooLmdwdGFiLmJzcykgKiguZ3B0YWIuc2JzcykgfQotICAuY29tbWVudCA6IHsgKiguY29tbWVudCkgfQogICAubm90ZSA6IHsgKigubm90ZSkgfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKaW5kZXggYWU4M2I3NS4uODVkN2RmNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYworKysgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCiAgKi8KIAogLyoKQEAgLTI3LDExICsyNiw4IEBACiAgKgogICogVG8gbG9hZCBhbmQgcnVuLCBzaW1wbHkgY2F0IGEgU1AgJ3Byb2dyYW0gZmlsZScgdG8gL2Rldi92cGUxLgogICogaS5lIGNhdCBzcGFwcCA+L2Rldi92cGUxLgotICoKLSAqIFlvdSdsbCBuZWVkIHRvIGhhdmUgdGhlIGZvbGxvd2luZyBkZXZpY2UgZmlsZXMuCi0gKiBta25vZCAvZGV2L3ZwZTAgYyA2MyAwCi0gKiBta25vZCAvZGV2L3ZwZTEgYyA2MyAxCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTUsNiArNTEsOCBAQAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS92cGUuaD4KKyNpbmNsdWRlIDxhc20va3NwZC5oPgogCiB0eXBlZGVmIHZvaWQgKnZwZV9oYW5kbGU7CiAKQEAgLTY4LDYgKzY2LDExIEBACiBzdGF0aWMgY2hhciBtb2R1bGVfbmFtZVtdID0gInZwZSI7CiBzdGF0aWMgaW50IG1ham9yOwogCisjaWZkZWYgQ09ORklHX01JUFNfQVBTUF9LU1BECisgc3RhdGljIHN0cnVjdCBrc3BkX25vdGlmaWNhdGlvbnMga3NwZF9ldmVudHM7CitzdGF0aWMgaW50IGtzcGRfZXZlbnRzX3JlcWQgPSAwOworI2VuZGlmCisKIC8qIGdyYWIgdGhlIGxpa2VseSBhbW91bnQgb2YgbWVtb3J5IHdlIHdpbGwgbmVlZC4gKi8KICNpZmRlZiBDT05GSUdfTUlQU19WUEVfTE9BREVSX1RPTQogI2RlZmluZSBQX1NJWkUgKDIgKiAxMDI0ICogMTAyNCkKQEAgLTc2LDcgKzc5LDEwIEBACiAjZGVmaW5lIFBfU0laRSAoMjU2ICogMTAyNCkKICNlbmRpZgogCitleHRlcm4gdW5zaWduZWQgbG9uZyBwaHlzaWNhbF9tZW1zaXplOworCiAjZGVmaW5lIE1BWF9WUEVTIDE2CisjZGVmaW5lIFZQRV9QQVRIX01BWCAyNTYKIAogZW51bSB2cGVfc3RhdGUgewogCVZQRV9TVEFURV9VTlVTRUQgPSAwLApAQCAtMTAyLDYgKzEwOCw4IEBACiAJdW5zaWduZWQgbG9uZyBsZW47CiAJY2hhciAqcGJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIHBsZW47CisJdW5zaWduZWQgaW50IHVpZCwgZ2lkOworCWNoYXIgY3dkW1ZQRV9QQVRIX01BWF07CiAKIAl1bnNpZ25lZCBsb25nIF9fc3RhcnQ7CiAKQEAgLTExMyw2ICsxMjEsOSBAQAogCiAJLyogc2hhcmVkIHN5bWJvbCBhZGRyZXNzICovCiAJdm9pZCAqc2hhcmVkX3B0cjsKKworCS8qIHRoZSBsaXN0IG9mIHdobyB3YW50cyB0byBrbm93IHdoZW4gc29tZXRoaW5nIG1ham9yIGhhcHBlbnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vdGlmeTsKIH07CiAKIHN0cnVjdCB0YyB7CkBAIC0xMzgsNyArMTQ5LDcgQEAKIH0gdnBlY29udHJvbDsKIAogc3RhdGljIHZvaWQgcmVsZWFzZV9wcm9nbWVtKHZvaWQgKnB0cik7Ci1zdGF0aWMgdm9pZCBkdW1wX3ZwZShzdHJ1Y3QgdnBlICogdik7CisvKiBzdGF0aWMgX19hdHRyaWJ1dGVfdXNlZF9fIHZvaWQgZHVtcF92cGUoc3RydWN0IHZwZSAqIHYpOyAqLwogZXh0ZXJuIHZvaWQgc2F2ZV9ncF9hZGRyZXNzKHVuc2lnbmVkIGludCBzZWNiYXNlLCB1bnNpZ25lZCBpbnQgcmVsKTsKIAogLyogZ2V0IHRoZSB2cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWlub3IgKi8KQEAgLTE0NiwxMiArMTU3LDE0IEBACiB7CiAJc3RydWN0IHZwZSAqdjsKIAorCWlmICghY3B1X2hhc19taXBzbXQpCisJCXJldHVybiBOVUxMOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2LCAmdnBlY29udHJvbC52cGVfbGlzdCwgbGlzdCkgewogCQlpZiAodi0+bWlub3IgPT0gbWlub3IpCiAJCQlyZXR1cm4gdjsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiVlBFOiBnZXRfdnBlIG1pbm9yICVkIG5vdCBmb3VuZFxuIiwgbWlub3IpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNjUsOCArMTc4LDYgQEAKIAkJCXJldHVybiB0OwogCX0KIAotCXByaW50ayhLRVJOX0RFQlVHICJWUEU6IGdldF90YyBpbmRleCAlZCBub3QgZm91bmRcbiIsIGluZGV4KTsKLQogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNzksOCArMTkwLDYgQEAKIAkJCXJldHVybiB0OwogCX0KIAotCXByaW50ayhLRVJOX0RFQlVHICJWUEU6IEFsbCBUQydzIGFyZSBpbiB1c2VcbiIpOwotCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE5MCwxMyArMTk5LDEzIEBACiAJc3RydWN0IHZwZSAqdjsKIAogCWlmICgodiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2cGUpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IGFsbG9jX3ZwZSBubyBtZW1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmdi0+dGMpOwogCWxpc3RfYWRkX3RhaWwoJnYtPmxpc3QsICZ2cGVjb250cm9sLnZwZV9saXN0KTsKIAorCUlOSVRfTElTVF9IRUFEKCZ2LT5ub3RpZnkpOwogCXYtPm1pbm9yID0gbWlub3I7CiAJcmV0dXJuIHY7CiB9CkBAIC0yMDcsNyArMjE2LDYgQEAKIAlzdHJ1Y3QgdGMgKnQ7CiAKIAlpZiAoKHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGMpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IGFsbG9jX3RjIG5vIG1lbVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMjM2LDIwICsyNDQsMTYgQEAKIAlwcmludGsoImNvbmZpZzMgMHglbHggTVQgJWxkXG4iLCB2YWwsCiAJICAgICAgICh2YWwgJiBDT05GSUczX01UKSA+PiBDT05GSUczX01UX1NISUZUKTsKIAotCXZhbCA9IHJlYWRfYzBfbXZwY29uZjAoKTsKLQlwcmludGsoIm12cGNvbmYwIDB4JWx4LCBQVlBFICVsZCBQVEMgJWxkIE0gJWxkXG4iLCB2YWwsCi0JICAgICAgICh2YWwgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZULAotCSAgICAgICB2YWwgJiBNVlBDT05GMF9QVEMsICh2YWwgJiBNVlBDT05GMF9NKSA+PiBNVlBDT05GMF9NX1NISUZUKTsKLQogCXZhbCA9IHJlYWRfYzBfbXZwY29udHJvbCgpOwogCXByaW50aygiTVZQQ29udHJvbCAweCVseCwgU1RMQiAlbGQgVlBDICVsZCBFVlAgJWxkXG4iLCB2YWwsCiAJICAgICAgICh2YWwgJiBNVlBDT05UUk9MX1NUTEIpID4+IE1WUENPTlRST0xfU1RMQl9TSElGVCwKIAkgICAgICAgKHZhbCAmIE1WUENPTlRST0xfVlBDKSA+PiBNVlBDT05UUk9MX1ZQQ19TSElGVCwKIAkgICAgICAgKHZhbCAmIE1WUENPTlRST0xfRVZQKSk7CiAKLQl2YWwgPSByZWFkX2MwX3ZwZWNvbmYwKCk7Ci0JcHJpbnRrKCJWUEVDb25mMCAweCVseCBNVlAgJWxkXG4iLCB2YWwsCi0JICAgICAgICh2YWwgJiBWUEVDT05GMF9NVlApID4+IFZQRUNPTkYwX01WUF9TSElGVCk7CisJdmFsID0gcmVhZF9jMF9tdnBjb25mMCgpOworCXByaW50aygibXZwY29uZjAgMHglbHgsIFBWUEUgJWxkIFBUQyAlbGQgTSAlbGRcbiIsIHZhbCwKKwkgICAgICAgKHZhbCAmIE1WUENPTkYwX1BWUEUpID4+IE1WUENPTkYwX1BWUEVfU0hJRlQsCisJICAgICAgIHZhbCAmIE1WUENPTkYwX1BUQywgKHZhbCAmIE1WUENPTkYwX00pID4+IE1WUENPTkYwX01fU0hJRlQpOwogfQogCiAvKiBGaW5kIHNvbWUgVlBFIHByb2dyYW0gc3BhY2UgICovCkBAIC0zNTQsOSArMzU4LDkgQEAKIAl9CiAKIAlpZiggKHJlbCA+IDMyNzY4KSB8fCAocmVsIDwgLTMyNzY4KSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiYXBwbHlfcl9taXBzX2dwcmVsMTY6IHJlbGF0aXZlIGFkZHJlc3Mgb3V0IG9mIHJhbmdlIDB4JXggJWRcbiIsCi0JCSAgICAgICByZWwsIHJlbCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUEUgbG9hZGVyOiBhcHBseV9yX21pcHNfZ3ByZWwxNjogIgorCQkgICAgICAgInJlbGF0aXZlIGFkZHJlc3MgMHgleCBvdXQgb2YgcmFuZ2Ugb2YgZ3AgcmVnaXN0ZXJcbiIsCisJCSAgICAgICByZWwpOwogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCkBAIC0zNzQsOCArMzc4LDggQEAKIAlyZWwgLT0gMTsJCS8vIGFuZCBvbmUgaW5zdHJ1Y3Rpb24gbGVzcyBkdWUgdG8gdGhlIGJyYW5jaCBkZWxheSBzbG90LgogCiAJaWYoIChyZWwgPiAzMjc2OCkgfHwgKHJlbCA8IC0zMjc2OCkgKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImFwcGx5X3JfbWlwc19wYzE2OiByZWxhdGl2ZSBhZGRyZXNzIG91dCBvZiByYW5nZSAweCV4XG4iLCByZWwpOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlBFIGxvYWRlcjogIgorIAkJICAgICAgICJhcHBseV9yX21pcHNfcGMxNjogcmVsYXRpdmUgYWRkcmVzcyBvdXQgb2YgcmFuZ2UgMHgleFxuIiwgcmVsKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIApAQCAtMzk2LDcgKzQwMCw4IEBACiAJCQkgICBFbGYzMl9BZGRyIHYpCiB7CiAJaWYgKHYgJSA0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibW9kdWxlICVzOiBkYW5nZXJvdXMgcmVsb2NhdGlvbiBtb2Q0XG4iLCBtZS0+bmFtZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUEUgbG9hZGVyOiBhcHBseV9yX21pcHNfMjYgIgorCQkgICAgICAgIiB1bmFsaWduZWQgcmVsb2NhdGlvblxuIik7CiAJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAKQEAgLTQ1OSwxMiArNDY0LDEzIEBACiAJCQkvKgogCQkJICogVGhlIHZhbHVlIGZvciB0aGUgSEkxNiBoYWQgYmVzdCBiZSB0aGUgc2FtZS4KIAkJCSAqLwotCQkJaWYgKHYgIT0gbC0+dmFsdWUpIHsKLQkJCQlwcmludGsoIiVkICE9ICVkXG4iLCB2LCBsLT52YWx1ZSk7Ci0JCQkJZ290byBvdXRfZGFuZ2VyOworIAkJCWlmICh2ICE9IGwtPnZhbHVlKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlZQRSBsb2FkZXI6ICIKKwkJCQkgICAgICAgImFwcGx5X3JfbWlwc19sbzE2L2hpMTY6IAkiCisJCQkJICAgICAgICJpbmNvbnNpc3RlbnQgdmFsdWUgaW5mb3JtYXRpb25cbiIpOworCQkJCXJldHVybiAtRU5PRVhFQzsKIAkJCX0KIAotCiAJCQkvKgogCQkJICogRG8gdGhlIEhJMTYgcmVsb2NhdGlvbi4gIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBkb24ndAogCQkJICogbmVlZCB0byBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBMTzE2IGl0c2VsZiwgZXhjZXB0CkBAIC01MDAsMTEgKzUwNiw2IEBACiAJKmxvY2F0aW9uID0gaW5zbmxvOwogCiAJcmV0dXJuIDA7Ci0KLW91dF9kYW5nZXI6Ci0JcHJpbnRrKEtFUk5fRVJSICJtb2R1bGUgJXM6IGRhbmdlcm91cyAiICJyZWxvY2F0aW9uXG4iLCBtZS0+bmFtZSk7Ci0KLQlyZXR1cm4gLUVOT0VYRUM7CiB9CiAKIHN0YXRpYyBpbnQgKCpyZWxvY19oYW5kbGVyc1tdKSAoc3RydWN0IG1vZHVsZSAqbWUsIHVpbnQzMl90ICpsb2NhdGlvbiwKQEAgLTUxOCw2ICs1MTksMTUgQEAKIAlbUl9NSVBTX1BDMTZdID0gYXBwbHlfcl9taXBzX3BjMTYKIH07CiAKK3N0YXRpYyBjaGFyICpyc3Ryc1tdID0geworICAgIAlbUl9NSVBTX05PTkVdCT0gIk1JUFNfTk9ORSIsCisJW1JfTUlQU18zMl0JPSAiTUlQU18zMiIsCisJW1JfTUlQU18yNl0JPSAiTUlQU18yNiIsCisJW1JfTUlQU19ISTE2XQk9ICJNSVBTX0hJMTYiLAorCVtSX01JUFNfTE8xNl0JPSAiTUlQU19MTzE2IiwKKwlbUl9NSVBTX0dQUkVMMTZdID0gIk1JUFNfR1BSRUwxNiIsCisJW1JfTUlQU19QQzE2XSA9ICJNSVBTX1BDMTYiCit9OwogCiBpbnQgYXBwbHlfcmVsb2NhdGlvbnMoRWxmMzJfU2hkciAqc2VjaGRycywKIAkJICAgICAgY29uc3QgY2hhciAqc3RydGFiLApAQCAtNTUyLDE1ICs1NjIsMTMgQEAKIAogCQlyZXMgPSByZWxvY19oYW5kbGVyc1tFTEYzMl9SX1RZUEUocl9pbmZvKV0obWUsIGxvY2F0aW9uLCB2KTsKIAkJaWYoIHJlcyApIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgICAgInJlbG9jYXRpb24gZXJyb3IgMHgleCBzeW0gcmVmZXIgPCVzPiB2YWx1ZSAweCV4ICIKLQkJCSAgICAgICAidHlwZSAweCV4IHJfaW5mbyAweCV4XG4iLAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpbG9jYXRpb24sIHN0cnRhYiArIHN5bS0+c3RfbmFtZSwgdiwKLQkJCSAgICAgICByX2luZm8sIEVMRjMyX1JfVFlQRShyX2luZm8pKTsKLQkJfQotCi0JCWlmIChyZXMpCisJCQljaGFyICpyID0gcnN0cnNbRUxGMzJfUl9UWVBFKHJfaW5mbyldOworCQkgICAgCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IC50ZXh0KzB4JXggIgorCQkJICAgICAgICJyZWxvY2F0aW9uIHR5cGUgJXMgZm9yIHN5bWJvbCBcIiVzXCIgZmFpbGVkXG4iLAorCQkJICAgICAgIHJlbFtpXS5yX29mZnNldCwgciA/IHIgOiAiVU5LTk9XTiIsCisJCQkgICAgICAgc3RydGFiICsgc3ltLT5zdF9uYW1lKTsKIAkJCXJldHVybiByZXM7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU3Niw3ICs1ODQsNyBAQAogCiAKIC8qIENoYW5nZSBhbGwgc3ltYm9scyBzbyB0aGF0IHNoX3ZhbHVlIGVuY29kZXMgdGhlIHBvaW50ZXIgZGlyZWN0bHkuICovCi1zdGF0aWMgaW50IHNpbXBsaWZ5X3N5bWJvbHMoRWxmX1NoZHIgKiBzZWNoZHJzLAorc3RhdGljIHZvaWQgc2ltcGxpZnlfc3ltYm9scyhFbGZfU2hkciAqIHNlY2hkcnMsCiAJCQkgICAgdW5zaWduZWQgaW50IHN5bWluZGV4LAogCQkJICAgIGNvbnN0IGNoYXIgKnN0cnRhYiwKIAkJCSAgICBjb25zdCBjaGFyICpzZWNzdHJpbmdzLApAQCAtNTg1LDE4ICs1OTMsMjEgQEAKIAlFbGZfU3ltICpzeW0gPSAodm9pZCAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBzZWNiYXNlLCBic3NiYXNlID0gMDsKIAl1bnNpZ25lZCBpbnQgaSwgbiA9IHNlY2hkcnNbc3ltaW5kZXhdLnNoX3NpemUgLyBzaXplb2YoRWxmX1N5bSk7Ci0JaW50IHJldCA9IDAsIHNpemU7CisJaW50IHNpemU7CiAKIAkvKiBmaW5kIHRoZSAuYnNzIHNlY3Rpb24gZm9yIENPTU1PTiBzeW1ib2xzICovCiAJZm9yIChpID0gMDsgaSA8IG5zZWNzOyBpKyspIHsKLQkJaWYgKHN0cm5jbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgIi5ic3MiLCA0KSA9PSAwKQorCQlpZiAoc3RybmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCAiLmJzcyIsIDQpID09IDApIHsKIAkJCWJzc2Jhc2UgPSBzZWNoZHJzW2ldLnNoX2FkZHI7CisJCQlicmVhazsKKwkJfQogCX0KIAogCWZvciAoaSA9IDE7IGkgPCBuOyBpKyspIHsKIAkJc3dpdGNoIChzeW1baV0uc3Rfc2huZHgpIHsKIAkJY2FzZSBTSE5fQ09NTU9OOgotCQkJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBzeW1ib2wgaW4gdGhlIC5ic3Mgc2VjdGlvbi4gc3RfdmFsdWUgaXMgY3VycmVudGx5IHNpemUuCisJCQkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHN5bWJvbCBpbiB0aGUgLmJzcyBzZWN0aW9uLgorCQkJICAgc3RfdmFsdWUgaXMgY3VycmVudGx5IHNpemUuCiAJCQkgICBXZSB3YW50IGl0IHRvIGhhdmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHN5bWJvbC4gKi8KIAogCQkJc2l6ZSA9IHN5bVtpXS5zdF92YWx1ZTsKQEAgLTYxNCwxMSArNjI1LDkgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0hOX01JUFNfU0NPTU1PTjoKLQotCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAgICAic2ltcGxpZnlfc3ltYm9sczogaWdub3JpbmcgU0hOX01JUFNfU0NPTU1PTiBzeW1ib2wgPCVzPiBzdF9zaG5keCAlZFxuIiwKLQkJCSAgICAgICBzdHJ0YWIgKyBzeW1baV0uc3RfbmFtZSwgc3ltW2ldLnN0X3NobmR4KTsKLQorCQkJcHJpbnRrKEtFUk5fREVCVUcgInNpbXBsaWZ5X3N5bWJvbHM6IGlnbm9yaW5nIFNITl9NSVBTX1NDT01NT04iCisJCQkgICAgICAgInN5bWJvbCA8JXM+IHN0X3NobmR4ICVkXG4iLCBzdHJ0YWIgKyBzeW1baV0uc3RfbmFtZSwKKwkJCSAgICAgICBzeW1baV0uc3Rfc2huZHgpOwogCQkJLy8gLnNic3Mgc2VjdGlvbgogCQkJYnJlYWs7CiAKQEAgLTYzMiwxMCArNjQxLDcgQEAKIAkJCXN5bVtpXS5zdF92YWx1ZSArPSBzZWNiYXNlOwogCQkJYnJlYWs7CiAJCX0KLQogCX0KLQotCXJldHVybiByZXQ7CiB9CiAKICNpZmRlZiBERUJVR19FTEZMT0FERVIKQEAgLTY1NSw5ICs2NjEsMjYgQEAKIAogc3RhdGljIHZvaWQgZHVtcF90YyhzdHJ1Y3QgdGMgKnQpCiB7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBUQyBpbmRleCAlZCBUQ1N0YXR1cyAweCVseCBoYWx0IDB4JWx4XG4iLAotCSAgICAgICB0LT5pbmRleCwgcmVhZF90Y19jMF90Y3N0YXR1cygpLCByZWFkX3RjX2MwX3RjaGFsdCgpKTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IHRjcmVzdGFydCAweCVseFxuIiwgcmVhZF90Y19jMF90Y3Jlc3RhcnQoKSk7CisgIAl1bnNpZ25lZCBsb25nIHZhbDsKKworICAJc2V0dGModC0+aW5kZXgpOworIAlwcmludGsoS0VSTl9ERUJVRyAiVlBFIGxvYWRlcjogVEMgaW5kZXggJWQgdGFyZ3RjICVsZCAiCisgCSAgICAgICAiVENTdGF0dXMgMHglbHggaGFsdCAweCVseFxuIiwKKyAgCSAgICAgICB0LT5pbmRleCwgcmVhZF9jMF92cGVjb250cm9sKCkgJiBWUEVDT05UUk9MX1RBUkdUQywKKyAgCSAgICAgICByZWFkX3RjX2MwX3Rjc3RhdHVzKCksIHJlYWRfdGNfYzBfdGNoYWx0KCkpOworCisgCXByaW50ayhLRVJOX0RFQlVHICIgdGNyZXN0YXJ0IDB4JWx4XG4iLCByZWFkX3RjX2MwX3RjcmVzdGFydCgpKTsKKyAJcHJpbnRrKEtFUk5fREVCVUcgIiB0Y2JpbmQgMHglbHhcbiIsIHJlYWRfdGNfYzBfdGNiaW5kKCkpOworCisgIAl2YWwgPSByZWFkX2MwX3ZwZWNvbmYwKCk7CisgCXByaW50ayhLRVJOX0RFQlVHICIgVlBFQ29uZjAgMHglbHggTVZQICVsZFxuIiwgdmFsLAorICAJICAgICAgICh2YWwgJiBWUEVDT05GMF9NVlApID4+IFZQRUNPTkYwX01WUF9TSElGVCk7CisKKyAJcHJpbnRrKEtFUk5fREVCVUcgIiBjMCBzdGF0dXMgMHglbHhcbiIsIHJlYWRfdnBlX2MwX3N0YXR1cygpKTsKKyAJcHJpbnRrKEtFUk5fREVCVUcgIiBjMCBjYXVzZSAweCVseFxuIiwgcmVhZF92cGVfYzBfY2F1c2UoKSk7CisKKyAJcHJpbnRrKEtFUk5fREVCVUcgIiBjMCBiYWR2YWRkciAweCVseFxuIiwgcmVhZF92cGVfYzBfYmFkdmFkZHIoKSk7CisgCXByaW50ayhLRVJOX0RFQlVHICIgYzAgZXBjIDB4JWx4XG4iLCByZWFkX3ZwZV9jMF9lcGMoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBfdGNsaXN0KHZvaWQpCkBAIC02NzIsOTYgKzY5NSwxMDggQEAKIC8qIFdlIGFyZSBwcmVwYXJlZCBzbyBjb25maWd1cmUgYW5kIHN0YXJ0IHRoZSBWUEUuLi4gKi8KIGludCB2cGVfcnVuKHN0cnVjdCB2cGUgKiB2KQogewotCXVuc2lnbmVkIGxvbmcgdmFsOworCXN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyAqbjsKKwl1bnNpZ25lZCBsb25nIHZhbCwgZG10X2ZsYWc7CiAJc3RydWN0IHRjICp0OwogCiAJLyogY2hlY2sgd2UgYXJlIHRoZSBNYXN0ZXIgVlBFICovCiAJdmFsID0gcmVhZF9jMF92cGVjb25mMCgpOwogCWlmICghKHZhbCAmIFZQRUNPTkYwX01WUCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIlZQRTogb25seSBNYXN0ZXIgVlBFJ3MgYXJlIGFsbG93ZWQgdG8gY29uZmlndXJlIE1UXG4iKTsKKwkJICAgICAgICJWUEUgbG9hZGVyOiBvbmx5IE1hc3RlciBWUEUncyBhcmUgYWxsb3dlZCB0byBjb25maWd1cmUgTVRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogZGlzYWJsZSBNVCAodXNpbmcgZHZwZSkgKi8KIAlkdnBlKCk7CiAKKwlpZiAoIWxpc3RfZW1wdHkoJnYtPnRjKSkgeworICAgICAgICAgICAgICAgIGlmICgodCA9IGxpc3RfZW50cnkodi0+dGMubmV4dCwgc3RydWN0IHRjLCB0YykpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IFRDICVkIGlzIGFscmVhZHkgaW4gdXNlLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VYRUM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IE5vIFRDJ3MgYXNzb2NpYXRlZCB3aXRoIFZQRSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdi0+bWlub3IpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRVhFQzsKKyAgICAgICAgfQorCiAJLyogUHV0IE1WUEUncyBpbnRvICdjb25maWd1cmF0aW9uIHN0YXRlJyAqLwogCXNldF9jMF9tdnBjb250cm9sKE1WUENPTlRST0xfVlBDKTsKIAotCWlmICghbGlzdF9lbXB0eSgmdi0+dGMpKSB7Ci0JCWlmICgodCA9IGxpc3RfZW50cnkodi0+dGMubmV4dCwgc3RydWN0IHRjLCB0YykpID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogVEMgJWQgaXMgYWxyZWFkeSBpbiB1c2UuXG4iLAotCQkJICAgICAgIHQtPmluZGV4KTsKLQkJCXJldHVybiAtRU5PRVhFQzsKLQkJfQotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogTm8gVEMncyBhc3NvY2lhdGVkIHdpdGggVlBFICVkXG4iLAotCQkgICAgICAgdi0+bWlub3IpOwotCQlyZXR1cm4gLUVOT0VYRUM7Ci0JfQotCiAJc2V0dGModC0+aW5kZXgpOwogCi0JdmFsID0gcmVhZF92cGVfYzBfdnBlY29uZjAoKTsKLQogCS8qIHNob3VsZCBjaGVjayBpdCBpcyBoYWx0ZWQsIGFuZCBub3QgYWN0aXZhdGVkICovCiAJaWYgKChyZWFkX3RjX2MwX3Rjc3RhdHVzKCkgJiBUQ1NUQVRVU19BKSB8fCAhKHJlYWRfdGNfYzBfdGNoYWx0KCkgJiBUQ0hBTFRfSCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBUQyAlZCBpcyBhbHJlYWR5IGRvaW5nIHNvbWV0aGluZyFcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IFRDICVkIGlzIGFscmVhZHkgZG9pbmcgc29tZXRoaW5nIVxuIiwKIAkJICAgICAgIHQtPmluZGV4KTsKLQogCQlkdW1wX3RjbGlzdCgpOwogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCisJLyoKKwkgKiBEaXNhYmxlIG11bHRpLXRocmVhZGVkIGV4ZWN1dGlvbiB3aGlsc3Qgd2UgYWN0aXZhdGUsIGNsZWFyIHRoZQorCSAqIGhhbHQgYml0IGFuZCBib3VuZCB0aGUgdGMgdG8gdGhlIG90aGVyIFZQRS4uLgorCSAqLworCWRtdF9mbGFnID0gZG10KCk7CisKIAkvKiBXcml0ZSB0aGUgYWRkcmVzcyB3ZSB3YW50IGl0IHRvIHN0YXJ0IHJ1bm5pbmcgZnJvbSBpbiB0aGUgVENQQyByZWdpc3Rlci4gKi8KIAl3cml0ZV90Y19jMF90Y3Jlc3RhcnQoKHVuc2lnbmVkIGxvbmcpdi0+X19zdGFydCk7Ci0KLQkvKiB3cml0ZSB0aGUgc2l2Y19pbmZvIGFkZHJlc3MgdG8gdGNjb250ZXh0ICovCiAJd3JpdGVfdGNfYzBfdGNjb250ZXh0KCh1bnNpZ25lZCBsb25nKTApOwotCi0JLyogU2V0IHVwIHRoZSBYVEMgYml0IGluIHZwZWNvbmYwIHRvIHBvaW50IGF0IG91ciB0YyAqLwotCXdyaXRlX3ZwZV9jMF92cGVjb25mMChyZWFkX3ZwZV9jMF92cGVjb25mMCgpIHwgKHQtPmluZGV4IDw8IFZQRUNPTkYwX1hUQ19TSElGVCkpOwotCi0JLyogbWFyayB0aGUgVEMgYXMgYWN0aXZhdGVkLCBub3QgaW50ZXJydXB0IGV4ZW1wdCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRhYmxlICovCisJLyoKKwkgKiBNYXJrIHRoZSBUQyBhcyBhY3RpdmF0ZWQsIG5vdCBpbnRlcnJ1cHQgZXhlbXB0IGFuZCBub3QgZHluYW1pY2FsbHkKKwkgKiBhbGxvY2F0YWJsZQorCSAqLwogCXZhbCA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKIAl2YWwgPSAodmFsICYgfihUQ1NUQVRVU19EQSB8IFRDU1RBVFVTX0lYTVQpKSB8IFRDU1RBVFVTX0E7CiAJd3JpdGVfdGNfYzBfdGNzdGF0dXModmFsKTsKIAogCXdyaXRlX3RjX2MwX3RjaGFsdChyZWFkX3RjX2MwX3RjaGFsdCgpICYgflRDSEFMVF9IKTsKIAotCS8qIHNldCB1cCBWUEUxICovCi0Jd3JpdGVfdnBlX2MwX3ZwZWNvbnRyb2wocmVhZF92cGVfYzBfdnBlY29udHJvbCgpICYgflZQRUNPTlRST0xfVEUpOwkvLyBubyBtdWx0aXBsZSBUQydzCi0Jd3JpdGVfdnBlX2MwX3ZwZWNvbmYwKHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCkgfCBWUEVDT05GMF9WUEEpOwkvLyBlbmFibGUgdGhpcyBWUEUKLQogCS8qCiAJICogVGhlIHNkZS1raXQgcGFzc2VzICdtZW1zaXplJyB0byBfX3N0YXJ0IGluICRhMywgc28gc2V0IHNvbWV0aGluZwotCSAqIGhlcmUuLi4KLQkgKiBPciBzZXQgJGEzIChyZWdpc3RlciA3KSB0byB6ZXJvIGFuZCBkZWZpbmUgREZMVF9TVEFDS19TSVpFIGFuZAorCSAqIGhlcmUuLi4gIE9yIHNldCAkYTMgdG8gemVybyBhbmQgZGVmaW5lIERGTFRfU1RBQ0tfU0laRSBhbmQKIAkgKiBERkxUX0hFQVBfU0laRSB3aGVuIHlvdSBjb21waWxlIHlvdXIgcHJvZ3JhbQogCSAqLworIAltdHRncHIoNywgcGh5c2ljYWxfbWVtc2l6ZSk7CiAKLQltdHRncHIoNywgMCk7CiAKLQkvKiBzZXQgY29uZmlnIHRvIGJlIHRoZSBzYW1lIGFzIHZwZTAsIHBhcnRpY3VsYXJseSBrc2VnMCBjb2hlcmVuY3kgYWxnICovCi0Jd3JpdGVfdnBlX2MwX2NvbmZpZyhyZWFkX2MwX2NvbmZpZygpKTsKKwkvKiBzZXQgdXAgVlBFMSAqLworCS8qCisJICogYmluZCB0aGUgVEMgdG8gVlBFIDEgYXMgbGF0ZSBhcyBwb3NzaWJsZSBzbyB3ZSBvbmx5IGhhdmUgdGhlIGZpbmFsCisJICogVlBFIHJlZ2lzdGVycyB0byBzZXQgdXAsIGFuZCBzbyBhbiBFSlRBRyBwcm9iZSBjYW4gdHJpZ2dlciBvbiBpdAorCSAqLworIAl3cml0ZV90Y19jMF90Y2JpbmQoKHJlYWRfdGNfYzBfdGNiaW5kKCkgJiB+VENCSU5EX0NVUlZQRSkgfCB2LT5taW5vcik7CisKKyAgICAgICAgLyogU2V0IHVwIHRoZSBYVEMgYml0IGluIHZwZWNvbmYwIHRvIHBvaW50IGF0IG91ciB0YyAqLworICAgICAgICB3cml0ZV92cGVfYzBfdnBlY29uZjAoIChyZWFkX3ZwZV9jMF92cGVjb25mMCgpICYgfihWUEVDT05GMF9YVEMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHQtPmluZGV4IDw8IFZQRUNPTkYwX1hUQ19TSElGVCkpOworCisgICAgICAgIC8qIGVuYWJsZSB0aGlzIFZQRSAqLworICAgICAgICB3cml0ZV92cGVfYzBfdnBlY29uZjAocmVhZF92cGVfYzBfdnBlY29uZjAoKSB8IFZQRUNPTkYwX1ZQQSk7CiAKIAkvKiBjbGVhciBvdXQgYW55IGxlZnQgb3ZlcnMgZnJvbSBhIHByZXZpb3VzIHByb2dyYW0gKi8KKwl3cml0ZV92cGVfYzBfc3RhdHVzKDApOwogCXdyaXRlX3ZwZV9jMF9jYXVzZSgwKTsKIAogCS8qIHRha2Ugc3lzdGVtIG91dCBvZiBjb25maWd1cmF0aW9uIHN0YXRlICovCiAJY2xlYXJfYzBfbXZwY29udHJvbChNVlBDT05UUk9MX1ZQQyk7CiAKLQkvKiBjbGVhciBpbnRlcnJ1cHRzIGVuYWJsZWQgSUUsIEVSTCwgRVhMLCBhbmQgS1NVIGZyb20gYzAgc3RhdHVzICovCi0Jd3JpdGVfdnBlX2MwX3N0YXR1cyhyZWFkX3ZwZV9jMF9zdGF0dXMoKSAmIH4oU1QwX0VSTCB8IFNUMF9LU1UgfCBTVDBfSUUgfCBTVDBfRVhMKSk7CisJLyogbm93IHNhZmUgdG8gcmUtZW5hYmxlIG11bHRpLXRocmVhZGluZyAqLworCWVtdChkbXRfZmxhZyk7CiAKIAkvKiBzZXQgaXQgcnVubmluZyAqLwogCWV2cGUoRVZQRV9FTkFCTEUpOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShuLCAmdi0+bm90aWZ5LCBsaXN0KSB7CisJCW4tPnN0YXJ0KHYtPm1pbm9yKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF92cGVfc3ltYm9scyhzdHJ1Y3QgdnBlICogdiwgRWxmX1NoZHIgKiBzZWNoZHJzLAorc3RhdGljIGludCBmaW5kX3ZwZV9zeW1ib2xzKHN0cnVjdCB2cGUgKiB2LCBFbGZfU2hkciAqIHNlY2hkcnMsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IHN5bWluZGV4LCBjb25zdCBjaGFyICpzdHJ0YWIsCiAJCQkJICAgICAgc3RydWN0IG1vZHVsZSAqbW9kKQogewpAQCAtNzc4LDI2ICs4MTMsMjggQEAKIAkJfQogCX0KIAorCWlmICggKHYtPl9fc3RhcnQgPT0gMCkgfHwgKHYtPnNoYXJlZF9wdHIgPT0gTlVMTCkpCisJCXJldHVybiAtMTsKKwogCXJldHVybiAwOwogfQogCiAvKgotICogQWxsb2NhdGVzIGEgVlBFIHdpdGggc29tZSBwcm9ncmFtIGNvZGUgc3BhY2UodGhlIGxvYWQgYWRkcmVzcyksIGNvcGllcwotICogdGhlIGNvbnRlbnRzIG9mIHRoZSBwcm9ncmFtIChwKWJ1ZmZlciBwZXJmb3JtaW5nIHJlbG9jYXRhdGlvbnMvZXRjLAotICogZnJlZSdzIGl0IHdoZW4gZmluaXNoZWQuCi0qLworICogQWxsb2NhdGVzIGEgVlBFIHdpdGggc29tZSBwcm9ncmFtIGNvZGUgc3BhY2UodGhlIGxvYWQgYWRkcmVzcyksIGNvcGllcyB0aGUKKyAqIGNvbnRlbnRzIG9mIHRoZSBwcm9ncmFtIChwKWJ1ZmZlciBwZXJmb3JtaW5nIHJlbG9jYXRhdGlvbnMvZXRjLCBmcmVlJ3MgaXQKKyAqIHdoZW4gZmluaXNoZWQuCisgKi8KIGludCB2cGVfZWxmbG9hZChzdHJ1Y3QgdnBlICogdikKIHsKIAlFbGZfRWhkciAqaGRyOwogCUVsZl9TaGRyICpzZWNoZHJzOwogCWxvbmcgZXJyID0gMDsKIAljaGFyICpzZWNzdHJpbmdzLCAqc3RydGFiID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgbGVuLCBpLCBzeW1pbmRleCA9IDAsIHN0cmluZGV4ID0gMDsKLQorCXVuc2lnbmVkIGludCBsZW4sIGksIHN5bWluZGV4ID0gMCwgc3RyaW5kZXggPSAwLCByZWxvY2F0ZSA9IDA7CiAJc3RydWN0IG1vZHVsZSBtb2Q7CS8vIHNvIHdlIGNhbiByZS11c2UgdGhlIHJlbG9jYXRpb25zIGNvZGUKIAogCW1lbXNldCgmbW9kLCAwLCBzaXplb2Yoc3RydWN0IG1vZHVsZSkpOwotCXN0cmNweShtb2QubmFtZSwgIlZQRSBkdW1teSBwcm9nIG1vZHVsZSIpOworCXN0cmNweShtb2QubmFtZSwgIlZQRSBsb2FkZXIiKTsKIAogCWhkciA9IChFbGZfRWhkciAqKSB2LT5wYnVmZmVyOwogCWxlbiA9IHYtPnBsZW47CkBAIC04MDUsMTYgKzg0MiwyMiBAQAogCS8qIFNhbml0eSBjaGVja3MgYWdhaW5zdCBpbnNtb2RpbmcgYmluYXJpZXMgb3Igd3JvbmcgYXJjaCwKIAkgICB3ZWlyZCBlbGYgdmVyc2lvbiAqLwogCWlmIChtZW1jbXAoaGRyLT5lX2lkZW50LCBFTEZNQUcsIDQpICE9IDAKLQkgICAgfHwgaGRyLT5lX3R5cGUgIT0gRVRfUkVMIHx8ICFlbGZfY2hlY2tfYXJjaChoZHIpCisJICAgIHx8IChoZHItPmVfdHlwZSAhPSBFVF9SRUwgJiYgaGRyLT5lX3R5cGUgIT0gRVRfRVhFQykKKwkgICAgfHwgIWVsZl9jaGVja19hcmNoKGhkcikKIAkgICAgfHwgaGRyLT5lX3NoZW50c2l6ZSAhPSBzaXplb2YoKnNlY2hkcnMpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJWUEUgcHJvZ3JhbSwgd3JvbmcgYXJjaCBvciB3ZWlyZCBlbGYgdmVyc2lvblxuIik7CisJCSAgICAgICAiVlBFIGxvYWRlcjogcHJvZ3JhbSB3cm9uZyBhcmNoIG9yIHdlaXJkIGVsZiB2ZXJzaW9uXG4iKTsKIAogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCisJaWYgKGhkci0+ZV90eXBlID09IEVUX1JFTCkKKwkJcmVsb2NhdGUgPSAxOworCiAJaWYgKGxlbiA8IGhkci0+ZV9zaG9mZiArIGhkci0+ZV9zaG51bSAqIHNpemVvZihFbGZfU2hkcikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWUEUgcHJvZ3JhbSBsZW5ndGggJXUgdHJ1bmNhdGVkXG4iLCBsZW4pOworCQlwcmludGsoS0VSTl9FUlIgIlZQRSBsb2FkZXI6IHByb2dyYW0gbGVuZ3RoICV1IHRydW5jYXRlZFxuIiwKKwkJICAgICAgIGxlbik7CisKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIApAQCAtODI2LDgyICs4NjksMTI2IEBACiAJLyogQW5kIHRoZXNlIHNob3VsZCBleGlzdCwgYnV0IGdjYyB3aGluZ2VzIGlmIHdlIGRvbid0IGluaXQgdGhlbSAqLwogCXN5bWluZGV4ID0gc3RyaW5kZXggPSAwOwogCi0JZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CisJaWYgKHJlbG9jYXRlKSB7CisJCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworCQkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSAhPSBTSFRfTk9CSVRTCisJCQkgICAgJiYgbGVuIDwgc2VjaGRyc1tpXS5zaF9vZmZzZXQgKyBzZWNoZHJzW2ldLnNoX3NpemUpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlZQRSBwcm9ncmFtIGxlbmd0aCAldSB0cnVuY2F0ZWRcbiIsCisJCQkJICAgICAgIGxlbik7CisJCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJfQogCi0JCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX05PQklUUwotCQkgICAgJiYgbGVuIDwgc2VjaGRyc1tpXS5zaF9vZmZzZXQgKyBzZWNoZHJzW2ldLnNoX3NpemUpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVlBFIHByb2dyYW0gbGVuZ3RoICV1IHRydW5jYXRlZFxuIiwKLQkJCSAgICAgICBsZW4pOwotCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJLyogTWFyayBhbGwgc2VjdGlvbnMgc2hfYWRkciB3aXRoIHRoZWlyIGFkZHJlc3MgaW4gdGhlCisJCQkgICB0ZW1wb3JhcnkgaW1hZ2UuICovCisJCQlzZWNoZHJzW2ldLnNoX2FkZHIgPSAoc2l6ZV90KSBoZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldDsKKworCQkJLyogSW50ZXJuYWwgc3ltYm9scyBhbmQgc3RyaW5ncy4gKi8KKwkJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQikgeworCQkJCXN5bWluZGV4ID0gaTsKKwkJCQlzdHJpbmRleCA9IHNlY2hkcnNbaV0uc2hfbGluazsKKwkJCQlzdHJ0YWIgPSAoY2hhciAqKWhkciArIHNlY2hkcnNbc3RyaW5kZXhdLnNoX29mZnNldDsKKwkJCX0KIAkJfQotCi0JCS8qIE1hcmsgYWxsIHNlY3Rpb25zIHNoX2FkZHIgd2l0aCB0aGVpciBhZGRyZXNzIGluIHRoZQotCQkgICB0ZW1wb3JhcnkgaW1hZ2UuICovCi0JCXNlY2hkcnNbaV0uc2hfYWRkciA9IChzaXplX3QpIGhkciArIHNlY2hkcnNbaV0uc2hfb2Zmc2V0OwotCi0JCS8qIEludGVybmFsIHN5bWJvbHMgYW5kIHN0cmluZ3MuICovCi0JCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQikgewotCQkJc3ltaW5kZXggPSBpOwotCQkJc3RyaW5kZXggPSBzZWNoZHJzW2ldLnNoX2xpbms7Ci0JCQlzdHJ0YWIgPSAoY2hhciAqKWhkciArIHNlY2hkcnNbc3RyaW5kZXhdLnNoX29mZnNldDsKLQkJfQorCQlsYXlvdXRfc2VjdGlvbnMoJm1vZCwgaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzKTsKIAl9CiAKLQlsYXlvdXRfc2VjdGlvbnMoJm1vZCwgaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzKTsKLQogCXYtPmxvYWRfYWRkciA9IGFsbG9jX3Byb2dtZW0obW9kLmNvcmVfc2l6ZSk7CiAJbWVtc2V0KHYtPmxvYWRfYWRkciwgMCwgbW9kLmNvcmVfc2l6ZSk7CiAKLQlwcmludGsoIlZQRSBlbGZfbG9hZGVyOiBsb2FkaW5nIHRvICVwXG4iLCB2LT5sb2FkX2FkZHIpOworCXByaW50aygiVlBFIGxvYWRlcjogbG9hZGluZyB0byAlcFxuIiwgdi0+bG9hZF9hZGRyKTsKIAotCWZvciAoaSA9IDA7IGkgPCBoZHItPmVfc2hudW07IGkrKykgewotCQl2b2lkICpkZXN0OworCWlmIChyZWxvY2F0ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKKwkJCXZvaWQgKmRlc3Q7CiAKLQkJaWYgKCEoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCi0JCQljb250aW51ZTsKKwkJCWlmICghKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQorCQkJCWNvbnRpbnVlOwogCi0JCWRlc3QgPSB2LT5sb2FkX2FkZHIgKyBzZWNoZHJzW2ldLnNoX2VudHNpemU7CisJCQlkZXN0ID0gdi0+bG9hZF9hZGRyICsgc2VjaGRyc1tpXS5zaF9lbnRzaXplOwogCi0JCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX05PQklUUykKLQkJCW1lbWNweShkZXN0LCAodm9pZCAqKXNlY2hkcnNbaV0uc2hfYWRkciwKLQkJCSAgICAgICBzZWNoZHJzW2ldLnNoX3NpemUpOwotCQkvKiBVcGRhdGUgc2hfYWRkciB0byBwb2ludCB0byBjb3B5IGluIGltYWdlLiAqLwotCQlzZWNoZHJzW2ldLnNoX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXN0OwotCX0KKwkJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX05PQklUUykKKwkJCQltZW1jcHkoZGVzdCwgKHZvaWQgKilzZWNoZHJzW2ldLnNoX2FkZHIsCisJCQkJICAgICAgIHNlY2hkcnNbaV0uc2hfc2l6ZSk7CisJCQkvKiBVcGRhdGUgc2hfYWRkciB0byBwb2ludCB0byBjb3B5IGluIGltYWdlLiAqLworCQkJc2VjaGRyc1tpXS5zaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDsKIAotCS8qIEZpeCB1cCBzeW1zLCBzbyB0aGF0IHN0X3ZhbHVlIGlzIGEgcG9pbnRlciB0byBsb2NhdGlvbi4gKi8KLQllcnIgPQotCQlzaW1wbGlmeV9zeW1ib2xzKHNlY2hkcnMsIHN5bWluZGV4LCBzdHJ0YWIsIHNlY3N0cmluZ3MsCi0JCQkJIGhkci0+ZV9zaG51bSwgJm1vZCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiB1bmFibGUgdG8gc2ltcGxpZnkgc3ltYm9sc1xuIik7Ci0JCWdvdG8gY2xlYW51cDsKLQl9CisJCQlwcmludGsoS0VSTl9ERUJVRyAiIHNlY3Rpb24gc2hfbmFtZSAlcyBzaF9hZGRyIDB4JXhcbiIsCisJCQkgICAgICAgc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgc2VjaGRyc1tpXS5zaF9hZGRyKTsKKwkJfQogCi0JLyogTm93IGRvIHJlbG9jYXRpb25zLiAqLwotCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgewotCQljb25zdCBjaGFyICpzdHJ0YWIgPSAoY2hhciAqKXNlY2hkcnNbc3RyaW5kZXhdLnNoX2FkZHI7Ci0JCXVuc2lnbmVkIGludCBpbmZvID0gc2VjaGRyc1tpXS5zaF9pbmZvOworIAkJLyogRml4IHVwIHN5bXMsIHNvIHRoYXQgc3RfdmFsdWUgaXMgYSBwb2ludGVyIHRvIGxvY2F0aW9uLiAqLworIAkJc2ltcGxpZnlfc3ltYm9scyhzZWNoZHJzLCBzeW1pbmRleCwgc3RydGFiLCBzZWNzdHJpbmdzLAorIAkJCQkgaGRyLT5lX3NobnVtLCAmbW9kKTsKIAotCQkvKiBOb3QgYSB2YWxpZCByZWxvY2F0aW9uIHNlY3Rpb24/ICovCi0JCWlmIChpbmZvID49IGhkci0+ZV9zaG51bSkKLQkJCWNvbnRpbnVlOworIAkJLyogTm93IGRvIHJlbG9jYXRpb25zLiAqLworIAkJZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CisgCQkJY29uc3QgY2hhciAqc3RydGFiID0gKGNoYXIgKilzZWNoZHJzW3N0cmluZGV4XS5zaF9hZGRyOworIAkJCXVuc2lnbmVkIGludCBpbmZvID0gc2VjaGRyc1tpXS5zaF9pbmZvOwogCi0JCS8qIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMgKi8KLQkJaWYgKCEoc2VjaGRyc1tpbmZvXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCi0JCQljb250aW51ZTsKKyAJCQkvKiBOb3QgYSB2YWxpZCByZWxvY2F0aW9uIHNlY3Rpb24/ICovCisgCQkJaWYgKGluZm8gPj0gaGRyLT5lX3NobnVtKQorIAkJCQljb250aW51ZTsKIAotCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUwpCi0JCQllcnIgPQotCQkJCWFwcGx5X3JlbG9jYXRpb25zKHNlY2hkcnMsIHN0cnRhYiwgc3ltaW5kZXgsIGksICZtb2QpOwotCQllbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1JFTEEpCi0JCQllcnIgPSBhcHBseV9yZWxvY2F0ZV9hZGQoc2VjaGRycywgc3RydGFiLCBzeW1pbmRleCwgaSwKLQkJCQkJCSAmbW9kKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAidnBlX2VsZmxvYWQ6IGVycm9yIGluIHJlbG9jYXRpb25zIGVyciAlbGRcbiIsCi0JCQkgICAgICAgZXJyKTsKLQkJCWdvdG8gY2xlYW51cDsKKyAJCQkvKiBEb24ndCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zICovCisgCQkJaWYgKCEoc2VjaGRyc1tpbmZvXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCisgCQkJCWNvbnRpbnVlOworCisgCQkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfUkVMKQorIAkJCQllcnIgPSBhcHBseV9yZWxvY2F0aW9ucyhzZWNoZHJzLCBzdHJ0YWIsIHN5bWluZGV4LCBpLAorIAkJCQkJCQkmbW9kKTsKKyAJCQllbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1JFTEEpCisgCQkJCWVyciA9IGFwcGx5X3JlbG9jYXRlX2FkZChzZWNoZHJzLCBzdHJ0YWIsIHN5bWluZGV4LCBpLAorIAkJCQkJCQkgJm1vZCk7CisgCQkJaWYgKGVyciA8IDApCisgCQkJCXJldHVybiBlcnI7CisKKyAgCQl9CisgIAl9IGVsc2UgeworICAJCWZvciAoaSA9IDA7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworCisgCQkJLyogSW50ZXJuYWwgc3ltYm9scyBhbmQgc3RyaW5ncy4gKi8KKyAJCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIpIHsKKyAJCQkJc3ltaW5kZXggPSBpOworIAkJCQlzdHJpbmRleCA9IHNlY2hkcnNbaV0uc2hfbGluazsKKyAJCQkJc3RydGFiID0gKGNoYXIgKiloZHIgKyBzZWNoZHJzW3N0cmluZGV4XS5zaF9vZmZzZXQ7CisKKyAJCQkJLyogbWFyayB0aGUgc3ltdGFiJ3MgYWRkcmVzcyBmb3Igd2hlbiB3ZSB0cnkgdG8gZmluZCB0aGUKKyAJCQkJICAgbWFnaWMgc3ltYm9scyAqLworIAkJCQlzZWNoZHJzW2ldLnNoX2FkZHIgPSAoc2l6ZV90KSBoZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldDsKKyAJCQl9CisKKyAJCQkvKiBmaWx0ZXIgc2VjdGlvbnMgd2UgZG9udCB3YW50IGluIHRoZSBmaW5hbCBpbWFnZSAqLworIAkJCWlmICghKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpIHx8CisgCQkJICAgIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX01JUFNfUkVHSU5GTykpIHsKKyAJCQkJcHJpbnRrKCBLRVJOX0RFQlVHICIgaWdub3Jpbmcgc2VjdGlvbiwgIgorIAkJCQkJIm5hbWUgJXMgdHlwZSAleCBhZGRyZXNzIDB4JXggXG4iLAorIAkJCQkJc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwKKyAJCQkJCXNlY2hkcnNbaV0uc2hfdHlwZSwgc2VjaGRyc1tpXS5zaF9hZGRyKTsKKyAJCQkJY29udGludWU7CisgCQkJfQorCisgIAkJCWlmIChzZWNoZHJzW2ldLnNoX2FkZHIgPCAodW5zaWduZWQgaW50KXYtPmxvYWRfYWRkcikgeworIAkJCQlwcmludGsoIEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogIgorIAkJCQkJImZ1bGx5IGxpbmtlZCBpbWFnZSBoYXMgaW52YWxpZCBzZWN0aW9uLCAiCisgCQkJCQkibmFtZSAlcyB0eXBlICV4IGFkZHJlc3MgMHgleCwgYmVmb3JlIGxvYWQgIgorIAkJCQkJImFkZHJlc3Mgb2YgMHgleFxuIiwKKyAJCQkJCXNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsCisgCQkJCQlzZWNoZHJzW2ldLnNoX3R5cGUsIHNlY2hkcnNbaV0uc2hfYWRkciwKKyAJCQkJCSh1bnNpZ25lZCBpbnQpdi0+bG9hZF9hZGRyKTsKKyAgCQkJCXJldHVybiAtRU5PRVhFQzsKKyAgCQkJfQorCisgCQkJcHJpbnRrKEtFUk5fREVCVUcgIiBjb3B5aW5nIHNlY3Rpb24gc2hfbmFtZSAlcywgc2hfYWRkciAweCV4ICIKKwkJCSAgICAgICAic2l6ZSAweCV4MCBmcm9tIHglcFxuIiwKKwkJCSAgICAgICBzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCBzZWNoZHJzW2ldLnNoX2FkZHIsCisJCQkgICAgICAgc2VjaGRyc1tpXS5zaF9zaXplLCBoZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldCk7CisKKyAgCQkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSAhPSBTSFRfTk9CSVRTKQorCQkJCW1lbWNweSgodm9pZCAqKXNlY2hkcnNbaV0uc2hfYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKiloZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldCwKKyAJCQkJICAgICAgIHNlY2hkcnNbaV0uc2hfc2l6ZSk7CisJCQllbHNlCisJCQkJbWVtc2V0KCh2b2lkICopc2VjaGRyc1tpXS5zaF9hZGRyLCAwLCBzZWNoZHJzW2ldLnNoX3NpemUpOwogCQl9CiAJfQogCkBAIC05MTAsNzEgKzk5NywxMDQgQEAKIAkJCSAgICh1bnNpZ25lZCBsb25nKXYtPmxvYWRfYWRkciArIHYtPmxlbik7CiAKIAlpZiAoKGZpbmRfdnBlX3N5bWJvbHModiwgc2VjaGRycywgc3ltaW5kZXgsIHN0cnRhYiwgJm1vZCkpIDwgMCkgeworCQlpZiAodi0+X19zdGFydCA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBwcm9ncmFtIGRvZXMgbm90IGNvbnRhaW4gIgorCQkJICAgICAgICJhIF9fc3RhcnQgc3ltYm9sXG4iKTsKKwkJCXJldHVybiAtRU5PRVhFQzsKKwkJfQogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJWUEU6IHByb2dyYW0gZG9lc24ndCBjb250YWluIF9fc3RhcnQgb3IgdnBlX3NoYXJlZCBzeW1ib2xzXG4iKTsKLQkJZXJyID0gLUVOT0VYRUM7CisJCWlmICh2LT5zaGFyZWRfcHRyID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiAiCisJCQkgICAgICAgInByb2dyYW0gZG9lcyBub3QgY29udGFpbiB2cGVfc2hhcmVkIHN5bWJvbC5cbiIKKwkJCSAgICAgICAiIFVuYWJsZSB0byB1c2UgQU1WUCAoQVAvU1ApIGZhY2lsaXRpZXMuXG4iKTsKIAl9CiAKIAlwcmludGsoIiBlbGYgbG9hZGVkXG4iKTsKLQotY2xlYW51cDoKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX3ZwZShzdHJ1Y3QgdnBlICogdikKK19fYXR0cmlidXRlX3VzZWRfXyB2b2lkIGR1bXBfdnBlKHN0cnVjdCB2cGUgKiB2KQogewogCXN0cnVjdCB0YyAqdDsKIAorCXNldHRjKHYtPm1pbm9yKTsKKwogCXByaW50ayhLRVJOX0RFQlVHICJWUEVDb250cm9sIDB4JWx4XG4iLCByZWFkX3ZwZV9jMF92cGVjb250cm9sKCkpOwogCXByaW50ayhLRVJOX0RFQlVHICJWUEVDb25mMCAweCVseFxuIiwgcmVhZF92cGVfYzBfdnBlY29uZjAoKSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZ2cGVjb250cm9sLnRjX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZ2cGVjb250cm9sLnRjX2xpc3QsIGxpc3QpCiAJCWR1bXBfdGModCk7Ci0JfQogfQogCi0vKiBjaGVja3MgZm9yIFZQRSBpcyB1bnVzZWQgYW5kIGdldHMgcmVhZHkgdG8gbG9hZCBwcm9ncmFtCSAqLworc3RhdGljIHZvaWQgY2xlYW51cF90YyhzdHJ1Y3QgdGMgKnRjKQoreworCWludCB0bXA7CisKKwkvKiBQdXQgTVZQRSdzIGludG8gJ2NvbmZpZ3VyYXRpb24gc3RhdGUnICovCisJc2V0X2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOworCisJc2V0dGModGMtPmluZGV4KTsKKwl0bXAgPSByZWFkX3RjX2MwX3Rjc3RhdHVzKCk7CisKKwkvKiBtYXJrIG5vdCBhbGxvY2F0ZWQgYW5kIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0YWJsZSAqLworCXRtcCAmPSB+KFRDU1RBVFVTX0EgfCBUQ1NUQVRVU19EQSk7CisJdG1wIHw9IFRDU1RBVFVTX0lYTVQ7CS8qIGludGVycnVwdCBleGVtcHQgKi8KKwl3cml0ZV90Y19jMF90Y3N0YXR1cyh0bXApOworCisJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKKworCS8qIGJpbmQgaXQgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBWUEUxICovCisJd3JpdGVfdGNfYzBfdGNiaW5kKHJlYWRfdGNfYzBfdGNiaW5kKCkgJiB+VENCSU5EX0NVUlZQRSk7IC8vIHwgVENCSU5EX0NVUlZQRQorCisJY2xlYXJfYzBfbXZwY29udHJvbChNVlBDT05UUk9MX1ZQQyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0Y3dkKGNoYXIgKmJ1ZmYsIGludCBzaXplKQoreworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisJaW50IHJldDsKKworCW9sZF9mcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCisJcmV0ID0gc3lzX2dldGN3ZChidWZmLHNpemUpOworCisJc2V0X2ZzKG9sZF9mcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBjaGVja3MgVlBFIGlzIHVudXNlZCBhbmQgZ2V0cyByZWFkeSB0byBsb2FkIHByb2dyYW0gICovCiBzdGF0aWMgaW50IHZwZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCBtaW5vcjsKKwlpbnQgbWlub3IsIHJldDsKIAlzdHJ1Y3QgdnBlICp2OworCXN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyAqbm90OwogCiAJLyogYXNzdW1lIG9ubHkgMSBkZXZpY2UgYXQgdGhlIG1vLiAqLwotCWlmICgobWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KSkgIT0gMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IG9ubHkgdnBlMSBpcyBzdXBwb3J0ZWRcbiIpOworCWlmICgobWlub3IgPSBpbWlub3IoaW5vZGUpKSAhPSAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IG9ubHkgdnBlMSBpcyBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoKHYgPSBnZXRfdnBlKG1pbm9yKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IHVuYWJsZSB0byBnZXQgdnBlXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogdW5hYmxlIHRvIGdldCB2cGVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAodi0+c3RhdGUgIT0gVlBFX1NUQVRFX1VOVVNFRCkgewotCQl1bnNpZ25lZCBsb25nIHRtcDsKLQkJc3RydWN0IHRjICp0OwotCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogZGV2aWNlICVkIGFscmVhZHkgaW4gdXNlXG4iLCBtaW5vcik7Ci0KIAkJZHZwZSgpOwotCQlkdW1wX3ZwZSh2KTsKIAotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IHJlLWluaXRpYWxpc2luZyAlZFxuIiwgbWlub3IpOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlBFIGxvYWRlcjogdGMgaW4gdXNlIGR1bXBpbmcgcmVnc1xuIik7CisKKwkJZHVtcF90YyhnZXRfdGMobWlub3IpKTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vdCwgJnYtPm5vdGlmeSwgbGlzdCkgeworCQkJbm90LT5zdG9wKG1pbm9yKTsKKwkJfQogCiAJCXJlbGVhc2VfcHJvZ21lbSh2LT5sb2FkX2FkZHIpOwotCi0JCXQgPSBnZXRfdGMobWlub3IpOwotCQlzZXR0YyhtaW5vcik7Ci0JCXRtcCA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKLQotCQkvKiBtYXJrIG5vdCBhbGxvY2F0ZWQgYW5kIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0YWJsZSAqLwotCQl0bXAgJj0gfihUQ1NUQVRVU19BIHwgVENTVEFUVVNfREEpOwotCQl0bXAgfD0gVENTVEFUVVNfSVhNVDsJLyogaW50ZXJydXB0IGV4ZW1wdCAqLwotCQl3cml0ZV90Y19jMF90Y3N0YXR1cyh0bXApOwotCi0JCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7Ci0KKwkJY2xlYW51cF90YyhnZXRfdGMobWlub3IpKTsKIAl9CiAKIAkvLyBhbGxvY2F0ZSBpdCBzbyB3aGVuIHdlIGdldCB3cml0ZSBvcHMgd2Uga25vdyBpdCdzIGV4cGVjdGVkLgpAQCAtOTg2LDYgKzExMDYsMjQgQEAKIAl2LT5sb2FkX2FkZHIgPSBOVUxMOwogCXYtPmxlbiA9IDA7CiAKKwl2LT51aWQgPSBmaWxwLT5mX3VpZDsKKwl2LT5naWQgPSBmaWxwLT5mX2dpZDsKKworI2lmZGVmIENPTkZJR19NSVBTX0FQU1BfS1NQRAorCS8qIGdldCBrc3BkIHRvIHRlbGwgdXMgd2hlbiBhIHN5c2NhbGxfZXhpdCBoYXBwZW5zICovCisJaWYgKCFrc3BkX2V2ZW50c19yZXFkKSB7CisJCWtzcGRfbm90aWZ5KCZrc3BkX2V2ZW50cyk7CisJCWtzcGRfZXZlbnRzX3JlcWQrKzsKKwl9CisjZW5kaWYKKworCXYtPmN3ZFswXSA9IDA7CisJcmV0ID0gZ2V0Y3dkKHYtPmN3ZCwgVlBFX1BBVEhfTUFYKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogb3BlbiwgZ2V0Y3dkIHJldHVybmVkICVkXG4iLCByZXQpOworCisJdi0+c2hhcmVkX3B0ciA9IE5VTEw7CisJdi0+X19zdGFydCA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk5NSw3ICsxMTMzLDcgQEAKIAlzdHJ1Y3QgdnBlICp2OwogCUVsZl9FaGRyICpoZHI7CiAKLQltaW5vciA9IE1JTk9SKGlub2RlLT5pX3JkZXYpOworCW1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAlpZiAoKHYgPSBnZXRfdnBlKG1pbm9yKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTEwMDYsMTQgKzExNDQsMjIgQEAKIAkJaWYgKHZwZV9lbGZsb2FkKHYpID49IDApCiAJCQl2cGVfcnVuKHYpOwogCQllbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogRUxGIGxvYWQgZmFpbGVkLlxuIik7CisgCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogRUxGIGxvYWQgZmFpbGVkLlxuIik7CiAJCQlyZXQgPSAtRU5PRVhFQzsKIAkJfQogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogb25seSBlbGYgZmlsZXMgYXJlIHN1cHBvcnRlZFxuIik7CisgCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBvbmx5IGVsZiBmaWxlcyBhcmUgc3VwcG9ydGVkXG4iKTsKIAkJcmV0ID0gLUVOT0VYRUM7CiAJfQogCisJLyogSXQncyBnb29kIHRvIGJlIGFibGUgdG8gcnVuIHRoZSBTUCBhbmQgaWYgaXQgY2hva2VzIGhhdmUgYSBsb29rIGF0CisJICAgdGhlIC9kZXYvcnQ/LiBCdXQgaWYgd2UgcmVzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBzdHJ1Y3Qgd2UKKwkgICBsb29zZSB3aGF0IGhhcyBoYXBwZW5lZC4gU28gcGVyaGFwcyBpZiBnYXJiYWdlIGlzIHNlbnQgdG8gdGhlIHZwZQorCSAgIGRldmljZSwgdXNlIGl0IGFzIGEgdHJpZ2dlciBmb3IgdGhlIHJlc2V0LiBIb3BlZnVsbHkgYSBuaWNlCisJICAgZXhlY3V0YWJsZSB3aWxsIGJlIGFsb25nIHNob3J0bHkuICovCisJaWYgKHJldCA8IDApCisJCXYtPnNoYXJlZF9wdHIgPSBOVUxMOworCiAJLy8gY2xlYW51cCBhbnkgdGVtcCBidWZmZXJzCiAJaWYgKHYtPnBidWZmZXIpCiAJCXZmcmVlKHYtPnBidWZmZXIpOwpAQCAtMTAyOCwyNiArMTE3NCwyNCBAQAogCXNpemVfdCByZXQgPSBjb3VudDsKIAlzdHJ1Y3QgdnBlICp2OwogCi0JbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKKwltaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKCh2ID0gZ2V0X3ZwZShtaW5vcikpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKHYtPnBidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInZwZV93cml0ZTogbm8gcGJ1ZmZlclxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiVlBFIGxvYWRlcjogbm8gYnVmZmVyIGZvciBwcm9ncmFtXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJaWYgKChjb3VudCArIHYtPmxlbikgPiB2LT5wbGVuKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJWUEUgTG9hZGVyOiBlbGYgc2l6ZSB0b28gYmlnLiBQZXJoYXBzIHN0cmlwIHVuZWVkZWQgc3ltYm9sc1xuIik7CisJCSAgICAgICAiVlBFIGxvYWRlcjogZWxmIHNpemUgdG9vIGJpZy4gUGVyaGFwcyBzdHJpcCB1bmVlZGVkIHN5bWJvbHNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAljb3VudCAtPSBjb3B5X2Zyb21fdXNlcih2LT5wYnVmZmVyICsgdi0+bGVuLCBidWZmZXIsIGNvdW50KTsKLQlpZiAoIWNvdW50KSB7Ci0JCXByaW50aygidnBlX3dyaXRlOiBjb3B5X3RvX3VzZXIgZmFpbGVkXG4iKTsKKwlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAl2LT5sZW4gKz0gY291bnQ7CiAJcmV0dXJuIHJldDsKQEAgLTExNDksMTYgKzEyOTMsNzAgQEAKIHsKIAlzdHJ1Y3QgdnBlICp2OwogCi0JaWYgKCh2ID0gZ2V0X3ZwZShpbmRleCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidnBlOiBpbnZhbGlkIHZwZSBpbmRleCAlZFxuIiwgaW5kZXgpOworCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQl9CiAKIAlyZXR1cm4gdi0+c2hhcmVkX3B0cjsKIH0KIAogRVhQT1JUX1NZTUJPTCh2cGVfZ2V0X3NoYXJlZCk7CiAKK2ludCB2cGVfZ2V0dWlkKGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdnBlICp2OworCisJaWYgKCh2ID0gZ2V0X3ZwZShpbmRleCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJldHVybiB2LT51aWQ7Cit9CisKK0VYUE9SVF9TWU1CT0wodnBlX2dldHVpZCk7CisKK2ludCB2cGVfZ2V0Z2lkKGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdnBlICp2OworCisJaWYgKCh2ID0gZ2V0X3ZwZShpbmRleCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJldHVybiB2LT5naWQ7Cit9CisKK0VYUE9SVF9TWU1CT0wodnBlX2dldGdpZCk7CisKK2ludCB2cGVfbm90aWZ5KGludCBpbmRleCwgc3RydWN0IHZwZV9ub3RpZmljYXRpb25zICpub3RpZnkpCit7CisJc3RydWN0IHZwZSAqdjsKKworCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlsaXN0X2FkZCgmbm90aWZ5LT5saXN0LCAmdi0+bm90aWZ5KTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTCh2cGVfbm90aWZ5KTsKKworY2hhciAqdnBlX2dldGN3ZChpbnQgaW5kZXgpCit7CisJc3RydWN0IHZwZSAqdjsKKworCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiB2LT5jd2Q7Cit9CisKK0VYUE9SVF9TWU1CT0wodnBlX2dldGN3ZCk7CisKKyNpZmRlZiBDT05GSUdfTUlQU19BUFNQX0tTUEQKK3N0YXRpYyB2b2lkIGtzcGRfc3BfZXhpdCggaW50IHNwX2lkKQoreworCWNsZWFudXBfdGMoZ2V0X3RjKHNwX2lkKSk7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgdnBlX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHZwZSAqdiA9IE5VTEw7CkBAIC0xMjAxLDcgKzEzOTksOCBAQAogCQkJCXJldHVybiAtRU5PREVWOwogCQkJfQogCi0JCQlsaXN0X2FkZCgmdC0+dGMsICZ2LT50Yyk7CS8qIGFkZCB0aGUgdGMgdG8gdGhlIGxpc3Qgb2YgdGhpcyB2cGUncyB0YydzLiAqLworCQkJLyogYWRkIHRoZSB0YyB0byB0aGUgbGlzdCBvZiB0aGlzIHZwZSdzIHRjJ3MuICovCisJCQlsaXN0X2FkZCgmdC0+dGMsICZ2LT50Yyk7CiAKIAkJCS8qIGRlYWN0aXZhdGUgYWxsIGJ1dCB2cGUwICovCiAJCQlpZiAoaSAhPSAwKSB7CkBAIC0xMjIyLDEwICsxNDIxLDEyIEBACiAJCQkJCQkgICAgIH4oU1QwX0lNIHwgU1QwX0lFIHwgU1QwX0tTVSkpCiAJCQkJCQkgICAgfCBTVDBfQ1UwKTsKIAotCQkJCS8qIHNldCBjb25maWcgdG8gYmUgdGhlIHNhbWUgYXMgdnBlMCwgcGFydGljdWxhcmx5IGtzZWcwIGNvaGVyZW5jeSBhbGcgKi8KKwkJCQkvKgorCQkJCSAqIFNldCBjb25maWcgdG8gYmUgdGhlIHNhbWUgYXMgdnBlMCwKKwkJCQkgKiBwYXJ0aWN1bGFybHkga3NlZzAgY29oZXJlbmN5IGFsZworCQkJCSAqLwogCQkJCXdyaXRlX3ZwZV9jMF9jb25maWcocmVhZF9jMF9jb25maWcoKSk7CiAJCQl9Ci0KIAkJfQogCiAJCS8qIFRDJ3MgKi8KQEAgLTEyMzQsMjMgKzE0MzUsMjggQEAKIAkJaWYgKGkgIT0gMCkgewogCQkJdW5zaWduZWQgbG9uZyB0bXA7CiAKLQkJCS8qIHRjIDAgd2lsbCBvZiBjb3Vyc2UgYmUgcnVubmluZy4uLi4gKi8KLQkJCWlmIChpID09IDApCi0JCQkJdC0+c3RhdGUgPSBUQ19TVEFURV9SVU5OSU5HOwotCiAJCQlzZXR0YyhpKTsKIAotCQkJLyogYmluZCBhIFRDIHRvIGVhY2ggVlBFLCBNYXkgYXMgd2VsbCBwdXQgYWxsIGV4Y2VzcyBUQydzCi0JCQkgICBvbiB0aGUgbGFzdCBWUEUgKi8KLQkJCWlmIChpID49ICgoKHZhbCAmIE1WUENPTkYwX1BWUEUpID4+IE1WUENPTkYwX1BWUEVfU0hJRlQpICsgMSkpCi0JCQkJd3JpdGVfdGNfYzBfdGNiaW5kKHJlYWRfdGNfYzBfdGNiaW5kKCkgfAotCQkJCQkJICAgKCh2YWwgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZUKSk7Ci0JCQllbHNlCi0JCQkJd3JpdGVfdGNfYzBfdGNiaW5kKHJlYWRfdGNfYzBfdGNiaW5kKCkgfCBpKTsKKwkJCS8qIEFueSBUQyB0aGF0IGlzIGJvdW5kIHRvIFZQRTAgZ2V0cyBsZWZ0IGFzIGlzIC0gaW4gY2FzZQorCQkJICAgd2UgYXJlIHJ1bm5pbmcgU01UQyBvbiBWUEUwLiBBIFRDIHRoYXQgaXMgYm91bmQgdG8gYW55CisJCQkgICBvdGhlciBWUEUgZ2V0cyBib3VuZCB0byBWUEUwLCBpZGVhbGx5IEknZCBsaWtlIHRvIG1ha2UKKwkJCSAgIGl0IGhvbWVsZXNzIGJ1dCBpdCBkb2Vzbid0IGFwcGVhciB0byBsZXQgbWUgYmluZCBhIFRDCisJCQkgICB0byBhIG5vbi1leGlzdGVudCBWUEUuIFdoaWNoIGlzIHBlcmZlY3RseSByZWFzb25hYmxlLgorCisJCQkgICBUaGUgKHVuKWJvdW5kIHN0YXRlIGlzIHZpc2libGUgdG8gYW4gRUpUQUcgcHJvYmUgc28gbWF5CisJCQkgICBub3RpZnkgR0RCLi4uCisJCQkqLworCisJCQlpZiAoKCh0bXAgPSByZWFkX3RjX2MwX3RjYmluZCgpKSAmIFRDQklORF9DVVJWUEUpKSB7CisJCQkJLyogdGMgaXMgYm91bmQgPnZwZTAgKi8KKwkJCQl3cml0ZV90Y19jMF90Y2JpbmQodG1wICYgflRDQklORF9DVVJWUEUpOworCisJCQkJdC0+cHZwZSA9IGdldF92cGUoMCk7CS8qIHNldCB0aGUgcGFyZW50IHZwZSAqLworCQkJfQogCiAJCQl0bXAgPSByZWFkX3RjX2MwX3Rjc3RhdHVzKCk7CiAKLQkJCS8qIG1hcmsgbm90IGFsbG9jYXRlZCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRhYmxlICovCisJCQkvKiBtYXJrIG5vdCBhY3RpdmF0ZWQgYW5kIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0YWJsZSAqLwogCQkJdG1wICY9IH4oVENTVEFUVVNfQSB8IFRDU1RBVFVTX0RBKTsKIAkJCXRtcCB8PSBUQ1NUQVRVU19JWE1UOwkvKiBpbnRlcnJ1cHQgZXhlbXB0ICovCiAJCQl3cml0ZV90Y19jMF90Y3N0YXR1cyh0bXApOwpAQCAtMTI2Miw2ICsxNDY4LDkgQEAKIAkvKiByZWxlYXNlIGNvbmZpZyBzdGF0ZSAqLwogCWNsZWFyX2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOwogCisjaWZkZWYgQ09ORklHX01JUFNfQVBTUF9LU1BECisJa3NwZF9ldmVudHMua3NwZF9zcF9leGl0ID0ga3NwZF9zcF9leGl0OworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODEsNSArMTQ5MCw1IEBACiBtb2R1bGVfaW5pdCh2cGVfbW9kdWxlX2luaXQpOwogbW9kdWxlX2V4aXQodnBlX21vZHVsZV9leGl0KTsKIE1PRFVMRV9ERVNDUklQVElPTigiTUlQUyBWUEUgTG9hZGVyIik7Ci1NT0RVTEVfQVVUSE9SKCJFbGl6YWJldGggQ2xhcmtlLCBNSVBTIFRlY2hub2xvZ2llcywgSW5jIik7CitNT0RVTEVfQVVUSE9SKCJFbGl6YWJldGggT2xkaGFtLCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L01ha2VmaWxlIGIvYXJjaC9taXBzL2xhc2F0L01ha2VmaWxlCmluZGV4IDBkNWFlYzQuLjk5ZjUwNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbGFzYXQvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIG9iai15CSAJCQkrPSByZXNldC5vIHNldHVwLm8gcHJvbS5vIGxhc2F0X2JvYXJkLm8gXAotCQkJCSAgIGF0OTNjLm8gaW50ZXJydXB0Lm8gbGFzYXRJUlEubworCQkJCSAgIGF0OTNjLm8gaW50ZXJydXB0Lm8KIAogb2JqLSQoQ09ORklHX0xBU0FUX1NZU0NUTCkJKz0gc3lzY3RsLm8KIG9iai0kKENPTkZJR19EUzE2MDMpCQkrPSBkczE2MDMubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L2ludGVycnVwdC5jIGIvYXJjaC9taXBzL2xhc2F0L2ludGVycnVwdC5jCmluZGV4IDg1MmE0MTkuLjJkMzQ3MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9pbnRlcnJ1cHQuYworKysgYi9hcmNoL21pcHMvbGFzYXQvaW50ZXJydXB0LmMKQEAgLTI3LDE0ICsyNywxMyBAQAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbGFzYXQvbGFzYXRpbnQuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9nZGItc3R1Yi5oPgogCiBzdGF0aWMgdm9sYXRpbGUgaW50ICpsYXNhdF9pbnRfc3RhdHVzID0gTlVMTDsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgKmxhc2F0X2ludF9tYXNrID0gTlVMTDsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgbGFzYXRfaW50X21hc2tfc2hpZnQ7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgbGFzYXRJUlEodm9pZCk7Ci0KIHZvaWQgZGlzYWJsZV9sYXNhdF9pcnEodW5zaWduZWQgaW50IGlycV9ucikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTA5LDExICsxMDgsMTcgQEAKIAlyZXR1cm4gaW50X3N0YXR1czsKIH0KIAotdm9pZCBsYXNhdF9odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbnRfc3RhdHVzOworCXVuc2lnbmVkIGludCBjYXVzZSA9IHJlYWRfYzBfY2F1c2UoKTsKIAlpbnQgaXJxOwogCisJaWYgKGNhdXNlICYgQ0FVU0VGX0lQNykgewkvKiBSNDAwMCBjb3VudCAvIGNvbXBhcmUgSVJRICovCisJCWxsX3RpbWVyX2ludGVycnVwdCg3LCByZWdzKTsKKwkJcmV0dXJuOworCX0KKwogCWludF9zdGF0dXMgPSBnZXRfaW50X3N0YXR1cygpOwogCiAJLyogaWYgaW50X3N0YXR1cyA9PSAwLCB0aGVuIHRoZSBpbnRlcnJ1cHQgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkICovCkBAIC0xNDcsOSArMTUyLDYgQEAKIAkJcGFuaWMoImFyY2hfaW5pdF9pcnE6IG1pcHNfbWFjaHR5cGUgaW5jb3JyZWN0Iik7CiAJfQogCi0JLyogTm93IHNhZmUgdG8gc2V0IHRoZSBleGNlcHRpb24gdmVjdG9yLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGxhc2F0SVJRKTsKLQogCWZvciAoaSA9IDA7IGkgPD0gTEFTQVRJTlRfRU5EOyBpKyspIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzCT0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24JPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L2xhc2F0SVJRLlMgYi9hcmNoL21pcHMvbGFzYXQvbGFzYXRJUlEuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyYjBkMC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbGFzYXQvbGFzYXRJUlEuUworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBJbnRlcnJ1cHQgZXhjZXB0aW9uIGRpc3BhdGNoIGNvZGUuCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLQkudGV4dAotCS5zZXQJbm9yZW9yZGVyCi0JLmFsaWduCTUKLQlORVNURUQobGFzYXRJUlEsIFBUX1NJWkUsIHNwKQotCS5zZXQJbm9hdAotCVNBVkVfQUxMCi0JQ0xJCi0JLnNldAlhdAotCS5zZXQJbm9yZW9yZGVyCi0KLQltZmMwCXMwLCBDUDBfQ0FVU0UJCSMgZ2V0IGlycSBtYXNrCi0KLQkvKiBGaXJzdCB3ZSBjaGVjayBmb3IgcjRrIGNvdW50ZXIvdGltZXIgSVJRLiAqLwotCWFuZGkJYTAsIHMwLCBDQVVTRUZfSVA3Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCSBhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQMgkjIGRlbGF5IHNsb3QsIGNoZWNrIGh3MCBpbnRlcnJ1cHQKLQotCS8qIFdoZWVlLCBhIHRpbWVyIGludGVycnVwdC4gKi8KLQlsaQlhMCwgNwotCWphbAlsbF90aW1lcl9pbnRlcnJ1cHQKLQkgbW92ZQlhMSwgc3AKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCi0xOgotCS8qIFdoZWVlLCBjb21iaW5lZCBoYXJkd2FyZSBsZXZlbCB6ZXJvIGludGVycnVwdC4gKi8KLQlqYWwJbGFzYXRfaHcwX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCQkJIyBkZWxheSBzbG90Ci0KLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0KLTE6Ci0JLyoKLQkgKiBIZXJlIGJ5IG1pc3Rha2U/ICBUaGlzIGlzIHBvc3NpYmxlLCB3aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCBieSB0aGUKLQkgKiB0aW1lIHdlIHRha2UgdGhlIGV4Y2VwdGlvbiB0aGUgSVJRIHBpbiBnb2VzIGxvdywgc28ganVzdCBsZWF2ZSBpZgotCSAqIHRoaXMgaXMgdGhlIGNhc2UuCi0JICovCi0JbW92ZQlhMSxzMAotCW1mYzAJYTEsIENQMF9FUEMKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCUVORChsYXNhdElSUSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9maW50LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmludC5jCmluZGV4IGExOTYyZWIuLjM5YTcxZGUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmludC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9maW50LmMKQEAgLTI5LDcgKzI5LDkgQEAKIAogaWVlZTc1NGRwIGllZWU3NTRkcF9maW50KGludCB4KQogewotCUNPTVBYRFA7CisJdTY0IHhtOworCWludCB4ZTsKKwlpbnQgeHM7CiAKIAlDTEVBUkNYOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmxvbmcuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mbG9uZy5jCmluZGV4IGVhZTkwYTguLmYwOGYyMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mbG9uZy5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mbG9uZy5jCkBAIC0yOSw3ICsyOSw5IEBACiAKIGllZWU3NTRkcCBpZWVlNzU0ZHBfZmxvbmcoczY0IHgpCiB7Ci0JQ09NUFhEUDsKKwl1NjQgeG07CisJaW50IHhlOworCWludCB4czsKIAogCUNMRUFSQ1g7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9maW50LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmludC5jCmluZGV4IDdhYWMxM2EuLmU4OGUxMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9maW50LmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX2ZpbnQuYwpAQCAtMjksNyArMjksOSBAQAogCiBpZWVlNzU0c3AgaWVlZTc1NHNwX2ZpbnQoaW50IHgpCiB7Ci0JQ09NUFhTUDsKKwl1bnNpZ25lZCB4bTsKKwlpbnQgeGU7CisJaW50IHhzOwogCiAJQ0xFQVJDWDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L3NwX2Zsb25nLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmxvbmcuYwppbmRleCAzZDZjMWQxLi4yNmQ2OTE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmxvbmcuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmxvbmcuYwpAQCAtMjksNyArMjksOSBAQAogCiBpZWVlNzU0c3AgaWVlZTc1NHNwX2Zsb25nKHM2NCB4KQogewotCUNPTVBYRFA7CQkvKiA8LS0tIG5lZWQgNjQtYml0IG1hbnRpc3NhIHRlbXAgKi8KKwl1NjQgeG07CQkvKiA8LS0tIG5lZWQgNjQtYml0IG1hbnRpc3NhIHRlbXAgKi8KKwlpbnQgeGU7CisJaW50IHhzOwogCiAJQ0xFQVJDWDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX2ludC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX2ludC5jCmluZGV4IGJjMGViYzYuLmRiNTM5NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfaW50LmMKQEAgLTM5LDggKzM5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBhdGxhc19pY3RybF9yZWdzICphdGxhc19odzBfaWNyZWdzOwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG1pcHNJUlEodm9pZCk7Ci0KICNpZiAwCiAjZGVmaW5lIERFQlVHX0lOVCh4Li4uKSBwcmludGsoeCkKICNlbHNlCkBAIC05OCw3ICs5Niw3IEBACiAJcmV0dXJuIGI7CiB9CiAKLXZvaWQgYXRsYXNfaHcwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlubGluZSB2b2lkIGF0bGFzX2h3MF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGludF9zdGF0dXM7CiAJaW50IGlycTsKQEAgLTExNiw2ICsxMTQsOTEgQEAKIAlkb19JUlEoaXJxLCByZWdzKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2x6KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJXG4iCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCisJIgljbHoJJTAsICUxCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKKworCXJldHVybiB4OworfQorCisvKgorICogVmVyc2lvbiBvZiBmZnMgdGhhdCBvbmx5IGxvb2tzIGF0IGJpdHMgMTIuLjE1LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcnFfZmZzKHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpCisJcmV0dXJuIC1jbHoocGVuZGluZykgKyAzMSAtIENBVVNFQl9JUDsKKyNlbHNlCisJdW5zaWduZWQgaW50IGEwID0gNzsKKwl1bnNpZ25lZCBpbnQgdDA7CisKKwl0MCA9IHMwICYgMHhmMDAwOworCXQwID0gdDAgPCAxOworCXQwID0gdDAgPDwgMjsKKwlhMCA9IGEwIC0gdDA7CisJczAgPSBzMCA8PCB0MDsKKworCXQwID0gczAgJiAweGMwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAxOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4ODAwMDsKKwl0MCA9IHQwIDwgMTsKKwkvL3QwID0gdDAgPDwgMjsKKwlhMCA9IGEwIC0gdDA7CisJLy9zMCA9IHMwIDw8IHQwOworCisJcmV0dXJuIGEwOworI2VuZGlmCit9CisKKy8qCisgKiBJUlFzIG9uIHRoZSBBdGxhcyBib2FyZCBsb29rIGJhc2ljYWxseSAoYmFycmluZyBzb2Z0d2FyZSBJUlFzIHdoaWNoIHdlCisgKiBkb24ndCB1c2UgYXQgYWxsIGFuZCBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGNvbWJpbmVkIHRvZ2V0aGVyCisgKiBvbiBoYXJkd2FyZSBpbnRlcnJ1cHQgMCAoTUlQUyBJUlEgMikpIGxpa2U6CisgKgorICoJTUlQUyBJUlEJU291cmNlCisgKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KKyAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDIgICAgICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdCAoaHcwKQorICogICAgICAgICAgICAgMyAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA0ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDUgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNiAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA3ICAgICAgICBSNGsgdGltZXIgKHdoYXQgd2UgdXNlKQorICoKKyAqIFdlIGhhbmRsZSB0aGUgSVJRIGFjY29yZGluZyB0byBfb3VyXyBwcmlvcml0eSB3aGljaCBpczoKKyAqCisgKiBIaWdoZXN0IC0tLS0gICAgIFI0ayBUaW1lcgorICogTG93ZXN0ICAtLS0tICAgICBDb21iaW5lZCBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAqCisgKiB0aGVuIHdlIGp1c3QgcmV0dXJuLCBpZiBtdWx0aXBsZSBJUlFzIGFyZSBwZW5kaW5nIHRoZW4gd2Ugd2lsbCBqdXN0IHRha2UKKyAqIGFub3RoZXIgZXhjZXB0aW9uLCBiaWcgZGVhbC4KKyAqLworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKSAmIFNUMF9JTTsKKwlpbnQgaXJxOworCisJaXJxID0gaXJxX2ZmcyhwZW5kaW5nKTsKKworCWlmIChpcnEgPT0gTUlQU0NQVV9JTlRfQVRMQVMpCisJCWF0bGFzX2h3MF9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChpcnEgPiAwKQorCQlkb19JUlEoTUlQU0NQVV9JTlRfQkFTRSArIGlycSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CisKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTEyOCw5ICsyMTEsNiBAQAogCSAqLwogCWF0bGFzX2h3MF9pY3JlZ3MtPmludHJzdGVuID0gMHhmZmZmZmZmZjsKIAotCS8qIE5vdyBzYWZlIHRvIHNldCB0aGUgZXhjZXB0aW9uIHZlY3Rvci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBtaXBzSVJRKTsKLQogCWZvciAoaSA9IEFUTEFTSU5UX0JBU0U7IGkgPD0gQVRMQVNJTlRfRU5EOyBpKyspIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzCT0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24JPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZQppbmRleCBiMjFiYzY4Li5iZTQ3YzFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZQpAQCAtMTgsOCArMTgsOCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIE1JUFMgYm9hcmRzIGdlbmVyaWMgcm91dGluZXMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CQkJCTo9IG1pcHNJUlEubyByZXNldC5vIGRpc3BsYXkubyBpbml0Lm8gbWVtb3J5Lm8gXAotCQkJCSAgIHByaW50Zi5vIGNtZGxpbmUubyB0aW1lLm8KK29iai15CQkJCTo9IHJlc2V0Lm8gZGlzcGxheS5vIGluaXQubyBtZW1vcnkubyBwcmludGYubyBcCisJCQkJICAgY21kbGluZS5vIHRpbWUubwogb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGdkYl9ob29rLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvZ2RiX2hvb2suYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2dkYl9ob29rLmMKaW5kZXggOTFhMmNjYi4uNmExODU0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvZ2RiX2hvb2suYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9nZGJfaG9vay5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgc3RydWN0IHNlcmlhbF9zdGF0ZSByc190YWJsZVtSU19UQUJMRV9TSVpFXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2VyaWFsX3N0YXRlIHJzX3RhYmxlW10gPSB7CiAJU0VSSUFMX1BPUlRfREZOUwkvKiBEZWZpbmVkIGluIHNlcmlhbC5oICovCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9pbml0LmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9pbml0LmMKaW5kZXggZWFiNWE3MC4uZGY0ZTk0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2luaXQuYwpAQCAtMjIwLDcgKzIyMCw2IEBACiAJCQkJZ2VuZXJpY19wdXREZWJ1Z0NoYXIgKCpzKyspOwogCQl9CiAKLQkJa2dkYl9lbmFibGVkID0gMTsKIAkJLyogQnJlYWtwb2ludCBpcyBpbnZva2VkIGFmdGVyIGludGVycnVwdHMgYXJlIGluaXRpYWxpc2VkICovCiAJfQogfQpAQCAtMzM4LDYgKzMzNyw3IEBACiAJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfTVNDOgogCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EyOgogCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EzOgorCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFXzI0SzoKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9FTVVMX01TQzoKIAkJX3BjaWN0cmxfbXNjID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChNSVBTX01TQzAxX1BDSV9SRUdfQkFTRSwgMHgyMDAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYwppbmRleCAzMmM5MjEwLi5iYzRkMDkzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYwpAQCAtMjIsMTAgKzIyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CiAKQEAgLTQ2LDkgKzQ4LDYgQEAKIH07CiAjZW5kaWYKIAotLyogUmVmZXJlbmNlcyB0byBzZWN0aW9uIGJvdW5kYXJpZXMgKi8KLWV4dGVybiBjaGFyIF9lbmQ7Ci0KIHN0cnVjdCBwcm9tX3BtZW1ibG9jayAqIF9faW5pdCBwcm9tX2dldG1kZXNjKHZvaWQpCiB7CiAJY2hhciAqbWVtc2l6ZV9zdHI7CkBAIC0xMDYsMTAgKzEwNSwxMCBAQAogCiAJbWRlc2NbM10udHlwZSA9IHlhbW9uX2RvbnR1c2U7CiAJbWRlc2NbM10uYmFzZSA9IDB4MDAxMDAwMDA7Ci0JbWRlc2NbM10uc2l6ZSA9IENQSFlTQUREUihQQUdFX0FMSUdOKCZfZW5kKSkgLSBtZGVzY1szXS5iYXNlOworCW1kZXNjWzNdLnNpemUgPSBDUEhZU0FERFIoUEZOX0FMSUdOKCh1bnNpZ25lZCBsb25nKSZfZW5kKSkgLSBtZGVzY1szXS5iYXNlOwogCiAJbWRlc2NbNF0udHlwZSA9IHlhbW9uX2ZyZWU7Ci0JbWRlc2NbNF0uYmFzZSA9IENQSFlTQUREUihQQUdFX0FMSUdOKCZfZW5kKSk7CisJbWRlc2NbNF0uYmFzZSA9IENQSFlTQUREUihQRk5fQUxJR04oJl9lbmQpKTsKIAltZGVzY1s0XS5zaXplID0gbWVtc2l6ZSAtIG1kZXNjWzRdLmJhc2U7CiAKIAlyZXR1cm4gJm1kZXNjWzBdOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWlwc0lSUS5TIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWlwc0lSUS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGQ1YzczLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21pcHNJUlEuUworKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogSW50ZXJydXB0IGV4Y2VwdGlvbiBkaXNwYXRjaCBjb2RlLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0jaWZkZWYgQ09ORklHX01JUFNfQVRMQVMKLSNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvYXRsYXNpbnQuaD4KLSNkZWZpbmUgQ0FTQ0FERV9JUlEJCU1JUFNDUFVfSU5UX0FUTEFTCi0jZGVmaW5lIENBU0NBREVfRElTUEFUQ0gJYXRsYXNfaHcwX2lycWRpc3BhdGNoCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19NQUxUQQotI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9tYWx0YWludC5oPgotI2RlZmluZSBDQVNDQURFX0lSUQkJTUlQU0NQVV9JTlRfSTgyNTlBCi0jZGVmaW5lIENBU0NBREVfRElTUEFUQ0gJbWFsdGFfaHcwX2lycWRpc3BhdGNoCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19TRUFECi0jaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL3NlYWRpbnQuaD4KLSNlbmRpZgotCi0vKiBBIGxvdCBvZiBjb21wbGljYXRpb24gaGVyZSBpcyB0YWtlbiBhd2F5IGJlY2F1c2U6Ci0gKgotICogMSkgV2UgaGFuZGxlIG9uZSBpbnRlcnJ1cHQgYW5kIHJldHVybiwgc2l0dGluZyBpbiBhIGxvb3AgYW5kIG1vdmluZyBhY3Jvc3MKLSAqICAgIGFsbCB0aGUgcGVuZGluZyBJUlEgYml0cyBpbiB0aGUgY2F1c2UgcmVnaXN0ZXIgaXMgX05PVF8gdGhlIGFuc3dlciwgdGhlCi0gKiAgICBjb21tb24gY2FzZSBpcyBvbmUgcGVuZGluZyBJUlEgc28gb3B0aW1pemUgaW4gdGhhdCBkaXJlY3Rpb24uCi0gKgotICogMikgV2UgbmVlZCBub3QgY2hlY2sgYWdhaW5zdCBiaXRzIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgSVJRIG1hc2ssIHRoYXQKLSAqICAgIHdvdWxkIG1ha2UgdGhpcyByb3V0aW5lIHNsb3cgYXMgaGVsbC4KLSAqCi0gKiAzKSBMaW51eCBvbmx5IHRoaW5rcyBpbiB0ZXJtcyBvZiBhbGwgSVJRcyBvbiBvciBhbGwgSVJRcyBvZmYsIG5vdGhpbmcgaW4KLSAqICAgIGJldHdlZW4gbGlrZSBCU0Qgc3BsKCkgYnJhaW4tZGFtYWdlLgotICoKLSAqIEZ1cnRoZXJtb3JlLCB0aGUgSVJRcyBvbiB0aGUgTUlQUyBib2FyZCBsb29rIGJhc2ljYWxseSAoYmFycmluZyBzb2Z0d2FyZQotICogSVJRcyB3aGljaCB3ZSBkb24ndCB1c2UgYXQgYWxsIGFuZCBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgYXJlCi0gKiBjb21iaW5lZCB0b2dldGhlciBvbiBoYXJkd2FyZSBpbnRlcnJ1cHQgMCAoTUlQUyBJUlEgMikpIGxpa2U6Ci0gKgotICoJTUlQUyBJUlEJU291cmNlCi0gKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KLSAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDIgICAgICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdCAoaHcwKQotICogICAgICAgICAgICAgMyAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICA0ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDUgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgNiAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICA3ICAgICAgICBSNGsgdGltZXIgKHdoYXQgd2UgdXNlKQotICoKLSAqIE5vdGU6IE9uIHRoZSBTRUFEIGJvYXJkIHRoaW5nIGFyZSBhIGxpdHRsZSBiaXQgZGlmZmVyZW50LgotICogICAgICAgSGVyZSBJUlEgMiAoaHcwKSBpcyB3aXJlZCB0byB0aGUgVUFSVDAgYW5kIElSUSAzIChodzEpIGlzIHdpcmVkCi0gKiAgICAgICB3aXJlZCB0byBVQVJUMS4KLSAqCi0gKiBXZSBoYW5kbGUgdGhlIElSUSBhY2NvcmRpbmcgdG8gX291cl8gcHJpb3JpdHkgd2hpY2ggaXM6Ci0gKgotICogSGlnaGVzdCAtLS0tICAgICBSNGsgVGltZXIKLSAqIExvd2VzdCAgLS0tLSAgICAgQ29tYmluZWQgaGFyZHdhcmUgaW50ZXJydXB0Ci0gKgotICogdGhlbiB3ZSBqdXN0IHJldHVybiwgaWYgbXVsdGlwbGUgSVJRcyBhcmUgcGVuZGluZyB0aGVuIHdlIHdpbGwganVzdCB0YWtlCi0gKiBhbm90aGVyIGV4Y2VwdGlvbiwgYmlnIGRlYWwuCi0gKi8KLQotCS50ZXh0Ci0JLnNldAlub3Jlb3JkZXIKLQkuc2V0CW5vYXQKLQkuYWxpZ24JNQotCU5FU1RFRChtaXBzSVJRLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCS5zZXQJYXQKLQotCW1mYzAJczAsIENQMF9DQVVTRQkJIyBnZXQgaXJxIGJpdHMKLQltZmMwCXMxLCBDUDBfU1RBVFVTCQkjIGdldCBpcnEgbWFzawotCWFuZGkJczAsIFNUMF9JTQkJIyBDQVVTRS5DRSBtYXkgYmUgbm9uLXplcm8hCi0JYW5kCXMwLCBzMQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX01JUFM2NCkKLQkuc2V0CW1pcHMzMgotCWNseglhMCwgczAKLQkuc2V0CW1pcHMwCi0JbmVndQlhMAotCWFkZHUJYTAsIDMxLUNBVVNFQl9JUAotCWJsdHoJYTAsIHNwdXJpb3VzCi0jZWxzZQotCWJlcXoJczAsIHNwdXJpb3VzCi0JIGxpCWEwLCA3Ci0KLQlhbmQJdDAsIHMwLCAweGYwMDAKLQlzbHRpdQl0MCwgdDAsIDEKLQlzbGwJdDAsIDIKLQlzdWJ1CWEwLCB0MAotCXNsbAlzMCwgdDAKLQotCWFuZAl0MCwgczAsIDB4YzAwMAotCXNsdGl1CXQwLCB0MCwgMQotCXNsbAl0MCwgMQotCXN1YnUJYTAsIHQwCi0Jc2xsCXMwLCB0MAotCi0JYW5kCXQwLCBzMCwgMHg4MDAwCi0Jc2x0aXUJdDAsIHQwLCAxCi0JIyBzbGwJdDAsIDAKLQlzdWJ1CWEwLCB0MAotCSMgc2xsCXMwLCB0MAotI2VuZGlmCi0KLSNpZmRlZiBDQVNDQURFX0lSUQotCSBsaQlhMSwgQ0FTQ0FERV9JUlEKLQlibmUJYTAsIGExLCAxZgotCSBhZGR1CWEwLCBNSVBTQ1BVX0lOVF9CQVNFCi0KLQlqYWwJQ0FTQ0FERV9ESVNQQVRDSAotCSBtb3ZlCSBhMCwgc3AKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotMToKLSNlbHNlCi0JIGFkZHUJYTAsIE1JUFNDUFVfSU5UX0JBU0UKLSNlbmRpZgotCi0JamFsCWRvX0lSUQotCSBtb3ZlCWExLCBzcAotCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0KLQotc3B1cmlvdXM6Ci0JaglzcHVyaW91c19pbnRlcnJ1cHQKLQkgbm9wCi0JRU5EKG1pcHNJUlEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wY2kuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3BjaS5jCmluZGV4IDFmNmY5ZGYuLjkzMzdmNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3BjaS5jCkBAIC0xOTgsNiArMTk4LDcgQEAKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9NU0M6CiAJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTI6CiAJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTM6CisJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfMjRLOgogCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0VNVUxfTVNDOgogCQkvKiBTZXQgdXAgcmVzb3VyY2UgcmFuZ2VzIGZyb20gdGhlIGNvbnRyb2xsZXIncyByZWdpc3RlcnMuICAqLwogCQlNU0NfUkVBRChNU0MwMV9QQ0lfU0MyUE1CQVNMLCBzdGFydCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMKaW5kZXggOTNmM2JmMi4uYTlmNjEyNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaGFyZGlycS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTUwLDE2ICs1MSwyMyBAQAogc3RhdGljIGNoYXIgZGlzcGxheV9zdHJpbmdbXSA9ICIgICAgICAgIExJTlVYIE9OIEFUTEFTICAgICAgICI7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01BTFRBKQorI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01UQykKK3N0YXRpYyBjaGFyIGRpc3BsYXlfc3RyaW5nW10gPSAiICAgICAgIFNNVEMgTElOVVggT04gTUFMVEEgICAgICAgIjsKKyNlbHNlCiBzdGF0aWMgY2hhciBkaXNwbGF5X3N0cmluZ1tdID0gIiAgICAgICAgTElOVVggT04gTUFMVEEgICAgICAgIjsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1NFQUQpCiBzdGF0aWMgY2hhciBkaXNwbGF5X3N0cmluZ1tdID0gIiAgICAgICAgTElOVVggT04gU0VBRCAgICAgICAiOwogI2VuZGlmCi1zdGF0aWMgdW5zaWduZWQgaW50IGRpc3BsYXlfY291bnQgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBkaXNwbGF5X2NvdW50OwogI2RlZmluZSBNQVhfRElTUExBWV9DT1VOVCAoc2l6ZW9mKGRpc3BsYXlfc3RyaW5nKSAtIDgpCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdGltZXJfdGlja19jb3VudD0wOworI2RlZmluZSBDUFVDVFJfSU1BU0tCSVQgKDB4MTAwIDw8IE1JUFNDUFVfSU5UX0NQVUNUUikKKworc3RhdGljIHVuc2lnbmVkIGludCB0aW1lcl90aWNrX2NvdW50Owogc3RhdGljIGludCBtaXBzX2NwdV90aW1lcl9pcnE7CitleHRlcm4gdm9pZCBzbXRjX3RpbWVyX2Jyb2FkY2FzdChpbnQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2Nyb2xsX2Rpc3BsYXlfbWVzc2FnZSh2b2lkKQogewpAQCAtNzUsMTUgKzgzLDU1IEBACiAJZG9fSVJRIChtaXBzX2NwdV90aW1lcl9pcnEsIHJlZ3MpOwogfQogCisvKgorICogUmVkZWNsYXJlIHVudGlsIEkgZ2V0IGFyb3VuZCBtb3BwaW5nIHRoZSB0aW1lciBjb2RlIGluc2FuaXR5IG9uIE1JUFMuCisgKi8KIGV4dGVybiBpbnQgbnVsbF9wZXJmX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIGV4dGVybiBpbnQgKCpwZXJmX2lycSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBpcnFyZXR1cm5fdCBtaXBzX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWludCByMiA9IGNwdV9oYXNfbWlwc19yMjsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCByMiA9IGNwdV9oYXNfbWlwc19yMjsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyAgICAgICAgLyoKKwkgKiAgSW4gYW4gU01UQyBzeXN0ZW0sIG9uZSBDb3VudC9Db21wYXJlIHNldCBleGlzdHMgcGVyIFZQRS4KKwkgKiAgV2hpY2ggVEMgd2l0aGluIGEgVlBFIGdldHMgdGhlIGludGVycnVwdCBpcyBlc3NlbnRpYWxseQorCSAqICByYW5kb20gLSB3ZSBvbmx5IGtub3cgdGhhdCBpdCBzaG91bGRuJ3QgYmUgb25lIHdpdGgKKwkgKiAgSVhNVCBzZXQuIFdoaWNoZXZlciBUQyBnZXRzIHRoZSBpbnRlcnJ1cHQgbmVlZHMgdG8KKwkgKiAgc2VuZCBzcGVjaWFsIGludGVycHJvY2Vzc29yIGludGVycnVwdHMgdG8gdGhlIG90aGVyCisJICogIFRDcyB0byBtYWtlIHN1cmUgdGhhdCB0aGV5IHNjaGVkdWxlLCBldGMuCisJICoKKwkgKiAgVGhhdCBjb2RlIGlzIHNwZWNpZmljIHRvIHRoZSBTTVRDIGtlcm5lbCwgbm90IHRvCisJICogIHRoZSBhIHBhcnRpY3VsYXIgcGxhdGZvcm0sIHNvIGl0J3MgaW52b2tlZCBmcm9tCisJICogIHRoZSBnZW5lcmFsIE1JUFMgdGltZXJfaW50ZXJydXB0IHJvdXRpbmUuCisJICovCisKKwkvKgorCSAqIERWUEUgaXMgbmVjZXNzYXJ5IHNvIGxvbmcgYXMgY3Jvc3MtVlBFIGludGVycnVwdHMKKwkgKiBhcmUgZG9uZSB2aWEgcmVhZC1tb2RpZnktd3JpdGUgb2YgQ2F1c2UgcmVnaXN0ZXIuCisJICovCisJaW50IHZwZmxhZ3MgPSBkdnBlKCk7CisJd3JpdGVfYzBfY29tcGFyZSAocmVhZF9jMF9jb3VudCgpIC0gMSk7CisJY2xlYXJfYzBfY2F1c2UoQ1BVQ1RSX0lNQVNLQklUKTsKKwlldnBlKHZwZmxhZ3MpOworCisJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkID09IDApIHsKKwkJdGltZXJfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKKwkJc2Nyb2xsX2Rpc3BsYXlfbWVzc2FnZSgpOworCX0gZWxzZQorCQl3cml0ZV9jMF9jb21wYXJlIChyZWFkX2MwX2NvdW50KCkgKyAoIG1pcHNfaHB0X2ZyZXF1ZW5jeS9IWikpOworCXNtdGNfdGltZXJfYnJvYWRjYXN0KGNwdV9kYXRhW2NwdV0udnBlX2lkKTsKKworCWlmIChjcHUgIT0gMCkKKwkJLyoKKwkJICogT3RoZXIgQ1BVcyBzaG91bGQgZG8gcHJvZmlsaW5nIGFuZCBwcm9jZXNzIGFjY291bnRpbmcKKwkJICovCisJCWxvY2FsX3RpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisKKyNlbHNlIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlpZiAoY3B1ID09IDApIHsKIAkJLyoKIAkJICogQ1BVIDAgaGFuZGxlcyB0aGUgZ2xvYmFsIHRpbWVyIGludGVycnVwdCBqb2IgYW5kIHByb2Nlc3MKQEAgLTEwNywxMiArMTU1LDE0IEBACiAJCSAqIE1vcmUgc3VwcG9ydCBuZWVkcyB0byBiZSBhZGRlZCB0byBrZXJuZWwvdGltZSBmb3IKIAkJICogY291bnRlci90aW1lciBpbnRlcnJ1cHRzIG9uIG11bHRpcGxlIENQVSdzCiAJCSAqLwotCQl3cml0ZV9jMF9jb21wYXJlIChyZWFkX2MwX2NvdW50KCkgKyAobWlwc19ocHRfZnJlcXVlbmN5L0haKSk7CisJCXdyaXRlX2MwX2NvbXBhcmUocmVhZF9jMF9jb3VudCgpICsgKG1pcHNfaHB0X2ZyZXF1ZW5jeS9IWikpOworCiAJCS8qCi0JCSAqIG90aGVyIENQVXMgc2hvdWxkIGRvIHByb2ZpbGluZyBhbmQgcHJvY2VzcyBhY2NvdW50aW5nCisJCSAqIE90aGVyIENQVXMgc2hvdWxkIGRvIHByb2ZpbGluZyBhbmQgcHJvY2VzcyBhY2NvdW50aW5nCiAJCSAqLwotCQlsb2NhbF90aW1lcl9pbnRlcnJ1cHQgKGlycSwgZGV2X2lkLCByZWdzKTsKKwkJbG9jYWxfdGltZXJfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKIAl9CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiBvdXQ6CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTI2LDcgKzE3Niw3IEBACiAJdW5zaWduZWQgaW50IHByaWQgPSByZWFkX2MwX3ByaWQoKSAmIDB4ZmZmZjAwOwogCXVuc2lnbmVkIGludCBjb3VudDsKIAotI2lmZGVmIENPTkZJR19NSVBTX1NFQUQKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1NFQUQpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfU0lNKQogCS8qCiAJICogVGhlIFNFQUQgYm9hcmQgZG9lc24ndCBoYXZlIGEgcmVhbCB0aW1lIGNsb2NrLCBzbyB3ZSBjYW4ndAogCSAqIHJlYWxseSBjYWxjdWxhdGUgdGhlIHRpbWVyIGZyZXF1ZW5jeQpAQCAtMjExLDcgKzI2MSwxMSBAQAogCiAJLyogd2UgYXJlIHVzaW5nIHRoZSBjcHUgY291bnRlciBmb3IgdGltZXIgaW50ZXJydXB0cyAqLwogCWlycS0+aGFuZGxlciA9IG1pcHNfdGltZXJfaW50ZXJydXB0OwkvKiB3ZSB1c2Ugb3VyIG93biBoYW5kbGVyICovCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXNldHVwX2lycV9zbXRjKG1pcHNfY3B1X3RpbWVyX2lycSwgaXJxLCBDUFVDVFJfSU1BU0tCSVQpOworI2Vsc2UKIAlzZXR1cF9pcnEobWlwc19jcHVfdGltZXJfaXJxLCBpcnEpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKIAkvKiBpcnFfZGVzYyhyaXB0b3IpIGlzIGEgZ2xvYmFsIHJlc291cmNlLCB3aGVuIHRoZSBpbnRlcnJ1cHQgb3ZlcmxhcHMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9NYWtlZmlsZQppbmRleCBmZDRjMTQzLi43N2VlNWM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL01ha2VmaWxlCkBAIC0yMCwzICsyMCw0IEBACiAjCiAKIG9iai15IDo9IG1hbHRhX2ludC5vIG1hbHRhX3NldHVwLm8KK29iai0kKENPTkZJR19TTVApICs9IG1hbHRhX3NtcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfaW50LmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfaW50LmMKaW5kZXggZDA2ZGM1YWQuLjdjYzBiYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfaW50LmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvbXNjMDFfcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21zYzAxX2ljLmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgbWlwc0lSUSh2b2lkKTsKIGV4dGVybiB2b2lkIG1pcHNfdGltZXJfaW50ZXJydXB0KHZvaWQpOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1pcHNfaXJxX2xvY2spOwpAQCAtNTgsNiArNTcsNyBAQAogCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX01TQzoKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBMjoKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBMzoKKwljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV8yNEs6CiAJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRU1VTF9NU0M6CiAJICAgICAgICBNU0NfUkVBRChNU0MwMV9QQ0lfSUFDSywgaXJxKTsKIAkJaXJxICY9IDB4ZmY7CkBAIC0xMTQsMTMgKzExNCwxNCBAQAogCXJldHVybiBpcnE7CiB9CiAKLXZvaWQgbWFsdGFfaHcwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgbWFsdGFfaHcwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnE7CiAKIAlpcnEgPSBnZXRfaW50KCk7Ci0JaWYgKGlycSA8IDApCisJaWYgKGlycSA8IDApIHsKIAkJcmV0dXJuOyAgLyogaW50ZXJydXB0IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZCAqLworCX0KIAogCWRvX0lSUShNQUxUQV9JTlRfQkFTRStpcnEsIHJlZ3MpOwogfQpAQCAtMTQzLDYgKzE0NCw3IEBACiAgICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX01TQzoKICAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTI6CiAgICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EzOgorICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV8yNEs6CiAgICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0VNVUxfTVNDOgogICAgICAgICAgICAgICAgIGxsX21zY19pcnEocmVncyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODIsNiArMTg0LDkyIEBACiAgICAgICAgIGRpZSgiQ29yZUhpIGludGVycnVwdCIsIHJlZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjbHoodW5zaWduZWQgbG9uZyB4KQoreworCV9fYXNtX18gKAorCSIJLnNldAlwdXNoCQkJCQlcbiIKKwkiCS5zZXQJbWlwczMyCQkJCQlcbiIKKwkiCWNsegklMCwgJTEJCQkJCVxuIgorCSIJLnNldAlwb3AJCQkJCVxuIgorCTogIj1yIiAoeCkKKwk6ICJyIiAoeCkpOworCisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBWZXJzaW9uIG9mIGZmcyB0aGF0IG9ubHkgbG9va3MgYXQgYml0cyAxMi4uMTUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlycV9mZnModW5zaWduZWQgaW50IHBlbmRpbmcpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX01JUFM2NCkKKwlyZXR1cm4gLWNseihwZW5kaW5nKSArIDMxIC0gQ0FVU0VCX0lQOworI2Vsc2UKKwl1bnNpZ25lZCBpbnQgYTAgPSA3OworCXVuc2lnbmVkIGludCB0MDsKKworCXQwID0gczAgJiAweGYwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4YzAwMDsKKwl0MCA9IHQwIDwgMTsKKwl0MCA9IHQwIDw8IDE7CisJYTAgPSBhMCAtIHQwOworCXMwID0gczAgPDwgdDA7CisKKwl0MCA9IHMwICYgMHg4MDAwOworCXQwID0gdDAgPCAxOworCS8vdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwkvL3MwID0gczAgPDwgdDA7CisKKwlyZXR1cm4gYTA7CisjZW5kaWYKK30KKworLyoKKyAqIElSUXMgb24gdGhlIE1hbHRhIGJvYXJkIGxvb2sgYmFzaWNhbGx5IChiYXJyaW5nIHNvZnR3YXJlIElSUXMgd2hpY2ggd2UKKyAqIGRvbid0IHVzZSBhdCBhbGwgYW5kIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyBhcmUgY29tYmluZWQgdG9nZXRoZXIKKyAqIG9uIGhhcmR3YXJlIGludGVycnVwdCAwIChNSVBTIElSUSAyKSkgbGlrZToKKyAqCisgKglNSVBTIElSUQlTb3VyY2UKKyAqICAgICAgLS0tLS0tLS0gICAgICAgIC0tLS0tLQorICogICAgICAgICAgICAgMAlTb2Z0d2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDEgICAgICAgIFNvZnR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgMiAgICAgICAgQ29tYmluZWQgaGFyZHdhcmUgaW50ZXJydXB0IChodzApCisgKiAgICAgICAgICAgICAzICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDQgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNSAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA2ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCisgKgorICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgorICoKKyAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCisgKiBMb3dlc3QgIC0tLS0gICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdAorICoKKyAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQorICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgorICovCisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisJaW50IGlycTsKKworCWlycSA9IGlycV9mZnMocGVuZGluZyk7CisKKwlpZiAoaXJxID09IE1JUFNDUFVfSU5UX0k4MjU5QSkKKwkJbWFsdGFfaHcwX2lycWRpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKGlycSA+IDApCisJCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgaXJxLCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KKwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaTgyNTlpcnEgPSB7CiAJLmhhbmRsZXIgPSBub19hY3Rpb24sCiAJLm5hbWUgPSAiWFQtUElDIGNhc2NhZGUiCkBAIC0yMTQsNyArMzAyLDYgQEAKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCXNldF9leGNlcHRfdmVjdG9yKDAsIG1pcHNJUlEpOwogCWluaXRfaTgyNTlfaXJxcygpOwogCiAJaWYgKCFjcHVfaGFzX3ZlaWMpCkBAIC0yMjQsNiArMzExLDcgQEAKICAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfTVNDOgogICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBMjoKICAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTM6CisgICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFXzI0SzoKICAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRU1VTF9NU0M6CiAJCWlmIChjcHVfaGFzX3ZlaWMpCiAJCQlpbml0X21zY19pcnFzIChNU0MwMUVfSU5UX0JBU0UsIG1zY19laWNpcnFtYXAsIG1zY19ucl9laWNpcnFzKTsKQEAgLTI0MCwxMiArMzI4LDE3IEBACiAJZWxzZSBpZiAoY3B1X2hhc192aW50KSB7CiAJCXNldF92aV9oYW5kbGVyIChNSVBTQ1BVX0lOVF9JODI1OUEsIG1hbHRhX2h3MF9pcnFkaXNwYXRjaCk7CiAJCXNldF92aV9oYW5kbGVyIChNSVBTQ1BVX0lOVF9DT1JFSEksIGNvcmVoaV9pcnFkaXNwYXRjaCk7Ci0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCXNldHVwX2lycV9zbXRjIChNSVBTQ1BVX0lOVF9CQVNFK01JUFNDUFVfSU5UX0k4MjU5QSwgJmk4MjU5aXJxLAorCQkJKDB4MTAwIDw8IE1JUFNDUFVfSU5UX0k4MjU5QSkpOworCQlzZXR1cF9pcnFfc210YyAoTUlQU0NQVV9JTlRfQkFTRStNSVBTQ1BVX0lOVF9DT1JFSEksCisJCQkmY29yZWhpX2lycWFjdGlvbiwgKDB4MTAwIDw8IE1JUFNDUFVfSU5UX0NPUkVISSkpOworI2Vsc2UgLyogTm90IFNNVEMgKi8KIAkJc2V0dXBfaXJxIChNSVBTQ1BVX0lOVF9CQVNFK01JUFNDUFVfSU5UX0k4MjU5QSwgJmk4MjU5aXJxKTsKIAkJc2V0dXBfaXJxIChNSVBTQ1BVX0lOVF9CQVNFK01JUFNDUFVfSU5UX0NPUkVISSwgJmNvcmVoaV9pcnFhY3Rpb24pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAl9CiAJZWxzZSB7Ci0JCXNldF9leGNlcHRfdmVjdG9yKDAsIG1pcHNJUlEpOwogCQlzZXR1cF9pcnEgKE1JUFNDUFVfSU5UX0JBU0UrTUlQU0NQVV9JTlRfSTgyNTlBLCAmaTgyNTlpcnEpOwogCQlzZXR1cF9pcnEgKE1JUFNDUFVfSU5UX0JBU0UrTUlQU0NQVV9JTlRfQ09SRUhJLCAmY29yZWhpX2lycWFjdGlvbik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NtcC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNmM4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc21wLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBNYWx0YSBQbGF0Zm9ybS1zcGVjaWZpYyBob29rcyBmb3IgU01QIG9wZXJhdGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjaW5jbHVkZSA8YXNtL3NtdGNfaXBpLmg+CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCisvKiBWUEUvU01QIFByb3RvdHlwZSBpbXBsZW1lbnRzIHBsYXRmb3JtIGludGVyZmFjZXMgZGlyZWN0bHkgKi8KKyNpZiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCisKKy8qCisgKiBDYXVzZSB0aGUgc3BlY2lmaWVkIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gYSB0YXJnZXRlZCAiQ1BVIgorICovCisKK3ZvaWQgY29yZV9zZW5kX2lwaShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKQoreworLyogIkNQVSIgbWF5IGJlIFRDIG9mIHNhbWUgVlBFLCBWUEUgb2Ygc2FtZSBDUFUsIG9yIGRpZmZlcmVudCBDUFUgKi8KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJc210Y19zZW5kX2lwaShjcHUsIExJTlVYX1NNUF9JUEksIGFjdGlvbik7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworfQorCisvKgorICogRGV0ZWN0IGF2YWlsYWJsZSBDUFVzL1ZQRXMvVENzIGFuZCBwb3B1bGF0ZSBwaHlzX2NwdV9wcmVzZW50X21hcAorICovCisKK3ZvaWQgX19pbml0IHByb21fYnVpbGRfY3B1X21hcCh2b2lkKQoreworCWludCBuZXh0c2xvdDsKKworCS8qCisJICogQXMgb2YgTm92ZW1iZXIsIDIwMDQsIE1JUFNzaW0gb25seSBzaW11bGF0ZXMgb25lIGNvcmUKKwkgKiBhdCBhIHRpbWUuICBIb3dldmVyLCB0aGF0IGNvcmUgbWF5IGJlIGEgTUlQUyBNVCBjb3JlCisJICogd2l0aCBtdWx0aXBsZSB2aXJ0dWFsIHByb2Nlc3NvcnMgYW5kIHRocmVhZCBjb250ZXh0cy4KKwkgKi8KKworCWlmIChyZWFkX2MwX2NvbmZpZzMoKSAmICgxPDwyKSkgeworCQluZXh0c2xvdCA9IG1pcHNtdF9idWlsZF9jcHVfbWFwKDEpOworCX0KK30KKworLyoKKyAqIFBsYXRmb3JtICJDUFUiIHN0YXJ0dXAgaG9vaworICovCisKK3ZvaWQgcHJvbV9ib290X3NlY29uZGFyeShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXNtdGNfYm9vdF9zZWNvbmRhcnkoY3B1LCBpZGxlKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCit9CisKKy8qCisgKiBQb3N0LWNvbmZpZyBidXQgcHJlLWJvb3QgY2xlYW51cCBlbnRyeSBwb2ludAorICovCisKK3ZvaWQgcHJvbV9pbml0X3NlY29uZGFyeSh2b2lkKQoreworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyAgICAgICAgdm9pZCBzbXRjX2luaXRfc2Vjb25kYXJ5KHZvaWQpOworCWludCBteXZwZTsKKworCS8qIERvbid0IGVuYWJsZSBNYWx0YSBJL08gaW50ZXJydXB0cyAoSVAyKSBmb3Igc2Vjb25kYXJ5IFZQRXMgKi8KKwlteXZwZSA9IHJlYWRfYzBfdGNiaW5kKCkgJiBUQ0JJTkRfQ1VSVlBFOworCWlmIChteXZwZSAhPSAwKSB7CisJCS8qIElkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGRvbmUgb25seSBvbmNlIHBlciBWUEUsIGJ1dC4uLiAqLworCQljbGVhcl9jMF9zdGF0dXMoU1RBVFVTRl9JUDIpOworCQlzZXRfYzBfc3RhdHVzKFNUQVRVU0ZfSVAwIHwgU1RBVFVTRl9JUDEgfCBTVEFUVVNGX0lQMworCQkJCXwgU1RBVFVTRl9JUDQgfCBTVEFUVVNGX0lQNSB8IFNUQVRVU0ZfSVA2CisJCQkJfCBTVEFUVVNGX0lQNyk7CisJfQorCisgICAgICAgIHNtdGNfaW5pdF9zZWNvbmRhcnkoKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCit9CisKKy8qCisgKiBQbGF0Zm9ybSBTTVAgcHJlLWluaXRpYWxpemF0aW9uCisgKgorICogQXMgbm90ZWQgYWJvdmUsIHdlIGNhbiBhc3N1bWUgYSBzaW5nbGUgQ1BVIGZvciBub3cKKyAqIGJ1dCBpdCBtYXkgYmUgbXVsdGl0aHJlYWRlZC4KKyAqLworCit2b2lkIHBsYXRfc21wX3NldHVwKHZvaWQpCit7CisJaWYgKHJlYWRfYzBfY29uZmlnMygpICYgKDE8PDIpKQorCQltaXBzbXRfYnVpbGRfY3B1X21hcCgwKTsKK30KKwordm9pZCBfX2luaXQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQoreworCWlmIChyZWFkX2MwX2NvbmZpZzMoKSAmICgxPDwyKSkKKwkJbWlwc210X3ByZXBhcmVfY3B1cygpOworfQorCisvKgorICogU01QIGluaXRpYWxpemF0aW9uIGZpbmFsaXphdGlvbiBlbnRyeSBwb2ludAorICovCisKK3ZvaWQgcHJvbV9zbXBfZmluaXNoKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXNtdGNfc21wX2ZpbmlzaCgpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KK30KKworLyoKKyAqIEhvb2sgZm9yIGFmdGVyIGFsbCBDUFVzIGFyZSBvbmxpbmUKKyAqLworCit2b2lkIHByb21fY3B1c19kb25lKHZvaWQpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzMyUjJfTVRfU01QICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX2ludC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9pbnQuYwppbmRleCA5MGZkYTBkLi45MTY4ZDkzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX2ludC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zZWFkL3NlYWRfaW50LmMKQEAgLTI0LDE2ICsyNCw5NCBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvc2VhZGludC5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG1pcHNJUlEodm9pZCk7CitzdGF0aWMgaW5saW5lIGludCBjbHoodW5zaWduZWQgbG9uZyB4KQoreworCV9fYXNtX18gKAorCSIJLnNldAlwdXNoCQkJCQlcbiIKKwkiCS5zZXQJbWlwczMyCQkJCQlcbiIKKwkiCWNsegklMCwgJTEJCQkJCVxuIgorCSIJLnNldAlwb3AJCQkJCVxuIgorCTogIj1yIiAoeCkKKwk6ICJyIiAoeCkpOworCisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBWZXJzaW9uIG9mIGZmcyB0aGF0IG9ubHkgbG9va3MgYXQgYml0cyAxMi4uMTUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlycV9mZnModW5zaWduZWQgaW50IHBlbmRpbmcpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX01JUFM2NCkKKwlyZXR1cm4gLWNseihwZW5kaW5nKSArIDMxIC0gQ0FVU0VCX0lQOworI2Vsc2UKKwl1bnNpZ25lZCBpbnQgYTAgPSA3OworCXVuc2lnbmVkIGludCB0MDsKKworCXQwID0gczAgJiAweGYwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4YzAwMDsKKwl0MCA9IHQwIDwgMTsKKwl0MCA9IHQwIDw8IDE7CisJYTAgPSBhMCAtIHQwOworCXMwID0gczAgPDwgdDA7CisKKwl0MCA9IHMwICYgMHg4MDAwOworCXQwID0gdDAgPCAxOworCS8vdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwkvL3MwID0gczAgPDwgdDA7CisKKwlyZXR1cm4gYTA7CisjZW5kaWYKK30KKworLyoKKyAqIElSUXMgb24gdGhlIFNFQUQgYm9hcmQgbG9vayBiYXNpY2FsbHkgYXJlIGNvbWJpbmVkIHRvZ2V0aGVyIG9uIGhhcmR3YXJlCisgKiBpbnRlcnJ1cHQgMCAoTUlQUyBJUlEgMikpIGxpa2U6CisgKgorICoJTUlQUyBJUlEJU291cmNlCisgKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KKyAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDIgICAgICAgIFVBUlQwIChodzApCisgKiAgICAgICAgICAgICAzICAgICAgICBVQVJUMSAoaHcxKQorICogICAgICAgICAgICAgNCAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA1ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDYgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNyAgICAgICAgUjRrIHRpbWVyICh3aGF0IHdlIHVzZSkKKyAqCisgKiBXZSBoYW5kbGUgdGhlIElSUSBhY2NvcmRpbmcgdG8gX291cl8gcHJpb3JpdHkgd2hpY2ggaXM6CisgKgorICogSGlnaGVzdCAtLS0tICAgICBSNGsgVGltZXIKKyAqIExvd2VzdCAgLS0tLSAgICAgQ29tYmluZWQgaGFyZHdhcmUgaW50ZXJydXB0CisgKgorICogdGhlbiB3ZSBqdXN0IHJldHVybiwgaWYgbXVsdGlwbGUgSVJRcyBhcmUgcGVuZGluZyB0aGVuIHdlIHdpbGwganVzdCB0YWtlCisgKiBhbm90aGVyIGV4Y2VwdGlvbiwgYmlnIGRlYWwuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisJaW50IGlycTsKKworCWlycSA9IGlycV9mZnMocGVuZGluZyk7CisKKwlpZiAoaXJxID49IDApCisJCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgaXJxLCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCW1pcHNfY3B1X2lycV9pbml0KE1JUFNDUFVfSU5UX0JBU0UpOwotCi0JLyogTm93IHNhZmUgdG8gc2V0IHRoZSBleGNlcHRpb24gdmVjdG9yLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIG1pcHNJUlEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9jbWRsaW5lLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL2NtZGxpbmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVmOWZiZC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL2NtZGxpbmUuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogS2VybmVsIGNvbW1hbmQgbGluZSBjcmVhdGlvbiB1c2luZyB0aGUgcHJvbSBtb25pdG9yIChZQU1PTikgYXJnYy9hcmd2LgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0KLWV4dGVybiBpbnQgcHJvbV9hcmdjOwotZXh0ZXJuIGludCAqX3Byb21fYXJndjsKLQotLyoKLSAqIFlBTU9OICgzMi1iaXQgUFJPTSkgcGFzcyBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50IGFzIDMyLWJpdCBwb2ludGVyLgotICogVGhpcyBtYWNybyB0YWtlIGNhcmUgb2Ygc2lnbiBleHRlbnNpb24uCi0gKi8KLSNkZWZpbmUgcHJvbV9hcmd2KGluZGV4KSAoKGNoYXIgKikoKChpbnQgKikoaW50KV9wcm9tX2FyZ3YpWyhpbmRleCldKSkKLQotY2hhciBhcmNzX2NtZGxpbmVbQ0xfU0laRV07Ci0KLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLQotCi12b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKLXsKLQljaGFyICpjcDsKLQlpbnQgYWN0cjsKLQotCWFjdHIgPSAxOyAvKiBBbHdheXMgaWdub3JlIGFyZ3ZbMF0gKi8KLQotCWNwID0gJihhcmNzX2NtZGxpbmVbMF0pOwotCXdoaWxlKGFjdHIgPCBwcm9tX2FyZ2MpIHsKLQkgICAgICAgIHN0cmNweShjcCwgcHJvbV9hcmd2KGFjdHIpKTsKLQkJY3AgKz0gc3RybGVuKHByb21fYXJndihhY3RyKSk7Ci0JCSpjcCsrID0gJyAnOwotCQlhY3RyKys7Ci0JfQotCWlmIChjcCAhPSAmKGFyY3NfY21kbGluZVswXSkpIC8qIGdldCByaWQgb2YgdHJhaWxpbmcgc3BhY2UgKi8KLQkJLS1jcDsKLQkqY3AgPSAnXDAnOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fY21kbGluZS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fY21kbGluZS5jCmluZGV4IDlkZjM3YzYuLmM2MzAyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2NtZGxpbmUuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9jbWRsaW5lLmMKQEAgLTI2LDggKzI2LDEwIEBACiAJcmV0dXJuIGFyY3NfY21kbGluZTsKIH0KIAotCiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisJY2hhciAqY3A7CisJY3AgPSBhcmNzX2NtZGxpbmU7CisJLyogR2V0IGJvb3QgbGluZSBmcm9tIGVudmlyb25tZW50PyAqLworCSpjcCA9ICdcMCc7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pbnQuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2ludC5jCmluZGV4IGE0ZDBhMmMuLjJjMTVjOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2ludC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2ludC5jCkBAIC0yNSwxNyArMjUsNzEgQEAKIAogZXh0ZXJuIHZvaWQgbWlwc19jcHVfaXJxX2luaXQoaW50KTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzaW1JUlEodm9pZCk7CitzdGF0aWMgaW5saW5lIGludCBjbHoodW5zaWduZWQgbG9uZyB4KQoreworCV9fYXNtX18gKAorCSIJLnNldAlwdXNoCQkJCQlcbiIKKwkiCS5zZXQJbWlwczMyCQkJCQlcbiIKKwkiCWNsegklMCwgJTEJCQkJCVxuIgorCSIJLnNldAlwb3AJCQkJCVxuIgorCTogIj1yIiAoeCkKKwk6ICJyIiAoeCkpOwogCi1hc21saW5rYWdlIHZvaWQgc2ltX2h3MF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKKwlyZXR1cm4geDsKK30KKworLyoKKyAqIFZlcnNpb24gb2YgZmZzIHRoYXQgb25seSBsb29rcyBhdCBiaXRzIDEyLi4xNS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXJxX2Zmcyh1bnNpZ25lZCBpbnQgcGVuZGluZykKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzY0KQorCXJldHVybiAtY2x6KHBlbmRpbmcpICsgMzEgLSBDQVVTRUJfSVA7CisjZWxzZQorCXVuc2lnbmVkIGludCBhMCA9IDc7CisJdW5zaWduZWQgaW50IHQwOworCisJdDAgPSBzMCAmIDB4ZjAwMDsKKwl0MCA9IHQwIDwgMTsKKwl0MCA9IHQwIDw8IDI7CisJYTAgPSBhMCAtIHQwOworCXMwID0gczAgPDwgdDA7CisKKwl0MCA9IHMwICYgMHhjMDAwOworCXQwID0gdDAgPCAxOworCXQwID0gdDAgPDwgMTsKKwlhMCA9IGEwIC0gdDA7CisJczAgPSBzMCA8PCB0MDsKKworCXQwID0gczAgJiAweDgwMDA7CisJdDAgPSB0MCA8IDE7CisJLy90MCA9IHQwIDw8IDI7CisJYTAgPSBhMCAtIHQwOworCS8vczAgPSBzMCA8PCB0MDsKKworCXJldHVybiBhMDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2ltX2h3MF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlkb19JUlEoMiwgcmVncyk7CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisJaW50IGlycTsKKworCWlycSA9IGlycV9mZnMocGVuZGluZyk7CisKKwlpZiAoaXJxID4gMCkKKwkJZG9fSVJRKE1JUFNDUFVfSU5UX0JBU0UgKyBpcnEsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7Ci0JLyogTm93IHNhZmUgdG8gc2V0IHRoZSBleGNlcHRpb24gdmVjdG9yLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIHNpbUlSUSk7Ci0KIAltaXBzX2NwdV9pcnFfaW5pdChNSVBTQ1BVX0lOVF9CQVNFKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKaW5kZXggZGE1MjI5Ny4uZDE2Y2YzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKQEAgLTk0LDYgKzk0LDggQEAKIAogCiBzcHVyaW91czoKLQlqCXNwdXJpb3VzX2ludGVycnVwdAorCWphbAlzcHVyaW91c19pbnRlcnJ1cHQKKwkgbm9wCisJaglyZXRfZnJvbV9pcnEKIAkgbm9wCiAJRU5EKHNpbUlSUSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fbWVtLmMKaW5kZXggZTU3ZjczNy4uZjdjZTc2OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fbWVtLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fbWVtLmMKQEAgLTE4LDkgKzE4LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CiAKQEAgLTM5LDkgKzQxLDYgQEAKIH07CiAjZW5kaWYKIAotLyogUmVmZXJlbmNlcyB0byBzZWN0aW9uIGJvdW5kYXJpZXMgKi8KLWV4dGVybiBjaGFyIF9lbmQ7Ci0KIHN0cnVjdCBwcm9tX3BtZW1ibG9jayAqIF9faW5pdCBwcm9tX2dldG1kZXNjKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IG1lbXNpemU7CkBAIC02MSwxMCArNjAsMTAgQEAKIAogCW1kZXNjWzJdLnR5cGUgPSBzaW1tZW1fcmVzZXJ2ZWQ7CiAJbWRlc2NbMl0uYmFzZSA9IDB4MDAxMDAwMDA7Ci0JbWRlc2NbMl0uc2l6ZSA9IENQSFlTQUREUihQQUdFX0FMSUdOKCZfZW5kKSkgLSBtZGVzY1syXS5iYXNlOworCW1kZXNjWzJdLnNpemUgPSBDUEhZU0FERFIoUEZOX0FMSUdOKCZfZW5kKSkgLSBtZGVzY1syXS5iYXNlOwogCiAJbWRlc2NbM10udHlwZSA9IHNpbW1lbV9mcmVlOwotCW1kZXNjWzNdLmJhc2UgPSBDUEhZU0FERFIoUEFHRV9BTElHTigmX2VuZCkpOworCW1kZXNjWzNdLmJhc2UgPSBDUEhZU0FERFIoUEZOX0FMSUdOKCZfZW5kKSk7CiAJbWRlc2NbM10uc2l6ZSA9IG1lbXNpemUgLSBtZGVzY1szXS5iYXNlOwogCiAJcmV0dXJuICZtZGVzY1swXTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc21wLmMKaW5kZXggYTlmMGMyYi4uYjcwODRlNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc21wLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc21wLmMKQEAgLTQ0LDggKzQ0LDYgQEAKIHZvaWQgY29yZV9zZW5kX2lwaShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKQogewogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQl2b2lkIHNtdGNfc2VuZF9pcGkoaW50LCBpbnQsIHVuc2lnbmVkIGludCk7Ci0KIAlzbXRjX3NlbmRfaXBpKGNwdSwgTElOVVhfU01QX0lQSSwgYWN0aW9uKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAvKiAiQ1BVIiBtYXkgYmUgVEMgb2Ygc2FtZSBWUEUsIFZQRSBvZiBzYW1lIENQVSwgb3IgZGlmZmVyZW50IENQVSAqLwpAQCAtNTksMTUgKzU3LDggQEAKIHZvaWQgX19pbml0IHByb21fYnVpbGRfY3B1X21hcCh2b2lkKQogewogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQlleHRlcm4gaW50IG1pcHNtdF9idWlsZF9jcHVfbWFwKGludCBzdGFydHNsb3QpOwogCWludCBuZXh0c2xvdDsKIAotCWNwdXNfY2xlYXIocGh5c19jcHVfcHJlc2VudF9tYXApOwotCi0JLyogUmVnaXN0ZXIgdGhlIGJvb3QgQ1BVICovCi0KLQlzbXBfcHJlcGFyZV9ib290X2NwdSgpOwotCiAJLyoKIAkgKiBBcyBvZiBOb3ZlbWJlciwgMjAwNCwgTUlQU3NpbSBvbmx5IHNpbXVsYXRlcyBvbmUgY29yZQogCSAqIGF0IGEgdGltZS4gIEhvd2V2ZXIsIHRoYXQgY29yZSBtYXkgYmUgYSBNSVBTIE1UIGNvcmUKQEAgLTg3LDggKzc4LDYgQEAKIHZvaWQgcHJvbV9ib290X3NlY29uZGFyeShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCiB7CiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCWV4dGVybiB2b2lkIHNtdGNfYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKLQogCXNtdGNfYm9vdF9zZWNvbmRhcnkoY3B1LCBpZGxlKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiB9CkBAIC0xMTMsNyArMTAyLDYgQEAKIHZvaWQgcHJvbV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQl2b2lkIG1pcHNtdF9wcmVwYXJlX2NwdXMoaW50IGMpOwogCS8qCiAJICogQXMgbm90ZWQgYWJvdmUsIHdlIGNhbiBhc3N1bWUgYSBzaW5nbGUgQ1BVIGZvciBub3cKIAkgKiBidXQgaXQgbWF5IGJlIG11bHRpdGhyZWFkZWQuCkBAIC0xMzIsOCArMTIwLDYgQEAKIHZvaWQgcHJvbV9zbXBfZmluaXNoKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCXZvaWQgc210Y19zbXBfZmluaXNoKHZvaWQpOwotCiAJc210Y19zbXBfZmluaXNoKCk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtcjNrLmMgYi9hcmNoL21pcHMvbW0vYy1yM2suYwppbmRleCA5ZGQxMzUyLi5iYjA0MWEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1yM2suYworKysgYi9hcmNoL21pcHMvbW0vYy1yM2suYwpAQCAtMjYwLDYgKzI2MCwxMCBAQAogewogfQogCitzdGF0aWMgdm9pZCBsb2NhbF9yM2tfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKK30KKwogc3RhdGljIHZvaWQgcjNrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiB9CkBAIC0zMzUsNiArMzM5LDcgQEAKIAlmbHVzaF9pY2FjaGVfcmFuZ2UgPSByM2tfZmx1c2hfaWNhY2hlX3JhbmdlOwogCiAJZmx1c2hfY2FjaGVfc2lndHJhbXAgPSByM2tfZmx1c2hfY2FjaGVfc2lndHJhbXA7CisJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlID0gbG9jYWxfcjNrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZTsKIAlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UgPSByM2tfZmx1c2hfZGF0YV9jYWNoZV9wYWdlOwogCiAJX2RtYV9jYWNoZV93YmFja19pbnYgPSByM2tfZG1hX2NhY2hlX3diYWNrX2ludjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggMzJiN2Y2YS4uNGE0MzkyNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTI5LDYgKzI5LDI3IEBACiAjaW5jbHVkZSA8YXNtL3dhci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+IC8qIGZvciBydW5fdW5jYWNoZWQoKSAqLwogCisKKy8qCisgKiBTcGVjaWFsIFZhcmlhbnQgb2Ygc21wX2NhbGxfZnVuY3Rpb24gZm9yIHVzZSBieSBjYWNoZSBmdW5jdGlvbnM6CisgKgorICogIG8gTm8gcmV0dXJuIHZhbHVlCisgKiAgbyBjb2xsYXBzZXMgdG8gbm9ybWFsIGZ1bmN0aW9uIGNhbGwgb24gVVAga2VybmVscworICogIG8gY29sbGFwc2VzIHRvIG5vcm1hbCBmdW5jdGlvbiBjYWxsIG9uIHN5c3RlbXMgd2l0aCBhIHNpbmdsZSBzaGFyZWQKKyAqICAgIHByaW1hcnkgY2FjaGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByNGtfb25fZWFjaF9jcHUodm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHJ5LCBpbnQgd2FpdCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworI2lmICFkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX01JUFNfTVRfU01UQykKKwlzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCk7CisjZW5kaWYKKwlmdW5jKGluZm8pOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKIC8qCiAgKiBNdXN0IGRpZS4KICAqLwpAQCAtMTU0LDcgKzE3NSw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0eDQ5X2JsYXN0X2ljYWNoZTMyX3BhZ2VfaW5kZXhlZCh1bnNpZ25lZCBsb25nIHBhZ2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHBhZ2U7CisJdW5zaWduZWQgbG9uZyBpbmRleG1hc2sgPSBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzaXplIC0gMTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gSU5ERVhfQkFTRSArIChwYWdlICYgaW5kZXhtYXNrKTsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOwogCXVuc2lnbmVkIGxvbmcgd3NfaW5jID0gMVVMIDw8IGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheWJpdDsKIAl1bnNpZ25lZCBsb25nIHdzX2VuZCA9IGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXMgPDwKQEAgLTI5OCw3ICszMjAsNyBAQAogCWlmICghY3B1X2hhc19kY19hbGlhc2VzKQogCQlyZXR1cm47CiAKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfYWxsLCBOVUxMLCAxLCAxKTsKKwlyNGtfb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2NhY2hlX2FsbCwgTlVMTCwgMSwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9yNGtfX19mbHVzaF9jYWNoZV9hbGwodm9pZCAqIGFyZ3MpCkBAIC0zMTMsMTMgKzMzNSwxNCBAQAogCWNhc2UgQ1BVX1I0NDAwTUM6CiAJY2FzZSBDUFVfUjEwMDAwOgogCWNhc2UgQ1BVX1IxMjAwMDoKKwljYXNlIENQVV9SMTQwMDA6CiAJCXI0a19ibGFzdF9zY2FjaGUoKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHI0a19fX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKQogewotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19fX2ZsdXNoX2NhY2hlX2FsbCwgTlVMTCwgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19fX2ZsdXNoX2NhY2hlX2FsbCwgTlVMTCwgMSwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcmFuZ2Uodm9pZCAqIGFyZ3MpCkBAIC0zNDAsNyArMzYzLDcgQEAKIHN0YXRpYyB2b2lkIHI0a19mbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcmFuZ2UsIHZtYSwgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9yYW5nZSwgdm1hLCAxLCAxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3I0a19mbHVzaF9jYWNoZV9tbSh2b2lkICogYXJncykKQEAgLTM2OSw3ICszOTIsNyBAQAogCWlmICghY3B1X2hhc19kY19hbGlhc2VzKQogCQlyZXR1cm47CiAKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfbW0sIG1tLCAxLCAxKTsKKwlyNGtfb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2NhY2hlX21tLCBtbSwgMSwgMSk7CiB9CiAKIHN0cnVjdCBmbHVzaF9jYWNoZV9wYWdlX2FyZ3MgewpAQCAtNDYwLDcgKzQ4Myw3IEBACiAJYXJncy5hZGRyID0gYWRkcjsKIAlhcmdzLnBmbiA9IHBmbjsKIAotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9wYWdlLCAmYXJncywgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9wYWdlLCAmYXJncywgMSwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9yNGtfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKHZvaWQgKiBhZGRyKQpAQCAtNDcwLDcgKzQ5Myw3IEBACiAKIHN0YXRpYyB2b2lkIHI0a19mbHVzaF9kYXRhX2NhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQogewotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9kYXRhX2NhY2hlX3BhZ2UsICh2b2lkICopIGFkZHIsIDEsIDEpOworCXI0a19vbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfZGF0YV9jYWNoZV9wYWdlLCAodm9pZCAqKSBhZGRyLCAxLCAxKTsKIH0KIAogc3RydWN0IGZsdXNoX2ljYWNoZV9yYW5nZV9hcmdzIHsKQEAgLTUxMyw3ICs1MzYsNyBAQAogCWFyZ3Muc3RhcnQgPSBzdGFydDsKIAlhcmdzLmVuZCA9IGVuZDsKIAotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9pY2FjaGVfcmFuZ2UsICZhcmdzLCAxLCAxKTsKKwlyNGtfb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2ljYWNoZV9yYW5nZSwgJmFyZ3MsIDEsIDEpOwogCWluc3RydWN0aW9uX2hhemFyZCgpOwogfQogCkBAIC01ODksNyArNjEyLDcgQEAKIAlhcmdzLnZtYSA9IHZtYTsKIAlhcmdzLnBhZ2UgPSBwYWdlOwogCi0Jb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2ljYWNoZV9wYWdlLCAmYXJncywgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9pY2FjaGVfcGFnZSwgJmFyZ3MsIDEsIDEpOwogfQogCiAKQEAgLTY4OCw3ICs3MTEsNyBAQAogCiBzdGF0aWMgdm9pZCByNGtfZmx1c2hfY2FjaGVfc2lndHJhbXAodW5zaWduZWQgbG9uZyBhZGRyKQogewotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9zaWd0cmFtcCwgKHZvaWQgKikgYWRkciwgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9zaWd0cmFtcCwgKHZvaWQgKikgYWRkciwgMSwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHI0a19mbHVzaF9pY2FjaGVfYWxsKHZvaWQpCkBAIC03NDksMTIgKzc3MiwxMiBAQAogCQlpY2FjaGVfc2l6ZSA9IDEgPDwgKDEyICsgKChjb25maWcgJiBDT05GX0lDKSA+PiA5KSk7CiAJCWMtPmljYWNoZS5saW5lc3ogPSAxNiA8PCAoKGNvbmZpZyAmIENPTkZfSUIpID4+IDUpOwogCQljLT5pY2FjaGUud2F5cyA9IDI7Ci0JCWMtPmljYWNoZS53YXliaXQgPSBmZnMoaWNhY2hlX3NpemUvMikgLSAxOworCQljLT5pY2FjaGUud2F5Yml0ID0gX19mZnMoaWNhY2hlX3NpemUvMik7CiAKIAkJZGNhY2hlX3NpemUgPSAxIDw8ICgxMiArICgoY29uZmlnICYgQ09ORl9EQykgPj4gNikpOwogCQljLT5kY2FjaGUubGluZXN6ID0gMTYgPDwgKChjb25maWcgJiBDT05GX0RCKSA+PiA0KTsKIAkJYy0+ZGNhY2hlLndheXMgPSAyOwotCQljLT5kY2FjaGUud2F5Yml0PSBmZnMoZGNhY2hlX3NpemUvMikgLSAxOworCQljLT5kY2FjaGUud2F5Yml0PSBfX2ZmcyhkY2FjaGVfc2l6ZS8yKTsKIAogCQljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX0NBQ0hFX0NERVhfUDsKIAkJYnJlYWs7CkBAIC04MTEsNiArODM0LDcgQEAKIAogCWNhc2UgQ1BVX1IxMDAwMDoKIAljYXNlIENQVV9SMTIwMDA6CisJY2FzZSBDUFVfUjE0MDAwOgogCQlpY2FjaGVfc2l6ZSA9IDEgPDwgKDEyICsgKChjb25maWcgJiBSMTBLX0NPTkZfSUMpID4+IDI5KSk7CiAJCWMtPmljYWNoZS5saW5lc3ogPSA2NDsKIAkJYy0+aWNhY2hlLndheXMgPSAyOwpAQCAtODM3LDEyICs4NjEsMTIgQEAKIAkJaWNhY2hlX3NpemUgPSAxIDw8ICgxMCArICgoY29uZmlnICYgQ09ORl9JQykgPj4gOSkpOwogCQljLT5pY2FjaGUubGluZXN6ID0gMTYgPDwgKChjb25maWcgJiBDT05GX0lCKSA+PiA1KTsKIAkJYy0+aWNhY2hlLndheXMgPSAyOwotCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplLzIpIC0gMTsKKwkJYy0+aWNhY2hlLndheWJpdCA9IF9fZmZzKGljYWNoZV9zaXplLzIpOwogCiAJCWRjYWNoZV9zaXplID0gMSA8PCAoMTAgKyAoKGNvbmZpZyAmIENPTkZfREMpID4+IDYpKTsKIAkJYy0+ZGNhY2hlLmxpbmVzeiA9IDE2IDw8ICgoY29uZmlnICYgQ09ORl9EQikgPj4gNCk7CiAJCWMtPmRjYWNoZS53YXlzID0gMjsKLQkJYy0+ZGNhY2hlLndheWJpdCA9IGZmcyhkY2FjaGVfc2l6ZS8yKSAtIDE7CisJCWMtPmRjYWNoZS53YXliaXQgPSBfX2ZmcyhkY2FjaGVfc2l6ZS8yKTsKIAogCQljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX0NBQ0hFX0NERVhfUDsKIAkJYnJlYWs7CkBAIC04NzMsMTIgKzg5NywxMiBAQAogCQlpY2FjaGVfc2l6ZSA9IDEgPDwgKDEyICsgKChjb25maWcgJiBDT05GX0lDKSA+PiA5KSk7CiAJCWMtPmljYWNoZS5saW5lc3ogPSAxNiA8PCAoKGNvbmZpZyAmIENPTkZfSUIpID4+IDUpOwogCQljLT5pY2FjaGUud2F5cyA9IDQ7Ci0JCWMtPmljYWNoZS53YXliaXQgPSBmZnMoaWNhY2hlX3NpemUgLyBjLT5pY2FjaGUud2F5cykgLSAxOworCQljLT5pY2FjaGUud2F5Yml0ID0gX19mZnMoaWNhY2hlX3NpemUgLyBjLT5pY2FjaGUud2F5cyk7CiAKIAkJZGNhY2hlX3NpemUgPSAxIDw8ICgxMiArICgoY29uZmlnICYgQ09ORl9EQykgPj4gNikpOwogCQljLT5kY2FjaGUubGluZXN6ID0gMTYgPDwgKChjb25maWcgJiBDT05GX0RCKSA+PiA0KTsKIAkJYy0+ZGNhY2hlLndheXMgPSA0OwotCQljLT5kY2FjaGUud2F5Yml0ID0gZmZzKGRjYWNoZV9zaXplIC8gYy0+ZGNhY2hlLndheXMpIC0gMTsKKwkJYy0+ZGNhY2hlLndheWJpdCA9IF9fZmZzKGRjYWNoZV9zaXplIC8gYy0+ZGNhY2hlLndheXMpOwogCiAjaWYgIWRlZmluZWQoQ09ORklHX1NNUCkgfHwgIWRlZmluZWQoUk05MDAwX0NERVhfU01QX1dBUikKIAkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9DQUNIRV9DREVYX1A7CkBAIC05MDYsNyArOTMwLDcgQEAKIAkJaWNhY2hlX3NpemUgPSBjLT5pY2FjaGUuc2V0cyAqCiAJCSAgICAgICAgICAgICAgYy0+aWNhY2hlLndheXMgKgogCQkgICAgICAgICAgICAgIGMtPmljYWNoZS5saW5lc3o7Ci0JCWMtPmljYWNoZS53YXliaXQgPSBmZnMoaWNhY2hlX3NpemUvYy0+aWNhY2hlLndheXMpIC0gMTsKKwkJYy0+aWNhY2hlLndheWJpdCA9IF9fZmZzKGljYWNoZV9zaXplL2MtPmljYWNoZS53YXlzKTsKIAogCQlpZiAoY29uZmlnICYgMHg4KQkJLyogVkkgYml0ICovCiAJCQljLT5pY2FjaGUuZmxhZ3MgfD0gTUlQU19DQUNIRV9WVEFHOwpAQCAtOTI2LDcgKzk1MCw3IEBACiAJCWRjYWNoZV9zaXplID0gYy0+ZGNhY2hlLnNldHMgKgogCQkgICAgICAgICAgICAgIGMtPmRjYWNoZS53YXlzICoKIAkJICAgICAgICAgICAgICBjLT5kY2FjaGUubGluZXN6OwotCQljLT5kY2FjaGUud2F5Yml0ID0gZmZzKGRjYWNoZV9zaXplL2MtPmRjYWNoZS53YXlzKSAtIDE7CisJCWMtPmRjYWNoZS53YXliaXQgPSBfX2ZmcyhkY2FjaGVfc2l6ZS9jLT5kY2FjaGUud2F5cyk7CiAKIAkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9QUkVGRVRDSDsKIAkJYnJlYWs7CkBAIC05NjQsOSArOTg4LDExIEBACiAJCWMtPmRjYWNoZS5mbGFncyB8PSBNSVBTX0NBQ0hFX1BJTkRFWDsKIAljYXNlIENQVV9SMTAwMDA6CiAJY2FzZSBDUFVfUjEyMDAwOgorCWNhc2UgQ1BVX1IxNDAwMDoKIAljYXNlIENQVV9TQjE6CiAJCWJyZWFrOwogCWNhc2UgQ1BVXzI0SzoKKwljYXNlIENQVV8zNEs6CiAJCWlmICghKHJlYWRfYzBfY29uZmlnNygpICYgKDEgPDwgMTYpKSkKIAlkZWZhdWx0OgogCQkJaWYgKGMtPmRjYWNoZS53YXlzaXplID4gUEFHRV9TSVpFKQpAQCAtMTA5MCw2ICsxMTE2LDcgQEAKIAogCWNhc2UgQ1BVX1IxMDAwMDoKIAljYXNlIENQVV9SMTIwMDA6CisJY2FzZSBDUFVfUjE0MDAwOgogCQlzY2FjaGVfc2l6ZSA9IDB4ODAwMDAgPDwgKChjb25maWcgJiBSMTBLX0NPTkZfU1MpID4+IDE2KTsKIAkJYy0+c2NhY2hlLmxpbmVzeiA9IDY0IDw8ICgoY29uZmlnID4+IDEzKSAmIDEpOwogCQljLT5zY2FjaGUud2F5cyA9IDI7CkBAIC0xMTM0LDYgKzExNjEsMzEgQEAKIAljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX1NVQlNFVF9DQUNIRVM7CiB9CiAKK3ZvaWQgYXUxeDAwX2ZpeHVwX2NvbmZpZ19vZCh2b2lkKQoreworCS8qCisJICogYzBfY29uZmlnLm9kIChiaXQgMTkpIHdhcyB3cml0ZSBvbmx5IChhbmQgcmVhZCBhcyAwKQorCSAqIG9uIHRoZSBlYXJseSByZXZpc2lvbnMgb2YgQWxjaGVteSBTT0NzLiAgSXQgZGlzYWJsZXMgdGhlIGJ1cworCSAqIHRyYW5zYWN0aW9uIG92ZXJsYXBwaW5nIGFuZCBuZWVkcyB0byBiZSBzZXQgdG8gZml4IHZhcmlvdXMgZXJyYXRhLgorCSAqLworCXN3aXRjaCAocmVhZF9jMF9wcmlkKCkpIHsKKwljYXNlIDB4MDAwMzAxMDA6IC8qIEF1MTAwMCBEQSAqLworCWNhc2UgMHgwMDAzMDIwMTogLyogQXUxMDAwIEhBICovCisJY2FzZSAweDAwMDMwMjAyOiAvKiBBdTEwMDAgSEIgKi8KKwljYXNlIDB4MDEwMzAyMDA6IC8qIEF1MTUwMCBBQiAqLworCS8qCisJICogQXUxMTAwIGVycmF0YSBhY3R1YWxseSBrZWVwcyBzaWxlbmNlIGFib3V0IHRoaXMgYml0LCBzbyB3ZSBzZXQgaXQKKwkgKiBqdXN0IGluIGNhc2UgZm9yIHRob3NlIHJldmlzaW9ucyB0aGF0IHJlcXVpcmUgaXQgdG8gYmUgc2V0IGFjY29yZGluZworCSAqIHRvIGFyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2NwdXRhYmxlLmMKKwkgKi8KKwljYXNlIDB4MDIwMzAyMDA6IC8qIEF1MTEwMCBBQiAqLworCWNhc2UgMHgwMjAzMDIwMTogLyogQXUxMTAwIEJBICovCisJY2FzZSAweDAyMDMwMjAyOiAvKiBBdTExMDAgQkMgKi8KKwkJc2V0X2MwX2NvbmZpZygxIDw8IDE5KTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgY29oZXJlbmN5X3NldHVwKHZvaWQpCiB7CiAJY2hhbmdlX2MwX2NvbmZpZyhDT05GX0NNX0NNQVNLLCBDT05GX0NNX0RFRkFVTFQpOwpAQCAtMTE1NCw2ICsxMjA2LDE1IEBACiAJY2FzZSBDUFVfUjQ0MDBNQzoKIAkJY2xlYXJfYzBfY29uZmlnKENPTkZfQ1UpOwogCQlicmVhazsKKwkvKgorCSAqIFdlIG5lZWQgdG8gY2F0Y2ggdGhlIGVhbHJ5IEFsY2hlbXkgU09DcyB3aXRoCisJICogdGhlIHdyaXRlLW9ubHkgY29fY29uZmlnLm9kIGJpdCBhbmQgc2V0IGl0IGJhY2sgdG8gb25lLi4uCisJICovCisJY2FzZSBDUFVfQVUxMDAwOiAvKiByZXYuIERBLCBIQSwgSEIgKi8KKwljYXNlIENQVV9BVTExMDA6IC8qIHJldi4gQUIsIEJBLCBCQyA/PyAqLworCWNhc2UgQ1BVX0FVMTUwMDogLyogcmV2LiBBQiAqLworCQlhdTF4MDBfZml4dXBfY29uZmlnX29kKCk7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtMTE5OCw2ICsxMjU5LDcgQEAKIAogCWZsdXNoX2NhY2hlX3NpZ3RyYW1wCT0gcjRrX2ZsdXNoX2NhY2hlX3NpZ3RyYW1wOwogCWZsdXNoX2ljYWNoZV9hbGwJPSByNGtfZmx1c2hfaWNhY2hlX2FsbDsKKwlsb2NhbF9mbHVzaF9kYXRhX2NhY2hlX3BhZ2UJPSBsb2NhbF9yNGtfZmx1c2hfZGF0YV9jYWNoZV9wYWdlOwogCWZsdXNoX2RhdGFfY2FjaGVfcGFnZQk9IHI0a19mbHVzaF9kYXRhX2NhY2hlX3BhZ2U7CiAJZmx1c2hfaWNhY2hlX3JhbmdlCT0gcjRrX2ZsdXNoX2ljYWNoZV9yYW5nZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2Mtc2IxLmMgYi9hcmNoL21pcHMvbW0vYy1zYjEuYwppbmRleCAyZjA4YjUzLi5mOWIxMjk0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1zYjEuYworKysgYi9hcmNoL21pcHMvbW0vYy1zYjEuYwpAQCAtNTI4LDYgKzUyOCw3IEBACiAJZmx1c2hfY2FjaGVfcGFnZSA9IHNiMV9mbHVzaF9jYWNoZV9wYWdlOwogCiAJZmx1c2hfY2FjaGVfc2lndHJhbXAgPSBzYjFfZmx1c2hfY2FjaGVfc2lndHJhbXA7CisJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlID0gKHZvaWQgKikgc2IxX25vcDsKIAlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UgPSAodm9pZCAqKSBzYjFfbm9wOwogCiAJLyogRnVsbCBmbHVzaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtdHgzOS5jIGIvYXJjaC9taXBzL21tL2MtdHgzOS5jCmluZGV4IGZlMjMyZTMuLjVkZmM5YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXR4MzkuYworKysgYi9hcmNoL21pcHMvbW0vYy10eDM5LmMKQEAgLTIxNiw2ICsyMTYsMTEgQEAKIAkJdHgzOV9ibGFzdF9pY2FjaGVfcGFnZV9pbmRleGVkKHBhZ2UpOwogfQogCitzdGF0aWMgdm9pZCBsb2NhbF90eDM5X2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSh2b2lkICogYWRkcikKK3sKKwl0eDM5X2JsYXN0X2RjYWNoZV9wYWdlKGFkZHIpOworfQorCiBzdGF0aWMgdm9pZCB0eDM5X2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJdHgzOV9ibGFzdF9kY2FjaGVfcGFnZShhZGRyKTsKQEAgLTM4MSw2ICszODYsNyBAQAogCQlmbHVzaF9pY2FjaGVfcmFuZ2UJPSAodm9pZCAqKSB0eDM5aF9mbHVzaF9pY2FjaGVfYWxsOwogCiAJCWZsdXNoX2NhY2hlX3NpZ3RyYW1wCT0gKHZvaWQgKikgdHgzOWhfZmx1c2hfaWNhY2hlX2FsbDsKKwkJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlCT0gKHZvaWQgKikgdHgzOWhfZmx1c2hfaWNhY2hlX2FsbDsKIAkJZmx1c2hfZGF0YV9jYWNoZV9wYWdlCT0gKHZvaWQgKikgdHgzOWhfZmx1c2hfaWNhY2hlX2FsbDsKIAogCQlfZG1hX2NhY2hlX3diYWNrX2ludgk9IHR4MzloX2RtYV9jYWNoZV93YmFja19pbnY7CkBAIC00MDYsNiArNDEyLDcgQEAKIAkJZmx1c2hfaWNhY2hlX3JhbmdlID0gdHgzOV9mbHVzaF9pY2FjaGVfcmFuZ2U7CiAKIAkJZmx1c2hfY2FjaGVfc2lndHJhbXAgPSB0eDM5X2ZsdXNoX2NhY2hlX3NpZ3RyYW1wOworCQlsb2NhbF9mbHVzaF9kYXRhX2NhY2hlX3BhZ2UgPSBsb2NhbF90eDM5X2ZsdXNoX2RhdGFfY2FjaGVfcGFnZTsKIAkJZmx1c2hfZGF0YV9jYWNoZV9wYWdlID0gdHgzOV9mbHVzaF9kYXRhX2NhY2hlX3BhZ2U7CiAKIAkJX2RtYV9jYWNoZV93YmFja19pbnYgPSB0eDM5X2RtYV9jYWNoZV93YmFja19pbnY7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2FjaGUuYyBiL2FyY2gvbWlwcy9tbS9jYWNoZS5jCmluZGV4IDU5MWMyMmIuLjgzYTU2MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jYWNoZS5jCkBAIC0zMCw2ICszMCw3IEBACiAKIC8qIE1JUFMgc3BlY2lmaWMgY2FjaGUgb3BlcmF0aW9ucyAqLwogdm9pZCAoKmZsdXNoX2NhY2hlX3NpZ3RyYW1wKSh1bnNpZ25lZCBsb25nIGFkZHIpOwordm9pZCAoKmxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSkodm9pZCAqIGFkZHIpOwogdm9pZCAoKmZsdXNoX2RhdGFfY2FjaGVfcGFnZSkodW5zaWduZWQgbG9uZyBhZGRyKTsKIHZvaWQgKCpmbHVzaF9pY2FjaGVfYWxsKSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2ZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwppbmRleCAyZDk2MjRmLi5lM2E2MTcyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwpAQCAtMTU3LDcgKzE1Nyw2IEBACiAJICogT29wcy4gVGhlIGtlcm5lbCB0cmllZCB0byBhY2Nlc3Mgc29tZSBiYWQgcGFnZS4gV2UnbGwgaGF2ZSB0bwogCSAqIHRlcm1pbmF0ZSB0aGluZ3Mgd2l0aCBleHRyZW1lIHByZWp1ZGljZS4KIAkgKi8KLQogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCiAJcHJpbnRrKEtFUk5fQUxFUlQgIkNQVSAlZCBVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCBwYWdpbmcgcmVxdWVzdCBhdCAiCkBAIC0xODgsMTEgKzE4NywyMCBAQAogCS8qIEtlcm5lbCBtb2RlPyBIYW5kbGUgZXhjZXB0aW9ucyBvciBkaWUgKi8KIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkKIAkJZ290byBub19jb250ZXh0OwotCisJZWxzZQogCS8qCiAJICogU2VuZCBhIHNpZ2J1cywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIHdlcmUgaW4ga2VybmVsCiAJICogb3IgdXNlciBtb2RlLgogCSAqLworI2lmIDAKKwkJcHJpbnRrKCJkb19wYWdlX2ZhdWx0KCkgIzM6IHNlbmRpbmcgU0lHQlVTIHRvICVzIGZvciAiCisJCSAgICAgICAiaW52YWxpZCAlc1xuJTAqbHggKGVwYyA9PSAlMCpseCwgcmEgPT0gJTAqbHgpXG4iLAorCQkgICAgICAgdHNrLT5jb21tLAorCQkgICAgICAgd3JpdGUgPyAid3JpdGUgYWNjZXNzIHRvIiA6ICJyZWFkIGFjY2VzcyBmcm9tIiwKKwkJICAgICAgIGZpZWxkLCBhZGRyZXNzLAorCQkgICAgICAgZmllbGQsICh1bnNpZ25lZCBsb25nKSByZWdzLT5jcDBfZXBjLAorCQkgICAgICAgZmllbGQsICh1bnNpZ25lZCBsb25nKSByZWdzLT5yZWdzWzMxXSk7CisjZW5kaWYKIAl0c2stPnRocmVhZC5jcDBfYmFkdmFkZHIgPSBhZGRyZXNzOwogCWluZm8uc2lfc2lnbm8gPSBTSUdCVVM7CiAJaW5mby5zaV9lcnJubyA9IDA7CkBAIC0yMDEsNyArMjA5LDYgQEAKIAlmb3JjZV9zaWdfaW5mbyhTSUdCVVMsICZpbmZvLCB0c2spOwogCiAJcmV0dXJuOwotCiB2bWFsbG9jX2ZhdWx0OgogCXsKIAkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCmluZGV4IDFmN2IzN2IuLjBjNTQ0MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9taXBzL21tL2hpZ2htZW0uYwpAQCAtODMsNiArODMsNyBAQAogCXByZWVtcHRfY2hlY2tfcmVzY2hlZCgpOwogfQogCisjaWZuZGVmIENPTkZJR19MSU1JVEVEX0RNQQogLyoKICAqIFRoaXMgaXMgdGhlIHNhbWUgYXMga21hcF9hdG9taWMoKSBidXQgY2FuIG1hcCBtZW1vcnkgdGhhdCBkb2Vzbid0CiAgKiBoYXZlIGEgc3RydWN0IHBhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0LgpAQCAtMTAxLDYgKzEwMiw3IEBACiAKIAlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKIH0KKyNlbmRpZiAvKiBDT05GSUdfTElNSVRFRF9ETUEgKi8KIAogc3RydWN0IHBhZ2UgKl9fa21hcF9hdG9taWNfdG9fcGFnZSh2b2lkICpwdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCBhZDg5YzQ0Li4zM2Y2ZTFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCWZvciAodG1wID0gMDsgdG1wIDwgbWF4X2xvd19wZm47IHRtcCsrKQogCQlpZiAocGFnZV9pc19yYW0odG1wKSkgewogCQkJcmFtKys7Ci0JCQlpZiAoUGFnZVJlc2VydmVkKG1lbV9tYXArdG1wKSkKKwkJCWlmIChQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UodG1wKSkpCiAJCQkJcmVzZXJ2ZWRwYWdlcysrOwogCQl9CiAKQEAgLTI3Niw2ICsyNzYsMjAgQEAKIH0KICNlbmRpZiAvKiAhQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMgKi8KIAordm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJZm9yIChhZGRyID0gYmVnaW47IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOworCQltZW1zZXQoKHZvaWQgKilhZGRyLCAweGNjLCBQQUdFX1NJWkUpOworCQlmcmVlX3BhZ2UoYWRkcik7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgJXM6ICVsZGsgZnJlZWRcbiIsIHdoYXQsIChlbmQgLSBiZWdpbikgPj4gMTApOworfQorCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiB2b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKQEAgLTI4NCwxNiArMjk4LDcgQEAKIAlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChDUEhZU0FERFIoc3RhcnQpKTsKIAllbmQgPSAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoQ1BIWVNBRERSKGVuZCkpOwogI2VuZGlmCi0JaWYgKHN0YXJ0IDwgZW5kKQotCQlwcmludGsoS0VSTl9JTkZPICJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsCi0JCSAgICAgICAoZW5kIC0gc3RhcnQpID4+IDEwKTsKLQotCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCWZyZWVfcGFnZShzdGFydCk7Ci0JCXRvdGFscmFtX3BhZ2VzKys7Ci0JfQorCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOwogfQogI2VuZGlmCiAKQEAgLTMwMSwyNCArMzA2LDE3IEBACiAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyLCBwYWdlLCBmcmVlZDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIGZyZWVkOwogCiAJZnJlZWQgPSBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkoKTsKKwlpZiAoZnJlZWQpCisJCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgZmlybXdhcmUgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLGZyZWVkKTsKIAotCWFkZHIgPSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbjsKLQl3aGlsZSAoYWRkciA8ICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCkgeworCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pOworCWVuZCA9ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7CiAjaWZkZWYgQ09ORklHXzY0QklUCi0JCXBhZ2UgPSBQQUdFX09GRlNFVCB8IENQSFlTQUREUihhZGRyKTsKLSNlbHNlCi0JCXBhZ2UgPSBhZGRyOworCXN0YXJ0ID0gUEFHRV9PRkZTRVQgfCBDUEhZU0FERFIoc3RhcnQpOworCWVuZCA9IFBBR0VfT0ZGU0VUIHwgQ1BIWVNBRERSKGVuZCk7CiAjZW5kaWYKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2UpKTsKLQkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShwYWdlKSk7Ci0JCWZyZWVfcGFnZShwYWdlKTsKLQkJdG90YWxyYW1fcGFnZXMrKzsKLQkJZnJlZWQgKz0gUEFHRV9TSVpFOwotCQlhZGRyICs9IFBBR0VfU0laRTsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeTogJWxkayBmcmVlZFxuIiwKLQkgICAgICAgZnJlZWQgPj4gMTApOworCWZyZWVfaW5pdF9wYWdlcygidW51c2VkIGtlcm5lbCBtZW1vcnkiLCBzdGFydCwgZW5kKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9wZy1yNGsuYwppbmRleCBlNDM5MGRjLi5iN2M3NDkyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGctcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL3BnLXI0ay5jCkBAIC0zNTcsNiArMzU3LDcgQEAKIAogCQljYXNlIENQVV9SMTAwMDA6CiAJCWNhc2UgQ1BVX1IxMjAwMDoKKwkJY2FzZSBDUFVfUjE0MDAwOgogCQkJcHJlZl9zcmNfbW9kZSA9IFByZWZfTG9hZFN0cmVhbWVkOwogCQkJcHJlZl9kc3RfbW9kZSA9IFByZWZfU3RvcmVTdHJlYW1lZDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3NjLXJtN2suYyBiL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMKaW5kZXggM2I2Y2M5Yi4uMzFlYzczMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3NjLXJtN2suYworKysgYi9hcmNoL21pcHMvbW0vc2Mtcm03ay5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogCWMtPnNjYWNoZS5saW5lc3ogPSBzY19sc2l6ZTsKIAljLT5zY2FjaGUud2F5cyA9IDQ7Ci0JYy0+c2NhY2hlLndheWJpdD0gZmZzKHNjYWNoZV9zaXplIC8gYy0+c2NhY2hlLndheXMpIC0gMTsKKwljLT5zY2FjaGUud2F5Yml0PSBfX2ZmcyhzY2FjaGVfc2l6ZSAvIGMtPnNjYWNoZS53YXlzKTsKIAljLT5zY2FjaGUud2F5c2l6ZSA9IHNjYWNoZV9zaXplIC8gYy0+c2NhY2hlLndheXM7CiAJYy0+c2NhY2hlLnNldHMgPSBzY2FjaGVfc2l6ZSAvIChjLT5zY2FjaGUubGluZXN6ICogYy0+c2NhY2hlLndheXMpOwogCXByaW50ayhLRVJOX0lORk8gIlNlY29uZGFyeSBjYWNoZSBzaXplICVkSywgbGluZXNpemUgJWQgYnl0ZXMuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggYTg2NWYyMzkuLjlkY2EwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL3RsYi1yNGsuYwpAQCAtMzIsMTMgKzMyLDM1IEBACiAJCQkJICAgICAibm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDtcblx0IiBcCiAJCQkJICAgICAiLnNldCByZW9yZGVyXG5cdCIpCiAKKy8qIEF0b21pY2l0eSBhbmQgaW50ZXJydXB0YWJpbGl0eSAqLworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKworI2luY2x1ZGUgPGFzbS9zbXRjLmg+CisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKworI2RlZmluZSBFTlRFUl9DUklUSUNBTChmbGFncykgXAorCXsgXAorCXVuc2lnbmVkIGludCBtdnBmbGFnczsgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTtcCisJbXZwZmxhZ3MgPSBkdnBlKCkKKyNkZWZpbmUgRVhJVF9DUklUSUNBTChmbGFncykgXAorCWV2cGUobXZwZmxhZ3MpOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCisJfQorI2Vsc2UKKworI2RlZmluZSBFTlRFUl9DUklUSUNBTChmbGFncykgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCisjZGVmaW5lIEVYSVRfQ1JJVElDQUwoZmxhZ3MpIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQorCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9hbGwodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgb2xkX2N0eDsKIAlpbnQgZW50cnk7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwogCS8qIFNhdmUgb2xkIGNvbnRleHQgYW5kIGNyZWF0ZSBpbXBvc3NpYmxlIFZQTjIgdmFsdWUgKi8KIAlvbGRfY3R4ID0gcmVhZF9jMF9lbnRyeWhpKCk7CiAJd3JpdGVfYzBfZW50cnlsbzAoMCk7CkBAIC01Nyw3ICs3OSw3IEBACiAJfQogCXRsYndfdXNlX2hhemFyZCgpOwogCXdyaXRlX2MwX2VudHJ5aGkob2xkX2N0eCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCiAvKiBBbGwgZW50cmllcyBjb21tb24gdG8gYSBtbSBzaGFyZSBhbiBhc2lkLiAgVG8gZWZmZWN0aXZlbHkgZmx1c2gKQEAgLTg3LDYgKzEwOSw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCBzaXplOwogCisJCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAkJc2l6ZSA9IChlbmQgLSBzdGFydCArIChQQUdFX1NJWkUgLSAxKSkgPj4gUEFHRV9TSElGVDsKIAkJc2l6ZSA9IChzaXplICsgMSkgPj4gMTsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMTIwLDcgKzE0Myw3IEBACiAJCX0gZWxzZSB7CiAJCQlkcm9wX21tdV9jb250ZXh0KG1tLCBjcHUpOwogCQl9Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJRVhJVF9DUklUSUNBTChmbGFncyk7CiAJfQogfQogCkBAIC0xMjksOSArMTUyLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzaXplOwogCisJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwogCXNpemUgPSAoZW5kIC0gc3RhcnQgKyAoUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CiAJc2l6ZSA9IChzaXplICsgMSkgPj4gMTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaWYgKHNpemUgPD0gY3VycmVudF9jcHVfZGF0YS50bGJzaXplIC8gMikgewogCQlpbnQgcGlkID0gcmVhZF9jMF9lbnRyeWhpKCk7CiAKQEAgLTE2Miw3ICsxODUsNyBAQAogCX0gZWxzZSB7CiAJCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIAl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpCkBAIC0xNzUsNyArMTk4LDcgQEAKIAogCQluZXdwaWQgPSBjcHVfYXNpZChjcHUsIHZtYS0+dm1fbW0pOwogCQlwYWdlICY9IChQQUdFX01BU0sgPDwgMSk7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwogCQlvbGRwaWQgPSByZWFkX2MwX2VudHJ5aGkoKTsKIAkJd3JpdGVfYzBfZW50cnloaShwYWdlIHwgbmV3cGlkKTsKIAkJbXRjMF90bGJ3X2hhemFyZCgpOwpAQCAtMTk0LDcgKzIxNyw3IEBACiAKIAlmaW5pc2g6CiAJCXdyaXRlX2MwX2VudHJ5aGkob2xkcGlkKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIAl9CiB9CiAKQEAgLTIwNyw3ICsyMzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9sZHBpZCwgaWR4OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAlvbGRwaWQgPSByZWFkX2MwX2VudHJ5aGkoKTsKIAlwYWdlICY9IChQQUdFX01BU0sgPDwgMSk7CiAJd3JpdGVfYzBfZW50cnloaShwYWdlKTsKQEAgLTIyNiw3ICsyNDksNyBAQAogCX0KIAl3cml0ZV9jMF9lbnRyeWhpKG9sZHBpZCk7CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJRVhJVF9DUklUSUNBTChmbGFncyk7CiB9CiAKIC8qCkBAIC0yNDksNyArMjcyLDcgQEAKIAlpZiAoY3VycmVudC0+YWN0aXZlX21tICE9IHZtYS0+dm1fbW0pCiAJCXJldHVybjsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAKIAlwaWQgPSByZWFkX2MwX2VudHJ5aGkoKSAmIEFTSURfTUFTSzsKIAlhZGRyZXNzICY9IChQQUdFX01BU0sgPDwgMSk7CkBAIC0yNzcsNyArMzAwLDcgQEAKIAllbHNlCiAJCXRsYl93cml0ZV9pbmRleGVkKCk7CiAJdGxid191c2VfaGF6YXJkKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCiAjaWYgMApAQCAtMjkxLDcgKzMxNCw3IEBACiAJcHRlX3QgKnB0ZXA7CiAJaW50IGlkeDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJYWRkcmVzcyAmPSAoUEFHRV9NQVNLIDw8IDEpOwogCWFzaWQgPSByZWFkX2MwX2VudHJ5aGkoKSAmIEFTSURfTUFTSzsKIAl3cml0ZV9jMF9lbnRyeWhpKGFkZHJlc3MgfCBhc2lkKTsKQEAgLTMxMCw3ICszMzMsNyBAQAogCWVsc2UKIAkJdGxiX3dyaXRlX2luZGV4ZWQoKTsKIAl0bGJ3X3VzZV9oYXphcmQoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJRVhJVF9DUklUSUNBTChmbGFncyk7CiB9CiAjZW5kaWYKIApAQCAtMzIyLDcgKzM0NSw3IEBACiAJdW5zaWduZWQgbG9uZyBvbGRfcGFnZW1hc2s7CiAJdW5zaWduZWQgbG9uZyBvbGRfY3R4OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAkvKiBTYXZlIG9sZCBjb250ZXh0IGFuZCBjcmVhdGUgaW1wb3NzaWJsZSBWUE4yIHZhbHVlICovCiAJb2xkX2N0eCA9IHJlYWRfYzBfZW50cnloaSgpOwogCW9sZF9wYWdlbWFzayA9IHJlYWRfYzBfcGFnZW1hc2soKTsKQEAgLTM0Miw3ICszNjUsNyBAQAogCUJBUlJJRVI7CiAJd3JpdGVfYzBfcGFnZW1hc2sob2xkX3BhZ2VtYXNrKTsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCiAvKgpAQCAtMzYyLDcgKzM4NSw3IEBACiAJdW5zaWduZWQgbG9uZyBvbGRfcGFnZW1hc2s7CiAJdW5zaWduZWQgbG9uZyBvbGRfY3R4OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAkvKiBTYXZlIG9sZCBjb250ZXh0IGFuZCBjcmVhdGUgaW1wb3NzaWJsZSBWUE4yIHZhbHVlICovCiAJb2xkX2N0eCA9IHJlYWRfYzBfZW50cnloaSgpOwogCW9sZF9wYWdlbWFzayA9IHJlYWRfYzBfcGFnZW1hc2soKTsKQEAgLTM4NiwxMCArNDA5LDExIEBACiAJd3JpdGVfYzBfZW50cnloaShvbGRfY3R4KTsKIAl3cml0ZV9jMF9wYWdlbWFzayhvbGRfcGFnZW1hc2spOwogb3V0OgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCitleHRlcm4gdm9pZCBfX2luaXQgc2FuaXRpemVfdGxiX2VudHJpZXModm9pZCk7CiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvYmVfdGxiKHVuc2lnbmVkIGxvbmcgY29uZmlnKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKQEAgLTQwMiw2ICs0MjYsMTQgQEAKIAkgKi8KIAlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYwMDAwKSA9PSBQUklEX0NPTVBfTEVHQUNZKQogCQlyZXR1cm47CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qCisJICogSWYgVExCIGlzIHNoYXJlZCBpbiBTTVRDIHN5c3RlbSwgdG90YWwgc2l6ZSBhbHJlYWR5CisJICogaGFzIGJlZW4gY2FsY3VsYXRlZCBhbmQgd3JpdHRlbiBpbnRvIGNwdV9kYXRhIHRsYnNpemUKKwkgKi8KKwlpZigoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpID09IFNNVENfVExCX1NIQVJFRCkKKwkJcmV0dXJuOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogCXJlZyA9IHJlYWRfYzBfY29uZmlnMSgpOwogCWlmICghKChjb25maWcgPj4gNykgJiAzKSkKQEAgLTQxMCw2ICs0NDIsMTUgQEAKIAljLT50bGJzaXplID0gKChyZWcgPj4gMjUpICYgMHgzZikgKyAxOwogfQogCitzdGF0aWMgaW50IF9faW5pdGRhdGEgbnRsYiA9IDA7CitzdGF0aWMgaW50IF9faW5pdCBzZXRfbnRsYihjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbnRsYik7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm50bGI9Iiwgc2V0X250bGIpOworCiB2b2lkIF9faW5pdCB0bGJfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBjb25maWcgPSByZWFkX2MwX2NvbmZpZygpOwpAQCAtNDMyLDUgKzQ3MywxNSBAQAogCiAJLyogRGlkIEkgdGVsbCB5b3UgdGhhdCBBUkMgU1VDS1M/ICAqLwogCisJaWYgKG50bGIpIHsKKwkJaWYgKG50bGIgPiAxICYmIG50bGIgPD0gY3VycmVudF9jcHVfZGF0YS50bGJzaXplKSB7CisJCQlpbnQgd2lyZWQgPSBjdXJyZW50X2NwdV9kYXRhLnRsYnNpemUgLSBudGxiOworCQkJd3JpdGVfYzBfd2lyZWQod2lyZWQpOworCQkJd3JpdGVfYzBfaW5kZXgod2lyZWQtMSk7CisJCQlwcmludGsgKCJSZXN0cmljdGluZyBUTEIgdG8gJWQgZW50cmllc1xuIiwgbnRsYik7CisJCX0gZWxzZQorCQkJcHJpbnRrKCJJZ25vcmluZyBpbnZhbGlkIGFyZ3VtZW50IG50bGI9JWRcbiIsIG50bGIpOworCX0KKwogCWJ1aWxkX3RsYl9yZWZpbGxfaGFuZGxlcigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYmV4LmMgYi9hcmNoL21pcHMvbW0vdGxiZXguYwppbmRleCA1OTliM2MyLi41NDUwN2JlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiZXguYworKysgYi9hcmNoL21pcHMvbW0vdGxiZXguYwpAQCAtNyw2ICs3LDE2IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgYnkgVGhpZW1vIFNldWZlcgogICogQ29weXJpZ2h0IChDKSAyMDA1ICBNYWNpZWogVy4gUm96eWNraQorICogQ29weXJpZ2h0IChDKSAyMDA2ICBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKgorICogLi4uIGFuZCB0aGUgZGF5cyBnb3Qgd29yc2UgYW5kIHdvcnNlIGFuZCBub3cgeW91IHNlZQorICogSSd2ZSBnb25lIGNvbXBsZXRseSBvdXQgb2YgbXkgbWluZC4KKyAqCisgKiBUaGV5J3JlIGNvbWluZyB0byB0YWtlIG1lIGEgYXdheSBoYWhhCisgKiB0aGV5J3JlIGNvbWluZyB0byB0YWtlIG1lIGEgYXdheSBob2hvIGhpaGkgaGFoYQorICogdG8gdGhlIGZ1bm55IGZhcm0gd2hlcmUgY29kZSBpcyBiZWF1dGlmdWwgYWxsIHRoZSB0aW1lIC4uLgorICoKKyAqIChDb25kb2xlbmNlcyB0byBOYXBvbGVvbiBYSVYpCiAgKi8KIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtNjgsNiArNzgsNyBAQAogCUJJTU0gPSAweDA0MCwKIAlKSU1NID0gMHgwODAsCiAJRlVOQyA9IDB4MTAwLAorCVNFVCA9IDB4MjAwCiB9OwogCiAjZGVmaW5lIE9QX01BU0sJCTB4MmYKQEAgLTg2LDYgKzk3LDggQEAKICNkZWZpbmUgSklNTV9TSAkJMAogI2RlZmluZSBGVU5DX01BU0sJMHgyZgogI2RlZmluZSBGVU5DX1NICQkwCisjZGVmaW5lIFNFVF9NQVNLCTB4NworI2RlZmluZSBTRVRfU0gJCTAKIAogZW51bSBvcGNvZGUgewogCWluc25faW52YWxpZCwKQEAgLTEyOSw4ICsxNDIsOCBAQAogCXsgaW5zbl9ibmUsIE0oYm5lX29wLDAsMCwwLDAsMCksIFJTIHwgUlQgfCBCSU1NIH0sCiAJeyBpbnNuX2RhZGRpdSwgTShkYWRkaXVfb3AsMCwwLDAsMCwwKSwgUlMgfCBSVCB8IFNJTU0gfSwKIAl7IGluc25fZGFkZHUsIE0oc3BlY19vcCwwLDAsMCwwLGRhZGR1X29wKSwgUlMgfCBSVCB8IFJEIH0sCi0JeyBpbnNuX2RtZmMwLCBNKGNvcDBfb3AsZG1mY19vcCwwLDAsMCwwKSwgUlQgfCBSRCB9LAotCXsgaW5zbl9kbXRjMCwgTShjb3AwX29wLGRtdGNfb3AsMCwwLDAsMCksIFJUIHwgUkQgfSwKKwl7IGluc25fZG1mYzAsIE0oY29wMF9vcCxkbWZjX29wLDAsMCwwLDApLCBSVCB8IFJEIHwgU0VUfSwKKwl7IGluc25fZG10YzAsIE0oY29wMF9vcCxkbXRjX29wLDAsMCwwLDApLCBSVCB8IFJEIHwgU0VUfSwKIAl7IGluc25fZHNsbCwgTShzcGVjX29wLDAsMCwwLDAsZHNsbF9vcCksIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9kc2xsMzIsIE0oc3BlY19vcCwwLDAsMCwwLGRzbGwzMl9vcCksIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9kc3JhLCBNKHNwZWNfb3AsMCwwLDAsMCxkc3JhX29wKSwgUlQgfCBSRCB8IFJFIH0sCkBAIC0xNDUsOCArMTU4LDggQEAKIAl7IGluc25fbGxkLCBNKGxsZF9vcCwwLDAsMCwwLDApLCBSUyB8IFJUIHwgU0lNTSB9LAogCXsgaW5zbl9sdWksIE0obHVpX29wLDAsMCwwLDAsMCksIFJUIHwgU0lNTSB9LAogCXsgaW5zbl9sdywgTShsd19vcCwwLDAsMCwwLDApLCBSUyB8IFJUIHwgU0lNTSB9LAotCXsgaW5zbl9tZmMwLCBNKGNvcDBfb3AsbWZjX29wLDAsMCwwLDApLCBSVCB8IFJEIH0sCi0JeyBpbnNuX210YzAsIE0oY29wMF9vcCxtdGNfb3AsMCwwLDAsMCksIFJUIHwgUkQgfSwKKwl7IGluc25fbWZjMCwgTShjb3AwX29wLG1mY19vcCwwLDAsMCwwKSwgUlQgfCBSRCB8IFNFVH0sCisJeyBpbnNuX210YzAsIE0oY29wMF9vcCxtdGNfb3AsMCwwLDAsMCksIFJUIHwgUkQgfCBTRVR9LAogCXsgaW5zbl9vcmksIE0ob3JpX29wLDAsMCwwLDAsMCksIFJTIHwgUlQgfCBVSU1NIH0sCiAJeyBpbnNuX3JmZSwgTShjb3AwX29wLGNvcF9vcCwwLDAsMCxyZmVfb3ApLCAwIH0sCiAJeyBpbnNuX3NjLCBNKHNjX29wLDAsMCwwLDAsMCksIFJTIHwgUlQgfCBTSU1NIH0sCkBAIC0yNDIsNiArMjU1LDE0IEBACiAJcmV0dXJuIGFyZyAmIEZVTkNfTUFTSzsKIH0KIAorc3RhdGljIF9faW5pdCB1MzIgYnVpbGRfc2V0KHUzMiBhcmcpCit7CisJaWYgKGFyZyAmIH5TRVRfTUFTSykKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVExCIHN5bnRoZXNpemVyIGZpZWxkIG92ZXJmbG93XG4iKTsKKworCXJldHVybiBhcmcgJiBTRVRfTUFTSzsKK30KKwogLyoKICAqIFRoZSBvcmRlciBvZiBvcGNvZGUgYXJndW1lbnRzIGlzIGltcGxpY2l0bHkgbGVmdCB0byByaWdodCwKICAqIHN0YXJ0aW5nIHdpdGggUlMgYW5kIGVuZGluZyB3aXRoIEZVTkMgb3IgSU1NLgpAQCAtMjczLDYgKzI5NCw3IEBACiAJaWYgKGlwLT5maWVsZHMgJiBCSU1NKSBvcCB8PSBidWlsZF9iaW1tKHZhX2FyZyhhcCwgczMyKSk7CiAJaWYgKGlwLT5maWVsZHMgJiBKSU1NKSBvcCB8PSBidWlsZF9qaW1tKHZhX2FyZyhhcCwgdTMyKSk7CiAJaWYgKGlwLT5maWVsZHMgJiBGVU5DKSBvcCB8PSBidWlsZF9mdW5jKHZhX2FyZyhhcCwgdTMyKSk7CisJaWYgKGlwLT5maWVsZHMgJiBTRVQpIG9wIHw9IGJ1aWxkX3NldCh2YV9hcmcoYXAsIHUzMikpOwogCXZhX2VuZChhcCk7CiAKIAkqKmJ1ZiA9IG9wOwpAQCAtMzU4LDggKzM4MCw4IEBACiBJX3UxczIoX2JsdHopOwogSV91MXMyKF9ibHR6bCk7CiBJX3UxdTJzMyhfYm5lKTsKLUlfdTF1MihfZG1mYzApOwotSV91MXUyKF9kbXRjMCk7CitJX3UxdTJ1MyhfZG1mYzApOworSV91MXUydTMoX2RtdGMwKTsKIElfdTJ1MXMzKF9kYWRkaXUpOwogSV91M3UxdTIoX2RhZGR1KTsKIElfdTJ1MXUzKF9kc2xsKTsKQEAgLTM3Niw4ICszOTgsOCBAQAogSV91MnMzdTEoX2xsZCk7CiBJX3UxczIoX2x1aSk7CiBJX3UyczN1MShfbHcpOwotSV91MXUyKF9tZmMwKTsKLUlfdTF1MihfbXRjMCk7CitJX3UxdTJ1MyhfbWZjMCk7CitJX3UxdTJ1MyhfbXRjMCk7CiBJX3UydTF1Myhfb3JpKTsKIElfMChfcmZlKTsKIElfdTJzM3UxKF9zYyk7CkBAIC00NTEsOCArNDczLDggQEAKICMgZGVmaW5lIGlfU0xMKGJ1ZiwgcnMsIHJ0LCBzaCkgaV9kc2xsKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIGlfU1JBKGJ1ZiwgcnMsIHJ0LCBzaCkgaV9kc3JhKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIGlfU1JMKGJ1ZiwgcnMsIHJ0LCBzaCkgaV9kc3JsKGJ1ZiwgcnMsIHJ0LCBzaCkKLSMgZGVmaW5lIGlfTUZDMChidWYsIHJ0LCByZCkgaV9kbWZjMChidWYsIHJ0LCByZCkKLSMgZGVmaW5lIGlfTVRDMChidWYsIHJ0LCByZCkgaV9kbXRjMChidWYsIHJ0LCByZCkKKyMgZGVmaW5lIGlfTUZDMChidWYsIHJ0LCByZC4uLikgaV9kbWZjMChidWYsIHJ0LCByZCkKKyMgZGVmaW5lIGlfTVRDMChidWYsIHJ0LCByZC4uLikgaV9kbXRjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIGlfQURESVUoYnVmLCBycywgcnQsIHZhbCkgaV9kYWRkaXUoYnVmLCBycywgcnQsIHZhbCkKICMgZGVmaW5lIGlfQUREVShidWYsIHJzLCBydCwgcmQpIGlfZGFkZHUoYnVmLCBycywgcnQsIHJkKQogIyBkZWZpbmUgaV9TVUJVKGJ1ZiwgcnMsIHJ0LCByZCkgaV9kc3VidShidWYsIHJzLCBydCwgcmQpCkBAIC00NjQsOCArNDg2LDggQEAKICMgZGVmaW5lIGlfU0xMKGJ1ZiwgcnMsIHJ0LCBzaCkgaV9zbGwoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgaV9TUkEoYnVmLCBycywgcnQsIHNoKSBpX3NyYShidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBpX1NSTChidWYsIHJzLCBydCwgc2gpIGlfc3JsKGJ1ZiwgcnMsIHJ0LCBzaCkKLSMgZGVmaW5lIGlfTUZDMChidWYsIHJ0LCByZCkgaV9tZmMwKGJ1ZiwgcnQsIHJkKQotIyBkZWZpbmUgaV9NVEMwKGJ1ZiwgcnQsIHJkKSBpX210YzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBpX01GQzAoYnVmLCBydCwgcmQuLi4pIGlfbWZjMChidWYsIHJ0LCByZCkKKyMgZGVmaW5lIGlfTVRDMChidWYsIHJ0LCByZC4uLikgaV9tdGMwKGJ1ZiwgcnQsIHJkKQogIyBkZWZpbmUgaV9BRERJVShidWYsIHJzLCBydCwgdmFsKSBpX2FkZGl1KGJ1ZiwgcnMsIHJ0LCB2YWwpCiAjIGRlZmluZSBpX0FERFUoYnVmLCBycywgcnQsIHJkKSBpX2FkZHUoYnVmLCBycywgcnQsIHJkKQogIyBkZWZpbmUgaV9TVUJVKGJ1ZiwgcnMsIHJ0LCByZCkgaV9zdWJ1KGJ1ZiwgcnMsIHJ0LCByZCkKQEAgLTY3MCwxNCArNjkyLDE1IEBACiAjZGVmaW5lIEsxCQkyNwogCiAvKiBTb21lIENQMCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQzBfSU5ERVgJMAotI2RlZmluZSBDMF9FTlRSWUxPMAkyCi0jZGVmaW5lIEMwX0VOVFJZTE8xCTMKLSNkZWZpbmUgQzBfQ09OVEVYVAk0Ci0jZGVmaW5lIEMwX0JBRFZBRERSCTgKLSNkZWZpbmUgQzBfRU5UUllISQkxMAotI2RlZmluZSBDMF9FUEMJCTE0Ci0jZGVmaW5lIEMwX1hDT05URVhUCTIwCisjZGVmaW5lIEMwX0lOREVYCTAsIDAKKyNkZWZpbmUgQzBfRU5UUllMTzAJMiwgMAorI2RlZmluZSBDMF9UQ0JJTkQJMiwgMgorI2RlZmluZSBDMF9FTlRSWUxPMQkzLCAwCisjZGVmaW5lIEMwX0NPTlRFWFQJNCwgMAorI2RlZmluZSBDMF9CQURWQUREUgk4LCAwCisjZGVmaW5lIEMwX0VOVFJZSEkJMTAsIDAKKyNkZWZpbmUgQzBfRVBDCQkxNCwgMAorI2RlZmluZSBDMF9YQ09OVEVYVAkyMCwgMAogCiAjaWZkZWYgQ09ORklHXzY0QklUCiAjIGRlZmluZSBHRVRfQ09OVEVYVChidWYsIHJlZykgaV9NRkMwKGJ1ZiwgcmVnLCBDMF9YQ09OVEVYVCkKQEAgLTc0Miw3ICs3NjUsNyBAQAogCX0KICNlbmRpZgogCi0JbWVtY3B5KCh2b2lkICopQ0FDX0JBU0UsIHRsYl9oYW5kbGVyLCAweDgwKTsKKwltZW1jcHkoKHZvaWQgKillYmFzZSwgdGxiX2hhbmRsZXIsIDB4ODApOwogfQogCiAvKgpAQCAtODUyLDYgKzg3NSw3IEBACiAKIAljYXNlIENQVV9SMTAwMDA6CiAJY2FzZSBDUFVfUjEyMDAwOgorCWNhc2UgQ1BVX1IxNDAwMDoKIAljYXNlIENQVV80S0M6CiAJY2FzZSBDUFVfU0IxOgogCWNhc2UgQ1BVX1NCMUE6CkBAIC04ODMsNiArOTA3LDcgQEAKIAljYXNlIENQVV80S0VDOgogCWNhc2UgQ1BVXzI0SzoKIAljYXNlIENQVV8zNEs6CisJY2FzZSBDUFVfNzRLOgogCQlpX2VoYihwKTsKIAkJdGxidyhwKTsKIAkJYnJlYWs7CkBAIC05NTEsMTIgKzk3NiwyMCBAQAogCS8qIE5vIGlfbm9wIG5lZWRlZCBoZXJlLCBzaW5jZSB0aGUgbmV4dCBpbnNuIGRvZXNuJ3QgdG91Y2ggVE1QLiAqLwogCiAjaWZkZWYgQ09ORklHX1NNUAorIyBpZmRlZiAgQ09ORklHX01JUFNfTVRfU01UQworCS8qCisJICogU01UQyB1c2VzIFRDQmluZCB2YWx1ZSBhcyAiQ1BVIiBpbmRleAorCSAqLworCWlfbWZjMChwLCBwdHIsIEMwX1RDQklORCk7CisJaV9kc3JsKHAsIHB0ciwgcHRyLCAxOSk7CisjIGVsc2UKIAkvKgogCSAqIDY0IGJpdCBTTVAgcnVubmluZyBpbiBYS1BIWVMgaGFzIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAzCiAJICogc3RvcmVkIGluIENPTlRFWFQuCiAJICovCiAJaV9kbWZjMChwLCBwdHIsIEMwX0NPTlRFWFQpOwogCWlfZHNybChwLCBwdHIsIHB0ciwgMjMpOworI2VuZGlmCiAJaV9MQV9tb3N0bHkocCwgdG1wLCBwZ2RjKTsKIAlpX2RhZGR1KHAsIHB0ciwgcHRyLCB0bXApOwogCWlfZG1mYzAocCwgdG1wLCBDMF9CQURWQUREUik7CkBAIC0xMDE0LDkgKzEwNDcsMjEgQEAKIAogCS8qIDMyIGJpdCBTTVAgaGFzIHNtcF9wcm9jZXNzb3JfaWQoKSBzdG9yZWQgaW4gQ09OVEVYVC4gKi8KICNpZmRlZiBDT05GSUdfU01QCisjaWZkZWYgIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIFNNVEMgdXNlcyBUQ0JpbmQgdmFsdWUgYXMgIkNQVSIgaW5kZXgKKwkgKi8KKwlpX21mYzAocCwgcHRyLCBDMF9UQ0JJTkQpOworCWlfTEFfbW9zdGx5KHAsIHRtcCwgcGdkYyk7CisJaV9zcmwocCwgcHRyLCBwdHIsIDE5KTsKKyNlbHNlCisJLyoKKwkgKiBzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMyBpcyBzdG9yZWQgaW4gQ09OVEVYVC4KKyAgICAgICAgICovCiAJaV9tZmMwKHAsIHB0ciwgQzBfQ09OVEVYVCk7CiAJaV9MQV9tb3N0bHkocCwgdG1wLCBwZ2RjKTsKIAlpX3NybChwLCBwdHIsIHB0ciwgMjMpOworI2VuZGlmCiAJaV9hZGR1KHAsIHB0ciwgdG1wLCBwdHIpOwogI2Vsc2UKIAlpX0xBX21vc3RseShwLCBwdHIsIHBnZGMpOwpAQCAtMTI0Nyw3ICsxMjkyLDcgQEAKIAl9CiAjZW5kaWYKIAotCW1lbWNweSgodm9pZCAqKUNBQ19CQVNFLCBmaW5hbF9oYW5kbGVyLCAweDEwMCk7CisJbWVtY3B5KCh2b2lkICopZWJhc2UsIGZpbmFsX2hhbmRsZXIsIDB4MTAwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L01ha2VmaWxlIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvTWFrZWZpbGUKaW5kZXggMjBiYmQzZS4uNjczNzJmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAjIHVubGVzcyBpdCdzIHNvbWV0aGluZyBzcGVjaWFsIChpZSBub3QgYSAuYyBmaWxlKS4KICMKIAotb2JqLXkgKz0gaW50LWhhbmRsZXIubyBpcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCitvYmoteSArPSBpcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCiAKIG9iai0kKENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFKSArPSBqYS1jb25zb2xlLm8KIG9iai0kKENPTkZJR19SRU1PVEVfREVCVUcpICs9IGRiZ19pby5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2RiZ19pby5jCmluZGV4IDU0MmVhYzguLmQ3ZGVhMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2RiZ19pby5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2RiZ19pby5jCkBAIC03Myw3ICs3Myw3IEBACiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJVUFSVDE2NTUwX1dSSVRFKE9GU19JTlRSX0VOQUJMRSwgMCk7CiAKLQkvKiBzZXQgdXAgYnVhZCByYXRlICovCisJLyogc2V0IHVwIGJhdWQgcmF0ZSAqLwogCXsKIAkJdWludDMyIGRpdmlzb3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWJjNzg5Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyIE1vbWVudHVtIENvbXB1dGVyIEluYy4KLSAqIEF1dGhvcjogTWF0dGhldyBEaGFybSA8bWRoYXJtQG1vbWVuY28uY29tPgotICoKLSAqIEJhc2VkIG9uIHdvcms6Ci0gKiAgIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogICBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBGaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3IgSmFndWFyLUFUWCBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyoKLSAqIEZpcnN0IGxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBPY2Vsb3QtQ1MgYm9hcmQKLSAqLwotCQkuYWxpZ24JNQotCQlORVNURUQoamFndWFyX2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJbWZjMAl0MiwgQ1AwX1NUQVRVUwotCi0JCWFuZAl0MCwgdDIKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDAJLyogc3cwIHNvZnR3YXJlIGludGVycnVwdCAqLwotCQlibmV6CXQxLCBsbF9zdzBfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMQkvKiBzdzEgc29mdHdhcmUgaW50ZXJydXB0ICovCi0JCWJuZXoJdDEsIGxsX3N3MV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIGludDAgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wY2l4YV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAzCS8qIGludDEgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wY2l4Yl9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA0CS8qIGludDIgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wY2lhX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDUJLyogaW50MyBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BjaWJfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNgkvKiBpbnQ0IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfdWFydF9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9jcHV0aW1lcl9pcnEKLQotCQlub3AKLQkJbm9wCi0KLQkJLyogbm93IGxvb2sgYXQgZXh0ZW5kZWQgaW50ZXJydXB0cyAqLwotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJY2ZjMAl0MSwgQ1AwX1MxX0lOVENPTlRST0wKLQotCQkvKiBzaGlmdCB0aGUgbWFzayA4IGJpdHMgbGVmdCB0byBsaW5lIHVwIHRoZSBiaXRzICovCi0JCXNsbAl0MiwgdDEsIDgKLQotCQlhbmQJdDAsIHQyCi0JCXNybAl0MCwgdDAsIDE2Ci0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA4CS8qIGludDYgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9tdjY0MzQwX2RlY29kZV9pcnEKLQotCQlub3AKLQkJbm9wCi0KLQkJLnNldAlyZW9yZGVyCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKGphZ3Vhcl9oYW5kbGVfaW50KQotCi0JCS5hbGlnbgk1Ci1sbF9zdzBfaXJxOgotCQlsaQlhMCwgMAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi1sbF9zdzFfaXJxOgotCQlsaQlhMCwgMQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi1sbF9wY2l4YV9pcnE6Ci0JCWxpCWEwLCAyCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcGNpeGJfaXJxOgotCQlsaQlhMCwgMwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaWFfaXJxOgotCQlsaQlhMCwgNAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaWJfaXJxOgotCQlsaQlhMCwgNQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnRfaXJxOgotCQlsaQlhMCwgNgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdXRpbWVyX2lycToKLQkJbGkJYTAsIDcKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWxsX3RpbWVyX2ludGVycnVwdAotCQlqCXJldF9mcm9tX2lycQotCi1sbF9tdjY0MzQwX2RlY29kZV9pcnE6Ci0JCW1vdmUJYTAsIHNwCi0JCWphbAlsbF9tdjY0MzQwX2lycQotCQlqCXJldF9mcm9tX2lycQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaXJxLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pcnEuYwppbmRleCAxNTU4OGY5Li5lYzQwMzJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pcnEuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pcnEuYwpAQCAtMTAsNyArMTAsNyBAQAogICogICBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KICAqICAgQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0CiAgKgotICogICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCisgKiAgIENvcHlyaWdodCAoQykgMjAwMCwgMDEsIDA2IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0zOCw4ICszOCwzNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGphZ3Vhcl9oYW5kbGVfaW50KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDApCisJCWRvX0lSUSgwLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEpCisJCWRvX0lSUSgxLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCisJCWRvX0lSUSgyLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDMpCisJCWRvX0lSUSgzLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDQpCisJCWRvX0lSUSg0LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDUpCisJCWRvX0lSUSg1LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpCisJCWRvX0lSUSg2LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCisJCWxsX3RpbWVyX2ludGVycnVwdCg3LCByZWdzKTsKKwllbHNlIHsKKwkJLyoKKwkJICogTm93IGxvb2sgYXQgdGhlIGV4dGVuZGVkIGludGVycnVwdHMKKwkJICovCisJCXBlbmRpbmcgPSAocmVhZF9jMF9jYXVzZSgpICYgKHJlYWRfYzBfaW50Y29udHJvbCgpIDw8IDgpKSA+PiAxNjsKKwkJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQOCkKKwkJCWxsX212NjQzNDBfaXJxKHJlZ3MpOworCX0KK30KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2FzY2FkZV9tdjY0MzQwID0gewogCW5vX2FjdGlvbiwgU0FfSU5URVJSVVBULCBDUFVfTUFTS19OT05FLCAiTVY2NDM0MC1DYXNjYWRlIiwgTlVMTCwgTlVMTApAQCAtNTMsOCArODIsNiBAQAogCSAqLwogCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0pOwogCi0JLyogU2V0cyB0aGUgZmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIuICovCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgamFndWFyX2hhbmRsZV9pbnQpOwogCW1pcHNfY3B1X2lycV9pbml0KDApOwogCXJtN2tfY3B1X2lycV9pbml0KDgpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYwppbmRleCA5MWQ5NjM3Li4xMzc5Yzc2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMKQEAgLTM4MSwyNCArMzgxLDI0IEBACiAJICogc2h1dCBkb3duIGV0aGVybmV0IHBvcnRzLCBqdXN0IHRvIGJlIHN1cmUgb3VyIG1lbW9yeSBkb2Vzbid0IGdldAogCSAqIGNvcnJ1cHRlZCBieSByYW5kb20gZXRoZXJuZXQgdHJhZmZpYy4KIAkgKi8KLQlNVl9XUklURShNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygyKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygyKSwgMHhmZiA8PCA4KTsKLQl3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7Ci0Jd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygyKSkgJiAweGZmKTsKLQl3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSkgJiAweGZmKTsKLQl3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKLQl3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygyKSkgJiAweGZmKTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSwKLQkgICAgICAgICBNVl9SRUFEKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApKSAmIH4xKTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygxKSwKLQkgICAgICAgICBNVl9SRUFEKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpKSAmIH4xKTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygyKSwKLQkgICAgICAgICBNVl9SRUFEKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDIpKSAmIH4xKTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygyKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygyKSwgMHhmZiA8PCA4KTsKKwl3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOworCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7CisJd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygyKSkgJiAweGZmKTsKKwl3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSkgJiAweGZmKTsKKwl3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKKwl3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygyKSkgJiAweGZmKTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSwKKwkgICAgICAgICBNVl9SRUFEKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApKSAmIH4xKTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygxKSwKKwkgICAgICAgICBNVl9SRUFEKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpKSAmIH4xKTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygyKSwKKwkgICAgICAgICBNVl9SRUFEKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDIpKSAmIH4xKTsKIAogCS8qIFR1cm4gb2ZmIHRoZSBCaXQtRXJyb3IgTEVEICovCiAJSkFHVUFSX0ZQR0FfV1JJVEUoMHg4MCwgQ0xSKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9NYWtlZmlsZQppbmRleCBhYWI4ZmQ4Li44YmNlYTY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogIyByZW1vdmVzIGFueSBvbGQgZGVwZW5kZW5jaWVzLiBET04nVCBwdXQgeW91ciBvd24gZGVwZW5kZW5jaWVzIGhlcmUKICMgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIHNwZWNpYWwgKGllIG5vdCBhIC5jIGZpbGUpLgogIwotb2JqLXkJICs9IGludC1oYW5kbGVyLm8gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJICs9IGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MjJmMDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyIE1vbWVudHVtIENvbXB1dGVyIEluYy4KLSAqIEF1dGhvcjogTWF0dGhldyBEaGFybSA8bWRoYXJtQG1vbWVuY28uY29tPgotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogQ29weXJpZ2h0IDIwMDQgUE1DLVNpZXJyYQotICogQXV0aG9yOiBNYW5pc2ggTGFjaHdhbmkgKGxhY2h3YW5pQHBtYy1zaWVycmEuY29tKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pLCBtbGFjaHdhbmlAbXZpc3RhLmNvbQotICoKLSAqIEZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBPY2Vsb3QtMyBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyoKLSAqIEZpcnN0IGxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBPY2Vsb3QtMyBib2FyZAotICovCi0JCS5hbGlnbgk1Ci0JCU5FU1RFRChvY2Vsb3QzX2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQyLCBDUDBfU1RBVFVTCi0KLQkJYW5kCXQwLCB0MgotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiBzdzAgc29mdHdhcmUgaW50ZXJydXB0IChJUlEwKSAqLwotCQlibmV6CXQxLCBsbF9zdzBfaXJxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHN3MSBzb2Z0d2FyZSBpbnRlcnJ1cHQgKElSUTEpICovCi0JCWJuZXoJdDEsIGxsX3N3MV9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDIJLyogaW50MCBoYXJkd2FyZSBsaW5lIChJUlEyKSAqLwotCQlibmV6CXQxLCBsbF9wY2kwc2xvdDFfaXJxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAzCS8qIGludDEgaGFyZHdhcmUgbGluZSAoSVJRMykgKi8KLQkJYm5legl0MSwgbGxfcGNpMHNsb3QyX2lycQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNAkvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKElSUTQpICovCi0JCWJuZXoJdDEsIGxsX3BjaTFzbG90MV9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDUJLyogaW50MyBoYXJkd2FyZSBsaW5lIChJUlE1KSAqLwotCQlibmV6CXQxLCBsbF9wY2kxc2xvdDJfaXJxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2CS8qIGludDQgaGFyZHdhcmUgbGluZSAoSVJRNikgKi8KLQkJYm5legl0MSwgbGxfdWFydF9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDcJLyogY3B1IHRpbWVyIChJUlE3KSAqLwotCQlibmV6CXQxLCBsbF9jcHV0aW1lcl9pcnEKLQotICAgICAgICAgICAgICAgIC8qIG5vdyBsb29rIGF0IGV4dGVuZGVkIGludGVycnVwdHMgKi8KLSAgICAgICAgICAgICAgICBtZmMwICAgIHQwLCBDUDBfQ0FVU0UKLSAgICAgICAgICAgICAgICBjZmMwICAgIHQxLCBDUDBfUzFfSU5UQ09OVFJPTAotCi0gICAgICAgICAgICAgICAgLyogc2hpZnQgdGhlIG1hc2sgOCBiaXRzIGxlZnQgdG8gbGluZSB1cCB0aGUgYml0cyAqLwotICAgICAgICAgICAgICAgIHNsbCAgICAgdDIsIHQxLCA4Ci0KLSAgICAgICAgICAgICAgICBhbmQgICAgIHQwLCB0MgotICAgICAgICAgICAgICAgIHNybCAgICAgdDAsIHQwLCAxNgotCi0gICAgICAgICAgICAgICAgYW5kaSAgICB0MSwgdDAsIFNUQVRVU0ZfSVA4ICAgICAvKiBpbnQ2IGhhcmR3YXJlIGxpbmUgKElSUTkpICovCi0gICAgICAgICAgICAgICAgYm5leiAgICB0MSwgbGxfbXY2NDM0MF9kZWNvZGVfaXJxCi0KLQkJLnNldAlyZW9yZGVyCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKG9jZWxvdDNfaGFuZGxlX2ludCkKLQotCQkuYWxpZ24JNQotbGxfc3cwX2lycToKLQkJbGkJYTAsIDAJCS8qIElSUSAxICovCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLWxsX3N3MV9pcnE6Ci0JCWxpCWEwLCAxCQkvKiBJUlEgMiAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaTBzbG90MV9pcnE6Ci0JCWxpCWEwLCAyCQkvKiBJUlEgMyAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaTBzbG90Ml9pcnE6Ci0JCWxpCWEwLCAzCQkvKiBJUlEgNCAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaTFzbG90MV9pcnE6Ci0JCWxpCWEwLCA0CQkvKiBJUlEgNSAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaTFzbG90Ml9pcnE6Ci0JCWxpCWEwLCA1CQkvKiBJUlEgNiAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnRfaXJxOgotCQlsaQlhMCwgNgkJLyogSVJRIDcgKi8KLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHV0aW1lcl9pcnE6Ci0JCWxpCWEwLCA3CQkvKiBJUlEgOCAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX212NjQzNDBfZGVjb2RlX2lycToKLQkJbW92ZQlhMCwgc3AKLQkJamFsCWxsX212NjQzNDBfaXJxCi0JCWoJcmV0X2Zyb21faXJxCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pcnEuYwppbmRleCA0MjQ2NGRiLi44N2M2M2MzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2lycS5jCkBAIC01Myw4ICs1Myw2IEBACiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG9jZWxvdDNfaGFuZGxlX2ludCh2b2lkKTsKLQogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2FzY2FkZV9tdjY0MzQwID0gewogCW5vX2FjdGlvbiwgU0FfSU5URVJSVVBULCBDUFVfTUFTS19OT05FLCAiTVY2NDM0MC1DYXNjYWRlIiwgTlVMTCwgTlVMTAogfTsKQEAgLTY3LDkgKzY1LDYgQEAKIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNIHwgU1QwX0JFVik7CiAKLQkvKiBTZXRzIHRoZSBmaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBvY2Vsb3QzX2hhbmRsZV9pbnQpOwotCW1pcHNfY3B1X2lycV9pbml0KDApOwogCXJtN2tfY3B1X2lycV9pbml0KDgpOwogCiAJLyogc2V0IHVwIHRoZSBjYXNjYWRpbmcgaW50ZXJydXB0cyAqLwpAQCAtNzksMyArNzQsMzYgQEAKIAlzZXRfYzBfc3RhdHVzKFNUMF9JTSk7IC8qIElFIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KIAogfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkKKwkJZG9fSVJRKDAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkKKwkJZG9fSVJRKDEsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJZG9fSVJRKDIsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKKwkJZG9fSVJRKDMsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkKKwkJZG9fSVJRKDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkKKwkJZG9fSVJRKDUsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikKKwkJZG9fSVJRKDYsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UgeworCQkvKgorCQkgKiBOb3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cworCQkgKi8KKwkJcGVuZGluZyA9IChyZWFkX2MwX2NhdXNlKCkgJiAocmVhZF9jMF9pbnRjb250cm9sKCkgPDwgOCkpID4+IDE2OworCisJCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDgpCisJCQlsbF9tdjY0MzQwX2lycShyZWdzKTsKKwkJZWxzZQorCQkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMKaW5kZXggMzcwZTc1ZC4uYzY5MTk1MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMKQEAgLTMyOSwyMiArMzI5LDIyIEBACiAJLyogc2h1dCBkb3duIGV0aGVybmV0IHBvcnRzLCBqdXN0IHRvIGJlIHN1cmUgb3VyIG1lbW9yeSBkb2Vzbid0IGdldAogCSAqIGNvcnJ1cHRlZCBieSByYW5kb20gZXRoZXJuZXQgdHJhZmZpYy4KIAkgKi8KLQlNVl9XUklURShNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOwogCWRvIHt9Ci0JICB3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOworCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygwKSkgJiAweGZmKTsKIAlkbyB7fQotCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKKwkgIHdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7CiAJZG8ge30KLQkgIHdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOworCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7CiAJZG8ge30KLQkgIHdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApLAotCQkgTVZfUkVBRChNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSkgJiB+MSk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSksCi0JCSBNVl9SRUFEKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpKSAmIH4xKTsKKwkgIHdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApLAorCQkgTVZfUkVBRChNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSkgJiB+MSk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSksCisJCSBNVl9SRUFEKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpKSAmIH4xKTsKIAogCS8qIFR1cm4gb2ZmIHRoZSBCaXQtRXJyb3IgTEVEICovCiAJT0NFTE9UX0ZQR0FfV1JJVEUoMHg4MCwgQ0xSKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9NYWtlZmlsZQppbmRleCA5MTI0MDc3Li45NDgwMmI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgTW9tZW50dW0gQ29tcHV0ZXIncyBPY2Vsb3QtQyBhbmQgLUNTIGJvYXJkcy4KICMKIAotb2JqLXkJIAkJKz0gY3BjaS1pcnEubyBpbnQtaGFuZGxlci5vIGlycS5vIHByb20ubyByZXNldC5vIFwKK29iai15CSAJCSs9IGNwY2ktaXJxLm8gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gXAogCQkJICAgc2V0dXAubyB1YXJ0LWlycS5vCiAKIG9iai0kKENPTkZJR19LR0RCKQkrPSBkYmdfaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2RiZ19pby5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2RiZ19pby5jCmluZGV4IDg3MjBiY2MuLmYwYTZhMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvZGJnX2lvLmMKQEAgLTczLDcgKzczLDcgQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKIAotCS8qIHNldCB1cCBidWFkIHJhdGUgKi8KKwkvKiBzZXQgdXAgYmF1ZCByYXRlICovCiAJewogCQl1aW50MzIgZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzNDlkOS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDIgTW9tZW50dW0gQ29tcHV0ZXIgSW5jLgotICogQXV0aG9yOiBNYXR0aGV3IERoYXJtIDxtZGhhcm1AbW9tZW5jby5jb20+Ci0gKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBGaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3IgT2NlbG90LUNTIGJvYXJkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgIm9jZWxvdF9jX2ZwZ2EuaCIKLQotLyoKLSAqIEZpcnN0IGxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBPY2Vsb3QtQ1MgYm9hcmQKLSAqLwotCQkuYWxpZ24JNQotCQlORVNURUQob2NlbG90X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJbWZjMAl0MiwgQ1AwX1NUQVRVUwotCi0JCWFuZAl0MCwgdDIKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDAJLyogc3cwIHNvZnR3YXJlIGludGVycnVwdCAqLwotCQlibmV6CXQxLCBsbF9zdzBfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMQkvKiBzdzEgc29mdHdhcmUgaW50ZXJydXB0ICovCi0JCWJuZXoJdDEsIGxsX3N3MV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIGludDAgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9zY3NpX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDMJLyogaW50MSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3VhcnRfZGVjb2RlX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDQJLyogaW50MiBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BtY19pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA1CS8qIGludDMgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9jcGNpX2RlY29kZV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2CS8qIGludDQgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9tdjY0MzQwX2RlY29kZV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9jcHV0aW1lcl9pcnEKLQotCQkuc2V0CXJlb3JkZXIKLQotCQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JCW5vcAotCQlFTkQob2NlbG90X2hhbmRsZV9pbnQpCi0KLQkJLmFsaWduCTUKLWxsX3N3MF9pcnE6Ci0JCWxpCWEwLCAwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLWxsX3N3MV9pcnE6Ci0JCWxpCWEwLCAxCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLWxsX3Njc2lfaXJxOgotCQlsaQlhMCwgMgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnRfZGVjb2RlX2lycToKLQkJbW92ZQlhMCwgc3AKLQkJamFsCWxsX3VhcnRfaXJxCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BtY19pcnE6Ci0JCWxpCWEwLCA0Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfY3BjaV9kZWNvZGVfaXJxOgotCQltb3ZlCWEwLCBzcAotCQlqYWwJbGxfY3BjaV9pcnEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfbXY2NDM0MF9kZWNvZGVfaXJxOgotCQltb3ZlCWEwLCBzcAotCQlqYWwJbGxfbXY2NDM0MF9pcnEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1dGltZXJfaXJxOgotCQlsaQlhMCwgNwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pcnEuYwppbmRleCBhNTc2NGJjLi44NmY2MWNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2lycS5jCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG9jZWxvdF9oYW5kbGVfaW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgdWFydF9pcnFfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNwY2lfaXJxX2luaXQodm9pZCk7CiAKQEAgLTYwLDYgKzU5LDMzIEBACiAJbm9fYWN0aW9uLCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIHZpYSBNVjY0MzQwIiwgTlVMTCwgTlVMTAogfTsKIAorZXh0ZXJuIHZvaWQgbGxfdWFydF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgbGxfY3BjaV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkKKwkJZG9fSVJRKDAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkKKwkJZG9fSVJRKDEsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJZG9fSVJRKDIsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKKwkJbGxfdWFydF9pcnEocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQorCQlkb19JUlEoNCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQorCQlsbF9jcGNpX2lycShyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpCisJCWxsX212NjQzNDBfaXJxKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJLyoKQEAgLTY4LDggKzk0LDYgQEAKIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKIAotCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIG9jZWxvdF9oYW5kbGVfaW50KTsKIAltaXBzX2NwdV9pcnFfaW5pdCgwKTsKIAogCS8qIHNldCB1cCB0aGUgY2FzY2FkaW5nIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9NYWtlZmlsZQppbmRleCBlNWYxY2IwLi5hZGI1NjY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgTW9tZW50dW0gQ29tcHV0ZXIncyBPY2Vsb3QtRyBib2FyZC4KICMKIAotb2JqLXkJIAkJKz0gaW50LWhhbmRsZXIubyBpcnEubyBndC1pcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCitvYmoteQkgCQkrPSBpcnEubyBndC1pcnEubyBwcm9tLm8gcmVzZXQubyBzZXR1cC5vCiBvYmotJChDT05GSUdfS0dEQikJKz0gZGJnX2lvLm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2RiZ19pby5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2RiZ19pby5jCmluZGV4IDg3MjBiY2MuLmYwYTZhMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvZGJnX2lvLmMKQEAgLTczLDcgKzczLDcgQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKIAotCS8qIHNldCB1cCBidWFkIHJhdGUgKi8KKwkvKiBzZXQgdXAgYmF1ZCByYXRlICovCiAJewogCQl1aW50MzIgZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyZThmNy4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBGaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3Igb2NlbG90IGJvYXJkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogZmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIG9jZWxvdCBib2FyZCAtCi0gKiBXZSBjaGVjayBmb3IgdGhlIHRpbWVyIGZpcnN0LCB0aGVuIGNoZWNrIFBDSSBpbnRzIEEgYW5kIEQuCi0gKiBUaGVuIGNoZWNrIGZvciBzZXJpYWwgSVJRIGFuZCBmYWxsIHRocm91Z2guCi0gKi8KLQkJLmFsaWduCTUKLQkJTkVTVEVEKG9jZWxvdF9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDIsIENQMF9TVEFUVVMKLQotCQlhbmQJdDAsIHQyCi0KLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiBpbnQwIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcHJpX2VuZXRfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDMJLyogaW50MSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3NlY19lbmV0X2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA0CS8qIGludDIgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF91YXJ0X2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA1CS8qIGludDMgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9jcGNpX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2CS8qIGludDQgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9nYWxpbGVvX3AwX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9jcHV0aW1lcl9pcnEKLQotICAgICAgICAgICAgICAgIC8qIG5vdyBsb29rIGF0IHRoZSBleHRlbmRlZCBpbnRlcnJ1cHRzICovCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQljZmMwCXQxLCBDUDBfUzFfSU5UQ09OVFJPTAotCi0JCS8qIHNoaWZ0IHRoZSBtYXNrIDggYml0cyBsZWZ0IHRvIGxpbmUgdXAgdGhlIGJpdHMgKi8KLQkJIHNsbAl0MiwgdDEsIDgKLQotCQkgYW5kCXQwLCB0MgotCQkgc3JsCXQwLCB0MCwgMTYKLQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA4CS8qIGludDYgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9nYWxpbGVvX3AxX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA5CS8qIGludDcgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wbWNfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEwCS8qIGludDggaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9jcGNpX2FiY2RfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDExCS8qIGludDkgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF90ZXN0cG9pbnRfaXJxCi0KLQkJLnNldAlyZW9yZGVyCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKG9jZWxvdF9oYW5kbGVfaW50KQotCi0JCS5hbGlnbgk1Ci1sbF9wcmlfZW5ldF9pcnE6Ci0JCWxpCWEwLCAyCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfc2VjX2VuZXRfaXJxOgotCQlsaQlhMCwgMwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnRfaXJxOgotCQlsaQlhMCwgNAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwY2lfaXJxOgotCQlsaQlhMCwgNQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2dhbGlsZW9fcDBfaXJxOgotCQlsaQlhMCwgNgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdXRpbWVyX2lycToKLQkJbGkJYTAsIDcKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9nYWxpbGVvX3AxX2lycToKLQkJbGkJYTAsIDgKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9wbWNfaXJxOgotCQlsaQlhMCwgOQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwY2lfYWJjZF9pcnE6Ci0JCWxpCWEwLCAxMAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3Rlc3Rwb2ludF9pcnE6Ci0JCWxpCWEwLCAxMQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaXJxLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaXJxLmMKaW5kZXggNWViODViMS4uN2E0YTQxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2lycS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9pcnEuYwpAQCAtNDgsNyArNDgsNDEgQEAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgb2NlbG90X2hhbmRsZV9pbnQodm9pZCk7Cithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJZG9fSVJRKDIsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKKwkJZG9fSVJRKDMsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkKKwkJZG9fSVJRKDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkKKwkJZG9fSVJRKDUsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikKKwkJZG9fSVJRKDYsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UgeworCQkvKgorCQkgKiBOb3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cworCQkgKi8KKwkJcGVuZGluZyA9IChyZWFkX2MwX2NhdXNlKCkgJiAocmVhZF9jMF9pbnRjb250cm9sKCkgPDwgOCkpID4+IDE2OworCisJCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDgpCisJCQlkb19JUlEoOCwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQOSkKKwkJCWRvX0lSUSg5LCByZWdzKTsKKwkJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxMCkKKwkJCWRvX0lSUSgxMCwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMTEpCisJCQlkb19JUlEoMTEsIHJlZ3MpOworCQllbHNlCisJCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7CisJfQorfQorCiBleHRlcm4gdm9pZCBndDY0MjQwX2lycV9pbml0KHZvaWQpOwogCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCkBAIC02MCw4ICs5NCw2IEBACiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9JTSk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIG9jZWxvdF9oYW5kbGVfaW50KTsKIAltaXBzX2NwdV9pcnFfaW5pdCgwKTsKIAlybTdrX2NwdV9pcnFfaW5pdCg4KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jIGIvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCmluZGV4IDkzNWRkODUuLmMzMWU0Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYworKysgYi9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKQEAgLTE0LDggKzE0LDggQEAKIAogI2luY2x1ZGUgIm9wX2ltcGwuaCIKIAotZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX21pcHN4eCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Ci1leHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfcm05MDAwIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHhfb3BzIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9ybTkwMDBfb3BzIF9fYXR0cmlidXRlX18oKHdlYWspKTsKIAogc3RhdGljIHN0cnVjdCBvcF9taXBzX21vZGVsICptb2RlbDsKIApAQCAtMjcsNyArMjcsNyBAQAogCW1vZGVsLT5yZWdfc2V0dXAoY3RyKTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgcmVnaXN0ZXJzIG9uIGFsbCBjcHVzLiAgKi8KLQlvbl9lYWNoX2NwdShtb2RlbC0+Y3B1X3NldHVwLCAwLCAwLCAxKTsKKwlvbl9lYWNoX2NwdShtb2RlbC0+Y3B1X3NldHVwLCBOVUxMLCAwLCAxKTsKIAogICAgICAgICByZXR1cm4gMDsKIH0KQEAgLTgwLDEzICs4MCwxNCBAQAogCWNhc2UgQ1BVXzI0SzoKIAljYXNlIENQVV8yNUtGOgogCWNhc2UgQ1BVXzM0SzoKKwljYXNlIENQVV83NEs6CiAJY2FzZSBDUFVfU0IxOgogCWNhc2UgQ1BVX1NCMUE6Ci0JCWxtb2RlbCA9ICZvcF9tb2RlbF9taXBzeHg7CisJCWxtb2RlbCA9ICZvcF9tb2RlbF9taXBzeHhfb3BzOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX1JNOTAwMDoKLQkJbG1vZGVsID0gJm9wX21vZGVsX3JtOTAwMDsKKwkJbG1vZGVsID0gJm9wX21vZGVsX3JtOTAwMF9vcHM7CiAJCWJyZWFrOwogCX07CiAKQEAgLTExNCw1ICsxMTUsNiBAQAogCiB2b2lkIG9wcm9maWxlX2FyY2hfZXhpdCh2b2lkKQogewotCW1vZGVsLT5leGl0KCk7CisJaWYgKG1vZGVsKQorCQltb2RlbC0+ZXhpdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX21pcHN4eC5jIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX21pcHN4eC5jCmluZGV4IDk1ZDQ4OGMuLmYyNmEwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9taXBzeHguYworKysgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbWlwc3h4LmMKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2RlZmluZSBNX0NPVU5URVJfT1ZFUkZMT1cJCSgxVUwgICAgPDwgMzEpCiAKLXN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX21pcHN4eDsKK3N0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX21pcHN4eF9vcHM7CiAKIHN0YXRpYyBzdHJ1Y3QgbWlwc3h4X3JlZ2lzdGVyX2NvbmZpZyB7CiAJdW5zaWduZWQgaW50IGNvbnRyb2xbNF07CkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIG1pcHN4eF9yZWdfc2V0dXAoc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjdHIpCiB7Ci0JdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4Lm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHhfb3BzLm51bV9jb3VudGVyczsKIAlpbnQgaTsKIAogCS8qIENvbXB1dGUgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgY29udHJvbCB3b3JkLiAgKi8KQEAgLTYyLDcgKzYyLDcgQEAKIAogc3RhdGljIHZvaWQgbWlwc3h4X2NwdV9zZXR1cCAodm9pZCAqYXJncykKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHgubnVtX2NvdW50ZXJzOworCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eF9vcHMubnVtX2NvdW50ZXJzOwogCiAJc3dpdGNoIChjb3VudGVycykgewogCWNhc2UgNDoKQEAgLTgzLDcgKzgzLDcgQEAKIC8qIFN0YXJ0IGFsbCBjb3VudGVycyBvbiBjdXJyZW50IENQVSAqLwogc3RhdGljIHZvaWQgbWlwc3h4X2NwdV9zdGFydCh2b2lkICphcmdzKQogewotCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eC5udW1fY291bnRlcnM7CisJdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4X29wcy5udW1fY291bnRlcnM7CiAKIAlzd2l0Y2ggKGNvdW50ZXJzKSB7CiAJY2FzZSA0OgpAQCAtMTAwLDcgKzEwMCw3IEBACiAvKiBTdG9wIGFsbCBjb3VudGVycyBvbiBjdXJyZW50IENQVSAqLwogc3RhdGljIHZvaWQgbWlwc3h4X2NwdV9zdG9wKHZvaWQgKmFyZ3MpCiB7Ci0JdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4Lm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHhfb3BzLm51bV9jb3VudGVyczsKIAogCXN3aXRjaCAoY291bnRlcnMpIHsKIAljYXNlIDQ6CkBAIC0xMTYsNyArMTE2LDcgQEAKIAogc3RhdGljIGludCBtaXBzeHhfcGVyZmNvdW50X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4Lm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHhfb3BzLm51bV9jb3VudGVyczsKIAl1bnNpZ25lZCBpbnQgY29udHJvbDsKIAl1bnNpZ25lZCBpbnQgY291bnRlcjsKIAlpbnQgaGFuZGxlZCA9IDA7CkBAIC0xODcsMzMgKzE4NywzNyBAQAogCiAJcmVzZXRfY291bnRlcnMoY291bnRlcnMpOwogCi0Jb3BfbW9kZWxfbWlwc3h4Lm51bV9jb3VudGVycyA9IGNvdW50ZXJzOworCW9wX21vZGVsX21pcHN4eF9vcHMubnVtX2NvdW50ZXJzID0gY291bnRlcnM7CiAJc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUpIHsKIAljYXNlIENQVV8yMEtDOgotCQlvcF9tb2RlbF9taXBzeHguY3B1X3R5cGUgPSAibWlwcy8yMEsiOworCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvMjBLIjsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV8yNEs6Ci0JCW9wX21vZGVsX21pcHN4eC5jcHVfdHlwZSA9ICJtaXBzLzI0SyI7CisJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy8yNEsiOwogCQlicmVhazsKIAogCWNhc2UgQ1BVXzI1S0Y6Ci0JCW9wX21vZGVsX21pcHN4eC5jcHVfdHlwZSA9ICJtaXBzLzI1SyI7CisJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy8yNUsiOwogCQlicmVhazsKIAogI2lmbmRlZiBDT05GSUdfU01QCiAJY2FzZSBDUFVfMzRLOgotCQlvcF9tb2RlbF9taXBzeHguY3B1X3R5cGUgPSAibWlwcy8zNEsiOworCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvMzRLIjsKKwkJYnJlYWs7CisKKwljYXNlIENQVV83NEs6CisJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy83NEsiOwogCQlicmVhazsKICNlbmRpZgogCiAJY2FzZSBDUFVfNUtDOgotCQlvcF9tb2RlbF9taXBzeHguY3B1X3R5cGUgPSAibWlwcy81SyI7CisJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy81SyI7CiAJCWJyZWFrOwogCiAJY2FzZSBDUFVfU0IxOgogCWNhc2UgQ1BVX1NCMUE6Ci0JCW9wX21vZGVsX21pcHN4eC5jcHVfdHlwZSA9ICJtaXBzL3NiMSI7CisJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy9zYjEiOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMjksMTIgKzIzMywxMiBAQAogCiBzdGF0aWMgdm9pZCBtaXBzeHhfZXhpdCh2b2lkKQogewotCXJlc2V0X2NvdW50ZXJzKG9wX21vZGVsX21pcHN4eC5udW1fY291bnRlcnMpOworCXJlc2V0X2NvdW50ZXJzKG9wX21vZGVsX21pcHN4eF9vcHMubnVtX2NvdW50ZXJzKTsKIAogCXBlcmZfaXJxID0gbnVsbF9wZXJmX2lycTsKIH0KIAotc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4ID0geworc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4X29wcyA9IHsKIAkucmVnX3NldHVwCT0gbWlwc3h4X3JlZ19zZXR1cCwKIAkuY3B1X3NldHVwCT0gbWlwc3h4X2NwdV9zZXR1cCwKIAkuaW5pdAkJPSBtaXBzeHhfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9ybTkwMDAuYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9ybTkwMDAuYwppbmRleCA5Yjc1ZTQxLi5iNzA2M2ZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfcm05MDAwLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX3JtOTAwMC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAlmcmVlX2lycShybTkwMDBfcGVyZmNvdW50X2lycSwgTlVMTCk7CiB9CiAKLXN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX3JtOTAwMCA9IHsKK3N0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX3JtOTAwMF9vcHMgPSB7CiAJLnJlZ19zZXR1cAk9IHJtOTAwMF9yZWdfc2V0dXAsCiAJLmNwdV9zZXR1cAk9IHJtOTAwMF9jcHVfc2V0dXAsCiAJLmluaXQJCT0gcm05MDAwX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL01ha2VmaWxlCmluZGV4IDZlMzhmM2IuLmI3YzYzODEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL01ha2VmaWxlCkBAIC0yMiw2ICsyMiw2IEBACiAjIHVuZGVyIExpbnV4LgogIwogCi1vYmoteSA6PSBzZXR1cC5vIHByb20ubyBtaXBzSVJRLm8gaW50Lm8gcmVzZXQubyB0aW1lLm8gcHJvYy5vIHBsYXRmb3JtLm8KK29iai15IDo9IHNldHVwLm8gcHJvbS5vIGludC5vIHJlc2V0Lm8gdGltZS5vIHByb2MubyBwbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfUENJKSArPSBwY2kubwogb2JqLSQoQ09ORklHX0tHREIpICs9IGdkYl9ob29rLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKaW5kZXggYzUwMGUyZC4uMzllZTYzMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKQEAgLTM4LDggKzM4LDYgQEAKICNpbmNsdWRlIDxpbnQuaD4KICNpbmNsdWRlIDx1YXJ0Lmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgY3AwX2lycWRpc3BhdGNoKHZvaWQpOwotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9sb2NrKTsKIAogLyogZGVmYXVsdCBwcmlvIGZvciBpbnRlcnJ1cHRzICovCkBAIC01NSw3ICs1Myw3IEBACiAJMQkJCS8vICA3MAogfTsKIAotdm9pZCBodzBfaXJxZGlzcGF0Y2goaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBodzBfaXJxZGlzcGF0Y2goaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJLyogZmluZCBvdXQgd2hpY2ggaW50ZXJydXB0ICovCiAJaXJxID0gUE5YODU1MF9HSUNfVkVDVE9SXzAgPj4gMzsKQEAgLTY4LDcgKzY2LDcgQEAKIH0KIAogCi12b2lkIHRpbWVyX2lycWRpc3BhdGNoKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgdGltZXJfaXJxZGlzcGF0Y2goaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaXJxID0gKDB4MDFjMCAmIHJlYWRfYzBfY29uZmlnNygpKSA+PiA2OwogCkBAIC04OCw2ICs4NiwyMCBAQAogCX0KIH0KIAorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCisJCWRvX0lSUSgyLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpIHsKKwkJaWYgKHJlYWRfYzBfY29uZmlnNygpICYgMHgwMWMwKQorCQkJdGltZXJfaXJxZGlzcGF0Y2goNywgcmVncyk7CisJfQorCisJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbW9kaWZ5X2NwMF9pbnRtYXNrKHVuc2lnbmVkIGNscl9tYXNrLCB1bnNpZ25lZCBzZXRfbWFzaykKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHJlYWRfYzBfc3RhdHVzKCk7CkBAIC0yMjMsOSArMjM1LDYgQEAKIAlpbnQgaTsKIAlpbnQgY29uZmlnUFI7CiAKLQkvKiBpbml0IG9mIGNwMCBpbnRlcnJ1cHRzICovCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgY3AwX2lycWRpc3BhdGNoKTsKLQogCWZvciAoaSA9IDA7IGkgPCBQTlg4NTUwX0lOVF9DUDBfVE9USU5UOyBpKyspIHsKIAkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZsZXZlbF9pcnFfdHlwZTsKIAkJcG54ODU1MF9hY2soaSk7CS8qIG1hc2sgdGhlIGlycSBqdXN0IGluIGNhc2UgICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9taXBzSVJRLlMgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9taXBzSVJRLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzOGJmZmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vbWlwc0lSUS5TCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMiBQaGlsaXBzLCBJbmMuIEFsbCByaWdodHMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzLgotICoKLSAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIGZyZWVseSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICogQmFzZWQgdXBvbiBhcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY2NDI0MC9pbnQtaGFuZGxlci5TCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyoKLSAqIGNwMF9pcnFkaXNwYXRjaAotICoKLSAqICAgIENvZGUgdG8gaGFuZGxlIGluLWNvcmUgaW50ZXJydXB0IGV4Y2VwdGlvbi4KLSAqLwotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotCQkuc2V0CW5vYXQKLQkJTkVTVEVEKGNwMF9pcnFkaXNwYXRjaCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCW1mYzAJdDAsQ1AwX0NBVVNFCi0JCW1mYzAJdDIsQ1AwX1NUQVRVUwotCi0JCWFuZAl0MCx0MgotCi0JCWFuZGkJdDEsdDAsU1RBVFVTRl9JUDIgLyogaW50MCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsbGxfaHcwX2lycQotCQlub3AKLQotCQlhbmRpCXQxLHQwLFNUQVRVU0ZfSVA3IC8qIGludDUgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLGxsX3RpbWVyX2lycQotCQlub3AKLQotCQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCUVORChjcDBfaXJxZGlzcGF0Y2gpCi0KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF9odzBfaXJxOgotCQlsaQlhMCwyCi0JCW1vdmUJYTEsc3AKLQkJamFsCWh3MF9pcnFkaXNwYXRjaAotCQlub3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF90aW1lcl9pcnE6Ci0JCW1mYzAJdDMsQ1AwX0NPTkZJRyw3Ci0JCWFuZGkJdDQsdDMsMHgwMWMwCi0JCWJlcXoJdDQsbGxfdGltZXJfb3V0Ci0JCW5vcAotCQlsaQlhMCw3Ci0JCW1vdmUJYTEsc3AKLQkJamFsCXRpbWVyX2lycWRpc3BhdGNoCi0JCW5vcAotCi1sbF90aW1lcl9vdXQ6CWoJcmV0X2Zyb21faXJxCi0JCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggYTU5MjI2MGYuLjU0MzZiNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vcGxhdGZvcm0uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2lwMzEwNi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8aW50Lmg+CiAjaW5jbHVkZSA8dXNiLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL01ha2VmaWxlCmluZGV4IGFlOTZhNzEuLmU5MzFlMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIFBNQy1TaWVycmEgVGl0YW4KICMKIAotb2JqLXkgICAgKz0gaXJxLWhhbmRsZXIubyBpcnEubyBpMmMteW9zZW1pdGUubyBwcm9tLm8gcHktY29uc29sZS5vIHNldHVwLm8KK29iai15ICAgICs9IGlycS5vIGkyYy15b3NlbWl0ZS5vIHByb20ubyBweS1jb25zb2xlLm8gc2V0dXAubwogCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGRiZ19pby5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2lycS1oYW5kbGVyLlMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2I5YzQwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2lycS1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDMsIDA0IFBNQy1TaWVycmEgSW5jLgotICogQXV0aG9yOiBNYW5pc2ggTGFjaHdhbmkgKGxhY2h3YW5pQHBtYy1zaWVycmEuY29tCi0gKiBDb3B5cmlnaHQgMjAwNCBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCi0gKgotICogRmlyc3QtbGV2ZWwgaW50ZXJydXB0IHJvdXRlciBmb3IgdGhlIFBNQy1TaWVycmEgVGl0YW4gYm9hcmQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRpdGFuIHN1cHBvcnRzIEh5cGVydHJhbnNwb3J0IG9yIFBDSSBidXQgbm90IGJvdGguIEhlbmNlLCBvbmUgaW50ZXJydXB0Ci0gKiBsaW5lIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBQQ0kgc2xvdCBBIGFuZCBIeXBlcnRyYW5zcG9ydC4gVGhpcyBpcyB0aGUKLSAqIFByb2Nlc3NvciBJTlRCICMwLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JCS5hbGlnbgk1Ci0JCU5FU1RFRCh0aXRhbl9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQkJLnNldAlub3Jlb3JkZXIKLQkJbGEJcmEsIHJldF9mcm9tX2lycQotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJbWZjMAl0MiwgQ1AwX1NUQVRVUwotCi0JCWFuZAl0MCwgdDIKLQotCQlhbmRpCXQyLCB0MCwgU1RBVFVTRl9JUDcJLyogSU5UQjUgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQyLCBsbF90aW1lcl9pcnEJLyogVGltZXIgKi8KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIElOVEIwIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcGNpYV9pcnEJCS8qIDY0LWJpdCBQQ0kgKi8KLQkJYW5kaQl0MiwgdDAsIFNUQVRVU0ZfSVAzCS8qIElOVEIxIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MiwgbGxfcGNpYl9pcnEJCS8qIHNlY29uZCA2NC1iaXQgUENJIHNsb3QgKi8KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA0CS8qIElOVEIyIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfZHVhcnRfaXJxCS8qIFVBUlQJKi8KLQkJYW5kaSAgICB0MiwgdDAsIFNUQVRVU0ZfSVA1CS8qIFNNUCBpbnRlci1jb3JlIGludGVycnVwdHMgKi8KLQkJYm5leiAgICB0MiwgbGxfc21wX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDYKLQkJYm5legl0MSwgbGxfaHRfaXJxCQkvKiBIeXBlcnRyYW5zcG9ydCAqLwotCi0JCW1vdmUJYTAsIHNwCi0JCWoJZG9fZXh0ZW5kZWRfaXJxCi0JCUVORCh0aXRhbl9oYW5kbGVfaW50KQotCi0JCS5zZXQJcmVvcmRlcgotCQkuYWxpZ24JNQotCi1sbF9wY2lhX2lycToKLQkJbGkJYTAsIDIKLQkJbW92ZQlhMSwgc3AKLSNpZmRlZiBDT05GSUdfSFlQRVJUUkFOU1BPUlQKLQkJaglsbF9odF9zbXBfaXJxX2hhbmRsZXIKLSNlbHNlCi0JCWoJZG9fSVJRCi0jZW5kaWYKLQotbGxfcGNpYl9pcnE6Ci0JCWxpCWEwLCAzCi0JCW1vdmUJYTEsIHNwCi0JCWoJZG9fSVJRCi0KLWxsX2R1YXJ0X2lycToKLQkJbGkJYTAsIDQKLQkJbW92ZQlhMSwgc3AKLQkJaglkb19JUlEKLQotbGxfc21wX2lycToKLQkJbGkJYTAsIDUKLQkJbW92ZQlhMSwgc3AKLSNpZmRlZiBDT05GSUdfU01QCi0JCWoJdGl0YW5fbWFpbGJveF9pcnEKLSNlbHNlCi0JCWoJZG9fSVJRCi0jZW5kaWYKLQotbGxfaHRfaXJxOgotCQlsaQlhMCwgNgotCQltb3ZlCWExLCBzcAotCQlqCWxsX2h0X3NtcF9pcnFfaGFuZGxlcgotCi1sbF90aW1lcl9pcnE6Ci0JCWxpCWEwLCA3Ci0JCW1vdmUJYTEsIHNwCi0JCWoJZG9fSVJRCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2lycS5jCmluZGV4IGY0ZTI4OTcuLmExZjUyNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2lycS5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2lycS5jCkBAIC0yLDYgKzIsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzIFBNQy1TaWVycmEgSW5jLgogICogQXV0aG9yOiBNYW5pc2ggTGFjaHdhbmkgKGxhY2h3YW5pQHBtYy1zaWVycmEuY29tKQogICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgpAQCAtNTUsNyArNTcsNiBAQAogI2RlZmluZSBIWVBFUlRSQU5TUE9SVF9JTlRDICAgICAweDdhCQkvKiBJTlRDIyAqLwogI2RlZmluZSBIWVBFUlRSQU5TUE9SVF9JTlREICAgICAweDdiCQkvKiBJTlREIyAqLwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHRpdGFuX2hhbmRsZV9pbnQodm9pZCk7CiBleHRlcm4gdm9pZCBqYWd1YXJfbWFpbGJveF9pcnEoc3RydWN0IHB0X3JlZ3MgKik7CiAKIC8qCkBAIC0xMjUsNiArMTI2LDM1IEBACiAKIH0KIAorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBjYXVzZSA9IHJlYWRfYzBfY2F1c2UoKTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gcmVhZF9jMF9zdGF0dXMoKTsKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IGNhdXNlICYgc3RhdHVzOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykgeworCQlkb19JUlEoNywgcmVncyk7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpIHsKKyNpZmRlZiBDT05GSUdfSFlQRVJUUkFOU1BPUlQKKwkJbGxfaHRfc21wX2lycV9oYW5kbGVyKDIsIHJlZ3MpOworI2Vsc2UKKwkJZG9fSVJRKDIsIHJlZ3MpOworI2VuZGlmCisJfSBlbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDMpIHsKKwkJZG9fSVJRKDMsIHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KSB7CisJCWRvX0lSUSg0LCByZWdzKTsKKwl9IGVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkgeworI2lmZGVmIENPTkZJR19TTVAKKwkJdGl0YW5fbWFpbGJveF9pcnEocmVncyk7CisjZWxzZQorCQlkb19JUlEoNSwgcmVncyk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikgeworCQlkb19JUlEoNCwgcmVncyk7CisJfQorfQorCiAjaWZkZWYgQ09ORklHX0tHREIKIGV4dGVybiB2b2lkIGluaXRfc2Vjb25kX3BvcnQodm9pZCk7CiAjZW5kaWYKQEAgLTEzNiw3ICsxNjYsNiBAQAogewogCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0pOwogCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgdGl0YW5faGFuZGxlX2ludCk7CiAJbWlwc19jcHVfaXJxX2luaXQoMCk7CiAJcm03a19jcHVfaXJxX2luaXQoOCk7CiAJcm05a19jcHVfaXJxX2luaXQoMTIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUgYi9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQppbmRleCA2YThlOGJjLi43MzBmNDU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQpAQCAtMiw2ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIFFlbXUgc3BlY2lmaWMga2VybmVsIGludGVyZmFjZSByb3V0aW5lcyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkJCT0gcS1maXJtd2FyZS5vIHEtaW50Lm8gcS1pcnEubyBxLW1lbS5vIHEtc2V0dXAubworb2JqLXkJCT0gcS1maXJtd2FyZS5vIHEtaXJxLm8gcS1tZW0ubyBxLXNldHVwLm8KIAogb2JqLSQoQ09ORklHX1NNUCkgKz0gcS1zbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3FlbXUvcS1pbnQuUyBiL2FyY2gvbWlwcy9xZW11L3EtaW50LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlM2RmZTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3FlbXUvcS1pbnQuUworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBRZW11IGludGVycnVwdCBoYW5kbGVyIGNvZGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IFJhbGYgQmFlY2hsZQotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLmFsaWduCTUKLQlORVNURUQocWVtdV9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCW1vdmUJYTAsIHNwCi0JUFRSX0xBCXJhLCByZXRfZnJvbV9pcnEKLQlqCWRvX3FlbXVfaW50Ci0JRU5EKHFlbXVfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9xZW11L3EtaXJxLmMgYi9hcmNoL21pcHMvcWVtdS9xLWlycS5jCmluZGV4IDJjNGUwNzAuLjMzNTIzNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9xZW11L3EtaXJxLmMKKysrIGIvYXJjaC9taXBzL3FlbXUvcS1pcnEuYwpAQCAtOSw3ICs5LDcgQEAKIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxZW11X2hhbmRsZV9pbnQodm9pZCk7CiAKLWFzbWxpbmthZ2Ugdm9pZCBkb19xZW11X2ludChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCk7CiAKQEAgLTI5LDcgKzI5LDYgQEAKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCXNldF9leGNlcHRfdmVjdG9yKDAsIHFlbXVfaGFuZGxlX2ludCk7CiAJbWlwc19ocHRfZnJlcXVlbmN5ID0gUUVNVV9DMF9DT1VOVEVSX0NMT0NLOwkJLyogMTAwTUh6ICovCiAKIAlpbml0X2k4MjU5X2lycXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9NYWtlZmlsZQppbmRleCBlYjA4MjBmLi42YWE0YzBjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkJKz0gaXAyMi1tYy5vIGlwMjItaHBjLm8gaXAyMi1pbnQubyBpcDIyLWlycS5vIGlwMjItYmVyci5vIFwKK29iai15CSs9IGlwMjItbWMubyBpcDIyLWhwYy5vIGlwMjItaW50Lm8gaXAyMi1iZXJyLm8gXAogCSAgIGlwMjItdGltZS5vIGlwMjItbnZyYW0ubyBpcDIyLXJlc2V0Lm8gaXAyMi1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19FSVNBKQkrPSBpcDIyLWVpc2EubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYwppbmRleCBkMTZmYjQzLi5mYzZhN2UyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYwpAQCAtMzcsNyArMzcsNiBAQAogc3RhdGljIGNoYXIgbGMybXNrX3RvX2lycW5yWzI1Nl07CiBzdGF0aWMgY2hhciBsYzNtc2tfdG9faXJxbnJbMjU2XTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBpbmR5SVJRKHZvaWQpOwogZXh0ZXJuIGludCBpcDIyX2Vpc2FfaW5pdCh2b2lkKTsKIAogc3RhdGljIHZvaWQgZW5hYmxlX2xvY2FsMF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTIyNCw3ICsyMjMsNyBAQAogCS5lbmQJCT0gZW5kX2xvY2FsM19pcnEsCiB9OwogCi12b2lkIGluZHlfbG9jYWwwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgaW5keV9sb2NhbDBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTggbWFzayA9IHNnaW50LT5pc3RhdDAgJiBzZ2ludC0+aW1hc2swOwogCXU4IG1hc2syOwpAQCAtMjQyLDcgKzI0MSw3IEBACiAJcmV0dXJuOwogfQogCi12b2lkIGluZHlfbG9jYWwxX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgaW5keV9sb2NhbDFfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTggbWFzayA9IHNnaW50LT5pc3RhdDEgJiBzZ2ludC0+aW1hc2sxOwogCXU4IG1hc2syOwpAQCAtMjYyLDcgKzI2MSw3IEBACiAKIGV4dGVybiB2b2lkIGlwMjJfYmVfaW50ZXJydXB0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotdm9pZCBpbmR5X2J1c2Vycm9yX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGluZHlfYnVzZXJyb3JfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnEgPSBTR0lfQlVTRVJSX0lSUTsKIApAQCAtMzA3LDYgKzMwNiw1NiBAQAogI2RlZmluZSBTR0lfSU5URVJSVVBUUwlTR0lOVF9MT0NBTDMKICNlbmRpZgogCitleHRlcm4gdm9pZCBpbmR5X3I0a190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgaW5keV84MjU0dGltZXJfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyoKKyAqIElSUXMgb24gdGhlIElORFkgbG9vayBiYXNpY2FsbHkgKGJhcnJpbmcgc29mdHdhcmUgSVJRcyB3aGljaCB3ZSBkb24ndCB1c2UKKyAqIGF0IGFsbCkgbGlrZToKKyAqCisgKglNSVBTIElSUQlTb3VyY2UKKyAqICAgICAgLS0tLS0tLS0gICAgICAgIC0tLS0tLQorICogICAgICAgICAgICAgMAlTb2Z0d2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDEgICAgICAgIFNvZnR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgMiAgICAgICAgTG9jYWwgSVJRIGxldmVsIHplcm8KKyAqICAgICAgICAgICAgIDMgICAgICAgIExvY2FsIElSUSBsZXZlbCBvbmUKKyAqICAgICAgICAgICAgIDQgICAgICAgIDgyNTQgVGltZXIgemVybworICogICAgICAgICAgICAgNSAgICAgICAgODI1NCBUaW1lciBvbmUKKyAqICAgICAgICAgICAgIDYgICAgICAgIEJ1cyBFcnJvcgorICogICAgICAgICAgICAgNyAgICAgICAgUjRrIHRpbWVyICh3aGF0IHdlIHVzZSkKKyAqCisgKiBXZSBoYW5kbGUgdGhlIElSUSBhY2NvcmRpbmcgdG8gX291cl8gcHJpb3JpdHkgd2hpY2ggaXM6CisgKgorICogSGlnaGVzdCAtLS0tICAgICBSNGsgVGltZXIKKyAqICAgICAgICAgICAgICAgICAgTG9jYWwgSVJRIHplcm8KKyAqICAgICAgICAgICAgICAgICAgTG9jYWwgSVJRIG9uZQorICogICAgICAgICAgICAgICAgICBCdXMgRXJyb3IKKyAqICAgICAgICAgICAgICAgICAgODI1NCBUaW1lciB6ZXJvCisgKiBMb3dlc3QgIC0tLS0gICAgIDgyNTQgVGltZXIgb25lCisgKgorICogdGhlbiB3ZSBqdXN0IHJldHVybiwgaWYgbXVsdGlwbGUgSVJRcyBhcmUgcGVuZGluZyB0aGVuIHdlIHdpbGwganVzdCB0YWtlCisgKiBhbm90aGVyIGV4Y2VwdGlvbiwgYmlnIGRlYWwuCisgKi8KKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpOworCisJLyoKKwkgKiBGaXJzdCB3ZSBjaGVjayBmb3IgcjRrIGNvdW50ZXIvdGltZXIgSVJRLgorCSAqLworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJaW5keV9yNGtfdGltZXJfaW50ZXJydXB0KHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKQorCQlpbmR5X2xvY2FsMF9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykKKwkJaW5keV9sb2NhbDFfaXJxZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpCisJCWluZHlfYnVzZXJyb3JfaXJxKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAoQ0FVU0VGX0lQNCB8IENBVVNFRl9JUDUpKQorCQlpbmR5XzgyNTR0aW1lcl9pcnEocmVncyk7Cit9CisKIGV4dGVybiB2b2lkIG1pcHNfY3B1X2lycV9pbml0KHVuc2lnbmVkIGludCBpcnFfYmFzZSk7CiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKQEAgLTM2OSw4ICs0MTgsNiBAQAogCXNnaW50LT5jbWVpbWFzazAgPSAwOwogCXNnaW50LT5jbWVpbWFzazEgPSAwOwogCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgaW5keUlSUSk7Ci0KIAkvKiBpbml0IENQVSBpcnFzICovCiAJbWlwc19jcHVfaXJxX2luaXQoU0dJTlRfQ1BVKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaXJxLlMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pcnEuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNjYmQ5ZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pcnEuUworKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogaXAyMi1pcnEuUzogSW50ZXJydXB0IGV4Y2VwdGlvbiBkaXNwYXRjaCBjb2RlIGZvciBGdWxsSG91c2UgYW5kCi0gKiAgICAgICAgICAgICBHdWluZXNzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKLSAqLwotCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKiBBIGxvdCBvZiBjb21wbGljYXRpb24gaGVyZSBpcyB0YWtlbiBhd2F5IGJlY2F1c2U6Ci0gKgotICogMSkgV2UgaGFuZGxlIG9uZSBpbnRlcnJ1cHQgYW5kIHJldHVybiwgc2l0dGluZyBpbiBhIGxvb3AgYW5kIG1vdmluZyBhY3Jvc3MKLSAqICAgIGFsbCB0aGUgcGVuZGluZyBJUlEgYml0cyBpbiB0aGUgY2F1c2UgcmVnaXN0ZXIgaXMgX05PVF8gdGhlIGFuc3dlciwgdGhlCi0gKiAgICBjb21tb24gY2FzZSBpcyBvbmUgcGVuZGluZyBJUlEgc28gb3B0aW1pemUgaW4gdGhhdCBkaXJlY3Rpb24uCi0gKgotICogMikgV2UgbmVlZCBub3QgY2hlY2sgYWdhaW5zdCBiaXRzIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgSVJRIG1hc2ssIHRoYXQKLSAqICAgIHdvdWxkIG1ha2UgdGhpcyByb3V0aW5lIHNsb3cgYXMgaGVsbC4KLSAqCi0gKiAzKSBMaW51eCBvbmx5IHRoaW5rcyBpbiB0ZXJtcyBvZiBhbGwgSVJRcyBvbiBvciBhbGwgSVJRcyBvZmYsIG5vdGhpbmcgaW4KLSAqICAgIGJldHdlZW4gbGlrZSBCU0Qgc3BsKCkgYnJhaW4tZGFtYWdlLgotICoKLSAqIEZ1cnRoZXJtb3JlLCB0aGUgSVJRcyBvbiB0aGUgSU5EWSBsb29rIGJhc2ljYWxseSAoYmFycmluZyBzb2Z0d2FyZSBJUlFzCi0gKiB3aGljaCB3ZSBkb24ndCB1c2UgYXQgYWxsKSBsaWtlOgotICoKLSAqCU1JUFMgSVJRCVNvdXJjZQotICogICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tCi0gKiAgICAgICAgICAgICAwCVNvZnR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgMSAgICAgICAgU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAyICAgICAgICBMb2NhbCBJUlEgbGV2ZWwgemVybwotICogICAgICAgICAgICAgMyAgICAgICAgTG9jYWwgSVJRIGxldmVsIG9uZQotICogICAgICAgICAgICAgNCAgICAgICAgODI1NCBUaW1lciB6ZXJvCi0gKiAgICAgICAgICAgICA1ICAgICAgICA4MjU0IFRpbWVyIG9uZQotICogICAgICAgICAgICAgNiAgICAgICAgQnVzIEVycm9yCi0gKiAgICAgICAgICAgICA3ICAgICAgICBSNGsgdGltZXIgKHdoYXQgd2UgdXNlKQotICoKLSAqIFdlIGhhbmRsZSB0aGUgSVJRIGFjY29yZGluZyB0byBfb3VyXyBwcmlvcml0eSB3aGljaCBpczoKLSAqCi0gKiBIaWdoZXN0IC0tLS0gICAgIFI0ayBUaW1lcgotICogICAgICAgICAgICAgICAgICBMb2NhbCBJUlEgemVybwotICogICAgICAgICAgICAgICAgICBMb2NhbCBJUlEgb25lCi0gKiAgICAgICAgICAgICAgICAgIEJ1cyBFcnJvcgotICogICAgICAgICAgICAgICAgICA4MjU0IFRpbWVyIHplcm8KLSAqIExvd2VzdCAgLS0tLSAgICAgODI1NCBUaW1lciBvbmUKLSAqCi0gKiB0aGVuIHdlIGp1c3QgcmV0dXJuLCBpZiBtdWx0aXBsZSBJUlFzIGFyZSBwZW5kaW5nIHRoZW4gd2Ugd2lsbCBqdXN0IHRha2UKLSAqIGFub3RoZXIgZXhjZXB0aW9uLCBiaWcgZGVhbC4KLSAqLwotCi0JLnRleHQKLQkuc2V0CW5vcmVvcmRlcgotCS5zZXQJbm9hdAotCS5hbGlnbgk1Ci0JTkVTVEVEKGluZHlJUlEsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCi0JLnNldAlhdAotCW1mYzAJczAsIENQMF9DQVVTRQkJIyBnZXQgaXJxIG1hc2sKLQotCS8qIEZpcnN0IHdlIGNoZWNrIGZvciByNGsgY291bnRlci90aW1lciBJUlEuICovCi0JYW5kaQlhMCwgczAsIENBVVNFRl9JUDcKLQliZXEJYTAsIHplcm8sIDFmCi0JIGFuZGkJYTAsIHMwLCBDQVVTRUZfSVAyCSMgZGVsYXkgc2xvdCwgY2hlY2sgbG9jYWwgbGV2ZWwgemVybwotCi0JLyogV2hlZWUsIGEgdGltZXIgaW50ZXJydXB0LiAqLwotCWphbAlpbmR5X3I0a190aW1lcl9pbnRlcnJ1cHQKLQkgbW92ZQlhMCwgc3AJCQkjIGRlbGF5IHNsb3QKLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0KLTE6Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCSBhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQMwkjIGRlbGF5IHNsb3QsIGNoZWNrIGxvY2FsIGxldmVsIG9uZQotCi0JLyogV2hlZWUsIGxvY2FsIGxldmVsIHplcm8gaW50ZXJydXB0LiAqLwotCWphbAlpbmR5X2xvY2FsMF9pcnFkaXNwYXRjaAotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCSMgZGVsYXkgc2xvdAotCi0xOgotCWJlcQlhMCwgemVybywgMWYKLQkgYW5kaQlhMCwgczAsIENBVVNFRl9JUDYJIyBkZWxheSBzbG90LCBjaGVjayBidXMgZXJyb3IKLQotCS8qIFdoZWVlLCBsb2NhbCBsZXZlbCBvbmUgaW50ZXJydXB0LiAqLwotCWphbAlpbmR5X2xvY2FsMV9pcnFkaXNwYXRjaAotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLQotMToKLQliZXEJYTAsIHplcm8sIDFmCi0JIGFuZGkJYTAsIHMwLCAoQ0FVU0VGX0lQNCB8IENBVVNFRl9JUDUpCSMgZGVsYXkgc2xvdAotCi0JLyogV2hlZWUsIGFuIGFzeW5jaHJvbm91cyBidXMgZXJyb3IuLi4gKi8KLQlqYWwJaW5keV9idXNlcnJvcl9pcnEKLQkgbW92ZQlhMCwgc3AJCQkjIGRlbGF5IHNsb3QKLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0KLTE6Ci0JLyogSGVyZSBieSBtaXN0YWtlPyBJdCBpcyBwb3NzaWJsZSwgdGhhdCBieSB0aGUgdGltZSB3ZSB0YWtlCi0JICogdGhlIGV4Y2VwdGlvbiB0aGUgSVJRIHBpbiBnb2VzIGxvdywgc28ganVzdCBsZWF2ZSBpZiB0aGlzCi0JICogaXMgdGhlIGNhc2UuCi0JICovCi0JYmVxCWEwLCB6ZXJvLCAxZgotCSBub3AJCQkgIAkjIGRlbGF5IHNsb3QKLQotCS8qIE11c3QgYmUgb25lIG9mIHRoZSA4MjU0IHRpbWVycy4uLiAqLwotCWphbAlpbmR5XzgyNTR0aW1lcl9pcnEKLQkgbW92ZQlhMCwgc3AJCQkjIGRlbGF5IHNsb3QKLTE6Ci0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCSMgZGVsYXkgc2xvdAotCUVORChpbmR5SVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L01ha2VmaWxlIGIvYXJjaC9taXBzL3NnaS1pcDI3L01ha2VmaWxlCmluZGV4IDRiYTM0MDcuLjY4NmJhMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgSVAyNyBzcGVjaWZpYyBrZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzIHVuZGVyIExpbnV4LgogIwogCi1vYmoteQk6PSBpcDI3LWJlcnIubyBpcDI3LWNvbnNvbGUubyBpcDI3LWlycS5vIGlwMjctaW5pdC5vIGlwMjctaXJxLWdsdWUubyBcCitvYmoteQk6PSBpcDI3LWJlcnIubyBpcDI3LWNvbnNvbGUubyBpcDI3LWlycS5vIGlwMjctaW5pdC5vIFwKIAkgICBpcDI3LWtsY29uZmlnLm8gaXAyNy1rbG51bWEubyBpcDI3LW1lbW9yeS5vIGlwMjctbm1pLm8gaXAyNy1yZXNldC5vIFwKIAkgICBpcDI3LXRpbWVyLm8gaXAyNy1odWJpby5vIGlwMjcteHRhbGsubwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvVE9ETyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9UT0RPCmluZGV4IDMyMTA2MTMuLjE5ZjE1MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9UT0RPCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9UT0RPCkBAIC05LDEwICs5LDYgQEAKIGluIGlyaXg/CiA2LiBJbnZlc3RpZ2F0ZSB3aHkgdGhpbmdzIGRvIG5vdCB3b3JrIHdpdGhvdXQgdGhlIHNldHVwX3Rlc3QoKSBjYWxsCiBiZWluZyBpbnZva2VkIG9uIGFsbCBub2RlcyBpbiBpcDI3LW1lbW9yeS5jLgotNy4gVG9vIG1hbnkgQ0xJcyBpbiB0aGUgbG9jb3JlIGhhbmRsZXJzIDoKLUZvciB0aGUgbG93IGxldmVsIGhhbmRsZXJzIHNldCB1cCBieSBzZXRfZXhjZXB0X3ZlY3RvcigpLAotX190bGJfcmVmaWxsX2RlYnVnX3RyYW1wLCBfX3h0bGJfcmVmaWxsX2RlYnVnX3RyYW1wIGFuZCBjYWNoZWVycm9yLAotaW52ZXN0aWdhdGUgd2hldGhlciB0aGUgY29kZSBzaG91bGQgZG8gQ0xJLCBTVEkgb3IgS01PREUuCiA4LiBUb28gbWFueSBkb19wYWdlX2ZhdWx0cyBpbnZva2VkIC0gaW52ZXN0aWdhdGUuCiA5LiBzdGFydF90aHJlYWQgbXVzdCB0dXJuIG9mZiBVWDY0IC4uLiBhbmQgZGVmaW5lIHRsYl9yZWZpbGxfZGVidWcuCiAxMC4gTmVlZCBhIGJhZCBwbWQgdGFibGUsIGJhZCBwdGUgdGFibGUuIF9fYmFkX3BtZF90YWJsZS9fX2JhZF9wYWdldGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS1nbHVlLlMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEtZ2x1ZS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzA0ZGY3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS1nbHVlLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCS50ZXh0Ci0JLmFsaWduCTUKLU5FU1RFRChpcDI3X2lycSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQotCW1mYzAJczAsIENQMF9DQVVTRQotCW1mYzAJdDAsIENQMF9TVEFUVVMKLQlhbmQJczAsIHQwCi0JbW92ZQlhMCwgc3AKLQlQVFJfTEEJcmEsIHJldF9mcm9tX2lycQotCi0JLyogRmlyc3QgY2hlY2sgZm9yIFJUIGludGVycnVwdC4gICovCi0JYW5kaQl0MCwgczAsIENBVVNFRl9JUDQKLQlibmV6CXQwLCBpcDQKLQlhbmRpCXQwLCBzMCwgQ0FVU0VGX0lQMgotCWJuZXoJdDAsIGlwMgotCWFuZGkJdDAsIHMwLCBDQVVTRUZfSVAzCi0JYm5legl0MCwgaXAzCi0JYW5kaQl0MCwgczAsIENBVVNFRl9JUDUKLQlibmV6CXQwLCBpcDUKLQlhbmRpCXQwLCBzMCwgQ0FVU0VGX0lQNgotCWJuZXoJdDAsIGlwNgotCWoJcmEKLQotaXAyOglqCWlwMjdfZG9faXJxX21hc2swCSMgUElfSU5UX1BFTkRfMCBvciBDQ19QRU5EX3tBfEJ9Ci1pcDM6CWoJaXAyN19kb19pcnFfbWFzazEJIyBQSV9JTlRfUEVORF8xCi1pcDQ6CWoJaXAyN19ydF90aW1lcl9pbnRlcnJ1cHQKLWlwNToJaglpcDI3X3Byb2ZfdGltZXIKLWlwNjoJaglpcDI3X2h1Yl9lcnJvcgotCi0JRU5EKGlwMjdfaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYwppbmRleCAyODU0YWM0Li4yZTY0M2QyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAgKiBLYW5vaiAwNS4xMy4wMAogICovCiAKLXZvaWQgaXAyN19kb19pcnFfbWFzazAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcDI3X2RvX2lycV9tYXNrMChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaXJxLCBzd2xldmVsOwogCWh1YnJlZ190IHBlbmQwLCBtYXNrMDsKQEAgLTE3MSw3ICsxNzEsNyBAQAogCUxPQ0FMX0hVQl9MKFBJX0lOVF9QRU5EMCk7CiB9CiAKLXZvaWQgaXAyN19kb19pcnFfbWFzazEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcDI3X2RvX2lycV9tYXNrMShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaXJxLCBzd2xldmVsOwogCWh1YnJlZ190IHBlbmQxLCBtYXNrMTsKQEAgLTE5NiwxMiArMTk2LDEyIEBACiAJTE9DQUxfSFVCX0woUElfSU5UX1BFTkQxKTsKIH0KIAotdm9pZCBpcDI3X3Byb2ZfdGltZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcDI3X3Byb2ZfdGltZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcGFuaWMoIkNQVSAlZCBnb3QgYSBwcm9maWxpbmcgaW50ZXJydXB0Iiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAotdm9pZCBpcDI3X2h1Yl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMjdfaHViX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXBhbmljKCJDUFUgJWQgZ290IGEgaHViIGVycm9yIGludGVycnVwdCIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CkBAIC00MjEsOSArNDIxLDI2IEBACiAJcmV0dXJuIGlycTsKIH0KIAorZXh0ZXJuIHZvaWQgaXAyN19ydF90aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJaXAyN19ydF90aW1lcl9pbnRlcnJ1cHQocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpCS8qIFBJX0lOVF9QRU5EXzAgb3IgQ0NfUEVORF97QXxCfSAqLworCQlpcDI3X2RvX2lycV9tYXNrMChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykJLyogUElfSU5UX1BFTkRfMSAqLworCQlpcDI3X2RvX2lycV9tYXNrMShyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNSkKKwkJaXAyN19wcm9mX3RpbWVyKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQorCQlpcDI3X2h1Yl9lcnJvcihyZWdzKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCXNldF9leGNlcHRfdmVjdG9yKDAsIGlwMjdfaXJxKTsKIH0KIAogdm9pZCBpbnN0YWxsX2lwaSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKaW5kZXggY2RkZjFjZS4uMzZiNjYyZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkgICAgeHRpbWUudHZfc2VjID4gbGFzdF9ydGNfdXBkYXRlICsgNjYwICYmCiAJICAgICh4dGltZS50dl9uc2VjIC8gMTAwMCkgPj0gNTAwMDAwIC0gKCh1bnNpZ25lZCkgVElDS19TSVpFKSAvIDIgJiYKIAkgICAgKHh0aW1lLnR2X25zZWMgLyAxMDAwKSA8PSA1MDAwMDAgKyAoKHVuc2lnbmVkKSBUSUNLX1NJWkUpIC8gMikgewotCQlpZiAocnRjX3NldF90aW1lKHh0aW1lLnR2X3NlYykgPT0gMCkgeworCQlpZiAocnRjX21pcHNfc2V0X3RpbWUoeHRpbWUudHZfc2VjKSA9PSAwKSB7CiAJCQlsYXN0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWM7CiAJCX0gZWxzZSB7CiAJCQlsYXN0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWMgLSA2MDA7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUKaW5kZXggNDcwODk4Zi4uNTMwYmY4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CSs9IGlwMzItYmVyci5vIGlwMzItaXJxLm8gaXAzMi1pcnEtZ2x1ZS5vIGlwMzItc2V0dXAubyBpcDMyLXJlc2V0Lm8gXAorb2JqLXkJKz0gaXAzMi1iZXJyLm8gaXAzMi1pcnEubyBpcDMyLXNldHVwLm8gaXAzMi1yZXNldC5vIFwKIAkgICBjcmltZS5vIGlwMzItbWVtb3J5Lm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLWdsdWUuUyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS1nbHVlLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDkyNGUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLWdsdWUuUworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBMb3cgbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBTR0kgTzIgYWthIElQMzIgYWthIE1vb3NlaGVhZAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBIYXJhbGQgS29lcmZnZW4KLSAqIENvcHlyaWdodCAoQykgMjAwMSBLZWl0aCBNIFdlc29sb3dza2kKLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0KLQkJLnRleHQKLQkJLnNldCAgICBub3Jlb3JkZXIKLQkJLnNldCAgICBub2F0Ci0JCS5hbGlnbiAgNQotCQlORVNURUQoaXAzMl9oYW5kbGVfaW50LCBQVF9TSVpFLCByYSkKLQkJLnNldCAgICBub2F0Ci0JCVNBVkVfQUxMCi0JCUNMSQkJCSMgVEVTVDogaW50ZXJydXB0cyBzaG91bGQgYmUgb2ZmCi0JCS5zZXQgICAgYXQKLQkJLnNldCAgICBub3Jlb3JkZXIKLQotCQltZmMwCXMwLENQMF9DQVVTRQotCi0JCWFuZGkJdDEsIHMwLCBJRV9JUlEwCi0JCWJuZXoJdDEsIGhhbmRsZV9pcnEwCi0JCSBhbmRpCXQxLCBzMCwgSUVfSVJRMQotCQlibmV6CXQxLCBoYW5kbGVfaXJxMQotCQkgYW5kaQl0MSwgczAsIElFX0lSUTIKLQkJYm5legl0MSwgaGFuZGxlX2lycTIKLQkJIGFuZGkJdDEsIHMwLCBJRV9JUlEzCi0JCWJuZXoJdDEsIGhhbmRsZV9pcnEzCi0JCSBhbmRpCXQxLCBzMCwgSUVfSVJRNAotCQlibmV6CXQxLCBoYW5kbGVfaXJxNAotCQkgYW5kaQl0MSwgczAsIElFX0lSUTUKLQkJYm5legl0MSwgaGFuZGxlX2lycTUKLQkJIG5vcAotCi0JCS8qIEVpdGhlciBzb21lb25lIGhhcyB0cmlnZ2VyZWQgdGhlICJzb2Z0d2FyZSBpbnRlcnJ1cHRzIgotCQkgKiBvciB3ZSBsb3N0IGFuIGludGVycnVwdCBzb21laG93LiAgSWdub3JlIGl0LgotCQkgKi8KLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxMDoKLQkJamFsCWlwMzJfaXJxMAotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxMToKLQkJamFsCWlwMzJfaXJxMQotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxMjoKLQkJamFsCWlwMzJfaXJxMgotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxMzoKLQkJamFsCWlwMzJfaXJxMwotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxNDoKLQkJamFsCWlwMzJfaXJxNAotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi1oYW5kbGVfaXJxNToKLQkJamFsCWlwMzJfaXJxNQotCQltb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLQkJRU5EKGlwMzJfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKaW5kZXggMmViMjJkNjkuLjhiYTA4MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCkBAIC0zMSwxMiArMzEsMTIgQEAKIC8qIGlzc3VlIGEgUElPIHJlYWQgdG8gbWFrZSBzdXJlIG5vIFBJTyB3cml0ZXMgYXJlIHBlbmRpbmcgKi8KIHN0YXRpYyB2b2lkIGlubGluZSBmbHVzaF9jcmltZV9idXModm9pZCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGp1bmsgPSBjcmltZS0+Y29udHJvbDsKKwljcmltZS0+Y29udHJvbDsKIH0KIAogc3RhdGljIHZvaWQgaW5saW5lIGZsdXNoX21hY2VfYnVzKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBqdW5rID0gbWFjZS0+cGVyaWYuY3RybC5taXNjOworCW1hY2UtPnBlcmlmLmN0cmwubWlzYzsKIH0KIAogI3VuZGVmIERFQlVHX0lSUQpAQCAtMTMwLDggKzEzMCw2IEBACiBzdHJ1Y3QgaXJxYWN0aW9uIGNwdWVycl9pcnEgPSB7IGNyaW1lX2NwdWVycl9pbnRyLCBTQV9JTlRFUlJVUFQsCiAJCQlDUFVfTUFTS19OT05FLCAiQ1JJTUUgQ1BVIGVycm9yIiwgTlVMTCwgTlVMTCB9OwogCi1leHRlcm4gdm9pZCBpcDMyX2hhbmRsZV9pbnQodm9pZCk7Ci0KIC8qCiAgKiBGb3IgaW50ZXJydXB0cyB3aXJlZCBmcm9tIGEgc2luZ2xlIGRldmljZSB0byB0aGUgQ1BVLiAgT25seSB0aGUgY2xvY2sKICAqIHVzZXMgdGhpcyBpdCBzZWVtcywgd2hpY2ggaXMgSVJRIDAgYW5kIElQNy4KQEAgLTUwMyw0OCArNTAxLDY3IEBACiAKIC8qIENSSU1FIDEuMSBhcHBlYXJzIHRvIGRlbGl2ZXIgYWxsIGludGVycnVwdHMgdG8gdGhpcyBvbmUgcGluLiAqLwogLyogY2hhbmdlIHRoaXMgdG8gbG9vcCBvdmVyIGFsbCBlZGdlLXRyaWdnZXJlZCBpcnFzLCBleGNlcHRpb24gbWFza2VkIG91dCBvbmVzICovCi12b2lkIGlwMzJfaXJxMChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxMChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1aW50NjRfdCBjcmltZV9pbnQ7CiAJaW50IGlycSA9IDA7CiAKIAljcmltZV9pbnQgPSBjcmltZS0+aXN0YXQgJiBjcmltZV9tYXNrOwotCWlycSA9IGZmcyhjcmltZV9pbnQpOwotCWNyaW1lX2ludCA9IDEgPDwgKGlycSAtIDEpOworCWlycSA9IF9fZmZzKGNyaW1lX2ludCk7CisJY3JpbWVfaW50ID0gMSA8PCBpcnE7CiAKIAlpZiAoY3JpbWVfaW50ICYgQ1JJTUVfTUFDRUlTQV9JTlRfTUFTSykgewogCQl1bnNpZ25lZCBsb25nIG1hY2VfaW50ID0gbWFjZS0+cGVyaWYuY3RybC5pc3RhdDsKLQkJaXJxID0gZmZzKG1hY2VfaW50ICYgbWFjZWlzYV9tYXNrKSArIDMyOworCQlpcnEgPSBfX2ZmcyhtYWNlX2ludCAmIG1hY2Vpc2FfbWFzaykgKyAzMjsKIAl9CisJaXJxKys7CiAJREJHKCIqaXJxICV1KlxuIiwgaXJxKTsKIAlkb19JUlEoaXJxLCByZWdzKTsKIH0KIAotdm9pZCBpcDMyX2lycTEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcDMyX2lycTEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaXAzMl91bmtub3duX2ludGVycnVwdChyZWdzKTsKIH0KIAotdm9pZCBpcDMyX2lycTIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcDMyX2lycTIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaXAzMl91bmtub3duX2ludGVycnVwdChyZWdzKTsKIH0KIAotdm9pZCBpcDMyX2lycTMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcDMyX2lycTMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaXAzMl91bmtub3duX2ludGVycnVwdChyZWdzKTsKIH0KIAotdm9pZCBpcDMyX2lycTQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcDMyX2lycTQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaXAzMl91bmtub3duX2ludGVycnVwdChyZWdzKTsKIH0KIAotdm9pZCBpcDMyX2lycTUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcDMyX2lycTUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJbGxfdGltZXJfaW50ZXJydXB0KElQMzJfUjRLX1RJTUVSX0lSUSwgcmVncyk7CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKTsKKworCWlmIChsaWtlbHkocGVuZGluZyAmIElFX0lSUTApKQorCQlpcDMyX2lycTAocmVncyk7CisJZWxzZSBpZiAodW5saWtlbHkocGVuZGluZyAmIElFX0lSUTEpKQorCQlpcDMyX2lycTEocmVncyk7CisJZWxzZSBpZiAodW5saWtlbHkocGVuZGluZyAmIElFX0lSUTIpKQorCQlpcDMyX2lycTIocmVncyk7CisJZWxzZSBpZiAodW5saWtlbHkocGVuZGluZyAmIElFX0lSUTMpKQorCQlpcDMyX2lycTMocmVncyk7CisJZWxzZSBpZiAodW5saWtlbHkocGVuZGluZyAmIElFX0lSUTQpKQorCQlpcDMyX2lycTQocmVncyk7CisJZWxzZSBpZiAobGlrZWx5KHBlbmRpbmcgJiBJRV9JUlE1KSkKKwkJaXAzMl9pcnE1KHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKQEAgLTU1Niw3ICs1NzMsNiBAQAogCWNyaW1lLT5zb2Z0X2ludCA9IDA7CiAJbWFjZS0+cGVyaWYuY3RybC5pc3RhdCA9IDA7CiAJbWFjZS0+cGVyaWYuY3RybC5pbWFzayA9IDA7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgaXAzMl9oYW5kbGVfaW50KTsKIAogCWZvciAoaXJxID0gMDsgaXJxIDw9IElQMzJfSVJRX01BWDsgaXJxKyspIHsKIAkJaHdfaXJxX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvTWFrZWZpbGUKaW5kZXggNTM4ZDVhNS4uN2IzNmZmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai15IDo9IHNldHVwLm8gaXJxLm8gaXJxX2hhbmRsZXIubyB0aW1lLm8KK29iai15IDo9IHNldHVwLm8gaXJxLm8gdGltZS5vCiAKIG9iai0kKENPTkZJR19TTVApCQkJKz0gc21wLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCmluZGV4IDljZjdkNzEuLmU2MTc2MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKQEAgLTE4Nyw5ICsxODcsNiBAQAogI2VuZGlmCiAKIAotLyogRGVmaW5lZCBpbiBhcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxX2hhbmRsZXIuUyAqLwotZXh0ZXJuIHZvaWQgYmNtMTQ4MF9pcnFfaGFuZGxlcih2b2lkKTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfYmNtMTQ4MF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTQyMiw3ICs0MTksNiBAQAogI2VuZGlmCiAJLyogRW5hYmxlIG5lY2Vzc2FyeSBJUHMsIGRpc2FibGUgdGhlIHJlc3QgKi8KIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgaW1hc2spOwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGJjbTE0ODBfaXJxX2hhbmRsZXIpOwogCiAjaWZkZWYgQ09ORklHX0tHREIKIAlpZiAoa2dkYl9mbGFnKSB7CkBAIC00NzMsMyArNDY5LDc2IEBACiB9CiAKICNlbmRpZiAJLyogQ09ORklHX0tHREIgKi8KKworc3RhdGljIGlubGluZSBpbnQgZGNseih1bnNpZ25lZCBsb25nIGxvbmcgeCkKK3sKKwlpbnQgbHo7CisKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJCVxuIgorCSIJLnNldAltaXBzNjQJCQkJCQlcbiIKKwkiCWRjbHoJJTAsICUxCQkJCQkJXG4iCisJIgkuc2V0CXBvcAkJCQkJCVxuIgorCTogIj1yIiAobHopCisJOiAiciIgKHgpKTsKKworCXJldHVybiBsejsKK30KKworZXh0ZXJuIHZvaWQgYmNtMTQ4MF90aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgYmNtMTQ4MF9tYWlsYm94X2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBiY20xNDgwX2tnZGJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nOworCisjaWZkZWYgQ09ORklHX1NJQllURV9CQ00xNDgwX1BST0YKKwkvKiBTZXQgY29tcGFyZSB0byBjb3VudCB0byBzaWxlbmNlIGNvdW50L2NvbXBhcmUgdGltZXIgaW50ZXJydXB0cyAqLworCXdyaXRlX2MwX2NvbXBhcmUocmVhZF9jMF9jb3VudCgpKTsKKyNlbmRpZgorCisJcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKTsKKworI2lmZGVmIENPTkZJR19TSUJZVEVfQkNNMTQ4MF9QUk9GCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KQkvKiBDcHUgcGVyZm9ybWFuY2UgY291bnRlciBpbnRlcnJ1cHQgKi8KKwkJc2Jwcm9mX2NwdV9pbnRyKGV4Y2VwdGlvbl9lcGMocmVncykpOworI2VuZGlmCisKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDQpCisJCWJjbTE0ODBfdGltZXJfaW50ZXJydXB0KHJlZ3MpOworCisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykKKwkJYmNtMTQ4MF9tYWlsYm94X2ludGVycnVwdChyZWdzKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tHREIKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpCisJCWJjbTE0ODBfa2dkYl9pbnRlcnJ1cHQocmVncyk7CQkvKiBLR0RCICh1YXJ0IDEpICovCisjZW5kaWYKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgbWFza19oLCBtYXNrX2w7CisJCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCQkvKgorCQkgKiBEZWZhdWx0Li4ud2UndmUgaGl0IGFuIElQWzJdIGludGVycnVwdCwgd2hpY2ggbWVhbnMgd2UndmUKKwkJICogZ290IHRvIGNoZWNrIHRoZSAxNDgwIGludGVycnVwdCByZWdpc3RlcnMgdG8gZmlndXJlIG91dCB3aGF0CisJCSAqIHRvIGRvLiAgTmVlZCB0byBkZXRlY3Qgd2hpY2ggQ1BVIHdlJ3JlIG9uLCBub3cgdGhhdAorCQkgKiBzbXBfYWZmaW5pdHkgaXMgc3VwcG9ydGVkLgorCQkgKi8KKwkJYmFzZSA9IEFfQkNNMTQ4MF9JTVJfTUFQUEVSKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCW1hc2tfaCA9IF9fcmF3X3JlYWRxKAorCQkJSU9BRERSKGJhc2UgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRV9IKSk7CisJCW1hc2tfbCA9IF9fcmF3X3JlYWRxKAorCQkJSU9BRERSKGJhc2UgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRV9MKSk7CisKKwkJaWYgKCFtYXNrX2gpIHsKKwkJCWlmIChtYXNrX2ggXiAxKQorCQkJCWRvX0lSUSg2MyAtIGRjbHoobWFza19oKSwgcmVncyk7CisJCQllbHNlCisJCQkJZG9fSVJRKDEyNyAtIGRjbHoobWFza19sKSwgcmVncyk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxX2hhbmRsZXIuUyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnFfaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDhkYjg4Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnFfaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyLDIwMDMsMjAwNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qCi0gKiBiY20xNDgwX2lycV9oYW5kbGVyKCkgaXMgdGhlIHJvdXRpbmUgdGhhdCBpcyBhY3R1YWxseSBjYWxsZWQgd2hlbiBhbgotICogaW50ZXJydXB0IG9jY3Vycy4gIEl0IGlzIGluc3RhbGxlZCBhcyB0aGUgZXhjZXB0aW9uIHZlY3RvciBoYW5kbGVyIGluCi0gKiBpbml0X0lSUSgpIGluIGFyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwotICoKLSAqIEluIHRoZSBoYW5kbGUgd2UgZmlndXJlIG91dCB3aGljaCBpbnRlcnJ1cHRzIG5lZWQgaGFuZGxpbmcsIGFuZCB1c2UgdGhhdAotICogdG8gY2FsbCB0aGUgZGlzcGF0Y2hlciwgd2hpY2ggd2lsbCB0YWtlIGNhcmUgb2YgYWN0dWFsbHkgY2FsbGluZwotICogcmVnaXN0ZXJlZCBoYW5kbGVycwotICoKLSAqIE5vdGUgdGhhdCB3ZSB0YWtlIGNhcmUgb2YgYWxsIHJhaXNlZCBpbnRlcnJ1cHRzIGluIG9uZSBnbyBhdCB0aGUgaGFuZGxlci4KLSAqIFRoaXMgaXMgbW9yZSBCU0Rpc2ggdGhhbiB0aGUgSW5keSBjb2RlLCBhbmQgYWxzbywgSU1ITywgbW9yZSBzYW5lLgotICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX2RlZnMuaD4KLSNpbmNsdWRlIDxhc20vc2lieXRlL2JjbTE0ODBfcmVncy5oPgotI2luY2x1ZGUgPGFzbS9zaWJ5dGUvYmNtMTQ4MF9pbnQuaD4KLQotLyoKLSAqIFdoYXQgYSBwYWluLiBXZSBoYXZlIHRvIGJlIHJlYWxseSBjYXJlZnVsIHNhdmluZyB0aGUgdXBwZXIgMzIgYml0cyBvZiBhbnkKLSAqIHJlZ2lzdGVyIGFjcm9zcyBmdW5jdGlvbiBjYWxscyBpZiB3ZSBkb24ndCB3YW50IHRoZW0gdHJhc2hlZC0tc2luY2Ugd2VyZQotICogcnVubmluZyBpbiAtbzMyLCB0aGUgY2FsbGluZyByb3V0aW5nIG5ldmVyIHNhdmVzIHRoZSBmdWxsIDY0IGJpdHMgb2YgYQotICogcmVnaXN0ZXIgYWNyb3NzIGEgZnVuY3Rpb24gY2FsbC4gIEJlaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UncmUKLSAqIGd1YXJhbnRlZWQgdGhhdCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBkdXJpbmcgdGhpcyBjb2RlIHNvIHdlIGRvbid0IGhhdmUKLSAqIHRvIHdvcnJ5IGFib3V0IHJhbmRvbSBpbnRlcnJ1cHRzIGJsYXN0aW5nIHRoZSBoaWdoIDMyIGJpdHMuCi0gKi8KLQotCS50ZXh0Ci0JLnNldAlwdXNoCi0JLnNldAlub3Jlb3JkZXIKLQkuc2V0CW5vYXQKLQkuc2V0CW1pcHM2NAotCSMuc2V0CW1pcHM0Ci0JLmFsaWduCTUKLQlORVNURUQoYmNtMTQ4MF9pcnFfaGFuZGxlciwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQotI2lmZGVmIENPTkZJR19TSUJZVEVfQkNNMTQ4MF9QUk9GCi0JLyogU2V0IGNvbXBhcmUgdG8gY291bnQgdG8gc2lsZW5jZSBjb3VudC9jb21wYXJlIHRpbWVyIGludGVycnVwdHMgKi8KLQltZmMwCXQxLCBDUDBfQ09VTlQKLQltdGMwCXQxLCBDUDBfQ09NUEFSRSAvKiBwYXVzZSB0byBjbGVhciBJUFs3XSBiaXQgb2YgY2F1c2UgPyAqLwotI2VuZGlmCi0JLyogUmVhZCBjYXVzZSAqLwotCW1mYzAJczAsIENQMF9DQVVTRQotCi0jaWZkZWYgQ09ORklHX1NJQllURV9CQ00xNDgwX1BST0YKLQkvKiBDcHUgcGVyZm9ybWFuY2UgY291bnRlciBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIElQWzddICovCi0JYW5kaQl0MSwgczAsIENBVVNFRl9JUDcKLQliZXF6CXQxLCAwZgotCSBzcmwJdDEsIHMwLCAoQ0FVU0VCX0JELTIpCS8qIFNoaWZ0IEJEIGJpdCB0byBiaXQgMiAqLwotCWFuZAl0MSwgdDEsIDB4NAkJLyogbWFzayB0byBnZXQganVzdCBCRCBiaXQgKi8KLSNpZmRlZiBDT05GSUdfTUlQUzY0Ci0JZG1mYzAJYTAsIENQMF9FUEMKLQlkYWRkdQlhMCwgYTAsIHQxCQkvKiBhMCA9IEVQQyArIChCRCA/IDQgOgkwKSAqLwotI2Vsc2UKLQltZmMwCWEwLCBDUDBfRVBDCi0JYWRkdQlhMCwgYTAsIHQxCQkvKiBhMCA9IEVQQyArIChCRCA/IDQgOgkwKSAqLwotI2VuZGlmCi0JamFsCXNicHJvZl9jcHVfaW50cgotCSBub3AKLQlqCXJldF9mcm9tX2lycQotCSBub3AKLTA6Ci0jZW5kaWYKLQotCS8qIFRpbWVyIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbNF0gKi8KLQlhbmRpCXQxLCBzMCwgQ0FVU0VGX0lQNAotCWJlcXoJdDEsIDFmCi0JIG5vcAotCWphbAliY20xNDgwX3RpbWVyX2ludGVycnVwdAotCSBtb3ZlCWEwLCBzcAkJCS8qIFBhc3MgdGhlIHJlZ2lzdGVycyBhbG9uZyAqLwotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkvKiBkZWxheSBzbG90ICAqLwotMToKLQotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBNYWlsYm94IGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbM10gKi8KLQlhbmRpCSB0MSwgczAsIENBVVNFRl9JUDMKLQliZXF6CSB0MSwgMmYKLQkgbm9wCi0JamFsCSBiY20xNDgwX21haWxib3hfaW50ZXJydXB0Ci0JIG1vdmUJIGEwLCBzcAotCWoJIHJldF9mcm9tX2lycQotCSBub3AJCQkJLyogZGVsYXkgc2xvdCAgKi8KLTI6Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19LR0RCCi0JLyogS0dEQiAodWFydCAxKSBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIElQWzZdICovCi0JYW5kaQkgdDEsIHMwLCBDQVVTRUZfSVA2Ci0JYmVxegkgdDEsIDNmCi0JIG5vcAkJCQkvKiBkZWxheSBzbG90ICAqLwotCWphbAkgYmNtMTQ4MF9rZ2RiX2ludGVycnVwdAotCSBtb3ZlCSBhMCwgc3AKLQlqCSByZXRfZnJvbV9pcnEKLQkgbm9wCQkJCS8qIGRlbGF5IHNsb3QgICovCi0zOgotI2VuZGlmCi0KLQlhbmQJIHQxLCBzMCwgQ0FVU0VGX0lQMgotCWJlcXoJIHQxLCA5ZgotCSBub3AKLQotCS8qCi0JICogRGVmYXVsdC4uLndlJ3ZlIGhpdCBhbiBJUFsyXSBpbnRlcnJ1cHQsIHdoaWNoIG1lYW5zIHdlJ3ZlIGdvdAotCSAqIHRvIGNoZWNrIHRoZSAxNDgwIGludGVycnVwdCByZWdpc3RlcnMgdG8gZmlndXJlIG91dCB3aGF0IHRvIGRvCi0JICogTmVlZCB0byBkZXRlY3Qgd2hpY2ggQ1BVIHdlJ3JlIG9uLCBub3cgdGhhdCBzbXBfYWZmaW5pdHkgaXMKLQkgKiBzdXBwb3J0ZWQuCi0JICovCi0JUFRSX0xBCSB2MCwgQ0tTRUcxICsgQV9CQ00xNDgwX0lNUl9DUFUwX0JBU0UKLSNpZmRlZiBDT05GSUdfU01QCi0JbHcJIHQxLCBUSV9DUFUoJDI4KQotCXNsbAkgdDEsIHQxLCBCQ00xNDgwX0lNUl9SRUdJU1RFUl9TUEFDSU5HX1NISUZUCi0JYWRkdQkgdjAsIHYwLCB0MQotI2VuZGlmCi0KLQkvKiBSZWFkIElQWzJdIHN0YXR1cyAoZ2V0IGJvdGggaGlnaCBhbmQgbG93IGhhbHZlcyBvZiBzdGF0dXMpICovCi0JbGQJIHMwLCBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRV9IKHYwKQotCWxkCSBzMSwgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfU1RBVFVTX0JBU0VfTCh2MCkKLQotCW1vdmUJIHMyLCB6ZXJvCS8qIGludHIgbnVtYmVyICAqLwotCWxpCSBzMywgNjQKLQotCWJlcXoJIHMwLCA5ZgkJLyogTm8gaW50ZXJydXB0cy4gIFJldHVybi4gICovCi0JIG1vdmUJIGExLCBzcAotCi0JeG9yaQkgczQsIHMwLCAxCS8qIGlmIHMwIChfSCkgPT0gMSwgaXQncyBhIGxvdyBpbnRyLCBzby4uLiAgKi8KLQltb3Z6CSBzMiwgczMsIHM0CS8qIHN0YXJ0IHRoZSBpbnRyIG51bWJlciBhdCA2NCwgYW5kICAqLwotCW1vdnoJIHMwLCBzMSwgczQJLyogbG9vayBhdCB0aGUgbG93IHN0YXR1cyB2YWx1ZS4gICovCi0KLQlkY2x6CSBzMSwgczAJCS8qIEZpbmQgdGhlIG5leHQgaW50ZXJydXB0LiAgKi8KLQlkc3VidQkgYTAsIHplcm8sIHMxCi0JZGFkZGl1CSBhMCwgYTAsIDYzCi0JamFsCSBkb19JUlEKLQkgZGFkZHUJIGEwLCBhMCwgczIKLQotOToJagkgcmV0X2Zyb21faXJxCi0JIG5vcAotCi0JLnNldCBwb3AKLQlFTkQoYmNtMTQ4MF9pcnFfaGFuZGxlcikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL01ha2VmaWxlIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvTWFrZWZpbGUKaW5kZXggYThhZjg0Ni4uYTJmZGJkNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1vYmoteSA6PSBzZXR1cC5vIGlycS5vIGlycV9oYW5kbGVyLm8gdGltZS5vCitvYmoteSA6PSBzZXR1cC5vIGlycS5vIHRpbWUubwogCiBvYmotJChDT05GSUdfU01QKQkJCSs9IHNtcC5vCiBvYmotJChDT05GSUdfU0lCWVRFX1RCUFJPRikJCSs9IGJjbTEyNTBfdGJwcm9mLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKaW5kZXggNTg5NTM3Yi4uMGY2ZTU0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKQEAgLTE2MywxMCArMTYzLDYgQEAKIH0KICNlbmRpZgogCi0KLS8qIERlZmluZWQgaW4gYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxX2hhbmRsZXIuUyAqLwotZXh0ZXJuIHZvaWQgc2IxMjUwX2lycV9oYW5kbGVyKHZvaWQpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9zYjEyNTBfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0zNzksNyArMzc1LDYgQEAKICNlbmRpZgogCS8qIEVuYWJsZSBuZWNlc3NhcnkgSVBzLCBkaXNhYmxlIHRoZSByZXN0ICovCiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIGltYXNrKTsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBzYjEyNTBfaXJxX2hhbmRsZXIpOwogCiAjaWZkZWYgQ09ORklHX0tHREIKIAlpZiAoa2dkYl9mbGFnKSB7CkBAIC00MDksNyArNDA0LDcgQEAKICNkZWZpbmUgZHVhcnRfb3V0KHJlZywgdmFsKSAgICAgY3NyX291dDMyKHZhbCwgSU9BRERSKEFfRFVBUlRfQ0hBTlJFRyhrZ2RiX3BvcnQscmVnKSkpCiAjZGVmaW5lIGR1YXJ0X2luKHJlZykgICAgICAgICAgIGNzcl9pbjMyKElPQUREUihBX0RVQVJUX0NIQU5SRUcoa2dkYl9wb3J0LHJlZykpKQogCi12b2lkIHNiMTI1MF9rZ2RiX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHNiMTI1MF9rZ2RiX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAkvKgogCSAqIENsZWFyIGJyZWFrLWNoYW5nZSBzdGF0dXMgKGFsbG93IHNvbWUgdGltZSBmb3IgdGhlIHJlbW90ZQpAQCAtNDI0LDMgKzQxOSw3NCBAQAogfQogCiAjZW5kaWYgCS8qIENPTkZJR19LR0RCICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGRjbHoodW5zaWduZWQgbG9uZyBsb25nIHgpCit7CisJaW50IGx6OworCisJX19hc21fXyAoCisJIgkuc2V0CXB1c2gJCQkJCQlcbiIKKwkiCS5zZXQJbWlwczY0CQkJCQkJXG4iCisJIglkY2x6CSUwLCAlMQkJCQkJCVxuIgorCSIJLnNldAlwb3AJCQkJCQlcbiIKKwk6ICI9ciIgKGx6KQorCTogInIiICh4KSk7CisKKwlyZXR1cm4gbHo7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZzsKKworI2lmZGVmIENPTkZJR19TSUJZVEVfU0IxMjUwX1BST0YKKwkvKiBTZXQgY29tcGFyZSB0byBjb3VudCB0byBzaWxlbmNlIGNvdW50L2NvbXBhcmUgdGltZXIgaW50ZXJydXB0cyAqLworCXdyaXRlX2MwX2NvdW50KHJlYWRfYzBfY291bnQoKSk7CisjZW5kaWYKKworCS8qCisJICogV2hhdCBhIHBhaW4uIFdlIGhhdmUgdG8gYmUgcmVhbGx5IGNhcmVmdWwgc2F2aW5nIHRoZSB1cHBlciAzMiBiaXRzCisJICogb2YgYW55ICogcmVnaXN0ZXIgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzIGlmIHdlIGRvbid0IHdhbnQgdGhlbQorCSAqIHRyYXNoZWQtLXNpbmNlIHdlcmUgcnVubmluZyBpbiAtbzMyLCB0aGUgY2FsbGluZyByb3V0aW5nIG5ldmVyIHNhdmVzCisJICogdGhlIGZ1bGwgNjQgYml0cyBvZiBhIHJlZ2lzdGVyIGFjcm9zcyBhIGZ1bmN0aW9uIGNhbGwuICBCZWluZyB0aGUKKwkgKiBpbnRlcnJ1cHQgaGFuZGxlciwgd2UncmUgZ3VhcmFudGVlZCB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkCisJICogZHVyaW5nIHRoaXMgY29kZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHJhbmRvbSBpbnRlcnJ1cHRzCisJICogYmxhc3RpbmcgdGhlIGhpZ2ggMzIgYml0cy4KKwkgKi8KKworCXBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCk7CisKKyNpZmRlZiBDT05GSUdfU0lCWVRFX1NCMTI1MF9QUk9GCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KSB7IC8qIENwdSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCAqLworCQlzYnByb2ZfY3B1X2ludHIoZXhjZXB0aW9uX2VwYyhyZWdzKSk7CisJfQorI2VuZGlmCisKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDQpCisJCXNiMTI1MF90aW1lcl9pbnRlcnJ1cHQocmVncyk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQorCQlzYjEyNTBfbWFpbGJveF9pbnRlcnJ1cHQocmVncyk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LR0RCCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQkJCS8qIEtHREIgKHVhcnQgMSkgKi8KKwkJc2IxMjUwX2tnZGJfaW50ZXJydXB0KHJlZ3MpOworI2VuZGlmCisKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpIHsKKwkJdW5zaWduZWQgbG9uZyBsb25nIG1hc2s7CisKKwkJLyoKKwkJICogRGVmYXVsdC4uLndlJ3ZlIGhpdCBhbiBJUFsyXSBpbnRlcnJ1cHQsIHdoaWNoIG1lYW5zIHdlJ3ZlCisJCSAqIGdvdCB0byBjaGVjayB0aGUgMTI1MCBpbnRlcnJ1cHQgcmVnaXN0ZXJzIHRvIGZpZ3VyZSBvdXQgd2hhdAorCQkgKiB0byBkby4gIE5lZWQgdG8gZGV0ZWN0IHdoaWNoIENQVSB3ZSdyZSBvbiwgbm93IHRoYXQKKwkJIH4gc21wX2FmZmluaXR5IGlzIHN1cHBvcnRlZC4KKwkJICovCisJCW1hc2sgPSBfX3Jhd19yZWFkcShJT0FERFIoQV9JTVJfUkVHSVNURVIoc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSX0lNUl9JTlRFUlJVUFRfU1RBVFVTX0JBU0UpKSk7CisJCWlmIChtYXNrKQorCQkJZG9fSVJRKDYzIC0gZGNseihtYXNrKSwgcmVncyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxX2hhbmRsZXIuUyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycV9oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZWRjOGYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxX2hhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEJyb2FkY29tIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotLyoKLSAqIHNiMTI1MF9oYW5kbGVfaW50KCkgaXMgdGhlIHJvdXRpbmUgdGhhdCBpcyBhY3R1YWxseSBjYWxsZWQgd2hlbiBhbiBpbnRlcnJ1cHQKLSAqIG9jY3Vycy4gIEl0IGlzIGluc3RhbGxlZCBhcyB0aGUgZXhjZXB0aW9uIHZlY3RvciBoYW5kbGVyIGluIGFyY2hfaW5pdF9pcnEoKQotICogaW4gYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKLSAqCi0gKiBJbiB0aGUgaGFuZGxlIHdlIGZpZ3VyZSBvdXQgd2hpY2ggaW50ZXJydXB0cyBuZWVkIGhhbmRsaW5nLCBhbmQgdXNlIHRoYXQgdG8KLSAqIGNhbGwgdGhlIGRpc3BhdGNoZXIsIHdoaWNoIHdpbGwgdGFrZSBjYXJlIG9mIGFjdHVhbGx5IGNhbGxpbmcgcmVnaXN0ZXJlZAotICogaGFuZGxlcnMKLSAqCi0gKiBOb3RlIHRoYXQgd2UgdGFrZSBjYXJlIG9mIGFsbCByYWlzZWQgaW50ZXJydXB0cyBpbiBvbmUgZ28gYXQgdGhlIGhhbmRsZXIuCi0gKiBUaGlzIGlzIG1vcmUgQlNEaXNoIHRoYW4gdGhlIEluZHkgY29kZSwgYW5kIGFsc28sIElNSE8sIG1vcmUgc2FuZS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9kZWZzLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfcmVncy5oPgotI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX2ludC5oPgotCi0vKgotICogV2hhdCBhIHBhaW4uIFdlIGhhdmUgdG8gYmUgcmVhbGx5IGNhcmVmdWwgc2F2aW5nIHRoZSB1cHBlciAzMiBiaXRzIG9mIGFueQotICogcmVnaXN0ZXIgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzIGlmIHdlIGRvbid0IHdhbnQgdGhlbSB0cmFzaGVkLS1zaW5jZSB3ZXJlCi0gKiBydW5uaW5nIGluIC1vMzIsIHRoZSBjYWxsaW5nIHJvdXRpbmcgbmV2ZXIgc2F2ZXMgdGhlIGZ1bGwgNjQgYml0cyBvZiBhCi0gKiByZWdpc3RlciBhY3Jvc3MgYSBmdW5jdGlvbiBjYWxsLiAgQmVpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCB3ZSdyZQotICogZ3VhcmFudGVlZCB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkIGR1cmluZyB0aGlzIGNvZGUgc28gd2UgZG9uJ3QgaGF2ZQotICogdG8gd29ycnkgYWJvdXQgcmFuZG9tIGludGVycnVwdHMgYmxhc3RpbmcgdGhlIGhpZ2ggMzIgYml0cy4KLSAqLwotCi0JLnRleHQKLQkuc2V0CXB1c2gKLQkuc2V0CW5vcmVvcmRlcgotCS5zZXQJbm9hdAotCS5zZXQJbWlwczY0Ci0JLmFsaWduCTUKLQlORVNURUQoc2IxMjUwX2lycV9oYW5kbGVyLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCi0jaWZkZWYgQ09ORklHX1NJQllURV9TQjEyNTBfUFJPRgotCS8qIFNldCBjb21wYXJlIHRvIGNvdW50IHRvIHNpbGVuY2UgY291bnQvY29tcGFyZSB0aW1lciBpbnRlcnJ1cHRzICovCi0JbWZjMAl0MSwgQ1AwX0NPVU5UCi0JbXRjMAl0MSwgQ1AwX0NPTVBBUkUgLyogcGF1c2UgdG8gY2xlYXIgSVBbN10gYml0IG9mIGNhdXNlID8gKi8KLSNlbmRpZgotCS8qIFJlYWQgY2F1c2UgKi8KLQltZmMwCXMwLCBDUDBfQ0FVU0UKLQotI2lmZGVmIENPTkZJR19TSUJZVEVfU0IxMjUwX1BST0YKLQkvKiBDcHUgcGVyZm9ybWFuY2UgY291bnRlciBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIElQWzddICovCi0JYW5kaQl0MSwgczAsIENBVVNFRl9JUDcKLQliZXF6CXQxLCAwZgotCSBzcmwJdDEsIHMwLCAoQ0FVU0VCX0JELTIpICAvKiBTaGlmdCBCRCBiaXQgdG8gYml0IDIgKi8KLQlhbmQJdDEsIHQxLCAweDQJCS8qIG1hc2sgdG8gZ2V0IGp1c3QgQkQgYml0ICovCi0JbWZjMAlhMCwgQ1AwX0VQQwotCWphbAlzYnByb2ZfY3B1X2ludHIKLQkgYWRkdQlhMCwgYTAsIHQxCQkvKiBhMCA9IEVQQyArIChCRCA/IDQgOgkwKSAqLwotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotMDoKLSNlbmRpZgotCi0JLyogVGltZXIgaW50ZXJydXB0IGlzIHJvdXRlZCB0byBJUFs0XSAqLwotCWFuZGkJdDEsIHMwLCBDQVVTRUZfSVA0Ci0JYmVxegl0MSwgMWYKLQkgbm9wCi0JamFsCXNiMTI1MF90aW1lcl9pbnRlcnJ1cHQKLQkgbW92ZQlhMCwgc3AJCQkvKiBQYXNzIHRoZSByZWdpc3RlcnMgYWxvbmcgKi8KLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0xOgotCi0jaWZkZWYgQ09ORklHX1NNUAotCS8qIE1haWxib3ggaW50ZXJydXB0IGlzIHJvdXRlZCB0byBJUFszXSAqLwotCWFuZGkJIHQxLCBzMCwgQ0FVU0VGX0lQMwotCWJlcXoJIHQxLCAyZgotCSBub3AKLQlqYWwJIHNiMTI1MF9tYWlsYm94X2ludGVycnVwdAotCSBtb3ZlICAgIGEwLCBzcAotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLTI6Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19LR0RCCi0JLyogS0dEQiAodWFydCAxKSBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIElQWzZdICovCi0JYW5kaQl0MSwgczAsIENBVVNFRl9JUDYKLQliZXF6CXQxLCAxZgotCW5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGF5IHNsb3QKLQlqYWwJc2IxMjUwX2tnZGJfaW50ZXJydXB0Ci0gICAgICAgICBtb3ZlCWEwLCBzcAotCWoJcmV0X2Zyb21faXJxCi0Jbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsYXkgc2xvdAotMToKLSNlbmRpZgotCi0JYW5kICAgICAgdDEsIHMwLCBDQVVTRUZfSVAyCi0JYmVxeiAgICAgdDEsIDRmCi0JIG5vcAotCi0JLyoKLQkgKiBEZWZhdWx0Li4ud2UndmUgaGl0IGFuIElQWzJdIGludGVycnVwdCwgd2hpY2ggbWVhbnMgd2UndmUgZ290IHRvCi0JICogY2hlY2sgdGhlIDEyNTAgaW50ZXJydXB0IHJlZ2lzdGVycyB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZG8KLQkgKiBOZWVkIHRvIGRldGVjdCB3aGljaCBDUFUgd2UncmUgb24sIG5vdyB0aGF0IHNtcF9hZmZpbml0eSBpcyBzdXBwb3J0ZWQuCi0JICovCi0JUFRSX0xBCXYwLCBDS1NFRzEgKyBBX0lNUl9DUFUwX0JBU0UKLSNpZmRlZiBDT05GSUdfU01QCi0JbHcJdDEsIFRJX0NQVSgkMjgpCi0Jc2xsCXQxLCBJTVJfUkVHSVNURVJfU1BBQ0lOR19TSElGVAotCWFkZHUJdjAsIHQxCi0jZW5kaWYKLQlsZAlzMCwgUl9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFKHYwKQkvKiByZWFkIElQWzJdIHN0YXR1cyAqLwotCi0JYmVxeglzMCwgNGYJCS8qIE5vIGludGVycnVwdHMuICBSZXR1cm4gKi8KLQkgbW92ZQlhMSwgc3AKLQotMzoJZGNseglzMSwgczAJCS8qIEZpbmQgdGhlIG5leHQgaW50ZXJydXB0ICovCi0JZHN1YnUJYTAsIHplcm8sIHMxCi0JZGFkZGl1CWEwLCBhMCwgNjMKLQlqYWwJIGRvX0lSUQotCSBub3AKLQotNDoJaiAgICAgICAgcmV0X2Zyb21faXJxCi0JIG5vcAotCi0JLnNldCBwb3AKLQlFTkQoc2IxMjUwX2lycV9oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9zbmkvTWFrZWZpbGUKaW5kZXggMWU1Njc2ZS4uOWM3ZWFhNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc25pL01ha2VmaWxlCkBAIC0yLDYgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIFNOSSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBrZXJuZWwKICMKIAotb2JqLXkJIAkrPSBpbnQtaGFuZGxlci5vIGlycS5vIHBjaW10X3NjYWNoZS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJIAkrPSBpcnEubyBwY2ltdF9zY2FjaGUubyByZXNldC5vIHNldHVwLm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL3NuaS9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2RjMDlmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9zbmkvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogU05JIFJNMjAwIFBDSSBzcGVjaWZpYyBpbnRlcnJ1cHQgaGFuZGxlciBjb2RlLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk2LCA5NywgOTgsIDE5OTksIDIwMDAsIDAxIGJ5IFJhbGYgQmFlY2hsZQotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc25pLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyoKLSAqIFRoZSBQQ0kgQVNJQyBoYXMgdGhlIG5hc3R5IHByb3BlcnR5IHRoYXQgaXQgbWF5IGRlbGF5IHdyaXRlcyBpZiBpdCBpcyBidXN5LgotICogQXMgYSBjb25zZXF1ZW5jZSBmcm9tIHdyaXRlcyB0aGF0IGhhdmUgbm90IGdyYWR1YXRlZCB3aGVuIHdlIGV4aXQgZnJvbSB0aGUKLSAqIGludGVycnVwdCBoYW5kbGVyIHdlIG1pZ2h0IGNhdGNoIGEgc3B1cmlvdXMgaW50ZXJydXB0LiAgVG8gYXZvaWQgdGhpcyB3ZQotICogZm9yY2UgdGhlIFBDSSBBU0lDIHRvIGdyYWR1YXRlIGFsbCB3cml0ZXMgYnkgZXhlY3V0aW5nIGEgcmVhZCBmcm9tIHRoZQotICogUENJIGJ1cy4KLSAqLwotCQkuc2V0CW5vcmVvcmRlcgotCQkuc2V0CW5vYXQKLQkJLmFsaWduCTUKLQkJTkVTVEVEKHNuaV9ybTIwMF9wY2lfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0KLQkJLyogQmxpbmtlbiBsaWdodCAuLi4gICovCi0JCWxiCXQwLCBsZWRfY2FjaGUKLQkJYWRkaXUJdDAsIDEKLQkJc2IJdDAsIGxlZF9jYWNoZQotCQlzYgl0MCwgUENJTVRfQ1NMRUQJCQkjIHdyaXRlIG9ubHkgcmVnaXN0ZXIKLQkJLmRhdGEKLWxlZF9jYWNoZToJLmJ5dGUJMAotCQkudGV4dAotCi0JCW1mYzAJdDAsIENQMF9TVEFUVVMKLQkJbWZjMAl0MSwgQ1AwX0NBVVNFCi0JCWFuZAl0MCwgdDEKLQotCQkgYW5kaQl0MSwgdDAsIDB4MDgwMAkJCSMgaGFyZHdhcmUgaW50ZXJydXB0IDEKLQkJYm5legl0MSwgX2h3aW50MQotCQkgYW5kaQl0MSwgdDAsIDB4NDAwMAkJCSMgaGFyZHdhcmUgaW50ZXJydXB0IDQKLQkJYm5legl0MSwgX2h3aW50NAotCQkgYW5kaQl0MSwgdDAsIDB4MjAwMAkJCSMgaGFyZHdhcmUgaW50ZXJydXB0IDMKLQkJYm5legl0MSwgX2h3aW50MwotCQkgYW5kaQl0MSwgdDAsIDB4MTAwMAkJCSMgaGFyZHdhcmUgaW50ZXJydXB0IDIKLQkJYm5legl0MSwgX2h3aW50MgotCQkgYW5kaQl0MSwgdDAsIDB4ODAwMAkJCSMgaGFyZHdhcmUgaW50ZXJydXB0IDUKLQkJYm5legl0MSwgX2h3aW50NQotCQkgYW5kaQl0MSwgdDAsIDB4MDQwMAkJCSMgaGFyZHdhcmUgaW50ZXJydXB0IDAKLQkJYm5legl0MSwgX2h3aW50MAotCQkgbm9wCi0KLQkJaglyZXN0b3JlX2FsbAkJCSMgc3B1cmlvdXMgaW50ZXJydXB0Ci0JCSBub3AKLQotICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0vKiBod2ludDAgc2hvdWxkIGRlYWwgd2l0aCBNUCBhZ2VudCwgQVNJQyBQQ0ksIEVJU0EgTk1JIGFuZCBkZWJ1ZwotICAgYnV0dG9uIGludGVycnVwdHMuICAqLwotX2h3aW50MDoJamFsCXBjaWFzaWNfaHdpbnQwCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLS8qCi0gKiBod2ludCAxIGRlYWxzIHdpdGggRUlTQSBhbmQgU0NTSSBpbnRlcnJ1cHRzCi0gKi8KLV9od2ludDE6CWphbAlwY2lhc2ljX2h3aW50MQotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0KLS8qCi0gKiBUaGlzIGludGVycnVwdCB3YXMgdXNlZCBmb3IgdGhlIGNvbTEgY29uc29sZSBvbiB0aGUgZmlyc3QgcHJvdG90eXBlczsKLSAqIGl0J3MgdW5zZWQgb3RoZXJ3aXNlCi0gKi8KLV9od2ludDI6CWphbAlwY2lhc2ljX2h3aW50MgotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0vKgotICogaHdpbnQgMyBhcmUgdGhlIFBDSSBpbnRlcnJ1cHRzIEEgLSBECi0gKi8KLV9od2ludDM6CWphbAlwY2lhc2ljX2h3aW50MwotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0vKgotICogaHdpbnQgNCBpcyB1c2VkIGZvciBvbmx5IHRoZSBvbmJvYXJkIFBDbmV0IDMyLgotICovCi1faHdpbnQ0OglqYWwJcGNpYXNpY19od2ludDQKLQkJIG1vdmUJYTAsIHNwCi0JCWoJcmV0X2Zyb21faXJxCi0JCSBub3AKLQotLyogaHdpbnQ1IGlzIHRoZSByNGsgY291bnQgLyBjb21wYXJlIGludGVycnVwdCAgKi8KLV9od2ludDU6CWphbAlwY2lhc2ljX2h3aW50NQotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0JCUVORChzbmlfcm0yMDBfcGNpX2hhbmRsZV9pbnQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL2lycS5jIGIvYXJjaC9taXBzL3NuaS9pcnEuYwppbmRleCA5NTIwMzhhLi43MzY1YjQ4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zbmkvaXJxLmMKQEAgLTE5LDggKzE5LDYgQEAKIAogREVGSU5FX1NQSU5MT0NLKHBjaWFzaWNfbG9jayk7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgc25pX3JtMjAwX3BjaV9oYW5kbGVfaW50KHZvaWQpOwotCiBzdGF0aWMgdm9pZCBlbmFibGVfcGNpYXNpY19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKGlycSAtIFBDSU1UX0lSUV9JTlQyKTsKQEAgLTcxLDIwICs2OSwyMCBAQAogICogaHdpbnQwIHNob3VsZCBkZWFsIHdpdGggTVAgYWdlbnQsIEFTSUMgUENJLCBFSVNBIE5NSSBhbmQgZGVidWcKICAqIGJ1dHRvbiBpbnRlcnJ1cHRzLiAgTGF0ZXIgLi4uCiAgKi8KLXZvaWQgcGNpYXNpY19od2ludDAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBwY2lhc2ljX2h3aW50MChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwYW5pYygiUmVjZWl2ZWQgaW50MCBidXQgbm8gaGFuZGxlciB5ZXQgLi4uIik7CiB9CiAKIC8qIFRoaXMgaW50ZXJydXB0IHdhcyB1c2VkIGZvciB0aGUgY29tMSBjb25zb2xlIG9uIHRoZSBmaXJzdCBwcm90b3R5cGVzLiAgKi8KLXZvaWQgcGNpYXNpY19od2ludDIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBwY2lhc2ljX2h3aW50MihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAkvKiBJIHRoaW5rIHRoaXMgc2hvdWxkbid0IGhhcHBlbiBvbiBwcm9kdWN0aW9uIG1hY2hpbmVzLiAgKi8KIAlwYW5pYygiaHdpbnQyIGFuZCBubyBoYW5kbGVyIHlldCIpOwogfQogCiAvKiBod2ludDUgaXMgdGhlIHI0ayBjb3VudCAvIGNvbXBhcmUgaW50ZXJydXB0ICAqLwotdm9pZCBwY2lhc2ljX2h3aW50NShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQ1KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXBhbmljKCJod2ludDUgYW5kIG5vIGhhbmRsZXIgeWV0Iik7CiB9CkBAIC0xMDUsNyArMTAzLDcgQEAKICAqCiAgKiBUaGUgRUlTQV9JTlQgYml0IGluIENTSVRQRU5EIGlzIGhpZ2ggYWN0aXZlLCBhbGwgb3RoZXJzIGFyZSBsb3cgYWN0aXZlLgogICovCi12b2lkIHBjaWFzaWNfaHdpbnQxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgcGNpYXNpY19od2ludDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTggcGVuZCA9ICoodm9sYXRpbGUgY2hhciAqKVBDSU1UX0NTSVRQRU5EOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMzUsNyArMTMzLDcgQEAKIC8qCiAgKiBod2ludCAzIHNob3VsZCBkZWFsIHdpdGggdGhlIFBDSSBBIC0gRCBpbnRlcnJ1cHRzLAogICovCi12b2lkIHBjaWFzaWNfaHdpbnQzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgcGNpYXNpY19od2ludDMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTggcGVuZCA9ICoodm9sYXRpbGUgY2hhciAqKVBDSU1UX0NTSVRQRU5EOwogCWludCBpcnE7CkBAIC0xNTAsMTMgKzE0OCwzNCBAQAogLyoKICAqIGh3aW50IDQgaXMgdXNlZCBmb3Igb25seSB0aGUgb25ib2FyZCBQQ25ldCAzMi4KICAqLwotdm9pZCBwY2lhc2ljX2h3aW50NChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQ0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWNsZWFyX2MwX3N0YXR1cyhJRV9JUlE0KTsKIAlkb19JUlEoUENJTVRfSVJRX0VUSEVSTkVULCByZWdzKTsKIAlzZXRfYzBfc3RhdHVzKElFX0lSUTQpOwogfQogCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZF9jYWNoZTsKKworCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBQQ0lNVF9DU0xFRCA9ICsrbGVkX2NhY2hlOworCisJaWYgKHBlbmRpbmcgJiAweDA4MDApCisJCXBjaWFzaWNfaHdpbnQxKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAweDQwMDApCisJCXBjaWFzaWNfaHdpbnQ0KHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAweDIwMDApCisJCXBjaWFzaWNfaHdpbnQzKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAweDEwMDApCisJCXBjaWFzaWNfaHdpbnQyKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAweDgwMDApCisJCXBjaWFzaWNfaHdpbnQ1KHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAweDA0MDApCisJCXBjaWFzaWNfaHdpbnQwKHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBpbml0X3BjaWFzaWModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTc2LDggKzE5NSw2IEBACiB7CiAJaW50IGk7CiAKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBzbmlfcm0yMDBfcGNpX2hhbmRsZV9pbnQpOwotCiAJaW5pdF9pODI1OV9pcnFzKCk7CQkJLyogSW50ZWdyYXRlZCBpODI1OSAgKi8KIAlpbml0X3BjaWFzaWMoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi9NYWtlZmlsZQppbmRleCA4ZmExMjZiLi45Y2I5NTM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKICMgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIHNwZWNpYWwgKGllIG5vdCBhIC5jIGZpbGUpLgogIwogCi1vYmoteQkrPSB0eDQ5MjdfcHJvbS5vIHR4NDkyN19zZXR1cC5vIHR4NDkyN19pcnEubyB0eDQ5MjdfaXJxX2hhbmRsZXIubworb2JqLXkJKz0gdHg0OTI3X3Byb20ubyB0eDQ5Mjdfc2V0dXAubyB0eDQ5MjdfaXJxLm8KIAogb2JqLSQoQ09ORklHX1RPU0hJQkFfRlBDSUIwKQkgICArPSBzbXNjX2ZkYzM3bTgxeC5vCiBvYmotJChDT05GSUdfS0dEQikgICAgICAgICAgICAgICAgICs9IHR4NDkyN19kYmdpby5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxLmMgYi9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxLmMKaW5kZXggNWFiMmUyYi4uOGNhNjgwMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X2lycS5jCisrKyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnEuYwpAQCAtNTI1LDggKzUyNSw2IEBACiAgKi8KIHZvaWQgX19pbml0IHR4NDkyN19pcnFfaW5pdCh2b2lkKQogewotCWV4dGVybiBhc21saW5rYWdlIHZvaWQgdHg0OTI3X2lycV9oYW5kbGVyKHZvaWQpOwotCiAJVFg0OTI3X0lSUV9EUFJJTlRLKFRYNDkyN19JUlFfSU5JVCwgIi1cbiIpOwogCiAJVFg0OTI3X0lSUV9EUFJJTlRLKFRYNDkyN19JUlFfSU5JVCwgIj1DYWxsaW5nIHR4NDkyN19pcnFfY3AwX2luaXQoKVxuIik7CkBAIC01MzUsMTYgKzUzMywxMiBAQAogCVRYNDkyN19JUlFfRFBSSU5USyhUWDQ5MjdfSVJRX0lOSVQsICI9Q2FsbGluZyB0eDQ5MjdfaXJxX3BpY19pbml0KClcbiIpOwogCXR4NDkyN19pcnFfcGljX2luaXQoKTsKIAotCVRYNDkyN19JUlFfRFBSSU5USyhUWDQ5MjdfSVJRX0lOSVQsCi0JCQkgICAiPUNhbGxpbmcgc2V0X2V4Y2VwdF92ZWN0b3IodHg0OTI3X2lycV9oYW5kbGVyKVxuIik7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgdHg0OTI3X2lycV9oYW5kbGVyKTsKLQogCVRYNDkyN19JUlFfRFBSSU5USyhUWDQ5MjdfSVJRX0lOSVQsICIrXG4iKTsKIAogCXJldHVybjsKIH0KIAotaW50IHR4NDkyN19pcnFfbmVzdGVkKHZvaWQpCitzdGF0aWMgaW50IHR4NDkyN19pcnFfbmVzdGVkKHZvaWQpCiB7CiAJaW50IHN3X2lycSA9IDA7CiAJdTMyIGxldmVsMjsKQEAgLTU4MiwzICs1NzYsMjUgQEAKIAogCXJldHVybiAoc3dfaXJxKTsKIH0KKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCQkJLyogY3B1IHRpbWVyICovCisJCWRvX0lSUShUWDQ5MjdfSVJRX0NQVV9USU1FUiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKSB7CQkvKiB0eDQ5MjcgcGljICovCisJCXVuc2lnbmVkIGludCBpcnEgPSB0eDQ5MjdfaXJxX25lc3RlZCgpOworCisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKKwkJCXJldHVybjsKKwkJfQorCQlkb19JUlEoaXJxLCByZWdzKTsKKwl9IGVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkJCS8qIHVzZXIgbGluZSAwICovCisJCWRvX0lSUShUWDQ5MjdfSVJRX1VTRVIwLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEpCQkJLyogdXNlciBsaW5lIDEgKi8KKwkJZG9fSVJRKFRYNDkyN19JUlFfVVNFUjEsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X2lycV9oYW5kbGVyLlMgYi9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxX2hhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQzY2VkYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxX2hhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X2lycV9oYW5kbGVyLlMKLSAqCi0gKiBQcmltYXJ5IGludGVycnVwdCBoYW5kbGVyIGZvciB0eDQ5MjcgYmFzZWQgc3lzdGVtcwotICoKLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKiAgICAgICAgIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogQ29weXJpZ2h0IDIwMDEtMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiAgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKLSAqICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vdHg0OTI3L3R4NDkyNy5oPgotCi0JCS5hbGlnbgk1Ci0JCU5FU1RFRCh0eDQ5MjdfaXJxX2hhbmRsZXIsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQxLCBDUDBfU1RBVFVTCi0JCWFuZAl0MCwgdDEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDcJLyogY3B1IHRpbWVyICovCi0JCWJuZXoJdDEsIGxsX2lwNwotCi0JCS8qIElQNi4uSVAzIG11bHRpcGxleGVkIC0tIGRvIG5vdCB1c2UgKi8KLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDIJLyogdHg0OTI3IHBpYyAqLwotCQlibmV6CXQxLCBsbF9pcDIKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDAJLyogdXNlciBsaW5lIDAgKi8KLQkJYm5legl0MSwgbGxfaXAwCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHVzZXIgbGluZSAxICovCi0JCWJuZXoJdDEsIGxsX2lwMQotCi0JCS5zZXQJcmVvcmRlcgotCi0JCS8qIHdyb25nIGFsYXJtIG9yIG1hc2tlZCAuLi4gKi8KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCUVORCh0eDQ5MjdfaXJxX2hhbmRsZXIpCi0KLQkJLmFsaWduCTUKLQotCi1sbF9pcDc6Ci0JCWxpCWEwLCBUWDQ5MjdfSVJRX0NQVV9USU1FUgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2lwMjoKLQkJamFsCXR4NDkyN19pcnFfbmVzdGVkCi0JCW5vcAotCQliZXF6IAl2MCwgZ290b19zcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCW1vdmUJYTAsIHYwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotZ290b19zcHVyaW91c19pbnRlcnJ1cHQ6Ci0JaiBzcHVyaW91c19pbnRlcnJ1cHQKLQlub3AKLQotbGxfaXAxOgotCQlsaQlhMCwgVFg0OTI3X0lSUV9VU0VSMQotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2lwMDoKLQkJbGkJYTAsIFRYNDkyN19JUlFfVVNFUjAKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9NYWtlZmlsZQppbmRleCA3NGM5NWM1Li4yMDMzYWU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9NYWtlZmlsZQpAQCAtNiw2ICs2LDYgQEAKICMgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIHNwZWNpYWwgKGllIG5vdCBhIC5jIGZpbGUpLgogIwogCi1vYmoteQkrPSBwcm9tLm8gc2V0dXAubyBpcnEubyBpcnFfaGFuZGxlci5vIHJ0Y19yeDVjMzQ4Lm8KK29iai15CSs9IHByb20ubyBzZXR1cC5vIGlycS5vIHJ0Y19yeDVjMzQ4Lm8KIG9iai0kKENPTkZJR19LR0RCKSArPSBkYmdpby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKaW5kZXggNGY5MGQ3Zi4uODczODA1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKQEAgLTM5MiwxMSArMzkyLDggQEAKIHZvaWQgX19pbml0CiB0eDQ5MzhfaXJxX2luaXQodm9pZCkKIHsKLQlleHRlcm4gYXNtbGlua2FnZSB2b2lkIHR4NDkzOF9pcnFfaGFuZGxlcih2b2lkKTsKLQogCXR4NDkzOF9pcnFfY3AwX2luaXQoKTsKIAl0eDQ5MzhfaXJxX3BpY19pbml0KCk7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgdHg0OTM4X2lycV9oYW5kbGVyKTsKIAogCXJldHVybjsKIH0KQEAgLTQyMiwzICs0MTksMjEgQEAKIAl3YmZsdXNoKCk7CiAJcmV0dXJuIChzd19pcnEpOwogfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKFRYNDkzOF9JUlFfQ1BVX1RJTUVSLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpIHsKKwkJaW50IGlycSA9IHR4NDkzOF9pcnFfbmVzdGVkKCk7CisJCWlmIChpcnEpCisJCQlkb19JUlEoaXJxLCByZWdzKTsKKwkJZWxzZQorCQkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQorCQlkb19JUlEoVFg0OTM4X0lSUV9VU0VSMSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoVFg0OTM4X0lSUV9VU0VSMCwgcmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9pcnFfaGFuZGxlci5TIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxX2hhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyZjcyYi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9pcnFfaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL2hhbmRsZXIuUwotICoKLSAqIFByaW1hcnkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHR4NDkzOCBiYXNlZCBzeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBUb3NoaWJhIENvcnBvcmF0aW9uCi0gKgotICogMjAwMy0yMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcwotICogbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICoKLSAqIFN1cHBvcnQgZm9yIFRYNDkzOCBpbiAyLjYgLSBNYW5pc2ggTGFjaHdhbmkgKG1sYWNod2FuaUBtdmlzdGEuY29tKQotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vdHg0OTM4L3JidHg0OTM4Lmg+Ci0KLQotCQkuYWxpZ24JNQotCQlORVNURUQodHg0OTM4X2lycV9oYW5kbGVyLCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJbWZjMAl0MSwgQ1AwX1NUQVRVUwotCQlhbmQJdDAsIHQxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9pcDcKLQotCQkvKiBJUDYuLklQMyBtdWx0aXBsZXhlZCAtLSBkbyBub3QgdXNlICovCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIHR4NDkzOCBwaWMgKi8KLQkJYm5legl0MSwgbGxfaXAyCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHVzZXIgbGluZSAxICovCi0JCWJuZXoJdDEsIGxsX2lwMQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiB1c2VyIGxpbmUgMCAqLwotCQlibmV6CXQxLCBsbF9pcDAKLQotCQkuc2V0CXJlb3JkZXIKLQotCQlub3AKLQkJRU5EKHR4NDkzOF9pcnFfaGFuZGxlcikKLQotCQkuYWxpZ24JNQotCi0KLWxsX2lwNzoKLQkJbGkJYTAsIFRYNDkzOF9JUlFfQ1BVX1RJTUVSCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotCi1sbF9pcDI6Ci0JCWphbAl0eDQ5MzhfaXJxX25lc3RlZAotCQlub3AKLQkJYmVxegl2MCwgZ290b19zcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCW1vdmUJYTAsIHYwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotZ290b19zcHVyaW91c19pbnRlcnJ1cHQ6Ci0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2lwMToKLQkJbGkJYTAsIFRYNDkzOF9JUlFfVVNFUjEKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9pcDA6Ci0JCWxpCWEwLCBUWDQ5MzhfSVJRX1VTRVIwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZyBiL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZwppbmRleCBhN2FkZDE2Li4wNTVhMmNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9LY29uZmlnCkBAIC00LDYgKzQsOCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBJU0EKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIElCTV9XT1JLUEFECkBAIC0xMiw2ICsxNCw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IElTQQorCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgTkVDX0NNQlZSNDEzMwpAQCAtMjEsNiArMjUsOSBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBST0NLSE9QUEVSCiAJYm9vbCAiU3VwcG9ydCBmb3IgUm9ja2hvcHBlciBiYXNlYm9hcmQiCkBAIC0zNCw2ICs0MSw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAloZWxwCiAJICBUaGUgVEFOQkFDIFZSNDEzMSBtdWx0aWNoaXAgbW9kdWxlKFRCMDIyNSkgYW5kCkBAIC02NSw2ICs3NCw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFpBT19DQVBDRUxMQQpAQCAtNzMsNiArODQsOCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCisJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBQQ0lfVlI0MVhYCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCmluZGV4IDkwOTYzMDIuLmFhMzczOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgY29tbW9uIGNvZGUgb2YgdGhlIE5FQyBWUjQxMDAgc2VyaWVzLgogIwogCi1vYmoteQkJCQkrPSBiY3UubyBjbXUubyBpY3UubyBpbml0Lm8gaW50LWhhbmRsZXIubyBpcnEubyBwbXUubyB0eXBlLm8KK29iai15CQkJCSs9IGJjdS5vIGNtdS5vIGljdS5vIGluaXQubyBpcnEubyBwbXUubyB0eXBlLm8KIG9iai0kKENPTkZJR19WUkM0MTczKQkJKz0gdnJjNDE3My5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjYwNDNmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIEZJTEUgTkFNRQotICoJYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW50LWhhbmRsZXIuUwotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJSW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIHRoZSBORUMgVlI0MTAwIHNlcmllcy4KLSAqCi0gKiBBdXRob3I6IFlvaWNoaSBZdWFzYQotICogICAgICAgICB5eXVhc2FAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQotICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLS8qCi0gKiBDaGFuZ2VzOgotICogIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLiA8eXl1YXNhQG12aXN0YS5jb20+IG9yIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqICAtIE5ldyBjcmVhdGlvbiwgTkVDIFZSNDEwMCBzZXJpZXMgYXJlIHN1cHBvcnRlZC4KLSAqCi0gKiAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+Ci0gKiAgLSBDb3BlZCB3aXRoIElOVEFTU0lHTiBvZiBORUMgVlI0MTMzLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JCS50ZXh0Ci0JCS5zZXQJbm9yZW9yZGVyCi0KLQkJLmFsaWduCTUKLQkJTkVTVEVEKHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0LCBQVF9TSVpFLCByYSkKLQkJLnNldAlub2F0Ci0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCS5zZXQJbm9yZW9yZGVyCi0KLQkJLyoKLQkJICogR2V0IHRoZSBwZW5kaW5nIGludGVycnVwdHMKLQkJICovCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQxLCBDUDBfU1RBVFVTCi0JCWFuZGkJdDAsIDB4ZmYwMAotCQlhbmQJdDAsIHQwLCB0MQotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA3CSMgTUlQUyB0aW1lciBpbnRlcnJ1cHQKLQkJYm5legl0MSwgaGFuZGxlX2lycQotCQlsaQlhMCwgNwotCi0JCWFuZGkJdDEsIHQwLCAweDc4MDAJCSMgY2hlY2sgZm9yIEludDEtNAotCQliZXF6CXQxLCAxZgotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVAzCSMgY2hlY2sgZm9yIEludDEKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgMwotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA0CSMgY2hlY2sgZm9yIEludDIKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNAotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA1CSMgY2hlY2sgZm9yIEludDMKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNQotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA2CSMgY2hlY2sgZm9yIEludDQKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNgotCi0xOgotCQlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQMgkjIGNoZWNrIGZvciBJbnQwCi0JCWJuZXoJdDEsIGhhbmRsZV9pbnQKLQkJbGkJYTAsIDIKLQotCQlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQMAkjIGNoZWNrIGZvciBJUDAKLQkJYm5legl0MSwgaGFuZGxlX2lycQotCQlsaQlhMCwgMAotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVAxCSMgY2hlY2sgZm9yIElQMQotCQlibmV6CXQxLCBoYW5kbGVfaXJxCi0JCWxpCWEwLCAxCi0KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0KLWhhbmRsZV9pbnQ6Ci0JCWphbAlpcnFfZGlzcGF0Y2gKLQkJbW92ZQlhMSwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLWhhbmRsZV9pcnE6Ci0JCWphbAlkb19JUlEKLQkJbW92ZQlhMSwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJRU5EKHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYwppbmRleCA2MWFhMjY0Li44Njc5NmJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYwpAQCAtNTksNyArNTksNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChjYXNjYWRlX2lycSk7CiAKLWFzbWxpbmthZ2Ugdm9pZCBpcnFfZGlzcGF0Y2godW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcnFfZGlzcGF0Y2godW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaXJxX2Nhc2NhZGVfdCAqY2FzY2FkZTsKIAlpcnFfZGVzY190ICpkZXNjOwpAQCAtODQsMTEgKzg0LDMyIEBACiAJCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKSAmIFNUMF9JTTsKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAweDc4MDApIHsKKwkJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQorCQkJaXJxX2Rpc3BhdGNoKDMsIHJlZ3MpOworCQllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJCWlycV9kaXNwYXRjaCg0LCByZWdzKTsKKwkJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDUpCisJCQlpcnFfZGlzcGF0Y2goNSwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQorCQkJaXJxX2Rpc3BhdGNoKDYsIHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpCisJCWlycV9kaXNwYXRjaCgyLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMCkKKwkJZG9fSVJRKDAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAxKQorCQlkb19JUlEoMSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAltaXBzX2NwdV9pcnFfaW5pdChNSVBTX0NQVV9JUlFfQkFTRSk7Ci0KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCB2cjQxeHhfaGFuZGxlX2ludGVycnVwdCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCAyZmRmMjE5Li45MTBmYjNhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTEzOCw2ICsxMzgsMzcgQEAKIAkgIGVuYWJsZSB0aGlzIG9wdGlvbiBvdGhlcndpc2UuIFRoZSA2NGJpdCBrZXJuZWwgaXMgc2lnbmlmaWNhbnRseSBiaWdnZXIKIAkgIGFuZCBzbG93ZXIgdGhhbiB0aGUgMzJiaXQgb25lLgogCitjaG9pY2UKKwlwcm9tcHQgIktlcm5lbCBwYWdlIHNpemUiCisJZGVmYXVsdCBQQVJJU0NfUEFHRV9TSVpFXzRLQiAgaWYgITY0QklUCisJZGVmYXVsdCBQQVJJU0NfUEFHRV9TSVpFXzRLQiAgaWYgNjRCSVQKKyMJZGVmYXVsdCBQQVJJU0NfUEFHRV9TSVpFXzE2S0IgaWYgNjRCSVQKKworY29uZmlnIFBBUklTQ19QQUdFX1NJWkVfNEtCCisJYm9vbCAiNEtCIgorCWhlbHAKKwkgIFRoaXMgbGV0cyB5b3Ugc2VsZWN0IHRoZSBwYWdlIHNpemUgb2YgdGhlIGtlcm5lbC4gIEZvciBiZXN0CisJICBwZXJmb3JtYW5jZSwgYSBwYWdlIHNpemUgb2YgMTZLQiBpcyByZWNvbW1lbmRlZC4gIEZvciBiZXN0CisJICBjb21wYXRpYmlsaXR5IHdpdGggMzJiaXQgYXBwbGljYXRpb25zLCBhIHBhZ2Ugc2l6ZSBvZiA0S0Igc2hvdWxkIGJlCisJICBzZWxlY3RlZCAodGhlIHZhc3QgbWFqb3JpdHkgb2YgMzJiaXQgYmluYXJpZXMgd29yayBwZXJmZWN0bHkgZmluZQorCSAgd2l0aCBhIGxhcmdlciBwYWdlIHNpemUpLgorCisJICA0S0IgICAgICAgICAgICAgICAgRm9yIGJlc3QgMzJiaXQgY29tcGF0aWJpbGl0eQorCSAgMTZLQiAgICAgICAgICAgICAgIEZvciBiZXN0IHBlcmZvcm1hbmNlCisJICA2NEtCICAgICAgICAgICAgICAgRm9yIGJlc3QgcGVyZm9ybWFuY2UsIG1pZ2h0IGdpdmUgbW9yZSBvdmVyaGVhZC4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbywgY2hvb3NlIDRLQi4KKworY29uZmlnIFBBUklTQ19QQUdFX1NJWkVfMTZLQgorCWJvb2wgIjE2S0IgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBQQThYMDAgJiYgRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBQQVJJU0NfUEFHRV9TSVpFXzY0S0IKKwlib29sICI2NEtCIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gUEE4WDAwICYmIEVYUEVSSU1FTlRBTAorCitlbmRjaG9pY2UKKwogY29uZmlnIFNNUAogCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtMTc3LDYgKzIwOCwxMSBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICIzIgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLnByZWVtcHQiCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLmh6Igogc291cmNlICJtbS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvZGVmY29uZmlnIGIvYXJjaC9wYXJpc2MvZGVmY29uZmlnCmluZGV4IDU5ZjdiYzMuLmIzOGI1OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2RlZmNvbmZpZworKysgYi9hcmNoL3BhcmlzYy9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcGE2Ci0jIFN1biBNYXIgMjYgMTk6NTA6MDcgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXBhMTAKKyMgU3VuIEFwciAgMiAxNToyNjozOCAyMDA2CiAjCiBDT05GSUdfUEFSSVNDPXkKIENPTkZJR19NTVU9eQpAQCAtMjUsNyArMjUsNyBAQAogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKQEAgLTM1LDcgKzM1LDcgQEAKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKQEAgLTU3LDcgKzU3LDEzIEBACiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CiAjCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CiAKICMKICMgQmxvY2sgbGF5ZXIKQEAgLTc5LDE2ICs4NSwxOSBAQAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKICMKLUNPTkZJR19QQTcwMDA9eQotIyBDT05GSUdfUEE3MTAwTEMgaXMgbm90IHNldAorIyBDT05GSUdfUEE3MDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQTcxMDBMQz15CiAjIENPTkZJR19QQTcyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEE3MzAwTEMgaXMgbm90IHNldAogIyBDT05GSUdfUEE4WDAwIGlzIG5vdCBzZXQKIENPTkZJR19QQTExPXkKK0NPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFSSVNDX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CkBAIC0xMDgsNyArMTE3LDcgQEAKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBHU0MsIElTQSkKICMKIENPTkZJR19HU0M9eQotQ09ORklHX0hQUEI9eQorIyBDT05GSUdfSFBQQiBpcyBub3Qgc2V0CiBDT05GSUdfSU9NTVVfQ0NJTz15CiBDT05GSUdfR1NDX0xBU0k9eQogQ09ORklHX0dTQ19XQVg9eQpAQCAtMTI2LDcgKzEzNSwyNSBAQAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CiAjCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorQ09ORklHX0NBUkRCVVM9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX1lFTlRBPXkKK0NPTkZJR19ZRU5UQV9PMj15CitDT05GSUdfWUVOVEFfUklDT0g9eQorQ09ORklHX1lFTlRBX1RJPXkKK0NPTkZJR19ZRU5UQV9FTkVfVFVORT15CitDT05GSUdfWUVOVEFfVE9TSElCQT15CitDT05GSUdfUEQ2NzI5PXkKK0NPTkZJR19JODIwOTI9eQorQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTE0NSw3ICsxNzIsNyBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KIAogIwogIyBOZXR3b3JraW5nCkBAIC0xNTksMTMgKzE4NiwxNSBAQAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KK0NPTkZJR19ORVRfS0VZPW0KIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKICMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKQEAgLTE3MywxOSArMjAyLDIwIEBACiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX0RJQUc9bQorQ09ORklHX0lORVRfVENQX0RJQUc9bQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiBDT05GSUdfSVBWNj15CiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPXkKK0NPTkZJR19JTkVUNl9FU1A9eQorQ09ORklHX0lORVQ2X0lQQ09NUD15CitDT05GSUdfSU5FVDZfVFVOTkVMPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKQEAgLTIwNyw3ICsyMzcsOCBAQAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCitDT05GSUdfTExDMj1tCiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKQEAgLTIzNyw5ICsyNjgsOSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjU2LDEzICsyODcsMTQgQEAKICMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CiAjCiBDT05GSUdfUEFSUE9SVD15Ci1DT05GSUdfUEFSUE9SVF9QQz15CitDT05GSUdfUEFSUE9SVF9QQz1tCiAjIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUX1BDX1BDTUNJQT1tCiBDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQogQ09ORklHX1BBUlBPUlRfR1NDPXkKLSMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVF8xMjg0PXkKIAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKQEAgLTI4NCw3ICszMTYsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02MTQ0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldApAQCAtMjkyLDcgKzMyNCw2MCBAQAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCi0jIENPTkZJR19JREUgaXMgbm90IHNldAorQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKK0NPTkZJR19JREVESVNLX01VTFRJX01PREU9eQorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERVNDU0k9eQorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfUENJX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05TODc0MTU9eQorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTM3NSw2ICs0NjAsMTUgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogCiAjCisjIFBDTUNJQSBTQ1NJIGFkYXB0ZXIgc3VwcG9ydAorIworIyBDT05GSUdfUENNQ0lBX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05JTkpBX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1FMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKKworIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQogIwogQ09ORklHX01EPXkKQEAgLTM4MiwxMiArNDc2LDE3IEBACiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlEMTA9eQogQ09ORklHX01EX1JBSUQ1PXkKLSMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENj15CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKIAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CkBAIC00MTEsMTAgKzUxMCwxMCBAQAogIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQogCiAjCiAjIEFSQ25ldCBkZXZpY2VzCkBAIC00MzAsNyArNTI5LDcgQEAKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUlJPW0KIENPTkZJR19MQVNJXzgyNTk2PXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldApAQCAtNDUxLDYgKzU1MCw4IEBACiAjIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAogIyBDT05GSUdfVUxJNTI2WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9YSVJUVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CkBAIC01MTgsMTQgKzYxOSwzMyBAQAogIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQogIwogIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dBVkVMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05FVFdBVkUgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMSBGcmVxdWVuY3kgSG9wcGluZyBjYXJkcyBzdXBwb3J0CisjCisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAogCiAjCiAjIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0CiAjCi0jIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorQ09ORklHX0hFUk1FUz15CisjIENPTkZJR19QTFhfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNRF9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9SVEVMX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSEVSTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKIAogIworIyBXaXJlbGVzcyA4MDIuMTFiIFBjbWNpYS9DYXJkYnVzIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ01DSUFfSEVSTUVTPXkKK0NPTkZJR19QQ01DSUFfU1BFQ1RSVU09eQorIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKKworIwogIyBQcmlzbSBHVC9EdWV0dGUgODAyLjExKGEvYi9nKSBQQ0kvQ2FyZGJ1cyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKQEAgLTUzMywxMyArNjUzLDM0IEBACiBDT05GSUdfTkVUX1dJUkVMRVNTPXkKIAogIworIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVF9QQ01DSUE9eQorIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUENORVQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKKworIwogIyBXYW4gaW50ZXJmYWNlcwogIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CkBAIC01NzEsMTQgKzcxMiwxNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEX0hQX0tFWUNPREVTPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEX1JESV9LRVlDT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTg2LDUyICs3MjksMjUgQEAKICMgQ09ORklHX0tFWUJPQVJEX0hJTF9PTEQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0hJTD15CiBDT05GSUdfSU5QVVRfTU9VU0U9eQotIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9TRVJJQUw9eQogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfSElMPXkKLUNPTkZJR19JTlBVVF9KT1lTVElDSz15Ci0jIENPTkZJR19KT1lTVElDS19BTkFMT0cgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfQTNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0FESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19DT0JSQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19HRjJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0dSSVAgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfR1JJUF9NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19HVUlMTEVNT1QgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfSU5URVJBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfU0lERVdJTkRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19UTURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0lGT1JDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX01BR0VMTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1NQQUNFT1JCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1NQQUNFQkFMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19TVElOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1RXSURKT1kgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfREI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0dBTUVDT04gaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfVFVSQk9HUkFGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19KT1lEVU1QIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFBfU0RDX1JUQz15CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKIENPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKICMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fR1NDUFMyPXkKIENPTkZJR19IUF9TREM9eQogQ09ORklHX0hJTF9NTEM9eQogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIApAQCAtNjQ4LDcgKzc2NCw4IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTEzCitDT05GSUdfU0VSSUFMXzgyNTBfQ1M9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTE3CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQpAQCAtNjY2LDEwICs3ODMsMTAgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLUNPTkZJR19QUklOVEVSPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTY0CitDT05GSUdfUFJJTlRFUj1tCiAjIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKK0NPTkZJR19QUERFVj1tCiAjIENPTkZJR19USVBBUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY4Miw3ICs3OTksNyBAQAogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDX1g9eQogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC02OTEsNiArODA4LDEzIEBACiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTcxOCwxMCArODQyLDggQEAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCi1DT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKQEAgLTc0OSw4ICs4NzEsOCBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CkBAIC03NzgsOCArOTAwLDggQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRFVNTVlfQ09OU09MRV9DT0xVTU5TPTE2MAotQ09ORklHX0RVTU1ZX0NPTlNPTEVfUk9XUz02NAorQ09ORklHX0RVTU1ZX0NPTlNPTEVfQ09MVU1OUz0xMjgKK0NPTkZJR19EVU1NWV9DT05TT0xFX1JPV1M9NDgKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX1NUSV9DT05TT0xFPXkKQEAgLTgxNiwxMyArOTM4LDE0IEBACiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9IV0RFUD15CiBDT05GSUdfU05EX1NFUVVFTkNFUj15CiAjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldApAQCAtODMwLDYgKzk1Myw3IEBACiAjCiAjIEdlbmVyaWMgZGV2aWNlcwogIworQ09ORklHX1NORF9PUEwzX0xJQj15CiBDT05GSUdfU05EX0FDOTdfQ09ERUM9eQogQ09ORklHX1NORF9BQzk3X0JVUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldApAQCAtODQyLDcgKzk2Niw3IEBACiAjIFBDSSBkZXZpY2VzCiAjCiBDT05GSUdfU05EX0FEMTg4OT15Ci0jIENPTkZJR19TTkRfQUQxODg5X09QTDMgaXMgbm90IHNldAorQ09ORklHX1NORF9BRDE4ODlfT1BMMz15CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldApAQCAtODkwLDYgKzEwMTQsMTAgQEAKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAogCiAjCisjIFBDTUNJQSBkZXZpY2VzCisjCisKKyMKICMgR1NDIGRldmljZXMKICMKIENPTkZJR19TTkRfSEFSTU9OWT15CkBAIC05MDUsMTIgKzEwMzMsMTIgQEAKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKQEAgLTkxOCwxNCArMTA0NiwxMiBAQAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogCiAjCkBAIC05NDgsMTMgKzEwNzQsMTEgQEAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CkBAIC0xMDIwLDggKzExNDQsOCBAQAogIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CkBAIC0xMDU4LDcgKzExODIsNyBAQAogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldApAQCAtMTA2Niw3ICsxMTkwLDcgQEAKIENPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTX0ZTPXkKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKQEAgLTEwODEsOCArMTIwNSwxMSBAQAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjUsNyArMTI1Miw3IEBACiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKIENPTkZJR19ORlNEX1RDUD15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKQEAgLTExMzMsMTAgKzEyNjAsMTYgQEAKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTM9bQorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExNTMsNTAgKzEyODYsNTAgQEAKICMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PXkKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX09QUk9GSUxFPW0KIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTIwNCw3ICsxMzM3LDcgQEAKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE1CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CkBAIC0xMjE3LDQyICsxMzUwLDQzIEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1JPREFUQT15CisjIENPTkZJR19ERUJVR19ST0RBVEEgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC0xMjYxLDcgKzEzOTUsOSBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZTIzYzRlMS4uYzExYTViYyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTI4OCw4ICsyODgsMTEgQEAKIAlERUZJTkUoQVNNX1BHRF9FTlRSWV9TSVpFLCBQR0RfRU5UUllfU0laRSk7CiAJREVGSU5FKEFTTV9QTURfRU5UUllfU0laRSwgUE1EX0VOVFJZX1NJWkUpOwogCURFRklORShBU01fUFRFX0VOVFJZX1NJWkUsIFBURV9FTlRSWV9TSVpFKTsKKwlERUZJTkUoQVNNX1BGTl9QVEVfU0hJRlQsIFBGTl9QVEVfU0hJRlQpOwogCURFRklORShBU01fUFRfSU5JVElBTCwgUFRfSU5JVElBTCk7CiAJREVGSU5FKEFTTV9QQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJREVGSU5FKEFTTV9QQUdFX1NJWkVfRElWNjQsIFBBR0VfU0laRS82NCk7CisJREVGSU5FKEFTTV9QQUdFX1NJWkVfRElWMTI4LCBQQUdFX1NJWkUvMTI4KTsKIAlCTEFOSygpOwogCURFRklORShFWENEQVRBX0lQLCBvZmZzZXRvZihzdHJ1Y3QgZXhjZXB0aW9uX2RhdGEsIGZhdWx0X2lwKSk7CiAJREVGSU5FKEVYQ0RBVEFfU1BBQ0UsIG9mZnNldG9mKHN0cnVjdCBleGNlcHRpb25fZGF0YSwgZmF1bHRfc3BhY2UpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKaW5kZXggMzYwYjczOS4uYzA1N2FkNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKQEAgLTQsNyArNCw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBIZWxnZSBEZWxsZXIgKDA3LTEzLTE5OTkpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+ICgwNy0xMy0xOTk5KQogICogQ29weXJpZ2h0IChDKSAxOTk5IFN1U0UgR21iSCBOdWVybmJlcmcKICAqIENvcHlyaWdodCAoQykgMjAwMCBQaGlsaXBwIFJ1bXBmIChwcnVtcGZAdHV4Lm9yZykKICAqCkBAIC0zNTgsNSArMzU4LDUgQEAKIAlpZiAoIXBhcmlzY19jYWNoZV9mbHVzaF90aHJlc2hvbGQpCiAJCXBhcmlzY19jYWNoZV9mbHVzaF90aHJlc2hvbGQgPSBGTFVTSF9USFJFU0hPTEQ7CiAKLQlwcmludGsoIlNldHRpbmcgY2FjaGUgZmx1c2ggdGhyZXNob2xkIHRvICV4ICglZCBDUFVzIG9ubGluZSlcbiIsIHBhcmlzY19jYWNoZV9mbHVzaF90aHJlc2hvbGQsIG51bV9vbmxpbmVfY3B1cygpKTsKKwlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIGNhY2hlIGZsdXNoIHRocmVzaG9sZCB0byAleCAoJWQgQ1BVcyBvbmxpbmUpXG4iLCBwYXJpc2NfY2FjaGVfZmx1c2hfdGhyZXNob2xkLCBudW1fb25saW5lX2NwdXMoKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDdjOTVkNzYuLmQ5ZTUzY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCkBAIC01MDIsMTggKzUwMiwyMCBAQAogCSAqIGFsbCBJTFAzMiBwcm9jZXNzZXMgYW5kIGFsbCB0aGUga2VybmVsIGZvciBtYWNoaW5lcyB3aXRoCiAJICogdW5kZXIgNEdCIG9mIG1lbW9yeSkgKi8KIAkubWFjcm8JCUwzX3B0ZXAgcGdkLHB0ZSxpbmRleCx2YSxmYXVsdAorI2lmIFBUX05MRVZFTFMgPT0gMyAvKiB3ZSBtaWdodCBoYXZlIGEgMi1MZXZlbCBzY2hlbWUsIGUuZy4gd2l0aCAxNmtiIHBhZ2Ugc2l6ZSAqLwogCWV4dHJkLHUJCVx2YSw2My1BU01fUEdESVJfU0hJRlQsQVNNX0JJVFNfUEVSX1BHRCxcaW5kZXgKIAljb3B5CQklcjAsXHB0ZQotCWV4dHJkLHUsKj0JXHZhLDMxLDMyLCVyMAorCWV4dHJkLHUsKj0JXHZhLDYzLUFTTV9QR0RJUl9TSElGVCw2NC1BU01fUEdESVJfU0hJRlQsJXIwCiAJbGR3LHMJCVxpbmRleChccGdkKSxccGdkCi0JZXh0cmQsdSwqPQlcdmEsMzEsMzIsJXIwCisJZXh0cmQsdSwqPQlcdmEsNjMtQVNNX1BHRElSX1NISUZULDY0LUFTTV9QR0RJUl9TSElGVCwlcjAKIAliYiw+PSxuCQlccGdkLF9QeERfUFJFU0VOVF9CSVQsXGZhdWx0Ci0JZXh0cmQsdSwqPQlcdmEsMzEsMzIsJXIwCisJZXh0cmQsdSwqPQlcdmEsNjMtQVNNX1BHRElSX1NISUZULDY0LUFTTV9QR0RJUl9TSElGVCwlcjAKIAlzaGxkCQlccGdkLFB4RF9WQUxVRV9TSElGVCxcaW5kZXgKLQlleHRyZCx1LCo9CVx2YSwzMSwzMiwlcjAKKwlleHRyZCx1LCo9CVx2YSw2My1BU01fUEdESVJfU0hJRlQsNjQtQVNNX1BHRElSX1NISUZULCVyMAogCWNvcHkJCVxpbmRleCxccGdkCi0JZXh0cmQsdSwqPD4JXHZhLDMxLDMyLCVyMAorCWV4dHJkLHUsKjw+CVx2YSw2My1BU01fUEdESVJfU0hJRlQsNjQtQVNNX1BHRElSX1NISUZULCVyMAogCWxkbwkJQVNNX1BHRF9QTURfT0ZGU0VUKFxwZ2QpLFxwZ2QKKyNlbmRpZgogCUwyX3B0ZXAJCVxwZ2QsXHB0ZSxcaW5kZXgsXHZhLFxmYXVsdAogCS5lbmRtCiAKQEAgLTU2MywxMCArNTY1LDE4IEBACiAJZXh0cmQsdSwqPSAJXHB0ZSxfUEFHRV9HQVRFV0FZX0JJVCszMiwxLCVyMAogCWRlcGQJCSVyMCwxMSwyLFxwcm90CS8qIElmIEdhdGV3YXksIFNldCBQTDIgdG8gMCAqLwogCi0JLyogR2V0IHJpZCBvZiBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpaXRsYnQgYW5kIGlkdGxidCAqLworCS8qIEVuZm9yY2UgdW5jYWNoZWFibGUgcGFnZXMuCisJICogVGhpcyBzaG91bGQgT05MWSBiZSB1c2UgZm9yIE1NSU8gb24gUEEgMi4wIG1hY2hpbmVzLgorCSAqIE1lbW9yeS9ETUEgaXMgY2FjaGUgY29oZXJlbnQgb24gYWxsIFBBMi4wIG1hY2hpbmVzIHdlIHN1cHBvcnQKKwkgKiAodGhhdCBtZWFucyBULWNsYXNzIGlzIE5PVCBzdXBwb3J0ZWQpIGFuZCB0aGUgbWVtb3J5IGNvbnRyb2xsZXJzCisJICogb24gbW9zdCBvZiB0aG9zZSBtYWNoaW5lcyBvbmx5IGhhbmRsZXMgY2FjaGUgdHJhbnNhY3Rpb25zLgorCSAqLworCWV4dHJkLHUsKj0JXHB0ZSxfUEFHRV9OT19DQUNIRV9CSVQrMzIsMSwlcjAKKwlkZXBpCQkxLDEyLDEsXHByb3QKIAotCWRlcGQJCSVyMCw2MyxQQUdFX1NISUZULFxwdGUKLQlleHRyZCxzCQlccHRlLCg2My1QQUdFX1NISUZUKSsoNjMtNTgpLDY0LVBBR0VfU0hJRlQsXHB0ZQorCS8qIERyb3AgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWl0bGJ0IGFuZCBpZHRsYnQgKi8KKwlleHRyZCx1CQlccHRlLCg2My1BU01fUEZOX1BURV9TSElGVCkrKDYzLTU4KSw2NC1QQUdFX1NISUZULFxwdGUKKwlkZXBkaQkJX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxULDYzLDYzLTU4LFxwdGUKIAkuZW5kbQogCiAJLyogSWRlbnRpY2FsIG1hY3JvIHRvIG1ha2VfaW5zZXJ0X3RsYiBhYm92ZSwgZXhjZXB0IGl0CkBAIC01ODQsOSArNTk0LDggQEAKIAogCS8qIEdldCByaWQgb2YgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWl0bGJhICovCiAKLQlkZXBpCQkwLDMxLFBBR0VfU0hJRlQsXHB0ZQorCWRlcGkJCV9QQUdFX1NJWkVfRU5DT0RJTkdfREVGQVVMVCwzMSxBU01fUEZOX1BURV9TSElGVCxccHRlCiAJZXh0cnUJCVxwdGUsMjQsMjUsXHB0ZQotCiAJLmVuZG0KIAogCS8qIFRoaXMgaXMgZm9yIElMUDMyIFBBMi4wIG9ubHkuICBUaGUgVExCIGluc2VydGlvbiBuZWVkcwpAQCAtMTIwMSwxMCArMTIxMCw5IEBACiAJICovCiAKIAkvKiBhZGp1c3QgaXNyL2lvci4gKi8KLQotCWV4dHJkLHUgICAgICAgICAlcjE2LDYzLDcsJXIxICAgIC8qIGdldCBoaWdoIGJpdHMgZnJvbSBpc3IgZm9yIGlvciAqLwotCWRlcGQgICAgICAgICAgICAlcjEsMzEsNywlcjE3ICAgIC8qIGRlcG9zaXQgdGhlbSBpbnRvIGlvciAqLwotCWRlcGRpICAgICAgICAgICAwLDYzLDcsJXIxNiAgICAgIC8qIGNsZWFyIHRoZW0gZnJvbSBpc3IgKi8KKwlleHRyZCx1ICAgICAgICAgJXIxNiw2MyxTUEFDRUlEX1NISUZULCVyMQkvKiBnZXQgaGlnaCBiaXRzIGZyb20gaXNyIGZvciBpb3IgKi8KKwlkZXBkICAgICAgICAgICAgJXIxLDMxLFNQQUNFSURfU0hJRlQsJXIxNwkvKiBkZXBvc2l0IHRoZW0gaW50byBpb3IgKi8KKwlkZXBkaSAgICAgICAgICAgMCw2MyxTUEFDRUlEX1NISUZULCVyMTYJCS8qIGNsZWFyIHRoZW0gZnJvbSBpc3IgKi8KICNlbmRpZgogCVNUUkVHICAgICAgICAgICAlcjE2LCBQVF9JU1IoJXIyOSkKIAlTVFJFRyAgICAgICAgICAgJXIxNywgUFRfSU9SKCVyMjkpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUwppbmRleCAwYjQ3YWZjLi4zZTc5ZTYyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKQEAgLTc2LDE2ICs3NiwxNiBAQAogCW10Y3RsCQklcjQsJWNyMjQJLyogSW5pdGlhbGl6ZSBrZXJuZWwgcm9vdCBwb2ludGVyICovCiAJbXRjdGwJCSVyNCwlY3IyNQkvKiBJbml0aWFsaXplIHVzZXIgcm9vdCBwb2ludGVyICovCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZiBQVF9OTEVWRUxTID09IDMKIAkvKiBTZXQgcG1kIGluIHBnZCAqLwogCWxvYWQzMgkJUEEocG1kMCksJXI1CiAJc2hyZCAgICAgICAgICAgICVyNSxQeERfVkFMVUVfU0hJRlQsJXIzCQotICAgICAgICBsZG8gICAgICAgICAgICAgKFB4RF9GTEFHX1BSRVNFTlQrUHhEX0ZMQUdfVkFMSUQpKCVyMyksJXIzCQorCWxkbwkJKFB4RF9GTEFHX1BSRVNFTlQrUHhEX0ZMQUdfVkFMSUQpKCVyMyksJXIzCiAJc3R3CQklcjMsQVNNX1BHRF9FTlRSWSpBU01fUEdEX0VOVFJZX1NJWkUoJXI0KQogCWxkbwkJQVNNX1BNRF9FTlRSWSpBU01fUE1EX0VOVFJZX1NJWkUoJXI1KSwlcjQKICNlbHNlCiAJLyogMi1sZXZlbCBwYWdlIHRhYmxlLCBzbyBwbWQgPT0gcGdkICovCi0gICAgICAgIGxkbyAgICAgICAgICAgICBBU01fUEdEX0VOVFJZKkFTTV9QR0RfRU5UUllfU0laRSglcjQpLCVyNAorCWxkbwkJQVNNX1BHRF9FTlRSWSpBU01fUEdEX0VOVFJZX1NJWkUoJXI0KSwlcjQKICNlbmRpZgogCiAJLyogRmlsbCBpbiBwbWQgd2l0aCBlbm91Z2ggcHRlIGRpcmVjdG9yaWVzICovCkBAIC05OSw3ICs5OSw3IEBACiAJc3R3CQklcjMsMCglcjQpCiAJbGRvCQkoQVNNX1BBR0VfU0laRSA+PiBQeERfVkFMVUVfU0hJRlQpKCVyMyksJXIzCiAJYWRkaWIsPgkJLTEsJXIxLDFiCi0jaWZkZWYgQ09ORklHXzY0QklUCisjaWYgUFRfTkxFVkVMUyA9PSAzCiAJbGRvICAgICAgICAgICAgIEFTTV9QTURfRU5UUllfU0laRSglcjQpLCVyNAogI2Vsc2UKIAlsZG8gICAgICAgICAgICAgQVNNX1BHRF9FTlRSWV9TSVpFKCVyNCksJXI0CkBAIC0xMDcsMTMgKzEwNywxNCBAQAogCiAKIAkvKiBOb3cgaW5pdGlhbGl6ZSB0aGUgUFRFcyB0aGVtc2VsdmVzICovCi0JbGRvCQlfUEFHRV9LRVJORUwoJXIwKSwlcjMgLyogSGFyZHdpcmVkIDAgcGh5cyBhZGRyIHN0YXJ0ICovCisJbGRvCQkwK19QQUdFX0tFUk5FTCglcjApLCVyMyAvKiBIYXJkd2lyZWQgMCBwaHlzIGFkZHIgc3RhcnQgKi8KKwlsZGkJCSgxPDwoS0VSTkVMX0lOSVRJQUxfT1JERVItUEFHRV9TSElGVCkpLCVyMTEgLyogUEZOIGNvdW50ICovCiAJbG9hZDMyCQlQQShwZzApLCVyMQogCiAkcGd0X2ZpbGxfbG9vcDoKIAlTVFJFR00gICAgICAgICAgJXIzLEFTTV9QVEVfRU5UUllfU0laRSglcjEpCi0JbGRvCQlBU01fUEFHRV9TSVpFKCVyMyksJXIzCi0JYmIsPj0JCSVyMywzMS1LRVJORUxfSU5JVElBTF9PUkRFUiwkcGd0X2ZpbGxfbG9vcAorCWxkbwkJKDE8PFBGTl9QVEVfU0hJRlQpKCVyMyksJXIzIC8qIGFkZCBvbmUgUEZOICovCisJYWRkaWIsPgkJLTEsJXIxMSwkcGd0X2ZpbGxfbG9vcAogCW5vcAogCiAJLyogTG9hZCB0aGUgcmV0dXJuIGFkZHJlc3MuLi5lci4uLmNyYXNoICduIGJ1cm4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCA3ZTg5OGZkLi44Mzg0YmY5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaW5pdF90YXNrLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2luaXRfdGFzay5jCkBAIC01MywxNyArNTMsMTcgQEAKIAlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaW5pdF90YXNrIikpKSA9CiAJCXsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07CiAKLSNpZmRlZiBfX0xQNjRfXworI2lmIFBUX05MRVZFTFMgPT0gMwogLyogTk9URTogVGhpcyBsYXlvdXQgZXhhY3RseSBjb25mb3JtcyB0byB0aGUgaHlicmlkIEwyL0wzIHBhZ2UgdGFibGUgbGF5b3V0CiAgKiB3aXRoIHRoZSBmaXJzdCBwbWQgYWRqYWNlbnQgdG8gdGhlIHBnZCBhbmQgYmVsb3cgaXQuIGdjYyBkb2Vzbid0IGFjdHVhbGx5CiAgKiBndWFyYW50ZWUgdGhhdCBnbG9iYWwgb2JqZWN0cyB3aWxsIGJlIGxhaWQgb3V0IGluIG1lbW9yeSBpbiB0aGUgc2FtZSBvcmRlciAKICAqIGFzIHRoZSBvcmRlciBvZiBkZWNsYXJhdGlvbiwgc28gcHV0IHRoZXNlIGluIGRpZmZlcmVudCBzZWN0aW9ucyBhbmQgdXNlCiAgKiB0aGUgbGlua2VyIHNjcmlwdCB0byBvcmRlciB0aGVtLiAqLwotcG1kX3QgcG1kMFtQVFJTX1BFUl9QTURdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKFBBR0VfU0laRSkpKSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YS52bTAucG1kIikpKSA9IHsgezB9LCB9OwotCitwbWRfdCBwbWQwW1BUUlNfUEVSX1BNRF0gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEudm0wLnBtZCIpLCBhbGlnbmVkKFBBR0VfU0laRSkpKTsKICNlbmRpZgotcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChQQUdFX1NJWkUpKSkgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEudm0wLnBnZCIpKSkgPSB7IHswfSwgfTsKLXB0ZV90IHBnMFtQVF9JTklUSUFMICogUFRSU19QRVJfUFRFXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChQQUdFX1NJWkUpKSkgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEudm0wLnB0ZSIpKSkgID0geyB7MH0sIH07CisKK3BnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF0gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEudm0wLnBnZCIpLCBhbGlnbmVkKFBBR0VfU0laRSkpKTsKK3B0ZV90IHBnMFtQVF9JTklUSUFMICogUFRSU19QRVJfUFRFXSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YS52bTAucHRlIiksIGFsaWduZWQoUEFHRV9TSVpFKSkpOwogCiAvKgogICogSW5pdGlhbCB0YXNrIHN0cnVjdHVyZS4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFjYWNoZS5TCmluZGV4IDdhNGYwN2UuLmY2MDA1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhY2FjaGUuUwpAQCAtNjUsNyArNjUsNyBAQAogCSAqLwogCiAJLyogcGN4dF9zc21fYnVnCS0gcmVsaWVkIHVwb24gdHJhbnNsYXRpb24hIFBBIDIuMCBBcmNoLiBGLTQgYW5kIEYtNSAqLwotCXJzbQlQU1dfU01fSSwgJXIxOQkJLyogc2F2ZSBJLWJpdCBzdGF0ZSAqLworCXJzbQkJUFNXX1NNX0ksICVyMTkJCS8qIHNhdmUgSS1iaXQgc3RhdGUgKi8KIAlsb2FkMzIJCVBBKDFmKSwgJXIxCiAJbm9wCiAJbm9wCkBAIC04NCw4ICs4NCw3IEBACiAJcmZpCiAJbm9wCiAKLTE6ICAgICAgbGRpbAkJTCVQQShjYWNoZV9pbmZvKSwgJXIxCi0JbGRvCQlSJVBBKGNhY2hlX2luZm8pKCVyMSksICVyMQorMTogICAgICBsb2FkMzIJCVBBKGNhY2hlX2luZm8pLCAlcjEKIAogCS8qIEZsdXNoIEluc3RydWN0aW9uIFRsYiAqLwogCkBAIC0yMTIsOCArMjExLDcgQEAKIAkuZW50cnkKIAogCW10c3AJCSVyMCwgJXNyMQotCWxkaWwJCUwlY2FjaGVfaW5mbywgJXIxCi0JbGRvCQlSJWNhY2hlX2luZm8oJXIxKSwgJXIxCisJbG9hZDMyCQljYWNoZV9pbmZvLCAlcjEKIAogCS8qIEZsdXNoIEluc3RydWN0aW9uIENhY2hlICovCiAKQEAgLTI1NCw4ICsyNTIsNyBAQAogCS5lbnRyeQogCiAJbXRzcAkJJXIwLCAlc3IxCi0JbGRpbAkJTCVjYWNoZV9pbmZvLCAlcjEKLQlsZG8JCVIlY2FjaGVfaW5mbyglcjEpLCAlcjEKKwlsb2FkMzIgCQljYWNoZV9pbmZvLCAlcjEKIAogCS8qIEZsdXNoIERhdGEgQ2FjaGUgKi8KIApAQCAtMzAzLDcgKzMwMCw4IEBACiAJICovCiAKIAlsZGQJCTAoJXIyNSksICVyMTkKLQlsZGkJCTMyLCAlcjEgICAgICAgICAgICAgICAgIC8qIFBBR0VfU0laRS8xMjggPT0gMzIgKi8KKwlsZGkJCUFTTV9QQUdFX1NJWkVfRElWMTI4LCAlcjEKKwogCWxkdwkJNjQoJXIyNSksICVyMAkJLyogcHJlZmV0Y2ggMSBjYWNoZWxpbmUgYWhlYWQgKi8KIAlsZHcJCTEyOCglcjI1KSwgJXIwCQkvKiBwcmVmZXRjaCAyICovCiAKQEAgLTM2OCw3ICszNjYsNyBAQAogCSAqIHVzZSBsZGQvc3RkIG9uIGEgMzIgYml0IGtlcm5lbC4KIAkgKi8KIAlsZHcJCTAoJXIyNSksICVyMTkKLQlsZGkJCTY0LCAlcjEJCS8qIFBBR0VfU0laRS82NCA9PSA2NCAqLworCWxkaQkJQVNNX1BBR0VfU0laRV9ESVY2NCwgJXIxCiAKIDE6CiAJbGR3CQk0KCVyMjUpLCAlcjIwCkBAIC00NjEsNiArNDU5LDcgQEAKIAlzdWIJCSVyMjUsICVyMSwgJXIyMwkJLyogbW92ZSBwaHlzaWNhbCBhZGRyIGludG8gbm9uIHNoYWRvd2VkIHJlZyAqLwogCiAJbGRpbAkJTCUoVE1QQUxJQVNfTUFQX1NUQVJUKSwgJXIyOAorCS8qIEZJWE1FIGZvciBkaWZmZXJlbnQgcGFnZSBzaXplcyAhPSA0ayAqLwogI2lmZGVmIENPTkZJR182NEJJVAogCWV4dHJkLHUJCSVyMjYsNTYsMzIsICVyMjYJCS8qIGNvbnZlcnQgcGh5cyBhZGRyIHRvIHRsYiBpbnNlcnQgZm9ybWF0ICovCiAJZXh0cmQsdQkJJXIyMyw1NiwzMiwgJXIyMwkJLyogY29udmVydCBwaHlzIGFkZHIgdG8gdGxiIGluc2VydCBmb3JtYXQgKi8KQEAgLTU1MSw2ICs1NTAsNyBAQAogI2lmZGVmIENPTkZJR182NEJJVAogI2lmIChUTVBBTElBU19NQVBfU1RBUlQgPj0gMHg4MDAwMDAwMCkKIAlkZXBkaQkJMCwgMzEsMzIsICVyMjgJCS8qIGNsZWFyIGFueSBzaWduIGV4dGVuc2lvbiAqLworCS8qIEZJWE1FOiBwYWdlIHNpemUgZGVwZW5kZW5kICovCiAjZW5kaWYKIAlleHRyZCx1CQklcjI2LCA1NiwzMiwgJXIyNgkvKiBjb252ZXJ0IHBoeXMgYWRkciB0byB0bGIgaW5zZXJ0IGZvcm1hdCAqLwogCWRlcGQJCSVyMjUsIDYzLDIyLCAlcjI4CS8qIEZvcm0gYWxpYXNlZCB2aXJ0dWFsIGFkZHJlc3MgJ3RvJyAqLwpAQCAtNTY2LDEwICs1NjYsMTAgQEAKIAlwZHRsYgkJMCglcjI4KQogCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JbGRpCQkzMiwgJXIxCQkJLyogUEFHRV9TSVpFLzEyOCA9PSAzMiAqLworCWxkaQkJQVNNX1BBR0VfU0laRV9ESVYxMjgsICVyMQogCiAJLyogUFJFRkVUQ0ggKFdyaXRlKSBoYXMgbm90ICh5ZXQpIGJlZW4gcHJvdmVuIHRvIGhlbHAgaGVyZSAqLwotLyogI2RlZmluZQlQUkVGRVRDSFdfT1AJbGRkCQkyNTYoJTApLCAlcjAgKi8KKwkvKiAjZGVmaW5lCVBSRUZFVENIV19PUAlsZGQJCTI1NiglMCksICVyMCAqLwogCiAxOglzdGQJCSVyMCwgMCglcjI4KQogCXN0ZAkJJXIwLCA4KCVyMjgpCkBAIC01OTEsOCArNTkxLDcgQEAKIAlsZG8JCTEyOCglcjI4KSwgJXIyOAogCiAjZWxzZQkvKiAhIENPTkZJR182NEJJVCAqLwotCi0JbGRpCQk2NCwgJXIxCQkJLyogUEFHRV9TSVpFLzY0ID09IDY0ICovCisJbGRpCQlBU01fUEFHRV9TSVpFX0RJVjY0LCAlcjEKIAogMToKIAlzdHcJCSVyMCwgMCglcjI4KQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jCmluZGV4IDQ3Y2E1YzAuLmZjMTA3YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIEVYUE9SVF9TWU1CT0woX194Y2hnOCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYwppbmRleCBkMTVhMWQ1Li44YjVkZjk4IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMKQEAgLTIzMSw2ICsyMzEsMTQgQEAKIAkJCShsb2ZmX3QpaGlnaF9sZW4gPDwgMzIgfCBsb3dfbGVuLCBhZHZpY2UpOwogfQogCithc21saW5rYWdlIGxvbmcgcGFyaXNjX3N5bmNfZmlsZV9yYW5nZShpbnQgZmQsCisJCQl1MzIgaGlfb2ZmLCB1MzIgbG9fb2ZmLCB1MzIgaGlfbmJ5dGVzLCB1MzIgbG9fbmJ5dGVzLAorCQkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiBzeXNfc3luY19maWxlX3JhbmdlKGZkLCAobG9mZl90KWhpX29mZiA8PCAzMiB8IGxvX29mZiwKKwkJCShsb2ZmX3QpaGlfbmJ5dGVzIDw8IDMyIHwgbG9fbmJ5dGVzLCBmbGFncyk7Cit9CisKIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfYWxsb2NfaHVnZXBhZ2VzKGludCBrZXksIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCBwcm90LCBpbnQgZmxhZykKIHsKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCmluZGV4IGFmODhhZmUuLjQ3OWQ5YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwpAQCAtNTUsNyArNTUsNyBAQAogCSAqIHBvaW50ZXJzLgogCSAqLwogCi0JLmFsaWduIDQwOTYKKwkuYWxpZ24gQVNNX1BBR0VfU0laRQogbGludXhfZ2F0ZXdheV9wYWdlOgogCiAgICAgICAgIC8qIEFERFJFU1MgMHgwMCB0byAweGIwID0gMTc2IGJ5dGVzIC8gNCBieXRlcyBwZXIgaW5zbiA9IDQ0IGluc25zICovCkBAIC02MzIsNyArNjMyLDcgQEAKIGVuZF9jb21wYXJlX2FuZF9zd2FwOgogCiAJLyogTWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBpcyBwbGFjZWQgb24gdGhpcyBwYWdlICovCi0JLmFsaWduIDQwOTYKKwkuYWxpZ24gQVNNX1BBR0VfU0laRQogCS5leHBvcnQgZW5kX2xpbnV4X2dhdGV3YXlfcGFnZQogZW5kX2xpbnV4X2dhdGV3YXlfcGFnZToKIApAQCAtNjUyLDcgKzY1Miw3IEBACiAKIAkuc2VjdGlvbiAucm9kYXRhLCJhIgogCi0JLmFsaWduIDQwOTYKKwkuYWxpZ24gQVNNX1BBR0VfU0laRQogCS8qIExpZ2h0LXdlaWdodC1zeXNjYWxsIHRhYmxlICovCiAJLyogU3RhcnQgb2YgbHdzIHRhYmxlLiAqLwogCS5leHBvcnQgbHdzX3RhYmxlCkBAIC02NjIsMTQgKzY2MiwxNCBAQAogCUxXU19FTlRSWShjb21wYXJlX2FuZF9zd2FwNjQpCS8qIDEgLSBFTEY2NCBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCAqLwogCS8qIEVuZCBvZiBsd3MgdGFibGUgKi8KIAotCS5hbGlnbiA0MDk2CisJLmFsaWduIEFTTV9QQUdFX1NJWkUKIAkuZXhwb3J0IHN5c19jYWxsX3RhYmxlCiAuTHN5c19jYWxsX3RhYmxlOgogc3lzX2NhbGxfdGFibGU6CiAjaW5jbHVkZSAic3lzY2FsbF90YWJsZS5TIgogCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JLmFsaWduIDQwOTYKKwkuYWxpZ24gQVNNX1BBR0VfU0laRQogCS5leHBvcnQgc3lzX2NhbGxfdGFibGU2NAogLkxzeXNfY2FsbF90YWJsZTY0Ogogc3lzX2NhbGxfdGFibGU2NDoKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IGJiZWViNjEuLmUyN2I0MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtMTMsNyArMTMsNyBAQAogICogICAgQ29weXJpZ2h0IChDKSAyMDAxIEhlbGdlIERlbGxlciA8ZGVsbGVyIGF0IHBhcmlzYy1saW51eC5vcmc+CiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZCBhdCBwYXJpc2MtbGludXgub3JnPgogICogICAgQ29weXJpZ2h0IChDKSAyMDAyIFJhbmRvbHBoIENodW5nIDx0YXVzcSB3aXRoIHBhcmlzYy1saW51eC5vcmc+Ci0gKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgS3lsZSBNY01hcnRpbiA8a3lsZSBhdCBwYXJpc2MtbGludXgub3JnPgogICoKICAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzkzLDUgKzM5MywxMSBAQAogCUVOVFJZX1NBTUUocmVhZGxpbmthdCkJCS8qIDI4NSAqLwogCUVOVFJZX1NBTUUoZmNobW9kYXQpCiAJRU5UUllfU0FNRShmYWNjZXNzYXQpCisJRU5UUllfU0FNRSh1bnNoYXJlKQorCUVOVFJZX0NPTVAoc2V0X3JvYnVzdF9saXN0KQorCUVOVFJZX0NPTVAoZ2V0X3JvYnVzdF9saXN0KQkvKiAyOTAgKi8KKwlFTlRSWV9TQU1FKHNwbGljZSkKKwlFTlRSWV9PVVJTKHN5bmNfZmlsZV9yYW5nZSkKKwlFTlRSWV9TQU1FKHRlZSkKIAkvKiBOb3RoaW5nIHlldCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZkNjQzNmEuLjk0ZGNjMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02LDYgKzYsNyBAQAogICogICAgQ29weXJpZ2h0IChDKSAyMDAwIE1pY2hhZWwgQW5nIDxtYW5nIHdpdGggc3ViY2Fycmllci5vcmc+CiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDIgUmFuZG9scGggQ2h1bmcgPHRhdXNxIHdpdGggcGFyaXNjLWxpbnV4Lm9yZz4KICAqICAgIENvcHlyaWdodCAoQykgMjAwMyBKYW1lcyBCb3R0b21sZXkgPGplamIgd2l0aCBwYXJpc2MtbGludXgub3JnPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA2IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KICAqCiAgKgogICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI3LDYgKzI4LDcgQEAKIC8qIG5lZWRlZCBmb3IgdGhlIHByb2Nlc3NvciBzcGVjaWZpYyBjYWNoZSBhbGlnbm1lbnQgc2l6ZSAqLwkKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCQogLyogbGQgc2NyaXB0IHRvIG1ha2UgaHBwYSBMaW51eCBrZXJuZWwgKi8KICNpZm5kZWYgQ09ORklHXzY0QklUCkBAIC02OCw3ICs3MCw3IEBACiAgIFJPREFUQQogCiAgIC8qIHdyaXRlYWJsZSAqLwotICAuID0gQUxJR04oNDA5Nik7CQkvKiBNYWtlIHN1cmUgdGhpcyBpcyBwYWdlIGFsaWduZWQgc28KKyAgLiA9IEFMSUdOKEFTTV9QQUdFX1NJWkUpOwkvKiBNYWtlIHN1cmUgdGhpcyBpcyBwYWdlIGFsaWduZWQgc28KICAgCQkJCSAgIHRoYXQgd2UgY2FuIHByb3Blcmx5IGxlYXZlIHRoZXNlCiAJCQkJICAgYXMgd3JpdGFibGUgKi8KICAgZGF0YV9zdGFydCA9IC47CkBAIC04MSwyMyArODMsMTcgQEAKICAgX19zdGFydF9fX3Vud2luZCA9IC47ICAgICAgICAgLyogdW53aW5kIGluZm8gKi8KICAgLlBBUklTQy51bndpbmQgOiB7ICooLlBBUklTQy51bndpbmQpIH0KICAgX19zdG9wX19fdW53aW5kID0gLjsKLSAKKworICAvKiByYXJlbHkgY2hhbmdlZCBkYXRhIGxpa2UgY3B1IG1hcHMgKi8KKyAgLiA9IEFMSUdOKDE2KTsKKyAgLmRhdGEucmVhZF9tb3N0bHkgOiB7ICooLmRhdGEucmVhZF9tb3N0bHkpIH0KKworICAuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwogICAuZGF0YSA6IHsJCQkvKiBEYXRhICovCiAJKiguZGF0YSkKLQkqKC5kYXRhLnZtMC5wbWQpCi0JKiguZGF0YS52bTAucGdkKQotCSooLmRhdGEudm0wLnB0ZSkKIAlDT05TVFJVQ1RPUlMKIAl9CiAKLSAgLiA9IEFMSUdOKDQwOTYpOwotICAvKiBub3NhdmUgZGF0YSBpcyByZWFsbHkgb25seSB1c2VkIGZvciBzb2Z0d2FyZSBzdXNwZW5kLi4uaXQncyBoZXJlCi0gICAqIGp1c3QgaW4gY2FzZSB3ZSBldmVyIGltcGxlbWVudCBpdCAqLwotICBfX25vc2F2ZV9iZWdpbiA9IC47Ci0gIC5kYXRhX25vc2F2ZSA6IHsgKiguZGF0YS5ub3NhdmUpIH0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX25vc2F2ZV9lbmQgPSAuOwotCiAgIC4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9CiAKQEAgLTEwNSwxMiArMTAxLDI5IEBACiAgIC4gPSBBTElHTigxNik7CiAgIC5kYXRhLmxvY2tfYWxpZ25lZCA6IHsgKiguZGF0YS5sb2NrX2FsaWduZWQpIH0KIAotICAvKiByYXJlbHkgY2hhbmdlZCBkYXRhIGxpa2UgY3B1IG1hcHMgKi8KLSAgLiA9IEFMSUdOKDE2KTsKLSAgLmRhdGEucmVhZF9tb3N0bHkgOiB7ICooLmRhdGEucmVhZF9tb3N0bHkpIH0KKyAgLiA9IEFMSUdOKEFTTV9QQUdFX1NJWkUpOworICAvKiBub3NhdmUgZGF0YSBpcyByZWFsbHkgb25seSB1c2VkIGZvciBzb2Z0d2FyZSBzdXNwZW5kLi4uaXQncyBoZXJlCisgICAqIGp1c3QgaW4gY2FzZSB3ZSBldmVyIGltcGxlbWVudCBpdCAqLworICBfX25vc2F2ZV9iZWdpbiA9IC47CisgIC5kYXRhX25vc2F2ZSA6IHsgKiguZGF0YS5ub3NhdmUpIH0KKyAgLiA9IEFMSUdOKEFTTV9QQUdFX1NJWkUpOworICBfX25vc2F2ZV9lbmQgPSAuOwogCiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCisgIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLworICAvKiBwYWdlIHRhYmxlIGVudHJpZXMgbmVlZCB0byBiZSBQQUdFX1NJWkUgYWxpZ25lZCAqLworICAuID0gQUxJR04oQVNNX1BBR0VfU0laRSk7CisgIC5kYXRhLnZtcGFnZXMgOiB7CisJKiguZGF0YS52bTAucG1kKQorCSooLmRhdGEudm0wLnBnZCkKKwkqKC5kYXRhLnZtMC5wdGUpCisJfQorICAuYnNzIDogeyAqKC5ic3MpICooQ09NTU9OKSB9CisgIF9fYnNzX3N0b3AgPSAuOworCisKKyAgLyogYXNzZW1ibGVyIGNvZGUgZXhwZWN0cyBpbml0X3Rhc2sgdG8gYmUgMTZrIGFsaWduZWQgKi8KICAgLiA9IEFMSUdOKDE2Mzg0KTsgCQkvKiBpbml0X3Rhc2sgKi8KICAgLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQogCkBAIC0xMjYsNiArMTM5LDcgQEAKICAgLmRsdCA6IHsgKiguZGx0KSB9CiAjZW5kaWYKIAorICAvKiByZXNlcnZlIHNwYWNlIGZvciBpbnRlcnJ1cHQgc3RhY2sgYnkgYWxpZ25pbmcgX19pbml0KiB0byAxNmsgKi8KICAgLiA9IEFMSUdOKDE2Mzg0KTsKICAgX19pbml0X2JlZ2luID0gLjsKICAgLmluaXQudGV4dCA6IHsgCkBAIC0xNjYsNyArMTgwLDcgQEAKICAgICAgZnJvbSAuYWx0aW5zdHJ1Y3Rpb25zIGFuZCAuZWhfZnJhbWUgKi8KICAgLmV4aXQudGV4dCA6IHsgKiguZXhpdC50ZXh0KSB9CiAgIC5leGl0LmRhdGEgOiB7ICooLmV4aXQuZGF0YSkgfQotICAuID0gQUxJR04oNDA5Nik7CisgIC4gPSBBTElHTihBU01fUEFHRV9TSVpFKTsKICAgX19pbml0cmFtZnNfc3RhcnQgPSAuOwogICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQogICBfX2luaXRyYW1mc19lbmQgPSAuOwpAQCAtMTc0LDE0ICsxODgsMTAgQEAKICAgX19wZXJfY3B1X3N0YXJ0ID0gLjsKICAgLmRhdGEucGVyY3B1ICA6IHsgKiguZGF0YS5wZXJjcHUpIH0KICAgX19wZXJfY3B1X2VuZCA9IC47Ci0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKEFTTV9QQUdFX1NJWkUpOwogICBfX2luaXRfZW5kID0gLjsKICAgLyogZnJlZWQgYWZ0ZXIgaW5pdCBlbmRzIGhlcmUgKi8KIAkKLSAgX19ic3Nfc3RhcnQgPSAuOwkJLyogQlNTICovCi0gIC5ic3MgOiB7ICooLmJzcykgKihDT01NT04pIH0KLSAgX19ic3Nfc3RvcCA9IC47IAotCiAgIF9lbmQgPSAuIDsKIAogICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMgYi9hcmNoL3BhcmlzYy9tbS9mYXVsdC5jCmluZGV4IDBhZDk0NWQuLjY0Nzg1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCWJyZWFrOwogCSAgICAgIGNhc2UgVk1fRkFVTFRfU0lHQlVTOgogCQkvKgotCQkgKiBXZSBoaXQgYSBoYXJlZCBtYXBwaW5nIG91dHNpZGUgb2YgdGhlIGZpbGUsIG9yIHNvbWUKKwkJICogV2UgaGl0IGEgc2hhcmVkIG1hcHBpbmcgb3V0c2lkZSBvZiB0aGUgZmlsZSwgb3Igc29tZQogCQkgKiBvdGhlciB0aGluZyBoYXBwZW5lZCB0byB1cyB0aGF0IG1hZGUgdXMgdW5hYmxlIHRvCiAJCSAqIGhhbmRsZSB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgogCQkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCAzNzk2YmU2Li42MzE3MTI1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC02LDYgKzYsNyBAQAogICogICAgY2hhbmdlZCBieSBQaGlsaXBwIFJ1bXBmCiAgKiAgQ29weXJpZ2h0IDE5OTkgUGhpbGlwcCBSdW1wZiAocHJ1bXBmQHR1eC5vcmcpCiAgKiAgQ29weXJpZ2h0IDIwMDQgUmFuZG9scGggQ2h1bmcgKHRhdXNxQGRlYmlhbi5vcmcpCisgKiAgQ29weXJpZ2h0IDIwMDYgSGVsZ2UgRGVsbGVyIChkZWxsZXJAZ214LmRlKQogICoKICAqLwogCkBAIC0zNzEsOCArMzcyLDggQEAKIAogdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JCisJdW5zaWduZWQgbG9uZyBhZGRyLCBpbml0X2JlZ2luLCBpbml0X2VuZDsKKwogCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6ICIpOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTApAQCAtMzk1LDggKzM5NiwxMSBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKICNlbmRpZgogCQotCWFkZHIgPSAodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbik7Ci0JZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpOyBhZGRyICs9IFBBR0VfU0laRSkgeworCS8qIGFsaWduIF9faW5pdF9iZWdpbiBhbmQgX19pbml0X2VuZCB0byBwYWdlIHNpemUsCisJICAgaWdub3JpbmcgbGlua2VyIHNjcmlwdCB3aGVyZSB3ZSBtaWdodCBoYXZlIHRyaWVkIHRvIHNhdmUgUkFNICovCisJaW5pdF9iZWdpbiA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pKTsKKwlpbml0X2VuZCAgID0gUEFHRV9BTElHTigodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpKTsKKwlmb3IgKGFkZHIgPSBpbml0X2JlZ2luOyBhZGRyIDwgaW5pdF9lbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlmcmVlX3BhZ2UoYWRkcik7CkBAIC00MDcsNyArNDExLDcgQEAKIAkvKiBzZXQgdXAgYSBuZXcgbGVkIHN0YXRlIG9uIHN5c3RlbXMgc2hpcHBlZCBMRUQgU3RhdGUgcGFuZWwgKi8KIAlwZGNfY2hhc3Npc19zZW5kX3N0YXR1cyhQRENfQ0hBU1NJU19ESVJFQ1RfQkNPTVBMRVRFKTsKIAkKLQlwcmludGsoIiVsdWsgZnJlZWRcbiIsICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCAtICZfX2luaXRfYmVnaW4pID4+IDEwKTsKKwlwcmludGsoIiVsdWsgZnJlZWRcbiIsIChpbml0X2VuZCAtIGluaXRfYmVnaW4pID4+IDEwKTsKIH0KIAogCkBAIC02MzksMTEgKzY0MywxMyBAQAogCQkJCSAqIE1hcCB0aGUgZmF1bHQgdmVjdG9yIHdyaXRhYmxlIHNvIHdlIGNhbgogCQkJCSAqIHdyaXRlIHRoZSBIUE1DIGNoZWNrc3VtLgogCQkJCSAqLworI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQogCQkJCWlmIChhZGRyZXNzID49IHJvX3N0YXJ0ICYmIGFkZHJlc3MgPCByb19lbmQKIAkJCQkJCQkmJiBhZGRyZXNzICE9IGZ2X2FkZHIKIAkJCQkJCQkmJiBhZGRyZXNzICE9IGd3X2FkZHIpCiAJCQkJICAgIHB0ZSA9IF9fbWtfcHRlKGFkZHJlc3MsIFBBR0VfS0VSTkVMX1JPKTsKIAkJCQllbHNlCisjZW5kaWYKIAkJCQkgICAgcHRlID0gX19ta19wdGUoYWRkcmVzcywgcGdwcm90KTsKIAogCQkJCWlmIChhZGRyZXNzID49IGVuZF9wYWRkcikKQEAgLTg3NCw4ICs4ODAsNyBAQAogCQkJZmx1c2hfdGxiX2FsbCgpOyAvKiBmbHVzaF90bGJfYWxsKCkgY2FsbHMgcmVjeWNsZV9zaWRzKCkgKi8KIAkJCXNwaW5fbG9jaygmc2lkX2xvY2spOwogCQl9Ci0JCWlmIChmcmVlX3NwYWNlX2lkcyA9PSAwKQotCQkJQlVHKCk7CisJCUJVR19PTihmcmVlX3NwYWNlX2lkcyA9PSAwKTsKIAl9CiAKIAlmcmVlX3NwYWNlX2lkcy0tOwpAQCAtODk5LDggKzkwNCw3IEBACiAKIAlzcGluX2xvY2soJnNpZF9sb2NrKTsKIAotCWlmICgqZGlydHlfc3BhY2Vfb2Zmc2V0ICYgKDFMIDw8IGluZGV4KSkKLQkgICAgQlVHKCk7IC8qIGF0dGVtcHQgdG8gZnJlZSBzcGFjZSBpZCB0d2ljZSAqLworCUJVR19PTigqZGlydHlfc3BhY2Vfb2Zmc2V0ICYgKDFMIDw8IGluZGV4KSk7IC8qIGF0dGVtcHQgdG8gZnJlZSBzcGFjZSBpZCB0d2ljZSAqLwogCiAJKmRpcnR5X3NwYWNlX29mZnNldCB8PSAoMUwgPDwgaW5kZXgpOwogCWRpcnR5X3NwYWNlX2lkcysrOwpAQCAtOTc1LDcgKzk3OSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY3ljbGVfbmRpcnR5Owogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVjeWNsZV9kaXJ0eV9hcnJheVtTSURfQVJSQVlfU0laRV07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJlY3ljbGVfaW51c2UgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCByZWN5Y2xlX2ludXNlOwogCiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKIHsKQEAgLTk4NCw5ICs5ODgsNyBAQAogCWRvX3JlY3ljbGUgPSAwOwogCXNwaW5fbG9jaygmc2lkX2xvY2spOwogCWlmIChkaXJ0eV9zcGFjZV9pZHMgPiBSRUNZQ0xFX1RIUkVTSE9MRCkgewotCSAgICBpZiAocmVjeWNsZV9pbnVzZSkgewotCQlCVUcoKTsgIC8qIEZJWE1FOiBVc2UgYSBzZW1hcGhvcmUvd2FpdCBxdWV1ZSBoZXJlICovCi0JICAgIH0KKwkgICAgQlVHX09OKHJlY3ljbGVfaW51c2UpOyAgLyogRklYTUU6IFVzZSBhIHNlbWFwaG9yZS93YWl0IHF1ZXVlIGhlcmUgKi8KIAkgICAgZ2V0X2RpcnR5X3NpZHMoJnJlY3ljbGVfbmRpcnR5LHJlY3ljbGVfZGlydHlfYXJyYXkpOwogCSAgICByZWN5Y2xlX2ludXNlKys7CiAJICAgIGRvX3JlY3ljbGUrKzsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2lvcmVtYXAuYyBiL2FyY2gvcGFyaXNjL21tL2lvcmVtYXAuYwppbmRleCAwZGIxMjgxLi4yNzM4NDU2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW9yZW1hcC5jCkBAIC0yLDcgKzIsNyBAQAogICogYXJjaC9wYXJpc2MvbW0vaW9yZW1hcC5jCiAgKgogICogKEMpIENvcHlyaWdodCAxOTk1IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqIChDKSBDb3B5cmlnaHQgMjAwMSBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+CisgKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNiBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+CiAgKiAoQykgQ29weXJpZ2h0IDIwMDUgS3lsZSBNY01hcnRpbiA8a3lsZUBwYXJpc2MtbGludXgub3JnPgogICovCiAKQEAgLTEzOCw2ICsxMzgsNyBAQAogCWlmICgocGh5c19hZGRyID49IDB4MDAwODAwMDAgJiYgZW5kIDwgMHgwMDBmZmZmZikgfHwKIAkgICAgKHBoeXNfYWRkciA+PSAweDAwNTAwMDAwICYmIGVuZCA8IDB4MDNiZmZmZmYpKSB7CiAJCXBoeXNfYWRkciB8PSBGX0VYVEVORCgweGZjMDAwMDAwKTsKKwkJZmxhZ3MgfD0gX1BBR0VfTk9fQ0FDSEU7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggMmNkYzM1Yy4uNjcyOWM5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTM2Niw2ICszNjYsNyBAQAogCXNlbGVjdCBVM19EQVJUCiAJc2VsZWN0IE1QSUNfQlJPS0VOX1UzCiAJc2VsZWN0IEdFTkVSSUNfVEJTWU5DCisJc2VsZWN0IFBQQ185NzBfTkFQCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBQUENfUFJFUApAQCAtMzgzLDYgKzM4NCw3IEBACiAJc2VsZWN0IE1QSUNfQlJPS0VOX1UzCiAJc2VsZWN0IEdFTkVSSUNfVEJTWU5DCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCisJc2VsZWN0IFBQQ185NzBfTkFQCiAJZGVmYXVsdCBuCiAJaGVscAogICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcGxlIDk3MEZYIEV2YWx1YXRpb24gQm9hcmQuCkBAIC00NTcsNiArNDU5LDEwIEBACiAJYm9vbAogCWRlZmF1bHQgbgogCitjb25maWcgUFBDXzk3MF9OQVAKKwlib29sCisJZGVmYXVsdCBuCisKIHNvdXJjZSAiZHJpdmVycy9jcHVmcmVxL0tjb25maWciCiAKIGNvbmZpZyBDUFVfRlJFUV9QTUFDCkBAIC02NDksNiArNjU1LDExIEBACiAJZGVwZW5kcyBvbiBQUEM2NAogCWRlZmF1bHQgeSBpZiBTTVAgJiYgUFBDX1BTRVJJRVMKIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNCIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogY29uZmlnIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFBQQzY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggNmVjODRkMy4uZWQ1YjI2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTA0LDYgKzEwNCwxMCBAQAogQ0ZMQUdTCQkrPSAtbXN0cmluZwogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfNnh4KSx5KQorQ0ZMQUdTCQkrPSAtbWNwdT1wb3dlcnBjCitlbmRpZgorCiBjcHUtYXMtJChDT05GSUdfUFBDNjRCUklER0UpCSs9IC1XYSwtbXBwYzY0YnJpZGdlCiBjcHUtYXMtJChDT05GSUdfNHh4KQkJKz0gLVdhLC1tNDA1CiBjcHUtYXMtJChDT05GSUdfNnh4KQkJKz0gLVdhLC1tYWx0aXZlYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwppbmRleCBmZTIyZTU0Li5kYmU0MjFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CkBAIC01NSw2ICs1Niw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKQEAgLTY5LDEwICs3MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTg0LDcgKzgyLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTkzLDYgKzkwLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEyNiw2ICsxMjQsNyBAQAogQ09ORklHX01NSU9fTlZSQU09eQogQ09ORklHX0NFTExfSUlDPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAogCkBAIC0xNjcsNyArMTY2LDYgQEAKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CkBAIC0xODQsNyArMTgyLDYgQEAKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yMjYsNiArMjIzLDcgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yNDIsNiArMjQwLDcgQEAKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19ORVRGSUxURVI9eQpAQCAtNjMyLDYgKzYzMSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzE3LDcgKzcxNyw2IEBACiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTczNiw5ICs3MzUsNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtNzY2LDEwICs3NjMsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTgxOCw2ICs4MTEsMTkgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogQ09ORklHX0lORklOSUJBTkQ9eQpAQCAtODM0LDYgKzg0MCwxMSBAQAogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg4OSw3ICs5MDAsNiBAQAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCmluZGV4IDJjM2ZkMjAuLmE0NTYyNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCi0jIEZyaSBGZWIgMTAgMTc6MzM6MDggMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMQorIyBXZWQgQXByIDE5IDEzOjI0OjM3IDIwMDYKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtOSw2ICs5LDcgQEAKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15CiBDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz00CiAKQEAgLTUzLDYgKzU1LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldApAQCAtNjcsMTAgKzcwLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtODIsNyArODEsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC05MSw2ICs4OSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xODUsNyArMTg0LDYgQEAKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yMjcsNiArMjI1LDcgQEAKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVRfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMjM4LDYgKzIzNyw4IEBACiAjCiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTI2MSw2ICsyNjIsNyBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiAjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIAogIwpAQCAtNTEzLDYgKzUxNSw3IEBACiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD1tCiBDT05GSUdfTURfUkFJRDU9eQorIyBDT05GSUdfTURfUkFJRDVfUkVTSEFQRSBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KQEAgLTc2MSw3ICs3NjQsNiBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTc3Miw2ICs3NzQsNyBAQAogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKIENPTkZJR19BR1A9bQorIyBDT05GSUdfQUdQX1ZJQSBpcyBub3Qgc2V0CiBDT05GSUdfQUdQX1VOSU5PUlRIPW0KICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CkBAIC04MTMsNyArODE2LDYgQEAKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldApAQCAtODMyLDkgKzgzNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC04NjIsMTAgKzg2Miw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODc0LDYgKzg3MCw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04ODMsNiArODgwLDcgQEAKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQogQ09ORklHX0ZCX01BQ01PREVTPXkKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15CiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldApAQCAtOTAxLDcgKzg5OSw2IEBACiBDT05GSUdfRkJfTlZJRElBX0kyQz15CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9SQURFT049eQogQ09ORklHX0ZCX1JBREVPTl9JMkM9eQogIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk1OCw5ICs5NTUsMTEgQEAKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKICMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAogCkBAIC05NzcsNiArOTc2LDcgQEAKICMgUENJIGRldmljZXMKICMKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKQEAgLTEwMDksNiArMTAwOSw3IEBACiAjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CkBAIC0xMDQxLDYgKzEwNDIsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTEwNjgsNyArMTA3MCw2IEBACiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPXkKIApAQCAtMTEyNiwxNSArMTEyNyw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiBDT05GSUdfVVNCX0NBVEM9bQpAQCAtMTE5NCw2ICsxMTg2LDcgQEAKIENPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQogQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCkBAIC0xMjM3LDE3ICsxMjMwLDIzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIyBSZWFsIFRpbWUgQ2xvY2sKICMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xMzE5LDcgKzEzMTgsNiBAQAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwppbmRleCAxODE2YTQ2Li5hOTVlNDU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzYKLSMgV2VkIE1hciAxNSAxNjoxOTo1MiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIFdlZCBBcHIgMTkgMTE6NDY6NDQgMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC05LDYgKzksNyBAQAogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MzIKIApAQCAtNTUsNiArNTcsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CkBAIC02OSwxMCArNzIsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC04NCw3ICs4Myw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTkzLDYgKzkxLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE2NSw3ICsxNjQsNiBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTIwNyw2ICsyMDUsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yMTgsNiArMjE3LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjM2LDExICsyMzcsMTQgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQEAgLTI2MiwyMCArMjY2LDE5IEBACiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KICMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQpAQCAtNDc5LDYgKzQ4Miw3IEBACiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD1tCiBDT05GSUdfTURfUkFJRDU9eQorIyBDT05GSUdfTURfUkFJRDVfUkVTSEFQRSBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KQEAgLTcwMiw3ICs3MDYsNiBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTc1MSwxMCArNzU0LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03NzksNiArNzc4LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzk2LDYgKzc5NiwxMSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CkBAIC04MDUsNiArODEwLDExIEBACiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODc4LDcgKzg4OCw2IEBACiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBkYWFmMDM4Li41OGU2OGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzIKLSMgRnJpIEZlYiAxMCAxNzozMzozMiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIFdlZCBBcHIgMTkgMTE6NDg6MDAgMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC05LDYgKzksNyBAQAogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTEyOAogCkBAIC01NSw2ICs1Nyw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0NQVVNFVFM9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CkBAIC02OSwxMCArNzIsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC04NCw3ICs4Myw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTkzLDYgKzkxLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE4OCw3ICsxODcsNiBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTIzNSw2ICsyMzMsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yNDYsNiArMjQ1LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjcyLDYgKzI3Myw3IEBACiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KICMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogCiAjCkBAIC01MTksNiArNTIxLDcgQEAKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KIENPTkZJR19NRF9SQUlENT15CisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtNzUwLDYgKzc1Myw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzY3LDcgKzc3MSw5IEBACiAjIENPTkZJR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKK0NPTkZJR19IVkNfRFJJVkVSPXkKIENPTkZJR19IVkNfQ09OU09MRT15CisjIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0CiBDT05GSUdfSFZDUz1tCiAKICMKQEAgLTc3OSw3ICs3ODUsNiBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTgzMCw3ICs4MzUsNiBAQAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CkBAIC04NDksOSArODUzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTg3OSwxMCArODgxLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC04OTEsNiArODg5LDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTkwMCw2ICs4OTksNyBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiBDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC05MTksNyArOTE5LDYgQEAKIENPTkZJR19GQl9NQVRST1hfRz15CiAjIENPTkZJR19GQl9NQVRST1hfSTJDIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFEPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAogQ09ORklHX0ZCX1JBREVPTj15CiBDT05GSUdfRkJfUkFERU9OX0kyQz15CiAjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldApAQCAtOTY4LDYgKzk2Nyw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTA0OCwxNSArMTA0OCw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMTA5LDYgKzExMDAsMTEgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIENPTkZJR19JTkZJTklCQU5EPW0KQEAgLTExMjEsMTIgKzExMTcsMTMgQEAKICMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIyBSZWFsIFRpbWUgQ2xvY2sKICMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xMjAyLDcgKzExOTksNiBAQAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMGNjMDk5NS4uODAzODU4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC0yMCw3ICsyMCw3IEBACiAJCQkJICAgZmlybXdhcmUubyBzeXNmcy5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSB2ZHNvNjQvCiBvYmotJChDT05GSUdfQUxUSVZFQykJCSs9IHZlY2VtdS5vIHZlY3Rvci5vCi1vYmotJChDT05GSUdfUE9XRVI0KQkJKz0gaWRsZV9wb3dlcjQubworb2JqLSQoQ09ORklHX1BQQ185NzBfTkFQKQkrPSBpZGxlX3Bvd2VyNC5vCiBvYmotJChDT05GSUdfUFBDX09GKQkJKz0gb2ZfZGV2aWNlLm8gcHJvbV9wYXJzZS5vCiBwcm9jZnMtJChDT05GSUdfUFBDNjQpCQk6PSBwcm9jX3BwYzY0Lm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gJChwcm9jZnMteSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA1NGI0OGYzLi44Zjg1YzVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC05MSw2ICs5MSw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIAlERUZJTkUoVElfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKTsKKwlERUZJTkUoVElfTE9DQUxfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgbG9jYWxfZmxhZ3MpKTsKIAlERUZJTkUoVElfUFJFRU1QVCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KSk7CiAJREVGSU5FKFRJX1RBU0ssIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgdGFzaykpOwogI2lmZGVmIENPTkZJR19QUEMzMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDM5ZTM0OGEuLjNmNzE4MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTU3LDYgKzU3LDggQEAKIAkJCQkgUFBDX0ZFQVRVUkVfU01UIHwgUFBDX0ZFQVRVUkVfSUNBQ0hFX1NOT09QKQogI2RlZmluZSBDT01NT05fVVNFUl9QT1dFUjVfUExVUwkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9QT1dFUjVfUExVU3xcCiAJCQkJIFBQQ19GRUFUVVJFX1NNVCB8IFBQQ19GRUFUVVJFX0lDQUNIRV9TTk9PUCkKKyNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI2CShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX0FSQ0hfMl8wNSB8XAorCQkJCSBQUENfRkVBVFVSRV9TTVQgfCBQUENfRkVBVFVSRV9JQ0FDSEVfU05PT1ApCiAjZGVmaW5lIENPTU1PTl9VU0VSX0JPT0tFCShQUENfRkVBVFVSRV8zMiB8IFBQQ19GRUFUVVJFX0hBU19NTVUgfCBcCiAJCQkJIFBQQ19GRUFUVVJFX0JPT0tFKQogCkBAIC0yNjMsNiArMjY1LDIwIEBACiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXI1KyIsCiAJfSwKKwl7CS8qIFBvd2VyNiAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwM2UwMDAwLAorCQkuY3B1X25hbWUJCT0gIlBPV0VSNiIsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI2LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjYsCisJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLm51bV9wbWNzCQk9IDYsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXI0LAorCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvcG93ZXI2IiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKKwkJLnBsYXRmb3JtCQk9ICJwb3dlcjYiLAorCX0sCiAJewkvKiBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCiAJCS5wdnJfdmFsdWUJCT0gMHgwMDcwMDAwMCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggMjExZDcyNi4uNzY0ZDA3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAlpZiAocCkKIAkJZWxmY29yZWhkcl9hZGRyID0gbWVtcGFyc2UocCwgJnApOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJlbGZjb3JlaGRyPSIsIHBhcnNlX2VsZmNvcmVoZHIpOwogI2VuZGlmCkBAIC03MSw3ICs3MSw3IEBACiAJaWYgKHApCiAJCXNhdmVkX21heF9wZm4gPSAobWVtcGFyc2UocCwgJnApID4+IFBBR0VfU0hJRlQpIC0gMTsKIAotCXJldHVybiAwOworCXJldHVybiAxOwogfQogX19zZXR1cCgic2F2ZW1heG1lbT0iLCBwYXJzZV9zYXZlbWF4bWVtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IGIzYTk3OTQuLjg4NjZmZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKQEAgLTEyOCwzNyArMTI4LDM2IEBACiAJc3R3CXIxMiw0KHIxMSkKICNlbmRpZgogCWIJM2YKKwogMjoJLyogaWYgZnJvbSBrZXJuZWwsIGNoZWNrIGludGVycnVwdGVkIERPWkUvTkFQIG1vZGUgYW5kCiAgICAgICAgICAqIGNoZWNrIGZvciBzdGFjayBvdmVyZmxvdwogICAgICAgICAgKi8KKwlsd3oJcjksVEhSRUFEX0lORk8tVEhSRUFEKHIxMikKKwljbXBsdwlyMSxyOQkJCS8qIGlmIHIxIDw9IGN1cnJlbnQtPnRocmVhZF9pbmZvICovCisJYmxlLQlzdGFja19vdmYJCS8qIHRoZW4gdGhlIGtlcm5lbCBzdGFjayBvdmVyZmxvd2VkICovCis1OgogI2lmZGVmIENPTkZJR182eHgKLQltZnNwcglyMTEsU1BSTl9ISUQwCi0JbXRjcglyMTEKLUJFR0lOX0ZUUl9TRUNUSU9OCi0JYnQtCTgsNGYJCQkvKiBDaGVjayBET1pFICovCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DQU5fRE9aRSkKLUJFR0lOX0ZUUl9TRUNUSU9OCi0JYnQtCTksNGYJCQkvKiBDaGVjayBOQVAgKi8KLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NBTl9OQVApCisJdG9waHlzKHI5LHI5KQkJCS8qIGNoZWNrIGxvY2FsIGZsYWdzICovCisJbHd6CXIxMixUSV9MT0NBTF9GTEFHUyhyOSkKKwltdGNyZgkweDAxLHIxMgorCWJ0LQkzMS1UTEZfTkFQUElORyw0ZgogI2VuZGlmIC8qIENPTkZJR182eHggKi8KIAkuZ2xvYmwgdHJhbnNmZXJfdG9faGFuZGxlcl9jb250CiB0cmFuc2Zlcl90b19oYW5kbGVyX2NvbnQ6Ci0JbHd6CXIxMSxUSFJFQURfSU5GTy1USFJFQUQocjEyKQotCWNtcGx3CXIxLHIxMQkJCS8qIGlmIHIxIDw9IGN1cnJlbnQtPnRocmVhZF9pbmZvICovCi0JYmxlLQlzdGFja19vdmYJCS8qIHRoZW4gdGhlIGtlcm5lbCBzdGFjayBvdmVyZmxvd2VkICovCiAzOgogCW1mbHIJcjkKIAlsd3oJcjExLDAocjkpCQkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgaGFuZGxlciAqLwogCWx3eglyOSw0KHI5KQkJLyogd2hlcmUgdG8gZ28gd2hlbiBkb25lICovCi0JRklYX1NSUjEocjEwLHIxMikKIAltdHNwcglTUFJOX1NSUjAscjExCiAJbXRzcHIJU1BSTl9TUlIxLHIxMAogCW10bHIJcjkKIAlTWU5DCiAJUkZJCQkJCS8qIGp1bXAgdG8gaGFuZGxlciwgZW5hYmxlIE1NVSAqLwogCi0jaWZkZWYgQ09ORklHXzZ4eAkKLTQ6CWIJcG93ZXJfc2F2ZV82eHhfcmVzdG9yZQorI2lmZGVmIENPTkZJR182eHgKKzQ6CXJsd2lubQlyMTIscjEyLDAsfl9UTEZfTkFQUElORworCXN0dwlyMTIsVElfTE9DQUxfRkxBR1MocjkpCisJYglwb3dlcl9zYXZlXzZ4eF9yZXN0b3JlCiAjZW5kaWYKIAogLyoKQEAgLTE2NywxMCArMTY2LDEwIEBACiAgKi8KIHN0YWNrX292ZjoKIAkvKiBzb21ldGltZXMgd2UgdXNlIGEgc3RhdGljYWxseS1hbGxvY2F0ZWQgc3RhY2ssIHdoaWNoIGlzIE9LLiAqLwotCWxpcwlyMTEsX2VuZEBoCi0Jb3JpCXIxMSxyMTEsX2VuZEBsCi0JY21wbHcJcjEscjExCi0JYmxlCTNiCQkJLyogcjEgPD0gJl9lbmQgaXMgT0sgKi8KKwlsaXMJcjEyLF9lbmRAaAorCW9yaQlyMTIscjEyLF9lbmRAbAorCWNtcGx3CXIxLHIxMgorCWJsZQk1YgkJCS8qIHIxIDw9ICZfZW5kIGlzIE9LICovCiAJU0FWRV9OVkdQUlMocjExKQogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlsaXMJcjEsaW5pdF90aHJlYWRfdW5pb25AaGEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggYTVhZTA0YS4uYjdkMTQwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTM3NiwxMSArMzc2LDI4IEBACiAJYmwJaGRscjsJCQkJCVwKIAliCS5yZXRfZnJvbV9leGNlcHQKIAorLyoKKyAqIExpa2UgU1REX0VYQ0VQVElPTl9DT01NT04sIGJ1dCBmb3IgZXhjZXB0aW9ucyB0aGF0IGNhbiBvY2N1cgorICogaW4gdGhlIGlkbGUgdGFzayBhbmQgdGhlcmVmb3JlIG5lZWQgdGhlIHNwZWNpYWwgaWRsZSBoYW5kbGluZy4KKyAqLworI2RlZmluZSBTVERfRVhDRVBUSU9OX0NPTU1PTl9JRExFKHRyYXAsIGxhYmVsLCBoZGxyKQlcCisJLmFsaWduCTc7CQkJCQlcCisJLmdsb2JsIGxhYmVsIyNfY29tbW9uOwkJCQlcCitsYWJlbCMjX2NvbW1vbjoJCQkJCQlcCisJRVhDRVBUSU9OX1BST0xPR19DT01NT04odHJhcCwgUEFDQV9FWEdFTik7CVwKKwlGSU5JU0hfTkFQOwkJCQkJXAorCURJU0FCTEVfSU5UUzsJCQkJCVwKKwlibAkuc2F2ZV9udmdwcnM7CQkJCVwKKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJXAorCWJsCWhkbHI7CQkJCQlcCisJYgkucmV0X2Zyb21fZXhjZXB0CisKICNkZWZpbmUgU1REX0VYQ0VQVElPTl9DT01NT05fTElURSh0cmFwLCBsYWJlbCwgaGRscikJXAogCS5hbGlnbgk3OwkJCQkJXAogCS5nbG9ibCBsYWJlbCMjX2NvbW1vbjsJCQkJXAogbGFiZWwjI19jb21tb246CQkJCQkJXAogCUVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OKHRyYXAsIFBBQ0FfRVhHRU4pOwlcCisJRklOSVNIX05BUDsJCQkJCVwKIAlESVNBQkxFX0lOVFM7CQkJCQlcCiAJYmwJLnBwYzY0X3J1bmxhdGNoX29uOwkJCVwKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJXApAQCAtMzg4LDYgKzQwNSwyNSBAQAogCWIJLnJldF9mcm9tX2V4Y2VwdF9saXRlCiAKIC8qCisgKiBXaGVuIHRoZSBpZGxlIGNvZGUgaW4gcG93ZXI0X2lkbGUgcHV0cyB0aGUgQ1BVIGludG8gTkFQIG1vZGUsCisgKiBpdCBoYXMgdG8gZG8gc28gaW4gYSBsb29wLCBhbmQgcmVsaWVzIG9uIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQKKyAqIGFuZCBkZWNyZW1lbnRlciBpbnRlcnJ1cHQgZW50cnkgY29kZSB0byBnZXQgaXQgb3V0IG9mIHRoZSBsb29wLgorICogSXQgc2V0cyB0aGUgX1RMRl9OQVBQSU5HIGJpdCBpbiBjdXJyZW50X3RocmVhZF9pbmZvKCktPmxvY2FsX2ZsYWdzCisgKiB0byBzaWduYWwgdGhhdCBpdCBpcyBpbiB0aGUgbG9vcCBhbmQgbmVlZHMgaGVscCB0byBnZXQgb3V0LgorICovCisjaWZkZWYgQ09ORklHX1BQQ185NzBfTkFQCisjZGVmaW5lIEZJTklTSF9OQVAJCQkJXAorQkVHSU5fRlRSX1NFQ1RJT04JCQkJXAorCWNscnJkaQlyMTEscjEsVEhSRUFEX1NISUZUOwkJXAorCWxkCXI5LFRJX0xPQ0FMX0ZMQUdTKHIxMSk7CQlcCisJYW5kaS4JcjEwLHI5LF9UTEZfTkFQUElORzsJCVwKKwlibmVsCXBvd2VyNF9maXh1cF9uYXA7CQlcCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DQU5fTkFQKQorI2Vsc2UKKyNkZWZpbmUgRklOSVNIX05BUAorI2VuZGlmCisKKy8qCiAgKiBTdGFydCBvZiBwU2VyaWVzIHN5c3RlbSBpbnRlcnJ1cHQgcm91dGluZXMKICAqLwogCS4gPSAweDEwMApAQCAtNzcyLDYgKzgwOCw3IEBACiAJLmdsb2JsIG1hY2hpbmVfY2hlY2tfY29tbW9uCiBtYWNoaW5lX2NoZWNrX2NvbW1vbjoKIAlFWENFUFRJT05fUFJPTE9HX0NPTU1PTigweDIwMCwgUEFDQV9FWE1DKQorCUZJTklTSF9OQVAKIAlESVNBQkxFX0lOVFMKIAlibAkuc2F2ZV9udmdwcnMKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECkBAIC03ODMsNyArODIwLDcgQEAKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweGIwMCwgdHJhcF8wYiwgLnVua25vd25fZXhjZXB0aW9uKQogCVNURF9FWENFUFRJT05fQ09NTU9OKDB4ZDAwLCBzaW5nbGVfc3RlcCwgLnNpbmdsZV9zdGVwX2V4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweGUwMCwgdHJhcF8wZSwgLnVua25vd25fZXhjZXB0aW9uKQotCVNURF9FWENFUFRJT05fQ09NTU9OKDB4ZjAwLCBwZXJmb3JtYW5jZV9tb25pdG9yLCAucGVyZm9ybWFuY2VfbW9uaXRvcl9leGNlcHRpb24pCisJU1REX0VYQ0VQVElPTl9DT01NT05fSURMRSgweGYwMCwgcGVyZm9ybWFuY2VfbW9uaXRvciwgLnBlcmZvcm1hbmNlX21vbml0b3JfZXhjZXB0aW9uKQogCVNURF9FWENFUFRJT05fQ09NTU9OKDB4MTMwMCwgaW5zdHJ1Y3Rpb25fYnJlYWtwb2ludCwgLmluc3RydWN0aW9uX2JyZWFrcG9pbnRfZXhjZXB0aW9uKQogI2lmZGVmIENPTkZJR19BTFRJVkVDCiAJU1REX0VYQ0VQVElPTl9DT01NT04oMHgxNzAwLCBhbHRpdmVjX2Fzc2lzdCwgLmFsdGl2ZWNfYXNzaXN0X2V4Y2VwdGlvbikKQEAgLTEwMzQsNiArMTA3MSw3IEBACiAJLmdsb2JsIGhhcmR3YXJlX2ludGVycnVwdF9lbnRyeQogaGFyZHdhcmVfaW50ZXJydXB0X2NvbW1vbjoKIAlFWENFUFRJT05fUFJPTE9HX0NPTU1PTigweDUwMCwgUEFDQV9FWEdFTikKKwlGSU5JU0hfTkFQCiBoYXJkd2FyZV9pbnRlcnJ1cHRfZW50cnk6CiAJRElTQUJMRV9JTlRTCiAJYmwJLnBwYzY0X3J1bmxhdGNoX29uCkBAIC0xMDQxLDYgKzEwNzksMTUgQEAKIAlibAkuZG9fSVJRCiAJYgkucmV0X2Zyb21fZXhjZXB0X2xpdGUKIAorI2lmZGVmIENPTkZJR19QUENfOTcwX05BUAorcG93ZXI0X2ZpeHVwX25hcDoKKwlhbmRjCXI5LHI5LHIxMAorCXN0ZAlyOSxUSV9MT0NBTF9GTEFHUyhyMTEpCisJbGQJcjEwLF9MSU5LKHIxKQkJLyogbWFrZSBpZGxlIHRhc2sgZG8gdGhlICovCisJc3RkCXIxMCxfTklQKHIxKQkJLyogZXF1aXZhbGVudCBvZiBhIGJsciAqLworCWJscgorI2VuZGlmCisKIAkuYWxpZ24JNwogCS5nbG9ibCBhbGlnbm1lbnRfY29tbW9uCiBhbGlnbm1lbnRfY29tbW9uOgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGUuYwppbmRleCBlOWYzMjFkLi5kNDkxMDUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGUuYwpAQCAtNTAsOSArNTAsOSBAQAogCiAJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAJd2hpbGUgKDEpIHsKLQkJcHBjNjRfcnVubGF0Y2hfb2ZmKCk7Ci0KIAkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSAmJiAhY3B1X3Nob3VsZF9kaWUoKSkgeworCQkJcHBjNjRfcnVubGF0Y2hfb2ZmKCk7CisKIAkJCWlmIChwcGNfbWQucG93ZXJfc2F2ZSkgewogCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAJCQkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV82eHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV82eHguUwppbmRleCAxMmE0ZWZiLi5iNDVmYTBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfNnh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlXzZ4eC5TCkBAIC0yMiw4ICsyMiw2IEBACiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAotI3VuZGVmIERFQlVHCi0KIAkudGV4dAogCiAvKgpAQCAtMTA5LDEyICsxMDcsNiBAQAogCWRjYmYJMCxyNAogCWRjYmYJMCxyNAogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfTkFQX0RJU0FCTEVfTDJfUFIpCi0jaWZkZWYgREVCVUcKLQlsaXMJcjYsbmFwX2VudGVyX2NvdW50QGhhCi0JbHd6CXI0LG5hcF9lbnRlcl9jb3VudEBsKHI2KQotCWFkZGkJcjQscjQsMQotCXN0dwlyNCxuYXBfZW50ZXJfY291bnRAbChyNikKLSNlbmRpZgkKIDI6CiBCRUdJTl9GVFJfU0VDVElPTgogCS8qIEdvIHRvIGxvdyBzcGVlZCBtb2RlIG9uIHNvbWUgNzUwRlggKi8KQEAgLTE0NCw0OCArMTM2LDQyIEBACiAJRFNTQUxMCiAJc3luYwogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQUxUSVZFQykKKwlybHdpbm0JcjkscjEsMCwwLDMxLVRIUkVBRF9TSElGVAkvKiBjdXJyZW50IHRocmVhZF9pbmZvICovCisJbHd6CXI4LFRJX0xPQ0FMX0ZMQUdTKHI5KQkvKiBzZXQgbmFwcGluZyBiaXQgKi8KKwlvcmkJcjgscjgsX1RMRl9OQVBQSU5HCS8qIHNvIHdoZW4gd2UgdGFrZSBhbiBleGNlcHRpb24gKi8KKwlzdHcJcjgsVElfTE9DQUxfRkxBR1MocjkpCS8qIGl0IHdpbGwgcmV0dXJuIHRvIG91ciBjYWxsZXIgKi8KIAltZm1zcglyNwogCW9yaQlyNyxyNyxNU1JfRUUKIAlvcmlzCXI3LHI3LE1TUl9QT1dAaAotCXN5bmMKLQlpc3luYworMToJc3luYwogCW10bXNyCXI3CiAJaXN5bmMKLQlzeW5jCi0JYmxyCi0JCisJYgkxYgorCiAvKgogICogUmV0dXJuIGZyb20gTkFQL0RPWkUgbW9kZSwgcmVzdG9yZSBzb21lIENQVSBzcGVjaWZpYyByZWdpc3RlcnMsCiAgKiB3ZSBhcmUgY2FsbGVkIHdpdGggRFIvSVIgc3RpbGwgb2ZmIGFuZCByMiBjb250YWluaW5nIHBoeXNpY2FsCi0gKiBhZGRyZXNzIG9mIGN1cnJlbnQuCisgKiBhZGRyZXNzIG9mIGN1cnJlbnQuICBSMTEgcG9pbnRzIHRvIHRoZSBleGNlcHRpb24gZnJhbWUgKHBoeXNpY2FsCisgKiBhZGRyZXNzKS4gIFdlIGhhdmUgdG8gcHJlc2VydmUgcjEwLgogICovCiBfR0xPQkFMKHBvd2VyX3NhdmVfNnh4X3Jlc3RvcmUpCi0JbWZzcHIJcjExLFNQUk5fSElEMAotCXJsd2lubS4JcjExLHIxMSwwLDEwLDgJLyogQ2xlYXIgTkFQICYgY29weSBOQVAgYml0ICFzdGF0ZSB0byBjcjEgRVEgKi8KLQljcm9yCTQqY3IxK2VxLDQqY3IwK2VxLDQqY3IwK2VxCi1CRUdJTl9GVFJfU0VDVElPTgotCXJsd2lubQlyMTEscjExLDAsOSw3CS8qIENsZWFyIERPWkUgKi8KLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NBTl9ET1pFKQotCW10c3ByCVNQUk5fSElEMCwgcjExCisJbHd6CXI5LF9MSU5LKHIxMSkJCS8qIGludGVycnVwdGVkIGluIHBwYzZ4eF9pZGxlOiAqLworCXN0dwlyOSxfTklQKHIxMSkJCS8qIG1ha2UgaXQgZG8gYSBibHIgKi8KIAotI2lmZGVmIERFQlVHCi0JYmVxCWNyMSwxZgotCWxpcwlyMTEsKG5hcF9yZXR1cm5fY291bnQtS0VSTkVMQkFTRSlAaGEKLQlsd3oJcjksbmFwX3JldHVybl9jb3VudEBsKHIxMSkKLQlhZGRpCXI5LHI5LDEKLQlzdHcJcjksbmFwX3JldHVybl9jb3VudEBsKHIxMSkKLTE6Ci0jZW5kaWYKLQkKLQlybHdpbm0JcjkscjEsMCwwLDE4Ci0JdG9waHlzKHI5LHI5KQotCWx3eglyMTEsVElfQ1BVKHI5KQorI2lmZGVmIENPTkZJR19TTVAKKwltZnNwcglyMTIsU1BSTl9TUFJHMworCWx3eglyMTEsVElfQ1BVKHIxMikJCS8qIGdldCBjcHUgbnVtYmVyICogNCAqLwogCXNsd2kJcjExLHIxMSwyCisjZWxzZQorCWxpCXIxMSwwCisjZW5kaWYKIAkvKiBUb2RvIG1ha2Ugc3VyZSBhbGwgdGhlc2UgYXJlIGluIHRoZSBzYW1lIHBhZ2UKLQkgKiBhbmQgbG9hZCByMjIgKEBoYSBwYXJ0ICsgQ1BVIG9mZnNldCkgb25seSBvbmNlCisJICogYW5kIGxvYWQgcjExIChAaGEgcGFydCArIENQVSBvZmZzZXQpIG9ubHkgb25jZQogCSAqLwogQkVHSU5fRlRSX1NFQ1RJT04KLQliZXEJY3IxLDFmCisJbWZzcHIJcjksU1BSTl9ISUQwCisJYW5kaXMuCXI5LHI5LEhJRDBfTkFQQGgKKwliZXEJMWYKIAlhZGRpcwlyOSxyMTEsKG5hcF9zYXZlX21zc2NyMC1LRVJORUxCQVNFKUBoYQogCWx3eglyOSxuYXBfc2F2ZV9tc3NjcjBAbChyOSkKIAltdHNwcglTUFJOX01TU0NSMCwgcjkKQEAgLTIxMCwxMCArMTk2LDMgQEAKIAogX0dMT0JBTChwb3dlcnNhdmVfbG93c3BlZWQpCiAJLmxvbmcJMAotCi0jaWZkZWYgREVCVUcKLV9HTE9CQUwobmFwX2VudGVyX2NvdW50KQotCS5zcGFjZQk0Ci1fR0xPQkFMKG5hcF9yZXR1cm5fY291bnQpCi0JLnNwYWNlCTQKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNC5TCmluZGV4IDZkYWQxYzAuLmQ4NWM3YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9wb3dlcjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI0LlMKQEAgLTM1LDEyICszNSwxNiBAQAogCURTU0FMTAogCXN5bmMKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FMVElWRUMpCisJY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAkvKiBjdXJyZW50IHRocmVhZF9pbmZvICovCisJbGQJcjgsVElfTE9DQUxfRkxBR1MocjkpCS8qIHNldCBuYXBwaW5nIGJpdCAqLworCW9yaQlyOCxyOCxfVExGX05BUFBJTkcJLyogc28gd2hlbiB3ZSB0YWtlIGFuIGV4Y2VwdGlvbiAqLworCXN0ZAlyOCxUSV9MT0NBTF9GTEFHUyhyOSkJLyogaXQgd2lsbCByZXR1cm4gdG8gb3VyIGNhbGxlciAqLwogCW1mbXNyCXI3CiAJb3JpCXI3LHI3LE1TUl9FRQogCW9yaXMJcjcscjcsTVNSX1BPV0BoCi0Jc3luYworMToJc3luYwogCWlzeW5jCiAJbXRtc3JkCXI3CiAJaXN5bmMKLQlzeW5jCi0JYmxyCisJYgkxYgorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKaW5kZXggZDlhN2ZkZS4uNGViYTYwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwpAQCAtNjEsNiArNjEsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tbXVfcmFuZ2VfYWxsb2Moc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5wYWdlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhbGlnbl9vcmRlcikKIHsgCiAJdW5zaWduZWQgbG9uZyBuLCBlbmQsIGksIHN0YXJ0OwpAQCAtOTcsOSArOTgsMjEgQEAKIAkgKi8KIAlpZiAoc3RhcnQgPj0gbGltaXQpCiAJCXN0YXJ0ID0gbGFyZ2VhbGxvYyA/IHRibC0+aXRfbGFyZ2VoaW50IDogdGJsLT5pdF9oaW50OwotCQorCiAgYWdhaW46CiAKKwlpZiAobGltaXQgKyB0YmwtPml0X29mZnNldCA+IG1hc2spIHsKKwkJbGltaXQgPSBtYXNrIC0gdGJsLT5pdF9vZmZzZXQgKyAxOworCQkvKiBJZiB3ZSdyZSBjb25zdHJhaW5lZCBvbiBhZGRyZXNzIHJhbmdlLCBmaXJzdCB0cnkKKwkJICogYXQgdGhlIG1hc2tlZCBoaW50IHRvIGF2b2lkIE8obikgc2VhcmNoIGNvbXBsZXhpdHksCisJCSAqIGJ1dCBvbiBzZWNvbmQgcGFzcywgc3RhcnQgYXQgMC4KKwkJICovCisJCWlmICgoc3RhcnQgJiBtYXNrKSA+PSBsaW1pdCB8fCBwYXNzID4gMCkKKwkJCXN0YXJ0ID0gMDsKKwkJZWxzZQorCQkJc3RhcnQgJj0gbWFzazsKKwl9CisKIAluID0gZmluZF9uZXh0X3plcm9fYml0KHRibC0+aXRfbWFwLCBsaW1pdCwgc3RhcnQpOwogCiAJLyogQWxpZ24gYWxsb2NhdGlvbiAqLwpAQCAtMTUwLDE0ICsxNjMsMTQgQEAKIAogc3RhdGljIGRtYV9hZGRyX3QgaW9tbXVfYWxsb2Moc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHZvaWQgKnBhZ2UsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgbnBhZ2VzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ25fb3JkZXIpCisJCSAgICAgICB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGludCBhbGlnbl9vcmRlcikKIHsKIAl1bnNpZ25lZCBsb25nIGVudHJ5LCBmbGFnczsKIAlkbWFfYWRkcl90IHJldCA9IERNQV9FUlJPUl9DT0RFOwotCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJih0YmwtPml0X2xvY2spLCBmbGFncyk7CiAKLQllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKHRibCwgbnBhZ2VzLCBOVUxMLCBhbGlnbl9vcmRlcik7CisJZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyh0YmwsIG5wYWdlcywgTlVMTCwgbWFzaywgYWxpZ25fb3JkZXIpOwogCiAJaWYgKHVubGlrZWx5KGVudHJ5ID09IERNQV9FUlJPUl9DT0RFKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYodGJsLT5pdF9sb2NrKSwgZmxhZ3MpOwpAQCAtMjM2LDcgKzI0OSw3IEBACiAKIGludCBpb21tdV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCi0JCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKwkJdW5zaWduZWQgbG9uZyBtYXNrLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAJZG1hX2FkZHJfdCBkbWFfbmV4dCA9IDAsIGRtYV9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNzQsNyArMjg3LDcgQEAKIAkJdmFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3Mocy0+cGFnZSkgKyBzLT5vZmZzZXQ7CiAJCW5wYWdlcyA9IFBBR0VfQUxJR04odmFkZHIgKyBzbGVuKSAtICh2YWRkciAmIFBBR0VfTUFTSyk7CiAJCW5wYWdlcyA+Pj0gUEFHRV9TSElGVDsKLQkJZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyh0YmwsIG5wYWdlcywgJmhhbmRsZSwgMCk7CisJCWVudHJ5ID0gaW9tbXVfcmFuZ2VfYWxsb2ModGJsLCBucGFnZXMsICZoYW5kbGUsIG1hc2sgPj4gUEFHRV9TSElGVCwgMCk7CiAKIAkJREJHKCIgIC0gdmFkZHI6ICVseCwgc2l6ZTogJWx4XG4iLCB2YWRkciwgc2xlbik7CiAKQEAgLTQ3OSw3ICs0OTIsOCBAQAogICogYnl0ZSB3aXRoaW4gdGhlIHBhZ2UgYXMgdmFkZHIuCiAgKi8KIGRtYV9hZGRyX3QgaW9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgdm9pZCAqdmFkZHIsCi0JCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCXNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIG1hc2ssCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGUgPSBETUFfRVJST1JfQ09ERTsKIAl1bnNpZ25lZCBsb25nIHVhZGRyOwpAQCAtNDkyLDcgKzUwNiw4IEBACiAJbnBhZ2VzID4+PSBQQUdFX1NISUZUOwogCiAJaWYgKHRibCkgewotCQlkbWFfaGFuZGxlID0gaW9tbXVfYWxsb2ModGJsLCB2YWRkciwgbnBhZ2VzLCBkaXJlY3Rpb24sIDApOworCQlkbWFfaGFuZGxlID0gaW9tbXVfYWxsb2ModGJsLCB2YWRkciwgbnBhZ2VzLCBkaXJlY3Rpb24sCisJCQkJCSBtYXNrID4+IFBBR0VfU0hJRlQsIDApOwogCQlpZiAoZG1hX2hhbmRsZSA9PSBETUFfRVJST1JfQ09ERSkgewogCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJpb21tdV9hbGxvYyBmYWlsZWQsICIKQEAgLTUyMSw3ICs1MzYsNyBAQAogICogdG8gdGhlIGRtYSBhZGRyZXNzIChtYXBwaW5nKSBvZiB0aGUgZmlyc3QgcGFnZS4KICAqLwogdm9pZCAqaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHNpemVfdCBzaXplLAotCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQorCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG1hc2ssIGdmcF90IGZsYWcpCiB7CiAJdm9pZCAqcmV0ID0gTlVMTDsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CkBAIC01NTEsNyArNTY2LDggQEAKIAltZW1zZXQocmV0LCAwLCBzaXplKTsKIAogCS8qIFNldCB1cCB0Y2VzIHRvIGNvdmVyIHRoZSBhbGxvY2F0ZWQgcmFuZ2UgKi8KLQltYXBwaW5nID0gaW9tbXVfYWxsb2ModGJsLCByZXQsIG5wYWdlcywgRE1BX0JJRElSRUNUSU9OQUwsIG9yZGVyKTsKKwltYXBwaW5nID0gaW9tbXVfYWxsb2ModGJsLCByZXQsIG5wYWdlcywgRE1BX0JJRElSRUNUSU9OQUwsCisJCQkgICAgICBtYXNrID4+IFBBR0VfU0hJRlQsIG9yZGVyKTsKIAlpZiAobWFwcGluZyA9PSBETUFfRVJST1JfQ09ERSkgewogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXJldCwgb3JkZXIpOwogCQlyZXQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggYmI1Yzk1MC4uNTdkNTYwYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC0yNzIsMTggKzI3MiwyNiBAQAogICogRG9uJ3QgdXNlIHZpcnR1YWwgaXJxcyAwLCAxLCAyIGZvciBkZXZpY2VzLgogICogVGhlIHBjbmV0MzIgZHJpdmVyIGNvbnNpZGVycyBpbnRlcnJ1cHQgbnVtYmVycyA8IDIgdG8gYmUgaW52YWxpZCwKICAqIGFuZCAyIGlzIHRoZSBYSUNTIElQSSBpbnRlcnJ1cHQuCi0gKiBXZSBsaW1pdCB2aXJ0dWFsIGlycXMgdG8gMTcgbGVzcyB0aGFuIE5SX0lSUVMgc28gdGhhdCB3aGVuIHdlCi0gKiBvZmZzZXQgdGhlbSBieSAxNiAodG8gcmVzZXJ2ZSB0aGUgZmlyc3QgMTYgZm9yIElTQSBpbnRlcnJ1cHRzKQotICogd2UgZG9uJ3QgZW5kIHVwIHdpdGggYW4gaW50ZXJydXB0IG51bWJlciA+PSBOUl9JUlFTLgorICogV2UgbGltaXQgdmlydHVhbCBpcnFzIHRvIF9faXJxX29mZmV0X3ZhbHVlIGxlc3MgdGhhbiB2aXJ0X2lycV9tYXggc28KKyAqIHRoYXQgd2hlbiB3ZSBvZmZzZXQgdGhlbSB3ZSBkb24ndCBlbmQgdXAgd2l0aCBhbiBpbnRlcnJ1cHQKKyAqIG51bWJlciA+PSB2aXJ0X2lycV9tYXguCiAgKi8KICNkZWZpbmUgTUlOX1ZJUlRfSVJRCTMKLSNkZWZpbmUgTUFYX1ZJUlRfSVJRCShOUl9JUlFTIC0gTlVNX0lTQV9JTlRFUlJVUFRTIC0gMSkKLSNkZWZpbmUgTlJfVklSVF9JUlFTCShNQVhfVklSVF9JUlEgLSBNSU5fVklSVF9JUlEgKyAxKQorCit1bnNpZ25lZCBpbnQgdmlydF9pcnFfbWF4Oworc3RhdGljIHVuc2lnbmVkIGludCBtYXhfdmlydF9pcnE7CitzdGF0aWMgdW5zaWduZWQgaW50IG5yX3ZpcnRfaXJxczsKIAogdm9pZAogdmlydF9pcnFfaW5pdCh2b2lkKQogewogCWludCBpOworCisJaWYgKCh2aXJ0X2lycV9tYXggPT0gMCkgfHwgKHZpcnRfaXJxX21heCA+IChOUl9JUlFTIC0gMSkpKQorCQl2aXJ0X2lycV9tYXggPSBOUl9JUlFTIC0gMTsKKwltYXhfdmlydF9pcnEgPSB2aXJ0X2lycV9tYXggLSBfX2lycV9vZmZzZXRfdmFsdWU7CisJbnJfdmlydF9pcnFzID0gbWF4X3ZpcnRfaXJxIC0gTUlOX1ZJUlRfSVJRICsgMTsKKwogCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCiAJCXZpcnRfaXJxX3RvX3JlYWxfbWFwW2ldID0gVU5ERUZJTkVEX0lSUTsKIH0KQEAgLTMwOCwxNyArMzE2LDE3IEBACiAJCXJldHVybiByZWFsX2lycTsKIAl9CiAKLQkvKiBtYXAgdG8gYSBudW1iZXIgYmV0d2VlbiBNSU5fVklSVF9JUlEgYW5kIE1BWF9WSVJUX0lSUSAqLworCS8qIG1hcCB0byBhIG51bWJlciBiZXR3ZWVuIE1JTl9WSVJUX0lSUSBhbmQgbWF4X3ZpcnRfaXJxICovCiAJdmlycSA9IHJlYWxfaXJxOwotCWlmICh2aXJxID4gTUFYX1ZJUlRfSVJRKQotCQl2aXJxID0gKHZpcnEgJSBOUl9WSVJUX0lSUVMpICsgTUlOX1ZJUlRfSVJROworCWlmICh2aXJxID4gbWF4X3ZpcnRfaXJxKQorCQl2aXJxID0gKHZpcnEgJSBucl92aXJ0X2lycXMpICsgTUlOX1ZJUlRfSVJROwogCiAJLyogc2VhcmNoIGZvciB0aGlzIG51bWJlciBvciBhIGZyZWUgc2xvdCAqLwogCWZpcnN0X3ZpcnEgPSB2aXJxOwogCXdoaWxlICh2aXJ0X2lycV90b19yZWFsX21hcFt2aXJxXSAhPSBVTkRFRklORURfSVJRKSB7CiAJCWlmICh2aXJ0X2lycV90b19yZWFsX21hcFt2aXJxXSA9PSByZWFsX2lycSkKIAkJCXJldHVybiB2aXJxOwotCQlpZiAoKyt2aXJxID4gTUFYX1ZJUlRfSVJRKQorCQlpZiAoKyt2aXJxID4gbWF4X3ZpcnRfaXJxKQogCQkJdmlycSA9IE1JTl9WSVJUX0lSUTsKIAkJaWYgKHZpcnEgPT0gZmlyc3RfdmlycSkKIAkJCWdvdG8gbm9zcGFjZTsJLyogb29wcywgbm8gZnJlZSBzbG90cyAqLwpAQCAtMzMwLDggKzMzOCw4IEBACiAgbm9zcGFjZToKIAlpZiAoIXdhcm5lZCkgewogCQlwcmludGsoS0VSTl9DUklUICJJbnRlcnJ1cHQgdGFibGUgaXMgZnVsbFxuIik7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkluY3JlYXNlIE5SX0lSUVMgKGN1cnJlbnRseSAlZCkgIgotCQkgICAgICAgImluIHlvdXIga2VybmVsIHNvdXJjZXMgYW5kIHJlYnVpbGQuXG4iLCBOUl9JUlFTKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiSW5jcmVhc2UgdmlydF9pcnFfbWF4IChjdXJyZW50bHkgJWQpICIKKwkJICAgICAgICJpbiB5b3VyIGtlcm5lbCBzb3VyY2VzIGFuZCByZWJ1aWxkLlxuIiwgdmlydF9pcnFfbWF4KTsKIAkJd2FybmVkID0gMTsKIAl9CiAJcmV0dXJuIE5PX0lSUTsKQEAgLTM0OSw4ICszNTcsOCBAQAogCiAJdmlycSA9IHJlYWxfaXJxOwogCi0JaWYgKHZpcnEgPiBNQVhfVklSVF9JUlEpCi0JCXZpcnEgPSAodmlycSAlIE5SX1ZJUlRfSVJRUykgKyBNSU5fVklSVF9JUlE7CisJaWYgKHZpcnEgPiBtYXhfdmlydF9pcnEpCisJCXZpcnEgPSAodmlycSAlIG5yX3ZpcnRfaXJxcykgKyBNSU5fVklSVF9JUlE7CiAKIAlmaXJzdF92aXJxID0gdmlycTsKIApAQCAtMzYwLDcgKzM2OCw3IEBACiAKIAkJdmlycSsrOwogCi0JCWlmICh2aXJxID49IE1BWF9WSVJUX0lSUSkKKwkJaWYgKHZpcnEgPj0gbWF4X3ZpcnRfaXJxKQogCQkJdmlycSA9IDA7CiAKIAl9IHdoaWxlIChmaXJzdF92aXJxICE9IHZpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYwppbmRleCBhZDdhOTAyLi5mNzg4NjYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYwpAQCAtODgsMzQgKzg4LDM0IEBACiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9ICpwLT5haW5zbi5pbnNuOwotCiAJcmVncy0+bXNyIHw9IE1TUl9TRTsKIAotCS8qIHNpbmdsZSBzdGVwIGlubGluZSBpZiBpdCBpcyBhIHRyYXAgdmFyaWFudCAqLwotCWlmIChpc190cmFwKGluc24pKQotCQlyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyOwotCWVsc2UKLQkJcmVncy0+bmlwID0gKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbjsKKwkvKgorCSAqIE9uIHBvd2VycGMgd2Ugc2hvdWxkIHNpbmdsZSBzdGVwIG9uIHRoZSBvcmlnaW5hbAorCSAqIGluc3RydWN0aW9uIGV2ZW4gaWYgdGhlIHByb2JlZCBpbnNuIGlzIGEgdHJhcAorCSAqIHZhcmlhbnQgYXMgdmFsdWVzIGluIHJlZ3MgY291bGQgcGxheSBhIHBhcnQgaW4KKwkgKiBpZiB0aGUgdHJhcCBpcyB0YWtlbiBvciBub3QKKwkgKi8KKwlyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOwogCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOwogCWtjYi0+cHJldl9rcHJvYmUuc2F2ZWRfbXNyID0ga2NiLT5rcHJvYmVfc2F2ZWRfbXNyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKIAlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKIAlrY2ItPmtwcm9iZV9zYXZlZF9tc3IgPSBrY2ItPnByZXZfa3Byb2JlLnNhdmVkX21zcjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7CkBAIC0xNDEsNyArMTQxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGtwcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtwcm9iZSAqcDsKIAlpbnQgcmV0ID0gMDsKQEAgLTMzNCw3ICszMzQsNyBAQAogCQlyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyICsgNDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcG9zdF9rcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKQEAgLTM3MCw3ICszNzAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCmluZGV4IDFiNzM1MDguLjJjYmRlODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogCi0jZGVmaW5lIE1PRFVMRV9WRVJTICIxLjYiCisjZGVmaW5lIE1PRFVMRV9WRVJTICIxLjciCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJscGFyY2ZnIgogCiAvKiAjZGVmaW5lIExQQVJDRkdfREVCVUcgKi8KQEAgLTE0OSwxNyArMTQ5LDE3IEBACiAJaWYgKHJjID09IDApCQkvKiBzdWNjZXNzLCByZXR1cm4gKi8KIAkJcmV0dXJuOwogLyogY2hlY2sgZm9yIG51bGwgdGFnID8gKi8KLQlpZiAocmMgPT0gSF9IYXJkd2FyZSkKKwlpZiAocmMgPT0gSF9IQVJEV0FSRSkKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgICAgInBscGFyLWhjYWxsICglcykgZmFpbGVkIHdpdGggaGFyZHdhcmUgZmF1bHRcbiIsIHRhZyk7Ci0JZWxzZSBpZiAocmMgPT0gSF9GdW5jdGlvbikKKwllbHNlIGlmIChyYyA9PSBIX0ZVTkNUSU9OKQogCQlwcmludGsoS0VSTl9JTkZPCiAJCSAgICAgICAicGxwYXItaGNhbGwgKCVzKSBmYWlsZWQ7IGZ1bmN0aW9uIG5vdCBhbGxvd2VkXG4iLCB0YWcpOwotCWVsc2UgaWYgKHJjID09IEhfQXV0aG9yaXR5KQorCWVsc2UgaWYgKHJjID09IEhfQVVUSE9SSVRZKQogCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAicGxwYXItaGNhbGwgKCVzKSBmYWlsZWQ7IG5vdCBhdXRob3JpemVkIHRvIHRoaXMgZnVuY3Rpb25cbiIsCi0JCSAgICAgICB0YWcpOwotCWVsc2UgaWYgKHJjID09IEhfUGFyYW1ldGVyKQorCQkgICAgICAgInBscGFyLWhjYWxsICglcykgZmFpbGVkOyBub3QgYXV0aG9yaXplZCB0byB0aGlzIgorCQkgICAgICAgIiBmdW5jdGlvblxuIiwgdGFnKTsKKwllbHNlIGlmIChyYyA9PSBIX1BBUkFNRVRFUikKIAkJcHJpbnRrKEtFUk5fSU5GTyAicGxwYXItaGNhbGwgKCVzKSBmYWlsZWQ7IEJhZCBwYXJhbWV0ZXIocylcbiIsCiAJCSAgICAgICB0YWcpOwogCWVsc2UKQEAgLTIwOSw3ICsyMDksNyBAQAogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJcmMgPSBwbHBhcl9oY2FsbChIX1BJQywgMCwgMCwgMCwgMCwgcG9vbF9pZGxlX3RpbWUsIG51bV9wcm9jcywgJmR1bW15KTsKIAotCWlmIChyYyAhPSBIX0F1dGhvcml0eSkKKwlpZiAocmMgIT0gSF9BVVRIT1JJVFkpCiAJCWxvZ19wbHBhcl9oY2FsbF9yZXR1cm4ocmMsICJIX1BJQyIpOwogfQogCkBAIC0yNDIsNyArMjQyLDcgQEAKIHsKIAlpbnQgY2FsbF9zdGF0dXM7CiAKLQljaGFyICpsb2NhbF9idWZmZXIgPSBrbWFsbG9jKFNQTFBBUl9NQVhMRU5HVEgsIEdGUF9LRVJORUwpOworCXVuc2lnbmVkIGNoYXIgKmxvY2FsX2J1ZmZlciA9IGttYWxsb2MoU1BMUEFSX01BWExFTkdUSCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsb2NhbF9idWZmZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZCBcbiIsCiAJCSAgICAgICBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CkBAIC0yNTQsNyArMjU0LDggQEAKIAljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChydGFzX3Rva2VuKCJpYm0sZ2V0LXN5c3RlbS1wYXJhbWV0ZXIiKSwgMywgMSwKIAkJCQlOVUxMLAogCQkJCVNQTFBBUl9DSEFSQUNURVJJU1RJQ1NfVE9LRU4sCi0JCQkJX19wYShydGFzX2RhdGFfYnVmKSk7CisJCQkJX19wYShydGFzX2RhdGFfYnVmKSwKKwkJCQlSVEFTX0RBVEFfQlVGX1NJWkUpOwogCW1lbWNweShsb2NhbF9idWZmZXIsIHJ0YXNfZGF0YV9idWYsIFNQTFBBUl9NQVhMRU5HVEgpOwogCXNwaW5fdW5sb2NrKCZydGFzX2RhdGFfYnVmX2xvY2spOwogCkBAIC0yNzUsNyArMjc2LDcgQEAKICNpZmRlZiBMUEFSQ0ZHX0RFQlVHCiAJCXByaW50ayhLRVJOX0lORk8gInN1Y2Nlc3MgY2FsbGluZyBnZXQtc3lzdGVtLXBhcmFtZXRlciBcbiIpOwogI2VuZGlmCi0JCXNwbHBhcl9zdHJsZW4gPSBsb2NhbF9idWZmZXJbMF0gKiAxNiArIGxvY2FsX2J1ZmZlclsxXTsKKwkJc3BscGFyX3N0cmxlbiA9IGxvY2FsX2J1ZmZlclswXSAqIDI1NiArIGxvY2FsX2J1ZmZlclsxXTsKIAkJbG9jYWxfYnVmZmVyICs9IDI7CS8qIHN0ZXAgb3ZlciBzdHJsZW4gdmFsdWUgKi8KIAogCQltZW1zZXQod29ya2J1ZmZlciwgMCwgU1BMUEFSX01BWExFTkdUSCk7CkBAIC01MjksMTMgKzUzMCwxMyBAQAogCXJldHZhbCA9IHBscGFyX2hjYWxsX25vcmV0cyhIX1NFVF9QUFAsICpuZXdfZW50aXRsZWRfcHRyLAogCQkJCSAgICAqbmV3X3dlaWdodF9wdHIpOwogCi0JaWYgKHJldHZhbCA9PSBIX1N1Y2Nlc3MgfHwgcmV0dmFsID09IEhfQ29uc3RyYWluZWQpIHsKKwlpZiAocmV0dmFsID09IEhfU1VDQ0VTUyB8fCByZXR2YWwgPT0gSF9DT05TVFJBSU5FRCkgewogCQlyZXR2YWwgPSBjb3VudDsKLQl9IGVsc2UgaWYgKHJldHZhbCA9PSBIX0J1c3kpIHsKKwl9IGVsc2UgaWYgKHJldHZhbCA9PSBIX0JVU1kpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwotCX0gZWxzZSBpZiAocmV0dmFsID09IEhfSGFyZHdhcmUpIHsKKwl9IGVsc2UgaWYgKHJldHZhbCA9PSBIX0hBUkRXQVJFKSB7CiAJCXJldHZhbCA9IC1FSU87Ci0JfSBlbHNlIGlmIChyZXR2YWwgPT0gSF9QYXJhbWV0ZXIpIHsKKwl9IGVsc2UgaWYgKHJldHZhbCA9PSBIX1BBUkFNRVRFUikgewogCQlyZXR2YWwgPSAtRUlOVkFMOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWNlaXZlZCB1bmtub3duIGh2IHJldHVybiBjb2RlICVsZCIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCA5MjhiODU4Li5iYTM0MDAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMKQEAgLTE5MSwxMSArMTkxLDE5IEBACiAJCQkJICh2b2lkICopaGRyCiAJCQkJICsgc2VjaGRyc1tzZWNoZHJzW2ldLnNoX2xpbmtdLnNoX29mZnNldCk7CiAJfQotCWlmICghbWUtPmFyY2guc3R1YnNfc2VjdGlvbiB8fCAhbWUtPmFyY2gudG9jX3NlY3Rpb24pIHsKLQkJcHJpbnRrKCIlczogZG9lc24ndCBjb250YWluIC50b2Mgb3IgLnN0dWJzLlxuIiwgbWUtPm5hbWUpOworCisJaWYgKCFtZS0+YXJjaC5zdHVic19zZWN0aW9uKSB7CisJCXByaW50aygiJXM6IGRvZXNuJ3QgY29udGFpbiAuc3R1YnMuXG4iLCBtZS0+bmFtZSk7CiAJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAKKwkvKiBJZiB3ZSBkb24ndCBoYXZlIGEgLnRvYywganVzdCB1c2UgLnN0dWJzLiAgV2UgbmVlZCB0byBzZXQgcjIKKwkgICB0byBzb21lIHJlYXNvbmFibGUgdmFsdWUgaW4gY2FzZSB0aGUgbW9kdWxlIGNhbGxzIG91dCB0bworCSAgIG90aGVyIGZ1bmN0aW9ucyB2aWEgYSBzdHViLCBvciBpZiBhIGZ1bmN0aW9uIHBvaW50ZXIgZXNjYXBlcworCSAgIHRoZSBtb2R1bGUgYnkgc29tZSBtZWFucy4gICovCisJaWYgKCFtZS0+YXJjaC50b2Nfc2VjdGlvbikKKwkJbWUtPmFyY2gudG9jX3NlY3Rpb24gPSBtZS0+YXJjaC5zdHVic19zZWN0aW9uOworCiAJLyogT3ZlcnJpZGUgdGhlIHN0dWJzIHNpemUgKi8KIAlzZWNoZHJzW21lLT5hcmNoLnN0dWJzX3NlY3Rpb25dLnNoX3NpemUgPSBnZXRfc3R1YnNfc2l6ZShoZHIsIHNlY2hkcnMpOwogCXJldHVybiAwOwpAQCAtMzQyLDcgKzM1MCw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIFJfUFBDNjRfVE9DMTY6Ci0JCQkvKiBTdWJ0YWN0IFRPQyBwb2ludGVyICovCisJCQkvKiBTdWJ0cmFjdCBUT0MgcG9pbnRlciAqLwogCQkJdmFsdWUgLT0gbXlfcjIoc2VjaGRycywgbWUpOwogCQkJaWYgKHZhbHVlICsgMHg4MDAwID4gMHhmZmZmKSB7CiAJCQkJcHJpbnRrKCIlczogYmFkIFRPQzE2IHJlbG9jYXRpb24gKCVsdSlcbiIsCkBAIC0zNTUsNyArMzYzLDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgUl9QUEM2NF9UT0MxNl9EUzoKLQkJCS8qIFN1YnRhY3QgVE9DIHBvaW50ZXIgKi8KKwkJCS8qIFN1YnRyYWN0IFRPQyBwb2ludGVyICovCiAJCQl2YWx1ZSAtPSBteV9yMihzZWNoZHJzLCBtZSk7CiAJCQlpZiAoKHZhbHVlICYgMykgIT0gMCB8fCB2YWx1ZSArIDB4ODAwMCA+IDB4ZmZmZikgewogCQkJCXByaW50aygiJXM6IGJhZCBUT0MxNl9EUyByZWxvY2F0aW9uICglbHUpXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggYzMzNmYzZS4uYzFkOTVlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9pb21tdS5jCkBAIC01OSw2ICs1OSwyNSBAQAogfQogCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZXZpY2VfdG9fbWFzayhzdHJ1Y3QgZGV2aWNlICpod2RldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCWlmICghaHdkZXYpIHsKKwkJcGRldiA9IHBwYzY0X2lzYWJyaWRnZV9kZXY7CisJCWlmICghcGRldikgLyogVGhpcyBpcyB0aGUgYmVzdCBndWVzcyB3ZSBjYW4gZG8gKi8KKwkJCXJldHVybiAweGZmZmZmZmZmdWw7CisJfSBlbHNlCisJCXBkZXYgPSB0b19wY2lfZGV2KGh3ZGV2KTsKKworCWlmIChwZGV2LT5kbWFfbWFzaykKKwkJcmV0dXJuIHBkZXYtPmRtYV9tYXNrOworCisJLyogQXNzdW1lIGRldmljZXMgd2l0aG91dCBtYXNrIGNhbiB0YWtlIDMyIGJpdCBhZGRyZXNzZXMgKi8KKwlyZXR1cm4gMHhmZmZmZmZmZnVsOworfQorCisKIC8qIEFsbG9jYXRlcyBhIGNvbnRpZ3VvdXMgcmVhbCBidWZmZXIgYW5kIGNyZWF0ZXMgbWFwcGluZ3Mgb3ZlciBpdC4KICAqIFJldHVybnMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGFuZCBzZXRzIGRtYV9oYW5kbGUKICAqIHRvIHRoZSBkbWEgYWRkcmVzcyAobWFwcGluZykgb2YgdGhlIGZpcnN0IHBhZ2UuCkBAIC02Nyw3ICs4Niw3IEBACiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewogCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXZub2RlX3RhYmxlKGh3ZGV2KSwgc2l6ZSwgZG1hX2hhbmRsZSwKLQkJCWZsYWcpOworCQkJZGV2aWNlX3RvX21hc2soaHdkZXYpLCBmbGFnKTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2lvbW11X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLApAQCAtODUsNyArMTA0LDggQEAKIHN0YXRpYyBkbWFfYWRkcl90IHBjaV9pb21tdV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICp2YWRkciwKIAkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlyZXR1cm4gaW9tbXVfbWFwX3NpbmdsZShkZXZub2RlX3RhYmxlKGh3ZGV2KSwgdmFkZHIsIHNpemUsIGRpcmVjdGlvbik7CisJcmV0dXJuIGlvbW11X21hcF9zaW5nbGUoZGV2bm9kZV90YWJsZShod2RldiksIHZhZGRyLCBzaXplLAorCQkJICAgICAgICBkZXZpY2VfdG9fbWFzayhod2RldiksIGRpcmVjdGlvbik7CiB9CiAKIApAQCAtMTAwLDcgKzEyMCw3IEBACiAJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKIAlyZXR1cm4gaW9tbXVfbWFwX3NnKHBkZXYsIGRldm5vZGVfdGFibGUocGRldiksIHNnbGlzdCwKLQkJCW5lbGVtcywgZGlyZWN0aW9uKTsKKwkJCW5lbGVtcywgZGV2aWNlX3RvX21hc2socGRldiksIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHBjaV9pb21tdV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKQEAgLTExMiw3ICsxMzIsMTkgQEAKIC8qIFdlIHN1cHBvcnQgRE1BIHRvL2Zyb20gYW55IG1lbW9yeSBwYWdlIHZpYSB0aGUgaW9tbXUgKi8KIHN0YXRpYyBpbnQgcGNpX2lvbW11X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIHsKLQlyZXR1cm4gMTsKKwlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGRldm5vZGVfdGFibGUoZGV2KTsKKworCWlmICghdGJsIHx8IHRibC0+aXRfb2Zmc2V0ID4gbWFzaykgeworCQlwcmludGsoS0VSTl9JTkZPICJXYXJuaW5nOiBJT01NVSB0YWJsZSBvZmZzZXQgdG9vIGJpZyBmb3IgZGV2aWNlIG1hc2tcbiIpOworCQlpZiAodGJsKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibWFzazogMHglMDhseCwgdGFibGUgb2Zmc2V0OiAweCUwOGx4XG4iLAorCQkJCW1hc2ssIHRibC0+aXRfb2Zmc2V0KTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibWFzazogMHglMDhseCwgdGFibGUgdW5hdmFpbGFibGVcbiIsCisJCQkJbWFzayk7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsKIH0KIAogdm9pZCBwY2lfaW9tbXVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKaW5kZXggZGZhNTM5OC4uNGIwNTJhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCkBAIC04MSw2ICs4MSw3IEBACiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiBFWFBPUlRfU1lNQk9MKHN0cmNtcCk7CiBFWFBPUlRfU1lNQk9MKHN0cmNhc2VjbXApOworRVhQT1JUX1NZTUJPTChzdHJuY2FzZWNtcCk7CiAKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDcwNjA5MGMuLjJkZDQ3ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC04MzQsNyArODM0LDYgQEAKIAl9IHdoaWxlIChjb3VudCsrIDwgMTYpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChnZXRfd2NoYW4pOwogCiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDY0OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDQzMzYzOTAuLjlhMDdmOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC02Miw3ICs2Miw3IEBACiBzdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOwogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgaW9tbXVfaXNfb2ZmOworaW50IF9faW5pdGRhdGEgaW9tbXVfaXNfb2ZmOwogaW50IF9faW5pdGRhdGEgaW9tbXVfZm9yY2Vfb247CiB1bnNpZ25lZCBsb25nIHRjZV9hbGxvY19zdGFydCwgdGNlX2FsbG9jX2VuZDsKICNlbmRpZgpAQCAtODg1LDYgKzg4NSw3NCBAQAogCURCRygiIDwtIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKIH0KIAorLyoKKyAqIGlibSxwYS1mZWF0dXJlcyBpcyBhIHBlci1jcHUgcHJvcGVydHkgdGhhdCBjb250YWlucyBhIHN0cmluZyBvZgorICogYXR0cmlidXRlIGRlc2NyaXB0b3JzLCBlYWNoIG9mIHdoaWNoIGhhcyBhIDIgYnl0ZSBoZWFkZXIgcGx1cyB1cAorICogdG8gMjU0IGJ5dGVzIHdvcnRoIG9mIHByb2Nlc3NvciBhdHRyaWJ1dGUgYml0cy4gIEZpcnN0IGhlYWRlcgorICogYnl0ZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBieXRlcyBmb2xsb3dpbmcgdGhlIGhlYWRlci4KKyAqIFNlY29uZCBoZWFkZXIgYnl0ZSBpcyBhbiAiYXR0cmlidXRlLXNwZWNpZmllciIgdHlwZSwgb2Ygd2hpY2gKKyAqIHplcm8gaXMgdGhlIG9ubHkgY3VycmVudGx5LWRlZmluZWQgdmFsdWUuCisgKiBJbXBsZW1lbnRhdGlvbjogIFBhc3MgaW4gdGhlIGJ5dGUgYW5kIGJpdCBvZmZzZXQgZm9yIHRoZSBmZWF0dXJlCisgKiB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluLiAgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC0xIGlmIHRoZQorICogcGEtZmVhdHVyZXMgcHJvcGVydHkgaXMgbWlzc2luZywgb3IgYSAxLzAgdG8gaW5kaWNhdGUgaWYgdGhlIGZlYXR1cmUKKyAqIGlzIHN1cHBvcnRlZC9ub3Qgc3VwcG9ydGVkLiAgTm90ZSB0aGF0IHRoZSBiaXQgbnVtYmVycyBhcmUKKyAqIGJpZy1lbmRpYW4gdG8gbWF0Y2ggdGhlIGRlZmluaXRpb24gaW4gUEFQUi4KKyAqLworc3RhdGljIHN0cnVjdCBpYm1fcGFfZmVhdHVyZSB7CisJdW5zaWduZWQgbG9uZwljcHVfZmVhdHVyZXM7CS8qIENQVV9GVFJfeHh4IGJpdCAqLworCXVuc2lnbmVkIGludAljcHVfdXNlcl9mdHJzOwkvKiBQUENfRkVBVFVSRV94eHggYml0ICovCisJdW5zaWduZWQgY2hhcglwYWJ5dGU7CQkvKiBieXRlIG51bWJlciBpbiBpYm0scGEtZmVhdHVyZXMgKi8KKwl1bnNpZ25lZCBjaGFyCXBhYml0OwkJLyogYml0IG51bWJlciAoYmlnLWVuZGlhbikgKi8KKwl1bnNpZ25lZCBjaGFyCWludmVydDsJCS8qIGlmIDEsIHBhIGJpdCBzZXQgPT4gY2xlYXIgZmVhdHVyZSAqLworfSBpYm1fcGFfZmVhdHVyZXNbXSBfX2luaXRkYXRhID0geworCXswLCBQUENfRkVBVFVSRV9IQVNfTU1VLAkwLCAwLCAwfSwKKwl7MCwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSwJMCwgMSwgMH0sCisJe0NQVV9GVFJfU0xCLCAwLAkJMCwgMiwgMH0sCisJe0NQVV9GVFJfQ1RSTCwgMCwJCTAsIDMsIDB9LAorCXtDUFVfRlRSX05PRVhFQ1VURSwgMCwJCTAsIDYsIDB9LAorCXtDUFVfRlRSX05PRFNJU1JBTElHTiwgMCwJMSwgMSwgMX0sCisJe0NQVV9GVFJfQ0lfTEFSR0VfUEFHRSwgMCwJMSwgMiwgMH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfY3B1X3BhX2ZlYXR1cmVzKHVuc2lnbmVkIGxvbmcgbm9kZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpwYV9mdHJzOworCXVuc2lnbmVkIGxvbmcgbGVuLCB0YWJsZWxlbiwgaSwgYml0OworCisJcGFfZnRycyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSxwYS1mZWF0dXJlcyIsICZ0YWJsZWxlbik7CisJaWYgKHBhX2Z0cnMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogZmluZCBkZXNjcmlwdG9yIHdpdGggdHlwZSA9PSAwICovCisJZm9yICg7OykgeworCQlpZiAodGFibGVsZW4gPCAzKQorCQkJcmV0dXJuOworCQlsZW4gPSAyICsgcGFfZnRyc1swXTsKKwkJaWYgKHRhYmxlbGVuIDwgbGVuKQorCQkJcmV0dXJuOwkJLyogZGVzY3JpcHRvciAwIG5vdCBmb3VuZCAqLworCQlpZiAocGFfZnRyc1sxXSA9PSAwKQorCQkJYnJlYWs7CisJCXRhYmxlbGVuIC09IGxlbjsKKwkJcGFfZnRycyArPSBsZW47CisJfQorCisJLyogbG9vcCBvdmVyIGJpdHMgd2Uga25vdyBhYm91dCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlibV9wYV9mZWF0dXJlcyk7ICsraSkgeworCQlzdHJ1Y3QgaWJtX3BhX2ZlYXR1cmUgKmZwID0gJmlibV9wYV9mZWF0dXJlc1tpXTsKKworCQlpZiAoZnAtPnBhYnl0ZSA+PSBwYV9mdHJzWzBdKQorCQkJY29udGludWU7CisJCWJpdCA9IChwYV9mdHJzWzIgKyBmcC0+cGFieXRlXSA+PiAoNyAtIGZwLT5wYWJpdCkpICYgMTsKKwkJaWYgKGJpdCBeIGZwLT5pbnZlcnQpIHsKKwkJCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzIHw9IGZwLT5jcHVfZmVhdHVyZXM7CisJCQljdXJfY3B1X3NwZWMtPmNwdV91c2VyX2ZlYXR1cmVzIHw9IGZwLT5jcHVfdXNlcl9mdHJzOworCQl9IGVsc2UgeworCQkJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJj0gfmZwLT5jcHVfZmVhdHVyZXM7CisJCQljdXJfY3B1X3NwZWMtPmNwdV91c2VyX2ZlYXR1cmVzICY9IH5mcC0+Y3B1X3VzZXJfZnRyczsKKwkJfQorCX0KK30KKwogc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2NwdXModW5zaWduZWQgbG9uZyBub2RlLAogCQkJCQkgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCiAJCQkJCSAgdm9pZCAqZGF0YSkKQEAgLTk2OSw2ICsxMDM3LDggQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KIAorCWNoZWNrX2NwdV9wYV9mZWF0dXJlcyhub2RlKTsKKwogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogCWlmIChudGhyZWFkcyA+IDEpCiAJCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzIHw9IENQVV9GVFJfU01UOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggZDY2YzVlNy4uZjcwYmQwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC02MzYsMTAgKzYzNiw5NiBAQAogCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAvKgotICogVG8gdGVsbCB0aGUgZmlybXdhcmUgd2hhdCBvdXIgY2FwYWJpbGl0aWVzIGFyZSwgd2UgaGF2ZSB0byBwYXNzCi0gKiBpdCBhIGZha2UgMzItYml0IEVMRiBoZWFkZXIgY29udGFpbmluZyBhIGNvdXBsZSBvZiBQVF9OT1RFIHNlY3Rpb25zCi0gKiB0aGF0IGNvbnRhaW4gc3RydWN0dXJlcyB0aGF0IGNvbnRhaW4gdGhlIGFjdHVhbCB2YWx1ZXMuCisgKiBUaGVyZSBhcmUgdHdvIG1ldGhvZHMgZm9yIHRlbGxpbmcgZmlybXdhcmUgd2hhdCBvdXIgY2FwYWJpbGl0aWVzIGFyZS4KKyAqIE5ld2VyIG1hY2hpbmVzIGhhdmUgYW4gImlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQiIG1ldGhvZCBvbiB0aGUKKyAqIHJvb3Qgbm9kZS4gIEZvciBvbGRlciBtYWNoaW5lcywgd2UgaGF2ZSB0byBjYWxsIHRoZSAicHJvY2Vzcy1lbGYtaGVhZGVyIgorICogbWV0aG9kIGluIHRoZSAvcGFja2FnZXMvZWxmLWxvYWRlciBub2RlLCBwYXNzaW5nIGl0IGEgZmFrZSAzMi1iaXQKKyAqIEVMRiBoZWFkZXIgY29udGFpbmluZyBhIGNvdXBsZSBvZiBQVF9OT1RFIHNlY3Rpb25zIHRoYXQgY29udGFpbgorICogc3RydWN0dXJlcyB0aGF0IGNvbnRhaW4gdmFyaW91cyBpbmZvcm1hdGlvbi4KICAqLworCisvKgorICogTmV3IG1ldGhvZCAtIGV4dGVuc2libGUgYXJjaGl0ZWN0dXJlIGRlc2NyaXB0aW9uIHZlY3Rvci4KKyAqCisgKiBCZWNhdXNlIHRoZSBkZXNjcmlwdGlvbiB2ZWN0b3IgY29udGFpbnMgYSBtaXggb2YgYnl0ZSBhbmQgd29yZAorICogdmFsdWVzLCB3ZSBkZWNsYXJlIGl0IGFzIGFuIHVuc2lnbmVkIGNoYXIgYXJyYXksIGFuZCB1c2UgdGhpcworICogbWFjcm8gdG8gcHV0IHdvcmQgdmFsdWVzIGluLgorICovCisjZGVmaW5lIFcoeCkJKCh4KSA+PiAyNCkgJiAweGZmLCAoKHgpID4+IDE2KSAmIDB4ZmYsIFwKKwkJKCh4KSA+PiA4KSAmIDB4ZmYsICh4KSAmIDB4ZmYKKworLyogT3B0aW9uIHZlY3RvciBiaXRzIC0gZ2VuZXJpYyBiaXRzIGluIGJ5dGUgMSAqLworI2RlZmluZSBPVl9JR05PUkUJCTB4ODAJLyogaWdub3JlIHRoaXMgdmVjdG9yICovCisjZGVmaW5lIE9WX0NFU1NBVElPTl9QT0xJQ1kJMHg0MAkvKiBoYWx0IGlmIHVuc3VwcG9ydGVkIG9wdGlvbiBwcmVzZW50Ki8KKworLyogT3B0aW9uIHZlY3RvciAxOiBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgT1YxX1BQQ18yXzAwCQkweDgwCS8qIHNldCBpZiB3ZSBzdXBwb3J0IFBvd2VyUEMgMi4wMCAqLworI2RlZmluZSBPVjFfUFBDXzJfMDEJCTB4NDAJLyogc2V0IGlmIHdlIHN1cHBvcnQgUG93ZXJQQyAyLjAxICovCisjZGVmaW5lIE9WMV9QUENfMl8wMgkJMHgyMAkvKiBzZXQgaWYgd2Ugc3VwcG9ydCBQb3dlclBDIDIuMDIgKi8KKyNkZWZpbmUgT1YxX1BQQ18yXzAzCQkweDEwCS8qIHNldCBpZiB3ZSBzdXBwb3J0IFBvd2VyUEMgMi4wMyAqLworI2RlZmluZSBPVjFfUFBDXzJfMDQJCTB4MDgJLyogc2V0IGlmIHdlIHN1cHBvcnQgUG93ZXJQQyAyLjA0ICovCisjZGVmaW5lIE9WMV9QUENfMl8wNQkJMHgwNAkvKiBzZXQgaWYgd2Ugc3VwcG9ydCBQb3dlclBDIDIuMDUgKi8KKworLyogT3B0aW9uIHZlY3RvciAyOiBPcGVuIEZpcm13YXJlIG9wdGlvbnMgc3VwcG9ydGVkICovCisjZGVmaW5lIE9WMl9SRUFMX01PREUJCTB4MjAJLyogc2V0IGlmIHdlIHdhbnQgT0YgaW4gcmVhbCBtb2RlICovCisKKy8qIE9wdGlvbiB2ZWN0b3IgMzogcHJvY2Vzc29yIG9wdGlvbnMgc3VwcG9ydGVkICovCisjZGVmaW5lIE9WM19GUAkJCTB4ODAJLyogZmxvYXRpbmcgcG9pbnQgKi8KKyNkZWZpbmUgT1YzX1ZNWAkJCTB4NDAJLyogVk1YL0FsdGl2ZWMgKi8KKworLyogT3B0aW9uIHZlY3RvciA1OiBQQVBSL09GIG9wdGlvbnMgc3VwcG9ydGVkICovCisjZGVmaW5lIE9WNV9MUEFSCQkweDgwCS8qIGxvZ2ljYWwgcGFydGl0aW9uaW5nIHN1cHBvcnRlZCAqLworI2RlZmluZSBPVjVfU1BMUEFSCQkweDQwCS8qIHNoYXJlZC1wcm9jZXNzb3IgTFBBUiBzdXBwb3J0ZWQgKi8KKy8qIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkgcHJvcGVydHkgc3VwcG9ydGVkICovCisjZGVmaW5lIE9WNV9EUkNPTkZfTUVNT1JZCTB4MjAKKyNkZWZpbmUgT1Y1X0xBUkdFX1BBR0VTCQkweDEwCS8qIGxhcmdlIHBhZ2VzIHN1cHBvcnRlZCAqLworCisvKgorICogVGhlIGFyY2hpdGVjdHVyZSB2ZWN0b3IgaGFzIGFuIGFycmF5IG9mIFBWUiBtYXNrL3ZhbHVlIHBhaXJzLAorICogZm9sbG93ZWQgYnkgIyBvcHRpb24gdmVjdG9ycyAtIDEsIGZvbGxvd2VkIGJ5IHRoZSBvcHRpb24gdmVjdG9ycy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgaWJtX2FyY2hpdGVjdHVyZV92ZWNbXSA9IHsKKwlXKDB4ZmZmZTAwMDApLCBXKDB4MDAzYTAwMDApLAkvKiBQT1dFUjUvUE9XRVI1KyAqLworCVcoMHhmZmZmMDAwMCksIFcoMHgwMDNlMDAwMCksCS8qIFBPV0VSNiAqLworCVcoMHhmZmZmZmZmZSksIFcoMHgwZjAwMDAwMSksCS8qIGFsbCAyLjA0LWNvbXBsaWFudCBhbmQgZWFybGllciAqLworCTUgLSAxLAkJCQkvKiA1IG9wdGlvbiB2ZWN0b3JzICovCisKKwkvKiBvcHRpb24gdmVjdG9yIDE6IHByb2Nlc3NvciBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZCAqLworCTMgLSAxLAkJCQkvKiBsZW5ndGggKi8KKwkwLAkJCQkvKiBkb24ndCBpZ25vcmUsIGRvbid0IGhhbHQgKi8KKwlPVjFfUFBDXzJfMDAgfCBPVjFfUFBDXzJfMDEgfCBPVjFfUFBDXzJfMDIgfCBPVjFfUFBDXzJfMDMgfAorCU9WMV9QUENfMl8wNCB8IE9WMV9QUENfMl8wNSwKKworCS8qIG9wdGlvbiB2ZWN0b3IgMjogT3BlbiBGaXJtd2FyZSBvcHRpb25zIHN1cHBvcnRlZCAqLworCTM0IC0gMSwJCQkJLyogbGVuZ3RoICovCisJT1YyX1JFQUxfTU9ERSwKKwkwLCAwLAorCVcoMHhmZmZmZmZmZiksCQkJLyogcmVhbF9iYXNlICovCisJVygweGZmZmZmZmZmKSwJCQkvKiByZWFsX3NpemUgKi8KKwlXKDB4ZmZmZmZmZmYpLAkJCS8qIHZpcnRfYmFzZSAqLworCVcoMHhmZmZmZmZmZiksCQkJLyogdmlydF9zaXplICovCisJVygweGZmZmZmZmZmKSwJCQkvKiBsb2FkX2Jhc2UgKi8KKwlXKDY0KSwJCQkJLyogMTI4TUIgbWluIFJNQSAqLworCVcoMHhmZmZmZmZmZiksCQkJLyogZnVsbCBjbGllbnQgbG9hZCAqLworCTAsCQkJCS8qIG1pbiBSTUEgcGVyY2VudGFnZSBvZiB0b3RhbCBSQU0gKi8KKwk0OCwJCQkJLyogbWF4IGxvZ18yKGhhc2ggdGFibGUgc2l6ZSkgKi8KKworCS8qIG9wdGlvbiB2ZWN0b3IgMzogcHJvY2Vzc29yIG9wdGlvbnMgc3VwcG9ydGVkICovCisJMyAtIDEsCQkJCS8qIGxlbmd0aCAqLworCTAsCQkJCS8qIGRvbid0IGlnbm9yZSwgZG9uJ3QgaGFsdCAqLworCU9WM19GUCB8IE9WM19WTVgsCisKKwkvKiBvcHRpb24gdmVjdG9yIDQ6IElCTSBQQVBSIGltcGxlbWVudGF0aW9uICovCisJMiAtIDEsCQkJCS8qIGxlbmd0aCAqLworCTAsCQkJCS8qIGRvbid0IGhhbHQgKi8KKworCS8qIG9wdGlvbiB2ZWN0b3IgNTogUEFQUi9PRiBvcHRpb25zICovCisJMyAtIDEsCQkJCS8qIGxlbmd0aCAqLworCTAsCQkJCS8qIGRvbid0IGlnbm9yZSwgZG9uJ3QgaGFsdCAqLworCU9WNV9MUEFSIHwgT1Y1X1NQTFBBUiB8IE9WNV9MQVJHRV9QQUdFUywKK307CisKKy8qIE9sZCBtZXRob2QgLSBFTEYgaGVhZGVyIHdpdGggUFRfTk9URSBzZWN0aW9ucyAqLwogc3RhdGljIHN0cnVjdCBmYWtlX2VsZiB7CiAJRWxmMzJfRWhkcgllbGZoZHI7CiAJRWxmMzJfUGhkcglwaGRyWzJdOwpAQCAtNzI4LDggKzgxNCwyNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9zZW5kX2NhcGFiaWxpdGllcyh2b2lkKQogewotCWloYW5kbGUgZWxmbG9hZGVyOworCWloYW5kbGUgZWxmbG9hZGVyLCByb290OworCXByb21fYXJnX3QgcmV0OwogCisJcm9vdCA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi8iKSk7CisJaWYgKHJvb3QgIT0gMCkgeworCQkvKiB0cnkgY2FsbGluZyB0aGUgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCBtZXRob2QgKi8KKwkJaWYgKGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgMywgMiwgJnJldCwKKwkJCQkgIEFERFIoImlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQiKSwKKwkJCQkgIHJvb3QsCisJCQkJICBBRERSKGlibV9hcmNoaXRlY3R1cmVfdmVjKSkgPT0gMCkgeworCQkJLyogdGhlIGNhbGwgZXhpc3RzLi4uICovCisJCQlpZiAocmV0KQorCQkJCXByb21fcHJpbnRmKCJXQVJOSU5HOiBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZSIKKwkJCQkJICAgICItc3VwcG9ydCBjYWxsIEZBSUxFRCFcbiIpOworCQkJY2FsbF9wcm9tKCJjbG9zZSIsIDEsIDAsIHJvb3QpOworCQkJcmV0dXJuOworCQl9CisJCWNhbGxfcHJvbSgiY2xvc2UiLCAxLCAwLCByb290KTsKKwl9CisKKwkvKiBubyBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IGNhbGwsIHRyeSB0aGUgb2xkIHdheSAqLwogCWVsZmxvYWRlciA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi9wYWNrYWdlcy9lbGYtbG9hZGVyIikpOwogCWlmIChlbGZsb2FkZXIgPT0gMCkgewogCQlwcm9tX3ByaW50ZigiY291bGRuJ3Qgb3BlbiAvcGFja2FnZXMvZWxmLWxvYWRlclxuIik7CkBAIC0xNTE4LDYgKzE2MjMsMTUgQEAKIAkJCWlmIChzdHJzdHIocCwgUkVMT0MoIlBvd2VyIE1hY2ludG9zaCIpKSB8fAogCQkJICAgIHN0cnN0cihwLCBSRUxPQygiTWFjUklTQyIpKSkKIAkJCQlyZXR1cm4gUExBVEZPUk1fUE9XRVJNQUM7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJCQkvKiBXZSBtdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBkZXRlY3QgdGhlIElCTSBDZWxsCisJCQkgKiBibGFkZXMgYXMgcFNlcmllcyBkdWUgdG8gc29tZSBmaXJtd2FyZSBpc3N1ZXMsCisJCQkgKiBzbyB3ZSBkbyBpdCBoZXJlLgorCQkJICovCisJCQlpZiAoc3Ryc3RyKHAsIFJFTE9DKCJJQk0sQ0JFQSIpKSB8fAorCQkJICAgIHN0cnN0cihwLCBSRUxPQygiSUJNLENQQlctMS4wIikpKQorCQkJCXJldHVybiBQTEFURk9STV9HRU5FUklDOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCQkJaSArPSBzbCArIDE7CiAJCX0KIAl9CkBAIC0xNTI4LDEyICsxNjQyLDExIEBACiAJICogICAgbm9uLUlCTSBkZXNpZ25zICEKIAkgKiAgLSBpdCBoYXMgL3J0YXMKIAkgKi8KLQlsZW4gPSBwcm9tX2dldHByb3AoX3Byb20tPnJvb3QsICJtb2RlbCIsCisJbGVuID0gcHJvbV9nZXRwcm9wKF9wcm9tLT5yb290LCAiZGV2aWNlX3R5cGUiLAogCQkJICAgY29tcGF0LCBzaXplb2YoY29tcGF0KS0xKTsKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiBQTEFURk9STV9HRU5FUklDOwotCWNvbXBhdFtsZW5dID0gMDsKLQlpZiAoc3RyY21wKGNvbXBhdCwgImNocnAiKSkKKwlpZiAoc3RyY21wKGNvbXBhdCwgUkVMT0MoImNocnAiKSkpCiAJCXJldHVybiBQTEFURk9STV9HRU5FUklDOwogCiAJLyogRGVmYXVsdCB0byBwU2VyaWVzLiBXZSBuZWVkIHRvIGtub3cgaWYgd2UgYXJlIHJ1bm5pbmcgTFBBUiAqLwpAQCAtMTk1NCwxMCArMjA2Nyw0NSBAQAogCiB9CiAKLQotc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX2RldmljZV90cmVlKHZvaWQpCisjaWZkZWYgQ09ORklHX1BQQ19NQVBMRQorLyogUElCUyBWZXJzaW9uIDEuMDUuMDAwMCAwNC8yNi8yMDA1IGhhcyBhbiBpbmNvcnJlY3QgL2h0L2lzYS9yYW5nZXMgcHJvcGVydHkuCisgKiBUaGUgdmFsdWVzIGFyZSBiYWQsIGFuZCBpdCBkb2Vzbid0IGV2ZW4gaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGNlbGxzLiAqLworc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX2RldmljZV90cmVlX21hcGxlKHZvaWQpCiB7CisJcGhhbmRsZSBpc2E7CisJdTMyIGlzYV9yYW5nZXNbNl07CisKKwlpc2EgPSBjYWxsX3Byb20oImZpbmRkZXZpY2UiLCAxLCAxLCBBRERSKCIvaHRAMC9pc2FANCIpKTsKKwlpZiAoIVBIQU5ETEVfVkFMSUQoaXNhKSkKKwkJcmV0dXJuOworCisJaWYgKHByb21fZ2V0cHJvcChpc2EsICJyYW5nZXMiLCBpc2FfcmFuZ2VzLCBzaXplb2YoaXNhX3JhbmdlcykpCisJCT09IFBST01fRVJST1IpCisJCXJldHVybjsKKworCWlmIChpc2FfcmFuZ2VzWzBdICE9IDB4MSB8fAorCQlpc2FfcmFuZ2VzWzFdICE9IDB4ZjQwMDAwMDAgfHwKKwkJaXNhX3Jhbmdlc1syXSAhPSAweDAwMDEwMDAwKQorCQlyZXR1cm47CisKKwlwcm9tX3ByaW50ZigiZml4aW5nIHVwIGJvZ3VzIElTQSByYW5nZSBvbiBNYXBsZS4uLlxuIik7CisKKwlpc2FfcmFuZ2VzWzBdID0gMHgxOworCWlzYV9yYW5nZXNbMV0gPSAweDA7CisJaXNhX3Jhbmdlc1syXSA9IDB4MDEwMDIwMDA7IC8qIElPIHNwYWNlOyBQQ0kgZGV2aWNlID0gNCAqLworCWlzYV9yYW5nZXNbM10gPSAweDA7CisJaXNhX3Jhbmdlc1s0XSA9IDB4MDsKKwlpc2FfcmFuZ2VzWzVdID0gMHgwMDAxMDAwMDsKKwlwcm9tX3NldHByb3AoaXNhLCAiL2h0QDAvaXNhQDQiLCAicmFuZ2VzIiwKKwkJCWlzYV9yYW5nZXMsIHNpemVvZihpc2FfcmFuZ2VzKSk7Cit9CisjZWxzZQorI2RlZmluZSBmaXh1cF9kZXZpY2VfdHJlZV9tYXBsZSgpCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSAmJiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykKK3N0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9kZXZpY2VfdHJlZV9wbWFjKHZvaWQpCit7CiAJcGhhbmRsZSB1MywgaTJjLCBtcGljOwogCXUzMiB1M19yZXY7CiAJdTMyIGludGVycnVwdHNbMl07CkBAIC0xOTk0LDkgKzIxNDIsMTYgQEAKIAlwYXJlbnQgPSAodTMyKW1waWM7CiAJcHJvbV9zZXRwcm9wKGkyYywgIi91M0AwLGY4MDAwMDAwL2kyY0BmODAwMTAwMCIsICJpbnRlcnJ1cHQtcGFyZW50IiwKIAkJICAgICAmcGFyZW50LCBzaXplb2YocGFyZW50KSk7Ci0jZW5kaWYKIH0KKyNlbHNlCisjZGVmaW5lIGZpeHVwX2RldmljZV90cmVlX3BtYWMoKQorI2VuZGlmCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9kZXZpY2VfdHJlZSh2b2lkKQoreworCWZpeHVwX2RldmljZV90cmVlX21hcGxlKCk7CisJZml4dXBfZGV2aWNlX3RyZWVfcG1hYygpOworfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9maW5kX2Jvb3RfY3B1KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwppbmRleCBiY2I4MzU3Li40YTY3N2QxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTUzOCw3ICs1MzgsNyBAQAogCQlkb19zeXNjYWxsX3RyYWNlKCk7CiAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwKKwkJYXVkaXRfc3lzY2FsbF9lbnRyeSgKICNpZmRlZiBDT05GSUdfUFBDMzIKIAkJCQkgICAgQVVESVRfQVJDSF9QUEMsCiAjZWxzZQpAQCAtNTU2LDggKzU1Niw3IEBACiAjZW5kaWYKIAogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKLQkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsCi0JCQkJICAgKHJlZ3MtPmNjciYweDEwMDApP0FVRElUU0NfRkFJTFVSRTpBVURJVFNDX1NVQ0NFU1MsCisJCWF1ZGl0X3N5c2NhbGxfZXhpdCgocmVncy0+Y2NyJjB4MTAwMCk/QVVESVRTQ19GQUlMVVJFOkFVRElUU0NfU1VDQ0VTUywKIAkJCQkgICByZWdzLT5yZXN1bHQpOwogCiAJaWYgKCh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKaW5kZXggNDU2Mjg2Yy4uOWM5YWQxZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCkBAIC0yNTgsMTEgKzI1OCwxMSBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CiAKIAlpZiAoIW1hY2hpbmVfaXMocHNlcmllcykpCi0JCXJldHVybiAxOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJ0YXNfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJydGFzIik7CiAJaWYgKHJ0YXNfbm9kZSA9PSBOVUxMKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJwcGM2NC9ydGFzL3Byb2dyZXNzIiwgU19JUlVHT3xTX0lXVVNSLCBOVUxMKTsKIAlpZiAoZW50cnkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCmluZGV4IDA2NjM2YzkuLjAxMTIzMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCkBAIC01NzgsMTggKzU3OCwxOCBAQAogCSAqIFdlIHVzZSAid2FpdGluZyIgdG8gaW5kaWNhdGUgb3VyIHN0YXRlLiAgQXMgbG9uZwogCSAqIGFzIGl0IGlzID4wLCB3ZSBhcmUgc3RpbGwgdHJ5aW5nIHRvIGFsbCBqb2luIHVwLgogCSAqIElmIGl0IGdvZXMgdG8gMCwgd2UgaGF2ZSBzdWNjZXNzZnVsbHkgam9pbmVkIHVwIGFuZAotCSAqIG9uZSB0aHJlYWQgZ290IEhfQ29udGludWUuICBJZiBhbnkgZXJyb3IgaGFwcGVucywKKwkgKiBvbmUgdGhyZWFkIGdvdCBIX0NPTlRJTlVFLiAgSWYgYW55IGVycm9yIGhhcHBlbnMsCiAJICogd2Ugc2V0IGl0IHRvIDwwLgogCSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlkbyB7CiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfSk9JTik7CiAJCXNtcF9ybWIoKTsKLQl9IHdoaWxlIChyYyA9PSBIX1N1Y2Nlc3MgJiYgZGF0YS0+d2FpdGluZyA+IDApOwotCWlmIChyYyA9PSBIX1N1Y2Nlc3MpCisJfSB3aGlsZSAocmMgPT0gSF9TVUNDRVNTICYmIGRhdGEtPndhaXRpbmcgPiAwKTsKKwlpZiAocmMgPT0gSF9TVUNDRVNTKQogCQlnb3RvIG91dDsKIAotCWlmIChyYyA9PSBIX0NvbnRpbnVlKSB7CisJaWYgKHJjID09IEhfQ09OVElOVUUpIHsKIAkJZGF0YS0+d2FpdGluZyA9IDA7CiAJCWRhdGEtPmFyZ3MtPmFyZ3NbZGF0YS0+YXJncy0+bmFyZ3NdID0KIAkJCXJ0YXNfY2FsbChpYm1fc3VzcGVuZF9tZV90b2tlbiwgMCwgMSwgTlVMTCk7CkBAIC01OTcsNyArNTk3LDcgQEAKIAkJCXBscGFyX2hjYWxsX25vcmV0cyhIX1BST0QsaSk7CiAJfSBlbHNlIHsKIAkJZGF0YS0+d2FpdGluZyA9IC1FQlVTWTsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBvbiBIX0pvaW4gaHlwZXJ2aXNvciBjYWxsXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBvbiBIX0pPSU4gaHlwZXJ2aXNvciBjYWxsXG4iKTsKIAl9CiAKIG91dDoKQEAgLTYyNCw3ICs2MjQsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGRvaW5nIGdsb2JhbCBqb2luXG4iKTsKIAogCS8qIFByb2QgZWFjaCBDUFUuICBUaGlzIHdvbid0IGh1cnQsIGFuZCB3aWxsIHdha2UKLQkgKiBhbnlvbmUgd2Ugc3VjY2Vzc2Z1bGx5IHB1dCB0byBzbGVlcCB3aXRoIEhfSm9pbgorCSAqIGFueW9uZSB3ZSBzdWNjZXNzZnVsbHkgcHV0IHRvIHNsZWVwIHdpdGggSF9KT0lOLgogCSAqLwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IGM2MDdmM2IuLjY4NGFiMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQ2Miw2ICs0NjMsMjkgQEAKIGVhcmx5X3BhcmFtKCJ4bW9uIiwgZWFybHlfeG1vbik7CiAjZW5kaWYKIAorc3RhdGljIF9faW5pdCBpbnQgYWRkX3Bjc3Brcih2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldDsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgInBucFBOUCwxMDAiKTsKKwlvZl9ub2RlX3B1dChucCk7CisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicGNzcGtyIiwgLTEpOworCWlmICghcGQpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7CisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7CisKKwlyZXR1cm4gcmV0OworfQorZGV2aWNlX2luaXRjYWxsKGFkZF9wY3Nwa3IpOworCiB2b2lkIHByb2JlX21hY2hpbmUodm9pZCkKIHsKIAlleHRlcm4gc3RydWN0IG1hY2hkZXBfY2FsbHMgX19tYWNoaW5lX2Rlc2Nfc3RhcnQ7CkBAIC00OTIsMyArNTE2LDExIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJVc2luZyAlcyBtYWNoaW5lIGRlc2NyaXB0aW9uXG4iLCBwcGNfbWQubmFtZSk7CiB9CisKK2ludCBjaGVja19sZWdhY3lfaW9wb3J0KHVuc2lnbmVkIGxvbmcgYmFzZV9wb3J0KQoreworCWlmIChwcGNfbWQuY2hlY2tfbGVnYWN5X2lvcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcHBjX21kLmNoZWNrX2xlZ2FjeV9pb3BvcnQoYmFzZV9wb3J0KTsKK30KK0VYUE9SVF9TWU1CT0woY2hlY2tfbGVnYWN5X2lvcG9ydCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggYTcyYmY1ZC4uNjlhYzI1NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGFzbS9rZ2RiLmg+CiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgcGxhdGZvcm1faW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGJvb3R4X2luaXQodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyBwaHlzKTsKIAogYm9vdF9pbmZvc190ICpib290X2luZm9zOwpAQCAtMTM4LDEyICsxMzcsNyBAQAogCQlzdHJsY3B5KGNtZF9saW5lLCBDT05GSUdfQ01ETElORSwgc2l6ZW9mKGNtZF9saW5lKSk7CiAjZW5kaWYgLyogQ09ORklHX0NNRExJTkUgKi8KIAotI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQogCXByb2JlX21hY2hpbmUoKTsKLSNlbHNlCi0JLyogQmFzZSBpbml0IGJhc2VkIG9uIG1hY2hpbmUgdHlwZS4gT2Jzb2xvZXRlLCBwbGVhc2Uga2lsbCAhICovCi0JcGxhdGZvcm1faW5pdCgpOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfNnh4CiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NBTl9ET1pFKSB8fApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDU5YWE5MmMuLjQ0NjdjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTIxNSwxMiArMjE1LDEwIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIHN0YWIgLyBTTEIgbWFuYWdlbWVudCBleGNlcHQgb24gaVNlcmllcwogCSAqLwotCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkgewotCQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKLQkJCXNsYl9pbml0aWFsaXplKCk7Ci0JCWVsc2UKLQkJCXN0YWJfaW5pdGlhbGl6ZShnZXRfcGFjYSgpLT5zdGFiX3JlYWwpOwotCX0KKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKKwkJc2xiX2luaXRpYWxpemUoKTsKKwllbHNlIGlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJc3RhYl9pbml0aWFsaXplKGdldF9wYWNhKCktPnN0YWJfcmVhbCk7CiAKIAlEQkcoIiA8LSBlYXJseV9zZXR1cCgpXG4iKTsKIH0KQEAgLTU5NiwxNCArNTk0LDYgQEAKIAlwcmludGsoIlt0ZXJtaW5hdGVdJTA0eCAlc1xuIiwgc3JjLCBtc2cpOwogfQogCi1pbnQgY2hlY2tfbGVnYWN5X2lvcG9ydCh1bnNpZ25lZCBsb25nIGJhc2VfcG9ydCkKLXsKLQlpZiAocHBjX21kLmNoZWNrX2xlZ2FjeV9pb3BvcnQgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHBwY19tZC5jaGVja19sZWdhY3lfaW9wb3J0KGJhc2VfcG9ydCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNoZWNrX2xlZ2FjeV9pb3BvcnQpOwotCiB2b2lkIGNwdV9kaWUodm9pZCkKIHsKIAlpZiAocHBjX21kLmNwdV9kaWUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCAwMWUzYzA4Li44ZmRlY2EyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTgwMywxMCArODAzLDEzIEBACiAJCWlmIChfX2dldF91c2VyKGNtY3AsICZ1Y3AtPnVjX3JlZ3MpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCW1jcCA9IChzdHJ1Y3QgbWNvbnRleHQgX191c2VyICopKHU2NCljbWNwOworCQkvKiBubyBuZWVkIHRvIGNoZWNrIGFjY2Vzc19vayhtY3ApLCBzaW5jZSBtY3AgPCA0R0IgKi8KIAl9CiAjZWxzZQogCWlmIChfX2dldF91c2VyKG1jcCwgJnVjcC0+dWNfcmVncykpCiAJCXJldHVybiAtRUZBVUxUOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBtY3AsIHNpemVvZigqbWNwKSkpCisJCXJldHVybiAtRUZBVUxUOwogI2VuZGlmCiAJcmVzdG9yZV9zaWdtYXNrKCZzZXQpOwogCWlmIChyZXN0b3JlX3VzZXJfcmVncyhyZWdzLCBtY3AsIHNpZykpCkBAIC05MDgsMTMgKzkxMSwxNCBAQAogewogCXN0cnVjdCBzaWdfZGJnX29wIG9wOwogCWludCBpOworCXVuc2lnbmVkIGNoYXIgdG1wOwogCXVuc2lnbmVkIGxvbmcgbmV3X21zciA9IHJlZ3MtPm1zcjsKICNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQogCXVuc2lnbmVkIGxvbmcgbmV3X2RiY3IwID0gY3VycmVudC0+dGhyZWFkLmRiY3IwOwogI2VuZGlmCiAKIAlmb3IgKGk9MDsgaTxuZGJnOyBpKyspIHsKLQkJaWYgKF9fY29weV9mcm9tX3VzZXIoJm9wLCBkYmcsIHNpemVvZihvcCkpKQorCQlpZiAoY29weV9mcm9tX3VzZXIoJm9wLCBkYmcgKyBpLCBzaXplb2Yob3ApKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlzd2l0Y2ggKG9wLmRiZ190eXBlKSB7CiAJCWNhc2UgU0lHX0RCR19TSU5HTEVfU1RFUFBJTkc6CkBAIC05NTksNiArOTYzLDExIEBACiAJY3VycmVudC0+dGhyZWFkLmRiY3IwID0gbmV3X2RiY3IwOwogI2VuZGlmCiAKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgY3R4LCBzaXplb2YoKmN0eCkpCisJICAgIHx8IF9fZ2V0X3VzZXIodG1wLCAodTggX191c2VyICopIGN0eCkKKwkgICAgfHwgX19nZXRfdXNlcih0bXAsICh1OCBfX3VzZXIgKikgKGN0eCArIDEpIC0gMSkpCisJCXJldHVybiAtRUZBVUxUOworCiAJLyoKIAkgKiBJZiB3ZSBnZXQgYSBmYXVsdCBjb3B5aW5nIHRoZSBjb250ZXh0IGludG8gdGhlIGtlcm5lbCdzCiAJICogaW1hZ2Ugb2YgdGhlIHVzZXIncyByZWdpc3RlcnMsIHdlIGNhbid0IGp1c3QgcmV0dXJuIC1FRkFVTFQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IDI3ZjY1YjkuLmMyZGI2NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtMTgyLDYgKzE4Miw4IEBACiAJZXJyIHw9IF9fZ2V0X3VzZXIobXNyLCAmc2MtPmdwX3JlZ3NbUFRfTVNSXSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKKwlpZiAodl9yZWdzICYmICFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHZfcmVncywgMzQgKiBzaXplb2YodmVjdG9yMTI4KSkpCisJCXJldHVybiAtRUZBVUxUOwogCS8qIENvcHkgMzMgdmVjIHJlZ2lzdGVycyAodnIwLi4zMSBhbmQgdnNjcikgZnJvbSB0aGUgc3RhY2sgKi8KIAlpZiAodl9yZWdzICE9IDAgJiYgKG1zciAmIE1TUl9WRUMpICE9IDApCiAJCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKGN1cnJlbnQtPnRocmVhZC52ciwgdl9yZWdzLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCmluZGV4IDczNTYwZWYuLjViYzI1ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzeXNmc19jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKK3N0YXRpYyBpbnQgc3lzZnNfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBpbnQpKGxvbmcpaGNwdTsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19kZXZpbml0ZGF0YSBzeXNmc19jcHVfbmIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHN5c2ZzX2NwdV9uYiA9IHsKIAkubm90aWZpZXJfY2FsbAk9IHN5c2ZzX2NwdV9ub3RpZnksCiB9OwogCkBAIC0zMjIsMTMgKzMyMiwzMSBAQAogCQl9CiAJfQogfQorCitpbnQgc3lzZnNfYWRkX2RldmljZV90b19ub2RlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGludCBuaWQpCit7CisJc3RydWN0IG5vZGUgKm5vZGUgPSAmbm9kZV9kZXZpY2VzW25pZF07CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9saW5rKCZub2RlLT5zeXNkZXYua29iaiwgJmRldi0+a29iaiwKKwkJCWtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7Cit9CisKK3ZvaWQgc3lzZnNfcmVtb3ZlX2RldmljZV9mcm9tX25vZGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgaW50IG5pZCkKK3sKKwlzdHJ1Y3Qgbm9kZSAqbm9kZSA9ICZub2RlX2RldmljZXNbbmlkXTsKKwlzeXNmc19yZW1vdmVfbGluaygmbm9kZS0+c3lzZGV2LmtvYmosIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7Cit9CisKICNlbHNlCiBzdGF0aWMgdm9pZCByZWdpc3Rlcl9ub2Rlcyh2b2lkKQogewogCXJldHVybjsKIH0KKwogI2VuZGlmCiAKK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX2FkZF9kZXZpY2VfdG9fbm9kZSk7CitFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19yZW1vdmVfZGV2aWNlX2Zyb21fbm9kZSk7CisKIC8qIE9ubHkgdmFsaWQgaWYgQ1BVIGlzIHByZXNlbnQuICovCiBzdGF0aWMgc3NpemVfdCBzaG93X3BoeXNpY2FsX2lkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzdGJsLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c3RibC5TCmluZGV4IDFhZDU1ZjAuLjI2ZWQxZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzdGJsLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXN0YmwuUwpAQCAtMzIyLDMgKzMyMiwyNiBAQAogQ09NUEFUX1NZUyhwc2VsZWN0NikKIENPTVBBVF9TWVMocHBvbGwpCiBTWVNDQUxMKHVuc2hhcmUpCitTWVNDQUxMKHNwbGljZSkKK1NZU0NBTEwodGVlKQorU1lTQ0FMTCh2bXNwbGljZSkKK0NPTVBBVF9TWVMob3BlbmF0KQorU1lTQ0FMTChta2RpcmF0KQorU1lTQ0FMTChta25vZGF0KQorU1lTQ0FMTChmY2hvd25hdCkKK0NPTVBBVF9TWVMoZnV0aW1lc2F0KQorU1lTWChzeXNfbmV3ZnN0YXRhdCwgc3lzX2ZzdGF0YXQ2NCwgc3lzX2ZzdGF0YXQ2NCkKK1NZU0NBTEwodW5saW5rYXQpCitTWVNDQUxMKHJlbmFtZWF0KQorU1lTQ0FMTChsaW5rYXQpCitTWVNDQUxMKHN5bWxpbmthdCkKK1NZU0NBTEwocmVhZGxpbmthdCkKK1NZU0NBTEwoZmNobW9kYXQpCitTWVNDQUxMKGZhY2Nlc3NhdCkKK0NPTVBBVF9TWVMoZ2V0X3JvYnVzdF9saXN0KQorQ09NUEFUX1NZUyhzZXRfcm9idXN0X2xpc3QpCisKKy8qCisgKiBwbGVhc2UgYWRkIG5ldyBjYWxscyB0byBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2NhbGxiYWNrcy5jCisgKiBhcyB3ZWxsIHdoZW4gYXBwcm9wcmlhdGUuCisgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCA0Y2JkZTIxLi4wNjRhNTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC0yMjgsNyArMjI4LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaW9fYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotI2lmZGVmIENPTkZJR19QUENfUE1BQworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKIAl1bnNpZ25lZCBsb25nIG1zciA9IHJlZ3MtPm1zcjsKIAljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBpbnQgKm5pcCA9ICh1bnNpZ25lZCBpbnQgKilyZWdzLT5uaXA7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAkJCXJldHVybiAxOwogCQl9CiAJfQotI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLworI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAmJiBDT05GSUdfUFBDMzIgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA4LDggKzMwOCw4IEBACiAKIHZvaWQgbWFjaGluZV9jaGVja19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0jaWZkZWYgQ09ORklHX1BQQzY0CiAJaW50IHJlY292ZXIgPSAwOworCXVuc2lnbmVkIGxvbmcgcmVhc29uID0gZ2V0X21jX3JlYXNvbihyZWdzKTsKIAogCS8qIFNlZSBpZiBhbnkgbWFjaGluZSBkZXBlbmRlbnQgY2FsbHMgKi8KIAlpZiAocHBjX21kLm1hY2hpbmVfY2hlY2tfZXhjZXB0aW9uKQpAQCAtMzE3LDggKzMxNyw2IEBACiAKIAlpZiAocmVjb3ZlcikKIAkJcmV0dXJuOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nIHJlYXNvbiA9IGdldF9tY19yZWFzb24ocmVncyk7CiAKIAlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CiAJCXJlZ3MtPm1zciB8PSBNU1JfUkk7CkBAIC00NjIsNyArNDYwLDYgQEAKIAkgKiBhZGRpdGlvbmFsIGluZm8sIGUuZy4gYnVzIGVycm9yIHJlZ2lzdGVycy4KIAkgKi8KIAlwbGF0Zm9ybV9tYWNoaW5lX2NoZWNrKHJlZ3MpOwotI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAJaWYgKGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIocmVncykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCmluZGV4IGUwNDY0MjcuLjBjNmEzN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUwpAQCAtMjYxLDcgKzI2MSw3IEBACiAuTGNpZV9zdGFydDoKIAkubG9uZyAwCQkJLyogQ0lFIElEICovCiAJLmJ5dGUgMQkJCS8qIFZlcnNpb24gbnVtYmVyICovCi0JLnN0cmluZyAielIiCQkvKiBOVUwtdGVybWluYXRlZCBhdWdtZW50YXRpb24gc3RyaW5nICovCisJLnN0cmluZyAielJTIgkJLyogTlVMLXRlcm1pbmF0ZWQgYXVnbWVudGF0aW9uIHN0cmluZyAqLwogCS51bGViMTI4IDQJCS8qIENvZGUgYWxpZ25tZW50IGZhY3RvciAqLwogCS5zbGViMTI4IC00CQkvKiBEYXRhIGFsaWdubWVudCBmYWN0b3IgKi8KIAkuYnl0ZSA2NwkJLyogUmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIgY29sdW1uLCBhcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMKaW5kZXggMzFiNjA0YS4uNzQ3OWVkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCkBAIC0yNjMsNyArMjYzLDcgQEAKIC5MY2llX3N0YXJ0OgogCS5sb25nIDAJCQkvKiBDSUUgSUQgKi8KIAkuYnl0ZSAxCQkJLyogVmVyc2lvbiBudW1iZXIgKi8KLQkuc3RyaW5nICJ6UiIJCS8qIE5VTC10ZXJtaW5hdGVkIGF1Z21lbnRhdGlvbiBzdHJpbmcgKi8KKwkuc3RyaW5nICJ6UlMiCQkvKiBOVUwtdGVybWluYXRlZCBhdWdtZW50YXRpb24gc3RyaW5nICovCiAJLnVsZWIxMjggNAkJLyogQ29kZSBhbGlnbm1lbnQgZmFjdG9yICovCiAJLnNsZWIxMjggLTgJCS8qIERhdGEgYWxpZ25tZW50IGZhY3RvciAqLwogCS5ieXRlIDY3CQkvKiBSZXR1cm4gYWRkcmVzcyByZWdpc3RlciBjb2x1bW4sIGFwICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCAxM2M2NTViLi45NzEwMjBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCXJldHVybiBpb21tdV9tYXBfc2luZ2xlKHRvX3Zpb19kZXYoZGV2KS0+aW9tbXVfdGFibGUsIHZhZGRyLCBzaXplLAotCQkJZGlyZWN0aW9uKTsKKwkJCX4wdWwsIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHZpb191bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCB0b192aW9fZGV2KGRldiktPmlvbW11X3RhYmxlLCBzZ2xpc3QsCi0JCQluZWxlbXMsIGRpcmVjdGlvbik7CisJCQluZWxlbXMsIH4wdWwsIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHZpb191bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LApAQCAtMjI5LDcgKzIyOSw3IEBACiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewogCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudCh0b192aW9fZGV2KGRldiktPmlvbW11X3RhYmxlLCBzaXplLAotCQkJZG1hX2hhbmRsZSwgZmxhZyk7CisJCQlkbWFfaGFuZGxlLCB+MHVsLCBmbGFnKTsKIH0KIAogc3RhdGljIHZvaWQgdmlvX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggNWFlYTA5MC4uZmRiYmE0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTE3NywxNSArMTc3LDE1IEBACiAKIAkvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG8KIAkgKiBhZGRyZXNzZXMgaW4gdXNlciBzcGFjZS4gIEFsbCBvdGhlciBmYXVsdHMgcmVwcmVzZW50IGVycm9ycyBpbiB0aGUKLQkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGx5LCBpbiB0aGUgY2FzZSBvZiBhbgotCSAqIGVycm9uZW91cyBmYXVsdCBvY2N1cmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCisJICoga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRlbHksIGluIHRoZSBjYXNlIG9mIGFuCisJICogZXJyb25lb3VzIGZhdWx0IG9jY3VycmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCiAJICogd2Ugd2lsbCBkZWFkbG9jayBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBmYXVsdCBhZ2FpbnN0IHRoZQogCSAqIGFkZHJlc3Mgc3BhY2UuICBMdWNraWx5IHRoZSBrZXJuZWwgb25seSB2YWxpZGx5IHJlZmVyZW5jZXMgdXNlcgogCSAqIHNwYWNlIGZyb20gd2VsbCBkZWZpbmVkIGFyZWFzIG9mIGNvZGUsIHdoaWNoIGFyZSBsaXN0ZWQgaW4gdGhlCiAJICogZXhjZXB0aW9ucyB0YWJsZS4KIAkgKgogCSAqIEFzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGZhdWx0cyB3aWxsIGJlIHZhbGlkIHdlIHdpbGwgb25seSBwZXJmb3JtCi0JICogdGhlIHNvdXJjZSByZWZlcmVuY2UgY2hlY2sgd2hlbiB0aGVyZSBpcyBhIHBvc3NpYmlsdHkgb2YgYSBkZWFkbG9jay4KKwkgKiB0aGUgc291cmNlIHJlZmVyZW5jZSBjaGVjayB3aGVuIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgYSBkZWFkbG9jay4KIAkgKiBBdHRlbXB0IHRvIGxvY2sgdGhlIGFkZHJlc3Mgc3BhY2UsIGlmIHdlIGNhbm5vdCB3ZSB0aGVuIHZhbGlkYXRlIHRoZQogCSAqIHNvdXJjZS4gIElmIHRoaXMgaXMgaW52YWxpZCB3ZSBjYW4gc2tpcCB0aGUgYWRkcmVzcyBzcGFjZSBjaGVjaywKIAkgKiB0aHVzIGF2b2lkaW5nIHRoZSBkZWFkbG9jay4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggNzM3MGY5Zi4uMjY2YjhiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTMwLDEzICszMCw2NiBAQAogI2RlZmluZSBOVU1fTE9XX0FSRUFTCSgweDEwMDAwMDAwMFVMID4+IFNJRF9TSElGVCkKICNkZWZpbmUgTlVNX0hJR0hfQVJFQVMJKFBHVEFCTEVfUkFOR0UgPj4gSFRMQl9BUkVBX1NISUZUKQogCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKyNkZWZpbmUgSFVHRVBURV9JTkRFWF9TSVpFCShQTURfU0hJRlQtSFBBR0VfU0hJRlQpCisjZWxzZQorI2RlZmluZSBIVUdFUFRFX0lOREVYX1NJWkUJKFBVRF9TSElGVC1IUEFHRV9TSElGVCkKKyNlbmRpZgorI2RlZmluZSBQVFJTX1BFUl9IVUdFUFRFCSgxIDw8IEhVR0VQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgSFVHRVBURV9UQUJMRV9TSVpFCShzaXplb2YocHRlX3QpIDw8IEhVR0VQVEVfSU5ERVhfU0laRSkKKworI2RlZmluZSBIVUdFUERfU0hJRlQJCShIUEFHRV9TSElGVCArIEhVR0VQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgSFVHRVBEX1NJWkUJCSgxVUwgPDwgSFVHRVBEX1NISUZUKQorI2RlZmluZSBIVUdFUERfTUFTSwkJKH4oSFVHRVBEX1NJWkUtMSkpCisKKyNkZWZpbmUgaHVnZV9wZ3RhYmxlX2NhY2hlCShwZ3RhYmxlX2NhY2hlW0hVR0VQVEVfQ0FDSEVfTlVNXSkKKworLyogRmxhZyB0byBtYXJrIGh1Z2UgUEQgcG9pbnRlcnMuICBUaGlzIG1lYW5zIHBtZF9iYWQoKSBhbmQgcHVkX2JhZCgpCisgKiB3aWxsIGNob2tlIG9uIHBvaW50ZXJzIHRvIGh1Z2VwdGUgdGFibGVzLCB3aGljaCBpcyBoYW5keSBmb3IKKyAqIGNhdGNoaW5nIHNjcmV3dXBzIGVhcmx5LiAqLworI2RlZmluZSBIVUdFUERfT0sJMHgxCisKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZDsgfSBodWdlcGRfdDsKKworI2RlZmluZSBodWdlcGRfbm9uZShocGQpCSgoaHBkKS5wZCA9PSAwKQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICpodWdlcGRfcGFnZShodWdlcGRfdCBocGQpCit7CisJQlVHX09OKCEoaHBkLnBkICYgSFVHRVBEX09LKSk7CisJcmV0dXJuIChwdGVfdCAqKShocGQucGQgJiB+SFVHRVBEX09LKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqaHVnZXB0ZV9vZmZzZXQoaHVnZXBkX3QgKmhwZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGlkeCA9ICgoYWRkciA+PiBIUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfSFVHRVBURS0xKSk7CisJcHRlX3QgKmRpciA9IGh1Z2VwZF9wYWdlKCpocGRwKTsKKworCXJldHVybiBkaXIgKyBpZHg7Cit9CisKK3N0YXRpYyBpbnQgX19odWdlcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBodWdlcGRfdCAqaHBkcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwdGVfdCAqbmV3ID0ga21lbV9jYWNoZV9hbGxvYyhodWdlX3BndGFibGVfY2FjaGUsCisJCQkJICAgICAgR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworCisJaWYgKCEgbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJaWYgKCFodWdlcGRfbm9uZSgqaHBkcCkpCisJCWttZW1fY2FjaGVfZnJlZShodWdlX3BndGFibGVfY2FjaGUsIG5ldyk7CisJZWxzZQorCQlocGRwLT5wZCA9ICh1bnNpZ25lZCBsb25nKW5ldyB8IEhVR0VQRF9PSzsKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKIC8qIE1vZGVsbGVkIGFmdGVyIGZpbmRfbGludXhfcHRlKCkgKi8KIHB0ZV90ICpodWdlX3B0ZV9vZmZzZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGc7CiAJcHVkX3QgKnB1OwotCXBtZF90ICpwbTsKLQlwdGVfdCAqcHQ7CiAKIAlCVUdfT04oISBpbl9odWdlcGFnZV9hcmVhKG1tLT5jb250ZXh0LCBhZGRyKSk7CiAKQEAgLTQ2LDI2ICs5OSwxNCBAQAogCWlmICghcGdkX25vbmUoKnBnKSkgewogCQlwdSA9IHB1ZF9vZmZzZXQocGcsIGFkZHIpOwogCQlpZiAoIXB1ZF9ub25lKCpwdSkpIHsKLQkJCXBtID0gcG1kX29mZnNldChwdSwgYWRkcik7CiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLQkJCS8qIEN1cnJlbnRseSwgd2UgdXNlIHRoZSBub3JtYWwgUFRFIG9mZnNldCB3aXRoaW4gZnVsbAotCQkJICogc2l6ZSBQVEUgcGFnZXMsIHRodXMgb3VyIGh1Z2UgUFRFcyBhcmUgc2NhdHRlcmVkIGluCi0JCQkgKiB0aGUgUFRFIHBhZ2UgYW5kIHdlIGRvIHdhc3RlIHNvbWUuIFdlIG1heSBjaGFuZ2UKLQkJCSAqIHRoYXQgaW4gdGhlIGZ1dHVyZSwgYnV0IHRoZSBjdXJyZW50IG1lY2FuaXNtIGtlZXBzCi0JCQkgKiB0aGluZ3MgbXVjaCBzaW1wbGVyCi0JCQkgKi8KLQkJCWlmICghcG1kX25vbmUoKnBtKSkgewotCQkJCS8qIE5vdGU6IHB0ZV9vZmZzZXRfKiBhcmUgYWxsIGVxdWl2YWxlbnQgb24KLQkJCQkgKiBwcGM2NCBhcyB3ZSBkb24ndCBoYXZlIEhJR0hNRU0KLQkJCQkgKi8KLQkJCQlwdCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtLCBhZGRyKTsKLQkJCQlyZXR1cm4gcHQ7Ci0JCQl9Ci0jZWxzZSAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwotCQkJLyogT24gNGsgcGFnZXMsIHdlIHB1dCBodWdlIFBURXMgaW4gdGhlIFBNRCBwYWdlICovCi0JCQlwdCA9IChwdGVfdCAqKXBtOwotCQkJcmV0dXJuIHB0OwotI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCisJCQlwbWRfdCAqcG07CisJCQlwbSA9IHBtZF9vZmZzZXQocHUsIGFkZHIpOworCQkJaWYgKCFwbWRfbm9uZSgqcG0pKQorCQkJCXJldHVybiBodWdlcHRlX29mZnNldCgoaHVnZXBkX3QgKilwbSwgYWRkcik7CisjZWxzZQorCQkJcmV0dXJuIGh1Z2VwdGVfb2Zmc2V0KChodWdlcGRfdCAqKXB1LCBhZGRyKTsKKyNlbmRpZgogCQl9CiAJfQogCkBAIC03Niw4ICsxMTcsNyBAQAogewogCXBnZF90ICpwZzsKIAlwdWRfdCAqcHU7Ci0JcG1kX3QgKnBtOwotCXB0ZV90ICpwdDsKKwlodWdlcGRfdCAqaHBkcCA9IE5VTEw7CiAKIAlCVUdfT04oISBpbl9odWdlcGFnZV9hcmVhKG1tLT5jb250ZXh0LCBhZGRyKSk7CiAKQEAgLTg3LDIzICsxMjcsMTgyIEBACiAJcHUgPSBwdWRfYWxsb2MobW0sIHBnLCBhZGRyKTsKIAogCWlmIChwdSkgewotCQlwbSA9IHBtZF9hbGxvYyhtbSwgcHUsIGFkZHIpOwotCQlpZiAocG0pIHsKICNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotCQkJLyogU2VlIGNvbW1lbnQgaW4gaHVnZV9wdGVfb2Zmc2V0LiBOb3RlIHRoYXQgaWYgd2UgZXZlcgotCQkJICogd2FudCB0byBwdXQgdGhlIHBhZ2Ugc2l6ZSBpbiB0aGUgUE1ELCB3ZSB3b3VsZCBoYXZlCi0JCQkgKiB0byBvcGVuIGNvZGUgb3VyIG93biBwdGVfYWxsb2MqIGZ1bmN0aW9uIGluIG9yZGVyCi0JCQkgKiB0byBwb3B1bGF0ZSBhbmQgc2V0IHRoZSBzaXplIGF0b21pY2FsbHkKLQkJCSAqLwotCQkJcHQgPSBwdGVfYWxsb2NfbWFwKG1tLCBwbSwgYWRkcik7Ci0jZWxzZSAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwotCQkJcHQgPSAocHRlX3QgKilwbTsKLSNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwotCQkJcmV0dXJuIHB0OwotCQl9CisJCXBtZF90ICpwbTsKKwkJcG0gPSBwbWRfYWxsb2MobW0sIHB1LCBhZGRyKTsKKwkJaWYgKHBtKQorCQkJaHBkcCA9IChodWdlcGRfdCAqKXBtOworI2Vsc2UKKwkJaHBkcCA9IChodWdlcGRfdCAqKXB1OworI2VuZGlmCiAJfQogCi0JcmV0dXJuIE5VTEw7CisJaWYgKCEgaHBkcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaHVnZXBkX25vbmUoKmhwZHApICYmIF9faHVnZXB0ZV9hbGxvYyhtbSwgaHBkcCwgYWRkcikpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGh1Z2VwdGVfb2Zmc2V0KGhwZHAsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2h1Z2VwdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgaHVnZXBkX3QgKmhwZHApCit7CisJcHRlX3QgKmh1Z2VwdGUgPSBodWdlcGRfcGFnZSgqaHBkcCk7CisKKwlocGRwLT5wZCA9IDA7CisJdGxiLT5uZWVkX2ZsdXNoID0gMTsKKwlwZ3RhYmxlX2ZyZWVfdGxiKHRsYiwgcGd0YWJsZV9mcmVlX2NhY2hlKGh1Z2VwdGUsIEhVR0VQVEVfQ0FDSEVfTlVNLAorCQkJCQkJIEhVR0VQVEVfVEFCTEVfU0laRS0xKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworc3RhdGljIHZvaWQgaHVnZXRsYl9mcmVlX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdWRfdCAqcHVkLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQoreworCXBtZF90ICpwbWQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwlzdGFydCA9IGFkZHI7CisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZiAocG1kX25vbmUoKnBtZCkpCisJCQljb250aW51ZTsKKwkJZnJlZV9odWdlcHRlX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcG1kKTsKKwl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKworCXN0YXJ0ICY9IFBVRF9NQVNLOworCWlmIChzdGFydCA8IGZsb29yKQorCQlyZXR1cm47CisJaWYgKGNlaWxpbmcpIHsKKwkJY2VpbGluZyAmPSBQVURfTUFTSzsKKwkJaWYgKCFjZWlsaW5nKQorCQkJcmV0dXJuOworCX0KKwlpZiAoZW5kIC0gMSA+IGNlaWxpbmcgLSAxKQorCQlyZXR1cm47CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgc3RhcnQpOworCXB1ZF9jbGVhcihwdWQpOworCXBtZF9mcmVlX3RsYih0bGIsIHBtZCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaHVnZXRsYl9mcmVlX3B1ZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ2RfdCAqcGdkLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQoreworCXB1ZF90ICpwdWQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwlzdGFydCA9IGFkZHI7CisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOworI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKKwkJCWNvbnRpbnVlOworCQlodWdldGxiX2ZyZWVfcG1kX3JhbmdlKHRsYiwgcHVkLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CisjZWxzZQorCQlpZiAocHVkX25vbmUoKnB1ZCkpCisJCQljb250aW51ZTsKKwkJZnJlZV9odWdlcHRlX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcHVkKTsKKyNlbmRpZgorCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOworCisJc3RhcnQgJj0gUEdESVJfTUFTSzsKKwlpZiAoc3RhcnQgPCBmbG9vcikKKwkJcmV0dXJuOworCWlmIChjZWlsaW5nKSB7CisJCWNlaWxpbmcgJj0gUEdESVJfTUFTSzsKKwkJaWYgKCFjZWlsaW5nKQorCQkJcmV0dXJuOworCX0KKwlpZiAoZW5kIC0gMSA+IGNlaWxpbmcgLSAxKQorCQlyZXR1cm47CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgc3RhcnQpOworCXBnZF9jbGVhcihwZ2QpOworCXB1ZF9mcmVlX3RsYih0bGIsIHB1ZCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHVzZXItbGV2ZWwgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGFnZXRhYmxlIGxvY2sgaGVsZC4KKyAqLwordm9pZCBodWdldGxiX2ZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICoqdGxiLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgICAgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQoreworCXBnZF90ICpwZ2Q7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwkvKgorCSAqIENvbW1lbnRzIGJlbG93IHRha2UgZnJvbSB0aGUgbm9ybWFsIGZyZWVfcGdkX3JhbmdlKCkuICBUaGV5CisJICogYXBwbHkgaGVyZSB0b28uICBUaGUgdGVzdHMgYWdhaW5zdCBIVUdFUERfTUFTSyBiZWxvdyBhcmUKKwkgKiBlc3NlbnRpYWwsIGJlY2F1c2Ugd2UgKmRvbid0KiB0ZXN0IGZvciB0aGlzIGF0IHRoZSBib3R0b20KKwkgKiBsZXZlbC4gIFdpdGhvdXQgdGhlbSB3ZSdsbCBhdHRlbXB0IHRvIGZyZWUgYSBodWdlcHRlIHRhYmxlCisJICogd2hlbiB3ZSB1bm1hcCBqdXN0IHBhcnQgb2YgaXQsIGV2ZW4gaWYgdGhlcmUgYXJlIG90aGVyCisJICogYWN0aXZlIG1hcHBpbmdzIHVzaW5nIGl0LgorCSAqCisJICogVGhlIG5leHQgZmV3IGxpbmVzIGhhdmUgZ2l2ZW4gdXMgbG90cyBvZiBncmllZi4uLgorCSAqCisJICogV2h5IGFyZSB3ZSB0ZXN0aW5nIEhVR0VQRCogYXQgdGhpcyB0b3AgbGV2ZWw/ICBCZWNhdXNlCisJICogb2Z0ZW4gdGhlcmUgd2lsbCBiZSBubyB3b3JrIHRvIGRvIGF0IGFsbCwgYW5kIHdlJ2QgcHJlZmVyCisJICogbm90IHRvIGdvIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIGJvdHRvbSBqdXN0IHRvIGRpc2NvdmVyCisJICogdGhhdC4KKwkgKgorCSAqIFdoeSBhbGwgdGhlc2UgIi0gMSJzPyAgQmVjYXVzZSAwIHJlcHJlc2VudHMgYm90aCB0aGUgYm90dG9tCisJICogb2YgdGhlIGFkZHJlc3Mgc3BhY2UgYW5kIHRoZSB0b3Agb2YgaXQgKHVzaW5nIC0xIGZvciB0aGUKKwkgKiB0b3Agd291bGRuJ3QgaGVscCBtdWNoOiB0aGUgbWFza3Mgd291bGQgZG8gdGhlIHdyb25nIHRoaW5nKS4KKwkgKiBUaGUgcnVsZSBpcyB0aGF0IGFkZHIgMCBhbmQgZmxvb3IgMCByZWZlciB0byB0aGUgYm90dG9tIG9mCisJICogdGhlIGFkZHJlc3Mgc3BhY2UsIGJ1dCBlbmQgMCBhbmQgY2VpbGluZyAwIHJlZmVyIHRvIHRoZSB0b3AKKwkgKiBDb21wYXJpc29ucyBuZWVkIHRvIHVzZSAiZW5kIC0gMSIgYW5kICJjZWlsaW5nIC0gMSIgKHRob3VnaAorCSAqIHRoYXQgZW5kIDAgY2FzZSBzaG91bGQgYmUgbXl0aGljYWwpLgorCSAqCisJICogV2hlcmV2ZXIgYWRkciBpcyBicm91Z2h0IHVwIG9yIGNlaWxpbmcgYnJvdWdodCBkb3duLCB3ZQorCSAqIG11c3QgYmUgY2FyZWZ1bCB0byByZWplY3QgInRoZSBvcHBvc2l0ZSAwIiBiZWZvcmUgaXQKKwkgKiBjb25mdXNlcyB0aGUgc3Vic2VxdWVudCB0ZXN0cy4gIEJ1dCB3aGF0IGFib3V0IHdoZXJlIGVuZCBpcworCSAqIGJyb3VnaHQgZG93biBieSBIVUdFUERfU0laRSBiZWxvdz8gbm8sIGVuZCBjYW4ndCBnbyBkb3duIHRvCisJICogMCB0aGVyZS4KKwkgKgorCSAqIFdoZXJlYXMgd2Ugcm91bmQgc3RhcnQgKGFkZHIpIGFuZCBjZWlsaW5nIGRvd24sIGJ5IGRpZmZlcmVudAorCSAqIG1hc2tzIGF0IGRpZmZlcmVudCBsZXZlbHMsIGluIG9yZGVyIHRvIHRlc3Qgd2hldGhlciBhIHRhYmxlCisJICogbm93IGhhcyBubyBvdGhlciB2bWFzIHVzaW5nIGl0LCBzbyBjYW4gYmUgZnJlZWQsIHdlIGRvbid0CisJICogYm90aGVyIHRvIHJvdW5kIGZsb29yIG9yIGVuZCB1cCAtIHRoZSB0ZXN0cyBkb24ndCBuZWVkIHRoYXQuCisJICovCisKKwlhZGRyICY9IEhVR0VQRF9NQVNLOworCWlmIChhZGRyIDwgZmxvb3IpIHsKKwkJYWRkciArPSBIVUdFUERfU0laRTsKKwkJaWYgKCFhZGRyKQorCQkJcmV0dXJuOworCX0KKwlpZiAoY2VpbGluZykgeworCQljZWlsaW5nICY9IEhVR0VQRF9NQVNLOworCQlpZiAoIWNlaWxpbmcpCisJCQlyZXR1cm47CisJfQorCWlmIChlbmQgLSAxID4gY2VpbGluZyAtIDEpCisJCWVuZCAtPSBIVUdFUERfU0laRTsKKwlpZiAoYWRkciA+IGVuZCAtIDEpCisJCXJldHVybjsKKworCXN0YXJ0ID0gYWRkcjsKKwlwZ2QgPSBwZ2Rfb2Zmc2V0KCgqdGxiKS0+bW0sIGFkZHIpOworCWRvIHsKKwkJQlVHX09OKCEgaW5faHVnZXBhZ2VfYXJlYSgoKnRsYiktPm1tLT5jb250ZXh0LCBhZGRyKSk7CisJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQorCQkJY29udGludWU7CisJCWh1Z2V0bGJfZnJlZV9wdWRfcmFuZ2UoKnRsYiwgcGdkLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CisJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiB9CiAKIHZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCkBAIC04NDEsMyArMTA0MCwyNyBAQAogIG91dDoKIAlyZXR1cm4gZXJyOwogfQorCitzdGF0aWMgdm9pZCB6ZXJvX2N0b3Iodm9pZCAqYWRkciwga21lbV9jYWNoZV90ICpjYWNoZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwltZW1zZXQoYWRkciwgMCwga21lbV9jYWNoZV9zaXplKGNhY2hlKSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGh1Z2V0bGJwYWdlX2luaXQodm9pZCkKK3sKKwlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSXzE2TV9QQUdFKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlodWdlX3BndGFibGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaHVnZXB0ZV9jYWNoZSIsCisJCQkJCSAgICAgICBIVUdFUFRFX1RBQkxFX1NJWkUsCisJCQkJCSAgICAgICBIVUdFUFRFX1RBQkxFX1NJWkUsCisJCQkJCSAgICAgICBTTEFCX0hXQ0FDSEVfQUxJR04gfAorCQkJCQkgICAgICAgU0xBQl9NVVNUX0hXQ0FDSEVfQUxJR04sCisJCQkJCSAgICAgICB6ZXJvX2N0b3IsIE5VTEwpOworCWlmICghIGh1Z2VfcGd0YWJsZV9jYWNoZSkKKwkJcGFuaWMoImh1Z2V0bGJwYWdlX2luaXQoKTogY291bGQgbm90IGNyZWF0ZSBodWdlcHRlIGNhY2hlXG4iKTsKKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChodWdldGxicGFnZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IGJhYmViZDEuLjllMzBmOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtMTYyLDcgKzE2MiwxNCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwogCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorLyogSHVnZXBhZ2VzIG5lZWQgb25lIGV4dHJhIGNhY2hlLCBpbml0aWFsaXplZCBpbiBodWdldGxicGFnZS5jLiAgV2UKKyAqIGNhbid0IHB1dCBpbnRvIHRoZSB0YWJsZXMgYWJvdmUsIGJlY2F1c2UgSFBBR0VfU0hJRlQgaXMgbm90IGNvbXBpbGUKKyAqIHRpbWUgY29uc3RhbnQuICovCitrbWVtX2NhY2hlX3QgKnBndGFibGVfY2FjaGVbQVJSQVlfU0laRShwZ3RhYmxlX2NhY2hlX3NpemUpKzFdOworI2Vsc2UKIGttZW1fY2FjaGVfdCAqcGd0YWJsZV9jYWNoZVtBUlJBWV9TSVpFKHBndGFibGVfY2FjaGVfc2l6ZSldOworI2VuZGlmCiAKIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCAwYTMzNWYzLi4wOTIzNTVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogLyogUmV0dXJucyBuaWQgaW4gdGhlIHJhbmdlIFswLi5NQVhfTlVNTk9ERVMtMV0sIG9yIC0xIGlmIG5vIHVzZWZ1bCBudW1hCiAgKiBpbmZvIGlzIGZvdW5kLgogICovCi1zdGF0aWMgaW50IG9mX25vZGVfdG9fbmlkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlKQorc3RhdGljIGludCBvZl9ub2RlX3RvX25pZF9zaW5nbGUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpCiB7CiAJaW50IG5pZCA9IC0xOwogCXVuc2lnbmVkIGludCAqdG1wOwpAQCAtMjE2LDYgKzIxNiwyOCBAQAogCXJldHVybiBuaWQ7CiB9CiAKKy8qIFdhbGsgdGhlIGRldmljZSB0cmVlIHVwd2FyZHMsIGxvb2tpbmcgZm9yIGFuIGFzc29jaWF0aXZpdHkgaWQgKi8KK2ludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRtcDsKKwlpbnQgbmlkID0gLTE7CisKKwlvZl9ub2RlX2dldChkZXZpY2UpOworCXdoaWxlIChkZXZpY2UpIHsKKwkJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKGRldmljZSk7CisJCWlmIChuaWQgIT0gLTEpCisJCQlicmVhazsKKworCSAgICAgICAgdG1wID0gZGV2aWNlOworCQlkZXZpY2UgPSBvZl9nZXRfcGFyZW50KHRtcCk7CisJCW9mX25vZGVfcHV0KHRtcCk7CisJfQorCW9mX25vZGVfcHV0KGRldmljZSk7CisKKwlyZXR1cm4gbmlkOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2Zfbm9kZV90b19uaWQpOworCiAvKgogICogSW4gdGhlb3J5LCB0aGUgImlibSxhc3NvY2lhdGl2aXR5IiBwcm9wZXJ0eSBtYXkgY29udGFpbiBtdWx0aXBsZQogICogYXNzb2NpYXRpdml0eSBsaXN0cyBiZWNhdXNlIGEgcmVzb3VyY2UgbWF5IGJlIG11bHRpcGx5IGNvbm5lY3RlZApAQCAtMzAwLDcgKzMyMiw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW5pZCA9IG9mX25vZGVfdG9fbmlkKGNwdSk7CisJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKGNwdSk7CiAKIAlpZiAobmlkIDwgMCB8fCAhbm9kZV9vbmxpbmUobmlkKSkKIAkJbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOwpAQCAtMzkzLDcgKzQxNSw3IEBACiAKIAkJY3B1ID0gZmluZF9jcHVfbm9kZShpKTsKIAkJQlVHX09OKCFjcHUpOwotCQluaWQgPSBvZl9ub2RlX3RvX25pZChjcHUpOworCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUoY3B1KTsKIAkJb2Zfbm9kZV9wdXQoY3B1KTsKIAogCQkvKgpAQCAtNDM3LDcgKzQ1OSw3IEBACiAJCSAqIGhhdmUgYXNzb2NpYXRpdml0eSBwcm9wZXJ0aWVzLiAgSWYgbm9uZSwgdGhlbgogCQkgKiBldmVyeXRoaW5nIGdvZXMgdG8gZGVmYXVsdF9uaWQuCiAJCSAqLwotCQluaWQgPSBvZl9ub2RlX3RvX25pZChtZW1vcnkpOworCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUobWVtb3J5KTsKIAkJaWYgKG5pZCA8IDApCiAJCQluaWQgPSBkZWZhdWx0X25pZDsKIAkJbm9kZV9zZXRfb25saW5lKG5pZCk7CkBAIC03NzYsNyArNzk4LDcgQEAKIGhhX25ld19yYW5nZToKIAkJc3RhcnQgPSByZWFkX25fY2VsbHMobl9tZW1fYWRkcl9jZWxscywgJm1lbWNlbGxfYnVmKTsKIAkJc2l6ZSA9IHJlYWRfbl9jZWxscyhuX21lbV9zaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQluaWQgPSBvZl9ub2RlX3RvX25pZChtZW1vcnkpOworCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUobWVtb3J5KTsKIAogCQkvKiBEb21haW5zIG5vdCBwcmVzZW50IGF0IGJvb3QgZGVmYXVsdCB0byAwICovCiAJCWlmIChuaWQgPCAwIHx8ICFub2RlX29ubGluZShuaWQpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwppbmRleCA3YzE4YjRjLi43ZTc4OWQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwpAQCAtMTU4LDI1ICsxNTgsMjUgQEAKIGxhdGVfaW5pdGNhbGwobXBjODM0eF9ydGNfaG9va3VwKTsKICNlbmRpZgogCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIE1NVSBpcyBvZmYsIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1wYzgzNHhfc3lzX3Byb2JlKHZvaWQpCiB7Ci0JLyogc2V0dXAgdGhlIFBvd2VyUEMgbW9kdWxlIHN0cnVjdCAqLwotCXBwY19tZC5zZXR1cF9hcmNoID0gbXBjODM0eF9zeXNfc2V0dXBfYXJjaDsKLQotCXBwY19tZC5pbml0X0lSUSA9IG1wYzgzNHhfc3lzX2luaXRfSVJROwotCXBwY19tZC5nZXRfaXJxID0gaXBpY19nZXRfaXJxOwotCi0JcHBjX21kLnJlc3RhcnQgPSBtcGM4M3h4X3Jlc3RhcnQ7Ci0KLQlwcGNfbWQudGltZV9pbml0ID0gbXBjODN4eF90aW1lX2luaXQ7Ci0JcHBjX21kLnNldF9ydGNfdGltZSA9IE5VTEw7Ci0JcHBjX21kLmdldF9ydGNfdGltZSA9IE5VTEw7Ci0JcHBjX21kLmNhbGlicmF0ZV9kZWNyID0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjcjsKLQotCXBwY19tZC5wcm9ncmVzcyA9IHVkYmdfcHJvZ3Jlc3M7Ci0KLQlpZiAocHBjX21kLnByb2dyZXNzKQotCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzgzNHhfc3lzX2luaXQoKTogZXhpdCIsIDApOwotCi0JcmV0dXJuOworCS8qIFdlIGFsd2F5cyBtYXRjaCBmb3Igbm93LCBldmVudHVhbGx5IHdlIHNob3VsZCBsb29rIGF0IHRoZSBmbGF0CisJICAgZGV2IHRyZWUgdG8gZW5zdXJlIHRoaXMgaXMgdGhlIGJvYXJkIHdlIGFyZSBzdXBwb3NlIHRvIHJ1biBvbgorCSovCisJcmV0dXJuIDE7CiB9CisKK2RlZmluZV9tYWNoaW5lKG1wYzgzNHhfc3lzKSB7CisJLm5hbWUJCQk9ICJNUEM4MzR4IFNZUyIsCisJLnByb2JlCQkJPSBtcGM4MzR4X3N5c19wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBtcGM4MzR4X3N5c19zZXR1cF9hcmNoLAorCS5pbml0X0lSUQkJPSBtcGM4MzR4X3N5c19pbml0X0lSUSwKKwkuZ2V0X2lycQkJPSBpcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gbXBjODN4eF9yZXN0YXJ0LAorCS50aW1lX2luaXQJCT0gbXBjODN4eF90aW1lX2luaXQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwppbmRleCBiNzgyMWRiLi41ZWVmZjM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwpAQCAtMjIwLDI1ICsyMjAsMjUgQEAKIAlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQogCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1wYzg1eHhfYWRzX3Byb2JlKHZvaWQpCiB7Ci0JcHBjX21kLnNldHVwX2FyY2ggPSBtcGM4NXh4X2Fkc19zZXR1cF9hcmNoOwotCXBwY19tZC5zaG93X2NwdWluZm8gPSBtcGM4NXh4X2Fkc19zaG93X2NwdWluZm87Ci0KLQlwcGNfbWQuaW5pdF9JUlEgPSBtcGM4NXh4X2Fkc19waWNfaW5pdDsKLQlwcGNfbWQuZ2V0X2lycSA9IG1waWNfZ2V0X2lycTsKLQotCXBwY19tZC5yZXN0YXJ0ID0gbXBjODV4eF9yZXN0YXJ0OwotCXBwY19tZC5wb3dlcl9vZmYgPSBOVUxMOwotCXBwY19tZC5oYWx0ID0gTlVMTDsKLQotCXBwY19tZC50aW1lX2luaXQgPSBOVUxMOwotCXBwY19tZC5zZXRfcnRjX3RpbWUgPSBOVUxMOwotCXBwY19tZC5nZXRfcnRjX3RpbWUgPSBOVUxMOwotCXBwY19tZC5jYWxpYnJhdGVfZGVjciA9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3I7Ci0KLQlwcGNfbWQucHJvZ3Jlc3MgPSB1ZGJnX3Byb2dyZXNzOwotCi0JaWYgKHBwY19tZC5wcm9ncmVzcykKLQkJcHBjX21kLnByb2dyZXNzKCJtcGM4NXh4X2FkcyBwbGF0Zm9ybV9pbml0KCk6IGV4aXQiLCAwKTsKKwkvKiBXZSBhbHdheXMgbWF0Y2ggZm9yIG5vdywgZXZlbnR1YWxseSB3ZSBzaG91bGQgbG9vayBhdCB0aGUgZmxhdAorCSAgIGRldiB0cmVlIHRvIGVuc3VyZSB0aGlzIGlzIHRoZSBib2FyZCB3ZSBhcmUgc3VwcG9zZSB0byBydW4gb24KKwkqLworCXJldHVybiAxOwogfQorCitkZWZpbmVfbWFjaGluZShtcGM4NXh4X2FkcykgeworCS5uYW1lCQkJPSAiTVBDODV4eCBBRFMiLAorCS5wcm9iZQkJCT0gbXBjODV4eF9hZHNfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gbXBjODV4eF9hZHNfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEJCT0gbXBjODV4eF9hZHNfcGljX2luaXQsCisJLnNob3dfY3B1aW5mbwkJPSBtcGM4NXh4X2Fkc19zaG93X2NwdWluZm8sCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IG1wYzg1eHhfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCmluZGV4IGMyYTNkYjguLjZhMDJkNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCkBAIC0xMiw3ICsxMiw4IEBACiAKIGNvbmZpZyBTUFVGU19NTUFQCiAJYm9vbAotCWRlcGVuZHMgb24gU1BVX0ZTICYmIFNQQVJTRU1FTSAmJiAhUFBDXzY0S19QQUdFUworCWRlcGVuZHMgb24gU1BVX0ZTICYmIFNQQVJTRU1FTQorCXNlbGVjdCBNRU1PUllfSE9UUExVRwogCWRlZmF1bHQgeQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCmluZGV4IGRhYzVkMDMuLmZkM2U1NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeV9ob3RwbHVnLmg+CiAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNDYsNiArNDgsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zcHUuaD4KIAogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUgImlvbW11LmgiCkBAIC02OSw3NyArNzIsNiBAQAogCW9mX25vZGVfcHV0KHJvb3QpOwogfQogCi0jaWZkZWYgQ09ORklHX1NQQVJTRU1FTQotc3RhdGljIGludCBfX2luaXQgZmluZF9zcHVfbm9kZV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKnNwZSkKLXsKLQl1bnNpZ25lZCBpbnQgKmlkOwotI2lmZGVmIENPTkZJR19OVU1BCi0Jc3RydWN0IGRldmljZV9ub2RlICpjcHU7Ci0JY3B1ID0gc3BlLT5wYXJlbnQtPnBhcmVudDsKLQlpZCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkoY3B1LCAibm9kZS1pZCIsIE5VTEwpOwotI2Vsc2UKLQlpZCA9IE5VTEw7Ci0jZW5kaWYKLQlyZXR1cm4gaWQgPyAqaWQgOiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2VsbF9zcHVwcm9wX3ByZXNlbnQoc3RydWN0IGRldmljZV9ub2RlICpzcGUsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgKnByb3AsIGludCBlYXJseSkKLXsKLQlzdHJ1Y3QgYWRkcmVzc19wcm9wIHsKLQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCQl1bnNpZ25lZCBpbnQgbGVuOwotCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKnA7Ci0JaW50IHByb3BsZW47Ci0KLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgcGZuOwotCWludCBub2RlX2lkOwotCi0JcCA9ICh2b2lkKilnZXRfcHJvcGVydHkoc3BlLCBwcm9wLCAmcHJvcGxlbik7Ci0JV0FSTl9PTihwcm9wbGVuICE9IHNpemVvZiAoKnApKTsKLQotCW5vZGVfaWQgPSBmaW5kX3NwdV9ub2RlX2lkKHNwZSk7Ci0KLQlzdGFydF9wZm4gPSBwLT5hZGRyZXNzID4+IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IChwLT5hZGRyZXNzICsgcC0+bGVuICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQotCS8qIFdlIG5lZWQgdG8gY2FsbCBtZW1vcnlfcHJlc2VudCAqYmVmb3JlKiB0aGUgY2FsbCB0byBzcGFyc2VfaW5pdCwKLQkgICBidXQgd2UgY2FuIGluaXRpYWxpemUgdGhlIHBhZ2Ugc3RydWN0cyBvbmx5ICphZnRlciogdGhhdCBjYWxsLgotCSAgIFRodXMsIHdlJ3JlIGJlaW5nIGNhbGxlZCB0d2ljZS4gKi8KLQlpZiAoZWFybHkpCi0JCW1lbW9yeV9wcmVzZW50KG5vZGVfaWQsIHN0YXJ0X3BmbiwgZW5kX3Bmbik7Ci0JZWxzZSB7Ci0JCS8qIEFzIHRoZSBwYWdlcyBiYWNraW5nIFNQVSBMUyBhbmQgSS9PIGFyZSBvdXRzaWRlIHRoZSByYW5nZQotCQkgICBvZiByZWd1bGFyIG1lbW9yeSwgdGhlaXIgcGFnZSBzdHJ1Y3RzIHdlcmUgbm90IGluaXRpYWxpemVkCi0JCSAgIGJ5IGZyZWVfYXJlYV9pbml0LiBEbyBpdCBoZXJlIGluc3RlYWQuICovCi0JCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gPCBlbmRfcGZuOyBwZm4rKykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQkJc2V0X3BhZ2VfbGlua3MocGFnZSwgWk9ORV9ETUEsIG5vZGVfaWQsIHBmbik7Ci0JCQlpbml0X3BhZ2VfY291bnQocGFnZSk7Ci0JCQlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOwotCQkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOwotCQkJSU5JVF9MSVNUX0hFQUQoJnBhZ2UtPmxydSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjZWxsX3NwdW1lbV9pbml0KGludCBlYXJseSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Ci0JZm9yIChub2RlID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgInNwZSIpOwotCQkJbm9kZTsgbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG5vZGUsICJzcGUiKSkgewotCQljZWxsX3NwdXByb3BfcHJlc2VudChub2RlLCAibG9jYWwtc3RvcmUiLCBlYXJseSk7Ci0JCWNlbGxfc3B1cHJvcF9wcmVzZW50KG5vZGUsICJwcm9ibGVtIiwgZWFybHkpOwotCQljZWxsX3NwdXByb3BfcHJlc2VudChub2RlLCAicHJpdjEiLCBlYXJseSk7Ci0JCWNlbGxfc3B1cHJvcF9wcmVzZW50KG5vZGUsICJwcml2MiIsIGVhcmx5KTsKLQl9Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGNlbGxfc3B1bWVtX2luaXQoaW50IGVhcmx5KQotewotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIGNlbGxfcHJvZ3Jlc3MoY2hhciAqcywgdW5zaWduZWQgc2hvcnQgaGV4KQogewogCXByaW50aygiKioqICUwNHggOiAlc1xuIiwgaGV4LCBzID8gcyA6ICIiKTsKQEAgLTE3Miw4ICsxMDQsNiBAQAogI2VuZGlmCiAKIAltbWlvX252cmFtX2luaXQoKTsKLQotCWNlbGxfc3B1bWVtX2luaXQoMCk7CiB9CiAKIC8qCkBAIC0xODksMjIgKzExOSwxOSBAQAogCiAJcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgPSBJQ19DRUxMX1BJQzsKIAotCWNlbGxfc3B1bWVtX2luaXQoMSk7Ci0KIAlEQkcoIiA8LSBjZWxsX2luaXRfZWFybHkoKVxuIik7CiB9CiAKIAogc3RhdGljIGludCBfX2luaXQgY2VsbF9wcm9iZSh2b2lkKQogewotCS8qIFhYWCBUaGlzIGlzIHRlbXBvcmFyeSwgdGhlIENlbGwgbWFpbnRhaW5lciB3aWxsIGNvbWUgdXAgd2l0aAotCSAqIG1vcmUgYXBwcm9wcmlhdGUgZGV0ZWN0aW9uIGxvZ2ljCi0JICovCiAJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ1BCVy0xLjAiKSkKLQkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMTsKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ0JFQSIpIHx8CisJICAgIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENQQlctMS4wIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCmluZGV4IDI2OWRkYTQuLmFkMTQxZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCkBAIC0zMDYsMTkgKzMwNiwxOSBAQAogCiAJc25wcmludGYoc3B1LT5pcnFfYzAsIHNpemVvZiAoc3B1LT5pcnFfYzApLCAic3BlJTAyZC4wIiwgc3B1LT5udW1iZXIpOwogCXJldCA9IHJlcXVlc3RfaXJxKGlycV9iYXNlICsgc3B1LT5pc3JjLAotCQkgc3B1X2lycV9jbGFzc18wLCAwLCBzcHUtPmlycV9jMCwgc3B1KTsKKwkJIHNwdV9pcnFfY2xhc3NfMCwgU0FfSU5URVJSVVBULCBzcHUtPmlycV9jMCwgc3B1KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCXNucHJpbnRmKHNwdS0+aXJxX2MxLCBzaXplb2YgKHNwdS0+aXJxX2MxKSwgInNwZSUwMmQuMSIsIHNwdS0+bnVtYmVyKTsKIAlyZXQgPSByZXF1ZXN0X2lycShpcnFfYmFzZSArIElJQ19DTEFTU19TVFJJREUgKyBzcHUtPmlzcmMsCi0JCSBzcHVfaXJxX2NsYXNzXzEsIDAsIHNwdS0+aXJxX2MxLCBzcHUpOworCQkgc3B1X2lycV9jbGFzc18xLCBTQV9JTlRFUlJVUFQsIHNwdS0+aXJxX2MxLCBzcHUpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0MTsKIAogCXNucHJpbnRmKHNwdS0+aXJxX2MyLCBzaXplb2YgKHNwdS0+aXJxX2MyKSwgInNwZSUwMmQuMiIsIHNwdS0+bnVtYmVyKTsKIAlyZXQgPSByZXF1ZXN0X2lycShpcnFfYmFzZSArIDIqSUlDX0NMQVNTX1NUUklERSArIHNwdS0+aXNyYywKLQkJIHNwdV9pcnFfY2xhc3NfMiwgMCwgc3B1LT5pcnFfYzIsIHNwdSk7CisJCSBzcHVfaXJxX2NsYXNzXzIsIFNBX0lOVEVSUlVQVCwgc3B1LT5pcnFfYzIsIHNwdSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQyOwogCWdvdG8gb3V0OwpAQCAtNDg3LDEwICs0ODcsMTQgQEAKIAllYSA9IHNwdS0+ZGFyOwogCWRzaXNyID0gc3B1LT5kc2lzcjsKIAlpZiAoZHNpc3IgJiAoTUZDX0RTSVNSX1BURV9OT1RfRk9VTkQgfCBNRkNfRFNJU1JfQUNDRVNTX0RFTklFRCkpIHsKKwkJdTY0IGZsYWdzOworCiAJCWFjY2VzcyA9IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUik7CiAJCWFjY2VzcyB8PSAoZHNpc3IgJiBNRkNfRFNJU1JfQUNDRVNTX1BVVCkgPyBfUEFHRV9SVyA6IDBVTDsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlpZiAoaGFzaF9wYWdlKGVhLCBhY2Nlc3MsIDB4MzAwKSAhPSAwKQogCQkJZXJyb3IgfD0gQ0xBU1MxX0VOQUJMRV9TVE9SQUdFX0ZBVUxUX0lOVFI7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiAJaWYgKGVycm9yICYgQ0xBU1MxX0VOQUJMRV9TVE9SQUdFX0ZBVUxUX0lOVFIpIHsKIAkJaWYgKChyZXQgPSBzcHVfaGFuZGxlX21tX2ZhdWx0KHNwdSkpICE9IDApCkBAIC01MTYsOCArNTIwLDUwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfaXJxX3NldGFmZmluaXR5KTsKIAotc3RhdGljIHZvaWQgX19pb21lbSAqIF9faW5pdCBtYXBfc3BlX3Byb3Aoc3RydWN0IGRldmljZV9ub2RlICpuLAotCQkJCQkJIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IF9faW5pdCBmaW5kX3NwdV9ub2RlX2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqc3BlKQoreworCXVuc2lnbmVkIGludCAqaWQ7CisJc3RydWN0IGRldmljZV9ub2RlICpjcHU7CisJY3B1ID0gc3BlLT5wYXJlbnQtPnBhcmVudDsKKwlpZCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkoY3B1LCAibm9kZS1pZCIsIE5VTEwpOworCXJldHVybiBpZCA/ICppZCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNlbGxfc3B1cHJvcF9wcmVzZW50KHN0cnVjdCBzcHUgKnNwdSwgc3RydWN0IGRldmljZV9ub2RlICpzcGUsCisJCWNvbnN0IGNoYXIgKnByb3ApCit7CisJc3RhdGljIERFRklORV9NVVRFWChhZGRfc3B1bWVtX211dGV4KTsKKworCXN0cnVjdCBhZGRyZXNzX3Byb3AgeworCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJCXVuc2lnbmVkIGludCBsZW47CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqcDsKKwlpbnQgcHJvcGxlbjsKKworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBucl9wYWdlczsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YTsKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwlpbnQgcmV0OworCisJcCA9ICh2b2lkKilnZXRfcHJvcGVydHkoc3BlLCBwcm9wLCAmcHJvcGxlbik7CisJV0FSTl9PTihwcm9wbGVuICE9IHNpemVvZiAoKnApKTsKKworCXN0YXJ0X3BmbiA9IHAtPmFkZHJlc3MgPj4gUEFHRV9TSElGVDsKKwlucl9wYWdlcyA9ICgodW5zaWduZWQgbG9uZylwLT5sZW4gKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCisJcGdkYXRhID0gTk9ERV9EQVRBKHNwdS0+bmlkKTsKKwl6b25lID0gcGdkYXRhLT5ub2RlX3pvbmVzOworCisJLyogWFhYIHJldGhpbmsgbG9ja2luZyBoZXJlICovCisJbXV0ZXhfbG9jaygmYWRkX3NwdW1lbV9tdXRleCk7CisJcmV0ID0gX19hZGRfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CisJbXV0ZXhfdW5sb2NrKCZhZGRfc3B1bWVtX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBfX2luaXQgbWFwX3NwZV9wcm9wKHN0cnVjdCBzcHUgKnNwdSwKKwkJc3RydWN0IGRldmljZV9ub2RlICpuLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBhZGRyZXNzX3Byb3AgewogCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CkBAIC01MjYsNiArNTcyLDggQEAKIAogCXZvaWQgKnA7CiAJaW50IHByb3BsZW47CisJdm9pZCogcmV0ID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKIAogCXAgPSBnZXRfcHJvcGVydHkobiwgbmFtZSwgJnByb3BsZW4pOwogCWlmIChwcm9wbGVuICE9IHNpemVvZiAoc3RydWN0IGFkZHJlc3NfcHJvcCkpCkBAIC01MzMsNyArNTgxLDE0IEBACiAKIAlwcm9wID0gcDsKIAotCXJldHVybiBpb3JlbWFwKHByb3AtPmFkZHJlc3MsIHByb3AtPmxlbik7CisJZXJyID0gY2VsbF9zcHVwcm9wX3ByZXNlbnQoc3B1LCBuLCBuYW1lKTsKKwlpZiAoZXJyICYmIChlcnIgIT0gLUVFWElTVCkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaW9yZW1hcChwcm9wLT5hZGRyZXNzLCBwcm9wLT5sZW4pOworCisgb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNwdV91bm1hcChzdHJ1Y3Qgc3B1ICpzcHUpCkBAIC01NDQsNDQgKzU5OSw0NSBAQAogCWlvdW5tYXAoKHU4IF9faW9tZW0gKilzcHUtPmxvY2FsX3N0b3JlKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc3B1X21hcF9kZXZpY2Uoc3RydWN0IHNwdSAqc3B1LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnNwZSkKK3N0YXRpYyBpbnQgX19pbml0IHNwdV9tYXBfZGV2aWNlKHN0cnVjdCBzcHUgKnNwdSwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewogCWNoYXIgKnByb3A7CiAJaW50IHJldDsKIAogCXJldCA9IC1FTk9ERVY7Ci0JcHJvcCA9IGdldF9wcm9wZXJ0eShzcGUsICJpc3JjIiwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShub2RlLCAiaXNyYyIsIE5VTEwpOwogCWlmICghcHJvcCkKIAkJZ290byBvdXQ7CiAJc3B1LT5pc3JjID0gKih1bnNpZ25lZCBpbnQgKilwcm9wOwogCi0Jc3B1LT5uYW1lID0gZ2V0X3Byb3BlcnR5KHNwZSwgIm5hbWUiLCBOVUxMKTsKKwlzcHUtPm5hbWUgPSBnZXRfcHJvcGVydHkobm9kZSwgIm5hbWUiLCBOVUxMKTsKIAlpZiAoIXNwdS0+bmFtZSkKIAkJZ290byBvdXQ7CiAKLQlwcm9wID0gZ2V0X3Byb3BlcnR5KHNwZSwgImxvY2FsLXN0b3JlIiwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShub2RlLCAibG9jYWwtc3RvcmUiLCBOVUxMKTsKIAlpZiAoIXByb3ApCiAJCWdvdG8gb3V0OwogCXNwdS0+bG9jYWxfc3RvcmVfcGh5cyA9ICoodW5zaWduZWQgbG9uZyAqKXByb3A7CiAKIAkvKiB3ZSB1c2UgbG9jYWwgc3RvcmUgYXMgcmFtLCBub3QgaW8gbWVtb3J5ICovCi0Jc3B1LT5sb2NhbF9zdG9yZSA9ICh2b2lkIF9fZm9yY2UgKiltYXBfc3BlX3Byb3Aoc3BlLCAibG9jYWwtc3RvcmUiKTsKKwlzcHUtPmxvY2FsX3N0b3JlID0gKHZvaWQgX19mb3JjZSAqKQorCQltYXBfc3BlX3Byb3Aoc3B1LCBub2RlLCAibG9jYWwtc3RvcmUiKTsKIAlpZiAoIXNwdS0+bG9jYWxfc3RvcmUpCiAJCWdvdG8gb3V0OwogCi0JcHJvcCA9IGdldF9wcm9wZXJ0eShzcGUsICJwcm9ibGVtIiwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShub2RlLCAicHJvYmxlbSIsIE5VTEwpOwogCWlmICghcHJvcCkKIAkJZ290byBvdXRfdW5tYXA7CiAJc3B1LT5wcm9ibGVtX3BoeXMgPSAqKHVuc2lnbmVkIGxvbmcgKilwcm9wOwogCi0Jc3B1LT5wcm9ibGVtPSBtYXBfc3BlX3Byb3Aoc3BlLCAicHJvYmxlbSIpOworCXNwdS0+cHJvYmxlbT0gbWFwX3NwZV9wcm9wKHNwdSwgbm9kZSwgInByb2JsZW0iKTsKIAlpZiAoIXNwdS0+cHJvYmxlbSkKIAkJZ290byBvdXRfdW5tYXA7CiAKLQlzcHUtPnByaXYxPSBtYXBfc3BlX3Byb3Aoc3BlLCAicHJpdjEiKTsKKwlzcHUtPnByaXYxPSBtYXBfc3BlX3Byb3Aoc3B1LCBub2RlLCAicHJpdjEiKTsKIAkvKiBwcml2MSBpcyBub3QgYXZhaWxhYmxlIG9uIGEgaHlwZXJ2aXNvciAqLwogCi0Jc3B1LT5wcml2Mj0gbWFwX3NwZV9wcm9wKHNwZSwgInByaXYyIik7CisJc3B1LT5wcml2Mj0gbWFwX3NwZV9wcm9wKHNwdSwgbm9kZSwgInByaXYyIik7CiAJaWYgKCFzcHUtPnByaXYyKQogCQlnb3RvIG91dF91bm1hcDsKIAlyZXQgPSAwOwpAQCAtNTkzLDE3ICs2NDksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfc3B1X25vZGVfaWQoc3RydWN0IGRldmljZV9ub2RlICpzcGUpCi17Ci0JdW5zaWduZWQgaW50ICppZDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKLQotCWNwdSA9IHNwZS0+cGFyZW50LT5wYXJlbnQ7Ci0JaWQgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KGNwdSwgIm5vZGUtaWQiLCBOVUxMKTsKLQotCXJldHVybiBpZCA/ICppZCA6IDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9zcHUoc3RydWN0IGRldmljZV9ub2RlICpzcGUpCiB7CiAJc3RydWN0IHNwdSAqc3B1OwpAQCAtNjIwLDYgKzY2NSwxMCBAQAogCQlnb3RvIG91dF9mcmVlOwogCiAJc3B1LT5ub2RlID0gZmluZF9zcHVfbm9kZV9pZChzcGUpOworCXNwdS0+bmlkID0gb2Zfbm9kZV90b19uaWQoc3BlKTsKKwlpZiAoc3B1LT5uaWQgPT0gLTEpCisJCXNwdS0+bmlkID0gMDsKKwogCXNwdS0+c3RvcF9jb2RlID0gMDsKIAlzcHUtPnNsYl9yZXBsYWNlID0gMDsKIAlzcHUtPm1tID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfY2FsbGJhY2tzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2NhbGxiYWNrcy5jCmluZGV4IDNhNDI0NWMuLmI0N2ZjYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfY2FsbGJhY2tzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9jYWxsYmFja3MuYwpAQCAtMjU4LDYgKzI1OCw3IEBACiAJW19fTlJfZnV0ZXhdCQkJc3lzX2Z1dGV4LAogCVtfX05SX3NjaGVkX3NldGFmZmluaXR5XQlzeXNfc2NoZWRfc2V0YWZmaW5pdHksCiAJW19fTlJfc2NoZWRfZ2V0YWZmaW5pdHldCXN5c19zY2hlZF9nZXRhZmZpbml0eSwKKwlbMjI0XQkJCQlzeXNfbmlfc3lzY2FsbCwKIAlbX19OUl90dXhjYWxsXQkJCXN5c19uaV9zeXNjYWxsLAogCVsyMjZdCQkJCXN5c19uaV9zeXNjYWxsLAogCVtfX05SX2lvX3NldHVwXQkJCXN5c19pb19zZXR1cCwKQEAgLTMxNiwyMSArMzE3LDM3IEBACiAJW19fTlJfcHNlbGVjdDZdCQkJc3lzX25pX3N5c2NhbGwsIC8qIHN5c19wc2VsZWN0ICovCiAJW19fTlJfcHBvbGxdCQkJc3lzX25pX3N5c2NhbGwsIC8qIHN5c19wcG9sbCAqLwogCVtfX05SX3Vuc2hhcmVdCQkJc3lzX3Vuc2hhcmUsCisJW19fTlJfc3BsaWNlXQkJCXN5c19zcGxpY2UsCisJW19fTlJfdGVlXQkJCXN5c190ZWUsCisJW19fTlJfdm1zcGxpY2VdCQkJc3lzX3Ztc3BsaWNlLAorCVtfX05SX29wZW5hdF0JCQlzeXNfb3BlbmF0LAorCVtfX05SX21rZGlyYXRdCQkJc3lzX21rZGlyYXQsCisJW19fTlJfbWtub2RhdF0JCQlzeXNfbWtub2RhdCwKKwlbX19OUl9mY2hvd25hdF0JCQlzeXNfZmNob3duYXQsCisJW19fTlJfZnV0aW1lc2F0XQkJc3lzX2Z1dGltZXNhdCwKKwlbX19OUl9uZXdmc3RhdGF0XQkJc3lzX25ld2ZzdGF0YXQsCisJW19fTlJfdW5saW5rYXRdCQkJc3lzX3VubGlua2F0LAorCVtfX05SX3JlbmFtZWF0XQkJCXN5c19yZW5hbWVhdCwKKwlbX19OUl9saW5rYXRdCQkJc3lzX2xpbmthdCwKKwlbX19OUl9zeW1saW5rYXRdCQlzeXNfc3ltbGlua2F0LAorCVtfX05SX3JlYWRsaW5rYXRdCQlzeXNfcmVhZGxpbmthdCwKKwlbX19OUl9mY2htb2RhdF0JCQlzeXNfZmNobW9kYXQsCisJW19fTlJfZmFjY2Vzc2F0XQkJc3lzX2ZhY2Nlc3NhdCwKKwlbX19OUl9nZXRfcm9idXN0X2xpc3RdCQlzeXNfZ2V0X3JvYnVzdF9saXN0LAorCVtfX05SX3NldF9yb2J1c3RfbGlzdF0JCXN5c19zZXRfcm9idXN0X2xpc3QsCiB9OwogCiBsb25nIHNwdV9zeXNfY2FsbGJhY2soc3RydWN0IHNwdV9zeXNjYWxsX2Jsb2NrICpzKQogewogCWxvbmcgKCpzeXNjYWxsKSh1NjQgYTEsIHU2NCBhMiwgdTY0IGEzLCB1NjQgYTQsIHU2NCBhNSwgdTY0IGE2KTsKIAotCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHNwdV9zeXNjYWxsX3RhYmxlKSAhPSBfX05SX3N5c2NhbGxzKTsKLQotCXN5c2NhbGwgPSBzcHVfc3lzY2FsbF90YWJsZVtzLT5ucl9yZXRdOwotCi0JaWYgKHMtPm5yX3JldCA+PSBfX05SX3N5c2NhbGxzKSB7CisJaWYgKHMtPm5yX3JldCA+PSBBUlJBWV9TSVpFKHNwdV9zeXNjYWxsX3RhYmxlKSkgewogCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgc3lzY2FsbCAjJWxkIiwgX19GVU5DVElPTl9fLCBzLT5ucl9yZXQpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKKwlzeXNjYWxsID0gc3B1X3N5c2NhbGxfdGFibGVbcy0+bnJfcmV0XTsKKwogI2lmZGVmIERFQlVHCiAJcHJpbnRfc3ltYm9sKEtFUk5fREVCVUcgIlNQVS1zeXNjYWxsICVzOiIsICh1bnNpZ25lZCBsb25nKXN5c2NhbGwpOwogCXByaW50aygic3lzY2FsbCVsZCglbHgsICVseCwgJWx4LCAlbHgsICVseCwgJWx4KVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYwppbmRleCBjMDRlMDc4Li40ODNjOGI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvcnVuLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL3NwdS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAogI2luY2x1ZGUgInNwdWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYwppbmRleCA5Nzg5OGQ1Li4xNzI2YmZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3dpdGNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N3aXRjaC5jCkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCQljeWNsZXNfdCByZXN1bWVfdGltZSA9IGdldF9jeWNsZXMoKTsKIAkJY3ljbGVzX3QgZGVsdGFfdGltZSA9IHJlc3VtZV90aW1lIC0gY3NhLT5zdXNwZW5kX3RpbWU7CiAKLQkJY3NhLT5sc2NzYS0+ZGVjci5zbG90WzBdID0gZGVsdGFfdGltZTsKKwkJY3NhLT5sc2NzYS0+ZGVjci5zbG90WzBdIC09IGRlbHRhX3RpbWU7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvY2hycC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL2NocnAuaAppbmRleCA2M2YwYWVlLi45OTZjMjg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvY2hycC5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9jaHJwLmgKQEAgLTksMyArOSw0IEBACiAKIGV4dGVybiB2b2lkIGNocnBfZmluZF9icmlkZ2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2hycF9ldmVudF9zY2FuKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgY2hycF9wY2liaW9zX2ZpeHVwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCmluZGV4IDhlZjI3OWEuLmFjMjI0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxhc20vZ3JhY2tsZS5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAKKyNpbmNsdWRlICJjaHJwLmgiCisKIC8qIExvbmdUcmFpbCAqLwogdm9pZCBfX2lvbWVtICpnZzJfcGNpX2NvbmZpZ19iYXNlOwogCkBAIC0zMTQsNiArMzE2LDYgQEAKIAl9CiAKIAkvKiBEbyBub3QgZml4dXAgaW50ZXJydXB0cyBmcm9tIE9GIHRyZWUgb24gcGVnYXNvcyAqLwotCWlmIChpc19wZWdhc29zID09IDApCi0JCXBwY19tZC5wY2liaW9zX2ZpeHVwID0gY2hycF9wY2liaW9zX2ZpeHVwOworCWlmIChpc19wZWdhc29zKQorCQlwcGNfbWQucGNpYmlvc19maXh1cCA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCmluZGV4IDIzYTIwMTcuLjE4ZDg5ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCkBAIC00NDAsOCArNDQwLDYgQEAKIAogCWlmIChfY2hycF90eXBlID09IF9DSFJQX1BlZ2Fzb3MpCiAJCXBwY19tZC5nZXRfaXJxICAgICAgICA9IGk4MjU5X2lycTsKLQllbHNlCi0JCXBwY19tZC5nZXRfaXJxICAgICAgICA9IG1waWNfZ2V0X2lycTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoWE1PTikKIAkvKiBzZWUgaWYgdGhlcmUgaXMgYSBrZXlib2FyZCBpbiB0aGUgZGV2aWNlIHRyZWUKQEAgLTUyOCwyNiArNTI2LDI0IEBACiAJLyogQXNzdW1lIHdlIGhhdmUgYW4gODI1OS4uLiAqLwogCV9faXJxX29mZnNldF92YWx1ZSA9IE5VTV9JU0FfSU5URVJSVVBUUzsKIAotCXBwY19tZC5zZXR1cF9hcmNoICAgICA9IGNocnBfc2V0dXBfYXJjaDsKLQlwcGNfbWQuc2hvd19jcHVpbmZvICAgPSBjaHJwX3Nob3dfY3B1aW5mbzsKLQotCXBwY19tZC5pbml0X0lSUSAgICAgICA9IGNocnBfaW5pdF9JUlE7Ci0JcHBjX21kLmluaXQgICAgICAgICAgID0gY2hycF9pbml0MjsKLQotCXBwY19tZC5waHlzX21lbV9hY2Nlc3NfcHJvdCA9IHBjaV9waHlzX21lbV9hY2Nlc3NfcHJvdDsKLQotCXBwY19tZC5yZXN0YXJ0ICAgICAgICA9IHJ0YXNfcmVzdGFydDsKLQlwcGNfbWQucG93ZXJfb2ZmICAgICAgPSBydGFzX3Bvd2VyX29mZjsKLQlwcGNfbWQuaGFsdCAgICAgICAgICAgPSBydGFzX2hhbHQ7Ci0KLQlwcGNfbWQudGltZV9pbml0ICAgICAgPSBjaHJwX3RpbWVfaW5pdDsKLQlwcGNfbWQuY2FsaWJyYXRlX2RlY3IgPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyOwotCi0JLyogdGhpcyBtYXkgZ2V0IG92ZXJyaWRkZW4gd2l0aCBydGFzIHJvdXRpbmVzIGxhdGVyLi4uICovCi0JcHBjX21kLnNldF9ydGNfdGltZSAgID0gY2hycF9zZXRfcnRjX3RpbWU7Ci0JcHBjX21kLmdldF9ydGNfdGltZSAgID0gY2hycF9nZXRfcnRjX3RpbWU7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0Jc21wX29wcyA9ICZjaHJwX3NtcF9vcHM7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLworCXJldHVybiAxOwogfQorCitkZWZpbmVfbWFjaGluZShjaHJwKSB7CisJLm5hbWUJCQk9ICJDSFJQIiwKKwkucHJvYmUJCQk9IGNocnBfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gY2hycF9zZXR1cF9hcmNoLAorCS5pbml0CQkJPSBjaHJwX2luaXQyLAorCS5zaG93X2NwdWluZm8JCT0gY2hycF9zaG93X2NwdWluZm8sCisJLmluaXRfSVJRCQk9IGNocnBfaW5pdF9JUlEsCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5wY2liaW9zX2ZpeHVwCQk9IGNocnBfcGNpYmlvc19maXh1cCwKKwkucmVzdGFydAkJPSBydGFzX3Jlc3RhcnQsCisJLnBvd2VyX29mZgkJPSBydGFzX3Bvd2VyX29mZiwKKwkuaGFsdAkJCT0gcnRhc19oYWx0LAorCS50aW1lX2luaXQJCT0gY2hycF90aW1lX2luaXQsCisJLnNldF9ydGNfdGltZQkJPSBjaHJwX3NldF9ydGNfdGltZSwKKwkuZ2V0X3J0Y190aW1lCQk9IGNocnBfZ2V0X3J0Y190aW1lLAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5waHlzX21lbV9hY2Nlc3NfcHJvdAk9IHBjaV9waHlzX21lbV9hY2Nlc3NfcHJvdCwKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IDZjZThhNDAuLmE2ZmQ5YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9scGFyX21hcC5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSAibmFjYS5oIgogI2luY2x1ZGUgInNldHVwLmgiCkBAIC02ODQsNiArNjg1LDEyIEBACiAJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0lTRVJJRVM7CiAJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0xQQVI7CiAKKwkvKgorCSAqIFRoZSBIeXBlcnZpc29yIG9ubHkgYWxsb3dzIHVzIHVwIHRvIDI1NiBpbnRlcnJ1cHQKKwkgKiBzb3VyY2VzICh0aGUgaXJxIG51bWJlciBpcyBwYXNzZWQgaW4gYSB1OCkuCisJICovCisJdmlydF9pcnFfbWF4ID0gMjU1OworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKaW5kZXggZTE0ZjlhYy4uYzg5NmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKQEAgLTIzMSw2ICsyMzEsMTQgQEAKIAlyZXR1cm4gaXNyOwogfQogCitzdGF0aWMgdm9pZCBrd19pMmNfZG9fc3RvcChzdHJ1Y3QgcG1hY19pMmNfaG9zdF9rdyAqaG9zdCwgaW50IHJlc3VsdCkKK3sKKwlrd193cml0ZV9yZWcocmVnX2NvbnRyb2wsIEtXX0kyQ19DVExfU1RPUCk7CisJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOworCWhvc3QtPnJlc3VsdCA9IHJlc3VsdDsKK30KKworCiBzdGF0aWMgdm9pZCBrd19pMmNfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcG1hY19pMmNfaG9zdF9rdyAqaG9zdCwgdTggaXNyKQogewogCXU4IGFjazsKQEAgLTI0Niw0MiArMjU0LDM2IEBACiAJfQogCiAJaWYgKGlzciA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvd19pMmM6IFRpbWVvdXQgaW4gaTJjIHRyYW5zZmVyIgorCQkgICAgICAgIiBvbiBrZXl3ZXN0ICFcbiIpOwogCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfc3RvcCkgewotCQkJREJHX0xPVygiS1c6IFRpbWVvdXQgIVxuIik7Ci0JCQlob3N0LT5yZXN1bHQgPSAtRUlPOwotCQkJZ290byBzdG9wOworCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgLUVJTyk7CisJCQlyZXR1cm47CiAJCX0KLQkJaWYgKGhvc3QtPnN0YXRlID09IHN0YXRlX3N0b3ApIHsKLQkJCWFjayA9IGt3X3JlYWRfcmVnKHJlZ19zdGF0dXMpOwotCQkJaWYgKGFjayAmIEtXX0kyQ19TVEFUX0JVU1kpCi0JCQkJa3dfd3JpdGVfcmVnKHJlZ19zdGF0dXMsIDApOwotCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9pZGxlOwotCQkJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDB4MDApOwotCQkJaWYgKCFob3N0LT5wb2xsZWQpCi0JCQkJY29tcGxldGUoJmhvc3QtPmNvbXBsZXRlKTsKLQkJfQorCQlhY2sgPSBrd19yZWFkX3JlZyhyZWdfc3RhdHVzKTsKKwkJaWYgKGFjayAmIEtXX0kyQ19TVEFUX0JVU1kpCisJCQlrd193cml0ZV9yZWcocmVnX3N0YXR1cywgMCk7CisJCWhvc3QtPnN0YXRlID0gc3RhdGVfaWRsZTsKKwkJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDB4MDApOworCQlpZiAoIWhvc3QtPnBvbGxlZCkKKwkJCWNvbXBsZXRlKCZob3N0LT5jb21wbGV0ZSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNyICYgS1dfSTJDX0lSUV9BRERSKSB7CiAJCWFjayA9IGt3X3JlYWRfcmVnKHJlZ19zdGF0dXMpOwogCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfYWRkcikgewotCQkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfQUREUik7CiAJCQlXUk9OR19TVEFURSgiS1dfSTJDX0lSUV9BRERSIik7IAotCQkJaG9zdC0+cmVzdWx0ID0gLUVJTzsKLQkJCWdvdG8gc3RvcDsKKwkJCWt3X2kyY19kb19zdG9wKGhvc3QsIC1FSU8pOwogCQl9CiAJCWlmICgoYWNrICYgS1dfSTJDX1NUQVRfTEFTVF9BQUspID09IDApIHsKLQkJCWhvc3QtPnJlc3VsdCA9IC1FTk9ERVY7Ci0JCQlEQkdfTE9XKCJLVzogTkFLIG9uIGFkZHJlc3NcbiIpOworCQkJaG9zdC0+cmVzdWx0ID0gLUVOWElPOwogCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOwotCQkJcmV0dXJuOworCQkJREJHX0xPVygiS1c6IE5BSyBvbiBhZGRyZXNzXG4iKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChob3N0LT5sZW4gPT0gMCkgewotCQkJCWt3X3dyaXRlX3JlZyhyZWdfaXNyLCBLV19JMkNfSVJRX0FERFIpOwotCQkJCWdvdG8gc3RvcDsKLQkJCX0KLQkJCWlmIChob3N0LT5ydykgeworCQkJaWYgKGhvc3QtPmxlbiA9PSAwKQorCQkJCWt3X2kyY19kb19zdG9wKGhvc3QsIDApOworCQkJZWxzZSBpZiAoaG9zdC0+cncpIHsKIAkJCQlob3N0LT5zdGF0ZSA9IHN0YXRlX3JlYWQ7CiAJCQkJaWYgKGhvc3QtPmxlbiA+IDEpCiAJCQkJCWt3X3dyaXRlX3JlZyhyZWdfY29udHJvbCwKQEAgLTMwOCwyNSArMzEwLDE5IEBACiAJCQlhY2sgPSBrd19yZWFkX3JlZyhyZWdfc3RhdHVzKTsKIAkJCWlmICgoYWNrICYgS1dfSTJDX1NUQVRfTEFTVF9BQUspID09IDApIHsKIAkJCQlEQkdfTE9XKCJLVzogbmFjayBvbiBkYXRhIHdyaXRlXG4iKTsKLQkJCQlob3N0LT5yZXN1bHQgPSAtRUlPOwotCQkJCWdvdG8gc3RvcDsKKwkJCQlob3N0LT5yZXN1bHQgPSAtRUZCSUc7CisJCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOwogCQkJfSBlbHNlIGlmIChob3N0LT5sZW4pIHsKIAkJCQlrd193cml0ZV9yZWcocmVnX2RhdGEsICooaG9zdC0+ZGF0YSsrKSk7CiAJCQkJaG9zdC0+bGVuLS07Ci0JCQl9IGVsc2UgewotCQkJCWt3X3dyaXRlX3JlZyhyZWdfY29udHJvbCwgS1dfSTJDX0NUTF9TVE9QKTsKLQkJCQlob3N0LT5zdGF0ZSA9IHN0YXRlX3N0b3A7Ci0JCQkJaG9zdC0+cmVzdWx0ID0gMDsKLQkJCX0KLQkJCWt3X3dyaXRlX3JlZyhyZWdfaXNyLCBLV19JMkNfSVJRX0RBVEEpOworCQkJfSBlbHNlCisJCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgMCk7CiAJCX0gZWxzZSB7Ci0JCQlrd193cml0ZV9yZWcocmVnX2lzciwgS1dfSTJDX0lSUV9EQVRBKTsKIAkJCVdST05HX1NUQVRFKCJLV19JMkNfSVJRX0RBVEEiKTsgCi0JCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfc3RvcCkgewotCQkJCWhvc3QtPnJlc3VsdCA9IC1FSU87Ci0JCQkJZ290byBzdG9wOwotCQkJfQorCQkJaWYgKGhvc3QtPnN0YXRlICE9IHN0YXRlX3N0b3ApCisJCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgLUVJTyk7CiAJCX0KKwkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfREFUQSk7CiAJfQogCiAJaWYgKGlzciAmIEtXX0kyQ19JUlFfU1RPUCkgewpAQCAtMzQwLDE0ICszMzYsMTAgQEAKIAkJCWNvbXBsZXRlKCZob3N0LT5jb21wbGV0ZSk7CiAJfQogCisJLyogQmVsb3cgc2hvdWxkIG9ubHkgaGFwcGVuIGluIG1hbnVhbCBtb2RlIHdoaWNoIHdlIGRvbid0IHVzZSAuLi4gKi8KIAlpZiAoaXNyICYgS1dfSTJDX0lSUV9TVEFSVCkKIAkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfU1RBUlQpOwogCi0JcmV0dXJuOwotIHN0b3A6Ci0Ja3dfd3JpdGVfcmVnKHJlZ19jb250cm9sLCBLV19JMkNfQ1RMX1NUT1ApOwkKLQlob3N0LT5zdGF0ZSA9IHN0YXRlX3N0b3A7Ci0JcmV0dXJuOwogfQogCiAvKiBJbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtNTQ0LDExICs1MzYsMTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JLyogTWFrZSBzdXJlIElSQSBpcyBkaXNhYmxlZCAqLworCS8qIE1ha2Ugc3VyZSBJUlEgaXMgZGlzYWJsZWQgKi8KIAlrd193cml0ZV9yZWcocmVnX2llciwgMCk7CiAKIAkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0ICovCi0JaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycSwga3dfaTJjX2lycSwgU0FfU0hJUlEsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQorCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIDAsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQogCQlob3N0LT5pcnEgPSBOT19JUlE7CiAKIAlwcmludGsoS0VSTl9JTkZPICJLZXlXZXN0IGkyYyBAMHglMDh4IGlycSAlZCAlc1xuIiwKQEAgLTExNjUsNiArMTE1Nyw3IEBACiAvKiBzb21lIHF1aXJrcyBmb3IgcGxhdGZvcm0gZnVuY3Rpb24gZGVjb2RpbmcgKi8KIGVudW0gewogCXBtYWNfaTJjX3F1aXJrX2ludm1hc2sgPSAweDAwMDAwMDAxdSwKKwlwbWFjX2kyY19xdWlya19za2lwID0gMHgwMDAwMDAwMnUsCiB9OwogCiBzdGF0aWMgdm9pZCBwbWFjX2kyY19kZXZzY2FuKHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGRldmljZV9ub2RlICpkZXYsCkBAIC0xMTgwLDYgKzExNzMsMTUgQEAKIAkJLyogWFhYIFN0dWR5IGRldmljZS10cmVlJ3MgJiBhcHBsZSBkcml2ZXJzIGFyZSBnZXQgdGhlIHF1aXJrcwogCQkgKiByaWdodCAhCiAJCSAqLworCQkvKiBXb3JrYXJvdW5kOiBJdCBzZWVtcyB0aGF0IHJ1bm5pbmcgdGhlIGNsb2Nrc3ByZWFkaW5nCisJCSAqIHByb3BlcnRpZXMgb24gdGhlIGVNYWMgd2lsbCBjYXVzZSBsb2NrdXBzIGR1cmluZyBib290LgorCQkgKiBUaGUgbWFjaGluZSBzZWVtcyB0byB3b3JrIGZpbmUgd2l0aG91dCB0aGF0LiBTbyBmb3Igbm93LAorCQkgKiBsZXQncyBtYWtlIHN1cmUgaTJjLWh3Y2xvY2sgZG9lc24ndCBtYXRjaCBhYm91dCAiaW1pYyIKKwkJICogY2xvY2tzIGFuZCB3ZSdsbCBmaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBuZWVkIHRvIGRvCisJCSAqIHNvbWV0aGluZyBzcGVjaWFsIGFib3V0IHRob3NlIGxhdGVyLgorCQkgKi8KKwkJeyAiaTJjLWh3Y2xvY2siLCAiaW1pYzUwMDIiLCBwbWFjX2kyY19xdWlya19za2lwIH0sCisJCXsgImkyYy1od2Nsb2NrIiwgImltaWM1MDAzIiwgcG1hY19pMmNfcXVpcmtfc2tpcCB9LAogCQl7ICJpMmMtaHdjbG9jayIsIE5VTEwsIHBtYWNfaTJjX3F1aXJrX2ludm1hc2sgfSwKIAkJeyAiaTJjLWNwdS12b2x0YWdlIiwgTlVMTCwgMH0sCiAJCXsgICJ0ZW1wLW1vbml0b3IiLCBOVUxMLCAwIH0sCkBAIC0xMjA2LDYgKzEyMDgsOCBAQAogCQkJCWlmIChwLT5jb21wYXRpYmxlICYmCiAJCQkJICAgICFkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgcC0+Y29tcGF0aWJsZSkpCiAJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwLT5xdWlya3MgJiBwbWFjX2kyY19xdWlya19za2lwKQorCQkJCQlicmVhazsKIAkJCQljYWxsYmFjayhucCwgcC0+cXVpcmtzKTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCmluZGV4IGY1ZDhkMTUuLmVhMTc5YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAkgKiAoaUJvb2sgc2Vjb25kIGNvbnRyb2xsZXIpCiAJICovCiAJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVBQTEUKLQkgICAgJiYgKGRldi0+Y2xhc3MgPT0gKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MTApKQorCSAgICAmJiBkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCX09IQ0kKIAkgICAgJiYgIW5vZGUpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQXBwbGUgVVNCIE9IQ0kgJXMgZGlzYWJsZWQgYnkgZmlybXdhcmVcbiIsCiAJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKaW5kZXggNGJhYTc1Yi4uZjA4MTczYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTU0Niw2ICs1NDcsNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHBtZl9kZXZpY2VzKTsKIHN0YXRpYyBzcGlubG9ja190IHBtZl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIERFRklORV9NVVRFWChwbWZfaXJxX211dGV4KTsKIAogc3RhdGljIHZvaWQgcG1mX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKQogewpAQCAtODY0LDE1ICs4NjYsMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwbWZfbG9jaywgZmxhZ3MpOwogCWZ1bmMgPSBfX3BtZl9maW5kX2Z1bmN0aW9uKHRhcmdldCwgbmFtZSwgUE1GX0ZMQUdTX0lOVF9HRU4pOwotCWlmIChmdW5jID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwlpZiAoZnVuYykKKwkJZnVuYyA9IHBtZl9nZXRfZnVuY3Rpb24oZnVuYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwlpZiAoZnVuYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJbXV0ZXhfbG9jaygmcG1mX2lycV9tdXRleCk7CiAJaWYgKGxpc3RfZW1wdHkoJmZ1bmMtPmlycV9jbGllbnRzKSkKIAkJZnVuYy0+ZGV2LT5oYW5kbGVycy0+aXJxX2VuYWJsZShmdW5jKTsKIAlsaXN0X2FkZCgmY2xpZW50LT5saW5rLCAmZnVuYy0+aXJxX2NsaWVudHMpOwogCWNsaWVudC0+ZnVuYyA9IGZ1bmM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnBtZl9pcnFfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODEsMTYgKzg4NSwxNiBAQAogdm9pZCBwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KHN0cnVjdCBwbWZfaXJxX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBwbWZfZnVuY3Rpb24gKmZ1bmMgPSBjbGllbnQtPmZ1bmM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihmdW5jID09IE5VTEwpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtZl9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcG1mX2lycV9tdXRleCk7CiAJY2xpZW50LT5mdW5jID0gTlVMTDsKIAlsaXN0X2RlbCgmY2xpZW50LT5saW5rKTsKIAlpZiAobGlzdF9lbXB0eSgmZnVuYy0+aXJxX2NsaWVudHMpKQogCQlmdW5jLT5kZXYtPmhhbmRsZXJzLT5pcnFfZGlzYWJsZShmdW5jKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWZfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcG1mX2lycV9tdXRleCk7CisJcG1mX3B1dF9mdW5jdGlvbihmdW5jKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggNGQxNWUzOS4uYjkyMDBmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtNDYzLDExICs0NjMsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwbWFjX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAxOworCS8qIGNhbid0IGRvIGFueSBvdGhlciBzdGF0ZXMgdmlhIGdlbmVyaWMgbWVjaGFuaXNtIHlldCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBwbV9vcHMgcG1hY19wbV9vcHMgPSB7CiAJLnBtX2Rpc2tfbW9kZQk9IFBNX0RJU0tfU0hVVERPV04sCiAJLnByZXBhcmUJPSBwbWFjX3BtX3ByZXBhcmUsCiAJLmVudGVyCQk9IHBtYWNfcG1fZW50ZXIsCiAJLmZpbmlzaAkJPSBwbWFjX3BtX2ZpbmlzaCwKKwkudmFsaWQJCT0gcG1hY19wbV92YWxpZCwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfU09GVFdBUkVfU1VTUEVORCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IDliMmIxY2IuLjMyZWFkZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTg2NSw3ICs4NjUsNyBAQAogICogb24gdGhlIENFQyBhcmNoaXRlY3R1cmUsIHR5cGUgb2YgdGhlIGRldmljZSwgb24gZWFybGllciBib290CiAgKiBjb21tYW5kLWxpbmUgYXJndW1lbnRzICYgZXRjLgogICovCi12b2lkIGVlaF9hZGRfZGV2aWNlX2Vhcmx5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCitzdGF0aWMgdm9pZCBlZWhfYWRkX2RldmljZV9lYXJseShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwogCXN0cnVjdCBlZWhfZWFybHlfZW5hYmxlX2luZm8gaW5mbzsKQEAgLTg4Miw3ICs4ODIsNiBAQAogCWluZm8uYnVpZF9sbyA9IEJVSURfTE8ocGhiLT5idWlkKTsKIAllYXJseV9lbmFibGVfZWVoKGRuLCAmaW5mbyk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlZWhfYWRkX2RldmljZV9lYXJseSk7CiAKIHZvaWQgZWVoX2FkZF9kZXZpY2VfdHJlZV9lYXJseShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewpAQCAtODkzLDIwICs4OTIsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZWVoX2FkZF9kZXZpY2VfdHJlZV9lYXJseSk7CiAKLXZvaWQgZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotIAkJZWVoX2FkZF9kZXZpY2VfbGF0ZShkZXYpOwotIAkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotIAkJCXN0cnVjdCBwY2lfYnVzICpzdWJidXMgPSBkZXYtPnN1Ym9yZGluYXRlOwotIAkJCWlmIChzdWJidXMpCi0gCQkJCWVlaF9hZGRfZGV2aWNlX3RyZWVfbGF0ZShzdWJidXMpOwotIAkJfQotCX0KLX0KLQogLyoqCiAgKiBlZWhfYWRkX2RldmljZV9sYXRlIC0gcGVyZm9ybSBFRUggaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBpbmRpY2F0ZWQgcGNpIGRldmljZQogICogQGRldjogcGNpIGRldmljZSBmb3Igd2hpY2ggdG8gc2V0IHVwIEVFSApAQCAtOTE0LDcgKzg5OSw3IEBACiAgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSB1c2VkIHRvIGNvbXBsZXRlIEVFSCBpbml0aWFsaXphdGlvbiBmb3IgUENJCiAgKiBkZXZpY2VzIHRoYXQgd2VyZSBhZGRlZCBhZnRlciBzeXN0ZW0gYm9vdCAoZS5nLiBob3RwbHVnLCBkbHBhcikuCiAgKi8KLXZvaWQgZWVoX2FkZF9kZXZpY2VfbGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgZWVoX2FkZF9kZXZpY2VfbGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CiAJc3RydWN0IHBjaV9kbiAqcGRuOwpAQCAtOTMzLDE2ICs5MTgsMzMgQEAKIAogCXBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2UgKGRldik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlZWhfYWRkX2RldmljZV9sYXRlKTsKKwordm9pZCBlZWhfYWRkX2RldmljZV90cmVlX2xhdGUoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisgCQllZWhfYWRkX2RldmljZV9sYXRlKGRldik7CisgCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CisgCQkJc3RydWN0IHBjaV9idXMgKnN1YmJ1cyA9IGRldi0+c3Vib3JkaW5hdGU7CisgCQkJaWYgKHN1YmJ1cykKKyAJCQkJZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKHN1YmJ1cyk7CisgCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKTsKIAogLyoqCiAgKiBlZWhfcmVtb3ZlX2RldmljZSAtIHVuZG8gRUVIIHNldHVwIGZvciB0aGUgaW5kaWNhdGVkIHBjaSBkZXZpY2UKICAqIEBkZXY6IHBjaSBkZXZpY2UgdG8gYmUgcmVtb3ZlZAogICoKLSAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkIGZyb20gYSBydW5uaW5nCi0gKiBzeXN0ZW0gKGUuZy4gYnkgaG90cGx1ZyBvciBkbHBhcikuCisgKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbQorICogYSBydW5uaW5nIHN5c3RlbSAoZS5nLiBieSBob3RwbHVnIG9yIGRscGFyKS4gIEl0IHVucmVnaXN0ZXJzCisgKiB0aGUgUENJIGRldmljZSBmcm9tIHRoZSBFRUggc3Vic3lzdGVtLiAgSS9PIGVycm9ycyBhZmZlY3RpbmcKKyAqIHRoaXMgZGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIGRldGVjdGVkIGFmdGVyIHRoaXMgY2FsbDsgdGh1cywKKyAqIGkvbyBlcnJvcnMgYWZmZWN0aW5nIHRoaXMgc2xvdCBtYXkgbGVhdmUgdGhpcyBkZXZpY2UgdW51c2FibGUuCiAgKi8KLXZvaWQgZWVoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIGVlaF9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAlpZiAoIWRldiB8fCAhZWVoX3N1YnN5c3RlbV9lbmFibGVkKQpAQCAtOTU1LDI0ICs5NTcsMjIgQEAKIAlwY2lfYWRkcl9jYWNoZV9yZW1vdmVfZGV2aWNlKGRldik7CiAKIAlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwotCVBDSV9ETihkbiktPnBjaWRldiA9IE5VTEw7Ci0JcGNpX2Rldl9wdXQgKGRldik7CisJaWYgKFBDSV9ETihkbiktPnBjaWRldikgeworCQlQQ0lfRE4oZG4pLT5wY2lkZXYgPSBOVUxMOworCQlwY2lfZGV2X3B1dCAoZGV2KTsKKwl9CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlZWhfcmVtb3ZlX2RldmljZSk7CiAKIHZvaWQgZWVoX3JlbW92ZV9idXNfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+c3Vib3JkaW5hdGU7CisJc3RydWN0IHBjaV9kZXYgKmNoaWxkLCAqdG1wOworCiAJZWVoX3JlbW92ZV9kZXZpY2UoZGV2KTsKLQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7Ci0JCXN0cnVjdCBwY2lfYnVzICpidXMgPSBkZXYtPnN1Ym9yZGluYXRlOwotCQlzdHJ1Y3QgbGlzdF9oZWFkICpsbjsKLQkJaWYgKCFidXMpCi0JCQlyZXR1cm47IAotCQlmb3IgKGxuID0gYnVzLT5kZXZpY2VzLm5leHQ7IGxuICE9ICZidXMtPmRldmljZXM7IGxuID0gbG4tPm5leHQpIHsKLQkJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGNpX2Rldl9iKGxuKTsKLQkJCWlmIChwZGV2KQotCQkJCWVlaF9yZW1vdmVfYnVzX2RldmljZShwZGV2KTsKLQkJfQorCisJaWYgKGJ1cyAmJiBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoaWxkLCB0bXAsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQorCQkJIGVlaF9yZW1vdmVfYnVzX2RldmljZShjaGlsZCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZWVoX3JlbW92ZV9idXNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IGNjMjQ5NWEuLjFmYmE2OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMjkzLDE1ICsyOTMsMTYgQEAKIAlmcm96ZW5fcGRuID0gUENJX0ROKGZyb3plbl9kbik7CiAJZnJvemVuX3Bkbi0+ZWVoX2ZyZWV6ZV9jb3VudCsrOwogCi0JcGNpX3N0ciA9IHBjaV9uYW1lIChmcm96ZW5fcGRuLT5wY2lkZXYpOwotCWRydl9zdHIgPSBwY2lkX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7Ci0JaWYgKCFwY2lfc3RyKSB7CisJaWYgKGZyb3plbl9wZG4tPnBjaWRldikgeworCQlwY2lfc3RyID0gcGNpX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CisJCWRydl9zdHIgPSBwY2lkX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CisJfSBlbHNlIHsKIAkJcGNpX3N0ciA9IHBjaV9uYW1lIChldmVudC0+ZGV2KTsKIAkJZHJ2X3N0ciA9IHBjaWRfbmFtZSAoZXZlbnQtPmRldik7CiAJfQogCQogCWlmIChmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50ID4gRUVIX01BWF9BTExPV0VEX0ZSRUVaRVMpCi0JCWdvdG8gaGFyZF9mYWlsOworCQlnb3RvIGV4Y2Vzc19mYWlsdXJlczsKIAogCS8qIElmIHRoZSByZXNldCBzdGF0ZSBpcyBhICc1JyBhbmQgdGhlIHRpbWUgdG8gcmVzZXQgaXMgMCAoaW5maW5pdHkpCiAJICogb3IgaXMgbW9yZSB0aGVuIDE1IHNlY29uZHMsIHRoZW4gbWFyayB0aGlzIGFzIGEgcGVybWFuZW50IGZhaWx1cmUuCkBAIC0zNTYsNyArMzU3LDcgQEAKIAogCXJldHVybjsKIAkKLWhhcmRfZmFpbDoKK2V4Y2Vzc19mYWlsdXJlczoKIAkvKgogCSAqIEFib3V0IDkwJSBvZiBhbGwgcmVhbC1saWZlIEVFSCBmYWlsdXJlcyBpbiB0aGUgZmllbGQKIAkgKiBhcmUgZHVlIHRvIHBvb3JseSBzZWF0ZWQgUENJIGNhcmRzLiBPbmx5IDEwJSBvciBzbyBhcmUKQEAgLTM2Nyw3ICszNjgsMTUgQEAKIAkgICAiYW5kIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLiAgUGxlYXNlIHRyeSByZXNlYXRpbmdcbiIKIAkgICAidGhpcyBkZXZpY2Ugb3IgcmVwbGFjaW5nIGl0LlxuIiwKIAkJZHJ2X3N0ciwgcGNpX3N0ciwgZnJvemVuX3Bkbi0+ZWVoX2ZyZWV6ZV9jb3VudCk7CisJZ290byBwZXJtX2Vycm9yOwogCitoYXJkX2ZhaWw6CisJcHJpbnRrKEtFUk5fRVJSCisJICAgIkVFSDogVW5hYmxlIHRvIHJlY292ZXIgZnJvbSBmYWlsdXJlIG9mIFBDSSBkZXZpY2UgJXMgLSAlc1xuIgorCSAgICJQbGVhc2UgdHJ5IHJlc2VhdGluZyB0aGlzIGRldmljZSBvciByZXBsYWNpbmcgaXQuXG4iLAorCQlkcnZfc3RyLCBwY2lfc3RyKTsKKworcGVybV9lcnJvcjoKIAllZWhfc2xvdF9lcnJvcl9kZXRhaWwoZnJvemVuX3BkbiwgMiAvKiBQZXJtYW5lbnQgRXJyb3IgKi8pOwogCiAJLyogTm90aWZ5IGFsbCBkZXZpY2VzIHRoYXQgdGhleSdyZSBhYm91dCB0byBnbyBkb3duLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCmluZGV4IDlhOTk2MWYuLjQwMDIwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKQEAgLTE5LDcgKzE5LDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2VlaF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAKQEAgLTM3LDE0ICszOSwxOCBAQAogc3RhdGljIHZvaWQgZWVoX3RocmVhZF9sYXVuY2hlcih2b2lkICopOwogREVDTEFSRV9XT1JLKGVlaF9ldmVudF93cSwgZWVoX3RocmVhZF9sYXVuY2hlciwgTlVMTCk7CiAKKy8qIFNlcmlhbGl6ZSByZXNldCBzZXF1ZW5jZXMgZm9yIGEgZ2l2ZW4gcGNpIGRldmljZSAqLworREVGSU5FX01VVEVYKGVlaF9ldmVudF9tdXRleCk7CisKIC8qKgotICogZWVoX2V2ZW50X2hhbmRsZXIgLSBkaXNwYXRjaCBFRUggZXZlbnRzLiAgVGhlIGRldGVjdGlvbiBvZiBhIGZyb3plbgotICogc2xvdCBjYW4gb2NjdXIgaW5zaWRlIGFuIGludGVycnVwdCwgd2hlcmUgaXQgY2FuIGJlIGhhcmQgdG8gZG8KLSAqIGFueXRoaW5nIGFib3V0IGl0LiAgVGhlIGdvYWwgb2YgdGhpcyByb3V0aW5lIGlzIHRvIHB1bGwgdGhlc2UKLSAqIGRldGVjdGlvbiBldmVudHMgb3V0IG9mIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgYW5kCi0gKiByZS1kaXNwYXRjaCB0aGVtIGZvciBwcm9jZXNzaW5nIGF0IGEgbGF0ZXIgdGltZSBpbiBhIG5vcm1hbCBjb250ZXh0LgotICoKKyAqIGVlaF9ldmVudF9oYW5kbGVyIC0gZGlzcGF0Y2ggRUVIIGV2ZW50cy4KICAqIEBkdW1teSAtIHVudXNlZAorICoKKyAqIFRoZSBkZXRlY3Rpb24gb2YgYSBmcm96ZW4gc2xvdCBjYW4gb2NjdXIgaW5zaWRlIGFuIGludGVycnVwdCwKKyAqIHdoZXJlIGl0IGNhbiBiZSBoYXJkIHRvIGRvIGFueXRoaW5nIGFib3V0IGl0LiAgVGhlIGdvYWwgb2YgdGhpcworICogcm91dGluZSBpcyB0byBwdWxsIHRoZXNlIGRldGVjdGlvbiBldmVudHMgb3V0IG9mIHRoZSBjb250ZXh0CisgKiBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGFuZCByZS1kaXNwYXRjaCB0aGVtIGZvciBwcm9jZXNzaW5nCisgKiBhdCBhIGxhdGVyIHRpbWUgaW4gYSBub3JtYWwgY29udGV4dC4KICAqLwogc3RhdGljIGludCBlZWhfZXZlbnRfaGFuZGxlcih2b2lkICogZHVtbXkpCiB7CkBAIC02NCwyMyArNzAsMjQgQEAKIAkJCWV2ZW50ID0gbGlzdF9lbnRyeShlZWhfZXZlbnRsaXN0Lm5leHQsIHN0cnVjdCBlZWhfZXZlbnQsIGxpc3QpOwogCQkJbGlzdF9kZWwoJmV2ZW50LT5saXN0KTsKIAkJfQotCQkKLQkJaWYgKGV2ZW50KQotCQkJZWVoX21hcmtfc2xvdChldmVudC0+ZG4sIEVFSF9NT0RFX1JFQ09WRVJJTkcpOwotCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOworCiAJCWlmIChldmVudCA9PSBOVUxMKQogCQkJYnJlYWs7CiAKKwkJLyogU2VyaWFsaXplIHByb2Nlc3Npbmcgb2YgRUVIIGV2ZW50cyAqLworCQltdXRleF9sb2NrKCZlZWhfZXZlbnRfbXV0ZXgpOworCQllZWhfbWFya19zbG90KGV2ZW50LT5kbiwgRUVIX01PREVfUkVDT1ZFUklORyk7CisKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBEZXRlY3RlZCBQQ0kgYnVzIGVycm9yIG9uIGRldmljZSAlc1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKGV2ZW50LT5kZXYpKTsKIAogCQloYW5kbGVfZWVoX2V2ZW50cyhldmVudCk7CiAKIAkJZWVoX2NsZWFyX3Nsb3QoZXZlbnQtPmRuLCBFRUhfTU9ERV9SRUNPVkVSSU5HKTsKLQogCQlwY2lfZGV2X3B1dChldmVudC0+ZGV2KTsKIAkJa2ZyZWUoZXZlbnQpOworCQltdXRleF91bmxvY2soJmVlaF9ldmVudF9tdXRleCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04OCw3ICs5NSw2IEBACiAKIC8qKgogICogZWVoX3RocmVhZF9sYXVuY2hlcgotICoKICAqIEBkdW1teSAtIHVudXNlZAogICovCiBzdGF0aWMgdm9pZCBlZWhfdGhyZWFkX2xhdW5jaGVyKHZvaWQgKmR1bW15KQpAQCAtMTEyLDcgKzExOCwxNSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVlaF9ldmVudCAqZXZlbnQ7CisJY2hhciAqbG9jYXRpb247CiAKKwlpZiAoIW1lbV9pbml0X2RvbmUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IGV2ZW50IGR1cmluZyBlYXJseSBib290IG5vdCBoYW5kbGVkXG4iKTsKKwkJbG9jYXRpb24gPSAoY2hhciAqKSBnZXRfcHJvcGVydHkoZG4sICJpYm0sbG9jLWNvZGUiLCBOVUxMKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IGRldmljZSBub2RlID0gJXNcbiIsIGRuLT5mdWxsX25hbWUpOworCQlwcmludGsoS0VSTl9FUlIgIkVFSDogUENJIGxvY2F0aW9uID0gJXNcbiIsIGxvY2F0aW9uKTsKKwkJcmV0dXJuIDE7CisJfQogCWV2ZW50ID0ga21hbGxvYyhzaXplb2YoKmV2ZW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGV2ZW50ID09IE5VTEwpIHsKIAkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiBvdXQgb2YgbWVtb3J5LCBldmVudCBub3QgaGFuZGxlZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMKaW5kZXggZGI3YzE5Zi4uYzlmZjU0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUwpAQCAtMTI3LDMgKzEyNywxMDMgQEAKIAogCW10Y3JmCTB4ZmYscjAKIAlibHIJCQkJLyogcmV0dXJuIHIzID0gc3RhdHVzICovCisKKy8qIHBscGFyX2hjYWxsXzdhcmdfN3JldCh1bnNpZ25lZCBsb25nIG9wY29kZSwJCVIzCisJCQkgdW5zaWduZWQgbG9uZyBhcmcxLAkJUjQKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzIsCQlSNQorCQkJIHVuc2lnbmVkIGxvbmcgYXJnMywJCVI2CisJCQkgdW5zaWduZWQgbG9uZyBhcmc0LAkJUjcKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzUsCQlSOAorCQkJIHVuc2lnbmVkIGxvbmcgYXJnNiwJCVI5CisJCQkgdW5zaWduZWQgbG9uZyBhcmc3LAkJUjEwCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0MSwJCTExMihSMSkKKwkJCSB1bnNpZ25lZCBsb25nICpvdXQyLAkJMTEwKFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDMsCQkxMDgoUjEpCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0NCwJCTEwNihSMSkKKwkJCSB1bnNpZ25lZCBsb25nICpvdXQ1LAkJMTA0KFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDYsCQkxMDIoUjEpCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0Nyk7CQkxMDAoUjEpCisqLworX0dMT0JBTChwbHBhcl9oY2FsbF83YXJnXzdyZXQpCisJSE1UX01FRElVTQorCisJbWZjcglyMAorCXN0dwlyMCw4KHIxKQorCisJSFZTQwkJCQkvKiBpbnZva2UgdGhlIGh5cGVydmlzb3IgKi8KKworCWx3eglyMCw4KHIxKQorCisJbGQJcjExLFNUS19QQVJNKHIxMSkocjEpCS8qIEZldGNoIHI0IHJldCBhcmcgKi8KKwlzdGQJcjQsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxMikocjEpCS8qIEZldGNoIHI1IHJldCBhcmcgKi8KKwlzdGQJcjUsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxMykocjEpCS8qIEZldGNoIHI2IHJldCBhcmcgKi8KKwlzdGQJcjYsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxNCkocjEpCS8qIEZldGNoIHI3IHJldCBhcmcgKi8KKwlzdGQJcjcsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxNSkocjEpCS8qIEZldGNoIHI4IHJldCBhcmcgKi8KKwlzdGQJcjgsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxNikocjEpCS8qIEZldGNoIHI5IHJldCBhcmcgKi8KKwlzdGQJcjksMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxNykocjEpCS8qIEZldGNoIHIxMCByZXQgYXJnICovCisJc3RkCXIxMCwwKHIxMSkKKworCW10Y3JmCTB4ZmYscjAKKworCWJscgkJCQkvKiByZXR1cm4gcjMgPSBzdGF0dXMgKi8KKworLyogcGxwYXJfaGNhbGxfOWFyZ185cmV0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAkJUjMKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzEsCQlSNAorCQkJIHVuc2lnbmVkIGxvbmcgYXJnMiwJCVI1CisJCQkgdW5zaWduZWQgbG9uZyBhcmczLAkJUjYKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzQsCQlSNworCQkJIHVuc2lnbmVkIGxvbmcgYXJnNSwJCVI4CisJCQkgdW5zaWduZWQgbG9uZyBhcmc2LAkJUjkKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzcsCQlSMTAKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzgsCQkxMTIoUjEpCisJCQkgdW5zaWduZWQgbG9uZyBhcmc5LAkJMTEwKFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDEsCQkxMDgoUjEpCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0MiwJCTEwNihSMSkKKwkJCSB1bnNpZ25lZCBsb25nICpvdXQzLAkJMTA0KFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDQsCQkxMDIoUjEpCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0NSwJCTEwMChSMSkKKwkJCSB1bnNpZ25lZCBsb25nICpvdXQ2LAkJIDk4KFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDcpOwkJIDk2KFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDgsCQkgOTQoUjEpCisJCSAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dDksICAgICAgICAgICAgOTIoUjEpCisqLworX0dMT0JBTChwbHBhcl9oY2FsbF85YXJnXzlyZXQpCisJSE1UX01FRElVTQorCisJbWZjcglyMAorCXN0dwlyMCw4KHIxKQorCisJbGQJcjExLFNUS19QQVJNKHIxMSkocjEpCSAvKiBwdXQgYXJnOCBpbiBSMTEgKi8KKwlsZAlyMTIsU1RLX1BBUk0ocjEyKShyMSkgICAgLyogcHV0IGFyZzkgaW4gUjEyICovCisKKwlIVlNDCQkJCS8qIGludm9rZSB0aGUgaHlwZXJ2aXNvciAqLworCisJbGQJcjAsU1RLX1BBUk0ocjEzKShyMSkJLyogRmV0Y2ggcjQgcmV0IGFyZyAqLworCXN0ZHgJcjQscjAscjAKKwlsZAlyMCxTVEtfUEFSTShyMTQpKHIxKQkvKiBGZXRjaCByNSByZXQgYXJnICovCisJc3RkeAlyNSxyMCxyMAorCWxkCXIwLFNUS19QQVJNKHIxNSkocjEpCS8qIEZldGNoIHI2IHJldCBhcmcgKi8KKwlzdGR4CXI2LHIwLHIwCisJbGQJcjAsU1RLX1BBUk0ocjE2KShyMSkJLyogRmV0Y2ggcjcgcmV0IGFyZyAqLworCXN0ZHgJcjcscjAscjAKKwlsZAlyMCxTVEtfUEFSTShyMTcpKHIxKQkvKiBGZXRjaCByOCByZXQgYXJnICovCisJc3RkeAlyOCxyMCxyMAorCWxkCXIwLFNUS19QQVJNKHIxOCkocjEpCS8qIEZldGNoIHI5IHJldCBhcmcgKi8KKwlzdGR4CXI5LHIwLHIwCisJbGQJcjAsU1RLX1BBUk0ocjE5KShyMSkJLyogRmV0Y2ggcjEwIHJldCBhcmcgKi8KKwlzdGR4CXIxMCxyMCxyMAorCWxkCXIwLFNUS19QQVJNKHIyMCkocjEpCS8qIEZldGNoIHIxMSByZXQgYXJnICovCisJc3RkeAlyMTEscjAscjAKKwlsZAlyMCxTVEtfUEFSTShyMjEpKHIxKQkvKiBGZXRjaCByMTIgcmV0IGFyZyAqLworCXN0ZHgJcjEyLHIwLHIwCisKKwlsd3oJcjAsOChyMSkKKwltdGNyZgkweGZmLHIwCisKKwlibHIJCQkJLyogcmV0dXJuIHIzID0gc3RhdHVzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjb25zb2xlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjb25zb2xlLmMKaW5kZXggYmE2YmVmZC4uYTcyYTk4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y29uc29sZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNvbnNvbGUuYwpAQCAtNDEsNyArNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZ290OwogCiAJaWYgKHBscGFyX2hjYWxsKEhfR0VUX1RFUk1fQ0hBUiwgdnRlcm1ubywgMCwgMCwgMCwgJmdvdCwKLQkJKHVuc2lnbmVkIGxvbmcgKilidWYsICh1bnNpZ25lZCBsb25nICopYnVmKzEpID09IEhfU3VjY2VzcykKKwkJKHVuc2lnbmVkIGxvbmcgKilidWYsICh1bnNpZ25lZCBsb25nICopYnVmKzEpID09IEhfU1VDQ0VTUykKIAkJcmV0dXJuIGdvdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTY5LDkgKzY5LDkgQEAKIAogCXJldCA9IHBscGFyX2hjYWxsX25vcmV0cyhIX1BVVF9URVJNX0NIQVIsIHZ0ZXJtbm8sIGNvdW50LCBsYnVmWzBdLAogCQkJCSBsYnVmWzFdKTsKLQlpZiAocmV0ID09IEhfU3VjY2VzcykKKwlpZiAocmV0ID09IEhfU1VDQ0VTUykKIAkJcmV0dXJuIGNvdW50OwotCWlmIChyZXQgPT0gSF9CdXN5KQorCWlmIChyZXQgPT0gSF9CVVNZKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gLUVJTzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYwppbmRleCAyMmJmYjVjLi5mY2Y0YjRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jCkBAIC00MywyMSArNDMsMjEgQEAKIHN0YXRpYyBpbnQgaHZjc19jb252ZXJ0KGxvbmcgdG9fY29udmVydCkKIHsKIAlzd2l0Y2ggKHRvX2NvbnZlcnQpIHsKLQkJY2FzZSBIX1N1Y2Nlc3M6CisJCWNhc2UgSF9TVUNDRVNTOgogCQkJcmV0dXJuIDA7Ci0JCWNhc2UgSF9QYXJhbWV0ZXI6CisJCWNhc2UgSF9QQVJBTUVURVI6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJY2FzZSBIX0hhcmR3YXJlOgorCQljYXNlIEhfSEFSRFdBUkU6CiAJCQlyZXR1cm4gLUVJTzsKLQkJY2FzZSBIX0J1c3k6Ci0JCWNhc2UgSF9Mb25nQnVzeU9yZGVyMW1zZWM6Ci0JCWNhc2UgSF9Mb25nQnVzeU9yZGVyMTBtc2VjOgotCQljYXNlIEhfTG9uZ0J1c3lPcmRlcjEwMG1zZWM6Ci0JCWNhc2UgSF9Mb25nQnVzeU9yZGVyMXNlYzoKLQkJY2FzZSBIX0xvbmdCdXN5T3JkZXIxMHNlYzoKLQkJY2FzZSBIX0xvbmdCdXN5T3JkZXIxMDBzZWM6CisJCWNhc2UgSF9CVVNZOgorCQljYXNlIEhfTE9OR19CVVNZX09SREVSXzFfTVNFQzoKKwkJY2FzZSBIX0xPTkdfQlVTWV9PUkRFUl8xMF9NU0VDOgorCQljYXNlIEhfTE9OR19CVVNZX09SREVSXzEwMF9NU0VDOgorCQljYXNlIEhfTE9OR19CVVNZX09SREVSXzFfU0VDOgorCQljYXNlIEhfTE9OR19CVVNZX09SREVSXzEwX1NFQzoKKwkJY2FzZSBIX0xPTkdfQlVTWV9PUkRFUl8xMDBfU0VDOgogCQkJcmV0dXJuIC1FQlVTWTsKLQkJY2FzZSBIX0Z1bmN0aW9uOiAvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBIX0ZVTkNUSU9OOiAvKiBmYWxsIHRocm91Z2ggKi8KIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRVBFUk07CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKaW5kZXggODk1MjUyOC4uNjM0YjdkMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCkBAIC01NCw3ICs1NCw4IEBACiBFWFBPUlRfU1lNQk9MKHBscGFyX2hjYWxsXzRvdXQpOwogRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbF9ub3JldHMpOwogRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbF84YXJnXzJyZXQpOwotCitFWFBPUlRfU1lNQk9MKHBscGFyX2hjYWxsXzdhcmdfN3JldCk7CitFWFBPUlRfU1lNQk9MKHBscGFyX2hjYWxsXzlhcmdfOXJldCk7CiBleHRlcm4gdm9pZCBwU2VyaWVzX2ZpbmRfc2VyaWFsX3BvcnQodm9pZCk7CiAKIApAQCAtNzIsNyArNzMsNyBAQAogCiAJZG8gewogCQlyYyA9IHBscGFyX3B1dF90ZXJtX2NoYXIodnRlcm1ubywgc2l6ZW9mKHBhY2tldCksIHBhY2tldCk7Ci0JfSB3aGlsZSAocmMgPT0gSF9CdXN5KTsKKwl9IHdoaWxlIChyYyA9PSBIX0JVU1kpOwogfQogCiBzdGF0aWMgbG9uZyBodnNpX3VkYmdfYnVmX2xlbjsKQEAgLTg1LDcgKzg2LDcgQEAKIAogCWlmIChodnNpX3VkYmdfYnVmX2xlbiA9PSAwKSB7CiAJCXJjID0gcGxwYXJfZ2V0X3Rlcm1fY2hhcih2dGVybW5vLCAmaHZzaV91ZGJnX2J1Zl9sZW4sIGh2c2lfdWRiZ19idWYpOwotCQlpZiAocmMgIT0gSF9TdWNjZXNzIHx8IGh2c2lfdWRiZ19idWZbMF0gIT0gMHhmZikgeworCQlpZiAocmMgIT0gSF9TVUNDRVNTIHx8IGh2c2lfdWRiZ19idWZbMF0gIT0gMHhmZikgewogCQkJLyogYmFkIHJlYWQgb3Igbm9uLWRhdGEgcGFja2V0ICovCiAJCQlodnNpX3VkYmdfYnVmX2xlbiA9IDA7CiAJCX0gZWxzZSB7CkBAIC0xMzksNyArMTQwLDcgQEAKIAlidWZbMF0gPSBjOwogCWRvIHsKIAkJcmMgPSBwbHBhcl9wdXRfdGVybV9jaGFyKHZ0ZXJtbm8sIDEsIGJ1Zik7Ci0JfSB3aGlsZShyYyA9PSBIX0J1c3kpOworCX0gd2hpbGUocmMgPT0gSF9CVVNZKTsKIH0KIAogLyogQnVmZmVyZWQgY2hhcnMgZ2V0YyAqLwpAQCAtMTU4LDcgKzE1OSw3IEBACiAJCS8qIGdldCBzb21lIG1vcmUgY2hhcnMuICovCiAJCWluYnVmbGVuID0gMDsKIAkJcmMgPSBwbHBhcl9nZXRfdGVybV9jaGFyKHZ0ZXJtbm8sICZpbmJ1ZmxlbiwgYnVmKTsKLQkJaWYgKHJjICE9IEhfU3VjY2VzcykKKwkJaWYgKHJjICE9IEhfU1VDQ0VTUykKIAkJCWluYnVmbGVuID0gMDsJLyogb3RoZXJ3aXNlIGluYnVmbGVuIGlzIGdhcmJhZ2UgKi8KIAl9CiAJaWYgKGluYnVmbGVuIDw9IDAgfHwgaW5idWZsZW4gPiAxNikgewpAQCAtMzA0LDcgKzMwNSw3IEBACiAKIAlscGFyX3JjID0gcGxwYXJfaGNhbGwoSF9FTlRFUiwgZmxhZ3MsIGhwdGVfZ3JvdXAsIGhwdGVfdiwKIAkJCSAgICAgIGhwdGVfciwgJnNsb3QsICZkdW1teTAsICZkdW1teTEpOwotCWlmICh1bmxpa2VseShscGFyX3JjID09IEhfUFRFR19GdWxsKSkgeworCWlmICh1bmxpa2VseShscGFyX3JjID09IEhfUFRFR19GVUxMKSkgewogCQlpZiAoISh2ZmxhZ3MgJiBIUFRFX1ZfQk9MVEVEKSkKIAkJCURCR19MT1coIiBmdWxsXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMzE1LDcgKzMxNiw3IEBACiAJICogd2lsbCBmYWlsLiBIb3dldmVyIHdlIG11c3QgY2F0Y2ggdGhlIGZhaWx1cmUgaW4gaGFzaF9wYWdlCiAJICogb3Igd2Ugd2lsbCBsb29wIGZvcmV2ZXIsIHNvIHJldHVybiAtMiBpbiB0aGlzIGNhc2UuCiAJICovCi0JaWYgKHVubGlrZWx5KGxwYXJfcmMgIT0gSF9TdWNjZXNzKSkgeworCWlmICh1bmxpa2VseShscGFyX3JjICE9IEhfU1VDQ0VTUykpIHsKIAkJaWYgKCEodmZsYWdzICYgSFBURV9WX0JPTFRFRCkpCiAJCQlEQkdfTE9XKCIgbHBhciBlcnIgJWRcbiIsIGxwYXJfcmMpOwogCQlyZXR1cm4gLTI7CkBAIC0zNDYsOSArMzQ3LDkgQEAKIAkJLyogZG9uJ3QgcmVtb3ZlIGEgYm9sdGVkIGVudHJ5ICovCiAJCWxwYXJfcmMgPSBwbHBhcl9wdGVfcmVtb3ZlKEhfQU5EQ09ORCwgaHB0ZV9ncm91cCArIHNsb3Rfb2Zmc2V0LAogCQkJCQkgICAoMHgxVUwgPDwgNCksICZkdW1teTEsICZkdW1teTIpOwotCQlpZiAobHBhcl9yYyA9PSBIX1N1Y2Nlc3MpCisJCWlmIChscGFyX3JjID09IEhfU1VDQ0VTUykKIAkJCXJldHVybiBpOwotCQlCVUdfT04obHBhcl9yYyAhPSBIX05vdF9Gb3VuZCk7CisJCUJVR19PTihscGFyX3JjICE9IEhfTk9UX0ZPVU5EKTsKIAogCQlzbG90X29mZnNldCsrOwogCQlzbG90X29mZnNldCAmPSAweDc7CkBAIC0zOTEsMTQgKzM5MiwxNCBAQAogCiAJbHBhcl9yYyA9IHBscGFyX3B0ZV9wcm90ZWN0KGZsYWdzLCBzbG90LCB3YW50X3YgJiBIUFRFX1ZfQVZQTik7CiAKLQlpZiAobHBhcl9yYyA9PSBIX05vdF9Gb3VuZCkgeworCWlmIChscGFyX3JjID09IEhfTk9UX0ZPVU5EKSB7CiAJCURCR19MT1coIm5vdCBmb3VuZCAhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCURCR19MT1coIm9rXG4iKTsKIAotCUJVR19PTihscGFyX3JjICE9IEhfU3VjY2Vzcyk7CisJQlVHX09OKGxwYXJfcmMgIT0gSF9TVUNDRVNTKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDE3LDcgKzQxOCw3IEBACiAKIAlscGFyX3JjID0gcGxwYXJfcHRlX3JlYWQoZmxhZ3MsIHNsb3QsICZkd29yZDAsICZkdW1teV93b3JkMSk7CiAKLQlCVUdfT04obHBhcl9yYyAhPSBIX1N1Y2Nlc3MpOworCUJVR19PTihscGFyX3JjICE9IEhfU1VDQ0VTUyk7CiAKIAlyZXR1cm4gZHdvcmQwOwogfQpAQCAtNDY4LDcgKzQ2OSw3IEBACiAJZmxhZ3MgPSBuZXdwcCAmIDc7CiAJbHBhcl9yYyA9IHBscGFyX3B0ZV9wcm90ZWN0KGZsYWdzLCBzbG90LCAwKTsKIAotCUJVR19PTihscGFyX3JjICE9IEhfU3VjY2Vzcyk7CisJQlVHX09OKGxwYXJfcmMgIT0gSF9TVUNDRVNTKTsKIH0KIAogc3RhdGljIHZvaWQgcFNlcmllc19scGFyX2hwdGVfaW52YWxpZGF0ZSh1bnNpZ25lZCBsb25nIHNsb3QsIHVuc2lnbmVkIGxvbmcgdmEsCkBAIC00ODQsMTAgKzQ4NSwxMCBAQAogCXdhbnRfdiA9IGhwdGVfZW5jb2RlX3YodmEsIHBzaXplKTsKIAlscGFyX3JjID0gcGxwYXJfcHRlX3JlbW92ZShIX0FWUE4sIHNsb3QsIHdhbnRfdiAmIEhQVEVfVl9BVlBOLAogCQkJCSAgICZkdW1teTEsICZkdW1teTIpOwotCWlmIChscGFyX3JjID09IEhfTm90X0ZvdW5kKQorCWlmIChscGFyX3JjID09IEhfTk9UX0ZPVU5EKQogCQlyZXR1cm47CiAKLQlCVUdfT04obHBhcl9yYyAhPSBIX1N1Y2Nlc3MpOworCUJVR19PTihscGFyX3JjICE9IEhfU1VDQ0VTUyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCmluZGV4IGZjYzRkNTYuLmUwMDAwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAkvKiBObyBSVEFTICovCiAJaWYgKHJ0YXNfdG9rZW4oImV2ZW50LXNjYW4iKSA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgewogCQlwcmludGsoS0VSTl9JTkZPICJydGFzZDogbm8gZXZlbnQtc2NhbiBvbiBzeXN0ZW1cbiIpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgicHBjNjQvcnRhcy9lcnJvcl9sb2ciLCBTX0lSVVNSLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggYjJmYmY4Yi4uM2JhODc4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogewogCS8qIE1hbnVhbGx5IGxlYXZlIHRoZSBrZXJuZWwgdmVyc2lvbiBvbiB0aGUgcGFuZWwuICovCiAJcHBjX21kLnByb2dyZXNzKCJMaW51eCBwcGM2NFxuIiwgMCk7Ci0JcHBjX21kLnByb2dyZXNzKHN5c3RlbV91dHNuYW1lLnZlcnNpb24sIDApOworCXBwY19tZC5wcm9ncmVzcyhzeXN0ZW1fdXRzbmFtZS5yZWxlYXNlLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzg5LDYgKzM4OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBTZXJpZXNfcHJvYmUodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CiAgCWNoYXIgKmR0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChvZl9nZXRfZmxhdF9kdF9yb290KCksCiAgCQkJCQkgICJkZXZpY2VfdHlwZSIsIE5VTEwpOwogIAlpZiAoZHR5cGUgPT0gTlVMTCkKQEAgLTM5Niw2ICszOTcsMTMgQEAKICAJaWYgKHN0cmNtcChkdHlwZSwgImNocnAiKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBDZWxsIGJsYWRlcyBmaXJtd2FyZSBjbGFpbXMgdG8gYmUgY2hycCB3aGlsZSBpdCdzIG5vdC4gVW50aWwgdGhpcworCSAqIGlzIGZpeGVkLCB3ZSBuZWVkIHRvIGF2b2lkIHRob3NlIGhlcmUuCisJICovCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENQQlctMS4wIikgfHwKKwkgICAgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ0JFQSIpKQorCQlyZXR1cm4gMDsKKwogCURCRygicFNlcmllcyBkZXRlY3RlZCwgbG9va2luZyBmb3IgTFBBUiBjYXBhYmlsaXR5Li4uXG4iKTsKIAogCS8qIE5vdyB0cnkgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcnVubmluZyBvbiBMUEFSICovCkBAIC00NjMsNyArNDcxLDcgQEAKIAkgKiB2ZXJ5IGxvdyBwcmlvcml0eS4gIFRoZSBjZWRlIGVuYWJsZXMgaW50ZXJydXB0cywgd2hpY2gKIAkgKiBkb2Vzbid0IG1hdHRlciBoZXJlLgogCSAqLwotCWlmICghbHBwYWNhW2NwdSBeIDFdLmlkbGUgfHwgcG9sbF9wZW5kaW5nKCkgPT0gSF9QZW5kaW5nKQorCWlmICghbHBwYWNhW2NwdSBeIDFdLmlkbGUgfHwgcG9sbF9wZW5kaW5nKCkgPT0gSF9QRU5ESU5HKQogCQljZWRlX3Byb2Nlc3NvcigpOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMKaW5kZXggODY2Mzc5Yi4uOGU1M2UwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYwpAQCAtMjU4LDcgKzI1OCw3IEBACiBpbnQgdmlvX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB2aW9fZGV2ICpkZXYpCiB7CiAJaW50IHJjID0gaF92aW9fc2lnbmFsKGRldi0+dW5pdF9hZGRyZXNzLCBWSU9fSVJRX0VOQUJMRSk7Ci0JaWYgKHJjICE9IEhfU3VjY2VzcykKKwlpZiAocmMgIT0gSF9TVUNDRVNTKQogCQlwcmludGsoS0VSTl9FUlIgInZpbzogRXJyb3IgMHgleCBlbmFibGluZyBpbnRlcnJ1cHRzXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjY3LDcgKzI2Nyw3IEBACiBpbnQgdmlvX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgdmlvX2RldiAqZGV2KQogewogCWludCByYyA9IGhfdmlvX3NpZ25hbChkZXYtPnVuaXRfYWRkcmVzcywgVklPX0lSUV9ESVNBQkxFKTsKLQlpZiAocmMgIT0gSF9TdWNjZXNzKQorCWlmIChyYyAhPSBIX1NVQ0NFU1MpCiAJCXByaW50ayhLRVJOX0VSUiAidmlvOiBFcnJvciAweCV4IGRpc2FibGluZyBpbnRlcnJ1cHRzXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggNDg2NGNiMy4uMmQ2MGVhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJldHVybl92YWx1ZTsKIAogCWxwYXJfcmMgPSBwbHBhcl94aXJyKCZyZXR1cm5fdmFsdWUpOwotCWlmIChscGFyX3JjICE9IEhfU3VjY2VzcykKKwlpZiAobHBhcl9yYyAhPSBIX1NVQ0NFU1MpCiAJCXBhbmljKCIgYmFkIHJldHVybiBjb2RlIHhpcnIgLSByYyA9ICVseCBcbiIsIGxwYXJfcmMpOwogCXJldHVybiAoaW50KXJldHVybl92YWx1ZTsKIH0KQEAgLTE3OSw3ICsxNzksNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsNjQgPSB2YWx1ZSAmIDB4ZmZmZmZmZmY7CiAKIAlscGFyX3JjID0gcGxwYXJfZW9pKHZhbDY0KTsKLQlpZiAobHBhcl9yYyAhPSBIX1N1Y2Nlc3MpCisJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQogCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIEVPSSAtIHJjID0gJWxkLCB2YWx1ZT0lbHhcbiIsIGxwYXJfcmMsCiAJCSAgICAgIHZhbDY0KTsKIH0KQEAgLTE4OSw3ICsxODksNyBAQAogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAogCWxwYXJfcmMgPSBwbHBhcl9jcHByKHZhbHVlKTsKLQlpZiAobHBhcl9yYyAhPSBIX1N1Y2Nlc3MpCisJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQogCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIGNwcHIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7CiB9CiAKQEAgLTE5OCw3ICsxOTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAogCWxwYXJfcmMgPSBwbHBhcl9pcGkoZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChuX2NwdSksIHZhbHVlKTsKLQlpZiAobHBhcl9yYyAhPSBIX1N1Y2Nlc3MpCisJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQogCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIHFpcnIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggNjFkMzE3NC4uMzgwODdiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogI2luY2x1ZGUgImRhcnQuaCIKIAorZXh0ZXJuIGludCBpb21tdV9pc19vZmY7CiBleHRlcm4gaW50IGlvbW11X2ZvcmNlX29uOwogCiAvKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIERBUlQgdGFibGUgKi8KQEAgLTMyOSwxMCArMzMwLDE3IEBACiAKIHZvaWQgX19pbml0IGFsbG9jX2RhcnRfdGFibGUodm9pZCkKIHsKLQkvKiBPbmx5IHJlc2VydmUgREFSVCBzcGFjZSBpZiBtYWNoaW5lIGhhcyBtb3JlIHRoYW4gMkdCIG9mIFJBTQorCS8qIE9ubHkgcmVzZXJ2ZSBEQVJUIHNwYWNlIGlmIG1hY2hpbmUgaGFzIG1vcmUgdGhhbiAxR0Igb2YgUkFNCiAJICogb3IgaWYgcmVxdWVzdGVkIHdpdGggaW9tbXU9b24gb24gY21kbGluZS4KKwkgKgorCSAqIDFHQiBvZiBSQU0gaXMgcGlja2VkIGFzIGxpbWl0IGJlY2F1c2Ugc29tZSBkZWZhdWx0IGRldmljZXMKKwkgKiAoaS5lLiBBaXJwb3J0IEV4dHJlbWUpIGhhdmUgMzAgYml0IGFkZHJlc3MgcmFuZ2UgbGltaXRzLgogCSAqLwotCWlmIChsbWJfZW5kX29mX0RSQU0oKSA8PSAweDgwMDAwMDAwdWxsICYmICFpb21tdV9mb3JjZV9vbikKKworCWlmIChpb21tdV9pc19vZmYpCisJCXJldHVybjsKKworCWlmICghaW9tbXVfZm9yY2Vfb24gJiYgbG1iX2VuZF9vZl9EUkFNKCkgPD0gMHg0MDAwMDAwMHVsbCkKIAkJcmV0dXJuOwogCiAJLyogNTEyIHBhZ2VzICgyTUIpIGlzIG1heCBEQVJUIHRhYmxlc2l6ZS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvbGliL01ha2VmaWxlIGIvYXJjaC9wcGMvYm9vdC9saWIvTWFrZWZpbGUKaW5kZXggZDQwNzdlNi4uODBjODRkNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvYm9vdC9saWIvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIENGTEFHU19rYmQubwk6PSAtSWRyaXZlcnMvY2hhcgotQ0ZMQUdTX3ZyZXNldC5vIDo9IC1JJChzcmN0cmVlKS9hcmNoL3BwYy9ib290L2luY2x1ZGUKK0NGTEFHU192cmVzZXQubyA6PSAtSWFyY2gvcHBjL2Jvb3QvaW5jbHVkZQogCiB6bGliICA6PSBpbmZibG9jay5jIGluZmNvZGVzLmMgaW5mZmFzdC5jIGluZmxhdGUuYyBpbmZ0cmVlcy5jIGluZnV0aWwuYwogCSAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNzdlNGRjNy4uMmY1YzVlMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEzNCw2ICsxMzQsNyBAQAogCURFRklORShUSV9UQVNLLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHRhc2spKTsKIAlERUZJTkUoVElfRVhFQ0RPTUFJTiwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBleGVjX2RvbWFpbikpOwogCURFRklORShUSV9GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykpOworCURFRklORShUSV9MT0NBTF9GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBsb2NhbF9mbGFncykpOwogCURFRklORShUSV9DUFUsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY3B1KSk7CiAJREVGSU5FKFRJX1BSRUVNUFQsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgcHJlZW1wdF9jb3VudCkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDU4OTFlY2IuLjFhZGM5MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCkBAIC0xMjgsMjkgKzEyOCwyNiBAQAogCXN0dwlyMTIsNChyMTEpCiAjZW5kaWYKIAliCTNmCisKIDI6CS8qIGlmIGZyb20ga2VybmVsLCBjaGVjayBpbnRlcnJ1cHRlZCBET1pFL05BUCBtb2RlIGFuZAogICAgICAgICAgKiBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3cKICAgICAgICAgICovCisJbHd6CXI5LFRIUkVBRF9JTkZPLVRIUkVBRChyMTIpCisJY21wbHcJcjEscjkJCQkvKiBpZiByMSA8PSBjdXJyZW50LT50aHJlYWRfaW5mbyAqLworCWJsZS0Jc3RhY2tfb3ZmCQkvKiB0aGVuIHRoZSBrZXJuZWwgc3RhY2sgb3ZlcmZsb3dlZCAqLworNToKICNpZmRlZiBDT05GSUdfNnh4Ci0JbWZzcHIJcjExLFNQUk5fSElEMAotCW10Y3IJcjExCi1CRUdJTl9GVFJfU0VDVElPTgotCWJ0LQk4LDRmCQkJLyogQ2hlY2sgRE9aRSAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX0RPWkUpCi1CRUdJTl9GVFJfU0VDVElPTgotCWJ0LQk5LDRmCQkJLyogQ2hlY2sgTkFQICovCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DQU5fTkFQKQorCXRvcGh5cyhyOSxyOSkJCQkvKiBjaGVjayBsb2NhbCBmbGFncyAqLworCWx3eglyMTIsVElfTE9DQUxfRkxBR1MocjkpCisJbXRjcmYJMHgwMSxyMTIKKwlidC0JMzEtVExGX05BUFBJTkcsNGYKICNlbmRpZiAvKiBDT05GSUdfNnh4ICovCiAJLmdsb2JsIHRyYW5zZmVyX3RvX2hhbmRsZXJfY29udAogdHJhbnNmZXJfdG9faGFuZGxlcl9jb250OgotCWx3eglyMTEsVEhSRUFEX0lORk8tVEhSRUFEKHIxMikKLQljbXBsdwlyMSxyMTEJCQkvKiBpZiByMSA8PSBjdXJyZW50LT50aHJlYWRfaW5mbyAqLwotCWJsZS0Jc3RhY2tfb3ZmCQkvKiB0aGVuIHRoZSBrZXJuZWwgc3RhY2sgb3ZlcmZsb3dlZCAqLwogMzoKIAltZmxyCXI5CiAJbHd6CXIxMSwwKHI5KQkJLyogdmlydHVhbCBhZGRyZXNzIG9mIGhhbmRsZXIgKi8KIAlsd3oJcjksNChyOSkJCS8qIHdoZXJlIHRvIGdvIHdoZW4gZG9uZSAqLwotCUZJWF9TUlIxKHIxMCxyMTIpCiAJbXRzcHIJU1BSTl9TUlIwLHIxMQogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAltdGxyCXI5CkBAIC0xNTgsNyArMTU1LDkgQEAKIAlSRkkJCQkJLyoganVtcCB0byBoYW5kbGVyLCBlbmFibGUgTU1VICovCiAKICNpZmRlZiBDT05GSUdfNnh4Ci00OgliCXBvd2VyX3NhdmVfNnh4X3Jlc3RvcmUKKzQ6CXJsd2lubQlyMTIscjEyLDAsfl9UTEZfTkFQUElORworCXN0dwlyMTIsVElfTE9DQUxfRkxBR1MocjkpCisJYglwb3dlcl9zYXZlXzZ4eF9yZXN0b3JlCiAjZW5kaWYKIAogLyoKQEAgLTE2NywxMCArMTY2LDEwIEBACiAgKi8KIHN0YWNrX292ZjoKIAkvKiBzb21ldGltZXMgd2UgdXNlIGEgc3RhdGljYWxseS1hbGxvY2F0ZWQgc3RhY2ssIHdoaWNoIGlzIE9LLiAqLwotCWxpcwlyMTEsX2VuZEBoCi0Jb3JpCXIxMSxyMTEsX2VuZEBsCi0JY21wbHcJcjEscjExCi0JYmxlCTNiCQkJLyogcjEgPD0gJl9lbmQgaXMgT0sgKi8KKwlsaXMJcjEyLF9lbmRAaAorCW9yaQlyMTIscjEyLF9lbmRAbAorCWNtcGx3CXIxLHIxMgorCWJsZQk1YgkJCS8qIHIxIDw9ICZfZW5kIGlzIE9LICovCiAJU0FWRV9OVkdQUlMocjExKQogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlsaXMJcjEsaW5pdF90aHJlYWRfdW5pb25AaGEKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzh4eC5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKaW5kZXggZWM1M2M3ZC4uN2EyZjIwNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKQEAgLTM1NSw5ICszNTUsNyBAQAogCiAJLiA9IDB4MTIwMAogRGF0YVN0b3JlVExCTWlzczoKLSNpZmRlZiBDT05GSUdfOHh4X0NQVTYKIAlzdHcJcjMsIDgocjApCi0jZW5kaWYKIAlET184eHhfQ1BVNigweDNmODAsIHIzKQogCW10c3ByCVNQUk5fTV9UVywgcjEwCS8qIFNhdmUgYSBjb3VwbGUgb2Ygd29ya2luZyByZWdpc3RlcnMgKi8KIAltZmNyCXIxMApAQCAtNDE3LDkgKzQxNSw3IEBACiAJbHd6CXIxMSwgMChyMCkKIAltdGNyCXIxMQogCWx3eglyMTEsIDQocjApCi0jaWZkZWYgQ09ORklHXzh4eF9DUFU2CiAJbHd6CXIzLCA4KHIwKQotI2VuZGlmCiAJcmZpCiAKIC8qIFRoaXMgaXMgYW4gaW5zdHJ1Y3Rpb24gVExCIGVycm9yIG9uIHRoZSBNUEM4eHguICBUaGlzIGNvdWxkIGJlIGR1ZQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IDg2NWJhNzQuLmIyNTBiMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTk0LDYgKzk0LDcgQEAKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKIEVYUE9SVF9TWU1CT0woc3RyY21wKTsKIEVYUE9SVF9TWU1CT0woc3RyY2FzZWNtcCk7CitFWFBPUlRfU1lNQk9MKHN0cm5jYXNlY21wKTsKIEVYUE9SVF9TWU1CT0woX19kaXY2NF8zMik7CiAKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jCmluZGV4IGY4NDE5NzIuLjU1NDc3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuYwpAQCAtMzMxLDcgKzMzMSw3IEBACiB2b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsCiAJCXVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCiB7Ci0JaWJtNDR4X3BsYXRmb3JtX2luaXQocjMsIHI0LCByNSwgcjYsIHI3KTsKKwlpYm00NDBneF9wbGF0Zm9ybV9pbml0KHIzLCByNCwgcjUsIHI2LCByNyk7CiAKIAlwcGNfbWQuc2V0dXBfYXJjaCA9IG9jb3RlYV9zZXR1cF9hcmNoOwogCXBwY19tZC5zaG93X2NwdWluZm8gPSBvY290ZWFfc2hvd19jcHVpbmZvOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzgyNzJhZHNfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4MjcyYWRzX3NldHVwLmMKaW5kZXggYmM5Yjk0Zi4uYWJiNzE1NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzgyNzJhZHNfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODI3MmFkc19zZXR1cC5jCkBAIC0yNiwxMSArMjYsMzUgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3VhcnRfcGQuaD4KIAogI2luY2x1ZGUgInBxMmFkc19wZC5oIgogCiBzdGF0aWMgdm9pZCBpbml0X2ZjYzFfaW9wb3J0cyh2b2lkKTsKIHN0YXRpYyB2b2lkIGluaXRfZmNjMl9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgaW5pdF9zY2MxX3VhcnRfaW9wb3J0cyh2b2lkKTsKK3N0YXRpYyB2b2lkIGluaXRfc2NjNF91YXJ0X2lvcG9ydHModm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvIG1wYzgyNzJfdWFydF9wZGF0YVtdID0geworCVtmc2lkX3NjYzFfdWFydF0gPSB7CisJCS5pbml0X2lvcG9ydHMgCT0gaW5pdF9zY2MxX3VhcnRfaW9wb3J0cywKKwkJLmZzX25vCQk9IGZzaWRfc2NjMV91YXJ0LAorCQkuYnJnCQk9IDEsCisJCS50eF9udW1fZmlmbwk9IDQsCisJCS50eF9idWZfc2l6ZQk9IDMyLAorCQkucnhfbnVtX2ZpZm8JPSA0LAorCQkucnhfYnVmX3NpemUJPSAzMiwKKwl9LAorCVtmc2lkX3NjYzRfdWFydF0gPSB7CisJCS5pbml0X2lvcG9ydHMgCT0gaW5pdF9zY2M0X3VhcnRfaW9wb3J0cywKKwkJLmZzX25vCQk9IGZzaWRfc2NjNF91YXJ0LAorCQkuYnJnCQk9IDQsCisJCS50eF9udW1fZmlmbwk9IDQsCisJCS50eF9idWZfc2l6ZQk9IDMyLAorCQkucnhfbnVtX2ZpZm8JPSA0LAorCQkucnhfYnVmX3NpemUJPSAzMiwKKwl9LAorfTsKIAogc3RhdGljIHN0cnVjdCBmc19taWlfYnVzX2luZm8gbWlpX2J1c19pbmZvID0gewogCS5tZXRob2QgICAgICAgICAgICAgICAgID0gZnNtaWlfYml0YmFuZywKQEAgLTIwMSwxMiArMjI1LDY1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBtcGM4MjcyYWRzX2ZpeHVwX3VhcnRfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkJICAgICAgaW50IGlkeCkKK3sKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBpbmZvOworCWludCBudW0gPSBBUlJBWV9TSVpFKG1wYzgyNzJfdWFydF9wZGF0YSk7CisJaW50IGlkID0gZnNfdWFydF9pZF9zY2MyZnNpZChpZHgpOworCisJLyogbm8gbmVlZCB0byBhbHRlciBhbnl0aGluZyBpZiBjb25zb2xlICovCisJaWYgKChpZCA8PSBudW0pICYmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpKSB7CisJCXBpbmZvID0gJm1wYzgyNzJfdWFydF9wZGF0YVtpZF07CisJCXBpbmZvLT51YXJ0X2NsayA9IGJkLT5iaV9pbnRmcmVxOworCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBpbmZvOworCX0KK30KKworc3RhdGljIHZvaWQgaW5pdF9zY2MxX3VhcnRfaW9wb3J0cyh2b2lkKQoreworCWNwbTJfbWFwX3QqIGltbWFwID0gaW9yZW1hcChDUE1fTUFQX0FERFIsIHNpemVvZihjcG0yX21hcF90KSk7CisKKyAgICAgICAgLyogU0NDMSBpcyBvbmx5IG9uIHBvcnQgRCAqLworCXNldGJpdHMzMigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcHBhcmQsMHgwMDAwMDAwMyk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wc29yZCwweDAwMDAwMDAxKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3Bzb3JkLDB4MDAwMDAwMDIpOworCWNscmJpdHMzMigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRpcmQsMHgwMDAwMDAwMSk7CisJc2V0Yml0czMyKCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGlyZCwweDAwMDAwMDAyKTsKKworICAgICAgICAvKiBXaXJlIEJSRzEgdG8gU0NDMSAqLworCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbXV4LmNteF9zY3IsMHgwMGZmZmZmZik7CisKKwlpb3VubWFwKGltbWFwKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zY2M0X3VhcnRfaW9wb3J0cyh2b2lkKQoreworCWNwbTJfbWFwX3QqIGltbWFwID0gaW9yZW1hcChDUE1fTUFQX0FERFIsIHNpemVvZihjcG0yX21hcF90KSk7CisKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BwYXJkLDB4MDAwMDA2MDApOworCWNscmJpdHMzMigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcHNvcmQsMHgwMDAwMDYwMCk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGlyZCwweDAwMDAwMjAwKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BkaXJkLDB4MDAwMDA0MDApOworCisgICAgICAgIC8qIFdpcmUgQlJHNCB0byBTQ0M0ICovCisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtdXguY214X3NjciwweDAwMDAwMGZmKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG11eC5jbXhfc2NyLDB4MDAwMDAwMWIpOworCisJaW91bm1hcChpbW1hcCk7Cit9CisKIHN0YXRpYyBpbnQgbXBjODI3MmFkc19wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fbm90aWZ5X2Rldl9tYXAgZGV2X21hcFtdID0gewogCQl7CiAJCQkuYnVzX2lkID0gImZzbC1jcG0tZmNjIiwKLQkJCS5ydG4gPSBtcGM4MjcyYWRzX2ZpeHVwX2VuZXRfcGRhdGEKKwkJCS5ydG4gPSBtcGM4MjcyYWRzX2ZpeHVwX2VuZXRfcGRhdGEsCisJCX0sCisJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWNwbS1zY2M6dWFydCIsCisJCQkucnRuID0gbXBjODI3MmFkc19maXh1cF91YXJ0X3BkYXRhLAogCQl9LAogCQl7CiAJCQkuYnVzX2lkID0gTlVMTApAQCAtMjMwLDcgKzMwNyw0NCBAQAogCXBwY19zeXNfZGV2aWNlX2VuYWJsZShNUEM4Mnh4X0NQTV9GQ0MxKTsKIAlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDODJ4eF9DUE1fRkNDMik7CiAKKwkvKiB0byBiZSByZWFkeSBmb3IgY29uc29sZSwgbGV0J3MgYXR0YWNoIHBkYXRhIGhlcmUgKi8KKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MxCisJcHBjX3N5c19kZXZpY2Vfc2V0ZnVuYyhNUEM4Mnh4X0NQTV9TQ0MxLCBQUENfU1lTX0ZVTkNfVUFSVCk7CisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzgyeHhfQ1BNX1NDQzEpOworCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NDQzQKKwlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzgyeHhfQ1BNX1NDQzQsIFBQQ19TWVNfRlVOQ19VQVJUKTsKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDODJ4eF9DUE1fU0NDNCk7CisjZW5kaWYKKworCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgICBUbyBwcmV2ZW50IGNvbmZ1c2lvbiwgY29uc29sZSBzZWxlY3Rpb24gaXMgZ3Jvc3M6CisgICBieSAwIGFzc3VtZWQgU0NDMSBhbmQgYnkgMSBhc3N1bWVkIFNDQzQKKyAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSogZWFybHlfdWFydF9nZXRfcGRldihpbnQgaW5kZXgpCit7CisJYmRfdCAqYmQgPSAoYmRfdCAqKSBfX3JlczsKKwlzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvICpwaW5mbzsKKworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHBkZXYgPSBOVUxMOworCWlmKGluZGV4KSB7IC8qYXNzdW1lIFNDQzQgaGVyZSovCisJCXBkZXYgPSAmcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW01QQzgyeHhfQ1BNX1NDQzRdOworCQlwaW5mbyA9ICZtcGM4MjcyX3VhcnRfcGRhdGFbZnNpZF9zY2M0X3VhcnRdOworCX0gZWxzZSB7IC8qb3ZlciBTQ0MxKi8KKwkJcGRldiA9ICZwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDODJ4eF9DUE1fU0NDMV07CisJCXBpbmZvID0gJm1wYzgyNzJfdWFydF9wZGF0YVtmc2lkX3NjYzFfdWFydF07CisJfQorCisJcGluZm8tPnVhcnRfY2xrID0gYmQtPmJpX2ludGZyZXE7CisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwaW5mbzsKKwlwcGNfc3lzX2ZpeHVwX21lbV9yZXNvdXJjZShwZGV2LCBDUE1fTUFQX0FERFIpOworCXJldHVybiBOVUxMOworfQorCiBhcmNoX2luaXRjYWxsKG1wYzgyNzJhZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzX3NldHVwLmMKaW5kZXggYWM4ZmNjNi4uZDkxOWRhYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkc19zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NjZhZHNfc2V0dXAuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvZnNfZW5ldF9wZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3VhcnRfcGQuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KIAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgpAQCAtMzcsNiArMzgsMTEgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19yZXNbXTsKIAorc3RhdGljIHZvaWQgc2V0dXBfZmVjMV9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgc2V0dXBfc2NjMV9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgc2V0dXBfc21jMV9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgc2V0dXBfc21jMl9pb3BvcnRzKHZvaWQpOworCiBzdGF0aWMgc3RydWN0IGZzX21paV9idXNfaW5mbyBmZWNfbWlpX2J1c19pbmZvID0gewogCS5tZXRob2QgPSBmc21paV9mZWMsCiAJLmlkID0gMCwKQEAgLTc5LDYgKzg1LDI4IEBACiAJLnBoeV9pcnEgPSAtMSwKIAogCS5idXNfaW5mbyA9ICZzY2NfbWlpX2J1c19pbmZvLAorCit9OworCitzdGF0aWMgc3RydWN0IGZzX3VhcnRfcGxhdGZvcm1faW5mbyBtcGM4NjZfdWFydF9wZGF0YVtdID0geworCVtmc2lkX3NtYzFfdWFydF0gPSB7CisJCS5icmcJCT0gMSwKKyAJCS5mc19ubyAJCT0gZnNpZF9zbWMxX3VhcnQsCisgCQkuaW5pdF9pb3BvcnRzCT0gc2V0dXBfc21jMV9pb3BvcnRzLAorCQkudHhfbnVtX2ZpZm8JPSA0LAorCQkudHhfYnVmX3NpemUJPSAzMiwKKwkJLnJ4X251bV9maWZvCT0gNCwKKwkJLnJ4X2J1Zl9zaXplCT0gMzIsCisgCX0sCisgCVtmc2lkX3NtYzJfdWFydF0gPSB7CisgCQkuYnJnCQk9IDIsCisgCQkuZnNfbm8gCQk9IGZzaWRfc21jMl91YXJ0LAorIAkJLmluaXRfaW9wb3J0cwk9IHNldHVwX3NtYzJfaW9wb3J0cywKKwkJLnR4X251bV9maWZvCT0gNCwKKwkJLnR4X2J1Zl9zaXplCT0gMzIsCisJCS5yeF9udW1fZmlmbwk9IDQsCisJCS5yeF9idWZfc2l6ZQk9IDMyLAorIAl9LAogfTsKIAogdm9pZCBfX2luaXQgYm9hcmRfaW5pdCh2b2lkKQpAQCAtOTIsOSArMTIwLDEyIEBACiAJCXByaW50ayhLRVJOX0NSSVQgIkNvdWxkIG5vdCByZW1hcCBCQ1NSMVxuIik7CiAJCXJldHVybjsKIAl9CisKICNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMxCiAJY3AtPmNwX3NpbW9kZSAmPSB+KDB4ZTAwMDAwMDAgPj4gMTcpOwkvKiBicmcxICovCiAJY2xyYml0czMyKGJjc3JfaW8sKDB4ODAwMDAwMDAgPj4gNykpOworCWNwLT5jcF9zbWNbMF0uc21jX3NtY20gfD0gKFNNQ01fUlggfCBTTUNNX1RYKTsKKwljcC0+Y3Bfc21jWzBdLnNtY19zbWNtciAmPSB+KFNNQ01SX1JFTiB8IFNNQ01SX1RFTik7CiAjZWxzZQogCXNldGJpdHMzMihiY3NyX2lvLCgweDgwMDAwMDAwID4+IDcpKTsKIApAQCAtMTA4LDYgKzEzOSw4IEBACiAJY3AtPmNwX3NpbW9kZSAmPSB+KDB4ZTAwMDAwMDAgPj4gMSk7CiAJY3AtPmNwX3NpbW9kZSB8PSAoMHgyMDAwMDAwMCA+PiAxKTsJLyogYnJnMiAqLwogCWNscmJpdHMzMihiY3NyX2lvLCgweDgwMDAwMDAwID4+IDEzKSk7CisJY3AtPmNwX3NtY1sxXS5zbWNfc21jbSB8PSAoU01DTV9SWCB8IFNNQ01fVFgpOworCWNwLT5jcF9zbWNbMV0uc21jX3NtY21yICY9IH4oU01DTVJfUkVOIHwgU01DTVJfVEVOKTsKICNlbHNlCiAJY2xyYml0czMyKGJjc3JfaW8sKDB4ODAwMDAwMDAgPj4gMTMpKTsKIAljcC0+Y3BfcGJwYXIgJj0gfigweDAwMDAwYzAwKTsKQEAgLTIzMiw2ICsyNjUsNzQgQEAKIAltcGM4NjZhZHNfZml4dXBfZW5ldF9wZGF0YShwZGV2LCBmc2lkX3NjYzEgKyBwZGV2LT5pZCAtIDEpOwogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9zbWMxX2lvcG9ydHModm9pZCkKK3sKKwlpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsKKwl1bnNpZ25lZCAqYmNzcl9pbzsKKwl1bnNpZ25lZCBpbnQgaW9iaXRzID0gMHgwMDAwMDBjMDsKKworCWJjc3JfaW8gPSBpb3JlbWFwKEJDU1IxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisJaWYgKGJjc3JfaW8gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgcmVtYXAgQkNTUjFcbiIpOworCQlyZXR1cm47CisJfQorCisJY2xyYml0czMyKGJjc3JfaW8sQkNTUjFfUlMyMzJFTl8xKTsKKwlpb3VubWFwKGJjc3JfaW8pOworCisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BicGFyLCBpb2JpdHMpOworCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYmRpciwgaW9iaXRzKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9jcG0uY3BfcGJvZHIsIGlvYml0cyk7CisKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc21jMl9pb3BvcnRzKHZvaWQpCit7CisJaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBJTUFQX0FERFI7CisJdW5zaWduZWQgKmJjc3JfaW87CisJdW5zaWduZWQgaW50IGlvYml0cyA9IDB4MDAwMDBjMDA7CisKKwliY3NyX2lvID0gaW9yZW1hcChCQ1NSMSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWlmIChiY3NyX2lvID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiQ291bGQgbm90IHJlbWFwIEJDU1IxXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNscmJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMik7CisKKwlpb3VubWFwKGJjc3JfaW8pOworCisjaWZuZGVmIENPTkZJR19TRVJJQUxfQ1BNX0FMVF9TTUMyCisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BicGFyLCBpb2JpdHMpOworCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYmRpciwgaW9iaXRzKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9jcG0uY3BfcGJvZHIsIGlvYml0cyk7CisjZWxzZQorCXNldGJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFwYXIsIGlvYml0cyk7CisJY2xyYml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciwgaW9iaXRzKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3Bhb2RyLCBpb2JpdHMpOworI2VuZGlmCisKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1wYzg2NmFkc19maXh1cF91YXJ0X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkeCkKK3sKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBpbmZvOworCWludCBudW0gPSBBUlJBWV9TSVpFKG1wYzg2Nl91YXJ0X3BkYXRhKTsKKworCWludCBpZCA9IGZzX3VhcnRfaWRfc21jMmZzaWQoaWR4KTsKKworCS8qIG5vIG5lZWQgdG8gYWx0ZXIgYW55dGhpbmcgaWYgY29uc29sZSAqLworCWlmICgoaWQgPD0gbnVtKSAmJiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSkgeworCQlwaW5mbyA9ICZtcGM4NjZfdWFydF9wZGF0YVtpZF07CisJCXBpbmZvLT51YXJ0X2NsayA9IGJkLT5iaV9pbnRmcmVxOworCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBpbmZvOworCX0KK30KKwogc3RhdGljIGludCBtcGM4NjZhZHNfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX25vdGlmeV9kZXZfbWFwIGRldl9tYXBbXSA9IHsKQEAgLTI0NCw2ICszNDUsMTAgQEAKIAkJCS5ydG4gPSBtcGM4NjZhZHNfZml4dXBfc2NjX2VuZXRfcGRhdGEsCiAJCX0sCiAJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWNwbS1zbWM6dWFydCIsCisJCQkucnRuID0gbXBjODY2YWRzX2ZpeHVwX3VhcnRfcGRhdGEKKwkJfSwKKwkJewogCQkJLmJ1c19pZCA9IE5VTEwKIAkJfQogCX07CkBAIC0yNjcsNyArMzcyLDQyIEBACiAjZW5kaWYKIAlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9GRUMxKTsKIAorLyogU2luY2UgZWl0aGVyIG9mIHRoZSB1YXJ0cyBjb3VsZCBiZSB1c2VkIGFzIGNvbnNvbGUsIHRoZXkgbmVlZCB0byByZWFkeSAqLworI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9TTUMxKTsKKwlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzh4eF9DUE1fU01DMSwgUFBDX1NZU19GVU5DX1VBUlQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9TTUMyKTsKKwlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzh4eF9DUE1fU01DMiwgUFBDX1NZU19GVU5DX1VBUlQpOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAgIFRvIHByZXZlbnQgY29uZnVzaW9uLCBjb25zb2xlIHNlbGVjdGlvbiBpcyBncm9zczoKKyAgIGJ5IDAgYXNzdW1lZCBTTUMxIGFuZCBieSAxIGFzc3VtZWQgU01DMgorICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBlYXJseV91YXJ0X2dldF9wZGV2KGludCBpbmRleCkKK3sKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBpbmZvOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSogcGRldiA9IE5VTEw7CisJaWYoaW5kZXgpIHsgLyphc3N1bWUgU01DMiBoZXJlKi8KKwkJcGRldiA9ICZwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDOHh4X0NQTV9TTUMyXTsKKwkJcGluZm8gPSAmbXBjODY2X3VhcnRfcGRhdGFbMV07CisJfSBlbHNlIHsgLypvdmVyIFNNQzEqLworCQlwZGV2ID0gJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEM4eHhfQ1BNX1NNQzFdOworCQlwaW5mbyA9ICZtcGM4NjZfdWFydF9wZGF0YVswXTsKKwl9CisKKwlwaW5mby0+dWFydF9jbGsgPSBiZC0+YmlfaW50ZnJlcTsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBpbmZvOworCXBwY19zeXNfZml4dXBfbWVtX3Jlc291cmNlKHBkZXYsIElNQVBfQUREUik7CisJcmV0dXJuIE5VTEw7Cit9CisKIGFyY2hfaW5pdGNhbGwobXBjODY2YWRzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg4NWFkc19zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg4NWFkc19zZXR1cC5jCmluZGV4IDUwYTk5ZTUuLjRiODg2NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHNfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODg1YWRzX3NldHVwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZzX2VuZXRfcGQuaD4KKyNpbmNsdWRlIDxsaW51eC9mc191YXJ0X3BkLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KQEAgLTM1LDkgKzM2LDMyIEBACiAjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KIAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19yZXNbXTsKK3N0YXRpYyB2b2lkIHNldHVwX3NtYzFfaW9wb3J0cyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNldHVwX3NtYzJfaW9wb3J0cyh2b2lkKTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1wYzg4NWFkc19zY2NfcGh5X2luaXQoY2hhcik7CiAKK3N0YXRpYyBzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvIG1wYzg4NV91YXJ0X3BkYXRhW10gPSB7CisJW2ZzaWRfc21jMV91YXJ0XSA9IHsKKwkJLmJyZwkJPSAxLAorIAkJLmZzX25vIAkJPSBmc2lkX3NtYzFfdWFydCwKKyAJCS5pbml0X2lvcG9ydHMJPSBzZXR1cF9zbWMxX2lvcG9ydHMsCisJCS50eF9udW1fZmlmbwk9IDQsCisJCS50eF9idWZfc2l6ZQk9IDMyLAorCQkucnhfbnVtX2ZpZm8JPSA0LAorCQkucnhfYnVmX3NpemUJPSAzMiwKKyAJfSwKKyAJW2ZzaWRfc21jMl91YXJ0XSA9IHsKKyAJCS5icmcJCT0gMiwKKyAJCS5mc19ubyAJCT0gZnNpZF9zbWMyX3VhcnQsCisgCQkuaW5pdF9pb3BvcnRzCT0gc2V0dXBfc21jMl9pb3BvcnRzLAorCQkudHhfbnVtX2ZpZm8JPSA0LAorCQkudHhfYnVmX3NpemUJPSAzMiwKKwkJLnJ4X251bV9maWZvCT0gNCwKKwkJLnJ4X2J1Zl9zaXplCT0gMzIsCisgCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGZzX21paV9idXNfaW5mbyBmZWNfbWlpX2J1c19pbmZvID0gewogCS5tZXRob2QgPSBmc21paV9mZWMsCiAJLmlkID0gMCwKQEAgLTExNiw2ICsxNDAsOCBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEKIAljcC0+Y3Bfc2ltb2RlICY9IH4oMHhlMDAwMDAwMCA+PiAxNyk7CS8qIGJyZzEgKi8KIAljbHJiaXRzMzIoYmNzcl9pbywgQkNTUjFfUlMyMzJFTl8xKTsKKyAgICAgICAgY3AtPmNwX3NtY1swXS5zbWNfc21jbSB8PSAoU01DTV9SWCB8IFNNQ01fVFgpOworICAgICAgICBjcC0+Y3Bfc21jWzBdLnNtY19zbWNtciAmPSB+KFNNQ01SX1JFTiB8IFNNQ01SX1RFTik7CiAjZWxzZQogCXNldGJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMSk7CiAJY3AtPmNwX3NtY1swXS5zbWNfc21jbXIgPSAwOwpAQCAtMTI2LDYgKzE1Miw4IEBACiAJY3AtPmNwX3NpbW9kZSAmPSB+KDB4ZTAwMDAwMDAgPj4gMSk7CiAJY3AtPmNwX3NpbW9kZSB8PSAoMHgyMDAwMDAwMCA+PiAxKTsJLyogYnJnMiAqLwogCWNscmJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMik7CisgICAgICAgIGNwLT5jcF9zbWNbMV0uc21jX3NtY20gfD0gKFNNQ01fUlggfCBTTUNNX1RYKTsKKyAgICAgICAgY3AtPmNwX3NtY1sxXS5zbWNfc21jbXIgJj0gfihTTUNNUl9SRU4gfCBTTUNNUl9URU4pOwogI2Vsc2UKIAlzZXRiaXRzMzIoYmNzcl9pbyxCQ1NSMV9SUzIzMkVOXzIpOwogCWNwLT5jcF9zbWNbMV0uc21jX3NtY21yID0gMDsKQEAgLTM0Myw2ICszNzEsNzAgQEAKIAlvdXRfYmUzMigmZmVjcC0+ZmVjX21paV9zcGVlZCwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldHVwX3NtYzFfaW9wb3J0cyh2b2lkKQoreworICAgICAgICBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsKKyAgICAgICAgdW5zaWduZWQgKmJjc3JfaW87CisgICAgICAgIHVuc2lnbmVkIGludCBpb2JpdHMgPSAweDAwMDAwMGMwOworCisgICAgICAgIGJjc3JfaW8gPSBpb3JlbWFwKEJDU1IxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisgICAgICAgIGlmIChiY3NyX2lvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgcmVtYXAgQkNTUjFcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjbHJiaXRzMzIoYmNzcl9pbyxCQ1NSMV9SUzIzMkVOXzEpOworICAgICAgICBpb3VubWFwKGJjc3JfaW8pOworCisgICAgICAgIHNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYnBhciwgaW9iaXRzKTsKKyAgICAgICAgY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BiZGlyLCBpb2JpdHMpOworICAgICAgICBjbHJiaXRzMTYoJmltbWFwLT5pbV9jcG0uY3BfcGJvZHIsIGlvYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3NtYzJfaW9wb3J0cyh2b2lkKQoreworICAgICAgICBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsKKyAgICAgICAgdW5zaWduZWQgKmJjc3JfaW87CisgICAgICAgIHVuc2lnbmVkIGludCBpb2JpdHMgPSAweDAwMDAwYzAwOworCisgICAgICAgIGJjc3JfaW8gPSBpb3JlbWFwKEJDU1IxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisgICAgICAgIGlmIChiY3NyX2lvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgcmVtYXAgQkNTUjFcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjbHJiaXRzMzIoYmNzcl9pbyxCQ1NSMV9SUzIzMkVOXzIpOworICAgICAgICBpb3VubWFwKGJjc3JfaW8pOworCisjaWZuZGVmIENPTkZJR19TRVJJQUxfQ1BNX0FMVF9TTUMyCisgICAgICAgIHNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYnBhciwgaW9iaXRzKTsKKyAgICAgICAgY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BiZGlyLCBpb2JpdHMpOworICAgICAgICBjbHJiaXRzMTYoJmltbWFwLT5pbV9jcG0uY3BfcGJvZHIsIGlvYml0cyk7CisjZWxzZQorICAgICAgICBzZXRiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyLCBpb2JpdHMpOworICAgICAgICBjbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyLCBpb2JpdHMpOworICAgICAgICBjbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3Bhb2RyLCBpb2JpdHMpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4ODVhZHNfZml4dXBfdWFydF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZHgpCit7CisJYmRfdCAqYmQgPSAoYmRfdCAqKSBfX3JlczsKKwlzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvICpwaW5mbzsKKwlpbnQgbnVtID0gQVJSQVlfU0laRShtcGM4ODVfdWFydF9wZGF0YSk7CisKKwlpbnQgaWQgPSBmc191YXJ0X2lkX3NtYzJmc2lkKGlkeCk7CisKKwkvKiBubyBuZWVkIHRvIGFsdGVyIGFueXRoaW5nIGlmIGNvbnNvbGUgKi8KKwlpZiAoKGlkIDw9IG51bSkgJiYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkpIHsKKwkJcGluZm8gPSAmbXBjODg1X3VhcnRfcGRhdGFbaWRdOworCQlwaW5mby0+dWFydF9jbGsgPSBiZC0+YmlfaW50ZnJlcTsKKwkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwaW5mbzsKKwl9Cit9CisKKwogc3RhdGljIGludCBtcGM4ODVhZHNfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIApAQCAtMzU2LDEyICs0NDgsMTcgQEAKIAkJCS5ydG4gPSBtcGM4ODVhZHNfZml4dXBfc2NjX2VuZXRfcGRhdGEsCiAJCX0sCiAJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWNwbS1zbWM6dWFydCIsCisJCQkucnRuID0gbXBjODg1YWRzX2ZpeHVwX3VhcnRfcGRhdGEKKwkJfSwKKwkJewogCQkJLmJ1c19pZCA9IE5VTEwKIAkJfQogCX07CiAKIAlwbGF0Zm9ybV9ub3RpZnlfbWFwKGRldl9tYXAsZGV2KTsKIAorCXJldHVybiAwOwogfQogCiBpbnQgX19pbml0IG1wYzg4NWFkc19pbml0KHZvaWQpCkBAIC0zODMsNyArNDgwLDQxIEBACiAJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fRkVDMik7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9TTUMxKTsKKwlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzh4eF9DUE1fU01DMSwgUFBDX1NZU19GVU5DX1VBUlQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMyCisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fU01DMik7CisJcHBjX3N5c19kZXZpY2Vfc2V0ZnVuYyhNUEM4eHhfQ1BNX1NNQzIsIFBQQ19TWVNfRlVOQ19VQVJUKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG1wYzg4NWFkc19pbml0KTsKKworLyoKKyAgIFRvIHByZXZlbnQgY29uZnVzaW9uLCBjb25zb2xlIHNlbGVjdGlvbiBpcyBncm9zczoKKyAgIGJ5IDAgYXNzdW1lZCBTTUMxIGFuZCBieSAxIGFzc3VtZWQgU01DMgorICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBlYXJseV91YXJ0X2dldF9wZGV2KGludCBpbmRleCkKK3sKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBpbmZvOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSogcGRldiA9IE5VTEw7CisJaWYoaW5kZXgpIHsgLyphc3N1bWUgU01DMiBoZXJlKi8KKwkJcGRldiA9ICZwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDOHh4X0NQTV9TTUMyXTsKKwkJcGluZm8gPSAmbXBjODg1X3VhcnRfcGRhdGFbMV07CisJfSBlbHNlIHsgLypvdmVyIFNNQzEqLworCQlwZGV2ID0gJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEM4eHhfQ1BNX1NNQzFdOworCQlwaW5mbyA9ICZtcGM4ODVfdWFydF9wZGF0YVswXTsKKwl9CisKKwlwaW5mby0+dWFydF9jbGsgPSBiZC0+YmlfaW50ZnJlcTsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBpbmZvOworCXBwY19zeXNfZml4dXBfbWVtX3Jlc291cmNlKHBkZXYsIElNQVBfQUREUik7CisJcmV0dXJuIE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHMuYwppbmRleCAzMzY1ZmQ3Li43ZmMyZTAyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BxMmFkcy5jCkBAIC0xNCwxMSArMTQsNDAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAorI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tcGM4MjYwLmg+CisjaW5jbHVkZSA8YXNtL2NwbTIuaD4KKyNpbmNsdWRlIDxhc20vaW1tYXBfY3BtMi5oPgogCiB2b2lkIF9faW5pdAogbTgyeHhfYm9hcmRfc2V0dXAodm9pZCkKIHsKKwljcG0yX21hcF90KiBpbW1hcCA9IGlvcmVtYXAoQ1BNX01BUF9BRERSLCBzaXplb2YoY3BtMl9tYXBfdCkpOworCXUzMiAqYmNzciA9IGlvcmVtYXAoQkNTUl9BRERSKzQsIHNpemVvZih1MzIpKTsKKwogCS8qIEVuYWJsZSB0aGUgMm5kIFVBUlQgcG9ydCAqLwotCSoodm9sYXRpbGUgdWludCAqKShCQ1NSX0FERFIgKyA0KSAmPSB+QkNTUjFfUlMyMzJfRU4yOworCWNscmJpdHMzMihiY3NyLCBCQ1NSMV9SUzIzMl9FTjIpOworCisjaWZkZWYgQ09ORklHX1NFUklBTF9DUE1fU0NDMQorCWNscmJpdHMzMigodTMyKikmaW1tYXAtPmltX3NjY1swXS5zY2Nfc2NjbSwgVUFSVF9TQ0NNX1RYIHwgVUFSVF9TQ0NNX1JYKTsKKwljbHJiaXRzMzIoKHUzMiopJmltbWFwLT5pbV9zY2NbMF0uc2NjX2dzbXJsLCBTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NDQzIKKwljbHJiaXRzMzIoKHUzMiopJmltbWFwLT5pbV9zY2NbMV0uc2NjX3NjY20sIFVBUlRfU0NDTV9UWCB8IFVBUlRfU0NDTV9SWCk7CisJY2xyYml0czMyKCh1MzIqKSZpbW1hcC0+aW1fc2NjWzFdLnNjY19nc21ybCwgU0NDX0dTTVJMX0VOUiB8IFNDQ19HU01STF9FTlQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzCisJY2xyYml0czMyKCh1MzIqKSZpbW1hcC0+aW1fc2NjWzJdLnNjY19zY2NtLCBVQVJUX1NDQ01fVFggfCBVQVJUX1NDQ01fUlgpOworCWNscmJpdHMzMigodTMyKikmaW1tYXAtPmltX3NjY1syXS5zY2NfZ3NtcmwsIFNDQ19HU01STF9FTlIgfCBTQ0NfR1NNUkxfRU5UKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NFUklBTF9DUE1fU0NDNAorCWNscmJpdHMzMigodTMyKikmaW1tYXAtPmltX3NjY1szXS5zY2Nfc2NjbSwgVUFSVF9TQ0NNX1RYIHwgVUFSVF9TQ0NNX1JYKTsKKwljbHJiaXRzMzIoKHUzMiopJmltbWFwLT5pbV9zY2NbM10uc2NjX2dzbXJsLCBTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCk7CisjZW5kaWYKKworCWlvdW5tYXAoYmNzcik7CisJaW91bm1hcChpbW1hcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmMgYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmMKaW5kZXggYTdkZDU1Zi4uZjZjYzE2OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBneF9jb21tb24uYwpAQCAtMiw3ICsyLDcgQEAKICAqIFBQQzQ0MEdYIHN5c3RlbSBsaWJyYXJ5CiAgKgogICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IFp1bHR5cyBUZWNobm9sb2dpZXMKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDYgWnVsdHlzIFRlY2hub2xvZ2llcwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0yODIsMyArMjgyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgX19pbml0IGlibTQ0MGd4X3BsYXRmb3JtX2luaXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nIHI2LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJLyogRXJyYXR1bSA0NDBfNDMgd29ya2Fyb3VuZCwgZGlzYWJsZSBMMSBjYWNoZSBwYXJpdHkgY2hlY2tpbmcgKi8KKwlpZiAoIXN0cmNtcChjdXJfY3B1X3NwZWMtPmNwdV9uYW1lLCAiNDQwR1ggUmV2LiBDIikgfHwKKwkgICAgIXN0cmNtcChjdXJfY3B1X3NwZWMtPmNwdV9uYW1lLCAiNDQwR1ggUmV2LiBGIikpCisJCW10c3ByKFNQUk5fQ0NSMSwgbWZzcHIoU1BSTl9DQ1IxKSB8IENDUjFfRFBDKTsKKworCWlibTQ0eF9wbGF0Zm9ybV9pbml0KHIzLCByNCwgcjUsIHI2LCByNyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmggYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmgKaW5kZXggYTJhYjlmYS4uYTAzZWM2MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBneF9jb21tb24uaApAQCAtMjksNiArMjksMTAgQEAKIHZvaWQgaWJtNDQwZ3hfZ2V0X2Nsb2NrcyhzdHJ1Y3QgaWJtNDR4X2Nsb2NrcyosIHVuc2lnbmVkIGludCBzeXNfY2xrLAogCXVuc2lnbmVkIGludCBzZXJfY2xrKSBfX2luaXQ7CiAKKy8qIGNvbW1vbiA0NDBHWCBwbGF0Zm9ybSBpbml0ICovCit2b2lkIGlibTQ0MGd4X3BsYXRmb3JtX2luaXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3KSBfX2luaXQ7CisKIC8qIEVuYWJsZSBMMiBjYWNoZSAqLwogdm9pZCBpYm00NDBneF9sMmNfZW5hYmxlKHZvaWQpIF9faW5pdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X2RldmljZXMuYwppbmRleCBiZDQxZWQ4Li42ZjUzNjM4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X2RldmljZXMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X2RldmljZXMuYwpAQCAtMTcwLDEyICsxNzAsMTggQEAKIAlbTVBDOHh4X0NQTV9TTUMxXSA9IHsKIAkJLm5hbWUgPSAiZnNsLWNwbS1zbWMiLAogCQkuaWQJPSAxLAotCQkubnVtX3Jlc291cmNlcwk9IDIsCisJCS5udW1fcmVzb3VyY2VzCT0gMywKIAkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CiAJCQl7CiAJCQkJLm5hbWUJPSAicmVncyIsCi0JCQkJLnN0YXJ0CT0gMHhhODIsCi0JCQkJLmVuZAk9IDB4YTkxLAorCQkJCS5zdGFydAk9IDB4YTgwLAorCQkJCS5lbmQJPSAweGE4ZiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAicHJhbSIsCisJCQkJLnN0YXJ0CT0gMHgzZTgwLAorCQkJCS5lbmQJPSAweDNlYmYsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJCQl9LAogCQkJewpAQCAtMTg5LDE1ICsxOTUsMjIgQEAKIAlbTVBDOHh4X0NQTV9TTUMyXSA9IHsKIAkJLm5hbWUgPSAiZnNsLWNwbS1zbWMiLAogCQkuaWQJPSAyLAotCQkubnVtX3Jlc291cmNlcwk9IDIsCisJCS5udW1fcmVzb3VyY2VzCT0gMywKIAkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CiAJCQl7CiAJCQkJLm5hbWUJPSAicmVncyIsCi0JCQkJLnN0YXJ0CT0gMHhhOTIsCi0JCQkJLmVuZAk9IDB4YWExLAorCQkJCS5zdGFydAk9IDB4YTkwLAorCQkJCS5lbmQJPSAweGE5ZiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7CisgCQkJCS5uYW1lCT0gInByYW0iLAorIAkJCQkuc3RhcnQJPSAweDNmODAsCisgCQkJCS5lbmQJPSAweDNmYmYsCisgCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCisJCQl9LAorCQkJewogCQkJCS5uYW1lCT0gImludGVycnVwdCIsCiAJCQkJLnN0YXJ0CT0gTVBDOHh4X0lOVF9TTUMyLAogCQkJCS5lbmQJPSBNUEM4eHhfSU5UX1NNQzIsCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjX3N5cy5jIGIvYXJjaC9wcGMvc3lzbGliL3BwY19zeXMuYwppbmRleCA2MGM3MjRlLi4yZDQ4MDE4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjX3N5cy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGNfc3lzLmMKQEAgLTEwOSw5ICsxMDksMTEgQEAKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgcGRldi0+bnVtX3Jlc291cmNlczsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKLQkJaWYgKChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSA9PSBJT1JFU09VUkNFX01FTSkgeworCQlpZiAoKChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSA9PSBJT1JFU09VUkNFX01FTSkgJiYgCisJCQkoKHItPmZsYWdzICYgUFBDX1NZU19JT1JFU09VUkNFX0ZJWFVQUEVEKSAhPSBQUENfU1lTX0lPUkVTT1VSQ0VfRklYVVBQRUQpKSB7CiAJCQlyLT5zdGFydCArPSBwYWRkcjsKIAkJCXItPmVuZCArPSBwYWRkcjsKKwkJCXItPmZsYWdzIHw9IFBQQ19TWVNfSU9SRVNPVVJDRV9GSVhVUFBFRDsKIAkJfQogCX0KIH0KQEAgLTE1NiwxMiArMTU4LDEzIEBACiAJd2hpbGUgKG1hcC0+YnVzX2lkICE9IE5VTEwpIHsKIAkJaWR4ID0gLTE7CiAJCXMgPSBzdHJyY2hyKGRldi0+YnVzX2lkLCAnLicpOwotCQlpZiAocyAhPSBOVUxMKQorCQlpZiAocyAhPSBOVUxMKSB7CiAJCQlpZHggPSAoaW50KXNpbXBsZV9zdHJ0b2wocyArIDEsIE5VTEwsIDEwKTsKLQkJZWxzZQorCQkJbGVuID0gcyAtIGRldi0+YnVzX2lkOworCQl9IGVsc2UgewogCQkJcyA9IGRldi0+YnVzX2lkOwotCi0JCWxlbiA9IHMgLSBkZXYtPmJ1c19pZDsKKwkJCWxlbiA9IHN0cmxlbihkZXYtPmJ1c19pZCk7CisJCX0KIAogCQlpZiAoIXN0cm5jbXAoZGV2LT5idXNfaWQsIG1hcC0+YnVzX2lkLCBsZW4pKSB7CiAJCQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jIGIvYXJjaC9wcGMvc3lzbGliL3BxMl9kZXZpY2VzLmMKaW5kZXggMDYzNmFlZC4uODY5MmQwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCkBAIC0xMjEsMTMgKzEyMSwxMyBAQAogCQkubnVtX3Jlc291cmNlcwkgPSAzLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKLQkJCQkubmFtZQk9ICJzY2NfbWVtIiwKKwkJCQkubmFtZQk9ICJyZWdzIiwKIAkJCQkuc3RhcnQJPSAweDExQTAwLAogCQkJCS5lbmQJPSAweDExQTFGLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCQkJfSwKIAkJCXsKLQkJCQkubmFtZQk9ICJzY2NfcHJhbSIsCisJCQkJLm5hbWUJPSAicHJhbSIsCiAJCQkJLnN0YXJ0CT0gMHg4MDAwLAogCQkJCS5lbmQJPSAweDgwZmYsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogCQkubnVtX3Jlc291cmNlcwkgPSAzLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKLQkJCQkubmFtZQk9ICJzY2NfbWVtIiwKKwkJCQkubmFtZQk9ICJyZWdzIiwKIAkJCQkuc3RhcnQJPSAweDExQTIwLAogCQkJCS5lbmQJPSAweDExQTNGLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCQkJfSwKIAkJCXsKLQkJCQkubmFtZQk9ICJzY2NfcHJhbSIsCisJCQkJLm5hbWUJPSAicHJhbSIsCiAJCQkJLnN0YXJ0CT0gMHg4MTAwLAogCQkJCS5lbmQJPSAweDgxZmYsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCkBAIC0xNjksMTMgKzE2OSwxMyBAQAogCQkubnVtX3Jlc291cmNlcwkgPSAzLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKLQkJCQkubmFtZSAJPSAic2NjX21lbSIsCisJCQkJLm5hbWUgCT0gInJlZ3MiLAogCQkJCS5zdGFydAk9IDB4MTFBNDAsCiAJCQkJLmVuZAk9IDB4MTFBNUYsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJCQl9LAogCQkJewotCQkJCS5uYW1lCT0gInNjY19wcmFtIiwKKwkJCQkubmFtZQk9ICJwcmFtIiwKIAkJCQkuc3RhcnQJPSAweDgyMDAsCiAJCQkJLmVuZAk9IDB4ODJmZiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKQEAgLTE5MywxMyArMTkzLDEzIEBACiAJCS5udW1fcmVzb3VyY2VzCSA9IDMsCiAJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgewogCQkJewotCQkJCS5uYW1lCT0gInNjY19tZW0iLAorCQkJCS5uYW1lCT0gInJlZ3MiLAogCQkJCS5zdGFydAk9IDB4MTFBNjAsCiAJCQkJLmVuZAk9IDB4MTFBN0YsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJCQl9LAogCQkJewotCQkJCS5uYW1lCT0gInNjY19wcmFtIiwKKwkJCQkubmFtZQk9ICJwcmFtIiwKIAkJCQkuc3RhcnQJPSAweDgzMDAsCiAJCQkJLmVuZAk9IDB4ODNmZiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcTJfc3lzLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHEyX3N5cy5jCmluZGV4IDc1ZTY0ZjEuLmZlZTg5NDggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcTJfc3lzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYwpAQCAtMTEzLDEzICsxMTMsMTMgQEAKIAkJLnBwY19zeXNfbmFtZQk9ICI4MjQ4IiwKIAkJLm1hc2sJCT0gMHgwMDAwZmYwMCwKIAkJLnZhbHVlCQk9IDB4MDAwMDBjMDAsCi0JCS5udW1fZGV2aWNlcwk9IDExLAorCQkubnVtX2RldmljZXMJPSAxMiwKIAkJLmRldmljZV9saXN0ID0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgyeHhfQ1BNX0ZDQzEsIE1QQzgyeHhfQ1BNX0ZDQzIsIE1QQzgyeHhfQ1BNX1NDQzEsCi0JCQlNUEM4Mnh4X0NQTV9TQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MzLCBNUEM4Mnh4X0NQTV9TTUMxLAotCQkJTVBDODJ4eF9DUE1fU01DMiwgTVBDODJ4eF9DUE1fU1BJLCBNUEM4Mnh4X0NQTV9JMkMsCi0JCQlNUEM4Mnh4X0NQTV9VU0IsIE1QQzgyeHhfU0VDMSwKKwkJCU1QQzgyeHhfQ1BNX1NDQzIsIE1QQzgyeHhfQ1BNX1NDQzMsIE1QQzgyeHhfQ1BNX1NDQzQsCisJCQlNUEM4Mnh4X0NQTV9TTUMxLCBNUEM4Mnh4X0NQTV9TTUMyLCBNUEM4Mnh4X0NQTV9TUEksCisJCQlNUEM4Mnh4X0NQTV9JMkMsIE1QQzgyeHhfQ1BNX1VTQiwgTVBDODJ4eF9TRUMxLAogCQl9LAogCX0sCiAJewpAQCAtMTM5LDEzICsxMzksMTMgQEAKIAkJLnBwY19zeXNfbmFtZQk9ICI4MjcyIiwKIAkJLm1hc2sJCT0gMHgwMDAwZmYwMCwKIAkJLnZhbHVlCQk9IDB4MDAwMDBjMDAsCi0JCS5udW1fZGV2aWNlcwk9IDExLAorCQkubnVtX2RldmljZXMJPSAxMiwKIAkJLmRldmljZV9saXN0ID0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgyeHhfQ1BNX0ZDQzEsIE1QQzgyeHhfQ1BNX0ZDQzIsIE1QQzgyeHhfQ1BNX1NDQzEsCi0JCQlNUEM4Mnh4X0NQTV9TQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MzLCBNUEM4Mnh4X0NQTV9TTUMxLAotCQkJTVBDODJ4eF9DUE1fU01DMiwgTVBDODJ4eF9DUE1fU1BJLCBNUEM4Mnh4X0NQTV9JMkMsCi0JCQlNUEM4Mnh4X0NQTV9VU0IsIE1QQzgyeHhfU0VDMSwKKwkJCU1QQzgyeHhfQ1BNX1NDQzIsIE1QQzgyeHhfQ1BNX1NDQzMsIE1QQzgyeHhfQ1BNX1NDQzQsCisJCQlNUEM4Mnh4X0NQTV9TTUMxLCBNUEM4Mnh4X0NQTV9TTUMyLCBNUEM4Mnh4X0NQTV9TUEksCisJCQlNUEM4Mnh4X0NQTV9JMkMsIE1QQzgyeHhfQ1BNX1VTQiwgTVBDODJ4eF9TRUMxLAogCQl9LAogCX0sCiAJLyogYmVsb3cgaXMgYSBsaXN0IG9mIHRoZSA4MjgwIGZhbWlseSBvZiBwcm9jZXNzb3JzICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvTWFrZWZpbGUgYi9hcmNoL3MzOTAvTWFrZWZpbGUKaW5kZXggNmM2YjE5Ny4uN2JiMTZmYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9NYWtlZmlsZQpAQCAtNjcsNyArNjcsNiBAQAogZW5kaWYKIAogQ0ZMQUdTCQkrPSAtbWJhY2tjaGFpbiAtbXNvZnQtZmxvYXQgJChjZmxhZ3MteSkKLUNGTEFHUwkJKz0gJChjYWxsIGNjLW9wdGlvbiwtZmlubGluZS1saW1pdD0xMDAwMCkKIENGTEFHUyAJCSs9IC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1Xbm8tc2lnbi1jb21wYXJlIAogQUZMQUdTCQkrPSAkKGFmbGFncy15KQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwppbmRleCA1NGQzNWMxLi45YTIyNDM0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCisrKyBiL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKQEAgLTY1Miw3ICs2NTIsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19kZXZpbml0ZGF0YSBhcHBsZGF0YV9uYiA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYXBwbGRhdGFfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBhcHBsZGF0YV9jcHVfbm90aWZ5LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggZjhkMGNkNS4uZjRkZmMxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDEwICsxLDExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCi0jIFdlZCBGZWIgIDggMTA6NDQ6MzkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMQorIyBNb24gQXByICAzIDE0OjM0OjE1IDIwMDYKICMKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19TMzkwPXkKIApAQCAtMzAsOCArMzEsOCBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNDUsMTAgKzQ2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNjAsNyArNTcsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTY5LDcgKzY1LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05MSwxNyArODcsMjAgQEAKICMKICMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCiAjCi0jIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfNjRCSVQ9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0zMgogQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19NQVRIRU1VPXkKK0NPTkZJR19ERUZBVUxUX01JR1JBVElPTl9DT1NUPTEwMDAwMDAKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKK0NPTkZJR19CSU5GTVRfRUxGMzI9eQogCiAjCiAjIENvZGUgZ2VuZXJhdGlvbiBvcHRpb25zCiAjCi1DT05GSUdfTUFSQ0hfRzU9eQotIyBDT05GSUdfTUFSQ0hfWjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJDSF9HNSBpcyBub3Qgc2V0CitDT05GSUdfTUFSQ0hfWjkwMD15CiAjIENPTkZJR19NQVJDSF9aOTkwIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLX1NUQUNLPXkKICMgQ09ORklHX1NNQUxMX1NUQUNLIGlzIG5vdCBzZXQKQEAgLTE0Myw3ICsxNDIsNyBAQAogIyBDT05GSUdfQVBQTERBVEFfQkFTRSBpcyBub3Qgc2V0CiBDT05GSUdfTk9fSURMRV9IWj15CiBDT05GSUdfTk9fSURMRV9IWl9JTklUPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMTczLDYgKzE3Miw3IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0xODAsOSArMTgwLDExIEBACiBDT05GSUdfVENQX0NPTkdfQklDPXkKIENPTkZJR19JUFY2PXkKICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC0yNzYsNiArMjc4LDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CkBAIC0zNDAsOCArMzQ3LDcgQEAKIENPTkZJR19EQVNEX0VDS0Q9eQogQ09ORklHX0RBU0RfRkJBPXkKIENPTkZJR19EQVNEX0RJQUc9eQotQ09ORklHX0RBU0RfRUVSPW0KLSMgQ09ORklHX0RBU0RfQ01CIGlzIG5vdCBzZXQKK0NPTkZJR19EQVNEX0VFUj15CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCkBAIC0zNTQsNiArMzYwLDcgQEAKIENPTkZJR19NRF9SQUlEMT1tCiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ1PW0KKyMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAogIyBDT05GSUdfTURfUkFJRDYgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD1tCiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldApAQCAtNDA0LDYgKzQxMSw3IEBACiAjIFMvMzkwIHRhcGUgaGFyZHdhcmUgc3VwcG9ydAogIwogQ09ORklHX1MzOTBfVEFQRV8zNFhYPW0KKyMgQ09ORklHX1MzOTBfVEFQRV8zNTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNTE9HUkRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNQ1AgaXMgbm90IHNldAogIyBDT05GSUdfTU9OUkVBREVSIGlzIG5vdCBzZXQKQEAgLTUyOSw3ICs1MzcsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOSwxNCArNjI2LDE1IEBACiAjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwppbmRleCA1MjkxYjVmLi5iNGM4MTVkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwpAQCAtNDMwLDcgKzQzMCw3IEBACiAKIAkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KIAlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgewotCQlpZiAoISBvbl9zaWdfc3RhY2soc3ApKQorCQlpZiAoISBzYXNfc3NfZmxhZ3Moc3ApKQogCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCAxOTlkYTY4Li40ZDUzYjI3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCkBAIC0xNjA4LDMgKzE2MDgsNTMgQEAKIHN5c191bnNoYXJlX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgbG9uZwogCWpnCXN5c191bnNoYXJlCisKKwkuZ2xvYmwgY29tcGF0X3N5c19zZXRfcm9idXN0X2xpc3Rfd3JhcHBlcgorY29tcGF0X3N5c19zZXRfcm9idXN0X2xpc3Rfd3JhcHBlcjoKKwlsbGd0cgklcjIsJXIyCQkJIyBzdHJ1Y3QgY29tcGF0X3JvYnVzdF9saXN0X2hlYWQgKgorCWxsZ2ZyCSVyMywlcjMJCQkjIHNpemVfdAorCWpnCWNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0CisKKwkuZ2xvYmwgY29tcGF0X3N5c19nZXRfcm9idXN0X2xpc3Rfd3JhcHBlcgorY29tcGF0X3N5c19nZXRfcm9idXN0X2xpc3Rfd3JhcHBlcjoKKwlsZ2ZyCSVyMiwlcjIJCQkjIGludAorCWxsZ3RyCSVyMywlcjMJCQkjIGNvbXBhdF91cHRyX3RfdCAqCisJbGxndHIJJXI0LCVyNAkJCSMgY29tcGF0X3NpemVfdCAqCisJamcJY29tcGF0X3N5c19nZXRfcm9idXN0X2xpc3QKKworCS5nbG9ibCBzeXNfc3BsaWNlX3dyYXBwZXIKK3N5c19zcGxpY2Vfd3JhcHBlcjoKKwlsZ2ZyCSVyMiwlcjIJCQkjIGludAorCWxsZ3RyCSVyMywlcjMJCQkjIGxvZmZfdCAqCisJbGdmcgklcjQsJXI0CQkJIyBpbnQKKwlsbGd0cgklcjUsJXI1CQkJIyBsb2ZmX3QgKgorCWxsZ2ZyCSVyNiwlcjYJCQkjIHNpemVfdAorCWxsZ2YJJXIwLDE2NCglcjE1KQkJIyB1bnNpZ25lZCBpbnQKKwlzdGcJJXIwLDE2MCglcjE1KQorCWpnCXN5c19zcGxpY2UKKworCS5nbG9ibAlzeXNfc3luY19maWxlX3JhbmdlX3dyYXBwZXIKK3N5c19zeW5jX2ZpbGVfcmFuZ2Vfd3JhcHBlcjoKKwlsZ2ZyCSVyMiwlcjIJCQkjIGludAorCXNsbGcJJXIzLCVyMywzMgkJIyBnZXQgaGlnaCB3b3JkIG9mIDY0Yml0IGxvZmZfdAorCW9yCSVyMywlcjQJCQkjIGdldCBsb3cgd29yZCBvZiA2NGJpdCBsb2ZmX3QKKwlzbGxnCSVyNCwlcjUsMzIJCSMgZ2V0IGhpZ2ggd29yZCBvZiA2NGJpdCBsb2ZmX3QKKwlvcgklcjQsJXI2CQkJIyBnZXQgbG93IHdvcmQgb2YgNjRiaXQgbG9mZl90CisJbGxnZgklcjUsMTY0KCVyMTUpCQkjIHVuc2lnbmVkIGludAorCWpnCXN5c19zeW5jX2ZpbGVfcmFuZ2UKKworCS5nbG9ibAlzeXNfdGVlX3dyYXBwZXIKK3N5c190ZWVfd3JhcHBlcjoKKwlsZ2ZyCSVyMiwlcjIJCQkjIGludAorCWxnZnIJJXIzLCVyMwkJCSMgaW50CisJbGxnZnIJJXI0LCVyNAkJCSMgc2l6ZV90CisJbGxnZnIJJXI1LCVyNQkJCSMgdW5zaWduZWQgaW50CisJamcJc3lzX3RlZQorCisJLmdsb2JsIGNvbXBhdF9zeXNfdm1zcGxpY2Vfd3JhcHBlcgorY29tcGF0X3N5c192bXNwbGljZV93cmFwcGVyOgorCWxnZnIJJXIyLCVyMgkJCSMgaW50CisJbGxndHIJJXIzLCVyMwkJCSMgY29tcGF0X2lvdmVjICoKKwlsbGdmcgklcjQsJXI0CQkJIyB1bnNpZ25lZCBpbnQKKwlsbGdmcgklcjUsJXI1CQkJIyB1bnNpZ25lZCBpbnQKKwlqZwljb21wYXRfc3lzX3Ztc3BsaWNlCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzN2RmZTMzLi44ZjM2NTA0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKQEAgLTczNCw3ICs3MzQsNyBAQAogc3lzY2FsbF90cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVudHJ5ZXhpdCkKIHsKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkgJiYgZW50cnlleGl0KQotCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgQVVESVRTQ19SRVNVTFQocmVncy0+Z3Byc1syXSksIHJlZ3MtPmdwcnNbMl0pOworCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+Z3Byc1syXSksIHJlZ3MtPmdwcnNbMl0pOwogCiAJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJZ290byBvdXQ7CkBAIC03NjEsOCArNzYxLDcgQEAKIAl9CiAgb3V0OgogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhZW50cnlleGl0KQotCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsIAotCQkJCSAgICB0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCk/QVVESVRfQVJDSF9TMzkwOkFVRElUX0FSQ0hfUzM5MFgsCisJCWF1ZGl0X3N5c2NhbGxfZW50cnkodGVzdF90aHJlYWRfZmxhZyhUSUZfMzFCSVQpP0FVRElUX0FSQ0hfUzM5MDpBVURJVF9BUkNIX1MzOTBYLAogCQkJCSAgICByZWdzLT5ncHJzWzJdLCByZWdzLT5vcmlnX2dwcjIsIHJlZ3MtPmdwcnNbM10sCiAJCQkJICAgIHJlZ3MtPmdwcnNbNF0sIHJlZ3MtPmdwcnNbNV0pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYWUxOTI3ZS4uZDQ4Y2ZjNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCkBAIC0zNTgsOCArMzU4LDkgQEAKIAl9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlZ3MtPmdwcnNbMTRdID0gKHVuc2lnbmVkIGxvbmcpCiAJCQlmcmFtZS0+cmV0Y29kZSB8IFBTV19BRERSX0FNT0RFOwotCQllcnIgfD0gX19wdXRfdXNlcihTMzkwX1NZU0NBTExfT1BDT0RFIHwgX19OUl9ydF9zaWdyZXR1cm4sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2IF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSkpOworCQlpZiAoX19wdXRfdXNlcihTMzkwX1NZU0NBTExfT1BDT0RFIHwgX19OUl9ydF9zaWdyZXR1cm4sCisJCQkgICAgICAgKHUxNiBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUpKSkKKwkJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCX0KIAogCS8qIFNldCB1cCBiYWNrY2hhaW4uICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCAyYjg4NDFmLi4zNDMxMjBjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTgwMSw3ICs4MDEsNyBAQAogICAgICAgICAgKi8KIAlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKIAotICAgICAgICBmb3JfZWFjaF9jcHUoaSkgeworICAgICAgICBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlsb3djb3JlX3B0cltpXSA9IChzdHJ1Y3QgX2xvd2NvcmUgKikKIAkJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxHRlBfRE1BLCAKIAkJCQkJc2l6ZW9mKHZvaWQqKSA9PSA4ID8gMSA6IDApOwpAQCAtODMxLDcgKzgzMSw3IEBACiAjZW5kaWYKIAlzZXRfcHJlZml4KCh1MzIpKHVuc2lnbmVkIGxvbmcpIGxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQogCQlpZiAoY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKIAkJCXNtcF9jcmVhdGVfaWRsZShjcHUpOwogfQpAQCAtODY4LDcgKzg2OCw3IEBACiAJaW50IGNwdTsKIAlpbnQgcmV0OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJcmV0ID0gcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBjcHUpLCBjcHUsIE5VTEwpOwogCQlpZiAocmV0KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidG9wb2xvZ3lfaW5pdDogcmVnaXN0ZXJfY3B1ICVkICIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCAyZjU2NjU0Li45M2JlMWQ1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0zMTIsMyArMzEyLDkgQEAKIFNZU0NBTEwoc3lzX3BzZWxlY3Q2LHN5c19wc2VsZWN0Nixjb21wYXRfc3lzX3BzZWxlY3Q2X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19wcG9sbCxzeXNfcHBvbGwsY29tcGF0X3N5c19wcG9sbF93cmFwcGVyKQogU1lTQ0FMTChzeXNfdW5zaGFyZSxzeXNfdW5zaGFyZSxzeXNfdW5zaGFyZV93cmFwcGVyKQorU1lTQ0FMTChzeXNfc2V0X3JvYnVzdF9saXN0LHN5c19zZXRfcm9idXN0X2xpc3QsY29tcGF0X3N5c19zZXRfcm9idXN0X2xpc3Rfd3JhcHBlcikKK1NZU0NBTEwoc3lzX2dldF9yb2J1c3RfbGlzdCxzeXNfZ2V0X3JvYnVzdF9saXN0LGNvbXBhdF9zeXNfZ2V0X3JvYnVzdF9saXN0X3dyYXBwZXIpCitTWVNDQUxMKHN5c19zcGxpY2Usc3lzX3NwbGljZSxzeXNfc3BsaWNlX3dyYXBwZXIpCitTWVNDQUxMKHN5c19zeW5jX2ZpbGVfcmFuZ2Usc3lzX3N5bmNfZmlsZV9yYW5nZSxzeXNfc3luY19maWxlX3JhbmdlX3dyYXBwZXIpCitTWVNDQUxMKHN5c190ZWUsc3lzX3RlZSxzeXNfdGVlX3dyYXBwZXIpCitTWVNDQUxMKHN5c192bXNwbGljZSxzeXNfdm1zcGxpY2UsY29tcGF0X3N5c192bXNwbGljZV93cmFwcGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwppbmRleCBmZWEwNDNiLi4yYTZjNmVmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtMjQ5LDE4ICsyNDksMTkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgc2VxLCBuZXh0OwogCV9fdTY0IHRpbWVyLCB0b2R2YWw7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWlmIChzeXNjdGxfaHpfdGltZXIgIT0gMCkKIAkJcmV0dXJuOwogCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5vaHpfY3B1X21hc2spOworCWNwdV9zZXQoY3B1LCBub2h6X2NwdV9tYXNrKTsKIAogCS8qCiAJICogTGVhdmUgdGhlIGNsb2NrIGNvbXBhcmF0b3Igc2V0IHVwIGZvciB0aGUgbmV4dCB0aW1lcgogCSAqIHRpY2sgaWYgZWl0aGVyIHJjdSBvciBhIHNvZnRpcnEgaXMgcGVuZGluZy4KIAkgKi8KLQlpZiAocmN1X3BlbmRpbmcoc21wX3Byb2Nlc3Nvcl9pZCgpKSB8fCBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkgewotCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBub2h6X2NwdV9tYXNrKTsKKwlpZiAocmN1X25lZWRzX2NwdShjcHUpIHx8IGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKSB7CisJCWNwdV9jbGVhcihjcHUsIG5vaHpfY3B1X21hc2spOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNzEsNyArMjcyLDcgQEAKIAluZXh0ID0gbmV4dF90aW1lcl9pbnRlcnJ1cHQoKTsKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCQl0aW1lciA9IChfX3U2NCkobmV4dCAtIGppZmZpZXMpICsgamlmZmllc182NDsKKwkJdGltZXIgPSAoKF9fdTY0KSBuZXh0KSAtICgoX191NjQpIGppZmZpZXMpICsgamlmZmllc182NDsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKIAl0b2R2YWwgPSAtMVVMTDsKIAkvKiBCZSBjYXJlZnVsIGFib3V0IG92ZXJmbG93cy4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5Mjg5ZmFjLi45ZjM0YmI1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01OCw5ICs1OCwxMSBAQAogICAuID0gQUxJR04oNDA5Nik7CiAgIC5kYXRhLnBhZ2VfYWxpZ25lZCA6IHsgKiguZGF0YS5pZHQpIH0KIAotICAuID0gQUxJR04oMzIpOworICAuID0gQUxJR04oMjU2KTsKICAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7ICooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIH0KIAorICAuID0gQUxJR04oMjU2KTsKKyAgLmRhdGEucmVhZF9tb3N0bHkgOiB7ICooLmRhdGEucmVhZF9tb3N0bHkpIH0KICAgX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAKICAgLiA9IEFMSUdOKDgxOTIpOwkJLyogaW5pdF90YXNrICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZXh0bWVtLmMgYi9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKaW5kZXggYTk1NjZiYy4uOWIxMWUzZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2V4dG1lbS5jCisrKyBiL2FyY2gvczM5MC9tbS9leHRtZW0uYwpAQCAtMTkyLDYgKzE5Miw3IEBACiAJZGlhZ19jYyA9IGRjc3NfZGlhZyAoRENTU19TRUdFWFQsIHFpbiwgJmR1bW15LCAmdm1yYyk7CiAKIAlpZiAoZGlhZ19jYyA+IDEpIHsKKwkJUFJJTlRfV0FSTiAoInNlZ21lbnRfdHlwZTogZGlhZyByZXR1cm5lZCBlcnJvciAlbGRcbiIsIHZtcmMpOwogCQlyYyA9IGRjc3NfZGlhZ190cmFuc2xhdGVfcmMgKHZtcmMpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KQEAgLTU1Myw3ICs1NTQsNyBAQAogCWludCBlbmRwZm4gPSAwOwogCWNoYXIgY21kMVsxNjBdOwogCWNoYXIgY21kMls4MF07Ci0JaW50IGk7CisJaW50IGksIHJlc3BvbnNlOwogCiAJaWYgKCFNQUNISU5FX0lTX1ZNKQogCQlyZXR1cm47CkBAIC01NzYsOCArNTc3LDIwIEBACiAJCQlzZWd0eXBlX3N0cmluZ1tzZWctPnJhbmdlW2ldLnN0YXJ0ICYgMHhmZl0pOwogCX0KIAlzcHJpbnRmKGNtZDIsICJTQVZFU0VHICVzIiwgbmFtZSk7Ci0JY3BjbWQoY21kMSwgTlVMTCwgMCwgTlVMTCk7Ci0JY3BjbWQoY21kMiwgTlVMTCwgMCwgTlVMTCk7CisJcmVzcG9uc2UgPSAwOworCWNwY21kKGNtZDEsIE5VTEwsIDAsICZyZXNwb25zZSk7CisJaWYgKHJlc3BvbnNlKSB7CisJCVBSSU5UX0VSUigic2VnbWVudF9zYXZlOiBERUZTRUcgZmFpbGVkIHdpdGggcmVzcG9uc2UgY29kZSAlaVxuIiwKKwkJCSAgcmVzcG9uc2UpOworCQlnb3RvIG91dDsKKwl9CisJY3BjbWQoY21kMiwgTlVMTCwgMCwgJnJlc3BvbnNlKTsKKwlpZiAocmVzcG9uc2UpIHsKKwkJUFJJTlRfRVJSKCJzZWdtZW50X3NhdmU6IFNBVkVTRUcgZmFpbGVkIHdpdGggcmVzcG9uc2UgY29kZSAlaVxuIiwKKwkJCSAgcmVzcG9uc2UpOworCQlnb3RvIG91dDsKKwl9CitvdXQ6CiAJc3Bpbl91bmxvY2soJmRjc3NfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCA1ODU4M2Y0Li4yYmNlY2Y0IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC01MjcsNiArNTI3LDExIEBACiAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zaC9yZWdpc3Rlci1iYW5rcy50eHQ+IGZvciBmdXJ0aGVyCiAJICBpbmZvcm1hdGlvbiBvbiBTUi5SQiBhbmQgcmVnaXN0ZXIgYmFua2luZyBpbiB0aGUga2VybmVsIGluIGdlbmVyYWwuCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjEiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIGVuZG1lbnUKIAogbWVudSAiQm9vdCBvcHRpb25zIgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKaW5kZXggY2Y5NGU4ZS4uODY4ZTY4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCkBAIC0zMCw3ICszMCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCB4IyNfc2V0dXAoY2hhciAqb3B0cykJCVwKIHsJCQkJCQlcCiAJeCMjX2Rpc2FibGVkID0gMTsJCQlcCi0JcmV0dXJuIDA7CQkJCVwKKwlyZXR1cm4gMTsJCQkJXAogfQkJCQkJCVwKIF9fc2V0dXAoIm5vIiBfX3N0cmluZ2lmeSh4KSwgeCMjX3NldHVwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggN2VlNGNhMi4uYmIyMjllZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC00MDEsNyArNDAxLDcgQEAKIHsKIAlpbnQgY3B1X2lkOwogCi0JZm9yX2VhY2hfY3B1KGNwdV9pZCkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1X2lkKQogCQlyZWdpc3Rlcl9jcHUoJmNwdVtjcHVfaWRdLCBjcHVfaWQsIE5VTEwpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYwppbmRleCAxY2Y5NGE2Li5kNWQwMzI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKQEAgLTM3LDcgKzM3LDYgQEAKIEVYUE9SVF9TWU1CT0woaXJxX2Rlc2MpOwogRVhQT1JUX1NZTUJPTChub19pcnFfdHlwZSk7CiAKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jIGIvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jCmluZGV4IGRlMjljNDUuLjZmM2ExYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMKQEAgLTQxLDcgKzQxLDYgQEAKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weSk7CiAKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiAKICNpZmRlZiBDT05GSUdfVlQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKaW5kZXggNDYwZjcyZS4uZjlmZjI5NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKQEAgLTI3NCw2ICsyNzQsMTEgQEAKIAlpZiAobW11X21hcF9kbWFfYXJlYShkbWFfYWRkcnAsIHZhLCByZXMtPnN0YXJ0LCBsZW5fdG90YWwpICE9IDApCiAJCWdvdG8gZXJyX25vaW9tbXU7CiAKKwkvKiBTZXQgdGhlIHJlc291cmNlIG5hbWUsIGlmIGtub3duLiAqLworCWlmIChzZGV2KSB7CisJCXJlcy0+bmFtZSA9IHNkZXYtPnByb21fbmFtZTsKKwl9CisKIAlyZXR1cm4gKHZvaWQgKilyZXMtPnN0YXJ0OwogCiBlcnJfbm9pb21tdToKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNzg3ZDVmMS4uNTk4NjgyZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMKQEAgLTExMyw2ICsxMTMsNyBAQAogCiAJCXN3aXRjaCAoRUxGMzJfUl9UWVBFKHJlbFtpXS5yX2luZm8pKSB7CiAJCWNhc2UgUl9TUEFSQ18zMjoKKwkJY2FzZSBSX1NQQVJDX1VBMzI6CiAJCQlsb2NhdGlvblswXSA9IHYgPj4gMjQ7CiAJCQlsb2NhdGlvblsxXSA9IHYgPj4gMTY7CiAJCQlsb2NhdGlvblsyXSA9IHYgPj4gIDg7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCmluZGV4IDJiZTgxMjEuLjQwYjQyYzggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCkBAIC02OSw2ICs2OSwxNyBAQAogCQkJCQkJICAgICAiY2xvY2stZnJlcXVlbmN5IiwgMCk7CiAJY3B1X2RhdGEoaWQpLnByb21fbm9kZSA9IGNwdV9ub2RlOwogCWNwdV9kYXRhKGlkKS5taWQgPSBjcHVfZ2V0X2h3bWlkKGNwdV9ub2RlKTsKKworCS8qIHRoaXMgaXMgcmVxdWlyZWQgdG8gdHVuZSB0aGUgc2NoZWR1bGVyIGNvcnJlY3RseSAqLworCS8qIGlzIGl0IHBvc3NpYmxlIHRvIGhhdmUgQ1BVcyB3aXRoIGRpZmZlcmVudCBjYWNoZSBzaXplcz8gKi8KKwlpZiAoaWQgPT0gYm9vdF9jcHVfaWQpIHsKKwkJaW50IGNhY2hlX2xpbmUsY2FjaGVfbmxpbmVzOworCQljYWNoZV9saW5lID0gMHgyMDsKKwkJY2FjaGVfbGluZSA9IHByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImVjYWNoZS1saW5lLXNpemUiLCBjYWNoZV9saW5lKTsKKwkJY2FjaGVfbmxpbmVzID0gMHg4MDAwOworCQljYWNoZV9ubGluZXMgPSBwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJlY2FjaGUtbmxpbmVzIiwgY2FjaGVfbmxpbmVzKTsKKwkJbWF4X2NhY2hlX3NpemUgPSBjYWNoZV9saW5lICogY2FjaGVfbmxpbmVzOworCX0KIAlpZiAoY3B1X2RhdGEoaWQpLm1pZCA8IDApCiAJCXBhbmljKCJObyBNSUQgZm91bmQgZm9yIENQVSVkIGF0IG5vZGUgMHglMDhkIiwgaWQsIGNwdV9ub2RlKTsKIH0KQEAgLTI0NCw3ICsyNTUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9mX3NldHVwX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWxvYWRfcHJvZmlsZV9pcnEoaSwgbHZsMTRfcmVzb2x1dGlvbiAvIG11bHRpcGxpZXIpOwogCQlwcm9mX211bHRpcGxpZXIoaSkgPSBtdWx0aXBsaWVyOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCmluZGV4IDJjMjFkNzkuLjRiMzc2ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYwpAQCAtMjUxLDIwICsyNTEsOSBAQAogRVhQT1JUX1NZTUJPTChfX3Byb21fZ2V0c2libGluZyk7CiAKIC8qIHNwYXJjIGxpYnJhcnkgc3ltYm9scyAqLwotRVhQT1JUX1NZTUJPTChtZW1jaHIpOwogRVhQT1JUX1NZTUJPTChtZW1zY2FuKTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cmNweSk7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jcHkpOwotRVhQT1JUX1NZTUJPTChzdHJjYXQpOwotRVhQT1JUX1NZTUJPTChzdHJuY2F0KTsKLUVYUE9SVF9TWU1CT0woc3RyY21wKTsKIEVYUE9SVF9TWU1CT0woc3RybmNtcCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNocik7Ci1FWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKLUVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0wocGFnZV9rZXJuZWwpOwogCiAvKiBTcGVjaWFsIGludGVybmFsIHZlcnNpb25zIG9mIGxpYnJhcnkgZnVuY3Rpb25zLiAqLwpAQCAtMzE4LDYgKzMwNywzIEBACiAKIC8qIFN1biBQb3dlciBNYW5hZ2VtZW50IElkbGUgSGFuZGxlciAqLwogRVhQT1JUX1NZTUJPTChwbV9pZGxlKTsKLQotLyogQmluZm10X21pc2MgbmVlZHMgdGhpcyAqLwotRVhQT1JUX1NZTUJPTChzeXNfY2xvc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCmluZGV4IDc2OGRlNjQuLjI4NTY1NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMKQEAgLTIzLDcgKzIzLDcgQEAKIC8qMTAqLyAgLmxvbmcgc3lzX3VubGluaywgc3Vub3NfZXhlY3YsIHN5c19jaGRpciwgc3lzX2Nob3duMTYsIHN5c19ta25vZAogLyoxNSovCS5sb25nIHN5c19jaG1vZCwgc3lzX2xjaG93bjE2LCBzcGFyY19icmssIHN5c19uaXNfc3lzY2FsbCwgc3lzX2xzZWVrCiAvKjIwKi8JLmxvbmcgc3lzX2dldHBpZCwgc3lzX2NhcGdldCwgc3lzX2NhcHNldCwgc3lzX3NldHVpZDE2LCBzeXNfZ2V0dWlkMTYKLS8qMjUqLwkubG9uZyBzeXNfdGltZSwgc3lzX3B0cmFjZSwgc3lzX2FsYXJtLCBzeXNfc2lnYWx0c3RhY2ssIHN5c19wYXVzZQorLyoyNSovCS5sb25nIHN5c192bXNwbGljZSwgc3lzX3B0cmFjZSwgc3lzX2FsYXJtLCBzeXNfc2lnYWx0c3RhY2ssIHN5c19wYXVzZQogLyozMCovCS5sb25nIHN5c191dGltZSwgc3lzX2xjaG93biwgc3lzX2ZjaG93biwgc3lzX2FjY2Vzcywgc3lzX25pY2UKIC8qMzUqLwkubG9uZyBzeXNfY2hvd24sIHN5c19zeW5jLCBzeXNfa2lsbCwgc3lzX25ld3N0YXQsIHN5c19zZW5kZmlsZQogLyo0MCovCS5sb25nIHN5c19uZXdsc3RhdCwgc3lzX2R1cCwgc3lzX3BpcGUsIHN5c190aW1lcywgc3lzX2dldHVpZApAQCAtNjQsMjEgKzY0LDIyIEBACiAvKjIxNSovCS5sb25nIHN5c19pcGMsIHN5c19zaWdyZXR1cm4sIHN5c19jbG9uZSwgc3lzX2lvcHJpb19nZXQsIHN5c19hZGp0aW1leAogLyoyMjAqLwkubG9uZyBzeXNfc2lncHJvY21hc2ssIHN5c19uaV9zeXNjYWxsLCBzeXNfZGVsZXRlX21vZHVsZSwgc3lzX25pX3N5c2NhbGwsIHN5c19nZXRwZ2lkCiAvKjIyNSovCS5sb25nIHN5c19iZGZsdXNoLCBzeXNfc3lzZnMsIHN5c19uaXNfc3lzY2FsbCwgc3lzX3NldGZzdWlkMTYsIHN5c19zZXRmc2dpZDE2Ci0vKjIzMCovCS5sb25nIHN5c19zZWxlY3QsIHN5c190aW1lLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zdGltZSwgc3lzX3N0YXRmczY0CisvKjIzMCovCS5sb25nIHN5c19zZWxlY3QsIHN5c190aW1lLCBzeXNfc3BsaWNlLCBzeXNfc3RpbWUsIHN5c19zdGF0ZnM2NAogCQkJCQkgIC8qICJXZSBhcmUgdGhlIEtuaWdodHMgb2YgdGhlIEZvcmVzdCBvZiBOaSEhIiAqLwogLyoyMzUqLwkubG9uZyBzeXNfZnN0YXRmczY0LCBzeXNfbGxzZWVrLCBzeXNfbWxvY2ssIHN5c19tdW5sb2NrLCBzeXNfbWxvY2thbGwKIC8qMjQwKi8JLmxvbmcgc3lzX211bmxvY2thbGwsIHN5c19zY2hlZF9zZXRwYXJhbSwgc3lzX3NjaGVkX2dldHBhcmFtLCBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyLCBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyCiAvKjI0NSovCS5sb25nIHN5c19zY2hlZF95aWVsZCwgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluLCBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsLCBzeXNfbmFub3NsZWVwCiAvKjI1MCovCS5sb25nIHNwYXJjX21yZW1hcCwgc3lzX3N5c2N0bCwgc3lzX2dldHNpZCwgc3lzX2ZkYXRhc3luYywgc3lzX25mc3NlcnZjdGwKLS8qMjU1Ki8JLmxvbmcgc3lzX25pc19zeXNjYWxsLCBzeXNfY2xvY2tfc2V0dGltZSwgc3lzX2Nsb2NrX2dldHRpbWUsIHN5c19jbG9ja19nZXRyZXMsIHN5c19jbG9ja19uYW5vc2xlZXAKKy8qMjU1Ki8JLmxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZSwgc3lzX2Nsb2NrX3NldHRpbWUsIHN5c19jbG9ja19nZXR0aW1lLCBzeXNfY2xvY2tfZ2V0cmVzLCBzeXNfY2xvY2tfbmFub3NsZWVwCiAvKjI2MCovCS5sb25nIHN5c19zY2hlZF9nZXRhZmZpbml0eSwgc3lzX3NjaGVkX3NldGFmZmluaXR5LCBzeXNfdGltZXJfc2V0dGltZSwgc3lzX3RpbWVyX2dldHRpbWUsIHN5c190aW1lcl9nZXRvdmVycnVuCiAvKjI2NSovCS5sb25nIHN5c190aW1lcl9kZWxldGUsIHN5c190aW1lcl9jcmVhdGUsIHN5c19uaXNfc3lzY2FsbCwgc3lzX2lvX3NldHVwLCBzeXNfaW9fZGVzdHJveQogLyoyNzAqLwkubG9uZyBzeXNfaW9fc3VibWl0LCBzeXNfaW9fY2FuY2VsLCBzeXNfaW9fZ2V0ZXZlbnRzLCBzeXNfbXFfb3Blbiwgc3lzX21xX3VubGluawogLyoyNzUqLwkubG9uZyBzeXNfbXFfdGltZWRzZW5kLCBzeXNfbXFfdGltZWRyZWNlaXZlLCBzeXNfbXFfbm90aWZ5LCBzeXNfbXFfZ2V0c2V0YXR0ciwgc3lzX3dhaXRpZAotLyoyODAqLwkubG9uZyBzeXNfbmlfc3lzY2FsbCwgc3lzX2FkZF9rZXksIHN5c19yZXF1ZXN0X2tleSwgc3lzX2tleWN0bCwgc3lzX29wZW5hdAorLyoyODAqLwkubG9uZyBzeXNfdGVlLCBzeXNfYWRkX2tleSwgc3lzX3JlcXVlc3Rfa2V5LCBzeXNfa2V5Y3RsLCBzeXNfb3BlbmF0CiAvKjI4NSovCS5sb25nIHN5c19ta2RpcmF0LCBzeXNfbWtub2RhdCwgc3lzX2ZjaG93bmF0LCBzeXNfZnV0aW1lc2F0LCBzeXNfZnN0YXRhdDY0CiAvKjI5MCovCS5sb25nIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAogLyoyOTUqLwkubG9uZyBzeXNfZmNobW9kYXQsIHN5c19mYWNjZXNzYXQsIHN5c19wc2VsZWN0Niwgc3lzX3Bwb2xsLCBzeXNfdW5zaGFyZQorLyozMDAqLwkubG9uZyBzeXNfc2V0X3JvYnVzdF9saXN0LCBzeXNfZ2V0X3JvYnVzdF9saXN0CiAKICNpZmRlZiBDT05GSUdfU1VOT1NfRU1VTAogCS8qIE5vdyB0aGUgU3VuT1Mgc3lzY2FsbCB0YWJsZS4gKi8KQEAgLTE5MCw2ICsxOTEsNiBAQAogLyoyOTAqLwkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCiAJLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwogCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cworCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlIGIvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZQppbmRleCBmODRhOWE2Li44MTM2OTg3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiBvYmoteSAgICA6PSBtYXRoLm8KIAogRVhUUkFfQUZMQUdTIDo9IC1hbnNpCi1FWFRSQV9DRkxBR1MgPSAtSS4gLUkkKFRPUERJUikvaW5jbHVkZS9tYXRoLWVtdSAtdworRVhUUkFfQ0ZMQUdTID0gLUkuIC1JaW5jbHVkZS9tYXRoLWVtdSAtdwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L0tjb25maWcgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwppbmRleCBkMWUyZmM1Li40M2E2NmY1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwpAQCAtMTg3LDEzICsxODcsMTYgQEAKIAlib29sICI1MTJLIgogCiBjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLCi0JZGVwZW5kcyBvbiAhU1BBUkM2NF9QQUdFX1NJWkVfNE1CICYmICFTUEFSQzY0X1BBR0VfU0laRV81MTJLQiAmJiAhU1BBUkM2NF9QQUdFX1NJWkVfNjRLCisJZGVwZW5kcyBvbiAhU1BBUkM2NF9QQUdFX1NJWkVfNE1CICYmICFTUEFSQzY0X1BBR0VfU0laRV81MTJLQiAmJiAhU1BBUkM2NF9QQUdFX1NJWkVfNjRLQgogCWJvb2wgIjY0SyIKIAogZW5kY2hvaWNlCiAKIGVuZG1lbnUKIAorY29uZmlnIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAorCWRlZl9ib29sIHkKKwogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZyBiL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKaW5kZXggOTAwZmIwYi4uZjA5YTcwYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2Ci0jIFN1biBNYXIgMjYgMTQ6NTg6MTEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMworIyBGcmkgTWF5IDEyIDEyOjQzOjQ5IDIwMDYKICMKIENPTkZJR19TUEFSQz15CiBDT05GSUdfU1BBUkM2ND15CkBAIC0xMTQsNiArMTE0LDcgQEAKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUI9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEsgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKIENPTkZJR19MQVJHRV9BTExPQ1M9eQpAQCAtMTgwLDYgKzE4MSw3IEBACiBDT05GSUdfSU5FVF9BSD15CiBDT05GSUdfSU5FVF9FU1A9eQogQ09ORklHX0lORVRfSVBDT01QPXkKK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPXkKIENPTkZJR19JTkVUX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTIwMyw2ICsyMDUsNyBAQAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKQEAgLTMwOCw3ICszMTEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfVUI9bQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKQEAgLTQyOSw3ICs0MzEsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CkBAIC00NDksNiArNDUwLDcgQEAKIENPTkZJR19NRF9SQUlEMT1tCiBDT05GSUdfTURfUkFJRDEwPW0KIENPTkZJR19NRF9SQUlENT1tCisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CkBAIC03NDEsOSArNzQzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTgyNiw2ICs4MjYsNyBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15CiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldApAQCAtODM3LDcgKzgzOCw2IEBACiAjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUkFERU9OPXkKIENPTkZJR19GQl9SQURFT05fSTJDPXkKICMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CkBAIC05MjMsNiArOTIzLDcgQEAKICMgUENJIGRldmljZXMKICMKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FMSTU0NTE9bQogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTk1NCw2ICs5NTUsNyBAQAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldApAQCAtMTA0MCw5ICsxMDQyLDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTEwOCw2ICsxMTA4LDE5IEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldApAQCAtMTExNyw2ICsxMTMwLDExIEBACiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIE1pc2MgTGludXgvU1BBUkMgZHJpdmVycwogIwogQ09ORklHX1NVTl9PUEVOUFJPTUlPPW0KQEAgLTEyOTEsNiArMTMwOSw3IEBACiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUwppbmRleCAzZWFkYWM1Li4zMWM1ODkyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgpAQCAtNDkzLDYgKzQ5NCwzNSBAQAogCWNhbGwJcHJvbV9pbml0CiAJIG1vdgklbDcsICVvMAkJCSEgT3BlblBST00gY2lmIGhhbmRsZXIKIAorCS8qIEluaXRpYWxpemUgY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgYXMgZWFybHkgYXMgcG9zc2libGUuCisJICogSW4gb3JkZXIgdG8gZG8gdGhhdCBhY2N1cmF0ZWx5IHdlIGhhdmUgdG8gcGF0Y2ggdXAgdGhlIGdldF9jcHVpZCgpCisJICogYXNzZW1ibGVyIHNlcXVlbmNlcy4gIEFuZCB0aGF0LCBpbiB0dXJuLCByZXF1aXJlcyB0aGF0IHdlIGtub3cKKwkgKiBpZiB3ZSBhcmUgb24gYSBTdGFyZmlyZSBib3ggb3Igbm90LiAgV2hpbGUgd2UncmUgaGVyZSwgcGF0Y2ggdXAKKwkgKiB0aGUgc3VuNHYgc2VxdWVuY2VzIGFzIHdlbGwuCisJICovCisJY2FsbAljaGVja19pZl9zdGFyZmlyZQorCSBub3AKKwljYWxsCXBlcl9jcHVfcGF0Y2gKKwkgbm9wCisJY2FsbAlzdW40dl9wYXRjaAorCSBub3AKKworI2lmZGVmIENPTkZJR19TTVAKKwljYWxsCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZAorCSBub3AKKwljbXAJJW8wLCBOUl9DUFVTCisJYmx1LHB0CSV4Y2MsIDFmCisJIG5vcAorCWNhbGwJYm9vdF9jcHVfaWRfdG9vX2xhcmdlCisJIG5vcAorCS8qIE5vdCByZWFjaGVkLi4uICovCisKKzE6CisjZWxzZQorCW1vdgkwLCAlbzAKKyNlbmRpZgorCXN0YgklbzAsIFslZzYgKyBUSV9DUFVdCisKIAkvKiBPZmYgd2UgZ28uLi4uICovCiAJY2FsbAlzdGFydF9rZXJuZWwKIAkgbm9wCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGZmYzczMDkuLjJlMWM4MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC02Myw3ICs2Myw3IEBACiAJZmx1c2hpKHAtPmFkZHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOwogCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOwpAQCAtNzEsNyArNzEsNyBAQAogCWtjYi0+cHJldl9rcHJvYmUub3JpZ190c3RhdGVfcGlsID0ga2NiLT5rcHJvYmVfb3JpZ190c3RhdGVfcGlsOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKIAlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKQEAgLTc5LDcgKzc5LDcgQEAKIAlrY2ItPmtwcm9iZV9vcmlnX3RzdGF0ZV9waWwgPSBrY2ItPnByZXZfa3Byb2JlLm9yaWdfdHN0YXRlX3BpbDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7CkBAIC04Nyw3ICs4Nyw3IEBACiAJa2NiLT5rcHJvYmVfb3JpZ190c3RhdGVfcGlsID0gKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QSUwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJcmVncy0+dHN0YXRlIHw9IFRTVEFURV9QSUw7CkBAIC0yNzMsNyArMjczLDcgQEAKIAkJCWtjYi0+a3Byb2JlX29yaWdfdHN0YXRlX3BpbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBwb3N0X2twcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CkBAIC0zMDAsNyArMzAwLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKIHsKIAlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOwogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNmM4M2UzNy4uNTc5ODcxNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL21vZHVsZS5jCkBAIC0xNDMsNiArMTQzLDExIEBACiAJCQlsb2NhdGlvblszXSA9IHYgPj4gIDA7CiAJCQlicmVhazsKIAorCQljYXNlIFJfU1BBUkNfRElTUDMyOgorCQkJdiAtPSAoRWxmNjRfQWRkcikgbG9jYXRpb247CisJCQkqbG9jMzIgPSB2OworCQkJYnJlYWs7CisKIAkJY2FzZSBSX1NQQVJDX1dESVNQMzA6CiAJCQl2IC09IChFbGY2NF9BZGRyKSBsb2NhdGlvbjsKIAkJCSpsb2MzMiA9ICgqbG9jMzIgJiB+MHgzZmZmZmZmZikgfApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMKaW5kZXggZGZjY2ZmMi4uZjk3ZGRlYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jCkBAIC00MTksNiArNDE5LDcgQEAKIAlyZWdpb24tPnN0YXJ0ID0gcmVzLT5zdGFydCAtIHplcm9fcmVzLnN0YXJ0OwogCXJlZ2lvbi0+ZW5kID0gcmVzLT5lbmQgLSB6ZXJvX3Jlcy5zdGFydDsKIH0KK0VYUE9SVF9TWU1CT0wocGNpYmlvc19yZXNvdXJjZV90b19idXMpOwogCiB2b2lkIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCSAgICAgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW9tbXUuYwppbmRleCA4ZWZiYzEzLi44MmU1NDU1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogICogRE1BIGZvciBQQ0kgZGV2aWNlIFBERVYuICBSZXR1cm4gbm9uLU5VTEwgY3B1LXNpZGUgYWRkcmVzcyBpZgogICogc3VjY2Vzc2Z1bCBhbmQgc2V0ICpETUFfQUREUlAgdG8gdGhlIFBDSSBzaWRlIGRtYSBhZGRyZXNzLgogICovCi1zdGF0aWMgdm9pZCAqcGNpXzR1X2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfYWRkcnApCitzdGF0aWMgdm9pZCAqcGNpXzR1X2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfYWRkcnAsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwOwogCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11OwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJaWYgKG9yZGVyID49IDEwKQogCQlyZXR1cm4gTlVMTDsKIAotCWZpcnN0X3BhZ2UgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIG9yZGVyKTsKKwlmaXJzdF9wYWdlID0gX19nZXRfZnJlZV9wYWdlcyhnZnAsIG9yZGVyKTsKIAlpZiAoZmlyc3RfcGFnZSA9PSAwVUwpCiAJCXJldHVybiBOVUxMOwogCW1lbXNldCgoY2hhciAqKWZpcnN0X3BhZ2UsIDAsIFBBR0VfU0laRSA8PCBvcmRlcik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwppbmRleCA5MzcyZDRmLi4wYzA4OTUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlfX2NsZWFyX2JpdChpLCBhcmVuYS0+bWFwKTsKIH0KIAotc3RhdGljIHZvaWQgKnBjaV80dl9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2FkZHJwKQorc3RhdGljIHZvaWQgKnBjaV80dl9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2FkZHJwLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcDsKIAlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKQEAgLTE2OSw3ICsxNjksNyBAQAogCiAJbnBhZ2VzID0gc2l6ZSA+PiBJT19QQUdFX1NISUZUOwogCi0JZmlyc3RfcGFnZSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywgb3JkZXIpOworCWZpcnN0X3BhZ2UgPSBfX2dldF9mcmVlX3BhZ2VzKGdmcCwgb3JkZXIpOwogCWlmICh1bmxpa2VseShmaXJzdF9wYWdlID09IDBVTCkpCiAJCXJldHVybiBOVUxMOwogCkBAIC01OTksMTggKzU5OSwxMjggQEAKIAogLyogU1VONFYgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjZXNzb3JzLiAqLwogCi1zdGF0aWMgaW5saW5lIGludCBwY2lfc3VuNHZfb3V0X29mX3JhbmdlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmljZSwgdW5zaWduZWQgaW50IGZ1bmMpCitzdHJ1Y3QgcGRldl9lbnRyeSB7CisJc3RydWN0IHBkZXZfZW50cnkJKm5leHQ7CisJdTMyCQkJZGV2aGFuZGxlOworCXVuc2lnbmVkIGludAkJYnVzOworCXVuc2lnbmVkIGludAkJZGV2aWNlOworCXVuc2lnbmVkIGludAkJZnVuYzsKK307CisKKyNkZWZpbmUgUERFVl9IVEFCX1NJWkUJMTYKKyNkZWZpbmUgUERFVl9IVEFCX01BU0sJKFBERVZfSFRBQl9TSVpFIC0gMSkKK3N0YXRpYyBzdHJ1Y3QgcGRldl9lbnRyeSAqcGRldl9odGFiW1BERVZfSFRBQl9TSVpFXTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGRldl9oYXNoZm4odTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmljZSwgdW5zaWduZWQgaW50IGZ1bmMpCiB7Ci0JaWYgKGJ1cyA9PSBwYm0tPnBjaV9maXJzdF9idXNubykgewotCQlpZiAoZGV2aWNlID09IDAgJiYgZnVuYyA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCXJldHVybiAxOworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSAoZGV2aGFuZGxlIF4gKGRldmhhbmRsZSA+PiA0KSk7CisJdmFsIF49IGJ1czsKKwl2YWwgXj0gZGV2aWNlOworCXZhbCBePSBmdW5jOworCisJcmV0dXJuIHZhbCAmIFBERVZfSFRBQl9NQVNLOworfQorCitzdGF0aWMgaW50IHBkZXZfaHRhYl9hZGQodTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmljZSwgdW5zaWduZWQgaW50IGZ1bmMpCit7CisJc3RydWN0IHBkZXZfZW50cnkgKnAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCXN0cnVjdCBwZGV2X2VudHJ5ICoqc2xvdDsKKworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbG90ID0gJnBkZXZfaHRhYltwZGV2X2hhc2hmbihkZXZoYW5kbGUsIGJ1cywgZGV2aWNlLCBmdW5jKV07CisJcC0+bmV4dCA9ICpzbG90OworCSpzbG90ID0gcDsKKworCXAtPmRldmhhbmRsZSA9IGRldmhhbmRsZTsKKwlwLT5idXMgPSBidXM7CisJcC0+ZGV2aWNlID0gZGV2aWNlOworCXAtPmZ1bmMgPSBmdW5jOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IGRlc2NlbmQgaW50byB0aGUgT0JQIGRldmljZSB0cmVlLCByb290ZWQgYXQgdG9wbGV2ZWxfbm9kZSwKKyAqIGxvb2tpbmcgZm9yIGEgUENJIGRldmljZSBtYXRjaGluZyBidXMgYW5kIGRldmZuLgorICovCitzdGF0aWMgaW50IG9icF9maW5kKHN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgKnByZWdzLCBpbnQgdG9wbGV2ZWxfbm9kZSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZuKQoreworCXRvcGxldmVsX25vZGUgPSBwcm9tX2dldGNoaWxkKHRvcGxldmVsX25vZGUpOworCisJd2hpbGUgKHRvcGxldmVsX25vZGUgIT0gMCkgeworCQlpbnQgcmV0ID0gb2JwX2ZpbmQocHJlZ3MsIHRvcGxldmVsX25vZGUsIGJ1cywgZGV2Zm4pOworCisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gcHJvbV9nZXRwcm9wZXJ0eSh0b3BsZXZlbF9ub2RlLCAicmVnIiwgKGNoYXIgKikgcHJlZ3MsCisJCQkJICAgICAgIHNpemVvZigqcHJlZ3MpICogUFJPTVJFR19NQVgpOworCQlpZiAocmV0ID09IDAgfHwgcmV0ID09IC0xKQorCQkJZ290byBuZXh0X3NpYmxpbmc7CisKKwkJaWYgKCgocHJlZ3NbMF0ucGh5c19oaSA+PiAxNikgJiAweGZmKSA9PSBidXMgJiYKKwkJICAgICgocHJlZ3NbMF0ucGh5c19oaSA+PiA4KSAmIDB4ZmYpID09IGRldmZuKQorCQkJYnJlYWs7CisKKwluZXh0X3NpYmxpbmc6CisJCXRvcGxldmVsX25vZGUgPSBwcm9tX2dldHNpYmxpbmcodG9wbGV2ZWxfbm9kZSk7CiAJfQogCisJcmV0dXJuIHRvcGxldmVsX25vZGU7Cit9CisKK3N0YXRpYyBpbnQgcGRldl9odGFiX3BvcHVsYXRlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzIHByW1BST01SRUdfTUFYXTsKKwl1MzIgZGV2aGFuZGxlID0gcGJtLT5kZXZoYW5kbGU7CisJdW5zaWduZWQgaW50IGJ1czsKKworCWZvciAoYnVzID0gcGJtLT5wY2lfZmlyc3RfYnVzbm87IGJ1cyA8PSBwYm0tPnBjaV9sYXN0X2J1c25vOyBidXMrKykgeworCQl1bnNpZ25lZCBpbnQgZGV2Zm47CisKKwkJZm9yIChkZXZmbiA9IDA7IGRldmZuIDwgMjU2OyBkZXZmbisrKSB7CisJCQl1bnNpZ25lZCBpbnQgZGV2aWNlID0gUENJX1NMT1QoZGV2Zm4pOworCQkJdW5zaWduZWQgaW50IGZ1bmMgPSBQQ0lfRlVOQyhkZXZmbik7CisKKwkJCWlmIChvYnBfZmluZChwciwgcGJtLT5wcm9tX25vZGUsIGJ1cywgZGV2Zm4pKSB7CisJCQkJaW50IGVyciA9IHBkZXZfaHRhYl9hZGQoZGV2aGFuZGxlLCBidXMsCisJCQkJCQkJZGV2aWNlLCBmdW5jKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGRldl9lbnRyeSAqcGRldl9maW5kKHUzMiBkZXZoYW5kbGUsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQoreworCXN0cnVjdCBwZGV2X2VudHJ5ICpwOworCisJcCA9IHBkZXZfaHRhYltwZGV2X2hhc2hmbihkZXZoYW5kbGUsIGJ1cywgZGV2aWNlLCBmdW5jKV07CisJd2hpbGUgKHApIHsKKwkJaWYgKHAtPmRldmhhbmRsZSA9PSBkZXZoYW5kbGUgJiYKKwkJICAgIHAtPmJ1cyA9PSBidXMgJiYKKwkJICAgIHAtPmRldmljZSA9PSBkZXZpY2UgJiYKKwkJICAgIHAtPmZ1bmMgPT0gZnVuYykKKwkJCWJyZWFrOworCisJCXAgPSBwLT5uZXh0OworCX0KKworCXJldHVybiBwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwY2lfc3VuNHZfb3V0X29mX3JhbmdlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmljZSwgdW5zaWduZWQgaW50IGZ1bmMpCit7CiAJaWYgKGJ1cyA8IHBibS0+cGNpX2ZpcnN0X2J1c25vIHx8CiAJICAgIGJ1cyA+IHBibS0+cGNpX2xhc3RfYnVzbm8pCiAJCXJldHVybiAxOwotCXJldHVybiAwOworCXJldHVybiBwZGV2X2ZpbmQocGJtLT5kZXZoYW5kbGUsIGJ1cywgZGV2aWNlLCBmdW5jKSA9PSBOVUxMOwogfQogCiBzdGF0aWMgaW50IHBjaV9zdW40dl9yZWFkX3BjaV9jZmcoc3RydWN0IHBjaV9idXMgKmJ1c19kZXYsIHVuc2lnbmVkIGludCBkZXZmbiwKQEAgLTEwNjMsNiArMTE3Myw4IEBACiAKIAlwY2lfc3VuNHZfZ2V0X2J1c19yYW5nZShwYm0pOwogCXBjaV9zdW40dl9pb21tdV9pbml0KHBibSk7CisKKwlwZGV2X2h0YWJfcG9wdWxhdGUocGJtKTsKIH0KIAogdm9pZCBzdW40dl9wY2lfaW5pdChpbnQgbm9kZSwgY2hhciAqbW9kZWxfbmFtZSkKQEAgLTEwOTIsNyArMTIwNCw3IEBACiAJCX0KIAl9CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAogCQlpZiAoIXBhZ2UpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCBlYjkzZTljLi5kMzE5NzVlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTI0NCw2ICsyNDQsMTMgQEAKIAl9CiAKIAlzd2l0Y2gocmVxdWVzdCkgeworCWNhc2UgUFRSQUNFX1BFRUtVU1I6CisJCWlmIChhZGRyICE9IDApCisJCQlwdF9lcnJvcl9yZXR1cm4ocmVncywgRUlPKTsKKwkJZWxzZQorCQkJcHRfc3VjY19yZXR1cm4ocmVncywgMCk7CisJCWdvdG8gb3V0X3RzazsKKwogCWNhc2UgUFRSQUNFX1BFRUtURVhUOiAvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8gCiAJY2FzZSBQVFJBQ0VfUEVFS0RBVEE6IHsKIAkJdW5zaWduZWQgbG9uZyB0bXA2NDsKQEAgLTYwMiw2ICs2MDksMjIgQEAKIAogCS8qIFBUUkFDRV9EVU1QQ09SRSB1bnN1cHBvcnRlZC4uLiAqLwogCisJY2FzZSBQVFJBQ0VfR0VURVZFTlRNU0c6IHsKKwkJaW50IGVycjsKKworCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQorCQkJZXJyID0gcHV0X3VzZXIoY2hpbGQtPnB0cmFjZV9tZXNzYWdlLAorCQkJCSAgICAgICAodW5zaWduZWQgaW50IF9fdXNlciAqKSBkYXRhKTsKKwkJZWxzZQorCQkJZXJyID0gcHV0X3VzZXIoY2hpbGQtPnB0cmFjZV9tZXNzYWdlLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZGF0YSk7CisJCWlmIChlcnIpCisJCQlwdF9lcnJvcl9yZXR1cm4ocmVncywgLWVycik7CisJCWVsc2UKKwkJCXB0X3N1Y2NfcmV0dXJuKHJlZ3MsIDApOworCQlicmVhazsKKwl9CisKIAlkZWZhdWx0OiB7CiAJCWludCBlcnIgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CiAJCWlmIChlcnIpCkBAIC02MzAsNyArNjUzLDcgQEAKIAkJaWYgKHVubGlrZWx5KHRzdGF0ZSAmIChUU1RBVEVfWENBUlJZIHwgVFNUQVRFX0lDQVJSWSkpKQogCQkJcmVzdWx0ID0gQVVESVRTQ19GQUlMVVJFOwogCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCByZXN1bHQsIHJlZ3MtPnVfcmVnc1tVUkVHX0kwXSk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChyZXN1bHQsIHJlZ3MtPnVfcmVnc1tVUkVHX0kwXSk7CiAJfQogCiAJaWYgKCEoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCkBAIC02NTQsOCArNjc3LDcgQEAKIAogb3V0OgogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhc3lzY2FsbF9leGl0X3ApCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwKLQkJCQkgICAgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/CisJCWF1ZGl0X3N5c2NhbGxfZW50cnkoKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/CiAJCQkJICAgICBBVURJVF9BUkNIX1NQQVJDIDoKIAkJCQkgICAgIEFVRElUX0FSQ0hfU1BBUkM2NCksCiAJCQkJICAgIHJlZ3MtPnVfcmVnc1tVUkVHX0cxXSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwppbmRleCA3ZDBlNjdjLi45Y2YxYzg4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwdF9yZWdzIGZha2Vfc3dhcHBlcl9yZWdzID0geyB7IDAsIH0sIDAsIDAsIDAsIDAgfTsKIAotc3RhdGljIHZvaWQgX19pbml0IHBlcl9jcHVfcGF0Y2godm9pZCkKK3ZvaWQgX19pbml0IHBlcl9jcHVfcGF0Y2godm9pZCkKIHsKIAlzdHJ1Y3QgY3B1aWRfcGF0Y2hfZW50cnkgKnA7CiAJdW5zaWduZWQgbG9uZyB2ZXI7CkBAIC0yODAsNyArMjgwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzdW40dl9wYXRjaCh2b2lkKQordm9pZCBfX2luaXQgc3VuNHZfcGF0Y2godm9pZCkKIHsKIAlzdHJ1Y3Qgc3VuNHZfMWluc25fcGF0Y2hfZW50cnkgKnAxOwogCXN0cnVjdCBzdW40dl8yaW5zbl9wYXRjaF9lbnRyeSAqcDI7CkBAIC0zMTUsNiArMzE1LDE1IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBfX2luaXQgYm9vdF9jcHVfaWRfdG9vX2xhcmdlKGludCBjcHUpCit7CisJcHJvbV9wcmludGYoIlNlcmlvdXMgcHJvYmxlbSwgYm9vdCBjcHUgaWQgKCVkKSA+PSBOUl9DUFVTICglZClcbiIsCisJCSAgICBjcHUsIE5SX0NQVVMpOworCXByb21faGFsdCgpOworfQorI2VuZGlmCisKIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiBJbml0aWFsaXplIFBST00gY29uc29sZSBhbmQgY29tbWFuZCBsaW5lLiAqLwpAQCAtMzMyLDE2ICszNDEsNiBAQAogCWNvbnN3aXRjaHAgPSAmcHJvbV9jb247CiAjZW5kaWYKIAotCS8qIFdvcmsgb3V0IGlmIHdlIGFyZSBzdGFyZmlyZSBlYXJseSBvbiAqLwotCWNoZWNrX2lmX3N0YXJmaXJlKCk7Ci0KLQkvKiBOb3cgd2Uga25vdyBlbm91Z2ggdG8gcGF0Y2ggdGhlIGdldF9jcHVpZCBzZXF1ZW5jZXMKLQkgKiB1c2VkIGJ5IHRyYXAgY29kZS4KLQkgKi8KLQlwZXJfY3B1X3BhdGNoKCk7Ci0KLQlzdW40dl9wYXRjaCgpOwotCiAJYm9vdF9mbGFnc19pbml0KCpjbWRsaW5lX3ApOwogCiAJaWRwcm9tX2luaXQoKTsKQEAgLTUzNSw3ICs1MzQsNyBAQAogCXdoaWxlICghY3B1X2ZpbmRfYnlfaW5zdGFuY2UobmNwdXNfcHJvYmVkLCBOVUxMLCBOVUxMKSkKIAkJbmNwdXNfcHJvYmVkKys7CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBjcHUgKnAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwogCQlpZiAocCkgewogCQkJcmVnaXN0ZXJfY3B1KHAsIGksIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKaW5kZXggN2RjMjhhNC4uZjAzZDUyZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCkBAIC03NDUsMTIgKzc0NSwyMSBAQAogCWludCB3YWl0OwogfTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhjYWxsX2xvY2spOworc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhjYWxsX2xvY2spOwogc3RhdGljIHN0cnVjdCBjYWxsX2RhdGFfc3RydWN0ICpjYWxsX2RhdGE7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX2NhbGxfZnVuY3Rpb247CiAKLS8qCisvKioKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uKCk6IFJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzLgorICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCisgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCisgKiBAbm9uYXRvbWljOiBjdXJyZW50bHkgdW51c2VkLgorICogQHdhaXQ6IElmIHRydWUsIHdhaXQgKGF0b21pY2FsbHkpIHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlLiBEb2VzIG5vdCByZXR1cm4gdW50aWwKKyAqIHJlbW90ZSBDUFVzIGFyZSBuZWFybHkgcmVhZHkgdG8gZXhlY3V0ZSA8PGZ1bmM+PiBvciBhcmUgb3IgaGF2ZSBleGVjdXRlZC4KKyAqCiAgKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKICAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgogICovCkBAIC03NTksNyArNzY4LDYgQEAKIHsKIAlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOwogCWludCBjcHVzOwotCWxvbmcgdGltZW91dDsKIAogCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CkBAIC03NzcsMzEgKzc4NSwxOCBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAljYWxsX2RhdGEgPSAmZGF0YTsKKwltYigpOwogCiAJc21wX2Nyb3NzX2NhbGxfbWFza2VkKCZ4Y2FsbF9jYWxsX2Z1bmN0aW9uLCAwLCAwLCAwLCBtYXNrKTsKIAotCS8qIAotCSAqIFdhaXQgZm9yIG90aGVyIGNwdXMgdG8gY29tcGxldGUgZnVuY3Rpb24gb3IgYXQKLQkgKiBsZWFzdCBzbmFwIHRoZSBjYWxsIGRhdGEuCi0JICovCi0JdGltZW91dCA9IDEwMDAwMDA7Ci0Jd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKSB7Ci0JCWlmICgtLXRpbWVvdXQgPD0gMCkKLQkJCWdvdG8gb3V0X3RpbWVvdXQ7Ci0JCWJhcnJpZXIoKTsKLQkJdWRlbGF5KDEpOwotCX0KKwkvKiBXYWl0IGZvciByZXNwb25zZSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkgIT0gY3B1cykKKwkJY3B1X3JlbGF4KCk7CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7CiAKIAlyZXR1cm4gMDsKLQotb3V0X3RpbWVvdXQ6Ci0Jc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7Ci0JcHJpbnRrKCJYQ0FMTDogUmVtb3RlIGNwdXMgbm90IHJlc3BvbmRpbmcsIG5jcHVzPSVkIGZpbmlzaGVkPSVkXG4iLAotCSAgICAgICBjcHVzLCBhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkpOwotCXJldHVybiAwOwogfQogCiBpbnQgc21wX2NhbGxfZnVuY3Rpb24odm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLApAQCAtODMwLDkgKzgyNSwxNiBAQAogCiBzdGF0aWMgdm9pZCB0c2Jfc3luYyh2b2lkICppbmZvKQogeworCXN0cnVjdCB0cmFwX3Blcl9jcHUgKnRwID0gJnRyYXBfYmxvY2tbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBpbmZvOwogCi0JaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkKKwkvKiBJdCBpcyBub3QgdmFsaWQgdG8gdGVzdCAiY3VycnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSIgaGVyZS4KKwkgKgorCSAqIFRoZSB2YWx1ZSBvZiAiY3VycmVudCIgaXMgbm90IGNoYW5nZWQgYXRvbWljYWxseSB3aXRoCisJICogc3dpdGNoX21tKCkuICBCdXQgdGhhdCdzIE9LLCB3ZSBqdXN0IG5lZWQgdG8gY2hlY2sgdGhlCisJICogY3VycmVudCBjcHUncyB0cmFwIGJsb2NrIFBHRCBwaHlzaWNhbCBhZGRyZXNzLgorCSAqLworCWlmICh0cC0+cGdkX3BhZGRyID09IF9fcGEobW0tPnBnZCkpCiAJCXRzYl9jb250ZXh0X3N3aXRjaChtbSk7CiB9CiAKQEAgLTEyNjIsNyArMTI2NCw2IEBACiAJYm9vdF9jcHVfaWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKIAljdXJyZW50X3RpY2tfb2Zmc2V0ID0gdGltZXJfdGlja19vZmZzZXQ7CiAKLQljcHVfc2V0KGJvb3RfY3B1X2lkLCBjcHVfb25saW5lX21hcCk7CiAJcHJvZl9jb3VudGVyKGJvb3RfY3B1X2lkKSA9IHByb2ZfbXVsdGlwbGllcihib290X2NwdV9pZCkgPSAxOwogfQogCkBAIC0xMjc4LDcgKzEyNzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9mX3NldHVwX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9jcHUoaSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJcHJvZl9tdWx0aXBsaWVyKGkpID0gbXVsdGlwbGllcjsKIAljdXJyZW50X3RpY2tfb2Zmc2V0ID0gKHRpbWVyX3RpY2tfb2Zmc2V0IC8gbXVsdGlwbGllcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvZl9zZXR1cF9sb2NrLCBmbGFncyk7CkBAIC0xMjg2LDYgKzEyODcsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHNtcF90dW5lX3NjaGVkdWxpbmcodm9pZCkKK3sKKwlpbnQgaW5zdGFuY2UsIG5vZGU7CisJdW5zaWduZWQgaW50IGRlZiwgc21hbGxlc3QgPSB+MFU7CisKKwlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KKwkgICAgICAgKDMgKiAxMDI0ICogMTAyNCkgOgorCSAgICAgICAoNCAqIDEwMjQgKiAxMDI0KSk7CisKKwlpbnN0YW5jZSA9IDA7CisJd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShpbnN0YW5jZSwgJm5vZGUsIE5VTEwpKSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJdmFsID0gcHJvbV9nZXRpbnRkZWZhdWx0KG5vZGUsICJlY2FjaGUtc2l6ZSIsIGRlZik7CisJCWlmICh2YWwgPCBzbWFsbGVzdCkKKwkJCXNtYWxsZXN0ID0gdmFsOworCisJCWluc3RhbmNlKys7CisJfQorCisJLyogQW55IHZhbHVlIGxlc3MgdGhhbiAyNTZLIGlzIG5vbnNlbnNlLiAgKi8KKwlpZiAoc21hbGxlc3QgPCAoMjU2VSAqIDEwMjRVKSkKKwkJc21hbGxlc3QgPSAyNTYgKiAxMDI0OworCisJbWF4X2NhY2hlX3NpemUgPSBzbWFsbGVzdDsKKworCWlmIChzbWFsbGVzdCA8IDFVICogMTAyNFUgKiAxMDI0VSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgbWF4X2NhY2hlX3NpemUgb2YgJXVLQlxuIiwKKwkJICAgICAgIHNtYWxsZXN0IC8gMTAyNFUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgbWF4X2NhY2hlX3NpemUgb2YgJXVNQlxuIiwKKwkJICAgICAgIHNtYWxsZXN0IC8gMTAyNFUgLyAxMDI0VSk7Cit9CisKIC8qIENvbnN0cmFpbiB0aGUgbnVtYmVyIG9mIGNwdXMgdG8gbWF4X2NwdXMuICAqLwogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CkBAIC0xMzA2LDEyICsxMzQxLDEyIEBACiAJCX0KIAl9CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CiAJCQlpbnQgajsKIAogCQkJLyogWFhYIGdldCB0aGlzIG1hcHBpbmcgZnJvbSBtYWNoaW5lIGRlc2NyaXB0aW9uICovCi0JCQlmb3JfZWFjaF9jcHUoaikgeworCQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGopIHsKIAkJCQlpZiAoKGogPj4gMikgPT0gKGkgPj4gMikpCiAJCQkJCWNwdV9zZXQoaiwgY3B1X3NpYmxpbmdfbWFwW2ldKTsKIAkJCX0KQEAgLTEzMjEsNiArMTM1Niw3IEBACiAJfQogCiAJc21wX3N0b3JlX2NwdV9pbmZvKGJvb3RfY3B1X2lkKTsKKwlzbXBfdHVuZV9zY2hlZHVsaW5nKCk7CiB9CiAKIC8qIFNldCB0aGlzIHVwIGVhcmx5IHNvIHRoYXQgdGhpbmdzIGxpa2UgdGhlIHNjaGVkdWxlciBjYW4gaW5pdApAQCAtMTM0MywxOCArMTM3OSw2IEBACiAKIHZvaWQgX19kZXZpbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7Ci0JaW50IGNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGNwdSA+PSBOUl9DUFVTKSB7Ci0JCXByb21fcHJpbnRmKCJTZXJpb3VzIHByb2JsZW0sIGJvb3QgY3B1IGlkID49IE5SX0NQVVNcbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0KLQljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGNwdTsKLQlfX2xvY2FsX3Blcl9jcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldChjcHUpOwotCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwogfQogCiBpbnQgX19kZXZpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCkBAIC0xNDMxLDQgKzE0NTUsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKywgcHRyICs9IHNpemUpCiAJCW1lbWNweShwdHIsIF9fcGVyX2NwdV9zdGFydCwgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7CisKKwkvKiBTZXR1cCAlZzUgZm9yIHRoZSBib290IGNwdS4gICovCisJX19sb2NhbF9wZXJfY3B1X29mZnNldCA9IF9fcGVyX2NwdV9vZmZzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKaW5kZXggZjVlOGRiMS4uMzhlNTY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKQEAgLTI3Niw3ICsyNzYsNiBAQAogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwogRVhQT1JUX1NZTUJPTChfX3N0cmxlbl91c2VyKTsKIEVYUE9SVF9TWU1CT0woX19zdHJubGVuX3VzZXIpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIAogI2lmZGVmIENPTkZJR19TT0xBUklTX0VNVUxfTU9EVUxFCiBFWFBPUlRfU1lNQk9MKGxpbnV4X3NwYXJjX3N5c2NhbGwpOwpAQCAtMjk4LDcgKzI5Nyw2IEBACiBFWFBPUlRfU1lNQk9MKHN2cjRfc2V0Y29udGV4dCk7CiBFWFBPUlRfU1lNQk9MKGNvbXBhdF9zeXNfaW9jdGwpOwogRVhQT1JUX1NZTUJPTChzcGFyYzMyX29wZW4pOwotRVhQT1JUX1NZTUJPTChzeXNfY2xvc2UpOwogI2VuZGlmCiAKIC8qIFNwZWNpYWwgaW50ZXJuYWwgdmVyc2lvbnMgb2YgbGlicmFyeSBmdW5jdGlvbnMuICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMKaW5kZXggYzRhMWNlZi4uYmRmMWY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzMzIuUwpAQCAtMTM2LDYgKzEzNiwxMCBAQAogU0lHTjEoc3lzMzJfZ2V0c29ja25hbWUsIHN5c19nZXRzb2NrbmFtZSwgJW8wKQogU0lHTjIoc3lzMzJfaW9wcmlvX2dldCwgc3lzX2lvcHJpb19nZXQsICVvMCwgJW8xKQogU0lHTjMoc3lzMzJfaW9wcmlvX3NldCwgc3lzX2lvcHJpb19zZXQsICVvMCwgJW8xLCAlbzIpCitTSUdOMihzeXMzMl9zcGxpY2UsIHN5c19zcGxpY2UsICVvMCwgJW8xKQorU0lHTjIoc3lzMzJfc3luY19maWxlX3JhbmdlLCBjb21wYXRfc3luY19maWxlX3JhbmdlLCAlbzAsICVvNSkKK1NJR04yKHN5czMyX3RlZSwgc3lzX3RlZSwgJW8wLCAlbzEpCitTSUdOMShzeXMzMl92bXNwbGljZSwgY29tcGF0X3N5c192bXNwbGljZSwgJW8wKQogCiAJLmdsb2JsCQlzeXMzMl9tbWFwMgogc3lzMzJfbW1hcDI6CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggMmU5MDZiYS4uMzEwMzBiZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwpAQCAtMTA2OSwzICsxMDY5LDExIEBACiAJcmV0dXJuIHN5c19sb29rdXBfZGNvb2tpZSgoY29va2llX2hpZ2ggPDwgMzIpIHwgY29va2llX2xvdywKIAkJCQkgIGJ1ZiwgbGVuKTsKIH0KKworbG9uZyBjb21wYXRfc3luY19maWxlX3JhbmdlKGludCBmZCwgdW5zaWduZWQgbG9uZyBvZmZfaGlnaCwgdW5zaWduZWQgbG9uZyBvZmZfbG93LCB1bnNpZ25lZCBsb25nIG5iX2hpZ2gsIHVuc2lnbmVkIGxvbmcgbmJfbG93LCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c19zeW5jX2ZpbGVfcmFuZ2UoZmQsCisJCQkJICAgKG9mZl9oaWdoIDw8IDMyKSB8IG9mZl9sb3csCisJCQkJICAgKG5iX2hpZ2ggPDwgMzIpIHwgbmJfbG93LAorCQkJCSAgIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggM2IyNTBmMi4uMTEzNmZjNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKQEAgLTI1LDcgKzI1LDcgQEAKIC8qMTAqLyAgLndvcmQgc3lzX3VubGluaywgc3Vub3NfZXhlY3YsIHN5c19jaGRpciwgc3lzMzJfY2hvd24xNiwgc3lzMzJfbWtub2QKIC8qMTUqLwkud29yZCBzeXNfY2htb2QsIHN5czMyX2xjaG93bjE2LCBzcGFyY19icmssIHN5czMyX3BlcmZjdHIsIHN5czMyX2xzZWVrCiAvKjIwKi8JLndvcmQgc3lzX2dldHBpZCwgc3lzX2NhcGdldCwgc3lzX2NhcHNldCwgc3lzMzJfc2V0dWlkMTYsIHN5czMyX2dldHVpZDE2Ci0vKjI1Ki8JLndvcmQgY29tcGF0X3N5c190aW1lLCBzeXNfcHRyYWNlLCBzeXNfYWxhcm0sIHN5czMyX3NpZ2FsdHN0YWNrLCBzeXMzMl9wYXVzZQorLyoyNSovCS53b3JkIHN5czMyX3Ztc3BsaWNlLCBzeXNfcHRyYWNlLCBzeXNfYWxhcm0sIHN5czMyX3NpZ2FsdHN0YWNrLCBzeXMzMl9wYXVzZQogLyozMCovCS53b3JkIGNvbXBhdF9zeXNfdXRpbWUsIHN5c19sY2hvd24sIHN5c19mY2hvd24sIHN5czMyX2FjY2Vzcywgc3lzMzJfbmljZQogCS53b3JkIHN5c19jaG93biwgc3lzX3N5bmMsIHN5czMyX2tpbGwsIGNvbXBhdF9zeXNfbmV3c3RhdCwgc3lzMzJfc2VuZGZpbGUKIC8qNDAqLwkud29yZCBjb21wYXRfc3lzX25ld2xzdGF0LCBzeXNfZHVwLCBzeXNfcGlwZSwgY29tcGF0X3N5c190aW1lcywgc3lzX2dldHVpZApAQCAtNjYsMjAgKzY2LDIxIEBACiAJLndvcmQgc3lzMzJfaXBjLCBzeXMzMl9zaWdyZXR1cm4sIHN5c19jbG9uZSwgc3lzMzJfaW9wcmlvX2dldCwgY29tcGF0X3N5c19hZGp0aW1leAogLyoyMjAqLwkud29yZCBzeXMzMl9zaWdwcm9jbWFzaywgc3lzX25pX3N5c2NhbGwsIHN5czMyX2RlbGV0ZV9tb2R1bGUsIHN5c19uaV9zeXNjYWxsLCBzeXMzMl9nZXRwZ2lkCiAJLndvcmQgc3lzMzJfYmRmbHVzaCwgc3lzMzJfc3lzZnMsIHN5c19uaXNfc3lzY2FsbCwgc3lzMzJfc2V0ZnN1aWQxNiwgc3lzMzJfc2V0ZnNnaWQxNgotLyoyMzAqLwkud29yZCBzeXMzMl9zZWxlY3QsIGNvbXBhdF9zeXNfdGltZSwgc3lzX25pc19zeXNjYWxsLCBjb21wYXRfc3lzX3N0aW1lLCBjb21wYXRfc3lzX3N0YXRmczY0CisvKjIzMCovCS53b3JkIHN5czMyX3NlbGVjdCwgY29tcGF0X3N5c190aW1lLCBzeXMzMl9zcGxpY2UsIGNvbXBhdF9zeXNfc3RpbWUsIGNvbXBhdF9zeXNfc3RhdGZzNjQKIAkud29yZCBjb21wYXRfc3lzX2ZzdGF0ZnM2NCwgc3lzX2xsc2Vlaywgc3lzX21sb2NrLCBzeXNfbXVubG9jaywgc3lzMzJfbWxvY2thbGwKIC8qMjQwKi8JLndvcmQgc3lzX211bmxvY2thbGwsIHN5czMyX3NjaGVkX3NldHBhcmFtLCBzeXMzMl9zY2hlZF9nZXRwYXJhbSwgc3lzMzJfc2NoZWRfc2V0c2NoZWR1bGVyLCBzeXMzMl9zY2hlZF9nZXRzY2hlZHVsZXIKIAkud29yZCBzeXNfc2NoZWRfeWllbGQsIHN5czMyX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsIHN5czMyX3NjaGVkX2dldF9wcmlvcml0eV9taW4sIHN5czMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgY29tcGF0X3N5c19uYW5vc2xlZXAKIC8qMjUwKi8JLndvcmQgc3lzMzJfbXJlbWFwLCBzeXMzMl9zeXNjdGwsIHN5czMyX2dldHNpZCwgc3lzX2ZkYXRhc3luYywgc3lzMzJfbmZzc2VydmN0bAotCS53b3JkIHN5c19uaV9zeXNjYWxsLCBjb21wYXRfc3lzX2Nsb2NrX3NldHRpbWUsIGNvbXBhdF9zeXNfY2xvY2tfZ2V0dGltZSwgY29tcGF0X3N5c19jbG9ja19nZXRyZXMsIHN5czMyX2Nsb2NrX25hbm9zbGVlcAorCS53b3JkIHN5czMyX3N5bmNfZmlsZV9yYW5nZSwgY29tcGF0X3N5c19jbG9ja19zZXR0aW1lLCBjb21wYXRfc3lzX2Nsb2NrX2dldHRpbWUsIGNvbXBhdF9zeXNfY2xvY2tfZ2V0cmVzLCBzeXMzMl9jbG9ja19uYW5vc2xlZXAKIC8qMjYwKi8JLndvcmQgY29tcGF0X3N5c19zY2hlZF9nZXRhZmZpbml0eSwgY29tcGF0X3N5c19zY2hlZF9zZXRhZmZpbml0eSwgc3lzMzJfdGltZXJfc2V0dGltZSwgY29tcGF0X3N5c190aW1lcl9nZXR0aW1lLCBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgogCS53b3JkIHN5c190aW1lcl9kZWxldGUsIGNvbXBhdF9zeXNfdGltZXJfY3JlYXRlLCBzeXNfbmlfc3lzY2FsbCwgY29tcGF0X3N5c19pb19zZXR1cCwgc3lzX2lvX2Rlc3Ryb3kKIC8qMjcwKi8JLndvcmQgc3lzMzJfaW9fc3VibWl0LCBzeXNfaW9fY2FuY2VsLCBjb21wYXRfc3lzX2lvX2dldGV2ZW50cywgc3lzMzJfbXFfb3Blbiwgc3lzX21xX3VubGluawogCS53b3JkIGNvbXBhdF9zeXNfbXFfdGltZWRzZW5kLCBjb21wYXRfc3lzX21xX3RpbWVkcmVjZWl2ZSwgY29tcGF0X3N5c19tcV9ub3RpZnksIGNvbXBhdF9zeXNfbXFfZ2V0c2V0YXR0ciwgY29tcGF0X3N5c193YWl0aWQKLS8qMjgwKi8JLndvcmQgc3lzX25pX3N5c2NhbGwsIHN5c19hZGRfa2V5LCBzeXNfcmVxdWVzdF9rZXksIHN5c19rZXljdGwsIGNvbXBhdF9zeXNfb3BlbmF0CisvKjI4MCovCS53b3JkIHN5czMyX3RlZSwgc3lzX2FkZF9rZXksIHN5c19yZXF1ZXN0X2tleSwgc3lzX2tleWN0bCwgY29tcGF0X3N5c19vcGVuYXQKIAkud29yZCBzeXNfbWtkaXJhdCwgc3lzX21rbm9kYXQsIHN5c19mY2hvd25hdCwgY29tcGF0X3N5c19mdXRpbWVzYXQsIGNvbXBhdF9zeXNfZnN0YXRhdDY0Ci0vKjI4NSovCS53b3JkIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAorLyoyOTAqLwkud29yZCBzeXNfdW5saW5rYXQsIHN5c19yZW5hbWVhdCwgc3lzX2xpbmthdCwgc3lzX3N5bWxpbmthdCwgc3lzX3JlYWRsaW5rYXQKIAkud29yZCBzeXNfZmNobW9kYXQsIHN5c19mYWNjZXNzYXQsIGNvbXBhdF9zeXNfcHNlbGVjdDYsIGNvbXBhdF9zeXNfcHBvbGwsIHN5c191bnNoYXJlCisvKjMwMCovCS53b3JkIGNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0LCBjb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdAogCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCkBAIC05NCw3ICs5NSw3IEBACiAvKjEwKi8gIC53b3JkIHN5c191bmxpbmssIHN5c19uaXNfc3lzY2FsbCwgc3lzX2NoZGlyLCBzeXNfY2hvd24sIHN5c19ta25vZAogLyoxNSovCS53b3JkIHN5c19jaG1vZCwgc3lzX2xjaG93biwgc3BhcmNfYnJrLCBzeXNfcGVyZmN0ciwgc3lzX2xzZWVrCiAvKjIwKi8JLndvcmQgc3lzX2dldHBpZCwgc3lzX2NhcGdldCwgc3lzX2NhcHNldCwgc3lzX3NldHVpZCwgc3lzX2dldHVpZAotLyoyNSovCS53b3JkIHN5c19uaXNfc3lzY2FsbCwgc3lzX3B0cmFjZSwgc3lzX2FsYXJtLCBzeXNfc2lnYWx0c3RhY2ssIHN5c19uaXNfc3lzY2FsbAorLyoyNSovCS53b3JkIHN5c192bXNwbGljZSwgc3lzX3B0cmFjZSwgc3lzX2FsYXJtLCBzeXNfc2lnYWx0c3RhY2ssIHN5c19uaXNfc3lzY2FsbAogLyozMCovCS53b3JkIHN5c191dGltZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19hY2Nlc3MsIHN5c19uaWNlCiAJLndvcmQgc3lzX25pc19zeXNjYWxsLCBzeXNfc3luYywgc3lzX2tpbGwsIHN5c19uZXdzdGF0LCBzeXNfc2VuZGZpbGU2NAogLyo0MCovCS53b3JkIHN5c19uZXdsc3RhdCwgc3lzX2R1cCwgc3lzX3BpcGUsIHN5c190aW1lcywgc3lzX25pc19zeXNjYWxsCkBAIC0xMzUsMjAgKzEzNiwyMSBAQAogCS53b3JkIHN5c19pcGMsIHN5c19uaXNfc3lzY2FsbCwgc3lzX2Nsb25lLCBzeXNfaW9wcmlvX2dldCwgc3lzX2FkanRpbWV4CiAvKjIyMCovCS53b3JkIHN5c19uaXNfc3lzY2FsbCwgc3lzX25pX3N5c2NhbGwsIHN5c19kZWxldGVfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCwgc3lzX2dldHBnaWQKIAkud29yZCBzeXNfYmRmbHVzaCwgc3lzX3N5c2ZzLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zZXRmc3VpZCwgc3lzX3NldGZzZ2lkCi0vKjIzMCovCS53b3JkIHN5c19zZWxlY3QsIHN5c19uaXNfc3lzY2FsbCwgc3lzX25pc19zeXNjYWxsLCBzeXNfc3RpbWUsIHN5c19zdGF0ZnM2NAorLyoyMzAqLwkud29yZCBzeXNfc2VsZWN0LCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zcGxpY2UsIHN5c19zdGltZSwgc3lzX3N0YXRmczY0CiAJLndvcmQgc3lzX2ZzdGF0ZnM2NCwgc3lzX2xsc2Vlaywgc3lzX21sb2NrLCBzeXNfbXVubG9jaywgc3lzX21sb2NrYWxsCiAvKjI0MCovCS53b3JkIHN5c19tdW5sb2NrYWxsLCBzeXNfc2NoZWRfc2V0cGFyYW0sIHN5c19zY2hlZF9nZXRwYXJhbSwgc3lzX3NjaGVkX3NldHNjaGVkdWxlciwgc3lzX3NjaGVkX2dldHNjaGVkdWxlcgogCS53b3JkIHN5c19zY2hlZF95aWVsZCwgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluLCBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsLCBzeXNfbmFub3NsZWVwCiAvKjI1MCovCS53b3JkIHN5czY0X21yZW1hcCwgc3lzX3N5c2N0bCwgc3lzX2dldHNpZCwgc3lzX2ZkYXRhc3luYywgc3lzX25mc3NlcnZjdGwKLQkud29yZCBzeXNfbmlfc3lzY2FsbCwgc3lzX2Nsb2NrX3NldHRpbWUsIHN5c19jbG9ja19nZXR0aW1lLCBzeXNfY2xvY2tfZ2V0cmVzLCBzeXNfY2xvY2tfbmFub3NsZWVwCisJLndvcmQgc3lzX3N5bmNfZmlsZV9yYW5nZSwgc3lzX2Nsb2NrX3NldHRpbWUsIHN5c19jbG9ja19nZXR0aW1lLCBzeXNfY2xvY2tfZ2V0cmVzLCBzeXNfY2xvY2tfbmFub3NsZWVwCiAvKjI2MCovCS53b3JkIHN5c19zY2hlZF9nZXRhZmZpbml0eSwgc3lzX3NjaGVkX3NldGFmZmluaXR5LCBzeXNfdGltZXJfc2V0dGltZSwgc3lzX3RpbWVyX2dldHRpbWUsIHN5c190aW1lcl9nZXRvdmVycnVuCiAJLndvcmQgc3lzX3RpbWVyX2RlbGV0ZSwgc3lzX3RpbWVyX2NyZWF0ZSwgc3lzX25pX3N5c2NhbGwsIHN5c19pb19zZXR1cCwgc3lzX2lvX2Rlc3Ryb3kKIC8qMjcwKi8JLndvcmQgc3lzX2lvX3N1Ym1pdCwgc3lzX2lvX2NhbmNlbCwgc3lzX2lvX2dldGV2ZW50cywgc3lzX21xX29wZW4sIHN5c19tcV91bmxpbmsKIAkud29yZCBzeXNfbXFfdGltZWRzZW5kLCBzeXNfbXFfdGltZWRyZWNlaXZlLCBzeXNfbXFfbm90aWZ5LCBzeXNfbXFfZ2V0c2V0YXR0ciwgc3lzX3dhaXRpZAotLyoyODAqLwkud29yZCBzeXNfbmlzX3N5c2NhbGwsIHN5c19hZGRfa2V5LCBzeXNfcmVxdWVzdF9rZXksIHN5c19rZXljdGwsIHN5c19vcGVuYXQKKy8qMjgwKi8JLndvcmQgc3lzX3RlZSwgc3lzX2FkZF9rZXksIHN5c19yZXF1ZXN0X2tleSwgc3lzX2tleWN0bCwgc3lzX29wZW5hdAogCS53b3JkIHN5c19ta2RpcmF0LCBzeXNfbWtub2RhdCwgc3lzX2ZjaG93bmF0LCBzeXNfZnV0aW1lc2F0LCBzeXNfZnN0YXRhdDY0Ci0vKjI4NSovCS53b3JkIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAorLyoyOTAqLwkud29yZCBzeXNfdW5saW5rYXQsIHN5c19yZW5hbWVhdCwgc3lzX2xpbmthdCwgc3lzX3N5bWxpbmthdCwgc3lzX3JlYWRsaW5rYXQKIAkud29yZCBzeXNfZmNobW9kYXQsIHN5c19mYWNjZXNzYXQsIHN5c19wc2VsZWN0Niwgc3lzX3Bwb2xsLCBzeXNfdW5zaGFyZQorLyozMDAqLwkud29yZCBzeXNfc2V0X3JvYnVzdF9saXN0LCBzeXNfZ2V0X3JvYnVzdF9saXN0CiAKICNpZiBkZWZpbmVkKENPTkZJR19TVU5PU19FTVVMKSB8fCBkZWZpbmVkKENPTkZJR19TT0xBUklTX0VNVUwpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TT0xBUklTX0VNVUxfTU9EVUxFKQpAQCAtMjYxLDUgKzI2Myw1IEBACiAvKjI5MCovCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKIAkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCiAJLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzCisJLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZmYwOTBiYi4uNTYzZGI1MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTEzMCw5ICsxMTMwLDkgQEAKIAkgICAgICAgKHJlY292ZXJhYmxlID8gS0VSTl9XQVJOSU5HIDogS0VSTl9DUklUKSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCSAgICAgICBhZnNyLCBhZmFyLAogCSAgICAgICAoYWZzciAmIENIQUZTUl9UTDEpID8gMSA6IDApOwotCXByaW50aygiJXMiICJFUlJPUiglZCk6IFRQQ1slMDE2bHhdIFROUENbJTAxNmx4XSBUU1RBVEVbJTAxNmx4XVxuIiwKKwlwcmludGsoIiVzIiAiRVJST1IoJWQpOiBUUENbJWx4XSBUTlBDWyVseF0gTzdbJWx4XSBUU1RBVEVbJWx4XVxuIiwKIAkgICAgICAgKHJlY292ZXJhYmxlID8gS0VSTl9XQVJOSU5HIDogS0VSTl9DUklUKSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAotCSAgICAgICByZWdzLT50cGMsIHJlZ3MtPnRucGMsIHJlZ3MtPnRzdGF0ZSk7CisJICAgICAgIHJlZ3MtPnRwYywgcmVncy0+dG5wYywgcmVncy0+dV9yZWdzW1VSRUdfSTddLCByZWdzLT50c3RhdGUpOwogCXByaW50aygiJXMiICJFUlJPUiglZCk6IE1fU1lORCglbHgpLCAgRV9TWU5EKCVseCklcyVzXG4iLAogCSAgICAgICAocmVjb3ZlcmFibGUgPyBLRVJOX1dBUk5JTkcgOiBLRVJOX0NSSVQpLCBzbXBfcHJvY2Vzc29yX2lkKCksCiAJICAgICAgIChhZnNyICYgQ0hBRlNSX01fU1lORFJPTUUpID4+IENIQUZTUl9NX1NZTkRST01FX1NISUZULApAQCAtMTc5Nyw3ICsxNzk3LDkgQEAKIAl9OwogfQogCi1zdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5ICplbnQsIGludCBjcHUsIGNvbnN0IGNoYXIgKnBmeCwgYXRvbWljX3QgKm9jbnQpCitleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOworCitzdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzdW40dl9lcnJvcl9lbnRyeSAqZW50LCBpbnQgY3B1LCBjb25zdCBjaGFyICpwZngsIGF0b21pY190ICpvY250KQogewogCWludCBjbnQ7CiAKQEAgLTE4MzAsNiArMTgzMiw4IEBACiAJICAgICAgIHBmeCwKIAkgICAgICAgZW50LT5lcnJfcmFkZHIsIGVudC0+ZXJyX3NpemUsIGVudC0+ZXJyX2NwdSk7CiAKKwlfX3Nob3dfcmVncyhyZWdzKTsKKwogCWlmICgoY250ID0gYXRvbWljX3JlYWQob2NudCkpICE9IDApIHsKIAkJYXRvbWljX3NldChvY250LCAwKTsKIAkJd21iKCk7CkBAIC0xODYyLDcgKzE4NjYsNyBAQAogCiAJcHV0X2NwdSgpOwogCi0Jc3VuNHZfbG9nX2Vycm9yKCZsb2NhbF9jb3B5LCBjcHUsCisJc3VuNHZfbG9nX2Vycm9yKHJlZ3MsICZsb2NhbF9jb3B5LCBjcHUsCiAJCQlLRVJOX0VSUiAiUkVTVU1BQkxFIEVSUk9SIiwKIAkJCSZzdW40dl9yZXN1bV9vZmxvd19jbnQpOwogfQpAQCAtMTkxMCw3ICsxOTE0LDcgQEAKIAl9CiAjZW5kaWYKIAotCXN1bjR2X2xvZ19lcnJvcigmbG9jYWxfY29weSwgY3B1LAorCXN1bjR2X2xvZ19lcnJvcihyZWdzLCAmbG9jYWxfY29weSwgY3B1LAogCQkJS0VSTl9FTUVSRyAiTk9OLVJFU1VNQUJMRSBFUlJPUiIsCiAJCQkmc3VuNHZfbm9ucmVzdW1fb2Zsb3dfY250KTsKIApAQCAtMjIwMCw3ICsyMjA0LDYgQEAKIHZvaWQgZGllX2lmX2tlcm5lbChjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0YXRpYyBpbnQgZGllX2NvdW50ZXI7Ci0JZXh0ZXJuIHZvaWQgX19zaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIAlleHRlcm4gdm9pZCBzbXBfcmVwb3J0X3JlZ3Modm9pZCk7CiAJaW50IGNvdW50ID0gMDsKIAkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvY2hlY2tzdW0uUyBiL2FyY2gvc3BhcmM2NC9saWIvY2hlY2tzdW0uUwppbmRleCBiYTljZDNjLi4xZDIzMGY2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2NoZWNrc3VtLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9jaGVja3N1bS5TCkBAIC0xNjUsOCArMTY1LDkgQEAKIAlzbGwJCSVnMSwgOCwgJWcxCiAJb3IJCSVvNSwgJWcxLCAlbzQKIAotMToJYWRkCQklbzIsICVvNCwgJW8yCisxOglhZGRjYwkJJW8yLCAlbzQsICVvMgorCWFkZGMJCSVnMCwgJW8yLCAlbzIKIAogY3N1bV9wYXJ0aWFsX2ZpbmlzaDoKIAlyZXRsCi0JIG1vdgkJJW8yLCAlbzAKKwkgc3JsCQklbzIsIDAsICVvMApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHkuUyBiL2FyY2gvc3BhcmM2NC9saWIvY3N1bV9jb3B5LlMKaW5kZXggNzFhZjQ4OC4uZTU2NmM3NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHkuUworKysgYi9hcmNoL3NwYXJjNjQvbGliL2NzdW1fY29weS5TCkBAIC0yMjEsMTEgKzIyMSwxMiBAQAogCXNsbAkJJWcxLCA4LCAlZzEKIAlvcgkJJW81LCAlZzEsICVvNAogCi0xOglhZGQJCSVvMywgJW80LCAlbzMKKzE6CWFkZGNjCQklbzMsICVvNCwgJW8zCisJYWRkYwkJJWcwLCAlbzMsICVvMwogCiA3MDoKIAlyZXRsCi0JIG1vdgkJJW8zLCAlbzAKKwkgc3JsCQklbzMsIDAsICVvMAogCiA5NToJbW92CQkwLCBHTE9CQUxfU1BBUkUKIAlicmxleixwbgklbzIsIDRmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYyBiL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCmluZGV4IDBkYjJmN2QuLjZlMDAyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCkBAIC0zMjcsOCArMzI3LDEyIEBACiAJCWluc24gPSBnZXRfZmF1bHRfaW5zbihyZWdzLCAwKTsKIAkJaWYgKCFpbnNuKQogCQkJZ290byBjb250aW51ZV9mYXVsdDsKKwkJLyogQWxsIGxvYWRzLCBzdG9yZXMgYW5kIGF0b21pY3MgaGF2ZSBiaXRzIDMwIGFuZCAzMSBib3RoIHNldAorCQkgKiBpbiB0aGUgaW5zdHJ1Y3Rpb24uICBCaXQgMjEgaXMgc2V0IGluIGFsbCBzdG9yZXMsIGJ1dCB3ZQorCQkgKiBoYXZlIHRvIGF2b2lkIHByZWZldGNoZXMgd2hpY2ggYWxzbyBoYXZlIGJpdCAyMSBzZXQuCisJCSAqLwogCQlpZiAoKGluc24gJiAweGMwMjAwMDAwKSA9PSAweGMwMjAwMDAwICYmCi0JCSAgICAoaW5zbiAmIDB4MTc4MDAwMCkgIT0gMHgxNjgwMDAwKSB7CisJCSAgICAoaW5zbiAmIDB4MDE3ODAwMDApICE9IDB4MDE2ODAwMDApIHsKIAkJCS8qIERvbid0IGJvdGhlciB1cGRhdGluZyB0aHJlYWQgc3RydWN0IHZhbHVlLAogCQkJICogYmVjYXVzZSB1cGRhdGVfbW11X2NhY2hlIG9ubHkgY2FyZXMgd2hpY2ggdGxiCiAJCQkgKiB0aGUgYWNjZXNzIGNhbWUgZnJvbS4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggMDc0NjIwZC4uZmJiYmViYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTE5OCw2ICsxOTgsMTMgQEAKIAlwbWRfdCAqcG1kOwogCXB0ZV90ICpwdGUgPSBOVUxMOwogCisJLyogV2UgbXVzdCBhbGlnbiB0aGUgYWRkcmVzcywgYmVjYXVzZSBvdXIgY2FsbGVyIHdpbGwgcnVuCisJICogc2V0X2h1Z2VfcHRlX2F0KCkgb24gd2hhdGV2ZXIgd2UgcmV0dXJuLCB3aGljaCB3cml0ZXMgb3V0CisJICogYWxsIG9mIHRoZSBzdWItcHRlcyBmb3IgdGhlIGh1Z2VwYWdlIHJhbmdlLiAgU28gd2UgaGF2ZQorCSAqIHRvIGdpdmUgaXQgdGhlIGZpcnN0IHN1Y2ggc3ViLXB0ZS4KKwkgKi8KKwlhZGRyICY9IEhQQUdFX01BU0s7CisKIAlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKIAlwdWQgPSBwdWRfYWxsb2MobW0sIHBnZCwgYWRkcik7CiAJaWYgKHB1ZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL3RsYi5jIGIvYXJjaC9zcGFyYzY0L21tL3RsYi5jCmluZGV4IGEwNzljZjQuLjNmMTBmYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS90bGIuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vdGxiLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtMjQsNiArMjUsOCBAQAogewogCXN0cnVjdCBtbXVfZ2F0aGVyICptcCA9ICZfX2dldF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKIAorCXByZWVtcHRfZGlzYWJsZSgpOworCiAJaWYgKG1wLT50bGJfbnIpIHsKIAkJZmx1c2hfdHNiX3VzZXIobXApOwogCkBAIC0zOCw2ICs0MSw4IEBACiAJCX0KIAkJbXAtPnRsYl9uciA9IDA7CiAJfQorCisJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAogdm9pZCB0bGJfYmF0Y2hfYWRkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3Qgb3JpZykKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZwppbmRleCA1OTgyZmUyLi43NmU4NWJiIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcKKysrIGIvYXJjaC91bS9LY29uZmlnCkBAIC0yMiw2ICsyMiw5IEBACiBjb25maWcgUENJCiAJYm9vbAogCitjb25maWcgUENNQ0lBCisJYm9vbAorCiBjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKIAlib29sCiAJZGVmYXVsdCB5CkBAIC01NCwyMCArNTcsNiBAQAogCWNocm9vdCwgYW5kIHlvdSBkaXNhYmxlIENPTkZJR19NT0RFX1RULCB5b3UgcHJvYmFibHkgd2FudCB0byBzYXkgWQogCWhlcmUuCiAKLWNvbmZpZyBIT1NUXzJHXzJHCi0JYm9vbCAiMkcvMkcgaG9zdCBhZGRyZXNzIHNwYWNlIHNwbGl0IgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gTU9ERV9UVAotCWhlbHAKLQlUaGlzIGlzIG5lZWRlZCB3aGVuIHRoZSBob3N0IG9uIHdoaWNoIHlvdSBydW4gaGFzIGEgMkcvMkcgbWVtb3J5Ci0Jc3BsaXQsIGluc3RlYWQgb2YgdGhlIGN1c3RvbWFyeSAzRy8xRy4KLQotCU5vdGUgdGhhdCB0byBlbmFibGUgc3VjaCBhIGhvc3QKLQljb25maWd1cmF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZSBvbmx5IGluIHNvbWUgY2FzZXMsIHlvdSBuZWVkIHNwZWNpYWwKLQlob3N0IHBhdGNoZXMuCi0KLQlTbywgaWYgeW91IGRvIG5vdCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5ICdOJy4KLQogY29uZmlnIEtFUk5FTF9IQUxGX0dJR1MKIAlpbnQgIktlcm5lbCBhZGRyZXNzIHNwYWNlIHNpemUgKGluIC41RyB1bml0cykiCiAJZGVmYXVsdCAiMSIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy5pMzg2IGIvYXJjaC91bS9LY29uZmlnLmkzODYKaW5kZXggODVlNmE1NS4uZjZlYjcyZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnLmkzODYKKysrIGIvYXJjaC91bS9LY29uZmlnLmkzODYKQEAgLTE2LDYgKzE2LDE5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgSE9TVF8yR18yRworCWJvb2wgIjJHLzJHIGhvc3QgYWRkcmVzcyBzcGFjZSBzcGxpdCIKKwlkZWZhdWx0IG4KKwloZWxwCisJVGhpcyBpcyBuZWVkZWQgd2hlbiB0aGUgaG9zdCBvbiB3aGljaCB5b3UgcnVuIGhhcyBhIDJHLzJHIG1lbW9yeQorCXNwbGl0LCBpbnN0ZWFkIG9mIHRoZSBjdXN0b21hcnkgM0cvMUcuCisKKwlOb3RlIHRoYXQgdG8gZW5hYmxlIHN1Y2ggYSBob3N0CisJY29uZmlndXJhdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2Ugb25seSBpbiBzb21lIGNhc2VzLCB5b3UgbmVlZCBzcGVjaWFsCisJaG9zdCBwYXRjaGVzLgorCisJU28sIGlmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSAnTicuCisKIGNvbmZpZyBUT1BfQUREUgogIAloZXgKICAJZGVmYXVsdCAweGMwMDAwMDAwIGlmICFIT1NUXzJHXzJHCkBAIC0zNSwxMSArNDgsMTMgQEAKIAogY29uZmlnIFNUVUJfQ09ERQogCWhleAotCWRlZmF1bHQgMHhiZmZmZTAwMAorCWRlZmF1bHQgMHhiZmZmZTAwMCBpZiAhSE9TVF8yR18yRworCWRlZmF1bHQgMHg3ZmZmZTAwMCBpZiBIT1NUXzJHXzJHCiAKIGNvbmZpZyBTVFVCX0RBVEEKIAloZXgKLQlkZWZhdWx0IDB4YmZmZmYwMDAKKwlkZWZhdWx0IDB4YmZmZmYwMDAgaWYgIUhPU1RfMkdfMkcKKwlkZWZhdWx0IDB4N2ZmZmYwMDAgaWYgSE9TVF8yR18yRwogCiBjb25maWcgU1RVQl9TVEFSVAogCWhleApkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZSBiL2FyY2gvdW0vTWFrZWZpbGUKaW5kZXggOGQxNGM3YS4uZjZhZDgzMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZQorKysgYi9hcmNoL3VtL01ha2VmaWxlCkBAIC0yMCw3ICsyMCw3IEBACiAKICMgSGF2ZSB0byBwcmVjZWRlIHRoZSBpbmNsdWRlIGJlY2F1c2UgdGhlIGluY2x1ZGVkIE1ha2VmaWxlcyByZWZlcmVuY2UgdGhlbS4KIFNZTUxJTktfSEVBREVSUyA6PSBhcmNocGFyYW0uaCBzeXN0ZW0uaCBzaWdjb250ZXh0LmggcHJvY2Vzc29yLmggcHRyYWNlLmggXAotCW1vZHVsZS5oIHZtLWZsYWdzLmggZWxmLmggbGR0LmgKKwltb2R1bGUuaCB2bS1mbGFncy5oIGVsZi5oIGhvc3RfbGR0LmgKIFNZTUxJTktfSEVBREVSUyA6PSAkKGZvcmVhY2ggaGVhZGVyLCQoU1lNTElOS19IRUFERVJTKSxpbmNsdWRlL2FzbS11bS8kKGhlYWRlcikpCiAKICMgWFhYOiBUaGUgIm9zIiBzeW1saW5rIGlzIG9ubHkgdXNlZCBieSBhcmNoL3VtL2luY2x1ZGUvb3MuaCwgd2hpY2ggaW5jbHVkZXMKQEAgLTk2LDcgKzk2LDggQEAKIGFsbDogbGludXgKIAogbGludXg6IHZtbGludXgKLQlsbiAtZiAkPCAkQAorCUBlY2hvICcgIExJTksgJEAnCisJJChRKWxuIC1mICQ8ICRACiAKIGRlZmluZSBhcmNoaGVscAogICBlY2hvICcqIGxpbnV4CQktIEJpbmFyeSBrZXJuZWwgaW1hZ2UgKC4vbGludXgpIC0gZm9yIGJhY2t3YXJkJwpAQCAtMTE3LDYgKzExOCwxMCBAQAogTElOSy0kKENPTkZJR19MRF9TQ1JJUFRfU1RBVElDKSArPSAtc3RhdGljCiBMSU5LLSQoQ09ORklHX0xEX1NDUklQVF9EWU4pICs9IC1XbCwtcnBhdGgsL2xpYgogCitDRkxBR1NfTk9fSEFSREVOSU5HIDo9ICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tUElDLCkgJChjYWxsIGNjLW9wdGlvbiwgLWZuby1waWMsKSBcCisJJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IsKSBcCisJJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3ItYWxsLCkKKwogQ1BQX01PREUtJChDT05GSUdfTU9ERV9UVCkgOj0gLURNT0RFX1RUCiBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSID89IDIKIFNUQUNLX1NJWkUgOj0gJChzaGVsbCBlY2hvICQkWyA0MDk2ICogKDEgPDwgJChDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSKSkgXSApCkBAIC0xMjksNyArMTM0LDcgQEAKIAktRFNUQVJUPSQoU1RBUlQpIC1ERUxGX0FSQ0g9JChFTEZfQVJDSCkgXAogCS1ERUxGX0ZPUk1BVD0iJChFTEZfRk9STUFUKSIgJChDUFBfTU9ERS15KSBcCiAJLURLRVJORUxfU1RBQ0tfU0laRT0kKFNUQUNLX1NJWkUpIFwKLQktRFVOTUFQX1BBVEg9YXJjaC91bS9zeXMtJChTVUJBUkNIKS91bm1hcF9maW4ubworCS1EVU5NQVBfUEFUSD1hcmNoL3VtL3N5cy0kKFNVQkFSQ0gpL3VubWFwLm8KIAogI1RoZSB3cmFwcGVycyB3aWxsIHNlbGVjdCB3aGV0aGVyIHVzaW5nICJtYWxsb2MiIG9yIHRoZSBrZXJuZWwgYWxsb2NhdG9yLgogTElOS19XUkFQUyA9IC1XbCwtLXdyYXAsbWFsbG9jIC1XbCwtLXdyYXAsZnJlZSAtV2wsLS13cmFwLGNhbGxvYwpAQCAtMTUwLDggKzE1NSw3IEBACiAJJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oIFwKIAkkKEFSQ0hfRElSKS9pbmNsdWRlL2tlcm5fY29uc3RhbnRzLmggJChBUkNIX0RJUikvS2NvbmZpZy5hcmNoCiAKLU1SUFJPUEVSX0ZJTEVTICs9ICQoU1lNTElOS19IRUFERVJTKSAkKEFSQ0hfU1lNTElOS1MpIFwKLQkkKGFkZHByZWZpeCAkKEFSQ0hfRElSKS9rZXJuZWwvLCQoS0VSTl9TWU1MSU5LUykpICQoQVJDSF9ESVIpL29zCitNUlBST1BFUl9GSUxFUyArPSAkKEFSQ0hfU1lNTElOS1MpCiAKIGFyY2hjbGVhbjoKIAlAZmluZCAuIFwoIC1uYW1lICcqLmJiJyAtbyAtbmFtZSAnKi5iYmcnIC1vIC1uYW1lICcqLmRhJyBcCkBAIC0xNjAsNiArMTY0LDcgQEAKICQoU1lNTElOS19IRUFERVJTKToKIAlAZWNobyAnICBTWU1MSU5LICRAJwogaWZuZXEgKCQoS0JVSUxEX1NSQyksKQorCSQoUSlta2RpciAtcCAkKG9ianRyZWUpL2luY2x1ZGUvYXNtLXVtCiAJJChRKWxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS11bS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSktJChTVUJBUkNIKSQoc3VmZml4ICRAKSAkQAogZWxzZQogCSQoUSljZCAkKFRPUERJUikvJChkaXIgJEApIDsgXApAQCAtMTY5LDcgKzE3NCw3IEBACiBpbmNsdWRlL2FzbS11bS9hcmNoOgogCUBlY2hvICcgIFNZTUxJTksgJEAnCiBpZm5lcSAoJChLQlVJTERfU1JDKSwpCi0JJChRKW1rZGlyIC1wIGluY2x1ZGUvYXNtLXVtCisJJChRKW1rZGlyIC1wICQob2JqdHJlZSkvaW5jbHVkZS9hc20tdW0KIAkkKFEpbG4gLWZzbiAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLSQoU1VCQVJDSCkgaW5jbHVkZS9hc20tdW0vYXJjaAogZWxzZQogCSQoUSljZCAkKFRPUERJUikvaW5jbHVkZS9hc20tdW0gJiYgbG4gLXNmIC4uL2FzbS0kKFNVQkFSQ0gpIGFyY2gKQEAgLTIwMyw4ICsyMDgsOCBAQAogJChBUkNIX0RJUikvaW5jbHVkZS91bWwtY29uZmlnLmggOiBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmgKIAkkKGNhbGwgZmlsZWNoayx1bWxjb25maWcpCiAKLSQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5zOiAkKEFSQ0hfRElSKS9zeXMtJChTVUJBUkNIKS91c2VyLW9mZnNldHMuYwotCSQoQ0MpICQoVVNFUl9DRkxBR1MpIC1TIC1vICRAICQ8CiskKEFSQ0hfRElSKS9zeXMtJChTVUJBUkNIKS91c2VyLW9mZnNldHMuczogRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKEFSQ0hfRElSKS9zeXMtJChTVUJBUkNIKSAkQAogCiBkZWZpbmUgZmlsZWNoa19nZW4tYXNtLW9mZnNldHMKICAgICAgICAgKHNldCAtZTsgXApAQCAtMjE5LDEzICsyMjQsMTEgQEAKICAgICAgICAgIGVjaG8gIiI7ICkKIGVuZGVmCiAKLSQoQVJDSF9ESVIpL2luY2x1ZGUvdXNlcl9jb25zdGFudHMuaDogJChBUkNIX0RJUikvdXNlci1vZmZzZXRzLnMKKyQoQVJDSF9ESVIpL2luY2x1ZGUvdXNlcl9jb25zdGFudHMuaDogJChBUkNIX0RJUikvc3lzLSQoU1VCQVJDSCkvdXNlci1vZmZzZXRzLnMKIAkkKGNhbGwgZmlsZWNoayxnZW4tYXNtLW9mZnNldHMpCiAKLUNMRUFOX0ZJTEVTICs9ICQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5zCi0KICQoQVJDSF9ESVIpL2luY2x1ZGUva2Vybl9jb25zdGFudHMuaDogJChvYmp0cmVlKS8kKEFSQ0hfRElSKS9pbmNsdWRlCiAJQGVjaG8gJyAgU1lNTElOSyAkQCcKLQkkKFEpIGxuIC1zZiAuLi8uLi8uLi9pbmNsdWRlL2FzbS11bS9hc20tb2Zmc2V0cy5oICRACisJJChRKWxuIC1zZiAuLi8uLi8uLi9pbmNsdWRlL2FzbS11bS9hc20tb2Zmc2V0cy5oICRACiAKLWV4cG9ydCBTVUJBUkNIIFVTRVJfQ0ZMQUdTIE9TCitleHBvcnQgU1VCQVJDSCBVU0VSX0NGTEFHUyBDRkxBR1NfTk9fSEFSREVOSU5HIE9TCmRpZmYgLS1naXQgYS9hcmNoL3VtL01ha2VmaWxlLWkzODYgYi9hcmNoL3VtL01ha2VmaWxlLWkzODYKaW5kZXggN2EwZTA0ZS4uYjY1Y2ExMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZS1pMzg2CisrKyBiL2FyY2gvdW0vTWFrZWZpbGUtaTM4NgpAQCAtMzMsNSArMzMsOSBAQAogIyBwcmV2ZW50IGdjYyBmcm9tIGtlZXBpbmcgdGhlIHN0YWNrIDE2IGJ5dGUgYWxpZ25lZC4gVGFrZW4gZnJvbSBpMzg2LgogY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0yKQogCisjIFByZXZlbnQgc3ByaW50ZiBpbiBuZnNkIGZyb20gYmVpbmcgY29udmVydGVkIHRvIHN0cmNweSBhbmQgcmVzdWx0aW5nIGluCisjIGFuIHVucmVzb2x2ZWQgcmVmZXJlbmNlLgorY2ZsYWdzLXkgKz0gLWZmcmVlc3RhbmRpbmcKKwogQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCiBVU0VSX0NGTEFHUyArPSAkKGNmbGFncy15KQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQgYi9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NAppbmRleCAzOGRmMzExLi5kZmQ4OGI2IDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NAorKysgYi9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NApAQCAtMSw3ICsxLDcgQEAKICMgQ29weXJpZ2h0IDIwMDMgLSAyMDA0IFBhdGhzY2FsZSwgSW5jCiAjIFJlbGVhc2VkIHVuZGVyIHRoZSBHUEwKIAotbGlicy15ICs9IGFyY2gvdW0vc3lzLXg4Nl82NC8KK2NvcmUteSArPSBhcmNoL3VtL3N5cy14ODZfNjQvCiBTVEFSVCA6PSAweDYwMDAwMDAwCiAKICNXZSAjdW5kZWYgX194ODZfNjRfXyBmb3Iga2VybmVsc3BhY2UsIG5vdCBmb3IgdXNlcnNwYWNlIHdoZXJlCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RlZmNvbmZpZyBiL2FyY2gvdW0vZGVmY29uZmlnCmluZGV4IDgwZDMwZDEuLjQwMmE3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZGVmY29uZmlnCisrKyBiL2FyY2gvdW0vZGVmY29uZmlnCkBAIC0xLDE0ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM2LW1tMQotIyBUdWUgSnVuIDE0IDE4OjIyOjIxIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzMKKyMgRnJpIEFwciAyOCAwOTozMToyMCAyMDA2CiAjCiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfVU1MPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfSVJRX1JFTEVBU0VfTUVUSE9EPXkKIAogIwogIyBVTUwtc3BlY2lmaWMgb3B0aW9ucwpAQCAtMTYsOCArMTUsNTAgQEAKICMgQ09ORklHX01PREVfVFQgaXMgbm90IHNldAogIyBDT05GSUdfU1RBVElDX0xJTksgaXMgbm90IHNldAogQ09ORklHX01PREVfU0tBUz15CisKKyMKKyMgSG9zdCBwcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKKyMKKyMgQ09ORklHX00zODYgaXMgbm90IHNldAorIyBDT05GSUdfTTQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19NNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX001ODZUU0MgaXMgbm90IHNldAorIyBDT05GSUdfTTU4Nk1NWCBpcyBub3Qgc2V0CitDT05GSUdfTTY4Nj15CisjIENPTkZJR19NUEVOVElVTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QRU5USVVNSUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QRU5USVVNTSBpcyBub3Qgc2V0CisjIENPTkZJR19NUEVOVElVTTQgaXMgbm90IHNldAorIyBDT05GSUdfTUs2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01LNyBpcyBub3Qgc2V0CisjIENPTkZJR19NSzggaXMgbm90IHNldAorIyBDT05GSUdfTUNSVVNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUZGSUNFT04gaXMgbm90IHNldAorIyBDT05GSUdfTVdJTkNISVBDNiBpcyBub3Qgc2V0CisjIENPTkZJR19NV0lOQ0hJUDIgaXMgbm90IHNldAorIyBDT05GSUdfTVdJTkNISVAzRCBpcyBub3Qgc2V0CisjIENPTkZJR19NR0VPREVHWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUdFT0RFX0xYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01DWVJJWElJSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVklBQzNfMiBpcyBub3Qgc2V0CisjIENPTkZJR19YODZfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfWDg2X0NNUFhDSEc9eQorQ09ORklHX1g4Nl9YQUREPXkKK0NPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19YODZfUFBST19GRU5DRT15CitDT05GSUdfWDg2X1dQX1dPUktTX09LPXkKK0NPTkZJR19YODZfSU5WTFBHPXkKK0NPTkZJR19YODZfQlNXQVA9eQorQ09ORklHX1g4Nl9QT1BBRF9PSz15CitDT05GSUdfWDg2X0NNUFhDSEc2ND15CitDT05GSUdfWDg2X0dPT0RfQVBJQz15CitDT05GSUdfWDg2X1VTRV9QUFJPX0NIRUNLU1VNPXkKK0NPTkZJR19YODZfVFNDPXkKIENPTkZJR19VTUxfWDg2PXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19TRU1BUEhPUkVfU0xFRVBFUlM9eQorIyBDT05GSUdfSE9TVF8yR18yRyBpcyBub3Qgc2V0CiBDT05GSUdfVE9QX0FERFI9MHhjMDAwMDAwMAogIyBDT05GSUdfM19MRVZFTF9QR1RBQkxFUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RVQl9DT0RFPTB4YmZmZmUwMDAKQEAgLTI1LDIyICs2NiwyNCBAQAogQ09ORklHX1NUVUJfU1RBUlQ9MHhiZmZmZTAwMAogQ09ORklHX0FSQ0hfSEFTX1NDX1NJR05BTFM9eQogQ09ORklHX0FSQ0hfUkVVU0VfSE9TVF9WU1lTQ0FMTF9BUkVBPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX0xEX1NDUklQVF9EWU49eQogQ09ORklHX05FVD15CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQogIyBDT05GSUdfSE9TVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQUEZTIGlzIG5vdCBzZXQKIENPTkZJR19NQ09OU09MRT15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUXzJHXzJHIGlzIG5vdCBzZXQKIENPTkZJR19ORVNUX0xFVkVMPTAKLUNPTkZJR19LRVJORUxfSEFMRl9HSUdTPTEKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUj0yCiBDT05GSUdfVU1MX1JFQUxfVElNRV9DTE9DSz15CkBAIC00OSw3ICs5Miw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTU3LDYgKzk5LDcgQEAKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNjQsMjYgKzEwNywyOCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC05MSwxOCArMTM2LDQzIEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CiAKICMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIyBCbG9jayBsYXllcgogIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIworIyBCbG9jayBkZXZpY2VzCisjCitDT05GSUdfQkxLX0RFVl9VQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9VQkRfU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OPXkKKyMgQ09ORklHX01NQVBQRVIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIERldmljZXMKQEAgLTEyNyw1MCArMTk3LDIzIEBACiBDT05GSUdfU09VTkQ9bQogQ09ORklHX0hPU1RBVURJTz1tCiBDT05GSUdfVU1MX1JBTkRPTT15Ci0jIENPTkZJR19NTUFQUEVSIGlzIG5vdCBzZXQKIAogIwotIyBCbG9jayBkZXZpY2VzCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKLUNPTkZJR19CTEtfREVWX1VCRD15Ci1DT05GSUdfQkxLX0RFVl9VQkRfU1lOQz15Ci1DT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLQotIwotIyBVTUwgTmV0d29yayBEZXZpY2VzCi0jCi1DT05GSUdfVU1MX05FVD15Ci1DT05GSUdfVU1MX05FVF9FVEhFUlRBUD15Ci1DT05GSUdfVU1MX05FVF9UVU5UQVA9eQotQ09ORklHX1VNTF9ORVRfU0xJUD15Ci1DT05GSUdfVU1MX05FVF9EQUVNT049eQotQ09ORklHX1VNTF9ORVRfTUNBU1Q9eQotQ09ORklHX1VNTF9ORVRfU0xJUlA9eQotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JraW5nCiAjCiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0xNzgsNiArMjIxLDcgQEAKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKICMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldApAQCAtMTg2LDI3ICsyMzAsMzEgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKLSMgVENQIGNvbmdlc3Rpb24gY29udHJvbAorIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPXkKLUNPTkZJR19UQ1BfQ09OR19IVENQPXkKLSMgQ09ORklHX1RDUF9DT05HX0hTVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0hZQkxBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX1ZFR0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogCiAjCiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yMjQsMjcgKzI3Miw0NyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfS0dEQk9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgVU1MIE5ldHdvcmsgRGV2aWNlcworIworQ09ORklHX1VNTF9ORVQ9eQorQ09ORklHX1VNTF9ORVRfRVRIRVJUQVA9eQorQ09ORklHX1VNTF9ORVRfVFVOVEFQPXkKK0NPTkZJR19VTUxfTkVUX1NMSVA9eQorQ09ORklHX1VNTF9ORVRfREFFTU9OPXkKK0NPTkZJR19VTUxfTkVUX01DQVNUPXkKKyMgQ09ORklHX1VNTF9ORVRfUENBUCBpcyBub3Qgc2V0CitDT05GSUdfVU1MX05FVF9TTElSUD15CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPW0KICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQogCiAjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIwogIyBXYW4gaW50ZXJmYWNlcwogIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKQEAgLTI2Myw2ICszMzEsMTMgQEAKICMgQ09ORklHX1NMSVBfTU9ERV9TTElQNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0yNzQsMTcgKzM0OSwxNCBAQAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVI0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GUz15CiAjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIworIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC0yOTUsMTEgKzM2Nyw2IEBACiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTMyMywxNCArMzkwLDEwIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTQzMCw2ICs0OTMsNyBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPW0KICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiAKQEAgLTQ0OCwxMiArNTEyLDE4IEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0xBQj15CisjIENPTkZJR19ERUJVR19TTEFCX0xFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUFJPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQ09WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NBTExfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2Nvdy5oIGIvYXJjaC91bS9kcml2ZXJzL2Nvdy5oCmluZGV4IDA0ZTM5NTguLmRjMzZiMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9jb3cuaAorKysgYi9hcmNoL3VtL2RyaXZlcnMvY293LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIGV4dGVybiBpbnQgcmVhZF9jb3dfaGVhZGVyKGludCAoKnJlYWRlcikoX191NjQsIGNoYXIgKiwgaW50LCB2b2lkICopLAogCQkJICAgdm9pZCAqYXJnLCBfX3UzMiAqdmVyc2lvbl9vdXQsCiAJCQkgICBjaGFyICoqYmFja2luZ19maWxlX291dCwgdGltZV90ICptdGltZV9vdXQsCi0JCQkgICBfX3U2NCAqc2l6ZV9vdXQsIGludCAqc2VjdG9yc2l6ZV9vdXQsCisJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemVfb3V0LCBpbnQgKnNlY3RvcnNpemVfb3V0LAogCQkJICAgX191MzIgKmFsaWduX291dCwgaW50ICpiaXRtYXBfb2Zmc2V0X291dCk7CiAKIGV4dGVybiBpbnQgd3JpdGVfY293X2hlYWRlcihjaGFyICpjb3dfZmlsZSwgaW50IGZkLCBjaGFyICpiYWNraW5nX2ZpbGUsCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvY293X3N5cy5oIGIvYXJjaC91bS9kcml2ZXJzL2Nvd19zeXMuaAppbmRleCA5NGRlNGVhLi43YTViNGFmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY293X3N5cy5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9jb3dfc3lzLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAlyZXR1cm4ob3Nfc2Vla19maWxlKGZkLCBvZmZzZXQpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY293X2ZpbGVfc2l6ZShjaGFyICpmaWxlLCBfX3U2NCAqc2l6ZV9vdXQpCitzdGF0aWMgaW5saW5lIGludCBjb3dfZmlsZV9zaXplKGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZV9vdXQpCiB7CiAJcmV0dXJuKG9zX2ZpbGVfc2l6ZShmaWxlLCBzaXplX291dCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYwppbmRleCA2MTk1MWI3Li4wZWM0MDUyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYwpAQCAtMTcsMzAgKzE3LDM0IEBACiAKICNkZWZpbmUgUEFUSF9MRU5fVjEgMjU2CiAKLXN0cnVjdCBjb3dfaGVhZGVyX3YxIHsKLQlpbnQgbWFnaWM7Ci0JaW50IHZlcnNpb247Ci0JY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjFdOwotCXRpbWVfdCBtdGltZTsKLQlfX3U2NCBzaXplOwotCWludCBzZWN0b3JzaXplOwotfTsKK3R5cGVkZWYgX191MzIgdGltZTMyX3Q7CiAKLSNkZWZpbmUgUEFUSF9MRU5fVjIgTUFYUEFUSExFTgorc3RydWN0IGNvd19oZWFkZXJfdjEgeworCV9fczMyIG1hZ2ljOworCV9fczMyIHZlcnNpb247CisJY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjFdOworCXRpbWUzMl90IG10aW1lOworCV9fdTY0IHNpemU7CisJX19zMzIgc2VjdG9yc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIERlZmluZSBQQVRIX0xFTl9WMyBhcyB0aGUgdXN1YWwgdmFsdWUgb2YgTUFYUEFUSExFTiwganVzdCBoYXJkLWNvZGUgaXQgaW4KKyAqIGNhc2Ugb3RoZXIgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIE1BWFBBVEhMRU4uCisgKgorICogVGhlIHNhbWUgbXVzdCBob2xkIGZvciBWMiAtIHdlIHdhbnQgZmlsZSBmb3JtYXQgY29tcGF0aWJpbGl0eSwgbm90IGFueXRoaW5nCisgKiBlbHNlLgorICovCisjZGVmaW5lIFBBVEhfTEVOX1YzIDQwOTYKKyNkZWZpbmUgUEFUSF9MRU5fVjIgUEFUSF9MRU5fVjMKIAogc3RydWN0IGNvd19oZWFkZXJfdjIgewogCV9fdTMyIG1hZ2ljOwogCV9fdTMyIHZlcnNpb247CiAJY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjJdOwotCXRpbWVfdCBtdGltZTsKKwl0aW1lMzJfdCBtdGltZTsKIAlfX3U2NCBzaXplOwotCWludCBzZWN0b3JzaXplOwotfTsKLQotLyogRGVmaW5lIFBBVEhfTEVOX1YzIGFzIHRoZSB1c3VhbCB2YWx1ZSBvZiBNQVhQQVRITEVOLCBqdXN0IGhhcmQtY29kZSBpdCBpbgotICogY2FzZSBvdGhlciBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBmb3IgTUFYUEFUSExFTgotICovCi0jZGVmaW5lIFBBVEhfTEVOX1YzIDQwOTYKKwlfX3MzMiBzZWN0b3JzaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyogQ2hhbmdlcyBmcm9tIFYyIC0KICAqCVBBVEhfTEVOX1YzIGFzIGRlc2NyaWJlZCBhYm92ZQpAQCAtNjYsNiArNzAsMTUgQEAKICAqCUZpeGVkIChmaW5hbGx5ISkgdGhlIHJvdW5kaW5nIGJ1ZwogICovCiAKKy8qIFVudGlsIERlYzIwMDUsIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHdhcyBsZWZ0IG91dCBmcm9tIHRoZSBiZWxvdworICogZGVmaW5pdGlvbiwgbGVhZGluZyBvbiA2NC1iaXQgc3lzdGVtcyB0byA0IGJ5dGVzIG9mIHBhZGRpbmcgYWZ0ZXIgbXRpbWUsIHRvCisgKiBhbGlnbiBzaXplIHRvIDgtYnl0ZSBhbGlnbm1lbnQuICBUaGlzIHNoaWZ0ZWQgYWxsIGZpZWxkcyBhYm92ZSAobm8gcGFkZGluZworICogd2FzIHByZXNlbnQgb24gMzItYml0LCBubyBvdGhlciBwYWRkaW5nIHdhcyBhZGRlZCkuCisgKgorICogSG93ZXZlciwgdGhpcyBfY2FuIGJlIGRldGVjdGVkXzogaXQgbWVhbnMgdGhhdCBjb3dfZm9ybWF0IChhbHdheXMgMCB1bnRpbAorICogbm93KSBpcyBzaGlmdGVkIG9udG8gdGhlIGZpcnN0IDQgYnl0ZXMgb2YgYmFja2luZ19maWxlLCB3aGVyZSBpdCBpcyBvdGhlcndpc2UKKyAqIGltcG9zc2libGUgdG8gZmluZCA0IHplcm9zLiAtYmIgKi8KKwogc3RydWN0IGNvd19oZWFkZXJfdjMgewogCV9fdTMyIG1hZ2ljOwogCV9fdTMyIHZlcnNpb247CkBAIC03NSw2ICs4OCwxOCBAQAogCV9fdTMyIGFsaWdubWVudDsKIAlfX3UzMiBjb3dfZm9ybWF0OwogCWNoYXIgYmFja2luZ19maWxlW1BBVEhfTEVOX1YzXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFRoaXMgaXMgdGhlIGJyb2tlbiBsYXlvdXQgdXNlZCBieSBzb21lIDY0LWJpdCBiaW5hcmllcy4gKi8KK3N0cnVjdCBjb3dfaGVhZGVyX3YzX2Jyb2tlbiB7CisJX191MzIgbWFnaWM7CisJX191MzIgdmVyc2lvbjsKKwlfX3M2NCBtdGltZTsKKwlfX3U2NCBzaXplOworCV9fdTMyIHNlY3RvcnNpemU7CisJX191MzIgYWxpZ25tZW50OworCV9fdTMyIGNvd19mb3JtYXQ7CisJY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjNdOwogfTsKIAogLyogQ09XIGZvcm1hdCBkZWZpbml0aW9ucyAtIGZvciBub3csIHdlIGhhdmUgb25seSB0aGUgdXN1YWwgQ09XIGJpdG1hcCAqLwpAQCAtODQsNiArMTA5LDcgQEAKIAlzdHJ1Y3QgY293X2hlYWRlcl92MSB2MTsKIAlzdHJ1Y3QgY293X2hlYWRlcl92MiB2MjsKIAlzdHJ1Y3QgY293X2hlYWRlcl92MyB2MzsKKwlzdHJ1Y3QgY293X2hlYWRlcl92M19icm9rZW4gdjNfYjsKIH07CiAKICNkZWZpbmUgQ09XX01BR0lDIDB4NGY0ZjRmNGQgIC8qIE1PT08gKi8KQEAgLTE4NCw4ICsyMTAsOSBAQAogCiAJZXJyID0gLUVJTlZBTDsKIAlpZihzdHJsZW4oYmFja2luZ19maWxlKSA+IHNpemVvZihoZWFkZXItPmJhY2tpbmdfZmlsZSkgLSAxKXsKKwkJLyogQmVsb3csICV6ZCBpcyBmb3IgYSBzaXplX3QgdmFsdWUgKi8KIAkJY293X3ByaW50ZigiQmFja2luZyBmaWxlIG5hbWUgXCIlc1wiIGlzIHRvbyBsb25nIC0gbmFtZXMgYXJlICIKLQkJCSAgICJsaW1pdGVkIHRvICVkIGNoYXJhY3RlcnNcbiIsIGJhY2tpbmdfZmlsZSwKKwkJCSAgICJsaW1pdGVkIHRvICV6ZCBjaGFyYWN0ZXJzXG4iLCBiYWNraW5nX2ZpbGUsCiAJCQkgICBzaXplb2YoaGVhZGVyLT5iYWNraW5nX2ZpbGUpIC0gMSk7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQpAQCAtMzAwLDcgKzMyNyw4IEBACiAJCSphbGlnbl9vdXQgPSAqc2VjdG9yc2l6ZV9vdXQ7CiAJCWZpbGUgPSBoZWFkZXItPnYyLmJhY2tpbmdfZmlsZTsKIAl9Ci0JZWxzZSBpZih2ZXJzaW9uID09IDMpeworCS8qIFRoaXMgaXMgdmVyeSBzdWJ0bGUgLSBzZWUgYWJvdmUgYXQgdW5pb24gY293X2hlYWRlciBkZWZpbml0aW9uICovCisJZWxzZSBpZih2ZXJzaW9uID09IDMgJiYgKCooKGludCopaGVhZGVyLT52My5iYWNraW5nX2ZpbGUpICE9IDApKXsKIAkJaWYobiA8IHNpemVvZihoZWFkZXItPnYzKSl7CiAJCQljb3dfcHJpbnRmKCJyZWFkX2Nvd19oZWFkZXIgLSBmYWlsZWQgdG8gcmVhZCBWMyAiCiAJCQkJICAgImhlYWRlclxuIik7CkBAIC0zMTAsOSArMzM4LDQzIEBACiAJCSpzaXplX291dCA9IG50b2hsbChoZWFkZXItPnYzLnNpemUpOwogCQkqc2VjdG9yc2l6ZV9vdXQgPSBudG9obChoZWFkZXItPnYzLnNlY3RvcnNpemUpOwogCQkqYWxpZ25fb3V0ID0gbnRvaGwoaGVhZGVyLT52My5hbGlnbm1lbnQpOworCQlpZiAoKmFsaWduX291dCA9PSAwKSB7CisJCQljb3dfcHJpbnRmKCJyZWFkX2Nvd19oZWFkZXIgLSBpbnZhbGlkIENPVyBoZWFkZXIsICIKKwkJCQkgICAiYWxpZ24gPT0gMFxuIik7CisJCX0KIAkJKmJpdG1hcF9vZmZzZXRfb3V0ID0gUk9VTkRfVVAoc2l6ZW9mKGhlYWRlci0+djMpLCAqYWxpZ25fb3V0KTsKIAkJZmlsZSA9IGhlYWRlci0+djMuYmFja2luZ19maWxlOwogCX0KKwllbHNlIGlmKHZlcnNpb24gPT0gMyl7CisJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGJyb2tlbiBWMyBmaWxlIHdpdGgiCisJCQkgICAiIDY0LWJpdCBsYXlvdXQgLSByZWNvdmVyaW5nIGNvbnRlbnQuXG4iKTsKKworCQlpZihuIDwgc2l6ZW9mKGhlYWRlci0+djNfYikpeworCQkJY293X3ByaW50ZigicmVhZF9jb3dfaGVhZGVyIC0gZmFpbGVkIHRvIHJlYWQgVjMgIgorCQkJCSAgICJoZWFkZXJcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiB0aGlzIHdhcyB1c2VkIHVudGlsIERlYzIwMDUgLSA2NGJpdHMgYXJlIG5lZWRlZCB0byByZXByZXNlbnQKKwkJICogMjAzOCsuIEkuZS4gd2UgY2FuIHNhZmVseSBkbyB0aGlzIHRydW5jYXRpbmcgY2FzdC4KKwkJICoKKwkJICogQWRkaXRpb25hbGx5LCB3ZSBtdXN0IHVzZSBudG9obCgpIGluc3RlYWQgb2YgbnRvaGxsKCksIHNpbmNlCisJCSAqIHRoZSBwcm9ncmFtIHVzZWQgdG8gdXNlIHRoZSBmb3JtZXIgKHRlc3RlZCAtIEkgZ290IG10aW1lCisJCSAqIG1pc21hdGNoICIwIHZzIHdoYXRldmVyIikuCisJCSAqCisJCSAqIEV2ZXIgaGVhcmQgYWJvdXQgYnVnLXRvLWJ1Zy1jb21wYXRpYmlsaXR5ID8gOy0pICovCisJCSptdGltZV9vdXQgPSAodGltZTMyX3QpIG50b2hsKGhlYWRlci0+djNfYi5tdGltZSk7CisKKwkJKnNpemVfb3V0ID0gbnRvaGxsKGhlYWRlci0+djNfYi5zaXplKTsKKwkJKnNlY3RvcnNpemVfb3V0ID0gbnRvaGwoaGVhZGVyLT52M19iLnNlY3RvcnNpemUpOworCQkqYWxpZ25fb3V0ID0gbnRvaGwoaGVhZGVyLT52M19iLmFsaWdubWVudCk7CisJCWlmICgqYWxpZ25fb3V0ID09IDApIHsKKwkJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGludmFsaWQgQ09XIGhlYWRlciwgIgorCQkJCSAgICJhbGlnbiA9PSAwXG4iKTsKKwkJfQorCQkqYml0bWFwX29mZnNldF9vdXQgPSBST1VORF9VUChzaXplb2YoaGVhZGVyLT52M19iKSwgKmFsaWduX291dCk7CisJCWZpbGUgPSBoZWFkZXItPnYzX2IuYmFja2luZ19maWxlOworCX0KIAllbHNlIHsKIAkJY293X3ByaW50ZigicmVhZF9jb3dfaGVhZGVyIC0gaW52YWxpZCBDT1cgdmVyc2lvblxuIik7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2RhZW1vbl9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvZGFlbW9uX2tlcm4uYwppbmRleCBhNjFiN2I0Li41M2QwOWVkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvZGFlbW9uX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvZGFlbW9uX2tlcm4uYwpAQCAtOTUsMTggKzk1LDcgQEAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfZGFlbW9uKHZvaWQpCiB7CiAJcmVnaXN0ZXJfdHJhbnNwb3J0KCZkYWVtb25fdHJhbnNwb3J0KTsKLQlyZXR1cm4oMSk7CisJcmV0dXJuIDA7CiB9CiAKIF9faW5pdGNhbGwocmVnaXN0ZXJfZGFlbW9uKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9oYXJkZG9nX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9oYXJkZG9nX2tlcm4uYwppbmRleCA0OWFjYjJiLi5kMThhOTc0IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvaGFyZGRvZ19rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2hhcmRkb2dfa2Vybi5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogZXh0ZXJuIGludCBwaW5nX3dhdGNoZG9nKGludCBmZCk7CiAKLXN0YXRpYyBzc2l6ZV90IGhhcmRkb2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sCitzdGF0aWMgc3NpemVfdCBoYXJkZG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGxlbiwKIAkJCSAgICAgbG9mZl90ICpwcG9zKQogewogCS8qCkBAIC0xMTgsNiArMTE4LDcgQEAKIHN0YXRpYyBpbnQgaGFyZGRvZ19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwl2b2lkIF9fdXNlciAqYXJncD0gKHZvaWQgX191c2VyICopYXJnOwogCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkJV0RJT0NfU0VUVElNRU9VVCwKIAkJMCwKQEAgLTEyNywxMyArMTI4LDEyIEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVOT1RUWTsKIAkJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgotCQkJaWYoY29weV90b191c2VyKChzdHJ1Y3QgaGFyZGRvZ19pbmZvICopYXJnLCAmaWRlbnQsCi0JCQkJCXNpemVvZihpZGVudCkpKQorCQkJaWYoY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBXRElPQ19HRVRTVEFUVVM6CiAJCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKLQkJCXJldHVybiBwdXRfdXNlcigwLChpbnQgKilhcmcpOworCQkJcmV0dXJuIHB1dF91c2VyKDAsKGludCBfX3VzZXIgKilhcmdwKTsKIAkJY2FzZSBXRElPQ19LRUVQQUxJVkU6CiAJCQlyZXR1cm4ocGluZ193YXRjaGRvZyhoYXJkZG9nX291dF9mZCkpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9ob3N0YXVkaW9fa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL2hvc3RhdWRpb19rZXJuLmMKaW5kZXggNTk2MDJiOC4uMzcyMzJmOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2hvc3RhdWRpb19rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2hvc3RhdWRpb19rZXJuLmMKQEAgLTY3LDggKzY3LDggQEAKIAogLyogL2Rldi9kc3AgZmlsZSBvcGVyYXRpb25zICovCiAKLXN0YXRpYyBzc2l6ZV90IGhvc3RhdWRpb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCwgCi0JCQkgICAgICBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBob3N0YXVkaW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogICAgICAgICBzdHJ1Y3QgaG9zdGF1ZGlvX3N0YXRlICpzdGF0ZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAl2b2lkICprYnVmOwpAQCAtOTQsNyArOTQsNyBAQAogCXJldHVybihlcnIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBob3N0YXVkaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwgCitzdGF0aWMgc3NpemVfdCBob3N0YXVkaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAgICAgICAgIHN0cnVjdCBob3N0YXVkaW9fc3RhdGUgKnN0YXRlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJY2FzZSBTTkRDVExfRFNQX0NIQU5ORUxTOgogCWNhc2UgU05EQ1RMX0RTUF9TVUJESVZJREU6CiAJY2FzZSBTTkRDVExfRFNQX1NFVEZSQUdNRU5UOgotCQlpZihnZXRfdXNlcihkYXRhLCAoaW50ICopIGFyZykpCisJCWlmKGdldF91c2VyKGRhdGEsIChpbnQgX191c2VyICopIGFyZykpCiAJCQlyZXR1cm4oLUVGQVVMVCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNjgsNyArMTY4LDcgQEAKIAljYXNlIFNORENUTF9EU1BfQ0hBTk5FTFM6CiAJY2FzZSBTTkRDVExfRFNQX1NVQkRJVklERToKIAljYXNlIFNORENUTF9EU1BfU0VURlJBR01FTlQ6Ci0JCWlmKHB1dF91c2VyKGRhdGEsIChpbnQgKikgYXJnKSkKKwkJaWYocHV0X3VzZXIoZGF0YSwgKGludCBfX3VzZXIgKikgYXJnKSkKIAkJCXJldHVybigtRUZBVUxUKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY2FzdF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNhc3Rfa2Vybi5jCmluZGV4IGM5YjA3OGYuLjNhN2FmMTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY2FzdF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jYXN0X2tlcm4uYwpAQCAtMTI0LDE4ICsxMjQsNyBAQAogc3RhdGljIGludCByZWdpc3Rlcl9tY2FzdCh2b2lkKQogewogCXJlZ2lzdGVyX3RyYW5zcG9ydCgmbWNhc3RfdHJhbnNwb3J0KTsKLQlyZXR1cm4oMSk7CisJcmV0dXJuIDA7CiB9CiAKIF9faW5pdGNhbGwocmVnaXN0ZXJfbWNhc3QpOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKaW5kZXggMTQ4ODgxNi4uNmQ3MTczZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSAibGludXgvbmFtZWkuaCIKICNpbmNsdWRlICJsaW51eC9wcm9jX2ZzLmgiCiAjaW5jbHVkZSAibGludXgvc3lzY2FsbHMuaCIKKyNpbmNsdWRlICJsaW51eC9saXN0LmgiCisjaW5jbHVkZSAibGludXgvbW0uaCIKICNpbmNsdWRlICJsaW51eC9jb25zb2xlLmgiCiAjaW5jbHVkZSAiYXNtL2lycS5oIgogI2luY2x1ZGUgImFzbS91YWNjZXNzLmgiCkBAIC02MCw3ICs2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXdoaWxlKCFsaXN0X2VtcHR5KCZtY19yZXF1ZXN0cykpewotCQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlyZXEgPSBsaXN0X2VudHJ5KG1jX3JlcXVlc3RzLm5leHQsIHN0cnVjdCBtY29uc29sZV9lbnRyeSwKIAkJCQkgbGlzdCk7CiAJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwpAQCAtODUsNyArODcsNyBAQAogCQlpZihyZXEuY21kLT5jb250ZXh0ID09IE1DT05TT0xFX0lOVFIpCiAJCQkoKnJlcS5jbWQtPmhhbmRsZXIpKCZyZXEpOwogCQllbHNlIHsKLQkJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfQVRPTUlDKTsKKwkJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfTk9XQUlUKTsKIAkJCWlmKG5ldyA9PSBOVUxMKQogCQkJCW1jb25zb2xlX3JlcGx5KCZyZXEsICJPdXQgb2YgbWVtb3J5IiwgMSwgMCk7CiAJCQllbHNlIHsKQEAgLTM0Nyw2ICszNDksMTQxIEBACiAJcmV0dXJuKE5VTEwpOwogfQogCisjZGVmaW5lIFVOUExVR0dFRF9QRVJfUEFHRSBcCisJKChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCitzdHJ1Y3QgdW5wbHVnZ2VkX3BhZ2VzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdm9pZCAqcGFnZXNbVU5QTFVHR0VEX1BFUl9QQUdFXTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdW5wbHVnZ2VkX3BhZ2VzX2NvdW50ID0gMDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHVucGx1Z2dlZF9wYWdlcyA9IExJU1RfSEVBRF9JTklUKHVucGx1Z2dlZF9wYWdlcyk7CitzdGF0aWMgaW50IHVucGx1Z19pbmRleCA9IFVOUExVR0dFRF9QRVJfUEFHRTsKKworc3RhdGljIGludCBtZW1fY29uZmlnKGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGlmZjsKKwlpbnQgZXJyID0gLUVJTlZBTCwgaSwgYWRkOworCWNoYXIgKnJldDsKKworCWlmKHN0clswXSAhPSAnPScpCisJCWdvdG8gb3V0OworCisJc3RyKys7CisJaWYoc3RyWzBdID09ICctJykKKwkJYWRkID0gMDsKKwllbHNlIGlmKHN0clswXSA9PSAnKycpeworCQlhZGQgPSAxOworCX0KKwllbHNlIGdvdG8gb3V0OworCisJc3RyKys7CisJZGlmZiA9IG1lbXBhcnNlKHN0ciwgJnJldCk7CisJaWYoKnJldCAhPSAnXDAnKQorCQlnb3RvIG91dDsKKworCWRpZmYgLz0gUEFHRV9TSVpFOworCisJZm9yKGkgPSAwOyBpIDwgZGlmZjsgaSsrKXsKKwkJc3RydWN0IHVucGx1Z2dlZF9wYWdlcyAqdW5wbHVnZ2VkOworCQl2b2lkICphZGRyOworCisJCWlmKGFkZCl7CisJCQlpZihsaXN0X2VtcHR5KCZ1bnBsdWdnZWRfcGFnZXMpKQorCQkJCWJyZWFrOworCisJCQl1bnBsdWdnZWQgPSBsaXN0X2VudHJ5KHVucGx1Z2dlZF9wYWdlcy5uZXh0LAorCQkJCQkgICAgICAgc3RydWN0IHVucGx1Z2dlZF9wYWdlcywgbGlzdCk7CisJCQlpZih1bnBsdWdfaW5kZXggPiAwKQorCQkJCWFkZHIgPSB1bnBsdWdnZWQtPnBhZ2VzWy0tdW5wbHVnX2luZGV4XTsKKwkJCWVsc2UgeworCQkJCWxpc3RfZGVsKCZ1bnBsdWdnZWQtPmxpc3QpOworCQkJCWFkZHIgPSB1bnBsdWdnZWQ7CisJCQkJdW5wbHVnX2luZGV4ID0gVU5QTFVHR0VEX1BFUl9QQUdFOworCQkJfQorCisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGFkZHIpOworCQkJdW5wbHVnZ2VkX3BhZ2VzX2NvdW50LS07CisJCX0KKwkJZWxzZSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyk7CisJCQlpZihwYWdlID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCXVucGx1Z2dlZCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJCWlmKHVucGx1Z19pbmRleCA9PSBVTlBMVUdHRURfUEVSX1BBR0UpeworCQkJCWxpc3RfYWRkKCZ1bnBsdWdnZWQtPmxpc3QsICZ1bnBsdWdnZWRfcGFnZXMpOworCQkJCXVucGx1Z19pbmRleCA9IDA7CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9IHVucGx1Z2dlZF9wYWdlcy5uZXh0OworCQkJCWFkZHIgPSB1bnBsdWdnZWQ7CisKKwkJCQl1bnBsdWdnZWQgPSBsaXN0X2VudHJ5KGVudHJ5LAorCQkJCQkJICAgICAgIHN0cnVjdCB1bnBsdWdnZWRfcGFnZXMsCisJCQkJCQkgICAgICAgbGlzdCk7CisJCQkJdW5wbHVnZ2VkLT5wYWdlc1t1bnBsdWdfaW5kZXgrK10gPSBhZGRyOworCQkJCWVyciA9IG9zX2Ryb3BfbWVtb3J5KGFkZHIsIFBBR0VfU0laRSk7CisJCQkJaWYoZXJyKQorCQkJCQlwcmludGsoIkZhaWxlZCB0byByZWxlYXNlIG1lbW9yeSAtICIKKwkJCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCBlcnIpOworCQkJfQorCisJCQl1bnBsdWdnZWRfcGFnZXNfY291bnQrKzsKKwkJfQorCX0KKworCWVyciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtZW1fZ2V0X2NvbmZpZyhjaGFyICpuYW1lLCBjaGFyICpzdHIsIGludCBzaXplLCBjaGFyICoqZXJyb3Jfb3V0KQoreworCWNoYXIgYnVmW3NpemVvZigiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKV07CisJaW50IGxlbiA9IDA7CisKKwlzcHJpbnRmKGJ1ZiwgIiVsZCIsIHVtbF9waHlzbWVtKTsKKwlDT05GSUdfQ0hVTksoc3RyLCBzaXplLCBsZW4sIGJ1ZiwgMSk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IG1lbV9pZChjaGFyICoqc3RyLCBpbnQgKnN0YXJ0X291dCwgaW50ICplbmRfb3V0KQoreworCSpzdGFydF9vdXQgPSAwOworCSplbmRfb3V0ID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lbV9yZW1vdmUoaW50IG4pCit7CisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIHN0cnVjdCBtY19kZXZpY2UgbWVtX21jID0geworCS5uYW1lCQk9ICJtZW0iLAorCS5jb25maWcJCT0gbWVtX2NvbmZpZywKKwkuZ2V0X2NvbmZpZwk9IG1lbV9nZXRfY29uZmlnLAorCS5pZAkJPSBtZW1faWQsCisJLnJlbW92ZQkJPSBtZW1fcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBtZW1fbWNfaW5pdCh2b2lkKQoreworCWlmKGNhbl9kcm9wX21lbW9yeSgpKQorCQltY29uc29sZV9yZWdpc3Rlcl9kZXYoJm1lbV9tYyk7CisJZWxzZSBwcmludGsoIkNhbid0IHJlbGVhc2UgbWVtb3J5IHRvIHRoZSBob3N0IC0gbWVtb3J5IGhvdHBsdWcgd29uJ3QgIgorCQkgICAgImJlIHN1cHBvcnRlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwobWVtX21jX2luaXQpOworCiAjZGVmaW5lIENPTkZJR19CVUZfU0laRSA2NAogCiBzdGF0aWMgdm9pZCBtY29uc29sZV9nZXRfY29uZmlnKGludCAoKmdldF9jb25maWcpKGNoYXIgKiwgY2hhciAqLCBpbnQsCkBAIC00NzgsNyArNjE1LDcgQEAKIAkJcmV0dXJuOwogCiAJd2hpbGUoMSl7Ci0JCW4gPSBtaW4obGVuLCBBUlJBWV9TSVpFKGNvbnNvbGVfYnVmKSAtIGNvbnNvbGVfaW5kZXgpOworCQluID0gbWluKChzaXplX3QpIGxlbiwgQVJSQVlfU0laRShjb25zb2xlX2J1ZikgLSBjb25zb2xlX2luZGV4KTsKIAkJc3RybmNweSgmY29uc29sZV9idWZbY29uc29sZV9pbmRleF0sIHN0cmluZywgbik7CiAJCWNvbnNvbGVfaW5kZXggKz0gbjsKIAkJc3RyaW5nICs9IG47CkBAIC01MTcsNyArNjU0LDYgQEAKIAlzdHJ1Y3QgbWNvbnNvbGVfZW50cnkgZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlOSVRfTElTVF9IRUFEKCZlbnRyeS5saXN0KTsKIAllbnRyeS5yZXF1ZXN0ID0gKnJlcTsKIAlsaXN0X2FkZCgmZW50cnkubGlzdCwgJmNsaWVudHMpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zb2xlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKaW5kZXggMGUyZjA2MS4uMGE3Nzg2ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKQEAgLTE4Miw3ICsxODIsOSBAQAogCXBlX2RhdGEuc3Rkb3V0ID0gZmRzWzFdOwogCXBpZCA9IHJ1bl9oZWxwZXIoY2hhbmdlX3ByZV9leGVjLCAmcGVfZGF0YSwgYXJndiwgTlVMTCk7CiAKLQlyZWFkX291dHB1dChmZHNbMF0sIG91dHB1dCwgb3V0cHV0X2xlbik7CisJaWYgKHBpZCA+IDApCS8qIEF2b2lkIGhhbmcgYXMgd2Ugd29uJ3QgZ2V0IGRhdGEgaW4gZmFpbHVyZSBjYXNlLiAqLworCQlyZWFkX291dHB1dChmZHNbMF0sIG91dHB1dCwgb3V0cHV0X2xlbik7CisKIAlvc19jbG9zZV9maWxlKGZkc1swXSk7CiAJb3NfY2xvc2VfZmlsZShmZHNbMV0pOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcGNhcF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvcGNhcF9rZXJuLmMKaW5kZXggMDdjODBmMi4uNDY2ZmYyYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BjYXBfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wY2FwX2tlcm4uYwpAQCAtMTA2LDE4ICsxMDYsNyBAQAogc3RhdGljIGludCByZWdpc3Rlcl9wY2FwKHZvaWQpCiB7CiAJcmVnaXN0ZXJfdHJhbnNwb3J0KCZwY2FwX3RyYW5zcG9ydCk7Ci0JcmV0dXJuKDEpOworCXJldHVybiAwOwogfQogCiBfX2luaXRjYWxsKHJlZ2lzdGVyX3BjYXApOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3NsaXBfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3NsaXBfa2Vybi5jCmluZGV4IGE2MmY1ZWYuLjE2M2VlMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zbGlwX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvc2xpcF9rZXJuLmMKQEAgLTkzLDE4ICs5Myw3IEBACiBzdGF0aWMgaW50IHJlZ2lzdGVyX3NsaXAodm9pZCkKIHsKIAlyZWdpc3Rlcl90cmFuc3BvcnQoJnNsaXBfdHJhbnNwb3J0KTsKLQlyZXR1cm4oMSk7CisJcmV0dXJuIDA7CiB9CiAKIF9faW5pdGNhbGwocmVnaXN0ZXJfc2xpcCk7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3NsaXJwX2tlcm4uYwppbmRleCAzM2Q3OTgyLi45NWU1MGM5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zbGlycF9rZXJuLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAlpbnQgaT0wOwogCiAJKmluaXQgPSAoKHN0cnVjdCBzbGlycF9pbml0KQotCQl7IGFyZ3cgOgkJeyB7ICJzbGlycCIsIE5VTEwgIH0gfSB9KTsKKwkJeyAuYXJndyA9IHsgeyAic2xpcnAiLCBOVUxMICB9IH0gfSk7CiAKIAlzdHIgPSBzcGxpdF9pZl9zcGVjKHN0ciwgbWFjX291dCwgTlVMTCk7CiAKQEAgLTExNiwxOCArMTE2LDcgQEAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfc2xpcnAodm9pZCkKIHsKIAlyZWdpc3Rlcl90cmFuc3BvcnQoJnNsaXJwX3RyYW5zcG9ydCk7Ci0JcmV0dXJuKDEpOworCXJldHVybiAwOwogfQogCiBfX2luaXRjYWxsKHJlZ2lzdGVyX3NsaXJwKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zbGlycF91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfdXNlci5jCmluZGV4IGI5NGM2NjEuLjMzYzVmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zbGlycF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NsaXJwX3VzZXIuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJfQogCiAJaWYoZXJyID09IDApIHsKLQkJcHJpbnRrKCJzbGlycF9jbG9zZTogcHJvY2VzcyAlZCBoYXMgbm90IGV4aXRlZFxuIik7CisJCXByaW50aygic2xpcnBfY2xvc2U6IHByb2Nlc3MgJWQgaGFzIG5vdCBleGl0ZWRcbiIsIHByaS0+cGlkKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwppbmRleCAwMzM2NTc1Li4wODk3ODUyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtODkxLDcgKzg5MSw3IEBACiAJCQkgICAgIFNBX0lOVEVSUlVQVCwgInViZCIsIHViZF9kZXYpOwogCWlmKGVyciAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIgInVtX3JlcXVlc3RfaXJxIGZhaWxlZCAtIGVycm5vID0gJWRcbiIsIC1lcnIpOwotCXJldHVybihlcnIpOworCXJldHVybiAwOwogfQogCiBkZXZpY2VfaW5pdGNhbGwodWJkX2RyaXZlcl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaAppbmRleCAwNzE3NmQ5Li4zMTA5ODBiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2tlcm5fdXRpbC5oCkBAIC0xMTYsMjQgKzExNiwxNSBAQAogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3Rhc2soaW50IHBpZCwgaW50IHJlcXVpcmUpOwogZXh0ZXJuIHZvaWQgbWFjaGluZV9oYWx0KHZvaWQpOwogZXh0ZXJuIGludCBpc19zeXNjYWxsKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1leHRlcm4gdm9pZCBhcmNoX3N3aXRjaCh2b2lkKTsKKwogZXh0ZXJuIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50LCB2b2lkICopOwogZXh0ZXJuIGludCBjcHUodm9pZCk7CiAKK2V4dGVybiB2b2lkIHRpbWVfaW5pdF9rZXJuKHZvaWQpOworCiAvKiBBcmUgd2UgZGlzYWxsb3dlZCB0byBzbGVlcD8gVXNlZCB0byBjaG9vc2UgYmV0d2VlbiBHRlBfS0VSTkVMIGFuZCBHRlBfQVRPTUlDLiAqLwogZXh0ZXJuIGludCBfX2NhbnRfc2xlZXAodm9pZCk7CiBleHRlcm4gdm9pZCBzZWd2X2hhbmRsZXIoaW50IHNpZywgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgc2lnaW9faGFuZGxlcihpbnQgc2lnLCB1bmlvbiB1bWxfcHRfcmVncyAqcmVncyk7CiAKICNlbmRpZgotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2xpbmUuaCBiL2FyY2gvdW0vaW5jbHVkZS9saW5lLmgKaW5kZXggNmY0ZDY4MC4uNmFjMGY4MiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2xpbmUuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbGluZS5oCkBAIC01OCwyMyArNTgsMTcgQEAKIH07CiAKICNkZWZpbmUgTElORV9JTklUKHN0ciwgZCkgXAotCXsgaW5pdF9zdHIgOglzdHIsIFwKLQkgIGluaXRfcHJpIDoJSU5JVF9TVEFUSUMsIFwKLQkgIHZhbGlkIDoJMSwgXAotCSAgdGhyb3R0bGVkIDoJMCwgXAotCSAgbG9jayA6CVNQSU5fTE9DS19VTkxPQ0tFRCwgXAotCSAgYnVmZmVyIDoJTlVMTCwgXAotCSAgaGVhZCA6CU5VTEwsIFwKLQkgIHRhaWwgOglOVUxMLCBcCi0JICBzaWdpbyA6CTAsIFwKLQkgIGRyaXZlciA6CWQsIFwKLQkgIGhhdmVfaXJxIDoJMCB9CisJeyAuaW5pdF9zdHIgPQlzdHIsIFwKKwkgIC5pbml0X3ByaSA9CUlOSVRfU1RBVElDLCBcCisJICAudmFsaWQgPQkxLCBcCisJICAubG9jayA9CVNQSU5fTE9DS19VTkxPQ0tFRCwgXAorCSAgLmRyaXZlciA9CWQgfQogCiBzdHJ1Y3QgbGluZXMgewogCWludCBudW07CiB9OwogCi0jZGVmaW5lIExJTkVTX0lOSVQobikgeyAgbnVtIDoJCW4gfQorI2RlZmluZSBMSU5FU19JTklUKG4pIHsgIC5udW0gPQluIH0KIAogZXh0ZXJuIHZvaWQgbGluZV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogZXh0ZXJuIGludCBsaW5lX29wZW4oc3RydWN0IGxpbmUgKmxpbmVzLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9sb25nam1wLmggYi9hcmNoL3VtL2luY2x1ZGUvbG9uZ2ptcC5oCmluZGV4IDAxOGIzODEuLjhlNzA1MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9sb25nam1wLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2xvbmdqbXAuaApAQCAtNCwxMSArNCwxMSBAQAogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgIm9zLmgiCiAKLSNkZWZpbmUgVU1MX1NJR0xPTkdKTVAoYnVmLCB2YWwpIGRvIHsgXAorI2RlZmluZSBVTUxfTE9OR0pNUChidWYsIHZhbCkgZG8geyBcCiAJbG9uZ2ptcCgqYnVmLCB2YWwpOwlcCiB9IHdoaWxlKDApCiAKLSNkZWZpbmUgVU1MX1NJR1NFVEpNUChidWYsIGVuYWJsZSkgKHsgXAorI2RlZmluZSBVTUxfU0VUSk1QKGJ1ZiwgZW5hYmxlKSAoeyBcCiAJaW50IG47IFwKIAllbmFibGUgPSBnZXRfc2lnbmFscygpOyBcCiAJbiA9IHNldGptcCgqYnVmKTsgXApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL21lbV91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvbWVtX3VzZXIuaAppbmRleCBhMTA2NGM1Li5hNTQ1MTRkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvbWVtX3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbWVtX3VzZXIuaApAQCAtNDksNyArNDksNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaG9zdF90YXNrX3NpemU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB0YXNrX3NpemU7CiAKLWV4dGVybiB2b2lkIGNoZWNrX2RldmFub24odm9pZCk7CiBleHRlcm4gaW50IGluaXRfbWVtX3VzZXIodm9pZCk7CiBleHRlcm4gdm9pZCBzZXR1cF9tZW1vcnkodm9pZCAqZW50cnkpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9pb21lbShjaGFyICpkcml2ZXIsIHVuc2lnbmVkIGxvbmcgKmxlbl9vdXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL29zLmggYi9hcmNoL3VtL2luY2x1ZGUvb3MuaAppbmRleCBkM2QxYmM2Li5mODg4NTZjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvb3MuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvb3MuaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgogI2luY2x1ZGUgInNrYXMvbW1faWQuaCIKICNpbmNsdWRlICJpcnFfdXNlci5oIgorI2luY2x1ZGUgInN5c2RlcC90bHMuaCIKIAogI2RlZmluZSBPU19UWVBFX0ZJTEUgMSAKICNkZWZpbmUgT1NfVFlQRV9ESVIgMiAKQEAgLTE3Miw2ICsxNzMsNyBAQAogZXh0ZXJuIHZvaWQgb3NfZWFybHlfY2hlY2tzKHZvaWQpOwogZXh0ZXJuIGludCBjYW5fZG9fc2thcyh2b2lkKTsKIGV4dGVybiB2b2lkIG9zX2NoZWNrX2J1Z3Modm9pZCk7CitleHRlcm4gdm9pZCBjaGVja19ob3N0X3N1cHBvcnRzX3RscyhpbnQgKnN1cHBvcnRzX3RscywgaW50ICp0bHNfbWluKTsKIAogLyogTWFrZSBzdXJlIHRoZXkgYXJlIGNsZWFyIHdoZW4gcnVubmluZyBpbiBUVCBtb2RlLiBSZXF1aXJlZCBieQogICogU0VHVl9NQVlCRV9GSVhBQkxFICovCkBAIC0yMDUsNiArMjA3LDggQEAKIGV4dGVybiBpbnQgb3NfcHJvdGVjdF9tZW1vcnkodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIAogCQkJICAgICBpbnQgciwgaW50IHcsIGludCB4KTsKIGV4dGVybiBpbnQgb3NfdW5tYXBfbWVtb3J5KHZvaWQgKmFkZHIsIGludCBsZW4pOworZXh0ZXJuIGludCBvc19kcm9wX21lbW9yeSh2b2lkICphZGRyLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiBpbnQgY2FuX2Ryb3BfbWVtb3J5KHZvaWQpOwogZXh0ZXJuIHZvaWQgb3NfZmx1c2hfc3Rkb3V0KHZvaWQpOwogCiAvKiB0dC5jCkBAIC0yMzQsOCArMjM4LDEyIEBACiAJCQkgICAgIGludCBzdGFja19vcmRlcik7CiBleHRlcm4gaW50IGhlbHBlcl93YWl0KGludCBwaWQpOwogCi0vKiB1bWlkLmMgKi8KIAorLyogdGxzLmMgKi8KK2V4dGVybiBpbnQgb3Nfc2V0X3RocmVhZF9hcmVhKHVzZXJfZGVzY190ICppbmZvLCBpbnQgcGlkKTsKK2V4dGVybiBpbnQgb3NfZ2V0X3RocmVhZF9hcmVhKHVzZXJfZGVzY190ICppbmZvLCBpbnQgcGlkKTsKKworLyogdW1pZC5jICovCiBleHRlcm4gaW50IHVtaWRfZmlsZV9uYW1lKGNoYXIgKm5hbWUsIGNoYXIgKmJ1ZiwgaW50IGxlbik7CiBleHRlcm4gaW50IHNldF91bWlkKGNoYXIgKm5hbWUpOwogZXh0ZXJuIGNoYXIgKmdldF91bWlkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2NoZWNrc3VtLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvY2hlY2tzdW0uaAppbmRleCA3ZDNkMjAyLi4wNTJiYjA2IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvY2hlY2tzdW0uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvY2hlY2tzdW0uaApAQCAtNDgsNyArNDgsOCBAQAogICovCiAKIHN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLAorCQkJCQkgdW5zaWduZWQgY2hhciAqZHN0LAogCQkJCQkgaW50IGxlbiwgaW50IHN1bSwgaW50ICplcnJfcHRyKQogewogCWlmKGNvcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBsZW4pKXsKQEAgLTE5Miw3ICsxOTMsNyBAQAogICovCiAjZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIKIHN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBjc3VtX2FuZF9jb3B5X3RvX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQkJCQkJICAgICB1bnNpZ25lZCBjaGFyICpkc3QsCisJCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkc3QsCiAJCQkJCQkgICAgIGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cikKIHsKIAlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgZHN0LCBsZW4pKXsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9rZXJuZWwtb2Zmc2V0cy5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2tlcm5lbC1vZmZzZXRzLmgKaW5kZXggODJmOTZjNS4uMmMxM2RlMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2tlcm5lbC1vZmZzZXRzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2tlcm5lbC1vZmZzZXRzLmgKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxhc20vbW1hbi5oPgogCiAjZGVmaW5lIERFRklORShzeW0sIHZhbCkgXAogCWFzbSB2b2xhdGlsZSgiXG4tPiIgI3N5bSAiICUwICIgI3ZhbCA6IDogImkiICh2YWwpKQpAQCAtMTYsNiArMTcsNyBAQAogdm9pZCBmb28odm9pZCkKIHsKIAlPRkZTRVQoSE9TVF9UQVNLX0RFQlVHUkVHUywgdGFza19zdHJ1Y3QsIHRocmVhZC5hcmNoLmRlYnVncmVncyk7CisJREVGSU5FKEtFUk5FTF9NQURWX1JFTU9WRSwgTUFEVl9SRU1PVkUpOwogI2lmZGVmIENPTkZJR19NT0RFX1RUCiAJT0ZGU0VUKEhPU1RfVEFTS19FWFRFUk5fUElELCB0YXNrX3N0cnVjdCwgdGhyZWFkLm1vZGUudHQuZXh0ZXJuX3BpZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9wdHJhY2UuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9wdHJhY2UuaAppbmRleCBjOGVlOTU1Li42NjcwY2M5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3B0cmFjZS5oCkBAIC0xNCw3ICsxNCwxMiBAQAogI2RlZmluZSBNQVhfUkVHX05SIChVTV9GUkFNRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQogI2RlZmluZSBNQVhfUkVHX09GRlNFVCAoVU1fRlJBTUVfU0laRSkKIAorI2lmZGVmIFVNTF9DT05GSUdfUFRfUFJPWFkKIGV4dGVybiB2b2lkIHVwZGF0ZV9kZWJ1Z3JlZ3MoaW50IHNlcSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9kZWJ1Z3JlZ3MoaW50IHNlcSkge30KKyNlbmRpZgorCiAKIC8qIHN5c2NhbGwgZW11bGF0aW9uIHBhdGggaW4gcHRyYWNlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni90bHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni90bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThmZDNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3Rscy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX1NZU0RFUF9UTFNfSAorI2RlZmluZSBfU1lTREVQX1RMU19ICisKKyMgaWZuZGVmIF9fS0VSTkVMX18KKworLyogQ2hhbmdlIG5hbWUgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlIG9yaWdpbmFsIG9uZSBmcm9tIDxhc20vbGR0Lmg+LCB3aGljaAorICogbWF5IGJlIG5hbWVkIHVzZXJfZGVzYyAoYnV0IGluIDIuNCBhbmQgaW4gaGVhZGVyIG1hdGNoaW5nIGl0cyBBUEkgd2FzIG5hbWVkCisgKiBtb2RpZnlfbGR0X2xkdF9zKS4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgdW1fZHVwX3VzZXJfZGVzYyB7CisJdW5zaWduZWQgaW50ICBlbnRyeV9udW1iZXI7CisJdW5zaWduZWQgaW50ICBiYXNlX2FkZHI7CisJdW5zaWduZWQgaW50ICBsaW1pdDsKKwl1bnNpZ25lZCBpbnQgIHNlZ18zMmJpdDoxOworCXVuc2lnbmVkIGludCAgY29udGVudHM6MjsKKwl1bnNpZ25lZCBpbnQgIHJlYWRfZXhlY19vbmx5OjE7CisJdW5zaWduZWQgaW50ICBsaW1pdF9pbl9wYWdlczoxOworCXVuc2lnbmVkIGludCAgc2VnX25vdF9wcmVzZW50OjE7CisJdW5zaWduZWQgaW50ICB1c2VhYmxlOjE7Cit9IHVzZXJfZGVzY190OworCisjIGVsc2UgLyogX19LRVJORUxfXyAqLworCisjICBpbmNsdWRlIDxhc20vbGR0Lmg+Cit0eXBlZGVmIHN0cnVjdCB1c2VyX2Rlc2MgdXNlcl9kZXNjX3Q7CisKKyMgZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUlOX0kzODYgNgorI2RlZmluZSBHRFRfRU5UUllfVExTX01JTl9YODZfNjQgMTIKKworI2VuZGlmIC8qIF9TWVNERVBfVExTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5oCmluZGV4IDVjZTkzYWIuLjkzOWNjNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQva2VybmVsLW9mZnNldHMuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbW1hbi5oPgogCiAjZGVmaW5lIERFRklORShzeW0sIHZhbCkgXAogCWFzbSB2b2xhdGlsZSgiXG4tPiIgI3N5bSAiICUwICIgI3ZhbCA6IDogImkiICh2YWwpKQpAQCAtMTgsNiArMTksNyBAQAogCiB2b2lkIGZvbyh2b2lkKQogeworCURFRklORShLRVJORUxfTUFEVl9SRU1PVkUsIE1BRFZfUkVNT1ZFKTsKICNpZmRlZiBDT05GSUdfTU9ERV9UVAogCU9GRlNFVChIT1NUX1RBU0tfRVhURVJOX1BJRCwgdGFza19zdHJ1Y3QsIHRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC90bHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZjE5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC90bHMuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9TWVNERVBfVExTX0gKKyNkZWZpbmUgX1NZU0RFUF9UTFNfSAorCisjIGlmbmRlZiBfX0tFUk5FTF9fCisKKy8qIENoYW5nZSBuYW1lIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSBvcmlnaW5hbCBvbmUgZnJvbSA8YXNtL2xkdC5oPiwgd2hpY2gKKyAqIG1heSBiZSBuYW1lZCB1c2VyX2Rlc2MgKGJ1dCBpbiAyLjQgYW5kIGluIGhlYWRlciBtYXRjaGluZyBpdHMgQVBJIHdhcyBuYW1lZAorICogbW9kaWZ5X2xkdF9sZHRfcykuICovCisKK3R5cGVkZWYgc3RydWN0IHVtX2R1cF91c2VyX2Rlc2MgeworCXVuc2lnbmVkIGludCAgZW50cnlfbnVtYmVyOworCXVuc2lnbmVkIGludCAgYmFzZV9hZGRyOworCXVuc2lnbmVkIGludCAgbGltaXQ7CisJdW5zaWduZWQgaW50ICBzZWdfMzJiaXQ6MTsKKwl1bnNpZ25lZCBpbnQgIGNvbnRlbnRzOjI7CisJdW5zaWduZWQgaW50ICByZWFkX2V4ZWNfb25seToxOworCXVuc2lnbmVkIGludCAgbGltaXRfaW5fcGFnZXM6MTsKKwl1bnNpZ25lZCBpbnQgIHNlZ19ub3RfcHJlc2VudDoxOworCXVuc2lnbmVkIGludCAgdXNlYWJsZToxOworCXVuc2lnbmVkIGludCAgbG06MTsKK30gdXNlcl9kZXNjX3Q7CisKKyMgZWxzZSAvKiBfX0tFUk5FTF9fICovCisKKyMgIGluY2x1ZGUgPGFzbS9sZHQuaD4KK3R5cGVkZWYgc3RydWN0IHVzZXJfZGVzYyB1c2VyX2Rlc2NfdDsKKworIyBlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX1NZU0RFUF9UTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3R0L3R0LmggYi9hcmNoL3VtL2luY2x1ZGUvdHQvdHQuaAppbmRleCA4MDg1MjE5Li5hY2I4MzU2IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvdHQvdHQuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvdHQvdHQuaApAQCAtMTksNyArMTksOCBAQAogZXh0ZXJuIGludCBkb19wcm9jX29wKHZvaWQgKnQsIGludCBwcm9jX2lkKTsKIGV4dGVybiBpbnQgdHJhY2VyKGludCAoKmluaXRfcHJvYykodm9pZCAqKSwgdm9pZCAqc3ApOwogZXh0ZXJuIHZvaWQgYXR0YWNoX3Byb2Nlc3MoaW50IHBpZCk7Ci1leHRlcm4gdm9pZCB0cmFjZXJfcGFuaWMoY2hhciAqZm9ybWF0LCAuLi4pOworZXh0ZXJuIHZvaWQgdHJhY2VyX3BhbmljKGNoYXIgKmZvcm1hdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKIGV4dGVybiB2b2lkIHNldF9pbml0X3BpZChpbnQgcGlkKTsKIGV4dGVybiBpbnQgc2V0X3VzZXJfbW9kZSh2b2lkICp0YXNrKTsKIGV4dGVybiB2b2lkIHNldF90cmFjaW5nKHZvaWQgKnQsIGludCB0cmFjaW5nKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvdXNlci5oCmluZGV4IDkxYjBhYzQuLjM5ZjhjODggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS91c2VyLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3VzZXIuaApAQCAtNiw4ICs2LDEwIEBACiAjaWZuZGVmIF9fVVNFUl9IX18KICNkZWZpbmUgX19VU0VSX0hfXwogCi1leHRlcm4gdm9pZCBwYW5pYyhjb25zdCBjaGFyICpmbXQsIC4uLik7Ci1leHRlcm4gaW50IHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCBwYW5pYyhjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitleHRlcm4gaW50IHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiBleHRlcm4gdm9pZCBzY2hlZHVsZSh2b2lkKTsKIGV4dGVybiB2b2lkICp1bV9rbWFsbG9jKGludCBzaXplKTsKIGV4dGVybiB2b2lkICp1bV9rbWFsbG9jX2F0b21pYyhpbnQgc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdXNlcl91dGlsLmggYi9hcmNoL3VtL2luY2x1ZGUvdXNlcl91dGlsLmgKaW5kZXggOTkyYTdlMS4uODAyZDc4NCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3VzZXJfdXRpbC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS91c2VyX3V0aWwuaApAQCAtOCw2ICs4LDkgQEAKIAogI2luY2x1ZGUgInN5c2RlcC9wdHJhY2UuaCIKIAorLyogQ29waWVkIGZyb20ga2VybmVsLmggKi8KKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCisKICNkZWZpbmUgQ0FUQ0hfRUlOVFIoZXhwcikgd2hpbGUgKChlcnJubyA9IDAsICgoZXhwcikgPCAwKSkgJiYgKGVycm5vID09IEVJTlRSKSkKIAogZXh0ZXJuIGludCBtb2RlX3R0OwpAQCAtMzEsNyArMzQsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdW1sX3Jlc2VydmVkOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX3ZtOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3RhcnRfdm07Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBoaWdobWVtOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBoaWdobWVtOwogCiBleHRlcm4gY2hhciBob3N0X2luZm9bXTsKIApAQCAtNTIsNyArNTUsOCBAQAogZXh0ZXJuIHZvaWQgKnVtX2ttYWxsb2MoaW50IHNpemUpOwogZXh0ZXJuIGludCBzd2l0Y2hlcm9vKGludCBmZCwgaW50IHByb3QsIHZvaWQgKmZyb20sIHZvaWQgKnRvLCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCBkb19leGVjKGludCBvbGRfcGlkLCBpbnQgbmV3X3BpZCk7Ci1leHRlcm4gdm9pZCB0cmFjZXJfcGFuaWMoY2hhciAqbXNnLCAuLi4pOworZXh0ZXJuIHZvaWQgdHJhY2VyX3BhbmljKGNoYXIgKm1zZywgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKIGV4dGVybiBpbnQgZGV0YWNoKGludCBwaWQsIGludCBzaWcpOwogZXh0ZXJuIGludCBhdHRhY2goaW50IHBpZCk7CiBleHRlcm4gdm9pZCBraWxsX2NoaWxkX2RlYWQoaW50IHBpZCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9leGVjX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL2V4ZWNfa2Vybi5jCmluZGV4IDFjYTg0MzEuLmMwY2I2MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2V4ZWNfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL2V4ZWNfa2Vybi5jCkBAIC0yMiw2ICsyMiw3IEBACiAKIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCiB7CisJYXJjaF9mbHVzaF90aHJlYWQoJmN1cnJlbnQtPnRocmVhZC5hcmNoKTsKIAlDSE9PU0VfTU9ERShmbHVzaF90aHJlYWRfdHQoKSwgZmx1c2hfdGhyZWFkX3NrYXMoKSk7CiB9CiAKQEAgLTU4LDE0ICs1OSwxNCBAQAogCXJldHVybihlcnIpOwogfQogCi1sb25nIHN5c19leGVjdmUoY2hhciAqZmlsZSwgY2hhciBfX3VzZXIgKl9fdXNlciAqYXJndiwKK2xvbmcgc3lzX2V4ZWN2ZShjaGFyIF9fdXNlciAqZmlsZSwgY2hhciBfX3VzZXIgKl9fdXNlciAqYXJndiwKIAkJY2hhciBfX3VzZXIgKl9fdXNlciAqZW52KQogewogCWxvbmcgZXJyb3I7CiAJY2hhciAqZmlsZW5hbWU7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWZpbGVuYW1lID0gZ2V0bmFtZSgoY2hhciBfX3VzZXIgKikgZmlsZSk7CisJZmlsZW5hbWUgPSBnZXRuYW1lKGZpbGUpOwogCWVycm9yID0gUFRSX0VSUihmaWxlbmFtZSk7CiAJaWYgKElTX0VSUihmaWxlbmFtZSkpIGdvdG8gb3V0OwogCWVycm9yID0gZXhlY3ZlMShmaWxlbmFtZSwgYXJndiwgZW52KTsKQEAgLTc0LDE0ICs3NSwzIEBACiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybihlcnJvcik7CiB9Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pcnEuYyBiL2FyY2gvdW0va2VybmVsL2lycS5jCmluZGV4IGMzOWVhM2EuLjJmZmRhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2lycS5jCkBAIC04OSwxNiArODksMTggQEAKIAlzdHJ1Y3QgaXJxX2ZkICppcnFfZmQ7CiAJaW50IG47CiAKLQlpZihzbXBfc2lnaW9faGFuZGxlcigpKSByZXR1cm47Ci0Jd2hpbGUoMSl7CisJaWYgKHNtcF9zaWdpb19oYW5kbGVyKCkpCisJCXJldHVybjsKKworCXdoaWxlICgxKSB7CiAJCW4gPSBvc193YWl0aW5nX2Zvcl9ldmVudHMoYWN0aXZlX2Zkcyk7CiAJCWlmIChuIDw9IDApIHsKIAkJCWlmKG4gPT0gLUVJTlRSKSBjb250aW51ZTsKIAkJCWVsc2UgYnJlYWs7CiAJCX0KIAotCQlmb3IoaXJxX2ZkID0gYWN0aXZlX2ZkczsgaXJxX2ZkICE9IE5VTEw7IGlycV9mZCA9IGlycV9mZC0+bmV4dCl7Ci0JCQlpZihpcnFfZmQtPmN1cnJlbnRfZXZlbnRzICE9IDApeworCQlmb3IgKGlycV9mZCA9IGFjdGl2ZV9mZHM7IGlycV9mZCAhPSBOVUxMOyBpcnFfZmQgPSBpcnFfZmQtPm5leHQpIHsKKwkJCWlmIChpcnFfZmQtPmN1cnJlbnRfZXZlbnRzICE9IDApIHsKIAkJCQlpcnFfZmQtPmN1cnJlbnRfZXZlbnRzID0gMDsKIAkJCQlkb19JUlEoaXJxX2ZkLT5pcnEsIHJlZ3MpOwogCQkJfQpAQCAtMTEwLDE5ICsxMTIsMTcgQEAKIAogc3RhdGljIHZvaWQgbWF5YmVfc2lnaW9fYnJva2VuKGludCBmZCwgaW50IHR5cGUpCiB7Ci0JaWYob3NfaXNhdHR5KGZkKSl7Ci0JCWlmKCh0eXBlID09IElSUV9XUklURSkgJiYgIXB0eV9vdXRwdXRfc2lnaW8peworCWlmIChvc19pc2F0dHkoZmQpKSB7CisJCWlmICgodHlwZSA9PSBJUlFfV1JJVEUpICYmICFwdHlfb3V0cHV0X3NpZ2lvKSB7CiAJCQl3cml0ZV9zaWdpb193b3JrYXJvdW5kKCk7CiAJCQlhZGRfc2lnaW9fZmQoZmQsIDApOwotCQl9Ci0JCWVsc2UgaWYoKHR5cGUgPT0gSVJRX1JFQUQpICYmICFwdHlfY2xvc2Vfc2lnaW8peworCQl9IGVsc2UgaWYgKCh0eXBlID09IElSUV9SRUFEKSAmJiAhcHR5X2Nsb3NlX3NpZ2lvKSB7CiAJCQl3cml0ZV9zaWdpb193b3JrYXJvdW5kKCk7CiAJCQlhZGRfc2lnaW9fZmQoZmQsIDEpOwogCQl9CiAJfQogfQogCi0KIGludCBhY3RpdmF0ZV9mZChpbnQgaXJxLCBpbnQgZmQsIGludCB0eXBlLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHBvbGxmZCAqdG1wX3BmZDsKQEAgLTEzMiwxNiArMTMyLDE4IEBACiAKIAlwaWQgPSBvc19nZXRwaWQoKTsKIAllcnIgPSBvc19zZXRfZmRfYXN5bmMoZmQsIHBpZCk7Ci0JaWYoZXJyIDwgMCkKKwlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKIAluZXdfZmQgPSB1bV9rbWFsbG9jKHNpemVvZigqbmV3X2ZkKSk7CiAJZXJyID0gLUVOT01FTTsKLQlpZihuZXdfZmQgPT0gTlVMTCkKKwlpZiAobmV3X2ZkID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCi0JaWYodHlwZSA9PSBJUlFfUkVBRCkgZXZlbnRzID0gVU1fUE9MTElOIHwgVU1fUE9MTFBSSTsKLQllbHNlIGV2ZW50cyA9IFVNX1BPTExPVVQ7CisJaWYgKHR5cGUgPT0gSVJRX1JFQUQpCisJCWV2ZW50cyA9IFVNX1BPTExJTiB8IFVNX1BPTExQUkk7CisJZWxzZQorCQlldmVudHMgPSBVTV9QT0xMT1VUOwogCSpuZXdfZmQgPSAoKHN0cnVjdCBpcnFfZmQpIHsgLm5leHQgIAkJPSBOVUxMLAogCQkJCSAgICAgLmlkIAkJPSBkZXZfaWQsCiAJCQkJICAgICAuZmQgCQk9IGZkLApAQCAtMTY1LDggKzE2Nyw4IEBACiAJICogYSBzZW1hcGhvcmUuCiAJICovCiAJZmxhZ3MgPSBpcnFfbG9jaygpOwotCWZvcihpcnFfZmQgPSBhY3RpdmVfZmRzOyBpcnFfZmQgIT0gTlVMTDsgaXJxX2ZkID0gaXJxX2ZkLT5uZXh0KXsKLQkJaWYoKGlycV9mZC0+ZmQgPT0gZmQpICYmIChpcnFfZmQtPnR5cGUgPT0gdHlwZSkpeworCWZvciAoaXJxX2ZkID0gYWN0aXZlX2ZkczsgaXJxX2ZkICE9IE5VTEw7IGlycV9mZCA9IGlycV9mZC0+bmV4dCkgeworCQlpZiAoKGlycV9mZC0+ZmQgPT0gZmQpICYmIChpcnFfZmQtPnR5cGUgPT0gdHlwZSkpIHsKIAkJCXByaW50aygiUmVnaXN0ZXJpbmcgZmQgJWQgdHdpY2VcbiIsIGZkKTsKIAkJCXByaW50aygiSXJxcyA6ICVkLCAlZFxuIiwgaXJxX2ZkLT5pcnEsIGlycSk7CiAJCQlwcmludGsoIklkcyA6IDB4JXAsIDB4JXBcbiIsIGlycV9mZC0+aWQsIGRldl9pZCk7CkBAIC0xNzUsMTMgKzE3NywxMyBAQAogCX0KIAogCS8qLS0tLS0tLS0tLS0tLSovCi0JaWYodHlwZSA9PSBJUlFfV1JJVEUpCisJaWYgKHR5cGUgPT0gSVJRX1dSSVRFKQogCQlmZCA9IC0xOwogCiAJdG1wX3BmZCA9IE5VTEw7CiAJbiA9IDA7CiAKLQl3aGlsZSgxKXsKKwl3aGlsZSAoMSkgewogCQluID0gb3NfY3JlYXRlX3BvbGxmZChmZCwgZXZlbnRzLCB0bXBfcGZkLCBuKTsKIAkJaWYgKG4gPT0gMCkKIAkJCWJyZWFrOwpAQCAtMTk4LDEwICsyMDAsOCBAQAogCQkgKiB0aGVuIHdlIGZyZWUgdGhlIGJ1ZmZlciB0bXBfZmRzIGFuZCB0cnkgYWdhaW4uCiAJCSAqLwogCQlpcnFfdW5sb2NrKGZsYWdzKTsKLQkJaWYgKHRtcF9wZmQgIT0gTlVMTCkgewotCQkJa2ZyZWUodG1wX3BmZCk7Ci0JCQl0bXBfcGZkID0gTlVMTDsKLQkJfQorCQlrZnJlZSh0bXBfcGZkKTsKKwkJdG1wX3BmZCA9IE5VTEw7CiAKIAkJdG1wX3BmZCA9IHVtX2ttYWxsb2Mobik7CiAJCWlmICh0bXBfcGZkID09IE5VTEwpCkBAIC0yNDksNyArMjQ5LDcgQEAKIHsKIAlzdHJ1Y3QgaXJxX2FuZF9kZXYgKmRhdGEgPSBkOwogCi0JcmV0dXJuKChpcnEtPmlycSA9PSBkYXRhLT5pcnEpICYmIChpcnEtPmlkID09IGRhdGEtPmRldikpOworCXJldHVybiAoKGlycS0+aXJxID09IGRhdGEtPmlycSkgJiYgKGlycS0+aWQgPT0gZGF0YS0+ZGV2KSk7CiB9CiAKIHZvaWQgZnJlZV9pcnFfYnlfaXJxX2FuZF9kZXYodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2KQpAQCAtMjYyLDcgKzI2Miw3IEBACiAKIHN0YXRpYyBpbnQgc2FtZV9mZChzdHJ1Y3QgaXJxX2ZkICppcnEsIHZvaWQgKmZkKQogewotCXJldHVybihpcnEtPmZkID09ICooKGludCAqKSBmZCkpOworCXJldHVybiAoaXJxLT5mZCA9PSAqKChpbnQgKilmZCkpOwogfQogCiB2b2lkIGZyZWVfaXJxX2J5X2ZkKGludCBmZCkKQEAgLTI3NiwxNiArMjc2LDE3IEBACiAJaW50IGkgPSAwOwogCWludCBmZGk7CiAKLQlmb3IoaXJxPWFjdGl2ZV9mZHM7IGlycSAhPSBOVUxMOyBpcnEgPSBpcnEtPm5leHQpewotCQlpZigoaXJxLT5mZCA9PSBmZCkgJiYgKGlycS0+aXJxID09IGlycW51bSkpIGJyZWFrOworCWZvciAoaXJxID0gYWN0aXZlX2ZkczsgaXJxICE9IE5VTEw7IGlycSA9IGlycS0+bmV4dCkgeworCQlpZiAoKGlycS0+ZmQgPT0gZmQpICYmIChpcnEtPmlycSA9PSBpcnFudW0pKQorCQkJYnJlYWs7CiAJCWkrKzsKIAl9Ci0JaWYoaXJxID09IE5VTEwpeworCWlmIChpcnEgPT0gTlVMTCkgewogCQlwcmludGsoImZpbmRfaXJxX2J5X2ZkIGRvZXNuJ3QgaGF2ZSBkZXNjcmlwdG9yICVkXG4iLCBmZCk7CiAJCWdvdG8gb3V0OwogCX0KIAlmZGkgPSBvc19nZXRfcG9sbGZkKGkpOwotCWlmKChmZGkgIT0gLTEpICYmIChmZGkgIT0gZmQpKXsKKwlpZiAoKGZkaSAhPSAtMSkgJiYgKGZkaSAhPSBmZCkpIHsKIAkJcHJpbnRrKCJmaW5kX2lycV9ieV9mZCAtIG1pc21hdGNoIGJldHdlZW4gYWN0aXZlX2ZkcyBhbmQgIgogCQkgICAgICAgInBvbGxmZHMsIGZkICVkIHZzICVkLCBuZWVkICVkXG4iLCBpcnEtPmZkLAogCQkgICAgICAgZmRpLCBmZCk7CkBAIC0yOTQsNyArMjk1LDcgQEAKIAl9CiAJKmluZGV4X291dCA9IGk7CiAgb3V0OgotCXJldHVybihpcnEpOworCXJldHVybiBpcnE7CiB9CiAKIHZvaWQgcmVhY3RpdmF0ZV9mZChpbnQgZmQsIGludCBpcnFudW0pCkBAIC0zMDUsNyArMzA2LDcgQEAKIAogCWZsYWdzID0gaXJxX2xvY2soKTsKIAlpcnEgPSBmaW5kX2lycV9ieV9mZChmZCwgaXJxbnVtLCAmaSk7Ci0JaWYoaXJxID09IE5VTEwpeworCWlmIChpcnEgPT0gTlVMTCkgewogCQlpcnFfdW5sb2NrKGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTMyNiw3ICszMjcsNyBAQAogCiAJZmxhZ3MgPSBpcnFfbG9jaygpOwogCWlycSA9IGZpbmRfaXJxX2J5X2ZkKGZkLCBpcnFudW0sICZpKTsKLQlpZihpcnEgPT0gTlVMTCkKKwlpZiAoaXJxID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCW9zX3NldF9wb2xsZmQoaSwgLTEpOwogIG91dDoKQEAgLTMzOCwxNSArMzM5LDE1IEBACiAJc3RydWN0IGlycV9mZCAqaXJxOwogCWludCBlcnI7CiAKLQlmb3IoaXJxPWFjdGl2ZV9mZHM7aXJxICE9IE5VTEw7aXJxID0gaXJxLT5uZXh0KXsKKwlmb3IgKGlycSA9IGFjdGl2ZV9mZHM7IGlycSAhPSBOVUxMOyBpcnEgPSBpcnEtPm5leHQpIHsKIAkJZXJyID0gb3NfY2xlYXJfZmRfYXN5bmMoaXJxLT5mZCk7Ci0JCWlmKGVycikKLQkJCXJldHVybihlcnIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9CiAJLyogSWYgdGhlcmUgaXMgYSBzaWduYWwgYWxyZWFkeSBxdWV1ZWQsIGFmdGVyIHVuYmxvY2tpbmcgaWdub3JlIGl0ICovCiAJb3Nfc2V0X2lvaWdub3JlKCk7CiAKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZm9yd2FyZF9pbnRlcnJ1cHRzKGludCBwaWQpCkBAIC0zNTYsOSArMzU3LDkgQEAKIAlpbnQgZXJyOwogCiAJZmxhZ3MgPSBpcnFfbG9jaygpOwotCWZvcihpcnE9YWN0aXZlX2ZkcztpcnEgIT0gTlVMTDtpcnEgPSBpcnEtPm5leHQpeworCWZvciAoaXJxID0gYWN0aXZlX2ZkczsgaXJxICE9IE5VTEw7IGlycSA9IGlycS0+bmV4dCkgewogCQllcnIgPSBvc19zZXRfb3duZXIoaXJxLT5mZCwgcGlkKTsKLQkJaWYoZXJyIDwgMCl7CisJCWlmIChlcnIgPCAwKSB7CiAJCQkvKiBYWFggSnVzdCByZW1vdmUgdGhlIGlycSByYXRoZXIgdGhhbgogCQkJICogcHJpbnQgb3V0IGFuIGluZmluaXRlIHN0cmVhbSBvZiB0aGVzZQogCQkJICovCkBAIC0zNzksNyArMzgwLDcgQEAKIHVuc2lnbmVkIGludCBkb19JUlEoaW50IGlycSwgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpCiB7CiAgICAgICAgaXJxX2VudGVyKCk7Ci0gICAgICAgX19kb19JUlEoaXJxLCAoc3RydWN0IHB0X3JlZ3MgKikgcmVncyk7CisgICAgICAgX19kb19JUlEoaXJxLCAoc3RydWN0IHB0X3JlZ3MgKilyZWdzKTsKICAgICAgICBpcnFfZXhpdCgpOwogICAgICAgIHJldHVybiAxOwogfQpAQCAtMzkyLDEyICszOTMsMTIgQEAKIAlpbnQgZXJyOwogCiAJZXJyID0gcmVxdWVzdF9pcnEoaXJxLCBoYW5kbGVyLCBpcnFmbGFncywgZGV2bmFtZSwgZGV2X2lkKTsKLQlpZihlcnIpCi0JCXJldHVybihlcnIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKLQlpZihmZCAhPSAtMSkKKwlpZiAoZmQgIT0gLTEpCiAJCWVyciA9IGFjdGl2YXRlX2ZkKGlycSwgZmQsIHR5cGUsIGRldl9pZCk7Ci0JcmV0dXJuKGVycik7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0wodW1fcmVxdWVzdF9pcnEpOwogRVhQT1JUX1NZTUJPTChyZWFjdGl2YXRlX2ZkKTsKQEAgLTQwOSw3ICs0MTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX3NwaW5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuKGZsYWdzKTsKKwlyZXR1cm4gZmxhZ3M7CiB9CiAKIHZvaWQgaXJxX3VubG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQpAQCAtNDUyLDcgKzQ1Myw3IEBACiAJaXJxX2Rlc2NbVElNRVJfSVJRXS5kZXB0aCA9IDE7CiAJaXJxX2Rlc2NbVElNRVJfSVJRXS5oYW5kbGVyID0gJlNJR1ZUQUxSTV9pcnFfdHlwZTsKIAllbmFibGVfaXJxKFRJTUVSX0lSUSk7Ci0JZm9yKGk9MTtpPE5SX0lSUVM7aSsrKXsKKwlmb3IgKGkgPSAxOyBpIDwgTlJfSVJRUzsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOwpAQCAtNDY3LDcgKzQ2OCw3IEBACiAJaW50IGZkc1syXSwgZXJyOwogCiAJZXJyID0gb3NfcGlwZShmZHMsIDEsIDEpOwotCWlmKGVycil7CisJaWYgKGVycikgewogCQlwcmludGsoImluaXRfYWlvX2lycSAtIG9zX3BpcGUgZmFpbGVkLCBlcnIgPSAlZFxuIiwgLWVycik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQ3NSw3ICs0NzYsNyBAQAogCWVyciA9IHVtX3JlcXVlc3RfaXJxKGlycSwgZmRzWzBdLCBJUlFfUkVBRCwgaGFuZGxlciwKIAkJCSAgICAgU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwgbmFtZSwKIAkJCSAgICAgKHZvaWQgKikgKGxvbmcpIGZkc1swXSk7Ci0JaWYoZXJyKXsKKwlpZiAoZXJyKSB7CiAJCXByaW50aygiaW5pdF9haW9faXJxIC0gOiB1bV9yZXF1ZXN0X2lycSBmYWlsZWQsIGVyciA9ICVkXG4iLAogCQkgICAgICAgZXJyKTsKIAkJZ290byBvdXRfY2xvc2U7CkBAIC00ODgsNSArNDg5LDUgQEAKIAlvc19jbG9zZV9maWxlKGZkc1swXSk7CiAJb3NfY2xvc2VfZmlsZShmZHNbMV0pOwogIG91dDoKLQlyZXR1cm4oZXJyKTsKKwlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwva3N5bXMuYyBiL2FyY2gvdW0va2VybmVsL2tzeW1zLmMKaW5kZXggNzcxM2U3YS4uNDMyY2YwYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwva3N5bXMuYworKysgYi9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jCkBAIC0zOSw3ICszOSw2IEBACiBFWFBPUlRfU1lNQk9MKG1vZGVfdHQpOwogRVhQT1JUX1NZTUJPTChoYW5kbGVfcGFnZV9mYXVsdCk7CiBFWFBPUlRfU1lNQk9MKGZpbmRfaW9tZW0pOwotRVhQT1JUX1NZTUJPTChlbmRfaW9tZW0pOwogCiAjaWZkZWYgQ09ORklHX01PREVfVFQKIEVYUE9SVF9TWU1CT0woc3RybmNweV9mcm9tX3VzZXJfdHQpOwpAQCAtODksMTIgKzg4LDEwIEBACiBFWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7CiBFWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7CiAKLS8qIFRoaXMgaXMgaGVyZSBiZWNhdXNlIFVNTCBleHBhbmRzIG9wZW4gdG8gc3lzX29wZW4sIG5vdCB0byBhIHN5c3RlbQorLyogVGhpcyBpcyBoZXJlIGJlY2F1c2UgVU1MIGV4cGFuZHMgbHNlZWsgdG8gc3lzX2xzZWVrLCBub3QgdG8gYSBzeXN0ZW0KICAqIGNhbGwgaW5zdHJ1Y3Rpb24uCiAgKi8KLUVYUE9SVF9TWU1CT0woc3lzX29wZW4pOwogRVhQT1JUX1NZTUJPTChzeXNfbHNlZWspOwotRVhQT1JUX1NZTUJPTChzeXNfcmVhZCk7CiBFWFBPUlRfU1lNQk9MKHN5c193YWl0NCk7CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9tZW0uYyBiL2FyY2gvdW0va2VybmVsL21lbS5jCmluZGV4IDkyY2NlOTYuLjQ0ZTQxYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL21lbS5jCkBAIC0zMCw3ICszMCw3IEBACiB1bnNpZ25lZCBsb25nICplbXB0eV96ZXJvX3BhZ2UgPSBOVUxMOwogdW5zaWduZWQgbG9uZyAqZW1wdHlfYmFkX3BhZ2UgPSBOVUxMOwogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKLXVuc2lnbmVkIGxvbmcgaGlnaG1lbTsKK3Vuc2lnbmVkIGxvbmcgbG9uZyBoaWdobWVtOwogaW50IGttYWxsb2Nfb2sgPSAwOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBicmtfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcGh5c21lbS5jIGIvYXJjaC91bS9rZXJuZWwvcGh5c21lbS5jCmluZGV4IDA1MDA4MDAuLmZjMGYwYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYworKysgYi9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMKQEAgLTQwNyw2ICs0MDcsOCBAQAogCQkJKmxlbl9vdXQgPSByZWdpb24tPnNpemU7CiAJCQlyZXR1cm4ocmVnaW9uLT52aXJ0KTsKIAkJfQorCisJCXJlZ2lvbiA9IHJlZ2lvbi0+bmV4dDsKIAl9CiAKIAlyZXR1cm4oMCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3Nfa2Vybi5jCmluZGV4IDMxMTNjYWIuLmY2YTVhNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3Byb2Nlc3Nfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3Nfa2Vybi5jCkBAIC0xNTYsOSArMTU2LDI1IEBACiAJCXVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCAKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJaW50IHJldDsKKwogCXAtPnRocmVhZCA9IChzdHJ1Y3QgdGhyZWFkX3N0cnVjdCkgSU5JVF9USFJFQUQ7Ci0JcmV0dXJuKENIT09TRV9NT0RFX1BST0MoY29weV90aHJlYWRfdHQsIGNvcHlfdGhyZWFkX3NrYXMsIG5yLCAKLQkJCQljbG9uZV9mbGFncywgc3AsIHN0YWNrX3RvcCwgcCwgcmVncykpOworCXJldCA9IENIT09TRV9NT0RFX1BST0MoY29weV90aHJlYWRfdHQsIGNvcHlfdGhyZWFkX3NrYXMsIG5yLAorCQkJCWNsb25lX2ZsYWdzLCBzcCwgc3RhY2tfdG9wLCBwLCByZWdzKTsKKworCWlmIChyZXQgfHwgIWN1cnJlbnQtPnRocmVhZC5mb3JraW5nKQorCQlnb3RvIG91dDsKKworCWNsZWFyX2ZsdXNoZWRfdGxzKHApOworCisJLyoKKwkgKiBTZXQgYSBuZXcgVExTIGZvciB0aGUgY2hpbGQgdGhyZWFkPworCSAqLworCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKKwkJcmV0ID0gYXJjaF9jb3B5X3RscyhwKTsKKworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgaW5pdGlhbF90aHJlYWRfY2Iodm9pZCAoKnByb2MpKHZvaWQgKiksIHZvaWQgKmFyZykKQEAgLTE4NSwxMCArMjAxLDYgQEAKIHsKIAlDSE9PU0VfTU9ERSh1bWxfaWRsZV90aW1lcigpLCAodm9pZCkgMCk7CiAKLQlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKLQljdXJyZW50LT5tbSA9ICZpbml0X21tOwotCWN1cnJlbnQtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwotCiAJd2hpbGUoMSl7CiAJCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCiAKQEAgLTQwNyw3ICs0MTksNyBAQAogCXJldHVybiBzdHJsZW4oYnVmKTsKIH0KIAotc3RhdGljIGludCBwcm9jX3dyaXRlX3N5c2VtdShzdHJ1Y3QgZmlsZSAqZmlsZSxjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQsdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcHJvY193cml0ZV9zeXNlbXUoc3RydWN0IGZpbGUgKmZpbGUsY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCx2b2lkICpkYXRhKQogewogCWNoYXIgdG1wWzJdOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCmluZGV4IDk4ZTA5MzkuLjlhNzdmYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCkBAIC00Niw2ICs0Niw3IEBACiBsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCiB7CiAJaW50IGksIHJldDsKKwl1bnNpZ25lZCBsb25nIF9fdXNlciAqcCA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWRhdGE7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKIAkJLyogd2hlbiBJIGFuZCBEIHNwYWNlIGFyZSBzZXBhcmF0ZSwgdGhlc2Ugd2lsbCBuZWVkIHRvIGJlIGZpeGVkLiAqLwpAQCAtNTgsNyArNTksNyBAQAogCQljb3BpZWQgPSBhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJnRtcCwgc2l6ZW9mKHRtcCksIDApOwogCQlpZiAoY29waWVkICE9IHNpemVvZih0bXApKQogCQkJYnJlYWs7Ci0JCXJldCA9IHB1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEpOworCQlyZXQgPSBwdXRfdXNlcih0bXAsIHApOwogCQlicmVhazsKIAl9CiAKQEAgLTEzNiwxNSArMTM3LDEzIEBACiAKICNpZmRlZiBQVFJBQ0VfR0VUUkVHUwogCWNhc2UgUFRSQUNFX0dFVFJFR1M6IHsgLyogR2V0IGFsbCBncCByZWdzIGZyb20gdGhlIGNoaWxkLiAqLwotCSAgCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgKHVuc2lnbmVkIGxvbmcgKilkYXRhLCAKLQkJCSAgICAgICBNQVhfUkVHX09GRlNFVCkpIHsKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBwLCBNQVhfUkVHX09GRlNFVCkpIHsKIAkJCXJldCA9IC1FSU87CiAJCQlicmVhazsKIAkJfQogCQlmb3IgKCBpID0gMDsgaSA8IE1BWF9SRUdfT0ZGU0VUOyBpICs9IHNpemVvZihsb25nKSApIHsKLQkJCV9fcHV0X3VzZXIoZ2V0cmVnKGNoaWxkLCBpKSwKLQkJCQkgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZGF0YSk7Ci0JCQlkYXRhICs9IHNpemVvZihsb25nKTsKKwkJCV9fcHV0X3VzZXIoZ2V0cmVnKGNoaWxkLCBpKSwgcCk7CisJCQlwKys7CiAJCX0KIAkJcmV0ID0gMDsKIAkJYnJlYWs7CkBAIC0xNTMsMTUgKzE1MiwxNCBAQAogI2lmZGVmIFBUUkFDRV9TRVRSRUdTCiAJY2FzZSBQVFJBQ0VfU0VUUkVHUzogeyAvKiBTZXQgYWxsIGdwIHJlZ3MgaW4gdGhlIGNoaWxkLiAqLwogCQl1bnNpZ25lZCBsb25nIHRtcCA9IDA7Ci0JICAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICh1bnNpZ25lZCAqKWRhdGEsIAotCQkJICAgICAgIE1BWF9SRUdfT0ZGU0VUKSkgeworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgcCwgTUFYX1JFR19PRkZTRVQpKSB7CiAJCQlyZXQgPSAtRUlPOwogCQkJYnJlYWs7CiAJCX0KIAkJZm9yICggaSA9IDA7IGkgPCBNQVhfUkVHX09GRlNFVDsgaSArPSBzaXplb2YobG9uZykgKSB7Ci0JCQlfX2dldF91c2VyKHRtcCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEpOworCQkJX19nZXRfdXNlcih0bXAsIHApOwogCQkJcHV0cmVnKGNoaWxkLCBpLCB0bXApOwotCQkJZGF0YSArPSBzaXplb2YobG9uZyk7CisJCQlwKys7CiAJCX0KIAkJcmV0ID0gMDsKIAkJYnJlYWs7CkBAIC0xODcsMTQgKzE4NSwyMyBAQAogCQlyZXQgPSBzZXRfZnB4cmVncyhkYXRhLCBjaGlsZCk7CiAJCWJyZWFrOwogI2VuZGlmCisJY2FzZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBOgorCQlyZXQgPSBwdHJhY2VfZ2V0X3RocmVhZF9hcmVhKGNoaWxkLCBhZGRyLAorCQkJCQkgICAgIChzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqKSBkYXRhKTsKKwkJYnJlYWs7CisKKwljYXNlIFBUUkFDRV9TRVRfVEhSRUFEX0FSRUE6CisJCXJldCA9IHB0cmFjZV9zZXRfdGhyZWFkX2FyZWEoY2hpbGQsIGFkZHIsCisJCQkJCSAgICAgKHN0cnVjdCB1c2VyX2Rlc2MgX191c2VyICopIGRhdGEpOworCQlicmVhazsKKwogCWNhc2UgUFRSQUNFX0ZBVUxUSU5GTzogewotICAgICAgICAgICAgICAgIC8qIFRha2UgdGhlIGluZm8gZnJvbSB0aHJlYWQtPmFyY2gtPmZhdWx0aW5mbywKLSAgICAgICAgICAgICAgICAgKiBidXQgdHJhbnNmZXIgbWF4LiBzaXplb2Yoc3RydWN0IHB0cmFjZV9mYXVsdGluZm8pLgotICAgICAgICAgICAgICAgICAqIE9uIGkzODYsIHB0cmFjZV9mYXVsdGluZm8gaXMgc21hbGxlciEKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZXQgPSBjb3B5X3RvX3VzZXIoKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGlsZC0+dGhyZWFkLmFyY2guZmF1bHRpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHB0cmFjZV9mYXVsdGluZm8pKTsKKwkJLyogVGFrZSB0aGUgaW5mbyBmcm9tIHRocmVhZC0+YXJjaC0+ZmF1bHRpbmZvLAorCQkgKiBidXQgdHJhbnNmZXIgbWF4LiBzaXplb2Yoc3RydWN0IHB0cmFjZV9mYXVsdGluZm8pLgorCQkgKiBPbiBpMzg2LCBwdHJhY2VfZmF1bHRpbmZvIGlzIHNtYWxsZXIhCisJCSAqLworCQlyZXQgPSBjb3B5X3RvX3VzZXIocCwgJmNoaWxkLT50aHJlYWQuYXJjaC5mYXVsdGluZm8sCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBwdHJhY2VfZmF1bHRpbmZvKSk7CiAJCWlmKHJldCkKIAkJCWJyZWFrOwogCQlicmVhazsKQEAgLTIwNCw4ICsyMTEsNyBAQAogCWNhc2UgUFRSQUNFX0xEVDogewogCQlzdHJ1Y3QgcHRyYWNlX2xkdCBsZHQ7CiAKLQkJaWYoY29weV9mcm9tX3VzZXIoJmxkdCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEsCi0JCQkJICBzaXplb2YobGR0KSkpeworCQlpZihjb3B5X2Zyb21fdXNlcigmbGR0LCBwLCBzaXplb2YobGR0KSkpewogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNjksMTUgKzI3NSwxMyBAQAogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKSB7CiAJCWlmICghZW50cnlleGl0KQotCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT1NUX0FVRElUX0FSQ0gsCisJCQlhdWRpdF9zeXNjYWxsX2VudHJ5KEhPU1RfQVVESVRfQVJDSCwKIAkJCQkJICAgIFVQVF9TWVNDQUxMX05SKHJlZ3MpLAogCQkJCQkgICAgVVBUX1NZU0NBTExfQVJHMShyZWdzKSwKIAkJCQkJICAgIFVQVF9TWVNDQUxMX0FSRzIocmVncyksCiAJCQkJCSAgICBVUFRfU1lTQ0FMTF9BUkczKHJlZ3MpLAogCQkJCQkgICAgVVBUX1NZU0NBTExfQVJHNChyZWdzKSk7Ci0JCWVsc2UgYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESVRTQ19SRVNVTFQoVVBUX1NZU0NBTExfUkVUKHJlZ3MpKSwKKwkJZWxzZSBhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQoVVBUX1NZU0NBTExfUkVUKHJlZ3MpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUFRfU1lTQ0FMTF9SRVQocmVncykpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZSBiL2FyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUKaW5kZXggNTcxODFhOS4uZWEzYThlNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZQorKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL01ha2VmaWxlCkBAIC02LDkgKzYsMTEgQEAKIG9iai15IDo9IGNsb25lLm8gZXhlY19rZXJuLm8gbWVtLm8gbW11Lm8gcHJvY2Vzc19rZXJuLm8gXAogCXN5c2NhbGwubyB0bGIubyB1YWNjZXNzLm8KIAotVVNFUl9PQkpTIDo9IGNsb25lLm8KKyMgY2xvbmUubyBpcyBpbiB0aGUgc3R1Yiwgc28gaXQgY2FuJ3QgYmUgYnVpbHQgd2l0aCBwcm9maWxpbmcKKyMgR0NDIGhhcmRlbmVkIGFsc28gYXV0by1lbmFibGVzIC1mcGljLCBidXQgd2UgbmVlZCAlZWJ4IHNvIGl0IGNhbid0IHdvcmsgLT4KKyMgZGlzYWJsZSBpdAorCitDRkxBR1NfY2xvbmUubyA6PSAkKENGTEFHU19OT19IQVJERU5JTkcpCitVTlBST0ZJTEVfT0JKUyA6PSBjbG9uZS5vCiAKIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCi0KLSMgY2xvbmUubyBpcyBpbiB0aGUgc3R1Yiwgc28gaXQgY2FuJ3QgYmUgYnVpbHQgd2l0aCBwcm9maWxpbmcKLSQob2JqKS9jbG9uZS5vIDogY19mbGFncyA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKGNhbGwgdW5wcm9maWxlLCQoVVNFUl9DRkxBR1MpKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9wcm9jZXNzX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzc19rZXJuLmMKaW5kZXggM2Y3MGEyZS4uMjEzNWVhZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9wcm9jZXNzX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3Nfa2Vybi5jCkBAIC0zNSw2ICszNSw4IEBACiAJc3dpdGNoX3RocmVhZHMoJmZyb20tPnRocmVhZC5tb2RlLnNrYXMuc3dpdGNoX2J1ZiwKIAkJICAgICAgIHRvLT50aHJlYWQubW9kZS5za2FzLnN3aXRjaF9idWYpOwogCisJYXJjaF9zd2l0Y2hfdG9fc2thcyhjdXJyZW50LT50aHJlYWQucHJldl9zY2hlZCwgY3VycmVudCk7CisKIAlpZihjdXJyZW50LT5waWQgPT0gMCkKIAkJc3dpdGNoX3RpbWVycygxKTsKIH0KQEAgLTg5LDEwICs5MSwxNyBAQAogCQlwYW5pYygiYmxlY2giKTsKIAogCXNjaGVkdWxlX3RhaWwoY3VycmVudC0+dGhyZWFkLnByZXZfc2NoZWQpOworCisJLyogWFhYOiBpZiBpbnRlcnJ1cHRfZW5kKCkgY2FsbHMgc2NoZWR1bGUsIHRoaXMgY2FsbCB0bworCSAqIGFyY2hfc3dpdGNoX3RvX3NrYXMgaXNuJ3QgbmVlZGVkLiBXZSBjb3VsZCB3YW50IHRvIGFwcGx5IHRoaXMgdG8KKwkgKiBpbXByb3ZlIHBlcmZvcm1hbmNlLiAtYmIgKi8KKwlhcmNoX3N3aXRjaF90b19za2FzKGN1cnJlbnQtPnRocmVhZC5wcmV2X3NjaGVkLCBjdXJyZW50KTsKKwogCWN1cnJlbnQtPnRocmVhZC5wcmV2X3NjaGVkID0gTlVMTDsKIAogLyogSGFuZGxlIGFueSBpbW1lZGlhdGUgcmVzY2hlZHVsZXMgb3Igc2lnbmFscyAqLwogCWludGVycnVwdF9lbmQoKTsKKwogCXVzZXJzcGFjZSgmY3VycmVudC0+dGhyZWFkLnJlZ3MucmVncyk7CiB9CiAKQEAgLTEwOSw2ICsxMTgsOCBAQAogCQlpZihzcCAhPSAwKSBSRUdTX1NQKHAtPnRocmVhZC5yZWdzLnJlZ3Muc2thcy5yZWdzKSA9IHNwOwogCiAJCWhhbmRsZXIgPSBmb3JrX2hhbmRsZXI7CisKKwkJYXJjaF9jb3B5X3RocmVhZCgmY3VycmVudC0+dGhyZWFkLmFyY2gsICZwLT50aHJlYWQuYXJjaCk7CiAJfQogCWVsc2UgewogCQlpbml0X3RocmVhZF9yZWdpc3RlcnMoJnAtPnRocmVhZC5yZWdzLnJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc3lzY2FsbF9rZXJuLmMgYi9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsX2tlcm4uYwppbmRleCA4ZTFhMzUwLi4zN2QzOTc4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsX2tlcm4uYwpAQCAtMTA0LDcgKzEwNCw3IEBACiB9CiAKIAotbG9uZyBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lICogbmFtZSkKK2xvbmcgc3lzX3VuYW1lKHN0cnVjdCBvbGRfdXRzbmFtZSBfX3VzZXIgKiBuYW1lKQogewogCWxvbmcgZXJyOwogCWlmICghbmFtZSkKQEAgLTExNSw3ICsxMTUsNyBAQAogCXJldHVybiBlcnI/LUVGQVVMVDowOwogfQogCi1sb25nIHN5c19vbGR1bmFtZShzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgKiBuYW1lKQorbG9uZyBzeXNfb2xkdW5hbWUoc3RydWN0IG9sZG9sZF91dHNuYW1lIF9fdXNlciAqIG5hbWUpCiB7CiAJbG9uZyBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMgYi9hcmNoL3VtL2tlcm5lbC90aW1lX2tlcm4uYwppbmRleCAzYzc2MjZjLi44NmY1MWQwIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90aW1lX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC90aW1lX2tlcm4uYwpAQCAtODQsNiArODQsMTYgQEAKIAl9CiB9CiAKKwordm9pZCB0aW1lX2luaXRfa2Vybih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjczsKKworCW5zZWNzID0gb3NfbnNlY3MoKTsKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIC1uc2VjcyAvIEJJTExJT04sCisJCQkJLW5zZWNzICUgQklMTElPTik7Cit9CisKIHZvaWQgZG9fYm9vdF90aW1lcl9oYW5kbGVyKHN0cnVjdCBzaWdjb250ZXh0ICogc2MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKQEAgLTIwOSw0ICsyMTksNCBAQAogCXJldHVybigwKTsKIH0KIAotX19pbml0Y2FsbCh0aW1lcl9pbml0KTsKK2FyY2hfaW5pdGNhbGwodGltZXJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90cmFwX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3RyYXBfa2Vybi5jCmluZGV4IGQ1NjA0NmMuLjAyZjZkNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3RyYXBfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3RyYXBfa2Vybi5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAkJc2kuc2lfc2lnbm8gPSBTSUdCVVM7CiAJCXNpLnNpX2Vycm5vID0gMDsKIAkJc2kuc2lfY29kZSA9IEJVU19BRFJFUlI7Ci0JCXNpLnNpX2FkZHIgPSAodm9pZCAqKWFkZHJlc3M7CisJCXNpLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOwogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnRocmVhZC5hcmNoLmZhdWx0aW5mbyA9IGZpOwogCQlmb3JjZV9zaWdfaW5mbyhTSUdCVVMsICZzaSwgY3VycmVudCk7CiAJfSBlbHNlIGlmIChlcnIgPT0gLUVOT01FTSkgewpAQCAtMjA3LDcgKzIwNyw3IEBACiAJfSBlbHNlIHsKIAkJQlVHX09OKGVyciAhPSAtRUZBVUxUKTsKIAkJc2kuc2lfc2lnbm8gPSBTSUdTRUdWOwotCQlzaS5zaV9hZGRyID0gKHZvaWQgKikgYWRkcmVzczsKKwkJc2kuc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSBhZGRyZXNzOwogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnRocmVhZC5hcmNoLmZhdWx0aW5mbyA9IGZpOwogCQlmb3JjZV9zaWdfaW5mbyhTSUdTRUdWLCAmc2ksIGN1cnJlbnQpOwogCX0KQEAgLTIyMCw4ICsyMjAsOCBAQAogCiAJc2kuc2lfc2lnbm8gPSBTSUdTRUdWOwogCXNpLnNpX2NvZGUgPSBTRUdWX0FDQ0VSUjsKLSAgICAgICAgc2kuc2lfYWRkciA9ICh2b2lkICopIEZBVUxUX0FERFJFU1MoZmkpOwotICAgICAgICBjdXJyZW50LT50aHJlYWQuYXJjaC5mYXVsdGluZm8gPSBmaTsKKwlzaS5zaV9hZGRyID0gKHZvaWQgX191c2VyICopIEZBVUxUX0FERFJFU1MoZmkpOworCWN1cnJlbnQtPnRocmVhZC5hcmNoLmZhdWx0aW5mbyA9IGZpOwogCWZvcmNlX3NpZ19pbmZvKFNJR1NFR1YsICZzaSwgY3VycmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L3Byb2Nlc3Nfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvdHQvcHJvY2Vzc19rZXJuLmMKaW5kZXggMjk1YzFhYy4uYTljMTQ0MyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvcHJvY2Vzc19rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvcHJvY2Vzc19rZXJuLmMKQEAgLTUxLDYgKzUxLDEzIEBACiAKIAljID0gMDsKIAorCS8qIE5vdGljZSB0aGF0IGhlcmUgd2UgInVwIiB0aGUgc2VtYXBob3JlIG9uIHdoaWNoICJ0byIgaXMgd2FpdGluZywgYW5kCisJICogYmVsb3cgKHRoZSByZWFkKSB3ZSB3YWl0IG9uIHRoaXMgc2VtYXBob3JlICh3aGljaCBpcyBpbXBsZW1lbnRlZCBieQorCSAqIHN3aXRjaF9waXBlKSBhbmQgZ28gc2xlZXBpbmcuIFRodXMsIGFmdGVyIHRoYXQsIHdlIGhhdmUgcmVzdW1lZCBpbgorCSAqICJ0byIsIGFuZCBjYW4ndCB1c2UgYW55IG1vcmUgdGhlIHZhbHVlIG9mICJmcm9tIiAod2hpY2ggaXMgb3V0ZGF0ZWQpLAorCSAqIG5vciB0aGUgdmFsdWUgaW4gInRvIiAoc2luY2UgaXQgd2FzIHRoZSB0YXNrIHdoaWNoIHN0b2xlIHVzIHRoZSBDUFUsCisJICogd2hpY2ggd2UgZG9uJ3QgY2FyZSBhYm91dCkuICovCisKIAllcnIgPSBvc193cml0ZV9maWxlKHRvLT50aHJlYWQubW9kZS50dC5zd2l0Y2hfcGlwZVsxXSwgJmMsIHNpemVvZihjKSk7CiAJaWYoZXJyICE9IHNpemVvZihjKSkKIAkJcGFuaWMoIndyaXRlIG9mIHN3aXRjaF9waXBlIGZhaWxlZCwgZXJyID0gJWQiLCAtZXJyKTsKQEAgLTc3LDcgKzg0LDcgQEAKIAljaGFuZ2Vfc2lnKFNJR0FMUk0sIGFscm0pOwogCWNoYW5nZV9zaWcoU0lHUFJPRiwgcHJvZik7CiAKLQlhcmNoX3N3aXRjaCgpOworCWFyY2hfc3dpdGNoX3RvX3R0KHByZXZfc2NoZWQsIGN1cnJlbnQpOwogCiAJZmx1c2hfdGxiX2FsbCgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTE0MSw3ICsxNDgsNiBAQAogCXNldF9jbWRsaW5lKCIoa2VybmVsIHRocmVhZCkiKTsKIAogCWNoYW5nZV9zaWcoU0lHVVNSMSwgMSk7Ci0JY2hhbmdlX3NpZyhTSUdWVEFMUk0sIDEpOwogCWNoYW5nZV9zaWcoU0lHUFJPRiwgMSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWlmKCFydW5fa2VybmVsX3RocmVhZChmbiwgYXJnLCAmY3VycmVudC0+dGhyZWFkLmV4ZWNfYnVmKSkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUgYi9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlCmluZGV4IDE2NTkzODYuLmY0YmZjNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKICMKIAogb2JqLXkgPSBhaW8ubyBlbGZfYXV4Lm8gZmlsZS5vIGhlbHBlci5vIGlycS5vIG1haW4ubyBtZW0ubyBwcm9jZXNzLm8gc2lnaW8ubyBcCi0Jc2lnbmFsLm8gc3RhcnRfdXAubyB0aW1lLm8gdHJhcC5vIHR0Lm8gdHR5Lm8gdWFjY2Vzcy5vIHVtaWQubyBcCisJc2lnbmFsLm8gc3RhcnRfdXAubyB0aW1lLm8gdHJhcC5vIHR0Lm8gdHR5Lm8gdWFjY2Vzcy5vIHVtaWQubyB0bHMubyBcCiAJdXNlcl9zeW1zLm8gdXRpbC5vIGRyaXZlcnMvIHN5cy0kKFNVQkFSQ0gpLwogCiBvYmotJChDT05GSUdfTU9ERV9TS0FTKSArPSBza2FzLwpAQCAtMTIsMTIgKzEyLDkgQEAKIHVzZXItb2Jqcy0kKENPTkZJR19UVFlfTE9HKSArPSB0dHlfbG9nLm8KIAogVVNFUl9PQkpTIDo9ICQodXNlci1vYmpzLXkpIGFpby5vIGVsZl9hdXgubyBmaWxlLm8gaGVscGVyLm8gaXJxLm8gbWFpbi5vIG1lbS5vIFwKLQlwcm9jZXNzLm8gc2lnaW8ubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyB0cmFwLm8gdHQubyB0dHkubyBcCisJcHJvY2Vzcy5vIHNpZ2lvLm8gc2lnbmFsLm8gc3RhcnRfdXAubyB0aW1lLm8gdHJhcC5vIHR0Lm8gdHR5Lm8gdGxzLm8gXAogCXVhY2Nlc3MubyB1bWlkLm8gdXRpbC5vCiAKLWVsZl9hdXgubzogJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuaAotQ0ZMQUdTX2VsZl9hdXgubyArPSAtSSQob2JqdHJlZSkvYXJjaC91bQotCiBDRkxBR1NfdXNlcl9zeW1zLm8gKz0gLURTVUJBUkNIXyQoU1VCQVJDSCkKIAogSEFWRV9BSU9fQUJJIDo9ICQoc2hlbGwgWyAtciAvdXNyL2luY2x1ZGUvbGludXgvYWlvX2FiaS5oIF0gJiYgXApkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX2tlcm4uYyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF9rZXJuLmMKaW5kZXggNmFlNGIxOS4uNzY4NjA2YiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX2tlcm4uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRoZXJ0YXBfa2Vybi5jCkBAIC0xMDIsMTggKzEwMiw3IEBACiBzdGF0aWMgaW50IHJlZ2lzdGVyX2V0aGVydGFwKHZvaWQpCiB7CiAJcmVnaXN0ZXJfdHJhbnNwb3J0KCZldGhlcnRhcF90cmFuc3BvcnQpOwotCXJldHVybigxKTsKKwlyZXR1cm4gMDsKIH0KIAogX19pbml0Y2FsbChyZWdpc3Rlcl9ldGhlcnRhcCk7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRoZXJ0YXBfdXNlci5jIGIvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX3VzZXIuYwppbmRleCA5MDFiODVlLi44ZjQ5NTA3IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRoZXJ0YXBfdXNlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF91c2VyLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAkJCWludCBmZCkKIHsKIAlzdHJ1Y3QgYWRkcl9jaGFuZ2UgY2hhbmdlOwotCXZvaWQgKm91dHB1dDsKKwljaGFyICpvdXRwdXQ7CiAJaW50IG47CiAKIAljaGFuZ2Uud2hhdCA9IG9wOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL3R1bnRhcF9rZXJuLmMgYi9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwX2tlcm4uYwppbmRleCA0MjAyYjllLi4xOTAwMDlhIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwX2tlcm4uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwX2tlcm4uYwpAQCAtODcsMTggKzg3LDcgQEAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfdHVudGFwKHZvaWQpCiB7CiAJcmVnaXN0ZXJfdHJhbnNwb3J0KCZ0dW50YXBfdHJhbnNwb3J0KTsKLQlyZXR1cm4oMSk7CisJcmV0dXJuIDA7CiB9CiAKIF9faW5pdGNhbGwocmVnaXN0ZXJfdHVudGFwKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvZmlsZS5jIGIvYXJjaC91bS9vcy1MaW51eC9maWxlLmMKaW5kZXggM2JkMTBkZS4uMDkyNTEzMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9maWxlLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9maWxlLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiAJZmxhZ3MgPSBmY250bChtYXN0ZXIsIEZfR0VURkwpOwogCWlmKGZsYWdzIDwgMCkKLQkJcmV0dXJuIGVycm5vOworCQlyZXR1cm4gLWVycm5vOwogCiAJaWYoKGZjbnRsKG1hc3RlciwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLIHwgT19BU1lOQykgPCAwKSB8fAogCSAgIChmY250bChtYXN0ZXIsIEZfU0VUT1dOLCBvc19nZXRwaWQoKSkgPCAwKSkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMgYi9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jCmluZGV4IDY0OTBhNGYuLjY5ODdkMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9oZWxwZXIuYwpAQCAtNDMsNyArNDMsNyBAQAogCQkoKmRhdGEtPnByZV9leGVjKShkYXRhLT5wcmVfZGF0YSk7CiAJZXhlY3ZwKGFyZ3ZbMF0sIGFyZ3YpOwogCWVycnZhbCA9IGVycm5vOwotCXByaW50aygiZXhlY3ZwIG9mICclcycgZmFpbGVkIC0gZXJybm8gPSAlZFxuIiwgYXJndlswXSwgZXJybm8pOworCXByaW50aygiaGVscGVyX2NoaWxkIC0gZXhlY3ZlIG9mICclcycgZmFpbGVkIC0gZXJybm8gPSAlZFxuIiwgYXJndlswXSwgZXJybm8pOwogCW9zX3dyaXRlX2ZpbGUoZGF0YS0+ZmQsICZlcnJ2YWwsIHNpemVvZihlcnJ2YWwpKTsKIAlraWxsKG9zX2dldHBpZCgpLCBTSUdLSUxMKTsKIAlyZXR1cm4oMCk7CkBAIC05MiwxNSArOTIsMTUgQEAKIAljbG9zZShmZHNbMV0pOwogCWZkc1sxXSA9IC0xOwogCi0JLypSZWFkIHRoZSBlcnJubyB2YWx1ZSBmcm9tIHRoZSBjaGlsZC4qLworCS8qIFJlYWQgdGhlIGVycm5vIHZhbHVlIGZyb20gdGhlIGNoaWxkLCBpZiB0aGUgZXhlYyBmYWlsZWQsIG9yIGdldCAwIGlmCisJICogdGhlIGV4ZWMgc3VjY2VlZGVkIGJlY2F1c2UgdGhlIHBpcGUgZmQgd2FzIHNldCBhcyBjbG9zZS1vbi1leGVjLiAqLwogCW4gPSBvc19yZWFkX2ZpbGUoZmRzWzBdLCAmcmV0LCBzaXplb2YocmV0KSk7Ci0JaWYobiA8IDApeworCWlmIChuIDwgMCkgewogCQlwcmludGsoInJ1bl9oZWxwZXIgOiByZWFkIG9uIHBpcGUgZmFpbGVkLCByZXQgPSAlZFxuIiwgLW4pOwogCQlyZXQgPSBuOwogCQlraWxsKHBpZCwgU0lHS0lMTCk7CiAJCUNBVENIX0VJTlRSKHdhaXRwaWQocGlkLCBOVUxMLCAwKSk7Ci0JfQotCWVsc2UgaWYobiAhPSAwKXsKKwl9IGVsc2UgaWYobiAhPSAwKXsKIAkJQ0FUQ0hfRUlOVFIobiA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKSk7CiAJCXJldCA9IC1lcnJubzsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9pcnEuYyBiL2FyY2gvdW0vb3MtTGludXgvaXJxLmMKaW5kZXggZTU5OWJlNC4uMzc4OGQ0NSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9pcnEuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L2lycS5jCkBAIC0yOSwyMSArMjksMjEgQEAKIAlpbnQgaSwgbiwgZXJyOwogCiAJbiA9IHBvbGwocG9sbGZkcywgcG9sbGZkc19udW0sIDApOwotCWlmKG4gPCAwKXsKKwlpZiAobiA8IDApIHsKIAkJZXJyID0gLWVycm5vOwotCQlpZihlcnJubyAhPSBFSU5UUikKKwkJaWYgKGVycm5vICE9IEVJTlRSKQogCQkJcHJpbnRrKCJzaWdpb19oYW5kbGVyOiBvc193YWl0aW5nX2Zvcl9ldmVudHM6IgogCQkJICAgICAgICIgcG9sbCByZXR1cm5lZCAlZCwgZXJybm8gPSAlZFxuIiwgbiwgZXJybm8pOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmKG4gPT0gMCkKKwlpZiAobiA9PSAwKQogCQlyZXR1cm4gMDsKIAogCWlycV9mZCA9IGFjdGl2ZV9mZHM7CiAKLQlmb3IoaSA9IDA7IGkgPCBwb2xsZmRzX251bTsgaSsrKXsKLQkJaWYocG9sbGZkc1tpXS5yZXZlbnRzICE9IDApeworCWZvciAoaSA9IDA7IGkgPCBwb2xsZmRzX251bTsgaSsrKSB7CisJCWlmIChwb2xsZmRzW2ldLnJldmVudHMgIT0gMCkgewogCQkJaXJxX2ZkLT5jdXJyZW50X2V2ZW50cyA9IHBvbGxmZHNbaV0ucmV2ZW50czsKIAkJCXBvbGxmZHNbaV0uZmQgPSAtMTsKIAkJfQpAQCAtNTQsNyArNTQsNyBAQAogCiBpbnQgb3NfaXNhdHR5KGludCBmZCkKIHsKLQlyZXR1cm4oaXNhdHR5KGZkKSk7CisJcmV0dXJuIGlzYXR0eShmZCk7CiB9CiAKIGludCBvc19jcmVhdGVfcG9sbGZkKGludCBmZCwgaW50IGV2ZW50cywgdm9pZCAqdG1wX3BmZCwgaW50IHNpemVfdG1wZmRzKQpAQCAtNjUsNyArNjUsNyBAQAogCQkJcmV0dXJuKChwb2xsZmRzX3NpemUgKyAxKSAqIHNpemVvZihwb2xsZmRzWzBdKSk7CiAJCX0KIAotCQlpZihwb2xsZmRzICE9IE5VTEwpeworCQlpZiAocG9sbGZkcyAhPSBOVUxMKSB7CiAJCQltZW1jcHkodG1wX3BmZCwgcG9sbGZkcywKIAkJCSAgICAgICBzaXplb2YocG9sbGZkc1swXSkgKiBwb2xsZmRzX3NpemUpOwogCQkJLyogcmVtb3ZlIG9sZCBwb2xsZmRzICovCkBAIC03MywxOCArNzMsMTUgQEAKIAkJfQogCQlwb2xsZmRzID0gdG1wX3BmZDsKIAkJcG9sbGZkc19zaXplKys7Ci0JfSBlbHNlIHsKLQkJLyogcmVtb3ZlIG5vdCB1c2VkIHRtcF9wZmQgKi8KLQkJaWYgKHRtcF9wZmQgIT0gTlVMTCkKLQkJCWtmcmVlKHRtcF9wZmQpOwotCX0KKwl9IGVsc2UKKwkJa2ZyZWUodG1wX3BmZCk7CS8qIHJlbW92ZSBub3QgdXNlZCB0bXBfcGZkICovCiAKLQlwb2xsZmRzW3BvbGxmZHNfbnVtXSA9ICgoc3RydWN0IHBvbGxmZCkgeyAuZmQgCT0gZmQsCi0JCQkJCQkgIC5ldmVudHMgCT0gZXZlbnRzLAotCQkJCQkJICAucmV2ZW50cyAJPSAwIH0pOworCXBvbGxmZHNbcG9sbGZkc19udW1dID0gKChzdHJ1Y3QgcG9sbGZkKSB7IC5mZAkJPSBmZCwKKwkJCQkJCSAgLmV2ZW50cwk9IGV2ZW50cywKKwkJCQkJCSAgLnJldmVudHMJPSAwIH0pOwogCXBvbGxmZHNfbnVtKys7CiAKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgb3NfZnJlZV9pcnFfYnlfY2IoaW50ICgqdGVzdCkoc3RydWN0IGlycV9mZCAqLCB2b2lkICopLCB2b2lkICphcmcsCkBAIC05NCwxMSArOTEsMTEgQEAKIAlpbnQgaSA9IDA7CiAKIAlwcmV2ID0gJmFjdGl2ZV9mZHM7Ci0Jd2hpbGUoKnByZXYgIT0gTlVMTCl7Ci0JCWlmKCgqdGVzdCkoKnByZXYsIGFyZykpeworCXdoaWxlICgqcHJldiAhPSBOVUxMKSB7CisJCWlmICgoKnRlc3QpKCpwcmV2LCBhcmcpKSB7CiAJCQlzdHJ1Y3QgaXJxX2ZkICpvbGRfZmQgPSAqcHJldjsKLQkJCWlmKChwb2xsZmRzW2ldLmZkICE9IC0xKSAmJgotCQkJICAgKHBvbGxmZHNbaV0uZmQgIT0gKCpwcmV2KS0+ZmQpKXsKKwkJCWlmICgocG9sbGZkc1tpXS5mZCAhPSAtMSkgJiYKKwkJCSAgICAocG9sbGZkc1tpXS5mZCAhPSAoKnByZXYpLT5mZCkpIHsKIAkJCQlwcmludGsoIm9zX2ZyZWVfaXJxX2J5X2NiIC0gbWlzbWF0Y2ggYmV0d2VlbiAiCiAJCQkJICAgICAgICJhY3RpdmVfZmRzIGFuZCBwb2xsZmRzLCBmZCAlZCB2cyAlZFxuIiwKIAkJCQkgICAgICAgKCpwcmV2KS0+ZmQsIHBvbGxmZHNbaV0uZmQpOwpAQCAtMTEwLDcgKzEwNyw2IEBACiAJCQkvKiBUaGlzIG1vdmVzIHRoZSAqd2hvbGUqIGFycmF5IGFmdGVyIHBvbGxmZHNbaV0KIAkJCSAqICh0aG91Z2ggaXQgZG9lc24ndCBzcG90IGFzIHN1Y2gpIQogCQkJICovCi0KIAkJCW1lbW1vdmUoJnBvbGxmZHNbaV0sICZwb2xsZmRzW2kgKyAxXSwKIAkJCSAgICAgICAocG9sbGZkc19udW0gLSBpKSAqIHNpemVvZihwb2xsZmRzWzBdKSk7CiAJCQlpZigqbGFzdF9pcnFfcHRyMiA9PSAmb2xkX2ZkLT5uZXh0KQpAQCAtMTI5LDEwICsxMjUsOSBAQAogCXJldHVybjsKIH0KIAotCiBpbnQgb3NfZ2V0X3BvbGxmZChpbnQgaSkKIHsKLQlyZXR1cm4ocG9sbGZkc1tpXS5mZCk7CisJcmV0dXJuIHBvbGxmZHNbaV0uZmQ7CiB9CiAKIHZvaWQgb3Nfc2V0X3BvbGxmZChpbnQgaSwgaW50IGZkKQpAQCAtMTUxLDggKzE0NiwxMCBAQAogCWludCBmbGFnczsKIAogCWZsYWdzID0gb25fc2lnc3RhY2sgPyBTQV9PTlNUQUNLIDogMDsKLQlpZih0aW1lcl9pcnFfaW5pdGVkKSBoID0gKF9fc2lnaGFuZGxlcl90KSBhbGFybV9oYW5kbGVyOwotCWVsc2UgaCA9IGJvb3RfdGltZXJfaGFuZGxlcjsKKwlpZiAodGltZXJfaXJxX2luaXRlZCkKKwkJaCA9IChfX3NpZ2hhbmRsZXJfdClhbGFybV9oYW5kbGVyOworCWVsc2UKKwkJaCA9IGJvb3RfdGltZXJfaGFuZGxlcjsKIAogCXNldF9oYW5kbGVyKFNJR1ZUQUxSTSwgaCwgZmxhZ3MgfCBTQV9SRVNUQVJULAogCQkgICAgU0lHVVNSMSwgU0lHSU8sIFNJR1dJTkNILCBTSUdBTFJNLCAtMSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L21haW4uYyBiL2FyY2gvdW0vb3MtTGludXgvbWFpbi5jCmluZGV4IDI4NzhlODkuLjkwOTEyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvbWFpbi5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvbWFpbi5jCkBAIC01OSw3ICs1OSw3IEBACiAJaW5pdGNhbGxfdCAqY2FsbDsKIAogCWNhbGwgPSAmX191bWxfaW5pdGNhbGxfc3RhcnQ7Ci0Jd2hpbGUgKGNhbGwgPCAmX191bWxfaW5pdGNhbGxfZW5kKXs7CisJd2hpbGUgKGNhbGwgPCAmX191bWxfaW5pdGNhbGxfZW5kKXsKIAkJKCpjYWxsKSgpOwogCQljYWxsKys7CiAJfQpAQCAtNzQsNiArNzQsMzQgQEAKIAlleGl0KDEpOwogfQogCisjZGVmaW5lIFVNTF9MSUJfUEFUSAkiOi91c3IvbGliL3VtbCIKKworc3RhdGljIHZvaWQgc2V0dXBfZW52X3BhdGgodm9pZCkKK3sKKwljaGFyICpuZXdfcGF0aCA9IE5VTEw7CisJY2hhciAqb2xkX3BhdGggPSBOVUxMOworCWludCBwYXRoX2xlbiA9IDA7CisKKwlvbGRfcGF0aCA9IGdldGVudigiUEFUSCIpOworCS8qIGlmIG5vIFBBVEggdmFyaWFibGUgaXMgc2V0IG9yIGl0IGhhcyBhbiBlbXB0eSB2YWx1ZQorCSAqIGp1c3QgdXNlIHRoZSBkZWZhdWx0ICsgL3Vzci9saWIvdW1sCisJICovCisJaWYgKCFvbGRfcGF0aCB8fCAocGF0aF9sZW4gPSBzdHJsZW4ob2xkX3BhdGgpKSA9PSAwKSB7CisJCXB1dGVudigiUEFUSD06L2JpbjovdXNyL2Jpbi8iIFVNTF9MSUJfUEFUSCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBhcHBlbmQgL3Vzci9saWIvdW1sIHRvIHRoZSBleGlzdGluZyBwYXRoICovCisJcGF0aF9sZW4gKz0gc3RybGVuKCJQQVRIPSIgVU1MX0xJQl9QQVRIKSArIDE7CisJbmV3X3BhdGggPSBtYWxsb2MocGF0aF9sZW4pOworCWlmICghbmV3X3BhdGgpIHsKKwkJcGVycm9yKCJjb3Vkbid0IG1hbGxvYyB0byBzZXQgYSBuZXcgUEFUSCIpOworCQlyZXR1cm47CisJfQorCXNucHJpbnRmKG5ld19wYXRoLCBwYXRoX2xlbiwgIlBBVEg9JXMiIFVNTF9MSUJfUEFUSCwgb2xkX3BhdGgpOworCXB1dGVudihuZXdfcGF0aCk7Cit9CisKIGV4dGVybiBpbnQgdW1sX2V4aXRjb2RlOwogCiBleHRlcm4gdm9pZCBzY2FuX2VsZl9hdXgoIGNoYXIgKiplbnZwKTsKQEAgLTExNCw2ICsxNDIsOCBAQAogCiAJc2V0X3N0a2xpbSgpOwogCisJc2V0dXBfZW52X3BhdGgoKTsKKwogCW5ld19hcmd2ID0gbWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CiAJaWYobmV3X2FyZ3YgPT0gTlVMTCl7CiAJCXBlcnJvcigiTWFsbG9jaW5nIGFyZ3YiKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvbWVtLmMgYi9hcmNoL3VtL29zLUxpbnV4L21lbS5jCmluZGV4IDlkN2Q2OWEuLmM2NDMyZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvbWVtLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJ1c2VyX3V0aWwuaCIKQEAgLTE5LDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCitzdGF0aWMgY2hhciAqZGVmYXVsdF90bXBkaXIgPSAiL3RtcCI7CiBzdGF0aWMgY2hhciAqdGVtcGRpciA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX3RlbXBkaXIodm9pZCkKQEAgLTM0LDcgKzM2LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZigoZGlyID09IE5VTEwpIHx8ICgqZGlyID09ICdcMCcpKQotCQlkaXIgPSAiL3RtcCI7CisJCWRpciA9IGRlZmF1bHRfdG1wZGlyOwogCiAJdGVtcGRpciA9IG1hbGxvYyhzdHJsZW4oZGlyKSArIDIpOwogCWlmKHRlbXBkaXIgPT0gTlVMTCl7CkBAIC00Niw2ICs0OCw5NiBAQAogCXN0cmNhdCh0ZW1wZGlyLCAiLyIpOwogfQogCisvKiBUaGlzIHdpbGwgcmV0dXJuIDEsIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBidWYgYmVpbmcgdGhlCisgKiBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBuZXh0IGluc3RhbmNlIG9mIGMgaW4gdGhlIGZpbGUuICBUaGlzIHdpbGwKKyAqIHJlYWQgdGhlIGZpbGUgYXMgbmVlZGVkLiAgSWYgdGhlcmUncyBhbiBlcnJvciwgLWVycm5vIGlzIHJldHVybmVkOworICogaWYgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFjaGVkLCAwIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW50IG5leHQoaW50IGZkLCBjaGFyICpidWYsIGludCBzaXplLCBjaGFyIGMpCit7CisJaW50IG47CisJY2hhciAqcHRyOworCisJd2hpbGUoKHB0ciA9IHN0cmNocihidWYsIGMpKSA9PSBOVUxMKXsKKwkJbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZSAtIDEpOworCQlpZihuID09IDApCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZihuIDwgMCkKKwkJCXJldHVybiAtZXJybm87CisKKwkJYnVmW25dID0gJ1wwJzsKKwl9CisKKwlwdHIrKzsKKwltZW1tb3ZlKGJ1ZiwgcHRyLCBzdHJsZW4ocHRyKSArIDEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNoZWNrZWRfdG1wZGlyID0gMDsKKworLyogTG9vayBmb3IgYSB0bXBmcyBtb3VudGVkIGF0IC9kZXYvc2htLiAgSSBjb3VsZG4ndCBmaW5kIGEgY2xlYW5lcgorICogd2F5IHRvIGRvIHRoaXMgdGhhbiB0byBwYXJzZSAvcHJvYy9tb3VudHMuICBzdGF0ZnMgd2lsbCByZXR1cm4gdGhlCisgKiBzYW1lIGZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyIGFuZCBmcyBpZCBmb3IgYm90aCAvZGV2IGFuZCAvZGV2L3NobQorICogd2hlbiB0aGV5IGFyZSBib3RoIHRtcGZzLCBzbyB5b3UgY2FuJ3QgdGVsbCBpZiB0aGV5IGFyZSBkaWZmZXJlbnQKKyAqIGZpbGVzeXN0ZW1zLiAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgbm8gb3RoZXIgd2F5IG9mIGZpbmRpbmcgdGhlCisgKiBtb3VudCBwb2ludCBvZiBhIGZpbGVzeXN0ZW0gZnJvbSB3aXRoaW4gaXQuCisgKgorICogSWYgYSAvZGV2L3NobSB0bXBmcyBlbnRyeSBpcyBmb3VuZCwgdGhlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgaXQuCisgKiBPdGhlcndpc2UsIHdlIHN0YXkgd2l0aCB0aGUgZGVmYXVsdCAvdG1wLgorICovCitzdGF0aWMgdm9pZCB3aGljaF90bXBkaXIodm9pZCkKK3sKKwlpbnQgZmQsIGZvdW5kOworCWNoYXIgYnVmWzEyOF0gPSB7ICdcMCcgfTsKKworCWlmKGNoZWNrZWRfdG1wZGlyKQorCQlyZXR1cm47CisKKwljaGVja2VkX3RtcGRpciA9IDE7CisKKwlwcmludGYoIkNoZWNraW5nIGZvciB0bXBmcyBtb3VudCBvbiAvZGV2L3NobS4uLiIpOworCisJZmQgPSBvcGVuKCIvcHJvYy9tb3VudHMiLCBPX1JET05MWSk7CisJaWYoZmQgPCAwKXsKKwkJcHJpbnRmKCJmYWlsZWQgdG8gb3BlbiAvcHJvYy9tb3VudHMsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlKDEpeworCQlmb3VuZCA9IG5leHQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLyBzaXplb2YoYnVmWzBdKSwgJyAnKTsKKwkJaWYoZm91bmQgIT0gMSkKKwkJCWJyZWFrOworCisJCWlmKCFzdHJuY21wKGJ1ZiwgIi9kZXYvc2htIiwgc3RybGVuKCIvZGV2L3NobSIpKSkKKwkJCWdvdG8gZm91bmQ7CisKKwkJZm91bmQgPSBuZXh0KGZkLCBidWYsIHNpemVvZihidWYpIC8gc2l6ZW9mKGJ1ZlswXSksICdcbicpOworCQlpZihmb3VuZCAhPSAxKQorCQkJYnJlYWs7CisJfQorCitlcnI6CisJaWYoZm91bmQgPT0gMCkKKwkJcHJpbnRmKCJub3RoaW5nIG1vdW50ZWQgb24gL2Rldi9zaG1cbiIpOworCWVsc2UgaWYoZm91bmQgPCAwKQorCQlwcmludGYoInJlYWQgcmV0dXJuZWQgZXJybm8gJWRcbiIsIC1mb3VuZCk7CisKKwlyZXR1cm47CisKK2ZvdW5kOgorCWZvdW5kID0gbmV4dChmZCwgYnVmLCBzaXplb2YoYnVmKSAvIHNpemVvZihidWZbMF0pLCAnICcpOworCWlmKGZvdW5kICE9IDEpCisJCWdvdG8gZXJyOworCisJaWYoc3RybmNtcChidWYsICJ0bXBmcyIsIHN0cmxlbigidG1wZnMiKSkpeworCQlwcmludGYoIm5vdCB0bXBmc1xuIik7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoIk9LXG4iKTsKKwlkZWZhdWx0X3RtcGRpciA9ICIvZGV2L3NobSI7Cit9CisKIC8qCiAgKiBUaGlzIHByb2Mgc3RpbGwgdXNlZCBpbiB0dC1tb2RlCiAgKiAoZmlsZToga2VybmVsL3R0L3B0cHJveHkvcHJveHkuYywgcHJvYzogc3RhcnRfZGVidWdnZXIpLgpAQCAtNTMsMzMgKzE0NSwzNyBAQAogICovCiBpbnQgbWFrZV90ZW1wZmlsZShjb25zdCBjaGFyICp0ZW1wbGF0ZSwgY2hhciAqKm91dF90ZW1wbmFtZSwgaW50IGRvX3VubGluaykKIHsKLQljaGFyIHRlbXBuYW1lW01BWFBBVEhMRU5dOworCWNoYXIgKnRlbXBuYW1lOwogCWludCBmZDsKIAorCXdoaWNoX3RtcGRpcigpOworCXRlbXBuYW1lID0gbWFsbG9jKE1BWFBBVEhMRU4pOworCiAJZmluZF90ZW1wZGlyKCk7Ci0JaWYgKCp0ZW1wbGF0ZSAhPSAnLycpCisJaWYgKHRlbXBsYXRlWzBdICE9ICcvJykKIAkJc3RyY3B5KHRlbXBuYW1lLCB0ZW1wZGlyKTsKIAllbHNlCi0JCSp0ZW1wbmFtZSA9IDA7CisJCXRlbXBuYW1lWzBdID0gJ1wwJzsKIAlzdHJjYXQodGVtcG5hbWUsIHRlbXBsYXRlKTsKIAlmZCA9IG1rc3RlbXAodGVtcG5hbWUpOwogCWlmKGZkIDwgMCl7CiAJCWZwcmludGYoc3RkZXJyLCAib3BlbiAtIGNhbm5vdCBjcmVhdGUgJXM6ICVzXG4iLCB0ZW1wbmFtZSwKIAkJCXN0cmVycm9yKGVycm5vKSk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBvdXQ7CiAJfQogCWlmKGRvX3VubGluayAmJiAodW5saW5rKHRlbXBuYW1lKSA8IDApKXsKIAkJcGVycm9yKCJ1bmxpbmsiKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIG91dDsKIAl9CiAJaWYob3V0X3RlbXBuYW1lKXsKLQkJKm91dF90ZW1wbmFtZSA9IHN0cmR1cCh0ZW1wbmFtZSk7Ci0JCWlmKCpvdXRfdGVtcG5hbWUgPT0gTlVMTCl7Ci0JCQlwZXJyb3IoInN0cmR1cCIpOwotCQkJcmV0dXJuIC0xOwotCQl9CisJCSpvdXRfdGVtcG5hbWUgPSB0ZW1wbmFtZTsKKwl9IGVsc2UgeworCQlmcmVlKHRlbXBuYW1lKTsKIAl9CiAJcmV0dXJuKGZkKTsKK291dDoKKwlmcmVlKHRlbXBuYW1lKTsKKwlyZXR1cm4gLTE7CiB9CiAKICNkZWZpbmUgVEVNUE5BTUVfVEVNUExBVEUgInZtX2ZpbGUtWFhYWFhYIgpAQCAtMTIxLDM2ICsyMTcsMTEgQEAKIAlyZXR1cm4oZmQpOwogfQogCi1zdGF0aWMgaW50IGNyZWF0ZV9hbm9uX2ZpbGUodW5zaWduZWQgbG9uZyBsb25nIGxlbikKLXsKLQl2b2lkICphZGRyOwotCWludCBmZDsKLQotCWZkID0gb3BlbigiL2Rldi9hbm9uIiwgT19SRFdSKTsKLQlpZihmZCA8IDApIHsKLQkJcGVycm9yKCJvcGVuaW5nIC9kZXYvYW5vbiIpOwotCQlleGl0KDEpOwotCX0KLQotCWFkZHIgPSBtbWFwKE5VTEwsIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKLQlpZihhZGRyID09IE1BUF9GQUlMRUQpewotCQlwZXJyb3IoIm1hcHBpbmcgcGh5c21lbSBmaWxlIik7Ci0JCWV4aXQoMSk7Ci0JfQotCW11bm1hcChhZGRyLCBsZW4pOwotCi0JcmV0dXJuKGZkKTsKLX0KLQotZXh0ZXJuIGludCBoYXZlX2RldmFub247Ci0KIGludCBjcmVhdGVfbWVtX2ZpbGUodW5zaWduZWQgbG9uZyBsb25nIGxlbikKIHsKIAlpbnQgZXJyLCBmZDsKIAotCWlmKGhhdmVfZGV2YW5vbikKLQkJZmQgPSBjcmVhdGVfYW5vbl9maWxlKGxlbik7Ci0JZWxzZSBmZCA9IGNyZWF0ZV90bXBfZmlsZShsZW4pOworCWZkID0gY3JlYXRlX3RtcF9maWxlKGxlbik7CiAKIAllcnIgPSBvc19zZXRfZXhlY19jbG9zZShmZCwgMSk7CiAJaWYoZXJyIDwgMCl7CkBAIC0xNTksMyArMjMwLDI2IEBACiAJfQogCXJldHVybihmZCk7CiB9CisKKwordm9pZCBjaGVja190bXBleGVjKHZvaWQpCit7CisJdm9pZCAqYWRkcjsKKwlpbnQgZXJyLCBmZCA9IGNyZWF0ZV90bXBfZmlsZShVTV9LRVJOX1BBR0VfU0laRSk7CisKKwlhZGRyID0gbW1hcChOVUxMLCBVTV9LRVJOX1BBR0VfU0laRSwKKwkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJcHJpbnRmKCJDaGVja2luZyBQUk9UX0VYRUMgbW1hcCBpbiAlcy4uLiIsdGVtcGRpcik7CisJZmZsdXNoKHN0ZG91dCk7CisJaWYoYWRkciA9PSBNQVBfRkFJTEVEKXsKKwkJZXJyID0gZXJybm87CisJCXBlcnJvcigiZmFpbGVkIik7CisJCWlmKGVyciA9PSBFUEVSTSkKKwkJCXByaW50ZigiJXMgbXVzdCBiZSBub3QgbW91bnRlZCBub2V4ZWNcbiIsdGVtcGRpcik7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiT0tcbiIpOworCW11bm1hcChhZGRyLCBVTV9LRVJOX1BBR0VfU0laRSk7CisKKwljbG9zZShmZCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYyBiL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCmluZGV4IGQyNjE4ODguLjIzM2JlMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSAicHRyYWNlX3VzZXIuaCIKICNpbmNsdWRlICJvcy5oIgogI2luY2x1ZGUgInVzZXIuaCIKQEAgLTIwLDYgKzIxLDcgQEAKICNpbmNsdWRlICJrZXJuX3V0aWwuaCIKICNpbmNsdWRlICJsb25nam1wLmgiCiAjaW5jbHVkZSAic2thc19wdHJhY2UuaCIKKyNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgogCiAjZGVmaW5lIEFSQklUUkFSWV9BRERSIC0xCiAjZGVmaW5lIEZBSUxVUkVfUElEICAgIC0xCkBAIC0xODcsNiArMTg5LDU1IEBACiAgICAgICAgIHJldHVybigwKTsKIH0KIAorI2lmbmRlZiBNQURWX1JFTU9WRQorI2RlZmluZSBNQURWX1JFTU9WRSBLRVJORUxfTUFEVl9SRU1PVkUKKyNlbmRpZgorCitpbnQgb3NfZHJvcF9tZW1vcnkodm9pZCAqYWRkciwgaW50IGxlbmd0aCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gbWFkdmlzZShhZGRyLCBsZW5ndGgsIE1BRFZfUkVNT1ZFKTsKKwlpZihlcnIgPCAwKQorCQllcnIgPSAtZXJybm87CisJcmV0dXJuIGVycjsKK30KKworaW50IGNhbl9kcm9wX21lbW9yeSh2b2lkKQoreworCXZvaWQgKmFkZHI7CisJaW50IGZkLCBvayA9IDA7CisKKwlwcmludGsoIkNoZWNraW5nIGhvc3QgTUFEVl9SRU1PVkUgc3VwcG9ydC4uLiIpOworCWZkID0gY3JlYXRlX21lbV9maWxlKFVNX0tFUk5fUEFHRV9TSVpFKTsKKwlpZihmZCA8IDApeworCQlwcmludGsoIkNyZWF0aW5nIHRlc3QgbWVtb3J5IGZpbGUgZmFpbGVkLCBlcnIgPSAlZFxuIiwgLWZkKTsKKwkJZ290byBvdXQ7CisJfQorCisJYWRkciA9IG1tYXA2NChOVUxMLCBVTV9LRVJOX1BBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJICAgICAgTUFQX1NIQVJFRCwgZmQsIDApOworCWlmKGFkZHIgPT0gTUFQX0ZBSUxFRCl7CisJCXByaW50aygiTWFwcGluZyB0ZXN0IG1lbW9yeSBmaWxlIGZhaWxlZCwgZXJyID0gJWRcbiIsIC1lcnJubyk7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCWlmKG1hZHZpc2UoYWRkciwgVU1fS0VSTl9QQUdFX1NJWkUsIE1BRFZfUkVNT1ZFKSAhPSAwKXsKKwkJcHJpbnRrKCJNQURWX1JFTU9WRSBmYWlsZWQsIGVyciA9ICVkXG4iLCAtZXJybm8pOworCQlnb3RvIG91dF91bm1hcDsKKwl9CisKKwlwcmludGsoIk9LXG4iKTsKKwlvayA9IDE7CisKK291dF91bm1hcDoKKwltdW5tYXAoYWRkciwgVU1fS0VSTl9QQUdFX1NJWkUpOworb3V0X2Nsb3NlOgorCWNsb3NlKGZkKTsKK291dDoKKwlyZXR1cm4gb2s7Cit9CisKIHZvaWQgaW5pdF9uZXdfdGhyZWFkX3N0YWNrKHZvaWQgKnNpZ19zdGFjaywgdm9pZCAoKnVzcjFfaGFuZGxlcikoaW50KSkKIHsKIAlpbnQgZmxhZ3MgPSAwLCBwYWdlczsKQEAgLTIyMiwxMSArMjczLDExIEBACiAKIGludCBydW5fa2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB2b2lkICoqam1wX3B0cikKIHsKLQlzaWdqbXBfYnVmIGJ1ZjsKKwlqbXBfYnVmIGJ1ZjsKIAlpbnQgbiwgZW5hYmxlOwogCiAJKmptcF9wdHIgPSAmYnVmOwotCW4gPSBVTUxfU0lHU0VUSk1QKCZidWYsIGVuYWJsZSk7CisJbiA9IFVNTF9TRVRKTVAoJmJ1ZiwgZW5hYmxlKTsKIAlpZihuICE9IDApCiAJCXJldHVybihuKTsKIAkoKmZuKShhcmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9zaWdpby5jIGIvYXJjaC91bS9vcy1MaW51eC9zaWdpby5jCmluZGV4IDliYTk0MjkuLjAwZTkzODggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2lnaW8uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3NpZ2lvLmMKQEAgLTMwNCw4ICszMDQsOCBAQAogCQkJCQkgICAuc2l6ZQk9IDAsCiAJCQkJCSAgIC51c2VkCT0gMCB9KTsKIG91dF9mcmVlOgotCWtmcmVlKHApOwogCXNpZ2lvX3VubG9jaygpOworCWtmcmVlKHApOwogb3V0X2Nsb3NlMjoKIAljbG9zZShsX3NpZ2lvX3ByaXZhdGVbMF0pOwogCWNsb3NlKGxfc2lnaW9fcHJpdmF0ZVsxXSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMKaW5kZXggZmJiMDgwYy4uYjNjMTFjZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9tZW0uYwpAQCAtODIsOCArODIsOCBAQAogCWlmIChvZmZzZXQpIHsKIAkJZGF0YSA9ICh1bnNpZ25lZCBsb25nICopKG1tX2lkcC0+c3RhY2sgKwogCQkJCQkgb2Zmc2V0IC0gVU1MX0NPTkZJR19TVFVCX0RBVEEpOwotCQlwcmludGsoImRvX3N5c2NhbGxfc3R1YiA6IHJldCA9ICVkLCBvZmZzZXQgPSAlZCwgIgotCQkgICAgICAgImRhdGEgPSAweCV4XG4iLCByZXQsIG9mZnNldCwgZGF0YSk7CisJCXByaW50aygiZG9fc3lzY2FsbF9zdHViIDogcmV0ID0gJWxkLCBvZmZzZXQgPSAlbGQsICIKKwkJICAgICAgICJkYXRhID0gJXBcbiIsIHJldCwgb2Zmc2V0LCBkYXRhKTsKIAkJc3lzY2FsbCA9ICh1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25nKWRhdGEgKyBkYXRhWzBdKTsKIAkJcHJpbnRrKCJkb19zeXNjYWxsX3N0dWI6IHN5c2NhbGwgJWxkIGZhaWxlZCwgcmV0dXJuIHZhbHVlID0gIgogCQkgICAgICAgIjB4JWx4LCBleHBlY3RlZCByZXR1cm4gdmFsdWUgPSAweCVseFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCmluZGV4IGJiZjM0Y2IuLmJkODljNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJCWlmKGVycikKIAkJCXBhbmljKCJ1c2Vyc3BhY2UgLSBjb3VsZCBub3QgcmVzdW1lIHVzZXJzcGFjZSBwcm9jZXNzLCAiCiAJCQkgICAgICAicGlkPSVkLCBwdHJhY2Ugb3BlcmF0aW9uID0gJWQsIGVycm5vID0gJWRcbiIsCi0JCQkgICAgICBvcCwgZXJybm8pOworCQkJICAgICAgcGlkLCBvcCwgZXJybm8pOwogCiAJCUNBVENIX0VJTlRSKGVyciA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCBXVU5UUkFDRUQpKTsKIAkJaWYoZXJyIDwgMCkKQEAgLTM0NCwxMiArMzQ0LDEyIEBACiAJZXJyID0gcHRyYWNlX3NldHJlZ3MocGlkLCByZWdzKTsKIAlpZihlcnIgPCAwKQogCQlwYW5pYygiY29weV9jb250ZXh0X3NrYXMwIDogUFRSQUNFX1NFVFJFR1MgZmFpbGVkLCAiCi0JCSAgICAgICJwaWQgPSAlZCwgZXJybm8gPSAlZFxuIiwgcGlkLCBlcnJubyk7CisJCSAgICAgICJwaWQgPSAlZCwgZXJybm8gPSAlZFxuIiwgcGlkLCAtZXJyKTsKIAogCWVyciA9IHB0cmFjZV9zZXRmcHJlZ3MocGlkLCBmcF9yZWdzKTsKIAlpZihlcnIgPCAwKQogCQlwYW5pYygiY29weV9jb250ZXh0X3NrYXMwIDogUFRSQUNFX1NFVEZQUkVHUyBmYWlsZWQsICIKLQkJICAgICAgInBpZCA9ICVkLCBlcnJubyA9ICVkXG4iLCBwaWQsIGVycm5vKTsKKwkJICAgICAgInBpZCA9ICVkLCBlcnJubyA9ICVkXG4iLCBwaWQsIC1lcnIpOwogCiAJLyogc2V0IGEgd2VsbCBrbm93biByZXR1cm4gY29kZSBmb3IgZGV0ZWN0aW9uIG9mIGNoaWxkIHdyaXRlIGZhaWx1cmUgKi8KIAljaGlsZF9kYXRhLT5lcnIgPSAxMjM0NTY3ODsKQEAgLTM2MiwxNCArMzYyLDE0IEBACiAJcGlkID0gZGF0YS0+ZXJyOwogCWlmKHBpZCA8IDApCiAJCXBhbmljKCJjb3B5X2NvbnRleHRfc2thczAgLSBzdHViLXBhcmVudCByZXBvcnRzIGVycm9yICVkXG4iLAotCQkgICAgICBwaWQpOworCQkgICAgICAtcGlkKTsKIAogCS8qIFdhaXQsIHVudGlsIGNoaWxkIGhhcyBmaW5pc2hlZCB0b286IHJlYWQgY2hpbGQncyByZXN1bHQgZnJvbQogCSAqIGNoaWxkJ3Mgc3RhY2sgYW5kIGNoZWNrIGl0LgogCSAqLwogCXdhaXRfc3R1Yl9kb25lKHBpZCwgLTEsICJjb3B5X2NvbnRleHRfc2thczAiKTsKIAlpZiAoY2hpbGRfZGF0YS0+ZXJyICE9IFVNTF9DT05GSUdfU1RVQl9EQVRBKQotCQlwYW5pYygiY29weV9jb250ZXh0X3NrYXMwIC0gc3R1Yi1jaGlsZCByZXBvcnRzIGVycm9yICVkXG4iLAorCQlwYW5pYygiY29weV9jb250ZXh0X3NrYXMwIC0gc3R1Yi1jaGlsZCByZXBvcnRzIGVycm9yICVsZFxuIiwKIAkJICAgICAgY2hpbGRfZGF0YS0+ZXJyKTsKIAogCWlmIChwdHJhY2UoUFRSQUNFX09MRFNFVE9QVElPTlMsIHBpZCwgTlVMTCwKQEAgLTQzNCw3ICs0MzQsNyBAQAogCQl2b2lkICgqaGFuZGxlcikoaW50KSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNpZ2ptcF9idWYgc3dpdGNoX2J1ZiwgZm9ya19idWY7CisJam1wX2J1ZiBzd2l0Y2hfYnVmLCBmb3JrX2J1ZjsKIAlpbnQgZW5hYmxlOwogCiAJKnN3aXRjaF9idWZfcHRyID0gJnN3aXRjaF9idWY7CkBAIC00NTAsNyArNDUwLDcgQEAKIAkgKi8KIAlmbGFncyA9IGdldF9zaWduYWxzKCk7CiAJYmxvY2tfc2lnbmFscygpOwotCWlmKFVNTF9TSUdTRVRKTVAoJmZvcmtfYnVmLCBlbmFibGUpID09IDApCisJaWYoVU1MX1NFVEpNUCgmZm9ya19idWYsIGVuYWJsZSkgPT0gMCkKIAkJbmV3X3RocmVhZF9wcm9jKHN0YWNrLCBoYW5kbGVyKTsKIAogCXJlbW92ZV9zaWdzdGFjaygpOwpAQCAtNDY2LDM1ICs0NjYsMzUgQEAKIAogdm9pZCB0aHJlYWRfd2FpdCh2b2lkICpzdywgdm9pZCAqZmIpCiB7Ci0Jc2lnam1wX2J1ZiBidWYsICoqc3dpdGNoX2J1ZiA9IHN3LCAqZm9ya19idWY7CisJam1wX2J1ZiBidWYsICoqc3dpdGNoX2J1ZiA9IHN3LCAqZm9ya19idWY7CiAJaW50IGVuYWJsZTsKIAogCSpzd2l0Y2hfYnVmID0gJmJ1ZjsKIAlmb3JrX2J1ZiA9IGZiOwotCWlmKFVNTF9TSUdTRVRKTVAoJmJ1ZiwgZW5hYmxlKSA9PSAwKQorCWlmKFVNTF9TRVRKTVAoJmJ1ZiwgZW5hYmxlKSA9PSAwKQogCQlzaWdsb25nam1wKCpmb3JrX2J1ZiwgSU5JVF9KTVBfUkVNT1ZFX1NJR1NUQUNLKTsKIH0KIAogdm9pZCBzd2l0Y2hfdGhyZWFkcyh2b2lkICptZSwgdm9pZCAqbmV4dCkKIHsKLQlzaWdqbXBfYnVmIG15X2J1ZiwgKiptZV9wdHIgPSBtZSwgKm5leHRfYnVmID0gbmV4dDsKKwlqbXBfYnVmIG15X2J1ZiwgKiptZV9wdHIgPSBtZSwgKm5leHRfYnVmID0gbmV4dDsKIAlpbnQgZW5hYmxlOwogCiAJKm1lX3B0ciA9ICZteV9idWY7Ci0JaWYoVU1MX1NJR1NFVEpNUCgmbXlfYnVmLCBlbmFibGUpID09IDApCi0JCVVNTF9TSUdMT05HSk1QKG5leHRfYnVmLCAxKTsKKwlpZihVTUxfU0VUSk1QKCZteV9idWYsIGVuYWJsZSkgPT0gMCkKKwkJVU1MX0xPTkdKTVAobmV4dF9idWYsIDEpOwogfQogCi1zdGF0aWMgc2lnam1wX2J1ZiBpbml0aWFsX2ptcGJ1ZjsKK3N0YXRpYyBqbXBfYnVmIGluaXRpYWxfam1wYnVmOwogCiAvKiBYWFggTWFrZSB0aGVzZSBwZXJjcHUgKi8KIHN0YXRpYyB2b2lkICgqY2JfcHJvYykodm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkICpjYl9hcmc7Ci1zdGF0aWMgc2lnam1wX2J1ZiAqY2JfYmFjazsKK3N0YXRpYyBqbXBfYnVmICpjYl9iYWNrOwogCiBpbnQgc3RhcnRfaWRsZV90aHJlYWQodm9pZCAqc3RhY2ssIHZvaWQgKnN3aXRjaF9idWZfcHRyLCB2b2lkICoqZm9ya19idWZfcHRyKQogewotCXNpZ2ptcF9idWYgKipzd2l0Y2hfYnVmID0gc3dpdGNoX2J1Zl9wdHI7CisJam1wX2J1ZiAqKnN3aXRjaF9idWYgPSBzd2l0Y2hfYnVmX3B0cjsKIAlpbnQgbiwgZW5hYmxlOwogCiAJc2V0X2hhbmRsZXIoU0lHV0lOQ0gsIChfX3NpZ2hhbmRsZXJfdCkgc2lnX2hhbmRsZXIsCkBAIC01MDIsNyArNTAyLDcgQEAKIAkJICAgIFNJR1ZUQUxSTSwgLTEpOwogCiAJKmZvcmtfYnVmX3B0ciA9ICZpbml0aWFsX2ptcGJ1ZjsKLQluID0gVU1MX1NJR1NFVEpNUCgmaW5pdGlhbF9qbXBidWYsIGVuYWJsZSk7CisJbiA9IFVNTF9TRVRKTVAoJmluaXRpYWxfam1wYnVmLCBlbmFibGUpOwogCXN3aXRjaChuKXsKIAljYXNlIElOSVRfSk1QX05FV19USFJFQUQ6CiAJCW5ld190aHJlYWRfcHJvYygodm9pZCAqKSBzdGFjaywgbmV3X3RocmVhZF9oYW5kbGVyKTsKQEAgLTUxMiw3ICs1MTIsNyBAQAogCQlicmVhazsKIAljYXNlIElOSVRfSk1QX0NBTExCQUNLOgogCQkoKmNiX3Byb2MpKGNiX2FyZyk7Ci0JCVVNTF9TSUdMT05HSk1QKGNiX2JhY2ssIDEpOworCQlVTUxfTE9OR0pNUChjYl9iYWNrLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBJTklUX0pNUF9IQUxUOgogCQlrbWFsbG9jX29rID0gMDsKQEAgLTUyMywxMiArNTIzLDEyIEBACiAJZGVmYXVsdDoKIAkJcGFuaWMoIkJhZCBzaWdzZXRqbXAgcmV0dXJuIGluIHN0YXJ0X2lkbGVfdGhyZWFkIC0gJWRcbiIsIG4pOwogCX0KLQlVTUxfU0lHTE9OR0pNUCgqc3dpdGNoX2J1ZiwgMSk7CisJVU1MX0xPTkdKTVAoKnN3aXRjaF9idWYsIDEpOwogfQogCiB2b2lkIGluaXRpYWxfdGhyZWFkX2NiX3NrYXModm9pZCAoKnByb2MpKHZvaWQgKiksIHZvaWQgKmFyZykKIHsKLQlzaWdqbXBfYnVmIGhlcmU7CisJam1wX2J1ZiBoZXJlOwogCWludCBlbmFibGU7CiAKIAljYl9wcm9jID0gcHJvYzsKQEAgLTUzNiw4ICs1MzYsOCBAQAogCWNiX2JhY2sgPSAmaGVyZTsKIAogCWJsb2NrX3NpZ25hbHMoKTsKLQlpZihVTUxfU0lHU0VUSk1QKCZoZXJlLCBlbmFibGUpID09IDApCi0JCVVNTF9TSUdMT05HSk1QKCZpbml0aWFsX2ptcGJ1ZiwgSU5JVF9KTVBfQ0FMTEJBQ0spOworCWlmKFVNTF9TRVRKTVAoJmhlcmUsIGVuYWJsZSkgPT0gMCkKKwkJVU1MX0xPTkdKTVAoJmluaXRpYWxfam1wYnVmLCBJTklUX0pNUF9DQUxMQkFDSyk7CiAJdW5ibG9ja19zaWduYWxzKCk7CiAKIAljYl9wcm9jID0gTlVMTDsKQEAgLTU0OCwxMyArNTQ4LDEzIEBACiB2b2lkIGhhbHRfc2thcyh2b2lkKQogewogCWJsb2NrX3NpZ25hbHMoKTsKLQlVTUxfU0lHTE9OR0pNUCgmaW5pdGlhbF9qbXBidWYsIElOSVRfSk1QX0hBTFQpOworCVVNTF9MT05HSk1QKCZpbml0aWFsX2ptcGJ1ZiwgSU5JVF9KTVBfSEFMVCk7CiB9CiAKIHZvaWQgcmVib290X3NrYXModm9pZCkKIHsKIAlibG9ja19zaWduYWxzKCk7Ci0JVU1MX1NJR0xPTkdKTVAoJmluaXRpYWxfam1wYnVmLCBJTklUX0pNUF9SRUJPT1QpOworCVVNTF9MT05HSk1QKCZpbml0aWFsX2ptcGJ1ZiwgSU5JVF9KTVBfUkVCT09UKTsKIH0KIAogdm9pZCBzd2l0Y2hfbW1fc2thcyhzdHJ1Y3QgbW1faWQgKm1tX2lkcCkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYyBiL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYwppbmRleCAzMjc1MzEzLi41MDMxNDg1IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jCkBAIC0yOTYsMjkgKzI5Niw3IEBACiAJY2hlY2tfc3lzZW11KCk7CiB9CiAKLWV4dGVybiBpbnQgY3JlYXRlX3RtcF9maWxlKHVuc2lnbmVkIGxvbmcgbG9uZyBsZW4pOwotCi1zdGF0aWMgdm9pZCBjaGVja190bXBleGVjKHZvaWQpCi17Ci0Jdm9pZCAqYWRkcjsKLQlpbnQgZXJyLCBmZCA9IGNyZWF0ZV90bXBfZmlsZShVTV9LRVJOX1BBR0VfU0laRSk7Ci0KLQlhZGRyID0gbW1hcChOVUxMLCBVTV9LRVJOX1BBR0VfU0laRSwKLQkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsIE1BUF9QUklWQVRFLCBmZCwgMCk7Ci0JcHJpbnRmKCJDaGVja2luZyBQUk9UX0VYRUMgbW1hcCBpbiAvdG1wLi4uIik7Ci0JZmZsdXNoKHN0ZG91dCk7Ci0JaWYoYWRkciA9PSBNQVBfRkFJTEVEKXsKLQkJZXJyID0gZXJybm87Ci0JCXBlcnJvcigiZmFpbGVkIik7Ci0JCWlmKGVyciA9PSBFUEVSTSkKLQkJCXByaW50ZigiL3RtcCBtdXN0IGJlIG5vdCBtb3VudGVkIG5vZXhlY1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQotCXByaW50ZigiT0tcbiIpOwotCW11bm1hcChhZGRyLCBVTV9LRVJOX1BBR0VfU0laRSk7Ci0KLQljbG9zZShmZCk7Ci19CitleHRlcm4gdm9pZCBjaGVja190bXBleGVjKHZvaWQpOwogCiB2b2lkIG9zX2Vhcmx5X2NoZWNrcyh2b2lkKQogewpAQCAtNDcwLDI1ICs0NDgsNiBAQAogfQogI2VuZGlmCiAKLWludCBoYXZlX2RldmFub24gPSAwOwotCi0vKiBSdW5zIG9uIGJvb3Qga2VybmVsIHN0YWNrIC0gYWxyZWFkeSBzYWZlIHRvIHVzZSBwcmludGsuICovCi0KLXZvaWQgY2hlY2tfZGV2YW5vbih2b2lkKQotewotCWludCBmZDsKLQotCXByaW50aygiQ2hlY2tpbmcgZm9yIC9kZXYvYW5vbiBvbiB0aGUgaG9zdC4uLiIpOwotCWZkID0gb3BlbigiL2Rldi9hbm9uIiwgT19SRFdSKTsKLQlpZihmZCA8IDApewotCQlwcmludGsoIk5vdCBhdmFpbGFibGUgKG9wZW4gZmFpbGVkIHdpdGggZXJybm8gJWQpXG4iLCBlcnJubyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcmludGsoIk9LXG4iKTsKLQloYXZlX2RldmFub24gPSAxOwotfQotCiBpbnQgX19pbml0IHBhcnNlX2lvbWVtKGNoYXIgKnN0ciwgaW50ICphZGQpCiB7CiAJc3RydWN0IGlvbWVtX3JlZ2lvbiAqbmV3OwpAQCAtNjY0LDYgKzYyMyw1IEBACiB7CiAJY2hlY2tfcHRyYWNlKCk7CiAJY2hlY2tfc2lnaW8oKTsKLQljaGVja19kZXZhbm9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvTWFrZWZpbGUgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L01ha2VmaWxlCmluZGV4IDM0MGVmMjYuLmIzMjEzNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogIwogCi1vYmotJChDT05GSUdfTU9ERV9TS0FTKSA9IHJlZ2lzdGVycy5vCitvYmotJChDT05GSUdfTU9ERV9TS0FTKSA9IHJlZ2lzdGVycy5vIHRscy5vCiAKIFVTRVJfT0JKUyA6PSAkKG9iai15KQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYwppbmRleCA3YTZmNmI5Li41MTZmNjZkIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWVyciA9IHB0cmFjZShQVFJBQ0VfR0VUUkVHUywgcGlkLCAwLCBleGVjX3JlZ3MpOwogCWlmKGVycikKIAkJcGFuaWMoImNoZWNrX3B0cmFjZSA6IFBUUkFDRV9HRVRSRUdTIGZhaWxlZCwgZXJybm8gPSAlZCIsCi0JCSAgICAgIGVycik7CisJCSAgICAgIGVycm5vKTsKIAogCWVycm5vID0gMDsKIAllcnIgPSBwdHJhY2UoUFRSQUNFX0dFVEZQWFJFR1MsIHBpZCwgMCwgZXhlY19mcHhfcmVncyk7CkBAIC0xMTksNyArMTE5LDcgQEAKIAllcnIgPSBwdHJhY2UoUFRSQUNFX0dFVEZQUkVHUywgcGlkLCAwLCBleGVjX2ZwX3JlZ3MpOwogCWlmKGVycikKIAkJcGFuaWMoImNoZWNrX3B0cmFjZSA6IFBUUkFDRV9HRVRGUFJFR1MgZmFpbGVkLCBlcnJubyA9ICVkIiwKLQkJICAgICAgZXJyKTsKKwkJICAgICAgZXJybm8pOwogfQogCiB2b2lkIGdldF9zYWZlX3JlZ2lzdGVycyh1bnNpZ25lZCBsb25nICpyZWdzLCB1bnNpZ25lZCBsb25nICpmcF9yZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni90bHMuYyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvdGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwYWJiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvdGxzLmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSAic3lzZGVwL3Rscy5oIgorI2luY2x1ZGUgInVzZXJfdXRpbC5oIgorCitzdGF0aWMgX3N5c2NhbGwxKGludCwgZ2V0X3RocmVhZF9hcmVhLCB1c2VyX2Rlc2NfdCAqLCB1X2luZm8pOworCisvKiBDaGVja3Mgd2hldGhlciBob3N0IHN1cHBvcnRzIFRMUywgYW5kIHNldHMgKnRsc19taW4gYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZQorICogdmFsaWQgb24gdGhlIGhvc3QuCisgKiBpMzg2IGhvc3QgaGF2ZSBpdCA9PSA2OyB4ODZfNjQgaG9zdCBoYXZlIGl0ID09IDEyLCBmb3IgaTM4NiBlbXVsYXRpb24uICovCit2b2lkIGNoZWNrX2hvc3Rfc3VwcG9ydHNfdGxzKGludCAqc3VwcG9ydHNfdGxzLCBpbnQgKnRsc19taW4pIHsKKwkvKiBWYWx1ZXMgZm9yIHg4NiBhbmQgeDg2XzY0LiovCisJaW50IHZhbFtdID0ge0dEVF9FTlRSWV9UTFNfTUlOX0kzODYsIEdEVF9FTlRSWV9UTFNfTUlOX1g4Nl82NH07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2YWwpOyBpKyspIHsKKwkJdXNlcl9kZXNjX3QgaW5mbzsKKwkJaW5mby5lbnRyeV9udW1iZXIgPSB2YWxbaV07CisKKwkJaWYgKGdldF90aHJlYWRfYXJlYSgmaW5mbykgPT0gMCkgeworCQkJKnRsc19taW4gPSB2YWxbaV07CisJCQkqc3VwcG9ydHNfdGxzID0gMTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCWlmIChlcnJubyA9PSBFSU5WQUwpCisJCQkJY29udGludWU7CisJCQllbHNlIGlmIChlcnJubyA9PSBFTk9TWVMpCisJCQkJKnN1cHBvcnRzX3RscyA9IDA7CisJCQkJcmV0dXJuOworCQl9CisJfQorCisJKnN1cHBvcnRzX3RscyA9IDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N5cy14ODZfNjQvcmVnaXN0ZXJzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy14ODZfNjQvcmVnaXN0ZXJzLmMKaW5kZXggMDAxOTQxZi4uYmVjZDg5OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zeXMteDg2XzY0L3JlZ2lzdGVycy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9yZWdpc3RlcnMuYwpAQCAtNjIsMTIgKzYyLDEyIEBACiAJZXJyID0gcHRyYWNlKFBUUkFDRV9HRVRSRUdTLCBwaWQsIDAsIGV4ZWNfcmVncyk7CiAJaWYoZXJyKQogCQlwYW5pYygiY2hlY2tfcHRyYWNlIDogUFRSQUNFX0dFVFJFR1MgZmFpbGVkLCBlcnJubyA9ICVkIiwKLQkJICAgICAgZXJyKTsKKwkJICAgICAgZXJybm8pOwogCiAJZXJyID0gcHRyYWNlKFBUUkFDRV9HRVRGUFJFR1MsIHBpZCwgMCwgZXhlY19mcF9yZWdzKTsKIAlpZihlcnIpCiAJCXBhbmljKCJjaGVja19wdHJhY2UgOiBQVFJBQ0VfR0VURlBSRUdTIGZhaWxlZCwgZXJybm8gPSAlZCIsCi0JCSAgICAgIGVycik7CisJCSAgICAgIGVycm5vKTsKIH0KIAogdm9pZCBnZXRfc2FmZV9yZWdpc3RlcnModW5zaWduZWQgbG9uZyAqcmVncywgdW5zaWduZWQgbG9uZyAqZnBfcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdGltZS5jIGIvYXJjaC91bS9vcy1MaW51eC90aW1lLmMKaW5kZXggNmY3NjI2Ny4uMjgwYzRmYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC90aW1lLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC90aW1lLmMKQEAgLTgxLDIwICs4MSwxMiBAQAogCXNldF9pbnRlcnZhbChJVElNRVJfUkVBTCk7CiB9CiAKLWV4dGVybiB2b2lkIGt0aW1lX2dldF90cyhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKLSNkZWZpbmUgZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUodHMpIGt0aW1lX2dldF90cyh0cykKLQogdm9pZCB0aW1lX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgdGltZXNwZWMgbm93OwotCiAJaWYoc2lnbmFsKFNJR1ZUQUxSTSwgYm9vdF90aW1lcl9oYW5kbGVyKSA9PSBTSUdfRVJSKQogCQlwYW5pYygiQ291bGRuJ3Qgc2V0IFNJR1ZUQUxSTSBoYW5kbGVyIik7CiAJc2V0X2ludGVydmFsKElUSU1FUl9WSVJUVUFMKTsKLQotCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZub3cpOwotCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyA9IC1ub3cudHZfc2VjOwotCXdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgPSAtbm93LnR2X25zZWM7CisJdGltZV9pbml0X2tlcm4oKTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIG9zX25zZWNzKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3Rscy5jIGIvYXJjaC91bS9vcy1MaW51eC90bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IwOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9vcy1MaW51eC90bHMuYwpAQCAtMCwwICsxLDc2IEBACisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2xkdC5oPgorI2luY2x1ZGUgInN5c2RlcC90bHMuaCIKKyNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCisKKy8qIFRMUyBzdXBwb3J0IC0gd2UgYmFzaWNhbGx5IHJlbHkgb24gdGhlIGhvc3QncyBvbmUuKi8KKworLyogSW4gVFQgbW9kZSwgdGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYnkgdGhlIHRyYWNpbmcgdGhyZWFkLCBhbmQgbWFrZXMgc2Vuc2UKKyAqIG9ubHkgZm9yIFBUUkFDRV9TRVRfVEhSRUFEX0FSRUEuIEluIFNLQVMgbW9kZSwgaXQncyB1c2VkIG5vcm1hbGx5LgorICoKKyAqLworCisjaWZuZGVmIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEKKyNkZWZpbmUgUFRSQUNFX0dFVF9USFJFQURfQVJFQSAyNQorI2VuZGlmCisKKyNpZm5kZWYgUFRSQUNFX1NFVF9USFJFQURfQVJFQQorI2RlZmluZSBQVFJBQ0VfU0VUX1RIUkVBRF9BUkVBIDI2CisjZW5kaWYKKworaW50IG9zX3NldF90aHJlYWRfYXJlYSh1c2VyX2Rlc2NfdCAqaW5mbywgaW50IHBpZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcHRyYWNlKFBUUkFDRV9TRVRfVEhSRUFEX0FSRUEsIHBpZCwgaW5mby0+ZW50cnlfbnVtYmVyLAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBpbmZvKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0ID0gLWVycm5vOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBVTUxfQ09ORklHX01PREVfU0tBUworCitpbnQgb3NfZ2V0X3RocmVhZF9hcmVhKHVzZXJfZGVzY190ICppbmZvLCBpbnQgcGlkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwdHJhY2UoUFRSQUNFX0dFVF9USFJFQURfQVJFQSwgcGlkLCBpbmZvLT5lbnRyeV9udW1iZXIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGluZm8pOworCWlmIChyZXQgPCAwKQorCQlyZXQgPSAtZXJybm87CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmCisKKyNpZmRlZiBVTUxfQ09ORklHX01PREVfVFQKKyNpbmNsdWRlICJsaW51eC91bmlzdGQuaCIKKworc3RhdGljIF9zeXNjYWxsMShpbnQsIGdldF90aHJlYWRfYXJlYSwgdXNlcl9kZXNjX3QgKiwgdV9pbmZvKTsKK3N0YXRpYyBfc3lzY2FsbDEoaW50LCBzZXRfdGhyZWFkX2FyZWEsIHVzZXJfZGVzY190ICosIHVfaW5mbyk7CisKK2ludCBkb19zZXRfdGhyZWFkX2FyZWFfdHQodXNlcl9kZXNjX3QgKmluZm8pCit7CisJaW50IHJldDsKKworCXJldCA9IHNldF90aHJlYWRfYXJlYShpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlyZXQgPSAtZXJybm87CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBkb19nZXRfdGhyZWFkX2FyZWFfdHQodXNlcl9kZXNjX3QgKmluZm8pCit7CisJaW50IHJldDsKKworCXJldCA9IGdldF90aHJlYWRfYXJlYShpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlyZXQgPSAtZXJybm87CisJfQorCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBVTUxfQ09ORklHX01PREVfVFQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdHJhcC5jIGIvYXJjaC91bS9vcy1MaW51eC90cmFwLmMKaW5kZXggYTlmNmIyNi4uOTBiMjlhZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC90cmFwLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC90cmFwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogdm9pZCBkb19sb25nam1wKHZvaWQgKmIsIGludCB2YWwpCiB7Ci0Jc2lnam1wX2J1ZiAqYnVmID0gYjsKKwlqbXBfYnVmICpidWYgPSBiOwogCi0JVU1MX1NJR0xPTkdKTVAoYnVmLCB2YWwpOworCVVNTF9MT05HSk1QKGJ1ZiwgdmFsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdWFjY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC91YWNjZXNzLmMKaW5kZXggMTY2ZmI2Ni4uZTUyMzcxOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91YWNjZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC91YWNjZXNzLmMKQEAgLTE2LDkgKzE2LDkgQEAKIAl1bnNpZ25lZCBsb25nICpmYWRkcnAgPSAodW5zaWduZWQgbG9uZyAqKSBmYXVsdF9hZGRyLCByZXQ7CiAJaW50IGVuYWJsZTsKIAotCXNpZ2ptcF9idWYgamJ1ZjsKKwlqbXBfYnVmIGpidWY7CiAJKmZhdWx0X2NhdGNoZXIgPSAmamJ1ZjsKLQlpZihVTUxfU0lHU0VUSk1QKCZqYnVmLCBlbmFibGUpID09IDApeworCWlmKFVNTF9TRVRKTVAoJmpidWYsIGVuYWJsZSkgPT0gMCl7CiAJCSgqb3ApKHRvLCBmcm9tLCBuKTsKIAkJcmV0ID0gMDsKIAkJKmZhdWx0ZWRfb3V0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdW1pZC5jIGIvYXJjaC91bS9vcy1MaW51eC91bWlkLmMKaW5kZXggMTk4ZTU5MS4uMzYyZGIwNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91bWlkLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC91bWlkLmMKQEAgLTEyMCw3ICsxMjAsOCBAQAogCiAJZGVhZCA9IDA7CiAJZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKTsKLQlpZihmZCA8IDApeworCWlmKGZkIDwgMCkgeworCQlmZCA9IC1lcnJubzsKIAkJaWYoZmQgIT0gLUVOT0VOVCl7CiAJCQlwcmludGsoIm5vdF9kZWFkX3lldCA6IGNvdWxkbid0IG9wZW4gcGlkIGZpbGUgJyVzJywgIgogCQkJICAgICAgICJlcnIgPSAlZFxuIiwgZmlsZSwgLWZkKTsKQEAgLTEzMCw5ICsxMzEsMTMgQEAKIAogCWVyciA9IDA7CiAJbiA9IHJlYWQoZmQsIHBpZCwgc2l6ZW9mKHBpZCkpOwotCWlmKG4gPD0gMCl7CisJaWYobiA8IDApewogCQlwcmludGsoIm5vdF9kZWFkX3lldCA6IGNvdWxkbid0IHJlYWQgcGlkIGZpbGUgJyVzJywgIgotCQkgICAgICAgImVyciA9ICVkXG4iLCBmaWxlLCAtbik7CisJCSAgICAgICAiZXJyID0gJWRcbiIsIGZpbGUsIGVycm5vKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfSBlbHNlIGlmKG4gPT0gMCl7CisJCXByaW50aygibm90X2RlYWRfeWV0IDogY291bGRuJ3QgcmVhZCBwaWQgZmlsZSAnJXMnLCAiCisJCSAgICAgICAiMC1ieXRlIHJlYWRcbiIsIGZpbGUpOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKQEAgLTE1NSw5ICsxNjAsOSBAQAogCiAJcmV0dXJuIGVycjsKIAotIG91dF9jbG9zZToKK291dF9jbG9zZToKIAljbG9zZShmZCk7Ci0gb3V0Ogorb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0xNzMsMTQgKzE3OCwxNCBAQAogCWZkID0gb3BlbihmaWxlLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMLCAwNjQ0KTsKIAlpZihmZCA8IDApewogCQlwcmludGsoIk9wZW4gb2YgbWFjaGluZSBwaWQgZmlsZSBcIiVzXCIgZmFpbGVkOiAlc1xuIiwKLQkJICAgICAgIGZpbGUsIHN0cmVycm9yKC1mZCkpOworCQkgICAgICAgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKIAkJcmV0dXJuOwogCX0KIAogCXNucHJpbnRmKHBpZCwgc2l6ZW9mKHBpZCksICIlZFxuIiwgZ2V0cGlkKCkpOwogCW4gPSB3cml0ZShmZCwgcGlkLCBzdHJsZW4ocGlkKSk7CiAJaWYobiAhPSBzdHJsZW4ocGlkKSkKLQkJcHJpbnRrKCJXcml0ZSBvZiBwaWQgZmlsZSBmYWlsZWQgLSBlcnIgPSAlZFxuIiwgLW4pOworCQlwcmludGsoIldyaXRlIG9mIHBpZCBmaWxlIGZhaWxlZCAtIGVyciA9ICVkXG4iLCBlcnJubyk7CiAKIAljbG9zZShmZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jIGIvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYwppbmRleCA4ZGE2YWIzLi4zZjMzMTY1IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdXNlcl9zeW1zLmMKQEAgLTE4LDE0ICsxOCwxOSBAQAogZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKIGV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKIAorLyogSWYgdGhleSdyZSBub3QgZGVmaW5lZCwgdGhlIGV4cG9ydCBpcyBpbmNsdWRlZCBpbiBsaWIvc3RyaW5nLmMuKi8KKyNpZmRlZiBfX0hBVkVfQVJDSF9TVFJMRU4KIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKKyNlbmRpZgorI2lmZGVmIF9fSEFWRV9BUkNIX1NUUlNUUgorRVhQT1JUX1NZTUJPTChzdHJzdHIpOworI2VuZGlmCisKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7CiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7CiBFWFBPUlRfU1lNQk9MKHByaW50Zik7CiAKLUVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKLQogLyogSGVyZSwgaW5zdGVhZCwgSSBjYW4gcHJvdmlkZSBhIGZha2UgcHJvdG90eXBlLiBZZXMsIHNvbWVvbmUgY2FyZXM6IGdlbmtzeW1zLgogICogSG93ZXZlciwgdGhlIG1vZHVsZXMgd2lsbCB1c2UgdGhlIENSQyBkZWZpbmVkICpoZXJlKiwgbm8gbWF0dGVyIGlmIGl0IGlzCiAgKiBnb29kOyBzbyB0aGUgdmVyc2lvbnMgb2YgdGhlc2Ugc3ltYm9scyB3aWxsIGFsd2F5cyBtYXRjaApAQCAtOTEsNiArOTYsMTMgQEAKIEVYUE9SVF9TWU1CT0xfUFJPVE8oZnN5bmMpOwogRVhQT1JUX1NZTUJPTF9QUk9UTyhmZGF0YXN5bmMpOwogCisvKiBFeHBvcnQgc3ltYm9scyB1c2VkIGJ5IEdDQyBmb3IgdGhlIHN0YWNrIHByb3RlY3Rvci4gKi8KK2V4dGVybiB2b2lkIF9fc3RhY2tfc21hc2hfaGFuZGxlcih2b2lkICopIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK0VYUE9SVF9TWU1CT0woX19zdGFja19zbWFzaF9oYW5kbGVyKTsKKworZXh0ZXJuIGxvbmcgX19ndWFyZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitFWFBPUlRfU1lNQk9MKF9fZ3VhcmQpOworCiAvKgogICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCiAgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdXRpbC5jIGIvYXJjaC91bS9vcy1MaW51eC91dGlsLmMKaW5kZXggZTMyMDY1ZS4uYzQ3YTJhNyAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91dGlsLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC91dGlsLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogaW50IHNldGptcF93cmFwcGVyKHZvaWQgKCpwcm9jKSh2b2lkICosIHZvaWQgKiksIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7Ci0Jc2lnam1wX2J1ZiBidWY7CisJam1wX2J1ZiBidWY7CiAJaW50IG47CiAKIAluID0gc2lnc2V0am1wKGJ1ZiwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMgYi9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKaW5kZXggMmU0MWNhYi4uMTM0N2RjNiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCisrKyBiL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwpAQCAtNywzOCArNywyNiBAQAogVVNFUl9PQkpTICs9ICQoZmlsdGVyICVfdXNlci5vLCQob2JqLXkpICQob2JqLW0pICAkKFVTRVJfU0lOR0xFX09CSlMpKQogVVNFUl9PQkpTIDo9ICQoZm9yZWFjaCBmaWxlLCQoVVNFUl9PQkpTKSwkKG9iaikvJChmaWxlKSkKIAotJChVU0VSX09CSlMpICQoVVNFUl9PQkpTOi5vPS5pKSAkKFVTRVJfT0JKUzoubz0ucykgJChVU0VSX09CSlM6Lm89LmxzdCk6IFwKLQljX2ZsYWdzID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoVVNFUl9DRkxBR1MpICQoQ0ZMQUdTXyQobm90ZGlyICRAKSkKLSQoVVNFUl9PQkpTKTogY21kX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogcXVpZXRfY21kX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogY21kX2ZvcmNlX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogcXVpZXRfY21kX2ZvcmNlX2NoZWNrc3JjID0KKyQoVVNFUl9PQkpTOi5vPS4lKTogXAorCWNfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChVU0VSX0NGTEFHUykgJChDRkxBR1NfJCgqRikubykKKyQoVVNFUl9PQkpTKSA6IENIRUNLRkxBR1MgOj0gLURfX2xpbnV4X18gLURsaW51eCAtRF9fU1REQ19fIFwKKwktRHVuaXggLURfX3VuaXhfXyAtRF9fJChTVUJBUkNIKV9fCiAKKyMgVGhlc2UgYXJlIGxpa2UgVVNFUl9PQkpTIGJ1dCBmaWx0ZXIgVVNFUl9DRkxBR1MgdGhyb3VnaCB1bnByb2ZpbGUgaW5zdGVhZCBvZgorIyB1c2luZyBpdCBkaXJlY3RseS4KK1VOUFJPRklMRV9PQkpTIDo9ICQoZm9yZWFjaCBmaWxlLCQoVU5QUk9GSUxFX09CSlMpLCQob2JqKS8kKGZpbGUpKQorCiskKFVOUFJPRklMRV9PQkpTOi5vPS4lKTogXAorCWNfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChjYWxsIHVucHJvZmlsZSwkKFVTRVJfQ0ZMQUdTKSkgJChDRkxBR1NfJCgqRikubykKKyQoVU5QUk9GSUxFX09CSlMpIDogQ0hFQ0tGTEFHUyA6PSAtRF9fbGludXhfXyAtRGxpbnV4IC1EX19TVERDX18gXAorCS1EdW5peCAtRF9fdW5peF9fIC1EX18kKFNVQkFSQ0gpX18KIAogIyBUaGUgc3R1YnMgYW5kIHVubWFwLm8gY2FuJ3QgdHJ5IHRvIGNhbGwgbWNvdW50IG9yIHVwZGF0ZSBiYXNpYyBibG9jayBkYXRhCiBkZWZpbmUgdW5wcm9maWxlCiAJJChwYXRzdWJzdCAtcGcsLCQocGF0c3Vic3QgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlLCwkKDEpKSkKIGVuZGVmCiAKLQotIyBjbWRfbWFrZV9saW5rIGNoZWNrcyB0byBzZWUgaWYgdGhlICQoZm9vLWRpcikgdmFyaWFibGUgc3RhcnRzIHdpdGggYSAvLiAgSWYKLSMgc28sIGl0J3MgY29uc2lkZXJlZCB0byBiZSBhIHBhdGggcmVsYXRpdmUgdG8gJChzcmNkaXIpIHJhdGhlciB0aGFuCi0jICQoc3JjZGlyKS9hcmNoLyQoU1VCQVJDSCkuICBUaGlzIGlzIGJlY2F1c2UgeDg2XzY0IHdhbnRzIHRvIGdldCBsZHQuYyBmcm9tCi0jIGFyY2gvdW0vc3lzLWkzODYgcmF0aGVyIHRoYW4gYXJjaC9pMzg2IGxpa2UgdGhlIG90aGVyIGJvcnJvd2VkIGZpbGVzLiAgU28sCi0jIGl0IHNldHMgJChsZHQuYy1kaXIpIHRvIC9hcmNoL3VtL3N5cy1pMzg2LgotcXVpZXRfY21kX21ha2VfbGluayA9IFNZTUxJTksgJEAKLWNtZF9tYWtlX2xpbmsgICAgICAgPSBybSAtZiAkQDsgbG4gLXNmICQoc3JjdHJlZSkkKGlmICQoZmlsdGVyLW91dCAvJSwkKCQobm90ZGlyICRAKS1kaXIpKSwvYXJjaC8kKFNVQkFSQ0gpKS8kKCQobm90ZGlyICRAKS1kaXIpLyQobm90ZGlyICRAKSAkQAotCi0jIHRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIHRoZSBmb3JlYWNoLCBiZWNhdXNlIHRhcmdldHMgZG9lcyBub3QgYWNjZXB0Ci0jIGNvbXBsZXRlIHBhdGhzIGxpa2UgJChvYmopLyQoZikuIFRvIG1ha2Ugc3VyZSB0aGlzIHdvcmtzLCB1c2UgYSA6PSBhc3NpZ25tZW50Ci0jIG9yIHdlIHdpbGwgZ2V0ICQob2JqKS8kKGYpIGluIHRoZSAidGFyZ2V0cyIgdmFsdWUuCi0jIEFsc28sIHRoaXMgZm9yY2VzIHlvdSB0byB1c2UgdGhlIDo9IHN5bnRheCB3aGVuIGFzc2lnbmluZyB0byB0YXJnZXRzLgotIyBPdGhlcndpc2UgdGhlIGxpbmUgYmVsb3cgd2lsbCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIChpZiB5b3UgZG9uJ3Qga25vdyB3aHksCi0jIGp1c3QgZG8gaXQpLgotCi10YXJnZXRzIDo9ICQodGFyZ2V0cykgJChTWU1MSU5LUykKLQotU1lNTElOS1MgOj0gJChmb3JlYWNoIGYsJChTWU1MSU5LUyksJChvYmopLyQoZikpCi0KLSQoU1lNTElOS1MpOiBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLG1ha2VfbGluaykKK2lmZGVmIHN1YmFyY2gtb2JqLXkKK29iai15ICs9IHN1YmFyY2gubworc3ViYXJjaC15ID0gJChhZGRwcmVmaXggLi4vLi4vJChTVUJBUkNIKS8sJChzdWJhcmNoLW9iai15KSkKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUudW5tYXAgYi9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUudW5tYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMTY1MTguLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnVubWFwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotY2xlYW4tZmlsZXMgKz0gdW5tYXBfdG1wLm8gdW5tYXBfZmluLm8gdW5tYXAubwotCi1pZmRlZiBDT05GSUdfTU9ERV9UVAotCi0jQWx3YXlzIGJ1aWxkIHVubWFwX2Zpbi5vCi1leHRyYS15ICs9IHVubWFwX2Zpbi5vCi0jRG8gZGVwZW5kZW5jeSB0cmFja2luZyBmb3IgdW5tYXAubyAoaXQgd2lsbCBiZSBhbHdheXMgYnVpbHQsIGJ1dCB3b24ndCBnZXQgdGhlIHRyYWNraW5nIHVubGVzcyB3ZSB1c2UgdGhpcykuCi10YXJnZXRzICs9IHVubWFwLm8KLQotI1hYWDogcGFydGlhbGx5IGNvcGllZCBmcm9tIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwotJChvYmopL3VubWFwLm86IF9jX2ZsYWdzID0gJChjYWxsIHVucHJvZmlsZSwkKENGTEFHUykpCi0KLXF1aWV0X2NtZF93cmFwbGQgPSBMRCAgICAgICRACi1kZWZpbmUgY21kX3dyYXBsZAotCSQoTEQpICQoTERGTEFHUykgLXIgLW8gJChvYmopL3VubWFwX3RtcC5vICQ8IDsgXAotCSQoT0JKQ09QWSkgJChVTUxfT0JKQ09QWUZMQUdTKSAkKG9iaikvdW5tYXBfdG1wLm8gJEAgLUcgc3dpdGNoZXJvbwotZW5kZWYKLQotJChvYmopL3VubWFwX2Zpbi5vIDogJChvYmopL3VubWFwLm8gRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwbGQpCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlIGIvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQppbmRleCBmNWZkNWIwLi4zNzRkNjFhIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKQEAgLTEsMjMgKzEsMjMgQEAKLW9iai15IDo9IGJpdG9wcy5vIGJ1Z3MubyBjaGVja3N1bS5vIGRlbGF5Lm8gZmF1bHQubyBrc3ltcy5vIGxkdC5vIHB0cmFjZS5vIFwKLQlwdHJhY2VfdXNlci5vIHNlbWFwaG9yZS5vIHNpZ25hbC5vIHNpZ2NvbnRleHQubyBzeXNjYWxscy5vIHN5c3JxLm8gXAotCXN5c19jYWxsX3RhYmxlLm8KK29iai15ID0gYnVncy5vIGNoZWNrc3VtLm8gZGVsYXkubyBmYXVsdC5vIGtzeW1zLm8gbGR0Lm8gcHRyYWNlLm8gXAorCXB0cmFjZV91c2VyLm8gc2lnbmFsLm8gc2lnY29udGV4dC5vIHN5c2NhbGxzLm8gc3lzcnEubyBcCisJc3lzX2NhbGxfdGFibGUubyB0bHMubwogCiBvYmotJChDT05GSUdfTU9ERV9TS0FTKSArPSBzdHViLm8gc3R1Yl9zZWd2Lm8KIAotb2JqLSQoQ09ORklHX0hJR0hNRU0pICs9IGhpZ2htZW0ubwotb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IG1vZHVsZS5vCitzdWJhcmNoLW9iai15ID0gbGliL2JpdG9wcy5vIGtlcm5lbC9zZW1hcGhvcmUubworc3ViYXJjaC1vYmotJChDT05GSUdfSElHSE1FTSkgKz0gbW0vaGlnaG1lbS5vCitzdWJhcmNoLW9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrZXJuZWwvbW9kdWxlLm8KIAotVVNFUl9PQkpTIDo9IGJ1Z3MubyBwdHJhY2VfdXNlci5vIHNpZ2NvbnRleHQubyBmYXVsdC5vIHN0dWJfc2Vndi5vCitVU0VSX09CSlMgOj0gYnVncy5vIHB0cmFjZV91c2VyLm8gc2lnY29udGV4dC5vIGZhdWx0Lm8KIAotU1lNTElOS1MgPSBiaXRvcHMuYyBzZW1hcGhvcmUuYyBoaWdobWVtLmMgbW9kdWxlLmMKK1VTRVJfT0JKUyArPSB1c2VyLW9mZnNldHMucworZXh0cmEteSArPSB1c2VyLW9mZnNldHMucworCitleHRyYS0kKENPTkZJR19NT0RFX1RUKSArPSB1bm1hcC5vCisKK1VOUFJPRklMRV9PQkpTIDo9IHN0dWJfc2Vndi5vCitDRkxBR1Nfc3R1Yl9zZWd2Lm8gOj0gJChDRkxBR1NfTk9fSEFSREVOSU5HKQogCiBpbmNsdWRlIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwogCi1iaXRvcHMuYy1kaXIgPSBsaWIKLXNlbWFwaG9yZS5jLWRpciA9IGtlcm5lbAotaGlnaG1lbS5jLWRpciA9IG1tCi1tb2R1bGUuYy1kaXIgPSBrZXJuZWwKLQotJChvYmopL3N0dWJfc2Vndi5vIDogX2NfZmxhZ3MgPSAkKGNhbGwgdW5wcm9maWxlLCQoQ0ZMQUdTKSkKLQotaW5jbHVkZSBhcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUudW5tYXAKKyQob2JqKS91bm1hcC4lOiBfY19mbGFncyA9ICQoY2FsbCB1bnByb2ZpbGUsJChDRkxBR1MpKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9rc3ltcy5jIGIvYXJjaC91bS9zeXMtaTM4Ni9rc3ltcy5jCmluZGV4IGRiNTI0YWIzLi4yYTFlYWMxIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9rc3ltcy5jCkBAIC0xNSw3ICsxNSwzIEBACiAKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOwotCi0vKiBkZWxheSBjb3JlIGZ1bmN0aW9ucyAqLwotRVhQT1JUX1NZTUJPTChfX2NvbnN0X3VkZWxheSk7Ci1FWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvcHRyYWNlLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3B0cmFjZS5jCmluZGV4IDgwMzJhMTAuLjYwMjhiYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvcHRyYWNlLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2UuYwpAQCAtMTUsOSArMTUsMjIgQEAKICNpbmNsdWRlICJzeXNkZXAvc2lnY29udGV4dC5oIgogI2luY2x1ZGUgInN5c2RlcC9zYy5oIgogCi12b2lkIGFyY2hfc3dpdGNoKHZvaWQpCit2b2lkIGFyY2hfc3dpdGNoX3RvX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0bykKIHsKLQl1cGRhdGVfZGVidWdyZWdzKGN1cnJlbnQtPnRocmVhZC5hcmNoLmRlYnVncmVnc19zZXEpOworCXVwZGF0ZV9kZWJ1Z3JlZ3ModG8tPnRocmVhZC5hcmNoLmRlYnVncmVnc19zZXEpOworCWFyY2hfc3dpdGNoX3Rsc190dChmcm9tLCB0byk7Cit9CisKK3ZvaWQgYXJjaF9zd2l0Y2hfdG9fc2thcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG8pCit7CisJaW50IGVyciA9IGFyY2hfc3dpdGNoX3Rsc19za2FzKGZyb20sIHRvKTsKKwlpZiAoIWVycikKKwkJcmV0dXJuOworCisJaWYgKGVyciAhPSAtRUlOVkFMKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJhcmNoX3N3aXRjaF90bHNfc2thcyBmYWlsZWQsIGVycm5vICVkLCBub3QgRUlOVkFMXG4iLCAtZXJyKTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFyY2hfc3dpdGNoX3Rsc19za2FzIGZhaWxlZCwgZXJybm8gPSBFSU5WQUxcbiIpOwogfQogCiBpbnQgaXNfc3lzY2FsbCh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0xMjQsMjIgKzEzNywyMiBAQAogaW50IHBlZWtfdXNlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKIC8qIHJlYWQgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkciBpbiB0aGUgVVNFUiBhcmVhLiAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHRtcDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKIAotICAgICAgICBpZiAoKGFkZHIgJiAzKSB8fCBhZGRyIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKKwlpZiAoKGFkZHIgJiAzKSB8fCBhZGRyIDwgMCkKKwkJcmV0dXJuIC1FSU87CiAKLSAgICAgICAgdG1wID0gMDsgIC8qIERlZmF1bHQgcmV0dXJuIGNvbmRpdGlvbiAqLwotICAgICAgICBpZihhZGRyIDwgTUFYX1JFR19PRkZTRVQpewotICAgICAgICAgICAgICAgIHRtcCA9IGdldHJlZyhjaGlsZCwgYWRkcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZigoYWRkciA+PSBvZmZzZXRvZihzdHJ1Y3QgdXNlciwgdV9kZWJ1Z3JlZ1swXSkpICYmCi0gICAgICAgICAgICAgICAgKGFkZHIgPD0gb2Zmc2V0b2Yoc3RydWN0IHVzZXIsIHVfZGVidWdyZWdbN10pKSl7Ci0gICAgICAgICAgICAgICAgYWRkciAtPSBvZmZzZXRvZihzdHJ1Y3QgdXNlciwgdV9kZWJ1Z3JlZ1swXSk7Ci0gICAgICAgICAgICAgICAgYWRkciA9IGFkZHIgPj4gMjsKLSAgICAgICAgICAgICAgICB0bXAgPSBjaGlsZC0+dGhyZWFkLmFyY2guZGVidWdyZWdzW2FkZHJdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nICopIGRhdGEpOworCXRtcCA9IDA7ICAvKiBEZWZhdWx0IHJldHVybiBjb25kaXRpb24gKi8KKwlpZihhZGRyIDwgTUFYX1JFR19PRkZTRVQpeworCQl0bXAgPSBnZXRyZWcoY2hpbGQsIGFkZHIpOworCX0KKwllbHNlIGlmKChhZGRyID49IG9mZnNldG9mKHN0cnVjdCB1c2VyLCB1X2RlYnVncmVnWzBdKSkgJiYKKwkJKGFkZHIgPD0gb2Zmc2V0b2Yoc3RydWN0IHVzZXIsIHVfZGVidWdyZWdbN10pKSl7CisJCWFkZHIgLT0gb2Zmc2V0b2Yoc3RydWN0IHVzZXIsIHVfZGVidWdyZWdbMF0pOworCQlhZGRyID0gYWRkciA+PiAyOworCQl0bXAgPSBjaGlsZC0+dGhyZWFkLmFyY2guZGVidWdyZWdzW2FkZHJdOworCX0KKwlyZXR1cm4gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZGF0YSk7CiB9CiAKIHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2VfdXNlci5jIGIvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2VfdXNlci5jCmluZGV4IDdjMzc2YzkuLjQwYWE4ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvcHRyYWNlX3VzZXIuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3B0cmFjZV91c2VyLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJzeXNkZXAvdGhyZWFkLmgiCiAjaW5jbHVkZSAidXNlci5oIgogI2luY2x1ZGUgIm9zLmgiCisjaW5jbHVkZSAidW1sLWNvbmZpZy5oIgogCiBpbnQgcHRyYWNlX2dldHJlZ3MobG9uZyBwaWQsIHVuc2lnbmVkIGxvbmcgKnJlZ3Nfb3V0KQogewpAQCAtNDMsNiArNDQsNyBAQAogCXJldHVybiAwOwogfQogCisvKiBBbGwgdGhlIGJlbG93IHN0dWZmIGlzIG9mIGludGVyZXN0IGZvciBUVCBtb2RlIG9ubHkgKi8KIHN0YXRpYyB2b2lkIHdyaXRlX2RlYnVncmVncyhpbnQgcGlkLCB1bnNpZ25lZCBsb25nICpyZWdzKQogewogCXN0cnVjdCB1c2VyICpkdW1teTsKQEAgLTU1LDcgKzU3LDcgQEAKIAkJaWYocHRyYWNlKFBUUkFDRV9QT0tFVVNSLCBwaWQsICZkdW1teS0+dV9kZWJ1Z3JlZ1tpXSwKIAkJCSAgcmVnc1tpXSkgPCAwKQogCQkJcHJpbnRrKCJ3cml0ZV9kZWJ1Z3JlZ3MgLSBwdHJhY2UgZmFpbGVkIG9uICIKLQkJCSAgICAgICAicmVnaXN0ZXIgJWQsIHZhbHVlID0gMHgleCwgZXJybm8gPSAlZFxuIiwgaSwKKwkJCSAgICAgICAicmVnaXN0ZXIgJWQsIHZhbHVlID0gMHglbHgsIGVycm5vID0gJWRcbiIsIGksCiAJCQkgICAgICAgcmVnc1tpXSwgZXJybm8pOwogCX0KIH0KQEAgLTc1LDcgKzc3LDYgQEAKIAogLyogQWNjZXNzZWQgb25seSBieSB0aGUgdHJhY2luZyB0aHJlYWQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtlcm5lbF9kZWJ1Z3JlZ3NbOF0gPSB7IFsgMCAuLi4gNyBdID0gMCB9Owotc3RhdGljIGludCBkZWJ1Z3JlZ3Nfc2VxID0gMDsKIAogdm9pZCBhcmNoX2VudGVyX2tlcm5lbCh2b2lkICp0YXNrLCBpbnQgcGlkKQogewpAQCAtODksNiArOTAsMTEgQEAKIAl3cml0ZV9kZWJ1Z3JlZ3MocGlkLCBUQVNLX0RFQlVHUkVHUyh0YXNrKSk7CiB9CiAKKyNpZmRlZiBVTUxfQ09ORklHX1BUX1BST1hZCisvKiBBY2Nlc3NlZCBvbmx5IGJ5IHRoZSB0cmFjaW5nIHRocmVhZCAqLworc3RhdGljIGludCBkZWJ1Z3JlZ3Nfc2VxOworCisvKiBPbmx5IGNhbGxlZCBieSB0aGUgcHRyYWNlIHByb3h5ICovCiB2b2lkIHB0cmFjZV9wb2tldXNlcih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlpZigoYWRkciA8IG9mZnNldG9mKHN0cnVjdCB1c2VyLCB1X2RlYnVncmVnWzBdKSkgfHwKQEAgLTEwOSw2ICsxMTUsNyBAQAogCXdyaXRlX2RlYnVncmVncyhwaWQsIGtlcm5lbF9kZWJ1Z3JlZ3MpOwogfQogCisvKiBPcHRpbWl6ZWQgb3V0IGluIGl0cyBoZWFkZXIgd2hlbiBub3QgZGVmaW5lZCAqLwogdm9pZCB1cGRhdGVfZGVidWdyZWdzKGludCBzZXEpCiB7CiAJaW50IG1lOwpAQCAtMTE4LDYgKzEyNSw3IEBACiAJbWUgPSBvc19nZXRwaWQoKTsKIAlpbml0aWFsX3RocmVhZF9jYih1cGRhdGVfZGVidWdyZWdzX2NiLCAmbWUpOwogfQorI2VuZGlmCiAKIC8qCiAgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCmluZGV4IDMzYTQwZjUuLjA3MDlmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgInNrYXMuaCIKIAogc3RhdGljIGludCBjb3B5X3NjX2Zyb21fdXNlcl9za2FzKHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSAgc3RydWN0IHNpZ2NvbnRleHQgKmZyb20pCisJCQkJICBzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKmZyb20pCiB7CiAgIAlzdHJ1Y3Qgc2lnY29udGV4dCBzYzsKIAl1bnNpZ25lZCBsb25nIGZwcmVnc1tIT1NUX0ZQX1NJWkVdOwpAQCAtNTcsNyArNTcsNyBAQAogCXJldHVybigwKTsKIH0KIAotaW50IGNvcHlfc2NfdG9fdXNlcl9za2FzKHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlICp0b19mcCwKK2ludCBjb3B5X3NjX3RvX3VzZXJfc2thcyhzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICp0b19mcCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBzcCkKIHsKICAgCXN0cnVjdCBzaWdjb250ZXh0IHNjOwpAQCAtOTIsNyArOTIsNyBAQAogCQkgICAgICAgImVycm5vID0gJWRcbiIsIGVycik7CiAJCXJldHVybigxKTsKIAl9Ci0JdG9fZnAgPSAodG9fZnAgPyB0b19mcCA6IChzdHJ1Y3QgX2Zwc3RhdGUgKikgKHRvICsgMSkpOworCXRvX2ZwID0gKHRvX2ZwID8gdG9fZnAgOiAoc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqKSAodG8gKyAxKSk7CiAJc2MuZnBzdGF0ZSA9IHRvX2ZwOwogCiAJaWYoZXJyKQpAQCAtMTEzLDEwICsxMTMsMTEgQEAKICAqIHNhdmVkIHBvaW50ZXIgaXMgaW4gdGhlIGtlcm5lbCwgYnV0IHRoZSBzaWdjb250ZXh0IGlzIGluIHVzZXJzcGFjZSwgc28gd2UKICAqIGNvcHlfdG9fdXNlciBpdC4KICAqLwotaW50IGNvcHlfc2NfZnJvbV91c2VyX3R0KHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IHNpZ2NvbnRleHQgKmZyb20sCitpbnQgY29weV9zY19mcm9tX3VzZXJfdHQoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKmZyb20sCiAJCQkgaW50IGZwc2l6ZSkKIHsKLQlzdHJ1Y3QgX2Zwc3RhdGUgKnRvX2ZwLCAqZnJvbV9mcDsKKwlzdHJ1Y3QgX2Zwc3RhdGUgKnRvX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZyb21fZnA7CiAJdW5zaWduZWQgbG9uZyBzaWdzOwogCWludCBlcnI7CiAKQEAgLTEzMSwxMyArMTMyLDE0IEBACiAJcmV0dXJuKGVycik7CiB9CiAKLWludCBjb3B5X3NjX3RvX3VzZXJfdHQoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgKmZwLAoraW50IGNvcHlfc2NfdG9fdXNlcl90dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcCwKIAkJICAgICAgIHN0cnVjdCBzaWdjb250ZXh0ICpmcm9tLCBpbnQgZnBzaXplLCB1bnNpZ25lZCBsb25nIHNwKQogewotCXN0cnVjdCBfZnBzdGF0ZSAqdG9fZnAsICpmcm9tX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKnRvX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSAqZnJvbV9mcDsKIAlpbnQgZXJyOwogCi0JdG9fZnAgPQkoZnAgPyBmcCA6IChzdHJ1Y3QgX2Zwc3RhdGUgKikgKHRvICsgMSkpOworCXRvX2ZwID0JKGZwID8gZnAgOiAoc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqKSAodG8gKyAxKSk7CiAJZnJvbV9mcCA9IGZyb20tPmZwc3RhdGU7CiAJZXJyID0gY29weV90b191c2VyKHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7CiAKQEAgLTE0NSw3ICsxNDcsNyBAQAogCSAqIGRlbGl2ZXJ5LiAgVGhlIHNwIHBhc3NlZCBpbiBpcyB0aGUgb3JpZ2luYWwsIGFuZCB0aGlzIG5lZWRzCiAJICogdG8gYmUgcmVzdG9yZWQsIHNvIHdlIHN0aWNrIGl0IGluIHNlcGFyYXRlbHkuCiAJICovCi0JZXJyIHw9IGNvcHlfdG9fdXNlcigmU0NfU1AodG8pLCBzcCwgc2l6ZW9mKHNwKSk7CisJZXJyIHw9IGNvcHlfdG9fdXNlcigmU0NfU1AodG8pLCAmc3AsIHNpemVvZihzcCkpOwogCiAJaWYoZnJvbV9mcCAhPSBOVUxMKXsKIAkJZXJyIHw9IGNvcHlfdG9fdXNlcigmdG8tPmZwc3RhdGUsICZ0b19mcCwgc2l6ZW9mKHRvLT5mcHN0YXRlKSk7CkBAIC0xNjUsNyArMTY3LDcgQEAKIAlyZXR1cm4ocmV0KTsKIH0KIAotc3RhdGljIGludCBjb3B5X3NjX3RvX3VzZXIoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgKmZwLAorc3RhdGljIGludCBjb3B5X3NjX3RvX3VzZXIoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqZnAsCiAJCQkgICBzdHJ1Y3QgcHRfcmVncyAqZnJvbSwgdW5zaWduZWQgbG9uZyBzcCkKIHsKIAlyZXR1cm4oQ0hPT1NFX01PREUoY29weV9zY190b191c2VyX3R0KHRvLCBmcCwgVVBUX1NDKCZmcm9tLT5yZWdzKSwKQEAgLTE3Myw3ICsxNzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9zY190b191c2VyX3NrYXModG8sIGZwLCBmcm9tLCBzcCkpKTsKIH0KIAotc3RhdGljIGludCBjb3B5X3Vjb250ZXh0X3RvX3VzZXIoc3RydWN0IHVjb250ZXh0ICp1Yywgc3RydWN0IF9mcHN0YXRlICpmcCwKK3N0YXRpYyBpbnQgY29weV91Y29udGV4dF90b191c2VyKHN0cnVjdCB1Y29udGV4dCBfX3VzZXIgKnVjLCBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcCwKIAkJCQkgc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9uZyBzcCkKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTE4OCw3ICsxOTAsNyBAQAogCiBzdHJ1Y3Qgc2lnZnJhbWUKIHsKLQljaGFyICpwcmV0Y29kZTsKKwljaGFyIF9fdXNlciAqcHJldGNvZGU7CiAJaW50IHNpZzsKIAlzdHJ1Y3Qgc2lnY29udGV4dCBzYzsKIAlzdHJ1Y3QgX2Zwc3RhdGUgZnBzdGF0ZTsKQEAgLTE5OCwxMCArMjAwLDEwIEBACiAKIHN0cnVjdCBydF9zaWdmcmFtZQogewotCWNoYXIgKnByZXRjb2RlOworCWNoYXIgX191c2VyICpwcmV0Y29kZTsKIAlpbnQgc2lnOwotCXN0cnVjdCBzaWdpbmZvICpwaW5mbzsKLQl2b2lkICpwdWM7CisJc3RydWN0IHNpZ2luZm8gX191c2VyICpwaW5mbzsKKwl2b2lkIF9fdXNlciAqcHVjOwogCXN0cnVjdCBzaWdpbmZvIGluZm87CiAJc3RydWN0IHVjb250ZXh0IHVjOwogCXN0cnVjdCBfZnBzdGF0ZSBmcHN0YXRlOwpAQCAtMjEzLDE2ICsyMTUsMTYgQEAKIAkJCSAgc2lnc2V0X3QgKm1hc2spCiB7CiAJc3RydWN0IHNpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7Ci0Jdm9pZCAqcmVzdG9yZXI7CisJdm9pZCBfX3VzZXIgKnJlc3RvcmVyOwogCXVuc2lnbmVkIGxvbmcgc2F2ZV9zcCA9IFBUX1JFR1NfU1AocmVncyk7CiAJaW50IGVyciA9IDA7CiAKIAlzdGFja190b3AgJj0gLThVTDsKLQlmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWUgKikgc3RhY2tfdG9wIC0gMTsKKwlmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICopIHN0YWNrX3RvcCAtIDE7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlyZXR1cm4gMTsKIAotCXJlc3RvcmVyID0gKHZvaWQgKikgZnJhbWUtPnJldGNvZGU7CisJcmVzdG9yZXIgPSBmcmFtZS0+cmV0Y29kZTsKIAlpZihrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikKIAkJcmVzdG9yZXIgPSBrYS0+c2Euc2FfcmVzdG9yZXI7CiAKQEAgLTI3OCwxNiArMjgwLDE2IEBACiAJCQkgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKm1hc2spCiB7CiAJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7Ci0Jdm9pZCAqcmVzdG9yZXI7CisJdm9pZCBfX3VzZXIgKnJlc3RvcmVyOwogCXVuc2lnbmVkIGxvbmcgc2F2ZV9zcCA9IFBUX1JFR1NfU1AocmVncyk7CiAJaW50IGVyciA9IDA7CiAKIAlzdGFja190b3AgJj0gLThVTDsKLQlmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgKikgc3RhY2tfdG9wIC0gMTsKKwlmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICopIHN0YWNrX3RvcCAtIDE7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlyZXR1cm4gMTsKIAotCXJlc3RvcmVyID0gKHZvaWQgKikgZnJhbWUtPnJldGNvZGU7CisJcmVzdG9yZXIgPSBmcmFtZS0+cmV0Y29kZTsKIAlpZihrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikKIAkJcmVzdG9yZXIgPSBrYS0+c2Euc2FfcmVzdG9yZXI7CiAKQEAgLTMzMyw3ICszMzUsNyBAQAogbG9uZyBzeXNfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBzcCA9IFBUX1JFR1NfU1AoJmN1cnJlbnQtPnRocmVhZC5yZWdzKTsKLQlzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICpmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWUgKikoc3AgLSA4KTsKKwlzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICpmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICopKHNwIC0gOCk7CiAJc2lnc2V0X3Qgc2V0OwogCXN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MgPSAmZnJhbWUtPnNjOwogCXVuc2lnbmVkIGxvbmcgX191c2VyICpvbGRtYXNrID0gJnNjLT5vbGRtYXNrOwpAQCAtMzY1LDggKzM2Nyw4IEBACiAKIGxvbmcgc3lzX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyByZWdzKQogewotCXVuc2lnbmVkIGxvbmcgX191c2VyIHNwID0gUFRfUkVHU19TUCgmY3VycmVudC0+dGhyZWFkLnJlZ3MpOwotCXN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSAqKSAoc3AgLSA0KTsKKwl1bnNpZ25lZCBsb25nIHNwID0gUFRfUkVHU19TUCgmY3VycmVudC0+dGhyZWFkLnJlZ3MpOworCXN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKikgKHNwIC0gNCk7CiAJc2lnc2V0X3Qgc2V0OwogCXN0cnVjdCB1Y29udGV4dCBfX3VzZXIgKnVjID0gJmZyYW1lLT51YzsKIAlpbnQgc2lnX3NpemUgPSBfTlNJR19XT1JEUyAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc3R1Yl9zZWd2LmMgYi9hcmNoL3VtL3N5cy1pMzg2L3N0dWJfc2Vndi5jCmluZGV4IGEzN2Y2NzIuLjIzNTVkYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc3R1Yl9zZWd2LmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zdHViX3NlZ3YuYwpAQCAtMjcsNiArMjcsNiBAQAogCSAqIHRoZSBzdGFjayBpbiBpdHMgb3JpZ2luYWwgZm9ybSB3aGVuIHdlIGRvIHRoZSBzaWdyZXR1cm4gaGVyZSwgYnkKIAkgKiBoYW5kLgogCSAqLwotCV9fYXNtX18oIm1vdiAlMCwlJWVzcCA7IG1vdmwgJTEsICUlZWF4IDsgIgotCQkiaW50ICQweDgwIiA6IDogImEiIChzYyksICJnIiAoX19OUl9zaWdyZXR1cm4pKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwLCUlZXNwIDsgbW92bCAlMSwgJSVlYXggOyAiCisJCQkgICAgICJpbnQgJDB4ODAiIDogOiAiYSIgKHNjKSwgImciIChfX05SX3NpZ3JldHVybikpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TIGIvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TCmluZGV4IGFkNzVjMjcuLjFmZjYxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c19jYWxsX3RhYmxlLlMKQEAgLTYsOCArNiw2IEBACiAKICNkZWZpbmUgc3lzX3ZtODZvbGQgc3lzX25pX3N5c2NhbGwKICNkZWZpbmUgc3lzX3ZtODYgc3lzX25pX3N5c2NhbGwKLSNkZWZpbmUgc3lzX3NldF90aHJlYWRfYXJlYSBzeXNfbmlfc3lzY2FsbAotI2RlZmluZSBzeXNfZ2V0X3RocmVhZF9hcmVhIHN5c19uaV9zeXNjYWxsCiAKICNkZWZpbmUgc3lzX3N0aW1lIHVtX3N0aW1lCiAjZGVmaW5lIHN5c190aW1lIHVtX3RpbWUKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc3lzY2FsbHMuYyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzY2FsbHMuYwppbmRleCA4M2U5YmU4Li43MTBkNWZiIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3N5c2NhbGxzLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zeXNjYWxscy5jCkBAIC02MSwyMSArNjEsMjcgQEAKIAlyZXR1cm4gc3lzX3NlbGVjdChhLm4sIGEuaW5wLCBhLm91dHAsIGEuZXhwLCBhLnR2cCk7CiB9CiAKLS8qIFRoZSBpMzg2IHZlcnNpb24gc2tpcHMgcmVhZGluZyBmcm9tICVlc2ksIHRoZSBmb3VydGggYXJndW1lbnQuIFNvIHdlIG11c3QgZG8KLSAqIHRoaXMsIHRvby4KKy8qCisgKiBUaGUgcHJvdG90eXBlIG9uIGkzODYgaXM6CisgKgorICogICAgIGludCBjbG9uZShpbnQgZmxhZ3MsIHZvaWQgKiBjaGlsZF9zdGFjaywgaW50ICogcGFyZW50X3RpZHB0ciwgc3RydWN0IHVzZXJfZGVzYyAqIG5ld3RscywgaW50ICogY2hpbGRfdGlkcHRyKQorICoKKyAqIGFuZCB0aGUgIm5ld3RscyIgYXJnLiBvbiBpMzg2IGlzIHJlYWQgYnkgY29weV90aHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUKKyAqIHJlZ2lzdGVyIHNhdmVkIG9uIHRoZSBzdGFjay4KICAqLwogbG9uZyBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKLQkgICAgICAgaW50IF9fdXNlciAqcGFyZW50X3RpZCwgaW50IHVudXNlZCwgaW50IF9fdXNlciAqY2hpbGRfdGlkKQorCSAgICAgICBpbnQgX191c2VyICpwYXJlbnRfdGlkLCB2b2lkICpuZXd0bHMsIGludCBfX3VzZXIgKmNoaWxkX3RpZCkKIHsKIAlsb25nIHJldDsKIAogCWlmICghbmV3c3ApCiAJCW5ld3NwID0gVVBUX1NQKCZjdXJyZW50LT50aHJlYWQucmVncy5yZWdzKTsKKwogCWN1cnJlbnQtPnRocmVhZC5mb3JraW5nID0gMTsKIAlyZXQgPSBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgJmN1cnJlbnQtPnRocmVhZC5yZWdzLCAwLCBwYXJlbnRfdGlkLAogCQkgICAgICBjaGlsZF90aWQpOwogCWN1cnJlbnQtPnRocmVhZC5mb3JraW5nID0gMDsKLQlyZXR1cm4ocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtOTMsMTggKzk5LDE5IEBACiAKIAlzd2l0Y2ggKGNhbGwpIHsKIAljYXNlIFNFTU9QOgotCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmICopIHB0ciwgc2Vjb25kLAotCQkJCSAgICAgIE5VTEwpOworCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKSBwdHIsCisJCQkJICAgICAgc2Vjb25kLCBOVUxMKTsKIAljYXNlIFNFTVRJTUVET1A6Ci0JCXJldHVybiBzeXNfc2VtdGltZWRvcChmaXJzdCwgKHN0cnVjdCBzZW1idWYgKikgcHRyLCBzZWNvbmQsCi0JCQkJICAgICAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKSBmaWZ0aCk7CisJCXJldHVybiBzeXNfc2VtdGltZWRvcChmaXJzdCwgKHN0cnVjdCBzZW1idWYgX191c2VyICopIHB0ciwKKwkJCQkgICAgICBzZWNvbmQsCisJCQkJICAgICAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKikgZmlmdGgpOwogCWNhc2UgU0VNR0VUOgogCQlyZXR1cm4gc3lzX3NlbWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOwogCWNhc2UgU0VNQ1RMOiB7CiAJCXVuaW9uIHNlbXVuIGZvdXJ0aDsKIAkJaWYgKCFwdHIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGdldF91c2VyKGZvdXJ0aC5fX3BhZCwgKHZvaWQgKiopIHB0cikpCisJCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKSBwdHIpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiBzeXNfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3Rscy5jIGIvYXJjaC91bS9zeXMtaTM4Ni90bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWI5Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni90bHMuYwpAQCAtMCwwICsxLDM4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBQYW9sbyAnQmxhaXNvcmJsYWRlJyBHaWFycnVzc28gPGJsYWlzb3JibGFkZUB5YWhvby5pdD4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaW5jbHVkZSAibGludXgvY29uZmlnLmgiCisjaW5jbHVkZSAibGludXgva2VybmVsLmgiCisjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKKyNpbmNsdWRlICJsaW51eC9zbGFiLmgiCisjaW5jbHVkZSAibGludXgvdHlwZXMuaCIKKyNpbmNsdWRlICJhc20vdWFjY2Vzcy5oIgorI2luY2x1ZGUgImFzbS9wdHJhY2UuaCIKKyNpbmNsdWRlICJhc20vc2VnbWVudC5oIgorI2luY2x1ZGUgImFzbS9zbXAuaCIKKyNpbmNsdWRlICJhc20vZGVzYy5oIgorI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCisjaW5jbHVkZSAia2Vybi5oIgorI2luY2x1ZGUgImtlcm5fdXRpbC5oIgorI2luY2x1ZGUgIm1vZGVfa2Vybi5oIgorI2luY2x1ZGUgIm9zLmgiCisjaW5jbHVkZSAibW9kZS5oIgorCisjaWZkZWYgQ09ORklHX01PREVfU0tBUworI2luY2x1ZGUgInNrYXMuaCIKKyNlbmRpZgorCisvKiBJZiBuZWVkZWQgd2UgY2FuIGRldGVjdCB3aGVuIGl0J3MgdW5pbml0aWFsaXplZC4gKi8KK3N0YXRpYyBpbnQgaG9zdF9zdXBwb3J0c190bHMgPSAtMTsKK2ludCBob3N0X2dkdF9lbnRyeV90bHNfbWluID0gLTE7CisKKyNpZmRlZiBDT05GSUdfTU9ERV9TS0FTCitpbnQgZG9fc2V0X3RocmVhZF9hcmVhX3NrYXMoc3RydWN0IHVzZXJfZGVzYyAqaW5mbykKK3sKKwlpbnQgcmV0OworCXUzMiBjcHU7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJcmV0ID0gb3Nfc2V0X3RocmVhZF9hcmVhKGluZm8sIHVzZXJzcGFjZV9waWRbY3B1XSk7CisJcHV0X2NwdSgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBkb19nZXRfdGhyZWFkX2FyZWFfc2thcyhzdHJ1Y3QgdXNlcl9kZXNjICppbmZvKQoreworCWludCByZXQ7CisJdTMyIGNwdTsKKworCWNwdSA9IGdldF9jcHUoKTsKKwlyZXQgPSBvc19nZXRfdGhyZWFkX2FyZWEoaW5mbywgdXNlcnNwYWNlX3BpZFtjcHVdKTsKKwlwdXRfY3B1KCk7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisvKgorICogc3lzX2dldF90aHJlYWRfYXJlYTogZ2V0IGEgeWV0IHVudXNlZCBUTFMgZGVzY3JpcHRvciBpbmRleC4KKyAqIFhYWDogQ29uc2lkZXIgbGVhdmluZyBvbmUgZnJlZSBzbG90IGZvciBnbGliYyB1c2FnZSBhdCBmaXJzdCBwbGFjZS4gVGhpcyBtdXN0CisgKiBiZSBkb25lIGhlcmUgKGFuZCBieSBjaGFuZ2luZyBHRFRfRU5UUllfVExTXyogbWFjcm9zKSBhbmQgbm93aGVyZSBlbHNlLgorICoKKyAqIEFsc28sIHRoaXMgbXVzdCBiZSB0ZXN0ZWQgd2hlbiBjb21waWxpbmcgaW4gU0tBUyBtb2RlIHdpdGggZGluYW1pYyBsaW5raW5nCisgKiBhbmQgcnVubmluZyBhZ2FpbnN0IE5QVEwuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2ZyZWVfaWR4KHN0cnVjdCB0YXNrX3N0cnVjdCogdGFzaykKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0YXNrLT50aHJlYWQ7CisJaW50IGlkeDsKKworCWlmICghdC0+YXJjaC50bHNfYXJyYXkpCisJCXJldHVybiBHRFRfRU5UUllfVExTX01JTjsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgR0RUX0VOVFJZX1RMU19FTlRSSUVTOyBpZHgrKykKKwkJaWYgKCF0LT5hcmNoLnRsc19hcnJheVtpZHhdLnByZXNlbnQpCisJCQlyZXR1cm4gaWR4ICsgR0RUX0VOVFJZX1RMU19NSU47CisJcmV0dXJuIC1FU1JDSDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3VzZXJfZGVzYyhzdHJ1Y3QgdXNlcl9kZXNjKiBpbmZvKQoreworCS8qIFBvc3Rjb25kaXRpb246IExEVF9lbXB0eShpbmZvKSByZXR1cm5zIHRydWUuICovCisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCisJLyogQ2hlY2sgdGhlIExEVF9lbXB0eSBvciB0aGUgaTM4NiBzeXNfZ2V0X3RocmVhZF9hcmVhIGNvZGUgLSB3ZSBvYnRhaW4KKwkgKiBpbmRlZWQgYW4gZW1wdHkgdXNlcl9kZXNjLgorCSAqLworCWluZm8tPnJlYWRfZXhlY19vbmx5ID0gMTsKKwlpbmZvLT5zZWdfbm90X3ByZXNlbnQgPSAxOworfQorCisjZGVmaW5lIE9fRk9SQ0UgMQorCitzdGF0aWMgaW50IGxvYWRfVExTKGludCBmbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0bykKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaWR4OworCisJZm9yIChpZHggPSBHRFRfRU5UUllfVExTX01JTjsgaWR4IDwgR0RUX0VOVFJZX1RMU19NQVg7IGlkeCsrKSB7CisJCXN0cnVjdCB1bWxfdGxzX3N0cnVjdCogY3VyciA9ICZ0by0+dGhyZWFkLmFyY2gudGxzX2FycmF5W2lkeCAtIEdEVF9FTlRSWV9UTFNfTUlOXTsKKworCQkvKiBBY3R1YWxseSwgbm93IGlmIGl0IHdhc24ndCBmbHVzaGVkIGl0IGdldHMgY2xlYXJlZCBhbmQKKwkJICogZmx1c2hlZCB0byB0aGUgaG9zdCwgd2hpY2ggd2lsbCBjbGVhciBpdC4qLworCQlpZiAoIWN1cnItPnByZXNlbnQpIHsKKwkJCWlmICghY3Vyci0+Zmx1c2hlZCkgeworCQkJCWNsZWFyX3VzZXJfZGVzYygmY3Vyci0+dGxzKTsKKwkJCQljdXJyLT50bHMuZW50cnlfbnVtYmVyID0gaWR4OworCQkJfSBlbHNlIHsKKwkJCQlXQVJOX09OKCFMRFRfZW1wdHkoJmN1cnItPnRscykpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKCEoZmxhZ3MgJiBPX0ZPUkNFKSAmJiBjdXJyLT5mbHVzaGVkKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZG9fc2V0X3RocmVhZF9hcmVhKCZjdXJyLT50bHMpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKKwkJY3Vyci0+Zmx1c2hlZCA9IDE7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qIFZlcmlmeSBpZiB3ZSBuZWVkIHRvIGRvIGEgZmx1c2ggZm9yIHRoZSBuZXcgcHJvY2VzcywgaS5lLiBpZiB0aGVyZSBhcmUgYW55CisgKiBwcmVzZW50IGRlc2Mncywgb25seSBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBmbHVzaGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBuZWVkc19UTFNfdXBkYXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoaSA9IEdEVF9FTlRSWV9UTFNfTUlOOyBpIDwgR0RUX0VOVFJZX1RMU19NQVg7IGkrKykgeworCQlzdHJ1Y3QgdW1sX3Rsc19zdHJ1Y3QqIGN1cnIgPSAmdGFzay0+dGhyZWFkLmFyY2gudGxzX2FycmF5W2kgLSBHRFRfRU5UUllfVExTX01JTl07CisKKwkJLyogQ2FuJ3QgdGVzdCBjdXJyLT5wcmVzZW50LCB3ZSBtYXkgbmVlZCB0byBjbGVhciBhIGRlc2NyaXB0b3IKKwkJICogd2hpY2ggaGFkIGEgdmFsdWUuICovCisJCWlmIChjdXJyLT5mbHVzaGVkKQorCQkJY29udGludWU7CisJCXJldCA9IDE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBPbiBhIG5ld2x5IGZvcmtlZCBwcm9jZXNzLCB0aGUgVExTIGRlc2NyaXB0b3JzIGhhdmVuJ3QgeWV0IGJlZW4gZmx1c2hlZC4gU28KKyAqIHdlIG1hcmsgdGhlbSBhcyBzdWNoIGFuZCB0aGUgZmlyc3Qgc3dpdGNoX3RvIHdpbGwgZG8gdGhlIGpvYi4KKyAqLwordm9pZCBjbGVhcl9mbHVzaGVkX3RscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBHRFRfRU5UUllfVExTX01JTjsgaSA8IEdEVF9FTlRSWV9UTFNfTUFYOyBpKyspIHsKKwkJc3RydWN0IHVtbF90bHNfc3RydWN0KiBjdXJyID0gJnRhc2stPnRocmVhZC5hcmNoLnRsc19hcnJheVtpIC0gR0RUX0VOVFJZX1RMU19NSU5dOworCisJCS8qIFN0aWxsIGNvcnJlY3QgdG8gZG8gdGhpcywgaWYgaXQgd2Fzbid0IHByZXNlbnQgb24gdGhlIGhvc3QgaXQKKwkJICogd2lsbCByZW1haW4gYXMgZmx1c2hlZCBhcyBpdCB3YXMuICovCisJCWlmICghY3Vyci0+cHJlc2VudCkKKwkJCWNvbnRpbnVlOworCisJCWN1cnItPmZsdXNoZWQgPSAwOworCX0KK30KKworLyogSW4gU0tBUzAgbW9kZSwgY3VycmVudGx5LCBtdWx0aXBsZSBndWVzdCB0aHJlYWRzIHNoYXJpbmcgdGhlIHNhbWUgLT5tbSBoYXZlIGEKKyAqIGNvbW1vbiBob3N0IHByb2Nlc3MuIFNvIHRoaXMgaXMgbmVlZGVkIGluIFNLQVMwIHRvby4KKyAqCisgKiBIb3dldmVyLCBpZiBlYWNoIHRocmVhZCBoYWQgYSBkaWZmZXJlbnQgaG9zdCBwcm9jZXNzIChhbmQgdGhpcyB3YXMgZGlzY3Vzc2VkCisgKiBmb3IgU01QIHN1cHBvcnQpIHRoaXMgd29uJ3QgYmUgbmVlZGVkLgorICoKKyAqIEFuZCB0aGlzIHdpbGwgbm90IG5lZWQgYmUgdXNlZCB3aGVuIChhbmQgaWYpIHdlJ2xsIGFkZCBzdXBwb3J0IHRvIHRoZSBob3N0CisgKiBTS0FTIHBhdGNoLiAqLworCitpbnQgYXJjaF9zd2l0Y2hfdGxzX3NrYXMoc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvKQoreworCWlmICghaG9zdF9zdXBwb3J0c190bHMpCisJCXJldHVybiAwOworCisJLyogV2UgaGF2ZSBubyBuZWVkIHdoYXRzb2V2ZXIgdG8gc3dpdGNoIFRMUyBmb3Iga2VybmVsIHRocmVhZHM7IGJleW9uZAorCSAqIHRoYXQsIHRoYXQgd291bGQgYWxzbyByZXN1bHQgaW4gdXMgY2FsbGluZyBvc19zZXRfdGhyZWFkX2FyZWEgd2l0aAorCSAqIHVzZXJzcGFjZV9waWRbY3B1XSA9PSAwLCB3aGljaCBnaXZlcyBhbiBlcnJvci4gKi8KKwlpZiAobGlrZWx5KHRvLT5tbSkpCisJCXJldHVybiBsb2FkX1RMUyhPX0ZPUkNFLCB0byk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFyY2hfc3dpdGNoX3Rsc190dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG8pCit7CisJaWYgKCFob3N0X3N1cHBvcnRzX3RscykKKwkJcmV0dXJuIDA7CisKKwlpZiAobmVlZHNfVExTX3VwZGF0ZSh0bykpCisJCXJldHVybiBsb2FkX1RMUygwLCB0byk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfdGxzX2VudHJ5KHN0cnVjdCB0YXNrX3N0cnVjdCogdGFzaywgc3RydWN0IHVzZXJfZGVzYyAqaW5mbywKKwkJCSBpbnQgaWR4LCBpbnQgZmx1c2hlZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0YXNrLT50aHJlYWQ7CisKKwlpZiAoaWR4IDwgR0RUX0VOVFJZX1RMU19NSU4gfHwgaWR4ID4gR0RUX0VOVFJZX1RMU19NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJdC0+YXJjaC50bHNfYXJyYXlbaWR4IC0gR0RUX0VOVFJZX1RMU19NSU5dLnRscyA9ICppbmZvOworCXQtPmFyY2gudGxzX2FycmF5W2lkeCAtIEdEVF9FTlRSWV9UTFNfTUlOXS5wcmVzZW50ID0gMTsKKwl0LT5hcmNoLnRsc19hcnJheVtpZHggLSBHRFRfRU5UUllfVExTX01JTl0uZmx1c2hlZCA9IGZsdXNoZWQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFyY2hfY29weV90bHMoc3RydWN0IHRhc2tfc3RydWN0ICpuZXcpCit7CisJc3RydWN0IHVzZXJfZGVzYyBpbmZvOworCWludCBpZHgsIHJldCA9IC1FRkFVTFQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sCisJCQkgICAodm9pZCBfX3VzZXIgKikgVVBUX0VTSSgmbmV3LT50aHJlYWQucmVncy5yZWdzKSwKKwkJCSAgIHNpemVvZihpbmZvKSkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gLUVJTlZBTDsKKwlpZiAoTERUX2VtcHR5KCZpbmZvKSkKKwkJZ290byBvdXQ7CisKKwlpZHggPSBpbmZvLmVudHJ5X251bWJlcjsKKworCXJldCA9IHNldF90bHNfZW50cnkobmV3LCAmaW5mbywgaWR4LCAwKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBYWFg6IHVzZSBkb19nZXRfdGhyZWFkX2FyZWEgdG8gcmVhZCB0aGUgaG9zdCB2YWx1ZT8gSSdtIG5vdCBhdCBhbGwgc3VyZSEgKi8KK3N0YXRpYyBpbnQgZ2V0X3Rsc19lbnRyeShzdHJ1Y3QgdGFza19zdHJ1Y3QqIHRhc2ssIHN0cnVjdCB1c2VyX2Rlc2MgKmluZm8sIGludCBpZHgpCit7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmdGFzay0+dGhyZWFkOworCisJaWYgKCF0LT5hcmNoLnRsc19hcnJheSkKKwkJZ290byBjbGVhcjsKKworCWlmIChpZHggPCBHRFRfRU5UUllfVExTX01JTiB8fCBpZHggPiBHRFRfRU5UUllfVExTX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXQtPmFyY2gudGxzX2FycmF5W2lkeCAtIEdEVF9FTlRSWV9UTFNfTUlOXS5wcmVzZW50KQorCQlnb3RvIGNsZWFyOworCisJKmluZm8gPSB0LT5hcmNoLnRsc19hcnJheVtpZHggLSBHRFRfRU5UUllfVExTX01JTl0udGxzOworCitvdXQ6CisJLyogVGVtcG9yYXJ5IGRlYnVnZ2luZyBjaGVjaywgdG8gbWFrZSBzdXJlIHRoYXQgdGhpbmdzIGhhdmUgYmVlbgorCSAqIGZsdXNoZWQuIFRoaXMgY291bGQgYmUgdHJpZ2dlcmVkIGlmIGxvYWRfVExTKCkgZmFpbGVkLgorCSAqLworCWlmICh1bmxpa2VseSh0YXNrID09IGN1cnJlbnQgJiYgIXQtPmFyY2gudGxzX2FycmF5W2lkeCAtIEdEVF9FTlRSWV9UTFNfTUlOXS5mbHVzaGVkKSkgeworCQlwcmludGsoS0VSTl9FUlIgImdldF90bHNfZW50cnk6IHRhc2sgd2l0aCBwaWQgJWQgZ290IGhlcmUgIgorCQkJCSJ3aXRob3V0IGZsdXNoZWQgVExTLiIsIGN1cnJlbnQtPnBpZCk7CisJfQorCisJcmV0dXJuIDA7CitjbGVhcjoKKwkvKiBXaGVuIHRoZSBUTFMgZW50cnkgaGFzIG5vdCBiZWVuIHNldCwgdGhlIHZhbHVlcyByZWFkIHRvIHVzZXIgaW4gdGhlCisJICogdGxzX2FycmF5IGFyZSAwIChiZWNhdXNlIGl0J3MgY2xlYXJlZCBhdCBib290LCBzZWUKKwkgKiBhcmNoL2kzODYva2VybmVsL2hlYWQuUzpjcHVfZ2R0X3RhYmxlKS4gRW11bGF0ZSB0aGF0LgorCSAqLworCWNsZWFyX3VzZXJfZGVzYyhpbmZvKTsKKwlpbmZvLT5lbnRyeV9udW1iZXIgPSBpZHg7CisJZ290byBvdXQ7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKnVzZXJfZGVzYykKK3sKKwlzdHJ1Y3QgdXNlcl9kZXNjIGluZm87CisJaW50IGlkeCwgcmV0OworCisJaWYgKCFob3N0X3N1cHBvcnRzX3RscykKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIHVzZXJfZGVzYywgc2l6ZW9mKGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZHggPSBpbmZvLmVudHJ5X251bWJlcjsKKworCWlmIChpZHggPT0gLTEpIHsKKwkJaWR4ID0gZ2V0X2ZyZWVfaWR4KGN1cnJlbnQpOworCQlpZiAoaWR4IDwgMCkKKwkJCXJldHVybiBpZHg7CisJCWluZm8uZW50cnlfbnVtYmVyID0gaWR4OworCQkvKiBUZWxsIHRoZSB1c2VyIHdoaWNoIHNsb3Qgd2UgY2hvc2UgZm9yIGhpbS4qLworCQlpZiAocHV0X3VzZXIoaWR4LCAmdXNlcl9kZXNjLT5lbnRyeV9udW1iZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0ID0gQ0hPT1NFX01PREVfUFJPQyhkb19zZXRfdGhyZWFkX2FyZWFfdHQsIGRvX3NldF90aHJlYWRfYXJlYV9za2FzLCAmaW5mbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gc2V0X3Rsc19lbnRyeShjdXJyZW50LCAmaW5mbywgaWR4LCAxKTsKK30KKworLyoKKyAqIFBlcmZvcm0gc2V0X3RocmVhZF9hcmVhIG9uIGJlaGFsZiBvZiB0aGUgdHJhY2VkIGNoaWxkLgorICogTm90ZTogZXJyb3IgaGFuZGxpbmcgaXMgbm90IGRvbmUgb24gdGhlIGRlZmVycmVkIGxvYWQsIGFuZCB0aGlzIGRpZmZlciBmcm9tCisgKiBpMzg2LiBIb3dldmVyIHRoZSBvbmx5IHBvc3NpYmxlIGVycm9yIGFyZSBjYXVzZWQgYnkgYnVncy4KKyAqLworaW50IHB0cmFjZV9zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKKwkJc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKnVzZXJfZGVzYykKK3sKKwlzdHJ1Y3QgdXNlcl9kZXNjIGluZm87CisKKwlpZiAoIWhvc3Rfc3VwcG9ydHNfdGxzKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgdXNlcl9kZXNjLCBzaXplb2YoaW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBzZXRfdGxzX2VudHJ5KGNoaWxkLCAmaW5mbywgaWR4LCAwKTsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX2dldF90aHJlYWRfYXJlYShzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqdXNlcl9kZXNjKQoreworCXN0cnVjdCB1c2VyX2Rlc2MgaW5mbzsKKwlpbnQgaWR4LCByZXQ7CisKKwlpZiAoIWhvc3Rfc3VwcG9ydHNfdGxzKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWlmIChnZXRfdXNlcihpZHgsICZ1c2VyX2Rlc2MtPmVudHJ5X251bWJlcikpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gZ2V0X3Rsc19lbnRyeShjdXJyZW50LCAmaW5mbywgaWR4KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoY29weV90b191c2VyKHVzZXJfZGVzYywgJmluZm8sIHNpemVvZihpbmZvKSkpCisJCXJldCA9IC1FRkFVTFQ7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUGVyZm9ybSBnZXRfdGhyZWFkX2FyZWEgb24gYmVoYWxmIG9mIHRoZSB0cmFjZWQgY2hpbGQuCisgKi8KK2ludCBwdHJhY2VfZ2V0X3RocmVhZF9hcmVhKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBpZHgsCisJCXN0cnVjdCB1c2VyX2Rlc2MgX191c2VyICp1c2VyX2Rlc2MpCit7CisJc3RydWN0IHVzZXJfZGVzYyBpbmZvOworCWludCByZXQ7CisKKwlpZiAoIWhvc3Rfc3VwcG9ydHNfdGxzKQorCQlyZXR1cm4gLUVJTzsKKworCXJldCA9IGdldF90bHNfZW50cnkoY2hpbGQsICZpbmZvLCBpZHgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlcl9kZXNjLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJcmV0ID0gLUVGQVVMVDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIFhYWDogVGhpcyBwYXJ0IGlzIHByb2JhYmx5IGNvbW1vbiB0byBpMzg2IGFuZCB4ODYtNjQuIERvbid0IGNyZWF0ZSBhIGNvbW1vbgorICogZmlsZSBmb3Igbm93LCBkbyB0aGF0IHdoZW4gaW1wbGVtZW50aW5nIHg4Ni02NCBzdXBwb3J0LiovCitzdGF0aWMgaW50IF9faW5pdCBfX3NldHVwX2hvc3Rfc3VwcG9ydHNfdGxzKHZvaWQpIHsKKwljaGVja19ob3N0X3N1cHBvcnRzX3RscygmaG9zdF9zdXBwb3J0c190bHMsICZob3N0X2dkdF9lbnRyeV90bHNfbWluKTsKKwlpZiAoaG9zdF9zdXBwb3J0c190bHMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSG9zdCBUTFMgc3VwcG9ydCBkZXRlY3RlZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkIGhvc3QgdHlwZTogIik7CisJCXN3aXRjaCAoaG9zdF9nZHRfZW50cnlfdGxzX21pbikgeworCQkJY2FzZSBHRFRfRU5UUllfVExTX01JTl9JMzg2OgorCQkJCXByaW50aygiaTM4NlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEdEVF9FTlRSWV9UTFNfTUlOX1g4Nl82NDoKKwkJCQlwcmludGsoIng4Nl82NFxuIik7CisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICIgIEhvc3QgVExTIHN1cHBvcnQgTk9UIGRldGVjdGVkISAiCisJCQkJIlRMUyBzdXBwb3J0IGluc2lkZSBVTUwgd2lsbCBub3Qgd29ya1xuIik7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwoX19zZXR1cF9ob3N0X3N1cHBvcnRzX3Rscyk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKaW5kZXggYTM1MTA5MS4uYzE5Nzk0ZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQpAQCAtNCwzMSArNCwyOCBAQAogIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAjCiAKLSNYWFg6IHdoeSBpbnRvIGxpYi15PwotbGliLXkgPSBiaXRvcHMubyBidWdzLm8gY3N1bS1wYXJ0aWFsLm8gZGVsYXkubyBmYXVsdC5vIGxkdC5vIG1lbS5vIG1lbWNweS5vIFwKLQlwdHJhY2UubyBwdHJhY2VfdXNlci5vIHNpZ2NvbnRleHQubyBzaWduYWwubyBzeXNjYWxscy5vIFwKLQlzeXNjYWxsX3RhYmxlLm8gc3lzcnEubyB0aHVuay5vCi1saWItJChDT05GSUdfTU9ERV9TS0FTKSArPSBzdHViLm8gc3R1Yl9zZWd2Lm8KK29iai15ID0gYnVncy5vIGRlbGF5Lm8gZmF1bHQubyBsZHQubyBtZW0ubyBwdHJhY2UubyBwdHJhY2VfdXNlci5vIFwKKwlzaWdjb250ZXh0Lm8gc2lnbmFsLm8gc3lzY2FsbHMubyBzeXNjYWxsX3RhYmxlLm8gc3lzcnEubyBrc3ltcy5vIFwKKwl0bHMubwogCi1vYmoteSA6PSBrc3ltcy5vCi1vYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8gdW1fbW9kdWxlLm8KK29iai0kKENPTkZJR19NT0RFX1NLQVMpICs9IHN0dWIubyBzdHViX3NlZ3Yubworb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IHVtX21vZHVsZS5vCiAKLVVTRVJfT0JKUyA6PSBwdHJhY2VfdXNlci5vIHNpZ2NvbnRleHQubyBzdHViX3NlZ3Yubworc3ViYXJjaC1vYmoteSA9IGxpYi9iaXRvcHMubyBsaWIvY3N1bS1wYXJ0aWFsLm8gbGliL21lbWNweS5vIGxpYi90aHVuay5vCitzdWJhcmNoLW9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrZXJuZWwvbW9kdWxlLm8KIAotU1lNTElOS1MgPSBiaXRvcHMuYyBjc3VtLWNvcHkuUyBjc3VtLXBhcnRpYWwuYyBjc3VtLXdyYXBwZXJzLmMgbGR0LmMgbWVtY3B5LlMgXAotCXRodW5rLlMgbW9kdWxlLmMKK2xkdC15ID0gLi4vc3lzLWkzODYvbGR0Lm8KKworVVNFUl9PQkpTIDo9IHB0cmFjZV91c2VyLm8gc2lnY29udGV4dC5vCisKK1VTRVJfT0JKUyArPSB1c2VyLW9mZnNldHMucworZXh0cmEteSArPSB1c2VyLW9mZnNldHMucworCitleHRyYS0kKENPTkZJR19NT0RFX1RUKSArPSB1bm1hcC5vCisKK1VOUFJPRklMRV9PQkpTIDo9IHN0dWJfc2Vndi5vCitDRkxBR1Nfc3R1Yl9zZWd2Lm8gOj0gJChDRkxBR1NfTk9fSEFSREVOSU5HKQogCiBpbmNsdWRlIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwogCi1iaXRvcHMuYy1kaXIgPSBsaWIKLWNzdW0tY29weS5TLWRpciA9IGxpYgotY3N1bS1wYXJ0aWFsLmMtZGlyID0gbGliCi1jc3VtLXdyYXBwZXJzLmMtZGlyID0gbGliCi1sZHQuYy1kaXIgPSAvYXJjaC91bS9zeXMtaTM4NgotbWVtY3B5LlMtZGlyID0gbGliCi10aHVuay5TLWRpciA9IGxpYgotbW9kdWxlLmMtZGlyID0ga2VybmVsCi0KLSQob2JqKS9zdHViX3NlZ3YubzogX2NfZmxhZ3MgPSAkKGNhbGwgdW5wcm9maWxlLCQoQ0ZMQUdTKSkKLQotaW5jbHVkZSBhcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUudW5tYXAKKyQob2JqKS91bm1hcC4lOiBfY19mbGFncyA9ICQoY2FsbCB1bnByb2ZpbGUsJChDRkxBR1MpKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jIGIvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jCmluZGV4IGU3NWM0ZTEuLjllZGYxMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJza2FzLmgiCiAKIHN0YXRpYyBpbnQgY29weV9zY19mcm9tX3VzZXJfc2thcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdjb250ZXh0ICpmcm9tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpmcm9tKQogewogICAgICAgIGludCBlcnIgPSAwOwogCkBAIC01NCw3ICs1NCw4IEBACiAgICAgICAgcmV0dXJuKGVycik7CiB9CiAKLWludCBjb3B5X3NjX3RvX3VzZXJfc2thcyhzdHJ1Y3Qgc2lnY29udGV4dCAqdG8sIHN0cnVjdCBfZnBzdGF0ZSAqdG9fZnAsCitpbnQgY29weV9zY190b191c2VyX3NrYXMoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICp0bywKKwkJCSBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICp0b19mcCwKIAkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBtYXNrLAogCQkJIHVuc2lnbmVkIGxvbmcgc3ApCiB7CkBAIC0xMDYsMTAgKzEwNywxMSBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU9ERV9UVAotaW50IGNvcHlfc2NfZnJvbV91c2VyX3R0KHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IHNpZ2NvbnRleHQgKmZyb20sCitpbnQgY29weV9zY19mcm9tX3VzZXJfdHQoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKmZyb20sCiAJCQkgaW50IGZwc2l6ZSkKIHsKLQlzdHJ1Y3QgX2Zwc3RhdGUgKnRvX2ZwLCAqZnJvbV9mcDsKKwlzdHJ1Y3QgX2Zwc3RhdGUgKnRvX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZyb21fZnA7CiAJdW5zaWduZWQgbG9uZyBzaWdzOwogCWludCBlcnI7CiAKQEAgLTEyNCwyMCArMTI2LDIxIEBACiAJcmV0dXJuKGVycik7CiB9CiAKLWludCBjb3B5X3NjX3RvX3VzZXJfdHQoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgKmZwLAoraW50IGNvcHlfc2NfdG9fdXNlcl90dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcCwKIAkJICAgICAgIHN0cnVjdCBzaWdjb250ZXh0ICpmcm9tLCBpbnQgZnBzaXplLCB1bnNpZ25lZCBsb25nIHNwKQogewotCXN0cnVjdCBfZnBzdGF0ZSAqdG9fZnAsICpmcm9tX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKnRvX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSAqZnJvbV9mcDsKIAlpbnQgZXJyOwogCi0JdG9fZnAgPSAoZnAgPyBmcCA6IChzdHJ1Y3QgX2Zwc3RhdGUgKikgKHRvICsgMSkpOworCXRvX2ZwID0gKGZwID8gZnAgOiAoc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqKSAodG8gKyAxKSk7CiAJZnJvbV9mcCA9IGZyb20tPmZwc3RhdGU7CiAJZXJyID0gY29weV90b191c2VyKHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7CiAJLyogVGhlIFNQIGluIHRoZSBzaWdjb250ZXh0IGlzIHRoZSB1cGRhdGVkIG9uZSBmb3IgdGhlIHNpZ25hbAogCSAqIGRlbGl2ZXJ5LiAgVGhlIHNwIHBhc3NlZCBpbiBpcyB0aGUgb3JpZ2luYWwsIGFuZCB0aGlzIG5lZWRzCiAJICogdG8gYmUgcmVzdG9yZWQsIHNvIHdlIHN0aWNrIGl0IGluIHNlcGFyYXRlbHkuCiAJICovCi0JZXJyIHw9IGNvcHlfdG9fdXNlcigmU0NfU1AodG8pLCBzcCwgc2l6ZW9mKHNwKSk7CisJZXJyIHw9IGNvcHlfdG9fdXNlcigmU0NfU1AodG8pLCAmc3AsIHNpemVvZihzcCkpOwogCiAJaWYoZnJvbV9mcCAhPSBOVUxMKXsKIAkJZXJyIHw9IGNvcHlfdG9fdXNlcigmdG8tPmZwc3RhdGUsICZ0b19mcCwgc2l6ZW9mKHRvLT5mcHN0YXRlKSk7CkBAIC0xNTgsNyArMTYxLDggQEAKICAgICAgICByZXR1cm4ocmV0KTsKIH0KIAotc3RhdGljIGludCBjb3B5X3NjX3RvX3VzZXIoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgKmZwLAorc3RhdGljIGludCBjb3B5X3NjX3RvX3VzZXIoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICp0bywKKwkJCSAgIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwLAogCQkJICAgc3RydWN0IHB0X3JlZ3MgKmZyb20sIHVuc2lnbmVkIGxvbmcgbWFzaywKIAkJCSAgIHVuc2lnbmVkIGxvbmcgc3ApCiB7CkBAIC0xNjksNyArMTczLDcgQEAKIAogc3RydWN0IHJ0X3NpZ2ZyYW1lCiB7Ci0gICAgICAgY2hhciAqcHJldGNvZGU7CisgICAgICAgY2hhciBfX3VzZXIgKnByZXRjb2RlOwogICAgICAgIHN0cnVjdCB1Y29udGV4dCB1YzsKICAgICAgICBzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwogfTsKQEAgLTE4OCw3ICsxOTIsNyBAQAogCiAJZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqKQogCQlyb3VuZF9kb3duKHN0YWNrX3RvcCAtIHNpemVvZihzdHJ1Y3QgcnRfc2lnZnJhbWUpLCAxNikgLSA4OwotICAgICAgICBmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgKikgKCh1bnNpZ25lZCBsb25nKSBmcmFtZSAtIDEyOCk7CisgICAgICAgIGZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKikgKCh1bnNpZ25lZCBsb25nKSBmcmFtZSAtIDEyOCk7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZwLCBzaXplb2Yoc3RydWN0IF9mcHN0YXRlKSkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N0dWJfc2Vndi5jIGIvYXJjaC91bS9zeXMteDg2XzY0L3N0dWJfc2Vndi5jCmluZGV4IGEyNzA5OTUuLjFjOTY3MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zdHViX3NlZ3YuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3R1Yl9zZWd2LmMKQEAgLTMzLDcgKzMzLDcgQEAKIAlzdHJ1Y3QgdWNvbnRleHQgKnVjOwogICAgICAgICBpbnQgcGlkOwogCi0JX19hc21fXygibW92cSAlJXJkeCwgJTAiIDogIj1nIiAodWMpIDopOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcmR4LCAlMCIgOiAiPWciICh1YykgOik7CiAJR0VUX0ZBVUxUSU5GT19GUk9NX1NDKCooKHN0cnVjdCBmYXVsdGluZm8gKikgVU1MX0NPTkZJR19TVFVCX0RBVEEpLAogCQkJICAgICAgJnVjLT51Y19tY29udGV4dCk7CiAKQEAgLTQ0LDggKzQ0LDggQEAKIAkgKiB0aGUgc2lnbmFsIGZyYW1lLiAgU28sIHdlIHVzZSB0aGUgdWNvbnRleHQgcG9pbnRlciwgd2hpY2ggd2Uga25vdwogCSAqIGFscmVhZHksIHRvIGdldCB0aGUgc2lnbmFsIGZyYW1lIHBvaW50ZXIsIGFuZCBhZGQgOCB0byB0aGF0LgogCSAqLwotCV9fYXNtX18oIm1vdnEgJTAsICUlcnNwOyBtb3ZxICUxLCAlJXJheCA7IHN5c2NhbGwiOiA6Ci0JCSJnIiAoKHVuc2lnbmVkIGxvbmcpIGNvbnRhaW5lcl9vZih1Yywgc3RydWN0IHJ0X3NpZ2ZyYW1lLCAKLQkJCQkJCSAgdWMpICsgOCksCi0gICAgICAgICAgICAgICAgImciIChfX05SX3J0X3NpZ3JldHVybikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUwLCAlJXJzcDsgbW92cSAlMSwgJSVyYXggOyBzeXNjYWxsIjogOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZyIgKCh1bnNpZ25lZCBsb25nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih1Yywgc3RydWN0IHJ0X3NpZ2ZyYW1lLCB1YykgKyA4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImciIChfX05SX3J0X3NpZ3JldHVybikpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxzLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwppbmRleCA2YWNlZTVjLi42ZmNlOWY0IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwpAQCAtNDUsNyArNDUsNyBAQAogCWNhc2UgQVJDSF9HRVRfR1M6CiAJCXJldCA9IGFyY2hfcHJjdGwoY29kZSwgKHVuc2lnbmVkIGxvbmcpICZ0bXApOwogCQlpZighcmV0KQotCQkJcmV0ID0gcHV0X3VzZXIodG1wLCAmYWRkcik7CisJCQlyZXQgPSBwdXRfdXNlcih0bXAsIChsb25nIF9fdXNlciAqKWFkZHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3Rscy5jIGIvYXJjaC91bS9zeXMteDg2XzY0L3Rscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMWJmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvdGxzLmMKQEAgLTAsMCArMSwxNCBAQAorI2luY2x1ZGUgImxpbnV4L3NjaGVkLmgiCisKK3ZvaWQgZGVidWdfYXJjaF9mb3JjZV9sb2FkX1RMUyh2b2lkKQoreworfQorCit2b2lkIGNsZWFyX2ZsdXNoZWRfdGxzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKK30KKworaW50IGFyY2hfY29weV90bHMoc3RydWN0IHRhc2tfc3RydWN0ICp0KQoreworICAgICAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jIGIvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKaW5kZXggOGZmYzI5Yy4uNmJjZmNmZSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKQEAgLTQzLDcgKzQzLDYgQEAKIEVYUE9SVF9TWU1CT0wgKHN0cmNocik7CiBFWFBPUlRfU1lNQk9MIChzdHJsZW4pOwogRVhQT1JUX1NZTUJPTCAoc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MIChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0wgKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTCAoc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0wgKG1lbXNldCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9LY29uZmlnIGIvYXJjaC94ODZfNjQvS2NvbmZpZwppbmRleCA0MzEwYjRhLi42NTI3YTM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9LY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L0tjb25maWcKQEAgLTEzNiw2ICsxMzYsMTEgQEAKIAlkZWZhdWx0ICI3IiBpZiBHRU5FUklDX0NQVSB8fCBNUFNDCiAJZGVmYXVsdCAiNiIgaWYgTUs4CiAKK2NvbmZpZyBYODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTCisJaW50CisJZGVmYXVsdCAiNDA5NiIgaWYgWDg2X1ZTTVAKKwlkZWZhdWx0IFg4Nl9MMV9DQUNIRV9CWVRFUyBpZiAhWDg2X1ZTTVAKKwogY29uZmlnIFg4Nl9UU0MKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0yODMsMTIgKzI4OCwxOCBAQAogCSBOb3J0aGJyaWRnZSBvZiBPcHRlcm9uLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgWDg2XzY0X0FDUElfTlVNQQogCSBpbnN0ZWFkLCB3aGljaCBhbHNvIHRha2VzIHByaW9yaXR5IGlmIGJvdGggYXJlIGNvbXBpbGVkIGluLiAgIAogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICI2IgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiAjIER1bW15IENPTkZJRyBvcHRpb24gdG8gc2VsZWN0IEFDUElfTlVNQSBmcm9tIGRyaXZlcnMvYWNwaS9LY29uZmlnLgogCiBjb25maWcgWDg2XzY0X0FDUElfTlVNQQogICAgICAgIGJvb2wgIkFDUEkgTlVNQSBkZXRlY3Rpb24iCiAgICAgICAgZGVwZW5kcyBvbiBOVU1BCiAgICAgICAgc2VsZWN0IEFDUEkgCisJc2VsZWN0IFBDSQogICAgICAgIHNlbGVjdCBBQ1BJX05VTUEKICAgICAgICBkZWZhdWx0IHkKICAgICAgICBoZWxwCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L01ha2VmaWxlCmluZGV4IDU4NWZkNGEuLmU1NzNlMmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L01ha2VmaWxlCkBAIC0yNCwzNyArMjQsMzcgQEAKIExERkxBR1MJCTo9IC1tIGVsZl94ODZfNjQKIE9CSkNPUFlGTEFHUwk6PSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVMKIExERkxBR1Nfdm1saW51eCA6PQotCiBDSEVDS0ZMQUdTICAgICAgKz0gLURfX3g4Nl82NF9fIC1tNjQKIAorY2ZsYWdzLXkJOj0KIGNmbGFncy0kKENPTkZJR19NSzgpICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWs4KQogY2ZsYWdzLSQoQ09ORklHX01QU0MpICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW5vY29uYSkKIGNmbGFncy0kKENPTkZJR19HRU5FUklDX0NQVSkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9Z2VuZXJpYykKLUNGTEFHUyArPSAkKGNmbGFncy15KQogCi1DRkxBR1MgKz0gLW02NAotQ0ZMQUdTICs9IC1tbm8tcmVkLXpvbmUKLUNGTEFHUyArPSAtbWNtb2RlbD1rZXJuZWwKLUNGTEFHUyArPSAtcGlwZQorY2ZsYWdzLXkgKz0gLW02NAorY2ZsYWdzLXkgKz0gLW1uby1yZWQtem9uZQorY2ZsYWdzLXkgKz0gLW1jbW9kZWw9a2VybmVsCitjZmxhZ3MteSArPSAtcGlwZQogY2ZsYWdzLSQoQ09ORklHX1JFT1JERVIpICs9IC1mZnVuY3Rpb24tc2VjdGlvbnMKICMgdGhpcyBtYWtlcyByZWFkaW5nIGFzc2VtYmx5IHNvdXJjZSBlYXNpZXIsIGJ1dCBwcm9kdWNlcyB3b3JzZSBjb2RlCiAjIGFjdHVhbGx5IGl0IG1ha2VzIHRoZSBrZXJuZWwgc21hbGxlciB0b28uCi1DRkxBR1MgKz0gLWZuby1yZW9yZGVyLWJsb2NrcwkKLUNGTEFHUyArPSAtV25vLXNpZ24tY29tcGFyZQorY2ZsYWdzLXkgKz0gLWZuby1yZW9yZGVyLWJsb2NrcworY2ZsYWdzLXkgKz0gLVduby1zaWduLWNvbXBhcmUKIGlmbmVxICgkKENPTkZJR19VTldJTkRfSU5GTykseSkKLUNGTEFHUyArPSAtZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCitjZmxhZ3MteSArPSAtZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCiBlbmRpZgogaWZuZXEgKCQoQ09ORklHX0RFQlVHX0lORk8pLHkpCiAjIC1md2ViIHNocmlua3MgdGhlIGtlcm5lbCBhIGJpdCwgYnV0IHRoZSBkaWZmZXJlbmNlIGlzIHZlcnkgc21hbGwKICMgaXQgYWxzbyBtZXNzZXMgdXAgZGVidWdnaW5nLCBzbyBkb24ndCB1c2UgaXQgZm9yIG5vdy4KLSNDRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZndlYikKKyNjZmxhZ3MteSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1md2ViKQogZW5kaWYKICMgLWZ1bml0LWF0LWEtdGltZSBzaHJpbmtzIHRoZSBrZXJuZWwgLnRleHQgY29uc2lkZXJhYmx5CiAjIHVuZm9ydHVuYXRlbHkgaXQgbWFrZXMgcmVhZGluZyBvb3BzZXMgaGFyZGVyLgotQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLWZ1bml0LWF0LWEtdGltZSkKK2NmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLWZ1bml0LWF0LWEtdGltZSkKICMgcHJldmVudCBnY2MgZnJvbSBnZW5lcmF0aW5nIGFueSBGUCBjb2RlIGJ5IG1pc3Rha2UKLUNGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tc3NlIC1tbm8tbW14IC1tbm8tc3NlMiAtbW5vLTNkbm93LCkKK2NmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1zc2UgLW1uby1tbXggLW1uby1zc2UyIC1tbm8tM2Rub3csKQogCitDRkxBR1MgKz0gJChjZmxhZ3MteSkKIEFGTEFHUyArPSAtbTY0CiAKIGhlYWQteSA6PSBhcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5vIGFyY2gveDg2XzY0L2tlcm5lbC9oZWFkNjQubyBhcmNoL3g4Nl82NC9rZXJuZWwvaW5pdF90YXNrLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2Jvb3QvdmlkZW8uUyBiL2FyY2gveDg2XzY0L2Jvb3QvdmlkZW8uUwppbmRleCAwNTg3NDc3Li4zMjMyN2JiIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9ib290L3ZpZGVvLlMKKysrIGIvYXJjaC94ODZfNjQvYm9vdC92aWRlby5TCkBAIC05Nyw2ICs5Nyw3IEBACiAjZGVmaW5lIFBBUkFNX1ZFU0FQTV9PRkYJMHgzMAogI2RlZmluZSBQQVJBTV9MRkJfUEFHRVMJCTB4MzIKICNkZWZpbmUgUEFSQU1fVkVTQV9BVFRSSUIJMHgzNAorI2RlZmluZSBQQVJBTV9DQVBBQklMSVRJRVMJMHgzNgogCiAvKiBEZWZpbmUgRE9fU1RPUkUgYWNjb3JkaW5nIHRvIENPTkZJR19WSURFT19SRVRBSU4gKi8KICNpZmRlZiBDT05GSUdfVklERU9fUkVUQUlOCkBAIC0yMzMsNiArMjM0LDEwIEBACiAJbW92dwkxOCglZGkpLCAlYXgKIAltb3ZsCSVlYXgsICVmczooUEFSQU1fTEZCX1NJWkUpCiAKKyMgc3RvcmUgbW9kZSBjYXBhYmlsaXRpZXMKKwltb3ZsIDEwKCVkaSksICVlYXgKKwltb3ZsICVlYXgsICVmczooUEFSQU1fQ0FQQUJJTElUSUVTKQorCiAjIHN3aXRjaGluZyB0aGUgREFDIHRvIDgtYml0IGlzIGZvciA8PSA4IGJwcCBvbmx5CiAJbW92dwklZnM6KFBBUkFNX0xGQl9ERVBUSCksICVheAogCWNtcHcJJDgsICVheApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvZGVmY29uZmlnIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCmluZGV4IDU2NmVjYzkuLjY5ZGIwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2RlZmNvbmZpZworKysgYi9hcmNoL3g4Nl82NC9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtZ2l0OQotIyBTYXQgTWFyIDI1IDE1OjE4OjQwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzEtZ2l0MTEKKyMgU3VuIEFwciAxNiAwNzoyMjozNiAyMDA2CiAjCiBDT05GSUdfWDg2XzY0PXkKIENPTkZJR182NEJJVD15CkBAIC05LDYgKzksNyBAQAogQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CiBDT05GSUdfTU1VPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19YODZfQ01QWENIRz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTU1LDExICs1Niw4IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CitDT05GSUdfRE9VQkxFRkFVTFQ9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTcwLDcgKzY4LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKQEAgLTgxLDYgKzc4LDcgQEAKICMKIENPTkZJR19MQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwNSw2ICsxMDMsNyBAQAogQ09ORklHX0dFTkVSSUNfQ1BVPXkKIENPTkZJR19YODZfTDFfQ0FDSEVfQllURVM9MTI4CiBDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUPTcKK0NPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTPTEyOAogQ09ORklHX1g4Nl9UU0M9eQogQ09ORklHX1g4Nl9HT09EX0FQSUM9eQogIyBDT05GSUdfTUlDUk9DT0RFIGlzIG5vdCBzZXQKQEAgLTExNiwxMiArMTE1LDE0IEBACiBDT05GSUdfTVRSUj15CiBDT05GSUdfU01QPXkKIENPTkZJR19TQ0hFRF9TTVQ9eQorQ09ORklHX1NDSEVEX01DPXkKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9CS0w9eQogQ09ORklHX05VTUE9eQogQ09ORklHX0s4X05VTUE9eQorQ09ORklHX05PREVTX1NISUZUPTYKIENPTkZJR19YODZfNjRfQUNQSV9OVU1BPXkKIENPTkZJR19OVU1BX0VNVT15CiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKQEAgLTEzOCw2ICsxMzksNyBAQAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEPXkKK0NPTkZJR19PVVRfT0ZfTElORV9QRk5fVE9fUEFHRT15CiBDT05GSUdfTlJfQ1BVUz0zMgogQ09ORklHX0hPVFBMVUdfQ1BVPXkKIENPTkZJR19IUEVUX1RJTUVSPXkKQEAgLTI4OSw2ICsyOTEsNyBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMzAwLDYgKzMwMyw3IEBACiAjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldApAQCAtNTQyLDcgKzU0Niw2IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CkBAIC03MDQsNyArNzA3LDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyBpcyBub3Qgc2V0CiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTc5MSw3ICs3OTMsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0FDUEkgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtOTIxLDYgKzkyMyw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC05MzIsNiArOTM1LDggQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfVkdBX0NPTlNPTEU9eQorQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0s9eQorQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0tfU0laRT0yNTYKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIAogIwpAQCAtMTA0MSw5ICsxMDQ2LDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTA1OCwxNSArMTA2MSw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMTE4LDkgKzExMTIsMjMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19JUEFUSF9DT1JFIGlzIG5vdCBzZXQKIAogIwogIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKQEAgLTExMjgsNiArMTEzNiwxMSBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpcm13YXJlIERyaXZlcnMKICMKICMgQ09ORklHX0VERCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL01ha2VmaWxlIGIvYXJjaC94ODZfNjQvaWEzMi9NYWtlZmlsZQppbmRleCA5MjllNmIwLi5lOTI2M2I0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvTWFrZWZpbGUKQEAgLTI3LDUgKzI3LDUgQEAKICQob2JqKS92c3lzY2FsbC0lLnNvOiAkKHNyYykvdnN5c2NhbGwubGRzICQob2JqKS92c3lzY2FsbC0lLm8gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxzeXNjYWxsKQogCi1BRkxBR1NfdnN5c2NhbGwtc3lzZW50ZXIubyA9IC1tMzIKLUFGTEFHU192c3lzY2FsbC1zeXNjYWxsLm8gPSAtbTMyCitBRkxBR1NfdnN5c2NhbGwtc3lzZW50ZXIubyA9IC1tMzIgLVdhLC0zMgorQUZMQUdTX3ZzeXNjYWxsLXN5c2NhbGwubyA9IC1tMzIgLVdhLC0zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jCmluZGV4IGU3NzYxMzkuLjkyNmM0NzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMKQEAgLTMzOSw3ICszMzksNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJaW50IGksIHJldDsKIAotCXN0YWNrX2Jhc2UgPSBJQTMyX1NUQUNLX1RPUCAtIE1BWF9BUkdfUEFHRVMgKiBQQUdFX1NJWkU7CisJc3RhY2tfYmFzZSA9IHN0YWNrX3RvcCAtIE1BWF9BUkdfUEFHRVMgKiBQQUdFX1NJWkU7CiAJbW0tPmFyZ19zdGFydCA9IGJwcm0tPnAgKyBzdGFja19iYXNlOwogCiAJYnBybS0+cCArPSBzdGFja19iYXNlOwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAJewogCQltcG50LT52bV9tbSA9IG1tOwogCQltcG50LT52bV9zdGFydCA9IFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKSBicHJtLT5wOwotCQltcG50LT52bV9lbmQgPSBJQTMyX1NUQUNLX1RPUDsKKwkJbXBudC0+dm1fZW5kID0gc3RhY2tfdG9wOwogCQlpZiAoZXhlY3V0YWJsZV9zdGFjayA9PSBFWFNUQUNLX0VOQUJMRV9YKQogCQkJbXBudC0+dm1fZmxhZ3MgPSBWTV9TVEFDS19GTEFHUyB8ICBWTV9FWEVDOwogCQllbHNlIGlmIChleGVjdXRhYmxlX3N0YWNrID09IEVYU1RBQ0tfRElTQUJMRV9YKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggMzViMmZhYy4uNWE5MmZlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsMzIuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKKyNkZWZpbmUgSUEzMl9OUl9zeXNjYWxscyAoKGlhMzJfc3lzY2FsbF9lbmQgLSBpYTMyX3N5c19jYWxsX3RhYmxlKS84KQorCiAJLm1hY3JvIElBMzJfQVJHX0ZJWFVQIG5vZWJwPTAKIAltb3ZsCSVlZGksJXI4ZAogCS5pZiBcbm9lYnAKQEAgLTEwOSw4ICsxMTEsOCBAQAogCUNGSV9SRU1FTUJFUl9TVEFURQogCWpueiAgc3lzZW50ZXJfdHJhY2VzeXMKIHN5c2VudGVyX2RvX2NhbGw6CQotCWNtcGwJJChJQTMyX05SX3N5c2NhbGxzKSwlZWF4Ci0JamFlCWlhMzJfYmFkc3lzCisJY21wbAkkKElBMzJfTlJfc3lzY2FsbHMtMSksJWVheAorCWphCWlhMzJfYmFkc3lzCiAJSUEzMl9BUkdfRklYVVAgMQogCWNhbGwJKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkKIAltb3ZxCSVyYXgsUkFYLUFSR09GRlNFVCglcnNwKQpAQCAtMjEwLDggKzIxMiw4IEBACiAJQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJam56ICAgY3N0YXJfdHJhY2VzeXMKIGNzdGFyX2RvX2NhbGw6CQotCWNtcGwgJElBMzJfTlJfc3lzY2FsbHMsJWVheAotCWphZSAgaWEzMl9iYWRzeXMKKwljbXBsICRJQTMyX05SX3N5c2NhbGxzLTEsJWVheAorCWphICBpYTMyX2JhZHN5cwogCUlBMzJfQVJHX0ZJWFVQIDEKIAljYWxsICppYTMyX3N5c19jYWxsX3RhYmxlKCwlcmF4LDgpCiAJbW92cSAlcmF4LFJBWC1BUkdPRkZTRVQoJXJzcCkKQEAgLTI5Niw4ICsyOTgsOCBAQAogCXRlc3RsICQoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NFQ0NPTVApLHRocmVhZGluZm9fZmxhZ3MoJXIxMCkKIAlqbnogaWEzMl90cmFjZXN5cwogaWEzMl9kb19zeXNjYWxsOgkKLQljbXBsICQoSUEzMl9OUl9zeXNjYWxscyksJWVheAotCWphZSAgaWEzMl9iYWRzeXMKKwljbXBsICQoSUEzMl9OUl9zeXNjYWxscy0xKSwlZWF4CisJamEgIGlhMzJfYmFkc3lzCiAJSUEzMl9BUkdfRklYVVAKIAljYWxsICppYTMyX3N5c19jYWxsX3RhYmxlKCwlcmF4LDgpICMgeHh4OiByaXAgcmVsYXRpdmUKIGlhMzJfc3lzcmV0OgpAQCAtNjg1LDEyICs2ODcsMTMgQEAKIAkucXVhZCBzeXNfcmVhZGxpbmthdAkJLyogMzA1ICovCiAJLnF1YWQgc3lzX2ZjaG1vZGF0CiAJLnF1YWQgc3lzX2ZhY2Nlc3NhdAotCS5xdWFkIHN5c19uaV9zeXNjYWxsCQkvKiBwc2VsZWN0NiBmb3Igbm93ICovCi0JLnF1YWQgc3lzX25pX3N5c2NhbGwJCS8qIHBwb2xsIGZvciBub3cgKi8KKwkucXVhZCBxdWlldF9uaV9zeXNjYWxsCQkvKiBwc2VsZWN0NiBmb3Igbm93ICovCisJLnF1YWQgcXVpZXRfbmlfc3lzY2FsbAkJLyogcHBvbGwgZm9yIG5vdyAqLwogCS5xdWFkIHN5c191bnNoYXJlCQkvKiAzMTAgKi8KIAkucXVhZCBjb21wYXRfc3lzX3NldF9yb2J1c3RfbGlzdAogCS5xdWFkIGNvbXBhdF9zeXNfZ2V0X3JvYnVzdF9saXN0CisJLnF1YWQgc3lzX3NwbGljZQorCS5xdWFkIHN5c19zeW5jX2ZpbGVfcmFuZ2UKKwkucXVhZCBzeXNfdGVlCisJLnF1YWQgY29tcGF0X3N5c192bXNwbGljZQogaWEzMl9zeXNjYWxsX2VuZDoJCQotCS5yZXB0IElBMzJfTlJfc3lzY2FsbHMtKGlhMzJfc3lzY2FsbF9lbmQtaWEzMl9zeXNfY2FsbF90YWJsZSkvOAotCQkucXVhZCBuaV9zeXNjYWxsCi0JLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvdnN5c2NhbGwtc2lncmV0dXJuLlMgYi9hcmNoL3g4Nl82NC9pYTMyL3ZzeXNjYWxsLXNpZ3JldHVybi5TCmluZGV4IGQ5MDMyMWYuLjEzODQzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvdnN5c2NhbGwtc2lncmV0dXJuLlMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi92c3lzY2FsbC1zaWdyZXR1cm4uUwpAQCAtMzIsOSArMzIsMjggQEAKIAkuc2l6ZSBfX2tlcm5lbF9ydF9zaWdyZXR1cm4sLi0uTFNUQVJUX3J0X3NpZ3JldHVybgogCiAJLnNlY3Rpb24gLmVoX2ZyYW1lLCJhIixAcHJvZ2JpdHMKKy5MU1RBUlRGUkFNRVM6CisgICAgICAgIC5sb25nIC5MRU5EQ0lFUy0uTFNUQVJUQ0lFUworLkxTVEFSVENJRVM6CisJLmxvbmcgMAkJCS8qIENJRSBJRCAqLworCS5ieXRlIDEJCQkvKiBWZXJzaW9uIG51bWJlciAqLworCS5zdHJpbmcgInpSUyIJCS8qIE5VTC10ZXJtaW5hdGVkIGF1Z21lbnRhdGlvbiBzdHJpbmcgKi8KKwkudWxlYjEyOCAxCQkvKiBDb2RlIGFsaWdubWVudCBmYWN0b3IgKi8KKwkuc2xlYjEyOCAtNAkJLyogRGF0YSBhbGlnbm1lbnQgZmFjdG9yICovCisJLmJ5dGUgOAkJCS8qIFJldHVybiBhZGRyZXNzIHJlZ2lzdGVyIGNvbHVtbiAqLworCS51bGViMTI4IDEJCS8qIEF1Z21lbnRhdGlvbiB2YWx1ZSBsZW5ndGggKi8KKwkuYnl0ZSAweDFiCQkvKiBEV19FSF9QRV9wY3JlbHxEV19FSF9QRV9zZGF0YTQuICovCisJLmJ5dGUgMHgwYwkJLyogRFdfQ0ZBX2RlZl9jZmEgKi8KKwkudWxlYjEyOCA0CisJLnVsZWIxMjggNAorCS5ieXRlIDB4ODgJCS8qIERXX0NGQV9vZmZzZXQsIGNvbHVtbiAweDggKi8KKwkudWxlYjEyOCAxCisJLmFsaWduIDQKKy5MRU5EQ0lFUzoKKwogCS5sb25nIC5MRU5ERkRFMi0uTFNUQVJURkRFMgkvKiBMZW5ndGggRkRFICovCiAuTFNUQVJURkRFMjoKLQkubG9uZyAuTFNUQVJURkRFMi0uTFNUQVJURlJBTUUJLyogQ0lFIHBvaW50ZXIgKi8KKwkubG9uZyAuTFNUQVJURkRFMi0uTFNUQVJURlJBTUVTCS8qIENJRSBwb2ludGVyICovCiAJLyogSEFDSzogVGhlIGR3YXJmMiB1bndpbmQgcm91dGluZXMgd2lsbCBzdWJ0cmFjdCAxIGZyb20gdGhlCiAJICAgcmV0dXJuIGFkZHJlc3MgdG8gZ2V0IGFuIGFkZHJlc3MgaW4gdGhlIG1pZGRsZSBvZiB0aGUKIAkgICBwcmVzdW1lZCBjYWxsIGluc3RydWN0aW9uLiAgU2luY2Ugd2UgZGlkbid0IGdldCBoZXJlIHZpYQpAQCAtOTcsNyArMTE2LDcgQEAKIAogCS5sb25nIC5MRU5ERkRFMy0uTFNUQVJURkRFMwkvKiBMZW5ndGggRkRFICovCiAuTFNUQVJURkRFMzoKLQkubG9uZyAuTFNUQVJURkRFMy0uTFNUQVJURlJBTUUJLyogQ0lFIHBvaW50ZXIgKi8KKwkubG9uZyAuTFNUQVJURkRFMy0uTFNUQVJURlJBTUVTCS8qIENJRSBwb2ludGVyICovCiAJLyogSEFDSzogU2VlIGFib3ZlIHdydCB1bndpbmQgbGlicmFyeSBhc3N1bXB0aW9ucy4gICovCiAJLmxvbmcgLkxTVEFSVF9ydF9zaWdyZXR1cm4tMS0uCS8qIFBDLXJlbGF0aXZlIHN0YXJ0IGFkZHJlc3MgKi8KIAkubG9uZyAuTEVORF9ydF9zaWdyZXR1cm4tLkxTVEFSVF9ydF9zaWdyZXR1cm4rMQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlCmluZGV4IGEwOThhMTEuLjA1OWM4ODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiAJCXB0cmFjZS5vIHRpbWUubyBpb3BvcnQubyBsZHQubyBzZXR1cC5vIGk4MjU5Lm8gc3lzX3g4Nl82NC5vIFwKIAkJeDg2NjRfa3N5bXMubyBpMzg3Lm8gc3lzY2FsbC5vIHZzeXNjYWxsLm8gXAogCQlzZXR1cDY0Lm8gYm9vdGZsYWcubyBlODIwLm8gcmVib290Lm8gcXVpcmtzLm8gaTgyMzcubyBcCi0JCWRtaV9zY2FuLm8gcGNpLWRtYS5vIHBjaS1ub21tdS5vCisJCXBjaS1kbWEubyBwY2ktbm9tbXUubwogCiBvYmotJChDT05GSUdfWDg2X01DRSkgICAgICAgICArPSBtY2Uubwogb2JqLSQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCSs9IG1jZV9pbnRlbC5vCkBAIC00OSw1ICs0OSwzIEBACiBxdWlya3MteQkJCSs9IC4uLy4uL2kzODYva2VybmVsL3F1aXJrcy5vCiBpODIzNy15CQkJCSs9IC4uLy4uL2kzODYva2VybmVsL2k4MjM3Lm8KIG1zci0kKHN1YnN0IG0seSwkKENPTkZJR19YODZfTVNSKSkgICs9IC4uLy4uL2kzODYva2VybmVsL21zci5vCi1kbWlfc2Nhbi15CQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvZG1pX3NjYW4ubwotCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBlcnR1cmUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCmluZGV4IGZmZmQ2YjAuLjcwYjlkMjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCkBAIC04MCw3ICs4MCw3IEBACiAJCXByaW50aygiQXBlcnR1cmUgZnJvbSAlcyBiZXlvbmQgNEdCLiBJZ25vcmluZy5cbiIsbmFtZSk7CiAJCXJldHVybiAwOyAKIAl9Ci0JaWYgKGU4MjBfbWFwcGVkKGFwZXJfYmFzZSwgYXBlcl9iYXNlICsgYXBlcl9zaXplLCBFODIwX1JBTSkpIHsgIAorCWlmIChlODIwX2FueV9tYXBwZWQoYXBlcl9iYXNlLCBhcGVyX2Jhc2UgKyBhcGVyX3NpemUsIEU4MjBfUkFNKSkgewogCQlwcmludGsoIkFwZXJ0dXJlIGZyb20gJXMgcG9pbnRpbmcgdG8gZTgyMCBSQU0uIElnbm9yaW5nLlxuIixuYW1lKTsKIAkJcmV0dXJuIDA7IAogCX0gCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBpYy5jIGIvYXJjaC94ODZfNjQva2VybmVsL2FwaWMuYwppbmRleCBkNTQ2MjAxLi4xMDBhMzBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBpYy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGljLmMKQEAgLTYxNSw3ICs2MTUsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIFZlcmJvc2l0eSBsZXZlbCAlcyBub3QgcmVjb2duaXNlZCIKIAkJCQkiIHVzZSBhcGljPXZlcmJvc2Ugb3IgYXBpYz1kZWJ1ZyIsIHN0cik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgiYXBpYz0iLCBhcGljX3NldF92ZXJib3NpdHkpOwpAQCAtMTEzNywzNSArMTEzNywzNSBAQAogc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfZGlzYWJsZWFwaWMoY2hhciAqc3RyKSAKIHsgCiAJZGlzYWJsZV9hcGljID0gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0gCiAKIHN0YXRpYyBfX2luaXQgaW50IHNldHVwX25vbGFwaWMoY2hhciAqc3RyKSAKIHsgCiAJZGlzYWJsZV9hcGljID0gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0gCiAKIHN0YXRpYyBfX2luaXQgaW50IHNldHVwX25vYXBpY3RpbWVyKGNoYXIgKnN0cikgCiB7IAogCWlmIChzdHJbMF0gIT0gJyAnICYmIHN0clswXSAhPSAwKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOwogCWRpc2FibGVfYXBpY190aW1lciA9IDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9IAogCiBzdGF0aWMgX19pbml0IGludCBzZXR1cF9hcGljbWFpbnRpbWVyKGNoYXIgKnN0cikKIHsKIAlhcGljX3J1bnNfbWFpbl90aW1lciA9IDE7CiAJbm9ocGV0ID0gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImFwaWNtYWludGltZXIiLCBzZXR1cF9hcGljbWFpbnRpbWVyKTsKIAogc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfbm9hcGljbWFpbnRpbWVyKGNoYXIgKnN0cikKIHsKIAlhcGljX3J1bnNfbWFpbl90aW1lciA9IC0xOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogX19zZXR1cCgibm9hcGljbWFpbnRpbWVyIiwgc2V0dXBfbm9hcGljbWFpbnRpbWVyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKaW5kZXggMjkzY2Q3MS4uMWVmNjAyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCkBAIC03NiwxMSArNzYsMjIgQEAKIAkJKmFkZHJwID0gX19wYV9zeW1ib2woJl9lbmQpOwogCQlyZXR1cm4gMTsKIAl9CisKKwlpZiAobGFzdCA+PSBlYmRhX2FkZHIgJiYgYWRkciA8IGViZGFfYWRkciArIGViZGFfc2l6ZSkgeworCQkqYWRkcnAgPSBlYmRhX2FkZHIgKyBlYmRhX3NpemU7CisJCXJldHVybiAxOworCX0KKwogCS8qIFhYWCByYW1kaXNrIGltYWdlIGhlcmU/ICovIAogCXJldHVybiAwOwogfSAKIAotaW50IF9faW5pdCBlODIwX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSkgCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYW55IHBhcnQgb2YgdGhlIHJhbmdlIDxzdGFydCxlbmQ+IGlzIG1hcHBlZAorICogd2l0aCB0eXBlLgorICovCitpbnQgX19tZW1pbml0CitlODIwX2FueV9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpCiB7IAogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7IApAQCAtOTQsNiArMTA1LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZW50aXJlIHJhbmdlIDxzdGFydCxlbmQ+IGlzIG1hcHBlZCB3aXRoIHR5cGUuCisgKgorICogTm90ZTogdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGNvcnJlY3QgaWYgdGhlIGU4MjAgdGFibGUgaXMgc29ydGVkIGFuZAorICogbm90LW92ZXJsYXBwaW5nLCB3aGljaCBpcyB0aGUgY2FzZQorICovCitpbnQgX19pbml0IGU4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJaWYgKHR5cGUgJiYgZWktPnR5cGUgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVnaW9uIChwYXJ0KSBpbiBvdmVybGFwIHdpdGggdGhlIGN1cnJlbnQgcmVnaW9uID8qLworCQlpZiAoZWktPmFkZHIgPj0gZW5kIHx8IGVpLT5hZGRyICsgZWktPnNpemUgPD0gc3RhcnQpCisJCQljb250aW51ZTsKKworCQkvKiBpZiB0aGUgcmVnaW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgPHN0YXJ0LGVuZD4gd2UgbW92ZQorCQkgKiBzdGFydCB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24gc2luY2UgaXQncyBvayB1bnRpbCB0aGVyZQorCQkgKi8KKwkJaWYgKGVpLT5hZGRyIDw9IHN0YXJ0KQorCQkJc3RhcnQgPSBlaS0+YWRkciArIGVpLT5zaXplOworCQkvKiBpZiBzdGFydCBpcyBub3cgYXQgb3IgYmV5b25kIGVuZCwgd2UncmUgZG9uZSwgZnVsbCBjb3ZlcmFnZSAqLworCQlpZiAoc3RhcnQgPj0gZW5kKQorCQkJcmV0dXJuIDE7IC8qIHdlJ3JlIGRvbmUgKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qIAogICogRmluZCBhIGZyZWUgYXJlYSBpbiBhIHNwZWNpZmljIHJhbmdlLiAKICAqLyAKQEAgLTEwOSw3ICsxNDksNyBAQAogCQkJYWRkciA9IHN0YXJ0OwogCQlpZiAoYWRkciA+IGVpLT5hZGRyICsgZWktPnNpemUpIAogCQkJY29udGludWU7IAotCQl3aGlsZSAoYmFkX2FkZHIoJmFkZHIsIHNpemUpICYmIGFkZHIrc2l6ZSA8IGVpLT5hZGRyICsgZWktPnNpemUpCisJCXdoaWxlIChiYWRfYWRkcigmYWRkciwgc2l6ZSkgJiYgYWRkcitzaXplIDw9IGVpLT5hZGRyK2VpLT5zaXplKQogCQkJOwogCQlsYXN0ID0gYWRkciArIHNpemU7CiAJCWlmIChsYXN0ID4gZWktPmFkZHIgKyBlaS0+c2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCAxM2FmOTIwLi5iOTNlZjViIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAljaGFyIGJ1ZlsyNTZdOwogCiAJaWYgKGVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIDE7CiAKIAlzdHJsY3B5KGJ1ZixvcHQsc2l6ZW9mKGJ1ZikpOwogCXNwYWNlID0gc3RyY2hyKGJ1ZiwgJyAnKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKaW5kZXggODUzOGJmZS4uNTg2YjM0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKQEAgLTE4MCw2ICsxODAsMTAgQEAKICAqCiAgKiBYWFgJaWYgd2UgaGFkIGEgZnJlZSBzY3JhdGNoIHJlZ2lzdGVyIHdlIGNvdWxkIHNhdmUgdGhlIFJTUCBpbnRvIHRoZSBzdGFjayBmcmFtZQogICogICAgICBhbmQgcmVwb3J0IGl0IHByb3Blcmx5IGluIHBzLiBVbmZvcnR1bmF0ZWx5IHdlIGhhdmVuJ3QuCisgKgorICogV2hlbiB1c2VyIGNhbiBjaGFuZ2UgdGhlIGZyYW1lcyBhbHdheXMgZm9yY2UgSVJFVC4gVGhhdCBpcyBiZWNhdXNlCisgKiBpdCBkZWFscyB3aXRoIHVuY2Fub25pY2FsIGFkZHJlc3NlcyBiZXR0ZXIuIFNZU1JFVCBoYXMgdHJvdWJsZQorICogd2l0aCB0aGVtIGR1ZSB0byBidWdzIGluIGJvdGggQU1EIGFuZCBJbnRlbCBDUFVzLgogICovIAkJCSAJCQogCiBFTlRSWShzeXN0ZW1fY2FsbCkKQEAgLTI1NCw3ICsyNTgsMTAgQEAKIAl4b3JsICVlc2ksJWVzaSAjIG9sZHNldCAtPiBhcmcyCiAJY2FsbCBwdHJlZ3NjYWxsX2NvbW1vbgogMToJbW92bCAkX1RJRl9ORUVEX1JFU0NIRUQsJWVkaQotCWptcCBzeXNyZXRfY2hlY2sKKwkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lLiBUaGlzCisJICAgd29ya3MgYmVjYXVzZSBwdHJlZ3NjYWxsX2NvbW1vbiBoYXMgY2FsbGVkIEZJWFVQX1RPUF9PRl9TVEFDSy4gKi8KKwljbGkKKwlqbXAgaW50X3dpdGhfY2hlY2sKIAkKIGJhZHN5czoKIAltb3ZxICQtRU5PU1lTLFJBWC1BUkdPRkZTRVQoJXJzcCkKQEAgLTI3NCwxMyArMjgxLDkgQEAKIAlqYSAgMWYKIAltb3ZxICVyMTAsJXJjeAkvKiBmaXh1cCBmb3IgQyAqLwogCWNhbGwgKnN5c19jYWxsX3RhYmxlKCwlcmF4LDgpCi0JbW92cSAlcmF4LFJBWC1BUkdPRkZTRVQoJXJzcCkKLTE6CVNBVkVfUkVTVAotCW1vdnEgJXJzcCwlcmRpCi0JY2FsbCBzeXNjYWxsX3RyYWNlX2xlYXZlCi0JUkVTVE9SRV9UT1BfT0ZfU1RBQ0sgJXJieAotCVJFU1RPUkVfUkVTVAotCWptcCByZXRfZnJvbV9zeXNfY2FsbAorMToJbW92cSAlcmF4LFJBWC1BUkdPRkZTRVQoJXJzcCkKKwkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lICovCisJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbAogCUNGSV9FTkRQUk9DCiAJCQogLyogCkBAIC00MDgsMjUgKzQxMSw5IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CiAJQ0ZJX1JFR0lTVEVSIHJpcCwgcjExCiAJU0FWRV9SRVNUCi0JbW92cSAlcjExLCAlcjE1Ci0JQ0ZJX1JFR0lTVEVSIHJpcCwgcjE1CiAJRklYVVBfVE9QX09GX1NUQUNLICVyMTEKIAljYWxsIHN5c19leGVjdmUKLQlHRVRfVEhSRUFEX0lORk8oJXJjeCkKLQlidCAkVElGX0lBMzIsdGhyZWFkaW5mb19mbGFncyglcmN4KQotCUNGSV9SRU1FTUJFUl9TVEFURQotCWpjIGV4ZWNfMzJiaXQKIAlSRVNUT1JFX1RPUF9PRl9TVEFDSyAlcjExCi0JbW92cSAlcjE1LCAlcjExCi0JQ0ZJX1JFR0lTVEVSIHJpcCwgcjExCi0JUkVTVE9SRV9SRVNUCi0JcHVzaHEgJXIxMQotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4Ci0JQ0ZJX1JFTF9PRkZTRVQgcmlwLCAwCi0JcmV0Ci0KLWV4ZWNfMzJiaXQ6Ci0JQ0ZJX1JFU1RPUkVfU1RBVEUKIAltb3ZxICVyYXgsUkFYKCVyc3ApCiAJUkVTVE9SRV9SRVNUCiAJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKaW5kZXggNzdiNGM2MC4uOWNjNzAzMSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCkBAIC0yNzEsNiArMjcxLDE4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCisKKyNpZmRlZiBDT05GSUdfQUNQSQorCitzdGF0aWMgaW50IG52aWRpYV9ocGV0X2RldGVjdGVkIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgX19pbml0IG52aWRpYV9ocGV0X2NoZWNrKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQoreworCW52aWRpYV9ocGV0X2RldGVjdGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAvKiBUZW1wb3JhcnkgSGFjay4gTnZpZGlhIGFuZCBWSUEgYm9hcmRzIGN1cnJlbnRseSBvbmx5IHdvcmsgd2l0aCBJTy1BUElDCiAgICBvZmYuIENoZWNrIGZvciBhbiBOdmlkaWEgb3IgVklBIFBDSSBicmlkZ2UgYW5kIHR1cm4gaXQgb2ZmLgogICAgVXNlIHBjaSBkaXJlY3QgaW5mcmFzdHJ1Y3R1cmUgYmVjYXVzZSB0aGlzIHJ1bnMgYmVmb3JlIHRoZSBQQ0kgc3Vic3lzdGVtLiAKQEAgLTMxNywxMSArMzI5LDE5IEBACiAJCQkJCXJldHVybjsKIAkJCQljYXNlIFBDSV9WRU5ET1JfSURfTlZJRElBOgogI2lmZGVmIENPTkZJR19BQ1BJCi0JCQkJCS8qIEFsbCB0aW1lciBvdmVycmlkZXMgb24gTnZpZGlhCi0JCQkJICAgICAgICAgICBzZWVtIHRvIGJlIHdyb25nLiBTa2lwIHRoZW0uICovCi0JCQkJCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gCi0JICAgICAiTnZpZGlhIGJvYXJkIGRldGVjdGVkLiBJZ25vcmluZyBBQ1BJIHRpbWVyIG92ZXJyaWRlLlxuIik7CisJCQkJCS8qCisJCQkJCSAqIEFsbCB0aW1lciBvdmVycmlkZXMgb24gTnZpZGlhIGFyZQorCQkJCQkgKiB3cm9uZyB1bmxlc3MgSFBFVCBpcyBlbmFibGVkLgorCQkJCQkgKi8KKwkJCQkJbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPSAwOworCQkJCQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfSFBFVCwKKwkJCQkJCQludmlkaWFfaHBldF9jaGVjayk7CisJCQkJCWlmIChudmlkaWFfaHBldF9kZXRlY3RlZCA9PSAwKSB7CisJCQkJCQlhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgPSAxOworCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiTnZpZGlhIGJvYXJkICIKKwkJCQkJCSAgICAiZGV0ZWN0ZWQuIElnbm9yaW5nIEFDUEkgIgorCQkJCQkJICAgICJ0aW1lciBvdmVycmlkZS5cbiIpOworCQkJCQl9CiAjZW5kaWYKIAkJCQkJLyogUkVELVBFTiBza2lwIHRoZW0gb24gbXB0YWJsZXMgdG9vPyAqLwogCQkJCQlyZXR1cm47CkBAIC0xNzc3LDYgKzE3OTcsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiB9CiAKK2ludCB0aW1lcl91c2VzX2lvYXBpY19waW5fMDsKKwogLyoKICAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKICAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQpAQCAtMTgxNCw2ICsxODM2LDkgQEAKIAlwaW4yICA9IGlvYXBpY19pODI1OS5waW47CiAJYXBpYzIgPSBpb2FwaWNfaTgyNTkuYXBpYzsKIAorCWlmIChwaW4xID09IDApCisJCXRpbWVyX3VzZXNfaW9hcGljX3Bpbl8wID0gMTsKKwogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSxLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggYXBpYzE9JWQgcGluMT0lZCBhcGljMj0lZCBwaW4yPSVkXG4iLAogCQl2ZWN0b3IsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGFjY2JmZjMuLmZhMWQxOWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYwpAQCAtNTMsNyArNTMsNyBAQAogLyoKICAqIHJldHVybnMgbm9uLXplcm8gaWYgb3Bjb2RlIG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgZmxhZy4KICAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfSUZfbW9kaWZpZXIoa3Byb2JlX29wY29kZV90ICppbnNuKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgaXNfSUZfbW9kaWZpZXIoa3Byb2JlX29wY29kZV90ICppbnNuKQogewogCXN3aXRjaCAoKmluc24pIHsKIAljYXNlIDB4ZmE6CQkvKiBjbGkgKi8KQEAgLTg0LDcgKzg0LDcgQEAKICAqIElmIGl0IGRvZXMsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgMzItYml0IGRpc3BsYWNlbWVudCB3b3JkLgogICogSWYgbm90LCByZXR1cm4gbnVsbC4KICAqLwotc3RhdGljIGlubGluZSBzMzIgKmlzX3JpcHJlbCh1OCAqaW5zbikKK3N0YXRpYyBzMzIgX19rcHJvYmVzICppc19yaXByZWwodTggKmluc24pCiB7CiAjZGVmaW5lIFcocm93LGIwLGIxLGIyLGIzLGI0LGI1LGI2LGI3LGI4LGI5LGJhLGJiLGJjLGJkLGJlLGJmKQkJICAgICAgXAogCSgoKGIwIyNVTCA8PCAweDApfChiMSMjVUwgPDwgMHgxKXwoYjIjI1VMIDw8IDB4Mil8KGIzIyNVTCA8PCAweDMpIHwgICBcCkBAIC0yMjksNyArMjI5LDcgQEAKIAltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJa2NiLT5wcmV2X2twcm9iZS5rcCA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJa2NiLT5wcmV2X2twcm9iZS5zdGF0dXMgPSBrY2ItPmtwcm9iZV9zdGF0dXM7CkBAIC0yMzcsNyArMjM3LDcgQEAKIAlrY2ItPnByZXZfa3Byb2JlLnNhdmVkX3JmbGFncyA9IGtjYi0+a3Byb2JlX3NhdmVkX3JmbGFnczsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7CiAJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlrY2ItPmtwcm9iZV9zYXZlZF9yZmxhZ3MgPSBrY2ItPnByZXZfa3Byb2JlLnNhdmVkX3JmbGFnczsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7CkBAIC01MTQsMTMgKzUxNCwxMyBAQAogCQkqdG9zID0gb3JpZ19yaXAgKyAoKnRvcyAtIGNvcHlfcmlwKTsKIAkJYnJlYWs7CiAJY2FzZSAweGZmOgotCQlpZiAoKCppbnNuICYgMHgzMCkgPT0gMHgxMCkgeworCQlpZiAoKGluc25bMV0gJiAweDMwKSA9PSAweDEwKSB7CiAJCQkvKiBjYWxsIGFic29sdXRlLCBpbmRpcmVjdCAqLwogCQkJLyogRml4IHJldHVybiBhZGRyOyByaXAgaXMgY29ycmVjdC4gKi8KIAkJCW5leHRfcmlwID0gcmVncy0+cmlwOwogCQkJKnRvcyA9IG9yaWdfcmlwICsgKCp0b3MgLSBjb3B5X3JpcCk7Ci0JCX0gZWxzZSBpZiAoKCgqaW5zbiAmIDB4MzEpID09IDB4MjApIHx8CS8qIGptcCBuZWFyLCBhYnNvbHV0ZSBpbmRpcmVjdCAqLwotCQkJICAgKCgqaW5zbiAmIDB4MzEpID09IDB4MjEpKSB7CS8qIGptcCBmYXIsIGFic29sdXRlIGluZGlyZWN0ICovCisJCX0gZWxzZSBpZiAoKChpbnNuWzFdICYgMHgzMSkgPT0gMHgyMCkgfHwJLyogam1wIG5lYXIsIGFic29sdXRlIGluZGlyZWN0ICovCisJCQkgICAoKGluc25bMV0gJiAweDMxKSA9PSAweDIxKSkgewkvKiBqbXAgZmFyLCBhYnNvbHV0ZSBpbmRpcmVjdCAqLwogCQkJLyogcmlwIGlzIGNvcnJlY3QuICovCiAJCQluZXh0X3JpcCA9IHJlZ3MtPnJpcDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL21jZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCmluZGV4IDA0MjgyZWYuLmM2OWZjNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKQEAgLTI5LDYgKzI5LDggQEAKICNkZWZpbmUgTUlTQ19NQ0VMT0dfTUlOT1IgMjI3CiAjZGVmaW5lIE5SX0JBTktTIDYKIAorYXRvbWljX3QgbWNlX2VudHJ5OworCiBzdGF0aWMgaW50IG1jZV9kb250X2luaXQ7CiAKIC8qIDA6IGFsd2F5cyBwYW5pYywgMTogcGFuaWMgaWYgZGVhZGxvY2sgcG9zc2libGUsIDI6IHRyeSB0byBhdm9pZCBwYW5pYywKQEAgLTE3MiwxMCArMTc0LDEyIEBACiAJaW50IGk7CiAJaW50IHBhbmljbV9mb3VuZCA9IDA7CiAKKwlhdG9taWNfaW5jKCZtY2VfZW50cnkpOworCiAJaWYgKHJlZ3MpCiAJCW5vdGlmeV9kaWUoRElFX05NSSwgIm1hY2hpbmUgY2hlY2siLCByZWdzLCBlcnJvcl9jb2RlLCAxOCwgU0lHS0lMTCk7CiAJaWYgKCFiYW5rcykKLQkJcmV0dXJuOworCQlnb3RvIG91dDI7CiAKIAltZW1zZXQoJm0sIDAsIHNpemVvZihzdHJ1Y3QgbWNlKSk7CiAJbS5jcHUgPSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTI2Niw2ICsyNzAsOCBAQAogIG91dDoKIAkvKiBMYXN0IHRoaW5nIGRvbmUgaW4gdGhlIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uIHRvIGNsZWFyIHN0YXRlLiAqLwogCXdybXNybChNU1JfSUEzMl9NQ0dfU1RBVFVTLCAwKTsKKyBvdXQyOgorCWF0b21pY19kZWMoJm1jZV9lbnRyeSk7CiB9CiAKIC8qCkBAIC01MDEsNyArNTA3LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IG1jaGVja19kaXNhYmxlKGNoYXIgKnN0cikKIHsKIAltY2VfZG9udF9pbml0ID0gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogLyogbWNlPW9mZiBkaXNhYmxlcyBtYWNoaW5lIGNoZWNrLiBOb3RlIHlvdSBjYW4gcmVlbmFibGUgaXQgbGF0ZXIKQEAgLTUyMSw3ICs1MjcsNyBAQAogCQlnZXRfb3B0aW9uKCZzdHIsICZ0b2xlcmFudCk7CiAJZWxzZQogCQlwcmludGsoIm1jZT0gYXJndW1lbnQgJXMgaWdub3JlZC4gUGxlYXNlIHVzZSAvc3lzIiwgc3RyKTsgCi0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIF9fc2V0dXAoIm5vbWNlIiwgbWNoZWNrX2Rpc2FibGUpOwpAQCAtNjIzLDcgKzYyOSw3IEBACiAjZW5kaWYKIAogLyogR2V0IG5vdGlmaWVkIHdoZW4gYSBjcHUgY29tZXMgb24vb2ZmLiBCZSBob3RwbHVnIGZyaWVuZGx5LiAqLwotc3RhdGljIF9fY3B1aW5pdCBpbnQKK3N0YXRpYyBpbnQKIG1jZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL21jZV9hbWQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2VfYW1kLmMKaW5kZXggZDNhZDdkOC4uZDEzYjI0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL21jZV9hbWQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlX2FtZC5jCkBAIC00ODIsNyArNDgyLDcgQEAKICNlbmRpZgogCiAvKiBnZXQgbm90aWZpZWQgd2hlbiBhIGNwdSBjb21lcyBvbi9vZmYgKi8KLXN0YXRpYyBfX2NwdWluaXQgaW50IHRocmVzaG9sZF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IHRocmVzaG9sZF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAkvKiBjcHUgd2FzIHVuc2lnbmVkIGludCB0byBiZWdpbiB3aXRoICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL21wcGFyc2UuYwppbmRleCBiMTdjZjNlLi4wODNkYTdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTk2OCw3ICs5NjgsMTcgQEAKIAkJICovCiAJCWludCBpcnEgPSBnc2k7CiAJCWlmIChnc2kgPCBNQVhfR1NJX05VTSkgewotCQkJaWYgKGdzaSA+IDE1KQorCQkJLyoKKwkJCSAqIFJldGFpbiB0aGUgVklBIGNoaXBzZXQgd29yay1hcm91bmQgKGdzaSA+IDE1KSwgYnV0CisJCQkgKiBhdm9pZCBhIHByb2JsZW0gd2hlcmUgdGhlIDgyNTQgdGltZXIgKElSUTApIGlzIHNldHVwCisJCQkgKiB2aWEgYW4gb3ZlcnJpZGUgKHNvIGl0J3Mgbm90IG9uIHBpbiAwIG9mIHRoZSBpb2FwaWMpLAorCQkJICogYW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBwaW4gMCBpbnRlcnJ1cHQgaXMgYSBQQ0kKKwkJCSAqIHR5cGUuICBUaGUgZ3NpID4gMTUgdGVzdCBjb3VsZCBjYXVzZSB0aGVzZSB0d28gcGlucworCQkJICogdG8gYmUgc2hhcmVkIGFzIElSUTAsIGFuZCB0aGV5IGFyZSBub3Qgc2hhcmVhYmxlLgorCQkJICogU28gdGVzdCBmb3IgdGhpcyBjb25kaXRpb24sIGFuZCBpZiBuZWNlc3NhcnksIGF2b2lkCisJCQkgKiB0aGUgcGluIGNvbGxpc2lvbi4KKwkJCSAqLworCQkJaWYgKGdzaSA+IDE1IHx8IChnc2kgPT0gMCAmJiAhdGltZXJfdXNlc19pb2FwaWNfcGluXzApKQogCQkJCWdzaSA9IHBjaV9pcnErKzsKIAkJCS8qCiAJCQkgKiBEb24ndCBhc3NpZ24gSVJRIHVzZWQgYnkgQUNQSSBTQ0kKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYwppbmRleCBkOWU0MDY3Li40ZTYzNTdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgorI2luY2x1ZGUgPGFzbS9tY2UuaD4KIAogLyoKICAqIGxhcGljX25taV9vd25lciB0cmFja3MgdGhlIG93bmVyc2hpcCBvZiB0aGUgbGFwaWMgTk1JIGhhcmR3YXJlOgpAQCAtNDgwLDYgKzQ4MSwxMiBAQAogCQlfX2dldF9jcHVfdmFyKG5taV90b3VjaCkgPSAwOwogCQl0b3VjaGVkID0gMTsKIAl9CisjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKKwkvKiBDb3VsZCBjaGVjayBvb3BzX2luX3Byb2dyZXNzIGhlcmUgdG9vLCBidXQgaXQncyBzYWZlcgorCSAgIG5vdCB0b28gKi8KKwlpZiAoYXRvbWljX3JlYWQoJm1jZV9lbnRyeSkgPiAwKQorCQl0b3VjaGVkID0gMTsKKyNlbmRpZgogCWlmICghdG91Y2hlZCAmJiBfX2dldF9jcHVfdmFyKGxhc3RfaXJxX3N1bSkgPT0gc3VtKSB7CiAJCS8qCiAJCSAqIEF5aWVlLCBsb29rcyBsaWtlIHRoaXMgQ1BVIGlzIHN0dWNrIC4uLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggMDNjOWVlZS4uYTkyNzVjOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYwpAQCAtNDgsMTAgKzQ4LDE2IEBACiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IG5vZGU7CisjaWZkZWYgQ09ORklHX1BDSQogCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQogCQlub2RlID0gcGNpYnVzX3RvX25vZGUodG9fcGNpX2RldihkZXYpLT5idXMpOwogCWVsc2UKKyNlbmRpZgogCQlub2RlID0gbnVtYV9ub2RlX2lkKCk7CisKKwlpZiAobm9kZSA8IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKSkKKwkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKKwogCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgb3JkZXIpOwogCXJldHVybiBwYWdlID8gcGFnZV9hZGRyZXNzKHBhZ2UpIDogTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKaW5kZXggYTZjMDFlMS4uODJhN2M5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKQEAgLTExMiwxMCArMTEyLDYgQEAKIHN0YXRpYyB2b2lkIGZyZWVfaW9tbXUodW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBzaXplKQogeyAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlmIChzaXplID09IDEpIHsgCi0JCWNsZWFyX2JpdChvZmZzZXQsIGlvbW11X2dhcnRfYml0bWFwKTsgCi0JCXJldHVybjsKLQl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11X2JpdG1hcF9sb2NrLCBmbGFncyk7CiAJX19jbGVhcl9iaXRfc3RyaW5nKGlvbW11X2dhcnRfYml0bWFwLCBvZmZzZXQsIHNpemUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11X2JpdG1hcF9sb2NrLCBmbGFncyk7CkBAIC02MzUsMTQgKzYzMSwyMCBAQAogCQlwcmludGsoS0VSTl9JTkZPICJQQ0ktRE1BOiBEaXNhYmxpbmcgSU9NTVUuXG4iKTsKIAkJaWYgKGVuZF9wZm4gPiBNQVhfRE1BMzJfUEZOKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkcgbW9yZSB0aGFuIDRHQiBvZiBtZW1vcnkgIgotCQkJCQkiYnV0IElPTU1VIG5vdCBjb21waWxlZCBpbi5cbiIKLQkJCSAgICAgICBLRVJOX0VSUiAiV0FSTklORyAzMmJpdCBQQ0kgbWF5IG1hbGZ1bmN0aW9uLlxuIgotCQkJICAgICAgIEtFUk5fRVJSICJZb3UgbWlnaHQgd2FudCB0byBlbmFibGUgIgotCQkJCQkiQ09ORklHX0dBUlRfSU9NTVVcbiIpOworCQkJCQkiYnV0IElPTU1VIG5vdCBhdmFpbGFibGUuXG4iCisJCQkgICAgICAgS0VSTl9FUlIgIldBUk5JTkcgMzJiaXQgUENJIG1heSBtYWxmdW5jdGlvbi5cbiIpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CiAKKwlpID0gMDsKKwlmb3JfYWxsX25iKGRldikKKwkJaSsrOworCWlmIChpID4gTUFYX05CKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJLUdBUlQ6IFRvbyBtYW55IG5vcnRoYnJpZGdlcyAoJWxkKS4gRGlzYWJsZWRcbiIsIGkpOworCQlyZXR1cm4gLTE7CisJfQorCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogdXNpbmcgR0FSVCBJT01NVS5cbiIpOwogCWFwZXJfc2l6ZSA9IGluZm8uYXBlcl9zaXplICogMTAyNCAqIDEwMjQ7CQogCWlvbW11X3NpemUgPSBjaGVja19pb21tdV9zaXplKGluZm8uYXBlcl9iYXNlLCBhcGVyX3NpemUpOyAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktbm9tbXUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktbm9tbXUuYwppbmRleCA0NGFkY2MyLi4xZjZlY2M2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLW5vbW11LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1ub21tdS5jCkBAIC0xMiw5ICsxMiwxMCBAQAogY2hlY2tfYWRkcihjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBidXMsIHNpemVfdCBzaXplKQogewogICAgICAgICBpZiAoaHdkZXYgJiYgYnVzICsgc2l6ZSA+ICpod2Rldi0+ZG1hX21hc2spIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAibm9tbXVfJXM6IG92ZXJmbG93ICVMeCslbHUgb2YgZGV2aWNlIG1hc2sgJUx4XG4iLAotCSAgICAgICBuYW1lLCAobG9uZyBsb25nKWJ1cywgc2l6ZSwgKGxvbmcgbG9uZykqaHdkZXYtPmRtYV9tYXNrKTsKKwkJaWYgKCpod2Rldi0+ZG1hX21hc2sgPj0gMHhmZmZmZmZmZlVMTCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICJub21tdV8lczogb3ZlcmZsb3cgJUx4KyVsdSBvZiBkZXZpY2UgbWFzayAlTHhcbiIsCisJICAgICAgIAkJCW5hbWUsIChsb25nIGxvbmcpYnVzLCBzaXplLCAobG9uZyBsb25nKSpod2Rldi0+ZG1hX21hc2spOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcG10aW1lci5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BtdGltZXIuYwppbmRleCBlZTVlZTQ4Li5iZjQyMWVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcG10aW1lci5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wbXRpbWVyLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAlvZmZzZXRfZGVsYXkgPSBkZWx0YSAlIChVU0VDX1BFUl9TRUMgLyBIWik7CiAKIAlyZHRzY2xsKHRzYyk7Ci0Jdnh0aW1lLmxhc3RfdHNjID0gdHNjIC0gb2Zmc2V0X2RlbGF5ICogY3B1X2toejsKKwl2eHRpbWUubGFzdF90c2MgPSB0c2MgLSBvZmZzZXRfZGVsYXkgKiAodTY0KWNwdV9raHogLyAxMDAwOwogCiAJLyogZG9uJ3QgY2FsY3VsYXRlIGRlbGF5IGZvciBmaXJzdCBydW4sCiAJICAgb3IgaWYgd2UndmUgZ290IGxlc3MgdGhlbiBhIHRpY2sgKi8KQEAgLTEyMSw3ICsxMjEsNyBAQAogc3RhdGljIGludCBfX2luaXQgbm9wbXRpbWVyX3NldHVwKGNoYXIgKnMpCiB7CiAJcG10bXJfaW9wb3J0ID0gMDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgibm9wbXRpbWVyIiwgbm9wbXRpbWVyX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDcwZGQ4ZTUuLmZiOTAzZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNTc1LDggKzU3NSwxMCBAQAogCXByZXYtPnVzZXJyc3AgPSByZWFkX3BkYShvbGRyc3ApOyAKIAl3cml0ZV9wZGEob2xkcnNwLCBuZXh0LT51c2VycnNwKTsgCiAJd3JpdGVfcGRhKHBjdXJyZW50LCBuZXh0X3ApOyAKKwogCS8qIFRoaXMgbXVzdCBiZSBoZXJlIHRvIGVuc3VyZSBib3RoIG1hdGhfc3RhdGVfcmVzdG9yZSgpIGFuZAotCSAgIGtlcm5lbF9mcHVfYmVnaW4oKSB3b3JrIGNvbnNpc3RlbnRseS4gKi8KKwkgICBrZXJuZWxfZnB1X2JlZ2luKCkgd29yayBjb25zaXN0ZW50bHkuIAorCSAgIEFuZCB0aGUgQU1EIHdvcmthcm91bmQgcmVxdWlyZXMgaXQgdG8gYmUgYWZ0ZXIgRFMgcmVsb2FkLiAqLwogCXVubGF6eV9mcHUocHJldl9wKTsKIAl3cml0ZV9wZGEoa2VybmVsc3RhY2ssCiAJCSAgdGFza19zdGFja19wYWdlKG5leHRfcCkgKyBUSFJFQURfU0laRSAtIFBEQV9TVEFDS09GRlNFVCk7CkBAIC03ODEsMTAgKzc4MywxNiBAQAogCX0KIAljYXNlIEFSQ0hfR0VUX0dTOiB7IAogCQl1bnNpZ25lZCBsb25nIGJhc2U7CisJCXVuc2lnbmVkIGdzaW5kZXg7CiAJCWlmICh0YXNrLT50aHJlYWQuZ3NpbmRleCA9PSBHU19UTFNfU0VMKQogCQkJYmFzZSA9IHJlYWRfMzJiaXRfdGxzKHRhc2ssIEdTX1RMUyk7Ci0JCWVsc2UgaWYgKGRvaXQpCi0JCQlyZG1zcmwoTVNSX0tFUk5FTF9HU19CQVNFLCBiYXNlKTsKKwkJZWxzZSBpZiAoZG9pdCkgeworIAkJCWFzbSgibW92bCAlJWdzLCUwIiA6ICI9ciIgKGdzaW5kZXgpKTsKKwkJCWlmIChnc2luZGV4KQorCQkJCXJkbXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIGJhc2UpOworCQkJZWxzZQorCQkJCWJhc2UgPSB0YXNrLT50aHJlYWQuZ3M7CisJCX0KIAkJZWxzZQogCQkJYmFzZSA9IHRhc2stPnRocmVhZC5nczsKIAkJcmV0ID0gcHV0X3VzZXIoYmFzZSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYWRkcik7IApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IGQ0NGIyYzEuLjJkNTAwMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTI3NCwxMSArMjc0LDYgQEAKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCXZhbHVlICY9IDB4ZmZmZjsKIAkJCWJyZWFrOwotCQljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LCByaXApOgotCQkJLyogQ2hlY2sgaWYgdGhlIG5ldyBSSVAgYWRkcmVzcyBpcyBjYW5vbmljYWwgKi8KLQkJCWlmICh2YWx1ZSA+PSBUQVNLX1NJWkVfT0YoY2hpbGQpKQotCQkJCXJldHVybiAtRUlPOwotCQkJYnJlYWs7CiAJfQogCXB1dF9zdGFja19sb25nKGNoaWxkLCByZWdubyAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksIHZhbHVlKTsKIAlyZXR1cm4gMDsKQEAgLTYwNSwxMiArNjAwLDEyIEBACiAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpIHsKIAkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpKSB7Ci0JCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsIEFVRElUX0FSQ0hfSTM4NiwKKwkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoQVVESVRfQVJDSF9JMzg2LAogCQkJCQkgICAgcmVncy0+b3JpZ19yYXgsCiAJCQkJCSAgICByZWdzLT5yYngsIHJlZ3MtPnJjeCwKIAkJCQkJICAgIHJlZ3MtPnJkeCwgcmVncy0+cnNpKTsKIAkJfSBlbHNlIHsKLQkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgQVVESVRfQVJDSF9YODZfNjQsCisJCQlhdWRpdF9zeXNjYWxsX2VudHJ5KEFVRElUX0FSQ0hfWDg2XzY0LAogCQkJCQkgICAgcmVncy0+b3JpZ19yYXgsCiAJCQkJCSAgICByZWdzLT5yZGksIHJlZ3MtPnJzaSwKIAkJCQkJICAgIHJlZ3MtPnJkeCwgcmVncy0+cjEwKTsKQEAgLTYyMSw3ICs2MTYsNyBAQAogYXNtbGlua2FnZSB2b2lkIHN5c2NhbGxfdHJhY2VfbGVhdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQotCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgQVVESVRTQ19SRVNVTFQocmVncy0+cmF4KSwgcmVncy0+cmF4KTsKKwkJYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKHJlZ3MtPnJheCksIHJlZ3MtPnJheCk7CiAKIAlpZiAoKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpCiAJICAgICB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKaW5kZXggZDFmM2U5Mi4uNjU1YjkxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKQEAgLTM1Myw4ICszNTMsMTAgQEAKIAkJaWYgKGZ1bGxhcmcoZnJvbSwgImVuYWJsZV90aW1lcl9waW5fMSIpKQogCQkJZGlzYWJsZV90aW1lcl9waW5fMSA9IC0xOwogCi0JCWlmIChmdWxsYXJnKGZyb20sICJub2xhcGljIikgfHwgZnVsbGFyZyhmcm9tLCAiZGlzYWJsZWFwaWMiKSkKKwkJaWYgKGZ1bGxhcmcoZnJvbSwgIm5vbGFwaWMiKSB8fCBmdWxsYXJnKGZyb20sICJkaXNhYmxlYXBpYyIpKSB7CisJCQljbGVhcl9iaXQoWDg2X0ZFQVRVUkVfQVBJQywgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSk7CiAJCQlkaXNhYmxlX2FwaWMgPSAxOworCQl9CiAKIAkJaWYgKGZ1bGxhcmcoZnJvbSwgIm5vYXBpYyIpKQogCQkJc2tpcF9pb2FwaWNfc2V0dXAgPSAxOwpAQCAtNTQwLDcgKzU0Miw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBub3JlcGxhY2VtZW50X3NldHVwKGNoYXIgKnMpCiB7IAogICAgICBub19yZXBsYWNlbWVudCA9IDE7IAotICAgICByZXR1cm4gMDsgCisgICAgIHJldHVybiAxOwogfSAKIAogX19zZXR1cCgibm9yZXBsYWNlbWVudCIsIG5vcmVwbGFjZW1lbnRfc2V0dXApOyAKQEAgLTU2OSwxNyArNTcxLDI4IEBACiAjZW5kaWYKIAogI2RlZmluZSBFQkRBX0FERFJfUE9JTlRFUiAweDQwRQotc3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfZWJkYV9yZWdpb24odm9pZCkKKwordW5zaWduZWQgX19pbml0ZGF0YSBlYmRhX2FkZHI7Cit1bnNpZ25lZCBfX2luaXRkYXRhIGViZGFfc2l6ZTsKKworc3RhdGljIHZvaWQgZGlzY292ZXJfZWJkYSh2b2lkKQogewotCXVuc2lnbmVkIGludCBhZGRyOwotCS8qKiAKKwkvKgogCSAqIHRoZXJlIGlzIGEgcmVhbC1tb2RlIHNlZ21lbnRlZCBwb2ludGVyIHBvaW50aW5nIHRvIHRoZSAKIAkgKiA0SyBFQkRBIGFyZWEgYXQgMHg0MEUKIAkgKi8KLQlhZGRyID0gKih1bnNpZ25lZCBzaG9ydCAqKXBoeXNfdG9fdmlydChFQkRBX0FERFJfUE9JTlRFUik7Ci0JYWRkciA8PD0gNDsKLQlpZiAoYWRkcikKLQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMoYWRkciwgUEFHRV9TSVpFKTsKKwllYmRhX2FkZHIgPSAqKHVuc2lnbmVkIHNob3J0ICopRUJEQV9BRERSX1BPSU5URVI7CisJZWJkYV9hZGRyIDw8PSA0OworCisJZWJkYV9zaXplID0gKih1bnNpZ25lZCBzaG9ydCAqKSh1bnNpZ25lZCBsb25nKWViZGFfYWRkcjsKKworCS8qIFJvdW5kIEVCREEgdXAgdG8gcGFnZXMgKi8KKwlpZiAoZWJkYV9zaXplID09IDApCisJCWViZGFfc2l6ZSA9IDE7CisJZWJkYV9zaXplIDw8PSAxMDsKKwllYmRhX3NpemUgPSByb3VuZF91cChlYmRhX3NpemUgKyAoZWJkYV9hZGRyICYgflBBR0VfTUFTSyksIFBBR0VfU0laRSk7CisJaWYgKGViZGFfc2l6ZSA+IDY0KjEwMjQpCisJCWViZGFfc2l6ZSA9IDY0KjEwMjQ7CiB9CiAKIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKQEAgLTYyNSw2ICs2MzgsOCBAQAogCiAJY2hlY2tfZWZlcigpOwogCisJZGlzY292ZXJfZWJkYSgpOworCiAJaW5pdF9tZW1vcnlfbWFwcGluZygwLCAoZW5kX3Bmbl9tYXAgPDwgUEFHRV9TSElGVCkpOwogCiAJZG1pX3NjYW5fbWFjaGluZSgpOwpAQCAtNjY3LDcgKzY4Miw4IEBACiAJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMoMCwgUEFHRV9TSVpFKTsKIAogCS8qIHJlc2VydmUgZWJkYSByZWdpb24gKi8KLQlyZXNlcnZlX2ViZGFfcmVnaW9uKCk7CisJaWYgKGViZGFfYWRkcikKKwkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMoZWJkYV9hZGRyLCBlYmRhX3NpemUpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qCkBAIC05MjgsNiArOTQ0LDEwIEBACiAJaWYgKGMtPng4NiA9PSAxNSAmJiAoKGxldmVsID49IDB4MGY0OCAmJiBsZXZlbCA8IDB4MGY1MCkgfHwgbGV2ZWwgPj0gMHgwZjU4KSkKIAkJc2V0X2JpdChYODZfRkVBVFVSRV9SRVBfR09PRCwgJmMtPng4Nl9jYXBhYmlsaXR5KTsKIAorCS8qIEVuYWJsZSB3b3JrYXJvdW5kIGZvciBGWFNBVkUgbGVhayAqLworCWlmIChjLT54ODYgPj0gNikKKwkJc2V0X2JpdChYODZfRkVBVFVSRV9GWFNBVkVfTEVBSywgJmMtPng4Nl9jYXBhYmlsaXR5KTsKKwogCXIgPSBnZXRfbW9kZWxfbmFtZShjKTsKIAlpZiAoIXIpIHsgCiAJCXN3aXRjaCAoYy0+eDg2KSB7IApAQCAtMTAzMSw3ICsxMDUxLDcgQEAKIAkgICBmb3Igbm93LiAqLwogCW5vZGUgPSBhcGljaWRfdG9fbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJaWYgKG5vZGUgPT0gTlVNQV9OT19OT0RFKQotCQlub2RlID0gMDsKKwkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKIAludW1hX3NldF9ub2RlKGNwdSwgbm9kZSk7CiAKIAlpZiAoYWNwaV9udW1hID4gMCkKQEAgLTE0MjAsMyArMTQ0MCwyMiBAQAogCS5zaG93ID0Jc2hvd19jcHVpbmZvLAogfTsKIAorI2lmZGVmIENPTkZJR19JTlBVVF9QQ1NQS1IKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KK3N0YXRpYyBfX2luaXQgaW50IGFkZF9wY3Nwa3Iodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKwlpbnQgcmV0OworCisJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInBjc3BrciIsIC0xKTsKKwlpZiAoIXBkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQocGQpOworCisJcmV0dXJuIHJldDsKK30KK2RldmljZV9pbml0Y2FsbChhZGRfcGNzcGtyKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKaW5kZXggZWFiZGI2M2YuLjhhNjkxZmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYwpAQCAtNTUsNyArNTUsNyBAQAogCQlkb19ub3RfbnggPSAxOwogCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CiAgICAgICAgIH0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0gCiBfX3NldHVwKCJub2V4ZWM9Iiwgbm9ueF9zZXR1cCk7CS8qIHBhcnNlZCBlYXJseSBhY3R1YWxseSAqLwogCkBAIC03NCw3ICs3NCw3IEBACiAJCWZvcmNlX3BlcnNvbmFsaXR5MzIgJj0gflJFQURfSU1QTElFU19FWEVDOwogCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAib2ZmIikpCiAJCWZvcmNlX3BlcnNvbmFsaXR5MzIgfD0gUkVBRF9JTVBMSUVTX0VYRUM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub2V4ZWMzMj0iLCBub254MzJfc2V0dXApOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCBlYTQ4ZmE2Li43MWE3MjIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKQEAgLTM1Myw3ICszNTMsNyBAQAogc3RhdGljIF9faW5pdCBpbnQgbm90c2NzeW5jX3NldHVwKGNoYXIgKnMpCiB7CiAJbm90c2NzeW5jID0gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vdHNjc3luYyIsIG5vdHNjc3luY19zZXR1cCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCmluZGV4IDQ3M2I1MTQuLjczOTI1NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJdW5zaWduZWQgaW50IAkJbnRpbWVyOwogCiAJaWYgKCF2eHRpbWUuaHBldF9hZGRyZXNzKQotICAgICAgICAJcmV0dXJuIC0xOworICAgICAgICAJcmV0dXJuIDA7CiAKIAltZW1zZXQoJmhkLCAwLCBzaXplb2YgKGhkKSk7CiAKQEAgLTkxNyw2ICs5MTcsOCBAQAogCQl2eHRpbWUuaHBldF9hZGRyZXNzID0gMDsKIAogCWlmIChocGV0X3VzZV90aW1lcikgeworCQkvKiBzZXQgdGlja19uc2VjIHRvIHVzZSB0aGUgcHJvcGVyIHJhdGUgZm9yIEhQRVQgKi8KKwkgIAl0aWNrX25zZWMgPSBUSUNLX05TRUNfSFBFVDsKIAkJY3B1X2toeiA9IGhwZXRfY2FsaWJyYXRlX3RzYygpOwogCQl0aW1lbmFtZSA9ICJIUEVUIjsKICNpZmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCkBAIC0xMzA2LDcgKzEzMDgsNyBAQAogc3RhdGljIGludCBfX2luaXQgbm9ocGV0X3NldHVwKGNoYXIgKnMpIAogeyAKIAlub2hwZXQgPSAxOwotCXJldHVybiAwOworCXJldHVybiAxOwogfSAKIAogX19zZXR1cCgibm9ocGV0Iiwgbm9ocGV0X3NldHVwKTsKQEAgLTEzMTQsNyArMTMxNiw3IEBACiBpbnQgX19pbml0IG5vdHNjX3NldHVwKGNoYXIgKnMpCiB7CiAJbm90c2MgPSAxOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBfX3NldHVwKCJub3RzYyIsIG5vdHNjX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZWRhYTlmZS4uY2VhMzM1ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMDEsNiArMTAyLDggQEAKIHsKIAlpZiAocmVncy0+ZWZsYWdzICYgWDg2X0VGTEFHU19JRikKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkvKiBNYWtlIHN1cmUgdG8gbm90IHNjaGVkdWxlIGhlcmUgYmVjYXVzZSB3ZSBjb3VsZCBiZSBydW5uaW5nCisJICAgb24gYW4gZXhjZXB0aW9uIHN0YWNrLiAqLwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIH0KIApAQCAtMzg0LDYgKzM4Nyw3IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGllX2xvY2spOwogc3RhdGljIGludCBkaWVfb3duZXIgPSAtMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGllX25lc3RfY291bnQ7CiAKIHVuc2lnbmVkIF9fa3Byb2JlcyBsb25nIG9vcHNfYmVnaW4odm9pZCkKIHsKQEAgLTM5OCw2ICs0MDIsNyBAQAogCQllbHNlCiAJCQlzcGluX2xvY2soJmRpZV9sb2NrKTsKIAl9CisJZGllX25lc3RfY291bnQrKzsKIAlkaWVfb3duZXIgPSBjcHU7CiAJY29uc29sZV92ZXJib3NlKCk7CiAJYnVzdF9zcGlubG9ja3MoMSk7CkBAIC00MDgsNyArNDEzLDEzIEBACiB7IAogCWRpZV9vd25lciA9IC0xOwogCWJ1c3Rfc3BpbmxvY2tzKDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZV9sb2NrLCBmbGFncyk7CisJZGllX25lc3RfY291bnQtLTsKKwlpZiAoZGllX25lc3RfY291bnQpCisJCS8qIFdlIHN0aWxsIG93biB0aGUgbG9jayAqLworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZWxzZQorCQkvKiBOZXN0IGNvdW50IHJlYWNoZXMgemVybywgcmVsZWFzZSB0aGUgbG9jay4gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGllX2xvY2ssIGZsYWdzKTsKIAlpZiAocGFuaWNfb25fb29wcykKIAkJcGFuaWMoIk9vcHMiKTsKIH0KQEAgLTQzMyw2ICs0NDQsOCBAQAogCXByaW50ayhLRVJOX0FMRVJUICJSSVAgIik7CiAJcHJpbnRrX2FkZHJlc3MocmVncy0+cmlwKTsgCiAJcHJpbnRrKCIgUlNQIDwlMDE2bHg+XG4iLCByZWdzLT5yc3ApOyAKKwlpZiAoa2V4ZWNfc2hvdWxkX2NyYXNoKGN1cnJlbnQpKQorCQljcmFzaF9rZXhlYyhyZWdzKTsKIH0KIAogdm9pZCBkaWUoY29uc3QgY2hhciAqIHN0ciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycikKQEAgLTQ1NSwxMCArNDY4LDE0IEBACiAJICovCiAJcHJpbnRrKHN0ciwgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCkpOwogCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOworCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCisJCWNyYXNoX2tleGVjKHJlZ3MpOwogCWlmIChwYW5pY19vbl90aW1lb3V0IHx8IHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJubWkgd2F0Y2hkb2ciKTsKIAlwcmludGsoImNvbnNvbGUgc2h1dHMgdXAgLi4uXG4iKTsKIAlvb3BzX2VuZChmbGFncyk7CisJbm1pX2V4aXQoKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIApAQCAtNDY4LDggKzQ4NSw2IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwotCiAJdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CiAJdHNrLT50aHJlYWQudHJhcF9ubyA9IHRyYXBucjsKIApAQCAtNTA2LDYgKzUyMSw3IEBACiAJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgdHJhcG5yLCBzaWducikgXAogCQkJCQkJCT09IE5PVElGWV9TVE9QKSBcCiAJCXJldHVybjsgXAorCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsJCQkJCQlcCiAJZG9fdHJhcCh0cmFwbnIsIHNpZ25yLCBzdHIsIHJlZ3MsIGVycm9yX2NvZGUsIE5VTEwpOyBcCiB9CiAKQEAgLTUyMCw2ICs1MzYsNyBAQAogCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGVycm9yX2NvZGUsIHRyYXBuciwgc2lnbnIpIFwKIAkJCQkJCQk9PSBOT1RJRllfU1RPUCkgXAogCQlyZXR1cm47IFwKKwljb25kaXRpb25hbF9zdGkocmVncyk7CQkJCQkJXAogCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCAmaW5mbyk7IFwKIH0KIApAQCAtNTMzLDcgKzU1MCwxNyBAQAogRE9fRVJST1IoMTEsIFNJR0JVUywgICJzZWdtZW50IG5vdCBwcmVzZW50Iiwgc2VnbWVudF9ub3RfcHJlc2VudCkKIERPX0VSUk9SX0lORk8oMTcsIFNJR0JVUywgImFsaWdubWVudCBjaGVjayIsIGFsaWdubWVudF9jaGVjaywgQlVTX0FEUkFMTiwgMCkKIERPX0VSUk9SKDE4LCBTSUdTRUdWLCAicmVzZXJ2ZWQiLCByZXNlcnZlZCkKLURPX0VSUk9SKDEyLCBTSUdCVVMsICAic3RhY2sgc2VnbWVudCIsIHN0YWNrX3NlZ21lbnQpCisKKy8qIFJ1bnMgb24gSVNUIHN0YWNrICovCithc21saW5rYWdlIHZvaWQgZG9fc3RhY2tfc2VnbWVudChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQoreworCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAic3RhY2sgc2VnbWVudCIsIHJlZ3MsIGVycm9yX2NvZGUsCisJCQkxMiwgU0lHQlVTKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCXByZWVtcHRfY29uZGl0aW9uYWxfc3RpKHJlZ3MpOworCWRvX3RyYXAoMTIsIFNJR0JVUywgInN0YWNrIHNlZ21lbnQiLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsKKwlwcmVlbXB0X2NvbmRpdGlvbmFsX2NsaShyZWdzKTsKK30KIAogYXNtbGlua2FnZSB2b2lkIGRvX2RvdWJsZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKIHsKQEAgLTY2Nyw4ICs2OTQsOSBAQAogCWlmIChub3RpZnlfZGllKERJRV9JTlQzLCAiaW50MyIsIHJlZ3MsIGVycm9yX2NvZGUsIDMsIFNJR1RSQVApID09IE5PVElGWV9TVE9QKSB7CiAJCXJldHVybjsKIAl9CisJcHJlZW1wdF9jb25kaXRpb25hbF9zdGkocmVncyk7CiAJZG9fdHJhcCgzLCBTSUdUUkFQLCAiaW50MyIsIHJlZ3MsIGVycm9yX2NvZGUsIE5VTEwpOwotCXJldHVybjsKKwlwcmVlbXB0X2NvbmRpdGlvbmFsX2NsaShyZWdzKTsKIH0KIAogLyogSGVscCBoYW5kbGVyIHJ1bm5pbmcgb24gSVNUIHN0YWNrIHRvIHN3aXRjaCBiYWNrIHRvIHVzZXIgc3RhY2sKQEAgLTk3MywxNCArMTAwMSwxNCBAQAogc3RhdGljIGludCBfX2luaXQgb29wc19kdW1teShjaGFyICpzKQogeyAKIAlwYW5pY19vbl9vb3BzID0gMTsKLQlyZXR1cm4gLTE7IAorCXJldHVybiAxOwogfSAKIF9fc2V0dXAoIm9vcHM9Iiwgb29wc19kdW1teSk7IAogCiBzdGF0aWMgaW50IF9faW5pdCBrc3RhY2tfc2V0dXAoY2hhciAqcykKIHsKIAlrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSBzaW1wbGVfc3RydG91bChzLE5VTEwsMCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJrc3RhY2s9Iiwga3N0YWNrX3NldHVwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAzOWZmMDcwLi5iODFmNDczIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjUsNyArNjUsNyBAQAogICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IEFUKEFERFIoLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKIAkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQogICB9Ci0gIC4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKKyAgLiA9IEFMSUdOKENPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTKTsKICAgLmRhdGEucmVhZF9tb3N0bHkgOiBBVChBRERSKC5kYXRhLnJlYWRfbW9zdGx5KSAtIExPQURfT0ZGU0VUKSB7CiAgIAkqKC5kYXRhLnJlYWRfbW9zdGx5KQogICB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCmluZGV4IGQ5NmE5MzQuLjFkZWYyMWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCkBAIC0xMDIsOCArMTAyLDYgQEAKIEVYUE9SVF9TWU1CT0woc2NyZWVuX2luZm8pOwogI2VuZGlmCiAKLUVYUE9SVF9TWU1CT0woZ2V0X3djaGFuKTsKLQogRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHNldF9ubWlfY2FsbGJhY2spOwpAQCAtMTE0LDcgKzExMiw2IEBACiAjdW5kZWYgbWVtY3B5CiAjdW5kZWYgbWVtc2V0CiAjdW5kZWYgbWVtbW92ZQotI3VuZGVmIHN0cmxlbgogCiBleHRlcm4gdm9pZCAqIG1lbXNldCh2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7CiBleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOwpAQCAtMTIzLDggKzEyMCw2IEBACiBleHRlcm4gdm9pZCAqIF9fbWVtY3B5KHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKIAogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwotRVhQT1JUX1NZTUJPTChzdHJsZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7CiBFWFBPUlRfU1lNQk9MKG1lbWNweSk7CiBFWFBPUlRfU1lNQk9MKF9fbWVtY3B5KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL2ZhdWx0LmMgYi9hcmNoL3g4Nl82NC9tbS9mYXVsdC5jCmluZGV4IDMxNmM1M2QuLjU1MjUwNTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODZfNjQvbW0vZmF1bHQuYwpAQCAtNjIzLDYgKzYyMyw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfcGFnZWZhdWx0dHJhY2UoY2hhciAqc3RyKQogewogCXBhZ2VfZmF1bHRfdHJhY2UgPSAxOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogX19zZXR1cCgicGFnZWZhdWx0dHJhY2UiLCBlbmFibGVfcGFnZWZhdWx0dHJhY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vaW5pdC5jIGIvYXJjaC94ODZfNjQvbW0vaW5pdC5jCmluZGV4IGU1ZjdmMWMuLjRiYTM0ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL2luaXQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9pbml0LmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQlpZiAocGFkZHIgPj0gZW5kKQogCQkJYnJlYWs7CiAKLQkJaWYgKCFhZnRlcl9ib290bWVtICYmICFlODIwX21hcHBlZChwYWRkciwgcGFkZHIrUFVEX1NJWkUsIDApKSB7CisJCWlmICghYWZ0ZXJfYm9vdG1lbSAmJiAhZTgyMF9hbnlfbWFwcGVkKHBhZGRyLCBwYWRkcitQVURfU0laRSwgMCkpIHsKIAkJCXNldF9wdWQocHVkLCBfX3B1ZCgwKSk7IAogCQkJY29udGludWU7CiAJCX0gCkBAIC01MDcsOSArNTA3LDggQEAKIAogLyoKICAqIE1lbW9yeSBob3RwbHVnIHNwZWNpZmljIGZ1bmN0aW9ucwotICogVGhlc2UgYXJlIG9ubHkgZm9yIG5vbi1OVU1BIG1hY2hpbmVzIHJpZ2h0IG5vdy4KICAqLwotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworI2lmIGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpIHx8IGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUllfTU9EVUxFKQogCiB2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtNTIwLDYgKzUxOSwzOCBAQAogCW51bV9waHlzcGFnZXMrKzsKIH0KIAorI2lmbmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKKy8qCisgKiBNZW1vcnkgSG90YWRkIHdpdGhvdXQgc3BhcnNlbWVtLiBUaGUgbWVtX21hcHMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiBhZHZhbmNlLAorICoganVzdCBvbmxpbmUgdGhlIHBhZ2VzLgorICovCitpbnQgX19hZGRfcGFnZXMoc3RydWN0IHpvbmUgKnosIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCWludCBlcnIgPSAtRUlPOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwLCBtZW0gPSAwOworCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gPCBzdGFydF9wZm4gKyBucl9wYWdlczsgcGZuKyspIHsKKwkJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCQlvbmxpbmVfcGFnZShwZm5fdG9fcGFnZShwZm4pKTsKKwkJCWVyciA9IDA7CisJCQltZW0rKzsKKwkJfQorCQl0b3RhbCsrOworCX0KKwlpZiAoIWVycikgeworCQl6LT5zcGFubmVkX3BhZ2VzICs9IHRvdGFsOworCQl6LT5wcmVzZW50X3BhZ2VzICs9IG1lbTsKKwkJei0+em9uZV9wZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzICs9IHRvdGFsOworCQl6LT56b25lX3BnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXMgKz0gbWVtOworCX0KKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qCisgKiBNZW1vcnkgaXMgYWRkZWQgYWx3YXlzIHRvIE5PUk1BTCB6b25lLiBUaGlzIG1lYW5zIHlvdSB3aWxsIG5ldmVyIGdldAorICogYWRkaXRpb25hbCBETUEvRE1BMzIgbWVtb3J5LgorICovCiBpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEoMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9udW1hLmMgYi9hcmNoL3g4Nl82NC9tbS9udW1hLmMKaW5kZXggNGJlODJkNi4uYjJmYWMxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vbnVtYS5jCisrKyBiL2FyY2gveDg2XzY0L21tL251bWEuYwpAQCAtMTAwLDExICsxMDAsMzAgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCAqIF9faW5pdAorZWFybHlfbm9kZV9tZW0oaW50IG5vZGVpZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbWVtID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIGVuZCwgc2l6ZSk7CisJdm9pZCAqcHRyOworCWlmIChtZW0gIT0gLTFMKQorCQlyZXR1cm4gX192YShtZW0pOworCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsCisJCQkJU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmIChwdHIgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBmaW5kICVsdSBieXRlcyBpbiBub2RlICVkXG4iLAorCQkJc2l6ZSwgbm9kZWlkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBwdHI7Cit9CisKIC8qIEluaXRpYWxpemUgYm9vdG1lbSBhbGxvY2F0b3IgZm9yIGEgbm9kZSAqLwogdm9pZCBfX2luaXQgc2V0dXBfbm9kZV9ib290bWVtKGludCBub2RlaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogeyAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgYm9vdG1hcF9wYWdlcywgYm9vdG1hcF9zaXplLCBib290bWFwX3N0YXJ0OyAKIAl1bnNpZ25lZCBsb25nIG5vZGVkYXRhX3BoeXM7CisJdm9pZCAqYm9vdG1hcDsKIAljb25zdCBpbnQgcGdkYXRfc2l6ZSA9IHJvdW5kX3VwKHNpemVvZihwZ19kYXRhX3QpLCBQQUdFX1NJWkUpOwogCiAJc3RhcnQgPSByb3VuZF91cChzdGFydCwgWk9ORV9BTElHTik7IApAQCAtMTE0LDEzICsxMzMsMTEgQEAKIAlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwogCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKIAotCW5vZGVkYXRhX3BoeXMgPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCBwZ2RhdF9zaXplKTsgCi0JaWYgKG5vZGVkYXRhX3BoeXMgPT0gLTFMKSAKLQkJcGFuaWMoIkNhbm5vdCBmaW5kIG1lbW9yeSBwZ2RhdCBpbiBub2RlICVkXG4iLCBub2RlaWQpOworCW5vZGVfZGF0YVtub2RlaWRdID0gZWFybHlfbm9kZV9tZW0obm9kZWlkLCBzdGFydCwgZW5kLCBwZ2RhdF9zaXplKTsKKwlpZiAobm9kZV9kYXRhW25vZGVpZF0gPT0gTlVMTCkKKwkJcmV0dXJuOworCW5vZGVkYXRhX3BoeXMgPSBfX3BhKG5vZGVfZGF0YVtub2RlaWRdKTsKIAotCURwcmludGsoIm5vZGVkYXRhX3BoeXMgJWx4XG4iLCBub2RlZGF0YV9waHlzKTsgCi0KLQlub2RlX2RhdGFbbm9kZWlkXSA9IHBoeXNfdG9fdmlydChub2RlZGF0YV9waHlzKTsKIAltZW1zZXQoTk9ERV9EQVRBKG5vZGVpZCksIDAsIHNpemVvZihwZ19kYXRhX3QpKTsKIAlOT0RFX0RBVEEobm9kZWlkKS0+YmRhdGEgPSAmcGxhdF9ub2RlX2JkYXRhW25vZGVpZF07CiAJTk9ERV9EQVRBKG5vZGVpZCktPm5vZGVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOwpAQCAtMTI5LDkgKzE0NiwxNSBAQAogCS8qIEZpbmQgYSBwbGFjZSBmb3IgdGhlIGJvb3RtZW0gbWFwICovCiAJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhlbmRfcGZuIC0gc3RhcnRfcGZuKTsgCiAJYm9vdG1hcF9zdGFydCA9IHJvdW5kX3VwKG5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplLCBQQUdFX1NJWkUpOwotCWJvb3RtYXBfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYShib290bWFwX3N0YXJ0LCBlbmQsIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQpOwotCWlmIChib290bWFwX3N0YXJ0ID09IC0xTCkgCi0JCXBhbmljKCJOb3QgZW5vdWdoIGNvbnRpbnVvdXMgc3BhY2UgZm9yIGJvb3RtYXAgb24gbm9kZSAlZCIsIG5vZGVpZCk7IAorCWJvb3RtYXAgPSBlYXJseV9ub2RlX21lbShub2RlaWQsIGJvb3RtYXBfc3RhcnQsIGVuZCwKKwkJCQkJYm9vdG1hcF9wYWdlczw8UEFHRV9TSElGVCk7CisJaWYgKGJvb3RtYXAgPT0gTlVMTCkgIHsKKwkJaWYgKG5vZGVkYXRhX3BoeXMgPCBzdGFydCB8fCBub2RlZGF0YV9waHlzID49IGVuZCkKKwkJCWZyZWVfYm9vdG1lbSgodW5zaWduZWQgbG9uZylub2RlX2RhdGFbbm9kZWlkXSxwZ2RhdF9zaXplKTsKKwkJbm9kZV9kYXRhW25vZGVpZF0gPSBOVUxMOworCQlyZXR1cm47CisJfQorCWJvb3RtYXBfc3RhcnQgPSBfX3BhKGJvb3RtYXApOwogCURwcmludGsoImJvb3RtYXAgc3RhcnQgJWx1IHBhZ2VzICVsdVxuIiwgYm9vdG1hcF9zdGFydCwgYm9vdG1hcF9wYWdlcyk7IAogCQogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLApAQCAtMTQyLDYgKzE2NSw5IEBACiAKIAlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgbm9kZWRhdGFfcGh5cywgcGdkYXRfc2l6ZSk7IAogCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLCBib290bWFwX3N0YXJ0LCBib290bWFwX3BhZ2VzPDxQQUdFX1NISUZUKTsKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJc3JhdF9yZXNlcnZlX2FkZF9hcmVhKG5vZGVpZCk7CisjZW5kaWYKIAlub2RlX3NldF9vbmxpbmUobm9kZWlkKTsKIH0gCiAKQEAgLTE2MiwxMSArMTg4LDEzIEBACiAJICAgbWVtb3J5LiAqLwogCW1lbW1hcHNpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2UpICogKGVuZF9wZm4tc3RhcnRfcGZuKTsKIAlsaW1pdCA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKKyNpZmRlZiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVAKIAlOT0RFX0RBVEEobm9kZWlkKS0+bm9kZV9tZW1fbWFwID0gCiAJCV9fYWxsb2NfYm9vdG1lbV9jb3JlKE5PREVfREFUQShub2RlaWQpLT5iZGF0YSwgCiAJCQkJbWVtbWFwc2l6ZSwgU01QX0NBQ0hFX0JZVEVTLCAKIAkJCQlyb3VuZF9kb3duKGxpbWl0IC0gbWVtbWFwc2l6ZSwgUEFHRV9TSVpFKSwgCiAJCQkJbGltaXQpOworI2VuZGlmCiAKIAlzaXplX3pvbmVzKHpvbmVzLCBob2xlcywgc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAlmcmVlX2FyZWFfaW5pdF9ub2RlKG5vZGVpZCwgTk9ERV9EQVRBKG5vZGVpZCksIHpvbmVzLApAQCAtMzM1LDYgKzM2Myw4IEBACiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQogIAlpZiAoIXN0cm5jbXAob3B0LCJub2FjcGkiLDYpKQogIAkJYWNwaV9udW1hID0gLTE7CisJaWYgKCFzdHJuY21wKG9wdCwiaG90YWRkPSIsIDcpKQorCQlob3RhZGRfcGVyY2VudCA9IHNpbXBsZV9zdHJ0b3VsKG9wdCs3LCBOVUxMLCAxMCk7CiAjZW5kaWYKIAlyZXR1cm4gMTsKIH0gCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9zcmF0LmMgYi9hcmNoL3g4Nl82NC9tbS9zcmF0LmMKaW5kZXggMmViODc5NS4uNDc0ZGYyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vc3JhdC5jCisrKyBiL2FyY2gveDg2XzY0L21tL3NyYXQuYwpAQCAtMTUsMTUgKzE1LDI5IEBACiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAKKyNpZiAoZGVmaW5lZChDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWSkgfHwgXAorCWRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUllfTU9EVUxFKSkgXAorCQkmJiAhZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpCisjZGVmaW5lIFJFU0VSVkVfSE9UQUREIDEKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfc2xpdCAqYWNwaV9zbGl0OwogCiBzdGF0aWMgbm9kZW1hc2tfdCBub2Rlc19wYXJzZWQgX19pbml0ZGF0YTsKIHN0YXRpYyBub2RlbWFza190IG5vZGVzX2ZvdW5kIF9faW5pdGRhdGE7CiBzdGF0aWMgc3RydWN0IGJvb3Rub2RlIG5vZGVzW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgYm9vdG5vZGUgbm9kZXNfYWRkW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTsKK3N0YXRpYyBpbnQgZm91bmRfYWRkX2FyZWEgX19pbml0ZGF0YTsKK2ludCBob3RhZGRfcGVyY2VudCBfX2luaXRkYXRhID0gMDsKKyNpZm5kZWYgUkVTRVJWRV9IT1RBREQKKyNkZWZpbmUgaG90YWRkX3BlcmNlbnQgMAkvKiBJZ25vcmUgYWxsIHNldHRpbmdzICovCisjZW5kaWYKIHN0YXRpYyB1OCBweG0ybm9kZVsyNTZdID0geyBbMCAuLi4gMjU1XSA9IDB4ZmYgfTsKIAogLyogVG9vIHNtYWxsIG5vZGVzIGNvbmZ1c2UgdGhlIFZNIGJhZGx5LiBVc3VhbGx5IHRoZXkgcmVzdWx0CkBAIC03MSw2ICs4NSwxMCBAQAogc3RhdGljIF9faW5pdCB2b2lkIGN1dG9mZl9ub2RlKGludCBpLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgYm9vdG5vZGUgKm5kID0gJm5vZGVzW2ldOworCisJaWYgKGZvdW5kX2FkZF9hcmVhKQorCQlyZXR1cm47CisKIAlpZiAobmQtPnN0YXJ0IDwgc3RhcnQpIHsKIAkJbmQtPnN0YXJ0ID0gc3RhcnQ7CiAJCWlmIChuZC0+ZW5kIDwgbmQtPnN0YXJ0KQpAQCAtODgsOCArMTA2LDExIEBACiAJaW50IGk7CiAJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBTUkFUIG5vdCB1c2VkLlxuIik7CiAJYWNwaV9udW1hID0gLTE7CisJZm91bmRfYWRkX2FyZWEgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTE9DQUxfQVBJQzsgaSsrKQogCQlhcGljaWRfdG9fbm9kZVtpXSA9IE5VTUFfTk9fTk9ERTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspCisJCW5vZGVzX2FkZFtpXS5zdGFydCA9IG5vZGVzW2ldLmVuZCA9IDA7CiB9CiAKIHN0YXRpYyBfX2luaXQgaW5saW5lIGludCBzcmF0X2Rpc2FibGVkKHZvaWQpCkBAIC0xMzcsNyArMTU4LDggQEAKIAlpbnQgcHhtLCBub2RlOwogCWlmIChzcmF0X2Rpc2FibGVkKCkpCiAJCXJldHVybjsKLQlpZiAocGEtPmhlYWRlci5sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3Byb2Nlc3Nvcl9hZmZpbml0eSkpIHsJCWJhZF9zcmF0KCk7CisJaWYgKHBhLT5oZWFkZXIubGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9wcm9jZXNzb3JfYWZmaW5pdHkpKSB7CisJCWJhZF9zcmF0KCk7CiAJCXJldHVybjsKIAl9CiAJaWYgKHBhLT5mbGFncy5lbmFibGVkID09IDApCkBAIC0xNTUsMTEgKzE3NywxMTYgQEAKIAkgICAgICAgcHhtLCBwYS0+YXBpY19pZCwgbm9kZSk7CiB9CiAKKyNpZmRlZiBSRVNFUlZFX0hPVEFERAorLyoKKyAqIFByb3RlY3QgYWdhaW5zdCB0b28gbGFyZ2UgaG90YWRkIGFyZWFzIHRoYXQgd291bGQgZmlsbCB1cCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgaG90YWRkX2Vub3VnaF9tZW1vcnkoc3RydWN0IGJvb3Rub2RlICpuZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY2F0ZWQ7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9hcmVhX2VuZDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzID0gKG5kLT5lbmQgLSBuZC0+c3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJbG9uZyBtZW0gPSBwYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgYWxsb3dlZDsKKwl1bnNpZ25lZCBsb25nIG9sZHBhZ2VzID0gcGFnZXM7CisKKwlpZiAobWVtIDwgMCkKKwkJcmV0dXJuIDA7CisJYWxsb3dlZCA9IChlbmRfcGZuIC0gZTgyMF9ob2xlX3NpemUoMCwgZW5kX3BmbikpICogUEFHRV9TSVpFOworCWFsbG93ZWQgPSAoYWxsb3dlZCAvIDEwMCkgKiBob3RhZGRfcGVyY2VudDsKKwlpZiAoYWxsb2NhdGVkICsgbWVtID4gYWxsb3dlZCkgeworCQl1bnNpZ25lZCBsb25nIHJhbmdlOworCQkvKiBHaXZlIHRoZW0gYXQgbGVhc3QgcGFydCBvZiB0aGVpciBob3RhZGQgbWVtb3J5IHVwdG8gaG90YWRkX3BlcmNlbnQKKwkJICAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHNwcmVhZCB0aGUgbGltaXQgb3V0CisJCSAgIG92ZXIgbXVsdGlwbGUgaG90cGx1ZyBhcmVhcywgYnV0IHRoYXQgaXMgdG9vIGNvbXBsaWNhdGVkCisJCSAgIHJpZ2h0IG5vdyAqLworCQlpZiAoYWxsb2NhdGVkID49IGFsbG93ZWQpCisJCQlyZXR1cm4gMDsKKwkJcmFuZ2UgPSBhbGxvd2VkIC0gYWxsb2NhdGVkOworCQlwYWdlcyA9IChyYW5nZSAvIFBBR0VfU0laRSk7CisJCW1lbSA9IHBhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlKTsKKwkJbmQtPmVuZCA9IG5kLT5zdGFydCArIHJhbmdlOworCX0KKwkvKiBOb3QgY29tcGxldGVseSBmb29sIHByb29mLCBidXQgYSBnb29kIHNhbml0eSBjaGVjayAqLworCWFkZHIgPSBmaW5kX2U4MjBfYXJlYShsYXN0X2FyZWFfZW5kLCBlbmRfcGZuPDxQQUdFX1NISUZULCBtZW0pOworCWlmIChhZGRyID09IC0xVUwpCisJCXJldHVybiAwOworCWlmIChwYWdlcyAhPSBvbGRwYWdlcykKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJTUkFUOiBIb3RhZGQgYXJlYSBsaW1pdGVkIHRvICVsdSBieXRlc1xuIiwKKwkJCXBhZ2VzIDw8IFBBR0VfU0hJRlQpOworCWxhc3RfYXJlYV9lbmQgPSBhZGRyICsgbWVtOworCWFsbG9jYXRlZCArPSBtZW07CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJdCBpcyBmaW5lIHRvIGFkZCB0aGlzIGFyZWEgdG8gdGhlIG5vZGVzIGRhdGEgaXQgd2lsbCBiZSB1c2VkIGxhdGVyCisgKiBUaGlzIGNvZGUgc3VwcG9ydHMgb25lIGNvbnRpZ2lvdXMgaG90IGFkZCBhcmVhIHBlciBub2RlLgorICovCitzdGF0aWMgaW50IHJlc2VydmVfaG90YWRkKGludCBub2RlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGVfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisJaW50IGNoYW5nZWQgPSAwOworCXN0cnVjdCBib290bm9kZSAqbmQgPSAmbm9kZXNfYWRkW25vZGVdOworCisJLyogSSBoYWQgc29tZSB0cm91YmxlIHdpdGggc3RyYW5nZSBtZW1vcnkgaG90YWRkIHJlZ2lvbnMgYnJlYWtpbmcKKwkgICB0aGUgYm9vdC4gQmUgdmVyeSBzdHJpY3QgaGVyZSBhbmQgcmVqZWN0IGFueXRoaW5nIHVuZXhwZWN0ZWQuCisJICAgSWYgeW91IHdhbnQgd29ya2luZyBtZW1vcnkgaG90YWRkIHdyaXRlIGNvcnJlY3QgU1JBVHMuCisKKwkgICBUaGUgbm9kZSBzaXplIGNoZWNrIGlzIGEgYmFzaWMgc2FuaXR5IGNoZWNrIHRvIGd1YXJkIGFnYWluc3QKKwkgICBtaXN0YWtlcyAqLworCWlmICgoc2lnbmVkIGxvbmcpKGVuZCAtIHN0YXJ0KSA8IE5PREVfTUlOX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBIb3RwbHVnIGFyZWEgdG9vIHNtYWxsXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFRoaXMgY2hlY2sgbWlnaHQgYmUgYSBiaXQgdG9vIHN0cmljdCwgYnV0IEknbSBrZWVwaW5nIGl0IGZvciBub3cuICovCisJaWYgKGU4MjBfaG9sZV9zaXplKHNfcGZuLCBlX3BmbikgIT0gZV9wZm4gLSBzX3BmbikgeworCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgYXJlYSBoYXMgZXhpc3RpbmcgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghaG90YWRkX2Vub3VnaF9tZW1vcnkoJm5vZGVzX2FkZFtub2RlXSkpICB7CisJCXByaW50ayhLRVJOX0VSUiAiU1JBVDogSG90cGx1ZyBhcmVhIHRvbyBsYXJnZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBMb29rcyBnb29kICovCisKKyAJZm91bmRfYWRkX2FyZWEgPSAxOworCWlmIChuZC0+c3RhcnQgPT0gbmQtPmVuZCkgeworIAkJbmQtPnN0YXJ0ID0gc3RhcnQ7CisgCQluZC0+ZW5kID0gZW5kOworCQljaGFuZ2VkID0gMTsKKyAJfSBlbHNlIHsKKyAJCWlmIChuZC0+c3RhcnQgPT0gZW5kKSB7CisgCQkJbmQtPnN0YXJ0ID0gc3RhcnQ7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorIAkJaWYgKG5kLT5lbmQgPT0gc3RhcnQpIHsKKyAJCQluZC0+ZW5kID0gZW5kOworCQkJY2hhbmdlZCA9IDE7CisJCX0KKwkJaWYgKCFjaGFuZ2VkKQorCQkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBIb3RwbHVnIHpvbmUgbm90IGNvbnRpbnVvdXMuIFBhcnRseSBpZ25vcmVkXG4iKTsKKyAJfQorCisgCWlmICgobmQtPmVuZCA+PiBQQUdFX1NISUZUKSA+IGVuZF9wZm4pCisgCQllbmRfcGZuID0gbmQtPmVuZCA+PiBQQUdFX1NISUZUOworCisJaWYgKGNoYW5nZWQpCisJIAlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBob3QgcGx1ZyB6b25lIGZvdW5kICVMeCAtICVMeFxuIiwgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAvKiBDYWxsYmFjayBmb3IgcGFyc2luZyBvZiB0aGUgUHJveGltaXR5IERvbWFpbiA8LT4gTWVtb3J5IEFyZWEgbWFwcGluZ3MgKi8KIHZvaWQgX19pbml0CiBhY3BpX251bWFfbWVtb3J5X2FmZmluaXR5X2luaXQoc3RydWN0IGFjcGlfdGFibGVfbWVtb3J5X2FmZmluaXR5ICptYSkKIHsKLQlzdHJ1Y3QgYm9vdG5vZGUgKm5kOworCXN0cnVjdCBib290bm9kZSAqbmQsIG9sZG5vZGU7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCWludCBub2RlLCBweG07CiAJaW50IGk7CkBAIC0xNzIsNiArMjk5LDggQEAKIAl9CiAJaWYgKG1hLT5mbGFncy5lbmFibGVkID09IDApCiAJCXJldHVybjsKKyAJaWYgKG1hLT5mbGFncy5ob3RfcGx1Z2dhYmxlICYmIGhvdGFkZF9wZXJjZW50ID09IDApCisJCXJldHVybjsKIAlzdGFydCA9IG1hLT5iYXNlX2FkZHJfbG8gfCAoKHU2NCltYS0+YmFzZV9hZGRyX2hpIDw8IDMyKTsKIAllbmQgPSBzdGFydCArIChtYS0+bGVuZ3RoX2xvIHwgKCh1NjQpbWEtPmxlbmd0aF9oaSA8PCAzMikpOwogCXB4bSA9IG1hLT5wcm94aW1pdHlfZG9tYWluOwpAQCAtMTgxLDEwICszMTAsNiBAQAogCQliYWRfc3JhdCgpOwogCQlyZXR1cm47CiAJfQotCS8qIEl0IGlzIGZpbmUgdG8gYWRkIHRoaXMgYXJlYSB0byB0aGUgbm9kZXMgZGF0YSBpdCB3aWxsIGJlIHVzZWQgbGF0ZXIqLwotCWlmIChtYS0+ZmxhZ3MuaG90X3BsdWdnYWJsZSA9PSAxKQotCQlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBob3QgcGx1ZyB6b25lIGZvdW5kICVseCAtICVseCBcbiIsCi0JCQkJc3RhcnQsIGVuZCk7CiAJaSA9IGNvbmZsaWN0aW5nX25vZGVzKHN0YXJ0LCBlbmQpOwogCWlmIChpID09IG5vZGUpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTk5LDYgKzMyNCw3IEBACiAJCXJldHVybjsKIAl9CiAJbmQgPSAmbm9kZXNbbm9kZV07CisJb2xkbm9kZSA9ICpuZDsKIAlpZiAoIW5vZGVfdGVzdF9hbmRfc2V0KG5vZGUsIG5vZGVzX3BhcnNlZCkpIHsKIAkJbmQtPnN0YXJ0ID0gc3RhcnQ7CiAJCW5kLT5lbmQgPSBlbmQ7CkBAIC0yMDgsOCArMzM0LDE5IEBACiAJCWlmIChuZC0+ZW5kIDwgZW5kKQogCQkJbmQtPmVuZCA9IGVuZDsKIAl9CisKIAlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBOb2RlICV1IFBYTSAldSAlTHgtJUx4XG4iLCBub2RlLCBweG0sCiAJICAgICAgIG5kLT5zdGFydCwgbmQtPmVuZCk7CisKKyNpZmRlZiBSRVNFUlZFX0hPVEFERAorIAlpZiAobWEtPmZsYWdzLmhvdF9wbHVnZ2FibGUgJiYgcmVzZXJ2ZV9ob3RhZGQobm9kZSwgc3RhcnQsIGVuZCkgPCAwKSB7CisJCS8qIElnbm9yZSBob3RhZGQgcmVnaW9uLiBVbmRvIGRhbWFnZSAqLworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNSQVQ6IEhvdHBsdWcgcmVnaW9uIGlnbm9yZWRcbiIpOworCQkqbmQgPSBvbGRub2RlOworCQlpZiAoKG5kLT5zdGFydCB8IG5kLT5lbmQpID09IDApCisJCQlub2RlX2NsZWFyKG5vZGUsIG5vZGVzX3BhcnNlZCk7CisJfQorI2VuZGlmCiB9CiAKIC8qIFNhbml0eSBjaGVjayB0byBjYXRjaCBtb3JlIGJhZCBTUkFUcyAodGhleSBhcmUgYW1hemluZ2x5IGNvbW1vbikuCkBAIC0yMjUsNiArMzYyLDkgQEAKIAkJdW5zaWduZWQgbG9uZyBlID0gbm9kZXNbaV0uZW5kID4+IFBBR0VfU0hJRlQ7CiAJCXB4bXJhbSArPSBlIC0gczsKIAkJcHhtcmFtIC09IGU4MjBfaG9sZV9zaXplKHMsIGUpOworCQlweG1yYW0gLT0gbm9kZXNfYWRkW2ldLmVuZCAtIG5vZGVzX2FkZFtpXS5zdGFydDsKKwkJaWYgKChsb25nKXB4bXJhbSA8IDApCisJCQlweG1yYW0gPSAwOwogCX0KIAogCWU4MjByYW0gPSBlbmRfcGZuIC0gZTgyMF9ob2xlX3NpemUoMCwgZW5kX3Bmbik7CkBAIC0yNTgsOSArMzk4LDExIEBACiAKIAkvKiBGaXJzdCBjbGVhbiB1cCB0aGUgbm9kZSBsaXN0ICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKSB7Ci0JCWN1dG9mZl9ub2RlKGksIHN0YXJ0LCBlbmQpOwotCQlpZiAoKG5vZGVzW2ldLmVuZCAtIG5vZGVzW2ldLnN0YXJ0KSA8IE5PREVfTUlOX1NJWkUpCisgCQljdXRvZmZfbm9kZShpLCBzdGFydCwgZW5kKTsKKwkJaWYgKChub2Rlc1tpXS5lbmQgLSBub2Rlc1tpXS5zdGFydCkgPCBOT0RFX01JTl9TSVpFKSB7CiAJCQl1bnBhcnNlX25vZGUoaSk7CisJCQlub2RlX3NldF9vZmZsaW5lKGkpOworCQl9CiAJfQogCiAJaWYgKGFjcGlfbnVtYSA8PSAwKQpAQCAtMjgyLDYgKzQyNCwxMiBAQAogCS8qIEZpbmFsbHkgcmVnaXN0ZXIgbm9kZXMgKi8KIAlmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKQogCQlzZXR1cF9ub2RlX2Jvb3RtZW0oaSwgbm9kZXNbaV0uc3RhcnQsIG5vZGVzW2ldLmVuZCk7CisJLyogVHJ5IGFnYWluIGluIGNhc2Ugc2V0dXBfbm9kZV9ib290bWVtIG1pc3NlZCBvbmUgZHVlCisJICAgdG8gbWlzc2luZyBib290bWVtICovCisJZm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZCkKKwkJaWYgKCFub2RlX29ubGluZShpKSkKKwkJCXNldHVwX25vZGVfYm9vdG1lbShpLCBub2Rlc1tpXS5zdGFydCwgbm9kZXNbaV0uZW5kKTsKKwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsgCiAJCWlmIChjcHVfdG9fbm9kZVtpXSA9PSBOVU1BX05PX05PREUpCiAJCQljb250aW51ZTsKQEAgLTMwMyw2ICs0NTEsMjUgQEAKICAgICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBfX2luaXQgc3JhdF9yZXNlcnZlX2FkZF9hcmVhKGludCBub2RlaWQpCit7CisJaWYgKGZvdW5kX2FkZF9hcmVhICYmIG5vZGVzX2FkZFtub2RlaWRdLmVuZCkgeworCQl1NjQgdG90YWxfbWI7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDogUmVzZXJ2aW5nIGhvdC1hZGQgbWVtb3J5IHNwYWNlICIKKwkJCQkiZm9yIG5vZGUgJWQgYXQgJUx4LSVMeFxuIiwKKwkJCW5vZGVpZCwgbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQsIG5vZGVzX2FkZFtub2RlaWRdLmVuZCk7CisJCXRvdGFsX21iID0gKG5vZGVzX2FkZFtub2RlaWRdLmVuZCAtIG5vZGVzX2FkZFtub2RlaWRdLnN0YXJ0KQorCQkJCQk+PiBQQUdFX1NISUZUOworCQl0b3RhbF9tYiAqPSBzaXplb2Yoc3RydWN0IHBhZ2UpOworCQl0b3RhbF9tYiA+Pj0gMjA7CisJCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IFRoaXMgd2lsbCBjb3N0IHlvdSAlTHUgTUIgb2YgIgorCQkJCSJwcmUtYWxsb2NhdGVkIG1lbW9yeS5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxfbWIpOworCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQsCisJCQkgICAgICAgbm9kZXNfYWRkW25vZGVpZF0uZW5kIC0gbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQpOworCX0KK30KKwogaW50IF9fbm9kZV9kaXN0YW5jZShpbnQgYSwgaW50IGIpCiB7CiAJaW50IGluZGV4OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvcGNpL21tY29uZmlnLmMgYi9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYwppbmRleCBlNjE2NTAwLi5hMjA2MGU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYworKysgYi9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYwpAQCAtOSwxMSArOSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKwogI2luY2x1ZGUgInBjaS5oIgogCiAjZGVmaW5lIE1NQ09ORklHX0FQRVJfU0laRSAoMjU2KjEwMjQqMTAyNCkKKy8qIFZlcmlmeSB0aGUgZmlyc3QgMTYgYnVzc2VzLiBXZSBhc3N1bWUgdGhhdCBzeXN0ZW1zIHdpdGggbW9yZSBidXNzZXMKKyAgIGdldCBNQ0ZHIHJpZ2h0LiAqLworI2RlZmluZSBNQVhfQ0hFQ0tfQlVTIDE2CiAKLXN0YXRpYyBERUNMQVJFX0JJVE1BUChmYWxsYmFja19zbG90cywgMzIpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCAzMipNQVhfQ0hFQ0tfQlVTKTsKIAogLyogU3RhdGljIHZpcnR1YWwgbWFwcGluZyBvZiB0aGUgTU1DT05GSUcgYXBlcnR1cmUgKi8KIHN0cnVjdCBtbWNmZ192aXJ0IHsKQEAgLTU1LDcgKzYwLDggQEAKIHN0YXRpYyBjaGFyIF9faW9tZW0gKnBjaV9kZXZfYmFzZSh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pCiB7CiAJY2hhciBfX2lvbWVtICphZGRyOwotCWlmIChzZWcgPT0gMCAmJiBidXMgPT0gMCAmJiB0ZXN0X2JpdChQQ0lfU0xPVChkZXZmbiksIGZhbGxiYWNrX3Nsb3RzKSkKKwlpZiAoc2VnID09IDAgJiYgYnVzIDwgTUFYX0NIRUNLX0JVUyAmJgorCQl0ZXN0X2JpdCgzMipidXMgKyBQQ0lfU0xPVChkZXZmbiksIGZhbGxiYWNrX3Nsb3RzKSkKIAkJcmV0dXJuIE5VTEw7CiAJYWRkciA9IGdldF92aXJ0KHNlZywgYnVzKTsKIAlpZiAoIWFkZHIpCkBAIC02OSw4ICs3NSwxMCBAQAogCWNoYXIgX19pb21lbSAqYWRkcjsKIAogCS8qIFdoeSBkbyB3ZSBoYXZlIHRoaXMgd2hlbiBub2JvZHkgY2hlY2tzIGl0LiBIb3cgYWJvdXQgYSBCVUcoKSE/IC1BSyAqLwotCWlmICh1bmxpa2VseSghdmFsdWUgfHwgKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gNDA5NSkpKQorCWlmICh1bmxpa2VseSgoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiA0MDk1KSkpIHsKKwkJKnZhbHVlID0gLTE7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWFkZHIgPSBwY2lfZGV2X2Jhc2Uoc2VnLCBidXMsIGRldmZuKTsKIAlpZiAoIWFkZHIpCkBAIC0xMjksMjEgKzEzNywyNiBAQAogICAgTm9ybWFsbHkgdGhpcyBjYW4gYmUgZXhwcmVzc2VkIGluIHRoZSBNQ0ZHIGJ5IG5vdCBsaXN0aW5nIHRoZW0KICAgIGFuZCBhc3NpZ25pbmcgc3VpdGFibGUgX1NFR3MsIGJ1dCB0aGlzIGlzbid0IGltcGxlbWVudGVkIGluIHNvbWUgQklPUy4KICAgIEluc3RlYWQgdHJ5IHRvIGRpc2NvdmVyIGFsbCBkZXZpY2VzIG9uIGJ1cyAwIHRoYXQgYXJlIHVucmVhY2hhYmxlIHVzaW5nIE1NCi0gICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uCi0gICBXZSBvbmx5IGRvIHRoaXMgZm9yIGJ1cyAwL3NlZyAwICovCisgICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uICovCiBzdGF0aWMgX19pbml0IHZvaWQgdW5yZWFjaGFibGVfZGV2aWNlcyh2b2lkKQogewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiB2YWwxOwotCQljaGFyIF9faW9tZW0gKmFkZHI7CisJaW50IGksIGs7CisJLyogVXNlIHRoZSBtYXggYnVzIG51bWJlciBmcm9tIEFDUEkgaGVyZT8gKi8KKwlmb3IgKGsgPSAwOyBrIDwgTUFYX0NIRUNLX0JVUzsgaysrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQl1MzIgdmFsMTsKKwkJCWNoYXIgX19pb21lbSAqYWRkcjsKIAotCQlwY2lfY29uZjFfcmVhZCgwLCAwLCBQQ0lfREVWRk4oaSwwKSwgMCwgNCwgJnZhbDEpOwotCQlpZiAodmFsMSA9PSAweGZmZmZmZmZmKQotCQkJY29udGludWU7Ci0JCWFkZHIgPSBwY2lfZGV2X2Jhc2UoMCwgMCwgUENJX0RFVkZOKGksIDApKTsKLQkJaWYgKGFkZHIgPT0gTlVMTHx8IHJlYWRsKGFkZHIpICE9IHZhbDEpIHsKLQkJCXNldF9iaXQoaSwgZmFsbGJhY2tfc2xvdHMpOworCQkJcGNpX2NvbmYxX3JlYWQoMCwgaywgUENJX0RFVkZOKGksMCksIDAsIDQsICZ2YWwxKTsKKwkJCWlmICh2YWwxID09IDB4ZmZmZmZmZmYpCisJCQkJY29udGludWU7CisJCQlhZGRyID0gcGNpX2Rldl9iYXNlKDAsIGssIFBDSV9ERVZGTihpLCAwKSk7CisJCQlpZiAoYWRkciA9PSBOVUxMfHwgcmVhZGwoYWRkcikgIT0gdmFsMSkgeworCQkJCXNldF9iaXQoaSArIDMyKmssIGZhbGxiYWNrX3Nsb3RzKTsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCQkiUENJOiBObyBtbWNvbmZpZyBwb3NzaWJsZSBvbiBkZXZpY2UgJXg6JXhcbiIsCisJCQkJCWssIGkpOworCQkJfQogCQl9CiAJfQogfQpAQCAtMTYxLDYgKzE3NCwxNCBAQAogCSAgICAocGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MgPT0gMCkpCiAJCXJldHVybjsKIAorCWlmICghZTgyMF9hbGxfbWFwcGVkKHBjaV9tbWNmZ19jb25maWdbMF0uYmFzZV9hZGRyZXNzLAorCQkJcGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MgKyBNTUNPTkZJR19BUEVSX1NJWkUsCisJCQlFODIwX1JFU0VSVkVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQklPUyBCdWc6IE1DRkcgYXJlYSBpcyBub3QgRTgyMC1yZXNlcnZlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBOb3QgdXNpbmcgTU1DT05GSUcuXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFJFRC1QRU4gaTM4NiBkb2Vzbid0IGRvIF9ub2NhY2hlIHJpZ2h0IG5vdyAqLwogCXBjaV9tbWNmZ192aXJ0ID0ga21hbGxvYyhzaXplb2YoKnBjaV9tbWNmZ192aXJ0KSAqIHBjaV9tbWNmZ19jb25maWdfbnVtLCBHRlBfS0VSTkVMKTsKIAlpZiAocGNpX21tY2ZnX3ZpcnQgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jCmluZGV4IGVmYWU1NmEuLmExNWI2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC94dGVuc2Ffa3N5bXMuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwveHRlbnNhX2tzeW1zLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIEVYUE9SVF9TWU1CT0woc3RyY2F0KTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cm5jYXQpOwogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CkBAIC0xMTMsOCArMTEyLDYgQEAKIC8vIEZJWE1FIEVYUE9SVF9TWU1CT0woc2NyZWVuX2luZm8pOwogI2VuZGlmCiAKLUVYUE9SVF9TWU1CT0woZ2V0X3djaGFuKTsKLQogRVhQT1JUX1NZTUJPTChvdXRzYik7CiBFWFBPUlRfU1lNQk9MKG91dHN3KTsKIEVYUE9SVF9TWU1CT0wob3V0c2wpOwpkaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWcKaW5kZXggNTUzNjgzOS4uYjZmNWYwYSAxMDA2NDQKLS0tIGEvYmxvY2svS2NvbmZpZworKysgYi9ibG9jay9LY29uZmlnCkBAIC0yNywxMCArMjcsMTAgQEAKIGNvbmZpZyBMU0YKIAlib29sICJTdXBwb3J0IGZvciBMYXJnZSBTaW5nbGUgRmlsZXMiCiAJZGVwZW5kcyBvbiBYODYgfHwgKE1JUFMgJiYgMzJCSVQpIHx8IFBQQzMyIHx8IEFSQ0hfUzM5MF8zMSB8fCBTVVBFUkggfHwgVU1MCi0JZGVmYXVsdCBuCiAJaGVscAotCSAgV2hlbiBDT05GSUdfTEJEIGlzIGRpc2FibGVkLCBzYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvCi0JICBoYW5kbGUgbGFyZ2UgZmlsZShiaWdnZXIgdGhhbiAyVEIpLCBvdGhlcndpc2Ugc2F5IE4uCi0JICBXaGVuIENPTkZJR19MQkQgaXMgZW5hYmxlZCwgWSBpcyBzZXQgYXV0b21hdGljYWxseS4KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBoYW5kbGUgdmVyeSBsYXJnZSBmaWxlcyAoYmlnZ2VyCisJICB0aGFuIDJUQiksIG90aGVyd2lzZSBzYXkgTi4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogc291cmNlIGJsb2NrL0tjb25maWcuaW9zY2hlZApkaWZmIC0tZ2l0IGEvYmxvY2svYXMtaW9zY2hlZC5jIGIvYmxvY2svYXMtaW9zY2hlZC5jCmluZGV4IDI5NjcwOGMuLmE3Y2FmMzUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2FzLWlvc2NoZWQuYworKysgYi9ibG9jay9hcy1pb3NjaGVkLmMKQEAgLTE2NDgsMTcgKzE2NDgsMTcgQEAKICAqIGluaXRpYWxpemUgZWxldmF0b3IgcHJpdmF0ZSBkYXRhIChhc19kYXRhKSwgYW5kIGFsbG9jIGEgYXJxIGZvcgogICogZWFjaCByZXF1ZXN0IG9uIHRoZSBmcmVlIGxpc3RzCiAgKi8KLXN0YXRpYyBpbnQgYXNfaW5pdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCAqYXNfaW5pdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGVsZXZhdG9yX3QgKmUpCiB7CiAJc3RydWN0IGFzX2RhdGEgKmFkOwogCWludCBpOwogCiAJaWYgKCFhcnFfcG9vbCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCiAJYWQgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKCphZCksIEdGUF9LRVJORUwsIHEtPm5vZGUpOwogCWlmICghYWQpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAltZW1zZXQoYWQsIDAsIHNpemVvZigqYWQpKTsKIAogCWFkLT5xID0gcTsgLyogSWRlbnRpZnkgd2hhdCBxdWV1ZSB0aGUgZGF0YSBiZWxvbmdzIHRvICovCkBAIC0xNjY3LDcgKzE2NjcsNyBAQAogCQkJCUdGUF9LRVJORUwsIHEtPm5vZGUpOwogCWlmICghYWQtPmhhc2gpIHsKIAkJa2ZyZWUoYWQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJYWQtPmFycV9wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZShCTEtERVZfTUlOX1JRLCBtZW1wb29sX2FsbG9jX3NsYWIsCkBAIC0xNjc1LDcgKzE2NzUsNyBAQAogCWlmICghYWQtPmFycV9wb29sKSB7CiAJCWtmcmVlKGFkLT5oYXNoKTsKIAkJa2ZyZWUoYWQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyogYW50aWNpcGF0b3J5IHNjaGVkdWxpbmcgaGVscGVycyAqLwpAQCAtMTY5NiwxNCArMTY5NiwxMyBAQAogCWFkLT5hbnRpY19leHBpcmUgPSBkZWZhdWx0X2FudGljX2V4cGlyZTsKIAlhZC0+YmF0Y2hfZXhwaXJlW1JFUV9TWU5DXSA9IGRlZmF1bHRfcmVhZF9iYXRjaF9leHBpcmU7CiAJYWQtPmJhdGNoX2V4cGlyZVtSRVFfQVNZTkNdID0gZGVmYXVsdF93cml0ZV9iYXRjaF9leHBpcmU7Ci0JZS0+ZWxldmF0b3JfZGF0YSA9IGFkOwogCiAJYWQtPmN1cnJlbnRfYmF0Y2hfZXhwaXJlcyA9IGppZmZpZXMgKyBhZC0+YmF0Y2hfZXhwaXJlW1JFUV9TWU5DXTsKIAlhZC0+d3JpdGVfYmF0Y2hfY291bnQgPSBhZC0+YmF0Y2hfZXhwaXJlW1JFUV9BU1lOQ10gLyAxMDsKIAlpZiAoYWQtPndyaXRlX2JhdGNoX2NvdW50IDwgMikKIAkJYWQtPndyaXRlX2JhdGNoX2NvdW50ID0gMjsKIAotCXJldHVybiAwOworCXJldHVybiBhZDsKIH0KIAogLyoKQEAgLTE4NDQsOSArMTg0MywxMCBAQAogCURFQ0xBUkVfQ09NUExFVElPTihhbGxfZ29uZSk7CiAJZWx2X3VucmVnaXN0ZXIoJmlvc2NoZWRfYXMpOwogCWlvY19nb25lID0gJmFsbF9nb25lOwotCWJhcnJpZXIoKTsKKwkvKiBpb2NfZ29uZSdzIHVwZGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHJlYWRpbmcgaW9jX2NvdW50ICovCisJc21wX3dtYigpOwogCWlmIChhdG9taWNfcmVhZCgmaW9jX2NvdW50KSkKLQkJY29tcGxldGUoaW9jX2dvbmUpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKGlvY19nb25lKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koYXJxX3Bvb2wpOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggNjdkNDQ2ZC4uMDUyYjE3NCAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNkZWZpbmUgQ0ZRX0tFWV9BU1lOQwkJKDApCiAKLXN0YXRpYyBERUZJTkVfUldMT0NLKGNmcV9leGl0X2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhjZnFfZXhpdF9sb2NrKTsKIAogLyoKICAqIGZvciB0aGUgaGFzaCBvZiBjZnFxIGluc2lkZSB0aGUgY2ZxZApAQCAtMTMzLDYgKzEzMyw3IEBACiAJbWVtcG9vbF90ICpjcnFfcG9vbDsKIAogCWludCBycV9pbl9kcml2ZXI7CisJaW50IGh3X3RhZzsKIAogCS8qCiAJICogc2NoZWR1bGUgc2xpY2Ugc3RhdGUgaW5mbwpAQCAtNTAwLDEwICs1MDEsMTMgQEAKIAogCS8qCiAJICogaWYgcXVldWUgd2FzIHByZWVtcHRlZCwganVzdCBhZGQgdG8gZnJvbnQgdG8gYmUgZmFpci4gYnVzeV9ycgotCSAqIGlzbid0IHNvcnRlZC4KKwkgKiBpc24ndCBzb3J0ZWQsIGJ1dCBpbnNlcnQgYXQgdGhlIGJhY2sgZm9yIGZhaXJuZXNzLgogCSAqLwogCWlmIChwcmVlbXB0ZWQgfHwgbGlzdCA9PSAmY2ZxZC0+YnVzeV9ycikgewotCQlsaXN0X2FkZCgmY2ZxcS0+Y2ZxX2xpc3QsIGxpc3QpOworCQlpZiAocHJlZW1wdGVkKQorCQkJbGlzdCA9IGxpc3QtPnByZXY7CisKKwkJbGlzdF9hZGRfdGFpbCgmY2ZxcS0+Y2ZxX2xpc3QsIGxpc3QpOwogCQlyZXR1cm47CiAJfQogCkBAIC02NjQsNiArNjY4LDE1IEBACiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAKIAljZnFkLT5ycV9pbl9kcml2ZXIrKzsKKworCS8qCisJICogSWYgdGhlIGRlcHRoIGlzIGxhcmdlciAxLCBpdCByZWFsbHkgY291bGQgYmUgcXVldWVpbmcuIEJ1dCBsZXRzCisJICogbWFrZSB0aGUgbWFyayBhIGxpdHRsZSBoaWdoZXIgLSBpZGxpbmcgY291bGQgc3RpbGwgYmUgZ29vZCBmb3IKKwkgKiBsb3cgcXVldWVpbmcsIGFuZCBhIGxvdyBxdWV1ZWluZyBudW1iZXIgY291bGQgYWxzbyBqdXN0IGluZGljYXRlCisJICogYSBTQ1NJIG1pZCBsYXllciBsaWtlIGJlaGF2aW91ciB3aGVyZSBsaW1pdCsxIGlzIG9mdGVuIHNlZW4uCisJICovCisJaWYgKCFjZnFkLT5od190YWcgJiYgY2ZxZC0+cnFfaW5fZHJpdmVyID4gNCkKKwkJY2ZxZC0+aHdfdGFnID0gMTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX2RlYWN0aXZhdGVfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKQEAgLTg3OSw2ICs4OTIsMTMgQEAKIAkJY2ZxcSA9IGxpc3RfZW50cnlfY2ZxcShjZnFkLT5jdXJfcnIubmV4dCk7CiAKIAkvKgorCSAqIElmIG5vIG5ldyBxdWV1ZXMgYXJlIGF2YWlsYWJsZSwgY2hlY2sgaWYgdGhlIGJ1c3kgbGlzdCBoYXMgc29tZQorCSAqIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gaWRsZSBpby4KKwkgKi8KKwlpZiAoIWNmcXEgJiYgIWxpc3RfZW1wdHkoJmNmcWQtPmJ1c3lfcnIpKQorCQljZnFxID0gbGlzdF9lbnRyeV9jZnFxKGNmcWQtPmJ1c3lfcnIubmV4dCk7CisKKwkvKgogCSAqIGlmIHdlIGhhdmUgaWRsZSBxdWV1ZXMgYW5kIG5vIHJ0IG9yIGJlIHF1ZXVlcyBoYWQgcGVuZGluZwogCSAqIHJlcXVlc3RzLCBlaXRoZXIgYWxsb3cgaW1tZWRpYXRlIHNlcnZpY2UgaWYgdGhlIGdyYWNlIHBlcmlvZAogCSAqIGhhcyBwYXNzZWQgb3IgYXJtIHRoZSBpZGxlIGdyYWNlIHRpbWVyCkBAIC0xMjg0LDcgKzEzMDQsNyBAQAogCS8qCiAJICogcHV0IHRoZSByZWZlcmVuY2UgdGhpcyB0YXNrIGlzIGhvbGRpbmcgdG8gdGhlIHZhcmlvdXMgcXVldWVzCiAJICovCi0JcmVhZF9sb2NrX2lycXNhdmUoJmNmcV9leGl0X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2ZxX2V4aXRfbG9jaywgZmxhZ3MpOwogCiAJbiA9IHJiX2ZpcnN0KCZpb2MtPmNpY19yb290KTsKIAl3aGlsZSAobiAhPSBOVUxMKSB7CkBAIC0xMjk0LDcgKzEzMTQsNyBAQAogCQluID0gcmJfbmV4dChuKTsKIAl9CiAKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZjZnFfZXhpdF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2ZxX2V4aXRfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGNmcV9pb19jb250ZXh0ICoKQEAgLTEzMDMsMTcgKzEzMjMsMTIgQEAKIAlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYyA9IGttZW1fY2FjaGVfYWxsb2MoY2ZxX2lvY19wb29sLCBnZnBfbWFzayk7CiAKIAlpZiAoY2ljKSB7Ci0JCVJCX0NMRUFSKCZjaWMtPnJiX25vZGUpOwotCQljaWMtPmtleSA9IE5VTEw7Ci0JCWNpYy0+Y2ZxcVtBU1lOQ10gPSBOVUxMOwotCQljaWMtPmNmcXFbU1lOQ10gPSBOVUxMOworCQltZW1zZXQoY2ljLCAwLCBzaXplb2YoKmNpYykpOworCQlSQl9DTEVBUl9DT0xPUigmY2ljLT5yYl9ub2RlKTsKIAkJY2ljLT5sYXN0X2VuZF9yZXF1ZXN0ID0gamlmZmllczsKLQkJY2ljLT50dGltZV90b3RhbCA9IDA7Ci0JCWNpYy0+dHRpbWVfc2FtcGxlcyA9IDA7Ci0JCWNpYy0+dHRpbWVfbWVhbiA9IDA7CisJCUlOSVRfTElTVF9IRUFEKCZjaWMtPnF1ZXVlX2xpc3QpOwogCQljaWMtPmR0b3IgPSBjZnFfZnJlZV9pb19jb250ZXh0OwogCQljaWMtPmV4aXQgPSBjZnFfZXhpdF9pb19jb250ZXh0OwotCQlJTklUX0xJU1RfSEVBRCgmY2ljLT5xdWV1ZV9saXN0KTsKIAkJYXRvbWljX2luYygmaW9jX2NvdW50KTsKIAl9CiAKQEAgLTE0MDAsMTcgKzE0MTUsMTcgQEAKIAlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAotCXdyaXRlX2xvY2soJmNmcV9leGl0X2xvY2spOworCXNwaW5fbG9jaygmY2ZxX2V4aXRfbG9jayk7CiAKIAluID0gcmJfZmlyc3QoJmlvYy0+Y2ljX3Jvb3QpOwogCXdoaWxlIChuICE9IE5VTEwpIHsKIAkJY2ljID0gcmJfZW50cnkobiwgc3RydWN0IGNmcV9pb19jb250ZXh0LCByYl9ub2RlKTsKLSAKKwogCQljaGFuZ2VkX2lvcHJpbyhjaWMpOwogCQluID0gcmJfbmV4dChuKTsKIAl9CiAKLQl3cml0ZV91bmxvY2soJmNmcV9leGl0X2xvY2spOworCXNwaW5fdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ1OCw3ICsxNDczLDggQEAKIAkJICogc2V0IC0+c2xpY2VfbGVmdCB0byBhbGxvdyBwcmVlbXB0aW9uIGZvciBhIG5ldyBwcm9jZXNzCiAJCSAqLwogCQljZnFxLT5zbGljZV9sZWZ0ID0gMiAqIGNmcWQtPmNmcV9zbGljZV9pZGxlOwotCQljZnFfbWFya19jZnFxX2lkbGVfd2luZG93KGNmcXEpOworCQlpZiAoIWNmcWQtPmh3X3RhZykKKwkJCWNmcV9tYXJrX2NmcXFfaWRsZV93aW5kb3coY2ZxcSk7CiAJCWNmcV9tYXJrX2NmcXFfcHJpb19jaGFuZ2VkKGNmcXEpOwogCQljZnFfaW5pdF9wcmlvX2RhdGEoY2ZxcSk7CiAJfQpAQCAtMTQ3MiwxOSArMTQ4OCwzOCBAQAogCXJldHVybiBjZnFxOwogfQogCitzdGF0aWMgdm9pZAorY2ZxX2Ryb3BfZGVhZF9jaWMoc3RydWN0IGlvX2NvbnRleHQgKmlvYywgc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMpCit7CisJc3Bpbl9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlyYl9lcmFzZSgmY2ljLT5yYl9ub2RlLCAmaW9jLT5jaWNfcm9vdCk7CisJbGlzdF9kZWxfaW5pdCgmY2ljLT5xdWV1ZV9saXN0KTsKKwlzcGluX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CisJa21lbV9jYWNoZV9mcmVlKGNmcV9pb2NfcG9vbCwgY2ljKTsKKwlhdG9taWNfZGVjKCZpb2NfY291bnQpOworfQorCiBzdGF0aWMgc3RydWN0IGNmcV9pb19jb250ZXh0ICoKIGNmcV9jaWNfcmJfbG9va3VwKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGlvX2NvbnRleHQgKmlvYykKIHsKLQlzdHJ1Y3QgcmJfbm9kZSAqbiA9IGlvYy0+Y2ljX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKLQl2b2lkICprZXkgPSBjZnFkOworCXZvaWQgKmssICprZXkgPSBjZnFkOwogCityZXN0YXJ0OgorCW4gPSBpb2MtPmNpY19yb290LnJiX25vZGU7CiAJd2hpbGUgKG4pIHsKIAkJY2ljID0gcmJfZW50cnkobiwgc3RydWN0IGNmcV9pb19jb250ZXh0LCByYl9ub2RlKTsKKwkJLyogLT5rZXkgbXVzdCBiZSBjb3BpZWQgdG8gYXZvaWQgcmFjZSB3aXRoIGNmcV9leGl0X3F1ZXVlKCkgKi8KKwkJayA9IGNpYy0+a2V5OworCQlpZiAodW5saWtlbHkoIWspKSB7CisJCQljZnFfZHJvcF9kZWFkX2NpYyhpb2MsIGNpYyk7CisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KIAotCQlpZiAoa2V5IDwgY2ljLT5rZXkpCisJCWlmIChrZXkgPCBrKQogCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGtleSA+IGNpYy0+a2V5KQorCQllbHNlIGlmIChrZXkgPiBrKQogCQkJbiA9IG4tPnJiX3JpZ2h0OwogCQllbHNlCiAJCQlyZXR1cm4gY2ljOwpAQCAtMTQ5NywzMyArMTUzMiw0MSBAQAogY2ZxX2NpY19saW5rKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGlvX2NvbnRleHQgKmlvYywKIAkgICAgIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljKQogewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZpb2MtPmNpY19yb290LnJiX25vZGU7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKipwOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpfX2NpYzsKLQotCXJlYWRfbG9jaygmY2ZxX2V4aXRfbG9jayk7CisJdm9pZCAqazsKIAogCWNpYy0+aW9jID0gaW9jOwogCWNpYy0+a2V5ID0gY2ZxZDsKIAogCWlvYy0+c2V0X2lvcHJpbyA9IGNmcV9pb2Nfc2V0X2lvcHJpbzsKLQorcmVzdGFydDoKKwlwYXJlbnQgPSBOVUxMOworCXAgPSAmaW9jLT5jaWNfcm9vdC5yYl9ub2RlOwogCXdoaWxlICgqcCkgewogCQlwYXJlbnQgPSAqcDsKIAkJX19jaWMgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBjZnFfaW9fY29udGV4dCwgcmJfbm9kZSk7CisJCS8qIC0+a2V5IG11c3QgYmUgY29waWVkIHRvIGF2b2lkIHJhY2Ugd2l0aCBjZnFfZXhpdF9xdWV1ZSgpICovCisJCWsgPSBfX2NpYy0+a2V5OworCQlpZiAodW5saWtlbHkoIWspKSB7CisJCQljZnFfZHJvcF9kZWFkX2NpYyhpb2MsIGNpYyk7CisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KIAotCQlpZiAoY2ljLT5rZXkgPCBfX2NpYy0+a2V5KQorCQlpZiAoY2ljLT5rZXkgPCBrKQogCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwotCQllbHNlIGlmIChjaWMtPmtleSA+IF9fY2ljLT5rZXkpCisJCWVsc2UgaWYgKGNpYy0+a2V5ID4gaykKIAkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CiAJCWVsc2UKIAkJCUJVRygpOwogCX0KIAorCXNwaW5fbG9jaygmY2ZxX2V4aXRfbG9jayk7CiAJcmJfbGlua19ub2RlKCZjaWMtPnJiX25vZGUsIHBhcmVudCwgcCk7CiAJcmJfaW5zZXJ0X2NvbG9yKCZjaWMtPnJiX25vZGUsICZpb2MtPmNpY19yb290KTsKIAlsaXN0X2FkZCgmY2ljLT5xdWV1ZV9saXN0LCAmY2ZxZC0+Y2ljX2xpc3QpOwotCXJlYWRfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiB9CiAKIC8qCkBAIC0xNjIyLDcgKzE2NjUsNyBAQAogewogCWludCBlbmFibGVfaWRsZSA9IGNmcV9jZnFxX2lkbGVfd2luZG93KGNmcXEpOwogCi0JaWYgKCFjaWMtPmlvYy0+dGFzayB8fCAhY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUpCisJaWYgKCFjaWMtPmlvYy0+dGFzayB8fCAhY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUgfHwgY2ZxZC0+aHdfdGFnKQogCQllbmFibGVfaWRsZSA9IDA7CiAJZWxzZSBpZiAoc2FtcGxlX3ZhbGlkKGNpYy0+dHRpbWVfc2FtcGxlcykpIHsKIAkJaWYgKGNpYy0+dHRpbWVfbWVhbiA+IGNmcWQtPmNmcV9zbGljZV9pZGxlKQpAQCAtMTcxMywxNCArMTc1NiwyNCBAQAogCiAJY2ZxcS0+bmV4dF9jcnEgPSBjZnFfY2hvb3NlX3JlcShjZnFkLCBjZnFxLT5uZXh0X2NycSwgY3JxKTsKIAorCWNpYyA9IGNycS0+aW9fY29udGV4dDsKKwogCS8qCiAJICogd2UgbmV2ZXIgd2FpdCBmb3IgYW4gYXN5bmMgcmVxdWVzdCBhbmQgd2UgZG9uJ3QgYWxsb3cgcHJlZW1wdGlvbgogCSAqIG9mIGFuIGFzeW5jIHJlcXVlc3QuIHNvIGp1c3QgcmV0dXJuIGVhcmx5CiAJICovCi0JaWYgKCFjZnFfY3JxX2lzX3N5bmMoY3JxKSkKKwlpZiAoIWNmcV9jcnFfaXNfc3luYyhjcnEpKSB7CisJCS8qCisJCSAqIHN5bmMgcHJvY2VzcyBpc3N1ZWQgYW4gYXN5bmMgcmVxdWVzdCwgaWYgaXQncyB3YWl0aW5nCisJCSAqIHRoZW4gZXhwaXJlIGl0IGFuZCBraWNrIHJxIGhhbmRsaW5nLgorCQkgKi8KKwkJaWYgKGNpYyA9PSBjZnFkLT5hY3RpdmVfY2ljICYmCisJCSAgICBkZWxfdGltZXIoJmNmcWQtPmlkbGVfc2xpY2VfdGltZXIpKSB7CisJCQljZnFfc2xpY2VfZXhwaXJlZChjZnFkLCAwKTsKKwkJCWNmcV9zdGFydF9xdWV1ZWluZyhjZnFkLCBjZnFxKTsKKwkJfQogCQlyZXR1cm47Ci0KLQljaWMgPSBjcnEtPmlvX2NvbnRleHQ7CisJfQogCiAJY2ZxX3VwZGF0ZV9pb190aGlua3RpbWUoY2ZxZCwgY2ljKTsKIAljZnFfdXBkYXRlX2lvX3NlZWt0aW1lKGNmcWQsIGNpYywgY3JxKTsKQEAgLTIxMzgsMTAgKzIxOTEsOSBAQAogCSAqIHJhY2Ugd2l0aCBhIG5vbi1pZGxlIHF1ZXVlLCByZXNldCB0aW1lcgogCSAqLwogCWVuZCA9IGNmcWQtPmxhc3RfZW5kX3JlcXVlc3QgKyBDRlFfSURMRV9HUkFDRTsKLQlpZiAoIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kKSkgewotCQljZnFkLT5pZGxlX2NsYXNzX3RpbWVyLmV4cGlyZXMgPSBlbmQ7Ci0JCWFkZF90aW1lcigmY2ZxZC0+aWRsZV9jbGFzc190aW1lcik7Ci0JfSBlbHNlCisJaWYgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGVuZCkpCisJCW1vZF90aW1lcigmY2ZxZC0+aWRsZV9jbGFzc190aW1lciwgZW5kKTsKKwllbHNlCiAJCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2ZxZC0+cXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKQEAgLTIxNjEsNyArMjIxMyw3IEBACiAKIAljZnFfc2h1dGRvd25fdGltZXJfd3EoY2ZxZCk7CiAKLQl3cml0ZV9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX2xvY2soJmNmcV9leGl0X2xvY2spOwogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAKIAlpZiAoY2ZxZC0+YWN0aXZlX3F1ZXVlKQpAQCAtMjE4NCw3ICsyMjM2LDcgQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0Jd3JpdGVfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAKIAljZnFfc2h1dGRvd25fdGltZXJfd3EoY2ZxZCk7CiAKQEAgLTIxOTQsMTQgKzIyNDYsMTQgQEAKIAlrZnJlZShjZnFkKTsKIH0KIAotc3RhdGljIGludCBjZnFfaW5pdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCAqY2ZxX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZDsKIAlpbnQgaTsKIAogCWNmcWQgPSBrbWFsbG9jKHNpemVvZigqY2ZxZCksIEdGUF9LRVJORUwpOwogCWlmICghY2ZxZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCiAJbWVtc2V0KGNmcWQsIDAsIHNpemVvZigqY2ZxZCkpOwogCkBAIC0yMjMxLDggKzIyODMsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBDRlFfUUhBU0hfRU5UUklFUzsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoJmNmcWQtPmNmcV9oYXNoW2ldKTsKIAotCWUtPmVsZXZhdG9yX2RhdGEgPSBjZnFkOwotCiAJY2ZxZC0+cXVldWUgPSBxOwogCiAJY2ZxZC0+bWF4X3F1ZXVlZCA9IHEtPm5yX3JlcXVlc3RzIC8gNDsKQEAgLTIyNTksMTQgKzIzMDksMTQgQEAKIAljZnFkLT5jZnFfc2xpY2VfYXN5bmNfcnEgPSBjZnFfc2xpY2VfYXN5bmNfcnE7CiAJY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUgPSBjZnFfc2xpY2VfaWRsZTsKIAotCXJldHVybiAwOworCXJldHVybiBjZnFkOwogb3V0X2NycXBvb2w6CiAJa2ZyZWUoY2ZxZC0+Y2ZxX2hhc2gpOwogb3V0X2NmcWhhc2g6CiAJa2ZyZWUoY2ZxZC0+Y3JxX2hhc2gpOwogb3V0X2NycWhhc2g6CiAJa2ZyZWUoY2ZxZCk7Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9zbGFiX2tpbGwodm9pZCkKQEAgLTI0MzksOSArMjQ4OSwxMCBAQAogCURFQ0xBUkVfQ09NUExFVElPTihhbGxfZ29uZSk7CiAJZWx2X3VucmVnaXN0ZXIoJmlvc2NoZWRfY2ZxKTsKIAlpb2NfZ29uZSA9ICZhbGxfZ29uZTsKLQliYXJyaWVyKCk7CisJLyogaW9jX2dvbmUncyB1cGRhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSByZWFkaW5nIGlvY19jb3VudCAqLworCXNtcF93bWIoKTsKIAlpZiAoYXRvbWljX3JlYWQoJmlvY19jb3VudCkpCi0JCWNvbXBsZXRlKGlvY19nb25lKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbihpb2NfZ29uZSk7CiAJc3luY2hyb25pemVfcmN1KCk7CiAJY2ZxX3NsYWJfa2lsbCgpOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jIGIvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCmluZGV4IDM5OWZhMWUuLjNiZDA0MTUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYworKysgYi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKQEAgLTYxMywyNCArNjEzLDI0IEBACiAgKiBpbml0aWFsaXplIGVsZXZhdG9yIHByaXZhdGUgZGF0YSAoZGVhZGxpbmVfZGF0YSksIGFuZCBhbGxvYyBhIGRycSBmb3IKICAqIGVhY2ggcmVxdWVzdCBvbiB0aGUgZnJlZSBsaXN0cwogICovCi1zdGF0aWMgaW50IGRlYWRsaW5lX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQorc3RhdGljIHZvaWQgKmRlYWRsaW5lX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZDsKIAlpbnQgaTsKIAogCWlmICghZHJxX3Bvb2wpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAogCWRkID0ga21hbGxvY19ub2RlKHNpemVvZigqZGQpLCBHRlBfS0VSTkVMLCBxLT5ub2RlKTsKIAlpZiAoIWRkKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CiAKIAlkZC0+aGFzaCA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkqRExfSEFTSF9FTlRSSUVTLAogCQkJCUdGUF9LRVJORUwsIHEtPm5vZGUpOwogCWlmICghZGQtPmhhc2gpIHsKIAkJa2ZyZWUoZGQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJZGQtPmRycV9wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZShCTEtERVZfTUlOX1JRLCBtZW1wb29sX2FsbG9jX3NsYWIsCkBAIC02MzgsNyArNjM4LDcgQEAKIAlpZiAoIWRkLT5kcnFfcG9vbCkgewogCQlrZnJlZShkZC0+aGFzaCk7CiAJCWtmcmVlKGRkKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBETF9IQVNIX0VOVFJJRVM7IGkrKykKQEAgLTY1Myw4ICs2NTMsNyBAQAogCWRkLT53cml0ZXNfc3RhcnZlZCA9IHdyaXRlc19zdGFydmVkOwogCWRkLT5mcm9udF9tZXJnZXMgPSAxOwogCWRkLT5maWZvX2JhdGNoID0gZmlmb19iYXRjaDsKLQllLT5lbGV2YXRvcl9kYXRhID0gZGQ7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGRkOwogfQogCiBzdGF0aWMgdm9pZCBkZWFkbGluZV9wdXRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDU2YzJlZDAuLmEwYWZkZDMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtMTIxLDE2ICsxMjEsMTYgQEAKIAlyZXR1cm4gZTsKIH0KIAotc3RhdGljIGludCBlbGV2YXRvcl9hdHRhY2gocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKQorc3RhdGljIHZvaWQgKmVsZXZhdG9yX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKQogewotCWludCByZXQgPSAwOworCXJldHVybiBlcS0+b3BzLT5lbGV2YXRvcl9pbml0X2ZuKHEsIGVxKTsKK30KIAorc3RhdGljIHZvaWQgZWxldmF0b3JfYXR0YWNoKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CiAJcS0+ZWxldmF0b3IgPSBlcTsKLQotCWlmIChlcS0+b3BzLT5lbGV2YXRvcl9pbml0X2ZuKQotCQlyZXQgPSBlcS0+b3BzLT5lbGV2YXRvcl9pbml0X2ZuKHEsIGVxKTsKLQotCXJldHVybiByZXQ7CisJZXEtPmVsZXZhdG9yX2RhdGEgPSBkYXRhOwogfQogCiBzdGF0aWMgY2hhciBjaG9zZW5fZWxldmF0b3JbMTZdOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCXN0cmNweShjaG9zZW5fZWxldmF0b3IsICJhbnRpY2lwYXRvcnkiKTsKIAllbHNlCiAJCXN0cm5jcHkoY2hvc2VuX2VsZXZhdG9yLCBzdHIsIHNpemVvZihjaG9zZW5fZWxldmF0b3IpIC0gMSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIF9fc2V0dXAoImVsZXZhdG9yPSIsIGVsZXZhdG9yX3NldHVwKTsKQEAgLTE4MSw2ICsxODEsNyBAQAogCXN0cnVjdCBlbGV2YXRvcl90eXBlICplID0gTlVMTDsKIAlzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxOwogCWludCByZXQgPSAwOworCXZvaWQgKmRhdGE7CiAKIAlJTklUX0xJU1RfSEVBRCgmcS0+cXVldWVfaGVhZCk7CiAJcS0+bGFzdF9tZXJnZSA9IE5VTEw7CkBAIC0yMDIsMTAgKzIwMywxMyBAQAogCWlmICghZXEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gZWxldmF0b3JfYXR0YWNoKHEsIGVxKTsKLQlpZiAocmV0KQorCWRhdGEgPSBlbGV2YXRvcl9pbml0X3F1ZXVlKHEsIGVxKTsKKwlpZiAoIWRhdGEpIHsKIAkJa29iamVjdF9wdXQoJmVxLT5rb2JqKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCisJZWxldmF0b3JfYXR0YWNoKHEsIGVxLCBkYXRhKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMzMsNiArMzM3LDcgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJdW5zaWduZWQgb3Jkc2VxOworCWludCB1bnBsdWdfaXQgPSAxOwogCiAJYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0lOU0VSVCk7CiAKQEAgLTM5OSw2ICs0MDQsMTEgQEAKIAkJfQogCiAJCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsIHBvcyk7CisJCS8qCisJCSAqIG1vc3QgcmVxdWV1ZXMgaGFwcGVuIGJlY2F1c2Ugb2YgYSBidXN5IGNvbmRpdGlvbiwgZG9uJ3QKKwkJICogZm9yY2UgdW5wbHVnIG9mIHRoZSBxdWV1ZSBmb3IgdGhhdCBjYXNlLgorCQkgKi8KKwkJdW5wbHVnX2l0ID0gMDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDA3LDcgKzQxNyw3IEBACiAJCUJVRygpOwogCX0KIAotCWlmIChibGtfcXVldWVfcGx1Z2dlZChxKSkgeworCWlmICh1bnBsdWdfaXQgJiYgYmxrX3F1ZXVlX3BsdWdnZWQocSkpIHsKIAkJaW50IG5ycSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdCiAJCQktIHEtPmluX2ZsaWdodDsKIApAQCAtNzE2LDEzICs3MjYsMTYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZWx2X3VucmVnaXN0ZXJfcXVldWUoZWxldmF0b3JfdCAqZSkKK3sKKwlrb2JqZWN0X3VldmVudCgmZS0+a29iaiwgS09CSl9SRU1PVkUpOworCWtvYmplY3RfZGVsKCZlLT5rb2JqKTsKK30KKwogdm9pZCBlbHZfdW5yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlpZiAocSkgewotCQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7Ci0JCWtvYmplY3RfdWV2ZW50KCZlLT5rb2JqLCBLT0JKX1JFTU9WRSk7Ci0JCWtvYmplY3RfZGVsKCZlLT5rb2JqKTsKLQl9CisJaWYgKHEpCisJCV9fZWx2X3VucmVnaXN0ZXJfcXVldWUocS0+ZWxldmF0b3IpOwogfQogCiBpbnQgZWx2X3JlZ2lzdGVyKHN0cnVjdCBlbGV2YXRvcl90eXBlICplKQpAQCAtNzc0LDYgKzc4Nyw3IEBACiBzdGF0aWMgaW50IGVsZXZhdG9yX3N3aXRjaChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBlbGV2YXRvcl90eXBlICpuZXdfZSkKIHsKIAllbGV2YXRvcl90ICpvbGRfZWxldmF0b3IsICplOworCXZvaWQgKmRhdGE7CiAKIAkvKgogCSAqIEFsbG9jYXRlIG5ldyBlbGV2YXRvcgpAQCAtNzgyLDYgKzc5NiwxMiBAQAogCWlmICghZSkKIAkJcmV0dXJuIDA7CiAKKwlkYXRhID0gZWxldmF0b3JfaW5pdF9xdWV1ZShxLCBlKTsKKwlpZiAoIWRhdGEpIHsKKwkJa29iamVjdF9wdXQoJmUtPmtvYmopOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIFR1cm4gb24gQllQQVNTIGFuZCBkcmFpbiBhbGwgcmVxdWVzdHMgdy8gZWxldmF0b3IgcHJpdmF0ZSBkYXRhCiAJICovCkBAIC04MDAsMTkgKzgyMCwxOSBAQAogCQllbHZfZHJhaW5fZWxldmF0b3IocSk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCiAJLyoKLQkgKiB1bnJlZ2lzdGVyIG9sZCBlbGV2YXRvciBkYXRhCisJICogUmVtZW1iZXIgb2xkIGVsZXZhdG9yLgogCSAqLwotCWVsdl91bnJlZ2lzdGVyX3F1ZXVlKHEpOwogCW9sZF9lbGV2YXRvciA9IHEtPmVsZXZhdG9yOwogCiAJLyoKIAkgKiBhdHRhY2ggYW5kIHN0YXJ0IG5ldyBlbGV2YXRvcgogCSAqLwotCWlmIChlbGV2YXRvcl9hdHRhY2gocSwgZSkpCi0JCWdvdG8gZmFpbDsKKwllbGV2YXRvcl9hdHRhY2gocSwgZSwgZGF0YSk7CisKKwlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CisKKwlfX2Vsdl91bnJlZ2lzdGVyX3F1ZXVlKG9sZF9lbGV2YXRvcik7CiAKIAlpZiAoZWx2X3JlZ2lzdGVyX3F1ZXVlKHEpKQogCQlnb3RvIGZhaWxfcmVnaXN0ZXI7CkBAIC04MzEsNyArODUxLDYgQEAKIAkgKi8KIAllbGV2YXRvcl9leGl0KGUpOwogCWUgPSBOVUxMOwotZmFpbDoKIAlxLT5lbGV2YXRvciA9IG9sZF9lbGV2YXRvcjsKIAllbHZfcmVnaXN0ZXJfcXVldWUocSk7CiAJY2xlYXJfYml0KFFVRVVFX0ZMQUdfRUxWU1dJVENILCAmcS0+cXVldWVfZmxhZ3MpOwpAQCAtODk1LDEwICs5MTQsOCBAQAogRVhQT1JUX1NZTUJPTChlbHZfZGlzcGF0Y2hfc29ydCk7CiBFWFBPUlRfU1lNQk9MKGVsdl9hZGRfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKF9fZWx2X2FkZF9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0woZWx2X3JlcXVldWVfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKGVsdl9uZXh0X3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChlbHZfZGVxdWV1ZV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZWx2X3F1ZXVlX2VtcHR5KTsKLUVYUE9SVF9TWU1CT0woZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZWxldmF0b3JfZXhpdCk7CiBFWFBPUlRfU1lNQk9MKGVsZXZhdG9yX2luaXQpOwpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZGI0YzYwYy4uNWE4ZDNiZiAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC0xNyw4ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jZGVmaW5lIE1BWF9QUk9CRV9IQVNIIDI1NQkvKiByYW5kb20gKi8KLQogc3RhdGljIHN0cnVjdCBzdWJzeXN0ZW0gYmxvY2tfc3Vic3lzOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGJsb2NrX3N1YnN5c19sb2NrKTsKQEAgLTMxLDEwOCArMjksMjkgQEAKIAlzdHJ1Y3QgYmxrX21ham9yX25hbWUgKm5leHQ7CiAJaW50IG1ham9yOwogCWNoYXIgbmFtZVsxNl07Ci19ICptYWpvcl9uYW1lc1tNQVhfUFJPQkVfSEFTSF07Cit9ICptYWpvcl9uYW1lc1tCTEtERVZfTUFKT1JfSEFTSF9TSVpFXTsKIAogLyogaW5kZXggaW4gdGhlIGFib3ZlIC0gZm9yIG5vdzogYXNzdW1lIG5vIG11bHRpbWFqb3IgcmFuZ2VzICovCiBzdGF0aWMgaW5saW5lIGludCBtYWpvcl90b19pbmRleChpbnQgbWFqb3IpCiB7Ci0JcmV0dXJuIG1ham9yICUgTUFYX1BST0JFX0hBU0g7CisJcmV0dXJuIG1ham9yICUgQkxLREVWX01BSk9SX0hBU0hfU0laRTsKIH0KIAotc3RydWN0IGJsa2Rldl9pbmZvIHsKLSAgICAgICAgaW50IGluZGV4OwotICAgICAgICBzdHJ1Y3QgYmxrX21ham9yX25hbWUgKmJkOwotfTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogCi0vKgotICogaXRlcmF0ZSBvdmVyIGEgbGlzdCBvZiBibGtkZXZfaW5mbyBzdHJ1Y3R1cmVzLiAgYWxsb3dzCi0gKiB0aGUgbWFqb3JfbmFtZXMgYXJyYXkgdG8gYmUgaXRlcmF0ZWQgb3ZlciBmcm9tIG91dHNpZGUgdGhpcyBmaWxlCi0gKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBibG9ja19zdWJzeXNfbG9jayBoZWxkCi0gKi8KLXZvaWQgKmdldF9uZXh0X2Jsa2Rldih2b2lkICpkZXYpCit2b2lkIGJsa2Rldl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgb2ZmX3Qgb2Zmc2V0KQogewotICAgICAgICBzdHJ1Y3QgYmxrZGV2X2luZm8gKmluZm87CisJc3RydWN0IGJsa19tYWpvcl9uYW1lICpkcDsKIAotICAgICAgICBpZiAoZGV2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZm8pCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgICAgICBpbmZvLT5pbmRleD0wOwotICAgICAgICAgICAgICAgIGluZm8tPmJkID0gbWFqb3JfbmFtZXNbaW5mby0+aW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChpbmZvLT5iZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGluZm8gPSBkZXY7Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoaW5mby0+aW5kZXggPCBBUlJBWV9TSVpFKG1ham9yX25hbWVzKSkgewotICAgICAgICAgICAgICAgIGlmIChpbmZvLT5iZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmJkID0gaW5mby0+YmQtPm5leHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8tPmJkKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBObyBkZXZpY2VzIG9uIHRoaXMgY2hhaW4sIG1vdmUgdG8gdGhlIG5leHQKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpbmZvLT5pbmRleCsrOwotICAgICAgICAgICAgICAgIGluZm8tPmJkID0gKGluZm8tPmluZGV4IDwgQVJSQVlfU0laRShtYWpvcl9uYW1lcykpID8KLQkJCW1ham9yX25hbWVzW2luZm8tPmluZGV4XSA6IE5VTEw7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8tPmJkKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLQotb3V0OgotICAgICAgICByZXR1cm4gaW5mbzsKLX0KLQotdm9pZCAqYWNxdWlyZV9ibGtkZXZfbGlzdCh2b2lkKQotewotICAgICAgICBtdXRleF9sb2NrKCZibG9ja19zdWJzeXNfbG9jayk7Ci0gICAgICAgIHJldHVybiBnZXRfbmV4dF9ibGtkZXYoTlVMTCk7Ci19Ci0KLXZvaWQgcmVsZWFzZV9ibGtkZXZfbGlzdCh2b2lkICpkZXYpCi17Ci0gICAgICAgIG11dGV4X3VubG9jaygmYmxvY2tfc3Vic3lzX2xvY2spOwotICAgICAgICBrZnJlZShkZXYpOwotfQotCi0KLS8qCi0gKiBDb3VudCB0aGUgbnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIGJsa2Rldl9saXN0LgotICogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmxvY2tfc3Vic3lzX2xvY2sgaGVsZAotICovCi1pbnQgY291bnRfYmxrZGV2X2xpc3Qodm9pZCkKLXsKLQlzdHJ1Y3QgYmxrX21ham9yX25hbWUgKm47Ci0JaW50IGksIGNvdW50OwotCi0JY291bnQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFqb3JfbmFtZXMpOyBpKyspIHsKLQkJZm9yIChuID0gbWFqb3JfbmFtZXNbaV07IG47IG4gPSBuLT5uZXh0KQotCQkJCWNvdW50Kys7CisJaWYgKG9mZnNldCA8IEJMS0RFVl9NQUpPUl9IQVNIX1NJWkUpIHsKKwkJbXV0ZXhfbG9jaygmYmxvY2tfc3Vic3lzX2xvY2spOworCQlmb3IgKGRwID0gbWFqb3JfbmFtZXNbb2Zmc2V0XTsgZHA7IGRwID0gZHAtPm5leHQpCisJCQlzZXFfcHJpbnRmKGYsICIlM2QgJXNcbiIsIGRwLT5tYWpvciwgZHAtPm5hbWUpOworCQltdXRleF91bmxvY2soJmJsb2NrX3N1YnN5c19sb2NrKTsKIAl9Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKLS8qCi0gKiBleHRyYWN0IHRoZSBtYWpvciBhbmQgbmFtZSB2YWx1ZXMgZnJvbSBhIGJsa2Rldl9pbmZvIHN0cnVjdAotICogcGFzc2VkIGluIGFzIGEgdm9pZCB0byAqZGV2LiAgTXVzdCBiZSBjYWxsZWQgd2l0aAotICogYmxvY2tfc3Vic3lzX2xvY2sgaGVsZAotICovCi1pbnQgZ2V0X2Jsa2Rldl9pbmZvKHZvaWQgKmRldiwgaW50ICptYWpvciwgY2hhciAqKm5hbWUpCi17Ci0gICAgICAgIHN0cnVjdCBibGtkZXZfaW5mbyAqaW5mbyA9IGRldjsKLQotICAgICAgICBpZiAoaW5mby0+YmQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICAqbWFqb3IgPSBpbmZvLT5iZC0+bWFqb3I7Ci0gICAgICAgICpuYW1lID0gaW5mby0+YmQtPm5hbWU7Ci0gICAgICAgIHJldHVybiAwOwotfQotCisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogaW50IHJlZ2lzdGVyX2Jsa2Rldih1bnNpZ25lZCBpbnQgbWFqb3IsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CmRpZmYgLS1naXQgYS9ibG9jay9sbF9yd19ibGsuYyBiL2Jsb2NrL2xsX3J3X2Jsay5jCmluZGV4IDViMjZhZjguLjdlYjM2YzUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2xsX3J3X2Jsay5jCisrKyBiL2Jsb2NrL2xsX3J3X2Jsay5jCkBAIC0xNTU0LDcgKzE1NTQsNyBAQAogCSAqIGRvbid0IHBsdWcgYSBzdG9wcGVkIHF1ZXVlLCBpdCBtdXN0IGJlIHBhaXJlZCB3aXRoIGJsa19zdGFydF9xdWV1ZSgpCiAJICogd2hpY2ggd2lsbCByZXN0YXJ0IHRoZSBxdWV1ZWluZwogCSAqLwotCWlmICh0ZXN0X2JpdChRVUVVRV9GTEFHX1NUT1BQRUQsICZxLT5xdWV1ZV9mbGFncykpCisJaWYgKGJsa19xdWV1ZV9zdG9wcGVkKHEpKQogCQlyZXR1cm47CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUVVFVUVfRkxBR19QTFVHR0VELCAmcS0+cXVldWVfZmxhZ3MpKSB7CkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogICovCiB2b2lkIF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHJlcXVlc3RfcXVldWVfdCAqcSkKIHsKLQlpZiAodW5saWtlbHkodGVzdF9iaXQoUVVFVUVfRkxBR19TVE9QUEVELCAmcS0+cXVldWVfZmxhZ3MpKSkKKwlpZiAodW5saWtlbHkoYmxrX3F1ZXVlX3N0b3BwZWQocSkpKQogCQlyZXR1cm47CiAKIAlpZiAoIWJsa19yZW1vdmVfcGx1ZyhxKSkKQEAgLTE3MzIsMTUgKzE3MzIsMjggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlibGtfcmVtb3ZlX3BsdWcocSk7Ci0JaWYgKCFlbHZfcXVldWVfZW1wdHkocSkpCi0JCXEtPnJlcXVlc3RfZm4ocSk7CisKKwkvKgorCSAqIE9ubHkgcmVjdXJzZSBvbmNlIHRvIGF2b2lkIG92ZXJydW5uaW5nIHRoZSBzdGFjaywgbGV0IHRoZSB1bnBsdWcKKwkgKiBoYW5kbGluZyByZWludm9rZSB0aGUgaGFuZGxlciBzaG9ydGx5IGlmIHdlIGFscmVhZHkgZ290IHRoZXJlLgorCSAqLworCWlmICghZWx2X3F1ZXVlX2VtcHR5KHEpKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChRVUVVRV9GTEFHX1JFRU5URVIsICZxLT5xdWV1ZV9mbGFncykpIHsKKwkJCXEtPnJlcXVlc3RfZm4ocSk7CisJCQljbGVhcl9iaXQoUVVFVUVfRkxBR19SRUVOVEVSLCAmcS0+cXVldWVfZmxhZ3MpOworCQl9IGVsc2UgeworCQkJYmxrX3BsdWdfZGV2aWNlKHEpOworCQkJa2Jsb2NrZF9zY2hlZHVsZV93b3JrKCZxLT51bnBsdWdfd29yayk7CisJCX0KKwl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3J1bl9xdWV1ZSk7CiAKIC8qKgogICogYmxrX2NsZWFudXBfcXVldWU6IC0gcmVsZWFzZSBhICZyZXF1ZXN0X3F1ZXVlX3Qgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkCi0gKiBAcTogICAgdGhlIHJlcXVlc3QgcXVldWUgdG8gYmUgcmVsZWFzZWQKKyAqIEBrb2JqOiAgICB0aGUga29iaiBiZWxvbmdpbmcgb2YgdGhlIHJlcXVlc3QgcXVldWUgdG8gYmUgcmVsZWFzZWQKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgICBibGtfY2xlYW51cF9xdWV1ZSBpcyB0aGUgcGFpciB0byBibGtfaW5pdF9xdWV1ZSgpIG9yCkBAIC0zMzg1LDcgKzMzOTgsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19kZXZpbml0ZGF0YSBibGtfY3B1X25vdGlmaWVyID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBibGtfY3B1X25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsCT0gYmxrX2NwdV9ub3RpZnksCiB9OwogCkBAIC0zNDM5LDcgKzM0NTIsMTIgQEAKIAlpZiAodW5saWtlbHkobGFwdG9wX21vZGUpICYmIGJsa19mc19yZXF1ZXN0KHJlcSkpCiAJCWxhcHRvcF9pb19jb21wbGV0aW9uKCk7CiAKLQlpZiAoZGlzayAmJiBibGtfZnNfcmVxdWVzdChyZXEpKSB7CisJLyoKKwkgKiBBY2NvdW50IElPIGNvbXBsZXRpb24uICBiYXJfcnEgaXNuJ3QgYWNjb3VudGVkIGFzIGEgbm9ybWFsCisJICogSU8gb24gcXVldWVpbmcgbm9yIGNvbXBsZXRpb24uICBBY2NvdW50aW5nIHRoZSBjb250YWluaW5nCisJICogcmVxdWVzdCBpcyBlbm91Z2guCisJICovCisJaWYgKGRpc2sgJiYgYmxrX2ZzX3JlcXVlc3QocmVxKSAmJiByZXEgIT0gJnJlcS0+cS0+YmFyX3JxKSB7CiAJCXVuc2lnbmVkIGxvbmcgZHVyYXRpb24gPSBqaWZmaWVzIC0gcmVxLT5zdGFydF90aW1lOwogCQljb25zdCBpbnQgcncgPSBycV9kYXRhX2RpcihyZXEpOwogCmRpZmYgLS1naXQgYS9ibG9jay9ub29wLWlvc2NoZWQuYyBiL2Jsb2NrL25vb3AtaW9zY2hlZC5jCmluZGV4IGYzNzBlNGEuLjU2YTdjNjIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL25vb3AtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL25vb3AtaW9zY2hlZC5jCkBAIC02NSwxNiArNjUsMTUgQEAKIAlyZXR1cm4gbGlzdF9lbnRyeShycS0+cXVldWVsaXN0Lm5leHQsIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpOwogfQogCi1zdGF0aWMgaW50IG5vb3BfaW5pdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCAqbm9vcF9pbml0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgZWxldmF0b3JfdCAqZSkKIHsKIAlzdHJ1Y3Qgbm9vcF9kYXRhICpuZDsKIAogCW5kID0ga21hbGxvYyhzaXplb2YoKm5kKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCUlOSVRfTElTVF9IRUFEKCZuZC0+cXVldWUpOwotCWUtPmVsZXZhdG9yX2RhdGEgPSBuZDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmQ7CiB9CiAKIHN0YXRpYyB2b2lkIG5vb3BfZXhpdF9xdWV1ZShlbGV2YXRvcl90ICplKQpkaWZmIC0tZ2l0IGEvYmxvY2svc2NzaV9pb2N0bC5jIGIvYmxvY2svc2NzaV9pb2N0bC5jCmluZGV4IDI0ZjdhZjkuLmIzM2VkYTIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3Njc2lfaW9jdGwuYworKysgYi9ibG9jay9zY3NpX2lvY3RsLmMKQEAgLTM1MCwxNiArMzUwLDUxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBzZ19zY3NpX2lvY3RsICAtLSAgaGFuZGxlIGRlcHJlY2F0ZWQgU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQgaW9jdGwKKyAqIEBmaWxlOglmaWxlIHRoaXMgaW9jdGwgb3BlcmF0ZXMgb24gKG9wdGlvbmFsKQorICogQHE6CQlyZXF1ZXN0IHF1ZXVlIHRvIHNlbmQgc2NzaSBjb21tYW5kcyBkb3duCisgKiBAZGlzazoJZ2VuZGlzayB0byBvcGVyYXRlIG9uIChvcHRpb24pCisgKiBAc2ljOgl1c2Vyc3BhY2Ugc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNvbW1hbmQgdG8gcGVyZm9ybQorICoKKyAqIFNlbmQgZG93biB0aGUgc2NzaSBjb21tYW5kIGRlc2NyaWJlZCBieSBAc2ljIHRvIHRoZSBkZXZpY2UgYmVsb3cKKyAqIHRoZSByZXF1ZXN0IHF1ZXVlIEBxLiAgSWYgQGZpbGUgaXMgbm9uLU5VTEwgaXQncyB1c2VkIHRvIHBlcmZvcm0KKyAqIGZpbmUtZ3JhaW5lZCBwZXJtaXNzaW9uIGNoZWNrcyB0aGF0IGFsbG93IHVzZXJzIHRvIHNlbmQgZG93bgorICogbm9uLWRlc3RydWN0aXZlIFNDU0kgY29tbWFuZHMuICBJZiB0aGUgY2FsbGVyIGhhcyBhIHN0cnVjdCBnZW5kaXNrCisgKiBhdmFpbGFibGUgaXQgc2hvdWxkIGJlIHBhc3NlZCBpbiBhcyBAZGlzayB0byBhbGxvdyB0aGUgbG93IGxldmVsCisgKiBkcml2ZXIgdG8gdXNlIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gaXQuICBBIG5vbi1OVUxMIEBkaXNrCisgKiBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIGNhbGxlciBrbm93cyB0aGF0IHRoZSBsb3cgbGV2ZWwgZHJpdmVyIGRvZXNuJ3QKKyAqIG5lZWQgaXQgKGUuZy4gaW4gdGhlIHNjc2kgc3Vic3lzdGVtKS4KKyAqCisgKiBOb3RlczoKKyAqICAgLSAgVGhpcyBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZCAtIHVzZXJzIHNob3VsZCB1c2UgdGhlIFNHX0lPCisgKiAgICAgIGludGVyZmFjZSBpbnN0ZWFkLCBhcyB0aGlzIGlzIGEgbW9yZSBmbGV4aWJsZSBhcHByb2FjaCB0bworICogICAgICBwZXJmb3JtaW5nIFNDU0kgY29tbWFuZHMgb24gYSBkZXZpY2UuCisgKiAgIC0gIFRoZSBTQ1NJIGNvbW1hbmQgbGVuZ3RoIGlzIGRldGVybWluZWQgYnkgZXhhbWluaW5nIHRoZSAxc3QgYnl0ZQorICogICAgICBvZiB0aGUgZ2l2ZW4gY29tbWFuZC4gVGhlcmUgaXMgbm8gd2F5IHRvIG92ZXJyaWRlIHRoaXMuCisgKiAgIC0gIERhdGEgdHJhbnNmZXJzIGFyZSBsaW1pdGVkIHRvIFBBR0VfU0laRQorICogICAtICBUaGUgbGVuZ3RoICh4ICsgeSkgbXVzdCBiZSBhdCBsZWFzdCBPTUFYX1NCX0xFTiBieXRlcyBsb25nIHRvCisgKiAgICAgIGFjY29tbW9kYXRlIHRoZSBzZW5zZSBidWZmZXIgd2hlbiBhbiBlcnJvciBvY2N1cnMuCisgKiAgICAgIFRoZSBzZW5zZSBidWZmZXIgaXMgdHJ1bmNhdGVkIHRvIE9NQVhfU0JfTEVOICgxNikgYnl0ZXMgc28gdGhhdAorICogICAgICBvbGQgY29kZSB3aWxsIG5vdCBiZSBzdXJwcmlzZWQuCisgKiAgIC0gIElmIGEgVW5peCBlcnJvciBvY2N1cnMgKGUuZy4gRU5PTUVNKSB0aGVuIHRoZSB1c2VyIHdpbGwgcmVjZWl2ZQorICogICAgICBhIG5lZ2F0aXZlIHJldHVybiBhbmQgdGhlIFVuaXggZXJyb3IgY29kZSBpbiAnZXJybm8nLgorICogICAgICBJZiB0aGUgU0NTSSBjb21tYW5kIHN1Y2NlZWRzIHRoZW4gMCBpcyByZXR1cm5lZC4KKyAqICAgICAgUG9zaXRpdmUgbnVtYmVycyByZXR1cm5lZCBhcmUgdGhlIGNvbXBhY3RlZCBTQ1NJIGVycm9yIGNvZGVzICg0CisgKiAgICAgIGJ5dGVzIGluIG9uZSBpbnQpIHdoZXJlIHRoZSBsb3dlc3QgYnl0ZSBpcyB0aGUgU0NTSSBzdGF0dXMuCisgKi8KICNkZWZpbmUgT01BWF9TQl9MRU4gMTYgICAgICAgICAgLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQotc3RhdGljIGludCBzZ19zY3NpX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCByZXF1ZXN0X3F1ZXVlX3QgKnEsCi0JCQkgc3RydWN0IGdlbmRpc2sgKmJkX2Rpc2ssIFNjc2lfSW9jdGxfQ29tbWFuZCBfX3VzZXIgKnNpYykKK2ludCBzZ19zY3NpX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJICBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IHNjc2lfaW9jdGxfY29tbWFuZCBfX3VzZXIgKnNpYykKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgaW5fbGVuLCBvdXRfbGVuLCBieXRlcywgb3Bjb2RlLCBjbWRsZW47CiAJY2hhciAqYnVmZmVyID0gTlVMTCwgc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKIAorCWlmICghc2ljKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qCiAJICogZ2V0IGluIGFuIG91dCBsZW5ndGhzLCB2ZXJpZnkgdGhleSBkb24ndCBleGNlZWQgYSBwYWdlIHdvcnRoIG9mIGRhdGEKIAkgKi8KQEAgLTM5Myw0NSArNDI4LDUzIEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKHJxLT5jbWQsIHNpYy0+ZGF0YSwgY21kbGVuKSkKIAkJZ290byBlcnJvcjsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIHNpYy0+ZGF0YSArIGNtZGxlbiwgaW5fbGVuKSkKKwlpZiAoaW5fbGVuICYmIGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgc2ljLT5kYXRhICsgY21kbGVuLCBpbl9sZW4pKQogCQlnb3RvIGVycm9yOwogCiAJZXJyID0gdmVyaWZ5X2NvbW1hbmQoZmlsZSwgcnEtPmNtZCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAorCS8qIGRlZmF1bHQuICBwb3NzaWJsZSBvdmVycmlkZW4gbGF0ZXIgKi8KKwlycS0+cmV0cmllcyA9IDU7CisKIAlzd2l0Y2ggKG9wY29kZSkgewotCQljYXNlIFNFTkRfRElBR05PU1RJQzoKLQkJY2FzZSBGT1JNQVRfVU5JVDoKLQkJCXJxLT50aW1lb3V0ID0gRk9STUFUX1VOSVRfVElNRU9VVDsKLQkJCWJyZWFrOwotCQljYXNlIFNUQVJUX1NUT1A6Ci0JCQlycS0+dGltZW91dCA9IFNUQVJUX1NUT1BfVElNRU9VVDsKLQkJCWJyZWFrOwotCQljYXNlIE1PVkVfTUVESVVNOgotCQkJcnEtPnRpbWVvdXQgPSBNT1ZFX01FRElVTV9USU1FT1VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVBRF9FTEVNRU5UX1NUQVRVUzoKLQkJCXJxLT50aW1lb3V0ID0gUkVBRF9FTEVNRU5UX1NUQVRVU19USU1FT1VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVBRF9ERUZFQ1RfREFUQToKLQkJCXJxLT50aW1lb3V0ID0gUkVBRF9ERUZFQ1RfREFUQV9USU1FT1VUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlycS0+dGltZW91dCA9IEJMS19ERUZBVUxUX1RJTUVPVVQ7Ci0JCQlicmVhazsKKwljYXNlIFNFTkRfRElBR05PU1RJQzoKKwljYXNlIEZPUk1BVF9VTklUOgorCQlycS0+dGltZW91dCA9IEZPUk1BVF9VTklUX1RJTUVPVVQ7CisJCXJxLT5yZXRyaWVzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTVEFSVF9TVE9QOgorCQlycS0+dGltZW91dCA9IFNUQVJUX1NUT1BfVElNRU9VVDsKKwkJYnJlYWs7CisJY2FzZSBNT1ZFX01FRElVTToKKwkJcnEtPnRpbWVvdXQgPSBNT1ZFX01FRElVTV9USU1FT1VUOworCQlicmVhazsKKwljYXNlIFJFQURfRUxFTUVOVF9TVEFUVVM6CisJCXJxLT50aW1lb3V0ID0gUkVBRF9FTEVNRU5UX1NUQVRVU19USU1FT1VUOworCQlicmVhazsKKwljYXNlIFJFQURfREVGRUNUX0RBVEE6CisJCXJxLT50aW1lb3V0ID0gUkVBRF9ERUZFQ1RfREFUQV9USU1FT1VUOworCQlycS0+cmV0cmllcyA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJxLT50aW1lb3V0ID0gQkxLX0RFRkFVTFRfVElNRU9VVDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGJ5dGVzICYmIGJsa19ycV9tYXBfa2VybihxLCBycSwgYnVmZmVyLCBieXRlcywgX19HRlBfV0FJVCkpIHsKKwkJZXJyID0gRFJJVkVSX0VSUk9SIDw8IDI0OworCQlnb3RvIG91dDsKIAl9CiAKIAltZW1zZXQoc2Vuc2UsIDAsIHNpemVvZihzZW5zZSkpOwogCXJxLT5zZW5zZSA9IHNlbnNlOwogCXJxLT5zZW5zZV9sZW4gPSAwOwotCi0JcnEtPmRhdGEgPSBidWZmZXI7Ci0JcnEtPmRhdGFfbGVuID0gYnl0ZXM7CiAJcnEtPmZsYWdzIHw9IFJFUV9CTE9DS19QQzsKLQlycS0+cmV0cmllcyA9IDA7CiAKLQlibGtfZXhlY3V0ZV9ycShxLCBiZF9kaXNrLCBycSwgMCk7CisJYmxrX2V4ZWN1dGVfcnEocSwgZGlzaywgcnEsIDApOworCitvdXQ6CiAJZXJyID0gcnEtPmVycm9ycyAmIDB4ZmY7CS8qIG9ubHkgOCBiaXQgU0NTSSBzdGF0dXMgKi8KIAlpZiAoZXJyKSB7CiAJCWlmIChycS0+c2Vuc2VfbGVuICYmIHJxLT5zZW5zZSkgewpAQCAtNDUwLDcgKzQ5Myw3IEBACiAJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKIAlyZXR1cm4gZXJyOwogfQotCitFWFBPUlRfU1lNQk9MX0dQTChzZ19zY3NpX2lvY3RsKTsKIAogLyogU2VuZCBiYXNpYyBibG9jayByZXF1ZXN0cyAqLwogc3RhdGljIGludCBfX2Jsa19zZW5kX2dlbmVyaWMocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZ2VuZGlzayAqYmRfZGlzaywgaW50IGNtZCwgaW50IGRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggOWY1YzBkYS4uYWViNWFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtNjQsOSArNjQsOSBAQAogCiBzb3VyY2UgImRyaXZlcnMvbW1jL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbGVkcy9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc24vS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9lZGFjL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDQyNDk1NTIuLjQ0N2Q4ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtMjUsOSArMjUsNiBAQAogb2JqLSQoQ09ORklHX0ZCX0k4MTApICAgICAgICAgICArPSB2aWRlby9pODEwLwogb2JqLSQoQ09ORklHX0ZCX0lOVEVMKSAgICAgICAgICArPSB2aWRlby9pbnRlbGZiLwogCi0jIHdlIGFsc28gbmVlZCBpbnB1dC9zZXJpbyBlYXJseSBzbyBzZXJpbyBidXMgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHRpbWUKLSMgc2VyaWFsIGRyaXZlcnMgc3RhcnQgcmVnaXN0ZXJpbmcgdGhlaXIgc2VyaW8gcG9ydHMKLW9iai0kKENPTkZJR19TRVJJTykJCSs9IGlucHV0L3NlcmlvLwogb2JqLXkJCQkJKz0gc2VyaWFsLwogb2JqLSQoQ09ORklHX1BBUlBPUlQpCQkrPSBwYXJwb3J0Lwogb2JqLXkJCQkJKz0gYmFzZS8gYmxvY2svIG1pc2MvIG1mZC8gbmV0LyBtZWRpYS8KQEAgLTUzLDYgKzUwLDcgQEAKIG9iai0kKENPTkZJR19VU0IpCQkrPSB1c2IvCiBvYmotJChDT05GSUdfUENJKQkJKz0gdXNiLwogb2JqLSQoQ09ORklHX1VTQl9HQURHRVQpCSs9IHVzYi9nYWRnZXQvCitvYmotJChDT05GSUdfU0VSSU8pCQkrPSBpbnB1dC9zZXJpby8KIG9iai0kKENPTkZJR19HQU1FUE9SVCkJCSs9IGlucHV0L2dhbWVwb3J0Lwogb2JqLSQoQ09ORklHX0lOUFVUKQkJKz0gaW5wdXQvCiBvYmotJChDT05GSUdfSTJPKQkJKz0gbWVzc2FnZS8KQEAgLTY5LDcgKzY3LDkgQEAKIG9iai0kKENPTkZJR19FSVNBKQkJKz0gZWlzYS8KIG9iai0kKENPTkZJR19DUFVfRlJFUSkJCSs9IGNwdWZyZXEvCiBvYmotJChDT05GSUdfTU1DKQkJKz0gbW1jLworb2JqLSQoQ09ORklHX05FV19MRURTKQkJKz0gbGVkcy8KIG9iai0kKENPTkZJR19JTkZJTklCQU5EKQkrPSBpbmZpbmliYW5kLworb2JqLSQoQ09ORklHX0lQQVRIX0NPUkUpCSs9IGluZmluaWJhbmQvCiBvYmotJChDT05GSUdfU0dJX1NOKQkJKz0gc24vCiBvYmoteQkJCQkrPSBmaXJtd2FyZS8KIG9iai0kKENPTkZJR19DUllQVE8pCQkrPSBjcnlwdG8vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IDVjYjk2MzAuLjJiMmZiZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0xMCw5ICsxMCw4IEBACiBjb25maWcgQUNQSQogCWJvb2wgIkFDUEkgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIElBNjQgfHwgWDg2CisJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgUE0KLQlzZWxlY3QgUENJCi0KIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgKEFDUEkpIHN1cHBvcnQgZm9yIApAQCAtMzI5LDcgKzMyOCw3IEBACiBjb25maWcgQUNQSV9IT1RQTFVHX01FTU9SWQogCXRyaXN0YXRlICJNZW1vcnkgSG90cGx1ZyIKIAlkZXBlbmRzIG9uIEFDUEkKLQlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCisJZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRyB8fCBYODZfNjQKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnRzIGZvciBBQ1BJIE1lbW9yeSBIb3RwbHVnLiAgVGhpcyBkcml2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYwppbmRleCBkODgyYmY4Li5lMGE5NWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCkBAIC03NCw3ICs3NCw3IEBACiAJdW5zaWduZWQgc2hvcnQgY2FjaGluZzsJLyogbWVtb3J5IGNhY2hlIGF0dHJpYnV0ZSAqLwogCXVuc2lnbmVkIHNob3J0IHdyaXRlX3Byb3RlY3Q7CS8qIG1lbW9yeSByZWFkL3dyaXRlIGF0dHJpYnV0ZSAqLwogCXU2NCBzdGFydF9hZGRyOwkJLyogTWVtb3J5IFJhbmdlIHN0YXJ0IHBoeXNpY2FsIGFkZHIgKi8KLQl1NjQgZW5kX2FkZHI7CQkvKiBNZW1vcnkgUmFuZ2UgZW5kIHBoeXNpY2FsIGFkZHIgKi8KKwl1NjQgbGVuZ3RoOwkJLyogTWVtb3J5IFJhbmdlIGxlbmd0aCAqLwogfTsKIAogc3RhdGljIGludApAQCAtOTcsMTIgKzk3LDExIEBACiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCWlmIChhZGRyZXNzNjQucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX01FTU9SWV9SQU5HRSkgewogCQkJLyogUG9wdWxhdGUgdGhlIHN0cnVjdHVyZSAqLwotCQkJbWVtX2RldmljZS0+Y2FjaGluZyA9Ci0JCQkgICAgYWRkcmVzczY0LmluZm8ubWVtLmNhY2hpbmc7CisJCQltZW1fZGV2aWNlLT5jYWNoaW5nID0gYWRkcmVzczY0LmluZm8ubWVtLmNhY2hpbmc7CiAJCQltZW1fZGV2aWNlLT53cml0ZV9wcm90ZWN0ID0KIAkJCSAgICBhZGRyZXNzNjQuaW5mby5tZW0ud3JpdGVfcHJvdGVjdDsKIAkJCW1lbV9kZXZpY2UtPnN0YXJ0X2FkZHIgPSBhZGRyZXNzNjQubWluaW11bTsKLQkJCW1lbV9kZXZpY2UtPmVuZF9hZGRyID0gYWRkcmVzczY0Lm1heGltdW07CisJCQltZW1fZGV2aWNlLT5sZW5ndGggPSBhZGRyZXNzNjQuYWRkcmVzc19sZW5ndGg7CiAJCX0KIAl9CiAKQEAgLTE5OSw4ICsxOTgsNyBAQAogCSAqIFRlbGwgdGhlIFZNIHRoZXJlIGlzIG1vcmUgbWVtb3J5IGhlcmUuLi4KIAkgKiBOb3RlOiBBc3N1bWUgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBvbiBzdWNjZXNzCiAJICovCi0JcmVzdWx0ID0gYWRkX21lbW9yeShtZW1fZGV2aWNlLT5zdGFydF9hZGRyLAotCQkJICAgIChtZW1fZGV2aWNlLT5lbmRfYWRkciAtIG1lbV9kZXZpY2UtPnN0YXJ0X2FkZHIpICsgMSk7CisJcmVzdWx0ID0gYWRkX21lbW9yeShtZW1fZGV2aWNlLT5zdGFydF9hZGRyLCBtZW1fZGV2aWNlLT5sZW5ndGgpOwogCWlmIChyZXN1bHQpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIlxuYWRkX21lbW9yeSBmYWlsZWRcbiIpKTsKIAkJbWVtX2RldmljZS0+c3RhdGUgPSBNRU1PUllfSU5WQUxJRF9TVEFURTsKQEAgLTI0OSw3ICsyNDcsNyBAQAogewogCWludCByZXN1bHQ7CiAJdTY0IHN0YXJ0ID0gbWVtX2RldmljZS0+c3RhcnRfYWRkcjsKLQl1NjQgbGVuID0gbWVtX2RldmljZS0+ZW5kX2FkZHIgLSBzdGFydCArIDE7CisJdTY0IGxlbiA9IG1lbV9kZXZpY2UtPmxlbmd0aDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbWVtb3J5X2Rpc2FibGVfZGV2aWNlIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYwppbmRleCBmNGM4Nzc1Li4xYTU0NTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCkBAIC04MTcsNyArODE3LDcgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpOwogCiBzdGF0aWMgaW50Ci1fX2luaXQgYXN1c19wcm9jX2FkZChjaGFyICpuYW1lLCBwcm9jX3dyaXRlZnVuYyAqIHdyaXRlZnVuYywKK2FzdXNfcHJvY19hZGQoY2hhciAqbmFtZSwgcHJvY193cml0ZWZ1bmMgKiB3cml0ZWZ1bmMsCiAJCSAgICAgcHJvY19yZWFkZnVuYyAqIHJlYWRmdW5jLCBtb2RlX3QgbW9kZSwKIAkJICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTgzNiw3ICs4MzYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhc3VzX2hvdGtfYWRkX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBhc3VzX2hvdGtfYWRkX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAltb2RlX3QgbW9kZTsKQEAgLTk1NCw3ICs5NTQsNyBAQAogICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGhvdGsgd2l0aCByaWdodCB2YWx1ZXMuIEluIHRoaXMKICAqIG1ldGhvZCwgd2UgY2FuIG1ha2UgYWxsIHRoZSBkZXRlY3Rpb24gd2Ugd2FudCwgYW5kIG1vZGlmeSB0aGUgaG90ayBzdHJ1Y3QKICAqLwotc3RhdGljIGludCBfX2luaXQgYXN1c19ob3RrX2dldF9pbmZvKHZvaWQpCitzdGF0aWMgaW50IGFzdXNfaG90a19nZXRfaW5mbyh2b2lkKQogewogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RydWN0IGFjcGlfYnVmZmVyIGRzZHQgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CkBAIC05NzAsNyArOTcwLDcgQEAKIAkgKiBISUQpLCB0aGlzIGJpdCB3aWxsIGJlIG1vdmVkLiBBIGdsb2JhbCB2YXJpYWJsZSBhc3VzX2luZm8gY29udGFpbnMKIAkgKiB0aGUgRFNEVCBoZWFkZXIuCiAJICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9UQUJMRV9EU0RULCAxLCAmZHNkdCk7CisJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9UQUJMRV9JRF9EU0RULCAxLCAmZHNkdCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIgIENvdWxkbid0IGdldCB0aGUgRFNEVCB0YWJsZSBoZWFkZXJcbiIpOwogCWVsc2UKQEAgLTExMDEsNyArMTEwMSw3IEBACiAJcmV0dXJuIEFFX09LOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhc3VzX2hvdGtfY2hlY2sodm9pZCkKK3N0YXRpYyBpbnQgYXN1c19ob3RrX2NoZWNrKHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKQEAgLTExMTksNyArMTExOSw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgYXN1c19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgYXN1c19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlpbnQgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IDYwNmY4NzMuLmI3N2YwM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTQzLDcgKzQzLDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBhY3BpX3BpY19zY2lfc2V0X3RyaWdnZXIodW5zaWduZWQgaW50IGlycSwgdTE2IHRyaWdnZXIpOwogI2VuZGlmCiAKLUZBRFRfREVTQ1JJUFRPUiBhY3BpX2ZhZHQ7CitzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yIGFjcGlfZmFkdDsKIEVYUE9SVF9TWU1CT0woYWNwaV9mYWR0KTsKIAogc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX3Jvb3Q7CkBAIC01OTYsNiArNTk2LDggQEAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKIAkJcmV0dXJuX1ZPSUQ7CiAKKwlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiQ29yZSByZXZpc2lvbiAlMDh4XG4iLCBBQ1BJX0NBX1ZFUlNJT04pOworCiAJLyogZW5hYmxlIHdvcmthcm91bmRzLCB1bmxlc3Mgc3RyaWN0IEFDUEkgc3BlYy4gY29tcGxpYW5jZSAqLwogCWlmICghYWNwaV9zdHJpY3QpCiAJCWFjcGlfZ2JsX2VuYWJsZV9pbnRlcnByZXRlcl9zbGFjayA9IFRSVUU7CkBAIC02MTcsNyArNjE5LDcgQEAKIAkvKgogCSAqIEdldCBhIHNlcGFyYXRlIGNvcHkgb2YgdGhlIEZBRFQgZm9yIHVzZSBieSBvdGhlciBkcml2ZXJzLgogCSAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfVEFCTEVfRkFEVCwgMSwgJmJ1ZmZlcik7CisJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9UQUJMRV9JRF9GQURULCAxLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVW5hYmxlIHRvIGdldCB0aGUgRkFEVFxuIik7CiAJCWdvdG8gZXJyb3IwOwpAQCAtNzQzLDggKzc0NSw2IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luaXQiKTsKIAotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJTdWJzeXN0ZW0gcmV2aXNpb24gJTA4eFxuIiwgQUNQSV9DQV9WRVJTSU9OKTsKLQogCWlmIChhY3BpX2Rpc2FibGVkKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJJbnRlcnByZXRlciBkaXNhYmxlZC5cbiIpOwogCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2ZpZWxkLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2ZpZWxkLmMKaW5kZXggNzZiYzA0Ni4uYTZkNzdlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNmaWVsZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzZmllbGQuYwpAQCAtODcsNyArODcsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnNlY29uZF9kZXNjID0gTlVMTDsKIAl1MzIgZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19jcmVhdGVfYnVmZmVyX2ZpZWxkIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19jcmVhdGVfYnVmZmVyX2ZpZWxkKTsKIAogCS8qIEdldCB0aGUgbmFtZV9zdHJpbmcgYXJndW1lbnQgKi8KIApAQCAtMjEwLDcgKzIxMCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfaW50ZWdlciBwb3NpdGlvbjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19nZXRfZmllbGRfbmFtZXMiLCBpbmZvKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19nZXRfZmllbGRfbmFtZXMsIGluZm8pOwogCiAJLyogRmlyc3QgZmllbGQgc3RhcnRzIGF0IGJpdCB6ZXJvICovCiAKQEAgLTM0Miw3ICszNDIsNyBAQAogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICphcmc7CiAJc3RydWN0IGFjcGlfY3JlYXRlX2ZpZWxkX2luZm8gaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19jcmVhdGVfZmllbGQiLCBvcCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfY3JlYXRlX2ZpZWxkLCBvcCk7CiAKIAkvKiBGaXJzdCBhcmcgaXMgdGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvcF9yZWdpb24gKG11c3QgYWxyZWFkeSBleGlzdCkgKi8KIApAQCAtMzk5LDcgKzM5OSw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdTggdHlwZSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfaW5pdF9maWVsZF9vYmplY3RzIiwgb3ApOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2luaXRfZmllbGRfb2JqZWN0cywgb3ApOwogCiAJc3dpdGNoICh3YWxrX3N0YXRlLT5vcGNvZGUpIHsKIAljYXNlIEFNTF9GSUVMRF9PUDoKQEAgLTQyNSw2ICs0MjUsNyBAQAogCSAqIFdhbGsgdGhlIGxpc3Qgb2YgZW50cmllcyBpbiB0aGUgZmllbGRfbGlzdAogCSAqLwogCXdoaWxlIChhcmcpIHsKKwogCQkvKiBJZ25vcmUgT0ZGU0VUIGFuZCBBQ0NFU1NBUyB0ZXJtcyBoZXJlICovCiAKIAkJaWYgKGFyZy0+Y29tbW9uLmFtbF9vcGNvZGUgPT0gQU1MX0lOVF9OQU1FREZJRUxEX09QKSB7CkBAIC00ODEsNyArNDgyLDcgQEAKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYXJnOwogCXN0cnVjdCBhY3BpX2NyZWF0ZV9maWVsZF9pbmZvIGluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfY3JlYXRlX2JhbmtfZmllbGQiLCBvcCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfY3JlYXRlX2JhbmtfZmllbGQsIG9wKTsKIAogCS8qIEZpcnN0IGFyZyBpcyB0aGUgbmFtZSBvZiB0aGUgcGFyZW50IG9wX3JlZ2lvbiAobXVzdCBhbHJlYWR5IGV4aXN0KSAqLwogCkBAIC01NTQsNyArNTU1LDcgQEAKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYXJnOwogCXN0cnVjdCBhY3BpX2NyZWF0ZV9maWVsZF9pbmZvIGluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfY3JlYXRlX2luZGV4X2ZpZWxkIiwgb3ApOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2NyZWF0ZV9pbmRleF9maWVsZCwgb3ApOwogCiAJLyogRmlyc3QgYXJnIGlzIHRoZSBuYW1lIG9mIHRoZSBJbmRleCByZWdpc3RlciAobXVzdCBhbHJlYWR5IGV4aXN0KSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2luaXQuYyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzaW5pdC5jCmluZGV4IGU2NWEwN2EuLmJiZGY5OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzaW5pdC5jCkBAIC0xODQsNyArMTg0LDcgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IFdhbGsgdGhlIG5hbWVzcGFjZSBzdGFydGluZyBhdCAic3RhcnRfbm9kZSIgYW5kIHBlcmZvcm0gYW55CisgKiBERVNDUklQVElPTjogV2FsayB0aGUgbmFtZXNwYWNlIHN0YXJ0aW5nIGF0ICJTdGFydE5vZGUiIGFuZCBwZXJmb3JtIGFueQogICogICAgICAgICAgICAgIG5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiBvbiB0aGUgb2JqZWN0cyBmb3VuZCB0aGVyZWluCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE5Niw3ICsxOTYsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9pbml0X3dhbGtfaW5mbyBpbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfaW5pdGlhbGl6ZV9vYmplY3RzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19pbml0aWFsaXplX29iamVjdHMpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKIAkJCSAgIioqKiogU3RhcnRpbmcgaW5pdGlhbGl6YXRpb24gb2YgbmFtZXNwYWNlIG9iamVjdHMgKioqKlxuIikpOwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfQU5ZLCBzdGFydF9ub2RlLCBBQ1BJX1VJTlQzMl9NQVgsCiAJCQkJICAgICBhY3BpX2RzX2luaXRfb25lX29iamVjdCwgJmluZm8sIE5VTEwpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRHVyaW5nIHdhbGtfbmFtZXNwYWNlIikpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRHVyaW5nIFdhbGtOYW1lc3BhY2UiKSk7CiAJfQogCiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfSU5JVCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc21ldGhvZC5jCmluZGV4IGM0NzU1NDYuLmJjOWFjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtZXRob2QuYwpAQCAtODEsNiArODEsNyBAQAogCS8qIEludm9rZSB0aGUgZ2xvYmFsIGV4Y2VwdGlvbiBoYW5kbGVyICovCiAKIAlpZiAoYWNwaV9nYmxfZXhjZXB0aW9uX2hhbmRsZXIpIHsKKwogCQkvKiBFeGl0IHRoZSBpbnRlcnByZXRlciwgYWxsb3cgaGFuZGxlciB0byBleGVjdXRlIG1ldGhvZHMgKi8KIAogCQlhY3BpX2V4X2V4aXRfaW50ZXJwcmV0ZXIoKTsKQEAgLTEwMCw2ICsxMDEsNyBAQAogCX0KICNpZmRlZiBBQ1BJX0RJU0FTU0VNQkxFUgogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCS8qIERpc3BsYXkgbWV0aG9kIGxvY2Fscy9hcmdzIGlmIGRpc2Fzc2VtYmxlciBpcyBwcmVzZW50ICovCiAKIAkJYWNwaV9kbV9kdW1wX21ldGhvZF9pbmZvKHN0YXR1cywgd2Fsa19zdGF0ZSwgd2Fsa19zdGF0ZS0+b3ApOwpAQCAtMTMyLDcgKzEzNCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfYmVnaW5fbWV0aG9kX2V4ZWN1dGlvbiIsIG1ldGhvZF9ub2RlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19iZWdpbl9tZXRob2RfZXhlY3V0aW9uLCBtZXRob2Rfbm9kZSk7CiAKIAlpZiAoIW1ldGhvZF9ub2RlKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OVUxMX0VOVFJZKTsKQEAgLTE2OCwxMSArMTcwLDE0IEBACiAKIAkJLyoKIAkJICogR2V0IGEgdW5pdCBmcm9tIHRoZSBtZXRob2Qgc2VtYXBob3JlLiBUaGlzIHJlbGVhc2VzIHRoZQotCQkgKiBpbnRlcnByZXRlciBpZiB3ZSBibG9jaworCQkgKiBpbnRlcnByZXRlciBpZiB3ZSBibG9jayAodGhlbiByZWFjcXVpcmVzIGl0KQogCQkgKi8KIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfZXhfc3lzdGVtX3dhaXRfc2VtYXBob3JlKG9ial9kZXNjLT5tZXRob2Quc2VtYXBob3JlLAogCQkJCQkJICBBQ1BJX1dBSVRfRk9SRVZFUik7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCX0KIAl9CiAKIAkvKgpAQCAtMTgzLDcgKzE4OCw3IEBACiAJaWYgKCFvYmpfZGVzYy0+bWV0aG9kLm93bmVyX2lkKSB7CiAJCXN0YXR1cyA9IGFjcGlfdXRfYWxsb2NhdGVfb3duZXJfaWQoJm9ial9kZXNjLT5tZXRob2Qub3duZXJfaWQpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQkJZ290byBjbGVhbnVwOwogCQl9CiAJfQogCkBAIC0xOTMsNiArMTk4LDE0IEBACiAJICovCiAJb2JqX2Rlc2MtPm1ldGhvZC50aHJlYWRfY291bnQrKzsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKworICAgICAgY2xlYW51cDoKKwkvKiBPbiBlcnJvciwgbXVzdCBzaWduYWwgdGhlIG1ldGhvZCBzZW1hcGhvcmUgaWYgcHJlc2VudCAqLworCisJaWYgKG9ial9kZXNjLT5tZXRob2Quc2VtYXBob3JlKSB7CisJCSh2b2lkKWFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZShvYmpfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSwgMSk7CisJfQorCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjE4LDEwICsyMzEsMTAgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbWV0aG9kX25vZGU7CiAJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqbmV4dF93YWxrX3N0YXRlID0gTlVMTDsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKLQlzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyBpbmZvOworCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CiAJdTMyIGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfY2FsbF9jb250cm9sX21ldGhvZCIsIHRoaXNfd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfY2FsbF9jb250cm9sX21ldGhvZCwgdGhpc193YWxrX3N0YXRlKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCiAJCQkgICJFeGVjdXRlIG1ldGhvZCAlcCwgY3VycmVudHN0YXRlPSVwXG4iLApAQCAtMjQwLDI1ICsyNTMsMzEgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05VTExfT0JKRUNUKTsKIAl9CiAKLQkvKiBJbml0IGZvciBuZXcgbWV0aG9kLCB3YWl0IG9uIGNvbmN1cnJlbmN5IHNlbWFwaG9yZSAqLworCS8qIEluaXQgZm9yIG5ldyBtZXRob2QsIHBvc3NpYmx5IHdhaXQgb24gY29uY3VycmVuY3kgc2VtYXBob3JlICovCiAKIAlzdGF0dXMgPSBhY3BpX2RzX2JlZ2luX21ldGhvZF9leGVjdXRpb24obWV0aG9kX25vZGUsIG9ial9kZXNjLAogCQkJCQkJdGhpc193YWxrX3N0YXRlLT5tZXRob2Rfbm9kZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gY2xlYW51cDsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCisJLyoKKwkgKiAxKSBQYXJzZSB0aGUgbWV0aG9kLiBBbGwgIm5vcm1hbCIgbWV0aG9kcyBhcmUgcGFyc2VkIGZvciBlYWNoIGV4ZWN1dGlvbi4KKwkgKiBJbnRlcm5hbCBtZXRob2RzIChfT1NJLCBldGMuKSBkbyBub3QgcmVxdWlyZSBwYXJzaW5nLgorCSAqLwogCWlmICghKG9ial9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzICYgQU1MX01FVEhPRF9JTlRFUk5BTF9PTkxZKSkgewotCQkvKiAxKSBQYXJzZTogQ3JlYXRlIGEgbmV3IHdhbGsgc3RhdGUgZm9yIHRoZSBwcmVlbXB0aW5nIHdhbGsgKi8KKworCQkvKiBDcmVhdGUgYSBuZXcgd2FsayBzdGF0ZSBmb3IgdGhlIHBhcnNlICovCiAKIAkJbmV4dF93YWxrX3N0YXRlID0KIAkJICAgIGFjcGlfZHNfY3JlYXRlX3dhbGtfc3RhdGUob2JqX2Rlc2MtPm1ldGhvZC5vd25lcl9pZCwgb3AsCiAJCQkJCSAgICAgIG9ial9kZXNjLCBOVUxMKTsKIAkJaWYgKCFuZXh0X3dhbGtfc3RhdGUpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCQkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQkJZ290byBjbGVhbnVwOwogCQl9CiAKLQkJLyogQ3JlYXRlIGFuZCBpbml0IGEgUm9vdCBOb2RlICovCisJCS8qIENyZWF0ZSBhbmQgaW5pdCBhIHBhcnNlIHRyZWUgcm9vdCAqLwogCiAJCW9wID0gYWNwaV9wc19jcmVhdGVfc2NvcGVfb3AoKTsKIAkJaWYgKCFvcCkgewpAQCAtMjcxLDE3ICsyOTAsMjAgQEAKIAkJCQkJICAgICAgIG9ial9kZXNjLT5tZXRob2QuYW1sX2xlbmd0aCwKIAkJCQkJICAgICAgIE5VTEwsIDEpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWFjcGlfZHNfZGVsZXRlX3dhbGtfc3RhdGUobmV4dF93YWxrX3N0YXRlKTsKKwkJCWFjcGlfcHNfZGVsZXRlX3BhcnNlX3RyZWUob3ApOwogCQkJZ290byBjbGVhbnVwOwogCQl9CiAKLQkJLyogQmVnaW4gQU1MIHBhcnNlICovCisJCS8qIEJlZ2luIEFNTCBwYXJzZSAoZGVsZXRlcyBuZXh0X3dhbGtfc3RhdGUpICovCiAKIAkJc3RhdHVzID0gYWNwaV9wc19wYXJzZV9hbWwobmV4dF93YWxrX3N0YXRlKTsKIAkJYWNwaV9wc19kZWxldGVfcGFyc2VfdHJlZShvcCk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJZ290byBjbGVhbnVwOworCQl9CiAJfQogCi0JLyogMikgRXhlY3V0ZTogQ3JlYXRlIGEgbmV3IHN0YXRlIGZvciB0aGUgcHJlZW1wdGluZyB3YWxrICovCisJLyogMikgQmVnaW4gbWV0aG9kIGV4ZWN1dGlvbi4gQ3JlYXRlIGEgbmV3IHdhbGsgc3RhdGUgKi8KIAogCW5leHRfd2Fsa19zdGF0ZSA9IGFjcGlfZHNfY3JlYXRlX3dhbGtfc3RhdGUob2JqX2Rlc2MtPm1ldGhvZC5vd25lcl9pZCwKIAkJCQkJCSAgICBOVUxMLCBvYmpfZGVzYywgdGhyZWFkKTsKQEAgLTI4OSw2ICszMTEsNyBAQAogCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CiAJCWdvdG8gY2xlYW51cDsKIAl9CisKIAkvKgogCSAqIFRoZSByZXNvbHZlZCBhcmd1bWVudHMgd2VyZSBwdXQgb24gdGhlIHByZXZpb3VzIHdhbGsgc3RhdGUncyBvcGVyYW5kCiAJICogc3RhY2suIE9wZXJhbmRzIG9uIHRoZSBwcmV2aW91cyB3YWxrIHN0YXRlIHN0YWNrIGFsd2F5cwpAQCAtMjk2LDEyICszMTksMjQgQEAKIAkgKi8KIAl0aGlzX3dhbGtfc3RhdGUtPm9wZXJhbmRzW3RoaXNfd2Fsa19zdGF0ZS0+bnVtX29wZXJhbmRzXSA9IE5VTEw7CiAKLQlpbmZvLnBhcmFtZXRlcnMgPSAmdGhpc193YWxrX3N0YXRlLT5vcGVyYW5kc1swXTsKLQlpbmZvLnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOworCS8qCisJICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGV2YWx1YXRpb24gaW5mb3JtYXRpb24gYmxvY2sKKwkgKiBUQkQ6IHRoaXMgaXMgc29tZXdoYXQgaW5lZmZpY2llbnQsIHNob3VsZCBjaGFuZ2UgaW50ZXJmYWNlIHRvCisJICogZHNfaW5pdF9hbWxfd2Fsay4gRm9yIG5vdywga2VlcHMgdGhpcyBzdHJ1Y3Qgb2ZmIHRoZSBDUFUgc3RhY2sKKwkgKi8KKwlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8pKTsKKwlpZiAoIWluZm8pIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CisJfQorCisJaW5mby0+cGFyYW1ldGVycyA9ICZ0aGlzX3dhbGtfc3RhdGUtPm9wZXJhbmRzWzBdOworCWluZm8tPnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOwogCiAJc3RhdHVzID0gYWNwaV9kc19pbml0X2FtbF93YWxrKG5leHRfd2Fsa19zdGF0ZSwgTlVMTCwgbWV0aG9kX25vZGUsCiAJCQkJICAgICAgIG9ial9kZXNjLT5tZXRob2QuYW1sX3N0YXJ0LAotCQkJCSAgICAgICBvYmpfZGVzYy0+bWV0aG9kLmFtbF9sZW5ndGgsICZpbmZvLCAzKTsKKwkJCQkgICAgICAgb2JqX2Rlc2MtPm1ldGhvZC5hbWxfbGVuZ3RoLCBpbmZvLCAzKTsKKworCUFDUElfRlJFRShpbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byBjbGVhbnVwOwogCX0KQEAgLTMyMyw2ICszNTgsOCBAQAogCQkJICAiU3RhcnRpbmcgbmVzdGVkIGV4ZWN1dGlvbiwgbmV3c3RhdGU9JXBcbiIsCiAJCQkgIG5leHRfd2Fsa19zdGF0ZSkpOwogCisJLyogSW52b2tlIGFuIGludGVybmFsIG1ldGhvZCBpZiBuZWNlc3NhcnkgKi8KKwogCWlmIChvYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfSU5URVJOQUxfT05MWSkgewogCQlzdGF0dXMgPSBvYmpfZGVzYy0+bWV0aG9kLmltcGxlbWVudGF0aW9uKG5leHRfd2Fsa19zdGF0ZSk7CiAJfQpAQCAtMzMwLDE2ICszNjcsMTQgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAogICAgICAgY2xlYW51cDoKLQkvKiBEZWNyZW1lbnQgdGhlIHRocmVhZCBjb3VudCBvbiB0aGUgbWV0aG9kIHBhcnNlIHRyZWUgKi8KIAotCWlmIChuZXh0X3dhbGtfc3RhdGUgJiYgKG5leHRfd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MpKSB7Ci0JCW5leHRfd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC50aHJlYWRfY291bnQtLTsKKwkvKiBPbiBlcnJvciwgd2UgbXVzdCB0ZXJtaW5hdGUgdGhlIG1ldGhvZCBwcm9wZXJseSAqLworCisJYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2Qob2JqX2Rlc2MsIG5leHRfd2Fsa19zdGF0ZSk7CisJaWYgKG5leHRfd2Fsa19zdGF0ZSkgeworCQlhY3BpX2RzX2RlbGV0ZV93YWxrX3N0YXRlKG5leHRfd2Fsa19zdGF0ZSk7CiAJfQogCi0JLyogT24gZXJyb3IsIHdlIG11c3QgZGVsZXRlIHRoZSBuZXcgd2FsayBzdGF0ZSAqLwotCi0JYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2QobmV4dF93YWxrX3N0YXRlKTsKLQlhY3BpX2RzX2RlbGV0ZV93YWxrX3N0YXRlKG5leHRfd2Fsa19zdGF0ZSk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTM2MiwyNSArMzk3LDMzIEBACiAJCQkgICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCBzYW1lX2FzX2ltcGxpY2l0X3JldHVybjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19yZXN0YXJ0X2NvbnRyb2xfbWV0aG9kIiwgd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfcmVzdGFydF9jb250cm9sX21ldGhvZCwgd2Fsa19zdGF0ZSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJICAiKioqKlJlc3RhcnQgWyU0LjRzXSBPcCAlcCByZXR1cm5fdmFsdWVfZnJvbV9jYWxsZWUgJXBcbiIsCisJCQkgICIqKioqUmVzdGFydCBbJTQuNHNdIE9wICVwIFJldHVyblZhbHVlRnJvbUNhbGxlZSAlcFxuIiwKIAkJCSAgKGNoYXIgKikmd2Fsa19zdGF0ZS0+bWV0aG9kX25vZGUtPm5hbWUsCiAJCQkgIHdhbGtfc3RhdGUtPm1ldGhvZF9jYWxsX29wLCByZXR1cm5fZGVzYykpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKLQkJCSAgIiAgICByZXR1cm5fZnJvbV90aGlzX21ldGhvZF91c2VkPz0lWCByZXNfc3RhY2sgJXAgV2FsayAlcFxuIiwKKwkJCSAgIiAgICBSZXR1cm5Gcm9tVGhpc01ldGhvZFVzZWQ/PSVYIFJlc1N0YWNrICVwIFdhbGsgJXBcbiIsCiAJCQkgIHdhbGtfc3RhdGUtPnJldHVybl91c2VkLAogCQkJICB3YWxrX3N0YXRlLT5yZXN1bHRzLCB3YWxrX3N0YXRlKSk7CiAKIAkvKiBEaWQgdGhlIGNhbGxlZCBtZXRob2QgcmV0dXJuIGEgdmFsdWU/ICovCiAKIAlpZiAocmV0dXJuX2Rlc2MpIHsKKworCQkvKiBJcyB0aGUgaW1wbGljaXQgcmV0dXJuIG9iamVjdCB0aGUgc2FtZSBhcyB0aGUgcmV0dXJuIGRlc2M/ICovCisKKwkJc2FtZV9hc19pbXBsaWNpdF9yZXR1cm4gPQorCQkgICAgKHdhbGtfc3RhdGUtPmltcGxpY2l0X3JldHVybl9vYmogPT0gcmV0dXJuX2Rlc2MpOworCiAJCS8qIEFyZSB3ZSBhY3R1YWxseSBnb2luZyB0byB1c2UgdGhlIHJldHVybiB2YWx1ZT8gKi8KIAogCQlpZiAod2Fsa19zdGF0ZS0+cmV0dXJuX3VzZWQpIHsKKwogCQkJLyogU2F2ZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIG1ldGhvZCAqLwogCiAJCQlzdGF0dXMgPSBhY3BpX2RzX3Jlc3VsdF9wdXNoKHJldHVybl9kZXNjLCB3YWxrX3N0YXRlKTsKQEAgLTM5NywxOCArNDQwLDIzIEBACiAJCX0KIAogCQkvKgotCQkgKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdGhlCi0JCSAqIG9wdGlvbmFsIHN1cHBvcnQgZm9yIGEgc28tY2FsbGVkICJpbXBsaWNpdCByZXR1cm4iLiBTb21lIEFNTCBjb2RlCi0JCSAqIGFzc3VtZXMgdGhhdCB0aGUgbGFzdCB2YWx1ZSBvZiB0aGUgbWV0aG9kIGlzICJpbXBsaWNpdGx5IiByZXR1cm5lZAotCQkgKiB0byB0aGUgY2FsbGVyLiBKdXN0IHNhdmUgdGhlIGxhc3QgcmVzdWx0IGFzIHRoZSByZXR1cm4gdmFsdWUuCisJCSAqIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB0aGUgb3B0aW9uYWwgc3VwcG9ydCBmb3IgdGhlIHNvLWNhbGxlZAorCQkgKiAiaW1wbGljaXQgcmV0dXJuIi4gU29tZSBBTUwgY29kZSBhc3N1bWVzIHRoYXQgdGhlIGxhc3QgdmFsdWUgb2YgdGhlCisJCSAqIG1ldGhvZCBpcyAiaW1wbGljaXRseSIgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciwgaW4gdGhlIGFic2VuY2Ugb2YgYW4KKwkJICogZXhwbGljaXQgcmV0dXJuIHZhbHVlLgorCQkgKgorCQkgKiBKdXN0IHNhdmUgdGhlIGxhc3QgcmVzdWx0IG9mIHRoZSBtZXRob2QgYXMgdGhlIHJldHVybiB2YWx1ZS4KKwkJICoKIAkJICogTk9URTogdGhpcyBpcyBvcHRpb25hbCBiZWNhdXNlIHRoZSBBU0wgbGFuZ3VhZ2UgZG9lcyBub3QgYWN0dWFsbHkKIAkJICogc3VwcG9ydCB0aGlzIGJlaGF2aW9yLgogCQkgKi8KIAkJZWxzZSBpZiAoIWFjcGlfZHNfZG9faW1wbGljaXRfcmV0dXJuCi0JCQkgKHJldHVybl9kZXNjLCB3YWxrX3N0YXRlLCBGQUxTRSkpIHsKKwkJCSAocmV0dXJuX2Rlc2MsIHdhbGtfc3RhdGUsIEZBTFNFKQorCQkJIHx8IHNhbWVfYXNfaW1wbGljaXRfcmV0dXJuKSB7CiAJCQkvKgogCQkJICogRGVsZXRlIHRoZSByZXR1cm4gdmFsdWUgaWYgaXQgd2lsbCBub3QgYmUgdXNlZCBieSB0aGUKLQkJCSAqIGNhbGxpbmcgbWV0aG9kCisJCQkgKiBjYWxsaW5nIG1ldGhvZCBvciByZW1vdmUgb25lIHJlZmVyZW5jZSBpZiB0aGUgZXhwbGljaXQgcmV0dXJuCisJCQkgKiBpcyB0aGUgc2FtZSBhcyB0aGUgaW1wbGljaXQgcmV0dXJuIHZhbHVlLgogCQkJICovCiAJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UocmV0dXJuX2Rlc2MpOwogCQl9CkBAIC00MjEsNyArNDY5LDggQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2QKICAqCi0gKiBQQVJBTUVURVJTOiAgd2Fsa19zdGF0ZSAgICAgICAgICAtIFN0YXRlIG9mIHRoZSBtZXRob2QKKyAqIFBBUkFNRVRFUlM6ICBtZXRob2RfZGVzYyAgICAgICAgIC0gTWV0aG9kIG9iamVjdAorICogICAgICAgICAgICAgIHdhbGtfc3RhdGUgICAgICAgICAgLSBTdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1ldGhvZAogICoKICAqIFJFVFVSTjogICAgICBOb25lCiAgKgpAQCAtNDMxLDk1ICs0ODAsMTAwIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX2RzX3Rlcm1pbmF0ZV9jb250cm9sX21ldGhvZChzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKQordm9pZAorYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbWV0aG9kX2Rlc2MsCisJCQkJIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCiB7Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm1ldGhvZF9ub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2QiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2QsIHdhbGtfc3RhdGUpOwogCi0JaWYgKCF3YWxrX3N0YXRlKSB7CisJLyogbWV0aG9kX2Rlc2MgaXMgcmVxdWlyZWQsIHdhbGtfc3RhdGUgaXMgb3B0aW9uYWwgKi8KKworCWlmICghbWV0aG9kX2Rlc2MpIHsKIAkJcmV0dXJuX1ZPSUQ7CiAJfQogCi0JLyogVGhlIGN1cnJlbnQgbWV0aG9kIG9iamVjdCB3YXMgc2F2ZWQgaW4gdGhlIHdhbGsgc3RhdGUgKi8KKwlpZiAod2Fsa19zdGF0ZSkgewogCi0Jb2JqX2Rlc2MgPSB3YWxrX3N0YXRlLT5tZXRob2RfZGVzYzsKLQlpZiAoIW9ial9kZXNjKSB7Ci0JCXJldHVybl9WT0lEOworCQkvKiBEZWxldGUgYWxsIGFyZ3VtZW50cyBhbmQgbG9jYWxzICovCisKKwkJYWNwaV9kc19tZXRob2RfZGF0YV9kZWxldGVfYWxsKHdhbGtfc3RhdGUpOwogCX0KIAotCS8qIERlbGV0ZSBhbGwgYXJndW1lbnRzIGFuZCBsb2NhbHMgKi8KLQotCWFjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX2FsbCh3YWxrX3N0YXRlKTsKLQogCS8qCiAJICogTG9jayB0aGUgcGFyc2VyIHdoaWxlIHdlIHRlcm1pbmF0ZSB0aGlzIG1ldGhvZC4KIAkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHRocmVhZCBleGVjdXRpbmcgdGhlIG1ldGhvZCwKIAkgKiB3ZSBoYXZlIGFkZGl0aW9uYWwgY2xlYW51cCB0byBwZXJmb3JtCiAJICovCi0Jc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX1BBUlNFUik7CisJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0NPTlRST0xfTUVUSE9EKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX1ZPSUQ7CiAJfQogCiAJLyogU2lnbmFsIGNvbXBsZXRpb24gb2YgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIG1ldGhvZCBpZiBuZWNlc3NhcnkgKi8KIAotCWlmICh3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkgeworCWlmIChtZXRob2RfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkgewogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9vc19zaWduYWxfc2VtYXBob3JlKHdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QuCi0JCQkJCSAgICAgc2VtYXBob3JlLCAxKTsKKwkJICAgIGFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZShtZXRob2RfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSwgMSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIkNvdWxkIG5vdCBzaWduYWwgbWV0aG9kIHNlbWFwaG9yZSIpKTsKIAotCQkJLyogSWdub3JlIGVycm9yIGFuZCBjb250aW51ZSBjbGVhbnVwICovCisJCQkvKiBJZ25vcmUgZXJyb3IgYW5kIGNvbnRpbnVlICovCisKKwkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJCSJDb3VsZCBub3Qgc2lnbmFsIG1ldGhvZCBzZW1hcGhvcmUiKSk7CiAJCX0KIAl9CiAKLQkvKgotCSAqIFRoZXJlIGFyZSBubyBtb3JlIHRocmVhZHMgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLiAgUGVyZm9ybQotCSAqIGFkZGl0aW9uYWwgY2xlYW51cC4KLQkgKgotCSAqIFRoZSBtZXRob2QgTm9kZSBpcyBzdG9yZWQgaW4gdGhlIHdhbGsgc3RhdGUKLQkgKi8KLQltZXRob2Rfbm9kZSA9IHdhbGtfc3RhdGUtPm1ldGhvZF9ub2RlOworCWlmICh3YWxrX3N0YXRlKSB7CisJCS8qCisJCSAqIERlbGV0ZSBhbnkgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoaXMgbWV0aG9kIGR1cmluZyBleGVjdXRpb24uCisJCSAqIFRoZSBtZXRob2QgTm9kZSBpcyBzdG9yZWQgaW4gdGhlIHdhbGsgc3RhdGUKKwkJICovCisJCW1ldGhvZF9ub2RlID0gd2Fsa19zdGF0ZS0+bWV0aG9kX25vZGU7CiAKLQkvKiBMb2NrIG5hbWVzcGFjZSBmb3IgcG9zc2libGUgdXBkYXRlICovCisJCS8qIExvY2sgbmFtZXNwYWNlIGZvciBwb3NzaWJsZSB1cGRhdGUgKi8KIAotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIGV4aXQ7CisJCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCS8qCisJCSAqIERlbGV0ZSBhbnkgbmFtZXNwYWNlIGVudHJpZXMgY3JlYXRlZCBpbW1lZGlhdGVseSB1bmRlcm5lYXRoCisJCSAqIHRoZSBtZXRob2QKKwkJICovCisJCWlmIChtZXRob2Rfbm9kZSAmJiBtZXRob2Rfbm9kZS0+Y2hpbGQpIHsKKwkJCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9zdWJ0cmVlKG1ldGhvZF9ub2RlKTsKKwkJfQorCisJCS8qCisJCSAqIERlbGV0ZSBhbnkgbmFtZXNwYWNlIGVudHJpZXMgY3JlYXRlZCBhbnl3aGVyZSBlbHNlIHdpdGhpbgorCQkgKiB0aGUgbmFtZXNwYWNlIGJ5IHRoZSBleGVjdXRpb24gb2YgdGhpcyBtZXRob2QKKwkJICovCisJCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcihtZXRob2RfZGVzYy0+bWV0aG9kLm93bmVyX2lkKTsKKwkJc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJfQogCi0JLyoKLQkgKiBEZWxldGUgYW55IG5hbWVzcGFjZSBlbnRyaWVzIGNyZWF0ZWQgaW1tZWRpYXRlbHkgdW5kZXJuZWF0aAotCSAqIHRoZSBtZXRob2QKLQkgKi8KLQlpZiAobWV0aG9kX25vZGUtPmNoaWxkKSB7Ci0JCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9zdWJ0cmVlKG1ldGhvZF9ub2RlKTsKLQl9CisJLyogRGVjcmVtZW50IHRoZSB0aHJlYWQgY291bnQgb24gdGhlIG1ldGhvZCAqLwogCi0JLyoKLQkgKiBEZWxldGUgYW55IG5hbWVzcGFjZSBlbnRyaWVzIGNyZWF0ZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4KLQkgKiB0aGUgbmFtZXNwYWNlIGJ5IHRoZSBleGVjdXRpb24gb2YgdGhpcyBtZXRob2QKLQkgKi8KLQlhY3BpX25zX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIod2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC4KLQkJCQkJICBvd25lcl9pZCk7Ci0Jc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CisJaWYgKG1ldGhvZF9kZXNjLT5tZXRob2QudGhyZWFkX2NvdW50KSB7CisJCW1ldGhvZF9kZXNjLT5tZXRob2QudGhyZWFkX2NvdW50LS07CisJfSBlbHNlIHsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgemVybyB0aHJlYWQgY291bnQgaW4gbWV0aG9kIikpOworCX0KIAogCS8qIEFyZSB0aGVyZSBhbnkgb3RoZXIgdGhyZWFkcyBjdXJyZW50bHkgZXhlY3V0aW5nIHRoaXMgbWV0aG9kPyAqLwogCi0JaWYgKHdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QudGhyZWFkX2NvdW50KSB7CisJaWYgKG1ldGhvZF9kZXNjLT5tZXRob2QudGhyZWFkX2NvdW50KSB7CiAJCS8qCiAJCSAqIEFkZGl0aW9uYWwgdGhyZWFkcy4gRG8gbm90IHJlbGVhc2UgdGhlIG93bmVyX2lkIGluIHRoaXMgY2FzZSwKIAkJICogd2UgaW1tZWRpYXRlbHkgcmV1c2UgaXQgZm9yIHRoZSBuZXh0IHRocmVhZCBleGVjdXRpbmcgdGhpcyBtZXRob2QKIAkJICovCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCiAJCQkJICAiKioqIENvbXBsZXRlZCBleGVjdXRpb24gb2Ygb25lIHRocmVhZCwgJWQgdGhyZWFkcyByZW1haW5pbmdcbiIsCi0JCQkJICB3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLgotCQkJCSAgdGhyZWFkX2NvdW50KSk7CisJCQkJICBtZXRob2RfZGVzYy0+bWV0aG9kLnRocmVhZF9jb3VudCkpOwogCX0gZWxzZSB7CiAJCS8qIFRoaXMgaXMgdGhlIG9ubHkgZXhlY3V0aW5nIHRocmVhZCBmb3IgdGhpcyBtZXRob2QgKi8KIApAQCAtNTMzLDIyICs1ODcsMjAgQEAKIAkJICogVGhpcyBjb2RlIGlzIGhlcmUgYmVjYXVzZSB3ZSBtdXN0IHdhaXQgdW50aWwgdGhlIGxhc3QgdGhyZWFkIGV4aXRzCiAJCSAqIGJlZm9yZSBjcmVhdGluZyB0aGUgc3luY2hyb25pemF0aW9uIHNlbWFwaG9yZS4KIAkJICovCi0JCWlmICgod2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC5jb25jdXJyZW5jeSA9PSAxKSAmJgotCQkgICAgKCF3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkpIHsKKwkJaWYgKChtZXRob2RfZGVzYy0+bWV0aG9kLmNvbmN1cnJlbmN5ID09IDEpICYmCisJCSAgICAoIW1ldGhvZF9kZXNjLT5tZXRob2Quc2VtYXBob3JlKSkgewogCQkJc3RhdHVzID0gYWNwaV9vc19jcmVhdGVfc2VtYXBob3JlKDEsIDEsCi0JCQkJCQkJICAmd2Fsa19zdGF0ZS0+Ci0JCQkJCQkJICBtZXRob2RfZGVzYy0+bWV0aG9kLgorCQkJCQkJCSAgJm1ldGhvZF9kZXNjLT5tZXRob2QuCiAJCQkJCQkJICBzZW1hcGhvcmUpOwogCQl9CiAKIAkJLyogTm8gbW9yZSB0aHJlYWRzLCB3ZSBjYW4gZnJlZSB0aGUgb3duZXJfaWQgKi8KIAotCQlhY3BpX3V0X3JlbGVhc2Vfb3duZXJfaWQoJndhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QuCi0JCQkJCSBvd25lcl9pZCk7CisJCWFjcGlfdXRfcmVsZWFzZV9vd25lcl9pZCgmbWV0aG9kX2Rlc2MtPm1ldGhvZC5vd25lcl9pZCk7CiAJfQogCiAgICAgICBleGl0OgotCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9QQVJTRVIpOworCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9DT05UUk9MX01FVEhPRCk7CiAJcmV0dXJuX1ZPSUQ7CiB9CiAKQEAgLTU4MSw3ICs2MzMsNyBAQAogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcDsKIAlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX3BhcnNlX21ldGhvZCIsIG5vZGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX3BhcnNlX21ldGhvZCwgbm9kZSk7CiAKIAkvKiBQYXJhbWV0ZXIgVmFsaWRhdGlvbiAqLwogCkBAIC01OTAsNyArNjQyLDcgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLAotCQkJICAiKioqKiBQYXJzaW5nIFslNC40c10gKioqKiBuYW1lZF9vYmo9JXBcbiIsCisJCQkgICIqKioqIFBhcnNpbmcgWyU0LjRzXSAqKioqIE5hbWVkT2JqPSVwXG4iLAogCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSksIG5vZGUpKTsKIAogCS8qIEV4dHJhY3QgdGhlIG1ldGhvZCBvYmplY3QgZnJvbSB0aGUgbWV0aG9kIE5vZGUgKi8KQEAgLTY2OSw3ICs3MjEsNyBAQAogCX0KIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCi0JCQkgICIqKioqIFslNC40c10gUGFyc2VkICoqKiogbmFtZWRfb2JqPSVwIE9wPSVwXG4iLAorCQkJICAiKioqKiBbJTQuNHNdIFBhcnNlZCAqKioqIE5hbWVkT2JqPSVwIE9wPSVwXG4iLAogCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSksIG5vZGUsIG9wKSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtdGhkYXQuYyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbXRoZGF0LmMKaW5kZXggYzAyNTY3NC4uNDU5MTYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtdGhkYXQuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc210aGRhdC5jCkBAIC04MSw3ICs4MSw3IEBACiAgKiAgICAgICAgICAgICAgc3BlY2lhbCBkYXRhIHR5cGVzLgogICoKICAqIE5PVEVTOiAgICAgICB3YWxrX3N0YXRlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgdG8gemVybyBieSB0aGUKLSAqICAgICAgICAgICAgICBBQ1BJX01FTV9DQUxMT0NBVEUoKS4KKyAqICAgICAgICAgICAgICBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgpLgogICoKICAqICAgICAgICAgICAgICBBIHBzZXVkby1OYW1lc3BhY2UgTm9kZSBpcyBhc3NpZ25lZCB0byBlYWNoIGFyZ3VtZW50IGFuZCBsb2NhbAogICogICAgICAgICAgICAgIHNvIHRoYXQgcmVmX29mKCkgY2FuIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIE5vZGUuCkBAIC05Miw3ICs5Miw3IEBACiB7CiAJdTMyIGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19tZXRob2RfZGF0YV9pbml0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19tZXRob2RfZGF0YV9pbml0KTsKIAogCS8qIEluaXQgdGhlIG1ldGhvZCBhcmd1bWVudHMgKi8KIApAQCAtMTAwLDEwICsxMDAsMTAgQEAKIAkJQUNQSV9NT1ZFXzMyX1RPXzMyKCZ3YWxrX3N0YXRlLT5hcmd1bWVudHNbaV0ubmFtZSwKIAkJCQkgICBOQU1FT0ZfQVJHX05URSk7CiAJCXdhbGtfc3RhdGUtPmFyZ3VtZW50c1tpXS5uYW1lLmludGVnZXIgfD0gKGkgPDwgMjQpOwotCQl3YWxrX3N0YXRlLT5hcmd1bWVudHNbaV0uZGVzY3JpcHRvciA9IEFDUElfREVTQ19UWVBFX05BTUVEOworCQl3YWxrX3N0YXRlLT5hcmd1bWVudHNbaV0uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfTkFNRUQ7CiAJCXdhbGtfc3RhdGUtPmFyZ3VtZW50c1tpXS50eXBlID0gQUNQSV9UWVBFX0FOWTsKLQkJd2Fsa19zdGF0ZS0+YXJndW1lbnRzW2ldLmZsYWdzID0gQU5PQkpfRU5EX09GX1BFRVJfTElTVCB8Ci0JCSAgICBBTk9CSl9NRVRIT0RfQVJHOworCQl3YWxrX3N0YXRlLT5hcmd1bWVudHNbaV0uZmxhZ3MgPQorCQkgICAgQU5PQkpfRU5EX09GX1BFRVJfTElTVCB8IEFOT0JKX01FVEhPRF9BUkc7CiAJfQogCiAJLyogSW5pdCB0aGUgbWV0aG9kIGxvY2FscyAqLwpAQCAtMTEzLDExICsxMTMsMTEgQEAKIAkJCQkgICBOQU1FT0ZfTE9DQUxfTlRFKTsKIAogCQl3YWxrX3N0YXRlLT5sb2NhbF92YXJpYWJsZXNbaV0ubmFtZS5pbnRlZ2VyIHw9IChpIDw8IDI0KTsKLQkJd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2ldLmRlc2NyaXB0b3IgPQorCQl3YWxrX3N0YXRlLT5sb2NhbF92YXJpYWJsZXNbaV0uZGVzY3JpcHRvcl90eXBlID0KIAkJICAgIEFDUElfREVTQ19UWVBFX05BTUVEOwogCQl3YWxrX3N0YXRlLT5sb2NhbF92YXJpYWJsZXNbaV0udHlwZSA9IEFDUElfVFlQRV9BTlk7Ci0JCXdhbGtfc3RhdGUtPmxvY2FsX3ZhcmlhYmxlc1tpXS5mbGFncyA9IEFOT0JKX0VORF9PRl9QRUVSX0xJU1QgfAotCQkgICAgQU5PQkpfTUVUSE9EX0xPQ0FMOworCQl3YWxrX3N0YXRlLT5sb2NhbF92YXJpYWJsZXNbaV0uZmxhZ3MgPQorCQkgICAgQU5PQkpfRU5EX09GX1BFRVJfTElTVCB8IEFOT0JKX01FVEhPRF9MT0NBTDsKIAl9CiAKIAlyZXR1cm5fVk9JRDsKQEAgLTE0MCw3ICsxNDAsNyBAQAogewogCXUzMiBpbmRleDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX21ldGhvZF9kYXRhX2RlbGV0ZV9hbGwiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX21ldGhvZF9kYXRhX2RlbGV0ZV9hbGwpOwogCiAJLyogRGV0YWNoIHRoZSBsb2NhbHMgKi8KIApAQCAtMTk5LDcgKzE5OSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXUzMiBpbmRleCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfbWV0aG9kX2RhdGFfaW5pdF9hcmdzIiwgcGFyYW1zKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19tZXRob2RfZGF0YV9pbml0X2FyZ3MsIHBhcmFtcyk7CiAKIAlpZiAoIXBhcmFtcykgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJCSAgICAgc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSwKIAkJCSAgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipub2RlKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX21ldGhvZF9kYXRhX2dldF9ub2RlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19tZXRob2RfZGF0YV9nZXRfbm9kZSk7CiAKIAkvKgogCSAqIE1ldGhvZCBMb2NhbHMgYW5kIEFyZ3VtZW50cyBhcmUgc3VwcG9ydGVkCkBAIC0zMTgsMTAgKzMxOCwxMCBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX21ldGhvZF9kYXRhX3NldF92YWx1ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfbWV0aG9kX2RhdGFfc2V0X3ZhbHVlKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCSAgIm5ld19vYmogJXAgT3Bjb2RlICVYLCBSZWZzPSVkIFslc11cbiIsIG9iamVjdCwKKwkJCSAgIk5ld09iaiAlcCBPcGNvZGUgJVgsIFJlZnM9JWQgWyVzXVxuIiwgb2JqZWN0LAogCQkJICBvcGNvZGUsIG9iamVjdC0+Y29tbW9uLnJlZmVyZW5jZV9jb3VudCwKIAkJCSAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKG9iamVjdC0+Y29tbW9uLnR5cGUpKSk7CiAKQEAgLTMzNiw3ICszMzYsNyBAQAogCSAqIEluY3JlbWVudCByZWYgY291bnQgc28gb2JqZWN0IGNhbid0IGJlIGRlbGV0ZWQgd2hpbGUgaW5zdGFsbGVkLgogCSAqIE5PVEU6IFdlIGRvIG5vdCBjb3B5IHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gcHJlc2VydmUgdGhlIGNhbGwgYnkKIAkgKiByZWZlcmVuY2Ugc2VtYW50aWNzIG9mIEFDUEkgQ29udHJvbCBNZXRob2QgaW52b2NhdGlvbi4KLQkgKiAoU2VlIEFDUEkgc3BlY2lmaWNhdGlvbiAyLjBfYykKKwkgKiAoU2VlIEFDUEkgU3BlY2lmaWNhdGlvbiAyLjBfYykKIAkgKi8KIAlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uob2JqZWN0KTsKIApAQCAtMzUxLDcgKzM1MSw3IEBACiAgKiBGVU5DVElPTjogICAgYWNwaV9kc19tZXRob2RfZGF0YV9nZXRfdmFsdWUKICAqCiAgKiBQQVJBTUVURVJTOiAgT3Bjb2RlICAgICAgICAgICAgICAtIEVpdGhlciBBTUxfTE9DQUxfT1Agb3IgQU1MX0FSR19PUAotICogICAgICAgICAgICAgIEluZGV4ICAgICAgICAgICAgICAgLSB3aGljaCBsb2NhbF92YXIgb3IgYXJndW1lbnQgdG8gZ2V0CisgKiAgICAgICAgICAgICAgSW5kZXggICAgICAgICAgICAgICAtIFdoaWNoIGxvY2FsX3ZhciBvciBhcmd1bWVudCB0byBnZXQKICAqICAgICAgICAgICAgICB3YWxrX3N0YXRlICAgICAgICAgIC0gQ3VycmVudCB3YWxrIHN0YXRlIG9iamVjdAogICogICAgICAgICAgICAgIGRlc3RfZGVzYyAgICAgICAgICAgLSBXaGVyZSBBcmcgb3IgTG9jYWwgdmFsdWUgaXMgcmV0dXJuZWQKICAqCkBAIC0zNzIsNyArMzcyLDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3Q7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19tZXRob2RfZGF0YV9nZXRfdmFsdWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX21ldGhvZF9kYXRhX2dldF92YWx1ZSk7CiAKIAkvKiBWYWxpZGF0ZSB0aGUgb2JqZWN0IGRlc2NyaXB0b3IgKi8KIApAQCAtNDU5LDcgKzQ1OSw3IEBACiAgKiBGVU5DVElPTjogICAgYWNwaV9kc19tZXRob2RfZGF0YV9kZWxldGVfdmFsdWUKICAqCiAgKiBQQVJBTUVURVJTOiAgT3Bjb2RlICAgICAgICAgICAgICAtIEVpdGhlciBBTUxfTE9DQUxfT1Agb3IgQU1MX0FSR19PUAotICogICAgICAgICAgICAgIEluZGV4ICAgICAgICAgICAgICAgLSB3aGljaCBsb2NhbF92YXIgb3IgYXJndW1lbnQgdG8gZGVsZXRlCisgKiAgICAgICAgICAgICAgSW5kZXggICAgICAgICAgICAgICAtIFdoaWNoIGxvY2FsX3ZhciBvciBhcmd1bWVudCB0byBkZWxldGUKICAqICAgICAgICAgICAgICB3YWxrX3N0YXRlICAgICAgICAgIC0gQ3VycmVudCB3YWxrIHN0YXRlIG9iamVjdAogICoKICAqIFJFVFVSTjogICAgICBOb25lCkBAIC00NzcsNyArNDc3LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3Q7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19tZXRob2RfZGF0YV9kZWxldGVfdmFsdWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX21ldGhvZF9kYXRhX2RlbGV0ZV92YWx1ZSk7CiAKIAkvKiBHZXQgdGhlIG5hbWVzcGFjZSBub2RlIGZvciB0aGUgYXJnL2xvY2FsICovCiAKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmN1cnJlbnRfb2JqX2Rlc2M7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV3X29ial9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfc3RvcmVfb2JqZWN0X3RvX2xvY2FsIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19zdG9yZV9vYmplY3RfdG9fbG9jYWwpOwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIk9wY29kZT0lWCBJbmRleD0lZCBPYmo9JXBcbiIsCiAJCQkgIG9wY29kZSwgaW5kZXgsIG9ial9kZXNjKSk7CiAKQEAgLTYxNCw3ICs2MTQsNyBAQAogCQkJICAgICYmIChjdXJyZW50X29ial9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09CiAJCQkJQU1MX1JFRl9PRl9PUCkpIHsKIAkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJCQkgICJBcmcgKCVwKSBpcyBhbiBvYmpfcmVmKE5vZGUpLCBzdG9yaW5nIGluIG5vZGUgJXBcbiIsCisJCQkJCQkgICJBcmcgKCVwKSBpcyBhbiBPYmpSZWYoTm9kZSksIHN0b3JpbmcgaW4gbm9kZSAlcFxuIiwKIAkJCQkJCSAgbmV3X29ial9kZXNjLAogCQkJCQkJICBjdXJyZW50X29ial9kZXNjKSk7CiAKQEAgLTY4OCw3ICs2ODgsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9iamVjdDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX21ldGhvZF9kYXRhX2dldF90eXBlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19tZXRob2RfZGF0YV9nZXRfdHlwZSk7CiAKIAkvKiBHZXQgdGhlIG5hbWVzcGFjZSBub2RlIGZvciB0aGUgYXJnL2xvY2FsICovCiAKQEAgLTcwMSw2ICs3MDEsNyBAQAogCiAJb2JqZWN0ID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCWlmICghb2JqZWN0KSB7CisKIAkJLyogVW5pbml0aWFsaXplZCBsb2NhbC9hcmcsIHJldHVybiBUWVBFX0FOWSAqLwogCiAJCXJldHVybl9WQUxVRShBQ1BJX1RZUEVfQU5ZKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29iamVjdC5jCmluZGV4IDhiMjFmMGYuLjcyMTkwYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNvYmplY3QuYwpAQCAtODEsNyArODEsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX2J1aWxkX2ludGVybmFsX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfYnVpbGRfaW50ZXJuYWxfb2JqZWN0KTsKIAogCSpvYmpfZGVzY19wdHIgPSBOVUxMOwogCWlmIChvcC0+Y29tbW9uLmFtbF9vcGNvZGUgPT0gQU1MX0lOVF9OQU1FUEFUSF9PUCkgewpAQCAtMTAzLDYgKzEwMyw3IEBACiAJCQkJCQkJCQkgY29tbW9uLgogCQkJCQkJCQkJIG5vZGUpKSk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkJCS8qIENoZWNrIGlmIHdlIGFyZSByZXNvbHZpbmcgYSBuYW1lZCByZWZlcmVuY2Ugd2l0aGluIGEgcGFja2FnZSAqLwogCiAJCQkJaWYgKChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKQpAQCAtMTg2LDcgKzE4Nyw3IEBACiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKmJ5dGVfbGlzdDsKIAl1MzIgYnl0ZV9saXN0X2xlbmd0aCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19idWlsZF9pbnRlcm5hbF9idWZmZXJfb2JqIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19idWlsZF9pbnRlcm5hbF9idWZmZXJfb2JqKTsKIAogCS8qCiAJICogSWYgd2UgYXJlIGV2YWx1YXRpbmcgYSBOYW1lZCBidWZmZXIgb2JqZWN0ICJOYW1lICh4eHh4LCBCdWZmZXIpIi4KQEAgLTE5NSw2ICsxOTYsNyBAQAogCSAqLwogCW9ial9kZXNjID0gKm9ial9kZXNjX3B0cjsKIAlpZiAoIW9ial9kZXNjKSB7CisKIAkJLyogQ3JlYXRlIGEgbmV3IGJ1ZmZlciBvYmplY3QgKi8KIAogCQlvYmpfZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX1RZUEVfQlVGRkVSKTsKQEAgLTI0Myw3ICsyNDUsNyBAQAogCQkJCSAgIkJ1ZmZlciBkZWZpbmVkIHdpdGggemVybyBsZW5ndGggaW4gQU1MLCBjcmVhdGluZ1xuIikpOwogCX0gZWxzZSB7CiAJCW9ial9kZXNjLT5idWZmZXIucG9pbnRlciA9Ci0JCSAgICBBQ1BJX01FTV9DQUxMT0NBVEUob2JqX2Rlc2MtPmJ1ZmZlci5sZW5ndGgpOworCQkgICAgQUNQSV9BTExPQ0FURV9aRVJPRUQob2JqX2Rlc2MtPmJ1ZmZlci5sZW5ndGgpOwogCQlpZiAoIW9ial9kZXNjLT5idWZmZXIucG9pbnRlcikgewogCQkJYWNwaV91dF9kZWxldGVfb2JqZWN0X2Rlc2Mob2JqX2Rlc2MpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CkBAIC0yOTEsNyArMjkzLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19idWlsZF9pbnRlcm5hbF9wYWNrYWdlX29iaiIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfYnVpbGRfaW50ZXJuYWxfcGFja2FnZV9vYmopOwogCiAJLyogRmluZCB0aGUgcGFyZW50IG9mIGEgcG9zc2libHkgbmVzdGVkIHBhY2thZ2UgKi8KIApAQCAtMzM5LDkgKzM0MSwxMCBAQAogCSAqIGluZGl2aWR1YWwgb2JqZWN0cykuIEFkZCBhbiBleHRyYSBwb2ludGVyIHNsb3Qgc28KIAkgKiB0aGF0IHRoZSBsaXN0IGlzIGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQuCiAJICovCi0Jb2JqX2Rlc2MtPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX01FTV9DQUxMT0NBVEUoKChhY3BpX3NpemUpIG9ial9kZXNjLT4KLQkJCQkJCQkgcGFja2FnZS5jb3VudCArCi0JCQkJCQkJIDEpICogc2l6ZW9mKHZvaWQgKikpOworCW9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoKChhY3BpX3NpemUpCisJCQkJCQkJICAgb2JqX2Rlc2MtPnBhY2thZ2UuCisJCQkJCQkJICAgY291bnQgKworCQkJCQkJCSAgIDEpICogc2l6ZW9mKHZvaWQgKikpOwogCiAJaWYgKCFvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50cykgewogCQlhY3BpX3V0X2RlbGV0ZV9vYmplY3RfZGVzYyhvYmpfZGVzYyk7CkBAIC0zNTUsNiArMzU4LDcgQEAKIAlhcmcgPSBhcmctPmNvbW1vbi5uZXh0OwogCWZvciAoaSA9IDA7IGFyZzsgaSsrKSB7CiAJCWlmIChhcmctPmNvbW1vbi5hbWxfb3Bjb2RlID09IEFNTF9JTlRfUkVUVVJOX1ZBTFVFX09QKSB7CisKIAkJCS8qIE9iamVjdCAocGFja2FnZSBvciBidWZmZXIpIGlzIGFscmVhZHkgYnVpbHQgKi8KIAogCQkJb2JqX2Rlc2MtPnBhY2thZ2UuZWxlbWVudHNbaV0gPQpAQCAtMzk2LDcgKzQwMCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2NyZWF0ZV9ub2RlIiwgb3ApOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2NyZWF0ZV9ub2RlLCBvcCk7CiAKIAkvKgogCSAqIEJlY2F1c2Ugb2YgdGhlIGV4ZWN1dGlvbiBwYXNzIHRocm91Z2ggdGhlIG5vbi1jb250cm9sLW1ldGhvZApAQCAtNDA4LDYgKzQxMiw3IEBACiAJfQogCiAJaWYgKCFvcC0+Y29tbW9uLnZhbHVlLmFyZykgeworCiAJCS8qIE5vIGFyZ3VtZW50cywgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqLwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC00NjQsMTEgKzQ2OSwxMiBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfaW5pdF9vYmplY3RfZnJvbV9vcCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfaW5pdF9vYmplY3RfZnJvbV9vcCk7CiAKIAlvYmpfZGVzYyA9ICpyZXRfb2JqX2Rlc2M7CiAJb3BfaW5mbyA9IGFjcGlfcHNfZ2V0X29wY29kZV9pbmZvKG9wY29kZSk7CiAJaWYgKG9wX2luZm8tPmNsYXNzID09IEFNTF9DTEFTU19VTktOT1dOKSB7CisKIAkJLyogVW5rbm93biBvcGNvZGUgKi8KIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfVFlQRSk7CkBAIC02MjYsNiArNjMyLDcgQEAKIAkJZGVmYXVsdDoJLyogT3RoZXIgbGl0ZXJhbHMsIGV0Yy4uICovCiAKIAkJCWlmIChvcC0+Y29tbW9uLmFtbF9vcGNvZGUgPT0gQU1MX0lOVF9OQU1FUEFUSF9PUCkgeworCiAJCQkJLyogTm9kZSB3YXMgc2F2ZWQgaW4gT3AgKi8KIAogCQkJCW9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZSA9IG9wLT5jb21tb24ubm9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb3Bjb2RlLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29wY29kZS5jCmluZGV4IDYyMjljMTAuLjViOTc0YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb3Bjb2RlLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNvcGNvZGUuYwpAQCAtOTEsNyArOTEsNyBAQAogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcDsKIAlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfZXhlY3V0ZV9hcmd1bWVudHMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX2V4ZWN1dGVfYXJndW1lbnRzKTsKIAogCS8qCiAJICogQWxsb2NhdGUgYSBuZXcgcGFyc2VyIG9wIHRvIGJlIHRoZSByb290IG9mIHRoZSBwYXJzZWQgdHJlZQpAQCAtMTkzLDcgKzE5Myw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2dldF9idWZmZXJfZmllbGRfYXJndW1lbnRzIiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2dldF9idWZmZXJfZmllbGRfYXJndW1lbnRzLCBvYmpfZGVzYyk7CiAKIAlpZiAob2JqX2Rlc2MtPmNvbW1vbi5mbGFncyAmIEFPUE9CSl9EQVRBX1ZBTElEKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAogCUFDUElfREVCVUdfRVhFQyhhY3BpX3V0X2Rpc3BsYXlfaW5pdF9wYXRobmFtZQogCQkJKEFDUElfVFlQRV9CVUZGRVJfRklFTEQsIG5vZGUsIE5VTEwpKTsKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJbJTQuNHNdIGJ1ZmZlcl9maWVsZCBBcmcgSW5pdFxuIiwKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJbJTQuNHNdIEJ1ZmZlckZpZWxkIEFyZyBJbml0XG4iLAogCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSkpKTsKIAogCS8qIEV4ZWN1dGUgdGhlIEFNTCBjb2RlIGZvciB0aGUgdGVybV9hcmcgYXJndW1lbnRzICovCkBAIC0yMzUsNyArMjM1LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZ2V0X2J1ZmZlcl9hcmd1bWVudHMiLCBvYmpfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZ2V0X2J1ZmZlcl9hcmd1bWVudHMsIG9ial9kZXNjKTsKIAogCWlmIChvYmpfZGVzYy0+Y29tbW9uLmZsYWdzICYgQU9QT0JKX0RBVEFfVkFMSUQpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTI3OSw3ICsyNzksNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19nZXRfcGFja2FnZV9hcmd1bWVudHMiLCBvYmpfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZ2V0X3BhY2thZ2VfYXJndW1lbnRzLCBvYmpfZGVzYyk7CiAKIAlpZiAob2JqX2Rlc2MtPmNvbW1vbi5mbGFncyAmIEFPUE9CSl9EQVRBX1ZBTElEKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0zMjQsNyArMzI0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqZXh0cmFfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19nZXRfcmVnaW9uX2FyZ3VtZW50cyIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19nZXRfcmVnaW9uX2FyZ3VtZW50cywgb2JqX2Rlc2MpOwogCiAJaWYgKG9ial9kZXNjLT5yZWdpb24uZmxhZ3MgJiBBT1BPQkpfREFUQV9WQUxJRCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMzQyLDggKzM0Miw3IEBACiAJQUNQSV9ERUJVR19FWEVDKGFjcGlfdXRfZGlzcGxheV9pbml0X3BhdGhuYW1lCiAJCQkoQUNQSV9UWVBFX1JFR0lPTiwgbm9kZSwgTlVMTCkpOwogCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJICAiWyU0LjRzXSBvcF9yZWdpb24gQXJnIEluaXQgYXQgQU1MICVwXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIlslNC40c10gT3BSZWdpb24gQXJnIEluaXQgYXQgQU1MICVwXG4iLAogCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSksCiAJCQkgIGV4dHJhX2Rlc2MtPmV4dHJhLmFtbF9zdGFydCkpOwogCkBAIC0zNTIsNiArMzUxLDI4IEBACiAJc3RhdHVzID0gYWNwaV9kc19leGVjdXRlX2FyZ3VtZW50cyhub2RlLCBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShub2RlKSwKIAkJCQkJICAgZXh0cmFfZGVzYy0+ZXh0cmEuYW1sX2xlbmd0aCwKIAkJCQkJICAgZXh0cmFfZGVzYy0+ZXh0cmEuYW1sX3N0YXJ0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJLyogVmFsaWRhdGUgdGhlIHJlZ2lvbiBhZGRyZXNzL2xlbmd0aCB2aWEgdGhlIGhvc3QgT1MgKi8KKworCXN0YXR1cyA9IGFjcGlfb3NfdmFsaWRhdGVfYWRkcmVzcyhvYmpfZGVzYy0+cmVnaW9uLnNwYWNlX2lkLAorCQkJCQkgIG9ial9kZXNjLT5yZWdpb24uYWRkcmVzcywKKwkJCQkJICAoYWNwaV9zaXplKSBvYmpfZGVzYy0+cmVnaW9uLmxlbmd0aCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCS8qCisJCSAqIEludmFsaWQgYWRkcmVzcy9sZW5ndGguIFdlIHdpbGwgZW1pdCBhbiBlcnJvciBtZXNzYWdlIGFuZCBtYXJrCisJCSAqIHRoZSByZWdpb24gYXMgaW52YWxpZCwgc28gdGhhdCBpdCB3aWxsIGNhdXNlIGFuIGFkZGl0aW9uYWwgZXJyb3IgaWYKKwkJICogaXQgaXMgZXZlciB1c2VkLiBUaGVuIHJldHVybiBBRV9PSy4KKwkJICovCisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJIkR1cmluZyBhZGRyZXNzIHZhbGlkYXRpb24gb2YgT3BSZWdpb24gWyU0LjRzXSIsCisJCQkJbm9kZS0+bmFtZS5hc2NpaSkpOworCQlvYmpfZGVzYy0+Y29tbW9uLmZsYWdzIHw9IEFPUE9CSl9JTlZBTElEOworCQlzdGF0dXMgPSBBRV9PSzsKKwl9CisKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtNDExLDcgKzQzMiw3IEBACiAJdTggZmllbGRfZmxhZ3M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2luaXRfYnVmZmVyX2ZpZWxkIiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2luaXRfYnVmZmVyX2ZpZWxkLCBvYmpfZGVzYyk7CiAKIAkvKiBIb3N0IG9iamVjdCBtdXN0IGJlIGEgQnVmZmVyICovCiAKQEAgLTQ1Nyw3ICs0NzgsNyBAQAogCiAJCWlmIChiaXRfY291bnQgPT0gMCkgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIkF0dGVtcHQgdG8gY3JlYXRlX2ZpZWxkIG9mIGxlbmd0aCB6ZXJvIikpOworCQkJCSAgICAiQXR0ZW1wdCB0byBDcmVhdGVGaWVsZCBvZiBsZW5ndGggemVybyIpKTsKIAkJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1ZBTFVFOwogCQkJZ290byBjbGVhbnVwOwogCQl9CkBAIC01OTUsNyArNjE2LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqbmV4dF9vcDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19ldmFsX2J1ZmZlcl9maWVsZF9vcGVyYW5kcyIsIG9wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19ldmFsX2J1ZmZlcl9maWVsZF9vcGVyYW5kcywgb3ApOwogCiAJLyoKIAkgKiBUaGlzIGlzIHdoZXJlIHdlIGV2YWx1YXRlIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggZmllbGRzIG9mIHRoZQpAQCAtNjI3LDcgKzY0OCw3IEBACiAJQUNQSV9EVU1QX09QRVJBTkRTKEFDUElfV0FMS19PUEVSQU5EUywgQUNQSV9JTU9ERV9FWEVDVVRFLAogCQkJICAgYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUob3AtPmNvbW1vbi5hbWxfb3Bjb2RlKSwKIAkJCSAgIHdhbGtfc3RhdGUtPm51bV9vcGVyYW5kcywKLQkJCSAgICJhZnRlciBhY3BpX2V4X3Jlc29sdmVfb3BlcmFuZHMiKTsKKwkJCSAgICJhZnRlciBBY3BpRXhSZXNvbHZlT3BlcmFuZHMiKTsKIAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiKCVzKSBiYWQgb3BlcmFuZChzKSAoJVgpIiwKQEAgLTY0MCw2ICs2NjEsNyBAQAogCS8qIEluaXRpYWxpemUgdGhlIEJ1ZmZlciBGaWVsZCAqLwogCiAJaWYgKG9wLT5jb21tb24uYW1sX29wY29kZSA9PSBBTUxfQ1JFQVRFX0ZJRUxEX09QKSB7CisKIAkJLyogTk9URTogU2xpZ2h0bHkgZGlmZmVyZW50IG9wZXJhbmRzIGZvciB0aGlzIG9wY29kZSAqLwogCiAJCXN0YXR1cyA9CkBAIC02ODUsNyArNzA3LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqbmV4dF9vcDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19ldmFsX3JlZ2lvbl9vcGVyYW5kcyIsIG9wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19ldmFsX3JlZ2lvbl9vcGVyYW5kcywgb3ApOwogCiAJLyoKIAkgKiBUaGlzIGlzIHdoZXJlIHdlIGV2YWx1YXRlIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggZmllbGRzIG9mIHRoZQpAQCAtNzE4LDcgKzc0MCw3IEBACiAKIAlBQ1BJX0RVTVBfT1BFUkFORFMoQUNQSV9XQUxLX09QRVJBTkRTLCBBQ1BJX0lNT0RFX0VYRUNVVEUsCiAJCQkgICBhY3BpX3BzX2dldF9vcGNvZGVfbmFtZShvcC0+Y29tbW9uLmFtbF9vcGNvZGUpLAotCQkJICAgMSwgImFmdGVyIGFjcGlfZXhfcmVzb2x2ZV9vcGVyYW5kcyIpOworCQkJICAgMSwgImFmdGVyIEFjcGlFeFJlc29sdmVPcGVyYW5kcyIpOwogCiAJb2JqX2Rlc2MgPSBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3Qobm9kZSk7CiAJaWYgKCFvYmpfZGVzYykgewpAQCAtNzQ0LDcgKzc2Niw3IEBACiAJICAgIG9wZXJhbmRfZGVzYy0+aW50ZWdlci52YWx1ZTsKIAlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uob3BlcmFuZF9kZXNjKTsKIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgInJnbl9vYmogJXAgQWRkciAlOC44WCU4LjhYIExlbiAlWFxuIiwKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJSZ25PYmogJXAgQWRkciAlOC44WCU4LjhYIExlbiAlWFxuIiwKIAkJCSAgb2JqX2Rlc2MsCiAJCQkgIEFDUElfRk9STUFUX1VJTlQ2NChvYmpfZGVzYy0+cmVnaW9uLmFkZHJlc3MpLAogCQkJICBvYmpfZGVzYy0+cmVnaW9uLmxlbmd0aCkpOwpAQCAtNzgwLDcgKzgwMiw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqYXJnX2Rlc2M7CiAJdTMyIGxlbmd0aDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX2V2YWxfZGF0YV9vYmplY3Rfb3BlcmFuZHMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX2V2YWxfZGF0YV9vYmplY3Rfb3BlcmFuZHMpOwogCiAJLyogVGhlIGZpcnN0IG9wZXJhbmQgKGZvciBhbGwgb2YgdGhlc2UgZGF0YSBvYmplY3RzKSBpcyB0aGUgbGVuZ3RoICovCiAKQEAgLTg3NCw3ICs4OTYsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqY29udHJvbF9zdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfZXhlY19iZWdpbl9jb250cm9sX29wIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX2V4ZWNfYmVnaW5fY29udHJvbF9vcCk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILCAiT3A9JXAgT3Bjb2RlPSUyLjJYIFN0YXRlPSVwXG4iLCBvcCwKIAkJCSAgb3AtPmNvbW1vbi5hbWxfb3Bjb2RlLCB3YWxrX3N0YXRlKSk7CkBAIC05NTIsNyArOTc0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKmNvbnRyb2xfc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX2V4ZWNfZW5kX2NvbnRyb2xfb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfZXhlY19lbmRfY29udHJvbF9vcCk7CiAKIAlzd2l0Y2ggKG9wLT5jb21tb24uYW1sX29wY29kZSkgewogCWNhc2UgQU1MX0lGX09QOgpAQCAtOTg0LDYgKzEwMDYsNyBAQAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILCAiW1dISUxFX09QXSBPcD0lcFxuIiwgb3ApKTsKIAogCQlpZiAod2Fsa19zdGF0ZS0+Y29udHJvbF9zdGF0ZS0+Y29tbW9uLnZhbHVlKSB7CisKIAkJCS8qIFByZWRpY2F0ZSB3YXMgdHJ1ZSwgZ28gYmFjayBhbmQgZXZhbHVhdGUgaXQgYWdhaW4hICovCiAKIAkJCXN0YXR1cyA9IEFFX0NUUkxfUEVORElORzsKQEAgLTEwMTQsNiArMTAzNyw3IEBACiAJCSAqIGhhcyBiZWVuIGJ1YmJsZWQgdXAgdGhlIHRyZWUKIAkJICovCiAJCWlmIChvcC0+Y29tbW9uLnZhbHVlLmFyZykgeworCiAJCQkvKiBTaW5jZSB3ZSBoYXZlIGEgcmVhbCBSZXR1cm4oKSwgZGVsZXRlIGFueSBpbXBsaWNpdCByZXR1cm4gKi8KIAogCQkJYWNwaV9kc19jbGVhcl9pbXBsaWNpdF9yZXR1cm4od2Fsa19zdGF0ZSk7CkBAIC0xMDQ3LDYgKzEwNzEsNyBAQAogCQkJd2Fsa19zdGF0ZS0+cmV0dXJuX2Rlc2MgPSB3YWxrX3N0YXRlLT5vcGVyYW5kc1swXTsKIAkJfSBlbHNlIGlmICgod2Fsa19zdGF0ZS0+cmVzdWx0cykgJiYKIAkJCSAgICh3YWxrX3N0YXRlLT5yZXN1bHRzLT5yZXN1bHRzLm51bV9yZXN1bHRzID4gMCkpIHsKKwogCQkJLyogU2luY2Ugd2UgaGF2ZSBhIHJlYWwgUmV0dXJuKCksIGRlbGV0ZSBhbnkgaW1wbGljaXQgcmV0dXJuICovCiAKIAkJCWFjcGlfZHNfY2xlYXJfaW1wbGljaXRfcmV0dXJuKHdhbGtfc3RhdGUpOwpAQCAtMTA5NSw3ICsxMTIwLDcgQEAKIAkJfQogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCi0JCQkJICAiQ29tcGxldGVkIFJFVFVSTl9PUCBTdGF0ZT0lcCwgcmV0X3ZhbD0lcFxuIiwKKwkJCQkgICJDb21wbGV0ZWQgUkVUVVJOX09QIFN0YXRlPSVwLCBSZXRWYWw9JXBcbiIsCiAJCQkJICB3YWxrX3N0YXRlLCB3YWxrX3N0YXRlLT5yZXR1cm5fZGVzYykpOwogCiAJCS8qIEVuZCB0aGUgY29udHJvbCBtZXRob2QgZXhlY3V0aW9uIHJpZ2h0IG5vdyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN1dGlscy5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN1dGlscy5jCmluZGV4IDUzMzU2YTUuLjA1MjMwYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3V0aWxzLmMKQEAgLTY4LDcgKzY4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGFjcGlfZHNfY2xlYXJfaW1wbGljaXRfcmV0dXJuKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19jbGVhcl9pbXBsaWNpdF9yZXR1cm4iKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfY2xlYXJfaW1wbGljaXRfcmV0dXJuKTsKIAogCS8qCiAJICogU2xhY2sgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIGZlYXR1cmUKQEAgLTExNSw3ICsxMTUsNyBAQAogYWNwaV9kc19kb19pbXBsaWNpdF9yZXR1cm4odW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2MsCiAJCQkgICBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlLCB1OCBhZGRfcmVmZXJlbmNlKQogewotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfZG9faW1wbGljaXRfcmV0dXJuIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX2RvX2ltcGxpY2l0X3JldHVybik7CiAKIAkvKgogCSAqIFNsYWNrIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyBmZWF0dXJlLCBhbmQgd2UgbXVzdApAQCAtMTcxLDcgKzE3MSw3IEBACiB7CiAJY29uc3Qgc3RydWN0IGFjcGlfb3Bjb2RlX2luZm8gKnBhcmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2lzX3Jlc3VsdF91c2VkIiwgb3ApOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2lzX3Jlc3VsdF91c2VkLCBvcCk7CiAKIAkvKiBNdXN0IGhhdmUgYm90aCBhbiBPcCBhbmQgYSBSZXN1bHQgT2JqZWN0ICovCiAKQEAgLTIwMiw2ICsyMDIsNyBAQAogCSAqLwogCWlmICgoIW9wLT5jb21tb24ucGFyZW50KSB8fAogCSAgICAob3AtPmNvbW1vbi5wYXJlbnQtPmNvbW1vbi5hbWxfb3Bjb2RlID09IEFNTF9TQ09QRV9PUCkpIHsKKwogCQkvKiBObyBwYXJlbnQsIHRoZSByZXR1cm4gdmFsdWUgY2Fubm90IHBvc3NpYmx5IGJlIHVzZWQgKi8KIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILApAQCAtMzQwLDcgKzM0MSw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2RlbGV0ZV9yZXN1bHRfaWZfbm90X3VzZWQiLCByZXN1bHRfb2JqKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19kZWxldGVfcmVzdWx0X2lmX25vdF91c2VkLCByZXN1bHRfb2JqKTsKIAogCWlmICghb3ApIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk51bGwgT3AiKSk7CkBAIC0zNTIsNiArMzUzLDcgQEAKIAl9CiAKIAlpZiAoIWFjcGlfZHNfaXNfcmVzdWx0X3VzZWQob3AsIHdhbGtfc3RhdGUpKSB7CisKIAkJLyogTXVzdCBwb3AgdGhlIHJlc3VsdCBzdGFjayAob2JqX2Rlc2Mgc2hvdWxkIGJlIGVxdWFsIHRvIHJlc3VsdF9vYmopICovCiAKIAkJc3RhdHVzID0gYWNwaV9kc19yZXN1bHRfcG9wKCZvYmpfZGVzYywgd2Fsa19zdGF0ZSk7CkBAIC0zODIsNyArMzg0LDcgQEAKIAl1MzIgaTsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19yZXNvbHZlX29wZXJhbmRzIiwgd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfcmVzb2x2ZV9vcGVyYW5kcywgd2Fsa19zdGF0ZSk7CiAKIAkvKgogCSAqIEF0dGVtcHQgdG8gcmVzb2x2ZSBlYWNoIG9mIHRoZSB2YWxpZCBvcGVyYW5kcwpAQCAtNDE3LDcgKzQxOSw3IEBACiB7CiAJdTMyIGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfY2xlYXJfb3BlcmFuZHMiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19jbGVhcl9vcGVyYW5kcywgd2Fsa19zdGF0ZSk7CiAKIAkvKiBSZW1vdmUgYSByZWZlcmVuY2Ugb24gZWFjaCBvcGVyYW5kIG9uIHRoZSBzdGFjayAqLwogCkBAIC00NjUsNyArNDY3LDcgQEAKIAlhY3BpX2ludGVycHJldGVyX21vZGUgaW50ZXJwcmV0ZXJfbW9kZTsKIAljb25zdCBzdHJ1Y3QgYWNwaV9vcGNvZGVfaW5mbyAqb3BfaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19jcmVhdGVfb3BlcmFuZCIsIGFyZyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfY3JlYXRlX29wZXJhbmQsIGFyZyk7CiAKIAkvKiBBIHZhbGlkIG5hbWUgbXVzdCBiZSBsb29rZWQgdXAgaW4gdGhlIG5hbWVzcGFjZSAqLwogCkBAIC00OTgsNyArNTAwLDkgQEAKIAkJICovCiAJCWlmICgod2Fsa19zdGF0ZS0+ZGVmZXJyZWRfbm9kZSkgJiYKIAkJICAgICh3YWxrX3N0YXRlLT5kZWZlcnJlZF9ub2RlLT50eXBlID09IEFDUElfVFlQRV9CVUZGRVJfRklFTEQpCi0JCSAgICAmJiAoYXJnX2luZGV4ICE9IDApKSB7CisJCSAgICAmJiAoYXJnX2luZGV4ID09CisJCQkodTMyKSAoKHdhbGtfc3RhdGUtPm9wY29kZSA9PQorCQkJCUFNTF9DUkVBVEVfRklFTERfT1ApID8gMyA6IDIpKSkgewogCQkJb2JqX2Rlc2MgPQogCQkJICAgIEFDUElfQ0FTVF9QVFIodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCwKIAkJCQkJICB3YWxrX3N0YXRlLT5kZWZlcnJlZF9ub2RlKTsKQEAgLTUyMSw2ICs1MjUsNyBAQAogCQkJICAgICYmIChwYXJlbnRfb3AtPmNvbW1vbi5hbWxfb3Bjb2RlICE9IEFNTF9SRUdJT05fT1ApCiAJCQkgICAgJiYgKHBhcmVudF9vcC0+Y29tbW9uLmFtbF9vcGNvZGUgIT0KIAkJCQlBTUxfSU5UX05BTUVQQVRIX09QKSkgeworCiAJCQkJLyogRW50ZXIgbmFtZSBpbnRvIG5hbWVzcGFjZSBpZiBub3QgZm91bmQgKi8KIAogCQkJCWludGVycHJldGVyX21vZGUgPSBBQ1BJX0lNT0RFX0xPQURfUEFTUzI7CkBAIC01NzIsNyArNTc3LDcgQEAKIAogCQkvKiBGcmVlIHRoZSBuYW1lc3RyaW5nIGNyZWF0ZWQgYWJvdmUgKi8KIAotCQlBQ1BJX01FTV9GUkVFKG5hbWVfc3RyaW5nKTsKKwkJQUNQSV9GUkVFKG5hbWVfc3RyaW5nKTsKIAogCQkvKiBDaGVjayBzdGF0dXMgZnJvbSB0aGUgbG9va3VwICovCiAKQEAgLTY5Niw3ICs3MDEsNyBAQAogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICphcmc7CiAJdTMyIGFyZ19jb3VudCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfY3JlYXRlX29wZXJhbmRzIiwgZmlyc3RfYXJnKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19jcmVhdGVfb3BlcmFuZHMsIGZpcnN0X2FyZyk7CiAKIAkvKiBGb3IgYWxsIGFyZ3VtZW50cyBpbiB0aGUgbGlzdC4uLiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dleGVjLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dleGVjLmMKaW5kZXggZjFhZjY1NS4uM2FjYmQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3ZXhlYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd2V4ZWMuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGFjcGkvYWNpbnRlcnAuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CiAjaW5jbHVkZSA8YWNwaS9hY2RlYnVnLmg+Ci0jaW5jbHVkZSA8YWNwaS9hY2Rpc2FzbS5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9ESVNQQVRDSEVSCiBBQ1BJX01PRFVMRV9OQU1FKCJkc3dleGVjIikKQEAgLTkzLDcgKzkyLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpsb2NhbF9vYmpfZGVzYyA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZ2V0X3ByZWRpY2F0ZV92YWx1ZSIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2dldF9wcmVkaWNhdGVfdmFsdWUsIHdhbGtfc3RhdGUpOwogCiAJd2Fsa19zdGF0ZS0+Y29udHJvbF9zdGF0ZS0+Y29tbW9uLnN0YXRlID0gMDsKIApAQCAtMTIzLDcgKzEyMiw3IEBACiAKIAlpZiAoIW9ial9kZXNjKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIk5vIHByZWRpY2F0ZSBvYmpfZGVzYz0lcCBTdGF0ZT0lcCIsCisJCQkgICAgIk5vIHByZWRpY2F0ZSBPYmpEZXNjPSVwIFN0YXRlPSVwIiwKIAkJCSAgICBvYmpfZGVzYywgd2Fsa19zdGF0ZSkpOwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTk9fT1BFUkFORCk7CkBAIC0xNDAsNyArMTM5LDcgQEAKIAogCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShsb2NhbF9vYmpfZGVzYykgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiQmFkIHByZWRpY2F0ZSAobm90IGFuIGludGVnZXIpIG9ial9kZXNjPSVwIFN0YXRlPSVwIFR5cGU9JVgiLAorCQkJICAgICJCYWQgcHJlZGljYXRlIChub3QgYW4gaW50ZWdlcikgT2JqRGVzYz0lcCBTdGF0ZT0lcCBUeXBlPSVYIiwKIAkJCSAgICBvYmpfZGVzYywgd2Fsa19zdGF0ZSwKIAkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpKTsKIApAQCAtMjE0LDcgKzIxMyw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdTMyIG9wY29kZV9jbGFzczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19leGVjX2JlZ2luX29wIiwgd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZXhlY19iZWdpbl9vcCwgd2Fsa19zdGF0ZSk7CiAKIAlvcCA9IHdhbGtfc3RhdGUtPm9wOwogCWlmICghb3ApIHsKQEAgLTI5Niw3ICsyOTUsNyBAQAogCiAJY2FzZSBBTUxfQ0xBU1NfTkFNRURfT0JKRUNUOgogCi0JCWlmICh3YWxrX3N0YXRlLT53YWxrX3R5cGUgPT0gQUNQSV9XQUxLX01FVEhPRCkgeworCQlpZiAod2Fsa19zdGF0ZS0+d2Fsa190eXBlICYgQUNQSV9XQUxLX01FVEhPRCkgewogCQkJLyoKIAkJCSAqIEZvdW5kIGEgbmFtZWQgb2JqZWN0IGRlY2xhcmF0aW9uIGR1cmluZyBtZXRob2QgZXhlY3V0aW9uOwogCQkJICogd2UgbXVzdCBlbnRlciB0aGlzIG9iamVjdCBpbnRvIHRoZSBuYW1lc3BhY2UuICBUaGUgY3JlYXRlZApAQCAtMzU0LDcgKzM1Myw3IEBACiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm5leHRfb3A7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKmZpcnN0X2FyZzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19leGVjX2VuZF9vcCIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2V4ZWNfZW5kX29wLCB3YWxrX3N0YXRlKTsKIAogCW9wID0gd2Fsa19zdGF0ZS0+b3A7CiAJb3BfdHlwZSA9IHdhbGtfc3RhdGUtPm9wX2luZm8tPnR5cGU7CkBAIC00MDksNiArNDA4LDcgQEAKIAkJICogYmVpbmcgdGhlIG9iamVjdF90eXBlIGFuZCBzaXplX29mIG9wZXJhdG9ycy4KIAkJICovCiAJCWlmICghKHdhbGtfc3RhdGUtPm9wX2luZm8tPmZsYWdzICYgQU1MX05PX09QRVJBTkRfUkVTT0xWRSkpIHsKKwogCQkJLyogUmVzb2x2ZSBhbGwgb3BlcmFuZHMgKi8KIAogCQkJc3RhdHVzID0gYWNwaV9leF9yZXNvbHZlX29wZXJhbmRzKHdhbGtfc3RhdGUtPm9wY29kZSwKQEAgLTQyMyw3ICs0MjMsNyBAQAogCQkJCQkJICAgYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUKIAkJCQkJCSAgICh3YWxrX3N0YXRlLT5vcGNvZGUpLAogCQkJCQkJICAgd2Fsa19zdGF0ZS0+bnVtX29wZXJhbmRzLAotCQkJCQkJICAgImFmdGVyIGV4X3Jlc29sdmVfb3BlcmFuZHMiKTsKKwkJCQkJCSAgICJhZnRlciBFeFJlc29sdmVPcGVyYW5kcyIpOwogCQkJfQogCQl9CiAKQEAgLTQzNyw3ICs0MzcsNyBAQAogCQkJICAgIGFjcGlfZ2JsX29wX3R5cGVfZGlzcGF0Y2hbb3BfdHlwZV0gKHdhbGtfc3RhdGUpOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIFRyZWF0IGNvbnN0cnVjdHMgb2YgdGhlIGZvcm0gIlN0b3JlKGxvY2FsX3gsbG9jYWxfeCkiIGFzIG5vb3BzIHdoZW4gdGhlCisJCQkgKiBUcmVhdCBjb25zdHJ1Y3RzIG9mIHRoZSBmb3JtICJTdG9yZShMb2NhbFgsTG9jYWxYKSIgYXMgbm9vcHMgd2hlbiB0aGUKIAkJCSAqIExvY2FsIGlzIHVuaW5pdGlhbGl6ZWQuCiAJCQkgKi8KIAkJCWlmICgoc3RhdHVzID09IEFFX0FNTF9VTklOSVRJQUxJWkVEX0xPQ0FMKSAmJgpAQCAtNTQ4LDYgKzU0OCw3IEBACiAJCQkgKi8KIAkJCXN0YXR1cyA9IGFjcGlfZHNfcmVzb2x2ZV9vcGVyYW5kcyh3YWxrX3N0YXRlKTsKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCQkJLyogT24gZXJyb3IsIGNsZWFyIGFsbCByZXNvbHZlZCBvcGVyYW5kcyAqLwogCiAJCQkJYWNwaV9kc19jbGVhcl9vcGVyYW5kcyh3YWxrX3N0YXRlKTsKQEAgLTU2OSw3ICs1NzAsNyBAQAogCQljYXNlIEFNTF9UWVBFX0NSRUFURV9GSUVMRDoKIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCQkgICJFeGVjdXRpbmcgY3JlYXRlX2ZpZWxkIEJ1ZmZlci9JbmRleCBPcD0lcFxuIiwKKwkJCQkJICAiRXhlY3V0aW5nIENyZWF0ZUZpZWxkIEJ1ZmZlci9JbmRleCBPcD0lcFxuIiwKIAkJCQkJICBvcCkpOwogCiAJCQlzdGF0dXMgPSBhY3BpX2RzX2xvYWQyX2VuZF9vcCh3YWxrX3N0YXRlKTsKQEAgLTU4NCw3ICs1ODUsNyBAQAogCQljYXNlIEFNTF9UWVBFX0NSRUFURV9PQkpFQ1Q6CiAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCQkJICAiRXhlY3V0aW5nIGNyZWF0ZV9vYmplY3QgKEJ1ZmZlci9QYWNrYWdlKSBPcD0lcFxuIiwKKwkJCQkJICAiRXhlY3V0aW5nIENyZWF0ZU9iamVjdCAoQnVmZmVyL1BhY2thZ2UpIE9wPSVwXG4iLAogCQkJCQkgIG9wKSk7CiAKIAkJCXN3aXRjaCAob3AtPmNvbW1vbi5wYXJlbnQtPmNvbW1vbi5hbWxfb3Bjb2RlKSB7CkBAIC02NTcsNyArNjU4LDcgQEAKIAogCQkJaWYgKG9wLT5jb21tb24uYW1sX29wY29kZSA9PSBBTUxfUkVHSU9OX09QKSB7CiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCQkJICAiRXhlY3V0aW5nIG9wX3JlZ2lvbiBBZGRyZXNzL0xlbmd0aCBPcD0lcFxuIiwKKwkJCQkJCSAgIkV4ZWN1dGluZyBPcFJlZ2lvbiBBZGRyZXNzL0xlbmd0aCBPcD0lcFxuIiwKIAkJCQkJCSAgb3ApKTsKIAogCQkJCXN0YXR1cyA9CkBAIC03MjIsNiArNzIzLDcgQEAKICAgICAgIGNsZWFudXA6CiAKIAlpZiAod2Fsa19zdGF0ZS0+cmVzdWx0X29iaikgeworCiAJCS8qIEJyZWFrIHRvIGRlYnVnZ2VyIHRvIGRpc3BsYXkgcmVzdWx0ICovCiAKIAkJQUNQSV9ERUJVR0dFUl9FWEVDKGFjcGlfZGJfZGlzcGxheV9yZXN1bHRfb2JqZWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dsb2FkLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dsb2FkLmMKaW5kZXggZDNkMjRkYS4uMzUwNzQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3bG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd2xvYWQuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJY2hhciAqcGF0aDsKIAl1MzIgZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19sb2FkMV9iZWdpbl9vcCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfbG9hZDFfYmVnaW5fb3ApOwogCiAJb3AgPSB3YWxrX3N0YXRlLT5vcDsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILCAiT3A9JXAgU3RhdGU9JXBcbiIsIG9wLApAQCAtMTc4LDEyICsxNzgsMTIgQEAKIAkJCSAqIFRhcmdldCBvZiBTY29wZSgpIG5vdCBmb3VuZC4gIEdlbmVyYXRlIGFuIEV4dGVybmFsIGZvciBpdCwgYW5kCiAJCQkgKiBpbnNlcnQgdGhlIG5hbWUgaW50byB0aGUgbmFtZXNwYWNlLgogCQkJICovCi0JCQlhY3BpX2RtX2FkZF90b19leHRlcm5hbF9saXN0KHBhdGgpOworCQkJYWNwaV9kbV9hZGRfdG9fZXh0ZXJuYWxfbGlzdChwYXRoLCBBQ1BJX1RZUEVfREVWSUNFLCAwKTsKIAkJCXN0YXR1cyA9CiAJCQkgICAgYWNwaV9uc19sb29rdXAod2Fsa19zdGF0ZS0+c2NvcGVfaW5mbywgcGF0aCwKIAkJCQkJICAgb2JqZWN0X3R5cGUsIEFDUElfSU1PREVfTE9BRF9QQVNTMSwKIAkJCQkJICAgQUNQSV9OU19TRUFSQ0hfUEFSRU5ULCB3YWxrX3N0YXRlLAotCQkJCQkgICAmKG5vZGUpKTsKKwkJCQkJICAgJm5vZGUpOwogCQl9CiAjZW5kaWYKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC0yNjEsNiArMjYxLDcgQEAKIAkJICovCiAKIAkJaWYgKHdhbGtfc3RhdGUtPmRlZmVycmVkX25vZGUpIHsKKwogCQkJLyogVGhpcyBuYW1lIGlzIGFscmVhZHkgaW4gdGhlIG5hbWVzcGFjZSwgZ2V0IHRoZSBub2RlICovCiAKIAkJCW5vZGUgPSB3YWxrX3N0YXRlLT5kZWZlcnJlZF9ub2RlOwpAQCAtMzAwLDEwICszMDEsNDEgQEAKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfbnNfbG9va3VwKHdhbGtfc3RhdGUtPnNjb3BlX2luZm8sIHBhdGgsIG9iamVjdF90eXBlLAogCQkJCSAgIEFDUElfSU1PREVfTE9BRF9QQVNTMSwgZmxhZ3MsIHdhbGtfc3RhdGUsCi0JCQkJICAgJihub2RlKSk7CisJCQkJICAgJm5vZGUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCUFDUElfRVJST1JfTkFNRVNQQUNFKHBhdGgsIHN0YXR1cyk7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkJCWlmIChzdGF0dXMgPT0gQUVfQUxSRUFEWV9FWElTVFMpIHsKKworCQkJCS8qIFRoZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgc2NvcGUgKi8KKworCQkJCWlmIChub2RlLT5mbGFncyAmIEFOT0JKX0lTX0VYVEVSTkFMKSB7CisJCQkJCS8qCisJCQkJCSAqIEFsbG93IG9uZSBjcmVhdGUgb24gYW4gb2JqZWN0IG9yIHNlZ21lbnQgdGhhdCB3YXMKKwkJCQkJICogcHJldmlvdXNseSBkZWNsYXJlZCBFeHRlcm5hbAorCQkJCQkgKi8KKwkJCQkJbm9kZS0+ZmxhZ3MgJj0gfkFOT0JKX0lTX0VYVEVSTkFMOworCQkJCQlub2RlLT50eXBlID0gKHU4KSBvYmplY3RfdHlwZTsKKworCQkJCQkvKiBKdXN0IHJldHlwZWQgYSBub2RlLCBwcm9iYWJseSB3aWxsIG5lZWQgdG8gb3BlbiBhIHNjb3BlICovCisKKwkJCQkJaWYgKGFjcGlfbnNfb3BlbnNfc2NvcGUob2JqZWN0X3R5cGUpKSB7CisJCQkJCQlzdGF0dXMgPQorCQkJCQkJICAgIGFjcGlfZHNfc2NvcGVfc3RhY2tfcHVzaAorCQkJCQkJICAgIChub2RlLCBvYmplY3RfdHlwZSwKKwkJCQkJCSAgICAgd2Fsa19zdGF0ZSk7CisJCQkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMKKwkJCQkJCQkgICAgKHN0YXR1cyk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJc3RhdHVzID0gQUVfT0s7CisJCQkJfQorCQkJfQorCisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKworCQkJCUFDUElfRVJST1JfTkFNRVNQQUNFKHBhdGgsIHN0YXR1cyk7CisJCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCQl9CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMzExLDYgKzM0Myw3IEBACiAJLyogQ29tbW9uIGV4aXQgKi8KIAogCWlmICghb3ApIHsKKwogCQkvKiBDcmVhdGUgYSBuZXcgb3AgKi8KIAogCQlvcCA9IGFjcGlfcHNfYWxsb2Nfb3Aod2Fsa19zdGF0ZS0+b3Bjb2RlKTsKQEAgLTM1OSw3ICszOTIsNyBAQAogCWFjcGlfb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19sb2FkMV9lbmRfb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX2xvYWQxX2VuZF9vcCk7CiAKIAlvcCA9IHdhbGtfc3RhdGUtPm9wOwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsICJPcD0lcCBTdGF0ZT0lcFxuIiwgb3AsCkBAIC00MTMsNiArNDQ2LDcgQEAKICNlbmRpZgogCiAJaWYgKG9wLT5jb21tb24uYW1sX29wY29kZSA9PSBBTUxfTkFNRV9PUCkgeworCiAJCS8qIEZvciBOYW1lIG9wY29kZSwgZ2V0IHRoZSBvYmplY3QgdHlwZSBmcm9tIHRoZSBhcmd1bWVudCAqLwogCiAJCWlmIChvcC0+Y29tbW9uLnZhbHVlLmFyZykgewpAQCAtNDQ1LDcgKzQ3OSw3IEBACiAJCQkgKiBhcmd1bWVudHMuKQogCQkJICovCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJCQkgICJMT0FESU5HLU1ldGhvZDogU3RhdGU9JXAgT3A9JXAgbmFtZWRfb2JqPSVwXG4iLAorCQkJCQkgICJMT0FESU5HLU1ldGhvZDogU3RhdGU9JXAgT3A9JXAgTmFtZWRPYmo9JXBcbiIsCiAJCQkJCSAgd2Fsa19zdGF0ZSwgb3AsIG9wLT5uYW1lZC5ub2RlKSk7CiAKIAkJCWlmICghYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG9wLT5uYW1lZC5ub2RlKSkgewpAQCAtNTExLDcgKzU0NSw3IEBACiAJYWNwaV9vYmplY3RfdHlwZSBvYmplY3RfdHlwZTsKIAljaGFyICpidWZmZXJfcHRyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfbG9hZDJfYmVnaW5fb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX2xvYWQyX2JlZ2luX29wKTsKIAogCW9wID0gd2Fsa19zdGF0ZS0+b3A7CiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwgIk9wPSVwIFN0YXRlPSVwXG4iLCBvcCwKQEAgLTUyMSw2ICs1NTUsNyBAQAogCQlpZiAoKHdhbGtfc3RhdGUtPmNvbnRyb2xfc3RhdGUpICYmCiAJCSAgICAod2Fsa19zdGF0ZS0+Y29udHJvbF9zdGF0ZS0+Y29tbW9uLnN0YXRlID09CiAJCSAgICAgQUNQSV9DT05UUk9MX0NPTkRJVElPTkFMX0VYRUNVVElORykpIHsKKwogCQkJLyogV2UgYXJlIGV4ZWN1dGluZyBhIHdoaWxlIGxvb3Agb3V0c2lkZSBvZiBhIG1ldGhvZCAqLwogCiAJCQlzdGF0dXMgPSBhY3BpX2RzX2V4ZWNfYmVnaW5fb3Aod2Fsa19zdGF0ZSwgb3V0X29wKTsKQEAgLTU1NCwxMCArNTg5LDEyIEBACiAJCS8qIEdldCB0aGUgbmFtZSB3ZSBhcmUgZ29pbmcgdG8gZW50ZXIgb3IgbG9va3VwIGluIHRoZSBuYW1lc3BhY2UgKi8KIAogCQlpZiAod2Fsa19zdGF0ZS0+b3Bjb2RlID09IEFNTF9JTlRfTkFNRVBBVEhfT1ApIHsKKwogCQkJLyogRm9yIE5hbWVwYXRoIG9wLCBnZXQgdGhlIHBhdGggc3RyaW5nICovCiAKIAkJCWJ1ZmZlcl9wdHIgPSBvcC0+Y29tbW9uLnZhbHVlLnN0cmluZzsKIAkJCWlmICghYnVmZmVyX3B0cikgeworCiAJCQkJLyogTm8gbmFtZSwganVzdCBleGl0ICovCiAKIAkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtNjgwLDYgKzcxNyw3IEBACiAJCS8qIEFsbCBvdGhlciBvcGNvZGVzICovCiAKIAkJaWYgKG9wICYmIG9wLT5jb21tb24ubm9kZSkgeworCiAJCQkvKiBUaGlzIG9wL25vZGUgd2FzIHByZXZpb3VzbHkgZW50ZXJlZCBpbnRvIHRoZSBuYW1lc3BhY2UgKi8KIAogCQkJbm9kZSA9IG9wLT5jb21tb24ubm9kZTsKQEAgLTcwNSw2ICs3NDMsNyBAQAogCQkgKiBOb3RlOiBOYW1lIG1heSBhbHJlYWR5IGV4aXN0IGlmIHdlIGFyZSBleGVjdXRpbmcgYSBkZWZlcnJlZCBvcGNvZGUuCiAJCSAqLwogCQlpZiAod2Fsa19zdGF0ZS0+ZGVmZXJyZWRfbm9kZSkgeworCiAJCQkvKiBUaGlzIG5hbWUgaXMgYWxyZWFkeSBpbiB0aGUgbmFtZXNwYWNlLCBnZXQgdGhlIG5vZGUgKi8KIAogCQkJbm9kZSA9IHdhbGtfc3RhdGUtPmRlZmVycmVkX25vZGU7CkBAIC03MjcsNiArNzY2LDcgQEAKIAl9CiAKIAlpZiAoIW9wKSB7CisKIAkJLyogQ3JlYXRlIGEgbmV3IG9wICovCiAKIAkJb3AgPSBhY3BpX3BzX2FsbG9jX29wKHdhbGtfc3RhdGUtPm9wY29kZSk7CkBAIC03NzYsNyArODE2LDcgQEAKIAl1MzIgaTsKICNlbmRpZgogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfbG9hZDJfZW5kX29wIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19sb2FkMl9lbmRfb3ApOwogCiAJb3AgPSB3YWxrX3N0YXRlLT5vcDsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILCAiT3Bjb2RlIFslc10gT3AgJXAgU3RhdGUgJXBcbiIsCkBAIC04NzAsNyArOTEwLDcgQEAKIAkgKi8KIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCi0JCQkgICJDcmVhdGUtTG9hZCBbJXNdIFN0YXRlPSVwIE9wPSVwIG5hbWVkX29iaj0lcFxuIiwKKwkJCSAgIkNyZWF0ZS1Mb2FkIFslc10gU3RhdGU9JXAgT3A9JXAgTmFtZWRPYmo9JXBcbiIsCiAJCQkgIGFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKG9wLT5jb21tb24uYW1sX29wY29kZSksCiAJCQkgIHdhbGtfc3RhdGUsIG9wLCBub2RlKSk7CiAKQEAgLTEwNDUsNyArMTA4NSw3IEBACiAJCQkgKiBhcmd1bWVudHMuKQogCQkJICovCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJCQkgICJMT0FESU5HLU1ldGhvZDogU3RhdGU9JXAgT3A9JXAgbmFtZWRfb2JqPSVwXG4iLAorCQkJCQkgICJMT0FESU5HLU1ldGhvZDogU3RhdGU9JXAgT3A9JXAgTmFtZWRPYmo9JXBcbiIsCiAJCQkJCSAgd2Fsa19zdGF0ZSwgb3AsIG9wLT5uYW1lZC5ub2RlKSk7CiAKIAkJCWlmICghYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG9wLT5uYW1lZC5ub2RlKSkgewpAQCAtMTA5MCw3ICsxMTMwLDcgQEAKIAljYXNlIEFNTF9DTEFTU19NRVRIT0RfQ0FMTDoKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJCSAgIlJFU09MVklORy1tZXRob2RfY2FsbDogU3RhdGU9JXAgT3A9JXAgbmFtZWRfb2JqPSVwXG4iLAorCQkJCSAgIlJFU09MVklORy1NZXRob2RDYWxsOiBTdGF0ZT0lcCBPcD0lcCBOYW1lZE9iaj0lcFxuIiwKIAkJCQkgIHdhbGtfc3RhdGUsIG9wLCBub2RlKSk7CiAKIAkJLyoKQEAgLTExMDQsNyArMTE0NCw2IEBACiAJCQkJICAgQUNQSV9OU19ET05UX09QRU5fU0NPUEUsIHdhbGtfc3RhdGUsCiAJCQkJICAgJihuZXdfbm9kZSkpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQogCQkJLyoKIAkJCSAqIE1ha2Ugc3VyZSB0aGF0IHdoYXQgd2UgZm91bmQgaXMgaW5kZWVkIGEgbWV0aG9kCiAJCQkgKiBXZSBkaWRuJ3Qgc2VhcmNoIGZvciBhIG1ldGhvZCBvbiBwdXJwb3NlLCB0byBzZWUgaWYgdGhlIG5hbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd3Njb3BlLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dzY29wZS5jCmluZGV4IGFkYTIxZWYuLmM5MjI4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd3Njb3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3c2NvcGUuYwpAQCAtNjMsOSArNjMsMTAgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnNjb3BlX2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX3Njb3BlX3N0YWNrX2NsZWFyIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX3Njb3BlX3N0YWNrX2NsZWFyKTsKIAogCXdoaWxlICh3YWxrX3N0YXRlLT5zY29wZV9pbmZvKSB7CisKIAkJLyogUG9wIGEgc2NvcGUgb2ZmIHRoZSBzdGFjayAqLwogCiAJCXNjb3BlX2luZm8gPSB3YWxrX3N0YXRlLT5zY29wZV9pbmZvOwpAQCAtMTAyLDkgKzEwMywxMCBAQAogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGVfaW5mbzsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKm9sZF9zY29wZV9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfc2NvcGVfc3RhY2tfcHVzaCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfc2NvcGVfc3RhY2tfcHVzaCk7CiAKIAlpZiAoIW5vZGUpIHsKKwogCQkvKiBJbnZhbGlkIHNjb3BlICAgKi8KIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiTnVsbCBzY29wZSBwYXJhbWV0ZXIiKSk7CkBAIC0xMjYsNyArMTI4LDcgQEAKIAogCS8qIEluaXQgbmV3IHNjb3BlIG9iamVjdCAqLwogCi0Jc2NvcGVfaW5mby0+Y29tbW9uLmRhdGFfdHlwZSA9IEFDUElfREVTQ19UWVBFX1NUQVRFX1dTQ09QRTsKKwlzY29wZV9pbmZvLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfV1NDT1BFOwogCXNjb3BlX2luZm8tPnNjb3BlLm5vZGUgPSBub2RlOwogCXNjb3BlX2luZm8tPmNvbW1vbi52YWx1ZSA9ICh1MTYpIHR5cGU7CiAKQEAgLTE3Niw3ICsxNzgsNyBAQAogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGVfaW5mbzsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKm5ld19zY29wZV9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfc2NvcGVfc3RhY2tfcG9wIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19zY29wZV9zdGFja19wb3ApOwogCiAJLyoKIAkgKiBQb3Agc2NvcGUgaW5mbyBvYmplY3Qgb2ZmIHRoZSBzdGFjay4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd3N0YXRlLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dzdGF0ZS5jCmluZGV4IGZhNzhjYjcuLjc4MTdlNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd3N0YXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3c3RhdGUuYwpAQCAtNjYsNyArNjYsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2RzX3Jlc3VsdF9yZW1vdmUKQEAgLTg4LDcgKzg3LDcgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19yZXN1bHRfcmVtb3ZlIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX3Jlc3VsdF9yZW1vdmUpOwogCiAJc3RhdGUgPSB3YWxrX3N0YXRlLT5yZXN1bHRzOwogCWlmICghc3RhdGUpIHsKQEAgLTEyOCw3ICsxMjcsNiBAQAogCiAJcmV0dXJuIChBRV9PSyk7CiB9Ci0KICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNTIsNyArMTUwLDcgQEAKIAlhY3BpX25hdGl2ZV91aW50IGluZGV4OwogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX3Jlc3VsdF9wb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfcmVzdWx0X3BvcCk7CiAKIAlzdGF0ZSA9IHdhbGtfc3RhdGUtPnJlc3VsdHM7CiAJaWYgKCFzdGF0ZSkgewpAQCAtMTcwLDYgKzE2OCw3IEBACiAJc3RhdGUtPnJlc3VsdHMubnVtX3Jlc3VsdHMtLTsKIAogCWZvciAoaW5kZXggPSBBQ1BJX09CSl9OVU1fT1BFUkFORFM7IGluZGV4OyBpbmRleC0tKSB7CisKIAkJLyogQ2hlY2sgZm9yIGEgdmFsaWQgcmVzdWx0IG9iamVjdCAqLwogCiAJCWlmIChzdGF0ZS0+cmVzdWx0cy5vYmpfZGVzY1tpbmRleCAtIDFdKSB7CkBAIC0yMTMsNyArMjEyLDcgQEAKIAlhY3BpX25hdGl2ZV91aW50IGluZGV4OwogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX3Jlc3VsdF9wb3BfZnJvbV9ib3R0b20iKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfcmVzdWx0X3BvcF9mcm9tX2JvdHRvbSk7CiAKIAlzdGF0ZSA9IHdhbGtfc3RhdGUtPnJlc3VsdHM7CiAJaWYgKCFzdGF0ZSkgewpAQCAtMjc4LDcgKzI3Nyw3IEBACiB7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpzdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfcmVzdWx0X3B1c2giKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfcmVzdWx0X3B1c2gpOwogCiAJc3RhdGUgPSB3YWxrX3N0YXRlLT5yZXN1bHRzOwogCWlmICghc3RhdGUpIHsKQEAgLTMzMSwxNCArMzMwLDE0IEBACiB7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpzdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfcmVzdWx0X3N0YWNrX3B1c2giKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfcmVzdWx0X3N0YWNrX3B1c2gpOwogCiAJc3RhdGUgPSBhY3BpX3V0X2NyZWF0ZV9nZW5lcmljX3N0YXRlKCk7CiAJaWYgKCFzdGF0ZSkgewogCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJfQogCi0Jc3RhdGUtPmNvbW1vbi5kYXRhX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9SRVNVTFQ7CisJc3RhdGUtPmNvbW1vbi5kZXNjcmlwdG9yX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9SRVNVTFQ7CiAJYWNwaV91dF9wdXNoX2dlbmVyaWNfc3RhdGUoJndhbGtfc3RhdGUtPnJlc3VsdHMsIHN0YXRlKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIlJlc3VsdHM9JXAgU3RhdGU9JXBcbiIsCkBAIC0zNjMsNyArMzYyLDcgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19yZXN1bHRfc3RhY2tfcG9wIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX3Jlc3VsdF9zdGFja19wb3ApOwogCiAJLyogQ2hlY2sgZm9yIHN0YWNrIHVuZGVyZmxvdyAqLwogCkBAIC0zNzYsNyArMzc1LDcgQEAKIAlzdGF0ZSA9IGFjcGlfdXRfcG9wX2dlbmVyaWNfc3RhdGUoJndhbGtfc3RhdGUtPnJlc3VsdHMpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJICAiUmVzdWx0PSVwIHJlbWFpbmluZ19yZXN1bHRzPSVYIFN0YXRlPSVwXG4iLAorCQkJICAiUmVzdWx0PSVwIFJlbWFpbmluZ1Jlc3VsdHM9JVggU3RhdGU9JXBcbiIsCiAJCQkgIHN0YXRlLCBzdGF0ZS0+cmVzdWx0cy5udW1fcmVzdWx0cywgd2Fsa19zdGF0ZSkpOwogCiAJYWNwaV91dF9kZWxldGVfZ2VuZXJpY19zdGF0ZShzdGF0ZSk7CkBAIC00MDAsNyArMzk5LDcgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX2RzX29ial9zdGFja19wdXNoKHZvaWQgKm9iamVjdCwgc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqIHdhbGtfc3RhdGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19vYmpfc3RhY2tfcHVzaCIpOworCUFDUElfRlVOQ1RJT05fTkFNRShkc19vYmpfc3RhY2tfcHVzaCk7CiAKIAkvKiBDaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3cgKi8KIApAQCAtNDQ1LDkgKzQ0NCwxMCBAQAogewogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19vYmpfc3RhY2tfcG9wIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX29ial9zdGFja19wb3ApOwogCiAJZm9yIChpID0gMDsgaSA8IHBvcF9jb3VudDsgaSsrKSB7CisKIAkJLyogQ2hlY2sgZm9yIHN0YWNrIHVuZGVyZmxvdyAqLwogCiAJCWlmICh3YWxrX3N0YXRlLT5udW1fb3BlcmFuZHMgPT0gMCkgewpAQCAtNDkxLDkgKzQ5MSwxMCBAQAogCXUzMiBpOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19vYmpfc3RhY2tfcG9wX2FuZF9kZWxldGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfb2JqX3N0YWNrX3BvcF9hbmRfZGVsZXRlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwb3BfY291bnQ7IGkrKykgeworCiAJCS8qIENoZWNrIGZvciBzdGFjayB1bmRlcmZsb3cgKi8KIAogCQlpZiAod2Fsa19zdGF0ZS0+bnVtX29wZXJhbmRzID09IDApIHsKQEAgLTUzOCwxMyArNTM5LDEzIEBACiBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICphY3BpX2RzX2dldF9jdXJyZW50X3dhbGtfc3RhdGUoc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlCiAJCQkJCQkgICAgICAgKnRocmVhZCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX2dldF9jdXJyZW50X3dhbGtfc3RhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfZ2V0X2N1cnJlbnRfd2Fsa19zdGF0ZSk7CiAKIAlpZiAoIXRocmVhZCkgewogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsICJDdXJyZW50IHdhbGtfc3RhdGUgJXBcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwgIkN1cnJlbnQgV2Fsa1N0YXRlICVwXG4iLAogCQkJICB0aHJlYWQtPndhbGtfc3RhdGVfbGlzdCkpOwogCiAJcmV0dXJuICh0aHJlYWQtPndhbGtfc3RhdGVfbGlzdCk7CkBAIC01NjcsNyArNTY4LDcgQEAKIGFjcGlfZHNfcHVzaF93YWxrX3N0YXRlKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUsCiAJCQlzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKnRocmVhZCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19wdXNoX3dhbGtfc3RhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX3B1c2hfd2Fsa19zdGF0ZSk7CiAKIAl3YWxrX3N0YXRlLT5uZXh0ID0gdGhyZWFkLT53YWxrX3N0YXRlX2xpc3Q7CiAJdGhyZWFkLT53YWxrX3N0YXRlX2xpc3QgPSB3YWxrX3N0YXRlOwpAQCAtNTkzLDExICs1OTQsMTIgQEAKIHsKIAlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfcG9wX3dhbGtfc3RhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX3BvcF93YWxrX3N0YXRlKTsKIAogCXdhbGtfc3RhdGUgPSB0aHJlYWQtPndhbGtfc3RhdGVfbGlzdDsKIAogCWlmICh3YWxrX3N0YXRlKSB7CisKIAkJLyogTmV4dCB3YWxrIHN0YXRlIGJlY29tZXMgdGhlIGN1cnJlbnQgd2FsayBzdGF0ZSAqLwogCiAJCXRocmVhZC0+d2Fsa19zdGF0ZV9saXN0ID0gd2Fsa19zdGF0ZS0+bmV4dDsKQEAgLTYxOCw3ICs2MjAsNyBAQAogICoKICAqIFBBUkFNRVRFUlM6ICBvd25lcl9pZCAgICAgICAgLSBJRCBmb3Igb2JqZWN0IGNyZWF0aW9uCiAgKiAgICAgICAgICAgICAgT3JpZ2luICAgICAgICAgIC0gU3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgd2FsawotICogICAgICAgICAgICAgIG10aF9kZXNjICAgICAgICAtIE1ldGhvZCBvYmplY3QKKyAqICAgICAgICAgICAgICBtZXRob2RfZGVzYyAgICAgLSBNZXRob2Qgb2JqZWN0CiAgKiAgICAgICAgICAgICAgVGhyZWFkICAgICAgICAgIC0gQ3VycmVudCB0aHJlYWQgc3RhdGUKICAqCiAgKiBSRVRVUk46ICAgICAgUG9pbnRlciB0byB0aGUgbmV3IHdhbGsgc3RhdGUuCkBAIC02MzIsMjQgKzYzNCwyNCBAQAogCQkJCQkJICB1bmlvbiBhY3BpX3BhcnNlX29iamVjdAogCQkJCQkJICAqb3JpZ2luLAogCQkJCQkJICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0Ci0JCQkJCQkgICptdGhfZGVzYywKKwkJCQkJCSAgKm1ldGhvZF9kZXNjLAogCQkJCQkJICBzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUKIAkJCQkJCSAgKnRocmVhZCkKIHsKIAlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX2NyZWF0ZV93YWxrX3N0YXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19jcmVhdGVfd2Fsa19zdGF0ZSk7CiAKLQl3YWxrX3N0YXRlID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlKSk7CisJd2Fsa19zdGF0ZSA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlKSk7CiAJaWYgKCF3YWxrX3N0YXRlKSB7CiAJCXJldHVybl9QVFIoTlVMTCk7CiAJfQogCi0Jd2Fsa19zdGF0ZS0+ZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfV0FMSzsKKwl3YWxrX3N0YXRlLT5kZXNjcmlwdG9yX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9XQUxLOworCXdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjID0gbWV0aG9kX2Rlc2M7CiAJd2Fsa19zdGF0ZS0+b3duZXJfaWQgPSBvd25lcl9pZDsKIAl3YWxrX3N0YXRlLT5vcmlnaW4gPSBvcmlnaW47Ci0Jd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MgPSBtdGhfZGVzYzsKIAl3YWxrX3N0YXRlLT50aHJlYWQgPSB0aHJlYWQ7CiAKIAl3YWxrX3N0YXRlLT5wYXJzZXJfc3RhdGUuc3RhcnRfb3AgPSBvcmlnaW47CkBAIC02NjQsNyArNjY2LDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfZHNfcmVzdWx0X3N0YWNrX3B1c2god2Fsa19zdGF0ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfTUVNX0ZSRUUod2Fsa19zdGF0ZSk7CisJCUFDUElfRlJFRSh3YWxrX3N0YXRlKTsKIAkJcmV0dXJuX1BUUihOVUxMKTsKIAl9CiAKQEAgLTcwMSwxMyArNzAzLDEzIEBACiAJCSAgICAgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICptZXRob2Rfbm9kZSwKIAkJICAgICAgdTggKiBhbWxfc3RhcnQsCiAJCSAgICAgIHUzMiBhbWxfbGVuZ3RoLAotCQkgICAgICBzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbywgdTggcGFzc19udW1iZXIpCisJCSAgICAgIHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8sIHU4IHBhc3NfbnVtYmVyKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAqcGFyc2VyX3N0YXRlID0gJndhbGtfc3RhdGUtPnBhcnNlcl9zdGF0ZTsKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqZXh0cmFfb3A7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19pbml0X2FtbF93YWxrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19pbml0X2FtbF93YWxrKTsKIAogCXdhbGtfc3RhdGUtPnBhcnNlcl9zdGF0ZS5hbWwgPQogCSAgICB3YWxrX3N0YXRlLT5wYXJzZXJfc3RhdGUuYW1sX3N0YXJ0ID0gYW1sX3N0YXJ0OwpAQCAtNzc4LDYgKzc4MCw3IEBACiAJCX0KIAogCQlpZiAocGFyc2VyX3N0YXRlLT5zdGFydF9ub2RlKSB7CisKIAkJCS8qIFB1c2ggc3RhcnQgc2NvcGUgb24gc2NvcGUgc3RhY2sgYW5kIG1ha2UgaXQgY3VycmVudCAgKi8KIAogCQkJc3RhdHVzID0KQEAgLTgxMCwyMSArODEzLDI0IEBACiB7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpzdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19kZWxldGVfd2Fsa19zdGF0ZSIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2RlbGV0ZV93YWxrX3N0YXRlLCB3YWxrX3N0YXRlKTsKIAogCWlmICghd2Fsa19zdGF0ZSkgewogCQlyZXR1cm47CiAJfQogCi0JaWYgKHdhbGtfc3RhdGUtPmRhdGFfdHlwZSAhPSBBQ1BJX0RFU0NfVFlQRV9XQUxLKSB7CisJaWYgKHdhbGtfc3RhdGUtPmRlc2NyaXB0b3JfdHlwZSAhPSBBQ1BJX0RFU0NfVFlQRV9XQUxLKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sICIlcCBpcyBub3QgYSB2YWxpZCB3YWxrIHN0YXRlIiwKIAkJCSAgICB3YWxrX3N0YXRlKSk7CiAJCXJldHVybjsKIAl9CiAKKwkvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSBvcGVuIHNjb3BlcyAqLworCiAJaWYgKHdhbGtfc3RhdGUtPnBhcnNlcl9zdGF0ZS5zY29wZSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiJXAgd2FsayBzdGlsbCBoYXMgYSBzY29wZSBsaXN0IiwKIAkJCSAgICB3YWxrX3N0YXRlKSk7CisJCWFjcGlfcHNfY2xlYW51cF9zY29wZSgmd2Fsa19zdGF0ZS0+cGFyc2VyX3N0YXRlKTsKIAl9CiAKIAkvKiBBbHdheXMgbXVzdCBmcmVlIGFueSBsaW5rZWQgY29udHJvbCBzdGF0ZXMgKi8KQEAgLTg1NCw3ICs4NjAsNyBAQAogCQlhY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKHN0YXRlKTsKIAl9CiAKLQlBQ1BJX01FTV9GUkVFKHdhbGtfc3RhdGUpOworCUFDUElfRlJFRSh3YWxrX3N0YXRlKTsKIAlyZXR1cm5fVk9JRDsKIH0KIApAQCAtODc5LDcgKzg4NSw3IEBACiB7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpzdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfcmVzdWx0X2luc2VydCIpOworCUFDUElfRlVOQ1RJT05fTkFNRShkc19yZXN1bHRfaW5zZXJ0KTsKIAogCXN0YXRlID0gd2Fsa19zdGF0ZS0+cmVzdWx0czsKIAlpZiAoIXN0YXRlKSB7CkBAIC05MzcsNyArOTQzLDcgQEAKIHsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19vYmpfc3RhY2tfZGVsZXRlX2FsbCIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX29ial9zdGFja19kZWxldGVfYWxsLCB3YWxrX3N0YXRlKTsKIAogCS8qIFRoZSBzdGFjayBzaXplIGlzIGNvbmZpZ3VyYWJsZSwgYnV0IGZpeGVkICovCiAKQEAgLTk2OSw3ICs5NzUsNyBAQAogYWNwaV9kc19vYmpfc3RhY2tfcG9wX29iamVjdCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqb2JqZWN0LAogCQkJICAgICBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKQogewotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfb2JqX3N0YWNrX3BvcF9vYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfb2JqX3N0YWNrX3BvcF9vYmplY3QpOwogCiAJLyogQ2hlY2sgZm9yIHN0YWNrIHVuZGVyZmxvdyAqLwogCkBAIC0xMDI1LDcgKzEwMzEsNyBAQAogdm9pZCAqYWNwaV9kc19vYmpfc3RhY2tfZ2V0X3ZhbHVlKHUzMiBpbmRleCwgc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSkKIHsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19vYmpfc3RhY2tfZ2V0X3ZhbHVlIiwgd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfb2JqX3N0YWNrX2dldF92YWx1ZSwgd2Fsa19zdGF0ZSk7CiAKIAkvKiBDYW4ndCBkbyBpdCBpZiB0aGUgc3RhY2sgaXMgZW1wdHkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCA3OWIwOWQ3Li5jMDM2ZTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtNzYzLDggKzc2Myw3IEBACiAKIAlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5jb21tb24uZ3BlX2JpdCwgQUNQSV9JU1IpOwogCi0Jc3RhdHVzID0gYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uKE9TRF9QUklPUklUWV9HUEUsCi0JCQkJCSAgICAgYWNwaV9lY19ncGVfcXVlcnksIGVjKTsKKwlzdGF0dXMgPSBhY3BpX29zX2V4ZWN1dGUoT1NMX0VDX1BPTExfSEFORExFUiwgYWNwaV9lY19ncGVfcXVlcnksIGVjKTsKIAogCWlmIChzdGF0dXMgPT0gQUVfT0spCiAJCXJldHVybiBBQ1BJX0lOVEVSUlVQVF9IQU5ETEVEOwpAQCAtNzk5LDcgKzc5OCw3IEBACiAKIAlpZiAodmFsdWUgJiBBQ1BJX0VDX0ZMQUdfU0NJKSB7CiAJCWF0b21pY19hZGQoMSwgJmVjLT5pbnRyLnBlbmRpbmdfZ3BlKTsKLQkJc3RhdHVzID0gYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uKE9TRF9QUklPUklUWV9HUEUsCisJCXN0YXR1cyA9IGFjcGlfb3NfZXhlY3V0ZShPU0xfRUNfQlVSU1RfSEFORExFUiwKIAkJCQkJCSAgICAgYWNwaV9lY19ncGVfcXVlcnksIGVjKTsKIAkJcmV0dXJuIHN0YXR1cyA9PSBBRV9PSyA/CiAJCSAgICBBQ1BJX0lOVEVSUlVQVF9IQU5ETEVEIDogQUNQSV9JTlRFUlJVUFRfTk9UX0hBTkRMRUQ7CkBAIC05OTEsNyArOTkwLDYgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX2VjICplYyA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyB1aWQ7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VjX2FkZCIpOwogCkBAIC0xMDE0LDEwICsxMDEyLDkgQEAKIAlhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWMtPmNvbW1vbi5oYW5kbGUsICJfR0xLIiwgTlVMTCwKIAkJCSAgICAgICZlYy0+Y29tbW9uLmdsb2JhbF9sb2NrKTsKIAotCS8qIElmIG91ciBVSUQgbWF0Y2hlcyB0aGUgVUlEIGZvciB0aGUgRUNEVC1lbnVtZXJhdGVkIEVDLAotCSAgIHdlIG5vdyBoYXZlIHRoZSAqcmVhbCogRUMgaW5mbywgc28ga2lsbCB0aGUgbWFrZXNoaWZ0IG9uZS4gKi8KLQlhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWMtPmNvbW1vbi5oYW5kbGUsICJfVUlEIiwgTlVMTCwgJnVpZCk7Ci0JaWYgKGVjX2VjZHQgJiYgZWNfZWNkdC0+Y29tbW9uLnVpZCA9PSB1aWQpIHsKKwkvKiBYWFggd2UgZG9uJ3QgdGVzdCB1aWRzLCBiZWNhdXNlIG9uIHNvbWUgYm94ZXMgZWNkdCB1aWQgPSAwLCBzZWU6CisJICAgaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTEgKi8KKwlpZiAoZWNfZWNkdCkgewogCQlhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoQUNQSV9ST09UX09CSkVDVCwKIAkJCQkJCSAgQUNQSV9BRFJfU1BBQ0VfRUMsCiAJCQkJCQkgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIpOwpAQCAtMTA2Miw3ICsxMDU5LDYgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX2VjICplYyA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyB1aWQ7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VjX2FkZCIpOwogCkBAIC0xMDg4LDEwICsxMDg0LDkgQEAKIAlhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWMtPmNvbW1vbi5oYW5kbGUsICJfR0xLIiwgTlVMTCwKIAkJCSAgICAgICZlYy0+Y29tbW9uLmdsb2JhbF9sb2NrKTsKIAotCS8qIElmIG91ciBVSUQgbWF0Y2hlcyB0aGUgVUlEIGZvciB0aGUgRUNEVC1lbnVtZXJhdGVkIEVDLAotCSAgIHdlIG5vdyBoYXZlIHRoZSAqcmVhbCogRUMgaW5mbywgc28ga2lsbCB0aGUgbWFrZXNoaWZ0IG9uZS4gKi8KLQlhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWMtPmNvbW1vbi5oYW5kbGUsICJfVUlEIiwgTlVMTCwgJnVpZCk7Ci0JaWYgKGVjX2VjZHQgJiYgZWNfZWNkdC0+Y29tbW9uLnVpZCA9PSB1aWQpIHsKKwkvKiBYWFggd2UgZG9uJ3QgdGVzdCB1aWRzLCBiZWNhdXNlIG9uIHNvbWUgYm94ZXMgZWNkdCB1aWQgPSAwLCBzZWU6CisJICAgaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTEgKi8KKwlpZiAoZWNfZWNkdCkgewogCQlhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoQUNQSV9ST09UX09CSkVDVCwKIAkJCQkJCSAgQUNQSV9BRFJfU1BBQ0VfRUMsCiAJCQkJCQkgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIpOwpAQCAtMTU3Miw3ICsxNTY3LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfZmFrZV9lY2R0X3NldHVwKGNoYXIgKnN0cikKIHsKIAlhY3BpX2Zha2VfZWNkdF9lbmFibGVkID0gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgiYWNwaV9mYWtlX2VjZHQiLCBhY3BpX2Zha2VfZWNkdF9zZXR1cCk7CkBAIC0xNTkxLDcgKzE1ODYsNyBAQAogCQlhY3BpX2VjX2RyaXZlci5vcHMuYWRkID0gYWNwaV9lY19wb2xsX2FkZDsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkVDICVzIG1vZGUuXG4iLCBpbnRyID8gImludGVycnVwdCIgOiAicG9sbGluZyIpOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBfX3NldHVwKCJlY19pbnRyPSIsIGFjcGlfZWNfc2V0X2ludHJfbW9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2ZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZldmVudC5jCmluZGV4IGM5YWMwNWMuLjkxOTAzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZldmVudC5jCkBAIC02OCw3ICs2OCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5pdGlhbGl6ZV9ldmVudHMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luaXRpYWxpemVfZXZlbnRzKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIEFDUEkgdGFibGVzICovCiAKQEAgLTExOCw3ICsxMTgsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2luc3RhbGxfZmFkdF9ncGVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9pbnN0YWxsX2ZhZHRfZ3Blcyk7CiAKIAkvKiBOYW1lc3BhY2UgbXVzdCBiZSBsb2NrZWQgKi8KIApAQCAtMTU3LDcgKzE1Nyw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5zdGFsbF94cnVwdF9oYW5kbGVycyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfaW5zdGFsbF94cnVwdF9oYW5kbGVycyk7CiAKIAkvKiBJbnN0YWxsIHRoZSBTQ0kgaGFuZGxlciAqLwogCkBAIC0yNDEsNyArMjQxLDcgQEAKIAl1MzIgZml4ZWRfZW5hYmxlOwogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZXZfZml4ZWRfZXZlbnRfZGV0ZWN0Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGV2X2ZpeGVkX2V2ZW50X2RldGVjdCk7CiAKIAkvKgogCSAqIFJlYWQgdGhlIGZpeGVkIGZlYXR1cmUgc3RhdHVzIGFuZCBlbmFibGUgcmVnaXN0ZXJzLCBhcyBhbGwgdGhlIGNhc2VzCkBAIC0yNjAsMTIgKzI2MCwxNCBAQAogCSAqIENoZWNrIGZvciBhbGwgcG9zc2libGUgRml4ZWQgRXZlbnRzIGFuZCBkaXNwYXRjaCB0aG9zZSB0aGF0IGFyZSBhY3RpdmUKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fRklYRURfRVZFTlRTOyBpKyspIHsKKwogCQkvKiBCb3RoIHRoZSBzdGF0dXMgYW5kIGVuYWJsZSBiaXRzIG11c3QgYmUgb24gZm9yIHRoaXMgZXZlbnQgKi8KIAogCQlpZiAoKGZpeGVkX3N0YXR1cyAmIGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9baV0uCiAJCSAgICAgc3RhdHVzX2JpdF9tYXNrKQogCQkgICAgJiYgKGZpeGVkX2VuYWJsZSAmIGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9baV0uCiAJCQllbmFibGVfYml0X21hc2spKSB7CisKIAkJCS8qIEZvdW5kIGFuIGFjdGl2ZSAoc2lnbmFsbGVkKSBldmVudCAqLwogCiAJCQlpbnRfc3RhdHVzIHw9IGFjcGlfZXZfZml4ZWRfZXZlbnRfZGlzcGF0Y2goKHUzMikgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlLmMKaW5kZXggZjY0Zjk3Ny4uZjAxZDMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGUuYwpAQCAtNjksNyArNjksNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X3NldF9ncGVfdHlwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2V0X2dwZV90eXBlKTsKIAogCS8qIFZhbGlkYXRlIHR5cGUgYW5kIHVwZGF0ZSByZWdpc3RlciBlbmFibGUgbWFza3MgKi8KIApAQCAtMTE1LDcgKzExNSw3IEBACiAJc3RydWN0IGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8gKmdwZV9yZWdpc3Rlcl9pbmZvOwogCXU4IHJlZ2lzdGVyX2JpdDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyk7CiAKIAlncGVfcmVnaXN0ZXJfaW5mbyA9IGdwZV9ldmVudF9pbmZvLT5yZWdpc3Rlcl9pbmZvOwogCWlmICghZ3BlX3JlZ2lzdGVyX2luZm8pIHsKQEAgLTE3OCw3ICsxNzgsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2VuYWJsZV9ncGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2VuYWJsZV9ncGUpOwogCiAJLyogTWFrZSBzdXJlIEhXIGVuYWJsZSBtYXNrcyBhcmUgdXBkYXRlZCAqLwogCkBAIC0yMDcsNiArMjA3LDcgQEAKIAkJQUNQSV9TRVRfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfUlVOX0VOQUJMRUQpOwogCiAJCWlmICh3cml0ZV90b19oYXJkd2FyZSkgeworCiAJCQkvKiBDbGVhciB0aGUgR1BFIChvZiBzdGFsZSBldmVudHMpLCB0aGVuIGVuYWJsZSBpdCAqLwogCiAJCQlzdGF0dXMgPSBhY3BpX2h3X2NsZWFyX2dwZShncGVfZXZlbnRfaW5mbyk7CkBAIC0yNDMsNyArMjQ0LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9kaXNhYmxlX2dwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZGlzYWJsZV9ncGUpOwogCiAJaWYgKCEoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRU5BQkxFX01BU0spKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0zMTMsNiArMzE0LDcgQEAKIAkvKiBBIE5VTEwgZ3BlX2Jsb2NrIG1lYW5zIHVzZSB0aGUgRkFEVC1kZWZpbmVkIEdQRSBibG9jayhzKSAqLwogCiAJaWYgKCFncGVfZGV2aWNlKSB7CisKIAkJLyogRXhhbWluZSBHUEUgQmxvY2sgMCBhbmQgMSAoVGhlc2UgYmxvY2tzIGFyZSBwZXJtYW5lbnQpICovCiAKIAkJZm9yIChpID0gMDsgaSA8IEFDUElfTUFYX0dQRV9CTE9DS1M7IGkrKykgewpAQCAtMzgwLDEwICszODIsMTEgQEAKIAl1MzIgc3RhdHVzX3JlZzsKIAl1MzIgZW5hYmxlX3JlZzsKIAlhY3BpX2NwdV9mbGFncyBmbGFnczsKKwlhY3BpX2NwdV9mbGFncyBod19mbGFnczsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAJYWNwaV9uYXRpdmVfdWludCBqOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJldl9ncGVfZGV0ZWN0Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGV2X2dwZV9kZXRlY3QpOwogCiAJLyogQ2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyBHUEVzICovCiAKQEAgLTM5MSw5ICszOTQsMTIgQEAKIAkJcmV0dXJuIChpbnRfc3RhdHVzKTsKIAl9CiAKLQkvKiBFeGFtaW5lIGFsbCBHUEUgYmxvY2tzIGF0dGFjaGVkIHRvIHRoaXMgaW50ZXJydXB0IGxldmVsICovCisJLyogV2UgbmVlZCB0byBob2xkIHRoZSBHUEUgbG9jayBub3csIGhhcmR3YXJlIGxvY2sgaW4gdGhlIGxvb3AgKi8KIAogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOworCisJLyogRXhhbWluZSBhbGwgR1BFIGJsb2NrcyBhdHRhY2hlZCB0byB0aGlzIGludGVycnVwdCBsZXZlbCAqLworCiAJZ3BlX2Jsb2NrID0gZ3BlX3hydXB0X2xpc3QtPmdwZV9ibG9ja19saXN0X2hlYWQ7CiAJd2hpbGUgKGdwZV9ibG9jaykgewogCQkvKgpAQCAtNDAyLDEwICs0MDgsMTMgQEAKIAkJICogRmluZCBhbGwgY3VycmVudGx5IGFjdGl2ZSBHUCBldmVudHMuCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7CisKIAkJCS8qIEdldCB0aGUgbmV4dCBzdGF0dXMvZW5hYmxlIHBhaXIgKi8KIAogCQkJZ3BlX3JlZ2lzdGVyX2luZm8gPSAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldOwogCisJCQlod19mbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOworCiAJCQkvKiBSZWFkIHRoZSBTdGF0dXMgUmVnaXN0ZXIgKi8KIAogCQkJc3RhdHVzID0KQEAgLTQxNCw2ICs0MjMsOCBAQAogCQkJCQkJICAgJmdwZV9yZWdpc3Rlcl9pbmZvLT4KIAkJCQkJCSAgIHN0YXR1c19hZGRyZXNzKTsKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2ssCisJCQkJCQkgICAgIGh3X2ZsYWdzKTsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KIApAQCAtNDI0LDYgKzQzNSw4IEBACiAJCQkJCQkgICAmZW5hYmxlX3JlZywKIAkJCQkJCSAgICZncGVfcmVnaXN0ZXJfaW5mby0+CiAJCQkJCQkgICBlbmFibGVfYWRkcmVzcyk7CisJCQlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBod19mbGFncyk7CisKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQpAQCAtNDM3LDYgKzQ1MCw3IEBACiAKIAkJCWVuYWJsZWRfc3RhdHVzX2J5dGUgPSAodTgpIChzdGF0dXNfcmVnICYgZW5hYmxlX3JlZyk7CiAJCQlpZiAoIWVuYWJsZWRfc3RhdHVzX2J5dGUpIHsKKwogCQkJCS8qIE5vIGFjdGl2ZSBHUEVzIGluIHRoaXMgcmVnaXN0ZXIsIG1vdmUgb24gKi8KIAogCQkJCWNvbnRpbnVlOwpAQCAtNDQ1LDYgKzQ1OSw3IEBACiAJCQkvKiBOb3cgbG9vayBhdCB0aGUgaW5kaXZpZHVhbCBHUEVzIGluIHRoaXMgYnl0ZSByZWdpc3RlciAqLwogCiAJCQlmb3IgKGogPSAwOyBqIDwgQUNQSV9HUEVfUkVHSVNURVJfV0lEVEg7IGorKykgeworCiAJCQkJLyogRXhhbWluZSBvbmUgR1BFIGJpdCAqLwogCiAJCQkJaWYgKGVuYWJsZWRfc3RhdHVzX2J5dGUgJgpAQCAtNDgzLDkgKzQ5OCw5IEBACiAgKgogICogUkVUVVJOOiAgICAgIE5vbmUKICAqCi0gKiBERVNDUklQVElPTjogUGVyZm9ybSB0aGUgYWN0dWFsIGV4ZWN1dGlvbiBvZiBhIEdQRSBjb250cm9sIG1ldGhvZC4gIFRoaXMKLSAqICAgICAgICAgICAgICBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBpbnZvY2F0aW9uIG9mIGFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbgotICogICAgICAgICAgICAgIChhbmQgdGhlcmVmb3JlIGRvZXMgTk9UIGV4ZWN1dGUgYXQgaW50ZXJydXB0IGxldmVsKSBzbyB0aGF0CisgKiBERVNDUklQVElPTjogUGVyZm9ybSB0aGUgYWN0dWFsIGV4ZWN1dGlvbiBvZiBhIEdQRSBjb250cm9sIG1ldGhvZC4gVGhpcworICogICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludm9jYXRpb24gb2YgYWNwaV9vc19leGVjdXRlIGFuZAorICogICAgICAgICAgICAgIHRoZXJlZm9yZSBkb2VzIE5PVCBleGVjdXRlIGF0IGludGVycnVwdCBsZXZlbCAtIHNvIHRoYXQKICAqICAgICAgICAgICAgICB0aGUgY29udHJvbCBtZXRob2QgaXRzZWxmIGlzIG5vdCBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZgogICogICAgICAgICAgICAgIGFuIGludGVycnVwdCBoYW5kbGVyLgogICoKQEAgLTQ5NCwxMiArNTA5LDExIEBACiBzdGF0aWMgdm9pZCBBQ1BJX1NZU1RFTV9YRkFDRSBhY3BpX2V2X2FzeW5jaF9leGVjdXRlX2dwZV9tZXRob2Qodm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8gPSAodm9pZCAqKWNvbnRleHQ7Ci0JdTMyIGdwZV9udW1iZXIgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyBsb2NhbF9ncGVfZXZlbnRfaW5mbzsKLQlzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyBpbmZvOworCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9hc3luY2hfZXhlY3V0ZV9ncGVfbWV0aG9kIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9hc3luY2hfZXhlY3V0ZV9ncGVfbWV0aG9kKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtNTM1LDIyICs1NDksMzUgQEAKIAkgKi8KIAlpZiAoKGxvY2FsX2dwZV9ldmVudF9pbmZvLmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSykgPT0KIAkgICAgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EKSB7Ci0JCS8qCi0JCSAqIEludm9rZSB0aGUgR1BFIE1ldGhvZCAoX0x4eCwgX0V4eCkgaS5lLiwgZXZhbHVhdGUgdGhlIF9MeHgvX0V4eAotCQkgKiBjb250cm9sIG1ldGhvZCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgR1BFCi0JCSAqLwotCQlpbmZvLm5vZGUgPSBsb2NhbF9ncGVfZXZlbnRfaW5mby5kaXNwYXRjaC5tZXRob2Rfbm9kZTsKLQkJaW5mby5wYXJhbWV0ZXJzID0KLQkJICAgIEFDUElfQ0FTVF9QVFIodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqLCBncGVfZXZlbnRfaW5mbyk7Ci0JCWluZm8ucGFyYW1ldGVyX3R5cGUgPSBBQ1BJX1BBUkFNX0dQRTsKIAotCQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX2J5X2hhbmRsZSgmaW5mbyk7CisJCS8qIEFsbG9jYXRlIHRoZSBldmFsdWF0aW9uIGluZm9ybWF0aW9uIGJsb2NrICovCisKKwkJaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvKSk7CisJCWlmICghaW5mbykgeworCQkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEludm9rZSB0aGUgR1BFIE1ldGhvZCAoX0x4eCwgX0V4eCkgaS5lLiwgZXZhbHVhdGUgdGhlIF9MeHgvX0V4eAorCQkJICogY29udHJvbCBtZXRob2QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIEdQRQorCQkJICovCisJCQlpbmZvLT5wcmVmaXhfbm9kZSA9CisJCQkgICAgbG9jYWxfZ3BlX2V2ZW50X2luZm8uZGlzcGF0Y2gubWV0aG9kX25vZGU7CisJCQlpbmZvLT5wYXJhbWV0ZXJzID0KKwkJCSAgICBBQ1BJX0NBU1RfUFRSKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiwKKwkJCQkJICBncGVfZXZlbnRfaW5mbyk7CisJCQlpbmZvLT5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fR1BFOworCQkJaW5mby0+ZmxhZ3MgPSBBQ1BJX0lHTk9SRV9SRVRVUk5fVkFMVUU7CisKKwkJCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mbyk7CisJCQlBQ1BJX0ZSRUUoaW5mbyk7CisJCX0KKwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCi0JCQkJCSJXaGlsZSBldmFsdWF0aW5nIG1ldGhvZCBbJTQuNHNdIGZvciBHUEVbJTJYXSIsCisJCQkJCSJXaGlsZSBldmFsdWF0aW5nIEdQRSBtZXRob2QgWyU0LjRzXSIsCiAJCQkJCWFjcGlfdXRfZ2V0X25vZGVfbmFtZQogCQkJCQkobG9jYWxfZ3BlX2V2ZW50X2luZm8uZGlzcGF0Y2guCi0JCQkJCSBtZXRob2Rfbm9kZSksIGdwZV9udW1iZXIpKTsKKwkJCQkJIG1ldGhvZF9ub2RlKSkpOwogCQl9CiAJfQogCkBAIC01OTMsNyArNjIwLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9ncGVfZGlzcGF0Y2giKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2dwZV9kaXNwYXRjaCk7CiAKIAkvKgogCSAqIElmIGVkZ2UtdHJpZ2dlcmVkLCBjbGVhciB0aGUgR1BFIHN0YXR1cyBiaXQgbm93LiAgTm90ZSB0aGF0CkBAIC02NjksOSArNjk2LDkgQEAKIAkJICogRXhlY3V0ZSB0aGUgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGUgR1BFCiAJCSAqIE5PVEU6IExldmVsLXRyaWdnZXJlZCBHUEVzIGFyZSBjbGVhcmVkIGFmdGVyIHRoZSBtZXRob2QgY29tcGxldGVzLgogCQkgKi8KLQkJc3RhdHVzID0gYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uKE9TRF9QUklPUklUWV9HUEUsCi0JCQkJCQkgICAgIGFjcGlfZXZfYXN5bmNoX2V4ZWN1dGVfZ3BlX21ldGhvZCwKLQkJCQkJCSAgICAgZ3BlX2V2ZW50X2luZm8pOworCQlzdGF0dXMgPSBhY3BpX29zX2V4ZWN1dGUoT1NMX0dQRV9IQU5ETEVSLAorCQkJCQkgYWNwaV9ldl9hc3luY2hfZXhlY3V0ZV9ncGVfbWV0aG9kLAorCQkJCQkgZ3BlX2V2ZW50X2luZm8pOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCiAJCQkJCSJVbmFibGUgdG8gcXVldWUgaGFuZGxlciBmb3IgR1BFWyUyWF0gLSBldmVudCBkaXNhYmxlZCIsCkBAIC03MTYsNyArNzQzLDcgQEAKICAqCiAgKiBERVNDUklQVElPTjogRGV0ZXJtaW5lIGlmIGEgYSBHUEUgaXMgIndha2Utb25seSIuCiAgKgotICogICAgICAgICAgICAgIENhbGxlZCBmcm9tIE5vdGlmeSgpIGNvZGUgaW4gaW50ZXJwcmV0ZXIgd2hlbiBhICJkZXZpY2Vfd2FrZSIKKyAqICAgICAgICAgICAgICBDYWxsZWQgZnJvbSBOb3RpZnkoKSBjb2RlIGluIGludGVycHJldGVyIHdoZW4gYSAiRGV2aWNlV2FrZSIKICAqICAgICAgICAgICAgICBOb3RpZnkgY29tZXMgaW4uCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTcyNiw3ICs3NTMsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2NoZWNrX2Zvcl93YWtlX29ubHlfZ3BlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9jaGVja19mb3Jfd2FrZV9vbmx5X2dwZSk7CiAKIAlpZiAoKGdwZV9ldmVudF9pbmZvKSAmJgkvKiBPbmx5ID4wIGZvciBfTHh4L19FeHggKi8KIAkgICAgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9TWVNURU1fTUFTSykgPT0gQUNQSV9HUEVfU1lTVEVNX1JVTk5JTkcpKSB7CS8qIFN5c3RlbSBzdGF0ZSBhdCBHUEUgdGltZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZWJsay5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZWJsay5jCmluZGV4IDBmZDAwYjUuLjk1ZGRlYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGVibGsuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlYmxrLmMKQEAgLTEzMSwxNCArMTMxLDE0IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMgYWNwaV9ldl93YWxrX2dwZV9saXN0KEFDUElfR1BFX0NBTExCQUNLIGdwZV93YWxrX2NhbGxiYWNrKQorYWNwaV9zdGF0dXMgYWNwaV9ldl93YWxrX2dwZV9saXN0KGFjcGlfZ3BlX2NhbGxiYWNrIGdwZV93YWxrX2NhbGxiYWNrKQogewogCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICpncGVfYmxvY2s7CiAJc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9pbmZvOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfd2Fsa19ncGVfbGlzdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfd2Fsa19ncGVfbGlzdCk7CiAKIAlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKIApAQCAtMTQ2LDEwICsxNDYsMTIgQEAKIAogCWdwZV94cnVwdF9pbmZvID0gYWNwaV9nYmxfZ3BlX3hydXB0X2xpc3RfaGVhZDsKIAl3aGlsZSAoZ3BlX3hydXB0X2luZm8pIHsKKwogCQkvKiBXYWxrIGFsbCBHcGUgQmxvY2tzIGF0dGFjaGVkIHRvIHRoaXMgaW50ZXJydXB0IGxldmVsICovCiAKIAkJZ3BlX2Jsb2NrID0gZ3BlX3hydXB0X2luZm8tPmdwZV9ibG9ja19saXN0X2hlYWQ7CiAJCXdoaWxlIChncGVfYmxvY2spIHsKKwogCQkJLyogT25lIGNhbGxiYWNrIHBlciBHUEUgYmxvY2sgKi8KIAogCQkJc3RhdHVzID0gZ3BlX3dhbGtfY2FsbGJhY2soZ3BlX3hydXB0X2luZm8sIGdwZV9ibG9jayk7CkBAIC0xOTAsMTEgKzE5MiwxMiBAQAogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAlhY3BpX25hdGl2ZV91aW50IGo7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9kZWxldGVfZ3BlX2hhbmRsZXJzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9kZWxldGVfZ3BlX2hhbmRsZXJzKTsKIAogCS8qIEV4YW1pbmUgZWFjaCBHUEUgUmVnaXN0ZXIgd2l0aGluIHRoZSBibG9jayAqLwogCiAJZm9yIChpID0gMDsgaSA8IGdwZV9ibG9jay0+cmVnaXN0ZXJfY291bnQ7IGkrKykgeworCiAJCS8qIE5vdyBsb29rIGF0IHRoZSBpbmRpdmlkdWFsIEdQRXMgaW4gdGhpcyBieXRlIHJlZ2lzdGVyICovCiAKIAkJZm9yIChqID0gMDsgaiA8IEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIOyBqKyspIHsKQEAgLTIwNCw3ICsyMDcsNyBAQAogCiAJCQlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09CiAJCQkgICAgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUikgewotCQkJCUFDUElfTUVNX0ZSRUUoZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmhhbmRsZXIpOworCQkJCUFDUElfRlJFRShncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guaGFuZGxlcik7CiAJCQkJZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmhhbmRsZXIgPSBOVUxMOwogCQkJCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPQogCQkJCSAgICB+QUNQSV9HUEVfRElTUEFUQ0hfTUFTSzsKQEAgLTI0OCw3ICsyNTEsNyBAQAogCXU4IHR5cGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfc2F2ZV9tZXRob2RfaW5mbyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2F2ZV9tZXRob2RfaW5mbyk7CiAKIAkvKgogCSAqIF9MeHggYW5kIF9FeHggR1BFIG1ldGhvZCBzdXBwb3J0CkBAIC0yNzksOSArMjgyLDkgQEAKIAlkZWZhdWx0OgogCQkvKiBVbmtub3duIG1ldGhvZCB0eXBlLCBqdXN0IGlnbm9yZSBpdCEgKi8KIAotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJVbmtub3duIEdQRSBtZXRob2QgdHlwZTogJXMgKG5hbWUgbm90IG9mIGZvcm0gX0x4eCBvciBfRXh4KSIsCi0JCQkgICAgbmFtZSkpOworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0xPQUQsCisJCQkJICAiSWdub3JpbmcgdW5rbm93biBHUEUgbWV0aG9kIHR5cGU6ICVzIChuYW1lIG5vdCBvZiBmb3JtIF9MeHggb3IgX0V4eCkiLAorCQkJCSAgbmFtZSkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIApAQCAtMjg5LDExICsyOTIsMTIgQEAKIAogCWdwZV9udW1iZXIgPSBBQ1BJX1NUUlRPVUwoJm5hbWVbMl0sIE5VTEwsIDE2KTsKIAlpZiAoZ3BlX251bWJlciA9PSBBQ1BJX1VJTlQzMl9NQVgpIHsKKwogCQkvKiBDb252ZXJzaW9uIGZhaWxlZDsgaW52YWxpZCBtZXRob2QsIGp1c3QgaWdub3JlIGl0ICovCiAKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiQ291bGQgbm90IGV4dHJhY3QgR1BFIG51bWJlciBmcm9tIG5hbWU6ICVzIChuYW1lIGlzIG5vdCBvZiBmb3JtIF9MeHggb3IgX0V4eCkiLAotCQkJICAgIG5hbWUpKTsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9MT0FELAorCQkJCSAgIkNvdWxkIG5vdCBleHRyYWN0IEdQRSBudW1iZXIgZnJvbSBuYW1lOiAlcyAobmFtZSBpcyBub3Qgb2YgZm9ybSBfTHh4IG9yIF9FeHgpIiwKKwkJCQkgIG5hbWUpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAl9CiAKQEAgLTM2NCwxMyArMzY4LDE0IEBACiAJdTMyIGdwZV9udW1iZXI7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfbWF0Y2hfcHJ3X2FuZF9ncGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X21hdGNoX3Byd19hbmRfZ3BlKTsKIAogCS8qIENoZWNrIGZvciBhIF9QUlcgbWV0aG9kIHVuZGVyIHRoaXMgZGV2aWNlICovCiAKIAlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChvYmpfaGFuZGxlLCBNRVRIT0RfTkFNRV9fUFJXLAogCQkJCQkgQUNQSV9CVFlQRV9QQUNLQUdFLCAmcGtnX2Rlc2MpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCS8qIElnbm9yZSBhbGwgZXJyb3JzIGZyb20gX1BSVywgd2UgZG9uJ3Qgd2FudCB0byBhYm9ydCB0aGUgc3Vic3lzdGVtICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTM5NCw2ICszOTksNyBAQAogCW9ial9kZXNjID0gcGtnX2Rlc2MtPnBhY2thZ2UuZWxlbWVudHNbMF07CiAKIAlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisKIAkJLyogVXNlIEZBRFQtZGVmaW5lZCBHUEUgZGV2aWNlIChmcm9tIGRlZmluaXRpb24gb2YgX1BSVykgKi8KIAogCQl0YXJnZXRfZ3BlX2RldmljZSA9IGFjcGlfZ2JsX2ZhZHRfZ3BlX2RldmljZTsKQEAgLTQwMiw2ICs0MDgsNyBAQAogCiAJCWdwZV9udW1iZXIgPSAodTMyKSBvYmpfZGVzYy0+aW50ZWdlci52YWx1ZTsKIAl9IGVsc2UgaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCiAJCS8qIFBhY2thZ2UgY29udGFpbnMgYSBHUEUgcmVmZXJlbmNlIGFuZCBHUEUgbnVtYmVyIHdpdGhpbiBhIEdQRSBibG9jayAqLwogCiAJCWlmICgob2JqX2Rlc2MtPnBhY2thZ2UuY291bnQgPCAyKSB8fApAQCAtNDgyLDcgKzQ4OSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfZ2V0X2dwZV94cnVwdF9ibG9jayIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZ2V0X2dwZV94cnVwdF9ibG9jayk7CiAKIAkvKiBObyBuZWVkIGZvciBsb2NrIHNpbmNlIHdlIGFyZSBub3QgY2hhbmdpbmcgYW55IGxpc3QgZWxlbWVudHMgaGVyZSAqLwogCkBAIC00OTcsNyArNTA0LDcgQEAKIAogCS8qIE5vdCBmb3VuZCwgbXVzdCBhbGxvY2F0ZSBhIG5ldyB4cnVwdCBkZXNjcmlwdG9yICovCiAKLQlncGVfeHJ1cHQgPSBBQ1BJX01FTV9DQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvKSk7CisJZ3BlX3hydXB0ID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvKSk7CiAJaWYgKCFncGVfeHJ1cHQpIHsKIAkJcmV0dXJuX1BUUihOVUxMKTsKIAl9CkBAIC01NTYsNyArNTYzLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9kZWxldGVfZ3BlX3hydXB0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9kZWxldGVfZ3BlX3hydXB0KTsKIAogCS8qIFdlIG5ldmVyIHdhbnQgdG8gcmVtb3ZlIHRoZSBTQ0kgaW50ZXJydXB0IGhhbmRsZXIgKi8KIApAQCAtNTg4LDcgKzU5NSw3IEBACiAKIAkvKiBGcmVlIHRoZSBibG9jayAqLwogCi0JQUNQSV9NRU1fRlJFRShncGVfeHJ1cHQpOworCUFDUElfRlJFRShncGVfeHJ1cHQpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKQEAgLTYxNCw3ICs2MjEsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2NwdV9mbGFncyBmbGFnczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2luc3RhbGxfZ3BlX2Jsb2NrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9pbnN0YWxsX2dwZV9ibG9jayk7CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTY2Nyw3ICs2NzQsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2NwdV9mbGFncyBmbGFnczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2luc3RhbGxfZ3BlX2Jsb2NrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9pbnN0YWxsX2dwZV9ibG9jayk7CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTY3OSw2ICs2ODYsNyBAQAogCXN0YXR1cyA9IGFjcGlfaHdfZGlzYWJsZV9ncGVfYmxvY2soZ3BlX2Jsb2NrLT54cnVwdF9ibG9jaywgZ3BlX2Jsb2NrKTsKIAogCWlmICghZ3BlX2Jsb2NrLT5wcmV2aW91cyAmJiAhZ3BlX2Jsb2NrLT5uZXh0KSB7CisKIAkJLyogVGhpcyBpcyB0aGUgbGFzdCBncGVfYmxvY2sgb24gdGhpcyBpbnRlcnJ1cHQgKi8KIAogCQlzdGF0dXMgPSBhY3BpX2V2X2RlbGV0ZV9ncGVfeHJ1cHQoZ3BlX2Jsb2NrLT54cnVwdF9ibG9jayk7CkBAIC03MDQsOSArNzEyLDkgQEAKIAogCS8qIEZyZWUgdGhlIGdwZV9ibG9jayAqLwogCi0JQUNQSV9NRU1fRlJFRShncGVfYmxvY2stPnJlZ2lzdGVyX2luZm8pOwotCUFDUElfTUVNX0ZSRUUoZ3BlX2Jsb2NrLT5ldmVudF9pbmZvKTsKLQlBQ1BJX01FTV9GUkVFKGdwZV9ibG9jayk7CisJQUNQSV9GUkVFKGdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mbyk7CisJQUNQSV9GUkVFKGdwZV9ibG9jay0+ZXZlbnRfaW5mbyk7CisJQUNQSV9GUkVFKGdwZV9ibG9jayk7CiAKICAgICAgIHVubG9ja19hbmRfZXhpdDoKIAlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKQEAgLTczNiwxNyArNzQ0LDE3IEBACiAJYWNwaV9uYXRpdmVfdWludCBqOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2NyZWF0ZV9ncGVfaW5mb19ibG9ja3MiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2NyZWF0ZV9ncGVfaW5mb19ibG9ja3MpOwogCiAJLyogQWxsb2NhdGUgdGhlIEdQRSByZWdpc3RlciBpbmZvcm1hdGlvbiBibG9jayAqLwogCi0JZ3BlX3JlZ2lzdGVyX2luZm8gPSBBQ1BJX01FTV9DQUxMT0NBVEUoKGFjcGlfc2l6ZSkgZ3BlX2Jsb2NrLT4KLQkJCQkJICAgICAgIHJlZ2lzdGVyX2NvdW50ICoKLQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QKLQkJCQkJCSAgICAgIGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8pKTsKKwlncGVfcmVnaXN0ZXJfaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIGdwZV9ibG9jay0+CisJCQkJCQkgcmVnaXN0ZXJfY291bnQgKgorCQkJCQkJIHNpemVvZihzdHJ1Y3QKKwkJCQkJCQlhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvKSk7CiAJaWYgKCFncGVfcmVnaXN0ZXJfaW5mbykgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgdGhlIGdwZV9yZWdpc3Rlcl9pbmZvIHRhYmxlIikpOworCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgdGhlIEdwZVJlZ2lzdGVySW5mbyB0YWJsZSIpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQogCkBAIC03NTQsMTMgKzc2MiwxNCBAQAogCSAqIEFsbG9jYXRlIHRoZSBHUEUgZXZlbnRfaW5mbyBibG9jay4gVGhlcmUgYXJlIGVpZ2h0IGRpc3RpbmN0IEdQRXMKIAkgKiBwZXIgcmVnaXN0ZXIuIEluaXRpYWxpemF0aW9uIHRvIHplcm9zIGlzIHN1ZmZpY2llbnQuCiAJICovCi0JZ3BlX2V2ZW50X2luZm8gPSBBQ1BJX01FTV9DQUxMT0NBVEUoKChhY3BpX3NpemUpIGdwZV9ibG9jay0+Ci0JCQkJCSAgICAgcmVnaXN0ZXJfY291bnQgKgotCQkJCQkgICAgIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKSAqCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8pKTsKKwlncGVfZXZlbnRfaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKCgoYWNwaV9zaXplKSBncGVfYmxvY2stPgorCQkJCQkgICAgICAgcmVnaXN0ZXJfY291bnQgKgorCQkJCQkgICAgICAgQUNQSV9HUEVfUkVHSVNURVJfV0lEVEgpICoKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdAorCQkJCQkJICAgICBhY3BpX2dwZV9ldmVudF9pbmZvKSk7CiAJaWYgKCFncGVfZXZlbnRfaW5mbykgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgdGhlIGdwZV9ldmVudF9pbmZvIHRhYmxlIikpOworCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgdGhlIEdwZUV2ZW50SW5mbyB0YWJsZSIpKTsKIAkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwogCQlnb3RvIGVycm9yX2V4aXQ7CiAJfQpAQCAtNzgwLDYgKzc4OSw3IEBACiAJdGhpc19ldmVudCA9IGdwZV9ldmVudF9pbmZvOwogCiAJZm9yIChpID0gMDsgaSA8IGdwZV9ibG9jay0+cmVnaXN0ZXJfY291bnQ7IGkrKykgeworCiAJCS8qIEluaXQgdGhlIHJlZ2lzdGVyX2luZm8gZm9yIHRoaXMgR1BFIHJlZ2lzdGVyICg4IEdQRXMpICovCiAKIAkJdGhpc19yZWdpc3Rlci0+YmFzZV9ncGVfbnVtYmVyID0KQEAgLTgzOSwxMCArODQ5LDEwIEBACiAKICAgICAgIGVycm9yX2V4aXQ6CiAJaWYgKGdwZV9yZWdpc3Rlcl9pbmZvKSB7Ci0JCUFDUElfTUVNX0ZSRUUoZ3BlX3JlZ2lzdGVyX2luZm8pOworCQlBQ1BJX0ZSRUUoZ3BlX3JlZ2lzdGVyX2luZm8pOwogCX0KIAlpZiAoZ3BlX2V2ZW50X2luZm8pIHsKLQkJQUNQSV9NRU1fRlJFRShncGVfZXZlbnRfaW5mbyk7CisJCUFDUElfRlJFRShncGVfZXZlbnRfaW5mbyk7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC04NzgsNyArODg4LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gKmdwZV9ibG9jazsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2NyZWF0ZV9ncGVfYmxvY2siKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2NyZWF0ZV9ncGVfYmxvY2spOwogCiAJaWYgKCFyZWdpc3Rlcl9jb3VudCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtODg2LDcgKzg5Niw3IEBACiAKIAkvKiBBbGxvY2F0ZSBhIG5ldyBHUEUgYmxvY2sgKi8KIAotCWdwZV9ibG9jayA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8pKTsKKwlncGVfYmxvY2sgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8pKTsKIAlpZiAoIWdwZV9ibG9jaykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CkBAIC05MDYsNyArOTE2LDcgQEAKIAkgKi8KIAlzdGF0dXMgPSBhY3BpX2V2X2NyZWF0ZV9ncGVfaW5mb19ibG9ja3MoZ3BlX2Jsb2NrKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9NRU1fRlJFRShncGVfYmxvY2spOworCQlBQ1BJX0ZSRUUoZ3BlX2Jsb2NrKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCkBAIC05MTQsNyArOTI0LDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfZXZfaW5zdGFsbF9ncGVfYmxvY2soZ3BlX2Jsb2NrLCBpbnRlcnJ1cHRfbnVtYmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9NRU1fRlJFRShncGVfYmxvY2spOworCQlBQ1BJX0ZSRUUoZ3BlX2Jsb2NrKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCkBAIC05NzEsNyArOTgxLDcgQEAKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAJYWNwaV9uYXRpdmVfdWludCBqOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5pdGlhbGl6ZV9ncGVfYmxvY2siKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luaXRpYWxpemVfZ3BlX2Jsb2NrKTsKIAogCS8qIElnbm9yZSBhIG51bGwgR1BFIGJsb2NrIChlLmcuLCBpZiBubyBHUEUgYmxvY2sgMSBleGlzdHMpICovCiAKQEAgLTEwMTMsNiArMTAyMyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwogCQkJLyogR2V0IHRoZSBpbmZvIGJsb2NrIGZvciB0aGlzIHBhcnRpY3VsYXIgR1BFICovCiAKIAkJCWdwZV9ldmVudF9pbmZvID0KQEAgLTEwNDAsNyArMTA1MSw3IEBACiAKIAlzdGF0dXMgPSBhY3BpX2h3X2VuYWJsZV9ydW50aW1lX2dwZV9ibG9jayhOVUxMLCBncGVfYmxvY2spOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ291bGQgbm90IGVuYWJsZSBHUEVzIGluIGdwZV9ibG9jayAlcCIsCisJCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgZW5hYmxlIEdQRXMgaW4gR3BlQmxvY2sgJXAiLAogCQkJICAgIGdwZV9ibG9jaykpOwogCX0KIApAQCAtMTA2Niw3ICsxMDc3LDcgQEAKIAl1MzIgZ3BlX251bWJlcl9tYXggPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2dwZV9pbml0aWFsaXplIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9ncGVfaW5pdGlhbGl6ZSk7CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTEwOTksNiArMTExMCw3IEBACiAJICogcGFydGljdWxhciBibG9jayBpcyBub3Qgc3VwcG9ydGVkLgogCSAqLwogCWlmIChhY3BpX2dibF9GQURULT5ncGUwX2Jsa19sZW4gJiYgYWNwaV9nYmxfRkFEVC0+eGdwZTBfYmxrLmFkZHJlc3MpIHsKKwogCQkvKiBHUEUgYmxvY2sgMCBleGlzdHMgKGhhcyBib3RoIGxlbmd0aCBhbmQgYWRkcmVzcyA+IDApICovCiAKIAkJcmVnaXN0ZXJfY291bnQwID0gKHUxNikgKGFjcGlfZ2JsX0ZBRFQtPmdwZTBfYmxrX2xlbiAvIDIpOwpAQCAtMTEyMSw2ICsxMTMzLDcgQEAKIAl9CiAKIAlpZiAoYWNwaV9nYmxfRkFEVC0+Z3BlMV9ibGtfbGVuICYmIGFjcGlfZ2JsX0ZBRFQtPnhncGUxX2Jsay5hZGRyZXNzKSB7CisKIAkJLyogR1BFIGJsb2NrIDEgZXhpc3RzIChoYXMgYm90aCBsZW5ndGggYW5kIGFkZHJlc3MgPiAwKSAqLwogCiAJCXJlZ2lzdGVyX2NvdW50MSA9ICh1MTYpIChhY3BpX2dibF9GQURULT5ncGUxX2Jsa19sZW4gLyAyKTsKQEAgLTExNjgsNiArMTE4MSw3IEBACiAJLyogRXhpdCBpZiB0aGVyZSBhcmUgbm8gR1BFIHJlZ2lzdGVycyAqLwogCiAJaWYgKChyZWdpc3Rlcl9jb3VudDAgKyByZWdpc3Rlcl9jb3VudDEpID09IDApIHsKKwogCQkvKiBHUEVzIGFyZSBub3QgcmVxdWlyZWQgYnkgQUNQSSwgdGhpcyBpcyBPSyAqLwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5JVCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZtaXNjLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2bWlzYy5jCmluZGV4IDA5MDliYTYuLjZlZWY0ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldm1pc2MuYwpAQCAtNDksMTIgKzQ5LDEzIEBACiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9FVkVOVFMKIEFDUElfTU9EVUxFX05BTUUoImV2bWlzYyIpCiAKKy8qIE5hbWVzIGZvciBOb3RpZnkoKSB2YWx1ZXMsIHVzZWQgZm9yIGRlYnVnIG91dHB1dCAqLwogI2lmZGVmIEFDUElfREVCVUdfT1VUUFVUCiBzdGF0aWMgY29uc3QgY2hhciAqYWNwaV9ub3RpZnlfdmFsdWVfbmFtZXNbXSA9IHsKIAkiQnVzIENoZWNrIiwKIAkiRGV2aWNlIENoZWNrIiwKIAkiRGV2aWNlIFdha2UiLAotCSJFamVjdCByZXF1ZXN0IiwKKwkiRWplY3QgUmVxdWVzdCIsCiAJIkRldmljZSBDaGVjayBMaWdodCIsCiAJIkZyZXF1ZW5jeSBNaXNtYXRjaCIsCiAJIkJ1cyBNb2RlIE1pc21hdGNoIiwKQEAgLTEyNCw3ICsxMjUsNyBAQAogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqbm90aWZ5X2luZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImV2X3F1ZXVlX25vdGlmeV9yZXF1ZXN0Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGV2X3F1ZXVlX25vdGlmeV9yZXF1ZXN0KTsKIAogCS8qCiAJICogRm9yIHZhbHVlIDMgKEVqZWN0aW9uIFJlcXVlc3QpLCBzb21lIGRldmljZSBtZXRob2QgbWF5IG5lZWQgdG8gYmUgcnVuLgpAQCAtMTUwLDYgKzE1MSw3IEBACiAKIAlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAlpZiAob2JqX2Rlc2MpIHsKKwogCQkvKiBXZSBoYXZlIHRoZSBub3RpZnkgb2JqZWN0LCBHZXQgdGhlIHJpZ2h0IGhhbmRsZXIgKi8KIAogCQlzd2l0Y2ggKG5vZGUtPnR5cGUpIHsKQEAgLTE4NCwxNCArMTg2LDE1IEBACiAJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJCX0KIAotCQlub3RpZnlfaW5mby0+Y29tbW9uLmRhdGFfdHlwZSA9IEFDUElfREVTQ19UWVBFX1NUQVRFX05PVElGWTsKKwkJbm90aWZ5X2luZm8tPmNvbW1vbi5kZXNjcmlwdG9yX3R5cGUgPQorCQkgICAgQUNQSV9ERVNDX1RZUEVfU1RBVEVfTk9USUZZOwogCQlub3RpZnlfaW5mby0+bm90aWZ5Lm5vZGUgPSBub2RlOwogCQlub3RpZnlfaW5mby0+bm90aWZ5LnZhbHVlID0gKHUxNikgbm90aWZ5X3ZhbHVlOwogCQlub3RpZnlfaW5mby0+bm90aWZ5LmhhbmRsZXJfb2JqID0gaGFuZGxlcl9vYmo7CiAKLQkJc3RhdHVzID0gYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uKE9TRF9QUklPUklUWV9ISUdILAotCQkJCQkJICAgICBhY3BpX2V2X25vdGlmeV9kaXNwYXRjaCwKLQkJCQkJCSAgICAgbm90aWZ5X2luZm8pOworCQlzdGF0dXMgPQorCQkgICAgYWNwaV9vc19leGVjdXRlKE9TTF9OT1RJRllfSEFORExFUiwgYWNwaV9ldl9ub3RpZnlfZGlzcGF0Y2gsCisJCQkJICAgIG5vdGlmeV9pbmZvKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlhY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKG5vdGlmeV9pbmZvKTsKIAkJfQpAQCAtMjQwLDYgKzI0Myw3IEBACiAJICogdG8gdGhlIGRldmljZS4KIAkgKi8KIAlpZiAobm90aWZ5X2luZm8tPm5vdGlmeS52YWx1ZSA8PSBBQ1BJX01BWF9TWVNfTk9USUZZKSB7CisKIAkJLyogR2xvYmFsIHN5c3RlbSBub3RpZmljYXRpb24gaGFuZGxlciAqLwogCiAJCWlmIChhY3BpX2dibF9zeXN0ZW1fbm90aWZ5LmhhbmRsZXIpIHsKQEAgLTI5Nyw2ICszMDEsNyBAQAogCS8qIFNpZ25hbCB0aHJlYWRzIHRoYXQgYXJlIHdhaXRpbmcgZm9yIHRoZSBsb2NrICovCiAKIAlpZiAoYWNwaV9nYmxfZ2xvYmFsX2xvY2tfdGhyZWFkX2NvdW50KSB7CisKIAkJLyogU2VuZCBzdWZmaWNpZW50IHVuaXRzIHRvIHRoZSBzZW1hcGhvcmUgKi8KIAogCQlzdGF0dXMgPQpAQCAtMzM1LDE1ICszNDAsMTYgQEAKIAkgKi8KIAlBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0soYWNwaV9nYmxfY29tbW9uX2ZBQ1MuZ2xvYmFsX2xvY2ssIGFjcXVpcmVkKTsKIAlpZiAoYWNxdWlyZWQpIHsKKwogCQkvKiBHb3QgdGhlIGxvY2ssIG5vdyB3YWtlIGFsbCB0aHJlYWRzIHdhaXRpbmcgZm9yIGl0ICovCiAKIAkJYWNwaV9nYmxfZ2xvYmFsX2xvY2tfYWNxdWlyZWQgPSBUUlVFOwogCiAJCS8qIFJ1biB0aGUgR2xvYmFsIExvY2sgdGhyZWFkIHdoaWNoIHdpbGwgc2lnbmFsIGFsbCB3YWl0aW5nIHRocmVhZHMgKi8KIAotCQlzdGF0dXMgPSBhY3BpX29zX3F1ZXVlX2Zvcl9leGVjdXRpb24oT1NEX1BSSU9SSVRZX0hJR0gsCi0JCQkJCQkgICAgIGFjcGlfZXZfZ2xvYmFsX2xvY2tfdGhyZWFkLAotCQkJCQkJICAgICBjb250ZXh0KTsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfb3NfZXhlY3V0ZShPU0xfR0xPQkFMX0xPQ0tfSEFORExFUiwKKwkJCQkgICAgYWNwaV9ldl9nbG9iYWxfbG9ja190aHJlYWQsIGNvbnRleHQpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCiAJCQkJCSJDb3VsZCBub3QgcXVldWUgR2xvYmFsIExvY2sgdGhyZWFkIikpOwpAQCAtMzcxLDcgKzM3Nyw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5pdF9nbG9iYWxfbG9ja19oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9pbml0X2dsb2JhbF9sb2NrX2hhbmRsZXIpOwogCiAJYWNwaV9nYmxfZ2xvYmFsX2xvY2tfcHJlc2VudCA9IFRSVUU7CiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9HTE9CQUwsCkBAIC00MTMsNyArNDE5LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1OCBhY3F1aXJlZCA9IEZBTFNFOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfYWNxdWlyZV9nbG9iYWxfbG9jayIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfYWNxdWlyZV9nbG9iYWxfbG9jayk7CiAKICNpZm5kZWYgQUNQSV9BUFBMSUNBVElPTgogCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgYSBnbG9iYWwgbG9jayAqLwpAQCAtNDM5LDYgKzQ0NSw3IEBACiAKIAlBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0soYWNwaV9nYmxfY29tbW9uX2ZBQ1MuZ2xvYmFsX2xvY2ssIGFjcXVpcmVkKTsKIAlpZiAoYWNxdWlyZWQpIHsKKwogCQkvKiBXZSBnb3QgdGhlIGxvY2sgKi8KIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCkBAIC00NTgsOCArNDY1LDkgQEAKIAkgKiBBY3F1aXJlIHRoZSBnbG9iYWwgbG9jayBzZW1hcGhvcmUgZmlyc3QuCiAJICogU2luY2UgdGhpcyB3YWl0IHdpbGwgYmxvY2ssIHdlIG11c3QgcmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIKIAkgKi8KLQlzdGF0dXMgPSBhY3BpX2V4X3N5c3RlbV93YWl0X3NlbWFwaG9yZShhY3BpX2dibF9nbG9iYWxfbG9ja19zZW1hcGhvcmUsCi0JCQkJCSAgICAgICB0aW1lb3V0KTsKKwlzdGF0dXMgPQorCSAgICBhY3BpX2V4X3N5c3RlbV93YWl0X3NlbWFwaG9yZShhY3BpX2dibF9nbG9iYWxfbG9ja19zZW1hcGhvcmUsCisJCQkJCSAgdGltZW91dCk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTQ4MCw3ICs0ODgsNyBAQAogCXU4IHBlbmRpbmcgPSBGQUxTRTsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X3JlbGVhc2VfZ2xvYmFsX2xvY2siKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3JlbGVhc2VfZ2xvYmFsX2xvY2spOwogCiAJaWYgKCFhY3BpX2dibF9nbG9iYWxfbG9ja190aHJlYWRfY291bnQpIHsKIAkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLApAQCAtNDkyLDYgKzUwMCw3IEBACiAKIAlhY3BpX2dibF9nbG9iYWxfbG9ja190aHJlYWRfY291bnQtLTsKIAlpZiAoYWNwaV9nYmxfZ2xvYmFsX2xvY2tfdGhyZWFkX2NvdW50KSB7CisKIAkJLyogVGhlcmUgYXJlIHN0aWxsIHNvbWUgdGhyZWFkcyBob2xkaW5nIHRoZSBsb2NrLCBjYW5ub3QgcmVsZWFzZSAqLwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC01MzMsNyArNTQyLDcgQEAKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfdGVybWluYXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl90ZXJtaW5hdGUpOwogCiAJaWYgKGFjcGlfZ2JsX2V2ZW50c19pbml0aWFsaXplZCkgewogCQkvKgpAQCAtNTczLDcgKzU4Miw3IEBACiAJaWYgKGFjcGlfZ2JsX29yaWdpbmFsX21vZGUgPT0gQUNQSV9TWVNfTU9ERV9MRUdBQ1kpIHsKIAkJc3RhdHVzID0gYWNwaV9kaXNhYmxlKCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiYWNwaV9kaXNhYmxlIGZhaWxlZCIpKTsKKwkJCUFDUElfV0FSTklORygoQUVfSU5GTywgIkFjcGlEaXNhYmxlIGZhaWxlZCIpKTsKIAkJfQogCX0KIAlyZXR1cm5fVk9JRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZyZWdpb24uYwppbmRleCA2ZGE1OGU3Li4wOTRhMTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2cmVnaW9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJlZ2lvbi5jCkBAIC04Myw3ICs4Myw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2luc3RhbGxfcmVnaW9uX2hhbmRsZXJzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9pbnN0YWxsX3JlZ2lvbl9oYW5kbGVycyk7CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9pbml0aWFsaXplX29wX3JlZ2lvbnMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luaXRpYWxpemVfb3BfcmVnaW9ucyk7CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTE2NCw2ICsxNjQsNyBAQAogCSAqIFJ1biB0aGUgX1JFRyBtZXRob2RzIGZvciBvcF9yZWdpb25zIGluIGVhY2ggZGVmYXVsdCBhZGRyZXNzIHNwYWNlCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEFDUElfTlVNX0RFRkFVTFRfU1BBQ0VTOyBpKyspIHsKKwogCQkvKiBUQkQ6IE1ha2Ugc3VyZSBoYW5kbGVyIGlzIHRoZSBERUZBVUxUIGhhbmRsZXIsIG90aGVyd2lzZQogCQkgKiBfUkVHIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gcnVuLgogCQkgKi8KQEAgLTE5MiwxMiArMTkzLDEyIEBACiBhY3BpX3N0YXR1cwogYWNwaV9ldl9leGVjdXRlX3JlZ19tZXRob2QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVnaW9uX29iaiwgdTMyIGZ1bmN0aW9uKQogewotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcGFyYW1zWzNdOworCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqYXJnc1szXTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqMjsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9leGVjdXRlX3JlZ19tZXRob2QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2V4ZWN1dGVfcmVnX21ldGhvZCk7CiAKIAlyZWdpb25fb2JqMiA9IGFjcGlfbnNfZ2V0X3NlY29uZGFyeV9vYmplY3QocmVnaW9uX29iaik7CiAJaWYgKCFyZWdpb25fb2JqMikgewpAQCAtMjA4LDQ4ICsyMDksNjAgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAl9CiAKLQkvKgotCSAqIFRoZSBfUkVHIG1ldGhvZCBoYXMgdHdvIGFyZ3VtZW50czoKLQkgKgotCSAqIEFyZzAsIEludGVnZXI6IE9wZXJhdGlvbiByZWdpb24gc3BhY2UgSUQKLQkgKiAgICAgICAgICBTYW1lIHZhbHVlIGFzIHJlZ2lvbl9vYmotPlJlZ2lvbi5zcGFjZV9pZAotCSAqIEFyZzEsIEludGVnZXI6IGNvbm5lY3Rpb24gc3RhdHVzCi0JICogICAgICAgICAgMSBmb3IgY29ubmVjdGluZyB0aGUgaGFuZGxlciwKLQkgKiAgICAgICAgICAwIGZvciBkaXNjb25uZWN0aW5nIHRoZSBoYW5kbGVyCi0JICogICAgICAgICAgUGFzc2VkIGFzIGEgcGFyYW1ldGVyCi0JICovCi0JcGFyYW1zWzBdID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9JTlRFR0VSKTsKLQlpZiAoIXBhcmFtc1swXSkgeworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBldmFsdWF0aW9uIGluZm9ybWF0aW9uIGJsb2NrICovCisKKwlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8pKTsKKwlpZiAoIWluZm8pIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQogCi0JcGFyYW1zWzFdID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9JTlRFR0VSKTsKLQlpZiAoIXBhcmFtc1sxXSkgeworCWluZm8tPnByZWZpeF9ub2RlID0gcmVnaW9uX29iajItPmV4dHJhLm1ldGhvZF9SRUc7CisJaW5mby0+cGF0aG5hbWUgPSBOVUxMOworCWluZm8tPnBhcmFtZXRlcnMgPSBhcmdzOworCWluZm8tPnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOworCWluZm8tPmZsYWdzID0gQUNQSV9JR05PUkVfUkVUVVJOX1ZBTFVFOworCisJLyoKKwkgKiBUaGUgX1JFRyBtZXRob2QgaGFzIHR3byBhcmd1bWVudHM6CisJICoKKwkgKiBBcmcwIC0gSW50ZWdlcjoKKwkgKiAgT3BlcmF0aW9uIHJlZ2lvbiBzcGFjZSBJRCBTYW1lIHZhbHVlIGFzIHJlZ2lvbl9vYmotPlJlZ2lvbi5zcGFjZV9pZAorCSAqCisJICogQXJnMSAtIEludGVnZXI6CisJICogIGNvbm5lY3Rpb24gc3RhdHVzIDEgZm9yIGNvbm5lY3RpbmcgdGhlIGhhbmRsZXIsIDAgZm9yIGRpc2Nvbm5lY3RpbmcKKwkgKiAgdGhlIGhhbmRsZXIgKFBhc3NlZCBhcyBhIHBhcmFtZXRlcikKKwkgKi8KKwlhcmdzWzBdID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9JTlRFR0VSKTsKKwlpZiAoIWFyZ3NbMF0pIHsKIAkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCisJYXJnc1sxXSA9IGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX1RZUEVfSU5URUdFUik7CisJaWYgKCFhcmdzWzFdKSB7CisJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJZ290byBjbGVhbnVwMjsKIAl9CiAKIAkvKiBTZXR1cCB0aGUgcGFyYW1ldGVyIG9iamVjdHMgKi8KIAotCXBhcmFtc1swXS0+aW50ZWdlci52YWx1ZSA9IHJlZ2lvbl9vYmotPnJlZ2lvbi5zcGFjZV9pZDsKLQlwYXJhbXNbMV0tPmludGVnZXIudmFsdWUgPSBmdW5jdGlvbjsKLQlwYXJhbXNbMl0gPSBOVUxMOwotCi0JaW5mby5ub2RlID0gcmVnaW9uX29iajItPmV4dHJhLm1ldGhvZF9SRUc7Ci0JaW5mby5wYXJhbWV0ZXJzID0gcGFyYW1zOwotCWluZm8ucGFyYW1ldGVyX3R5cGUgPSBBQ1BJX1BBUkFNX0FSR1M7CisJYXJnc1swXS0+aW50ZWdlci52YWx1ZSA9IHJlZ2lvbl9vYmotPnJlZ2lvbi5zcGFjZV9pZDsKKwlhcmdzWzFdLT5pbnRlZ2VyLnZhbHVlID0gZnVuY3Rpb247CisJYXJnc1syXSA9IE5VTEw7CiAKIAkvKiBFeGVjdXRlIHRoZSBtZXRob2QsIG5vIHJldHVybiB2YWx1ZSAqLwogCiAJQUNQSV9ERUJVR19FWEVDKGFjcGlfdXRfZGlzcGxheV9pbml0X3BhdGhuYW1lCi0JCQkoQUNQSV9UWVBFX01FVEhPRCwgaW5mby5ub2RlLCBOVUxMKSk7Ci0Jc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZV9ieV9oYW5kbGUoJmluZm8pOworCQkJKEFDUElfVFlQRV9NRVRIT0QsIGluZm8tPnByZWZpeF9ub2RlLCBOVUxMKSk7CiAKLQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UocGFyYW1zWzFdKTsKKwlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlKGluZm8pOworCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShhcmdzWzFdKTsKIAotICAgICAgY2xlYW51cDoKLQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UocGFyYW1zWzBdKTsKKyAgICAgIGNsZWFudXAyOgorCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShhcmdzWzBdKTsKIAorICAgICAgY2xlYW51cDE6CisJQUNQSV9GUkVFKGluZm8pOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC0yNjEsNyArMjc0LDggQEAKICAqICAgICAgICAgICAgICBGdW5jdGlvbiAgICAgICAgICAgIC0gUmVhZCBvciBXcml0ZSBvcGVyYXRpb24KICAqICAgICAgICAgICAgICBBZGRyZXNzICAgICAgICAgICAgIC0gV2hlcmUgaW4gdGhlIHNwYWNlIHRvIHJlYWQgb3Igd3JpdGUKICAqICAgICAgICAgICAgICBiaXRfd2lkdGggICAgICAgICAgIC0gRmllbGQgd2lkdGggaW4gYml0cyAoOCwgMTYsIDMyLCBvciA2NCkKLSAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBpbiBvciBvdXQgdmFsdWUKKyAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBpbiBvciBvdXQgdmFsdWUsIG11c3QgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbCA2NC1iaXQgYWNwaV9pbnRlZ2VyCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTI3NCw3ICsyODgsNyBAQAogYWNwaV9ldl9hZGRyZXNzX3NwYWNlX2Rpc3BhdGNoKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJlZ2lvbl9vYmosCiAJCQkgICAgICAgdTMyIGZ1bmN0aW9uLAogCQkJICAgICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkJICAgICAgIHUzMiBiaXRfd2lkdGgsIHZvaWQgKnZhbHVlKQorCQkJICAgICAgIHUzMiBiaXRfd2lkdGgsIGFjcGlfaW50ZWdlciAqIHZhbHVlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX3N0YXR1cyBzdGF0dXMyOwpAQCAtMjg0LDcgKzI5OCw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVnaW9uX29iajI7CiAJdm9pZCAqcmVnaW9uX2NvbnRleHQgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfYWRkcmVzc19zcGFjZV9kaXNwYXRjaCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfYWRkcmVzc19zcGFjZV9kaXNwYXRjaCk7CiAKIAlyZWdpb25fb2JqMiA9IGFjcGlfbnNfZ2V0X3NlY29uZGFyeV9vYmplY3QocmVnaW9uX29iaik7CiAJaWYgKCFyZWdpb25fb2JqMikgewpAQCAtMzE1LDYgKzMyOSw3IEBACiAJCSAqLwogCQlyZWdpb25fc2V0dXAgPSBoYW5kbGVyX2Rlc2MtPmFkZHJlc3Nfc3BhY2Uuc2V0dXA7CiAJCWlmICghcmVnaW9uX3NldHVwKSB7CisKIAkJCS8qIE5vIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGV4aXQgd2l0aCBlcnJvciAqLwogCiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLApAQCAtMzYxLDkgKzM3NiwxMCBAQAogCQkJcmVnaW9uX29iai0+cmVnaW9uLmZsYWdzIHw9IEFPUE9CSl9TRVRVUF9DT01QTEVURTsKIAogCQkJaWYgKHJlZ2lvbl9vYmoyLT5leHRyYS5yZWdpb25fY29udGV4dCkgeworCiAJCQkJLyogVGhlIGhhbmRsZXIgZm9yIHRoaXMgcmVnaW9uIHdhcyBhbHJlYWR5IGluc3RhbGxlZCAqLwogCi0JCQkJQUNQSV9NRU1fRlJFRShyZWdpb25fY29udGV4dCk7CisJCQkJQUNQSV9GUkVFKHJlZ2lvbl9jb250ZXh0KTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkgKiBTYXZlIHRoZSByZXR1cm5lZCBjb250ZXh0IGZvciB1c2UgaW4gYWxsIGFjY2Vzc2VzIHRvCkBAIC0zODYsOSArNDAyLDggQEAKIAkJCSAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUocmVnaW9uX29iai0+cmVnaW9uLgogCQkJCQkJICBzcGFjZV9pZCkpKTsKIAotCWlmICghCi0JICAgIChoYW5kbGVyX2Rlc2MtPmFkZHJlc3Nfc3BhY2UuCi0JICAgICBoZmxhZ3MgJiBBQ1BJX0FERFJfSEFORExFUl9ERUZBVUxUX0lOU1RBTExFRCkpIHsKKwlpZiAoIShoYW5kbGVyX2Rlc2MtPmFkZHJlc3Nfc3BhY2UuaGFuZGxlcl9mbGFncyAmCisJICAgICAgQUNQSV9BRERSX0hBTkRMRVJfREVGQVVMVF9JTlNUQUxMRUQpKSB7CiAJCS8qCiAJCSAqIEZvciBoYW5kbGVycyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IChzdXBwbGllZCkgaGFuZGxlcnMsIHdlIG11c3QKIAkJICogZXhpdCB0aGUgaW50ZXJwcmV0ZXIgYmVjYXVzZSB0aGUgaGFuZGxlciAqbWlnaHQqIGJsb2NrIC0tIHdlIGRvbid0CkBAIC00MDksOSArNDI0LDggQEAKIAkJCQkJCQlzcGFjZV9pZCkpKTsKIAl9CiAKLQlpZiAoIQotCSAgICAoaGFuZGxlcl9kZXNjLT5hZGRyZXNzX3NwYWNlLgotCSAgICAgaGZsYWdzICYgQUNQSV9BRERSX0hBTkRMRVJfREVGQVVMVF9JTlNUQUxMRUQpKSB7CisJaWYgKCEoaGFuZGxlcl9kZXNjLT5hZGRyZXNzX3NwYWNlLmhhbmRsZXJfZmxhZ3MgJgorCSAgICAgIEFDUElfQUREUl9IQU5ETEVSX0RFRkFVTFRfSU5TVEFMTEVEKSkgewogCQkvKgogCQkgKiBXZSBqdXN0IHJldHVybmVkIGZyb20gYSBub24tZGVmYXVsdCBoYW5kbGVyLCB3ZSBtdXN0IHJlLWVudGVyIHRoZQogCQkgKiBpbnRlcnByZXRlcgpAQCAtNDUxLDcgKzQ2NSw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVnaW9uX29iajI7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfZGV0YWNoX3JlZ2lvbiIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZGV0YWNoX3JlZ2lvbik7CiAKIAlyZWdpb25fb2JqMiA9IGFjcGlfbnNfZ2V0X3NlY29uZGFyeV9vYmplY3QocmVnaW9uX29iaik7CiAJaWYgKCFyZWdpb25fb2JqMikgewpAQCAtNDYzLDYgKzQ3Nyw3IEBACiAKIAloYW5kbGVyX29iaiA9IHJlZ2lvbl9vYmotPnJlZ2lvbi5oYW5kbGVyOwogCWlmICghaGFuZGxlcl9vYmopIHsKKwogCQkvKiBUaGlzIHJlZ2lvbiBoYXMgbm8gaGFuZGxlciwgYWxsIGRvbmUgKi8KIAogCQlyZXR1cm5fVk9JRDsKQEAgLTQ3NCw2ICs0ODksNyBAQAogCWxhc3Rfb2JqX3B0ciA9ICZoYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5yZWdpb25fbGlzdDsKIAogCXdoaWxlIChvYmpfZGVzYykgeworCiAJCS8qIElzIHRoaXMgdGhlIGNvcnJlY3QgUmVnaW9uPyAqLwogCiAJCWlmIChvYmpfZGVzYyA9PSByZWdpb25fb2JqKSB7CkBAIC01ODMsNyArNTk5LDcgQEAKIAkJICAgICAgdTggYWNwaV9uc19pc19sb2NrZWQpCiB7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9hdHRhY2hfcmVnaW9uIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9hdHRhY2hfcmVnaW9uKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfT1BSRUdJT04sCiAJCQkgICJBZGRpbmcgUmVnaW9uIFslNC40c10gJXAgdG8gYWRkcmVzcyBoYW5kbGVyICVwIFslc11cbiIsCkBAIC02MzYsNyArNjUyLDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImV2X2luc3RhbGxfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fTkFNRShldl9pbnN0YWxsX2hhbmRsZXIpOwogCiAJaGFuZGxlcl9vYmogPSAodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKWNvbnRleHQ7CiAKQEAgLTY2Niw2ICs2ODIsNyBAQAogCiAJb2JqX2Rlc2MgPSBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3Qobm9kZSk7CiAJaWYgKCFvYmpfZGVzYykgeworCiAJCS8qIE5vIG9iamVjdCwganVzdCBleGl0ICovCiAKIAkJcmV0dXJuIChBRV9PSyk7CkBAIC02NzQsMTAgKzY5MSwxMiBAQAogCS8qIERldmljZXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50IHRoYW4gcmVnaW9ucyAqLwogCiAJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB7CisKIAkJLyogQ2hlY2sgaWYgdGhpcyBEZXZpY2UgYWxyZWFkeSBoYXMgYSBoYW5kbGVyIGZvciB0aGlzIGFkZHJlc3Mgc3BhY2UgKi8KIAogCQluZXh0X2hhbmRsZXJfb2JqID0gb2JqX2Rlc2MtPmRldmljZS5oYW5kbGVyOwogCQl3aGlsZSAobmV4dF9oYW5kbGVyX29iaikgeworCiAJCQkvKiBGb3VuZCBhIGhhbmRsZXIsIGlzIGl0IGZvciB0aGUgc2FtZSBhZGRyZXNzIHNwYWNlPyAqLwogCiAJCQlpZiAobmV4dF9oYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5zcGFjZV9pZCA9PQpAQCAtNzY0LDkgKzc4Myw5IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaGFuZGxlcl9vYmo7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfb2JqZWN0X3R5cGUgdHlwZTsKLQl1MTYgZmxhZ3MgPSAwOworCXU4IGZsYWdzID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2luc3RhbGxfc3BhY2VfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfaW5zdGFsbF9zcGFjZV9oYW5kbGVyKTsKIAogCS8qCiAJICogVGhpcyByZWdpc3RyYXRpb24gaXMgdmFsaWQgZm9yIG9ubHkgdGhlIHR5cGVzIGJlbG93CkBAIC04MzksNiArODU4LDcgQEAKIAkJLyogV2FsayB0aGUgaGFuZGxlciBsaXN0IGZvciB0aGlzIGRldmljZSAqLwogCiAJCXdoaWxlIChoYW5kbGVyX29iaikgeworCiAJCQkvKiBTYW1lIHNwYWNlX2lkIGluZGljYXRlcyBhIGhhbmRsZXIgYWxyZWFkeSBpbnN0YWxsZWQgKi8KIAogCQkJaWYgKGhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLnNwYWNlX2lkID09IHNwYWNlX2lkKSB7CkBAIC05MjEsNyArOTQxLDcgQEAKIAkvKiBJbml0IGhhbmRsZXIgb2JqICovCiAKIAloYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5zcGFjZV9pZCA9ICh1OCkgc3BhY2VfaWQ7Ci0JaGFuZGxlcl9vYmotPmFkZHJlc3Nfc3BhY2UuaGZsYWdzID0gZmxhZ3M7CisJaGFuZGxlcl9vYmotPmFkZHJlc3Nfc3BhY2UuaGFuZGxlcl9mbGFncyA9IGZsYWdzOwogCWhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLnJlZ2lvbl9saXN0ID0gTlVMTDsKIAloYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5ub2RlID0gbm9kZTsKIAloYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5oYW5kbGVyID0gaGFuZGxlcjsKQEAgLTk3OSw3ICs5OTksNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2V4ZWN1dGVfcmVnX21ldGhvZHMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2V4ZWN1dGVfcmVnX21ldGhvZHMpOwogCiAJLyoKIAkgKiBSdW4gYWxsIF9SRUcgbWV0aG9kcyBmb3IgYWxsIE9wZXJhdGlvbiBSZWdpb25zIGZvciB0aGlzCkBAIC0xMDAxLDcgKzEwMjEsNyBAQAogICoKICAqIFBBUkFNRVRFUlM6ICB3YWxrX25hbWVzcGFjZSBjYWxsYmFjawogICoKLSAqIERFU0NSSVBUSU9OOiBSdW4gX1JFZyBtZXRob2QgZm9yIHJlZ2lvbiBvYmplY3RzIG9mIHRoZSByZXF1ZXN0ZWQgc3BhY2VfaUQKKyAqIERFU0NSSVBUSU9OOiBSdW4gX1JFRyBtZXRob2QgZm9yIHJlZ2lvbiBvYmplY3RzIG9mIHRoZSByZXF1ZXN0ZWQgc3BhY2VfaUQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xMDM1LDYgKzEwNTUsNyBAQAogCiAJb2JqX2Rlc2MgPSBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3Qobm9kZSk7CiAJaWYgKCFvYmpfZGVzYykgeworCiAJCS8qIE5vIG9iamVjdCwganVzdCBleGl0ICovCiAKIAkJcmV0dXJuIChBRV9PSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2cmduaW5pLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2cmduaW5pLmMKaW5kZXggYmFlZDhjMS4uNWIzYzdhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJnbmluaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZyZ25pbmkuYwpAQCAtNzEsMTEgKzcxLDIyIEBACiAJICAgICh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICopaGFuZGxlOwogCXN0cnVjdCBhY3BpX21lbV9zcGFjZV9jb250ZXh0ICpsb2NhbF9yZWdpb25fY29udGV4dDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X3N5c3RlbV9tZW1vcnlfcmVnaW9uX3NldHVwIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9zeXN0ZW1fbWVtb3J5X3JlZ2lvbl9zZXR1cCk7CiAKIAlpZiAoZnVuY3Rpb24gPT0gQUNQSV9SRUdJT05fREVBQ1RJVkFURSkgewogCQlpZiAoKnJlZ2lvbl9jb250ZXh0KSB7Ci0JCQlBQ1BJX01FTV9GUkVFKCpyZWdpb25fY29udGV4dCk7CisJCQlsb2NhbF9yZWdpb25fY29udGV4dCA9CisJCQkgICAgKHN0cnVjdCBhY3BpX21lbV9zcGFjZV9jb250ZXh0ICopKnJlZ2lvbl9jb250ZXh0OworCisJCQkvKiBEZWxldGUgYSBjYWNoZWQgbWFwcGluZyBpZiBwcmVzZW50ICovCisKKwkJCWlmIChsb2NhbF9yZWdpb25fY29udGV4dC0+bWFwcGVkX2xlbmd0aCkgeworCQkJCWFjcGlfb3NfdW5tYXBfbWVtb3J5KGxvY2FsX3JlZ2lvbl9jb250ZXh0LT4KKwkJCQkJCSAgICAgbWFwcGVkX2xvZ2ljYWxfYWRkcmVzcywKKwkJCQkJCSAgICAgbG9jYWxfcmVnaW9uX2NvbnRleHQtPgorCQkJCQkJICAgICBtYXBwZWRfbGVuZ3RoKTsKKwkJCX0KKwkJCUFDUElfRlJFRShsb2NhbF9yZWdpb25fY29udGV4dCk7CiAJCQkqcmVnaW9uX2NvbnRleHQgPSBOVUxMOwogCQl9CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC04NCw3ICs5NSw3IEBACiAJLyogQ3JlYXRlIGEgbmV3IGNvbnRleHQgKi8KIAogCWxvY2FsX3JlZ2lvbl9jb250ZXh0ID0KLQkgICAgQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV9tZW1fc3BhY2VfY29udGV4dCkpOworCSAgICBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfbWVtX3NwYWNlX2NvbnRleHQpKTsKIAlpZiAoIShsb2NhbF9yZWdpb25fY29udGV4dCkpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQpAQCAtMTE4LDcgKzEyOSw3IEBACiAJCQkgICAgICB1MzIgZnVuY3Rpb24sCiAJCQkgICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKipyZWdpb25fY29udGV4dCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9pb19zcGFjZV9yZWdpb25fc2V0dXAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2lvX3NwYWNlX3JlZ2lvbl9zZXR1cCk7CiAKIAlpZiAoZnVuY3Rpb24gPT0gQUNQSV9SRUdJT05fREVBQ1RJVkFURSkgewogCQkqcmVnaW9uX2NvbnRleHQgPSBOVUxMOwpAQCAtMTYxLDcgKzE3Miw3IEBACiAJICAgICh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICopaGFuZGxlOwogCXN0cnVjdCBhY3BpX2RldmljZV9pZCBvYmplY3RfaElEOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfcGNpX2NvbmZpZ19yZWdpb25fc2V0dXAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3BjaV9jb25maWdfcmVnaW9uX3NldHVwKTsKIAogCWhhbmRsZXJfb2JqID0gcmVnaW9uX29iai0+cmVnaW9uLmhhbmRsZXI7CiAJaWYgKCFoYW5kbGVyX29iaikgewpAQCAtMTc4LDcgKzE4OSw3IEBACiAJKnJlZ2lvbl9jb250ZXh0ID0gTlVMTDsKIAlpZiAoZnVuY3Rpb24gPT0gQUNQSV9SRUdJT05fREVBQ1RJVkFURSkgewogCQlpZiAocGNpX2lkKSB7Ci0JCQlBQ1BJX01FTV9GUkVFKHBjaV9pZCk7CisJCQlBQ1BJX0ZSRUUocGNpX2lkKTsKIAkJfQogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0xOTksNiArMjEwLDcgQEAKIAkgKiBoYW5kbGVycyB3aXRoIHRoYXQgZGV2aWNlLgogCSAqLwogCWlmIChoYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5ub2RlID09IGFjcGlfZ2JsX3Jvb3Rfbm9kZSkgeworCiAJCS8qIFN0YXJ0IHNlYXJjaCBmcm9tIHRoZSBwYXJlbnQgb2JqZWN0ICovCiAKIAkJcGNpX3Jvb3Rfbm9kZSA9IHBhcmVudF9ub2RlOwpAQCAtMjIwLDYgKzIzMiw3IEBACiAJCQkJCVBDSV9FWFBSRVNTX1JPT1RfSElEX1NUUklORywKIAkJCQkJc2l6ZW9mKFBDSV9FWFBSRVNTX1JPT1RfSElEX1NUUklORykpKSkpCiAJCQkJeworCiAJCQkJCS8qIEluc3RhbGwgYSBoYW5kbGVyIGZvciB0aGlzIFBDSSByb290IGJyaWRnZSAqLwogCiAJCQkJCXN0YXR1cyA9CkBAIC0yMzUsNyArMjQ4LDcgQEAKIAkJCQkJCX0gZWxzZSB7CiAJCQkJCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sCiAJCQkJCQkJCQlzdGF0dXMsCi0JCQkJCQkJCQkiQ291bGQgbm90IGluc3RhbGwgcGNpX2NvbmZpZyBoYW5kbGVyIGZvciBSb290IEJyaWRnZSAlNC40cyIsCisJCQkJCQkJCQkiQ291bGQgbm90IGluc3RhbGwgUGNpQ29uZmlnIGhhbmRsZXIgZm9yIFJvb3QgQnJpZGdlICU0LjRzIiwKIAkJCQkJCQkJCWFjcGlfdXRfZ2V0X25vZGVfbmFtZQogCQkJCQkJCQkJKHBjaV9yb290X25vZGUpKSk7CiAJCQkJCQl9CkBAIC0yNjIsNyArMjc1LDcgQEAKIAogCS8qIFJlZ2lvbiBpcyBzdGlsbCBub3QgaW5pdGlhbGl6ZWQuIENyZWF0ZSBhIG5ldyBjb250ZXh0ICovCiAKLQlwY2lfaWQgPSBBQ1BJX01FTV9DQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9pZCkpOworCXBjaV9pZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9wY2lfaWQpKTsKIAlpZiAoIXBjaV9pZCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CkBAIC0zMzcsNyArMzUwLDcgQEAKIAkJCSAgICAgdTMyIGZ1bmN0aW9uLAogCQkJICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKipyZWdpb25fY29udGV4dCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9wY2lfYmFyX3JlZ2lvbl9zZXR1cCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfcGNpX2Jhcl9yZWdpb25fc2V0dXApOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KQEAgLTM2NCw3ICszNzcsNyBAQAogCQkJICB1MzIgZnVuY3Rpb24sCiAJCQkgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqKnJlZ2lvbl9jb250ZXh0KQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2Ntb3NfcmVnaW9uX3NldHVwIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9jbW9zX3JlZ2lvbl9zZXR1cCk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQpAQCAtMzg5LDcgKzQwMiw3IEBACiAJCQkgICAgIHUzMiBmdW5jdGlvbiwKIAkJCSAgICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICoqcmVnaW9uX2NvbnRleHQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfZGVmYXVsdF9yZWdpb25fc2V0dXAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2RlZmF1bHRfcmVnaW9uX3NldHVwKTsKIAogCWlmIChmdW5jdGlvbiA9PSBBQ1BJX1JFR0lPTl9ERUFDVElWQVRFKSB7CiAJCSpyZWdpb25fY29udGV4dCA9IE5VTEw7CkBAIC00MzUsNyArNDQ4LDcgQEAKIAlhY3BpX25hbWUgKnJlZ19uYW1lX3B0ciA9IChhY3BpX25hbWUgKikgTUVUSE9EX05BTUVfX1JFRzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqMjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJldl9pbml0aWFsaXplX3JlZ2lvbiIsIGFjcGlfbnNfbG9ja2VkKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMihldl9pbml0aWFsaXplX3JlZ2lvbiwgYWNwaV9uc19sb2NrZWQpOwogCiAJaWYgKCFyZWdpb25fb2JqKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTQ2Miw4ICs0NzUsOSBAQAogCiAJLyogRmluZCBhbnkgIl9SRUciIG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWdpb24gZGVmaW5pdGlvbiAqLwogCi0Jc3RhdHVzID0gYWNwaV9uc19zZWFyY2hfbm9kZSgqcmVnX25hbWVfcHRyLCBub2RlLAotCQkJCSAgICAgQUNQSV9UWVBFX01FVEhPRCwgJm1ldGhvZF9ub2RlKTsKKwlzdGF0dXMgPQorCSAgICBhY3BpX25zX3NlYXJjaF9vbmVfc2NvcGUoKnJlZ19uYW1lX3B0ciwgbm9kZSwgQUNQSV9UWVBFX01FVEhPRCwKKwkJCQkgICAgICZtZXRob2Rfbm9kZSk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCS8qCiAJCSAqIFRoZSBfUkVHIG1ldGhvZCBpcyBvcHRpb25hbCBhbmQgdGhlcmUgY2FuIGJlIG9ubHkgb25lIHBlciByZWdpb24KQEAgLTQ3OCwxMSArNDkyLDEzIEBACiAJICogaWU6IGFjcGlfZ2JsX3Jvb3Rfbm9kZS0+cGFyZW50X2VudHJ5IGJlaW5nIHNldCB0byBOVUxMCiAJICovCiAJd2hpbGUgKG5vZGUpIHsKKwogCQkvKiBDaGVjayB0byBzZWUgaWYgYSBoYW5kbGVyIGV4aXN0cyAqLwogCiAJCWhhbmRsZXJfb2JqID0gTlVMTDsKIAkJb2JqX2Rlc2MgPSBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3Qobm9kZSk7CiAJCWlmIChvYmpfZGVzYykgeworCiAJCQkvKiBDYW4gb25seSBiZSBhIGhhbmRsZXIgaWYgdGhlIG9iamVjdCBleGlzdHMgKi8KIAogCQkJc3dpdGNoIChub2RlLT50eXBlKSB7CkBAIC01MDcsMTAgKzUyMywxMiBAQAogCQkJfQogCiAJCQl3aGlsZSAoaGFuZGxlcl9vYmopIHsKKwogCQkJCS8qIElzIHRoaXMgaGFuZGxlciBvZiB0aGUgY29ycmVjdCB0eXBlPyAqLwogCiAJCQkJaWYgKGhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLnNwYWNlX2lkID09CiAJCQkJICAgIHNwYWNlX2lkKSB7CisKIAkJCQkJLyogRm91bmQgY29ycmVjdCBoYW5kbGVyICovCiAKIAkJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9PUFJFR0lPTiwKQEAgLTU3MSw3ICs1ODksNyBAQAogCS8qIElmIHdlIGdldCBoZXJlLCB0aGVyZSBpcyBubyBoYW5kbGVyIGZvciB0aGlzIHJlZ2lvbiAqLwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9PUFJFR0lPTiwKLQkJCSAgIk5vIGhhbmRsZXIgZm9yIHJlZ2lvbl90eXBlICVzKCVYKSAocmVnaW9uX29iaiAlcClcbiIsCisJCQkgICJObyBoYW5kbGVyIGZvciBSZWdpb25UeXBlICVzKCVYKSAoUmVnaW9uT2JqICVwKVxuIiwKIAkJCSAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUoc3BhY2VfaWQpLCBzcGFjZV9pZCwKIAkJCSAgcmVnaW9uX29iaikpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2c2NpLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2c2NpLmMKaW5kZXggOWE2MjIxNi4uODEwNjIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnNjaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZzY2kuYwpAQCAtNjksNyArNjksNyBAQAogCXN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICpncGVfeHJ1cHRfbGlzdCA9IGNvbnRleHQ7CiAJdTMyIGludGVycnVwdF9oYW5kbGVkID0gQUNQSV9JTlRFUlJVUFRfTk9UX0hBTkRMRUQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9zY2lfeHJ1cHRfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2NpX3hydXB0X2hhbmRsZXIpOwogCiAJLyoKIAkgKiBXZSBhcmUgZ3VhcmFudGVlZCBieSB0aGUgQUNQSSBDQSBpbml0aWFsaXphdGlvbi9zaHV0ZG93biBjb2RlIHRoYXQKQEAgLTEwOCw3ICsxMDgsNyBAQAogCXN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICpncGVfeHJ1cHRfbGlzdCA9IGNvbnRleHQ7CiAJdTMyIGludGVycnVwdF9oYW5kbGVkID0gQUNQSV9JTlRFUlJVUFRfTk9UX0hBTkRMRUQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9ncGVfeHJ1cHRfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZ3BlX3hydXB0X2hhbmRsZXIpOwogCiAJLyoKIAkgKiBXZSBhcmUgZ3VhcmFudGVlZCBieSB0aGUgQUNQSSBDQSBpbml0aWFsaXphdGlvbi9zaHV0ZG93biBjb2RlIHRoYXQKQEAgLTE0MCw3ICsxNDAsNyBAQAogewogCXUzMiBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2luc3RhbGxfc2NpX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luc3RhbGxfc2NpX2hhbmRsZXIpOwogCiAJc3RhdHVzID0gYWNwaV9vc19pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKCh1MzIpIGFjcGlfZ2JsX0ZBRFQtPnNjaV9pbnQsCiAJCQkJCQkgICBhY3BpX2V2X3NjaV94cnVwdF9oYW5kbGVyLApAQCAtMTcxLDcgKzE3MSw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfcmVtb3ZlX3NjaV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9yZW1vdmVfc2NpX2hhbmRsZXIpOwogCiAJLyogSnVzdCBsZXQgdGhlIE9TIHJlbW92ZSB0aGUgaGFuZGxlciBhbmQgZGlzYWJsZSB0aGUgbGV2ZWwgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnhmYWNlLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZhY2UuYwppbmRleCBiMzhiMzlkLi43NmMzNGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZhY2UuYwpAQCAtNDEsOCArNDEsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KICNpbmNsdWRlIDxhY3BpL2FjZXZlbnRzLmg+CkBAIC02OCw3ICs2Niw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIpOwogCiAJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0VWRU5UUyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC05MCw2ICs4OCw4IEBACiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0VWRU5UUyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIpCiAjZW5kaWYJCQkJLyogIEFDUElfRlVUVVJFX1VTQUdFICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA3LDE0ICsxMDcsMTMgQEAKICAqICAgICAgICAgICAgICBldmVudC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIodTMyIGV2ZW50LAogCQkJCSBhY3BpX2V2ZW50X2hhbmRsZXIgaGFuZGxlciwgdm9pZCAqY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIApAQCAtMTYxLDcgKzE2MCw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE3NSwxMyArMTc0LDEyIEBACiAgKiBERVNDUklQVElPTjogRGlzYWJsZXMgdGhlIGV2ZW50IGFuZCB1bnJlZ2lzdGVycyB0aGUgZXZlbnQgaGFuZGxlci4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9yZW1vdmVfZml4ZWRfZXZlbnRfaGFuZGxlcih1MzIgZXZlbnQsIGFjcGlfZXZlbnRfaGFuZGxlciBoYW5kbGVyKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9yZW1vdmVfZml4ZWRfZXZlbnRfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9yZW1vdmVfZml4ZWRfZXZlbnRfaGFuZGxlcik7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC0yMTYsNyArMjE0LDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIzNSw3ICsyMzMsNiBAQAogICogREVTQ1JJUFRJT046IEluc3RhbGwgYSBoYW5kbGVyIGZvciBub3RpZmllcyBvbiBhbiBBQ1BJIGRldmljZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoYWNwaV9oYW5kbGUgZGV2aWNlLAogCQkJICAgIHUzMiBoYW5kbGVyX3R5cGUsCkBAIC0yNDYsNyArMjQzLDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcik7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC0yNzUsNiArMjcyLDcgQEAKIAkgKiBvbmx5IG9uZSA8ZXh0ZXJuYWw+IGdsb2JhbCBoYW5kbGVyIGNhbiBiZSByZWdzaXRlcmVkIChwZXIgbm90aWZ5IHR5cGUpLgogCSAqLwogCWlmIChkZXZpY2UgPT0gQUNQSV9ST09UX09CSkVDVCkgeworCiAJCS8qIE1ha2Ugc3VyZSB0aGUgaGFuZGxlciBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQgKi8KIAogCQlpZiAoKChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpICYmCkBAIC0zMTcsNiArMzE1LDcgQEAKIAogCQlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAkJaWYgKG9ial9kZXNjKSB7CisKIAkJCS8qIE9iamVjdCBleGlzdHMgLSBtYWtlIHN1cmUgdGhlcmUncyBubyBoYW5kbGVyICovCiAKIAkJCWlmICgoKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgJiYKQEAgLTM3MCw2ICszNjksNyBAQAogCQl9CiAKIAkJaWYgKGhhbmRsZXJfdHlwZSA9PSBBQ1BJX0FMTF9OT1RJRlkpIHsKKwogCQkJLyogRXh0cmEgcmVmIGlmIGluc3RhbGxlZCBpbiBib3RoICovCiAKIAkJCWFjcGlfdXRfYWRkX3JlZmVyZW5jZShub3RpZnlfb2JqKTsKQEAgLTM4MSw3ICszODEsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcik7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTM5OSw3ICszOTksNiBAQAogICogREVTQ1JJUFRJT046IFJlbW92ZSBhIGhhbmRsZXIgZm9yIG5vdGlmaWVzIG9uIGFuIEFDUEkgZGV2aWNlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGFjcGlfaGFuZGxlIGRldmljZSwKIAkJCSAgIHUzMiBoYW5kbGVyX3R5cGUsIGFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlcikKQEAgLTQwOSw3ICs0MDgsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcik7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC01MzUsNyArNTM0LDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcik7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNTU0LDcgKzU1Myw2IEBACiAgKiBERVNDUklQVElPTjogSW5zdGFsbCBhIGhhbmRsZXIgZm9yIGEgR2VuZXJhbCBQdXJwb3NlIEV2ZW50LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwKIAkJCSB1MzIgZ3BlX251bWJlciwKQEAgLTU2NSw3ICs1NjMsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2NwdV9mbGFncyBmbGFnczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfaW5zdGFsbF9ncGVfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9pbnN0YWxsX2dwZV9oYW5kbGVyKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTU5Niw3ICs1OTQsNyBAQAogCiAJLyogQWxsb2NhdGUgYW5kIGluaXQgaGFuZGxlciBvYmplY3QgKi8KIAotCWhhbmRsZXIgPSBBQ1BJX01FTV9DQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX2hhbmRsZXJfaW5mbykpOworCWhhbmRsZXIgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfaGFuZGxlcl9pbmZvKSk7CiAJaWYgKCFoYW5kbGVyKSB7CiAJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CkBAIC02MzAsNyArNjI4LDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5zdGFsbF9ncGVfaGFuZGxlcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC02NDYsNyArNjQ0LDYgQEAKICAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYSBoYW5kbGVyIGZvciBhIEdlbmVyYWwgUHVycG9zZSBhY3BpX2V2ZW50LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihhY3BpX2hhbmRsZSBncGVfZGV2aWNlLAogCQkJdTMyIGdwZV9udW1iZXIsIGFjcGlfZXZlbnRfaGFuZGxlciBhZGRyZXNzKQpAQCAtNjU2LDcgKzY1Myw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTcyNCwxNCArNzIxLDE0IEBACiAKIAkvKiBOb3cgd2UgY2FuIGZyZWUgdGhlIGhhbmRsZXIgb2JqZWN0ICovCiAKLQlBQ1BJX01FTV9GUkVFKGhhbmRsZXIpOworCUFDUElfRlJFRShoYW5kbGVyKTsKIAogICAgICAgdW5sb2NrX2FuZF9leGl0OgogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC03NDYsNyArNzQzLDYgQEAKICAqIERFU0NSSVBUSU9OOiBBY3F1aXJlIHRoZSBBQ1BJIEdsb2JhbCBMb2NrCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKHUxNiB0aW1lb3V0LCB1MzIgKiBoYW5kbGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtNzcxLDcgKzc2Nyw3IEBACiAJcmV0dXJuIChzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfYWNxdWlyZV9nbG9iYWxfbG9jayk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTc4NCw3ICs3ODAsNiBAQAogICogREVTQ1JJUFRJT046IFJlbGVhc2UgdGhlIEFDUEkgR2xvYmFsIExvY2suIFRoZSBoYW5kbGUgbXVzdCBiZSB2YWxpZC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2sodTMyIGhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC03OTcsNCArNzkyLDQgQEAKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2NrKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZldm50LmMKaW5kZXggZWM5Y2U4NC4uN2ViYzJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmV2bnQuYwpAQCAtNDEsOCArNDEsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNldmVudHMuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CkBAIC02NSw3ICs2Myw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VuYWJsZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9lbmFibGUpOwogCiAJLyogTWFrZSBzdXJlIHdlIGhhdmUgdGhlIEZBRFQgKi8KIApAQCAtOTQsNiArOTIsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbmFibGUpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZGlzYWJsZQpAQCAtMTA1LDEyICsxMDUsMTEgQEAKICAqIERFU0NSSVBUSU9OOiBUcmFuc2ZlcnMgdGhlIHN5c3RlbSBpbnRvIExFR0FDWSAobm9uLUFDUEkpIG1vZGUuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlKHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2Rpc2FibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZGlzYWJsZSk7CiAKIAlpZiAoIWFjcGlfZ2JsX0ZBRFQpIHsKIAkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiTm8gRkFEVCBpbmZvcm1hdGlvbiBwcmVzZW50ISIpKTsKQEAgLTEzNyw2ICsxMzYsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9kaXNhYmxlKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2VuYWJsZV9ldmVudApAQCAtMTQ5LDEzICsxNTAsMTIgQEAKICAqIERFU0NSSVBUSU9OOiBFbmFibGUgYW4gQUNQSSBldmVudCAoZml4ZWQpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZXZlbnQodTMyIGV2ZW50LCB1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdTMyIHZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lbmFibGVfZXZlbnQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW5hYmxlX2V2ZW50KTsKIAogCS8qIERlY29kZSB0aGUgRml4ZWQgRXZlbnQgKi8KIApAQCAtMTkzLDcgKzE5Myw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfZXZlbnQpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZW5hYmxlX2V2ZW50KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIwOCwxMyArMjA4LDEyIEBACiAgKiBERVNDUklQVElPTjogU2V0IHRoZSB0eXBlIG9mIGFuIGluZGl2aWR1YWwgR1BFCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlX3R5cGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9zZXRfZ3BlX3R5cGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfc2V0X2dwZV90eXBlKTsKIAogCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyICovCiAKQEAgLTIzNiw3ICsyMzUsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2dwZV90eXBlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9ncGVfdHlwZSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yNTIsMTMgKzI1MSwxMiBAQAogICogREVTQ1JJUFRJT046IEVuYWJsZSBhbiBBQ1BJIGV2ZW50IChnZW5lcmFsIHB1cnBvc2UpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lbmFibGVfZ3BlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VuYWJsZV9ncGUpOwogCiAJLyogVXNlIHNlbWFwaG9yZSBsb2NrIGlmIG5vdCBleGVjdXRpbmcgYXQgaW50ZXJydXB0IGxldmVsICovCiAKQEAgLTI4OCw3ICsyODYsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZW5hYmxlX2dwZSk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfZ3BlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTMwNCwxMyArMzAyLDEyIEBACiAgKiBERVNDUklQVElPTjogRGlzYWJsZSBhbiBBQ1BJIGV2ZW50IChnZW5lcmFsIHB1cnBvc2UpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTMyIGZsYWdzKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZGlzYWJsZV9ncGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZGlzYWJsZV9ncGUpOwogCiAJLyogVXNlIHNlbWFwaG9yZSBsb2NrIGlmIG5vdCBleGVjdXRpbmcgYXQgaW50ZXJydXB0IGxldmVsICovCiAKQEAgLTMzOCw2ICszMzUsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9kaXNhYmxlX2dwZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9kaXNhYmxlX2V2ZW50CkBAIC0zNTAsMTMgKzM0OSwxMiBAQAogICogREVTQ1JJUFRJT046IERpc2FibGUgYW4gQUNQSSBldmVudCAoZml4ZWQpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlX2V2ZW50KHUzMiBldmVudCwgdTMyIGZsYWdzKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXUzMiB2YWx1ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZGlzYWJsZV9ldmVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9kaXNhYmxlX2V2ZW50KTsKIAogCS8qIERlY29kZSB0aGUgRml4ZWQgRXZlbnQgKi8KIApAQCAtMzkyLDcgKzM5MCw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9kaXNhYmxlX2V2ZW50KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2Rpc2FibGVfZXZlbnQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDA1LDEyICs0MDMsMTEgQEAKICAqIERFU0NSSVBUSU9OOiBDbGVhciBhbiBBQ1BJIGV2ZW50IChmaXhlZCkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2NsZWFyX2V2ZW50KHUzMiBldmVudCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfY2xlYXJfZXZlbnQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfY2xlYXJfZXZlbnQpOwogCiAJLyogRGVjb2RlIHRoZSBGaXhlZCBFdmVudCAqLwogCkBAIC00MjksNyArNDI2LDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2NsZWFyX2V2ZW50KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2NsZWFyX2V2ZW50KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQ0NCwxMyArNDQxLDEyIEBACiAgKiBERVNDUklQVElPTjogQ2xlYXIgYW4gQUNQSSBldmVudCAoZ2VuZXJhbCBwdXJwb3NlKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfY2xlYXJfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9jbGVhcl9ncGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfY2xlYXJfZ3BlKTsKIAogCS8qIFVzZSBzZW1hcGhvcmUgbG9jayBpZiBub3QgZXhlY3V0aW5nIGF0IGludGVycnVwdCBsZXZlbCAqLwogCkBAIC00NzgsNiArNDc0LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfY2xlYXJfZ3BlKQorCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDkyLDEyICs0OTAsMTEgQEAKICAqIERFU0NSSVBUSU9OOiBPYnRhaW5zIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgZXZlbnQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2dldF9ldmVudF9zdGF0dXModTMyIGV2ZW50LCBhY3BpX2V2ZW50X3N0YXR1cyAqIGV2ZW50X3N0YXR1cykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X2V2ZW50X3N0YXR1cyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfZXZlbnRfc3RhdHVzKTsKIAogCWlmICghZXZlbnRfc3RhdHVzKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTUxOCw2ICs1MTUsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfZXZlbnRfc3RhdHVzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF9ncGVfc3RhdHVzCkBAIC01MzMsNyArNTMyLDYgQEAKICAqIERFU0NSSVBUSU9OOiBHZXQgc3RhdHVzIG9mIGFuIGV2ZW50IChnZW5lcmFsIHB1cnBvc2UpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X2dwZV9zdGF0dXMoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwKIAkJICAgIHUzMiBncGVfbnVtYmVyLCB1MzIgZmxhZ3MsIGFjcGlfZXZlbnRfc3RhdHVzICogZXZlbnRfc3RhdHVzKQpAQCAtNTQxLDcgKzUzOSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfZ3BlX3N0YXR1cyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfZ3BlX3N0YXR1cyk7CiAKIAkvKiBVc2Ugc2VtYXBob3JlIGxvY2sgaWYgbm90IGV4ZWN1dGluZyBhdCBpbnRlcnJ1cHQgbGV2ZWwgKi8KIApAQCAtNTcwLDYgKzU2OCw4IEBACiAJfQogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQorCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfZ3BlX3N0YXR1cykKICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01ODYsNyArNTg2LDYgQEAKICAqIERFU0NSSVBUSU9OOiBDcmVhdGUgYW5kIEluc3RhbGwgYSBibG9jayBvZiBHUEUgcmVnaXN0ZXJzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfaW5zdGFsbF9ncGVfYmxvY2soYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwKIAkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqZ3BlX2Jsb2NrX2FkZHJlc3MsCkBAIC01OTcsNyArNTk2LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9pbnN0YWxsX2dwZV9ibG9jayIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9pbnN0YWxsX2dwZV9ibG9jayk7CiAKIAlpZiAoKCFncGVfZGV2aWNlKSB8fCAoIWdwZV9ibG9ja19hZGRyZXNzKSB8fCAoIXJlZ2lzdGVyX2NvdW50KSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CkBAIC02MzYsNiArNjM1LDcgQEAKIAogCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCWlmICghb2JqX2Rlc2MpIHsKKwogCQkvKiBObyBvYmplY3QsIGNyZWF0ZSBhIG5ldyBvbmUgKi8KIAogCQlvYmpfZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX1RZUEVfREVWSUNFKTsKQEAgLTY2NSw3ICs2NjUsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfaW5zdGFsbF9ncGVfYmxvY2spOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5zdGFsbF9ncGVfYmxvY2spCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNjc4LDE0ICs2NzgsMTMgQEAKICAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBibG9jayBvZiBHUEUgcmVnaXN0ZXJzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9yZW1vdmVfZ3BlX2Jsb2NrKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UpCiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9yZW1vdmVfZ3BlX2Jsb2NrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3JlbW92ZV9ncGVfYmxvY2spOwogCiAJaWYgKCFncGVfZGV2aWNlKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTcyMSw0ICs3MjAsNCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfcmVtb3ZlX2dwZV9ibG9jayk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9yZW1vdmVfZ3BlX2Jsb2NrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnhmcmVnbi5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnhmcmVnbi5jCmluZGV4IGFiZjVjYWMuLmU4Yjg2YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZnJlZ24uYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZyZWduLmMKQEAgLTQyLDggKzQyLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CiAjaW5jbHVkZSA8YWNwaS9hY2V2ZW50cy5oPgpAQCAtNzUsNyArNzMsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIApAQCAtMTE0LDcgKzExMiw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcik7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMjksNyArMTI3LDYgQEAKICAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBoYW5kbGVyLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoYWNwaV9oYW5kbGUgZGV2aWNlLAogCQkJCSAgYWNwaV9hZHJfc3BhY2VfdHlwZSBzcGFjZV9pZCwKQEAgLTE0Miw3ICsxMzksNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTE3Niw5ICsxNzMsMTEgQEAKIAloYW5kbGVyX29iaiA9IG9ial9kZXNjLT5kZXZpY2UuaGFuZGxlcjsKIAlsYXN0X29ial9wdHIgPSAmb2JqX2Rlc2MtPmRldmljZS5oYW5kbGVyOwogCXdoaWxlIChoYW5kbGVyX29iaikgeworCiAJCS8qIFdlIGhhdmUgYSBoYW5kbGVyLCBzZWUgaWYgdXNlciByZXF1ZXN0ZWQgdGhpcyBvbmUgKi8KIAogCQlpZiAoaGFuZGxlcl9vYmotPmFkZHJlc3Nfc3BhY2Uuc3BhY2VfaWQgPT0gc3BhY2VfaWQpIHsKKwogCQkJLyogTWF0Y2hlZCBzcGFjZV9pZCwgZmlyc3QgZGVyZWZlcmVuY2UgdGhpcyBpbiB0aGUgUmVnaW9ucyAqLwogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX09QUkVHSU9OLApAQCAtMjI5LDcgKzIyOCw3IEBACiAJLyogVGhlIGhhbmRsZXIgZG9lcyBub3QgZXhpc3QgKi8KIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfT1BSRUdJT04sCi0JCQkgICJVbmFibGUgdG8gcmVtb3ZlIGFkZHJlc3MgaGFuZGxlciAlcCBmb3IgJXMoJVgpLCBkZXZfbm9kZSAlcCwgb2JqICVwXG4iLAorCQkJICAiVW5hYmxlIHRvIHJlbW92ZSBhZGRyZXNzIGhhbmRsZXIgJXAgZm9yICVzKCVYKSwgRGV2Tm9kZSAlcCwgb2JqICVwXG4iLAogCQkJICBoYW5kbGVyLCBhY3BpX3V0X2dldF9yZWdpb25fbmFtZShzcGFjZV9pZCksIHNwYWNlX2lkLAogCQkJICBub2RlLCBvYmpfZGVzYykpOwogCkBAIC0yNDAsNCArMjM5LDQgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbmZpZy5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29uZmlnLmMKaW5kZXggYTI5NzgyZi4uODIzMzUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29uZmlnLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29uZmlnLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjIHRhYmxlX2luZm87CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9hZGRfdGFibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2FkZF90YWJsZSk7CiAKIAkvKiBDcmVhdGUgYW4gb2JqZWN0IHRvIGJlIHRoZSB0YWJsZSBoYW5kbGUgKi8KIApAQCAtMTAwLDcgKzEwMCw3IEBACiAKIAlBQ1BJX01FTVNFVCgmdGFibGVfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MpKTsKIAotCXRhYmxlX2luZm8udHlwZSA9IEFDUElfVEFCTEVfU1NEVDsKKwl0YWJsZV9pbmZvLnR5cGUgPSBBQ1BJX1RBQkxFX0lEX1NTRFQ7CiAJdGFibGVfaW5mby5wb2ludGVyID0gdGFibGU7CiAJdGFibGVfaW5mby5sZW5ndGggPSAoYWNwaV9zaXplKSB0YWJsZS0+bGVuZ3RoOwogCXRhYmxlX2luZm8uYWxsb2NhdGlvbiA9IEFDUElfTUVNX0FMTE9DQVRFRDsKQEAgLTExMCw2ICsxMTAsNyBAQAogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWlmIChzdGF0dXMgPT0gQUVfQUxSRUFEWV9FWElTVFMpIHsKKwogCQkJLyogVGFibGUgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmV0dXJuIHRoZSBoYW5kbGUgKi8KIAogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTEyMSw2ICsxMjIsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9uc19sb2FkX3RhYmxlKHRhYmxlX2luZm8uaW5zdGFsbGVkX2Rlc2MsIHBhcmVudF9ub2RlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkvKiBVbmluc3RhbGwgdGFibGUgb24gZXJyb3IgKi8KIAogCQkodm9pZClhY3BpX3RiX3VuaW5zdGFsbF90YWJsZSh0YWJsZV9pbmZvLmluc3RhbGxlZF9kZXNjKTsKQEAgLTE2MCw3ICsxNjIsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJhbWV0ZXJfbm9kZSA9IE5VTEw7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqZGRiX2hhbmRsZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2xvYWRfdGFibGVfb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2xvYWRfdGFibGVfb3ApOwogCiAjaWYgMAogCS8qCkBAIC0xNjksNiArMTcxLDcgQEAKIAkgKi8KIAlzdGF0dXMgPSBhY3BpX3RiX21hdGNoX3NpZ25hdHVyZShvcGVyYW5kWzBdLT5zdHJpbmcucG9pbnRlciwgTlVMTCk7CiAJaWYgKHN0YXR1cyA9PSBBRV9PSykgeworCiAJCS8qIFNpZ25hdHVyZSBtYXRjaGVkIC0tIGRvbid0IGFsbG93IG92ZXJyaWRlICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FMUkVBRFlfRVhJU1RTKTsKQEAgLTIxMSw5ICsyMTQsOCBAQAogCQkgKiBsb2NhdGlvbiB3aXRoaW4gdGhlIG5hbWVzcGFjZSB3aGVyZSB0aGUgdGFibGUgd2lsbCBiZSBsb2FkZWQuCiAJCSAqLwogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9uc19nZXRfbm9kZV9ieV9wYXRoKG9wZXJhbmRbM10tPnN0cmluZy5wb2ludGVyLAotCQkJCQkgICAgIHN0YXJ0X25vZGUsIEFDUElfTlNfU0VBUkNIX1BBUkVOVCwKLQkJCQkJICAgICAmcGFyZW50X25vZGUpOworCQkgICAgYWNwaV9uc19nZXRfbm9kZShzdGFydF9ub2RlLCBvcGVyYW5kWzNdLT5zdHJpbmcucG9pbnRlciwKKwkJCQkgICAgIEFDUElfTlNfU0VBUkNIX1BBUkVOVCwgJnBhcmVudF9ub2RlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQpAQCAtMjM0LDkgKzIzNiw4IEBACiAJCS8qIEZpbmQgdGhlIG5vZGUgcmVmZXJlbmNlZCBieSB0aGUgcGFyYW1ldGVyX3BhdGhfc3RyaW5nICovCiAKIAkJc3RhdHVzID0KLQkJICAgIGFjcGlfbnNfZ2V0X25vZGVfYnlfcGF0aChvcGVyYW5kWzRdLT5zdHJpbmcucG9pbnRlciwKLQkJCQkJICAgICBzdGFydF9ub2RlLCBBQ1BJX05TX1NFQVJDSF9QQVJFTlQsCi0JCQkJCSAgICAgJnBhcmFtZXRlcl9ub2RlKTsKKwkJICAgIGFjcGlfbnNfZ2V0X25vZGUoc3RhcnRfbm9kZSwgb3BlcmFuZFs0XS0+c3RyaW5nLnBvaW50ZXIsCisJCQkJICAgICBBQ1BJX05TX1NFQVJDSF9QQVJFTlQsICZwYXJhbWV0ZXJfbm9kZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJCX0KQEAgLTI1Miw2ICsyNTMsNyBAQAogCS8qIFBhcmFtZXRlciBEYXRhIChvcHRpb25hbCkgKi8KIAogCWlmIChwYXJhbWV0ZXJfbm9kZSkgeworCiAJCS8qIFN0b3JlIHRoZSBwYXJhbWV0ZXIgZGF0YSBpbnRvIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgb2JqZWN0ICovCiAKIAkJc3RhdHVzID0gYWNwaV9leF9zdG9yZShvcGVyYW5kWzVdLApAQCAtMjk0LDkgKzI5NiwxMCBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGVfcHRyID0gTlVMTDsKIAlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzczsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgdGFibGVfaGVhZGVyOworCWFjcGlfaW50ZWdlciB0ZW1wOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfbG9hZF9vcCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfbG9hZF9vcCk7CiAKIAkvKiBPYmplY3QgY2FuIGJlIGVpdGhlciBhbiBvcF9yZWdpb24gb3IgYSBGaWVsZCAqLwogCkBAIC0zMjIsNyArMzI1LDcgQEAKIAogCQlhZGRyZXNzID0gb2JqX2Rlc2MtPnJlZ2lvbi5hZGRyZXNzOwogCi0JCS8qIEdldCB0aGUgdGFibGUgbGVuZ3RoIGZyb20gdGhlIHRhYmxlIGhlYWRlciAqLworCQkvKiBHZXQgcGFydCBvZiB0aGUgdGFibGUgaGVhZGVyIHRvIGdldCB0aGUgdGFibGUgbGVuZ3RoICovCiAKIAkJdGFibGVfaGVhZGVyLmxlbmd0aCA9IDA7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKQEAgLTMzMCwxMSArMzMzLDE0IEBACiAJCQkgICAgYWNwaV9ldl9hZGRyZXNzX3NwYWNlX2Rpc3BhdGNoKG9ial9kZXNjLCBBQ1BJX1JFQUQsCiAJCQkJCQkJICAgKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykKIAkJCQkJCQkgICAoaSArIGFkZHJlc3MpLCA4LAotCQkJCQkJCSAgICgodTggKikgJgotCQkJCQkJCSAgICB0YWJsZV9oZWFkZXIpICsgaSk7CisJCQkJCQkJICAgJnRlbXApOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJCQl9CisKKwkJCS8qIEdldCB0aGUgb25lIHZhbGlkIGJ5dGUgb2YgdGhlIHJldHVybmVkIDY0LWJpdCB2YWx1ZSAqLworCisJCQlBQ1BJX0NBU1RfUFRSKHU4LCAmdGFibGVfaGVhZGVyKVtpXSA9ICh1OCkgdGVtcDsKIAkJfQogCiAJCS8qIFNhbml0eSBjaGVjayB0aGUgdGFibGUgbGVuZ3RoICovCkBAIC0zNDUsNyArMzUxLDcgQEAKIAogCQkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIGVudGlyZSB0YWJsZSAqLwogCi0JCXRhYmxlX3B0ciA9IEFDUElfTUVNX0FMTE9DQVRFKHRhYmxlX2hlYWRlci5sZW5ndGgpOworCQl0YWJsZV9wdHIgPSBBQ1BJX0FMTE9DQVRFKHRhYmxlX2hlYWRlci5sZW5ndGgpOwogCQlpZiAoIXRhYmxlX3B0cikgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJCX0KQEAgLTM1NywxMSArMzYzLDE0IEBACiAJCQkgICAgYWNwaV9ldl9hZGRyZXNzX3NwYWNlX2Rpc3BhdGNoKG9ial9kZXNjLCBBQ1BJX1JFQUQsCiAJCQkJCQkJICAgKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykKIAkJCQkJCQkgICAoaSArIGFkZHJlc3MpLCA4LAotCQkJCQkJCSAgICgodTggKikgdGFibGVfcHRyICsKLQkJCQkJCQkgICAgaSkpOworCQkJCQkJCSAgICZ0ZW1wKTsKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCWdvdG8gY2xlYW51cDsKIAkJCX0KKworCQkJLyogR2V0IHRoZSBvbmUgdmFsaWQgYnl0ZSBvZiB0aGUgcmV0dXJuZWQgNjQtYml0IHZhbHVlICovCisKKwkJCUFDUElfQ0FTVF9QVFIodTgsIHRhYmxlX3B0cilbaV0gPSAodTgpIHRlbXA7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTQwNywxMiArNDE2LDggQEAKIAogCS8qIFRoZSB0YWJsZSBtdXN0IGJlIGVpdGhlciBhbiBTU0RUIG9yIGEgUFNEVCAqLwogCi0JaWYgKCghQUNQSV9TVFJOQ01QKHRhYmxlX3B0ci0+c2lnbmF0dXJlLAotCQkJICAgYWNwaV9nYmxfdGFibGVfZGF0YVtBQ1BJX1RBQkxFX1BTRFRdLnNpZ25hdHVyZSwKLQkJCSAgIGFjcGlfZ2JsX3RhYmxlX2RhdGFbQUNQSV9UQUJMRV9QU0RUXS5zaWdfbGVuZ3RoKSkgJiYKLQkgICAgKCFBQ1BJX1NUUk5DTVAodGFibGVfcHRyLT5zaWduYXR1cmUsCi0JCQkgICBhY3BpX2dibF90YWJsZV9kYXRhW0FDUElfVEFCTEVfU1NEVF0uc2lnbmF0dXJlLAotCQkJICAgYWNwaV9nYmxfdGFibGVfZGF0YVtBQ1BJX1RBQkxFX1NTRFRdLnNpZ19sZW5ndGgpKSkgeworCWlmICgoIUFDUElfQ09NUEFSRV9OQU1FKHRhYmxlX3B0ci0+c2lnbmF0dXJlLCBQU0RUX1NJRykpICYmCisJICAgICghQUNQSV9DT01QQVJFX05BTUUodGFibGVfcHRyLT5zaWduYXR1cmUsIFNTRFRfU0lHKSkpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiVGFibGUgaGFzIGludmFsaWQgc2lnbmF0dXJlIFslNC40c10sIG11c3QgYmUgU1NEVCBvciBQU0RUIiwKIAkJCSAgICB0YWJsZV9wdHItPnNpZ25hdHVyZSkpOwpAQCAtNDI0LDYgKzQyOSw3IEBACiAKIAlzdGF0dXMgPSBhY3BpX2V4X2FkZF90YWJsZSh0YWJsZV9wdHIsIGFjcGlfZ2JsX3Jvb3Rfbm9kZSwgJmRkYl9oYW5kbGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCS8qIE9uIGVycm9yLCB0YWJsZV9wdHIgd2FzIGRlYWxsb2NhdGVkIGFib3ZlICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC00NDIsNyArNDQ4LDcgQEAKIAogICAgICAgY2xlYW51cDoKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9NRU1fRlJFRSh0YWJsZV9wdHIpOworCQlBQ1BJX0ZSRUUodGFibGVfcHRyKTsKIAl9CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CkBAIC00NjUsNyArNDcxLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICp0YWJsZV9kZXNjID0gZGRiX2hhbmRsZTsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfdW5sb2FkX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF91bmxvYWRfdGFibGUpOwogCiAJLyoKIAkgKiBWYWxpZGF0ZSB0aGUgaGFuZGxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjb252cnQuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbnZydC5jCmluZGV4IGU2ZDUyZTEuLmI3MzJlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbnZydC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbnZydC5jCkBAIC03OSw3ICs3OSw3IEBACiAJdTMyIGNvdW50OwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9jb252ZXJ0X3RvX2ludGVnZXIiLCBvYmpfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZXhfY29udmVydF90b19pbnRlZ2VyLCBvYmpfZGVzYyk7CiAKIAlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgewogCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CkBAIC0xOTksNyArMTk5LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYzsKIAl1OCAqbmV3X2J1ZjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9jb252ZXJ0X3RvX2J1ZmZlciIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jb252ZXJ0X3RvX2J1ZmZlciwgb2JqX2Rlc2MpOwogCiAJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpIHsKIAljYXNlIEFDUElfVFlQRV9CVUZGRVI6CkBAIC0zMTksNiArMzE5LDcgQEAKIAkJcmVtYWluZGVyID0gMDsKIAogCQlmb3IgKGkgPSBkZWNpbWFsX2xlbmd0aDsgaSA+IDA7IGktLSkgeworCiAJCQkvKiBEaXZpZGUgYnkgbnRoIGZhY3RvciBvZiAxMCAqLwogCiAJCQlkaWdpdCA9IGludGVnZXI7CkBAIC0zNDYsNiArMzQ3LDcgQEAKIAogCQloZXhfbGVuZ3RoID0gKGFjcGlfbmF0aXZlX3VpbnQpIEFDUElfTVVMXzIoZGF0YV93aWR0aCk7CiAJCWZvciAoaSA9IDAsIGogPSAoaGV4X2xlbmd0aCAtIDEpOyBpIDwgaGV4X2xlbmd0aDsgaSsrLCBqLS0pIHsKKwogCQkJLyogR2V0IG9uZSBoZXggZGlnaXQsIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXRzIGZpcnN0ICovCiAKIAkJCXN0cmluZ1trXSA9CkBAIC00MDAsNyArNDAyLDcgQEAKIAl1MTYgYmFzZSA9IDE2OwogCXU4IHNlcGFyYXRvciA9ICcsJzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9jb252ZXJ0X3RvX3N0cmluZyIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jb252ZXJ0X3RvX3N0cmluZywgb2JqX2Rlc2MpOwogCiAJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpIHsKIAljYXNlIEFDUElfVFlQRV9TVFJJTkc6CkBAIC01NjcsNyArNTY5LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2NvbnZlcnRfdG9fdGFyZ2V0X3R5cGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2NvbnZlcnRfdG9fdGFyZ2V0X3R5cGUpOwogCiAJLyogRGVmYXVsdCBiZWhhdmlvciAqLwogCkBAIC02NTcsNyArNjU5LDcgQEAKIAogCWRlZmF1bHQ6CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIlVua25vd24gVGFyZ2V0IHR5cGUgSUQgMHglWCBhbWxfb3Bjb2RlICVYIGRlc3RfdHlwZSAlcyIsCisJCQkgICAgIlVua25vd24gVGFyZ2V0IHR5cGUgSUQgMHglWCBBbWxPcGNvZGUgJVggRGVzdFR5cGUgJXMiLAogCQkJICAgIEdFVF9DVVJSRU5UX0FSR19UWVBFKHdhbGtfc3RhdGUtPm9wX2luZm8tPgogCQkJCQkJIHJ1bnRpbWVfYXJncyksCiAJCQkgICAgd2Fsa19zdGF0ZS0+b3Bjb2RlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y3JlYXRlLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjcmVhdGUuYwppbmRleCA2ODA1NzU0Li4xMDZkYzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjcmVhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjcmVhdGUuYwpAQCAtNjksNyArNjksNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphbGlhc19ub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfY3JlYXRlX2FsaWFzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9jcmVhdGVfYWxpYXMpOwogCiAJLyogR2V0IHRoZSBzb3VyY2UvYWxpYXMgb3BlcmFuZHMgKGJvdGggbmFtZXNwYWNlIG5vZGVzKSAqLwogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9jcmVhdGVfZXZlbnQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2NyZWF0ZV9ldmVudCk7CiAKIAlvYmpfZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX1RZUEVfRVZFTlQpOwogCWlmICghb2JqX2Rlc2MpIHsKQEAgLTIxNiw3ICsyMTYsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2NyZWF0ZV9tdXRleCIsIEFDUElfV0FMS19PUEVSQU5EUyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZXhfY3JlYXRlX211dGV4LCBBQ1BJX1dBTEtfT1BFUkFORFMpOwogCiAJLyogQ3JlYXRlIHRoZSBuZXcgbXV0ZXggb2JqZWN0ICovCiAKQEAgLTI0Myw4ICsyNDMsOSBAQAogCW9ial9kZXNjLT5tdXRleC5ub2RlID0KIAkgICAgKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICopd2Fsa19zdGF0ZS0+b3BlcmFuZHNbMF07CiAKLQlzdGF0dXMgPSBhY3BpX25zX2F0dGFjaF9vYmplY3Qob2JqX2Rlc2MtPm11dGV4Lm5vZGUsCi0JCQkJICAgICAgIG9ial9kZXNjLCBBQ1BJX1RZUEVfTVVURVgpOworCXN0YXR1cyA9CisJICAgIGFjcGlfbnNfYXR0YWNoX29iamVjdChvYmpfZGVzYy0+bXV0ZXgubm9kZSwgb2JqX2Rlc2MsCisJCQkJICBBQ1BJX1RZUEVfTVVURVgpOwogCiAgICAgICBjbGVhbnVwOgogCS8qCkBAIC0yODAsNyArMjgxLDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqMjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2NyZWF0ZV9yZWdpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2NyZWF0ZV9yZWdpb24pOwogCiAJLyogR2V0IHRoZSBOYW1lc3BhY2UgTm9kZSAqLwogCkBAIC0zMDAsNyArMzAxLDcgQEAKIAkgKi8KIAlpZiAoKHJlZ2lvbl9zcGFjZSA+PSBBQ1BJX05VTV9QUkVERUZJTkVEX1JFR0lPTlMpICYmCiAJICAgIChyZWdpb25fc3BhY2UgPCBBQ1BJX1VTRVJfUkVHSU9OX0JFR0lOKSkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBhZGRyZXNzX3NwYWNlIHR5cGUgJVgiLAorCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBBZGRyZXNzU3BhY2UgdHlwZSAlWCIsCiAJCQkgICAgcmVnaW9uX3NwYWNlKSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfSU5WQUxJRF9TUEFDRV9JRCk7CiAJfQpAQCAtMzY0LDcgKzM2NSw3IEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqMjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2NyZWF0ZV90YWJsZV9yZWdpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2NyZWF0ZV90YWJsZV9yZWdpb24pOwogCiAJLyogR2V0IHRoZSBOb2RlIGZyb20gdGhlIG9iamVjdCBzdGFjayAgKi8KIApAQCAtNDUyLDcgKzQ1Myw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2NyZWF0ZV9wcm9jZXNzb3IiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jcmVhdGVfcHJvY2Vzc29yLCB3YWxrX3N0YXRlKTsKIAogCS8qIENyZWF0ZSB0aGUgcHJvY2Vzc29yIG9iamVjdCAqLwogCkBAIC00NjQsOSArNDY1LDkgQEAKIAkvKiBJbml0aWFsaXplIHRoZSBwcm9jZXNzb3Igb2JqZWN0IGZyb20gdGhlIG9wZXJhbmRzICovCiAKIAlvYmpfZGVzYy0+cHJvY2Vzc29yLnByb2NfaWQgPSAodTgpIG9wZXJhbmRbMV0tPmludGVnZXIudmFsdWU7CisJb2JqX2Rlc2MtPnByb2Nlc3Nvci5sZW5ndGggPSAodTgpIG9wZXJhbmRbM10tPmludGVnZXIudmFsdWU7CiAJb2JqX2Rlc2MtPnByb2Nlc3Nvci5hZGRyZXNzID0KIAkgICAgKGFjcGlfaW9fYWRkcmVzcykgb3BlcmFuZFsyXS0+aW50ZWdlci52YWx1ZTsKLQlvYmpfZGVzYy0+cHJvY2Vzc29yLmxlbmd0aCA9ICh1OCkgb3BlcmFuZFszXS0+aW50ZWdlci52YWx1ZTsKIAogCS8qIEluc3RhbGwgdGhlIHByb2Nlc3NvciBvYmplY3QgaW4gdGhlIHBhcmVudCBOb2RlICovCiAKQEAgLTQ5OSw3ICs1MDAsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9jcmVhdGVfcG93ZXJfcmVzb3VyY2UiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jcmVhdGVfcG93ZXJfcmVzb3VyY2UsIHdhbGtfc3RhdGUpOwogCiAJLyogQ3JlYXRlIHRoZSBwb3dlciByZXNvdXJjZSBvYmplY3QgKi8KIApAQCAtNTQ5LDcgKzU1MCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXU4IG1ldGhvZF9mbGFnczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9jcmVhdGVfbWV0aG9kIiwgd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZXhfY3JlYXRlX21ldGhvZCwgd2Fsa19zdGF0ZSk7CiAKIAkvKiBDcmVhdGUgYSBuZXcgbWV0aG9kIG9iamVjdCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhkdW1wLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhkdW1wLmMKaW5kZXggYTdjY2E4ZC4uN2I5NzE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYwpAQCAtNjEsNiArNjEsMTAgQEAKIAogc3RhdGljIHZvaWQgYWNwaV9leF9vdXRfYWRkcmVzcyhjaGFyICp0aXRsZSwgYWNwaV9waHlzaWNhbF9hZGRyZXNzIHZhbHVlKTsKIAorc3RhdGljIHZvaWQKK2FjcGlfZXhfZHVtcF9vYmplY3QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCisJCSAgICBzdHJ1Y3QgYWNwaV9leGR1bXBfaW5mbyAqaW5mbyk7CisKIHN0YXRpYyB2b2lkIGFjcGlfZXhfZHVtcF9yZWZlcmVuY2Vfb2JqKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKTsKIAogc3RhdGljIHZvaWQKQEAgLTExOSw3ICsxMjMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGFjcGlfZXhkdW1wX2luZm8gYWNwaV9leF9kdW1wX21ldGhvZFs4XSA9IHsKIAl7QUNQSV9FWERfSU5JVCwgQUNQSV9FWERfVEFCTEVfU0laRShhY3BpX2V4X2R1bXBfbWV0aG9kKSwgTlVMTH0sCi0Je0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9PRkZTRVQobWV0aG9kLnBhcmFtX2NvdW50KSwgInBhcmFtX2NvdW50In0sCisJe0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9PRkZTRVQobWV0aG9kLnBhcmFtX2NvdW50KSwgIlBhcmFtQ291bnQifSwKIAl7QUNQSV9FWERfVUlOVDgsIEFDUElfRVhEX09GRlNFVChtZXRob2QuY29uY3VycmVuY3kpLCAiQ29uY3VycmVuY3kifSwKIAl7QUNQSV9FWERfUE9JTlRFUiwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5zZW1hcGhvcmUpLCAiU2VtYXBob3JlIn0sCiAJe0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9PRkZTRVQobWV0aG9kLm93bmVyX2lkKSwgIk93bmVyIElkIn0sCkBAIC0yNjMsMTIgKzI2NywxMCBAQAogCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQoY29tbW9uX2ZpZWxkLm5vZGUpLCAiUGFyZW50IE5vZGUifQogfTsKIAotc3RhdGljIHN0cnVjdCBhY3BpX2V4ZHVtcF9pbmZvIGFjcGlfZXhfZHVtcF9ub2RlWzZdID0geworc3RhdGljIHN0cnVjdCBhY3BpX2V4ZHVtcF9pbmZvIGFjcGlfZXhfZHVtcF9ub2RlWzVdID0gewogCXtBQ1BJX0VYRF9JTklULCBBQ1BJX0VYRF9UQUJMRV9TSVpFKGFjcGlfZXhfZHVtcF9ub2RlKSwgTlVMTH0sCiAJe0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9OU09GRlNFVChmbGFncyksICJGbGFncyJ9LAogCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfTlNPRkZTRVQob3duZXJfaWQpLCAiT3duZXIgSWQifSwKLQl7QUNQSV9FWERfVUlOVDE2LCBBQ1BJX0VYRF9OU09GRlNFVChyZWZlcmVuY2VfY291bnQpLAotCSAiUmVmZXJlbmNlIENvdW50In0sCiAJe0FDUElfRVhEX1BPSU5URVIsIEFDUElfRVhEX05TT0ZGU0VUKGNoaWxkKSwgIkNoaWxkIExpc3QifSwKIAl7QUNQSV9FWERfUE9JTlRFUiwgQUNQSV9FWERfTlNPRkZTRVQocGVlciksICJOZXh0IFBlZXIifQogfTsKQEAgLTMzMCw3ICszMzIsNyBAQAogCiAJaWYgKCFpbmZvKSB7CiAJCWFjcGlfb3NfcHJpbnRmCi0JCSAgICAoImV4X2R1bXBfb2JqZWN0OiBEaXNwbGF5IG5vdCBpbXBsZW1lbnRlZCBmb3Igb2JqZWN0IHR5cGUgJXNcbiIsCisJCSAgICAoIkV4RHVtcE9iamVjdDogRGlzcGxheSBub3QgaW1wbGVtZW50ZWQgZm9yIG9iamVjdCB0eXBlICVzXG4iLAogCQkgICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUob2JqX2Rlc2MpKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ1NCw3ICs0NTYsNyBAQAogCXUzMiBsZW5ndGg7CiAJdTMyIGluZGV4OwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJleF9kdW1wX29wZXJhbmQiKQorCUFDUElfRlVOQ1RJT05fTkFNRShleF9kdW1wX29wZXJhbmQpCiAKIAkgICAgaWYgKCEKIAkJKChBQ1BJX0xWX0VYRUMgJiBhY3BpX2RiZ19sZXZlbCkKQEAgLTQ2Myw2ICs0NjUsNyBAQAogCX0KIAogCWlmICghb2JqX2Rlc2MpIHsKKwogCQkvKiBUaGlzIGNvdWxkIGJlIGEgbnVsbCBlbGVtZW50IG9mIGEgcGFja2FnZSAqLwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIk51bGwgT2JqZWN0IERlc2NyaXB0b3JcbiIpKTsKQEAgLTUyMiw3ICs1MjUsNyBAQAogCiAJCWNhc2UgQU1MX1JFRl9PRl9PUDoKIAotCQkJYWNwaV9vc19wcmludGYoIlJlZmVyZW5jZTogKHJlZl9vZikgJXBcbiIsCisJCQlhY3BpX29zX3ByaW50ZigiUmVmZXJlbmNlOiAoUmVmT2YpICVwXG4iLAogCQkJCSAgICAgICBvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCk7CiAJCQlicmVhazsKIApAQCAtNTMyLDYgKzUzNSw3IEBACiAJCQkJICAgICAgIG9ial9kZXNjLT5yZWZlcmVuY2Uub2Zmc2V0KTsKIAogCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCiAJCQkJLyogVmFsdWUgaXMgYW4gSW50ZWdlciAqLwogCiAJCQkJYWNwaV9vc19wcmludGYoIiB2YWx1ZSBpcyBbJTguOFglOC44eF0iLApAQCAtNjEwLDcgKzYxNCw3IEBACiAKIAljYXNlIEFDUElfVFlQRV9QQUNLQUdFOgogCi0JCWFjcGlfb3NfcHJpbnRmKCJQYWNrYWdlIFtMZW4gJVhdIGVsZW1lbnRfYXJyYXkgJXBcbiIsCisJCWFjcGlfb3NfcHJpbnRmKCJQYWNrYWdlIFtMZW4gJVhdIEVsZW1lbnRBcnJheSAlcFxuIiwKIAkJCSAgICAgICBvYmpfZGVzYy0+cGFja2FnZS5jb3VudCwKIAkJCSAgICAgICBvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50cyk7CiAKQEAgLTY2MiwxMyArNjY2LDEzIEBACiAKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9CQU5LX0ZJRUxEOgogCi0JCWFjcGlfb3NfcHJpbnRmKCJiYW5rX2ZpZWxkXG4iKTsKKwkJYWNwaV9vc19wcmludGYoIkJhbmtGaWVsZFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVHSU9OX0ZJRUxEOgogCiAJCWFjcGlfb3NfcHJpbnRmCi0JCSAgICAoInJlZ2lvbl9maWVsZDogQml0cz0lWCBhY2Nfd2lkdGg9JVggTG9jaz0lWCBVcGRhdGU9JVggYXQgYnl0ZT0lWCBiaXQ9JVggb2YgYmVsb3c6XG4iLAorCQkgICAgKCJSZWdpb25GaWVsZDogQml0cz0lWCBBY2NXaWR0aD0lWCBMb2NrPSVYIFVwZGF0ZT0lWCBhdCBieXRlPSVYIGJpdD0lWCBvZiBiZWxvdzpcbiIsCiAJCSAgICAgb2JqX2Rlc2MtPmZpZWxkLmJpdF9sZW5ndGgsCiAJCSAgICAgb2JqX2Rlc2MtPmZpZWxkLmFjY2Vzc19ieXRlX3dpZHRoLAogCQkgICAgIG9ial9kZXNjLT5maWVsZC5maWVsZF9mbGFncyAmIEFNTF9GSUVMRF9MT0NLX1JVTEVfTUFTSywKQEAgLTY4MSwxMiArNjg1LDEyIEBACiAKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9JTkRFWF9GSUVMRDoKIAotCQlhY3BpX29zX3ByaW50ZigiaW5kZXhfZmllbGRcbiIpOworCQlhY3BpX29zX3ByaW50ZigiSW5kZXhGaWVsZFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEOgogCi0JCWFjcGlfb3NfcHJpbnRmKCJidWZmZXJfZmllbGQ6ICVYIGJpdHMgYXQgYnl0ZSAlWCBiaXQgJVggb2ZcbiIsCisJCWFjcGlfb3NfcHJpbnRmKCJCdWZmZXJGaWVsZDogJVggYml0cyBhdCBieXRlICVYIGJpdCAlWCBvZlxuIiwKIAkJCSAgICAgICBvYmpfZGVzYy0+YnVmZmVyX2ZpZWxkLmJpdF9sZW5ndGgsCiAJCQkgICAgICAgb2JqX2Rlc2MtPmJ1ZmZlcl9maWVsZC5iYXNlX2J5dGVfb2Zmc2V0LAogCQkJICAgICAgIG9ial9kZXNjLT5idWZmZXJfZmllbGQuc3RhcnRfZmllbGRfYml0X29mZnNldCk7CkBAIC03NzcsNyArNzgxLDcgQEAKIHsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImV4X2R1bXBfb3BlcmFuZHMiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZXhfZHVtcF9vcGVyYW5kcyk7CiAKIAlpZiAoIWlkZW50KSB7CiAJCWlkZW50ID0gIj8iOwpAQCAtOTAxLDcgKzkwNSw3IEBACiAJCQlhY3BpX29zX3ByaW50ZigiQ291bGQgbm90IGNvbnZlcnQgbmFtZSB0byBwYXRobmFtZVxuIik7CiAJCX0gZWxzZSB7CiAJCQlhY3BpX29zX3ByaW50ZigiJXNcbiIsIChjaGFyICopcmV0X2J1Zi5wb2ludGVyKTsKLQkJCUFDUElfTUVNX0ZSRUUocmV0X2J1Zi5wb2ludGVyKTsKKwkJCUFDUElfRlJFRShyZXRfYnVmLnBvaW50ZXIpOwogCQl9CiAJfSBlbHNlIGlmIChvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdCkgewogCQlhY3BpX29zX3ByaW50ZigiXG5SZWZlcmVuY2VkIE9iamVjdDogJXBcbiIsCkBAIC0xMDE3LDcgKzEwMjEsNyBAQAogdm9pZAogYWNwaV9leF9kdW1wX29iamVjdF9kZXNjcmlwdG9yKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLCB1MzIgZmxhZ3MpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfZHVtcF9vYmplY3RfZGVzY3JpcHRvciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZHVtcF9vYmplY3RfZGVzY3JpcHRvcik7CiAKIAlpZiAoIW9ial9kZXNjKSB7CiAJCXJldHVybl9WT0lEOwpAQCAtMTA0Niw3ICsxMDUwLDcgQEAKIAogCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUob2JqX2Rlc2MpICE9IEFDUElfREVTQ19UWVBFX09QRVJBTkQpIHsKIAkJYWNwaV9vc19wcmludGYKLQkJICAgICgiZXhfZHVtcF9vYmplY3RfZGVzY3JpcHRvcjogJXAgaXMgbm90IGFuIEFDUEkgb3BlcmFuZCBvYmplY3Q6IFslc11cbiIsCisJCSAgICAoIkV4RHVtcE9iamVjdERlc2NyaXB0b3I6ICVwIGlzIG5vdCBhbiBBQ1BJIG9wZXJhbmQgb2JqZWN0OiBbJXNdXG4iLAogCQkgICAgIG9ial9kZXNjLCBhY3BpX3V0X2dldF9kZXNjcmlwdG9yX25hbWUob2JqX2Rlc2MpKTsKIAkJcmV0dXJuX1ZPSUQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZmllbGQuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGZpZWxkLmMKaW5kZXggZTI1OTIwMS4uOWVhOWMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZmllbGQuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmaWVsZC5jCkBAIC03Myw3ICs3Myw3IEBACiAJdm9pZCAqYnVmZmVyOwogCXU4IGxvY2tlZDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9yZWFkX2RhdGFfZnJvbV9maWVsZCIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9yZWFkX2RhdGFfZnJvbV9maWVsZCwgb2JqX2Rlc2MpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIApAQCAtMTQyLDYgKzE0Miw3IEBACiAJbGVuZ3RoID0KIAkgICAgKGFjcGlfc2l6ZSkgQUNQSV9ST1VORF9CSVRTX1VQX1RPX0JZVEVTKG9ial9kZXNjLT5maWVsZC5iaXRfbGVuZ3RoKTsKIAlpZiAobGVuZ3RoID4gYWNwaV9nYmxfaW50ZWdlcl9ieXRlX3dpZHRoKSB7CisKIAkJLyogRmllbGQgaXMgdG9vIGxhcmdlIGZvciBhbiBJbnRlZ2VyLCBjcmVhdGUgYSBCdWZmZXIgaW5zdGVhZCAqLwogCiAJCWJ1ZmZlcl9kZXNjID0gYWNwaV91dF9jcmVhdGVfYnVmZmVyX29iamVjdChsZW5ndGgpOwpAQCAtMTYzLDExICsxNjQsMTEgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCSAgImZpZWxkX3JlYWQgW1RPXTogIE9iaiAlcCwgVHlwZSAlWCwgQnVmICVwLCBieXRlX2xlbiAlWFxuIiwKKwkJCSAgIkZpZWxkUmVhZCBbVE9dOiAgIE9iaiAlcCwgVHlwZSAlWCwgQnVmICVwLCBCeXRlTGVuICVYXG4iLAogCQkJICBvYmpfZGVzYywgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpLCBidWZmZXIsCiAJCQkgICh1MzIpIGxlbmd0aCkpOwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJICAiZmllbGRfcmVhZCBbRlJPTV06IGJpdF9sZW4gJVgsIGJpdF9vZmYgJVgsIGJ5dGVfb2ZmICVYXG4iLAorCQkJICAiRmllbGRSZWFkIFtGUk9NXTogQml0TGVuICVYLCBCaXRPZmYgJVgsIEJ5dGVPZmYgJVhcbiIsCiAJCQkgIG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCwKIAkJCSAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0LAogCQkJICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQpKTsKQEAgLTIxOSw3ICsyMjAsNyBAQAogCXU4IGxvY2tlZDsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpidWZmZXJfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF93cml0ZV9kYXRhX3RvX2ZpZWxkIiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X3dyaXRlX2RhdGFfdG9fZmllbGQsIG9ial9kZXNjKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTMyOSw5ICszMzAsMTAgQEAKIAkgICAgQUNQSV9ST1VORF9CSVRTX1VQX1RPX0JZVEVTKG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCk7CiAKIAlpZiAobGVuZ3RoIDwgcmVxdWlyZWRfbGVuZ3RoKSB7CisKIAkJLyogV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgYnVmZmVyICovCiAKLQkJbmV3X2J1ZmZlciA9IEFDUElfTUVNX0NBTExPQ0FURShyZXF1aXJlZF9sZW5ndGgpOworCQluZXdfYnVmZmVyID0gQUNQSV9BTExPQ0FURV9aRVJPRUQocmVxdWlyZWRfbGVuZ3RoKTsKIAkJaWYgKCFuZXdfYnVmZmVyKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpAQCAtMzQ3LDE0ICszNDksMTQgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCSAgImZpZWxkX3dyaXRlIFtGUk9NXTogT2JqICVwICglczolWCksIEJ1ZiAlcCwgYnl0ZV9sZW4gJVhcbiIsCisJCQkgICJGaWVsZFdyaXRlIFtGUk9NXTogT2JqICVwICglczolWCksIEJ1ZiAlcCwgQnl0ZUxlbiAlWFxuIiwKIAkJCSAgc291cmNlX2Rlc2MsCiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShBQ1BJX0dFVF9PQkpFQ1RfVFlQRQogCQkJCQkJKHNvdXJjZV9kZXNjKSksCiAJCQkgIEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSwgYnVmZmVyLCBsZW5ndGgpKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJICAiZmllbGRfd3JpdGUgW1RPXTogIE9iaiAlcCAoJXM6JVgpLCBiaXRfbGVuICVYLCBiaXRfb2ZmICVYLCBieXRlX29mZiAlWFxuIiwKKwkJCSAgIkZpZWxkV3JpdGUgW1RPXTogICBPYmogJXAgKCVzOiVYKSwgQml0TGVuICVYLCBCaXRPZmYgJVgsIEJ5dGVPZmYgJVhcbiIsCiAJCQkgIG9ial9kZXNjLAogCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSwKIAkJCSAgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpLApAQCAtMzc1LDcgKzM3Nyw3IEBACiAJLyogRnJlZSB0ZW1wb3JhcnkgYnVmZmVyIGlmIHdlIHVzZWQgb25lICovCiAKIAlpZiAobmV3X2J1ZmZlcikgewotCQlBQ1BJX01FTV9GUkVFKG5ld19idWZmZXIpOworCQlBQ1BJX0ZSRUUobmV3X2J1ZmZlcik7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmbGRpby5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZmxkaW8uYwppbmRleCBiZDFhZjM1Li4wNTEwNTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGZsZGlvLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZ25fZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJleF9zZXR1cF9yZWdpb24iLCBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoZXhfc2V0dXBfcmVnaW9uLCBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CiAKIAlyZ25fZGVzYyA9IG9ial9kZXNjLT5jb21tb25fZmllbGQucmVnaW9uX29iajsKIApAQCAtMTEyLDcgKzExMiwxOCBAQAogCQl9CiAJfQogCisJLyogRXhpdCBpZiBBZGRyZXNzL0xlbmd0aCBoYXZlIGJlZW4gZGlzYWxsb3dlZCBieSB0aGUgaG9zdCBPUyAqLworCisJaWYgKHJnbl9kZXNjLT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfSU5WQUxJRCkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0lMTEVHQUxfQUREUkVTUyk7CisJfQorCisJLyoKKwkgKiBFeGl0IG5vdyBmb3IgU01CdXMgYWRkcmVzcyBzcGFjZSwgaXQgaGFzIGEgbm9uLWxpbmVhciBhZGRyZXNzIHNwYWNlCisJICogYW5kIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBkaXJlY3RseSB2YWxpZGF0ZWQKKwkgKi8KIAlpZiAocmduX2Rlc2MtPnJlZ2lvbi5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TTUJVUykgeworCiAJCS8qIFNNQnVzIGhhcyBhIG5vbi1saW5lYXIgYWRkcmVzcyBzcGFjZSAqLwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0xMzQsMTAgKzE0NSwxMCBAQAogCSAqIGxlbmd0aCBvZiBvbmUgZmllbGQgZGF0dW0gKGFjY2VzcyB3aWR0aCkgbXVzdCBmaXQgd2l0aGluIHRoZSByZWdpb24uCiAJICogKFJlZ2lvbiBsZW5ndGggaXMgc3BlY2lmaWVkIGluIGJ5dGVzKQogCSAqLwotCWlmIChyZ25fZGVzYy0+cmVnaW9uLmxlbmd0aCA8IChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQgKwotCQkJCSAgICAgICBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCArCi0JCQkJICAgICAgIG9ial9kZXNjLT5jb21tb25fZmllbGQuCi0JCQkJICAgICAgIGFjY2Vzc19ieXRlX3dpZHRoKSkgeworCWlmIChyZ25fZGVzYy0+cmVnaW9uLmxlbmd0aCA8CisJICAgIChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQgKworCSAgICAgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQgKworCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCkpIHsKIAkJaWYgKGFjcGlfZ2JsX2VuYWJsZV9pbnRlcnByZXRlcl9zbGFjaykgewogCQkJLyoKIAkJCSAqIFNsYWNrIG1vZGUgb25seTogIFdlIHdpbGwgZ28gYWhlYWQgYW5kIGFsbG93IGFjY2VzcyB0byB0aGlzCkBAIC0yMTcsNyArMjI4LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZ25fZGVzYzsKIAlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2FjY2Vzc19yZWdpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2FjY2Vzc19yZWdpb24pOwogCiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB0aGUgcmVnaW9uIG9wZXJhbmRzIGFyZSBmdWxseSBldmFsdWF0ZWQgYW5kIHZlcmlmeQpAQCAtMjQ2LDcgKzI1Nyw3IEBACiAJfQogCiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfQkZJRUxELAotCQkJICAgICAgIiBSZWdpb24gWyVzOiVYXSwgV2lkdGggJVgsIGJ5dGVfYmFzZSAlWCwgT2Zmc2V0ICVYIGF0ICU4LjhYJTguOFhcbiIsCisJCQkgICAgICAiIFJlZ2lvbiBbJXM6JVhdLCBXaWR0aCAlWCwgQnl0ZUJhc2UgJVgsIE9mZnNldCAlWCBhdCAlOC44WCU4LjhYXG4iLAogCQkJICAgICAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUocmduX2Rlc2MtPnJlZ2lvbi4KIAkJCQkJCSAgICAgIHNwYWNlX2lkKSwKIAkJCSAgICAgIHJnbl9kZXNjLT5yZWdpb24uc3BhY2VfaWQsCkBAIC0zNTIsNyArMzYzLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9pbnRlZ2VyIGxvY2FsX3ZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoImV4X2ZpZWxkX2RhdHVtX2lvIiwgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGV4X2ZpZWxkX2RhdHVtX2lvLCBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CiAKIAlpZiAocmVhZF93cml0ZSA9PSBBQ1BJX1JFQUQpIHsKIAkJaWYgKCF2YWx1ZSkgewpAQCAtNDg3LDEwICs0OTgsMTEgQEAKIAkJfQogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJCSAgIkkvTyB0byBEYXRhIFJlZ2lzdGVyOiB2YWx1ZV9wdHIgJXBcbiIsCisJCQkJICAiSS9PIHRvIERhdGEgUmVnaXN0ZXI6IFZhbHVlUHRyICVwXG4iLAogCQkJCSAgdmFsdWUpKTsKIAogCQlpZiAocmVhZF93cml0ZSA9PSBBQ1BJX1JFQUQpIHsKKwogCQkJLyogUmVhZCB0aGUgZGF0dW0gZnJvbSB0aGUgZGF0YV9yZWdpc3RlciAqLwogCiAJCQlzdGF0dXMgPQpAQCAtNTU5LDcgKzU3MSw3IEBACiAJYWNwaV9pbnRlZ2VyIG1lcmdlZF92YWx1ZTsKIAlhY3BpX2ludGVnZXIgY3VycmVudF92YWx1ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJleF93cml0ZV93aXRoX3VwZGF0ZV9ydWxlIiwgbWFzayk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoZXhfd3JpdGVfd2l0aF91cGRhdGVfcnVsZSwgbWFzayk7CiAKIAkvKiBTdGFydCB3aXRoIHRoZSBuZXcgYml0cyAgKi8KIApAQCAtNTY4LDYgKzU4MCw3IEBACiAJLyogSWYgdGhlIG1hc2sgaXMgYWxsIG9uZXMsIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHVwZGF0ZSBydWxlICovCiAKIAlpZiAobWFzayAhPSBBQ1BJX0lOVEVHRVJfTUFYKSB7CisKIAkJLyogRGVjb2RlIHRoZSB1cGRhdGUgcnVsZSAqLwogCiAJCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC4KQEAgLTYxNCw3ICs2MjcsNyBAQAogCQlkZWZhdWx0OgogCiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiVW5rbm93biB1cGRhdGVfcnVsZSB2YWx1ZTogJVgiLAorCQkJCSAgICAiVW5rbm93biBVcGRhdGVSdWxlIHZhbHVlOiAlWCIsCiAJCQkJICAgIChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLgogCQkJCSAgICAgZmllbGRfZmxhZ3MgJgogCQkJCSAgICAgQU1MX0ZJRUxEX1VQREFURV9SVUxFX01BU0spKSk7CkBAIC02MjMsNyArNjM2LDcgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCSAgIk1hc2sgJTguOFglOC44WCwgZGF0dW1fb2Zmc2V0ICVYLCBXaWR0aCAlWCwgVmFsdWUgJTguOFglOC44WCwgbWVyZ2VkX3ZhbHVlICU4LjhYJTguOFhcbiIsCisJCQkgICJNYXNrICU4LjhYJTguOFgsIERhdHVtT2Zmc2V0ICVYLCBXaWR0aCAlWCwgVmFsdWUgJTguOFglOC44WCwgTWVyZ2VkVmFsdWUgJTguOFglOC44WFxuIiwKIAkJCSAgQUNQSV9GT1JNQVRfVUlOVDY0KG1hc2spLAogCQkJICBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCwKIAkJCSAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCwKQEAgLTY2Niw3ICs2NzksNyBAQAogCXUzMiBmaWVsZF9kYXR1bV9jb3VudDsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2V4dHJhY3RfZnJvbV9maWVsZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZXh0cmFjdF9mcm9tX2ZpZWxkKTsKIAogCS8qIFZhbGlkYXRlIHRhcmdldCBidWZmZXIgYW5kIGNsZWFyIGl0ICovCiAKQEAgLTcwNCw2ICs3MTcsNyBAQAogCS8qIFJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZpZWxkICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgZmllbGRfZGF0dW1fY291bnQ7IGkrKykgeworCiAJCS8qIEdldCBuZXh0IGlucHV0IGRhdHVtIGZyb20gdGhlIGZpZWxkICovCiAKIAkJZmllbGRfb2Zmc2V0ICs9IG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2J5dGVfd2lkdGg7CkBAIC03NzEsNiArNzg1LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9pbnRlZ2VyIG1hc2s7CisJYWNwaV9pbnRlZ2VyIHdpZHRoX21hc2s7CiAJYWNwaV9pbnRlZ2VyIG1lcmdlZF9kYXR1bTsKIAlhY3BpX2ludGVnZXIgcmF3X2RhdHVtID0gMDsKIAl1MzIgZmllbGRfb2Zmc2V0ID0gMDsKQEAgLTc4MCw3ICs3OTUsNyBAQAogCXUzMiBmaWVsZF9kYXR1bV9jb3VudDsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2luc2VydF9pbnRvX2ZpZWxkIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9pbnNlcnRfaW50b19maWVsZCk7CiAKIAkvKiBWYWxpZGF0ZSBpbnB1dCBidWZmZXIgKi8KIApAQCAtNzk1LDE1ICs4MTAsMjAgQEAKIAogCS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBkYXR1bXMgKGFjY2VzcyB3aWR0aCBkYXRhIGl0ZW1zKSAqLwogCisJd2lkdGhfbWFzayA9CisJICAgIEFDUElfTUFTS19CSVRTX0FCT1ZFKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCk7CiAJbWFzayA9Ci0JICAgIEFDUElfTUFTS19CSVRTX0JFTE9XKG9ial9kZXNjLT5jb21tb25fZmllbGQuc3RhcnRfZmllbGRfYml0X29mZnNldCk7Ci0JZGF0dW1fY291bnQgPQotCSAgICBBQ1BJX1JPVU5EX1VQX1RPKG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCwKLQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYml0X3dpZHRoKTsKLQlmaWVsZF9kYXR1bV9jb3VudCA9Ci0JICAgIEFDUElfUk9VTkRfVVBfVE8ob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iaXRfbGVuZ3RoICsKLQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0LAotCQkJICAgICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmFjY2Vzc19iaXRfd2lkdGgpOworCSAgICB3aWR0aF9tYXNrICYgQUNQSV9NQVNLX0JJVFNfQkVMT1cob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC4KKwkJCQkJICAgICAgc3RhcnRfZmllbGRfYml0X29mZnNldCk7CisKKwlkYXR1bV9jb3VudCA9IEFDUElfUk9VTkRfVVBfVE8ob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iaXRfbGVuZ3RoLAorCQkJCSAgICAgICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmFjY2Vzc19iaXRfd2lkdGgpOworCisJZmllbGRfZGF0dW1fY291bnQgPSBBQ1BJX1JPVU5EX1VQX1RPKG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCArCisJCQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC4KKwkJCQkJICAgICBzdGFydF9maWVsZF9iaXRfb2Zmc2V0LAorCQkJCQkgICAgIG9ial9kZXNjLT5jb21tb25fZmllbGQuCisJCQkJCSAgICAgYWNjZXNzX2JpdF93aWR0aCk7CiAKIAkvKiBHZXQgaW5pdGlhbCBEYXR1bSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgKi8KIApAQCAtODE3LDYgKzgzNyw3IEBACiAJLyogV3JpdGUgdGhlIGVudGlyZSBmaWVsZCAqLwogCiAJZm9yIChpID0gMTsgaSA8IGZpZWxkX2RhdHVtX2NvdW50OyBpKyspIHsKKwogCQkvKiBXcml0ZSBtZXJnZWQgZGF0dW0gdG8gdGhlIHRhcmdldCBmaWVsZCAqLwogCiAJCW1lcmdlZF9kYXR1bSAmPSBtYXNrOwpAQCAtODMzLDcgKzg1NCw3IEBACiAJCW1lcmdlZF9kYXR1bSA9IHJhd19kYXR1bSA+PgogCQkgICAgKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCAtCiAJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0KTsKLQkJbWFzayA9IEFDUElfSU5URUdFUl9NQVg7CisJCW1hc2sgPSB3aWR0aF9tYXNrOwogCiAJCWlmIChpID09IGRhdHVtX2NvdW50KSB7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG1pc2MuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG1pc2MuYwppbmRleCA0OGMxOGQyLi5iZDk4YWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bWlzYy5jCkBAIC03Miw3ICs3Miw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVmZXJlbmNlX29iajsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWZlcmVuY2VkX29iajsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9nZXRfb2JqZWN0X3JlZmVyZW5jZSIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9nZXRfb2JqZWN0X3JlZmVyZW5jZSwgb2JqX2Rlc2MpOwogCiAJKnJldHVybl9kZXNjID0gTlVMTDsKIApAQCAtMTY4LDcgKzE2OCw3IEBACiAJYWNwaV9zaXplIGxlbmd0aDE7CiAJYWNwaV9zaXplIG5ld19sZW5ndGg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9jb25jYXRfdGVtcGxhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2NvbmNhdF90ZW1wbGF0ZSk7CiAKIAkvKgogCSAqIEZpbmQgdGhlIGVuZF90YWcgZGVzY3JpcHRvciBpbiBlYWNoIHJlc291cmNlIHRlbXBsYXRlLgpAQCAtMjUwLDcgKzI1MCw3IEBACiAJY2hhciAqbmV3X2J1ZjsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9kb19jb25jYXRlbmF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZG9fY29uY2F0ZW5hdGUpOwogCiAJLyoKIAkgKiBDb252ZXJ0IHRoZSBzZWNvbmQgb3BlcmFuZCBpZiBuZWNlc3NhcnkuICBUaGUgZmlyc3Qgb3BlcmFuZApAQCAtNDQ1LDEwICs0NDUsMjQgQEAKIAogCWNhc2UgQU1MX1NISUZUX0xFRlRfT1A6CS8qIHNoaWZ0X2xlZnQgKE9wZXJhbmQsIHNoaWZ0X2NvdW50LCBSZXN1bHQpICovCiAKKwkJLyoKKwkJICogV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgc2hpZnRjb3VudCBpcyBsYXJnZXIgdGhhbiB0aGUgaW50ZWdlciBiaXQKKwkJICogd2lkdGggc2luY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgaXMgbm90IHdlbGwtZGVmaW5lZCBpbiB0aGUgQyBsYW5ndWFnZS4KKwkJICovCisJCWlmIChpbnRlZ2VyMSA+PSBhY3BpX2dibF9pbnRlZ2VyX2JpdF93aWR0aCkgeworCQkJcmV0dXJuICgwKTsKKwkJfQogCQlyZXR1cm4gKGludGVnZXIwIDw8IGludGVnZXIxKTsKIAogCWNhc2UgQU1MX1NISUZUX1JJR0hUX09QOgkvKiBzaGlmdF9yaWdodCAoT3BlcmFuZCwgc2hpZnRfY291bnQsIFJlc3VsdCkgKi8KIAorCQkvKgorCQkgKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBzaGlmdGNvdW50IGlzIGxhcmdlciB0aGFuIHRoZSBpbnRlZ2VyIGJpdAorCQkgKiB3aWR0aCBzaW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhpcyBpcyBub3Qgd2VsbC1kZWZpbmVkIGluIHRoZSBDIGxhbmd1YWdlLgorCQkgKi8KKwkJaWYgKGludGVnZXIxID49IGFjcGlfZ2JsX2ludGVnZXJfYml0X3dpZHRoKSB7CisJCQlyZXR1cm4gKDApOworCQl9CiAJCXJldHVybiAoaW50ZWdlcjAgPj4gaW50ZWdlcjEpOwogCiAJY2FzZSBBTUxfU1VCVFJBQ1RfT1A6CS8qIFN1YnRyYWN0IChJbnRlZ2VyMCwgSW50ZWdlcjEsIFJlc3VsdCkgKi8KQEAgLTQ4OSw3ICs1MDMsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXU4IGxvY2FsX3Jlc3VsdCA9IEZBTFNFOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfZG9fbG9naWNhbF9udW1lcmljX29wIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9kb19sb2dpY2FsX251bWVyaWNfb3ApOwogCiAJc3dpdGNoIChvcGNvZGUpIHsKIAljYXNlIEFNTF9MQU5EX09QOgkvKiBMQW5kIChJbnRlZ2VyMCwgSW50ZWdlcjEpICovCkBAIC01NTcsNyArNTcxLDcgQEAKIAl1OCBsb2NhbF9yZXN1bHQgPSBGQUxTRTsKIAlpbnQgY29tcGFyZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2RvX2xvZ2ljYWxfb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2RvX2xvZ2ljYWxfb3ApOwogCiAJLyoKIAkgKiBDb252ZXJ0IHRoZSBzZWNvbmQgb3BlcmFuZCBpZiBuZWNlc3NhcnkuICBUaGUgZmlyc3Qgb3BlcmFuZApAQCAtNjQ5LDYgKzY2Myw3IEBACiAJCQkvKiBMZW5ndGggYW5kIGFsbCBieXRlcyBtdXN0IGJlIGVxdWFsICovCiAKIAkJCWlmICgobGVuZ3RoMCA9PSBsZW5ndGgxKSAmJiAoY29tcGFyZSA9PSAwKSkgeworCiAJCQkJLyogTGVuZ3RoIGFuZCBhbGwgYnl0ZXMgbWF0Y2ggPT0+IFRSVUUgKi8KIAogCQkJCWxvY2FsX3Jlc3VsdCA9IFRSVUU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bXV0ZXguYwppbmRleCBmODQzYjIyLi45MzA5OGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG11dGV4LmMKQEAgLTYxLDcgKzYxLDcgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKLSAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYSBtdXRleCBmcm9tIHRoZSAiYWNxdWlyZWRfbXV0ZXgiIGxpc3QKKyAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYSBtdXRleCBmcm9tIHRoZSAiQWNxdWlyZWRNdXRleCIgbGlzdAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTk1LDcgKzk1LDcgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKLSAqIERFU0NSSVBUSU9OOiBBZGQgYSBtdXRleCB0byB0aGUgImFjcXVpcmVkX211dGV4IiBsaXN0IGZvciB0aGlzIHdhbGsKKyAqIERFU0NSSVBUSU9OOiBBZGQgYSBtdXRleCB0byB0aGUgIkFjcXVpcmVkTXV0ZXgiIGxpc3QgZm9yIHRoaXMgd2FsawogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9hY3F1aXJlX211dGV4Iiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2FjcXVpcmVfbXV0ZXgsIG9ial9kZXNjKTsKIAogCWlmICghb2JqX2Rlc2MpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJICovCiAJaWYgKHdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsID4gb2JqX2Rlc2MtPm11dGV4LnN5bmNfbGV2ZWwpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiQ2Fubm90IGFjcXVpcmUgTXV0ZXggWyU0LjRzXSwgaW5jb3JyZWN0IHN5bmNfbGV2ZWwiLAorCQkJICAgICJDYW5ub3QgYWNxdWlyZSBNdXRleCBbJTQuNHNdLCBpbmNvcnJlY3QgU3luY0xldmVsIiwKIAkJCSAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUob2JqX2Rlc2MtPm11dGV4Lm5vZGUpKSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTVVURVhfT1JERVIpOwogCX0KQEAgLTE3Myw2ICsxNzMsNyBAQAogCS8qIFN1cHBvcnQgZm9yIG11bHRpcGxlIGFjcXVpcmVzIGJ5IHRoZSBvd25pbmcgdGhyZWFkICovCiAKIAlpZiAob2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZCkgeworCiAJCS8qIFNwZWNpYWwgY2FzZSBmb3IgR2xvYmFsIExvY2ssIGFsbG93IGFsbCB0aHJlYWRzICovCiAKIAkJaWYgKChvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkLT50aHJlYWRfaWQgPT0KQEAgLTE5Miw2ICsxOTMsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9leF9zeXN0ZW1fYWNxdWlyZV9tdXRleCh0aW1lX2Rlc2MsIG9ial9kZXNjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkvKiBJbmNsdWRlcyBmYWlsdXJlIGZyb20gYSB0aW1lb3V0IG9uIHRpbWVfZGVzYyAqLwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpAQCAtMjMyLDcgKzIzNCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfcmVsZWFzZV9tdXRleCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfcmVsZWFzZV9tdXRleCk7CiAKIAlpZiAoIW9ial9kZXNjKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTI3Nyw3ICsyNzksNyBAQAogCSAqLwogCWlmIChvYmpfZGVzYy0+bXV0ZXguc3luY19sZXZlbCA+IHdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIkNhbm5vdCByZWxlYXNlIE11dGV4IFslNC40c10sIGluY29ycmVjdCBzeW5jX2xldmVsIiwKKwkJCSAgICAiQ2Fubm90IHJlbGVhc2UgTXV0ZXggWyU0LjRzXSwgaW5jb3JyZWN0IFN5bmNMZXZlbCIsCiAJCQkgICAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG9ial9kZXNjLT5tdXRleC5ub2RlKSkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX01VVEVYX09SREVSKTsKIAl9CkBAIC0yODYsNiArMjg4LDcgQEAKIAogCW9ial9kZXNjLT5tdXRleC5hY3F1aXNpdGlvbl9kZXB0aC0tOwogCWlmIChvYmpfZGVzYy0+bXV0ZXguYWNxdWlzaXRpb25fZGVwdGggIT0gMCkgeworCiAJCS8qIEp1c3QgZGVjcmVtZW50IHRoZSBkZXB0aCBhbmQgcmV0dXJuICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG5hbWVzLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhuYW1lcy5jCmluZGV4IDA1NGZlNWUuLmQzZDcwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG5hbWVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bmFtZXMuYwpAQCAtNzcsNyArNzcsNyBAQAogCWNoYXIgKm5hbWVfc3RyaW5nOwogCXUzMiBzaXplX25lZWRlZDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2FsbG9jYXRlX25hbWVfc3RyaW5nIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9hbGxvY2F0ZV9uYW1lX3N0cmluZyk7CiAKIAkvKgogCSAqIEFsbG93IHJvb20gZm9yIGFsbCBcIGFuZCBeIHByZWZpeGVzLCBhbGwgc2VnbWVudHMgYW5kIGEgbXVsdGlfbmFtZV9wcmVmaXguCkBAIC04NSw2ICs4NSw3IEBACiAJICogVGhpcyBtYXkgYWN0dWFsbHkgYmUgc29tZXdoYXQgbG9uZ2VyIHRoYW4gbmVlZGVkLgogCSAqLwogCWlmIChwcmVmaXhfY291bnQgPT0gQUNQSV9VSU5UMzJfTUFYKSB7CisKIAkJLyogU3BlY2lhbCBjYXNlIGZvciByb290ICovCiAKIAkJc2l6ZV9uZWVkZWQgPSAxICsgKEFDUElfTkFNRV9TSVpFICogbnVtX25hbWVfc2VncykgKyAyICsgMTsKQEAgLTk3LDcgKzk4LDcgQEAKIAkgKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIG5hbWUuCiAJICogVGhpcyBidWZmZXIgbXVzdCBiZSBkZWxldGVkIGJ5IHRoZSBjYWxsZXIhCiAJICovCi0JbmFtZV9zdHJpbmcgPSBBQ1BJX01FTV9BTExPQ0FURShzaXplX25lZWRlZCk7CisJbmFtZV9zdHJpbmcgPSBBQ1BJX0FMTE9DQVRFKHNpemVfbmVlZGVkKTsKIAlpZiAoIW5hbWVfc3RyaW5nKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBzaXplICVkIiwgc2l6ZV9uZWVkZWQpKTsKQEAgLTExOSwxMSArMTIwLDEzIEBACiAJLyogU2V0IHVwIER1YWwgb3IgTXVsdGkgcHJlZml4ZXMgaWYgbmVlZGVkICovCiAKIAlpZiAobnVtX25hbWVfc2VncyA+IDIpIHsKKwogCQkvKiBTZXQgdXAgbXVsdGkgcHJlZml4ZXMgICAqLwogCiAJCSp0ZW1wX3B0cisrID0gQU1MX01VTFRJX05BTUVfUFJFRklYX09QOwogCQkqdGVtcF9wdHIrKyA9IChjaGFyKW51bV9uYW1lX3NlZ3M7CiAJfSBlbHNlIGlmICgyID09IG51bV9uYW1lX3NlZ3MpIHsKKwogCQkvKiBTZXQgdXAgZHVhbCBwcmVmaXhlcyAqLwogCiAJCSp0ZW1wX3B0cisrID0gQU1MX0RVQUxfTkFNRV9QUkVGSVg7CkBAIC0xNTksNyArMTYyLDcgQEAKIAl1MzIgaW5kZXg7CiAJY2hhciBjaGFyX2J1Zls1XTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X25hbWVfc2VnbWVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfbmFtZV9zZWdtZW50KTsKIAogCS8qCiAJICogSWYgZmlyc3QgY2hhcmFjdGVyIGlzIGEgZGlnaXQsIHRoZW4gd2Uga25vdyB0aGF0IHdlIGFyZW4ndCBsb29raW5nIGF0IGEKQEAgLTE3Niw3ICsxNzksNyBAQAogCiAJZm9yIChpbmRleCA9IDA7CiAJICAgICAoaW5kZXggPCBBQ1BJX05BTUVfU0laRSkKLQkgICAgICYmIChhY3BpX3V0X3ZhbGlkX2FjcGlfY2hhcmFjdGVyKCphbWxfYWRkcmVzcykpOyBpbmRleCsrKSB7CisJICAgICAmJiAoYWNwaV91dF92YWxpZF9hY3BpX2NoYXIoKmFtbF9hZGRyZXNzLCAwKSk7IGluZGV4KyspIHsKIAkJY2hhcl9idWZbaW5kZXhdID0gKmFtbF9hZGRyZXNzKys7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwgIiVjXG4iLCBjaGFyX2J1ZltpbmRleF0pKTsKIAl9CkBAIC0xODQsNiArMTg3LDcgQEAKIAkvKiBWYWxpZCBuYW1lIHNlZ21lbnQgICovCiAKIAlpZiAoaW5kZXggPT0gNCkgeworCiAJCS8qIEZvdW5kIDQgdmFsaWQgY2hhcmFjdGVycyAqLwogCiAJCWNoYXJfYnVmWzRdID0gJ1wwJzsKQEAgLTI0OSwxMSArMjUzLDEyIEBACiAJdTMyIHByZWZpeF9jb3VudCA9IDA7CiAJdTggaGFzX3ByZWZpeCA9IEZBTFNFOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2dldF9uYW1lX3N0cmluZyIsIGFtbF9hZGRyZXNzKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9nZXRfbmFtZV9zdHJpbmcsIGFtbF9hZGRyZXNzKTsKIAogCWlmIChBQ1BJX1RZUEVfTE9DQUxfUkVHSU9OX0ZJRUxEID09IGRhdGFfdHlwZSB8fAogCSAgICBBQ1BJX1RZUEVfTE9DQUxfQkFOS19GSUVMRCA9PSBkYXRhX3R5cGUgfHwKIAkgICAgQUNQSV9UWVBFX0xPQ0FMX0lOREVYX0ZJRUxEID09IGRhdGFfdHlwZSkgeworCiAJCS8qIERpc2FsbG93IHByZWZpeGVzIGZvciB0eXBlcyBhc3NvY2lhdGVkIHdpdGggZmllbGRfdW5pdCBuYW1lcyAqLwogCiAJCW5hbWVfc3RyaW5nID0gYWNwaV9leF9hbGxvY2F0ZV9uYW1lX3N0cmluZygwLCAxKTsKQEAgLTI3Miw3ICsyNzcsNyBAQAogCQljYXNlIEFNTF9ST09UX1BSRUZJWDoKIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9MT0FELAotCQkJCQkgICJyb290X3ByZWZpeChcXCkgYXQgJXBcbiIsCisJCQkJCSAgIlJvb3RQcmVmaXgoXFwpIGF0ICVwXG4iLAogCQkJCQkgIGFtbF9hZGRyZXNzKSk7CiAKIAkJCS8qCkBAIC0yOTAsNyArMjk1LDcgQEAKIAogCQkJZG8gewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKLQkJCQkJCSAgInBhcmVudF9wcmVmaXggKF4pIGF0ICVwXG4iLAorCQkJCQkJICAiUGFyZW50UHJlZml4ICheKSBhdCAlcFxuIiwKIAkJCQkJCSAgYW1sX2FkZHJlc3MpKTsKIAogCQkJCWFtbF9hZGRyZXNzKys7CkBAIC0zMTQsNyArMzE5LDcgQEAKIAkJY2FzZSBBTUxfRFVBTF9OQU1FX1BSRUZJWDoKIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9MT0FELAotCQkJCQkgICJkdWFsX25hbWVfcHJlZml4IGF0ICVwXG4iLAorCQkJCQkgICJEdWFsTmFtZVByZWZpeCBhdCAlcFxuIiwKIAkJCQkJICBhbWxfYWRkcmVzcykpOwogCiAJCQlhbWxfYWRkcmVzcysrOwpAQCAtMzQxLDcgKzM0Niw3IEBACiAJCWNhc2UgQU1MX01VTFRJX05BTUVfUFJFRklYX09QOgogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0xPQUQsCi0JCQkJCSAgIm11bHRpX25hbWVfcHJlZml4IGF0ICVwXG4iLAorCQkJCQkgICJNdWx0aU5hbWVQcmVmaXggYXQgJXBcbiIsCiAJCQkJCSAgYW1sX2FkZHJlc3MpKTsKIAogCQkJLyogRmV0Y2ggY291bnQgb2Ygc2VnbWVudHMgcmVtYWluaW5nIGluIG5hbWUgcGF0aCAqLwpAQCAtMzc3LDcgKzM4Miw3IEBACiAKIAkJCWlmIChwcmVmaXhfY291bnQgPT0gQUNQSV9VSU5UMzJfTUFYKSB7CiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCQkJICAibmFtZV9zZWcgaXMgXCJcXFwiIGZvbGxvd2VkIGJ5IE5VTExcbiIpKTsKKwkJCQkJCSAgIk5hbWVTZWcgaXMgXCJcXFwiIGZvbGxvd2VkIGJ5IE5VTExcbiIpKTsKIAkJCX0KIAogCQkJLyogQ29uc3VtZSB0aGUgTlVMTCBieXRlICovCkBAIC00MTAsNiArNDE1LDcgQEAKIAl9CiAKIAlpZiAoQUVfQ1RSTF9QRU5ESU5HID09IHN0YXR1cyAmJiBoYXNfcHJlZml4KSB7CisKIAkJLyogUmFuIG91dCBvZiBzZWdtZW50cyBhZnRlciBwcm9jZXNzaW5nIGEgcHJlZml4ICovCiAKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk1hbGZvcm1lZCBOYW1lIGF0ICVwIiwgbmFtZV9zdHJpbmcpKTsKQEAgLTQxOCw3ICs0MjQsNyBAQAogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWlmIChuYW1lX3N0cmluZykgewotCQkJQUNQSV9NRU1fRlJFRShuYW1lX3N0cmluZyk7CisJCQlBQ1BJX0ZSRUUobmFtZV9zdHJpbmcpOwogCQl9CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMS5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4b3BhcmcxLmMKaW5kZXggMjNkMDgyMy4uNjM3NGQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4b3BhcmcxLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4b3BhcmcxLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYyA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzBBXzBUXzFSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMEFfMFRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAkvKiBFeGFtaW5lIHRoZSBBTUwgb3Bjb2RlICovCkBAIC0xNTAsNyArMTUwLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqb3BlcmFuZCA9ICZ3YWxrX3N0YXRlLT5vcGVyYW5kc1swXTsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKCJleF9vcGNvZGVfMUFfMFRfMFIiLAorCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGV4X29wY29kZV8xQV8wVF8wUiwKIAkJCQlhY3BpX3BzX2dldF9vcGNvZGVfbmFtZSh3YWxrX3N0YXRlLT5vcGNvZGUpKTsKIAogCS8qIEV4YW1pbmUgdGhlIEFNTCBvcGNvZGUgKi8KQEAgLTIxNiw3ICsyMTYsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipvcGVyYW5kID0gJndhbGtfc3RhdGUtPm9wZXJhbmRzWzBdOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8xQV8xVF8wUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzFBXzFUXzBSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJLyogRXhhbWluZSB0aGUgQU1MIG9wY29kZSAqLwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJYWNwaV9pbnRlZ2VyIHBvd2VyX29mX3RlbjsKIAlhY3BpX2ludGVnZXIgZGlnaXQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzFBXzFUXzFSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMUFfMVRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAkvKiBFeGFtaW5lIHRoZSBBTUwgb3Bjb2RlICovCkBAIC0zMjIsOCArMzIyLDkgQEAKIAogCQkJLyogU2luY2UgdGhlIGJpdCBwb3NpdGlvbiBpcyBvbmUtYmFzZWQsIHN1YnRyYWN0IGZyb20gMzMgKDY1KSAqLwogCi0JCQlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSA9IHRlbXAzMiA9PSAwID8gMCA6Ci0JCQkgICAgKEFDUElfSU5URUdFUl9CSVRfU0laRSArIDEpIC0gdGVtcDMyOworCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPQorCQkJICAgIHRlbXAzMiA9PQorCQkJICAgIDAgPyAwIDogKEFDUElfSU5URUdFUl9CSVRfU0laRSArIDEpIC0gdGVtcDMyOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBTUxfRlJPTV9CQ0RfT1A6CS8qIGZyb21fYmNkIChCQ0RWYWx1ZSwgUmVzdWx0KSAqLwpAQCAtMzQyLDYgKzM0Myw3IEBACiAJCQlmb3IgKGkgPSAwOwogCQkJICAgICAoaSA8IGFjcGlfZ2JsX2ludGVnZXJfbnliYmxlX3dpZHRoKSAmJiAoZGlnaXQgPiAwKTsKIAkJCSAgICAgaSsrKSB7CisKIAkJCQkvKiBHZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IDQtYml0IEJDRCBkaWdpdCAqLwogCiAJCQkJdGVtcDMyID0gKCh1MzIpIGRpZ2l0KSAmIDB4RjsKQEAgLTQ4Nyw2ICs0ODksNyBAQAogCQlzdGF0dXMgPSBhY3BpX2V4X2NvbnZlcnRfdG9fc3RyaW5nKG9wZXJhbmRbMF0sICZyZXR1cm5fZGVzYywKIAkJCQkJCSAgIEFDUElfRVhQTElDSVRfQ09OVkVSVF9ERUNJTUFMKTsKIAkJaWYgKHJldHVybl9kZXNjID09IG9wZXJhbmRbMF0pIHsKKwogCQkJLyogTm8gY29udmVyc2lvbiBwZXJmb3JtZWQsIGFkZCByZWYgdG8gaGFuZGxlIHJldHVybiB2YWx1ZSAqLwogCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAkJfQpAQCAtNDk3LDYgKzUwMCw3IEBACiAJCXN0YXR1cyA9IGFjcGlfZXhfY29udmVydF90b19zdHJpbmcob3BlcmFuZFswXSwgJnJldHVybl9kZXNjLAogCQkJCQkJICAgQUNQSV9FWFBMSUNJVF9DT05WRVJUX0hFWCk7CiAJCWlmIChyZXR1cm5fZGVzYyA9PSBvcGVyYW5kWzBdKSB7CisKIAkJCS8qIE5vIGNvbnZlcnNpb24gcGVyZm9ybWVkLCBhZGQgcmVmIHRvIGhhbmRsZSByZXR1cm4gdmFsdWUgKi8KIAkJCWFjcGlfdXRfYWRkX3JlZmVyZW5jZShyZXR1cm5fZGVzYyk7CiAJCX0KQEAgLTUwNiw2ICs1MTAsNyBAQAogCiAJCXN0YXR1cyA9IGFjcGlfZXhfY29udmVydF90b19idWZmZXIob3BlcmFuZFswXSwgJnJldHVybl9kZXNjKTsKIAkJaWYgKHJldHVybl9kZXNjID09IG9wZXJhbmRbMF0pIHsKKwogCQkJLyogTm8gY29udmVyc2lvbiBwZXJmb3JtZWQsIGFkZCByZWYgdG8gaGFuZGxlIHJldHVybiB2YWx1ZSAqLwogCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAkJfQpAQCAtNTE2LDYgKzUyMSw3IEBACiAJCXN0YXR1cyA9IGFjcGlfZXhfY29udmVydF90b19pbnRlZ2VyKG9wZXJhbmRbMF0sICZyZXR1cm5fZGVzYywKIAkJCQkJCSAgICBBQ1BJX0FOWV9CQVNFKTsKIAkJaWYgKHJldHVybl9kZXNjID09IG9wZXJhbmRbMF0pIHsKKwogCQkJLyogTm8gY29udmVyc2lvbiBwZXJmb3JtZWQsIGFkZCByZWYgdG8gaGFuZGxlIHJldHVybiB2YWx1ZSAqLwogCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAkJfQpAQCAtNTQxLDYgKzU0Nyw3IEBACiAJfQogCiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJLyogU3RvcmUgdGhlIHJldHVybiB2YWx1ZSBjb21wdXRlZCBhYm92ZSBpbnRvIHRoZSB0YXJnZXQgb2JqZWN0ICovCiAKIAkJc3RhdHVzID0gYWNwaV9leF9zdG9yZShyZXR1cm5fZGVzYywgb3BlcmFuZFsxXSwgd2Fsa19zdGF0ZSk7CkBAIC01NDgsMTYgKzU1NSwxOCBAQAogCiAgICAgICBjbGVhbnVwOgogCi0JaWYgKCF3YWxrX3N0YXRlLT5yZXN1bHRfb2JqKSB7Ci0JCXdhbGtfc3RhdGUtPnJlc3VsdF9vYmogPSByZXR1cm5fZGVzYzsKLQl9Ci0KIAkvKiBEZWxldGUgcmV0dXJuIG9iamVjdCBvbiBlcnJvciAqLwogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyZXR1cm5fZGVzYyk7CiAJfQogCisJLyogU2F2ZSByZXR1cm4gb2JqZWN0IG9uIHN1Y2Nlc3MgKi8KKworCWVsc2UgaWYgKCF3YWxrX3N0YXRlLT5yZXN1bHRfb2JqKSB7CisJCXdhbGtfc3RhdGUtPnJlc3VsdF9vYmogPSByZXR1cm5fZGVzYzsKKwl9CisKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtNTgyLDcgKzU5MSw3IEBACiAJdTMyIHR5cGU7CiAJYWNwaV9pbnRlZ2VyIHZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8xQV8wVF8xUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzFBXzBUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJLyogRXhhbWluZSB0aGUgQU1MIG9wY29kZSAqLwpAQCAtNjI1LDYgKzYzNCw3IEBACiAJCXRlbXBfZGVzYyA9IG9wZXJhbmRbMF07CiAJCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUodGVtcF9kZXNjKSA9PQogCQkgICAgQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkgeworCiAJCQkvKiBJbnRlcm5hbCByZWZlcmVuY2Ugb2JqZWN0IC0gcHJldmVudCBkZWxldGlvbiAqLwogCiAJCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2UodGVtcF9kZXNjKTsKQEAgLTY4OSw2ICs2OTksNyBAQAogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQorCiAJCS8qIEFsbG9jYXRlIGEgZGVzY3JpcHRvciB0byBob2xkIHRoZSB0eXBlLiAqLwogCiAJCXJldHVybl9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9JTlRFR0VSKTsKQEAgLTc3Nyw4ICs3ODgsMjUgQEAKIAogCQkvKiBDaGVjayBmb3IgYSBtZXRob2QgbG9jYWwgb3IgYXJndW1lbnQsIG9yIHN0YW5kYWxvbmUgU3RyaW5nICovCiAKLQkJaWYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShvcGVyYW5kWzBdKSAhPQorCQlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG9wZXJhbmRbMF0pID09CiAJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgeworCQkJdGVtcF9kZXNjID0KKwkJCSAgICBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3QoKHN0cnVjdAorCQkJCQkJCSBhY3BpX25hbWVzcGFjZV9ub2RlICopCisJCQkJCQkJb3BlcmFuZFswXSk7CisJCQlpZiAodGVtcF9kZXNjCisJCQkgICAgJiYKKwkJCSAgICAoKEFDUElfR0VUX09CSkVDVF9UWVBFKHRlbXBfZGVzYykgPT0KKwkJCSAgICAgIEFDUElfVFlQRV9TVFJJTkcpCisJCQkgICAgIHx8IChBQ1BJX0dFVF9PQkpFQ1RfVFlQRSh0ZW1wX2Rlc2MpID09CisJCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpKSkgeworCQkJCW9wZXJhbmRbMF0gPSB0ZW1wX2Rlc2M7CisJCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHRlbXBfZGVzYyk7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQl9IGVsc2UgewogCQkJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kWzBdKSkgewogCQkJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFOgogCQkJCS8qCkBAIC04MjcsMjYgKzg1NSwzNSBAQAogCQkJCWJyZWFrOwogCiAJCQljYXNlIEFDUElfVFlQRV9TVFJJTkc6CisJCQkJYnJlYWs7CiAKKwkJCWRlZmF1bHQ6CisJCQkJc3RhdHVzID0gQUVfQU1MX09QRVJBTkRfVFlQRTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCX0KKworCQlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG9wZXJhbmRbMF0pICE9CisJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgeworCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmRbMF0pID09CisJCQkgICAgQUNQSV9UWVBFX1NUUklORykgewogCQkJCS8qCiAJCQkJICogVGhpcyBpcyBhIGRlcmVmX29mIChTdHJpbmcpLiBUaGUgc3RyaW5nIGlzIGEgcmVmZXJlbmNlCiAJCQkJICogdG8gYSBuYW1lZCBBQ1BJIG9iamVjdC4KIAkJCQkgKgogCQkJCSAqIDEpIEZpbmQgdGhlIG93bmluZyBOb2RlCi0JCQkJICogMikgRGVyZWZlcmVuY2UgdGhlIG5vZGUgdG8gYW4gYWN0dWFsIG9iamVjdC4gIENvdWxkIGJlIGEKKwkJCQkgKiAyKSBEZXJlZmVyZW5jZSB0aGUgbm9kZSB0byBhbiBhY3R1YWwgb2JqZWN0LiBDb3VsZCBiZSBhCiAJCQkJICogICAgRmllbGQsIHNvIHdlIG5lZWQgdG8gcmVzb2x2ZSB0aGUgbm9kZSB0byBhIHZhbHVlLgogCQkJCSAqLwogCQkJCXN0YXR1cyA9Ci0JCQkJICAgIGFjcGlfbnNfZ2V0X25vZGVfYnlfcGF0aChvcGVyYW5kWzBdLT5zdHJpbmcuCi0JCQkJCQkJICAgICBwb2ludGVyLAotCQkJCQkJCSAgICAgd2Fsa19zdGF0ZS0+Ci0JCQkJCQkJICAgICBzY29wZV9pbmZvLT5zY29wZS4KLQkJCQkJCQkgICAgIG5vZGUsCi0JCQkJCQkJICAgICBBQ1BJX05TX1NFQVJDSF9QQVJFTlQsCi0JCQkJCQkJICAgICBBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSCi0JCQkJCQkJICAgICAoc3RydWN0Ci0JCQkJCQkJICAgICAgYWNwaV9uYW1lc3BhY2Vfbm9kZSwKLQkJCQkJCQkgICAgICAmcmV0dXJuX2Rlc2MpKTsKKwkJCQkgICAgYWNwaV9uc19nZXRfbm9kZSh3YWxrX3N0YXRlLT5zY29wZV9pbmZvLT4KKwkJCQkJCSAgICAgc2NvcGUubm9kZSwKKwkJCQkJCSAgICAgb3BlcmFuZFswXS0+c3RyaW5nLnBvaW50ZXIsCisJCQkJCQkgICAgIEFDUElfTlNfU0VBUkNIX1BBUkVOVCwKKwkJCQkJCSAgICAgQUNQSV9DQVNUX0lORElSRUNUX1BUUgorCQkJCQkJICAgICAoc3RydWN0CisJCQkJCQkgICAgICBhY3BpX25hbWVzcGFjZV9ub2RlLAorCQkJCQkJICAgICAgJnJldHVybl9kZXNjKSk7CiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJCWdvdG8gY2xlYW51cDsKIAkJCQl9CkBAIC04NTcsMTEgKzg5NCw2IEBACiAJCQkJICAgICAoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsICZyZXR1cm5fZGVzYyksCiAJCQkJICAgICB3YWxrX3N0YXRlKTsKIAkJCQlnb3RvIGNsZWFudXA7Ci0KLQkJCWRlZmF1bHQ6Ci0KLQkJCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwotCQkJCWdvdG8gY2xlYW51cDsKIAkJCX0KIAkJfQogCkBAIC05MzcsMTMgKzk2OSwxMiBAQAogCQkJCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlCiAJCQkJCQkgICAgKHJldHVybl9kZXNjKTsKIAkJCQkJfQotCiAJCQkJCWJyZWFrOwogCiAJCQkJZGVmYXVsdDoKIAogCQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkJICAgICJVbmtub3duIEluZGV4IHRhcmdldF90eXBlICVYIGluIG9iaiAlcCIsCisJCQkJCQkgICAgIlVua25vd24gSW5kZXggVGFyZ2V0VHlwZSAlWCBpbiBvYmogJXAiLAogCQkJCQkJICAgIG9wZXJhbmRbMF0tPnJlZmVyZW5jZS4KIAkJCQkJCSAgICB0YXJnZXRfdHlwZSwgb3BlcmFuZFswXSkpOwogCQkJCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwpAQCAtOTU3LDcgKzk4OCw2IEBACiAKIAkJCQlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKHJldHVybl9kZXNjKSA9PQogCQkJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgewotCiAJCQkJCXJldHVybl9kZXNjID0KIAkJCQkJICAgIGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdCgoc3RydWN0CiAJCQkJCQkJCQkgYWNwaV9uYW1lc3BhY2Vfbm9kZQpAQCAtOTcyLDcgKzEwMDIsNyBAQAogCiAJCQlkZWZhdWx0OgogCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCSAgICAiVW5rbm93biBvcGNvZGUgaW4gcmVmKCVwKSAtICVYIiwKKwkJCQkJICAgICJVbmtub3duIG9wY29kZSBpbiByZWZlcmVuY2UoJXApIC0gJVgiLAogCQkJCQkgICAgb3BlcmFuZFswXSwKIAkJCQkJICAgIG9wZXJhbmRbMF0tPnJlZmVyZW5jZS5vcGNvZGUpKTsKIApAQCAtOTk4LDYgKzEwMjgsMTEgQEAKIAkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAl9CiAKLQl3YWxrX3N0YXRlLT5yZXN1bHRfb2JqID0gcmV0dXJuX2Rlc2M7CisJLyogU2F2ZSByZXR1cm4gb2JqZWN0IG9uIHN1Y2Nlc3MgKi8KKworCWVsc2UgeworCQl3YWxrX3N0YXRlLT5yZXN1bHRfb2JqID0gcmV0dXJuX2Rlc2M7CisJfQorCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzIuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMi5jCmluZGV4IGUyNjNhNWQuLjdkMmNiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMi5jCkBAIC05Miw3ICs5Miw3IEBACiAJdTMyIHZhbHVlOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8yQV8wVF8wUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzJBXzBUXzBSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJLyogRXhhbWluZSB0aGUgb3Bjb2RlICovCkBAIC0xMjEsNyArMTIxLDcgQEAKICNpZmRlZiBBQ1BJX0dQRV9OT1RJRllfQ0hFQ0sKIAkJLyoKIAkJICogR1BFIG1ldGhvZCB3YWtlL25vdGlmeSBjaGVjay4gIEhlcmUsIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgd2UKLQkJICogZG9uJ3QgcmVjZWl2ZSBhbnkgImRldmljZV93YWtlIiBOb3RpZmllcyBmcm9tIGEgR1BFIF9MeHggb3IgX0V4eAorCQkgKiBkb24ndCByZWNlaXZlIGFueSAiRGV2aWNlV2FrZSIgTm90aWZpZXMgZnJvbSBhIEdQRSBfTHh4IG9yIF9FeHgKIAkJICogR1BFIG1ldGhvZCBkdXJpbmcgc3lzdGVtIHJ1bnRpbWUuICBJZiB3ZSBkbywgdGhlIEdQRSBpcyBtYXJrZWQKIAkJICogYXMgIndha2Utb25seSIgYW5kIGRpc2FibGVkLgogCQkgKgpAQCAtMTM4LDYgKzEzOCw3IEBACiAJCQkgICAgYWNwaV9ldl9jaGVja19mb3Jfd2FrZV9vbmx5X2dwZSh3YWxrX3N0YXRlLT4KIAkJCQkJCQkgICAgZ3BlX2V2ZW50X2luZm8pOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJCQkvKiBBRV9XQUtFX09OTFlfR1BFIG9ubHkgZXJyb3IsIG1lYW5zIGlnbm9yZSB0aGlzIG5vdGlmeSAqLwogCiAJCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKQpAQCAtMTg1LDcgKzE4Niw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2MyID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzJBXzJUXzFSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMkFfMlRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAkvKiBFeGVjdXRlIHRoZSBvcGNvZGUgKi8KQEAgLTI1Miw2ICsyNTMsNyBAQAogCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyZXR1cm5fZGVzYzIpOwogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJLyogRGVsZXRlIHRoZSByZXR1cm4gb2JqZWN0ICovCiAKIAkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHJldHVybl9kZXNjMSk7CkBAIC0yODEsMTIgKzI4MywxMyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfc2l6ZSBsZW5ndGg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzJBXzFUXzFSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMkFfMVRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAkvKiBFeGVjdXRlIHRoZSBvcGNvZGUgKi8KIAogCWlmICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9NQVRIKSB7CisKIAkJLyogQWxsIHNpbXBsZSBtYXRoIG9wY29kZXMgKGFkZCwgZXRjLikgKi8KIAogCQlyZXR1cm5fZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX1RZUEVfSU5URUdFUik7CkBAIC0zODMsNTQgKzM4Niw3MCBAQAogCQkJZ290byBjbGVhbnVwOwogCQl9CiAKKwkJLyogSW5pdGlhbGl6ZSB0aGUgSW5kZXggcmVmZXJlbmNlIG9iamVjdCAqLworCiAJCWluZGV4ID0gb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZTsKKwkJcmV0dXJuX2Rlc2MtPnJlZmVyZW5jZS5vZmZzZXQgPSAodTMyKSBpbmRleDsKKwkJcmV0dXJuX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUgPSBBTUxfSU5ERVhfT1A7CiAKLQkJLyogQXQgdGhpcyBwb2ludCwgdGhlIFNvdXJjZSBvcGVyYW5kIGlzIGEgUGFja2FnZSwgQnVmZmVyLCBvciBTdHJpbmcgKi8KKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCwgdGhlIFNvdXJjZSBvcGVyYW5kIGlzIGEgU3RyaW5nLCBCdWZmZXIsIG9yIFBhY2thZ2UuCisJCSAqIFZlcmlmeSB0aGF0IHRoZSBpbmRleCBpcyB3aXRoaW4gcmFuZ2UuCisJCSAqLworCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmRbMF0pKSB7CisJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAotCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob3BlcmFuZFswXSkgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQkJCS8qIE9iamVjdCB0byBiZSBpbmRleGVkIGlzIGEgUGFja2FnZSAqLwotCi0JCQlpZiAoaW5kZXggPj0gb3BlcmFuZFswXS0+cGFja2FnZS5jb3VudCkgewotCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCSAgICAiSW5kZXggdmFsdWUgKCVYJTguOFgpIGJleW9uZCBwYWNrYWdlIGVuZCAoJVgpIiwKLQkJCQkJICAgIEFDUElfRk9STUFUX1VJTlQ2NChpbmRleCksCi0JCQkJCSAgICBvcGVyYW5kWzBdLT5wYWNrYWdlLmNvdW50KSk7Ci0JCQkJc3RhdHVzID0gQUVfQU1MX1BBQ0tBR0VfTElNSVQ7Ci0JCQkJZ290byBjbGVhbnVwOwotCQkJfQotCi0JCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLnRhcmdldF90eXBlID0gQUNQSV9UWVBFX1BBQ0tBR0U7Ci0JCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLm9iamVjdCA9IG9wZXJhbmRbMF07Ci0JCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLndoZXJlID0KLQkJCSAgICAmb3BlcmFuZFswXS0+cGFja2FnZS5lbGVtZW50c1tpbmRleF07Ci0JCX0gZWxzZSB7Ci0JCQkvKiBPYmplY3QgdG8gYmUgaW5kZXhlZCBpcyBhIEJ1ZmZlci9TdHJpbmcgKi8KLQotCQkJaWYgKGluZGV4ID49IG9wZXJhbmRbMF0tPmJ1ZmZlci5sZW5ndGgpIHsKLQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkgICAgIkluZGV4IHZhbHVlICglWCU4LjhYKSBiZXlvbmQgZW5kIG9mIGJ1ZmZlciAoJVgpIiwKLQkJCQkJICAgIEFDUElfRk9STUFUX1VJTlQ2NChpbmRleCksCi0JCQkJCSAgICBvcGVyYW5kWzBdLT5idWZmZXIubGVuZ3RoKSk7Ci0JCQkJc3RhdHVzID0gQUVfQU1MX0JVRkZFUl9MSU1JVDsKLQkJCQlnb3RvIGNsZWFudXA7CisJCQlpZiAoaW5kZXggPj0gb3BlcmFuZFswXS0+c3RyaW5nLmxlbmd0aCkgeworCQkJCXN0YXR1cyA9IEFFX0FNTF9TVFJJTkdfTElNSVQ7CiAJCQl9CiAKIAkJCXJldHVybl9kZXNjLT5yZWZlcmVuY2UudGFyZ2V0X3R5cGUgPQogCQkJICAgIEFDUElfVFlQRV9CVUZGRVJfRklFTEQ7Ci0JCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLm9iamVjdCA9IG9wZXJhbmRbMF07CisJCQlicmVhazsKKworCQljYXNlIEFDUElfVFlQRV9CVUZGRVI6CisKKwkJCWlmIChpbmRleCA+PSBvcGVyYW5kWzBdLT5idWZmZXIubGVuZ3RoKSB7CisJCQkJc3RhdHVzID0gQUVfQU1MX0JVRkZFUl9MSU1JVDsKKwkJCX0KKworCQkJcmV0dXJuX2Rlc2MtPnJlZmVyZW5jZS50YXJnZXRfdHlwZSA9CisJCQkgICAgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRDsKKwkJCWJyZWFrOworCisJCWNhc2UgQUNQSV9UWVBFX1BBQ0tBR0U6CisKKwkJCWlmIChpbmRleCA+PSBvcGVyYW5kWzBdLT5wYWNrYWdlLmNvdW50KSB7CisJCQkJc3RhdHVzID0gQUVfQU1MX1BBQ0tBR0VfTElNSVQ7CisJCQl9CisKKwkJCXJldHVybl9kZXNjLT5yZWZlcmVuY2UudGFyZ2V0X3R5cGUgPSBBQ1BJX1RZUEVfUEFDS0FHRTsKKwkJCXJldHVybl9kZXNjLT5yZWZlcmVuY2Uud2hlcmUgPQorCQkJICAgICZvcGVyYW5kWzBdLT5wYWNrYWdlLmVsZW1lbnRzW2luZGV4XTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisKKwkJCXN0YXR1cyA9IEFFX0FNTF9JTlRFUk5BTDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCS8qIEZhaWx1cmUgbWVhbnMgdGhhdCB0aGUgSW5kZXggd2FzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBvYmplY3QgKi8KKworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJCSJJbmRleCAoJVglOC44WCkgaXMgYmV5b25kIGVuZCBvZiBvYmplY3QiLAorCQkJCQlBQ1BJX0ZPUk1BVF9VSU5UNjQoaW5kZXgpKSk7CisJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAogCQkvKgotCQkgKiBBZGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhcmdldCBwYWNrYWdlL2J1ZmZlci9zdHJpbmcgZm9yIHRoZSBsaWZlCi0JCSAqIG9mIHRoZSBpbmRleC4KKwkJICogU2F2ZSB0aGUgdGFyZ2V0IG9iamVjdCBhbmQgYWRkIGEgcmVmZXJlbmNlIHRvIGl0IGZvciB0aGUgbGlmZQorCQkgKiBvZiB0aGUgaW5kZXgKIAkJICovCisJCXJldHVybl9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0ID0gb3BlcmFuZFswXTsKIAkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKG9wZXJhbmRbMF0pOwogCi0JCS8qIENvbXBsZXRlIHRoZSBJbmRleCByZWZlcmVuY2Ugb2JqZWN0ICovCi0KLQkJcmV0dXJuX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUgPSBBTUxfSU5ERVhfT1A7Ci0JCXJldHVybl9kZXNjLT5yZWZlcmVuY2Uub2Zmc2V0ID0gKHUzMikgaW5kZXg7Ci0KIAkJLyogU3RvcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFyZ2V0ICovCiAKIAkJc3RhdHVzID0gYWNwaV9leF9zdG9yZShyZXR1cm5fZGVzYywgb3BlcmFuZFsyXSwgd2Fsa19zdGF0ZSk7CkBAIC00OTUsNyArNTE0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1OCBsb2dpY2FsX3Jlc3VsdCA9IEZBTFNFOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8yQV8wVF8xUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzJBXzBUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJLyogQ3JlYXRlIHRoZSBpbnRlcm5hbCByZXR1cm4gb2JqZWN0ICovCkBAIC01MDksNiArNTI4LDcgQEAKIAkvKiBFeGVjdXRlIHRoZSBPcGNvZGUgKi8KIAogCWlmICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9MT0dJQ0FMX05VTUVSSUMpIHsKKwogCQkvKiBsb2dpY2FsX29wIChPcGVyYW5kMCwgT3BlcmFuZDEpICovCiAKIAkJc3RhdHVzID0gYWNwaV9leF9kb19sb2dpY2FsX251bWVyaWNfb3Aod2Fsa19zdGF0ZS0+b3Bjb2RlLApAQCAtNTE4LDYgKzUzOCw3IEBACiAJCQkJCQkgICAgICAgdmFsdWUsICZsb2dpY2FsX3Jlc3VsdCk7CiAJCWdvdG8gc3RvcmVfbG9naWNhbF9yZXN1bHQ7CiAJfSBlbHNlIGlmICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9MT0dJQ0FMKSB7CisKIAkJLyogbG9naWNhbF9vcCAoT3BlcmFuZDAsIE9wZXJhbmQxKSAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZXhfZG9fbG9naWNhbF9vcCh3YWxrX3N0YXRlLT5vcGNvZGUsIG9wZXJhbmRbMF0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzMuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMy5jCmluZGV4IDZhM2E4ODMuLmUyZDk0NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMy5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMy5jCkBAIC04OCwyMCArODgsMTkgQEAKIAlzdHJ1Y3QgYWNwaV9zaWduYWxfZmF0YWxfaW5mbyAqZmF0YWw7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzNBXzBUXzBSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfM0FfMFRfMFIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAlzd2l0Y2ggKHdhbGtfc3RhdGUtPm9wY29kZSkgewogCWNhc2UgQU1MX0ZBVEFMX09QOgkvKiBGYXRhbCAoZmF0YWxfdHlwZSBmYXRhbF9jb2RlIGZhdGFsX2FyZykgKi8KIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiZmF0YWxfb3A6IFR5cGUgJVggQ29kZSAlWCBBcmcgJVggPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PFxuIiwKKwkJCQkgICJGYXRhbE9wOiBUeXBlICVYIENvZGUgJVggQXJnICVYIDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDxcbiIsCiAJCQkJICAodTMyKSBvcGVyYW5kWzBdLT5pbnRlZ2VyLnZhbHVlLAogCQkJCSAgKHUzMikgb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZSwKIAkJCQkgICh1MzIpIG9wZXJhbmRbMl0tPmludGVnZXIudmFsdWUpKTsKIAotCQlmYXRhbCA9Ci0JCSAgICBBQ1BJX01FTV9BTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfc2lnbmFsX2ZhdGFsX2luZm8pKTsKKwkJZmF0YWwgPSBBQ1BJX0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV9zaWduYWxfZmF0YWxfaW5mbykpOwogCQlpZiAoZmF0YWwpIHsKIAkJCWZhdGFsLT50eXBlID0gKHUzMikgb3BlcmFuZFswXS0+aW50ZWdlci52YWx1ZTsKIAkJCWZhdGFsLT5jb2RlID0gKHUzMikgb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZTsKQEAgLTExNCw3ICsxMTMsNyBAQAogCiAJCS8qIE1pZ2h0IHJldHVybiB3aGlsZSBPUyBpcyBzaHV0dGluZyBkb3duLCBqdXN0IGNvbnRpbnVlICovCiAKLQkJQUNQSV9NRU1fRlJFRShmYXRhbCk7CisJCUFDUElfRlJFRShmYXRhbCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE1MSw3ICsxNTAsNyBAQAogCWFjcGlfaW50ZWdlciBpbmRleDsKIAlhY3BpX3NpemUgbGVuZ3RoOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8zQV8xVF8xUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzNBXzFUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJc3dpdGNoICh3YWxrX3N0YXRlLT5vcGNvZGUpIHsKQEAgLTE5Niw3ICsxOTUsNyBAQAogCiAJCQkvKiBBbHdheXMgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIGZvciB0aGUgU3RyaW5nICovCiAKLQkJCWJ1ZmZlciA9IEFDUElfTUVNX0NBTExPQ0FURSgoYWNwaV9zaXplKSBsZW5ndGggKyAxKTsKKwkJCWJ1ZmZlciA9IEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIGxlbmd0aCArIDEpOwogCQkJaWYgKCFidWZmZXIpIHsKIAkJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CiAJCQkJZ290byBjbGVhbnVwOwpAQCAtMjA4LDkgKzIwNywxMCBAQAogCQkJLyogSWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggaXMgemVybywgZG9uJ3QgYWxsb2NhdGUgYSBidWZmZXIgKi8KIAogCQkJaWYgKGxlbmd0aCA+IDApIHsKKwogCQkJCS8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBmb3IgdGhlIEJ1ZmZlciAqLwogCi0JCQkJYnVmZmVyID0gQUNQSV9NRU1fQ0FMTE9DQVRFKGxlbmd0aCk7CisJCQkJYnVmZmVyID0gQUNQSV9BTExPQ0FURV9aRVJPRUQobGVuZ3RoKTsKIAkJCQlpZiAoIWJ1ZmZlcikgewogCQkJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CiAJCQkJCWdvdG8gY2xlYW51cDsKQEAgLTIyNSw2ICsyMjUsNyBAQAogCQl9CiAKIAkJaWYgKGJ1ZmZlcikgeworCiAJCQkvKiBXZSBoYXZlIGEgYnVmZmVyLCBjb3B5IHRoZSBwb3J0aW9uIHJlcXVlc3RlZCAqLwogCiAJCQlBQ1BJX01FTUNQWShidWZmZXIsIG9wZXJhbmRbMF0tPnN0cmluZy5wb2ludGVyICsgaW5kZXgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzYuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnNi5jCmluZGV4IGUwNDNkOTIuLmYwYzBiYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnNi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnNi5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAlhY3BpX2ludGVnZXIgaW5kZXg7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqdGhpc19lbGVtZW50OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV82QV8wVF8xUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzZBXzBUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJc3dpdGNoICh3YWxrX3N0YXRlLT5vcGNvZGUpIHsKQEAgLTI3Niw2ICsyNzYsNyBAQAogCQkgKiBtYXRjaCB3YXMgZm91bmQuCiAJCSAqLwogCQlmb3IgKDsgaW5kZXggPCBvcGVyYW5kWzBdLT5wYWNrYWdlLmNvdW50OyBpbmRleCsrKSB7CisKIAkJCS8qIEdldCB0aGUgY3VycmVudCBwYWNrYWdlIGVsZW1lbnQgKi8KIAogCQkJdGhpc19lbGVtZW50ID0gb3BlcmFuZFswXS0+cGFja2FnZS5lbGVtZW50c1tpbmRleF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhwcmVwLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhwcmVwLmMKaW5kZXggNzcxOWFlNS4uNDRkMDY0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cHJlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHByZXAuYwpAQCAtOTcsNyArOTcsNyBAQAogCXUzMiBtaW5pbXVtX2FjY2Vzc2VzID0gMHhGRkZGRkZGRjsKIAl1MzIgYWNjZXNzZXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9nZW5lcmF0ZV9hY2Nlc3MiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2dlbmVyYXRlX2FjY2Vzcyk7CiAKIAkvKiBSb3VuZCBGaWVsZCBzdGFydCBvZmZzZXQgYW5kIGxlbmd0aCB0byAibWluaW1hbCIgYnl0ZSBib3VuZGFyaWVzICovCiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQkJYWNjZXNzZXMgPSBmaWVsZF9lbmRfb2Zmc2V0IC0gZmllbGRfc3RhcnRfb2Zmc2V0OwogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCQkJICAiYWNjZXNzX3dpZHRoICVkIGVuZCBpcyB3aXRoaW4gcmVnaW9uXG4iLAorCQkJCQkgICJBY2Nlc3NXaWR0aCAlZCBlbmQgaXMgd2l0aGluIHJlZ2lvblxuIiwKIAkJCQkJICBhY2Nlc3NfYnl0ZV93aWR0aCkpOwogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCi0JCQkJCSAgImFjY2Vzc193aWR0aCAlZCBlbmQgaXMgTk9UIHdpdGhpbiByZWdpb25cbiIsCisJCQkJCSAgIkFjY2Vzc1dpZHRoICVkIGVuZCBpcyBOT1Qgd2l0aGluIHJlZ2lvblxuIiwKIAkJCQkJICBhY2Nlc3NfYnl0ZV93aWR0aCkpOwogCQkJaWYgKGFjY2Vzc19ieXRlX3dpZHRoID09IDEpIHsKIAkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKQEAgLTIyOCw3ICsyMjgsNyBAQAogCXUzMiBieXRlX2FsaWdubWVudDsKIAl1MzIgYml0X2xlbmd0aDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2RlY29kZV9maWVsZF9hY2Nlc3MiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2RlY29kZV9maWVsZF9hY2Nlc3MpOwogCiAJYWNjZXNzID0gKGZpZWxkX2ZsYWdzICYgQU1MX0ZJRUxEX0FDQ0VTU19UWVBFX01BU0spOwogCkBAIC0zMjIsNyArMzIyLDcgQEAKIAl1MzIgYnl0ZV9hbGlnbm1lbnQ7CiAJdTMyIG5lYXJlc3RfYnl0ZV9hZGRyZXNzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfcHJlcF9jb21tb25fZmllbGRfb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9wcmVwX2NvbW1vbl9maWVsZF9vYmplY3QpOwogCiAJLyoKIAkgKiBOb3RlOiB0aGUgc3RydWN0dXJlIGJlaW5nIGluaXRpYWxpemVkIGlzIHRoZQpAQCAtNDE1LDEzICs0MTUsMTMgQEAKIAl1MzIgdHlwZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9wcmVwX2ZpZWxkX3ZhbHVlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9wcmVwX2ZpZWxkX3ZhbHVlKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKIAlpZiAoaW5mby0+ZmllbGRfdHlwZSAhPSBBQ1BJX1RZUEVfTE9DQUxfSU5ERVhfRklFTEQpIHsKIAkJaWYgKCFpbmZvLT5yZWdpb25fbm9kZSkgewotCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk51bGwgcmVnaW9uX25vZGUiKSk7CisJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiTnVsbCBSZWdpb25Ob2RlIikpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9OT19PUEVSQU5EKTsKIAkJfQogCkBAIC00NjcsNyArNDY3LDcgQEAKIAkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKG9ial9kZXNjLT5maWVsZC5yZWdpb25fb2JqKTsKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCQkgICJyZWdpb25fZmllbGQ6IGJpdF9vZmYgJVgsIE9mZiAlWCwgR3JhbiAlWCwgUmVnaW9uICVwXG4iLAorCQkJCSAgIlJlZ2lvbkZpZWxkOiBCaXRPZmYgJVgsIE9mZiAlWCwgR3JhbiAlWCwgUmVnaW9uICVwXG4iLAogCQkJCSAgb2JqX2Rlc2MtPmZpZWxkLnN0YXJ0X2ZpZWxkX2JpdF9vZmZzZXQsCiAJCQkJICBvYmpfZGVzYy0+ZmllbGQuYmFzZV9ieXRlX29mZnNldCwKIAkJCQkgIG9ial9kZXNjLT5maWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCwKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uob2JqX2Rlc2MtPmJhbmtfZmllbGQuYmFua19vYmopOwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJCSAgIkJhbmsgRmllbGQ6IGJpdF9vZmYgJVgsIE9mZiAlWCwgR3JhbiAlWCwgUmVnaW9uICVwLCBiYW5rX3JlZyAlcFxuIiwKKwkJCQkgICJCYW5rIEZpZWxkOiBCaXRPZmYgJVgsIE9mZiAlWCwgR3JhbiAlWCwgUmVnaW9uICVwLCBCYW5rUmVnICVwXG4iLAogCQkJCSAgb2JqX2Rlc2MtPmJhbmtfZmllbGQuc3RhcnRfZmllbGRfYml0X29mZnNldCwKIAkJCQkgIG9ial9kZXNjLT5iYW5rX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQsCiAJCQkJICBvYmpfZGVzYy0+ZmllbGQuYWNjZXNzX2J5dGVfd2lkdGgsCkBAIC01MTksMTYgKzUxOSwyOSBAQAogCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uob2JqX2Rlc2MtPmluZGV4X2ZpZWxkLmluZGV4X29iaik7CiAKIAkJLyoKKwkJICogQXByaWwgMjAwNjogQ2hhbmdlZCB0byBtYXRjaCBNUyBiZWhhdmlvcgorCQkgKgogCQkgKiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgSW5kZXggcmVnaXN0ZXIgaXMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZQotCQkgKiB0YXJnZXQgZmllbGQKLQkJICogTm90ZTogbWF5IGNoYW5nZSBjb2RlIHRvOiBBQ1BJX0RJVl84IChJbmZvLT5maWVsZF9iaXRfcG9zaXRpb24pCisJCSAqIHRhcmdldCBmaWVsZCBpbiB1bml0cyBvZiB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluZGV4X2ZpZWxkCisJCSAqCisJCSAqIFByZXZpb3VzbHksIHRoZSB2YWx1ZSB3YXMgY2FsY3VsYXRlZCBhcyBhbiBpbmRleCBpbiB0ZXJtcyBvZiB0aGUKKwkJICogd2lkdGggb2YgdGhlIERhdGEgcmVnaXN0ZXIsIGFzIGJlbG93OgorCQkgKgorCQkgKiAgICAgIG9ial9kZXNjLT5pbmRleF9maWVsZC5WYWx1ZSA9ICh1MzIpCisJCSAqICAgICAgICAgIChJbmZvLT5maWVsZF9iaXRfcG9zaXRpb24gLyBBQ1BJX01VTF84ICgKKwkJICogICAgICAgICAgICAgIG9ial9kZXNjLT5GaWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCkpOworCQkgKgorCQkgKiBGZWJydWFyeSAyMDA2OiBUcmllZCB2YWx1ZSBhcyBhIGJ5dGUgb2Zmc2V0OgorCQkgKiAgICAgIG9ial9kZXNjLT5pbmRleF9maWVsZC5WYWx1ZSA9ICh1MzIpCisJCSAqICAgICAgICAgIEFDUElfRElWXzggKEluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbik7CiAJCSAqLwotCQlvYmpfZGVzYy0+aW5kZXhfZmllbGQudmFsdWUgPSAodTMyKQotCQkgICAgKGluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbiAvCi0JCSAgICAgQUNQSV9NVUxfOChvYmpfZGVzYy0+ZmllbGQuYWNjZXNzX2J5dGVfd2lkdGgpKTsKKwkJb2JqX2Rlc2MtPmluZGV4X2ZpZWxkLnZhbHVlID0KKwkJICAgICh1MzIpIEFDUElfUk9VTkRfRE9XTihBQ1BJX0RJVl84KGluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbiksCisJCQkJCSAgb2JqX2Rlc2MtPmluZGV4X2ZpZWxkLgorCQkJCQkgIGFjY2Vzc19ieXRlX3dpZHRoKTsKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCQkgICJpbmRleF9maWVsZDogYml0X29mZiAlWCwgT2ZmICVYLCBWYWx1ZSAlWCwgR3JhbiAlWCwgSW5kZXggJXAsIERhdGEgJXBcbiIsCisJCQkJICAiSW5kZXhGaWVsZDogQml0T2ZmICVYLCBPZmYgJVgsIFZhbHVlICVYLCBHcmFuICVYLCBJbmRleCAlcCwgRGF0YSAlcFxuIiwKIAkJCQkgIG9ial9kZXNjLT5pbmRleF9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0LAogCQkJCSAgb2JqX2Rlc2MtPmluZGV4X2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQsCiAJCQkJICBvYmpfZGVzYy0+aW5kZXhfZmllbGQudmFsdWUsCkBAIC01NTAsNyArNTYzLDcgQEAKIAkJCQkgICAgICAgYWNwaV9uc19nZXRfdHlwZShpbmZvLT5maWVsZF9ub2RlKSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCSAgIlNldCBuYW1lZF9vYmogJXAgWyU0LjRzXSwgb2JqX2Rlc2MgJXBcbiIsCisJCQkgICJTZXQgTmFtZWRPYmogJXAgWyU0LjRzXSwgT2JqRGVzYyAlcFxuIiwKIAkJCSAgaW5mby0+ZmllbGRfbm9kZSwKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKGluZm8tPmZpZWxkX25vZGUpLCBvYmpfZGVzYykpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCmluZGV4IDZhNGNmZGYuLjNjYzk3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCkBAIC04MSw3ICs4MSw3IEBACiAJdTMyIHJlbWFpbmRlcjsKICNlbmRpZgogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfc3lzdGVtX21lbW9yeV9zcGFjZV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9zeXN0ZW1fbWVtb3J5X3NwYWNlX2hhbmRsZXIpOwogCiAJLyogVmFsaWRhdGUgYW5kIHRyYW5zbGF0ZSB0aGUgYml0IHdpZHRoICovCiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIHN5c3RlbV9tZW1vcnkgd2lkdGggJWQiLAorCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBTeXN0ZW1NZW1vcnkgd2lkdGggJWQiLAogCQkJICAgIGJpdF93aWR0aCkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX09QRVJBTkRfVkFMVUUpOwogCX0KQEAgLTEzNSw2ICsxMzUsNyBAQAogCQkgKiBEZWxldGUgdGhlIGV4aXN0aW5nIG1hcHBpbmcgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuCiAJCSAqLwogCQlpZiAobWVtX2luZm8tPm1hcHBlZF9sZW5ndGgpIHsKKwogCQkJLyogVmFsaWQgbWFwcGluZywgZGVsZXRlIGl0ICovCiAKIAkJCWFjcGlfb3NfdW5tYXBfbWVtb3J5KG1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzLApAQCAtMTgxLDggKzE4Miw4IEBACiAJICAgICAoYWNwaV9pbnRlZ2VyKSBtZW1faW5mby0+bWFwcGVkX3BoeXNpY2FsX2FkZHJlc3MpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAic3lzdGVtX21lbW9yeSAlZCAoJWQgd2lkdGgpIEFkZHJlc3M9JTguOFglOC44WFxuIiwKLQkJCSAgZnVuY3Rpb24sIGJpdF93aWR0aCwgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpKSk7CisJCQkgICJTeXN0ZW0tTWVtb3J5ICh3aWR0aCAlZCkgUi9XICVkIEFkZHJlc3M9JTguOFglOC44WFxuIiwKKwkJCSAgYml0X3dpZHRoLCBmdW5jdGlvbiwgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpKSk7CiAKIAkvKgogCSAqIFBlcmZvcm0gdGhlIG1lbW9yeSByZWFkIG9yIHdyaXRlCkBAIC0yODMsMTEgKzI4NCwxMSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXUzMiB2YWx1ZTMyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfc3lzdGVtX2lvX3NwYWNlX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3N5c3RlbV9pb19zcGFjZV9oYW5kbGVyKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCSAgInN5c3RlbV9pTyAlZCAoJWQgd2lkdGgpIEFkZHJlc3M9JTguOFglOC44WFxuIiwKLQkJCSAgZnVuY3Rpb24sIGJpdF93aWR0aCwgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpKSk7CisJCQkgICJTeXN0ZW0tSU8gKHdpZHRoICVkKSBSL1cgJWQgQWRkcmVzcz0lOC44WCU4LjhYXG4iLAorCQkJICBiaXRfd2lkdGgsIGZ1bmN0aW9uLCBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzcykpKTsKIAogCS8qIERlY29kZSB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyICovCiAKQEAgLTM0Miw3ICszNDMsNyBAQAogCXN0cnVjdCBhY3BpX3BjaV9pZCAqcGNpX2lkOwogCXUxNiBwY2lfcmVnaXN0ZXI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9wY2lfY29uZmlnX3NwYWNlX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3BjaV9jb25maWdfc3BhY2VfaGFuZGxlcik7CiAKIAkvKgogCSAqICBUaGUgYXJndW1lbnRzIHRvIGFjcGlfb3MoUmVhZHxXcml0ZSlwY2lfY29uZmlndXJhdGlvbiBhcmU6CkBAIC0zNjAsNyArMzYxLDcgQEAKIAlwY2lfcmVnaXN0ZXIgPSAodTE2KSAodTMyKSBhZGRyZXNzOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAicGNpX2NvbmZpZyAlZCAoJWQpIFNlZyglMDR4KSBCdXMoJTA0eCkgRGV2KCUwNHgpIEZ1bmMoJTA0eCkgUmVnKCUwNHgpXG4iLAorCQkJICAiUGNpLUNvbmZpZyAlZCAoJWQpIFNlZyglMDR4KSBCdXMoJTA0eCkgRGV2KCUwNHgpIEZ1bmMoJTA0eCkgUmVnKCUwNHgpXG4iLAogCQkJICBmdW5jdGlvbiwgYml0X3dpZHRoLCBwY2lfaWQtPnNlZ21lbnQsIHBjaV9pZC0+YnVzLAogCQkJICBwY2lfaWQtPmRldmljZSwgcGNpX2lkLT5mdW5jdGlvbiwgcGNpX3JlZ2lzdGVyKSk7CiAKQEAgLTQxNCw3ICs0MTUsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfY21vc19zcGFjZV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9jbW9zX3NwYWNlX2hhbmRsZXIpOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CkBAIC00NDYsNyArNDQ3LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X3BjaV9iYXJfc3BhY2VfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfcGNpX2Jhcl9zcGFjZV9oYW5kbGVyKTsKIAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQpAQCAtNDc2LDIzICs0NzcsMTYgQEAKIAkJCQkgYWNwaV9pbnRlZ2VyICogdmFsdWUsCiAJCQkJIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JdTMyIGJ5dGVfd2lkdGggPSBBQ1BJX0RJVl84KGJpdF93aWR0aCk7Ci0JdTMyIGk7Ci0JY2hhciAqbG9naWNhbF9hZGRyX3B0cjsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2RhdGFfdGFibGVfc3BhY2VfaGFuZGxlciIpOwotCi0JbG9naWNhbF9hZGRyX3B0ciA9IEFDUElfUEhZU0FERFJfVE9fUFRSKGFkZHJlc3MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZGF0YV90YWJsZV9zcGFjZV9oYW5kbGVyKTsKIAogCS8qIFBlcmZvcm0gdGhlIG1lbW9yeSByZWFkIG9yIHdyaXRlICovCiAKIAlzd2l0Y2ggKGZ1bmN0aW9uKSB7CiAJY2FzZSBBQ1BJX1JFQUQ6CiAKLQkJZm9yIChpID0gMDsgaSA8IGJ5dGVfd2lkdGg7IGkrKykgewotCQkJKChjaGFyICopdmFsdWUpW2ldID0gbG9naWNhbF9hZGRyX3B0cltpXTsKLQkJfQorCQlBQ1BJX01FTUNQWShBQ1BJX0NBU1RfUFRSKGNoYXIsIHZhbHVlKSwKKwkJCSAgICBBQ1BJX1BIWVNBRERSX1RPX1BUUihhZGRyZXNzKSwKKwkJCSAgICBBQ1BJX0RJVl84KGJpdF93aWR0aCkpOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9XUklURToKQEAgLTUwMSw1ICs0OTUsNSBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfU1VQUE9SVCk7CiAJfQogCi0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc250ZS5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzbnRlLmMKaW5kZXggMDFiMjZjOC4uMzA4OWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzbnRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzbnRlLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAlhY3BpX29iamVjdF90eXBlIGVudHJ5X3R5cGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9yZXNvbHZlX25vZGVfdG9fdmFsdWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3Jlc29sdmVfbm9kZV90b192YWx1ZSk7CiAKIAkvKgogCSAqIFRoZSBzdGFjayBwb2ludGVyIHBvaW50cyB0byBhIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIChOb2RlKS4gIEdldCB0aGUKQEAgLTk3LDEyICs5NywxMyBAQAogCXNvdXJjZV9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCWVudHJ5X3R5cGUgPSBhY3BpX25zX2dldF90eXBlKChhY3BpX2hhbmRsZSkgbm9kZSk7CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJFbnRyeT0lcCBzb3VyY2VfZGVzYz0lcCBbJXNdXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIkVudHJ5PSVwIFNvdXJjZURlc2M9JXAgWyVzXVxuIiwKIAkJCSAgbm9kZSwgc291cmNlX2Rlc2MsCiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShlbnRyeV90eXBlKSkpOwogCiAJaWYgKChlbnRyeV90eXBlID09IEFDUElfVFlQRV9MT0NBTF9BTElBUykgfHwKIAkgICAgKGVudHJ5X3R5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX01FVEhPRF9BTElBUykpIHsKKwogCQkvKiBUaGVyZSBpcyBhbHdheXMgZXhhY3RseSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KIAogCQlub2RlID0gQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSwgbm9kZS0+b2JqZWN0KTsKQEAgLTExMywxMCArMTE0LDExIEBACiAKIAkvKgogCSAqIFNldmVyYWwgb2JqZWN0IHR5cGVzIHJlcXVpcmUgbm8gZnVydGhlciBwcm9jZXNzaW5nOgotCSAqIDEpIERldmljZXMgcmFyZWx5IGhhdmUgYW4gYXR0YWNoZWQgb2JqZWN0LCByZXR1cm4gdGhlIE5vZGUKKwkgKiAxKSBEZXZpY2UvVGhlcm1hbCBvYmplY3RzIGRvbid0IGhhdmUgYSAicmVhbCIgc3Vib2JqZWN0LCByZXR1cm4gdGhlIE5vZGUKIAkgKiAyKSBNZXRob2QgbG9jYWxzIGFuZCBhcmd1bWVudHMgaGF2ZSBhIHBzZXVkby1Ob2RlCiAJICovCi0JaWYgKGVudHJ5X3R5cGUgPT0gQUNQSV9UWVBFX0RFVklDRSB8fAorCWlmICgoZW50cnlfdHlwZSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB8fAorCSAgICAoZW50cnlfdHlwZSA9PSBBQ1BJX1RZUEVfVEhFUk1BTCkgfHwKIAkgICAgKG5vZGUtPmZsYWdzICYgKEFOT0JKX01FVEhPRF9BUkcgfCBBTk9CSl9NRVRIT0RfTE9DQUwpKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KQEAgLTE0MSw2ICsxNDMsNyBAQAogCiAJCXN0YXR1cyA9IGFjcGlfZHNfZ2V0X3BhY2thZ2VfYXJndW1lbnRzKHNvdXJjZV9kZXNjKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJCS8qIFJldHVybiBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0ICovCiAKIAkJCW9ial9kZXNjID0gc291cmNlX2Rlc2M7CkBAIC0xNTgsNiArMTYxLDcgQEAKIAogCQlzdGF0dXMgPSBhY3BpX2RzX2dldF9idWZmZXJfYXJndW1lbnRzKHNvdXJjZV9kZXNjKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJCS8qIFJldHVybiBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0ICovCiAKIAkJCW9ial9kZXNjID0gc291cmNlX2Rlc2M7CkBAIC0xOTksNyArMjAzLDcgQEAKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9JTkRFWF9GSUVMRDoKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJICAiZmllbGRfcmVhZCBOb2RlPSVwIHNvdXJjZV9kZXNjPSVwIFR5cGU9JVhcbiIsCisJCQkJICAiRmllbGRSZWFkIE5vZGU9JXAgU291cmNlRGVzYz0lcCBUeXBlPSVYXG4iLAogCQkJCSAgbm9kZSwgc291cmNlX2Rlc2MsIGVudHJ5X3R5cGUpKTsKIAogCQlzdGF0dXMgPQpAQCAtMjEzLDcgKzIxNyw2IEBACiAJY2FzZSBBQ1BJX1RZUEVfTUVUSE9EOgogCWNhc2UgQUNQSV9UWVBFX1BPV0VSOgogCWNhc2UgQUNQSV9UWVBFX1BST0NFU1NPUjoKLQljYXNlIEFDUElfVFlQRV9USEVSTUFMOgogCWNhc2UgQUNQSV9UWVBFX0VWRU5UOgogCWNhc2UgQUNQSV9UWVBFX1JFR0lPTjoKIApAQCAtMjQwLDYgKzI0Myw4IEBACiAJCQkvKiBUaGlzIGlzIGEgZGRiX2hhbmRsZSAqLwogCQkJLyogUmV0dXJuIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgKi8KIAorCQljYXNlIEFNTF9SRUZfT0ZfT1A6CisKIAkJCW9ial9kZXNjID0gc291cmNlX2Rlc2M7CiAJCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uob2JqX2Rlc2MpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvbHYuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29sdi5jCmluZGV4IDFkZWVkNDkuLjY0OTlkZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29sdi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29sdi5jCkBAIC03OCw3ICs3OCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X3Jlc29sdmVfdG9fdmFsdWUiLCBzdGFja19wdHIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X3Jlc29sdmVfdG9fdmFsdWUsIHN0YWNrX3B0cik7CiAKIAlpZiAoIXN0YWNrX3B0ciB8fCAhKnN0YWNrX3B0cikgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW50ZXJuYWwgLSBudWxsIHBvaW50ZXIiKSk7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAl1MTYgb3Bjb2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfcmVzb2x2ZV9vYmplY3RfdG9fdmFsdWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3Jlc29sdmVfb2JqZWN0X3RvX3ZhbHVlKTsKIAogCXN0YWNrX2Rlc2MgPSAqc3RhY2tfcHRyOwogCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJCX0KIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCQkgICJbQXJnL0xvY2FsICVYXSB2YWx1ZV9vYmogaXMgJXBcbiIsCisJCQkJCSAgIltBcmcvTG9jYWwgJVhdIFZhbHVlT2JqIGlzICVwXG4iLAogCQkJCQkgIHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5vZmZzZXQsCiAJCQkJCSAgb2JqX2Rlc2MpKTsKIApAQCAtMjM5LDcgKzIzOSw3IEBACiAJCQkJLyogSW52YWxpZCByZWZlcmVuY2Ugb2JqZWN0ICovCiAKIAkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkgICAgIlVua25vd24gdGFyZ2V0X3R5cGUgJVggaW4gSW5kZXgvUmVmZXJlbmNlIG9iaiAlcCIsCisJCQkJCSAgICAiVW5rbm93biBUYXJnZXRUeXBlICVYIGluIEluZGV4L1JlZmVyZW5jZSBvYmogJXAiLAogCQkJCQkgICAgc3RhY2tfZGVzYy0+cmVmZXJlbmNlLnRhcmdldF90eXBlLAogCQkJCQkgICAgc3RhY2tfZGVzYykpOwogCQkJCXN0YXR1cyA9IEFFX0FNTF9JTlRFUk5BTDsKQEAgLTI1NywxMCArMjU3LDI0IEBACiAKIAkJY2FzZSBBTUxfSU5UX05BTUVQQVRIX09QOgkvKiBSZWZlcmVuY2UgdG8gYSBuYW1lZCBvYmplY3QgKi8KIAotCQkJLyogR2V0IHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgbmFtZXNwYWNlIG5vZGUgKi8KKwkJCS8qIERlcmVmZXJlbmNlIHRoZSBuYW1lICovCiAKLQkJCSpzdGFja19wdHIgPSAoc3RhY2tfZGVzYy0+cmVmZXJlbmNlLm5vZGUpLT5vYmplY3Q7Ci0JCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2UoKnN0YWNrX3B0cik7CisJCQlpZiAoKHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5ub2RlLT50eXBlID09CisJCQkgICAgIEFDUElfVFlQRV9ERVZJQ0UpCisJCQkgICAgfHwgKHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5ub2RlLT50eXBlID09CisJCQkJQUNQSV9UWVBFX1RIRVJNQUwpKSB7CisKKwkJCQkvKiBUaGVzZSBub2RlIHR5cGVzIGRvIG5vdCBoYXZlICdyZWFsJyBzdWJvYmplY3RzICovCisKKwkJCQkqc3RhY2tfcHRyID0gKHZvaWQgKilzdGFja19kZXNjLT5yZWZlcmVuY2Uubm9kZTsKKwkJCX0gZWxzZSB7CisJCQkJLyogR2V0IHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgbmFtZXNwYWNlIG5vZGUgKi8KKworCQkJCSpzdGFja19wdHIgPQorCQkJCSAgICAoc3RhY2tfZGVzYy0+cmVmZXJlbmNlLm5vZGUpLT5vYmplY3Q7CisJCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKCpzdGFja19wdHIpOworCQkJfQorCiAJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uoc3RhY2tfZGVzYyk7CiAJCQlicmVhazsKIApAQCAtMjkzLDcgKzMwNyw3IEBACiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfSU5ERVhfRklFTEQ6CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCSAgImZpZWxkX3JlYWQgc291cmNlX2Rlc2M9JXAgVHlwZT0lWFxuIiwKKwkJCQkgICJGaWVsZFJlYWQgU291cmNlRGVzYz0lcCBUeXBlPSVYXG4iLAogCQkJCSAgc3RhY2tfZGVzYywKIAkJCQkgIEFDUElfR0VUX09CSkVDVF9UWVBFKHN0YWNrX2Rlc2MpKSk7CiAKQEAgLTMzNyw3ICszNTEsNyBAQAogCWFjcGlfb2JqZWN0X3R5cGUgdHlwZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2V4X3Jlc29sdmVfbXVsdGlwbGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZXhfcmVzb2x2ZV9tdWx0aXBsZSk7CiAKIAkvKiBPcGVyYW5kIGNhbiBiZSBlaXRoZXIgYSBuYW1lc3BhY2Ugbm9kZSBvciBhbiBvcGVyYW5kIGRlc2NyaXB0b3IgKi8KIApAQCAtMzgyLDEwICszOTYsMTYgQEAKIAl3aGlsZSAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKIAkJc3dpdGNoIChvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSkgewogCQljYXNlIEFNTF9SRUZfT0ZfT1A6CisJCWNhc2UgQU1MX0lOVF9OQU1FUEFUSF9PUDoKIAogCQkJLyogRGVyZWZlcmVuY2UgdGhlIHJlZmVyZW5jZSBwb2ludGVyICovCiAKLQkJCW5vZGUgPSBvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdDsKKwkJCWlmIChvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSA9PSBBTUxfUkVGX09GX09QKSB7CisJCQkJbm9kZSA9IG9ial9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0OworCQkJfSBlbHNlIHsJLyogQU1MX0lOVF9OQU1FUEFUSF9PUCAqLworCisJCQkJbm9kZSA9IG9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZTsKKwkJCX0KIAogCQkJLyogQWxsICJSZWZlcmVuY2VzIiBwb2ludCB0byBhIE5TIG5vZGUgKi8KIApAQCAtNDAxLDYgKzQyMSw3IEBACiAKIAkJCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCQkJaWYgKCFvYmpfZGVzYykgeworCiAJCQkJLyogTm8gb2JqZWN0LCB1c2UgdGhlIE5TIG5vZGUgdHlwZSAqLwogCiAJCQkJdHlwZSA9IGFjcGlfbnNfZ2V0X3R5cGUobm9kZSk7CkBAIC00MzIsNiArNDUzLDcgQEAKIAkJCSAqLwogCQkJb2JqX2Rlc2MgPSAqKG9ial9kZXNjLT5yZWZlcmVuY2Uud2hlcmUpOwogCQkJaWYgKCFvYmpfZGVzYykgeworCiAJCQkJLyogTlVMTCBwYWNrYWdlIGVsZW1lbnRzIGFyZSBhbGxvd2VkICovCiAKIAkJCQl0eXBlID0gMDsJLyogVW5pbml0aWFsaXplZCAqLwpAQCAtNDM5LDM5ICs0NjEsNiBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSBBTUxfSU5UX05BTUVQQVRIX09QOgotCi0JCQkvKiBEZXJlZmVyZW5jZSB0aGUgcmVmZXJlbmNlIHBvaW50ZXIgKi8KLQotCQkJbm9kZSA9IG9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZTsKLQotCQkJLyogQWxsICJSZWZlcmVuY2VzIiBwb2ludCB0byBhIE5TIG5vZGUgKi8KLQotCQkJaWYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShub2RlKSAhPQotCQkJICAgIEFDUElfREVTQ19UWVBFX05BTUVEKSB7Ci0JCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk5vdCBhIE5TIG5vZGUgJXAgWyVzXSIsCi0JCQkJCSAgICBub2RlLAotCQkJCQkgICAgYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9uYW1lKG5vZGUpKSk7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9JTlRFUk5BTCk7Ci0JCQl9Ci0KLQkJCS8qIEdldCB0aGUgYXR0YWNoZWQgb2JqZWN0ICovCi0KLQkJCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwotCQkJaWYgKCFvYmpfZGVzYykgewotCQkJCS8qIE5vIG9iamVjdCwgdXNlIHRoZSBOUyBub2RlIHR5cGUgKi8KLQotCQkJCXR5cGUgPSBhY3BpX25zX2dldF90eXBlKG5vZGUpOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQotCQkJLyogQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgKi8KLQotCQkJaWYgKG9ial9kZXNjID09IG9wZXJhbmQpIHsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0NJUkNVTEFSX1JFRkVSRU5DRSk7Ci0JCQl9Ci0JCQlicmVhazsKLQogCQljYXNlIEFNTF9MT0NBTF9PUDoKIAkJY2FzZSBBTUxfQVJHX09QOgogCkBAIC01MTMsNyArNTAyLDcgQEAKIAogCQljYXNlIEFNTF9ERUJVR19PUDoKIAotCQkJLyogVGhlIERlYnVnIE9iamVjdCBpcyBvZiB0eXBlICJkZWJ1Z19vYmplY3QiICovCisJCQkvKiBUaGUgRGVidWcgT2JqZWN0IGlzIG9mIHR5cGUgIkRlYnVnT2JqZWN0IiAqLwogCiAJCQl0eXBlID0gQUNQSV9UWVBFX0RFQlVHX09CSkVDVDsKIAkJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29wLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvcC5jCmluZGV4IGExYzAwMGYuLjRjOTNkMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29wLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzb3AuYwpAQCAtNzcsNiArNzcsNyBAQAogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIAogCWlmICh0eXBlX25lZWRlZCA9PSBBQ1BJX1RZUEVfQU5ZKSB7CisKIAkJLyogQWxsIHR5cGVzIE9LLCBzbyB3ZSBkb24ndCBwZXJmb3JtIGFueSB0eXBlY2hlY2tzICovCiAKIAkJcmV0dXJuIChBRV9PSyk7CkBAIC0xNDMsNyArMTQ0LDcgQEAKIAlhY3BpX29iamVjdF90eXBlIHR5cGVfbmVlZGVkOwogCXUxNiB0YXJnZXRfb3AgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoImV4X3Jlc29sdmVfb3BlcmFuZHMiLCBvcGNvZGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGV4X3Jlc29sdmVfb3BlcmFuZHMsIG9wY29kZSk7CiAKIAlvcF9pbmZvID0gYWNwaV9wc19nZXRfb3Bjb2RlX2luZm8ob3Bjb2RlKTsKIAlpZiAob3BfaW5mby0+Y2xhc3MgPT0gQU1MX0NMQVNTX1VOS05PV04pIHsKQEAgLTE1OCw3ICsxNTksNyBAQAogCX0KIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCSAgIk9wY29kZSAlWCBbJXNdIHJlcXVpcmVkX29wZXJhbmRfdHlwZXM9JTguOFhcbiIsCisJCQkgICJPcGNvZGUgJVggWyVzXSBSZXF1aXJlZE9wZXJhbmRUeXBlcz0lOC44WFxuIiwKIAkJCSAgb3Bjb2RlLCBvcF9pbmZvLT5uYW1lLCBhcmdfdHlwZXMpKTsKIAogCS8qCkBAIC0yMjQsNiArMjI1LDcgQEAKIAkJCX0KIAogCQkJaWYgKG9iamVjdF90eXBlID09ICh1OCkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgeworCiAJCQkJLyogRGVjb2RlIHRoZSBSZWZlcmVuY2UgKi8KIAogCQkJCW9wX2luZm8gPSBhY3BpX3BzX2dldF9vcGNvZGVfaW5mbyhvcGNvZGUpOwpAQCAtMjQ3LDcgKzI0OSw3IEBACiAKIAkJCQkJQUNQSV9ERUJVR19PTkxZX01FTUJFUlMoQUNQSV9ERUJVR19QUklOVAogCQkJCQkJCQkoKEFDUElfREJfRVhFQywKLQkJCQkJCQkJICAiT3BlcmFuZCBpcyBhIFJlZmVyZW5jZSwgcmVmX29wY29kZSBbJXNdXG4iLAorCQkJCQkJCQkgICJPcGVyYW5kIGlzIGEgUmVmZXJlbmNlLCBSZWZPcGNvZGUgWyVzXVxuIiwKIAkJCQkJCQkJICAoYWNwaV9wc19nZXRfb3Bjb2RlX2luZm8KIAkJCQkJCQkJICAgKG9ial9kZXNjLT4KIAkJCQkJCQkJICAgIHJlZmVyZW5jZS4KQEAgLTMzMiw2ICszMzQsNyBAQAogCQkJfQogCiAJCQlpZiAob2JqX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUgPT0gQU1MX05BTUVfT1ApIHsKKwogCQkJCS8qIENvbnZlcnQgYSBuYW1lZCByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBuYW1lZCBvYmplY3QgKi8KIAogCQkJCXRlbXBfbm9kZSA9IG9ial9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0OwpAQCAtNjIzLDcgKzYyNiw3IEBACiAKIAkJCWRlZmF1bHQ6CiAJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkJICAgICJOZWVkZWQgW1JlZ2lvbi9yZWdpb25fZmllbGRdLCBmb3VuZCBbJXNdICVwIiwKKwkJCQkJICAgICJOZWVkZWQgW1JlZ2lvbi9SZWdpb25GaWVsZF0sIGZvdW5kIFslc10gJXAiLAogCQkJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZQogCQkJCQkgICAgKG9ial9kZXNjKSwgb2JqX2Rlc2MpKTsKIApAQCAtNjYyLDYgKzY2NSw3IEBACiAJCQkJfQogCiAJCQkJaWYgKHRhcmdldF9vcCA9PSBBTUxfREVCVUdfT1ApIHsKKwogCQkJCQkvKiBBbGxvdyBzdG9yZSBvZiBhbnkgb2JqZWN0IHRvIHRoZSBEZWJ1ZyBvYmplY3QgKi8KIAogCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3JlLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzdG9yZS5jCmluZGV4IDNmMDIwYzAuLjA0NTY0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3RvcmUuYwpAQCAtODIsNyArODIsNyBAQAogewogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2RvX2RlYnVnX29iamVjdCIsIHNvdXJjZV9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9kb19kZWJ1Z19vYmplY3QsIHNvdXJjZV9kZXNjKTsKIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0RFQlVHX09CSkVDVCwgIltBQ1BJIERlYnVnXSAlKnMiLAogCQkJICAgICAgbGV2ZWwsICIgIikpOwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVmX2Rlc2MgPSBkZXN0X2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfc3RvcmUiLCBkZXN0X2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X3N0b3JlLCBkZXN0X2Rlc2MpOwogCiAJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwogCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogCQlBQ1BJX0RVTVBfU1RBQ0tfRU5UUlkoc291cmNlX2Rlc2MpOwogCQlBQ1BJX0RVTVBfU1RBQ0tfRU5UUlkoZGVzdF9kZXNjKTsKLQkJQUNQSV9EVU1QX09QRVJBTkRTKCZkZXN0X2Rlc2MsIEFDUElfSU1PREVfRVhFQ1VURSwgImV4X3N0b3JlIiwKKwkJQUNQSV9EVU1QX09QRVJBTkRTKCZkZXN0X2Rlc2MsIEFDUElfSU1PREVfRVhFQ1VURSwgIkV4U3RvcmUiLAogCQkJCSAgIDIsCiAJCQkJICAgIlRhcmdldCBpcyBub3QgYSBSZWZlcmVuY2Ugb3IgQ29uc3RhbnQgb2JqZWN0Iik7CiAKQEAgLTM5Niw3ICszOTYsNyBAQAogCXU4IHZhbHVlID0gMDsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X3N0b3JlX29iamVjdF90b19pbmRleCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfc3RvcmVfb2JqZWN0X3RvX2luZGV4KTsKIAogCS8qCiAJICogRGVzdGluYXRpb24gbXVzdCBiZSBhIHJlZmVyZW5jZSBwb2ludGVyLCBhbmQKQEAgLTQyMyw2ICs0MjMsNyBAQAogCQl9CiAKIAkJaWYgKG9ial9kZXNjKSB7CisKIAkJCS8qIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQgYnkgdGhlIHJlZiBjb3VudCBvZiB0aGUgcGFyZW50IHBhY2thZ2UgKi8KIAogCQkJZm9yIChpID0gMDsgaSA8ICgodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKQpAQCAtNTAyLDggKzUwMyw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiVGFyZ2V0IGlzIG5vdCBhIFBhY2thZ2Ugb3IgYnVmZmVyX2ZpZWxkIikpOworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiVGFyZ2V0IGlzIG5vdCBhIFBhY2thZ2Ugb3IgQnVmZmVyRmllbGQiKSk7CiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJCWJyZWFrOwogCX0KQEAgLTU0OCw3ICs1NDgsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5ld19kZXNjOwogCWFjcGlfb2JqZWN0X3R5cGUgdGFyZ2V0X3R5cGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfc3RvcmVfb2JqZWN0X3RvX25vZGUiLCBzb3VyY2VfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZXhfc3RvcmVfb2JqZWN0X3RvX25vZGUsIHNvdXJjZV9kZXNjKTsKIAogCS8qIEdldCBjdXJyZW50IHR5cGUgb2YgdGhlIG5vZGUsIGFuZCBvYmplY3QgYXR0YWNoZWQgdG8gTm9kZSAqLwogCkBAIC01NzIsNiArNTcyLDcgQEAKIAkvKiBJZiBubyBpbXBsaWNpdCBjb252ZXJzaW9uLCBkcm9wIGludG8gdGhlIGRlZmF1bHQgY2FzZSBiZWxvdyAqLwogCiAJaWYgKCghaW1wbGljaXRfY29udmVyc2lvbikgfHwgKHdhbGtfc3RhdGUtPm9wY29kZSA9PSBBTUxfQ09QWV9PUCkpIHsKKwogCQkvKiBGb3JjZSBleGVjdXRpb24gb2YgZGVmYXVsdCAobm8gaW1wbGljaXQgY29udmVyc2lvbikgKi8KIAogCQl0YXJnZXRfdHlwZSA9IEFDUElfVFlQRV9BTlk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzdG9yZW4uYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCmluZGV4IDQyOTY3YmEuLjU5MWFhZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCkBAIC03Miw3ICs3Miw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqc291cmNlX2Rlc2MgPSAqc291cmNlX2Rlc2NfcHRyOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfcmVzb2x2ZV9vYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3Jlc29sdmVfb2JqZWN0KTsKIAogCS8qIEVuc3VyZSB3ZSBoYXZlIGEgVGFyZ2V0IHRoYXQgY2FuIGJlIHN0b3JlZCB0byAqLwogCkBAIC05Nyw2ICs5Nyw3IEBACiAJCSAqLwogCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoc291cmNlX2Rlc2MpID09CiAJCSAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CisKIAkJCS8qIFJlc29sdmUgYSByZWZlcmVuY2Ugb2JqZWN0IGZpcnN0ICovCiAKIAkJCXN0YXR1cyA9CkBAIC0xMjEsNiArMTIyLDcgQEAKIAkJICAgICEoKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSA9PQogCQkgICAgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKIAkJICAgICAgJiYgKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09IEFNTF9MT0FEX09QKSkpIHsKKwogCQkJLyogQ29udmVyc2lvbiBzdWNjZXNzZnVsIGJ1dCBzdGlsbCBub3QgYSB2YWxpZCB0eXBlICovCiAKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC0xOTksNyArMjAxLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICphY3R1YWxfc3JjX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfc3RvcmVfb2JqZWN0X3RvX29iamVjdCIsIHNvdXJjZV9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9zdG9yZV9vYmplY3RfdG9fb2JqZWN0LCBzb3VyY2VfZGVzYyk7CiAKIAlhY3R1YWxfc3JjX2Rlc2MgPSBzb3VyY2VfZGVzYzsKIAlpZiAoIWRlc3RfZGVzYykgewpAQCAtMjg5LDYgKzI5MSw3IEBACiAJfQogCiAJaWYgKGFjdHVhbF9zcmNfZGVzYyAhPSBzb3VyY2VfZGVzYykgeworCiAJCS8qIERlbGV0ZSB0aGUgaW50ZXJtZWRpYXRlICh0ZW1wb3JhcnkpIHNvdXJjZSBvYmplY3QgKi8KIAogCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UoYWN0dWFsX3NyY19kZXNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3JvYi5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3Rvcm9iLmMKaW5kZXggNmFiNzA3MC4uOTllYmU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3Rvcm9iLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3Rvcm9iLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAl1MzIgbGVuZ3RoOwogCXU4ICpidWZmZXI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfc3RvcmVfYnVmZmVyX3RvX2J1ZmZlciIsIHNvdXJjZV9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9zdG9yZV9idWZmZXJfdG9fYnVmZmVyLCBzb3VyY2VfZGVzYyk7CiAKIAkvKiBXZSBrbm93IHRoYXQgc291cmNlX2Rlc2MgaXMgYSBidWZmZXIgYnkgbm93ICovCiAKQEAgLTgwLDcgKzgwLDcgQEAKIAkgKi8KIAlpZiAoKHRhcmdldF9kZXNjLT5idWZmZXIubGVuZ3RoID09IDApIHx8CiAJICAgICh0YXJnZXRfZGVzYy0+Y29tbW9uLmZsYWdzICYgQU9QT0JKX1NUQVRJQ19QT0lOVEVSKSkgewotCQl0YXJnZXRfZGVzYy0+YnVmZmVyLnBvaW50ZXIgPSBBQ1BJX01FTV9BTExPQ0FURShsZW5ndGgpOworCQl0YXJnZXRfZGVzYy0+YnVmZmVyLnBvaW50ZXIgPSBBQ1BJX0FMTE9DQVRFKGxlbmd0aCk7CiAJCWlmICghdGFyZ2V0X2Rlc2MtPmJ1ZmZlci5wb2ludGVyKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpAQCAtOTEsNiArOTEsNyBAQAogCS8qIENvcHkgc291cmNlIGJ1ZmZlciB0byB0YXJnZXQgYnVmZmVyICovCiAKIAlpZiAobGVuZ3RoIDw9IHRhcmdldF9kZXNjLT5idWZmZXIubGVuZ3RoKSB7CisKIAkJLyogQ2xlYXIgZXhpc3RpbmcgYnVmZmVyIGFuZCBjb3B5IGluIHRoZSBuZXcgb25lICovCiAKIAkJQUNQSV9NRU1TRVQodGFyZ2V0X2Rlc2MtPmJ1ZmZlci5wb2ludGVyLCAwLApAQCAtMTAyLDcgKzEwMyw3IEBACiAJCSAqIE5PVEU6IEFDUEkgdmVyc2lvbnMgdXAgdG8gMy4wIHNwZWNpZmllZCB0aGF0IHRoZSBidWZmZXIgbXVzdCBiZQogCQkgKiB0cnVuY2F0ZWQgaWYgdGhlIHN0cmluZyBpcyBzbWFsbGVyIHRoYW4gdGhlIGJ1ZmZlci4gIEhvd2V2ZXIsICJvdGhlciIKIAkJICogaW1wbGVtZW50YXRpb25zIG9mIEFDUEkgbmV2ZXIgZGlkIHRoaXMgYW5kIHRodXMgYmVjYW1lIHRoZSBkZWZhY3RvCi0JCSAqIHN0YW5kYXJkLiBBQ1BpIDMuMF9hIGNoYW5nZXMgdGhpcyBiZWhhdmlvciBzdWNoIHRoYXQgdGhlIGJ1ZmZlcgorCQkgKiBzdGFuZGFyZC4gQUNQSSAzLjBfYSBjaGFuZ2VzIHRoaXMgYmVoYXZpb3Igc3VjaCB0aGF0IHRoZSBidWZmZXIKIAkJICogaXMgbm8gbG9uZ2VyIHRydW5jYXRlZC4KIAkJICovCiAKQEAgLTExMyw2ICsxMTQsNyBAQAogCQkgKiBjb3B5IG11c3Qgbm90IHRydW5jYXRlIHRoZSBvcmlnaW5hbCBidWZmZXIuCiAJCSAqLwogCQlpZiAob3JpZ2luYWxfc3JjX3R5cGUgPT0gQUNQSV9UWVBFX1NUUklORykgeworCiAJCQkvKiBTZXQgdGhlIG5ldyBsZW5ndGggb2YgdGhlIHRhcmdldCAqLwogCiAJCQl0YXJnZXRfZGVzYy0+YnVmZmVyLmxlbmd0aCA9IGxlbmd0aDsKQEAgLTE1Niw3ICsxNTgsNyBAQAogCXUzMiBsZW5ndGg7CiAJdTggKmJ1ZmZlcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9zdG9yZV9zdHJpbmdfdG9fc3RyaW5nIiwgc291cmNlX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X3N0b3JlX3N0cmluZ190b19zdHJpbmcsIHNvdXJjZV9kZXNjKTsKIAogCS8qIFdlIGtub3cgdGhhdCBzb3VyY2VfZGVzYyBpcyBhIHN0cmluZyBieSBub3cgKi8KIApAQCAtMTgzLDEzICsxODUsMTQgQEAKIAkJICovCiAJCWlmICh0YXJnZXRfZGVzYy0+c3RyaW5nLnBvaW50ZXIgJiYKIAkJICAgICghKHRhcmdldF9kZXNjLT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfU1RBVElDX1BPSU5URVIpKSkgeworCiAJCQkvKiBPbmx5IGZyZWUgaWYgbm90IGEgcG9pbnRlciBpbnRvIHRoZSBEU0RUICovCiAKLQkJCUFDUElfTUVNX0ZSRUUodGFyZ2V0X2Rlc2MtPnN0cmluZy5wb2ludGVyKTsKKwkJCUFDUElfRlJFRSh0YXJnZXRfZGVzYy0+c3RyaW5nLnBvaW50ZXIpOwogCQl9CiAKLQkJdGFyZ2V0X2Rlc2MtPnN0cmluZy5wb2ludGVyID0gQUNQSV9NRU1fQ0FMTE9DQVRFKChhY3BpX3NpemUpCi0JCQkJCQkJCSBsZW5ndGggKyAxKTsKKwkJdGFyZ2V0X2Rlc2MtPnN0cmluZy5wb2ludGVyID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoKGFjcGlfc2l6ZSkKKwkJCQkJCQkJICAgbGVuZ3RoICsgMSk7CiAJCWlmICghdGFyZ2V0X2Rlc2MtPnN0cmluZy5wb2ludGVyKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzeXN0ZW0uYwppbmRleCBlYTkxNDRmLi41MmJlZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzeXN0ZW0uYwpAQCAtNjgsNyArNjgsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX3N0YXR1cyBzdGF0dXMyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfc3lzdGVtX3dhaXRfc2VtYXBob3JlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9zeXN0ZW1fd2FpdF9zZW1hcGhvcmUpOwogCiAJc3RhdHVzID0gYWNwaV9vc193YWl0X3NlbWFwaG9yZShzZW1hcGhvcmUsIDEsIDApOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewpAQCAtNzYsNiArNzYsNyBAQAogCX0KIAogCWlmIChzdGF0dXMgPT0gQUVfVElNRSkgeworCiAJCS8qIFdlIG11c3Qgd2FpdCwgc28gdW5sb2NrIHRoZSBpbnRlcnByZXRlciAqLwogCiAJCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwpAQCAtOTAsNiArOTEsNyBAQAogCiAJCXN0YXR1czIgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzMikpIHsKKwogCQkJLyogUmVwb3J0IGZhdGFsIGVycm9yLCBjb3VsZCBub3QgYWNxdWlyZSBpbnRlcnByZXRlciAqLwogCiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzMik7CkBAIC0xOTEsNyArMTkzLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9zeXN0ZW1fYWNxdWlyZV9tdXRleCIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9zeXN0ZW1fYWNxdWlyZV9tdXRleCwgb2JqX2Rlc2MpOwogCiAJaWYgKCFvYmpfZGVzYykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CkBAIC0yMjksNyArMjMxLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X3N5c3RlbV9yZWxlYXNlX211dGV4Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9zeXN0ZW1fcmVsZWFzZV9tdXRleCk7CiAKIAlpZiAoIW9ial9kZXNjKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTI2Myw3ICsyNjUsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfc3lzdGVtX3NpZ25hbF9ldmVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfc3lzdGVtX3NpZ25hbF9ldmVudCk7CiAKIAlpZiAob2JqX2Rlc2MpIHsKIAkJc3RhdHVzID0gYWNwaV9vc19zaWduYWxfc2VtYXBob3JlKG9ial9kZXNjLT5ldmVudC5zZW1hcGhvcmUsIDEpOwpAQCAtMjkzLDcgKzI5NSw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9zeXN0ZW1fd2FpdF9ldmVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfc3lzdGVtX3dhaXRfZXZlbnQpOwogCiAJaWYgKG9ial9kZXNjKSB7CiAJCXN0YXR1cyA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXh1dGlscy5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4dXRpbHMuYwppbmRleCBmNzNhNjFhLi45ODJjOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXh1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHV0aWxzLmMKQEAgLTg3LDkgKzg3LDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9lbnRlcl9pbnRlcnByZXRlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZW50ZXJfaW50ZXJwcmV0ZXIpOwogCi0Jc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0VYRUNVVEUpOworCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9JTlRFUlBSRVRFUik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgYWNxdWlyZSBpbnRlcnByZXRlciBtdXRleCIpKTsKIAl9CkBAIC0xMjMsOSArMTIzLDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9leGl0X2ludGVycHJldGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9leGl0X2ludGVycHJldGVyKTsKIAotCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9FWEVDVVRFKTsKKwlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfSU5URVJQUkVURVIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ291bGQgbm90IHJlbGVhc2UgaW50ZXJwcmV0ZXIgbXV0ZXgiKSk7CiAJfQpAQCAtMTg5LDExICsxODksMTIgQEAKIAl1OCBsb2NrZWQgPSBGQUxTRTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9hY3F1aXJlX2dsb2JhbF9sb2NrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9hY3F1aXJlX2dsb2JhbF9sb2NrKTsKIAogCS8qIE9ubHkgYXR0ZW1wdCBsb2NrIGlmIHRoZSBhbHdheXNfbG9jayBiaXQgaXMgc2V0ICovCiAKIAlpZiAoZmllbGRfZmxhZ3MgJiBBTUxfRklFTERfTE9DS19SVUxFX01BU0spIHsKKwogCQkvKiBXZSBzaG91bGQgYXR0ZW1wdCB0byBnZXQgdGhlIGxvY2ssIHdhaXQgZm9yZXZlciAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZXZfYWNxdWlyZV9nbG9iYWxfbG9jayhBQ1BJX1dBSVRfRk9SRVZFUik7CkBAIC0yMjUsMTUgKzIyNiwxNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X3JlbGVhc2VfZ2xvYmFsX2xvY2siKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3JlbGVhc2VfZ2xvYmFsX2xvY2spOwogCiAJLyogT25seSBhdHRlbXB0IHVubG9jayBpZiB0aGUgY2FsbGVyIGxvY2tlZCBpdCAqLwogCiAJaWYgKGxvY2tlZF9ieV9tZSkgeworCiAJCS8qIE9LLCBub3cgcmVsZWFzZSB0aGUgbG9jayAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZXZfcmVsZWFzZV9nbG9iYWxfbG9jaygpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkJLyogUmVwb3J0IHRoZSBlcnJvciwgYnV0IHRoZXJlIGlzbid0IG11Y2ggZWxzZSB3ZSBjYW4gZG8gKi8KIAogCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKQEAgLTI2Myw3ICsyNjYsNyBAQAogCXUzMiBudW1fZGlnaXRzOwogCWFjcGlfaW50ZWdlciBjdXJyZW50X3ZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfZGlnaXRzX25lZWRlZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZGlnaXRzX25lZWRlZCk7CiAKIAkvKiBhY3BpX2ludGVnZXIgaXMgdW5zaWduZWQsIHNvIHdlIGRvbid0IHdvcnJ5IGFib3V0IGEgJy0nIHByZWZpeCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdhY3BpLmMgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdhY3BpLmMKaW5kZXggZWEyZjEzMi4uZGU1MGZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3YWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od2FjcGkuYwpAQCAtNjMsNyArNjMsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImh3X2luaXRpYWxpemUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X2luaXRpYWxpemUpOwogCiAJLyogV2UgbXVzdCBoYXZlIHRoZSBBQ1BJIHRhYmxlcyBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZSAqLwogCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIHJldHJ5OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaHdfc2V0X21vZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3NldF9tb2RlKTsKIAogCS8qCiAJICogQUNQSSAyLjAgY2xhcmlmaWVkIHRoYXQgaWYgU01JX0NNRCBpbiBGQURUIGlzIHplcm8sCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIHZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaHdfZ2V0X21vZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X2dldF9tb2RlKTsKIAogCS8qCiAJICogQUNQSSAyLjAgY2xhcmlmaWVkIHRoYXQgaWYgU01JX0NNRCBpbiBGQURUIGlzIHplcm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdncGUuYyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od2dwZS5jCmluZGV4IGQ4NDk0MmQuLjYwOGEzYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od2dwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od2dwZS5jCkBAIC0yMTQsNiArMjE0LDcgQEAKIAkvKiBFeGFtaW5lIGVhY2ggR1BFIFJlZ2lzdGVyIHdpdGhpbiB0aGUgYmxvY2sgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50OyBpKyspIHsKKwogCQkvKiBEaXNhYmxlIGFsbCBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAogCQlzdGF0dXMgPSBhY3BpX2h3X2xvd19sZXZlbF93cml0ZSg4LCAweDAwLApAQCAtMjUwLDYgKzI1MSw3IEBACiAJLyogRXhhbWluZSBlYWNoIEdQRSBSZWdpc3RlciB3aXRoaW4gdGhlIGJsb2NrICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7CisKIAkJLyogQ2xlYXIgc3RhdHVzIG9uIGFsbCBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAogCQlzdGF0dXMgPSBhY3BpX2h3X2xvd19sZXZlbF93cml0ZSg4LCAweEZGLApAQCAtMzY4LDcgKzM3MCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaHdfZGlzYWJsZV9hbGxfZ3BlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfZGlzYWJsZV9hbGxfZ3Blcyk7CiAKIAlzdGF0dXMgPSBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9od19kaXNhYmxlX2dwZV9ibG9jayk7CiAJc3RhdHVzID0gYWNwaV9ldl93YWxrX2dwZV9saXN0KGFjcGlfaHdfY2xlYXJfZ3BlX2Jsb2NrKTsKQEAgLTM5MSw3ICszOTMsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImh3X2VuYWJsZV9hbGxfcnVudGltZV9ncGVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShod19lbmFibGVfYWxsX3J1bnRpbWVfZ3Blcyk7CiAKIAlzdGF0dXMgPSBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9od19lbmFibGVfcnVudGltZV9ncGVfYmxvY2spOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpAQCAtNDEzLDcgKzQxNSw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaHdfZW5hYmxlX2FsbF93YWtldXBfZ3BlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfZW5hYmxlX2FsbF93YWtldXBfZ3Blcyk7CiAKIAlzdGF0dXMgPSBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9od19lbmFibGVfd2FrZXVwX2dwZV9ibG9jayk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdyZWdzLmMgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdyZWdzLmMKaW5kZXggZTFmZTc1NC4uYWUxNDJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3cmVncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3JlZ3MuYwpAQCAtNDMsOCArNDMsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KICNpbmNsdWRlIDxhY3BpL2FjZXZlbnRzLmg+CkBAIC02MywyMyArNjEsMjEgQEAKICAqIERFU0NSSVBUSU9OOiBDbGVhcnMgYWxsIGZpeGVkIGFuZCBnZW5lcmFsIHB1cnBvc2Ugc3RhdHVzIGJpdHMKICAqICAgICAgICAgICAgICBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggSU5URVJSVVBUUyBESVNBQkxFRAogICoKKyAqIE5PVEU6IFRCRDogRmxhZ3MgcGFyYW1ldGVyIGlzIG9ic29sZXRlLCB0byBiZSByZW1vdmVkCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGFjcGlfc3RhdHVzIGFjcGlfaHdfY2xlYXJfYWNwaV9zdGF0dXModTMyIGZsYWdzKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2NwdV9mbGFncyBsb2NrX2ZsYWdzID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImh3X2NsZWFyX2FjcGlfc3RhdHVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShod19jbGVhcl9hY3BpX3N0YXR1cyk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lPLCAiQWJvdXQgdG8gd3JpdGUgJTA0WCB0byAlMDRYXG4iLAogCQkJICBBQ1BJX0JJVE1BU0tfQUxMX0ZJWEVEX1NUQVRVUywKIAkJCSAgKHUxNikgYWNwaV9nYmxfRkFEVC0+eHBtMWFfZXZ0X2Jsay5hZGRyZXNzKSk7CiAKLQlpZiAoZmxhZ3MgJiBBQ1BJX01UWF9MT0NLKSB7Ci0JCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9IQVJEV0FSRSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCX0KLQl9CisJbG9ja19mbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCiAJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX01UWF9ET19OT1RfTE9DSywKIAkJCQkJQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTLApAQCAtMTA0LDkgKzEwMCw3IEBACiAJc3RhdHVzID0gYWNwaV9ldl93YWxrX2dwZV9saXN0KGFjcGlfaHdfY2xlYXJfZ3BlX2Jsb2NrKTsKIAogICAgICAgdW5sb2NrX2FuZF9leGl0OgotCWlmIChmbGFncyAmIEFDUElfTVRYX0xPQ0spIHsKLQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0hBUkRXQVJFKTsKLQl9CisJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jaywgbG9ja19mbGFncyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTEyOSwxMCArMTIzLDkgQEAKIGFjcGlfZ2V0X3NsZWVwX3R5cGVfZGF0YSh1OCBzbGVlcF9zdGF0ZSwgdTggKiBzbGVlcF90eXBlX2EsIHU4ICogc2xlZXBfdHlwZV9iKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87Ci0JY2hhciAqc2xlZXBfc3RhdGVfbmFtZTsKKwlzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfc2xlZXBfdHlwZV9kYXRhIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF9zbGVlcF90eXBlX2RhdGEpOwogCiAJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwogCkBAIC0xNDAsMzQgKzEzMywzOSBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyogRXZhbHVhdGUgdGhlIG5hbWVzcGFjZSBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWVzIGZvciB0aGlzIHN0YXRlICovCisJLyogQWxsb2NhdGUgdGhlIGV2YWx1YXRpb24gaW5mb3JtYXRpb24gYmxvY2sgKi8KIAotCWluZm8ucGFyYW1ldGVycyA9IE5VTEw7Ci0JaW5mby5yZXR1cm5fb2JqZWN0ID0gTlVMTDsKLQlzbGVlcF9zdGF0ZV9uYW1lID0KKwlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8pKTsKKwlpZiAoIWluZm8pIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CisJfQorCisJaW5mby0+cGF0aG5hbWUgPQogCSAgICBBQ1BJX0NBU1RfUFRSKGNoYXIsIGFjcGlfZ2JsX3NsZWVwX3N0YXRlX25hbWVzW3NsZWVwX3N0YXRlXSk7CiAKLQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX2J5X25hbWUoc2xlZXBfc3RhdGVfbmFtZSwgJmluZm8pOworCS8qIEV2YWx1YXRlIHRoZSBuYW1lc3BhY2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmb3IgdGhpcyBzdGF0ZSAqLworCisJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZShpbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCSAgIiVzIHdoaWxlIGV2YWx1YXRpbmcgc2xlZXBfc3RhdGUgWyVzXVxuIiwKKwkJCQkgICIlcyB3aGlsZSBldmFsdWF0aW5nIFNsZWVwU3RhdGUgWyVzXVxuIiwKIAkJCQkgIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpLAotCQkJCSAgc2xlZXBfc3RhdGVfbmFtZSkpOworCQkJCSAgaW5mby0+cGF0aG5hbWUpKTsKIAotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIE11c3QgaGF2ZSBhIHJldHVybiBvYmplY3QgKi8KIAotCWlmICghaW5mby5yZXR1cm5fb2JqZWN0KSB7CisJaWYgKCFpbmZvLT5yZXR1cm5fb2JqZWN0KSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJObyBTbGVlcCBTdGF0ZSBvYmplY3QgcmV0dXJuZWQgZnJvbSBbJXNdIiwKLQkJCSAgICBzbGVlcF9zdGF0ZV9uYW1lKSk7CisJCQkgICAgaW5mby0+cGF0aG5hbWUpKTsKIAkJc3RhdHVzID0gQUVfTk9UX0VYSVNUOwogCX0KIAogCS8qIEl0IG11c3QgYmUgb2YgdHlwZSBQYWNrYWdlICovCiAKLQllbHNlIGlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbmZvLnJldHVybl9vYmplY3QpICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJZWxzZSBpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW5mby0+cmV0dXJuX29iamVjdCkgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIG9iamVjdCBpcyBub3QgYSBQYWNrYWdlIikpOwogCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwpAQCAtMTgwLDcgKzE3OCw3IEBACiAJICogYnkgQklPUyB2ZW5kb3JzIHNlZW1zIHRvIGJlIHRvIGhhdmUgMiBvciBtb3JlIGVsZW1lbnRzLCBhdCBsZWFzdAogCSAqIG9uZSBwZXIgc2xlZXAgdHlwZSAoQS9CKS4KIAkgKi8KLQllbHNlIGlmIChpbmZvLnJldHVybl9vYmplY3QtPnBhY2thZ2UuY291bnQgPCAyKSB7CisJZWxzZSBpZiAoaW5mby0+cmV0dXJuX29iamVjdC0+cGFja2FnZS5jb3VudCA8IDIpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIHBhY2thZ2UgZG9lcyBub3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMiKSk7CiAJCXN0YXR1cyA9IEFFX0FNTF9OT19PUEVSQU5EOwpAQCAtMTg4LDM5ICsxODYsNDIgQEAKIAogCS8qIFRoZSBmaXJzdCB0d28gZWxlbWVudHMgbXVzdCBib3RoIGJlIG9mIHR5cGUgSW50ZWdlciAqLwogCi0JZWxzZSBpZiAoKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8ucmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50c1swXSkKKwllbHNlIGlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW5mby0+cmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50c1swXSkKIAkJICAhPSBBQ1BJX1RZUEVfSU5URUdFUikgfHwKLQkJIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbmZvLnJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHNbMV0pCisJCSAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW5mby0+cmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50c1sxXSkKIAkJICAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIHBhY2thZ2UgZWxlbWVudHMgYXJlIG5vdCBib3RoIEludGVnZXJzICglcywgJXMpIiwKLQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKGluZm8ucmV0dXJuX29iamVjdC0+CisJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShpbmZvLT5yZXR1cm5fb2JqZWN0LT4KIAkJCQkJCQkgcGFja2FnZS5lbGVtZW50c1swXSksCi0JCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShpbmZvLnJldHVybl9vYmplY3QtPgorCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby0+cmV0dXJuX29iamVjdC0+CiAJCQkJCQkJIHBhY2thZ2UuZWxlbWVudHNbMV0pKSk7CiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJfSBlbHNlIHsKIAkJLyogVmFsaWQgX1N4XyBwYWNrYWdlIHNpemUsIHR5cGUsIGFuZCB2YWx1ZSAqLwogCiAJCSpzbGVlcF90eXBlX2EgPSAodTgpCi0JCSAgICAoaW5mby5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzBdKS0+aW50ZWdlci52YWx1ZTsKKwkJICAgIChpbmZvLT5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzBdKS0+aW50ZWdlci52YWx1ZTsKIAkJKnNsZWVwX3R5cGVfYiA9ICh1OCkKLQkJICAgIChpbmZvLnJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHNbMV0pLT5pbnRlZ2VyLnZhbHVlOworCQkgICAgKGluZm8tPnJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHNbMV0pLT5pbnRlZ2VyLnZhbHVlOwogCX0KIAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAotCQkJCSJXaGlsZSBldmFsdWF0aW5nIHNsZWVwX3N0YXRlIFslc10sIGJhZCBTbGVlcCBvYmplY3QgJXAgdHlwZSAlcyIsCi0JCQkJc2xlZXBfc3RhdGVfbmFtZSwgaW5mby5yZXR1cm5fb2JqZWN0LAotCQkJCWFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby4KKwkJCQkiV2hpbGUgZXZhbHVhdGluZyBTbGVlcFN0YXRlIFslc10sIGJhZCBTbGVlcCBvYmplY3QgJXAgdHlwZSAlcyIsCisJCQkJaW5mby0+cGF0aG5hbWUsIGluZm8tPnJldHVybl9vYmplY3QsCisJCQkJYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShpbmZvLT4KIAkJCQkJCQkgICAgIHJldHVybl9vYmplY3QpKSk7CiAJfQogCi0JYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8ucmV0dXJuX29iamVjdCk7CisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8tPnJldHVybl9vYmplY3QpOworCisgICAgICBjbGVhbnVwOgorCUFDUElfRlJFRShpbmZvKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9zbGVlcF90eXBlX2RhdGEpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3NsZWVwX3R5cGVfZGF0YSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yMzMsMTMgKzIzNCwxMiBAQAogICogREVTQ1JJUFRJT046IE1hcCByZWdpc3Rlcl9pZCBpbnRvIGEgcmVnaXN0ZXIgYml0bWFzay4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdHJ1Y3QgYWNwaV9iaXRfcmVnaXN0ZXJfaW5mbyAqYWNwaV9od19nZXRfYml0X3JlZ2lzdGVyX2luZm8odTMyIHJlZ2lzdGVyX2lkKQogewogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIAogCWlmIChyZWdpc3Rlcl9pZCA+IEFDUElfQklUUkVHX01BWCkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBiaXRfcmVnaXN0ZXIgSUQ6ICVYIiwKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgQml0UmVnaXN0ZXIgSUQ6ICVYIiwKIAkJCSAgICByZWdpc3Rlcl9pZCkpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KQEAgLTI2MCw2ICsyNjAsOCBAQAogICoKICAqIERFU0NSSVBUSU9OOiBBQ1BJIGJpdF9yZWdpc3RlciByZWFkIGZ1bmN0aW9uLgogICoKKyAqIE5PVEU6IFRCRDogRmxhZ3MgcGFyYW1ldGVyIGlzIG9ic29sZXRlLCB0byBiZSByZW1vdmVkCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMgYWNwaV9nZXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKiByZXR1cm5fdmFsdWUsIHUzMiBmbGFncykKQEAgLTI2OCw3ICsyNzAsNyBAQAogCXN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICpiaXRfcmVnX2luZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfcmVnaXN0ZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3JlZ2lzdGVyKTsKIAogCS8qIEdldCB0aGUgaW5mbyBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIEFDUEkgUmVnaXN0ZXIgKi8KIApAQCAtMjc3LDI0ICsyNzksMTQgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCWlmIChmbGFncyAmIEFDUElfTVRYX0xPQ0spIHsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0hBUkRXQVJFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJfQotCX0KLQogCS8qIFJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIgKi8KIAotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX01UWF9ET19OT1RfTE9DSywKKwlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9NVFhfTE9DSywKIAkJCQkgICAgICAgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCiAJCQkJICAgICAgICZyZWdpc3Rlcl92YWx1ZSk7CiAKLQlpZiAoZmxhZ3MgJiBBQ1BJX01UWF9MT0NLKSB7Ci0JCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9IQVJEV0FSRSk7Ci0JfQotCiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJLyogTm9ybWFsaXplIHRoZSB2YWx1ZSB0aGF0IHdhcyByZWFkICovCiAKIAkJcmVnaXN0ZXJfdmFsdWUgPQpAQCAtMzExLDcgKzMwMyw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9nZXRfcmVnaXN0ZXIpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3JlZ2lzdGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTMyNiwzMSArMzE4LDI4IEBACiAgKgogICogREVTQ1JJUFRJT046IEFDUEkgQml0IFJlZ2lzdGVyIHdyaXRlIGZ1bmN0aW9uLgogICoKKyAqIE5PVEU6IFRCRDogRmxhZ3MgcGFyYW1ldGVyIGlzIG9ic29sZXRlLCB0byBiZSByZW1vdmVkCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9zZXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgdmFsdWUsIHUzMiBmbGFncykKIHsKIAl1MzIgcmVnaXN0ZXJfdmFsdWUgPSAwOwogCXN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICpiaXRfcmVnX2luZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfY3B1X2ZsYWdzIGxvY2tfZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigiYWNwaV9zZXRfcmVnaXN0ZXIiLCByZWdpc3Rlcl9pZCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoYWNwaV9zZXRfcmVnaXN0ZXIsIHJlZ2lzdGVyX2lkKTsKIAogCS8qIEdldCB0aGUgaW5mbyBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIEFDUEkgUmVnaXN0ZXIgKi8KIAogCWJpdF9yZWdfaW5mbyA9IGFjcGlfaHdfZ2V0X2JpdF9yZWdpc3Rlcl9pbmZvKHJlZ2lzdGVyX2lkKTsKIAlpZiAoIWJpdF9yZWdfaW5mbykgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQmFkIEFDUEkgSFcgcmVnaXN0ZXJfaWQ6ICVYIiwKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkJhZCBBQ1BJIEhXIFJlZ2lzdGVySWQ6ICVYIiwKIAkJCSAgICByZWdpc3Rlcl9pZCkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JaWYgKGZsYWdzICYgQUNQSV9NVFhfTE9DSykgewotCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfSEFSRFdBUkUpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQl9Ci0JfQorCWxvY2tfZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKIAogCS8qIEFsd2F5cyBkbyBhIHJlZ2lzdGVyIHJlYWQgZmlyc3Qgc28gd2UgY2FuIGluc2VydCB0aGUgbmV3IGJpdHMgICovCiAKQEAgLTQ1OCw5ICs0NDcsNyBAQAogCiAgICAgICB1bmxvY2tfYW5kX2V4aXQ6CiAKLQlpZiAoZmxhZ3MgJiBBQ1BJX01UWF9MT0NLKSB7Ci0JCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9IQVJEV0FSRSk7Ci0JfQorCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2ssIGxvY2tfZmxhZ3MpOwogCiAJLyogTm9ybWFsaXplIHRoZSB2YWx1ZSB0aGF0IHdhcyByZWFkICovCiAKQEAgLTQ3NCw3ICs0NjEsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X3JlZ2lzdGVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9yZWdpc3RlcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQ5MCwyMSArNDc3LDE4IEBACiAgKiAgICAgICAgICAgICAgZ2l2ZW4gb2Zmc2V0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQodTggdXNlX2xvY2ssIHUzMiByZWdpc3Rlcl9pZCwgdTMyICogcmV0dXJuX3ZhbHVlKQogewogCXUzMiB2YWx1ZTEgPSAwOwogCXUzMiB2YWx1ZTIgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2NwdV9mbGFncyBsb2NrX2ZsYWdzID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImh3X3JlZ2lzdGVyX3JlYWQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3JlZ2lzdGVyX3JlYWQpOwogCiAJaWYgKEFDUElfTVRYX0xPQ0sgPT0gdXNlX2xvY2spIHsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0hBUkRXQVJFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJfQorCQlsb2NrX2ZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7CiAJfQogCiAJc3dpdGNoIChyZWdpc3Rlcl9pZCkgewpAQCAtNTgyLDcgKzU2Niw3IEBACiAKICAgICAgIHVubG9ja19hbmRfZXhpdDoKIAlpZiAoQUNQSV9NVFhfTE9DSyA9PSB1c2VfbG9jaykgewotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfSEFSRFdBUkUpOworCQlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBsb2NrX2ZsYWdzKTsKIAl9CiAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKQEAgLTYxMCwxNCArNTk0LDEyIEBACiBhY3BpX3N0YXR1cyBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKHU4IHVzZV9sb2NrLCB1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9jcHVfZmxhZ3MgbG9ja19mbGFncyA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJod19yZWdpc3Rlcl93cml0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfcmVnaXN0ZXJfd3JpdGUpOwogCiAJaWYgKEFDUElfTVRYX0xPQ0sgPT0gdXNlX2xvY2spIHsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0hBUkRXQVJFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJfQorCQlsb2NrX2ZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7CiAJfQogCiAJc3dpdGNoIChyZWdpc3Rlcl9pZCkgewpAQCAtNzA3LDcgKzY4OSw3IEBACiAKICAgICAgIHVubG9ja19hbmRfZXhpdDoKIAlpZiAoQUNQSV9NVFhfTE9DSyA9PSB1c2VfbG9jaykgewotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfSEFSRFdBUkUpOworCQlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBsb2NrX2ZsYWdzKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTczMyw3ICs3MTUsNyBAQAogCXU2NCBhZGRyZXNzOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiaHdfbG93X2xldmVsX3JlYWQiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoaHdfbG93X2xldmVsX3JlYWQpOwogCiAJLyoKIAkgKiBNdXN0IGhhdmUgYSB2YWxpZCBwb2ludGVyIHRvIGEgR0FTIHN0cnVjdHVyZSwgYW5kCkBAIC04MDUsNyArNzg3LDcgQEAKIAl1NjQgYWRkcmVzczsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImh3X2xvd19sZXZlbF93cml0ZSIpOworCUFDUElfRlVOQ1RJT05fTkFNRShod19sb3dfbGV2ZWxfd3JpdGUpOwogCiAJLyoKIAkgKiBNdXN0IGhhdmUgYSB2YWxpZCBwb2ludGVyIHRvIGEgR0FTIHN0cnVjdHVyZSwgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdzbGVlcC5jIGIvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYwppbmRleCA4OTI2OTI3Li44YmI0M2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdzbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3NsZWVwLmMKQEAgLTQyLDcgKzQyLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0hBUkRXQVJFCkBAIC02NCw3ICs2Myw3IEBACiBhY3BpX3NldF9maXJtd2FyZV93YWtpbmdfdmVjdG9yKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzaWNhbF9hZGRyZXNzKQogewogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3Rvcik7CiAKIAkvKiBTZXQgdGhlIHZlY3RvciAqLwogCkBAIC03OSw2ICs3OCw4IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IKQEAgLTkyLDEzICs5MywxMiBAQAogICogREVTQ1JJUFRJT046IEFjY2VzcyBmdW5jdGlvbiBmb3IgdGhlIGZpcm13YXJlX3dha2luZ192ZWN0b3IgZmllbGQgaW4gRkFDUwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IoYWNwaV9waHlzaWNhbF9hZGRyZXNzICogcGh5c2ljYWxfYWRkcmVzcykKIHsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpOwogCiAJaWYgKCFwaHlzaWNhbF9hZGRyZXNzKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTExOCw2ICsxMTgsOCBAQAogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KKworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpCiAjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzNCwxNCArMTM2LDEzIEBACiAgKiAgICAgICAgICAgICAgdmFyaW91cyBPUy1zcGVjaWZpYyB0YXNrcyBiZXR3ZWVuIHRoZSB0d28gc3RlcHMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9wcmVwKHU4IHNsZWVwX3N0YXRlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdDsKIAl1bmlvbiBhY3BpX29iamVjdCBhcmc7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VudGVyX3NsZWVwX3N0YXRlX3ByZXAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW50ZXJfc2xlZXBfc3RhdGVfcHJlcCk7CiAKIAkvKgogCSAqIF9QU1cgbWV0aG9kcyBjb3VsZCBiZSBydW4gaGVyZSB0byBlbmFibGUgd2FrZS1vbiBrZXlib2FyZCwgTEFOLCBldGMuCkBAIC0yMDYsNiArMjA3LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9wcmVwKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2VudGVyX3NsZWVwX3N0YXRlCkBAIC0yMTgsNyArMjIxLDYgQEAKICAqICAgICAgICAgICAgICBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggSU5URVJSVVBUUyBESVNBQkxFRAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFzbWxpbmthZ2UgYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZSh1OCBzbGVlcF9zdGF0ZSkKIHsKIAl1MzIgUE0xQWNvbnRyb2w7CkBAIC0yMjgsNyArMjMwLDcgQEAKIAl1MzIgaW5fdmFsdWU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZSk7CiAKIAlpZiAoKGFjcGlfZ2JsX3NsZWVwX3R5cGVfYSA+IEFDUElfU0xFRVBfVFlQRV9NQVgpIHx8CiAJICAgIChhY3BpX2dibF9zbGVlcF90eXBlX2IgPiBBQ1BJX1NMRUVQX1RZUEVfTUFYKSkgewpAQCAtMzc4LDcgKzM4MCw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2VudGVyX3NsZWVwX3N0YXRlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2VudGVyX3NsZWVwX3N0YXRlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTM5MiwxMyArMzk0LDEyIEBACiAgKiAgICAgICAgICAgICAgVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIElOVEVSUlVQVFMgRElTQUJMRUQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhc21saW5rYWdlIGFjcGlfZW50ZXJfc2xlZXBfc3RhdGVfczRiaW9zKHZvaWQpCiB7CiAJdTMyIGluX3ZhbHVlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZW50ZXJfc2xlZXBfc3RhdGVfczRiaW9zIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VudGVyX3NsZWVwX3N0YXRlX3M0Ymlvcyk7CiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgMSwgQUNQSV9NVFhfRE9fTk9UX0xPQ0spOwpAQCAtNDQzLDcgKzQ0NCw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2VudGVyX3NsZWVwX3N0YXRlX3M0Ymlvcyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9zNGJpb3MpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDU3LDcgKzQ1OCw2IEBACiAgKiAgICAgICAgICAgICAgQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBFTkFCTEVELgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfbGVhdmVfc2xlZXBfc3RhdGUodTggc2xlZXBfc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3Q7CkBAIC00NjgsNyArNDY4LDcgQEAKIAl1MzIgUE0xQWNvbnRyb2w7CiAJdTMyIFBNMUJjb250cm9sOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9sZWF2ZV9zbGVlcF9zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9sZWF2ZV9zbGVlcF9zdGF0ZSk7CiAKIAkvKgogCSAqIFNldCBTTFBfVFlQRSBhbmQgU0xQX0VOIHRvIHN0YXRlIFMwLgpAQCAtNDkwLDYgKzQ5MCw3IEBACiAJCQkJCSAgICAgICBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAogCQkJCQkgICAgICAgJlBNMUFjb250cm9sKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJCS8qIENsZWFyIFNMUF9FTiBhbmQgU0xQX1RZUCBmaWVsZHMgKi8KIAogCQkJUE0xQWNvbnRyb2wgJj0gfihzbGVlcF90eXBlX3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2sgfApAQCAtNTgzLDMgKzU4NCw1IEBACiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KKworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbGVhdmVfc2xlZXBfc3RhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHd0aW1lci5jIGIvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3dGltZXIuYwppbmRleCBmYzEwYjdjLi5jNGVjNDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHd0aW1lci5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3RpbWVyLmMKQEAgLTQyLDcgKzQyLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0hBUkRXQVJFCkBAIC02MSwxMyArNjAsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cyBhY3BpX2dldF90aW1lcl9yZXNvbHV0aW9uKHUzMiAqIHJlc29sdXRpb24pCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfdGltZXJfcmVzb2x1dGlvbiIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfdGltZXJfcmVzb2x1dGlvbik7CiAKIAlpZiAoIXJlc29sdXRpb24pIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCWlmICgwID09IGFjcGlfZ2JsX0ZBRFQtPnRtcl92YWxfZXh0KSB7CisJaWYgKGFjcGlfZ2JsX0ZBRFQtPnRtcl92YWxfZXh0ID09IDApIHsKIAkJKnJlc29sdXRpb24gPSAyNDsKIAl9IGVsc2UgewogCQkqcmVzb2x1dGlvbiA9IDMyOwpAQCAtNzYsNiArNzUsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF90aW1lcl9yZXNvbHV0aW9uKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3RpbWVyCkBAIC04NywxMiArODgsMTEgQEAKICAqIERFU0NSSVBUSU9OOiBPYnRhaW5zIGN1cnJlbnQgdmFsdWUgb2YgQUNQSSBQTSBUaW1lciAoaW4gdGlja3MpLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfZ2V0X3RpbWVyKHUzMiAqIHRpY2tzKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X3RpbWVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF90aW1lcik7CiAKIAlpZiAoIXRpY2tzKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3RpbWVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF90aW1lcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTEzMyw3ICsxMzMsNiBAQAogICogICAgICAgICAgICAgIDIqKjMyIFRpY2tzIC8gMyw2MDAsMDAwIFRpY2tzL1NlYyA9IDExOTMgc2VjIG9yIDE5Ljg4IG1pbnV0ZXMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfdGltZXJfZHVyYXRpb24odTMyIHN0YXJ0X3RpY2tzLCB1MzIgZW5kX3RpY2tzLCB1MzIgKiB0aW1lX2VsYXBzZWQpCiB7CkBAIC0xNDEsNyArMTQwLDcgQEAKIAl1MzIgZGVsdGFfdGlja3M7CiAJYWNwaV9pbnRlZ2VyIHF1b3RpZW50OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfdGltZXJfZHVyYXRpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3RpbWVyX2R1cmF0aW9uKTsKIAogCWlmICghdGltZV9lbGFwc2VkKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTE1NCw3ICsxNTMsOCBAQAogCWlmIChzdGFydF90aWNrcyA8IGVuZF90aWNrcykgewogCQlkZWx0YV90aWNrcyA9IGVuZF90aWNrcyAtIHN0YXJ0X3RpY2tzOwogCX0gZWxzZSBpZiAoc3RhcnRfdGlja3MgPiBlbmRfdGlja3MpIHsKLQkJaWYgKDAgPT0gYWNwaV9nYmxfRkFEVC0+dG1yX3ZhbF9leHQpIHsKKwkJaWYgKGFjcGlfZ2JsX0ZBRFQtPnRtcl92YWxfZXh0ID09IDApIHsKKwogCQkJLyogMjQtYml0IFRpbWVyICovCiAKIAkJCWRlbHRhX3RpY2tzID0KQEAgLTE4Myw0ICsxODMsNCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3RpbWVyX2R1cmF0aW9uKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF90aW1lcl9kdXJhdGlvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9tb3RoZXJib2FyZC5jIGIvZHJpdmVycy9hY3BpL21vdGhlcmJvYXJkLmMKaW5kZXggNDY4MjQ0MS4uZDUxZDY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL21vdGhlcmJvYXJkLmMKKysrIGIvZHJpdmVycy9hY3BpL21vdGhlcmJvYXJkLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgQUNQSV9NQl9ISUQyCQkJIlBOUDBDMDIiCiAvKioKICAqIERvZXNuJ3QgY2FyZSBhYm91dCBsZWdhY3kgSU8gcG9ydHMsIG9ubHkgSU8gcG9ydHMgYmV5b25kIDB4MTAwMCBhcmUgcmVzZXJ2ZWQKLSAqIERvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZmFpbHVyZSBvZiAncmVxdWVzdF9yZWdpb24nLCBzaW5jZSBvdGhlciBtYXkgcmVzZXJ2ZSAKKyAqIERvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZmFpbHVyZSBvZiAncmVxdWVzdF9yZWdpb24nLCBzaW5jZSBvdGhlciBtYXkgcmVzZXJ2ZQogICogdGhlIGlvIHBvcnRzIGFzIHdlbGwKICAqLwogI2RlZmluZSBJU19SRVNFUlZFRF9BRERSKGJhc2UsIGxlbikgXApAQCAtNDYsNyArNDYsNyBAQAogLyoKICAqIENsZWFyaW5nIHRoZSBmbGFnIChJT1JFU09VUkNFX0JVU1kpIGFsbG93cyBkcml2ZXJzIHRvIHVzZQogICogdGhlIGlvIHBvcnRzIGlmIHRoZXkgcmVhbGx5IGtub3cgdGhleSBjYW4gdXNlIGl0LCB3aGlsZQotICogc3RpbGwgcHJldmVudGluZyBob3RwbHVnIFBDSSBkZXZpY2VzIGZyb20gdXNpbmcgaXQuIAorICogc3RpbGwgcHJldmVudGluZyBob3RwbHVnIFBDSSBkZXZpY2VzIGZyb20gdXNpbmcgaXQuCiAgKi8KIHN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3Jlc2VydmVfaW9fcmFuZ2VzKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXMsIHZvaWQgKmRhdGEpCiB7CkBAIC0xMjMsNDkgKzEyMyw1NCBAQAogCQl9LAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IGFjcGlfcmVxdWVzdF9yZWdpb24gKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqYWRkciwKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBjaGFyICpkZXNjKQoreworCWlmICghYWRkci0+YWRkcmVzcyB8fCAhbGVuZ3RoKQorCQlyZXR1cm47CisKKwlpZiAoYWRkci0+YWRkcmVzc19zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8pCisJCXJlcXVlc3RfcmVnaW9uKGFkZHItPmFkZHJlc3MsIGxlbmd0aCwgZGVzYyk7CisJZWxzZSBpZiAoYWRkci0+YWRkcmVzc19zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZKQorCQlyZXF1ZXN0X21lbV9yZWdpb24oYWRkci0+YWRkcmVzcywgbGVuZ3RoLCBkZXNjKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGFjcGlfcmVzZXJ2ZV9yZXNvdXJjZXModm9pZCkKIHsKLQlpZiAoYWNwaV9nYmxfRkFEVC0+eHBtMWFfZXZ0X2Jsay5hZGRyZXNzICYmIGFjcGlfZ2JsX0ZBRFQtPnBtMV9ldnRfbGVuKQotCQlyZXF1ZXN0X3JlZ2lvbihhY3BpX2dibF9GQURULT54cG0xYV9ldnRfYmxrLmFkZHJlc3MsCi0JCQkgICAgICAgYWNwaV9nYmxfRkFEVC0+cG0xX2V2dF9sZW4sICJQTTFhX0VWVF9CTEsiKTsKKwlhY3BpX3JlcXVlc3RfcmVnaW9uKCZhY3BpX2dibF9GQURULT54cG0xYV9ldnRfYmxrLAorCQkJICAgICAgIGFjcGlfZ2JsX0ZBRFQtPnBtMV9ldnRfbGVuLCAiQUNQSSBQTTFhX0VWVF9CTEsiKTsKIAotCWlmIChhY3BpX2dibF9GQURULT54cG0xYl9ldnRfYmxrLmFkZHJlc3MgJiYgYWNwaV9nYmxfRkFEVC0+cG0xX2V2dF9sZW4pCi0JCXJlcXVlc3RfcmVnaW9uKGFjcGlfZ2JsX0ZBRFQtPnhwbTFiX2V2dF9ibGsuYWRkcmVzcywKLQkJCSAgICAgICBhY3BpX2dibF9GQURULT5wbTFfZXZ0X2xlbiwgIlBNMWJfRVZUX0JMSyIpOworCWFjcGlfcmVxdWVzdF9yZWdpb24oJmFjcGlfZ2JsX0ZBRFQtPnhwbTFiX2V2dF9ibGssCisJCQkgICAgICAgYWNwaV9nYmxfRkFEVC0+cG0xX2V2dF9sZW4sICJBQ1BJIFBNMWJfRVZUX0JMSyIpOwogCi0JaWYgKGFjcGlfZ2JsX0ZBRFQtPnhwbTFhX2NudF9ibGsuYWRkcmVzcyAmJiBhY3BpX2dibF9GQURULT5wbTFfY250X2xlbikKLQkJcmVxdWVzdF9yZWdpb24oYWNwaV9nYmxfRkFEVC0+eHBtMWFfY250X2Jsay5hZGRyZXNzLAotCQkJICAgICAgIGFjcGlfZ2JsX0ZBRFQtPnBtMV9jbnRfbGVuLCAiUE0xYV9DTlRfQkxLIik7CisJYWNwaV9yZXF1ZXN0X3JlZ2lvbigmYWNwaV9nYmxfRkFEVC0+eHBtMWFfY250X2JsaywKKwkJCSAgICAgICBhY3BpX2dibF9GQURULT5wbTFfY250X2xlbiwgIkFDUEkgUE0xYV9DTlRfQkxLIik7CiAKLQlpZiAoYWNwaV9nYmxfRkFEVC0+eHBtMWJfY250X2Jsay5hZGRyZXNzICYmIGFjcGlfZ2JsX0ZBRFQtPnBtMV9jbnRfbGVuKQotCQlyZXF1ZXN0X3JlZ2lvbihhY3BpX2dibF9GQURULT54cG0xYl9jbnRfYmxrLmFkZHJlc3MsCi0JCQkgICAgICAgYWNwaV9nYmxfRkFEVC0+cG0xX2NudF9sZW4sICJQTTFiX0NOVF9CTEsiKTsKKwlhY3BpX3JlcXVlc3RfcmVnaW9uKCZhY3BpX2dibF9GQURULT54cG0xYl9jbnRfYmxrLAorCQkJICAgICAgIGFjcGlfZ2JsX0ZBRFQtPnBtMV9jbnRfbGVuLCAiQUNQSSBQTTFiX0NOVF9CTEsiKTsKIAotCWlmIChhY3BpX2dibF9GQURULT54cG1fdG1yX2Jsay5hZGRyZXNzICYmIGFjcGlfZ2JsX0ZBRFQtPnBtX3RtX2xlbiA9PSA0KQotCQlyZXF1ZXN0X3JlZ2lvbihhY3BpX2dibF9GQURULT54cG1fdG1yX2Jsay5hZGRyZXNzLCA0LCAiUE1fVE1SIik7CisJaWYgKGFjcGlfZ2JsX0ZBRFQtPnBtX3RtX2xlbiA9PSA0KQorCQlhY3BpX3JlcXVlc3RfcmVnaW9uKCZhY3BpX2dibF9GQURULT54cG1fdG1yX2JsaywgNCwgIkFDUEkgUE1fVE1SIik7CiAKLQlpZiAoYWNwaV9nYmxfRkFEVC0+eHBtMl9jbnRfYmxrLmFkZHJlc3MgJiYgYWNwaV9nYmxfRkFEVC0+cG0yX2NudF9sZW4pCi0JCXJlcXVlc3RfcmVnaW9uKGFjcGlfZ2JsX0ZBRFQtPnhwbTJfY250X2Jsay5hZGRyZXNzLAotCQkJICAgICAgIGFjcGlfZ2JsX0ZBRFQtPnBtMl9jbnRfbGVuLCAiUE0yX0NOVF9CTEsiKTsKKwlhY3BpX3JlcXVlc3RfcmVnaW9uKCZhY3BpX2dibF9GQURULT54cG0yX2NudF9ibGssCisJCQkgICAgICAgYWNwaV9nYmxfRkFEVC0+cG0yX2NudF9sZW4sICJBQ1BJIFBNMl9DTlRfQkxLIik7CiAKIAkvKiBMZW5ndGggb2YgR1BFIGJsb2NrcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG11bHRpcGxlIG9mIDIgKi8KIAotCWlmIChhY3BpX2dibF9GQURULT54Z3BlMF9ibGsuYWRkcmVzcyAmJiBhY3BpX2dibF9GQURULT5ncGUwX2Jsa19sZW4gJiYKLQkgICAgIShhY3BpX2dibF9GQURULT5ncGUwX2Jsa19sZW4gJiAweDEpKQotCQlyZXF1ZXN0X3JlZ2lvbihhY3BpX2dibF9GQURULT54Z3BlMF9ibGsuYWRkcmVzcywKLQkJCSAgICAgICBhY3BpX2dibF9GQURULT5ncGUwX2Jsa19sZW4sICJHUEUwX0JMSyIpOworCWlmICghKGFjcGlfZ2JsX0ZBRFQtPmdwZTBfYmxrX2xlbiAmIDB4MSkpCisJCWFjcGlfcmVxdWVzdF9yZWdpb24oJmFjcGlfZ2JsX0ZBRFQtPnhncGUwX2JsaywKKwkJCSAgICAgICBhY3BpX2dibF9GQURULT5ncGUwX2Jsa19sZW4sICJBQ1BJIEdQRTBfQkxLIik7CiAKLQlpZiAoYWNwaV9nYmxfRkFEVC0+eGdwZTFfYmxrLmFkZHJlc3MgJiYgYWNwaV9nYmxfRkFEVC0+Z3BlMV9ibGtfbGVuICYmCi0JICAgICEoYWNwaV9nYmxfRkFEVC0+Z3BlMV9ibGtfbGVuICYgMHgxKSkKLQkJcmVxdWVzdF9yZWdpb24oYWNwaV9nYmxfRkFEVC0+eGdwZTFfYmxrLmFkZHJlc3MsCi0JCQkgICAgICAgYWNwaV9nYmxfRkFEVC0+Z3BlMV9ibGtfbGVuLCAiR1BFMV9CTEsiKTsKKwlpZiAoIShhY3BpX2dibF9GQURULT5ncGUxX2Jsa19sZW4gJiAweDEpKQorCQlhY3BpX3JlcXVlc3RfcmVnaW9uKCZhY3BpX2dibF9GQURULT54Z3BlMV9ibGssCisJCQkgICAgICAgYWNwaV9nYmxfRkFEVC0+Z3BlMV9ibGtfbGVuLCAiQUNQSSBHUEUxX0JMSyIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX21vdGhlcmJvYXJkX2luaXQodm9pZCkKIHsKIAlhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfbW90aGVyYm9hcmRfZHJpdmVyMSk7CiAJYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX21vdGhlcmJvYXJkX2RyaXZlcjIpOwotCS8qIAorCS8qCiAJICogR3VhcmFudGVlIG1vdGhlcmJvYXJkIElPIHJlc2VydmF0aW9uIGZpcnN0CiAJICogVGhpcyBtb2R1bGUgbXVzdCBydW4gYWZ0ZXIgc2Nhbi5jCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zYWNjZXNzLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zYWNjZXNzLmMKaW5kZXggMTE0OWJjMS4uNDhmYWRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNhY2Nlc3MuYwpAQCAtNzAsNyArNzAsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RyaW5nIHZhbCA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19yb290X2luaXRpYWxpemUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX3Jvb3RfaW5pdGlhbGl6ZSk7CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTk4LDYgKzk4LDcgQEAKIAkJCSAgIkVudGVyaW5nIHByZWRlZmluZWQgZW50cmllcyBpbnRvIG5hbWVzcGFjZVxuIikpOwogCiAJZm9yIChpbml0X3ZhbCA9IGFjcGlfZ2JsX3ByZV9kZWZpbmVkX25hbWVzOyBpbml0X3ZhbC0+bmFtZTsgaW5pdF92YWwrKykgeworCiAJCS8qIF9PU0kgaXMgb3B0aW9uYWwgZm9yIG5vdywgd2lsbCBiZSBwZXJtYW5lbnQgbGF0ZXIgKi8KIAogCQlpZiAoIUFDUElfU1RSQ01QKGluaXRfdmFsLT5uYW1lLCAiX09TSSIpCkBAIC0xNTYsNyArMTU3LDcgQEAKIAogI2lmIGRlZmluZWQgKEFDUElfQVNMX0NPTVBJTEVSKQogCi0JCQkJLyogc2F2ZSB0aGUgcGFyYW1ldGVyIGNvdW50IGZvciB0aGUgaV9hU0wgY29tcGlsZXIgKi8KKwkJCQkvKiBTYXZlIHRoZSBwYXJhbWV0ZXIgY291bnQgZm9yIHRoZSBpX2FTTCBjb21waWxlciAqLwogCiAJCQkJbmV3X25vZGUtPnZhbHVlID0gb2JqX2Rlc2MtPm1ldGhvZC5wYXJhbV9jb3VudDsKICNlbHNlCkBAIC0yNTgsMTAgKzI1OSw4IEBACiAJLyogU2F2ZSBhIGhhbmRsZSB0byAiX0dQRSIsIGl0IGlzIGFsd2F5cyBwcmVzZW50ICovCiAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfbnNfZ2V0X25vZGVfYnlfcGF0aCgiXFxfR1BFIiwgTlVMTCwKLQkJCQkJICAgICBBQ1BJX05TX05PX1VQU0VBUkNILAotCQkJCQkgICAgICZhY3BpX2dibF9mYWR0X2dwZV9kZXZpY2UpOworCQlzdGF0dXMgPSBhY3BpX25zX2dldF9ub2RlKE5VTEwsICJcXF9HUEUiLCBBQ1BJX05TX05PX1VQU0VBUkNILAorCQkJCQkgICZhY3BpX2dibF9mYWR0X2dwZV9kZXZpY2UpOwogCX0KIAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpAQCAtMzEwLDE3ICszMDksMTcgQEAKIAlhY3BpX29iamVjdF90eXBlIHR5cGVfdG9fY2hlY2tfZm9yOwogCWFjcGlfb2JqZWN0X3R5cGUgdGhpc19zZWFyY2hfdHlwZTsKIAl1MzIgc2VhcmNoX3BhcmVudF9mbGFnID0gQUNQSV9OU19TRUFSQ0hfUEFSRU5UOwotCXUzMiBsb2NhbF9mbGFncyA9IGZsYWdzICYgfihBQ1BJX05TX0VSUk9SX0lGX0ZPVU5EIHwKLQkJCQkgICAgQUNQSV9OU19TRUFSQ0hfUEFSRU5UKTsKKwl1MzIgbG9jYWxfZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19sb29rdXAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2xvb2t1cCk7CiAKIAlpZiAoIXJldHVybl9ub2RlKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQlhY3BpX2dibF9uc19sb29rdXBfY291bnQrKzsKKwlsb2NhbF9mbGFncyA9IGZsYWdzICYgfihBQ1BJX05TX0VSUk9SX0lGX0ZPVU5EIHwgQUNQSV9OU19TRUFSQ0hfUEFSRU5UKTsKIAkqcmV0dXJuX25vZGUgPSBBQ1BJX0VOVFJZX05PVF9GT1VORDsKKwlhY3BpX2dibF9uc19sb29rdXBfY291bnQrKzsKIAogCWlmICghYWNwaV9nYmxfcm9vdF9ub2RlKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19OQU1FU1BBQ0UpOwpAQCAtMzQ2LDE0ICszNDUsMTcgQEAKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfSU5URVJOQUwpOwogCQl9CiAKLQkJLyoKLQkJICogVGhpcyBub2RlIG1pZ2h0IG5vdCBiZSBhIGFjdHVhbCAic2NvcGUiIG5vZGUgKHN1Y2ggYXMgYQotCQkgKiBEZXZpY2UvTWV0aG9kLCBldGMuKSAgSXQgY291bGQgYmUgYSBQYWNrYWdlIG9yIG90aGVyIG9iamVjdCBub2RlLgotCQkgKiBCYWNrdXAgdXAgdGhlIHRyZWUgdG8gZmluZCB0aGUgY29udGFpbmluZyBzY29wZSBub2RlLgotCQkgKi8KLQkJd2hpbGUgKCFhY3BpX25zX29wZW5zX3Njb3BlKHByZWZpeF9ub2RlLT50eXBlKSAmJgotCQkgICAgICAgcHJlZml4X25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0FOWSkgewotCQkJcHJlZml4X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShwcmVmaXhfbm9kZSk7CisJCWlmICghKGZsYWdzICYgQUNQSV9OU19QUkVGSVhfSVNfU0NPUEUpKSB7CisJCQkvKgorCQkJICogVGhpcyBub2RlIG1pZ2h0IG5vdCBiZSBhIGFjdHVhbCAic2NvcGUiIG5vZGUgKHN1Y2ggYXMgYQorCQkJICogRGV2aWNlL01ldGhvZCwgZXRjLikgIEl0IGNvdWxkIGJlIGEgUGFja2FnZSBvciBvdGhlciBvYmplY3Qgbm9kZS4KKwkJCSAqIEJhY2t1cCB1cCB0aGUgdHJlZSB0byBmaW5kIHRoZSBjb250YWluaW5nIHNjb3BlIG5vZGUuCisJCQkgKi8KKwkJCXdoaWxlICghYWNwaV9uc19vcGVuc19zY29wZShwcmVmaXhfbm9kZS0+dHlwZSkgJiYKKwkJCSAgICAgICBwcmVmaXhfbm9kZS0+dHlwZSAhPSBBQ1BJX1RZUEVfQU5ZKSB7CisJCQkJcHJlZml4X25vZGUgPQorCQkJCSAgICBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShwcmVmaXhfbm9kZSk7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTM2NSw2ICszNjcsNyBAQAogCSAqIEJlZ2luIGV4YW1pbmF0aW9uIG9mIHRoZSBhY3R1YWwgcGF0aG5hbWUKIAkgKi8KIAlpZiAoIXBhdGhuYW1lKSB7CisKIAkJLyogQSBOdWxsIG5hbWVfcGF0aCBpcyBhbGxvd2VkIGFuZCByZWZlcnMgdG8gdGhlIHJvb3QgKi8KIAogCQludW1fc2VnbWVudHMgPSAwOwpAQCAtMzg5LDYgKzM5Miw3IEBACiAJCSAqIHRvIHRoZSBjdXJyZW50IHNjb3BlKS4KIAkJICovCiAJCWlmICgqcGF0aCA9PSAodTgpIEFNTF9ST09UX1BSRUZJWCkgeworCiAJCQkvKiBQYXRobmFtZSBpcyBmdWxseSBxdWFsaWZpZWQsIHN0YXJ0IGZyb20gdGhlIHJvb3QgKi8KIAogCQkJdGhpc19ub2RlID0gYWNwaV9nYmxfcm9vdF9ub2RlOwpAQCAtNDE2LDYgKzQyMCw3IEBACiAJCQl0aGlzX25vZGUgPSBwcmVmaXhfbm9kZTsKIAkJCW51bV9jYXJhdHMgPSAwOwogCQkJd2hpbGUgKCpwYXRoID09ICh1OCkgQU1MX1BBUkVOVF9QUkVGSVgpIHsKKwogCQkJCS8qIE5hbWUgaXMgZnVsbHkgcXVhbGlmaWVkLCBubyBzZWFyY2ggcnVsZXMgYXBwbHkgKi8KIAogCQkJCXNlYXJjaF9wYXJlbnRfZmxhZyA9IEFDUElfTlNfTk9fVVBTRUFSQ0g7CkBAIC00MzAsNiArNDM1LDcgQEAKIAkJCQludW1fY2FyYXRzKys7CiAJCQkJdGhpc19ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUodGhpc19ub2RlKTsKIAkJCQlpZiAoIXRoaXNfbm9kZSkgeworCiAJCQkJCS8qIEN1cnJlbnQgc2NvcGUgaGFzIG5vIHBhcmVudCBzY29wZSAqLwogCiAJCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC01NjksNiArNTc1LDcgQEAKIAkJCQkJICAgICAmdGhpc19ub2RlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlpZiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgeworCiAJCQkJLyogTmFtZSBub3QgZm91bmQgaW4gQUNQSSBuYW1lc3BhY2UgKi8KIAogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsCkBAIC02MDIsMTAgKzYwOSwxMSBAQAogCQkgICAgKHR5cGVfdG9fY2hlY2tfZm9yICE9IEFDUElfVFlQRV9MT0NBTF9TQ09QRSkgJiYKIAkJICAgICh0aGlzX25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0FOWSkgJiYKIAkJICAgICh0aGlzX25vZGUtPnR5cGUgIT0gdHlwZV90b19jaGVja19mb3IpKSB7CisKIAkJCS8qIENvbXBsYWluIGFib3V0IGEgdHlwZSBtaXNtYXRjaCAqLwogCiAJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkJICAgICAgIm5zX2xvb2t1cDogVHlwZSBtaXNtYXRjaCBvbiAlNC40cyAoJXMpLCBzZWFyY2hpbmcgZm9yICglcykiLAorCQkJCSAgICAgICJOc0xvb2t1cDogVHlwZSBtaXNtYXRjaCBvbiAlNC40cyAoJXMpLCBzZWFyY2hpbmcgZm9yICglcykiLAogCQkJCSAgICAgIEFDUElfQ0FTVF9QVFIoY2hhciwgJnNpbXBsZV9uYW1lKSwKIAkJCQkgICAgICBhY3BpX3V0X2dldF90eXBlX25hbWUodGhpc19ub2RlLT50eXBlKSwKIAkJCQkgICAgICBhY3BpX3V0X2dldF90eXBlX25hbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNhbGxvYy5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2FsbG9jLmMKaW5kZXggOWI4NzFmMy4uZGMzZjA3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2FsbG9jLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2FsbG9jLmMKQEAgLTQ3LDkgKzQ3LDYgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX05BTUVTUEFDRQogQUNQSV9NT0RVTEVfTkFNRSgibnNhbGxvYyIpCiAKLS8qIExvY2FsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGFjcGlfbnNfcmVtb3ZlX3JlZmVyZW5jZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSk7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY3JlYXRlX25vZGUKQEAgLTYxLDE0ICs1OCwxMyBAQAogICogREVTQ1JJUFRJT046IENyZWF0ZSBhIG5hbWVzcGFjZSBub2RlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFjcGlfbnNfY3JlYXRlX25vZGUodTMyIG5hbWUpCiB7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19jcmVhdGVfbm9kZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfY3JlYXRlX25vZGUpOwogCi0Jbm9kZSA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUpKTsKKwlub2RlID0gYWNwaV9vc19hY3F1aXJlX29iamVjdChhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUpOwogCWlmICghbm9kZSkgewogCQlyZXR1cm5fUFRSKE5VTEwpOwogCX0KQEAgLTc2LDkgKzcyLDcgQEAKIAlBQ1BJX01FTV9UUkFDS0lORyhhY3BpX2dibF9uc19ub2RlX2xpc3QtPnRvdGFsX2FsbG9jYXRlZCsrKTsKIAogCW5vZGUtPm5hbWUuaW50ZWdlciA9IG5hbWU7Ci0Jbm9kZS0+cmVmZXJlbmNlX2NvdW50ID0gMTsKIAlBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUobm9kZSwgQUNQSV9ERVNDX1RZUEVfTkFNRUQpOwotCiAJcmV0dXJuX1BUUihub2RlKTsKIH0KIApAQCAtMTAwLDcgKzk0LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcHJldl9ub2RlOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpuZXh0X25vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigibnNfZGVsZXRlX25vZGUiLCBub2RlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihuc19kZWxldGVfbm9kZSwgbm9kZSk7CiAKIAlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKG5vZGUpOwogCkBAIC0xMTUsNiArMTA5LDcgQEAKIAl9CiAKIAlpZiAocHJldl9ub2RlKSB7CisKIAkJLyogTm9kZSBpcyBub3QgZmlyc3QgY2hpbGQsIHVubGluayBpdCAqLwogCiAJCXByZXZfbm9kZS0+cGVlciA9IG5leHRfbm9kZS0+cGVlcjsKQEAgLTEyNSw2ICsxMjAsNyBAQAogCQkvKiBOb2RlIGlzIGZpcnN0IGNoaWxkIChoYXMgbm8gcHJldmlvdXMgcGVlcikgKi8KIAogCQlpZiAobmV4dF9ub2RlLT5mbGFncyAmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QpIHsKKwogCQkJLyogTm8gcGVlcnMgYXQgYWxsICovCiAKIAkJCXBhcmVudF9ub2RlLT5jaGlsZCA9IE5VTEw7CkBAIC0xMzcsMTAgKzEzMywxMCBAQAogCUFDUElfTUVNX1RSQUNLSU5HKGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+dG90YWxfZnJlZWQrKyk7CiAKIAkvKgotCSAqIERldGFjaCBhbiBvYmplY3QgaWYgdGhlcmUgaXMgb25lIHRoZW4gZGVsZXRlIHRoZSBub2RlCisJICogRGV0YWNoIGFuIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUsIHRoZW4gZGVsZXRlIHRoZSBub2RlCiAJICovCiAJYWNwaV9uc19kZXRhY2hfb2JqZWN0KG5vZGUpOwotCUFDUElfTUVNX0ZSRUUobm9kZSk7CisJKHZvaWQpYWNwaV9vc19yZWxlYXNlX29iamVjdChhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUsIG5vZGUpOwogCXJldHVybl9WT0lEOwogfQogCkBAIC0xNzEsNyArMTY3LDcgQEAKIAlhY3BpX293bmVyX2lkIG93bmVyX2lkID0gMDsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqY2hpbGRfbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2luc3RhbGxfbm9kZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfaW5zdGFsbF9ub2RlKTsKIAogCS8qCiAJICogR2V0IHRoZSBvd25lciBJRCBmcm9tIHRoZSBXYWxrIHN0YXRlCkBAIC0yMTYsMTQgKzIxMiw2IEBACiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShwYXJlbnRfbm9kZS0+dHlwZSksCiAJCQkgIHBhcmVudF9ub2RlKSk7CiAKLQkvKgotCSAqIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50KHMpIG9mIGFsbCBwYXJlbnRzIHVwIHRvCi0JICogdGhlIHJvb3QhCi0JICovCi0Jd2hpbGUgKChub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSkpICE9IE5VTEwpIHsKLQkJbm9kZS0+cmVmZXJlbmNlX2NvdW50Kys7Ci0JfQotCiAJcmV0dXJuX1ZPSUQ7CiB9CiAKQEAgLTI0NCwxMCArMjMyLDkgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqY2hpbGRfbm9kZTsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbmV4dF9ub2RlOwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCXU4IGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoIm5zX2RlbGV0ZV9jaGlsZHJlbiIsIHBhcmVudF9ub2RlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihuc19kZWxldGVfY2hpbGRyZW4sIHBhcmVudF9ub2RlKTsKIAogCWlmICghcGFyZW50X25vZGUpIHsKIAkJcmV0dXJuX1ZPSUQ7CkBAIC0yNjQsNiArMjUxLDcgQEAKIAkgKiBEZWFsbG9jYXRlIGFsbCBjaGlsZHJlbiBhdCB0aGlzIGxldmVsCiAJICovCiAJZG8geworCiAJCS8qIEdldCB0aGUgdGhpbmdzIHdlIG5lZWQgKi8KIAogCQluZXh0X25vZGUgPSBjaGlsZF9ub2RlLT5wZWVyOwpAQCAtMjg5LDI2ICsyNzcsMTAgQEAKIAkJICovCiAJCWFjcGlfbnNfZGV0YWNoX29iamVjdChjaGlsZF9ub2RlKTsKIAotCQkvKgotCQkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudChzKSBvZiBhbGwgcGFyZW50cyB1cCB0bwotCQkgKiB0aGUgcm9vdCEgKGNvdW50cyB3ZXJlIGluY3JlbWVudGVkIHdoZW4gdGhlIG5vZGUgd2FzIGNyZWF0ZWQpCi0JCSAqLwotCQlub2RlID0gY2hpbGRfbm9kZTsKLQkJd2hpbGUgKChub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSkpICE9IE5VTEwpIHsKLQkJCW5vZGUtPnJlZmVyZW5jZV9jb3VudC0tOwotCQl9Ci0KLQkJLyogVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIHJlZmVyZW5jZSByZW1haW5pbmcgb24gdGhpcyBub2RlICovCi0KLQkJaWYgKGNoaWxkX25vZGUtPnJlZmVyZW5jZV9jb3VudCAhPSAxKSB7Ci0JCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkJICAgICAgIkV4aXN0aW5nIHJlZmVyZW5jZXMgKCVkKSBvbiBub2RlIGJlaW5nIGRlbGV0ZWQgKCVwKSIsCi0JCQkJICAgICAgY2hpbGRfbm9kZS0+cmVmZXJlbmNlX2NvdW50LCBjaGlsZF9ub2RlKSk7Ci0JCX0KLQogCQkvKiBOb3cgd2UgY2FuIGRlbGV0ZSB0aGUgbm9kZSAqLwogCi0JCUFDUElfTUVNX0ZSRUUoY2hpbGRfbm9kZSk7CisJCSh2b2lkKWFjcGlfb3NfcmVsZWFzZV9vYmplY3QoYWNwaV9nYmxfbmFtZXNwYWNlX2NhY2hlLAorCQkJCQkgICAgIGNoaWxkX25vZGUpOwogCiAJCS8qIEFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNoaWxkIGluIHRoZSBsaXN0ICovCiAKQEAgLTM0MSw3ICszMTMsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpjaGlsZF9ub2RlID0gTlVMTDsKIAl1MzIgbGV2ZWwgPSAxOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZGVsZXRlX25hbWVzcGFjZV9zdWJ0cmVlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19kZWxldGVfbmFtZXNwYWNlX3N1YnRyZWUpOwogCiAJaWYgKCFwYXJlbnRfbm9kZSkgewogCQlyZXR1cm5fVk9JRDsKQEAgLTM1MiwxMSArMzI0LDE0IEBACiAJICogdG8gd2hlcmUgd2Ugc3RhcnRlZC4KIAkgKi8KIAl3aGlsZSAobGV2ZWwgPiAwKSB7CisKIAkJLyogR2V0IHRoZSBuZXh0IG5vZGUgaW4gdGhpcyBzY29wZSAoTlVMTCBpZiBub25lKSAqLwogCi0JCWNoaWxkX25vZGUgPSBhY3BpX25zX2dldF9uZXh0X25vZGUoQUNQSV9UWVBFX0FOWSwgcGFyZW50X25vZGUsCi0JCQkJCQkgICBjaGlsZF9ub2RlKTsKKwkJY2hpbGRfbm9kZSA9CisJCSAgICBhY3BpX25zX2dldF9uZXh0X25vZGUoQUNQSV9UWVBFX0FOWSwgcGFyZW50X25vZGUsCisJCQkJCSAgY2hpbGRfbm9kZSk7CiAJCWlmIChjaGlsZF9ub2RlKSB7CisKIAkJCS8qIEZvdW5kIGEgY2hpbGQgbm9kZSAtIGRldGFjaCBhbnkgYXR0YWNoZWQgb2JqZWN0ICovCiAKIAkJCWFjcGlfbnNfZGV0YWNoX29iamVjdChjaGlsZF9ub2RlKTsKQEAgLTQwMSw1NSArMzc2LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9uc19yZW1vdmVfcmVmZXJlbmNlCi0gKgotICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgICAgIC0gTmFtZWQgbm9kZSB3aG9zZSByZWZlcmVuY2UgY291bnQgaXMgdG8gYmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudGVkCi0gKgotICogUkVUVVJOOiAgICAgIE5vbmUuCi0gKgotICogREVTQ1JJUFRJT046IFJlbW92ZSBhIE5vZGUgcmVmZXJlbmNlLiAgRGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50Ci0gKiAgICAgICAgICAgICAgb2YgYWxsIHBhcmVudCBOb2RlcyB1cCB0byB0aGUgcm9vdC4gIEFueSBub2RlIGFsb25nCi0gKiAgICAgICAgICAgICAgdGhlIHdheSB0aGF0IHJlYWNoZXMgemVybyByZWZlcmVuY2VzIGlzIGZyZWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGFjcGlfbnNfcmVtb3ZlX3JlZmVyZW5jZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSkKLXsKLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGFyZW50X25vZGU7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnRoaXNfbm9kZTsKLQotCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKLQotCS8qCi0JICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQocykgb2YgdGhpcyBub2RlIGFuZCBhbGwKLQkgKiBub2RlcyB1cCB0byB0aGUgcm9vdCwgIERlbGV0ZSBhbnl0aGluZyB3aXRoIHplcm8gcmVtYWluaW5nIHJlZmVyZW5jZXMuCi0JICovCi0JdGhpc19ub2RlID0gbm9kZTsKLQl3aGlsZSAodGhpc19ub2RlKSB7Ci0JCS8qIFByZXBhcmUgdG8gbW92ZSB1cCB0byBwYXJlbnQgKi8KLQotCQlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHRoaXNfbm9kZSk7Ci0KLQkJLyogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhpcyBub2RlICovCi0KLQkJdGhpc19ub2RlLT5yZWZlcmVuY2VfY291bnQtLTsKLQotCQkvKiBEZWxldGUgdGhlIG5vZGUgaWYgbm8gbW9yZSByZWZlcmVuY2VzICovCi0KLQkJaWYgKCF0aGlzX25vZGUtPnJlZmVyZW5jZV9jb3VudCkgewotCQkJLyogRGVsZXRlIGFsbCBjaGlsZHJlbiBhbmQgZGVsZXRlIHRoZSBub2RlICovCi0KLQkJCWFjcGlfbnNfZGVsZXRlX2NoaWxkcmVuKHRoaXNfbm9kZSk7Ci0JCQlhY3BpX25zX2RlbGV0ZV9ub2RlKHRoaXNfbm9kZSk7Ci0JCX0KLQotCQl0aGlzX25vZGUgPSBwYXJlbnRfbm9kZTsKLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcgogICoKICAqIFBBUkFNRVRFUlM6ICBvd25lcl9pZCAgICAtIEFsbCBub2RlcyB3aXRoIHRoaXMgb3duZXIgd2lsbCBiZSBkZWxldGVkCkBAIC00NjksMTUgKzM5NSwxNSBAQAogCXUzMiBsZXZlbDsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGFyZW50X25vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigibnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lciIsIG93bmVyX2lkKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMihuc19kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyLCBvd25lcl9pZCk7CiAKIAlpZiAob3duZXJfaWQgPT0gMCkgewogCQlyZXR1cm5fVk9JRDsKIAl9CiAKKwlkZWxldGlvbl9ub2RlID0gTlVMTDsKIAlwYXJlbnRfbm9kZSA9IGFjcGlfZ2JsX3Jvb3Rfbm9kZTsKIAljaGlsZF9ub2RlID0gTlVMTDsKLQlkZWxldGlvbl9ub2RlID0gTlVMTDsKIAlsZXZlbCA9IDE7CiAKIAkvKgpAQCAtNDk0LDEyICs0MjAsMTQgQEAKIAkJCQkJICBjaGlsZF9ub2RlKTsKIAogCQlpZiAoZGVsZXRpb25fbm9kZSkgewotCQkJYWNwaV9uc19yZW1vdmVfcmVmZXJlbmNlKGRlbGV0aW9uX25vZGUpOworCQkJYWNwaV9uc19kZWxldGVfY2hpbGRyZW4oZGVsZXRpb25fbm9kZSk7CisJCQlhY3BpX25zX2RlbGV0ZV9ub2RlKGRlbGV0aW9uX25vZGUpOwogCQkJZGVsZXRpb25fbm9kZSA9IE5VTEw7CiAJCX0KIAogCQlpZiAoY2hpbGRfbm9kZSkgewogCQkJaWYgKGNoaWxkX25vZGUtPm93bmVyX2lkID09IG93bmVyX2lkKSB7CisKIAkJCQkvKiBGb3VuZCBhIG1hdGNoaW5nIGNoaWxkIG5vZGUgLSBkZXRhY2ggYW55IGF0dGFjaGVkIG9iamVjdCAqLwogCiAJCQkJYWNwaV9uc19kZXRhY2hfb2JqZWN0KGNoaWxkX25vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2R1bXAuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNkdW1wLmMKaW5kZXggYTI4MDczMS4uZDcyZGY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2R1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZHVtcC5jCkBAIC03NSw3ICs3NSw3IEBACiB7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJuc19wcmludF9wYXRobmFtZSIpOworCUFDUElfRlVOQ1RJT05fTkFNRShuc19wcmludF9wYXRobmFtZSk7CiAKIAlpZiAoIShhY3BpX2RiZ19sZXZlbCAmIEFDUElfTFZfTkFNRVMpCiAJICAgIHx8ICEoYWNwaV9kYmdfbGF5ZXIgJiBBQ1BJX05BTUVTUEFDRSkpIHsKQEAgLTEyMyw3ICsxMjMsNyBAQAogYWNwaV9uc19kdW1wX3BhdGhuYW1lKGFjcGlfaGFuZGxlIGhhbmRsZSwgY2hhciAqbXNnLCB1MzIgbGV2ZWwsIHUzMiBjb21wb25lbnQpCiB7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19kdW1wX3BhdGhuYW1lIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19kdW1wX3BhdGhuYW1lKTsKIAogCS8qIERvIHRoaXMgb25seSBpZiB0aGUgcmVxdWVzdGVkIGRlYnVnIGxldmVsIGFuZCBjb21wb25lbnQgYXJlIGVuYWJsZWQgKi8KIApAQCAtMTY3LDcgKzE2Nyw3IEBACiAJdTMyIGRiZ19sZXZlbDsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgibnNfZHVtcF9vbmVfb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKG5zX2R1bXBfb25lX29iamVjdCk7CiAKIAkvKiBJcyBvdXRwdXQgZW5hYmxlZD8gKi8KIApAQCAtMTkxLDYgKzE5MSw3IEBACiAJfQogCiAJaWYgKCEoaW5mby0+ZGlzcGxheV90eXBlICYgQUNQSV9ESVNQTEFZX1NIT1JUKSkgeworCiAJCS8qIEluZGVudCB0aGUgb2JqZWN0IGFjY29yZGluZyB0byB0aGUgbGV2ZWwgKi8KIAogCQlhY3BpX29zX3ByaW50ZigiJTJkJSpzIiwgKHUzMikgbGV2ZWwgLSAxLCAoaW50KWxldmVsICogMiwgIiAiKTsKQEAgLTIwMyw2ICsyMDQsOSBAQAogCQl9CiAKIAkJaWYgKCFhY3BpX3V0X3ZhbGlkX2FjcGlfbmFtZSh0aGlzX25vZGUtPm5hbWUuaW50ZWdlcikpIHsKKwkJCXRoaXNfbm9kZS0+bmFtZS5pbnRlZ2VyID0KKwkJCSAgICBhY3BpX3V0X3JlcGFpcl9uYW1lKHRoaXNfbm9kZS0+bmFtZS5pbnRlZ2VyKTsKKwogCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiSW52YWxpZCBBQ1BJIE5hbWUgJTA4WCIsCiAJCQkJICAgICAgdGhpc19ub2RlLT5uYW1lLmludGVnZXIpKTsKIAkJfQpAQCAtMjI2LDYgKzIzMCw3IEBACiAJY2FzZSBBQ1BJX0RJU1BMQVlfU1VNTUFSWToKIAogCQlpZiAoIW9ial9kZXNjKSB7CisKIAkJCS8qIE5vIGF0dGFjaGVkIG9iamVjdCwgd2UgYXJlIGRvbmUgKi8KIAogCQkJYWNwaV9vc19wcmludGYoIlxuIik7CkBAIC00MTksNiArNDI0LDcgQEAKIAogCQlhY3BpX29zX3ByaW50ZigiTzolcCIsIG9ial9kZXNjKTsKIAkJaWYgKCFvYmpfZGVzYykgeworCiAJCQkvKiBObyBhdHRhY2hlZCBvYmplY3QsIHdlIGFyZSBkb25lICovCiAKIAkJCWFjcGlfb3NfcHJpbnRmKCJcbiIpOwpAQCAtNjY5LDcgKzY3NSw3IEBACiB7CiAJYWNwaV9oYW5kbGUgc2VhcmNoX2hhbmRsZSA9IHNlYXJjaF9iYXNlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZHVtcF90YWJsZXMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2R1bXBfdGFibGVzKTsKIAogCWlmICghYWNwaV9nYmxfcm9vdF9ub2RlKSB7CiAJCS8qCkBAIC02ODIsNiArNjg4LDcgQEAKIAl9CiAKIAlpZiAoQUNQSV9OU19BTEwgPT0gc2VhcmNoX2Jhc2UpIHsKKwogCQkvKiBFbnRpcmUgbmFtZXNwYWNlICovCiAKIAkJc2VhcmNoX2hhbmRsZSA9IGFjcGlfZ2JsX3Jvb3Rfbm9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNkdW1wZHYuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNkdW1wZHYuYwppbmRleCBhZmY4OTlhLi5jNmJmNWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZHVtcGR2LmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2R1bXBkdi5jCkBAIC03NCw3ICs3NCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJuc19kdW1wX29uZV9kZXZpY2UiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfZHVtcF9vbmVfZGV2aWNlKTsKIAogCXN0YXR1cyA9CiAJICAgIGFjcGlfbnNfZHVtcF9vbmVfb2JqZWN0KG9ial9oYW5kbGUsIGxldmVsLCBjb250ZXh0LCByZXR1cm5fdmFsdWUpOwpAQCAtOTIsNyArOTIsNyBAQAogCQkJCSAgICAgIGluZm8tPmhhcmR3YXJlX2lkLnZhbHVlLAogCQkJCSAgICAgIEFDUElfRk9STUFUX1VJTlQ2NChpbmZvLT5hZGRyZXNzKSwKIAkJCQkgICAgICBpbmZvLT5jdXJyZW50X3N0YXR1cykpOwotCQlBQ1BJX01FTV9GUkVFKGluZm8pOworCQlBQ1BJX0ZSRUUoaW5mbyk7CiAJfQogCiAJcmV0dXJuIChzdGF0dXMpOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJYWNwaV9oYW5kbGUgc3lzX2J1c19oYW5kbGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJuc19kdW1wX3Jvb3RfZGV2aWNlcyIpOworCUFDUElfRlVOQ1RJT05fTkFNRShuc19kdW1wX3Jvb3RfZGV2aWNlcyk7CiAKIAkvKiBPbmx5IGR1bXAgdGhlIHRhYmxlIGlmIHRyYWNpbmcgaXMgZW5hYmxlZCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZXZhbC5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2V2YWwuYwppbmRleCAxOWQ3Yjk0Li40YjBhNGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZXZhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNldmFsLmMKQEAgLTEsNyArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIE1vZHVsZSBOYW1lOiBuc2V2YWwgLSBPYmplY3QgZXZhbHVhdGlvbiBpbnRlcmZhY2VzIC0tIGluY2x1ZGVzIGNvbnRyb2wKLSAqICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgbG9va3VwIGFuZCBleGVjdXRpb24uCisgKiBNb2R1bGUgTmFtZTogbnNldmFsIC0gT2JqZWN0IGV2YWx1YXRpb24sIGluY2x1ZGVzIGNvbnRyb2wgbWV0aG9kIGV4ZWN1dGlvbgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTUwLDE5NiArNDksMTQgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX05BTUVTUEFDRQogQUNQSV9NT0RVTEVfTkFNRSgibnNldmFsIikKIAotLyogTG9jYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX25zX2V4ZWN1dGVfY29udHJvbF9tZXRob2Qoc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pOwotCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9uc19nZXRfb2JqZWN0X3ZhbHVlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9uc19ldmFsdWF0ZV9yZWxhdGl2ZQorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZXZhbHVhdGUKICAqCi0gKiBQQVJBTUVURVJTOiAgUGF0aG5hbWUgICAgICAgIC0gTmFtZSBvZiBtZXRob2QgdG8gZXhlY3V0ZSwgSWYgTlVMTCwgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIGlzIHRoZSBvYmplY3QgdG8gZXhlY3V0ZQotICogICAgICAgICAgICAgIEluZm8gICAgICAgICAgICAtIE1ldGhvZCBpbmZvIGJsb2NrLCBjb250YWluczoKLSAqICAgICAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgIC0gV2hlcmUgdG8gcHV0IG1ldGhvZCdzIHJldHVybiB2YWx1ZSAoaWYKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55KS4gIElmIE5VTEwsIG5vIHZhbHVlIGlzIHJldHVybmVkLgotICogICAgICAgICAgICAgICAgICBQYXJhbXMgICAgICAgICAgLSBMaXN0IG9mIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgbWV0aG9kLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGJ5IE5VTEwuICBQYXJhbXMgaXRzZWxmIG1heSBiZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIGlmIG5vIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZC4KLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IEV2YWx1YXRlIHRoZSBvYmplY3Qgb3IgZmluZCBhbmQgZXhlY3V0ZSB0aGUgcmVxdWVzdGVkIG1ldGhvZAotICoKLSAqIE1VVEVYOiAgICAgICBMb2NrcyBOYW1lc3BhY2UKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX3N0YXR1cwotYWNwaV9uc19ldmFsdWF0ZV9yZWxhdGl2ZShjaGFyICpwYXRobmFtZSwgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlID0gTlVMTDsKLQl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnNjb3BlX2luZm87Ci0JY2hhciAqaW50ZXJuYWxfcGF0aCA9IE5VTEw7Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19ldmFsdWF0ZV9yZWxhdGl2ZSIpOwotCi0JLyoKLQkgKiBNdXN0IGhhdmUgYSB2YWxpZCBvYmplY3QgaGFuZGxlCi0JICovCi0JaWYgKCFpbmZvIHx8ICFpbmZvLT5ub2RlKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9Ci0KLQkvKiBCdWlsZCBhbiBpbnRlcm5hbCBuYW1lIHN0cmluZyBmb3IgdGhlIG1ldGhvZCAqLwotCi0Jc3RhdHVzID0gYWNwaV9uc19pbnRlcm5hbGl6ZV9uYW1lKHBhdGhuYW1lLCAmaW50ZXJuYWxfcGF0aCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCXNjb3BlX2luZm8gPSBhY3BpX3V0X2NyZWF0ZV9nZW5lcmljX3N0YXRlKCk7Ci0JaWYgKCFzY29wZV9pbmZvKSB7Ci0JCWdvdG8gY2xlYW51cDE7Ci0JfQotCi0JLyogR2V0IHRoZSBwcmVmaXggaGFuZGxlIGFuZCBOb2RlICovCi0KLQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCWluZm8tPm5vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShpbmZvLT5ub2RlKTsKLQlpZiAoIWluZm8tPm5vZGUpIHsKLQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0KLQkvKiBMb29rdXAgdGhlIG5hbWUgaW4gdGhlIG5hbWVzcGFjZSAqLwotCi0Jc2NvcGVfaW5mby0+c2NvcGUubm9kZSA9IGluZm8tPm5vZGU7Ci0Jc3RhdHVzID0gYWNwaV9uc19sb29rdXAoc2NvcGVfaW5mbywgaW50ZXJuYWxfcGF0aCwgQUNQSV9UWVBFX0FOWSwKLQkJCQlBQ1BJX0lNT0RFX0VYRUNVVEUsIEFDUElfTlNfTk9fVVBTRUFSQ0gsIE5VTEwsCi0JCQkJJm5vZGUpOwotCi0JKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0KLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywgIk9iamVjdCBbJXNdIG5vdCBmb3VuZCBbJXNdXG4iLAotCQkJCSAgcGF0aG5hbWUsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKSk7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0KLQkvKgotCSAqIE5vdyB0aGF0IHdlIGhhdmUgYSBoYW5kbGUgdG8gdGhlIG9iamVjdCwgd2UgY2FuIGF0dGVtcHQgdG8gZXZhbHVhdGUgaXQuCi0JICovCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywgIiVzIFslcF0gVmFsdWUgJXBcbiIsCi0JCQkgIHBhdGhuYW1lLCBub2RlLCBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3Qobm9kZSkpKTsKLQotCWluZm8tPm5vZGUgPSBub2RlOwotCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlKGluZm8pOwotCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKLQkJCSAgIioqKiBDb21wbGV0ZWQgZXZhbCBvZiBvYmplY3QgJXMgKioqXG4iLCBwYXRobmFtZSkpOwotCi0gICAgICBjbGVhbnVwOgotCWFjcGlfdXRfZGVsZXRlX2dlbmVyaWNfc3RhdGUoc2NvcGVfaW5mbyk7Ci0KLSAgICAgIGNsZWFudXAxOgotCUFDUElfTUVNX0ZSRUUoaW50ZXJuYWxfcGF0aCk7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZXZhbHVhdGVfYnlfbmFtZQotICoKLSAqIFBBUkFNRVRFUlM6ICBQYXRobmFtZSAgICAgICAgLSBGdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgdG8gdGhlIG9iamVjdAotICogICAgICAgICAgICAgIEluZm8gICAgICAgICAgICAgICAgLSBNZXRob2QgaW5mbyBibG9jaywgY29udGFpbnM6Ci0gKiAgICAgICAgICAgICAgICAgIHJldHVybl9vYmplY3QgICAtIFdoZXJlIHRvIHB1dCBtZXRob2QncyByZXR1cm4gdmFsdWUgKGlmCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSkuICBJZiBOVUxMLCBubyB2YWx1ZSBpcyByZXR1cm5lZC4KLSAqICAgICAgICAgICAgICAgICAgUGFyYW1zICAgICAgICAgIC0gTGlzdCBvZiBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZCwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBieSBOVUxMLiAgUGFyYW1zIGl0c2VsZiBtYXkgYmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCBpZiBubyBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQuCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBFdmFsdWF0ZSB0aGUgb2JqZWN0IG9yIHJpbmQgYW5kIGV4ZWN1dGUgdGhlIHJlcXVlc3RlZCBtZXRob2QKLSAqICAgICAgICAgICAgICBwYXNzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzCi0gKgotICogTVVURVg6ICAgICAgIExvY2tzIE5hbWVzcGFjZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWFjcGlfc3RhdHVzCi1hY3BpX25zX2V2YWx1YXRlX2J5X25hbWUoY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQljaGFyICppbnRlcm5hbF9wYXRoID0gTlVMTDsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2V2YWx1YXRlX2J5X25hbWUiKTsKLQotCS8qIEJ1aWxkIGFuIGludGVybmFsIG5hbWUgc3RyaW5nIGZvciB0aGUgbWV0aG9kICovCi0KLQlzdGF0dXMgPSBhY3BpX25zX2ludGVybmFsaXplX25hbWUocGF0aG5hbWUsICZpbnRlcm5hbF9wYXRoKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0Jc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0KLQkvKiBMb29rdXAgdGhlIG5hbWUgaW4gdGhlIG5hbWVzcGFjZSAqLwotCi0Jc3RhdHVzID0gYWNwaV9uc19sb29rdXAoTlVMTCwgaW50ZXJuYWxfcGF0aCwgQUNQSV9UWVBFX0FOWSwKLQkJCQlBQ1BJX0lNT0RFX0VYRUNVVEUsIEFDUElfTlNfTk9fVVBTRUFSQ0gsIE5VTEwsCi0JCQkJJmluZm8tPm5vZGUpOwotCi0JKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0KLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKLQkJCQkgICJPYmplY3QgYXQgWyVzXSB3YXMgbm90IGZvdW5kLCBzdGF0dXM9JS40WFxuIiwKLQkJCQkgIHBhdGhuYW1lLCBzdGF0dXMpKTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCS8qCi0JICogTm93IHRoYXQgd2UgaGF2ZSBhIGhhbmRsZSB0byB0aGUgb2JqZWN0LCB3ZSBjYW4gYXR0ZW1wdCB0byBldmFsdWF0ZSBpdC4KLQkgKi8KLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLCAiJXMgWyVwXSBWYWx1ZSAlcFxuIiwKLQkJCSAgcGF0aG5hbWUsIGluZm8tPm5vZGUsCi0JCQkgIGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChpbmZvLT5ub2RlKSkpOwotCi0Jc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZV9ieV9oYW5kbGUoaW5mbyk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAotCQkJICAiKioqIENvbXBsZXRlZCBldmFsIG9mIG9iamVjdCAlcyAqKipcbiIsIHBhdGhuYW1lKSk7Ci0KLSAgICAgIGNsZWFudXA6Ci0KLQkvKiBDbGVhbnVwICovCi0KLQlpZiAoaW50ZXJuYWxfcGF0aCkgewotCQlBQ1BJX01FTV9GUkVFKGludGVybmFsX3BhdGgpOwotCX0KLQotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2V2YWx1YXRlX2J5X2hhbmRsZQotICoKLSAqIFBBUkFNRVRFUlM6ICBJbmZvICAgICAgICAgICAgLSBNZXRob2QgaW5mbyBibG9jaywgY29udGFpbnM6Ci0gKiAgICAgICAgICAgICAgICAgIE5vZGUgICAgICAgICAgICAtIE1ldGhvZC9PYmplY3QgTm9kZSB0byBleGVjdXRlCisgKiBQQVJBTUVURVJTOiAgSW5mbyAgICAgICAgICAgIC0gRXZhbHVhdGlvbiBpbmZvIGJsb2NrLCBjb250YWluczoKKyAqICAgICAgICAgICAgICAgICAgcHJlZml4X25vZGUgICAgIC0gUHJlZml4IG9yIE1ldGhvZC9PYmplY3QgTm9kZSB0byBleGVjdXRlCisgKiAgICAgICAgICAgICAgICAgIFBhdGhuYW1lICAgICAgICAtIE5hbWUgb2YgbWV0aG9kIHRvIGV4ZWN1dGUsIElmIE5VTEwsIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlIGlzIHRoZSBvYmplY3QgdG8gZXhlY3V0ZQogICogICAgICAgICAgICAgICAgICBQYXJhbWV0ZXJzICAgICAgLSBMaXN0IG9mIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgbWV0aG9kLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGJ5IE5VTEwuIFBhcmFtcyBpdHNlbGYgbWF5IGJlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgaWYgbm8gcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkLgpAQCAtMjQ4LDI5ICs2NSwyMSBAQAogICogICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSAgLSBUeXBlIG9mIFBhcmFtZXRlciBsaXN0CiAgKiAgICAgICAgICAgICAgICAgIHJldHVybl9vYmplY3QgICAtIFdoZXJlIHRvIHB1dCBtZXRob2QncyByZXR1cm4gdmFsdWUgKGlmCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSkuIElmIE5VTEwsIG5vIHZhbHVlIGlzIHJldHVybmVkLgorICogICAgICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgLSBBQ1BJX0lHTk9SRV9SRVRVUk5fVkFMVUUgdG8gZGVsZXRlIHJldHVybgogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogRXZhbHVhdGUgb2JqZWN0IG9yIGV4ZWN1dGUgdGhlIHJlcXVlc3RlZCBtZXRob2QgcGFzc2luZyB0aGUKLSAqICAgICAgICAgICAgICBnaXZlbiBwYXJhbWV0ZXJzCisgKiBERVNDUklQVElPTjogRXhlY3V0ZSBhIGNvbnRyb2wgbWV0aG9kIG9yIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhbgorICogICAgICAgICAgICAgIEFDUEkgbmFtZXNwYWNlIG9iamVjdC4KICAqCi0gKiBNVVRFWDogICAgICAgTG9ja3MgTmFtZXNwYWNlCisgKiBNVVRFWDogICAgICAgTG9ja3MgaW50ZXJwcmV0ZXIKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX3N0YXR1cyBhY3BpX25zX2V2YWx1YXRlX2J5X2hhbmRsZShzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbykKK2FjcGlfc3RhdHVzIGFjcGlfbnNfZXZhbHVhdGUoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19ldmFsdWF0ZV9ieV9oYW5kbGUiKTsKLQotCS8qIENoZWNrIGlmIG5hbWVzcGFjZSBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwotCi0JaWYgKCFhY3BpX2dibF9yb290X25vZGUpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX05BTUVTUEFDRSk7Ci0JfQotCi0JLyogUGFyYW1ldGVyIFZhbGlkYXRpb24gKi8KKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2V2YWx1YXRlKTsKIAogCWlmICghaW5mbykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CkBAIC0yODAsMjAyICs4OSwxMjAgQEAKIAogCWluZm8tPnJldHVybl9vYmplY3QgPSBOVUxMOwogCi0JLyogR2V0IHRoZSBwcmVmaXggaGFuZGxlIGFuZCBOb2RlICovCi0KLQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKKwkvKgorCSAqIEdldCB0aGUgYWN0dWFsIG5hbWVzcGFjZSBub2RlIGZvciB0aGUgdGFyZ2V0IG9iamVjdC4gSGFuZGxlcyB0aGVzZSBjYXNlczoKKwkgKgorCSAqIDEpIE51bGwgbm9kZSwgUGF0aG5hbWUgKGFic29sdXRlIHBhdGgpCisJICogMikgTm9kZSwgUGF0aG5hbWUgKHBhdGggcmVsYXRpdmUgdG8gTm9kZSkKKwkgKiAzKSBOb2RlLCBOdWxsIFBhdGhuYW1lCisJICovCisJc3RhdHVzID0gYWNwaV9uc19nZXRfbm9kZShpbmZvLT5wcmVmaXhfbm9kZSwgaW5mby0+cGF0aG5hbWUsCisJCQkJICBBQ1BJX05TX05PX1VQU0VBUkNILCAmaW5mby0+cmVzb2x2ZWRfbm9kZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCWluZm8tPm5vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShpbmZvLT5ub2RlKTsKLQlpZiAoIWluZm8tPm5vZGUpIHsKLQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9Ci0KIAkvKgogCSAqIEZvciBhIG1ldGhvZCBhbGlhcywgd2UgbXVzdCBncmFiIHRoZSBhY3R1YWwgbWV0aG9kIG5vZGUgc28gdGhhdCBwcm9wZXIKIAkgKiBzY29waW5nIGNvbnRleHQgd2lsbCBiZSBlc3RhYmxpc2hlZCBiZWZvcmUgZXhlY3V0aW9uLgogCSAqLwotCWlmIChhY3BpX25zX2dldF90eXBlKGluZm8tPm5vZGUpID09IEFDUElfVFlQRV9MT0NBTF9NRVRIT0RfQUxJQVMpIHsKLQkJaW5mby0+bm9kZSA9CisJaWYgKGFjcGlfbnNfZ2V0X3R5cGUoaW5mby0+cmVzb2x2ZWRfbm9kZSkgPT0KKwkgICAgQUNQSV9UWVBFX0xPQ0FMX01FVEhPRF9BTElBUykgeworCQlpbmZvLT5yZXNvbHZlZF9ub2RlID0KIAkJICAgIEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsCi0JCQkJICBpbmZvLT5ub2RlLT5vYmplY3QpOworCQkJCSAgaW5mby0+cmVzb2x2ZWRfbm9kZS0+b2JqZWN0KTsKIAl9CiAKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLCAiJXMgWyVwXSBWYWx1ZSAlcFxuIiwgaW5mby0+cGF0aG5hbWUsCisJCQkgIGluZm8tPnJlc29sdmVkX25vZGUsCisJCQkgIGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChpbmZvLT5yZXNvbHZlZF9ub2RlKSkpOworCiAJLyoKIAkgKiBUd28gbWFqb3IgY2FzZXMgaGVyZToKLQkgKiAxKSBUaGUgb2JqZWN0IGlzIGFuIGFjdHVhbCBjb250cm9sIG1ldGhvZCAtLSBleGVjdXRlIGl0LgotCSAqIDIpIFRoZSBvYmplY3QgaXMgbm90IGEgbWV0aG9kIC0tIGp1c3QgcmV0dXJuIGl0J3MgY3VycmVudCB2YWx1ZQogCSAqCi0JICogSW4gYm90aCBjYXNlcywgdGhlIG5hbWVzcGFjZSBpcyB1bmxvY2tlZCBieSB0aGUgYWNwaV9ucyogcHJvY2VkdXJlCisJICogMSkgVGhlIG9iamVjdCBpcyBhIGNvbnRyb2wgbWV0aG9kIC0tIGV4ZWN1dGUgaXQKKwkgKiAyKSBUaGUgb2JqZWN0IGlzIG5vdCBhIG1ldGhvZCAtLSBqdXN0IHJldHVybiBpdCdzIGN1cnJlbnQgdmFsdWUKIAkgKi8KLQlpZiAoYWNwaV9uc19nZXRfdHlwZShpbmZvLT5ub2RlKSA9PSBBQ1BJX1RZUEVfTUVUSE9EKSB7CisJaWYgKGFjcGlfbnNfZ2V0X3R5cGUoaW5mby0+cmVzb2x2ZWRfbm9kZSkgPT0gQUNQSV9UWVBFX01FVEhPRCkgewogCQkvKgotCQkgKiBDYXNlIDEpIFdlIGhhdmUgYW4gYWN0dWFsIGNvbnRyb2wgbWV0aG9kIHRvIGV4ZWN1dGUKKwkJICogMSkgT2JqZWN0IGlzIGEgY29udHJvbCBtZXRob2QgLSBleGVjdXRlIGl0CiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX25zX2V4ZWN1dGVfY29udHJvbF9tZXRob2QoaW5mbyk7CisKKwkJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSBtZXRob2Qgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUgKi8KKworCQlpbmZvLT5vYmpfZGVzYyA9CisJCSAgICBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3QoaW5mby0+cmVzb2x2ZWRfbm9kZSk7CisJCWlmICghaW5mby0+b2JqX2Rlc2MpIHsKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkJICAgICJDb250cm9sIG1ldGhvZCBoYXMgbm8gYXR0YWNoZWQgc3ViLW9iamVjdCIpKTsKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OVUxMX09CSkVDVCk7CisJCX0KKworCQlBQ1BJX0RVTVBfUEFUSE5BTUUoaW5mby0+cmVzb2x2ZWRfbm9kZSwgIkV4ZWN1dGUgTWV0aG9kOiIsCisJCQkJICAgQUNQSV9MVl9JTkZPLCBfQ09NUE9ORU5UKTsKKworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCisJCQkJICAiTWV0aG9kIGF0IEFNTCBhZGRyZXNzICVwIExlbmd0aCAlWFxuIiwKKwkJCQkgIGluZm8tPm9ial9kZXNjLT5tZXRob2QuYW1sX3N0YXJ0ICsgMSwKKwkJCQkgIGluZm8tPm9ial9kZXNjLT5tZXRob2QuYW1sX2xlbmd0aCAtIDEpKTsKKworCQkvKgorCQkgKiBBbnkgbmFtZXNwYWNlIGRlbGV0aW9uIG11c3QgYWNxdWlyZSBib3RoIHRoZSBuYW1lc3BhY2UgYW5kCisJCSAqIGludGVycHJldGVyIGxvY2tzIHRvIGVuc3VyZSB0aGF0IG5vIHRocmVhZCBpcyB1c2luZyB0aGUgcG9ydGlvbiBvZgorCQkgKiB0aGUgbmFtZXNwYWNlIHRoYXQgaXMgYmVpbmcgZGVsZXRlZC4KKwkJICoKKwkJICogRXhlY3V0ZSB0aGUgbWV0aG9kIHZpYSB0aGUgaW50ZXJwcmV0ZXIuIFRoZSBpbnRlcnByZXRlciBpcyBsb2NrZWQKKwkJICogaGVyZSBiZWZvcmUgY2FsbGluZyBpbnRvIHRoZSBBTUwgcGFyc2VyCisJCSAqLworCQlzdGF0dXMgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCX0KKworCQlzdGF0dXMgPSBhY3BpX3BzX2V4ZWN1dGVfbWV0aG9kKGluZm8pOworCQlhY3BpX2V4X2V4aXRfaW50ZXJwcmV0ZXIoKTsKIAl9IGVsc2UgewogCQkvKgotCQkgKiBDYXNlIDIpIE9iamVjdCBpcyBOT1QgYSBtZXRob2QsIGp1c3QgcmV0dXJuIGl0cyBjdXJyZW50IHZhbHVlCisJCSAqIDIpIE9iamVjdCBpcyBub3QgYSBtZXRob2QsIHJldHVybiBpdHMgY3VycmVudCB2YWx1ZQogCQkgKi8KLQkJc3RhdHVzID0gYWNwaV9uc19nZXRfb2JqZWN0X3ZhbHVlKGluZm8pOwotCX0KIAotCS8qCi0JICogQ2hlY2sgaWYgdGhlcmUgaXMgYSByZXR1cm4gdmFsdWUgb24gdGhlIHN0YWNrIHRoYXQgbXVzdCBiZSBkZWFsdCB3aXRoCi0JICovCi0JaWYgKHN0YXR1cyA9PSBBRV9DVFJMX1JFVFVSTl9WQUxVRSkgewotCQkvKiBNYXAgQUVfQ1RSTF9SRVRVUk5fVkFMVUUgdG8gQUVfT0ssIHdlIGFyZSBkb25lIHdpdGggaXQgKi8KKwkJLyoKKwkJICogT2JqZWN0cyByZXF1aXJlIGFkZGl0aW9uYWwgcmVzb2x1dGlvbiBzdGVwcyAoZS5nLiwgdGhlIE5vZGUgbWF5IGJlCisJCSAqIGEgZmllbGQgdGhhdCBtdXN0IGJlIHJlYWQsIGV0Yy4pIC0tIHdlIGNhbid0IGp1c3QgZ3JhYiB0aGUgb2JqZWN0CisJCSAqIG91dCBvZiB0aGUgbm9kZS4KKwkJICoKKwkJICogVXNlIHJlc29sdmVfbm9kZV90b192YWx1ZSgpIHRvIGdldCB0aGUgYXNzb2NpYXRlZCB2YWx1ZS4KKwkJICoKKwkJICogTk9URTogd2UgY2FuIGdldCBhd2F5IHdpdGggcGFzc2luZyBpbiBOVUxMIGZvciBhIHdhbGsgc3RhdGUgYmVjYXVzZQorCQkgKiByZXNvbHZlZF9ub2RlIGlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGEgcmVmZXJlbmNlIHRvIGVpdGhlciBhIG1ldGhvZAorCQkgKiBsb2NhbCBvciBhIG1ldGhvZCBhcmd1bWVudCAoYmVjYXVzZSB0aGlzIGludGVyZmFjZSBpcyBuZXZlciBjYWxsZWQKKwkJICogZnJvbSBhIHJ1bm5pbmcgbWV0aG9kLikKKwkJICoKKwkJICogRXZlbiB0aG91Z2ggd2UgZG8gbm90IGRpcmVjdGx5IGludm9rZSB0aGUgaW50ZXJwcmV0ZXIgZm9yIG9iamVjdAorCQkgKiByZXNvbHV0aW9uLCB3ZSBtdXN0IGxvY2sgaXQgYmVjYXVzZSB3ZSBjb3VsZCBhY2Nlc3MgYW4gb3ByZWdpb24uCisJCSAqIFRoZSBvcHJlZ2lvbiBhY2Nlc3MgY29kZSBhc3N1bWVzIHRoYXQgdGhlIGludGVycHJldGVyIGlzIGxvY2tlZC4KKwkJICovCisJCXN0YXR1cyA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkJfQogCi0JCXN0YXR1cyA9IEFFX09LOwotCX0KKwkJLyogRnVuY3Rpb24gaGFzIGEgc3RyYW5nZSBpbnRlcmZhY2UgKi8KIAotCS8qCi0JICogTmFtZXNwYWNlIHdhcyB1bmxvY2tlZCBieSB0aGUgaGFuZGxpbmcgYWNwaV9ucyogZnVuY3Rpb24sIHNvIHdlCi0JICoganVzdCByZXR1cm4KLQkgKi8KLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLX0KKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfZXhfcmVzb2x2ZV9ub2RlX3RvX3ZhbHVlKCZpbmZvLT5yZXNvbHZlZF9ub2RlLCBOVUxMKTsKKwkJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZXhlY3V0ZV9jb250cm9sX21ldGhvZAotICoKLSAqIFBBUkFNRVRFUlM6ICBJbmZvICAgICAgICAgICAgLSBNZXRob2QgaW5mbyBibG9jaywgY29udGFpbnM6Ci0gKiAgICAgICAgICAgICAgICAgIE5vZGUgICAgICAgICAgICAtIE1ldGhvZCBOb2RlIHRvIGV4ZWN1dGUKLSAqICAgICAgICAgICAgICAgICAgb2JqX2Rlc2MgICAgICAgIC0gTWV0aG9kIG9iamVjdAotICogICAgICAgICAgICAgICAgICBQYXJhbWV0ZXJzICAgICAgLSBMaXN0IG9mIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgbWV0aG9kLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGJ5IE5VTEwuIFBhcmFtcyBpdHNlbGYgbWF5IGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgaWYgbm8gcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkLgotICogICAgICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0ICAgLSBXaGVyZSB0byBwdXQgbWV0aG9kJ3MgcmV0dXJuIHZhbHVlIChpZgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkpLiBJZiBOVUxMLCBubyB2YWx1ZSBpcyByZXR1cm5lZC4KLSAqICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgIC0gVHlwZSBvZiBQYXJhbWV0ZXIgbGlzdAotICogICAgICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0ICAgLSBXaGVyZSB0byBwdXQgbWV0aG9kJ3MgcmV0dXJuIHZhbHVlIChpZgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkpLiBJZiBOVUxMLCBubyB2YWx1ZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IEV4ZWN1dGUgdGhlIHJlcXVlc3RlZCBtZXRob2QgcGFzc2luZyB0aGUgZ2l2ZW4gcGFyYW1ldGVycwotICoKLSAqIE1VVEVYOiAgICAgICBBc3N1bWVzIG5hbWVzcGFjZSBpcyBsb2NrZWQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfbnNfZXhlY3V0ZV9jb250cm9sX21ldGhvZChzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbykKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19leGVjdXRlX2NvbnRyb2xfbWV0aG9kIik7Ci0KLQkvKiBWZXJpZnkgdGhhdCB0aGVyZSBpcyBhIG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QgKi8KLQotCWluZm8tPm9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KGluZm8tPm5vZGUpOwotCWlmICghaW5mby0+b2JqX2Rlc2MpIHsKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk5vIGF0dGFjaGVkIG1ldGhvZCBvYmplY3QiKSk7Ci0KLQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OVUxMX09CSkVDVCk7Ci0JfQotCi0JQUNQSV9EVU1QX1BBVEhOQU1FKGluZm8tPm5vZGUsICJFeGVjdXRlIE1ldGhvZDoiLAotCQkJICAgQUNQSV9MVl9JTkZPLCBfQ09NUE9ORU5UKTsKLQotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIk1ldGhvZCBhdCBBTUwgYWRkcmVzcyAlcCBMZW5ndGggJVhcbiIsCi0JCQkgIGluZm8tPm9ial9kZXNjLT5tZXRob2QuYW1sX3N0YXJ0ICsgMSwKLQkJCSAgaW5mby0+b2JqX2Rlc2MtPm1ldGhvZC5hbWxfbGVuZ3RoIC0gMSkpOwotCi0JLyoKLQkgKiBVbmxvY2sgdGhlIG5hbWVzcGFjZSBiZWZvcmUgZXhlY3V0aW9uLiAgVGhpcyBhbGxvd3MgbmFtZXNwYWNlIGFjY2VzcwotCSAqIHZpYSB0aGUgZXh0ZXJuYWwgQWNwaSogaW50ZXJmYWNlcyB3aGlsZSBhIG1ldGhvZCBpcyBiZWluZyBleGVjdXRlZC4KLQkgKiBIb3dldmVyLCBhbnkgbmFtZXNwYWNlIGRlbGV0aW9uIG11c3QgYWNxdWlyZSBib3RoIHRoZSBuYW1lc3BhY2UgYW5kCi0JICogaW50ZXJwcmV0ZXIgbG9ja3MgdG8gZW5zdXJlIHRoYXQgbm8gdGhyZWFkIGlzIHVzaW5nIHRoZSBwb3J0aW9uIG9mIHRoZQotCSAqIG5hbWVzcGFjZSB0aGF0IGlzIGJlaW5nIGRlbGV0ZWQuCi0JICovCi0Jc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCS8qCi0JICogRXhlY3V0ZSB0aGUgbWV0aG9kIHZpYSB0aGUgaW50ZXJwcmV0ZXIuICBUaGUgaW50ZXJwcmV0ZXIgaXMgbG9ja2VkCi0JICogaGVyZSBiZWZvcmUgY2FsbGluZyBpbnRvIHRoZSBBTUwgcGFyc2VyCi0JICovCi0Jc3RhdHVzID0gYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcigpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQlzdGF0dXMgPSBhY3BpX3BzX2V4ZWN1dGVfbWV0aG9kKGluZm8pOwotCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwotCi0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZ2V0X29iamVjdF92YWx1ZQotICoKLSAqIFBBUkFNRVRFUlM6ICBJbmZvICAgICAgICAgICAgLSBNZXRob2QgaW5mbyBibG9jaywgY29udGFpbnM6Ci0gKiAgICAgICAgICAgICAgICAgIE5vZGUgICAgICAgICAgICAtIE9iamVjdCdzIE5TIG5vZGUKLSAqICAgICAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgIC0gV2hlcmUgdG8gcHV0IG9iamVjdCB2YWx1ZSAoaWYKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55KS4gSWYgTlVMTCwgbm8gdmFsdWUgaXMgcmV0dXJuZWQuCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG9iamVjdAotICoKLSAqIE1VVEVYOiAgICAgICBBc3N1bWVzIG5hbWVzcGFjZSBpcyBsb2NrZWQsIGxlYXZlcyBuYW1lc3BhY2UgdW5sb2NrZWQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9uc19nZXRfb2JqZWN0X3ZhbHVlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKQotewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpyZXNvbHZlZF9ub2RlID0gaW5mby0+bm9kZTsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2dldF9vYmplY3RfdmFsdWUiKTsKLQotCS8qCi0JICogT2JqZWN0cyByZXF1aXJlIGFkZGl0aW9uYWwgcmVzb2x1dGlvbiBzdGVwcyAoZS5nLiwgdGhlIE5vZGUgbWF5IGJlIGEKLQkgKiBmaWVsZCB0aGF0IG11c3QgYmUgcmVhZCwgZXRjLikgLS0gd2UgY2FuJ3QganVzdCBncmFiIHRoZSBvYmplY3Qgb3V0IG9mCi0JICogdGhlIG5vZGUuCi0JICovCi0KLQkvKgotCSAqIFVzZSByZXNvbHZlX25vZGVfdG9fdmFsdWUoKSB0byBnZXQgdGhlIGFzc29jaWF0ZWQgdmFsdWUuIFRoaXMgY2FsbCBhbHdheXMKLQkgKiBkZWxldGVzIG9ial9kZXNjIChhbGxvY2F0ZWQgYWJvdmUpLgotCSAqCi0JICogTk9URTogd2UgY2FuIGdldCBhd2F5IHdpdGggcGFzc2luZyBpbiBOVUxMIGZvciBhIHdhbGsgc3RhdGUgYmVjYXVzZQotCSAqIG9ial9kZXNjIGlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGEgcmVmZXJlbmNlIHRvIGVpdGhlciBhIG1ldGhvZCBsb2NhbCBvcgotCSAqIGEgbWV0aG9kIGFyZ3VtZW50IChiZWNhdXNlIHRoaXMgaW50ZXJmYWNlIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZQotCSAqIGFjcGlfZXZhbHVhdGUgZXh0ZXJuYWwgaW50ZXJmYWNlLCBuZXZlciBjYWxsZWQgZnJvbSBhIHJ1bm5pbmcgbWV0aG9kLikKLQkgKgotCSAqIEV2ZW4gdGhvdWdoIHdlIGRvIG5vdCBkaXJlY3RseSBpbnZva2UgdGhlIGludGVycHJldGVyIGZvciB0aGlzLCB3ZSBtdXN0Ci0JICogZW50ZXIgaXQgYmVjYXVzZSB3ZSBjb3VsZCBhY2Nlc3MgYW4gb3ByZWdpb24uIFRoZSBvcHJlZ2lvbiBhY2Nlc3MgY29kZQotCSAqIGFzc3VtZXMgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgbG9ja2VkLgotCSAqCi0JICogV2UgbXVzdCByZWxlYXNlIHRoZSBuYW1lc3BhY2UgbG9jayBiZWZvcmUgZW50ZXJpbmcgdGhlIGludGVwcmV0ZXIuCi0JICovCi0Jc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCXN0YXR1cyA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJc3RhdHVzID0gYWNwaV9leF9yZXNvbHZlX25vZGVfdG9fdmFsdWUoJnJlc29sdmVkX25vZGUsIE5VTEwpOwogCQkvKgogCQkgKiBJZiBhY3BpX2V4X3Jlc29sdmVfbm9kZV90b192YWx1ZSgpIHN1Y2NlZWRlZCwgdGhlIHJldHVybiB2YWx1ZSB3YXMgcGxhY2VkCiAJCSAqIGluIHJlc29sdmVkX25vZGUuCiAJCSAqLwotCQlhY3BpX2V4X2V4aXRfaW50ZXJwcmV0ZXIoKTsKLQogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAkJCXN0YXR1cyA9IEFFX0NUUkxfUkVUVVJOX1ZBTFVFOwotCQkJaW5mby0+cmV0dXJuX29iamVjdCA9IEFDUElfQ0FTVF9QVFIKLQkJCSAgICAodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCwgcmVzb2x2ZWRfbm9kZSk7CisJCQlpbmZvLT5yZXR1cm5fb2JqZWN0ID0KKwkJCSAgICBBQ1BJX0NBU1RfUFRSKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QsCisJCQkJCSAgaW5mby0+cmVzb2x2ZWRfbm9kZSk7CisKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsCiAJCQkJCSAgIlJldHVybmluZyBvYmplY3QgJXAgWyVzXVxuIiwKIAkJCQkJICBpbmZvLT5yZXR1cm5fb2JqZWN0LApAQCAtNDg0LDcgKzIxMSwzMCBAQAogCQl9CiAJfQogCi0JLyogTmFtZXNwYWNlIGlzIHVubG9ja2VkICovCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSBpcyBhIHJldHVybiB2YWx1ZSB0aGF0IG11c3QgYmUgZGVhbHQgd2l0aAorCSAqLworCWlmIChzdGF0dXMgPT0gQUVfQ1RSTF9SRVRVUk5fVkFMVUUpIHsKIAorCQkvKiBJZiBjYWxsZXIgZG9lcyBub3Qgd2FudCB0aGUgcmV0dXJuIHZhbHVlLCBkZWxldGUgaXQgKi8KKworCQlpZiAoaW5mby0+ZmxhZ3MgJiBBQ1BJX0lHTk9SRV9SRVRVUk5fVkFMVUUpIHsKKwkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShpbmZvLT5yZXR1cm5fb2JqZWN0KTsKKwkJCWluZm8tPnJldHVybl9vYmplY3QgPSBOVUxMOworCQl9CisKKwkJLyogTWFwIEFFX0NUUkxfUkVUVVJOX1ZBTFVFIHRvIEFFX09LLCB3ZSBhcmUgZG9uZSB3aXRoIGl0ICovCisKKwkJc3RhdHVzID0gQUVfT0s7CisJfQorCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKKwkJCSAgIioqKiBDb21wbGV0ZWQgZXZhbHVhdGlvbiBvZiBvYmplY3QgJXMgKioqXG4iLAorCQkJICBpbmZvLT5wYXRobmFtZSkpOworCisJLyoKKwkgKiBOYW1lc3BhY2Ugd2FzIHVubG9ja2VkIGJ5IHRoZSBoYW5kbGluZyBhY3BpX25zKiBmdW5jdGlvbiwgc28gd2UKKwkgKiBqdXN0IHJldHVybgorCSAqLwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2luaXQuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNpbml0LmMKaW5kZXggOWY5MjllNC4uYWVjODQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2luaXQuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zaW5pdC5jCkBAIC01OCw2ICs1OCwxMCBAQAogYWNwaV9uc19pbml0X29uZV9kZXZpY2UoYWNwaV9oYW5kbGUgb2JqX2hhbmRsZSwKIAkJCXUzMiBuZXN0aW5nX2xldmVsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKTsKIAorc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX25zX2ZpbmRfaW5pX21ldGhvZHMoYWNwaV9oYW5kbGUgb2JqX2hhbmRsZSwKKwkJCSB1MzIgbmVzdGluZ19sZXZlbCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldHVybl92YWx1ZSk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfaW5pdGlhbGl6ZV9vYmplY3RzCkBAIC03Niw3ICs4MCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX2luaXRfd2Fsa19pbmZvIGluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19pbml0aWFsaXplX29iamVjdHMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2luaXRpYWxpemVfb2JqZWN0cyk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAogCQkJICAiKioqKiBTdGFydGluZyBpbml0aWFsaXphdGlvbiBvZiBuYW1lc3BhY2Ugb2JqZWN0cyAqKioqXG4iKSk7CkBAIC05Myw3ICs5Nyw3IEBACiAJCQkJICAgICBBQ1BJX1VJTlQzMl9NQVgsIGFjcGlfbnNfaW5pdF9vbmVfb2JqZWN0LAogCQkJCSAgICAgJmluZm8sIE5VTEwpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRHVyaW5nIHdhbGtfbmFtZXNwYWNlIikpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRHVyaW5nIFdhbGtOYW1lc3BhY2UiKSk7CiAJfQogCiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfSU5JVCwKQEAgLTEzMyw3ICsxMzcsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2Fsa19pbmZvIGluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19pbml0aWFsaXplX2RldmljZXMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2luaXRpYWxpemVfZGV2aWNlcyk7CiAKIAkvKiBJbml0IGNvdW50ZXJzICovCiAKQEAgLTE0MiwzMCArMTQ2LDQ2IEBACiAJaW5mby5udW1fSU5JID0gMDsKIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0lOSVQsCi0JCQkgICAgICAiRXhlY3V0aW5nIGFsbCBEZXZpY2UgX1NUQSBhbmRfSU5JIG1ldGhvZHM6IikpOworCQkJICAgICAgIkluaXRpYWxpemluZyBEZXZpY2UvUHJvY2Vzc29yL1RoZXJtYWwgb2JqZWN0cyBieSBleGVjdXRpbmcgX0lOSSBtZXRob2RzOiIpKTsKIAotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBXYWxrIG5hbWVzcGFjZSBmb3IgYWxsIG9iamVjdHMgKi8KKwkvKiBUcmVlIGFuYWx5c2lzOiBmaW5kIGFsbCBzdWJ0cmVlcyB0aGF0IGNvbnRhaW4gX0lOSSBtZXRob2RzICovCiAKIAlzdGF0dXMgPSBhY3BpX25zX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9BTlksIEFDUElfUk9PVF9PQkpFQ1QsCi0JCQkJCUFDUElfVUlOVDMyX01BWCwgVFJVRSwKKwkJCQkJQUNQSV9VSU5UMzJfTUFYLCBGQUxTRSwKKwkJCQkJYWNwaV9uc19maW5kX2luaV9tZXRob2RzLCAmaW5mbywgTlVMTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWdvdG8gZXJyb3JfZXhpdDsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgZXZhbHVhdGlvbiBpbmZvcm1hdGlvbiBibG9jayAqLworCisJaW5mby5ldmFsdWF0ZV9pbmZvID0KKwkgICAgQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8pKTsKKwlpZiAoIWluZm8uZXZhbHVhdGVfaW5mbykgeworCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCWdvdG8gZXJyb3JfZXhpdDsKKwl9CisKKwkvKiBXYWxrIG5hbWVzcGFjZSB0byBleGVjdXRlIGFsbCBfSU5JcyBvbiBwcmVzZW50IGRldmljZXMgKi8KKworCXN0YXR1cyA9IGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0FOWSwgQUNQSV9ST09UX09CSkVDVCwKKwkJCQkJQUNQSV9VSU5UMzJfTUFYLCBGQUxTRSwKIAkJCQkJYWNwaV9uc19pbml0X29uZV9kZXZpY2UsICZpbmZvLCBOVUxMKTsKIAotCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwotCisJQUNQSV9GUkVFKGluZm8uZXZhbHVhdGVfaW5mbyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJEdXJpbmcgd2Fsa19uYW1lc3BhY2UiKSk7CisJCWdvdG8gZXJyb3JfZXhpdDsKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULAotCQkJICAgICAgIlxuJWhkIERldmljZXMgZm91bmQgLSBleGVjdXRlZCAlaGQgX1NUQSwgJWhkIF9JTkkgbWV0aG9kc1xuIiwKLQkJCSAgICAgIGluZm8uZGV2aWNlX2NvdW50LCBpbmZvLm51bV9TVEEsIGluZm8ubnVtX0lOSSkpOworCQkJICAgICAgIlxuRXhlY3V0ZWQgJWhkIF9JTkkgbWV0aG9kcyByZXF1aXJpbmcgJWhkIF9TVEEgZXhlY3V0aW9ucyAoZXhhbWluZWQgJWhkIG9iamVjdHMpXG4iLAorCQkJICAgICAgaW5mby5udW1fSU5JLCBpbmZvLm51bV9TVEEsIGluZm8uZGV2aWNlX2NvdW50KSk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKworICAgICAgZXJyb3JfZXhpdDoKKwlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiIpKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIwMCw3ICsyMjAsNyBAQAogCSAgICAoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKilvYmpfaGFuZGxlOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJuc19pbml0X29uZV9vYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfaW5pdF9vbmVfb2JqZWN0KTsKIAogCWluZm8tPm9iamVjdF9jb3VudCsrOwogCkBAIC0zMTEsNiArMzMxLDcyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZmluZF9pbmlfbWV0aG9kcworICoKKyAqIFBBUkFNRVRFUlM6ICBhY3BpX3dhbGtfY2FsbGJhY2sKKyAqCisgKiBSRVRVUk46ICAgICAgYWNwaV9zdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ2FsbGVkIGR1cmluZyBuYW1lc3BhY2Ugd2Fsay4gRmluZHMgb2JqZWN0cyBuYW1lZCBfSU5JIHVuZGVyCisgKiAgICAgICAgICAgICAgZGV2aWNlL3Byb2Nlc3Nvci90aGVybWFsIG9iamVjdHMsIGFuZCBtYXJrcyB0aGUgZW50aXJlIHN1YnRyZWUKKyAqICAgICAgICAgICAgICB3aXRoIGEgU1VCVFJFRV9IQVNfSU5JIGZsYWcuIFRoaXMgZmxhZyBpcyB1c2VkIGR1cmluZyB0aGUKKyAqICAgICAgICAgICAgICBzdWJzZXF1ZW50IGRldmljZSBpbml0aWFsaXphdGlvbiB3YWxrIHRvIGF2b2lkIGVudGlyZSBzdWJ0cmVlcworICogICAgICAgICAgICAgIHRoYXQgZG8gbm90IGNvbnRhaW4gYW4gX0lOSS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfZmluZF9pbmlfbWV0aG9kcyhhY3BpX2hhbmRsZSBvYmpfaGFuZGxlLAorCQkJIHUzMiBuZXN0aW5nX2xldmVsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKQoreworCXN0cnVjdCBhY3BpX2RldmljZV93YWxrX2luZm8gKmluZm8gPQorCSAgICBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX2RldmljZV93YWxrX2luZm8sIGNvbnRleHQpOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZTsKKworCS8qIEtlZXAgY291bnQgb2YgZGV2aWNlL3Byb2Nlc3Nvci90aGVybWFsIG9iamVjdHMgKi8KKworCW5vZGUgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlLCBvYmpfaGFuZGxlKTsKKwlpZiAoKG5vZGUtPnR5cGUgPT0gQUNQSV9UWVBFX0RFVklDRSkgfHwKKwkgICAgKG5vZGUtPnR5cGUgPT0gQUNQSV9UWVBFX1BST0NFU1NPUikgfHwKKwkgICAgKG5vZGUtPnR5cGUgPT0gQUNQSV9UWVBFX1RIRVJNQUwpKSB7CisJCWluZm8tPmRldmljZV9jb3VudCsrOworCQlyZXR1cm4gKEFFX09LKTsKKwl9CisKKwkvKiBXZSBhcmUgb25seSBsb29raW5nIGZvciBtZXRob2RzIG5hbWVkIF9JTkkgKi8KKworCWlmICghQUNQSV9DT01QQVJFX05BTUUobm9kZS0+bmFtZS5hc2NpaSwgTUVUSE9EX05BTUVfX0lOSSkpIHsKKwkJcmV0dXJuIChBRV9PSyk7CisJfQorCisJLyoKKwkgKiBUaGUgb25seSBfSU5JIG1ldGhvZHMgdGhhdCB3ZSBjYXJlIGFib3V0IGFyZSB0aG9zZSB0aGF0IGFyZQorCSAqIHByZXNlbnQgdW5kZXIgRGV2aWNlLCBQcm9jZXNzb3IsIGFuZCBUaGVybWFsIG9iamVjdHMuCisJICovCisJcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShub2RlKTsKKwlzd2l0Y2ggKHBhcmVudF9ub2RlLT50eXBlKSB7CisJY2FzZSBBQ1BJX1RZUEVfREVWSUNFOgorCWNhc2UgQUNQSV9UWVBFX1BST0NFU1NPUjoKKwljYXNlIEFDUElfVFlQRV9USEVSTUFMOgorCisJCS8qIE1hcmsgcGFyZW50IGFuZCBidWJibGUgdXAgdGhlIElOSSBwcmVzZW50IGZsYWcgdG8gdGhlIHJvb3QgKi8KKworCQl3aGlsZSAocGFyZW50X25vZGUpIHsKKwkJCXBhcmVudF9ub2RlLT5mbGFncyB8PSBBTk9CSl9TVUJUUkVFX0hBU19JTkk7CisJCQlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHBhcmVudF9ub2RlKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAoQUVfT0spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2luaXRfb25lX2RldmljZQogICoKICAqIFBBUkFNRVRFUlM6ICBhY3BpX3dhbGtfY2FsbGJhY2sKQEAgLTMyNywxMTkgKzQxMywxNjUgQEAKIGFjcGlfbnNfaW5pdF9vbmVfZGV2aWNlKGFjcGlfaGFuZGxlIG9ial9oYW5kbGUsCiAJCQl1MzIgbmVzdGluZ19sZXZlbCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldHVybl92YWx1ZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2Fsa19pbmZvICppbmZvID0KLQkgICAgKHN0cnVjdCBhY3BpX2RldmljZV93YWxrX2luZm8gKiljb250ZXh0OwotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIHBpbmZvOworCXN0cnVjdCBhY3BpX2RldmljZV93YWxrX2luZm8gKndhbGtfaW5mbyA9CisJICAgIEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfZGV2aWNlX3dhbGtfaW5mbywgY29udGV4dCk7CisJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbyA9IHdhbGtfaW5mby0+ZXZhbHVhdGVfaW5mbzsKIAl1MzIgZmxhZ3M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICppbmlfbm9kZTsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19pbml0X29uZV9kZXZpY2UiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2luaXRfb25lX2RldmljZSk7CiAKLQlkZXZpY2Vfbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKG9ial9oYW5kbGUpOwotCWlmICghZGV2aWNlX25vZGUpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KKwkvKiBXZSBhcmUgaW50ZXJlc3RlZCBpbiBEZXZpY2VzLCBQcm9jZXNzb3JzIGFuZCB0aGVybWFsX3pvbmVzIG9ubHkgKi8KIAotCS8qCi0JICogV2Ugd2lsbCBydW4gX1NUQS9fSU5JIG9uIERldmljZXMsIFByb2Nlc3NvcnMgYW5kIHRoZXJtYWxfem9uZXMgb25seQotCSAqLworCWRldmljZV9ub2RlID0gQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSwgb2JqX2hhbmRsZSk7CiAJaWYgKChkZXZpY2Vfbm9kZS0+dHlwZSAhPSBBQ1BJX1RZUEVfREVWSUNFKSAmJgogCSAgICAoZGV2aWNlX25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX1BST0NFU1NPUikgJiYKIAkgICAgKGRldmljZV9ub2RlLT50eXBlICE9IEFDUElfVFlQRV9USEVSTUFMKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIAotCWlmICgoYWNwaV9kYmdfbGV2ZWwgPD0gQUNQSV9MVl9BTExfRVhDRVBUSU9OUykgJiYKLQkgICAgKCEoYWNwaV9kYmdfbGV2ZWwgJiBBQ1BJX0xWX0lORk8pKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULCAiLiIpKTsKLQl9Ci0KLQlpbmZvLT5kZXZpY2VfY291bnQrKzsKLQogCS8qCi0JICogQ2hlY2sgaWYgdGhlIF9JTkkgbWV0aG9kIGV4aXN0cyBmb3IgdGhpcyBkZXZpY2UgLQotCSAqIGlmIF9JTkkgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcnVuIF9TVEEKLQkgKiBObyBfSU5JIG1lYW5zIGRldmljZSByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvbgorCSAqIEJlY2F1c2Ugb2YgYW4gZWFybGllciBuYW1lc3BhY2UgYW5hbHlzaXMsIGFsbCBzdWJ0cmVlcyB0aGF0IGNvbnRhaW4gYW4KKwkgKiBfSU5JIG1ldGhvZCBhcmUgdGFnZ2VkLgorCSAqCisJICogSWYgdGhpcyBkZXZpY2Ugc3VidHJlZSBkb2VzIG5vdCBjb250YWluIGFueSBfSU5JIG1ldGhvZHMsIHdlCisJICogY2FuIGV4aXQgbm93IGFuZCBzdG9wIHRyYXZlcnNpbmcgdGhpcyBlbnRpcmUgc3VidHJlZS4KIAkgKi8KLQlzdGF0dXMgPSBhY3BpX25zX3NlYXJjaF9ub2RlKCpBQ1BJX0NBU1RfUFRSKHUzMiwgTUVUSE9EX05BTUVfX0lOSSksCi0JCQkJICAgICBkZXZpY2Vfbm9kZSwgQUNQSV9UWVBFX01FVEhPRCwgJmluaV9ub2RlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJLyogTm8gX0lOSSBtZXRob2QgZm91bmQgLSBtb3ZlIG9uIHRvIG5leHQgZGV2aWNlICovCi0KLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQl9Ci0KLQkvKgotCSAqIFJ1biBfU1RBIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gcnVuIF9JTkkgb24gdGhlIGRldmljZSAtCi0JICogdGhlIGRldmljZSBtdXN0IGJlIHByZXNlbnQgYmVmb3JlIF9JTkkgY2FuIGJlIHJ1bi4KLQkgKiBIb3dldmVyLCBfU1RBIGlzIG5vdCByZXF1aXJlZCAtIGFzc3VtZSBkZXZpY2UgcHJlc2VudCBpZiBubyBfU1RBCi0JICovCi0JQUNQSV9ERUJVR19FWEVDKGFjcGlfdXRfZGlzcGxheV9pbml0X3BhdGhuYW1lKEFDUElfVFlQRV9NRVRIT0QsCi0JCQkJCQkgICAgICBkZXZpY2Vfbm9kZSwKLQkJCQkJCSAgICAgIE1FVEhPRF9OQU1FX19TVEEpKTsKLQotCXBpbmZvLm5vZGUgPSBkZXZpY2Vfbm9kZTsKLQlwaW5mby5wYXJhbWV0ZXJzID0gTlVMTDsKLQlwaW5mby5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKLQotCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9TVEEocGluZm8ubm9kZSwgJmZsYWdzKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJLyogSWdub3JlIGVycm9yIGFuZCBtb3ZlIG9uIHRvIG5leHQgZGV2aWNlICovCi0KLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQl9Ci0KLQlpZiAoZmxhZ3MgIT0gQUNQSV9VSU5UMzJfTUFYKSB7Ci0JCWluZm8tPm51bV9TVEErKzsKLQl9Ci0KLQlpZiAoIShmbGFncyAmIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UKSkgewotCQkvKiBEb24ndCBsb29rIGF0IGNoaWxkcmVuIG9mIGEgbm90IHByZXNlbnQgZGV2aWNlICovCi0KKwlpZiAoIShkZXZpY2Vfbm9kZS0+ZmxhZ3MgJiBBTk9CSl9TVUJUUkVFX0hBU19JTkkpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9DVFJMX0RFUFRIKTsKIAl9CiAKIAkvKgotCSAqIFRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgX0lOSSBleGlzdHMuIFJ1biB0aGUgX0lOSSBtZXRob2QuCi0JICogKFdlIGFscmVhZHkgaGF2ZSB0aGUgX0lOSSBub2RlIGZyb20gYWJvdmUpCisJICogUnVuIF9TVEEgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZGV2aWNlIGlzIHByZXNlbnQgYW5kIGZ1bmN0aW9uaW5nLiBXZQorCSAqIG11c3Qga25vdyB0aGlzIGluZm9ybWF0aW9uIGZvciB0d28gaW1wb3J0YW50IHJlYXNvbnMgKGZyb20gQUNQSSBzcGVjKToKKwkgKgorCSAqIDEpIFdlIGNhbiBvbmx5IHJ1biBfSU5JIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudC4KKwkgKiAyKSBXZSBtdXN0IGFib3J0IHRoZSBkZXZpY2UgdHJlZSB3YWxrIG9uIHRoaXMgc3VidHJlZSBpZiB0aGUgZGV2aWNlIGlzCisJICogICAgbm90IHByZXNlbnQgYW5kIGlzIG5vdCBmdW5jdGlvbmFsICh3ZSB3aWxsIG5vdCBleGFtaW5lIHRoZSBjaGlsZHJlbikKKwkgKgorCSAqIFRoZSBfU1RBIG1ldGhvZCBpcyBub3QgcmVxdWlyZWQgdG8gYmUgcHJlc2VudCB1bmRlciB0aGUgZGV2aWNlLCB3ZQorCSAqIGFzc3VtZSB0aGUgZGV2aWNlIGlzIHByZXNlbnQgaWYgX1NUQSBkb2VzIG5vdCBleGlzdC4KIAkgKi8KLQlBQ1BJX0RFQlVHX0VYRUMoYWNwaV91dF9kaXNwbGF5X2luaXRfcGF0aG5hbWUoQUNQSV9UWVBFX01FVEhPRCwKLQkJCQkJCSAgICAgIHBpbmZvLm5vZGUsCi0JCQkJCQkgICAgICBNRVRIT0RfTkFNRV9fSU5JKSk7CisJQUNQSV9ERUJVR19FWEVDKGFjcGlfdXRfZGlzcGxheV9pbml0X3BhdGhuYW1lCisJCQkoQUNQSV9UWVBFX01FVEhPRCwgZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19TVEEpKTsKIAotCXBpbmZvLm5vZGUgPSBpbmlfbm9kZTsKLQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX2J5X2hhbmRsZSgmcGluZm8pOworCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9TVEEoZGV2aWNlX25vZGUsICZmbGFncyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJLyogSWdub3JlIGVycm9yIGFuZCBtb3ZlIG9uIHRvIG5leHQgZGV2aWNlICovCiAKLSNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAotCQljaGFyICpzY29wZV9uYW1lID0gYWNwaV9uc19nZXRfZXh0ZXJuYWxfcGF0aG5hbWUoaW5pX25vZGUpOworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCX0KIAotCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICIlcy5fSU5JIGZhaWxlZDogJXMiLAotCQkJICAgICAgc2NvcGVfbmFtZSwgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpKTsKKwkvKgorCSAqIEZsYWdzID09IC0xIG1lYW5zIHRoYXQgX1NUQSB3YXMgbm90IGZvdW5kLiBJbiB0aGlzIGNhc2UsIHdlIGFzc3VtZSB0aGF0CisJICogdGhlIGRldmljZSBpcyBib3RoIHByZXNlbnQgYW5kIGZ1bmN0aW9uYWwuCisJICoKKwkgKiBGcm9tIHRoZSBBQ1BJIHNwZWMsIGRlc2NyaXB0aW9uIG9mIF9TVEE6CisJICoKKwkgKiAiSWYgYSBkZXZpY2Ugb2JqZWN0IChpbmNsdWRpbmcgdGhlIHByb2Nlc3NvciBvYmplY3QpIGRvZXMgbm90IGhhdmUgYW4KKwkgKiBfU1RBIG9iamVjdCwgdGhlbiBPU1BNIGFzc3VtZXMgdGhhdCBhbGwgb2YgdGhlIGFib3ZlIGJpdHMgYXJlIHNldCAoaW4KKwkgKiBvdGhlciB3b3JkcywgdGhlIGRldmljZSBpcyBwcmVzZW50LCAuLi4sIGFuZCBmdW5jdGlvbmluZykiCisJICovCisJaWYgKGZsYWdzICE9IEFDUElfVUlOVDMyX01BWCkgeworCQl3YWxrX2luZm8tPm51bV9TVEErKzsKKwl9CiAKLQkJQUNQSV9NRU1fRlJFRShzY29wZV9uYW1lKTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCS8qIERlbGV0ZSBhbnkgcmV0dXJuIG9iamVjdCAoZXNwZWNpYWxseSBpZiBpbXBsaWNpdF9yZXR1cm4gaXMgZW5hYmxlZCkgKi8KKwkvKgorCSAqIEV4YW1pbmUgdGhlIFBSRVNFTlQgYW5kIEZVTkNUSU9OSU5HIHN0YXR1cyBiaXRzCisJICoKKwkgKiBOb3RlOiBBQ1BJIHNwZWMgZG9lcyBub3Qgc2VlbSB0byBzcGVjaWZ5IGJlaGF2aW9yIGZvciB0aGUgcHJlc2VudCBidXQKKwkgKiBub3QgZnVuY3Rpb25pbmcgY2FzZSwgc28gd2UgYXNzdW1lIGZ1bmN0aW9uaW5nIGlmIHByZXNlbnQuCisJICovCisJaWYgKCEoZmxhZ3MgJiBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCkpIHsKIAotCQlpZiAocGluZm8ucmV0dXJuX29iamVjdCkgewotCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHBpbmZvLnJldHVybl9vYmplY3QpOworCQkvKiBEZXZpY2UgaXMgbm90IHByZXNlbnQsIHdlIG11c3QgZXhhbWluZSB0aGUgRnVuY3Rpb25pbmcgYml0ICovCisKKwkJaWYgKGZsYWdzICYgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HKSB7CisJCQkvKgorCQkJICogRGV2aWNlIGlzIG5vdCBwcmVzZW50IGJ1dCBpcyAiZnVuY3Rpb25pbmciLiBJbiB0aGlzIGNhc2UsCisJCQkgKiB3ZSB3aWxsIG5vdCBydW4gX0lOSSwgYnV0IHdlIGNvbnRpbnVlIHRvIGV4YW1pbmUgdGhlIGNoaWxkcmVuCisJCQkgKiBvZiB0aGlzIGRldmljZS4KKwkJCSAqCisJCQkgKiBGcm9tIHRoZSBBQ1BJIHNwZWMsIGRlc2NyaXB0aW9uIG9mIF9TVEE6IChOb3RlIC0gbm8gbWVudGlvbgorCQkJICogb2Ygd2hldGhlciB0byBydW4gX0lOSSBvciBub3Qgb24gdGhlIGRldmljZSBpbiBxdWVzdGlvbikKKwkJCSAqCisJCQkgKiAiX1NUQSBtYXkgcmV0dXJuIGJpdCAwIGNsZWFyIChub3QgcHJlc2VudCkgd2l0aCBiaXQgMyBzZXQKKwkJCSAqIChkZXZpY2UgaXMgZnVuY3Rpb25hbCkuIFRoaXMgY2FzZSBpcyB1c2VkIHRvIGluZGljYXRlIGEgdmFsaWQKKwkJCSAqIGRldmljZSBmb3Igd2hpY2ggbm8gZGV2aWNlIGRyaXZlciBzaG91bGQgYmUgbG9hZGVkIChmb3IgZXhhbXBsZSwKKwkJCSAqIGEgYnJpZGdlIGRldmljZS4pIENoaWxkcmVuIG9mIHRoaXMgZGV2aWNlIG1heSBiZSBwcmVzZW50IGFuZAorCQkJICogdmFsaWQuIE9TUE0gc2hvdWxkIGNvbnRpbnVlIGVudW1lcmF0aW9uIGJlbG93IGEgZGV2aWNlIHdob3NlCisJCQkgKiBfU1RBIHJldHVybnMgdGhpcyBiaXQgY29tYmluYXRpb24iCisJCQkgKi8KKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRGV2aWNlIGlzIG5vdCBwcmVzZW50IGFuZCBpcyBub3QgZnVuY3Rpb25pbmcuIFdlIG11c3QgYWJvcnQgdGhlCisJCQkgKiB3YWxrIG9mIHRoaXMgc3VidHJlZSBpbW1lZGlhdGVseSAtLSBkb24ndCBsb29rIGF0IHRoZSBjaGlsZHJlbgorCQkJICogb2Ygc3VjaCBhIGRldmljZS4KKwkJCSAqCisJCQkgKiBGcm9tIHRoZSBBQ1BJIHNwZWMsIGRlc2NyaXB0aW9uIG9mIF9JTkk6CisJCQkgKgorCQkJICogIklmIHRoZSBfU1RBIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50LAorCQkJICogT1NQTSB3aWxsIG5vdCBydW4gdGhlIF9JTkkgYW5kIHdpbGwgbm90IGV4YW1pbmUgdGhlIGNoaWxkcmVuCisJCQkgKiBvZiB0aGUgZGV2aWNlIGZvciBfSU5JIG1ldGhvZHMiCisJCQkgKi8KKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9DVFJMX0RFUFRIKTsKIAkJfQotCi0JCS8qIENvdW50IG9mIHN1Y2Nlc3NmdWwgSU5JcyAqLwotCi0JCWluZm8tPm51bV9JTkkrKzsKIAl9CiAKKwkvKgorCSAqIFRoZSBkZXZpY2UgaXMgcHJlc2VudCBvciBpcyBhc3N1bWVkIHByZXNlbnQgaWYgbm8gX1NUQSBleGlzdHMuCisJICogUnVuIHRoZSBfSU5JIGlmIGl0IGV4aXN0cyAobm90IHJlcXVpcmVkIHRvIGV4aXN0KQorCSAqCisJICogTm90ZTogV2Uga25vdyB0aGVyZSBpcyBhbiBfSU5JIHdpdGhpbiB0aGlzIHN1YnRyZWUsIGJ1dCBpdCBtYXkgbm90IGJlCisJICogdW5kZXIgdGhpcyBwYXJ0aWN1bGFyIGRldmljZSwgaXQgbWF5IGJlIGxvd2VyIGluIHRoZSBicmFuY2guCisJICovCisJQUNQSV9ERUJVR19FWEVDKGFjcGlfdXRfZGlzcGxheV9pbml0X3BhdGhuYW1lCisJCQkoQUNQSV9UWVBFX01FVEhPRCwgZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19JTkkpKTsKKworCWluZm8tPnByZWZpeF9ub2RlID0gZGV2aWNlX25vZGU7CisJaW5mby0+cGF0aG5hbWUgPSBNRVRIT0RfTkFNRV9fSU5JOworCWluZm8tPnBhcmFtZXRlcnMgPSBOVUxMOworCWluZm8tPnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOworCWluZm8tPmZsYWdzID0gQUNQSV9JR05PUkVfUkVUVVJOX1ZBTFVFOworCisJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZShpbmZvKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJd2Fsa19pbmZvLT5udW1fSU5JKys7CisKKwkJaWYgKChhY3BpX2RiZ19sZXZlbCA8PSBBQ1BJX0xWX0FMTF9FWENFUFRJT05TKSAmJgorCQkgICAgKCEoYWNwaV9kYmdfbGV2ZWwgJiBBQ1BJX0xWX0lORk8pKSkgeworCQkJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfSU5JVCwgIi4iKSk7CisJCX0KKwl9CisjaWZkZWYgQUNQSV9ERUJVR19PVVRQVVQKKwllbHNlIGlmIChzdGF0dXMgIT0gQUVfTk9UX0ZPVU5EKSB7CisKKwkJLyogSWdub3JlIGVycm9yIGFuZCBtb3ZlIG9uIHRvIG5leHQgZGV2aWNlICovCisKKwkJY2hhciAqc2NvcGVfbmFtZSA9CisJCSAgICBhY3BpX25zX2dldF9leHRlcm5hbF9wYXRobmFtZShpbmZvLT5yZXNvbHZlZF9ub2RlKTsKKworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiZHVyaW5nICVzLl9JTkkgZXhlY3V0aW9uIiwKKwkJCQlzY29wZV9uYW1lKSk7CisJCUFDUElfRlJFRShzY29wZV9uYW1lKTsKKwl9CisjZW5kaWYKKworCS8qIElnbm9yZSBlcnJvcnMgZnJvbSBhYm92ZSAqLworCisJc3RhdHVzID0gQUVfT0s7CisKKwkvKgorCSAqIFRoZSBfSU5JIG1ldGhvZCBoYXMgYmVlbiBydW4gaWYgcHJlc2VudDsgY2FsbCB0aGUgR2xvYmFsIEluaXRpYWxpemF0aW9uCisJICogSGFuZGxlciBmb3IgdGhpcyBkZXZpY2UuCisJICovCiAJaWYgKGFjcGlfZ2JsX2luaXRfaGFuZGxlcikgewotCQkvKiBFeHRlcm5hbCBpbml0aWFsaXphdGlvbiBoYW5kbGVyIGlzIHByZXNlbnQsIGNhbGwgaXQgKi8KLQogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9nYmxfaW5pdF9oYW5kbGVyKHBpbmZvLm5vZGUsIEFDUElfSU5JVF9ERVZJQ0VfSU5JKTsKKwkJICAgIGFjcGlfZ2JsX2luaXRfaGFuZGxlcihkZXZpY2Vfbm9kZSwgQUNQSV9JTklUX0RFVklDRV9JTkkpOwogCX0KIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zbG9hZC5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2xvYWQuYwppbmRleCA0ZTBiMDUyLi5mZTc1ZDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNsb2FkLmMKQEAgLTc3LDEzICs3NywxNCBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2xvYWRfdGFibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2xvYWRfdGFibGUpOwogCiAJLyogQ2hlY2sgaWYgdGFibGUgY29udGFpbnMgdmFsaWQgQU1MIChtdXN0IGJlIERTRFQsIFBTRFQsIFNTRFQsIGV0Yy4pICovCiAKIAlpZiAoIQogCSAgICAoYWNwaV9nYmxfdGFibGVfZGF0YVt0YWJsZV9kZXNjLT50eXBlXS4KIAkgICAgIGZsYWdzICYgQUNQSV9UQUJMRV9FWEVDVVRBQkxFKSkgeworCiAJCS8qIEp1c3QgaWdub3JlIHRoaXMgdGFibGUgKi8KIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMTY4LDcgKzE2OSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgKnRhYmxlX2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19sb2FkX3RhYmxlX2J5X3R5cGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2xvYWRfdGFibGVfYnlfdHlwZSk7CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTE4MCwxMSArMTgxLDExIEBACiAJICogRFNEVCAob25lKSwgU1NEVC9QU0RUIChtdWx0aXBsZSkKIAkgKi8KIAlzd2l0Y2ggKHRhYmxlX3R5cGUpIHsKLQljYXNlIEFDUElfVEFCTEVfRFNEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfRFNEVDoKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJOYW1lc3BhY2UgbG9hZDogRFNEVFxuIikpOwogCi0JCXRhYmxlX2Rlc2MgPSBhY3BpX2dibF90YWJsZV9saXN0c1tBQ1BJX1RBQkxFX0RTRFRdLm5leHQ7CisJCXRhYmxlX2Rlc2MgPSBhY3BpX2dibF90YWJsZV9saXN0c1tBQ1BJX1RBQkxFX0lEX0RTRFRdLm5leHQ7CiAKIAkJLyogSWYgdGFibGUgYWxyZWFkeSBsb2FkZWQgaW50byBuYW1lc3BhY2UsIGp1c3QgcmV0dXJuICovCiAKQEAgLTIwMCw4ICsyMDEsOCBAQAogCQl9CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1RBQkxFX1NTRFQ6Ci0JY2FzZSBBQ1BJX1RBQkxFX1BTRFQ6CisJY2FzZSBBQ1BJX1RBQkxFX0lEX1NTRFQ6CisJY2FzZSBBQ1BJX1RBQkxFX0lEX1BTRFQ6CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIk5hbWVzcGFjZSBsb2FkOiAlZCBTU0RUIG9yIFBTRFRzXG4iLApAQCAtMjU4LDcgKzI1OSw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9sb2FkX25hbWVfc3BhY2UiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfbG9hZF9uYW1lX3NwYWNlKTsKIAogCS8qIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgYSBEU0RUIGluc3RhbGxlZCAqLwogCkBAIC0yNzEsMTUgKzI3MiwxNSBAQAogCSAqIExvYWQgdGhlIG5hbWVzcGFjZS4gIFRoZSBEU0RUIGlzIHJlcXVpcmVkLAogCSAqIGJ1dCB0aGUgU1NEVCBhbmQgUFNEVCB0YWJsZXMgYXJlIG9wdGlvbmFsLgogCSAqLwotCXN0YXR1cyA9IGFjcGlfbnNfbG9hZF90YWJsZV9ieV90eXBlKEFDUElfVEFCTEVfRFNEVCk7CisJc3RhdHVzID0gYWNwaV9uc19sb2FkX3RhYmxlX2J5X3R5cGUoQUNQSV9UQUJMRV9JRF9EU0RUKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCiAJLyogSWdub3JlIGV4Y2VwdGlvbnMgZnJvbSB0aGVzZSAqLwogCi0JKHZvaWQpYWNwaV9uc19sb2FkX3RhYmxlX2J5X3R5cGUoQUNQSV9UQUJMRV9TU0RUKTsKLQkodm9pZClhY3BpX25zX2xvYWRfdGFibGVfYnlfdHlwZShBQ1BJX1RBQkxFX1BTRFQpOworCSh2b2lkKWFjcGlfbnNfbG9hZF90YWJsZV9ieV90eXBlKEFDUElfVEFCTEVfSURfU1NEVCk7CisJKHZvaWQpYWNwaV9uc19sb2FkX3RhYmxlX2J5X3R5cGUoQUNQSV9UQUJMRV9JRF9QU0RUKTsKIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0lOSVQsCiAJCQkgICAgICAiQUNQSSBOYW1lc3BhY2Ugc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhdCByb290ICVwXG4iLApAQCAtMzE0LDcgKzMxNSw3IEBACiAJYWNwaV9oYW5kbGUgZHVtbXk7CiAJdTMyIGxldmVsOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZGVsZXRlX3N1YnRyZWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2RlbGV0ZV9zdWJ0cmVlKTsKIAogCXBhcmVudF9oYW5kbGUgPSBzdGFydF9oYW5kbGU7CiAJY2hpbGRfaGFuZGxlID0gTlVMTDsKQEAgLTMyNSw2ICszMjYsNyBAQAogCSAqIHRvIHdoZXJlIHdlIHN0YXJ0ZWQuCiAJICovCiAJd2hpbGUgKGxldmVsID4gMCkgeworCiAJCS8qIEF0dGVtcHQgdG8gZ2V0IHRoZSBuZXh0IG9iamVjdCBpbiB0aGlzIHNjb3BlICovCiAKIAkJc3RhdHVzID0gYWNwaV9nZXRfbmV4dF9vYmplY3QoQUNQSV9UWVBFX0FOWSwgcGFyZW50X2hhbmRsZSwKQEAgLTMzNSw2ICszMzcsNyBAQAogCQkvKiBEaWQgd2UgZ2V0IGEgbmV3IG9iamVjdD8gKi8KIAogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwogCQkJLyogQ2hlY2sgaWYgdGhpcyBvYmplY3QgaGFzIGFueSBjaGlsZHJlbiAqLwogCiAJCQlpZiAoQUNQSV9TVUNDRVNTCkBAIC0zOTIsNyArMzk1LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc191bmxvYWRfbmFtZV9zcGFjZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfdW5sb2FkX25hbWVfc3BhY2UpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc25hbWVzLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zbmFtZXMuYwppbmRleCA2MzlmNjUzLi45N2I4MzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zbmFtZXMuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zbmFtZXMuYwpAQCAtNDgsMTEgKzQ4LDYgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX05BTUVTUEFDRQogQUNQSV9NT0RVTEVfTkFNRSgibnNuYW1lcyIpCiAKLS8qIExvY2FsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkCi1hY3BpX25zX2J1aWxkX2V4dGVybmFsX3BhdGgoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCi0JCQkgICAgYWNwaV9zaXplIHNpemUsIGNoYXIgKm5hbWVfYnVmZmVyKTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19idWlsZF9leHRlcm5hbF9wYXRoCkBAIC02Nyw4ICs2Miw3IEBACiAgKiBERVNDUklQVElPTjogR2VuZXJhdGUgYSBmdWxsIHBhdGhhbmFtZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkCit2b2lkCiBhY3BpX25zX2J1aWxkX2V4dGVybmFsX3BhdGgoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCiAJCQkgICAgYWNwaV9zaXplIHNpemUsIGNoYXIgKm5hbWVfYnVmZmVyKQogewpAQCAtMTM4LDcgKzEzMiw3IEBACiAJY2hhciAqbmFtZV9idWZmZXI7CiAJYWNwaV9zaXplIHNpemU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigibnNfZ2V0X2V4dGVybmFsX3BhdGhuYW1lIiwgbm9kZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfZ2V0X2V4dGVybmFsX3BhdGhuYW1lLCBub2RlKTsKIAogCS8qIENhbGN1bGF0ZSByZXF1aXJlZCBidWZmZXIgc2l6ZSBiYXNlZCBvbiBkZXB0aCBiZWxvdyByb290ICovCiAKQEAgLTE0Niw3ICsxNDAsNyBAQAogCiAJLyogQWxsb2NhdGUgYSBidWZmZXIgdG8gYmUgcmV0dXJuZWQgdG8gY2FsbGVyICovCiAKLQluYW1lX2J1ZmZlciA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplKTsKKwluYW1lX2J1ZmZlciA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemUpOwogCWlmICghbmFtZV9idWZmZXIpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkFsbG9jYXRpb24gZmFpbHVyZSIpKTsKIAkJcmV0dXJuX1BUUihOVUxMKTsKQEAgLTIxOSw3ICsyMTMsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCWFjcGlfc2l6ZSByZXF1aXJlZF9zaXplOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoIm5zX2hhbmRsZV90b19wYXRobmFtZSIsIHRhcmdldF9oYW5kbGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX2hhbmRsZV90b19wYXRobmFtZSwgdGFyZ2V0X2hhbmRsZSk7CiAKIAlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUodGFyZ2V0X2hhbmRsZSk7CiAJaWYgKCFub2RlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zb2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zb2JqZWN0LmMKaW5kZXggMTBhZTYyOS4uYWFiZTg3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc29iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNvYmplY3QuYwpAQCAtNzYsMTkgKzc2LDIxIEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbGFzdF9vYmpfZGVzYzsKIAlhY3BpX29iamVjdF90eXBlIG9iamVjdF90eXBlID0gQUNQSV9UWVBFX0FOWTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2F0dGFjaF9vYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2F0dGFjaF9vYmplY3QpOwogCiAJLyoKIAkgKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbgogCSAqLwogCWlmICghbm9kZSkgeworCiAJCS8qIEludmFsaWQgaGFuZGxlICovCiAKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk51bGwgbmFtZWRfb2JqIGhhbmRsZSIpKTsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk51bGwgTmFtZWRPYmogaGFuZGxlIikpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCiAJaWYgKCFvYmplY3QgJiYgKEFDUElfVFlQRV9BTlkgIT0gdHlwZSkpIHsKKwogCQkvKiBOdWxsIG9iamVjdCAqLwogCiAJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC05Nyw2ICs5OSw3IEBACiAJfQogCiAJaWYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShub2RlKSAhPSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgeworCiAJCS8qIE5vdCBhIG5hbWUgaGFuZGxlICovCiAKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgaGFuZGxlICVwIFslc10iLApAQCAtMTA4LDcgKzExMSw3IEBACiAKIAlpZiAobm9kZS0+b2JqZWN0ID09IG9iamVjdCkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJICAiT2JqICVwIGFscmVhZHkgaW5zdGFsbGVkIGluIG5hbWVfb2JqICVwXG4iLAorCQkJCSAgIk9iaiAlcCBhbHJlYWR5IGluc3RhbGxlZCBpbiBOYW1lT2JqICVwXG4iLAogCQkJCSAgb2JqZWN0LCBub2RlKSk7CiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTIwMSw3ICsyMDQsNyBAQAogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZGV0YWNoX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZGV0YWNoX29iamVjdCk7CiAKIAlvYmpfZGVzYyA9IG5vZGUtPm9iamVjdDsKIApAQCAtMjUyLDcgKzI1NSw3IEBACiAJCQkJCQkgICAgICAgYWNwaV9uYW1lc3BhY2Vfbm9kZQogCQkJCQkJICAgICAgICpub2RlKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJuc19nZXRfYXR0YWNoZWRfb2JqZWN0Iiwgbm9kZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfZ2V0X2F0dGFjaGVkX29iamVjdCwgbm9kZSk7CiAKIAlpZiAoIW5vZGUpIHsKIAkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiTnVsbCBOb2RlIHB0ciIpKTsKQEAgLTI4Nyw3ICsyOTAsNyBAQAogCQkJCQkJCWFjcGlfb3BlcmFuZF9vYmplY3QKIAkJCQkJCQkqb2JqX2Rlc2MpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoIm5zX2dldF9zZWNvbmRhcnlfb2JqZWN0Iiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX2dldF9zZWNvbmRhcnlfb2JqZWN0LCBvYmpfZGVzYyk7CiAKIAlpZiAoKCFvYmpfZGVzYykgfHwKIAkgICAgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNwYXJzZS5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3BhcnNlLmMKaW5kZXggMjMyYmU0My4uMTU1NTA1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3BhcnNlLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3BhcnNlLmMKQEAgLTYyLDEzICs2MiwxMyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cwotYWNwaV9uc19vbmVfY29tcGxldGVfcGFyc2UodTggcGFzc19udW1iZXIsIHN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgKiB0YWJsZV9kZXNjKQorYWNwaV9uc19vbmVfY29tcGxldGVfcGFyc2UodTggcGFzc19udW1iZXIsIHN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgKnRhYmxlX2Rlc2MpCiB7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKnBhcnNlX3Jvb3Q7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19vbmVfY29tcGxldGVfcGFyc2UiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX29uZV9jb21wbGV0ZV9wYXJzZSk7CiAKIAkvKiBDcmVhdGUgYW5kIGluaXQgYSBSb290IE5vZGUgKi8KIApAQCAtMTI0LDcgKzEyNCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfcGFyc2VfdGFibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX3BhcnNlX3RhYmxlKTsKIAogCS8qCiAJICogQU1MIFBhcnNlLCBwYXNzIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNzZWFyY2guYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNzZWFyY2guYwppbmRleCBkNjRiNzg5Li41MDBlMmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zc2VhcmNoLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3NlYXJjaC5jCkBAIC01NiwxNiArNTYsMTYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9uc19zZWFyY2hfbm9kZQorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfc2VhcmNoX29uZV9zY29wZQogICoKICAqIFBBUkFNRVRFUlM6ICB0YXJnZXRfbmFtZSAgICAgLSBBc2NpaSBBQ1BJIG5hbWUgdG8gc2VhcmNoIGZvcgotICogICAgICAgICAgICAgIE5vZGUgICAgICAgICAgICAtIFN0YXJ0aW5nIG5vZGUgd2hlcmUgc2VhcmNoIHdpbGwgYmVnaW4KKyAqICAgICAgICAgICAgICBwYXJlbnRfbm9kZSAgICAgLSBTdGFydGluZyBub2RlIHdoZXJlIHNlYXJjaCB3aWxsIGJlZ2luCiAgKiAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgIC0gT2JqZWN0IHR5cGUgdG8gbWF0Y2gKICAqICAgICAgICAgICAgICByZXR1cm5fbm9kZSAgICAgLSBXaGVyZSB0aGUgbWF0Y2hlZCBOYW1lZCBvYmogaXMgcmV0dXJuZWQKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IFNlYXJjaCBhIHNpbmdsZSBsZXZlbCBvZiB0aGUgbmFtZXNwYWNlLiAgUGVyZm9ybXMgYQorICogREVTQ1JJUFRJT046IFNlYXJjaCBhIHNpbmdsZSBsZXZlbCBvZiB0aGUgbmFtZXNwYWNlLiBQZXJmb3JtcyBhCiAgKiAgICAgICAgICAgICAgc2ltcGxlIHNlYXJjaCBvZiB0aGUgc3BlY2lmaWVkIGxldmVsLCBhbmQgZG9lcyBub3QgYWRkCiAgKiAgICAgICAgICAgICAgZW50cmllcyBvciBzZWFyY2ggcGFyZW50cy4KICAqCkBAIC03NSwzNSArNzUsNDAgQEAKICAqCiAgKiAgICAgIEFsbCBuYW1lc3BhY2Ugc2VhcmNoaW5nIGlzIGxpbmVhciBpbiB0aGlzIGltcGxlbWVudGF0aW9uLCBidXQKICAqICAgICAgY291bGQgYmUgZWFzaWx5IG1vZGlmaWVkIHRvIHN1cHBvcnQgYW55IGltcHJvdmVkIHNlYXJjaAotICogICAgICBhbGdvcml0aG0uICBIb3dldmVyLCB0aGUgbGluZWFyIHNlYXJjaCB3YXMgY2hvc2VuIGZvciBzaW1wbGljaXR5CisgKiAgICAgIGFsZ29yaXRobS4gSG93ZXZlciwgdGhlIGxpbmVhciBzZWFyY2ggd2FzIGNob3NlbiBmb3Igc2ltcGxpY2l0eQogICogICAgICBhbmQgYmVjYXVzZSB0aGUgdHJlZXMgYXJlIHNtYWxsIGFuZCB0aGUgb3RoZXIgaW50ZXJwcmV0ZXIKICAqICAgICAgZXhlY3V0aW9uIG92ZXJoZWFkIGlzIHJlbGF0aXZlbHkgaGlnaC4KICAqCisgKiAgICAgIE5vdGU6IENQVSBleGVjdXRpb24gYW5hbHlzaXMgaGFzIHNob3duIHRoYXQgdGhlIEFNTCBpbnRlcnByZXRlciBzcGVuZHMKKyAqICAgICAgYSB2ZXJ5IHNtYWxsIHBlcmNlbnRhZ2Ugb2YgaXRzIHRpbWUgc2VhcmNoaW5nIHRoZSBuYW1lc3BhY2UuIFRoZXJlZm9yZSwKKyAqICAgICAgdGhlIGxpbmVhciBzZWFyY2ggc2VlbXMgdG8gYmUgc3VmZmljaWVudCwgYXMgdGhlcmUgd291bGQgc2VlbSB0byBiZQorICogICAgICBsaXR0bGUgdmFsdWUgaW4gaW1wcm92aW5nIHRoZSBzZWFyY2guCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMKLWFjcGlfbnNfc2VhcmNoX25vZGUodTMyIHRhcmdldF9uYW1lLAotCQkgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCi0JCSAgICBhY3BpX29iamVjdF90eXBlIHR5cGUsCi0JCSAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKnJldHVybl9ub2RlKQorYWNwaV9uc19zZWFyY2hfb25lX3Njb3BlKHUzMiB0YXJnZXRfbmFtZSwKKwkJCSBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGFyZW50X25vZGUsCisJCQkgYWNwaV9vYmplY3RfdHlwZSB0eXBlLAorCQkJIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoqcmV0dXJuX25vZGUpCiB7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5leHRfbm9kZTsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX3NlYXJjaF9ub2RlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19zZWFyY2hfb25lX3Njb3BlKTsKIAogI2lmZGVmIEFDUElfREVCVUdfT1VUUFVUCiAJaWYgKEFDUElfTFZfTkFNRVMgJiBhY3BpX2RiZ19sZXZlbCkgewogCQljaGFyICpzY29wZV9uYW1lOwogCi0JCXNjb3BlX25hbWUgPSBhY3BpX25zX2dldF9leHRlcm5hbF9wYXRobmFtZShub2RlKTsKKwkJc2NvcGVfbmFtZSA9IGFjcGlfbnNfZ2V0X2V4dGVybmFsX3BhdGhuYW1lKHBhcmVudF9ub2RlKTsKIAkJaWYgKHNjb3BlX25hbWUpIHsKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsCiAJCQkJCSAgIlNlYXJjaGluZyAlcyAoJXApIEZvciBbJTQuNHNdICglcylcbiIsCi0JCQkJCSAgc2NvcGVfbmFtZSwgbm9kZSwgQUNQSV9DQVNUX1BUUihjaGFyLAotCQkJCQkJCQkJICAmdGFyZ2V0X25hbWUpLAorCQkJCQkgIHNjb3BlX25hbWUsIHBhcmVudF9ub2RlLAorCQkJCQkgIEFDUElfQ0FTVF9QVFIoY2hhciwgJnRhcmdldF9uYW1lKSwKIAkJCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUodHlwZSkpKTsKIAotCQkJQUNQSV9NRU1fRlJFRShzY29wZV9uYW1lKTsKKwkJCUFDUElfRlJFRShzY29wZV9uYW1lKTsKIAkJfQogCX0KICNlbmRpZgpAQCAtMTEyLDMyICsxMTcsMzMgQEAKIAkgKiBTZWFyY2ggZm9yIG5hbWUgYXQgdGhpcyBuYW1lc3BhY2UgbGV2ZWwsIHdoaWNoIGlzIHRvIHNheSB0aGF0IHdlCiAJICogbXVzdCBzZWFyY2ggZm9yIHRoZSBuYW1lIGFtb25nIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG9iamVjdAogCSAqLwotCW5leHRfbm9kZSA9IG5vZGUtPmNoaWxkOwotCXdoaWxlIChuZXh0X25vZGUpIHsKKwlub2RlID0gcGFyZW50X25vZGUtPmNoaWxkOworCXdoaWxlIChub2RlKSB7CisKIAkJLyogQ2hlY2sgZm9yIG1hdGNoIGFnYWluc3QgdGhlIG5hbWUgKi8KIAotCQlpZiAobmV4dF9ub2RlLT5uYW1lLmludGVnZXIgPT0gdGFyZ2V0X25hbWUpIHsKKwkJaWYgKG5vZGUtPm5hbWUuaW50ZWdlciA9PSB0YXJnZXRfbmFtZSkgeworCiAJCQkvKiBSZXNvbHZlIGEgY29udHJvbCBtZXRob2QgYWxpYXMgaWYgYW55ICovCiAKLQkJCWlmIChhY3BpX25zX2dldF90eXBlKG5leHRfbm9kZSkgPT0KKwkJCWlmIChhY3BpX25zX2dldF90eXBlKG5vZGUpID09CiAJCQkgICAgQUNQSV9UWVBFX0xPQ0FMX01FVEhPRF9BTElBUykgewotCQkJCW5leHRfbm9kZSA9CisJCQkJbm9kZSA9CiAJCQkJICAgIEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsCi0JCQkJCQkgIG5leHRfbm9kZS0+b2JqZWN0KTsKKwkJCQkJCSAgbm9kZS0+b2JqZWN0KTsKIAkJCX0KIAotCQkJLyoKLQkJCSAqIEZvdW5kIG1hdGNoaW5nIGVudHJ5LgotCQkJICovCisJCQkvKiBGb3VuZCBtYXRjaGluZyBlbnRyeSAqLworCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAogCQkJCQkgICJOYW1lIFslNC40c10gKCVzKSAlcCBmb3VuZCBpbiBzY29wZSBbJTQuNHNdICVwXG4iLAogCQkJCQkgIEFDUElfQ0FTVF9QVFIoY2hhciwgJnRhcmdldF9uYW1lKSwKLQkJCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUobmV4dF9ub2RlLT4KLQkJCQkJCQkJdHlwZSksCi0JCQkJCSAgbmV4dF9ub2RlLAotCQkJCQkgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShub2RlKSwgbm9kZSkpOworCQkJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShub2RlLT50eXBlKSwKKwkJCQkJICBub2RlLAorCQkJCQkgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShwYXJlbnRfbm9kZSksCisJCQkJCSAgcGFyZW50X25vZGUpKTsKIAotCQkJKnJldHVybl9ub2RlID0gbmV4dF9ub2RlOworCQkJKnJldHVybl9ub2RlID0gbm9kZTsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiAJCX0KIApAQCAtMTQ1LDcgKzE1MSw4IEBACiAJCSAqIFRoZSBsYXN0IGVudHJ5IGluIHRoZSBsaXN0IHBvaW50cyBiYWNrIHRvIHRoZSBwYXJlbnQsCiAJCSAqIHNvIGEgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBlbmQtb2YtbGlzdAogCQkgKi8KLQkJaWYgKG5leHRfbm9kZS0+ZmxhZ3MgJiBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUKSB7CisJCWlmIChub2RlLT5mbGFncyAmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QpIHsKKwogCQkJLyogU2VhcmNoZWQgZW50aXJlIGxpc3QsIHdlIGFyZSBkb25lICovCiAKIAkJCWJyZWFrOwpAQCAtMTUzLDcgKzE2MCw3IEBACiAKIAkJLyogRGlkbid0IG1hdGNoIG5hbWUsIG1vdmUgb24gdG8gdGhlIG5leHQgcGVlciBvYmplY3QgKi8KIAotCQluZXh0X25vZGUgPSBuZXh0X25vZGUtPnBlZXI7CisJCW5vZGUgPSBub2RlLT5wZWVyOwogCX0KIAogCS8qIFNlYXJjaGVkIGVudGlyZSBuYW1lc3BhY2UgbGV2ZWwsIG5vdCBmb3VuZCAqLwpAQCAtMTYyLDcgKzE2OSw4IEBACiAJCQkgICJOYW1lIFslNC40c10gKCVzKSBub3QgZm91bmQgaW4gc2VhcmNoIGluIHNjb3BlIFslNC40c10gJXAgZmlyc3QgY2hpbGQgJXBcbiIsCiAJCQkgIEFDUElfQ0FTVF9QVFIoY2hhciwgJnRhcmdldF9uYW1lKSwKIAkJCSAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKHR5cGUpLAotCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSksIG5vZGUsIG5vZGUtPmNoaWxkKSk7CisJCQkgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShwYXJlbnRfbm9kZSksIHBhcmVudF9ub2RlLAorCQkJICBwYXJlbnRfbm9kZS0+Y2hpbGQpKTsKIAogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT1RfRk9VTkQpOwogfQpAQCAtMTc5LDE0ICsxODcsMTQgQEAKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogQ2FsbGVkIHdoZW4gYSBuYW1lIGhhcyBub3QgYmVlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBuYW1lc3BhY2UKLSAqICAgICAgICAgICAgICBsZXZlbC4gIEJlZm9yZSBhZGRpbmcgaXQgb3IgZ2l2aW5nIHVwLCBBQ1BJIHNjb3BlIHJ1bGVzIHJlcXVpcmUKKyAqICAgICAgICAgICAgICBsZXZlbC4gQmVmb3JlIGFkZGluZyBpdCBvciBnaXZpbmcgdXAsIEFDUEkgc2NvcGUgcnVsZXMgcmVxdWlyZQogICogICAgICAgICAgICAgIHNlYXJjaGluZyBlbmNsb3Npbmcgc2NvcGVzIGluIGNhc2VzIGlkZW50aWZpZWQgYnkgYWNwaV9uc19sb2NhbCgpLgogICoKICAqICAgICAgICAgICAgICAiQSBuYW1lIGlzIGxvY2F0ZWQgYnkgZmluZGluZyB0aGUgbWF0Y2hpbmcgbmFtZSBpbiB0aGUgY3VycmVudAogICogICAgICAgICAgICAgIG5hbWUgc3BhY2UsIGFuZCB0aGVuIGluIHRoZSBwYXJlbnQgbmFtZSBzcGFjZS4gSWYgdGhlIHBhcmVudAogICogICAgICAgICAgICAgIG5hbWUgc3BhY2UgZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMKICAqICAgICAgICAgICAgICByZWN1cnNpdmVseSB1bnRpbCBlaXRoZXIgdGhlIG5hbWUgaXMgZm91bmQgb3IgdGhlIG5hbWUgc3BhY2UKLSAqICAgICAgICAgICAgICBkb2VzIG5vdCBoYXZlIGEgcGFyZW50ICh0aGUgcm9vdCBvZiB0aGUgbmFtZSBzcGFjZSkuICBUaGlzCisgKiAgICAgICAgICAgICAgZG9lcyBub3QgaGF2ZSBhIHBhcmVudCAodGhlIHJvb3Qgb2YgdGhlIG5hbWUgc3BhY2UpLiBUaGlzCiAgKiAgICAgICAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIG5hbWUgaXMgbm90IGZvdW5kIiAoRnJvbSBBQ1BJIFNwZWNpZmljYXRpb24sCiAgKiAgICAgICAgICAgICAgc2VjdGlvbiA1LjMpCiAgKgpAQCAtMjAxLDcgKzIwOSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX3NlYXJjaF9wYXJlbnRfdHJlZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfc2VhcmNoX3BhcmVudF90cmVlKTsKIAogCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSk7CiAKQEAgLTIzNSwyMCArMjQzLDE5IEBACiAJICovCiAJd2hpbGUgKHBhcmVudF9ub2RlKSB7CiAJCS8qCi0JCSAqIFNlYXJjaCBwYXJlbnQgc2NvcGUuICBVc2UgVFlQRV9BTlkgYmVjYXVzZSB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZQorCQkgKiBTZWFyY2ggcGFyZW50IHNjb3BlLiBVc2UgVFlQRV9BTlkgYmVjYXVzZSB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZQogCQkgKiBvYmplY3QgdHlwZSBhdCB0aGlzIHBvaW50LCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGV4aXN0ZW5jZSBvZgotCQkgKiB0aGUgYWN0dWFsIG5hbWUgd2UgYXJlIHNlYXJjaGluZyBmb3IuICBUeXBlY2hlY2tpbmcgY29tZXMgbGF0ZXIuCisJCSAqIHRoZSBhY3R1YWwgbmFtZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gVHlwZWNoZWNraW5nIGNvbWVzIGxhdGVyLgogCQkgKi8KLQkJc3RhdHVzID0gYWNwaV9uc19zZWFyY2hfbm9kZSh0YXJnZXRfbmFtZSwgcGFyZW50X25vZGUsCisJCXN0YXR1cyA9CisJCSAgICBhY3BpX25zX3NlYXJjaF9vbmVfc2NvcGUodGFyZ2V0X25hbWUsIHBhcmVudF9ub2RlLAogCQkJCQkgICAgIEFDUElfVFlQRV9BTlksIHJldHVybl9ub2RlKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCi0JCS8qCi0JCSAqIE5vdCBmb3VuZCBoZXJlLCBnbyB1cCBhbm90aGVyIGxldmVsCi0JCSAqICh1bnRpbCB3ZSByZWFjaCB0aGUgcm9vdCkKLQkJICovCisJCS8qIE5vdCBmb3VuZCBoZXJlLCBnbyB1cCBhbm90aGVyIGxldmVsICh1bnRpbCB3ZSByZWFjaCB0aGUgcm9vdCkgKi8KKwogCQlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHBhcmVudF9ub2RlKTsKIAl9CiAKQEAgLTI3Myw3ICsyODAsNyBAQAogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBTZWFyY2ggZm9yIGEgbmFtZSBzZWdtZW50IGluIGEgc2luZ2xlIG5hbWVzcGFjZSBsZXZlbCwKLSAqICAgICAgICAgICAgICBvcHRpb25hbGx5IGFkZGluZyBpdCBpZiBpdCBpcyBub3QgZm91bmQuICBJZiB0aGUgcGFzc2VkCisgKiAgICAgICAgICAgICAgb3B0aW9uYWxseSBhZGRpbmcgaXQgaWYgaXQgaXMgbm90IGZvdW5kLiBJZiB0aGUgcGFzc2VkCiAgKiAgICAgICAgICAgICAgVHlwZSBpcyBub3QgQW55IGFuZCB0aGUgdHlwZSBwcmV2aW91c2x5IHN0b3JlZCBpbiB0aGUKICAqICAgICAgICAgICAgICBlbnRyeSB3YXMgQW55IChpLmUuIHVua25vd24pLCB1cGRhdGUgdGhlIHN0b3JlZCB0eXBlLgogICoKQEAgLTI5MywyOSArMzAwLDQ2IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpuZXdfbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX3NlYXJjaF9hbmRfZW50ZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX3NlYXJjaF9hbmRfZW50ZXIpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIAogCWlmICghbm9kZSB8fCAhdGFyZ2V0X25hbWUgfHwgIXJldHVybl9ub2RlKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIk51bGwgcGFyYW06IE5vZGUgJXAgTmFtZSAlWCByZXR1cm5fbm9kZSAlcCIsCisJCQkgICAgIk51bGwgcGFyYW1ldGVyOiBOb2RlICVwIE5hbWUgJVggUmV0dXJuTm9kZSAlcCIsCiAJCQkgICAgbm9kZSwgdGFyZ2V0X25hbWUsIHJldHVybl9ub2RlKSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKiBOYW1lIG11c3QgY29uc2lzdCBvZiBwcmludGFibGUgY2hhcmFjdGVycyAqLwotCisJLyoKKwkgKiBOYW1lIG11c3QgY29uc2lzdCBvZiB2YWxpZCBBQ1BJIGNoYXJhY3RlcnMuIFdlIHdpbGwgcmVwYWlyIHRoZSBuYW1lIGlmCisJICogbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhYm9ydCBiZWNhdXNlIG9mIHRoaXMsIGJ1dCB3ZSB3YW50CisJICogYWxsIG5hbWVzcGFjZSBuYW1lcyB0byBiZSBwcmludGFibGUuIEEgd2FybmluZyBtZXNzYWdlIGlzIGFwcHJvcHJpYXRlLgorCSAqCisJICogVGhpcyBpc3N1ZSBjYW1lIHVwIGJlY2F1c2UgdGhlcmUgYXJlIGluIGZhY3QgbWFjaGluZXMgdGhhdCBleGhpYml0CisJICogdGhpcyBwcm9ibGVtLCBhbmQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGVuYWJsZSBBQ1BJIHN1cHBvcnQgZm9yIHRoZW0sCisJICogZXZlbiB0aG91Z2ggdGhlcmUgYXJlIGEgZmV3IGJhZCBuYW1lcy4KKwkgKi8KIAlpZiAoIWFjcGlfdXRfdmFsaWRfYWNwaV9uYW1lKHRhcmdldF9uYW1lKSkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQmFkIGNoYXJhY3RlciBpbiBBQ1BJIE5hbWU6ICVYIiwKLQkJCSAgICB0YXJnZXRfbmFtZSkpOwotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX0NIQVJBQ1RFUik7CisJCXRhcmdldF9uYW1lID0gYWNwaV91dF9yZXBhaXJfbmFtZSh0YXJnZXRfbmFtZSk7CisKKwkJLyogUmVwb3J0IHdhcm5pbmcgb25seSBpZiBpbiBzdHJpY3QgbW9kZSBvciBkZWJ1ZyBtb2RlICovCisKKwkJaWYgKCFhY3BpX2dibF9lbmFibGVfaW50ZXJwcmV0ZXJfc2xhY2spIHsKKwkJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCQkgICAgICAiRm91bmQgYmFkIGNoYXJhY3RlcihzKSBpbiBuYW1lLCByZXBhaXJlZDogWyU0LjRzXVxuIiwKKwkJCQkgICAgICBBQ1BJX0NBU1RfUFRSKGNoYXIsICZ0YXJnZXRfbmFtZSkpKTsKKwkJfSBlbHNlIHsKKwkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKKwkJCQkJICAiRm91bmQgYmFkIGNoYXJhY3RlcihzKSBpbiBuYW1lLCByZXBhaXJlZDogWyU0LjRzXVxuIiwKKwkJCQkJICBBQ1BJX0NBU1RfUFRSKGNoYXIsICZ0YXJnZXRfbmFtZSkpKTsKKwkJfQogCX0KIAogCS8qIFRyeSB0byBmaW5kIHRoZSBuYW1lIGluIHRoZSBuYW1lc3BhY2UgbGV2ZWwgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIgKi8KIAogCSpyZXR1cm5fbm9kZSA9IEFDUElfRU5UUllfTk9UX0ZPVU5EOwotCXN0YXR1cyA9IGFjcGlfbnNfc2VhcmNoX25vZGUodGFyZ2V0X25hbWUsIG5vZGUsIHR5cGUsIHJldHVybl9ub2RlKTsKKwlzdGF0dXMgPSBhY3BpX25zX3NlYXJjaF9vbmVfc2NvcGUodGFyZ2V0X25hbWUsIG5vZGUsIHR5cGUsIHJldHVybl9ub2RlKTsKIAlpZiAoc3RhdHVzICE9IEFFX05PVF9GT1VORCkgewogCQkvKgogCQkgKiBJZiB3ZSBmb3VuZCBpdCBBTkQgdGhlIHJlcXVlc3Qgc3BlY2lmaWVzIHRoYXQgYSBmaW5kIGlzIGFuIGVycm9yLApAQCAtMzI1LDE4ICszNDksMTYgQEAKIAkJCXN0YXR1cyA9IEFFX0FMUkVBRFlfRVhJU1RTOwogCQl9CiAKLQkJLyoKLQkJICogRWl0aGVyIGZvdW5kIGl0IG9yIHRoZXJlIHdhcyBhbiBlcnJvcgotCQkgKiAtLSBmaW5pc2hlZCBlaXRoZXIgd2F5Ci0JCSAqLworCQkvKiBFaXRoZXIgZm91bmQgaXQgb3IgdGhlcmUgd2FzIGFuIGVycm9yOiBmaW5pc2hlZCBlaXRoZXIgd2F5ICovCisKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCiAJLyoKLQkgKiBUaGUgbmFtZSB3YXMgbm90IGZvdW5kLiAgSWYgd2UgYXJlIE5PVCBwZXJmb3JtaW5nIHRoZSBmaXJzdCBwYXNzCisJICogVGhlIG5hbWUgd2FzIG5vdCBmb3VuZC4gSWYgd2UgYXJlIE5PVCBwZXJmb3JtaW5nIHRoZSBmaXJzdCBwYXNzCiAJICogKG5hbWUgZW50cnkpIG9mIGxvYWRpbmcgdGhlIG5hbWVzcGFjZSwgc2VhcmNoIHRoZSBwYXJlbnQgdHJlZSAoYWxsIHRoZQogCSAqIHdheSB0byB0aGUgcm9vdCBpZiBuZWNlc3NhcnkuKSBXZSBkb24ndCB3YW50IHRvIHBlcmZvcm0gdGhlIHBhcmVudAotCSAqIHNlYXJjaCB3aGVuIHRoZSBuYW1lc3BhY2UgaXMgYWN0dWFsbHkgYmVpbmcgbG9hZGVkLiAgV2Ugd2FudCB0byBwZXJmb3JtCisJICogc2VhcmNoIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBhY3R1YWxseSBiZWluZyBsb2FkZWQuIFdlIHdhbnQgdG8gcGVyZm9ybQogCSAqIHRoZSBzZWFyY2ggd2hlbiBuYW1lc3BhY2UgcmVmZXJlbmNlcyBhcmUgYmVpbmcgcmVzb2x2ZWQgKGxvYWQgcGFzcyAyKQogCSAqIGFuZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBwaGFzZS4KIAkgKi8KQEAgLTM1NCw5ICszNzYsOCBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiBJbiBleGVjdXRlIG1vZGUsIGp1c3Qgc2VhcmNoLCBuZXZlciBhZGQgbmFtZXMuICBFeGl0IG5vdy4KLQkgKi8KKwkvKiBJbiBleGVjdXRlIG1vZGUsIGp1c3Qgc2VhcmNoLCBuZXZlciBhZGQgbmFtZXMuIEV4aXQgbm93ICovCisKIAlpZiAoaW50ZXJwcmV0ZXJfbW9kZSA9PSBBQ1BJX0lNT0RFX0VYRUNVVEUpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKIAkJCQkgICIlNC40cyBOb3QgZm91bmQgaW4gJXAgW05vdCBhZGRpbmddXG4iLApAQCAtMzcxLDExICszOTIsMTggQEAKIAlpZiAoIW5ld19ub2RlKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KKyNpZmRlZiBBQ1BJX0FTTF9DT01QSUxFUgorCS8qCisJICogTm9kZSBpcyBhbiBvYmplY3QgZGVmaW5lZCBieSBhbiBFeHRlcm5hbCgpIHN0YXRlbWVudAorCSAqLworCWlmIChmbGFncyAmIEFDUElfTlNfRVhURVJOQUwpIHsKKwkJbmV3X25vZGUtPmZsYWdzIHw9IEFOT0JKX0lTX0VYVEVSTkFMOworCX0KKyNlbmRpZgogCiAJLyogSW5zdGFsbCB0aGUgbmV3IG9iamVjdCBpbnRvIHRoZSBwYXJlbnQncyBsaXN0IG9mIGNoaWxkcmVuICovCiAKIAlhY3BpX25zX2luc3RhbGxfbm9kZSh3YWxrX3N0YXRlLCBub2RlLCBuZXdfbm9kZSwgdHlwZSk7CiAJKnJldHVybl9ub2RlID0gbmV3X25vZGU7Ci0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zdXRpbHMuYwppbmRleCAzZTdjYWQ1Li5hYTRlNzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zdXRpbHMuYwpAQCAtNzgsMTUgKzc4LDE3IEBACiAJCSAgICAgY2hhciAqaW50ZXJuYWxfbmFtZSwgYWNwaV9zdGF0dXMgbG9va3VwX3N0YXR1cykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdTMyIGJhZF9uYW1lOwogCWNoYXIgKm5hbWUgPSBOVUxMOwogCi0JYWNwaV91dF9yZXBvcnRfZXJyb3IobW9kdWxlX25hbWUsIGxpbmVfbnVtYmVyKTsKKwlhY3BpX29zX3ByaW50ZigiQUNQSSBFcnJvciAoJXMtJTA0ZCk6ICIsIG1vZHVsZV9uYW1lLCBsaW5lX251bWJlcik7CiAKIAlpZiAobG9va3VwX3N0YXR1cyA9PSBBRV9CQURfQ0hBUkFDVEVSKSB7CisKIAkJLyogVGhlcmUgaXMgYSBub24tYXNjaWkgY2hhcmFjdGVyIGluIHRoZSBuYW1lICovCiAKLQkJYWNwaV9vc19wcmludGYoIlsweCU0LjRYXSAoTk9OLUFTQ0lJKSIsCi0JCQkgICAgICAgKihBQ1BJX0NBU1RfUFRSKHUzMiwgaW50ZXJuYWxfbmFtZSkpKTsKKwkJQUNQSV9NT1ZFXzMyX1RPXzMyKCZiYWRfbmFtZSwgaW50ZXJuYWxfbmFtZSk7CisJCWFjcGlfb3NfcHJpbnRmKCJbMHglNC40WF0gKE5PTi1BU0NJSSkiLCBiYWRfbmFtZSk7CiAJfSBlbHNlIHsKIAkJLyogQ29udmVydCBwYXRoIHRvIGV4dGVybmFsIGZvcm1hdCAqLwogCkBAIC0xMDIsNyArMTA0LDcgQEAKIAkJfQogCiAJCWlmIChuYW1lKSB7Ci0JCQlBQ1BJX01FTV9GUkVFKG5hbWUpOworCQkJQUNQSV9GUkVFKG5hbWUpOwogCQl9CiAJfQogCkBAIC0xMzcsMTEgKzEzOSwxMiBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSA9IHByZWZpeF9ub2RlOwogCi0JYWNwaV91dF9yZXBvcnRfZXJyb3IobW9kdWxlX25hbWUsIGxpbmVfbnVtYmVyKTsKKwlhY3BpX29zX3ByaW50ZigiQUNQSSBFcnJvciAoJXMtJTA0ZCk6ICIsIG1vZHVsZV9uYW1lLCBsaW5lX251bWJlcik7CiAKIAlpZiAocGF0aCkgewotCQlzdGF0dXMgPSBhY3BpX25zX2dldF9ub2RlX2J5X3BhdGgocGF0aCwgcHJlZml4X25vZGUsCi0JCQkJCQkgIEFDUElfTlNfTk9fVVBTRUFSQ0gsICZub2RlKTsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfbnNfZ2V0X25vZGUocHJlZml4X25vZGUsIHBhdGgsIEFDUElfTlNfTk9fVVBTRUFSQ0gsCisJCQkJICAgICAmbm9kZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJYWNwaV9vc19wcmludGYoIltDb3VsZCBub3QgZ2V0IG5vZGUgYnkgcGF0aG5hbWVdIik7CiAJCX0KQEAgLTE4NSw3ICsxODgsNyBAQAogCQl9CiAKIAkJYWNwaV9vc19wcmludGYoIlslc10gKE5vZGUgJXApIiwgKGNoYXIgKilidWZmZXIucG9pbnRlciwgbm9kZSk7Ci0JCUFDUElfTUVNX0ZSRUUoYnVmZmVyLnBvaW50ZXIpOworCQlBQ1BJX0ZSRUUoYnVmZmVyLnBvaW50ZXIpOwogCX0KIH0KIApAQCAtMjM5LDcgKzI0Miw3IEBACiAKIGFjcGlfb2JqZWN0X3R5cGUgYWNwaV9uc19nZXRfdHlwZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqIG5vZGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZ2V0X3R5cGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2dldF90eXBlKTsKIAogCWlmICghbm9kZSkgewogCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICJOdWxsIE5vZGUgcGFyYW1ldGVyIikpOwpAQCAtMjY0LDkgKzI2NywxMCBAQAogCiB1MzIgYWNwaV9uc19sb2NhbChhY3BpX29iamVjdF90eXBlIHR5cGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfbG9jYWwiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2xvY2FsKTsKIAogCWlmICghYWNwaV91dF92YWxpZF9vYmplY3RfdHlwZSh0eXBlKSkgeworCiAJCS8qIFR5cGUgY29kZSBvdXQgb2YgcmFuZ2UgICovCiAKIAkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiSW52YWxpZCBPYmplY3QgVHlwZSAlWCIsIHR5cGUpKTsKQEAgLTM2Myw3ICszNjcsNyBAQAogCWNoYXIgKnJlc3VsdCA9IE5VTEw7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfYnVpbGRfaW50ZXJuYWxfbmFtZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfYnVpbGRfaW50ZXJuYWxfbmFtZSk7CiAKIAkvKiBTZXR1cCB0aGUgY29ycmVjdCBwcmVmaXhlcywgY291bnRzLCBhbmQgcG9pbnRlcnMgKi8KIApAQCAtNDExLDYgKzQxNSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05BTUVfU0laRTsgaSsrKSB7CiAJCQlpZiAoYWNwaV9uc192YWxpZF9wYXRoX3NlcGFyYXRvcigqZXh0ZXJuYWxfbmFtZSkgfHwKIAkJCSAgICAoKmV4dGVybmFsX25hbWUgPT0gMCkpIHsKKwogCQkJCS8qIFBhZCB0aGUgc2VnbWVudCB3aXRoIHVuZGVyc2NvcmUocykgaWYgc2VnbWVudCBpcyBzaG9ydCAqLwogCiAJCQkJcmVzdWx0W2ldID0gJ18nOwpAQCAtNDczLDcgKzQ3OCw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXN0cmluZ19pbmZvIGluZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfaW50ZXJuYWxpemVfbmFtZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfaW50ZXJuYWxpemVfbmFtZSk7CiAKIAlpZiAoKCFleHRlcm5hbF9uYW1lKSB8fCAoKmV4dGVybmFsX25hbWUgPT0gMCkgfHwgKCFjb252ZXJ0ZWRfbmFtZSkpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwpAQCAtNDg2LDcgKzQ5MSw3IEBACiAKIAkvKiBXZSBuZWVkIGEgc2VnbWVudCB0byBzdG9yZSB0aGUgaW50ZXJuYWwgIG5hbWUgKi8KIAotCWludGVybmFsX25hbWUgPSBBQ1BJX01FTV9DQUxMT0NBVEUoaW5mby5sZW5ndGgpOworCWludGVybmFsX25hbWUgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChpbmZvLmxlbmd0aCk7CiAJaWYgKCFpbnRlcm5hbF9uYW1lKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KQEAgLTQ5Niw3ICs1MDEsNyBAQAogCWluZm8uaW50ZXJuYWxfbmFtZSA9IGludGVybmFsX25hbWU7CiAJc3RhdHVzID0gYWNwaV9uc19idWlsZF9pbnRlcm5hbF9uYW1lKCZpbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9NRU1fRlJFRShpbnRlcm5hbF9uYW1lKTsKKwkJQUNQSV9GUkVFKGludGVybmFsX25hbWUpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKQEAgLTUzMyw3ICs1MzgsNyBAQAogCWFjcGlfbmF0aXZlX3VpbnQgaSA9IDA7CiAJYWNwaV9uYXRpdmVfdWludCBqID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2V4dGVybmFsaXplX25hbWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2V4dGVybmFsaXplX25hbWUpOwogCiAJaWYgKCFpbnRlcm5hbF9uYW1lX2xlbmd0aCB8fCAhaW50ZXJuYWxfbmFtZSB8fCAhY29udmVydGVkX25hbWUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwpAQCAtNjI4LDcgKzYzMyw3IEBACiAJLyoKIAkgKiBCdWlsZCBjb252ZXJ0ZWRfbmFtZQogCSAqLwotCSpjb252ZXJ0ZWRfbmFtZSA9IEFDUElfTUVNX0NBTExPQ0FURShyZXF1aXJlZF9sZW5ndGgpOworCSpjb252ZXJ0ZWRfbmFtZSA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHJlcXVpcmVkX2xlbmd0aCk7CiAJaWYgKCEoKmNvbnZlcnRlZF9uYW1lKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CkBAIC02ODEsMTMgKzY4Niw5IEBACiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCiAJLyoKLQkgKiBTaW1wbGUgaW1wbGVtZW50YXRpb24uCisJICogU2ltcGxlIGltcGxlbWVudGF0aW9uCiAJICovCi0JaWYgKCFoYW5kbGUpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlpZiAoaGFuZGxlID09IEFDUElfUk9PVF9PQkpFQ1QpIHsKKwlpZiAoKCFoYW5kbGUpIHx8IChoYW5kbGUgPT0gQUNQSV9ST09UX09CSkVDVCkpIHsKIAkJcmV0dXJuIChhY3BpX2dibF9yb290X25vZGUpOwogCX0KIApAQCAtNjk3LDcgKzY5OCw3IEBACiAJCXJldHVybiAoTlVMTCk7CiAJfQogCi0JcmV0dXJuICgoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKiloYW5kbGUpOworCXJldHVybiAoQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSwgaGFuZGxlKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03NTIsNyArNzUzLDcgQEAKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX3Rlcm1pbmF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfdGVybWluYXRlKTsKIAogCS8qCiAJICogMSkgRnJlZSB0aGUgZW50aXJlIG5hbWVzcGFjZSAtLSBhbGwgbm9kZXMgYW5kIG9iamVjdHMKQEAgLTc5Miw5ICs3OTMsMTAgQEAKIAogdTMyIGFjcGlfbnNfb3BlbnNfc2NvcGUoYWNwaV9vYmplY3RfdHlwZSB0eXBlKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKCJuc19vcGVuc19zY29wZSIsIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZSh0eXBlKSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIobnNfb3BlbnNfc2NvcGUsIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZSh0eXBlKSk7CiAKIAlpZiAoIWFjcGlfdXRfdmFsaWRfb2JqZWN0X3R5cGUodHlwZSkpIHsKKwogCQkvKiB0eXBlIGNvZGUgb3V0IG9mIHJhbmdlICAqLwogCiAJCUFDUElfV0FSTklORygoQUVfSU5GTywgIkludmFsaWQgT2JqZWN0IFR5cGUgJVgiLCB0eXBlKSk7CkBAIC04MDYsMTIgKzgwOCwxMiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2dldF9ub2RlX2J5X3BhdGgKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2dldF9ub2RlCiAgKgogICogUEFSQU1FVEVSUzogICpQYXRobmFtZSAgIC0gTmFtZSB0byBiZSBmb3VuZCwgaW4gZXh0ZXJuYWwgKEFTTCkgZm9ybWF0LiBUaGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgKGJhY2tzbGFzaCkgYW5kIF4gKGNhcmF0KSBwcmVmaXhlcywgYW5kIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAocGVyaW9kKSB0byBzZXBhcmF0ZSBzZWdtZW50cyBhcmUgc3VwcG9ydGVkLgotICogICAgICAgICAgICAgIHN0YXJ0X25vZGUgIC0gUm9vdCBvZiBzdWJ0cmVlIHRvIGJlIHNlYXJjaGVkLCBvciBOU19BTEwgZm9yIHRoZQorICogICAgICAgICAgICAgIHByZWZpeF9ub2RlICAtIFJvb3Qgb2Ygc3VidHJlZSB0byBiZSBzZWFyY2hlZCwgb3IgTlNfQUxMIGZvciB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Qgb2YgdGhlIG5hbWUgc3BhY2UuICBJZiBOYW1lIGlzIGZ1bGx5CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWQgKGZpcnN0IHM4IGlzICdcJyksIHRoZSBwYXNzZWQgdmFsdWUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFNjb3BlIHdpbGwgbm90IGJlIGFjY2Vzc2VkLgpAQCAtODI3LDIzICs4MjksMjkgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX25zX2dldF9ub2RlX2J5X3BhdGgoY2hhciAqcGF0aG5hbWUsCi0JCQkgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnN0YXJ0X25vZGUsCi0JCQkgdTMyIGZsYWdzLCBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKnJldHVybl9ub2RlKQorYWNwaV9uc19nZXRfbm9kZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcHJlZml4X25vZGUsCisJCSBjaGFyICpwYXRobmFtZSwKKwkJIHUzMiBmbGFncywgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipyZXR1cm5fbm9kZSkKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgc2NvcGVfaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JY2hhciAqaW50ZXJuYWxfcGF0aCA9IE5VTEw7CisJY2hhciAqaW50ZXJuYWxfcGF0aDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJuc19nZXRfbm9kZV9ieV9wYXRoIiwgcGF0aG5hbWUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX2dldF9ub2RlLCBwYXRobmFtZSk7CiAKLQlpZiAocGF0aG5hbWUpIHsKLQkJLyogQ29udmVydCBwYXRoIHRvIGludGVybmFsIHJlcHJlc2VudGF0aW9uICovCi0KLQkJc3RhdHVzID0gYWNwaV9uc19pbnRlcm5hbGl6ZV9uYW1lKHBhdGhuYW1lLCAmaW50ZXJuYWxfcGF0aCk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJaWYgKCFwYXRobmFtZSkgeworCQkqcmV0dXJuX25vZGUgPSBwcmVmaXhfbm9kZTsKKwkJaWYgKCFwcmVmaXhfbm9kZSkgeworCQkJKnJldHVybl9ub2RlID0gYWNwaV9nYmxfcm9vdF9ub2RlOwogCQl9CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJfQorCisJLyogQ29udmVydCBwYXRoIHRvIGludGVybmFsIHJlcHJlc2VudGF0aW9uICovCisKKwlzdGF0dXMgPSBhY3BpX25zX2ludGVybmFsaXplX25hbWUocGF0aG5hbWUsICZpbnRlcm5hbF9wYXRoKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCiAJLyogTXVzdCBsb2NrIG5hbWVzcGFjZSBkdXJpbmcgbG9va3VwICovCkBAIC04NTUsMjYgKzg2MywyMyBAQAogCiAJLyogU2V0dXAgbG9va3VwIHNjb3BlIChzZWFyY2ggc3RhcnRpbmcgcG9pbnQpICovCiAKLQlzY29wZV9pbmZvLnNjb3BlLm5vZGUgPSBzdGFydF9ub2RlOworCXNjb3BlX2luZm8uc2NvcGUubm9kZSA9IHByZWZpeF9ub2RlOwogCiAJLyogTG9va3VwIHRoZSBuYW1lIGluIHRoZSBuYW1lc3BhY2UgKi8KIAotCXN0YXR1cyA9IGFjcGlfbnNfbG9va3VwKCZzY29wZV9pbmZvLCBpbnRlcm5hbF9wYXRoLAotCQkJCUFDUElfVFlQRV9BTlksIEFDUElfSU1PREVfRVhFQ1VURSwKLQkJCQkoZmxhZ3MgfCBBQ1BJX05TX0RPTlRfT1BFTl9TQ09QRSksCi0JCQkJTlVMTCwgcmV0dXJuX25vZGUpOworCXN0YXR1cyA9IGFjcGlfbnNfbG9va3VwKCZzY29wZV9pbmZvLCBpbnRlcm5hbF9wYXRoLCBBQ1BJX1RZUEVfQU5ZLAorCQkJCUFDUElfSU1PREVfRVhFQ1VURSwKKwkJCQkoZmxhZ3MgfCBBQ1BJX05TX0RPTlRfT1BFTl9TQ09QRSksIE5VTEwsCisJCQkJcmV0dXJuX25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICIlcywgJXNcbiIsCi0JCQkJICBpbnRlcm5hbF9wYXRoLAotCQkJCSAgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpKTsKKwkJCQkgIHBhdGhuYW1lLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSkpOwogCX0KIAogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCiAgICAgICBjbGVhbnVwOgotCWlmIChpbnRlcm5hbF9wYXRoKSB7Ci0JCUFDUElfTUVNX0ZSRUUoaW50ZXJuYWxfcGF0aCk7Ci0JfQorCUFDUElfRlJFRShpbnRlcm5hbF9wYXRoKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtOTYwLDkgKzk2NSwxMCBAQAogewogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2ZpbmRfcGFyZW50X25hbWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2ZpbmRfcGFyZW50X25hbWUpOwogCiAJaWYgKGNoaWxkX25vZGUpIHsKKwogCQkvKiBWYWxpZCBlbnRyeS4gIEdldCB0aGUgcGFyZW50IE5vZGUgKi8KIAogCQlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKGNoaWxkX25vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3dhbGsuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN3YWxrLmMKaW5kZXggZmNhYjFlNy4uYzhmNmJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3dhbGsuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zd2Fsay5jCkBAIC03Niw2ICs3Niw3IEBACiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCiAJaWYgKCFjaGlsZF9ub2RlKSB7CisKIAkJLyogSXQncyByZWFsbHkgdGhlIHBhcmVudCdzIF9zY29wZV8gdGhhdCB3ZSB3YW50ICovCiAKIAkJaWYgKHBhcmVudF9ub2RlLT5jaGlsZCkgewpAQCAtOTIsNiArOTMsNyBAQAogCS8qIElmIGFueSB0eXBlIGlzIE9LLCB3ZSBhcmUgZG9uZSAqLwogCiAJaWYgKHR5cGUgPT0gQUNQSV9UWVBFX0FOWSkgeworCiAJCS8qIG5leHRfbm9kZSBpcyBOVUxMIGlmIHdlIGFyZSBhdCB0aGUgZW5kLW9mLWxpc3QgKi8KIAogCQlyZXR1cm4gKG5leHRfbm9kZSk7CkBAIC0xMDAsNiArMTAyLDcgQEAKIAkvKiBNdXN0IHNlYXJjaCBmb3IgdGhlIG5vZGUgLS0gYnV0IHdpdGhpbiB0aGlzIHNjb3BlIG9ubHkgKi8KIAogCXdoaWxlIChuZXh0X25vZGUpIHsKKwogCQkvKiBJZiB0eXBlIG1hdGNoZXMsIHdlIGFyZSBkb25lICovCiAKIAkJaWYgKG5leHRfbm9kZS0+dHlwZSA9PSB0eXBlKSB7CkBAIC0xNjEsNyArMTY0LDcgQEAKIAlhY3BpX29iamVjdF90eXBlIGNoaWxkX3R5cGU7CiAJdTMyIGxldmVsOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfd2Fsa19uYW1lc3BhY2UiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX3dhbGtfbmFtZXNwYWNlKTsKIAogCS8qIFNwZWNpYWwgY2FzZSBmb3IgdGhlIG5hbWVzcGFjZSBSb290IE5vZGUgKi8KIApAQCAtMTgyLDYgKzE4NSw3IEBACiAJICogYnViYmxlZCB1cCB0byAoYW5kIHBhc3NlZCkgdGhlIG9yaWdpbmFsIHBhcmVudCBoYW5kbGUgKHN0YXJ0X2VudHJ5KQogCSAqLwogCXdoaWxlIChsZXZlbCA+IDApIHsKKwogCQkvKiBHZXQgdGhlIG5leHQgbm9kZSBpbiB0aGlzIHNjb3BlLiAgTnVsbCBpZiBub3QgZm91bmQgKi8KIAogCQlzdGF0dXMgPSBBRV9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4ZmV2YWwuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4ZmV2YWwuYwppbmRleCBhOTVmNjM2Li42ZDliZDQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmZXZhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4ZmV2YWwuYwpAQCAtNDIsOCArNDIsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KICNpbmNsdWRlIDxhY3BpL2FjaW50ZXJwLmg+CkBAIC01MSw2ICs0OSw3IEBACiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9OQU1FU1BBQ0UKIEFDUElfTU9EVUxFX05BTUUoIm5zeGZldmFsIikKIAorI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZApAQCAtNzEsMTggKzcwLDE3IEBACiAgKiAgICAgICAgICAgICAgYmUgdmFsaWQgKG5vbi1udWxsKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIGFjcGlfc3RhdHVzCiBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChhY3BpX2hhbmRsZSBoYW5kbGUsCiAJCQkgICBhY3BpX3N0cmluZyBwYXRobmFtZSwKLQkJCSAgIHN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpleHRlcm5hbF9wYXJhbXMsCi0JCQkgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldHVybl9idWZmZXIsCisJCQkgICBzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqIGV4dGVybmFsX3BhcmFtcywKKwkJCSAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqIHJldHVybl9idWZmZXIsCiAJCQkgICBhY3BpX29iamVjdF90eXBlIHJldHVybl90eXBlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1OCBtdXN0X2ZyZWUgPSBGQUxTRTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZXZhbHVhdGVfb2JqZWN0X3R5cGVkIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZCk7CiAKIAkvKiBSZXR1cm4gYnVmZmVyIG11c3QgYmUgdmFsaWQgKi8KIApAQCAtMTEwLDYgKzEwOCw3IEBACiAJfQogCiAJaWYgKHJldHVybl9idWZmZXItPmxlbmd0aCA9PSAwKSB7CisKIAkJLyogRXJyb3IgYmVjYXVzZSBjYWxsZXIgc3BlY2lmaWNhbGx5IGFza2VkIGZvciBhIHJldHVybiB2YWx1ZSAqLwogCiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJObyByZXR1cm4gdmFsdWUiKSk7CkBAIC0xMzEsNiArMTMwLDcgQEAKIAkJICAgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShyZXR1cm5fdHlwZSkpKTsKIAogCWlmIChtdXN0X2ZyZWUpIHsKKwogCQkvKiBDYWxsZXIgdXNlZCBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgZnJlZSB0aGUgcmV0dXJuIGJ1ZmZlciAqLwogCiAJCWFjcGlfb3NfZnJlZShyZXR1cm5fYnVmZmVyLT5wb2ludGVyKTsKQEAgLTE0MCw2ICsxNDAsOCBAQAogCXJldHVybl9idWZmZXItPmxlbmd0aCA9IDA7CiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX1RZUEUpOwogfQorCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQpCiAjZW5kaWYJCQkJLyogIEFDUElfRlVUVVJFX1VTQUdFICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTYxLDcgKzE2Myw2IEBACiAgKiAgICAgICAgICAgICAgYmUgdmFsaWQgKG5vbi1udWxsKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2V2YWx1YXRlX29iamVjdChhY3BpX2hhbmRsZSBoYW5kbGUsCiAJCSAgICAgYWNwaV9zdHJpbmcgcGF0aG5hbWUsCkBAIC0xNzAsNTEgKzE3MSw2MSBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX3N0YXR1cyBzdGF0dXMyOwotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87CisJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbzsKIAlhY3BpX3NpemUgYnVmZmVyX3NwYWNlX25lZWRlZDsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZXZhbHVhdGVfb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2V2YWx1YXRlX29iamVjdCk7CiAKLQlpbmZvLm5vZGUgPSBoYW5kbGU7Ci0JaW5mby5wYXJhbWV0ZXJzID0gTlVMTDsKLQlpbmZvLnJldHVybl9vYmplY3QgPSBOVUxMOwotCWluZm8ucGFyYW1ldGVyX3R5cGUgPSBBQ1BJX1BBUkFNX0FSR1M7CisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGV2YWx1YXRpb24gaW5mb3JtYXRpb24gYmxvY2sgKi8KKworCWluZm8gPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbykpOworCWlmICghaW5mbykgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKKwl9CisKKwlpbmZvLT5wYXRobmFtZSA9IHBhdGhuYW1lOworCWluZm8tPnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOworCisJLyogQ29udmVydCBhbmQgdmFsaWRhdGUgdGhlIGRldmljZSBoYW5kbGUgKi8KKworCWluZm8tPnByZWZpeF9ub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUoaGFuZGxlKTsKKwlpZiAoIWluZm8tPnByZWZpeF9ub2RlKSB7CisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWdvdG8gY2xlYW51cDsKKwl9CiAKIAkvKgotCSAqIElmIHRoZXJlIGFyZSBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgb2JqZWN0Ci0JICogKHdoaWNoIG11c3QgYmUgYSBjb250cm9sIG1ldGhvZCksIHRoZSBleHRlcm5hbCBvYmplY3RzCi0JICogbXVzdCBiZSBjb252ZXJ0ZWQgdG8gaW50ZXJuYWwgb2JqZWN0cworCSAqIElmIHRoZXJlIGFyZSBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byBhIGNvbnRyb2wgbWV0aG9kLCB0aGUgZXh0ZXJuYWwKKwkgKiBvYmplY3RzIG11c3QgYWxsIGJlIGNvbnZlcnRlZCB0byBpbnRlcm5hbCBvYmplY3RzCiAJICovCiAJaWYgKGV4dGVybmFsX3BhcmFtcyAmJiBleHRlcm5hbF9wYXJhbXMtPmNvdW50KSB7CiAJCS8qCiAJCSAqIEFsbG9jYXRlIGEgbmV3IHBhcmFtZXRlciBibG9jayBmb3IgdGhlIGludGVybmFsIG9iamVjdHMKIAkJICogQWRkIDEgdG8gY291bnQgdG8gYWxsb3cgZm9yIG51bGwgdGVybWluYXRlZCBpbnRlcm5hbCBsaXN0CiAJCSAqLwotCQlpbmZvLnBhcmFtZXRlcnMgPSBBQ1BJX01FTV9DQUxMT0NBVEUoKChhY3BpX3NpemUpCi0JCQkJCQkgICAgICBleHRlcm5hbF9wYXJhbXMtPmNvdW50ICsKLQkJCQkJCSAgICAgIDEpICogc2l6ZW9mKHZvaWQgKikpOwotCQlpZiAoIWluZm8ucGFyYW1ldGVycykgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CisJCWluZm8tPnBhcmFtZXRlcnMgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoKGFjcGlfc2l6ZSkKKwkJCQkJCQkgZXh0ZXJuYWxfcGFyYW1zLT4KKwkJCQkJCQkgY291bnQgKworCQkJCQkJCSAxKSAqIHNpemVvZih2b2lkICopKTsKKwkJaWYgKCFpbmZvLT5wYXJhbWV0ZXJzKSB7CisJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAotCQkvKgotCQkgKiBDb252ZXJ0IGVhY2ggZXh0ZXJuYWwgb2JqZWN0IGluIHRoZSBsaXN0IHRvIGFuCi0JCSAqIGludGVybmFsIG9iamVjdAotCQkgKi8KKwkJLyogQ29udmVydCBlYWNoIGV4dGVybmFsIG9iamVjdCBpbiB0aGUgbGlzdCB0byBhbiBpbnRlcm5hbCBvYmplY3QgKi8KKwogCQlmb3IgKGkgPSAwOyBpIDwgZXh0ZXJuYWxfcGFyYW1zLT5jb3VudDsgaSsrKSB7CiAJCQlzdGF0dXMgPQogCQkJICAgIGFjcGlfdXRfY29weV9lb2JqZWN0X3RvX2lvYmplY3QoJmV4dGVybmFsX3BhcmFtcy0+CiAJCQkJCQkJICAgIHBvaW50ZXJbaV0sCi0JCQkJCQkJICAgICZpbmZvLgorCQkJCQkJCSAgICAmaW5mby0+CiAJCQkJCQkJICAgIHBhcmFtZXRlcnNbaV0pOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJYWNwaV91dF9kZWxldGVfaW50ZXJuYWxfb2JqZWN0X2xpc3QoaW5mby4KLQkJCQkJCQkJICAgIHBhcmFtZXRlcnMpOwotCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQkJCWdvdG8gY2xlYW51cDsKIAkJCX0KIAkJfQotCQlpbmZvLnBhcmFtZXRlcnNbZXh0ZXJuYWxfcGFyYW1zLT5jb3VudF0gPSBOVUxMOworCQlpbmZvLT5wYXJhbWV0ZXJzW2V4dGVybmFsX3BhcmFtcy0+Y291bnRdID0gTlVMTDsKIAl9CiAKIAkvKgpAQCAtMjI0LDQzICsyMzUsMzEgQEAKIAkgKiAzKSBWYWxpZCBoYW5kbGUKIAkgKi8KIAlpZiAoKHBhdGhuYW1lKSAmJiAoYWNwaV9uc192YWxpZF9yb290X3ByZWZpeChwYXRobmFtZVswXSkpKSB7Ci0JCS8qCi0JCSAqICBUaGUgcGF0aCBpcyBmdWxseSBxdWFsaWZpZWQsIGp1c3QgZXZhbHVhdGUgYnkgbmFtZQotCQkgKi8KLQkJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZV9ieV9uYW1lKHBhdGhuYW1lLCAmaW5mbyk7CisKKwkJLyogVGhlIHBhdGggaXMgZnVsbHkgcXVhbGlmaWVkLCBqdXN0IGV2YWx1YXRlIGJ5IG5hbWUgKi8KKworCQlpbmZvLT5wcmVmaXhfbm9kZSA9IE5VTEw7CisJCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mbyk7CiAJfSBlbHNlIGlmICghaGFuZGxlKSB7CiAJCS8qCi0JCSAqIEEgaGFuZGxlIGlzIG9wdGlvbmFsIGlmZiBhIGZ1bGx5IHF1YWxpZmllZCBwYXRobmFtZQotCQkgKiBpcyBzcGVjaWZpZWQuICBTaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgZnVsbHkKLQkJICogcXVhbGlmaWVkIG5hbWVzIGFib3ZlLCB0aGlzIGlzIGFuIGVycm9yCisJCSAqIEEgaGFuZGxlIGlzIG9wdGlvbmFsIGlmZiBhIGZ1bGx5IHF1YWxpZmllZCBwYXRobmFtZSBpcyBzcGVjaWZpZWQuCisJCSAqIFNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCBmdWxseSBxdWFsaWZpZWQgbmFtZXMgYWJvdmUsIHRoaXMgaXMKKwkJICogYW4gZXJyb3IKIAkJICovCiAJCWlmICghcGF0aG5hbWUpIHsKLQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICJCb3RoIEhhbmRsZSBhbmQgUGF0aG5hbWUgYXJlIE5VTEwiKSk7CisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCisJCQkJCSAgIkJvdGggSGFuZGxlIGFuZCBQYXRobmFtZSBhcmUgTlVMTCIpKTsKIAkJfSBlbHNlIHsKLQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICJIYW5kbGUgaXMgTlVMTCBhbmQgUGF0aG5hbWUgaXMgcmVsYXRpdmUiKSk7CisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCisJCQkJCSAgIk51bGwgSGFuZGxlIHdpdGggcmVsYXRpdmUgcGF0aG5hbWUgWyVzXSIsCisJCQkJCSAgcGF0aG5hbWUpKTsKIAkJfQogCiAJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJfSBlbHNlIHsKLQkJLyoKLQkJICogV2UgZ2V0IGhlcmUgaWYgd2UgaGF2ZSBhIGhhbmRsZSAtLSBhbmQgaWYgd2UgaGF2ZSBhCi0JCSAqIHBhdGhuYW1lIGl0IGlzIHJlbGF0aXZlLiAgVGhlIGhhbmRsZSB3aWxsIGJlIHZhbGlkYXRlZAotCQkgKiBpbiB0aGUgbG93ZXIgcHJvY2VkdXJlcwotCQkgKi8KLQkJaWYgKCFwYXRobmFtZSkgewotCQkJLyoKLQkJCSAqIFRoZSBudWxsIHBhdGhuYW1lIGNhc2UgbWVhbnMgdGhlIGhhbmRsZSBpcyBmb3IKLQkJCSAqIHRoZSBhY3R1YWwgb2JqZWN0IHRvIGJlIGV2YWx1YXRlZAotCQkJICovCi0JCQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX2J5X2hhbmRsZSgmaW5mbyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogQm90aCBhIEhhbmRsZSBhbmQgYSByZWxhdGl2ZSBQYXRobmFtZQotCQkJICovCi0JCQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX3JlbGF0aXZlKHBhdGhuYW1lLCAmaW5mbyk7Ci0JCX0KKwkJLyogV2UgaGF2ZSBhIG5hbWVzcGFjZSBhIG5vZGUgYW5kIGEgcG9zc2libGUgcmVsYXRpdmUgcGF0aCAqLworCisJCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mbyk7CiAJfQogCiAJLyoKQEAgLTI2OCwxMCArMjY3LDEwIEBACiAJICogY29weSB0aGUgcmV0dXJuIHZhbHVlIHRvIGFuIGV4dGVybmFsIG9iamVjdC4KIAkgKi8KIAlpZiAocmV0dXJuX2J1ZmZlcikgewotCQlpZiAoIWluZm8ucmV0dXJuX29iamVjdCkgeworCQlpZiAoIWluZm8tPnJldHVybl9vYmplY3QpIHsKIAkJCXJldHVybl9idWZmZXItPmxlbmd0aCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKGluZm8ucmV0dXJuX29iamVjdCkgPT0KKwkJCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUoaW5mby0+cmV0dXJuX29iamVjdCkgPT0KIAkJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgewogCQkJCS8qCiAJCQkJICogSWYgd2UgcmVjZWl2ZWQgYSBOUyBOb2RlIGFzIGEgcmV0dXJuIG9iamVjdCwgdGhpcyBtZWFucyB0aGF0CkBAIC0yODIsMTkgKzI4MSwxOSBAQAogCQkJCSAqIHN1cHBvcnQgZm9yIHZhcmlvdXMgdHlwZXMgYXQgYSBsYXRlciBkYXRlIGlmIG5lY2Vzc2FyeS4KIAkJCQkgKi8KIAkJCQlzdGF0dXMgPSBBRV9UWVBFOwotCQkJCWluZm8ucmV0dXJuX29iamVjdCA9IE5VTEw7CS8qIE5vIG5lZWQgdG8gZGVsZXRlIGEgTlMgTm9kZSAqLworCQkJCWluZm8tPnJldHVybl9vYmplY3QgPSBOVUxMOwkvKiBObyBuZWVkIHRvIGRlbGV0ZSBhIE5TIE5vZGUgKi8KIAkJCQlyZXR1cm5fYnVmZmVyLT5sZW5ndGggPSAwOwogCQkJfQogCiAJCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCQkvKgotCQkJCSAqIEZpbmQgb3V0IGhvdyBsYXJnZSBhIGJ1ZmZlciBpcyBuZWVkZWQKLQkJCQkgKiB0byBjb250YWluIHRoZSByZXR1cm5lZCBvYmplY3QKLQkJCQkgKi8KKworCQkJCS8qIEdldCB0aGUgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0ICovCisKIAkJCQlzdGF0dXMgPQotCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3Rfc2l6ZShpbmZvLnJldHVybl9vYmplY3QsCisJCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF9zaXplKGluZm8tPnJldHVybl9vYmplY3QsCiAJCQkJCQkJICAgICZidWZmZXJfc3BhY2VfbmVlZGVkKTsKIAkJCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwogCQkJCQkvKiBWYWxpZGF0ZS9BbGxvY2F0ZS9DbGVhciBjYWxsZXIgYnVmZmVyICovCiAKIAkJCQkJc3RhdHVzID0KQEAgLTMwMyw3ICszMDIsOCBAQAogCQkJCQkgICAgIGJ1ZmZlcl9zcGFjZV9uZWVkZWQpOwogCQkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQkJCS8qCi0JCQkJCQkgKiBDYWxsZXIncyBidWZmZXIgaXMgdG9vIHNtYWxsIG9yIGEgbmV3IG9uZSBjYW4ndCBiZSBhbGxvY2F0ZWQKKwkJCQkJCSAqIENhbGxlcidzIGJ1ZmZlciBpcyB0b28gc21hbGwgb3IgYSBuZXcgb25lIGNhbid0CisJCQkJCQkgKiBiZSBhbGxvY2F0ZWQKIAkJCQkJCSAqLwogCQkJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCQkJCQkgICJOZWVkZWQgYnVmZmVyIHNpemUgJVgsICVzXG4iLApAQCAtMzEyLDEyICszMTIsMTEgQEAKIAkJCQkJCQkJICBhY3BpX2Zvcm1hdF9leGNlcHRpb24KIAkJCQkJCQkJICAoc3RhdHVzKSkpOwogCQkJCQl9IGVsc2UgewotCQkJCQkJLyoKLQkJCQkJCSAqICBXZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG9iamVjdCwgYnVpbGQgaXQKLQkJCQkJCSAqLworCQkJCQkJLyogV2UgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBvYmplY3QsIGJ1aWxkIGl0ICovCisKIAkJCQkJCXN0YXR1cyA9CiAJCQkJCQkgICAgYWNwaV91dF9jb3B5X2lvYmplY3RfdG9fZW9iamVjdAotCQkJCQkJICAgIChpbmZvLnJldHVybl9vYmplY3QsCisJCQkJCQkgICAgKGluZm8tPnJldHVybl9vYmplY3QsCiAJCQkJCQkgICAgIHJldHVybl9idWZmZXIpOwogCQkJCQl9CiAJCQkJfQpAQCAtMzI1LDM1ICszMjQsMzcgQEAKIAkJfQogCX0KIAotCWlmIChpbmZvLnJldHVybl9vYmplY3QpIHsKKwlpZiAoaW5mby0+cmV0dXJuX29iamVjdCkgewogCQkvKgotCQkgKiBEZWxldGUgdGhlIGludGVybmFsIHJldHVybiBvYmplY3QuICBOT1RFOiBJbnRlcnByZXRlcgotCQkgKiBtdXN0IGJlIGxvY2tlZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbi4KKwkJICogRGVsZXRlIHRoZSBpbnRlcm5hbCByZXR1cm4gb2JqZWN0LiBOT1RFOiBJbnRlcnByZXRlciBtdXN0IGJlCisJCSAqIGxvY2tlZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbi4KIAkJICovCiAJCXN0YXR1czIgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7CiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzMikpIHsKLQkJCS8qCi0JCQkgKiBEZWxldGUgdGhlIGludGVybmFsIHJldHVybiBvYmplY3QuIChPciBhdCBsZWFzdAotCQkJICogZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYnkgb25lKQotCQkJICovCi0JCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UoaW5mby5yZXR1cm5fb2JqZWN0KTsKKworCQkJLyogUmVtb3ZlIG9uZSByZWZlcmVuY2Ugb24gdGhlIHJldHVybiBvYmplY3QgKHNob3VsZCBkZWxldGUgaXQpICovCisKKwkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShpbmZvLT5yZXR1cm5fb2JqZWN0KTsKIAkJCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwogCQl9CiAJfQogCi0JLyoKLQkgKiBGcmVlIHRoZSBpbnB1dCBwYXJhbWV0ZXIgbGlzdCAoaWYgd2UgY3JlYXRlZCBvbmUpLAotCSAqLwotCWlmIChpbmZvLnBhcmFtZXRlcnMpIHsKKyAgICAgIGNsZWFudXA6CisKKwkvKiBGcmVlIHRoZSBpbnB1dCBwYXJhbWV0ZXIgbGlzdCAoaWYgd2UgY3JlYXRlZCBvbmUpICovCisKKwlpZiAoaW5mby0+cGFyYW1ldGVycykgeworCiAJCS8qIEZyZWUgdGhlIGFsbG9jYXRlZCBwYXJhbWV0ZXIgYmxvY2sgKi8KIAotCQlhY3BpX3V0X2RlbGV0ZV9pbnRlcm5hbF9vYmplY3RfbGlzdChpbmZvLnBhcmFtZXRlcnMpOworCQlhY3BpX3V0X2RlbGV0ZV9pbnRlcm5hbF9vYmplY3RfbGlzdChpbmZvLT5wYXJhbWV0ZXJzKTsKIAl9CiAKKwlBQ1BJX0ZSRUUoaW5mbyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9ldmFsdWF0ZV9vYmplY3QpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZXZhbHVhdGVfb2JqZWN0KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTM4NCw3ICszODUsNiBAQAogICogICAgICAgICAgICAgIGZ1bmN0aW9uLCBldGMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfd2Fsa19uYW1lc3BhY2UoYWNwaV9vYmplY3RfdHlwZSB0eXBlLAogCQkgICAgYWNwaV9oYW5kbGUgc3RhcnRfb2JqZWN0LApAQCAtMzk0LDcgKzM5NCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV93YWxrX25hbWVzcGFjZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV93YWxrX25hbWVzcGFjZSk7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC00MjEsNyArNDIxLDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3dhbGtfbmFtZXNwYWNlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3dhbGtfbmFtZXNwYWNlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQzNiw3ICs0MzYsNiBAQAogICogICAgICAgICAgICAgIG9uIHRoYXQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogc3RhdGljIGFjcGlfc3RhdHVzCiBhY3BpX25zX2dldF9kZXZpY2VfY2FsbGJhY2soYWNwaV9oYW5kbGUgb2JqX2hhbmRsZSwKIAkJCSAgICB1MzIgbmVzdGluZ19sZXZlbCwKQEAgLTQ3Myw2ICs0NzIsNyBAQAogCX0KIAogCWlmICghKGZsYWdzICYgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQpKSB7CisKIAkJLyogRG9uJ3QgZXhhbWluZSBjaGlsZHJlbiBvZiB0aGUgZGV2aWNlIGlmIG5vdCBwcmVzZW50ICovCiAKIAkJcmV0dXJuIChBRV9DVFJMX0RFUFRIKTsKQEAgLTQ4OSw2ICs0ODksNyBAQAogCQl9CiAKIAkJaWYgKEFDUElfU1RSTkNNUChoaWQudmFsdWUsIGluZm8tPmhpZCwgc2l6ZW9mKGhpZC52YWx1ZSkpICE9IDApIHsKKwogCQkJLyogR2V0IHRoZSBsaXN0IG9mIENvbXBhdGlibGUgSURzICovCiAKIAkJCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9DSUQobm9kZSwgJmNpZCk7CkBAIC01MDUsMTEgKzUwNiwxMSBAQAogCQkJCQkJIHNpemVvZihzdHJ1Y3QKIAkJCQkJCQlhY3BpX2NvbXBhdGlibGVfaWQpKSAhPQogCQkJCSAgICAwKSB7Ci0JCQkJCUFDUElfTUVNX0ZSRUUoY2lkKTsKKwkJCQkJQUNQSV9GUkVFKGNpZCk7CiAJCQkJCXJldHVybiAoQUVfT0spOwogCQkJCX0KIAkJCX0KLQkJCUFDUElfTUVNX0ZSRUUoY2lkKTsKKwkJCUFDUElfRlJFRShjaWQpOwogCQl9CiAJfQogCkBAIC01NTEsNyArNTUyLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZ2V0X2RldmljZXNfaW5mbyBpbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfZGV2aWNlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfZGV2aWNlcyk7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC01NjMsOSArNTY0LDkgQEAKIAkgKiBXZSdyZSBnb2luZyB0byBjYWxsIHRoZWlyIGNhbGxiYWNrIGZyb20gT1VSIGNhbGxiYWNrLCBzbyB3ZSBuZWVkCiAJICogdG8ga25vdyB3aGF0IGl0IGlzLCBhbmQgdGhlaXIgY29udGV4dCBwYXJhbWV0ZXIuCiAJICovCisJaW5mby5oaWQgPSBISUQ7CiAJaW5mby5jb250ZXh0ID0gY29udGV4dDsKIAlpbmZvLnVzZXJfZnVuY3Rpb24gPSB1c2VyX2Z1bmN0aW9uOwotCWluZm8uaGlkID0gSElEOwogCiAJLyoKIAkgKiBMb2NrIHRoZSBuYW1lc3BhY2UgYXJvdW5kIHRoZSB3YWxrLgpAQCAtNTc4LDkgKzU3OSw4IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwKLQkJCQkJQUNQSV9ST09UX09CSkVDVCwgQUNQSV9VSU5UMzJfTUFYLAotCQkJCQlBQ1BJX05TX1dBTEtfVU5MT0NLLAorCXN0YXR1cyA9IGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKKwkJCQkJQUNQSV9VSU5UMzJfTUFYLCBBQ1BJX05TX1dBTEtfVU5MT0NLLAogCQkJCQlhY3BpX25zX2dldF9kZXZpY2VfY2FsbGJhY2ssICZpbmZvLAogCQkJCQlyZXR1cm5fdmFsdWUpOwogCkBAIC01ODgsNyArNTg4LDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9kZXZpY2VzKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9kZXZpY2VzKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTYwMyw3ICs2MDMsNiBAQAogICogREVTQ1JJUFRJT046IEF0dGFjaCBhcmJpdHJhcnkgZGF0YSBhbmQgaGFuZGxlciB0byBhIG5hbWVzcGFjZSBub2RlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2F0dGFjaF9kYXRhKGFjcGlfaGFuZGxlIG9ial9oYW5kbGUsCiAJCSBhY3BpX29iamVjdF9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmRhdGEpCkBAIC02MzcsNiArNjM2LDggQEAKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2F0dGFjaF9kYXRhKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2RldGFjaF9kYXRhCkBAIC02NDksNyArNjUwLDYgQEAKICAqIERFU0NSSVBUSU9OOiBSZW1vdmUgZGF0YSB0aGF0IHdhcyBwcmV2aW91c2x5IGF0dGFjaGVkIHRvIGEgbm9kZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9kZXRhY2hfZGF0YShhY3BpX2hhbmRsZSBvYmpfaGFuZGxlLCBhY3BpX29iamVjdF9oYW5kbGVyIGhhbmRsZXIpCiB7CkBAIC02ODIsNiArNjgyLDggQEAKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RldGFjaF9kYXRhKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF9kYXRhCkBAIC02OTUsNyArNjk3LDYgQEAKICAqIERFU0NSSVBUSU9OOiBSZXRyaWV2ZSBkYXRhIHRoYXQgd2FzIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYSBuYW1lc3BhY2Ugbm9kZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfZGF0YShhY3BpX2hhbmRsZSBvYmpfaGFuZGxlLCBhY3BpX29iamVjdF9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKipkYXRhKQogewpAQCAtNzI3LDMgKzcyOCw1IEBACiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJcmV0dXJuIChzdGF0dXMpOwogfQorCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm5hbWUuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm5hbWUuYwppbmRleCA4Y2Q4Njc1Li45NzgyMTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZuYW1lLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmbmFtZS5jCkBAIC00Miw4ICs0Miw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogCkBAIC0xMTQsOSArMTEyLDggQEAKIAkvKgogCSAqICBGaW5kIHRoZSBOb2RlIGFuZCBjb252ZXJ0IHRvIGEgaGFuZGxlCiAJICovCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9uc19nZXRfbm9kZV9ieV9wYXRoKHBhdGhuYW1lLCBwcmVmaXhfbm9kZSwgQUNQSV9OU19OT19VUFNFQVJDSCwKLQkJCQkgICAgICZub2RlKTsKKwlzdGF0dXMgPSBhY3BpX25zX2dldF9ub2RlKHByZWZpeF9ub2RlLCBwYXRobmFtZSwgQUNQSV9OU19OT19VUFNFQVJDSCwKKwkJCQkgICZub2RlKTsKIAogCSpyZXRfaGFuZGxlID0gTlVMTDsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKQEAgLTEyNiw3ICsxMjMsNyBAQAogCXJldHVybiAoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9oYW5kbGUpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2hhbmRsZSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE0Myw3ICsxNDAsNiBAQAogICogICAgICAgICAgICAgIGNvbXBsZW1lbnRhcnkgZnVuY3Rpb25zLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2dldF9uYW1lKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIG5hbWVfdHlwZSwgc3RydWN0IGFjcGlfYnVmZmVyICogYnVmZmVyKQogewpAQCAtMTYyLDYgKzE1OCw3IEBACiAJfQogCiAJaWYgKG5hbWVfdHlwZSA9PSBBQ1BJX0ZVTExfUEFUSE5BTUUpIHsKKwogCQkvKiBHZXQgdGhlIGZ1bGwgcGF0aG5hbWUgKEZyb20gdGhlIG5hbWVzcGFjZSByb290KSAqLwogCiAJCXN0YXR1cyA9IGFjcGlfbnNfaGFuZGxlX3RvX3BhdGhuYW1lKGhhbmRsZSwgYnVmZmVyKTsKQEAgLTIwMyw3ICsyMDAsNyBAQAogCXJldHVybiAoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9uYW1lKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9uYW1lKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjE5LDcgKzIxNiw2IEBACiAgKiAgICAgICAgICAgICAgY29udHJvbCBtZXRob2RzIChTdWNoIGFzIGluIHRoZSBjYXNlIG9mIGEgZGV2aWNlLikKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfb2JqZWN0X2luZm8oYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKiBidWZmZXIpCiB7CkBAIC0yNDEsNyArMjM3LDcgQEAKIAkJcmV0dXJuIChzdGF0dXMpOwogCX0KIAotCWluZm8gPSBBQ1BJX01FTV9DQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZV9pbmZvKSk7CisJaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbykpOwogCWlmICghaW5mbykgewogCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJfQpAQCAtMzQ1LDExICszNDEsMTEgQEAKIAl9CiAKICAgICAgIGNsZWFudXA6Ci0JQUNQSV9NRU1fRlJFRShpbmZvKTsKKwlBQ1BJX0ZSRUUoaW5mbyk7CiAJaWYgKGNpZF9saXN0KSB7Ci0JCUFDUElfTUVNX0ZSRUUoY2lkX2xpc3QpOworCQlBQ1BJX0ZSRUUoY2lkX2xpc3QpOwogCX0KIAlyZXR1cm4gKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9nZXRfb2JqZWN0X2luZm8pOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X29iamVjdF9pbmZvKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmb2JqLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZvYmouYwppbmRleCBhMDMzMjU5Li5hMTYzZTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZvYmouYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZvYmouYwpAQCAtNDIsOCArNDIsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KIApAQCAtMTAxLDcgKzk5LDcgQEAKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9nZXRfdHlwZSk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfdHlwZSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMTYsNyArMTE0LDYgQEAKICAqICAgICAgICAgICAgICBIYW5kbGUuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9nZXRfcGFyZW50KGFjcGlfaGFuZGxlIGhhbmRsZSwgYWNwaV9oYW5kbGUgKiByZXRfaGFuZGxlKQogewogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwpAQCAtMTYyLDcgKzE1OSw3IEBACiAJcmV0dXJuIChzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3BhcmVudCk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfcGFyZW50KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE4MSw3ICsxNzgsNiBAQAogICogICAgICAgICAgICAgIFNjb3BlIGlzIHJldHVybmVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2dldF9uZXh0X29iamVjdChhY3BpX29iamVjdF90eXBlIHR5cGUsCiAJCSAgICAgYWNwaV9oYW5kbGUgcGFyZW50LApAQCAtMjA2LDYgKzIwMiw3IEBACiAJLyogSWYgbnVsbCBoYW5kbGUsIHVzZSB0aGUgcGFyZW50ICovCiAKIAlpZiAoIWNoaWxkKSB7CisKIAkJLyogU3RhcnQgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwZWNpZmllZCBzY29wZSAqLwogCiAJCXBhcmVudF9ub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUocGFyZW50KTsKQEAgLTI0Miw0ICsyMzksNCBAQAogCXJldHVybiAoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9uZXh0X29iamVjdCk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfbmV4dF9vYmplY3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggMTNiNWZkNS4uMWJiNTU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KQEAgLTYwMCwyMyArNjAxLDQxIEBACiAJcmV0dXJuX1ZPSUQ7CiB9CiAKLWFjcGlfc3RhdHVzCi1hY3BpX29zX3F1ZXVlX2Zvcl9leGVjdXRpb24odTMyIHByaW9yaXR5LAorc3RhdGljIGludCBhY3BpX29zX2V4ZWN1dGVfdGhyZWFkKHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfb3NfZHBjICpkcGMgPSAoc3RydWN0IGFjcGlfb3NfZHBjICopY29udGV4dDsKKwlpZiAoZHBjKSB7CisJCWRwYy0+ZnVuY3Rpb24oZHBjLT5jb250ZXh0KTsKKwkJa2ZyZWUoZHBjKTsKKwl9CisJZG9fZXhpdCgwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9vc19leGVjdXRlCisgKgorICogUEFSQU1FVEVSUzogIFR5cGUgICAgICAgICAgICAgICAtIFR5cGUgb2YgdGhlIGNhbGxiYWNrCisgKiAgICAgICAgICAgICAgRnVuY3Rpb24gICAgICAgICAgIC0gRnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQKKyAqICAgICAgICAgICAgICBDb250ZXh0ICAgICAgICAgICAgLSBGdW5jdGlvbiBwYXJhbWV0ZXJzCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBEZXBlbmRpbmcgb24gdHlwZSwgZWl0aGVyIHF1ZXVlcyBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgZXhlY3V0aW9uIG9yCisgKiAgICAgICAgICAgICAgaW1tZWRpYXRlbHkgZXhlY3V0ZXMgZnVuY3Rpb24gb24gYSBzZXBhcmF0ZSB0aHJlYWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMgYWNwaV9vc19leGVjdXRlKGFjcGlfZXhlY3V0ZV90eXBlIHR5cGUsCiAJCQkgICAgYWNwaV9vc2RfZXhlY19jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnRhc2s7Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJvc19xdWV1ZV9mb3JfZXhlY3V0aW9uIik7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkgICJTY2hlZHVsaW5nIGZ1bmN0aW9uIFslcCglcCldIGZvciBkZWZlcnJlZCBleGVjdXRpb24uXG4iLAotCQkJICBmdW5jdGlvbiwgY29udGV4dCkpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAogCWlmICghZnVuY3Rpb24pCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQorCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKIAkvKgogCSAqIEFsbG9jYXRlL2luaXRpYWxpemUgRFBDIHN0cnVjdHVyZS4gIE5vdGUgdGhhdCB0aGlzIG1lbW9yeSB3aWxsIGJlCiAJICogZnJlZWQgYnkgdGhlIGNhbGxlZS4gIFRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgdHFfc3RydWN0IGxpc3QgIGluIGEKQEAgLTYyNywzMCArNjQ2LDM3IEBACiAJICogV2UgY2FuIHNhdmUgdGltZSBhbmQgY29kZSBieSBhbGxvY2F0aW5nIHRoZSBEUEMgYW5kIHRxX3N0cnVjdHMKIAkgKiBmcm9tIHRoZSBzYW1lIG1lbW9yeS4KIAkgKi8KLQotCWRwYyA9Ci0JICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX29zX2RwYykgKyBzaXplb2Yoc3RydWN0IHdvcmtfc3RydWN0KSwKLQkJICAgIEdGUF9BVE9NSUMpOworCWlmICh0eXBlID09IE9TTF9OT1RJRllfSEFORExFUikgeworCQlkcGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9vc19kcGMpLCBHRlBfS0VSTkVMKTsKKwl9IGVsc2UgeworCQlkcGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9vc19kcGMpICsKKwkJCQlzaXplb2Yoc3RydWN0IHdvcmtfc3RydWN0KSwgR0ZQX0FUT01JQyk7CisJfQogCWlmICghZHBjKQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKLQorCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwogCWRwYy0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAlkcGMtPmNvbnRleHQgPSBjb250ZXh0OwogCi0JdGFzayA9ICh2b2lkICopKGRwYyArIDEpOwotCUlOSVRfV09SSyh0YXNrLCBhY3BpX29zX2V4ZWN1dGVfZGVmZXJyZWQsICh2b2lkICopZHBjKTsKLQotCWlmICghcXVldWVfd29yayhrYWNwaWRfd3EsIHRhc2spKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiQ2FsbCB0byBxdWV1ZV93b3JrKCkgZmFpbGVkLlxuIikpOwotCQlrZnJlZShkcGMpOwotCQlzdGF0dXMgPSBBRV9FUlJPUjsKKwlpZiAodHlwZSA9PSBPU0xfTk9USUZZX0hBTkRMRVIpIHsKKwkJcCA9IGt0aHJlYWRfY3JlYXRlKGFjcGlfb3NfZXhlY3V0ZV90aHJlYWQsIGRwYywgImthY3BpZF9ub3RpZnkiKTsKKwkJaWYgKCFJU19FUlIocCkpIHsKKwkJCXdha2VfdXBfcHJvY2VzcyhwKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJCWtmcmVlKGRwYyk7CisJCX0KKwl9IGVsc2UgeworCQl0YXNrID0gKHZvaWQgKikoZHBjICsgMSk7CisJCUlOSVRfV09SSyh0YXNrLCBhY3BpX29zX2V4ZWN1dGVfZGVmZXJyZWQsICh2b2lkICopZHBjKTsKKwkJaWYgKCFxdWV1ZV93b3JrKGthY3BpZF93cSwgdGFzaykpIHsKKwkJCXN0YXR1cyA9IEFFX0VSUk9SOworCQkJa2ZyZWUoZHBjKTsKKwkJfQogCX0KLQotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uKTsKK0VYUE9SVF9TWU1CT0woYWNwaV9vc19leGVjdXRlKTsKIAogdm9pZCBhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKHZvaWQgKmNvbnRleHQpCiB7CkBAIC03NjksOSArNzk1LDYgQEAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX01VVEVYLCAiV2FpdGluZyBmb3Igc2VtYXBob3JlWyVwfCVkfCVkXVxuIiwKIAkJCSAgaGFuZGxlLCB1bml0cywgdGltZW91dCkpOwogCi0JaWYgKGluX2F0b21pYygpKQotCQl0aW1lb3V0ID0gMDsKLQogCXN3aXRjaCAodGltZW91dCkgewogCQkvKgogCQkgKiBObyBXYWl0OgpAQCAtODk2LDE0ICs5MTksNiBAQAogfQogI2VuZGlmCiAKLXUzMiBhY3BpX29zX2dldF90aHJlYWRfaWQodm9pZCkKLXsKLQlpZiAoIWluX2F0b21pYygpKQotCQlyZXR1cm4gY3VycmVudC0+cGlkOwotCi0JcmV0dXJuIDA7Ci19Ci0KIGFjcGlfc3RhdHVzIGFjcGlfb3Nfc2lnbmFsKHUzMiBmdW5jdGlvbiwgdm9pZCAqaW5mbykKIHsKIAlzd2l0Y2ggKGZ1bmN0aW9uKSB7CkBAIC0xMDUwLDEyICsxMDY1LDEyIEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfb3NfY3JlYXRlX2NhY2hlCiAgKgotICogUEFSQU1FVEVSUzogIENhY2hlTmFtZSAgICAgICAtIEFzY2lpIG5hbWUgZm9yIHRoZSBjYWNoZQotICogICAgICAgICAgICAgIE9iamVjdFNpemUgICAgICAtIFNpemUgb2YgZWFjaCBjYWNoZWQgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgTWF4RGVwdGggICAgICAgIC0gTWF4aW11bSBkZXB0aCBvZiB0aGUgY2FjaGUgKGluIG9iamVjdHMpCi0gKiAgICAgICAgICAgICAgUmV0dXJuQ2FjaGUgICAgIC0gV2hlcmUgdGhlIG5ldyBjYWNoZSBvYmplY3QgaXMgcmV0dXJuZWQKKyAqIFBBUkFNRVRFUlM6ICBuYW1lICAgICAgLSBBc2NpaSBuYW1lIGZvciB0aGUgY2FjaGUKKyAqICAgICAgICAgICAgICBzaXplICAgICAgLSBTaXplIG9mIGVhY2ggY2FjaGVkIG9iamVjdAorICogICAgICAgICAgICAgIGRlcHRoICAgICAtIE1heGltdW0gZGVwdGggb2YgdGhlIGNhY2hlIChpbiBvYmplY3RzKSA8aWdub3JlZD4KKyAqICAgICAgICAgICAgICBjYWNoZSAgICAgLSBXaGVyZSB0aGUgbmV3IGNhY2hlIG9iamVjdCBpcyByZXR1cm5lZAogICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqIFJFVFVSTjogICAgICBzdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogQ3JlYXRlIGEgY2FjaGUgb2JqZWN0CiAgKgpAQCAtMTA2NSw3ICsxMDgwLDEwIEBACiBhY3BpX29zX2NyZWF0ZV9jYWNoZShjaGFyICpuYW1lLCB1MTYgc2l6ZSwgdTE2IGRlcHRoLCBhY3BpX2NhY2hlX3QgKiogY2FjaGUpCiB7CiAJKmNhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUobmFtZSwgc2l6ZSwgMCwgMCwgTlVMTCwgTlVMTCk7Ci0JcmV0dXJuIEFFX09LOworCWlmIChjYWNoZSA9PSBOVUxMKQorCQlyZXR1cm4gQUVfRVJST1I7CisJZWxzZQorCQlyZXR1cm4gQUVfT0s7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTM0LDE2ICsxMTUyLDYzIEBACiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBHZXQgYW4gb2JqZWN0IGZyb20gdGhlIHNwZWNpZmllZCBjYWNoZS4gIElmIGNhY2hlIGlzIGVtcHR5LAotICogICAgICAgICAgICAgIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkLgorICogREVTQ1JJUFRJT046IFJldHVybiBhIHplcm8tZmlsbGVkIG9iamVjdC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB2b2lkICphY3BpX29zX2FjcXVpcmVfb2JqZWN0KGFjcGlfY2FjaGVfdCAqIGNhY2hlKQogewotCXZvaWQgKm9iamVjdCA9IGttZW1fY2FjaGVfYWxsb2MoY2FjaGUsIEdGUF9LRVJORUwpOworCXZvaWQgKm9iamVjdCA9IGttZW1fY2FjaGVfemFsbG9jKGNhY2hlLCBHRlBfS0VSTkVMKTsKIAlXQVJOX09OKCFvYmplY3QpOwogCXJldHVybiBvYmplY3Q7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9vc192YWxpZGF0ZV9pbnRlcmZhY2UKKyAqCisgKiBQQVJBTUVURVJTOiAgaW50ZXJmYWNlICAgICAgICAgICAtIFJlcXVlc3RlZCBpbnRlcmZhY2UgdG8gYmUgdmFsaWRhdGVkCisgKgorICogUkVUVVJOOiAgICAgIEFFX09LIGlmIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQsIEFFX1NVUFBPUlQgb3RoZXJ3aXNlCisgKgorICogREVTQ1JJUFRJT046IE1hdGNoIGFuIGludGVyZmFjZSBzdHJpbmcgdG8gdGhlIGludGVyZmFjZXMgc3VwcG9ydGVkIGJ5IHRoZQorICogICAgICAgICAgICAgIGhvc3QuIFN0cmluZ3Mgb3JpZ2luYXRlIGZyb20gYW4gQU1MIGNhbGwgdG8gdGhlIF9PU0kgbWV0aG9kLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlIChjaGFyICppbnRlcmZhY2UpCit7CisKKyAgICByZXR1cm4gQUVfU1VQUE9SVDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfb3NfdmFsaWRhdGVfYWRkcmVzcworICoKKyAqIFBBUkFNRVRFUlM6ICBzcGFjZV9pZCAgICAgICAgICAgICAtIEFDUEkgc3BhY2UgSUQKKyAqICAgICAgICAgICAgICBhZGRyZXNzICAgICAgICAgICAgIC0gUGh5c2ljYWwgYWRkcmVzcworICogICAgICAgICAgICAgIGxlbmd0aCAgICAgICAgICAgICAgLSBBZGRyZXNzIGxlbmd0aAorICoKKyAqIFJFVFVSTjogICAgICBBRV9PSyBpZiBhZGRyZXNzL2xlbmd0aCBpcyB2YWxpZCBmb3IgdGhlIHNwYWNlX2lkLiBPdGhlcndpc2UsCisgKiAgICAgICAgICAgICAgc2hvdWxkIHJldHVybiBBRV9BTUxfSUxMRUdBTF9BRERSRVNTLgorICoKKyAqIERFU0NSSVBUSU9OOiBWYWxpZGF0ZSBhIHN5c3RlbSBhZGRyZXNzIHZpYSB0aGUgaG9zdCBPUy4gVXNlZCB0byB2YWxpZGF0ZQorICogICAgICAgICAgICAgIHRoZSBhZGRyZXNzZXMgYWNjZXNzZWQgYnkgQU1MIG9wZXJhdGlvbiByZWdpb25zLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfb3NfdmFsaWRhdGVfYWRkcmVzcyAoCisgICAgdTggICAgICAgICAgICAgICAgICAgc3BhY2VfaWQsCisgICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzICAgYWRkcmVzcywKKyAgICBhY3BpX3NpemUgICAgICAgICAgICAgICBsZW5ndGgpCit7CisKKyAgICByZXR1cm4gQUVfT0s7Cit9CisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzYXJncy5jIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc2FyZ3MuYwppbmRleCBkZTU3M2JlLi5iZjg4ZTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzYXJncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNhcmdzLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAlhY3BpX25hdGl2ZV91aW50IGJ5dGVfY291bnQ7CiAJdTggYnl0ZV96ZXJvX21hc2sgPSAweDNGOwkvKiBEZWZhdWx0IFswOjVdICovCiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJwc19nZXRfbmV4dF9wYWNrYWdlX2xlbmd0aCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfZ2V0X25leHRfcGFja2FnZV9sZW5ndGgpOwogCiAJLyoKIAkgKiBCeXRlIDAgYml0cyBbNjo3XSBjb250YWluIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBieXRlcwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJdTggKnN0YXJ0ID0gcGFyc2VyX3N0YXRlLT5hbWw7CiAJdTMyIHBhY2thZ2VfbGVuZ3RoOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicHNfZ2V0X25leHRfcGFja2FnZV9lbmQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHBzX2dldF9uZXh0X3BhY2thZ2VfZW5kKTsKIAogCS8qIEZ1bmN0aW9uIGJlbG93IHVwZGF0ZXMgcGFyc2VyX3N0YXRlLT5BbWwgKi8KIApAQCAtMTU3LDcgKzE1Nyw3IEBACiAJdTggKnN0YXJ0ID0gcGFyc2VyX3N0YXRlLT5hbWw7CiAJdTggKmVuZCA9IHBhcnNlcl9zdGF0ZS0+YW1sOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicHNfZ2V0X25leHRfbmFtZXN0cmluZyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfZ2V0X25leHRfbmFtZXN0cmluZyk7CiAKIAkvKiBQb2ludCBwYXN0IGFueSBuYW1lc3RyaW5nIHByZWZpeCBjaGFyYWN0ZXJzIChiYWNrc2xhc2ggb3IgY2FyYXQpICovCiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSBzY29wZV9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicHNfZ2V0X25leHRfbmFtZXBhdGgiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHBzX2dldF9uZXh0X25hbWVwYXRoKTsKIAogCXBhdGggPSBhY3BpX3BzX2dldF9uZXh0X25hbWVzdHJpbmcocGFyc2VyX3N0YXRlKTsKIAlhY3BpX3BzX2luaXRfb3AoYXJnLCBBTUxfSU5UX05BTUVQQVRIX09QKTsKQEAgLTI3NSw2ICsyNzUsNyBAQAogCSAqLwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJgogCSAgICBwb3NzaWJsZV9tZXRob2RfY2FsbCAmJiAobm9kZS0+dHlwZSA9PSBBQ1BJX1RZUEVfTUVUSE9EKSkgeworCiAJCS8qIFRoaXMgbmFtZSBpcyBhY3R1YWxseSBhIGNvbnRyb2wgbWV0aG9kIGludm9jYXRpb24gKi8KIAogCQltZXRob2RfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKQEAgLTMxOSw2ICszMjAsNyBAQAogCSAqIHNvbWUgbm90X2ZvdW5kIGNhc2VzIGFyZSBhbGxvd2VkCiAJICovCiAJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpIHsKKwogCQkvKiAxKSBub3RfZm91bmQgaXMgb2sgZHVyaW5nIGxvYWQgcGFzcyAxLzIgKGFsbG93IGZvcndhcmQgcmVmZXJlbmNlcykgKi8KIAogCQlpZiAoKHdhbGtfc3RhdGUtPnBhcnNlX2ZsYWdzICYgQUNQSV9QQVJTRV9NT0RFX01BU0spICE9CkBAIC0zNTQsNiArMzU2LDcgQEAKIAogCQlpZiAoKHdhbGtfc3RhdGUtPnBhcnNlX2ZsYWdzICYgQUNQSV9QQVJTRV9NT0RFX01BU0spID09CiAJCSAgICBBQ1BJX1BBUlNFX0VYRUNVVEUpIHsKKwogCQkJLyogUmVwb3J0IGEgY29udHJvbCBtZXRob2QgZXhlY3V0aW9uIGVycm9yICovCiAKIAkJCXN0YXR1cyA9IGFjcGlfZHNfbWV0aG9kX2Vycm9yKHN0YXR1cywgd2Fsa19zdGF0ZSk7CkBAIC0zODgsNyArMzkxLDcgQEAKIAl1MTYgb3Bjb2RlOwogCXU4ICphbWwgPSBwYXJzZXJfc3RhdGUtPmFtbDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJwc19nZXRfbmV4dF9zaW1wbGVfYXJnIiwgYXJnX3R5cGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKHBzX2dldF9uZXh0X3NpbXBsZV9hcmcsIGFyZ190eXBlKTsKIAogCXN3aXRjaCAoYXJnX3R5cGUpIHsKIAljYXNlIEFSR1BfQllURURBVEE6CkBAIC00NTMsNyArNDU2LDcgQEAKIAogCWRlZmF1bHQ6CiAKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgYXJnX3R5cGUgJVgiLCBhcmdfdHlwZSkpOworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBBcmdUeXBlICVYIiwgYXJnX3R5cGUpKTsKIAkJcmV0dXJuX1ZPSUQ7CiAJfQogCkBAIC00ODQsNyArNDg3LDcgQEAKIAl1MTYgb3Bjb2RlOwogCXUzMiBuYW1lOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicHNfZ2V0X25leHRfZmllbGQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHBzX2dldF9uZXh0X2ZpZWxkKTsKIAogCS8qIERldGVybWluZSBmaWVsZCB0eXBlICovCiAKQEAgLTU5MCw3ICs1OTMsNyBAQAogCXUzMiBzdWJvcDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJwc19nZXRfbmV4dF9hcmciLCBwYXJzZXJfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHBzX2dldF9uZXh0X2FyZywgcGFyc2VyX3N0YXRlKTsKIAogCXN3aXRjaCAoYXJnX3R5cGUpIHsKIAljYXNlIEFSR1BfQllURURBVEE6CkBAIC02MjAsNiArNjIzLDcgQEAKIAljYXNlIEFSR1BfRklFTERMSVNUOgogCiAJCWlmIChwYXJzZXJfc3RhdGUtPmFtbCA8IHBhcnNlcl9zdGF0ZS0+cGtnX2VuZCkgeworCiAJCQkvKiBOb24tZW1wdHkgbGlzdCAqLwogCiAJCQl3aGlsZSAocGFyc2VyX3N0YXRlLT5hbWwgPCBwYXJzZXJfc3RhdGUtPnBrZ19lbmQpIHsKQEAgLTY0NSw2ICs2NDksNyBAQAogCWNhc2UgQVJHUF9CWVRFTElTVDoKIAogCQlpZiAocGFyc2VyX3N0YXRlLT5hbWwgPCBwYXJzZXJfc3RhdGUtPnBrZ19lbmQpIHsKKwogCQkJLyogTm9uLWVtcHR5IGxpc3QgKi8KIAogCQkJYXJnID0gYWNwaV9wc19hbGxvY19vcChBTUxfSU5UX0JZVEVMSVNUX09QKTsKQEAgLTY3Myw2ICs2NzgsNyBAQAogCQlpZiAoc3Vib3AgPT0gMCB8fAogCQkgICAgYWNwaV9wc19pc19sZWFkaW5nX2NoYXIoc3Vib3ApIHx8CiAJCSAgICBhY3BpX3BzX2lzX3ByZWZpeF9jaGFyKHN1Ym9wKSkgeworCiAJCQkvKiBudWxsX25hbWUgb3IgbmFtZV9zdHJpbmcgKi8KIAogCQkJYXJnID0gYWNwaV9wc19hbGxvY19vcChBTUxfSU5UX05BTUVQQVRIX09QKTsKQEAgLTcwMyw2ICs3MDksNyBAQAogCWNhc2UgQVJHUF9PQkpMSVNUOgogCiAJCWlmIChwYXJzZXJfc3RhdGUtPmFtbCA8IHBhcnNlcl9zdGF0ZS0+cGtnX2VuZCkgeworCiAJCQkvKiBOb24tZW1wdHkgbGlzdCBvZiB2YXJpYWJsZSBhcmd1bWVudHMsIG5vdGhpbmcgcmV0dXJuZWQgKi8KIAogCQkJd2Fsa19zdGF0ZS0+YXJnX2NvdW50ID0gQUNQSV9WQVJfQVJHUzsKQEAgLTcxMSw3ICs3MTgsNyBAQAogCiAJZGVmYXVsdDoKIAotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBhcmdfdHlwZTogJVgiLCBhcmdfdHlwZSkpOworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBBcmdUeXBlOiAlWCIsIGFyZ190eXBlKSk7CiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNsb29wLmMgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzbG9vcC5jCmluZGV4IDAwYjA3MmUuLmUxNTQxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNsb29wLmMKKysrIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc2xvb3AuYwpAQCAtODMsNyArODMsNyBAQAogCXN0cnVjdCBhY3BpX3BhcnNlX3N0YXRlICpwYXJzZXJfc3RhdGU7CiAJdTggKmFtbF9vcF9zdGFydCA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigicHNfcGFyc2VfbG9vcCIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHBzX3BhcnNlX2xvb3AsIHdhbGtfc3RhdGUpOwogCiAJaWYgKHdhbGtfc3RhdGUtPmRlc2NlbmRpbmdfY2FsbGJhY2sgPT0gTlVMTCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CkBAIC05NSw2ICs5NSw3IEBACiAjaWYgKCFkZWZpbmVkIChBQ1BJX05PX01FVEhPRF9FWEVDVVRJT04pICYmICFkZWZpbmVkIChBQ1BJX0NPTlNUQU5UX0VWQUxfT05MWSkpCiAKIAlpZiAod2Fsa19zdGF0ZS0+d2Fsa190eXBlICYgQUNQSV9XQUxLX01FVEhPRF9SRVNUQVJUKSB7CisKIAkJLyogV2UgYXJlIHJlc3RhcnRpbmcgYSBwcmVlbXB0ZWQgY29udHJvbCBtZXRob2QgKi8KIAogCQlpZiAoYWNwaV9wc19oYXNfY29tcGxldGVkX3Njb3BlKHBhcnNlcl9zdGF0ZSkpIHsKQEAgLTEyOCw3ICsxMjksNyBAQAogCiAJCQkJCX0KIAkJCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKLQkJCQkJCQkiZ2V0X3ByZWRpY2F0ZSBGYWlsZWQiKSk7CisJCQkJCQkJIkdldFByZWRpY2F0ZSBGYWlsZWQiKSk7CiAJCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQkJCX0KIApAQCAtMTQzLDYgKzE0NCw3IEBACiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLAogCQkJCQkgICJQb3BwZWQgc2NvcGUsIE9wPSVwXG4iLCBvcCkpOwogCQl9IGVsc2UgaWYgKHdhbGtfc3RhdGUtPnByZXZfb3ApIHsKKwogCQkJLyogV2Ugd2VyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIG9wICovCiAKIAkJCW9wID0gd2Fsa19zdGF0ZS0+cHJldl9vcDsKQEAgLTE1Niw2ICsxNTgsNyBAQAogCXdoaWxlICgocGFyc2VyX3N0YXRlLT5hbWwgPCBwYXJzZXJfc3RhdGUtPmFtbF9lbmQpIHx8IChvcCkpIHsKIAkJYW1sX29wX3N0YXJ0ID0gcGFyc2VyX3N0YXRlLT5hbWw7CiAJCWlmICghb3ApIHsKKwogCQkJLyogR2V0IHRoZSBuZXh0IG9wY29kZSBmcm9tIHRoZSBBTUwgc3RyZWFtICovCiAKIAkJCXdhbGtfc3RhdGUtPmFtbF9vZmZzZXQgPQpAQCAtMjEzLDYgKzIxNiw3IEBACiAJCQkvKiBDcmVhdGUgT3Agc3RydWN0dXJlIGFuZCBhcHBlbmQgdG8gcGFyZW50J3MgYXJndW1lbnQgbGlzdCAqLwogCiAJCQlpZiAod2Fsa19zdGF0ZS0+b3BfaW5mby0+ZmxhZ3MgJiBBTUxfTkFNRUQpIHsKKwogCQkJCS8qIEFsbG9jYXRlIGEgbmV3IHByZV9vcCBpZiBuZWNlc3NhcnkgKi8KIAogCQkJCWlmICghcHJlX29wKSB7CkBAIC0zNzEsNyArMzc1LDcgQEAKIAogCQkJaWYgKHdhbGtfc3RhdGUtPm9wX2luZm8pIHsKIAkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLAotCQkJCQkJICAiT3Bjb2RlICU0LjRYIFslc10gT3AgJXAgQW1sICVwIGFtbF9vZmZzZXQgJTUuNVhcbiIsCisJCQkJCQkgICJPcGNvZGUgJTQuNFggWyVzXSBPcCAlcCBBbWwgJXAgQW1sT2Zmc2V0ICU1LjVYXG4iLAogCQkJCQkJICAodTMyKSBvcC0+Y29tbW9uLmFtbF9vcGNvZGUsCiAJCQkJCQkgIHdhbGtfc3RhdGUtPm9wX2luZm8tPm5hbWUsIG9wLAogCQkJCQkJICBwYXJzZXJfc3RhdGUtPmFtbCwKQEAgLTM4OCw2ICszOTIsNyBAQAogCQkvKiBBcmUgdGhlcmUgYW55IGFyZ3VtZW50cyB0aGF0IG11c3QgYmUgcHJvY2Vzc2VkPyAqLwogCiAJCWlmICh3YWxrX3N0YXRlLT5hcmdfdHlwZXMpIHsKKwogCQkJLyogR2V0IGFyZ3VtZW50cyAqLwogCiAJCQlzd2l0Y2ggKG9wLT5jb21tb24uYW1sX29wY29kZSkgewpAQCAtNzQyLDcgKzc0NywxOSBAQAogCQkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1czIpKSB7CiAJCQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzMik7CiAJCQkJCX0KKworCQkJCQlzdGF0dXMyID0KKwkJCQkJICAgIGFjcGlfZHNfcmVzdWx0X3N0YWNrX3BvcAorCQkJCQkgICAgKHdhbGtfc3RhdGUpOworCQkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1czIpKSB7CisJCQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzMik7CisJCQkJCX0KKworCQkJCQlhY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlCisJCQkJCSAgICAoYWNwaV91dF9wb3BfZ2VuZXJpY19zdGF0ZQorCQkJCQkgICAgICgmd2Fsa19zdGF0ZS0+Y29udHJvbF9zdGF0ZSkpOwogCQkJCX0KKwogCQkJCWFjcGlfcHNfcG9wX3Njb3BlKHBhcnNlcl9zdGF0ZSwgJm9wLAogCQkJCQkJICAmd2Fsa19zdGF0ZS0+YXJnX3R5cGVzLAogCQkJCQkJICAmd2Fsa19zdGF0ZS0+YXJnX2NvdW50KTsKQEAgLTc2Miw2ICs3NzksNyBAQAogCQkJCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1czIpOwogCQkJCQl9CiAJCQkJfQorCiAJCQkJYWNwaV9wc19wb3Bfc2NvcGUocGFyc2VyX3N0YXRlLCAmb3AsCiAJCQkJCQkgICZ3YWxrX3N0YXRlLT5hcmdfdHlwZXMsCiAJCQkJCQkgICZ3YWxrX3N0YXRlLT5hcmdfY291bnQpOwpAQCAtODUzLDYgKzg3MSw3IEBACiAJCQkJfQogCiAJCQkJZWxzZSBpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkJCQkvKiBGaXJzdCBlcnJvciBpcyBtb3N0IGltcG9ydGFudCAqLwogCiAJCQkJCSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc29wY29kZS5jIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc29wY29kZS5jCmluZGV4IDExZDYzNTEuLjRiZDI1ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNvcGNvZGUuYworKysgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzb3Bjb2RlLmMKQEAgLTcyNSwxMiArNzI1LDEzIEBACiAKIGNvbnN0IHN0cnVjdCBhY3BpX29wY29kZV9pbmZvICphY3BpX3BzX2dldF9vcGNvZGVfaW5mbyh1MTYgb3Bjb2RlKQogewotCUFDUElfRlVOQ1RJT05fTkFNRSgicHNfZ2V0X29wY29kZV9pbmZvIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHBzX2dldF9vcGNvZGVfaW5mbyk7CiAKIAkvKgogCSAqIERldGVjdCBub3JtYWwgOC1iaXQgb3Bjb2RlIG9yIGV4dGVuZGVkIDE2LWJpdCBvcGNvZGUKIAkgKi8KIAlpZiAoIShvcGNvZGUgJiAweEZGMDApKSB7CisKIAkJLyogU2ltcGxlICg4LWJpdCkgb3Bjb2RlOiAwLTI1NSwgY2FuJ3QgaW5kZXggYmV5b25kIHRhYmxlICAqLwogCiAJCXJldHVybiAoJmFjcGlfZ2JsX2FtbF9vcF9pbmZvCkBAIC03MzksNiArNzQwLDcgQEAKIAogCWlmICgoKG9wY29kZSAmIDB4RkYwMCkgPT0gQU1MX0VYVEVOREVEX09QQ09ERSkgJiYKIAkgICAgKCgodTgpIG9wY29kZSkgPD0gTUFYX0VYVEVOREVEX09QQ09ERSkpIHsKKwogCQkvKiBWYWxpZCBleHRlbmRlZCAoMTYtYml0KSBvcGNvZGUgKi8KIAogCQlyZXR1cm4gKCZhY3BpX2dibF9hbWxfb3BfaW5mbwpAQCAtNzc5LDcgKzc4MSw3IEBACiAJcmV0dXJuIChvcC0+bmFtZSk7CiAKICNlbHNlCi0JcmV0dXJuICgiQUVfTk9UX0NPTkZJR1VSRUQiKTsKKwlyZXR1cm4gKCJPcGNvZGVOYW1lIHVuYXZhaWxhYmxlIik7CiAKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3BhcnNlLmMgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzcGFyc2UuYwppbmRleCBhOWYzMjI5Li43ZWUyZjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzcGFyc2UuYworKysgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzcGFyc2UuYwpAQCAtMTA2LDYgKzEwNiw3IEBACiAJb3Bjb2RlID0gKHUxNikgQUNQSV9HRVQ4KGFtbCk7CiAKIAlpZiAob3Bjb2RlID09IEFNTF9FWFRFTkRFRF9PUF9QUkVGSVgpIHsKKwogCQkvKiBFeHRlbmRlZCBvcGNvZGUsIGdldCB0aGUgc2Vjb25kIG9wY29kZSBieXRlICovCiAKIAkJYW1sKys7CkBAIC0xMzcsNyArMTM4LDcgQEAKIAljb25zdCBzdHJ1Y3QgYWNwaV9vcGNvZGVfaW5mbyAqcGFyZW50X2luZm87CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKnJlcGxhY2VtZW50X29wID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJwc19jb21wbGV0ZV90aGlzX29wIiwgb3ApOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHBzX2NvbXBsZXRlX3RoaXNfb3AsIG9wKTsKIAogCS8qIENoZWNrIGZvciBudWxsIE9wLCBjYW4gaGFwcGVuIGlmIEFNTCBjb2RlIGlzIGNvcnJ1cHQgKi8KIApAQCAtMTU4LDYgKzE1OSw3IEBACiAJaWYgKG9wLT5jb21tb24ucGFyZW50KSB7CiAJCXByZXYgPSBvcC0+Y29tbW9uLnBhcmVudC0+Y29tbW9uLnZhbHVlLmFyZzsKIAkJaWYgKCFwcmV2KSB7CisKIAkJCS8qIE5vdGhpbmcgbW9yZSB0byBkbyAqLwogCiAJCQlnb3RvIGNsZWFudXA7CkBAIC0yNDUsNiArMjQ3LDcgQEAKIAkJLyogV2UgbXVzdCB1bmxpbmsgdGhpcyBvcCBmcm9tIHRoZSBwYXJlbnQgdHJlZSAqLwogCiAJCWlmIChwcmV2ID09IG9wKSB7CisKIAkJCS8qIFRoaXMgb3AgaXMgdGhlIGZpcnN0IGluIHRoZSBsaXN0ICovCiAKIAkJCWlmIChyZXBsYWNlbWVudF9vcCkgewpAQCAtMjY1LDYgKzI2OCw3IEBACiAKIAkJZWxzZQogCQkJd2hpbGUgKHByZXYpIHsKKwogCQkJCS8qIFRyYXZlcnNlIGFsbCBzaWJsaW5ncyBpbiB0aGUgcGFyZW50J3MgYXJndW1lbnQgbGlzdCAqLwogCiAJCQkJbmV4dCA9IHByZXYtPmNvbW1vbi5uZXh0OwpAQCAtMzI5LDcgKzMzMyw3IEBACiAJc3RydWN0IGFjcGlfcGFyc2Vfc3RhdGUgKnBhcnNlcl9zdGF0ZSA9ICZ3YWxrX3N0YXRlLT5wYXJzZXJfc3RhdGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfQ1RSTF9QRU5ESU5HOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInBzX25leHRfcGFyc2Vfc3RhdGUiLCBvcCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIocHNfbmV4dF9wYXJzZV9zdGF0ZSwgb3ApOwogCiAJc3dpdGNoIChjYWxsYmFja19zdGF0dXMpIHsKIAljYXNlIEFFX0NUUkxfVEVSTUlOQVRFOgpAQCAtNDQ5LDEwICs0NTMsMTAgQEAKIAlzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKnByZXZfd2Fsa19saXN0ID0gYWNwaV9nYmxfY3VycmVudF93YWxrX2xpc3Q7CiAJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqcHJldmlvdXNfd2Fsa19zdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInBzX3BhcnNlX2FtbCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfcGFyc2VfYW1sKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCi0JCQkgICJFbnRlcmVkIHdpdGggd2Fsa19zdGF0ZT0lcCBBbWw9JXAgc2l6ZT0lWFxuIiwKKwkJCSAgIkVudGVyZWQgd2l0aCBXYWxrU3RhdGU9JXAgQW1sPSVwIHNpemU9JVhcbiIsCiAJCQkgIHdhbGtfc3RhdGUsIHdhbGtfc3RhdGUtPnBhcnNlcl9zdGF0ZS5hbWwsCiAJCQkgIHdhbGtfc3RhdGUtPnBhcnNlcl9zdGF0ZS5hbWxfc2l6ZSkpOwogCkBAIC00NjAsNiArNDY0LDcgQEAKIAogCXRocmVhZCA9IGFjcGlfdXRfY3JlYXRlX3RocmVhZF9zdGF0ZSgpOwogCWlmICghdGhyZWFkKSB7CisJCWFjcGlfZHNfZGVsZXRlX3dhbGtfc3RhdGUod2Fsa19zdGF0ZSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KIApAQCAtNTEwLDYgKzUxNSw3IEBACiAJCX0gZWxzZSBpZiAoc3RhdHVzID09IEFFX0NUUkxfVEVSTUlOQVRFKSB7CiAJCQlzdGF0dXMgPSBBRV9PSzsKIAkJfSBlbHNlIGlmICgoc3RhdHVzICE9IEFFX09LKSAmJiAod2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MpKSB7CisKIAkJCS8qIEVpdGhlciB0aGUgbWV0aG9kIHBhcnNlIG9yIGFjdHVhbCBleGVjdXRpb24gZmFpbGVkICovCiAKIAkJCUFDUElfRVJST1JfTUVUSE9EKCJNZXRob2QgcGFyc2UvZXhlY3V0aW9uIGZhaWxlZCIsCkBAIC01NTAsMjAgKzU1Niw5IEBACiAJCSAqLwogCQlpZiAoKCh3YWxrX3N0YXRlLT5wYXJzZV9mbGFncyAmIEFDUElfUEFSU0VfTU9ERV9NQVNLKSA9PQogCQkgICAgIEFDUElfUEFSU0VfRVhFQ1VURSkgfHwgKEFDUElfRkFJTFVSRShzdGF0dXMpKSkgewotCQkJaWYgKHdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjKSB7Ci0JCQkJLyogRGVjcmVtZW50IHRoZSB0aHJlYWQgY291bnQgb24gdGhlIG1ldGhvZCBwYXJzZSB0cmVlICovCi0KLQkJCQlpZiAod2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC4KLQkJCQkgICAgdGhyZWFkX2NvdW50KSB7Ci0JCQkJCXdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QuCi0JCQkJCSAgICB0aHJlYWRfY291bnQtLTsKLQkJCQl9IGVsc2UgewotCQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkJICAgICJJbnZhbGlkIHplcm8gdGhyZWFkIGNvdW50IGluIG1ldGhvZCIpKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWFjcGlfZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kKHdhbGtfc3RhdGUpOworCQkJYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2Qod2Fsa19zdGF0ZS0+CisJCQkJCQkJIG1ldGhvZF9kZXNjLAorCQkJCQkJCSB3YWxrX3N0YXRlKTsKIAkJfQogCiAJCS8qIERlbGV0ZSB0aGlzIHdhbGsgc3RhdGUgYW5kIGFsbCBsaW5rZWQgY29udHJvbCBzdGF0ZXMgKi8KQEAgLTU3Miw3ICs1NjcsNyBAQAogCQlwcmV2aW91c193YWxrX3N0YXRlID0gd2Fsa19zdGF0ZTsKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLAotCQkJCSAgInJldHVybl92YWx1ZT0lcCwgaW1wbGljaXRfdmFsdWU9JXAgU3RhdGU9JXBcbiIsCisJCQkJICAiUmV0dXJuVmFsdWU9JXAsIEltcGxpY2l0VmFsdWU9JXAgU3RhdGU9JXBcbiIsCiAJCQkJICB3YWxrX3N0YXRlLT5yZXR1cm5fZGVzYywKIAkJCQkgIHdhbGtfc3RhdGUtPmltcGxpY2l0X3JldHVybl9vYmosIHdhbGtfc3RhdGUpKTsKIApAQCAtNjMzLDEyICs2MjgsMTQgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChwcmV2aW91c193YWxrX3N0YXRlLT5yZXR1cm5fZGVzYykgeworCiAJCQkJLyogQ2FsbGVyIGRvZXNuJ3Qgd2FudCBpdCwgbXVzdCBkZWxldGUgaXQgKi8KIAogCQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShwcmV2aW91c193YWxrX3N0YXRlLT4KIAkJCQkJCQkgcmV0dXJuX2Rlc2MpOwogCQkJfQogCQkJaWYgKHByZXZpb3VzX3dhbGtfc3RhdGUtPmltcGxpY2l0X3JldHVybl9vYmopIHsKKwogCQkJCS8qIENhbGxlciBkb2Vzbid0IHdhbnQgaXQsIG11c3QgZGVsZXRlIGl0ICovCiAKIAkJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UocHJldmlvdXNfd2Fsa19zdGF0ZS0+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzc2NvcGUuYyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNzY29wZS5jCmluZGV4IGJjNjA0N2MuLmEzZTAzMTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzc2NvcGUuYworKysgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzc2NvcGUuYwpAQCAtMTA2LDE0ICsxMDYsMTQgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnNjb3BlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInBzX2luaXRfc2NvcGUiLCByb290X29wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihwc19pbml0X3Njb3BlLCByb290X29wKTsKIAogCXNjb3BlID0gYWNwaV91dF9jcmVhdGVfZ2VuZXJpY19zdGF0ZSgpOwogCWlmICghc2NvcGUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQogCi0Jc2NvcGUtPmNvbW1vbi5kYXRhX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9SUFNDT1BFOworCXNjb3BlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfUlBTQ09QRTsKIAlzY29wZS0+cGFyc2Vfc2NvcGUub3AgPSByb290X29wOwogCXNjb3BlLT5wYXJzZV9zY29wZS5hcmdfY291bnQgPSBBQ1BJX1ZBUl9BUkdTOwogCXNjb3BlLT5wYXJzZV9zY29wZS5hcmdfZW5kID0gcGFyc2VyX3N0YXRlLT5hbWxfZW5kOwpAQCAtMTQ3LDE0ICsxNDcsMTQgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnNjb3BlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInBzX3B1c2hfc2NvcGUiLCBvcCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIocHNfcHVzaF9zY29wZSwgb3ApOwogCiAJc2NvcGUgPSBhY3BpX3V0X2NyZWF0ZV9nZW5lcmljX3N0YXRlKCk7CiAJaWYgKCFzY29wZSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CiAKLQlzY29wZS0+Y29tbW9uLmRhdGFfdHlwZSA9IEFDUElfREVTQ19UWVBFX1NUQVRFX1BTQ09QRTsKKwlzY29wZS0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9IEFDUElfREVTQ19UWVBFX1NUQVRFX1BTQ09QRTsKIAlzY29wZS0+cGFyc2Vfc2NvcGUub3AgPSBvcDsKIAlzY29wZS0+cGFyc2Vfc2NvcGUuYXJnX2xpc3QgPSByZW1haW5pbmdfYXJnczsKIAlzY29wZS0+cGFyc2Vfc2NvcGUuYXJnX2NvdW50ID0gYXJnX2NvdW50OwpAQCAtMTY1LDYgKzE2NSw3IEBACiAJYWNwaV91dF9wdXNoX2dlbmVyaWNfc3RhdGUoJnBhcnNlcl9zdGF0ZS0+c2NvcGUsIHNjb3BlKTsKIAogCWlmIChhcmdfY291bnQgPT0gQUNQSV9WQVJfQVJHUykgeworCiAJCS8qIE11bHRpcGxlIGFyZ3VtZW50cyAqLwogCiAJCXNjb3BlLT5wYXJzZV9zY29wZS5hcmdfZW5kID0gcGFyc2VyX3N0YXRlLT5wa2dfZW5kOwpAQCAtMTk5LDE0ICsyMDAsMTQgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnNjb3BlID0gcGFyc2VyX3N0YXRlLT5zY29wZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInBzX3BvcF9zY29wZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfcG9wX3Njb3BlKTsKIAogCS8qIE9ubHkgcG9wIHRoZSBzY29wZSBpZiB0aGVyZSBpcyBpbiBmYWN0IGEgbmV4dCBzY29wZSAqLwogCiAJaWYgKHNjb3BlLT5jb21tb24ubmV4dCkgewogCQlzY29wZSA9IGFjcGlfdXRfcG9wX2dlbmVyaWNfc3RhdGUoJnBhcnNlcl9zdGF0ZS0+c2NvcGUpOwogCi0JCS8qIHJldHVybiB0byBwYXJzaW5nIHByZXZpb3VzIG9wICovCisJCS8qIFJldHVybiB0byBwYXJzaW5nIHByZXZpb3VzIG9wICovCiAKIAkJKm9wID0gc2NvcGUtPnBhcnNlX3Njb3BlLm9wOwogCQkqYXJnX2xpc3QgPSBzY29wZS0+cGFyc2Vfc2NvcGUuYXJnX2xpc3Q7CkBAIC0yMTcsNyArMjE4LDcgQEAKIAogCQlhY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKHNjb3BlKTsKIAl9IGVsc2UgewotCQkvKiBlbXB0eSBwYXJzZSBzdGFjaywgcHJlcGFyZSB0byBmZXRjaCBuZXh0IG9wY29kZSAqLworCQkvKiBFbXB0eSBwYXJzZSBzdGFjaywgcHJlcGFyZSB0byBmZXRjaCBuZXh0IG9wY29kZSAqLwogCiAJCSpvcCA9IE5VTEw7CiAJCSphcmdfbGlzdCA9IDA7CkBAIC0yNDYsNyArMjQ3LDcgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnNjb3BlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInBzX2NsZWFudXBfc2NvcGUiLCBwYXJzZXJfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHBzX2NsZWFudXBfc2NvcGUsIHBhcnNlcl9zdGF0ZSk7CiAKIAlpZiAoIXBhcnNlcl9zdGF0ZSkgewogCQlyZXR1cm5fVk9JRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN0cmVlLmMgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzdHJlZS5jCmluZGV4IGRkNmYxNjcuLjAwMTU3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN0cmVlLmMKKysrIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3RyZWUuYwpAQCAtNzcsNiArNzcsNyBAQAogCiAJb3BfaW5mbyA9IGFjcGlfcHNfZ2V0X29wY29kZV9pbmZvKG9wLT5jb21tb24uYW1sX29wY29kZSk7CiAJaWYgKG9wX2luZm8tPmNsYXNzID09IEFNTF9DTEFTU19VTktOT1dOKSB7CisKIAkJLyogSW52YWxpZCBvcGNvZGUgb3IgQVNDSUkgY2hhcmFjdGVyICovCiAKIAkJcmV0dXJuIChOVUxMKTsKQEAgLTg1LDYgKzg2LDcgQEAKIAkvKiBDaGVjayBpZiB0aGlzIG9wY29kZSByZXF1aXJlcyBhcmd1bWVudCBzdWItb2JqZWN0cyAqLwogCiAJaWYgKCEob3BfaW5mby0+ZmxhZ3MgJiBBTUxfSEFTX0FSR1MpKSB7CisKIAkJLyogSGFzIG5vIGxpbmtlZCBhcmd1bWVudCBvYmplY3RzICovCiAKIAkJcmV0dXJuIChOVUxMKTsKQEAgLTEzMCw2ICsxMzIsNyBAQAogCiAJb3BfaW5mbyA9IGFjcGlfcHNfZ2V0X29wY29kZV9pbmZvKG9wLT5jb21tb24uYW1sX29wY29kZSk7CiAJaWYgKG9wX2luZm8tPmNsYXNzID09IEFNTF9DTEFTU19VTktOT1dOKSB7CisKIAkJLyogSW52YWxpZCBvcGNvZGUgKi8KIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBBTUwgT3Bjb2RlOiAweCUyLjJYIiwKQEAgLTE0MCw2ICsxNDMsNyBAQAogCS8qIENoZWNrIGlmIHRoaXMgb3Bjb2RlIHJlcXVpcmVzIGFyZ3VtZW50IHN1Yi1vYmplY3RzICovCiAKIAlpZiAoIShvcF9pbmZvLT5mbGFncyAmIEFNTF9IQVNfQVJHUykpIHsKKwogCQkvKiBIYXMgbm8gbGlua2VkIGFyZ3VtZW50IG9iamVjdHMgKi8KIAogCQlyZXR1cm47CkBAIC0xNDgsNiArMTUyLDcgQEAKIAkvKiBBcHBlbmQgdGhlIGFyZ3VtZW50IHRvIHRoZSBsaW5rZWQgYXJndW1lbnQgbGlzdCAqLwogCiAJaWYgKG9wLT5jb21tb24udmFsdWUuYXJnKSB7CisKIAkJLyogQXBwZW5kIHRvIGV4aXN0aW5nIGFyZ3VtZW50IGxpc3QgKi8KIAogCQlwcmV2X2FyZyA9IG9wLT5jb21tb24udmFsdWUuYXJnOwpAQCAtMjIyLDEyICsyMjcsMTQgQEAKIAkJfQogCiAJCWlmIChhcmcgPT0gb3JpZ2luKSB7CisKIAkJCS8qIFJlYWNoZWQgcGFyZW50IG9mIG9yaWdpbiwgZW5kIHNlYXJjaCAqLwogCiAJCQlyZXR1cm4gKE5VTEwpOwogCQl9CiAKIAkJaWYgKHBhcmVudC0+Y29tbW9uLm5leHQpIHsKKwogCQkJLyogRm91bmQgc2libGluZyBvZiBwYXJlbnQgKi8KIAogCQkJcmV0dXJuIChwYXJlbnQtPmNvbW1vbi5uZXh0KTsKQEAgLTI5OSw1ICszMDYsNCBAQAogCXJldHVybiAoY2hpbGQpOwogfQogI2VuZGlmCi0KICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN1dGlscy5jCmluZGV4IDNlMDdjYjkuLjE4MjQ3NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN1dGlscy5jCkBAIC04OSw3ICs4OSw3IEBACiB7CiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCi0Jb3AtPmNvbW1vbi5kYXRhX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9QQVJTRVI7CisJb3AtPmNvbW1vbi5kZXNjcmlwdG9yX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9QQVJTRVI7CiAJb3AtPmNvbW1vbi5hbWxfb3Bjb2RlID0gb3Bjb2RlOwogCiAJQUNQSV9ESVNBU01fT05MWV9NRU1CRVJTKEFDUElfU1RSTkNQWShvcC0+Y29tbW9uLmFtbF9vcF9uYW1lLApAQCAtMTM1LDYgKzEzNSw3IEBACiAJLyogQWxsb2NhdGUgdGhlIG1pbmltdW0gcmVxdWlyZWQgc2l6ZSBvYmplY3QgKi8KIAogCWlmIChmbGFncyA9PSBBQ1BJX1BBUlNFT1BfR0VORVJJQykgeworCiAJCS8qIFRoZSBnZW5lcmljIG9wIChkZWZhdWx0KSBpcyBieSBmYXIgdGhlIG1vc3QgY29tbW9uICgxNiB0byAxKSAqLwogCiAJCW9wID0gYWNwaV9vc19hY3F1aXJlX29iamVjdChhY3BpX2dibF9wc19ub2RlX2NhY2hlKTsKQEAgLTE3MSw3ICsxNzIsNyBAQAogCiB2b2lkIGFjcGlfcHNfZnJlZV9vcCh1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3ApCiB7Ci0JQUNQSV9GVU5DVElPTl9OQU1FKCJwc19mcmVlX29wIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHBzX2ZyZWVfb3ApOwogCiAJaWYgKG9wLT5jb21tb24uYW1sX29wY29kZSA9PSBBTUxfSU5UX1JFVFVSTl9WQUxVRV9PUCkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0FMTE9DQVRJT05TLCAiRnJlZSByZXR2YWwgb3A6ICVwXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3dhbGsuYyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN3YWxrLmMKaW5kZXggMDZmMDViZi4uYTg0YTU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3dhbGsuYworKysgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzd2Fsay5jCkBAIC02NCwxOCArNjQsMjEgQEAKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqbmV4dCA9IE5VTEw7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKnBhcmVudCA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigicHNfZGVsZXRlX3BhcnNlX3RyZWUiLCBzdWJ0cmVlX3Jvb3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHBzX2RlbGV0ZV9wYXJzZV90cmVlLCBzdWJ0cmVlX3Jvb3QpOwogCiAJLyogVmlzaXQgYWxsIG5vZGVzIGluIHRoZSBzdWJ0cmVlICovCiAKIAl3aGlsZSAob3ApIHsKKwogCQkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IGFzY2VuZGluZyAqLwogCiAJCWlmIChvcCAhPSBwYXJlbnQpIHsKKwogCQkJLyogTG9vayBmb3IgYW4gYXJndW1lbnQgb3IgY2hpbGQgb2YgdGhlIGN1cnJlbnQgb3AgKi8KIAogCQkJbmV4dCA9IGFjcGlfcHNfZ2V0X2FyZyhvcCwgMCk7CiAJCQlpZiAobmV4dCkgeworCiAJCQkJLyogU3RpbGwgZ29pbmcgZG93bndhcmQgaW4gdHJlZSAoT3AgaXMgbm90IGNvbXBsZXRlZCB5ZXQpICovCiAKIAkJCQlvcCA9IG5leHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzeGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN4ZmFjZS5jCmluZGV4IDJkZDQ4Y2IuLjVkOTk2YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN4ZmFjZS5jCkBAIC01MCwxNCArNTAsMTQgQEAKIEFDUElfTU9EVUxFX05BTUUoInBzeGZhY2UiKQogCiAvKiBMb2NhbCBQcm90b3R5cGVzICovCi1zdGF0aWMgdm9pZCBhY3BpX3BzX3N0YXJ0X3RyYWNlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKTsKK3N0YXRpYyB2b2lkIGFjcGlfcHNfc3RhcnRfdHJhY2Uoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbyk7CiAKLXN0YXRpYyB2b2lkIGFjcGlfcHNfc3RvcF90cmFjZShzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbyk7CitzdGF0aWMgdm9pZCBhY3BpX3BzX3N0b3BfdHJhY2Uoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbyk7CiAKLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BzX2V4ZWN1dGVfcGFzcyhzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbyk7CitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9wc19leGVjdXRlX3Bhc3Moc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbyk7CiAKIHN0YXRpYyB2b2lkCi1hY3BpX3BzX3VwZGF0ZV9wYXJhbWV0ZXJfbGlzdChzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbywgdTE2IGFjdGlvbik7CithY3BpX3BzX3VwZGF0ZV9wYXJhbWV0ZXJfbGlzdChzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvLCB1MTYgYWN0aW9uKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMTMsNyArMTEzLDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhY3BpX3BzX3N0YXJ0X3RyYWNlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgYWNwaV9wc19zdGFydF90cmFjZShzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIApAQCAtMTI1LDcgKzEyNSw3IEBACiAJfQogCiAJaWYgKCghYWNwaV9nYmxfdHJhY2VfbWV0aG9kX25hbWUpIHx8Ci0JICAgIChhY3BpX2dibF90cmFjZV9tZXRob2RfbmFtZSAhPSBpbmZvLT5ub2RlLT5uYW1lLmludGVnZXIpKSB7CisJICAgIChhY3BpX2dibF90cmFjZV9tZXRob2RfbmFtZSAhPSBpbmZvLT5yZXNvbHZlZF9ub2RlLT5uYW1lLmludGVnZXIpKSB7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGFjcGlfcHNfc3RvcF90cmFjZShzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbykKK3N0YXRpYyB2b2lkIGFjcGlfcHNfc3RvcF90cmFjZShzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIApAQCAtMTcwLDcgKzE3MCw3IEBACiAJfQogCiAJaWYgKCghYWNwaV9nYmxfdHJhY2VfbWV0aG9kX25hbWUpIHx8Ci0JICAgIChhY3BpX2dibF90cmFjZV9tZXRob2RfbmFtZSAhPSBpbmZvLT5ub2RlLT5uYW1lLmludGVnZXIpKSB7CisJICAgIChhY3BpX2dibF90cmFjZV9tZXRob2RfbmFtZSAhPSBpbmZvLT5yZXNvbHZlZF9ub2RlLT5uYW1lLmludGVnZXIpKSB7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTIxMiwyMiArMjEyLDIzIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMgYWNwaV9wc19leGVjdXRlX21ldGhvZChzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbykKK2FjcGlfc3RhdHVzIGFjcGlfcHNfZXhlY3V0ZV9tZXRob2Qoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJwc19leGVjdXRlX21ldGhvZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfZXhlY3V0ZV9tZXRob2QpOwogCiAJLyogVmFsaWRhdGUgdGhlIEluZm8gYW5kIG1ldGhvZCBOb2RlICovCiAKLQlpZiAoIWluZm8gfHwgIWluZm8tPm5vZGUpIHsKKwlpZiAoIWluZm8gfHwgIWluZm8tPnJlc29sdmVkX25vZGUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05VTExfRU5UUlkpOwogCX0KIAogCS8qIEluaXQgZm9yIG5ldyBtZXRob2QsIHdhaXQgb24gY29uY3VycmVuY3kgc2VtYXBob3JlICovCiAKIAlzdGF0dXMgPQotCSAgICBhY3BpX2RzX2JlZ2luX21ldGhvZF9leGVjdXRpb24oaW5mby0+bm9kZSwgaW5mby0+b2JqX2Rlc2MsIE5VTEwpOworCSAgICBhY3BpX2RzX2JlZ2luX21ldGhvZF9leGVjdXRpb24oaW5mby0+cmVzb2x2ZWRfbm9kZSwgaW5mby0+b2JqX2Rlc2MsCisJCQkJCSAgIE5VTEwpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0yNDgsNyArMjQ5LDcgQEAKIAkgKi8KIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLAogCQkJICAiKioqKiBCZWdpbiBNZXRob2QgUGFyc2UgKioqKiBFbnRyeT0lcCBvYmo9JXBcbiIsCi0JCQkgIGluZm8tPm5vZGUsIGluZm8tPm9ial9kZXNjKSk7CisJCQkgIGluZm8tPnJlc29sdmVkX25vZGUsIGluZm8tPm9ial9kZXNjKSk7CiAKIAlpbmZvLT5wYXNzX251bWJlciA9IDE7CiAJc3RhdHVzID0gYWNwaV9wc19leGVjdXRlX3Bhc3MoaW5mbyk7CkBAIC0yNjEsNyArMjYyLDcgQEAKIAkgKi8KIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLAogCQkJICAiKioqKiBCZWdpbiBNZXRob2QgRXhlY3V0aW9uICoqKiogRW50cnk9JXAgb2JqPSVwXG4iLAotCQkJICBpbmZvLT5ub2RlLCBpbmZvLT5vYmpfZGVzYykpOworCQkJICBpbmZvLT5yZXNvbHZlZF9ub2RlLCBpbmZvLT5vYmpfZGVzYykpOwogCiAJaW5mby0+cGFzc19udW1iZXIgPSAzOwogCXN0YXR1cyA9IGFjcGlfcHNfZXhlY3V0ZV9wYXNzKGluZm8pOwpAQCAtMjg2LDggKzI4Nyw3IEBACiAJICogYSBjb250cm9sIGV4Y2VwdGlvbiBjb2RlCiAJICovCiAJaWYgKGluZm8tPnJldHVybl9vYmplY3QpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwKLQkJCQkgICJNZXRob2QgcmV0dXJuZWQgb2JqX2Rlc2M9JXBcbiIsCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsICJNZXRob2QgcmV0dXJuZWQgT2JqRGVzYz0lcFxuIiwKIAkJCQkgIGluZm8tPnJldHVybl9vYmplY3QpKTsKIAkJQUNQSV9EVU1QX1NUQUNLX0VOVFJZKGluZm8tPnJldHVybl9vYmplY3QpOwogCkBAIC0zMDEsNyArMzAxLDcgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9wc191cGRhdGVfcGFyYW1ldGVyX2xpc3QKICAqCi0gKiBQQVJBTUVURVJTOiAgSW5mbyAgICAgICAgICAgIC0gU2VlIHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvCisgKiBQQVJBTUVURVJTOiAgSW5mbyAgICAgICAgICAgIC0gU2VlIHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVXNlZDogcGFyYW1ldGVyX3R5cGUgYW5kIFBhcmFtZXRlcnMpCiAgKiAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgIC0gQWRkIG9yIFJlbW92ZSByZWZlcmVuY2UKICAqCkBAIC0zMTIsMTQgKzMxMiwxNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQKLWFjcGlfcHNfdXBkYXRlX3BhcmFtZXRlcl9saXN0KHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvLCB1MTYgYWN0aW9uKQorYWNwaV9wc191cGRhdGVfcGFyYW1ldGVyX2xpc3Qoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbywgdTE2IGFjdGlvbikKIHsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKIAlpZiAoKGluZm8tPnBhcmFtZXRlcl90eXBlID09IEFDUElfUEFSQU1fQVJHUykgJiYgKGluZm8tPnBhcmFtZXRlcnMpKSB7CisKIAkJLyogVXBkYXRlIHJlZmVyZW5jZSBjb3VudCBmb3IgZWFjaCBwYXJhbWV0ZXIgKi8KIAogCQlmb3IgKGkgPSAwOyBpbmZvLT5wYXJhbWV0ZXJzW2ldOyBpKyspIHsKKwogCQkJLyogSWdub3JlIGVycm9ycywganVzdCBkbyB0aGVtIGFsbCAqLwogCiAJCQkodm9pZClhY3BpX3V0X3VwZGF0ZV9vYmplY3RfcmVmZXJlbmNlKGluZm8tPgpAQCAtMzMzLDcgKzMzNSw3IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfcHNfZXhlY3V0ZV9wYXNzCiAgKgotICogUEFSQU1FVEVSUzogIEluZm8gICAgICAgICAgICAtIFNlZSBzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbworICogUEFSQU1FVEVSUzogIEluZm8gICAgICAgICAgICAtIFNlZSBzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVzZWQ6IHBhc3NfbnVtYmVyLCBOb2RlLCBhbmQgb2JqX2Rlc2MpCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwpAQCAtMzQyLDEzICszNDQsMTMgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9wc19leGVjdXRlX3Bhc3Moc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9wc19leGVjdXRlX3Bhc3Moc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9wOwogCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJwc19leGVjdXRlX3Bhc3MiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHBzX2V4ZWN1dGVfcGFzcyk7CiAKIAkvKiBDcmVhdGUgYW5kIGluaXQgYSBSb290IE5vZGUgKi8KIApAQCAtMzY3LDcgKzM2OSw3IEBACiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQlzdGF0dXMgPSBhY3BpX2RzX2luaXRfYW1sX3dhbGsod2Fsa19zdGF0ZSwgb3AsIGluZm8tPm5vZGUsCisJc3RhdHVzID0gYWNwaV9kc19pbml0X2FtbF93YWxrKHdhbGtfc3RhdGUsIG9wLCBpbmZvLT5yZXNvbHZlZF9ub2RlLAogCQkJCSAgICAgICBpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmFtbF9zdGFydCwKIAkJCQkgICAgICAgaW5mby0+b2JqX2Rlc2MtPm1ldGhvZC5hbWxfbGVuZ3RoLAogCQkJCSAgICAgICBpbmZvLT5wYXNzX251bWJlciA9PSAxID8gTlVMTCA6IGluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IDcxM2I3NjMuLmU1MDQxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC0zODgsNyArMzg4LDcgQEAKIAogLyogVXNlIHRoZSBhY3BpaWQgaW4gTUFEVCB0byBtYXAgY3B1cyBpbiBjYXNlIG9mIFNNUCAqLwogI2lmbmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIGNvbnZlcnRfYWNwaWlkX3RvX2NwdShhY3BpX2lkKSAoMHhmZikKKyNkZWZpbmUgY29udmVydF9hY3BpaWRfdG9fY3B1KGFjcGlfaWQpICgtMSkKICNlbHNlCiAKICNpZmRlZiBDT05GSUdfSUE2NApAQCAtNDAxLDcgKzQwMSw3IEBACiAjZGVmaW5lIEFSQ0hfQkFEX0FQSUNJRAkJKDB4ZmYpCiAjZW5kaWYKIAotc3RhdGljIHU4IGNvbnZlcnRfYWNwaWlkX3RvX2NwdSh1OCBhY3BpX2lkKQorc3RhdGljIGludCBjb252ZXJ0X2FjcGlpZF90b19jcHUodTggYWNwaV9pZCkKIHsKIAl1MTYgYXBpY19pZDsKIAlpbnQgaTsKQEAgLTQyNyw3ICs0MjcsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CiAJdW5pb24gYWNwaV9vYmplY3Qgb2JqZWN0ID0geyAwIH07CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KSwgJm9iamVjdCB9OwotCXU4IGNwdV9pbmRleDsKKwlpbnQgY3B1X2luZGV4OwogCXN0YXRpYyBpbnQgY3B1MF9pbml0aWFsaXplZDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX2dldF9pbmZvIik7CkBAIC00NzMsNyArNDczLDcgQEAKIAljcHVfaW5kZXggPSBjb252ZXJ0X2FjcGlpZF90b19jcHUocHItPmFjcGlfaWQpOwogCiAJLyogSGFuZGxlIFVQIHN5c3RlbSBydW5uaW5nIFNNUCBrZXJuZWwsIHdpdGggbm8gTEFQSUMgaW4gTUFEVCAqLwotCWlmICghY3B1MF9pbml0aWFsaXplZCAmJiAoY3B1X2luZGV4ID09IDB4ZmYpICYmCisJaWYgKCFjcHUwX2luaXRpYWxpemVkICYmIChjcHVfaW5kZXggPT0gLTEpICYmCiAJICAgIChudW1fb25saW5lX2NwdXMoKSA9PSAxKSkgewogCQljcHVfaW5kZXggPSAwOwogCX0KQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCSAqICBsZXNzIHRoYW4gdGhlIG1heCAjIG9mIENQVXMuIFRoZXkgc2hvdWxkIGJlIGlnbm9yZWQgX2lmZgogCSAqICB0aGV5IGFyZSBwaHlzaWNhbGx5IG5vdCBwcmVzZW50LgogCSAqLwotCWlmIChjcHVfaW5kZXggPj0gTlJfQ1BVUykgeworCWlmIChjcHVfaW5kZXggPT0gLTEpIHsKIAkJaWYgKEFDUElfRkFJTFVSRQogCQkgICAgKGFjcGlfcHJvY2Vzc29yX2hvdGFkZF9pbml0KHByLT5oYW5kbGUsICZwci0+aWQpKSkgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggYWJiZGIzNy4uZjM2ZGIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTU3Nyw2ICs1NzcsOCBAQAogCQlyZXR1cm5fVkFMVUUoLUVCVVNZKTsKIAl9CiAKKwlXQVJOX09OKCFwZXJmb3JtYW5jZSk7CisKIAlwci0+cGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTsKIAogCWlmIChhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2VfaW5mbyhwcikpIHsKQEAgLTYwOSw3ICs2MTEsOCBAQAogCQlyZXR1cm5fVk9JRDsKIAl9CiAKLQlrZnJlZShwci0+cGVyZm9ybWFuY2UtPnN0YXRlcyk7CisJaWYgKHByLT5wZXJmb3JtYW5jZSkKKwkJa2ZyZWUocHItPnBlcmZvcm1hbmNlLT5zdGF0ZXMpOwogCXByLT5wZXJmb3JtYW5jZSA9IE5VTEw7CiAKIAlhY3BpX2NwdWZyZXFfcmVtb3ZlX2ZpbGUocHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NhbGMuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjYWxjLmMKaW5kZXggNDAzOGRiZi4uY2Y4N2IwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NhbGMuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY2FsYy5jCkBAIC03OCw2ICs3OCw3IEBACiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCiAJZm9yIChiaXRzX3NldCA9IDA7IGJpdF9maWVsZDsgYml0c19zZXQrKykgeworCiAJCS8qIFplcm8gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB0aGF0IGlzIHNldCAqLwogCiAJCWJpdF9maWVsZCAmPSAoYml0X2ZpZWxkIC0gMSk7CkBAIC0xNTQsMTUgKzE1NSwxOCBAQAogCSAqIGxlbmd0aCwgbWludXMgb25lIGJ5dGUgZm9yIHRoZSByZXNvdXJjZV9zb3VyY2VfaW5kZXggaXRzZWxmLgogCSAqLwogCWlmIChyZXNvdXJjZV9sZW5ndGggPiBtaW5pbXVtX2FtbF9yZXNvdXJjZV9sZW5ndGgpIHsKKwogCQkvKiBDb21wdXRlIHRoZSBsZW5ndGggb2YgdGhlIG9wdGlvbmFsIHN0cmluZyAqLwogCiAJCXN0cmluZ19sZW5ndGggPQogCQkgICAgcmVzb3VyY2VfbGVuZ3RoIC0gbWluaW11bV9hbWxfcmVzb3VyY2VfbGVuZ3RoIC0gMTsKIAl9CiAKLQkvKiBSb3VuZCB1cCBsZW5ndGggdG8gMzIgYml0cyBmb3IgaW50ZXJuYWwgc3RydWN0dXJlIGFsaWdubWVudCAqLwotCi0JcmV0dXJuIChBQ1BJX1JPVU5EX1VQX3RvXzMyX2JJVFMoc3RyaW5nX2xlbmd0aCkpOworCS8qCisJICogUm91bmQgdGhlIGxlbmd0aCB1cCB0byBhIG11bHRpcGxlIG9mIHRoZSBuYXRpdmUgd29yZCBpbiBvcmRlciB0bworCSAqIGd1YXJhbnRlZSB0aGF0IHRoZSBlbnRpcmUgcmVzb3VyY2UgZGVzY3JpcHRvciBpcyBuYXRpdmUgd29yZCBhbGlnbmVkCisJICovCisJcmV0dXJuICgodTMyKSBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKHN0cmluZ19sZW5ndGgpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE4NiwxMSArMTkwLDEyIEBACiAJYWNwaV9zaXplIGFtbF9zaXplX25lZWRlZCA9IDA7CiAJYWNwaV9yc19sZW5ndGggdG90YWxfc2l6ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9hbWxfbGVuZ3RoIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19nZXRfYW1sX2xlbmd0aCk7CiAKIAkvKiBUcmF2ZXJzZSBlbnRpcmUgbGlzdCBvZiBpbnRlcm5hbCByZXNvdXJjZSBkZXNjcmlwdG9ycyAqLwogCiAJd2hpbGUgKHJlc291cmNlKSB7CisKIAkJLyogVmFsaWRhdGUgdGhlIGRlc2NyaXB0b3IgdHlwZSAqLwogCiAJCWlmIChyZXNvdXJjZS0+dHlwZSA+IEFDUElfUkVTT1VSQ0VfVFlQRV9NQVgpIHsKQEAgLTIxNCw2ICsyMTksNyBAQAogCQkJICogaXMgYSBMYXJnZSBSZXNvdXJjZSBkYXRhIHR5cGUuCiAJCQkgKi8KIAkJCWlmIChyZXNvdXJjZS0+ZGF0YS52ZW5kb3IuYnl0ZV9sZW5ndGggPiA3KSB7CisKIAkJCQkvKiBCYXNlIHNpemUgb2YgYSBMYXJnZSByZXNvdXJjZSBkZXNjcmlwdG9yICovCiAKIAkJCQl0b3RhbF9zaXplID0KQEAgLTMzMiwyMCArMzM4LDIyIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXU4ICplbmRfYW1sOwogCXU4ICpidWZmZXI7Ci0JdTMyIGJ1ZmZlcl9zaXplID0gMDsKKwl1MzIgYnVmZmVyX3NpemU7CiAJdTE2IHRlbXAxNjsKIAl1MTYgcmVzb3VyY2VfbGVuZ3RoOwogCXUzMiBleHRyYV9zdHJ1Y3RfYnl0ZXM7CiAJdTggcmVzb3VyY2VfaW5kZXg7CiAJdTggbWluaW11bV9hbWxfcmVzb3VyY2VfbGVuZ3RoOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfZ2V0X2xpc3RfbGVuZ3RoIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19nZXRfbGlzdF9sZW5ndGgpOwogCisJKnNpemVfbmVlZGVkID0gMDsKIAllbmRfYW1sID0gYW1sX2J1ZmZlciArIGFtbF9idWZmZXJfbGVuZ3RoOwogCiAJLyogV2FsayB0aGUgbGlzdCBvZiBBTUwgcmVzb3VyY2UgZGVzY3JpcHRvcnMgKi8KIAogCXdoaWxlIChhbWxfYnVmZmVyIDwgZW5kX2FtbCkgeworCiAJCS8qIFZhbGlkYXRlIHRoZSBSZXNvdXJjZSBUeXBlIGFuZCBSZXNvdXJjZSBMZW5ndGggKi8KIAogCQlzdGF0dXMgPSBhY3BpX3V0X3ZhbGlkYXRlX3Jlc291cmNlKGFtbF9idWZmZXIsICZyZXNvdXJjZV9pbmRleCk7CkBAIC0zODYsMzUgKzM5NCwyOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX05BTUVfVkVORE9SX1NNQUxMOgorCQljYXNlIEFDUElfUkVTT1VSQ0VfTkFNRV9WRU5ET1JfTEFSR0U6CiAJCQkvKgogCQkJICogVmVuZG9yIFJlc291cmNlOgotCQkJICogRW5zdXJlIGEgMzItYml0IGJvdW5kYXJ5IGZvciB0aGUgc3RydWN0dXJlCisJCQkgKiBHZXQgdGhlIG51bWJlciBvZiB2ZW5kb3IgZGF0YSBieXRlcwogCQkJICovCi0JCQlleHRyYV9zdHJ1Y3RfYnl0ZXMgPQotCQkJICAgIEFDUElfUk9VTkRfVVBfdG9fMzJfYklUUyhyZXNvdXJjZV9sZW5ndGgpOworCQkJZXh0cmFfc3RydWN0X2J5dGVzID0gcmVzb3VyY2VfbGVuZ3RoOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX05BTUVfRU5EX1RBRzoKIAkJCS8qCi0JCQkgKiBFbmQgVGFnOiBUaGlzIGlzIHRoZSBub3JtYWwgZXhpdCwgYWRkIHNpemUgb2YgZW5kX3RhZworCQkJICogRW5kIFRhZzoKKwkJCSAqIFRoaXMgaXMgdGhlIG5vcm1hbCBleGl0LCBhZGQgc2l6ZSBvZiBlbmRfdGFnCiAJCQkgKi8KLQkJCSpzaXplX25lZWRlZCA9IGJ1ZmZlcl9zaXplICsgQUNQSV9SU19TSVpFX01JTjsKKwkJCSpzaXplX25lZWRlZCArPSBBQ1BJX1JTX1NJWkVfTUlOOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAotCQljYXNlIEFDUElfUkVTT1VSQ0VfTkFNRV9WRU5ET1JfTEFSR0U6Ci0JCQkvKgotCQkJICogVmVuZG9yIFJlc291cmNlOgotCQkJICogQWRkIHZlbmRvciBkYXRhIGFuZCBlbnN1cmUgYSAzMi1iaXQgYm91bmRhcnkgZm9yIHRoZSBzdHJ1Y3R1cmUKLQkJCSAqLwotCQkJZXh0cmFfc3RydWN0X2J5dGVzID0KLQkJCSAgICBBQ1BJX1JPVU5EX1VQX3RvXzMyX2JJVFMocmVzb3VyY2VfbGVuZ3RoKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgQUNQSV9SRVNPVVJDRV9OQU1FX0FERFJFU1MzMjoKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX05BTUVfQUREUkVTUzE2OgorCQljYXNlIEFDUElfUkVTT1VSQ0VfTkFNRV9BRERSRVNTNjQ6CiAJCQkvKgotCQkJICogMzItQml0IG9yIDE2LWJpdCBBZGRyZXNzIFJlc291cmNlOgotCQkJICogQWRkIHRoZSBzaXplIG9mIGFueSBvcHRpb25hbCBkYXRhIChyZXNvdXJjZV9zb3VyY2UpCisJCQkgKiBBZGRyZXNzIFJlc291cmNlOgorCQkJICogQWRkIHRoZSBzaXplIG9mIHRoZSBvcHRpb25hbCByZXNvdXJjZV9zb3VyY2UKIAkJCSAqLwogCQkJZXh0cmFfc3RydWN0X2J5dGVzID0KIAkJCSAgICBhY3BpX3JzX3N0cmVhbV9vcHRpb25fbGVuZ3RoKHJlc291cmNlX2xlbmd0aCwKQEAgLTQyMyw1MCArNDI0LDQ2IEBACiAKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX05BTUVfRVhURU5ERURfSVJROgogCQkJLyoKLQkJCSAqIEV4dGVuZGVkIElSUToKLQkJCSAqIFBvaW50IHBhc3QgdGhlIGludGVycnVwdF92ZWN0b3JfZmxhZ3MgdG8gZ2V0IHRoZQotCQkJICogaW50ZXJydXB0X3RhYmxlX2xlbmd0aC4KKwkJCSAqIEV4dGVuZGVkIElSUSBSZXNvdXJjZToKKwkJCSAqIFVzaW5nIHRoZSBpbnRlcnJ1cHRfdGFibGVfbGVuZ3RoLCBhZGQgNCBieXRlcyBmb3IgZWFjaCBhZGRpdGlvbmFsCisJCQkgKiBpbnRlcnJ1cHQuIE5vdGU6IGF0IGxlYXN0IG9uZSBpbnRlcnJ1cHQgaXMgcmVxdWlyZWQgYW5kIGlzCisJCQkgKiBpbmNsdWRlZCBpbiB0aGUgbWluaW11bSBkZXNjcmlwdG9yIHNpemUgKHJlYXNvbiBmb3IgdGhlIC0xKQogCQkJICovCi0JCQlidWZmZXIrKzsKKwkJCWV4dHJhX3N0cnVjdF9ieXRlcyA9IChidWZmZXJbMV0gLSAxKSAqIHNpemVvZih1MzIpOwogCi0JCQlleHRyYV9zdHJ1Y3RfYnl0ZXMgPQotCQkJICAgIC8qCi0JCQkgICAgICogQWRkIDQgYnl0ZXMgZm9yIGVhY2ggYWRkaXRpb25hbCBpbnRlcnJ1cHQuIE5vdGU6IGF0Ci0JCQkgICAgICogbGVhc3Qgb25lIGludGVycnVwdCBpcyByZXF1aXJlZCBhbmQgaXMgaW5jbHVkZWQgaW4KLQkJCSAgICAgKiB0aGUgbWluaW11bSBkZXNjcmlwdG9yIHNpemUKLQkJCSAgICAgKi8KLQkJCSAgICAoKCpidWZmZXIgLSAxKSAqIHNpemVvZih1MzIpKSArCi0JCQkgICAgLyogQWRkIHRoZSBzaXplIG9mIGFueSBvcHRpb25hbCBkYXRhIChyZXNvdXJjZV9zb3VyY2UpICovCisJCQkvKiBBZGQgdGhlIHNpemUgb2YgdGhlIG9wdGlvbmFsIHJlc291cmNlX3NvdXJjZSAqLworCisJCQlleHRyYV9zdHJ1Y3RfYnl0ZXMgKz0KIAkJCSAgICBhY3BpX3JzX3N0cmVhbV9vcHRpb25fbGVuZ3RoKHJlc291cmNlX2xlbmd0aCAtCiAJCQkJCQkJIGV4dHJhX3N0cnVjdF9ieXRlcywKIAkJCQkJCQkgbWluaW11bV9hbWxfcmVzb3VyY2VfbGVuZ3RoKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgQUNQSV9SRVNPVVJDRV9OQU1FX0FERFJFU1M2NDoKLQkJCS8qCi0JCQkgKiA2NC1CaXQgQWRkcmVzcyBSZXNvdXJjZToKLQkJCSAqIEFkZCB0aGUgc2l6ZSBvZiBhbnkgb3B0aW9uYWwgZGF0YSAocmVzb3VyY2Vfc291cmNlKQotCQkJICogRW5zdXJlIGEgNjQtYml0IGJvdW5kYXJ5IGZvciB0aGUgc3RydWN0dXJlCi0JCQkgKi8KLQkJCWV4dHJhX3N0cnVjdF9ieXRlcyA9Ci0JCQkgICAgQUNQSV9ST1VORF9VUF90b182NF9iSVRTCi0JCQkgICAgKGFjcGlfcnNfc3RyZWFtX29wdGlvbl9sZW5ndGgKLQkJCSAgICAgKHJlc291cmNlX2xlbmd0aCwgbWluaW11bV9hbWxfcmVzb3VyY2VfbGVuZ3RoKSk7Ci0JCQlicmVhazsKLQogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBVcGRhdGUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplIGZvciB0aGUgaW50ZXJuYWwgZGVzY3JpcHRvciBzdHJ1Y3RzICovCisJCS8qCisJCSAqIFVwZGF0ZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgZm9yIHRoZSBpbnRlcm5hbCBkZXNjcmlwdG9yIHN0cnVjdHMKKwkJICoKKwkJICogSW1wb3J0YW50OiBSb3VuZCB0aGUgc2l6ZSB1cCBmb3IgdGhlIGFwcHJvcHJpYXRlIGFsaWdubWVudC4gVGhpcworCQkgKiBpcyBhIHJlcXVpcmVtZW50IG9uIElBNjQuCisJCSAqLworCQlidWZmZXJfc2l6ZSA9IGFjcGlfZ2JsX3Jlc291cmNlX3N0cnVjdF9zaXplc1tyZXNvdXJjZV9pbmRleF0gKworCQkgICAgZXh0cmFfc3RydWN0X2J5dGVzOworCQlidWZmZXJfc2l6ZSA9ICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQoYnVmZmVyX3NpemUpOwogCi0JCXRlbXAxNiA9ICh1MTYpIChhY3BpX2dibF9yZXNvdXJjZV9zdHJ1Y3Rfc2l6ZXNbcmVzb3VyY2VfaW5kZXhdICsKLQkJCQlleHRyYV9zdHJ1Y3RfYnl0ZXMpOwotCQlidWZmZXJfc2l6ZSArPSAodTMyKSBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKHRlbXAxNik7CisJCSpzaXplX25lZWRlZCArPSBidWZmZXJfc2l6ZTsKKworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1JFU09VUkNFUywKKwkJCQkgICJUeXBlICUuMlgsIEFtbExlbmd0aCAlLjJYIEludGVybmFsTGVuZ3RoICUuMlhcbiIsCisJCQkJICBhY3BpX3V0X2dldF9yZXNvdXJjZV90eXBlKGFtbF9idWZmZXIpLAorCQkJCSAgYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9sZW5ndGgoYW1sX2J1ZmZlciksCisJCQkJICBidWZmZXJfc2l6ZSkpOwogCiAJCS8qCi0JCSAqIFBvaW50IHRvIHRoZSBuZXh0IHJlc291cmNlIHdpdGhpbiB0aGUgc3RyZWFtCi0JCSAqIHVzaW5nIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgcGx1cyB0aGUgbGVuZ3RoIGNvbnRhaW5lZCBpbiB0aGUgaGVhZGVyCisJCSAqIFBvaW50IHRvIHRoZSBuZXh0IHJlc291cmNlIHdpdGhpbiB0aGUgQU1MIHN0cmVhbSB1c2luZyB0aGUgbGVuZ3RoCisJCSAqIGNvbnRhaW5lZCBpbiB0aGUgcmVzb3VyY2UgZGVzY3JpcHRvciBoZWFkZXIKIAkJICovCiAJCWFtbF9idWZmZXIgKz0gYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9sZW5ndGgoYW1sX2J1ZmZlcik7CiAJfQpAQCAtNTA2LDcgKzUwMyw3IEBACiAJdTggbmFtZV9mb3VuZDsKIAl1MzIgdGFibGVfaW5kZXg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJyc19nZXRfcGNpX3JvdXRpbmdfdGFibGVfbGVuZ3RoIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19nZXRfcGNpX3JvdXRpbmdfdGFibGVfbGVuZ3RoKTsKIAogCW51bWJlcl9vZl9lbGVtZW50cyA9IHBhY2thZ2Vfb2JqZWN0LT5wYWNrYWdlLmNvdW50OwogCkBAIC01MjMsNiArNTIwLDcgQEAKIAl0b3Bfb2JqZWN0X2xpc3QgPSBwYWNrYWdlX29iamVjdC0+cGFja2FnZS5lbGVtZW50czsKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bWJlcl9vZl9lbGVtZW50czsgaW5kZXgrKykgeworCiAJCS8qIERlcmVmZXJlbmNlIHRoZSBzdWItcGFja2FnZSAqLwogCiAJCXBhY2thZ2VfZWxlbWVudCA9ICp0b3Bfb2JqZWN0X2xpc3Q7CkBAIC01ODEsNyArNTc5LDcgQEAKIAogCQkvKiBSb3VuZCB1cCB0aGUgc2l6ZSBzaW5jZSBlYWNoIGVsZW1lbnQgbXVzdCBiZSBhbGlnbmVkICovCiAKLQkJdGVtcF9zaXplX25lZWRlZCA9IEFDUElfUk9VTkRfVVBfdG9fNjRfYklUUyh0ZW1wX3NpemVfbmVlZGVkKTsKKwkJdGVtcF9zaXplX25lZWRlZCA9IEFDUElfUk9VTkRfVVBfVE9fNjRCSVQodGVtcF9zaXplX25lZWRlZCk7CiAKIAkJLyogUG9pbnQgdG8gdGhlIG5leHQgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqLwogCkBAIC01ODksNyArNTg3LDcgQEAKIAl9CiAKIAkvKgotCSAqIEFkZGluZyBhbiBleHRyYSBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QsIGVzc2VudGlhbGx5IGEKKwkgKiBBZGQgYW4gZXh0cmEgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LCBlc3NlbnRpYWxseSBhCiAJICogTlVMTCB0ZXJtaW5hdG9yCiAJICovCiAJKmJ1ZmZlcl9zaXplX25lZWRlZCA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY3JlYXRlLmMgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY3JlYXRlLmMKaW5kZXggOGMxMjhkZS4uMDA4MDU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NyZWF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjcmVhdGUuYwpAQCAtNzUsMTAgKzc1LDExIEBACiAJdTggKmFtbF9zdGFydDsKIAlhY3BpX3NpemUgbGlzdF9zaXplX25lZWRlZCA9IDA7CiAJdTMyIGFtbF9idWZmZXJfbGVuZ3RoOworCXZvaWQgKnJlc291cmNlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfY3JlYXRlX3Jlc291cmNlX2xpc3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2NyZWF0ZV9yZXNvdXJjZV9saXN0KTsKIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgImFtbF9idWZmZXIgPSAlcFxuIiwgYW1sX2J1ZmZlcikpOworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkFtbEJ1ZmZlciA9ICVwXG4iLCBhbWxfYnVmZmVyKSk7CiAKIAkvKiBQYXJhbXMgYWxyZWFkeSB2YWxpZGF0ZWQsIHNvIHdlIGRvbid0IHJlLXZhbGlkYXRlIGhlcmUgKi8KIApAQCAtOTIsNyArOTMsNyBAQAogCXN0YXR1cyA9IGFjcGlfcnNfZ2V0X2xpc3RfbGVuZ3RoKGFtbF9zdGFydCwgYW1sX2J1ZmZlcl9sZW5ndGgsCiAJCQkJCSAmbGlzdF9zaXplX25lZWRlZCk7CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJTdGF0dXM9JVggbGlzdF9zaXplX25lZWRlZD0lWFxuIiwKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJTdGF0dXM9JVggTGlzdFNpemVOZWVkZWQ9JVhcbiIsCiAJCQkgIHN0YXR1cywgKHUzMikgbGlzdF9zaXplX25lZWRlZCkpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTEwNywxMyArMTA4LDE1IEBACiAKIAkvKiBEbyB0aGUgY29udmVyc2lvbiAqLwogCi0Jc3RhdHVzID0gYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXMoYW1sX3N0YXJ0LCBhbWxfYnVmZmVyX2xlbmd0aCwKLQkJCQkJCSAgb3V0cHV0X2J1ZmZlci0+cG9pbnRlcik7CisJcmVzb3VyY2UgPSBvdXRwdXRfYnVmZmVyLT5wb2ludGVyOworCXN0YXR1cyA9IGFjcGlfdXRfd2Fsa19hbWxfcmVzb3VyY2VzKGFtbF9zdGFydCwgYW1sX2J1ZmZlcl9sZW5ndGgsCisJCQkJCSAgICBhY3BpX3JzX2NvbnZlcnRfYW1sX3RvX3Jlc291cmNlcywKKwkJCQkJICAgICZyZXNvdXJjZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIm91dHB1dF9idWZmZXIgJXAgTGVuZ3RoICVYXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIk91dHB1dEJ1ZmZlciAlcCBMZW5ndGggJVhcbiIsCiAJCQkgIG91dHB1dF9idWZmZXItPnBvaW50ZXIsICh1MzIpIG91dHB1dF9idWZmZXItPmxlbmd0aCkpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CkBAIC0xNTUsNyArMTU4LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfYnVmZmVyIHBhdGhfYnVmZmVyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfY3JlYXRlX3BjaV9yb3V0aW5nX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19jcmVhdGVfcGNpX3JvdXRpbmdfdGFibGUpOwogCiAJLyogUGFyYW1zIGFscmVhZHkgdmFsaWRhdGVkLCBzbyB3ZSBkb24ndCByZS12YWxpZGF0ZSBoZXJlICovCiAKQEAgLTE2Nyw3ICsxNzAsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJidWZmZXJfc2l6ZV9uZWVkZWQgPSAlWFxuIiwKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJCdWZmZXJTaXplTmVlZGVkID0gJVhcbiIsCiAJCQkgICh1MzIpIGJ1ZmZlcl9zaXplX25lZWRlZCkpOwogCiAJLyogVmFsaWRhdGUvQWxsb2NhdGUvQ2xlYXIgY2FsbGVyIGJ1ZmZlciAqLwpAQCAtMzMyLDcgKzMzNSw3IEBACiAJCS8qIE5vdyBhbGlnbiB0aGUgY3VycmVudCBsZW5ndGggKi8KIAogCQl1c2VyX3BydC0+bGVuZ3RoID0KLQkJICAgICh1MzIpIEFDUElfUk9VTkRfVVBfdG9fNjRfYklUUyh1c2VyX3BydC0+bGVuZ3RoKTsKKwkJICAgICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fNjRCSVQodXNlcl9wcnQtPmxlbmd0aCk7CiAKIAkJLyogNCkgRm91cnRoIHN1Ym9iamVjdDogRGVyZWZlcmVuY2UgdGhlIFBSVC5zb3VyY2VfaW5kZXggKi8KIApAQCAtMzQxLDcgKzM0NCw3IEBACiAJCQl1c2VyX3BydC0+c291cmNlX2luZGV4ID0gKHUzMikgb2JqX2Rlc2MtPmludGVnZXIudmFsdWU7CiAJCX0gZWxzZSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiKFBSVFslWF0uc291cmNlX2luZGV4KSBOZWVkIEludGVnZXIsIGZvdW5kICVzIiwKKwkJCQkgICAgIihQUlRbJVhdLlNvdXJjZUluZGV4KSBOZWVkIEludGVnZXIsIGZvdW5kICVzIiwKIAkJCQkgICAgaW5kZXgsCiAJCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUob2JqX2Rlc2MpKSk7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX0RBVEEpOwpAQCAtMzUyLDcgKzM1NSw3IEBACiAJCXRvcF9vYmplY3RfbGlzdCsrOwogCX0KIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIm91dHB1dF9idWZmZXIgJXAgTGVuZ3RoICVYXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIk91dHB1dEJ1ZmZlciAlcCBMZW5ndGggJVhcbiIsCiAJCQkgIG91dHB1dF9idWZmZXItPnBvaW50ZXIsICh1MzIpIG91dHB1dF9idWZmZXItPmxlbmd0aCkpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CkBAIC0zODIsOSArMzg1LDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9zaXplIGFtbF9zaXplX25lZWRlZCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJyc19jcmVhdGVfYW1sX3Jlc291cmNlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocnNfY3JlYXRlX2FtbF9yZXNvdXJjZXMpOwogCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAibGlua2VkX2xpc3RfYnVmZmVyID0gJXBcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiTGlua2VkTGlzdEJ1ZmZlciA9ICVwXG4iLAogCQkJICBsaW5rZWRfbGlzdF9idWZmZXIpKTsKIAogCS8qCkBAIC0zOTUsNyArMzk4LDcgQEAKIAkgKi8KIAlzdGF0dXMgPSBhY3BpX3JzX2dldF9hbWxfbGVuZ3RoKGxpbmtlZF9saXN0X2J1ZmZlciwgJmFtbF9zaXplX25lZWRlZCk7CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJhbWxfc2l6ZV9uZWVkZWQ9JVgsICVzXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkFtbFNpemVOZWVkZWQ9JVgsICVzXG4iLAogCQkJICAodTMyKSBhbWxfc2l6ZV9uZWVkZWQsCiAJCQkgIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC00MTksNyArNDIyLDcgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAib3V0cHV0X2J1ZmZlciAlcCBMZW5ndGggJVhcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiT3V0cHV0QnVmZmVyICVwIExlbmd0aCAlWFxuIiwKIAkJCSAgb3V0cHV0X2J1ZmZlci0+cG9pbnRlciwgKHUzMikgb3V0cHV0X2J1ZmZlci0+bGVuZ3RoKSk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNkdW1wLmMgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzZHVtcC5jCmluZGV4IGU3ZGUwNjEuLjljOTlhNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2R1bXAuYwpAQCAtOTEsMTEgKzkxLDExIEBACiBzdHJ1Y3QgYWNwaV9yc2R1bXBfaW5mbyBhY3BpX3JzX2R1bXBfaXJxWzZdID0gewogCXtBQ1BJX1JTRF9USVRMRSwgQUNQSV9SU0RfVEFCTEVfU0laRShhY3BpX3JzX2R1bXBfaXJxKSwgIklSUSIsIE5VTEx9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGlycS50cmlnZ2VyaW5nKSwgIlRyaWdnZXJpbmciLAotCSBhY3BpX2dibF9IRWRlY29kZX0sCisJIGFjcGlfZ2JsX2hlX2RlY29kZX0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoaXJxLnBvbGFyaXR5KSwgIlBvbGFyaXR5IiwKLQkgYWNwaV9nYmxfTExkZWNvZGV9LAorCSBhY3BpX2dibF9sbF9kZWNvZGV9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGlycS5zaGFyYWJsZSksICJTaGFyaW5nIiwKLQkgYWNwaV9nYmxfU0hSZGVjb2RlfSwKKwkgYWNwaV9nYmxfc2hyX2RlY29kZX0sCiAJe0FDUElfUlNEX1VJTlQ4LCBBQ1BJX1JTRF9PRkZTRVQoaXJxLmludGVycnVwdF9jb3VudCksCiAJICJJbnRlcnJ1cHQgQ291bnQiLCBOVUxMfSwKIAl7QUNQSV9SU0RfU0hPUlRMSVNULCBBQ1BJX1JTRF9PRkZTRVQoaXJxLmludGVycnVwdHNbMF0pLApAQCAtMTA1LDExICsxMDUsMTEgQEAKIHN0cnVjdCBhY3BpX3JzZHVtcF9pbmZvIGFjcGlfcnNfZHVtcF9kbWFbNl0gPSB7CiAJe0FDUElfUlNEX1RJVExFLCBBQ1BJX1JTRF9UQUJMRV9TSVpFKGFjcGlfcnNfZHVtcF9kbWEpLCAiRE1BIiwgTlVMTH0sCiAJe0FDUElfUlNEXzJCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoZG1hLnR5cGUpLCAiU3BlZWQiLAotCSBhY3BpX2dibF9UWVBkZWNvZGV9LAorCSBhY3BpX2dibF90eXBfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChkbWEuYnVzX21hc3RlciksICJNYXN0ZXJpbmciLAotCSBhY3BpX2dibF9CTWRlY29kZX0sCisJIGFjcGlfZ2JsX2JtX2RlY29kZX0sCiAJe0FDUElfUlNEXzJCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoZG1hLnRyYW5zZmVyKSwgIlRyYW5zZmVyIFR5cGUiLAotCSBhY3BpX2dibF9TSVpkZWNvZGV9LAorCSBhY3BpX2dibF9zaXpfZGVjb2RlfSwKIAl7QUNQSV9SU0RfVUlOVDgsIEFDUElfUlNEX09GRlNFVChkbWEuY2hhbm5lbF9jb3VudCksICJDaGFubmVsIENvdW50IiwKIAkgTlVMTH0sCiAJe0FDUElfUlNEX1NIT1JUTElTVCwgQUNQSV9SU0RfT0ZGU0VUKGRtYS5jaGFubmVsc1swXSksICJDaGFubmVsIExpc3QiLApAQCAtMTU4LDcgKzE1OCw3IEBACiB9OwogCiBzdHJ1Y3QgYWNwaV9yc2R1bXBfaW5mbyBhY3BpX3JzX2R1bXBfZW5kX3RhZ1sxXSA9IHsKLQl7QUNQSV9SU0RfVElUTEUsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX2VuZF90YWcpLCAiZW5kX3RhZyIsCisJe0FDUElfUlNEX1RJVExFLCBBQ1BJX1JTRF9UQUJMRV9TSVpFKGFjcGlfcnNfZHVtcF9lbmRfdGFnKSwgIkVuZFRhZyIsCiAJIE5VTEx9CiB9OwogCkBAIC0xNjYsNyArMTY2LDcgQEAKIAl7QUNQSV9SU0RfVElUTEUsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX21lbW9yeTI0KSwKIAkgIjI0LUJpdCBNZW1vcnkgUmFuZ2UiLCBOVUxMfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChtZW1vcnkyNC53cml0ZV9wcm90ZWN0KSwKLQkgIldyaXRlIFByb3RlY3QiLCBhY3BpX2dibF9SV2RlY29kZX0sCisJICJXcml0ZSBQcm90ZWN0IiwgYWNwaV9nYmxfcndfZGVjb2RlfSwKIAl7QUNQSV9SU0RfVUlOVDE2LCBBQ1BJX1JTRF9PRkZTRVQobWVtb3J5MjQubWluaW11bSksICJBZGRyZXNzIE1pbmltdW0iLAogCSBOVUxMfSwKIAl7QUNQSV9SU0RfVUlOVDE2LCBBQ1BJX1JTRF9PRkZTRVQobWVtb3J5MjQubWF4aW11bSksICJBZGRyZXNzIE1heGltdW0iLApAQCAtMTgxLDcgKzE4MSw3IEBACiAJe0FDUElfUlNEX1RJVExFLCBBQ1BJX1JTRF9UQUJMRV9TSVpFKGFjcGlfcnNfZHVtcF9tZW1vcnkzMiksCiAJICIzMi1CaXQgTWVtb3J5IFJhbmdlIiwgTlVMTH0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQobWVtb3J5MzIud3JpdGVfcHJvdGVjdCksCi0JICJXcml0ZSBQcm90ZWN0IiwgYWNwaV9nYmxfUldkZWNvZGV9LAorCSAiV3JpdGUgUHJvdGVjdCIsIGFjcGlfZ2JsX3J3X2RlY29kZX0sCiAJe0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKG1lbW9yeTMyLm1pbmltdW0pLCAiQWRkcmVzcyBNaW5pbXVtIiwKIAkgTlVMTH0sCiAJe0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKG1lbW9yeTMyLm1heGltdW0pLCAiQWRkcmVzcyBNYXhpbXVtIiwKQEAgLTE5Niw3ICsxOTYsNyBAQAogCXtBQ1BJX1JTRF9USVRMRSwgQUNQSV9SU0RfVEFCTEVfU0laRShhY3BpX3JzX2R1bXBfZml4ZWRfbWVtb3J5MzIpLAogCSAiMzItQml0IEZpeGVkIE1lbW9yeSBSYW5nZSIsIE5VTEx9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGZpeGVkX21lbW9yeTMyLndyaXRlX3Byb3RlY3QpLAotCSAiV3JpdGUgUHJvdGVjdCIsIGFjcGlfZ2JsX1JXZGVjb2RlfSwKKwkgIldyaXRlIFByb3RlY3QiLCBhY3BpX2dibF9yd19kZWNvZGV9LAogCXtBQ1BJX1JTRF9VSU5UMzIsIEFDUElfUlNEX09GRlNFVChmaXhlZF9tZW1vcnkzMi5hZGRyZXNzKSwgIkFkZHJlc3MiLAogCSBOVUxMfSwKIAl7QUNQSV9SU0RfVUlOVDMyLCBBQ1BJX1JTRF9PRkZTRVQoZml4ZWRfbWVtb3J5MzIuYWRkcmVzc19sZW5ndGgpLApAQCAtMjc4LDExICsyNzgsMTEgQEAKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChleHRlbmRlZF9pcnEucHJvZHVjZXJfY29uc3VtZXIpLAogCSAiVHlwZSIsIGFjcGlfZ2JsX2NvbnN1bWVfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChleHRlbmRlZF9pcnEudHJpZ2dlcmluZyksCi0JICJUcmlnZ2VyaW5nIiwgYWNwaV9nYmxfSEVkZWNvZGV9LAorCSAiVHJpZ2dlcmluZyIsIGFjcGlfZ2JsX2hlX2RlY29kZX0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoZXh0ZW5kZWRfaXJxLnBvbGFyaXR5KSwgIlBvbGFyaXR5IiwKLQkgYWNwaV9nYmxfTExkZWNvZGV9LAorCSBhY3BpX2dibF9sbF9kZWNvZGV9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGV4dGVuZGVkX2lycS5zaGFyYWJsZSksICJTaGFyaW5nIiwKLQkgYWNwaV9nYmxfU0hSZGVjb2RlfSwKKwkgYWNwaV9nYmxfc2hyX2RlY29kZX0sCiAJe0FDUElfUlNEX1NPVVJDRSwgQUNQSV9SU0RfT0ZGU0VUKGV4dGVuZGVkX2lycS5yZXNvdXJjZV9zb3VyY2UpLCBOVUxMLAogCSBOVUxMfSwKIAl7QUNQSV9SU0RfVUlOVDgsIEFDUElfUlNEX09GRlNFVChleHRlbmRlZF9pcnEuaW50ZXJydXB0X2NvdW50KSwKQEAgLTMxNCw3ICszMTQsNyBAQAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MucHJvZHVjZXJfY29uc3VtZXIpLAogCSAiQ29uc3VtZXIvUHJvZHVjZXIiLCBhY3BpX2dibF9jb25zdW1lX2RlY29kZX0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzcy5kZWNvZGUpLCAiQWRkcmVzcyBEZWNvZGUiLAotCSBhY3BpX2dibF9ERUNkZWNvZGV9LAorCSBhY3BpX2dibF9kZWNfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLm1pbl9hZGRyZXNzX2ZpeGVkKSwKIAkgIk1pbiBSZWxvY2F0YWJpbGl0eSIsIGFjcGlfZ2JsX21pbl9kZWNvZGV9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MubWF4X2FkZHJlc3NfZml4ZWQpLApAQCAtMzI1LDI0ICszMjUsMjQgQEAKIAl7QUNQSV9SU0RfTElURVJBTCwgQUNQSV9SU0RfVEFCTEVfU0laRShhY3BpX3JzX2R1bXBfbWVtb3J5X2ZsYWdzKSwKIAkgIlJlc291cmNlIFR5cGUiLCAodm9pZCAqKSJNZW1vcnkgUmFuZ2UifSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8ubWVtLndyaXRlX3Byb3RlY3QpLAotCSAiV3JpdGUgUHJvdGVjdCIsIGFjcGlfZ2JsX1JXZGVjb2RlfSwKKwkgIldyaXRlIFByb3RlY3QiLCBhY3BpX2dibF9yd19kZWNvZGV9LAogCXtBQ1BJX1JTRF8yQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MuaW5mby5tZW0uY2FjaGluZyksCi0JICJDYWNoaW5nIiwgYWNwaV9nYmxfTUVNZGVjb2RlfSwKKwkgIkNhY2hpbmciLCBhY3BpX2dibF9tZW1fZGVjb2RlfSwKIAl7QUNQSV9SU0RfMkJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8ubWVtLnJhbmdlX3R5cGUpLAotCSAiUmFuZ2UgVHlwZSIsIGFjcGlfZ2JsX01UUGRlY29kZX0sCisJICJSYW5nZSBUeXBlIiwgYWNwaV9nYmxfbXRwX2RlY29kZX0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzcy5pbmZvLm1lbS50cmFuc2xhdGlvbiksCi0JICJUcmFuc2xhdGlvbiIsIGFjcGlfZ2JsX1RUUGRlY29kZX0KKwkgIlRyYW5zbGF0aW9uIiwgYWNwaV9nYmxfdHRwX2RlY29kZX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9yc2R1bXBfaW5mbyBhY3BpX3JzX2R1bXBfaW9fZmxhZ3NbNF0gPSB7CiAJe0FDUElfUlNEX0xJVEVSQUwsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX2lvX2ZsYWdzKSwKIAkgIlJlc291cmNlIFR5cGUiLCAodm9pZCAqKSJJL08gUmFuZ2UifSwKIAl7QUNQSV9SU0RfMkJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8uaW8ucmFuZ2VfdHlwZSksCi0JICJSYW5nZSBUeXBlIiwgYWNwaV9nYmxfUk5HZGVjb2RlfSwKKwkgIlJhbmdlIFR5cGUiLCBhY3BpX2dibF9ybmdfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8uaW8udHJhbnNsYXRpb24pLAotCSAiVHJhbnNsYXRpb24iLCBhY3BpX2dibF9UVFBkZWNvZGV9LAorCSAiVHJhbnNsYXRpb24iLCBhY3BpX2dibF90dHBfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8uaW8udHJhbnNsYXRpb25fdHlwZSksCi0JICJUcmFuc2xhdGlvbiBUeXBlIiwgYWNwaV9nYmxfVFJTZGVjb2RlfQorCSAiVHJhbnNsYXRpb24gVHlwZSIsIGFjcGlfZ2JsX3Ryc19kZWNvZGV9CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2luZm8uYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNpbmZvLmMKaW5kZXggZDlhZTY0Yi4uOWU3YWUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2luZm8uYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzaW5mby5jCkBAIC0xNDEsNiArMTQxLDcgQEAKIAlhY3BpX3JzX2R1bXBfZ2VuZXJpY19yZWcsCS8qIEFDUElfUkVTT1VSQ0VfVFlQRV9HRU5FUklDX1JFR0lTVEVSICovCiB9OwogI2VuZGlmCisKICNlbmRpZgkvKiBBQ1BJX0ZVVFVSRV9VU0FHRSAqLwogLyoKICAqIEJhc2Ugc2l6ZXMgZm9yIGV4dGVybmFsIEFNTCByZXNvdXJjZSBkZXNjcmlwdG9ycywgaW5kZXhlZCBieSBpbnRlcm5hbCB0eXBlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2xpc3QuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNsaXN0LmMKaW5kZXggMTQzNGU3OC4uMjk0MjNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2xpc3QuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzbGlzdC5jCkBAIC01MSw3NiArNTEsNjIgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXMKICAqCi0gKiBQQVJBTUVURVJTOiAgQW1sICAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIHJlc291cmNlIGJ5dGUgc3RyZWFtCi0gKiAgICAgICAgICAgICAgYW1sX2xlbmd0aCAgICAgICAgICAtIExlbmd0aCBvZiBBbWwKLSAqICAgICAgICAgICAgICBvdXRwdXRfYnVmZmVyICAgICAgIC0gUG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSBvdXRwdXQgc3RydWN0dXJlcworICogUEFSQU1FVEVSUzogIGFjcGlfd2Fsa19hbWxfY2FsbGJhY2sKKyAqICAgICAgICAgICAgICByZXNvdXJjZV9wdHIgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIG91dHB1dCBzdHJ1Y3R1cmVzCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBUYWtlcyB0aGUgcmVzb3VyY2UgYnl0ZSBzdHJlYW0gYW5kIHBhcnNlcyBpdCwgY3JlYXRpbmcgYQotICogICAgICAgICAgICAgIGxpbmtlZCBsaXN0IG9mIHJlc291cmNlcyBpbiB0aGUgY2FsbGVyJ3Mgb3V0cHV0IGJ1ZmZlcgorICogREVTQ1JJUFRJT046IENvbnZlcnQgYW4gQU1MIHJlc291cmNlIHRvIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICogICAgICAgICAgICAgIHJlc291cmNlIHRoYXQgaXMgYWxpZ25lZCBhbmQgZWFzaWVyIHRvIGFjY2Vzcy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogYWNwaV9zdGF0dXMKLWFjcGlfcnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2VzKHU4ICogYW1sLCB1MzIgYW1sX2xlbmd0aCwgdTggKiBvdXRwdXRfYnVmZmVyKQorYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXModTggKiBhbWwsCisJCQkJIHUzMiBsZW5ndGgsCisJCQkJIHUzMiBvZmZzZXQsIHU4IHJlc291cmNlX2luZGV4LCB2b2lkICoqY29udGV4dCkKIHsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UgPSAodm9pZCAqKW91dHB1dF9idWZmZXI7CisJc3RydWN0IGFjcGlfcmVzb3VyY2UgKipyZXNvdXJjZV9wdHIgPQorCSAgICBBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlLCBjb250ZXh0KTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2U7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXU4IHJlc291cmNlX2luZGV4OwotCXU4ICplbmRfYW1sOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2VzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXMpOwogCi0JZW5kX2FtbCA9IGFtbCArIGFtbF9sZW5ndGg7Ci0KLQkvKiBMb29wIHVudGlsIGVuZC1vZi1idWZmZXIgb3IgYW4gZW5kX3RhZyBpcyBmb3VuZCAqLwotCi0Jd2hpbGUgKGFtbCA8IGVuZF9hbWwpIHsKLQkJLyogVmFsaWRhdGUgdGhlIFJlc291cmNlIFR5cGUgYW5kIFJlc291cmNlIExlbmd0aCAqLwotCi0JCXN0YXR1cyA9IGFjcGlfdXRfdmFsaWRhdGVfcmVzb3VyY2UoYW1sLCAmcmVzb3VyY2VfaW5kZXgpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQl9Ci0KLQkJLyogQ29udmVydCB0aGUgQU1MIGJ5dGUgc3RyZWFtIHJlc291cmNlIHRvIGEgbG9jYWwgcmVzb3VyY2Ugc3RydWN0ICovCi0KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfcnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2UocmVzb3VyY2UsCi0JCQkJCQkgICAgQUNQSV9DQVNUX1BUUih1bmlvbgotCQkJCQkJCQkgIGFtbF9yZXNvdXJjZSwKLQkJCQkJCQkJICBhbWwpLAotCQkJCQkJICAgIGFjcGlfZ2JsX2dldF9yZXNvdXJjZV9kaXNwYXRjaAotCQkJCQkJICAgIFtyZXNvdXJjZV9pbmRleF0pOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCi0JCQkJCSJDb3VsZCBub3QgY29udmVydCBBTUwgcmVzb3VyY2UgKFR5cGUgJVgpIiwKLQkJCQkJKmFtbCkpOwotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCX0KLQotCQkvKiBOb3JtYWwgZXhpdCBvbiBjb21wbGV0aW9uIG9mIGFuIGVuZF90YWcgcmVzb3VyY2UgZGVzY3JpcHRvciAqLwotCi0JCWlmIChhY3BpX3V0X2dldF9yZXNvdXJjZV90eXBlKGFtbCkgPT0KLQkJICAgIEFDUElfUkVTT1VSQ0VfTkFNRV9FTkRfVEFHKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCQl9Ci0KLQkJLyogUG9pbnQgdG8gdGhlIG5leHQgaW5wdXQgQU1MIHJlc291cmNlICovCi0KLQkJYW1sICs9IGFjcGlfdXRfZ2V0X2Rlc2NyaXB0b3JfbGVuZ3RoKGFtbCk7Ci0KLQkJLyogUG9pbnQgdG8gdGhlIG5leHQgc3RydWN0dXJlIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCi0KLQkJcmVzb3VyY2UgPQotCQkgICAgQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlLCByZXNvdXJjZSwKLQkJCQkgcmVzb3VyY2UtPmxlbmd0aCk7CisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBpbnB1dCBidWZmZXIgYW5kIGFsbCBzdWJzZXF1ZW50IHBvaW50ZXJzIGludG8gaXQKKwkgKiBhcmUgYWxpZ25lZCBvbiBhIG5hdGl2ZSB3b3JkIGJvdW5kYXJ5LiBNb3N0IGltcG9ydGFudCBvbiBJQTY0CisJICovCisJcmVzb3VyY2UgPSAqcmVzb3VyY2VfcHRyOworCWlmIChBQ1BJX0lTX01JU0FMSUdORUQocmVzb3VyY2UpKSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICJNaXNhbGlnbmVkIHJlc291cmNlIHBvaW50ZXIgJXAiLCByZXNvdXJjZSkpOwogCX0KIAotCS8qIERpZCBub3QgZmluZCBhbiBlbmRfdGFnIHJlc291cmNlIGRlc2NyaXB0b3IgKi8KKwkvKiBDb252ZXJ0IHRoZSBBTUwgYnl0ZSBzdHJlYW0gcmVzb3VyY2UgdG8gYSBsb2NhbCByZXNvdXJjZSBzdHJ1Y3QgKi8KIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTk9fUkVTT1VSQ0VfRU5EX1RBRyk7CisJc3RhdHVzID0KKwkgICAgYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZShyZXNvdXJjZSwKKwkJCQkJICAgIEFDUElfQ0FTVF9QVFIodW5pb24gYW1sX3Jlc291cmNlLAorCQkJCQkJCSAgYW1sKSwKKwkJCQkJICAgIGFjcGlfZ2JsX2dldF9yZXNvdXJjZV9kaXNwYXRjaAorCQkJCQkgICAgW3Jlc291cmNlX2luZGV4XSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJIkNvdWxkIG5vdCBjb252ZXJ0IEFNTCByZXNvdXJjZSAoVHlwZSAlWCkiLAorCQkJCSphbWwpKTsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9SRVNPVVJDRVMsCisJCQkgICJUeXBlICUuMlgsIEFtbExlbmd0aCAlLjJYIEludGVybmFsTGVuZ3RoICUuMlhcbiIsCisJCQkgIGFjcGlfdXRfZ2V0X3Jlc291cmNlX3R5cGUoYW1sKSwgbGVuZ3RoLAorCQkJICByZXNvdXJjZS0+bGVuZ3RoKSk7CisKKwkvKiBQb2ludCB0byB0aGUgbmV4dCBzdHJ1Y3R1cmUgaW4gdGhlIG91dHB1dCBidWZmZXIgKi8KKworCSpyZXNvdXJjZV9wdHIgPSBBQ1BJX0FERF9QVFIodm9pZCwgcmVzb3VyY2UsIHJlc291cmNlLT5sZW5ndGgpOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNTAsMTEgKzEzNiwxMiBAQAogCXU4ICplbmRfYW1sID0gb3V0cHV0X2J1ZmZlciArIGFtbF9zaXplX25lZWRlZDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJyc19jb252ZXJ0X3Jlc291cmNlc190b19hbWwiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2NvbnZlcnRfcmVzb3VyY2VzX3RvX2FtbCk7CiAKIAkvKiBXYWxrIHRoZSByZXNvdXJjZSBkZXNjcmlwdG9yIGxpc3QsIGNvbnZlcnQgZWFjaCBkZXNjcmlwdG9yICovCiAKIAl3aGlsZSAoYW1sIDwgZW5kX2FtbCkgeworCiAJCS8qIFZhbGlkYXRlIHRoZSAoaW50ZXJuYWwpIFJlc291cmNlIFR5cGUgKi8KIAogCQlpZiAocmVzb3VyY2UtPnR5cGUgPiBBQ1BJX1JFU09VUkNFX1RZUEVfTUFYKSB7CkBAIC0xOTEsNiArMTc4LDcgQEAKIAkJLyogQ2hlY2sgZm9yIGVuZC1vZi1saXN0LCBub3JtYWwgZXhpdCAqLwogCiAJCWlmIChyZXNvdXJjZS0+dHlwZSA9PSBBQ1BJX1JFU09VUkNFX1RZUEVfRU5EX1RBRykgeworCiAJCQkvKiBBbiBFbmQgVGFnIGluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBSZXNvdXJjZSBUZW1wbGF0ZSAqLwogCiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc21pc2MuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNtaXNjLmMKaW5kZXggZWQ4NjZjZi4uZmFmNmUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc21pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzbWlzYy5jCkBAIC04MSw5ICs4MSwxMCBAQAogCXUxNiBpdGVtX2NvdW50ID0gMDsKIAl1MTYgdGVtcDE2ID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9yZXNvdXJjZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2UpOwogCiAJaWYgKCgoYWNwaV9uYXRpdmVfdWludCkgcmVzb3VyY2UpICYgMHgzKSB7CisKIAkJLyogRWFjaCBpbnRlcm5hbCByZXNvdXJjZSBzdHJ1Y3QgaXMgZXhwZWN0ZWQgdG8gYmUgMzItYml0IGFsaWduZWQgKi8KIAogCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCkBAIC0yOTUsOSArMjk2LDExIEBACiAKICAgICAgIGV4aXQ6CiAJaWYgKCFmbGFnc19tb2RlKSB7Ci0JCS8qIFJvdW5kIHRoZSByZXNvdXJjZSBzdHJ1Y3QgbGVuZ3RoIHVwIHRvIHRoZSBuZXh0IDMyLWJpdCBib3VuZGFyeSAqLwogCi0JCXJlc291cmNlLT5sZW5ndGggPSBBQ1BJX1JPVU5EX1VQX3RvXzMyX2JJVFMocmVzb3VyY2UtPmxlbmd0aCk7CisJCS8qIFJvdW5kIHRoZSByZXNvdXJjZSBzdHJ1Y3QgbGVuZ3RoIHVwIHRvIHRoZSBuZXh0IGJvdW5kYXJ5ICgzMiBvciA2NCkgKi8KKworCQlyZXNvdXJjZS0+bGVuZ3RoID0KKwkJICAgICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQocmVzb3VyY2UtPmxlbmd0aCk7CiAJfQogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CkBAIC0zMjksNyArMzMyLDcgQEAKIAl1MTYgdGVtcDE2ID0gMDsKIAl1MTYgaXRlbV9jb3VudCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJyc19jb252ZXJ0X3Jlc291cmNlX3RvX2FtbCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocnNfY29udmVydF9yZXNvdXJjZV90b19hbWwpOwogCiAJLyoKIAkgKiBGaXJzdCB0YWJsZSBlbnRyeSBtdXN0IGJlIEFDUElfUlNDX0lOSVR4eHggYW5kIG11c3QgY29udGFpbiB0aGUKQEAgLTUzNSw2ICs1MzgsNyBAQAogCiByZXNvdXJjZS0+ZGF0YS5leHRlbmRlZF9pcnEuaW50ZXJydXB0X2NvdW50ID0gdGVtcDg7CiBpZiAodGVtcDggPCAxKSB7CisKIAkvKiBNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIElSUSAqLwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9CQURfUkVTT1VSQ0VfTEVOR1RIKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnN1dGlscy5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3V0aWxzLmMKaW5kZXggMjViNWFlZC4uYTljYmVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3V0aWxzLmMKQEAgLTIwNSw2ICsyMDUsNyBAQAogCS8qIExlbmd0aCBpcyBzdG9yZWQgZGlmZmVyZW50bHkgZm9yIGxhcmdlIGFuZCBzbWFsbCBkZXNjcmlwdG9ycyAqLwogCiAJaWYgKGFtbC0+c21hbGxfaGVhZGVyLmRlc2NyaXB0b3JfdHlwZSAmIEFDUElfUkVTT1VSQ0VfTkFNRV9MQVJHRSkgeworCiAJCS8qIExhcmdlIGRlc2NyaXB0b3IgLS0gYnl0ZXMgMS0yIGNvbnRhaW4gdGhlIDE2LWJpdCBsZW5ndGggKi8KIAogCQlBQ1BJX01PVkVfMTZfVE9fMTYoJmFtbC0+bGFyZ2VfaGVhZGVyLnJlc291cmNlX2xlbmd0aCwKQEAgLTI5OCw3ICsyOTksOCBAQAogICogICAgICAgICAgICAgIHN0cmluZ19wdHIgICAgICAgICAgLSAob3B0aW9uYWwpIHdoZXJlIHRvIHN0b3JlIHRoZSBhY3R1YWwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc291cmNlIHN0cmluZwogICoKLSAqIFJFVFVSTjogICAgICBMZW5ndGggb2YgdGhlIHN0cmluZyBwbHVzIE5VTEwgdGVybWluYXRvciwgcm91bmRlZCB1cCB0byAzMiBiaXQKKyAqIFJFVFVSTjogICAgICBMZW5ndGggb2YgdGhlIHN0cmluZyBwbHVzIE5VTEwgdGVybWluYXRvciwgcm91bmRlZCB1cCB0byBuYXRpdmUKKyAqICAgICAgICAgICAgICB3b3JkIGJvdW5kYXJ5CiAgKgogICogREVTQ1JJUFRJT046IENvcHkgdGhlIG9wdGlvbmFsIHJlc291cmNlX3NvdXJjZSBkYXRhIGZyb20gYSByYXcgQU1MIGRlc2NyaXB0b3IKICAqICAgICAgICAgICAgICB0byBhbiBpbnRlcm5hbCByZXNvdXJjZSBkZXNjcmlwdG9yCkBAIC0zMjgsNiArMzMwLDcgQEAKIAkgKiB3ZSBhZGQgMSB0byB0aGUgbWluaW11bSBsZW5ndGguCiAJICovCiAJaWYgKHRvdGFsX2xlbmd0aCA+IChhY3BpX3JzZGVzY19zaXplKSAobWluaW11bV9sZW5ndGggKyAxKSkgeworCiAJCS8qIEdldCB0aGUgcmVzb3VyY2Vfc291cmNlX2luZGV4ICovCiAKIAkJcmVzb3VyY2Vfc291cmNlLT5pbmRleCA9IGFtbF9yZXNvdXJjZV9zb3VyY2VbMF07CkBAIC0zNDQsMjMgKzM0NywyNiBAQAogCQl9CiAKIAkJLyoKLQkJICogSW4gb3JkZXIgZm9yIHRoZSBzdHJ1Y3Rfc2l6ZSB0byBmYWxsIG9uIGEgMzItYml0IGJvdW5kYXJ5LCBjYWxjdWxhdGUKLQkJICogdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nICgrMSBmb3IgdGhlIE5VTEwgdGVybWluYXRvcikgYW5kIGV4cGFuZCB0aGUKLQkJICogc3RydWN0X3NpemUgdG8gdGhlIG5leHQgMzItYml0IGJvdW5kYXJ5LgorCQkgKiBJbiBvcmRlciBmb3IgdGhlIFJlc291cmNlIGxlbmd0aCB0byBiZSBhIG11bHRpcGxlIG9mIHRoZSBuYXRpdmUKKwkJICogd29yZCwgY2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAoKzEgZm9yIE5VTEwgdGVybWluYXRvcikKKwkJICogYW5kIGV4cGFuZCB0byB0aGUgbmV4dCB3b3JkIG11bHRpcGxlLgogCQkgKgogCQkgKiBaZXJvIHRoZSBlbnRpcmUgYXJlYSBvZiB0aGUgYnVmZmVyLgogCQkgKi8KIAkJdG90YWxfbGVuZ3RoID0KLQkJICAgIEFDUElfUk9VTkRfVVBfdG9fMzJfYklUUyhBQ1BJX1NUUkxFTgotCQkJCQkgICAgICgoY2hhciAqKSZhbWxfcmVzb3VyY2Vfc291cmNlWzFdKSArCi0JCQkJCSAgICAgMSk7CisJCSAgICAodTMyKQorCQkgICAgQUNQSV9TVFJMRU4oQUNQSV9DQVNUX1BUUihjaGFyLCAmYW1sX3Jlc291cmNlX3NvdXJjZVsxXSkpICsKKwkJICAgIDE7CisJCXRvdGFsX2xlbmd0aCA9ICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQodG90YWxfbGVuZ3RoKTsKKwogCQlBQ1BJX01FTVNFVChyZXNvdXJjZV9zb3VyY2UtPnN0cmluZ19wdHIsIDAsIHRvdGFsX2xlbmd0aCk7CiAKIAkJLyogQ29weSB0aGUgcmVzb3VyY2Vfc291cmNlIHN0cmluZyB0byB0aGUgZGVzdGluYXRpb24gKi8KIAogCQlyZXNvdXJjZV9zb3VyY2UtPnN0cmluZ19sZW5ndGggPQogCQkgICAgYWNwaV9yc19zdHJjcHkocmVzb3VyY2Vfc291cmNlLT5zdHJpbmdfcHRyLAotCQkJCSAgIChjaGFyICopJmFtbF9yZXNvdXJjZV9zb3VyY2VbMV0pOworCQkJCSAgIEFDUElfQ0FTVF9QVFIoY2hhciwKKwkJCQkJCSAmYW1sX3Jlc291cmNlX3NvdXJjZVsxXSkpOwogCiAJCXJldHVybiAoKGFjcGlfcnNfbGVuZ3RoKSB0b3RhbF9sZW5ndGgpOwogCX0KQEAgLTQwNSw2ICs0MTEsNyBAQAogCS8qIE5vbi16ZXJvIHN0cmluZyBsZW5ndGggaW5kaWNhdGVzIHByZXNlbmNlIG9mIGEgcmVzb3VyY2Vfc291cmNlICovCiAKIAlpZiAocmVzb3VyY2Vfc291cmNlLT5zdHJpbmdfbGVuZ3RoKSB7CisKIAkJLyogUG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgQU1MIGRlc2NyaXB0b3IgKi8KIAogCQlhbWxfcmVzb3VyY2Vfc291cmNlID0gQUNQSV9BRERfUFRSKHU4LCBhbWwsIG1pbmltdW1fbGVuZ3RoKTsKQEAgLTQxNSw3ICs0MjIsNyBAQAogCiAJCS8qIENvcHkgdGhlIHJlc291cmNlX3NvdXJjZSBzdHJpbmcgKi8KIAotCQlBQ1BJX1NUUkNQWSgoY2hhciAqKSZhbWxfcmVzb3VyY2Vfc291cmNlWzFdLAorCQlBQ1BJX1NUUkNQWShBQ1BJX0NBU1RfUFRSKGNoYXIsICZhbWxfcmVzb3VyY2Vfc291cmNlWzFdKSwKIAkJCSAgICByZXNvdXJjZV9zb3VyY2UtPnN0cmluZ19wdHIpOwogCiAJCS8qCkBAIC00MzUsOSArNDQyLDkgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19nZXRfcHJ0X21ldGhvZF9kYXRhCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIGEgaGFuZGxlIHRvIHRoZSBjb250YWluaW5nIG9iamVjdAotICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cworICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgICAgICAtIERldmljZSBub2RlCisgKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtNDUwLDE4ICs0NTcsMTkgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9wcnRfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKiByZXRfYnVmZmVyKQorYWNwaV9yc19nZXRfcHJ0X21ldGhvZF9kYXRhKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICogbm9kZSwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKiByZXRfYnVmZmVyKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9wcnRfbWV0aG9kX2RhdGEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2dldF9wcnRfbWV0aG9kX2RhdGEpOwogCiAJLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLwogCiAJLyogRXhlY3V0ZSB0aGUgbWV0aG9kLCBubyBwYXJhbWV0ZXJzICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19QUlQsCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3Qobm9kZSwgTUVUSE9EX05BTUVfX1BSVCwKIAkJCQkJIEFDUElfQlRZUEVfUEFDS0FHRSwgJm9ial9kZXNjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC00ODMsOSArNDkxLDkgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19nZXRfY3JzX21ldGhvZF9kYXRhCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIGEgaGFuZGxlIHRvIHRoZSBjb250YWluaW5nIG9iamVjdAotICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cworICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgICAgICAtIERldmljZSBub2RlCisgKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtNDk4LDE4ICs1MDYsMTkgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9jcnNfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpCithY3BpX3JzX2dldF9jcnNfbWV0aG9kX2RhdGEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCisJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9jcnNfbWV0aG9kX2RhdGEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2dldF9jcnNfbWV0aG9kX2RhdGEpOwogCiAJLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLwogCiAJLyogRXhlY3V0ZSB0aGUgbWV0aG9kLCBubyBwYXJhbWV0ZXJzICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19DUlMsCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3Qobm9kZSwgTUVUSE9EX05BTUVfX0NSUywKIAkJCQkJIEFDUElfQlRZUEVfQlVGRkVSLCAmb2JqX2Rlc2MpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTUyMiw3ICs1MzEsNyBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfcnNfY3JlYXRlX3Jlc291cmNlX2xpc3Qob2JqX2Rlc2MsIHJldF9idWZmZXIpOwogCi0JLyogb24gZXhpdCwgd2UgbXVzdCBkZWxldGUgdGhlIG9iamVjdCByZXR1cm5lZCBieSBldmFsdWF0ZV9vYmplY3QgKi8KKwkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGV2YWx1YXRlX29iamVjdCAqLwogCiAJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTUzMiw5ICs1NDEsOSBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEKICAqCi0gKiBQQVJBTUVURVJTOiAgSGFuZGxlICAgICAgICAgIC0gYSBoYW5kbGUgdG8gdGhlIGNvbnRhaW5pbmcgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gYSBwb2ludGVyIHRvIGEgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzCisgKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAgICAgIC0gRGV2aWNlIG5vZGUKKyAqICAgICAgICAgICAgICByZXRfYnVmZmVyICAgICAgLSBQb2ludGVyIHRvIGEgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cwogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC01NDgsMTggKzU1NywxOSBAQAogCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpCithY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCisJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9wcnNfbWV0aG9kX2RhdGEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2dldF9wcnNfbWV0aG9kX2RhdGEpOwogCiAJLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLwogCiAJLyogRXhlY3V0ZSB0aGUgbWV0aG9kLCBubyBwYXJhbWV0ZXJzICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19QUlMsCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3Qobm9kZSwgTUVUSE9EX05BTUVfX1BSUywKIAkJCQkJIEFDUElfQlRZUEVfQlVGRkVSLCAmb2JqX2Rlc2MpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTU3Miw3ICs1ODIsNyBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfcnNfY3JlYXRlX3Jlc291cmNlX2xpc3Qob2JqX2Rlc2MsIHJldF9idWZmZXIpOwogCi0JLyogb24gZXhpdCwgd2UgbXVzdCBkZWxldGUgdGhlIG9iamVjdCByZXR1cm5lZCBieSBldmFsdWF0ZV9vYmplY3QgKi8KKwkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGV2YWx1YXRlX29iamVjdCAqLwogCiAJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTU4MywxMCArNTkzLDEwIEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfcnNfZ2V0X21ldGhvZF9kYXRhCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIGEgaGFuZGxlIHRvIHRoZSBjb250YWluaW5nIG9iamVjdAorICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIEhhbmRsZSB0byB0aGUgY29udGFpbmluZyBvYmplY3QKICAqICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgLSBQYXRoIHRvIG1ldGhvZCwgcmVsYXRpdmUgdG8gSGFuZGxlCi0gKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gYSBwb2ludGVyIHRvIGEgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzCisgKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtNjA1LDcgKzYxNSw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfZ2V0X21ldGhvZF9kYXRhIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19nZXRfbWV0aG9kX2RhdGEpOwogCiAJLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLwogCkBAIC02MzQsOSArNjQ0LDkgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIGEgaGFuZGxlIHRvIHRoZSBjb250YWluaW5nIG9iamVjdAotICogICAgICAgICAgICAgIGluX2J1ZmZlciAgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgb2YgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIKKyAqIFBBUkFNRVRFUlM6ICBOb2RlICAgICAgICAgICAgLSBEZXZpY2Ugbm9kZQorICogICAgICAgICAgICAgIGluX2J1ZmZlciAgICAgICAtIFBvaW50ZXIgdG8gYSBidWZmZXIgc3RydWN0dXJlIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcgogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC02NDYsMjMgKzY1NiwzNyBAQAogICogICAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBmYWlscyBhbiBhcHByb3ByaWF0ZSBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZAogICogICAgICAgICAgICAgIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIGNhbGxlcnMgYnVmZmVyIGlzIHVuZGVmaW5lZC4KICAqCisgKiBOb3RlOiBQYXJhbWV0ZXJzIGd1YXJhbnRlZWQgdmFsaWQgYnkgY2FsbGVyCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMKLWFjcGlfcnNfc2V0X3Nyc19tZXRob2RfZGF0YShhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2J1ZmZlciAqaW5fYnVmZmVyKQorYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlLAorCQkJICAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqaW5fYnVmZmVyKQogewotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcGFyYW1zWzJdOworCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqYXJnc1syXTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX3NldF9zcnNfbWV0aG9kX2RhdGEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX3NldF9zcnNfbWV0aG9kX2RhdGEpOwogCi0JLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBldmFsdWF0aW9uIGluZm9ybWF0aW9uIGJsb2NrICovCisKKwlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8pKTsKKwlpZiAoIWluZm8pIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CisJfQorCisJaW5mby0+cHJlZml4X25vZGUgPSBub2RlOworCWluZm8tPnBhdGhuYW1lID0gTUVUSE9EX05BTUVfX1NSUzsKKwlpbmZvLT5wYXJhbWV0ZXJzID0gYXJnczsKKwlpbmZvLT5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKKwlpbmZvLT5mbGFncyA9IEFDUElfSUdOT1JFX1JFVFVSTl9WQUxVRTsKIAogCS8qCiAJICogVGhlIGluX2J1ZmZlciBwYXJhbWV0ZXIgd2lsbCBwb2ludCB0byBhIGxpbmtlZCBsaXN0IG9mCi0JICogcmVzb3VyY2UgcGFyYW1ldGVycy4gIEl0IG5lZWRzIHRvIGJlIGZvcm1hdHRlZCBpbnRvIGEKKwkgKiByZXNvdXJjZSBwYXJhbWV0ZXJzLiBJdCBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgaW50byBhCiAJICogYnl0ZSBzdHJlYW0gdG8gYmUgc2VudCBpbiBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIgdG8gX1NSUwogCSAqCiAJICogQ29udmVydCB0aGUgbGlua2VkIGxpc3QgaW50byBhIGJ5dGUgc3RyZWFtCkBAIC02NzAsNDEgKzY5NCwzNiBAQAogCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0xPQ0FMX0JVRkZFUjsKIAlzdGF0dXMgPSBhY3BpX3JzX2NyZWF0ZV9hbWxfcmVzb3VyY2VzKGluX2J1ZmZlci0+cG9pbnRlciwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JLyogSW5pdCB0aGUgcGFyYW0gb2JqZWN0ICovCisJLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBtZXRob2QgcGFyYW1ldGVyIG9iamVjdCAqLwogCi0JcGFyYW1zWzBdID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9CVUZGRVIpOwotCWlmICghcGFyYW1zWzBdKSB7Ci0JCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCWFyZ3NbMF0gPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoQUNQSV9UWVBFX0JVRkZFUik7CisJaWYgKCFhcmdzWzBdKSB7CisJCS8qCisJCSAqIE11c3QgZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBhYm92ZSAob3RoZXJ3aXNlIGl0IGlzIGZyZWVkCisJCSAqIGxhdGVyKQorCQkgKi8KKwkJQUNQSV9GUkVFKGJ1ZmZlci5wb2ludGVyKTsKKwkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JLyogU2V0IHVwIHRoZSBwYXJhbWV0ZXIgb2JqZWN0ICovCisJYXJnc1swXS0+YnVmZmVyLmxlbmd0aCA9ICh1MzIpIGJ1ZmZlci5sZW5ndGg7CisJYXJnc1swXS0+YnVmZmVyLnBvaW50ZXIgPSBidWZmZXIucG9pbnRlcjsKKwlhcmdzWzBdLT5jb21tb24uZmxhZ3MgPSBBT1BPQkpfREFUQV9WQUxJRDsKKwlhcmdzWzFdID0gTlVMTDsKIAotCXBhcmFtc1swXS0+YnVmZmVyLmxlbmd0aCA9ICh1MzIpIGJ1ZmZlci5sZW5ndGg7Ci0JcGFyYW1zWzBdLT5idWZmZXIucG9pbnRlciA9IGJ1ZmZlci5wb2ludGVyOwotCXBhcmFtc1swXS0+Y29tbW9uLmZsYWdzID0gQU9QT0JKX0RBVEFfVkFMSUQ7Ci0JcGFyYW1zWzFdID0gTlVMTDsKKwkvKiBFeGVjdXRlIHRoZSBtZXRob2QsIG5vIHJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCAqLwogCi0JaW5mby5ub2RlID0gaGFuZGxlOwotCWluZm8ucGFyYW1ldGVycyA9IHBhcmFtczsKLQlpbmZvLnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOworCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mbyk7CiAKLQkvKiBFeGVjdXRlIHRoZSBtZXRob2QsIG5vIHJldHVybiB2YWx1ZSAqLworCS8qIENsZWFuIHVwIGFuZCByZXR1cm4gdGhlIHN0YXR1cyBmcm9tIGFjcGlfbnNfZXZhbHVhdGUgKi8KIAotCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfcmVsYXRpdmUoTUVUSE9EX05BTUVfX1NSUywgJmluZm8pOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkvKiBEZWxldGUgYW55IHJldHVybiBvYmplY3QgKGVzcGVjaWFsbHkgaWYgaW1wbGljaXRfcmV0dXJuIGlzIGVuYWJsZWQpICovCisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGFyZ3NbMF0pOwogCi0JCWlmIChpbmZvLnJldHVybl9vYmplY3QpIHsKLQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShpbmZvLnJldHVybl9vYmplY3QpOwotCQl9Ci0JfQotCi0JLyogQ2xlYW4gdXAgYW5kIHJldHVybiB0aGUgc3RhdHVzIGZyb20gYWNwaV9uc19ldmFsdWF0ZV9yZWxhdGl2ZSAqLwotCi0JYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHBhcmFtc1swXSk7CisgICAgICBjbGVhbnVwOgorCUFDUElfRlJFRShpbmZvKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKaW5kZXggODhiNjcwNy4uMTk5OWUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKQEAgLTQxLDEwICs0MSw5IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3Jlc3JjLmg+CisjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9SRVNPVVJDRVMKIEFDUElfTU9EVUxFX05BTUUoInJzeGZhY2UiKQpAQCAtNjgsMTkgKzY3LDgwIEBACiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfcnNfbWF0Y2hfdmVuZG9yX3Jlc291cmNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCk7CiAKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9yc192YWxpZGF0ZV9wYXJhbWV0ZXJzKGFjcGlfaGFuZGxlIGRldmljZV9oYW5kbGUsCisJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpidWZmZXIsCisJCQkgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipyZXR1cm5fbm9kZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfcnNfdmFsaWRhdGVfcGFyYW1ldGVycworICoKKyAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBIYW5kbGUgdG8gYSBkZXZpY2UKKyAqICAgICAgICAgICAgICBCdWZmZXIgICAgICAgICAgLSBQb2ludGVyIHRvIGEgZGF0YSBidWZmZXIKKyAqICAgICAgICAgICAgICByZXR1cm5fbm9kZSAgICAgLSBQb2ludGVyIHRvIHdoZXJlIHRoZSBkZXZpY2Ugbm9kZSBpcyByZXR1cm5lZAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ29tbW9uIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciByZXNvdXJjZSBpbnRlcmZhY2VzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX3JzX3ZhbGlkYXRlX3BhcmFtZXRlcnMoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKnJldHVybl9ub2RlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UocnNfdmFsaWRhdGVfcGFyYW1ldGVycyk7CisKKwkvKgorCSAqIE11c3QgaGF2ZSBhIHZhbGlkIGhhbmRsZSB0byBhbiBBQ1BJIGRldmljZQorCSAqLworCWlmICghZGV2aWNlX2hhbmRsZSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJfQorCisJbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGRldmljZV9oYW5kbGUpOworCWlmICghbm9kZSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJfQorCisJaWYgKG5vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0RFVklDRSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfVFlQRSk7CisJfQorCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgdXNlciBidWZmZXIgb2JqZWN0CisJICoKKwkgKiBpZiB0aGVyZSBpcyBhIG5vbi16ZXJvIGJ1ZmZlciBsZW5ndGggd2UgYWxzbyBuZWVkIGEgdmFsaWQgcG9pbnRlciBpbgorCSAqIHRoZSBidWZmZXIuIElmIGl0J3MgYSB6ZXJvIGJ1ZmZlciBsZW5ndGgsIHdlJ2xsIGJlIHJldHVybmluZyB0aGUKKwkgKiBuZWVkZWQgYnVmZmVyIHNpemUgKGxhdGVyKSwgc28ga2VlcCBnb2luZy4KKwkgKi8KKwlzdGF0dXMgPSBhY3BpX3V0X3ZhbGlkYXRlX2J1ZmZlcihidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkqcmV0dXJuX25vZGUgPSBub2RlOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X2lycV9yb3V0aW5nX3RhYmxlCiAgKgotICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAtIGEgaGFuZGxlIHRvIHRoZSBCdXMgZGV2aWNlIHdlIGFyZSBxdWVyeWluZwotICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZQorICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAtIEhhbmRsZSB0byB0aGUgQnVzIGRldmljZSB3ZSBhcmUgcXVlcnlpbmcKKyAqICAgICAgICAgICAgICByZXRfYnVmZmVyICAgICAgLSBQb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCByZXNvdXJjZXMgZm9yIHRoZSBkZXZpY2UKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGdldCB0aGUgSVJRIHJvdXRpbmcgdGFibGUgZm9yIGEKLSAqICAgICAgICAgICAgICBzcGVjaWZpYyBidXMuICBUaGUgY2FsbGVyIG11c3QgZmlyc3QgYWNxdWlyZSBhIGhhbmRsZSBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgZGVzaXJlZCBidXMuICBUaGUgcm91dGluZSB0YWJsZSBpcyBwbGFjZWQgaW4gdGhlIGJ1ZmZlciBwb2ludGVkCisgKiAgICAgICAgICAgICAgc3BlY2lmaWMgYnVzLiBUaGUgY2FsbGVyIG11c3QgZmlyc3QgYWNxdWlyZSBhIGhhbmRsZSBmb3IgdGhlCisgKiAgICAgICAgICAgICAgZGVzaXJlZCBidXMuIFRoZSByb3V0aW5lIHRhYmxlIGlzIHBsYWNlZCBpbiB0aGUgYnVmZmVyIHBvaW50ZWQKICAqICAgICAgICAgICAgICB0byBieSB0aGUgcmV0X2J1ZmZlciB2YXJpYWJsZSBwYXJhbWV0ZXIuCiAgKgogICogICAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBmYWlscyBhbiBhcHByb3ByaWF0ZSBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZApAQCAtOTYsNDIgKzE1NiwzNyBAQAogCQkJICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X2lycV9yb3V0aW5nX3RhYmxlICIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfaXJxX3JvdXRpbmdfdGFibGUpOwogCi0JLyoKLQkgKiBNdXN0IGhhdmUgYSB2YWxpZCBoYW5kbGUgYW5kIGJ1ZmZlciwgU28gd2UgaGF2ZSB0byBoYXZlIGEgaGFuZGxlCi0JICogYW5kIGEgcmV0dXJuIGJ1ZmZlciBzdHJ1Y3R1cmUsIGFuZCBpZiB0aGVyZSBpcyBhIG5vbi16ZXJvIGJ1ZmZlciBsZW5ndGgKLQkgKiB3ZSBhbHNvIG5lZWQgYSB2YWxpZCBwb2ludGVyIGluIHRoZSBidWZmZXIuIElmIGl0J3MgYSB6ZXJvIGJ1ZmZlciBsZW5ndGgsCi0JICogd2UnbGwgYmUgcmV0dXJuaW5nIHRoZSBuZWVkZWQgYnVmZmVyIHNpemUsIHNvIGtlZXAgZ29pbmcuCi0JICovCi0JaWYgKCFkZXZpY2VfaGFuZGxlKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9CisJLyogVmFsaWRhdGUgcGFyYW1ldGVycyB0aGVuIGRpc3BhdGNoIHRvIGludGVybmFsIHJvdXRpbmUgKi8KIAotCXN0YXR1cyA9IGFjcGlfdXRfdmFsaWRhdGVfYnVmZmVyKHJldF9idWZmZXIpOworCXN0YXR1cyA9IGFjcGlfcnNfdmFsaWRhdGVfcGFyYW1ldGVycyhkZXZpY2VfaGFuZGxlLCByZXRfYnVmZmVyLCAmbm9kZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfcnNfZ2V0X3BydF9tZXRob2RfZGF0YShkZXZpY2VfaGFuZGxlLCByZXRfYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX3JzX2dldF9wcnRfbWV0aG9kX2RhdGEobm9kZSwgcmV0X2J1ZmZlcik7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9pcnFfcm91dGluZ190YWJsZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMKICAqCi0gKiBQQVJBTUVURVJTOiAgZGV2aWNlX2hhbmRsZSAgIC0gYSBoYW5kbGUgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIHRoZQorICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAtIEhhbmRsZSB0byB0aGUgZGV2aWNlIG9iamVjdCBmb3IgdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHdlIGFyZSBxdWVyeWluZwotICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZQorICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIFBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHJlc291cmNlcyBmb3IgdGhlIGRldmljZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IHJlc291cmNlcyBmb3IgYQotICogICAgICAgICAgICAgIHNwZWNpZmljIGRldmljZS4gIFRoZSBjYWxsZXIgbXVzdCBmaXJzdCBhY3F1aXJlIGEgaGFuZGxlIGZvcgotICogICAgICAgICAgICAgIHRoZSBkZXNpcmVkIGRldmljZS4gIFRoZSByZXNvdXJjZSBkYXRhIGlzIHBsYWNlZCBpbiB0aGUgYnVmZmVyCisgKiAgICAgICAgICAgICAgc3BlY2lmaWMgZGV2aWNlLiBUaGUgY2FsbGVyIG11c3QgZmlyc3QgYWNxdWlyZSBhIGhhbmRsZSBmb3IKKyAqICAgICAgICAgICAgICB0aGUgZGVzaXJlZCBkZXZpY2UuIFRoZSByZXNvdXJjZSBkYXRhIGlzIHBsYWNlZCBpbiB0aGUgYnVmZmVyCiAgKiAgICAgICAgICAgICAgcG9pbnRlZCB0byBieSB0aGUgcmV0X2J1ZmZlciB2YXJpYWJsZSBwYXJhbWV0ZXIuCiAgKgogICogICAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBmYWlscyBhbiBhcHByb3ByaWF0ZSBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZApAQCAtMTQxLDIzOSArMTk2LDEzMyBAQAogICogICAgICAgICAgICAgIHRoZSBvYmplY3QgaW5kaWNhdGVkIGJ5IHRoZSBwYXNzZWQgZGV2aWNlX2hhbmRsZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKIAkJCSAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2dldF9jdXJyZW50X3Jlc291cmNlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMpOwogCi0JLyoKLQkgKiBNdXN0IGhhdmUgYSB2YWxpZCBoYW5kbGUgYW5kIGJ1ZmZlciwgU28gd2UgaGF2ZSB0byBoYXZlIGEgaGFuZGxlCi0JICogYW5kIGEgcmV0dXJuIGJ1ZmZlciBzdHJ1Y3R1cmUsIGFuZCBpZiB0aGVyZSBpcyBhIG5vbi16ZXJvIGJ1ZmZlciBsZW5ndGgKLQkgKiB3ZSBhbHNvIG5lZWQgYSB2YWxpZCBwb2ludGVyIGluIHRoZSBidWZmZXIuIElmIGl0J3MgYSB6ZXJvIGJ1ZmZlciBsZW5ndGgsCi0JICogd2UnbGwgYmUgcmV0dXJuaW5nIHRoZSBuZWVkZWQgYnVmZmVyIHNpemUsIHNvIGtlZXAgZ29pbmcuCi0JICovCi0JaWYgKCFkZXZpY2VfaGFuZGxlKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9CisJLyogVmFsaWRhdGUgcGFyYW1ldGVycyB0aGVuIGRpc3BhdGNoIHRvIGludGVybmFsIHJvdXRpbmUgKi8KIAotCXN0YXR1cyA9IGFjcGlfdXRfdmFsaWRhdGVfYnVmZmVyKHJldF9idWZmZXIpOworCXN0YXR1cyA9IGFjcGlfcnNfdmFsaWRhdGVfcGFyYW1ldGVycyhkZXZpY2VfaGFuZGxlLCByZXRfYnVmZmVyLCAmbm9kZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfcnNfZ2V0X2Nyc19tZXRob2RfZGF0YShkZXZpY2VfaGFuZGxlLCByZXRfYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX3JzX2dldF9jcnNfbWV0aG9kX2RhdGEobm9kZSwgcmV0X2J1ZmZlcik7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2N1cnJlbnRfcmVzb3VyY2VzKQogCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3Bvc3NpYmxlX3Jlc291cmNlcwogICoKLSAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBhIGhhbmRsZSB0byB0aGUgZGV2aWNlIG9iamVjdCBmb3IgdGhlCisgKiBQQVJBTUVURVJTOiAgZGV2aWNlX2hhbmRsZSAgIC0gSGFuZGxlIHRvIHRoZSBkZXZpY2Ugb2JqZWN0IGZvciB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugd2UgYXJlIHF1ZXJ5aW5nCi0gKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gYSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlCisgKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gUG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcyBmb3IgdGhlIGRldmljZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgcG9zc2libGUgcmVzb3VyY2VzCi0gKiAgICAgICAgICAgICAgZm9yIGEgc3BlY2lmaWMgZGV2aWNlLiAgVGhlIGNhbGxlciBtdXN0IGZpcnN0IGFjcXVpcmUgYSBoYW5kbGUKLSAqICAgICAgICAgICAgICBmb3IgdGhlIGRlc2lyZWQgZGV2aWNlLiAgVGhlIHJlc291cmNlIGRhdGEgaXMgcGxhY2VkIGluIHRoZQorICogICAgICAgICAgICAgIGZvciBhIHNwZWNpZmljIGRldmljZS4gVGhlIGNhbGxlciBtdXN0IGZpcnN0IGFjcXVpcmUgYSBoYW5kbGUKKyAqICAgICAgICAgICAgICBmb3IgdGhlIGRlc2lyZWQgZGV2aWNlLiBUaGUgcmVzb3VyY2UgZGF0YSBpcyBwbGFjZWQgaW4gdGhlCiAgKiAgICAgICAgICAgICAgYnVmZmVyIHBvaW50ZWQgdG8gYnkgdGhlIHJldF9idWZmZXIgdmFyaWFibGUuCiAgKgogICogICAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBmYWlscyBhbiBhcHByb3ByaWF0ZSBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZAogICogICAgICAgICAgICAgIGFuZCB0aGUgdmFsdWUgb2YgcmV0X2J1ZmZlciBpcyB1bmRlZmluZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfcG9zc2libGVfcmVzb3VyY2VzKGFjcGlfaGFuZGxlIGRldmljZV9oYW5kbGUsCiAJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X3Bvc3NpYmxlX3Jlc291cmNlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfcG9zc2libGVfcmVzb3VyY2VzKTsKIAotCS8qCi0JICogTXVzdCBoYXZlIGEgdmFsaWQgaGFuZGxlIGFuZCBidWZmZXIsIFNvIHdlIGhhdmUgdG8gaGF2ZSBhIGhhbmRsZQotCSAqIGFuZCBhIHJldHVybiBidWZmZXIgc3RydWN0dXJlLCBhbmQgaWYgdGhlcmUgaXMgYSBub24temVybyBidWZmZXIgbGVuZ3RoCi0JICogd2UgYWxzbyBuZWVkIGEgdmFsaWQgcG9pbnRlciBpbiB0aGUgYnVmZmVyLiBJZiBpdCdzIGEgemVybyBidWZmZXIgbGVuZ3RoLAotCSAqIHdlJ2xsIGJlIHJldHVybmluZyB0aGUgbmVlZGVkIGJ1ZmZlciBzaXplLCBzbyBrZWVwIGdvaW5nLgotCSAqLwotCWlmICghZGV2aWNlX2hhbmRsZSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQorCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgdGhlbiBkaXNwYXRjaCB0byBpbnRlcm5hbCByb3V0aW5lICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X3ZhbGlkYXRlX2J1ZmZlcihyZXRfYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX3JzX3ZhbGlkYXRlX3BhcmFtZXRlcnMoZGV2aWNlX2hhbmRsZSwgcmV0X2J1ZmZlciwgJm5vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQlzdGF0dXMgPSBhY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEoZGV2aWNlX2hhbmRsZSwgcmV0X2J1ZmZlcik7CisJc3RhdHVzID0gYWNwaV9yc19nZXRfcHJzX21ldGhvZF9kYXRhKG5vZGUsIHJldF9idWZmZXIpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3Bvc3NpYmxlX3Jlc291cmNlcyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfcG9zc2libGVfcmVzb3VyY2VzKQogI2VuZGlmCQkJCS8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV93YWxrX3Jlc291cmNlcwotICoKLSAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBIYW5kbGUgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB3ZSBhcmUgcXVlcnlpbmcKLSAqICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgLSBNZXRob2QgbmFtZSBvZiB0aGUgcmVzb3VyY2VzIHdlIHdhbnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUVUSE9EX05BTUVfX0NSUyBvciBNRVRIT0RfTkFNRV9fUFJTKQotICogICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAtIENhbGxlZCBmb3IgZWFjaCByZXNvdXJjZQotICogICAgICAgICAgICAgIENvbnRleHQgICAgICAgICAtIFBhc3NlZCB0byB1c2VyX2Z1bmN0aW9uCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgb3IgcG9zc2libGUgcmVzb3VyY2UgbGlzdCBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgc3BlY2lmaWVkIGRldmljZS4gIFRoZSB1c2VyX2Z1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvcgotICogICAgICAgICAgICAgIGVhY2ggcmVzb3VyY2UgaW4gdGhlIGxpc3QuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWNwaV9zdGF0dXMKLWFjcGlfd2Fsa19yZXNvdXJjZXMoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKLQkJICAgIGNoYXIgKm5hbWUsCi0JCSAgICBBQ1BJX1dBTEtfUkVTT1VSQ0VfQ0FMTEJBQ0sgdXNlcl9mdW5jdGlvbiwgdm9pZCAqY29udGV4dCkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2U7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlX2VuZDsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfd2Fsa19yZXNvdXJjZXMiKTsKLQotCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCi0KLQlpZiAoIWRldmljZV9oYW5kbGUgfHwgIXVzZXJfZnVuY3Rpb24gfHwgIW5hbWUgfHwKLQkgICAgKEFDUElfU1RSTkNNUChuYW1lLCBNRVRIT0RfTkFNRV9fQ1JTLCBzaXplb2YoTUVUSE9EX05BTUVfX0NSUykpICYmCi0JICAgICBBQ1BJX1NUUk5DTVAobmFtZSwgTUVUSE9EX05BTUVfX1BSUywgc2l6ZW9mKE1FVEhPRF9OQU1FX19QUlMpKSkpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQotCS8qIEdldCB0aGUgX0NSUyBvciBfUFJTIHJlc291cmNlIGxpc3QgKi8KLQotCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0xPQ0FMX0JVRkZFUjsKLQlzdGF0dXMgPSBhY3BpX3JzX2dldF9tZXRob2RfZGF0YShkZXZpY2VfaGFuZGxlLCBuYW1lLCAmYnVmZmVyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JLyogQnVmZmVyIG5vdyBjb250YWlucyB0aGUgcmVzb3VyY2UgbGlzdCAqLwotCi0JcmVzb3VyY2UgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlLCBidWZmZXIucG9pbnRlcik7Ci0JcmVzb3VyY2VfZW5kID0KLQkgICAgQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlLCBidWZmZXIucG9pbnRlciwgYnVmZmVyLmxlbmd0aCk7Ci0KLQkvKiBXYWxrIHRoZSByZXNvdXJjZSBsaXN0IHVudGlsIHRoZSBlbmRfdGFnIGlzIGZvdW5kIChvciBidWZmZXIgZW5kKSAqLwotCi0Jd2hpbGUgKHJlc291cmNlIDwgcmVzb3VyY2VfZW5kKSB7Ci0JCS8qIFNhbml0eSBjaGVjayB0aGUgcmVzb3VyY2UgKi8KLQotCQlpZiAocmVzb3VyY2UtPnR5cGUgPiBBQ1BJX1JFU09VUkNFX1RZUEVfTUFYKSB7Ci0JCQlzdGF0dXMgPSBBRV9BTUxfSU5WQUxJRF9SRVNPVVJDRV9UWVBFOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBJbnZva2UgdGhlIHVzZXIgZnVuY3Rpb24sIGFib3J0IG9uIGFueSBlcnJvciByZXR1cm5lZCAqLwotCi0JCXN0YXR1cyA9IHVzZXJfZnVuY3Rpb24ocmVzb3VyY2UsIGNvbnRleHQpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWlmIChzdGF0dXMgPT0gQUVfQ1RSTF9URVJNSU5BVEUpIHsKLQkJCQkvKiBUaGlzIGlzIGFuIE9LIHRlcm1pbmF0aW9uIGJ5IHRoZSB1c2VyIGZ1bmN0aW9uICovCi0KLQkJCQlzdGF0dXMgPSBBRV9PSzsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogZW5kX3RhZyBpbmRpY2F0ZXMgZW5kLW9mLWxpc3QgKi8KLQotCQlpZiAocmVzb3VyY2UtPnR5cGUgPT0gQUNQSV9SRVNPVVJDRV9UWVBFX0VORF9UQUcpIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogR2V0IHRoZSBuZXh0IHJlc291cmNlIGRlc2NyaXB0b3IgKi8KLQotCQlyZXNvdXJjZSA9Ci0JCSAgICBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2UsIHJlc291cmNlLAotCQkJCSByZXNvdXJjZS0+bGVuZ3RoKTsKLQl9Ci0KLQlBQ1BJX01FTV9GUkVFKGJ1ZmZlci5wb2ludGVyKTsKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLX0KLQotRVhQT1JUX1NZTUJPTChhY3BpX3dhbGtfcmVzb3VyY2VzKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMKICAqCi0gKiBQQVJBTUVURVJTOiAgZGV2aWNlX2hhbmRsZSAgIC0gYSBoYW5kbGUgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB3ZSBhcmUgY2hhbmdpbmcgdGhlIHJlc291cmNlcyBvZgotICogICAgICAgICAgICAgIGluX2J1ZmZlciAgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZQorICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAtIEhhbmRsZSB0byB0aGUgZGV2aWNlIG9iamVjdCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHdlIGFyZSBzZXR0aW5nIHJlc291cmNlcworICogICAgICAgICAgICAgIGluX2J1ZmZlciAgICAgICAtIFBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMgdG8gYmUgc2V0IGZvciB0aGUgZGV2aWNlCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzZXQgdGhlIGN1cnJlbnQgcmVzb3VyY2VzIGZvciBhCi0gKiAgICAgICAgICAgICAgc3BlY2lmaWMgZGV2aWNlLiAgVGhlIGNhbGxlciBtdXN0IGZpcnN0IGFjcXVpcmUgYSBoYW5kbGUgZm9yCi0gKiAgICAgICAgICAgICAgdGhlIGRlc2lyZWQgZGV2aWNlLiAgVGhlIHJlc291cmNlIGRhdGEgaXMgcGFzc2VkIHRvIHRoZSByb3V0aW5lCisgKiAgICAgICAgICAgICAgc3BlY2lmaWMgZGV2aWNlLiBUaGUgY2FsbGVyIG11c3QgZmlyc3QgYWNxdWlyZSBhIGhhbmRsZSBmb3IKKyAqICAgICAgICAgICAgICB0aGUgZGVzaXJlZCBkZXZpY2UuIFRoZSByZXNvdXJjZSBkYXRhIGlzIHBhc3NlZCB0byB0aGUgcm91dGluZQogICogICAgICAgICAgICAgIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSB0aGUgaW5fYnVmZmVyIHZhcmlhYmxlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX3NldF9jdXJyZW50X3Jlc291cmNlcyhhY3BpX2hhbmRsZSBkZXZpY2VfaGFuZGxlLAogCQkJICAgc3RydWN0IGFjcGlfYnVmZmVyICppbl9idWZmZXIpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKTsKIAotCS8qIE11c3QgaGF2ZSBhIHZhbGlkIGhhbmRsZSBhbmQgYnVmZmVyICovCisJLyogVmFsaWRhdGUgdGhlIGJ1ZmZlciwgZG9uJ3QgYWxsb3cgemVybyBsZW5ndGggKi8KIAotCWlmICgoIWRldmljZV9oYW5kbGUpIHx8Ci0JICAgICghaW5fYnVmZmVyKSB8fCAoIWluX2J1ZmZlci0+cG9pbnRlcikgfHwgKCFpbl9idWZmZXItPmxlbmd0aCkpIHsKKwlpZiAoKCFpbl9idWZmZXIpIHx8ICghaW5fYnVmZmVyLT5wb2ludGVyKSB8fCAoIWluX2J1ZmZlci0+bGVuZ3RoKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhKGRldmljZV9oYW5kbGUsIGluX2J1ZmZlcik7CisJLyogVmFsaWRhdGUgcGFyYW1ldGVycyB0aGVuIGRpc3BhdGNoIHRvIGludGVybmFsIHJvdXRpbmUgKi8KKworCXN0YXR1cyA9IGFjcGlfcnNfdmFsaWRhdGVfcGFyYW1ldGVycyhkZXZpY2VfaGFuZGxlLCBpbl9idWZmZXIsICZub2RlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJc3RhdHVzID0gYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhKG5vZGUsIGluX2J1ZmZlcik7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfcmVzb3VyY2VfdG9fYWRkcmVzczY0CiAgKgotICogUEFSQU1FVEVSUzogIFJlc291cmNlICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBhIHJlc291cmNlCi0gKiAgICAgICAgICAgICAgT3V0ICAgICAgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSB1c2VycydzIHJldHVybgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIChhIHN0cnVjdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0KQorICogUEFSQU1FVEVSUzogIFJlc291cmNlICAgICAgICAtIFBvaW50ZXIgdG8gYSByZXNvdXJjZQorICogICAgICAgICAgICAgIE91dCAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIHVzZXJzJ3MgcmV0dXJuIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhIHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCkKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IElmIHRoZSByZXNvdXJjZSBpcyBhbiBhZGRyZXNzMTYsIGFkZHJlc3MzMiwgb3IgYWRkcmVzczY0LAotICogICAgICAgICAgICAgIGNvcHkgaXQgdG8gdGhlIGFkZHJlc3M2NCByZXR1cm4gYnVmZmVyLiAgVGhpcyBzYXZlcyB0aGUKKyAqICAgICAgICAgICAgICBjb3B5IGl0IHRvIHRoZSBhZGRyZXNzNjQgcmV0dXJuIGJ1ZmZlci4gVGhpcyBzYXZlcyB0aGUKICAqICAgICAgICAgICAgICBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gZHVwbGljYXRlIGNvZGUgZm9yIGRpZmZlcmVudC1zaXplZAogICogICAgICAgICAgICAgIGFkZHJlc3Nlcy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLAogCQkJICAgc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICpvdXQpCkBAIC00MTUsMTggKzM2NCwxOCBAQAogCXJldHVybiAoQUVfT0spOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfcmVzb3VyY2VfdG9fYWRkcmVzczY0KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3Jlc291cmNlX3RvX2FkZHJlc3M2NCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9nZXRfdmVuZG9yX3Jlc291cmNlCiAgKgotICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAgICAgLSBIYW5kbGUgZm9yIHRoZSBwYXJlbnQgZGV2aWNlIG9iamVjdAotICogICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgLSBNZXRob2QgbmFtZSBmb3IgdGhlIHBhcmVudCByZXNvdXJjZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUVUSE9EX05BTUVfX0NSUyBvciBNRVRIT0RfTkFNRV9fUFJTKQotICogICAgICAgICAgICAgIFV1aWQgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBVVUlEIHRvIGJlIG1hdGNoZWQuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIGJvdGggc3VidHlwZSBhbmQgMTYtYnl0ZSBVVUlECi0gKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgICAgICAtIFdoZXJlIHRoZSB2ZW5kb3IgcmVzb3VyY2UgaXMgcmV0dXJuZWQKKyAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBIYW5kbGUgZm9yIHRoZSBwYXJlbnQgZGV2aWNlIG9iamVjdAorICogICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAtIE1ldGhvZCBuYW1lIGZvciB0aGUgcGFyZW50IHJlc291cmNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1FVEhPRF9OQU1FX19DUlMgb3IgTUVUSE9EX05BTUVfX1BSUykKKyAqICAgICAgICAgICAgICBVdWlkICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBVVUlEIHRvIGJlIG1hdGNoZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgYm90aCBzdWJ0eXBlIGFuZCAxNi1ieXRlIFVVSUQKKyAqICAgICAgICAgICAgICByZXRfYnVmZmVyICAgICAgLSBXaGVyZSB0aGUgdmVuZG9yIHJlc291cmNlIGlzIHJldHVybmVkCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTQzNSw3ICszODQsNiBAQAogICogICAgICAgICAgICAgIFVVSUQgc3VidHlwZS4gUmV0dXJucyBhIHN0cnVjdCBhY3BpX3Jlc291cmNlIG9mIHR5cGUgVmVuZG9yLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2dldF92ZW5kb3JfcmVzb3VyY2UoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKIAkJCSBjaGFyICpuYW1lLApAQCAtNDY3LDE4ICs0MTUsMTkgQEAKIAlyZXR1cm4gKGluZm8uc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3ZlbmRvcl9yZXNvdXJjZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19tYXRjaF92ZW5kb3JfcmVzb3VyY2UKICAqCi0gKiBQQVJBTUVURVJTOiAgQUNQSV9XQUxLX1JFU09VUkNFX0NBTExCQUNLCisgKiBQQVJBTUVURVJTOiAgYWNwaV93YWxrX3Jlc291cmNlX2NhbGxiYWNrCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBNYXRjaCBhIHZlbmRvciByZXNvdXJjZSB2aWEgdGhlIEFDUEkgMy4wIFVVSUQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfcnNfbWF0Y2hfdmVuZG9yX3Jlc291cmNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCkKIHsKQEAgLTUyNiwzICs0NzUsMTAxIEBACiAJaW5mby0+c3RhdHVzID0gQUVfT0s7CiAJcmV0dXJuIChBRV9DVFJMX1RFUk1JTkFURSk7CiB9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JzX21hdGNoX3ZlbmRvcl9yZXNvdXJjZSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV93YWxrX3Jlc291cmNlcworICoKKyAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBIYW5kbGUgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB3ZSBhcmUgcXVlcnlpbmcKKyAqICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgLSBNZXRob2QgbmFtZSBvZiB0aGUgcmVzb3VyY2VzIHdlIHdhbnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUVUSE9EX05BTUVfX0NSUyBvciBNRVRIT0RfTkFNRV9fUFJTKQorICogICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAtIENhbGxlZCBmb3IgZWFjaCByZXNvdXJjZQorICogICAgICAgICAgICAgIENvbnRleHQgICAgICAgICAtIFBhc3NlZCB0byB1c2VyX2Z1bmN0aW9uCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgb3IgcG9zc2libGUgcmVzb3VyY2UgbGlzdCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgc3BlY2lmaWVkIGRldmljZS4gVGhlIHVzZXJfZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yCisgKiAgICAgICAgICAgICAgZWFjaCByZXNvdXJjZSBpbiB0aGUgbGlzdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV93YWxrX3Jlc291cmNlcyhhY3BpX2hhbmRsZSBkZXZpY2VfaGFuZGxlLAorCQkgICAgY2hhciAqbmFtZSwKKwkJICAgIGFjcGlfd2Fsa19yZXNvdXJjZV9jYWxsYmFjayB1c2VyX2Z1bmN0aW9uLCB2b2lkICpjb250ZXh0KQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyOworCXN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2VfZW5kOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3dhbGtfcmVzb3VyY2VzKTsKKworCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCisKKwlpZiAoIWRldmljZV9oYW5kbGUgfHwgIXVzZXJfZnVuY3Rpb24gfHwgIW5hbWUgfHwKKwkgICAgKCFBQ1BJX0NPTVBBUkVfTkFNRShuYW1lLCBNRVRIT0RfTkFNRV9fQ1JTKSAmJgorCSAgICAgIUFDUElfQ09NUEFSRV9OQU1FKG5hbWUsIE1FVEhPRF9OQU1FX19QUlMpKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJfQorCisJLyogR2V0IHRoZSBfQ1JTIG9yIF9QUlMgcmVzb3VyY2UgbGlzdCAqLworCisJYnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfTE9DQUxfQlVGRkVSOworCXN0YXR1cyA9IGFjcGlfcnNfZ2V0X21ldGhvZF9kYXRhKGRldmljZV9oYW5kbGUsIG5hbWUsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkvKiBCdWZmZXIgbm93IGNvbnRhaW5zIHRoZSByZXNvdXJjZSBsaXN0ICovCisKKwlyZXNvdXJjZSA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2UsIGJ1ZmZlci5wb2ludGVyKTsKKwlyZXNvdXJjZV9lbmQgPQorCSAgICBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2UsIGJ1ZmZlci5wb2ludGVyLCBidWZmZXIubGVuZ3RoKTsKKworCS8qIFdhbGsgdGhlIHJlc291cmNlIGxpc3QgdW50aWwgdGhlIGVuZF90YWcgaXMgZm91bmQgKG9yIGJ1ZmZlciBlbmQpICovCisKKwl3aGlsZSAocmVzb3VyY2UgPCByZXNvdXJjZV9lbmQpIHsKKworCQkvKiBTYW5pdHkgY2hlY2sgdGhlIHJlc291cmNlICovCisKKwkJaWYgKHJlc291cmNlLT50eXBlID4gQUNQSV9SRVNPVVJDRV9UWVBFX01BWCkgeworCQkJc3RhdHVzID0gQUVfQU1MX0lOVkFMSURfUkVTT1VSQ0VfVFlQRTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSW52b2tlIHRoZSB1c2VyIGZ1bmN0aW9uLCBhYm9ydCBvbiBhbnkgZXJyb3IgcmV0dXJuZWQgKi8KKworCQlzdGF0dXMgPSB1c2VyX2Z1bmN0aW9uKHJlc291cmNlLCBjb250ZXh0KTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlpZiAoc3RhdHVzID09IEFFX0NUUkxfVEVSTUlOQVRFKSB7CisKKwkJCQkvKiBUaGlzIGlzIGFuIE9LIHRlcm1pbmF0aW9uIGJ5IHRoZSB1c2VyIGZ1bmN0aW9uICovCisKKwkJCQlzdGF0dXMgPSBBRV9PSzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJLyogZW5kX3RhZyBpbmRpY2F0ZXMgZW5kLW9mLWxpc3QgKi8KKworCQlpZiAocmVzb3VyY2UtPnR5cGUgPT0gQUNQSV9SRVNPVVJDRV9UWVBFX0VORF9UQUcpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogR2V0IHRoZSBuZXh0IHJlc291cmNlIGRlc2NyaXB0b3IgKi8KKworCQlyZXNvdXJjZSA9CisJCSAgICBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2UsIHJlc291cmNlLAorCQkJCSByZXNvdXJjZS0+bGVuZ3RoKTsKKwl9CisKKwlBQ1BJX0ZSRUUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworfQorCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV93YWxrX3Jlc291cmNlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IGEwYWI4MjguLmE1ZmE4NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtMjM0LDEyICsyMzQsOSBAQAogCiBpbnQgYWNwaV9tYXRjaF9pZHMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGNoYXIgKmlkcykKIHsKLQlpbnQgZXJyb3IgPSAwOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07Ci0KIAlpZiAoZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCkKIAkJaWYgKHN0cnN0cihpZHMsIGRldmljZS0+cG5wLmhhcmR3YXJlX2lkKSkKLQkJCWdvdG8gRG9uZTsKKwkJCXJldHVybiAwOwogCiAJaWYgKGRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKIAkJc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwpAQCAtMjQ4LDE1ICsyNDUsMTAgQEAKIAkJLyogY29tcGFyZSBtdWx0aXBsZSBfQ0lEIGVudHJpZXMgYWdhaW5zdCBkcml2ZXIgaWRzICovCiAJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewogCQkJaWYgKHN0cnN0cihpZHMsIGNpZF9saXN0LT5pZFtpXS52YWx1ZSkpCi0JCQkJZ290byBEb25lOworCQkJCXJldHVybiAwOwogCQl9CiAJfQotCWVycm9yID0gLUVOT0VOVDsKLQotICAgICAgRG9uZToKLQlpZiAoYnVmZmVyLnBvaW50ZXIpCi0JCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiAtRU5PRU5UOwogfQogCiBzdGF0aWMgYWNwaV9zdGF0dXMKQEAgLTQ0MSwxMCArNDMzLDcgQEAKIAlpc2xvY2thYmxlID0gZGV2aWNlLT5mbGFncy5sb2NrYWJsZTsKIAloYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKIAotCWlmICh0eXBlID09IEFDUElfVFlQRV9QUk9DRVNTT1IpCi0JCXJlc3VsdCA9IGFjcGlfYnVzX3RyaW0oZGV2aWNlLCAwKTsKLQllbHNlCi0JCXJlc3VsdCA9IGFjcGlfYnVzX3RyaW0oZGV2aWNlLCAxKTsKKwlyZXN1bHQgPSBhY3BpX2J1c190cmltKGRldmljZSwgMSk7CiAKIAlpZiAoIXJlc3VsdCkKIAkJcmVzdWx0ID0gYWNwaV9lamVjdF9vcGVyYXRpb24oaGFuZGxlLCBpc2xvY2thYmxlKTsKQEAgLTY0NSwyMSArNjM0LDE5IEBACiAgKi8KIGludCBhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgYWNwaV9kcml2ZXIgKmRyaXZlcikKIHsKLQlpbnQgZXJyb3IgPSAwOwotCiAJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIiKTsKIAotCWlmIChkcml2ZXIpIHsKLQkJYWNwaV9kcml2ZXJfZGV0YWNoKGRyaXZlcik7CisJaWYgKCFkcml2ZXIpCisJCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKIAotCQlpZiAoIWF0b21pY19yZWFkKCZkcml2ZXItPnJlZmVyZW5jZXMpKSB7Ci0JCQlzcGluX2xvY2soJmFjcGlfZGV2aWNlX2xvY2spOwotCQkJbGlzdF9kZWxfaW5pdCgmZHJpdmVyLT5ub2RlKTsKLQkJCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKLQkJfQotCX0gZWxzZQotCQllcnJvciA9IC1FSU5WQUw7Ci0JcmV0dXJuX1ZBTFVFKGVycm9yKTsKKwlhY3BpX2RyaXZlcl9kZXRhY2goZHJpdmVyKTsKKworCWlmICghYXRvbWljX3JlYWQoJmRyaXZlci0+cmVmZXJlbmNlcykpIHsKKwkJc3Bpbl9sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmZHJpdmVyLT5ub2RlKTsKKwkJc3Bpbl91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOworCX0KKwlyZXR1cm5fVkFMVUUoMCk7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwL3dha2V1cC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL3dha2V1cC5jCmluZGV4IDg1ZGYwY2UuLmFmMWRiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC93YWtldXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAvd2FrZXVwLmMKQEAgLTE1NSw3ICsxNTUsNiBAQAogCiAJaWYgKGFjcGlfZGlzYWJsZWQpCiAJCXJldHVybiAwOwotCXByaW50aygiQUNQSSB3YWtldXAgZGV2aWNlczogXG4iKTsKIAogCXNwaW5fbG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZhY3BpX3dha2V1cF9kZXZpY2VfbGlzdCkgewpAQCAtMTc0LDEwICsxNzMsOCBAQAogCQkJZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCA9IDE7CiAJCQlzcGluX2xvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCQl9Ci0JCXByaW50aygiJTRzICIsIGRldi0+cG5wLmJ1c19pZCk7CiAJfQogCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKLQlwcmludGsoIlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwppbmRleCBlNDMwOGM3Li5hOTM0YWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIEFDUElfU1lTVEVNX0ZJTEVfRVZFTlQJCSJldmVudCIKICNkZWZpbmUgQUNQSV9TWVNURU1fRklMRV9EU0RUCQkiZHNkdCIKICNkZWZpbmUgQUNQSV9TWVNURU1fRklMRV9GQURUCQkiZmFkdCIKLWV4dGVybiBGQURUX0RFU0NSSVBUT1IgYWNwaV9mYWR0OworZXh0ZXJuIHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IgYWNwaV9mYWR0OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlMgSW50ZXJmYWNlICgvcHJvYykKQEAgLTgyLDcgKzgyLDcgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfc3lzdGVtX3JlYWRfZHNkdCIpOwogCi0Jc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9UQUJMRV9EU0RULCAxLCAmZHNkdCk7CisJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9UQUJMRV9JRF9EU0RULCAxLCAmZHNkdCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CiAKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9zeXN0ZW1fcmVhZF9mYWR0Iik7CiAKLQlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1RBQkxFX0ZBRFQsIDEsICZmYWR0KTsKKwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1RBQkxFX0lEX0ZBRFQsIDEsICZmYWR0KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jIGIvZHJpdmVycy9hY3BpL3RhYmxlcy5jCmluZGV4IDdmMzdjN2MuLmVkNWU4ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKQEAgLTI4Miw4ICsyODIsOCBAQAogCiAJLyogTWFwIHRoZSBEU0RUIGhlYWRlciB2aWEgdGhlIHBvaW50ZXIgaW4gdGhlIEZBRFQgKi8KIAlpZiAoaWQgPT0gQUNQSV9EU0RUKSB7Ci0JCXN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqZmFkdCA9Ci0JCSAgICAoc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyICopKmhlYWRlcjsKKwkJc3RydWN0IGZhZHRfZGVzY3JpcHRvciAqZmFkdCA9CisJCSAgICAoc3RydWN0IGZhZHRfZGVzY3JpcHRvciAqKSpoZWFkZXI7CiAKIAkJaWYgKGZhZHQtPnJldmlzaW9uID09IDMgJiYgZmFkdC0+WGRzZHQpIHsKIAkJCSpoZWFkZXIgPSAodm9pZCAqKV9fYWNwaV9tYXBfdGFibGUoZmFkdC0+WGRzZHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RiY29udnJ0LmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiY29udnJ0LmMKaW5kZXggMDNiMzdkMi4uZDY5N2ZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YmNvbnZydC5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJjb252cnQuYwpAQCAtNDEsOCArNDEsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWN0YWJsZXMuaD4KIApAQCAtNTYsMTUgKzU0LDE1IEBACiAJCQkgICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzKTsKIAogc3RhdGljIHZvaWQKLWFjcGlfdGJfY29udmVydF9mYWR0MShzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIgKmxvY2FsX2ZhZHQsCithY3BpX3RiX2NvbnZlcnRfZmFkdDEoc3RydWN0IGZhZHRfZGVzY3JpcHRvciAqbG9jYWxfZmFkdCwKIAkJICAgICAgc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYxICpvcmlnaW5hbF9mYWR0KTsKIAogc3RhdGljIHZvaWQKLWFjcGlfdGJfY29udmVydF9mYWR0MihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIgKmxvY2FsX2ZhZHQsCi0JCSAgICAgIHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqb3JpZ2luYWxfZmFkdCk7CithY3BpX3RiX2NvbnZlcnRfZmFkdDIoc3RydWN0IGZhZHRfZGVzY3JpcHRvciAqbG9jYWxfZmFkdCwKKwkJICAgICAgc3RydWN0IGZhZHRfZGVzY3JpcHRvciAqb3JpZ2luYWxfZmFkdCk7CiAKIHU4IGFjcGlfZmFkdF9pc192MTsKLUVYUE9SVF9TWU1CT0woYWNwaV9mYWR0X2lzX3YxKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2ZhZHRfaXNfdjEpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTIyLDcgKzEyMCw3IEBACiB7CiAJYWNwaV9zaXplIHRhYmxlX3NpemU7CiAJdTMyIGk7Ci0JWFNEVF9ERVNDUklQVE9SICpuZXdfdGFibGU7CisJc3RydWN0IHhzZHRfZGVzY3JpcHRvciAqbmV3X3RhYmxlOwogCiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCkBAIC0xMzMsNyArMTMxLDcgQEAKIAogCS8qIEFsbG9jYXRlIGFuIFhTRFQgKi8KIAotCW5ld190YWJsZSA9IEFDUElfTUVNX0NBTExPQ0FURSh0YWJsZV9zaXplKTsKKwluZXdfdGFibGUgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRCh0YWJsZV9zaXplKTsKIAlpZiAoIW5ld190YWJsZSkgewogCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJfQpAQCAtMTQ3LDE3ICsxNDUsMTggQEAKIAkvKiBDb3B5IHRoZSB0YWJsZSBwb2ludGVycyAqLwogCiAJZm9yIChpID0gMDsgaSA8IGFjcGlfZ2JsX3JzZHRfdGFibGVfY291bnQ7IGkrKykgeworCiAJCS8qIFJTRFQgcG9pbnRlcnMgYXJlIDMyIGJpdHMsIFhTRFQgcG9pbnRlcnMgYXJlIDY0IGJpdHMgKi8KIAogCQlpZiAoYWNwaV9nYmxfcm9vdF90YWJsZV90eXBlID09IEFDUElfVEFCTEVfVFlQRV9SU0RUKSB7CiAJCQlBQ1BJX1NUT1JFX0FERFJFU1MobmV3X3RhYmxlLT50YWJsZV9vZmZzZXRfZW50cnlbaV0sCiAJCQkJCSAgIChBQ1BJX0NBU1RfUFRSCi0JCQkJCSAgICAoc3RydWN0IHJzZHRfZGVzY3JpcHRvcl9yZXYxLAorCQkJCQkgICAgKHN0cnVjdCByc2R0X2Rlc2NyaXB0b3IsCiAJCQkJCSAgICAgdGFibGVfaW5mby0+cG9pbnRlcikpLT4KIAkJCQkJICAgdGFibGVfb2Zmc2V0X2VudHJ5W2ldKTsKIAkJfSBlbHNlIHsKIAkJCW5ld190YWJsZS0+dGFibGVfb2Zmc2V0X2VudHJ5W2ldID0KLQkJCSAgICAoQUNQSV9DQVNUX1BUUihYU0RUX0RFU0NSSVBUT1IsCisJCQkgICAgKEFDUElfQ0FTVF9QVFIoc3RydWN0IHhzZHRfZGVzY3JpcHRvciwKIAkJCQkJICAgdGFibGVfaW5mby0+cG9pbnRlcikpLT4KIAkJCSAgICB0YWJsZV9vZmZzZXRfZW50cnlbaV07CiAJCX0KQEAgLTIxOSw3ICsyMTgsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQKLWFjcGlfdGJfY29udmVydF9mYWR0MShzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIgKmxvY2FsX2ZhZHQsCithY3BpX3RiX2NvbnZlcnRfZmFkdDEoc3RydWN0IGZhZHRfZGVzY3JpcHRvciAqbG9jYWxfZmFkdCwKIAkJICAgICAgc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYxICpvcmlnaW5hbF9mYWR0KQogewogCkBAIC0zNjUsMTQgKzM2NCwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQKLWFjcGlfdGJfY29udmVydF9mYWR0MihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIgKmxvY2FsX2ZhZHQsCi0JCSAgICAgIHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqb3JpZ2luYWxfZmFkdCkKK2FjcGlfdGJfY29udmVydF9mYWR0MihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICpsb2NhbF9mYWR0LAorCQkgICAgICBzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICpvcmlnaW5hbF9mYWR0KQogewogCiAJLyogV2UgaGF2ZSBhbiBBQ1BJIDIuMCBGQURUIGJ1dCB3ZSBtdXN0IGNvcHkgaXQgdG8gb3VyIGxvY2FsIGJ1ZmZlciAqLwogCi0JQUNQSV9NRU1DUFkobG9jYWxfZmFkdCwgb3JpZ2luYWxfZmFkdCwKLQkJICAgIHNpemVvZihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIpKTsKKwlBQ1BJX01FTUNQWShsb2NhbF9mYWR0LCBvcmlnaW5hbF9mYWR0LCBzaXplb2Yoc3RydWN0IGZhZHRfZGVzY3JpcHRvcikpOwogCiAJLyoKIAkgKiAiWCIgZmllbGRzIGFyZSBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBvcmlnaW5hbCBWMS4wIGZpZWxkcywgc28KQEAgLTQ5MSwxMCArNDg5LDEwIEBACiAKIGFjcGlfc3RhdHVzIGFjcGlfdGJfY29udmVydF90YWJsZV9mYWR0KHZvaWQpCiB7Ci0Jc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyICpsb2NhbF9mYWR0OworCXN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IgKmxvY2FsX2ZhZHQ7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInRiX2NvbnZlcnRfdGFibGVfZmFkdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfY29udmVydF90YWJsZV9mYWR0KTsKIAogCS8qCiAJICogYWNwaV9nYmxfRkFEVCBpcyB2YWxpZC4gVmFsaWRhdGUgdGhlIEZBRFQgbGVuZ3RoLiBUaGUgdGFibGUgbXVzdCBiZQpAQCAtNTA4LDEzICs1MDYsMTQgQEAKIAogCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgdGhlIEFDUEkgMi4wKCspIEZBRFQgKi8KIAotCWxvY2FsX2ZhZHQgPSBBQ1BJX01FTV9DQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MikpOworCWxvY2FsX2ZhZHQgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGZhZHRfZGVzY3JpcHRvcikpOwogCWlmICghbG9jYWxfZmFkdCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CiAKIAlpZiAoYWNwaV9nYmxfRkFEVC0+cmV2aXNpb24gPj0gRkFEVDJfUkVWSVNJT05fSUQpIHsKLQkJaWYgKGFjcGlfZ2JsX0ZBRFQtPmxlbmd0aCA8IHNpemVvZihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIpKSB7CisJCWlmIChhY3BpX2dibF9GQURULT5sZW5ndGggPCBzaXplb2Yoc3RydWN0IGZhZHRfZGVzY3JpcHRvcikpIHsKKwogCQkJLyogTGVuZ3RoIGlzIHRvbyBzaG9ydCB0byBiZSBhIFYyLjAgdGFibGUgKi8KIAogCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLApAQCAtNTM4LDExICs1MzcsMTEgQEAKIAkvKiBHbG9iYWwgRkFEVCBwb2ludGVyIHdpbGwgcG9pbnQgdG8gdGhlIG5ldyBjb21tb24gVjIuMCBGQURUICovCiAKIAlhY3BpX2dibF9GQURUID0gbG9jYWxfZmFkdDsKLQlhY3BpX2dibF9GQURULT5sZW5ndGggPSBzaXplb2YoRkFEVF9ERVNDUklQVE9SKTsKKwlhY3BpX2dibF9GQURULT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGZhZHRfZGVzY3JpcHRvcik7CiAKIAkvKiBGcmVlIHRoZSBvcmlnaW5hbCB0YWJsZSAqLwogCi0JdGFibGVfZGVzYyA9IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW0FDUElfVEFCTEVfRkFEVF0ubmV4dDsKKwl0YWJsZV9kZXNjID0gYWNwaV9nYmxfdGFibGVfbGlzdHNbQUNQSV9UQUJMRV9JRF9GQURUXS5uZXh0OwogCWFjcGlfdGJfZGVsZXRlX3NpbmdsZV90YWJsZSh0YWJsZV9kZXNjKTsKIAogCS8qIEluc3RhbGwgdGhlIG5ldyB0YWJsZSAqLwpAQCAtNTUwLDcgKzU0OSw3IEBACiAJdGFibGVfZGVzYy0+cG9pbnRlciA9CiAJICAgIEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyLCBhY3BpX2dibF9GQURUKTsKIAl0YWJsZV9kZXNjLT5hbGxvY2F0aW9uID0gQUNQSV9NRU1fQUxMT0NBVEVEOwotCXRhYmxlX2Rlc2MtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIpOworCXRhYmxlX2Rlc2MtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yKTsKIAogCS8qIER1bXAgdGhlIGVudGlyZSBGQURUICovCiAKQEAgLTU4MCw3ICs1NzksNyBAQAogYWNwaV9zdGF0dXMgYWNwaV90Yl9idWlsZF9jb21tb25fZmFjcyhzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9pbmZvKQogewogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfYnVpbGRfY29tbW9uX2ZhY3MiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2J1aWxkX2NvbW1vbl9mYWNzKTsKIAogCS8qIEFic29sdXRlIG1pbmltdW0gbGVuZ3RoIGlzIDI0LCBidXQgdGhlIEFDUEkgc3BlYyBzYXlzIDY0ICovCiAKQEAgLTYwMyw2ICs2MDIsNyBAQAogCWlmICgoYWNwaV9nYmxfUlNEUC0+cmV2aXNpb24gPCAyKSB8fAogCSAgICAoYWNwaV9nYmxfRkFDUy0+bGVuZ3RoIDwgMzIpIHx8CiAJICAgICghKGFjcGlfZ2JsX0ZBQ1MtPnhmaXJtd2FyZV93YWtpbmdfdmVjdG9yKSkpIHsKKwogCQkvKiBBQ1BJIDEuMCBGQUNTIG9yIHNob3J0IHRhYmxlIG9yIG9wdGlvbmFsIFhfIGZpZWxkIGlzIHplcm8gKi8KIAogCQlhY3BpX2dibF9jb21tb25fZkFDUy5maXJtd2FyZV93YWtpbmdfdmVjdG9yID0gQUNQSV9DQVNUX1BUUih1NjQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZ2V0LmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZ2V0LmMKaW5kZXggMDliNGVlNi4uOTllYWNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YmdldC5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJnZXQuYwpAQCAtNzgsNyArNzgsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfZ2V0X3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9nZXRfdGFibGUpOwogCiAJLyogR2V0IHRoZSBoZWFkZXIgaW4gb3JkZXIgdG8gZ2V0IHNpZ25hdHVyZSBhbmQgdGFibGUgc2l6ZSAqLwogCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlciA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9nZXRfdGFibGVfaGVhZGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9nZXRfdGFibGVfaGVhZGVyKTsKIAogCS8qCiAJICogRmxhZ3MgY29udGFpbnMgdGhlIGN1cnJlbnQgcHJvY2Vzc29yIG1vZGUgKFZpcnR1YWwgb3IgUGh5c2ljYWwKQEAgLTE0OCw2ICsxNDgsMTAgQEAKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpLAogCQkJCQkgICAgKHZvaWQgKikmaGVhZGVyKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJCSAgICAiQ291bGQgbm90IG1hcCBtZW1vcnkgYXQgJTguOFglOC44WCBmb3IgdGFibGUgaGVhZGVyIiwKKwkJCQkgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MtPnBvaW50ZXIuCisJCQkJCQkgICAgICAgcGh5c2ljYWwpKSk7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCkBAIC0xOTgsNyArMjAyLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9nZXRfdGFibGVfYm9keSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfZ2V0X3RhYmxlX2JvZHkpOwogCiAJaWYgKCF0YWJsZV9pbmZvIHx8ICFhZGRyZXNzKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTIwOCw2ICsyMTIsNyBAQAogCiAJc3RhdHVzID0gYWNwaV90Yl90YWJsZV9vdmVycmlkZShoZWFkZXIsIHRhYmxlX2luZm8pOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCiAJCS8qIFRhYmxlIHdhcyBvdmVycmlkZGVuIGJ5IHRoZSBob3N0IE9TICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC0yNDEsNyArMjQ2LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfcG9pbnRlciBhZGRyZXNzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfdGFibGVfb3ZlcnJpZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX3RhYmxlX292ZXJyaWRlKTsKIAogCS8qCiAJICogVGhlIE9TTCB3aWxsIGV4YW1pbmUgdGhlIGhlYWRlciBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gb3ZlcnJpZGUgdGhpcwpAQCAtMjUwLDYgKzI1NSw3IEBACiAJICovCiAJc3RhdHVzID0gYWNwaV9vc190YWJsZV9vdmVycmlkZShoZWFkZXIsICZuZXdfdGFibGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCS8qIFNvbWUgc2V2ZXJlIGVycm9yIGZyb20gdGhlIE9TTCwgYnV0IHdlIGJhc2ljYWxseSBpZ25vcmUgaXQgKi8KIAogCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLApAQCAtMjU4LDYgKzI2NCw3IEBACiAJfQogCiAJaWYgKCFuZXdfdGFibGUpIHsKKwogCQkvKiBObyB0YWJsZSBvdmVycmlkZSAqLwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19BQ1BJX1RBQkxFUyk7CkBAIC0zMTEsNyArMzE4LDcgQEAKIAl1OCBhbGxvY2F0aW9uOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfZ2V0X3RoaXNfdGFibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2dldF90aGlzX3RhYmxlKTsKIAogCS8qCiAJICogRmxhZ3MgY29udGFpbnMgdGhlIGN1cnJlbnQgcHJvY2Vzc29yIG1vZGUgKFZpcnR1YWwgb3IgUGh5c2ljYWwKQEAgLTMyMyw3ICszMzAsNyBAQAogCiAJCS8qIFBvaW50ZXIgbWF0Y2hlcyBwcm9jZXNzb3IgbW9kZSwgY29weSB0aGUgdGFibGUgdG8gYSBuZXcgYnVmZmVyICovCiAKLQkJZnVsbF90YWJsZSA9IEFDUElfTUVNX0FMTE9DQVRFKGhlYWRlci0+bGVuZ3RoKTsKKwkJZnVsbF90YWJsZSA9IEFDUElfQUxMT0NBVEUoaGVhZGVyLT5sZW5ndGgpOwogCQlpZiAoIWZ1bGxfdGFibGUpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgdGFibGUgbWVtb3J5IGZvciBbJTQuNHNdIGxlbmd0aCAlWCIsCkBAIC0zNzYsMTEgKzM4MywxMiBAQAogCSAqIFZhbGlkYXRlIGNoZWNrc3VtIGZvciBfbW9zdF8gdGFibGVzLAogCSAqIGV2ZW4gdGhlIG9uZXMgd2hvc2Ugc2lnbmF0dXJlIHdlIGRvbid0IHJlY29nbml6ZQogCSAqLwotCWlmICh0YWJsZV9pbmZvLT50eXBlICE9IEFDUElfVEFCTEVfRkFDUykgeworCWlmICh0YWJsZV9pbmZvLT50eXBlICE9IEFDUElfVEFCTEVfSURfRkFDUykgewogCQlzdGF0dXMgPSBhY3BpX3RiX3ZlcmlmeV90YWJsZV9jaGVja3N1bShmdWxsX3RhYmxlKTsKIAogI2lmICghQUNQSV9DSEVDS1NVTV9BQk9SVCkKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJCS8qIElnbm9yZSB0aGUgZXJyb3IgaWYgY29uZmlndXJhdGlvbiBzYXlzIHNvICovCiAKIAkJCXN0YXR1cyA9IEFFX09LOwpAQCAtNDA5LDcgKzQxNyw3IEBACiAgKgogICogUEFSQU1FVEVSUzogIHRhYmxlX3R5cGUgICAgICAtIG9uZSBvZiB0aGUgZGVmaW5lZCB0YWJsZSB0eXBlcwogICogICAgICAgICAgICAgIEluc3RhbmNlICAgICAgICAtIFdoaWNoIHRhYmxlIG9mIHRoaXMgdHlwZQotICogICAgICAgICAgICAgIHRhYmxlX3B0cl9sb2MgICAtIHBvaW50ZXIgdG8gbG9jYXRpb24gdG8gcGxhY2UgdGhlIHBvaW50ZXIgZm9yCisgKiAgICAgICAgICAgICAgcmV0dXJuX3RhYmxlICAgIC0gcG9pbnRlciB0byBsb2NhdGlvbiB0byBwbGFjZSB0aGUgcG9pbnRlciBmb3IKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCkBAIC00MjAsNTcgKzQyOCwzNCBAQAogCiBhY3BpX3N0YXR1cwogYWNwaV90Yl9nZXRfdGFibGVfcHRyKGFjcGlfdGFibGVfdHlwZSB0YWJsZV90eXBlLAotCQkgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKnRhYmxlX3B0cl9sb2MpCisJCSAgICAgIHUzMiBpbnN0YW5jZSwgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqcmV0dXJuX3RhYmxlKQogewogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgKnRhYmxlX2Rlc2M7CiAJdTMyIGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9nZXRfdGFibGVfcHRyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9nZXRfdGFibGVfcHRyKTsKIAotCWlmICghYWNwaV9nYmxfRFNEVCkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fQUNQSV9UQUJMRVMpOwotCX0KLQotCWlmICh0YWJsZV90eXBlID4gQUNQSV9UQUJMRV9NQVgpIHsKKwlpZiAodGFibGVfdHlwZSA+IEFDUElfVEFCTEVfSURfTUFYKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKgotCSAqIEZvciBhbGwgdGFibGUgdHlwZXMgKFNpbmdsZS9NdWx0aXBsZSksIHRoZSBmaXJzdAotCSAqIGluc3RhbmNlIGlzIGFsd2F5cyBpbiB0aGUgbGlzdCBoZWFkLgotCSAqLwotCWlmIChpbnN0YW5jZSA9PSAxKSB7Ci0JCS8qIEdldCB0aGUgZmlyc3QgKi8KLQotCQkqdGFibGVfcHRyX2xvYyA9IE5VTEw7Ci0JCWlmIChhY3BpX2dibF90YWJsZV9saXN0c1t0YWJsZV90eXBlXS5uZXh0KSB7Ci0JCQkqdGFibGVfcHRyX2xvYyA9Ci0JCQkgICAgYWNwaV9nYmxfdGFibGVfbGlzdHNbdGFibGVfdHlwZV0ubmV4dC0+cG9pbnRlcjsKLQkJfQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCX0KLQotCS8qIENoZWNrIGZvciBpbnN0YW5jZSBvdXQgb2YgcmFuZ2UgKi8KKwkvKiBDaGVjayBmb3IgaW5zdGFuY2Ugb3V0IG9mIHJhbmdlIG9mIHRoZSBjdXJyZW50IHRhYmxlIGNvdW50ICovCiAKIAlpZiAoaW5zdGFuY2UgPiBhY3BpX2dibF90YWJsZV9saXN0c1t0YWJsZV90eXBlXS5jb3VudCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9UX0VYSVNUKTsKIAl9CiAKLQkvKiBXYWxrIHRoZSBsaXN0IHRvIGdldCB0aGUgZGVzaXJlZCB0YWJsZQotCSAqIFNpbmNlIHRoZSBpZiAoSW5zdGFuY2UgPT0gMSkgY2hlY2sgYWJvdmUgY2hlY2tlZCBmb3IgdGhlCi0JICogZmlyc3QgdGFibGUsIHNldHRpbmcgdGFibGVfZGVzYyBlcXVhbCB0byB0aGUgLk5leHQgbWVtYmVyCi0JICogaXMgYWN0dWFsbHkgcG9pbnRpbmcgdG8gdGhlIHNlY29uZCB0YWJsZS4gIFRoZXJlZm9yZSwgd2UKLQkgKiBuZWVkIHRvIHdhbGsgZnJvbSB0aGUgMm5kIHRhYmxlIHVudGlsIHdlIHJlYWNoIHRoZSBJbnN0YW5jZQotCSAqIHRoYXQgdGhlIHVzZXIgaXMgbG9va2luZyBmb3IgYW5kIHJldHVybiBpdHMgdGFibGUgcG9pbnRlci4KKwkvKgorCSAqIFdhbGsgdGhlIGxpc3QgdG8gZ2V0IHRoZSBkZXNpcmVkIHRhYmxlCisJICogTm90ZTogSW5zdGFuY2UgaXMgb25lLWJhc2VkCiAJICovCiAJdGFibGVfZGVzYyA9IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW3RhYmxlX3R5cGVdLm5leHQ7Ci0JZm9yIChpID0gMjsgaSA8IGluc3RhbmNlOyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgaW5zdGFuY2U7IGkrKykgewogCQl0YWJsZV9kZXNjID0gdGFibGVfZGVzYy0+bmV4dDsKIAl9CiAKIAkvKiBXZSBhcmUgbm93IHBvaW50aW5nIHRvIHRoZSByZXF1ZXN0ZWQgdGFibGUncyBkZXNjcmlwdG9yICovCiAKLQkqdGFibGVfcHRyX2xvYyA9IHRhYmxlX2Rlc2MtPnBvaW50ZXI7Ci0KKwkqcmV0dXJuX3RhYmxlID0gdGFibGVfZGVzYy0+cG9pbnRlcjsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YmdldGFsbC5jIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YmdldGFsbC5jCmluZGV4IDEzNGU1ZGMuLmFkOTgyMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJnZXRhbGwuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZ2V0YWxsLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInRiX2dldF9wcmltYXJ5X3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9nZXRfcHJpbWFyeV90YWJsZSk7CiAKIAkvKiBJZ25vcmUgYSBOVUxMIGFkZHJlc3MgaW4gdGhlIFJTRFQgKi8KIApAQCAtMTQwLDcgKzE0MCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigidGJfZ2V0X3NlY29uZGFyeV90YWJsZSIsIHNpZ25hdHVyZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIodGJfZ2V0X3NlY29uZGFyeV90YWJsZSwgc2lnbmF0dXJlKTsKIAogCS8qIEdldCB0aGUgaGVhZGVyIGluIG9yZGVyIHRvIG1hdGNoIHRoZSBzaWduYXR1cmUgKi8KIApAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAkvKiBTaWduYXR1cmUgbXVzdCBtYXRjaCByZXF1ZXN0ICovCiAKLQlpZiAoQUNQSV9TVFJOQ01QKGhlYWRlci5zaWduYXR1cmUsIHNpZ25hdHVyZSwgQUNQSV9OQU1FX1NJWkUpKSB7CisJaWYgKCFBQ1BJX0NPTVBBUkVfTkFNRShoZWFkZXIuc2lnbmF0dXJlLCBzaWduYXR1cmUpKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkgICAgIkluY29ycmVjdCB0YWJsZSBzaWduYXR1cmUgLSB3YW50ZWQgWyVzXSBmb3VuZCBbJTQuNHNdIiwKIAkJCSAgICBzaWduYXR1cmUsIGhlYWRlci5zaWduYXR1cmUpKTsKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgdGFibGVfaW5mbzsKIAlzdHJ1Y3QgYWNwaV9wb2ludGVyIGFkZHJlc3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9nZXRfcmVxdWlyZWRfdGFibGVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9nZXRfcmVxdWlyZWRfdGFibGVzKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIiVkIEFDUEkgdGFibGVzIGluIFJTRFRcbiIsCiAJCQkgIGFjcGlfZ2JsX3JzZHRfdGFibGVfY291bnQpKTsKQEAgLTIyMyw2ICsyMjMsNyBAQAogCSAqIGFueSBTU0RUcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWNwaV9nYmxfcnNkdF90YWJsZV9jb3VudDsgaSsrKSB7CisKIAkJLyogR2V0IHRoZSB0YWJsZSBhZGRyZXNzIGZyb20gdGhlIGNvbW1vbiBpbnRlcm5hbCBYU0RUICovCiAKIAkJYWRkcmVzcy5wb2ludGVyLnZhbHVlID0gYWNwaV9nYmxfWFNEVC0+dGFibGVfb2Zmc2V0X2VudHJ5W2ldOwpAQCAtMzA1LDYgKzMwNiw2IEBACiAKIAkvKiBBbHdheXMgZGVsZXRlIHRoZSBSU0RQIG1hcHBpbmcsIHdlIGFyZSBkb25lIHdpdGggaXQgKi8KIAotCWFjcGlfdGJfZGVsZXRlX3RhYmxlc19ieV90eXBlKEFDUElfVEFCTEVfUlNEUCk7CisJYWNwaV90Yl9kZWxldGVfdGFibGVzX2J5X3R5cGUoQUNQSV9UQUJMRV9JRF9SU0RQKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJpbnN0YWwuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJpbnN0YWwuYwppbmRleCA3ZmZkMGZkLi43Y2EyZGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RiaW5zdGFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90Ymluc3RhbC5jCkBAIC03MywxNyArNzMsMTggQEAKIHsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9tYXRjaF9zaWduYXR1cmUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX21hdGNoX3NpZ25hdHVyZSk7CiAKIAkvKiBTZWFyY2ggZm9yIGEgc2lnbmF0dXJlIG1hdGNoIGFtb25nIHRoZSBrbm93biB0YWJsZSB0eXBlcyAqLwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9BQ1BJX1RBQkxFX1RZUEVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgKEFDUElfVEFCTEVfSURfTUFYICsgMSk7IGkrKykgewogCQlpZiAoIShhY3BpX2dibF90YWJsZV9kYXRhW2ldLmZsYWdzICYgc2VhcmNoX3R5cGUpKSB7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICghQUNQSV9TVFJOQ01QKHNpZ25hdHVyZSwgYWNwaV9nYmxfdGFibGVfZGF0YVtpXS5zaWduYXR1cmUsCiAJCQkJICBhY3BpX2dibF90YWJsZV9kYXRhW2ldLnNpZ19sZW5ndGgpKSB7CisKIAkJCS8qIEZvdW5kIGEgc2lnbmF0dXJlIG1hdGNoLCByZXR1cm4gaW5kZXggaWYgcmVxdWVzdGVkICovCiAKIAkJCWlmICh0YWJsZV9pbmZvKSB7CkBAIC0xMjIsNyArMTIzLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9pbnN0YWxsX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9pbnN0YWxsX3RhYmxlKTsKIAogCS8qIExvY2sgdGFibGVzIHdoaWxlIGluc3RhbGxpbmcgKi8KIApAQCAtMTg3LDcgKzE4OCw3IEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV9oZWFkZXI7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfcmVjb2duaXplX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9yZWNvZ25pemVfdGFibGUpOwogCiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHRhYmxlIHBvaW50ZXIgKi8KIApAQCAtMjE4LDcgKzIxOSw2IEBACiAJLyogUmV0dXJuIHRoZSB0YWJsZSB0eXBlIGFuZCBsZW5ndGggdmlhIHRoZSBpbmZvIHN0cnVjdCAqLwogCiAJdGFibGVfaW5mby0+bGVuZ3RoID0gKGFjcGlfc2l6ZSkgdGFibGVfaGVhZGVyLT5sZW5ndGg7Ci0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtMjQzLDExICsyNDMsMTEgQEAKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJ0Yl9pbml0X3RhYmxlX2Rlc2NyaXB0b3IiLCB0YWJsZV90eXBlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMih0Yl9pbml0X3RhYmxlX2Rlc2NyaXB0b3IsIHRhYmxlX3R5cGUpOwogCiAJLyogQWxsb2NhdGUgYSBkZXNjcmlwdG9yIGZvciB0aGlzIHRhYmxlICovCiAKLQl0YWJsZV9kZXNjID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjKSk7CisJdGFibGVfZGVzYyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjKSk7CiAJaWYgKCF0YWJsZV9kZXNjKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KQEAgLTI3NCw3ICsyNzQsNyBAQAogCQkgKiBhdCB0aGlzIGxvY2F0aW9uLCBzbyByZXR1cm4gYW4gZXJyb3IuCiAJCSAqLwogCQlpZiAobGlzdF9oZWFkLT5uZXh0KSB7Ci0JCQlBQ1BJX01FTV9GUkVFKHRhYmxlX2Rlc2MpOworCQkJQUNQSV9GUkVFKHRhYmxlX2Rlc2MpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FMUkVBRFlfRVhJU1RTKTsKIAkJfQogCkBAIC0zMTIsMTUgKzMxMiwxNCBAQAogCiAJLyogRmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSB0YWJsZSBkZXNjcmlwdG9yICovCiAKKwl0YWJsZV9kZXNjLT5sb2FkZWRfaW50b19uYW1lc3BhY2UgPSBGQUxTRTsKIAl0YWJsZV9kZXNjLT50eXBlID0gKHU4KSB0YWJsZV90eXBlOwogCXRhYmxlX2Rlc2MtPnBvaW50ZXIgPSB0YWJsZV9pbmZvLT5wb2ludGVyOwogCXRhYmxlX2Rlc2MtPmxlbmd0aCA9IHRhYmxlX2luZm8tPmxlbmd0aDsKIAl0YWJsZV9kZXNjLT5hbGxvY2F0aW9uID0gdGFibGVfaW5mby0+YWxsb2NhdGlvbjsKIAl0YWJsZV9kZXNjLT5hbWxfc3RhcnQgPSAodTggKikgKHRhYmxlX2Rlc2MtPnBvaW50ZXIgKyAxKSwKLQkgICAgdGFibGVfZGVzYy0+YW1sX2xlbmd0aCA9ICh1MzIpICh0YWJsZV9kZXNjLT5sZW5ndGggLQotCQkJCQkgICAgKHUzMikgc2l6ZW9mKHN0cnVjdAotCQkJCQkJCSBhY3BpX3RhYmxlX2hlYWRlcikpOwotCXRhYmxlX2Rlc2MtPmxvYWRlZF9pbnRvX25hbWVzcGFjZSA9IEZBTFNFOworCSAgICB0YWJsZV9kZXNjLT5hbWxfbGVuZ3RoID0gKHUzMikKKwkgICAgKHRhYmxlX2Rlc2MtPmxlbmd0aCAtICh1MzIpIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKIAogCS8qCiAJICogU2V0IHRoZSBhcHByb3ByaWF0ZSBnbG9iYWwgcG9pbnRlciAoaWYgdGhlcmUgaXMgb25lKSB0byBwb2ludCB0byB0aGUKQEAgLTMzNSw3ICszMzQsNiBAQAogCiAJdGFibGVfaW5mby0+b3duZXJfaWQgPSB0YWJsZV9kZXNjLT5vd25lcl9pZDsKIAl0YWJsZV9pbmZvLT5pbnN0YWxsZWRfZGVzYyA9IHRhYmxlX2Rlc2M7Ci0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCkBAIC0zNTksNyArMzU3LDcgQEAKIAkgKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIEFDUEkgdGFibGVzCiAJICogTWVtb3J5IGNhbiBlaXRoZXIgYmUgbWFwcGVkIG9yIGFsbG9jYXRlZAogCSAqLwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBOVU1fQUNQSV9UQUJMRV9UWVBFUzsgdHlwZSsrKSB7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IChBQ1BJX1RBQkxFX0lEX01BWCArIDEpOyB0eXBlKyspIHsKIAkJYWNwaV90Yl9kZWxldGVfdGFibGVzX2J5X3R5cGUodHlwZSk7CiAJfQogfQpAQCAtMzgzLDkgKzM4MSw5IEBACiAJdTMyIGNvdW50OwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoInRiX2RlbGV0ZV90YWJsZXNfYnlfdHlwZSIsIHR5cGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKHRiX2RlbGV0ZV90YWJsZXNfYnlfdHlwZSwgdHlwZSk7CiAKLQlpZiAodHlwZSA+IEFDUElfVEFCTEVfTUFYKSB7CisJaWYgKHR5cGUgPiBBQ1BJX1RBQkxFX0lEX01BWCkgewogCQlyZXR1cm5fVk9JRDsKIAl9CiAKQEAgLTM5NiwyOCArMzk0LDI4IEBACiAJLyogQ2xlYXIgdGhlIGFwcHJvcHJpYXRlICJ0eXBlZCIgZ2xvYmFsIHRhYmxlIHBvaW50ZXIgKi8KIAogCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNQSV9UQUJMRV9SU0RQOgorCWNhc2UgQUNQSV9UQUJMRV9JRF9SU0RQOgogCQlhY3BpX2dibF9SU0RQID0gTlVMTDsKIAkJYnJlYWs7CiAKLQljYXNlIEFDUElfVEFCTEVfRFNEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfRFNEVDoKIAkJYWNwaV9nYmxfRFNEVCA9IE5VTEw7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1RBQkxFX0ZBRFQ6CisJY2FzZSBBQ1BJX1RBQkxFX0lEX0ZBRFQ6CiAJCWFjcGlfZ2JsX0ZBRFQgPSBOVUxMOwogCQlicmVhazsKIAotCWNhc2UgQUNQSV9UQUJMRV9GQUNTOgorCWNhc2UgQUNQSV9UQUJMRV9JRF9GQUNTOgogCQlhY3BpX2dibF9GQUNTID0gTlVMTDsKIAkJYnJlYWs7CiAKLQljYXNlIEFDUElfVEFCTEVfWFNEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfWFNEVDoKIAkJYWNwaV9nYmxfWFNEVCA9IE5VTEw7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1RBQkxFX1NTRFQ6Ci0JY2FzZSBBQ1BJX1RBQkxFX1BTRFQ6CisJY2FzZSBBQ1BJX1RBQkxFX0lEX1NTRFQ6CisJY2FzZSBBQ1BJX1RBQkxFX0lEX1BTRFQ6CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNDcxLDcgKzQ2OSw3IEBACiAKIAljYXNlIEFDUElfTUVNX0FMTE9DQVRFRDoKIAotCQlBQ1BJX01FTV9GUkVFKHRhYmxlX2Rlc2MtPnBvaW50ZXIpOworCQlBQ1BJX0ZSRUUodGFibGVfZGVzYy0+cG9pbnRlcik7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX01FTV9NQVBQRUQ6CkBAIC01MDMsNyArNTAxLDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICpuZXh0X2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidGJfdW5pbnN0YWxsX3RhYmxlIiwgdGFibGVfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIodGJfdW5pbnN0YWxsX3RhYmxlLCB0YWJsZV9kZXNjKTsKIAogCWlmICghdGFibGVfZGVzYykgewogCQlyZXR1cm5fUFRSKE5VTEwpOwpAQCAtNTMwLDcgKzUyOCw3IEBACiAJLyogRnJlZSB0aGUgdGFibGUgZGVzY3JpcHRvciAqLwogCiAJbmV4dF9kZXNjID0gdGFibGVfZGVzYy0+bmV4dDsKLQlBQ1BJX01FTV9GUkVFKHRhYmxlX2Rlc2MpOworCUFDUElfRlJFRSh0YWJsZV9kZXNjKTsKIAogCS8qIFJldHVybiBwb2ludGVyIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YnJzZHQuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJyc2R0LmMKaW5kZXggNGQzMDgyMi4uYWJjYjA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YnJzZHQuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RicnNkdC5jCkBAIC02NCw3ICs2NCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCByc2RwX2Rlc2NyaXB0b3IgKnJzZHA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl92ZXJpZnlfcnNkcCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfdmVyaWZ5X3JzZHApOwogCiAJc3dpdGNoIChhZGRyZXNzLT5wb2ludGVyX3R5cGUpIHsKIAljYXNlIEFDUElfTE9HSUNBTF9QT0lOVEVSOgpAQCAtNzgsNyArNzgsNyBAQAogCQkgKi8KIAkJc3RhdHVzID0gYWNwaV9vc19tYXBfbWVtb3J5KGFkZHJlc3MtPnBvaW50ZXIucGh5c2ljYWwsCiAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHJzZHBfZGVzY3JpcHRvciksCi0JCQkJCSAgICAodm9pZCAqKSZyc2RwKTsKKwkJCQkJICAgIEFDUElfQ0FTVF9QVFIodm9pZCwgJnJzZHApKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQpAQCAtOTUsMTUgKzk1LDIwIEBACiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQkvKiBUaGUgUlNEUCBzdXBwbGllZCBpcyBPSyAqLworCS8qIFJTRFAgaXMgb2suIEluaXQgdGhlIHRhYmxlIGluZm8gKi8KIAogCXRhYmxlX2luZm8ucG9pbnRlciA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyLCByc2RwKTsKIAl0YWJsZV9pbmZvLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcnNkcF9kZXNjcmlwdG9yKTsKLQl0YWJsZV9pbmZvLmFsbG9jYXRpb24gPSBBQ1BJX01FTV9NQVBQRUQ7CisKKwlpZiAoYWRkcmVzcy0+cG9pbnRlcl90eXBlID09IEFDUElfUEhZU0lDQUxfUE9JTlRFUikgeworCQl0YWJsZV9pbmZvLmFsbG9jYXRpb24gPSBBQ1BJX01FTV9NQVBQRUQ7CisJfSBlbHNlIHsKKwkJdGFibGVfaW5mby5hbGxvY2F0aW9uID0gQUNQSV9NRU1fTk9UX0FMTE9DQVRFRDsKKwl9CiAKIAkvKiBTYXZlIHRoZSB0YWJsZSBwb2ludGVycyBhbmQgYWxsb2NhdGlvbiBpbmZvICovCiAKLQlzdGF0dXMgPSBhY3BpX3RiX2luaXRfdGFibGVfZGVzY3JpcHRvcihBQ1BJX1RBQkxFX1JTRFAsICZ0YWJsZV9pbmZvKTsKKwlzdGF0dXMgPSBhY3BpX3RiX2luaXRfdGFibGVfZGVzY3JpcHRvcihBQ1BJX1RBQkxFX0lEX1JTRFAsICZ0YWJsZV9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byBjbGVhbnVwOwogCX0KQEAgLTE3NCwyMiArMTc5LDIwIEBACiAKIGFjcGlfc3RhdHVzIGFjcGlfdGJfdmFsaWRhdGVfcnNkdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX3B0cikKIHsKLQlpbnQgbm9fbWF0Y2g7CisJY2hhciAqc2lnbmF0dXJlOwogCiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCi0JLyoKLQkgKiBTZWFyY2ggZm9yIGFwcHJvcHJpYXRlIHNpZ25hdHVyZSwgUlNEVCBvciBYU0RUCi0JICovCisJLyogU2VhcmNoIGZvciBhcHByb3ByaWF0ZSBzaWduYXR1cmUsIFJTRFQgb3IgWFNEVCAqLworCiAJaWYgKGFjcGlfZ2JsX3Jvb3RfdGFibGVfdHlwZSA9PSBBQ1BJX1RBQkxFX1RZUEVfUlNEVCkgewotCQlub19tYXRjaCA9IEFDUElfU1RSTkNNUCgoY2hhciAqKXRhYmxlX3B0ciwgUlNEVF9TSUcsCi0JCQkJCXNpemVvZihSU0RUX1NJRykgLSAxKTsKKwkJc2lnbmF0dXJlID0gUlNEVF9TSUc7CiAJfSBlbHNlIHsKLQkJbm9fbWF0Y2ggPSBBQ1BJX1NUUk5DTVAoKGNoYXIgKil0YWJsZV9wdHIsIFhTRFRfU0lHLAotCQkJCQlzaXplb2YoWFNEVF9TSUcpIC0gMSk7CisJCXNpZ25hdHVyZSA9IFhTRFRfU0lHOwogCX0KIAotCWlmIChub19tYXRjaCkgeworCWlmICghQUNQSV9DT01QQVJFX05BTUUodGFibGVfcHRyLT5zaWduYXR1cmUsIHNpZ25hdHVyZSkpIHsKKwogCQkvKiBJbnZhbGlkIFJTRFQgb3IgWFNEVCBzaWduYXR1cmUgKi8KIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLApAQCAtMTk4LDEwICsyMDEsOCBAQAogCQlBQ1BJX0RVTVBfQlVGRkVSKGFjcGlfZ2JsX1JTRFAsIDIwKTsKIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJSU0RUL1hTRFQgc2lnbmF0dXJlIGF0ICVYICglcCkgaXMgaW52YWxpZCIsCi0JCQkgICAgYWNwaV9nYmxfUlNEUC0+cnNkdF9waHlzaWNhbF9hZGRyZXNzLAotCQkJICAgICh2b2lkICopKGFjcGlfbmF0aXZlX3VpbnQpIGFjcGlfZ2JsX1JTRFAtPgotCQkJICAgIHJzZHRfcGh5c2ljYWxfYWRkcmVzcykpOworCQkJICAgICJSU0RUL1hTRFQgc2lnbmF0dXJlIGF0ICVYIGlzIGludmFsaWQiLAorCQkJICAgIGFjcGlfZ2JsX1JTRFAtPnJzZHRfcGh5c2ljYWxfYWRkcmVzcykpOwogCiAJCWlmIChhY3BpX2dibF9yb290X3RhYmxlX3R5cGUgPT0gQUNQSV9UQUJMRV9UWVBFX1JTRFQpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sICJMb29raW5nIGZvciBSU0RUIikpOwpAQCAtMjM0LDEzICsyMzUsMTMgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfcG9pbnRlciBhZGRyZXNzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfZ2V0X3RhYmxlX3JzZHQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2dldF90YWJsZV9yc2R0KTsKIAogCS8qIEdldCB0aGUgUlNEVC9YU0RUIHZpYSB0aGUgUlNEUCAqLwogCiAJYWNwaV90Yl9nZXRfcnNkdF9hZGRyZXNzKCZhZGRyZXNzKTsKIAotCXRhYmxlX2luZm8udHlwZSA9IEFDUElfVEFCTEVfWFNEVDsKKwl0YWJsZV9pbmZvLnR5cGUgPSBBQ1BJX1RBQkxFX0lEX1hTRFQ7CiAJc3RhdHVzID0gYWNwaV90Yl9nZXRfdGFibGUoJmFkZHJlc3MsICZ0YWJsZV9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKQEAgLTI3NCwxMiArMjc1LDEzIEBACiAKIAkvKiBTYXZlIHRoZSB0YWJsZSBwb2ludGVycyBhbmQgYWxsb2NhdGlvbiBpbmZvICovCiAKLQlzdGF0dXMgPSBhY3BpX3RiX2luaXRfdGFibGVfZGVzY3JpcHRvcihBQ1BJX1RBQkxFX1hTRFQsICZ0YWJsZV9pbmZvKTsKKwlzdGF0dXMgPSBhY3BpX3RiX2luaXRfdGFibGVfZGVzY3JpcHRvcihBQ1BJX1RBQkxFX0lEX1hTRFQsICZ0YWJsZV9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0JYWNwaV9nYmxfWFNEVCA9IEFDUElfQ0FTVF9QVFIoWFNEVF9ERVNDUklQVE9SLCB0YWJsZV9pbmZvLnBvaW50ZXIpOworCWFjcGlfZ2JsX1hTRFQgPQorCSAgICBBQ1BJX0NBU1RfUFRSKHN0cnVjdCB4c2R0X2Rlc2NyaXB0b3IsIHRhYmxlX2luZm8ucG9pbnRlcik7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJYU0RUIGxvY2F0ZWQgYXQgJXBcbiIsIGFjcGlfZ2JsX1hTRFQpKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ1dGlscy5jIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YnV0aWxzLmMKaW5kZXggYmM1NzE1OS4uMjA5YTQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YnV0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YnV0aWxzLmMKQEAgLTcxLDcgKzcxLDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfaXNfdGFibGVfaW5zdGFsbGVkIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9pc190YWJsZV9pbnN0YWxsZWQpOwogCiAJLyogR2V0IHRoZSBsaXN0IGRlc2NyaXB0b3IgYW5kIGZpcnN0IHRhYmxlIGRlc2NyaXB0b3IgKi8KIApAQCAtOTYsMTAgKzk2LDExIEBACiAJCSAgICAoIUFDUElfTUVNQ01QCiAJCSAgICAgKHRhYmxlX2Rlc2MtPnBvaW50ZXIsIG5ld190YWJsZV9kZXNjLT5wb2ludGVyLAogCQkgICAgICBuZXdfdGFibGVfZGVzYy0+cG9pbnRlci0+bGVuZ3RoKSkpIHsKKwogCQkJLyogTWF0Y2g6IHRoaXMgdGFibGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQgKi8KIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9UQUJMRVMsCi0JCQkJCSAgIlRhYmxlIFslNC40c10gYWxyZWFkeSBpbnN0YWxsZWQ6IFJldiAlWCBvZW1fdGFibGVfaWQgWyU4LjhzXVxuIiwKKwkJCQkJICAiVGFibGUgWyU0LjRzXSBhbHJlYWR5IGluc3RhbGxlZDogUmV2ICVYIE9lbVRhYmxlSWQgWyU4LjhzXVxuIiwKIAkJCQkJICBuZXdfdGFibGVfZGVzYy0+cG9pbnRlci0+c2lnbmF0dXJlLAogCQkJCQkgIG5ld190YWJsZV9kZXNjLT5wb2ludGVyLT5yZXZpc2lvbiwKIAkJCQkJICBuZXdfdGFibGVfZGVzYy0+cG9pbnRlci0+CkBAIC0xNTksMTIgKzE2MCw4IEBACiAKIAlBQ1BJX01PVkVfMzJfVE9fMzIoJnNpZ25hdHVyZSwgdGFibGVfaGVhZGVyLT5zaWduYXR1cmUpOwogCWlmICghYWNwaV91dF92YWxpZF9hY3BpX25hbWUoc2lnbmF0dXJlKSkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJUYWJsZSBzaWduYXR1cmUgYXQgJXAgWyVwXSBoYXMgaW52YWxpZCBjaGFyYWN0ZXJzIiwKLQkJCSAgICB0YWJsZV9oZWFkZXIsICZzaWduYXR1cmUpKTsKLQotCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICJJbnZhbGlkIHRhYmxlIHNpZ25hdHVyZSBmb3VuZDogWyU0LjRzXSIsCi0JCQkgICAgICBBQ1BJX0NBU1RfUFRSKGNoYXIsICZzaWduYXR1cmUpKSk7CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIHRhYmxlIHNpZ25hdHVyZSAweCU4LjhYIiwKKwkJCSAgICBzaWduYXR1cmUpKTsKIAogCQlBQ1BJX0RVTVBfQlVGRkVSKHRhYmxlX2hlYWRlciwKIAkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwpAQCAtMTc1LDEyICsxNzIsOSBAQAogCiAJaWYgKHRhYmxlX2hlYWRlci0+bGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiSW52YWxpZCBsZW5ndGggaW4gdGFibGUgaGVhZGVyICVwIG5hbWUgJTQuNHMiLAotCQkJICAgIHRhYmxlX2hlYWRlciwgKGNoYXIgKikmc2lnbmF0dXJlKSk7Ci0KLQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIkludmFsaWQgdGFibGUgaGVhZGVyIGxlbmd0aCAoMHglWCkgZm91bmQiLAotCQkJICAgICAgKHUzMikgdGFibGVfaGVhZGVyLT5sZW5ndGgpKTsKKwkJCSAgICAiSW52YWxpZCBsZW5ndGggMHglWCBpbiB0YWJsZSB3aXRoIHNpZ25hdHVyZSAlNC40cyIsCisJCQkgICAgKHUzMikgdGFibGVfaGVhZGVyLT5sZW5ndGgsCisJCQkgICAgQUNQSV9DQVNUX1BUUihjaGFyLCAmc2lnbmF0dXJlKSkpOwogCiAJCUFDUElfRFVNUF9CVUZGRVIodGFibGVfaGVhZGVyLAogCQkJCSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CkBAIC0xOTIsNzIgKzE4NiwxMTkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV90Yl92ZXJpZnlfdGFibGVfY2hlY2tzdW0KKyAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX3N1bV90YWJsZQogICoKLSAqIFBBUkFNRVRFUlM6ICAqdGFibGVfaGVhZGVyICAgICAgICAgICAtIEFDUEkgdGFibGUgdG8gdmVyaWZ5CisgKiBQQVJBTUVURVJTOiAgQnVmZmVyICAgICAgICAgICAgICAtIEJ1ZmZlciB0byBzdW0KKyAqICAgICAgICAgICAgICBMZW5ndGggICAgICAgICAgICAgIC0gU2l6ZSBvZiB0aGUgYnVmZmVyCiAgKgotICogUkVUVVJOOiAgICAgIDggYml0IGNoZWNrc3VtIG9mIHRhYmxlCisgKiBSRVRVUk46ICAgICAgOCBiaXQgc3VtIG9mIGJ1ZmZlcgogICoKLSAqIERFU0NSSVBUSU9OOiBEb2VzIGFuIDggYml0IGNoZWNrc3VtIG9mIHRhYmxlIGFuZCByZXR1cm5zIHN0YXR1cy4gIEEgY29ycmVjdAotICogICAgICAgICAgICAgIHRhYmxlIHNob3VsZCBoYXZlIGEgY2hlY2tzdW0gb2YgMC4KKyAqIERFU0NSSVBUSU9OOiBDb21wdXRlcyBhbiA4IGJpdCBzdW0gb2YgdGhlIGJ1ZmZlcihsZW5ndGgpIGFuZCByZXR1cm5zIGl0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWFjcGlfc3RhdHVzCi1hY3BpX3RiX3ZlcmlmeV90YWJsZV9jaGVja3N1bShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiB0YWJsZV9oZWFkZXIpCit1OCBhY3BpX3RiX3N1bV90YWJsZSh2b2lkICpidWZmZXIsIHUzMiBsZW5ndGgpCiB7Ci0JdTggY2hlY2tzdW07Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJYWNwaV9uYXRpdmVfdWludCBpOworCXU4IHN1bSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl92ZXJpZnlfdGFibGVfY2hlY2tzdW0iKTsKLQotCS8qIENvbXB1dGUgdGhlIGNoZWNrc3VtIG9uIHRoZSB0YWJsZSAqLwotCi0JY2hlY2tzdW0gPQotCSAgICBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHRhYmxlX2hlYWRlciwgdGFibGVfaGVhZGVyLT5sZW5ndGgpOwotCi0JLyogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gKi8KLQotCWlmIChjaGVja3N1bSkgewotCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkgICAgICAiSW52YWxpZCBjaGVja3N1bSBpbiB0YWJsZSBbJTQuNHNdICglMDJYLCBzdW0gJTAyWCBpcyBub3QgemVybykiLAotCQkJICAgICAgdGFibGVfaGVhZGVyLT5zaWduYXR1cmUsCi0JCQkgICAgICAodTMyKSB0YWJsZV9oZWFkZXItPmNoZWNrc3VtLCAodTMyKSBjaGVja3N1bSkpOwotCi0JCXN0YXR1cyA9IEFFX0JBRF9DSEVDS1NVTTsKKwlpZiAoIWJ1ZmZlciB8fCAhbGVuZ3RoKSB7CisJCXJldHVybiAoMCk7CiAJfQotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXN1bSA9ICh1OCkgKHN1bSArICgodTggKikgYnVmZmVyKVtpXSk7CisJfQorCXJldHVybiAoc3VtKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV90Yl9nZW5lcmF0ZV9jaGVja3N1bQogICoKLSAqIFBBUkFNRVRFUlM6ICBCdWZmZXIgICAgICAgICAgICAgIC0gQnVmZmVyIHRvIGNoZWNrc3VtCi0gKiAgICAgICAgICAgICAgTGVuZ3RoICAgICAgICAgICAgICAtIFNpemUgb2YgdGhlIGJ1ZmZlcgorICogUEFSQU1FVEVSUzogIFRhYmxlICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGEgdmFsaWQgQUNQSSB0YWJsZSAod2l0aCBhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIEFDUEkgaGVhZGVyKQogICoKICAqIFJFVFVSTjogICAgICA4IGJpdCBjaGVja3N1bSBvZiBidWZmZXIKICAqCi0gKiBERVNDUklQVElPTjogQ29tcHV0ZXMgYW4gOCBiaXQgY2hlY2tzdW0gb2YgdGhlIGJ1ZmZlcihsZW5ndGgpIGFuZCByZXR1cm5zIGl0LgorICogREVTQ1JJUFRJT046IENvbXB1dGVzIGFuIDggYml0IGNoZWNrc3VtIG9mIHRoZSB0YWJsZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi11OCBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHZvaWQgKmJ1ZmZlciwgdTMyIGxlbmd0aCkKK3U4IGFjcGlfdGJfZ2VuZXJhdGVfY2hlY2tzdW0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICogdGFibGUpCiB7Ci0JdTggKmVuZF9idWZmZXI7Ci0JdTggKnJvdmVyOwotCXU4IHN1bSA9IDA7CisJdTggY2hlY2tzdW07CiAKLQlpZiAoYnVmZmVyICYmIGxlbmd0aCkgewotCQkvKiAgQnVmZmVyIGFuZCBMZW5ndGggYXJlIHZhbGlkICAgKi8KKwkvKiBTdW0gdGhlIGVudGlyZSB0YWJsZSBhcy1pcyAqLwogCi0JCWVuZF9idWZmZXIgPSBBQ1BJX0FERF9QVFIodTgsIGJ1ZmZlciwgbGVuZ3RoKTsKKwljaGVja3N1bSA9IGFjcGlfdGJfc3VtX3RhYmxlKHRhYmxlLCB0YWJsZS0+bGVuZ3RoKTsKIAotCQlmb3IgKHJvdmVyID0gYnVmZmVyOyByb3ZlciA8IGVuZF9idWZmZXI7IHJvdmVyKyspIHsKLQkJCXN1bSA9ICh1OCkgKHN1bSArICpyb3Zlcik7Ci0JCX0KKwkvKiBTdWJ0cmFjdCBvZmYgdGhlIGV4aXN0aW5nIGNoZWNrc3VtIHZhbHVlIGluIHRoZSB0YWJsZSAqLworCisJY2hlY2tzdW0gPSAodTgpIChjaGVja3N1bSAtIHRhYmxlLT5jaGVja3N1bSk7CisKKwkvKiBDb21wdXRlIHRoZSBmaW5hbCBjaGVja3N1bSAqLworCisJY2hlY2tzdW0gPSAodTgpICgwIC0gY2hlY2tzdW0pOworCXJldHVybiAoY2hlY2tzdW0pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX3NldF9jaGVja3N1bQorICoKKyAqIFBBUkFNRVRFUlM6ICBUYWJsZSAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBhIHZhbGlkIEFDUEkgdGFibGUgKHdpdGggYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZCBBQ1BJIGhlYWRlcikKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZS4gU2V0cyB0aGUgdGFibGUgY2hlY2tzdW0gZmllbGQKKyAqCisgKiBERVNDUklQVElPTjogQ29tcHV0ZXMgYW4gOCBiaXQgY2hlY2tzdW0gb2YgdGhlIHRhYmxlIGFuZCBpbnNlcnRzIHRoZQorICogICAgICAgICAgICAgIGNoZWNrc3VtIGludG8gdGhlIHRhYmxlIGhlYWRlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGFjcGlfdGJfc2V0X2NoZWNrc3VtKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpCit7CisKKwl0YWJsZS0+Y2hlY2tzdW0gPSBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHRhYmxlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV90Yl92ZXJpZnlfdGFibGVfY2hlY2tzdW0KKyAqCisgKiBQQVJBTUVURVJTOiAgKnRhYmxlX2hlYWRlciAgICAgICAgICAgLSBBQ1BJIHRhYmxlIHRvIHZlcmlmeQorICoKKyAqIFJFVFVSTjogICAgICA4IGJpdCBjaGVja3N1bSBvZiB0YWJsZQorICoKKyAqIERFU0NSSVBUSU9OOiBHZW5lcmF0ZXMgYW4gOCBiaXQgY2hlY2tzdW0gb2YgdGFibGUgYW5kIHJldHVybnMgYW5kIGNvbXBhcmVzCisgKiAgICAgICAgICAgICAgaXQgdG8gdGhlIGV4aXN0aW5nIGNoZWNrc3VtIHZhbHVlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzCithY3BpX3RiX3ZlcmlmeV90YWJsZV9jaGVja3N1bShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX2hlYWRlcikKK3sKKwl1OCBjaGVja3N1bTsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfdmVyaWZ5X3RhYmxlX2NoZWNrc3VtKTsKKworCS8qIENvbXB1dGUgdGhlIGNoZWNrc3VtIG9uIHRoZSB0YWJsZSAqLworCisJY2hlY2tzdW0gPSBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHRhYmxlX2hlYWRlcik7CisKKwkvKiBDaGVja3N1bSBvaz8gKi8KKworCWlmIChjaGVja3N1bSA9PSB0YWJsZV9oZWFkZXItPmNoZWNrc3VtKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiAJfQotCXJldHVybiAoc3VtKTsKKworCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJICAgICAgIkluY29ycmVjdCBjaGVja3N1bSBpbiB0YWJsZSBbJTQuNHNdIC0gaXMgJTIuMlgsIHNob3VsZCBiZSAlMi4yWCIsCisJCSAgICAgIHRhYmxlX2hlYWRlci0+c2lnbmF0dXJlLCB0YWJsZV9oZWFkZXItPmNoZWNrc3VtLAorCQkgICAgICBjaGVja3N1bSkpOworCisJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9DSEVDS1NVTSk7CiB9CiAKICNpZmRlZiBBQ1BJX09CU09MRVRFX0ZVTkNUSU9OUwpAQCAtMjc2LDEyICszMTcsMTIgQEAKIAogYWNwaV9zdGF0dXMKIGFjcGlfdGJfaGFuZGxlX3RvX29iamVjdCh1MTYgdGFibGVfaWQsCi0JCQkgc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqKiByZXR1cm5fdGFibGVfZGVzYykKKwkJCSBzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICoqcmV0dXJuX3RhYmxlX2Rlc2MpCiB7CiAJdTMyIGk7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgidGJfaGFuZGxlX3RvX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fTkFNRSh0Yl9oYW5kbGVfdG9fb2JqZWN0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1RBQkxFX01BWDsgaSsrKSB7CiAJCXRhYmxlX2Rlc2MgPSBhY3BpX2dibF90YWJsZV9saXN0c1tpXS5uZXh0OwpAQCAtMjk1LDcgKzMzNiw3IEBACiAJCX0KIAl9CiAKLQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAidGFibGVfaWQ9JVggZG9lcyBub3QgZXhpc3QiLCB0YWJsZV9pZCkpOworCUFDUElfRVJST1IoKEFFX0lORk8sICJUYWJsZUlkPSVYIGRvZXMgbm90IGV4aXN0IiwgdGFibGVfaWQpKTsKIAlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RieGZhY2UuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCmluZGV4IDlmZTUzYzkuLjRlOTFmMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCkBAIC00Miw4ICs0Miw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogI2luY2x1ZGUgPGFjcGkvYWN0YWJsZXMuaD4KQEAgLTY4LDcgKzY2LDcgQEAKIAlzdHJ1Y3QgYWNwaV9wb2ludGVyIHJzZHBfYWRkcmVzczsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2xvYWRfdGFibGVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2xvYWRfdGFibGVzKTsKIAogCS8qIEdldCB0aGUgUlNEUCAqLwogCkBAIC0xMjMsNiArMTIxLDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbG9hZF90YWJsZXMpCisKICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMzksMTQgKzEzOSwxMyBAQAogICogICAgICAgICAgICAgIGlzIGRldGVybWluZWQgdGhhdCB0aGUgdGFibGUgaXMgaW52YWxpZCwgdGhlIGNhbGwgd2lsbCBmYWlsLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfbG9hZF90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX3B0cikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyB0YWJsZV9pbmZvOwogCXN0cnVjdCBhY3BpX3BvaW50ZXIgYWRkcmVzczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbG9hZF90YWJsZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9sb2FkX3RhYmxlKTsKIAogCWlmICghdGFibGVfcHRyKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTE3NCw2ICsxNzMsNyBAQAogCXN0YXR1cyA9IGFjcGlfdGJfaW5zdGFsbF90YWJsZSgmdGFibGVfaW5mbyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWlmIChzdGF0dXMgPT0gQUVfQUxSRUFEWV9FWElTVFMpIHsKKwogCQkJLyogVGFibGUgYWxyZWFkeSBleGlzdHMsIG5vIGVycm9yICovCiAKIAkJCXN0YXR1cyA9IEFFX09LOwpAQCAtMTg4LDEyICsxODgsMTIgQEAKIAkvKiBDb252ZXJ0IHRoZSB0YWJsZSB0byBjb21tb24gZm9ybWF0IGlmIG5lY2Vzc2FyeSAqLwogCiAJc3dpdGNoICh0YWJsZV9pbmZvLnR5cGUpIHsKLQljYXNlIEFDUElfVEFCTEVfRkFEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfRkFEVDoKIAogCQlzdGF0dXMgPSBhY3BpX3RiX2NvbnZlcnRfdGFibGVfZmFkdCgpOwogCQlicmVhazsKIAotCWNhc2UgQUNQSV9UQUJMRV9GQUNTOgorCWNhc2UgQUNQSV9UQUJMRV9JRF9GQUNTOgogCiAJCXN0YXR1cyA9IGFjcGlfdGJfYnVpbGRfY29tbW9uX2ZhY3MoJnRhYmxlX2luZm8pOwogCQlicmVhazsKQEAgLTIwOCw2ICsyMDgsNyBAQAogCX0KIAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCS8qIFVuaW5zdGFsbCB0YWJsZSBhbmQgZnJlZSB0aGUgYnVmZmVyICovCiAKIAkJKHZvaWQpYWNwaV90Yl91bmluc3RhbGxfdGFibGUodGFibGVfaW5mby5pbnN0YWxsZWRfZGVzYyk7CkBAIC0yMTYsNiArMjE3LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbG9hZF90YWJsZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91bmxvYWRfdGFibGUKQEAgLTIyNywxNiArMjMwLDE1IEBACiAgKiBERVNDUklQVElPTjogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZm9yY2UgdGhlIHVubG9hZCBvZiBhIHRhYmxlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV91bmxvYWRfdGFibGUoYWNwaV90YWJsZV90eXBlIHRhYmxlX3R5cGUpCiB7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdW5sb2FkX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3VubG9hZF90YWJsZSk7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCi0JaWYgKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX01BWCkgeworCWlmICh0YWJsZV90eXBlID4gQUNQSV9UQUJMRV9JRF9NQVgpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIApAQCAtMjYxLDYgKzI2Myw4IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfdW5sb2FkX3RhYmxlKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF90YWJsZV9oZWFkZXIKQEAgLTI4MSw3ICsyODUsNiBAQAogICogICAgICAgICAgICAgIGhhdmUgYSBzdGFuZGFyZCBoZWFkZXIgYW5kIGlzIGZpeGVkIGxlbmd0aC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfdGFibGVfaGVhZGVyKGFjcGlfdGFibGVfdHlwZSB0YWJsZV90eXBlLAogCQkgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqb3V0X3RhYmxlX2hlYWRlcikKQEAgLTI4OSwxNiArMjkyLDE2IEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YmxfcHRyOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X3RhYmxlX2hlYWRlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfdGFibGVfaGVhZGVyKTsKIAogCWlmICgoaW5zdGFuY2UgPT0gMCkgfHwKLQkgICAgKHRhYmxlX3R5cGUgPT0gQUNQSV9UQUJMRV9SU0RQKSB8fCAoIW91dF90YWJsZV9oZWFkZXIpKSB7CisJICAgICh0YWJsZV90eXBlID09IEFDUElfVEFCTEVfSURfUlNEUCkgfHwgKCFvdXRfdGFibGVfaGVhZGVyKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHRhYmxlIHR5cGUgYW5kIGluc3RhbmNlICovCiAKLQlpZiAoKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX01BWCkgfHwKKwlpZiAoKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX0lEX01BWCkgfHwKIAkgICAgKEFDUElfSVNfU0lOR0xFX1RBQkxFKGFjcGlfZ2JsX3RhYmxlX2RhdGFbdGFibGVfdHlwZV0uZmxhZ3MpICYmCiAJICAgICBpbnN0YW5jZSA+IDEpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTMyNSw2ICszMjgsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfdGFibGVfaGVhZGVyKQogI2VuZGlmCQkJCS8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM0OSw3ICszNTMsNiBAQAogICogICAgICAgICAgICAgIGEgY29tcGxldGUgdGFibGUgaW5jbHVkaW5nIHRoZSBoZWFkZXIuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X3RhYmxlKGFjcGlfdGFibGVfdHlwZSB0YWJsZV90eXBlLAogCSAgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcikKQEAgLTM1OCw3ICszNjEsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX3NpemUgdGFibGVfbGVuZ3RoOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfdGFibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3RhYmxlKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTM3Myw3ICszNzYsNyBAQAogCiAJLyogQ2hlY2sgdGhlIHRhYmxlIHR5cGUgYW5kIGluc3RhbmNlICovCiAKLQlpZiAoKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX01BWCkgfHwKKwlpZiAoKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX0lEX01BWCkgfHwKIAkgICAgKEFDUElfSVNfU0lOR0xFX1RBQkxFKGFjcGlfZ2JsX3RhYmxlX2RhdGFbdGFibGVfdHlwZV0uZmxhZ3MpICYmCiAJICAgICBpbnN0YW5jZSA+IDEpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTM5Niw3ICszOTksOCBAQAogCiAJLyogR2V0IHRoZSB0YWJsZSBsZW5ndGggKi8KIAotCWlmICh0YWJsZV90eXBlID09IEFDUElfVEFCTEVfUlNEUCkgeworCWlmICh0YWJsZV90eXBlID09IEFDUElfVEFCTEVfSURfUlNEUCkgeworCiAJCS8qIFJTRCBQVFIgaXMgdGhlIG9ubHkgInRhYmxlIiB3aXRob3V0IGEgaGVhZGVyICovCiAKIAkJdGFibGVfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByc2RwX2Rlc2NyaXB0b3IpOwpAQCAtNDE3LDQgKzQyMSw0IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF90YWJsZSk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfdGFibGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RieGZyb290LmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RieGZyb290LmMKaW5kZXggYTYyZGI2YS4uZGEyNjQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90Ynhmcm9vdC5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZnJvb3QuYwpAQCAtNDEsOCArNDEsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWN0YWJsZXMuaD4KIApAQCAtNzUsNiArNzMsNyBAQAogCSAqICBUaGUgc2lnbmF0dXJlIGFuZCBjaGVja3N1bSBtdXN0IGJvdGggYmUgY29ycmVjdAogCSAqLwogCWlmIChBQ1BJX1NUUk5DTVAoKGNoYXIgKilyc2RwLCBSU0RQX1NJRywgc2l6ZW9mKFJTRFBfU0lHKSAtIDEpICE9IDApIHsKKwogCQkvKiBOb3BlLCBCQUQgU2lnbmF0dXJlICovCiAKIAkJcmV0dXJuIChBRV9CQURfU0lHTkFUVVJFKTsKQEAgLTgyLDE1ICs4MSwxNCBAQAogCiAJLyogQ2hlY2sgdGhlIHN0YW5kYXJkIGNoZWNrc3VtICovCiAKLQlpZiAoYWNwaV90Yl9nZW5lcmF0ZV9jaGVja3N1bShyc2RwLCBBQ1BJX1JTRFBfQ0hFQ0tTVU1fTEVOR1RIKSAhPSAwKSB7CisJaWYgKGFjcGlfdGJfc3VtX3RhYmxlKHJzZHAsIEFDUElfUlNEUF9DSEVDS1NVTV9MRU5HVEgpICE9IDApIHsKIAkJcmV0dXJuIChBRV9CQURfQ0hFQ0tTVU0pOwogCX0KIAogCS8qIENoZWNrIGV4dGVuZGVkIGNoZWNrc3VtIGlmIHRhYmxlIHZlcnNpb24gPj0gMiAqLwogCiAJaWYgKChyc2RwLT5yZXZpc2lvbiA+PSAyKSAmJgotCSAgICAoYWNwaV90Yl9nZW5lcmF0ZV9jaGVja3N1bShyc2RwLCBBQ1BJX1JTRFBfWENIRUNLU1VNX0xFTkdUSCkgIT0KLQkgICAgIDApKSB7CisJICAgIChhY3BpX3RiX3N1bV90YWJsZShyc2RwLCBBQ1BJX1JTRFBfWENIRUNLU1VNX0xFTkdUSCkgIT0gMCkpIHsKIAkJcmV0dXJuIChBRV9CQURfQ0hFQ0tTVU0pOwogCX0KIApAQCAtMTIxLDcgKzExOSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9maW5kX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9maW5kX3RhYmxlKTsKIAogCS8qIFZhbGlkYXRlIHN0cmluZyBsZW5ndGhzICovCiAKQEAgLTEzMSw3ICsxMjksNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX1NUUklOR19MSU1JVCk7CiAJfQogCi0JaWYgKCFBQ1BJX1NUUk5DTVAoc2lnbmF0dXJlLCBEU0RUX1NJRywgQUNQSV9OQU1FX1NJWkUpKSB7CisJaWYgKEFDUElfQ09NUEFSRV9OQU1FKHNpZ25hdHVyZSwgRFNEVF9TSUcpKSB7CiAJCS8qCiAJCSAqIFRoZSBEU0RUIHBvaW50ZXIgaXMgY29udGFpbmVkIGluIHRoZSBGQURULCBub3QgdGhlIFJTRFQuCiAJCSAqIFRoaXMgY29kZSBzaG91bGQgc3VmZmljZSwgYmVjYXVzZSB0aGUgb25seSBjb2RlIHRoYXQgd291bGQgcGVyZm9ybQpAQCAtMTU2LDEwICsxNTQsMTIgQEAKIAogCS8qIENoZWNrIG9lbV9pZCBhbmQgb2VtX3RhYmxlX2lkICovCiAKLQlpZiAoKG9lbV9pZFswXSAmJiBBQ1BJX1NUUk5DTVAob2VtX2lkLCB0YWJsZS0+b2VtX2lkLAotCQkJCSAgICAgICBzaXplb2YodGFibGUtPm9lbV9pZCkpKSB8fAotCSAgICAob2VtX3RhYmxlX2lkWzBdICYmIEFDUElfU1RSTkNNUChvZW1fdGFibGVfaWQsIHRhYmxlLT5vZW1fdGFibGVfaWQsCi0JCQkJCSAgICAgc2l6ZW9mKHRhYmxlLT5vZW1fdGFibGVfaWQpKSkpIHsKKwlpZiAoKG9lbV9pZFswXSAmJgorCSAgICAgQUNQSV9TVFJOQ01QKG9lbV9pZCwgdGFibGUtPm9lbV9pZCwKKwkJCSAgc2l6ZW9mKHRhYmxlLT5vZW1faWQpKSkgfHwKKwkgICAgKG9lbV90YWJsZV9pZFswXSAmJgorCSAgICAgQUNQSV9TVFJOQ01QKG9lbV90YWJsZV9pZCwgdGFibGUtPm9lbV90YWJsZV9pZCwKKwkJCSAgc2l6ZW9mKHRhYmxlLT5vZW1fdGFibGVfaWQpKSkpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9OQU1FX05PVF9GT1VORCk7CiAJfQogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAl1MzIgaTsKIAl1MzIgajsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X2Zpcm13YXJlX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF9maXJtd2FyZV90YWJsZSk7CiAKIAkvKgogCSAqIEVuc3VyZSB0aGF0IGF0IGxlYXN0IHRoZSB0YWJsZSBtYW5hZ2VyIGlzIGluaXRpYWxpemVkLiAgV2UgZG9uJ3QKQEAgLTIxNyw2ICsyMTcsNyBAQAogCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSBSU0RQICovCiAKIAlpZiAoIWFjcGlfZ2JsX1JTRFApIHsKKwogCQkvKiBHZXQgdGhlIFJTRFAgKi8KIAogCQlzdGF0dXMgPSBhY3BpX29zX2dldF9yb290X3BvaW50ZXIoZmxhZ3MsICZhZGRyZXNzKTsKQEAgLTI2MSw3ICsyNjIsNyBAQAogCiAJLyogR2V0IGFuZCB2YWxpZGF0ZSB0aGUgUlNEVCAqLwogCi0JcnNkdF9pbmZvID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjKSk7CisJcnNkdF9pbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MpKTsKIAlpZiAoIXJzZHRfaW5mbykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CkBAIC0yNzgsMTMgKzI3OSwxMyBAQAogCiAJLyogQWxsb2NhdGUgYSBzY3JhdGNoIHRhYmxlIGhlYWRlciBhbmQgdGFibGUgZGVzY3JpcHRvciAqLwogCi0JaGVhZGVyID0gQUNQSV9NRU1fQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworCWhlYWRlciA9IEFDUElfQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwogCWlmICghaGVhZGVyKSB7CiAJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCXRhYmxlX2luZm8gPSBBQ1BJX01FTV9BTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfZGVzYykpOworCXRhYmxlX2luZm8gPSBBQ1BJX0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjKSk7CiAJaWYgKCF0YWJsZV9pbmZvKSB7CiAJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKIAkJZ290byBjbGVhbnVwOwpAQCAtMzA4LDEyICszMDksMTIgQEAKIAkJaWYgKGFjcGlfZ2JsX3Jvb3RfdGFibGVfdHlwZSA9PSBBQ1BJX1RBQkxFX1RZUEVfUlNEVCkgewogCQkJYWRkcmVzcy5wb2ludGVyLnZhbHVlID0KIAkJCSAgICAoQUNQSV9DQVNUX1BUUgotCQkJICAgICAoUlNEVF9ERVNDUklQVE9SLAorCQkJICAgICAoc3RydWN0IHJzZHRfZGVzY3JpcHRvciwKIAkJCSAgICAgIHJzZHRfaW5mby0+cG9pbnRlcikpLT50YWJsZV9vZmZzZXRfZW50cnlbaV07CiAJCX0gZWxzZSB7CiAJCQlhZGRyZXNzLnBvaW50ZXIudmFsdWUgPQogCQkJICAgIChBQ1BJX0NBU1RfUFRSCi0JCQkgICAgIChYU0RUX0RFU0NSSVBUT1IsCisJCQkgICAgIChzdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yLAogCQkJICAgICAgcnNkdF9pbmZvLT5wb2ludGVyKSktPnRhYmxlX29mZnNldF9lbnRyeVtpXTsKIAkJfQogCkBAIC0zMjYsMTEgKzMyNywxMyBAQAogCiAJCS8qIENvbXBhcmUgdGFibGUgc2lnbmF0dXJlcyBhbmQgdGFibGUgaW5zdGFuY2UgKi8KIAotCQlpZiAoIUFDUElfU1RSTkNNUChoZWFkZXItPnNpZ25hdHVyZSwgc2lnbmF0dXJlLCBBQ1BJX05BTUVfU0laRSkpIHsKKwkJaWYgKEFDUElfQ09NUEFSRV9OQU1FKGhlYWRlci0+c2lnbmF0dXJlLCBzaWduYXR1cmUpKSB7CisKIAkJCS8qIEFuIGluc3RhbmNlIG9mIHRoZSB0YWJsZSB3YXMgZm91bmQgKi8KIAogCQkJaisrOwogCQkJaWYgKGogPj0gaW5zdGFuY2UpIHsKKwogCQkJCS8qIEZvdW5kIHRoZSBjb3JyZWN0IGluc3RhbmNlLCBnZXQgdGhlIGVudGlyZSB0YWJsZSAqLwogCiAJCQkJc3RhdHVzID0KQEAgLTM1NSwyMyArMzU4LDIxIEBACiAJCWFjcGlfb3NfdW5tYXBfbWVtb3J5KHJzZHRfaW5mby0+cG9pbnRlciwKIAkJCQkgICAgIChhY3BpX3NpemUpIHJzZHRfaW5mby0+cG9pbnRlci0+bGVuZ3RoKTsKIAl9Ci0JQUNQSV9NRU1fRlJFRShyc2R0X2luZm8pOworCUFDUElfRlJFRShyc2R0X2luZm8pOwogCiAJaWYgKGhlYWRlcikgewotCQlBQ1BJX01FTV9GUkVFKGhlYWRlcik7CisJCUFDUElfRlJFRShoZWFkZXIpOwogCX0KIAlpZiAodGFibGVfaW5mbykgewotCQlBQ1BJX01FTV9GUkVFKHRhYmxlX2luZm8pOworCQlBQ1BJX0ZSRUUodGFibGVfaW5mbyk7CiAJfQogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2Zpcm13YXJlX3RhYmxlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9maXJtd2FyZV90YWJsZSkKIAogLyogVEJEOiBNb3ZlIHRvIGEgbmV3IGZpbGUgKi8KLQogI2lmIEFDUElfTUFDSElORV9XSURUSCAhPSAxNgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2ZpbmRfcm9vdF9wb2ludGVyCkBAIC0zODQsMTMgKzM4NSwxMiBAQAogICogREVTQ1JJUFRJT046IEZpbmQgdGhlIFJTRFAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2ZpbmRfcm9vdF9wb2ludGVyKHUzMiBmbGFncywgc3RydWN0IGFjcGlfcG9pbnRlciAqcnNkcF9hZGRyZXNzKQogewogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgdGFibGVfaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2ZpbmRfcm9vdF9wb2ludGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2ZpbmRfcm9vdF9wb2ludGVyKTsKIAogCS8qIEdldCB0aGUgUlNEUCAqLwogCkBAIC00MDcsNiArNDA3LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9maW5kX3Jvb3RfcG9pbnRlcikKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV90Yl9zY2FuX21lbW9yeV9mb3JfcnNkcApAQCAtNDE5LDE0ICs0MjEsMTMgQEAKICAqIERFU0NSSVBUSU9OOiBTZWFyY2ggYSBibG9jayBvZiBtZW1vcnkgZm9yIHRoZSBSU0RQIHNpZ25hdHVyZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHN0YXRpYyB1OCAqYWNwaV90Yl9zY2FuX21lbW9yeV9mb3JfcnNkcCh1OCAqIHN0YXJ0X2FkZHJlc3MsIHUzMiBsZW5ndGgpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXU4ICptZW1fcm92ZXI7CiAJdTggKmVuZF9hZGRyZXNzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfc2Nhbl9tZW1vcnlfZm9yX3JzZHAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX3NjYW5fbWVtb3J5X2Zvcl9yc2RwKTsKIAogCWVuZF9hZGRyZXNzID0gc3RhcnRfYWRkcmVzcyArIGxlbmd0aDsKIApAQCAtNDM0LDEyICs0MzUsMTQgQEAKIAogCWZvciAobWVtX3JvdmVyID0gc3RhcnRfYWRkcmVzczsgbWVtX3JvdmVyIDwgZW5kX2FkZHJlc3M7CiAJICAgICBtZW1fcm92ZXIgKz0gQUNQSV9SU0RQX1NDQU5fU1RFUCkgeworCiAJCS8qIFRoZSBSU0RQIHNpZ25hdHVyZSBhbmQgY2hlY2tzdW0gbXVzdCBib3RoIGJlIGNvcnJlY3QgKi8KIAogCQlzdGF0dXMgPQogCQkgICAgYWNwaV90Yl92YWxpZGF0ZV9yc2RwKEFDUElfQ0FTVF9QVFIKIAkJCQkJICAoc3RydWN0IHJzZHBfZGVzY3JpcHRvciwgbWVtX3JvdmVyKSk7CiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCiAJCQkvKiBTaWcgYW5kIGNoZWNrc3VtIHZhbGlkLCB3ZSBoYXZlIGZvdW5kIGEgcmVhbCBSU0RQICovCiAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKQEAgLTQ2OSwxMCArNDcyLDEwIEBACiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cywgUlNEUCBwaHlzaWNhbCBhZGRyZXNzCiAgKgotICogREVTQ1JJUFRJT046IHNlYXJjaCBsb3dlciAxX21ieXRlIG9mIG1lbW9yeSBmb3IgdGhlIHJvb3Qgc3lzdGVtIGRlc2NyaXB0b3IKKyAqIERFU0NSSVBUSU9OOiBTZWFyY2ggbG93ZXIgMV9tYnl0ZSBvZiBtZW1vcnkgZm9yIHRoZSByb290IHN5c3RlbSBkZXNjcmlwdG9yCiAgKiAgICAgICAgICAgICAgcG9pbnRlciBzdHJ1Y3R1cmUuICBJZiBpdCBpcyBmb3VuZCwgc2V0ICpSU0RQIHRvIHBvaW50IHRvIGl0LgogICoKLSAqICAgICAgICAgICAgICBOT1RFMTogVGhlIFJTRHAgbXVzdCBiZSBlaXRoZXIgaW4gdGhlIGZpcnN0IDFfayBvZiB0aGUgRXh0ZW5kZWQKKyAqICAgICAgICAgICAgICBOT1RFMTogVGhlIFJTRFAgbXVzdCBiZSBlaXRoZXIgaW4gdGhlIGZpcnN0IDFfayBvZiB0aGUgRXh0ZW5kZWQKICAqICAgICAgICAgICAgICBCSU9TIERhdGEgQXJlYSBvciBiZXR3ZWVuIEUwMDAwIGFuZCBGRkZGRiAoRnJvbSBBQ1BJIFNwZWMuKQogICogICAgICAgICAgICAgIE9ubHkgYSAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBpcyBuZWNlc3NhcnkuCiAgKgpAQCAtNDg5LDEyICs0OTIsMTMgQEAKIAl1MzIgcGh5c2ljYWxfYWRkcmVzczsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9maW5kX3JzZHAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2ZpbmRfcnNkcCk7CiAKIAkvKgogCSAqIFNjYW4gc3VwcG9ydHMgZWl0aGVyIGxvZ2ljYWwgYWRkcmVzc2luZyBvciBwaHlzaWNhbCBhZGRyZXNzaW5nCiAJICovCiAJaWYgKChmbGFncyAmIEFDUElfTUVNT1JZX01PREUpID09IEFDUElfTE9HSUNBTF9BRERSRVNTSU5HKSB7CisKIAkJLyogMWEpIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIEV4dGVuZGVkIEJJT1MgRGF0YSBBcmVhIChFQkRBKSAqLwogCiAJCXN0YXR1cyA9IGFjcGlfb3NfbWFwX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQpAQCAtNTIxLDcgKzUyNSw3IEBACiAKIAkJaWYgKHBoeXNpY2FsX2FkZHJlc3MgPiAweDQwMCkgewogCQkJLyoKLQkJCSAqIDFiKSBTZWFyY2ggRUJEQSBwYXJhZ3JhcGhzIChFQkRhIGlzIHJlcXVpcmVkIHRvIGJlIGEKKwkJCSAqIDFiKSBTZWFyY2ggRUJEQSBwYXJhZ3JhcGhzIChFQkRBIGlzIHJlcXVpcmVkIHRvIGJlIGEKIAkJCSAqICAgICBtaW5pbXVtIG9mIDFfayBsZW5ndGgpCiAJCQkgKi8KIAkJCXN0YXR1cyA9IGFjcGlfb3NfbWFwX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQpAQCAtNTQyLDEwICs1NDYsMTEgQEAKIAkJCWFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlX3B0ciwgQUNQSV9FQkRBX1dJTkRPV19TSVpFKTsKIAogCQkJaWYgKG1lbV9yb3ZlcikgeworCiAJCQkJLyogUmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCiAKIAkJCQlwaHlzaWNhbF9hZGRyZXNzICs9Ci0JCQkJICAgIEFDUElfUFRSX0RJRkYobWVtX3JvdmVyLCB0YWJsZV9wdHIpOworCQkJCSAgICAodTMyKSBBQ1BJX1BUUl9ESUZGKG1lbV9yb3ZlciwgdGFibGVfcHRyKTsKIAogCQkJCXRhYmxlX2luZm8tPnBoeXNpY2FsX2FkZHJlc3MgPQogCQkJCSAgICAoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBwaHlzaWNhbF9hZGRyZXNzOwpAQCAtNTc2LDExICs1ODEsMTIgQEAKIAkJYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGVfcHRyLCBBQ1BJX0hJX1JTRFBfV0lORE9XX1NJWkUpOwogCiAJCWlmIChtZW1fcm92ZXIpIHsKKwogCQkJLyogUmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCiAKLQkJCXBoeXNpY2FsX2FkZHJlc3MgPQotCQkJICAgIEFDUElfSElfUlNEUF9XSU5ET1dfQkFTRSArIEFDUElfUFRSX0RJRkYobWVtX3JvdmVyLAotCQkJCQkJCQkgICAgIHRhYmxlX3B0cik7CisJCQlwaHlzaWNhbF9hZGRyZXNzID0gKHUzMikKKwkJCSAgICAoQUNQSV9ISV9SU0RQX1dJTkRPV19CQVNFICsKKwkJCSAgICAgQUNQSV9QVFJfRElGRihtZW1fcm92ZXIsIHRhYmxlX3B0cikpOwogCiAJCQl0YWJsZV9pbmZvLT5waHlzaWNhbF9hZGRyZXNzID0KIAkJCSAgICAoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBwaHlzaWNhbF9hZGRyZXNzOwpAQCAtNjAxLDcgKzYwNyw3IEBACiAKIAkJaWYgKHBoeXNpY2FsX2FkZHJlc3MgPiAweDQwMCkgewogCQkJLyoKLQkJCSAqIDFiKSBTZWFyY2ggRUJEQSBwYXJhZ3JhcGhzIChFQkRhIGlzIHJlcXVpcmVkIHRvIGJlIGEgbWluaW11bSBvZgorCQkJICogMWIpIFNlYXJjaCBFQkRBIHBhcmFncmFwaHMgKEVCREEgaXMgcmVxdWlyZWQgdG8gYmUgYSBtaW5pbXVtIG9mCiAJCQkgKiAgICAgMV9rIGxlbmd0aCkKIAkJCSAqLwogCQkJbWVtX3JvdmVyID0KQEAgLTYwOSw2ICs2MTUsNyBAQAogCQkJCQkJCSAocGh5c2ljYWxfYWRkcmVzcyksCiAJCQkJCQkJIEFDUElfRUJEQV9XSU5ET1dfU0laRSk7CiAJCQlpZiAobWVtX3JvdmVyKSB7CisKIAkJCQkvKiBSZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAogCQkJCXRhYmxlX2luZm8tPnBoeXNpY2FsX2FkZHJlc3MgPQpAQCAtNjI0LDYgKzYzMSw3IEBACiAJCQkJCQkgKEFDUElfSElfUlNEUF9XSU5ET1dfQkFTRSksCiAJCQkJCQkgQUNQSV9ISV9SU0RQX1dJTkRPV19TSVpFKTsKIAkJaWYgKG1lbV9yb3ZlcikgeworCiAJCQkvKiBGb3VuZCBpdCwgcmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCiAKIAkJCXRhYmxlX2luZm8tPnBoeXNpY2FsX2FkZHJlc3MgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggZDBiNDRjZS4uYTI5YWY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC02ODQsOCArNjg0LDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IChzdHJ1Y3QgYWNwaV90aGVybWFsICopZGF0YTsKIAlpZiAoIXR6LT56b21iaWUpCi0JCWFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbihPU0RfUFJJT1JJVFlfR1BFLAotCQkJCQkgICAgYWNwaV90aGVybWFsX2NoZWNrLCAodm9pZCAqKWRhdGEpOworCQlhY3BpX29zX2V4ZWN1dGUoT1NMX0dQRV9IQU5ETEVSLCBhY3BpX3RoZXJtYWxfY2hlY2ssICh2b2lkICopZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfdGhlcm1hbF9jaGVjayh2b2lkICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGFsbG9jLmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0YWxsb2MuYwppbmRleCAwM2IwMDQ0Li43OTQwZmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0YWxsb2MuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0YWxsb2MuYwpAQCAtNDYsMjQgKzQ2LDYgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwogQUNQSV9NT0RVTEVfTkFNRSgidXRhbGxvYyIpCiAKLS8qIExvY2FsIHByb3RvdHlwZXMgKi8KLSNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwotc3RhdGljIHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWNwaV91dF9maW5kX2FsbG9jYXRpb24odm9pZCAqYWxsb2NhdGlvbik7Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV91dF90cmFja19hbGxvY2F0aW9uKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWRkcmVzcywKLQkJCSBhY3BpX3NpemUgc2l6ZSwKLQkJCSB1OCBhbGxvY190eXBlLCB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKTsKLQotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3JlbW92ZV9hbGxvY2F0aW9uKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWRkcmVzcywKLQkJCSAgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSk7Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV91dF9jcmVhdGVfbGlzdChjaGFyICpsaXN0X25hbWUsCi0JCSAgICB1MTYgb2JqZWN0X3NpemUsIHN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICoqcmV0dXJuX2NhY2hlKTsKLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2NyZWF0ZV9jYWNoZXMKQEAgLTc1LDExICs1Nyw1NiBAQAogICogREVTQ1JJUFRJT046IENyZWF0ZSBhbGwgbG9jYWwgY2FjaGVzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV91dF9jcmVhdGVfY2FjaGVzKHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCisJLyogT2JqZWN0IENhY2hlcywgZm9yIGZyZXF1ZW50bHkgdXNlZCBvYmplY3RzICovCisKKwlzdGF0dXMgPQorCSAgICBhY3BpX29zX2NyZWF0ZV9jYWNoZSgiQWNwaS1OYW1lc3BhY2UiLAorCQkJCSBzaXplb2Yoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUpLAorCQkJCSBBQ1BJX01BWF9OQU1FU1BBQ0VfQ0FDSEVfREVQVEgsCisJCQkJICZhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCisJc3RhdHVzID0KKwkgICAgYWNwaV9vc19jcmVhdGVfY2FjaGUoIkFjcGktU3RhdGUiLCBzaXplb2YodW5pb24gYWNwaV9nZW5lcmljX3N0YXRlKSwKKwkJCQkgQUNQSV9NQVhfU1RBVEVfQ0FDSEVfREVQVEgsCisJCQkJICZhY3BpX2dibF9zdGF0ZV9jYWNoZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisKKwlzdGF0dXMgPQorCSAgICBhY3BpX29zX2NyZWF0ZV9jYWNoZSgiQWNwaS1QYXJzZSIsCisJCQkJIHNpemVvZihzdHJ1Y3QgYWNwaV9wYXJzZV9vYmpfY29tbW9uKSwKKwkJCQkgQUNQSV9NQVhfUEFSU0VfQ0FDSEVfREVQVEgsCisJCQkJICZhY3BpX2dibF9wc19ub2RlX2NhY2hlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCXN0YXR1cyA9CisJICAgIGFjcGlfb3NfY3JlYXRlX2NhY2hlKCJBY3BpLVBhcnNlRXh0IiwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3BhcnNlX29ial9uYW1lZCksCisJCQkJIEFDUElfTUFYX0VYVFBBUlNFX0NBQ0hFX0RFUFRILAorCQkJCSAmYWNwaV9nYmxfcHNfbm9kZV9leHRfY2FjaGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCisJc3RhdHVzID0KKwkgICAgYWNwaV9vc19jcmVhdGVfY2FjaGUoIkFjcGktT3BlcmFuZCIsCisJCQkJIHNpemVvZih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0KSwKKwkJCQkgQUNQSV9NQVhfT0JKRUNUX0NBQ0hFX0RFUFRILAorCQkJCSAmYWNwaV9nYmxfb3BlcmFuZF9jYWNoZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisKICNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwogCiAJLyogTWVtb3J5IGFsbG9jYXRpb24gbGlzdHMgKi8KQEAgLTk4LDQzICsxMjUsNiBAQAogCX0KICNlbmRpZgogCi0JLyogT2JqZWN0IENhY2hlcywgZm9yIGZyZXF1ZW50bHkgdXNlZCBvYmplY3RzICovCi0KLQlzdGF0dXMgPQotCSAgICBhY3BpX29zX2NyZWF0ZV9jYWNoZSgiYWNwaV9zdGF0ZSIsIHNpemVvZih1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUpLAotCQkJCSBBQ1BJX01BWF9TVEFURV9DQUNIRV9ERVBUSCwKLQkJCQkgJmFjcGlfZ2JsX3N0YXRlX2NhY2hlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0KLQotCXN0YXR1cyA9Ci0JICAgIGFjcGlfb3NfY3JlYXRlX2NhY2hlKCJhY3BpX3BhcnNlIiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3BhcnNlX29ial9jb21tb24pLAotCQkJCSBBQ1BJX01BWF9QQVJTRV9DQUNIRV9ERVBUSCwKLQkJCQkgJmFjcGlfZ2JsX3BzX25vZGVfY2FjaGUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQotCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9vc19jcmVhdGVfY2FjaGUoImFjcGlfcGFyc2VfZXh0IiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3BhcnNlX29ial9uYW1lZCksCi0JCQkJIEFDUElfTUFYX0VYVFBBUlNFX0NBQ0hFX0RFUFRILAotCQkJCSAmYWNwaV9nYmxfcHNfbm9kZV9leHRfY2FjaGUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQotCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9vc19jcmVhdGVfY2FjaGUoImFjcGlfb3BlcmFuZCIsCi0JCQkJIHNpemVvZih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0KSwKLQkJCQkgQUNQSV9NQVhfT0JKRUNUX0NBQ0hFX0RFUFRILAotCQkJCSAmYWNwaV9nYmxfb3BlcmFuZF9jYWNoZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KIAlyZXR1cm4gKEFFX09LKTsKIH0KIApAQCAtMTUzLDYgKzE0Myw5IEBACiBhY3BpX3N0YXR1cyBhY3BpX3V0X2RlbGV0ZV9jYWNoZXModm9pZCkKIHsKIAorCSh2b2lkKWFjcGlfb3NfZGVsZXRlX2NhY2hlKGFjcGlfZ2JsX25hbWVzcGFjZV9jYWNoZSk7CisJYWNwaV9nYmxfbmFtZXNwYWNlX2NhY2hlID0gTlVMTDsKKwogCSh2b2lkKWFjcGlfb3NfZGVsZXRlX2NhY2hlKGFjcGlfZ2JsX3N0YXRlX2NhY2hlKTsKIAlhY3BpX2dibF9zdGF0ZV9jYWNoZSA9IE5VTEw7CiAKQEAgLTE2NSw2ICsxNTgsMjEgQEAKIAkodm9pZClhY3BpX29zX2RlbGV0ZV9jYWNoZShhY3BpX2dibF9wc19ub2RlX2V4dF9jYWNoZSk7CiAJYWNwaV9nYmxfcHNfbm9kZV9leHRfY2FjaGUgPSBOVUxMOwogCisjaWZkZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKKworCS8qIERlYnVnIG9ubHkgLSBkaXNwbGF5IGxlZnRvdmVyIG1lbW9yeSBhbGxvY2F0aW9uLCBpZiBhbnkgKi8KKworCWFjcGlfdXRfZHVtcF9hbGxvY2F0aW9ucyhBQ1BJX1VJTlQzMl9NQVgsIE5VTEwpOworCisJLyogRnJlZSBtZW1vcnkgbGlzdHMgKi8KKworCWFjcGlfb3NfZnJlZShhY3BpX2dibF9nbG9iYWxfbGlzdCk7CisJYWNwaV9nYmxfZ2xvYmFsX2xpc3QgPSBOVUxMOworCisJYWNwaV9vc19mcmVlKGFjcGlfZ2JsX25zX25vZGVfbGlzdCk7CisJYWNwaV9nYmxfbnNfbm9kZV9saXN0ID0gTlVMTDsKKyNlbmRpZgorCiAJcmV0dXJuIChBRV9PSyk7CiB9CiAKQEAgLTI1Miw3ICsyNjAsNyBAQAogCiAJCS8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciB3aXRoIGxvY2FsIGludGVyZmFjZSB0byBhbGxvdyB0cmFja2luZyAqLwogCi0JCWJ1ZmZlci0+cG9pbnRlciA9IEFDUElfTUVNX0NBTExPQ0FURShyZXF1aXJlZF9sZW5ndGgpOworCQlidWZmZXItPnBvaW50ZXIgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChyZXF1aXJlZF9sZW5ndGgpOwogCQlpZiAoIWJ1ZmZlci0+cG9pbnRlcikgewogCQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOwogCQl9CkBAIC0yODgsNyArMjk2LDcgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgQWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAgKgotICogREVTQ1JJUFRJT046IFRoZSBzdWJzeXN0ZW0ncyBlcXVpdmFsZW50IG9mIG1hbGxvYy4KKyAqIERFU0NSSVBUSU9OOiBTdWJzeXN0ZW0gZXF1aXZhbGVudCBvZiBtYWxsb2MuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjk2LDIzICszMDQsMjMgQEAKIHsKIAl2b2lkICphbGxvY2F0aW9uOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoInV0X2FsbG9jYXRlIiwgc2l6ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfYWxsb2NhdGUsIHNpemUpOwogCiAJLyogQ2hlY2sgZm9yIGFuIGluYWR2ZXJ0ZW50IHNpemUgb2YgemVybyBieXRlcyAqLwogCiAJaWYgKCFzaXplKSB7Ci0JCUFDUElfRVJST1IoKG1vZHVsZSwgbGluZSwKLQkJCSAgICAidXRfYWxsb2NhdGU6IEF0dGVtcHQgdG8gYWxsb2NhdGUgemVybyBieXRlcywgYWxsb2NhdGluZyAxIGJ5dGUiKSk7CisJCUFDUElfV0FSTklORygobW9kdWxlLCBsaW5lLAorCQkJICAgICAgIkF0dGVtcHQgdG8gYWxsb2NhdGUgemVybyBieXRlcywgYWxsb2NhdGluZyAxIGJ5dGUiKSk7CiAJCXNpemUgPSAxOwogCX0KIAogCWFsbG9jYXRpb24gPSBhY3BpX29zX2FsbG9jYXRlKHNpemUpOwogCWlmICghYWxsb2NhdGlvbikgeworCiAJCS8qIFJlcG9ydCBhbGxvY2F0aW9uIGVycm9yICovCiAKLQkJQUNQSV9FUlJPUigobW9kdWxlLCBsaW5lLAotCQkJICAgICJ1dF9hbGxvY2F0ZTogQ291bGQgbm90IGFsbG9jYXRlIHNpemUgJVgiLAotCQkJICAgICh1MzIpIHNpemUpKTsKKwkJQUNQSV9XQVJOSU5HKChtb2R1bGUsIGxpbmUsCisJCQkgICAgICAiQ291bGQgbm90IGFsbG9jYXRlIHNpemUgJVgiLCAodTMyKSBzaXplKSk7CiAKIAkJcmV0dXJuX1BUUihOVUxMKTsKIAl9CkBAIC0zMjIsNyArMzMwLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF9jYWxsb2NhdGUKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2FsbG9jYXRlX3plcm9lZAogICoKICAqIFBBUkFNRVRFUlM6ICBTaXplICAgICAgICAgICAgICAgIC0gU2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgogICogICAgICAgICAgICAgIENvbXBvbmVudCAgICAgICAgICAgLSBDb21wb25lbnQgdHlwZSBvZiBjYWxsZXIKQEAgLTMzMSw1NDIgKzMzOSwyNCBAQAogICoKICAqIFJFVFVSTjogICAgICBBZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqCi0gKiBERVNDUklQVElPTjogU3Vic3lzdGVtIGVxdWl2YWxlbnQgb2YgY2FsbG9jLgorICogREVTQ1JJUFRJT046IFN1YnN5c3RlbSBlcXVpdmFsZW50IG9mIGNhbGxvYy4gQWxsb2NhdGUgYW5kIHplcm8gbWVtb3J5LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgKmFjcGlfdXRfY2FsbG9jYXRlKGFjcGlfc2l6ZSBzaXplLCB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKQordm9pZCAqYWNwaV91dF9hbGxvY2F0ZV96ZXJvZWQoYWNwaV9zaXplIHNpemUsCisJCQkgICAgICB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKQogewogCXZvaWQgKmFsbG9jYXRpb247CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigidXRfY2FsbG9jYXRlIiwgc2l6ZSk7Ci0KLQkvKiBDaGVjayBmb3IgYW4gaW5hZHZlcnRlbnQgc2l6ZSBvZiB6ZXJvIGJ5dGVzICovCi0KLQlpZiAoIXNpemUpIHsKLQkJQUNQSV9FUlJPUigobW9kdWxlLCBsaW5lLAotCQkJICAgICJBdHRlbXB0IHRvIGFsbG9jYXRlIHplcm8gYnl0ZXMsIGFsbG9jYXRpbmcgMSBieXRlIikpOwotCQlzaXplID0gMTsKLQl9Ci0KLQlhbGxvY2F0aW9uID0gYWNwaV9vc19hbGxvY2F0ZShzaXplKTsKLQlpZiAoIWFsbG9jYXRpb24pIHsKLQkJLyogUmVwb3J0IGFsbG9jYXRpb24gZXJyb3IgKi8KLQotCQlBQ1BJX0VSUk9SKChtb2R1bGUsIGxpbmUsCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBzaXplICVYIiwgKHUzMikgc2l6ZSkpOwotCQlyZXR1cm5fUFRSKE5VTEwpOwotCX0KLQotCS8qIENsZWFyIHRoZSBtZW1vcnkgYmxvY2sgKi8KLQotCUFDUElfTUVNU0VUKGFsbG9jYXRpb24sIDAsIHNpemUpOwotCXJldHVybl9QVFIoYWxsb2NhdGlvbik7Ci19Ci0KLSNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwotLyoKLSAqIFRoZXNlIHByb2NlZHVyZXMgYXJlIHVzZWQgZm9yIHRyYWNraW5nIG1lbW9yeSBsZWFrcyBpbiB0aGUgc3Vic3lzdGVtLCBhbmQKLSAqIHRoZXkgZ2V0IGNvbXBpbGVkIG91dCB3aGVuIHRoZSBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUyBpcyBub3Qgc2V0LgotICoKLSAqIEVhY2ggbWVtb3J5IGFsbG9jYXRpb24gaXMgdHJhY2tlZCB2aWEgYSBkb3VibHkgbGlua2VkIGxpc3QuICBFYWNoCi0gKiBlbGVtZW50IGNvbnRhaW5zIHRoZSBjYWxsZXIncyBjb21wb25lbnQsIG1vZHVsZSBuYW1lLCBmdW5jdGlvbiBuYW1lLCBhbmQKLSAqIGxpbmUgbnVtYmVyLiAgYWNwaV91dF9hbGxvY2F0ZSBhbmQgYWNwaV91dF9jYWxsb2NhdGUgY2FsbAotICogYWNwaV91dF90cmFja19hbGxvY2F0aW9uIHRvIGFkZCBhbiBlbGVtZW50IHRvIHRoZSBsaXN0OyBkZWxldGlvbgotICogb2NjdXJzIGluIHRoZSBib2R5IG9mIGFjcGlfdXRfZnJlZS4KLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2NyZWF0ZV9saXN0Ci0gKgotICogUEFSQU1FVEVSUzogIGNhY2hlX25hbWUgICAgICAtIEFzY2lpIG5hbWUgZm9yIHRoZSBjYWNoZQotICogICAgICAgICAgICAgIG9iamVjdF9zaXplICAgICAtIFNpemUgb2YgZWFjaCBjYWNoZWQgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgcmV0dXJuX2NhY2hlICAgIC0gV2hlcmUgdGhlIG5ldyBjYWNoZSBvYmplY3QgaXMgcmV0dXJuZWQKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IENyZWF0ZSBhIGxvY2FsIG1lbW9yeSBsaXN0IGZvciB0cmFja2luZyBwdXJwb3NlZAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV91dF9jcmVhdGVfbGlzdChjaGFyICpsaXN0X25hbWUsCi0JCSAgICB1MTYgb2JqZWN0X3NpemUsIHN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICoqcmV0dXJuX2NhY2hlKQotewotCXN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICpjYWNoZTsKLQotCWNhY2hlID0gYWNwaV9vc19hbGxvY2F0ZShzaXplb2Yoc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QpKTsKLQlpZiAoIWNhY2hlKSB7Ci0JCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKLQl9Ci0KLQlBQ1BJX01FTVNFVChjYWNoZSwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX21lbW9yeV9saXN0KSk7Ci0KLQljYWNoZS0+bGlzdF9uYW1lID0gbGlzdF9uYW1lOwotCWNhY2hlLT5vYmplY3Rfc2l6ZSA9IG9iamVjdF9zaXplOwotCi0JKnJldHVybl9jYWNoZSA9IGNhY2hlOwotCXJldHVybiAoQUVfT0spOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2FsbG9jYXRlX2FuZF90cmFjawotICoKLSAqIFBBUkFNRVRFUlM6ICBTaXplICAgICAgICAgICAgICAgIC0gU2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgotICogICAgICAgICAgICAgIENvbXBvbmVudCAgICAgICAgICAgLSBDb21wb25lbnQgdHlwZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBNb2R1bGUgICAgICAgICAgICAgIC0gU291cmNlIGZpbGUgbmFtZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBMaW5lICAgICAgICAgICAgICAgIC0gTGluZSBudW1iZXIgb2YgY2FsbGVyCi0gKgotICogUkVUVVJOOiAgICAgIEFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgotICoKLSAqIERFU0NSSVBUSU9OOiBUaGUgc3Vic3lzdGVtJ3MgZXF1aXZhbGVudCBvZiBtYWxsb2MuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCAqYWNwaV91dF9hbGxvY2F0ZV9hbmRfdHJhY2soYWNwaV9zaXplIHNpemUsCi0JCQkJIHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpCi17Ci0Jc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrICphbGxvY2F0aW9uOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCWFsbG9jYXRpb24gPQotCSAgICBhY3BpX3V0X2FsbG9jYXRlKHNpemUgKyBzaXplb2Yoc3RydWN0IGFjcGlfZGVidWdfbWVtX2hlYWRlciksCi0JCQkgICAgIGNvbXBvbmVudCwgbW9kdWxlLCBsaW5lKTsKLQlpZiAoIWFsbG9jYXRpb24pIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlzdGF0dXMgPSBhY3BpX3V0X3RyYWNrX2FsbG9jYXRpb24oYWxsb2NhdGlvbiwgc2l6ZSwKLQkJCQkJICBBQ1BJX01FTV9NQUxMT0MsIGNvbXBvbmVudCwgbW9kdWxlLAotCQkJCQkgIGxpbmUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlhY3BpX29zX2ZyZWUoYWxsb2NhdGlvbik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JYWNwaV9nYmxfZ2xvYmFsX2xpc3QtPnRvdGFsX2FsbG9jYXRlZCsrOwotCWFjcGlfZ2JsX2dsb2JhbF9saXN0LT5jdXJyZW50X3RvdGFsX3NpemUgKz0gKHUzMikgc2l6ZTsKLQotCXJldHVybiAoKHZvaWQgKikmYWxsb2NhdGlvbi0+dXNlcl9zcGFjZSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfY2FsbG9jYXRlX2FuZF90cmFjawotICoKLSAqIFBBUkFNRVRFUlM6ICBTaXplICAgICAgICAgICAgICAgIC0gU2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgotICogICAgICAgICAgICAgIENvbXBvbmVudCAgICAgICAgICAgLSBDb21wb25lbnQgdHlwZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBNb2R1bGUgICAgICAgICAgICAgIC0gU291cmNlIGZpbGUgbmFtZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBMaW5lICAgICAgICAgICAgICAgIC0gTGluZSBudW1iZXIgb2YgY2FsbGVyCi0gKgotICogUkVUVVJOOiAgICAgIEFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgotICoKLSAqIERFU0NSSVBUSU9OOiBTdWJzeXN0ZW0gZXF1aXZhbGVudCBvZiBjYWxsb2MuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCAqYWNwaV91dF9jYWxsb2NhdGVfYW5kX3RyYWNrKGFjcGlfc2l6ZSBzaXplLAotCQkJCSAgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSkKLXsKLQlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgKmFsbG9jYXRpb247Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JYWxsb2NhdGlvbiA9Ci0JICAgIGFjcGlfdXRfY2FsbG9jYXRlKHNpemUgKyBzaXplb2Yoc3RydWN0IGFjcGlfZGVidWdfbWVtX2hlYWRlciksCi0JCQkgICAgICBjb21wb25lbnQsIG1vZHVsZSwgbGluZSk7Ci0JaWYgKCFhbGxvY2F0aW9uKSB7Ci0JCS8qIFJlcG9ydCBhbGxvY2F0aW9uIGVycm9yICovCi0KLQkJQUNQSV9FUlJPUigobW9kdWxlLCBsaW5lLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgc2l6ZSAlWCIsICh1MzIpIHNpemUpKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlzdGF0dXMgPSBhY3BpX3V0X3RyYWNrX2FsbG9jYXRpb24oYWxsb2NhdGlvbiwgc2l6ZSwKLQkJCQkJICBBQ1BJX01FTV9DQUxMT0MsIGNvbXBvbmVudCwgbW9kdWxlLAotCQkJCQkgIGxpbmUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlhY3BpX29zX2ZyZWUoYWxsb2NhdGlvbik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JYWNwaV9nYmxfZ2xvYmFsX2xpc3QtPnRvdGFsX2FsbG9jYXRlZCsrOwotCWFjcGlfZ2JsX2dsb2JhbF9saXN0LT5jdXJyZW50X3RvdGFsX3NpemUgKz0gKHUzMikgc2l6ZTsKLQotCXJldHVybiAoKHZvaWQgKikmYWxsb2NhdGlvbi0+dXNlcl9zcGFjZSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZnJlZV9hbmRfdHJhY2sKLSAqCi0gKiBQQVJBTUVURVJTOiAgQWxsb2NhdGlvbiAgICAgICAgICAtIEFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0byBkZWFsbG9jYXRlCi0gKiAgICAgICAgICAgICAgQ29tcG9uZW50ICAgICAgICAgICAtIENvbXBvbmVudCB0eXBlIG9mIGNhbGxlcgotICogICAgICAgICAgICAgIE1vZHVsZSAgICAgICAgICAgICAgLSBTb3VyY2UgZmlsZSBuYW1lIG9mIGNhbGxlcgotICogICAgICAgICAgICAgIExpbmUgICAgICAgICAgICAgICAgLSBMaW5lIG51bWJlciBvZiBjYWxsZXIKLSAqCi0gKiBSRVRVUk46ICAgICAgTm9uZQotICoKLSAqIERFU0NSSVBUSU9OOiBGcmVlcyB0aGUgbWVtb3J5IGF0IEFsbG9jYXRpb24KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkCi1hY3BpX3V0X2ZyZWVfYW5kX3RyYWNrKHZvaWQgKmFsbG9jYXRpb24sIHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpCi17Ci0Jc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrICpkZWJ1Z19ibG9jazsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfZnJlZSIsIGFsbG9jYXRpb24pOwotCi0JaWYgKE5VTEwgPT0gYWxsb2NhdGlvbikgewotCQlBQ1BJX0VSUk9SKChtb2R1bGUsIGxpbmUsICJBdHRlbXB0IHRvIGRlbGV0ZSBhIE5VTEwgYWRkcmVzcyIpKTsKLQotCQlyZXR1cm5fVk9JRDsKLQl9Ci0KLQlkZWJ1Z19ibG9jayA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrLAotCQkJCSAgICAoKChjaGFyICopYWxsb2NhdGlvbikgLQotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9oZWFkZXIpKSk7Ci0KLQlhY3BpX2dibF9nbG9iYWxfbGlzdC0+dG90YWxfZnJlZWQrKzsKLQlhY3BpX2dibF9nbG9iYWxfbGlzdC0+Y3VycmVudF90b3RhbF9zaXplIC09IGRlYnVnX2Jsb2NrLT5zaXplOwotCi0Jc3RhdHVzID0gYWNwaV91dF9yZW1vdmVfYWxsb2NhdGlvbihkZWJ1Z19ibG9jaywKLQkJCQkJICAgY29tcG9uZW50LCBtb2R1bGUsIGxpbmUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiQ291bGQgbm90IGZyZWUgbWVtb3J5IikpOwotCX0KLQotCWFjcGlfb3NfZnJlZShkZWJ1Z19ibG9jayk7Ci0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9BTExPQ0FUSU9OUywgIiVwIGZyZWVkXG4iLCBhbGxvY2F0aW9uKSk7Ci0JcmV0dXJuX1ZPSUQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZmluZF9hbGxvY2F0aW9uCi0gKgotICogUEFSQU1FVEVSUzogIEFsbG9jYXRpb24gICAgICAgICAgICAgIC0gQWRkcmVzcyBvZiBhbGxvY2F0ZWQgbWVtb3J5Ci0gKgotICogUkVUVVJOOiAgICAgIEEgbGlzdCBlbGVtZW50IGlmIGZvdW5kOyBOVUxMIG90aGVyd2lzZS4KLSAqCi0gKiBERVNDUklQVElPTjogU2VhcmNoZXMgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIGdsb2JhbCBhbGxvY2F0aW9uIHRyYWNraW5nIGxpc3QuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWNwaV91dF9maW5kX2FsbG9jYXRpb24odm9pZCAqYWxsb2NhdGlvbikKLXsKLQlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgKmVsZW1lbnQ7Ci0KIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKLQllbGVtZW50ID0gYWNwaV9nYmxfZ2xvYmFsX2xpc3QtPmxpc3RfaGVhZDsKKwlhbGxvY2F0aW9uID0gYWNwaV91dF9hbGxvY2F0ZShzaXplLCBjb21wb25lbnQsIG1vZHVsZSwgbGluZSk7CisJaWYgKGFsbG9jYXRpb24pIHsKIAotCS8qIFNlYXJjaCBmb3IgdGhlIGFkZHJlc3MuICovCisJCS8qIENsZWFyIHRoZSBtZW1vcnkgYmxvY2sgKi8KIAotCXdoaWxlIChlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50ID09IGFsbG9jYXRpb24pIHsKLQkJCXJldHVybiAoZWxlbWVudCk7Ci0JCX0KLQotCQllbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKwkJQUNQSV9NRU1TRVQoYWxsb2NhdGlvbiwgMCwgc2l6ZSk7CiAJfQogCi0JcmV0dXJuIChOVUxMKTsKKwlyZXR1cm4gKGFsbG9jYXRpb24pOwogfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3RyYWNrX2FsbG9jYXRpb24KLSAqCi0gKiBQQVJBTUVURVJTOiAgQWxsb2NhdGlvbiAgICAgICAgICAtIEFkZHJlc3Mgb2YgYWxsb2NhdGVkIG1lbW9yeQotICogICAgICAgICAgICAgIFNpemUgICAgICAgICAgICAgICAgLSBTaXplIG9mIHRoZSBhbGxvY2F0aW9uCi0gKiAgICAgICAgICAgICAgYWxsb2NfdHlwZSAgICAgICAgICAtIE1FTV9NQUxMT0Mgb3IgTUVNX0NBTExPQwotICogICAgICAgICAgICAgIENvbXBvbmVudCAgICAgICAgICAgLSBDb21wb25lbnQgdHlwZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBNb2R1bGUgICAgICAgICAgICAgIC0gU291cmNlIGZpbGUgbmFtZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBMaW5lICAgICAgICAgICAgICAgIC0gTGluZSBudW1iZXIgb2YgY2FsbGVyCi0gKgotICogUkVUVVJOOiAgICAgIE5vbmUuCi0gKgotICogREVTQ1JJUFRJT046IEluc2VydHMgYW4gZWxlbWVudCBpbnRvIHRoZSBnbG9iYWwgYWxsb2NhdGlvbiB0cmFja2luZyBsaXN0LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV91dF90cmFja19hbGxvY2F0aW9uKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWxsb2NhdGlvbiwKLQkJCSBhY3BpX3NpemUgc2l6ZSwKLQkJCSB1OCBhbGxvY190eXBlLCB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKQotewotCXN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICptZW1fbGlzdDsKLQlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgKmVsZW1lbnQ7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfdHJhY2tfYWxsb2NhdGlvbiIsIGFsbG9jYXRpb24pOwotCi0JbWVtX2xpc3QgPSBhY3BpX2dibF9nbG9iYWxfbGlzdDsKLQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTUVNT1JZKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JLyoKLQkgKiBTZWFyY2ggbGlzdCBmb3IgdGhpcyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSBpdCBpcyBub3QgYWxyZWFkeSBvbiB0aGUgbGlzdC4KLQkgKiBUaGlzIHdpbGwgY2F0Y2ggc2V2ZXJhbCBraW5kcyBvZiBwcm9ibGVtcy4KLQkgKi8KLQllbGVtZW50ID0gYWNwaV91dF9maW5kX2FsbG9jYXRpb24oYWxsb2NhdGlvbik7Ci0JaWYgKGVsZW1lbnQpIHsKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAidXRfdHJhY2tfYWxsb2NhdGlvbjogQWxsb2NhdGlvbiBhbHJlYWR5IHByZXNlbnQgaW4gbGlzdCEgKCVwKSIsCi0JCQkgICAgYWxsb2NhdGlvbikpOwotCi0JCUFDUElfRVJST1IoKEFFX0lORk8sICJFbGVtZW50ICVwIEFkZHJlc3MgJXAiLAotCQkJICAgIGVsZW1lbnQsIGFsbG9jYXRpb24pKTsKLQotCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKLQl9Ci0KLQkvKiBGaWxsIGluIHRoZSBpbnN0YW5jZSBkYXRhLiAqLwotCi0JYWxsb2NhdGlvbi0+c2l6ZSA9ICh1MzIpIHNpemU7Ci0JYWxsb2NhdGlvbi0+YWxsb2NfdHlwZSA9IGFsbG9jX3R5cGU7Ci0JYWxsb2NhdGlvbi0+Y29tcG9uZW50ID0gY29tcG9uZW50OwotCWFsbG9jYXRpb24tPmxpbmUgPSBsaW5lOwotCi0JQUNQSV9TVFJOQ1BZKGFsbG9jYXRpb24tPm1vZHVsZSwgbW9kdWxlLCBBQ1BJX01BWF9NT0RVTEVfTkFNRSk7Ci0JYWxsb2NhdGlvbi0+bW9kdWxlW0FDUElfTUFYX01PRFVMRV9OQU1FIC0gMV0gPSAwOwotCi0JLyogSW5zZXJ0IGF0IGxpc3QgaGVhZCAqLwotCi0JaWYgKG1lbV9saXN0LT5saXN0X2hlYWQpIHsKLQkJKChzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgKikobWVtX2xpc3QtPmxpc3RfaGVhZCkpLT4KLQkJICAgIHByZXZpb3VzID0gYWxsb2NhdGlvbjsKLQl9Ci0KLQlhbGxvY2F0aW9uLT5uZXh0ID0gbWVtX2xpc3QtPmxpc3RfaGVhZDsKLQlhbGxvY2F0aW9uLT5wcmV2aW91cyA9IE5VTEw7Ci0KLQltZW1fbGlzdC0+bGlzdF9oZWFkID0gYWxsb2NhdGlvbjsKLQotICAgICAgdW5sb2NrX2FuZF9leGl0OgotCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9NRU1PUlkpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3JlbW92ZV9hbGxvY2F0aW9uCi0gKgotICogUEFSQU1FVEVSUzogIEFsbG9jYXRpb24gICAgICAgICAgLSBBZGRyZXNzIG9mIGFsbG9jYXRlZCBtZW1vcnkKLSAqICAgICAgICAgICAgICBDb21wb25lbnQgICAgICAgICAgIC0gQ29tcG9uZW50IHR5cGUgb2YgY2FsbGVyCi0gKiAgICAgICAgICAgICAgTW9kdWxlICAgICAgICAgICAgICAtIFNvdXJjZSBmaWxlIG5hbWUgb2YgY2FsbGVyCi0gKiAgICAgICAgICAgICAgTGluZSAgICAgICAgICAgICAgICAtIExpbmUgbnVtYmVyIG9mIGNhbGxlcgotICoKLSAqIFJFVFVSTjoKLSAqCi0gKiBERVNDUklQVElPTjogRGVsZXRlcyBhbiBlbGVtZW50IGZyb20gdGhlIGdsb2JhbCBhbGxvY2F0aW9uIHRyYWNraW5nIGxpc3QuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3JlbW92ZV9hbGxvY2F0aW9uKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWxsb2NhdGlvbiwKLQkJCSAgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSkKLXsKLQlzdHJ1Y3QgYWNwaV9tZW1vcnlfbGlzdCAqbWVtX2xpc3Q7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfcmVtb3ZlX2FsbG9jYXRpb24iKTsKLQotCW1lbV9saXN0ID0gYWNwaV9nYmxfZ2xvYmFsX2xpc3Q7Ci0JaWYgKE5VTEwgPT0gbWVtX2xpc3QtPmxpc3RfaGVhZCkgewotCQkvKiBObyBhbGxvY2F0aW9ucyEgKi8KLQotCQlBQ1BJX0VSUk9SKChtb2R1bGUsIGxpbmUsCi0JCQkgICAgIkVtcHR5IGFsbG9jYXRpb24gbGlzdCwgbm90aGluZyB0byBmcmVlISIpKTsKLQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCX0KLQotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9NRU1PUlkpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBVbmxpbmsgKi8KLQotCWlmIChhbGxvY2F0aW9uLT5wcmV2aW91cykgewotCQkoYWxsb2NhdGlvbi0+cHJldmlvdXMpLT5uZXh0ID0gYWxsb2NhdGlvbi0+bmV4dDsKLQl9IGVsc2UgewotCQltZW1fbGlzdC0+bGlzdF9oZWFkID0gYWxsb2NhdGlvbi0+bmV4dDsKLQl9Ci0KLQlpZiAoYWxsb2NhdGlvbi0+bmV4dCkgewotCQkoYWxsb2NhdGlvbi0+bmV4dCktPnByZXZpb3VzID0gYWxsb2NhdGlvbi0+cHJldmlvdXM7Ci0JfQotCi0JLyogTWFyayB0aGUgc2VnbWVudCBhcyBkZWxldGVkICovCi0KLQlBQ1BJX01FTVNFVCgmYWxsb2NhdGlvbi0+dXNlcl9zcGFjZSwgMHhFQSwgYWxsb2NhdGlvbi0+c2l6ZSk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0FMTE9DQVRJT05TLCAiRnJlZWluZyBzaXplIDAlWFxuIiwKLQkJCSAgYWxsb2NhdGlvbi0+c2l6ZSkpOwotCi0Jc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX01FTU9SWSk7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZHVtcF9hbGxvY2F0aW9uX2luZm8KLSAqCi0gKiBQQVJBTUVURVJTOgotICoKLSAqIFJFVFVSTjogICAgICBOb25lCi0gKgotICogREVTQ1JJUFRJT046IFByaW50IHNvbWUgaW5mbyBhYm91dCB0aGUgb3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCi12b2lkIGFjcGlfdXRfZHVtcF9hbGxvY2F0aW9uX2luZm8odm9pZCkKLXsKLS8qCi0Jc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QgICAgICAgICAqbWVtX2xpc3Q7Ci0qLwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZHVtcF9hbGxvY2F0aW9uX2luZm8iKTsKLQotLyoKLQlBQ1BJX0RFQlVHX1BSSU5UIChUUkFDRV9BTExPQ0FUSU9OUyB8IFRSQUNFX1RBQkxFUywKLQkJCSAgKCIlMzBzOiAlNGQgKCUzZCBLYilcbiIsICJDdXJyZW50IGFsbG9jYXRpb25zIiwKLQkJCSAgbWVtX2xpc3QtPmN1cnJlbnRfY291bnQsCi0JCQkgIFJPVU5EX1VQX1RPXzFLIChtZW1fbGlzdC0+Y3VycmVudF9zaXplKSkpOwotCi0JQUNQSV9ERUJVR19QUklOVCAoVFJBQ0VfQUxMT0NBVElPTlMgfCBUUkFDRV9UQUJMRVMsCi0JCQkgICgiJTMwczogJTRkICglM2QgS2IpXG4iLCAiTWF4IGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMiLAotCQkJICBtZW1fbGlzdC0+bWF4X2NvbmN1cnJlbnRfY291bnQsCi0JCQkgIFJPVU5EX1VQX1RPXzFLIChtZW1fbGlzdC0+bWF4X2NvbmN1cnJlbnRfc2l6ZSkpKTsKLQotCUFDUElfREVCVUdfUFJJTlQgKFRSQUNFX0FMTE9DQVRJT05TIHwgVFJBQ0VfVEFCTEVTLAotCQkJICAoIiUzMHM6ICU0ZCAoJTNkIEtiKVxuIiwgIlRvdGFsIChhbGwpIGludGVybmFsIG9iamVjdHMiLAotCQkJICBydW5uaW5nX29iamVjdF9jb3VudCwKLQkJCSAgUk9VTkRfVVBfVE9fMUsgKHJ1bm5pbmdfb2JqZWN0X3NpemUpKSk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UIChUUkFDRV9BTExPQ0FUSU9OUyB8IFRSQUNFX1RBQkxFUywKLQkJCSAgKCIlMzBzOiAlNGQgKCUzZCBLYilcbiIsICJUb3RhbCAoYWxsKSBhbGxvY2F0aW9ucyIsCi0JCQkgIHJ1bm5pbmdfYWxsb2NfY291bnQsCi0JCQkgIFJPVU5EX1VQX1RPXzFLIChydW5uaW5nX2FsbG9jX3NpemUpKSk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UIChUUkFDRV9BTExPQ0FUSU9OUyB8IFRSQUNFX1RBQkxFUywKLQkJCSAgKCIlMzBzOiAlNGQgKCUzZCBLYilcbiIsICJDdXJyZW50IE5vZGVzIiwKLQkJCSAgYWNwaV9nYmxfY3VycmVudF9ub2RlX2NvdW50LAotCQkJICBST1VORF9VUF9UT18xSyAoYWNwaV9nYmxfY3VycmVudF9ub2RlX3NpemUpKSk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UIChUUkFDRV9BTExPQ0FUSU9OUyB8IFRSQUNFX1RBQkxFUywKLQkJCSAgKCIlMzBzOiAlNGQgKCUzZCBLYilcbiIsICJNYXggTm9kZXMiLAotCQkJICBhY3BpX2dibF9tYXhfY29uY3VycmVudF9ub2RlX2NvdW50LAotCQkJICBST1VORF9VUF9UT18xSyAoKGFjcGlfZ2JsX21heF9jb25jdXJyZW50X25vZGVfY291bnQgKgotCQkJCQkgc2l6ZW9mIChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSkpKSkpOwotKi8KLQlyZXR1cm5fVk9JRDsKLX0KLSNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZHVtcF9hbGxvY2F0aW9ucwotICoKLSAqIFBBUkFNRVRFUlM6ICBDb21wb25lbnQgICAgICAgICAgIC0gQ29tcG9uZW50KHMpIHRvIGR1bXAgaW5mbyBmb3IuCi0gKiAgICAgICAgICAgICAgTW9kdWxlICAgICAgICAgICAgICAtIE1vZHVsZSB0byBkdW1wIGluZm8gZm9yLiAgTlVMTCBtZWFucyBhbGwuCi0gKgotICogUkVUVVJOOiAgICAgIE5vbmUKLSAqCi0gKiBERVNDUklQVElPTjogUHJpbnQgYSBsaXN0IG9mIGFsbCBvdXRzdGFuZGluZyBhbGxvY2F0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGFjcGlfdXRfZHVtcF9hbGxvY2F0aW9ucyh1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUpCi17Ci0Jc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrICplbGVtZW50OwotCXVuaW9uIGFjcGlfZGVzY3JpcHRvciAqZGVzY3JpcHRvcjsKLQl1MzIgbnVtX291dHN0YW5kaW5nID0gMDsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2R1bXBfYWxsb2NhdGlvbnMiKTsKLQotCS8qCi0JICogV2FsayB0aGUgYWxsb2NhdGlvbiBsaXN0LgotCSAqLwotCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX01FTU9SWSkpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQllbGVtZW50ID0gYWNwaV9nYmxfZ2xvYmFsX2xpc3QtPmxpc3RfaGVhZDsKLQl3aGlsZSAoZWxlbWVudCkgewotCQlpZiAoKGVsZW1lbnQtPmNvbXBvbmVudCAmIGNvbXBvbmVudCkgJiYKLQkJICAgICgobW9kdWxlID09IE5VTEwpCi0JCSAgICAgfHwgKDAgPT0gQUNQSV9TVFJDTVAobW9kdWxlLCBlbGVtZW50LT5tb2R1bGUpKSkpIHsKLQkJCS8qIElnbm9yZSBhbGxvY2F0ZWQgb2JqZWN0cyB0aGF0IGFyZSBpbiBhIGNhY2hlICovCi0KLQkJCWRlc2NyaXB0b3IgPQotCQkJICAgIEFDUElfQ0FTVF9QVFIodW5pb24gYWNwaV9kZXNjcmlwdG9yLAotCQkJCQkgICZlbGVtZW50LT51c2VyX3NwYWNlKTsKLQkJCWlmIChkZXNjcmlwdG9yLT5kZXNjcmlwdG9yX2lkICE9IEFDUElfREVTQ19UWVBFX0NBQ0hFRCkgewotCQkJCWFjcGlfb3NfcHJpbnRmKCIlcCBMZW4gJTA0WCAlOS45cy0lZCBbJXNdICIsCi0JCQkJCSAgICAgICBkZXNjcmlwdG9yLCBlbGVtZW50LT5zaXplLAotCQkJCQkgICAgICAgZWxlbWVudC0+bW9kdWxlLCBlbGVtZW50LT5saW5lLAotCQkJCQkgICAgICAgYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9uYW1lCi0JCQkJCSAgICAgICAoZGVzY3JpcHRvcikpOwotCi0JCQkJLyogTW9zdCBvZiB0aGUgZWxlbWVudHMgd2lsbCBiZSBPcGVyYW5kIG9iamVjdHMuICovCi0KLQkJCQlzd2l0Y2ggKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkZXNjcmlwdG9yKSkgewotCQkJCWNhc2UgQUNQSV9ERVNDX1RZUEVfT1BFUkFORDoKLQkJCQkJYWNwaV9vc19wcmludGYoIiUxMi4xMnMgUiVoZCIsCi0JCQkJCQkgICAgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lCi0JCQkJCQkgICAgICAgKGRlc2NyaXB0b3ItPm9iamVjdC4KLQkJCQkJCQljb21tb24udHlwZSksCi0JCQkJCQkgICAgICAgZGVzY3JpcHRvci0+b2JqZWN0LgotCQkJCQkJICAgICAgIGNvbW1vbi5yZWZlcmVuY2VfY291bnQpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgQUNQSV9ERVNDX1RZUEVfUEFSU0VSOgotCQkJCQlhY3BpX29zX3ByaW50ZigiYW1sX29wY29kZSAlMDRoWCIsCi0JCQkJCQkgICAgICAgZGVzY3JpcHRvci0+b3AuYXNsLgotCQkJCQkJICAgICAgIGFtbF9vcGNvZGUpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgQUNQSV9ERVNDX1RZUEVfTkFNRUQ6Ci0JCQkJCWFjcGlfb3NfcHJpbnRmKCIlNC40cyIsCi0JCQkJCQkgICAgICAgYWNwaV91dF9nZXRfbm9kZV9uYW1lCi0JCQkJCQkgICAgICAgKCZkZXNjcmlwdG9yLT5ub2RlKSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJZGVmYXVsdDoKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJYWNwaV9vc19wcmludGYoIlxuIik7Ci0JCQkJbnVtX291dHN0YW5kaW5nKys7Ci0JCQl9Ci0JCX0KLQkJZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7Ci0JfQotCi0JKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX01FTU9SWSk7Ci0KLQkvKiBQcmludCBzdW1tYXJ5ICovCi0KLQlpZiAoIW51bV9vdXRzdGFuZGluZykgewotCQlBQ1BJX0lORk8oKEFFX0lORk8sICJObyBvdXRzdGFuZGluZyBhbGxvY2F0aW9ucyIpKTsKLQl9IGVsc2UgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICIlZCglWCkgT3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMiLAotCQkJICAgIG51bV9vdXRzdGFuZGluZywgbnVtX291dHN0YW5kaW5nKSk7Ci0JfQotCi0JcmV0dXJuX1ZPSUQ7Ci19Ci0KLSNlbmRpZgkJCQkvKiAjaWZkZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjYWNoZS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNhY2hlLmMKaW5kZXggMjE3N2NiMS4uNTYyNzBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNhY2hlLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNhY2hlLmMKQEAgLTExOCwxMyArMTE4LDE0IEBACiAJLyogV2FsayB0aGUgbGlzdCBvZiBvYmplY3RzIGluIHRoaXMgY2FjaGUgKi8KIAogCXdoaWxlIChjYWNoZS0+bGlzdF9oZWFkKSB7CisKIAkJLyogRGVsZXRlIGFuZCB1bmxpbmsgb25lIGNhY2hlZCBzdGF0ZSBvYmplY3QgKi8KIAogCQluZXh0ID0gKihBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSKGNoYXIsCiAJCQkJCQkmKCgoY2hhciAqKWNhY2hlLT4KIAkJCQkJCSAgIGxpc3RfaGVhZClbY2FjaGUtPgogCQkJCQkJCSAgICAgIGxpbmtfb2Zmc2V0XSkpKTsKLQkJQUNQSV9NRU1fRlJFRShjYWNoZS0+bGlzdF9oZWFkKTsKKwkJQUNQSV9GUkVFKGNhY2hlLT5saXN0X2hlYWQpOwogCiAJCWNhY2hlLT5saXN0X2hlYWQgPSBuZXh0OwogCQljYWNoZS0+Y3VycmVudF9kZXB0aC0tOwpAQCAtMTkzLDcgKzE5NCw3IEBACiAJLyogSWYgY2FjaGUgaXMgZnVsbCwganVzdCBmcmVlIHRoaXMgb2JqZWN0ICovCiAKIAlpZiAoY2FjaGUtPmN1cnJlbnRfZGVwdGggPj0gY2FjaGUtPm1heF9kZXB0aCkgewotCQlBQ1BJX01FTV9GUkVFKG9iamVjdCk7CisJCUFDUElfRlJFRShvYmplY3QpOwogCQlBQ1BJX01FTV9UUkFDS0lORyhjYWNoZS0+dG90YWxfZnJlZWQrKyk7CiAJfQogCkBAIC0yNDMsNyArMjQ0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdm9pZCAqb2JqZWN0OwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJvc19hY3F1aXJlX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fTkFNRShvc19hY3F1aXJlX29iamVjdCk7CiAKIAlpZiAoIWNhY2hlKSB7CiAJCXJldHVybiAoTlVMTCk7CkBAIC0yNTksNiArMjYwLDcgQEAKIAkvKiBDaGVjayB0aGUgY2FjaGUgZmlyc3QgKi8KIAogCWlmIChjYWNoZS0+bGlzdF9oZWFkKSB7CisKIAkJLyogVGhlcmUgaXMgYW4gb2JqZWN0IGF2YWlsYWJsZSwgdXNlIGl0ICovCiAKIAkJb2JqZWN0ID0gY2FjaGUtPmxpc3RfaGVhZDsKQEAgLTI3MCw5ICsyNzIsOSBAQAogCQljYWNoZS0+Y3VycmVudF9kZXB0aC0tOwogCiAJCUFDUElfTUVNX1RSQUNLSU5HKGNhY2hlLT5oaXRzKyspOwotCQlBQ1BJX01FTV9UUkFDS0lORyhBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJCQkgICAgIk9iamVjdCAlcCBmcm9tICVzIGNhY2hlXG4iLAotCQkJCQkJICAgIG9iamVjdCwgY2FjaGUtPmxpc3RfbmFtZSkpKTsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAorCQkJCSAgIk9iamVjdCAlcCBmcm9tICVzIGNhY2hlXG4iLCBvYmplY3QsCisJCQkJICBjYWNoZS0+bGlzdF9uYW1lKSk7CiAKIAkJc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0NBQ0hFUyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMjg3LDE0ICsyODksMTQgQEAKIAogCQlBQ1BJX01FTV9UUkFDS0lORyhjYWNoZS0+dG90YWxfYWxsb2NhdGVkKyspOwogCi0JCS8qIEF2b2lkIGRlYWRsb2NrIHdpdGggQUNQSV9NRU1fQ0FMTE9DQVRFICovCisJCS8qIEF2b2lkIGRlYWRsb2NrIHdpdGggQUNQSV9BTExPQ0FURV9aRVJPRUQgKi8KIAogCQlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfQ0FDSEVTKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm4gKE5VTEwpOwogCQl9CiAKLQkJb2JqZWN0ID0gQUNQSV9NRU1fQ0FMTE9DQVRFKGNhY2hlLT5vYmplY3Rfc2l6ZSk7CisJCW9iamVjdCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKGNhY2hlLT5vYmplY3Rfc2l6ZSk7CiAJCWlmICghb2JqZWN0KSB7CiAJCQlyZXR1cm4gKE5VTEwpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Y29weS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNvcHkuYwppbmRleCBkZjJkMzIwLi41ZTFhODBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Y29weS5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjb3B5LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY29weV9pc2ltcGxlX3RvX2VzaW1wbGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2NvcHlfaXNpbXBsZV90b19lc2ltcGxlKTsKIAogCSpidWZmZXJfc3BhY2VfdXNlZCA9IDA7CiAKQEAgLTMyNSw3ICszMjUsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9wa2dfaW5mbyBpbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY29weV9pcGFja2FnZV90b19lcGFja2FnZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9pcGFja2FnZV90b19lcGFja2FnZSk7CiAKIAkvKgogCSAqIEZpcnN0IHBhY2thZ2UgYXQgaGVhZCBvZiB0aGUgYnVmZmVyCkBAIC0zODMsNyArMzgzLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9jb3B5X2lvYmplY3RfdG9fZW9iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9pb2JqZWN0X3RvX2VvYmplY3QpOwogCiAJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGludGVybmFsX29iamVjdCkgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAkJLyoKQEAgLTQ0Miw3ICs0NDIsNyBAQAogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmludGVybmFsX29iamVjdDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2NvcHlfZXNpbXBsZV90b19pc2ltcGxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2VzaW1wbGVfdG9faXNpbXBsZSk7CiAKIAkvKgogCSAqIFNpbXBsZSB0eXBlcyBzdXBwb3J0ZWQgYXJlOiBTdHJpbmcsIEJ1ZmZlciwgSW50ZWdlcgpAQCAtNDcyLDggKzQ3Miw4IEBACiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCWludGVybmFsX29iamVjdC0+c3RyaW5nLnBvaW50ZXIgPQotCQkgICAgQUNQSV9NRU1fQ0FMTE9DQVRFKChhY3BpX3NpemUpIGV4dGVybmFsX29iamVjdC0+c3RyaW5nLgotCQkJCSAgICAgICBsZW5ndGggKyAxKTsKKwkJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIGV4dGVybmFsX29iamVjdC0+c3RyaW5nLgorCQkJCQkgbGVuZ3RoICsgMSk7CiAJCWlmICghaW50ZXJuYWxfb2JqZWN0LT5zdHJpbmcucG9pbnRlcikgewogCQkJZ290byBlcnJvcl9leGl0OwogCQl9CkBAIC00ODgsNyArNDg4LDcgQEAKIAljYXNlIEFDUElfVFlQRV9CVUZGRVI6CiAKIAkJaW50ZXJuYWxfb2JqZWN0LT5idWZmZXIucG9pbnRlciA9Ci0JCSAgICBBQ1BJX01FTV9DQUxMT0NBVEUoZXh0ZXJuYWxfb2JqZWN0LT5idWZmZXIubGVuZ3RoKTsKKwkJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKGV4dGVybmFsX29iamVjdC0+YnVmZmVyLmxlbmd0aCk7CiAJCWlmICghaW50ZXJuYWxfb2JqZWN0LT5idWZmZXIucG9pbnRlcikgewogCQkJZ290byBlcnJvcl9leGl0OwogCQl9CkBAIC01NTIsNyArNTUyLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICp0aGlzX2ludGVybmFsX29iajsKIAl1bmlvbiBhY3BpX29iamVjdCAqdGhpc19leHRlcm5hbF9vYmo7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9jb3B5X2VwYWNrYWdlX3RvX2lwYWNrYWdlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2VwYWNrYWdlX3RvX2lwYWNrYWdlKTsKIAogCS8qCiAJICogRmlyc3QgcGFja2FnZSBhdCBoZWFkIG9mIHRoZSBidWZmZXIKQEAgLTYwMCw3ICs2MDAsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2NvcHlfZW9iamVjdF90b19pb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2VvYmplY3RfdG9faW9iamVjdCk7CiAKIAlpZiAoZXh0ZXJuYWxfb2JqZWN0LT50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAJCS8qCkBAIC02NzYsNyArNjc2LDcgQEAKIAkJaWYgKChzb3VyY2VfZGVzYy0+YnVmZmVyLnBvaW50ZXIpICYmCiAJCSAgICAoc291cmNlX2Rlc2MtPmJ1ZmZlci5sZW5ndGgpKSB7CiAJCQlkZXN0X2Rlc2MtPmJ1ZmZlci5wb2ludGVyID0KLQkJCSAgICBBQ1BJX01FTV9BTExPQ0FURShzb3VyY2VfZGVzYy0+YnVmZmVyLmxlbmd0aCk7CisJCQkgICAgQUNQSV9BTExPQ0FURShzb3VyY2VfZGVzYy0+YnVmZmVyLmxlbmd0aCk7CiAJCQlpZiAoIWRlc3RfZGVzYy0+YnVmZmVyLnBvaW50ZXIpIHsKIAkJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJCQl9CkBAIC02OTcsOCArNjk3LDggQEAKIAkJICovCiAJCWlmIChzb3VyY2VfZGVzYy0+c3RyaW5nLnBvaW50ZXIpIHsKIAkJCWRlc3RfZGVzYy0+c3RyaW5nLnBvaW50ZXIgPQotCQkJICAgIEFDUElfTUVNX0FMTE9DQVRFKChhY3BpX3NpemUpIHNvdXJjZV9kZXNjLT5zdHJpbmcuCi0JCQkJCSAgICAgIGxlbmd0aCArIDEpOworCQkJICAgIEFDUElfQUxMT0NBVEUoKGFjcGlfc2l6ZSkgc291cmNlX2Rlc2MtPnN0cmluZy4KKwkJCQkJICBsZW5ndGggKyAxKTsKIAkJCWlmICghZGVzdF9kZXNjLT5zdHJpbmcucG9pbnRlcikgewogCQkJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKIAkJCX0KQEAgLTgwNSw5ICs4MDUsNyBAQAogCQkvKgogCQkgKiBDcmVhdGUgdGhlIG9iamVjdCBhcnJheQogCQkgKi8KLQkJdGFyZ2V0X29iamVjdC0+cGFja2FnZS5lbGVtZW50cyA9Ci0JCSAgICBBQ1BJX01FTV9DQUxMT0NBVEUoKChhY3BpX3NpemUpIHNvdXJjZV9vYmplY3QtPnBhY2thZ2UuCi0JCQkJCWNvdW50ICsgMSkgKiBzaXplb2Yodm9pZCAqKSk7CisJCXRhcmdldF9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoKGFjcGlfc2l6ZSkgc291cmNlX29iamVjdC0+cGFja2FnZS5jb3VudCArIDEpICogc2l6ZW9mKHZvaWQgKikpOwogCQlpZiAoIXRhcmdldF9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHMpIHsKIAkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKIAkJCWdvdG8gZXJyb3JfZXhpdDsKQEAgLTg1Niw3ICs4NTQsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY29weV9pcGFja2FnZV90b19pcGFja2FnZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9pcGFja2FnZV90b19pcGFja2FnZSk7CiAKIAlkZXN0X29iai0+Y29tbW9uLnR5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2Vfb2JqKTsKIAlkZXN0X29iai0+Y29tbW9uLmZsYWdzID0gc291cmNlX29iai0+Y29tbW9uLmZsYWdzOwpAQCAtODY1LDEwICs4NjMsMTAgQEAKIAkvKgogCSAqIENyZWF0ZSB0aGUgb2JqZWN0IGFycmF5IGFuZCB3YWxrIHRoZSBzb3VyY2UgcGFja2FnZSB0cmVlCiAJICovCi0JZGVzdF9vYmotPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX01FTV9DQUxMT0NBVEUoKChhY3BpX3NpemUpCi0JCQkJCQkJIHNvdXJjZV9vYmotPnBhY2thZ2UuCi0JCQkJCQkJIGNvdW50ICsKLQkJCQkJCQkgMSkgKiBzaXplb2Yodm9pZCAqKSk7CisJZGVzdF9vYmotPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoKGFjcGlfc2l6ZSkKKwkJCQkJCQkgICBzb3VyY2Vfb2JqLT5wYWNrYWdlLgorCQkJCQkJCSAgIGNvdW50ICsKKwkJCQkJCQkgICAxKSAqIHNpemVvZih2b2lkICopKTsKIAlpZiAoIWRlc3Rfb2JqLT5wYWNrYWdlLmVsZW1lbnRzKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJQYWNrYWdlIGFsbG9jYXRpb24gZmFpbHVyZSIpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CkBAIC04ODIsNiArODgwLDcgQEAKIAkJCQkJICAgYWNwaV91dF9jb3B5X2llbGVtZW50X3RvX2llbGVtZW50LAogCQkJCQkgICB3YWxrX3N0YXRlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkvKiBPbiBmYWlsdXJlLCBkZWxldGUgdGhlIGRlc3RpbmF0aW9uIHBhY2thZ2Ugb2JqZWN0ICovCiAKIAkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGRlc3Rfb2JqKTsKQEAgLTkxMSw3ICs5MTAsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY29weV9pb2JqZWN0X3RvX2lvYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2NvcHlfaW9iamVjdF90b19pb2JqZWN0KTsKIAogCS8qIENyZWF0ZSB0aGUgdG9wIGxldmVsIG9iamVjdCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVidWcuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCmluZGV4IDM1ZjNkNTguLjVlYzFjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCkBAIC00MSw4ICs0MSw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwpAQCAtMTIzLDEyICsxMjEsMTQgQEAKIAkvKiBBbGwgRnVuY3Rpb24gbmFtZXMgYXJlIGxvbmdlciB0aGFuIDQgY2hhcnMsIGNoZWNrIGlzIHNhZmUgKi8KIAogCWlmICgqKEFDUElfQ0FTVF9QVFIodTMyLCBmdW5jdGlvbl9uYW1lKSkgPT0gQUNQSV9QUkVGSVhfTUlYRUQpIHsKKwogCQkvKiBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHRoZSBvcmlnaW5hbCBzb3VyY2UgaGFzIG5vdCBiZWVuIG1vZGlmaWVkICovCiAKIAkJcmV0dXJuIChmdW5jdGlvbl9uYW1lICsgNCk7CiAJfQogCiAJaWYgKCooQUNQSV9DQVNUX1BUUih1MzIsIGZ1bmN0aW9uX25hbWUpKSA9PSBBQ1BJX1BSRUZJWF9MT1dFUikgeworCiAJCS8qIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgdGhlIHNvdXJjZSBoYXMgYmVlbiAnbGludXhpemVkJyAqLwogCiAJCXJldHVybiAoZnVuY3Rpb25fbmFtZSArIDUpOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLAogCQkgICAgY2hhciAqbW9kdWxlX25hbWUsIHUzMiBjb21wb25lbnRfaWQsIGNoYXIgKmZvcm1hdCwgLi4uKQogewotCXUzMiB0aHJlYWRfaWQ7CisJYWNwaV90aHJlYWRfaWQgdGhyZWFkX2lkOwogCXZhX2xpc3QgYXJnczsKIAogCS8qCkBAIC0xNzcsNyArMTc3LDYgQEAKIAkgKiBUaHJlYWQgdHJhY2tpbmcgYW5kIGNvbnRleHQgc3dpdGNoIG5vdGlmaWNhdGlvbgogCSAqLwogCXRocmVhZF9pZCA9IGFjcGlfb3NfZ2V0X3RocmVhZF9pZCgpOwotCiAJaWYgKHRocmVhZF9pZCAhPSBhY3BpX2dibF9wcmV2X3RocmVhZF9pZCkgewogCQlpZiAoQUNQSV9MVl9USFJFQURTICYgYWNwaV9kYmdfbGV2ZWwpIHsKIAkJCWFjcGlfb3NfcHJpbnRmCkBAIC0yMDYsNyArMjA1LDcgQEAKIAlhY3BpX29zX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3V0X2RlYnVnX3ByaW50KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3V0X2RlYnVnX3ByaW50KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIyNiw3ICsyMjUsNiBAQAogICogICAgICAgICAgICAgIGRlYnVnX3ByaW50IHNvIHRoYXQgdGhlIHNhbWUgbWFjcm9zIGNhbiBiZSB1c2VkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHZvaWQgQUNQSV9JTlRFUk5BTF9WQVJfWEZBQ0UKIGFjcGlfdXRfZGVidWdfcHJpbnRfcmF3KHUzMiByZXF1ZXN0ZWRfZGVidWdfbGV2ZWwsCiAJCQl1MzIgbGluZV9udW1iZXIsCkBAIC0yNDQsNyArMjQyLDcgQEAKIAlhY3BpX29zX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3V0X2RlYnVnX3ByaW50X3Jhdyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV91dF9kZWJ1Z19wcmludF9yYXcpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjYxLDcgKzI1OSw2IEBACiAgKiAgICAgICAgICAgICAgc2V0IGluIGRlYnVnX2xldmVsCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogdm9pZAogYWNwaV91dF90cmFjZSh1MzIgbGluZV9udW1iZXIsCiAJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSwgY2hhciAqbW9kdWxlX25hbWUsIHUzMiBjb21wb25lbnRfaWQpCkBAIC0yNzUsNyArMjcyLDcgQEAKIAkJCSAgICBjb21wb25lbnRfaWQsICIlc1xuIiwgYWNwaV9nYmxfZm5fZW50cnlfc3RyKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3V0X3RyYWNlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3V0X3RyYWNlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTI5Myw3ICsyOTAsNiBAQAogICogICAgICAgICAgICAgIHNldCBpbiBkZWJ1Z19sZXZlbAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHZvaWQKIGFjcGlfdXRfdHJhY2VfcHRyKHUzMiBsaW5lX251bWJlciwKIAkJICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLApAQCAtNDAwLDcgKzM5Niw3IEBACiAJYWNwaV9nYmxfbmVzdGluZ19sZXZlbC0tOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfdXRfZXhpdCk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV91dF9leGl0KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQxOCw3ICs0MTQsNiBAQAogICogICAgICAgICAgICAgIHNldCBpbiBkZWJ1Z19sZXZlbC4gUHJpbnRzIGV4aXQgc3RhdHVzIGFsc28uCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogdm9pZAogYWNwaV91dF9zdGF0dXNfZXhpdCh1MzIgbGluZV9udW1iZXIsCiAJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLApAQCAtNDQyLDcgKzQzNyw3IEBACiAJYWNwaV9nYmxfbmVzdGluZ19sZXZlbC0tOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfdXRfc3RhdHVzX2V4aXQpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfdXRfc3RhdHVzX2V4aXQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDYwLDcgKzQ1NSw2IEBACiAgKiAgICAgICAgICAgICAgc2V0IGluIGRlYnVnX2xldmVsLiBQcmludHMgZXhpdCB2YWx1ZSBhbHNvLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHZvaWQKIGFjcGlfdXRfdmFsdWVfZXhpdCh1MzIgbGluZV9udW1iZXIsCiAJCSAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUsCkBAIC00NzUsNyArNDY5LDcgQEAKIAlhY3BpX2dibF9uZXN0aW5nX2xldmVsLS07CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV91dF92YWx1ZV9leGl0KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3V0X3ZhbHVlX2V4aXQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDkzLDcgKzQ4Nyw2IEBACiAgKiAgICAgICAgICAgICAgc2V0IGluIGRlYnVnX2xldmVsLiBQcmludHMgZXhpdCB2YWx1ZSBhbHNvLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHZvaWQKIGFjcGlfdXRfcHRyX2V4aXQodTMyIGxpbmVfbnVtYmVyLAogCQkgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSwKQEAgLTUyNCwyMCArNTE3LDEzIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX3V0X2R1bXBfYnVmZmVyKHU4ICogYnVmZmVyLCB1MzIgY291bnQsIHUzMiBkaXNwbGF5LCB1MzIgY29tcG9uZW50X2lkKQordm9pZCBhY3BpX3V0X2R1bXBfYnVmZmVyMih1OCAqIGJ1ZmZlciwgdTMyIGNvdW50LCB1MzIgZGlzcGxheSkKIHsKIAlhY3BpX25hdGl2ZV91aW50IGkgPSAwOwogCWFjcGlfbmF0aXZlX3VpbnQgajsKIAl1MzIgdGVtcDMyOwogCXU4IGJ1Zl9jaGFyOwogCi0JLyogT25seSBkdW1wIHRoZSBidWZmZXIgaWYgdHJhY2luZyBpcyBlbmFibGVkICovCi0KLQlpZiAoISgoQUNQSV9MVl9UQUJMRVMgJiBhY3BpX2RiZ19sZXZlbCkgJiYKLQkgICAgICAoY29tcG9uZW50X2lkICYgYWNwaV9kYmdfbGF5ZXIpKSkgewotCQlyZXR1cm47Ci0JfQotCiAJaWYgKChjb3VudCA8IDQpIHx8IChjb3VudCAmIDB4MDEpKSB7CiAJCWRpc3BsYXkgPSBEQl9CWVRFX0RJU1BMQVk7CiAJfQpAQCAtNTQ1LDYgKzUzMSw3IEBACiAJLyogTmFzdHkgbGl0dGxlIGR1bXAgYnVmZmVyIHJvdXRpbmUhICovCiAKIAl3aGlsZSAoaSA8IGNvdW50KSB7CisKIAkJLyogUHJpbnQgY3VycmVudCBvZmZzZXQgKi8KIAogCQlhY3BpX29zX3ByaW50ZigiJTYuNFg6ICIsICh1MzIpIGkpOwpAQCAtNTUzLDYgKzU0MCw3IEBACiAKIAkJZm9yIChqID0gMDsgaiA8IDE2OykgewogCQkJaWYgKGkgKyBqID49IGNvdW50KSB7CisKIAkJCQkvKiBEdW1wIGZpbGwgc3BhY2VzICovCiAKIAkJCQlhY3BpX29zX3ByaW50ZigiJSpzIiwgKChkaXNwbGF5ICogMikgKyAxKSwgIiAiKTsKQEAgLTU2MSw2ICs1NDksNyBAQAogCQkJfQogCiAJCQlzd2l0Y2ggKGRpc3BsYXkpIHsKKwkJCWNhc2UgREJfQllURV9ESVNQTEFZOgogCQkJZGVmYXVsdDoJLyogRGVmYXVsdCBpcyBCWVRFIGRpc3BsYXkgKi8KIAogCQkJCWFjcGlfb3NfcHJpbnRmKCIlMDJYICIsIGJ1ZmZlcltpICsgal0pOwpAQCAtNjE4LDMgKzYwNywzMSBAQAogCiAJcmV0dXJuOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2R1bXBfYnVmZmVyCisgKgorICogUEFSQU1FVEVSUzogIEJ1ZmZlciAgICAgICAgICAgICAgLSBCdWZmZXIgdG8gZHVtcAorICogICAgICAgICAgICAgIENvdW50ICAgICAgICAgICAgICAgLSBBbW91bnQgdG8gZHVtcCwgaW4gYnl0ZXMKKyAqICAgICAgICAgICAgICBEaXNwbGF5ICAgICAgICAgICAgIC0gQllURSwgV09SRCwgRFdPUkQsIG9yIFFXT1JEIGRpc3BsYXkKKyAqICAgICAgICAgICAgICBjb21wb25lbnRfaUQgICAgICAgIC0gQ2FsbGVyJ3MgY29tcG9uZW50IElECisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogR2VuZXJpYyBkdW1wIGJ1ZmZlciBpbiBib3RoIGhleCBhbmQgYXNjaWkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBhY3BpX3V0X2R1bXBfYnVmZmVyKHU4ICogYnVmZmVyLCB1MzIgY291bnQsIHUzMiBkaXNwbGF5LCB1MzIgY29tcG9uZW50X2lkKQoreworCisJLyogT25seSBkdW1wIHRoZSBidWZmZXIgaWYgdHJhY2luZyBpcyBlbmFibGVkICovCisKKwlpZiAoISgoQUNQSV9MVl9UQUJMRVMgJiBhY3BpX2RiZ19sZXZlbCkgJiYKKwkgICAgICAoY29tcG9uZW50X2lkICYgYWNwaV9kYmdfbGF5ZXIpKSkgeworCQlyZXR1cm47CisJfQorCisJYWNwaV91dF9kdW1wX2J1ZmZlcjIoYnVmZmVyLCBjb3VudCwgZGlzcGxheSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVsZXRlLmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVsZXRlLmMKaW5kZXggMWRiOTY5NS4uNjdiOWYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlbGV0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWxldGUuYwpAQCAtNzYsNyArNzYsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnNlY29uZF9kZXNjOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5leHRfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJ1dF9kZWxldGVfaW50ZXJuYWxfb2JqIiwgb2JqZWN0KTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUih1dF9kZWxldGVfaW50ZXJuYWxfb2JqLCBvYmplY3QpOwogCiAJaWYgKCFvYmplY3QpIHsKIAkJcmV0dXJuX1ZPSUQ7CkBAIC05Niw2ICs5Niw3IEBACiAJCS8qIEZyZWUgdGhlIGFjdHVhbCBzdHJpbmcgYnVmZmVyICovCiAKIAkJaWYgKCEob2JqZWN0LT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfU1RBVElDX1BPSU5URVIpKSB7CisKIAkJCS8qIEJ1dCBvbmx5IGlmIGl0IGlzIE5PVCBhIHBvaW50ZXIgaW50byBhbiBBQ1BJIHRhYmxlICovCiAKIAkJCW9ial9wb2ludGVyID0gb2JqZWN0LT5zdHJpbmcucG9pbnRlcjsKQEAgLTExMSw2ICsxMTIsNyBAQAogCQkvKiBGcmVlIHRoZSBhY3R1YWwgYnVmZmVyICovCiAKIAkJaWYgKCEob2JqZWN0LT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfU1RBVElDX1BPSU5URVIpKSB7CisKIAkJCS8qIEJ1dCBvbmx5IGlmIGl0IGlzIE5PVCBhIHBvaW50ZXIgaW50byBhbiBBQ1BJIHRhYmxlICovCiAKIAkJCW9ial9wb2ludGVyID0gb2JqZWN0LT5idWZmZXIucG9pbnRlcjsKQEAgLTE5OCwxMSArMjAwLDIyIEBACiAJCQkgKi8KIAkJCWhhbmRsZXJfZGVzYyA9IG9iamVjdC0+cmVnaW9uLmhhbmRsZXI7CiAJCQlpZiAoaGFuZGxlcl9kZXNjKSB7Ci0JCQkJaWYgKGhhbmRsZXJfZGVzYy0+YWRkcmVzc19zcGFjZS4KLQkJCQkgICAgaGZsYWdzICYKKwkJCQlpZiAoaGFuZGxlcl9kZXNjLT5hZGRyZXNzX3NwYWNlLmhhbmRsZXJfZmxhZ3MgJgogCQkJCSAgICBBQ1BJX0FERFJfSEFORExFUl9ERUZBVUxUX0lOU1RBTExFRCkgewotCQkJCQlvYmpfcG9pbnRlciA9Ci0JCQkJCSAgICBzZWNvbmRfZGVzYy0+ZXh0cmEucmVnaW9uX2NvbnRleHQ7CisKKwkJCQkJLyogRGVhY3RpdmF0ZSByZWdpb24gYW5kIGZyZWUgcmVnaW9uIGNvbnRleHQgKi8KKworCQkJCQlpZiAoaGFuZGxlcl9kZXNjLT5hZGRyZXNzX3NwYWNlLnNldHVwKSB7CisJCQkJCQkodm9pZCloYW5kbGVyX2Rlc2MtPgorCQkJCQkJICAgIGFkZHJlc3Nfc3BhY2Uuc2V0dXAob2JqZWN0LAorCQkJCQkJCQkJQUNQSV9SRUdJT05fREVBQ1RJVkFURSwKKwkJCQkJCQkJCWhhbmRsZXJfZGVzYy0+CisJCQkJCQkJCQlhZGRyZXNzX3NwYWNlLgorCQkJCQkJCQkJY29udGV4dCwKKwkJCQkJCQkJCSZzZWNvbmRfZGVzYy0+CisJCQkJCQkJCQlleHRyYS4KKwkJCQkJCQkJCXJlZ2lvbl9jb250ZXh0KTsKKwkJCQkJfQogCQkJCX0KIAogCQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShoYW5kbGVyX2Rlc2MpOwpAQCAtMjM0LDcgKzI0Nyw3IEBACiAJaWYgKG9ial9wb2ludGVyKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQUxMT0NBVElPTlMsCiAJCQkJICAiRGVsZXRpbmcgT2JqZWN0IFN1YnB0ciAlcFxuIiwgb2JqX3BvaW50ZXIpKTsKLQkJQUNQSV9NRU1fRlJFRShvYmpfcG9pbnRlcik7CisJCUFDUElfRlJFRShvYmpfcG9pbnRlcik7CiAJfQogCiAJLyogTm93IHRoZSBvYmplY3QgY2FuIGJlIHNhZmVseSBkZWxldGVkICovCkBAIC0yNjMsNyArMjc2LDcgQEAKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqaW50ZXJuYWxfb2JqOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZGVsZXRlX2ludGVybmFsX29iamVjdF9saXN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9kZWxldGVfaW50ZXJuYWxfb2JqZWN0X2xpc3QpOwogCiAJLyogV2FsayB0aGUgbnVsbC10ZXJtaW5hdGVkIGludGVybmFsIGxpc3QgKi8KIApAQCAtMjczLDcgKzI4Niw3IEBACiAKIAkvKiBGcmVlIHRoZSBjb21iaW5lZCBwYXJhbWV0ZXIgcG9pbnRlciBsaXN0IGFuZCBvYmplY3QgYXJyYXkgKi8KIAotCUFDUElfTUVNX0ZSRUUob2JqX2xpc3QpOworCUFDUElfRlJFRShvYmpfbGlzdCk7CiAJcmV0dXJuX1ZPSUQ7CiB9CiAKQEAgLTI5Niw3ICszMDksNyBAQAogCXUxNiBjb3VudDsKIAl1MTYgbmV3X2NvdW50OwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJ1dF91cGRhdGVfcmVmX2NvdW50Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHV0X3VwZGF0ZV9yZWZfY291bnQpOwogCiAJaWYgKCFvYmplY3QpIHsKIAkJcmV0dXJuOwpAQCAtMzA2LDExICszMTksOSBAQAogCW5ld19jb3VudCA9IGNvdW50OwogCiAJLyoKLQkgKiBQZXJmb3JtIHRoZSByZWZlcmVuY2UgY291bnQgYWN0aW9uCi0JICogKGluY3JlbWVudCwgZGVjcmVtZW50LCBvciBmb3JjZSBkZWxldGUpCisJICogUGVyZm9ybSB0aGUgcmVmZXJlbmNlIGNvdW50IGFjdGlvbiAoaW5jcmVtZW50LCBkZWNyZW1lbnQsIGZvcmNlIGRlbGV0ZSkKIAkgKi8KIAlzd2l0Y2ggKGFjdGlvbikgewotCiAJY2FzZSBSRUZfSU5DUkVNRU5UOgogCiAJCW5ld19jb3VudCsrOwpAQCAtMzQ3LDcgKzM1OCw2IEBACiAJCWlmIChuZXdfY291bnQgPT0gMCkgewogCQkJYWNwaV91dF9kZWxldGVfaW50ZXJuYWxfb2JqKG9iamVjdCk7CiAJCX0KLQogCQlicmVhazsKIAogCWNhc2UgUkVGX0ZPUkNFX0RFTEVURToKQEAgLTM3MiwxMyArMzgyLDEwIEBACiAJICogKEEgZGVsZXRlZCBvYmplY3Qgd2lsbCBoYXZlIGEgaHVnZSByZWZlcmVuY2UgY291bnQpCiAJICovCiAJaWYgKGNvdW50ID4gQUNQSV9NQVhfUkVGRVJFTkNFX0NPVU5UKSB7Ci0KIAkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIkxhcmdlIFJlZmVyZW5jZSBDb3VudCAoJVgpIGluIG9iamVjdCAlcCIsCi0JCQkgICAgICBjb3VudCwgb2JqZWN0KSk7CisJCQkgICAgICAiTGFyZ2UgUmVmZXJlbmNlIENvdW50ICglWCkgaW4gb2JqZWN0ICVwIiwgY291bnQsCisJCQkgICAgICBvYmplY3QpKTsKIAl9Ci0KLQlyZXR1cm47CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MDQsNyArNDExLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3VwZGF0ZV9vYmplY3RfcmVmZXJlbmNlKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiBvYmplY3QsIHUxNiBhY3Rpb24pCithY3BpX3V0X3VwZGF0ZV9vYmplY3RfcmVmZXJlbmNlKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9iamVjdCwgdTE2IGFjdGlvbikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlX2xpc3QgPSBOVUxMOwpAQCAtNDEyLDkgKzQxOSwxMCBAQAogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X3VwZGF0ZV9vYmplY3RfcmVmZXJlbmNlIiwgb2JqZWN0KTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUih1dF91cGRhdGVfb2JqZWN0X3JlZmVyZW5jZSwgb2JqZWN0KTsKIAogCXdoaWxlIChvYmplY3QpIHsKKwogCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzbid0IGEgbmFtZXNwYWNlIGhhbmRsZSAqLwogCiAJCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUob2JqZWN0KSA9PSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgewpAQCAtNTA3LDExICs1MTUsMTEgQEAKIAogCQljYXNlIEFDUElfVFlQRV9SRUdJT046CiAJCWRlZmF1bHQ6Ci0JCQlicmVhazsJLyogTm8gc3Vib2JqZWN0cyAqLworCQkJYnJlYWs7CS8qIE5vIHN1Ym9iamVjdHMgZm9yIGFsbCBvdGhlciB0eXBlcyAqLwogCQl9CiAKIAkJLyoKLQkJICogTm93IHdlIGNhbiB1cGRhdGUgdGhlIGNvdW50IGluIHRoZSBtYWluIG9iamVjdC4gIFRoaXMgY2FuIG9ubHkKKwkJICogTm93IHdlIGNhbiB1cGRhdGUgdGhlIGNvdW50IGluIHRoZSBtYWluIG9iamVjdC4gVGhpcyBjYW4gb25seQogCQkgKiBoYXBwZW4gYWZ0ZXIgd2UgdXBkYXRlIHRoZSBzdWItb2JqZWN0cyBpbiBjYXNlIHRoaXMgY2F1c2VzIHRoZQogCQkgKiBtYWluIG9iamVjdCB0byBiZSBkZWxldGVkLgogCQkgKi8KQEAgLTU1Niw3ICs1NjQsNyBAQAogdm9pZCBhY3BpX3V0X2FkZF9yZWZlcmVuY2UodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0KQogewogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X2FkZF9yZWZlcmVuY2UiLCBvYmplY3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHV0X2FkZF9yZWZlcmVuY2UsIG9iamVjdCk7CiAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgb2JqZWN0ICovCiAKQEAgLTU4OSwxMSArNTk3LDExIEBACiB2b2lkIGFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3QpCiB7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfcmVtb3ZlX3JlZmVyZW5jZSIsIG9iamVjdCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIodXRfcmVtb3ZlX3JlZmVyZW5jZSwgb2JqZWN0KTsKIAogCS8qCi0JICogQWxsb3cgYSBOVUxMIHBvaW50ZXIgdG8gYmUgcGFzc2VkIGluLCBqdXN0IGlnbm9yZSBpdC4gIFRoaXMgc2F2ZXMKLQkgKiBlYWNoIGNhbGxlciBmcm9tIGhhdmluZyB0byBjaGVjay4gIEFsc28sIGlnbm9yZSBOUyBub2Rlcy4KKwkgKiBBbGxvdyBhIE5VTEwgcG9pbnRlciB0byBiZSBwYXNzZWQgaW4sIGp1c3QgaWdub3JlIGl0LiBUaGlzIHNhdmVzCisJICogZWFjaCBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gY2hlY2suIEFsc28sIGlnbm9yZSBOUyBub2Rlcy4KIAkgKgogCSAqLwogCWlmICghb2JqZWN0IHx8CkBAIC02MTMsNyArNjIxLDcgQEAKIAogCS8qCiAJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQsIGFuZCBvbmx5IGFjdHVhbGx5IGRlbGV0ZSB0aGUgb2JqZWN0Ci0JICogaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBiZWNvbWVzIDAuICAoTXVzdCBhbHNvIGRlY3JlbWVudCB0aGUgcmVmIGNvdW50CisJICogaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBiZWNvbWVzIDAuIChNdXN0IGFsc28gZGVjcmVtZW50IHRoZSByZWYgY291bnQKIAkgKiBvZiBhbGwgc3Vib2JqZWN0cyEpCiAJICovCiAJKHZvaWQpYWNwaV91dF91cGRhdGVfb2JqZWN0X3JlZmVyZW5jZShvYmplY3QsIFJFRl9ERUNSRU1FTlQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGV2YWwuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRldmFsLmMKaW5kZXggMTA2Y2M5Ny4uZDZkNzEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGV2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZXZhbC5jCkBAIC01Niw2ICs1NiwzNCBAQAogYWNwaV91dF90cmFuc2xhdGVfb25lX2NpZCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKIAkJCSAgc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCAqb25lX2NpZCk7CiAKKy8qCisgKiBTdHJpbmdzIHN1cHBvcnRlZCBieSB0aGUgX09TSSBwcmVkZWZpbmVkIChpbnRlcm5hbCkgbWV0aG9kLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtdID0geworCS8qIE9wZXJhdGluZyBTeXN0ZW0gVmVuZG9yIFN0cmluZ3MgKi8KKworCSJMaW51eCIsCisJIldpbmRvd3MgMjAwMCIsCisJIldpbmRvd3MgMjAwMSIsCisJIldpbmRvd3MgMjAwMSBTUDAiLAorCSJXaW5kb3dzIDIwMDEgU1AxIiwKKwkiV2luZG93cyAyMDAxIFNQMiIsCisJIldpbmRvd3MgMjAwMSBTUDMiLAorCSJXaW5kb3dzIDIwMDEgU1A0IiwKKwkiV2luZG93cyAyMDAxLjEiLAorCSJXaW5kb3dzIDIwMDEuMSBTUDEiLAkvKiBBZGRlZCAwMy8yMDA2ICovCisJIldpbmRvd3MgMjAwNiIsCQkvKiBBZGRlZCAwMy8yMDA2ICovCisKKwkvKiBGZWF0dXJlIEdyb3VwIFN0cmluZ3MgKi8KKworCSJFeHRlbmRlZCBBZGRyZXNzIFNwYWNlIERlc2NyaXB0b3IiCisJICAgIC8qCisJICAgICAqIEFsbCAib3B0aW9uYWwiIGZlYXR1cmUgZ3JvdXAgc3RyaW5ncyAoZmVhdHVyZXMgdGhhdCBhcmUgaW1wbGVtZW50ZWQKKwkgICAgICogYnkgdGhlIGhvc3QpIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgaG9zdCB2ZXJzaW9uIG9mCisJICAgICAqIGFjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlIGFuZCBzaG91bGQgbm90IGJlIGFkZGVkIGhlcmUuCisJICAgICAqLworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9vc2lfaW1wbGVtZW50YXRpb24KQEAgLTY0LDE4ICs5MiwxOCBAQAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogSW1wbGVtZW50YXRpb24gb2YgX09TSSBwcmVkZWZpbmVkIGNvbnRyb2wgbWV0aG9kCi0gKiAgICAgICAgICAgICAgU3VwcG9ydGVkID0gX09TSSAoU3RyaW5nKQorICogREVTQ1JJUFRJT046IEltcGxlbWVudGF0aW9uIG9mIHRoZSBfT1NJIHByZWRlZmluZWQgY29udHJvbCBtZXRob2QKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cyBhY3BpX3V0X29zaV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKQogeworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzdHJpbmdfZGVzYzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYzsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9vc2lfaW1wbGVtZW50YXRpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X29zaV9pbXBsZW1lbnRhdGlvbik7CiAKIAkvKiBWYWxpZGF0ZSB0aGUgc3RyaW5nIGlucHV0IGFyZ3VtZW50ICovCiAKQEAgLTg0LDI4ICsxMTIsNDcgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX1RZUEUpOwogCX0KIAotCS8qIENyZWF0ZSBhIHJldHVybiBvYmplY3QgKERlZmF1bHQgdmFsdWUgPSAwKSAqLworCS8qIENyZWF0ZSBhIHJldHVybiBvYmplY3QgKi8KIAogCXJldHVybl9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9JTlRFR0VSKTsKIAlpZiAoIXJldHVybl9kZXNjKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KIAotCS8qIENvbXBhcmUgaW5wdXQgc3RyaW5nIHRvIHRhYmxlIG9mIHN1cHBvcnRlZCBzdHJpbmdzICovCisJLyogRGVmYXVsdCByZXR1cm4gdmFsdWUgaXMgU1VQUE9SVEVEICovCiAKLQlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fT1NJX1NUUklOR1M7IGkrKykgewotCQlpZiAoIUFDUElfU1RSQ01QKHN0cmluZ19kZXNjLT5zdHJpbmcucG9pbnRlciwKLQkJCQkgQUNQSV9DQVNUX1BUUihjaGFyLAotCQkJCQkgICAgICAgYWNwaV9nYmxfdmFsaWRfb3NpX3N0cmluZ3NbaV0pKSkKLQkJewotCQkJLyogVGhpcyBzdHJpbmcgaXMgc3VwcG9ydGVkICovCisJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX1VJTlQzMl9NQVg7CisJd2Fsa19zdGF0ZS0+cmV0dXJuX2Rlc2MgPSByZXR1cm5fZGVzYzsKIAotCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSAweEZGRkZGRkZGOwotCQkJYnJlYWs7CisJLyogQ29tcGFyZSBpbnB1dCBzdHJpbmcgdG8gc3RhdGljIHRhYmxlIG9mIHN1cHBvcnRlZCBpbnRlcmZhY2VzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9BUlJBWV9MRU5HVEgoYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZCk7IGkrKykgeworCQlpZiAoIUFDUElfU1RSQ01QCisJCSAgICAoc3RyaW5nX2Rlc2MtPnN0cmluZy5wb2ludGVyLAorCQkgICAgIGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWRbaV0pKSB7CisKKwkJCS8qIFRoZSBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkICovCisKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9DVFJMX1RFUk1JTkFURSk7CiAJCX0KIAl9CiAKLQl3YWxrX3N0YXRlLT5yZXR1cm5fZGVzYyA9IHJldHVybl9kZXNjOworCS8qCisJICogRGlkIG5vdCBtYXRjaCB0aGUgc3RyaW5nIGluIHRoZSBzdGF0aWMgdGFibGUsIGNhbGwgdGhlIGhvc3QgT1NMIHRvCisJICogY2hlY2sgZm9yIGEgbWF0Y2ggd2l0aCBvbmUgb2YgdGhlIG9wdGlvbmFsIHN0cmluZ3MgKHN1Y2ggYXMKKwkgKiAiTW9kdWxlIERldmljZSIsICIzLjAgVGhlcm1hbCBNb2RlbCIsIGV0Yy4pCisJICovCisJc3RhdHVzID0gYWNwaV9vc192YWxpZGF0ZV9pbnRlcmZhY2Uoc3RyaW5nX2Rlc2MtPnN0cmluZy5wb2ludGVyKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKworCQkvKiBUaGUgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZCAqLworCisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9DVFJMX1RFUk1JTkFURSk7CisJfQorCisJLyogVGhlIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkICovCisKKwlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSA9IDA7CiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0NUUkxfVEVSTUlOQVRFKTsKIH0KIApAQCAtMTM0LDE5ICsxODEsMjYgQEAKIAkJCXUzMiBleHBlY3RlZF9yZXR1cm5fYnR5cGVzLAogCQkJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9kZXNjKQogewotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87CisJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIHJldHVybl9idHlwZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2V2YWx1YXRlX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXZhbHVhdGVfb2JqZWN0KTsKIAotCWluZm8ubm9kZSA9IHByZWZpeF9ub2RlOwotCWluZm8ucGFyYW1ldGVycyA9IE5VTEw7Ci0JaW5mby5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKKwkvKiBBbGxvY2F0ZSB0aGUgZXZhbHVhdGlvbiBpbmZvcm1hdGlvbiBibG9jayAqLworCisJaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvKSk7CisJaWYgKCFpbmZvKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCX0KKworCWluZm8tPnByZWZpeF9ub2RlID0gcHJlZml4X25vZGU7CisJaW5mby0+cGF0aG5hbWUgPSBwYXRoOworCWluZm8tPnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOwogCiAJLyogRXZhbHVhdGUgdGhlIG9iamVjdC9tZXRob2QgKi8KIAotCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfcmVsYXRpdmUocGF0aCwgJmluZm8pOworCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mbyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSB7CiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCkBAIC0xNTgsMjUgKzIxMiwyNSBAQAogCQkJCQkgIHByZWZpeF9ub2RlLCBwYXRoLCBzdGF0dXMpOwogCQl9CiAKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAKIAkvKiBEaWQgd2UgZ2V0IGEgcmV0dXJuIG9iamVjdD8gKi8KIAotCWlmICghaW5mby5yZXR1cm5fb2JqZWN0KSB7CisJaWYgKCFpbmZvLT5yZXR1cm5fb2JqZWN0KSB7CiAJCWlmIChleHBlY3RlZF9yZXR1cm5fYnR5cGVzKSB7CiAJCQlBQ1BJX0VSUk9SX01FVEhPRCgiTm8gb2JqZWN0IHdhcyByZXR1cm5lZCBmcm9tIiwKIAkJCQkJICBwcmVmaXhfbm9kZSwgcGF0aCwgQUVfTk9UX0VYSVNUKTsKIAotCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PVF9FWElTVCk7CisJCQlzdGF0dXMgPSBBRV9OT1RfRVhJU1Q7CiAJCX0KIAotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJLyogTWFwIHRoZSByZXR1cm4gb2JqZWN0IHR5cGUgdG8gdGhlIGJpdG1hcHBlZCB0eXBlICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8ucmV0dXJuX29iamVjdCkpIHsKKwlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJcmV0dXJuX2J0eXBlID0gQUNQSV9CVFlQRV9JTlRFR0VSOwogCQlicmVhazsKQEAgLTIwNCw4ICsyNTgsOCBAQAogCQkgKiBoYXBwZW4gZnJlcXVlbnRseSBpZiB0aGUgImltcGxpY2l0IHJldHVybiIgZmVhdHVyZSBpcyBlbmFibGVkLgogCQkgKiBKdXN0IGRlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCBhbmQgcmV0dXJuIEFFX09LLgogCQkgKi8KLQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8ucmV0dXJuX29iamVjdCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShpbmZvLT5yZXR1cm5fb2JqZWN0KTsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIElzIHRoZSByZXR1cm4gb2JqZWN0IG9uZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZXM/ICovCkBAIC0yMTcsMTkgKzI3MSwyMyBAQAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJICAgICJUeXBlIHJldHVybmVkIGZyb20gJXMgd2FzIGluY29ycmVjdDogJXMsIGV4cGVjdGVkIEJ0eXBlczogJVgiLAogCQkJICAgIHBhdGgsCi0JCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShpbmZvLnJldHVybl9vYmplY3QpLAorCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby0+cmV0dXJuX29iamVjdCksCiAJCQkgICAgZXhwZWN0ZWRfcmV0dXJuX2J0eXBlcykpOwogCiAJCS8qIE9uIGVycm9yIGV4aXQsIHdlIG11c3QgZGVsZXRlIHRoZSByZXR1cm4gb2JqZWN0ICovCiAKLQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8ucmV0dXJuX29iamVjdCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9UWVBFKTsKKwkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8tPnJldHVybl9vYmplY3QpOworCQlzdGF0dXMgPSBBRV9UWVBFOworCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJLyogT2JqZWN0IHR5cGUgaXMgT0ssIHJldHVybiBpdCAqLwogCi0JKnJldHVybl9kZXNjID0gaW5mby5yZXR1cm5fb2JqZWN0OwotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJKnJldHVybl9kZXNjID0gaW5mby0+cmV0dXJuX29iamVjdDsKKworICAgICAgY2xlYW51cDoKKwlBQ1BJX0ZSRUUoaW5mbyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTcsNyArMzE1LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9ldmFsdWF0ZV9udW1lcmljX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXZhbHVhdGVfbnVtZXJpY19vYmplY3QpOwogCiAJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIG9iamVjdF9uYW1lLAogCQkJCQkgQUNQSV9CVFlQRV9JTlRFR0VSLCAmb2JqX2Rlc2MpOwpAQCAtMzMzLDcgKzM5MSw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZXhlY3V0ZV9ISUQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfSElEKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KGRldmljZV9ub2RlLCBNRVRIT0RfTkFNRV9fSElELAogCQkJCQkgQUNQSV9CVFlQRV9JTlRFR0VSIHwgQUNQSV9CVFlQRV9TVFJJTkcsCkBAIC0zNDMsNiArNDAxLDcgQEAKIAl9CiAKIAlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisKIAkJLyogQ29udmVydCB0aGUgTnVtZXJpYyBISUQgdG8gc3RyaW5nICovCiAKIAkJYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZygodTMyKSBvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSwKQEAgLTQzNiw3ICs0OTUsNyBAQAogCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqY2lkX2xpc3Q7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZXhlY3V0ZV9DSUQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfQ0lEKTsKIAogCS8qIEV2YWx1YXRlIHRoZSBfQ0lEIG1ldGhvZCBmb3IgdGhpcyBkZXZpY2UgKi8KIApAQCAtNDU5LDcgKzUxOCw3IEBACiAJc2l6ZSA9ICgoKGNvdW50IC0gMSkgKiBzaXplb2Yoc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCkpICsKIAkJc2l6ZW9mKHN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCkpOwogCi0JY2lkX2xpc3QgPSBBQ1BJX01FTV9DQUxMT0NBVEUoKGFjcGlfc2l6ZSkgc2l6ZSk7CisJY2lkX2xpc3QgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoYWNwaV9zaXplKSBzaXplKTsKIAlpZiAoIWNpZF9saXN0KSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KQEAgLTQ3OSw2ICs1MzgsNyBAQAogCS8qIFRoZSBfQ0lEIG9iamVjdCBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIENJRCBvciBhIHBhY2thZ2UgKGxpc3QpIG9mIENJRHMgKi8KIAogCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwogCQkvKiBUcmFuc2xhdGUgZWFjaCBwYWNrYWdlIGVsZW1lbnQgKi8KIAogCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtNDk5LDcgKzU1OSw3IEBACiAJLyogQ2xlYW51cCBvbiBlcnJvciAqLwogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfTUVNX0ZSRUUoY2lkX2xpc3QpOworCQlBQ1BJX0ZSRUUoY2lkX2xpc3QpOwogCX0gZWxzZSB7CiAJCSpyZXR1cm5fY2lkX2xpc3QgPSBjaWRfbGlzdDsKIAl9CkBAIC01MzMsNyArNTkzLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9leGVjdXRlX1VJRCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXhlY3V0ZV9VSUQpOwogCiAJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19VSUQsCiAJCQkJCSBBQ1BJX0JUWVBFX0lOVEVHRVIgfCBBQ1BJX0JUWVBFX1NUUklORywKQEAgLTU0Myw2ICs2MDMsNyBAQAogCX0KIAogCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwogCQkvKiBDb252ZXJ0IHRoZSBOdW1lcmljIFVJRCB0byBzdHJpbmcgKi8KIAogCQlhY3BpX2V4X3Vuc2lnbmVkX2ludGVnZXJfdG9fc3RyaW5nKG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlLApAQCAtNTgyLDcgKzY0Myw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZXhlY3V0ZV9TVEEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfU1RBKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KGRldmljZV9ub2RlLCBNRVRIT0RfTkFNRV9fU1RBLAogCQkJCQkgQUNQSV9CVFlQRV9JTlRFR0VSLCAmb2JqX2Rlc2MpOwpAQCAtNjMyLDcgKzY5Myw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZXhlY3V0ZV9TeGRzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX3N4ZHMpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQloaWdoZXN0W2ldID0gMHhGRjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYwppbmRleCBmZmQxMzM4Li5lNTk5OWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGdsb2JhbC5jCkBAIC00Myw3ICs0Myw2IEBACiAKICNkZWZpbmUgREVGSU5FX0FDUElfR0xPQkFMUwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogCkBAIC0xMTksNiArMTE4LDcgQEAKIAl9CiAKIAlpZiAoIWV4Y2VwdGlvbikgeworCiAJCS8qIEV4Y2VwdGlvbiBjb2RlIHdhcyBub3QgcmVjb2duaXplZCAqLwogCiAJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC0xNDMsMTIgKzE0MywxMCBAQAogCiAvKiBEZWJ1ZyBzd2l0Y2ggLSBsZXZlbCBhbmQgdHJhY2UgbWFzayAqLwogdTMyIGFjcGlfZGJnX2xldmVsID0gQUNQSV9ERUJVR19ERUZBVUxUOwotRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sZXZlbCk7CiAKIC8qIERlYnVnIHN3aXRjaCAtIGxheWVyIChjb21wb25lbnQpIG1hc2sgKi8KIAogdTMyIGFjcGlfZGJnX2xheWVyID0gQUNQSV9DT01QT05FTlRfREVGQVVMVCB8IEFDUElfQUxMX0RSSVZFUlM7Ci1FWFBPUlRfU1lNQk9MKGFjcGlfZGJnX2xheWVyKTsKIHUzMiBhY3BpX2dibF9uZXN0aW5nX2xldmVsID0gMDsKIAogLyogRGVidWdnZXIgZ2xvYmFscyAqLwpAQCAtMTgzLDI4ICsxODEsNiBAQAogCSJfUzREIgogfTsKIAotLyoKLSAqIFN0cmluZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBfT1NJIHByZWRlZmluZWQgKGludGVybmFsKSBtZXRob2QuCi0gKiBXaGVuIGFkZGluZyBzdHJpbmdzLCBiZSBzdXJlIHRvIHVwZGF0ZSBBQ1BJX05VTV9PU0lfU1RSSU5HUy4KLSAqLwotY29uc3QgY2hhciAqYWNwaV9nYmxfdmFsaWRfb3NpX3N0cmluZ3NbQUNQSV9OVU1fT1NJX1NUUklOR1NdID0gewotCS8qIE9wZXJhdGluZyBTeXN0ZW0gVmVuZG9yIFN0cmluZ3MgKi8KLQotCSJMaW51eCIsCi0JIldpbmRvd3MgMjAwMCIsCi0JIldpbmRvd3MgMjAwMSIsCi0JIldpbmRvd3MgMjAwMS4xIiwKLQkiV2luZG93cyAyMDAxIFNQMCIsCi0JIldpbmRvd3MgMjAwMSBTUDEiLAotCSJXaW5kb3dzIDIwMDEgU1AyIiwKLQkiV2luZG93cyAyMDAxIFNQMyIsCi0JIldpbmRvd3MgMjAwMSBTUDQiLAotCi0JLyogRmVhdHVyZSBHcm91cCBTdHJpbmdzICovCi0KLQkiRXh0ZW5kZWQgQWRkcmVzcyBTcGFjZSBEZXNjcmlwdG9yIgotfTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBOYW1lc3BhY2UgZ2xvYmFscwpAQCAtMzE3LDkgKzI5Myw5IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGFjcGlfdGFibGVfbGlzdCBhY3BpX2dibF90YWJsZV9saXN0c1tOVU1fQUNQSV9UQUJMRV9UWVBFU107CitzdHJ1Y3QgYWNwaV90YWJsZV9saXN0IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW0FDUElfVEFCTEVfSURfTUFYICsgMV07CiAKLXN0cnVjdCBhY3BpX3RhYmxlX3N1cHBvcnQgYWNwaV9nYmxfdGFibGVfZGF0YVtOVU1fQUNQSV9UQUJMRV9UWVBFU10gPSB7CitzdHJ1Y3QgYWNwaV90YWJsZV9zdXBwb3J0IGFjcGlfZ2JsX3RhYmxlX2RhdGFbQUNQSV9UQUJMRV9JRF9NQVggKyAxXSA9IHsKIAkvKioqKioqKioqKiogICAgTmFtZSwgICBTaWduYXR1cmUsIEdsb2JhbCB0eXBlZCBwb2ludGVyICAgICBTaWduYXR1cmUgc2l6ZSwgICAgICBUeXBlICAgICAgICAgICAgICAgICAgSG93IG1hbnkgYWxsb3dlZD8sICAgIENvbnRhaW5zIHZhbGlkIEFNTD8gKi8KIAogCS8qIFJTRFAgMCAqLyB7UlNEUF9OQU1FLCBSU0RQX1NJRywgTlVMTCwgc2l6ZW9mKFJTRFBfU0lHKSAtIDEsCkBAIC00NjcsNyArNDQzLDYgQEAKIC8qIFJlZ2lvbiB0eXBlIGRlY29kaW5nICovCiAKIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3JlZ2lvbl90eXBlc1tBQ1BJX05VTV9QUkVERUZJTkVEX1JFR0lPTlNdID0gewotLyohIFtCZWdpbl0gbm8gc291cmNlIGNvZGUgdHJhbnNsYXRpb24gKGtlZXAgdGhlc2UgQVNMIEtleXdvcmRzIGFzLWlzKSAqLwogCSJTeXN0ZW1NZW1vcnkiLAogCSJTeXN0ZW1JTyIsCiAJIlBDSV9Db25maWciLApAQCAtNDc2LDE2ICs0NTEsMTUgQEAKIAkiQ01PUyIsCiAJIlBDSUJBUlRhcmdldCIsCiAJIkRhdGFUYWJsZSIKLS8qISBbRW5kXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAhKi8KIH07CiAKIGNoYXIgKmFjcGlfdXRfZ2V0X3JlZ2lvbl9uYW1lKHU4IHNwYWNlX2lkKQogewogCiAJaWYgKHNwYWNlX2lkID49IEFDUElfVVNFUl9SRUdJT05fQkVHSU4pIHsKLQkJcmV0dXJuICgidXNlcl9kZWZpbmVkX3JlZ2lvbiIpOworCQlyZXR1cm4gKCJVc2VyRGVmaW5lZFJlZ2lvbiIpOwogCX0gZWxzZSBpZiAoc3BhY2VfaWQgPj0gQUNQSV9OVU1fUFJFREVGSU5FRF9SRUdJT05TKSB7Ci0JCXJldHVybiAoImludmFsaWRfc3BhY2VfaWQiKTsKKwkJcmV0dXJuICgiSW52YWxpZFNwYWNlSWQiKTsKIAl9CiAKIAlyZXR1cm4gKEFDUElfQ0FTVF9QVFIoY2hhciwgYWNwaV9nYmxfcmVnaW9uX3R5cGVzW3NwYWNlX2lkXSkpOwpAQCAtNTA2LDIwICs0ODAsMTggQEAKIC8qIEV2ZW50IHR5cGUgZGVjb2RpbmcgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2V2ZW50X3R5cGVzW0FDUElfTlVNX0ZJWEVEX0VWRU5UU10gPSB7Ci0vKiEgW0JlZ2luXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAoa2VlcCB0aGVzZSBzdHJpbmdzIGFzLWlzKSAqLwogCSJQTV9UaW1lciIsCiAJIkdsb2JhbExvY2siLAogCSJQb3dlckJ1dHRvbiIsCiAJIlNsZWVwQnV0dG9uIiwKIAkiUmVhbFRpbWVDbG9jayIsCi0vKiEgW0VuZF0gbm8gc291cmNlIGNvZGUgdHJhbnNsYXRpb24gISovCiB9OwogCiBjaGFyICphY3BpX3V0X2dldF9ldmVudF9uYW1lKHUzMiBldmVudF9pZCkKIHsKIAogCWlmIChldmVudF9pZCA+IEFDUElfRVZFTlRfTUFYKSB7Ci0JCXJldHVybiAoImludmFsaWRfZXZlbnRfaUQiKTsKKwkJcmV0dXJuICgiSW52YWxpZEV2ZW50SUQiKTsKIAl9CiAKIAlyZXR1cm4gKEFDUElfQ0FTVF9QVFIoY2hhciwgYWNwaV9nYmxfZXZlbnRfdHlwZXNbZXZlbnRfaWRdKSk7CkBAIC01NTAsNyArNTIyLDYgQEAKIC8qIFByaW50YWJsZSBuYW1lcyBvZiB0aGUgQUNQSSBvYmplY3QgdHlwZXMgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX25zX3R5cGVfbmFtZXNbXSA9IHsKLS8qISBbQmVnaW5dIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uIChrZWVwIHRoZXNlIHN0cmluZ3MgYXMtaXMpICovCiAJLyogMDAgKi8gIlVudHlwZWQiLAogCS8qIDAxICovICJJbnRlZ2VyIiwKIAkvKiAwMiAqLyAiU3RyaW5nIiwKQEAgLTU4Miw3ICs1NTMsNiBAQAogCS8qIDI4ICovICJFeHRyYSIsCiAJLyogMjkgKi8gIkRhdGEiLAogCS8qIDMwICovICJJbnZhbGlkIgotLyohIFtFbmRdIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uICEqLwogfTsKIAogY2hhciAqYWNwaV91dF9nZXRfdHlwZV9uYW1lKGFjcGlfb2JqZWN0X3R5cGUgdHlwZSkKQEAgLTYzNSwxNCArNjA1LDE0IEBACiAKIAkvKiBEZXNjcmlwdG9yIG11c3QgYmUgYSBuYW1lc3BhY2Ugbm9kZSAqLwogCi0JaWYgKG5vZGUtPmRlc2NyaXB0b3IgIT0gQUNQSV9ERVNDX1RZUEVfTkFNRUQpIHsKKwlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG5vZGUpICE9IEFDUElfREVTQ19UWVBFX05BTUVEKSB7CiAJCXJldHVybiAoIiMjIyMiKTsKIAl9CiAKIAkvKiBOYW1lIG11c3QgYmUgYSB2YWxpZCBBQ1BJIG5hbWUgKi8KIAogCWlmICghYWNwaV91dF92YWxpZF9hY3BpX25hbWUobm9kZS0+bmFtZS5pbnRlZ2VyKSkgewotCQlyZXR1cm4gKCI/Pz8/Iik7CisJCW5vZGUtPm5hbWUuaW50ZWdlciA9IGFjcGlfdXRfcmVwYWlyX25hbWUobm9kZS0+bmFtZS5pbnRlZ2VyKTsKIAl9CiAKIAkvKiBSZXR1cm4gdGhlIG5hbWUgKi8KQEAgLTY2NSw3ICs2MzUsNiBAQAogLyogUHJpbnRhYmxlIG5hbWVzIG9mIG9iamVjdCBkZXNjcmlwdG9yIHR5cGVzICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICphY3BpX2dibF9kZXNjX3R5cGVfbmFtZXNbXSA9IHsKLS8qISBbQmVnaW5dIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uIChrZWVwIHRoZXNlIEFTTCBLZXl3b3JkcyBhcy1pcykgKi8KIAkvKiAwMCAqLyAiSW52YWxpZCIsCiAJLyogMDEgKi8gIkNhY2hlZCIsCiAJLyogMDIgKi8gIlN0YXRlLUdlbmVyaWMiLApAQCAtNjgyLDcgKzY1MSw2IEBACiAJLyogMTMgKi8gIlBhcnNlciIsCiAJLyogMTQgKi8gIk9wZXJhbmQiLAogCS8qIDE1ICovICJOb2RlIgotLyohIFtFbmRdIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uICEqLwogfTsKIAogY2hhciAqYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9uYW1lKHZvaWQgKm9iamVjdCkKQEAgLTcyMyw3ICs2OTEsNyBAQAogY2hhciAqYWNwaV91dF9nZXRfbXV0ZXhfbmFtZSh1MzIgbXV0ZXhfaWQpCiB7CiAKLQlpZiAobXV0ZXhfaWQgPiBNQVhfTVVURVgpIHsKKwlpZiAobXV0ZXhfaWQgPiBBQ1BJX01BWF9NVVRFWCkgewogCQlyZXR1cm4gKCJJbnZhbGlkIE11dGV4IElEIik7CiAJfQogCkBAIC03NDcsNiArNzE1LDcgQEAKIHsKIAogCWlmICh0eXBlID4gQUNQSV9UWVBFX0xPQ0FMX01BWCkgeworCiAJCS8qIE5vdGU6IEFzc3VtZXMgYWxsIFRZUEVzIGFyZSBjb250aWd1b3VzIChleHRlcm5hbC9sb2NhbCkgKi8KIAogCQlyZXR1cm4gKEZBTFNFKTsKQEAgLTc3Myw3ICs3NDIsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2luaXRfZ2xvYmFscyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfaW5pdF9nbG9iYWxzKTsKIAogCS8qIENyZWF0ZSBhbGwgbWVtb3J5IGNhY2hlcyAqLwogCkBAIC03ODQsMTQgKzc1MywxNCBAQAogCiAJLyogQUNQSSB0YWJsZSBzdHJ1Y3R1cmUgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQUNQSV9UQUJMRV9UWVBFUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IChBQ1BJX1RBQkxFX0lEX01BWCArIDEpOyBpKyspIHsKIAkJYWNwaV9nYmxfdGFibGVfbGlzdHNbaV0ubmV4dCA9IE5VTEw7CiAJCWFjcGlfZ2JsX3RhYmxlX2xpc3RzW2ldLmNvdW50ID0gMDsKIAl9CiAKIAkvKiBNdXRleCBsb2NrZWQgZmxhZ3MgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fTVVURVg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9NVVRFWDsgaSsrKSB7CiAJCWFjcGlfZ2JsX211dGV4X2luZm9baV0ubXV0ZXggPSBOVUxMOwogCQlhY3BpX2dibF9tdXRleF9pbmZvW2ldLnRocmVhZF9pZCA9IEFDUElfTVVURVhfTk9UX0FDUVVJUkVEOwogCQlhY3BpX2dibF9tdXRleF9pbmZvW2ldLnVzZV9jb3VudCA9IDA7CkBAIC04NTYsNyArODI1LDcgQEAKIAogCWFjcGlfZ2JsX3Jvb3Rfbm9kZSA9IE5VTEw7CiAJYWNwaV9nYmxfcm9vdF9ub2RlX3N0cnVjdC5uYW1lLmludGVnZXIgPSBBQ1BJX1JPT1RfTkFNRTsKLQlhY3BpX2dibF9yb290X25vZGVfc3RydWN0LmRlc2NyaXB0b3IgPSBBQ1BJX0RFU0NfVFlQRV9OQU1FRDsKKwlhY3BpX2dibF9yb290X25vZGVfc3RydWN0LmRlc2NyaXB0b3JfdHlwZSA9IEFDUElfREVTQ19UWVBFX05BTUVEOwogCWFjcGlfZ2JsX3Jvb3Rfbm9kZV9zdHJ1Y3QudHlwZSA9IEFDUElfVFlQRV9ERVZJQ0U7CiAJYWNwaV9nYmxfcm9vdF9ub2RlX3N0cnVjdC5jaGlsZCA9IE5VTEw7CiAJYWNwaV9nYmxfcm9vdF9ub2RlX3N0cnVjdC5wZWVyID0gTlVMTDsKQEAgLTg2OSwzICs4MzgsNiBAQAogCiAJcmV0dXJuX1ZPSUQ7CiB9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sZXZlbCkKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sYXllcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRpbml0LmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0aW5pdC5jCmluZGV4IGJhNzcxYjQuLmZmNzYwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGluaXQuYwpAQCAtNTAsNyArNTAsNyBAQAogCiAvKiBMb2NhbCBwcm90b3R5cGVzICovCiBzdGF0aWMgdm9pZAotYWNwaV91dF9mYWR0X3JlZ2lzdGVyX2Vycm9yKGNoYXIgKnJlZ2lzdGVyX25hbWUsIHUzMiB2YWx1ZSwgYWNwaV9zaXplIG9mZnNldCk7CithY3BpX3V0X2ZhZHRfcmVnaXN0ZXJfZXJyb3IoY2hhciAqcmVnaXN0ZXJfbmFtZSwgdTMyIHZhbHVlLCB1OCBvZmZzZXQpOwogCiBzdGF0aWMgdm9pZCBhY3BpX3V0X3Rlcm1pbmF0ZSh2b2lkKTsKIApAQCAtNjksMTIgKzY5LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZAotYWNwaV91dF9mYWR0X3JlZ2lzdGVyX2Vycm9yKGNoYXIgKnJlZ2lzdGVyX25hbWUsIHUzMiB2YWx1ZSwgYWNwaV9zaXplIG9mZnNldCkKK2FjcGlfdXRfZmFkdF9yZWdpc3Rlcl9lcnJvcihjaGFyICpyZWdpc3Rlcl9uYW1lLCB1MzIgdmFsdWUsIHU4IG9mZnNldCkKIHsKIAogCUFDUElfV0FSTklORygoQUVfSU5GTywKIAkJICAgICAgIkludmFsaWQgRkFEVCB2YWx1ZSAlcz0lWCBhdCBvZmZzZXQgJVggRkFEVD0lcCIsCi0JCSAgICAgIHJlZ2lzdGVyX25hbWUsIHZhbHVlLCAodTMyKSBvZmZzZXQsIGFjcGlfZ2JsX0ZBRFQpKTsKKwkJICAgICAgcmVnaXN0ZXJfbmFtZSwgdmFsdWUsIG9mZnNldCwgYWNwaV9nYmxfRkFEVCkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqZ3BlX3hydXB0X2luZm87CiAJc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKm5leHRfZ3BlX3hydXB0X2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF90ZXJtaW5hdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3Rlcm1pbmF0ZSk7CiAKIAkvKiBGcmVlIGdsb2JhbCB0YWJsZXMsIGV0Yy4gKi8KIAkvKiBGcmVlIGdsb2JhbCBHUEUgYmxvY2tzIGFuZCByZWxhdGVkIGluZm8gc3RydWN0dXJlcyAqLwpAQCAtMTg2LDE0ICsxODYsMTQgQEAKIAkJZ3BlX2Jsb2NrID0gZ3BlX3hydXB0X2luZm8tPmdwZV9ibG9ja19saXN0X2hlYWQ7CiAJCXdoaWxlIChncGVfYmxvY2spIHsKIAkJCW5leHRfZ3BlX2Jsb2NrID0gZ3BlX2Jsb2NrLT5uZXh0OwotCQkJQUNQSV9NRU1fRlJFRShncGVfYmxvY2stPmV2ZW50X2luZm8pOwotCQkJQUNQSV9NRU1fRlJFRShncGVfYmxvY2stPnJlZ2lzdGVyX2luZm8pOwotCQkJQUNQSV9NRU1fRlJFRShncGVfYmxvY2spOworCQkJQUNQSV9GUkVFKGdwZV9ibG9jay0+ZXZlbnRfaW5mbyk7CisJCQlBQ1BJX0ZSRUUoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvKTsKKwkJCUFDUElfRlJFRShncGVfYmxvY2spOwogCiAJCQlncGVfYmxvY2sgPSBuZXh0X2dwZV9ibG9jazsKIAkJfQogCQluZXh0X2dwZV94cnVwdF9pbmZvID0gZ3BlX3hydXB0X2luZm8tPm5leHQ7Ci0JCUFDUElfTUVNX0ZSRUUoZ3BlX3hydXB0X2luZm8pOworCQlBQ1BJX0ZSRUUoZ3BlX3hydXB0X2luZm8pOwogCQlncGVfeHJ1cHRfaW5mbyA9IG5leHRfZ3BlX3hydXB0X2luZm87CiAJfQogCkBAIC0yMTYsNyArMjE2LDcgQEAKIHZvaWQgYWNwaV91dF9zdWJzeXN0ZW1fc2h1dGRvd24odm9pZCkKIHsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X3N1YnN5c3RlbV9zaHV0ZG93biIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfc3Vic3lzdGVtX3NodXRkb3duKTsKIAogCS8qIEp1c3QgZXhpdCBpZiBzdWJzeXN0ZW0gaXMgYWxyZWFkeSBzaHV0ZG93biAqLwogCkBAIC0yMjgsNiArMjI4LDcgQEAKIAkvKiBTdWJzeXN0ZW0gYXBwZWFycyBhY3RpdmUsIGdvIGFoZWFkIGFuZCBzaHV0IGl0IGRvd24gKi8KIAogCWFjcGlfZ2JsX3NodXRkb3duID0gVFJVRTsKKwlhY3BpX2dibF9zdGFydHVwX2ZsYWdzID0gMDsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJTaHV0dGluZyBkb3duIEFDUEkgU3Vic3lzdGVtXG4iKSk7CiAKIAkvKiBDbG9zZSB0aGUgYWNwaV9ldmVudCBIYW5kbGluZyAqLwpAQCAtMjQ1LDEyICsyNDYsNSBAQAogCS8qIFB1cmdlIHRoZSBsb2NhbCBjYWNoZXMgKi8KIAogCSh2b2lkKWFjcGlfdXRfZGVsZXRlX2NhY2hlcygpOwotCi0JLyogRGVidWcgb25seSAtIGRpc3BsYXkgbGVmdG92ZXIgbWVtb3J5IGFsbG9jYXRpb24sIGlmIGFueSAqLwotCi0jaWZkZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKLQlhY3BpX3V0X2R1bXBfYWxsb2NhdGlvbnMoQUNQSV9VSU5UMzJfTUFYLCBOVUxMKTsKLSNlbmRpZgotCiAJcmV0dXJuX1ZPSUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWF0aC5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1hdGguYwppbmRleCA0YTMzNjA0Li4xOWQ3NGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWF0aC5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtYXRoLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAl1bmlvbiB1aW50NjRfb3ZlcmxheSBxdW90aWVudDsKIAl1MzIgcmVtYWluZGVyMzI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9zaG9ydF9kaXZpZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3Nob3J0X2RpdmlkZSk7CiAKIAkvKiBBbHdheXMgY2hlY2sgZm9yIGEgemVybyBkaXZpc29yICovCiAKQEAgLTEzOSw3ICsxMzksNyBAQAogCXVuaW9uIHVpbnQ2NF9vdmVybGF5IHBhcnRpYWwyOwogCXVuaW9uIHVpbnQ2NF9vdmVybGF5IHBhcnRpYWwzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZGl2aWRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9kaXZpZGUpOwogCiAJLyogQWx3YXlzIGNoZWNrIGZvciBhIHplcm8gZGl2aXNvciAqLwogCkBAIC0yNjEsNyArMjYxLDcgQEAKIAkJICAgICBhY3BpX2ludGVnZXIgKiBvdXRfcXVvdGllbnQsIHUzMiAqIG91dF9yZW1haW5kZXIpCiB7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9zaG9ydF9kaXZpZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3Nob3J0X2RpdmlkZSk7CiAKIAkvKiBBbHdheXMgY2hlY2sgZm9yIGEgemVybyBkaXZpc29yICovCiAKQEAgLTI4Nyw3ICsyODcsNyBAQAogCSAgICAgICBhY3BpX2ludGVnZXIgaW5fZGl2aXNvciwKIAkgICAgICAgYWNwaV9pbnRlZ2VyICogb3V0X3F1b3RpZW50LCBhY3BpX2ludGVnZXIgKiBvdXRfcmVtYWluZGVyKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2RpdmlkZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZGl2aWRlKTsKIAogCS8qIEFsd2F5cyBjaGVjayBmb3IgYSB6ZXJvIGRpdmlzb3IgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1pc2MuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtaXNjLmMKaW5kZXggNzM2NGY1Zi4uNWM3NWQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWlzYy5jCkBAIC00OSw2ICs0OSwzMyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2lzX2FtbF90YWJsZQorICoKKyAqIFBBUkFNRVRFUlM6ICBUYWJsZSAgICAgICAgICAgICAgIC0gQW4gQUNQSSB0YWJsZQorICoKKyAqIFJFVFVSTjogICAgICBUUlVFIGlmIHRhYmxlIGNvbnRhaW5zIGV4ZWN1dGFibGUgQU1MOyBGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBERVNDUklQVElPTjogQ2hlY2sgQUNQSSBTaWduYXR1cmUgZm9yIGEgdGFibGUgdGhhdCBjb250YWlucyBBTUwgY29kZS4KKyAqICAgICAgICAgICAgICBDdXJyZW50bHksIHRoZXNlIGFyZSBEU0RULFNTRFQsUFNEVC4gQWxsIG90aGVyIHRhYmxlIHR5cGVzIGFyZQorICogICAgICAgICAgICAgIGRhdGEgdGFibGVzIHRoYXQgZG8gbm90IGNvbnRhaW4gQU1MIGNvZGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3U4IGFjcGlfdXRfaXNfYW1sX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpCit7CisKKwkvKiBJZ25vcmUgdGFibGVzIHRoYXQgY29udGFpbiBBTUwgKi8KKworCWlmIChBQ1BJX0NPTVBBUkVfTkFNRSh0YWJsZS0+c2lnbmF0dXJlLCBEU0RUX1NJRykgfHwKKwkgICAgQUNQSV9DT01QQVJFX05BTUUodGFibGUtPnNpZ25hdHVyZSwgUFNEVF9TSUcpIHx8CisJICAgIEFDUElfQ09NUEFSRV9OQU1FKHRhYmxlLT5zaWduYXR1cmUsIFNTRFRfU0lHKSkgeworCQlyZXR1cm4gKFRSVUUpOworCX0KKworCXJldHVybiAoRkFMU0UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2FsbG9jYXRlX293bmVyX2lkCiAgKgogICogUEFSQU1FVEVSUzogIG93bmVyX2lkICAgICAgICAtIFdoZXJlIHRoZSBuZXcgb3duZXIgSUQgaXMgcmV0dXJuZWQKQEAgLTYwLDYgKzg3LDcgQEAKICAqICAgICAgICAgICAgICB3aGVuIHRoZSBtZXRob2QgZXhpdHMgb3IgdGhlIHRhYmxlIGlzIHVubG9hZGVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIGFjcGlfc3RhdHVzIGFjcGlfdXRfYWxsb2NhdGVfb3duZXJfaWQoYWNwaV9vd25lcl9pZCAqIG93bmVyX2lkKQogewogCWFjcGlfbmF0aXZlX3VpbnQgaTsKQEAgLTY3LDcgKzk1LDcgQEAKIAlhY3BpX25hdGl2ZV91aW50IGs7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfYWxsb2NhdGVfb3duZXJfaWQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2FsbG9jYXRlX293bmVyX2lkKTsKIAogCS8qIEd1YXJkIGFnYWluc3QgbXVsdGlwbGUgYWxsb2NhdGlvbnMgb2YgSUQgdG8gdGhlIHNhbWUgbG9jYXRpb24gKi8KIApAQCAtOTcsNiArMTI1LDcgQEAKIAogCQlmb3IgKGsgPSBhY3BpX2dibF9uZXh0X293bmVyX2lkX29mZnNldDsgayA8IDMyOyBrKyspIHsKIAkJCWlmIChhY3BpX2dibF9vd25lcl9pZF9tYXNrW2pdID09IEFDUElfVUlOVDMyX01BWCkgeworCiAJCQkJLyogVGhlcmUgYXJlIG5vIGZyZWUgSURzIGluIHRoaXMgbWFzayAqLwogCiAJCQkJYnJlYWs7CkBAIC0xMjMsNyArMTUyLDcgQEAKIAkJCQkgICAgKGFjcGlfb3duZXJfaWQpICgoayArIDEpICsgQUNQSV9NVUxfMzIoaikpOwogCiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9WQUxVRVMsCi0JCQkJCQkgICJBbGxvY2F0ZWQgb3duZXJfaWQ6ICUyLjJYXG4iLAorCQkJCQkJICAiQWxsb2NhdGVkIE93bmVySWQ6ICUyLjJYXG4iLAogCQkJCQkJICAodW5zaWduZWQgaW50KSpvd25lcl9pZCkpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KQEAgLTE0NCw3ICsxNzMsNyBAQAogCSAqLwogCXN0YXR1cyA9IEFFX09XTkVSX0lEX0xJTUlUOwogCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIG5ldyBvd25lcl9pZCAoMjU1IG1heCksIEFFX09XTkVSX0lEX0xJTUlUIikpOworCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgT3duZXJJZCAoMjU1IG1heCksIEFFX09XTkVSX0lEX0xJTUlUIikpOwogCiAgICAgICBleGl0OgogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9DQUNIRVMpOwpAQCAtMTcyLDcgKzIwMSw3IEBACiAJYWNwaV9uYXRpdmVfdWludCBpbmRleDsKIAl1MzIgYml0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoInV0X3JlbGVhc2Vfb3duZXJfaWQiLCBvd25lcl9pZCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfcmVsZWFzZV9vd25lcl9pZCwgb3duZXJfaWQpOwogCiAJLyogQWx3YXlzIGNsZWFyIHRoZSBpbnB1dCBvd25lcl9pZCAoemVybyBpcyBhbiBpbnZhbGlkIElEKSAqLwogCkBAIC0xODEsNyArMjEwLDcgQEAKIAkvKiBaZXJvIGlzIG5vdCBhIHZhbGlkIG93bmVyX2lEICovCiAKIAlpZiAob3duZXJfaWQgPT0gMCkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBvd25lcl9pZDogJTIuMlgiLCBvd25lcl9pZCkpOworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBPd25lcklkOiAlMi4yWCIsIG93bmVyX2lkKSk7CiAJCXJldHVybl9WT0lEOwogCX0KIApAQCAtMjA3LDcgKzIzNiw3IEBACiAJCWFjcGlfZ2JsX293bmVyX2lkX21hc2tbaW5kZXhdIF49IGJpdDsKIAl9IGVsc2UgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJSZWxlYXNlIG9mIG5vbi1hbGxvY2F0ZWQgb3duZXJfaWQ6ICUyLjJYIiwKKwkJCSAgICAiUmVsZWFzZSBvZiBub24tYWxsb2NhdGVkIE93bmVySWQ6ICUyLjJYIiwKIAkJCSAgICBvd25lcl9pZCArIDEpKTsKIAl9CiAKQEAgLTI3Myw2ICszMDIsNyBAQAogCiAJYWNwaV9vc19wcmludGYoIlwiIik7CiAJZm9yIChpID0gMDsgc3RyaW5nW2ldICYmIChpIDwgbWF4X2xlbmd0aCk7IGkrKykgeworCiAJCS8qIEVzY2FwZSBzZXF1ZW5jZXMgKi8KIAogCQlzd2l0Y2ggKHN0cmluZ1tpXSkgewpAQCAtNDYxLDEyICs0OTEsNDcgQEAKIAl9CiAJYWNwaV9vc19wcmludGYoIlxuIik7CiAKLQlBQ1BJX01FTV9GUkVFKGJ1ZmZlci5wb2ludGVyKTsKKwlBQ1BJX0ZSRUUoYnVmZmVyLnBvaW50ZXIpOwogfQogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyCisgKgorICogUEFSQU1FVEVSUzogIENoYXIgICAgICAgICAgICAtIFRoZSBjaGFyYWN0ZXIgdG8gYmUgZXhhbWluZWQKKyAqCisgKiBSRVRVUk46ICAgICAgVFJVRSBpZiB0aGUgY2hhcmFjdGVyIGlzIHZhbGlkLCBGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBERVNDUklQVElPTjogQ2hlY2sgZm9yIGEgdmFsaWQgQUNQSSBjaGFyYWN0ZXIuIE11c3QgYmUgb25lIG9mOgorICogICAgICAgICAgICAgIDEpIFVwcGVyIGNhc2UgYWxwaGEKKyAqICAgICAgICAgICAgICAyKSBudW1lcmljCisgKiAgICAgICAgICAgICAgMykgdW5kZXJzY29yZQorICoKKyAqICAgICAgICAgICAgICBXZSBhbGxvdyBhICchJyBhcyB0aGUgbGFzdCBjaGFyYWN0ZXIgYmVjYXVzZSBvZiB0aGUgQVNGISB0YWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3U4IGFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyKGNoYXIgY2hhcmFjdGVyLCBhY3BpX25hdGl2ZV91aW50IHBvc2l0aW9uKQoreworCisJaWYgKCEoKGNoYXJhY3RlciA+PSAnQScgJiYgY2hhcmFjdGVyIDw9ICdaJykgfHwKKwkgICAgICAoY2hhcmFjdGVyID49ICcwJyAmJiBjaGFyYWN0ZXIgPD0gJzknKSB8fCAoY2hhcmFjdGVyID09ICdfJykpKSB7CisKKwkJLyogQWxsb3cgYSAnIScgaW4gdGhlIGxhc3QgcG9zaXRpb24gKi8KKworCQlpZiAoY2hhcmFjdGVyID09ICchJyAmJiBwb3NpdGlvbiA9PSAzKSB7CisJCQlyZXR1cm4gKFRSVUUpOworCQl9CisKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCisJcmV0dXJuIChUUlVFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF92YWxpZF9hY3BpX25hbWUKICAqCiAgKiBQQVJBTUVURVJTOiAgTmFtZSAgICAgICAgICAgIC0gVGhlIG5hbWUgdG8gYmUgZXhhbWluZWQKQEAgLTQ4MiwxOSArNTQ3LDEzIEBACiAKIHU4IGFjcGlfdXRfdmFsaWRfYWNwaV9uYW1lKHUzMiBuYW1lKQogewotCWNoYXIgKm5hbWVfcHRyID0gKGNoYXIgKikmbmFtZTsKLQljaGFyIGNoYXJhY3RlcjsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OQU1FX1NJWkU7IGkrKykgewotCQljaGFyYWN0ZXIgPSAqbmFtZV9wdHI7Ci0JCW5hbWVfcHRyKys7Ci0KLQkJaWYgKCEoKGNoYXJhY3RlciA9PSAnXycpIHx8Ci0JCSAgICAgIChjaGFyYWN0ZXIgPj0gJ0EnICYmIGNoYXJhY3RlciA8PSAnWicpIHx8Ci0JCSAgICAgIChjaGFyYWN0ZXIgPj0gJzAnICYmIGNoYXJhY3RlciA8PSAnOScpKSkgeworCQlpZiAoIWFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyCisJCSAgICAoKEFDUElfQ0FTVF9QVFIoY2hhciwgJm5hbWUpKVtpXSwgaSkpIHsKIAkJCXJldHVybiAoRkFMU0UpOwogCQl9CiAJfQpAQCAtNTA0LDI0ICs1NjMsMzcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF92YWxpZF9hY3BpX2NoYXJhY3RlcgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfcmVwYWlyX25hbWUKICAqCi0gKiBQQVJBTUVURVJTOiAgQ2hhcmFjdGVyICAgICAgICAgICAtIFRoZSBjaGFyYWN0ZXIgdG8gYmUgZXhhbWluZWQKKyAqIFBBUkFNRVRFUlM6ICBOYW1lICAgICAgICAgICAgLSBUaGUgQUNQSSBuYW1lIHRvIGJlIHJlcGFpcmVkCiAgKgotICogUkVUVVJOOiAgICAgIDEgaWYgQ2hhcmFjdGVyIG1heSBhcHBlYXIgaW4gYSBuYW1lLCBlbHNlIDAKKyAqIFJFVFVSTjogICAgICBSZXBhaXJlZCB2ZXJzaW9uIG9mIHRoZSBuYW1lCiAgKgotICogREVTQ1JJUFRJT046IENoZWNrIGZvciBhIHByaW50YWJsZSBjaGFyYWN0ZXIKKyAqIERFU0NSSVBUSU9OOiBSZXBhaXIgYW4gQUNQSSBuYW1lOiBDaGFuZ2UgaW52YWxpZCBjaGFyYWN0ZXJzIHRvICcqJyBhbmQKKyAqICAgICAgICAgICAgICByZXR1cm4gdGhlIG5ldyBuYW1lLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXU4IGFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyYWN0ZXIoY2hhciBjaGFyYWN0ZXIpCithY3BpX25hbWUgYWNwaV91dF9yZXBhaXJfbmFtZShhY3BpX25hbWUgbmFtZSkKIHsKKwljaGFyICpuYW1lX3B0ciA9IEFDUElfQ0FTVF9QVFIoY2hhciwgJm5hbWUpOworCWNoYXIgbmV3X25hbWVbQUNQSV9OQU1FX1NJWkVdOworCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OQU1FX1NJWkU7IGkrKykgeworCQluZXdfbmFtZVtpXSA9IG5hbWVfcHRyW2ldOwogCi0JcmV0dXJuICgodTgpICgoY2hhcmFjdGVyID09ICdfJykgfHwKLQkJICAgICAgKGNoYXJhY3RlciA+PSAnQScgJiYgY2hhcmFjdGVyIDw9ICdaJykgfHwKLQkJICAgICAgKGNoYXJhY3RlciA+PSAnMCcgJiYgY2hhcmFjdGVyIDw9ICc5JykpKTsKKwkJLyoKKwkJICogUmVwbGFjZSBhIGJhZCBjaGFyYWN0ZXIgd2l0aCBzb21ldGhpbmcgcHJpbnRhYmxlLCB5ZXQgdGVjaG5pY2FsbHkKKwkJICogc3RpbGwgaW52YWxpZC4gVGhpcyBwcmV2ZW50cyBhbnkgY29sbGlzaW9ucyB3aXRoIGV4aXN0aW5nICJnb29kIgorCQkgKiBuYW1lcyBpbiB0aGUgbmFtZXNwYWNlLgorCQkgKi8KKwkJaWYgKCFhY3BpX3V0X3ZhbGlkX2FjcGlfY2hhcihuYW1lX3B0cltpXSwgaSkpIHsKKwkJCW5ld19uYW1lW2ldID0gJyonOworCQl9CisJfQorCisJcmV0dXJuICgqQUNQSV9DQVNUX1BUUih1MzIsIG5ld19uYW1lKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MjksNyArNjAxLDggQEAKICAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3N0cnRvdWw2NAogICoKICAqIFBBUkFNRVRFUlM6ICBTdHJpbmcgICAgICAgICAgLSBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nCi0gKiAgICAgICAgICAgICAgQmFzZSAgICAgICAgICAgIC0gUmFkaXggb2YgdGhlIHN0cmluZzogMTAsIDE2LCBvciBBQ1BJX0FOWV9CQVNFCisgKiAgICAgICAgICAgICAgQmFzZSAgICAgICAgICAgIC0gUmFkaXggb2YgdGhlIHN0cmluZzogMTYgb3IgQUNQSV9BTllfQkFTRTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0FOWV9CQVNFIG1lYW5zICdpbiBiZWhhbGYgb2YgdG9faW50ZWdlcicKICAqICAgICAgICAgICAgICByZXRfaW50ZWdlciAgICAgLSBXaGVyZSB0aGUgY29udmVydGVkIGludGVnZXIgaXMgcmV0dXJuZWQKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzIGFuZCBDb252ZXJ0ZWQgdmFsdWUKQEAgLTU0NSwxNiArNjE4LDE3IEBACiAJdTMyIHRoaXNfZGlnaXQgPSAwOwogCWFjcGlfaW50ZWdlciByZXR1cm5fdmFsdWUgPSAwOwogCWFjcGlfaW50ZWdlciBxdW90aWVudDsKKwlhY3BpX2ludGVnZXIgZGl2aWRlbmQ7CisJdTMyIHRvX2ludGVnZXJfb3AgPSAoYmFzZSA9PSBBQ1BJX0FOWV9CQVNFKTsKKwl1MzIgbW9kZTMyID0gKGFjcGlfZ2JsX2ludGVnZXJfYnl0ZV93aWR0aCA9PSA0KTsKKwl1OCB2YWxpZF9kaWdpdHMgPSAwOworCXU4IHNpZ25fb2YweCA9IDA7CisJdTggdGVybSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9zdHJvdWw2NCIpOwotCi0JaWYgKCghc3RyaW5nKSB8fCAhKCpzdHJpbmcpKSB7Ci0JCWdvdG8gZXJyb3JfZXhpdDsKLQl9CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9zdHJvdWw2NCk7CiAKIAlzd2l0Y2ggKGJhc2UpIHsKIAljYXNlIEFDUElfQU5ZX0JBU0U6Ci0JY2FzZSAxMDoKIAljYXNlIDE2OgogCQlicmVhazsKIApAQCAtNTYzLDc2ICs2MzcsMTEwIEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKKwlpZiAoIXN0cmluZykgeworCQlnb3RvIGVycm9yX2V4aXQ7CisJfQorCiAJLyogU2tpcCBvdmVyIGFueSB3aGl0ZSBzcGFjZSBpbiB0aGUgYnVmZmVyICovCiAKLQl3aGlsZSAoQUNQSV9JU19TUEFDRSgqc3RyaW5nKSB8fCAqc3RyaW5nID09ICdcdCcpIHsKKwl3aGlsZSAoKCpzdHJpbmcpICYmIChBQ1BJX0lTX1NQQUNFKCpzdHJpbmcpIHx8ICpzdHJpbmcgPT0gJ1x0JykpIHsKIAkJc3RyaW5nKys7CiAJfQogCi0JLyoKLQkgKiBJZiB0aGUgaW5wdXQgcGFyYW1ldGVyIEJhc2UgaXMgemVybywgdGhlbiB3ZSBuZWVkIHRvCi0JICogZGV0ZXJtaW5lIGlmIGl0IGlzIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWw6Ci0JICovCi0JaWYgKGJhc2UgPT0gMCkgeworCWlmICh0b19pbnRlZ2VyX29wKSB7CisJCS8qCisJCSAqIEJhc2UgZXF1YWwgdG8gQUNQSV9BTllfQkFTRSBtZWFucyAndG9faW50ZWdlciBvcGVyYXRpb24gY2FzZScuCisJCSAqIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwuCisJCSAqLwogCQlpZiAoKCpzdHJpbmcgPT0gJzAnKSAmJiAoQUNQSV9UT0xPV0VSKCooc3RyaW5nICsgMSkpID09ICd4JykpIHsKKwkJCXNpZ25fb2YweCA9IDE7CiAJCQliYXNlID0gMTY7CisKKwkJCS8qIFNraXAgb3ZlciB0aGUgbGVhZGluZyAnMHgnICovCiAJCQlzdHJpbmcgKz0gMjsKIAkJfSBlbHNlIHsKIAkJCWJhc2UgPSAxMDsKIAkJfQogCX0KIAotCS8qCi0JICogRm9yIGhleGFkZWNpbWFsIGJhc2UsIHNraXAgb3ZlciB0aGUgbGVhZGluZwotCSAqIDAgb3IgMHgsIGlmIHRoZXkgYXJlIHByZXNlbnQuCi0JICovCi0JaWYgKChiYXNlID09IDE2KSAmJgotCSAgICAoKnN0cmluZyA9PSAnMCcpICYmIChBQ1BJX1RPTE9XRVIoKihzdHJpbmcgKyAxKSkgPT0gJ3gnKSkgewotCQlzdHJpbmcgKz0gMjsKKwkvKiBBbnkgc3RyaW5nIGxlZnQ/IENoZWNrIHRoYXQgJzB4JyBpcyBub3QgZm9sbG93ZWQgYnkgd2hpdGUgc3BhY2UuICovCisKKwlpZiAoISgqc3RyaW5nKSB8fCBBQ1BJX0lTX1NQQUNFKCpzdHJpbmcpIHx8ICpzdHJpbmcgPT0gJ1x0JykgeworCQlpZiAodG9faW50ZWdlcl9vcCkgeworCQkJZ290byBlcnJvcl9leGl0OworCQl9IGVsc2UgeworCQkJZ290byBhbGxfZG9uZTsKKwkJfQogCX0KIAotCS8qIEFueSBzdHJpbmcgbGVmdD8gKi8KKwlkaXZpZGVuZCA9IChtb2RlMzIpID8gQUNQSV9VSU5UMzJfTUFYIDogQUNQSV9VSU5UNjRfTUFYOwogCi0JaWYgKCEoKnN0cmluZykpIHsKLQkJZ290byBlcnJvcl9leGl0OwotCX0KKwkvKiBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaGVyZSAqLwogCiAJLyogTWFpbiBsb29wOiBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gYSA2NC1iaXQgaW50ZWdlciAqLwogCiAJd2hpbGUgKCpzdHJpbmcpIHsKIAkJaWYgKEFDUElfSVNfRElHSVQoKnN0cmluZykpIHsKKwogCQkJLyogQ29udmVydCBBU0NJSSAwLTkgdG8gRGVjaW1hbCB2YWx1ZSAqLwogCiAJCQl0aGlzX2RpZ2l0ID0gKCh1OCkgKiBzdHJpbmcpIC0gJzAnOworCQl9IGVsc2UgaWYgKGJhc2UgPT0gMTApIHsKKworCQkJLyogRGlnaXQgaXMgb3V0IG9mIHJhbmdlOyBwb3NzaWJsZSBpbiB0b19pbnRlZ2VyIGNhc2Ugb25seSAqLworCisJCQl0ZXJtID0gMTsKIAkJfSBlbHNlIHsKLQkJCWlmIChiYXNlID09IDEwKSB7Ci0JCQkJLyogRGlnaXQgaXMgb3V0IG9mIHJhbmdlICovCi0KLQkJCQlnb3RvIGVycm9yX2V4aXQ7Ci0JCQl9Ci0KIAkJCXRoaXNfZGlnaXQgPSAodTgpIEFDUElfVE9VUFBFUigqc3RyaW5nKTsKIAkJCWlmIChBQ1BJX0lTX1hESUdJVCgoY2hhcil0aGlzX2RpZ2l0KSkgeworCiAJCQkJLyogQ29udmVydCBBU0NJSSBIZXggY2hhciB0byB2YWx1ZSAqLwogCiAJCQkJdGhpc19kaWdpdCA9IHRoaXNfZGlnaXQgLSAnQScgKyAxMDsKIAkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBXZSBhbGxvdyBub24taGV4IGNoYXJzLCBqdXN0IHN0b3Agbm93LCBzYW1lIGFzIGVuZC1vZi1zdHJpbmcuCi0JCQkJICogU2VlIEFDUEkgc3BlYywgc3RyaW5nLXRvLWludGVnZXIgY29udmVyc2lvbi4KLQkJCQkgKi8KKwkJCQl0ZXJtID0gMTsKKwkJCX0KKwkJfQorCisJCWlmICh0ZXJtKSB7CisJCQlpZiAodG9faW50ZWdlcl9vcCkgeworCQkJCWdvdG8gZXJyb3JfZXhpdDsKKwkJCX0gZWxzZSB7CiAJCQkJYnJlYWs7CiAJCQl9CisJCX0gZWxzZSBpZiAoKHZhbGlkX2RpZ2l0cyA9PSAwKSAmJiAodGhpc19kaWdpdCA9PSAwKQorCQkJICAgJiYgIXNpZ25fb2YweCkgeworCisJCQkvKiBTa2lwIHplcm9zICovCisJCQlzdHJpbmcrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmFsaWRfZGlnaXRzKys7CisKKwkJaWYgKHNpZ25fb2YweAorCQkgICAgJiYgKCh2YWxpZF9kaWdpdHMgPiAxNikKKwkJCXx8ICgodmFsaWRfZGlnaXRzID4gOCkgJiYgbW9kZTMyKSkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRvX2ludGVnZXIgb3BlcmF0aW9uIGNhc2UuCisJCQkgKiBObyBhbnkgcmVzdHJpY3Rpb25zIGZvciBzdHJpbmctdG8taW50ZWdlciBjb252ZXJzaW9uLAorCQkJICogc2VlIEFDUEkgc3BlYy4KKwkJCSAqLworCQkJZ290byBlcnJvcl9leGl0OwogCQl9CiAKIAkJLyogRGl2aWRlIHRoZSBkaWdpdCBpbnRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uICovCiAKIAkJKHZvaWQpCi0JCSAgICBhY3BpX3V0X3Nob3J0X2RpdmlkZSgoQUNQSV9JTlRFR0VSX01BWCAtCi0JCQkJCSAgKGFjcGlfaW50ZWdlcikgdGhpc19kaWdpdCksIGJhc2UsCi0JCQkJCSAmcXVvdGllbnQsIE5VTEwpOworCQkgICAgYWNwaV91dF9zaG9ydF9kaXZpZGUoKGRpdmlkZW5kIC0gKGFjcGlfaW50ZWdlcikgdGhpc19kaWdpdCksCisJCQkJCSBiYXNlLCAmcXVvdGllbnQsIE5VTEwpOworCiAJCWlmIChyZXR1cm5fdmFsdWUgPiBxdW90aWVudCkgewotCQkJZ290byBlcnJvcl9leGl0OworCQkJaWYgKHRvX2ludGVnZXJfb3ApIHsKKwkJCQlnb3RvIGVycm9yX2V4aXQ7CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQogCQl9CiAKIAkJcmV0dXJuX3ZhbHVlICo9IGJhc2U7CkBAIC02NDIsNiArNzUwLDggQEAKIAogCS8qIEFsbCBkb25lLCBub3JtYWwgZXhpdCAqLwogCisgICAgICBhbGxfZG9uZToKKwogCSpyZXRfaW50ZWdlciA9IHJldHVybl92YWx1ZTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCkBAIC03MTksNyArODI5LDcgQEAKIAl1MzIgdGhpc19pbmRleDsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICp0aGlzX3NvdXJjZV9vYmo7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF93YWxrX3BhY2thZ2VfdHJlZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfd2Fsa19wYWNrYWdlX3RyZWUpOwogCiAJc3RhdGUgPSBhY3BpX3V0X2NyZWF0ZV9wa2dfc3RhdGUoc291cmNlX29iamVjdCwgdGFyZ2V0X29iamVjdCwgMCk7CiAJaWYgKCFzdGF0ZSkgewpAQCAtNzI3LDYgKzgzNyw3IEBACiAJfQogCiAJd2hpbGUgKHN0YXRlKSB7CisKIAkJLyogR2V0IG9uZSBlbGVtZW50IG9mIHRoZSBwYWNrYWdlICovCiAKIAkJdGhpc19pbmRleCA9IHN0YXRlLT5wa2cuaW5kZXg7CkBAIC04MTQsMzEgKzkyNSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZ2VuZXJhdGVfY2hlY2tzdW0KLSAqCi0gKiBQQVJBTUVURVJTOiAgQnVmZmVyICAgICAgICAgIC0gQnVmZmVyIHRvIGJlIHNjYW5uZWQKLSAqICAgICAgICAgICAgICBMZW5ndGggICAgICAgICAgLSBudW1iZXIgb2YgYnl0ZXMgdG8gZXhhbWluZQotICoKLSAqIFJFVFVSTjogICAgICBUaGUgZ2VuZXJhdGVkIGNoZWNrc3VtCi0gKgotICogREVTQ1JJUFRJT046IEdlbmVyYXRlIGEgY2hlY2tzdW0gb24gYSByYXcgYnVmZmVyCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdTggYWNwaV91dF9nZW5lcmF0ZV9jaGVja3N1bSh1OCAqIGJ1ZmZlciwgdTMyIGxlbmd0aCkKLXsKLQl1MzIgaTsKLQlzaWduZWQgY2hhciBzdW0gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCXN1bSA9IChzaWduZWQgY2hhcikoc3VtICsgYnVmZmVyW2ldKTsKLQl9Ci0KLQlyZXR1cm4gKCh1OCkgKDAgLSBzdW0pKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9lcnJvciwgYWNwaV91dF93YXJuaW5nLCBhY3BpX3V0X2luZm8KICAqCiAgKiBQQVJBTUVURVJTOiAgbW9kdWxlX25hbWUgICAgICAgICAtIENhbGxlcidzIG1vZHVsZSBuYW1lIChmb3IgZXJyb3Igb3V0cHV0KQpAQCAtOTAwLDM2ICs5ODYsMyBAQAogCWFjcGlfb3NfdnByaW50Zihmb3JtYXQsIGFyZ3MpOwogCWFjcGlfb3NfcHJpbnRmKCIgWyVYXVxuIiwgQUNQSV9DQV9WRVJTSU9OKTsKIH0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF9yZXBvcnRfZXJyb3IsIFdhcm5pbmcsIEluZm8KLSAqCi0gKiBQQVJBTUVURVJTOiAgbW9kdWxlX25hbWUgICAgICAgICAtIENhbGxlcidzIG1vZHVsZSBuYW1lIChmb3IgZXJyb3Igb3V0cHV0KQotICogICAgICAgICAgICAgIGxpbmVfbnVtYmVyICAgICAgICAgLSBDYWxsZXIncyBsaW5lIG51bWJlciAoZm9yIGVycm9yIG91dHB1dCkKLSAqCi0gKiBSRVRVUk46ICAgICAgTm9uZQotICoKLSAqIERFU0NSSVBUSU9OOiBQcmludCBlcnJvciBtZXNzYWdlCi0gKgotICogTm90ZTogTGVnYWN5IG9ubHksIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gbm8gbG9uZ2VyIHVzZWQgYnkgZHJpdmVycy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGFjcGlfdXRfcmVwb3J0X2Vycm9yKGNoYXIgKm1vZHVsZV9uYW1lLCB1MzIgbGluZV9udW1iZXIpCi17Ci0KLQlhY3BpX29zX3ByaW50ZigiQUNQSSBFcnJvciAoJXMtJTA0ZCk6ICIsIG1vZHVsZV9uYW1lLCBsaW5lX251bWJlcik7Ci19Ci0KLXZvaWQgYWNwaV91dF9yZXBvcnRfd2FybmluZyhjaGFyICptb2R1bGVfbmFtZSwgdTMyIGxpbmVfbnVtYmVyKQotewotCi0JYWNwaV9vc19wcmludGYoIkFDUEkgV2FybmluZyAoJXMtJTA0ZCk6ICIsIG1vZHVsZV9uYW1lLCBsaW5lX251bWJlcik7Ci19Ci0KLXZvaWQgYWNwaV91dF9yZXBvcnRfaW5mbyhjaGFyICptb2R1bGVfbmFtZSwgdTMyIGxpbmVfbnVtYmVyKQotewotCi0JYWNwaV9vc19wcmludGYoIkFDUEkgKCVzLSUwNGQpOiAiLCBtb2R1bGVfbmFtZSwgbGluZV9udW1iZXIpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG11dGV4LmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYwppbmRleCA0NWE3MjQ0Li4yNWViMzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYwpAQCAtNjgsMTkgKzY4LDI2IEBACiAJdTMyIGk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfbXV0ZXhfaW5pdGlhbGl6ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfbXV0ZXhfaW5pdGlhbGl6ZSk7CiAKIAkvKgogCSAqIENyZWF0ZSBlYWNoIG9mIHRoZSBwcmVkZWZpbmVkIG11dGV4IG9iamVjdHMKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX01VVEVYOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fTVVURVg7IGkrKykgewogCQlzdGF0dXMgPSBhY3BpX3V0X2NyZWF0ZV9tdXRleChpKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCX0KIAorCS8qIENyZWF0ZSB0aGUgc3BpbmxvY2tzIGZvciB1c2UgYXQgaW50ZXJydXB0IGxldmVsICovCisKIAlzdGF0dXMgPSBhY3BpX29zX2NyZWF0ZV9sb2NrKCZhY3BpX2dibF9ncGVfbG9jayk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCXN0YXR1cyA9IGFjcGlfb3NfY3JlYXRlX2xvY2soJmFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC0xMDAsMTYgKzEwNywxOSBAQAogewogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfbXV0ZXhfdGVybWluYXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9tdXRleF90ZXJtaW5hdGUpOwogCiAJLyoKIAkgKiBEZWxldGUgZWFjaCBwcmVkZWZpbmVkIG11dGV4IG9iamVjdAogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fTVVURVg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9NVVRFWDsgaSsrKSB7CiAJCSh2b2lkKWFjcGlfdXRfZGVsZXRlX211dGV4KGkpOwogCX0KIAorCS8qIERlbGV0ZSB0aGUgc3BpbmxvY2tzICovCisKIAlhY3BpX29zX2RlbGV0ZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKKwlhY3BpX29zX2RlbGV0ZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCXJldHVybl9WT0lEOwogfQogCkBAIC0xMjksOSArMTM5LDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJ1dF9jcmVhdGVfbXV0ZXgiLCBtdXRleF9pZCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfY3JlYXRlX211dGV4LCBtdXRleF9pZCk7CiAKLQlpZiAobXV0ZXhfaWQgPiBNQVhfTVVURVgpIHsKKwlpZiAobXV0ZXhfaWQgPiBBQ1BJX01BWF9NVVRFWCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCkBAIC0xNjMsOSArMTczLDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigidXRfZGVsZXRlX211dGV4IiwgbXV0ZXhfaWQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKHV0X2RlbGV0ZV9tdXRleCwgbXV0ZXhfaWQpOwogCi0JaWYgKG11dGV4X2lkID4gTUFYX01VVEVYKSB7CisJaWYgKG11dGV4X2lkID4gQUNQSV9NQVhfTVVURVgpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIApAQCAtMTkyLDExICsyMDIsMTEgQEAKIGFjcGlfc3RhdHVzIGFjcGlfdXRfYWNxdWlyZV9tdXRleChhY3BpX211dGV4X2hhbmRsZSBtdXRleF9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTMyIHRoaXNfdGhyZWFkX2lkOworCWFjcGlfdGhyZWFkX2lkIHRoaXNfdGhyZWFkX2lkOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJ1dF9hY3F1aXJlX211dGV4Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHV0X2FjcXVpcmVfbXV0ZXgpOwogCi0JaWYgKG11dGV4X2lkID4gTUFYX01VVEVYKSB7CisJaWYgKG11dGV4X2lkID4gQUNQSV9NQVhfTVVURVgpIHsKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKQEAgLTIxMyw3ICsyMjMsNyBAQAogCQkgKiB0aGUgbXV0ZXggb3JkZXJpbmcgcnVsZS4gIFRoaXMgaW5kaWNhdGVzIGEgY29kaW5nIGVycm9yIHNvbWV3aGVyZSBpbgogCQkgKiB0aGUgQUNQSSBzdWJzeXN0ZW0gY29kZS4KIAkJICovCi0JCWZvciAoaSA9IG11dGV4X2lkOyBpIDwgTUFYX01VVEVYOyBpKyspIHsKKwkJZm9yIChpID0gbXV0ZXhfaWQ7IGkgPCBBQ1BJX01BWF9NVVRFWDsgaSsrKSB7CiAJCQlpZiAoYWNwaV9nYmxfbXV0ZXhfaW5mb1tpXS50aHJlYWRfaWQgPT0gdGhpc190aHJlYWRfaWQpIHsKIAkJCQlpZiAoaSA9PSBtdXRleF9pZCkgewogCQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLApAQCAtMjc1LDE2ICsyODUsMTYgQEAKIGFjcGlfc3RhdHVzIGFjcGlfdXRfcmVsZWFzZV9tdXRleChhY3BpX211dGV4X2hhbmRsZSBtdXRleF9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTMyIHRoaXNfdGhyZWFkX2lkOworCWFjcGlfdGhyZWFkX2lkIHRoaXNfdGhyZWFkX2lkOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJ1dF9yZWxlYXNlX211dGV4Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHV0X3JlbGVhc2VfbXV0ZXgpOwogCiAJdGhpc190aHJlYWRfaWQgPSBhY3BpX29zX2dldF90aHJlYWRfaWQoKTsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX01VVEVYLAogCQkJICAiVGhyZWFkICVYIHJlbGVhc2luZyBNdXRleCBbJXNdXG4iLCB0aGlzX3RocmVhZF9pZCwKIAkJCSAgYWNwaV91dF9nZXRfbXV0ZXhfbmFtZShtdXRleF9pZCkpKTsKIAotCWlmIChtdXRleF9pZCA+IE1BWF9NVVRFWCkgeworCWlmIChtdXRleF9pZCA+IEFDUElfTUFYX01VVEVYKSB7CiAJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCkBAIC0zMDksNyArMzE5LDcgQEAKIAkJICogb3JkZXJpbmcgcnVsZS4gIFRoaXMgaW5kaWNhdGVzIGEgY29kaW5nIGVycm9yIHNvbWV3aGVyZSBpbgogCQkgKiB0aGUgQUNQSSBzdWJzeXN0ZW0gY29kZS4KIAkJICovCi0JCWZvciAoaSA9IG11dGV4X2lkOyBpIDwgTUFYX01VVEVYOyBpKyspIHsKKwkJZm9yIChpID0gbXV0ZXhfaWQ7IGkgPCBBQ1BJX01BWF9NVVRFWDsgaSsrKSB7CiAJCQlpZiAoYWNwaV9nYmxfbXV0ZXhfaW5mb1tpXS50aHJlYWRfaWQgPT0gdGhpc190aHJlYWRfaWQpIHsKIAkJCQlpZiAoaSA9PSBtdXRleF9pZCkgewogCQkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRvYmplY3QuYwppbmRleCA3ZWUyZDFkLi5iYTdkOGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0b2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG9iamVjdC5jCkBAIC05Miw3ICs5Miw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0OwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnNlY29uZF9vYmplY3Q7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigidXRfY3JlYXRlX2ludGVybmFsX29iamVjdF9kYmciLAorCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKHV0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3RfZGJnLAogCQkJCWFjcGlfdXRfZ2V0X3R5cGVfbmFtZSh0eXBlKSk7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgcmF3IG9iamVjdCBkZXNjcmlwdG9yICovCkBAIC0xNjEsNyArMTYxLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpidWZmZXJfZGVzYzsKIAl1OCAqYnVmZmVyID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJ1dF9jcmVhdGVfYnVmZmVyX29iamVjdCIsIGJ1ZmZlcl9zaXplKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMih1dF9jcmVhdGVfYnVmZmVyX29iamVjdCwgYnVmZmVyX3NpemUpOwogCiAJLyogQ3JlYXRlIGEgbmV3IEJ1ZmZlciBvYmplY3QgKi8KIApAQCAtMTczLDkgKzE3MywxMCBAQAogCS8qIENyZWF0ZSBhbiBhY3R1YWwgYnVmZmVyIG9ubHkgaWYgc2l6ZSA+IDAgKi8KIAogCWlmIChidWZmZXJfc2l6ZSA+IDApIHsKKwogCQkvKiBBbGxvY2F0ZSB0aGUgYWN0dWFsIGJ1ZmZlciAqLwogCi0JCWJ1ZmZlciA9IEFDUElfTUVNX0NBTExPQ0FURShidWZmZXJfc2l6ZSk7CisJCWJ1ZmZlciA9IEFDUElfQUxMT0NBVEVfWkVST0VEKGJ1ZmZlcl9zaXplKTsKIAkJaWYgKCFidWZmZXIpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgYWxsb2NhdGUgc2l6ZSAlWCIsCiAJCQkJICAgICh1MzIpIGJ1ZmZlcl9zaXplKSk7CkBAIC0yMTQsNyArMjE1LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzdHJpbmdfZGVzYzsKIAljaGFyICpzdHJpbmc7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigidXRfY3JlYXRlX3N0cmluZ19vYmplY3QiLCBzdHJpbmdfc2l6ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfY3JlYXRlX3N0cmluZ19vYmplY3QsIHN0cmluZ19zaXplKTsKIAogCS8qIENyZWF0ZSBhIG5ldyBTdHJpbmcgb2JqZWN0ICovCiAKQEAgLTIyNyw3ICsyMjgsNyBAQAogCSAqIEFsbG9jYXRlIHRoZSBhY3R1YWwgc3RyaW5nIGJ1ZmZlciAtLSAoU2l6ZSArIDEpIGZvciBOVUxMIHRlcm1pbmF0b3IuCiAJICogTk9URTogWmVyby1sZW5ndGggc3RyaW5ncyBhcmUgTlVMTCB0ZXJtaW5hdGVkCiAJICovCi0Jc3RyaW5nID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHN0cmluZ19zaXplICsgMSk7CisJc3RyaW5nID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc3RyaW5nX3NpemUgKyAxKTsKIAlpZiAoIXN0cmluZykgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ291bGQgbm90IGFsbG9jYXRlIHNpemUgJVgiLAogCQkJICAgICh1MzIpIHN0cmluZ19zaXplKSk7CkBAIC0yNjAsNyArMjYxLDcgQEAKIHU4IGFjcGlfdXRfdmFsaWRfaW50ZXJuYWxfb2JqZWN0KHZvaWQgKm9iamVjdCkKIHsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgidXRfdmFsaWRfaW50ZXJuYWxfb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHV0X3ZhbGlkX2ludGVybmFsX29iamVjdCk7CiAKIAkvKiBDaGVjayBmb3IgYSBudWxsIHBvaW50ZXIgKi8KIApAQCAtMzA4LDcgKzMwOSw3IEBACiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfYWxsb2NhdGVfb2JqZWN0X2Rlc2NfZGJnIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9hbGxvY2F0ZV9vYmplY3RfZGVzY19kYmcpOwogCiAJb2JqZWN0ID0gYWNwaV9vc19hY3F1aXJlX29iamVjdChhY3BpX2dibF9vcGVyYW5kX2NhY2hlKTsKIAlpZiAoIW9iamVjdCkgewpAQCAtMzE5LDYgKzMyMCw3IEBACiAJfQogCiAJLyogTWFyayB0aGUgZGVzY3JpcHRvciB0eXBlICovCisKIAltZW1zZXQob2JqZWN0LCAwLCBzaXplb2YodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCkpOwogCUFDUElfU0VUX0RFU0NSSVBUT1JfVFlQRShvYmplY3QsIEFDUElfREVTQ19UWVBFX09QRVJBTkQpOwogCkBAIC0zNDIsNyArMzQ0LDcgQEAKIAogdm9pZCBhY3BpX3V0X2RlbGV0ZV9vYmplY3RfZGVzYyh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3QpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X2RlbGV0ZV9vYmplY3RfZGVzYyIsIG9iamVjdCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIodXRfZGVsZXRlX29iamVjdF9kZXNjLCBvYmplY3QpOwogCiAJLyogT2JqZWN0IG11c3QgYmUgYW4gdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAqLwogCkBAIC0zODEsNyArMzgzLDcgQEAKIAlhY3BpX3NpemUgbGVuZ3RoOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X2dldF9zaW1wbGVfb2JqZWN0X3NpemUiLCBpbnRlcm5hbF9vYmplY3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHV0X2dldF9zaW1wbGVfb2JqZWN0X3NpemUsIGludGVybmFsX29iamVjdCk7CiAKIAkvKgogCSAqIEhhbmRsZSBhIG51bGwgb2JqZWN0IChDb3VsZCBiZSBhIHVuaW5pdGlhbGl6ZWQgcGFja2FnZQpAQCAtMzk3LDYgKzM5OSw3IEBACiAJbGVuZ3RoID0gc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KTsKIAogCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUoaW50ZXJuYWxfb2JqZWN0KSA9PSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgeworCiAJCS8qIE9iamVjdCBpcyBhIG5hbWVkIG9iamVjdCAocmVmZXJlbmNlKSwganVzdCByZXR1cm4gdGhlIGxlbmd0aCAqLwogCiAJCSpvYmpfbGVuZ3RoID0gQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRChsZW5ndGgpOwpAQCAtNTU5LDcgKzU2Miw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3BrZ19pbmZvIGluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfZ2V0X3BhY2thZ2Vfb2JqZWN0X3NpemUiLCBpbnRlcm5hbF9vYmplY3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHV0X2dldF9wYWNrYWdlX29iamVjdF9zaXplLCBpbnRlcm5hbF9vYmplY3QpOwogCiAJaW5mby5sZW5ndGggPSAwOwogCWluZm8ub2JqZWN0X3NwYWNlID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRyZXNyYy5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKaW5kZXggMTY0NjEzMS4uNWEyZGU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKQEAgLTQ1LDExMyArNDUsMTEzIEBACiAjaW5jbHVkZSA8YWNwaS9hbWxyZXNyYy5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9VVElMSVRJRVMKLUFDUElfTU9EVUxFX05BTUUoInV0bWlzYyIpCitBQ1BJX01PRFVMRV9OQU1FKCJ1dHJlc3JjIikKIAogI2lmIGRlZmluZWQoQUNQSV9ESVNBU1NFTUJMRVIpIHx8IGRlZmluZWQgKEFDUElfREVCVUdHRVIpCiAvKgogICogU3RyaW5ncyB1c2VkIHRvIGRlY29kZSByZXNvdXJjZSBkZXNjcmlwdG9ycy4KICAqIFVzZWQgYnkgYm90aCB0aGUgZGlzYXNzc2VtYmxlciBhbmQgdGhlIGRlYnVnZ2VyIHJlc291cmNlIGR1bXAgcm91dGluZXMKICAqLwotY29uc3QgY2hhciAqYWNwaV9nYmxfQk1kZWNvZGVbMl0gPSB7Ci0JIm5vdF9idXNfbWFzdGVyIiwKLQkiYnVzX21hc3RlciIKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX2JtX2RlY29kZVtdID0geworCSJOb3RCdXNNYXN0ZXIiLAorCSJCdXNNYXN0ZXIiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9jb25maWdfZGVjb2RlWzRdID0geworY29uc3QgY2hhciAqYWNwaV9nYmxfY29uZmlnX2RlY29kZVtdID0gewogCSIwIC0gR29vZCBDb25maWd1cmF0aW9uIiwKIAkiMSAtIEFjY2VwdGFibGUgQ29uZmlndXJhdGlvbiIsCiAJIjIgLSBTdWJvcHRpbWFsIENvbmZpZ3VyYXRpb24iLAogCSIzIC0gKioqSW52YWxpZCBDb25maWd1cmF0aW9uKioqIiwKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX2NvbnN1bWVfZGVjb2RlWzJdID0gewotCSJyZXNvdXJjZV9wcm9kdWNlciIsCi0JInJlc291cmNlX2NvbnN1bWVyIgorY29uc3QgY2hhciAqYWNwaV9nYmxfY29uc3VtZV9kZWNvZGVbXSA9IHsKKwkiUmVzb3VyY2VQcm9kdWNlciIsCisJIlJlc291cmNlQ29uc3VtZXIiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9ERUNkZWNvZGVbMl0gPSB7Ci0JInBvc19kZWNvZGUiLAotCSJzdWJfZGVjb2RlIgorY29uc3QgY2hhciAqYWNwaV9nYmxfZGVjX2RlY29kZVtdID0geworCSJQb3NEZWNvZGUiLAorCSJTdWJEZWNvZGUiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9IRWRlY29kZVsyXSA9IHsKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX2hlX2RlY29kZVtdID0gewogCSJMZXZlbCIsCiAJIkVkZ2UiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9pb19kZWNvZGVbMl0gPSB7Citjb25zdCBjaGFyICphY3BpX2dibF9pb19kZWNvZGVbXSA9IHsKIAkiRGVjb2RlMTAiLAogCSJEZWNvZGUxNiIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX0xMZGVjb2RlWzJdID0gewotCSJhY3RpdmVfaGlnaCIsCi0JImFjdGl2ZV9sb3ciCitjb25zdCBjaGFyICphY3BpX2dibF9sbF9kZWNvZGVbXSA9IHsKKwkiQWN0aXZlSGlnaCIsCisJIkFjdGl2ZUxvdyIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX21heF9kZWNvZGVbMl0gPSB7Ci0JIm1heF9ub3RfZml4ZWQiLAotCSJtYXhfZml4ZWQiCitjb25zdCBjaGFyICphY3BpX2dibF9tYXhfZGVjb2RlW10gPSB7CisJIk1heE5vdEZpeGVkIiwKKwkiTWF4Rml4ZWQiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9NRU1kZWNvZGVbNF0gPSB7Ci0JIm5vbl9jYWNoZWFibGUiLAorY29uc3QgY2hhciAqYWNwaV9nYmxfbWVtX2RlY29kZVtdID0geworCSJOb25DYWNoZWFibGUiLAogCSJDYWNoZWFibGUiLAotCSJ3cml0ZV9jb21iaW5pbmciLAorCSJXcml0ZUNvbWJpbmluZyIsCiAJIlByZWZldGNoYWJsZSIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX21pbl9kZWNvZGVbMl0gPSB7Ci0JIm1pbl9ub3RfZml4ZWQiLAotCSJtaW5fZml4ZWQiCitjb25zdCBjaGFyICphY3BpX2dibF9taW5fZGVjb2RlW10gPSB7CisJIk1pbk5vdEZpeGVkIiwKKwkiTWluRml4ZWQiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9NVFBkZWNvZGVbNF0gPSB7Ci0JImFkZHJlc3NfcmFuZ2VfbWVtb3J5IiwKLQkiYWRkcmVzc19yYW5nZV9yZXNlcnZlZCIsCi0JImFkZHJlc3NfcmFuZ2VfYUNQSSIsCi0JImFkZHJlc3NfcmFuZ2VfblZTIgorY29uc3QgY2hhciAqYWNwaV9nYmxfbXRwX2RlY29kZVtdID0geworCSJBZGRyZXNzUmFuZ2VNZW1vcnkiLAorCSJBZGRyZXNzUmFuZ2VSZXNlcnZlZCIsCisJIkFkZHJlc3NSYW5nZUFDUEkiLAorCSJBZGRyZXNzUmFuZ2VOVlMiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9STkdkZWNvZGVbNF0gPSB7Ci0JImludmFsaWRfcmFuZ2VzIiwKLQkibm9uX2lTQW9ubHlfcmFuZ2VzIiwKLQkiSVNBb25seV9yYW5nZXMiLAotCSJlbnRpcmVfcmFuZ2UiCitjb25zdCBjaGFyICphY3BpX2dibF9ybmdfZGVjb2RlW10gPSB7CisJIkludmFsaWRSYW5nZXMiLAorCSJOb25JU0FPbmx5UmFuZ2VzIiwKKwkiSVNBT25seVJhbmdlcyIsCisJIkVudGlyZVJhbmdlIgogfTsKIAotY29uc3QgY2hhciAqYWNwaV9nYmxfUldkZWNvZGVbMl0gPSB7Ci0JInJlYWRfb25seSIsCi0JInJlYWRfd3JpdGUiCitjb25zdCBjaGFyICphY3BpX2dibF9yd19kZWNvZGVbXSA9IHsKKwkiUmVhZE9ubHkiLAorCSJSZWFkV3JpdGUiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9TSFJkZWNvZGVbMl0gPSB7Citjb25zdCBjaGFyICphY3BpX2dibF9zaHJfZGVjb2RlW10gPSB7CiAJIkV4Y2x1c2l2ZSIsCiAJIlNoYXJlZCIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX1NJWmRlY29kZVs0XSA9IHsKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX3Npel9kZWNvZGVbXSA9IHsKIAkiVHJhbnNmZXI4IiwKIAkiVHJhbnNmZXI4XzE2IiwKIAkiVHJhbnNmZXIxNiIsCi0JImludmFsaWRfc2l6ZSIKKwkiSW52YWxpZFNpemUiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9UUlNkZWNvZGVbMl0gPSB7Ci0JImRlbnNlX3RyYW5zbGF0aW9uIiwKLQkic3BhcnNlX3RyYW5zbGF0aW9uIgorY29uc3QgY2hhciAqYWNwaV9nYmxfdHJzX2RlY29kZVtdID0geworCSJEZW5zZVRyYW5zbGF0aW9uIiwKKwkiU3BhcnNlVHJhbnNsYXRpb24iCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9UVFBkZWNvZGVbMl0gPSB7Ci0JInR5cGVfc3RhdGljIiwKLQkidHlwZV90cmFuc2xhdGlvbiIKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX3R0cF9kZWNvZGVbXSA9IHsKKwkiVHlwZVN0YXRpYyIsCisJIlR5cGVUcmFuc2xhdGlvbiIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX1RZUGRlY29kZVs0XSA9IHsKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX3R5cF9kZWNvZGVbXSA9IHsKIAkiQ29tcGF0aWJpbGl0eSIsCi0JInR5cGVfYSIsCi0JInR5cGVfYiIsCi0JInR5cGVfZiIKKwkiVHlwZUEiLAorCSJUeXBlQiIsCisJIlR5cGVGIgogfTsKIAogI2VuZGlmCkBAIC0yNDAsNiArMjQwLDEwNCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3dhbGtfYW1sX3Jlc291cmNlcworICoKKyAqIFBBUkFNRVRFUlM6ICBBbWwgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSByYXcgQU1MIHJlc291cmNlIHRlbXBsYXRlCisgKiAgICAgICAgICAgICAgYW1sX2xlbmd0aCAgICAgIC0gTGVuZ3RoIG9mIHRoZSBlbnRpcmUgdGVtcGxhdGUKKyAqICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgLSBDYWxsZWQgb25jZSBmb3IgZWFjaCBkZXNjcmlwdG9yIGZvdW5kLiBJZgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGEgcG9pbnRlciB0byB0aGUgZW5kX3RhZyBpcyByZXR1cm5lZAorICogICAgICAgICAgICAgIENvbnRleHQgICAgICAgICAtIFBhc3NlZCB0byB1c2VyX2Z1bmN0aW9uCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBXYWxrIGEgcmF3IEFNTCByZXNvdXJjZSBsaXN0KGJ1ZmZlcikuIFVzZXIgZnVuY3Rpb24gY2FsbGVkCisgKiAgICAgICAgICAgICAgb25jZSBmb3IgZWFjaCByZXNvdXJjZSBmb3VuZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV91dF93YWxrX2FtbF9yZXNvdXJjZXModTggKiBhbWwsCisJCQkgICBhY3BpX3NpemUgYW1sX2xlbmd0aCwKKwkJCSAgIGFjcGlfd2Fsa19hbWxfY2FsbGJhY2sgdXNlcl9mdW5jdGlvbiwgdm9pZCAqKmNvbnRleHQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXU4ICplbmRfYW1sOworCXU4IHJlc291cmNlX2luZGV4OworCXUzMiBsZW5ndGg7CisJdTMyIG9mZnNldCA9IDA7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3dhbGtfYW1sX3Jlc291cmNlcyk7CisKKwkvKiBUaGUgYWJzb2x1dGUgbWluaW11bSByZXNvdXJjZSB0ZW1wbGF0ZSBpcyBvbmUgZW5kX3RhZyBkZXNjcmlwdG9yICovCisKKwlpZiAoYW1sX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3QgYW1sX3Jlc291cmNlX2VuZF90YWcpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTk9fUkVTT1VSQ0VfRU5EX1RBRyk7CisJfQorCisJLyogUG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UgdGVtcGxhdGUgYnVmZmVyICovCisKKwllbmRfYW1sID0gYW1sICsgYW1sX2xlbmd0aDsKKworCS8qIFdhbGsgdGhlIGJ5dGUgbGlzdCwgYWJvcnQgb24gYW55IGludmFsaWQgZGVzY3JpcHRvciB0eXBlIG9yIGxlbmd0aCAqLworCisJd2hpbGUgKGFtbCA8IGVuZF9hbWwpIHsKKworCQkvKiBWYWxpZGF0ZSB0aGUgUmVzb3VyY2UgVHlwZSBhbmQgUmVzb3VyY2UgTGVuZ3RoICovCisKKwkJc3RhdHVzID0gYWNwaV91dF92YWxpZGF0ZV9yZXNvdXJjZShhbWwsICZyZXNvdXJjZV9pbmRleCk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCX0KKworCQkvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGlzIGRlc2NyaXB0b3IgKi8KKworCQlsZW5ndGggPSBhY3BpX3V0X2dldF9kZXNjcmlwdG9yX2xlbmd0aChhbWwpOworCisJCS8qIEludm9rZSB0aGUgdXNlciBmdW5jdGlvbiAqLworCisJCWlmICh1c2VyX2Z1bmN0aW9uKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIHVzZXJfZnVuY3Rpb24oYW1sLCBsZW5ndGgsIG9mZnNldCwgcmVzb3VyY2VfaW5kZXgsCisJCQkJCSAgY29udGV4dCk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisJCX0KKworCQkvKiBBbiBlbmRfdGFnIGRlc2NyaXB0b3IgdGVybWluYXRlcyB0aGlzIHJlc291cmNlIHRlbXBsYXRlICovCisKKwkJaWYgKGFjcGlfdXRfZ2V0X3Jlc291cmNlX3R5cGUoYW1sKSA9PQorCQkgICAgQUNQSV9SRVNPVVJDRV9OQU1FX0VORF9UQUcpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBtb3JlIGJ5dGUgaW4gdGhlIGJ1ZmZlciBmb3IKKwkJCSAqIHRoZSAybmQgYnl0ZSBvZiB0aGUgZW5kX3RhZworCQkJICovCisJCQlpZiAoKGFtbCArIDEpID49IGVuZF9hbWwpIHsKKwkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX05PX1JFU09VUkNFX0VORF9UQUcpOworCQkJfQorCisJCQkvKiBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGVuZF90YWcgaWYgcmVxdWVzdGVkICovCisKKwkJCWlmICghdXNlcl9mdW5jdGlvbikgeworCQkJCSpjb250ZXh0ID0gYW1sOworCQkJfQorCisJCQkvKiBOb3JtYWwgZXhpdCAqLworCisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCQl9CisKKwkJYW1sICs9IGxlbmd0aDsKKwkJb2Zmc2V0ICs9IGxlbmd0aDsKKwl9CisKKwkvKiBEaWQgbm90IGZpbmQgYW4gZW5kX3RhZyBkZXNjcmlwdG9yICovCisKKwlyZXR1cm4gKEFFX0FNTF9OT19SRVNPVVJDRV9FTkRfVEFHKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF92YWxpZGF0ZV9yZXNvdXJjZQogICoKICAqIFBBUkFNRVRFUlM6ICBBbWwgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSByYXcgQU1MIHJlc291cmNlIGRlc2NyaXB0b3IKQEAgLTI3Myw2ICszNzEsNyBAQAogCSAqIEV4YW1pbmUgdGhlIGxhcmdlL3NtYWxsIGJpdCBpbiB0aGUgcmVzb3VyY2UgaGVhZGVyCiAJICovCiAJaWYgKHJlc291cmNlX3R5cGUgJiBBQ1BJX1JFU09VUkNFX05BTUVfTEFSR0UpIHsKKwogCQkvKiBWZXJpZnkgdGhlIGxhcmdlIHJlc291cmNlIHR5cGUgKG5hbWUpIGFnYWluc3QgdGhlIG1heCAqLwogCiAJCWlmIChyZXNvdXJjZV90eXBlID4gQUNQSV9SRVNPVVJDRV9OQU1FX0xBUkdFX01BWCkgewpAQCAtMzc2LDYgKzQ3NSw3IEBACiAJICogRXhhbWluZSB0aGUgbGFyZ2Uvc21hbGwgYml0IGluIHRoZSByZXNvdXJjZSBoZWFkZXIKIAkgKi8KIAlpZiAoQUNQSV9HRVQ4KGFtbCkgJiBBQ1BJX1JFU09VUkNFX05BTUVfTEFSR0UpIHsKKwogCQkvKiBMYXJnZSBSZXNvdXJjZSBUeXBlIC0tIGJpdHMgNjowIGNvbnRhaW4gdGhlIG5hbWUgKi8KIAogCQlyZXR1cm4gKEFDUElfR0VUOChhbWwpKTsKQEAgLTQxMSw2ICs1MTEsNyBAQAogCSAqIEV4YW1pbmUgdGhlIGxhcmdlL3NtYWxsIGJpdCBpbiB0aGUgcmVzb3VyY2UgaGVhZGVyCiAJICovCiAJaWYgKEFDUElfR0VUOChhbWwpICYgQUNQSV9SRVNPVVJDRV9OQU1FX0xBUkdFKSB7CisKIAkJLyogTGFyZ2UgUmVzb3VyY2UgdHlwZSAtLSBieXRlcyAxLTIgY29udGFpbiB0aGUgMTYtYml0IGxlbmd0aCAqLwogCiAJCUFDUElfTU9WRV8xNl9UT18xNigmcmVzb3VyY2VfbGVuZ3RoLCBBQ1BJX0FERF9QVFIodTgsIGFtbCwgMSkpOwpAQCAtNDk1LDYwICs1OTYsMjEgQEAKIAkJCSAgICAgdTggKiogZW5kX3RhZykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTggKmFtbDsKLQl1OCAqZW5kX2FtbDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2dldF9yZXNvdXJjZV9lbmRfdGFnIik7Ci0KLQkvKiBHZXQgc3RhcnQgYW5kIGVuZCBwb2ludGVycyAqLwotCi0JYW1sID0gb2JqX2Rlc2MtPmJ1ZmZlci5wb2ludGVyOwotCWVuZF9hbWwgPSBhbWwgKyBvYmpfZGVzYy0+YnVmZmVyLmxlbmd0aDsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2dldF9yZXNvdXJjZV9lbmRfdGFnKTsKIAogCS8qIEFsbG93IGEgYnVmZmVyIGxlbmd0aCBvZiB6ZXJvICovCiAKIAlpZiAoIW9ial9kZXNjLT5idWZmZXIubGVuZ3RoKSB7Ci0JCSplbmRfdGFnID0gYW1sOworCQkqZW5kX3RhZyA9IG9ial9kZXNjLT5idWZmZXIucG9pbnRlcjsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAl9CiAKLQkvKiBXYWxrIHRoZSByZXNvdXJjZSB0ZW1wbGF0ZSwgb25lIGRlc2NyaXB0b3IgcGVyIGl0ZXJhdGlvbiAqLworCS8qIFZhbGlkYXRlIHRoZSB0ZW1wbGF0ZSBhbmQgZ2V0IGEgcG9pbnRlciB0byB0aGUgZW5kX3RhZyAqLwogCi0Jd2hpbGUgKGFtbCA8IGVuZF9hbWwpIHsKLQkJLyogVmFsaWRhdGUgdGhlIFJlc291cmNlIFR5cGUgYW5kIFJlc291cmNlIExlbmd0aCAqLworCXN0YXR1cyA9IGFjcGlfdXRfd2Fsa19hbWxfcmVzb3VyY2VzKG9ial9kZXNjLT5idWZmZXIucG9pbnRlciwKKwkJCQkJICAgIG9ial9kZXNjLT5idWZmZXIubGVuZ3RoLCBOVUxMLAorCQkJCQkgICAgKHZvaWQgKiopZW5kX3RhZyk7CiAKLQkJc3RhdHVzID0gYWNwaV91dF92YWxpZGF0ZV9yZXNvdXJjZShhbWwsIE5VTEwpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQl9Ci0KLQkJLyogZW5kX3RhZyByZXNvdXJjZSBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UgdGVtcGxhdGUgKi8KLQotCQlpZiAoYWNwaV91dF9nZXRfcmVzb3VyY2VfdHlwZShhbWwpID09Ci0JCSAgICBBQ1BJX1JFU09VUkNFX05BTUVfRU5EX1RBRykgewotCQkJLyoKLQkJCSAqIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIG1vcmUgYnl0ZSBpbiB0aGUgYnVmZmVyIGZvcgotCQkJICogdGhlIDJuZCBieXRlIG9mIHRoZSBlbmRfdGFnCi0JCQkgKi8KLQkJCWlmICgoYW1sICsgMSkgPj0gZW5kX2FtbCkgewotCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTk9fUkVTT1VSQ0VfRU5EX1RBRyk7Ci0JCQl9Ci0KLQkJCS8qIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgZW5kX3RhZyAqLwotCi0JCQkqZW5kX3RhZyA9IGFtbDsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci0JCX0KLQotCQkvKgotCQkgKiBQb2ludCB0byB0aGUgbmV4dCByZXNvdXJjZSBkZXNjcmlwdG9yIGluIHRoZSBBTUwgYnVmZmVyLiBUaGUKLQkJICogZGVzY3JpcHRvciBsZW5ndGggaXMgZ3VhcmFudGVlZCB0byBiZSBub24temVybyBieSByZXNvdXJjZQotCQkgKiB2YWxpZGF0aW9uIGFib3ZlLgotCQkgKi8KLQkJYW1sICs9IGFjcGlfdXRfZ2V0X2Rlc2NyaXB0b3JfbGVuZ3RoKGFtbCk7Ci0JfQotCi0JLyogRGlkIG5vdCBmaW5kIGFuIGVuZF90YWcgcmVzb3VyY2UgZGVzY3JpcHRvciAqLwotCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9OT19SRVNPVVJDRV9FTkRfVEFHKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRzdGF0ZS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHN0YXRlLmMKaW5kZXggNGIxMzRhNy4uMGY1YzViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHN0YXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHN0YXRlLmMKQEAgLTk2LDcgKzk2LDcgQEAKIGFjcGlfdXRfcHVzaF9nZW5lcmljX3N0YXRlKHVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqKmxpc3RfaGVhZCwKIAkJCSAgIHVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfcHVzaF9nZW5lcmljX3N0YXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9wdXNoX2dlbmVyaWNfc3RhdGUpOwogCiAJLyogUHVzaCB0aGUgc3RhdGUgb2JqZWN0IG9udG8gdGhlIGZyb250IG9mIHRoZSBsaXN0IChzdGFjaykgKi8KIApAQCAtMTIzLDEyICsxMjMsMTMgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfcG9wX2dlbmVyaWNfc3RhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3BvcF9nZW5lcmljX3N0YXRlKTsKIAogCS8qIFJlbW92ZSB0aGUgc3RhdGUgb2JqZWN0IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IChzdGFjaykgKi8KIAogCXN0YXRlID0gKmxpc3RfaGVhZDsKIAlpZiAoc3RhdGUpIHsKKwogCQkvKiBVcGRhdGUgdGhlIGxpc3QgaGVhZCAqLwogCiAJCSpsaXN0X2hlYWQgPSBzdGF0ZS0+Y29tbW9uLm5leHQ7CkBAIC0xNTgsOSArMTU5LDEwIEBACiAKIAlzdGF0ZSA9IGFjcGlfb3NfYWNxdWlyZV9vYmplY3QoYWNwaV9nYmxfc3RhdGVfY2FjaGUpOwogCWlmIChzdGF0ZSkgeworCiAJCS8qIEluaXRpYWxpemUgKi8KIAkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YodW5pb24gYWNwaV9nZW5lcmljX3N0YXRlKSk7Ci0JCXN0YXRlLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEU7CisJCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEU7CiAJfQogCiAJcmV0dXJuIChzdGF0ZSk7CkBAIC0xODMsNyArMTg1LDcgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY3JlYXRlX3RocmVhZF9zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY3JlYXRlX3RocmVhZF9zdGF0ZSk7CiAKIAkvKiBDcmVhdGUgdGhlIGdlbmVyaWMgc3RhdGUgb2JqZWN0ICovCiAKQEAgLTE5NCw3ICsxOTYsNyBAQAogCiAJLyogSW5pdCBmaWVsZHMgc3BlY2lmaWMgdG8gdGhlIHVwZGF0ZSBzdHJ1Y3QgKi8KIAotCXN0YXRlLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfVEhSRUFEOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfVEhSRUFEOwogCXN0YXRlLT50aHJlYWQudGhyZWFkX2lkID0gYWNwaV9vc19nZXRfdGhyZWFkX2lkKCk7CiAKIAlyZXR1cm5fUFRSKChzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKilzdGF0ZSk7CkBAIC0yMjAsNyArMjIyLDcgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X2NyZWF0ZV91cGRhdGVfc3RhdGUiLCBvYmplY3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHV0X2NyZWF0ZV91cGRhdGVfc3RhdGUsIG9iamVjdCk7CiAKIAkvKiBDcmVhdGUgdGhlIGdlbmVyaWMgc3RhdGUgb2JqZWN0ICovCiAKQEAgLTIzMSw3ICsyMzMsNyBAQAogCiAJLyogSW5pdCBmaWVsZHMgc3BlY2lmaWMgdG8gdGhlIHVwZGF0ZSBzdHJ1Y3QgKi8KIAotCXN0YXRlLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfVVBEQVRFOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfVVBEQVRFOwogCXN0YXRlLT51cGRhdGUub2JqZWN0ID0gb2JqZWN0OwogCXN0YXRlLT51cGRhdGUudmFsdWUgPSBhY3Rpb247CiAKQEAgLTI1Nyw3ICsyNTksNyBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfY3JlYXRlX3BrZ19zdGF0ZSIsIGludGVybmFsX29iamVjdCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIodXRfY3JlYXRlX3BrZ19zdGF0ZSwgaW50ZXJuYWxfb2JqZWN0KTsKIAogCS8qIENyZWF0ZSB0aGUgZ2VuZXJpYyBzdGF0ZSBvYmplY3QgKi8KIApAQCAtMjY4LDcgKzI3MCw3IEBACiAKIAkvKiBJbml0IGZpZWxkcyBzcGVjaWZpYyB0byB0aGUgdXBkYXRlIHN0cnVjdCAqLwogCi0Jc3RhdGUtPmNvbW1vbi5kYXRhX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9QQUNLQUdFOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfUEFDS0FHRTsKIAlzdGF0ZS0+cGtnLnNvdXJjZV9vYmplY3QgPSAodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKWludGVybmFsX29iamVjdDsKIAlzdGF0ZS0+cGtnLmRlc3Rfb2JqZWN0ID0gZXh0ZXJuYWxfb2JqZWN0OwogCXN0YXRlLT5wa2cuaW5kZXggPSBpbmRleDsKQEAgLTI5NCw3ICsyOTYsNyBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9jcmVhdGVfY29udHJvbF9zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY3JlYXRlX2NvbnRyb2xfc3RhdGUpOwogCiAJLyogQ3JlYXRlIHRoZSBnZW5lcmljIHN0YXRlIG9iamVjdCAqLwogCkBAIC0zMDUsNyArMzA3LDcgQEAKIAogCS8qIEluaXQgZmllbGRzIHNwZWNpZmljIHRvIHRoZSBjb250cm9sIHN0cnVjdCAqLwogCi0Jc3RhdGUtPmNvbW1vbi5kYXRhX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9DT05UUk9MOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfQ09OVFJPTDsKIAlzdGF0ZS0+Y29tbW9uLnN0YXRlID0gQUNQSV9DT05UUk9MX0NPTkRJVElPTkFMX0VYRUNVVElORzsKIAogCXJldHVybl9QVFIoc3RhdGUpOwpAQCAtMzE5LDE1ICszMjEsMTkgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKLSAqIERFU0NSSVBUSU9OOiBQdXQgYSBzdGF0ZSBvYmplY3QgYmFjayBpbnRvIHRoZSBnbG9iYWwgc3RhdGUgY2FjaGUuICBUaGUgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgaXMgbm90IGFjdHVhbGx5IGZyZWVkIGF0IHRoaXMgdGltZS4KKyAqIERFU0NSSVBUSU9OOiBSZWxlYXNlIGEgc3RhdGUgb2JqZWN0IHRvIHRoZSBzdGF0ZSBjYWNoZS4gTlVMTCBzdGF0ZSBvYmplY3RzCisgKiAgICAgICAgICAgICAgYXJlIGlnbm9yZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdm9pZCBhY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKHVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZGVsZXRlX2dlbmVyaWNfc3RhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKTsKIAotCSh2b2lkKWFjcGlfb3NfcmVsZWFzZV9vYmplY3QoYWNwaV9nYmxfc3RhdGVfY2FjaGUsIHN0YXRlKTsKKwkvKiBJZ25vcmUgbnVsbCBzdGF0ZSAqLworCisJaWYgKHN0YXRlKSB7CisJCSh2b2lkKWFjcGlfb3NfcmVsZWFzZV9vYmplY3QoYWNwaV9nYmxfc3RhdGVfY2FjaGUsIHN0YXRlKTsKKwl9CiAJcmV0dXJuX1ZPSUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXR4ZmFjZS5jCmluZGV4IDMwOGE5NjAuLjM1MzhmNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXR4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXR4ZmFjZS5jCkBAIC00MSw4ICs0MSw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY2V2ZW50cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KQEAgLTY3LDcgKzY1LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luaXRpYWxpemVfc3Vic3lzdGVtIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2luaXRpYWxpemVfc3Vic3lzdGVtKTsKIAogCUFDUElfREVCVUdfRVhFQyhhY3BpX3V0X2luaXRfc3RhY2tfcHRyX3RyYWNlKCkpOwogCkBAIC0xMDksNiArMTA3LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5pdGlhbGl6ZV9zdWJzeXN0ZW0pCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZW5hYmxlX3N1YnN5c3RlbQpAQCAtMTIxLDEyICsxMjEsMTEgQEAKICAqICAgICAgICAgICAgICBQdXRzIHN5c3RlbSBpbnRvIEFDUEkgbW9kZSBpZiBpdCBpc24ndCBhbHJlYWR5LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX3N1YnN5c3RlbSh1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VuYWJsZV9zdWJzeXN0ZW0iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW5hYmxlX3N1YnN5c3RlbSk7CiAKIAkvKgogCSAqIFdlIG11c3QgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgYmVmb3JlIHdlIGNhbiBlbmFibGUgQUNQSS4KQEAgLTE1Miw3ICsxNTEsNyBAQAogCiAJCXN0YXR1cyA9IGFjcGlfZW5hYmxlKCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiYWNwaV9lbmFibGUgZmFpbGVkIikpOworCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiQWNwaUVuYWJsZSBmYWlsZWQiKSk7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCX0KQEAgLTIyOSw2ICsyMjgsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfc3Vic3lzdGVtKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2luaXRpYWxpemVfb2JqZWN0cwpAQCAtMjQxLDEyICsyNDIsMTEgQEAKICAqICAgICAgICAgICAgICBvYmplY3RzIGFuZCBleGVjdXRpbmcgQU1MIGNvZGUgZm9yIFJlZ2lvbnMsIGJ1ZmZlcnMsIGV0Yy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2luaXRpYWxpemVfb2JqZWN0cyh1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luaXRpYWxpemVfb2JqZWN0cyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9pbml0aWFsaXplX29iamVjdHMpOwogCiAJLyoKIAkgKiBSdW4gYWxsIF9SRUcgbWV0aG9kcwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJICovCiAJaWYgKCEoZmxhZ3MgJiBBQ1BJX05PX0FERFJFU1NfU1BBQ0VfSU5JVCkpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCSAgIltJbml0XSBFeGVjdXRpbmcgX1JFRyBvcF9yZWdpb24gbWV0aG9kc1xuIikpOworCQkJCSAgIltJbml0XSBFeGVjdXRpbmcgX1JFRyBPcFJlZ2lvbiBtZXRob2RzXG4iKSk7CiAKIAkJc3RhdHVzID0gYWNwaV9ldl9pbml0aWFsaXplX29wX3JlZ2lvbnMoKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC0zMDUsNiArMzA1LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5pdGlhbGl6ZV9vYmplY3RzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3Rlcm1pbmF0ZQpAQCAtMzE2LDEyICszMTgsMTEgQEAKICAqIERFU0NSSVBUSU9OOiBTaHV0ZG93biB0aGUgQUNQSSBzdWJzeXN0ZW0uICBSZWxlYXNlIGFsbCByZXNvdXJjZXMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV90ZXJtaW5hdGUodm9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Rlcm1pbmF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV90ZXJtaW5hdGUpOwogCiAJLyogVGVybWluYXRlIHRoZSBBTUwgRGVidWdnZXIgaWYgcHJlc2VudCAqLwogCkBAIC0zNDgsNiArMzQ5LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfdGVybWluYXRlKQorCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzYyLDcgKzM2NSw2IEBACiAgKiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfc3Vic3lzdGVtX3N0YXR1cyh2b2lkKQogewogCkBAIC0zNzMsNiArMzc1LDggQEAKIAl9CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3N1YnN5c3RlbV9zdGF0dXMpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3N5c3RlbV9pbmZvCkBAIC0zOTAsMTQgKzM5NCwxMyBAQAogICogICAgICAgICAgICAgIGFuZCB0aGUgdmFsdWUgb2Ygb3V0X2J1ZmZlciBpcyB1bmRlZmluZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9nZXRfc3lzdGVtX2luZm8oc3RydWN0IGFjcGlfYnVmZmVyICogb3V0X2J1ZmZlcikKIHsKIAlzdHJ1Y3QgYWNwaV9zeXN0ZW1faW5mbyAqaW5mb19wdHI7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfc3lzdGVtX2luZm8iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3N5c3RlbV9pbmZvKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTQ0OCwxNSArNDUxLDE1IEBACiAKIAkvKiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgQUNQSSB0YWJsZXMsIHBlciB0YWJsZSB0eXBlICovCiAKLQlpbmZvX3B0ci0+bnVtX3RhYmxlX3R5cGVzID0gTlVNX0FDUElfVEFCTEVfVFlQRVM7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9BQ1BJX1RBQkxFX1RZUEVTOyBpKyspIHsKKwlpbmZvX3B0ci0+bnVtX3RhYmxlX3R5cGVzID0gQUNQSV9UQUJMRV9JRF9NQVggKyAxOworCWZvciAoaSA9IDA7IGkgPCAoQUNQSV9UQUJMRV9JRF9NQVggKyAxKTsgaSsrKSB7CiAJCWluZm9fcHRyLT50YWJsZV9pbmZvW2ldLmNvdW50ID0gYWNwaV9nYmxfdGFibGVfbGlzdHNbaV0uY291bnQ7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9zeXN0ZW1faW5mbyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfc3lzdGVtX2luZm8pCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQ3Miw3ICs0NzUsNiBAQAogICogVEJEOiBXaGVuIGEgc2Vjb25kIGZ1bmN0aW9uIGlzIGFkZGVkLCBtdXN0IHNhdmUgdGhlIEZ1bmN0aW9uIGFsc28uCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2luc3RhbGxfaW5pdGlhbGl6YXRpb25faGFuZGxlcihhY3BpX2luaXRfaGFuZGxlciBoYW5kbGVyLCB1MzIgZnVuY3Rpb24pCiB7CkBAIC00ODksNiArNDkxLDcgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfaW5pdGlhbGl6YXRpb25faGFuZGxlcikKICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTAyLDEwICs1MDUsOSBAQAogICogREVTQ1JJUFRJT046IEVtcHR5IGFsbCBjYWNoZXMgKGRlbGV0ZSB0aGUgY2FjaGVkIG9iamVjdHMpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfcHVyZ2VfY2FjaGVkX29iamVjdHModm9pZCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3B1cmdlX2NhY2hlZF9vYmplY3RzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3B1cmdlX2NhY2hlZF9vYmplY3RzKTsKIAogCSh2b2lkKWFjcGlfb3NfcHVyZ2VfY2FjaGUoYWNwaV9nYmxfc3RhdGVfY2FjaGUpOwogCSh2b2lkKWFjcGlfb3NfcHVyZ2VfY2FjaGUoYWNwaV9nYmxfb3BlcmFuZF9jYWNoZSk7CkBAIC01MTMsMyArNTE1LDUgQEAKIAkodm9pZClhY3BpX29zX3B1cmdlX2NhY2hlKGFjcGlfZ2JsX3BzX25vZGVfZXh0X2NhY2hlKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQorCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9wdXJnZV9jYWNoZWRfb2JqZWN0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA0ODcxOGI3Li43NjY1NmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC0xODgsNiArMTg4LDExIEBACiAJCXVwKCZkZXYtPnNlbSk7CiAJCWlmIChkZXYtPnBhcmVudCkKIAkJCXVwKCZkZXYtPnBhcmVudC0+c2VtKTsKKworCQlpZiAoZXJyID4gMCkgCQkvKiBzdWNjZXNzICovCisJCQllcnIgPSBjb3VudDsKKwkJZWxzZSBpZiAoZXJyID09IDApCS8qIGRyaXZlciBkaWRuJ3QgYWNjZXB0IGRldmljZSAqLworCQkJZXJyID0gLUVOT0RFVjsKIAl9CiAJcHV0X2RldmljZShkZXYpOwogCXB1dF9idXMoYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKaW5kZXggZGY3ZmRhYi4uYjFlYTRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKQEAgLTQ1Niw2ICs0NTYsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgY2xhc3NfZGV2aWNlX2FkZF9ncm91cHMoc3RydWN0IGNsYXNzX2RldmljZSAqIGNkKQoreworCWludCBpOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoY2QtPmdyb3VwcykgeworCQlmb3IgKGkgPSAwOyBjZC0+Z3JvdXBzW2ldOyBpKyspIHsKKwkJCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjZC0+a29iaiwgY2QtPmdyb3Vwc1tpXSk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQl3aGlsZSAoLS1pID49IDApCisJCQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2QtPmtvYmosIGNkLT5ncm91cHNbaV0pOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgY2xhc3NfZGV2aWNlX3JlbW92ZV9ncm91cHMoc3RydWN0IGNsYXNzX2RldmljZSAqIGNkKQoreworCWludCBpOworCWlmIChjZC0+Z3JvdXBzKSB7CisJCWZvciAoaSA9IDA7IGNkLT5ncm91cHNbaV07IGkrKykgeworCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjZC0+a29iaiwgY2QtPmdyb3Vwc1tpXSk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfZGV2KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQogewogCXJldHVybiBwcmludF9kZXZfdChidWYsIGNsYXNzX2Rldi0+ZGV2dCk7CkBAIC01NTksMTcgKzU4OCwxOCBAQAogCQkJCSAgY2xhc3NfbmFtZSk7CiAJfQogCisJY2xhc3NfZGV2aWNlX2FkZF9ncm91cHMoY2xhc3NfZGV2KTsKKwogCWtvYmplY3RfdWV2ZW50KCZjbGFzc19kZXYtPmtvYmosIEtPQkpfQUREKTsKIAogCS8qIG5vdGlmeSBhbnkgaW50ZXJmYWNlcyB0aGlzIGRldmljZSBpcyBub3cgaGVyZSAqLwotCWlmIChwYXJlbnRfY2xhc3MpIHsKLQkJZG93bigmcGFyZW50X2NsYXNzLT5zZW0pOwotCQlsaXN0X2FkZF90YWlsKCZjbGFzc19kZXYtPm5vZGUsICZwYXJlbnRfY2xhc3MtPmNoaWxkcmVuKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzc19pbnRmLCAmcGFyZW50X2NsYXNzLT5pbnRlcmZhY2VzLCBub2RlKQotCQkJaWYgKGNsYXNzX2ludGYtPmFkZCkKLQkJCQljbGFzc19pbnRmLT5hZGQoY2xhc3NfZGV2LCBjbGFzc19pbnRmKTsKLQkJdXAoJnBhcmVudF9jbGFzcy0+c2VtKTsKKwlkb3duKCZwYXJlbnRfY2xhc3MtPnNlbSk7CisJbGlzdF9hZGRfdGFpbCgmY2xhc3NfZGV2LT5ub2RlLCAmcGFyZW50X2NsYXNzLT5jaGlsZHJlbik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzc19pbnRmLCAmcGFyZW50X2NsYXNzLT5pbnRlcmZhY2VzLCBub2RlKSB7CisJCWlmIChjbGFzc19pbnRmLT5hZGQpCisJCQljbGFzc19pbnRmLT5hZGQoY2xhc3NfZGV2LCBjbGFzc19pbnRmKTsKIAl9CisJdXAoJnBhcmVudF9jbGFzcy0+c2VtKTsKIAogIHJlZ2lzdGVyX2RvbmU6CiAJaWYgKGVycm9yKSB7CkBAIC02NzMsNiArNzAzLDcgQEAKIAlpZiAoY2xhc3NfZGV2LT5kZXZ0X2F0dHIpCiAJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGFzc19kZXYsIGNsYXNzX2Rldi0+ZGV2dF9hdHRyKTsKIAljbGFzc19kZXZpY2VfcmVtb3ZlX2F0dHJzKGNsYXNzX2Rldik7CisJY2xhc3NfZGV2aWNlX3JlbW92ZV9ncm91cHMoY2xhc3NfZGV2KTsKIAogCWtvYmplY3RfdWV2ZW50KCZjbGFzc19kZXYtPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlrb2JqZWN0X2RlbCgmY2xhc3NfZGV2LT5rb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggNzMwYTljZS4uODg5YzcxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5rb2JqLCAiZHJpdmVyIik7CiAJCWtsaXN0X3JlbW92ZSgmZGV2LT5rbm9kZV9kcml2ZXIpOwogCi0JCWlmIChkZXYtPmJ1cy0+cmVtb3ZlKQorCQlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnJlbW92ZSkKIAkJCWRldi0+YnVzLT5yZW1vdmUoZGV2KTsKIAkJZWxzZSBpZiAoZHJ2LT5yZW1vdmUpCiAJCQlkcnYtPnJlbW92ZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCA0NzIzMTgyLi4wYzk5YWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtODYsMTggKzg2LDkgQEAKIHN0YXRpYyBDTEFTU19BVFRSKHRpbWVvdXQsIDA2NDQsIGZpcm13YXJlX3RpbWVvdXRfc2hvdywgZmlybXdhcmVfdGltZW91dF9zdG9yZSk7CiAKIHN0YXRpYyB2b2lkICBmd19jbGFzc19kZXZfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpOwotaW50IGZpcm13YXJlX2NsYXNzX3VldmVudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLAotCQkJICAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3MgZmlybXdhcmVfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImZpcm13YXJlIiwKLQkudWV2ZW50CT0gZmlybXdhcmVfY2xhc3NfdWV2ZW50LAotCS5yZWxlYXNlCT0gZndfY2xhc3NfZGV2X3JlbGVhc2UsCi19OwotCi1pbnQKLWZpcm13YXJlX2NsYXNzX3VldmVudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKiplbnZwLAotCQkgICAgICAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3N0YXRpYyBpbnQgZmlybXdhcmVfY2xhc3NfdWV2ZW50KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqKmVudnAsCisJCQkJIGludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCiB7CiAJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOwogCWludCBpID0gMCwgbGVuID0gMDsKQEAgLTExNiw2ICsxMDcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBjbGFzcyBmaXJtd2FyZV9jbGFzcyA9IHsKKwkubmFtZQkJPSAiZmlybXdhcmUiLAorCS51ZXZlbnQJCT0gZmlybXdhcmVfY2xhc3NfdWV2ZW50LAorCS5yZWxlYXNlCT0gZndfY2xhc3NfZGV2X3JlbGVhc2UsCit9OworCiBzdGF0aWMgc3NpemVfdAogZmlybXdhcmVfbG9hZGluZ19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQogewpAQCAtNDkzLDI1ICs0OTAsNiBAQAogCX0KIH0KIAotLyoqCi0gKiByZWdpc3Rlcl9maXJtd2FyZTogLSBwcm92aWRlIGEgZmlybXdhcmUgaW1hZ2UgZm9yIGxhdGVyIHVzYWdlCi0gKiBAbmFtZTogbmFtZSBvZiBmaXJtd2FyZSBpbWFnZSBmaWxlCi0gKiBAZGF0YTogYnVmZmVyIHBvaW50ZXIgZm9yIHRoZSBmaXJtd2FyZSBpbWFnZQotICogQHNpemU6IHNpemUgb2YgdGhlIGRhdGEgYnVmZmVyIGFyZWEKLSAqCi0gKglNYWtlIHN1cmUgdGhhdCBAZGF0YSB3aWxsIGJlIGF2YWlsYWJsZSBieSByZXF1ZXN0aW5nIGZpcm13YXJlIEBuYW1lLgotICoKLSAqCU5vdGU6IFRoaXMgd2lsbCBub3QgYmUgcG9zc2libGUgdW50aWwgc29tZSBraW5kIG9mIHBlcnNpc3RlbmNlCi0gKglpcyBhdmFpbGFibGUuCi0gKiovCi12b2lkCi1yZWdpc3Rlcl9maXJtd2FyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0JLyogVGhpcyBpcyBtZWFuaW5nbGVzcyB3aXRob3V0IGZpcm13YXJlIGNhY2hpbmcsIHNvIHVudGlsIHdlCi0JICogZGVjaWRlIGlmIGZpcm13YXJlIGNhY2hpbmcgaXMgcmVhc29uYWJsZSBqdXN0IGxlYXZlIGl0IGFzIGEKLQkgKiBub29wICovCi19Ci0KIC8qIEFzeW5jIHN1cHBvcnQgKi8KIHN0cnVjdCBmaXJtd2FyZV93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKQEAgLTYzMCw0ICs2MDgsMyBAQAogRVhQT1JUX1NZTUJPTChyZWxlYXNlX2Zpcm13YXJlKTsKIEVYUE9SVF9TWU1CT0wocmVxdWVzdF9maXJtd2FyZSk7CiBFWFBPUlRfU1lNQk9MKHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KTsKLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZmlybXdhcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggMTZjNTEzYS4uYzgwYzNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlvdGhlcl9ub2RlID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKIAkJc3RydWN0IHpvbmUgKnogPSAmcGctPm5vZGVfem9uZXNbaV07Ci0JCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzID0gem9uZV9wY3AoeixjcHUpOwogCQkJbnVtYV9oaXQgKz0gcHMtPm51bWFfaGl0OwogCQkJbnVtYV9taXNzICs9IHBzLT5udW1hX21pc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3VzcGVuZC5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N1c3BlbmQuYwppbmRleCBiZGI2MDY2Li4yYTc2OWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3VzcGVuZC5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zdXNwZW5kLmMKQEAgLTgsOCArOCw5IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKICNpbmNsdWRlICJwb3dlci5oIgogCkBAIC01OCwxMSArNTksMTMgQEAKIAlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnN1c3BlbmQgJiYgIWRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQpIHsKIAkJZGV2X2RiZyhkZXYsICJzdXNwZW5kaW5nXG4iKTsKIAkJZXJyb3IgPSBkZXYtPmJ1cy0+c3VzcGVuZChkZXYsIHN0YXRlKTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+YnVzLT5zdXNwZW5kLCBlcnJvcik7CiAJfQogCXVwKCZkZXYtPnNlbSk7CiAJcmV0dXJuIGVycm9yOwogfQogCisKIC8qKgogICoJZGV2aWNlX3N1c3BlbmQgLSBTYXZlIHN0YXRlIGFuZCBzdG9wIGFsbCBkZXZpY2VzIGluIHN5c3RlbS4KICAqCUBzdGF0ZToJCVBvd2VyIHN0YXRlIHRvIHB1dCBlYWNoIGRldmljZSBpbi4KQEAgLTgyLDkgKzg1LDYgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKCFpc19jb25zb2xlX3N1c3BlbmRfc2FmZSgpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWRvd24oJmRwbV9zZW0pOwogCWRvd24oJmRwbV9saXN0X3NlbSk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fYWN0aXZlKSAmJiBlcnJvciA9PSAwKSB7CkBAIC0xNjksMyArMTY5LDEyIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wb3dlcl9kb3duKTsKIAordm9pZCBfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChjb25zdCBjaGFyICpmdW5jdGlvbiwgdm9pZCAqZm4sIGludCByZXQpCit7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6ICIsIGZ1bmN0aW9uKTsKKwkJcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woIiVzKCkgcmV0dXJucyAiLCAodW5zaWduZWQgbG9uZylmbik7CisJCXByaW50aygiJWRcbiIsIHJldCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMgYi9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYwppbmRleCA5MTU4MTBmLi44YzUyNDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYworKysgYi9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IHRvcG9sb2d5X2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKK3N0YXRpYyBpbnQgdG9wb2xvZ3lfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKaW5kZXggYjZlMjkwOS4uMmE4YWY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKQEAgLTE4NTAsNiArMTg1MCw3IEBACiAJCXJldHVybiAwOwogCXByaW50ayAoS0VSTl9JTkZPICJhbWlmbG9wOiBTZXR0aW5nIGRlZmF1bHQgZGYwIHRvICV4XG4iLCBuKTsKIAlmZF9kZWZfZGYwID0gbjsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgiZmxvcHB5PSIsIGFtaWdhX2Zsb3BweV9zZXR1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggMWIwZmQzMS4uMTMxOWQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtMTE4MCw2ICsxMTgwLDUzIEBACiAgICAgICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY29tcGxldGVfYnVmZmVycyhzdHJ1Y3QgYmlvICpiaW8sIGludCBzdGF0dXMpCit7CisJd2hpbGUgKGJpbykgeworCQlzdHJ1Y3QgYmlvICp4YmggPSBiaW8tPmJpX25leHQ7CisJCWludCBucl9zZWN0b3JzID0gYmlvX3NlY3RvcnMoYmlvKTsKKworCQliaW8tPmJpX25leHQgPSBOVUxMOworCQlibGtfZmluaXNoZWRfaW8obGVuKTsKKwkJYmlvX2VuZGlvKGJpbywgbnJfc2VjdG9ycyA8PCA5LCBzdGF0dXMgPyAwIDogLUVJTyk7CisJCWJpbyA9IHhiaDsKKwl9CisKK30KKworc3RhdGljIHZvaWQgY2Npc3Nfc29mdGlycV9kb25lKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlDb21tYW5kTGlzdF9zdHJ1Y3QgKmNtZCA9IHJxLT5jb21wbGV0aW9uX2RhdGE7CisJY3Rscl9pbmZvX3QgKmggPSBoYmFbY21kLT5jdGxyXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NGJpdCB0ZW1wNjQ7CisJaW50IGksIGRkaXI7CisKKwlpZiAoY21kLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID09IFhGRVJfUkVBRCkKKwkJZGRpciA9IFBDSV9ETUFfRlJPTURFVklDRTsKKwllbHNlCisJCWRkaXIgPSBQQ0lfRE1BX1RPREVWSUNFOworCisJLyogY29tbWFuZCBkaWQgbm90IG5lZWQgdG8gYmUgcmV0cmllZCAqLworCS8qIHVubWFwIHRoZSBETUEgbWFwcGluZyBmb3IgYWxsIHRoZSBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyAqLworCWZvcihpPTA7IGk8Y21kLT5IZWFkZXIuU0dMaXN0OyBpKyspIHsKKwkJdGVtcDY0LnZhbDMyLmxvd2VyID0gY21kLT5TR1tpXS5BZGRyLmxvd2VyOworCQl0ZW1wNjQudmFsMzIudXBwZXIgPSBjbWQtPlNHW2ldLkFkZHIudXBwZXI7CisJCXBjaV91bm1hcF9wYWdlKGgtPnBkZXYsIHRlbXA2NC52YWwsIGNtZC0+U0dbaV0uTGVuLCBkZGlyKTsKKwl9CisKKwljb21wbGV0ZV9idWZmZXJzKHJxLT5iaW8sIHJxLT5lcnJvcnMpOworCisjaWZkZWYgQ0NJU1NfREVCVUcKKwlwcmludGsoIkRvbmUgd2l0aCAlcFxuIiwgcnEpOworI2VuZGlmIC8qIENDSVNTX0RFQlVHICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSwgcnEtPmVycm9ycyk7CisJY21kX2ZyZWUoaCwgY21kLDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKK30KKwogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIHRoZSB1c2FnZV9jb3VudCBvZiB0aGUgZHJpdmUgdG8gYmUgdXBkYXRlZC9hZGRlZC4KICAqIElmIHRoZSB1c2FnZV9jb3VudCBpcyB6ZXJvIHRoZW4gdGhlIGRyaXZlIGluZm9ybWF0aW9uIHdpbGwgYmUgdXBkYXRlZCBhbmQKICAqIHRoZSBkaXNrIHdpbGwgYmUgcmUtcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWwuICBJZiBub3QgdGhlbiBpdCB3aWxsIGJlCkBAIC0xMjQ4LDYgKzEyOTUsOCBAQAogCiAJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkaXNrLT5xdWV1ZSwgNTEyKTsKIAorCQlibGtfcXVldWVfc29mdGlycV9kb25lKGRpc2stPnF1ZXVlLCBjY2lzc19zb2Z0aXJxX2RvbmUpOworCiAJCWRpc2stPnF1ZXVlLT5xdWV1ZWRhdGEgPSBoYmFbY3Rscl07CiAKIAkJYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUoZGlzay0+cXVldWUsCkBAIC0yMTQ3LDIwICsyMTk2LDYgQEAKIAkJYWRkUSAoJihoLT5jbXBRKSwgYyk7IAogCX0KIH0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbXBsZXRlX2J1ZmZlcnMoc3RydWN0IGJpbyAqYmlvLCBpbnQgc3RhdHVzKQotewotCXdoaWxlIChiaW8pIHsKLQkJc3RydWN0IGJpbyAqeGJoID0gYmlvLT5iaV9uZXh0OyAKLQkJaW50IG5yX3NlY3RvcnMgPSBiaW9fc2VjdG9ycyhiaW8pOwotCi0JCWJpby0+YmlfbmV4dCA9IE5VTEw7IAotCQlibGtfZmluaXNoZWRfaW8obGVuKTsKLQkJYmlvX2VuZGlvKGJpbywgbnJfc2VjdG9ycyA8PCA5LCBzdGF0dXMgPyAwIDogLUVJTyk7Ci0JCWJpbyA9IHhiaDsKLQl9Ci0KLX0gCiAvKiBBc3N1bWVzIHRoYXQgQ0NJU1NfTE9DSyhoLT5jdGxyKSBpcyBoZWxkLiAqLwogLyogWmVyb3Mgb3V0IHRoZSBlcnJvciByZWNvcmQgYW5kIHRoZW4gcmVzZW5kcyB0aGUgY29tbWFuZCBiYWNrICovCiAvKiB0byB0aGUgY29udHJvbGxlciAqLwpAQCAtMjE3OCwzOSArMjIxMyw2IEBACiAJc3RhcnRfaW8oaCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNjaXNzX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JQ29tbWFuZExpc3Rfc3RydWN0ICpjbWQgPSBycS0+Y29tcGxldGlvbl9kYXRhOwotCWN0bHJfaW5mb190ICpoID0gaGJhW2NtZC0+Y3Rscl07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1NjRiaXQgdGVtcDY0OwotCWludCBpLCBkZGlyOwotCi0JaWYgKGNtZC0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9PSBYRkVSX1JFQUQpCi0JCWRkaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7Ci0JZWxzZQotCQlkZGlyID0gUENJX0RNQV9UT0RFVklDRTsKLQotCS8qIGNvbW1hbmQgZGlkIG5vdCBuZWVkIHRvIGJlIHJldHJpZWQgKi8KLQkvKiB1bm1hcCB0aGUgRE1BIG1hcHBpbmcgZm9yIGFsbCB0aGUgc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgKi8KLQlmb3IoaT0wOyBpPGNtZC0+SGVhZGVyLlNHTGlzdDsgaSsrKSB7Ci0JCXRlbXA2NC52YWwzMi5sb3dlciA9IGNtZC0+U0dbaV0uQWRkci5sb3dlcjsKLQkJdGVtcDY0LnZhbDMyLnVwcGVyID0gY21kLT5TR1tpXS5BZGRyLnVwcGVyOwotCQlwY2lfdW5tYXBfcGFnZShoLT5wZGV2LCB0ZW1wNjQudmFsLCBjbWQtPlNHW2ldLkxlbiwgZGRpcik7Ci0JfQotCi0JY29tcGxldGVfYnVmZmVycyhycS0+YmlvLCBycS0+ZXJyb3JzKTsKLQotI2lmZGVmIENDSVNTX0RFQlVHCi0JcHJpbnRrKCJEb25lIHdpdGggJXBcbiIsIHJxKTsKLSNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLyAKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7Ci0JZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHJxLCBycS0+ZXJyb3JzKTsKLQljbWRfZnJlZShoLCBjbWQsMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotfQotCiAvKiBjaGVja3MgdGhlIHN0YXR1cyBvZiB0aGUgam9iIGFuZCBjYWxscyBjb21wbGV0ZSBidWZmZXJzIHRvIG1hcmsgYWxsIAogICogYnVmZmVycyBmb3IgdGhlIGNvbXBsZXRlZCBqb2IuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IG5lZWQKICAqIHRvIGhvbGQgdGhlIGhiYS9xdWV1ZSBsb2NrLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggYmVkYjY4OS4uZGZmMWU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC00MzAxLDcgKzQzMDEsNyBAQAogCX0KIAogCXVzZV92aXJ0dWFsX2RtYSA9IGNhbl91c2VfdmlydHVhbF9kbWEgJiAxOwotI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KQorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChGREMxKSkgewogCQlkZWxfdGltZXIoJmZkX3RpbWVvdXQpOwogCQllcnIgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IGY3MzQ0NmYuLmM2ODhjMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTUzNiw2ICs1MzYsOSBAQAogCQlrZnJlZShsdW4pOwogCX0KIAorCXVzYl9zZXRfaW50ZmRhdGEoc2MtPmludGYsIE5VTEwpOworCXVzYl9wdXRfaW50ZihzYy0+aW50Zik7CisJdXNiX3B1dF9kZXYoc2MtPmRldik7CiAJa2ZyZWUoc2MpOwogfQogCkBAIC0yMjIxLDcgKzIyMjQsMTIgQEAKIAkvLyBzYy0+aWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgc2MpOwogCXVzYl9nZXRfZGV2KHNjLT5kZXYpOwotCS8vIHVzYl9nZXRfaW50ZihzYy0+aW50Zik7CS8qIERvIHdlIG5lZWQgdGhpcz8gKi8KKwkvKgorCSAqIFNpbmNlIHdlIGdpdmUgdGhlIGludGVyZmFjZSBzdHJ1Y3QgdG8gdGhlIGJsb2NrIGxldmVsIHRocm91Z2gKKwkgKiBkaXNrLT5kcml2ZXJmc19kZXYsIHdlIGhhdmUgdG8gcGluIGl0LiBPdGhlcndpc2UsIGJsb2NrX3VldmVudAorCSAqIG9vcHNlcyBvbiBjbG9zZSBhZnRlciBhIGRpc2Nvbm5lY3QgKGtlcm5lbHMgMi42LjE2IGFuZCB1cCkuCisJICovCisJdXNiX2dldF9pbnRmKHNjLT5pbnRmKTsKIAogCXNucHJpbnRmKHNjLT5uYW1lLCAxMiwgRFJWX05BTUUgIiglZC4lZCkiLAogCSAgICBzYy0+ZGV2LT5idXMtPmJ1c251bSwgc2MtPmRldi0+ZGV2bnVtKTsKQEAgLTIyODYsNyArMjI5NCw3IEBACiAKIGVycl9kZXZfZGVzYzoKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCS8vIHVzYl9wdXRfaW50ZihzYy0+aW50Zik7CisJdXNiX3B1dF9pbnRmKHNjLT5pbnRmKTsKIAl1c2JfcHV0X2RldihzYy0+ZGV2KTsKIAlrZnJlZShzYyk7CiBlcnJfY29yZToKQEAgLTI0NjEsMTIgKzI0NjksNiBAQAogCSAqIGFuZCBubyBVUkJzIGxlZnQgaW4gdHJhbnNpdC4KIAkgKi8KIAotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JLy8gdXNiX3B1dF9pbnRmKHNjLT5pbnRmKTsKLQlzYy0+aW50ZiA9IE5VTEw7Ci0JdXNiX3B1dF9kZXYoc2MtPmRldik7Ci0Jc2MtPmRldiA9IE5VTEw7Ci0KIAl1Yl9wdXQoc2MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwppbmRleCA5ODg4YmMxLi40NzNhMTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCBibHVlY2FyZF9pbmZvX3QgewotCWRldl9saW5rX3QgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJZGV2X25vZGVfdCBub2RlOwogCiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CkBAIC04NSw4ICs4NSw4IEBACiB9IGJsdWVjYXJkX2luZm9fdDsKIAogCi1zdGF0aWMgdm9pZCBibHVlY2FyZF9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBibHVlY2FyZF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBibHVlY2FyZF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYmx1ZWNhcmRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB2b2lkIGJsdWVjYXJkX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCkBAIC0xNjIsNyArMTYyLDcgQEAKIHN0YXRpYyB2b2lkIGJsdWVjYXJkX2FjdGl2aXR5X2xlZF90aW1lb3V0KHVfbG9uZyBhcmcpCiB7CiAJYmx1ZWNhcmRfaW5mb190ICppbmZvID0gKGJsdWVjYXJkX2luZm9fdCAqKWFyZzsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlpZiAoIXRlc3RfYml0KENBUkRfSEFTX1BDQ0FSRF9JRCwgJihpbmZvLT5od19zdGF0ZSkpKQogCQlyZXR1cm47CkBAIC0xNzksNyArMTc5LDcgQEAKIAogc3RhdGljIHZvaWQgYmx1ZWNhcmRfZW5hYmxlX2FjdGl2aXR5X2xlZChibHVlY2FyZF9pbmZvX3QgKmluZm8pCiB7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCiAJaWYgKCF0ZXN0X2JpdChDQVJEX0hBU19QQ0NBUkRfSUQsICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJcmV0dXJuOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCQlyZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CiAJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVhZHlfYml0OwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAkJY2xlYXJfYml0KFhNSVRfV0FLRVVQLCAmKGluZm8tPnR4X3N0YXRlKSk7CiAKLQkJaWYgKCEoaW5mby0+bGluay5zdGF0ZSAmIERFVl9QUkVTRU5UKSkKKwkJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQoaW5mby0+cF9kZXYpKQogCQkJcmV0dXJuOwogCiAJCWlmICh0ZXN0X2JpdChYTUlUX0JVRkZFUl9OVU1CRVIsICYoaW5mby0+dHhfc3RhdGUpKSkgewpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb2Jhc2UgPSBpbmZvLT5saW5rLmlvLkJhc2VQb3J0MTsKKwlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCiAJaWYgKHRlc3RfYml0KFhNSVRfU0VORElOR19SRUFEWSwgJihpbmZvLT50eF9zdGF0ZSkpKQogCQlibHVlY2FyZF9lbmFibGVfYWN0aXZpdHlfbGVkKGluZm8pOwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJaWYgKCF0ZXN0X2JpdChDQVJEX1JFQURZLCAmKGluZm8tPmh3X3N0YXRlKSkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCWlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTYyNiw3ICs2MjYsNyBAQAogc3RhdGljIGludCBibHVlY2FyZF9oY2lfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSAoYmx1ZWNhcmRfaW5mb190ICopKGhkZXYtPmRyaXZlcl9kYXRhKTsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlpZiAodGVzdF9iaXQoQ0FSRF9IQVNfUENDQVJEX0lELCAmKGluZm8tPmh3X3N0YXRlKSkpCiAJCWJsdWVjYXJkX2hjaV9zZXRfYmF1ZF9yYXRlKGhkZXYsIERFRkFVTFRfQkFVRF9SQVRFKTsKQEAgLTY0Niw3ICs2NDYsNyBAQAogc3RhdGljIGludCBibHVlY2FyZF9oY2lfY2xvc2Uoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7CiAJYmx1ZWNhcmRfaW5mb190ICppbmZvID0gKGJsdWVjYXJkX2luZm9fdCAqKShoZGV2LT5kcml2ZXJfZGF0YSk7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1JVTk5JTkcsICYoaGRldi0+ZmxhZ3MpKSkKIAkJcmV0dXJuIDA7CkBAIC03MTMsNyArNzEzLDcgQEAKIAogc3RhdGljIGludCBibHVlY2FyZF9vcGVuKGJsdWVjYXJkX2luZm9fdCAqaW5mbykKIHsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAJdW5zaWduZWQgY2hhciBpZDsKIApAQCAtODMxLDcgKzgzMSw3IEBACiAKIHN0YXRpYyBpbnQgYmx1ZWNhcmRfY2xvc2UoYmx1ZWNhcmRfaW5mb190ICppbmZvKQogewotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5saW5rLmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGluZm8tPmhkZXY7CiAKIAlpZiAoIWhkZXYpCkBAIC04NTYsMTcgKzg1NiwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJsdWVjYXJkX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGJsdWVjYXJkX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWJsdWVjYXJkX2luZm9fdCAqaW5mbzsKLQlkZXZfbGlua190ICpsaW5rOwogCiAJLyogQ3JlYXRlIG5ldyBpbmZvIGRldmljZSAqLwogCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsaW5rID0gJmluZm8tPmxpbms7CisJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwogCiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKQEAgLTg3OCwzMiArODc3LDIyIEBACiAJbGluay0+aXJxLkluc3RhbmNlID0gaW5mbzsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCWJsdWVjYXJkX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBibHVlY2FyZF9jb25maWcobGluayk7CiB9CiAKIAotc3RhdGljIHZvaWQgYmx1ZWNhcmRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGJsdWVjYXJkX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJYmx1ZWNhcmRfcmVsZWFzZShsaW5rKTsKLQorCWJsdWVjYXJkX3JlbGVhc2UobGluayk7CiAJa2ZyZWUoaW5mbyk7CiB9CiAKIAotc3RhdGljIGludCBmaXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKIHsKIAlpbnQgaTsKIApAQCAtOTE4LDE0ICs5MDcsMTIgQEAKIAlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIHZvaWQgYmx1ZWNhcmRfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGJsdWVjYXJkX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCWJsdWVjYXJkX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJdHVwbGVfdCB0dXBsZTsKIAl1X3Nob3J0IGJ1ZlsyNTZdOwogCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY29uZmlnX2luZm9fdCBjb25maWc7CiAJaW50IGksIG4sIGxhc3RfcmV0LCBsYXN0X2ZuOwogCiAJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKQEAgLTkzNSw3ICs5MjIsNyBAQAogCiAJLyogR2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJbGFzdF9yZXQgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKIAkJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwpAQCAtOTQzLDM2ICs5MzAsMzEgQEAKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0JaSA9IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmZpZyk7Ci0JbGluay0+Y29uZi5WY2MgPSBjb25maWcuVmNjOwotCiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4MjA7CiAJbGluay0+aW8uTnVtUG9ydHMxID0gNjQ7CiAJbGluay0+aW8uSU9BZGRyTGluZXMgPSA2OwogCiAJZm9yIChuID0gMDsgbiA8IDB4NDAwOyBuICs9IDB4NDApIHsKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gbiBeIDB4MzAwOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCWJyZWFrOwogCX0KIAogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKLQlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElSUSwgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIAotCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtOTgwLDU3ICs5NjIsMjggQEAKIAkJZ290byBmYWlsZWQ7CiAKIAlzdHJjcHkoaW5mby0+bm9kZS5kZXZfbmFtZSwgaW5mby0+aGRldi0+bmFtZSk7Ci0JbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwogCi0JcmV0dXJuOworCXJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCiBmYWlsZWQ6CiAJYmx1ZWNhcmRfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogCi1zdGF0aWMgdm9pZCBibHVlY2FyZF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBibHVlY2FyZF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWJsdWVjYXJkX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkKLQkJYmx1ZWNhcmRfY2xvc2UoaW5mbyk7CisJYmx1ZWNhcmRfY2xvc2UoaW5mbyk7CiAKIAlkZWxfdGltZXIoJihpbmZvLT50aW1lcikpOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLX0KLQotc3RhdGljIGludCBibHVlY2FyZF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmx1ZWNhcmRfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChERVZfT0sobGluaykpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQlyZXR1cm4gMDsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBibHVlY2FyZF9pZHNbXSA9IHsKQEAgLTEwNDYsMTEgKzk5OSw5IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gImJsdWVjYXJkX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBibHVlY2FyZF9hdHRhY2gsCisJLnByb2JlCQk9IGJsdWVjYXJkX3Byb2JlLAogCS5yZW1vdmUJCT0gYmx1ZWNhcmRfZGV0YWNoLAogCS5pZF90YWJsZQk9IGJsdWVjYXJkX2lkcywKLQkuc3VzcGVuZAk9IGJsdWVjYXJkX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBibHVlY2FyZF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2JsdWVjYXJkX2NzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggN2UyMWIxZi4uYjk0YWMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtNzIsNyArNzIsNyBAQAogCiAKIHR5cGVkZWYgc3RydWN0IGJ0M2NfaW5mb190IHsKLQlkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsKIAogCXN0cnVjdCBoY2lfZGV2ICpoZGV2OwpAQCAtODgsOCArODgsOCBAQAogfSBidDNjX2luZm9fdDsKIAogCi1zdGF0aWMgdm9pZCBidDNjX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIGJ0M2NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgYnQzY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYnQzY19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogc3RhdGljIHZvaWQgYnQzY19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIApAQCAtMTkxLDExICsxOTEsMTEgQEAKIAkJcmV0dXJuOwogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCQlyZWdpc3RlciBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlyZWdpc3RlciBpbnQgbGVuOwogCi0JCWlmICghKGluZm8tPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkpCisJCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGluZm8tPnBfZGV2KSkKIAkJCWJyZWFrOwogCiAKQEAgLTIyOSw3ICsyMjksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCWF2YWlsID0gYnQzY19yZWFkKGlvYmFzZSwgMHg3MDA2KTsKIAkvL3ByaW50aygiYnQzY19jczogcmVjZWl2aW5nICVkIGJ5dGVzXG4iLCBhdmFpbCk7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCXVuc2lnbmVkIGludCBpb2Jhc2UsIHNpemUsIGFkZHIsIGZjcywgdG1wOwogCWludCBpLCBlcnIgPSAwOwogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCS8qIFJlc2V0ICovCiAJYnQzY19pb193cml0ZShpb2Jhc2UsIDB4ODA0MCwgMHgwNDA0KTsKQEAgLTU2Miw3ICs1NjIsNiBAQAogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKIAlpbnQgZXJyOwogCiAJc3Bpbl9sb2NrX2luaXQoJihpbmZvLT5sb2NrKSk7CkBAIC01OTQsMTAgKzU5Myw4IEBACiAKIAloZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JaGFuZGxlID0gaW5mby0+bGluay5oYW5kbGU7Ci0KIAkvKiBMb2FkIGZpcm13YXJlICovCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJCVDNDUENDLmJpbiIsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCAiQlQzQ1BDQy5iaW4iLCAmaW5mby0+cF9kZXYtPmRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJQlRfRVJSKCJGaXJtd2FyZSByZXF1ZXN0IGZhaWxlZCIpOwogCQlnb3RvIGVycm9yOwpAQCAtNjQ4LDE3ICs2NDUsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidDNjX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGJ0M2NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJYnQzY19pbmZvX3QgKmluZm87Ci0JZGV2X2xpbmtfdCAqbGluazsKIAogCS8qIENyZWF0ZSBuZXcgaW5mbyBkZXZpY2UgKi8KIAlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGluayA9ICZpbmZvLT5saW5rOworCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CkBAIC02NzAsMzEgKzY2NiwyMSBAQAogCWxpbmstPmlycS5JbnN0YW5jZSA9IGluZm87CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0JbGluay0+Y29uZi5WY2MgPSA1MDsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlidDNjX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBidDNjX2NvbmZpZyhsaW5rKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBidDNjX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBidDNjX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlidDNjX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlidDNjX3JlbGVhc2UobGluayk7Ci0KKwlidDNjX3JlbGVhc2UobGluayk7CiAJa2ZyZWUoaW5mbyk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKIHsKIAlpbnQgaTsKIApAQCAtNzA1LDMwICs2OTEsMjggQEAKIAlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBmaXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKIHsKIAlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKQogCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKIAlyZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBuZXh0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaWYgKHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKQogCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKIAlyZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIHZvaWQgYnQzY19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYnQzY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RhdGljIGtpb19hZGRyX3QgYmFzZVs1XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTgsIDB4MCB9OwotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJYnQzY19pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXR1cGxlX3QgdHVwbGU7CiAJdV9zaG9ydCBidWZbMjU2XTsKIAljaXNwYXJzZV90IHBhcnNlOwogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7Ci0JY29uZmlnX2luZm9fdCBjb25maWc7CiAJaW50IGksIGosIHRyeSwgbGFzdF9yZXQsIGxhc3RfZm47CiAKIAl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwpAQCAtNzM4LDcgKzcyMiw3IEBACiAKIAkvKiBHZXQgY29uZmlndXJhdGlvbiByZWdpc3RlciBpbmZvcm1hdGlvbiAqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JbGFzdF9yZXQgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwlsYXN0X3JldCA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAlpZiAobGFzdF9yZXQgIT0gQ1NfU1VDQ0VTUykgewogCQlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKIAkJZ290byBjc19mYWlsZWQ7CkBAIC03NDYsMTEgKzczMCw2IEBACiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCWkgPSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25maWcpOwotCWxpbmstPmNvbmYuVmNjID0gY29uZmlnLlZjYzsKLQogCS8qIEZpcnN0IHBhc3M6IGxvb2sgZm9yIGEgY29uZmlnIGVudHJ5IHRoYXQgbG9va3Mgbm9ybWFsLiAqLwogCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwpAQCAtNzU5LDU5ICs3MzgsNTkgQEAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAkvKiBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KIAlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKSB7Ci0JCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAkJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQkJaWYgKGkgIT0gQ1NfU1VDQ0VTUykKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAJCQlpZiAoY2YtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPSBjZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKwkJCQlsaW5rLT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQkJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSA4KSAmJiAoY2YtPmlvLndpblswXS5iYXNlICE9IDApKSB7CiAJCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKIAkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSAodHJ5ID09IDApID8gMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJCWdvdG8gZm91bmRfcG9ydDsKIAkJCX0KIG5leHRfZW50cnk6Ci0JCQlpID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAkJfQogCX0KIAogCS8qIFNlY29uZCBwYXNzOiB0cnkgdG8gZmluZCBhbiBlbnRyeSB0aGF0IGlzbid0IHBpY2t5IGFib3V0CiAJICAgaXRzIGJhc2UgYWRkcmVzcywgdGhlbiB0cnkgdG8gZ3JhYiBhbnkgc3RhbmRhcmQgc2VyaWFsIHBvcnQKIAkgICBhZGRyZXNzLCBhbmQgZmluYWxseSB0cnkgdG8gZ2V0IGFueSBmcmVlIHBvcnQuICovCi0JaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCWkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQlpZiAoKGkgPT0gQ1NfU1VDQ0VTUykgJiYgKGNmLT5pby5ud2luID4gMCkgJiYgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKIAkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CiAJCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CiAJCQkJbGluay0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKIAkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCQlnb3RvIGZvdW5kX3BvcnQ7CiAJCQl9CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl9CiAKIGZvdW5kX3BvcnQ6CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQlCVF9FUlIoIk5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kIik7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAKLQlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTgxOSw1NSArNzk4LDI2IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJc3RyY3B5KGluZm8tPm5vZGUuZGV2X25hbWUsIGluZm8tPmhkZXYtPm5hbWUpOwotCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogZmFpbGVkOgogCWJ0M2NfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogCi1zdGF0aWMgdm9pZCBidDNjX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGJ0M2NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlidDNjX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkKLQkJYnQzY19jbG9zZShpbmZvKTsKKwlidDNjX2Nsb3NlKGluZm8pOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLX0KLQotc3RhdGljIGludCBidDNjX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBidDNjX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAoREVWX09LKGxpbmspKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JcmV0dXJuIDA7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiAKQEAgLTg4MiwxMSArODMyLDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiYnQzY19jcyIsCiAJfSwKLQkucHJvYmUJCT0gYnQzY19hdHRhY2gsCisJLnByb2JlCQk9IGJ0M2NfcHJvYmUsCiAJLnJlbW92ZQkJPSBidDNjX2RldGFjaCwKIAkuaWRfdGFibGUJPSBidDNjX2lkcywKLQkuc3VzcGVuZAk9IGJ0M2Nfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGJ0M2NfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9idDNjX2NzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCmluZGV4IDdiNGJmZjQuLjljZTRjOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCkBAIC02OCw3ICs2OCw3IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgYnR1YXJ0X2luZm9fdCB7Ci0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiAKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKQEAgLTg0LDggKzg0LDggQEAKIH0gYnR1YXJ0X2luZm9fdDsKIAogCi1zdGF0aWMgdm9pZCBidHVhcnRfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgYnR1YXJ0X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGJ0dWFydF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYnR1YXJ0X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiBzdGF0aWMgdm9pZCBidHVhcnRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKQEAgLTE0NiwxMyArMTQ2LDEzIEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCQlyZWdpc3RlciBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlyZWdpc3RlciBpbnQgbGVuOwogCiAJCWNsZWFyX2JpdChYTUlUX1dBS0VVUCwgJihpbmZvLT50eF9zdGF0ZSkpOwogCi0JCWlmICghKGluZm8tPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkpCisJCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGluZm8tPnBfZGV2KSkKIAkJCXJldHVybjsKIAogCQlpZiAoIShza2IgPSBza2JfZGVxdWV1ZSgmKGluZm8tPnR4cSkpKSkKQEAgLTE4Nyw3ICsxODcsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCWRvIHsKIAkJaW5mby0+aGRldi0+c3RhdC5ieXRlX3J4Kys7CkBAIC0zMDEsNyArMzAxLDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCYoaW5mby0+bG9jayksIGZsYWdzKTsKIApAQCAtNDgxLDcgKzQ4MSw3IEBACiBzdGF0aWMgaW50IGJ0dWFydF9vcGVuKGJ0dWFydF9pbmZvX3QgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmKGluZm8tPmxvY2spKTsKQEAgLTU1MCw3ICs1NTAsNyBAQAogc3RhdGljIGludCBidHVhcnRfY2xvc2UoYnR1YXJ0X2luZm9fdCAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5saW5rLmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGluZm8tPmhkZXY7CiAKIAlpZiAoIWhkZXYpCkBAIC01NzYsMTcgKzU3NiwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJ0dWFydF9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBidHVhcnRfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJYnR1YXJ0X2luZm9fdCAqaW5mbzsKLQlkZXZfbGlua190ICpsaW5rOwogCiAJLyogQ3JlYXRlIG5ldyBpbmZvIGRldmljZSAqLwogCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsaW5rID0gJmluZm8tPmxpbms7CisJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwogCiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKQEAgLTU5OCwzMSArNTk3LDIxIEBACiAJbGluay0+aXJxLkluc3RhbmNlID0gaW5mbzsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCWJ0dWFydF9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYnR1YXJ0X2NvbmZpZyhsaW5rKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBidHVhcnRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGJ0dWFydF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJYnR1YXJ0X2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlidHVhcnRfcmVsZWFzZShsaW5rKTsKLQorCWJ0dWFydF9yZWxlYXNlKGxpbmspOwogCWtmcmVlKGluZm8pOwogfQogCi1zdGF0aWMgaW50IGdldF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaW50IGk7CiAKQEAgLTYzMywzMCArNjIyLDI4IEBACiAJcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKIAkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewogCWlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKIAkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJ0dWFydF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYnR1YXJ0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdGF0aWMga2lvX2FkZHJfdCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlidHVhcnRfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAl0dXBsZV90IHR1cGxlOwogCXVfc2hvcnQgYnVmWzI1Nl07CiAJY2lzcGFyc2VfdCBwYXJzZTsKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwotCWNvbmZpZ19pbmZvX3QgY29uZmlnOwogCWludCBpLCBqLCB0cnksIGxhc3RfcmV0LCBsYXN0X2ZuOwogCiAJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKQEAgLTY2Niw3ICs2NTMsNyBAQAogCiAJLyogR2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJbGFzdF9yZXQgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKIAkJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwpAQCAtNjc0LDExICs2NjEsNiBAQAogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQlpID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZmlnKTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmZpZy5WY2M7Ci0KIAkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4gKi8KIAl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CkBAIC02ODcsMjkgKzY2OSwyOSBAQAogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogCS8qIFR3byB0cmllczogd2l0aG91dCBJTyBhbGlhc2VzLCB0aGVuIHdpdGggYWxpYXNlcyAqLwogCWZvciAodHJ5ID0gMDsgdHJ5IDwgMjsgdHJ5KyspIHsKLQkJaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCQlpZiAoaSAhPSBDU19TVUNDRVNTKQogCQkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJCWlmIChjZi0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCQkJCWxpbmstPmNvbmYuVnBwID0gY2YtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAJCQlpZiAoKGNmLT5pby5ud2luID4gMCkgJiYgKGNmLT5pby53aW5bMF0ubGVuID09IDgpICYmIChjZi0+aW8ud2luWzBdLmJhc2UgIT0gMCkpIHsKIAkJCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwogCQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKIAkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9ICh0cnkgPT0gMCkgPyAxNiA6IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCQkJZ290byBmb3VuZF9wb3J0OwogCQkJfQogbmV4dF9lbnRyeToKLQkJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQkJaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCQl9CiAJfQogCiAJLyogU2Vjb25kIHBhc3M6IHRyeSB0byBmaW5kIGFuIGVudHJ5IHRoYXQgaXNuJ3QgcGlja3kgYWJvdXQKIAkgICBpdHMgYmFzZSBhZGRyZXNzLCB0aGVuIHRyeSB0byBncmFiIGFueSBzdGFuZGFyZCBzZXJpYWwgcG9ydAogCSAgIGFkZHJlc3MsIGFuZCBmaW5hbGx5IHRyeSB0byBnZXQgYW55IGZyZWUgcG9ydC4gKi8KLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPiAwKQogCQkgICAgJiYgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKQEAgLTcxNywzMCArNjk5LDMwIEBACiAJCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CiAJCQkJbGluay0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKIAkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCQlnb3RvIGZvdW5kX3BvcnQ7CiAJCQl9CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl9CiAKIGZvdW5kX3BvcnQ6CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQlCVF9FUlIoIk5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kIik7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAKLQlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTc0OCw1OCArNzMwLDI4IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJc3RyY3B5KGluZm8tPm5vZGUuZGV2X25hbWUsIGluZm8tPmhkZXYtPm5hbWUpOwotCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogZmFpbGVkOgogCWJ0dWFydF9yZWxlYXNlKGxpbmspOworCXJldHVybiAtRU5PREVWOwogfQogCiAKLXN0YXRpYyB2b2lkIGJ0dWFydF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBidHVhcnRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlidHVhcnRfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKQotCQlidHVhcnRfY2xvc2UoaW5mbyk7CisJYnR1YXJ0X2Nsb3NlKGluZm8pOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgYnR1YXJ0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBidHVhcnRfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChERVZfT0sobGluaykpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgYnR1YXJ0X2lkc1tdID0gewogCS8qIGRvbid0IHVzZSB0aGlzIGRyaXZlci4gVXNlIHNlcmlhbF9jcyArIGhjaV91YXJ0IGluc3RlYWQgKi8KIAlQQ01DSUFfREVWSUNFX05VTEwKQEAgLTgxMSwxMSArNzYzLDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiYnR1YXJ0X2NzIiwKIAl9LAotCS5wcm9iZQkJPSBidHVhcnRfYXR0YWNoLAorCS5wcm9iZQkJPSBidHVhcnRfcHJvYmUsCiAJLnJlbW92ZQkJPSBidHVhcnRfZGV0YWNoLAogCS5pZF90YWJsZQk9IGJ0dWFydF9pZHMsCi0JLnN1c3BlbmQJPSBidHVhcnRfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGJ0dWFydF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2J0dWFydF9jcyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCmluZGV4IDA0NDliYzQuLmE3MWEyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCBkdGwxX2luZm9fdCB7Ci0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiAKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKQEAgLTg3LDggKzg3LDggQEAKIH0gZHRsMV9pbmZvX3Q7CiAKIAotc3RhdGljIHZvaWQgZHRsMV9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBkdGwxX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGR0bDFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGR0bDFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB2b2lkIGR0bDFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKQEAgLTE1MywxMyArMTUzLDEzIEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCQlyZWdpc3RlciBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlyZWdpc3RlciBpbnQgbGVuOwogCiAJCWNsZWFyX2JpdChYTUlUX1dBS0VVUCwgJihpbmZvLT50eF9zdGF0ZSkpOwogCi0JCWlmICghKGluZm8tPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkpCisJCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGluZm8tPnBfZGV2KSkKIAkJCXJldHVybjsKIAogCQlpZiAoIShza2IgPSBza2JfZGVxdWV1ZSgmKGluZm8tPnR4cSkpKSkKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCWRvIHsKIAkJaW5mby0+aGRldi0+c3RhdC5ieXRlX3J4Kys7CkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTQ1OCw3ICs0NTgsNyBAQAogc3RhdGljIGludCBkdGwxX29wZW4oZHRsMV9pbmZvX3QgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmKGluZm8tPmxvY2spKTsKQEAgLTUwNCw3ICs1MDQsNyBAQAogCW91dGIoVUFSVF9MQ1JfV0xFTjgsIGlvYmFzZSArIFVBUlRfTENSKTsJLyogUmVzZXQgRExBQiAqLwogCW91dGIoKFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX09VVDIpLCBpb2Jhc2UgKyBVQVJUX01DUik7CiAKLQlpbmZvLT5yaV9sYXRjaCA9IGluYihpbmZvLT5saW5rLmlvLkJhc2VQb3J0MSArIFVBUlRfTVNSKSAmIFVBUlRfTVNSX1JJOworCWluZm8tPnJpX2xhdGNoID0gaW5iKGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDEgKyBVQVJUX01TUikgJiBVQVJUX01TUl9SSTsKIAogCS8qIFR1cm4gb24gaW50ZXJydXB0cyAqLwogCW91dGIoVUFSVF9JRVJfUkxTSSB8IFVBUlRfSUVSX1JESSB8IFVBUlRfSUVSX1RIUkksIGlvYmFzZSArIFVBUlRfSUVSKTsKQEAgLTUyOSw3ICs1MjksNyBAQAogc3RhdGljIGludCBkdGwxX2Nsb3NlKGR0bDFfaW5mb190ICppbmZvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gaW5mby0+aGRldjsKIAogCWlmICghaGRldikKQEAgLTU1NSwxNyArNTU1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHRsMV9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBkdGwxX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWR0bDFfaW5mb190ICppbmZvOwotCWRldl9saW5rX3QgKmxpbms7CiAKIAkvKiBDcmVhdGUgbmV3IGluZm8gZGV2aWNlICovCiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxpbmsgPSAmaW5mby0+bGluazsKKwlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87CiAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwpAQCAtNTc3LDMxICs1NzYsMjIgQEAKIAlsaW5rLT5pcnEuSW5zdGFuY2UgPSBpbmZvOwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotCWxpbmstPmNvbmYuVmNjID0gNTA7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0JZHRsMV9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZHRsMV9jb25maWcobGluayk7CiB9CiAKIAotc3RhdGljIHZvaWQgZHRsMV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgZHRsMV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJZHRsMV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJZHRsMV9yZWxlYXNlKGxpbmspOworCWR0bDFfcmVsZWFzZShsaW5rKTsKIAogCWtmcmVlKGluZm8pOwogfQogCi1zdGF0aWMgaW50IGdldF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaW50IGk7CiAKQEAgLTYxMiwyOSArNjAyLDI3IEBACiAJcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKIAkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewogCWlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKIAkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGR0bDFfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGR0bDFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJZHRsMV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXR1cGxlX3QgdHVwbGU7CiAJdV9zaG9ydCBidWZbMjU2XTsKIAljaXNwYXJzZV90IHBhcnNlOwogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7Ci0JY29uZmlnX2luZm9fdCBjb25maWc7CiAJaW50IGksIGxhc3RfcmV0LCBsYXN0X2ZuOwogCiAJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKQEAgLTY0NCw3ICs2MzIsNyBAQAogCiAJLyogR2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJbGFzdF9yZXQgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKIAkJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwpAQCAtNjUyLDExICs2NDAsNiBAQAogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQlpID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZmlnKTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmZpZy5WY2M7Ci0KIAl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKIAl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CkBAIC02NjUsMzQgKzY0OCwzNCBAQAogCiAJLyogTG9vayBmb3IgYSBnZW5lcmljIGZ1bGwtc2l6ZWQgd2luZG93ICovCiAJbGluay0+aW8uTnVtUG9ydHMxID0gODsKLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKIAkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CiAJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBjZi0+aW8ud2luWzBdLmxlbjsJLyp5byAqLwogCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJYnJlYWs7CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl9CiAKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAKLQlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTcwMCw1NSArNjgzLDI2IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJc3RyY3B5KGluZm8tPm5vZGUuZGV2X25hbWUsIGluZm8tPmhkZXYtPm5hbWUpOwotCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogZmFpbGVkOgogCWR0bDFfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogCi1zdGF0aWMgdm9pZCBkdGwxX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGR0bDFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlkdGwxX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkKLQkJZHRsMV9jbG9zZShpbmZvKTsKKwlkdGwxX2Nsb3NlKGluZm8pOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLX0KLQotc3RhdGljIGludCBkdGwxX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkdGwxX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAoREVWX09LKGxpbmspKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JcmV0dXJuIDA7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiAKQEAgLTc2NSwxMSArNzE5LDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiZHRsMV9jcyIsCiAJfSwKLQkucHJvYmUJCT0gZHRsMV9hdHRhY2gsCisJLnByb2JlCQk9IGR0bDFfcHJvYmUsCiAJLnJlbW92ZQkJPSBkdGwxX2RldGFjaCwKIAkuaWRfdGFibGUJPSBkdGwxX2lkcywKLQkuc3VzcGVuZAk9IGR0bDFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGR0bDFfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9kdGwxX2NzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2F6dGNkLmMgYi9kcml2ZXJzL2Nkcm9tL2F6dGNkLmMKaW5kZXggY2U0YTFjZS4uZWMwMDQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9henRjZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vYXp0Y2QuYwpAQCAtMTc2Myw3ICsxNzYzLDcgQEAKIAkJCQlyZWxlYXNlX3JlZ2lvbihhenRfcG9ydCwgNCk7CiAJCQl9CiAJCX0KLQkJaWYgKChhenRfcG9ydF9hdXRvW2ldID09IDApIHx8IChpID09IDE2KSkgeworCQlpZiAoKGkgPT0gMTYpIHx8IChhenRfcG9ydF9hdXRvW2ldID09IDApKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJhenRjZDogbm8gQVpURUNIIENELVJPTSBkcml2ZSBmb3VuZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCA4ODljYWQwLi43OGQ5MjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtMjkxLDcgKzI5MSw3IEBACiAKIGNvbmZpZyBSSU8KIAl0cmlzdGF0ZSAiU3BlY2lhbGl4IFJJTyBzeXN0ZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiAhNjRCSVQKKwlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRAogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTcGVjaWFsaXggUklPLCBhIHNtYXJ0IHNlcmlhbCBjYXJkIHdoaWNoCiAJICBkcml2ZXMgYW4gb3V0Ym9hcmQgYm94IHRoYXQgY2FuIHN1cHBvcnQgdXAgdG8gMTI4IHBvcnRzLiAgUHJvZHVjdApAQCAtODA1LDEwICs4MDUsNiBAQAogCSAgU2Ftc3VuZyBTM0MyNDEwLiBUaGlzIGNhbiBwcm92aWRlIHBlcmlvZGljIGludGVycnVwdCByYXRlcwogCSAgZnJvbSAxSHogdG8gNjRIeiBmb3IgdXNlciBwcm9ncmFtcywgYW5kIHdha2V1cCBmcm9tIEFsYXJtLgogCi1jb25maWcgUlRDX1ZSNDFYWAotCXRyaXN0YXRlICJORUMgVlI0MTAwIHNlcmllcyBSZWFsIFRpbWUgQ2xvY2sgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIENQVV9WUjQxWFgKLQogY29uZmlnIENPQkFMVF9MQ0QKIAlib29sICJTdXBwb3J0IGZvciBDb2JhbHQgTENEIgogCWRlcGVuZHMgb24gTUlQU19DT0JBTFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQppbmRleCBhNzNjYjQ5Li5mYjkxOWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCkBAIC00MSw5ICs0MSw5IEBACiBvYmotJChDT05GSUdfQU1JR0FfQlVJTFRJTl9TRVJJQUwpICs9IGFtaXNlcmlhbC5vCiBvYmotJChDT05GSUdfU1gpCQkrPSBzeC5vIGdlbmVyaWNfc2VyaWFsLm8KIG9iai0kKENPTkZJR19SSU8pCQkrPSByaW8vIGdlbmVyaWNfc2VyaWFsLm8KLW9iai0kKENPTkZJR19IVkNfRFJJVkVSKQkrPSBodmNfY29uc29sZS5vCiBvYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y192aW8ubyBodnNpLm8KIG9iai0kKENPTkZJR19IVkNfUlRBUykJCSs9IGh2Y19ydGFzLm8KK29iai0kKENPTkZJR19IVkNfRFJJVkVSKQkrPSBodmNfY29uc29sZS5vCiBvYmotJChDT05GSUdfUkFXX0RSSVZFUikJKz0gcmF3Lm8KIG9iai0kKENPTkZJR19TR0lfU05TQykJCSs9IHNuc2MubyBzbnNjX2V2ZW50Lm8KIG9iai0kKENPTkZJR19NTVRJTUVSKQkJKz0gbW10aW1lci5vCkBAIC02Nyw3ICs2Nyw2IEBACiBvYmotJChDT05GSUdfU0dJX0lQMjdfUlRDKQkrPSBpcDI3LXJ0Yy5vCiBvYmotJChDT05GSUdfRFMxMzAyKQkJKz0gZHMxMzAyLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX1JUQykJKz0gczNjMjQxMC1ydGMubwotb2JqLSQoQ09ORklHX1JUQ19WUjQxWFgpCSs9IHZyNDF4eF9ydGMubwogaWZlcSAoJChDT05GSUdfR0VORVJJQ19OVlJBTSkseSkKICAgb2JqLSQoQ09ORklHX05WUkFNKQkrPSBnZW5lcmljX252cmFtLm8KIGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwppbmRleCAwYjljZjljLi43Yzg4YzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCkBAIC04Niw3ICs4Niw3IEBACiAKIGNvbmZpZyBBR1BfU0lTCiAJdHJpc3RhdGUgIlNpUyBjaGlwc2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBR1AgJiYgWDg2XzMyCisJZGVwZW5kcyBvbiBBR1AKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mCiAJICBYIG9uIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIGNoaXBzZXRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKaW5kZXggMzY1MTdkNC4uYWMzYzMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCkBAIC02MTcsNiArNjE3LDkgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKKwlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlZJRElBKQorCQluZm9yY2UzX2FncF9pbml0KHBkZXYpOworCiAJcmV0dXJuIGFtZF84MTUxX2NvbmZpZ3VyZSgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwppbmRleCBmZWQwYTg3Li44NmE5NjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKQEAgLTY0LDYgKzY0LDEyIEBACiAJey5tYXNrID0gMHgwMDAwMDAwMSwgLnR5cGUgPSAwfQogfTsKIAorLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIG1hc2tfbWVtb3J5KCkgZm9yIHRoaXMgY2hpcHNldC4uLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGVmZmljZW9uX21hc2tfbWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gYWRkciB8IDB4MDAwMDAwMDE7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYXBlcl9zaXplX2luZm9fbHZsMiBlZmZpY2Vvbl9nZW5lcmljX3NpemVzWzRdID0KIHsKIAl7MjU2LCA2NTUzNiwgMH0sCkBAIC0yNTEsNyArMjU3LDcgQEAKIAlsYXN0X3BhZ2UgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWludCBpbmRleCA9IHBnX3N0YXJ0ICsgaTsKLQkJdW5zaWduZWQgbG9uZyBpbnNlcnQgPSBtZW0tPm1lbW9yeVtpXTsKKwkJdW5zaWduZWQgbG9uZyBpbnNlcnQgPSBlZmZpY2Vvbl9tYXNrX21lbW9yeShtZW0tPm1lbW9yeVtpXSk7CiAKIAkJcGFnZSA9ICh1bnNpZ25lZCBpbnQgKikgZWZmaWNlb25fcHJpdmF0ZS5sMV90YWJsZVtpbmRleCA+PiAxMF07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCmluZGV4IDhjNGM2ZWYuLjkwN2ZiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJCQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7CiAJCQlpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZVtzaXplb2YoaW5mby0+aGFyZHdhcmVfaWQpLTFdID0gJ1wwJzsKIAkJCW1hdGNoID0gKHN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSwgIkhXUDAwMDEiKSA9PSAwKTsKLQkJCUFDUElfTUVNX0ZSRUUoaW5mbyk7CisJCQlrZnJlZShpbmZvKTsKIAkJCWlmIChtYXRjaCkgewogCQkJCXN0YXR1cyA9IGhwX2FjcGlfY3NyX3NwYWNlKGhhbmRsZSwgJnNiYV9ocGEsICZsZW5ndGgpOwogCQkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggOTdiMGE4OS4uYjhlYzI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTM0NSw2ICszNDUsMTIgQEAKIAkJLmNoaXBzZXRfbmFtZQk9ICJQVDg4MCIsCiAJfSwKIAorCS8qIFBUODgwIFVsdHJhICovCisJeworCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwKKwkJLmNoaXBzZXRfbmFtZQk9ICJQVDg4MCBVbHRyYSIsCisJfSwKKwogCS8qIFBUODkwICovCiAJewogCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODc4M18wLApAQCAtNTExLDYgKzUxNyw3IEBACiAJSUQoUENJX0RFVklDRV9JRF9WSUFfODc2M18wKSwKIAlJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwKSwKKwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MFVMVFJBKSwKIAlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzgzXzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCmluZGV4IDkyN2E1YmIuLmEzNzBlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlpZiAoIWJvYXJkbm8pCiAJCWJvYXJkbm8gPSByZWFkYihsb2MgKyBOVU1DQVJEX09XTkVSX1RPX1BDKTsKIAotCWlmICghYm9hcmRubyAmJiBib2FyZG5vID4gTUFYX0JPQVJEKSB7CisJaWYgKCFib2FyZG5vIHx8IGJvYXJkbm8gPiBNQVhfQk9BUkQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQm9hcmQgIyVkIChhdCAweCVseCkgaXMgb3V0IG9mIHJhbmdlICgxIDw9IHggPD0gJWQpLlxuIiwKIAkJICAgICAgIGJvYXJkbm8sIHBoeXNsb2MsIE1BWF9CT0FSRCk7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2NzNTUzNV9ncGlvLmMgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwppbmRleCA1ZDcyZjUwLi40NmQ2NjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwpAQCAtMjQxLDkgKzI0MSwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGNzNTUzNV9ncGlvX2NsZWFudXAodm9pZCkKIHsKIAlkZXZfdCBkZXZfaWQgPSBNS0RFVihtYWpvciwgMCk7CisKKwljZGV2X2RlbCgmY3M1NTM1X2dwaW9fY2Rldik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldl9pZCwgQ1M1NTM1X0dQSU9fQ09VTlQpOwotCWlmIChncGlvX2Jhc2UgIT0gMCkKLQkJcmVsZWFzZV9yZWdpb24oZ3Bpb19iYXNlLCBDUzU1MzVfR1BJT19TSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihncGlvX2Jhc2UsIENTNTUzNV9HUElPX1NJWkUpOwogfQogCiBtb2R1bGVfaW5pdChjczU1MzVfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKaW5kZXggZWRjNzJhNi4uY2I3NmU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKQEAgLTgxNSw4ICs4MTUsNiBAQAogZXh0ZXJuIHZvaWQgKmRybV9yZWFsbG9jKHZvaWQgKm9sZHB0LCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUsIGludCBhcmVhKTsKIGV4dGVybiB2b2lkICpkcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJIGRybV9kZXZpY2VfdCAqIGRldik7Ci1leHRlcm4gdm9pZCAqZHJtX2lvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSBkcm1fZGV2aWNlX3QgKiBkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldik7CiAKIGV4dGVybiBEUk1fQUdQX01FTSAqZHJtX2FsbG9jX2FncChkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBwYWdlcywgdTMyIHR5cGUpOwpAQCAtODkxLDcgKzg4OSw2IEBACiAJCQkJLyogQnVmZmVyIG1hbmFnZW1lbnQgc3VwcG9ydCAoZHJtX2J1ZnMuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfYWdwKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl9kZXNjX3QgKiByZXF1ZXN0KTsKIGV4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfcGNpKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl9kZXNjX3QgKiByZXF1ZXN0KTsKLWV4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfZmIoZHJtX2RldmljZV90ICpkZXYsIGRybV9idWZfZGVzY190ICpyZXF1ZXN0KTsKIGV4dGVybiBpbnQgZHJtX2FkZG1hcChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLCBkcm1fbWFwX3R5cGVfdCB0eXBlLAogCQkgICAgICBkcm1fbWFwX2ZsYWdzX3QgZmxhZ3MsIGRybV9sb2NhbF9tYXBfdCAqKiBtYXBfcHRyKTsKQEAgLTEwMjIsMTEgKzEwMTksMTMgQEAKIAltYXAtPmhhbmRsZSA9IGRybV9pb3JlbWFwKG1hcC0+b2Zmc2V0LCBtYXAtPnNpemUsIGRldik7CiB9CiAKKyNpZiAwCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRybV9jb3JlX2lvcmVtYXBfbm9jYWNoZShzdHJ1Y3QgZHJtX21hcCAqbWFwLAogCQkJCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAltYXAtPmhhbmRsZSA9IGRybV9pb3JlbWFwX25vY2FjaGUobWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwgZGV2KTsKIH0KKyNlbmRpZiAgLyogIDAgICovCiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9tYXAgKm1hcCwKIAkJCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9hZ3BzdXBwb3J0LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9hZ3BzdXBwb3J0LmMKaW5kZXggZmFiYzkzMC4uNDBiZmQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYWdwc3VwcG9ydC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2FncHN1cHBvcnQuYwpAQCAtNTAzLDggKzUwMyw2IEBACiAJcmV0dXJuIGFncF9iaW5kX21lbW9yeShoYW5kbGUsIHN0YXJ0KTsKIH0KIAotRVhQT1JUX1NZTUJPTChkcm1fYWdwX2JpbmRfbWVtb3J5KTsKLQogLyoqIENhbGxzIGFncF91bmJpbmRfbWVtb3J5KCkgKi8KIGludCBkcm1fYWdwX3VuYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMKaW5kZXggOGE5Y2YxMi4uMDA2YjA2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYwpAQCAtMzg2LDcgKzM4Niw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZHJtX3JtbWFwX2xvY2tlZCk7CiAKIGludCBkcm1fcm1tYXAoZHJtX2RldmljZV90ICpkZXYsIGRybV9sb2NhbF9tYXBfdCAqbWFwKQogewpAQCAtMzk4LDcgKzM5Nyw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChkcm1fcm1tYXApOwogCiAvKiBUaGUgcm1tYXAgaW9jdGwgYXBwZWFycyB0byBiZSB1bm5lY2Vzc2FyeS4gIEFsbCBtYXBwaW5ncyBhcmUgdG9ybiBkb3duIG9uCiAgKiB0aGUgbGFzdCBjbG9zZSBvZiB0aGUgZGV2aWNlLCBhbmQgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNsZWFudXAgd2hlbiB0aGluZ3MKQEAgLTEwNTMsNyArMTA1MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBkcm1fYWRkYnVmc19mYihkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9idWZfZGVzY190ICogcmVxdWVzdCkKK3N0YXRpYyBpbnQgZHJtX2FkZGJ1ZnNfZmIoZHJtX2RldmljZV90ICogZGV2LCBkcm1fYnVmX2Rlc2NfdCAqIHJlcXVlc3QpCiB7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CiAJZHJtX2J1Zl9lbnRyeV90ICplbnRyeTsKQEAgLTEyMTIsNyArMTIxMCw2IEBACiAJYXRvbWljX2RlYygmZGV2LT5idWZfYWxsb2MpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChkcm1fYWRkYnVmc19mYik7CiAKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCmluZGV4IGRjNmJiZTguLjNjMGI4ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCkBAIC03NSw4ICs3NSw4IEBACiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCldID0ge2RybV9zZXRzYXJlYWN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYKV0gPSB7ZHJtX2dldHNhcmVhY3R4LCBEUk1fQVVUSH0sCiAKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BRERfQ1RYKV0gPSB7ZHJtX2FkZGN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9STV9DVFgpXSA9IHtkcm1fcm1jdHgsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUREX0NUWCldID0ge2RybV9hZGRjdHgsIERSTV9BVVRIfERSTV9ST09UX09OTFl9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1JNX0NUWCldID0ge2RybV9ybWN0eCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWX0sCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfTU9EX0NUWCldID0ge2RybV9tb2RjdHgsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWX0sCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfR0VUX0NUWCldID0ge2RybV9nZXRjdHgsIERSTV9BVVRIfSwKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TV0lUQ0hfQ1RYKV0gPSB7ZHJtX3N3aXRjaGN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKaW5kZXggZGRkZjhkZS4uN2UzMzE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKQEAgLTgwLDYgKzgwLDcxIEBACiB9CiAKICNpZiBfX09TX0hBU19BR1AKKy8qCisgKiBGaW5kIHRoZSBkcm1fbWFwIHRoYXQgY292ZXJzIHRoZSByYW5nZSBbb2Zmc2V0LCBvZmZzZXQrc2l6ZSkuCisgKi8KK3N0YXRpYyBkcm1fbWFwX3QgKmRybV9sb29rdXBfbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWRybV9tYXBfbGlzdF90ICpyX2xpc3Q7CisJZHJtX21hcF90ICptYXA7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZXYtPm1hcGxpc3QtPmhlYWQpIHsKKwkJcl9saXN0ID0gKGRybV9tYXBfbGlzdF90ICopIGxpc3Q7CisJCW1hcCA9IHJfbGlzdC0+bWFwOworCQlpZiAoIW1hcCkKKwkJCWNvbnRpbnVlOworCQlpZiAobWFwLT5vZmZzZXQgPD0gb2Zmc2V0CisJCSAgICAmJiAob2Zmc2V0ICsgc2l6ZSkgPD0gKG1hcC0+b2Zmc2V0ICsgbWFwLT5zaXplKSkKKwkJCXJldHVybiBtYXA7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqYWdwX3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgICBkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyAqcGh5c19hZGRyX21hcCwgaSwgbnVtX3BhZ2VzID0KKwkgICAgUEFHRV9BTElHTihzaXplKSAvIFBBR0VfU0laRTsKKwlzdHJ1Y3QgZHJtX2FncF9tZW0gKmFncG1lbTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VfbWFwOworCXZvaWQgKmFkZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworI2lmZGVmIF9fYWxwaGFfXworCW9mZnNldCAtPSBkZXYtPmhvc2UtPm1lbV9zcGFjZS0+c3RhcnQ7CisjZW5kaWYKKworCWZvciAoYWdwbWVtID0gZGV2LT5hZ3AtPm1lbW9yeTsgYWdwbWVtOyBhZ3BtZW0gPSBhZ3BtZW0tPm5leHQpCisJCWlmIChhZ3BtZW0tPmJvdW5kIDw9IG9mZnNldAorCQkgICAgJiYgKGFncG1lbS0+Ym91bmQgKyAoYWdwbWVtLT5wYWdlcyA8PCBQQUdFX1NISUZUKSkgPj0KKwkJICAgIChvZmZzZXQgKyBzaXplKSkKKwkJCWJyZWFrOworCWlmICghYWdwbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogT0ssIHdlJ3JlIG1hcHBpbmcgQUdQIHNwYWNlIG9uIGEgY2hpcHNldC9wbGF0Zm9ybSBvbiB3aGljaCBtZW1vcnkgYWNjZXNzZXMgYnkKKwkgKiB0aGUgQ1BVIGRvIG5vdCBnZXQgcmVtYXBwZWQgYnkgdGhlIEdBUlQuICBXZSBmaXggdGhpcyBieSB1c2luZyB0aGUga2VybmVsJ3MKKwkgKiBwYWdlLXRhYmxlIGluc3RlYWQgKHRoYXQncyBwcm9iYWJseSBmYXN0ZXIgYW55aG93Li4uKS4KKwkgKi8KKwkvKiBub3RlOiB1c2Ugdm1hbGxvYygpIGJlY2F1c2UgbnVtX3BhZ2VzIGNvdWxkIGJlIGxhcmdlLi4uICovCisJcGFnZV9tYXAgPSB2bWFsbG9jKG51bV9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7CisJaWYgKCFwYWdlX21hcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwaHlzX2FkZHJfbWFwID0KKwkgICAgYWdwbWVtLT5tZW1vcnktPm1lbW9yeSArIChvZmZzZXQgLSBhZ3BtZW0tPmJvdW5kKSAvIFBBR0VfU0laRTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyArK2kpCisJCXBhZ2VfbWFwW2ldID0gcGZuX3RvX3BhZ2UocGh5c19hZGRyX21hcFtpXSA+PiBQQUdFX1NISUZUKTsKKwlhZGRyID0gdm1hcChwYWdlX21hcCwgbnVtX3BhZ2VzLCBWTV9JT1JFTUFQLCBQQUdFX0FHUCk7CisJdmZyZWUocGFnZV9tYXApOworCisJcmV0dXJuIGFkZHI7Cit9CisKIC8qKiBXcmFwcGVyIGFyb3VuZCBhZ3BfYWxsb2NhdGVfbWVtb3J5KCkgKi8KIERSTV9BR1BfTUVNICpkcm1fYWxsb2NfYWdwKGRybV9kZXZpY2VfdCAqIGRldiwgaW50IHBhZ2VzLCB1MzIgdHlwZSkKIHsKQEAgLTEwMyw1ICsxNjgsNzQgQEAKIHsKIAlyZXR1cm4gZHJtX2FncF91bmJpbmRfbWVtb3J5KGhhbmRsZSk7CiB9CisKKyNlbHNlICAvKiAgX19PU19IQVNfQUdQICAqLworCitzdGF0aWMgaW5saW5lIGRybV9tYXBfdCAqZHJtX2xvb2t1cF9tYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmFncF9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgZHJtX2RldmljZV90ICogZGV2KQoreworCXJldHVybiBOVUxMOworfQorCiAjZW5kaWYJCQkJLyogYWdwICovCisKK3ZvaWQgKmRybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJZHJtX2RldmljZV90ICogZGV2KQoreworCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKSB7CisJCWRybV9tYXBfdCAqbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOworCisJCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQorCQkJcmV0dXJuIGFncF9yZW1hcChvZmZzZXQsIHNpemUsIGRldik7CisJfQorCXJldHVybiBpb3JlbWFwKG9mZnNldCwgc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9pb3JlbWFwKTsKKworI2lmIDAKK3ZvaWQgKmRybV9pb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQoreworCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKSB7CisJCWRybV9tYXBfdCAqbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOworCisJCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQorCQkJcmV0dXJuIGFncF9yZW1hcChvZmZzZXQsIHNpemUsIGRldik7CisJfQorCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKK30KKyNlbmRpZiAgLyogIDAgICovCisKK3ZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgZHJtX2RldmljZV90ICogZGV2KQoreworCS8qCisJICogVGhpcyBpcyBhIGJpdCB1Z2x5LiAgSXQgd291bGQgYmUgbXVjaCBjbGVhbmVyIGlmIHRoZSBEUk0gQVBJIHdvdWxkIHVzZSBzZXBhcmF0ZQorCSAqIHJvdXRpbmVzIGZvciBoYW5kbGluZyBtYXBwaW5ncyBpbiB0aGUgQUdQIHNwYWNlLiAgSG9wZWZ1bGx5IHRoaXMgY2FuIGJlIGRvbmUgaW4KKwkgKiBhIGZ1dHVyZSByZXZpc2lvbiBvZiB0aGUgaW50ZXJmYWNlLi4uCisJICovCisJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUKKwkgICAgJiYgKCh1bnNpZ25lZCBsb25nKXB0ID49IFZNQUxMT0NfU1RBUlQKKwkJJiYgKHVuc2lnbmVkIGxvbmcpcHQgPCBWTUFMTE9DX0VORCkpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJCWRybV9tYXBfdCAqbWFwOworCisJCW9mZnNldCA9IGRybV9mb2xsb3dfcGFnZShwdCkgfCAoKHVuc2lnbmVkIGxvbmcpcHQgJiB+UEFHRV9NQVNLKTsKKwkJbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOworCQlpZiAobWFwICYmIG1hcC0+dHlwZSA9PSBfRFJNX0FHUCkgeworCQkJdnVubWFwKHB0KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlvdW5tYXAocHQpOworfQorRVhQT1JUX1NZTUJPTChkcm1faW9yZW1hcGZyZWUpOworCiAjZW5kaWYJCQkJLyogZGVidWdfbWVtb3J5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCmluZGV4IDM3MzJhNjEuLjcxNGQ5YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCkBAIC01Nyw3MSArNTcsNiBAQAogIyBlbmRpZgogI2VuZGlmCiAKLS8qCi0gKiBGaW5kIHRoZSBkcm1fbWFwIHRoYXQgY292ZXJzIHRoZSByYW5nZSBbb2Zmc2V0LCBvZmZzZXQrc2l6ZSkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgZHJtX21hcF90ICpkcm1fbG9va3VwX21hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkJdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKiBkZXYpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQlkcm1fbWFwX2xpc3RfdCAqcl9saXN0OwotCWRybV9tYXBfdCAqbWFwOwotCi0JbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2LT5tYXBsaXN0LT5oZWFkKSB7Ci0JCXJfbGlzdCA9IChkcm1fbWFwX2xpc3RfdCAqKSBsaXN0OwotCQltYXAgPSByX2xpc3QtPm1hcDsKLQkJaWYgKCFtYXApCi0JCQljb250aW51ZTsKLQkJaWYgKG1hcC0+b2Zmc2V0IDw9IG9mZnNldAotCQkgICAgJiYgKG9mZnNldCArIHNpemUpIDw9IChtYXAtPm9mZnNldCArIG1hcC0+c2l6ZSkpCi0JCQlyZXR1cm4gbWFwOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICphZ3BfcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQl1bnNpZ25lZCBsb25nICpwaHlzX2FkZHJfbWFwLCBpLCBudW1fcGFnZXMgPQotCSAgICBQQUdFX0FMSUdOKHNpemUpIC8gUEFHRV9TSVpFOwotCXN0cnVjdCBkcm1fYWdwX21lbSAqYWdwbWVtOwotCXN0cnVjdCBwYWdlICoqcGFnZV9tYXA7Ci0Jdm9pZCAqYWRkcjsKLQotCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwotCi0jaWZkZWYgX19hbHBoYV9fCi0Jb2Zmc2V0IC09IGRldi0+aG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKLSNlbmRpZgotCi0JZm9yIChhZ3BtZW0gPSBkZXYtPmFncC0+bWVtb3J5OyBhZ3BtZW07IGFncG1lbSA9IGFncG1lbS0+bmV4dCkKLQkJaWYgKGFncG1lbS0+Ym91bmQgPD0gb2Zmc2V0Ci0JCSAgICAmJiAoYWdwbWVtLT5ib3VuZCArIChhZ3BtZW0tPnBhZ2VzIDw8IFBBR0VfU0hJRlQpKSA+PQotCQkgICAgKG9mZnNldCArIHNpemUpKQotCQkJYnJlYWs7Ci0JaWYgKCFhZ3BtZW0pCi0JCXJldHVybiBOVUxMOwotCi0JLyoKLQkgKiBPSywgd2UncmUgbWFwcGluZyBBR1Agc3BhY2Ugb24gYSBjaGlwc2V0L3BsYXRmb3JtIG9uIHdoaWNoIG1lbW9yeSBhY2Nlc3NlcyBieQotCSAqIHRoZSBDUFUgZG8gbm90IGdldCByZW1hcHBlZCBieSB0aGUgR0FSVC4gIFdlIGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBrZXJuZWwncwotCSAqIHBhZ2UtdGFibGUgaW5zdGVhZCAodGhhdCdzIHByb2JhYmx5IGZhc3RlciBhbnlob3cuLi4pLgotCSAqLwotCS8qIG5vdGU6IHVzZSB2bWFsbG9jKCkgYmVjYXVzZSBudW1fcGFnZXMgY291bGQgYmUgbGFyZ2UuLi4gKi8KLQlwYWdlX21hcCA9IHZtYWxsb2MobnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKLQlpZiAoIXBhZ2VfbWFwKQotCQlyZXR1cm4gTlVMTDsKLQotCXBoeXNfYWRkcl9tYXAgPQotCSAgICBhZ3BtZW0tPm1lbW9yeS0+bWVtb3J5ICsgKG9mZnNldCAtIGFncG1lbS0+Ym91bmQpIC8gUEFHRV9TSVpFOwotCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkKLQkJcGFnZV9tYXBbaV0gPSBwZm5fdG9fcGFnZShwaHlzX2FkZHJfbWFwW2ldID4+IFBBR0VfU0hJRlQpOwotCWFkZHIgPSB2bWFwKHBhZ2VfbWFwLCBudW1fcGFnZXMsIFZNX0lPUkVNQVAsIFBBR0VfQUdQKTsKLQl2ZnJlZShwYWdlX21hcCk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRybV9mb2xsb3dfcGFnZSh2b2lkICp2YWRkcikKIHsKIAlwZ2RfdCAqcGdkID0gcGdkX29mZnNldF9rKCh1bnNpZ25lZCBsb25nKXZhZGRyKTsKQEAgLTEzMywxOCArNjgsNiBAQAogCiAjZWxzZQkJCQkvKiBfX09TX0hBU19BR1AgKi8KIAotc3RhdGljIGlubGluZSBkcm1fbWFwX3QgKmRybV9sb29rdXBfbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICphZ3BfcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRybV9mb2xsb3dfcGFnZSh2b2lkICp2YWRkcikKIHsKIAlyZXR1cm4gMDsKQEAgLTE1Miw1MSArNzUsOCBAQAogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkICpkcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCWRybV9kZXZpY2VfdCAqIGRldikKLXsKLQlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmIGRldi0+YWdwICYmIGRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZSkgewotCQlkcm1fbWFwX3QgKm1hcCA9IGRybV9sb29rdXBfbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKK3ZvaWQgKmRybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJZHJtX2RldmljZV90ICogZGV2KTsKIAotCQlpZiAobWFwICYmIG1hcC0+dHlwZSA9PSBfRFJNX0FHUCkKLQkJCXJldHVybiBhZ3BfcmVtYXAob2Zmc2V0LCBzaXplLCBkZXYpOwotCX0KLQlyZXR1cm4gaW9yZW1hcChvZmZzZXQsIHNpemUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRybV9pb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQotewotCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKSB7Ci0JCWRybV9tYXBfdCAqbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOwotCi0JCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQotCQkJcmV0dXJuIGFncF9yZW1hcChvZmZzZXQsIHNpemUsIGRldik7Ci0JfQotCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRybV9pb3JlbWFwZnJlZSh2b2lkICpwdCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSAgIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQkvKgotCSAqIFRoaXMgaXMgYSBiaXQgdWdseS4gIEl0IHdvdWxkIGJlIG11Y2ggY2xlYW5lciBpZiB0aGUgRFJNIEFQSSB3b3VsZCB1c2Ugc2VwYXJhdGUKLQkgKiByb3V0aW5lcyBmb3IgaGFuZGxpbmcgbWFwcGluZ3MgaW4gdGhlIEFHUCBzcGFjZS4gIEhvcGVmdWxseSB0aGlzIGNhbiBiZSBkb25lIGluCi0JICogYSBmdXR1cmUgcmV2aXNpb24gb2YgdGhlIGludGVyZmFjZS4uLgotCSAqLwotCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlCi0JICAgICYmICgodW5zaWduZWQgbG9uZylwdCA+PSBWTUFMTE9DX1NUQVJUCi0JCSYmICh1bnNpZ25lZCBsb25nKXB0IDwgVk1BTExPQ19FTkQpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCQlkcm1fbWFwX3QgKm1hcDsKLQotCQlvZmZzZXQgPSBkcm1fZm9sbG93X3BhZ2UocHQpIHwgKCh1bnNpZ25lZCBsb25nKXB0ICYgflBBR0VfTUFTSyk7Ci0JCW1hcCA9IGRybV9sb29rdXBfbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKLQkJaWYgKG1hcCAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApIHsKLQkJCXZ1bm1hcChwdCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlpb3VubWFwKHB0KTsKLX0KK3ZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgZHJtX2RldmljZV90ICogZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeV9kZWJ1Zy5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKaW5kZXggNzg2ODM0MS4uNjU0M2I5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKQEAgLTIyOSw2ICsyMjksNyBAQAogCXJldHVybiBwdDsKIH0KIAorI2lmIDAKIHZvaWQgKmRybV9pb3JlbWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkgICAgZHJtX2RldmljZV90ICogZGV2KSB7CiAJdm9pZCAqcHQ7CkBAIC0yNTEsNiArMjUyLDcgQEAKIAlzcGluX3VubG9jaygmZHJtX21lbV9sb2NrKTsKIAlyZXR1cm4gcHQ7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCiB2b2lkIGRybV9pb3JlbWFwZnJlZSAodm9pZCAqcHQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KSB7CiAJaW50IGFsbG9jX2NvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYwppbmRleCBiMjhjYTljLi44NmEwZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYwpAQCAtMzcsNiArMzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgImRybVAuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMKaW5kZXggNjgwNzNlMS4uOWE4NDJhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N0dWIuYwpAQCAtMjI5LDggKzIyOSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotRVhQT1JUX1NZTUJPTChkcm1fZ2V0X2Rldik7Ci0KIC8qKgogICogUHV0IGEgZGV2aWNlIG1pbm9yIG51bWJlci4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMKaW5kZXggYjEwOGM3Zi4uMjZiZGYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9jbWRidWYuYwpAQCAtNzIzLDcgKzcyMyw3IEBACiAJCiAJZGV2X3ByaXYtPnNjcmF0Y2hfYWdlc1toZWFkZXIuc2NyYXRjaC5yZWddKys7CiAJCi0JcmVmX2FnZV9iYXNlID0gKih1MzIgKiopY21kYnVmLT5idWY7CisJcmVmX2FnZV9iYXNlID0gICh1MzIgKikodW5zaWduZWQgbG9uZykqKCh1aW50NjRfdCAqKWNtZGJ1Zi0+YnVmKTsKIAkKIAljbWRidWYtPmJ1ZiArPSBzaXplb2YodTY0KTsKIAljbWRidWYtPmJ1ZnN6IC09IHNpemVvZih1NjQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9pcnEuYwppbmRleCA2MTUyNDE1Li5jMzNkMDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9pcnEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9pcnEuYwpAQCAtMTk2LDkgKzE5Niw5IEBACiB7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgaW50IGN1cl9pcnFfc2VxdWVuY2U7Ci0JZHJtX3ZpYV9pcnFfdCAqY3VyX2lycSA9IGRldl9wcml2LT52aWFfaXJxczsKKwlkcm1fdmlhX2lycV90ICpjdXJfaXJxOwogCWludCByZXQgPSAwOwotCW1hc2thcnJheV90ICptYXNrcyA9IGRldl9wcml2LT5pcnFfbWFza3M7CisJbWFza2FycmF5X3QgKm1hc2tzOwogCWludCByZWFsX2lycTsKIAogCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0yMjEsOCArMjIxLDkgQEAKIAkJCSAgX19GVU5DVElPTl9fLCBpcnEpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQkKLQljdXJfaXJxICs9IHJlYWxfaXJxOworCisJbWFza3MgPSBkZXZfcHJpdi0+aXJxX21hc2tzOworCWN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXMgKyByZWFsX2lycTsKIAogCWlmIChtYXNrc1tyZWFsX2lycV1bMl0gJiYgIWZvcmNlX3NlcXVlbmNlKSB7CiAJCURSTV9XQUlUX09OKHJldCwgY3VyX2lycS0+aXJxX3F1ZXVlLCAzICogRFJNX0haLApAQCAtMjQ3LDExICsyNDgsMTIgQEAKIHsKIAlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgc3RhdHVzOwotCWRybV92aWFfaXJxX3QgKmN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXM7CisJZHJtX3ZpYV9pcnFfdCAqY3VyX2lycTsKIAlpbnQgaTsKIAogCURSTV9ERUJVRygiZHJpdmVyX2lycV9wcmVpbnN0YWxsOiBkZXZfcHJpdjogJXBcbiIsIGRldl9wcml2KTsKIAlpZiAoZGV2X3ByaXYpIHsKKwkJY3VyX2lycSA9IGRldl9wcml2LT52aWFfaXJxczsKIAogCQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrID0gVklBX0lSUV9WQkxBTktfRU5BQkxFOwogCQlkZXZfcHJpdi0+aXJxX3BlbmRpbmdfbWFzayA9IFZJQV9JUlFfVkJMQU5LX1BFTkRJTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHRsay5jIGIvZHJpdmVycy9jaGFyL2R0bGsuYwppbmRleCBhMjI5OTE1Li44N2RjYWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHRsay5jCisrKyBiL2RyaXZlcnMvY2hhci9kdGxrLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQlyZWxlYXNlX3JlZ2lvbihkdGxrX3BvcnRsaXN0W2ldLCBEVExLX0lPX0VYVEVOVCk7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG5Eb3VibGVUYWxrIFBDIC0gbm90IGZvdW5kXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJEb3VibGVUYWxrIFBDIC0gbm90IGZvdW5kXG4iKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jIGIvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCmluZGV4IGQzYTJiYzMuLjU4OGZjYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKQEAgLTIwMCwxMyArMjAwLDEzIEBACiAJLyogZmlyc3QgdGVzdCBhbGxvd3Mgb3B0aW1pemVyIHRvIG51a2UgdGhpcyBjYXNlIGZvciAzMi1iaXQgbWFjaGluZXMgKi8KIAlpZiAoc2l6ZW9mIChpbnQpICE9IHNpemVvZiAobG9uZykgJiYgY291bnQgPT0gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKSB7CiAJCXVuc2lnbmVkIGludCB1aWRhdGEgPSBkYXRhOwotCQlyZXR2YWwgPSBwdXRfdXNlcih1aWRhdGEsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWJ1Zik7CisJCXJldHZhbCA9IHB1dF91c2VyKHVpZGF0YSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilidWYpID86CisJCQlzaXplb2YodW5zaWduZWQgaW50KTsKIAl9CiAJZWxzZSB7Ci0JCXJldHZhbCA9IHB1dF91c2VyKGRhdGEsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWJ1Zik7CisJCXJldHZhbCA9IHB1dF91c2VyKGRhdGEsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWJ1ZikgPzoKKwkJCXNpemVvZih1bnNpZ25lZCBsb25nKTsKIAl9Ci0JaWYgKCFyZXR2YWwpCi0JCXJldHZhbCA9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKICBvdXQ6CiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmdlbl9ydGNfd2FpdCwgJndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hwZXQuYyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKaW5kZXggZWYxNDBlYi4uMDc0NzNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2hwZXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHBldC5jCkBAIC05MjUsMTEgKzkyNSw4IEBACiAJc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQocmVzLCAmYWRkcik7CiAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJdW5zaWduZWQgbG9uZyBzaXplOwotCi0JCXNpemUgPSBhZGRyLm1heGltdW0gLSBhZGRyLm1pbmltdW0gKyAxOwogCQloZHAtPmhkX3BoeXNfYWRkcmVzcyA9IGFkZHIubWluaW11bTsKLQkJaGRwLT5oZF9hZGRyZXNzID0gaW9yZW1hcChhZGRyLm1pbmltdW0sIHNpemUpOworCQloZHAtPmhkX2FkZHJlc3MgPSBpb3JlbWFwKGFkZHIubWluaW11bSwgYWRkci5hZGRyZXNzX2xlbmd0aCk7CiAKIAkJaWYgKGhwZXRfaXNfa25vd24oaGRwKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAweCVseCBpcyBidXN5XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y3MuYyBiL2RyaXZlcnMvY2hhci9odmNzLmMKaW5kZXggMzI3YjAwYy4uOGQ5N2IzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y3MuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjcy5jCkBAIC05MDQsNyArOTA0LDcgQEAKIAkJICogSXQgaXMgcG9zc2libGUgdGhlIHZ0eS1zZXJ2ZXIgd2FzIHJlbW92ZWQgYWZ0ZXIgdGhlIGlycSB3YXMKIAkJICogcmVxdWVzdGVkIGJ1dCBiZWZvcmUgd2UgaGF2ZSB0aW1lIHRvIGVuYWJsZSBpbnRlcnJ1cHRzLgogCQkgKi8KLQkJaWYgKHZpb19lbmFibGVfaW50ZXJydXB0cyh2ZGV2KSA9PSBIX1N1Y2Nlc3MpCisJCWlmICh2aW9fZW5hYmxlX2ludGVycnVwdHModmRldikgPT0gSF9TVUNDRVNTKQogCQkJcmV0dXJuIDA7CiAJCWVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSICJIVkNTOiBpbnQgZW5hYmxlIGZhaWxlZCBmb3IiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2J0X3NtLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2J0X3NtLmMKaW5kZXggNThkY2RlZS4uMDAzMGNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9idF9zbS5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYwpAQCAtMTY1LDcgKzE2NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoKHNpemUgPCAyKSB8fCAoc2l6ZSA+IElQTUlfTUFYX01TR19MRU5HVEgpKQorCWlmICgoc2l6ZSA8IDIpIHx8IChzaXplID4gKElQTUlfTUFYX01TR19MRU5HVEggLSAyKSkpCiAJICAgICAgIHJldHVybiAtMTsKIAogCWlmICgoYnQtPnN0YXRlICE9IEJUX1NUQVRFX0lETEUpICYmIChidC0+c3RhdGUgIT0gQlRfU1RBVEVfSE9TRUQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwppbmRleCA5MzJmZWVkLi5lMWM5NTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcG1pLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgpAQCAtNTUsNyArNTUsNyBAQAogCXN0cnVjdCBmaWxlICAgICAgICAgICpmaWxlOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcXVldWU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgd2FpdDsKLQlzdHJ1Y3Qgc2VtYXBob3JlICAgICByZWN2X3NlbTsKKwlzdHJ1Y3QgbXV0ZXgJICAgICByZWN2X211dGV4OwogCWludCAgICAgICAgICAgICAgICAgIGRlZmF1bHRfcmV0cmllczsKIAl1bnNpZ25lZCBpbnQgICAgICAgICBkZWZhdWx0X3JldHJ5X3RpbWVfbXM7CiB9OwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJihwcml2LT5yZWN2X21zZ3MpKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0KTsKIAlwcml2LT5mYXN5bmNfcXVldWUgPSBOVUxMOwotCXNlbWFfaW5pdCgmKHByaXYtPnJlY3Zfc2VtKSwgMSk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+cmVjdl9tdXRleCk7CiAKIAkvKiBVc2UgdGhlIGxvdy1sZXZlbCBkZWZhdWx0cy4gKi8KIAlwcml2LT5kZWZhdWx0X3JldHJpZXMgPSAtMTsKQEAgLTI4NSwxNSArMjg1LDE1IEBACiAJCQlicmVhazsKIAkJfQogCi0JCS8qIFdlIGNsYWltIGEgc2VtYXBob3JlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0d28KKwkJLyogV2UgY2xhaW0gYSBtdXRleCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdHdvCiAgICAgICAgICAgICAgICAgICAgdXNlcnMgZ2V0dGluZyBzb21ldGhpbmcgZnJvbSB0aGUgcXVldWUgYXQgYSB0aW1lLgogICAgICAgICAgICAgICAgICAgIFNpbmNlIHdlIGhhdmUgdG8gcmVsZWFzZSB0aGUgc3BpbmxvY2sgYmVmb3JlIHdlIGNhbgogICAgICAgICAgICAgICAgICAgIGNvcHkgdGhlIGRhdGEgdG8gdGhlIHVzZXIsIGl0J3MgcG9zc2libGUgYW5vdGhlcgogICAgICAgICAgICAgICAgICAgIHVzZXIgd2lsbCBncmFiIHNvbWV0aGluZyBmcm9tIHRoZSBxdWV1ZSwgdG9vLiAgVGhlbgogICAgICAgICAgICAgICAgICAgIHRoZSBtZXNzYWdlcyBtaWdodCBnZXQgb3V0IG9mIG9yZGVyIGlmIHNvbWV0aGluZwogICAgICAgICAgICAgICAgICAgIGZhaWxzIGFuZCB0aGUgbWVzc2FnZSBnZXRzIHB1dCBiYWNrIG9udG8gdGhlCi0gICAgICAgICAgICAgICAgICAgcXVldWUuICBUaGlzIHNlbWFwaG9yZSBwcmV2ZW50cyB0aGF0IHByb2JsZW0uICovCi0JCWRvd24oJihwcml2LT5yZWN2X3NlbSkpOworICAgICAgICAgICAgICAgICAgIHF1ZXVlLiAgVGhpcyBtdXRleCBwcmV2ZW50cyB0aGF0IHByb2JsZW0uICovCisJCW11dGV4X2xvY2soJnByaXYtPnJlY3ZfbXV0ZXgpOwogCiAJCS8qIEdyYWIgdGhlIG1lc3NhZ2Ugb2ZmIHRoZSBsaXN0LiAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmKHByaXYtPnJlY3ZfbXNnX2xvY2spLCBmbGFncyk7CkBAIC0zNTIsNyArMzUyLDcgQEAKIAkJCWdvdG8gcmVjdl9wdXRiYWNrX29uX2VycjsKIAkJfQogCi0JCXVwKCYocHJpdi0+cmVjdl9zZW0pKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWN2X211dGV4KTsKIAkJaXBtaV9mcmVlX3JlY3ZfbXNnKG1zZyk7CiAJCWJyZWFrOwogCkBAIC0zNjIsMTEgKzM2MiwxMSBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmKHByaXYtPnJlY3ZfbXNnX2xvY2spLCBmbGFncyk7CiAJCWxpc3RfYWRkKGVudHJ5LCAmKHByaXYtPnJlY3ZfbXNncykpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYocHJpdi0+cmVjdl9tc2dfbG9jayksIGZsYWdzKTsKLQkJdXAoJihwcml2LT5yZWN2X3NlbSkpOworCQltdXRleF91bmxvY2soJnByaXYtPnJlY3ZfbXV0ZXgpOwogCQlicmVhazsKIAogCXJlY3ZfZXJyOgotCQl1cCgmKHByaXYtPnJlY3Zfc2VtKSk7CisJCW11dGV4X3VubG9jaygmcHJpdi0+cmVjdl9tdXRleCk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9rY3Nfc20uYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfa2NzX3NtLmMKaW5kZXggZGExNTU0MS4uMjA2MjY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9rY3Nfc20uYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2tjc19zbS5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX29iZihzdHJ1Y3Qgc2lfc21fZGF0YSAqa2NzLCB1bnNpZ25lZCBjaGFyIHN0YXR1cywKIAkJCSAgICBsb25nIHRpbWUpCiB7Ci0JaWYgKCEgR0VUX1NUQVRVU19PQkYoc3RhdHVzKSkgeworCWlmICghR0VUX1NUQVRVU19PQkYoc3RhdHVzKSkgewogCQlrY3MtPm9iZl90aW1lb3V0IC09IHRpbWU7CiAJCWlmIChrY3MtPm9iZl90aW1lb3V0IDwgMCkgewogCQkgICAgc3RhcnRfZXJyb3JfcmVjb3Zlcnkoa2NzLCAiT0JGIG5vdCByZWFkeSBpbiB0aW1lIik7CkBAIC00MDcsNyArNDA3LDcgQEAKIAkJfQogCiAJCWlmIChzdGF0ZSA9PSBLQ1NfUkVBRF9TVEFURSkgewotCQkJaWYgKCEgY2hlY2tfb2JmKGtjcywgc3RhdHVzLCB0aW1lKSkKKwkJCWlmICghY2hlY2tfb2JmKGtjcywgc3RhdHVzLCB0aW1lKSkKIAkJCQlyZXR1cm4gU0lfU01fQ0FMTF9XSVRIX0RFTEFZOwogCQkJcmVhZF9uZXh0X2J5dGUoa2NzKTsKIAkJfSBlbHNlIHsKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCQkJCQkgICAgICJOb3QgaW4gcmVhZCBzdGF0ZSBmb3IgZXJyb3IyIik7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoISBjaGVja19vYmYoa2NzLCBzdGF0dXMsIHRpbWUpKQorCQlpZiAoIWNoZWNrX29iZihrY3MsIHN0YXR1cywgdGltZSkpCiAJCQlyZXR1cm4gU0lfU01fQ0FMTF9XSVRIX0RFTEFZOwogCiAJCWNsZWFyX29iZihrY3MsIHN0YXR1cyk7CkBAIC00NjIsNyArNDYyLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCEgY2hlY2tfb2JmKGtjcywgc3RhdHVzLCB0aW1lKSkKKwkJaWYgKCFjaGVja19vYmYoa2NzLCBzdGF0dXMsIHRpbWUpKQogCQkJcmV0dXJuIFNJX1NNX0NBTExfV0lUSF9ERUxBWTsKIAogCQljbGVhcl9vYmYoa2NzLCBzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwppbmRleCA0MGViMDA1Li45ZjJmOGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaXBtaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwbWlfc21pLmg+CkBAIC0yMzQsNyArMjM1LDcgQEAKIAogCS8qIFRoZSBsaXN0IG9mIGNvbW1hbmQgcmVjZWl2ZXJzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgZm9yIGNvbW1hbmRzCiAJICAgb24gdGhpcyBpbnRlcmZhY2UuICovCi0Jc3RydWN0IHNlbWFwaG9yZSBjbWRfcmN2cnNfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggICAgIGNtZF9yY3Zyc19tdXRleDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNtZF9yY3ZyczsKIAogCS8qIEV2ZW50cyB0aGF0IHdlcmUgcXVldWVzIGJlY2F1c2Ugbm8gb25lIHdhcyB0aGVyZSB0byByZWNlaXZlCkBAIC0zODcsMTAgKzM4OCwxMCBAQAogCiAJLyogV2hvbGVzYWxlIHJlbW92ZSBhbGwgdGhlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBpbiB0aGUKIAkgKiBpbnRlcmZhY2UgYW5kIHdhaXQgZm9yIFJDVSB0byBrbm93IHRoYXQgbm9uZSBhcmUgaW4gdXNlLiAqLwotCWRvd24oJmludGYtPmNtZF9yY3Zyc19sb2NrKTsKKwltdXRleF9sb2NrKCZpbnRmLT5jbWRfcmN2cnNfbXV0ZXgpOwogCWxpc3RfYWRkX3JjdSgmbGlzdCwgJmludGYtPmNtZF9yY3Zycyk7CiAJbGlzdF9kZWxfcmN1KCZpbnRmLT5jbWRfcmN2cnMpOwotCXVwKCZpbnRmLT5jbWRfcmN2cnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZpbnRmLT5jbWRfcmN2cnNfbXV0ZXgpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJjdnIsIHJjdnIyLCAmbGlzdCwgbGluaykKQEAgLTU1Nyw3ICs1NTgsNyBAQAogCiBzdGF0aWMgdm9pZCBkZWxpdmVyX3Jlc3BvbnNlKHN0cnVjdCBpcG1pX3JlY3ZfbXNnICptc2cpCiB7Ci0JaWYgKCEgbXNnLT51c2VyKSB7CisJaWYgKCFtc2ctPnVzZXIpIHsKIAkJaXBtaV9zbWlfdCAgICBpbnRmID0gbXNnLT51c2VyX21zZ19kYXRhOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC01OTgsMTEgKzU5OSwxMSBAQAogCSAgICAgKGkrMSklSVBNSV9JUE1CX05VTV9TRVEgIT0gaW50Zi0+Y3Vycl9zZXE7CiAJICAgICBpID0gKGkrMSklSVBNSV9JUE1CX05VTV9TRVEpCiAJewotCQlpZiAoISBpbnRmLT5zZXFfdGFibGVbaV0uaW51c2UpCisJCWlmICghaW50Zi0+c2VxX3RhYmxlW2ldLmludXNlKQogCQkJYnJlYWs7CiAJfQogCi0JaWYgKCEgaW50Zi0+c2VxX3RhYmxlW2ldLmludXNlKSB7CisJaWYgKCFpbnRmLT5zZXFfdGFibGVbaV0uaW51c2UpIHsKIAkJaW50Zi0+c2VxX3RhYmxlW2ldLnJlY3ZfbXNnID0gcmVjdl9tc2c7CiAKIAkJLyogU3RhcnQgd2l0aCB0aGUgbWF4aW11bSB0aW1lb3V0LCB3aGVuIHRoZSBzZW5kIHJlc3BvbnNlCkBAIC03NjMsNyArNzY0LDcgQEAKIAl9CiAKIAluZXdfdXNlciA9IGttYWxsb2Moc2l6ZW9mKCpuZXdfdXNlciksIEdGUF9LRVJORUwpOwotCWlmICghIG5ld191c2VyKQorCWlmICghbmV3X3VzZXIpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmludGVyZmFjZXNfbG9jaywgZmxhZ3MpOwpAQCAtODE5LDE0ICs4MjAsMTMgQEAKIAogaW50IGlwbWlfZGVzdHJveV91c2VyKGlwbWlfdXNlcl90IHVzZXIpCiB7Ci0JaW50ICAgICAgICAgICAgICBydiA9IC1FTk9ERVY7CiAJaXBtaV9zbWlfdCAgICAgICBpbnRmID0gdXNlci0+aW50ZjsKIAlpbnQgICAgICAgICAgICAgIGk7CiAJdW5zaWduZWQgbG9uZyAgICBmbGFnczsKIAlzdHJ1Y3QgY21kX3JjdnIgICpyY3ZyOwogCXN0cnVjdCBjbWRfcmN2ciAgKnJjdnJzID0gTlVMTDsKIAotCXVzZXItPnZhbGlkID0gMTsKKwl1c2VyLT52YWxpZCA9IDA7CiAKIAkvKiBSZW1vdmUgdGhlIHVzZXIgZnJvbSB0aGUgaW50ZXJmYWNlJ3Mgc2VxdWVuY2UgdGFibGUuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPnNlcV9sb2NrLCBmbGFncyk7CkBAIC04NDcsNyArODQ3LDcgQEAKIAkgKiBzaW5jZSBvdGhlciB0aGluZ3MgbWF5IGJlIHVzaW5nIGl0IHRpbGwgd2UgZG8KIAkgKiBzeW5jaHJvbml6ZV9yY3UoKSkgdGhlbiBmcmVlIGV2ZXJ5dGhpbmcgaW4gdGhhdCBsaXN0LgogCSAqLwotCWRvd24oJmludGYtPmNtZF9yY3Zyc19sb2NrKTsKKwltdXRleF9sb2NrKCZpbnRmLT5jbWRfcmN2cnNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJjdnIsICZpbnRmLT5jbWRfcmN2cnMsIGxpbmspIHsKIAkJaWYgKHJjdnItPnVzZXIgPT0gdXNlcikgewogCQkJbGlzdF9kZWxfcmN1KCZyY3ZyLT5saW5rKTsKQEAgLTg1NSw3ICs4NTUsNyBAQAogCQkJcmN2cnMgPSByY3ZyOwogCQl9CiAJfQotCXVwKCZpbnRmLT5jbWRfcmN2cnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZpbnRmLT5jbWRfcmN2cnNfbXV0ZXgpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCXdoaWxlIChyY3ZycykgewogCQlyY3ZyID0gcmN2cnM7CkBAIC04NzEsNyArODcxLDcgQEAKIAogCWtyZWZfcHV0KCZ1c2VyLT5yZWZjb3VudCwgZnJlZV91c2VyKTsKIAotCXJldHVybiBydjsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpcG1pX2dldF92ZXJzaW9uKGlwbWlfdXNlcl90ICAgdXNlciwKQEAgLTkzNiwxMCArOTM2LDEyIEBACiAKIAlpZiAodmFsKSB7CiAJCS8qIERlbGl2ZXIgYW55IHF1ZXVlZCBldmVudHMuICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtc2csIG1zZzIsICZpbnRmLT53YWl0aW5nX2V2ZW50cywgbGluaykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXNnLCBtc2cyLCAmaW50Zi0+d2FpdGluZ19ldmVudHMsCisJCQkJCSBsaW5rKSB7CiAJCQlsaXN0X2RlbCgmbXNnLT5saW5rKTsKIAkJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJm1zZ3MpOwogCQl9CisJCWludGYtPndhaXRpbmdfZXZlbnRzX2NvdW50ID0gMDsKIAl9CiAKIAkvKiBIb2xkIHRoZSBldmVudHMgbG9jayB3aGlsZSBkb2luZyB0aGlzIHRvIHByZXNlcnZlIG9yZGVyLiAqLwpAQCAtOTc4LDEzICs5ODAsMTMgQEAKIAogCiAJcmN2ciA9IGttYWxsb2Moc2l6ZW9mKCpyY3ZyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgcmN2cikKKwlpZiAoIXJjdnIpCiAJCXJldHVybiAtRU5PTUVNOwogCXJjdnItPmNtZCA9IGNtZDsKIAlyY3ZyLT5uZXRmbiA9IG5ldGZuOwogCXJjdnItPnVzZXIgPSB1c2VyOwogCi0JZG93bigmaW50Zi0+Y21kX3JjdnJzX2xvY2spOworCW11dGV4X2xvY2soJmludGYtPmNtZF9yY3Zyc19tdXRleCk7CiAJLyogTWFrZSBzdXJlIHRoZSBjb21tYW5kL25ldGZuIGlzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQuICovCiAJZW50cnkgPSBmaW5kX2NtZF9yY3ZyKGludGYsIG5ldGZuLCBjbWQpOwogCWlmIChlbnRyeSkgewpAQCAtOTk1LDcgKzk5Nyw3IEBACiAJbGlzdF9hZGRfcmN1KCZyY3ZyLT5saW5rLCAmaW50Zi0+Y21kX3JjdnJzKTsKIAogIG91dF91bmxvY2s6Ci0JdXAoJmludGYtPmNtZF9yY3Zyc19sb2NrKTsKKwltdXRleF91bmxvY2soJmludGYtPmNtZF9yY3Zyc19tdXRleCk7CiAJaWYgKHJ2KQogCQlrZnJlZShyY3ZyKTsKIApAQCAtMTAwOSwxNyArMTAxMSwxNyBAQAogCWlwbWlfc21pX3QgICAgICBpbnRmID0gdXNlci0+aW50ZjsKIAlzdHJ1Y3QgY21kX3JjdnIgKnJjdnI7CiAKLQlkb3duKCZpbnRmLT5jbWRfcmN2cnNfbG9jayk7CisJbXV0ZXhfbG9jaygmaW50Zi0+Y21kX3JjdnJzX211dGV4KTsKIAkvKiBNYWtlIHN1cmUgdGhlIGNvbW1hbmQvbmV0Zm4gaXMgbm90IGFscmVhZHkgcmVnaXN0ZXJlZC4gKi8KIAlyY3ZyID0gZmluZF9jbWRfcmN2cihpbnRmLCBuZXRmbiwgY21kKTsKIAlpZiAoKHJjdnIpICYmIChyY3ZyLT51c2VyID09IHVzZXIpKSB7CiAJCWxpc3RfZGVsX3JjdSgmcmN2ci0+bGluayk7Ci0JCXVwKCZpbnRmLT5jbWRfcmN2cnNfbG9jayk7CisJCW11dGV4X3VubG9jaygmaW50Zi0+Y21kX3JjdnJzX211dGV4KTsKIAkJc3luY2hyb25pemVfcmN1KCk7CiAJCWtmcmVlKHJjdnIpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQl1cCgmaW50Zi0+Y21kX3JjdnJzX2xvY2spOworCQltdXRleF91bmxvY2soJmludGYtPmNtZF9yY3Zyc19tdXRleCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIH0KQEAgLTE1MTQsNyArMTUxNiw3IEBACiAJdW5zaWduZWQgY2hhciBzYWRkciwgbHVuOwogCWludCAgICAgICAgICAgcnY7CiAKLQlpZiAoISB1c2VyKQorCWlmICghdXNlcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcnYgPSBjaGVja19hZGRyKHVzZXItPmludGYsIGFkZHIsICZzYWRkciwgJmx1bik7CiAJaWYgKHJ2KQpAQCAtMTU0NSw3ICsxNTQ3LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHNhZGRyLCBsdW47CiAJaW50ICAgICAgICAgICBydjsKIAotCWlmICghIHVzZXIpCisJaWYgKCF1c2VyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlydiA9IGNoZWNrX2FkZHIodXNlci0+aW50ZiwgYWRkciwgJnNhZGRyLCAmbHVuKTsKIAlpZiAocnYpCkBAIC0xNTcwLDcgKzE1NzIsNyBAQAogCWNoYXIgICAgICAgKm91dCA9IChjaGFyICopIHBhZ2U7CiAJaXBtaV9zbWlfdCBpbnRmID0gZGF0YTsKIAlpbnQgICAgICAgIGk7Ci0JaW50ICAgICAgICBydj0gMDsKKwlpbnQgICAgICAgIHJ2ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBJUE1JX01BWF9DSEFOTkVMUzsgaSsrKQogCQlydiArPSBzcHJpbnRmKG91dCtydiwgIiV4ICIsIGludGYtPmNoYW5uZWxzW2ldLmFkZHJlc3MpOwpAQCAtMTk4OSw3ICsxOTkxLDcgQEAKIAl9IGVsc2UgewogCQlibWMtPmRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiaXBtaV9ibWMiLAogCQkJCQkJIGJtYy0+aWQuZGV2aWNlX2lkKTsKLQkJaWYgKCEgYm1jLT5kZXYpIHsKKwkJaWYgKCFibWMtPmRldikgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgImlwbWlfbXNnaGFuZGxlcjoiCiAJCQkgICAgICAgIiBVbmFibGUgdG8gYWxsb2NhdGUgcGxhdGZvcm0gZGV2aWNlXG4iKTsKQEAgLTIzMDUsOCArMjMwNyw3IEBACiAJCSAgICAgIHZvaWQJCSAgICAgICAqc2VuZF9pbmZvLAogCQkgICAgICBzdHJ1Y3QgaXBtaV9kZXZpY2VfaWQgICAgKmRldmljZV9pZCwKIAkJICAgICAgc3RydWN0IGRldmljZSAgICAgICAgICAgICpzaV9kZXYsCi0JCSAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICBzbGF2ZV9hZGRyLAotCQkgICAgICBpcG1pX3NtaV90ICAgICAgICAgICAgICAgKm5ld19pbnRmKQorCQkgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgc2xhdmVfYWRkcikKIHsKIAlpbnQgICAgICAgICAgICAgIGksIGo7CiAJaW50ICAgICAgICAgICAgICBydjsKQEAgLTIzNjYsNyArMjM2Nyw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmludGYtPmV2ZW50c19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmaW50Zi0+d2FpdGluZ19ldmVudHMpOwogCWludGYtPndhaXRpbmdfZXZlbnRzX2NvdW50ID0gMDsKLQlpbml0X01VVEVYKCZpbnRmLT5jbWRfcmN2cnNfbG9jayk7CisJbXV0ZXhfaW5pdCgmaW50Zi0+Y21kX3JjdnJzX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmaW50Zi0+Y21kX3JjdnJzKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbnRmLT53YWl0cSk7CiAKQEAgLTIzODgsOSArMjM4OSw5IEBACiAJaWYgKHJ2KQogCQlnb3RvIG91dDsKIAotCS8qIEZJWE1FIC0gdGhpcyBpcyBhbiB1Z2x5IGtsdWRnZSwgdGhpcyBzZXRzIHRoZSBpbnRmIGZvciB0aGUKLQkgICBjYWxsZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHdpdGggaXQuICovCi0JKm5ld19pbnRmID0gaW50ZjsKKwlydiA9IGhhbmRsZXJzLT5zdGFydF9wcm9jZXNzaW5nKHNlbmRfaW5mbywgaW50Zik7CisJaWYgKHJ2KQorCQlnb3RvIG91dDsKIAogCWdldF9ndWlkKGludGYpOwogCkBAIC0yNjIyLDcgKzI2MjMsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT5jb3VudGVyX2xvY2ssIGZsYWdzKTsKIAogCQlyZWN2X21zZyA9IGlwbWlfYWxsb2NfcmVjdl9tc2coKTsKLQkJaWYgKCEgcmVjdl9tc2cpIHsKKwkJaWYgKCFyZWN2X21zZykgewogCQkJLyogV2UgY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIHNvIHJlcXVldWUgaXQgZm9yIGhhbmRsaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlci4gKi8KQEAgLTI3NzcsNyArMjc3OCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPmNvdW50ZXJfbG9jaywgZmxhZ3MpOwogCiAJCXJlY3ZfbXNnID0gaXBtaV9hbGxvY19yZWN2X21zZygpOwotCQlpZiAoISByZWN2X21zZykgeworCQlpZiAoIXJlY3ZfbXNnKSB7CiAJCQkvKiBXZSBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgc28gcmVxdWV1ZSBpdCBmb3IgaGFuZGxpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVyLiAqLwpAQCAtMjg2OSwxMyArMjg3MCwxNCBAQAogCSAgIGV2ZW50cy4gKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodXNlciwgJmludGYtPnVzZXJzLCBsaW5rKSB7Ci0JCWlmICghIHVzZXItPmdldHNfZXZlbnRzKQorCQlpZiAoIXVzZXItPmdldHNfZXZlbnRzKQogCQkJY29udGludWU7CiAKIAkJcmVjdl9tc2cgPSBpcG1pX2FsbG9jX3JlY3ZfbXNnKCk7Ci0JCWlmICghIHJlY3ZfbXNnKSB7CisJCWlmICghcmVjdl9tc2cpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlY3ZfbXNnLCByZWN2X21zZzIsICZtc2dzLCBsaW5rKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVjdl9tc2csIHJlY3ZfbXNnMiwgJm1zZ3MsCisJCQkJCQkgbGluaykgewogCQkJCWxpc3RfZGVsKCZyZWN2X21zZy0+bGluayk7CiAJCQkJaXBtaV9mcmVlX3JlY3ZfbXNnKHJlY3ZfbXNnKTsKIAkJCX0KQEAgLTI5MDUsNyArMjkwNyw3IEBACiAJCS8qIE5vIG9uZSB0byByZWNlaXZlIHRoZSBtZXNzYWdlLCBwdXQgaXQgaW4gcXVldWUgaWYgdGhlcmUncwogCQkgICBub3QgYWxyZWFkeSB0b28gbWFueSB0aGluZ3MgaW4gdGhlIHF1ZXVlLiAqLwogCQlyZWN2X21zZyA9IGlwbWlfYWxsb2NfcmVjdl9tc2coKTsKLQkJaWYgKCEgcmVjdl9tc2cpIHsKKwkJaWYgKCFyZWN2X21zZykgewogCQkJLyogV2UgY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIHNvIHJlcXVldWUgaXQgZm9yIGhhbmRsaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlci4gKi8KQEAgLTI5MTUsNiArMjkxNyw3IEBACiAKIAkJY29weV9ldmVudF9pbnRvX3JlY3ZfbXNnKHJlY3ZfbXNnLCBtc2cpOwogCQlsaXN0X2FkZF90YWlsKCYocmVjdl9tc2ctPmxpbmspLCAmKGludGYtPndhaXRpbmdfZXZlbnRzKSk7CisJCWludGYtPndhaXRpbmdfZXZlbnRzX2NvdW50Kys7CiAJfSBlbHNlIHsKIAkJLyogVGhlcmUncyB0b28gbWFueSB0aGluZ3MgaW4gdGhlIHF1ZXVlLCBkaXNjYXJkIHRoaXMKIAkJICAgbWVzc2FnZS4gKi8KQEAgLTMxOTAsNyArMzE5Myw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodXNlciwgJmludGYtPnVzZXJzLCBsaW5rKSB7Ci0JCWlmICghIHVzZXItPmhhbmRsZXItPmlwbWlfd2F0Y2hkb2dfcHJldGltZW91dCkKKwkJaWYgKCF1c2VyLT5oYW5kbGVyLT5pcG1pX3dhdGNoZG9nX3ByZXRpbWVvdXQpCiAJCQljb250aW51ZTsKIAogCQl1c2VyLT5oYW5kbGVyLT5pcG1pX3dhdGNoZG9nX3ByZXRpbWVvdXQodXNlci0+aGFuZGxlcl9kYXRhKTsKQEAgLTMyNzgsNyArMzI4MSw3IEBACiAKIAkJc21pX21zZyA9IHNtaV9mcm9tX3JlY3ZfbXNnKGludGYsIGVudC0+cmVjdl9tc2csIHNsb3QsCiAJCQkJCSAgICBlbnQtPnNlcWlkKTsKLQkJaWYgKCEgc21pX21zZykKKwkJaWYgKCFzbWlfbXNnKQogCQkJcmV0dXJuOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPnNlcV9sb2NrLCAqZmxhZ3MpOwpAQCAtMzMxNCw4ICszMzE3LDkgQEAKIAogCQkvKiBTZWUgaWYgYW55IHdhaXRpbmcgbWVzc2FnZXMgbmVlZCB0byBiZSBwcm9jZXNzZWQuICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc21pX21zZywgc21pX21zZzIsICZpbnRmLT53YWl0aW5nX21zZ3MsIGxpbmspIHsKLQkJCWlmICghIGhhbmRsZV9uZXdfcmVjdl9tc2coaW50Ziwgc21pX21zZykpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNtaV9tc2csIHNtaV9tc2cyLAorCQkJCQkgJmludGYtPndhaXRpbmdfbXNncywgbGluaykgeworCQkJaWYgKCFoYW5kbGVfbmV3X3JlY3ZfbXNnKGludGYsIHNtaV9tc2cpKSB7CiAJCQkJbGlzdF9kZWwoJnNtaV9tc2ctPmxpbmspOwogCQkJCWlwbWlfZnJlZV9zbWlfbXNnKHNtaV9tc2cpOwogCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYwppbmRleCA3ODZhMjgwLi5kMGI1YzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKIHsKIAljb25zdCBjaGFyIGlwbWlfdmVyc2lvbl9tYWpvciA9IGlwbWlfdmVyc2lvbiAmIDB4RjsKIAljb25zdCBjaGFyIGlwbWlfdmVyc2lvbl9taW5vciA9IChpcG1pX3ZlcnNpb24gPj4gNCkgJiAweEY7Ci0JY29uc3QgY2hhciBtZnJbM109REVMTF9JQU5BX01GUl9JRDsKKwljb25zdCBjaGFyIG1mclszXSA9IERFTExfSUFOQV9NRlJfSUQ7CiAJaWYgKCFtZW1jbXAobWZyLCAmbWZnX2lkLCBzaXplb2YobWZyKSkgJiYKIAkgICAgaXBtaV92ZXJzaW9uX21ham9yIDw9IDEgJiYKIAkgICAgaXBtaV92ZXJzaW9uX21pbm9yIDwgNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggMzVmYmQ0ZC4uMDJhN2RkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTgwMyw3ICs4MDMsNyBAQAogCXNldF91c2VyX25pY2UoY3VycmVudCwgMTkpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCYoc21pX2luZm8tPnNpX2xvY2spLCBmbGFncyk7Ci0JCXNtaV9yZXN1bHQ9c21pX2V2ZW50X2hhbmRsZXIoc21pX2luZm8sIDApOworCQlzbWlfcmVzdWx0ID0gc21pX2V2ZW50X2hhbmRsZXIoc21pX2luZm8sIDApOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoc21pX2luZm8tPnNpX2xvY2spLCBmbGFncyk7CiAJCWlmIChzbWlfcmVzdWx0ID09IFNJX1NNX0NBTExfV0lUSE9VVF9ERUxBWSkgewogCQkJLyogZG8gbm90aGluZyAqLwpAQCAtOTcyLDEwICs5NzIsMzcgQEAKIAlyZXR1cm4gc2lfaXJxX2hhbmRsZXIoaXJxLCBkYXRhLCByZWdzKTsKIH0KIAorc3RhdGljIGludCBzbWlfc3RhcnRfcHJvY2Vzc2luZyh2b2lkICAgICAgICpzZW5kX2luZm8sCisJCQkJaXBtaV9zbWlfdCBpbnRmKQoreworCXN0cnVjdCBzbWlfaW5mbyAqbmV3X3NtaSA9IHNlbmRfaW5mbzsKKworCW5ld19zbWktPmludGYgPSBpbnRmOworCisJLyogU2V0IHVwIHRoZSB0aW1lciB0aGF0IGRyaXZlcyB0aGUgaW50ZXJmYWNlLiAqLworCXNldHVwX3RpbWVyKCZuZXdfc21pLT5zaV90aW1lciwgc21pX3RpbWVvdXQsIChsb25nKW5ld19zbWkpOworCW5ld19zbWktPmxhc3RfdGltZW91dF9qaWZmaWVzID0gamlmZmllczsKKwltb2RfdGltZXIoJm5ld19zbWktPnNpX3RpbWVyLCBqaWZmaWVzICsgU0lfVElNRU9VVF9KSUZGSUVTKTsKKworIAlpZiAobmV3X3NtaS0+c2lfdHlwZSAhPSBTSV9CVCkgeworCQluZXdfc21pLT50aHJlYWQgPSBrdGhyZWFkX3J1bihpcG1pX3RocmVhZCwgbmV3X3NtaSwKKwkJCQkJICAgICAgImtpcG1pJWQiLCBuZXdfc21pLT5pbnRmX251bSk7CisJCWlmIChJU19FUlIobmV3X3NtaS0+dGhyZWFkKSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJpcG1pX3NpX2ludGY6IENvdWxkIG5vdCBzdGFydCIKKwkJCSAgICAgICAiIGtlcm5lbCB0aHJlYWQgZHVlIHRvIGVycm9yICVsZCwgb25seSB1c2luZyIKKwkJCSAgICAgICAiIHRpbWVycyB0byBkcml2ZSB0aGUgaW50ZXJmYWNlXG4iLAorCQkJICAgICAgIFBUUl9FUlIobmV3X3NtaS0+dGhyZWFkKSk7CisJCQluZXdfc21pLT50aHJlYWQgPSBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgaXBtaV9zbWlfaGFuZGxlcnMgaGFuZGxlcnMgPQogewogCS5vd25lciAgICAgICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLnN0YXJ0X3Byb2Nlc3NpbmcgICAgICAgPSBzbWlfc3RhcnRfcHJvY2Vzc2luZywKIAkuc2VuZGVyCQkJPSBzZW5kZXIsCiAJLnJlcXVlc3RfZXZlbnRzCQk9IHJlcXVlc3RfZXZlbnRzLAogCS5zZXRfcnVuX3RvX2NvbXBsZXRpb24gID0gc2V0X3J1bl90b19jb21wbGV0aW9uLApAQCAtOTg3LDcgKzEwMTQsNyBAQAogCiAjZGVmaW5lIFNJX01BWF9QQVJNUyA0CiBzdGF0aWMgTElTVF9IRUFEKHNtaV9pbmZvcyk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChzbWlfaW5mb3NfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKHNtaV9pbmZvc19sb2NrKTsKIHN0YXRpYyBpbnQgc21pX251bTsgLyogVXNlZCB0byBzZXF1ZW5jZSB0aGUgU01JcyAqLwogCiAjZGVmaW5lIERFRkFVTFRfUkVHU1BBQ0lORwkxCkBAIC0xMTU3LDIwICsxMTg0LDIwIEBACiBzdGF0aWMgdm9pZCBwb3J0X2NsZWFudXAoc3RydWN0IHNtaV9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIGludCBhZGRyID0gaW5mby0+aW8uYWRkcl9kYXRhOwotCWludCAgICAgICAgICBtYXBzaXplOworCWludCAgICAgICAgICBpZHg7CiAKIAlpZiAoYWRkcikgewotCQltYXBzaXplID0gKChpbmZvLT5pb19zaXplICogaW5mby0+aW8ucmVnc3BhY2luZykKLQkJCSAgIC0gKGluZm8tPmlvLnJlZ3NwYWNpbmcgLSBpbmZvLT5pby5yZWdzaXplKSk7Ci0KLQkJcmVsZWFzZV9yZWdpb24gKGFkZHIsIG1hcHNpemUpOworCSAgCWZvciAoaWR4ID0gMDsgaWR4IDwgaW5mby0+aW9fc2l6ZTsgaWR4KyspIHsKKwkJCXJlbGVhc2VfcmVnaW9uKGFkZHIgKyBpZHggKiBpbmZvLT5pby5yZWdzcGFjaW5nLAorCQkJCSAgICAgICBpbmZvLT5pby5yZWdzaXplKTsKKwkJfQogCX0KIH0KIAogc3RhdGljIGludCBwb3J0X3NldHVwKHN0cnVjdCBzbWlfaW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgYWRkciA9IGluZm8tPmlvLmFkZHJfZGF0YTsKLQlpbnQgICAgICAgICAgbWFwc2l6ZTsKKwlpbnQgICAgICAgICAgaWR4OwogCiAJaWYgKCFhZGRyKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTExOTgsMTYgKzEyMjUsMjIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogQ2FsY3VsYXRlIHRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHRvIGNsYWltLiAgVGhpcyBpcyBhbgotCSAqIHVudXN1YWwgbG9va2luZyBjYWxjdWxhdGlvbiwgYnV0IGl0IGF2b2lkcyBjbGFpbWluZyBhbnkKLQkgKiBtb3JlIG1lbW9yeSB0aGFuIGl0IGhhcyB0by4gIEl0IHdpbGwgY2xhaW0gZXZlcnl0aGluZwotCSAqIGJldHdlZW4gdGhlIGZpcnN0IGFkZHJlc3MgdG8gdGhlIGVuZCBvZiB0aGUgbGFzdCBmdWxsCi0JICogcmVnaXN0ZXIuICovCi0JbWFwc2l6ZSA9ICgoaW5mby0+aW9fc2l6ZSAqIGluZm8tPmlvLnJlZ3NwYWNpbmcpCi0JCSAgIC0gKGluZm8tPmlvLnJlZ3NwYWNpbmcgLSBpbmZvLT5pby5yZWdzaXplKSk7Ci0KLQlpZiAocmVxdWVzdF9yZWdpb24oYWRkciwgbWFwc2l6ZSwgREVWSUNFX05BTUUpID09IE5VTEwpCi0JCXJldHVybiAtRUlPOworCS8qIFNvbWUgQklPU2VzIHJlc2VydmUgZGlzam9pbnQgSS9PIHJlZ2lvbnMgaW4gdGhlaXIgQUNQSQorCSAqIHRhYmxlcy4gIFRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4gdHJ5aW5nIHRvIHJlZ2lzdGVyIHRoZQorCSAqIGVudGlyZSBJL08gcmVnaW9uLiAgVGhlcmVmb3JlIHdlIG11c3QgcmVnaXN0ZXIgZWFjaCBJL08KKwkgKiBwb3J0IHNlcGFyYXRlbHkuCisJICovCisgIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGluZm8tPmlvX3NpemU7IGlkeCsrKSB7CisJCWlmIChyZXF1ZXN0X3JlZ2lvbihhZGRyICsgaWR4ICogaW5mby0+aW8ucmVnc3BhY2luZywKKwkJCQkgICBpbmZvLT5pby5yZWdzaXplLCBERVZJQ0VfTkFNRSkgPT0gTlVMTCkgeworCQkJLyogVW5kbyBhbGxvY2F0aW9ucyAqLworCQkJd2hpbGUgKGlkeC0tKSB7CisJCQkJcmVsZWFzZV9yZWdpb24oYWRkciArIGlkeCAqIGluZm8tPmlvLnJlZ3NwYWNpbmcsCisJCQkJCSAgICAgICBpbmZvLT5pby5yZWdzaXplKTsKKwkJCX0KKwkJCXJldHVybiAtRUlPOworCQl9CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yMTYyLDE2ICsyMTk1LDIwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl90aW1lcl9hbmRfdGhyZWFkKHN0cnVjdCBzbWlfaW5mbyAqc21pX2luZm8pCiB7Ci0JaWYgKHNtaV9pbmZvLT50aHJlYWQgIT0gTlVMTCAmJiBzbWlfaW5mby0+dGhyZWFkICE9IEVSUl9QVFIoLUVOT01FTSkpCi0JCWt0aHJlYWRfc3RvcChzbWlfaW5mby0+dGhyZWFkKTsKLQlkZWxfdGltZXJfc3luYygmc21pX2luZm8tPnNpX3RpbWVyKTsKKwlpZiAoc21pX2luZm8tPmludGYpIHsKKwkJLyogVGhlIHRpbWVyIGFuZCB0aHJlYWQgYXJlIG9ubHkgcnVubmluZyBpZiB0aGUKKwkJICAgaW50ZXJmYWNlIGhhcyBiZWVuIHN0YXJ0ZWQgdXAgYW5kIHJlZ2lzdGVyZWQuICovCisJCWlmIChzbWlfaW5mby0+dGhyZWFkICE9IE5VTEwpCisJCQlrdGhyZWFkX3N0b3Aoc21pX2luZm8tPnRocmVhZCk7CisJCWRlbF90aW1lcl9zeW5jKCZzbWlfaW5mby0+c2lfdGltZXIpOworCX0KIH0KIAotc3RhdGljIHN0cnVjdCBpcG1pX2RlZmF1bHRfdmFscworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IGlwbWlfZGVmYXVsdF92YWxzCiB7CiAJaW50IHR5cGU7CiAJaW50IHBvcnQ7Ci19IF9fZGV2aW5pdCBpcG1pX2RlZmF1bHRzW10gPQorfSBpcG1pX2RlZmF1bHRzW10gPQogewogCXsgLnR5cGUgPSBTSV9LQ1MsIC5wb3J0ID0gMHhjYTIgfSwKIAl7IC50eXBlID0gU0lfU01JQywgLnBvcnQgPSAweGNhOSB9LApAQCAtMjI0NSw3ICsyMjgyLDcgQEAKIAkJICAgICAgIG5ld19zbWktPnNsYXZlX2FkZHIsIG5ld19zbWktPmlycSk7CiAJfQogCi0JZG93bigmc21pX2luZm9zX2xvY2spOworCW11dGV4X2xvY2soJnNtaV9pbmZvc19sb2NrKTsKIAlpZiAoIWlzX25ld19pbnRlcmZhY2UobmV3X3NtaSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXBtaV9zaTogZHVwbGljYXRlIGludGVyZmFjZVxuIik7CiAJCXJ2ID0gLUVCVVNZOwpAQCAtMjM0MSwyMSArMjM3OCw2IEBACiAJaWYgKG5ld19zbWktPmlycSkKIAkJbmV3X3NtaS0+c2lfc3RhdGUgPSBTSV9DTEVBUklOR19GTEFHU19USEVOX1NFVF9JUlE7CiAKLQkvKiBUaGUgaXBtaV9yZWdpc3Rlcl9zbWkoKSBjb2RlIGRvZXMgc29tZSBvcGVyYXRpb25zIHRvCi0JICAgZGV0ZXJtaW5lIHRoZSBjaGFubmVsIGluZm9ybWF0aW9uLCBzbyB3ZSBtdXN0IGJlIHJlYWR5IHRvCi0JICAgaGFuZGxlIG9wZXJhdGlvbnMgYmVmb3JlIGl0IGlzIGNhbGxlZC4gIFRoaXMgbWVhbnMgd2UgaGF2ZQotCSAgIHRvIHN0b3AgdGhlIHRpbWVyIGlmIHdlIGdldCBhbiBlcnJvciBhZnRlciB0aGlzIHBvaW50LiAqLwotCWluaXRfdGltZXIoJihuZXdfc21pLT5zaV90aW1lcikpOwotCW5ld19zbWktPnNpX3RpbWVyLmRhdGEgPSAobG9uZykgbmV3X3NtaTsKLQluZXdfc21pLT5zaV90aW1lci5mdW5jdGlvbiA9IHNtaV90aW1lb3V0OwotCW5ld19zbWktPmxhc3RfdGltZW91dF9qaWZmaWVzID0gamlmZmllczsKLQluZXdfc21pLT5zaV90aW1lci5leHBpcmVzID0gamlmZmllcyArIFNJX1RJTUVPVVRfSklGRklFUzsKLQotCWFkZF90aW1lcigmKG5ld19zbWktPnNpX3RpbWVyKSk7Ci0gCWlmIChuZXdfc21pLT5zaV90eXBlICE9IFNJX0JUKQotCQluZXdfc21pLT50aHJlYWQgPSBrdGhyZWFkX3J1bihpcG1pX3RocmVhZCwgbmV3X3NtaSwKLQkJCQkJICAgICAgImtpcG1pJWQiLCBuZXdfc21pLT5pbnRmX251bSk7Ci0KIAlpZiAoIW5ld19zbWktPmRldikgewogCQkvKiBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYSBkZXZpY2UgZnJvbSBzb21ldGhpbmcKIAkJICogZWxzZSAobGlrZSBQQ0kpLCB0aGVuIHJlZ2lzdGVyIGEgbmV3IG9uZS4gKi8KQEAgLTIzNjUsNyArMjM4Nyw3IEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiaXBtaV9zaV9pbnRmOiIKIAkJCSAgICAgICAiIFVuYWJsZSB0byBhbGxvY2F0ZSBwbGF0Zm9ybSBkZXZpY2VcbiIpOwotCQkJZ290byBvdXRfZXJyX3N0b3BfdGltZXI7CisJCQlnb3RvIG91dF9lcnI7CiAJCX0KIAkJbmV3X3NtaS0+ZGV2ID0gJm5ld19zbWktPnBkZXYtPmRldjsKIAkJbmV3X3NtaS0+ZGV2LT5kcml2ZXIgPSAmaXBtaV9kcml2ZXI7CkBAIC0yMzc3LDcgKzIzOTksNyBAQAogCQkJICAgICAgICIgVW5hYmxlIHRvIHJlZ2lzdGVyIHN5c3RlbSBpbnRlcmZhY2UgZGV2aWNlOiIKIAkJCSAgICAgICAiICVkXG4iLAogCQkJICAgICAgIHJ2KTsKLQkJCWdvdG8gb3V0X2Vycl9zdG9wX3RpbWVyOworCQkJZ290byBvdXRfZXJyOwogCQl9CiAJCW5ld19zbWktPmRldl9yZWdpc3RlcmVkID0gMTsKIAl9CkBAIC0yMzg2LDggKzI0MDgsNyBAQAogCQkJICAgICAgIG5ld19zbWksCiAJCQkgICAgICAgJm5ld19zbWktPmRldmljZV9pZCwKIAkJCSAgICAgICBuZXdfc21pLT5kZXYsCi0JCQkgICAgICAgbmV3X3NtaS0+c2xhdmVfYWRkciwKLQkJCSAgICAgICAmKG5ld19zbWktPmludGYpKTsKKwkJCSAgICAgICBuZXdfc21pLT5zbGF2ZV9hZGRyKTsKIAlpZiAocnYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiaXBtaV9zaTogVW5hYmxlIHRvIHJlZ2lzdGVyIGRldmljZTogZXJyb3IgJWRcbiIsCkBAIC0yNDE3LDcgKzI0MzgsNyBAQAogCiAJbGlzdF9hZGRfdGFpbCgmbmV3X3NtaS0+bGluaywgJnNtaV9pbmZvcyk7CiAKLQl1cCgmc21pX2luZm9zX2xvY2spOworCW11dGV4X3VubG9jaygmc21pX2luZm9zX2xvY2spOwogCiAJcHJpbnRrKCIgSVBNSSAlcyBpbnRlcmZhY2UgaW5pdGlhbGl6ZWRcbiIsc2lfdG9fc3RyW25ld19zbWktPnNpX3R5cGVdKTsKIApAQCAtMjQ1NCw3ICsyNDc1LDcgQEAKIAogCWtmcmVlKG5ld19zbWkpOwogCi0JdXAoJnNtaV9pbmZvc19sb2NrKTsKKwltdXRleF91bmxvY2soJnNtaV9pbmZvc19sb2NrKTsKIAogCXJldHVybiBydjsKIH0KQEAgLTI1MTIsMjYgKzI1MzMsMjYgQEAKICNlbmRpZgogCiAJaWYgKHNpX3RyeWRlZmF1bHRzKSB7Ci0JCWRvd24oJnNtaV9pbmZvc19sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc21pX2luZm9zX2xvY2spOwogCQlpZiAobGlzdF9lbXB0eSgmc21pX2luZm9zKSkgewogCQkJLyogTm8gQk1DIHdhcyBmb3VuZCwgdHJ5IGRlZmF1bHRzLiAqLwotCQkJdXAoJnNtaV9pbmZvc19sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmc21pX2luZm9zX2xvY2spOwogCQkJZGVmYXVsdF9maW5kX2JtYygpOwogCQl9IGVsc2UgewotCQkJdXAoJnNtaV9pbmZvc19sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmc21pX2luZm9zX2xvY2spOwogCQl9CiAJfQogCi0JZG93bigmc21pX2luZm9zX2xvY2spOworCW11dGV4X2xvY2soJnNtaV9pbmZvc19sb2NrKTsKIAlpZiAobGlzdF9lbXB0eSgmc21pX2luZm9zKSkgewotCQl1cCgmc21pX2luZm9zX2xvY2spOworCQltdXRleF91bmxvY2soJnNtaV9pbmZvc19sb2NrKTsKICNpZmRlZiBDT05GSUdfUENJCiAJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXBtaV9wY2lfZHJpdmVyKTsKICNlbmRpZgogCQlwcmludGsoImlwbWlfc2k6IFVuYWJsZSB0byBmaW5kIGFueSBTeXN0ZW0gSW50ZXJmYWNlKHMpXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIHsKLQkJdXAoJnNtaV9pbmZvc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbWlfaW5mb3NfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIH0KQEAgLTI2MDcsMTAgKzI2MjgsMTAgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwbWlfcGNpX2RyaXZlcik7CiAjZW5kaWYKIAotCWRvd24oJnNtaV9pbmZvc19sb2NrKTsKKwltdXRleF9sb2NrKCZzbWlfaW5mb3NfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHRtcF9lLCAmc21pX2luZm9zLCBsaW5rKQogCQljbGVhbnVwX29uZV9zaShlKTsKLQl1cCgmc21pX2luZm9zX2xvY2spOworCW11dGV4X3VubG9jaygmc21pX2luZm9zX2xvY2spOwogCiAJZHJpdmVyX3VucmVnaXN0ZXIoJmlwbWlfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYwppbmRleCA3ZWNlOWYzLi4yZDExZGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTMwMywyMSArMzA0LDIyIEBACiBzdGF0aWMgdm9pZCBwYW5pY19oYWx0X2lwbWlfaGVhcnRiZWF0KHZvaWQpOwogCiAKLS8qIFdlIHVzZSBhIHNlbWFwaG9yZSB0byBtYWtlIHN1cmUgdGhhdCBvbmx5IG9uZSB0aGluZyBjYW4gc2VuZCBhIHNldAorLyogV2UgdXNlIGEgbXV0ZXggdG8gbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgdGhpbmcgY2FuIHNlbmQgYSBzZXQKICAgIHRpbWVvdXQgYXQgb25lIHRpbWUsIGJlY2F1c2Ugd2Ugb25seSBoYXZlIG9uZSBjb3B5IG9mIHRoZSBkYXRhLgotICAgVGhlIHNlbWFwaG9yZSBpcyBjbGFpbWVkIHdoZW4gdGhlIHNldF90aW1lb3V0IGlzIHNlbnQgYW5kIGZyZWVkCisgICBUaGUgbXV0ZXggaXMgY2xhaW1lZCB3aGVuIHRoZSBzZXRfdGltZW91dCBpcyBzZW50IGFuZCBmcmVlZAogICAgd2hlbiBib3RoIG1lc3NhZ2VzIGFyZSBmcmVlLiAqLwogc3RhdGljIGF0b21pY190IHNldF90aW1lb3V0X3RvZnJlZSA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIERFQ0xBUkVfTVVURVgoc2V0X3RpbWVvdXRfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKHNldF90aW1lb3V0X2xvY2spOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihzZXRfdGltZW91dF93YWl0KTsKIHN0YXRpYyB2b2lkIHNldF90aW1lb3V0X2ZyZWVfc21pKHN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZykKIHsKICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2V0X3RpbWVvdXRfdG9mcmVlKSkKLQkgICAgdXAoJnNldF90aW1lb3V0X2xvY2spOworCSAgICBjb21wbGV0ZSgmc2V0X3RpbWVvdXRfd2FpdCk7CiB9CiBzdGF0aWMgdm9pZCBzZXRfdGltZW91dF9mcmVlX3JlY3Yoc3RydWN0IGlwbWlfcmVjdl9tc2cgKm1zZykKIHsKICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2V0X3RpbWVvdXRfdG9mcmVlKSkKLQkgICAgdXAoJnNldF90aW1lb3V0X2xvY2spOworCSAgICBjb21wbGV0ZSgmc2V0X3RpbWVvdXRfd2FpdCk7CiB9CiBzdGF0aWMgc3RydWN0IGlwbWlfc21pX21zZyBzZXRfdGltZW91dF9zbWlfbXNnID0KIHsKQEAgLTM5OSw3ICs0MDEsNyBAQAogCiAKIAkvKiBXZSBjYW4gb25seSBzZW5kIG9uZSBvZiB0aGVzZSBhdCBhIHRpbWUuICovCi0JZG93bigmc2V0X3RpbWVvdXRfbG9jayk7CisJbXV0ZXhfbG9jaygmc2V0X3RpbWVvdXRfbG9jayk7CiAKIAlhdG9taWNfc2V0KCZzZXRfdGltZW91dF90b2ZyZWUsIDIpOwogCkBAIC00MDcsMTYgKzQwOSwyMSBAQAogCQkJCSZzZXRfdGltZW91dF9yZWN2X21zZywKIAkJCQkmc2VuZF9oZWFydGJlYXRfbm93KTsKIAlpZiAocnYpIHsKLQkJdXAoJnNldF90aW1lb3V0X2xvY2spOwotCX0gZWxzZSB7Ci0JCWlmICgoZG9faGVhcnRiZWF0ID09IElQTUlfU0VUX1RJTUVPVVRfRk9SQ0VfSEIpCi0JCSAgICB8fCAoKHNlbmRfaGVhcnRiZWF0X25vdykKLQkJCSYmIChkb19oZWFydGJlYXQgPT0gSVBNSV9TRVRfVElNRU9VVF9IQl9JRl9ORUNFU1NBUlkpKSkKLQkJewotCQkJcnYgPSBpcG1pX2hlYXJ0YmVhdCgpOwotCQl9CisJCW11dGV4X3VubG9jaygmc2V0X3RpbWVvdXRfbG9jayk7CisJCWdvdG8gb3V0OwogCX0KIAorCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNldF90aW1lb3V0X3dhaXQpOworCisJaWYgKChkb19oZWFydGJlYXQgPT0gSVBNSV9TRVRfVElNRU9VVF9GT1JDRV9IQikKKwkgICAgfHwgKChzZW5kX2hlYXJ0YmVhdF9ub3cpCisJCSYmIChkb19oZWFydGJlYXQgPT0gSVBNSV9TRVRfVElNRU9VVF9IQl9JRl9ORUNFU1NBUlkpKSkKKwl7CisJCXJ2ID0gaXBtaV9oZWFydGJlYXQoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzZXRfdGltZW91dF9sb2NrKTsKKworb3V0OgogCXJldHVybiBydjsKIH0KIApAQCAtNDU4LDE3ICs0NjUsMTcgQEAKICAgIFRoZSBzZW1hcGhvcmUgaXMgY2xhaW1lZCB3aGVuIHRoZSBzZXRfdGltZW91dCBpcyBzZW50IGFuZCBmcmVlZAogICAgd2hlbiBib3RoIG1lc3NhZ2VzIGFyZSBmcmVlLiAqLwogc3RhdGljIGF0b21pY190IGhlYXJ0YmVhdF90b2ZyZWUgPSBBVE9NSUNfSU5JVCgwKTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKGhlYXJ0YmVhdF9sb2NrKTsKLXN0YXRpYyBERUNMQVJFX01VVEVYX0xPQ0tFRChoZWFydGJlYXRfd2FpdF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaGVhcnRiZWF0X2xvY2spOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihoZWFydGJlYXRfd2FpdCk7CiBzdGF0aWMgdm9pZCBoZWFydGJlYXRfZnJlZV9zbWkoc3RydWN0IGlwbWlfc21pX21zZyAqbXNnKQogewogICAgIGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZoZWFydGJlYXRfdG9mcmVlKSkKLQkgICAgdXAoJmhlYXJ0YmVhdF93YWl0X2xvY2spOworCSAgICBjb21wbGV0ZSgmaGVhcnRiZWF0X3dhaXQpOwogfQogc3RhdGljIHZvaWQgaGVhcnRiZWF0X2ZyZWVfcmVjdihzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqbXNnKQogewogICAgIGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZoZWFydGJlYXRfdG9mcmVlKSkKLQkgICAgdXAoJmhlYXJ0YmVhdF93YWl0X2xvY2spOworCSAgICBjb21wbGV0ZSgmaGVhcnRiZWF0X3dhaXQpOwogfQogc3RhdGljIHN0cnVjdCBpcG1pX3NtaV9tc2cgaGVhcnRiZWF0X3NtaV9tc2cgPQogewpAQCAtNTExLDE0ICs1MTgsMTQgQEAKIAkJcmV0dXJuIGlwbWlfc2V0X3RpbWVvdXQoSVBNSV9TRVRfVElNRU9VVF9IQl9JRl9ORUNFU1NBUlkpOwogCX0KIAotCWRvd24oJmhlYXJ0YmVhdF9sb2NrKTsKKwltdXRleF9sb2NrKCZoZWFydGJlYXRfbG9jayk7CiAKIAlhdG9taWNfc2V0KCZoZWFydGJlYXRfdG9mcmVlLCAyKTsKIAogCS8qIERvbid0IHJlc2V0IHRoZSB0aW1lciBpZiB3ZSBoYXZlIHRoZSB0aW1lciB0dXJuZWQgb2ZmLCB0aGF0CiAgICAgICAgICAgIHJlLWVuYWJsZXMgdGhlIHdhdGNoZG9nLiAqLwogCWlmIChpcG1pX3dhdGNoZG9nX3N0YXRlID09IFdET0dfVElNRU9VVF9OT05FKSB7Ci0JCXVwKCZoZWFydGJlYXRfbG9jayk7CisJCW11dGV4X3VubG9jaygmaGVhcnRiZWF0X2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUzOSwxNCArNTQ2LDE0IEBACiAJCQkJICAgICAgJmhlYXJ0YmVhdF9yZWN2X21zZywKIAkJCQkgICAgICAxKTsKIAlpZiAocnYpIHsKLQkJdXAoJmhlYXJ0YmVhdF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZoZWFydGJlYXRfbG9jayk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJoZWFydGJlYXQgZmFpbHVyZTogJWRcbiIsCiAJCSAgICAgICBydik7CiAJCXJldHVybiBydjsKIAl9CiAKIAkvKiBXYWl0IGZvciB0aGUgaGVhcnRiZWF0IHRvIGJlIHNlbnQuICovCi0JZG93bigmaGVhcnRiZWF0X3dhaXRfbG9jayk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmaGVhcnRiZWF0X3dhaXQpOwogCiAJaWYgKGhlYXJ0YmVhdF9yZWN2X21zZy5tc2cuZGF0YVswXSAhPSAwKSB7CiAJICAgIC8qIEdvdCBhbiBlcnJvciBpbiB0aGUgaGVhcnRiZWF0IHJlc3BvbnNlLiAgSXQgd2FzIGFscmVhZHkKQEAgLTU1NSw3ICs1NjIsNyBAQAogCSAgICBydiA9IC1FSU5WQUw7CiAJfQogCi0JdXAoJmhlYXJ0YmVhdF9sb2NrKTsKKwltdXRleF91bmxvY2soJmhlYXJ0YmVhdF9sb2NrKTsKIAogCXJldHVybiBydjsKIH0KQEAgLTU4OSw3ICs1OTYsNyBAQAogCQkJCSAxKTsKIH0KIAotc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50PQorc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0KIHsKIAkub3B0aW9ucwk9IDAsCS8qIFdESU9GX1NFVFRJTUVPVVQsICovCiAJLmZpcm13YXJlX3ZlcnNpb24gPSAxLApAQCAtNzkwLDEzICs3OTcsMTMgQEAKIAogc3RhdGljIGludCBpcG1pX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCiB7Ci0JaWYgKGltaW5vcihpbm8pPT1XQVRDSERPR19NSU5PUikKLQl7CisJaWYgKGltaW5vcihpbm8pID09IFdBVENIRE9HX01JTk9SKSB7CiAJCWlmIChleHBlY3RfY2xvc2UgPT0gNDIpIHsKIAkJCWlwbWlfd2F0Y2hkb2dfc3RhdGUgPSBXRE9HX1RJTUVPVVRfTk9ORTsKIAkJCWlwbWlfc2V0X3RpbWVvdXQoSVBNSV9TRVRfVElNRU9VVF9OT19IQik7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9DUklUIFBGWCAiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJICAgICAgICJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKIAkJCWlwbWlfaGVhcnRiZWF0KCk7CiAJCX0KIAkJY2xlYXJfYml0KDAsICZpcG1pX3dkb2dfb3Blbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKaW5kZXggZTUyNDdmOC4uZWYyMGMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYwpAQCAtNzA2LDcgKzcwNiw2IEBACiBzdGF0aWMgaW50CXN0bGlfY2xycG9ydHN0YXRzKHN0bGlwb3J0X3QgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApOwogc3RhdGljIGludAlzdGxpX2dldHBvcnRzdHJ1Y3Qoc3RsaXBvcnRfdCBfX3VzZXIgKmFyZyk7CiBzdGF0aWMgaW50CXN0bGlfZ2V0YnJkc3RydWN0KHN0bGlicmRfdCBfX3VzZXIgKmFyZyk7Ci1zdGF0aWMgdm9pZAkqc3RsaV9tZW1hbGxvYyhpbnQgbGVuKTsKIHN0YXRpYyBzdGxpYnJkX3QgKnN0bGlfYWxsb2NicmQodm9pZCk7CiAKIHN0YXRpYyB2b2lkCXN0bGlfZWNwaW5pdChzdGxpYnJkX3QgKmJyZHApOwpAQCAtOTk3LDE3ICs5OTYsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qCi0gKglMb2NhbCBkcml2ZXIga2VybmVsIG1hbGxvYyByb3V0aW5lLgotICovCi0KLXN0YXRpYyB2b2lkICpzdGxpX21lbWFsbG9jKGludCBsZW4pCi17Ci0JcmV0dXJuKCh2b2lkICopIGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogc3RhdGljIGludCBzdGxpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RsaWJyZF90CSpicmRwOwpAQCAtMzIyNywxMyArMzIxNSwxMiBAQAogI2VuZGlmCiAKIAlmb3IgKGkgPSAwLCBwYW5lbG5yID0gMCwgcGFuZWxwb3J0ID0gMDsgKGkgPCBicmRwLT5ucnBvcnRzKTsgaSsrKSB7Ci0JCXBvcnRwID0gKHN0bGlwb3J0X3QgKikgc3RsaV9tZW1hbGxvYyhzaXplb2Yoc3RsaXBvcnRfdCkpOwotCQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkgeworCQlwb3J0cCA9IGt6YWxsb2Moc2l6ZW9mKHN0bGlwb3J0X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0cCkgewogCQkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIGFsbG9jYXRlIHBvcnQgc3RydWN0dXJlXG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbWVtc2V0KHBvcnRwLCAwLCBzaXplb2Yoc3RsaXBvcnRfdCkpOwogCQlwb3J0cC0+bWFnaWMgPSBTVExJX1BPUlRNQUdJQzsKIAkJcG9ydHAtPnBvcnRuciA9IGk7CiAJCXBvcnRwLT5icmRuciA9IGJyZHAtPmJyZG5yOwpAQCAtNDYxMCwxNCArNDU5NywxMyBAQAogewogCXN0bGlicmRfdAkqYnJkcDsKIAotCWJyZHAgPSAoc3RsaWJyZF90ICopIHN0bGlfbWVtYWxsb2Moc2l6ZW9mKHN0bGlicmRfdCkpOwotCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkgeworCWJyZHAgPSBremFsbG9jKHNpemVvZihzdGxpYnJkX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJyZHApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAiCiAJCQkJIihzaXplPSVkKVxuIiwgc2l6ZW9mKHN0bGlicmRfdCkpOwotCQlyZXR1cm4oKHN0bGlicmRfdCAqKSBOVUxMKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbWVtc2V0KGJyZHAsIDAsIHNpemVvZihzdGxpYnJkX3QpKTsKIAlicmRwLT5tYWdpYyA9IFNUTElfQk9BUkRNQUdJQzsKIAlyZXR1cm4oYnJkcCk7CiB9CkBAIC01MjEwLDEyICs1MTk2LDEyIEBACiAvKgogICoJQWxsb2NhdGUgYSB0ZW1wb3Jhcnkgd3JpdGUgYnVmZmVyLgogICovCi0Jc3RsaV90bXB3cml0ZWJ1ZiA9IChjaGFyICopIHN0bGlfbWVtYWxsb2MoU1RMSV9UWEJVRlNJWkUpOwotCWlmIChzdGxpX3RtcHdyaXRlYnVmID09IChjaGFyICopIE5VTEwpCisJc3RsaV90bXB3cml0ZWJ1ZiA9IGttYWxsb2MoU1RMSV9UWEJVRlNJWkUsIEdGUF9LRVJORUwpOworCWlmICghc3RsaV90bXB3cml0ZWJ1ZikKIAkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAiCiAJCQkJIihzaXplPSVkKVxuIiwgU1RMSV9UWEJVRlNJWkUpOwotCXN0bGlfdHhjb29rYnVmID0gc3RsaV9tZW1hbGxvYyhTVExJX1RYQlVGU0laRSk7Ci0JaWYgKHN0bGlfdHhjb29rYnVmID09IChjaGFyICopIE5VTEwpCisJc3RsaV90eGNvb2tidWYgPSBrbWFsbG9jKFNUTElfVFhCVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0bGlfdHhjb29rYnVmKQogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5ICIKIAkJCQkiKHNpemU9JWQpXG4iLCBTVExJX1RYQlVGU0laRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKaW5kZXggOGI2MDNiMi4uNTc1NWI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAlrX3NlbGYsCQlrX2ZuLAkJa19zcGVjLAkJa19wYWQsXAogCWtfZGVhZCwJCWtfY29ucywJCWtfY3VyLAkJa19zaGlmdCxcCiAJa19tZXRhLAkJa19hc2NpaSwJa19sb2NrLAkJa19sb3dlcmNhc2UsXAotCWtfc2xvY2ssCWtfZGVhZDIsCWtfaWdub3JlLAlrX2lnbm9yZQorCWtfc2xvY2ssCWtfZGVhZDIsCWtfYnJsLAkJa19pZ25vcmUKIAogdHlwZWRlZiB2b2lkIChrX2hhbmRsZXJfZm4pKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciB2YWx1ZSwKIAkJCSAgICBjaGFyIHVwX2ZsYWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogY29uc3QgaW50IG1heF92YWxzW10gPSB7CiAJMjU1LCBBUlJBWV9TSVpFKGZ1bmNfdGFibGUpIC0gMSwgQVJSQVlfU0laRShmbl9oYW5kbGVyKSAtIDEsIE5SX1BBRCAtIDEsCiAJTlJfREVBRCAtIDEsIDI1NSwgMywgTlJfU0hJRlQgLSAxLCAyNTUsIE5SX0FTQ0lJIC0gMSwgTlJfTE9DSyAtIDEsCi0JMjU1LCBOUl9MT0NLIC0gMSwgMjU1CisJMjU1LCBOUl9MT0NLIC0gMSwgMjU1LCBOUl9CUkwgLSAxCiB9OwogCiBjb25zdCBpbnQgTlJfVFlQRVMgPSBBUlJBWV9TSVpFKG1heF92YWxzKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgc2hpZnRfZG93bltOUl9TSElGVF07CQkvKiBzaGlmdCBzdGF0ZSBjb3VudGVycy4uICovCiBzdGF0aWMgaW50IGRlYWRfa2V5X25leHQ7CiBzdGF0aWMgaW50IG5wYWRjaCA9IC0xOwkJCQkJLyogLTEgb3IgbnVtYmVyIGFzc2VtYmxlZCBvbiBwYWQgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRpYWNyOworc3RhdGljIHVuc2lnbmVkIGludCBkaWFjcjsKIHN0YXRpYyBjaGFyIHJlcDsJCQkJCS8qIGZsYWcgdGVsbGluZyBjaGFyYWN0ZXIgcmVwZWF0ICovCiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZHN0YXRlID0gMHhmZjsJCQkvKiB1bmRlZmluZWQgKi8KQEAgLTM5NCwyMiArMzk0LDMwIEBACiAgKiBPdGhlcndpc2UsIGNvbmNsdWRlIHRoYXQgRElBQ1Igd2FzIG5vdCBjb21iaW5pbmcgYWZ0ZXIgYWxsLAogICogcXVldWUgaXQgYW5kIHJldHVybiBDSC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgaGFuZGxlX2RpYWNyKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciBjaCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFuZGxlX2RpYWNyKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IGNoKQogewotCWludCBkID0gZGlhY3I7CisJdW5zaWduZWQgaW50IGQgPSBkaWFjcjsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWRpYWNyID0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBhY2NlbnRfdGFibGVfc2l6ZTsgaSsrKSB7Ci0JCWlmIChhY2NlbnRfdGFibGVbaV0uZGlhY3IgPT0gZCAmJiBhY2NlbnRfdGFibGVbaV0uYmFzZSA9PSBjaCkKLQkJCXJldHVybiBhY2NlbnRfdGFibGVbaV0ucmVzdWx0OworCWlmICgoZCAmIH4weGZmKSA9PSBCUkxfVUNfUk9XKSB7CisJCWlmICgoY2ggJiB+MHhmZikgPT0gQlJMX1VDX1JPVykKKwkJCXJldHVybiBkIHwgY2g7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGFjY2VudF90YWJsZV9zaXplOyBpKyspCisJCQlpZiAoYWNjZW50X3RhYmxlW2ldLmRpYWNyID09IGQgJiYgYWNjZW50X3RhYmxlW2ldLmJhc2UgPT0gY2gpCisJCQkJcmV0dXJuIGFjY2VudF90YWJsZVtpXS5yZXN1bHQ7CiAJfQogCi0JaWYgKGNoID09ICcgJyB8fCBjaCA9PSBkKQorCWlmIChjaCA9PSAnICcgfHwgY2ggPT0gKEJSTF9VQ19ST1d8MCkgfHwgY2ggPT0gZCkKIAkJcmV0dXJuIGQ7CiAKLQlwdXRfcXVldWUodmMsIGQpOworCWlmIChrYmQtPmtiZG1vZGUgPT0gVkNfVU5JQ09ERSkKKwkJdG9fdXRmOCh2YywgZCk7CisJZWxzZSBpZiAoZCA8IDB4MTAwKQorCQlwdXRfcXVldWUodmMsIGQpOworCiAJcmV0dXJuIGNoOwogfQogCkBAIC00MTksNyArNDI3LDEwIEBACiBzdGF0aWMgdm9pZCBmbl9lbnRlcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlmIChkaWFjcikgewotCQlwdXRfcXVldWUodmMsIGRpYWNyKTsKKwkJaWYgKGtiZC0+a2JkbW9kZSA9PSBWQ19VTklDT0RFKQorCQkJdG9fdXRmOCh2YywgZGlhY3IpOworCQllbHNlIGlmIChkaWFjciA8IDB4MTAwKQorCQkJcHV0X3F1ZXVlKHZjLCBkaWFjcik7CiAJCWRpYWNyID0gMDsKIAl9CiAJcHV0X3F1ZXVlKHZjLCAxMyk7CkBAIC02MTUsNyArNjI2LDcgQEAKIAlwcmludGsoS0VSTl9FUlIgImtleWJvYXJkLmM6IGtfbG93ZXJjYXNlIHdhcyBjYWxsZWQgLSBpbXBvc3NpYmxlXG4iKTsKIH0KIAotc3RhdGljIHZvaWQga19zZWxmKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciB2YWx1ZSwgY2hhciB1cF9mbGFnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGtfdW5pY29kZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCB2YWx1ZSwgY2hhciB1cF9mbGFnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpZiAodXBfZmxhZykKIAkJcmV0dXJuOwkJLyogbm8gYWN0aW9uLCBpZiB0aGlzIGlzIGEga2V5IHJlbGVhc2UgKi8KQEAgLTYyOCw3ICs2MzksMTAgQEAKIAkJZGlhY3IgPSB2YWx1ZTsKIAkJcmV0dXJuOwogCX0KLQlwdXRfcXVldWUodmMsIHZhbHVlKTsKKwlpZiAoa2JkLT5rYmRtb2RlID09IFZDX1VOSUNPREUpCisJCXRvX3V0ZjgodmMsIHZhbHVlKTsKKwllbHNlIGlmICh2YWx1ZSA8IDB4MTAwKQorCQlwdXRfcXVldWUodmMsIHZhbHVlKTsKIH0KIAogLyoKQEAgLTYzNiwxMyArNjUwLDIzIEBACiAgKiBkZWFkIGtleXMgbW9kaWZ5aW5nIHRoZSBzYW1lIGNoYXJhY3Rlci4gVmVyeSB1c2VmdWwKICAqIGZvciBWaWV0bmFtZXNlLgogICovCi1zdGF0aWMgdm9pZCBrX2RlYWQyKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciB2YWx1ZSwgY2hhciB1cF9mbGFnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGtfZGVhZHVuaWNvZGUoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgdmFsdWUsIGNoYXIgdXBfZmxhZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKHVwX2ZsYWcpCiAJCXJldHVybjsKIAlkaWFjciA9IChkaWFjciA/IGhhbmRsZV9kaWFjcih2YywgdmFsdWUpIDogdmFsdWUpOwogfQogCitzdGF0aWMgdm9pZCBrX3NlbGYoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBjaGFyIHZhbHVlLCBjaGFyIHVwX2ZsYWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWtfdW5pY29kZSh2YywgdmFsdWUsIHVwX2ZsYWcsIHJlZ3MpOworfQorCitzdGF0aWMgdm9pZCBrX2RlYWQyKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciB2YWx1ZSwgY2hhciB1cF9mbGFnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlrX2RlYWR1bmljb2RlKHZjLCB2YWx1ZSwgdXBfZmxhZywgcmVncyk7Cit9CisKIC8qCiAgKiBPYnNvbGV0ZSAtIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5CiAgKi8KQEAgLTY1MCw3ICs2NzQsNyBAQAogewogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJldF9kaWFjcltOUl9ERUFEXSA9IHsnYCcsICdcJycsICdeJywgJ34nLCAnIicsICcsJyB9OwogCXZhbHVlID0gcmV0X2RpYWNyW3ZhbHVlXTsKLQlrX2RlYWQyKHZjLCB2YWx1ZSwgdXBfZmxhZywgcmVncyk7CisJa19kZWFkdW5pY29kZSh2YywgdmFsdWUsIHVwX2ZsYWcsIHJlZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBrX2NvbnMoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBjaGFyIHZhbHVlLCBjaGFyIHVwX2ZsYWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtODM1LDYgKzg1OSw4MCBAQAogCX0KIH0KIAorLyogYnkgZGVmYXVsdCwgMzAwbXMgaW50ZXJ2YWwgZm9yIGNvbWJpbmF0aW9uIHJlbGVhc2UgKi8KK3N0YXRpYyB1bnNpZ25lZCBicmxfdGltZW91dCA9IDMwMDsKK01PRFVMRV9QQVJNX0RFU0MoYnJsX3RpbWVvdXQsICJCcmFpbGxlIGtleXMgcmVsZWFzZSBkZWxheSBpbiBtcyAoMCBmb3IgY29tbWl0IG9uIGZpcnN0IGtleSByZWxlYXNlKSIpOworbW9kdWxlX3BhcmFtKGJybF90aW1lb3V0LCB1aW50LCAwNjQ0KTsKKworc3RhdGljIHVuc2lnbmVkIGJybF9uYmNob3JkcyA9IDE7CitNT0RVTEVfUEFSTV9ERVNDKGJybF9uYmNob3JkcywgIk51bWJlciBvZiBjaG9yZHMgdGhhdCBwcm9kdWNlIGEgYnJhaWxsZSBwYXR0ZXJuICgwIGZvciBkZWFkIGNob3JkcykiKTsKK21vZHVsZV9wYXJhbShicmxfbmJjaG9yZHMsIHVpbnQsIDA2NDQpOworCitzdGF0aWMgdm9pZCBrX2JybGNvbW1pdChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCBwYXR0ZXJuLCBjaGFyIHVwX2ZsYWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGNob3JkczsKKwlzdGF0aWMgdW5zaWduZWQgY29tbWl0dGVkOworCisJaWYgKCFicmxfbmJjaG9yZHMpCisJCWtfZGVhZHVuaWNvZGUodmMsIEJSTF9VQ19ST1cgfCBwYXR0ZXJuLCB1cF9mbGFnLCByZWdzKTsKKwllbHNlIHsKKwkJY29tbWl0dGVkIHw9IHBhdHRlcm47CisJCWNob3JkcysrOworCQlpZiAoY2hvcmRzID09IGJybF9uYmNob3JkcykgeworCQkJa191bmljb2RlKHZjLCBCUkxfVUNfUk9XIHwgY29tbWl0dGVkLCB1cF9mbGFnLCByZWdzKTsKKwkJCWNob3JkcyA9IDA7CisJCQljb21taXR0ZWQgPSAwOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBrX2JybChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGNoYXIgdmFsdWUsIGNoYXIgdXBfZmxhZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RhdGljIHVuc2lnbmVkIHByZXNzZWQsY29tbWl0dGluZzsKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlc3RhcnQ7CisKKwlpZiAoa2JkLT5rYmRtb2RlICE9IFZDX1VOSUNPREUpIHsKKwkJaWYgKCF1cF9mbGFnKQorCQkJcHJpbnRrKCJrZXlib2FyZCBtb2RlIG11c3QgYmUgdW5pY29kZSBmb3IgYnJhaWxsZSBwYXR0ZXJuc1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXZhbHVlKSB7CisJCWtfdW5pY29kZSh2YywgQlJMX1VDX1JPVywgdXBfZmxhZywgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodmFsdWUgPiA4KQorCQlyZXR1cm47CisKKwlpZiAodXBfZmxhZykgeworCQlpZiAoYnJsX3RpbWVvdXQpIHsKKwkJCWlmICghY29tbWl0dGluZyB8fAorCQkJICAgIGppZmZpZXMgLSByZWxlYXNlc3RhcnQgPiAoYnJsX3RpbWVvdXQgKiBIWikgLyAxMDAwKSB7CisJCQkJY29tbWl0dGluZyA9IHByZXNzZWQ7CisJCQkJcmVsZWFzZXN0YXJ0ID0gamlmZmllczsKKwkJCX0KKwkJCXByZXNzZWQgJj0gfigxIDw8ICh2YWx1ZSAtIDEpKTsKKwkJCWlmICghcHJlc3NlZCkgeworCQkJCWlmIChjb21taXR0aW5nKSB7CisJCQkJCWtfYnJsY29tbWl0KHZjLCBjb21taXR0aW5nLCAwLCByZWdzKTsKKwkJCQkJY29tbWl0dGluZyA9IDA7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNvbW1pdHRpbmcpIHsKKwkJCQlrX2JybGNvbW1pdCh2YywgY29tbWl0dGluZywgMCwgcmVncyk7CisJCQkJY29tbWl0dGluZyA9IDA7CisJCQl9CisJCQlwcmVzc2VkICY9IH4oMSA8PCAodmFsdWUgLSAxKSk7CisJCX0KKwl9IGVsc2UgeworCQlwcmVzc2VkIHw9IDEgPDwgKHZhbHVlIC0gMSk7CisJCWlmICghYnJsX3RpbWVvdXQpCisJCQljb21taXR0aW5nID0gcHJlc3NlZDsKKwl9Cit9CisKIC8qCiAgKiBUaGUgbGVkcyBkaXNwbGF5IGVpdGhlciAoaSkgdGhlIHN0YXR1cyBvZiBOdW1Mb2NrLCBDYXBzTG9jaywgU2Nyb2xsTG9jaywKICAqIG9yIChpaSkgd2hhdGV2ZXIgcGF0dGVybiBvZiBsaWdodHMgcGVvcGxlIHdhbnQgdG8gc2hvdyB1c2luZyBLRFNFVExFRCwKQEAgLTExMjUsOSArMTIyMywxMyBAQAogCX0KIAogCWlmIChrZXljb2RlID4gTlJfS0VZUykKLQkJcmV0dXJuOworCQlpZiAoa2V5Y29kZSA+PSBLRVlfQlJMX0RPVDEgJiYga2V5Y29kZSA8PSBLRVlfQlJMX0RPVDgpCisJCQlrZXlzeW0gPSBLKEtUX0JSTCwga2V5Y29kZSAtIEtFWV9CUkxfRE9UMSArIDEpOworCQllbHNlCisJCQlyZXR1cm47CisJZWxzZQorCQlrZXlzeW0gPSBrZXlfbWFwW2tleWNvZGVdOwogCi0Ja2V5c3ltID0ga2V5X21hcFtrZXljb2RlXTsKIAl0eXBlID0gS1RZUChrZXlzeW0pOwogCiAJaWYgKHR5cGUgPCAweGYwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNjY3MTlmOS4uMWZhOWZhMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGlwZV9mc19pLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNTc4LDYgKzU3OSwxOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGludCBwaXBlX3RvX251bGwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywgc3RydWN0IHBpcGVfYnVmZmVyICpidWYsCisJCQlzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkKQoreworCXJldHVybiBzZC0+bGVuOworfQorCitzdGF0aWMgc3NpemVfdCBzcGxpY2Vfd3JpdGVfbnVsbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLHN0cnVjdCBmaWxlICpvdXQsCisJCQkJIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiBzcGxpY2VfZnJvbV9waXBlKHBpcGUsIG91dCwgcHBvcywgbGVuLCBmbGFncywgcGlwZV90b19udWxsKTsKK30KKwogI2lmZGVmIENPTkZJR19NTVUKIC8qCiAgKiBGb3IgZnVuLCB3ZSBhcmUgdXNpbmcgdGhlIE1NVSBmb3IgdGhpcy4KQEAgLTc4NSw2ICs3OTgsNyBAQAogCS5sbHNlZWsJCT0gbnVsbF9sc2VlaywKIAkucmVhZAkJPSByZWFkX251bGwsCiAJLndyaXRlCQk9IHdyaXRlX251bGwsCisJLnNwbGljZV93cml0ZQk9IHNwbGljZV93cml0ZV9udWxsLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgIWRlZmluZWQoX19tYzY4MDAwX18pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXdhdmUvbXdhdmVkZC5jIGIvZHJpdmVycy9jaGFyL213YXZlL213YXZlZGQuYwppbmRleCA4NjY2MTcxLi5kM2JhMmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXdhdmUvbXdhdmVkZC5jCisrKyBiL2RyaXZlcnMvY2hhci9td2F2ZS9td2F2ZWRkLmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogCQkJCWlwY251bSwKIAkJCQlwRHJ2RGF0YS0+SVBDc1tpcGNudW1dLnVzSW50Q291bnQpOwogCQotCQkJaWYgKGlwY251bSA+IEFSUkFZX1NJWkUocERydkRhdGEtPklQQ3MpKSB7CisJCQlpZiAoaXBjbnVtID49IEFSUkFZX1NJWkUocERydkRhdGEtPklQQ3MpKSB7CiAJCQkJUFJJTlRLX0VSUk9SKEtFUk5fRVJSX01XQVZFCiAJCQkJCQkibXdhdmVkZDo6bXdhdmVfaW9jdGw6IgogCQkJCQkJIiBJT0NUTF9NV19SRUdJU1RFUl9JUEM6IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fdHR5LmMgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwppbmRleCBlZGUzNjVkLi5iOTM3MWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbl90dHkuYworKysgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwpAQCAtMTM4NCw4ICsxMzg0LDEwIEBACiAJCSAqIGxvbmdlciB0aGFuIFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSBpbiBjYW5vbmljYWwgbW9kZSwKIAkJICogd2Ugd29uJ3QgZ2V0IGFueSBtb3JlIGNoYXJhY3RlcnMuCiAJCSAqLwotCQlpZiAobl90dHlfY2hhcnNfaW5fYnVmZmVyKHR0eSkgPD0gVFRZX1RIUkVTSE9MRF9VTlRIUk9UVExFKQorCQlpZiAobl90dHlfY2hhcnNfaW5fYnVmZmVyKHR0eSkgPD0gVFRZX1RIUkVTSE9MRF9VTlRIUk9UVExFKSB7CisJCQluX3R0eV9zZXRfcm9vbSh0dHkpOwogCQkJY2hlY2tfdW50aHJvdHRsZSh0dHkpOworCQl9CiAKIAkJaWYgKGIgLSBidWYgPj0gbWluaW11bSkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKaW5kZXggNWZkZjE4NS4uZWFiNTM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCkBAIC00Niw3ICs0Niw3IEBACiAvKiAjZGVmaW5lIEFUUl9DU1VNICovCiAKICNpZmRlZiBQQ01DSUFfREVCVUcKLSNkZWZpbmUgcmVhZGVyX3RvX2Rldih4KQkoJmhhbmRsZV90b19kZXYoeC0+bGluay5oYW5kbGUpKQorI2RlZmluZSByZWFkZXJfdG9fZGV2KHgpCSgmaGFuZGxlX3RvX2Rldih4LT5wX2Rldi0+aGFuZGxlKSkKIHN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7CiBtb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDYwMCk7CiAjZGVmaW5lIERFQlVHUChuLCByZHIsIHgsIGFyZ3MuLi4pIGRvIHsgCQkJCVwKQEAgLTY3LDcgKzY3LDcgQEAKICNkZWZpbmUJVF8xMDBNU0VDCW1zZWNzX3RvX2ppZmZpZXMoMTAwKQogI2RlZmluZQlUXzUwME1TRUMJbXNlY3NfdG9famlmZmllcyg1MDApCiAKLXN0YXRpYyB2b2lkIGNtNDAwMF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIHZvaWQgY200MDAwX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiBzdGF0aWMgaW50IG1ham9yOwkJLyogbWFqb3IgbnVtYmVyIHdlIGdldCBmcm9tIHRoZSBrZXJuZWwgKi8KIApAQCAtMTA2LDcgKzEwNiw3IEBACiAjZGVmaW5lIFJFR19TVE9QQklUUyh4KQkJKHggKyA3KQogCiBzdHJ1Y3QgY200MDAwX2RldiB7Ci0JZGV2X2xpbmtfdCBsaW5rOwkJLyogcGNtY2lhIGxpbmsgKi8KKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJZGV2X25vZGVfdCBub2RlOwkJLyogT1Mgbm9kZSAobWFqb3IsbWlub3IpICovCiAKIAl1bnNpZ25lZCBjaGFyIGF0cltNQVhfQVRSXTsKQEAgLTE0OSwxNCArMTQ5LDE0IEBACiAjZGVmaW5lCVpFUk9fREVWKGRldikgIAkJCQkJCVwKIAltZW1zZXQoJmRldi0+YXRyX2NzdW0sMCwJCQkJXAogCQlzaXplb2Yoc3RydWN0IGNtNDAwMF9kZXYpIC0gCQkJXAotCQkvKmxpbmsqLyBzaXplb2YoZGV2X2xpbmtfdCkgLSAJCQlcCisJCS8qbGluayovIHNpemVvZihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKSAtIAlcCiAJCS8qbm9kZSovIHNpemVvZihkZXZfbm9kZV90KSAtIAkJCVwKIAkJLyphdHIqLyBNQVhfQVRSKnNpemVvZihjaGFyKSAtIAkJCVwKIAkJLypyYnVmKi8gNTEyKnNpemVvZihjaGFyKSAtIAkJCVwKIAkJLypzYnVmKi8gNTEyKnNpemVvZihjaGFyKSAtIAkJCVwKIAkJLypxdWV1ZSovIDQqc2l6ZW9mKHdhaXRfcXVldWVfaGVhZF90KSkKIAotc3RhdGljIGRldl9saW5rX3QgKmRldl90YWJsZVtDTTQwMDBfTUFYX0RFVl07CitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldl90YWJsZVtDTTQwMDBfTUFYX0RFVl07CiBzdGF0aWMgc3RydWN0IGNsYXNzICpjbW1fY2xhc3M7CiAKIC8qIFRoaXMgdGFibGUgZG9lc24ndCB1c2Ugc3BhY2VzIGFmdGVyIHRoZSBjb21tYSBiZXR3ZWVuIGZpZWxkcyBhbmQgdGh1cwpAQCAtNDU0LDcgKzQ1NCw3IEBACiBzdGF0aWMgdm9pZCBzZXRfY2FyZHBhcmFtZXRlcihzdHJ1Y3QgY200MDAwX2RldiAqZGV2KQogewogCWludCBpOwotCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+bGluay5pby5CYXNlUG9ydDE7CisJaW9hZGRyX3QgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCXVfaW50OF90IHN0b3BiaXRzID0gMHgwMjsgLyogSVNPIGRlZmF1bHQgKi8KIAogCURFQlVHUCgzLCBkZXYsICItPiBzZXRfY2FyZHBhcmFtZXRlclxuIik7CkBAIC00ODcsNyArNDg3LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBudW1fYnl0ZXNfcmVhZDsKIAl1bnNpZ25lZCBjaGFyIHB0c19yZXBseVs0XTsKIAlzc2l6ZV90IHJjOwotCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+bGluay5pby5CYXNlUG9ydDE7CisJaW9hZGRyX3QgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCiAJcmMgPSAwOwogCkBAIC02OTksNyArNjk5LDcgQEAKIHN0YXRpYyB2b2lkIG1vbml0b3JfY2FyZCh1bnNpZ25lZCBsb25nIHApCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IChzdHJ1Y3QgY200MDAwX2RldiAqKSBwOwotCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+bGluay5pby5CYXNlUG9ydDE7CisJaW9hZGRyX3QgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCXVuc2lnbmVkIHNob3J0IHM7CiAJc3RydWN0IHB0c3JlcSBwdHNyZXE7CiAJaW50IGksIGF0cmM7CkBAIC05NjIsNyArOTYyLDcgQEAKIAkJCWxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+bGluay5pby5CYXNlUG9ydDE7CisJaW9hZGRyX3QgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCXNzaXplX3QgcmM7CiAJaW50IGksIGosIGs7CiAKQEAgLTk3MSw3ICs5NzEsNyBAQAogCWlmIChjb3VudCA9PSAwKQkJLyogYWNjb3JkaW5nIHRvIG1hbnBhZ2UgKi8KIAkJcmV0dXJuIDA7CiAKLQlpZiAoKGRldi0+bGluay5zdGF0ZSAmIERFVl9QUkVTRU5UKSA9PSAwIHx8CS8qIHNvY2tldCByZW1vdmVkICovCisJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQoZGV2LT5wX2RldikgfHwgLyogZGV2aWNlIHJlbW92ZWQgKi8KIAkgICAgdGVzdF9iaXQoSVNfQ01NX0FCU0VOVCwgJmRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gKHN0cnVjdCBjbTQwMDBfZGV2ICopIGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpb2FkZHJfdCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAl1bnNpZ25lZCBzaG9ydCBzOwogCXVuc2lnbmVkIGNoYXIgdG1wOwogCXVuc2lnbmVkIGNoYXIgaW5mb2xlbjsKQEAgLTExMDgsNyArMTEwOCw3IEBACiAKIAlzZW5kVDAgPSBkZXYtPnByb3RvID8gMCA6IG5yID4gNSA/IDB4MDggOiAwOwogCi0JaWYgKChkZXYtPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkgPT0gMCB8fAkvKiBzb2NrZXQgcmVtb3ZlZCAqLworCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGRldi0+cF9kZXYpIHx8IC8qIGRldmljZSByZW1vdmVkICovCiAJICAgIHRlc3RfYml0KElTX0NNTV9BQlNFTlQsICZkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTE0NDAsOCArMTQ0MCw4IEBACiAJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpb2FkZHJfdCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOwotCWRldl9saW5rX3QgKmxpbms7CisJaW9hZGRyX3QgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwogCWludCBzaXplOwogCWludCByYzsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTE0NTgsNyArMTQ1OCw3IEBACiAJICAgICAgIGltaW5vcihpbm9kZSksIGlvY3RsX25hbWVzW19JT0NfTlIoY21kKV0pOwogCiAJbGluayA9IGRldl90YWJsZVtpbWlub3IoaW5vZGUpXTsKLQlpZiAoIShERVZfT0sobGluaykpKSB7CisJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKIAkJREVCVUdQKDQsIGRldiwgIkRFVl9PSyBmYWxzZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE2NjAsMTQgKzE2NjAsMTQgQEAKIHN0YXRpYyBpbnQgY21tX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldjsKLQlkZXZfbGlua190ICpsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwogCWludCByYywgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCiAJaWYgKG1pbm9yID49IENNNDAwMF9NQVhfREVWKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWxpbmsgPSBkZXZfdGFibGVbbWlub3JdOwotCWlmIChsaW5rID09IE5VTEwgfHwgIShERVZfT0sobGluaykpKQorCWlmIChsaW5rID09IE5VTEwgfHwgIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAobGluay0+b3BlbikKQEAgLTE3MDksNyArMTcwOSw3IEBACiBzdGF0aWMgaW50IGNtbV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2OwotCWRldl9saW5rX3QgKmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAogCWlmIChtaW5vciA+PSBDTTQwMDBfTUFYX0RFVikKQEAgLTE3MzUsNyArMTczNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNtbV9jbTQwMDBfcmVsZWFzZShkZXZfbGlua190ICogbGluaykKK3N0YXRpYyB2b2lkIGNtbV9jbTQwMDBfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IGxpbmstPnByaXY7CiAKQEAgLTE3NTksMTMgKzE3NTksMTEgQEAKIAogLyo9PT09IEludGVyZmFjZSB0byBQQ01DSUEgTGF5ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgY200MDAwX2NvbmZpZyhkZXZfbGlua190ICogbGluaywgaW50IGRldm5vKQorc3RhdGljIGludCBjbTQwMDBfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaywgaW50IGRldm5vKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldjsKIAl0dXBsZV90IHR1cGxlOwogCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY29uZmlnX2luZm9fdCBjb25mOwogCXVfY2hhciBidWZbNjRdOwogCWludCBmYWlsX2ZuLCBmYWlsX3JjOwogCWludCByYzsKQEAgLTE3NzcsNDEgKzE3NzUsMzQgQEAKIAl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAKLQlpZiAoKGZhaWxfcmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykgeworCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykgewogCQlmYWlsX2ZuID0gR2V0Rmlyc3RUdXBsZTsKIAkJZ290byBjc19mYWlsZWQ7CiAJfQotCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoKGZhaWxfcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykgewogCQlmYWlsX2ZuID0gR2V0VHVwbGVEYXRhOwogCQlnb3RvIGNzX2ZhaWxlZDsKIAl9CiAJaWYgKChmYWlsX3JjID0KLQkgICAgIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSkgIT0gQ1NfU1VDQ0VTUykgeworCSAgICAgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkgIT0gQ1NfU1VDQ0VTUykgewogCQlmYWlsX2ZuID0gUGFyc2VUdXBsZTsKIAkJZ290byBjc19mYWlsZWQ7CiAJfQotCWlmICgoZmFpbF9yYyA9Ci0JICAgICBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25mKSkgIT0gQ1NfU1VDQ0VTUykgewotCQlmYWlsX2ZuID0gR2V0Q29uZmlndXJhdGlvbkluZm87Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KIAotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCWxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7CiAKIAlsaW5rLT5pby5CYXNlUG9ydDIgPSAwOwogCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7CiAJbGluay0+aW8uQXR0cmlidXRlczIgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCWZvciAocmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKTsKLQkgICAgIHJjID09IENTX1NVQ0NFU1M7IHJjID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSkgeworCWZvciAocmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CisJICAgICByYyA9PSBDU19TVUNDRVNTOyByYyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSB7CiAKLQkJcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpOworCQlyYyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCQlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKIAkJCWNvbnRpbnVlOwotCQlyYyA9IHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCQlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKIAkJCWNvbnRpbnVlOwogCkBAIC0xODMxLDcgKzE4MjIsNyBAQAogCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8uZmxhZ3MKIAkJICAgICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CiAKLQkJcmMgPSBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsICZsaW5rLT5pbyk7CisJCXJjID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJaWYgKHJjID09IENTX1NVQ0NFU1MpCiAJCQlicmVhazsJLyogd2UgYXJlIGRvbmUgKi8KIAl9CkBAIC0xODQxLDcgKzE4MzIsNyBAQAogCWxpbmstPmNvbmYuSW50VHlwZSA9IDAwMDAwMDAyOwogCiAJaWYgKChmYWlsX3JjID0KLQkgICAgIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCAmbGluay0+Y29uZikpICE9IENTX1NVQ0NFU1MpIHsKKwkgICAgIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSAhPSBDU19TVUNDRVNTKSB7CiAJCWZhaWxfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKIAkJZ290byBjc19yZWxlYXNlOwogCX0KQEAgLTE4NTEsNjMgKzE4NDIsNDggQEAKIAlkZXYtPm5vZGUubWFqb3IgPSBtYWpvcjsKIAlkZXYtPm5vZGUubWlub3IgPSBkZXZubzsKIAlkZXYtPm5vZGUubmV4dCA9IE5VTEw7Ci0JbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGhhbmRsZSwgZmFpbF9mbiwgZmFpbF9yYyk7CisJY3NfZXJyb3IobGluaywgZmFpbF9mbiwgZmFpbF9yYyk7CiBjc19yZWxlYXNlOgogCWNtNDAwMF9yZWxlYXNlKGxpbmspOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBjbTQwMDBfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGNtNDAwMF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXY7CiAKIAlkZXYgPSBsaW5rLT5wcml2OwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwogCXN0b3BfbW9uaXRvcihkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY200MDAwX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGNtNDAwMF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldjsKIAogCWRldiA9IGxpbmstPnByaXY7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQogCWlmIChsaW5rLT5vcGVuKQogCQlzdGFydF9tb25pdG9yKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY200MDAwX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGNtNDAwMF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWNtbV9jbTQwMDBfcmVsZWFzZShsaW5rLT5wcml2KTsJLyogZGVsYXkgcmVsZWFzZSB1bnRpbCBkZXZpY2UgY2xvc2VkICovCi0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgY200MDAwX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGNtNDAwMF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2OwotCWRldl9saW5rX3QgKmxpbms7Ci0JaW50IGk7CisJaW50IGksIHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCBDTTQwMDBfTUFYX0RFVjsgaSsrKQogCQlpZiAoZGV2X3RhYmxlW2ldID09IE5VTEwpCkBAIC0xOTIzLDcgKzE4OTksNyBAQAogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsaW5rID0gJmRldi0+bGluazsKKwlkZXYtPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gZGV2OwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWRldl90YWJsZVtpXSA9IGxpbms7CkBAIC0xOTMzLDExICsxOTA5LDkgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPmF0cnEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+cmVhZHEpOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCWNtNDAwMF9jb25maWcobGluaywgaSk7CisJcmV0ID0gY200MDAwX2NvbmZpZyhsaW5rLCBpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJY2xhc3NfZGV2aWNlX2NyZWF0ZShjbW1fY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwKIAkJCSAgICAiY21tJWQiLCBpKTsKQEAgLTE5NDUsOSArMTkxOSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNtNDAwMF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgY200MDAwX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gbGluay0+cHJpdjsKIAlpbnQgZGV2bm87CiAKQEAgLTE5NTgsMTEgKzE5MzEsOSBAQAogCWlmIChkZXZubyA9PSBDTTQwMDBfTUFYX0RFVikKIAkJcmV0dXJuOwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9QUkVTRU5UOwogCXN0b3BfbW9uaXRvcihkZXYpOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLSAJCWNtNDAwMF9yZWxlYXNlKGxpbmspOworCWNtNDAwMF9yZWxlYXNlKGxpbmspOwogCiAJZGV2X3RhYmxlW2Rldm5vXSA9IE5VTEw7CiAgCWtmcmVlKGRldik7CkBAIC0xOTkzLDcgKzE5NjQsNyBAQAogCS5kcnYJICA9IHsKIAkJLm5hbWUgPSAiY200MDAwX2NzIiwKIAkJfSwKLQkucHJvYmUgICAgPSBjbTQwMDBfYXR0YWNoLAorCS5wcm9iZSAgICA9IGNtNDAwMF9wcm9iZSwKIAkucmVtb3ZlICAgPSBjbTQwMDBfZGV0YWNoLAogCS5zdXNwZW5kICA9IGNtNDAwMF9zdXNwZW5kLAogCS5yZXN1bWUgICA9IGNtNDAwMF9yZXN1bWUsCkBAIC0yMDEwLDEwICsxOTgxLDYgQEAKIAlpZiAoIWNtbV9jbGFzcykKIAkJcmV0dXJuIC0xOwogCi0JcmMgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZjbTQwMDBfZHJpdmVyKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KIAltYWpvciA9IHJlZ2lzdGVyX2NocmRldigwLCBERVZJQ0VfTkFNRSwgJmNtNDAwMF9mb3BzKTsKIAlpZiAobWFqb3IgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgTU9EVUxFX05BTUUKQEAgLTIwMjEsNiArMTk4OCwxMiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJcmMgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZjbTQwMDBfZHJpdmVyKTsKKwlpZiAocmMgPCAwKSB7CisJCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCBERVZJQ0VfTkFNRSk7CisJCXJldHVybiByYzsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKaW5kZXggNDY2ZTMzYi4uNDdhODQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCkBAIC00MSw3ICs0MSw3IEBACiAKIAogI2lmZGVmIFBDTUNJQV9ERUJVRwotI2RlZmluZSByZWFkZXJfdG9fZGV2KHgpCSgmaGFuZGxlX3RvX2Rldih4LT5saW5rLmhhbmRsZSkpCisjZGVmaW5lIHJlYWRlcl90b19kZXYoeCkJKCZoYW5kbGVfdG9fZGV2KHgtPnBfZGV2LT5oYW5kbGUpKQogc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjAwKTsKICNkZWZpbmUgREVCVUdQKG4sIHJkciwgeCwgYXJncy4uLikgZG8geyAJCQkJXApAQCAtNjUsNyArNjUsNyBAQAogLyogaG93IG9mdGVuIHRvIHBvbGwgZm9yIGZpZm8gc3RhdHVzIGNoYW5nZSAqLwogI2RlZmluZSBQT0xMX1BFUklPRCAJCQkJbXNlY3NfdG9famlmZmllcygxMCkKIAotc3RhdGljIHZvaWQgcmVhZGVyX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgdm9pZCByZWFkZXJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyBpbnQgbWFqb3I7CiBzdGF0aWMgc3RydWN0IGNsYXNzICpjbXhfY2xhc3M7CkBAIC03NCw3ICs3NCw3IEBACiAjZGVmaW5lCQlCU19XUklUQUJMRQkweDAyCiAKIHN0cnVjdCByZWFkZXJfZGV2IHsKLQlkZXZfbGlua190CQlsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlkZXZfbm9kZV90CQlub2RlOwogCXdhaXRfcXVldWVfaGVhZF90CWRldnE7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJcG9sbF93YWl0OwpAQCAtODcsNyArODcsNyBAQAogCXN0cnVjdCB0aW1lcl9saXN0IAlwb2xsX3RpbWVyOwogfTsKIAotc3RhdGljIGRldl9saW5rX3QgKmRldl90YWJsZVtDTV9NQVhfREVWXTsKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2X3RhYmxlW0NNX01BWF9ERVZdOwogCiAjaWZuZGVmIFBDTUNJQV9ERUJVRwogI2RlZmluZQl4b3V0YglvdXRiCkBAIC0xMTYsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkIGNtNDA0MF9kb19wb2xsKHVuc2lnbmVkIGxvbmcgZHVtbXkpCiB7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldiA9IChzdHJ1Y3QgcmVhZGVyX2RldiAqKSBkdW1teTsKLQl1bnNpZ25lZCBpbnQgb2JzID0geGluYihkZXYtPmxpbmsuaW8uQmFzZVBvcnQxCisJdW5zaWduZWQgaW50IG9icyA9IHhpbmIoZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxCiAJCQkJKyBSRUdfT0ZGU0VUX0JVRkZFUl9TVEFUVVMpOwogCiAJaWYgKChvYnMgJiBCU1JfQlVMS19JTl9GVUxMKSkgewpAQCAtMTQ3LDcgKzE0Nyw3IEBACiBzdGF0aWMgaW50IHdhaXRfZm9yX2J1bGtfb3V0X3JlYWR5KHN0cnVjdCByZWFkZXJfZGV2ICpkZXYpCiB7CiAJaW50IGksIHJjOwotCWludCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUE9MTF9MT09QX0NPVU5UOyBpKyspIHsKIAkJaWYgKCh4aW5iKGlvYmFzZSArIFJFR19PRkZTRVRfQlVGRkVSX1NUQVRVUykKQEAgLTE3Nyw3ICsxNzcsNyBAQAogLyogV3JpdGUgdG8gU3luYyBDb250cm9sIFJlZ2lzdGVyICovCiBzdGF0aWMgaW50IHdyaXRlX3N5bmNfcmVnKHVuc2lnbmVkIGNoYXIgdmFsLCBzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2KQogewotCWludCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJaW50IHJjOwogCiAJcmMgPSB3YWl0X2Zvcl9idWxrX291dF9yZWFkeShkZXYpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiBzdGF0aWMgaW50IHdhaXRfZm9yX2J1bGtfaW5fcmVhZHkoc3RydWN0IHJlYWRlcl9kZXYgKmRldikKIHsKIAlpbnQgaSwgcmM7Ci0JaW50IGlvYmFzZSA9IGRldi0+bGluay5pby5CYXNlUG9ydDE7CisJaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCWZvciAoaSA9IDA7IGkgPCBQT0xMX0xPT1BfQ09VTlQ7IGkrKykgewogCQlpZiAoKHhpbmIoaW9iYXNlICsgUkVHX09GRlNFVF9CVUZGRVJfU1RBVFVTKQpAQCAtMjI1LDcgKzIyNSw3IEBACiAJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWludCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJc2l6ZV90IGJ5dGVzX3RvX3JlYWQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCXNpemVfdCBtaW5fYnl0ZXNfdG9fcmVhZDsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQlpZiAoKGRldi0+bGluay5zdGF0ZSAmIERFVl9QUkVTRU5UKT09MCkKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChkZXYtPnBfZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CkBAIC0zMjgsNyArMzI4LDcgQEAKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWludCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJc3NpemVfdCByYzsKIAlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgYnl0ZXNfdG9fd3JpdGU7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JaWYgKChkZXYtPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkgPT0gMCkKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChkZXYtPnBfZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlieXRlc190b193cml0ZSA9IGNvdW50OwpAQCAtNDQ1LDE0ICs0NDUsMTQgQEAKIHN0YXRpYyBpbnQgY200MDQwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldjsKLQlkZXZfbGlua190ICpsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CiAKIAlpZiAobWlub3IgPj0gQ01fTUFYX0RFVikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlsaW5rID0gZGV2X3RhYmxlW21pbm9yXTsKLQlpZiAobGluayA9PSBOVUxMIHx8ICEoREVWX09LKGxpbmspKSkKKwlpZiAobGluayA9PSBOVUxMIHx8ICFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGxpbmstPm9wZW4pCkBAIC00NzgsNyArNDc4LDcgQEAKIHN0YXRpYyBpbnQgY200MDQwX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCByZWFkZXJfZGV2ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZGV2X2xpbmtfdCAqbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCiAJREVCVUdQKDIsIGRldiwgIi0+IGNtNDA0MF9jbG9zZShtYWovbWluPSVkLiVkKVxuIiwgaW1ham9yKGlub2RlKSwKQEAgLTUwMCw3ICs1MDAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjbTQwNDBfcmVhZGVyX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGNtNDA0MF9yZWFkZXJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2ID0gbGluay0+cHJpdjsKIApAQCAtNTE0LDYwICs1MTQsNDkgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRlcl9jb25maWcoZGV2X2xpbmtfdCAqbGluaywgaW50IGRldm5vKQorc3RhdGljIGludCByZWFkZXJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgZGV2bm8pCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2OwogCXR1cGxlX3QgdHVwbGU7CiAJY2lzcGFyc2VfdCBwYXJzZTsKLQljb25maWdfaW5mb190IGNvbmY7CiAJdV9jaGFyIGJ1Zls2NF07CiAJaW50IGZhaWxfZm4sIGZhaWxfcmM7CiAJaW50IHJjOwogCi0JaGFuZGxlID0gbGluay0+aGFuZGxlOwotCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKIAl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKIAl0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAgCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKIAotCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKChmYWlsX3JjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSBDU19TVUNDRVNTKSB7CiAJCWZhaWxfZm4gPSBHZXRGaXJzdFR1cGxlOwogCQlnb3RvIGNzX2ZhaWxlZDsKIAl9Ci0JaWYgKChmYWlsX3JjID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykgeworCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSAhPSBDU19TVUNDRVNTKSB7CiAJCWZhaWxfZm4gPSBHZXRUdXBsZURhdGE7CiAJCWdvdG8gY3NfZmFpbGVkOwogCX0KLQlpZiAoKGZhaWxfcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpCisJaWYgKChmYWlsX3JjID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkKIAkJCQkJCQkhPSBDU19TVUNDRVNTKSB7CiAJCWZhaWxfZm4gPSBQYXJzZVR1cGxlOwogCQlnb3RvIGNzX2ZhaWxlZDsKIAl9Ci0JaWYgKChmYWlsX3JjID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpCi0JCQkJCQkJIT0gQ1NfU1VDQ0VTUykgewotCQlmYWlsX2ZuID0gR2V0Q29uZmlndXJhdGlvbkluZm87Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KIAotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCWxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7CiAKIAlsaW5rLT5pby5CYXNlUG9ydDIgPSAwOwogCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7CiAJbGluay0+aW8uQXR0cmlidXRlczIgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCWZvciAocmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKTsKKwlmb3IgKHJjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwogCSAgICAgcmMgPT0gQ1NfU1VDQ0VTUzsKLQkgICAgIHJjID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSkgewotCQlyYyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSk7CisJICAgICByYyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSB7CisJCXJjID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CiAJCWlmIChyYyAhPSBDU19TVUNDRVNTKQogCQkJY29udGludWU7Ci0JCXJjID0gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQlyYyA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJCWlmIChyYyAhPSBDU19TVUNDRVNTKQogCQkJY29udGludWU7CiAKQEAgLTU4NSwxMyArNTc0LDEzIEBACiAJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8uZmxhZ3MKIAkJCQkJCSYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXJjID0gcGNtY2lhX3JlcXVlc3RfaW8oaGFuZGxlLCAmbGluay0+aW8pOworCQlyYyA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAKLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KGhhbmRsZSksICJmb28iKTsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KGxpbmspLCAiZm9vIik7CiAJCWlmIChyYyA9PSBDU19TVUNDRVNTKQogCQkJYnJlYWs7CiAJCWVsc2UKLQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaGFuZGxlX3RvX2RldihoYW5kbGUpLAorCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KGxpbmspLAogCQkJCSAgICJwY21jaWFfcmVxdWVzdF9pbyBmYWlsZWQgMHgleFxuIiwgcmMpOwogCX0KIAlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKQEAgLTU5OSwxMCArNTg4LDEwIEBACiAKIAlsaW5rLT5jb25mLkludFR5cGUgPSAwMDAwMDAwMjsKIAotCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCZsaW5rLT5jb25mKSkKKwlpZiAoKGZhaWxfcmMgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssJmxpbmstPmNvbmYpKQogCQkJCQkJCQkhPUNTX1NVQ0NFU1MpIHsKIAkJZmFpbF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOwotCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmhhbmRsZV90b19kZXYoaGFuZGxlKSwKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KGxpbmspLAogCQkJICAgInBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24gZmFpbGVkIDB4JXhcbiIsCiAJCQkgICBmYWlsX3JjKTsKIAkJZ290byBjc19yZWxlYXNlOwpAQCAtNjEyLDU3ICs2MDEsMzEgQEAKIAlzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgREVWSUNFX05BTUUgIiVkIiwgZGV2bm8pOwogCWRldi0+bm9kZS5tYWpvciA9IG1ham9yOwogCWRldi0+bm9kZS5taW5vciA9IGRldm5vOwotCWRldi0+bm9kZS5uZXh0ID0gTlVMTDsKLQlsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJZGV2LT5ub2RlLm5leHQgPSAmZGV2LT5ub2RlOwogCiAJREVCVUdQKDIsIGRldiwgImRldmljZSAiIERFVklDRV9OQU1FICIlZCBhdCAweCUuNHgtMHglLjR4XG4iLCBkZXZubywKIAkgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEpOwogCURFQlVHUCgyLCBkZXYsICI8LSByZWFkZXJfY29uZmlnIChzdWNjKVxuIik7CiAKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLQljc19lcnJvcihoYW5kbGUsIGZhaWxfZm4sIGZhaWxfcmMpOworCWNzX2Vycm9yKGxpbmssIGZhaWxfZm4sIGZhaWxfcmMpOwogY3NfcmVsZWFzZToKIAlyZWFkZXJfcmVsZWFzZShsaW5rKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW50IHJlYWRlcl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJlYWRlcl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcmVhZGVyX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHJlYWRlcl9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWNtNDA0MF9yZWFkZXJfcmVsZWFzZShsaW5rLT5wcml2KTsKLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCByZWFkZXJfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgcmVhZGVyX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCByZWFkZXJfZGV2ICpkZXY7Ci0JZGV2X2xpbmtfdCAqbGluazsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0OwogCiAJZm9yIChpID0gMDsgaSA8IENNX01BWF9ERVY7IGkrKykgewogCQlpZiAoZGV2X3RhYmxlW2ldID09IE5VTEwpCkBAIC02NzksOCArNjQyLDggQEAKIAlkZXYtPnRpbWVvdXQgPSBDQ0lEX0RSSVZFUl9NSU5JTVVNX1RJTUVPVVQ7CiAJZGV2LT5idWZmZXJfc3RhdHVzID0gMDsKIAotCWxpbmsgPSAmZGV2LT5saW5rOwogCWxpbmstPnByaXYgPSBkZXY7CisJZGV2LT5wX2RldiA9IGxpbms7CiAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlkZXZfdGFibGVbaV0gPSBsaW5rOwpAQCAtNjkyLDExICs2NTUsOSBAQAogCWluaXRfdGltZXIoJmRldi0+cG9sbF90aW1lcik7CiAJZGV2LT5wb2xsX3RpbWVyLmZ1bmN0aW9uID0gJmNtNDA0MF9kb19wb2xsOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXJlYWRlcl9jb25maWcobGluaywgaSk7CisJcmV0ID0gcmVhZGVyX2NvbmZpZyhsaW5rLCBpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJY2xhc3NfZGV2aWNlX2NyZWF0ZShjbXhfY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwKIAkJCSAgICAiY214JWQiLCBpKTsKQEAgLTcwNCw5ICs2NjUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByZWFkZXJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHJlYWRlcl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldiA9IGxpbmstPnByaXY7CiAJaW50IGRldm5vOwogCkBAIC03MTgsMTAgKzY3OCw3IEBACiAJaWYgKGRldm5vID09IENNX01BWF9ERVYpCiAJCXJldHVybjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfUFJFU0VOVDsKLQotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXJlYWRlcl9yZWxlYXNlKGxpbmspOworCXJlYWRlcl9yZWxlYXNlKGxpbmspOwogCiAJZGV2X3RhYmxlW2Rldm5vXSA9IE5VTEw7CiAJa2ZyZWUoZGV2KTsKQEAgLTc1MywxMCArNzEwLDggQEAKICAgCS5kcnYJCT0gewogCQkubmFtZQk9ICJjbTQwNDBfY3MiLAogCX0sCi0JLnByb2JlCQk9IHJlYWRlcl9hdHRhY2gsCisJLnByb2JlCQk9IHJlYWRlcl9wcm9iZSwKIAkucmVtb3ZlCQk9IHJlYWRlcl9kZXRhY2gsCi0JLnN1c3BlbmQJPSByZWFkZXJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHJlYWRlcl9yZXN1bWUsCiAJLmlkX3RhYmxlCT0gY200MDQwX2lkcywKIH07CiAKQEAgLTc2OSwxNiArNzI0LDE5IEBACiAJaWYgKCFjbXhfY2xhc3MpCiAJCXJldHVybiAtMTsKIAotCXJjID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmcmVhZGVyX2RyaXZlcik7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCiAJbWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwgREVWSUNFX05BTUUsICZyZWFkZXJfZm9wcyk7CiAJaWYgKG1ham9yIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIE1PRFVMRV9OQU1FCiAJCQkiOiBjb3VsZCBub3QgZ2V0IG1ham9yIG51bWJlclxuIik7CiAJCXJldHVybiAtMTsKIAl9CisKKwlyYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJlYWRlcl9kcml2ZXIpOworCWlmIChyYyA8IDApIHsKKwkJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIERFVklDRV9OQU1FKTsKKwkJcmV0dXJuIHJjOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKaW5kZXggZTZiNzE0Yi4uMDcyMTM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJc3RydWN0CV9pbnB1dF9zaWduYWxfZXZlbnRzCWlucHV0X3NpZ25hbF9ldmVudHM7CiAKIAkvKiBQQ01DSUEgc3VwcG9ydCAqLwotCWRldl9saW5rX3QJICAgICAgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJZGV2X25vZGVfdAkgICAgICBub2RlOwogCWludAkJICAgICAgc3RvcDsKIApAQCAtNDg0LDcgKzQ4NCw3IEBACiAKIC8qIFBDTUNJQSBwcm90b3R5cGVzICovCiAKLXN0YXRpYyB2b2lkIG1nc2xwY19jb25maWcoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IG1nc2xwY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIHZvaWQgbWdzbHBjX3JlbGVhc2UodV9sb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBtZ3NscGNfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKQEAgLTUzMywxNCArNTMzLDE0IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG1nc2xwY19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBtZ3NscGNfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgTUdTTFBDX0lORk8gKmluZm87Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKLSAgICAKKyAgICBpbnQgcmV0OworCiAgICAgaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCiAJICAgIHByaW50aygibWdzbHBjX2F0dGFjaFxuIik7Ci0JCisKICAgICBpbmZvID0gKE1HU0xQQ19JTkZPICopa21hbGxvYyhzaXplb2YoTUdTTFBDX0lORk8pLCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWluZm8pIHsKIAkgICAgcHJpbnRrKCJFcnJvciBjYW4ndCBhbGxvY2F0ZSBkZXZpY2UgaW5zdGFuY2UgZGF0YVxuIik7CkBAIC01NjUsMjUgKzU2NSwyMiBAQAogICAgIGluZm8tPmltcmJfdmFsdWUgPSAweGZmZmY7CiAgICAgaW5mby0+cGltX3ZhbHVlID0gMHhmZjsKIAotICAgIGxpbmsgPSAmaW5mby0+bGluazsKKyAgICBpbmZvLT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGluZm87Ci0gICAgCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KKworICAgIC8qIEluaXRpYWxpemUgdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAqLwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CiAgICAgbGluay0+aXJxLklSUUluZm8xICAgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwotICAgIAorCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIG1nc2xwY19jb25maWcobGluayk7CisgICAgcmV0ID0gbWdzbHBjX2NvbmZpZyhsaW5rKTsKKyAgICBpZiAocmV0KQorCSAgICByZXR1cm4gcmV0OwogCiAgICAgbWdzbHBjX2FkZF9kZXZpY2UoaW5mbyk7CiAKQEAgLTU5NiwxNSArNTkzLDEzIEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIG1nc2xwY19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgbWdzbHBjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIE1HU0xQQ19JTkZPICppbmZvID0gbGluay0+cHJpdjsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgaW50IGxhc3RfZm4sIGxhc3RfcmV0OwogICAgIHVfY2hhciBidWZbNjRdOwotICAgIGNvbmZpZ19pbmZvX3QgY29uZjsKICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmc7CiAgICAgCkBAIC02MTcsMjcgKzYxMiwyMCBAQAogICAgIHR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKLSAgICAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KLSAgICAvKiBMb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwotICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25mKSk7Ci0gICAgbGluay0+Y29uZi5WY2MgPSBjb25mLlZjYzsKIAogICAgIC8qIGdldCBDSVMgY29uZmlndXJhdGlvbiBlbnRyeSAqLwogCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAKICAgICBjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKIAogICAgIGlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7CiAgICAgaWYgKGNmZy0+aW5kZXggPT0gMCkKQEAgLTY1OCwxMSArNjQ2LDEwIEBACiAJICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CiAJICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKIAkgICAgbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JICAgIENTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pKTsKKwkgICAgQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKTsKICAgICB9CiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gODsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTY3MCw5ICs2NTcsOSBAQAogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzIHw9IElSUV9IQU5ETEVfUFJFU0VOVDsKICAgICBsaW5rLT5pcnEuSGFuZGxlciAgICAgPSBtZ3NscGNfaXNyOwogICAgIGxpbmstPmlycS5JbnN0YW5jZSAgICA9IGluZm87Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAKLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogICAgIGluZm8tPmlvX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAgICAgaW5mby0+aXJxX2xldmVsID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwpAQCAtNjgwLDcgKzY2Nyw3IEBACiAgICAgLyogYWRkIHRvIGxpbmtlZCBsaXN0IG9mIGRldmljZXMgKi8KICAgICBzcHJpbnRmKGluZm8tPm5vZGUuZGV2X25hbWUsICJtZ3NscGMwIik7CiAgICAgaW5mby0+bm9kZS5tYWpvciA9IGluZm8tPm5vZGUubWlub3IgPSAwOwotICAgIGxpbmstPmRldiA9ICZpbmZvLT5ub2RlOworICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAKICAgICBwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiIsCiAJICAgaW5mby0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CkBAIC02OTAsMTMgKzY3NywxMiBAQAogCSAgICBwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKIAkJICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKICAgICBwcmludGsoIlxuIik7Ci0gICAgCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAgICAgbWdzbHBjX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0KIAogLyogQ2FyZCBoYXMgYmVlbiByZW1vdmVkLgpAQCAtNzA1LDU4ICs2OTEsMzggQEAKICAqLwogc3RhdGljIHZvaWQgbWdzbHBjX3JlbGVhc2UodV9sb25nIGFyZykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gKGRldl9saW5rX3QgKilhcmc7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilhcmc7CiAKLSAgICBpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKLQkgICAgcHJpbnRrKCJtZ3NscGNfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCisJCXByaW50aygibWdzbHBjX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0gICAgLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLSAgICBsaW5rLT5kZXYgPSBOVUxMOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwotCi0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRKQotCSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1nc2xwY19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgbWdzbHBjX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKKwlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKKwkJcHJpbnRrKCJtZ3NscGNfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQotCSAgICBwcmludGsoIm1nc2xwY19kZXRhY2goMHglcClcbiIsIGxpbmspOworCSgoTUdTTFBDX0lORk8gKilsaW5rLT5wcml2KS0+c3RvcCA9IDE7CisJbWdzbHBjX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkgICAgKChNR1NMUENfSU5GTyAqKWxpbmstPnByaXYpLT5zdG9wID0gMTsKLQkgICAgbWdzbHBjX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKLSAgICB9Ci0KLSAgICBtZ3NscGNfcmVtb3ZlX2RldmljZSgoTUdTTFBDX0lORk8gKilsaW5rLT5wcml2KTsKKwltZ3NscGNfcmVtb3ZlX2RldmljZSgoTUdTTFBDX0lORk8gKilsaW5rLT5wcml2KTsKIH0KIAotc3RhdGljIGludCBtZ3NscGNfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBtZ3NscGNfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJTUdTTFBDX0lORk8gKmluZm8gPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CiAJaW5mby0+c3RvcCA9IDE7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWdzbHBjX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBtZ3NscGNfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKIAlNR1NMUENfSU5GTyAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKIAlpbmZvLT5zdG9wID0gMDsKIAogCXJldHVybiAwOwpAQCAtMTI4MCw3ICsxMjQ2LDcgQEAKIAlpZiAoIWluZm8pCiAJCXJldHVybiBJUlFfTk9ORTsKIAkJCi0JaWYgKCEoaW5mby0+bGluay5zdGF0ZSAmIERFVl9DT05GSUcpKQorCWlmICghKGluZm8tPnBfZGV2LT5fbG9ja2VkKSkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKQEAgLTMwMzMsNyArMjk5OSw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gInN5bmNsaW5rX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBtZ3NscGNfYXR0YWNoLAorCS5wcm9iZQkJPSBtZ3NscGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBtZ3NscGNfZGV0YWNoLAogCS5pZF90YWJsZQk9IG1nc2xwY19pZHMsCiAJLnN1c3BlbmQJPSBtZ3NscGNfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA4NmJlMDRiLi41OGYzNTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC0xNTg0LDcgKzE1ODQsNiBAQAogCiAJcmV0dXJuIHR3b3RoaXJkc01ENFRyYW5zZm9ybShkYWRkciwgaGFzaCk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNlY3VyZV9pcHY2X3BvcnRfZXBoZW1lcmFsKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBfRENDUCkgfHwgZGVmaW5lZChDT05GSUdfSVBfRENDUF9NT0RVTEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaCBiL2RyaXZlcnMvY2hhci9yaW8vaG9zdC5oCmluZGV4IDNlYzczZDEuLjE3OWNkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vaG9zdC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vaG9zdC5oCkBAIC0zMywxMiArMzMsNiBAQAogI2lmbmRlZiBfX3Jpb19ob3N0X2hfXwogI2RlZmluZSBfX3Jpb19ob3N0X2hfXwogCi0jaWZkZWYgU0NDU19MQUJFTFMKLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgKl9ob3N0X2hfc2Njc18gPSAiQCgjKWhvc3QuaAkxLjIiOwotI2VuZGlmCi0jZW5kaWYKLQogLyoKICoqIHRoZSBob3N0IHN0cnVjdHVyZSAtIG9uZSBwZXIgaG9zdCBjYXJkIGluIHRoZSBzeXN0ZW0uCiAqLwpAQCAtNzcsOSArNzEsNiBAQAogI2RlZmluZSBSQ19TVEFSVFVQICAgICAgICAgICAgMQogI2RlZmluZSBSQ19SVU5OSU5HICAgICAgICAgICAgMgogI2RlZmluZSBSQ19TVFVGRkVEICAgICAgICAgICAgMwotI2RlZmluZSBSQ19TT01FVEhJTkcgICAgICAgICAgNAotI2RlZmluZSBSQ19TT01FVEhJTkdfTkVXICAgICAgNQotI2RlZmluZSBSQ19TT01FVEhJTkdfRUxTRSAgICAgNgogI2RlZmluZSBSQ19SRUFEWSAgICAgICAgICAgICAgNwogI2RlZmluZSBSVU5fU1RBVEUgICAgICAgICAgICAgNwogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9ib290LmMKaW5kZXggYWNkYTkzMi4uMjkwMTQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9ib290LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9ib290LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuZXJpY19zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwppbmRleCBkMzFhYmE2Li43NWIyNTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwpAQCAtMTM5NCwxNCArMTM5NCwxNyBAQAogCQlyZXR1cm4gUklPX0ZBSUw7CiAJfQogCi0JaWYgKCgoaW50KSAoKGNoYXIpIFBvcnRQLT5JblVzZSkgPT0gLTEpIHx8ICEoQ21kQmxrUCA9IFJJT0dldENtZEJsaygpKSkgewotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNhbm5vdCBhbGxvY2F0ZSBjb21tYW5kIGJsb2NrIGZvciBjb21tYW5kICVkIG9uIHBvcnQgJWRcbiIsIENtZCwgUG9ydFAtPlBvcnROdW0pOworCWlmICgoUG9ydFAtPkluVXNlID09ICh0eXBlb2YoUG9ydFAtPkluVXNlKSktMSkgfHwKKwkJCSEoQ21kQmxrUCA9IFJJT0dldENtZEJsaygpKSkgeworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNhbm5vdCBhbGxvY2F0ZSBjb21tYW5kIGJsb2NrICIKKwkJCSJmb3IgY29tbWFuZCAlZCBvbiBwb3J0ICVkXG4iLCBDbWQsIFBvcnRQLT5Qb3J0TnVtKTsKIAkJcmV0dXJuIFJJT19GQUlMOwogCX0KIAotCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ29tbWFuZCBibGsgJXAgLSBJblVzZSBub3cgJWRcbiIsIENtZEJsa1AsIFBvcnRQLT5JblVzZSk7CisJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDb21tYW5kIGJsayAlcCAtIEluVXNlIG5vdyAlZFxuIiwKKwkJCUNtZEJsa1AsIFBvcnRQLT5JblVzZSk7CiAKLQlQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWRfTSAqKSAmQ21kQmxrUC0+UGFja2V0LmRhdGFbMF07CisJUGt0Q21kUCA9IChzdHJ1Y3QgUGt0Q21kX00gKikmQ21kQmxrUC0+UGFja2V0LmRhdGFbMF07CiAKIAlDbWRCbGtQLT5QYWNrZXQuc3JjX3VuaXQgPSAwOwogCWlmIChQb3J0UC0+U2Vjb25kQmxvY2spCkBAIC0xNDI1LDM4ICsxNDI4LDQ2IEBACiAKIAlzd2l0Y2ggKENtZCkgewogCWNhc2UgTUVNRFVNUDoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBNRU1EVU1QIGNvbW1hbmQgYmxrICVwIChhZGRyIDB4JXgpXG4iLCBDbWRCbGtQLCAoaW50KSBTdWJDbWQuQWRkcik7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgTUVNRFVNUCBjb21tYW5kIGJsayAlcCAiCisJCQkJIihhZGRyIDB4JXgpXG4iLCBDbWRCbGtQLCAoaW50KSBTdWJDbWQuQWRkcik7CiAJCVBrdENtZFAtPlN1YkNvbW1hbmQgPSBNRU1EVU1QOwogCQlQa3RDbWRQLT5TdWJBZGRyID0gU3ViQ21kLkFkZHI7CiAJCWJyZWFrOwogCWNhc2UgRkNMT1NFOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIEZDTE9TRSBjb21tYW5kIGJsayAlcFxuIiwgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgRkNMT1NFIGNvbW1hbmQgYmxrICVwXG4iLAorCQkJCUNtZEJsa1ApOwogCQlicmVhazsKIAljYXNlIFJFQURfUkVHSVNURVI6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgUkVBRF9SRUdJU1RFUiAoMHgleCkgY29tbWFuZCBibGsgJXBcbiIsIChpbnQpIFN1YkNtZC5BZGRyLCBDbWRCbGtQKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBSRUFEX1JFR0lTVEVSICgweCV4KSAiCisJCQkJImNvbW1hbmQgYmxrICVwXG4iLCAoaW50KSBTdWJDbWQuQWRkciwgQ21kQmxrUCk7CiAJCVBrdENtZFAtPlN1YkNvbW1hbmQgPSBSRUFEX1JFR0lTVEVSOwogCQlQa3RDbWRQLT5TdWJBZGRyID0gU3ViQ21kLkFkZHI7CiAJCWJyZWFrOwogCWNhc2UgUkVTVU1FOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFJFU1VNRSBjb21tYW5kIGJsayAlcFxuIiwgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgUkVTVU1FIGNvbW1hbmQgYmxrICVwXG4iLAorCQkJCUNtZEJsa1ApOwogCQlicmVhazsKIAljYXNlIFJGTFVTSDoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBSRkxVU0ggY29tbWFuZCBibGsgJXBcbiIsIENtZEJsa1ApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFJGTFVTSCBjb21tYW5kIGJsayAlcFxuIiwKKwkJCQlDbWRCbGtQKTsKIAkJQ21kQmxrUC0+UG9zdEZ1bmNQID0gUklPUkZsdXNoRW5hYmxlOwogCQlicmVhazsKIAljYXNlIFNVU1BFTkQ6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgU1VTUEVORCBjb21tYW5kIGJsayAlcFxuIiwgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgU1VTUEVORCBjb21tYW5kIGJsayAlcFxuIiwKKwkJCQlDbWRCbGtQKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1HRVQ6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgTUdFVCBjb21tYW5kIGJsayAlcFxuIiwgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgTUdFVCBjb21tYW5kIGJsayAlcFxuIiwKKwkJCQlDbWRCbGtQKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1TRVQ6CiAJY2FzZSBNQklDOgogCWNhc2UgTUJJUzoKIAkJQ21kQmxrUC0+UGFja2V0LmRhdGFbNF0gPSAoY2hhcikgUG9ydFAtPk1vZGVtTGluZXM7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgTVNFVC9NQklDL01CSVMgY29tbWFuZCBibGsgJXBcbiIsIENtZEJsa1ApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIE1TRVQvTUJJQy9NQklTIGNvbW1hbmQgIgorCQkJCSJibGsgJXBcbiIsIENtZEJsa1ApOwogCQlicmVhazsKIAogCWNhc2UgV0ZMVVNIOgpAQCAtMTQ2NSwxMiArMTQ3NiwxNCBAQAogCQkgKiogYWxsb3dlZCB0aGVuIHdlIHNob3VsZCBub3QgYm90aGVyIHNlbmRpbmcgYW55IG1vcmUgdG8gdGhlCiAJCSAqKiBSVEEuCiAJCSAqLwotCQlpZiAoKGludCkgKChjaGFyKSBQb3J0UC0+V2ZsdXNoRmxhZykgPT0gKGludCkgLTEpIHsKLQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiVHJhc2hlZCBXRkxVU0gsIFdmbHVzaEZsYWcgYWJvdXQgdG8gd3JhcCEiKTsKKwkJaWYgKFBvcnRQLT5XZmx1c2hGbGFnID09ICh0eXBlb2YoUG9ydFAtPldmbHVzaEZsYWcpKS0xKSB7CisJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlRyYXNoZWQgV0ZMVVNILCAiCisJCQkJCSJXZmx1c2hGbGFnIGFib3V0IHRvIHdyYXAhIik7CiAJCQlSSU9GcmVlQ21kQmxrKENtZEJsa1ApOwogCQkJcmV0dXJuIChSSU9fRkFJTCk7CiAJCX0gZWxzZSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFdGTFVTSCBjb21tYW5kIGJsayAlcFxuIiwgQ21kQmxrUCk7CisJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFdGTFVTSCBjb21tYW5kICIKKwkJCQkJImJsayAlcFxuIiwgQ21kQmxrUCk7CiAJCQlDbWRCbGtQLT5Qb3N0RnVuY1AgPSBSSU9XRmx1c2hNYXJrOwogCQl9CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pb2N0bC5oIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pb2N0bC5oCmluZGV4IDE0YjgzZmEuLmU4YWY1YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW9jdGwuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2lvY3RsLmgKQEAgLTMzLDEwICszMyw2IEBACiAjaWZuZGVmCV9fcmlvaW9jdGxfaF9fCiAjZGVmaW5lCV9fcmlvaW9jdGxfaF9fCiAKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9pb2N0bF9oX3NjY3NfID0gIkAoIylyaW9pb2N0bC5oCTEuMiI7Ci0jZW5kaWYKLQogLyoKICoqIFJJTyBkZXZpY2UgZHJpdmVyIC0gdXNlciBpb2N0bHMgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlcy4KICovCkBAIC00NCw1NSArNDAsMTMgQEAKIHN0cnVjdCBwb3J0U3RhdHMgewogCWludCBwb3J0OwogCWludCBnYXRoZXI7Ci0JdWxvbmcgdHhjaGFyczsKLQl1bG9uZyByeGNoYXJzOwotCXVsb25nIG9wZW5zOwotCXVsb25nIGNsb3NlczsKLQl1bG9uZyBpb2N0bHM7CisJdW5zaWduZWQgbG9uZyB0eGNoYXJzOworCXVuc2lnbmVkIGxvbmcgcnhjaGFyczsKKwl1bnNpZ25lZCBsb25nIG9wZW5zOworCXVuc2lnbmVkIGxvbmcgY2xvc2VzOworCXVuc2lnbmVkIGxvbmcgaW9jdGxzOwogfTsKIAotCi0jZGVmaW5lIHJJT0MJKCdyJzw8OCkKLSNkZWZpbmUJVENSSU9TVEFURQkocklPQyB8IDEpCi0jZGVmaW5lCVRDUklPWFBPTgkocklPQyB8IDIpCi0jZGVmaW5lCVRDUklPWFBPRkYJKHJJT0MgfCAzKQotI2RlZmluZQlUQ1JJT1hQQ1BTCShySU9DIHwgNCkKLSNkZWZpbmUJVENSSU9YUFJJTlQJKHJJT0MgfCA1KQotI2RlZmluZSBUQ1JJT0lYQU5ZT04JKHJJT0MgfCA2KQotI2RlZmluZQlUQ1JJT0lYQU5ZT0ZGCShySU9DIHwgNykKLSNkZWZpbmUgVENSSU9JWE9OT04JKHJJT0MgfCA4KQotI2RlZmluZQlUQ1JJT0lYT05PRkYJKHJJT0MgfCA5KQotI2RlZmluZQlUQ1JJT01CSVMJKHJJT0MgfCAxMCkKLSNkZWZpbmUJVENSSU9NQklDCShySU9DIHwgMTEpCi0jZGVmaW5lCVRDUklPVFJJQUQJKHJJT0MgfCAxMikKLSNkZWZpbmUgVENSSU9UU1RBVEUJKHJJT0MgfCAxMykKLQotLyoKLSoqIDE1LjEwLjE5OTggQVJHIC0gRVNJTCAwNzYxIHBhcnQgZml4Ci0qKiBBZGQgUklPIGlvY3RscyBmb3IgbWFuaXB1bGF0aW5nIFJUUyBhbmQgQ1RTIGZsb3cgY29udHJvbCwgKGFzIEx5bnhPUwotKiogYXBwZWFycyB0byBub3Qgc3VwcG9ydCBoYXJkd2FyZSBmbG93IGNvbnRyb2wpLgotKi8KLSNkZWZpbmUgVENSSU9DVFNGTE9XRU4JKHJJT0MgfCAxNCkJLyogZW5hYmxlIENUUyBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgVENSSU9DVFNGTE9XRElTCShySU9DIHwgMTUpCS8qIGRpc2FibGUgQ1RTIGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBUQ1JJT1JUU0ZMT1dFTgkocklPQyB8IDE2KQkvKiBlbmFibGUgUlRTIGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBUQ1JJT1JUU0ZMT1dESVMJKHJJT0MgfCAxNykJLyogZGlzYWJsZSBSVFMgZmxvdyBjb250cm9sICovCi0KLS8qCi0qKiAwOS4xMi4xOTk4IEFSRyAtIEVTSUwgMDc3NiBwYXJ0IGZpeAotKiogRGVmaW5pdGlvbiBmb3IgJ1JJT0MnIGFsc28gYXBwZWFycyBpbiBkYWVtb24uaCwgc28gd2UnZCBiZXR0ZXIgZG8gYQotKiogI2lmbmRlZiBoZXJlIGZpcnN0LgotKiogJ1JJT19RVUlDS19DSEVDSycgYWxzbyAjZGVmaW5lJ2QgaGVyZSBhcyB0aGlzIGlvY3RsIGlzIG5vdwotKiogYWxsb3dlZCB0byBiZSB1c2VkIGJ5IGN1c3RvbWVycy4KLSoqCi0qKiAwNS4wMi4xOTk5IEFSRyAtCi0qKiBUaGlzIGlzIHdoYXQgSSd2ZSBkZWNpZWQgdG8gZG8gd2l0aCBpb2N0bHMgZXRjLiwgd2hpY2ggYXJlIGludGVuZGVkIHRvIGJlCi0qKiBpbnZva2VkIGZyb20gdXNlcnMgYXBwbGljYXRpb25zIDoKLSoqIEFueXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZGVmaW5lZCBoZXJlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGRhZW1vbi5oLCB0aGF0Ci0qKiB3YXkgaXQgd29uJ3QgZW5kIHVwIGhhdmluZyB0byBiZSBkZWZpbmVkL21haW50YWluZWQgaW4gdHdvIHBsYWNlcy4gVGhlIG9ubHkKLSoqIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMgdGhhdCB0aGlzIGZpbGUgc2hvdWxkIG5vdyBiZSAjaW5jbHVkZSdkIGJ5IGRhZW1vbi5oCi0qKgotKiogJ3N0YXRzJyBpb2N0bHMgbm93ICNkZWZpbmUnZCBoZXJlIGFzIHRoZXkgYXJlIHRvIGJlIHVzZWQgYnkgY3VzdG9tZXJzLgotKi8KICNkZWZpbmUJUklPQwkoJ1InPDw4KXwoJ2knPDwxNil8KCdvJzw8MjQpCiAKICNkZWZpbmUJUklPX1FVSUNLX0NIRUNLCSAgCShSSU9DIHwgMTA1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nuc2MuYyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKaW5kZXggYjU0MzgyMS4uNTZjODI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Nuc2MuYworKysgYi9kcml2ZXJzL2NoYXIvc25zYy5jCkBAIC0zOTAsNyArMzkwLDggQEAKIAkJCWZvcm1hdF9tb2R1bGVfaWQoZGV2bmFtZXAsIGdlb19tb2R1bGUoZ2VvaWQpLAogCQkJCQkgTU9EVUxFX0ZPUk1BVF9CUklFRik7CiAJCQlkZXZuYW1lcCA9IGRldm5hbWUgKyBzdHJsZW4oZGV2bmFtZSk7Ci0JCQlzcHJpbnRmKGRldm5hbWVwLCAiIyVkIiwgZ2VvX3NsYWIoZ2VvaWQpKTsKKwkJCXNwcmludGYoZGV2bmFtZXAsICJeJWQjJWQiLCBnZW9fc2xvdChnZW9pZCksCisJCQkJZ2VvX3NsYWIoZ2VvaWQpKTsKIAogCQkJLyogYWxsb2NhdGUgc3lzY3RsIGRldmljZSBkYXRhICovCiAJCQlzY2QgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IHN5c2N0bF9kYXRhX3MpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGY4ZGQ4NTIuLmE5MGY1ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTEzNDEsNiArMTM0MSw5IEBACiAJZWxzZSBpZiAoKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkJCSAgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsIE5VTEwpKSkKIAkJc29ueXBpX2RldmljZS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfTU9ERUxfVFlQRTM7CisJZWxzZSBpZiAoKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCisJCQkJCSAgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzEsIE5VTEwpKSkKKwkJc29ueXBpX2RldmljZS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfTU9ERUxfVFlQRTM7CiAJZWxzZQogCQlzb255cGlfZGV2aWNlLm1vZGVsID0gU09OWVBJX0RFVklDRV9NT0RFTF9UWVBFMjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwppbmRleCAzZjVkNjA3Li5hOWM1YTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwpAQCAtNTA0LDcgKzUwNCw2IEBACiBzdGF0aWMgaW50CXN0bF9lY2hwY2lpbnRyKHN0bGJyZF90ICpicmRwKTsKIHN0YXRpYyBpbnQJc3RsX2VjaHBjaTY0aW50cihzdGxicmRfdCAqYnJkcCk7CiBzdGF0aWMgdm9pZAlzdGxfb2ZmaW50cih2b2lkICpwcml2YXRlKTsKLXN0YXRpYyB2b2lkCSpzdGxfbWVtYWxsb2MoaW50IGxlbik7CiBzdGF0aWMgc3RsYnJkX3QgKnN0bF9hbGxvY2JyZCh2b2lkKTsKIHN0YXRpYyBzdGxwb3J0X3QgKnN0bF9nZXRwb3J0KGludCBicmRuciwgaW50IHBhbmVsbnIsIGludCBwb3J0bnIpOwogCkBAIC05NDAsMTcgKzkzOSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKglMb2NhbCBkcml2ZXIga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmUuCi0gKi8KLQotc3RhdGljIHZvaWQgKnN0bF9tZW1hbGxvYyhpbnQgbGVuKQotewotCXJldHVybiAodm9pZCAqKSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKICAqCUFsbG9jYXRlIGEgbmV3IGJvYXJkIHN0cnVjdHVyZS4gRmlsbCBvdXQgdGhlIGJhc2ljIGluZm8gaW4gaXQuCiAgKi8KIApAQCAtOTU4LDE0ICs5NDYsMTMgQEAKIHsKIAlzdGxicmRfdAkqYnJkcDsKIAotCWJyZHAgPSAoc3RsYnJkX3QgKikgc3RsX21lbWFsbG9jKHNpemVvZihzdGxicmRfdCkpOwotCWlmIChicmRwID09IChzdGxicmRfdCAqKSBOVUxMKSB7CisJYnJkcCA9IGt6YWxsb2Moc2l6ZW9mKHN0bGJyZF90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFicmRwKSB7CiAJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgKHNpemU9JWQpXG4iLAogCQkJc2l6ZW9mKHN0bGJyZF90KSk7Ci0JCXJldHVybiAoc3RsYnJkX3QgKikgTlVMTDsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbWVtc2V0KGJyZHAsIDAsIHNpemVvZihzdGxicmRfdCkpOwogCWJyZHAtPm1hZ2ljID0gU1RMX0JPQVJETUFHSUM7CiAJcmV0dXJuIGJyZHA7CiB9CkBAIC0xMDE3LDkgKzEwMDQsOSBAQAogCXBvcnRwLT5yZWZjb3VudCsrOwogCiAJaWYgKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgPT0gMCkgewotCQlpZiAocG9ydHAtPnR4LmJ1ZiA9PSAoY2hhciAqKSBOVUxMKSB7Ci0JCQlwb3J0cC0+dHguYnVmID0gKGNoYXIgKikgc3RsX21lbWFsbG9jKFNUTF9UWEJVRlNJWkUpOwotCQkJaWYgKHBvcnRwLT50eC5idWYgPT0gKGNoYXIgKikgTlVMTCkKKwkJaWYgKCFwb3J0cC0+dHguYnVmKSB7CisJCQlwb3J0cC0+dHguYnVmID0ga21hbGxvYyhTVExfVFhCVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcG9ydHAtPnR4LmJ1ZikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCXBvcnRwLT50eC5oZWFkID0gcG9ydHAtPnR4LmJ1ZjsKIAkJCXBvcnRwLT50eC50YWlsID0gcG9ydHAtPnR4LmJ1ZjsKQEAgLTIxNzgsMTMgKzIxNjUsMTIgQEAKICAqCWVhY2ggcG9ydHMgZGF0YSBzdHJ1Y3R1cmVzLgogICovCiAJZm9yIChpID0gMDsgKGkgPCBwYW5lbHAtPm5ycG9ydHMpOyBpKyspIHsKLQkJcG9ydHAgPSAoc3RscG9ydF90ICopIHN0bF9tZW1hbGxvYyhzaXplb2Yoc3RscG9ydF90KSk7Ci0JCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpIHsKKwkJcG9ydHAgPSBremFsbG9jKHNpemVvZihzdGxwb3J0X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0cCkgewogCQkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAiCiAJCQkJIihzaXplPSVkKVxuIiwgc2l6ZW9mKHN0bHBvcnRfdCkpOwogCQkJYnJlYWs7CiAJCX0KLQkJbWVtc2V0KHBvcnRwLCAwLCBzaXplb2Yoc3RscG9ydF90KSk7CiAKIAkJcG9ydHAtPm1hZ2ljID0gU1RMX1BPUlRNQUdJQzsKIAkJcG9ydHAtPnBvcnRuciA9IGk7CkBAIC0yMzE1LDEzICsyMzAxLDEyIEBACiAgKgljYW4gY29tcGxldGUgdGhlIHNldHVwLgogICovCiAKLQlwYW5lbHAgPSAoc3RscGFuZWxfdCAqKSBzdGxfbWVtYWxsb2Moc2l6ZW9mKHN0bHBhbmVsX3QpKTsKLQlpZiAocGFuZWxwID09IChzdGxwYW5lbF90ICopIE5VTEwpIHsKKwlwYW5lbHAgPSBremFsbG9jKHNpemVvZihzdGxwYW5lbF90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYW5lbHApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgIgogCQkJIihzaXplPSVkKVxuIiwgc2l6ZW9mKHN0bHBhbmVsX3QpKTsKLQkJcmV0dXJuKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KHBhbmVscCwgMCwgc2l6ZW9mKHN0bHBhbmVsX3QpKTsKIAogCXBhbmVscC0+bWFnaWMgPSBTVExfUEFORUxNQUdJQzsKIAlwYW5lbHAtPmJyZG5yID0gYnJkcC0+YnJkbnI7CkBAIC0yNDkwLDEzICsyNDc1LDEyIEBACiAJCXN0YXR1cyA9IGluYihpb2FkZHIgKyBFQ0hfUE5MU1RBVFVTKTsKIAkJaWYgKChzdGF0dXMgJiBFQ0hfUE5MSURNQVNLKSAhPSBueHRpZCkKIAkJCWJyZWFrOwotCQlwYW5lbHAgPSAoc3RscGFuZWxfdCAqKSBzdGxfbWVtYWxsb2Moc2l6ZW9mKHN0bHBhbmVsX3QpKTsKLQkJaWYgKHBhbmVscCA9PSAoc3RscGFuZWxfdCAqKSBOVUxMKSB7CisJCXBhbmVscCA9IGt6YWxsb2Moc2l6ZW9mKHN0bHBhbmVsX3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwYW5lbHApIHsKIAkJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgIgogCQkJCSIoc2l6ZT0lZClcbiIsIHNpemVvZihzdGxwYW5lbF90KSk7CiAJCQlicmVhazsKIAkJfQotCQltZW1zZXQocGFuZWxwLCAwLCBzaXplb2Yoc3RscGFuZWxfdCkpOwogCQlwYW5lbHAtPm1hZ2ljID0gU1RMX1BBTkVMTUFHSUM7CiAJCXBhbmVscC0+YnJkbnIgPSBicmRwLT5icmRucjsKIAkJcGFuZWxwLT5wYW5lbG5yID0gcGFuZWxucjsKQEAgLTMwNzQsOCArMzA1OCw4IEBACiAvKgogICoJQWxsb2NhdGUgYSB0ZW1wb3Jhcnkgd3JpdGUgYnVmZmVyLgogICovCi0Jc3RsX3RtcHdyaXRlYnVmID0gKGNoYXIgKikgc3RsX21lbWFsbG9jKFNUTF9UWEJVRlNJWkUpOwotCWlmIChzdGxfdG1wd3JpdGVidWYgPT0gKGNoYXIgKikgTlVMTCkKKwlzdGxfdG1wd3JpdGVidWYgPSBrbWFsbG9jKFNUTF9UWEJVRlNJWkUsIEdGUF9LRVJORUwpOworCWlmICghc3RsX3RtcHdyaXRlYnVmKQogCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IChzaXplPSVkKVxuIiwKIAkJCVNUTF9UWEJVRlNJWkUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGlwYXIuYyBiL2RyaXZlcnMvY2hhci90aXBhci5jCmluZGV4IGViMmViM2UuLjA3OWRiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90aXBhci5jCisrKyBiL2RyaXZlcnMvY2hhci90aXBhci5jCkBAIC01MTUsNyArNTE1LDcgQEAKIAkJZXJyID0gUFRSX0VSUih0aXBhcl9jbGFzcyk7CiAJCWdvdG8gb3V0X2NocmRldjsKIAl9Ci0JaWYgKHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZ0aXBhcl9kcml2ZXIpIHx8IHRwX2NvdW50ID09IDApIHsKKwlpZiAocGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIoJnRpcGFyX2RyaXZlcikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0aXBhcjogdW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggcGFycG9ydFxuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0X2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RsY2xrLmMgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwppbmRleCAyNTQ2NjM3Li5mNThhZDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGxjbGsuYworKysgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihyZWNlaXZlZF9yZWZfY2xrM2EsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIocmVjZWl2ZWRfcmVmX2NsazNhLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfcmVjZWl2ZWRfcmVmX2NsazNhKTsKIAogCkBAIC0zNDksNyArMzQ5LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHJlY2VpdmVkX3JlZl9jbGszYiwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihyZWNlaXZlZF9yZWZfY2xrM2IsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9yZWNlaXZlZF9yZWZfY2xrM2IpOwogCiAKQEAgLTM3MSw3ICszNzEsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2NsazNiX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrM2Jfb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2NsazNiX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZV9jbGszYV9vdXRwdXQoc3RydWN0IGRldmljZSAqZCwKQEAgLTM5Miw3ICszOTIsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2NsazNhX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrM2Ffb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2NsazNhX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZV9jbGtiMV9vdXRwdXQoc3RydWN0IGRldmljZSAqZCwKQEAgLTQxMyw3ICs0MTMsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2IxX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYjFfb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2Nsa2IxX291dHB1dCk7CiAKIApAQCAtNDM1LDcgKzQzNSw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYTFfb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGthMV9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrYTFfb3V0cHV0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlX2Nsa2IwX291dHB1dChzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNDU2LDcgKzQ1Niw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYjBfb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGtiMF9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrYjBfb3V0cHV0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlX2Nsa2EwX291dHB1dChzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYTBfb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGthMF9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrYTBfb3V0cHV0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2VsZWN0X2FtY2IyX3RyYW5zbWl0X2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmQsCkBAIC01MTksNyArNTE5LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9hbWNiMl90cmFuc21pdF9jbG9jaywgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfYW1jYjJfdHJhbnNtaXRfY2xvY2ssIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCXN0b3JlX3NlbGVjdF9hbWNiMl90cmFuc21pdF9jbG9jayk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3NlbGVjdF9hbWNiMV90cmFuc21pdF9jbG9jayhzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNTYwLDcgKzU2MCw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfYW1jYjFfdHJhbnNtaXRfY2xvY2ssIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X2FtY2IxX3RyYW5zbWl0X2Nsb2NrLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfc2VsZWN0X2FtY2IxX3RyYW5zbWl0X2Nsb2NrKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2VsZWN0X3JlZHVuZGFudF9jbG9jayhzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNTgxLDcgKzU4MSw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfcmVkdW5kYW50X2Nsb2NrLCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9yZWR1bmRhbnRfY2xvY2ssIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9zZWxlY3RfcmVkdW5kYW50X2Nsb2NrKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2VsZWN0X3JlZl9mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZCwKQEAgLTYwMiw3ICs2MDIsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X3JlZl9mcmVxdWVuY3ksIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X3JlZl9mcmVxdWVuY3ksIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9zZWxlY3RfcmVmX2ZyZXF1ZW5jeSk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2ZpbHRlcl9zZWxlY3Qoc3RydWN0IGRldmljZSAqZCwKQEAgLTYyMyw3ICs2MjMsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZmlsdGVyX3NlbGVjdCwgU19JV1VHTywgTlVMTCwgc3RvcmVfZmlsdGVyX3NlbGVjdCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmlsdGVyX3NlbGVjdCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIHN0b3JlX2ZpbHRlcl9zZWxlY3QpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9oYXJkd2FyZV9zd2l0Y2hpbmdfbW9kZShzdHJ1Y3QgZGV2aWNlICpkLAogCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNjQzLDcgKzY0Myw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihoYXJkd2FyZV9zd2l0Y2hpbmdfbW9kZSwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihoYXJkd2FyZV9zd2l0Y2hpbmdfbW9kZSwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2hhcmR3YXJlX3N3aXRjaGluZ19tb2RlKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfaGFyZHdhcmVfc3dpdGNoaW5nKHN0cnVjdCBkZXZpY2UgKmQsCkBAIC02NjQsNyArNjY0LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGhhcmR3YXJlX3N3aXRjaGluZywgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihoYXJkd2FyZV9zd2l0Y2hpbmcsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9oYXJkd2FyZV9zd2l0Y2hpbmcpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9yZWZhbGlnbiAoc3RydWN0IGRldmljZSAqZCwKQEAgLTY4NCw3ICs2ODQsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIocmVmYWxpZ24sIFNfSVdVR08sIE5VTEwsIHN0b3JlX3JlZmFsaWduKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZWZhbGlnbiwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIHN0b3JlX3JlZmFsaWduKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfbW9kZV9zZWxlY3QgKHN0cnVjdCBkZXZpY2UgKmQsCiAJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC03MDQsNyArNzA0LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKG1vZGVfc2VsZWN0LCBTX0lXVUdPLCBOVUxMLCBzdG9yZV9tb2RlX3NlbGVjdCk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kZV9zZWxlY3QsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLCBzdG9yZV9tb2RlX3NlbGVjdCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3Jlc2V0IChzdHJ1Y3QgZGV2aWNlICpkLAogCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNzI0LDcgKzcyNCw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihyZXNldCwgU19JV1VHTywgTlVMTCwgc3RvcmVfcmVzZXQpOworc3RhdGljIERFVklDRV9BVFRSKHJlc2V0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwgc3RvcmVfcmVzZXQpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdGxjbGtfc3lzZnNfZW50cmllc1tdID0gewogCSZkZXZfYXR0cl9jdXJyZW50X3JlZi5hdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL3RwbS9LY29uZmlnCmluZGV4IGE2ODczYmYuLmZlMDBjN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvdHBtL0tjb25maWcKQEAgLTIwLDkgKzIwLDE4IEBACiAJICBOb3RlOiBGb3IgbW9yZSBUUE0gZHJpdmVycyBlbmFibGUgQ09ORklHX1BOUCwgQ09ORklHX0FDUEkKIAkgIGFuZCBDT05GSUdfUE5QQUNQSS4KIAorY29uZmlnIFRDR19USVMKKwl0cmlzdGF0ZSAiVFBNIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uIDEuMiBJbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBUQ0dfVFBNICYmIFBOUEFDUEkKKwktLS1oZWxwLS0tCisJICBJZiB5b3UgaGF2ZSBhIFRQTSBzZWN1cml0eSBjaGlwIHRoYXQgaXMgY29tcGxpYW50IHdpdGggdGhlCisJICBUQ0cgVElTIDEuMiBUUE0gc3BlY2lmaWNhdGlvbiBzYXkgWWVzIGFuZCBpdCB3aWxsIGJlIGFjY2Vzc2libGUKKwkgIGZyb20gd2l0aGluIExpbnV4LiAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlCisJICBNIGhlcmU7IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHBtX3Rpcy4KKwogY29uZmlnIFRDR19OU0MKIAl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBUUE0gSW50ZXJmYWNlIgotCWRlcGVuZHMgb24gVENHX1RQTQorCWRlcGVuZHMgb24gVENHX1RQTSAmJiBQTlBBQ1BJCiAJLS0taGVscC0tLQogCSAgSWYgeW91IGhhdmUgYSBUUE0gc2VjdXJpdHkgY2hpcCBmcm9tIE5hdGlvbmFsIFNlbWljb25kdXRvciAKIAkgIHNheSBZZXMgYW5kIGl0IHdpbGwgYmUgYWNjZXNzaWJsZSBmcm9tIHdpdGhpbiBMaW51eC4gIFRvIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci90cG0vTWFrZWZpbGUKaW5kZXggYmE0NTgyZC4uZWEzYTFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvdHBtL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogaWZkZWYgQ09ORklHX0FDUEkKIAlvYmotJChDT05GSUdfVENHX1RQTSkgKz0gdHBtX2Jpb3MubwogZW5kaWYKK29iai0kKENPTkZJR19UQ0dfVElTKSArPSB0cG1fdGlzLm8KIG9iai0kKENPTkZJR19UQ0dfTlNDKSArPSB0cG1fbnNjLm8KIG9iai0kKENPTkZJR19UQ0dfQVRNRUwpICs9IHRwbV9hdG1lbC5vCiBvYmotJChDT05GSUdfVENHX0lORklORU9OKSArPSB0cG1faW5maW5lb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKaW5kZXggNWEzODcwNC4uNjg4OWU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCkBAIC0zMiwxMiArMzIsMjkxIEBACiAJVFBNX01JTk9SID0gMjI0LAkvKiBvZmZpY2lhbGx5IGFzc2lnbmVkICovCiAJVFBNX0JVRlNJWkUgPSAyMDQ4LAogCVRQTV9OVU1fREVWSUNFUyA9IDI1NiwKLQlUUE1fTlVNX01BU0tfRU5UUklFUyA9IFRQTV9OVU1fREVWSUNFUyAvICg4ICogc2l6ZW9mKGludCkpCiB9OwogCitlbnVtIHRwbV9kdXJhdGlvbiB7CisJVFBNX1NIT1JUID0gMCwKKwlUUE1fTUVESVVNID0gMSwKKwlUUE1fTE9ORyA9IDIsCisJVFBNX1VOREVGSU5FRCwKK307CisKKyNkZWZpbmUgVFBNX01BWF9PUkRJTkFMIDI0MworI2RlZmluZSBUUE1fTUFYX1BST1RFQ1RFRF9PUkRJTkFMIDEyCisjZGVmaW5lIFRQTV9QUk9URUNURURfT1JESU5BTF9NQVNLIDB4RkYKKwogc3RhdGljIExJU1RfSEVBRCh0cG1fY2hpcF9saXN0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHJpdmVyX2xvY2spOwotc3RhdGljIGludCBkZXZfbWFza1tUUE1fTlVNX01BU0tfRU5UUklFU107CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZGV2X21hc2ssIFRQTV9OVU1fREVWSUNFUyk7CisKKy8qCisgKiBBcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgb3JkaW5hbCBkZWZpbmluZyB0aGUgbWF4aW11bSBhbW91bnQKKyAqIG9mIHRpbWUgdGhlIGNoaXAgY291bGQgdGFrZSB0byByZXR1cm4gdGhlIHJlc3VsdC4gIFRoZSBvcmRpbmFsCisgKiBkZXNpZ25hdGlvbiBvZiBzaG9ydCwgbWVkaXVtIG9yIGxvbmcgaXMgZGVmaW5lZCBpbiBhIHRhYmxlIGluCisgKiBUQ0cgU3BlY2lmaWNhdGlvbiBUUE0gTWFpbiBQYXJ0IDIgVFBNIFN0cnVjdHVyZXMgU2VjdGlvbiAxNy4gVGhlCisgKiB2YWx1ZXMgb2YgdGhlIFNIT1JULCBNRURJVU0sIGFuZCBMT05HIGR1cmF0aW9ucyBhcmUgcmV0cmlldmVkCisgKiBmcm9tIHRoZSBjaGlwIGR1cmluZyBpbml0aWFsaXphdGlvbiB3aXRoIGEgY2FsbCB0byB0cG1fZ2V0X3RpbWVvdXRzLgorICovCitzdGF0aWMgY29uc3QgdTggdHBtX3Byb3RlY3RlZF9vcmRpbmFsX2R1cmF0aW9uW1RQTV9NQVhfUFJPVEVDVEVEX09SRElOQUxdID0geworCVRQTV9VTkRFRklORUQsCQkvKiAwICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAkJLyogNSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAkJLyogMTAgKi8KKwlUUE1fU0hPUlQsCit9OworCitzdGF0aWMgY29uc3QgdTggdHBtX29yZGluYWxfZHVyYXRpb25bVFBNX01BWF9PUkRJTkFMXSA9IHsKKwlUUE1fVU5ERUZJTkVELAkJLyogMCAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwJCS8qIDEwICovCisJVFBNX1NIT1JULAorCVRQTV9NRURJVU0sCisJVFBNX0xPTkcsCisJVFBNX0xPTkcsCisJVFBNX01FRElVTSwJCS8qIDE1ICovCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fTUVESVVNLAorCVRQTV9MT05HLAorCVRQTV9TSE9SVCwJCS8qIDIwICovCisJVFBNX1NIT1JULAorCVRQTV9NRURJVU0sCisJVFBNX01FRElVTSwKKwlUUE1fTUVESVVNLAorCVRQTV9TSE9SVCwJCS8qIDI1ICovCisJVFBNX1NIT1JULAorCVRQTV9NRURJVU0sCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fTUVESVVNLAkJLyogMzAgKi8KKwlUUE1fTE9ORywKKwlUUE1fTUVESVVNLAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAkJLyogMzUgKi8KKwlUUE1fTUVESVVNLAorCVRQTV9NRURJVU0sCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9NRURJVU0sCQkvKiA0MCAqLworCVRQTV9MT05HLAorCVRQTV9NRURJVU0sCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCQkvKiA0NSAqLworCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9MT05HLAorCVRQTV9NRURJVU0sCQkvKiA1MCAqLworCVRQTV9NRURJVU0sCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDU1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fTUVESVVNLAkJLyogNjAgKi8KKwlUUE1fTUVESVVNLAorCVRQTV9NRURJVU0sCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fTUVESVVNLAkJLyogNjUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwJCS8qIDcwICovCisJVFBNX1NIT1JULAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCQkvKiA3NSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX0xPTkcsCQkvKiA4MCAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX01FRElVTSwKKwlUUE1fTE9ORywKKwlUUE1fU0hPUlQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDg1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCQkvKiA5MCAqLworCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fVU5ERUZJTkVELAkJLyogOTUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9NRURJVU0sCQkvKiAxMDAgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAkJLyogMTA1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCQkvKiAxMTAgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAkJLyogMTE1ICovCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX0xPTkcsCQkvKiAxMjAgKi8KKwlUUE1fTE9ORywKKwlUUE1fTUVESVVNLAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwJCS8qIDEyNSAqLworCVRQTV9TSE9SVCwKKwlUUE1fTE9ORywKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwJCS8qIDEzMCAqLworCVRQTV9NRURJVU0sCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCisJVFBNX01FRElVTSwKKwlUUE1fVU5ERUZJTkVELAkJLyogMTM1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCQkvKiAxNDAgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDE0NSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAkJLyogMTUwICovCisJVFBNX01FRElVTSwKKwlUUE1fTUVESVVNLAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDE1NSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAkJLyogMTYwICovCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAkJLyogMTY1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fTE9ORywJCS8qIDE3MCAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDE3NSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX01FRElVTSwJCS8qIDE4MCAqLworCVRQTV9TSE9SVCwKKwlUUE1fTUVESVVNLAorCVRQTV9NRURJVU0sCisJVFBNX01FRElVTSwKKwlUUE1fTUVESVVNLAkJLyogMTg1ICovCisJVFBNX1NIT1JULAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCQkvKiAxOTAgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCQkvKiAxOTUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwJCS8qIDIwMCAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCQkvKiAyMDUgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX01FRElVTSwJCS8qIDIxMCAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX01FRElVTSwKKwlUUE1fTUVESVVNLAorCVRQTV9NRURJVU0sCisJVFBNX1VOREVGSU5FRCwJCS8qIDIxNSAqLworCVRQTV9NRURJVU0sCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCQkvKiAyMjAgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDIyNSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAkJLyogMjMwICovCisJVFBNX0xPTkcsCisJVFBNX01FRElVTSwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDIzNSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAkJLyogMjQwICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fTUVESVVNLAorfTsKIAogc3RhdGljIHZvaWQgdXNlcl9yZWFkZXJfdGltZW91dCh1bnNpZ25lZCBsb25nIHB0cikKIHsKQEAgLTQ2LDcgKzMyNSw3IEBACiAJc2NoZWR1bGVfd29yaygmY2hpcC0+d29yayk7CiB9CiAKLXN0YXRpYyB2b2lkIHRpbWVvdXRfd29yayh2b2lkICogcHRyKQorc3RhdGljIHZvaWQgdGltZW91dF93b3JrKHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBwdHI7CiAKQEAgLTU3LDE3ICszMzYsNDMgQEAKIH0KIAogLyoKKyAqIFJldHVybnMgbWF4IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQKKyAqLwordW5zaWduZWQgbG9uZyB0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwKKwkJCQkJICAgdTMyIG9yZGluYWwpCit7CisJaW50IGR1cmF0aW9uX2lkeCA9IFRQTV9VTkRFRklORUQ7CisJaW50IGR1cmF0aW9uID0gMDsKKworCWlmIChvcmRpbmFsIDwgVFBNX01BWF9PUkRJTkFMKQorCQlkdXJhdGlvbl9pZHggPSB0cG1fb3JkaW5hbF9kdXJhdGlvbltvcmRpbmFsXTsKKwllbHNlIGlmICgob3JkaW5hbCAmIFRQTV9QUk9URUNURURfT1JESU5BTF9NQVNLKSA8CisJCSBUUE1fTUFYX1BST1RFQ1RFRF9PUkRJTkFMKQorCQlkdXJhdGlvbl9pZHggPQorCQkgICAgdHBtX3Byb3RlY3RlZF9vcmRpbmFsX2R1cmF0aW9uW29yZGluYWwgJgorCQkJCQkJICAgVFBNX1BST1RFQ1RFRF9PUkRJTkFMX01BU0tdOworCisJaWYgKGR1cmF0aW9uX2lkeCAhPSBUUE1fVU5ERUZJTkVEKQorCQlkdXJhdGlvbiA9IGNoaXAtPnZlbmRvci5kdXJhdGlvbltkdXJhdGlvbl9pZHhdOworCWlmIChkdXJhdGlvbiA8PSAwKQorCQlyZXR1cm4gMiAqIDYwICogSFo7CisJZWxzZQorCQlyZXR1cm4gZHVyYXRpb247Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKTsKKworLyoKICAqIEludGVybmFsIGtlcm5lbCBpbnRlcmZhY2UgdG8gdHJhbnNtaXQgVFBNIGNvbW1hbmRzCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHRwbV90cmFuc21pdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICBzaXplX3QgYnVmc2l6KQogewogCXNzaXplX3QgcmM7Ci0JdTMyIGNvdW50OworCXUzMiBjb3VudCwgb3JkaW5hbDsKIAl1bnNpZ25lZCBsb25nIHN0b3A7CiAKIAljb3VudCA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoYnVmICsgMikpKTsKLQorCW9yZGluYWwgPSBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGJ1ZiArIDYpKSk7CiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiAtRU5PREFUQTsKIAlpZiAoY291bnQgPiBidWZzaXopIHsKQEAgLTc4LDIxICszODMsMjMgQEAKIAogCWRvd24oJmNoaXAtPnRwbV9tdXRleCk7CiAKLQlpZiAoKHJjID0gY2hpcC0+dmVuZG9yLT5zZW5kKGNoaXAsICh1OCAqKSBidWYsIGNvdW50KSkgPCAwKSB7CisJaWYgKChyYyA9IGNoaXAtPnZlbmRvci5zZW5kKGNoaXAsICh1OCAqKSBidWYsIGNvdW50KSkgPCAwKSB7CiAJCWRldl9lcnIoY2hpcC0+ZGV2LAogCQkJInRwbV90cmFuc21pdDogdHBtX3NlbmQ6IGVycm9yICV6ZFxuIiwgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzdG9wID0gamlmZmllcyArIDIgKiA2MCAqIEhaOwotCWRvIHsKLQkJdTggc3RhdHVzID0gY2hpcC0+dmVuZG9yLT5zdGF0dXMoY2hpcCk7Ci0JCWlmICgoc3RhdHVzICYgY2hpcC0+dmVuZG9yLT5yZXFfY29tcGxldGVfbWFzaykgPT0KLQkJICAgIGNoaXAtPnZlbmRvci0+cmVxX2NvbXBsZXRlX3ZhbCkgewotCQkJZ290byBvdXRfcmVjdjsKLQkJfQorCWlmIChjaGlwLT52ZW5kb3IuaXJxKQorCQlnb3RvIG91dF9yZWN2OwogCi0JCWlmICgoc3RhdHVzID09IGNoaXAtPnZlbmRvci0+cmVxX2NhbmNlbGVkKSkgeworCXN0b3AgPSBqaWZmaWVzICsgdHBtX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihjaGlwLCBvcmRpbmFsKTsKKwlkbyB7CisJCXU4IHN0YXR1cyA9IGNoaXAtPnZlbmRvci5zdGF0dXMoY2hpcCk7CisJCWlmICgoc3RhdHVzICYgY2hpcC0+dmVuZG9yLnJlcV9jb21wbGV0ZV9tYXNrKSA9PQorCQkgICAgY2hpcC0+dmVuZG9yLnJlcV9jb21wbGV0ZV92YWwpCisJCQlnb3RvIG91dF9yZWN2OworCisJCWlmICgoc3RhdHVzID09IGNoaXAtPnZlbmRvci5yZXFfY2FuY2VsZWQpKSB7CiAJCQlkZXZfZXJyKGNoaXAtPmRldiwgIk9wZXJhdGlvbiBDYW5jZWxlZFxuIik7CiAJCQlyYyA9IC1FQ0FOQ0VMRUQ7CiAJCQlnb3RvIG91dDsKQEAgLTEwMiwxNCArNDA5LDEzIEBACiAJCXJtYigpOwogCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN0b3ApKTsKIAotCi0JY2hpcC0+dmVuZG9yLT5jYW5jZWwoY2hpcCk7CisJY2hpcC0+dmVuZG9yLmNhbmNlbChjaGlwKTsKIAlkZXZfZXJyKGNoaXAtPmRldiwgIk9wZXJhdGlvbiBUaW1lZCBvdXRcbiIpOwogCXJjID0gLUVUSU1FOwogCWdvdG8gb3V0OwogCiBvdXRfcmVjdjoKLQlyYyA9IGNoaXAtPnZlbmRvci0+cmVjdihjaGlwLCAodTggKikgYnVmLCBidWZzaXopOworCXJjID0gY2hpcC0+dmVuZG9yLnJlY3YoY2hpcCwgKHU4ICopIGJ1ZiwgYnVmc2l6KTsKIAlpZiAocmMgPCAwKQogCQlkZXZfZXJyKGNoaXAtPmRldiwKIAkJCSJ0cG1fdHJhbnNtaXQ6IHRwbV9yZWN2OiBlcnJvciAlemRcbiIsIHJjKTsKQEAgLTExOSwxNyArNDI1LDI0NyBAQAogfQogCiAjZGVmaW5lIFRQTV9ESUdFU1RfU0laRSAyMAotI2RlZmluZSBDQVBfUENSX1JFU1VMVF9TSVpFIDE4Ci1zdGF0aWMgY29uc3QgdTggY2FwX3BjcltdID0geworI2RlZmluZSBUUE1fRVJST1JfU0laRSAxMAorI2RlZmluZSBUUE1fUkVUX0NPREVfSURYIDYKKyNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1NJWkVfSURYIDEwCisjZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFggMTQKKyNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCAxOAorI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYIDIyCisjZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfNF9JRFggMjYKKyNkZWZpbmUgVFBNX0dFVF9DQVBfUEVSTV9ESVNBQkxFX0lEWCAxNgorI2RlZmluZSBUUE1fR0VUX0NBUF9QRVJNX0lOQUNUSVZFX0lEWCAxOAorI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfQk9PTF8xX0lEWCAxNAorI2RlZmluZSBUUE1fR0VUX0NBUF9URU1QX0lOQUNUSVZFX0lEWCAxNgorCisjZGVmaW5lIFRQTV9DQVBfSURYIDEzCisjZGVmaW5lIFRQTV9DQVBfU1VCQ0FQX0lEWCAyMQorCitlbnVtIHRwbV9jYXBhYmlsaXRpZXMgeworCVRQTV9DQVBfRkxBRyA9IDQsCisJVFBNX0NBUF9QUk9QID0gNSwKK307CisKK2VudW0gdHBtX3N1Yl9jYXBhYmlsaXRpZXMgeworCVRQTV9DQVBfUFJPUF9QQ1IgPSAweDEsCisJVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiA9IDB4MywKKwlUUE1fQ0FQX0ZMQUdfUEVSTSA9IDB4OCwKKwlUUE1fQ0FQX0ZMQUdfVk9MID0gMHg5LAorCVRQTV9DQVBfUFJPUF9PV05FUiA9IDB4MTEsCisJVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUID0gMHgxNSwKKwlUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OID0gMHgyMCwKK307CisKKy8qCisgKiBUaGlzIGlzIGEgc2VtaSBnZW5lcmljIEdldENhcGFiaWxpdHkgY29tbWFuZCBmb3IgdXNlCisgKiB3aXRoIHRoZSBjYXBhYmlsaXR5IHR5cGUgVFBNX0NBUF9QUk9QIG9yIFRQTV9DQVBfRkxBRworICogYW5kIHRoZWlyIGFzc29jaWF0ZWQgc3ViX2NhcGFiaWxpdGllcy4KKyAqLworCitzdGF0aWMgY29uc3QgdTggdHBtX2NhcFtdID0gewogCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCiAJMCwgMCwgMCwgMjIsCQkvKiBsZW5ndGggKi8KIAkwLCAwLCAwLCAxMDEsCQkvKiBUUE1fT1JEX0dldENhcGFiaWxpdHkgKi8KLQkwLCAwLCAwLCA1LAotCTAsIDAsIDAsIDQsCi0JMCwgMCwgMSwgMQorCTAsIDAsIDAsIDAsCQkvKiBUUE1fQ0FQXzxUWVBFPiAqLworCTAsIDAsIDAsIDQsCQkvKiBUUE1fQ0FQX1NVQl88VFlQRT4gc2l6ZSAqLworCTAsIDAsIDEsIDAJCS8qIFRQTV9DQVBfU1VCXzxUWVBFPiAqLwogfTsKIAotI2RlZmluZSBSRUFEX1BDUl9SRVNVTFRfU0laRSAzMAorc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfY21kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmRhdGEsIGludCBsZW4sCisJCQkgICAgY2hhciAqZGVzYykKK3sKKwlpbnQgZXJyOworCisJbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIGxlbik7CisJaWYgKGxlbiA8ICAwKQorCQlyZXR1cm4gbGVuOworCWlmIChsZW4gPT0gVFBNX0VSUk9SX1NJWkUpIHsKKwkJZXJyID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX1JFVF9DT0RFX0lEWCkpKTsKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICVzXG4iLCBlcnIsIGRlc2MpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCB0cG1fZ2VuX2ludGVycnVwdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJdTggZGF0YVttYXhfdChpbnQsIEFSUkFZX1NJWkUodHBtX2NhcCksIDMwKV07CisJc3NpemVfdCByYzsKKworCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOworCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOworCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKKworCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGltZW91dHMiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9nZW5faW50ZXJydXB0KTsKKwordm9pZCB0cG1fZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwl1OCBkYXRhW21heF90KGludCwgQVJSQVlfU0laRSh0cG1fY2FwKSwgMzApXTsKKwlzc2l6ZV90IHJjOworCXUzMiB0aW1lb3V0OworCisJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CisJZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7CisJZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0cyIpOworCWlmIChyYykKKwkJZ290byBkdXJhdGlvbjsKKworCWlmIChiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFgpKSkKKwkgICAgIT0gNCAqIHNpemVvZih1MzIpKQorCQlnb3RvIGR1cmF0aW9uOworCisJLyogRG9uJ3Qgb3ZlcndyaXRlIGRlZmF1bHQgaWYgdmFsdWUgaXMgMCAqLworCXRpbWVvdXQgPQorCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpOworCWlmICh0aW1lb3V0KQorCQljaGlwLT52ZW5kb3IudGltZW91dF9hID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwl0aW1lb3V0ID0KKwkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKTsKKwlpZiAodGltZW91dCkKKwkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisJdGltZW91dCA9CisJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFgpKSk7CisJaWYgKHRpbWVvdXQpCisJCWNoaXAtPnZlbmRvci50aW1lb3V0X2MgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCXRpbWVvdXQgPQorCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzRfSURYKSkpOworCWlmICh0aW1lb3V0KQorCQljaGlwLT52ZW5kb3IudGltZW91dF9kID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKworZHVyYXRpb246CisJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CisJZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7CisJZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTjsKKworCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgZHVyYXRpb25zIik7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwlpZiAoYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1NJWkVfSURYKSkpCisJICAgICE9IDMgKiBzaXplb2YodTMyKSkKKwkJcmV0dXJuOworCisJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPQorCSAgICBtc2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1CisJCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKworCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7CisJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9NRURJVU1dID0KKwkgICAgbXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQorCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKKwkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFgpKSkpOworCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTE9OR10gPQorCSAgICBtc2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1CisJCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKworCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8zX0lEWCkpKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fZ2V0X3RpbWVvdXRzKTsKKwordm9pZCB0cG1fY29udGludWVfc2VsZnRlc3Qoc3RydWN0IHRwbV9jaGlwICpjaGlwKQoreworCXU4IGRhdGFbXSA9IHsKKwkJMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KKwkJMCwgMCwgMCwgMTAsCQkvKiBsZW5ndGggKi8KKwkJMCwgMCwgMCwgODMsCQkvKiBUUE1fT1JEX0dldENhcGFiaWxpdHkgKi8KKwl9OworCisJdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fY29udGludWVfc2VsZnRlc3QpOworCitzc2l6ZV90IHRwbV9zaG93X2VuYWJsZWQoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAorCQkJY2hhciAqYnVmKQoreworCXU4IGRhdGFbbWF4X3QoaW50LCBBUlJBWV9TSVpFKHRwbV9jYXApLCAzNSldOworCXNzaXplX3QgcmM7CisKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOworCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOworCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19QRVJNOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtdHBpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgc3RhdGUiKTsKKwlpZiAocmMpCisJCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhZGF0YVtUUE1fR0VUX0NBUF9QRVJNX0RJU0FCTEVfSURYXSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19lbmFibGVkKTsKKworc3NpemVfdCB0cG1fc2hvd19hY3RpdmUoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAorCQkJY2hhciAqYnVmKQoreworCXU4IGRhdGFbbWF4X3QoaW50LCBBUlJBWV9TSVpFKHRwbV9jYXApLCAzNSldOworCXNzaXplX3QgcmM7CisKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOworCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOworCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19QRVJNOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtdHBpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgc3RhdGUiKTsKKwlpZiAocmMpCisJCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhZGF0YVtUUE1fR0VUX0NBUF9QRVJNX0lOQUNUSVZFX0lEWF0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfYWN0aXZlKTsKKworc3NpemVfdCB0cG1fc2hvd19vd25lZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCisJCQljaGFyICpidWYpCit7CisJdTggZGF0YVtzaXplb2YodHBtX2NhcCldOworCXNzaXplX3QgcmM7CisKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOworCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOworCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9PV05FUjsKKworCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgb3duZXIgc3RhdGUiKTsKKwlpZiAocmMpCisJCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhW1RQTV9HRVRfQ0FQX1JFVF9CT09MXzFfSURYXSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19vd25lZCk7CisKK3NzaXplX3QgdHBtX3Nob3dfdGVtcF9kZWFjdGl2YXRlZChzdHJ1Y3QgZGV2aWNlICogZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwgY2hhciAqYnVmKQoreworCXU4IGRhdGFbc2l6ZW9mKHRwbV9jYXApXTsKKwlzc2l6ZV90IHJjOworCisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKKwlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfRkxBRzsKKwlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUdfVk9MOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0ZW1wb3Jhcnkgc3RhdGUiKTsKKwlpZiAocmMpCisJCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhW1RQTV9HRVRfQ0FQX1RFTVBfSU5BQ1RJVkVfSURYXSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkKTsKKwogc3RhdGljIGNvbnN0IHU4IHBjcnJlYWRbXSA9IHsKIAkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwogCTAsIDAsIDAsIDE0LAkJLyogbGVuZ3RoICovCkBAIC0xNDAsOCArNjc2LDggQEAKIHNzaXplX3QgdHBtX3Nob3dfcGNycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7Ci0JdTggZGF0YVtSRUFEX1BDUl9SRVNVTFRfU0laRV07Ci0Jc3NpemVfdCBsZW47CisJdTggZGF0YVttYXhfdChpbnQsIG1heChBUlJBWV9TSVpFKHRwbV9jYXApLCBBUlJBWV9TSVpFKHBjcnJlYWQpKSwgMzApXTsKKwlzc2l6ZV90IHJjOwogCWludCBpLCBqLCBudW1fcGNyczsKIAlfX2JlMzIgaW5kZXg7CiAJY2hhciAqc3RyID0gYnVmOwpAQCAtMTUwLDI5ICs2ODYsMjQgQEAKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW1lbWNweShkYXRhLCBjYXBfcGNyLCBzaXplb2YoY2FwX3BjcikpOwotCWlmICgobGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSkpCi0JICAgIDwgQ0FQX1BDUl9SRVNVTFRfU0laRSkgewotCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgIgotCQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIFBDUlNcbiIsCi0JCQliZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyA2KSkpKTsKKwltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKKwlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKKwlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfUENSOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgUENSUyIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCiAJbnVtX3BjcnMgPSBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyAxNCkpKTsKLQogCWZvciAoaSA9IDA7IGkgPCBudW1fcGNyczsgaSsrKSB7CiAJCW1lbWNweShkYXRhLCBwY3JyZWFkLCBzaXplb2YocGNycmVhZCkpOwogCQlpbmRleCA9IGNwdV90b19iZTMyKGkpOwogCQltZW1jcHkoZGF0YSArIDEwLCAmaW5kZXgsIDQpOwotCQlpZiAoKGxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSkpKQotCQkgICAgPCBSRUFEX1BDUl9SRVNVTFRfU0laRSl7Ci0JCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQiCi0JCQkJIiBhdHRlbXB0aW5nIHRvIHJlYWQgUENSICVkIG9mICVkXG4iLAotCQkJCWJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIDYpKSksCi0JCQkJaSwgbnVtX3BjcnMpOworCQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJCQkJImF0dGVtcHRpbmcgdG8gcmVhZCBhIFBDUiIpOworCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKLQkJfQogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJQQ1ItJTAyZDogIiwgaSk7CiAJCWZvciAoaiA9IDA7IGogPCBUUE1fRElHRVNUX1NJWkU7IGorKykKIAkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiUwMlggIiwgKihkYXRhICsgMTAgKyBqKSk7CkBAIC0xOTQsNyArNzI1LDcgQEAKIAkJICAgICAgIGNoYXIgKmJ1ZikKIHsKIAl1OCAqZGF0YTsKLQlzc2l6ZV90IGxlbjsKKwlzc2l6ZV90IGVycjsKIAlpbnQgaSwgcmM7CiAJY2hhciAqc3RyID0gYnVmOwogCkBAIC0yMDgsMTQgKzczOSwxMCBAQAogCiAJbWVtY3B5KGRhdGEsIHJlYWRwdWJlaywgc2l6ZW9mKHJlYWRwdWJlaykpOwogCi0JaWYgKChsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgUkVBRF9QVUJFS19SRVNVTFRfU0laRSkpIDwKLQkgICAgUkVBRF9QVUJFS19SRVNVTFRfU0laRSkgewotCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgIgotCQkJCSJhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFBVQkVLXG4iLAotCQkJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIDYpKSkpOwotCQlyYyA9IDA7CisJZXJyID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFJFQURfUFVCRUtfUkVTVUxUX1NJWkUsCisJCQkiYXR0ZW1wdGluZyB0byByZWFkIHRoZSBQVUJFSyIpOworCWlmIChlcnIpCiAJCWdvdG8gb3V0OwotCX0KIAogCS8qIAogCSAgIGlnbm9yZSBoZWFkZXIgMTAgYnl0ZXMKQEAgLTI0NSwzNiArNzcyLDY4IEBACiAJCWlmICgoaSArIDEpICUgMTYgPT0gMCkKIAkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7CiAJfQotCXJjID0gc3RyIC0gYnVmOwogb3V0OgorCXJjID0gc3RyIC0gYnVmOwogCWtmcmVlKGRhdGEpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3B1YmVrKTsKIAotI2RlZmluZSBDQVBfVkVSX1JFU1VMVF9TSVpFIDE4CisjZGVmaW5lIENBUF9WRVJTSU9OXzFfMSA2CisjZGVmaW5lIENBUF9WRVJTSU9OXzFfMiAweDFBCisjZGVmaW5lIENBUF9WRVJTSU9OX0lEWCAxMwogc3RhdGljIGNvbnN0IHU4IGNhcF92ZXJzaW9uW10gPSB7CiAJMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KIAkwLCAwLCAwLCAxOCwJCS8qIGxlbmd0aCAqLwogCTAsIDAsIDAsIDEwMSwJCS8qIFRQTV9PUkRfR2V0Q2FwYWJpbGl0eSAqLwotCTAsIDAsIDAsIDYsCisJMCwgMCwgMCwgMCwKIAkwLCAwLCAwLCAwCiB9OwogCi0jZGVmaW5lIENBUF9NQU5VRkFDVFVSRVJfUkVTVUxUX1NJWkUgMTgKLXN0YXRpYyBjb25zdCB1OCBjYXBfbWFudWZhY3R1cmVyW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAyMiwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDEwMSwJCS8qIFRQTV9PUkRfR2V0Q2FwYWJpbGl0eSAqLwotCTAsIDAsIDAsIDUsCi0JMCwgMCwgMCwgNCwKLQkwLCAwLCAxLCAzCi19OwotCiBzc2l6ZV90IHRwbV9zaG93X2NhcHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQogewotCXU4IGRhdGFbc2l6ZW9mKGNhcF9tYW51ZmFjdHVyZXIpXTsKKwl1OCBkYXRhW21heF90KGludCwgbWF4KEFSUkFZX1NJWkUodHBtX2NhcCksIEFSUkFZX1NJWkUoY2FwX3ZlcnNpb24pKSwgMzApXTsKKwlzc2l6ZV90IHJjOworCWNoYXIgKnN0ciA9IGJ1ZjsKKworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CisJZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7CisJZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUjsKKworCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbWFudWZhY3R1cmVyIik7CisJaWYgKHJjKQorCQlyZXR1cm4gMDsKKworCXN0ciArPSBzcHJpbnRmKHN0ciwgIk1hbnVmYWN0dXJlcjogMHgleFxuIiwKKwkJICAgICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOworCisJbWVtY3B5KGRhdGEsIGNhcF92ZXJzaW9uLCBzaXplb2YoY2FwX3ZlcnNpb24pKTsKKwlkYXRhW0NBUF9WRVJTSU9OX0lEWF0gPSBDQVBfVkVSU0lPTl8xXzE7CisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjEgdmVyc2lvbiIpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwlzdHIgKz0gc3ByaW50ZihzdHIsCisJCSAgICAgICAiVENHIHZlcnNpb246ICVkLiVkXG5GaXJtd2FyZSB2ZXJzaW9uOiAlZC4lZFxuIiwKKwkJICAgICAgIChpbnQpIGRhdGFbMTRdLCAoaW50KSBkYXRhWzE1XSwgKGludCkgZGF0YVsxNl0sCisJCSAgICAgICAoaW50KSBkYXRhWzE3XSk7CisKK291dDoKKwlyZXR1cm4gc3RyIC0gYnVmOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfY2Fwcyk7CisKK3NzaXplX3QgdHBtX3Nob3dfY2Fwc18xXzIoc3RydWN0IGRldmljZSAqIGRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICpidWYpCit7CisJdTggZGF0YVttYXhfdChpbnQsIG1heChBUlJBWV9TSVpFKHRwbV9jYXApLCBBUlJBWV9TSVpFKGNhcF92ZXJzaW9uKSksIDMwKV07CiAJc3NpemVfdCBsZW47CiAJY2hhciAqc3RyID0gYnVmOwogCkBAIC0yODIsMjkgKzg0MSw0MCBAQAogCWlmIChjaGlwID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbWVtY3B5KGRhdGEsIGNhcF9tYW51ZmFjdHVyZXIsIHNpemVvZihjYXBfbWFudWZhY3R1cmVyKSk7CisJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CisJZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7CisJZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUjsKIAotCWlmICgobGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSkpIDwKLQkgICAgQ0FQX01BTlVGQUNUVVJFUl9SRVNVTFRfU0laRSkKLQkJcmV0dXJuIGxlbjsKKwlpZiAoKGxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSkpKSA8PQorCSAgICBUUE1fRVJST1JfU0laRSkgeworCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgIgorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBtYW51ZmFjdHVyZXJcbiIsCisJCQliZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fUkVUX0NPREVfSURYKSkpKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJc3RyICs9IHNwcmludGYoc3RyLCAiTWFudWZhY3R1cmVyOiAweCV4XG4iLAotCQkgICAgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgMTQpKSkpOworCQkgICAgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7CiAKIAltZW1jcHkoZGF0YSwgY2FwX3ZlcnNpb24sIHNpemVvZihjYXBfdmVyc2lvbikpOworCWRhdGFbQ0FQX1ZFUlNJT05fSURYXSA9IENBUF9WRVJTSU9OXzFfMjsKIAotCWlmICgobGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSkpIDwKLQkgICAgQ0FQX1ZFUl9SRVNVTFRfU0laRSkKLQkJcmV0dXJuIGxlbjsKKwlpZiAoKGxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSkpKSA8PQorCSAgICBUUE1fRVJST1JfU0laRSkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgIgorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjIgdmVyc2lvblxuIiwKKwkJCWJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9SRVRfQ09ERV9JRFgpKSkpOworCQlnb3RvIG91dDsKKwl9CisJc3RyICs9IHNwcmludGYoc3RyLAorCQkgICAgICAgIlRDRyB2ZXJzaW9uOiAlZC4lZFxuRmlybXdhcmUgdmVyc2lvbjogJWQuJWRcbiIsCisJCSAgICAgICAoaW50KSBkYXRhWzE2XSwgKGludCkgZGF0YVsxN10sIChpbnQpIGRhdGFbMThdLAorCQkgICAgICAgKGludCkgZGF0YVsxOV0pOwogCi0Jc3RyICs9Ci0JICAgIHNwcmludGYoc3RyLCAiVENHIHZlcnNpb246ICVkLiVkXG5GaXJtd2FyZSB2ZXJzaW9uOiAlZC4lZFxuIiwKLQkJICAgIChpbnQpIGRhdGFbMTRdLCAoaW50KSBkYXRhWzE1XSwgKGludCkgZGF0YVsxNl0sCi0JCSAgICAoaW50KSBkYXRhWzE3XSk7Ci0KK291dDoKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQotRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfY2Fwcyk7CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19jYXBzXzFfMik7CiAKIHNzaXplX3QgdHBtX3N0b3JlX2NhbmNlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0zMTMsNyArODgzLDcgQEAKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWNoaXAtPnZlbmRvci0+Y2FuY2VsKGNoaXApOworCWNoaXAtPnZlbmRvci5jYW5jZWwoY2hpcCk7CiAJcmV0dXJuIGNvdW50OwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3N0b3JlX2NhbmNlbCk7CkBAIC0zMjksNyArODk5LDcgQEAKIAlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmdHBtX2NoaXBfbGlzdCwgbGlzdCkgewotCQlpZiAocG9zLT52ZW5kb3ItPm1pc2NkZXYubWlub3IgPT0gbWlub3IpIHsKKwkJaWYgKHBvcy0+dmVuZG9yLm1pc2NkZXYubWlub3IgPT0gbWlub3IpIHsKIAkJCWNoaXAgPSBwb3M7CiAJCQlicmVhazsKIAkJfQpAQCAtMzg3LDcgKzk1Nyw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcmVsZWFzZSk7CiAKIHNzaXplX3QgdHBtX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkgIHNpemVfdCBzaXplLCBsb2ZmX3QgKiBvZmYpCisJCSAgc2l6ZV90IHNpemUsIGxvZmZfdCAqb2ZmKQogewogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgaW5fc2l6ZSA9IHNpemUsIG91dF9zaXplOwpAQCAtNDE5LDExICs5ODksMTAgQEAKIAogCXJldHVybiBpbl9zaXplOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fd3JpdGUpOwogCi1zc2l6ZV90IHRwbV9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJIHNpemVfdCBzaXplLCBsb2ZmX3QgKiBvZmYpCitzc2l6ZV90IHRwbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkgc2l6ZV90IHNpemUsIGxvZmZfdCAqb2ZmKQogewogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0X3NpemU7CkBAIC00NjIsMTQgKzEwMzEsMTMgQEAKIAlzcGluX3VubG9jaygmZHJpdmVyX2xvY2spOwogCiAJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Ci0JbWlzY19kZXJlZ2lzdGVyKCZjaGlwLT52ZW5kb3ItPm1pc2NkZXYpOwotCWtmcmVlKGNoaXAtPnZlbmRvci0+bWlzY2Rldi5uYW1lKTsKKwltaXNjX2RlcmVnaXN0ZXIoJmNoaXAtPnZlbmRvci5taXNjZGV2KTsKKwlrZnJlZShjaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lKTsKIAotCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCBjaGlwLT52ZW5kb3ItPmF0dHJfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCBjaGlwLT52ZW5kb3IuYXR0cl9ncm91cCk7CiAJdHBtX2Jpb3NfbG9nX3RlYXJkb3duKGNoaXAtPmJpb3NfZGlyKTsKIAotCWRldl9tYXNrW2NoaXAtPmRldl9udW0gLyBUUE1fTlVNX01BU0tfRU5UUklFUyBdICY9Ci0JCX4oMSA8PCAoY2hpcC0+ZGV2X251bSAlIFRQTV9OVU1fTUFTS19FTlRSSUVTKSk7CisJY2xlYXJfYml0KGNoaXAtPmRldl9udW0sIGRldl9tYXNrKTsKIAogCWtmcmVlKGNoaXApOwogCkBAIC01MjAsMTggKzEwODgsMTggQEAKICAqIHVwb24gZXJyYW50IGV4aXQgZnJvbSB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljIHByb2JlIGZ1bmN0aW9uIHNob3VsZCBjYWxsCiAgKiBwY2lfZGlzYWJsZV9kZXZpY2UKICAqLwotaW50IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljICplbnRyeSkKK3N0cnVjdCB0cG1fY2hpcCAqdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMKKwkJCQkgICAgICAgKmVudHJ5KQogewogI2RlZmluZSBERVZOQU1FX1NJWkUgNwogCiAJY2hhciAqZGV2bmFtZTsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7Ci0JaW50IGksIGo7CiAKIAkvKiBEcml2ZXIgc3BlY2lmaWMgcGVyLWRldmljZSBkYXRhICovCiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCiAJaW5pdF9NVVRFWCgmY2hpcC0+YnVmZmVyX211dGV4KTsKIAlpbml0X01VVEVYKCZjaGlwLT50cG1fbXV0ZXgpOwpAQCAtNTQzLDQ1ICsxMTExLDM3IEBACiAJY2hpcC0+dXNlcl9yZWFkX3RpbWVyLmZ1bmN0aW9uID0gdXNlcl9yZWFkZXJfdGltZW91dDsKIAljaGlwLT51c2VyX3JlYWRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjaGlwOwogCi0JY2hpcC0+dmVuZG9yID0gZW50cnk7CisJbWVtY3B5KCZjaGlwLT52ZW5kb3IsIGVudHJ5LCBzaXplb2Yoc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMpKTsKIAotCWNoaXAtPmRldl9udW0gPSAtMTsKKwljaGlwLT5kZXZfbnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFzaywgVFBNX05VTV9ERVZJQ0VTKTsKIAotCWZvciAoaSA9IDA7IGkgPCBUUE1fTlVNX01BU0tfRU5UUklFUzsgaSsrKQotCQlmb3IgKGogPSAwOyBqIDwgOCAqIHNpemVvZihpbnQpOyBqKyspCi0JCQlpZiAoKGRldl9tYXNrW2ldICYgKDEgPDwgaikpID09IDApIHsKLQkJCQljaGlwLT5kZXZfbnVtID0KLQkJCQkgICAgaSAqIFRQTV9OVU1fTUFTS19FTlRSSUVTICsgajsKLQkJCQlkZXZfbWFza1tpXSB8PSAxIDw8IGo7Ci0JCQkJZ290byBkZXZfbnVtX3NlYXJjaF9jb21wbGV0ZTsKLQkJCX0KLQotZGV2X251bV9zZWFyY2hfY29tcGxldGU6Ci0JaWYgKGNoaXAtPmRldl9udW0gPCAwKSB7CisJaWYgKGNoaXAtPmRldl9udW0gPj0gVFBNX05VTV9ERVZJQ0VTKSB7CiAJCWRldl9lcnIoZGV2LCAiTm8gYXZhaWxhYmxlIHRwbSBkZXZpY2UgbnVtYmVyc1xuIik7CiAJCWtmcmVlKGNoaXApOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIE5VTEw7CiAJfSBlbHNlIGlmIChjaGlwLT5kZXZfbnVtID09IDApCi0JCWNoaXAtPnZlbmRvci0+bWlzY2Rldi5taW5vciA9IFRQTV9NSU5PUjsKKwkJY2hpcC0+dmVuZG9yLm1pc2NkZXYubWlub3IgPSBUUE1fTUlOT1I7CiAJZWxzZQotCQljaGlwLT52ZW5kb3ItPm1pc2NkZXYubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1I7CisJCWNoaXAtPnZlbmRvci5taXNjZGV2Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SOworCisJc2V0X2JpdChjaGlwLT5kZXZfbnVtLCBkZXZfbWFzayk7CiAKIAlkZXZuYW1lID0ga21hbGxvYyhERVZOQU1FX1NJWkUsIEdGUF9LRVJORUwpOwogCXNjbnByaW50ZihkZXZuYW1lLCBERVZOQU1FX1NJWkUsICIlcyVkIiwgInRwbSIsIGNoaXAtPmRldl9udW0pOwotCWNoaXAtPnZlbmRvci0+bWlzY2Rldi5uYW1lID0gZGV2bmFtZTsKKwljaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lID0gZGV2bmFtZTsKIAotCWNoaXAtPnZlbmRvci0+bWlzY2Rldi5kZXYgPSBkZXY7CisJY2hpcC0+dmVuZG9yLm1pc2NkZXYuZGV2ID0gZGV2OwogCWNoaXAtPmRldiA9IGdldF9kZXZpY2UoZGV2KTsKIAotCWlmIChtaXNjX3JlZ2lzdGVyKCZjaGlwLT52ZW5kb3ItPm1pc2NkZXYpKSB7CisJaWYgKG1pc2NfcmVnaXN0ZXIoJmNoaXAtPnZlbmRvci5taXNjZGV2KSkgewogCQlkZXZfZXJyKGNoaXAtPmRldiwKIAkJCSJ1bmFibGUgdG8gbWlzY19yZWdpc3RlciAlcywgbWlub3IgJWRcbiIsCi0JCQljaGlwLT52ZW5kb3ItPm1pc2NkZXYubmFtZSwKLQkJCWNoaXAtPnZlbmRvci0+bWlzY2Rldi5taW5vcik7CisJCQljaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lLAorCQkJY2hpcC0+dmVuZG9yLm1pc2NkZXYubWlub3IpOwogCQlwdXRfZGV2aWNlKGRldik7CisJCWNsZWFyX2JpdChjaGlwLT5kZXZfbnVtLCBkZXZfbWFzayk7CiAJCWtmcmVlKGNoaXApOwotCQlkZXZfbWFza1tpXSAmPSAhKDEgPDwgaik7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKQEAgLTU5MiwxMSArMTE1MiwxMSBAQAogCiAJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKIAotCXN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCBjaGlwLT52ZW5kb3ItPmF0dHJfZ3JvdXApOworCXN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCBjaGlwLT52ZW5kb3IuYXR0cl9ncm91cCk7CiAKIAljaGlwLT5iaW9zX2RpciA9IHRwbV9iaW9zX2xvZ19zZXR1cChkZXZuYW1lKTsKIAotCXJldHVybiAwOworCXJldHVybiBjaGlwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3JlZ2lzdGVyX2hhcmR3YXJlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKaW5kZXggZGVjMDIyNC4uMDUwY2VkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCkBAIC00MiwxOCArNDIsMzAgQEAKIAkJCQljaGFyICopOwogZXh0ZXJuIHNzaXplX3QgdHBtX3Nob3dfY2FwcyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNoYXIgKik7CitleHRlcm4gc3NpemVfdCB0cG1fc2hvd19jYXBzXzFfMihzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKik7CiBleHRlcm4gc3NpemVfdCB0cG1fc3RvcmVfY2FuY2VsKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3QgdHBtX3Nob3dfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKik7CitleHRlcm4gc3NpemVfdCB0cG1fc2hvd19hY3RpdmUoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICopOworZXh0ZXJuIHNzaXplX3QgdHBtX3Nob3dfb3duZWQoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICopOworZXh0ZXJuIHNzaXplX3QgdHBtX3Nob3dfdGVtcF9kZWFjdGl2YXRlZChzdHJ1Y3QgZGV2aWNlICosCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsKIAogc3RydWN0IHRwbV9jaGlwOwogCiBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyB7Ci0JdTggcmVxX2NvbXBsZXRlX21hc2s7Ci0JdTggcmVxX2NvbXBsZXRlX3ZhbDsKLQl1OCByZXFfY2FuY2VsZWQ7CisJY29uc3QgdTggcmVxX2NvbXBsZXRlX21hc2s7CisJY29uc3QgdTggcmVxX2NvbXBsZXRlX3ZhbDsKKwljb25zdCB1OCByZXFfY2FuY2VsZWQ7CiAJdm9pZCBfX2lvbWVtICppb2Jhc2U7CQkvKiBpb3JlbWFwcGVkIGFkZHJlc3MgKi8KIAl1bnNpZ25lZCBsb25nIGJhc2U7CQkvKiBUUE0gYmFzZSBhZGRyZXNzICovCiAKKwlpbnQgaXJxOworCiAJaW50IHJlZ2lvbl9zaXplOwogCWludCBoYXZlX3JlZ2lvbjsKIApAQCAtNjMsNiArNzUsMTMgQEAKIAl1OCAoKnN0YXR1cykgKHN0cnVjdCB0cG1fY2hpcCAqKTsKIAlzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2OwogCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmF0dHJfZ3JvdXA7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWludCBsb2NhbGl0eTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXRfYSwgdGltZW91dF9iLCB0aW1lb3V0X2MsIHRpbWVvdXRfZDsgLyogamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcgZHVyYXRpb25bM107IC8qIGppZmZpZXMgKi8KKworCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfcXVldWU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgaW50X3F1ZXVlOwogfTsKIAogc3RydWN0IHRwbV9jaGlwIHsKQEAgLTgxLDEzICsxMDAsMTUgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAlzdHJ1Y3Qgc2VtYXBob3JlIHRwbV9tdXRleDsJLyogdHBtIGlzIHByb2Nlc3NpbmcgKi8KIAotCXN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljICp2ZW5kb3I7CisJc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgdmVuZG9yOwogCiAJc3RydWN0IGRlbnRyeSAqKmJpb3NfZGlyOwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAorI2RlZmluZSB0b190cG1fY2hpcChuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHRwbV9jaGlwLCB2ZW5kb3IpCisKIHN0YXRpYyBpbmxpbmUgaW50IHRwbV9yZWFkX2luZGV4KGludCBiYXNlLCBpbnQgaW5kZXgpCiB7CiAJb3V0YihpbmRleCwgYmFzZSk7CkBAIC0xMDAsOCArMTIxLDEyIEBACiAJb3V0Yih2YWx1ZSAmIDB4RkYsIGJhc2UrMSk7CiB9CiAKLWV4dGVybiBpbnQgdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKHN0cnVjdCBkZXZpY2UgKiwKLQkJCQkgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgKik7CitleHRlcm4gdm9pZCB0cG1fZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hpcCAqKTsKK2V4dGVybiB2b2lkIHRwbV9nZW5faW50ZXJydXB0KHN0cnVjdCB0cG1fY2hpcCAqKTsKK2V4dGVybiB2b2lkIHRwbV9jb250aW51ZV9zZWxmdGVzdChzdHJ1Y3QgdHBtX2NoaXAgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyB0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKHN0cnVjdCB0cG1fY2hpcCAqLCB1MzIpOworZXh0ZXJuIHN0cnVjdCB0cG1fY2hpcCogdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKHN0cnVjdCBkZXZpY2UgKiwKKwkJCQkgY29uc3Qgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgKik7CiBleHRlcm4gaW50IHRwbV9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIGV4dGVybiBpbnQgdHBtX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogZXh0ZXJuIHNzaXplX3QgdHBtX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwKQEAgLTExNSw3ICsxNDAsNyBAQAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiogdHBtX2Jpb3NfbG9nX3NldHVwKGNoYXIgKik7CiBleHRlcm4gdm9pZCB0cG1fYmlvc19sb2dfdGVhcmRvd24oc3RydWN0IGRlbnRyeSAqKik7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5KiB0cG1fYmlvc19sb2dfc2V0dXAoY2hhciAqbmFtZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqKiB0cG1fYmlvc19sb2dfc2V0dXAoY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCmluZGV4IGZmMzY1NDkuLjU4YTI1OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYwpAQCAtNDcsMTIgKzQ3LDEyIEBACiAJCXJldHVybiAtRUlPOwogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQlzdGF0dXMgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci0+aW9iYXNlICsgMSk7CisJCXN0YXR1cyA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArIDEpOwogCQlpZiAoKHN0YXR1cyAmIEFUTUxfU1RBVFVTX0RBVEFfQVZBSUwpID09IDApIHsKIAkJCWRldl9lcnIoY2hpcC0+ZGV2LCAiZXJyb3IgcmVhZGluZyBoZWFkZXJcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJKmJ1ZisrID0gaW9yZWFkOChjaGlwLT52ZW5kb3ItPmlvYmFzZSk7CisJCSpidWYrKyA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSk7CiAJfQogCiAJLyogc2l6ZSBvZiB0aGUgZGF0YSByZWNlaXZlZCAqLwpAQCAtNjMsNyArNjMsNyBAQAogCQlkZXZfZXJyKGNoaXAtPmRldiwKIAkJCSJSZWN2IHNpemUoJWQpIGxlc3MgdGhhbiBhdmFpbGFibGUgc3BhY2VcbiIsIHNpemUpOwogCQlmb3IgKDsgaSA8IHNpemU7IGkrKykgewkvKiBjbGVhciB0aGUgd2FpdGluZyBkYXRhIGFueXdheSAqLwotCQkJc3RhdHVzID0gaW9yZWFkOChjaGlwLT52ZW5kb3ItPmlvYmFzZSArIDEpOworCQkJc3RhdHVzID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgMSk7CiAJCQlpZiAoKHN0YXR1cyAmIEFUTUxfU1RBVFVTX0RBVEFfQVZBSUwpID09IDApIHsKIAkJCQlkZXZfZXJyKGNoaXAtPmRldiwgImVycm9yIHJlYWRpbmcgZGF0YVxuIik7CiAJCQkJcmV0dXJuIC1FSU87CkBAIC03NCwxNiArNzQsMTYgQEAKIAogCS8qIHJlYWQgYWxsIHRoZSBkYXRhIGF2YWlsYWJsZSAqLwogCWZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCXN0YXR1cyA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLT5pb2Jhc2UgKyAxKTsKKwkJc3RhdHVzID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgMSk7CiAJCWlmICgoc3RhdHVzICYgQVRNTF9TVEFUVVNfREFUQV9BVkFJTCkgPT0gMCkgewogCQkJZGV2X2VycihjaGlwLT5kZXYsICJlcnJvciByZWFkaW5nIGRhdGFcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJKmJ1ZisrID0gaW9yZWFkOChjaGlwLT52ZW5kb3ItPmlvYmFzZSk7CisJCSpidWYrKyA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSk7CiAJfQogCiAJLyogbWFrZSBzdXJlIGRhdGEgYXZhaWxhYmxlIGlzIGdvbmUgKi8KLQlzdGF0dXMgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci0+aW9iYXNlICsgMSk7CisJc3RhdHVzID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgMSk7CiAKIAlpZiAoc3RhdHVzICYgQVRNTF9TVEFUVVNfREFUQV9BVkFJTCkgewogCQlkZXZfZXJyKGNoaXAtPmRldiwgImRhdGEgYXZhaWxhYmxlIGlzIHN0dWNrXG4iKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWRldl9kYmcoY2hpcC0+ZGV2LCAidHBtX2F0bWxfc2VuZDpcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWRldl9kYmcoY2hpcC0+ZGV2LCAiJWQgMHgleCglZClcbiIsICBpLCBidWZbaV0sIGJ1ZltpXSk7Ci0gCQlpb3dyaXRlOChidWZbaV0sIGNoaXAtPnZlbmRvci0+aW9iYXNlKTsKKyAJCWlvd3JpdGU4KGJ1ZltpXSwgY2hpcC0+dmVuZG9yLmlvYmFzZSk7CiAJfQogCiAJcmV0dXJuIGNvdW50OwpAQCAtMTA4LDEyICsxMDgsMTIgQEAKIAogc3RhdGljIHZvaWQgdHBtX2F0bWxfY2FuY2VsKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQlpb3dyaXRlOChBVE1MX1NUQVRVU19BQk9SVCwgY2hpcC0+dmVuZG9yLT5pb2Jhc2UgKyAxKTsKKwlpb3dyaXRlOChBVE1MX1NUQVRVU19BQk9SVCwgY2hpcC0+dmVuZG9yLmlvYmFzZSArIDEpOwogfQogCiBzdGF0aWMgdTggdHBtX2F0bWxfc3RhdHVzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQlyZXR1cm4gaW9yZWFkOChjaGlwLT52ZW5kb3ItPmlvYmFzZSArIDEpOworCXJldHVybiBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKyAxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXRtZWxfb3BzID0gewpAQCAtMTQwLDcgKzE0MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGF0bWVsX2F0dHJfZ3JwID0geyAuYXR0cnMgPSBhdG1lbF9hdHRycyB9OwogCi1zdGF0aWMgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgdHBtX2F0bWVsID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljIHRwbV9hdG1lbCA9IHsKIAkucmVjdiA9IHRwbV9hdG1sX3JlY3YsCiAJLnNlbmQgPSB0cG1fYXRtbF9zZW5kLAogCS5jYW5jZWwgPSB0cG1fYXRtbF9jYW5jZWwsCkBAIC0xNTksMTAgKzE1OSwxMCBAQAogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAogCWlmIChjaGlwKSB7Ci0JCWlmIChjaGlwLT52ZW5kb3ItPmhhdmVfcmVnaW9uKQotCQkJYXRtZWxfcmVsZWFzZV9yZWdpb24oY2hpcC0+dmVuZG9yLT5iYXNlLAotCQkJCQkgICAgIGNoaXAtPnZlbmRvci0+cmVnaW9uX3NpemUpOwotCQlhdG1lbF9wdXRfYmFzZV9hZGRyKGNoaXAtPnZlbmRvcik7CisJCWlmIChjaGlwLT52ZW5kb3IuaGF2ZV9yZWdpb24pCisJCQlhdG1lbF9yZWxlYXNlX3JlZ2lvbihjaGlwLT52ZW5kb3IuYmFzZSwKKwkJCQkJICAgICBjaGlwLT52ZW5kb3IucmVnaW9uX3NpemUpOworCQlhdG1lbF9wdXRfYmFzZV9hZGRyKGNoaXAtPnZlbmRvci5pb2Jhc2UpOwogCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwogCX0KQEAgLTE3OSwxOCArMTc5LDIyIEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2F0bWVsKHZvaWQpCiB7CiAJaW50IHJjID0gMDsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IE5VTEw7CisJaW50IGhhdmVfcmVnaW9uLCByZWdpb25fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJc3RydWN0ICB0cG1fY2hpcCAqY2hpcDsKIAogCWRyaXZlcl9yZWdpc3RlcigmYXRtbF9kcnYpOwogCi0JaWYgKCh0cG1fYXRtZWwuaW9iYXNlID0gYXRtZWxfZ2V0X2Jhc2VfYWRkcigmdHBtX2F0bWVsKSkgPT0gTlVMTCkgeworCWlmICgoaW9iYXNlID0gYXRtZWxfZ2V0X2Jhc2VfYWRkcigmYmFzZSwgJnJlZ2lvbl9zaXplKSkgPT0gTlVMTCkgewogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3VucmVnX2RydjsKIAl9CiAKLQl0cG1fYXRtZWwuaGF2ZV9yZWdpb24gPQorCWhhdmVfcmVnaW9uID0KIAkgICAgKGF0bWVsX3JlcXVlc3RfcmVnaW9uCi0JICAgICAodHBtX2F0bWVsLmJhc2UsIHRwbV9hdG1lbC5yZWdpb25fc2l6ZSwKLQkgICAgICAidHBtX2F0bWVsMCIpID09IE5VTEwpID8gMCA6IDE7CisJICAgICAodHBtX2F0bWVsLmJhc2UsIHJlZ2lvbl9zaXplLCAidHBtX2F0bWVsMCIpID09IE5VTEwpID8gMCA6IDE7CisKIAogCWlmIChJU19FUlIKIAkgICAgKHBkZXYgPQpAQCAtMTk5LDE3ICsyMDMsMjUgQEAKIAkJZ290byBlcnJfcmVsX3JlZzsKIAl9CiAKLQlpZiAoKHJjID0gdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKCZwZGV2LT5kZXYsICZ0cG1fYXRtZWwpKSA8IDApCisJaWYgKCEoY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZSgmcGRldi0+ZGV2LCAmdHBtX2F0bWVsKSkpIHsKKwkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl91bnJlZ19kZXY7CisJfQorCisJY2hpcC0+dmVuZG9yLmlvYmFzZSA9IGlvYmFzZTsKKwljaGlwLT52ZW5kb3IuYmFzZSA9IGJhc2U7CisJY2hpcC0+dmVuZG9yLmhhdmVfcmVnaW9uID0gaGF2ZV9yZWdpb247CisJY2hpcC0+dmVuZG9yLnJlZ2lvbl9zaXplID0gcmVnaW9uX3NpemU7CisKIAlyZXR1cm4gMDsKIAogZXJyX3VucmVnX2RldjoKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIGVycl9yZWxfcmVnOgotCWF0bWVsX3B1dF9iYXNlX2FkZHIoJnRwbV9hdG1lbCk7Ci0JaWYgKHRwbV9hdG1lbC5oYXZlX3JlZ2lvbikKLQkJYXRtZWxfcmVsZWFzZV9yZWdpb24odHBtX2F0bWVsLmJhc2UsCi0JCQkJICAgICB0cG1fYXRtZWwucmVnaW9uX3NpemUpOworCWF0bWVsX3B1dF9iYXNlX2FkZHIoaW9iYXNlKTsKKwlpZiAoaGF2ZV9yZWdpb24pCisJCWF0bWVsX3JlbGVhc2VfcmVnaW9uKGJhc2UsCisJCQkJICAgICByZWdpb25fc2l6ZSk7CiBlcnJfdW5yZWdfZHJ2OgogCWRyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmgKaW5kZXggZDM0NzhhYS4uMmU2OGVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5oCkBAIC0yOCwxMyArMjgsMTIgQEAKICNkZWZpbmUgYXRtZWxfcmVxdWVzdF9yZWdpb24gcmVxdWVzdF9tZW1fcmVnaW9uCiAjZGVmaW5lIGF0bWVsX3JlbGVhc2VfcmVnaW9uIHJlbGVhc2VfbWVtX3JlZ2lvbgogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRtZWxfcHV0X2Jhc2VfYWRkcihzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYwotCQkJCQkgKnZlbmRvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG1lbF9wdXRfYmFzZV9hZGRyKHZvaWQgX19pb21lbSAqaW9iYXNlKQogewotCWlvdW5tYXAodmVuZG9yLT5pb2Jhc2UpOworCWlvdW5tYXAoaW9iYXNlKTsKIH0KIAotc3RhdGljIHZvaWQgX19pb21lbSAqIGF0bWVsX2dldF9iYXNlX2FkZHIoc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgKnZlbmRvcikKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBhdG1lbF9nZXRfYmFzZV9hZGRyKHVuc2lnbmVkIGxvbmcgKmJhc2UsIGludCAqcmVnaW9uX3NpemUpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHNpemU7CkBAIC03MSw5ICs3MCw5IEBACiAJZWxzZQogCQlzaXplID0gcmVnW25hZGRyY107CiAKLQl2ZW5kb3ItPmJhc2UgPSBhZGRyZXNzOwotCXZlbmRvci0+cmVnaW9uX3NpemUgPSBzaXplOwotCXJldHVybiBpb3JlbWFwKHZlbmRvci0+YmFzZSwgdmVuZG9yLT5yZWdpb25fc2l6ZSk7CisJKmJhc2UgPSBhZGRyZXNzOworCSpyZWdpb25fc2l6ZSA9IHNpemU7CisJcmV0dXJuIGlvcmVtYXAoKmJhc2UsICpyZWdpb25fc2l6ZSk7CiB9CiAjZWxzZQogI2RlZmluZSBhdG1lbF9nZXRiKGNoaXAsIG9mZnNldCkgaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIG9mZnNldCkKQEAgLTEwNiwxNCArMTA1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG1lbF9wdXRfYmFzZV9hZGRyKHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljCi0JCQkJCSAqdmVuZG9yKQorc3RhdGljIGlubGluZSB2b2lkIGF0bWVsX3B1dF9iYXNlX2FkZHIodm9pZCBfX2lvbWVtICppb2Jhc2UpCiB7CiB9CiAKIC8qIERldGVybWluZSB3aGVyZSB0byB0YWxrIHRvIGRldmljZSAqLwotc3RhdGljIHZvaWQgX19pb21lbSAqIGF0bWVsX2dldF9iYXNlX2FkZHIoc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMKLQkJCQkJICp2ZW5kb3IpCitzdGF0aWMgdm9pZCBfX2lvbWVtICogYXRtZWxfZ2V0X2Jhc2VfYWRkcih1bnNpZ25lZCBsb25nICpiYXNlLCBpbnQgKnJlZ2lvbl9zaXplKQogewogCWludCBsbywgaGk7CiAKQEAgLTEyMyw5ICsxMjAsOSBAQAogCWxvID0gdHBtX3JlYWRfaW5kZXgoVFBNX0FERFIsIFRQTV9BVE1FTF9CQVNFX0FERFJfTE8pOwogCWhpID0gdHBtX3JlYWRfaW5kZXgoVFBNX0FERFIsIFRQTV9BVE1FTF9CQVNFX0FERFJfSEkpOwogCi0JdmVuZG9yLT5iYXNlID0gKGhpIDw8IDgpIHwgbG87Ci0JdmVuZG9yLT5yZWdpb25fc2l6ZSA9IDI7CisJKmJhc2UgPSAoaGkgPDwgOCkgfCBsbzsKKwkqcmVnaW9uX3NpemUgPSAyOwogCi0JcmV0dXJuIGlvcG9ydF9tYXAodmVuZG9yLT5iYXNlLCB2ZW5kb3ItPnJlZ2lvbl9zaXplKTsKKwlyZXR1cm4gaW9wb3J0X21hcCgqYmFzZSwgKnJlZ2lvbl9zaXplKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYmlvcy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYmlvcy5jCmluZGV4IDUzN2FhNDUuLmE2MTE5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2Jpb3MuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9iaW9zLmMKQEAgLTI5LDYgKzI5LDExIEBACiAjZGVmaW5lIE1BWF9URVhUX0VWRU5UCQkxMDAwCS8qIE1heCBldmVudCBzdHJpbmcgbGVuZ3RoICovCiAjZGVmaW5lIEFDUElfVENQQV9TSUcJCSJUQ1BBIgkvKiAweDQxNTA0MzU0IC8nVENQQScgKi8KIAorZW51bSBiaW9zX3BsYXRmb3JtX2NsYXNzIHsKKwlCSU9TX0NMSUVOVCA9IDB4MDAsCisJQklPU19TRVJWRVIgPSAweDAxLAorfTsKKwogc3RydWN0IHRwbV9iaW9zX2xvZyB7CiAJdm9pZCAqYmlvc19ldmVudF9sb2c7CiAJdm9pZCAqYmlvc19ldmVudF9sb2dfZW5kOwpAQCAtMzYsOSArNDEsMTggQEAKIAogc3RydWN0IGFjcGlfdGNwYSB7CiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhkcjsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTMyIGxvZ19tYXhfbGVuIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQl1MzIgbG9nX3N0YXJ0X2FkZHIgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXUxNiBwbGF0Zm9ybV9jbGFzczsKKwl1bmlvbiB7CisJCXN0cnVjdCBjbGllbnRfaGRyIHsKKwkJCXUzMiBsb2dfbWF4X2xlbiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJCQl1NjQgbG9nX3N0YXJ0X2FkZHIgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCQl9IGNsaWVudDsKKwkJc3RydWN0IHNlcnZlcl9oZHIgeworCQkJdTE2IHJlc2VydmVkOworCQkJdTY0IGxvZ19tYXhfbGVuIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwkJCXU2NCBsb2dfc3RhcnRfYWRkciBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJCX0gc2VydmVyOworCX07CiB9OwogCiBzdHJ1Y3QgdGNwYV9ldmVudCB7CkBAIC05MSw2ICsxMDUsMTIgQEAKIAkiTm9uLUhvc3QgSW5mbyIKIH07CiAKK3N0cnVjdCB0Y3BhX3BjX2V2ZW50IHsKKwl1MzIgZXZlbnRfaWQ7CisJdTMyIGV2ZW50X3NpemU7CisJdTggZXZlbnRfZGF0YVswXTsKK307CisKIGVudW0gdGNwYV9wY19ldmVudF9pZHMgewogCVNNQklPUyA9IDEsCiAJQklTX0NFUlQsCkBAIC0xMDAsMTQgKzEyMCwxNSBAQAogCU5WUkFNLAogCU9QVElPTl9ST01fRVhFQywKIAlPUFRJT05fUk9NX0NPTkZJRywKLQlPUFRJT05fUk9NX01JQ1JPQ09ERSwKKwlPUFRJT05fUk9NX01JQ1JPQ09ERSA9IDEwLAogCVNfQ1JUTV9WRVJTSU9OLAogCVNfQ1JUTV9DT05URU5UUywKIAlQT1NUX0NPTlRFTlRTLAorCUhPU1RfVEFCTEVfT0ZfREVWSUNFUywKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB0Y3BhX3BjX2V2ZW50X2lkX3N0cmluZ3NbXSA9IHsKLQkiIgorCSIiLAogCSJTTUJJT1MiLAogCSJCSVMgQ2VydGlmaWNhdGUiLAogCSJQT1NUIEJJT1MgIiwKQEAgLTExNiwxMCArMTM3LDEyIEBACiAJIk5WUkFNIiwKIAkiT3B0aW9uIFJPTSIsCiAJIk9wdGlvbiBST00gY29uZmlnIiwKLQkiT3B0aW9uIFJPTSBtaWNyb2NvZGUiLAorCSIiLAorCSJPcHRpb24gUk9NIG1pY3JvY29kZSAiLAogCSJTLUNSVE0gVmVyc2lvbiIsCi0JIlMtQ1JUTSBDb250ZW50cyIsCi0JIlMtQ1JUTSBQT1NUIENvbnRlbnRzIiwKKwkiUy1DUlRNIENvbnRlbnRzICIsCisJIlBPU1QgQ29udGVudHMgIiwKKwkiVGFibGUgb2YgRGV2aWNlcyIsCiB9OwogCiAvKiByZXR1cm5zIHBvaW50ZXIgdG8gc3RhcnQgb2YgcG9zLiBlbnRyeSBvZiB0Y2cgbG9nICovCkBAIC0xOTEsNyArMjE0LDcgQEAKIAljb25zdCBjaGFyICpuYW1lID0gIiI7CiAJY2hhciBkYXRhWzQwXSA9ICIiOwogCWludCBpLCBuX2xlbiA9IDAsIGRfbGVuID0gMDsKLQl1MzIgZXZlbnRfaWQ7CisJc3RydWN0IHRjcGFfcGNfZXZlbnQgKnBjX2V2ZW50OwogCiAJc3dpdGNoKGV2ZW50LT5ldmVudF90eXBlKSB7CiAJY2FzZSBQUkVCT09UOgpAQCAtMjIwLDMxICsyNDMsMzIgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIEVWRU5UX1RBRzoKLQkJZXZlbnRfaWQgPSBiZTMyX3RvX2NwdSgqKCh1MzIgKilldmVudF9lbnRyeSkpOworCQlwY19ldmVudCA9IChzdHJ1Y3QgdGNwYV9wY19ldmVudCAqKWV2ZW50X2VudHJ5OwogCiAJCS8qIFRvRG8gUm93IGRhdGEgLT4gQmFzZTY0ICovCiAKLQkJc3dpdGNoIChldmVudF9pZCkgeworCQlzd2l0Y2ggKHBjX2V2ZW50LT5ldmVudF9pZCkgewogCQljYXNlIFNNQklPUzoKIAkJY2FzZSBCSVNfQ0VSVDoKIAkJY2FzZSBDTU9TOgogCQljYXNlIE5WUkFNOgogCQljYXNlIE9QVElPTl9ST01fRVhFQzoKIAkJY2FzZSBPUFRJT05fUk9NX0NPTkZJRzoKLQkJY2FzZSBPUFRJT05fUk9NX01JQ1JPQ09ERToKIAkJY2FzZSBTX0NSVE1fVkVSU0lPTjoKLQkJY2FzZSBTX0NSVE1fQ09OVEVOVFM6Ci0JCWNhc2UgUE9TVF9DT05URU5UUzoKLQkJCW5hbWUgPSB0Y3BhX3BjX2V2ZW50X2lkX3N0cmluZ3NbZXZlbnRfaWRdOworCQkJbmFtZSA9IHRjcGFfcGNfZXZlbnRfaWRfc3RyaW5nc1twY19ldmVudC0+ZXZlbnRfaWRdOwogCQkJbl9sZW4gPSBzdHJsZW4obmFtZSk7CiAJCQlicmVhazsKKwkJLyogaGFzaCBkYXRhICovCiAJCWNhc2UgUE9TVF9CSU9TX1JPTToKIAkJY2FzZSBFU0NEOgotCQkJbmFtZSA9IHRjcGFfcGNfZXZlbnRfaWRfc3RyaW5nc1tldmVudF9pZF07CisJCWNhc2UgT1BUSU9OX1JPTV9NSUNST0NPREU6CisJCWNhc2UgU19DUlRNX0NPTlRFTlRTOgorCQljYXNlIFBPU1RfQ09OVEVOVFM6CisJCQluYW1lID0gdGNwYV9wY19ldmVudF9pZF9zdHJpbmdzW3BjX2V2ZW50LT5ldmVudF9pZF07CiAJCQluX2xlbiA9IHN0cmxlbihuYW1lKTsKIAkJCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKQotCQkJCWRfbGVuICs9IHNwcmludGYoZGF0YSwgIiUwMngiLAotCQkJCQkJZXZlbnRfZW50cnlbOCArIGldKTsKKwkJCQlkX2xlbiArPSBzcHJpbnRmKCZkYXRhWzIqaV0sICIlMDJ4IiwKKwkJCQkJCXBjX2V2ZW50LT5ldmVudF9kYXRhW2ldKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC0yNjAsNTIgKzI4NCwxMyBAQAogCiBzdGF0aWMgaW50IHRwbV9iaW5hcnlfYmlvc19tZWFzdXJlbWVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IHRjcGFfZXZlbnQgKmV2ZW50ID0gdjsKKwljaGFyICpkYXRhID0gdjsKKwlpbnQgaTsKIAotCWNoYXIgKmV2ZW50bmFtZTsKLQljaGFyIGRhdGFbNF07Ci0JdTMyIGhlbHA7Ci0JaW50IGksIGxlbjsKLQlzdHJ1Y3QgdGNwYV9ldmVudCAqZXZlbnQgPSAoc3RydWN0IHRjcGFfZXZlbnQgKikgdjsKLQl1bnNpZ25lZCBjaGFyICpldmVudF9lbnRyeSA9Ci0JICAgICh1bnNpZ25lZCBjaGFyICopICh2ICsgc2l6ZW9mKHN0cnVjdCB0Y3BhX2V2ZW50KSk7Ci0KLQlldmVudG5hbWUgPSBrbWFsbG9jKE1BWF9URVhUX0VWRU5ULCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV2ZW50bmFtZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFUlJPUiAtIE5vIE1lbW9yeSBmb3IgZXZlbnQgbmFtZVxuICIsCi0JCSAgICAgICBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIDFzdDogUENSIHVzZWQgaXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgKDQgYnl0ZXMpICovCi0JaGVscCA9IGxlMzJfdG9fY3B1KGV2ZW50LT5wY3JfaW5kZXgpOwotCW1lbWNweShkYXRhLCAmaGVscCwgNCk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB0Y3BhX2V2ZW50KSArIGV2ZW50LT5ldmVudF9zaXplOyBpKyspCiAJCXNlcV9wdXRjKG0sIGRhdGFbaV0pOwogCi0JLyogMm5kOiBTSEExICgyMCBieXRlcykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKLQkJc2VxX3B1dGMobSwgZXZlbnQtPnBjcl92YWx1ZVtpXSk7Ci0KLQkvKiAzcmQ6IGV2ZW50IHR5cGUgaWRlbnRpZmllciAoNCBieXRlcykgKi8KLQloZWxwID0gbGUzMl90b19jcHUoZXZlbnQtPmV2ZW50X3R5cGUpOwotCW1lbWNweShkYXRhLCAmaGVscCwgNCk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJc2VxX3B1dGMobSwgZGF0YVtpXSk7Ci0KLQlsZW4gPSAwOwotCi0JbGVuICs9IGdldF9ldmVudF9uYW1lKGV2ZW50bmFtZSwgZXZlbnQsIGV2ZW50X2VudHJ5KTsKLQotCS8qIDR0aDogIGZpbGVuYW1lIDw9IDI1NSArIFwnMCcgZGVsaW1pdGVyICovCi0JaWYgKGxlbiA+IFRDR19FVkVOVF9OQU1FX0xFTl9NQVgpCi0JCWxlbiA9IFRDR19FVkVOVF9OQU1FX0xFTl9NQVg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCXNlcV9wdXRjKG0sIGV2ZW50bmFtZVtpXSk7Ci0KLQkvKiA1dGg6IGRlbGltaXRlciAqLwotCXNlcV9wdXRjKG0sICdcMCcpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1Myw2ICszMzgsNyBAQAogCS8qIDR0aDogZXZlbnRuYW1lIDw9IG1heCArIFwnMCcgZGVsaW1pdGVyICovCiAJc2VxX3ByaW50ZihtLCAiICVzXG4iLCBldmVudG5hbWUpOwogCisJa2ZyZWUoZXZlbnRuYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc2LDYgKzM2Miw3IEBACiAJc3RydWN0IGFjcGlfdGNwYSAqYnVmZjsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp2aXJ0OworCXU2NCBsZW4sIHN0YXJ0OwogCiAJaWYgKGxvZy0+Ymlvc19ldmVudF9sb2cgIT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIKQEAgLTM5NiwyNyArMzgzLDM3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChidWZmLT5sb2dfbWF4X2xlbiA9PSAwKSB7CisJc3dpdGNoKGJ1ZmYtPnBsYXRmb3JtX2NsYXNzKSB7CisJY2FzZSBCSU9TX1NFUlZFUjoKKwkJbGVuID0gYnVmZi0+c2VydmVyLmxvZ19tYXhfbGVuOworCQlzdGFydCA9IGJ1ZmYtPnNlcnZlci5sb2dfc3RhcnRfYWRkcjsKKwkJYnJlYWs7CisJY2FzZSBCSU9TX0NMSUVOVDoKKwlkZWZhdWx0OgorCQlsZW4gPSBidWZmLT5jbGllbnQubG9nX21heF9sZW47CisJCXN0YXJ0ID0gYnVmZi0+Y2xpZW50LmxvZ19zdGFydF9hZGRyOworCQlicmVhazsKKwl9CisJaWYgKCFsZW4pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRVJST1IgLSBUQ1BBIGxvZyBhcmVhIGVtcHR5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIG1hbGxvYyBFdmVudExvZyBzcGFjZSAqLwotCWxvZy0+Ymlvc19ldmVudF9sb2cgPSBrbWFsbG9jKGJ1ZmYtPmxvZ19tYXhfbGVuLCBHRlBfS0VSTkVMKTsKKwlsb2ctPmJpb3NfZXZlbnRfbG9nID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghbG9nLT5iaW9zX2V2ZW50X2xvZykgewotCQlwcmludGsKLQkJICAgICgiJXM6IEVSUk9SIC0gTm90IGVub3VnaCAgTWVtb3J5IGZvciBCSU9TIG1lYXN1cmVtZW50c1xuIiwKLQkJICAgICBfX2Z1bmNfXyk7CisJCXByaW50aygiJXM6IEVSUk9SIC0gTm90IGVub3VnaCAgTWVtb3J5IGZvciBCSU9TIG1lYXN1cmVtZW50c1xuIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbG9nLT5iaW9zX2V2ZW50X2xvZ19lbmQgPSBsb2ctPmJpb3NfZXZlbnRfbG9nICsgYnVmZi0+bG9nX21heF9sZW47CisJbG9nLT5iaW9zX2V2ZW50X2xvZ19lbmQgPSBsb2ctPmJpb3NfZXZlbnRfbG9nICsgbGVuOwogCi0JYWNwaV9vc19tYXBfbWVtb3J5KGJ1ZmYtPmxvZ19zdGFydF9hZGRyLCBidWZmLT5sb2dfbWF4X2xlbiwgKHZvaWQgKikgJnZpcnQpOworCWFjcGlfb3NfbWFwX21lbW9yeShzdGFydCwgbGVuLCAodm9pZCAqKSAmdmlydCk7CiAKLQltZW1jcHkobG9nLT5iaW9zX2V2ZW50X2xvZywgdmlydCwgYnVmZi0+bG9nX21heF9sZW4pOworCW1lbWNweShsb2ctPmJpb3NfZXZlbnRfbG9nLCB2aXJ0LCBsZW4pOwogCi0JYWNwaV9vc191bm1hcF9tZW1vcnkodmlydCwgYnVmZi0+bG9nX21heF9sZW4pOworCWFjcGlfb3NfdW5tYXBfbWVtb3J5KHZpcnQsIGxlbik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jCmluZGV4IDI0MDk1ZjYuLmFkZmZmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYwpAQCAtMTUsNiArMTUsNyBAQAogICogTGljZW5zZS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgInRwbS5oIgogCkBAIC0xMDQsNyArMTA1LDcgQEAKIAogCWlmIChjbGVhcl93cmZpZm8pIHsKIAkJZm9yIChpID0gMDsgaSA8IDQwOTY7IGkrKykgewotCQkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIFdSRklGTyk7CisJCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBXUkZJRk8pOwogCQkJaWYgKHN0YXR1cyA9PSAweGZmKSB7CiAJCQkJaWYgKGNoZWNrID09IDUpCiAJCQkJCWJyZWFrOwpAQCAtMTI0LDggKzEyNSw4IEBACiAJICovCiAJaSA9IDA7CiAJZG8gewotCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgUkRGSUZPKTsKLQkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIFNUQVQpOworCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBSREZJRk8pOworCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBTVEFUKTsKIAkJaSsrOwogCQlpZiAoaSA9PSBUUE1fTUFYX1RSSUVTKQogCQkJcmV0dXJuIC1FSU87CkBAIC0xMzgsNyArMTM5LDcgQEAKIAlpbnQgc3RhdHVzOwogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBUUE1fTUFYX1RSSUVTOyBpKyspIHsKLQkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIFNUQVQpOworCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBTVEFUKTsKIAkJLyogY2hlY2sgdGhlIHN0YXR1cy1yZWdpc3RlciBpZiB3YWl0X2Zvcl9iaXQgaXMgc2V0ICovCiAJCWlmIChzdGF0dXMgJiAxIDw8IHdhaXRfZm9yX2JpdCkKIAkJCWJyZWFrOwpAQCAtMTU3LDcgKzE1OCw3IEBACiBzdGF0aWMgdm9pZCB3YWl0X2FuZF9zZW5kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggc2VuZGJ5dGUpCiB7CiAJd2FpdChjaGlwLCBTVEFUX1hGRSk7Ci0Jb3V0YihzZW5kYnl0ZSwgY2hpcC0+dmVuZG9yLT5iYXNlICsgV1JGSUZPKTsKKwlvdXRiKHNlbmRieXRlLCBjaGlwLT52ZW5kb3IuYmFzZSArIFdSRklGTyk7CiB9CiAKICAgICAvKiBOb3RlOiBXVFggbWVhbnMgV2FpdGluZy1UaW1lLUV4dGVuc2lvbi4gV2hlbmV2ZXIgdGhlIFRQTSBuZWVkcyBtb3JlCkBAIC0yMDQsNyArMjA1LDcgQEAKIAkJcmV0ID0gd2FpdChjaGlwLCBTVEFUX1JEQSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKLQkJYnVmW2ldID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIFJERklGTyk7CisJCWJ1ZltpXSA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIFJERklGTyk7CiAJfQogCiAJaWYgKGJ1ZlswXSAhPSBUUE1fVkxfVkVSKSB7CkBAIC0yMTksNyArMjIwLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCQl3YWl0KGNoaXAsIFNUQVRfUkRBKTsKLQkJCWJ1ZltpXSA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBSREZJRk8pOworCQkJYnVmW2ldID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgUkRGSUZPKTsKIAkJfQogCiAJCWlmICgoc2l6ZSA9PSAweDZEMDApICYmIChidWZbMV0gPT0gMHg4MCkpIHsKQEAgLTI2OCw3ICsyNjksNyBAQAogCXU4IGNvdW50X2hpZ2gsIGNvdW50X2xvdywgY291bnRfNCwgY291bnRfMywgY291bnRfMiwgY291bnRfMTsKIAogCS8qIERpc2FibGluZyBSZXNldCwgTFAgYW5kIElSUUMgKi8KLQlvdXRiKFJFU0VUX0xQX0lSUUNfRElTQUJMRSwgY2hpcC0+dmVuZG9yLT5iYXNlICsgQ01EKTsKKwlvdXRiKFJFU0VUX0xQX0lSUUNfRElTQUJMRSwgY2hpcC0+dmVuZG9yLmJhc2UgKyBDTUQpOwogCiAJcmV0ID0gZW1wdHlfZmlmbyhjaGlwLCAxKTsKIAlpZiAocmV0KSB7CkBAIC0zMTksNyArMzIwLDcgQEAKIAogc3RhdGljIHU4IHRwbV9pbmZfc3RhdHVzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQlyZXR1cm4gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIFNUQVQpOworCXJldHVybiBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBTVEFUKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKHB1YmVrLCBTX0lSVUdPLCB0cG1fc2hvd19wdWJlaywgTlVMTCk7CkBAIC0zNDYsNyArMzQ3LDcgQEAKIAkucmVsZWFzZSA9IHRwbV9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljIHRwbV9pbmYgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgdHBtX2luZiA9IHsKIAkucmVjdiA9IHRwbV9pbmZfcmVjdiwKIAkuc2VuZCA9IHRwbV9pbmZfc2VuZCwKIAkuY2FuY2VsID0gdHBtX2luZl9jYW5jZWwsCkBAIC0zNzUsNiArMzc2LDcgQEAKIAlpbnQgdmVyc2lvblsyXTsKIAlpbnQgcHJvZHVjdGlkWzJdOwogCWNoYXIgY2hpcG5hbWVbMjBdOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKIAogCS8qIHJlYWQgSU8tcG9ydHMgdGhyb3VnaCBQblAgKi8KIAlpZiAocG5wX3BvcnRfdmFsaWQoZGV2LCAwKSAmJiBwbnBfcG9ydF92YWxpZChkZXYsIDEpICYmCkBAIC0zOTUsMTQgKzM5NywxMyBAQAogCQkJZ290byBlcnJfbGFzdDsKIAkJfQogCQkvKiBwdWJsaXNoIG15IGJhc2UgYWRkcmVzcyBhbmQgcmVxdWVzdCByZWdpb24gKi8KLQkJdHBtX2luZi5iYXNlID0gVFBNX0lORl9CQVNFOwogCQlpZiAocmVxdWVzdF9yZWdpb24KLQkJICAgICh0cG1faW5mLmJhc2UsIFRQTV9JTkZfUE9SVF9MRU4sICJ0cG1faW5maW5lb24wIikgPT0gTlVMTCkgeworCQkgICAgKFRQTV9JTkZfQkFTRSwgVFBNX0lORl9QT1JUX0xFTiwgInRwbV9pbmZpbmVvbjAiKSA9PSBOVUxMKSB7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycl9sYXN0OwogCQl9Ci0JCWlmIChyZXF1ZXN0X3JlZ2lvbihUUE1fSU5GX0FERFIsIFRQTV9JTkZfQUREUl9MRU4sCi0JCQkJInRwbV9pbmZpbmVvbjAiKSA9PSBOVUxMKSB7CisJCWlmIChyZXF1ZXN0X3JlZ2lvbgorCQkgICAgKFRQTV9JTkZfQUREUiwgVFBNX0lORl9BRERSX0xFTiwgInRwbV9pbmZpbmVvbjAiKSA9PSBOVUxMKSB7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycl9sYXN0OwogCQl9CkBAIC00NDIsOSArNDQzLDkgQEAKIAogCQkvKiBjb25maWd1cmUgVFBNIHdpdGggSU8tcG9ydHMgKi8KIAkJb3V0YihJT0xJTUgsIFRQTV9JTkZfQUREUik7Ci0JCW91dGIoKCh0cG1faW5mLmJhc2UgPj4gOCkgJiAweGZmKSwgVFBNX0lORl9EQVRBKTsKKwkJb3V0YigoKFRQTV9JTkZfQkFTRSA+PiA4KSAmIDB4ZmYpLCBUUE1fSU5GX0RBVEEpOwogCQlvdXRiKElPTElNTCwgVFBNX0lORl9BRERSKTsKLQkJb3V0YigodHBtX2luZi5iYXNlICYgMHhmZiksIFRQTV9JTkZfREFUQSk7CisJCW91dGIoKFRQTV9JTkZfQkFTRSAmIDB4ZmYpLCBUUE1fSU5GX0RBVEEpOwogCiAJCS8qIGNvbnRyb2wgaWYgSU8tcG9ydHMgYXJlIHNldCBjb3JyZWN0bHkgKi8KIAkJb3V0YihJT0xJTUgsIFRQTV9JTkZfQUREUik7CkBAIC00NTIsMTAgKzQ1MywxMCBAQAogCQlvdXRiKElPTElNTCwgVFBNX0lORl9BRERSKTsKIAkJaW9sID0gaW5iKFRQTV9JTkZfREFUQSk7CiAKLQkJaWYgKChpb2ggPDwgOCB8IGlvbCkgIT0gdHBtX2luZi5iYXNlKSB7CisJCWlmICgoaW9oIDw8IDggfCBpb2wpICE9IFRQTV9JTkZfQkFTRSkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsCi0JCQkJIkNvdWxkIG5vdCBzZXQgSU8tcG9ydHMgdG8gMHglbHhcbiIsCi0JCQkJdHBtX2luZi5iYXNlKTsKKwkJCQkiQ291bGQgbm90IHNldCBJTy1wb3J0cyB0byAweCV4XG4iLAorCQkJCVRQTV9JTkZfQkFTRSk7CiAJCQlyYyA9IC1FSU87CiAJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAkJfQpAQCAtNDY2LDE1ICs0NjcsMTUgQEAKIAkJb3V0YihESVNBQkxFX1JFR0lTVEVSX1BBSVIsIFRQTV9JTkZfQUREUik7CiAKIAkJLyogZGlzYWJsZSBSRVNFVCwgTFAgYW5kIElSUUMgKi8KLQkJb3V0YihSRVNFVF9MUF9JUlFDX0RJU0FCTEUsIHRwbV9pbmYuYmFzZSArIENNRCk7CisJCW91dGIoUkVTRVRfTFBfSVJRQ19ESVNBQkxFLCBUUE1fSU5GX0JBU0UgKyBDTUQpOwogCiAJCS8qIEZpbmFsbHksIHdlJ3JlIGRvbmUsIHByaW50IHNvbWUgaW5mb3MgKi8KIAkJZGV2X2luZm8oJmRldi0+ZGV2LCAiVFBNIGZvdW5kOiAiCiAJCQkgImNvbmZpZyBiYXNlIDB4JXgsICIKIAkJCSAiaW8gYmFzZSAweCV4LCAiCi0JCQkgImNoaXAgdmVyc2lvbiAlMDJ4JTAyeCwgIgotCQkJICJ2ZW5kb3IgaWQgJXgleCAoSW5maW5lb24pLCAiCi0JCQkgInByb2R1Y3QgaWQgJTAyeCUwMngiCisJCQkgImNoaXAgdmVyc2lvbiAweCUwMnglMDJ4LCAiCisJCQkgInZlbmRvciBpZCAweCV4JXggKEluZmluZW9uKSwgIgorCQkJICJwcm9kdWN0IGlkIDB4JTAyeCUwMngiCiAJCQkgIiVzXG4iLAogCQkJIFRQTV9JTkZfQUREUiwKIAkJCSBUUE1fSU5GX0JBU0UsCkBAIC00ODIsMTEgKzQ4MywxMCBAQAogCQkJIHZlbmRvcmlkWzBdLCB2ZW5kb3JpZFsxXSwKIAkJCSBwcm9kdWN0aWRbMF0sIHByb2R1Y3RpZFsxXSwgY2hpcG5hbWUpOwogCi0JCXJjID0gdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKCZkZXYtPmRldiwgJnRwbV9pbmYpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlyYyA9IC1FTk9ERVY7CisJCWlmICghKGNoaXAgPSB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoJmRldi0+ZGV2LCAmdHBtX2luZikpKSB7CiAJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAkJfQorCQljaGlwLT52ZW5kb3IuYmFzZSA9IFRQTV9JTkZfQkFTRTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJcmMgPSAtRU5PREVWOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJfQogCiBlcnJfcmVsZWFzZV9yZWdpb246Ci0JcmVsZWFzZV9yZWdpb24odHBtX2luZi5iYXNlLCBUUE1fSU5GX1BPUlRfTEVOKTsKKwlyZWxlYXNlX3JlZ2lvbihUUE1fSU5GX0JBU0UsIFRQTV9JTkZfUE9SVF9MRU4pOwogCXJlbGVhc2VfcmVnaW9uKFRQTV9JTkZfQUREUiwgVFBNX0lORl9BRERSX0xFTik7CiAKIGVycl9sYXN0OgpAQCAtNTA2LDcgKzUwNiw4IEBACiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gcG5wX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoY2hpcCkgewotCQlyZWxlYXNlX3JlZ2lvbihjaGlwLT52ZW5kb3ItPmJhc2UsIFRQTV9JTkZfUE9SVF9MRU4pOworCQlyZWxlYXNlX3JlZ2lvbihUUE1fSU5GX0JBU0UsIFRQTV9JTkZfUE9SVF9MRU4pOworCQlyZWxlYXNlX3JlZ2lvbihUUE1fSU5GX0FERFIsIFRQTV9JTkZfQUREUl9MRU4pOwogCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CiAJfQogfQpAQCAtNTIwLDcgKzUyMSw3IEBACiAJfSwKIAkuaWRfdGFibGUgPSB0cG1fcG5wX3RibCwKIAkucHJvYmUgPSB0cG1faW5mX3BucF9wcm9iZSwKLQkucmVtb3ZlID0gdHBtX2luZl9wbnBfcmVtb3ZlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0cG1faW5mX3BucF9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9pbmYodm9pZCkKQEAgLTUzOCw1ICs1MzksNSBAQAogCiBNT0RVTEVfQVVUSE9SKCJNYXJjZWwgU2VsaG9yc3QgPHNlbGhvcnN0QGNyeXB0by5ydWIuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgSW5maW5lb24gVFBNIFNMRCA5NjMwIFRUIDEuMSAvIFNMQiA5NjM1IFRUIDEuMiIpOwotTU9EVUxFX1ZFUlNJT04oIjEuNyIpOworTU9EVUxFX1ZFUlNJT04oIjEuOCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fbnNjLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9uc2MuYwppbmRleCA2ODBhOGUzLi40YzhiYzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9uc2MuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9uc2MuYwpAQCAtNzEsNyArNzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgc3RvcDsKIAogCS8qIHN0YXR1cyBpbW1lZGlhdGVseSBhdmFpbGFibGUgY2hlY2sgKi8KLQkqZGF0YSA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfU1RBVFVTKTsKKwkqZGF0YSA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19TVEFUVVMpOwogCWlmICgoKmRhdGEgJiBtYXNrKSA9PSB2YWwpCiAJCXJldHVybiAwOwogCkBAIC03OSw3ICs3OSw3IEBACiAJc3RvcCA9IGppZmZpZXMgKyAxMCAqIEhaOwogCWRvIHsKIAkJbXNsZWVwKFRQTV9USU1FT1VUKTsKLQkJKmRhdGEgPSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgMSk7CisJCSpkYXRhID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgMSk7CiAJCWlmICgoKmRhdGEgJiBtYXNrKSA9PSB2YWwpCiAJCQlyZXR1cm4gMDsKIAl9CkBAIC05NCw5ICs5NCw5IEBACiAJdW5zaWduZWQgbG9uZyBzdG9wOwogCiAJLyogc3RhdHVzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBjaGVjayAqLwotCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfU1RBVFVTKTsKKwlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfU1RBVFVTKTsKIAlpZiAoc3RhdHVzICYgTlNDX1NUQVRVU19PQkYpCi0JCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfREFUQSk7CisJCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19EQVRBKTsKIAlpZiAoc3RhdHVzICYgTlNDX1NUQVRVU19SRFkpCiAJCXJldHVybiAwOwogCkBAIC0xMDQsOSArMTA0LDkgQEAKIAlzdG9wID0gamlmZmllcyArIDEwMDsKIAlkbyB7CiAJCW1zbGVlcChUUE1fVElNRU9VVCk7Ci0JCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfU1RBVFVTKTsKKwkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX1NUQVRVUyk7CiAJCWlmIChzdGF0dXMgJiBOU0NfU1RBVFVTX09CRikKLQkJCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfREFUQSk7CisJCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfREFUQSk7CiAJCWlmIChzdGF0dXMgJiBOU0NfU1RBVFVTX1JEWSkKIAkJCXJldHVybiAwOwogCX0KQEAgLTEzMiw3ICsxMzIsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKChkYXRhID0KLQkgICAgIGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfREFUQSkpICE9IE5TQ19DT01NQU5EX05PUk1BTCkgeworCSAgICAgaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX0RBVEEpKSAhPSBOU0NfQ09NTUFORF9OT1JNQUwpIHsKIAkJZGV2X2VycihjaGlwLT5kZXYsICJub3QgaW4gbm9ybWFsIG1vZGUgKDB4JXgpXG4iLAogCQkJZGF0YSk7CiAJCXJldHVybiAtRUlPOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCX0KIAkJaWYgKGRhdGEgJiBOU0NfU1RBVFVTX0YwKQogCQkJYnJlYWs7Ci0JCSpwID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19EQVRBKTsKKwkJKnAgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfREFUQSk7CiAJfQogCiAJaWYgKChkYXRhICYgTlNDX1NUQVRVU19GMCkgPT0gMCAmJgpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRjAgbm90IHNldFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KLQlpZiAoKGRhdGEgPSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgTlNDX0RBVEEpKSAhPSBOU0NfQ09NTUFORF9FT0MpIHsKKwlpZiAoKGRhdGEgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfREFUQSkpICE9IE5TQ19DT01NQU5EX0VPQykgewogCQlkZXZfZXJyKGNoaXAtPmRldiwKIAkJCSJleHBlY3RlZCBlbmQgb2YgY29tbWFuZCgweCV4KVxuIiwgZGF0YSk7CiAJCXJldHVybiAtRUlPOwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJICogZml4IGl0LiBOb3Qgc3VyZSB3aHkgdGhpcyBpcyBuZWVkZWQsIHdlIGZvbGxvd2VkIHRoZSBmbG93CiAJICogY2hhcnQgaW4gdGhlIG1hbnVhbCB0byB0aGUgbGV0dGVyLgogCSAqLwotCW91dGIoTlNDX0NPTU1BTkRfQ0FOQ0VMLCBjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfQ09NTUFORCk7CisJb3V0YihOU0NfQ09NTUFORF9DQU5DRUwsIGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX0NPTU1BTkQpOwogCiAJaWYgKG5zY193YWl0X2Zvcl9yZWFkeShjaGlwKSAhPSAwKQogCQlyZXR1cm4gLUVJTzsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlvdXRiKE5TQ19DT01NQU5EX05PUk1BTCwgY2hpcC0+dmVuZG9yLT5iYXNlICsgTlNDX0NPTU1BTkQpOworCW91dGIoTlNDX0NPTU1BTkRfTk9STUFMLCBjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19DT01NQU5EKTsKIAlpZiAod2FpdF9mb3Jfc3RhdChjaGlwLCBOU0NfU1RBVFVTX0lCUiwgTlNDX1NUQVRVU19JQlIsICZkYXRhKSA8IDApIHsKIAkJZGV2X2VycihjaGlwLT5kZXYsICJJQlIgdGltZW91dFxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMjA0LDI2ICsyMDQsMjYgQEAKIAkJCQkiSUJGIHRpbWVvdXQgKHdoaWxlIHdyaXRpbmcgZGF0YSlcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJb3V0YihidWZbaV0sIGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19EQVRBKTsKKwkJb3V0YihidWZbaV0sIGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX0RBVEEpOwogCX0KIAogCWlmICh3YWl0X2Zvcl9zdGF0KGNoaXAsIE5TQ19TVEFUVVNfSUJGLCAwLCAmZGF0YSkgPCAwKSB7CiAJCWRldl9lcnIoY2hpcC0+ZGV2LCAiSUJGIHRpbWVvdXRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0Jb3V0YihOU0NfQ09NTUFORF9FT0MsIGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19DT01NQU5EKTsKKwlvdXRiKE5TQ19DT01NQU5EX0VPQywgY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfQ09NTUFORCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyB2b2lkIHRwbV9uc2NfY2FuY2VsKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQlvdXRiKE5TQ19DT01NQU5EX0NBTkNFTCwgY2hpcC0+dmVuZG9yLT5iYXNlICsgTlNDX0NPTU1BTkQpOworCW91dGIoTlNDX0NPTU1BTkRfQ0FOQ0VMLCBjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19DT01NQU5EKTsKIH0KIAogc3RhdGljIHU4IHRwbV9uc2Nfc3RhdHVzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQlyZXR1cm4gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19TVEFUVVMpOworCXJldHVybiBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfU1RBVFVTKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNjX29wcyA9IHsKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBuc2NfYXR0cl9ncnAgPSB7IC5hdHRycyA9IG5zY19hdHRycyB9OwogCi1zdGF0aWMgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgdHBtX25zYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyB0cG1fbnNjID0gewogCS5yZWN2ID0gdHBtX25zY19yZWN2LAogCS5zZW5kID0gdHBtX25zY19zZW5kLAogCS5jYW5jZWwgPSB0cG1fbnNjX2NhbmNlbCwKQEAgLTI2OCw3ICsyNjgsNyBAQAogewogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmICggY2hpcCApIHsKLQkJcmVsZWFzZV9yZWdpb24oY2hpcC0+dmVuZG9yLT5iYXNlLCAyKTsKKwkJcmVsZWFzZV9yZWdpb24oY2hpcC0+dmVuZG9yLmJhc2UsIDIpOwogCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CiAJfQogfQpAQCAtMjg2LDcgKzI4Niw4IEBACiAJaW50IHJjID0gMDsKIAlpbnQgbG8sIGhpOwogCWludCBuc2NBZGRyQmFzZSA9IFRQTV9BRERSOwotCisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAogCS8qIHZlcmlmeSB0aGF0IGl0IGlzIGEgTmF0aW9uYWwgcGFydCAoU0lEKSAqLwogCWlmICh0cG1fcmVhZF9pbmRleChUUE1fQUREUiwgTlNDX1NJRF9JTkRFWCkgIT0gMHhFRikgewpAQCAtMzAwLDcgKzMwMSw3IEBACiAKIAloaSA9IHRwbV9yZWFkX2luZGV4KG5zY0FkZHJCYXNlLCBUUE1fTlNDX0JBU0UwX0hJKTsKIAlsbyA9IHRwbV9yZWFkX2luZGV4KG5zY0FkZHJCYXNlLCBUUE1fTlNDX0JBU0UwX0xPKTsKLQl0cG1fbnNjLmJhc2UgPSAoaGk8PDgpIHwgbG87CisJYmFzZSA9IChoaTw8OCkgfCBsbzsKIAogCS8qIGVuYWJsZSB0aGUgRFBNIG1vZHVsZSAqLwogCXRwbV93cml0ZV9pbmRleChuc2NBZGRyQmFzZSwgTlNDX0xEQ19JTkRFWCwgMHgwMSk7CkBAIC0zMjAsMTMgKzMyMSwxNSBAQAogCWlmICgocmMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldikpIDwgMCkKIAkJZ290byBlcnJfZnJlZV9kZXY7CiAKLQlpZiAocmVxdWVzdF9yZWdpb24odHBtX25zYy5iYXNlLCAyLCAidHBtX25zYzAiKSA9PSBOVUxMICkgeworCWlmIChyZXF1ZXN0X3JlZ2lvbihiYXNlLCAyLCAidHBtX25zYzAiKSA9PSBOVUxMICkgewogCQlyYyA9IC1FQlVTWTsKIAkJZ290byBlcnJfdW5yZWdfZGV2OwogCX0KIAotCWlmICgocmMgPSB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoJnBkZXYtPmRldiwgJnRwbV9uc2MpKSA8IDApCisJaWYgKCEoY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZSgmcGRldi0+ZGV2LCAmdHBtX25zYykpKSB7CisJCXJjID0gLUVOT0RFVjsKIAkJZ290byBlcnJfcmVsX3JlZzsKKwl9CiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJOU0MgVFBNIGRldGVjdGVkXG4iKTsKIAlkZXZfZGJnKCZwZGV2LT5kZXYsCkBAIC0zNjEsMTAgKzM2NCwxMiBAQAogCQkgIk5TQyBUUE0gcmV2aXNpb24gJWRcbiIsCiAJCSB0cG1fcmVhZF9pbmRleChuc2NBZGRyQmFzZSwgMHgyNykgJiAweDFGKTsKIAorCWNoaXAtPnZlbmRvci5iYXNlID0gYmFzZTsKKwogCXJldHVybiAwOwogCiBlcnJfcmVsX3JlZzoKLQlyZWxlYXNlX3JlZ2lvbih0cG1fbnNjLmJhc2UsIDIpOworCXJlbGVhc2VfcmVnaW9uKGJhc2UsIDIpOwogZXJyX3VucmVnX2RldjoKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIGVycl9mcmVlX2RldjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNzA2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC0wLDAgKzEsNjY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBMZWVuZGVydCB2YW4gRG9vcm4gPGxlZW5kZXJ0QHdhdHNvbi5pYm0uY29tPgorICogS3lsZW5lIEhhbGwgPGtqaGFsbEB1cy5pYm0uY29tPgorICoKKyAqIERldmljZSBkcml2ZXIgZm9yIFRDRy9UQ1BBIFRQTSAodHJ1c3RlZCBwbGF0Zm9ybSBtb2R1bGUpLgorICogU3BlY2lmaWNhdGlvbnMgYXQgd3d3LnRydXN0ZWRjb21wdXRpbmdncm91cC5vcmcKKyAqCisgKiBUaGlzIGRldmljZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgVFBNIGludGVyZmFjZSBhcyBkZWZpbmVkIGluCisgKiB0aGUgVENHIFRQTSBJbnRlcmZhY2UgU3BlYyB2ZXJzaW9uIDEuMiwgcmV2aXNpb24gMS4wLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlICJ0cG0uaCIKKworI2RlZmluZSBUUE1fSEVBREVSX1NJWkUgMTAKKworZW51bSB0aXNfYWNjZXNzIHsKKwlUUE1fQUNDRVNTX1ZBTElEID0gMHg4MCwKKwlUUE1fQUNDRVNTX0FDVElWRV9MT0NBTElUWSA9IDB4MjAsCisJVFBNX0FDQ0VTU19SRVFVRVNUX1BFTkRJTkcgPSAweDA0LAorCVRQTV9BQ0NFU1NfUkVRVUVTVF9VU0UgPSAweDAyLAorfTsKKworZW51bSB0aXNfc3RhdHVzIHsKKwlUUE1fU1RTX1ZBTElEID0gMHg4MCwKKwlUUE1fU1RTX0NPTU1BTkRfUkVBRFkgPSAweDQwLAorCVRQTV9TVFNfR08gPSAweDIwLAorCVRQTV9TVFNfREFUQV9BVkFJTCA9IDB4MTAsCisJVFBNX1NUU19EQVRBX0VYUEVDVCA9IDB4MDgsCit9OworCitlbnVtIHRpc19pbnRfZmxhZ3MgeworCVRQTV9HTE9CQUxfSU5UX0VOQUJMRSA9IDB4ODAwMDAwMDAsCisJVFBNX0lOVEZfQlVSU1RfQ09VTlRfU1RBVElDID0gMHgxMDAsCisJVFBNX0lOVEZfQ01EX1JFQURZX0lOVCA9IDB4MDgwLAorCVRQTV9JTlRGX0lOVF9FREdFX0ZBTExJTkcgPSAweDA0MCwKKwlUUE1fSU5URl9JTlRfRURHRV9SSVNJTkcgPSAweDAyMCwKKwlUUE1fSU5URl9JTlRfTEVWRUxfTE9XID0gMHgwMTAsCisJVFBNX0lOVEZfSU5UX0xFVkVMX0hJR0ggPSAweDAwOCwKKwlUUE1fSU5URl9MT0NBTElUWV9DSEFOR0VfSU5UID0gMHgwMDQsCisJVFBNX0lOVEZfU1RTX1ZBTElEX0lOVCA9IDB4MDAyLAorCVRQTV9JTlRGX0RBVEFfQVZBSUxfSU5UID0gMHgwMDEsCit9OworCitlbnVtIHRpc19kZWZhdWx0cyB7CisJVElTX01FTV9CQVNFID0gMHhGRUQ0MDAwMCwKKwlUSVNfTUVNX0xFTiA9IDB4NTAwMCwKKwlUSVNfU0hPUlRfVElNRU9VVCA9IDc1MCwJLyogbXMgKi8KKwlUSVNfTE9OR19USU1FT1VUID0gMjAwMCwJLyogMiBzZWMgKi8KK307CisKKyNkZWZpbmUJVFBNX0FDQ0VTUyhsKQkJCSgweDAwMDAgfCAoKGwpIDw8IDEyKSkKKyNkZWZpbmUJVFBNX0lOVF9FTkFCTEUobCkJCSgweDAwMDggfCAoKGwpIDw8IDEyKSkKKyNkZWZpbmUJVFBNX0lOVF9WRUNUT1IobCkJCSgweDAwMEMgfCAoKGwpIDw8IDEyKSkKKyNkZWZpbmUJVFBNX0lOVF9TVEFUVVMobCkJCSgweDAwMTAgfCAoKGwpIDw8IDEyKSkKKyNkZWZpbmUJVFBNX0lOVEZfQ0FQUyhsKQkJKDB4MDAxNCB8ICgobCkgPDwgMTIpKQorI2RlZmluZQlUUE1fU1RTKGwpCQkJKDB4MDAxOCB8ICgobCkgPDwgMTIpKQorI2RlZmluZQlUUE1fREFUQV9GSUZPKGwpCQkoMHgwMDI0IHwgKChsKSA8PCAxMikpCisKKyNkZWZpbmUJVFBNX0RJRF9WSUQobCkJCQkoMHgwRjAwIHwgKChsKSA8PCAxMikpCisjZGVmaW5lCVRQTV9SSUQobCkJCQkoMHgwRjA0IHwgKChsKSA8PCAxMikpCisKK3N0YXRpYyBMSVNUX0hFQUQodGlzX2NoaXBzKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGlzX2xvY2spOworCitzdGF0aWMgaW50IGNoZWNrX2xvY2FsaXR5KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IGwpCit7CisJaWYgKChpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKyBUUE1fQUNDRVNTKGwpKSAmCisJICAgICAoVFBNX0FDQ0VTU19BQ1RJVkVfTE9DQUxJVFkgfCBUUE1fQUNDRVNTX1ZBTElEKSkgPT0KKwkgICAgKFRQTV9BQ0NFU1NfQUNUSVZFX0xPQ0FMSVRZIHwgVFBNX0FDQ0VTU19WQUxJRCkpCisJCXJldHVybiBjaGlwLT52ZW5kb3IubG9jYWxpdHkgPSBsOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2xvY2FsaXR5KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IGwsIGludCBmb3JjZSkKK3sKKwlpZiAoZm9yY2UgfHwgKGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9BQ0NFU1MobCkpICYKKwkJICAgICAgKFRQTV9BQ0NFU1NfUkVRVUVTVF9QRU5ESU5HIHwgVFBNX0FDQ0VTU19WQUxJRCkpID09CisJICAgIChUUE1fQUNDRVNTX1JFUVVFU1RfUEVORElORyB8IFRQTV9BQ0NFU1NfVkFMSUQpKQorCQlpb3dyaXRlOChUUE1fQUNDRVNTX0FDVElWRV9MT0NBTElUWSwKKwkJCSBjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX0FDQ0VTUyhsKSk7Cit9CisKK3N0YXRpYyBpbnQgcmVxdWVzdF9sb2NhbGl0eShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGludCBsKQoreworCXVuc2lnbmVkIGxvbmcgc3RvcDsKKwlsb25nIHJjOworCisJaWYgKGNoZWNrX2xvY2FsaXR5KGNoaXAsIGwpID49IDApCisJCXJldHVybiBsOworCisJaW93cml0ZTgoVFBNX0FDQ0VTU19SRVFVRVNUX1VTRSwKKwkJIGNoaXAtPnZlbmRvci5pb2Jhc2UgKyBUUE1fQUNDRVNTKGwpKTsKKworCWlmIChjaGlwLT52ZW5kb3IuaXJxKSB7CisJCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY2hpcC0+dmVuZG9yLmludF9xdWV1ZSwKKwkJCQkJCSAgICAgIChjaGVja19sb2NhbGl0eQorCQkJCQkJICAgICAgIChjaGlwLCBsKSA+PSAwKSwKKwkJCQkJCSAgICAgIGNoaXAtPnZlbmRvci50aW1lb3V0X2EpOworCQlpZiAocmMgPiAwKQorCQkJcmV0dXJuIGw7CisKKwl9IGVsc2UgeworCQkvKiB3YWl0IGZvciBidXJzdGNvdW50ICovCisJCXN0b3AgPSBqaWZmaWVzICsgY2hpcC0+dmVuZG9yLnRpbWVvdXRfYTsKKwkJZG8geworCQkJaWYgKGNoZWNrX2xvY2FsaXR5KGNoaXAsIGwpID49IDApCisJCQkJcmV0dXJuIGw7CisJCQltc2xlZXAoVFBNX1RJTUVPVVQpOworCQl9CisJCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdG9wKSk7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHU4IHRwbV90aXNfc3RhdHVzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJICAgICAgIFRQTV9TVFMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRwbV90aXNfcmVhZHkoc3RydWN0IHRwbV9jaGlwICpjaGlwKQoreworCS8qIHRoaXMgY2F1c2VzIHRoZSBjdXJyZW50IGNvbW1hbmQgdG8gYmUgYWJvcnRlZCAqLworCWlvd3JpdGU4KFRQTV9TVFNfQ09NTUFORF9SRUFEWSwKKwkJIGNoaXAtPnZlbmRvci5pb2Jhc2UgKyBUUE1fU1RTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworfQorCitzdGF0aWMgaW50IGdldF9idXJzdGNvdW50KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0b3A7CisJaW50IGJ1cnN0Y250OworCisJLyogd2FpdCBmb3IgYnVyc3Rjb3VudCAqLworCS8qIHdoaWNoIHRpbWVvdXQgdmFsdWUsIHNwZWMgaGFzIDIgYW5zd2VycyAoYyAmIGQpICovCisJc3RvcCA9IGppZmZpZXMgKyBjaGlwLT52ZW5kb3IudGltZW91dF9kOworCWRvIHsKKwkJYnVyc3RjbnQgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgIFRQTV9TVFMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSArIDEpOworCQlidXJzdGNudCArPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgICBUUE1fU1RTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkgKworCQkJCSAgICAyKSA8PCA4OworCQlpZiAoYnVyc3RjbnQpCisJCQlyZXR1cm4gYnVyc3RjbnQ7CisJCW1zbGVlcChUUE1fVElNRU9VVCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkpOworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9mb3Jfc3RhdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IG1hc2ssIHVuc2lnbmVkIGxvbmcgdGltZW91dCwKKwkJCSB3YWl0X3F1ZXVlX2hlYWRfdCAqcXVldWUpCit7CisJdW5zaWduZWQgbG9uZyBzdG9wOworCWxvbmcgcmM7CisJdTggc3RhdHVzOworCisJLyogY2hlY2sgY3VycmVudCBzdGF0dXMgKi8KKwlzdGF0dXMgPSB0cG1fdGlzX3N0YXR1cyhjaGlwKTsKKwlpZiAoKHN0YXR1cyAmIG1hc2spID09IG1hc2spCisJCXJldHVybiAwOworCisJaWYgKGNoaXAtPnZlbmRvci5pcnEpIHsKKwkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgqcXVldWUsCisJCQkJCQkgICAgICAoKHRwbV90aXNfc3RhdHVzCisJCQkJCQkJKGNoaXApICYgbWFzaykgPT0KKwkJCQkJCSAgICAgICBtYXNrKSwgdGltZW91dCk7CisJCWlmIChyYyA+IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlzdG9wID0gamlmZmllcyArIHRpbWVvdXQ7CisJCWRvIHsKKwkJCW1zbGVlcChUUE1fVElNRU9VVCk7CisJCQlzdGF0dXMgPSB0cG1fdGlzX3N0YXR1cyhjaGlwKTsKKwkJCWlmICgoc3RhdHVzICYgbWFzaykgPT0gbWFzaykKKwkJCQlyZXR1cm4gMDsKKwkJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkpOworCX0KKwlyZXR1cm4gLUVUSU1FOworfQorCitzdGF0aWMgaW50IHJlY3ZfZGF0YShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgc2l6ZSA9IDAsIGJ1cnN0Y250OworCXdoaWxlIChzaXplIDwgY291bnQgJiYKKwkgICAgICAgd2FpdF9mb3Jfc3RhdChjaGlwLAorCQkJICAgICBUUE1fU1RTX0RBVEFfQVZBSUwgfCBUUE1fU1RTX1ZBTElELAorCQkJICAgICBjaGlwLT52ZW5kb3IudGltZW91dF9jLAorCQkJICAgICAmY2hpcC0+dmVuZG9yLnJlYWRfcXVldWUpCisJICAgICAgID09IDApIHsKKwkJYnVyc3RjbnQgPSBnZXRfYnVyc3Rjb3VudChjaGlwKTsKKwkJZm9yICg7IGJ1cnN0Y250ID4gMCAmJiBzaXplIDwgY291bnQ7IGJ1cnN0Y250LS0pCisJCQlidWZbc2l6ZSsrXSA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJCSAgICAgIFRQTV9EQVRBX0ZJRk8oY2hpcC0+dmVuZG9yLgorCQkJCQkJCSAgICBsb2NhbGl0eSkpOworCX0KKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCB0cG1fdGlzX3JlY3Yoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHNpemUgPSAwOworCWludCBleHBlY3RlZCwgc3RhdHVzOworCisJaWYgKGNvdW50IDwgVFBNX0hFQURFUl9TSVpFKSB7CisJCXNpemUgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiByZWFkIGZpcnN0IDEwIGJ5dGVzLCBpbmNsdWRpbmcgdGFnLCBwYXJhbXNpemUsIGFuZCByZXN1bHQgKi8KKwlpZiAoKHNpemUgPQorCSAgICAgcmVjdl9kYXRhKGNoaXAsIGJ1ZiwgVFBNX0hFQURFUl9TSVpFKSkgPCBUUE1fSEVBREVSX1NJWkUpIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJVbmFibGUgdG8gcmVhZCBoZWFkZXJcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlleHBlY3RlZCA9IGJlMzJfdG9fY3B1KCooX19iZTMyICopIChidWYgKyAyKSk7CisJaWYgKGV4cGVjdGVkID4gY291bnQpIHsKKwkJc2l6ZSA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWlmICgoc2l6ZSArPQorCSAgICAgcmVjdl9kYXRhKGNoaXAsICZidWZbVFBNX0hFQURFUl9TSVpFXSwKKwkJICAgICAgIGV4cGVjdGVkIC0gVFBNX0hFQURFUl9TSVpFKSkgPCBleHBlY3RlZCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIlVuYWJsZSB0byByZWFkIHJlbWFpbmRlciBvZiByZXN1bHRcbiIpOworCQlzaXplID0gLUVUSU1FOworCQlnb3RvIG91dDsKKwl9CisKKwl3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnZlbmRvci50aW1lb3V0X2MsCisJCSAgICAgICZjaGlwLT52ZW5kb3IuaW50X3F1ZXVlKTsKKwlzdGF0dXMgPSB0cG1fdGlzX3N0YXR1cyhjaGlwKTsKKwlpZiAoc3RhdHVzICYgVFBNX1NUU19EQVRBX0FWQUlMKSB7CS8qIHJldHJ5PyAqLworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkVycm9yIGxlZnQgb3ZlciBkYXRhXG4iKTsKKwkJc2l6ZSA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXRwbV90aXNfcmVhZHkoY2hpcCk7CisJcmVsZWFzZV9sb2NhbGl0eShjaGlwLCBjaGlwLT52ZW5kb3IubG9jYWxpdHksIDApOworCXJldHVybiBzaXplOworfQorCisvKgorICogSWYgaW50ZXJydXB0cyBhcmUgdXNlZCAoc2lnbmFsZWQgYnkgYW4gaXJxIHNldCBpbiB0aGUgdmVuZG9yIHN0cnVjdHVyZSkKKyAqIHRwbS5jIGNhbiBza2lwIHBvbGxpbmcgZm9yIHRoZSBkYXRhIHRvIGJlIGF2YWlsYWJsZSBhcyB0aGUgaW50ZXJydXB0IGlzCisgKiB3YWl0ZWQgZm9yIGhlcmUKKyAqLworc3RhdGljIGludCB0cG1fdGlzX3NlbmQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCWludCByYywgc3RhdHVzLCBidXJzdGNudDsKKwlzaXplX3QgY291bnQgPSAwOworCXUzMiBvcmRpbmFsOworCisJaWYgKHJlcXVlc3RfbG9jYWxpdHkoY2hpcCwgMCkgPCAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3RhdHVzID0gdHBtX3Rpc19zdGF0dXMoY2hpcCk7CisJaWYgKChzdGF0dXMgJiBUUE1fU1RTX0NPTU1BTkRfUkVBRFkpID09IDApIHsKKwkJdHBtX3Rpc19yZWFkeShjaGlwKTsKKwkJaWYgKHdhaXRfZm9yX3N0YXQKKwkJICAgIChjaGlwLCBUUE1fU1RTX0NPTU1BTkRfUkVBRFksIGNoaXAtPnZlbmRvci50aW1lb3V0X2IsCisJCSAgICAgJmNoaXAtPnZlbmRvci5pbnRfcXVldWUpIDwgMCkgeworCQkJcmMgPSAtRVRJTUU7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwl9CisKKwl3aGlsZSAoY291bnQgPCBsZW4gLSAxKSB7CisJCWJ1cnN0Y250ID0gZ2V0X2J1cnN0Y291bnQoY2hpcCk7CisJCWZvciAoOyBidXJzdGNudCA+IDAgJiYgY291bnQgPCBsZW4gLSAxOyBidXJzdGNudC0tKSB7CisJCQlpb3dyaXRlOChidWZbY291bnRdLCBjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCQkgVFBNX0RBVEFfRklGTyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwkJCWNvdW50Kys7CisJCX0KKworCQl3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnZlbmRvci50aW1lb3V0X2MsCisJCQkgICAgICAmY2hpcC0+dmVuZG9yLmludF9xdWV1ZSk7CisJCXN0YXR1cyA9IHRwbV90aXNfc3RhdHVzKGNoaXApOworCQlpZiAoKHN0YXR1cyAmIFRQTV9TVFNfREFUQV9FWFBFQ1QpID09IDApIHsKKwkJCXJjID0gLUVJTzsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0KKworCS8qIHdyaXRlIGxhc3QgYnl0ZSAqLworCWlvd3JpdGU4KGJ1Zltjb3VudF0sCisJCSBjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJIFRQTV9EQVRBX0ZJRk8oY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJd2FpdF9mb3Jfc3RhdChjaGlwLCBUUE1fU1RTX1ZBTElELCBjaGlwLT52ZW5kb3IudGltZW91dF9jLAorCQkgICAgICAmY2hpcC0+dmVuZG9yLmludF9xdWV1ZSk7CisJc3RhdHVzID0gdHBtX3Rpc19zdGF0dXMoY2hpcCk7CisJaWYgKChzdGF0dXMgJiBUUE1fU1RTX0RBVEFfRVhQRUNUKSAhPSAwKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qIGdvIGFuZCBkbyBpdCAqLworCWlvd3JpdGU4KFRQTV9TVFNfR08sCisJCSBjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX1NUUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKworCWlmIChjaGlwLT52ZW5kb3IuaXJxKSB7CisJCW9yZGluYWwgPSBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGJ1ZiArIDYpKSk7CisJCWlmICh3YWl0X2Zvcl9zdGF0CisJCSAgICAoY2hpcCwgVFBNX1NUU19EQVRBX0FWQUlMIHwgVFBNX1NUU19WQUxJRCwKKwkJICAgICB0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKGNoaXAsIG9yZGluYWwpLAorCQkgICAgICZjaGlwLT52ZW5kb3IucmVhZF9xdWV1ZSkgPCAwKSB7CisJCQlyYyA9IC1FVElNRTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0KKwlyZXR1cm4gbGVuOworb3V0X2VycjoKKwl0cG1fdGlzX3JlYWR5KGNoaXApOworCXJlbGVhc2VfbG9jYWxpdHkoY2hpcCwgY2hpcC0+dmVuZG9yLmxvY2FsaXR5LCAwKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRpc19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IG5vX2xsc2VlaywKKwkub3BlbiA9IHRwbV9vcGVuLAorCS5yZWFkID0gdHBtX3JlYWQsCisJLndyaXRlID0gdHBtX3dyaXRlLAorCS5yZWxlYXNlID0gdHBtX3JlbGVhc2UsCit9OworCitzdGF0aWMgREVWSUNFX0FUVFIocHViZWssIFNfSVJVR08sIHRwbV9zaG93X3B1YmVrLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwY3JzLCBTX0lSVUdPLCB0cG1fc2hvd19wY3JzLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVkLCBTX0lSVUdPLCB0cG1fc2hvd19lbmFibGVkLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhY3RpdmUsIFNfSVJVR08sIHRwbV9zaG93X2FjdGl2ZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIob3duZWQsIFNfSVJVR08sIHRwbV9zaG93X293bmVkLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wX2RlYWN0aXZhdGVkLCBTX0lSVUdPLCB0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkLAorCQkgICBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjYXBzLCBTX0lSVUdPLCB0cG1fc2hvd19jYXBzXzFfMiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2FuY2VsLCBTX0lXVVNSIHwgU19JV0dSUCwgTlVMTCwgdHBtX3N0b3JlX2NhbmNlbCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0aXNfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcHViZWsuYXR0ciwKKwkmZGV2X2F0dHJfcGNycy5hdHRyLAorCSZkZXZfYXR0cl9lbmFibGVkLmF0dHIsCisJJmRldl9hdHRyX2FjdGl2ZS5hdHRyLAorCSZkZXZfYXR0cl9vd25lZC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wX2RlYWN0aXZhdGVkLmF0dHIsCisJJmRldl9hdHRyX2NhcHMuYXR0ciwKKwkmZGV2X2F0dHJfY2FuY2VsLmF0dHIsIE5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0aXNfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gdGlzX2F0dHJzCit9OworCitzdGF0aWMgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgdHBtX3RpcyA9IHsKKwkuc3RhdHVzID0gdHBtX3Rpc19zdGF0dXMsCisJLnJlY3YgPSB0cG1fdGlzX3JlY3YsCisJLnNlbmQgPSB0cG1fdGlzX3NlbmQsCisJLmNhbmNlbCA9IHRwbV90aXNfcmVhZHksCisJLnJlcV9jb21wbGV0ZV9tYXNrID0gVFBNX1NUU19EQVRBX0FWQUlMIHwgVFBNX1NUU19WQUxJRCwKKwkucmVxX2NvbXBsZXRlX3ZhbCA9IFRQTV9TVFNfREFUQV9BVkFJTCB8IFRQTV9TVFNfVkFMSUQsCisJLnJlcV9jYW5jZWxlZCA9IFRQTV9TVFNfQ09NTUFORF9SRUFEWSwKKwkuYXR0cl9ncm91cCA9ICZ0aXNfYXR0cl9ncnAsCisJLm1pc2NkZXYgPSB7CisJCSAgICAuZm9wcyA9ICZ0aXNfb3BzLH0sCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGlzX2ludF9wcm9iZShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IChzdHJ1Y3QgdHBtX2NoaXAgKikgZGV2X2lkOworCXUzMiBpbnRlcnJ1cHQ7CisKKwlpbnRlcnJ1cHQgPSBpb3JlYWQzMihjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCSAgICAgVFBNX0lOVF9TVEFUVVMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisKKwlpZiAoaW50ZXJydXB0ID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWNoaXAtPnZlbmRvci5pcnEgPSBpcnE7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHRzIGhhbmRsZWQgd2l0aCBUUE1fRU9JICovCisJaW93cml0ZTMyKGludGVycnVwdCwKKwkJICBjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJICBUUE1fSU5UX1NUQVRVUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aXNfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSAoc3RydWN0IHRwbV9jaGlwICopIGRldl9pZDsKKwl1MzIgaW50ZXJydXB0OworCWludCBpOworCisJaW50ZXJydXB0ID0gaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkgICAgIFRQTV9JTlRfU1RBVFVTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCisJaWYgKGludGVycnVwdCA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoaW50ZXJydXB0ICYgVFBNX0lOVEZfREFUQV9BVkFJTF9JTlQpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2hpcC0+dmVuZG9yLnJlYWRfcXVldWUpOworCWlmIChpbnRlcnJ1cHQgJiBUUE1fSU5URl9MT0NBTElUWV9DSEFOR0VfSU5UKQorCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQkJaWYgKGNoZWNrX2xvY2FsaXR5KGNoaXAsIGkpID49IDApCisJCQkJYnJlYWs7CisJaWYgKGludGVycnVwdCAmCisJICAgIChUUE1fSU5URl9MT0NBTElUWV9DSEFOR0VfSU5UIHwgVFBNX0lOVEZfU1RTX1ZBTElEX0lOVCB8CisJICAgICBUUE1fSU5URl9DTURfUkVBRFlfSU5UKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaGlwLT52ZW5kb3IuaW50X3F1ZXVlKTsKKworCS8qIENsZWFyIGludGVycnVwdHMgaGFuZGxlZCB3aXRoIFRQTV9FT0kgKi8KKwlpb3dyaXRlMzIoaW50ZXJydXB0LAorCQkgIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkgIFRQTV9JTlRfU1RBVFVTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBpbnRlcnJ1cHRzID0gMTsKK21vZHVsZV9wYXJhbShpbnRlcnJ1cHRzLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW50ZXJydXB0cywgIkVuYWJsZSBpbnRlcnJ1cHRzIik7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRwbV90aXNfcG5wX2luaXQoc3RydWN0IHBucF9kZXYgKnBucF9kZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKnBucF9pZCkKK3sKKwl1MzIgdmVuZG9yLCBpbnRmY2FwcywgaW50bWFzazsKKwlpbnQgcmMsIGk7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgbGVuOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKKworCXN0YXJ0ID0gcG5wX21lbV9zdGFydChwbnBfZGV2LCAwKTsKKwlsZW4gPSBwbnBfbWVtX2xlbihwbnBfZGV2LCAwKTsKKworCWlmICghc3RhcnQpCisJCXN0YXJ0ID0gVElTX01FTV9CQVNFOworCWlmICghbGVuKQorCQlsZW4gPSBUSVNfTUVNX0xFTjsKKworCWlmICghKGNoaXAgPSB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoJnBucF9kZXYtPmRldiwgJnRwbV90aXMpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljaGlwLT52ZW5kb3IuaW9iYXNlID0gaW9yZW1hcChzdGFydCwgbGVuKTsKKwlpZiAoIWNoaXAtPnZlbmRvci5pb2Jhc2UpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJdmVuZG9yID0gaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9ESURfVklEKDApKTsKKworCS8qIERlZmF1bHQgdGltZW91dHMgKi8KKwljaGlwLT52ZW5kb3IudGltZW91dF9hID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9VVCk7CisJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX0xPTkdfVElNRU9VVCk7CisJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX1NIT1JUX1RJTUVPVVQpOworCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSBtc2Vjc190b19qaWZmaWVzKFRJU19TSE9SVF9USU1FT1VUKTsKKworCWRldl9pbmZvKCZwbnBfZGV2LT5kZXYsCisJCSAiMS4yIFRQTSAoZGV2aWNlLWlkIDB4JVgsIHJldi1pZCAlZClcbiIsCisJCSB2ZW5kb3IgPj4gMTYsIGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9SSUQoMCkpKTsKKworCS8qIEZpZ3VyZSBvdXQgdGhlIGNhcGFiaWxpdGllcyAqLworCWludGZjYXBzID0KKwkgICAgaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCSAgICAgVFBNX0lOVEZfQ0FQUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwlkZXZfZGJnKCZwbnBfZGV2LT5kZXYsICJUUE0gaW50ZXJmYWNlIGNhcGFiaWxpdGllcyAoMHgleCk6XG4iLAorCQlpbnRmY2Fwcyk7CisJaWYgKGludGZjYXBzICYgVFBNX0lOVEZfQlVSU1RfQ09VTlRfU1RBVElDKQorCQlkZXZfZGJnKCZwbnBfZGV2LT5kZXYsICJcdEJ1cnN0IENvdW50IFN0YXRpY1xuIik7CisJaWYgKGludGZjYXBzICYgVFBNX0lOVEZfQ01EX1JFQURZX0lOVCkKKwkJZGV2X2RiZygmcG5wX2Rldi0+ZGV2LCAiXHRDb21tYW5kIFJlYWR5IEludCBTdXBwb3J0XG4iKTsKKwlpZiAoaW50ZmNhcHMgJiBUUE1fSU5URl9JTlRfRURHRV9GQUxMSU5HKQorCQlkZXZfZGJnKCZwbnBfZGV2LT5kZXYsICJcdEludGVycnVwdCBFZGdlIEZhbGxpbmdcbiIpOworCWlmIChpbnRmY2FwcyAmIFRQTV9JTlRGX0lOVF9FREdFX1JJU0lORykKKwkJZGV2X2RiZygmcG5wX2Rldi0+ZGV2LCAiXHRJbnRlcnJ1cHQgRWRnZSBSaXNpbmdcbiIpOworCWlmIChpbnRmY2FwcyAmIFRQTV9JTlRGX0lOVF9MRVZFTF9MT1cpCisJCWRldl9kYmcoJnBucF9kZXYtPmRldiwgIlx0SW50ZXJydXB0IExldmVsIExvd1xuIik7CisJaWYgKGludGZjYXBzICYgVFBNX0lOVEZfSU5UX0xFVkVMX0hJR0gpCisJCWRldl9kYmcoJnBucF9kZXYtPmRldiwgIlx0SW50ZXJydXB0IExldmVsIEhpZ2hcbiIpOworCWlmIChpbnRmY2FwcyAmIFRQTV9JTlRGX0xPQ0FMSVRZX0NIQU5HRV9JTlQpCisJCWRldl9kYmcoJnBucF9kZXYtPmRldiwgIlx0TG9jYWxpdHkgQ2hhbmdlIEludCBTdXBwb3J0XG4iKTsKKwlpZiAoaW50ZmNhcHMgJiBUUE1fSU5URl9TVFNfVkFMSURfSU5UKQorCQlkZXZfZGJnKCZwbnBfZGV2LT5kZXYsICJcdFN0cyBWYWxpZCBJbnQgU3VwcG9ydFxuIik7CisJaWYgKGludGZjYXBzICYgVFBNX0lOVEZfREFUQV9BVkFJTF9JTlQpCisJCWRldl9kYmcoJnBucF9kZXYtPmRldiwgIlx0RGF0YSBBdmFpbCBJbnQgU3VwcG9ydFxuIik7CisKKwlpZiAocmVxdWVzdF9sb2NhbGl0eShjaGlwLCAwKSAhPSAwKSB7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qIElOVEVSUlVQVCBTZXR1cCAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGlwLT52ZW5kb3IuaW50X3F1ZXVlKTsKKworCWludG1hc2sgPQorCSAgICBpb3JlYWQzMihjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJICAgICBUUE1fSU5UX0VOQUJMRShjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKworCWludG1hc2sgfD0gVFBNX0lOVEZfQ01EX1JFQURZX0lOVAorCSAgICB8IFRQTV9JTlRGX0xPQ0FMSVRZX0NIQU5HRV9JTlQgfCBUUE1fSU5URl9EQVRBX0FWQUlMX0lOVAorCSAgICB8IFRQTV9JTlRGX1NUU19WQUxJRF9JTlQ7CisKKwlpb3dyaXRlMzIoaW50bWFzaywKKwkJICBjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJICBUUE1fSU5UX0VOQUJMRShjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwlpZiAoaW50ZXJydXB0cykgeworCQljaGlwLT52ZW5kb3IuaXJxID0KKwkJICAgIGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkgICAgVFBNX0lOVF9WRUNUT1IoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisKKwkJZm9yIChpID0gMzsgaSA8IDE2ICYmIGNoaXAtPnZlbmRvci5pcnEgPT0gMDsgaSsrKSB7CisJCQlpb3dyaXRlOChpLCBjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCQkgICAgVFBNX0lOVF9WRUNUT1IoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJCQlpZiAocmVxdWVzdF9pcnEKKwkJCSAgICAoaSwgdGlzX2ludF9wcm9iZSwgU0FfU0hJUlEsCisJCQkgICAgIGNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUsIGNoaXApICE9IDApIHsKKwkJCQlkZXZfaW5mbyhjaGlwLT5kZXYsCisJCQkJCSAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxOiAlZCBmb3IgcHJvYmVcbiIsCisJCQkJCSBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogQ2xlYXIgYWxsIGV4aXN0aW5nICovCisJCQlpb3dyaXRlMzIoaW9yZWFkMzIKKwkJCQkgIChjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCQkgICBUUE1fSU5UX1NUQVRVUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKSwKKwkJCQkgIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgVFBNX0lOVF9TVEFUVVMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisKKwkJCS8qIFR1cm4gb24gKi8KKwkJCWlvd3JpdGUzMihpbnRtYXNrIHwgVFBNX0dMT0JBTF9JTlRfRU5BQkxFLAorCQkJCSAgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJICBUUE1fSU5UX0VOQUJMRShjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKworCQkJLyogR2VuZXJhdGUgSW50ZXJydXB0cyAqLworCQkJdHBtX2dlbl9pbnRlcnJ1cHQoY2hpcCk7CisKKwkJCS8qIFR1cm4gb2ZmICovCisJCQlpb3dyaXRlMzIoaW50bWFzaywKKwkJCQkgIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJCQlmcmVlX2lycShpLCBjaGlwKTsKKwkJfQorCX0KKwlpZiAoY2hpcC0+dmVuZG9yLmlycSkgeworCQlpb3dyaXRlOChjaGlwLT52ZW5kb3IuaXJxLAorCQkJIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJIFRQTV9JTlRfVkVDVE9SKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCQlpZiAocmVxdWVzdF9pcnEKKwkJICAgIChjaGlwLT52ZW5kb3IuaXJxLCB0aXNfaW50X2hhbmRsZXIsIFNBX1NISVJRLAorCQkgICAgIGNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUsIGNoaXApICE9IDApIHsKKwkJCWRldl9pbmZvKGNoaXAtPmRldiwKKwkJCQkgIlVuYWJsZSB0byByZXF1ZXN0IGlycTogJWQgZm9yIHVzZVxuIiwKKwkJCQkgY2hpcC0+dmVuZG9yLmlycSk7CisJCQljaGlwLT52ZW5kb3IuaXJxID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIENsZWFyIGFsbCBleGlzdGluZyAqLworCQkJaW93cml0ZTMyKGlvcmVhZDMyCisJCQkJICAoY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJICAgVFBNX0lOVF9TVEFUVVMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSksCisJCQkJICBjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCQkgIFRQTV9JTlRfU1RBVFVTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCisJCQkvKiBUdXJuIG9uICovCisJCQlpb3dyaXRlMzIoaW50bWFzayB8IFRQTV9HTE9CQUxfSU5UX0VOQUJMRSwKKwkJCQkgIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJCX0KKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmY2hpcC0+dmVuZG9yLmxpc3QpOworCXNwaW5fbG9jaygmdGlzX2xvY2spOworCWxpc3RfYWRkKCZjaGlwLT52ZW5kb3IubGlzdCwgJnRpc19jaGlwcyk7CisJc3Bpbl91bmxvY2soJnRpc19sb2NrKTsKKworCXRwbV9nZXRfdGltZW91dHMoY2hpcCk7CisJdHBtX2NvbnRpbnVlX3NlbGZ0ZXN0KGNoaXApOworCisJcmV0dXJuIDA7CitvdXRfZXJyOgorCWlmIChjaGlwLT52ZW5kb3IuaW9iYXNlKQorCQlpb3VubWFwKGNoaXAtPnZlbmRvci5pb2Jhc2UpOworCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdHBtX3Rpc19wbnBfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiB0cG1fcG1fc3VzcGVuZCgmZGV2LT5kZXYsIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgdHBtX3Rpc19wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJcmV0dXJuIHRwbV9wbV9yZXN1bWUoJmRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIHRwbV9wbnBfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IlBOUDBDMzEiLCAwfSwJCS8qIFRQTSAqLworCXsiQVRNMTIwMCIsIDB9LAkJLyogQXRtZWwgKi8KKwl7IklGWDAxMDIiLCAwfSwJCS8qIEluZmluZW9uICovCisJeyJCQ00wMTAxIiwgMH0sCQkvKiBCcm9hZGNvbSAqLworCXsiTlNDMTIwMCIsIDB9LAkJLyogTmF0aW9uYWwgKi8KKwkvKiBBZGQgbmV3IGhlcmUgKi8KKwl7IiIsIDB9LAkJLyogVXNlciBTcGVjaWZpZWQgKi8KKwl7IiIsIDB9CQkJLyogVGVybWluYXRvciAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIHRpc19wbnBfZHJpdmVyID0geworCS5uYW1lID0gInRwbV90aXMiLAorCS5pZF90YWJsZSA9IHRwbV9wbnBfdGJsLAorCS5wcm9iZSA9IHRwbV90aXNfcG5wX2luaXQsCisJLnN1c3BlbmQgPSB0cG1fdGlzX3BucF9zdXNwZW5kLAorCS5yZXN1bWUgPSB0cG1fdGlzX3BucF9yZXN1bWUsCit9OworCisjZGVmaW5lIFRJU19ISURfVVNSX0lEWCBzaXplb2YodHBtX3BucF90YmwpL3NpemVvZihzdHJ1Y3QgcG5wX2RldmljZV9pZCkgLTIKK21vZHVsZV9wYXJhbV9zdHJpbmcoaGlkLCB0cG1fcG5wX3RibFtUSVNfSElEX1VTUl9JRFhdLmlkLAorCQkgICAgc2l6ZW9mKHRwbV9wbnBfdGJsW1RJU19ISURfVVNSX0lEWF0uaWQpLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaGlkLCAiU2V0IGFkZGl0aW9uYWwgc3BlY2lmaWMgSElEIGZvciB0aGlzIGRyaXZlciB0byBwcm9iZSIpOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3Rpcyh2b2lkKQoreworCXJldHVybiBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZ0aXNfcG5wX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3Rpcyh2b2lkKQoreworCXN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljICppLCAqajsKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CisJc3Bpbl9sb2NrKCZ0aXNfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGksIGosICZ0aXNfY2hpcHMsIGxpc3QpIHsKKwkJY2hpcCA9IHRvX3RwbV9jaGlwKGkpOworCQlpb3dyaXRlMzIoflRQTV9HTE9CQUxfSU5UX0VOQUJMRSAmCisJCQkgIGlvcmVhZDMyKGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgIFRQTV9JTlRfRU5BQkxFKGNoaXAtPnZlbmRvci4KKwkJCQkJCSAgbG9jYWxpdHkpKSwKKwkJCSAgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkgIFRQTV9JTlRfRU5BQkxFKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCQlyZWxlYXNlX2xvY2FsaXR5KGNoaXAsIGNoaXAtPnZlbmRvci5sb2NhbGl0eSwgMSk7CisJCWlmIChjaGlwLT52ZW5kb3IuaXJxKQorCQkJZnJlZV9pcnEoY2hpcC0+dmVuZG9yLmlycSwgY2hpcCk7CisJCWlvdW5tYXAoaS0+aW9iYXNlKTsKKwkJbGlzdF9kZWwoJmktPmxpc3QpOworCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CisJfQorCXNwaW5fdW5sb2NrKCZ0aXNfbG9jayk7CisJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZ0aXNfcG5wX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGluaXRfdGlzKTsKK21vZHVsZV9leGl0KGNsZWFudXBfdGlzKTsKK01PRFVMRV9BVVRIT1IoIkxlZW5kZXJ0IHZhbiBEb29ybiAobGVlbmRlcnRAd2F0c29uLmlibS5jb20pIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRQTSBEcml2ZXIiKTsKK01PRFVMRV9WRVJTSU9OKCIyLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCAwYmZkMWI2Li5hODhiOTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0zNTEsMTAgKzM1MSwxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gc2l6ZTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20pOwogCi1pbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgc2l6ZV90IHNpemUpCitpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywKKwkJCQlzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgY29waWVkID0gMDsKIAlkbyB7CkBAIC0zNjgsMTcgKzM2OCwxNiBAQAogCQl0Yi0+dXNlZCArPSBzcGFjZTsKIAkJY29waWVkICs9IHNwYWNlOwogCQljaGFycyArPSBzcGFjZTsKLS8qIAkJcHJpbnRrKCJGbGlwIGluc2VydCAlZC5cbiIsIHNwYWNlKTsgKi8KIAl9CiAJLyogVGhlcmUgaXMgYSBzbWFsbCBjaGFuY2UgdGhhdCB3ZSBuZWVkIHRvIHNwbGl0IHRoZSBkYXRhIG92ZXIKIAkgICBzZXZlcmFsIGJ1ZmZlcnMuIElmIHRoaXMgaXMgdGhlIGNhc2Ugd2UgbXVzdCBsb29wICovCiAJd2hpbGUgKHVubGlrZWx5KHNpemUgPiBjb3BpZWQpKTsKIAlyZXR1cm4gY29waWVkOwogfQorRVhQT1JUX1NZTUJPTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKTsKIAotRVhQT1JUX1NZTUJPTF9HUEwodHR5X2luc2VydF9mbGlwX3N0cmluZyk7Ci0KLWludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjb25zdCBjaGFyICpmbGFncywgc2l6ZV90IHNpemUpCitpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgY29uc3QgY2hhciAqZmxhZ3MsIHNpemVfdCBzaXplKQogewogCWludCBjb3BpZWQgPSAwOwogCWRvIHsKQEAgLTM5OSw5ICszOTgsMjAgQEAKIAl3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOwogCXJldHVybiBjb3BpZWQ7CiB9CitFWFBPUlRfU1lNQk9MKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3MpOwogCi1FWFBPUlRfU1lNQk9MX0dQTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKTsKLQordm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKSB7CisJCXR0eS0+YnVmLnRhaWwtPmFjdGl2ZSA9IDA7CisJCXR0eS0+YnVmLnRhaWwtPmNvbW1pdCA9IHR0eS0+YnVmLnRhaWwtPnVzZWQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOworfQorRVhQT1JUX1NZTUJPTCh0dHlfc2NoZWR1bGVfZmxpcCk7CiAKIC8qCiAgKglQcmVwYXJlIGEgYmxvY2sgb2Ygc3BhY2UgaW4gdGhlIGJ1ZmZlciBmb3IgZGF0YS4gUmV0dXJucyB0aGUgbGVuZ3RoCkBAIC0xNzMwLDcgKzE3NDAsNyBAQAogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksICpvX3R0eTsKIAlpbnQJcHR5X21hc3RlciwgdHR5X2Nsb3NpbmcsIG9fdHR5X2Nsb3NpbmcsIGRvX3NsZWVwOwotCWludAlkZXZwdHNfbWFzdGVyLCBkZXZwdHM7CisJaW50CWRldnB0czsKIAlpbnQJaWR4OwogCWNoYXIJYnVmWzY0XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTc0Nyw3ICsxNzU3LDYgQEAKIAlwdHlfbWFzdGVyID0gKHR0eS0+ZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYKIAkJICAgICAgdHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKTsKIAlkZXZwdHMgPSAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9ERVZQVFNfTUVNKSAhPSAwOwotCWRldnB0c19tYXN0ZXIgPSBwdHlfbWFzdGVyICYmIGRldnB0czsKIAlvX3R0eSA9IHR0eS0+bGluazsKIAogI2lmZGVmIFRUWV9QQVJBTk9JQV9DSEVDSwpAQCAtMjE4NSw2ICsyMTk0LDcgQEAKIAkJcmV0dXJuIDA7CiBvdXQxOgogCXJlbGVhc2VfZGV2KGZpbHApOworCXJldHVybiByZXR2YWw7CiBvdXQ6CiAJZG93bigmYWxsb2NhdGVkX3B0eXNfbG9jayk7CiAJaWRyX3JlbW92ZSgmYWxsb2NhdGVkX3B0eXMsIGluZGV4KTsKQEAgLTI3MTMsNyArMjcyMywxMSBAQAogCQl9CiAJCXRhc2tfbG9jayhwKTsKIAkJaWYgKHAtPmZpbGVzKSB7Ci0JCQlyY3VfcmVhZF9sb2NrKCk7CisJCQkvKgorCQkJICogV2UgZG9uJ3QgdGFrZSBhIHJlZiB0byB0aGUgZmlsZSwgc28gd2UgbXVzdAorCQkJICogaG9sZCAtPmZpbGVfbG9jayBpbnN0ZWFkLgorCQkJICovCisJCQlzcGluX2xvY2soJnAtPmZpbGVzLT5maWxlX2xvY2spOwogCQkJZmR0ID0gZmlsZXNfZmR0YWJsZShwLT5maWxlcyk7CiAJCQlmb3IgKGk9MDsgaSA8IGZkdC0+bWF4X2ZkczsgaSsrKSB7CiAJCQkJZmlscCA9IGZjaGVja19maWxlcyhwLT5maWxlcywgaSk7CkBAIC0yNzI0LDExICsyNzM4LDExIEBACiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiU0FLOiBraWxsZWQgcHJvY2VzcyAlZCIKIAkJCQkJICAgICIgKCVzKTogZmQjJWQgb3BlbmVkIHRvIHRoZSB0dHlcbiIsCiAJCQkJCSAgICBwLT5waWQsIHAtPmNvbW0sIGkpOwotCQkJCQlzZW5kX3NpZyhTSUdLSUxMLCBwLCAxKTsKKwkJCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIHApOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXNwaW5fdW5sb2NrKCZwLT5maWxlcy0+ZmlsZV9sb2NrKTsKIAkJfQogCQl0YXNrX3VubG9jayhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYyBiL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMDlkOWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYworKysgL2Rldi9udWxsCkBAIC0xLDcxNyArMCwwIEBACi0vKgotICogIERyaXZlciBmb3IgTkVDIFZSNDEwMCBzZXJpZXMgIFJlYWwgVGltZSBDbG9jayB1bml0LgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdnI0MXh4L3ZyNDF4eC5oPgotCi1NT0RVTEVfQVVUSE9SKCJZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTkVDIFZSNDEwMCBzZXJpZXMgUlRDIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIFJUQzFfVFlQRTFfU1RBUlQJMHgwYjAwMDBjMFVMCi0jZGVmaW5lIFJUQzFfVFlQRTFfRU5ECQkweDBiMDAwMGRmVUwKLSNkZWZpbmUgUlRDMl9UWVBFMV9TVEFSVAkweDBiMDAwMWMwVUwKLSNkZWZpbmUgUlRDMl9UWVBFMV9FTkQJCTB4MGIwMDAxZGZVTAotCi0jZGVmaW5lIFJUQzFfVFlQRTJfU1RBUlQJMHgwZjAwMDEwMFVMCi0jZGVmaW5lIFJUQzFfVFlQRTJfRU5ECQkweDBmMDAwMTFmVUwKLSNkZWZpbmUgUlRDMl9UWVBFMl9TVEFSVAkweDBmMDAwMTIwVUwKLSNkZWZpbmUgUlRDMl9UWVBFMl9FTkQJCTB4MGYwMDAxM2ZVTAotCi0jZGVmaW5lIFJUQzFfU0laRQkJMHgyMAotI2RlZmluZSBSVEMyX1NJWkUJCTB4MjAKLQotLyogUlRDIDEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEVUSU1FTFJFRwkJMHgwMAotI2RlZmluZSBFVElNRU1SRUcJCTB4MDIKLSNkZWZpbmUgRVRJTUVIUkVHCQkweDA0Ci0vKiBSRlUgKi8KLSNkZWZpbmUgRUNNUExSRUcJCTB4MDgKLSNkZWZpbmUgRUNNUE1SRUcJCTB4MGEKLSNkZWZpbmUgRUNNUEhSRUcJCTB4MGMKLS8qIFJGVSAqLwotI2RlZmluZSBSVENMMUxSRUcJCTB4MTAKLSNkZWZpbmUgUlRDTDFIUkVHCQkweDEyCi0jZGVmaW5lIFJUQ0wxQ05UTFJFRwkJMHgxNAotI2RlZmluZSBSVENMMUNOVEhSRUcJCTB4MTYKLSNkZWZpbmUgUlRDTDJMUkVHCQkweDE4Ci0jZGVmaW5lIFJUQ0wySFJFRwkJMHgxYQotI2RlZmluZSBSVENMMkNOVExSRUcJCTB4MWMKLSNkZWZpbmUgUlRDTDJDTlRIUkVHCQkweDFlCi0KLS8qIFJUQyAyIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUQ0xLTFJFRwkJMHgwMAotI2RlZmluZSBUQ0xLSFJFRwkJMHgwMgotI2RlZmluZSBUQ0xLQ05UTFJFRwkJMHgwNAotI2RlZmluZSBUQ0xLQ05USFJFRwkJMHgwNgotLyogUkZVICovCi0jZGVmaW5lIFJUQ0lOVFJFRwkJMHgxZQotICNkZWZpbmUgVENMT0NLX0lOVAkJMHgwOAotICNkZWZpbmUgUlRDTE9ORzJfSU5UCQkweDA0Ci0gI2RlZmluZSBSVENMT05HMV9JTlQJCTB4MDIKLSAjZGVmaW5lIEVMQVBTRURUSU1FX0lOVAkweDAxCi0KLSNkZWZpbmUgUlRDX0ZSRVFVRU5DWQkJMzI3NjgKLSNkZWZpbmUgTUFYX1BFUklPRElDX1JBVEUJNjU1MwotI2RlZmluZSBNQVhfVVNFUl9QRVJJT0RJQ19SQVRFCTY0Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnJ0YzFfYmFzZTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnJ0YzJfYmFzZTsKLQotI2RlZmluZSBydGMxX3JlYWQob2Zmc2V0KQkJcmVhZHcocnRjMV9iYXNlICsgKG9mZnNldCkpCi0jZGVmaW5lIHJ0YzFfd3JpdGUob2Zmc2V0LCB2YWx1ZSkJd3JpdGV3KCh2YWx1ZSksIHJ0YzFfYmFzZSArIChvZmZzZXQpKQotCi0jZGVmaW5lIHJ0YzJfcmVhZChvZmZzZXQpCQlyZWFkdyhydGMyX2Jhc2UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgcnRjMl93cml0ZShvZmZzZXQsIHZhbHVlKQl3cml0ZXcoKHZhbHVlKSwgcnRjMl9iYXNlICsgKG9mZnNldCkpCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGVwb2NoID0gMTk3MDsJLyogSmFuIDEgMTk3MCAwMDowMDowMCAqLwotCi1zdGF0aWMgc3BpbmxvY2tfdCBydGNfdGFza19sb2NrOwotc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IHJ0Y193YWl0Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRjX2lycV9kYXRhOwotc3RhdGljIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpydGNfYXN5bmNfcXVldWU7Ci1zdGF0aWMgcnRjX3Rhc2tfdCAqcnRjX2NhbGxiYWNrOwotc3RhdGljIGNoYXIgcnRjX25hbWVbXSA9ICJSVEMiOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfZnJlcXVlbmN5Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfY291bnQ7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JUlRDX1JFTEVBU0UsCi0JUlRDX09QRU4sCi19IHJ0Y19zdGF0dXNfdDsKLQotc3RhdGljIHJ0Y19zdGF0dXNfdCBydGNfc3RhdHVzOwotCi10eXBlZGVmIGVudW0gewotCUZVTkNUSU9OX1JUQ19JT0NUTCwKLQlGVU5DVElPTl9SVENfQ09OVFJPTCwKLX0gcnRjX2NhbGxmcm9tX3Q7Ci0KLXN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VbMl0gPSB7Ci0JewkubmFtZQk9IHJ0Y19uYW1lLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJfSwKLQl7CS5uYW1lCT0gcnRjX25hbWUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAl9LAotfTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfZWxhcHNlZF9zZWNvbmQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X2xvdywgZmlyc3RfbWlkLCBmaXJzdF9oaWdoOwotCXVuc2lnbmVkIGxvbmcgc2Vjb25kX2xvdywgc2Vjb25kX21pZCwgc2Vjb25kX2hpZ2g7Ci0KLQlkbyB7Ci0JCWZpcnN0X2xvdyA9IHJ0YzFfcmVhZChFVElNRUxSRUcpOwotCQlmaXJzdF9taWQgPSBydGMxX3JlYWQoRVRJTUVNUkVHKTsKLQkJZmlyc3RfaGlnaCA9IHJ0YzFfcmVhZChFVElNRUhSRUcpOwotCQlzZWNvbmRfbG93ID0gcnRjMV9yZWFkKEVUSU1FTFJFRyk7Ci0JCXNlY29uZF9taWQgPSBydGMxX3JlYWQoRVRJTUVNUkVHKTsKLQkJc2Vjb25kX2hpZ2ggPSBydGMxX3JlYWQoRVRJTUVIUkVHKTsKLQl9IHdoaWxlIChmaXJzdF9sb3cgIT0gc2Vjb25kX2xvdyB8fCBmaXJzdF9taWQgIT0gc2Vjb25kX21pZCB8fAotCSAgICAgICAgIGZpcnN0X2hpZ2ggIT0gc2Vjb25kX2hpZ2gpOwotCi0JcmV0dXJuIChmaXJzdF9oaWdoIDw8IDE3KSB8IChmaXJzdF9taWQgPDwgMSkgfCAoZmlyc3RfbG93ID4+IDE1KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2VsYXBzZWRfc2Vjb25kKHVuc2lnbmVkIGxvbmcgc2VjKQotewotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXJ0YzFfd3JpdGUoRVRJTUVMUkVHLCAodWludDE2X3QpKHNlYyA8PCAxNSkpOwotCXJ0YzFfd3JpdGUoRVRJTUVNUkVHLCAodWludDE2X3QpKHNlYyA+PiAxKSk7Ci0JcnRjMV93cml0ZShFVElNRUhSRUcsICh1aW50MTZfdCkoc2VjID4+IDE3KSk7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2FsYXJtKHN0cnVjdCBydGNfdGltZSAqdGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFsYXJtX3NlYzsKLQotCWFsYXJtX3NlYyA9IG1rdGltZSh0aW1lLT50bV95ZWFyICsgMTkwMCwgdGltZS0+dG1fbW9uICsgMSwgdGltZS0+dG1fbWRheSwKLQkgICAgICAgICAgICAgICAgICAgdGltZS0+dG1faG91ciwgdGltZS0+dG1fbWluLCB0aW1lLT50bV9zZWMpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcnRjMV93cml0ZShFQ01QTFJFRywgKHVpbnQxNl90KShhbGFybV9zZWMgPDwgMTUpKTsKLQlydGMxX3dyaXRlKEVDTVBNUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA+PiAxKSk7Ci0JcnRjMV93cml0ZShFQ01QSFJFRywgKHVpbnQxNl90KShhbGFybV9zZWMgPj4gMTcpKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCByZWFkX2FsYXJtKHN0cnVjdCBydGNfdGltZSAqdGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIGxvdywgbWlkLCBoaWdoOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JbG93ID0gcnRjMV9yZWFkKEVDTVBMUkVHKTsKLQltaWQgPSBydGMxX3JlYWQoRUNNUE1SRUcpOwotCWhpZ2ggPSBydGMxX3JlYWQoRUNNUEhSRUcpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQl0b190bSgoaGlnaCA8PCAxNykgfCAobWlkIDw8IDEpIHwgKGxvdyA+PiAxNSksIHRpbWUpOwotCXRpbWUtPnRtX3llYXIgLT0gMTkwMDsKLX0KLQotc3RhdGljIHZvaWQgcmVhZF90aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIGVwb2NoX3NlYywgZWxhcHNlZF9zZWM7Ci0KLQllcG9jaF9zZWMgPSBta3RpbWUoZXBvY2gsIDEsIDEsIDAsIDAsIDApOwotCWVsYXBzZWRfc2VjID0gcmVhZF9lbGFwc2VkX3NlY29uZCgpOwotCi0JdG9fdG0oZXBvY2hfc2VjICsgZWxhcHNlZF9zZWMsIHRpbWUpOwotCXRpbWUtPnRtX3llYXIgLT0gMTkwMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQotewotCXVuc2lnbmVkIGxvbmcgZXBvY2hfc2VjLCBjdXJyZW50X3NlYzsKLQotCWVwb2NoX3NlYyA9IG1rdGltZShlcG9jaCwgMSwgMSwgMCwgMCwgMCk7Ci0JY3VycmVudF9zZWMgPSBta3RpbWUodGltZS0+dG1feWVhciArIDE5MDAsIHRpbWUtPnRtX21vbiArIDEsIHRpbWUtPnRtX21kYXksCi0JICAgICAgICAgICAgICAgICAgICAgdGltZS0+dG1faG91ciwgdGltZS0+dG1fbWluLCB0aW1lLT50bV9zZWMpOwotCi0Jd3JpdGVfZWxhcHNlZF9zZWNvbmQoY3VycmVudF9zZWMgLSBlcG9jaF9zZWMpOwotfQotCi1zdGF0aWMgc3NpemVfdCBydGNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZGF0YTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWlmIChjb3VudCAhPSBzaXplb2YodW5zaWduZWQgaW50KSAmJiBjb3VudCAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYWRkX3dhaXRfcXVldWUoJnJ0Y193YWl0LCAmd2FpdCk7Ci0KLQlkbyB7Ci0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0JCWlycV9kYXRhID0gcnRjX2lycV9kYXRhOwotCQlydGNfaXJxX2RhdGEgPSAwOwotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCQlpZiAoaXJxX2RhdGEgIT0gMCkKLQkJCWJyZWFrOwotCi0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJcmV0dmFsID0gLUVBR0FJTjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7Ci0JCQlicmVhazsKLQkJfQotCX0gd2hpbGUgKDEpOwotCi0JaWYgKHJldHZhbCA9PSAwKSB7Ci0JCWlmIChjb3VudCA9PSBzaXplb2YodW5zaWduZWQgaW50KSkgewotCQkJcmV0dmFsID0gcHV0X3VzZXIoaXJxX2RhdGEsICh1bnNpZ25lZCBpbnQgX191c2VyICopYnVmKTsKLQkJCWlmIChyZXR2YWwgPT0gMCkKLQkJCQlyZXR2YWwgPSBzaXplb2YodW5zaWduZWQgaW50KTsKLQkJfSBlbHNlIHsKLQkJCXJldHZhbCA9IHB1dF91c2VyKGlycV9kYXRhLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilidWYpOwotCQkJaWYgKHJldHZhbCA9PSAwKQotCQkJCXJldHZhbCA9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQkJfQotCi0JfQotCi0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZydGNfd2FpdCwgJndhaXQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBydGNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp0YWJsZSkKLXsKLQlwb2xsX3dhaXQoZmlsZSwgJnJ0Y193YWl0LCB0YWJsZSk7Ci0KLQlpZiAocnRjX2lycV9kYXRhICE9IDApCi0JCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2RvX2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLCBydGNfY2FsbGZyb21fdCBmcm9tKQotewotCXN0cnVjdCBydGNfdGltZSB0aW1lOwotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PTjoKLQkJZW5hYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOwotCQlicmVhazsKLQljYXNlIFJUQ19QSUVfT046Ci0JCWVuYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfUElFX09GRjoKLQkJZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUxNX1NFVDoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aW1lLCAoc3RydWN0IHJ0Y190aW1lIF9fdXNlciAqKWFyZywKLQkJICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXNldF9hbGFybSgmdGltZSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FMTV9SRUFEOgotCQltZW1zZXQoJnRpbWUsIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKTsKLQkJcmVhZF9hbGFybSgmdGltZSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX1JEX1RJTUU6Ci0JCW1lbXNldCgmdGltZSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwotCQlyZWFkX3RpbWUoJnRpbWUpOwotCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnRpbWUsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQljYXNlIFJUQ19TRVRfVElNRToKLQkJaWYgKGNhcGFibGUoQ0FQX1NZU19USU1FKSA9PSAwKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aW1lLCAoc3RydWN0IHJ0Y190aW1lIF9fdXNlciAqKWFyZywKLQkJICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXNldF90aW1lKCZ0aW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfSVJRUF9SRUFEOgotCQlyZXR1cm4gcHV0X3VzZXIocGVyaW9kaWNfZnJlcXVlbmN5LCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOwotCQlicmVhazsKLQljYXNlIFJUQ19JUlFQX1NFVDoKLQkJaWYgKGFyZyA+IE1BWF9QRVJJT0RJQ19SQVRFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGZyb20gPT0gRlVOQ1RJT05fUlRDX0lPQ1RMICYmIGFyZyA+IE1BWF9VU0VSX1BFUklPRElDX1JBVEUgJiYKLQkJICAgIGNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkgPT0gMCkKLQkJCXJldHVybiAtRUFDQ0VTOwotCi0JCXBlcmlvZGljX2ZyZXF1ZW5jeSA9IGFyZzsKLQotCQljb3VudCA9IFJUQ19GUkVRVUVOQ1k7Ci0JCWRvX2Rpdihjb3VudCwgYXJnKTsKLQotCQlwZXJpb2RpY19jb3VudCA9IGNvdW50OwotCi0JCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgY291bnQpOwotCQlydGMxX3dyaXRlKFJUQ0wxSFJFRywgY291bnQgPj4gMTYpOwotCi0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCQlicmVhazsKLQljYXNlIFJUQ19FUE9DSF9SRUFEOgotCQlyZXR1cm4gcHV0X3VzZXIoZXBvY2gsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7Ci0JY2FzZSBSVENfRVBPQ0hfU0VUOgotCQkvKiBEb2Vzbid0IHN1cHBvcnQgYmVmb3JlIDE5MDAgKi8KLQkJaWYgKGFyZyA8IDE5MDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoY2FwYWJsZShDQVBfU1lTX1RJTUUpID09IDApCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQotCQllcG9jaCA9IGFyZzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIHJ0Y19kb19pb2N0bChjbWQsIGFyZywgRlVOQ1RJT05fUlRDX0lPQ1RMKTsKLX0KLQotc3RhdGljIGludCBydGNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlpZiAocnRjX3N0YXR1cyA9PSBSVENfT1BFTikgewotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlydGNfc3RhdHVzID0gUlRDX09QRU47Ci0JcnRjX2lycV9kYXRhID0gMDsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaWYgKGZpbGUtPmZfZmxhZ3MgJiBGQVNZTkMpCi0JCSh2b2lkKWZhc3luY19oZWxwZXIoLTEsIGZpbGUsIDAsICZydGNfYXN5bmNfcXVldWUpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcnRjMV93cml0ZShFQ01QTFJFRywgMCk7Ci0JcnRjMV93cml0ZShFQ01QTVJFRywgMCk7Ci0JcnRjMV93cml0ZShFQ01QSFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUxSRUcsIDApOwotCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCAwKTsKLQotCXJ0Y19zdGF0dXMgPSBSVENfUkVMRUFTRTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JZGlzYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKLQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCi17Ci0JcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmcnRjX2FzeW5jX3F1ZXVlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRjX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS5yZWFkCQk9IHJ0Y19yZWFkLAotCS5wb2xsCQk9IHJ0Y19wb2xsLAotCS5pb2N0bAkJPSBydGNfaW9jdGwsCi0JLm9wZW4JCT0gcnRjX29wZW4sCi0JLnJlbGVhc2UJPSBydGNfcmVsZWFzZSwKLQkuZmFzeW5jCQk9IHJ0Y19mYXN5bmMsCi19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZWxhcHNlZHRpbWVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3Bpbl9sb2NrKCZydGNfbG9jayk7Ci0JcnRjMl93cml0ZShSVENJTlRSRUcsIEVMQVBTRURUSU1FX0lOVCk7Ci0KLQlydGNfaXJxX2RhdGEgKz0gMHgxMDA7Ci0JcnRjX2lycV9kYXRhICY9IH4weGZmOwotCXJ0Y19pcnFfZGF0YSB8PSBSVENfQUY7Ci0Jc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKLQotCXNwaW5fbG9jaygmcnRjX2xvY2spOwotCWlmIChydGNfY2FsbGJhY2spCi0JCXJ0Y19jYWxsYmFjay0+ZnVuYyhydGNfY2FsbGJhY2stPnByaXZhdGVfZGF0YSk7Ci0Jc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnRjX3dhaXQpOwotCi0Ja2lsbF9mYXN5bmMoJnJ0Y19hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgcnRjbG9uZzFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBjb3VudCA9IHBlcmlvZGljX2NvdW50OwotCi0Jc3Bpbl9sb2NrKCZydGNfbG9jayk7Ci0JcnRjMl93cml0ZShSVENJTlRSRUcsIFJUQ0xPTkcxX0lOVCk7Ci0KLQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgY291bnQpOwotCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCBjb3VudCA+PiAxNik7Ci0KLQlydGNfaXJxX2RhdGEgKz0gMHgxMDA7Ci0JcnRjX2lycV9kYXRhICY9IH4weGZmOwotCXJ0Y19pcnFfZGF0YSB8PSBSVENfUEY7Ci0Jc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKLQotCXNwaW5fbG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0JaWYgKHJ0Y19jYWxsYmFjaykKLQkJcnRjX2NhbGxiYWNrLT5mdW5jKHJ0Y19jYWxsYmFjay0+cHJpdmF0ZV9kYXRhKTsKLQlzcGluX3VubG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJ0Y193YWl0KTsKLQotCWtpbGxfZmFzeW5jKCZydGNfYXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotaW50IHJ0Y19yZWdpc3RlcihydGNfdGFza190ICp0YXNrKQotewotCWlmICh0YXNrID09IE5VTEwgfHwgdGFzay0+ZnVuYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQlpZiAocnRjX3N0YXR1cyA9PSBSVENfT1BFTikgewotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlzcGluX2xvY2soJnJ0Y190YXNrX2xvY2spOwotCWlmIChydGNfY2FsbGJhY2sgIT0gTlVMTCkgewotCQlzcGluX3VubG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcnRjX2NhbGxiYWNrID0gdGFzazsKLQlzcGluX3VubG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0KLQlydGNfc3RhdHVzID0gUlRDX09QRU47Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChydGNfcmVnaXN0ZXIpOwotCi1pbnQgcnRjX3VucmVnaXN0ZXIocnRjX3Rhc2tfdCAqdGFzaykKLXsKLQlzcGluX2xvY2tfaXJxKCZydGNfdGFza19sb2NrKTsKLQlpZiAodGFzayA9PSBOVUxMIHx8IHJ0Y19jYWxsYmFjayAhPSB0YXNrKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0Jc3Bpbl9sb2NrKCZydGNfbG9jayk7Ci0KLQlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKLQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIDApOwotCi0JcnRjX3N0YXR1cyA9IFJUQ19SRUxFQVNFOwotCi0Jc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKLQotCXJ0Y19jYWxsYmFjayA9IE5VTEw7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y190YXNrX2xvY2spOwotCi0JZGlzYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKLQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0Y191bnJlZ2lzdGVyKTsKLQotaW50IHJ0Y19jb250cm9sKHJ0Y190YXNrX3QgKnRhc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCByZXR2YWwgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0KLQlpZiAocnRjX2NhbGxiYWNrICE9IHRhc2spCi0JCXJldHZhbCA9IC1FTlhJTzsKLQllbHNlCi0JCXJ0Y19kb19pb2N0bChjbWQsIGFyZywgRlVOQ1RJT05fUlRDX0NPTlRST0wpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfdGFza19sb2NrKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19jb250cm9sKTsKLQotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHJ0Y19taXNjZGV2aWNlID0gewotCS5taW5vcgk9IFJUQ19NSU5PUiwKLQkubmFtZQk9IHJ0Y19uYW1lLAotCS5mb3BzCT0gJnJ0Y19mb3BzLAotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JdW5zaWduZWQgaW50IGlycTsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMikKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJ0YzFfYmFzZSA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIFJUQzFfU0laRSk7Ci0JaWYgKHJ0YzFfYmFzZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcnRjMl9iYXNlID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgUlRDMl9TSVpFKTsKLQlpZiAocnRjMl9iYXNlID09IE5VTEwpIHsKLQkJaW91bm1hcChydGMxX2Jhc2UpOwotCQlydGMxX2Jhc2UgPSBOVUxMOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHZhbCA9IG1pc2NfcmVnaXN0ZXIoJnJ0Y19taXNjZGV2aWNlKTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlpb3VubWFwKHJ0YzFfYmFzZSk7Ci0JCWlvdW5tYXAocnRjMl9iYXNlKTsKLQkJcnRjMV9iYXNlID0gTlVMTDsKLQkJcnRjMl9iYXNlID0gTlVMTDsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKLQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIDApOwotCi0JcnRjX3N0YXR1cyA9IFJUQ19SRUxFQVNFOwotCXJ0Y19pcnFfZGF0YSA9IDA7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJ0Y193YWl0KTsKLQotCWlycSA9IEVMQVBTRURUSU1FX0lSUTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGVsYXBzZWR0aW1lX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAotCSAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkX3RpbWUiLCBOVUxMKTsKLQlpZiAocmV0dmFsID09IDApIHsKLQkJaXJxID0gUlRDTE9ORzFfSVJROwotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAotCQkgICAgICAgICAgICAgICAgICAgICAicnRjbG9uZzEiLCBOVUxMKTsKLQl9Ci0KLQlpZiAocmV0dmFsIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInJ0YzogSVJRJWQgaXMgYnVzeVxuIiwgaXJxKTsKLQkJaWYgKGlycSA9PSBSVENMT05HMV9JUlEpCi0JCQlmcmVlX2lycShFTEFQU0VEVElNRV9JUlEsIE5VTEwpOwotCQlpb3VubWFwKHJ0YzFfYmFzZSk7Ci0JCWlvdW5tYXAocnRjMl9iYXNlKTsKLQkJcnRjMV9iYXNlID0gTlVMTDsKLQkJcnRjMl9iYXNlID0gTlVMTDsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOwotCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmcnRjX3Rhc2tfbG9jayk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJydGM6IFJlYWwgVGltZSBDbG9jayBvZiBORUMgVlI0MTAwIHNlcmllc1xuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IG1pc2NfZGVyZWdpc3RlcigmcnRjX21pc2NkZXZpY2UpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JZnJlZV9pcnEoRUxBUFNFRFRJTUVfSVJRLCBOVUxMKTsKLQlmcmVlX2lycShSVENMT05HMV9JUlEsIE5VTEwpOwotCWlmIChydGMxX2Jhc2UgIT0gTlVMTCkKLQkJaW91bm1hcChydGMxX2Jhc2UpOwotCWlmIChydGMyX2Jhc2UgIT0gTlVMTCkKLQkJaW91bm1hcChydGMyX2Jhc2UpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpydGNfcGxhdGZvcm1fZGV2aWNlOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBydGNfZGV2aWNlX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gcnRjX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnRjX3JlbW92ZSksCi0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gcnRjX25hbWUsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB2cjQxeHhfcnRjX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsOwotCi0Jc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUpIHsKLQljYXNlIENQVV9WUjQxMTE6Ci0JY2FzZSBDUFVfVlI0MTIxOgotCQlydGNfcmVzb3VyY2VbMF0uc3RhcnQgPSBSVEMxX1RZUEUxX1NUQVJUOwotCQlydGNfcmVzb3VyY2VbMF0uZW5kID0gUlRDMV9UWVBFMV9FTkQ7Ci0JCXJ0Y19yZXNvdXJjZVsxXS5zdGFydCA9IFJUQzJfVFlQRTFfU1RBUlQ7Ci0JCXJ0Y19yZXNvdXJjZVsxXS5lbmQgPSBSVEMyX1RZUEUxX0VORDsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfVlI0MTIyOgotCWNhc2UgQ1BVX1ZSNDEzMToKLQljYXNlIENQVV9WUjQxMzM6Ci0JCXJ0Y19yZXNvdXJjZVswXS5zdGFydCA9IFJUQzFfVFlQRTJfU1RBUlQ7Ci0JCXJ0Y19yZXNvdXJjZVswXS5lbmQgPSBSVEMxX1RZUEUyX0VORDsKLQkJcnRjX3Jlc291cmNlWzFdLnN0YXJ0ID0gUlRDMl9UWVBFMl9TVEFSVDsKLQkJcnRjX3Jlc291cmNlWzFdLmVuZCA9IFJUQzJfVFlQRTJfRU5EOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0RFVjsKLQkJYnJlYWs7Ci0JfQotCi0JcnRjX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiUlRDIiwgLTEpOwotCWlmICghcnRjX3BsYXRmb3JtX2RldmljZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhydGNfcGxhdGZvcm1fZGV2aWNlLAotCQkJCXJ0Y19yZXNvdXJjZSwgQVJSQVlfU0laRShydGNfcmVzb3VyY2UpKTsKLQotCWlmIChyZXR2YWwgPT0gMCkKLQkJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZChydGNfcGxhdGZvcm1fZGV2aWNlKTsKLQotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQocnRjX3BsYXRmb3JtX2RldmljZSk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHZyNDF4eF9ydGNfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7Ci19Ci0KLW1vZHVsZV9pbml0KHZyNDF4eF9ydGNfaW5pdCk7Ci1tb2R1bGVfZXhpdCh2cjQxeHhfcnRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCBjYTQ4NDRjLi42Yzk0ODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtMjMyOCw2ICsyMzI4LDEwIEBACiAJCWNhc2UgVElPQ0xfU0VUVkVTQUJMQU5LOgogCQkJc2V0X3Zlc2FfYmxhbmtpbmcocCk7CiAJCQlicmVhazsKKwkJY2FzZSBUSU9DTF9HRVRLTVNHUkVESVJFQ1Q6CisJCQlkYXRhID0ga21zZ19yZWRpcmVjdDsKKwkJCXJldCA9IF9fcHV0X3VzZXIoZGF0YSwgcCk7CisJCQlicmVhazsKIAkJY2FzZSBUSU9DTF9TRVRLTVNHUkVESVJFQ1Q6CiAJCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkJCQlyZXQgPSAtRVBFUk07CkBAIC0zMjM0LDE0ICszMjM4LDYgQEAKIAl9CiB9CiAKLWludCBpc19jb25zb2xlX3N1c3BlbmRfc2FmZSh2b2lkKQotewotCS8qIEl0IGlzIHVuc2FmZSB0byBzdXNwZW5kIGRldmljZXMgd2hpbGUgWCBoYXMgY29udHJvbCBvZiB0aGUKLQkgKiBoYXJkd2FyZS4gTWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nIG9uIGEga2VybmVsLWNvbnRyb2xsZWQgY29uc29sZS4KLQkgKi8KLQlyZXR1cm4gdmNfY29uc1tmZ19jb25zb2xlXS5kLT52Y19tb2RlID09IEtEX1RFWFQ7Ci19Ci0KIC8qCiAgKglWaXNpYmxlIHN5bWJvbHMgZm9yIG1vZHVsZXMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCAxNmU5OWRiLi5kNTNmNjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvS2NvbmZpZwpAQCAtNjAsNiArNjAsMTMgQEAKIAogIyBBUk0gQXJjaGl0ZWN0dXJlCiAKK2NvbmZpZyBBVDkxX1dBVENIRE9HCisJdHJpc3RhdGUgIkFUOTFSTTkyMDAgd2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBBUkNIX0FUOTFSTTkyMDAKKwloZWxwCisJICBXYXRjaGRvZyB0aW1lciBlbWJlZGRlZCBpbnRvIEFUOTFSTTkyMDAgY2hpcHMuIFRoaXMgd2lsbCByZWJvb3QgeW91cgorCSAgc3lzdGVtIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4KKwogY29uZmlnIDIxMjg1X1dBVENIRE9HCiAJdHJpc3RhdGUgIkRDMjEyODUgd2F0Y2hkb2ciCiAJZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBGT09UQlJJREdFCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggZDZmMjdmZC4uNmFiNzdiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX1VTQlBDV0FUQ0hET0cpICs9IHBjd2RfdXNiLm8KIAogIyBBUk0gQXJjaGl0ZWN0dXJlCitvYmotJChDT05GSUdfQVQ5MV9XQVRDSERPRykgKz0gYXQ5MV93ZHQubwogb2JqLSQoQ09ORklHXzIxMjg1X1dBVENIRE9HKSArPSB3ZHQyODUubwogb2JqLSQoQ09ORklHXzk3N19XQVRDSERPRykgKz0gd2R0OTc3Lm8KIG9iai0kKENPTkZJR19JWFAyMDAwX1dBVENIRE9HKSArPSBpeHAyMDAwX3dkdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MV93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9hdDkxX3dkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjODNiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MV93ZHQuYwpAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIFdhdGNoZG9nIGRyaXZlciBmb3IgQXRtZWwgQVQ5MVJNOTIwMCAoVGh1bmRlcikKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUgKFB0eSkgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKworI2RlZmluZSBXRFRfREVGQVVMVF9USU1FCTUJLyogNSBzZWNvbmRzICovCisjZGVmaW5lIFdEVF9NQVhfVElNRQkJMjU2CS8qIDI1NiBzZWNvbmRzICovCisKK3N0YXRpYyBpbnQgd2R0X3RpbWUgPSBXRFRfREVGQVVMVF9USU1FOworc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOworCittb2R1bGVfcGFyYW0od2R0X3RpbWUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHdkdF90aW1lLCAiV2F0Y2hkb2cgdGltZSBpbiBzZWNvbmRzLiAoZGVmYXVsdD0iX19NT0RVTEVfU1RSSU5HKFdEVF9ERUZBVUxUX1RJTUUpICIpIik7CisKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYXQ5MXdkdF9idXN5OworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKKy8qCisgKiBEaXNhYmxlIHRoZSB3YXRjaGRvZy4KKyAqLworc3RhdGljIHZvaWQgaW5saW5lIGF0OTFfd2R0X3N0b3Aodm9pZCkKK3sKKwlhdDkxX3N5c193cml0ZShBVDkxX1NUX1dETVIsIEFUOTFfU1RfRVhURU4pOworfQorCisvKgorICogRW5hYmxlIGFuZCByZXNldCB0aGUgd2F0Y2hkb2cuCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZSBhdDkxX3dkdF9zdGFydCh2b2lkKQoreworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfV0RNUiwgQVQ5MV9TVF9FWFRFTiB8IEFUOTFfU1RfUlNURU4gfCAoKCg2NTUzNiAqIHdkdF90aW1lKSA+PiA4KSAmIEFUOTFfU1RfV0RWKSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TVF9DUiwgQVQ5MV9TVF9XRFJTVCk7Cit9CisKKy8qCisgKiBSZWxvYWQgdGhlIHdhdGNoZG9nIHRpbWVyLiAgKGllLCBwYXQgdGhlIHdhdGNoZG9nKQorICovCitzdGF0aWMgdm9pZCBpbmxpbmUgYXQ5MV93ZHRfcmVsb2FkKHZvaWQpCit7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TVF9DUiwgQVQ5MV9TVF9XRFJTVCk7Cit9CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKworLyoKKyAqIFdhdGNoZG9nIGRldmljZSBpcyBvcGVuZWQsIGFuZCB3YXRjaGRvZyBzdGFydHMgcnVubmluZy4KKyAqLworc3RhdGljIGludCBhdDkxX3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZhdDkxd2R0X2J1c3kpKQorCQlyZXR1cm4gLUVCVVNZOworCisJYXQ5MV93ZHRfc3RhcnQoKTsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKKy8qCisgKiBDbG9zZSB0aGUgd2F0Y2hkb2cgZGV2aWNlLgorICogSWYgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIE5PVCBkZWZpbmVkIHRoZW4gdGhlIHdhdGNoZG9nIGlzIGFsc28KKyAqICBkaXNhYmxlZC4KKyAqLworc3RhdGljIGludCBhdDkxX3dkdF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoIW5vd2F5b3V0KQorCQlhdDkxX3dkdF9zdG9wKCk7CS8qIERpc2FibGUgdGhlIHdhdGNoZG9nIHdoZW4gZmlsZSBpcyBjbG9zZWQgKi8KKworCWNsZWFyX2JpdCgwLCAmYXQ5MXdkdF9idXN5KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoYW5nZSB0aGUgd2F0Y2hkb2cgdGltZSBpbnRlcnZhbC4KKyAqLworc3RhdGljIGludCBhdDkxX3dkdF9zZXR0aW1lb3V0KGludCBuZXdfdGltZSkKK3sKKwkvKgorCSAqIEFsbCBjb3VudGluZyBvY2N1cnMgYXQgU0xPV19DTE9DSyAvIDEyOCA9IDAuMjU2IEh6CisJICoKKwkgKiBTaW5jZSBXRFYgaXMgYSAxNi1iaXQgY291bnRlciwgdGhlIG1heGltdW0gcGVyaW9kIGlzCisJICogNjU1MzYgLyAwLjI1NiA9IDI1NiBzZWNvbmRzLgorCSAqLworCWlmICgobmV3X3RpbWUgPD0gMCkgfHwgKG5ld190aW1lID4gV0RUX01BWF9USU1FKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXQgbmV3IHdhdGNoZG9nIHRpbWUuIEl0IHdpbGwgYmUgdXNlZCB3aGVuIGF0OTFfd2R0X3N0YXJ0KCkgaXMgY2FsbGVkLiAqLworCXdkdF90aW1lID0gbmV3X3RpbWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBhdDkxX3dkdF9pbmZvID0geworCS5pZGVudGl0eQk9ICJhdDkxIHdhdGNoZG9nIiwKKwkub3B0aW9ucwk9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HLAorfTsKKworLyoKKyAqIEhhbmRsZSBjb21tYW5kcyBmcm9tIHVzZXItc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgYXQ5MV93ZHRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCBfX3VzZXIgKnAgPSBhcmdwOworCWludCBuZXdfdmFsdWU7CisKKwlzd2l0Y2goY21kKSB7CisJCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQkJYXQ5MV93ZHRfcmVsb2FkKCk7CS8qIHBhdCB0aGUgd2F0Y2hkb2cgKi8KKwkJCXJldHVybiAwOworCisJCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmF0OTFfd2R0X2luZm8sIHNpemVvZihhdDkxX3dkdF9pbmZvKSkgPyAtRUZBVUxUIDogMDsKKworCQljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCQlpZiAoZ2V0X3VzZXIobmV3X3ZhbHVlLCBwKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkKKwkJCWlmIChhdDkxX3dkdF9zZXR0aW1lb3V0KG5ld192YWx1ZSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIEVuYWJsZSBuZXcgdGltZSB2YWx1ZSAqLworCQkJYXQ5MV93ZHRfc3RhcnQoKTsKKworCQkJLyogUmV0dXJuIGN1cnJlbnQgdmFsdWUgKi8KKwkJCXJldHVybiBwdXRfdXNlcih3ZHRfdGltZSwgcCk7CisKKwkJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQkJcmV0dXJuIHB1dF91c2VyKHdkdF90aW1lLCBwKTsKKworCQljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCisJCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKKwkJCWlmIChnZXRfdXNlcihuZXdfdmFsdWUsIHApKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAobmV3X3ZhbHVlICYgV0RJT1NfRElTQUJMRUNBUkQpCisJCQkJYXQ5MV93ZHRfc3RvcCgpOworCQkJaWYgKG5ld192YWx1ZSAmIFdESU9TX0VOQUJMRUNBUkQpCisJCQkJYXQ5MV93ZHRfc3RhcnQoKTsKKwkJCXJldHVybiAwOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KK30KKworLyoKKyAqIFBhdCB0aGUgd2F0Y2hkb2cgd2hlbmV2ZXIgZGV2aWNlIGlzIHdyaXR0ZW4gdG8uCisgKi8KK3N0YXRpYyBzc2l6ZV90IGF0OTFfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJYXQ5MV93ZHRfcmVsb2FkKCk7CQkvKiBwYXQgdGhlIHdhdGNoZG9nICovCisJcmV0dXJuIGxlbjsKK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdDkxd2R0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5pb2N0bAkJPSBhdDkxX3dkdF9pb2N0bCwKKwkub3BlbgkJPSBhdDkxX3dkdF9vcGVuLAorCS5yZWxlYXNlCT0gYXQ5MV93ZHRfY2xvc2UsCisJLndyaXRlCQk9IGF0OTFfd2R0X3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGF0OTF3ZHRfbWlzY2RldiA9IHsKKwkubWlub3IJCT0gV0FUQ0hET0dfTUlOT1IsCisJLm5hbWUJCT0gIndhdGNoZG9nIiwKKwkuZm9wcwkJPSAmYXQ5MXdkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXQ5MV93ZHRfaW5pdCh2b2lkKQoreworCWludCByZXM7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIHJhbmdlOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwlpZiAoYXQ5MV93ZHRfc2V0dGltZW91dCh3ZHRfdGltZSkpIHsKKwkJYXQ5MV93ZHRfc2V0dGltZW91dChXRFRfREVGQVVMVF9USU1FKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXQ5MV93ZHQ6IHdkdF90aW1lIHZhbHVlIG11c3QgYmUgMSA8PSB3ZHRfdGltZSA8PSAyNTYsIHVzaW5nICVkXG4iLCB3ZHRfdGltZSk7CisJfQorCisJcmVzID0gbWlzY19yZWdpc3RlcigmYXQ5MXdkdF9taXNjZGV2KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJcHJpbnRrKCJBVDkxIFdhdGNoZG9nIFRpbWVyIGVuYWJsZWQgKCVkIHNlY29uZHMsIG5vd2F5b3V0PSVkKVxuIiwgd2R0X3RpbWUsIG5vd2F5b3V0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0OTFfd2R0X2V4aXQodm9pZCkKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJmF0OTF3ZHRfbWlzY2Rldik7Cit9CisKK21vZHVsZV9pbml0KGF0OTFfd2R0X2luaXQpOworbW9kdWxlX2V4aXQoYXQ5MV93ZHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFuZHJldyBWaWN0b3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigiV2F0Y2hkb2cgZHJpdmVyIGZvciBBdG1lbCBBVDkxUk05MjAwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTh4eF90Y28uYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pOHh4X3Rjby5jCmluZGV4IGExMzM5NWUuLmZhMmJhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pOHh4X3Rjby5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pOHh4X3Rjby5jCkBAIC0zMywxMSArMzMsNiBAQAogICoJODI4MDFFICAgKEMtSUNIKSAgOiBkb2N1bWVudCBudW1iZXIgMjczNTk5LTAwMSwgMjczNjQ1LTAwMiwKICAqCTgyODAxRUIgIChJQ0g1KSAgIDogZG9jdW1lbnQgbnVtYmVyIDI1MjUxNi0wMDEsIDI1MjUxNy0wMDMsCiAgKgk4MjgwMUVSICAoSUNINVIpICA6IGRvY3VtZW50IG51bWJlciAyNTI1MTYtMDAxLCAyNTI1MTctMDAzLAotICoJODI4MDFGQiAgKElDSDYpICAgOiBkb2N1bWVudCBudW1iZXIgMzAxNDczLTAwMiwgMzAxNDc0LTAwNywKLSAqCTgyODAxRlIgIChJQ0g2UikgIDogZG9jdW1lbnQgbnVtYmVyIDMwMTQ3My0wMDIsIDMwMTQ3NC0wMDcsCi0gKgk4MjgwMUZCTSAoSUNINi1NKSA6IGRvY3VtZW50IG51bWJlciAzMDE0NzMtMDAyLCAzMDE0NzQtMDA3LAotICoJODI4MDFGVyAgKElDSDZXKSAgOiBkb2N1bWVudCBudW1iZXIgMzAxNDczLTAwMSwgMzAxNDc0LTAwNywKLSAqCTgyODAxRlJXIChJQ0g2UlcpIDogZG9jdW1lbnQgbnVtYmVyIDMwMTQ3My0wMDEsIDMwMTQ3NC0wMDcKICAqCiAgKiAgMjAwMDA3MTAgTmlscyBGYWVyYmVyCiAgKglJbml0aWFsIFZlcnNpb24gMC4wMQpAQCAtNjYsNiArNjEsMTAgQEAKICAqICAyMDA1MDgwNyBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPgogICoJMC4wOCBNYWtlIHN1cmUgdGhhdCB0aGUgd2F0Y2hkb2cgaXMgb25seSAiYXJtZWQiIHdoZW4gc3RhcnRlZC4KICAqCSAgICAgKEtlcm5lbCBCdWcgNDI1MSkKKyAqICAyMDA2MDQxNiBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPgorICoJMC4wOSBSZW1vdmUgc3VwcG9ydCBmb3IgdGhlIElDSDYsIElDSDZSLCBJQ0g2LU0sIElDSDZXIGFuZCBJQ0g2UlcgYW5kCisgKgkgICAgIElDSDcgY2hpcHNldHMuIChTZWUgS2VybmVsIEJ1ZyA2MDMxIC0gb3RoZXIgY29kZSB3aWxsIHN1cHBvcnQgdGhlc2UKKyAqCSAgICAgY2hpcHNldHMpCiAgKi8KIAogLyoKQEAgLTkwLDcgKzg5LDcgQEAKICNpbmNsdWRlICJpOHh4X3Rjby5oIgogCiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgVENPX1ZFUlNJT04gIjAuMDgiCisjZGVmaW5lIFRDT19WRVJTSU9OICIwLjA5IgogI2RlZmluZSBUQ09fTU9EVUxFX05BTUUgImk4eHggVENPIHRpbWVyIgogI2RlZmluZSBUQ09fRFJJVkVSX05BTUUgICBUQ09fTU9EVUxFX05BTUUgIiwgdiIgVENPX1ZFUlNJT04KICNkZWZpbmUgUEZYIFRDT19NT0RVTEVfTkFNRSAiOiAiCkBAIC0zOTEsMTEgKzM5MCw2IEBACiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTIsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRV8wLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzAsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMCwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKLQl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAotCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzIsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMCwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKLQl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9FU0JfMSwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAsIH0sCQkJLyogRW5kIG9mIGxpc3QgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2QuYwppbmRleCA4ZDZiMjQ5Li42ZDQ0Y2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkLmMKQEAgLTY2LDE1ICs2NiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkvKiBGb3IgZmlsZSBvcGVyYXRpb25zICovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIEZvciBpby1wb3J0IGFjY2VzcyAqLwogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CS8qIEZvciBzcGluX2xvY2svc3Bpbl91bmxvY2svLi4uICovCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogVEFTS19JTlRFUlJVUFRJQkxFLCBzZXRfY3VycmVudF9zdGF0ZSgpIGFuZCBmcmllbmRzICovCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyogRm9yIGttYWxsb2MgKi8KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIEZvciBjb3B5X3RvX3VzZXIvcHV0X3VzZXIvLi4uICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBGb3IgaW5iL291dGIvLi4uICovCiAKIC8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBXQVRDSERPR19WRVJTSU9OICIxLjE2IgotI2RlZmluZSBXQVRDSERPR19EQVRFICIwMyBKYW4gMjAwNiIKKyNkZWZpbmUgV0FUQ0hET0dfVkVSU0lPTiAiMS4xNyIKKyNkZWZpbmUgV0FUQ0hET0dfREFURSAiMTIgRmViIDIwMDYiCiAjZGVmaW5lIFdBVENIRE9HX0RSSVZFUl9OQU1FICJJU0EtUEMgV2F0Y2hkb2ciCiAjZGVmaW5lIFdBVENIRE9HX05BTUUgInBjd2QiCiAjZGVmaW5lIFBGWCBXQVRDSERPR19OQU1FICI6ICIKQEAgLTk2LDE1ICs5NCwxOSBAQAogICogUENJLVBDIFdhdGNoZG9nIGNhcmQuCiAqLwogLyogUG9ydCAxIDogQ29udHJvbCBTdGF0dXMgIzEgZm9yIHRoZSBQQyBXYXRjaGRvZyBjYXJkLCByZXZpc2lvbiBBLiAqLwotI2RlZmluZSBXRF9XRFJTVCAgICAgICAgICAgICAgICAweDAxCS8qIFByZXZpb3VzbHkgcmVzZXQgc3RhdGUgKi8KLSNkZWZpbmUgV0RfVDExMCAgICAgICAgICAgICAgICAgMHgwMgkvKiBUZW1wZXJhdHVyZSBvdmVyaGVhdCBzZW5zZSAqLwotI2RlZmluZSBXRF9IUlRCVCAgICAgICAgICAgICAgICAweDA0CS8qIEhlYXJ0YmVhdCBzZW5zZSAqLwotI2RlZmluZSBXRF9STFkyICAgICAgICAgICAgICAgICAweDA4CS8qIEV4dGVybmFsIHJlbGF5IHRyaWdnZXJlZCAqLwotI2RlZmluZSBXRF9TUkxZMiAgICAgICAgICAgICAgICAweDgwCS8qIFNvZnR3YXJlIGV4dGVybmFsIHJlbGF5IHRyaWdnZXJlZCAqLworI2RlZmluZSBXRF9XRFJTVAkJMHgwMQkvKiBQcmV2aW91c2x5IHJlc2V0IHN0YXRlICovCisjZGVmaW5lIFdEX1QxMTAJCQkweDAyCS8qIFRlbXBlcmF0dXJlIG92ZXJoZWF0IHNlbnNlICovCisjZGVmaW5lIFdEX0hSVEJUCQkweDA0CS8qIEhlYXJ0YmVhdCBzZW5zZSAqLworI2RlZmluZSBXRF9STFkyCQkJMHgwOAkvKiBFeHRlcm5hbCByZWxheSB0cmlnZ2VyZWQgKi8KKyNkZWZpbmUgV0RfU1JMWTIJCTB4ODAJLyogU29mdHdhcmUgZXh0ZXJuYWwgcmVsYXkgdHJpZ2dlcmVkICovCiAvKiBQb3J0IDEgOiBDb250cm9sIFN0YXR1cyAjMSBmb3IgdGhlIFBDIFdhdGNoZG9nIGNhcmQsIHJldmlzaW9uIEMuICovCi0jZGVmaW5lIFdEX1JFVkNfV1RSUCAgICAgICAgICAgIDB4MDEJLyogV2F0Y2hkb2cgVHJpcCBzdGF0dXMgKi8KLSNkZWZpbmUgV0RfUkVWQ19IUkJUICAgICAgICAgICAgMHgwMgkvKiBXYXRjaGRvZyBIZWFydGJlYXQgKi8KLSNkZWZpbmUgV0RfUkVWQ19UVFJQICAgICAgICAgICAgMHgwNAkvKiBUZW1wZXJhdHVyZSBUcmlwIHN0YXR1cyAqLworI2RlZmluZSBXRF9SRVZDX1dUUlAJCTB4MDEJLyogV2F0Y2hkb2cgVHJpcCBzdGF0dXMgKi8KKyNkZWZpbmUgV0RfUkVWQ19IUkJUCQkweDAyCS8qIFdhdGNoZG9nIEhlYXJ0YmVhdCAqLworI2RlZmluZSBXRF9SRVZDX1RUUlAJCTB4MDQJLyogVGVtcGVyYXR1cmUgVHJpcCBzdGF0dXMgKi8KKyNkZWZpbmUgV0RfUkVWQ19STDJBCQkweDA4CS8qIFJlbGF5IDIgYWN0aXZhdGVkIGJ5IG9uLWJvYXJkIHByb2Nlc3NvciAqLworI2RlZmluZSBXRF9SRVZDX1JMMUEJCTB4MTAJLyogUmVsYXkgMSBhY3RpdmUgKi8KKyNkZWZpbmUgV0RfUkVWQ19SMkRTCQkweDQwCS8qIFJlbGF5IDIgZGlzYWJsZSAqLworI2RlZmluZSBXRF9SRVZDX1JMWTIJCTB4ODAJLyogUmVsYXkgMiBhY3RpdmF0ZWQ/ICovCiAvKiBQb3J0IDIgOiBDb250cm9sIFN0YXR1cyAjMiAqLwogI2RlZmluZSBXRF9XRElTCQkJMHgxMAkvKiBXYXRjaGRvZyBEaXNhYmxlZCAqLwogI2RlZmluZSBXRF9FTlRQCQkJMHgyMAkvKiBXYXRjaGRvZyBFbmFibGUgVGVtcGVyYXR1cmUgVHJpcCAqLwpAQCAtMTIyLDkgKzEyNCwxNCBAQAogI2RlZmluZSBDTURfSVNBX1ZFUlNJT05fSFVORFJFVEgJMHgwMwogI2RlZmluZSBDTURfSVNBX1ZFUlNJT05fTUlOT1IJCTB4MDQKICNkZWZpbmUgQ01EX0lTQV9TV0lUQ0hfU0VUVElOR1MJCTB4MDUKKyNkZWZpbmUgQ01EX0lTQV9SRVNFVF9QQwkJMHgwNgorI2RlZmluZSBDTURfSVNBX0FSTV8wCQkJMHgwNworI2RlZmluZSBDTURfSVNBX0FSTV8zMAkJCTB4MDgKKyNkZWZpbmUgQ01EX0lTQV9BUk1fNjAJCQkweDA5CiAjZGVmaW5lIENNRF9JU0FfREVMQVlfVElNRV8yU0VDUwkweDBBCiAjZGVmaW5lIENNRF9JU0FfREVMQVlfVElNRV80U0VDUwkweDBCCiAjZGVmaW5lIENNRF9JU0FfREVMQVlfVElNRV84U0VDUwkweDBDCisjZGVmaW5lIENNRF9JU0FfUkVTRVRfUkVMQVlTCQkweDBECiAKIC8qCiAgKiBXZSBhcmUgdXNpbmcgYW4ga2VybmVsIHRpbWVyIHRvIGRvIHRoZSBwaW5naW5nIG9mIHRoZSB3YXRjaGRvZwpAQCAtMTQyLDYgKzE0OSw3IEBACiBzdGF0aWMgY2hhciBleHBlY3RfY2xvc2U7CiBzdGF0aWMgaW50IHRlbXBfcGFuaWM7CiBzdGF0aWMgc3RydWN0IHsJCQkJLyogdGhpcyBpcyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggSVNBLVBDIHdhdGNoZG9nIGNhcmQgKi8KKwljaGFyIGZ3X3Zlcl9zdHJbNl07CQkvKiBUaGUgY2FyZHMgZmlybXdhcmUgdmVyc2lvbiAqLwogCWludCByZXZpc2lvbjsJCQkvKiBUaGUgY2FyZCdzIHJldmlzaW9uICovCiAJaW50IHN1cHBvcnRzX3RlbXA7CQkvKiBXZXRoZXIgb3Igbm90IHRoZSBjYXJkIGhhcyBhIHRlbXBlcmF0dXJlIGRldmljZSAqLwogCWludCBjb21tYW5kX21vZGU7CQkvKiBXZXRoZXIgb3Igbm90IHRoZSBjYXJkIGlzIGluIGNvbW1hbmQgbW9kZSAqLwpAQCAtMTUzLDYgKzE2MSwxMyBAQAogfSBwY3dkX3ByaXZhdGU7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFFVSUVUCTAJLyogRGVmYXVsdCAqLworI2RlZmluZSBWRVJCT1NFCTEJLyogVmVyYm9zZSAqLworI2RlZmluZSBERUJVRwkyCS8qIHByaW50IGZhbmN5IHN0dWZmIHRvbyAqLworc3RhdGljIGludCBkZWJ1ZyA9IFFVSUVUOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsOiAwPVF1aWV0LCAxPVZlcmJvc2UsIDI9RGVidWcgKGRlZmF1bHQ9MCkiKTsKKwogI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgNjAJCS8qIDYwIHNlYyBkZWZhdWx0IGhlYXJ0YmVhdCAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7CiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwpAQCAtMTcyLDYgKzE4NywxMCBAQAogCWludCBjb250cm9sX3N0YXR1czsKIAlpbnQgcG9ydDAsIGxhc3RfcG9ydDA7CS8qIERvdWJsZSByZWFkIGZvciBzdGFiaWxpc2luZyAqLwogCisJaWYgKGRlYnVnID49IERFQlVHKQorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInNlbmRpbmcgZm9sbG93aW5nIGRhdGEgY21kPTB4JTAyeFxuIiwKKwkJCWNtZCk7CisKIAkvKiBUaGUgV0NNRCBiaXQgbXVzdCBiZSAxIGFuZCB0aGUgY29tbWFuZCBpcyBvbmx5IDQgYml0cyBpbiBzaXplICovCiAJY29udHJvbF9zdGF0dXMgPSAoY21kICYgMHgwRikgfCBXRF9XQ01EOwogCW91dGJfcChjb250cm9sX3N0YXR1cywgcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAyKTsKQEAgLTE4OCw2ICsyMDcsMTAgQEAKIAkJdWRlbGF5ICgyNTApOwogCX0KIAorCWlmIChkZWJ1ZyA+PSBERUJVRykKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgY21kPTB4JTAyeDogcG9ydDA9MHglMDJ4IGxhc3RfcG9ydDA9MHglMDJ4XG4iLAorCQkJY21kLCBwb3J0MCwgbGFzdF9wb3J0MCk7CisKIAlyZXR1cm4gcG9ydDA7CiB9CiAKQEAgLTIxNCw2ICsyMzcsMTAgQEAKIAlzcGluX3VubG9jaygmcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCXBjd2RfcHJpdmF0ZS5jb21tYW5kX21vZGUgPSBmb3VuZDsKIAorCWlmIChkZWJ1ZyA+PSBERUJVRykKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJjb21tYW5kX21vZGU9JWRcbiIsCisJCQkJcGN3ZF9wcml2YXRlLmNvbW1hbmRfbW9kZSk7CisKIAlyZXR1cm4oZm91bmQpOwogfQogCkBAIC0yMjYsNiArMjUzLDEwIEBACiAJc3Bpbl91bmxvY2soJnBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAogCXBjd2RfcHJpdmF0ZS5jb21tYW5kX21vZGUgPSAwOworCisJaWYgKGRlYnVnID49IERFQlVHKQorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImNvbW1hbmRfbW9kZT0lZFxuIiwKKwkJCQlwY3dkX3ByaXZhdGUuY29tbWFuZF9tb2RlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBjd2RfY2hlY2tfdGVtcGVyYXR1cmVfc3VwcG9ydCh2b2lkKQpAQCAtMjM0LDI3ICsyNjUsMjIgQEAKIAkJcGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXAgPSAxOwogfQogCi1zdGF0aWMgaW5saW5lIGNoYXIgKmdldF9maXJtd2FyZSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIHBjd2RfZ2V0X2Zpcm13YXJlKHZvaWQpCiB7CiAJaW50IG9uZSwgdGVuLCBodW5kLCBtaW5vcjsKLQljaGFyICpyZXQ7CiAKLQlyZXQgPSBrbWFsbG9jKDYsIEdGUF9LRVJORUwpOwotCWlmKHJldCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwlzdHJjcHkocGN3ZF9wcml2YXRlLmZ3X3Zlcl9zdHIsICJFUlJPUiIpOwogCiAJaWYgKHNldF9jb21tYW5kX21vZGUoKSkgewogCQlvbmUgPSBzZW5kX2lzYV9jb21tYW5kKENNRF9JU0FfVkVSU0lPTl9JTlRFR0VSKTsKIAkJdGVuID0gc2VuZF9pc2FfY29tbWFuZChDTURfSVNBX1ZFUlNJT05fVEVOVEgpOwogCQlodW5kID0gc2VuZF9pc2FfY29tbWFuZChDTURfSVNBX1ZFUlNJT05fSFVORFJFVEgpOwogCQltaW5vciA9IHNlbmRfaXNhX2NvbW1hbmQoQ01EX0lTQV9WRVJTSU9OX01JTk9SKTsKLQkJc3ByaW50ZihyZXQsICIlYy4lYyVjJWMiLCBvbmUsIHRlbiwgaHVuZCwgbWlub3IpOworCQlzcHJpbnRmKHBjd2RfcHJpdmF0ZS5md192ZXJfc3RyLCAiJWMuJWMlYyVjIiwgb25lLCB0ZW4sIGh1bmQsIG1pbm9yKTsKIAl9Ci0JZWxzZQotCQlzcHJpbnRmKHJldCwgIkVSUk9SIik7Ci0KIAl1bnNldF9jb21tYW5kX21vZGUoKTsKLQlyZXR1cm4ocmV0KTsKKworCXJldHVybjsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKHZvaWQpCkBAIC0yNzIsMTcgKzI5OCwxNSBAQAogCiBzdGF0aWMgdm9pZCBwY3dkX3Nob3dfY2FyZF9pbmZvKHZvaWQpCiB7Ci0JY2hhciAqZmlybXdhcmU7CiAJaW50IG9wdGlvbl9zd2l0Y2hlczsKIAogCS8qIEdldCBzb21lIGV4dHJhIGluZm8gZnJvbSB0aGUgaGFyZHdhcmUgKGluIGNvbW1hbmQvZGVidWcvZGlhZyBtb2RlKSAqLwogCWlmIChwY3dkX3ByaXZhdGUucmV2aXNpb24gPT0gUENXRF9SRVZJU0lPTl9BKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSVNBLVBDIFdhdGNoZG9nIChSRVYuQSkgZGV0ZWN0ZWQgYXQgcG9ydCAweCUwNHhcbiIsIHBjd2RfcHJpdmF0ZS5pb19hZGRyKTsKIAllbHNlIGlmIChwY3dkX3ByaXZhdGUucmV2aXNpb24gPT0gUENXRF9SRVZJU0lPTl9DKSB7Ci0JCWZpcm13YXJlID0gZ2V0X2Zpcm13YXJlKCk7CisJCXBjd2RfZ2V0X2Zpcm13YXJlKCk7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJJU0EtUEMgV2F0Y2hkb2cgKFJFVi5DKSBkZXRlY3RlZCBhdCBwb3J0IDB4JTA0eCAoRmlybXdhcmUgdmVyc2lvbjogJXMpXG4iLAotCQkJcGN3ZF9wcml2YXRlLmlvX2FkZHIsIGZpcm13YXJlKTsKLQkJa2ZyZWUoZmlybXdhcmUpOworCQkJcGN3ZF9wcml2YXRlLmlvX2FkZHIsIHBjd2RfcHJpdmF0ZS5md192ZXJfc3RyKTsKIAkJb3B0aW9uX3N3aXRjaGVzID0gcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCk7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6IFRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCiAJCQlvcHRpb25fc3dpdGNoZXMsCkBAIC0zNjIsNiArMzg2LDEwIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KKworCWlmIChkZWJ1ZyA+PSBWRVJCT1NFKQorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIldhdGNoZG9nIHN0YXJ0ZWRcbiIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4Niw2ICs0MTQsMTAgQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQorCisJaWYgKGRlYnVnID49IFZFUkJPU0UpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiV2F0Y2hkb2cgc3RvcHBlZFxuIik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzkzLDYgKzQyNSwxMCBAQAogewogCS8qIHVzZXIgbGFuZCBwaW5nICovCiAJcGN3ZF9wcml2YXRlLm5leHRfaGVhcnRiZWF0ID0gamlmZmllcyArIChoZWFydGJlYXQgKiBIWik7CisKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiV2F0Y2hkb2cga2VlcGFsaXZlIHNpZ25hbCBzZW5kXG4iKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00MDIsMTIgKzQzOCwxNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWhlYXJ0YmVhdCA9IHQ7CisKKwlpZiAoZGVidWcgPj0gVkVSQk9TRSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJOZXcgaGVhcnRiZWF0OiAlZFxuIiwKKwkJICAgICAgIGhlYXJ0YmVhdCk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY3dkX2dldF9zdGF0dXMoaW50ICpzdGF0dXMpCiB7Ci0JaW50IGNhcmRfc3RhdHVzOworCWludCBjb250cm9sX3N0YXR1czsKIAogCSpzdGF0dXM9MDsKIAlzcGluX2xvY2soJnBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKQEAgLTQxNSwzNyArNDU2LDM5IEBACiAJCS8qIFJldiBBIGNhcmRzIHJldHVybiBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbQogCQkgKiB0aGUgYmFzZSByZWdpc3Rlciwgd2hpY2ggaXMgdXNlZCBmb3IgdGhlCiAJCSAqIHRlbXBlcmF0dXJlIGluIG90aGVyIGNhcmRzLiAqLwotCQljYXJkX3N0YXR1cyA9IGluYihwY3dkX3ByaXZhdGUuaW9fYWRkcik7CisJCWNvbnRyb2xfc3RhdHVzID0gaW5iKHBjd2RfcHJpdmF0ZS5pb19hZGRyKTsKIAllbHNlIHsKIAkJLyogUmV2IEMgY2FyZHMgcmV0dXJuIGNhcmQgc3RhdHVzIGluIHRoZSBiYXNlCiAJCSAqIGFkZHJlc3MgKyAxIHJlZ2lzdGVyLiBBbmQgdXNlIGRpZmZlcmVudCBiaXRzCiAJCSAqIHRvIGluZGljYXRlIGEgY2FyZCBpbml0aWF0ZWQgcmVzZXQsIGFuZCBhbgogCQkgKiBvdmVyLXRlbXBlcmF0dXJlIGNvbmRpdGlvbi4gQW5kIHRoZSByZWJvb3QKIAkJICogc3RhdHVzIGNhbiBiZSByZXNldC4gKi8KLQkJY2FyZF9zdGF0dXMgPSBpbmIocGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAxKTsKKwkJY29udHJvbF9zdGF0dXMgPSBpbmIocGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAxKTsKIAl9CiAJc3Bpbl91bmxvY2soJnBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAogCWlmIChwY3dkX3ByaXZhdGUucmV2aXNpb24gPT0gUENXRF9SRVZJU0lPTl9BKSB7Ci0JCWlmIChjYXJkX3N0YXR1cyAmIFdEX1dEUlNUKQorCQlpZiAoY29udHJvbF9zdGF0dXMgJiBXRF9XRFJTVCkKIAkJCSpzdGF0dXMgfD0gV0RJT0ZfQ0FSRFJFU0VUOwogCi0JCWlmIChjYXJkX3N0YXR1cyAmIFdEX1QxMTApIHsKKwkJaWYgKGNvbnRyb2xfc3RhdHVzICYgV0RfVDExMCkgewogCQkJKnN0YXR1cyB8PSBXRElPRl9PVkVSSEVBVDsKIAkJCWlmICh0ZW1wX3BhbmljKSB7CiAJCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJUZW1wZXJhdHVyZSBvdmVyaGVhdCB0cmlwIVxuIik7CiAJCQkJa2VybmVsX3Bvd2VyX29mZigpOworCQkJCS8qIG9yIHNob3VsZCB3ZSBqdXN0IGRvIGE6IHBhbmljKFBGWCAiVGVtcGVyYXR1cmUgb3ZlcmhlYXQgdHJpcCFcbiIpOyAqLwogCQkJfQogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKGNhcmRfc3RhdHVzICYgV0RfUkVWQ19XVFJQKQorCQlpZiAoY29udHJvbF9zdGF0dXMgJiBXRF9SRVZDX1dUUlApCiAJCQkqc3RhdHVzIHw9IFdESU9GX0NBUkRSRVNFVDsKIAotCQlpZiAoY2FyZF9zdGF0dXMgJiBXRF9SRVZDX1RUUlApIHsKKwkJaWYgKGNvbnRyb2xfc3RhdHVzICYgV0RfUkVWQ19UVFJQKSB7CiAJCQkqc3RhdHVzIHw9IFdESU9GX09WRVJIRUFUOwogCQkJaWYgKHRlbXBfcGFuaWMpIHsKIAkJCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlRlbXBlcmF0dXJlIG92ZXJoZWF0IHRyaXAhXG4iKTsKIAkJCQlrZXJuZWxfcG93ZXJfb2ZmKCk7CisJCQkJLyogb3Igc2hvdWxkIHdlIGp1c3QgZG8gYTogcGFuaWMoUEZYICJUZW1wZXJhdHVyZSBvdmVyaGVhdCB0cmlwIVxuIik7ICovCiAJCQl9CiAJCX0KIAl9CkBAIC00NTUsOSArNDk4LDI1IEBACiAKIHN0YXRpYyBpbnQgcGN3ZF9jbGVhcl9zdGF0dXModm9pZCkKIHsKKwlpbnQgY29udHJvbF9zdGF0dXM7CisKIAlpZiAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQykgewogCQlzcGluX2xvY2soJnBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKLQkJb3V0Yl9wKDB4MDAsIHBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7IC8qIGNsZWFyIHJlc2V0IHN0YXR1cyAqLworCisJCWlmIChkZWJ1ZyA+PSBWRVJCT1NFKQorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImNsZWFyaW5nIHdhdGNoZG9nIHRyaXAgc3RhdHVzXG4iKTsKKworCQljb250cm9sX3N0YXR1cyA9IGluYl9wKHBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CisKKwkJaWYgKGRlYnVnID49IERFQlVHKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInN0YXR1cyB3YXM6IDB4JTAyeFxuIiwgY29udHJvbF9zdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzZW5kaW5nOiAweCUwMnhcbiIsCisJCQkJKGNvbnRyb2xfc3RhdHVzICYgV0RfUkVWQ19SMkRTKSk7CisJCX0KKworCQkvKiBjbGVhciByZXNldCBzdGF0dXMgJiBLZWVwIFJlbGF5IDIgZGlzYWJsZSBzdGF0ZSBhcyBpdCBpcyAqLworCQlvdXRiX3AoKGNvbnRyb2xfc3RhdHVzICYgV0RfUkVWQ19SMkRTKSwgcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAxKTsKKwogCQlzcGluX3VubG9jaygmcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ4MSw2ICs1NDAsMTEgQEAKIAkqdGVtcGVyYXR1cmUgPSAoKGluYihwY3dkX3ByaXZhdGUuaW9fYWRkcikpICogOSAvIDUpICsgMzI7CiAJc3Bpbl91bmxvY2soJnBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAorCWlmIChkZWJ1ZyA+PSBERUJVRykgeworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInRlbXBlcmF0dXJlIGlzOiAlZCBGXG4iLAorCQkJKnRlbXBlcmF0dXJlKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTk5LDYgKzY2Myw4IEBACiBzdGF0aWMgaW50IHBjd2Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJm9wZW5fYWxsb3dlZCkgKSB7CisJCWlmIChkZWJ1ZyA+PSBWRVJCT1NFKQorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQXR0ZW1wdCB0byBvcGVuIGFscmVhZHkgb3BlbmVkIGRldmljZS5cbiIpOwogCQlhdG9taWNfaW5jKCAmb3Blbl9hbGxvd2VkICk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtOTIyLDcgKzk4OCw4IEBACiB7CiAJaWYgKHBjd2RfcHJpdmF0ZS5pb19hZGRyKQogCQlwY3dhdGNoZG9nX2V4aXQoKTsKLQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiV2F0Y2hkb2cgTW9kdWxlIFVubG9hZGVkLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KHBjd2RfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYwppbmRleCAyNzAwYzVjLi4zZmRmZGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYwpAQCAtNzA1LDcgKzcwNSw4IEBACiBlcnJfb3V0X3VucmVnaXN0ZXJfcmVib290OgogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ1c2JfcGN3ZF9ub3RpZmllcik7CiBlcnJvcjoKLQl1c2JfcGN3ZF9kZWxldGUgKHVzYl9wY3dkKTsKKwlpZiAodXNiX3Bjd2QpCisJCXVzYl9wY3dkX2RlbGV0ZSh1c2JfcGN3ZCk7CiAJdXNiX3Bjd2RfZGV2aWNlID0gTlVMTDsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwppbmRleCA5ZGM1NDczLi4xZWEwNGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpAQCAtNDIzLDYgKzQyMywxMiBAQAogCWlmICh0bXJfYXRib290ICYmIHN0YXJ0ZWQgPT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiU3RhcnRpbmcgV2F0Y2hkb2cgVGltZXJcbiIpOwogCQlzM2MyNDEwd2R0X3N0YXJ0KCk7CisJfSBlbHNlIGlmICghdG1yX2F0Ym9vdCkgeworCQkvKiBpZiB3ZSdyZSBub3QgZW5hYmxpbmcgdGhlIHdhdGNoZG9nLCB0aGVuIGVuc3VyZSBpdCBpcworCQkgKiBkaXNhYmxlZCBpZiBpdCBoYXMgYmVlbiBsZWZ0IHJ1bm5pbmcgZnJvbSB0aGUgYm9vdGxvYWRlcgorCQkgKiBvciBvdGhlciBzb3VyY2UgKi8KKworCQlzM2MyNDEwd2R0X3N0b3AoKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYzEyMDB3ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYzEyMDB3ZHQuYwppbmRleCA1MTVjZTc1Li4yMGI4OGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjMTIwMHdkdC5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKGJhbm5lcik7CisJcHJpbnRrKCIlc1xuIiwgYmFubmVyKTsKIAogCXNwaW5fbG9ja19pbml0KCZzYzEyMDB3ZHRfbG9jayk7CiAJc2VtYV9pbml0KCZvcGVuX3NlbSwgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCmluZGV4IDYwYzliZTkuLjJjYzcxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCkBAIC05OSw3ICs5OSw3IEBACiAJICBFbmFibGUgdGhpcyBjcHVmcmVxIGdvdmVybm9yIHdoZW4geW91IGVpdGhlciB3YW50IHRvIHNldCB0aGUKIAkgIENQVSBmcmVxdWVuY3kgbWFudWFsbHkgb3Igd2hlbiBhbiB1c2Vyc3BhY2UgcHJvZ3JhbSBzaGFsbAogCSAgYmUgYWJsZSB0byBzZXQgdGhlIENQVSBkeW5hbWljYWxseSwgbGlrZSBvbiBMQVJUIAotCSAgPGh0dHA6Ly93d3cubGFydC50dWRlbGZ0Lm5sLz4KKwkgIDxodHRwOi8vd3d3LmxhcnRtYWtlci5ubC8+LgogCiAJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCA5YjZhZTdkLi4yOWIyZmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTMxOSw3ICszMTksNiBAQAogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfcGFyc2VfZ292ZXJub3IpOwogCiAKIC8qIGRyaXZlcnMvYmFzZS9jcHUuYyAqLwpAQCAtMzQ2LDYgKzM0NSw4IEBACiBzaG93X29uZShzY2FsaW5nX21heF9mcmVxLCBtYXgpOwogc2hvd19vbmUoc2NhbGluZ19jdXJfZnJlcSwgY3VyKTsKIAorc3RhdGljIGludCBfX2NwdWZyZXFfc2V0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKKwogLyoqCiAgKiBjcHVmcmVxX3Blcl9jcHVfYXR0cl93cml0ZSgpIC8gc3RvcmVfIyNmaWxlX25hbWUoKSAtIHN5c2ZzIHdyaXRlIGFjY2VzcwogICovCkBAIC0zNjQsNyArMzY1LDEwIEBACiAJaWYgKHJldCAhPSAxKQkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXQgPSBjcHVmcmVxX3NldF9wb2xpY3koJm5ld19wb2xpY3kpOwkJCQlcCisJbXV0ZXhfbG9jaygmcG9saWN5LT5sb2NrKTsJCQkJCVwKKwlyZXQgPSBfX2NwdWZyZXFfc2V0X3BvbGljeShwb2xpY3ksICZuZXdfcG9saWN5KTsJCVwKKwlwb2xpY3ktPnVzZXJfcG9saWN5Lm9iamVjdCA9IHBvbGljeS0+b2JqZWN0OwkJCVwKKwltdXRleF91bmxvY2soJnBvbGljeS0+bG9jayk7CQkJCQlcCiAJCQkJCQkJCQlcCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwkJCQkJXAogfQpAQCAtNDIwLDcgKzQyNCwxNSBAQAogCWlmIChjcHVmcmVxX3BhcnNlX2dvdmVybm9yKHN0cl9nb3Zlcm5vciwgJm5ld19wb2xpY3kucG9saWN5LCAmbmV3X3BvbGljeS5nb3Zlcm5vcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KCZuZXdfcG9saWN5KTsKKwkvKiBEbyBub3QgdXNlIGNwdWZyZXFfc2V0X3BvbGljeSBoZXJlIG9yIHRoZSB1c2VyX3BvbGljeS5tYXgKKwkgICB3aWxsIGJlIHdyb25nbHkgb3ZlcnJpZGRlbiAqLworCW11dGV4X2xvY2soJnBvbGljeS0+bG9jayk7CisJcmV0ID0gX19jcHVmcmVxX3NldF9wb2xpY3kocG9saWN5LCAmbmV3X3BvbGljeSk7CisKKwlwb2xpY3ktPnVzZXJfcG9saWN5LnBvbGljeSA9IHBvbGljeS0+cG9saWN5OworCXBvbGljeS0+dXNlcl9wb2xpY3kuZ292ZXJub3IgPSBwb2xpY3ktPmdvdmVybm9yOworCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKKwogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KIApAQCAtNjg1LDcgKzY5Nyw3IEBACiAJCWlmICghY3B1X29ubGluZShqKSkKIAkJCWNvbnRpbnVlOwogCi0JCWRwcmludGsoIkNQVSBhbHJlYWR5IG1hbmFnZWQsIGFkZGluZyBsaW5rXG4iKTsKKwkJZHByaW50aygiQ1BVICV1IGFscmVhZHkgbWFuYWdlZCwgYWRkaW5nIGxpbmtcbiIsIGopOwogCQljcHVmcmVxX2NwdV9nZXQoY3B1KTsKIAkJY3B1X3N5c19kZXYgPSBnZXRfY3B1X3N5c2RldihqKTsKIAkJc3lzZnNfY3JlYXRlX2xpbmsoJmNwdV9zeXNfZGV2LT5rb2JqLCAmcG9saWN5LT5rb2JqLApAQCAtNjk1LDkgKzcwNyw4IEBACiAJcG9saWN5LT5nb3Zlcm5vciA9IE5VTEw7IC8qIHRvIGFzc3VyZSB0aGF0IHRoZSBzdGFydGluZyBzZXF1ZW5jZSBpcwogCQkJCSAgKiBydW4gaW4gY3B1ZnJlcV9zZXRfcG9saWN5ICovCiAJbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOwotCQorCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5ICovCi0JCiAJcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KCZuZXdfcG9saWN5KTsKIAlpZiAocmV0KSB7CiAJCWRwcmludGsoInNldHRpbmcgcG9saWN5IGZhaWxlZFxuIik7CkBAIC03MDcsNyArNzE4LDcgQEAKIAltb2R1bGVfcHV0KGNwdWZyZXFfZHJpdmVyLT5vd25lcik7CiAJZHByaW50aygiaW5pdGlhbGl6YXRpb24gY29tcGxldGVcbiIpOwogCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOwotCQorCiAJcmV0dXJuIDA7CiAKIApAQCAtMTQ4Niw3ICsxNDk3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3B1ZnJlcV91cGRhdGVfcG9saWN5KTsKIAotc3RhdGljIGludCBfX2NwdWluaXQgY3B1ZnJlcV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IGNwdWZyZXFfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKaW5kZXggMDM3ZjZiZi4uZTA3YTM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKQEAgLTE3Niw4ICsxNzYsNyBAQAogCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwgaW5wdXQgPCAwIHx8Ci0JCQlpbnB1dCA8PSBkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCkgeworCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fCBpbnB1dCA8PSBkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCkgewogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE5Niw4ICsxOTUsNyBAQAogCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwgaW5wdXQgPCAwIHx8Ci0JCQlpbnB1dCA+PSBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKKwlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwgaW5wdXQgPj0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSB7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKaW5kZXggOTU2ZDEyMS4uM2U2ZmZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCkBAIC03NCw2ICs3NCw4IEBACiBzdGF0aWMgREVGSU5FX01VVEVYIChkYnNfbXV0ZXgpOwogc3RhdGljIERFQ0xBUkVfV09SSwkoZGJzX3dvcmssIGRvX2Ric190aW1lciwgTlVMTCk7CiAKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGJzX3dvcmtxOworCiBzdHJ1Y3QgZGJzX3R1bmVycyB7CiAJdW5zaWduZWQgaW50IHNhbXBsaW5nX3JhdGU7CiAJdW5zaWduZWQgaW50IHNhbXBsaW5nX2Rvd25fZmFjdG9yOwpAQCAtMzY0LDIzICszNjYsMjkgQEAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKIAkJZGJzX2NoZWNrX2NwdShpKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRic193b3JrLAotCQkJdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKSk7CisJcXVldWVfZGVsYXllZF93b3JrKGRic193b3JrcSwgJmRic193b3JrLAorCQkJICAgdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKSk7CiAJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2luaXQodm9pZCkKIHsKIAlJTklUX1dPUksoJmRic193b3JrLCBkb19kYnNfdGltZXIsIE5VTEwpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGJzX3dvcmssCi0JCQl1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpKTsKKwlpZiAoIWRic193b3JrcSkKKwkJZGJzX3dvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm9uZGVtYW5kIik7CisJaWYgKCFkYnNfd29ya3EpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbmRlbWFuZDogQ2Fubm90IGluaXRpYWxpemUga2VybmVsIHRocmVhZFxuIik7CisJCXJldHVybjsKKwl9CisJcXVldWVfZGVsYXllZF93b3JrKGRic193b3JrcSwgJmRic193b3JrLAorCQkJICAgdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKSk7CiAJcmV0dXJuOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQodm9pZCkKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZkYnNfd29yayk7Ci0JcmV0dXJuOworCWlmIChkYnNfd29ya3EpCisJCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmtxdWV1ZShkYnNfd29ya3EsICZkYnNfd29yayk7CiB9CiAKIHN0YXRpYyBpbnQgY3B1ZnJlcV9nb3Zlcm5vcl9kYnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCkBAIC00ODksOCArNDk3LDEyIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcHVmcmVxX2dvdl9kYnNfZXhpdCh2b2lkKQogewotCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzY2hlZHVsZWQgd29yayBpcyBpbmRlZWQgbm90IHJ1bm5pbmcgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzY2hlZHVsZWQgd29yayBpcyBpbmRlZWQgbm90IHJ1bm5pbmcuCisJICAgQXNzdW1lcyB0aGUgdGltZXIgaGFzIGJlZW4gY2FuY2VsbGVkIGZpcnN0LiAqLworCWlmIChkYnNfd29ya3EpIHsKKwkJZmx1c2hfd29ya3F1ZXVlKGRic193b3JrcSk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGRic193b3JrcSk7CisJfQogCiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKCZjcHVmcmVxX2dvdl9kYnMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCBiNTgyZDBjLi40ZjA4OTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNzEsNyArNzEsNyBAQAogCiBjb25maWcgRURBQ19FNzUyWAogCXRyaXN0YXRlICJJbnRlbCBlNzUyeCAoZTc1MjAsIGU3NTI1LCBlNzMyMCkiCi0JZGVwZW5kcyBvbiBFREFDX01NX0VEQUMgJiYgUENJICYmIFg4NgorCWRlcGVuZHMgb24gRURBQ19NTV9FREFDICYmIFBDSSAmJiBYODYgJiYgSE9UUExVRwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVjdGlvbiBvbiB0aGUgSW50ZWwKIAkgIEU3NTIwLCBFNzUyNSwgRTczMjAgc2VydmVyIGNoaXBzZXRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9lNzUyeF9lZGFjLmMKaW5kZXggNjY1NzJjNS4uZmNlMzE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvZTc1MnhfZWRhYy5jCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImVkYWNfbWMuaCIKIAorc3RhdGljIGludCBmb3JjZV9mdW5jdGlvbl91bmhpZGU7CisKICNkZWZpbmUgZTc1MnhfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgXAogCWVkYWNfcHJpbnRrKGxldmVsLCAiZTc1MngiLCBmbXQsICMjYXJnKQogCkBAIC03ODIsOCArNzg0LDE2IEBACiAJZGVidWdmMCgiJXMoKTogbWNpXG4iLCBfX2Z1bmNfXyk7CiAJZGVidWdmMCgiU3RhcnRpbmcgUHJvYmUxXG4iKTsKIAotCS8qIGVuYWJsZSBkZXZpY2UgMCBmdW5jdGlvbiAxICovCisJLyogY2hlY2sgdG8gc2VlIGlmIGRldmljZSAwIGZ1bmN0aW9uIDEgaXMgZW5hYmxlZDsgaWYgaXQgaXNuJ3QsIHdlCisJICogYXNzdW1lIHRoZSBCSU9TIGhhcyByZXNlcnZlZCBpdCBmb3IgYSByZWFzb24gYW5kIGlzIGV4cGVjdGluZworCSAqIGV4Y2x1c2l2ZSBhY2Nlc3MsIHdlIHRha2UgY2FyZSBub3QgdG8gdmlvbGF0ZSB0aGF0IGFzc3VtcHRpb24gYW5kCisJICogZmFpbCB0aGUgcHJvYmUuICovCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgRTc1MlhfREVWUFJFUzEsICZzdGF0OCk7CisJaWYgKCFmb3JjZV9mdW5jdGlvbl91bmhpZGUgJiYgIShzdGF0OCAmICgxIDw8IDUpKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDb250YWN0IHlvdXIgQklPUyB2ZW5kb3IgdG8gc2VlIGlmIHRoZSAiCisJCQkiRTc1MnggZXJyb3IgcmVnaXN0ZXJzIGNhbiBiZSBzYWZlbHkgdW4taGlkZGVuXG4iKTsKKwkJZ290byBmYWlsOworCX0KIAlzdGF0OCB8PSAoMSA8PCA1KTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgRTc1MlhfREVWUFJFUzEsIHN0YXQ4KTsKIApAQCAtMTA2MywzICsxMDczLDggQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkxpbnV4IE5ldHdvcnggKGh0dHA6Ly9sbnhpLmNvbSkgVG9tIFppbW1lcm1hblxuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1DIHN1cHBvcnQgZm9yIEludGVsIGU3NTJ4IG1lbW9yeSBjb250cm9sbGVycyIpOworCittb2R1bGVfcGFyYW0oZm9yY2VfZnVuY3Rpb25fdW5oaWRlLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9mdW5jdGlvbl91bmhpZGUsICJpZiBCSU9TIHNldHMgRGV2MDpGdW4xIHVwIGFzIGhpZGRlbjoiCisiIDE9Zm9yY2UgdW5oaWRlIGFuZCBob3BlIEJJT1MgZG9lc24ndCBmaWdodCBkcml2ZXIgZm9yIERldjA6RnVuMSBhY2Nlc3MiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggODU0Mjk5Ny4uOThlMzk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0xLDcgKzEsOCBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KICMKLW9iai0kKENPTkZJR19FREQpICAgICAgICAgICAgIAkrPSBlZGQubworb2JqLSQoQ09ORklHX0RNSSkJCSs9IGRtaV9zY2FuLm8KK29iai0kKENPTkZJR19FREQpCQkrPSBlZGQubwogb2JqLSQoQ09ORklHX0VGSV9WQVJTKQkJKz0gZWZpdmFycy5vCiBvYmotJChDT05GSUdfRUZJX1BDRFApCQkrPSBwY2RwLm8KIG9iai0kKENPTkZJR19ERUxMX1JCVSkgICAgICAgICAgKz0gZGVsbF9yYnUubwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9kbWlfc2Nhbi5jIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvZG1pX3NjYW4uYwpyZW5hbWUgdG8gZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCmluZGV4IDVlZmNlZWIuLjk0OGJkN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvZG1pX3NjYW4uYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAkJCWVsc2UKIAkJCQlwcmludGsoS0VSTl9FUlIgImRtaV9zdHJpbmc6IG91dCBvZiBtZW1vcnkuXG4iKTsKIAkJfQotIAl9CisJfQogCiAJcmV0dXJuIHN0cjsKIH0KQEAgLTQxLDcgKzQxLDcgQEAKIHsKIAl1OCAqYnVmLCAqZGF0YTsKIAlpbnQgaSA9IDA7Ci0JCQorCiAJYnVmID0gZG1pX2lvcmVtYXAoYmFzZSwgbGVuKTsKIAlpZiAoYnVmID09IE5VTEwpCiAJCXJldHVybiAtMTsKQEAgLTQ5LDkgKzQ5LDkgQEAKIAlkYXRhID0gYnVmOwogCiAJLyoKLSAJICoJU3RvcCB3aGVuIHdlIHNlZSBhbGwgdGhlIGl0ZW1zIHRoZSB0YWJsZSBjbGFpbWVkIHRvIGhhdmUKLSAJICoJT1Igd2UgcnVuIG9mZiB0aGUgZW5kIG9mIHRoZSB0YWJsZSAoYWxzbyBoYXBwZW5zKQotIAkgKi8KKwkgKglTdG9wIHdoZW4gd2Ugc2VlIGFsbCB0aGUgaXRlbXMgdGhlIHRhYmxlIGNsYWltZWQgdG8gaGF2ZQorCSAqCU9SIHdlIHJ1biBvZmYgdGhlIGVuZCBvZiB0aGUgdGFibGUgKGFsc28gaGFwcGVucykKKwkgKi8KIAl3aGlsZSAoKGkgPCBudW0pICYmIChkYXRhIC0gYnVmICsgc2l6ZW9mKHN0cnVjdCBkbWlfaGVhZGVyKSkgPD0gbGVuKSB7CiAJCXN0cnVjdCBkbWlfaGVhZGVyICpkbSA9IChzdHJ1Y3QgZG1pX2hlYWRlciAqKWRhdGE7CiAJCS8qCkBAIC03NSw3ICs3NSw3IEBACiB7CiAJdTggc3VtID0gMDsKIAlpbnQgYTsKLQkKKwogCWZvciAoYSA9IDA7IGEgPCAxNTsgYSsrKQogCQlzdW0gKz0gYnVmW2FdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggNzYzNmMxYS4uMTY1OWY2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBIREFQU19MT1dfUE9SVAkJMHgxNjAwCS8qIGZpcnN0IHBvcnQgdXNlZCBieSBoZGFwcyAqLwpAQCAtNzEsMTAgKzcwLDEwIEBACiBzdGF0aWMgaW50IHJlc3RfeDsKIHN0YXRpYyBpbnQgcmVzdF95OwogCi1zdGF0aWMgREVGSU5FX01VVEVYKGhkYXBzX211dGV4KTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGhkYXBzX3NlbSk7CiAKIC8qCi0gKiBfX2dldF9sYXRjaCAtIEdldCB0aGUgdmFsdWUgZnJvbSBhIGdpdmVuIHBvcnQuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19tdXRleC4KKyAqIF9fZ2V0X2xhdGNoIC0gR2V0IHRoZSB2YWx1ZSBmcm9tIGEgZ2l2ZW4gcG9ydC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwogc3RhdGljIGlubGluZSB1OCBfX2dldF9sYXRjaCh1MTYgcG9ydCkKIHsKQEAgLTgzLDcgKzgyLDcgQEAKIAogLyoKICAqIF9fY2hlY2tfbGF0Y2ggLSBDaGVjayBhIHBvcnQgbGF0Y2ggZm9yIGEgZ2l2ZW4gdmFsdWUuICBSZXR1cm5zIHplcm8gaWYgdGhlCi0gKiBwb3J0IGNvbnRhaW5zIHRoZSBnaXZlbiB2YWx1ZS4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX211dGV4LgorICogcG9ydCBjb250YWlucyB0aGUgZ2l2ZW4gdmFsdWUuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fY2hlY2tfbGF0Y2godTE2IHBvcnQsIHU4IHZhbCkKIHsKQEAgLTk0LDcgKzkzLDcgQEAKIAogLyoKICAqIF9fd2FpdF9sYXRjaCAtIFdhaXQgdXAgdG8gMTAwdXMgZm9yIGEgcG9ydCBsYXRjaCB0byBnZXQgYSBjZXJ0YWluIHZhbHVlLAotICogcmV0dXJuaW5nIHplcm8gaWYgdGhlIHZhbHVlIGlzIG9idGFpbmVkLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXV0ZXguCisgKiByZXR1cm5pbmcgemVybyBpZiB0aGUgdmFsdWUgaXMgb2J0YWluZWQuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCiAgKi8KIHN0YXRpYyBpbnQgX193YWl0X2xhdGNoKHUxNiBwb3J0LCB1OCB2YWwpCiB7CkBAIC0xMTEsNyArMTEwLDcgQEAKIAogLyoKICAqIF9fZGV2aWNlX3JlZnJlc2ggLSByZXF1ZXN0IGEgcmVmcmVzaCBmcm9tIHRoZSBhY2NlbGVyb21ldGVyLiAgRG9lcyBub3Qgd2FpdAotICogZm9yIHJlZnJlc2ggdG8gY29tcGxldGUuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19tdXRleC4KKyAqIGZvciByZWZyZXNoIHRvIGNvbXBsZXRlLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgogICovCiBzdGF0aWMgdm9pZCBfX2RldmljZV9yZWZyZXNoKHZvaWQpCiB7CkBAIC0xMjUsNyArMTI0LDcgQEAKIC8qCiAgKiBfX2RldmljZV9yZWZyZXNoX3N5bmMgLSByZXF1ZXN0IGEgc3luY2hyb25vdXMgcmVmcmVzaCBmcm9tIHRoZQogICogYWNjZWxlcm9tZXRlci4gIFdlIHdhaXQgZm9yIHRoZSByZWZyZXNoIHRvIGNvbXBsZXRlLiAgUmV0dXJucyB6ZXJvIGlmCi0gKiBzdWNjZXNzZnVsIGFuZCBub256ZXJvIG9uIGVycm9yLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXV0ZXguCisgKiBzdWNjZXNzZnVsIGFuZCBub256ZXJvIG9uIGVycm9yLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgogICovCiBzdGF0aWMgaW50IF9fZGV2aWNlX3JlZnJlc2hfc3luYyh2b2lkKQogewpAQCAtMTM1LDcgKzEzNCw3IEBACiAKIC8qCiAgKiBfX2RldmljZV9jb21wbGV0ZSAtIGluZGljYXRlIHRvIHRoZSBhY2NlbGVyb21ldGVyIHRoYXQgd2UgYXJlIGRvbmUgcmVhZGluZwotICogZGF0YSwgYW5kIHRoZW4gaW5pdGlhdGUgYW4gYXN5bmMgcmVmcmVzaC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX211dGV4LgorICogZGF0YSwgYW5kIHRoZW4gaW5pdGlhdGUgYW4gYXN5bmMgcmVmcmVzaC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2aWNlX2NvbXBsZXRlKHZvaWQpCiB7CkBAIC0xNTMsNyArMTUyLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmaGRhcHNfbXV0ZXgpOworCWRvd24oJmhkYXBzX3NlbSk7CiAKIAkvKiBkbyBhIHN5bmMgcmVmcmVzaCAtLSB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB3ZSByZWFkIGZyZXNoIGRhdGEgKi8KIAlyZXQgPSBfX2RldmljZV9yZWZyZXNoX3N5bmMoKTsKQEAgLTE2NCw3ICsxNjMsNyBAQAogCV9fZGV2aWNlX2NvbXBsZXRlKCk7CiAKIG91dDoKLQltdXRleF91bmxvY2soJmhkYXBzX211dGV4KTsKKwl1cCgmaGRhcHNfc2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTksOSArMTk4LDkgQEAKIHsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmaGRhcHNfbXV0ZXgpOworCWRvd24oJmhkYXBzX3NlbSk7CiAJcmV0ID0gX19oZGFwc19yZWFkX3BhaXIocG9ydDEsIHBvcnQyLCB2YWwxLCB2YWwyKTsKLQltdXRleF91bmxvY2soJmhkYXBzX211dGV4KTsKKwl1cCgmaGRhcHNfc2VtKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTQsNyArMjEzLDcgQEAKIHsKIAlpbnQgdG90YWwsIHJldCA9IC1FTlhJTzsKIAotCW11dGV4X2xvY2soJmhkYXBzX211dGV4KTsKKwlkb3duKCZoZGFwc19zZW0pOwogCiAJb3V0YigweDEzLCAweDE2MTApOwogCW91dGIoMHgwMSwgMHgxNjFmKTsKQEAgLTI4MCw3ICsyNzksNyBAQAogCX0KIAogb3V0OgotCW11dGV4X3VubG9jaygmaGRhcHNfbXV0ZXgpOworCXVwKCZoZGFwc19zZW0pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxNCw3ICszMTMsNyBAQAogfTsKIAogLyoKLSAqIGhkYXBzX2NhbGlicmF0ZSAtIFNldCBvdXIgInJlc3RpbmciIHZhbHVlcy4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX211dGV4LgorICogaGRhcHNfY2FsaWJyYXRlIC0gU2V0IG91ciAicmVzdGluZyIgdmFsdWVzLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgogICovCiBzdGF0aWMgdm9pZCBoZGFwc19jYWxpYnJhdGUodm9pZCkKIHsKQEAgLTMyNiw3ICszMjUsNyBAQAogCWludCB4LCB5OwogCiAJLyogQ2Fubm90IHNsZWVwLiAgVHJ5IG5vbmJsb2NraW5nbHkuICBJZiB3ZSBmYWlsLCB0cnkgYWdhaW4gbGF0ZXIuICovCi0JaWYgKCFtdXRleF90cnlsb2NrKCZoZGFwc19tdXRleCkpIHsKKwlpZiAoZG93bl90cnlsb2NrKCZoZGFwc19zZW0pKSB7CiAJCW1vZF90aW1lcigmaGRhcHNfdGltZXIsamlmZmllcyArIEhEQVBTX1BPTExfUEVSSU9EKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM0MSw3ICszNDAsNyBAQAogCW1vZF90aW1lcigmaGRhcHNfdGltZXIsIGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRCk7CiAKIG91dDoKLQltdXRleF91bmxvY2soJmhkYXBzX211dGV4KTsKKwl1cCgmaGRhcHNfc2VtKTsKIH0KIAogCkBAIC00MjEsOSArNDIwLDkgQEAKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JbXV0ZXhfbG9jaygmaGRhcHNfbXV0ZXgpOworCWRvd24oJmhkYXBzX3NlbSk7CiAJaGRhcHNfY2FsaWJyYXRlKCk7Ci0JbXV0ZXhfdW5sb2NrKCZoZGFwc19tdXRleCk7CisJdXAoJmhkYXBzX3NlbSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC01MTAsMTIgKzUwOSwyMiBAQAogCX0JCQkJCQlcCiB9CiAKKyNkZWZpbmUgSERBUFNfRE1JX01BVENIX0xFTk9WTyhtb2RlbCkgICB7ICAgICAgICAgICAgICAgXAorICAgICAgICAuaWRlbnQgPSAiTGVub3ZvICIgbW9kZWwsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5jYWxsYmFjayA9IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQsICAgICAgICAgICAgIFwKKyAgICAgICAgLm1hdGNoZXMgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiTEVOT1ZPIiksICBcCisgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sIG1vZGVsKSAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCiBzdGF0aWMgaW50IF9faW5pdCBoZGFwc19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAogCS8qIE5vdGUgdGhhdCBETUlfTUFUQ0goLi4uLCJUaGlua1BhZCBUNDIiKSB3aWxsIG1hdGNoICJUaGlua1BhZCBUNDJwIiAqLwogCXN0cnVjdCBkbWlfc3lzdGVtX2lkIGhkYXBzX3doaXRlbGlzdFtdID0geworCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBIIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIlRoaW5rUGFkIFI1MHAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgUjUwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFI1MSIpLApAQCAtNTI1LDE1ICs1MzQsMTcgQEAKIAkJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiVGhpbmtQYWQgVDQycCIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBUNDIiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQzIiksCisJCUhEQVBTX0RNSV9NQVRDSF9MRU5PVk8oIlRoaW5rUGFkIFQ2MHAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFg0MSBUYWJsZXQiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQxIiksCisJCUhEQVBTX0RNSV9NQVRDSF9MRU5PVk8oIlRoaW5rUGFkIFg2MCIpLAogCQl7IC5pZGVudCA9IE5VTEwgfQogCX07CiAKIAlpZiAoIWRtaV9jaGVja19zeXN0ZW0oaGRhcHNfd2hpdGVsaXN0KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZGFwczogc3VwcG9ydGVkIGxhcHRvcCBub3QgZm91bmQhXG4iKTsKLQkJcmV0ID0gLUVOWElPOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKaW5kZXggNjg2NWM2NC4uOTU4NjAyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJICAgYmFuay4gKi8KIAlpZiAoa2luZCA8IDApIHsKIAkJaWYgKHc4Mzc5MmRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5MkRfUkVHX0NPTkZJRykgJiAweDgwKSB7Ci0JCQlkZXZfd2FybihkZXYsICJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgM1xuIik7CisJCQlkZXZfZGJnKGRldiwgIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAxXG4iKTsKIAkJCWdvdG8gRVJST1IxOwogCQl9CiAJCXZhbDEgPSB3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTJEX1JFR19CQU5LKTsKQEAgLTExNzAsNiArMTE3MCw3IEBACiAJCWlmICghKHZhbDEgJiAweDA3KSkgeyAgLyogaXMgQmFuazAgKi8KIAkJCWlmICgoKCEodmFsMSAmIDB4ODApKSAmJiAodmFsMiAhPSAweGEzKSkgfHwKIAkJCSAgICAgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgIT0gMHg1YykpKSB7CisJCQkJZGV2X2RiZyhkZXYsICJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgMlxuIik7CiAJCQkJZ290byBFUlJPUjE7CiAJCQl9CiAJCX0KQEAgLTExNzcsNyArMTE3OCw3IEBACiAJCSAgIHNob3VsZCBtYXRjaCAqLwogCQlpZiAodzgzNzkyZF9yZWFkX3ZhbHVlKGNsaWVudCwKIAkJCQkJVzgzNzkyRF9SRUdfSTJDX0FERFIpICE9IGFkZHJlc3MpIHsKLQkJCWRldl93YXJuKGRldiwgIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCA1XG4iKTsKKwkJCWRldl9kYmcoZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDNcbiIpOwogCQkJZ290byBFUlJPUjE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDA4OWM2ZjUuLmQ2ZDQ0OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0yODYsNyArMjg2LDEwIEBACiAJICBUaGlzIGRyaXZlciBpcyBhIHJlcGxhY2VtZW50IGZvciAoYW5kIHdhcyBpbnNwaXJlZCBieSkgYW4gb2xkZXIKIAkgIGRyaXZlciBuYW1lZCBpMmMtcGhpbGlwcy1wYXIuICBUaGUgbmV3IGRyaXZlciBzdXBwb3J0cyBtb3JlIGRldmljZXMsCiAJICBhbmQgbWFrZXMgaXQgZWFzaWVyIHRvIGFkZCBzdXBwb3J0IGZvciBuZXcgZGV2aWNlcy4KLQkgIAorCisJICBBbiBhZGFwdGVyIHR5cGUgcGFyYW1ldGVyIGlzIG5vdyBtYW5kYXRvcnkuICBQbGVhc2UgcmVhZCB0aGUgZmlsZQorCSAgRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0IGZvciBkZXRhaWxzLgorCiAJICBBbm90aGVyIGRyaXZlciBleGlzdHMsIG5hbWVkIGkyYy1wYXJwb3J0LWxpZ2h0LCB3aGljaCBkb2Vzbid0IGRlcGVuZAogCSAgb24gdGhlIHBhcnBvcnQgZHJpdmVyLiAgVGhpcyBpcyBtZWFudCBmb3IgZW1iZWRkZWQgc3lzdGVtcy4gRG9uJ3Qgc2F5CiAJICBZIGhlcmUgaWYgeW91IGludGVuZCB0byBzYXkgWSBvciBNIHRoZXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCA4ZTBmMzE1Li5kZmNhNzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwpAQCAtNDc4LDYgKzQ3OCwxMSBAQAogCQlyZXQgPSBpODAxX3RyYW5zYWN0aW9uKCk7CiAJfQogCisJLyogU29tZSBCSU9TZXMgZG9uJ3QgbGlrZSBpdCB3aGVuIFBFQyBpcyBlbmFibGVkIGF0IHJlYm9vdCBvciByZXN1bWUKKwkgICB0aW1lLCBzbyB3ZSBmb3JjaWJseSBkaXNhYmxlIGl0IGFmdGVyIGV2ZXJ5IHRyYW5zYWN0aW9uLiAqLworCWlmIChod3BlYykKKwkJb3V0Yl9wKDAsIFNNQkFVWENUTCk7CisKIAlpZihibG9jaykKIAkJcmV0dXJuIHJldDsKIAlpZihyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCmluZGV4IGM2MzAyNWEuLmUwOWViYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCkBAIC0xMjEsOSArMTIxLDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGkyY19wYXJwb3J0X2luaXQodm9pZCkKIHsKLQlpZiAodHlwZSA8IDAgfHwgdHlwZSA+PSBBUlJBWV9TSVpFKGFkYXB0ZXJfcGFybSkpIHsKKwlpZiAodHlwZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLXBhcnBvcnQ6IGFkYXB0ZXIgdHlwZSB1bnNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICh0eXBlID49IEFSUkFZX1NJWkUoYWRhcHRlcl9wYXJtKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpMmMtcGFycG9ydDogaW52YWxpZCB0eXBlICglZClcbiIsIHR5cGUpOwotCQl0eXBlID0gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGJhc2UgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYwppbmRleCA3ZTJlOGNkLi45MzRiZDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYwpAQCAtMjQxLDkgKzI0MSwxNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpMmNfcGFycG9ydF9pbml0KHZvaWQpCiB7Ci0JaWYgKHR5cGUgPCAwIHx8IHR5cGUgPj0gQVJSQVlfU0laRShhZGFwdGVyX3Bhcm0pKSB7CisJaWYgKHR5cGUgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImkyYy1wYXJwb3J0OiBhZGFwdGVyIHR5cGUgdW5zcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAodHlwZSA+PSBBUlJBWV9TSVpFKGFkYXB0ZXJfcGFybSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLXBhcnBvcnQ6IGludmFsaWQgdHlwZSAoJWQpXG4iLCB0eXBlKTsKLQkJdHlwZSA9IDA7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJldHVybiBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcigmaTJjX3BhcnBvcnRfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmgKaW5kZXggZDcwMmU1ZS4uOWRkZDgxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmgKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmgKQEAgLTkwLDcgKzkwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCB0eXBlOworc3RhdGljIGludCB0eXBlID0gLTE7CiBtb2R1bGVfcGFyYW0odHlwZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModHlwZSwKIAkiVHlwZSBvZiBhZGFwdGVyOlxuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKaW5kZXggMzAyNDkwNy4uMWE3M2MwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCkBAIC00MywxMyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotLyoKLQlISVNUT1JZOgotCTIwMDMtMDUtMTEJMS4wLjAgCVVwZGF0ZWQgZnJvbSBsbV9zZW5zb3JzIHByb2plY3QgZm9yIGtlcm5lbCAyLjUKLQkJCQkod2FzIGkyYy1zaXM2NDUuYyBmcm9tIGxtX3NlbnNvcnMgMi43LjApCi0qLwotI2RlZmluZSBTSVM5NnhfVkVSU0lPTiAiMS4wLjAiCi0KIC8qIGJhc2UgYWRkcmVzcyByZWdpc3RlciBpbiBQQ0kgY29uZmlnIHNwYWNlICovCiAjZGVmaW5lIFNJUzk2eF9CQVIgMHgwNAogCkBAIC0zMzcsNyArMzMwLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgaTJjX3Npczk2eF9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaTJjLXNpczk2eCB2ZXJzaW9uICVzXG4iLCBTSVM5NnhfVkVSU0lPTik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNpczk2eF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYwppbmRleCA4YmQzMDVlLi43NjZjYzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKQEAgLTEzMyw2ICsxMzMsOSBAQAogCiAJCW91dGIoaW5iKEFDQkNUTDEpIHwgQUNCQ1RMMV9TVE9QLCBBQ0JDVEwxKTsKIAkJb3V0YihBQ0JTVF9TVEFTVFIgfCBBQ0JTVF9ORUdBQ0ssIEFDQlNUKTsKKworCQkvKiBSZXNldCB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJCW91dGIoMCwgQUNCU1QpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjgsNiArMjMxLDEwIEBACiAJdGltZW91dCA9IGppZmZpZXMgKyBQT0xMX1RJTUVPVVQ7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCXN0YXR1cyA9IGluYihBQ0JTVCk7CisKKwkJLyogUmVzZXQgdGhlIHN0YXR1cyByZWdpc3RlciB0byBhdm9pZCB0aGUgaGFuZyAqLworCQlvdXRiKDAsIEFDQlNUKTsKKwogCQlpZiAoKHN0YXR1cyAmIChBQ0JTVF9TREFTVHxBQ0JTVF9CRVJ8QUNCU1RfTkVHQUNLKSkgIT0gMCkgewogCQkJc2N4MjAwX2FjYl9tYWNoaW5lKGlmYWNlLCBzdGF0dXMpOwogCQkJcmV0dXJuOwpAQCAtNDE1LDcgKzQyMiw2IEBACiAJc3RydWN0IHNjeDIwMF9hY2JfaWZhY2UgKmlmYWNlOwogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKIAlpbnQgcmM7Ci0JY2hhciBkZXNjcmlwdGlvbls2NF07CiAKIAlpZmFjZSA9IGt6YWxsb2Moc2l6ZW9mKCppZmFjZSksIEdGUF9LRVJORUwpOwogCWlmICghaWZhY2UpIHsKQEAgLTQzNCwxMCArNDQwLDcgQEAKIAogCW11dGV4X2luaXQoJmlmYWNlLT5tdXRleCk7CiAKLQlzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZW9mKGRlc2NyaXB0aW9uKSwgIiVzIEFDQ0VTUy5idXMgWyVzXSIsCi0JCSB0ZXh0LCBhZGFwdGVyLT5uYW1lKTsKLQotCWlmIChyZXF1ZXN0X3JlZ2lvbihiYXNlLCA4LCBkZXNjcmlwdGlvbikgPT0gMCkgeworCWlmICghcmVxdWVzdF9yZWdpb24oYmFzZSwgOCwgYWRhcHRlci0+bmFtZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIE5BTUUgIjogY2FuJ3QgYWxsb2NhdGUgaW8gMHgleC0weCV4XG4iLAogCQkJYmFzZSwgYmFzZSArIDgtMSk7CiAJCXJjID0gLUVCVVNZOwpAQCAtNDg4LDcgKzQ5MSw3IEBACiAKICNkZWZpbmUgTVNSX0xCQVJfU01CCQkweDUxNDAwMDBCCiAKLXN0YXRpYyBpbnQgc2N4MjAwX2FkZF9jczU1M3godm9pZCkKK3N0YXRpYyBfX2luaXQgaW50IHNjeDIwMF9hZGRfY3M1NTN4KHZvaWQpCiB7CiAJdTMyCWxvdywgaGk7CiAJdTMyCXNtYl9iYXNlOwpAQCAtNTI0LDYgKzUyNyw5IEBACiAJfSBlbHNlIGlmIChwY2lfZGV2X3ByZXNlbnQoZGl2aWxfcGNpKSkKIAkJcmMgPSBzY3gyMDBfYWRkX2NzNTUzeCgpOwogCisJLyogSWYgYXQgbGVhc3Qgb25lIGJ1cyB3YXMgY3JlYXRlZCwgaW5pdCBtdXN0IHN1Y2NlZWQgKi8KKwlpZiAoc2N4MjAwX2FjYl9saXN0KQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxMzc0LmMKaW5kZXggMDNkMDllZC4uNDYzMGYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvZHMxMzc0LmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxMzc0LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjZGVmaW5lIERTMTM3NF9SRUdfVE9EMAkJMHgwMAogI2RlZmluZSBEUzEzNzRfUkVHX1RPRDEJCTB4MDEKQEAgLTEzOSw3ICsxNDAsNyBAQAogCXJldHVybiB0MTsKIH0KIAotc3RhdGljIHZvaWQgZHMxMzc0X3NldF90bGV0KHVsb25nIGFyZykKK3N0YXRpYyB2b2lkIGRzMTM3NF9zZXRfd29yayh2b2lkICphcmcpCiB7CiAJdWxvbmcgdDEsIHQyOwogCWludCBsaW1pdCA9IDEwOwkJLyogYXJiaXRyYXJ5IHJldHJ5IGxpbWl0ICovCkBAIC0xNjgsMTcgKzE2OSwxOCBAQAogCiBzdGF0aWMgdWxvbmcgbmV3X3RpbWU7CiAKLXN0YXRpYyBERUNMQVJFX1RBU0tMRVRfRElTQUJMRUQoZHMxMzc0X3Rhc2tsZXQsIGRzMTM3NF9zZXRfdGxldCwKLQkJCQkodWxvbmcpICYgbmV3X3RpbWUpOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkczEzNzRfd29ya3F1ZXVlOworCitzdGF0aWMgREVDTEFSRV9XT1JLKGRzMTM3NF93b3JrLCBkczEzNzRfc2V0X3dvcmssICZuZXdfdGltZSk7CiAKIGludCBkczEzNzRfc2V0X3J0Y190aW1lKHVsb25nIG5vd3RpbWUpCiB7CiAJbmV3X3RpbWUgPSBub3d0aW1lOwogCiAJaWYgKGluX2ludGVycnVwdCgpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZkczEzNzRfdGFza2xldCk7CisJCXF1ZXVlX3dvcmsoZHMxMzc0X3dvcmtxdWV1ZSwgJmRzMTM3NF93b3JrKTsKIAllbHNlCi0JCWRzMTM3NF9zZXRfdGxldCgodWxvbmcpICYgbmV3X3RpbWUpOworCQlkczEzNzRfc2V0X3dvcmsoJm5ld190aW1lKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjA0LDYgKzIwNiw4IEBACiAJY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKIAljbGllbnQtPmRyaXZlciA9ICZkczEzNzRfZHJpdmVyOwogCisJZHMxMzc0X3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJkczEzNzQiKTsKKwogCWlmICgocmMgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSAhPSAwKSB7CiAJCWtmcmVlKGNsaWVudCk7CiAJCXJldHVybiByYzsKQEAgLTIyNyw3ICsyMzEsNyBAQAogCiAJaWYgKChyYyA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpID09IDApIHsKIAkJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwotCQl0YXNrbGV0X2tpbGwoJmRzMTM3NF90YXNrbGV0KTsKKwkJZGVzdHJveV93b3JrcXVldWUoZHMxMzc0X3dvcmtxdWV1ZSk7CiAJfQogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvbTQxdDAwLmMKaW5kZXggYjVhYWJlNy4uOTlhYjRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvbTQxdDAwLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvbTQxdDAwLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CkBAIC0xMTEsNyArMTEyLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLW00MXQwMF9zZXRfdGxldCh1bG9uZyBhcmcpCittNDF0MDBfc2V0KHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUJdG07CiAJdWxvbmcJbm93dGltZSA9ICoodWxvbmcgKilhcmc7CkBAIC0xMzAsMTMgKzEzMSwxMyBAQAogCWlmICgoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgMCwgdG0udG1fc2VjICYgMHg3ZikgPCAwKQogCQl8fCAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgMSwgdG0udG1fbWluICYgMHg3ZikKIAkJCTwgMCkKLQkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDIsIHRtLnRtX2hvdXIgJiAweDdmKQorCQl8fCAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgMiwgdG0udG1faG91ciAmIDB4M2YpCiAJCQk8IDApCi0JCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCA0LCB0bS50bV9tZGF5ICYgMHg3ZikKKwkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDQsIHRtLnRtX21kYXkgJiAweDNmKQogCQkJPCAwKQotCQl8fCAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgNSwgdG0udG1fbW9uICYgMHg3ZikKKwkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDUsIHRtLnRtX21vbiAmIDB4MWYpCiAJCQk8IDApCi0JCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCA2LCB0bS50bV95ZWFyICYgMHg3ZikKKwkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDYsIHRtLnRtX3llYXIgJiAweGZmKQogCQkJPCAwKSkKIAogCQlkZXZfd2Fybigmc2F2ZV9jbGllbnQtPmRldiwibTQxdDAwOiBjYW4ndCB3cml0ZSB0byBydGMgY2hpcFxuIik7CkBAIC0xNDUsOSArMTQ2LDkgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB1bG9uZwluZXdfdGltZTsKLQotREVDTEFSRV9UQVNLTEVUX0RJU0FCTEVEKG00MXQwMF90YXNrbGV0LCBtNDF0MDBfc2V0X3RsZXQsICh1bG9uZykmbmV3X3RpbWUpOworc3RhdGljIHVsb25nIG5ld190aW1lOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptNDF0MDBfd3E7CitzdGF0aWMgREVDTEFSRV9XT1JLKG00MXQwMF93b3JrLCBtNDF0MDBfc2V0LCAmbmV3X3RpbWUpOwogCiBpbnQKIG00MXQwMF9zZXRfcnRjX3RpbWUodWxvbmcgbm93dGltZSkKQEAgLTE1NSw5ICsxNTYsOSBAQAogCW5ld190aW1lID0gbm93dGltZTsKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJdGFza2xldF9zY2hlZHVsZSgmbTQxdDAwX3Rhc2tsZXQpOworCQlxdWV1ZV93b3JrKG00MXQwMF93cSwgJm00MXQwMF93b3JrKTsKIAllbHNlCi0JCW00MXQwMF9zZXRfdGxldCgodWxvbmcpJm5ld190aW1lKTsKKwkJbTQxdDAwX3NldCgmbmV3X3RpbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODksNiArMTkwLDcgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAorCW00MXQwMF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJtNDF0MDAiKTsKIAlzYXZlX2NsaWVudCA9IGNsaWVudDsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwNiw3ICsyMDgsNyBAQAogCiAJaWYgKChyYyA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpID09IDApIHsKIAkJa2ZyZWUoY2xpZW50KTsKLQkJdGFza2xldF9raWxsKCZtNDF0MDBfdGFza2xldCk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKG00MXQwMF93cSk7CiAJfQogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCmluZGV4IGNjZjUyOGQuLmE1MDE3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjZGVmaW5lIF9JREVfRElTSwogCkBAIC0zMTcsNiArMzE4LDggQEAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAorCWxlZHRyaWdfaWRlX2FjdGl2aXR5KCk7CisKIAlwcl9kZWJ1ZygiJXM6ICVzaW5nOiBibG9jaz0lbGx1LCBzZWN0b3JzPSVsdSwgYnVmZmVyPTB4JTA4bHhcbiIsCiAJCSBkcml2ZS0+bmFtZSwgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgPyAicmVhZCIgOiAid3JpdCIsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrLCBycS0+bnJfc2VjdG9ycywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKaW5kZXggMDYwNmJkMi4uOTIzM2I4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKQEAgLTM3NSw3ICszNzUsMTMgQEAKIAkJfQogCX0KIAotCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgcnEtPmhhcmRfbnJfc2VjdG9ycyk7CisJaWYgKHJxLT5ycV9kaXNrKSB7CisJCWlkZV9kcml2ZXJfdCAqZHJ2OworCisJCWRydiA9ICooaWRlX2RyaXZlcl90ICoqKXJxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7OworCQlkcnYtPmVuZF9yZXF1ZXN0KGRyaXZlLCAxLCBycS0+aGFyZF9ucl9zZWN0b3JzKTsKKwl9IGVsc2UKKwkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCBycS0+aGFyZF9ucl9zZWN0b3JzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwppbmRleCA2MjEzYmQzLi42MDI3OTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCkBAIC04MSwxNCArODEsMTQgQEAKIH07CiAKIHR5cGVkZWYgc3RydWN0IGlkZV9pbmZvX3QgewotICAgIGRldl9saW5rX3QJbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgaW50CQluZGV2OwogICAgIGRldl9ub2RlX3QJbm9kZTsKICAgICBpbnQJCWhkOwogfSBpZGVfaW5mb190OwogCi1zdGF0aWMgdm9pZCBpZGVfcmVsZWFzZShkZXZfbGlua190ICopOwotc3RhdGljIHZvaWQgaWRlX2NvbmZpZyhkZXZfbGlua190ICopOworc3RhdGljIHZvaWQgaWRlX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CitzdGF0aWMgaW50IGlkZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CiAKIHN0YXRpYyB2b2lkIGlkZV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIApAQCAtMTAzLDEwICsxMDMsOSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBpZGVfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgaWRlX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGlkZV9pbmZvX3QgKmluZm87Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKIAogICAgIERFQlVHKDAsICJpZGVfYXR0YWNoKClcbiIpOwogCkBAIC0xMTQsNyArMTEzLDkgQEAKICAgICBpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWluZm8pCiAJcmV0dXJuIC1FTk9NRU07Ci0gICAgbGluayA9ICZpbmZvLT5saW5rOyBsaW5rLT5wcml2ID0gaW5mbzsKKworICAgIGluZm8tPnBfZGV2ID0gbGluazsKKyAgICBsaW5rLT5wcml2ID0gaW5mbzsKIAogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAgICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKQEAgLTEyMiwxNiArMTIzLDkgQEAKICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKICAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgaWRlX2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBpZGVfY29uZmlnKGxpbmspOwogfSAvKiBpZGVfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTQzLDE0ICsxMzcsMTEgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGlkZV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgaWRlX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogICAgIERFQlVHKDAsICJpZGVfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JaWRlX3JlbGVhc2UobGluayk7CisgICAgaWRlX3JlbGVhc2UobGluayk7CiAKICAgICBrZnJlZShsaW5rLT5wcml2KTsKIH0gLyogaWRlX2RldGFjaCAqLwpAQCAtMTc3LDkgKzE2OCw4IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIGlkZV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgaWRlX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIGlkZV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogICAgIHR1cGxlX3QgdHVwbGU7CiAgICAgc3RydWN0IHsKQEAgLTIwMywzNCArMTkzLDMwIEBACiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmc3RrLT5wYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnN0ay0+cGFyc2UpKTsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBzdGstPnBhcnNlLmNvbmZpZy5iYXNlOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHN0ay0+cGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKLSAgICBpZiAoIXBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpICYmCi0JIXBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgJiYKLQkhcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmc3RrLT5wYXJzZSkpCisgICAgaWYgKCFwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgJiYKKwkhcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgJiYKKwkhcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnN0ay0+cGFyc2UpKQogCWlzX2ttZSA9ICgoc3RrLT5wYXJzZS5tYW5maWQubWFuZiA9PSBNQU5GSURfS01FKSAmJgogCQkgICgoc3RrLT5wYXJzZS5tYW5maWQuY2FyZCA9PSBQUk9ESURfS01FX0tYTEMwMDVfQSkgfHwKIAkJICAgKHN0ay0+cGFyc2UubWFuZmlkLmNhcmQgPT0gUFJPRElEX0tNRV9LWExDMDA1X0IpKSk7CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICAvKiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHJpZ2h0Li4uIGxvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCi0gICAgQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJnN0ay0+Y29uZikpOwotICAgIGxpbmstPmNvbmYuVmNjID0gc3RrLT5jb25mLlZjYzsKKyAgICBDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJnN0ay0+Y29uZikpOwogCiAgICAgcGFzcyA9IGlvX2Jhc2UgPSBjdGxfYmFzZSA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgd2hpbGUgKDEpIHsKLSAgICAJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCkgZ290byBuZXh0X2VudHJ5OwotCWlmIChwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZzdGstPnBhcnNlKSAhPSAwKSBnb3RvIG5leHRfZW50cnk7CisgICAgCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwKSBnb3RvIG5leHRfZW50cnk7CisJaWYgKHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZzdGstPnBhcnNlKSAhPSAwKSBnb3RvIG5leHRfZW50cnk7CiAKIAkvKiBDaGVjayBmb3IgbWF0Y2hpbmcgVmNjLCB1bmxlc3Mgd2UncmUgZGVzcGVyYXRlICovCiAJaWYgKCFwYXNzKSB7CkBAIC0yNDQsMTAgKzIzMCwxMCBAQAogCX0KIAogCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkgICAgbGluay0+Y29uZi5WcHAgPQogCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAJZWxzZSBpZiAoc3RrLT5kZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkgICAgbGluay0+Y29uZi5WcHAgPQogCQlzdGstPmRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKIAogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKHN0ay0+ZGZsdC5pby5ud2luID4gMCkpIHsKQEAgLTI2MSwxNCArMjQ3LDE0IEBACiAJCWxpbmstPmlvLk51bVBvcnRzMSA9IDg7CiAJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKIAkJbGluay0+aW8uTnVtUG9ydHMyID0gKGlzX2ttZSkgPyAyIDogMTsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCQlpb19iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOwogCQljdGxfYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MjsKIAkgICAgfSBlbHNlIGlmICgoaW8tPm53aW4gPT0gMSkgJiYgKGlvLT53aW5bMF0ubGVuID49IDE2KSkgewogCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKIAkJbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCQlpb19iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOwogCQljdGxfYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MSArIDB4MGU7CkBAIC0yODEsMTYgKzI2NywxNiBAQAogCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKIAkgICAgbWVtY3B5KCZzdGstPmRmbHQsIGNmZywgc2l6ZW9mKHN0ay0+ZGZsdCkpOwogCWlmIChwYXNzKSB7Ci0JICAgIENTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JfSBlbHNlIGlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpICE9IDApIHsKLQkgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCSAgICBDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwl9IGVsc2UgaWYgKHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpICE9IDApIHsKKwkgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAkgICAgbWVtc2V0KCZzdGstPmRmbHQsIDAsIHNpemVvZihzdGstPmRmbHQpKTsKIAkgICAgcGFzcysrOwogCX0KICAgICB9CiAKLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEoaGFuZGxlLCAmbGluay0+aXJxKSk7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCAmbGluay0+Y29uZikpOworICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogICAgIC8qIGRpc2FibGUgZHJpdmUgaW50ZXJydXB0cyBkdXJpbmcgSURFIHByb2JlICovCiAgICAgb3V0YigweDAyLCBjdGxfYmFzZSk7CkBAIC0zMDEsMTIgKzI4NywxMiBAQAogCiAgICAgLyogcmV0cnkgcmVnaXN0cmF0aW9uIGluIGNhc2UgZGV2aWNlIGlzIHN0aWxsIHNwaW5uaW5nIHVwICovCiAgICAgZm9yIChoZCA9IC0xLCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLQloZCA9IGlkZWNzX3JlZ2lzdGVyKGlvX2Jhc2UsIGN0bF9iYXNlLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGhhbmRsZSk7CisJaGQgPSBpZGVjc19yZWdpc3Rlcihpb19iYXNlLCBjdGxfYmFzZSwgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rKTsKIAlpZiAoaGQgPj0gMCkgYnJlYWs7CiAJaWYgKGxpbmstPmlvLk51bVBvcnRzMSA9PSAweDIwKSB7CiAJICAgIG91dGIoMHgwMiwgY3RsX2Jhc2UgKyAweDEwKTsKIAkgICAgaGQgPSBpZGVjc19yZWdpc3Rlcihpb19iYXNlICsgMHgxMCwgY3RsX2Jhc2UgKyAweDEwLAotCQkJCWxpbmstPmlycS5Bc3NpZ25lZElSUSwgaGFuZGxlKTsKKwkJCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGxpbmspOwogCSAgICBpZiAoaGQgPj0gMCkgewogCQlpb19iYXNlICs9IDB4MTA7CiAJCWN0bF9iYXNlICs9IDB4MTA7CkBAIC0zMjgsMjUgKzMxNCwyMyBAQAogICAgIGluZm8tPm5vZGUubWFqb3IgPSBpZGVfbWFqb3JbaGRdOwogICAgIGluZm8tPm5vZGUubWlub3IgPSAwOwogICAgIGluZm8tPmhkID0gaGQ7Ci0gICAgbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7Ci0gICAgcHJpbnRrKEtFUk5fSU5GTyAiaWRlLWNzOiAlczogVmNjID0gJWQuJWQsIFZwcCA9ICVkLiVkXG4iLAotCSAgIGluZm8tPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuVmNjIC8gMTAsIGxpbmstPmNvbmYuVmNjICUgMTAsCi0JICAgbGluay0+Y29uZi5WcHAxIC8gMTAsIGxpbmstPmNvbmYuVnBwMSAlIDEwKTsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOworICAgIHByaW50ayhLRVJOX0lORk8gImlkZS1jczogJXM6IFZwcCA9ICVkLiVkXG4iLAorCSAgIGluZm8tPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuVnBwIC8gMTAsIGxpbmstPmNvbmYuVnBwICUgMTApOwogCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKICAgICBrZnJlZShzdGspOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKIAogZXJyX21lbToKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgImlkZS1jczogaWRlX2NvbmZpZyBmYWlsZWQgbWVtb3J5IGFsbG9jYXRpb25cbiIpOwogICAgIGdvdG8gZmFpbGVkOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogICAgIGtmcmVlKHN0ayk7CiAgICAgaWRlX3JlbGVhc2UobGluayk7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogaWRlX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM1Nyw3ICszNDEsNyBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXZvaWQgaWRlX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3ZvaWQgaWRlX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgaWRlX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgCkBAIC0zNjksMzcgKzM1MywxMCBAQAogCWlkZV91bnJlZ2lzdGVyKGluZm8tPmhkKTsKICAgICB9CiAgICAgaW5mby0+bmRldiA9IDA7Ci0gICAgbGluay0+ZGV2ID0gTlVMTDsKLSAgICAKLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwogCisgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfSAvKiBpZGVfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50IGlkZV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAoREVWX09LKGxpbmspKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JcmV0dXJuIDA7Ci19CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC00MzUsNiArMzkyLDcgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRlJFRUNPTSIsICJQQ0NBUkQtSURFIiwgMHg1NzE0Y2JmNywgMHg0OGUwYWI4ZSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkhJVEFDSEkiLCAiRkxBU0giLCAweGY0ZjQzOTQ5LCAweDllYjg2YWFlKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiSElUQUNISSIsICJtaWNyb2RyaXZlIiwgMHhmNGY0Mzk0OSwgMHhhNmQ3NjE3OCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklCTSIsICJtaWNyb2RyaXZlIiwgMHhiNTY5YTZlNSwgMHhhNmQ3NjE3OCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklCTSIsICJJQk0xN0pTU0ZQMjAiLCAweGI1NjlhNmU1LCAweGYyNTA4NzUzKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiSU8gREFUQSIsICJDQklERTIgICAgICAiLCAweDU0N2U2NmRjLCAweDg2NzEwNDNiKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiSU8gREFUQSIsICJQQ0lERSIsIDB4NTQ3ZTY2ZGMsIDB4NWM1YWIxNDkpLApAQCAtNDU5LDExICs0MTcsOSBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJpZGUtY3MiLAogCX0sCi0JLnByb2JlCQk9IGlkZV9hdHRhY2gsCisJLnByb2JlCQk9IGlkZV9wcm9iZSwKIAkucmVtb3ZlCQk9IGlkZV9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gaWRlX2lkcywKLQkuc3VzcGVuZAk9IGlkZV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gaWRlX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfaWRlX2NzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCmluZGV4IGNmODQzNTAuLjhiMjRiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCkBAIC03MzEsNiArNzMxLDggQEAKIAkKIAlpZihtNTIyOV9yZXZpc2lvbiA8PSAweDIwKQogCQl0bXBieXRlID0gKHRtcGJ5dGUgJiAofjB4MDIpKSB8IDB4MDE7CisJZWxzZSBpZiAobTUyMjlfcmV2aXNpb24gPT0gMHhjNykKKwkJdG1wYnl0ZSB8PSAweDAzOwogCWVsc2UKIAkJdG1wYnl0ZSB8PSAweDAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMgYi9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKaW5kZXggZGY5ZWU5YS4uOTAwZWZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYwpAQCAtMzQ4LDYgKzM0OCw3IEBACiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQMjAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGlpeHBfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKaW5kZXggNmY4Zjg2NC4uN2NlNWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwpAQCAtNzk4LDcgKzc5OCw2IEBACiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gNDgsCi0JCS5mbGFncwkJPSBJREVQQ0lfRkxBR19GT1JDRV9QREMsCiAJfSx7CS8qIDIgKi8KIAkJLm5hbWUJCT0gIlBEQzIwMjYzIiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkYzIwMmF0YTQsCkBAIC04MTksNyArODE4LDYgQEAKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCiAJCS5leHRyYQkJPSA0OCwKLQkJLmZsYWdzCQk9IElERVBDSV9GTEFHX0ZPUkNFX1BEQywKIAl9LHsJLyogNCAqLwogCQkubmFtZQkJPSAiUERDMjAyNjciLAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyeHgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwppbmRleCA0M2I5NmUyLi4yN2M5ZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKQEAgLTM0NSwxNyArMzQ1LDE3IEBACiBzdGF0aWMgdTgKIHNnaWlvYzRfSU5CKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQl1OCByZWcgPSAodTgpIGluYihwb3J0KTsKKwl1OCByZWcgPSAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7CiAKIAlpZiAoKHBvcnQgJiAweEZGRikgPT0gMHgxMUMpIHsJLyogU3RhdHVzIHJlZ2lzdGVyIG9mIElPQzQgKi8KIAkJaWYgKHJlZyAmIDB4NTEpIHsJLyogTm90IGJ1c3kuLi5jaGVjayBmb3IgaW50ZXJydXB0ICovCiAJCQl1bnNpZ25lZCBsb25nIG90aGVyX2lyID0gcG9ydCAtIDB4MTEwOwotCQkJdW5zaWduZWQgaW50IGludHJfcmVnID0gKHUzMikgaW5sKG90aGVyX2lyKTsKKwkJCXVuc2lnbmVkIGludCBpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwogCiAJCQkvKiBDbGVhciB0aGUgSW50ZXJydXB0LCBFcnJvciBiaXRzIG9uIHRoZSBJT0M0ICovCiAJCQlpZiAoaW50cl9yZWcgJiAweDAzKSB7Ci0JCQkJb3V0bCgweDAzLCBvdGhlcl9pcik7Ci0JCQkJaW50cl9yZWcgPSAodTMyKSBpbmwob3RoZXJfaXIpOworCQkJCXdyaXRlbCgweDAzLCAodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKKwkJCQlpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwogCQkJfQogCQl9CiAJfQpAQCAtNjA2LDYgKzYwNiwxMiBAQAogCWh3aWYtPmlkZV9kbWFfaG9zdF9vZmYgPSAmc2dpaW9jNF9pZGVfZG1hX2hvc3Rfb2ZmOwogCWh3aWYtPmlkZV9kbWFfbG9zdGlycSA9ICZzZ2lpb2M0X2lkZV9kbWFfbG9zdGlycTsKIAlod2lmLT5pZGVfZG1hX3RpbWVvdXQgPSAmX19pZGVfZG1hX3RpbWVvdXQ7CisKKwkvKgorCSAqIFRoZSBJT0M0IHVzZXMgTU1JTyByYXRoZXIgdGhhbiBQb3J0IElPLgorCSAqIEl0IGFsc28gbmVlZHMgc3BlY2lhbCB3b3JrYXJvdW5kcyBmb3IgSU5CLgorCSAqLworCWRlZmF1bHRfaHdpZl9tbWlvcHMoaHdpZik7CiAJaHdpZi0+SU5CID0gJnNnaWlvYzRfSU5COwogfQogCkBAIC03NDMsNiArNzQ5LDYgQEAKIG1vZHVsZV9pbml0KGlvYzRfaWRlX2luaXQpOwogbW9kdWxlX2V4aXQoaW9jNF9pZGVfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkFuaWtldCBNYWxhdHB1cmUgLSBTaWxpY29uIEdyYXBoaWNzIEluYy4gKFNHSSkiKTsKK01PRFVMRV9BVVRIT1IoIkFuaWtldCBNYWxhdHB1cmUvSmVyZW15IEhpZ2RvbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJREUgUENJIGRyaXZlciBtb2R1bGUgZm9yIFNHSSBJT0M0IEJhc2UtSU8gQ2FyZCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKaW5kZXggNzhlMzBmOC4uZmZjYThiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYworKysgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCkBAIC01NTMsNiArNTUzLDggQEAKIAogCWlmIChpcnEgIT0gTlVMTCkKIAkJKmlycSA9IHBtYWNfaWRlW2l4XS5pcnE7CisKKwlody0+ZGV2ID0gJnBtYWNfaWRlW2l4XS5tZGV2LT5vZmRldi5kZXY7CiB9CiAKICNkZWZpbmUgUE1BQ19JREVfUkVHKHgpICgodm9pZCBfX2lvbWVtICopKElERV9EQVRBX1JFRysoeCkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwppbmRleCA3ZWJmOTkyLi40NjJlZDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwpAQCAtNTgwLDcgKzU4MCw2IEBACiAJaW50IHBvcnQ7CiAJaW50IGF0X2xlYXN0X29uZV9od2lmX2VuYWJsZWQgPSAwOwogCWlkZV9od2lmX3QgKmh3aWYsICptYXRlID0gTlVMTDsKLQlzdGF0aWMgaW50IHNlY29uZHBkYyA9IDA7CiAJdTggdG1wOwogCiAJaW5kZXgtPmFsbCA9IDB4ZjBmMDsKQEAgLTU5MiwyMSArNTkxLDkgQEAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDw9IDE7ICsrcG9ydCkgewogCQlpZGVfcGNpX2VuYWJsZWJpdF90ICplID0gJihkLT5lbmFibGViaXRzW3BvcnRdKTsKIAkKLQkJLyogCi0JCSAqIElmIHRoaXMgaXMgYSBQcm9taXNlIEZha2VSYWlkIGNvbnRyb2xsZXIsCi0JCSAqIHRoZSAybmQgY29udHJvbGxlciB3aWxsIGJlIG1hcmtlZCBhcyAKLQkJICogZGlzYWJsZWQgd2hpbGUgaXQgaXMgYWN0dWFsbHkgdGhlcmUgYW5kIGVuYWJsZWQKLQkJICogYnkgdGhlIGJpb3MgZm9yIHJhaWQgcHVycG9zZXMuIAotCQkgKiBTa2lwIHRoZSBub3JtYWwgImlzIGl0IGVuYWJsZWQiIHRlc3QgZm9yIHRob3NlLgotCQkgKi8KLQkJaWYgKChkLT5mbGFncyAmIElERVBDSV9GTEFHX0ZPUkNFX1BEQykgJiYKLQkJICAgIChzZWNvbmRwZGMrKz09MSkgJiYgKHBvcnQ9PTEpKQotCQkJZ290byBjb250cm9sbGVyX29rOwotCQkJCiAJCWlmIChlLT5yZWcgJiYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgZS0+cmVnLCAmdG1wKSB8fAogCQkgICAgKHRtcCAmIGUtPm1hc2spICE9IGUtPnZhbCkpCiAJCQljb250aW51ZTsJLyogcG9ydCBub3QgZW5hYmxlZCAqLwotY29udHJvbGxlcl9vazoKIAogCQlpZiAoZC0+Y2hhbm5lbHMJPD0gcG9ydCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCmluZGV4IDE5MjIyODcuLjExZjEzNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCSAqIHJlZ2lzdGVyIGNvbnRlbnQuCiAJICogVG8gYWN0dWFsbHkgZW5hYmxlIHBoeXNpY2FsIHJlc3BvbnNlcyBpcyB0aGUgam9iIG9mIG91ciBpbnRlcnJ1cHQKIAkgKiBoYW5kbGVyIHdoaWNoIHByb2dyYW1zIHRoZSBwaHlzaWNhbCByZXF1ZXN0IGZpbHRlci4gKi8KLQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfUGh5VXBwZXJCb3VuZCwgMHhmZmZmMDAwMCk7CisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1BoeVVwcGVyQm91bmQsIDB4MDEwMDAwMDApOwogCiAJREJHTVNHKCJwaHlzVXBwZXJCb3VuZE9mZnNldD0lMDh4IiwKIAkgICAgICAgcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfUGh5VXBwZXJCb3VuZCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCAyYzc2NWNhLi41NDEzZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTExNyw3ICsxMTgsOCBAQAogICovCiBzdGF0aWMgaW50IG1heF9zZWN0b3JzID0gU0JQMl9NQVhfU0VDVE9SUzsKIG1vZHVsZV9wYXJhbShtYXhfc2VjdG9ycywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobWF4X3NlY3RvcnMsICJDaGFuZ2UgbWF4IHNlY3RvcnMgcGVyIEkvTyBzdXBwb3J0ZWQgKGRlZmF1bHQgPSAyNTUpIik7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9zZWN0b3JzLCAiQ2hhbmdlIG1heCBzZWN0b3JzIHBlciBJL08gc3VwcG9ydGVkIChkZWZhdWx0ID0gIgorCQkgX19zdHJpbmdpZnkoU0JQMl9NQVhfU0VDVE9SUykgIikiKTsKIAogLyoKICAqIEV4Y2x1c2l2ZSBsb2dpbiB0byBzYnAyIGRldmljZT8gSW4gbW9zdCBjYXNlcywgdGhlIHNicDIgZHJpdmVyIHNob3VsZApAQCAtMTM1LDE4ICsxMzcsNDUgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZXhjbHVzaXZlX2xvZ2luLCAiRXhjbHVzaXZlIGxvZ2luIHRvIHNicDIgZGV2aWNlIChkZWZhdWx0ID0gMSkiKTsKIAogLyoKLSAqIFNDU0kgaW5xdWlyeSBoYWNrIGZvciByZWFsbHkgYmFkbHkgYmVoYXZlZCBzYnAyIGRldmljZXMuIFR1cm4gdGhpcyBvbgotICogaWYgeW91ciBzYnAyIGRldmljZSBpcyBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhlIFNDU0kgaW5xdWlyeSBjb21tYW5kLgotICogVGhpcyBoYWNrIG1ha2VzIHRoZSBpbnF1aXJ5IGxvb2sgbW9yZSBsaWtlIGEgdHlwaWNhbCBNUyBXaW5kb3dzIGlucXVpcnkKLSAqIGJ5IGVuZm9yY2luZyAzNiBieXRlIGlucXVpcnkgYW5kIGF2b2lkaW5nIGFjY2VzcyB0byBtb2RlX3NlbnNlIHBhZ2UgOC4KKyAqIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIHdvcmthcm91bmRzIGlzIHJlcXVpcmVkIGZvciB5b3VyIGRldmljZSB0byB3b3JrLAorICogcGxlYXNlIHN1Ym1pdCB0aGUga2VybmVsIG1lc3NhZ2VzIGxvZ2dlZCBieSBzYnAyIHRvIHRoZSBsaW51eDEzOTQtZGV2ZWwKKyAqIG1haWxpbmcgbGlzdC4KICAqCi0gKiBJZiBmb3JjZV9pbnF1aXJ5X2hhY2s9MSBpcyByZXF1aXJlZCBmb3IgeW91ciBkZXZpY2UgdG8gd29yaywKLSAqIHBsZWFzZSBzdWJtaXQgdGhlIGxvZ2dlZCBzYnAyX2Zpcm13YXJlX3JldmlzaW9uIHZhbHVlIG9mIHRoaXMgZGV2aWNlIHRvCi0gKiB0aGUgbGludXgxMzk0LWRldmVsIG1haWxpbmcgbGlzdC4KKyAqIC0gMTI4a0IgbWF4IHRyYW5zZmVyCisgKiAgIExpbWl0IHRyYW5zZmVyIHNpemUuIE5lY2Vzc2FyeSBmb3Igc29tZSBvbGQgYnJpZGdlcy4KKyAqCisgKiAtIDM2IGJ5dGUgaW5xdWlyeQorICogICBXaGVuIHNjc2lfbW9kIHByb2JlcyB0aGUgZGV2aWNlLCBsZXQgdGhlIGlucXVpcnkgY29tbWFuZCBsb29rIGxpa2UgdGhhdAorICogICBmcm9tIE1TIFdpbmRvd3MuCisgKgorICogLSBza2lwIG1vZGUgcGFnZSA4CisgKiAgIFN1cHByZXNzIHNlbmRpbmcgb2YgbW9kZV9zZW5zZSBmb3IgbW9kZSBwYWdlIDggaWYgdGhlIGRldmljZSBwcmV0ZW5kcyB0bworICogICBzdXBwb3J0IHRoZSBTQ1NJIFByaW1hcnkgQmxvY2sgY29tbWFuZHMgaW5zdGVhZCBvZiBSZWR1Y2VkIEJsb2NrIENvbW1hbmRzLgorICoKKyAqIC0gZml4IGNhcGFjaXR5CisgKiAgIFRlbGwgc2RfbW9kIHRvIGNvcnJlY3QgdGhlIGxhc3Qgc2VjdG9yIG51bWJlciByZXBvcnRlZCBieSByZWFkX2NhcGFjaXR5LgorICogICBBdm9pZHMgYWNjZXNzIGJleW9uZCBhY3R1YWwgZGlzayBsaW1pdHMgb24gZGV2aWNlcyB3aXRoIGFuIG9mZi1ieS1vbmUgYnVnLgorICogICBEb24ndCB1c2UgdGhpcyB3aXRoIGRldmljZXMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGlzIGJ1Zy4KKyAqCisgKiAtIG92ZXJyaWRlIGludGVybmFsIGJsYWNrbGlzdAorICogICBJbnN0ZWFkIG9mIGFkZGluZyB0byB0aGUgYnVpbHQtaW4gYmxhY2tsaXN0LCB1c2Ugb25seSB0aGUgd29ya2Fyb3VuZHMKKyAqICAgc3BlY2lmaWVkIGluIHRoZSBtb2R1bGUgbG9hZCBwYXJhbWV0ZXIuCisgKiAgIFVzZWZ1bCBpZiBhIGJsYWNrbGlzdCBlbnRyeSBpbnRlcmZlcmVkIHdpdGggYSBub24tYnJva2VuIGRldmljZS4KICAqLworc3RhdGljIGludCBzYnAyX2RlZmF1bHRfd29ya2Fyb3VuZHM7Cittb2R1bGVfcGFyYW1fbmFtZWQod29ya2Fyb3VuZHMsIHNicDJfZGVmYXVsdF93b3JrYXJvdW5kcywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod29ya2Fyb3VuZHMsICJXb3JrIGFyb3VuZCBkZXZpY2UgYnVncyAoZGVmYXVsdCA9IDAiCisJIiwgMTI4a0IgbWF4IHRyYW5zZmVyID0gIiBfX3N0cmluZ2lmeShTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMpCisJIiwgMzYgYnl0ZSBpbnF1aXJ5ID0gIiAgICBfX3N0cmluZ2lmeShTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNikKKwkiLCBza2lwIG1vZGUgcGFnZSA4ID0gIiAgIF9fc3RyaW5naWZ5KFNCUDJfV09SS0FST1VORF9NT0RFX1NFTlNFXzgpCisJIiwgZml4IGNhcGFjaXR5ID0gIiAgICAgICBfX3N0cmluZ2lmeShTQlAyX1dPUktBUk9VTkRfRklYX0NBUEFDSVRZKQorCSIsIG92ZXJyaWRlIGludGVybmFsIGJsYWNrbGlzdCA9ICIgX19zdHJpbmdpZnkoU0JQMl9XT1JLQVJPVU5EX09WRVJSSURFKQorCSIsIG9yIGEgY29tYmluYXRpb24pIik7CisKKy8qIGxlZ2FjeSBwYXJhbWV0ZXIgKi8KIHN0YXRpYyBpbnQgZm9yY2VfaW5xdWlyeV9oYWNrOwogbW9kdWxlX3BhcmFtKGZvcmNlX2lucXVpcnlfaGFjaywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZm9yY2VfaW5xdWlyeV9oYWNrLCAiRm9yY2UgU0NTSSBpbnF1aXJ5IGhhY2sgKGRlZmF1bHQgPSAwKSIpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9pbnF1aXJ5X2hhY2ssICJEZXByZWNhdGVkLCB1c2UgJ3dvcmthcm91bmRzJyIpOwogCiAvKgogICogRXhwb3J0IGluZm9ybWF0aW9uIGFib3V0IHByb3RvY29scy9kZXZpY2VzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KQEAgLTI2NiwxNCArMjk1LDU1IEBACiB9OwogCiAvKgotICogTGlzdCBvZiBkZXZpY2UgZmlybXdhcmVzIHRoYXQgcmVxdWlyZSB0aGUgaW5xdWlyeSBoYWNrLgotICogWWllbGRzIGEgZmV3IGZhbHNlIHBvc2l0aXZlcyBidXQgZGlkIG5vdCBicmVhayBvdGhlciBkZXZpY2VzIHNvIGZhci4KKyAqIExpc3Qgb2YgZGV2aWNlcyB3aXRoIGtub3duIGJ1Z3MuCisgKgorICogVGhlIGZpcm13YXJlX3JldmlzaW9uIGZpZWxkLCBtYXNrZWQgd2l0aCAweGZmZmYwMCwgaXMgdGhlIGJlc3QgaW5kaWNhdG9yCisgKiBmb3IgdGhlIHR5cGUgb2YgYnJpZGdlIGNoaXAgb2YgYSBkZXZpY2UuICBJdCB5aWVsZHMgYSBmZXcgZmFsc2UgcG9zaXRpdmVzCisgKiBidXQgdGhpcyBkaWQgbm90IGJyZWFrIGNvcnJlY3RseSBiZWhhdmluZyBkZXZpY2VzIHNvIGZhci4KICAqLwotc3RhdGljIHUzMiBzYnAyX2Jyb2tlbl9pbnF1aXJ5X2xpc3RbXSA9IHsKLQkweDAwMDAyODAwLAkvKiBTdGVmYW4gUmljaHRlciA8c3RlZmFuckBzNXI2LmluLWJlcmxpbi5kZT4gKi8KLQkJCS8qIERWaUNPIE1vbW9iYXkgQ1gtMSAqLwotCTB4MDAwMDAyMDAJLyogQW5kcmVhcyBQbGVzY2ggPHBsZXNjaEBmYXMuaGFydmFyZC5lZHU+ICovCi0JCQkvKiBRUFMgRmlyZSBEVkRCdXJuZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUzMiBmaXJtd2FyZV9yZXZpc2lvbjsKKwl1MzIgbW9kZWxfaWQ7CisJdW5zaWduZWQgd29ya2Fyb3VuZHM7Cit9IHNicDJfd29ya2Fyb3VuZHNfdGFibGVbXSA9IHsKKwkvKiBUU0I0MkFBOSAqLyB7CisJCS5maXJtd2FyZV9yZXZpc2lvbgk9IDB4MDAyODAwLAorCQkud29ya2Fyb3VuZHMJCT0gU0JQMl9XT1JLQVJPVU5EX0lOUVVJUllfMzYgfAorCQkJCQkgIFNCUDJfV09SS0FST1VORF9NT0RFX1NFTlNFXzgsCisJfSwKKwkvKiBJbml0aW8gYnJpZGdlcywgYWN0dWFsbHkgb25seSBuZWVkZWQgZm9yIHNvbWUgb2xkZXIgb25lcyAqLyB7CisJCS5maXJtd2FyZV9yZXZpc2lvbgk9IDB4MDAwMjAwLAorCQkud29ya2Fyb3VuZHMJCT0gU0JQMl9XT1JLQVJPVU5EX0lOUVVJUllfMzYsCisJfSwKKwkvKiBTeW1iaW9zIGJyaWRnZSAqLyB7CisJCS5maXJtd2FyZV9yZXZpc2lvbgk9IDB4YTBiODAwLAorCQkud29ya2Fyb3VuZHMJCT0gU0JQMl9XT1JLQVJPVU5EXzEyOEtfTUFYX1RSQU5TLAorCX0sCisJLyoKKwkgKiBOb3RlIGFib3V0IHRoZSBmb2xsb3dpbmcgQXBwbGUgaVBvZCBibGFja2xpc3QgZW50cmllczoKKwkgKgorCSAqIFRoZXJlIGFyZSBpUG9kcyAoMm5kIGdlbiwgM3JkIGdlbikgd2l0aCBtb2RlbF9pZD09MC4gIFNpbmNlIG91cgorCSAqIG1hdGNoaW5nIGxvZ2ljIHRyZWF0cyAwIGFzIGEgd2lsZGNhcmQsIHdlIGNhbm5vdCBtYXRjaCB0aGlzIElECisJICogd2l0aG91dCByZXdyaXRpbmcgdGhlIG1hdGNoaW5nIHJvdXRpbmUuICBGb3J0dW5hdGVseSB0aGVzZSBpUG9kcworCSAqIGRvIG5vdCBmZWF0dXJlIHRoZSByZWFkX2NhcGFjaXR5IGJ1ZyBhY2NvcmRpbmcgdG8gb25lIHJlcG9ydC4KKwkgKiBSZWFkX2NhcGFjaXR5IGJlaGF2aW91ciBhcyB3ZWxsIGFzIG1vZGVsX2lkIGNvdWxkIGNoYW5nZSBkdWUgdG8KKwkgKiBBcHBsZS1zdXBwbGllZCBmaXJtd2FyZSB1cGRhdGVzIHRob3VnaC4KKwkgKi8KKwkvKiBpUG9kIDR0aCBnZW5lcmF0aW9uICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwYTI3MDAsCisJCS5tb2RlbF9pZAkJPSAweDAwMDAyMSwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9GSVhfQ0FQQUNJVFksCisJfSwKKwkvKiBpUG9kIG1pbmkgKi8geworCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDBhMjcwMCwKKwkJLm1vZGVsX2lkCQk9IDB4MDAwMDIzLAorCQkud29ya2Fyb3VuZHMJCT0gU0JQMl9XT1JLQVJPVU5EX0ZJWF9DQVBBQ0lUWSwKKwl9LAorCS8qIGlQb2QgUGhvdG8gKi8geworCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDBhMjcwMCwKKwkJLm1vZGVsX2lkCQk9IDB4MDAwMDdlLAorCQkud29ya2Fyb3VuZHMJCT0gU0JQMl9XT1JLQVJPVU5EX0ZJWF9DQVBBQ0lUWSwKKwl9CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ5NiwyMiArNTY2LDE3IEBACiAvKgogICogVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgc2JwMl9jb21tYW5kIGZvciBhIGdpdmVuIG91dHN0YW5kaW5nIFNDcG50LgogICogT25seSBsb29rcyBhdCB0aGUgaW51c2UgbGlzdC4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKnNicDJ1dGlsX2ZpbmRfY29tbWFuZF9mb3JfU0NwbnQoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqc2NzaV9pZCwgdm9pZCAqU0NwbnQpCitzdGF0aWMgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpzYnAydXRpbF9maW5kX2NvbW1hbmRfZm9yX1NDcG50KAorCQlzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICpzY3NpX2lkLCB2b2lkICpTQ3BudCkKIHsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNvbW1hbmQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2xvY2ssIGZsYWdzKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfaW51c2UpKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY29tbWFuZCwgJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfaW51c2UsIGxpc3QpIHsKLQkJCWlmIChjb21tYW5kLT5DdXJyZW50X1NDcG50ID09IFNDcG50KSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2ludXNlKSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb21tYW5kLCAmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9pbnVzZSwgbGlzdCkKKwkJCWlmIChjb21tYW5kLT5DdXJyZW50X1NDcG50ID09IFNDcG50KQogCQkJCXJldHVybiBjb21tYW5kOwotCQkJfQotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC01ODAsMTcgKzY0NSwxNSBAQAogCiAvKgogICogVGhpcyBmdW5jdGlvbiBtb3ZlcyBhIGNvbW1hbmQgdG8gdGhlIGNvbXBsZXRlZCBvcmIgbGlzdC4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyB2b2lkIHNicDJ1dGlsX21hcmtfY29tbWFuZF9jb21wbGV0ZWQoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqc2NzaV9pZCwKLQkJCQkJICAgIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY29tbWFuZCkKK3N0YXRpYyB2b2lkIHNicDJ1dGlsX21hcmtfY29tbWFuZF9jb21wbGV0ZWQoCisJCXN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQsCisJCXN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY29tbWFuZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZjb21tYW5kLT5saXN0KTsKIAlzYnAydXRpbF9mcmVlX2NvbW1hbmRfZG1hKGNvbW1hbmQpOwogCWxpc3RfYWRkX3RhaWwoJmNvbW1hbmQtPmxpc3QsICZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2NvbXBsZXRlZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC03NzIsMTIgKzgzNSwxNyBAQAogCiAJLyogUmVnaXN0ZXIgdGhlIHN0YXR1cyBGSUZPIGFkZHJlc3MgcmFuZ2UuIFdlIGNvdWxkIHVzZSB0aGUgc2FtZSBGSUZPCiAJICogZm9yIHRhcmdldHMgYXQgZGlmZmVyZW50IG5vZGVzLiBIb3dldmVyIHdlIG5lZWQgZGlmZmVyZW50IEZJRk9zIHBlcgotCSAqIHRhcmdldCBpbiBvcmRlciB0byBzdXBwb3J0IG11bHRpLXVuaXQgZGV2aWNlcy4gKi8KKwkgKiB0YXJnZXQgaW4gb3JkZXIgdG8gc3VwcG9ydCBtdWx0aS11bml0IGRldmljZXMuCisJICogVGhlIEZJRk8gaXMgbG9jYXRlZCBvdXQgb2YgdGhlIGxvY2FsIGhvc3QgY29udHJvbGxlcidzIHBoeXNpY2FsIHJhbmdlCisJICogYnV0LCBpZiBwb3NzaWJsZSwgd2l0aGluIHRoZSBwb3N0ZWQgd3JpdGUgYXJlYS4gU3RhdHVzIHdyaXRlcyB3aWxsCisJICogdGhlbiBiZSBwZXJmb3JtZWQgYXMgdW5pZmllZCB0cmFuc2FjdGlvbnMuIFRoaXMgc2xpZ2h0bHkgcmVkdWNlcworCSAqIGJhbmR3aWR0aCB1c2FnZSwgYW5kIHNvbWUgUHJvbGlmaWMgYmFzZWQgZGV2aWNlcyBzZWVtIHRvIHJlcXVpcmUgaXQuCisJICovCiAJc2NzaV9pZC0+c3RhdHVzX2ZpZm9fYWRkciA9IGhwc2JfYWxsb2NhdGVfYW5kX3JlZ2lzdGVyX2FkZHJzcGFjZSgKIAkJCSZzYnAyX2hpZ2hsZXZlbCwgdWQtPm5lLT5ob3N0LCAmc2JwMl9vcHMsCiAJCQlzaXplb2Yoc3RydWN0IHNicDJfc3RhdHVzX2Jsb2NrKSwgc2l6ZW9mKHF1YWRsZXRfdCksCi0JCQl+MFVMTCwgfjBVTEwpOwotCWlmICghc2NzaV9pZC0+c3RhdHVzX2ZpZm9fYWRkcikgeworCQkJMHgwMTAwMDAwMDAwMDBVTEwsIENTUjEyMTJfQUxMX1NQQUNFX0VORCk7CisJaWYgKHNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIgPT0gfjBVTEwpIHsKIAkJU0JQMl9FUlIoImZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0dXMgRklGTyBhZGRyZXNzIHJhbmdlIik7CiAJCWdvdG8gZmFpbGVkX2FsbG9jOwogCX0KQEAgLTE0NTcsNyArMTUyNSw4IEBACiAJc3RydWN0IGNzcjEyMTJfZGVudHJ5ICpkZW50cnk7CiAJdTY0IG1hbmFnZW1lbnRfYWdlbnRfYWRkcjsKIAl1MzIgY29tbWFuZF9zZXRfc3BlY19pZCwgY29tbWFuZF9zZXQsIHVuaXRfY2hhcmFjdGVyaXN0aWNzLAotCSAgICBmaXJtd2FyZV9yZXZpc2lvbiwgd29ya2Fyb3VuZHM7CisJICAgIGZpcm13YXJlX3JldmlzaW9uOworCXVuc2lnbmVkIHdvcmthcm91bmRzOwogCWludCBpOwogCiAJU0JQMl9ERUJVR19FTlRFUigpOwpAQCAtMTUxMywxMiArMTU4Miw4IEBACiAJCWNhc2UgU0JQMl9GSVJNV0FSRV9SRVZJU0lPTl9LRVk6CiAJCQkvKiBGaXJtd2FyZSByZXZpc2lvbiAqLwogCQkJZmlybXdhcmVfcmV2aXNpb24gPSBrdi0+dmFsdWUuaW1tZWRpYXRlOwotCQkJaWYgKGZvcmNlX2lucXVpcnlfaGFjaykKLQkJCQlTQlAyX0lORk8oInNicDJfZmlybXdhcmVfcmV2aXNpb24gPSAleCIsCi0JCQkJCSAgKHVuc2lnbmVkIGludClmaXJtd2FyZV9yZXZpc2lvbik7Ci0JCQllbHNlCi0JCQkJU0JQMl9ERUJVRygic2JwMl9maXJtd2FyZV9yZXZpc2lvbiA9ICV4IiwKLQkJCQkJICAgKHVuc2lnbmVkIGludClmaXJtd2FyZV9yZXZpc2lvbik7CisJCQlTQlAyX0RFQlVHKCJzYnAyX2Zpcm13YXJlX3JldmlzaW9uID0gJXgiLAorCQkJCSAgICh1bnNpZ25lZCBpbnQpZmlybXdhcmVfcmV2aXNpb24pOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKQEAgLTE1MjYsNDEgKzE1OTEsNDQgQEAKIAkJfQogCX0KIAotCS8qIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIG91ciBicm9rZW4gZGV2aWNlIGNoZWNraW5nLiBXZSB0cnkgdG8gaGFjawotCSAqIGFyb3VuZCBvZGRpdGllcyBhbmQga25vd24gZGVmZWN0cy4gICovCi0Jd29ya2Fyb3VuZHMgPSAweDA7Ci0KLQkvKiBJZiB0aGUgdmVuZG9yIGlkIGlzIDB4YTBiOCAoU3ltYmlvcyB2ZW5kb3IgaWQpLCB0aGVuIHdlIGhhdmUgYQotCSAqIGJyaWRnZSB3aXRoIDEyOEtCIG1heCB0cmFuc2ZlciBzaXplIGxpbWl0YXRpb24uIEZvciBzYW5pdHksIHdlCi0JICogb25seSB2b2ljZSB0aGlzIHdoZW4gdGhlIGN1cnJlbnQgbWF4X3NlY3RvcnMgc2V0dGluZwotCSAqIGV4Y2VlZHMgdGhlIDEyOGsgbGltaXQuIEJ5IGRlZmF1bHQsIHRoYXQgaXMgbm90IHRoZSBjYXNlLgotCSAqCi0JICogSXQgd291bGQgYmUgcmVhbGx5IG5pY2UgaWYgd2UgY291bGQgZGV0ZWN0IHRoaXMgYmVmb3JlIHRoZSBzY3NpCi0JICogaG9zdCBnZXRzIGluaXRpYWxpemVkLiBUaGF0IHdheSB3ZSBjYW4gZG93bi1mb3JjZSB0aGUKLQkgKiBtYXhfc2VjdG9ycyB0byBhY2NvdW50IGZvciBpdC4gVGhhdCBpcyBub3QgY3VycmVudGx5Ci0JICogcG9zc2libGUuICAqLwotCWlmICgoZmlybXdhcmVfcmV2aXNpb24gJiAweGZmZmYwMCkgPT0KLQkJCVNCUDJfMTI4S0JfQlJPS0VOX0ZJUk1XQVJFICYmCi0JCQkobWF4X3NlY3RvcnMgKiA1MTIpID4gKDEyOCoxMDI0KSkgewotCQlTQlAyX1dBUk4oIk5vZGUgIiBOT0RFX0JVU19GTVQgIjogQnJpZGdlIG9ubHkgc3VwcG9ydHMgMTI4S0IgbWF4IHRyYW5zZmVyIHNpemUuIiwKLQkJCQlOT0RFX0JVU19BUkdTKHVkLT5uZS0+aG9zdCwgdWQtPm5lLT5ub2RlaWQpKTsKLQkJU0JQMl9XQVJOKCJXQVJOSU5HOiBDdXJyZW50IG1heF9zZWN0b3JzIHNldHRpbmcgaXMgbGFyZ2VyIHRoYW4gMTI4S0IgKCVkIHNlY3RvcnMpISIsCi0JCQkJbWF4X3NlY3RvcnMpOwotCQl3b3JrYXJvdW5kcyB8PSBTQlAyX0JSRUFLQUdFXzEyOEtfTUFYX1RSQU5TRkVSOworCXdvcmthcm91bmRzID0gc2JwMl9kZWZhdWx0X3dvcmthcm91bmRzOworCWlmIChmb3JjZV9pbnF1aXJ5X2hhY2spIHsKKwkJU0JQMl9XQVJOKCJmb3JjZV9pbnF1aXJ5X2hhY2sgaXMgZGVwcmVjYXRlZC4gIgorCQkJICAiVXNlIHBhcmFtZXRlciAnd29ya2Fyb3VuZHMnIGluc3RlYWQuIik7CisJCXdvcmthcm91bmRzIHw9IFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2OwogCX0KIAotCS8qIENoZWNrIGZvciBhIGJsYWNrbGlzdGVkIHNldCBvZiBkZXZpY2VzIHRoYXQgcmVxdWlyZSB1cyB0byBmb3JjZQotCSAqIGEgMzYgYnl0ZSBob3N0IGlucXVpcnkuIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBhcyBhIG1vZHVsZSBwYXJhbQotCSAqICh0byBmb3JjZSBhbGwgaG9zdHMpLiAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYnAyX2Jyb2tlbl9pbnF1aXJ5X2xpc3QpOyBpKyspIHsKLQkJaWYgKChmaXJtd2FyZV9yZXZpc2lvbiAmIDB4ZmZmZjAwKSA9PQotCQkJCXNicDJfYnJva2VuX2lucXVpcnlfbGlzdFtpXSkgewotCQkJU0JQMl9XQVJOKCJOb2RlICIgTk9ERV9CVVNfRk1UICI6IFVzaW5nIDM2Ynl0ZSBpbnF1aXJ5IHdvcmthcm91bmQiLAotCQkJCQlOT0RFX0JVU19BUkdTKHVkLT5uZS0+aG9zdCwgdWQtPm5lLT5ub2RlaWQpKTsKLQkJCXdvcmthcm91bmRzIHw9IFNCUDJfQlJFQUtBR0VfSU5RVUlSWV9IQUNLOwotCQkJYnJlYWs7IC8qIE5vIG5lZWQgdG8gY29udGludWUuICovCisJaWYgKCEod29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfT1ZFUlJJREUpKQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYnAyX3dvcmthcm91bmRzX3RhYmxlKTsgaSsrKSB7CisJCQlpZiAoc2JwMl93b3JrYXJvdW5kc190YWJsZVtpXS5maXJtd2FyZV9yZXZpc2lvbiAmJgorCQkJICAgIHNicDJfd29ya2Fyb3VuZHNfdGFibGVbaV0uZmlybXdhcmVfcmV2aXNpb24gIT0KKwkJCSAgICAoZmlybXdhcmVfcmV2aXNpb24gJiAweGZmZmYwMCkpCisJCQkJY29udGludWU7CisJCQlpZiAoc2JwMl93b3JrYXJvdW5kc190YWJsZVtpXS5tb2RlbF9pZCAmJgorCQkJICAgIHNicDJfd29ya2Fyb3VuZHNfdGFibGVbaV0ubW9kZWxfaWQgIT0gdWQtPm1vZGVsX2lkKQorCQkJCWNvbnRpbnVlOworCQkJd29ya2Fyb3VuZHMgfD0gc2JwMl93b3JrYXJvdW5kc190YWJsZVtpXS53b3JrYXJvdW5kczsKKwkJCWJyZWFrOwogCQl9Ci0JfQorCisJaWYgKHdvcmthcm91bmRzKQorCQlTQlAyX0lORk8oIldvcmthcm91bmRzIGZvciBub2RlICIgTk9ERV9CVVNfRk1UICI6IDB4JXggIgorCQkJICAiKGZpcm13YXJlX3JldmlzaW9uIDB4JTA2eCwgdmVuZG9yX2lkIDB4JTA2eCwiCisJCQkgICIgbW9kZWxfaWQgMHglMDZ4KSIsCisJCQkgIE5PREVfQlVTX0FSR1ModWQtPm5lLT5ob3N0LCB1ZC0+bmUtPm5vZGVpZCksCisJCQkgIHdvcmthcm91bmRzLCBmaXJtd2FyZV9yZXZpc2lvbiwKKwkJCSAgdWQtPnZlbmRvcl9pZCA/IHVkLT52ZW5kb3JfaWQgOiB1ZC0+bmUtPnZlbmRvcl9pZCwKKwkJCSAgdWQtPm1vZGVsX2lkKTsKKworCS8qIFdlIHdvdWxkIG5lZWQgb25lIFNDU0kgaG9zdCB0ZW1wbGF0ZSBmb3IgZWFjaCB0YXJnZXQgdG8gYWRqdXN0CisJICogbWF4X3NlY3RvcnMgb24gdGhlIGZseSwgdGhlcmVmb3JlIHdhcm4gb25seS4gKi8KKwlpZiAod29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMgJiYKKwkgICAgKG1heF9zZWN0b3JzICogNTEyKSA+ICgxMjggKiAxMDI0KSkKKwkJU0JQMl9XQVJOKCJOb2RlICIgTk9ERV9CVVNfRk1UICI6IEJyaWRnZSBvbmx5IHN1cHBvcnRzIDEyOEtCICIKKwkJCSAgIm1heCB0cmFuc2ZlciBzaXplLiBXQVJOSU5HOiBDdXJyZW50IG1heF9zZWN0b3JzICIKKwkJCSAgInNldHRpbmcgaXMgbGFyZ2VyIHRoYW4gMTI4S0IgKCVkIHNlY3RvcnMpIiwKKwkJCSAgTk9ERV9CVVNfQVJHUyh1ZC0+bmUtPmhvc3QsIHVkLT5uZS0+bm9kZWlkKSwKKwkJCSAgbWF4X3NlY3RvcnMpOwogCiAJLyogSWYgdGhpcyBpcyBhIGxvZ2ljYWwgdW5pdCBkaXJlY3RvcnkgZW50cnksIHByb2Nlc3MgdGhlIHBhcmVudAogCSAqIHRvIGdldCB0aGUgdmFsdWVzLiAqLwpAQCAtMjE0OCw3ICsyMjE2LDkgQEAKIAkJICogTWF0Y2hlZCBzdGF0dXMgd2l0aCBjb21tYW5kLCBub3cgZ3JhYiBzY3NpIGNvbW1hbmQgcG9pbnRlcnMgYW5kIGNoZWNrIHN0YXR1cwogCQkgKi8KIAkJU0NwbnQgPSBjb21tYW5kLT5DdXJyZW50X1NDcG50OworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrLCBmbGFncyk7CiAJCXNicDJ1dGlsX21hcmtfY29tbWFuZF9jb21wbGV0ZWQoc2NzaV9pZCwgY29tbWFuZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCiAJCWlmIChTQ3BudCkgewogCkBAIC0yNDUyLDE5ICsyNTIyLDI1IEBACiAKIAlzY3NpX2lkLT5zZGV2ID0gc2RldjsKIAotCWlmIChmb3JjZV9pbnF1aXJ5X2hhY2sgfHwKLQkgICAgc2NzaV9pZC0+d29ya2Fyb3VuZHMgJiBTQlAyX0JSRUFLQUdFX0lOUVVJUllfSEFDSykgeworCWlmIChzY3NpX2lkLT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2KQogCQlzZGV2LT5pbnF1aXJ5X2xlbiA9IDM2OwotCQlzZGV2LT5za2lwX21zX3BhZ2VfOCA9IDE7Ci0JfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNicDJzY3NpX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CisJc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqc2NzaV9pZCA9CisJCShzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICopc2Rldi0+aG9zdC0+aG9zdGRhdGFbMF07CisKIAlibGtfcXVldWVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAoNTEyIC0gMSkpOwogCXNkZXYtPnVzZV8xMF9mb3JfcncgPSAxOwogCXNkZXYtPnVzZV8xMF9mb3JfbXMgPSAxOworCisJaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLICYmCisJICAgIHNjc2lfaWQtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOCkKKwkJc2Rldi0+c2tpcF9tc19wYWdlXzggPSAxOworCWlmIChzY3NpX2lkLT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF9GSVhfQ0FQQUNJVFkpCisJCXNkZXYtPmZpeF9jYXBhY2l0eSA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0ODQsNiArMjU2MCw3IEBACiAJCShzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICopU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAJc3RydWN0IHNicDJzY3NpX2hvc3RfaW5mbyAqaGkgPSBzY3NpX2lkLT5oaTsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNvbW1hbmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCVNCUDJfRVJSKCJhYm9ydGluZyBzYnAyIGNvbW1hbmQiKTsKIAlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwpAQCAtMjQ5NCw2ICsyNTcxLDcgQEAKIAkJICogUmlnaHQgbm93LCBqdXN0IHJldHVybiBhbnkgbWF0Y2hpbmcgY29tbWFuZCBzdHJ1Y3R1cmVzCiAJCSAqIHRvIHRoZSBmcmVlIHBvb2wuCiAJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrLCBmbGFncyk7CiAJCWNvbW1hbmQgPSBzYnAydXRpbF9maW5kX2NvbW1hbmRfZm9yX1NDcG50KHNjc2lfaWQsIFNDcG50KTsKIAkJaWYgKGNvbW1hbmQpIHsKIAkJCVNCUDJfREVCVUcoIkZvdW5kIGNvbW1hbmQgdG8gYWJvcnQiKTsKQEAgLTI1MTEsNiArMjU4OSw3IEBACiAJCQkJY29tbWFuZC0+Q3VycmVudF9kb25lKGNvbW1hbmQtPkN1cnJlbnRfU0NwbnQpOwogCQkJfQogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCiAJCS8qCiAJCSAqIEluaXRpYXRlIGEgZmV0Y2ggYWdlbnQgcmVzZXQuCkBAIC0yNjA1LDcgKzI2ODQsOSBAQAogCQlzY3NpX2RyaXZlcl90ZW1wbGF0ZS5jbWRfcGVyX2x1biA9IDE7CiAJfQogCi0JLyogU2V0IG1heCBzZWN0b3JzIChtb2R1bGUgbG9hZCBvcHRpb24pLiBEZWZhdWx0IGlzIDI1NSBzZWN0b3JzLiAqLworCWlmIChzYnAyX2RlZmF1bHRfd29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMgJiYKKwkgICAgKG1heF9zZWN0b3JzICogNTEyKSA+ICgxMjggKiAxMDI0KSkKKwkJbWF4X3NlY3RvcnMgPSAxMjggKiAxMDI0IC8gNTEyOwogCXNjc2lfZHJpdmVyX3RlbXBsYXRlLm1heF9zZWN0b3JzID0gbWF4X3NlY3RvcnM7CiAKIAkvKiBSZWdpc3RlciBvdXIgaGlnaCBsZXZlbCBkcml2ZXIgd2l0aCAxMzk0IHN0YWNrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuaCBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCmluZGV4IGUyZDM1N2EuLmY0Y2NjOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCkBAIC0yMjcsMTEgKzIyNyw2IEBACiAjZGVmaW5lIFNCUDJfU1dfVkVSU0lPTl9FTlRSWQkJCQkJMHgwMDAxMDQ4MwogCiAvKgotICogT3RoZXIgbWlzYyBkZWZpbmVzCi0gKi8KLSNkZWZpbmUgU0JQMl8xMjhLQl9CUk9LRU5fRklSTVdBUkUJCQkJMHhhMGI4MDAKLQotLyoKICAqIFNDU0kgc3BlY2lmaWMgc3R1ZmYKICAqLwogCkBAIC0yMzksNiArMjM0LDEzIEBACiAjZGVmaW5lIFNCUDJfTUFYX1NFQ1RPUlMJCTI1NQkvKiBNYXggc2VjdG9ycyBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgU0JQMl9NQVhfQ01EUwkJCTgJLyogVGhpcyBzaG91bGQgYmUgc2FmZSAqLwogCisvKiBGbGFncyBmb3IgZGV0ZWN0ZWQgb2RkaXRpZXMgYW5kIGJyb2tlbmVzcyAqLworI2RlZmluZSBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMJMHgxCisjZGVmaW5lIFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2CTB4MgorI2RlZmluZSBTQlAyX1dPUktBUk9VTkRfTU9ERV9TRU5TRV84CTB4NAorI2RlZmluZSBTQlAyX1dPUktBUk9VTkRfRklYX0NBUEFDSVRZCTB4OAorI2RlZmluZSBTQlAyX1dPUktBUk9VTkRfT1ZFUlJJREUJMHgxMDAKKwogLyogVGhpcyBpcyB0aGUgdHdvIGRtYSB0eXBlcyB3ZSB1c2UgZm9yIGNtZF9kbWEgYmVsb3cgKi8KIGVudW0gY21kX2RtYV90eXBlcyB7CiAJQ01EX0RNQV9OT05FLApAQCAtMjY4LDEwICsyNzAsNiBAQAogCiB9OwogCi0vKiBBIGxpc3Qgb2YgZmxhZ3MgZm9yIGRldGVjdGVkIG9kZGl0aWVzIGFuZCBicm9rZW5lc3MuICovCi0jZGVmaW5lIFNCUDJfQlJFQUtBR0VfMTI4S19NQVhfVFJBTlNGRVIJCTB4MQotI2RlZmluZSBTQlAyX0JSRUFLQUdFX0lOUVVJUllfSEFDSwkJMHgyCi0KIHN0cnVjdCBzYnAyc2NzaV9ob3N0X2luZm87CiAKIC8qCkBAIC0zNDUsNyArMzQzLDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3Q7CiAKIAkvKiBEZXZpY2Ugc3BlY2lmaWMgd29ya2Fyb3VuZHMvYnJva2VuZXNzICovCi0JdTMyIHdvcmthcm91bmRzOworCXVuc2lnbmVkIHdvcmthcm91bmRzOwogfTsKIAogLyogU2JwMiBob3N0IGRhdGEgc3RydWN0dXJlIChvbmUgcGVyIElFRUUxMzk0IGhvc3QpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCmluZGV4IGJkZjA4OTEuLmFmYzYxMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCkBAIC0zMCw2ICszMCw3IEBACiAJICA8aHR0cDovL3d3dy5vcGVuaWIub3JnPi4KIAogc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvTWFrZWZpbGUgYi9kcml2ZXJzL2luZmluaWJhbmQvTWFrZWZpbGUKaW5kZXggYTQzZmIzNC4uZWVhMjczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai0kKENPTkZJR19JTkZJTklCQU5EKQkJKz0gY29yZS8KIG9iai0kKENPTkZJR19JTkZJTklCQU5EX01USENBKQkJKz0gaHcvbXRoY2EvCitvYmotJChDT05GSUdfSVBBVEhfQ09SRSkJCSs9IGh3L2lwYXRoLwogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfSVBPSUIpCQkrPSB1bHAvaXBvaWIvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9TUlApCQkrPSB1bHAvc3JwLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMKaW5kZXggYzU3YTM4Ny4uNTAzNjRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAkJa21hbGxvYyhzaXplb2YgKmRldmljZS0+Y2FjaGUucGtleV9jYWNoZSAqCiAJCQkoZW5kX3BvcnQoZGV2aWNlKSAtIHN0YXJ0X3BvcnQoZGV2aWNlKSArIDEpLCBHRlBfS0VSTkVMKTsKIAlkZXZpY2UtPmNhY2hlLmdpZF9jYWNoZSA9Ci0JCWttYWxsb2Moc2l6ZW9mICpkZXZpY2UtPmNhY2hlLnBrZXlfY2FjaGUgKgorCQlrbWFsbG9jKHNpemVvZiAqZGV2aWNlLT5jYWNoZS5naWRfY2FjaGUgKgogCQkJKGVuZF9wb3J0KGRldmljZSkgLSBzdGFydF9wb3J0KGRldmljZSkgKyAxKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWRldmljZS0+Y2FjaGUucGtleV9jYWNoZSB8fCAhZGV2aWNlLT5jYWNoZS5naWRfY2FjaGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IDdjZmVkYjguLjg2ZmVlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMzQsNiArMzQsOCBAQAogICoKICAqICRJZDogY20uYyAyODIxIDIwMDUtMDctMDggMTc6MDc6MjhaIHNlYW4uaGVmdHkgJAogICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KQEAgLTEyMiw3ICsxMjQsNyBAQAogCXN0cnVjdCByYl9ub2RlIHNlcnZpY2Vfbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSBzaWRyX2lkX25vZGU7CiAJc3BpbmxvY2tfdCBsb2NrOwkvKiBEbyBub3QgYWNxdWlyZSBpbnNpZGUgY20ubG9jayAqLwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKIAlhdG9taWNfdCByZWZjb3VudDsKIAogCXN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKm1zZzsKQEAgLTE1OSw3ICsxNjEsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGNtX2RlcmVmX2lkKHN0cnVjdCBjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2KQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjbV9pZF9wcml2LT5yZWZjb3VudCkpCi0JCXdha2VfdXAoJmNtX2lkX3ByaXYtPndhaXQpOworCQljb21wbGV0ZSgmY21faWRfcHJpdi0+Y29tcCk7CiB9CiAKIHN0YXRpYyBpbnQgY21fYWxsb2NfbXNnKHN0cnVjdCBjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2LApAQCAtNTU5LDcgKzU2MSw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAlzcGluX2xvY2tfaW5pdCgmY21faWRfcHJpdi0+bG9jayk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY21faWRfcHJpdi0+d2FpdCk7CisJaW5pdF9jb21wbGV0aW9uKCZjbV9pZF9wcml2LT5jb21wKTsKIAlJTklUX0xJU1RfSEVBRCgmY21faWRfcHJpdi0+d29ya19saXN0KTsKIAlhdG9taWNfc2V0KCZjbV9pZF9wcml2LT53b3JrX2NvdW50LCAtMSk7CiAJYXRvbWljX3NldCgmY21faWRfcHJpdi0+cmVmY291bnQsIDEpOwpAQCAtNzI0LDggKzcyNiw4IEBACiAJfQogCiAJY21fZnJlZV9pZChjbV9pZC0+bG9jYWxfaWQpOwotCWF0b21pY19kZWMoJmNtX2lkX3ByaXYtPnJlZmNvdW50KTsKLQl3YWl0X2V2ZW50KGNtX2lkX3ByaXYtPndhaXQsICFhdG9taWNfcmVhZCgmY21faWRfcHJpdi0+cmVmY291bnQpKTsKKwljbV9kZXJlZl9pZChjbV9pZF9wcml2KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjbV9pZF9wcml2LT5jb21wKTsKIAl3aGlsZSAoKHdvcmsgPSBjbV9kZXF1ZXVlX3dvcmsoY21faWRfcHJpdikpICE9IE5VTEwpCiAJCWNtX2ZyZWVfd29yayh3b3JrKTsKIAlpZiAoY21faWRfcHJpdi0+cHJpdmF0ZV9kYXRhICYmIGNtX2lkX3ByaXYtPnByaXZhdGVfZGF0YV9sZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IGJhNTRjODUuLjVhZDQxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC0yMjgsMTAgKzIyOCw3IEBACiAJCQkJZ290byBlcnJvcjE7CiAJCX0KIAkJLyogTWFrZSBzdXJlIGNsYXNzIHN1cHBsaWVkIGlzIGNvbnNpc3RlbnQgd2l0aCBSTVBQICovCi0JCWlmIChpYl9pc19tYWRfY2xhc3Nfcm1wcChtYWRfcmVnX3JlcS0+bWdtdF9jbGFzcykpIHsKLQkJCWlmICghcm1wcF92ZXJzaW9uKQotCQkJCWdvdG8gZXJyb3IxOwotCQl9IGVsc2UgeworCQlpZiAoIWliX2lzX21hZF9jbGFzc19ybXBwKG1hZF9yZWdfcmVxLT5tZ210X2NsYXNzKSkgewogCQkJaWYgKHJtcHBfdmVyc2lvbikKIAkJCQlnb3RvIGVycm9yMTsKIAkJfQpAQCAtMzU1LDcgKzM1Miw3IEBACiAJSU5JVF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfd29yaywgbG9jYWxfY29tcGxldGlvbnMsCiAJCSAgIG1hZF9hZ2VudF9wcml2KTsKIAlhdG9taWNfc2V0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQsIDEpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hZF9hZ2VudF9wcml2LT53YWl0KTsKKwlpbml0X2NvbXBsZXRpb24oJm1hZF9hZ2VudF9wcml2LT5jb21wKTsKIAogCXJldHVybiAmbWFkX2FnZW50X3ByaXYtPmFnZW50OwogCkBAIC00NzAsNyArNDY3LDcgQEAKIAltYWRfc25vb3BfcHJpdi0+YWdlbnQucXAgPSBwb3J0X3ByaXYtPnFwX2luZm9bcXBuXS5xcDsKIAltYWRfc25vb3BfcHJpdi0+YWdlbnQucG9ydF9udW0gPSBwb3J0X251bTsKIAltYWRfc25vb3BfcHJpdi0+bWFkX3Nub29wX2ZsYWdzID0gbWFkX3Nub29wX2ZsYWdzOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hZF9zbm9vcF9wcml2LT53YWl0KTsKKwlpbml0X2NvbXBsZXRpb24oJm1hZF9zbm9vcF9wcml2LT5jb21wKTsKIAltYWRfc25vb3BfcHJpdi0+c25vb3BfaW5kZXggPSByZWdpc3Rlcl9zbm9vcF9hZ2VudCgKIAkJCQkJCSZwb3J0X3ByaXYtPnFwX2luZm9bcXBuXSwKIAkJCQkJCW1hZF9zbm9vcF9wcml2KTsKQEAgLTQ4OSw2ICs0ODYsMTggQEAKIH0KIEVYUE9SVF9TWU1CT0woaWJfcmVnaXN0ZXJfbWFkX3Nub29wKTsKIAorc3RhdGljIGlubGluZSB2b2lkIGRlcmVmX21hZF9hZ2VudChzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUgKm1hZF9hZ2VudF9wcml2KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpKQorCQljb21wbGV0ZSgmbWFkX2FnZW50X3ByaXYtPmNvbXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVyZWZfc25vb3BfYWdlbnQoc3RydWN0IGliX21hZF9zbm9vcF9wcml2YXRlICptYWRfc25vb3BfcHJpdikKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWFkX3Nub29wX3ByaXYtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJm1hZF9zbm9vcF9wcml2LT5jb21wKTsKK30KKwogc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9tYWRfYWdlbnQoc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICptYWRfYWdlbnRfcHJpdikKIHsKIAlzdHJ1Y3QgaWJfbWFkX3BvcnRfcHJpdmF0ZSAqcG9ydF9wcml2OwpAQCAtNTEyLDkgKzUyMSw4IEBACiAJZmx1c2hfd29ya3F1ZXVlKHBvcnRfcHJpdi0+d3EpOwogCWliX2NhbmNlbF9ybXBwX3JlY3ZzKG1hZF9hZ2VudF9wcml2KTsKIAotCWF0b21pY19kZWMoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCk7Ci0Jd2FpdF9ldmVudChtYWRfYWdlbnRfcHJpdi0+d2FpdCwKLQkJICAgIWF0b21pY19yZWFkKCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpKTsKKwlkZXJlZl9tYWRfYWdlbnQobWFkX2FnZW50X3ByaXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1hZF9hZ2VudF9wcml2LT5jb21wKTsKIAogCWtmcmVlKG1hZF9hZ2VudF9wcml2LT5yZWdfcmVxKTsKIAlpYl9kZXJlZ19tcihtYWRfYWdlbnRfcHJpdi0+YWdlbnQubXIpOwpAQCAtNTMyLDkgKzU0MCw4IEBACiAJYXRvbWljX2RlYygmcXBfaW5mby0+c25vb3BfY291bnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwX2luZm8tPnNub29wX2xvY2ssIGZsYWdzKTsKIAotCWF0b21pY19kZWMoJm1hZF9zbm9vcF9wcml2LT5yZWZjb3VudCk7Ci0Jd2FpdF9ldmVudChtYWRfc25vb3BfcHJpdi0+d2FpdCwKLQkJICAgIWF0b21pY19yZWFkKCZtYWRfc25vb3BfcHJpdi0+cmVmY291bnQpKTsKKwlkZXJlZl9zbm9vcF9hZ2VudChtYWRfc25vb3BfcHJpdik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmbWFkX3Nub29wX3ByaXYtPmNvbXApOwogCiAJa2ZyZWUobWFkX3Nub29wX3ByaXYpOwogfQpAQCAtNjAzLDggKzYxMCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwX2luZm8tPnNub29wX2xvY2ssIGZsYWdzKTsKIAkJbWFkX3Nub29wX3ByaXYtPmFnZW50LnNub29wX2hhbmRsZXIoJm1hZF9zbm9vcF9wcml2LT5hZ2VudCwKIAkJCQkJCSAgICBzZW5kX2J1ZiwgbWFkX3NlbmRfd2MpOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWFkX3Nub29wX3ByaXYtPnJlZmNvdW50KSkKLQkJCXdha2VfdXAoJm1hZF9zbm9vcF9wcml2LT53YWl0KTsKKwkJZGVyZWZfc25vb3BfYWdlbnQobWFkX3Nub29wX3ByaXYpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcXBfaW5mby0+c25vb3BfbG9jaywgZmxhZ3MpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcF9pbmZvLT5zbm9vcF9sb2NrLCBmbGFncyk7CkBAIC02MjksOCArNjM1LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXBfaW5mby0+c25vb3BfbG9jaywgZmxhZ3MpOwogCQltYWRfc25vb3BfcHJpdi0+YWdlbnQucmVjdl9oYW5kbGVyKCZtYWRfc25vb3BfcHJpdi0+YWdlbnQsCiAJCQkJCQkgICBtYWRfcmVjdl93Yyk7Ci0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtYWRfc25vb3BfcHJpdi0+cmVmY291bnQpKQotCQkJd2FrZV91cCgmbWFkX3Nub29wX3ByaXYtPndhaXQpOworCQlkZXJlZl9zbm9vcF9hZ2VudChtYWRfc25vb3BfcHJpdik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZxcF9pbmZvLT5zbm9vcF9sb2NrLCBmbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwX2luZm8tPnNub29wX2xvY2ssIGZsYWdzKTsKQEAgLTk3MSw4ICs5NzYsNyBAQAogCiAJZnJlZV9zZW5kX3JtcHBfbGlzdChtYWRfc2VuZF93cik7CiAJa2ZyZWUoc2VuZF9idWYtPm1hZCk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCkpCi0JCXdha2VfdXAoJm1hZF9hZ2VudF9wcml2LT53YWl0KTsKKwlkZXJlZl9tYWRfYWdlbnQobWFkX2FnZW50X3ByaXYpOwogfQogRVhQT1JUX1NZTUJPTChpYl9mcmVlX3NlbmRfbWFkKTsKIApAQCAtMTc2MCw4ICsxNzY0LDcgQEAKIAkJbWFkX3JlY3Zfd2MgPSBpYl9wcm9jZXNzX3JtcHBfcmVjdl93YyhtYWRfYWdlbnRfcHJpdiwKIAkJCQkJCSAgICAgIG1hZF9yZWN2X3djKTsKIAkJaWYgKCFtYWRfcmVjdl93YykgewotCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCkpCi0JCQkJd2FrZV91cCgmbWFkX2FnZW50X3ByaXYtPndhaXQpOworCQkJZGVyZWZfbWFkX2FnZW50KG1hZF9hZ2VudF9wcml2KTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTE3NzMsOCArMTc3Niw3IEBACiAJCWlmICghbWFkX3NlbmRfd3IpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCQlpYl9mcmVlX3JlY3ZfbWFkKG1hZF9yZWN2X3djKTsKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpKQotCQkJCXdha2VfdXAoJm1hZF9hZ2VudF9wcml2LT53YWl0KTsKKwkJCWRlcmVmX21hZF9hZ2VudChtYWRfYWdlbnRfcHJpdik7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWJfbWFya19tYWRfZG9uZShtYWRfc2VuZF93cik7CkBAIC0xNzkzLDggKzE3OTUsNyBAQAogCX0gZWxzZSB7CiAJCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5yZWN2X2hhbmRsZXIoJm1hZF9hZ2VudF9wcml2LT5hZ2VudCwKIAkJCQkJCSAgIG1hZF9yZWN2X3djKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCkpCi0JCQl3YWtlX3VwKCZtYWRfYWdlbnRfcHJpdi0+d2FpdCk7CisJCWRlcmVmX21hZF9hZ2VudChtYWRfYWdlbnRfcHJpdik7CiAJfQogfQogCkBAIC0yMDI0LDggKzIwMjUsNyBAQAogCQkJCQkJICAgbWFkX3NlbmRfd2MpOwogCiAJLyogUmVsZWFzZSByZWZlcmVuY2Ugb24gYWdlbnQgdGFrZW4gd2hlbiBzZW5kaW5nICovCi0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCkpCi0JCXdha2VfdXAoJm1hZF9hZ2VudF9wcml2LT53YWl0KTsKKwlkZXJlZl9tYWRfYWdlbnQobWFkX2FnZW50X3ByaXYpOwogCXJldHVybjsKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFkX2FnZW50X3ByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTIzMTEsNiArMjMxMSw3IEBACiAJCWxvY2FsID0gbGlzdF9lbnRyeShtYWRfYWdlbnRfcHJpdi0+bG9jYWxfbGlzdC5uZXh0LAogCQkJCSAgIHN0cnVjdCBpYl9tYWRfbG9jYWxfcHJpdmF0ZSwKIAkJCQkgICBjb21wbGV0aW9uX2xpc3QpOworCQlsaXN0X2RlbCgmbG9jYWwtPmNvbXBsZXRpb25fbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWlmIChsb2NhbC0+bWFkX3ByaXYpIHsKIAkJCXJlY3ZfbWFkX2FnZW50ID0gbG9jYWwtPnJlY3ZfbWFkX2FnZW50OwpAQCAtMjM2Miw3ICsyMzYzLDYgQEAKIAkJCQkJCSAgICZtYWRfc2VuZF93Yyk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZGVsKCZsb2NhbC0+Y29tcGxldGlvbl9saXN0KTsKIAkJYXRvbWljX2RlYygmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KTsKIAkJaWYgKCFyZWN2KQogCQkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbG9jYWwtPm1hZF9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oCmluZGV4IDZjOWMxMzMuLmI0ZmEyOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaApAQCAtMzcsNiArMzcsNyBAQAogI2lmbmRlZiBfX0lCX01BRF9QUklWX0hfXwogI2RlZmluZSBfX0lCX01BRF9QUklWX0hfXwogCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTEwOCw3ICsxMDksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcm1wcF9saXN0OwogCiAJYXRvbWljX3QgcmVmY291bnQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwogfTsKIAogc3RydWN0IGliX21hZF9zbm9vcF9wcml2YXRlIHsKQEAgLTExNyw3ICsxMTgsNyBAQAogCWludCBzbm9vcF9pbmRleDsKIAlpbnQgbWFkX3Nub29wX2ZsYWdzOwogCWF0b21pY190IHJlZmNvdW50OwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKIH07CiAKIHN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCmluZGV4IGRmZDRlNTguLmQ0NzA0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwpAQCAtNDksNyArNDksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGltZW91dF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBjbGVhbnVwX3dvcms7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwogCWVudW0gcm1wcF9zdGF0ZSBzdGF0ZTsKIAlzcGlubG9ja190IGxvY2s7CiAJYXRvbWljX3QgcmVmY291bnQ7CkBAIC02OSwxMCArNjksMTYgQEAKIAl1OCBtZXRob2Q7CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgZGVyZWZfcm1wcF9yZWN2KHN0cnVjdCBtYWRfcm1wcF9yZWN2ICpybXBwX3JlY3YpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJtcHBfcmVjdi0+cmVmY291bnQpKQorCQljb21wbGV0ZSgmcm1wcF9yZWN2LT5jb21wKTsKK30KKwogc3RhdGljIHZvaWQgZGVzdHJveV9ybXBwX3JlY3Yoc3RydWN0IG1hZF9ybXBwX3JlY3YgKnJtcHBfcmVjdikKIHsKLQlhdG9taWNfZGVjKCZybXBwX3JlY3YtPnJlZmNvdW50KTsKLQl3YWl0X2V2ZW50KHJtcHBfcmVjdi0+d2FpdCwgIWF0b21pY19yZWFkKCZybXBwX3JlY3YtPnJlZmNvdW50KSk7CisJZGVyZWZfcm1wcF9yZWN2KHJtcHBfcmVjdik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmcm1wcF9yZWN2LT5jb21wKTsKIAlpYl9kZXN0cm95X2FoKHJtcHBfcmVjdi0+YWgpOwogCWtmcmVlKHJtcHBfcmVjdik7CiB9CkBAIC0yNTMsNyArMjU5LDcgQEAKIAkJZ290byBlcnJvcjsKIAogCXJtcHBfcmVjdi0+YWdlbnQgPSBhZ2VudDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZybXBwX3JlY3YtPndhaXQpOworCWluaXRfY29tcGxldGlvbigmcm1wcF9yZWN2LT5jb21wKTsKIAlJTklUX1dPUksoJnJtcHBfcmVjdi0+dGltZW91dF93b3JrLCByZWN2X3RpbWVvdXRfaGFuZGxlciwgcm1wcF9yZWN2KTsKIAlJTklUX1dPUksoJnJtcHBfcmVjdi0+Y2xlYW51cF93b3JrLCByZWN2X2NsZWFudXBfaGFuZGxlciwgcm1wcF9yZWN2KTsKIAlzcGluX2xvY2tfaW5pdCgmcm1wcF9yZWN2LT5sb2NrKTsKQEAgLTI3OSwxMiArMjg1LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlcmVmX3JtcHBfcmVjdihzdHJ1Y3QgbWFkX3JtcHBfcmVjdiAqcm1wcF9yZWN2KQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZybXBwX3JlY3YtPnJlZmNvdW50KSkKLQkJd2FrZV91cCgmcm1wcF9yZWN2LT53YWl0KTsKLX0KLQogc3RhdGljIHN0cnVjdCBtYWRfcm1wcF9yZWN2ICoKIGZpbmRfcm1wcF9yZWN2KHN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqYWdlbnQsCiAJICAgICAgIHN0cnVjdCBpYl9tYWRfcmVjdl93YyAqbWFkX3JlY3Zfd2MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwppbmRleCAxNTEyMWNiLi4yMWY5MjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKQEAgLTMzNiw3ICszMzYsNyBAQAogCXN3aXRjaCAod2lkdGgpIHsKIAljYXNlIDQ6CiAJCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIChvdXRfbWFkLT5kYXRhWzQwICsgb2Zmc2V0IC8gOF0gPj4KLQkJCQkJICAgIChvZmZzZXQgJSA0KSkgJiAweGYpOworCQkJCQkgICAgKDQgLSAob2Zmc2V0ICUgOCkpKSAmIDB4Zik7CiAJCWJyZWFrOwogCWNhc2UgODoKIAkJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgb3V0X21hZC0+ZGF0YVs0MCArIG9mZnNldCAvIDhdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKaW5kZXggZjZhMDU5Ni4uOTE2NGEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKQEAgLTMyLDYgKzMyLDggQEAKICAqCiAgKiAkSWQ6IHVjbS5jIDI1OTQgMjAwNS0wNi0xMyAxOTo0NjowMlogbGlib3IgJAogICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC03Miw3ICs3NCw3IEBACiAKIHN0cnVjdCBpYl91Y21fY29udGV4dCB7CiAJaW50ICAgICAgICAgICAgICAgICBpZDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgIHdhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gICBjb21wOwogCWF0b21pY190ICAgICAgICAgICAgcmVmOwogCWludAkJICAgIGV2ZW50c19yZXBvcnRlZDsKIApAQCAtMTM4LDcgKzE0MCw3IEBACiBzdGF0aWMgdm9pZCBpYl91Y21fY3R4X3B1dChzdHJ1Y3QgaWJfdWNtX2NvbnRleHQgKmN0eCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3R4LT5yZWYpKQotCQl3YWtlX3VwKCZjdHgtPndhaXQpOworCQljb21wbGV0ZSgmY3R4LT5jb21wKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaWJfdWNtX25ld19jbV9pZChpbnQgZXZlbnQpCkBAIC0xNzgsNyArMTgwLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlhdG9taWNfc2V0KCZjdHgtPnJlZiwgMSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY3R4LT53YWl0KTsKKwlpbml0X2NvbXBsZXRpb24oJmN0eC0+Y29tcCk7CiAJY3R4LT5maWxlID0gZmlsZTsKIAlJTklUX0xJU1RfSEVBRCgmY3R4LT5ldmVudHMpOwogCkBAIC01ODYsOCArNTg4LDggQEAKIAlpZiAoSVNfRVJSKGN0eCkpCiAJCXJldHVybiBQVFJfRVJSKGN0eCk7CiAKLQlhdG9taWNfZGVjKCZjdHgtPnJlZik7Ci0Jd2FpdF9ldmVudChjdHgtPndhaXQsICFhdG9taWNfcmVhZCgmY3R4LT5yZWYpKTsKKwlpYl91Y21fY3R4X3B1dChjdHgpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmN0eC0+Y29tcCk7CiAKIAkvKiBObyBuZXcgZXZlbnRzIHdpbGwgYmUgZ2VuZXJhdGVkIGFmdGVyIGRlc3Ryb3lpbmcgdGhlIGNtX2lkLiAqLwogCWliX2Rlc3Ryb3lfY21faWQoY3R4LT5jbV9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWVtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWVtLmMKaW5kZXggMzZhMzJjMy4uZWZlMTQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tZW0uYwpAQCAtMjExLDggKzIxMSwxMCBAQAogCSAqLwogCiAJd29yayA9IGttYWxsb2Moc2l6ZW9mICp3b3JrLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdvcmspCisJaWYgKCF3b3JrKSB7CisJCW1tcHV0KG1tKTsKIAkJcmV0dXJuOworCX0KIAogCUlOSVRfV09SSygmd29yay0+d29yaywgaWJfdW1lbV9hY2NvdW50LCB3b3JrKTsKIAl3b3JrLT5tbSAgID0gbW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwppbmRleCBjYWUwODQ1Li5iNzhlN2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKQEAgLTQ1LDYgKzQ1LDQwIEBACiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgogI2luY2x1ZGUgPHJkbWEvaWJfY2FjaGUuaD4KIAoraW50IGliX3JhdGVfdG9fbXVsdChlbnVtIGliX3JhdGUgcmF0ZSkKK3sKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIElCX1JBVEVfMl81X0dCUFM6IHJldHVybiAgMTsKKwljYXNlIElCX1JBVEVfNV9HQlBTOiAgIHJldHVybiAgMjsKKwljYXNlIElCX1JBVEVfMTBfR0JQUzogIHJldHVybiAgNDsKKwljYXNlIElCX1JBVEVfMjBfR0JQUzogIHJldHVybiAgODsKKwljYXNlIElCX1JBVEVfMzBfR0JQUzogIHJldHVybiAxMjsKKwljYXNlIElCX1JBVEVfNDBfR0JQUzogIHJldHVybiAxNjsKKwljYXNlIElCX1JBVEVfNjBfR0JQUzogIHJldHVybiAyNDsKKwljYXNlIElCX1JBVEVfODBfR0JQUzogIHJldHVybiAzMjsKKwljYXNlIElCX1JBVEVfMTIwX0dCUFM6IHJldHVybiA0ODsKKwlkZWZhdWx0OgkgICAgICAgcmV0dXJuIC0xOworCX0KK30KK0VYUE9SVF9TWU1CT0woaWJfcmF0ZV90b19tdWx0KTsKKworZW51bSBpYl9yYXRlIG11bHRfdG9faWJfcmF0ZShpbnQgbXVsdCkKK3sKKwlzd2l0Y2ggKG11bHQpIHsKKwljYXNlIDE6ICByZXR1cm4gSUJfUkFURV8yXzVfR0JQUzsKKwljYXNlIDI6ICByZXR1cm4gSUJfUkFURV81X0dCUFM7CisJY2FzZSA0OiAgcmV0dXJuIElCX1JBVEVfMTBfR0JQUzsKKwljYXNlIDg6ICByZXR1cm4gSUJfUkFURV8yMF9HQlBTOworCWNhc2UgMTI6IHJldHVybiBJQl9SQVRFXzMwX0dCUFM7CisJY2FzZSAxNjogcmV0dXJuIElCX1JBVEVfNDBfR0JQUzsKKwljYXNlIDI0OiByZXR1cm4gSUJfUkFURV82MF9HQlBTOworCWNhc2UgMzI6IHJldHVybiBJQl9SQVRFXzgwX0dCUFM7CisJY2FzZSA0ODogcmV0dXJuIElCX1JBVEVfMTIwX0dCUFM7CisJZGVmYXVsdDogcmV0dXJuIElCX1JBVEVfUE9SVF9DVVJSRU5UOworCX0KK30KK0VYUE9SVF9TWU1CT0wobXVsdF90b19pYl9yYXRlKTsKKwogLyogUHJvdGVjdGlvbiBkb21haW5zICovCiAKIHN0cnVjdCBpYl9wZCAqaWJfYWxsb2NfcGQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE2N2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcKQEAgLTAsMCArMSwxNiBAQAorY29uZmlnIElQQVRIX0NPUkUKKwl0cmlzdGF0ZSAiUGF0aFNjYWxlIEluZmluaVBhdGggRHJpdmVyIgorCWRlcGVuZHMgb24gNjRCSVQgJiYgUENJX01TSSAmJiBORVQKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGxvdy1sZXZlbCBkcml2ZXIgZm9yIFBhdGhTY2FsZSBJbmZpbmlQYXRoIGhvc3QgY2hhbm5lbAorCWFkYXB0ZXJzIChIQ0FzKSBiYXNlZCBvbiB0aGUgSFQtNDAwIGFuZCBQRS04MDAgY2hpcHMuCisKK2NvbmZpZyBJTkZJTklCQU5EX0lQQVRICisJdHJpc3RhdGUgIlBhdGhTY2FsZSBJbmZpbmlQYXRoIFZlcmJzIERyaXZlciIKKwlkZXBlbmRzIG9uIElQQVRIX0NPUkUgJiYgSU5GSU5JQkFORAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgZHJpdmVyIHRoYXQgcHJvdmlkZXMgSW5maW5pQmFuZCB2ZXJicyBzdXBwb3J0IGZvcgorCVBhdGhTY2FsZSBJbmZpbmlQYXRoIGhvc3QgY2hhbm5lbCBhZGFwdGVycyAoSENBcykuICBUaGlzCisJYWxsb3dzIHRoZXNlIGRldmljZXMgdG8gYmUgdXNlZCB3aXRoIGJvdGgga2VybmVsIHVwcGVyIGxldmVsCisJcHJvdG9jb2xzIHN1Y2ggYXMgSVAtb3Zlci1JbmZpbmlCYW5kIGFzIHdlbGwgYXMgd2l0aCB1c2Vyc3BhY2UKKwlhcHBsaWNhdGlvbnMgKGluIGNvbmp1bmN0aW9uIHdpdGggSW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQwODRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlCkBAIC0wLDAgKzEsMzYgQEAKK0VYVFJBX0NGTEFHUyArPSAtRElQQVRIX0lEU1RSPSciUGF0aFNjYWxlIGtlcm5lbC5vcmcgZHJpdmVyIicgXAorCS1ESVBBVEhfS0VSTl9UWVBFPTAKKworb2JqLSQoQ09ORklHX0lQQVRIX0NPUkUpICs9IGlwYXRoX2NvcmUubworb2JqLSQoQ09ORklHX0lORklOSUJBTkRfSVBBVEgpICs9IGliX2lwYXRoLm8KKworaXBhdGhfY29yZS15IDo9IFwKKwlpcGF0aF9kaWFnLm8gXAorCWlwYXRoX2RyaXZlci5vIFwKKwlpcGF0aF9lZXByb20ubyBcCisJaXBhdGhfZmlsZV9vcHMubyBcCisJaXBhdGhfZnMubyBcCisJaXBhdGhfaHQ0MDAubyBcCisJaXBhdGhfaW5pdF9jaGlwLm8gXAorCWlwYXRoX2ludHIubyBcCisJaXBhdGhfbGF5ZXIubyBcCisJaXBhdGhfcGU4MDAubyBcCisJaXBhdGhfc3RhdHMubyBcCisJaXBhdGhfc3lzZnMubyBcCisJaXBhdGhfdXNlcl9wYWdlcy5vCisKK2lwYXRoX2NvcmUtJChDT05GSUdfWDg2XzY0KSArPSBpcGF0aF93Y194ODZfNjQubworCitpYl9pcGF0aC15IDo9IFwKKwlpcGF0aF9jcS5vIFwKKwlpcGF0aF9rZXlzLm8gXAorCWlwYXRoX21hZC5vIFwKKwlpcGF0aF9tci5vIFwKKwlpcGF0aF9xcC5vIFwKKwlpcGF0aF9yYy5vIFwKKwlpcGF0aF9ydWMubyBcCisJaXBhdGhfc3JxLm8gXAorCWlwYXRoX3VjLm8gXAorCWlwYXRoX3VkLm8gXAorCWlwYXRoX3ZlcmJzLm8gXAorCWlwYXRoX3ZlcmJzX21jYXN0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jb21tb24uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGE1NTI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NvbW1vbi5oCkBAIC0wLDAgKzEsNjE2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfSVBBVEhfQ09NTU9OX0gKKyNkZWZpbmUgX0lQQVRIX0NPTU1PTl9ICisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5lcywgc3RydWN0dXJlcywgZXRjLiB0aGF0IGFyZSB1c2VkCisgKiB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBjb2RlLgorICovCisKKy8qIFRoaXMgaXMgdGhlIElFRUUtYXNzaWduZWQgT1VJIGZvciBQYXRoU2NhbGUsIEluYy4gKi8KKyNkZWZpbmUgSVBBVEhfU1JDX09VSV8xIDB4MDAKKyNkZWZpbmUgSVBBVEhfU1JDX09VSV8yIDB4MTEKKyNkZWZpbmUgSVBBVEhfU1JDX09VSV8zIDB4NzUKKworLyogdmVyc2lvbiBvZiBwcm90b2NvbCBoZWFkZXIgKGtub3duIHRvIGNoaXAgYWxzbykuIEluIHRoZSBsb25nIHJ1biwKKyAqIHdlIHNob3VsZCBiZSBhYmxlIHRvIGdlbmVyYXRlIGFuZCBhY2NlcHQgYSByYW5nZSBvZiB2ZXJzaW9uIG51bWJlcnM7CisgKiBmb3Igbm93IHdlIG9ubHkgYWNjZXB0IG9uZSwgYW5kIGl0J3MgY29tcGlsZWQgaW4uCisgKi8KKyNkZWZpbmUgSVBTX1BST1RPX1ZFUlNJT04gMgorCisvKgorICogVGhlc2UgYXJlIGNvbXBpbGUgdGltZSBjb25zdGFudHMgdGhhdCB5b3UgbWF5IHdhbnQgdG8gZW5hYmxlIG9yIGRpc2FibGUKKyAqIGlmIHlvdSBhcmUgdHJ5aW5nIHRvIGRlYnVnIHByb2JsZW1zIHdpdGggY29kZSBvciBwZXJmb3JtYW5jZS4KKyAqIElQQVRIX1ZFUkJPU0VfVFJBQ0lORyBkZWZpbmUgYXMgMSBpZiB5b3Ugd2FudCBhZGRpdGlvbmFsIHRyYWNpbmcgaW4KKyAqIGZhc3RwYXRoIGNvZGUKKyAqIElQQVRIX1RSQUNFX1JFR1dSSVRFUyBkZWZpbmUgYXMgMSBpZiB5b3Ugd2FudCByZWdpc3RlciB3cml0ZXMgdG8gYmUKKyAqIHRyYWNlZCBpbiBmYXNwYXRoIGNvZGUKKyAqIF9JUEFUSF9UUkFDSU5HIGRlZmluZSBhcyAwIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgdHJhY2luZyBpbiBhCisgKiBjb21waWxhdGlvbiB1bml0CisgKiBfSVBBVEhfREVCVUdHSU5HIGRlZmluZSBhcyAwIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBkZWJ1ZyBwcmludHMKKyAqLworCisvKgorICogVGhlIHZhbHVlIGluIHRoZSBCVEggUVAgZmllbGQgdGhhdCBJbmZpbmlQYXRoIHVzZXMgdG8gZGlmZmVyZW50aWF0ZQorICogYW4gaW5maW5pcGF0aCBwcm90b2NvbCBJQiBwYWNrZXQgdnMgc3RhbmRhcmQgSUIgdHJhbnNwb3J0CisgKi8KKyNkZWZpbmUgSVBBVEhfS0RfUVAgMHg2NTZiNzkKKworLyoKKyAqIHZhbGlkIHN0YXRlcyBwYXNzZWQgdG8gaXBhdGhfc2V0X2xpbmtzdGF0ZSgpIHVzZXIgY2FsbAorICovCisjZGVmaW5lIElQQVRIX0lCX0xJTktET1dOCQkwCisjZGVmaW5lIElQQVRIX0lCX0xJTktBUk0JCTEKKyNkZWZpbmUgSVBBVEhfSUJfTElOS0FDVElWRQkJMgorI2RlZmluZSBJUEFUSF9JQl9MSU5LSU5JVAkJMworI2RlZmluZSBJUEFUSF9JQl9MSU5LRE9XTl9TTEVFUAkJNAorI2RlZmluZSBJUEFUSF9JQl9MSU5LRE9XTl9ESVNBQkxFCTUKKworLyoKKyAqIHN0YXRzIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci4gIEZvciBub3csIGF0IGxlYXN0LCB0aGlzIGlzIGdsb2JhbAorICogdG8gYWxsIG1pbm9yIGRldmljZXMuCisgKi8KK3N0cnVjdCBpbmZpbmlwYXRoX3N0YXRzIHsKKwkvKiBudW1iZXIgb2YgaW50ZXJydXB0cyB0YWtlbiAqLworCV9fdTY0IHNwc19pbnRzOworCS8qIG51bWJlciBvZiBpbnRlcnJ1cHRzIGZvciBlcnJvcnMgKi8KKwlfX3U2NCBzcHNfZXJyaW50czsKKwkvKiBudW1iZXIgb2YgZXJyb3JzIGZyb20gY2hpcCAobm90IGluY2wuIHBhY2tldCBlcnJvcnMgb3IgQ1JDKSAqLworCV9fdTY0IHNwc19lcnJzOworCS8qIG51bWJlciBvZiBwYWNrZXQgZXJyb3JzIGZyb20gY2hpcCBvdGhlciB0aGFuIENSQyAqLworCV9fdTY0IHNwc19wa3RlcnJzOworCS8qIG51bWJlciBvZiBwYWNrZXRzIHdpdGggQ1JDIGVycm9ycyAoSUNSQyBhbmQgVkNSQykgKi8KKwlfX3U2NCBzcHNfY3JjZXJyczsKKwkvKiBudW1iZXIgb2YgaGFyZHdhcmUgZXJyb3JzIHJlcG9ydGVkIChwYXJpdHksIGV0Yy4pICovCisJX191NjQgc3BzX2h3ZXJyczsKKwkvKiBudW1iZXIgb2YgdGltZXMgSUIgbGluayBjaGFuZ2VkIHN0YXRlIHVuZXhwZWN0ZWRseSAqLworCV9fdTY0IHNwc19pYmxpbms7CisJLyogbm8gbG9uZ2VyIHVzZWQ7IGxlZnQgZm9yIGNvbXBhdGliaWxpdHkgKi8KKwlfX3U2NCBzcHNfdW51c2VkMzsKKwkvKiBudW1iZXIgb2Yga2VybmVsIChwb3J0MCkgcGFja2V0cyByZWNlaXZlZCAqLworCV9fdTY0IHNwc19wb3J0MHBrdHM7CisJLyogbnVtYmVyIG9mICJldGhlcm5ldCIgcGFja2V0cyBzZW50IGJ5IGRyaXZlciAqLworCV9fdTY0IHNwc19ldGhlcl9zcGt0czsKKwkvKiBudW1iZXIgb2YgImV0aGVybmV0IiBwYWNrZXRzIHJlY2VpdmVkIGJ5IGRyaXZlciAqLworCV9fdTY0IHNwc19ldGhlcl9ycGt0czsKKwkvKiBudW1iZXIgb2YgU01BIHBhY2tldHMgc2VudCBieSBkcml2ZXIgKi8KKwlfX3U2NCBzcHNfc21hX3Nwa3RzOworCS8qIG51bWJlciBvZiBTTUEgcGFja2V0cyByZWNlaXZlZCBieSBkcml2ZXIgKi8KKwlfX3U2NCBzcHNfc21hX3Jwa3RzOworCS8qIG51bWJlciBvZiB0aW1lcyBhbGwgcG9ydHMgcmN2aGRycSB3YXMgZnVsbCBhbmQgcGFja2V0IGRyb3BwZWQgKi8KKwlfX3U2NCBzcHNfaGRycWZ1bGw7CisJLyogbnVtYmVyIG9mIHRpbWVzIGFsbCBwb3J0cyBlZ3J0aWQgd2FzIGZ1bGwgYW5kIHBhY2tldCBkcm9wcGVkICovCisJX191NjQgc3BzX2V0aWRmdWxsOworCS8qCisJICogbnVtYmVyIG9mIHRpbWVzIHdlIHRyaWVkIHRvIHNlbmQgZnJvbSBkcml2ZXIsIGJ1dCBubyBwaW8gYnVmZmVycworCSAqIGF2YWlsCisJICovCisJX191NjQgc3BzX25vcGlvYnVmczsKKwkvKiBudW1iZXIgb2YgcG9ydHMgY3VycmVudGx5IG9wZW4gKi8KKwlfX3U2NCBzcHNfcG9ydHM7CisJLyogbGlzdCBvZiBwa2V5cyAob3RoZXIgdGhhbiBkZWZhdWx0KSBhY2NlcHRlZCAoMCBtZWFucyBub3Qgc2V0KSAqLworCV9fdTE2IHNwc19wa2V5c1s0XTsKKwkvKiBsaWRzIGZvciB1cCB0byA0IGluZmluaXBhdGhzLCBpbmRleGVkIGJ5IGluZmluaXBhdGggIyAqLworCV9fdTE2IHNwc19saWRbNF07CisJLyogbnVtYmVyIG9mIHVzZXIgcG9ydHMgcGVyIGNoaXAgKG5vdCBJQiBwb3J0cykgKi8KKwlfX3UzMiBzcHNfbnBvcnRzOworCS8qIG5vdCBvdXIgaW50ZXJydXB0LCBvciBhbHJlYWR5IGhhbmRsZWQgKi8KKwlfX3UzMiBzcHNfbnVsbGludHI7CisJLyogbWF4IG51bWJlciBvZiBwYWNrZXRzIGhhbmRsZWQgcGVyIHJlY2VpdmUgY2FsbCAqLworCV9fdTMyIHNwc19tYXhwa3RzX2NhbGw7CisJLyogYXZnIG51bWJlciBvZiBwYWNrZXRzIGhhbmRsZWQgcGVyIHJlY2VpdmUgY2FsbCAqLworCV9fdTMyIHNwc19hdmdwa3RzX2NhbGw7CisJLyogdG90YWwgbnVtYmVyIG9mIHBhZ2VzIGxvY2tlZCAqLworCV9fdTY0IHNwc19wYWdlbG9ja3M7CisJLyogdG90YWwgbnVtYmVyIG9mIHBhZ2VzIHVubG9ja2VkICovCisJX191NjQgc3BzX3BhZ2V1bmxvY2tzOworCS8qCisJICogTnVtYmVyIG9mIHBhY2tldHMgZHJvcHBlZCBpbiBrZXJuZWwgb3RoZXIgdGhhbiBlcnJvcnMgKGV0aGVyCisJICogcGFja2V0cyBpZiBpcGF0aCBub3QgY29uZmlndXJlZCwgc21hL21hZCwgZXRjLikKKwkgKi8KKwlfX3U2NCBzcHNfa3Jkcm9wczsKKwkvKiBtbGlkcyBmb3IgdXAgdG8gNCBpbmZpbmlwYXRocywgaW5kZXhlZCBieSBpbmZpbmlwYXRoICMgKi8KKwlfX3UxNiBzcHNfbWxpZFs0XTsKKwkvKiBwYWQgZm9yIGZ1dHVyZSBncm93dGggKi8KKwlfX3U2NCBfX3Nwc19wYWRbNDVdOworfTsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgc3RhdHVzIGJpdHMgcmVhZGFibGUgKGluIGFzY2lpIGZvcm0sIDY0Yml0IHZhbHVlKQorICogZnJvbSB0aGUgInN0YXR1cyIgc3lzZnMgZmlsZS4KKyAqLworI2RlZmluZSBJUEFUSF9TVEFUVVNfSU5JVFRFRCAgICAgICAweDEJLyogYmFzaWMgaW5pdGlhbGl6YXRpb24gZG9uZSAqLworI2RlZmluZSBJUEFUSF9TVEFUVVNfRElTQUJMRUQgICAgICAweDIJLyogaGFyZHdhcmUgZGlzYWJsZWQgKi8KKy8qIERldmljZSBoYXMgYmVlbiBkaXNhYmxlZCB2aWEgYWRtaW4gcmVxdWVzdCAqLworI2RlZmluZSBJUEFUSF9TVEFUVVNfQURNSU5fRElTQUJMRUQgICAgMHg0CisjZGVmaW5lIElQQVRIX1NUQVRVU19PSUJfU01BICAgICAgIDB4OAkvKiBpcGF0aF9tYWQga2VybmVsIFNNQSBydW5uaW5nICovCisjZGVmaW5lIElQQVRIX1NUQVRVU19TTUEgICAgICAgICAgMHgxMAkvKiB1c2VyIFNNQSBydW5uaW5nICovCisvKiBDaGlwIGhhcyBiZWVuIGZvdW5kIGFuZCBpbml0dGVkICovCisjZGVmaW5lIElQQVRIX1NUQVRVU19DSElQX1BSRVNFTlQgMHgyMAorLyogSUIgbGluayBpcyBhdCBBQ1RJVkUsIHVzYWJsZSBmb3IgZGF0YSB0cmFmZmljICovCisjZGVmaW5lIElQQVRIX1NUQVRVU19JQl9SRUFEWSAgICAgMHg0MAorLyogbGluayBpcyBjb25maWd1cmVkLCBMSUQsIE1UVSwgZXRjLiBoYXZlIGJlZW4gc2V0ICovCisjZGVmaW5lIElQQVRIX1NUQVRVU19JQl9DT05GICAgICAgMHg4MAorLyogbm8gbGluayBlc3RhYmxpc2hlZCwgcHJvYmFibHkgbm8gY2FibGUgKi8KKyNkZWZpbmUgSVBBVEhfU1RBVFVTX0lCX05PQ0FCTEUgIDB4MTAwCisvKiBBIEZhdGFsIGhhcmR3YXJlIGVycm9yIGhhcyBvY2N1cnJlZC4gKi8KKyNkZWZpbmUgSVBBVEhfU1RBVFVTX0hXRVJST1IgICAgIDB4MjAwCisKKy8qCisgKiBUaGUgbGlzdCBvZiB1c2VybW9kZSBhY2Nlc3NpYmxlIHJlZ2lzdGVycy4gIEFsc28gc2VlIFJlZ18qIGxhdGVyIGluIGZpbGUuCisgKi8KK3R5cGVkZWYgZW51bSBfaXBhdGhfdXJlZyB7CisJLyogKFJPKSAgRE1BIFJjdkhkciB0byBiZSB1c2VkIG5leHQuICovCisJdXJfcmN2aGRydGFpbCA9IDAsCisJLyogKFJXKSAgUmN2SGRyIGVudHJ5IHRvIGJlIHByb2Nlc3NlZCBuZXh0IGJ5IGhvc3QuICovCisJdXJfcmN2aGRyaGVhZCA9IDEsCisJLyogKFJPKSAgSW5kZXggb2YgbmV4dCBFYWdlciBpbmRleCB0byB1c2UuICovCisJdXJfcmN2ZWdyaW5kZXh0YWlsID0gMiwKKwkvKiAoUlcpICBFYWdlciBUSUQgdG8gYmUgcHJvY2Vzc2VkIG5leHQgKi8KKwl1cl9yY3ZlZ3JpbmRleGhlYWQgPSAzLAorCS8qIEZvciBpbnRlcm5hbCB1c2Ugb25seTsgbWF4IHJlZ2lzdGVyIG51bWJlci4gKi8KKwlfSVBBVEhfVXJlZ01heAorfSBpcGF0aF91cmVnOworCisvKiBiaXQgdmFsdWVzIGZvciBzcGlfcnVudGltZV9mbGFncyAqLworI2RlZmluZSBJUEFUSF9SVU5USU1FX0hUCTB4MQorI2RlZmluZSBJUEFUSF9SVU5USU1FX1BDSUUJMHgyCisjZGVmaW5lIElQQVRIX1JVTlRJTUVfRk9SQ0VfV0NfT1JERVIJMHg0CisjZGVmaW5lIElQQVRIX1JVTlRJTUVfUkNWSERSX0NPUFkJMHg4CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyByZXR1cm5lZCBieSBpcGF0aF91c2VyaW5pdCgpIGltbWVkaWF0ZWx5IGFmdGVyCisgKiBvcGVuIHRvIGdldCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBpbmZvLCBhbmQgaW5mbyBzcGVjaWZpYyB0byB0aGlzCisgKiBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHN0cnVjdCBtdXN0IGhhdmUgZXhwbGljdCBwYWQgZmllbGRzIHdoZXJlIHR5cGUgc2l6ZXMKKyAqIG1heSByZXN1bHQgaW4gZGlmZmVyZW50IGFsaWdubWVudHMgYmV0d2VlbiAzMiBhbmQgNjQgYml0CisgKiBwcm9ncmFtcywgc2luY2UgdGhlIDY0IGJpdCAqIGJpdCBrZXJuZWwgcmVxdWlyZXMgdGhlIHVzZXIgY29kZQorICogdG8gaGF2ZSBtYXRjaGluZyBvZmZzZXRzCisgKi8KK3N0cnVjdCBpcGF0aF9iYXNlX2luZm8geworCS8qIHZlcnNpb24gb2YgaGFyZHdhcmUsIGZvciBmZWF0dXJlIGNoZWNraW5nLiAqLworCV9fdTMyIHNwaV9od192ZXJzaW9uOworCS8qIHZlcnNpb24gb2Ygc29mdHdhcmUsIGZvciBmZWF0dXJlIGNoZWNraW5nLiAqLworCV9fdTMyIHNwaV9zd192ZXJzaW9uOworCS8qIEluZmluaVBhdGggcG9ydCBhc3NpZ25lZCwgZ29lcyBpbnRvIHNlbnQgcGFja2V0cyAqLworCV9fdTMyIHNwaV9wb3J0OworCS8qCisJICogSUIgTVRVLCBwYWNrZXRzIElCIGRhdGEgbXVzdCBiZSBsZXNzIHRoYW4gdGhpcy4KKwkgKiBUaGUgTVRVIGlzIGluIGJ5dGVzLCBhbmQgd2lsbCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuCisJICovCisJX191MzIgc3BpX210dTsKKwkvKgorCSAqIFNpemUgb2YgYSBQSU8gYnVmZmVyLiAgQW55IGdpdmVuIHBhY2tldCdzIHRvdGFsIHNpemUgbXVzdCBiZSBsZXNzCisJICogdGhhbiB0aGlzIChpbiB3b3JkcykuICBJbmNsdWRlZCBpcyB0aGUgc3RhcnRpbmcgY29udHJvbCB3b3JkLCBzbworCSAqIGlmIDUxMyBpcyByZXR1cm5lZCwgdGhlbiB0b3RhbCBwa3Qgc2l6ZSBpcyA1MTIgd29yZHMgb3IgbGVzcy4KKwkgKi8KKwlfX3UzMiBzcGlfcGlvc2l6ZTsKKwkvKiBzaXplIG9mIHRoZSBUSUQgY2FjaGUgaW4gaW5maW5pcGF0aCwgaW4gZW50cmllcyAqLworCV9fdTMyIHNwaV90aWRjbnQ7CisJLyogc2l6ZSBvZiB0aGUgVElEIEVhZ2VyIGxpc3QgaW4gaW5maW5pcGF0aCwgaW4gZW50cmllcyAqLworCV9fdTMyIHNwaV90aWRlZ3JjbnQ7CisJLyogc2l6ZSBvZiBhIHNpbmdsZSByZWNlaXZlIGhlYWRlciBxdWV1ZSBlbnRyeS4gKi8KKwlfX3UzMiBzcGlfcmN2aGRyZW50X3NpemU7CisJLyoKKwkgKiBDb3VudCBvZiByZWNlaXZlIGhlYWRlciBxdWV1ZSBlbnRyaWVzIGFsbG9jYXRlZC4KKwkgKiBUaGlzIG1heSBiZSBsZXNzIHRoYW4gdGhlIHNwdV9yY3ZoZHJjbnQgcGFzc2VkIGluIS4KKwkgKi8KKwlfX3UzMiBzcGlfcmN2aGRyX2NudDsKKworCS8qIHBlci1jaGlwIGFuZCBvdGhlciBydW50aW1lIGZlYXR1cmVzIGJpdG1hcCAoSVBBVEhfUlVOVElNRV8qKSAqLworCV9fdTMyIHNwaV9ydW50aW1lX2ZsYWdzOworCisJLyogYWRkcmVzcyB3aGVyZSByZWNlaXZlIGJ1ZmZlciBxdWV1ZSBpcyBtYXBwZWQgaW50byAqLworCV9fdTY0IHNwaV9yY3ZoZHJfYmFzZTsKKworCS8qIHVzZXIgcHJvZ3JhbS4gKi8KKworCS8qIGJhc2UgYWRkcmVzcyBvZiBlYWdlciBUSUQgcmVjZWl2ZSBidWZmZXJzLiAqLworCV9fdTY0IHNwaV9yY3ZfZWdyYnVmczsKKworCS8qIEFsbG9jYXRlZCBieSBpbml0aWFsaXphdGlvbiBjb2RlLCBub3QgYnkgcHJvdG9jb2wuICovCisKKwkvKgorCSAqIFNpemUgb2YgZWFjaCBUSUQgYnVmZmVyIGluIGhvc3QgbWVtb3J5LCBzdGFydGluZyBhdAorCSAqIHNwaV9yY3ZfZWdyYnVmcy4gIFRoZSBidWZmZXJzIGFyZSB2aXJ0dWFsbHkgY29udGlndW91cy4KKwkgKi8KKwlfX3UzMiBzcGlfcmN2X2VncmJ1ZnNpemU7CisJLyoKKwkgKiBUaGUgc3BlY2lhbCBRUCAocXVldWUgcGFpcikgdmFsdWUgdGhhdCBpZGVudGlmaWVzIGFuIGluZmluaXBhdGgKKwkgKiBwcm90b2NvbCBwYWNrZXQgZnJvbSBzdGFuZGFyZCBJQiBwYWNrZXRzLiAgTW9yZSwgcHJvYmFibHkgbXVjaAorCSAqIG1vcmUsIHRvIGJlIGFkZGVkLgorCSAqLworCV9fdTMyIHNwaV9xcGFpcjsKKworCS8qCisJICogVXNlciByZWdpc3RlciBiYXNlIGZvciBpbml0IGNvZGUsIG5vdCB0byBiZSB1c2VkIGRpcmVjdGx5IGJ5CisJICogcHJvdG9jb2wgb3IgYXBwbGljYXRpb25zLgorCSAqLworCV9fdTY0IF9fc3BpX3VyZWdiYXNlOworCS8qCisJICogTWF4aW11bSBidWZmZXIgc2l6ZSBpbiBieXRlcyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgc2luZ2xlIFRJRAorCSAqIGVudHJ5IChhc3N1bWluZyB0aGUgYnVmZmVyIGlzIGFsaWduZWQgdG8gdGhpcyBib3VuZGFyeSkuICBUaGlzIGlzCisJICogdGhlIG1pbmltdW0gb2Ygd2hhdCB0aGUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHN1cHBvcnQgR3VhcmFudGVlZAorCSAqIHRvIGJlIGEgcG93ZXIgb2YgMi4KKwkgKi8KKwlfX3UzMiBzcGlfdGlkX21heHNpemU7CisJLyoKKwkgKiBhbGlnbm1lbnQgb2YgZWFjaCBwaW8gc2VuZCBidWZmZXIgKGJ5dGUgY291bnQKKwkgKiB0byBhZGQgdG8gc3BpX3Bpb2J1ZmJhc2UgdG8gZ2V0IHRvIHNlY29uZCBidWZmZXIpCisJICovCisJX191MzIgc3BpX3Bpb2FsaWduOworCS8qCisJICogVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBwaW8gYnVmZmVyIGF2YWlsYWJsZSB0byB0aGlzIHByb2Nlc3M7CisJICogbmVlZGVkIHRvIGRvIGxvb2t1cCBpbiBzcGlfcGlvYXZhaWxhZGRyOyBub3QgYWRkZWQgdG8KKwkgKiBzcGlfcGlvYnVmYmFzZS4KKwkgKi8KKwlfX3UzMiBzcGlfcGlvaW5kZXg7CisJIC8qIG51bWJlciBvZiBidWZmZXJzIG1hcHBlZCBmb3IgdGhpcyBwcm9jZXNzICovCisJX191MzIgc3BpX3Bpb2NudDsKKworCS8qCisJICogQmFzZSBhZGRyZXNzIG9mIHdyaXRlb25seSBwaW8gYnVmZmVycyBmb3IgdGhpcyBwcm9jZXNzLgorCSAqIEVhY2ggYnVmZmVyIGhhcyBzcGlfcGlvc2l6ZSB3b3JkcywgYW5kIGlzIGFsaWduZWQgb24gc3BpX3Bpb2FsaWduCisJICogYm91bmRhcmllcy4gIHNwaV9waW9jbnQgYnVmZmVycyBhcmUgbWFwcGVkIGZyb20gdGhpcyBhZGRyZXNzCisJICovCisJX191NjQgc3BpX3Bpb2J1ZmJhc2U7CisKKwkvKgorCSAqIEJhc2UgYWRkcmVzcyBvZiByZWFkb25seSBtZW1vcnkgY29weSBvZiB0aGUgcGlvYXZhaWwgcmVnaXN0ZXJzLgorCSAqIFRoZXJlIGFyZSAyIGJpdHMgZm9yIGVhY2ggYnVmZmVyLgorCSAqLworCV9fdTY0IHNwaV9waW9hdmFpbGFkZHI7CisKKwkvKgorCSAqIEFkZHJlc3Mgd2hlcmUgZHJpdmVyIHVwZGF0ZXMgYSBjb3B5IG9mIHRoZSBpbnRlcmZhY2UgYW5kIGRyaXZlcgorCSAqIHN0YXR1cyAoSVBBVEhfU1RBVFVTXyopIGFzIGEgNjQgYml0IHZhbHVlLiAgSXQncyBmb2xsb3dlZCBieSBhCisJICogc3RyaW5nIGluZGljYXRpbmcgaGFyZHdhcmUgZXJyb3IsIGlmIHRoZXJlIHdhcyBvbmUuCisJICovCisJX191NjQgc3BpX3N0YXR1czsKKworCS8qIG51bWJlciBvZiBjaGlwIHBvcnRzIGF2YWlsYWJsZSB0byB1c2VyIHByb2Nlc3NlcyAqLworCV9fdTMyIHNwaV9ucG9ydHM7CisJLyogdW5pdCBudW1iZXIgb2YgY2hpcCB3ZSBhcmUgdXNpbmcgKi8KKwlfX3UzMiBzcGlfdW5pdDsKKwkvKiBudW0gYnVmcyBpbiBlYWNoIGNvbnRpZ3VvdXMgc2V0ICovCisJX191MzIgc3BpX3Jjdl9lZ3JwZXJjaHVuazsKKwkvKiBzaXplIGluIGJ5dGVzIG9mIGVhY2ggY29udGlndW91cyBzZXQgKi8KKwlfX3UzMiBzcGlfcmN2X2VncmNodW5rc2l6ZTsKKwkvKiB0b3RhbCBzaXplIG9mIG1tYXAgdG8gY292ZXIgZnVsbCByY3ZlZ3JidWZmZXJzICovCisJX191MzIgc3BpX3Jjdl9lZ3JidWZ0b3RsZW47Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDgpKSk7CisKKworLyoKKyAqIFRoaXMgdmVyc2lvbiBudW1iZXIgaXMgZ2l2ZW4gdG8gdGhlIGRyaXZlciBieSB0aGUgdXNlciBjb2RlIGR1cmluZworICogaW5pdGlhbGl6YXRpb24gaW4gdGhlIHNwdV91c2VydmVyc2lvbiBmaWVsZCBvZiBpcGF0aF91c2VyX2luZm8sIHNvCisgKiB0aGUgZHJpdmVyIGNhbiBjaGVjayBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXIgY29kZS4KKyAqCisgKiBUaGUgbWFqb3IgdmVyc2lvbiBjaGFuZ2VzIHdoZW4gZGF0YSBzdHJ1Y3R1cmVzCisgKiBjaGFuZ2UgaW4gYW4gaW5jb21wYXRpYmxlIHdheS4gIFRoZSBkcml2ZXIgbXVzdCBiZSB0aGUgc2FtZSBvciBoaWdoZXIKKyAqIGZvciBpbml0aWFsaXphdGlvbiB0byBzdWNjZWVkLiAgSW4gc29tZSBjYXNlcywgYSBoaWdoZXIgdmVyc2lvbgorICogZHJpdmVyIHdpbGwgbm90IGludGVyb3BlcmF0ZSB3aXRoIG9sZGVyIHNvZnR3YXJlLCBhbmQgaW5pdGlhbGl6YXRpb24KKyAqIHdpbGwgcmV0dXJuIGFuIGVycm9yLgorICovCisjZGVmaW5lIElQQVRIX1VTRVJfU1dNQUpPUiAxCisKKy8qCisgKiBNaW5vciB2ZXJzaW9uIGRpZmZlcmVuY2VzIGFyZSBhbHdheXMgY29tcGF0aWJsZQorICogYSB3aXRoaW4gYSBtYWpvciB2ZXJzaW9uLCBob3dldmVyIGlmIGlmIHVzZXIgc29mdHdhcmUgaXMgbGFyZ2VyCisgKiB0aGFuIGRyaXZlciBzb2Z0d2FyZSwgc29tZSBuZXcgZmVhdHVyZXMgYW5kL29yIHN0cnVjdHVyZSBmaWVsZHMKKyAqIG1heSBub3QgYmUgaW1wbGVtZW50ZWQ7IHRoZSB1c2VyIGNvZGUgbXVzdCBkZWFsIHdpdGggdGhpcyBpZiBpdAorICogY2FyZXMsIG9yIGl0IG11c3QgYWJvcnQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gcmVwb3J0cyB0aGUgZGlmZmVyZW5jZQorICovCisjZGVmaW5lIElQQVRIX1VTRVJfU1dNSU5PUiAyCisKKyNkZWZpbmUgSVBBVEhfVVNFUl9TV1ZFUlNJT04gKChJUEFUSF9VU0VSX1NXTUFKT1I8PDE2KSB8IElQQVRIX1VTRVJfU1dNSU5PUikKKworI2RlZmluZSBJUEFUSF9LRVJOX1RZUEUgMAorCisvKgorICogU2ltaWxhcmx5LCB0aGlzIGlzIHRoZSBrZXJuZWwgdmVyc2lvbiBnb2luZyBiYWNrIHRvIHRoZSB1c2VyLiAgSXQncworICogc2xpZ2h0bHkgZGlmZmVyZW50LCBpbiB0aGF0IHdlIHdhbnQgdG8gdGVsbCBpZiB0aGUgZHJpdmVyIHdhcyBidWlsdCBhcworICogcGFydCBvZiBhIFBhdGhTY2FsZSByZWxlYXNlLCBvciBmcm9tIHRoZSBkcml2ZXIgZnJvbSBPcGVuSUIsIGtlcm5lbC5vcmcsCisgKiBvciBhIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiwgZm9yIHN1cHBvcnQgcmVhc29ucy4gIFRoZSBoaWdoIGJpdCBpcyAwIGZvcgorICogbm9uLVBhdGhTY2FsZSwgYW5kIDEgZm9yIFBhdGhTY2FsZS1idWlsdC9zdXBwbGllZC4KKyAqCisgKiBJdCdzIHJldHVybmVkIGJ5IHRoZSBkcml2ZXIgdG8gdGhlIHVzZXIgY29kZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gdGhlCisgKiBzcGlfc3dfdmVyc2lvbiBmaWVsZCBvZiBpcGF0aF9iYXNlX2luZm8sIHNvIHRoZSB1c2VyIGNvZGUgY2FuIGluIHR1cm4KKyAqIGNoZWNrIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGtlcm5lbC4KKyovCisjZGVmaW5lIElQQVRIX0tFUk5fU1dWRVJTSU9OICgoSVBBVEhfS0VSTl9UWVBFPDwzMSkgfCBJUEFUSF9VU0VSX1NXVkVSU0lPTikKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byBpcGF0aF91c2VyaW5pdCgpIHRvIHRlbGwgdGhlIGRyaXZlciB3aGVyZQorICogdXNlciBjb2RlIGJ1ZmZlcnMgYXJlLCBzaXplcywgZXRjLiAgIFRoZSBvZmZzZXRzIGFuZCBzaXplcyBvZiB0aGUKKyAqIGZpZWxkcyBtdXN0IHJlbWFpbiB1bmNoYW5nZWQsIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eS4gIEl0IGNhbgorICogYmUgZXh0ZW5kZWQsIGlmIHVzZXJ2ZXJzaW9uIGlzIGNoYW5nZWQgc28gdXNlciBjb2RlIGNhbiB0ZWxsLCBpZiBuZWVkZWQKKyAqLworc3RydWN0IGlwYXRoX3VzZXJfaW5mbyB7CisJLyoKKwkgKiB2ZXJzaW9uIG9mIHVzZXIgc29mdHdhcmUsIHRvIGRldGVjdCBjb21wYXRpYmlsaXR5IGlzc3Vlcy4KKwkgKiBTaG91bGQgYmUgc2V0IHRvIElQQVRIX1VTRVJfU1dWRVJTSU9OLgorCSAqLworCV9fdTMyIHNwdV91c2VydmVyc2lvbjsKKworCS8qIGRlc2lyZWQgbnVtYmVyIG9mIHJlY2VpdmUgaGVhZGVyIHF1ZXVlIGVudHJpZXMgKi8KKwlfX3UzMiBzcHVfcmN2aGRyY250OworCisJLyogc2l6ZSBvZiBzdHJ1Y3QgYmFzZV9pbmZvIHRvIHdyaXRlIHRvICovCisJX191MzIgc3B1X2Jhc2VfaW5mb19zaXplOworCisJLyoKKwkgKiBudW1iZXIgb2Ygd29yZHMgaW4gS0QgcHJvdG9jb2wgaGVhZGVyCisJICogVGhpcyB0ZWxscyBJbmZpbmlQYXRoIGhvdyBtYW55IHdvcmRzIHRvIGNvcHkgdG8gcmN2aGRycS4gIElmIDAsCisJICoga2VybmVsIHVzZXMgYSBkZWZhdWx0LiAgT25jZSBzZXQsIGF0dGVtcHRzIHRvIHNldCBhbnkgb3RoZXIgdmFsdWUKKwkgKiBhcmUgYW4gZXJyb3IgKEVBR0FJTikgdW50aWwgZHJpdmVyIGlzIHJlbG9hZGVkLgorCSAqLworCV9fdTMyIHNwdV9yY3ZoZHJzaXplOworCisJLyoKKwkgKiBjYWNoZSBsaW5lIGFsaWduZWQgKDY0IGJ5dGUpIHVzZXIgYWRkcmVzcyB0bworCSAqIHdoaWNoIHRoZSByY3ZoZHJ0YWlsIHJlZ2lzdGVyIHdpbGwgYmUgd3JpdHRlbiBieSBpbmZpbmlwYXRoCisJICogd2hlbmV2ZXIgaXQgY2hhbmdlcywgc28gdGhhdCBubyBjaGlwIHJlZ2lzdGVycyBhcmUgcmVhZCBpbgorCSAqIHRoZSBwZXJmb3JtYW5jZSBwYXRoLgorCSAqLworCV9fdTY0IHNwdV9yY3ZoZHJhZGRyOworCisJLyoKKwkgKiBhZGRyZXNzIG9mIHN0cnVjdCBiYXNlX2luZm8gdG8gd3JpdGUgdG8KKwkgKi8KKwlfX3U2NCBzcHVfYmFzZV9pbmZvOworCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDgpKSk7CisKKy8qIFVzZXIgY29tbWFuZHMuICovCisKKyNkZWZpbmUgSVBBVEhfQ01EX01JTgkJMTYKKworI2RlZmluZSBJUEFUSF9DTURfVVNFUl9JTklUCTE2CS8qIHNldCB1cCB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgSVBBVEhfQ01EX1BPUlRfSU5GTwkxNwkvKiBmaW5kIG91dCB3aGF0IHJlc291cmNlcyB3ZSBnb3QgKi8KKyNkZWZpbmUgSVBBVEhfQ01EX1JFQ1ZfQ1RSTAkxOAkvKiBjb250cm9sIHJlY2VpcHQgb2YgcGFja2V0cyAqLworI2RlZmluZSBJUEFUSF9DTURfVElEX1VQREFURQkxOQkvKiB1cGRhdGUgZXhwZWN0ZWQgVElEIGVudHJpZXMgKi8KKyNkZWZpbmUgSVBBVEhfQ01EX1RJRF9GUkVFCTIwCS8qIGZyZWUgZXhwZWN0ZWQgVElEIGVudHJpZXMgKi8KKyNkZWZpbmUgSVBBVEhfQ01EX1NFVF9QQVJUX0tFWQkyMQkvKiBhZGQgcGFydGl0aW9uIGtleSAqLworCisjZGVmaW5lIElQQVRIX0NNRF9NQVgJCTIxCisKK3N0cnVjdCBpcGF0aF9wb3J0X2luZm8geworCV9fdTMyIG51bV9hY3RpdmU7CS8qIG51bWJlciBvZiBhY3RpdmUgdW5pdHMgKi8KKwlfX3UzMiB1bml0OwkJLyogdW5pdCAoY2hpcCkgYXNzaWduZWQgdG8gY2FsbGVyICovCisJX191MzIgcG9ydDsJCS8qIHBvcnQgb24gdW5pdCBhc3NpZ25lZCB0byBjYWxsZXIgKi8KK307CisKK3N0cnVjdCBpcGF0aF90aWRfaW5mbyB7CisJX191MzIgdGlkY250OworCS8qIG1ha2Ugc3RydWN0dXJlIHNhbWUgc2l6ZSBpbiAzMiBhbmQgNjQgYml0ICovCisJX191MzIgdGlkX191bnVzZWQ7CisJLyogdmlydHVhbCBhZGRyZXNzIG9mIGZpcnN0IHBhZ2UgaW4gdHJhbnNmZXIgKi8KKwlfX3U2NCB0aWR2YWRkcjsKKwkvKiBwb2ludGVyIChzYW1lIHNpemUgMzIvNjQgYml0KSB0byBfX3UxNiB0aWQgYXJyYXkgKi8KKwlfX3U2NCB0aWRsaXN0OworCisJLyoKKwkgKiBwb2ludGVyIChzYW1lIHNpemUgMzIvNjQgYml0KSB0byBiaXRtYXAgb2YgVElEcyB1c2VkCisJICogZm9yIHRoaXMgY2FsbDsgY2hlY2tlZCBmb3IgYmVpbmcgbGFyZ2UgZW5vdWdoIGF0IG9wZW4KKwkgKi8KKwlfX3U2NCB0aWRtYXA7Cit9OworCitzdHJ1Y3QgaXBhdGhfY21kIHsKKwlfX3UzMiB0eXBlOwkJCS8qIGNvbW1hbmQgdHlwZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IGlwYXRoX3RpZF9pbmZvIHRpZF9pbmZvOworCQlzdHJ1Y3QgaXBhdGhfdXNlcl9pbmZvIHVzZXJfaW5mbzsKKwkJLyogYWRkcmVzcyBpbiB1c2Vyc3BhY2Ugb2Ygc3RydWN0IGlwYXRoX3BvcnRfaW5mbyB0bworCQkgICB3cml0ZSByZXN1bHQgdG8gKi8KKwkJX191NjQgcG9ydF9pbmZvOworCQkvKiBlbmFibGUvZGlzYWJsZSByZWNlaXB0IG9mIHBhY2tldHMgKi8KKwkJX191MzIgcmVjdl9jdHJsOworCQkvKiBwYXJ0aXRpb24ga2V5IHRvIHNldCAqLworCQlfX3UxNiBwYXJ0X2tleTsKKwl9IGNtZDsKK307CisKK3N0cnVjdCBpcGF0aF9pb3ZlYyB7CisJLyogUG9pbnRlciB0byBkYXRhLCBidXQgc2FtZSBzaXplIDMyIGFuZCA2NCBiaXQgKi8KKwlfX3U2NCBpb3ZfYmFzZTsKKworCS8qCisJICogTGVuZ3RoIG9mIGRhdGE7IGRvbid0IG5lZWQgNjQgYml0cywgYnV0IHdhbnQKKwkgKiBpcGF0aF9zZW5kcGt0IHRvIHJlbWFpbiBzYW1lIHNpemUgYXMgYmVmb3JlIDMyIGJpdCBjaGFuZ2VzLCBzby4uLgorCSAqLworCV9fdTY0IGlvdl9sZW47Cit9OworCisvKgorICogRGVzY3JpYmVzIGEgc2luZ2xlIHBhY2tldCBmb3Igc2VuZC4gIEVhY2ggcGFja2V0IGNhbiBoYXZlIG9uZSBvciBtb3JlCisgKiBidWZmZXJzLCBidXQgdGhlIHRvdGFsIGxlbmd0aCAoZXhjbHVzaXZlIG9mIElCIGhlYWRlcnMpIG11c3QgYmUgbGVzcworICogdGhhbiB0aGUgTVRVLCBhbmQgaWYgdXNpbmcgdGhlIFBJTyBtZXRob2QsIGVudGlyZSBwYWNrZXQgbGVuZ3RoLAorICogaW5jbHVkaW5nIElCIGhlYWRlcnMsIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBpcGF0aF9waW9zaXplIHZhbHVlICh3b3JkcykuCisgKiBVc2Ugb2YgdGhpcyBuZWNlc3NpdGF0ZXMgaW5jbHVkaW5nIHN5cy91aW8uaAorICovCitzdHJ1Y3QgX19pcGF0aF9zZW5kcGt0IHsKKwlfX3UzMiBzcHNfZmxhZ3M7CS8qIGZsYWdzIGZvciBwYWNrZXQgKFRCRCkgKi8KKwlfX3UzMiBzcHNfY250OwkJLyogbnVtYmVyIG9mIGVudHJpZXMgdG8gdXNlIGluIHNwc19pb3YgKi8KKwkvKiBhcnJheSBvZiBpb3YncyBkZXNjcmliaW5nIHBhY2tldC4gVEVNUE9SQVJZICovCisJc3RydWN0IGlwYXRoX2lvdmVjIHNwc19pb3ZbNF07Cit9OworCisvKiBQYXNzZWQgaW50byBTTUEgc3BlY2lhbCBmaWxlJ3MgLT5yZWFkIGFuZCAtPndyaXRlIG1ldGhvZHMuICovCitzdHJ1Y3QgaXBhdGhfc21hX3BrdAoreworCV9fdTMyIHVuaXQ7CS8qIHVuaXQgb24gd2hpY2ggdG8gc2VuZCBwYWNrZXQgKi8KKwlfX3U2NCBkYXRhOwkvKiBhZGRyZXNzIG9mIHBheWxvYWQgaW4gdXNlcnNwYWNlICovCisJX191MzIgbGVuOwkvKiBsZW5ndGggb2YgcGF5bG9hZCAqLworfTsKKworLyoKKyAqIERhdGEgbGF5b3V0IGluIEkyQyBmbGFzaCAoZm9yIEdVSUQsIGV0Yy4pCisgKiBBbGwgZmllbGRzIGFyZSBsaXR0bGUtZW5kaWFuIGJpbmFyeSB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZAorICovCisjZGVmaW5lIElQQVRIX0ZMQVNIX1ZFUlNJT04gMQorc3RydWN0IGlwYXRoX2ZsYXNoIHsKKwkvKiBmbGFzaCBsYXlvdXQgdmVyc2lvbiAoSVBBVEhfRkxBU0hfVkVSU0lPTikgKi8KKwlfX3U4IGlmX2Z2ZXJzaW9uOworCS8qIGNoZWNrc3VtIHByb3RlY3RpbmcgaWZfbGVuZ3RoIGJ5dGVzICovCisJX191OCBpZl9jc3VtOworCS8qCisJICogdmFsaWQgbGVuZ3RoIChpbiB1c2UsIHByb3RlY3RlZCBieSBpZl9jc3VtKSwgaW5jbHVkaW5nCisJICogaWZfZnZlcnNpb24gYW5kIGlmX3N1bSB0aGVtc2VsdmVzKQorCSAqLworCV9fdTggaWZfbGVuZ3RoOworCS8qIHRoZSBHVUlELCBpbiBuZXR3b3JrIG9yZGVyICovCisJX191OCBpZl9ndWlkWzhdOworCS8qIG51bWJlciBvZiBHVUlEcyB0byB1c2UsIHN0YXJ0aW5nIGZyb20gaWZfZ3VpZCAqLworCV9fdTggaWZfbnVtZ3VpZDsKKwkvKiB0aGUgYm9hcmQgc2VyaWFsIG51bWJlciwgaW4gQVNDSUkgKi8KKwljaGFyIGlmX3NlcmlhbFsxMl07CisJLyogYm9hcmQgbWZnIGRhdGUgKFlZWVlNTUREIEFTQ0lJKSAqLworCWNoYXIgaWZfbWZnZGF0ZVs4XTsKKwkvKiBsYXN0IGJvYXJkIHJld29yay90ZXN0IGRhdGUgKFlZWVlNTUREIEFTQ0lJKSAqLworCWNoYXIgaWZfdGVzdGRhdGVbOF07CisJLyogbG9nZ2luZyBvZiBlcnJvciBjb3VudHMsIFRCRCAqLworCV9fdTggaWZfZXJyY250cFs0XTsKKwkvKiBwb3dlcmVkIG9uIGhvdXJzLCB1cGRhdGVkIGF0IGRyaXZlciB1bmxvYWQgKi8KKwlfX3U4IGlmX3Bvd2VyaG91clsyXTsKKwkvKiBBU0NJSSBmcmVlLWZvcm0gY29tbWVudCBmaWVsZCAqLworCWNoYXIgaWZfY29tbWVudFszMl07CisJLyogNzggYnl0ZXMgdXNlZCwgbWluIGZsYXNoIHNpemUgaXMgMTI4IGJ5dGVzICovCisJX191OCBpZl9mdXR1cmVbNTBdOworfTsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgY291bnRlcnMgaW1wbGVtZW50ZWQgaW4gdGhlIGNoaXAsIGFuZCBhcmUgbGlzdGVkIGluIG9yZGVyLgorICogVGhlIEludGVyQ2FwcyBuYW1pbmcgaXMgdGFrZW4gc3RyYWlnaHQgZnJvbSB0aGUgY2hpcCBzcGVjLgorICovCitzdHJ1Y3QgaW5maW5pcGF0aF9jb3VudGVycyB7CisJX191NjQgTEJJbnRDbnQ7CisJX191NjQgTEJGbG93U3RhbGxDbnQ7CisJX191NjQgUmVzZXJ2ZWQxOworCV9fdTY0IFR4VW5zdXBWTEVyckNudDsKKwlfX3U2NCBUeERhdGFQa3RDbnQ7CisJX191NjQgVHhGbG93UGt0Q250OworCV9fdTY0IFR4RHdvcmRDbnQ7CisJX191NjQgVHhMZW5FcnJDbnQ7CisJX191NjQgVHhNYXhNaW5MZW5FcnJDbnQ7CisJX191NjQgVHhVbmRlcnJ1bkNudDsKKwlfX3U2NCBUeEZsb3dTdGFsbENudDsKKwlfX3U2NCBUeERyb3BwZWRQa3RDbnQ7CisJX191NjQgUnhEcm9wcGVkUGt0Q250OworCV9fdTY0IFJ4RGF0YVBrdENudDsKKwlfX3U2NCBSeEZsb3dQa3RDbnQ7CisJX191NjQgUnhEd29yZENudDsKKwlfX3U2NCBSeExlbkVyckNudDsKKwlfX3U2NCBSeE1heE1pbkxlbkVyckNudDsKKwlfX3U2NCBSeElDUkNFcnJDbnQ7CisJX191NjQgUnhWQ1JDRXJyQ250OworCV9fdTY0IFJ4Rmxvd0N0cmxFcnJDbnQ7CisJX191NjQgUnhCYWRGb3JtYXRDbnQ7CisJX191NjQgUnhMaW5rUHJvYmxlbUNudDsKKwlfX3U2NCBSeEVCUENudDsKKwlfX3U2NCBSeExQQ1JDRXJyQ250OworCV9fdTY0IFJ4QnVmT3ZmbENudDsKKwlfX3U2NCBSeFRJREZ1bGxFcnJDbnQ7CisJX191NjQgUnhUSURWYWxpZEVyckNudDsKKwlfX3U2NCBSeFBLZXlNaXNtYXRjaENudDsKKwlfX3U2NCBSeFAwSGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFAxSGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFAySGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFAzSGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA0SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA1SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA2SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA3SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA4SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSZXNlcnZlZDY7CisJX191NjQgUmVzZXJ2ZWQ3OworCV9fdTY0IElCU3RhdHVzQ2hhbmdlQ250OworCV9fdTY0IElCTGlua0VyclJlY292ZXJ5Q250OworCV9fdTY0IElCTGlua0Rvd25lZENudDsKKwlfX3U2NCBJQlN5bWJvbEVyckNudDsKK307CisKKy8qCisgKiBUaGUgbmV4dCBzZXQgb2YgZGVmaW5lcyBhcmUgZm9yIHBhY2tldCBoZWFkZXJzLCBhbmQgY2hpcCByZWdpc3RlcgorICogYW5kIG1lbW9yeSBiaXRzIHRoYXQgYXJlIHZpc2libGUgdG8gYW5kL29yIHVzZWQgYnkgdXNlci1tb2RlIHNvZnR3YXJlCisgKiBUaGUgb3RoZXIgYml0cyB0aGF0IGFyZSB1c2VkIG9ubHkgYnkgdGhlIGRyaXZlciBvciBkaWFncyBhcmUgaW4KKyAqIGlwYXRoX3JlZ2lzdGVycy5oCisgKi8KKworLyogUmN2SGRyRmxhZ3MgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1JIRl9MRU5HVEhfTUFTSyAweDdGRgorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9MRU5HVEhfU0hJRlQgMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9SQ1ZUWVBFX01BU0sgMHg3CisjZGVmaW5lIElORklOSVBBVEhfUkhGX1JDVlRZUEVfU0hJRlQgMTEKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfRUdSSU5ERVhfTUFTSyAweDdGRgorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9FR1JJTkRFWF9TSElGVCAxNgorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IX0lDUkNFUlIgICAweDgwMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfUkhGX0hfVkNSQ0VSUiAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9QQVJJVFlFUlIgMHgyMDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IX0xFTkVSUiAgICAweDEwMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfUkhGX0hfTVRVRVJSICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9JSERSRVJSICAgMHgwNDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IX1RJREVSUiAgICAweDAyMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfUkhGX0hfTUtFUlIgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9JQkVSUiAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9MX1NXQSAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIElORklOSVBBVEhfUkhGX0xfU1dCICAgICAgIDB4MDAwMDQwMDAKKworLyogaW5maW5pcGF0aCBoZWFkZXIgZmllbGRzICovCisjZGVmaW5lIElORklOSVBBVEhfSV9WRVJTX01BU0sgMHhGCisjZGVmaW5lIElORklOSVBBVEhfSV9WRVJTX1NISUZUIDI4CisjZGVmaW5lIElORklOSVBBVEhfSV9QT1JUX01BU0sgMHhGCisjZGVmaW5lIElORklOSVBBVEhfSV9QT1JUX1NISUZUIDI0CisjZGVmaW5lIElORklOSVBBVEhfSV9USURfTUFTSyAweDdGRgorI2RlZmluZSBJTkZJTklQQVRIX0lfVElEX1NISUZUIDEzCisjZGVmaW5lIElORklOSVBBVEhfSV9PRkZTRVRfTUFTSyAweDFGRkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX09GRlNFVF9TSElGVCAwCisKKy8qIEtfUGt0RmxhZ3MgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0tQRl9JTlRSIDB4MQorCisvKiBTZW5kUElPIHBlci1idWZmZXIgY29udHJvbCAqLworI2RlZmluZSBJTkZJTklQQVRIX1NQX0xFTkdUSFAxX01BU0sgMHgzRkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9TUF9MRU5HVEhQMV9TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfU1BfSU5UUiAgICAweDgwMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfU1BfVEVTVCAgICAweDQwMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfU1BfVEVTVEVCUCAweDIwMDAwMDAwCisKKy8qIFNlbmRQSU9BdmFpbCBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfU0VORFBJT0FWQUlMX0JVU1lfU0hJRlQgMQorI2RlZmluZSBJTkZJTklQQVRIX1NFTkRQSU9BVkFJTF9DSEVDS19TSElGVCAwCisKKyNlbmRpZgkJCQkvKiBfSVBBVEhfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjZTExMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jcS5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisKKy8qKgorICogaXBhdGhfY3FfZW50ZXIgLSBhZGQgYSBuZXcgZW50cnkgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUKKyAqIEBjcTogY29tcGxldGlvbiBxdWV1ZQorICogQGVudHJ5OiB3b3JrIGNvbXBsZXRpb24gZW50cnkgdG8gYWRkCisgKiBAc2lnOiB0cnVlIGlmIEBlbnRyeSBpcyBhIHNvbGljaXRhdGVkIGVudHJ5CisgKgorICogVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggb25lIG9mIHRoZSBxcC0+c19sb2NrIG9yIHFwLT5yX3JxLmxvY2sgaGVsZC4KKyAqLwordm9pZCBpcGF0aF9jcV9lbnRlcihzdHJ1Y3QgaXBhdGhfY3EgKmNxLCBzdHJ1Y3QgaWJfd2MgKmVudHJ5LCBpbnQgc29saWNpdGVkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIG5leHQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3EtPmxvY2ssIGZsYWdzKTsKKworCWlmIChjcS0+aGVhZCA9PSBjcS0+aWJjcS5jcWUpCisJCW5leHQgPSAwOworCWVsc2UKKwkJbmV4dCA9IGNxLT5oZWFkICsgMTsKKwlpZiAodW5saWtlbHkobmV4dCA9PSBjcS0+dGFpbCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3EtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGNxLT5pYmNxLmV2ZW50X2hhbmRsZXIpIHsKKwkJCXN0cnVjdCBpYl9ldmVudCBldjsKKworCQkJZXYuZGV2aWNlID0gY3EtPmliY3EuZGV2aWNlOworCQkJZXYuZWxlbWVudC5jcSA9ICZjcS0+aWJjcTsKKwkJCWV2LmV2ZW50ID0gSUJfRVZFTlRfQ1FfRVJSOworCQkJY3EtPmliY3EuZXZlbnRfaGFuZGxlcigmZXYsIGNxLT5pYmNxLmNxX2NvbnRleHQpOworCQl9CisJCXJldHVybjsKKwl9CisJY3EtPnF1ZXVlW2NxLT5oZWFkXSA9ICplbnRyeTsKKwljcS0+aGVhZCA9IG5leHQ7CisKKwlpZiAoY3EtPm5vdGlmeSA9PSBJQl9DUV9ORVhUX0NPTVAgfHwKKwkgICAgKGNxLT5ub3RpZnkgPT0gSUJfQ1FfU09MSUNJVEVEICYmIHNvbGljaXRlZCkpIHsKKwkJY3EtPm5vdGlmeSA9IElCX0NRX05PTkU7CisJCWNxLT50cmlnZ2VyZWQrKzsKKwkJLyoKKwkJICogVGhpcyB3aWxsIGNhdXNlIHNlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgaW4KKwkJICogYW5vdGhlciB0aHJlYWQuCisJCSAqLworCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZjcS0+Y29tcHRhc2spOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZW50cnktPnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTKQorCQl0b19pZGV2KGNxLT5pYmNxLmRldmljZSktPm5fd3FlX2VycnMrKzsKK30KKworLyoqCisgKiBpcGF0aF9wb2xsX2NxIC0gcG9sbCBmb3Igd29yayBjb21wbGV0aW9uIGVudHJpZXMKKyAqIEBpYmNxOiB0aGUgY29tcGxldGlvbiBxdWV1ZSB0byBwb2xsCisgKiBAbnVtX2VudHJpZXM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIHJldHVybgorICogQGVudHJ5OiBwb2ludGVyIHRvIGFycmF5IHdoZXJlIHdvcmsgY29tcGxldGlvbnMgYXJlIHBsYWNlZAorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjb21wbGV0aW9uIGVudHJpZXMgcG9sbGVkLgorICoKKyAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiAgQWxzbyBjYWxsZWQgYnkgaWJfcG9sbF9jcSgpCisgKiBpbiB0aGUgZ2VuZXJpYyB2ZXJicyBjb2RlLgorICovCitpbnQgaXBhdGhfcG9sbF9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGludCBudW1fZW50cmllcywgc3RydWN0IGliX3djICplbnRyeSkKK3sKKwlzdHJ1Y3QgaXBhdGhfY3EgKmNxID0gdG9faWNxKGliY3EpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG5wb2xsZWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3EtPmxvY2ssIGZsYWdzKTsKKworCWZvciAobnBvbGxlZCA9IDA7IG5wb2xsZWQgPCBudW1fZW50cmllczsgKytucG9sbGVkLCArK2VudHJ5KSB7CisJCWlmIChjcS0+dGFpbCA9PSBjcS0+aGVhZCkKKwkJCWJyZWFrOworCQkqZW50cnkgPSBjcS0+cXVldWVbY3EtPnRhaWxdOworCQlpZiAoY3EtPnRhaWwgPT0gY3EtPmliY3EuY3FlKQorCQkJY3EtPnRhaWwgPSAwOworCQllbHNlCisJCQljcS0+dGFpbCsrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbnBvbGxlZDsKK30KKworc3RhdGljIHZvaWQgc2VuZF9jb21wbGV0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGlwYXRoX2NxICpjcSA9IChzdHJ1Y3QgaXBhdGhfY3EgKilkYXRhOworCisJLyoKKwkgKiBUaGUgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwgbW9zdCBsaWtlbHkgcmVhcm0gdGhlIG5vdGlmaWNhdGlvbgorCSAqIGFuZCBwb2xsIGZvciBhbGwgcGVuZGluZyBlbnRyaWVzLiAgSWYgYSBuZXcgY29tcGxldGlvbiBlbnRyeQorCSAqIGlzIGFkZGVkIHdoaWxlIHdlIGFyZSBpbiB0aGlzIHJvdXRpbmUsIHRhc2tsZXRfaGlfc2NoZWR1bGUoKQorCSAqIHdvbid0IGNhbGwgdXMgYWdhaW4gdW50aWwgd2UgcmV0dXJuIHNvIHdlIGNoZWNrIHRyaWdnZXJlZCB0bworCSAqIHNlZSBpZiB3ZSBuZWVkIHRvIGNhbGwgdGhlIGhhbmRsZXIgYWdhaW4uCisJICovCisJZm9yICg7OykgeworCQl1OCB0cmlnZ2VyZWQgPSBjcS0+dHJpZ2dlcmVkOworCisJCWNxLT5pYmNxLmNvbXBfaGFuZGxlcigmY3EtPmliY3EsIGNxLT5pYmNxLmNxX2NvbnRleHQpOworCisJCWlmIChjcS0+dHJpZ2dlcmVkID09IHRyaWdnZXJlZCkKKwkJCXJldHVybjsKKwl9Cit9CisKKy8qKgorICogaXBhdGhfY3JlYXRlX2NxIC0gY3JlYXRlIGEgY29tcGxldGlvbiBxdWV1ZQorICogQGliZGV2OiB0aGUgZGV2aWNlIHRoaXMgY29tcGxldGlvbiBxdWV1ZSBpcyBhdHRhY2hlZCB0bworICogQGVudHJpZXM6IHRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIGNvbXBsZXRpb24gcXVldWUKKyAqIEBjb250ZXh0OiB1bnVzZWQgYnkgdGhlIEluZmluaVBhdGggZHJpdmVyCisgKiBAdWRhdGE6IHVudXNlZCBieSB0aGUgSW5maW5pUGF0aCBkcml2ZXIKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY29tcGxldGlvbiBxdWV1ZSBvciBuZWdhdGl2ZSBlcnJubyB2YWx1ZXMKKyAqIGZvciBmYWlsdXJlLgorICoKKyAqIENhbGxlZCBieSBpYl9jcmVhdGVfY3EoKSBpbiB0aGUgZ2VuZXJpYyB2ZXJicyBjb2RlLgorICovCitzdHJ1Y3QgaWJfY3EgKmlwYXRoX2NyZWF0ZV9jcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgaW50IGVudHJpZXMsCisJCQkgICAgICBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBpcGF0aF9jcSAqY3E7CisJc3RydWN0IGliX3djICp3YzsKKwlzdHJ1Y3QgaWJfY3EgKnJldDsKKworCS8qCisJICogTmVlZCB0byB1c2Ugdm1hbGxvYygpIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCBsYXJnZSAjcyBvZgorCSAqIGVudHJpZXMuCisJICovCisJY3EgPSBrbWFsbG9jKHNpemVvZigqY3EpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNxKSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKgorCSAqIE5lZWQgdG8gdXNlIHZtYWxsb2MoKSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgbGFyZ2UgI3Mgb2YgZW50cmllcy4KKwkgKi8KKwl3YyA9IHZtYWxsb2Moc2l6ZW9mKCp3YykgKiAoZW50cmllcyArIDEpKTsKKwlpZiAoIXdjKSB7CisJCWtmcmVlKGNxKTsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKwkvKgorCSAqIGliX2NyZWF0ZV9jcSgpIHdpbGwgaW5pdGlhbGl6ZSBjcS0+aWJjcSBleGNlcHQgZm9yIGNxLT5pYmNxLmNxZS4KKwkgKiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvdWxkIGJlID49IHRoZSBudW1iZXIgcmVxdWVzdGVkIG9yIHJldHVybgorCSAqIGFuIGVycm9yLgorCSAqLworCWNxLT5pYmNxLmNxZSA9IGVudHJpZXM7CisJY3EtPm5vdGlmeSA9IElCX0NRX05PTkU7CisJY3EtPnRyaWdnZXJlZCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJmNxLT5sb2NrKTsKKwl0YXNrbGV0X2luaXQoJmNxLT5jb21wdGFzaywgc2VuZF9jb21wbGV0ZSwgKHVuc2lnbmVkIGxvbmcpY3EpOworCWNxLT5oZWFkID0gMDsKKwljcS0+dGFpbCA9IDA7CisJY3EtPnF1ZXVlID0gd2M7CisKKwlyZXQgPSAmY3EtPmliY3E7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9kZXN0cm95X2NxIC0gZGVzdHJveSBhIGNvbXBsZXRpb24gcXVldWUKKyAqIEBpYmNxOiB0aGUgY29tcGxldGlvbiBxdWV1ZSB0byBkZXN0cm95LgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4KKyAqCisgKiBDYWxsZWQgYnkgaWJfZGVzdHJveV9jcSgpIGluIHRoZSBnZW5lcmljIHZlcmJzIGNvZGUuCisgKi8KK2ludCBpcGF0aF9kZXN0cm95X2NxKHN0cnVjdCBpYl9jcSAqaWJjcSkKK3sKKwlzdHJ1Y3QgaXBhdGhfY3EgKmNxID0gdG9faWNxKGliY3EpOworCisJdGFza2xldF9raWxsKCZjcS0+Y29tcHRhc2spOworCXZmcmVlKGNxLT5xdWV1ZSk7CisJa2ZyZWUoY3EpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXBhdGhfcmVxX25vdGlmeV9jcSAtIGNoYW5nZSB0aGUgbm90aWZpY2F0aW9uIHR5cGUgZm9yIGEgY29tcGxldGlvbiBxdWV1ZQorICogQGliY3E6IHRoZSBjb21wbGV0aW9uIHF1ZXVlCisgKiBAbm90aWZ5OiB0aGUgdHlwZSBvZiBub3RpZmljYXRpb24gdG8gcmVxdWVzdAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4KKyAqCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gIEFsc28gY2FsbGVkIGJ5CisgKiBpYl9yZXFfbm90aWZ5X2NxKCkgaW4gdGhlIGdlbmVyaWMgdmVyYnMgY29kZS4KKyAqLworaW50IGlwYXRoX3JlcV9ub3RpZnlfY3Eoc3RydWN0IGliX2NxICppYmNxLCBlbnVtIGliX2NxX25vdGlmeSBub3RpZnkpCit7CisJc3RydWN0IGlwYXRoX2NxICpjcSA9IHRvX2ljcShpYmNxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNxLT5sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBEb24ndCBjaGFuZ2UgSUJfQ1FfTkVYVF9DT01QIHRvIElCX0NRX1NPTElDSVRFRCBidXQgYWxsb3cKKwkgKiBhbnkgb3RoZXIgdHJhbnNpdGlvbnMuCisJICovCisJaWYgKGNxLT5ub3RpZnkgIT0gSUJfQ1FfTkVYVF9DT01QKQorCQljcS0+bm90aWZ5ID0gbm90aWZ5OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpcGF0aF9yZXNpemVfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgY3FlLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBpcGF0aF9jcSAqY3EgPSB0b19pY3EoaWJjcSk7CisJc3RydWN0IGliX3djICp3YywgKm9sZF93YzsKKwl1MzIgbjsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBOZWVkIHRvIHVzZSB2bWFsbG9jKCkgaWYgd2Ugd2FudCB0byBzdXBwb3J0IGxhcmdlICNzIG9mIGVudHJpZXMuCisJICovCisJd2MgPSB2bWFsbG9jKHNpemVvZigqd2MpICogKGNxZSArIDEpKTsKKwlpZiAoIXdjKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZjcS0+bG9jayk7CisJaWYgKGNxLT5oZWFkIDwgY3EtPnRhaWwpCisJCW4gPSBjcS0+aWJjcS5jcWUgKyAxICsgY3EtPmhlYWQgLSBjcS0+dGFpbDsKKwllbHNlCisJCW4gPSBjcS0+aGVhZCAtIGNxLT50YWlsOworCWlmICh1bmxpa2VseSgodTMyKWNxZSA8IG4pKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY3EtPmxvY2spOworCQl2ZnJlZSh3Yyk7CisJCXJldCA9IC1FT1ZFUkZMT1c7CisJCWdvdG8gYmFpbDsKKwl9CisJZm9yIChuID0gMDsgY3EtPnRhaWwgIT0gY3EtPmhlYWQ7IG4rKykgeworCQl3Y1tuXSA9IGNxLT5xdWV1ZVtjcS0+dGFpbF07CisJCWlmIChjcS0+dGFpbCA9PSBjcS0+aWJjcS5jcWUpCisJCQljcS0+dGFpbCA9IDA7CisJCWVsc2UKKwkJCWNxLT50YWlsKys7CisJfQorCWNxLT5pYmNxLmNxZSA9IGNxZTsKKwljcS0+aGVhZCA9IG47CisJY3EtPnRhaWwgPSAwOworCW9sZF93YyA9IGNxLT5xdWV1ZTsKKwljcS0+cXVldWUgPSB3YzsKKwlzcGluX3VubG9ja19pcnEoJmNxLT5sb2NrKTsKKworCXZmcmVlKG9sZF93Yyk7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGVidWcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NzYyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGVidWcuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfSVBBVEhfREVCVUdfSAorI2RlZmluZSBfSVBBVEhfREVCVUdfSAorCisjaWZuZGVmIF9JUEFUSF9ERUJVR0dJTkcJLyogZGVidWdnaW5nIGVuYWJsZWQgb3Igbm90ICovCisjZGVmaW5lIF9JUEFUSF9ERUJVR0dJTkcgMQorI2VuZGlmCisKKyNpZiBfSVBBVEhfREVCVUdHSU5HCisKKy8qCisgKiBNYXNrIHZhbHVlcyBmb3IgZGVidWdnaW5nLiAgVGhlIHNjaGVtZSBhbGxvd3MgdXMgdG8gY29tcGlsZSBvdXQgYW55CisgKiBvZiB0aGUgZGVidWcgdHJhY2luZyBzdHVmZiwgYW5kIGlmIGNvbXBpbGVkIGluLCB0byBlbmFibGUgb3IgZGlzYWJsZQorICogZHluYW1pY2FsbHkuICBUaGlzIGNhbiBiZSBzZXQgYXQgbW9kcHJvYmUgdGltZSBhbHNvOgorICogICAgICBtb2Rwcm9iZSBpbmZpbmlwYXRoLmtvIGluZmluaXBhdGhfZGVidWc9NworICovCisKKyNkZWZpbmUgX19JUEFUSF9JTkZPICAgICAgICAweDEJLyogZ2VuZXJpYyBsb3cgdmVyYm9zaXR5IHN0dWZmICovCisjZGVmaW5lIF9fSVBBVEhfREJHICAgICAgICAgMHgyCS8qIGdlbmVyaWMgZGVidWcgKi8KKyNkZWZpbmUgX19JUEFUSF9UUlNBTVBMRSAgICAweDgJLyogZ2VuZXJhdGUgdHJhY2UgYnVmZmVyIHNhbXBsZSBlbnRyaWVzICovCisvKiBsZWF2ZSBzb21lIGxvdyB2ZXJib3NpdHkgc3BvdHMgb3BlbiAqLworI2RlZmluZSBfX0lQQVRIX1ZFUkJEQkcgICAgIDB4NDAJLyogdmVyeSB2ZXJib3NlIGRlYnVnICovCisjZGVmaW5lIF9fSVBBVEhfUEtUREJHICAgICAgMHg4MAkvKiBwcmludCBwYWNrZXQgZGF0YSAqLworLyogcHJpbnQgcHJvY2VzcyBzdGFydHVwIChpbml0KS9leGl0IG1lc3NhZ2VzICovCisjZGVmaW5lIF9fSVBBVEhfUFJPQ0RCRyAgICAgMHgxMDAKKy8qIHByaW50IG1tYXAvbm9wYWdlIHN0dWZmLCBub3QgdXNpbmcgVkRCRyBhbnkgbW9yZSAqLworI2RlZmluZSBfX0lQQVRIX01NREJHICAgICAgIDB4MjAwCisjZGVmaW5lIF9fSVBBVEhfVVNFUl9TRU5EICAgMHgxMDAwCS8qIHVzZSB1c2VyIG1vZGUgc2VuZCAqLworI2RlZmluZSBfX0lQQVRIX0tFUk5FTF9TRU5EIDB4MjAwMAkvKiB1c2Uga2VybmVsIG1vZGUgc2VuZCAqLworI2RlZmluZSBfX0lQQVRIX0VQS1REQkcgICAgIDB4NDAwMAkvKiBwcmludCBldGhlcm5ldCBwYWNrZXQgZGF0YSAqLworI2RlZmluZSBfX0lQQVRIX1NNQURCRyAgICAgIDB4ODAwMAkvKiBzbWEgcGFja2V0IGRlYnVnICovCisjZGVmaW5lIF9fSVBBVEhfSVBBVEhEQkcgICAgMHgxMDAwMAkvKiBFdGhlcm5ldCAoSVBBVEgpIGdlbiBkZWJ1ZyAqLworI2RlZmluZSBfX0lQQVRIX0lQQVRIV0FSTiAgIDB4MjAwMDAJLyogRXRoZXJuZXQgKElQQVRIKSB3YXJuaW5ncyAqLworI2RlZmluZSBfX0lQQVRIX0lQQVRIRVJSICAgIDB4NDAwMDAJLyogRXRoZXJuZXQgKElQQVRIKSBlcnJvcnMgKi8KKyNkZWZpbmUgX19JUEFUSF9JUEFUSFBEICAgICAweDgwMDAwCS8qIEV0aGVybmV0IChJUEFUSCkgcGFja2V0IGR1bXAgKi8KKyNkZWZpbmUgX19JUEFUSF9JUEFUSFRBQkxFICAweDEwMDAwMAkvKiBFdGhlcm5ldCAoSVBBVEgpIHRhYmxlIGR1bXAgKi8KKworI2Vsc2UJCQkJLyogX0lQQVRIX0RFQlVHR0lORyAqLworCisvKgorICogZGVmaW5lIGFsbCBvZiB0aGVzZSBldmVuIHdpdGggZGVidWdnaW5nIG9mZiwgZm9yIHRoZSBmZXcgcGxhY2VzIHRoYXQgZG8KKyAqIGlmKGluZmluaXBhdGhfZGVidWcgJiBfSVBBVEhfeHl6enkpLCBidXQgaW4gYSB3YXkgdGhhdCB3aWxsIG1ha2UgdGhlCisgKiBjb21waWxlciBlbGltaW5hdGUgdGhlIGNvZGUKKyAqLworCisjZGVmaW5lIF9fSVBBVEhfSU5GTyAgICAgIDB4MAkvKiBnZW5lcmljIGxvdyB2ZXJib3NpdHkgc3R1ZmYgKi8KKyNkZWZpbmUgX19JUEFUSF9EQkcgICAgICAgMHgwCS8qIGdlbmVyaWMgZGVidWcgKi8KKyNkZWZpbmUgX19JUEFUSF9UUlNBTVBMRSAgMHgwCS8qIGdlbmVyYXRlIHRyYWNlIGJ1ZmZlciBzYW1wbGUgZW50cmllcyAqLworI2RlZmluZSBfX0lQQVRIX1ZFUkJEQkcgICAweDAJLyogdmVyeSB2ZXJib3NlIGRlYnVnICovCisjZGVmaW5lIF9fSVBBVEhfUEtUREJHICAgIDB4MAkvKiBwcmludCBwYWNrZXQgZGF0YSAqLworI2RlZmluZSBfX0lQQVRIX1BST0NEQkcgICAweDAJLyogcHJvY2VzcyBzdGFydHVwIChpbml0KS9leGl0IG1lc3NhZ2VzICovCisvKiBwcmludCBtbWFwL25vcGFnZSBzdHVmZiwgbm90IHVzaW5nIFZEQkcgYW55IG1vcmUgKi8KKyNkZWZpbmUgX19JUEFUSF9NTURCRyAgICAgMHgwCisjZGVmaW5lIF9fSVBBVEhfRVBLVERCRyAgIDB4MAkvKiBwcmludCBldGhlcm5ldCBwYWNrZXQgZGF0YSAqLworI2RlZmluZSBfX0lQQVRIX1NNQURCRyAgICAweDAgICAvKiBwcm9jZXNzIHN0YXJ0dXAgKGluaXQpL2V4aXQgbWVzc2FnZXMgKi8KKyNkZWZpbmUgX19JUEFUSF9JUEFUSERCRyAgMHgwCS8qIEV0aGVybmV0IChJUEFUSCkgdGFibGUgZHVtcCBvbiAqLworI2RlZmluZSBfX0lQQVRIX0lQQVRIV0FSTiAweDAJLyogRXRoZXJuZXQgKElQQVRIKSB3YXJuaW5ncyBvbiAgICovCisjZGVmaW5lIF9fSVBBVEhfSVBBVEhFUlIgIDB4MAkvKiBFdGhlcm5ldCAoSVBBVEgpIGVycm9ycyBvbiAgICovCisjZGVmaW5lIF9fSVBBVEhfSVBBVEhQRCAgIDB4MAkvKiBFdGhlcm5ldCAoSVBBVEgpIHBhY2tldCBkdW1wIG9uICAgKi8KKyNkZWZpbmUgX19JUEFUSF9JUEFUSFRBQkxFIDB4MAkvKiBFdGhlcm5ldCAoSVBBVEgpIHBhY2tldCBkdW1wIG9uICAgKi8KKworI2VuZGlmCQkJCS8qIF9JUEFUSF9ERUJVR0dJTkcgKi8KKworI2RlZmluZSBfX0lQQVRIX1ZFUkJPU0VEQkcgX19JUEFUSF9WRVJCREJHCisKKyNlbmRpZgkJCQkvKiBfSVBBVEhfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RpYWcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kaWFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkZGNlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kaWFnLmMKQEAgLTAsMCArMSwzNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHN1cHBvcnQgZm9yIGRpYWdub3N0aWMgZnVuY3Rpb25zLiAgSXQgaXMgYWNjZXNzZWQgYnkKKyAqIG9wZW5pbmcgdGhlIGlwYXRoX2RpYWcgZGV2aWNlLCBub3JtYWxseSBtaW5vciBudW1iZXIgMTI5LiAgRGlhZ25vc3RpYyB1c2UKKyAqIG9mIHRoZSBJbmZpbmlQYXRoIGNoaXAgbWF5IHJlbmRlciB0aGUgY2hpcCBvciBib2FyZCB1bnVzYWJsZSB1bnRpbCB0aGUKKyAqIGRyaXZlciBpcyB1bmxvYWRlZCwgb3IgaW4gc29tZSBjYXNlcywgdW50aWwgdGhlIHN5c3RlbSBpcyByZWJvb3RlZC4KKyAqCisgKiBBY2Nlc3NlcyB0byB0aGUgY2hpcCB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlIGFyZSBub3Qgc2ltaWxhciB0byBnb2luZworICogdGhyb3VnaCB0aGUgL3N5cy9idXMvcGNpIHJlc291cmNlIG1tYXAgaW50ZXJmYWNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2xheWVyLmgiCisKK2ludCBpcGF0aF9kaWFnX2ludXNlOworc3RhdGljIGludCBkaWFnX3NldF9saW5rOworCitzdGF0aWMgaW50IGlwYXRoX2RpYWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmluLCBzdHJ1Y3QgZmlsZSAqZnApOworc3RhdGljIGludCBpcGF0aF9kaWFnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZwKTsKK3N0YXRpYyBzc2l6ZV90IGlwYXRoX2RpYWdfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIGNoYXIgX191c2VyICpkYXRhLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOworc3RhdGljIHNzaXplX3QgaXBhdGhfZGlhZ193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaWFnX2ZpbGVfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS53cml0ZSA9IGlwYXRoX2RpYWdfd3JpdGUsCisJLnJlYWQgPSBpcGF0aF9kaWFnX3JlYWQsCisJLm9wZW4gPSBpcGF0aF9kaWFnX29wZW4sCisJLnJlbGVhc2UgPSBpcGF0aF9kaWFnX3JlbGVhc2UKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2RldiAqZGlhZ19jZGV2Oworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKmRpYWdfY2xhc3NfZGV2OworCitpbnQgaXBhdGhfZGlhZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIGlwYXRoX2NkZXZfaW5pdChJUEFUSF9ESUFHX01JTk9SLCAiaXBhdGhfZGlhZyIsCisJCQkgICAgICAgJmRpYWdfZmlsZV9vcHMsICZkaWFnX2NkZXYsICZkaWFnX2NsYXNzX2Rldik7Cit9CisKK3ZvaWQgaXBhdGhfZGlhZ19jbGVhbnVwKHZvaWQpCit7CisJaXBhdGhfY2Rldl9jbGVhbnVwKCZkaWFnX2NkZXYsICZkaWFnX2NsYXNzX2Rldik7Cit9CisKKy8qKgorICogaXBhdGhfcmVhZF91bWVtNjQgLSByZWFkIGEgNjQtYml0IHF1YW50aXR5IGZyb20gdGhlIGNoaXAgaW50byB1c2VyIHNwYWNlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHVhZGRyOiB0aGUgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGRhdGEgaW4gdXNlciBtZW1vcnkKKyAqIEBjYWRkcjogdGhlIHNvdXJjZSBjaGlwIGFkZHJlc3MgKGZ1bGwgcG9pbnRlciwgbm90IG9mZnNldCkKKyAqIEBjb3VudDogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKG11bHRpcGxlIG9mIDMyIGJpdHMpCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHNvIGxvY2FsaXplcyBhbGwgY2hpcCBtZW1vcnkgYWNjZXNzZXMuCisgKiBUaGUgY29weSBzaG91bGQgYmUgd3JpdHRlbiBzdWNoIHRoYXQgd2UgcmVhZCBmdWxsIGNhY2hlbGluZSBwYWNrZXRzCisgKiBmcm9tIHRoZSBjaGlwLiAgVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGEgc2luZ2xlIHF3b3JkCisgKgorICogTk9URTogIFRoaXMgYXNzdW1lcyB0aGUgY2hpcCBhZGRyZXNzIGlzIDY0LWJpdCBhbGlnbmVkLgorICovCitzdGF0aWMgaW50IGlwYXRoX3JlYWRfdW1lbTY0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdm9pZCBfX3VzZXIgKnVhZGRyLAorCQkJICAgICBjb25zdCB2b2lkIF9faW9tZW0gKmNhZGRyLCBzaXplX3QgY291bnQpCit7CisJY29uc3QgdTY0IF9faW9tZW0gKnJlZ19hZGRyID0gY2FkZHI7CisJY29uc3QgdTY0IF9faW9tZW0gKnJlZ19lbmQgPSByZWdfYWRkciArIChjb3VudCAvIHNpemVvZih1NjQpKTsKKwlpbnQgcmV0OworCisJLyogbm90IHZlcnkgZWZmaWNpZW50LCBidXQgaXQgd29ya3MgZm9yIG5vdyAqLworCWlmIChyZWdfYWRkciA8IGRkLT5pcGF0aF9rcmVnYmFzZSB8fAorCSAgICByZWdfZW5kID4gZGQtPmlwYXRoX2tyZWdlbmQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwl3aGlsZSAocmVnX2FkZHIgPCByZWdfZW5kKSB7CisJCXU2NCBkYXRhID0gcmVhZHEocmVnX2FkZHIpOworCQlpZiAoY29weV90b191c2VyKHVhZGRyLCAmZGF0YSwgc2l6ZW9mKHU2NCkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBiYWlsOworCQl9CisJCXJlZ19hZGRyKys7CisJCXVhZGRyKys7CisJfQorCXJldCA9IDA7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfd3JpdGVfdW1lbTY0IC0gd3JpdGUgYSA2NC1iaXQgcXVhbnRpdHkgdG8gdGhlIGNoaXAgZnJvbSB1c2VyIHNwYWNlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGNhZGRyOiB0aGUgZGVzdGluYXRpb24gY2hpcCBhZGRyZXNzIChmdWxsIHBvaW50ZXIsIG5vdCBvZmZzZXQpCisgKiBAdWFkZHI6IHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEgaW4gdXNlciBtZW1vcnkKKyAqIEBjb3VudDogdGhlIG51bWJlciBvZiBieXRlcyB0byBjb3B5IChtdWx0aXBsZSBvZiAzMiBiaXRzKQorICoKKyAqIFRoaXMgaXMgdXN1YWxseSB1c2VkIGZvciBhIHNpbmdsZSBxd29yZAorICogTk9URTogIFRoaXMgYXNzdW1lcyB0aGUgY2hpcCBhZGRyZXNzIGlzIDY0LWJpdCBhbGlnbmVkLgorICovCisKK3N0YXRpYyBpbnQgaXBhdGhfd3JpdGVfdW1lbTY0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdm9pZCBfX2lvbWVtICpjYWRkciwKKwkJCSAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1YWRkciwgc2l6ZV90IGNvdW50KQoreworCXU2NCBfX2lvbWVtICpyZWdfYWRkciA9IGNhZGRyOworCWNvbnN0IHU2NCBfX2lvbWVtICpyZWdfZW5kID0gcmVnX2FkZHIgKyAoY291bnQgLyBzaXplb2YodTY0KSk7CisJaW50IHJldDsKKworCS8qIG5vdCB2ZXJ5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzIGZvciBub3cgKi8KKwlpZiAocmVnX2FkZHIgPCBkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwKKwkgICAgcmVnX2VuZCA+IGRkLT5pcGF0aF9rcmVnZW5kKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJd2hpbGUgKHJlZ19hZGRyIDwgcmVnX2VuZCkgeworCQl1NjQgZGF0YTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCB1YWRkciwgc2l6ZW9mKGRhdGEpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQl3cml0ZXEoZGF0YSwgcmVnX2FkZHIpOworCisJCXJlZ19hZGRyKys7CisJCXVhZGRyKys7CisJfQorCXJldCA9IDA7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcmVhZF91bWVtMzIgLSByZWFkIGEgMzItYml0IHF1YW50aXR5IGZyb20gdGhlIGNoaXAgaW50byB1c2VyIHNwYWNlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHVhZGRyOiB0aGUgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGRhdGEgaW4gdXNlciBtZW1vcnkKKyAqIEBjYWRkcjogdGhlIHNvdXJjZSBjaGlwIGFkZHJlc3MgKGZ1bGwgcG9pbnRlciwgbm90IG9mZnNldCkKKyAqIEBjb3VudDogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqCisgKiByZWFkIDMyIGJpdCB2YWx1ZXMsIG5vdCA2NCBiaXQ7IGZvciBtZW1vcmllcyB0aGF0IG9ubHkKKyAqIHN1cHBvcnQgMzIgYml0IHJlYWRzOyB1c3VhbGx5IGEgc2luZ2xlIGR3b3JkLgorICovCitzdGF0aWMgaW50IGlwYXRoX3JlYWRfdW1lbTMyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdm9pZCBfX3VzZXIgKnVhZGRyLAorCQkJICAgICBjb25zdCB2b2lkIF9faW9tZW0gKmNhZGRyLCBzaXplX3QgY291bnQpCit7CisJY29uc3QgdTMyIF9faW9tZW0gKnJlZ19hZGRyID0gY2FkZHI7CisJY29uc3QgdTMyIF9faW9tZW0gKnJlZ19lbmQgPSByZWdfYWRkciArIChjb3VudCAvIHNpemVvZih1MzIpKTsKKwlpbnQgcmV0OworCisJaWYgKHJlZ19hZGRyIDwgKHUzMiBfX2lvbWVtICopIGRkLT5pcGF0aF9rcmVnYmFzZSB8fAorCSAgICByZWdfZW5kID4gKHUzMiBfX2lvbWVtICopIGRkLT5pcGF0aF9rcmVnZW5kKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJLyogbm90IHZlcnkgZWZmaWNpZW50LCBidXQgaXQgd29ya3MgZm9yIG5vdyAqLworCXdoaWxlIChyZWdfYWRkciA8IHJlZ19lbmQpIHsKKwkJdTMyIGRhdGEgPSByZWFkbChyZWdfYWRkcik7CisJCWlmIChjb3B5X3RvX3VzZXIodWFkZHIsICZkYXRhLCBzaXplb2YoZGF0YSkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBiYWlsOworCQl9CisKKwkJcmVnX2FkZHIrKzsKKwkJdWFkZHIrKzsKKwl9CisJcmV0ID0gMDsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF93cml0ZV91bWVtMzIgLSB3cml0ZSBhIDMyLWJpdCBxdWFudGl0eSB0byB0aGUgY2hpcCBmcm9tIHVzZXIgc3BhY2UKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAY2FkZHI6IHRoZSBkZXN0aW5hdGlvbiBjaGlwIGFkZHJlc3MgKGZ1bGwgcG9pbnRlciwgbm90IG9mZnNldCkKKyAqIEB1YWRkcjogdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSBpbiB1c2VyIG1lbW9yeQorICogQGNvdW50OiBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICoKKyAqIHdyaXRlIDMyIGJpdCB2YWx1ZXMsIG5vdCA2NCBiaXQ7IGZvciBtZW1vcmllcyB0aGF0IG9ubHkKKyAqIHN1cHBvcnQgMzIgYml0IHdyaXRlOyB1c3VhbGx5IGEgc2luZ2xlIGR3b3JkLgorICovCisKK3N0YXRpYyBpbnQgaXBhdGhfd3JpdGVfdW1lbTMyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdm9pZCBfX2lvbWVtICpjYWRkciwKKwkJCSAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1YWRkciwgc2l6ZV90IGNvdW50KQoreworCXUzMiBfX2lvbWVtICpyZWdfYWRkciA9IGNhZGRyOworCWNvbnN0IHUzMiBfX2lvbWVtICpyZWdfZW5kID0gcmVnX2FkZHIgKyAoY291bnQgLyBzaXplb2YodTMyKSk7CisJaW50IHJldDsKKworCWlmIChyZWdfYWRkciA8ICh1MzIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwKKwkgICAgcmVnX2VuZCA+ICh1MzIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2VuZCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCXdoaWxlIChyZWdfYWRkciA8IHJlZ19lbmQpIHsKKwkJdTMyIGRhdGE7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgdWFkZHIsIHNpemVvZihkYXRhKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJd3JpdGVsKGRhdGEsIHJlZ19hZGRyKTsKKworCQlyZWdfYWRkcisrOworCQl1YWRkcisrOworCX0KKwlyZXQgPSAwOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwYXRoX2RpYWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmluLCBzdHJ1Y3QgZmlsZSAqZnApCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCWludCB1bml0ID0gMDsgLyogWFhYIHRoaXMgaXMgYm9ndXMgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlkZCA9IGlwYXRoX2xvb2t1cCh1bml0KTsKKworCW11dGV4X2xvY2soJmlwYXRoX211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwlpZiAoaXBhdGhfZGlhZ19pbnVzZSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRkLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKKwkJLyoKKwkJICogd2UgbmVlZCBhdCBsZWFzdCBvbmUgaW5maW5pcGF0aCBkZXZpY2UgdG8gYmUgcHJlc2VudAorCQkgKiAoZG9uJ3QgdXNlIElOSVRURUQsIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIG9wZW4KKwkJICogZXZlbiBpZiBkZXZpY2UgaXMgaW4gZnJlZXplIG1vZGUsIHdoaWNoIGNsZWFyZWQgSU5JVFRFRCkuCisJCSAqIFRoZXJlIGlzIGEgc21hbGwgYW1vdW50IG9mIHJpc2sgdG8gdGhpcywgd2hpY2ggaXMgd2h5IHdlCisJCSAqIGFsc28gdmVyaWZ5IGtyZWdiYXNlIGlzIHNldC4KKwkJICovCisKKwkJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfUFJFU0VOVCkgfHwKKwkJICAgICFkZC0+aXBhdGhfa3JlZ2Jhc2UpCisJCQljb250aW51ZTsKKworCQlpcGF0aF9kaWFnX2ludXNlID0gMTsKKwkJZGlhZ19zZXRfbGluayA9IDA7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSAtRU5PREVWOworCitiYWlsOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJLyogT25seSBleHBvc2UgYSB3YXkgdG8gcmVzZXQgdGhlIGRldmljZSBpZiB3ZQorCSAgIG1ha2UgaXQgaW50byBkaWFnIG1vZGUuICovCisJaWYgKHJldCA9PSAwKQorCQlpcGF0aF9leHBvc2VfcmVzZXQoJmRkLT5wY2lkZXYtPmRldik7CisKKwltdXRleF91bmxvY2soJmlwYXRoX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfZGlhZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCit7CisJbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOworCWlwYXRoX2RpYWdfaW51c2UgPSAwOworCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBpcGF0aF9kaWFnX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCWludCB1bml0ID0gMDsgLyogWFhYIHByb3ZpZGUgZm9yIHJlYWRzIG9uIG90aGVyIHVuaXRzIHNvbWUgZGF5ICovCisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXZvaWQgX19pb21lbSAqa3JlZ19iYXNlOworCXNzaXplX3QgcmV0OworCisJZGQgPSBpcGF0aF9sb29rdXAodW5pdCk7CisJaWYgKCFkZCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWw7CisJfQorCisJa3JlZ19iYXNlID0gZGQtPmlwYXRoX2tyZWdiYXNlOworCisJaWYgKGNvdW50ID09IDApCisJCXJldCA9IDA7CisJZWxzZSBpZiAoKGNvdW50ICUgNCkgfHwgKCpvZmYgJSA0KSkKKwkJLyogYWRkcmVzcyBvciBsZW5ndGggaXMgbm90IDMyLWJpdCBhbGlnbmVkLCBoZW5jZSBpbnZhbGlkICovCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZSBpZiAoKGNvdW50ICUgOCkgfHwgKCpvZmYgJSA4KSkKKwkJLyogYWRkcmVzcyBvciBsZW5ndGggbm90IDY0LWJpdCBhbGlnbmVkOyBkbyAzMi1iaXQgcmVhZHMgKi8KKwkJcmV0ID0gaXBhdGhfcmVhZF91bWVtMzIoZGQsIGRhdGEsIGtyZWdfYmFzZSArICpvZmYsIGNvdW50KTsKKwllbHNlCisJCXJldCA9IGlwYXRoX3JlYWRfdW1lbTY0KGRkLCBkYXRhLCBrcmVnX2Jhc2UgKyAqb2ZmLCBjb3VudCk7CisKKwlpZiAocmV0ID49IDApIHsKKwkJKm9mZiArPSBjb3VudDsKKwkJcmV0ID0gY291bnQ7CisJfQorCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlwYXRoX2RpYWdfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCWludCB1bml0ID0gMDsgLyogWFhYIHRoaXMgaXMgYm9ndXMgKi8KKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJdm9pZCBfX2lvbWVtICprcmVnX2Jhc2U7CisJc3NpemVfdCByZXQ7CisKKwlkZCA9IGlwYXRoX2xvb2t1cCh1bml0KTsKKwlpZiAoIWRkKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gYmFpbDsKKwl9CisJa3JlZ19iYXNlID0gZGQtPmlwYXRoX2tyZWdiYXNlOworCisJaWYgKGNvdW50ID09IDApCisJCXJldCA9IDA7CisJZWxzZSBpZiAoKGNvdW50ICUgNCkgfHwgKCpvZmYgJSA0KSkKKwkJLyogYWRkcmVzcyBvciBsZW5ndGggaXMgbm90IDMyLWJpdCBhbGlnbmVkLCBoZW5jZSBpbnZhbGlkICovCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZSBpZiAoKGNvdW50ICUgOCkgfHwgKCpvZmYgJSA4KSkKKwkJLyogYWRkcmVzcyBvciBsZW5ndGggbm90IDY0LWJpdCBhbGlnbmVkOyBkbyAzMi1iaXQgd3JpdGVzICovCisJCXJldCA9IGlwYXRoX3dyaXRlX3VtZW0zMihkZCwga3JlZ19iYXNlICsgKm9mZiwgZGF0YSwgY291bnQpOworCWVsc2UKKwkJcmV0ID0gaXBhdGhfd3JpdGVfdW1lbTY0KGRkLCBrcmVnX2Jhc2UgKyAqb2ZmLCBkYXRhLCBjb3VudCk7CisKKwlpZiAocmV0ID49IDApIHsKKwkJKm9mZiArPSBjb3VudDsKKwkJcmV0ID0gY291bnQ7CisJfQorCitiYWlsOgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkY2RhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwpAQCAtMCwwICsxLDE5OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKyNpbmNsdWRlICJpcGF0aF9sYXllci5oIgorCitzdGF0aWMgdm9pZCBpcGF0aF91cGRhdGVfcGlvX2J1ZnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisKK2NvbnN0IGNoYXIgKmlwYXRoX2dldF91bml0X25hbWUoaW50IHVuaXQpCit7CisJc3RhdGljIGNoYXIgaW5hbWVbMTZdOworCXNucHJpbnRmKGluYW1lLCBzaXplb2YgaW5hbWUsICJpbmZpbmlwYXRoJXUiLCB1bml0KTsKKwlyZXR1cm4gaW5hbWU7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2dldF91bml0X25hbWUpOworCisjZGVmaW5lIERSSVZFUl9MT0FEX01TRyAiUGF0aFNjYWxlICIgSVBBVEhfRFJWX05BTUUgIiBsb2FkZWQ6ICIKKyNkZWZpbmUgUEZYIElQQVRIX0RSVl9OQU1FICI6ICIKKworLyoKKyAqIFRoZSBzaXplIGhhcyB0byBiZSBsb25nZXIgdGhhbiB0aGlzIHN0cmluZywgc28gd2UgY2FuIGFwcGVuZAorICogYm9hcmQvY2hpcCBpbmZvcm1hdGlvbiB0byBpdCBpbiB0aGUgaW5pdCBjb2RlLgorICovCitjb25zdCBjaGFyIGlwYXRoX2NvcmVfdmVyc2lvbltdID0gSVBBVEhfSURTVFIgIlxuIjsKKworc3RhdGljIHN0cnVjdCBpZHIgdW5pdF90YWJsZTsKK0RFRklORV9TUElOTE9DSyhpcGF0aF9kZXZzX2xvY2spOworTElTVF9IRUFEKGlwYXRoX2Rldl9saXN0KTsKKword2FpdF9xdWV1ZV9oZWFkX3QgaXBhdGhfc21hX3N0YXRlX3dhaXQ7CisKK3Vuc2lnbmVkIGlwYXRoX2RlYnVnID0gX19JUEFUSF9JTkZPOworCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGlwYXRoX2RlYnVnLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAibWFzayBmb3IgZGVidWcgcHJpbnRzIik7CitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9kZWJ1Zyk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlBhdGhTY2FsZSA8c3VwcG9ydEBwYXRoc2NhbGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQYXRoc2NhbGUgSW5maW5pUGF0aCBkcml2ZXIiKTsKKworY29uc3QgY2hhciAqaXBhdGhfaWJjc3RhdHVzX3N0cltdID0geworCSJEaXNhYmxlZCIsCisJIkxpbmtVcCIsCisJIlBvbGxBY3RpdmUiLAorCSJQb2xsUXVpZXQiLAorCSJTbGVlcERlbGF5IiwKKwkiU2xlZXBRdWlldCIsCisJIkxTdGF0ZTYiLAkJLyogdW51c2VkICovCisJIkxTdGF0ZTciLAkJLyogdW51c2VkICovCisJIkNmZ0RlYm91bmNlIiwKKwkiQ2ZnUmN2ZkNmZyIsCisJIkNmZ1dhaXRSbXQiLAorCSJDZmdJZGxlIiwKKwkiUmVjb3ZSZXRyYWluIiwKKwkiTFN0YXRlMHhEIiwJCS8qIHVudXNlZCAqLworCSJSZWNvdldhaXRSbXQiLAorCSJSZWNvdklkbGUiLAorfTsKKworLyoKKyAqIFRoZXNlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIGNoaXAtc3BlY2lmaWMgZmlsZXMKKyAqIGJ1dCBhcmUgZGVmaW5lZCBoZXJlLgorICovCit1MTYgaXBhdGhfZ3Bpb19zZGFfbnVtLCBpcGF0aF9ncGlvX3NjbF9udW07Cit1NjQgaXBhdGhfZ3Bpb19zZGEsIGlwYXRoX2dwaW9fc2NsOwordTY0IGluZmluaXBhdGhfaV9iaXRzZXh0YW50OworaXBhdGhfZXJyX3QgaW5maW5pcGF0aF9lX2JpdHNleHRhbnQsIGluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQ7Cit1MzIgaW5maW5pcGF0aF9pX3JjdmF2YWlsX21hc2ssIGluZmluaXBhdGhfaV9yY3Z1cmdfbWFzazsKKworc3RhdGljIHZvaWQgX19kZXZleGl0IGlwYXRoX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKik7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBpcGF0aF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKTsKKworLyogT25seSBuZWVkZWQgZm9yIHJlZ2lzdHJhdGlvbiwgbm90aGluZyBlbHNlIG5lZWRzIHRoaXMgaW5mbyAqLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BBVEhTQ0FMRSAweDFmYzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIX0hUIDB4ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lORklOSVBBVEhfUEU4MDAgMHgxMAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXBhdGhfcGNpX3RibFtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1BBVEhTQ0FMRSwgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIX0hUKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1BBVEhTQ0FMRSwgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIX1BFODAwKSB9LAorCXsgMCwgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlwYXRoX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaXBhdGhfZHJpdmVyID0geworCS5uYW1lID0gSVBBVEhfRFJWX05BTUUsCisJLnByb2JlID0gaXBhdGhfaW5pdF9vbmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGlwYXRoX3JlbW92ZV9vbmUpLAorCS5pZF90YWJsZSA9IGlwYXRoX3BjaV90YmwsCit9OworCisvKgorICogVGhpcyBpcyB3aGVyZSBwb3J0IDAncyByY3ZoZHJ0YWlsIHJlZ2lzdGVyIGlzIHdyaXR0ZW4gYmFjazsgd2UgYWxzbworICogd2FudCBub3RoaW5nIGVsc2Ugc2hhcmluZyB0aGUgY2FjaGUgbGluZSwgc28gbWFrZSBpdCBhIGNhY2hlIGxpbmUKKyAqIGluIHNpemUuICBVc2VkIGZvciBhbGwgdW5pdHMuCisgKi8KK3ZvbGF0aWxlIF9fbGU2NCAqaXBhdGhfcG9ydDBfcmN2aGRydGFpbDsKK2RtYV9hZGRyX3QgaXBhdGhfcG9ydDBfcmN2aGRydGFpbF9kbWE7CitzdGF0aWMgaW50IHBvcnQwX3JjdmhkcnRhaWxfcmVmczsKKworc3RhdGljIGlubGluZSB2b2lkIHJlYWRfYmFycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkgICAgIHUzMiAqYmFyMCwgdTMyICpiYXIxKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsIGJhcjApOworCWlmIChyZXQpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gcmVhZCBiYXIwIGJlZm9yZSBlbmFibGU6ICIKKwkJCSAgICAgICJlcnJvciAlZFxuIiwgLXJldCk7CisKKwlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzEsIGJhcjEpOworCWlmIChyZXQpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gcmVhZCBiYXIxIGJlZm9yZSBlbmFibGU6ICIKKwkJCSAgICAgICJlcnJvciAlZFxuIiwgLXJldCk7CisKKwlpcGF0aF9kYmcoIlJlYWQgYmFyMCAleCBiYXIxICV4XG4iLCAqYmFyMCwgKmJhcjEpOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9mcmVlX2RldmRhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpZiAoZGQtPmlwYXRoX3VuaXQgIT0gLTEpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCQlpZHJfcmVtb3ZlKCZ1bml0X3RhYmxlLCBkZC0+aXBhdGhfdW5pdCk7CisJCWxpc3RfZGVsKCZkZC0+aXBhdGhfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCX0KKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKmRkKSwgZGQsIGRkLT5pcGF0aF9kbWFfYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqaXBhdGhfYWxsb2NfZGV2ZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCByZXQ7CisKKwlpZiAoIWlkcl9wcmVfZ2V0KCZ1bml0X3RhYmxlLCBHRlBfS0VSTkVMKSkgeworCQlkZCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlkZCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKmRkKSwgJmRtYV9hZGRyLAorCQkJCUdGUF9LRVJORUwpOworCisJaWYgKCFkZCkgeworCQlkZCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlkZC0+aXBhdGhfZG1hX2FkZHIgPSBkbWFfYWRkcjsKKwlkZC0+aXBhdGhfdW5pdCA9IC0xOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJcmV0ID0gaWRyX2dldF9uZXcoJnVuaXRfdGFibGUsIGRkLCAmZGQtPmlwYXRoX3VuaXQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRQorCQkgICAgICAgIjogQ291bGQgbm90IGFsbG9jYXRlIHVuaXQgSUQ6IGVycm9yICVkXG4iLCAtcmV0KTsKKwkJaXBhdGhfZnJlZV9kZXZkYXRhKHBkZXYsIGRkKTsKKwkJZGQgPSBFUlJfUFRSKHJldCk7CisJCWdvdG8gYmFpbF91bmxvY2s7CisJfQorCisJZGQtPnBjaWRldiA9IHBkZXY7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRkKTsKKworCWxpc3RfYWRkKCZkZC0+aXBhdGhfbGlzdCwgJmlwYXRoX2Rldl9saXN0KTsKKworYmFpbF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKK2JhaWw6CisJcmV0dXJuIGRkOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9kZXZkYXRhICpfX2lwYXRoX2xvb2t1cChpbnQgdW5pdCkKK3sKKwlyZXR1cm4gaWRyX2ZpbmQoJnVuaXRfdGFibGUsIHVuaXQpOworfQorCitzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqaXBhdGhfbG9va3VwKGludCB1bml0KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCWRkID0gX19pcGF0aF9sb29rdXAodW5pdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZGQ7Cit9CisKK2ludCBpcGF0aF9jb3VudF91bml0cyhpbnQgKm5wcmVzZW50cCwgaW50ICpudXBwLCB1MzIgKm1heHBvcnRzcCkKK3sKKwlpbnQgbnVuaXRzLCBucHJlc2VudCwgbnVwOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBtYXhwb3J0czsKKworCW51bml0cyA9IG5wcmVzZW50ID0gbnVwID0gbWF4cG9ydHMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZCwgJmlwYXRoX2Rldl9saXN0LCBpcGF0aF9saXN0KSB7CisJCW51bml0cysrOworCQlpZiAoKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpICYmIGRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJCW5wcmVzZW50Kys7CisJCWlmIChkZC0+aXBhdGhfbGlkICYmCisJCSAgICAhKGRkLT5pcGF0aF9mbGFncyAmIChJUEFUSF9ESVNBQkxFRCB8IElQQVRIX0xJTktET1dOCisJCQkJCSB8IElQQVRIX0xJTktVTkspKSkKKwkJCW51cCsrOworCQlpZiAoZGQtPmlwYXRoX2NmZ3BvcnRzID4gbWF4cG9ydHMpCisJCQltYXhwb3J0cyA9IGRkLT5pcGF0aF9jZmdwb3J0czsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCWlmIChucHJlc2VudHApCisJCSpucHJlc2VudHAgPSBucHJlc2VudDsKKwlpZiAobnVwcCkKKwkJKm51cHAgPSBudXA7CisJaWYgKG1heHBvcnRzcCkKKwkJKm1heHBvcnRzcCA9IG1heHBvcnRzOworCisJcmV0dXJuIG51bml0czsKK30KKworc3RhdGljIGludCBpbml0X3BvcnQwX3JjdmhkcnRhaWwoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmlwYXRoX211dGV4KTsKKworCWlmICghaXBhdGhfcG9ydDBfcmN2aGRydGFpbCkgeworCQlpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsID0KKwkJCWRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkgICBJUEFUSF9QT1JUMF9SQ1ZIRFJUQUlMX1NJWkUsCisJCQkJCSAgICZpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsX2RtYSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsOworCQl9CisJfQorCXBvcnQwX3JjdmhkcnRhaWxfcmVmcysrOworCXJldCA9IDA7CisKK2JhaWw6CisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3BvcnQwX3JjdmhkcnRhaWwoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOworCisJaWYgKCEtLXBvcnQwX3JjdmhkcnRhaWxfcmVmcykgeworCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBJUEFUSF9QT1JUMF9SQ1ZIRFJUQUlMX1NJWkUsCisJCQkJICAodm9pZCAqKSBpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsLAorCQkJCSAgaXBhdGhfcG9ydDBfcmN2aGRydGFpbF9kbWEpOworCQlpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsID0gTlVMTDsKKwl9CisKKwltdXRleF91bmxvY2soJmlwYXRoX211dGV4KTsKK30KKworLyoKKyAqIFRoZXNlIG5leHQgdHdvIHJvdXRpbmVzIGFyZSBwbGFjZWhvbGRlcnMgaW4gY2FzZSB3ZSBkb24ndCBoYXZlIHBlci1hcmNoCisgKiBjb2RlIGZvciBjb250cm9sbGluZyB3cml0ZSBjb21iaW5pbmcuICBJZiBleHBsaWNpdCBjb250cm9sIG9mIHdyaXRlCisgKiBjb21iaW5pbmcgaXMgbm90IGF2YWlsYWJsZSwgcGVyZm9ybWFuY2Ugd2lsbCBwcm9iYWJseSBiZSBhd2Z1bC4KKyAqLworCitpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIGlwYXRoX2VuYWJsZV93YyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCit2b2lkIF9fYXR0cmlidXRlX18oKHdlYWspKSBpcGF0aF9kaXNhYmxlX3djKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaXBhdGhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IHJldCwgbGVuLCBqOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKKwl1MzIgYmFyMCA9IDAsIGJhcjEgPSAwOworCXU4IHJldjsKKworCXJldCA9IGluaXRfcG9ydDBfcmN2aGRydGFpbChwZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgSVBBVEhfRFJWX05BTUUKKwkJICAgICAgICI6IENvdWxkIG5vdCBhbGxvY2F0ZSBwb3J0MF9yY3ZoZHJ0YWlsOiBlcnJvciAlZFxuIiwKKwkJICAgICAgIC1yZXQpOworCQlnb3RvIGJhaWw7CisJfQorCisJZGQgPSBpcGF0aF9hbGxvY19kZXZkYXRhKHBkZXYpOworCWlmIChJU19FUlIoZGQpKSB7CisJCXJldCA9IFBUUl9FUlIoZGQpOworCQlwcmludGsoS0VSTl9FUlIgSVBBVEhfRFJWX05BTUUKKwkJICAgICAgICI6IENvdWxkIG5vdCBhbGxvY2F0ZSBkZXZkYXRhOiBlcnJvciAlZFxuIiwgLXJldCk7CisJCWdvdG8gYmFpbF9yY3ZoZHJ0YWlsOworCX0KKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgImluaXRpYWxpemluZyB1bml0ICMldVxuIiwgZGQtPmlwYXRoX3VuaXQpOworCisJcmVhZF9iYXJzKGRkLCBwZGV2LCAmYmFyMCwgJmJhcjEpOworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkgeworCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWZmOgorCQkgKgorCQkgKiBXZSBkaWQgYSBjaGlwIHJlc2V0LCBhbmQgdGhlbiBmYWlsZWQgdG8gcmVwcm9ncmFtIHRoZQorCQkgKiBCQVIsIG9yIHRoZSBjaGlwIHJlc2V0IGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4gIFdlIHRoZW4KKwkJICogdW5sb2FkZWQgdGhlIGRyaXZlciBhbmQgcmVsb2FkZWQgaXQuCisJCSAqCisJCSAqIEJvdGggcmVzZXQgY2FzZXMgc2V0IHRoZSBCQVIgYmFjayB0byBpbml0aWFsIHN0YXRlLiAgRm9yCisJCSAqIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIEFFUiBzdGlja3kgZXJyb3IgYml0IGF0IG9mZnNldCAweDcxOAorCQkgKiBzaG91bGQgYmUgc2V0LCBidXQgdGhlIExpbnV4IGtlcm5lbCBkb2Vzbid0IHlldCBrbm93CisJCSAqIGFib3V0IHRoYXQsIGl0IGFwcGVhcnMuICBJZiB0aGUgb3JpZ2luYWwgQkFSIHdhcyByZXRhaW5lZAorCQkgKiBpbiB0aGUga2VybmVsIGRhdGEgc3RydWN0dXJlcywgdGhpcyBtYXkgYmUgT0suCisJCSAqLworCQlpcGF0aF9kZXZfZXJyKGRkLCAiZW5hYmxlIHVuaXQgJWQgZmFpbGVkOiBlcnJvciAlZFxuIiwKKwkJCSAgICAgIGRkLT5pcGF0aF91bml0LCAtcmV0KTsKKwkJZ290byBiYWlsX2RldmRhdGE7CisJfQorCWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJyZWdiYXNlICgwKSAlbGx4IGxlbiAlZCBpcnEgJXgsIHZlbmQgJXgvJXggIgorCQkgICAiZHJpdmVyX2RhdGEgJWx4XG4iLCBhZGRyLCBsZW4sIHBkZXYtPmlycSwgZW50LT52ZW5kb3IsCisJCSAgIGVudC0+ZGV2aWNlLCBlbnQtPmRyaXZlcl9kYXRhKTsKKworCXJlYWRfYmFycyhkZCwgcGRldiwgJmJhcjAsICZiYXIxKTsKKworCWlmICghYmFyMSAmJiAhKGJhcjAgJiB+MHhmKSkgeworCQlpZiAoYWRkcikgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkJBUiBpcyAwIChwcm9iYWJsZSBSRVNFVCksICIKKwkJCQkgInJld3JpdGluZyBhcyAlbGx4XG4iLCBhZGRyKTsKKwkJCXJldCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQoCisJCQkJcGRldiwgUENJX0JBU0VfQUREUkVTU18wLCBhZGRyKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlpcGF0aF9kZXZfZXJyKGRkLCAicmV3cml0ZSBvZiBCQVIwICIKKwkJCQkJICAgICAgImZhaWxlZDogZXJyICVkXG4iLCAtcmV0KTsKKwkJCQlnb3RvIGJhaWxfZGlzYWJsZTsKKwkJCX0KKwkJCXJldCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQoCisJCQkJcGRldiwgUENJX0JBU0VfQUREUkVTU18xLCBhZGRyID4+IDMyKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlpcGF0aF9kZXZfZXJyKGRkLCAicmV3cml0ZSBvZiBCQVIxICIKKwkJCQkJICAgICAgImZhaWxlZDogZXJyICVkXG4iLCAtcmV0KTsKKwkJCQlnb3RvIGJhaWxfZGlzYWJsZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJCQVIgaXMgMCAocHJvYmFibGUgUkVTRVQpLCAiCisJCQkJICAgICAgIm5vdCB1c2FibGUgdW50aWwgcmVib290XG4iKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGJhaWxfZGlzYWJsZTsKKwkJfQorCX0KKworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgSVBBVEhfRFJWX05BTUUpOworCWlmIChyZXQpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgInBjaV9yZXF1ZXN0X3JlZ2lvbnMgdW5pdCAldSBmYWlsczogIgorCQkJICJlcnIgJWRcbiIsIGRkLT5pcGF0aF91bml0LCAtcmV0KTsKKwkJZ290byBiYWlsX2Rpc2FibGU7CisJfQorCisJcmV0ID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJaWYgKHJldCkgeworCQkvKgorCQkgKiBpZiB0aGUgNjQgYml0IHNldHVwIGZhaWxzLCB0cnkgMzIgYml0LiAgU29tZSBzeXN0ZW1zCisJCSAqIGRvIG5vdCBzZXR1cCA2NCBiaXQgbWFwcyBvbiBzeXN0ZW1zIHdpdGggMkdCIG9yIGxlc3MKKwkJICogbWVtb3J5IGluc3RhbGxlZC4KKwkJICovCisJCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAocmV0KSB7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicGNpX3NldF9kbWFfbWFzayB1bml0ICV1ICIKKwkJCQkgImZhaWxzOiAlZFxuIiwgZGQtPmlwYXRoX3VuaXQsIHJldCk7CisJCQlnb3RvIGJhaWxfcmVnaW9uczsKKwkJfQorCQllbHNlCisJCQlpcGF0aF9kYmcoIk5vIDY0Yml0IERNQSBtYXNrLCB1c2VkIDMyIGJpdCBtYXNrXG4iKTsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCS8qCisJICogU2F2ZSBCQVJzIHRvIHJld3JpdGUgYWZ0ZXIgZGV2aWNlIHJlc2V0LiAgU2F2ZSBhbGwgNjQgYml0cyBvZgorCSAqIEJBUiwganVzdCBpbiBjYXNlLgorCSAqLworCWRkLT5pcGF0aF9wY2liYXIwID0gYWRkcjsKKwlkZC0+aXBhdGhfcGNpYmFyMSA9IGFkZHIgPj4gMzI7CisJZGQtPmlwYXRoX2RldmljZWlkID0gZW50LT5kZXZpY2U7CS8qIHNhdmUgZm9yIGxhdGVyIHVzZSAqLworCWRkLT5pcGF0aF92ZW5kb3JpZCA9IGVudC0+dmVuZG9yOworCisJLyogc2V0dXAgdGhlIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zLCBhcyBlYXJseSBhcyBwb3NzaWJsZS4gKi8KKwlzd2l0Y2ggKGVudC0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lORklOSVBBVEhfSFQ6CisJCWlwYXRoX2luaXRfaHQ0MDBfZnVuY3MoZGQpOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5GSU5JUEFUSF9QRTgwMDoKKwkJaXBhdGhfaW5pdF9wZTgwMF9mdW5jcyhkZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlwYXRoX2Rldl9lcnIoZGQsICJGb3VuZCB1bmtub3duIFBhdGhTY2FsZSBkZXZpY2VpZCAweCV4LCAiCisJCQkgICAgICAiZmFpbGluZ1xuIiwgZW50LT5kZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlmb3IgKGogPSAwOyBqIDwgNjsgaisrKSB7CisJCWlmICghcGRldi0+cmVzb3VyY2Vbal0uc3RhcnQpCisJCQljb250aW51ZTsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQkFSICVkIHN0YXJ0ICVseCwgZW5kICVseCwgbGVuICVseFxuIiwKKwkJCSAgIGosIHBkZXYtPnJlc291cmNlW2pdLnN0YXJ0LAorCQkJICAgcGRldi0+cmVzb3VyY2Vbal0uZW5kLAorCQkJICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBqKSk7CisJfQorCisJaWYgKCFhZGRyKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJObyB2YWxpZCBhZGRyZXNzIGluIEJBUiAwIVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gYmFpbF9yZWdpb25zOworCX0KKworCWRkLT5pcGF0aF9kZXZpY2VpZCA9IGVudC0+ZGV2aWNlOwkvKiBzYXZlIGZvciBsYXRlciB1c2UgKi8KKwlkZC0+aXBhdGhfdmVuZG9yaWQgPSBlbnQtPnZlbmRvcjsKKworCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisJaWYgKHJldCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIHJlYWQgUENJIHJldmlzaW9uIElEIHVuaXQgIgorCQkJICAgICAgIiV1OiBlcnIgJWRcbiIsIGRkLT5pcGF0aF91bml0LCAtcmV0KTsKKwkJZ290byBiYWlsX3JlZ2lvbnM7CS8qIHNob3VsZG4ndCBldmVyIGhhcHBlbiAqLworCX0KKwlkZC0+aXBhdGhfcGNpcmV2ID0gcmV2OworCisJZGQtPmlwYXRoX2tyZWdiYXNlID0gaW9yZW1hcF9ub2NhY2hlKGFkZHIsIGxlbik7CisKKwlpZiAoIWRkLT5pcGF0aF9rcmVnYmFzZSkgeworCQlpcGF0aF9kYmcoIlVuYWJsZSB0byBtYXAgaW8gYWRkciAlbGx4IHRvIGt2aXJ0LCBmYWlsaW5nXG4iLAorCQkJICBhZGRyKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsX2lvdW5tYXA7CisJfQorCWRkLT5pcGF0aF9rcmVnZW5kID0gKHU2NCBfX2lvbWVtICopCisJCSgodm9pZCBfX2lvbWVtICopZGQtPmlwYXRoX2tyZWdiYXNlICsgbGVuKTsKKwlkZC0+aXBhdGhfcGh5c2FkZHIgPSBhZGRyOwkvKiB1c2VkIGZvciBpb19yZW1hcCwgZXRjLiAqLworCS8qIGZvciB1c2VyIG1tYXAgKi8KKwlkZC0+aXBhdGhfa3JlZ3ZpcnQgPSAodTY0IF9faW9tZW0gKikgcGh5c190b192aXJ0KGFkZHIpOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIm1hcHBlZCBpbyBhZGRyICVsbHggdG8ga3JlZ2Jhc2UgJXAgIgorCQkgICAia3JlZ3ZpcnQgJXBcbiIsIGFkZHIsIGRkLT5pcGF0aF9rcmVnYmFzZSwKKwkJICAgZGQtPmlwYXRoX2tyZWd2aXJ0KTsKKworCS8qCisJICogY2xlYXIgaXBhdGhfZmxhZ3MgaGVyZSBpbnN0ZWFkIG9mIGluIGlwYXRoX2luaXRfY2hpcCBhcyBpdCBpcyBzZXQKKwkgKiBieSBpcGF0aF9zZXR1cF9odGNvbmZpZy4KKwkgKi8KKwlkZC0+aXBhdGhfZmxhZ3MgPSAwOworCisJaWYgKGRkLT5pcGF0aF9mX2J1cyhkZCwgcGRldikpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgdG8gc2V0dXAgY29uZmlnIHNwYWNlOyAiCisJCQkgICAgICAiY29udGludWluZyBhbnl3YXlcbiIpOworCisJLyoKKwkgKiBzZXQgdXAgb3VyIGludGVycnVwdCBoYW5kbGVyOyBTQV9TSElSUSBwcm9iYWJseSBub3QgbmVlZGVkLAorCSAqIHNpbmNlIE1TSSBpbnRlcnJ1cHRzIHNob3VsZG4ndCBiZSBzaGFyZWQgYnV0IHdvbid0ICBodXJ0IGZvciBub3cuCisJICogY2hlY2sgMCBpcnEgYWZ0ZXIgd2UgcmV0dXJuIGZyb20gY2hpcC1zcGVjaWZpYyBidXMgc2V0dXAsIHNpbmNlCisJICogdGhhdCBjYW4gYWZmZWN0IHRoaXMgZHVlIHRvIHNldHVwCisJICovCisJaWYgKCFwZGV2LT5pcnEpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJpcnEgaXMgMCwgQklPUyBlcnJvcj8gIEludGVycnVwdHMgd29uJ3QgIgorCQkJICAgICAgIndvcmtcbiIpOworCWVsc2UgeworCQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGlwYXRoX2ludHIsIFNBX1NISVJRLAorCQkJCSAgSVBBVEhfRFJWX05BTUUsIGRkKTsKKwkJaWYgKHJldCkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkbid0IHNldHVwIGlycSBoYW5kbGVyLCAiCisJCQkJICAgICAgImlycT0ldTogJWRcbiIsIHBkZXYtPmlycSwgcmV0KTsKKwkJCWdvdG8gYmFpbF9pb3VubWFwOworCQl9CisJfQorCisJcmV0ID0gaXBhdGhfaW5pdF9jaGlwKGRkLCAwKTsJLyogZG8gdGhlIGNoaXAtc3BlY2lmaWMgaW5pdCAqLworCWlmIChyZXQpCisJCWdvdG8gYmFpbF9pb3VubWFwOworCisJcmV0ID0gaXBhdGhfZW5hYmxlX3djKGRkKTsKKworCWlmIChyZXQpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIldyaXRlIGNvbWJpbmluZyBub3QgZW5hYmxlZCAiCisJCQkgICAgICAiKGVyciAlZCk6IHBlcmZvcm1hbmNlIG1heSBiZSBwb29yXG4iLAorCQkJICAgICAgLXJldCk7CisJCXJldCA9IDA7CisJfQorCisJaXBhdGhfZGV2aWNlX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LCBkZCk7CisJaXBhdGhmc19hZGRfZGV2aWNlKGRkKTsKKwlpcGF0aF91c2VyX2FkZChkZCk7CisJaXBhdGhfbGF5ZXJfYWRkKGRkKTsKKworCWdvdG8gYmFpbDsKKworYmFpbF9pb3VubWFwOgorCWlvdW5tYXAoKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UpOworCitiYWlsX3JlZ2lvbnM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKworYmFpbF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworYmFpbF9kZXZkYXRhOgorCWlwYXRoX2ZyZWVfZGV2ZGF0YShwZGV2LCBkZCk7CisKK2JhaWxfcmN2aGRydGFpbDoKKwljbGVhbnVwX3BvcnQwX3JjdmhkcnRhaWwocGRldik7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGlwYXRoX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAicmVtb3ZpbmcsIHBkZXY9JXBcbiIsIHBkZXYpOworCWlmICghcGRldikKKwkJcmV0dXJuOworCisJZGQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaXBhdGhfbGF5ZXJfZGVsKGRkKTsKKwlpcGF0aF91c2VyX2RlbChkZCk7CisJaXBhdGhmc19yZW1vdmVfZGV2aWNlKGRkKTsKKwlpcGF0aF9kZXZpY2VfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYsIGRkKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZWxlYXNpbmcgcGNpIG1lbW9yeSByZWdpb25zLCBkZCAlcCwgIgorCQkgICAidW5pdCAldVxuIiwgZGQsICh1MzIpIGRkLT5pcGF0aF91bml0KTsKKwlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlVubWFwcGluZyBrcmVnYmFzZSAlcFxuIiwKKwkJCSAgIGRkLT5pcGF0aF9rcmVnYmFzZSk7CisJCWlvdW5tYXAoKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UpOworCQlkZC0+aXBhdGhfa3JlZ2Jhc2UgPSBOVUxMOworCX0KKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgImNhbGxpbmcgcGNpX2Rpc2FibGVfZGV2aWNlXG4iKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlpcGF0aF9mcmVlX2RldmRhdGEocGRldiwgZGQpOworCWNsZWFudXBfcG9ydDBfcmN2aGRydGFpbChwZGV2KTsKK30KKworLyogZ2VuZXJhbCBkcml2ZXIgdXNlICovCitERUZJTkVfTVVURVgoaXBhdGhfbXV0ZXgpOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwYXRoX3Bpb2F2YWlsX2xvY2spOworCisvKioKKyAqIGlwYXRoX2Rpc2FybV9waW9idWZzIC0gY2FuY2VsIGEgcmFuZ2Ugb2YgUElPIGJ1ZmZlcnMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAZmlyc3Q6IHRoZSBmaXJzdCBQSU8gYnVmZmVyIHRvIGNhbmNlbAorICogQGNudDogdGhlIG51bWJlciBvZiBQSU8gYnVmZmVycyB0byBjYW5jZWwKKyAqCisgKiBjYW5jZWwgYSByYW5nZSBvZiBQSU8gYnVmZmVycywgdXNlZCB3aGVuIHRoZXkgbWlnaHQgYmUgYXJtZWQsIGJ1dAorICogbm90IHRyaWdnZXJlZC4gIFVzZWQgYXQgaW5pdCB0byBlbnN1cmUgYnVmZmVyIHN0YXRlLCBhbmQgYWxzbyB1c2VyCisgKiBwcm9jZXNzIGNsb3NlLCBpbiBjYXNlIGl0IGRpZWQgd2hpbGUgd3JpdGluZyB0byBhIFBJTyBidWZmZXIKKyAqIEFsc28gYWZ0ZXIgZXJyb3JzLgorICovCit2b2lkIGlwYXRoX2Rpc2FybV9waW9idWZzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgZmlyc3QsCisJCQkgIHVuc2lnbmVkIGNudCkKK3sKKwl1bnNpZ25lZCBpLCBsYXN0ID0gZmlyc3QgKyBjbnQ7CisJdTY0IHNlbmRjdHJsLCBzZW5kb3JpZzsKKworCWlwYXRoX2NkYmcoUEtULCAiZGlzYXJtICV1IFBJT2J1ZnMgZmlyc3Q9JXVcbiIsIGNudCwgZmlyc3QpOworCXNlbmRvcmlnID0gZGQtPmlwYXRoX3NlbmRjdHJsIHwgSU5GSU5JUEFUSF9TX0RJU0FSTTsKKwlmb3IgKGkgPSBmaXJzdDsgaSA8IGxhc3Q7IGkrKykgeworCQlzZW5kY3RybCA9IHNlbmRvcmlnIHwKKwkJCShpIDw8IElORklOSVBBVEhfU19ESVNBUk1QSU9CVUZfU0hJRlQpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJCSBzZW5kY3RybCk7CisJfQorCisJLyoKKwkgKiBXcml0ZSBpdCBhZ2FpbiB3aXRoIGN1cnJlbnQgdmFsdWUsIGluIGNhc2UgaXBhdGhfc2VuZGN0cmwgY2hhbmdlZAorCSAqIHdoaWxlIHdlIHdlcmUgbG9vcGluZzsgbm8gY3JpdGljYWwgYml0cyB0aGF0IHdvdWxkIHJlcXVpcmUKKwkgKiBsb2NraW5nLgorCSAqCisJICogV3JpdGUgYSAwLCBhbmQgdGhlbiB0aGUgb3JpZ2luYWwgdmFsdWUsIHJlYWRpbmcgc2NyYXRjaCBpbgorCSAqIGJldHdlZW4uICBUaGlzIHNlZW1zIHRvIGF2b2lkIGEgY2hpcCB0aW1pbmcgcmFjZSB0aGF0IGNhdXNlcworCSAqIHBpb2F2YWlsIHVwZGF0ZXMgdG8gbWVtb3J5IHRvIHN0b3AuCisJICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJCSAwKTsKKwlzZW5kb3JpZyA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkgZGQtPmlwYXRoX3NlbmRjdHJsKTsKK30KKworLyoqCisgKiBpcGF0aF93YWl0X2xpbmtzdGF0ZSAtIHdhaXQgZm9yIGFuIElCIGxpbmsgc3RhdGUgY2hhbmdlIHRvIG9jY3VyCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHN0YXRlOiB0aGUgc3RhdGUgdG8gd2FpdCBmb3IKKyAqIEBtc2VjczogdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdAorICoKKyAqIHdhaXQgdXAgdG8gbXNlY3MgbWlsbGlzZWNvbmRzIGZvciBJQiBsaW5rIHN0YXRlIGNoYW5nZSB0byBvY2N1ciBmb3IKKyAqIG5vdywgdGFrZSB0aGUgZWFzeSBwb2xsaW5nIHJvdXRlLiAgQ3VycmVudGx5IHVzZWQgb25seSBieQorICogaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZS4gIFJldHVybnMgMCBpZiBzdGF0ZSByZWFjaGVkLCBvdGhlcndpc2UKKyAqIC1FVElNRURPVVQgc3RhdGUgY2FuIGhhdmUgbXVsdGlwbGUgc3RhdGVzIHNldCwgZm9yIGFueSBvZiBzZXZlcmFsCisgKiB0cmFuc2l0aW9ucy4KKyAqLworaW50IGlwYXRoX3dhaXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIHN0YXRlLCBpbnQgbXNlY3MpCit7CisJZGQtPmlwYXRoX3NtYV9zdGF0ZV93YW50ZWQgPSBzdGF0ZTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpcGF0aF9zbWFfc3RhdGVfd2FpdCwKKwkJCQkJIChkZC0+aXBhdGhfZmxhZ3MgJiBzdGF0ZSksCisJCQkJCSBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7CisJZGQtPmlwYXRoX3NtYV9zdGF0ZV93YW50ZWQgPSAwOworCisJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgc3RhdGUpKSB7CisJCXU2NCB2YWw7CisJCWlwYXRoX2NkYmcoU01BLCAiRGlkbid0IHJlYWNoIGxpbmtzdGF0ZSAlcyB3aXRoaW4gJXUgbXNcbiIsCisJCQkgICAvKiB0ZXN0IElOSVQgYWhlYWQgb2YgRE9XTiwgYm90aCBjYW4gYmUgc2V0ICovCisJCQkgICAoc3RhdGUgJiBJUEFUSF9MSU5LSU5JVCkgPyAiSU5JVCIgOgorCQkJICAgKChzdGF0ZSAmIElQQVRIX0xJTktET1dOKSA/ICJET1dOIiA6CisJCQkgICAgKChzdGF0ZSAmIElQQVRIX0xJTktBUk1FRCkgPyAiQVJNIiA6ICJBQ1RJVkUiKSksCisJCQkgICBtc2Vjcyk7CisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY3N0YXR1cyk7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImliY2M9JWxseCBpYmNzdGF0dXM9JWxseCAoJXMpXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaXBhdGhfcmVhZF9rcmVnNjQoCisJCQkJICAgZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjY3RybCksCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwsCisJCQkgICBpcGF0aF9pYmNzdGF0dXNfc3RyW3ZhbCAmIDB4Zl0pOworCX0KKwlyZXR1cm4gKGRkLT5pcGF0aF9mbGFncyAmIHN0YXRlKSA/IDAgOiAtRVRJTUVET1VUOworfQorCit2b2lkIGlwYXRoX2RlY29kZV9lcnIoY2hhciAqYnVmLCBzaXplX3QgYmxlbiwgaXBhdGhfZXJyX3QgZXJyKQoreworCSpidWYgPSAnXDAnOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUkhEUkxFTikKKwkJc3RybGNhdChidWYsICJyaGRybGVuICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUkJBRFRJRCkKKwkJc3RybGNhdChidWYsICJyYmFkdGlkICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUkJBRFZFUlNJT04pCisJCXN0cmxjYXQoYnVmLCAicmJhZHZlcnNpb24gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SSERSKQorCQlzdHJsY2F0KGJ1ZiwgInJoZHIgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9STE9OR1BLVExFTikKKwkJc3RybGNhdChidWYsICJybG9uZ3BrdGxlbiAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JTSE9SVFBLVExFTikKKwkJc3RybGNhdChidWYsICJyc2hvcnRwa3RsZW4gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9STUFYUEtUTEVOKQorCQlzdHJsY2F0KGJ1ZiwgInJtYXhwa3RsZW4gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9STUlOUEtUTEVOKQorCQlzdHJsY2F0KGJ1ZiwgInJtaW5wa3RsZW4gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SRk9STUFURVJSKQorCQlzdHJsY2F0KGJ1ZiwgInJmb3JtYXRlcnIgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SVU5TVVBWTCkKKwkJc3RybGNhdChidWYsICJydW5zdXB2bCAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JVTkVYUENIQVIpCisJCXN0cmxjYXQoYnVmLCAicnVuZXhwY2hhciAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JJQkZMT1cpCisJCXN0cmxjYXQoYnVmLCAicmliZmxvdyAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JFQlApCisJCXN0cmxjYXQoYnVmLCAiRUJQICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfU1VOREVSUlVOKQorCQlzdHJsY2F0KGJ1ZiwgInN1bmRlcnJ1biAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1NQSU9BUk1MQVVOQ0gpCisJCXN0cmxjYXQoYnVmLCAic3Bpb2FybWxhdW5jaCAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1NVTkVYUEVSUlBLVE5VTSkKKwkJc3RybGNhdChidWYsICJzdW5leHBlcnJwa3RudW0gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QpCisJCXN0cmxjYXQoYnVmLCAic2Ryb3BwZWRkYXRhcGt0ICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfU0RST1BQRURTTVBQS1QpCisJCXN0cmxjYXQoYnVmLCAic2Ryb3BwZWRzbXBwa3QgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9TTUFYUEtUTEVOKQorCQlzdHJsY2F0KGJ1ZiwgInNtYXhwa3RsZW4gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9TTUlOUEtUTEVOKQorCQlzdHJsY2F0KGJ1ZiwgInNtaW5wa3RsZW4gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9TVU5TVVBWTCkKKwkJc3RybGNhdChidWYsICJzdW5zdXBWTCAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1NQS1RMRU4pCisJCXN0cmxjYXQoYnVmLCAic3BrdGxlbiAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX0lOVkFMSURBRERSKQorCQlzdHJsY2F0KGJ1ZiwgImludmFsaWRhZGRyICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUklDUkMpCisJCXN0cmxjYXQoYnVmLCAiQ1JDICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUlZDUkMpCisJCXN0cmxjYXQoYnVmLCAiVkNSQyAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMKQorCQlzdHJsY2F0KGJ1ZiwgInJjdmVncmZ1bGwgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SUkNWSERSRlVMTCkKKwkJc3RybGNhdChidWYsICJyY3ZoZHJmdWxsICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEKQorCQlzdHJsY2F0KGJ1ZiwgImliY3N0YXR1c2NoZyAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JJQkxPU1RMSU5LKQorCQlzdHJsY2F0KGJ1ZiwgInJpYmxvc3RsaW5rICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfSEFSRFdBUkUpCisJCXN0cmxjYXQoYnVmLCAiaGFyZHdhcmUgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SRVNFVCkKKwkJc3RybGNhdChidWYsICJyZXNldCAiLCBibGVuKTsKK30KKworLyoqCisgKiBnZXRfcmhmX2VycnN0cmluZyAtIGRlY29kZSBSSEYgZXJyb3JzCisgKiBAZXJyOiB0aGUgZXJyIG51bWJlcgorICogQG1zZzogdGhlIG91dHB1dCBidWZmZXIKKyAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBvbmx5IHVzZWQgb25lIHBsYWNlIG5vdywgbWF5IHdhbnQgbW9yZSBsYXRlcgorICovCitzdGF0aWMgdm9pZCBnZXRfcmhmX2VycnN0cmluZyh1MzIgZXJyLCBjaGFyICptc2csIHNpemVfdCBsZW4pCit7CisJLyogaWYgbm8gZXJyb3JzLCBhbmQgc28gZG9uJ3QgbmVlZCB0byBjaGVjayB3aGF0J3MgZmlyc3QgKi8KKwkqbXNnID0gJ1wwJzsKKworCWlmIChlcnIgJiBJTkZJTklQQVRIX1JIRl9IX0lDUkNFUlIpCisJCXN0cmxjYXQobXNnLCAiaWNyY2VyciAiLCBsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX1JIRl9IX1ZDUkNFUlIpCisJCXN0cmxjYXQobXNnLCAidmNyY2VyciAiLCBsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX1JIRl9IX1BBUklUWUVSUikKKwkJc3RybGNhdChtc2csICJwYXJpdHllcnIgIiwgbGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9SSEZfSF9MRU5FUlIpCisJCXN0cmxjYXQobXNnLCAibGVuZXJyICIsIGxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfUkhGX0hfTVRVRVJSKQorCQlzdHJsY2F0KG1zZywgIm10dWVyciAiLCBsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX1JIRl9IX0lIRFJFUlIpCisJCS8qIGluZmluaXBhdGggaGRyIGNoZWNrc3VtIGVycm9yICovCisJCXN0cmxjYXQobXNnLCAiaXBhdGhoZHJlcnIgIiwgbGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9SSEZfSF9USURFUlIpCisJCXN0cmxjYXQobXNnLCAidGlkZXJyICIsIGxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfUkhGX0hfTUtFUlIpCisJCS8qIGJhZCBwb3J0LCBvZmZzZXQsIGV0Yy4gKi8KKwkJc3RybGNhdChtc2csICJpbnZhbGlkIGlwYXRoaGRyICIsIGxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfUkhGX0hfSUJFUlIpCisJCXN0cmxjYXQobXNnLCAiaWJlcnIgIiwgbGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9SSEZfTF9TV0EpCisJCXN0cmxjYXQobXNnLCAic3dBICIsIGxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfUkhGX0xfU1dCKQorCQlzdHJsY2F0KG1zZywgInN3QiAiLCBsZW4pOworfQorCisvKioKKyAqIGlwYXRoX2dldF9lZ3JidWYgLSBnZXQgYW4gZWFnZXIgYnVmZmVyCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGJ1Zm51bTogdGhlIGVhZ2VyIGJ1ZmZlciB0byBnZXQKKyAqIEBlcnI6IHVudXNlZAorICoKKyAqIG11c3Qgb25seSBiZSBjYWxsZWQgaWYgaXBhdGhfcGRbcG9ydF0gaXMga25vd24gdG8gYmUgYWxsb2NhdGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqaXBhdGhfZ2V0X2VncmJ1ZihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBidWZudW0sCisJCQkJICAgICBpbnQgZXJyKQoreworCXJldHVybiBkZC0+aXBhdGhfcG9ydDBfc2ticyA/CisJCSh2b2lkICopZGQtPmlwYXRoX3BvcnQwX3NrYnNbYnVmbnVtXS0+ZGF0YSA6IE5VTEw7Cit9CisKKy8qKgorICogaXBhdGhfYWxsb2Nfc2tiIC0gYWxsb2NhdGUgYW4gc2tiIGFuZCBidWZmZXIgd2l0aCBwb3NzaWJsZSBjb25zdHJhaW50cworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBnZnBfbWFzazogdGhlIHNrX2J1ZmYgU0ZQIG1hc2sKKyAqLworc3RydWN0IHNrX2J1ZmYgKmlwYXRoX2FsbG9jX3NrYihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgbGVuOworCisJLyoKKwkgKiBPbmx5IGZ1bGx5IHN1cHBvcnRlZCB3YXkgdG8gaGFuZGxlIHRoaXMgaXMgdG8gYWxsb2NhdGUgbG90cworCSAqIGV4dHJhLCBhbGlnbiBhcyBuZWVkZWQsIGFuZCB0aGVuIGRvIHNrYl9yZXNlcnZlKCkuICBUaGF0IHdhc3RlcworCSAqIGEgbG90IG9mIG1lbW9yeS4uLiAgSSdsbCBoYXZlIHRvIGhhY2sgdGhpcyBpbnRvIGluZmluaXBhdGhfY29weQorCSAqIGFsc28uCisJICovCisKKwkvKgorCSAqIFdlIG5lZWQgNCBleHRyYSBieXRlcyBmb3IgdW5hbGlnbmVkIHRyYW5zZmVyIGNvcHlpbmcKKwkgKi8KKwlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfNEJZVEVfVElEKSB7CisJCS8qIHdlIG5lZWQgYSA0S0IgbXVsdGlwbGUgYWxpZ25tZW50LCBhbmQgdGhlcmUgaXMgbm8gd2F5CisJCSAqIHRvIGRvIGl0IGV4Y2VwdCB0byBhbGxvY2F0ZSBleHRyYSBhbmQgdGhlbiBza2JfcmVzZXJ2ZQorCQkgKiBlbm91Z2ggdG8gYnJpbmcgaXQgdXAgdG8gdGhlIHJpZ2h0IGFsaWdubWVudC4KKwkJICovCisJCWxlbiA9IGRkLT5pcGF0aF9pYm1heGxlbiArIDQgKyAoMSA8PCAxMSkgLSAxOworCX0KKwllbHNlCisJCWxlbiA9IGRkLT5pcGF0aF9pYm1heGxlbiArIDQ7CisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2spOworCWlmICghc2tiKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tidWZmLCBsZW5ndGggJXVcbiIsCisJCQkgICAgICBsZW4pOworCQlnb3RvIGJhaWw7CisJfQorCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF80QllURV9USUQpIHsKKwkJdTMyIHVuYSA9ICgoMSA8PCAxMSkgLSAxKSAmICh1bnNpZ25lZCBsb25nKShza2ItPmRhdGEgKyA0KTsKKwkJaWYgKHVuYSkKKwkJCXNrYl9yZXNlcnZlKHNrYiwgNCArICgxIDw8IDExKSAtIHVuYSk7CisJCWVsc2UKKwkJCXNrYl9yZXNlcnZlKHNrYiwgNCk7CisJfSBlbHNlCisJCXNrYl9yZXNlcnZlKHNrYiwgNCk7CisKK2JhaWw6CisJcmV0dXJuIHNrYjsKK30KKworLyoqCisgKiBpcGF0aF9yY3ZfbGF5ZXIgLSByZWNlaXZlIGEgcGFja2V0IGZvciB0aGUgbGF5ZXJlZCAoZXRoZXJuZXQpIGRyaXZlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBldGFpbDogdGhlIHNrX2J1ZmYgbnVtYmVyCisgKiBAdGxlbjogdGhlIHRvdGFsIHBhY2tldCBsZW5ndGgKKyAqIEBoZHI6IHRoZSBldGhlcm5ldCBoZWFkZXIKKyAqCisgKiBTZXBhcmF0ZSByb3V0aW5lIGZvciBiZXR0ZXIgb3ZlcmFsbCBvcHRpbWl6YXRpb24KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfcmN2X2xheWVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGV0YWlsLAorCQkJICAgIHUzMiB0bGVuLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICpoZHIpCit7CisJdTMyIGVsZW47CisJdTggcGFkLCAqYnRoYnl0ZXM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5za2I7CisKKwlpZiAoZGQtPmlwYXRoX3BvcnQwX3NrYnMgJiYgaGRyLT5zdWJfb3Bjb2RlID09IE9QQ09ERV9FTkNBUCkgeworCQkvKgorCQkgKiBBbGxvY2F0ZSBhIG5ldyBza19idWZmIHRvIHJlcGxhY2UgdGhlIG9uZSB3ZSBnaXZlCisJCSAqIHRvIHRoZSBuZXR3b3JrIHN0YWNrLgorCQkgKi8KKwkJbnNrYiA9IGlwYXRoX2FsbG9jX3NrYihkZCwgR0ZQX0FUT01JQyk7CisJCWlmICghbnNrYikgeworCQkJLyogY291bnQgT0sgcGFja2V0cyB0aGF0IHdlIGRyb3AgKi8KKwkJCWlwYXRoX3N0YXRzLnNwc19rcmRyb3BzKys7CisJCQlyZXR1cm47CisJCX0KKworCQlidGhieXRlcyA9ICh1OCAqKSBoZHItPmJ0aDsKKwkJcGFkID0gKGJ0aGJ5dGVzWzFdID4+IDQpICYgMzsKKwkJLyogK0NSQzMyICovCisJCWVsZW4gPSB0bGVuIC0gKHNpemVvZigqaGRyKSArIHBhZCArIHNpemVvZih1MzIpKTsKKworCQlza2IgPSBkZC0+aXBhdGhfcG9ydDBfc2tic1tldGFpbF07CisJCWRkLT5pcGF0aF9wb3J0MF9za2JzW2V0YWlsXSA9IG5za2I7CisJCXNrYl9wdXQoc2tiLCBlbGVuKTsKKworCQlkZC0+aXBhdGhfZl9wdXRfdGlkKGRkLCBldGFpbCArICh1NjQgX19pb21lbSAqKQorCQkJCSAgICAoKGNoYXIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UKKwkJCQkgICAgICsgZGQtPmlwYXRoX3JjdmVncmJhc2UpLCAwLAorCQkJCSAgICB2aXJ0X3RvX3BoeXMobnNrYi0+ZGF0YSkpOworCisJCV9faXBhdGhfbGF5ZXJfcmN2KGRkLCBoZHIsIHNrYik7CisKKwkJLyogYW5vdGhlciBldGhlciBwYWNrZXQgcmVjZWl2ZWQgKi8KKwkJaXBhdGhfc3RhdHMuc3BzX2V0aGVyX3Jwa3RzKys7CisJfQorCWVsc2UgaWYgKGhkci0+c3ViX29wY29kZSA9PSBPUENPREVfTElEX0FSUCkKKwkJX19pcGF0aF9sYXllcl9yY3ZfbGlkKGRkLCBoZHIpOworfQorCisvKgorICogaXBhdGhfa3JlY2VpdmUgLSByZWNlaXZlIGEgcGFja2V0CisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIGNhbGxlZCBmcm9tIGludGVycnVwdCBoYW5kbGVyIGZvciBlcnJvcnMgb3IgcmVjZWl2ZSBpbnRlcnJ1cHQKKyAqLwordm9pZCBpcGF0aF9rcmVjZWl2ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTY0ICpyYzsKKwl2b2lkICplYnVmOworCWNvbnN0IHUzMiByc2l6ZSA9IGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplOwkvKiB3b3JkcyAqLworCWNvbnN0IHUzMiBtYXhjbnQgPSBkZC0+aXBhdGhfcmN2aGRyY250ICogcnNpemU7CS8qIHdvcmRzICovCisJdTMyIGV0YWlsID0gLTEsIGwsIGhkcnF0YWlsOworCXN0cnVjdCBpcHNfbWVzc2FnZV9oZWFkZXIgKmhkcjsKKwl1MzIgZWZsYWdzLCBpLCBldHlwZSwgdGxlbiwgcGt0dG90ID0gMDsKKwlzdGF0aWMgdTY0IHRvdGNhbGxzOwkvKiBzdGF0cywgbWF5IGV2ZW50dWFsbHkgcmVtb3ZlICovCisJY2hhciBlbXNnWzEyOF07CisKKwlpZiAoIWRkLT5pcGF0aF9oZHJxdGFpbHB0cikgeworCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJICAgICAgImhkcnF0YWlscHRyIG5vdCBzZXQsIGNhbid0IGRvIHJlY2VpdmVzXG4iKTsKKwkJZ290byBiYWlsOworCX0KKworCS8qIFRoZXJlIGlzIGFscmVhZHkgYSB0aHJlYWQgcHJvY2Vzc2luZyB0aGlzIHF1ZXVlLiAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZkZC0+aXBhdGhfcmN2X3BlbmRpbmcpKQorCQlnb3RvIGJhaWw7CisKKwlpZiAoZGQtPmlwYXRoX3BvcnQwaGVhZCA9PQorCSAgICAodTMyKWxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpKQorCQlnb3RvIGRvbmU7CisKK2dvdG1vcmU6CisJLyoKKwkgKiByZWFkIG9ubHkgb25jZSBhdCBzdGFydC4gIElmIGluIGZsb29kIHNpdHVhdGlvbiwgdGhpcyBoZWxwcworCSAqIHBlcmZvcm1hbmNlIHNsaWdodGx5LiAgSWYgbW9yZSBhcnJpdmUgd2hpbGUgd2UgYXJlIHByb2Nlc3NpbmcsCisJICogd2UnbGwgY29tZSBiYWNrIGhlcmUgYW5kIGRvIHRoZW0KKwkgKi8KKwloZHJxdGFpbCA9ICh1MzIpbGU2NF90b19jcHUoKmRkLT5pcGF0aF9oZHJxdGFpbHB0cik7CisKKwlmb3IgKGkgPSAwLCBsID0gZGQtPmlwYXRoX3BvcnQwaGVhZDsgbCAhPSBoZHJxdGFpbDsgaSsrKSB7CisJCXUzMiBxcDsKKwkJdTggKmJ0aGJ5dGVzOworCisJCXJjID0gKHU2NCAqKSAoZGQtPmlwYXRoX3BkWzBdLT5wb3J0X3JjdmhkcnEgKyAobCA8PCAyKSk7CisJCWhkciA9IChzdHJ1Y3QgaXBzX21lc3NhZ2VfaGVhZGVyICopJnJjWzFdOworCQkvKgorCQkgKiBjb3VsZCBtYWtlIGEgbmV0d29yayBvcmRlciB2ZXJzaW9uIG9mIElQQVRIX0tEX1FQLCBhbmQKKwkJICogZG8gdGhlIG9idmlvdXMgc2hpZnQgYmVmb3JlIG1hc2tpbmcgdG8gc3BlZWQgdGhpcyB1cC4KKwkJICovCisJCXFwID0gbnRvaGwoaGRyLT5idGhbMV0pICYgMHhmZmZmZmY7CisJCWJ0aGJ5dGVzID0gKHU4ICopIGhkci0+YnRoOworCisJCWVmbGFncyA9IGlwc19nZXRfaGRyX2Vycl9mbGFncygoX19sZTMyICopIHJjKTsKKwkJZXR5cGUgPSBpcHNfZ2V0X3Jjdl90eXBlKChfX2xlMzIgKikgcmMpOworCQkvKiB0b3RhbCBsZW5ndGggKi8KKwkJdGxlbiA9IGlwc19nZXRfbGVuZ3RoX2luX2J5dGVzKChfX2xlMzIgKikgcmMpOworCQllYnVmID0gTlVMTDsKKwkJaWYgKGV0eXBlICE9IFJDVkhRX1JDVl9UWVBFX0VYUEVDVEVEKSB7CisJCQkvKgorCQkJICogaXQgdHVybnMgb3V0IHRoYXQgdGhlIGNoaXBzIHVzZXMgYW4gZWFnZXIgYnVmZmVyCisJCQkgKiBmb3IgYWxsIG5vbi1leHBlY3RlZCBwYWNrZXRzLCB3aGV0aGVyIGl0ICJuZWVkcyIKKwkJCSAqIG9uZSBvciBub3QuICBTbyBhbHdheXMgZ2V0IHRoZSBpbmRleCwgYnV0IGRvbid0CisJCQkgKiBzZXQgZWJ1ZiAoc28gd2UgdHJ5IHRvIGNvcHkgZGF0YSkgdW5sZXNzIHRoZQorCQkJICogbGVuZ3RoIHJlcXVpcmVzIGl0LgorCQkJICovCisJCQlldGFpbCA9IGlwc19nZXRfaW5kZXgoKF9fbGUzMiAqKSByYyk7CisJCQlpZiAodGxlbiA+IHNpemVvZigqaGRyKSB8fAorCQkJICAgIGV0eXBlID09IFJDVkhRX1JDVl9UWVBFX05PTl9LRCkKKwkJCQllYnVmID0gaXBhdGhfZ2V0X2VncmJ1ZihkZCwgZXRhaWwsIDApOworCQl9CisKKwkJLyoKKwkJICogYm90aCB0aWRlcnIgYW5kIGlwYXRoaGRyZXJyIGFyZSBzZXQgZm9yIGFsbCBwbGFpbiBJQgorCQkgKiBwYWNrZXRzOyBvbmx5IGlwYXRoaGRyZXJyIHNob3VsZCBiZSBzZXQuCisJCSAqLworCisJCWlmIChldHlwZSAhPSBSQ1ZIUV9SQ1ZfVFlQRV9OT05fS0QgJiYgZXR5cGUgIT0KKwkJICAgIFJDVkhRX1JDVl9UWVBFX0VSUk9SICYmIGlwc19nZXRfaXBhdGhfdmVyKAorCQkJICAgIGhkci0+aXBoLnZlcl9wb3J0X3RpZF9vZmZzZXQpICE9CisJCSAgICBJUFNfUFJPVE9fVkVSU0lPTikgeworCQkJaXBhdGhfY2RiZyhQS1QsICJCYWQgSW5maW5pUGF0aCBwcm90b2NvbCB2ZXJzaW9uICIKKwkJCQkgICAiJXhcbiIsIGV0eXBlKTsKKwkJfQorCisJCWlmIChlZmxhZ3MgJiB+KElORklOSVBBVEhfUkhGX0hfVElERVJSIHwKKwkJCSAgICAgICBJTkZJTklQQVRIX1JIRl9IX0lIRFJFUlIpKSB7CisJCQlnZXRfcmhmX2VycnN0cmluZyhlZmxhZ3MsIGVtc2csIHNpemVvZiBlbXNnKTsKKwkJCWlwYXRoX2NkYmcoUEtULCAiUkhGZXJycyAleCBoZHJxdGFpbD0leCB0eXA9JXUgIgorCQkJCSAgICJ0bGVuPSV4IG9wY29kZT0leCBlZ3JpZHg9JXg6ICVzXG4iLAorCQkJCSAgIGVmbGFncywgbCwgZXR5cGUsIHRsZW4sIGJ0aGJ5dGVzWzBdLAorCQkJCSAgIGlwc19nZXRfaW5kZXgoKF9fbGUzMiAqKSByYyksIGVtc2cpOworCQl9IGVsc2UgaWYgKGV0eXBlID09IFJDVkhRX1JDVl9UWVBFX05PTl9LRCkgeworCQkJCWludCByZXQgPSBfX2lwYXRoX3ZlcmJzX3JjdihkZCwgcmMgKyAxLAorCQkJCQkJCSAgICBlYnVmLCB0bGVuKTsKKwkJCQlpZiAocmV0ID09IC1FTk9ERVYpCisJCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwKKwkJCQkJCSAgICJyZWNlaXZlZCBJQiBwYWNrZXQsICIKKwkJCQkJCSAgICJub3QgU01BIChRUD0leClcbiIsIHFwKTsKKwkJfSBlbHNlIGlmIChldHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9FQUdFUikgeworCQkJaWYgKHFwID09IElQQVRIX0tEX1FQICYmCisJCQkgICAgYnRoYnl0ZXNbMF0gPT0gaXBhdGhfbGF5ZXJfcmN2X29wY29kZSAmJgorCQkJICAgIGVidWYpCisJCQkJaXBhdGhfcmN2X2xheWVyKGRkLCBldGFpbCwgdGxlbiwKKwkJCQkJCShzdHJ1Y3QgZXRoZXJfaGVhZGVyICopaGRyKTsKKwkJCWVsc2UKKwkJCQlpcGF0aF9jZGJnKFBLVCwgInR5cCAleCwgb3Bjb2RlICV4IChlYWdlciwgIgorCQkJCQkgICAicXA9JXgpLCBsZW4gJXg7IGlnbm9yZWRcbiIsCisJCQkJCSAgIGV0eXBlLCBidGhieXRlc1swXSwgcXAsIHRsZW4pOworCQl9CisJCWVsc2UgaWYgKGV0eXBlID09IFJDVkhRX1JDVl9UWVBFX0VYUEVDVEVEKQorCQkJaXBhdGhfZGJnKCJCdWc6IEV4cGVjdGVkIFRJRCwgb3Bjb2RlICV4OyBpZ25vcmVkXG4iLAorCQkJCSAgYmUzMl90b19jcHUoaGRyLT5idGhbMF0pICYgMHhmZik7CisJCWVsc2UgaWYgKGVmbGFncyAmIChJTkZJTklQQVRIX1JIRl9IX1RJREVSUiB8CisJCQkJICAgSU5GSU5JUEFUSF9SSEZfSF9JSERSRVJSKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSB0eXBlIDMgcGFja2V0LCBvbmx5IHRoZSBMUkggaXMgaW4gdGhlCisJCQkgKiByY3ZoZHJxLCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyIGlzIGluIHRoZSBlYWdlcgorCQkJICogYnVmZmVyLgorCQkJICovCisJCQl1OCBvcGNvZGU7CisJCQlpZiAoZWJ1ZikgeworCQkJCWJ0aGJ5dGVzID0gKHU4ICopIGVidWY7CisJCQkJb3Bjb2RlID0gKmJ0aGJ5dGVzOworCQkJfQorCQkJZWxzZQorCQkJCW9wY29kZSA9IDA7CisJCQlnZXRfcmhmX2VycnN0cmluZyhlZmxhZ3MsIGVtc2csIHNpemVvZiBlbXNnKTsKKwkJCWlwYXRoX2RiZygiRXJyICV4ICglcyksIG9wY29kZSAleCwgZWdyYnVmICV4LCAiCisJCQkJICAibGVuICV4XG4iLCBlZmxhZ3MsIGVtc2csIG9wY29kZSwgZXRhaWwsCisJCQkJICB0bGVuKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBlcnJvciBwYWNrZXQsIHR5cGUgb2YgZXJyb3IJdW5rbm93bi4KKwkJCSAqIFByb2JhYmx5IHR5cGUgMywgYnV0IHdlIGRvbid0IGtub3csIHNvIGRvbid0CisJCQkgKiBldmVuIHRyeSB0byBwcmludCB0aGUgb3Bjb2RlLCBldGMuCisJCQkgKi8KKwkJCWlwYXRoX2RiZygiRXJyb3IgUGt0LCBidXQgbm8gZWZsYWdzISBlZ3JidWYgJXgsICIKKwkJCQkgICJsZW4gJXhcbmhkcnFAJWx4O2hkcnErJXggcmhmOiAlbGx4OyAiCisJCQkJICAiaGRyICVsbHggJWxseCAlbGx4ICVsbHggJWxseFxuIiwKKwkJCQkgIGV0YWlsLCB0bGVuLCAodW5zaWduZWQgbG9uZykgcmMsIGwsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSByY1swXSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJjWzFdLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmNbMl0sCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSByY1szXSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJjWzRdLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmNbNV0pOworCQl9CisJCWwgKz0gcnNpemU7CisJCWlmIChsID49IG1heGNudCkKKwkJCWwgPSAwOworCQkvKgorCQkgKiB1cGRhdGUgZm9yIGVhY2ggcGFja2V0LCB0byBoZWxwIHByZXZlbnQgb3ZlcmZsb3dzIGlmIHdlCisJCSAqIGhhdmUgbG90cyBvZiBwYWNrZXRzLgorCQkgKi8KKwkJKHZvaWQpaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2aGRyaGVhZCwKKwkJCQkgICAgICAgZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmIHwgbCwgMCk7CisJCWlmIChldHlwZSAhPSBSQ1ZIUV9SQ1ZfVFlQRV9FWFBFQ1RFRCkKKwkJCSh2b2lkKWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwKKwkJCQkJICAgICAgIGV0YWlsLCAwKTsKKwl9CisKKwlwa3R0b3QgKz0gaTsKKworCWRkLT5pcGF0aF9wb3J0MGhlYWQgPSBsOworCisJaWYgKGhkcnF0YWlsICE9ICh1MzIpbGU2NF90b19jcHUoKmRkLT5pcGF0aF9oZHJxdGFpbHB0cikpCisJCS8qIG1vcmUgYXJyaXZlZCB3aGlsZSB3ZSBoYW5kbGVkIGZpcnN0IGJhdGNoICovCisJCWdvdG8gZ290bW9yZTsKKworCWlmIChwa3R0b3QgPiBpcGF0aF9zdGF0cy5zcHNfbWF4cGt0c19jYWxsKQorCQlpcGF0aF9zdGF0cy5zcHNfbWF4cGt0c19jYWxsID0gcGt0dG90OworCWlwYXRoX3N0YXRzLnNwc19wb3J0MHBrdHMgKz0gcGt0dG90OworCWlwYXRoX3N0YXRzLnNwc19hdmdwa3RzX2NhbGwgPQorCQlpcGF0aF9zdGF0cy5zcHNfcG9ydDBwa3RzIC8gKyt0b3RjYWxsczsKKworZG9uZToKKwljbGVhcl9iaXQoMCwgJmRkLT5pcGF0aF9yY3ZfcGVuZGluZyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworYmFpbDo7Cit9CisKKy8qKgorICogaXBhdGhfdXBkYXRlX3Bpb19idWZzIC0gdXBkYXRlIHNoYWRvdyBjb3B5IG9mIHRoZSBQSU8gYXZhaWxhYmlsaXR5IG1hcAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBjYWxsZWQgd2hlbmV2ZXIgb3VyIGxvY2FsIGNvcHkgaW5kaWNhdGVzIHdlIGhhdmUgcnVuIG91dCBvZiBzZW5kIGJ1ZmZlcnMKKyAqIE5PVEU6IFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0IGJ5IHNvbWUgY29kZQorICogYW5kIGZyb20gbm9uLWludGVycnVwdCBjb250ZXh0IGJ5IGlwYXRoX2dldHBpb2J1ZigpLgorICovCisKK3N0YXRpYyB2b2lkIGlwYXRoX3VwZGF0ZV9waW9fYnVmcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwljb25zdCB1bnNpZ25lZCBwaW9icmVncyA9ICh1bnNpZ25lZClkZC0+aXBhdGhfcGlvYXZyZWdzOworCisJLyogSWYgdGhlIGdlbmVyYXRpb24gKGNoZWNrKSBiaXRzIGhhdmUgY2hhbmdlZCwgdGhlbiB3ZSB1cGRhdGUgdGhlCisJICogYnVzeSBiaXQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIFBJTyBidWZmZXIuICBUaGlzIGFsZ29yaXRobSB3aWxsCisJICogbW9kaWZ5IHBvc2l0aW9ucyB0byB0aGUgdmFsdWUgdGhleSBhbHJlYWR5IGhhdmUgaW4gc29tZSBjYXNlcworCSAqIChpLmUuLCBubyBjaGFuZ2UpLCBidXQgaXQncyBmYXN0ZXIgdGhhbiBjaGFuZ2luZyBvbmx5IHRoZSBiaXRzCisJICogdGhhdCBoYXZlIGNoYW5nZWQuCisJICoKKwkgKiBXZSB3b3VsZCBsaWtlIHRvIGRvIHRoaXMgYXRvbWljbHksIHRvIGF2b2lkIHNwaW5sb2NrcyBpbiB0aGUKKwkgKiBjcml0aWNhbCBzZW5kIHBhdGgsIGJ1dCB0aGF0J3Mgbm90IHJlYWxseSBwb3NzaWJsZSwgZ2l2ZW4gdGhlCisJICogdHlwZSBvZiBjaGFuZ2VzLCBhbmQgdGhhdCB0aGlzIHJvdXRpbmUgY291bGQgYmUgY2FsbGVkIG9uCisJICogbXVsdGlwbGUgY3B1J3Mgc2ltdWx0YW5lb3VzbHksIHNvIHdlIGxvY2sgaW4gdGhpcyByb3V0aW5lIG9ubHksCisJICogdG8gYXZvaWQgY29uZmxpY3RpbmcgdXBkYXRlczsgYWxsIHdlIGNoYW5nZSBpcyB0aGUgc2hhZG93LCBhbmQKKwkgKiBpdCdzIGEgc2luZ2xlIDY0IGJpdCBtZW1vcnkgbG9jYXRpb24sIHNvIGJ5IGRlZmluaXRpb24gdGhlIHVwZGF0ZQorCSAqIGlzIGF0b21pYyBpbiB0ZXJtcyBvZiB3aGF0IG90aGVyIGNwdSdzIGNhbiBzZWUgaW4gdGVzdGluZyB0aGUKKwkgKiBiaXRzLiAgVGhlIHNwaW5fbG9jayBvdmVyaGVhZCBpc24ndCB0b28gYmFkLCBzaW5jZSBpdCBvbmx5CisJICogaGFwcGVucyB3aGVuIGFsbCBidWZmZXJzIGFyZSBpbiB1c2UsIHNvIG9ubHkgY3B1IG92ZXJoZWFkLCBub3QKKwkgKiBsYXRlbmN5IG9yIGJhbmR3aWR0aCBpcyBhZmZlY3RlZC4KKwkgKi8KKyNkZWZpbmUgX0lQQVRIX0FMTF9DSEVDS0JJVFMgMHg1NTU1NTU1NTU1NTU1NTU1VUxMCisJaWYgKCFkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSkgeworCQlpcGF0aF9kYmcoIlVwZGF0ZSBzaGFkb3cgcGlvYXZhaWwsIGJ1dCByZWdzX2RtYSBOVUxMIVxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9WRVJCREJHKSB7CisJCS8qIG9ubHkgaWYgcGFja2V0IGRlYnVnIGFuZCB2ZXJib3NlICovCisJCXZvbGF0aWxlIF9fbGU2NCAqZG1hID0gZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWE7CisJCXVuc2lnbmVkIGxvbmcgKnNoYWRvdyA9IGRkLT5pcGF0aF9waW9hdmFpbHNoYWRvdzsKKworCQlpcGF0aF9jZGJnKFBLVCwgIlJlZmlsbCBhdmFpbCwgZG1hMD0lbGx4IHNoYWQwPSVseCwgIgorCQkJICAgImQxPSVsbHggczE9JWx4LCBkMj0lbGx4IHMyPSVseCwgZDM9JWxseCAiCisJCQkgICAiczM9JWx4XG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzBdKSwKKwkJCSAgIHNoYWRvd1swXSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVsxXSksCisJCQkgICBzaGFkb3dbMV0sCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShkbWFbMl0pLAorCQkJICAgc2hhZG93WzJdLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzNdKSwKKwkJCSAgIHNoYWRvd1szXSk7CisJCWlmIChwaW9icmVncyA+IDQpCisJCQlpcGF0aF9jZGJnKAorCQkJCVBLVCwgIjJuZCBncm91cCwgZG1hND0lbGx4IHNoYWQ0PSVseCwgIgorCQkJCSJkNT0lbGx4IHM1PSVseCwgZDY9JWxseCBzNj0lbHgsICIKKwkJCQkiZDc9JWxseCBzNz0lbHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzRdKSwKKwkJCQlzaGFkb3dbNF0sCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzVdKSwKKwkJCQlzaGFkb3dbNV0sCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzZdKSwKKwkJCQlzaGFkb3dbNl0sCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzddKSwKKwkJCQlzaGFkb3dbN10pOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfcGlvYXZhaWxfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBwaW9icmVnczsgaSsrKSB7CisJCXU2NCBwY2hidXN5LCBwY2hnLCBwaW92LCBwbmV3OworCQkvKgorCQkgKiBDaGlwIEVycmF0YTogYnVnIDY2NDE7IGV2ZW4gYW5kIG9kZCBxd29yZHM+MyBhcmUgc3dhcHBlZAorCQkgKi8KKwkJaWYgKGkgPiAzKSB7CisJCQlpZiAoaSAmIDEpCisJCQkJcGlvdiA9IGxlNjRfdG9fY3B1KAorCQkJCQlkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYVtpIC0gMV0pOworCQkJZWxzZQorCQkJCXBpb3YgPSBsZTY0X3RvX2NwdSgKKwkJCQkJZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWFbaSArIDFdKTsKKwkJfSBlbHNlCisJCQlwaW92ID0gbGU2NF90b19jcHUoZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWFbaV0pOworCQlwY2hnID0gX0lQQVRIX0FMTF9DSEVDS0JJVFMgJgorCQkJfihkZC0+aXBhdGhfcGlvYXZhaWxzaGFkb3dbaV0gXiBwaW92KTsKKwkJcGNoYnVzeSA9IHBjaGcgPDwgSU5GSU5JUEFUSF9TRU5EUElPQVZBSUxfQlVTWV9TSElGVDsKKwkJaWYgKHBjaGcgJiYgKHBjaGJ1c3kgJiBkZC0+aXBhdGhfcGlvYXZhaWxzaGFkb3dbaV0pKSB7CisJCQlwbmV3ID0gZGQtPmlwYXRoX3Bpb2F2YWlsc2hhZG93W2ldICYgfnBjaGJ1c3k7CisJCQlwbmV3IHw9IHBpb3YgJiBwY2hidXN5OworCQkJZGQtPmlwYXRoX3Bpb2F2YWlsc2hhZG93W2ldID0gcG5ldzsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9waW9hdmFpbF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogaXBhdGhfc2V0cmN2aGRyc2l6ZSAtIHNldCB0aGUgcmVjZWl2ZSBoZWFkZXIgc2l6ZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEByaGRyc2l6ZTogdGhlIHJlY2VpdmUgaGVhZGVyIHNpemUKKyAqCisgKiBjYWxsZWQgZnJvbSB1c2VyIGluaXQgY29kZSwgYW5kIGFsc28gbGF5ZXJlZCBkcml2ZXIgaW5pdAorICovCitpbnQgaXBhdGhfc2V0cmN2aGRyc2l6ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIHJoZHJzaXplKQoreworCWludCByZXQgPSAwOworCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1JDVkhEUlNaX1NFVCkgeworCQlpZiAoZGQtPmlwYXRoX3JjdmhkcnNpemUgIT0gcmhkcnNpemUpIHsKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJICJFcnJvcjogY2FuJ3Qgc2V0IHByb3RvY29sIGhlYWRlciAiCisJCQkJICJzaXplICV1LCBhbHJlYWR5ICV1XG4iLAorCQkJCSByaGRyc2l6ZSwgZGQtPmlwYXRoX3JjdmhkcnNpemUpOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJfSBlbHNlCisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZXVzZSBzYW1lIHByb3RvY29sIGhlYWRlciAiCisJCQkJICAgInNpemUgJXVcbiIsIGRkLT5pcGF0aF9yY3ZoZHJzaXplKTsKKwl9IGVsc2UgaWYgKHJoZHJzaXplID4gKGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplIC0KKwkJCSAgICAgICAoc2l6ZW9mKHU2NCkgLyBzaXplb2YodTMyKSkpKSB7CisJCWlwYXRoX2RiZygiRXJyb3I6IGNhbid0IHNldCBwcm90b2NvbCBoZWFkZXIgc2l6ZSAldSAiCisJCQkgICIoPiBtYXggJXUpXG4iLCByaGRyc2l6ZSwKKwkJCSAgZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgLQorCQkJICAodTMyKSAoc2l6ZW9mKHU2NCkgLyBzaXplb2YodTMyKSkpOworCQlyZXQgPSAtRU9WRVJGTE9XOworCX0gZWxzZSB7CisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9SQ1ZIRFJTWl9TRVQ7CisJCWRkLT5pcGF0aF9yY3ZoZHJzaXplID0gcmhkcnNpemU7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRyc2l6ZSwKKwkJCQkgZGQtPmlwYXRoX3JjdmhkcnNpemUpOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJTZXQgcHJvdG9jb2wgaGVhZGVyIHNpemUgdG8gJXVcbiIsCisJCQkgICBkZC0+aXBhdGhfcmN2aGRyc2l6ZSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfZ2V0cGlvYnVmIC0gZmluZCBhbiBhdmFpbGFibGUgcGlvIGJ1ZmZlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwYnVmbnVtOiB0aGUgYnVmZmVyIG51bWJlciBpcyBwbGFjZWQgaGVyZQorICoKKyAqIGRvIGFwcHJvcHJpYXRlIG1hcmtpbmcgYXMgYnVzeSwgZXRjLgorICogcmV0dXJucyBidWZmZXIgbnVtYmVyIGlmIG9uZSBmb3VuZCAoPj0wKSwgbmVnYXRpdmUgbnVtYmVyIGlzIGVycm9yLgorICogVXNlZCBieSBpcGF0aF9zbWFfc2VuZF9wa3QgYW5kIGlwYXRoX2xheWVyX3NlbmQKKyAqLwordTMyIF9faW9tZW0gKmlwYXRoX2dldHBpb2J1ZihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiAqIHBidWZudW0pCit7CisJaW50IGksIGosIHN0YXJ0aSwgdXBkYXRlZCA9IDA7CisJdW5zaWduZWQgcGlvYmNudCwgaXRlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgKnNoYWRvdyA9IGRkLT5pcGF0aF9waW9hdmFpbHNoYWRvdzsKKwl1MzIgX19pb21lbSAqYnVmOworCisJcGlvYmNudCA9ICh1bnNpZ25lZCkoZGQtPmlwYXRoX3Bpb2JjbnQyaworCQkJICAgICArIGRkLT5pcGF0aF9waW9iY250NGspOworCXN0YXJ0aSA9IGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWY7CisJaXRlciA9IHBpb2JjbnQgLSBzdGFydGk7CisJaWYgKGRkLT5pcGF0aF91cGRfcGlvX3NoYWRvdykgeworCQkvKgorCQkgKiBNaW5vciBvcHRpbWl6YXRpb24uICBJZiB3ZSBoYWQgbm8gYnVmZmVycyBvbiBsYXN0IGNhbGwsCisJCSAqIHN0YXJ0IG91dCBieSBkb2luZyB0aGUgdXBkYXRlOyBjb250aW51ZSBhbmQgZG8gc2NhbiBldmVuCisJCSAqIGlmIG5vIGJ1ZmZlcnMgd2VyZSB1cGRhdGVkLCB0byBiZSBwYXJhbm9pZAorCQkgKi8KKwkJaXBhdGhfdXBkYXRlX3Bpb19idWZzKGRkKTsKKwkJLyogd2Ugc2Nhbm5lZCBoZXJlLCBkb24ndCBkbyBpdCBhdCBlbmQgb2Ygc2NhbiAqLworCQl1cGRhdGVkID0gMTsKKwkJaSA9IHN0YXJ0aTsKKwl9IGVsc2UKKwkJaSA9IGRkLT5pcGF0aF9sYXN0cGlvaW5kZXg7CisKK3Jlc2NhbjoKKwkvKgorCSAqIHdoaWxlIHRlc3RfYW5kX3NldF9iaXQoKSBpcyBhdG9taWMsIHdlIGRvIHRoYXQgYW5kIHRoZW4gdGhlCisJICogY2hhbmdlX2JpdCgpLCBhbmQgdGhlIHBhaXIgaXMgbm90LiAgU2VlIGlmIHRoaXMgaXMgdGhlIGNhdXNlCisJICogb2YgdGhlIHJlbWFpbmluZyBhcm1sYXVuY2ggZXJyb3JzLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9waW9hdmFpbF9sb2NrLCBmbGFncyk7CisJZm9yIChqID0gMDsgaiA8IGl0ZXI7IGorKywgaSsrKSB7CisJCWlmIChpID49IHBpb2JjbnQpCisJCQlpID0gc3RhcnRpOworCQkvKgorCQkgKiBUbyBhdm9pZCBidXMgbG9jayBvdmVyaGVhZCwgd2UgZmlyc3QgZmluZCBhIGNhbmRpZGF0ZQorCQkgKiBidWZmZXIsIHRoZW4gZG8gdGhlIHRlc3QgYW5kIHNldCwgYW5kIGNvbnRpbnVlIGlmIHRoYXQKKwkJICogZmFpbHMuCisJCSAqLworCQlpZiAodGVzdF9iaXQoKDIgKiBpKSArIDEsIHNoYWRvdykgfHwKKwkJICAgIHRlc3RfYW5kX3NldF9iaXQoKDIgKiBpKSArIDEsIHNoYWRvdykpCisJCQljb250aW51ZTsKKwkJLyogZmxpcCBnZW5lcmF0aW9uIGJpdCAqLworCQljaGFuZ2VfYml0KDIgKiBpLCBzaGFkb3cpOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfcGlvYXZhaWxfbG9jaywgZmxhZ3MpOworCisJaWYgKGogPT0gaXRlcikgeworCQl2b2xhdGlsZSBfX2xlNjQgKmRtYSA9IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hOworCisJCS8qCisJCSAqIGZpcnN0IHRpbWUgdGhyb3VnaDsgc2hhZG93IGV4aGF1c3RlZCwgYnV0IG1heSBiZSByZWFsCisJCSAqIGJ1ZmZlcnMgYXZhaWxhYmxlLCBzbyBnbyBzZWU7IGlmIGFueSB1cGRhdGVkLCByZXNjYW4KKwkJICogKG9uY2UpCisJCSAqLworCQlpZiAoIXVwZGF0ZWQpIHsKKwkJCWlwYXRoX3VwZGF0ZV9waW9fYnVmcyhkZCk7CisJCQl1cGRhdGVkID0gMTsKKwkJCWkgPSBzdGFydGk7CisJCQlnb3RvIHJlc2NhbjsKKwkJfQorCQlkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cgPSAxOworCQkvKgorCQkgKiBub3QgYXRvbWljLCBidXQgaWYgd2UgbG9zZSBvbmUgb25jZSBpbiBhIHdoaWxlLCB0aGF0J3MgT0sKKwkJICovCisJCWlwYXRoX3N0YXRzLnNwc19ub3Bpb2J1ZnMrKzsKKwkJaWYgKCEoKytkZC0+aXBhdGhfY29uc2VjX25vcGlvYnVmICUgMTAwMDAwKSkgeworCQkJaXBhdGhfZGJnKAorCQkJCSIldSBwaW8gc2VuZHMgd2l0aCBubyBidWZhdmFpbDsgZG1hY29weTogIgorCQkJCSIlbGx4ICVsbHggJWxseCAlbGx4OyBzaGFkb3c6ICAiCisJCQkJIiVseCAlbHggJWx4ICVseFxuIiwKKwkJCQlkZC0+aXBhdGhfY29uc2VjX25vcGlvYnVmLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVswXSksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzFdKSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShkbWFbMl0pLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVszXSksCisJCQkJc2hhZG93WzBdLCBzaGFkb3dbMV0sIHNoYWRvd1syXSwKKwkJCQlzaGFkb3dbM10pOworCQkJLyoKKwkJCSAqIDQgYnVmZmVycyBwZXIgYnl0ZSwgNCByZWdpc3RlcnMgYWJvdmUsIGNvdmVyIHJlc3QKKwkJCSAqIGJlbG93CisJCQkgKi8KKwkJCWlmICgoZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGspID4KKwkJCSAgICAoc2l6ZW9mKHNoYWRvd1swXSkgKiA0ICogNCkpCisJCQkJaXBhdGhfZGJnKCIybmQgZ3JvdXA6IGRtYWNvcHk6ICVsbHggJWxseCAiCisJCQkJCSAgIiVsbHggJWxseDsgc2hhZG93OiAlbHggJWx4ICIKKwkJCQkJICAiJWx4ICVseFxuIiwKKwkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkgIGxlNjRfdG9fY3B1KGRtYVs0XSksCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJICBsZTY0X3RvX2NwdShkbWFbNV0pLAorCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgbGU2NF90b19jcHUoZG1hWzZdKSwKKwkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkgIGxlNjRfdG9fY3B1KGRtYVs3XSksCisJCQkJCSAgc2hhZG93WzRdLCBzaGFkb3dbNV0sCisJCQkJCSAgc2hhZG93WzZdLCBzaGFkb3dbN10pOworCQl9CisJCWJ1ZiA9IE5VTEw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAodXBkYXRlZCkKKwkJLyoKKwkJICogcmFuIG91dCBvZiBidWZzLCBub3cgc29tZSAoYXQgbGVhc3QgdGhpcyBvbmUgd2UganVzdAorCQkgKiBnb3QpIGFyZSBub3cgYXZhaWxhYmxlLCBzbyB0ZWxsIHRoZSBsYXllcmVkIGRyaXZlci4KKwkJICovCisJCV9faXBhdGhfbGF5ZXJfaW50cihkZCwgSVBBVEhfTEFZRVJfSU5UX1NFTkRfQ09OVElOVUUpOworCisJLyoKKwkgKiBzZXQgbmV4dCBzdGFydGluZyBwbGFjZS4gIFNpbmNlIGl0J3MganVzdCBhbiBvcHRpbWl6YXRpb24sCisJICogaXQgZG9lc24ndCBtYXR0ZXIgd2hvIHdpbnMgb24gdGhpcywgc28gbm8gbG9ja2luZworCSAqLworCWRkLT5pcGF0aF9sYXN0cGlvaW5kZXggPSBpICsgMTsKKwlpZiAoZGQtPmlwYXRoX3VwZF9waW9fc2hhZG93KQorCQlkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cgPSAwOworCWlmIChkZC0+aXBhdGhfY29uc2VjX25vcGlvYnVmKQorCQlkZC0+aXBhdGhfY29uc2VjX25vcGlvYnVmID0gMDsKKwlpZiAoaSA8IGRkLT5pcGF0aF9waW9iY250MmspCisJCWJ1ZiA9ICh1MzIgX19pb21lbSAqKSAoZGQtPmlwYXRoX3BpbzJrYmFzZSArCisJCQkJICAgICAgIGkgKiBkZC0+aXBhdGhfcGFsaWduKTsKKwllbHNlCisJCWJ1ZiA9ICh1MzIgX19pb21lbSAqKQorCQkJKGRkLT5pcGF0aF9waW80a2Jhc2UgKworCQkJIChpIC0gZGQtPmlwYXRoX3Bpb2JjbnQyaykgKiBkZC0+aXBhdGhfNGthbGlnbik7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUmV0dXJuIHBpb2J1ZiV1ICV1ayBAICVwXG4iLAorCQkgICBpLCAoaSA8IGRkLT5pcGF0aF9waW9iY250MmspID8gMiA6IDQsIGJ1Zik7CisJaWYgKHBidWZudW0pCisJCSpwYnVmbnVtID0gaTsKKworYmFpbDoKKwlyZXR1cm4gYnVmOworfQorCisvKioKKyAqIGlwYXRoX2NyZWF0ZV9yY3ZoZHJxIC0gY3JlYXRlIGEgcmVjZWl2ZSBoZWFkZXIgcXVldWUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcGQ6IHRoZSBwb3J0IGRhdGEKKyAqCisgKiB0aGlzICptdXN0KiBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LCBhbmQgZm9yIG5vdywKKyAqIHRoYXQgbGltaXRzIGl0IHRvIHdoYXQga21hbGxvYyBjYW4gZG8uCisgKi8KK2ludCBpcGF0aF9jcmVhdGVfcmN2aGRycShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkgc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKK3sKKwlpbnQgcmV0ID0gMCwgYW10OworCisJYW10ID0gQUxJR04oZGQtPmlwYXRoX3JjdmhkcmNudCAqIGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplICoKKwkJICAgIHNpemVvZih1MzIpLCBQQUdFX1NJWkUpOworCWlmICghcGQtPnBvcnRfcmN2aGRycSkgeworCQkvKgorCQkgKiBub3QgdXNpbmcgUkVQRUFUIGlzbid0IHZpYWJsZTsgYXQgMTI4S0IsIHdlIGNhbiBlYXNpbHkKKwkJICogZmFpbCB0aGlzLiAgVGhlIHByb2JsZW0gd2l0aCBSRVBFQVQgaXMgd2UgY2FuIGJsb2NrIGhlcmUKKwkJICogImZvcmV2ZXIiLiAgVGhlcmUgaXNuJ3QgYW4gaW5iZXR3ZWVuLCB1bmZvcnR1bmF0ZWx5LiAgV2UKKwkJICogY291bGQgcmVkdWNlIHRoZSByaXNrIGJ5IG5ldmVyIGZyZWVpbmcgdGhlIHJjdmhkcnEgZXhjZXB0CisJCSAqIGF0IHVubG9hZCwgYnV0IGV2ZW4gdGhlbiwgdGhlIGZpcnN0IHRpbWUgYSBwb3J0IGlzIHVzZWQsCisJCSAqIHdlIGNvdWxkIGRlbGF5IGZvciBzb21lIHRpbWUuLi4KKwkJICovCisJCWdmcF90IGdmcF9mbGFncyA9IEdGUF9VU0VSIHwgX19HRlBfQ09NUDsKKworCQlwZC0+cG9ydF9yY3ZoZHJxID0gZG1hX2FsbG9jX2NvaGVyZW50KAorCQkJJmRkLT5wY2lkZXYtPmRldiwgYW10LCAmcGQtPnBvcnRfcmN2aGRycV9waHlzLAorCQkJZ2ZwX2ZsYWdzKTsKKworCQlpZiAoIXBkLT5wb3J0X3JjdmhkcnEpIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIGFsbG9jYXRlICVkIGJ5dGVzICIKKwkJCQkgICAgICAiZm9yIHBvcnQgJXUgcmN2aGRycSBmYWlsZWRcbiIsCisJCQkJICAgICAgYW10LCBwZC0+cG9ydF9wb3J0KTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQlwZC0+cG9ydF9yY3ZoZHJxX3NpemUgPSBhbXQ7CisKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJWQgcGFnZXMgYXQgJXAgKHBoeXMgJWx4KSBzaXplPSVsdSAiCisJCQkgICAiZm9yIHBvcnQgJXUgcmN2aGRyIFFcbiIsCisJCQkgICBhbXQgPj4gUEFHRV9TSElGVCwgcGQtPnBvcnRfcmN2aGRycSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKSBwZC0+cG9ydF9yY3ZoZHJxX3BoeXMsCisJCQkgICAodW5zaWduZWQgbG9uZykgcGQtPnBvcnRfcmN2aGRycV9zaXplLAorCQkJICAgcGQtPnBvcnRfcG9ydCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogY2xlYXIgZm9yIHNlY3VyaXR5LCBzYW5pdHksIGFuZC9vciBkZWJ1Z2dpbmcsIGVhY2gKKwkJICogdGltZSB3ZSByZXVzZQorCQkgKi8KKwkJbWVtc2V0KHBkLT5wb3J0X3JjdmhkcnEsIDAsIGFtdCk7CisJfQorCisJLyoKKwkgKiB0ZWxsIGNoaXAgZWFjaCB0aW1lIHdlIGluaXQgaXQsIGV2ZW4gaWYgd2UgYXJlIHJlLXVzaW5nIHByZXZpb3VzCisJICogbWVtb3J5ICh3ZSB6ZXJvIGl0IGF0IHByb2Nlc3MgY2xvc2UpCisJICovCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAid3JpdGluZyBwb3J0ICVkIHJjdmhkcmFkZHIgYXMgJWx4XG4iLAorCQkgICBwZC0+cG9ydF9wb3J0LCAodW5zaWduZWQgbG9uZykgcGQtPnBvcnRfcmN2aGRycV9waHlzKTsKKwlpcGF0aF93cml0ZV9rcmVnX3BvcnQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRyYWRkciwKKwkJCSAgICAgIHBkLT5wb3J0X3BvcnQsIHBkLT5wb3J0X3JjdmhkcnFfcGh5cyk7CisKKwlyZXQgPSAwOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfd2FpdGZvcl9jb21wbGV0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2tyZWcgcmVnX2lkLAorCQkJICAgdTY0IGJpdHNfdG9fd2FpdF9mb3IsIHU2NCAqIHZhbHApCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXU2NCBsYXN0dmFsLCB2YWw7CisJaW50IHJldDsKKworCWxhc3R2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgcmVnX2lkKTsKKwkvKiB3YWl0IGEgcmlkaWN1bG91c2x5IGxvbmcgdGltZSAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKKwlkbyB7CisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCByZWdfaWQpOworCQkvKiBzZXQgc28gdGhleSBoYXZlIHNvbWV0aGluZywgZXZlbiBvbiBmYWlsdXJlcy4gKi8KKwkJKnZhbHAgPSB2YWw7CisJCWlmICgodmFsICYgYml0c190b193YWl0X2ZvcikgPT0gYml0c190b193YWl0X2ZvcikgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWlmICh2YWwgIT0gbGFzdHZhbCkKKwkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkNoYW5nZWQgZnJvbSAlbGx4IHRvICVsbHgsICIKKwkJCQkgICAid2FpdGluZyBmb3IgJWxseCBiaXRzXG4iLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxhc3R2YWwsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJpdHNfdG9fd2FpdF9mb3IpOworCQljb25kX3Jlc2NoZWQoKTsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWlwYXRoX2RiZygiRGlkbid0IGdldCBiaXRzICVsbHggaW4gcmVnaXN0ZXIgMHgleCwgIgorCQkJCSAgImdvdCAlbGx4XG4iLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYml0c190b193YWl0X2ZvciwKKwkJCQkgIHJlZ19pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgKnZhbHApOworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoMSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3dhaXRmb3JfbWRpb19jbWRyZWFkeSAtIHdhaXQgZm9yIGxhc3QgY29tbWFuZCB0byBjb21wbGV0ZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBMaWtlIGlwYXRoX3dhaXRmb3JfY29tcGxldGUoKSwgYnV0IHdlIHdhaXQgZm9yIHRoZSBDTURWQUxJRCBiaXQgdG8gZ28KKyAqIGF3YXkgaW5kaWNhdGluZyB0aGUgbGFzdCBjb21tYW5kIGhhcyBjb21wbGV0ZWQuICBJdCBkb2Vzbid0IHJldHVybiBkYXRhCisgKi8KK2ludCBpcGF0aF93YWl0Zm9yX21kaW9fY21kcmVhZHkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1NjQgdmFsOworCWludCByZXQ7CisKKwkvKiB3YWl0IGEgcmlkaWN1bG91c2x5IGxvbmcgdGltZSAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKKwlkbyB7CisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX21kaW8pOworCQlpZiAoISh2YWwgJiBJUEFUSF9NRElPX0NNRFZBTElEKSkgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWNvbmRfcmVzY2hlZCgpOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJaXBhdGhfZGJnKCJDTURWQUxJRCBzdHVjayBpbiBtZGlvIHJlZz8gKCVsbHgpXG4iLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDEpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpcGF0aF9zZXRfaWJfbHN0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHdoaWNoKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp3aGF0WzRdID0geworCQlbMF0gPSAiRE9XTiIsCisJCVtJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9JTklUXSA9ICJJTklUIiwKKwkJW0lORklOSVBBVEhfSUJDQ19MSU5LQ01EX0FSTUVEXSA9ICJBUk1FRCIsCisJCVtJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9BQ1RJVkVdID0gIkFDVElWRSIKKwl9OworCWlwYXRoX2NkYmcoU01BLCAiVHJ5aW5nIHRvIG1vdmUgdW5pdCAldSB0byAlcywgY3VycmVudCBsdHN0YXRlICIKKwkJICAgImlzICVzXG4iLCBkZC0+aXBhdGhfdW5pdCwKKwkJICAgd2hhdFsod2hpY2ggPj4gSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfU0hJRlQpICYKKwkJCUlORklOSVBBVEhfSUJDQ19MSU5LQ01EX01BU0tdLAorCQkgICBpcGF0aF9pYmNzdGF0dXNfc3RyWworCQkJICAgKGlwYXRoX3JlYWRfa3JlZzY0CisJCQkgICAgKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY3N0YXR1cykgPj4KKwkJCSAgICBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpICYKKwkJCSAgIElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9NQVNLXSk7CisKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCisJCQkgZGQtPmlwYXRoX2liY2N0cmwgfCB3aGljaCk7Cit9CisKKy8qKgorICogaXBhdGhfcmVhZF9rcmVnNjRfcG9ydCAtIHJlYWQgYSBkZXZpY2UncyBwZXItcG9ydCA2NC1iaXQga2VybmVsIHJlZ2lzdGVyCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHJlZ25vOiB0aGUgcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQKKyAqIEBwb3J0OiB0aGUgcG9ydCBjb250YWluaW5nIHRoZSByZWdpc3RlcgorICoKKyAqIFJlZ2lzdGVycyB0aGF0IHZhcnkgd2l0aCB0aGUgY2hpcCBpbXBsZW1lbnRhdGlvbiBjb25zdGFudHMgKHBvcnQpCisgKiB1c2UgdGhpcyByb3V0aW5lLgorICovCit1NjQgaXBhdGhfcmVhZF9rcmVnNjRfcG9ydChjb25zdCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2tyZWcgcmVnbm8sCisJCQkgICB1bnNpZ25lZCBwb3J0KQoreworCXUxNiB3aGVyZTsKKworCWlmIChwb3J0IDwgZGQtPmlwYXRoX3BvcnRjbnQgJiYKKwkgICAgKHJlZ25vID09IGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRyYWRkciB8fAorCSAgICAgcmVnbm8gPT0gZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJ0YWlsYWRkcikpCisJCXdoZXJlID0gcmVnbm8gKyBwb3J0OworCWVsc2UKKwkJd2hlcmUgPSAtMTsKKworCXJldHVybiBpcGF0aF9yZWFkX2tyZWc2NChkZCwgd2hlcmUpOworfQorCisvKioKKyAqIGlwYXRoX3dyaXRlX2tyZWdfcG9ydCAtIHdyaXRlIGEgZGV2aWNlJ3MgcGVyLXBvcnQgNjQtYml0IGtlcm5lbCByZWdpc3RlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEByZWdubzogdGhlIHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZQorICogQHBvcnQ6IHRoZSBwb3J0IGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVyCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byB3cml0ZQorICoKKyAqIFJlZ2lzdGVycyB0aGF0IHZhcnkgd2l0aCB0aGUgY2hpcCBpbXBsZW1lbnRhdGlvbiBjb25zdGFudHMgKHBvcnQpCisgKiB1c2UgdGhpcyByb3V0aW5lLgorICovCit2b2lkIGlwYXRoX3dyaXRlX2tyZWdfcG9ydChjb25zdCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2tyZWcgcmVnbm8sCisJCQkgIHVuc2lnbmVkIHBvcnQsIHU2NCB2YWx1ZSkKK3sKKwl1MTYgd2hlcmU7CisKKwlpZiAocG9ydCA8IGRkLT5pcGF0aF9wb3J0Y250ICYmCisJICAgIChyZWdubyA9PSBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcmFkZHIgfHwKKwkgICAgIHJlZ25vID09IGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIpKQorCQl3aGVyZSA9IHJlZ25vICsgcG9ydDsKKwllbHNlCisJCXdoZXJlID0gLTE7CisKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCB3aGVyZSwgdmFsdWUpOworfQorCisvKioKKyAqIGlwYXRoX3NodXRkb3duX2RldmljZSAtIHNodXQgZG93biBhIGRldmljZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB0byBtYWtlIHRoZSBkZXZpY2UgcXVpZXQgd2hlbiB3ZSBhcmUgYWJvdXQgdG8KKyAqIHVubG9hZCB0aGUgZHJpdmVyLCBhbmQgYWxzbyB3aGVuIHRoZSBkZXZpY2UgaXMgYWRtaW5pc3RyYXRpdmVseQorICogZGlzYWJsZWQuICAgSXQgZG9lcyBub3QgZnJlZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzLgorICogRXZlcnl0aGluZyBpdCBkb2VzIGhhcyB0byBiZSBzZXR1cCBhZ2FpbiBieSBpcGF0aF9pbml0X2NoaXAoZGQsMSkKKyAqLwordm9pZCBpcGF0aF9zaHV0ZG93bl9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU2NCB2YWw7CisKKwlpcGF0aF9kYmcoIlNodXR0aW5nIGRvd24gdGhlIGRldmljZVxuIik7CisKKwlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTElOS1VOSzsKKwlkZC0+aXBhdGhfZmxhZ3MgJj0gfihJUEFUSF9JTklUVEVEIHwgSVBBVEhfTElOS0RPV04gfAorCQkJICAgICBJUEFUSF9MSU5LSU5JVCB8IElQQVRIX0xJTktBUk1FRCB8CisJCQkgICAgIElQQVRIX0xJTktBQ1RJVkUpOworCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+KElQQVRIX1NUQVRVU19JQl9DT05GIHwKKwkJCQlJUEFUSF9TVEFUVVNfSUJfUkVBRFkpOworCisJLyogbWFzayBpbnRlcnJ1cHRzLCBidXQgbm90IGVycm9ycyAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50bWFzaywgMFVMTCk7CisKKwlkZC0+aXBhdGhfcmN2Y3RybCA9IDA7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKKworCS8qCisJICogZ3JhY2VmdWxseSBzdG9wIGFsbCBzZW5kcyBhbGxvd2luZyBhbnkgaW4gcHJvZ3Jlc3MgdG8gdHJpY2tsZSBvdXQKKwkgKiBmaXJzdC4KKwkgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLCAwVUxMKTsKKwkvKiBmbHVzaCBpdCAqLworCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCS8qCisJICogZW5vdWdoIGZvciBhbnl0aGluZyB0aGF0J3MgZ29pbmcgdG8gdHJpY2tsZSBvdXQgdG8gaGF2ZSBhY3R1YWxseQorCSAqIGRvbmUgc28uCisJICovCisJdWRlbGF5KDUpOworCisJLyoKKwkgKiBhYm9ydCBhbnkgYXJtZWQgb3IgbGF1bmNoZWQgUElPIGJ1ZmZlcnMgdGhhdCBkaWRuJ3QgZ28uIChzZWxmCisJICogY2xlYXJpbmcpLiAgV2lsbCBjYXVzZSBhbnkgcGFja2V0IGN1cnJlbnRseSBiZWluZyB0cmFuc21pdHRlZCB0bworCSAqIGdvIG91dCB3aXRoIGFuIEVCUCwgYW5kIG1heSBhbHNvIGNhdXNlIGEgc2hvcnQgcGFja2V0IGVycm9yIG9uCisJICogdGhlIHJlY2VpdmVyLgorCSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkgSU5GSU5JUEFUSF9TX0FCT1JUKTsKKworCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9ESVNBQkxFIDw8CisJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NISUZUKTsKKworCS8qCisJICogd2UgYXJlIHNodXR0aW5nIGRvd24sIHNvIHRlbGwgdGhlIGxheWVyZWQgZHJpdmVyLiAgV2UgZG9uJ3QgZG8KKwkgKiB0aGlzIG9uIGp1c3QgYSBsaW5rIHN0YXRlIGNoYW5nZSwgbXVjaCBsaWtlIGV0aGVybmV0LCBhIGNhYmxlCisJICogdW5wbHVnLCBldGMuIGRvZXNuJ3QgY2hhbmdlIGRyaXZlciBzdGF0ZQorCSAqLworCWlwYXRoX2xheWVyX2ludHIoZGQsIElQQVRIX0xBWUVSX0lOVF9JRl9ET1dOKTsKKworCS8qIGRpc2FibGUgSUJDICovCisJZGQtPmlwYXRoX2NvbnRyb2wgJj0gfklORklOSVBBVEhfQ19MSU5LRU5BQkxFOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCwKKwkJCSBkZC0+aXBhdGhfY29udHJvbCk7CisKKwkvKgorCSAqIGNsZWFyIFNlcmRlc0VuYWJsZSBhbmQgdHVybiB0aGUgbGVkcyBvZmY7IGRvIHRoaXMgaGVyZSBiZWNhdXNlCisJICogd2UgYXJlIHVubG9hZGluZywgc28gZG9uJ3QgY291bnQgb24gaW50ZXJydXB0cyB0byBtb3ZlIGFsb25nCisJICogVHVybiB0aGUgTEVEcyBvZmYgZXhwbGljdGx5IGZvciB0aGUgc2FtZSByZWFzb24uCisJICovCisJZGQtPmlwYXRoX2ZfcXVpZXRfc2VyZGVzKGRkKTsKKwlkZC0+aXBhdGhfZl9zZXRleHRsZWQoZGQsIDAsIDApOworCisJaWYgKGRkLT5pcGF0aF9zdGF0c190aW1lcl9hY3RpdmUpIHsKKwkJZGVsX3RpbWVyX3N5bmMoJmRkLT5pcGF0aF9zdGF0c190aW1lcik7CisJCWRkLT5pcGF0aF9zdGF0c190aW1lcl9hY3RpdmUgPSAwOworCX0KKworCS8qCisJICogY2xlYXIgYWxsIGludGVycnVwdHMgYW5kIGVycm9ycywgc28gdGhhdCB0aGUgbmV4dCB0aW1lIHRoZSBkcml2ZXIKKwkgKiBpcyBsb2FkZWQgb3IgZGV2aWNlIGlzIGVuYWJsZWQsIHdlIGtub3cgdGhhdCB3aGF0ZXZlciBpcyBzZXQKKwkgKiBoYXBwZW5lZCB3aGlsZSB3ZSB3ZXJlIHVubG9hZGVkCisJICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycmNsZWFyLAorCQkJIH4wVUxMICYgfklORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JjbGVhciwgLTFMTCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRjbGVhciwgLTFMTCk7Cit9CisKKy8qKgorICogaXBhdGhfZnJlZV9wZGRhdGEgLSBmcmVlIGEgcG9ydCdzIGFsbG9jYXRlZCBkYXRhCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBvcnQ6IHRoZSBwb3J0CisgKiBAZnJlZWhkcnE6IGZyZWUgdGhlIHBvcnQgZGF0YSBzdHJ1Y3R1cmUgaWYgdHJ1ZQorICoKKyAqIHdoZW4gY2xvc2luZywgZnJlZSB1cCBhbnkgYWxsb2NhdGVkIGRhdGEgZm9yIGEgcG9ydCwgaWYgdGhlCisgKiByZWZlcmVuY2UgY291bnQgZ29lcyB0byB6ZXJvCisgKiBOb3RlOiB0aGlzIGFsc28gb3B0aW9uYWxseSBmcmVlcyB0aGUgcG9ydGRhdGEgaXRzZWxmIQorICogQW55IGNoYW5nZXMgaGVyZSBoYXZlIHRvIGJlIG1hdGNoZWQgdXAgd2l0aCB0aGUgcmVpbml0IGNhc2UKKyAqIG9mIGlwYXRoX2luaXRfY2hpcCgpLCB3aGljaCBjYWxscyB0aGlzIHJvdXRpbmUgb24gcmVpbml0IGFmdGVyIHJlc2V0LgorICovCit2b2lkIGlwYXRoX2ZyZWVfcGRkYXRhKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIHBvcnQsIGludCBmcmVlaGRycSkKK3sKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkW3BvcnRdOworCisJaWYgKCFwZCkKKwkJcmV0dXJuOworCWlmIChmcmVlaGRycSkKKwkJLyoKKwkJICogb25seSBjbGVhciBhbmQgZnJlZSBwb3J0ZGF0YSBpZiB3ZSBhcmUgZ29pbmcgdG8gYWxzbworCQkgKiByZWxlYXNlIHRoZSBoZHJxLCBvdGhlcndpc2Ugd2UgbGVhayB0aGUgaGRycSBvbiBlYWNoCisJCSAqIG9wZW4vY2xvc2UgY3ljbGUKKwkJICovCisJCWRkLT5pcGF0aF9wZFtwb3J0XSA9IE5VTEw7CisJaWYgKGZyZWVoZHJxICYmIHBkLT5wb3J0X3JjdmhkcnEpIHsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiZnJlZSBjbG9zZWQgcG9ydCAlZCByY3ZoZHJxIEAgJXAgIgorCQkJICAgIihzaXplPSVsdSlcbiIsIHBkLT5wb3J0X3BvcnQsIHBkLT5wb3J0X3JjdmhkcnEsCisJCQkgICAodW5zaWduZWQgbG9uZykgcGQtPnBvcnRfcmN2aGRycV9zaXplKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgcGQtPnBvcnRfcmN2aGRycV9zaXplLAorCQkJCSAgcGQtPnBvcnRfcmN2aGRycSwgcGQtPnBvcnRfcmN2aGRycV9waHlzKTsKKwkJcGQtPnBvcnRfcmN2aGRycSA9IE5VTEw7CisJfQorCWlmIChwb3J0ICYmIHBkLT5wb3J0X3JjdmVncmJ1ZikgeworCQkvKiBhbHdheXMgZnJlZSB0aGlzICovCisJCWlmIChwZC0+cG9ydF9yY3ZlZ3JidWYpIHsKKwkJCXVuc2lnbmVkIGU7CisKKwkJCWZvciAoZSA9IDA7IGUgPCBwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzOyBlKyspIHsKKwkJCQl2b2lkICpiYXNlID0gcGQtPnBvcnRfcmN2ZWdyYnVmW2VdOworCQkJCXNpemVfdCBzaXplID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3NpemU7CisKKwkJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJlZ3JidWYgZnJlZSglcCwgJWx1KSwgIgorCQkJCQkgICAiY2h1bmsgJXUvJXVcbiIsIGJhc2UsCisJCQkJCSAgICh1bnNpZ25lZCBsb25nKSBzaXplLAorCQkJCQkgICBlLCBwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzKTsKKwkJCQlkbWFfZnJlZV9jb2hlcmVudCgKKwkJCQkJJmRkLT5wY2lkZXYtPmRldiwgc2l6ZSwgYmFzZSwKKwkJCQkJcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXNbZV0pOworCQkJfQorCQkJdmZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmKTsKKwkJCXBkLT5wb3J0X3JjdmVncmJ1ZiA9IE5VTEw7CisJCQl2ZnJlZShwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cyk7CisJCQlwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cyA9IE5VTEw7CisJCX0KKwkJcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyA9IDA7CisJfSBlbHNlIGlmIChwb3J0ID09IDAgJiYgZGQtPmlwYXRoX3BvcnQwX3NrYnMpIHsKKwkJdW5zaWduZWQgZTsKKwkJc3RydWN0IHNrX2J1ZmYgKipza2JzID0gZGQtPmlwYXRoX3BvcnQwX3NrYnM7CisKKwkJZGQtPmlwYXRoX3BvcnQwX3NrYnMgPSBOVUxMOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJmcmVlIGNsb3NlZCBwb3J0ICVkIGlwYXRoX3BvcnQwX3NrYnMgIgorCQkJICAgIkAgJXBcbiIsIHBkLT5wb3J0X3BvcnQsIHNrYnMpOworCQlmb3IgKGUgPSAwOyBlIDwgZGQtPmlwYXRoX3JjdmVncmNudDsgZSsrKQorCQkJaWYgKHNrYnNbZV0pCisJCQkJZGV2X2tmcmVlX3NrYihza2JzW2VdKTsKKwkJdmZyZWUoc2ticyk7CisJfQorCWlmIChmcmVlaGRycSkgeworCQlrZnJlZShwZC0+cG9ydF90aWRfcGdfbGlzdCk7CisJCWtmcmVlKHBkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluZmluaXBhdGhfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpcGF0aF9kYmcoS0VSTl9JTkZPIERSSVZFUl9MT0FEX01TRyAiJXMiLCBpcGF0aF9jb3JlX3ZlcnNpb24pOworCisJLyoKKwkgKiBUaGVzZSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGRyaXZlciBpcyByZWdpc3RlcmVkIHdpdGgKKwkgKiB0aGUgUENJIHN1YnN5c3RlbS4KKwkgKi8KKwlpZHJfaW5pdCgmdW5pdF90YWJsZSk7CisJaWYgKCFpZHJfcHJlX2dldCgmdW5pdF90YWJsZSwgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsOworCX0KKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlwYXRoX2RyaXZlcik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FCisJCSAgICAgICAiOiBVbmFibGUgdG8gcmVnaXN0ZXIgZHJpdmVyOiBlcnJvciAlZFxuIiwgLXJldCk7CisJCWdvdG8gYmFpbF91bml0OworCX0KKworCXJldCA9IGlwYXRoX2RyaXZlcl9jcmVhdGVfZ3JvdXAoJmlwYXRoX2RyaXZlci5kcml2ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRSAiOiBVbmFibGUgdG8gY3JlYXRlIGRyaXZlciAiCisJCSAgICAgICAic3lzZnMgZW50cmllczogZXJyb3IgJWRcbiIsIC1yZXQpOworCQlnb3RvIGJhaWxfcGNpOworCX0KKworCXJldCA9IGlwYXRoX2luaXRfaXBhdGhmcygpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRSAiOiBVbmFibGUgdG8gY3JlYXRlICIKKwkJICAgICAgICJpcGF0aGZzOiBlcnJvciAlZFxuIiwgLXJldCk7CisJCWdvdG8gYmFpbF9ncm91cDsKKwl9CisKKwlnb3RvIGJhaWw7CisKK2JhaWxfZ3JvdXA6CisJaXBhdGhfZHJpdmVyX3JlbW92ZV9ncm91cCgmaXBhdGhfZHJpdmVyLmRyaXZlcik7CisKK2JhaWxfcGNpOgorCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXBhdGhfZHJpdmVyKTsKKworYmFpbF91bml0OgorCWlkcl9kZXN0cm95KCZ1bml0X3RhYmxlKTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHBvcnQ7CisKKwlpcGF0aF9zaHV0ZG93bl9kZXZpY2UoZGQpOworCisJaWYgKCpkZC0+aXBhdGhfc3RhdHVzcCAmIElQQVRIX1NUQVRVU19DSElQX1BSRVNFTlQpIHsKKwkJLyogY2FuJ3QgZG8gYW55dGhpbmcgbW9yZSB3aXRoIGNoaXA7IG5lZWRzIHJlLWluaXQgKi8KKwkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfQ0hJUF9QUkVTRU5UOworCQlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKSB7CisJCQkvKgorCQkJICogaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGNsZWFuZWQgdXAgYmVmb3JlIHRoZXNlIGFyZQorCQkJICogdG8gZW5zdXJlIGFueSByZWdpc3RlciByZWFkcy93cml0ZXMgImZhaWwiIHVudGlsCisJCQkgKiByZS1pbml0CisJCQkgKi8KKwkJCWRkLT5pcGF0aF9rcmVnYmFzZSA9IE5VTEw7CisJCQlkZC0+aXBhdGhfa3JlZ3ZpcnQgPSBOVUxMOworCQkJZGQtPmlwYXRoX3VyZWdiYXNlID0gMDsKKwkJCWRkLT5pcGF0aF9zcmVnYmFzZSA9IDA7CisJCQlkZC0+aXBhdGhfY3JlZ2Jhc2UgPSAwOworCQkJZGQtPmlwYXRoX2tyZWdzaXplID0gMDsKKwkJfQorCQlpcGF0aF9kaXNhYmxlX3djKGRkKTsKKwl9CisKKwlpZiAoZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJCSAgKHZvaWQgKikgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEsCisJCQkJICBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMpOworCQlkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSA9IE5VTEw7CisJfQorCisJaWYgKGRkLT5pcGF0aF9wYWdlc2hhZG93KSB7CisJCXN0cnVjdCBwYWdlICoqdG1wcCA9IGRkLT5pcGF0aF9wYWdlc2hhZG93OworCQlpbnQgaSwgY250ID0gMDsKKworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJVbmxvY2tpbmcgYW55IGV4cFRJRCBwYWdlcyBzdGlsbCAiCisJCQkgICAibG9ja2VkXG4iKTsKKwkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGRkLT5pcGF0aF9jZmdwb3J0czsgcG9ydCsrKSB7CisJCQlpbnQgcG9ydF90aWRiYXNlID0gcG9ydCAqIGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisJCQlpbnQgbWF4dGlkID0gcG9ydF90aWRiYXNlICsgZGQtPmlwYXRoX3JjdnRpZGNudDsKKwkJCWZvciAoaSA9IHBvcnRfdGlkYmFzZTsgaSA8IG1heHRpZDsgaSsrKSB7CisJCQkJaWYgKCF0bXBwW2ldKQorCQkJCQljb250aW51ZTsKKwkJCQlpcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMoJnRtcHBbaV0sIDEpOworCQkJCXRtcHBbaV0gPSBOVUxMOworCQkJCWNudCsrOworCQkJfQorCQl9CisJCWlmIChjbnQpIHsKKwkJCWlwYXRoX3N0YXRzLnNwc19wYWdldW5sb2NrcyArPSBjbnQ7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJUaGVyZSB3ZXJlIHN0aWxsICV1IGV4cFRJRCAiCisJCQkJICAgImVudHJpZXMgbG9ja2VkXG4iLCBjbnQpOworCQl9CisJCWlmIChpcGF0aF9zdGF0cy5zcHNfcGFnZWxvY2tzIHx8CisJCSAgICBpcGF0aF9zdGF0cy5zcHNfcGFnZXVubG9ja3MpCisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICIlbGx1IHBhZ2VzIGxvY2tlZCwgJWxsdSAiCisJCQkJICAgInVubG9ja2VkIHZpYSBpcGF0aF9te3VufWxvY2tcbiIsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkgICBpcGF0aF9zdGF0cy5zcHNfcGFnZWxvY2tzLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJICAgaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKTsKKworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJGcmVlIHNoYWRvdyBwYWdlIHRpZCBhcnJheSBhdCAlcFxuIiwKKwkJCSAgIGRkLT5pcGF0aF9wYWdlc2hhZG93KTsKKwkJdmZyZWUoZGQtPmlwYXRoX3BhZ2VzaGFkb3cpOworCQlkZC0+aXBhdGhfcGFnZXNoYWRvdyA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBmcmVlIGFueSByZXNvdXJjZXMgc3RpbGwgaW4gdXNlICh1c3VhbGx5IGp1c3Qga2VybmVsIHBvcnRzKQorCSAqIGF0IHVubG9hZAorCSAqLworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IHBvcnQrKykKKwkJaXBhdGhfZnJlZV9wZGRhdGEoZGQsIHBvcnQsIDEpOworCWtmcmVlKGRkLT5pcGF0aF9wZCk7CisJLyoKKwkgKiBkZWJ1Z2dhYmlsaXR5LCBpbiBjYXNlIHNvbWUgY2xlYW51cCBwYXRoIHRyaWVzIHRvIHVzZSBpdAorCSAqIGFmdGVyIHRoaXMKKwkgKi8KKwlkZC0+aXBhdGhfcGQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaW5maW5pcGF0aF9jbGVhbnVwKHZvaWQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpcGF0aF9leGl0X2lwYXRoZnMoKTsKKworCWlwYXRoX2RyaXZlcl9yZW1vdmVfZ3JvdXAoJmlwYXRoX2RyaXZlci5kcml2ZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiB0dXJuIG9mZiByY3YsIHNlbmQsIGFuZCBpbnRlcnJ1cHRzIGZvciBhbGwgcG9ydHMsIGFsbCBkcml2ZXJzCisJICogc2hvdWxkIGFsc28gaGFyZCByZXNldCB0aGUgY2hpcCBoZXJlPworCSAqIGZyZWUgdXAgcG9ydCAwIChrZXJuZWwpIHJjdmhkciwgZWdyIGJ1ZnMsIGFuZCBldmVudHVhbGx5IHRpZCBidWZzCisJICogZm9yIGFsbCB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLCBpZiB0aGV5IHdlcmUgYWxsb2NhdGVkCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkLCB0bXAsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKQorCQkJY2xlYW51cF9kZXZpY2UoZGQpOworCisJCWlmIChkZC0+cGNpZGV2KSB7CisJCQlpZiAoZGQtPnBjaWRldi0+aXJxKSB7CisJCQkJaXBhdGhfY2RiZyhWRVJCT1NFLAorCQkJCQkgICAidW5pdCAldSBmcmVlX2lycSBvZiBpcnEgJXhcbiIsCisJCQkJCSAgIGRkLT5pcGF0aF91bml0LCBkZC0+cGNpZGV2LT5pcnEpOworCQkJCWZyZWVfaXJxKGRkLT5wY2lkZXYtPmlycSwgZGQpOworCQkJfSBlbHNlCisJCQkJaXBhdGhfZGJnKCJpcnEgaXMgMCwgbm90IGRvaW5nIGZyZWVfaXJxICIKKwkJCQkJICAiZm9yIHVuaXQgJXVcbiIsIGRkLT5pcGF0aF91bml0KTsKKworCQkJLyoKKwkJCSAqIHdlIGNoZWNrIGZvciBOVUxMIGhlcmUsIGJlY2F1c2UgaXQncyBvdXRzaWRlCisJCQkgKiB0aGUga3JlZ2Jhc2UgY2hlY2ssIGFuZCB3ZSBuZWVkIHRvIGNhbGwgaXQKKwkJCSAqIGFmdGVyIHRoZSBmcmVlX2lycS4gIFRodXMgaXQncyBwb3NzaWJsZSB0aGF0CisJCQkgKiB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgd2VyZSBuZXZlciBpbml0aWFsaXplZC4KKwkJCSAqLworCQkJaWYgKGRkLT5pcGF0aF9mX2NsZWFudXApCisJCQkJLyogY2xlYW4gdXAgY2hpcC1zcGVjaWZpYyBzdHVmZiAqLworCQkJCWRkLT5pcGF0aF9mX2NsZWFudXAoZGQpOworCisJCQlkZC0+cGNpZGV2ID0gTlVMTDsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJVbnJlZ2lzdGVyaW5nIHBjaSBkcml2ZXJcbiIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXBhdGhfZHJpdmVyKTsKKworCWlkcl9kZXN0cm95KCZ1bml0X3RhYmxlKTsKK30KKworLyoqCisgKiBpcGF0aF9yZXNldF9kZXZpY2UgLSByZXNldCB0aGUgY2hpcCBpZiBwb3NzaWJsZQorICogQHVuaXQ6IHRoZSBkZXZpY2UgdG8gcmVzZXQKKyAqCisgKiBXaGV0aGVyIG9yIG5vdCByZXNldCBpcyBzdWNjZXNzZnVsLCB3ZSBhdHRlbXB0IHRvIHJlLWluaXRpYWxpemUgdGhlIGNoaXAKKyAqICh0aGF0IGlzLCBtdWNoIGxpa2UgYSBkcml2ZXIgdW5sb2FkL3JlbG9hZCkuICBXZSBjbGVhciB0aGUgSU5JVFRFRCBmbGFnCisgKiBzbyB0aGF0IHRoZSB2YXJpb3VzIGVudHJ5IHBvaW50cyB3aWxsIGZhaWwgdW50aWwgd2UgcmVpbml0aWFsaXplLiAgRm9yCisgKiBub3csIHdlIG9ubHkgYWxsb3cgdGhpcyBpZiBubyB1c2VyIHBvcnRzIGFyZSBvcGVuIHRoYXQgdXNlIGNoaXAgcmVzb3VyY2VzCisgKi8KK2ludCBpcGF0aF9yZXNldF9kZXZpY2UoaW50IHVuaXQpCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBpcGF0aF9sb29rdXAodW5pdCk7CisKKwlpZiAoIWRkKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiUmVzZXQgb24gdW5pdCAldSByZXF1ZXN0ZWRcbiIsIHVuaXQpOworCisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiSW52YWxpZCB1bml0IG51bWJlciAldSBvciAiCisJCQkgIm5vdCBpbml0aWFsaXplZCBvciBub3QgcHJlc2VudFxuIiwgdW5pdCk7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChkZC0+aXBhdGhfcGQpCisJCWZvciAoaSA9IDE7IGkgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IGkrKykgeworCQkJaWYgKGRkLT5pcGF0aF9wZFtpXSAmJiBkZC0+aXBhdGhfcGRbaV0tPnBvcnRfY250KSB7CisJCQkJaXBhdGhfZGJnKCJ1bml0ICV1IHBvcnQgJWQgaXMgaW4gdXNlICIKKwkJCQkJICAiKFBJRCAldSBjbWQgJXMpLCBjYW4ndCByZXNldFxuIiwKKwkJCQkJICB1bml0LCBpLAorCQkJCQkgIGRkLT5pcGF0aF9wZFtpXS0+cG9ydF9waWQsCisJCQkJCSAgZGQtPmlwYXRoX3BkW2ldLT5wb3J0X2NvbW0pOworCQkJCXJldCA9IC1FQlVTWTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0KKworCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfSU5JVFRFRDsKKwlyZXQgPSBkZC0+aXBhdGhfZl9yZXNldChkZCk7CisJaWYgKHJldCAhPSAxKQorCQlpcGF0aF9kYmcoInJlc2V0IHdhcyBub3Qgc3VjY2Vzc2Z1bFxuIik7CisJaXBhdGhfZGJnKCJUcnlpbmcgdG8gcmVpbml0aWFsaXplIHVuaXQgJXUgYWZ0ZXIgcmVzZXQgYXR0ZW1wdFxuIiwKKwkJICB1bml0KTsKKwlyZXQgPSBpcGF0aF9pbml0X2NoaXAoZGQsIDEpOworCWlmIChyZXQpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJSZWluaXRpYWxpemUgdW5pdCAldSBhZnRlciAiCisJCQkgICAgICAicmVzZXQgZmFpbGVkIHdpdGggJWRcbiIsIHVuaXQsIHJldCk7CisJZWxzZQorCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiUmVpbml0aWFsaXplZCB1bml0ICV1IGFmdGVyICIKKwkJCSAicmVzZXR0aW5nXG4iLCB1bml0KTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCittb2R1bGVfaW5pdChpbmZpbmlwYXRoX2luaXQpOworbW9kdWxlX2V4aXQoaW5maW5pcGF0aF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmYxY2VhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCkBAIC0wLDAgKzEsNjEyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisKKy8qCisgKiBJbmZpbmlQYXRoIEkyQyBkcml2ZXIgZm9yIGEgc2VyaWFsIGVlcHJvbS4gIFRoaXMgaXMgbm90IGEgZ2VuZXJpYworICogSTJDIGludGVyZmFjZS4gIEZvciBhIHN0YXJ0LCB0aGUgZGV2aWNlIHdlJ3JlIHVzaW5nIChBdG1lbCBBVDI0QzExKQorICogZG9lc24ndCB3b3JrIGxpa2UgYSByZWd1bGFyIEkyQyBkZXZpY2UuICBJdCBsb29rcyBsaWtlIG9uZQorICogZWxlY3RyaWNhbGx5LCBidXQgbm90IGxvZ2ljYWxseS4gIE5vcm1hbCBJMkMgZGV2aWNlcyBoYXZlIGEgc2luZ2xlCisgKiA3LWJpdCBvciAxMC1iaXQgSTJDIGFkZHJlc3MgdGhhdCB0aGV5IHJlc3BvbmQgdG8uICBWYWxpZCA3LWJpdAorICogYWRkcmVzc2VzIHJhbmdlIGZyb20gMHgwMyB0byAweDc3LiAgQWRkcmVzc2VzIDB4MDAgdG8gMHgwMiBhbmQgMHg3OAorICogdG8gMHg3RiBhcmUgc3BlY2lhbCByZXNlcnZlZCBhZGRyZXNzZXMgKGUuZy4gMHgwMCBpcyB0aGUgImdlbmVyYWwKKyAqIGNhbGwiIGFkZHJlc3MuKSAgVGhlIEF0bWVsIGRldmljZSwgb24gdGhlIG90aGVyIGhhbmQsIHJlc3BvbmRzIHRvIEFMTAorICogNy1iaXQgYWRkcmVzc2VzLiAgSXQncyBkZXNpZ25lZCB0byBiZSB0aGUgb25seSBkZXZpY2Ugb24gYSBnaXZlbiBJMkMKKyAqIGJ1cy4gIEEgNy1iaXQgYWRkcmVzcyBjb3JyZXNwb25kcyB0byB0aGUgbWVtb3J5IGFkZHJlc3Mgd2l0aGluIHRoZQorICogQXRtZWwgZGV2aWNlIGl0c2VsZi4KKyAqCisgKiBBbHNvLCB0aGUgdGltaW5nIHJlcXVpcmVtZW50cyBtZWFuIG1vcmUgdGhhbiBzaW1wbGUgc29mdHdhcmUKKyAqIGJpdGJhbmdpbmcsIHdpdGggcmVhZGJhY2tzIGZyb20gY2hpcCB0byBlbnN1cmUgdGltaW5nIChzaW1wbGUgdWRlbGF5CisgKiBpcyBub3QgZW5vdWdoKS4KKyAqCisgKiBUaGlzIGFsbCBtZWFucyB0aGF0IGFjY2Vzc2luZyB0aGUgZGV2aWNlIGlzIHNwZWNpYWxpemVkIGVub3VnaAorICogdGhhdCB1c2luZyB0aGUgc3RhbmRhcmQga2VybmVsIEkyQyBiaXRiYW5naW5nIGludGVyZmFjZSB3b3VsZCBiZQorICogaW1wb3NzaWJsZS4gIEZvciBleGFtcGxlLCB0aGUgY29yZSBJMkMgZWVwcm9tIGRyaXZlciBleHBlY3RzIHRvIGZpbmQKKyAqIGEgZGV2aWNlIGF0IG9uZSBvciBtb3JlIG9mIGEgbGltaXRlZCBzZXQgb2YgYWRkcmVzc2VzIG9ubHkuICBJdCBkb2Vzbid0CisgKiBhbGxvdyB3cml0aW5nIHRvIGFuIGVlcHJvbS4gIEl0IGFsc28gZG9lc24ndCBwcm92aWRlIGFueSBtZWFucyBvZgorICogYWNjZXNzaW5nIGVlcHJvbSBjb250ZW50cyBmcm9tIHdpdGhpbiB0aGUga2VybmVsLCBvbmx5IHZpYSBzeXNmcy4KKyAqLworCitlbnVtIGkyY190eXBlIHsKKwlpMmNfbGluZV9zY2wgPSAwLAorCWkyY19saW5lX3NkYQorfTsKKworZW51bSBpMmNfc3RhdGUgeworCWkyY19saW5lX2xvdyA9IDAsCisJaTJjX2xpbmVfaGlnaAorfTsKKworI2RlZmluZSBSRUFEX0NNRCAxCisjZGVmaW5lIFdSSVRFX0NNRCAwCisKK3N0YXRpYyBpbnQgZWVwcm9tX2luaXQ7CisKKy8qCisgKiBUaGUgZ3Bpb3ZhbCBtYW5pcHVsYXRpb24gcmVhbGx5IHNob3VsZCBiZSBwcm90ZWN0ZWQgYnkgc3BpbmxvY2tzCisgKiBvciBiZSBjb252ZXJ0ZWQgdG8gdXNlIGF0b21pYyBvcGVyYXRpb25zLgorICovCisKKy8qKgorICogaTJjX2dwaW9fc2V0IC0gc2V0IGEgR1BJTyBsaW5lCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGxpbmU6IHRoZSBsaW5lIHRvIHNldAorICogQG5ld19saW5lX3N0YXRlOiB0aGUgc3RhdGUgdG8gc2V0CisgKgorICogUmV0dXJucyAwIGlmIHRoZSBsaW5lIHdhcyBzZXQgdG8gdGhlIG5ldyBzdGF0ZSBzdWNjZXNzZnVsbHksIG5vbi16ZXJvCisgKiBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBpMmNfZ3Bpb19zZXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJZW51bSBpMmNfdHlwZSBsaW5lLAorCQkJZW51bSBpMmNfc3RhdGUgbmV3X2xpbmVfc3RhdGUpCit7CisJdTY0IHJlYWRfdmFsLCB3cml0ZV92YWwsIG1hc2ssICpncGlvdmFsOworCisJZ3Bpb3ZhbCA9ICZkZC0+aXBhdGhfZ3Bpb19vdXQ7CisJcmVhZF92YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRjdHJsKTsKKwlpZiAobGluZSA9PSBpMmNfbGluZV9zY2wpCisJCW1hc2sgPSBpcGF0aF9ncGlvX3NjbDsKKwllbHNlCisJCW1hc2sgPSBpcGF0aF9ncGlvX3NkYTsKKworCWlmIChuZXdfbGluZV9zdGF0ZSA9PSBpMmNfbGluZV9oaWdoKQorCQkvKiB0cmktc3RhdGUgdGhlIG91dHB1dCByYXRoZXIgdGhhbiBmb3JjZSBoaWdoICovCisJCXdyaXRlX3ZhbCA9IHJlYWRfdmFsICYgfm1hc2s7CisJZWxzZQorCQkvKiBjb25maWcgbGluZSB0byBiZSBhbiBvdXRwdXQgKi8KKwkJd3JpdGVfdmFsID0gcmVhZF92YWwgfCBtYXNrOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0Y3RybCwgd3JpdGVfdmFsKTsKKworCS8qIHNldCBoaWdoIGFuZCB2ZXJpZnkgKi8KKwlpZiAobmV3X2xpbmVfc3RhdGUgPT0gaTJjX2xpbmVfaGlnaCkKKwkJd3JpdGVfdmFsID0gMHgxVUw7CisJZWxzZQorCQl3cml0ZV92YWwgPSAweDBVTDsKKworCWlmIChsaW5lID09IGkyY19saW5lX3NjbCkgeworCQl3cml0ZV92YWwgPDw9IGlwYXRoX2dwaW9fc2NsX251bTsKKwkJKmdwaW92YWwgPSAqZ3Bpb3ZhbCAmIH4oMVVMIDw8IGlwYXRoX2dwaW9fc2NsX251bSk7CisJCSpncGlvdmFsIHw9IHdyaXRlX3ZhbDsKKwl9IGVsc2UgeworCQl3cml0ZV92YWwgPDw9IGlwYXRoX2dwaW9fc2RhX251bTsKKwkJKmdwaW92YWwgPSAqZ3Bpb3ZhbCAmIH4oMVVMIDw8IGlwYXRoX2dwaW9fc2RhX251bSk7CisJCSpncGlvdmFsIHw9IHdyaXRlX3ZhbDsKKwl9CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX291dCwgKmdwaW92YWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaTJjX2dwaW9fZ2V0IC0gZ2V0IGEgR1BJTyBsaW5lIHN0YXRlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGxpbmU6IHRoZSBsaW5lIHRvIGdldAorICogQGN1cnJfc3RhdGVwOiB3aGVyZSB0byBwdXQgdGhlIGxpbmUgc3RhdGUKKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIGxpbmUgd2FzIHNldCB0byB0aGUgbmV3IHN0YXRlIHN1Y2Nlc3NmdWxseSwgbm9uLXplcm8KKyAqIG9uIGVycm9yLiAgY3Vycl9zdGF0ZSBpcyBub3Qgc2V0IG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IGkyY19ncGlvX2dldChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQllbnVtIGkyY190eXBlIGxpbmUsCisJCQllbnVtIGkyY19zdGF0ZSAqY3Vycl9zdGF0ZXApCit7CisJdTY0IHJlYWRfdmFsLCB3cml0ZV92YWwsIG1hc2s7CisJaW50IHJldDsKKworCS8qIGNoZWNrIGFyZ3MgKi8KKwlpZiAoY3Vycl9zdGF0ZXAgPT0gTlVMTCkgeworCQlyZXQgPSAxOworCQlnb3RvIGJhaWw7CisJfQorCisJcmVhZF92YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRjdHJsKTsKKwkvKiBjb25maWcgbGluZSB0byBiZSBhbiBpbnB1dCAqLworCWlmIChsaW5lID09IGkyY19saW5lX3NjbCkKKwkJbWFzayA9IGlwYXRoX2dwaW9fc2NsOworCWVsc2UKKwkJbWFzayA9IGlwYXRoX2dwaW9fc2RhOworCXdyaXRlX3ZhbCA9IHJlYWRfdmFsICYgfm1hc2s7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRjdHJsLCB3cml0ZV92YWwpOworCXJlYWRfdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0c3RhdHVzKTsKKworCWlmIChyZWFkX3ZhbCAmIG1hc2spCisJCSpjdXJyX3N0YXRlcCA9IGkyY19saW5lX2hpZ2g7CisJZWxzZQorCQkqY3Vycl9zdGF0ZXAgPSBpMmNfbGluZV9sb3c7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaTJjX3dhaXRfZm9yX3dyaXRlcyAtIHdhaXQgZm9yIGEgd3JpdGUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogV2UgdXNlIHRoaXMgaW5zdGVhZCBvZiB1ZGVsYXkgZGlyZWN0bHksIHNvIHdlIGNhbiBtYWtlIHN1cmUKKyAqIHRoYXQgcHJldmlvdXMgcmVnaXN0ZXIgd3JpdGVzIGhhdmUgYmVlbiBmbHVzaGVkIGFsbCB0aGUgd2F5CisgKiB0byB0aGUgY2hpcC4gIFNpbmNlIHdlIGFyZSBkZWxheWluZyBhbnl3YXksIHRoZSBjb3N0IGRvZXNuJ3QKKyAqIGh1cnQsIGFuZCBtYWtlcyB0aGUgYml0IHR3aWRkbGluZyBtb3JlIHJlZ3VsYXIKKyAqLworc3RhdGljIHZvaWQgaTJjX3dhaXRfZm9yX3dyaXRlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJKHZvaWQpaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjbF9vdXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBiaXQpCit7CisJaTJjX2dwaW9fc2V0KGRkLCBpMmNfbGluZV9zY2wsIGJpdCA/IGkyY19saW5lX2hpZ2ggOiBpMmNfbGluZV9sb3cpOworCisJaTJjX3dhaXRfZm9yX3dyaXRlcyhkZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkYV9vdXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBiaXQpCit7CisJaTJjX2dwaW9fc2V0KGRkLCBpMmNfbGluZV9zZGEsIGJpdCA/IGkyY19saW5lX2hpZ2ggOiBpMmNfbGluZV9sb3cpOworCisJaTJjX3dhaXRfZm9yX3dyaXRlcyhkZCk7Cit9CisKK3N0YXRpYyB1OCBzZGFfaW4oc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgd2FpdCkKK3sKKwllbnVtIGkyY19zdGF0ZSBiaXQ7CisKKwlpZiAoaTJjX2dwaW9fZ2V0KGRkLCBpMmNfbGluZV9zZGEsICZiaXQpKQorCQlpcGF0aF9kYmcoImdldCBiaXQgZmFpbGVkIVxuIik7CisKKwlpZiAod2FpdCkKKwkJaTJjX3dhaXRfZm9yX3dyaXRlcyhkZCk7CisKKwlyZXR1cm4gYml0ID09IGkyY19saW5lX2hpZ2ggPyAxVSA6IDA7Cit9CisKKy8qKgorICogaTJjX2Fja3JjdiAtIHNlZSBpZiBhY2sgZm9sbG93aW5nIHdyaXRlIGlzIHRydWUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgaTJjX2Fja3JjdihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTggYWNrX3JlY2VpdmVkOworCisJLyogQVQgRU5UUlkgU0NMID0gTE9XICovCisJLyogY2hhbmdlIGRpcmVjdGlvbiwgaWdub3JlIGRhdGEgKi8KKwlhY2tfcmVjZWl2ZWQgPSBzZGFfaW4oZGQsIDEpOworCXNjbF9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworCWFja19yZWNlaXZlZCA9IHNkYV9pbihkZCwgMSkgPT0gMDsKKwlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCXJldHVybiBhY2tfcmVjZWl2ZWQ7Cit9CisKKy8qKgorICogd3JfYnl0ZSAtIHdyaXRlIGEgYnl0ZSwgb25lIGJpdCBhdCBhIHRpbWUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAZGF0YTogdGhlIGJ5dGUgdG8gd3JpdGUKKyAqCisgKiBSZXR1cm5zIDAgaWYgd2UgZ290IHRoZSBmb2xsb3dpbmcgYWNrLCBvdGhlcndpc2UgMQorICovCitzdGF0aWMgaW50IHdyX2J5dGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBkYXRhKQoreworCWludCBiaXRfY250cjsKKwl1OCBiaXQ7CisKKwlmb3IgKGJpdF9jbnRyID0gNzsgYml0X2NudHIgPj0gMDsgYml0X2NudHItLSkgeworCQliaXQgPSAoZGF0YSA+PiBiaXRfY250cikgJiAxOworCQlzZGFfb3V0KGRkLCBiaXQpOworCQlzY2xfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKwkJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwl9CisJcmV0dXJuICghaTJjX2Fja3JjdihkZCkpID8gMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfYWNrKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzZGFfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCXNjbF9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworCXNjbF9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisJc2RhX291dChkZCwgaTJjX2xpbmVfaGlnaCk7Cit9CisKKy8qKgorICogaTJjX3N0YXJ0Y21kIC0gdHJhbnNtaXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiwgZm9sbG93ZWQgYnkgYWRkcmVzcy9jbWQKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAb2Zmc2V0X2RpcjogZGlyZWN0aW9uIGJ5dGUKKyAqCisgKiAgICAgIChib3RoIGNsb2NrL2RhdGEgaGlnaCwgY2xvY2sgaGlnaCwgZGF0YSBsb3cgd2hpbGUgY2xvY2sgaXMgaGlnaCkKKyAqLworc3RhdGljIGludCBpMmNfc3RhcnRjbWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBvZmZzZXRfZGlyKQoreworCWludCByZXM7CisKKwkvKiBpc3N1ZSBzdGFydCBzZXF1ZW5jZSAqLworCXNkYV9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworCXNjbF9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworCXNkYV9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKKworCS8qIGlzc3VlIGxlbmd0aCBhbmQgZGlyZWN0aW9uIGJ5dGUgKi8KKwlyZXMgPSB3cl9ieXRlKGRkLCBvZmZzZXRfZGlyKTsKKworCWlmIChyZXMpCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIk5vIGFjayB0byBjb21wbGV0ZSBzdGFydFxuIik7CisKKwlyZXR1cm4gcmVzOworfQorCisvKioKKyAqIHN0b3BfY21kIC0gdHJhbnNtaXQgdGhlIHN0b3AgY29uZGl0aW9uCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIChib3RoIGNsb2NrL2RhdGEgbG93LCBjbG9jayBoaWdoLCBkYXRhIGhpZ2ggd2hpbGUgY2xvY2sgaXMgaGlnaCkKKyAqLworc3RhdGljIHZvaWQgc3RvcF9jbWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXNjbF9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisJc2RhX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwlzY2xfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKwlzZGFfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKwl1ZGVsYXkoMik7Cit9CisKKy8qKgorICogZWVwcm9tX3Jlc2V0IC0gcmVzZXQgSTJDIGNvbW11bmljYXRpb24KKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKi8KKworc3RhdGljIGludCBlZXByb21fcmVzZXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCBjbG9ja19jeWNsZXNfbGVmdCA9IDk7CisJdTY0ICpncGlvdmFsID0gJmRkLT5pcGF0aF9ncGlvX291dDsKKwlpbnQgcmV0OworCisJZWVwcm9tX2luaXQgPSAxOworCSpncGlvdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19vdXQpOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlJlc2V0dGluZyBpMmMgZWVwcm9tOyBpbml0aWFsIGdwaW9vdXQgcmVnICIKKwkJICAgImlzICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpICpncGlvdmFsKTsKKworCS8qCisJICogVGhpcyBpcyB0byBnZXQgdGhlIGkyYyBpbnRvIGEga25vd24gc3RhdGUsIGJ5IGZpcnN0IGdvaW5nIGxvdywKKwkgKiB0aGVuIHRyaXN0YXRlIHNkYSAoYW5kIHRoZW4gdHJpc3RhdGUgc2NsIGFzIGZpcnN0IHRoaW5nCisJICogaW4gbG9vcCkKKwkgKi8KKwlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCXNkYV9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworCisJd2hpbGUgKGNsb2NrX2N5Y2xlc19sZWZ0LS0pIHsKKwkJc2NsX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CisKKwkJaWYgKHNkYV9pbihkZCwgMCkpIHsKKwkJCXNkYV9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisJCQlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCQkJcmV0ID0gMDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCXNjbF9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisJfQorCisJcmV0ID0gMTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2VlcHJvbV9yZWFkIC0gcmVjZWl2ZXMgYnl0ZXMgZnJvbSB0aGUgZWVwcm9tIHZpYSBJMkMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAZWVwcm9tX29mZnNldDogYWRkcmVzcyB0byByZWFkIGZyb20KKyAqIEBidWZmZXI6IHdoZXJlIHRvIHN0b3JlIHJlc3VsdAorICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIHJlY2VpdmUKKyAqLworCitpbnQgaXBhdGhfZWVwcm9tX3JlYWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBlZXByb21fb2Zmc2V0LAorCQkgICAgICB2b2lkICpidWZmZXIsIGludCBsZW4pCit7CisJLyogY29tcGlsZXIgY29tcGxhaW5zIHVubGVzcyBpbml0aWFsaXplZCAqLworCXU4IHNpbmdsZV9ieXRlID0gMDsKKwlpbnQgYml0X2NudHI7CisJaW50IHJldDsKKworCWlmICghZWVwcm9tX2luaXQpCisJCWVlcHJvbV9yZXNldChkZCk7CisKKwllZXByb21fb2Zmc2V0ID0gKGVlcHJvbV9vZmZzZXQgPDwgMSkgfCBSRUFEX0NNRDsKKworCWlmIChpMmNfc3RhcnRjbWQoZGQsIGVlcHJvbV9vZmZzZXQpKSB7CisJCWlwYXRoX2RiZygiRmFpbGVkIHN0YXJ0Y21kXG4iKTsKKwkJc3RvcF9jbWQoZGQpOworCQlyZXQgPSAxOworCQlnb3RvIGJhaWw7CisJfQorCisJLyoKKwkgKiBlZXByb20ga2VlcHMgY2xvY2tpbmcgZGF0YSBvdXQgYXMgbG9uZyBhcyB3ZSBhY2ssIGF1dG9tYXRpY2FsbHkKKwkgKiBpbmNyZW1lbnRpbmcgdGhlIGFkZHJlc3MuCisJICovCisJd2hpbGUgKGxlbi0tID4gMCkgeworCQkvKiBnZXQgZGF0YSAqLworCQlzaW5nbGVfYnl0ZSA9IDA7CisJCWZvciAoYml0X2NudHIgPSA4OyBiaXRfY250cjsgYml0X2NudHItLSkgeworCQkJdTggYml0OworCQkJc2NsX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CisJCQliaXQgPSBzZGFfaW4oZGQsIDApOworCQkJc2luZ2xlX2J5dGUgfD0gYml0IDw8IChiaXRfY250ciAtIDEpOworCQkJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwkJfQorCisJCS8qIHNlbmQgYWNrIGlmIG5vdCB0aGUgbGFzdCBieXRlICovCisJCWlmIChsZW4pCisJCQlzZW5kX2FjayhkZCk7CisKKwkJKigodTggKikgYnVmZmVyKSA9IHNpbmdsZV9ieXRlOworCQlidWZmZXIrKzsKKwl9CisKKwlzdG9wX2NtZChkZCk7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfZWVwcm9tX3dyaXRlIC0gd3JpdGVzIGRhdGEgdG8gdGhlIGVlcHJvbSB2aWEgSTJDCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGVlcHJvbV9vZmZzZXQ6IHdoZXJlIHRvIHBsYWNlIGRhdGEKKyAqIEBidWZmZXI6IGRhdGEgdG8gd3JpdGUKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICovCitpbnQgaXBhdGhfZWVwcm9tX3dyaXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggZWVwcm9tX29mZnNldCwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGxlbikKK3sKKwl1OCBzaW5nbGVfYnl0ZTsKKwlpbnQgc3ViX2xlbjsKKwljb25zdCB1OCAqYnAgPSBidWZmZXI7CisJaW50IG1heF93YWl0X3RpbWUsIGk7CisJaW50IHJldDsKKworCWlmICghZWVwcm9tX2luaXQpCisJCWVlcHJvbV9yZXNldChkZCk7CisKKwl3aGlsZSAobGVuID4gMCkgeworCQlpZiAoaTJjX3N0YXJ0Y21kKGRkLCAoZWVwcm9tX29mZnNldCA8PCAxKSB8IFdSSVRFX0NNRCkpIHsKKwkJCWlwYXRoX2RiZygiRmFpbGVkIHRvIHN0YXJ0IGNtZCBvZmZzZXQgJXVcbiIsCisJCQkJICBlZXByb21fb2Zmc2V0KTsKKwkJCWdvdG8gZmFpbGVkX3dyaXRlOworCQl9CisKKwkJc3ViX2xlbiA9IG1pbihsZW4sIDQpOworCQllZXByb21fb2Zmc2V0ICs9IHN1Yl9sZW47CisJCWxlbiAtPSBzdWJfbGVuOworCisJCWZvciAoaSA9IDA7IGkgPCBzdWJfbGVuOyBpKyspIHsKKwkJCWlmICh3cl9ieXRlKGRkLCAqYnArKykpIHsKKwkJCQlpcGF0aF9kYmcoIm5vIGFjayBhZnRlciBieXRlICV1LyV1ICgldSAiCisJCQkJCSAgInRvdGFsIHJlbWFpbilcbiIsIGksIHN1Yl9sZW4sCisJCQkJCSAgbGVuICsgc3ViX2xlbiAtIGkpOworCQkJCWdvdG8gZmFpbGVkX3dyaXRlOworCQkJfQorCQl9CisKKwkJc3RvcF9jbWQoZGQpOworCisJCS8qCisJCSAqIHdhaXQgZm9yIHdyaXRlIGNvbXBsZXRlIGJ5IHdhaXRpbmcgZm9yIGEgc3VjY2Vzc2Z1bAorCQkgKiByZWFkICh0aGUgY2hpcCByZXBsaWVzIHdpdGggYSB6ZXJvIGFmdGVyIHRoZSB3cml0ZQorCQkgKiBjbWQgY29tcGxldGVzLCBhbmQgYmVmb3JlIGl0IHdyaXRlcyB0byB0aGUgZWVwcm9tLgorCQkgKiBUaGUgc3RhcnRjbWQgZm9yIHRoZSByZWFkIHdpbGwgZmFpbCB0aGUgYWNrIHVudGlsCisJCSAqIHRoZSB3cml0ZXMgaGF2ZSBjb21wbGV0ZWQuICAgV2UgZG8gdGhpcyBpbmxpbmUgdG8gYXZvaWQKKwkJICogdGhlIGRlYnVnIHByaW50cyB0aGF0IGFyZSBpbiB0aGUgcmVhbCByZWFkIHJvdXRpbmUKKwkJICogaWYgdGhlIHN0YXJ0Y21kIGZhaWxzLgorCQkgKi8KKwkJbWF4X3dhaXRfdGltZSA9IDEwMDsKKwkJd2hpbGUgKGkyY19zdGFydGNtZChkZCwgUkVBRF9DTUQpKSB7CisJCQlzdG9wX2NtZChkZCk7CisJCQlpZiAoIS0tbWF4X3dhaXRfdGltZSkgeworCQkJCWlwYXRoX2RiZygiRGlkIG5vdCBnZXQgc3VjY2Vzc2Z1bCByZWFkIHRvICIKKwkJCQkJICAiY29tcGxldGUgd3JpdGVcbiIpOworCQkJCWdvdG8gZmFpbGVkX3dyaXRlOworCQkJfQorCQl9CisJCS8qIG5vdyByZWFkIHRoZSB6ZXJvIGJ5dGUgKi8KKwkJZm9yIChpID0gc2luZ2xlX2J5dGUgPSAwOyBpIDwgODsgaSsrKSB7CisJCQl1OCBiaXQ7CisJCQlzY2xfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKwkJCWJpdCA9IHNkYV9pbihkZCwgMCk7CisJCQlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCQkJc2luZ2xlX2J5dGUgPDw9IDE7CisJCQlzaW5nbGVfYnl0ZSB8PSBiaXQ7CisJCX0KKwkJc3RvcF9jbWQoZGQpOworCX0KKworCXJldCA9IDA7CisJZ290byBiYWlsOworCitmYWlsZWRfd3JpdGU6CisJc3RvcF9jbWQoZGQpOworCXJldCA9IDE7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHU4IGZsYXNoX2NzdW0oc3RydWN0IGlwYXRoX2ZsYXNoICppZnAsIGludCBhZGp1c3QpCit7CisJdTggKmlwID0gKHU4ICopIGlmcDsKKwl1OCBjc3VtID0gMCwgbGVuOworCisJZm9yIChsZW4gPSAwOyBsZW4gPCBpZnAtPmlmX2xlbmd0aDsgbGVuKyspCisJCWNzdW0gKz0gKmlwKys7CisJY3N1bSAtPSBpZnAtPmlmX2NzdW07CisJY3N1bSA9IH5jc3VtOworCWlmIChhZGp1c3QpCisJCWlmcC0+aWZfY3N1bSA9IGNzdW07CisKKwlyZXR1cm4gY3N1bTsKK30KKworLyoqCisgKiBpcGF0aF9nZXRfZ3VpZCAtIGdldCB0aGUgR1VJRCBmcm9tIHRoZSBpMmMgZGV2aWNlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFdlIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpcGF0aF9uZ3VpZCBmaWVsZCwgYW5kIGdldAorICogdGhlIGd1aWQgZnJvbSB0aGUgZmlyc3QgY2hpcCdzIGZsYXNoLCB0byB1c2UgZm9yIGFsbCBvZiB0aGVtLgorICovCit2b2lkIGlwYXRoX2dldF9lZXByb21faW5mbyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdm9pZCAqYnVmOworCXN0cnVjdCBpcGF0aF9mbGFzaCAqaWZwOworCV9fYmU2NCBndWlkOworCWludCBsZW47CisJdTggY3N1bSwgKmJndWlkOworCWludCB0ID0gZGQtPmlwYXRoX3VuaXQ7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkMCA9IGlwYXRoX2xvb2t1cCgwKTsKKworCWlmICh0ICYmIGRkMC0+aXBhdGhfbmd1aWQgPiAxICYmIHQgPD0gZGQwLT5pcGF0aF9uZ3VpZCkgeworCQl1OCAqYmd1aWQsIG9ndWlkOworCQlkZC0+aXBhdGhfZ3VpZCA9IGRkMC0+aXBhdGhfZ3VpZDsKKwkJYmd1aWQgPSAodTggKikgJiBkZC0+aXBhdGhfZ3VpZDsKKworCQlvZ3VpZCA9IGJndWlkWzddOworCQliZ3VpZFs3XSArPSB0OworCQlpZiAob2d1aWQgPiBiZ3VpZFs3XSkgeworCQkJaWYgKGJndWlkWzZdID09IDB4ZmYpIHsKKwkJCQlpZiAoYmd1aWRbNV0gPT0gMHhmZikgeworCQkJCQlpcGF0aF9kZXZfZXJyKAorCQkJCQkJZGQsCisJCQkJCQkiQ2FuJ3Qgc2V0ICVzIEdVSUQgZnJvbSAiCisJCQkJCQkiYmFzZSwgd3JhcHMgdG8gT1VJIVxuIiwKKwkJCQkJCWlwYXRoX2dldF91bml0X25hbWUodCkpOworCQkJCQlkZC0+aXBhdGhfZ3VpZCA9IDA7CisJCQkJCWdvdG8gYmFpbDsKKwkJCQl9CisJCQkJYmd1aWRbNV0rKzsKKwkJCX0KKwkJCWJndWlkWzZdKys7CisJCX0KKwkJZGQtPmlwYXRoX25ndWlkID0gMTsKKworCQlpcGF0aF9kYmcoIm5ndWlkICV1LCBzbyBhZGRpbmcgJXUgdG8gZGV2aWNlIDAgZ3VpZCwgIgorCQkJICAiZm9yICVsbHhcbiIsCisJCQkgIGRkMC0+aXBhdGhfbmd1aWQsIHQsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KGRkLT5pcGF0aF9ndWlkKSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlsZW4gPSBvZmZzZXRvZihzdHJ1Y3QgaXBhdGhfZmxhc2gsIGlmX2Z1dHVyZSk7CisJYnVmID0gdm1hbGxvYyhsZW4pOworCWlmICghYnVmKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcmVhZCAldSAiCisJCQkgICAgICAiYnl0ZXMgZnJvbSBlZXByb20gZm9yIEdVSURcbiIsIGxlbik7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoaXBhdGhfZWVwcm9tX3JlYWQoZGQsIDAsIGJ1ZiwgbGVuKSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHJlYWRpbmcgR1VJRCBmcm9tIGVlcHJvbVxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisJaWZwID0gKHN0cnVjdCBpcGF0aF9mbGFzaCAqKWJ1ZjsKKworCWNzdW0gPSBmbGFzaF9jc3VtKGlmcCwgMCk7CisJaWYgKGNzdW0gIT0gaWZwLT5pZl9jc3VtKSB7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJCYWQgSTJDIGZsYXNoIGNoZWNrc3VtOiAiCisJCQkgIjB4JXgsIG5vdCAweCV4XG4iLCBjc3VtLCBpZnAtPmlmX2NzdW0pOworCQlnb3RvIGRvbmU7CisJfQorCWlmICgqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gMFVMTCB8fAorCSAgICAqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gX19jb25zdGFudF9jcHVfdG9fYmU2NCgtMUxMKSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiSW52YWxpZCBHVUlEICVsbHggZnJvbSBmbGFzaDsgIgorCQkJICAgICAgImlnbm9yaW5nXG4iLAorCQkJICAgICAgKih1bnNpZ25lZCBsb25nIGxvbmcgKikgaWZwLT5pZl9ndWlkKTsKKwkJLyogZG9uJ3QgYWxsb3cgR1VJRCBpZiBhbGwgMCBvciBhbGwgMSdzICovCisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjb21wbGFpbiwgYnV0IGFsbG93IGl0ICovCisJaWYgKCoodTY0ICopIGlmcC0+aWZfZ3VpZCA9PSAweDEwMDAwNzUxMTAwMDAwMFVMTCkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIldhcm5pbmcsIEdVSUQgJWxseCBpcyAiCisJCQkgImRlZmF1bHQsIHByb2JhYmx5IG5vdCBjb3JyZWN0IVxuIiwKKwkJCSAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBpZnAtPmlmX2d1aWQpOworCisJYmd1aWQgPSBpZnAtPmlmX2d1aWQ7CisJaWYgKCFiZ3VpZFswXSAmJiAhYmd1aWRbMV0gJiYgIWJndWlkWzJdKSB7CisJCS8qIG9yaWdpbmFsIGluY29ycmVjdCBHVUlEIGZvcm1hdCBpbiBmbGFzaDsgZml4IGluCisJCSAqIGNvcmUgY29weSwgYnkgc2hpZnRpbmcgdXAgMiBvY3RldHM7IGRvbid0IG5lZWQgdG8KKwkJICogY2hhbmdlIHRvcCBvY3RldCwgc2luY2UgYm90aCBpdCBhbmQgc2hpZnRlZCBhcmUKKwkJICogMC4uICovCisJCWJndWlkWzFdID0gYmd1aWRbM107CisJCWJndWlkWzJdID0gYmd1aWRbNF07CisJCWJndWlkWzNdID0gYmd1aWRbNF0gPSAwOworCQlndWlkID0gKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJPbGQgR1VJRCBmb3JtYXQgaW4gZmxhc2gsIHRvcCAzIHplcm8sICIKKwkJCSAgICJzaGlmdGluZyAyIG9jdGV0c1xuIik7CisJfSBlbHNlCisJCWd1aWQgPSAqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQ7CisJZGQtPmlwYXRoX2d1aWQgPSBndWlkOworCWRkLT5pcGF0aF9uZ3VpZCA9IGlmcC0+aWZfbnVtZ3VpZDsKKwltZW1jcHkoZGQtPmlwYXRoX3NlcmlhbCwgaWZwLT5pZl9zZXJpYWwsCisJICAgICAgIHNpemVvZihpZnAtPmlmX3NlcmlhbCkpOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkluaXR0ZWQgR1VJRCB0byAlbGx4IGZyb20gZWVwcm9tXG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBiZTY0X3RvX2NwdShkZC0+aXBhdGhfZ3VpZCkpOworCitkb25lOgorCXZmcmVlKGJ1Zik7CisKK2JhaWw6OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGEyNjdlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCkBAIC0wLDAgKzEsMTkxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKyNpbmNsdWRlICJpcGF0aF9sYXllci5oIgorCitzdGF0aWMgaW50IGlwYXRoX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIGludCBpcGF0aF9jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgc3NpemVfdCBpcGF0aF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsCisJCQkgICBsb2ZmX3QgKik7CitzdGF0aWMgdW5zaWduZWQgaW50IGlwYXRoX3BvbGwoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOworc3RhdGljIGludCBpcGF0aF9tbWFwKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBhdGhfZmlsZV9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLndyaXRlID0gaXBhdGhfd3JpdGUsCisJLm9wZW4gPSBpcGF0aF9vcGVuLAorCS5yZWxlYXNlID0gaXBhdGhfY2xvc2UsCisJLnBvbGwgPSBpcGF0aF9wb2xsLAorCS5tbWFwID0gaXBhdGhfbW1hcAorfTsKKworc3RhdGljIGludCBpcGF0aF9nZXRfYmFzZV9pbmZvKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsCisJCQkgICAgICAgdm9pZCBfX3VzZXIgKnViYXNlLCBzaXplX3QgdWJhc2Vfc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaXBhdGhfYmFzZV9pbmZvICpraW5mbyA9IE5VTEw7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7CisKKwlpZiAodWJhc2Vfc2l6ZSA8IHNpemVvZigqa2luZm8pKSB7CisJCWlwYXRoX2NkYmcoUFJPQywKKwkJCSAgICJCYXNlIHNpemUgJWx1LCBuZWVkICVsdSAodmVyc2lvbiBtaXNtYXRjaD8pXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpIHViYXNlX3NpemUsCisJCQkgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mKCpraW5mbykpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJa2luZm8gPSBremFsbG9jKHNpemVvZigqa2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoa2luZm8gPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gZGQtPmlwYXRoX2ZfZ2V0X2Jhc2VfaW5mbyhwZCwga2luZm8pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGJhaWw7CisKKwlraW5mby0+c3BpX3Jjdmhkcl9jbnQgPSBkZC0+aXBhdGhfcmN2aGRyY250OworCWtpbmZvLT5zcGlfcmN2aGRyZW50X3NpemUgPSBkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZTsKKwlraW5mby0+c3BpX3RpZGVncmNudCA9IGRkLT5pcGF0aF9yY3ZlZ3JjbnQ7CisJa2luZm8tPnNwaV9yY3ZfZWdyYnVmc2l6ZSA9IGRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplOworCS8qCisJICogaGF2ZSB0byBtbWFwIHdob2xlIHRoaW5nCisJICovCisJa2luZm8tPnNwaV9yY3ZfZWdyYnVmdG90bGVuID0KKwkJcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyAqIHBkLT5wb3J0X3JjdmVncmJ1Zl9zaXplOworCWtpbmZvLT5zcGlfcmN2X2VncnBlcmNodW5rID0gcGQtPnBvcnRfcmN2ZWdyYnVmc19wZXJjaHVuazsKKwlraW5mby0+c3BpX3Jjdl9lZ3JjaHVua3NpemUgPSBraW5mby0+c3BpX3Jjdl9lZ3JidWZ0b3RsZW4gLworCQlwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzOworCWtpbmZvLT5zcGlfdGlkY250ID0gZGQtPmlwYXRoX3JjdnRpZGNudDsKKwkvKgorCSAqIGZvciB0aGlzIHVzZSwgbWF5IGJlIGlwYXRoX2NmZ3BvcnRzIHN1bW1lZCBvdmVyIGFsbCBjaGlwcyB0aGF0CisJICogYXJlIGFyZSBjb25maWd1cmVkIGFuZCBwcmVzZW50CisJICovCisJa2luZm8tPnNwaV9ucG9ydHMgPSBkZC0+aXBhdGhfY2ZncG9ydHM7CisJLyogdW5pdCAoY2hpcC9ib2FyZCkgb3VyIHBvcnQgaXMgb24gKi8KKwlraW5mby0+c3BpX3VuaXQgPSBkZC0+aXBhdGhfdW5pdDsKKwkvKiBmb3Igbm93LCBvbmx5IGEgc2luZ2xlIHBhZ2UgKi8KKwlraW5mby0+c3BpX3RpZF9tYXhzaXplID0gUEFHRV9TSVpFOworCisJLyoKKwkgKiBEb2luZyB0aGlzIHBlciBwb3J0LCBhbmQgYmFzZWQgb24gdGhlIHNraXAgdmFsdWUsIGV0Yy4gIFRoaXMgaGFzCisJICogdG8gYmUgdGhlIGFjdHVhbCBidWZmZXIgc2l6ZSwgc2luY2UgdGhlIHByb3RvY29sIGNvZGUgdHJlYXRzIGl0CisJICogYXMgYW4gYXJyYXkuCisJICoKKwkgKiBUaGVzZSBoYXZlIHRvIGJlIHNldCB0byB1c2VyIGFkZHJlc3NlcyBpbiB0aGUgdXNlciBjb2RlIHZpYSBtbWFwLgorCSAqIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBvbiByZXR1cm4gdG8gdXNlciBjb2RlIGZvciB0aGUgbW1hcCB0YXJnZXQKKwkgKiBhZGRyZXNzZXMgb25seS4gIEZvciAzMiBiaXQsIHNhbWUgNDQgYml0IGFkZHJlc3MgcHJvYmxlbSwgc28gdXNlCisJICogdGhlIHBoeXNpY2FsIGFkZHJlc3MsIG5vdCB2aXJ0dWFsLiAgQmVmb3JlIDIuNi4xMSwgdXNpbmcgdGhlCisJICogcGFnZV9hZGRyZXNzKCkgbWFjcm8gd29ya2VkLCBidXQgaW4gMi42LjExLCBldmVuIHRoYXQgcmV0dXJucyB0aGUKKwkgKiBmdWxsIDY0IGJpdCBhZGRyZXNzICh1cHBlciBiaXRzIGFsbCAxJ3MpLiAgU28gZmFyLCB1c2luZyB0aGUKKwkgKiBwaHlzaWNhbCBhZGRyZXNzZXMgKG9yIGNoaXAgb2Zmc2V0cywgZm9yIGNoaXAgbWFwcGluZykgd29ya3MsIGJ1dAorCSAqIG5vIGRvdWJ0IHNvbWUgZnV0dXJlIGtlcm5lbCByZWxlYXNlIHdpbGwgY2hhbmcgdGhhdCwgYW5kIHdlJ2xsIGJlCisJICogb24gdG8geWV0IGFub3RoZXIgbWV0aG9kIG9mIGRlYWxpbmcgd2l0aCB0aGlzCisJICovCisJa2luZm8tPnNwaV9yY3ZoZHJfYmFzZSA9ICh1NjQpIHBkLT5wb3J0X3JjdmhkcnFfcGh5czsKKwlraW5mby0+c3BpX3Jjdl9lZ3JidWZzID0gKHU2NCkgcGQtPnBvcnRfcmN2ZWdyX3BoeXM7CisJa2luZm8tPnNwaV9waW9hdmFpbGFkZHIgPSAodTY0KSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXM7CisJa2luZm8tPnNwaV9zdGF0dXMgPSAodTY0KSBraW5mby0+c3BpX3Bpb2F2YWlsYWRkciArCisJCSh2b2lkICopIGRkLT5pcGF0aF9zdGF0dXNwIC0KKwkJKHZvaWQgKikgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWE7CisJa2luZm8tPnNwaV9waW9idWZiYXNlID0gKHU2NCkgcGQtPnBvcnRfcGlvYnVmczsKKwlraW5mby0+X19zcGlfdXJlZ2Jhc2UgPQorCQlkZC0+aXBhdGhfdXJlZ2Jhc2UgKyBkZC0+aXBhdGhfcGFsaWduICogcGQtPnBvcnRfcG9ydDsKKworCWtpbmZvLT5zcGlfcGlvaW5kZXggPSBkZC0+aXBhdGhfcGJ1ZnNwb3J0ICogKHBkLT5wb3J0X3BvcnQgLSAxKTsKKwlraW5mby0+c3BpX3Bpb2NudCA9IGRkLT5pcGF0aF9wYnVmc3BvcnQ7CisJa2luZm8tPnNwaV9waW9hbGlnbiA9IGRkLT5pcGF0aF9wYWxpZ247CisKKwlraW5mby0+c3BpX3FwYWlyID0gSVBBVEhfS0RfUVA7CisJa2luZm8tPnNwaV9waW9zaXplID0gZGQtPmlwYXRoX2libWF4bGVuOworCWtpbmZvLT5zcGlfbXR1ID0gZGQtPmlwYXRoX2libWF4bGVuOwkvKiBtYXhsZW4sIG5vdCBpYm10dSAqLworCWtpbmZvLT5zcGlfcG9ydCA9IHBkLT5wb3J0X3BvcnQ7CisJa2luZm8tPnNwaV9zd192ZXJzaW9uID0gSVBBVEhfS0VSTl9TV1ZFUlNJT047CisJa2luZm8tPnNwaV9od192ZXJzaW9uID0gZGQtPmlwYXRoX3JldmlzaW9uOworCisJaWYgKGNvcHlfdG9fdXNlcih1YmFzZSwga2luZm8sIHNpemVvZigqa2luZm8pKSkKKwkJcmV0ID0gLUVGQVVMVDsKKworYmFpbDoKKwlrZnJlZShraW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF90aWRfdXBkYXRlIC0gdXBkYXRlIGEgcG9ydCBUSUQKKyAqIEBwZDogdGhlIHBvcnQKKyAqIEB0aTogdGhlIFRJRCBpbmZvcm1hdGlvbgorICoKKyAqIFRoZSBuZXcgaW1wbGVtZW50YXRpb24gYXMgb2YgT2N0IDIwMDQgaXMgdGhhdCB0aGUgZHJpdmVyIGFzc2lnbnMKKyAqIHRoZSB0aWQgYW5kIHJldHVybnMgaXQgdG8gdGhlIGNhbGxlci4gICBUbyBtYWtlIGl0IGVhc2llciB0bworICogY2F0Y2ggYnVncywgYW5kIHRvIHJlZHVjZSBzZWFyY2ggdGltZSwgd2Uga2VlcCBhIGN1cnNvciBmb3IKKyAqIGVhY2ggcG9ydCwgd2Fsa2luZyB0aGUgc2hhZG93IHRpZCBhcnJheSB0byBmaW5kIG9uZSB0aGF0J3Mgbm90CisgKiBpbiB1c2UuCisgKgorICogRm9yIG5vdywgaWYgd2UgY2FuJ3QgYWxsb2NhdGUgdGhlIGZ1bGwgbGlzdCwgd2UgZmFpbCwgYWx0aG91Z2gKKyAqIGluIHRoZSBsb25nIHJ1biwgd2UnbGwgYWxsb2NhdGUgYXMgbWFueSBhcyB3ZSBjYW4sIGFuZCB0aGUKKyAqIGNhbGxlciB3aWxsIGRlYWwgd2l0aCB0aGF0IGJ5IHRyeWluZyB0aGUgcmVtYWluaW5nIHBhZ2VzIGxhdGVyLgorICogVGhhdCBtZWFucyB0aGF0IHdoZW4gd2UgZmFpbCwgd2UgaGF2ZSB0byBtYXJrIHRoZSB0aWRzIGFzIG5vdCBpbgorICogdXNlIGFnYWluLCBpbiBvdXIgc2hhZG93IGNvcHkuCisgKgorICogSXQncyB1cCB0byB0aGUgY2FsbGVyIHRvIGZyZWUgdGhlIHRpZHMgd2hlbiB0aGV5IGFyZSBkb25lLgorICogV2UnbGwgdW5sb2NrIHRoZSBwYWdlcyBhcyB0aGV5IGZyZWUgdGhlbS4KKyAqCisgKiBBbHNvLCByaWdodCBub3cgd2UgYXJlIGxvY2tpbmcgb25lIHBhZ2UgYXQgYSB0aW1lLCBidXQgc2luY2UKKyAqIHRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyByb3V0aW5lIGlzIGZvciBhIHNpbmdsZSBncm91cCBvZgorICogdmlydHVhbGx5IGNvbnRpZ3VvdXMgcGFnZXMsIHRoYXQgc2hvdWxkIGNoYW5nZSB0byBpbXByb3ZlCisgKiBwZXJmb3JtYW5jZS4KKyAqLworc3RhdGljIGludCBpcGF0aF90aWRfdXBkYXRlKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsCisJCQkgICAgY29uc3Qgc3RydWN0IGlwYXRoX3RpZF9pbmZvICp0aSkKK3sKKwlpbnQgcmV0ID0gMCwgbnRpZHM7CisJdTMyIHRpZCwgcG9ydHRpZCwgY250LCBpLCB0aWRjbnQ7CisJdTE2ICp0aWRsaXN0OworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXU2NCBwaHlzYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCXU2NCBfX2lvbWVtICp0aWRiYXNlOworCXVuc2lnbmVkIGxvbmcgdGlkbWFwWzhdOworCXN0cnVjdCBwYWdlICoqcGFnZXAgPSBOVUxMOworCisJaWYgKCFkZC0+aXBhdGhfcGFnZXNoYWRvdykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJY250ID0gdGktPnRpZGNudDsKKwlpZiAoIWNudCkgeworCQlpcGF0aF9kYmcoIkFmdGVyIGNvcHlpbiwgdGlkY250IDAsIHRpZGxpc3QgJWxseFxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGktPnRpZGxpc3QpOworCQkvKgorCQkgKiBTaG91bGQgd2UgdHJlYXQgYXMgc3VjY2Vzcz8gIGxpa2VseSBhIGJ1ZworCQkgKi8KKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBkb25lOworCX0KKwl0aWRjbnQgPSBkZC0+aXBhdGhfcmN2dGlkY250OworCWlmIChjbnQgPj0gdGlkY250KSB7CisJCS8qIG1ha2Ugc3VyZSBpdCBhbGwgZml0cyBpbiBwb3J0X3RpZF9wZ19saXN0ICovCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJQcm9jZXNzIHRyaWVkIHRvIGFsbG9jYXRlICV1ICIKKwkJCSAiVElEcywgb25seSB0cnlpbmcgbWF4ICgldSlcbiIsIGNudCwgdGlkY250KTsKKwkJY250ID0gdGlkY250OworCX0KKwlwYWdlcCA9IChzdHJ1Y3QgcGFnZSAqKilwZC0+cG9ydF90aWRfcGdfbGlzdDsKKwl0aWRsaXN0ID0gKHUxNiAqKSAoJnBhZ2VwW2NudF0pOworCisJbWVtc2V0KHRpZG1hcCwgMCwgc2l6ZW9mKHRpZG1hcCkpOworCXRpZCA9IHBkLT5wb3J0X3RpZGN1cnNvcjsKKwkvKiBiZWZvcmUgZGVjcmVtZW50OyBjaGlwIGFjdHVhbCAjICovCisJcG9ydHRpZCA9IHBkLT5wb3J0X3BvcnQgKiB0aWRjbnQ7CisJbnRpZHMgPSB0aWRjbnQ7CisJdGlkYmFzZSA9ICh1NjQgX19pb21lbSAqKSAoKChjaGFyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlKSArCisJCQkJICAgZGQtPmlwYXRoX3JjdnRpZGJhc2UgKworCQkJCSAgIHBvcnR0aWQgKiBzaXplb2YoKnRpZGJhc2UpKTsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlBvcnQldSAldSB0aWRzLCBjdXJzb3IgJXUsIHRpZGJhc2UgJXBcbiIsCisJCSAgIHBkLT5wb3J0X3BvcnQsIGNudCwgdGlkLCB0aWRiYXNlKTsKKworCS8qIHZpcnR1YWwgYWRkcmVzcyBvZiBmaXJzdCBwYWdlIGluIHRyYW5zZmVyICovCisJdmFkZHIgPSB0aS0+dGlkdmFkZHI7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAodm9pZCBfX3VzZXIgKikgdmFkZHIsCisJCSAgICAgICBjbnQgKiBQQUdFX1NJWkUpKSB7CisJCWlwYXRoX2RiZygiRmFpbCB2YWRkciAlcCwgJXUgcGFnZXMsICFhY2Nlc3Nfb2tcbiIsCisJCQkgICh2b2lkICopdmFkZHIsIGNudCk7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZG9uZTsKKwl9CisJcmV0ID0gaXBhdGhfZ2V0X3VzZXJfcGFnZXModmFkZHIsIGNudCwgcGFnZXApOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCA9PSAtRUJVU1kpIHsKKwkJCWlwYXRoX2RiZygiRmFpbGVkIHRvIGxvY2sgYWRkciAlcCwgJXUgcGFnZXMgIgorCQkJCSAgIihhbHJlYWR5IGxvY2tlZClcbiIsCisJCQkJICAodm9pZCAqKSB2YWRkciwgY250KTsKKwkJCS8qCisJCQkgKiBmb3Igbm93LCBjb250aW51ZSwgYW5kIHNlZSB3aGF0IGhhcHBlbnMgYnV0IHdpdGgKKwkJCSAqIHRoZSBuZXcgaW1wbGVtZW50YXRpb24sIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwKKwkJCSAqIHVubGVzcyBwZXJoYXBzIHRoZSB1c2VyIGhhcyBtcGluJ2VkIHRoZSBwYWdlcworCQkJICogdGhlbXNlbHZlcyAoc29tZXRoaW5nIHdlIG5lZWQgdG8gdGVzdCkKKwkJCSAqLworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJICJGYWlsZWQgdG8gbG9jayBhZGRyICVwLCAldSBwYWdlczogIgorCQkJCSAiZXJybm8gJWRcbiIsICh2b2lkICopIHZhZGRyLCBjbnQsIC1yZXQpOworCQkJZ290byBkb25lOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgdmFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCWZvciAoOyBudGlkcy0tOyB0aWQrKykgeworCQkJaWYgKHRpZCA9PSB0aWRjbnQpCisJCQkJdGlkID0gMDsKKwkJCWlmICghZGQtPmlwYXRoX3BhZ2VzaGFkb3dbcG9ydHRpZCArIHRpZF0pCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKG50aWRzIDwgMCkgeworCQkJLyoKKwkJCSAqIG9vcHMsIHdyYXBwZWQgYWxsIHRoZSB3YXkgdGhyb3VnaCB0aGVpciBUSURzLAorCQkJICogYW5kIGRpZG4ndCBoYXZlIGVub3VnaCBmcmVlOyBzZWUgY29tbWVudHMgYXQKKwkJCSAqIHN0YXJ0IG9mIHJvdXRpbmUKKwkJCSAqLworCQkJaXBhdGhfZGJnKCJOb3QgZW5vdWdoIGZyZWUgVElEcyBmb3IgJXUgcGFnZXMgIgorCQkJCSAgIihpbmRleCAlZCksIGZhaWxpbmdcbiIsIGNudCwgaSk7CisJCQlpLS07CS8qIGxhc3QgdGlkbGlzdFtpXSBub3QgZmlsbGVkIGluICovCisJCQlyZXQgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJdGlkbGlzdFtpXSA9IHRpZDsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVXBkYXRpbmcgaWR4ICV1IHRvIFRJRCAldSwgIgorCQkJICAgInZhZGRyICVseFxuIiwgaSwgdGlkLCB2YWRkcik7CisJCS8qIHdlICJrbm93IiBzeXN0ZW0gcGFnZXMgYW5kIFRJRCBwYWdlcyBhcmUgc2FtZSBzaXplICovCisJCWRkLT5pcGF0aF9wYWdlc2hhZG93W3BvcnR0aWQgKyB0aWRdID0gcGFnZXBbaV07CisJCS8qCisJCSAqIGRvbid0IG5lZWQgYXRvbWljIG9yIGl0J3Mgb3ZlcmhlYWQKKwkJICovCisJCV9fc2V0X2JpdCh0aWQsIHRpZG1hcCk7CisJCXBoeXNhZGRyID0gcGFnZV90b19waHlzKHBhZ2VwW2ldKTsKKwkJaXBhdGhfc3RhdHMuc3BzX3BhZ2Vsb2NrcysrOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsCisJCQkgICAiVElEICV1LCB2YWRkciAlbHgsIHBoeXNhZGRyICVsbHggcGdwICVwXG4iLAorCQkJICAgdGlkLCB2YWRkciwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGh5c2FkZHIsCisJCQkgICBwYWdlcFtpXSk7CisJCWRkLT5pcGF0aF9mX3B1dF90aWQoZGQsICZ0aWRiYXNlW3RpZF0sIDEsIHBoeXNhZGRyKTsKKwkJLyoKKwkJICogZG9uJ3QgY2hlY2sgdGhpcyB0aWQgaW4gaXBhdGhfcG9ydHNoYWRvdywgc2luY2Ugd2UKKwkJICoganVzdCBmaWxsZWQgaXQgaW47IHN0YXJ0IHdpdGggdGhlIG5leHQgb25lLgorCQkgKi8KKwkJdGlkKys7CisJfQorCisJaWYgKHJldCkgeworCQl1MzIgbGltaXQ7CisJY2xlYW51cDoKKwkJLyoganVtcCBoZXJlIGlmIGNvcHkgb3V0IG9mIHVwZGF0ZWQgaW5mbyBmYWlsZWQuLi4gKi8KKwkJaXBhdGhfZGJnKCJBZnRlciBmYWlsdXJlIChyZXQ9JWQpLCB1bmRvICVkIG9mICVkIGVudHJpZXNcbiIsCisJCQkgIC1yZXQsIGksIGNudCk7CisJCS8qIHNhbWUgY29kZSB0aGF0J3MgaW4gaXBhdGhfZnJlZV90aWQoKSAqLworCQlsaW1pdCA9IHNpemVvZih0aWRtYXApICogQklUU19QRVJfQllURTsKKwkJaWYgKGxpbWl0ID4gdGlkY250KQorCQkJLyoganVzdCBpbiBjYXNlIHNpemUgY2hhbmdlcyBpbiBmdXR1cmUgKi8KKwkJCWxpbWl0ID0gdGlkY250OworCQl0aWQgPSBmaW5kX2ZpcnN0X2JpdCgoY29uc3QgdW5zaWduZWQgbG9uZyAqKXRpZG1hcCwgbGltaXQpOworCQlmb3IgKDsgdGlkIDwgbGltaXQ7IHRpZCsrKSB7CisJCQlpZiAoIXRlc3RfYml0KHRpZCwgdGlkbWFwKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChkZC0+aXBhdGhfcGFnZXNoYWRvd1twb3J0dGlkICsgdGlkXSkgeworCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkZyZWVpbmcgVElEICV1XG4iLAorCQkJCQkgICB0aWQpOworCQkJCWRkLT5pcGF0aF9mX3B1dF90aWQoZGQsICZ0aWRiYXNlW3RpZF0sIDEsCisJCQkJCQkgICAgZGQtPmlwYXRoX3RpZGludmFsaWQpOworCQkJCWRkLT5pcGF0aF9wYWdlc2hhZG93W3BvcnR0aWQgKyB0aWRdID0gTlVMTDsKKwkJCQlpcGF0aF9zdGF0cy5zcHNfcGFnZXVubG9ja3MrKzsKKwkJCX0KKwkJfQorCQlpcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMocGFnZXAsIGNudCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ29weSB0aGUgdXBkYXRlZCBhcnJheSwgd2l0aCBpcGF0aF90aWQncyBmaWxsZWQgaW4sIGJhY2sKKwkJICogdG8gdXNlci4gIFNpbmNlIHdlIGRpZCB0aGUgY29weSBpbiBhbHJlYWR5LCB0aGlzICJzaG91bGQKKwkJICogbmV2ZXIgZmFpbCIgSWYgaXQgZG9lcywgd2UgaGF2ZSB0byBjbGVhbiB1cC4uLgorCQkgKi8KKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikKKwkJCQkgKHVuc2lnbmVkIGxvbmcpIHRpLT50aWRsaXN0LAorCQkJCSB0aWRsaXN0LCBjbnQgKiBzaXplb2YoKnRpZGxpc3QpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgdGktPnRpZG1hcCwKKwkJCQkgdGlkbWFwLCBzaXplb2YgdGlkbWFwKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAodGlkID09IHRpZGNudCkKKwkJCXRpZCA9IDA7CisJCXBkLT5wb3J0X3RpZGN1cnNvciA9IHRpZDsKKwl9CisKK2RvbmU6CisJaWYgKHJldCkKKwkJaXBhdGhfZGJnKCJGYWlsZWQgdG8gbWFwICV1IFRJRCBwYWdlcywgZmFpbGluZyB3aXRoICVkXG4iLAorCQkJICB0aS0+dGlkY250LCAtcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3RpZF9mcmVlIC0gZnJlZSBhIHBvcnQgVElECisgKiBAcGQ6IHRoZSBwb3J0CisgKiBAdGk6IHRoZSBUSUQgaW5mbworICoKKyAqIHJpZ2h0IG5vdyB3ZSBhcmUgdW5sb2NraW5nIG9uZSBwYWdlIGF0IGEgdGltZSwgYnV0IHNpbmNlCisgKiB0aGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgcm91dGluZSBpcyBmb3IgYSBzaW5nbGUgZ3JvdXAgb2YKKyAqIHZpcnR1YWxseSBjb250aWd1b3VzIHBhZ2VzLCB0aGF0IHNob3VsZCBjaGFuZ2UgdG8gaW1wcm92ZQorICogcGVyZm9ybWFuY2UuICBXZSBjaGVjayB0aGF0IHRoZSBUSUQgaXMgaW4gcmFuZ2UgZm9yIHRoaXMgcG9ydAorICogYnV0IG90aGVyd2lzZSBkb24ndCBjaGVjayB2YWxpZGl0eTsgaWYgdXNlciBoYXMgYW4gZXJyb3IgYW5kCisgKiBmcmVlcyB0aGUgd3JvbmcgdGlkLCBpdCdzIG9ubHkgdGhlaXIgb3duIGRhdGEgdGhhdCBjYW4gdGhlcmVieQorICogYmUgY29ycnVwdGVkLiAgV2UgZG8gY2hlY2sgdGhhdCB0aGUgVElEIHdhcyBpbiB1c2UsIGZvciBzYW5pdHkKKyAqIFdlIGFsd2F5cyB1c2Ugb3VyIGlkZWEgb2YgdGhlIHNhdmVkIGFkZHJlc3MsIG5vdCB0aGUgYWRkcmVzcyB0aGF0CisgKiB0aGV5IHBhc3MgaW4gdG8gdXMuCisgKi8KKworc3RhdGljIGludCBpcGF0aF90aWRfZnJlZShzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLAorCQkJICBjb25zdCBzdHJ1Y3QgaXBhdGhfdGlkX2luZm8gKnRpKQoreworCWludCByZXQgPSAwOworCXUzMiB0aWQsIHBvcnR0aWQsIGNudCwgbGltaXQsIHRpZGNudDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwl1NjQgX19pb21lbSAqdGlkYmFzZTsKKwl1bnNpZ25lZCBsb25nIHRpZG1hcFs4XTsKKworCWlmICghZGQtPmlwYXRoX3BhZ2VzaGFkb3cpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcih0aWRtYXAsICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXRpLT50aWRtYXAsCisJCQkgICBzaXplb2YgdGlkbWFwKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGRvbmU7CisJfQorCisJcG9ydHRpZCA9IHBkLT5wb3J0X3BvcnQgKiBkZC0+aXBhdGhfcmN2dGlkY250OworCXRpZGJhc2UgPSAodTY0IF9faW9tZW0gKikgKChjaGFyIF9faW9tZW0gKikoZGQtPmlwYXRoX2tyZWdiYXNlKSArCisJCQkJICAgZGQtPmlwYXRoX3JjdnRpZGJhc2UgKworCQkJCSAgIHBvcnR0aWQgKiBzaXplb2YoKnRpZGJhc2UpKTsKKworCXRpZGNudCA9IGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisJbGltaXQgPSBzaXplb2YodGlkbWFwKSAqIEJJVFNfUEVSX0JZVEU7CisJaWYgKGxpbWl0ID4gdGlkY250KQorCQkvKiBqdXN0IGluIGNhc2Ugc2l6ZSBjaGFuZ2VzIGluIGZ1dHVyZSAqLworCQlsaW1pdCA9IHRpZGNudDsKKwl0aWQgPSBmaW5kX2ZpcnN0X2JpdCh0aWRtYXAsIGxpbWl0KTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJQb3J0JXUgZnJlZSAldSB0aWRzOyBmaXJzdCBiaXQgKG1heD0lZCkgIgorCQkgICAic2V0IGlzICVkLCBwb3J0dGlkICV1XG4iLCBwZC0+cG9ydF9wb3J0LCB0aS0+dGlkY250LAorCQkgICBsaW1pdCwgdGlkLCBwb3J0dGlkKTsKKwlmb3IgKGNudCA9IDA7IHRpZCA8IGxpbWl0OyB0aWQrKykgeworCQkvKgorCQkgKiBzbWFsbCBvcHRpbWl6YXRpb247IGlmIHdlIGRldGVjdCBhIHJ1biBvZiAzIG9yIHNvIHdpdGhvdXQKKwkJICogYW55IHNldCwgdXNlIGZpbmRfZmlyc3RfYml0IGFnYWluLiAgVGhhdCdzIG1haW5seSB0bworCQkgKiBhY2NlbGVyYXRlIHRoZSBjYXNlIHdoZXJlIHdlIHdyYXBwZWQsIHNvIHdlIGhhdmUgc29tZSBhdAorCQkgKiB0aGUgYmVnaW5uaW5nLCBhbmQgc29tZSBhdCB0aGUgZW5kLCBhbmQgYSBiaWcgZ2FwCisJCSAqIGluIHRoZSBtaWRkbGUuCisJCSAqLworCQlpZiAoIXRlc3RfYml0KHRpZCwgdGlkbWFwKSkKKwkJCWNvbnRpbnVlOworCQljbnQrKzsKKwkJaWYgKGRkLT5pcGF0aF9wYWdlc2hhZG93W3BvcnR0aWQgKyB0aWRdKSB7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJQSUQgJXUgZnJlZWluZyBUSUQgJXVcbiIsCisJCQkJICAgcGQtPnBvcnRfcGlkLCB0aWQpOworCQkJZGQtPmlwYXRoX2ZfcHV0X3RpZChkZCwgJnRpZGJhc2VbdGlkXSwgMSwKKwkJCQkJICAgIGRkLT5pcGF0aF90aWRpbnZhbGlkKTsKKwkJCWlwYXRoX3JlbGVhc2VfdXNlcl9wYWdlcygKKwkJCQkmZGQtPmlwYXRoX3BhZ2VzaGFkb3dbcG9ydHRpZCArIHRpZF0sIDEpOworCQkJZGQtPmlwYXRoX3BhZ2VzaGFkb3dbcG9ydHRpZCArIHRpZF0gPSBOVUxMOworCQkJaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKys7CisJCX0gZWxzZQorCQkJaXBhdGhfZGJnKCJVbnVzZWQgdGlkICV1LCBpZ25vcmluZ1xuIiwgdGlkKTsKKwl9CisJaWYgKGNudCAhPSB0aS0+dGlkY250KQorCQlpcGF0aF9kYmcoInBhc3NlZCBpbiB0aWRjbnQgJWQsIG9ubHkgJWQgYml0cyBzZXQgaW4gbWFwXG4iLAorCQkJICB0aS0+dGlkY250LCBjbnQpOworZG9uZToKKwlpZiAocmV0KQorCQlpcGF0aF9kYmcoIkZhaWxlZCB0byB1bm1hcCAldSBUSUQgcGFnZXMsIGZhaWxpbmcgd2l0aCAlZFxuIiwKKwkJCSAgdGktPnRpZGNudCwgLXJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9zZXRfcGFydF9rZXkgLSBzZXQgYSBwYXJ0aXRpb24ga2V5CisgKiBAcGQ6IHRoZSBwb3J0CisgKiBAa2V5OiB0aGUga2V5CisgKgorICogV2UgY2FuIGhhdmUgdXAgdG8gNCBhY3RpdmUgYXQgYSB0aW1lIChvdGhlciB0aGFuIHRoZSBkZWZhdWx0LCB3aGljaCBpcworICogYWx3YXlzIGFsbG93ZWQpLiAgVGhpcyBpcyBzb21ld2hhdCB0cmlja3ksIHNpbmNlIG11bHRpcGxlIHBvcnRzIG1heSBzZXQKKyAqIHRoZSBzYW1lIGtleSwgc28gd2UgcmVmZXJlbmNlIGNvdW50IHRoZW0sIGFuZCBjbGVhbiB1cCBhdCBleGl0LiAgQWxsIDQKKyAqIHBhcnRpdGlvbiBrZXlzIGFyZSBwYWNrZWQgaW50byBhIHNpbmdsZSBpbmZpbmlwYXRoIHJlZ2lzdGVyLiAgSXQncyBhbgorICogZXJyb3IgZm9yIGEgcHJvY2VzcyB0byBzZXQgdGhlIHNhbWUgcGtleSBtdWx0aXBsZSB0aW1lcy4gIFdlIHByb3ZpZGUgbm8KKyAqIG1lY2hhbmlzbSB0byBkZS1hbGxvY2F0ZSBhIHBrZXkgYXQgdGhpcyB0aW1lLCB3ZSBtYXkgZXZlbnR1YWxseSBuZWVkIHRvCisgKiBkbyB0aGF0LiAgSSd2ZSB1c2VkIHRoZSBhdG9taWMgb3BlcmF0aW9ucywgYW5kIG5vIGxvY2tpbmcsIGFuZCBvbmx5IG1ha2UKKyAqIGEgc2luZ2xlIHBhc3MgdGhyb3VnaCB3aGF0J3MgYXZhaWxhYmxlLiAgVGhpcyBzaG91bGQgYmUgbW9yZSB0aGFuCisgKiBhZGVxdWF0ZSBmb3Igc29tZSB0aW1lLiBJJ2xsIHRoaW5rIGFib3V0IHNwaW5sb2NrcyBvciB0aGUgbGlrZSBpZiBhbmQgYXMKKyAqIGl0J3MgbmVjZXNzYXJ5LgorICovCitzdGF0aWMgaW50IGlwYXRoX3NldF9wYXJ0X2tleShzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLCB1MTYga2V5KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCWludCBpLCBhbnkgPSAwLCBwaWR4ID0gLTE7CisJdTE2IGxrZXkgPSBrZXkgJiAweDdGRkY7CisJaW50IHJldDsKKworCWlmIChsa2V5ID09IChJUFNfREVGQVVMVF9QX0tFWSAmIDB4N0ZGRikpIHsKKwkJLyogbm90aGluZyB0byBkbzsgdGhpcyBrZXkgYWx3YXlzIHZhbGlkICovCisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJwJXUgdHJ5IHRvIHNldCBwa2V5ICVoeCwgY3VycmVudCBrZXlzICIKKwkJICAgIiVoeDoleCAlaHg6JXggJWh4OiV4ICVoeDoleFxuIiwKKwkJICAgcGQtPnBvcnRfcG9ydCwga2V5LCBkZC0+aXBhdGhfcGtleXNbMF0sCisJCSAgIGF0b21pY19yZWFkKCZkZC0+aXBhdGhfcGtleXJlZnNbMF0pLCBkZC0+aXBhdGhfcGtleXNbMV0sCisJCSAgIGF0b21pY19yZWFkKCZkZC0+aXBhdGhfcGtleXJlZnNbMV0pLCBkZC0+aXBhdGhfcGtleXNbMl0sCisJCSAgIGF0b21pY19yZWFkKCZkZC0+aXBhdGhfcGtleXJlZnNbMl0pLCBkZC0+aXBhdGhfcGtleXNbM10sCisJCSAgIGF0b21pY19yZWFkKCZkZC0+aXBhdGhfcGtleXJlZnNbM10pKTsKKworCWlmICghbGtleSkgeworCQlpcGF0aF9jZGJnKFBST0MsICJwJXUgdHJpZXMgdG8gc2V0IGtleSAwLCBub3QgYWxsb3dlZFxuIiwKKwkJCSAgIHBkLT5wb3J0X3BvcnQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJLyoKKwkgKiBTZXQgdGhlIGZ1bGwgbWVtYmVyc2hpcCBiaXQsIGJlY2F1c2UgaXQgaGFzIHRvIGJlCisJICogc2V0IGluIHRoZSByZWdpc3RlciBvciB0aGUgcGFja2V0LCBhbmQgaXQgc2VlbXMKKwkgKiBjbGVhbmVyIHRvIHNldCBpbiB0aGUgcmVnaXN0ZXIgdGhhbiB0byBmb3JjZSBhbGwKKwkgKiBjYWxsZXJzIHRvIHNldCBpdC4gKHNlZSBidWcgNDMzMSkKKwkgKi8KKwlrZXkgfD0gMHg4MDAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGQtPnBvcnRfcGtleXMpOyBpKyspIHsKKwkJaWYgKCFwZC0+cG9ydF9wa2V5c1tpXSAmJiBwaWR4ID09IC0xKQorCQkJcGlkeCA9IGk7CisJCWlmIChwZC0+cG9ydF9wa2V5c1tpXSA9PSBrZXkpIHsKKwkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInAldSB0cmllcyB0byBzZXQgc2FtZSBwa2V5ICIKKwkJCQkgICAiKCV4KSBtb3JlIHRoYW4gb25jZVxuIiwKKwkJCQkgICBwZC0+cG9ydF9wb3J0LCBrZXkpOworCQkJcmV0ID0gLUVFWElTVDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlpZiAocGlkeCA9PSAtMSkgeworCQlpcGF0aF9kYmcoIkFsbCBwa2V5cyBmb3IgcG9ydCAldSBhbHJlYWR5IGluIHVzZSwgIgorCQkJICAiY2FuJ3Qgc2V0ICV4XG4iLCBwZC0+cG9ydF9wb3J0LCBrZXkpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gYmFpbDsKKwl9CisJZm9yIChhbnkgPSBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGQtPmlwYXRoX3BrZXlzKTsgaSsrKSB7CisJCWlmICghZGQtPmlwYXRoX3BrZXlzW2ldKSB7CisJCQlhbnkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChkZC0+aXBhdGhfcGtleXNbaV0gPT0ga2V5KSB7CisJCQlhdG9taWNfdCAqcGtyZWZzID0gJmRkLT5pcGF0aF9wa2V5cmVmc1tpXTsKKworCQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKHBrcmVmcykgPiAxKSB7CisJCQkJcGQtPnBvcnRfcGtleXNbcGlkeF0gPSBrZXk7CisJCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAicCV1IHNldCBrZXkgJXggIgorCQkJCQkgICAibWF0Y2hlcyAjJWQsIGNvdW50IG5vdyAlZFxuIiwKKwkJCQkJICAgcGQtPnBvcnRfcG9ydCwga2V5LCBpLAorCQkJCQkgICBhdG9taWNfcmVhZChwa3JlZnMpKTsKKwkJCQlyZXQgPSAwOworCQkJCWdvdG8gYmFpbDsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBsb3N0IHJhY2UsIGRlY3JlbWVudCBjb3VudCwgY2F0Y2ggYmVsb3cKKwkJCQkgKi8KKwkJCQlhdG9taWNfZGVjKHBrcmVmcyk7CisJCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiTG9zdCByYWNlLCBjb3VudCB3YXMgIgorCQkJCQkgICAiMCwgYWZ0ZXIgZGVjLCBpdCdzICVkXG4iLAorCQkJCQkgICBhdG9taWNfcmVhZChwa3JlZnMpKTsKKwkJCQlhbnkrKzsKKwkJCX0KKwkJfQorCQlpZiAoKGRkLT5pcGF0aF9wa2V5c1tpXSAmIDB4N0ZGRikgPT0gbGtleSkgeworCQkJLyoKKwkJCSAqIEl0IG1ha2VzIG5vIHNlbnNlIHRvIGhhdmUgYm90aCB0aGUgbGltaXRlZCBhbmQKKwkJCSAqIGZ1bGwgbWVtYmVyc2hpcCBQS0VZIHNldCBhdCB0aGUgc2FtZSB0aW1lIHNpbmNlCisJCQkgKiB0aGUgdW5saW1pdGVkIG9uZSB3aWxsIGRpc2FibGUgdGhlIGxpbWl0ZWQgb25lLgorCQkJICovCisJCQlyZXQgPSAtRUVYSVNUOworCQkJZ290byBiYWlsOworCQl9CisJfQorCWlmICghYW55KSB7CisJCWlwYXRoX2RiZygicG9ydCAldSwgYWxsIHBrZXlzIGFscmVhZHkgaW4gdXNlLCAiCisJCQkgICJjYW4ndCBzZXQgJXhcbiIsIHBkLT5wb3J0X3BvcnQsIGtleSk7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBiYWlsOworCX0KKwlmb3IgKGFueSA9IGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZC0+aXBhdGhfcGtleXMpOyBpKyspIHsKKwkJaWYgKCFkZC0+aXBhdGhfcGtleXNbaV0gJiYKKwkJICAgIGF0b21pY19pbmNfcmV0dXJuKCZkZC0+aXBhdGhfcGtleXJlZnNbaV0pID09IDEpIHsKKwkJCXU2NCBwa2V5OworCisJCQkvKiBmb3IgaXBhdGhzdGF0cywgZXRjLiAqLworCQkJaXBhdGhfc3RhdHMuc3BzX3BrZXlzW2ldID0gbGtleTsKKwkJCXBkLT5wb3J0X3BrZXlzW3BpZHhdID0gZGQtPmlwYXRoX3BrZXlzW2ldID0ga2V5OworCQkJcGtleSA9CisJCQkJKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzBdIHwKKwkJCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzFdIDw8IDE2KSB8CisJCQkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1syXSA8PCAzMikgfAorCQkJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbM10gPDwgNDgpOworCQkJaXBhdGhfY2RiZyhQUk9DLCAicCV1IHNldCBrZXkgJXggaW4gIyVkLCAiCisJCQkJICAgInBvcnRpZHggJWQsIG5ldyBwa2V5IHJlZyAlbGx4XG4iLAorCQkJCSAgIHBkLT5wb3J0X3BvcnQsIGtleSwgaSwgcGlkeCwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwa2V5KTsKKwkJCWlwYXRoX3dyaXRlX2tyZWcoCisJCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcGFydGl0aW9ua2V5LCBwa2V5KTsKKworCQkJcmV0ID0gMDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlpcGF0aF9kYmcoInBvcnQgJXUsIGFsbCBwa2V5cyBhbHJlYWR5IGluIHVzZSAybmQgcGFzcywgIgorCQkgICJjYW4ndCBzZXQgJXhcbiIsIHBkLT5wb3J0X3BvcnQsIGtleSk7CisJcmV0ID0gLUVCVVNZOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfbWFuYWdlX3JjdnEgLSBtYW5hZ2UgYSBwb3J0J3MgcmVjZWl2ZSBxdWV1ZQorICogQHBkOiB0aGUgcG9ydAorICogQHN0YXJ0X3N0b3A6IGFjdGlvbiB0byBjYXJyeSBvdXQKKyAqCisgKiBzdGFydF9zdG9wID09IDAgZGlzYWJsZXMgcmVjZWl2ZSBvbiB0aGUgcG9ydCwgZm9yIHVzZSBpbiBxdWV1ZQorICogb3ZlcmZsb3cgY29uZGl0aW9ucy4gIHN0YXJ0X3N0b3A9PTEgcmUtZW5hYmxlcywgdG8gYmUgdXNlZCB0bworICogcmUtaW5pdCB0aGUgc29mdHdhcmUgY29weSBvZiB0aGUgaGVhZCByZWdpc3RlcgorICovCitzdGF0aWMgaW50IGlwYXRoX21hbmFnZV9yY3ZxKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIGludCBzdGFydF9zdG9wKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXU2NCB0dmFsOworCisJaXBhdGhfY2RiZyhQUk9DLCAiJXNhYmxpbmcgcmN2IGZvciB1bml0ICV1IHBvcnQgJXVcbiIsCisJCSAgIHN0YXJ0X3N0b3AgPyAiZW4iIDogImRpcyIsIGRkLT5pcGF0aF91bml0LAorCQkgICBwZC0+cG9ydF9wb3J0KTsKKwkvKiBhdG9taWNhbGx5IGNsZWFyIHJlY2VpdmUgZW5hYmxlIHBvcnQuICovCisJaWYgKHN0YXJ0X3N0b3ApIHsKKwkJLyoKKwkJICogT24gZW5hYmxlLCBmb3JjZSBpbi1tZW1vcnkgY29weSBvZiB0aGUgdGFpbCByZWdpc3RlciB0bworCQkgKiAwLCBzbyB0aGF0IHByb3RvY29sIGNvZGUgZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0CisJCSAqIHdoZXRoZXIgb3Igbm90IHRoZSBjaGlwIGhhcyB5ZXQgdXBkYXRlZCB0aGUgaW4tbWVtb3J5CisJCSAqIGNvcHkgb3Igbm90IG9uIHJldHVybiBmcm9tIHRoZSBzeXN0ZW0gY2FsbC4gVGhlIGNoaXAKKwkJICogYWx3YXlzIHJlc2V0cyBpdCdzIHRhaWwgcmVnaXN0ZXIgYmFjayB0byAwIG9uIGEKKwkJICogdHJhbnNpdGlvbiBmcm9tIGRpc2FibGVkIHRvIGVuYWJsZWQuICBUaGlzIGNvdWxkIGNhdXNlIGEKKwkJICogcHJvYmxlbSBpZiBzb2Z0d2FyZSB3YXMgYnJva2VuLCBhbmQgZGlkIHRoZSBlbmFibGUgdy9vCisJCSAqIHRoZSBkaXNhYmxlLCBidXQgZXZlbnR1YWxseSB0aGUgaW4tbWVtb3J5IGNvcHkgd2lsbCBiZQorCQkgKiB1cGRhdGVkIGFuZCBjb3JyZWN0IGl0c2VsZiwgZXZlbiBpbiB0aGUgZmFjZSBvZiBzb2Z0d2FyZQorCQkgKiBidWdzLgorCQkgKi8KKwkJKnBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyID0gMDsKKwkJc2V0X2JpdChJTkZJTklQQVRIX1JfUE9SVEVOQUJMRV9TSElGVCArIHBkLT5wb3J0X3BvcnQsCisJCQkmZGQtPmlwYXRoX3JjdmN0cmwpOworCX0gZWxzZQorCQljbGVhcl9iaXQoSU5GSU5JUEFUSF9SX1BPUlRFTkFCTEVfU0hJRlQgKyBwZC0+cG9ydF9wb3J0LAorCQkJICAmZGQtPmlwYXRoX3JjdmN0cmwpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CisJLyogbm93IGJlIHN1cmUgY2hpcCBzYXcgaXQgYmVmb3JlIHdlIHJldHVybiAqLworCXR2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwlpZiAoc3RhcnRfc3RvcCkgeworCQkvKgorCQkgKiBBbmQgdHJ5IHRvIGJlIHN1cmUgdGhhdCB0YWlsIHJlZyB1cGRhdGUgaGFzIGhhcHBlbmVkIHRvby4KKwkJICogVGhpcyBzaG91bGQgaW4gdGhlb3J5IGludGVybG9jayB3aXRoIHRoZSBSWEUgY2hhbmdlcyB0bworCQkgKiB0aGUgdGFpbCByZWdpc3Rlci4gIERvbid0IGFzc2lnbiBpdCB0byB0aGUgdGFpbCByZWdpc3RlcgorCQkgKiBpbiBtZW1vcnkgY29weSwgc2luY2Ugd2UgY291bGQgb3ZlcndyaXRlIGFuIHVwZGF0ZSBieSB0aGUKKwkJICogY2hpcCBpZiB3ZSBkaWQuCisJCSAqLworCQl0dmFsID0gaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmhkcnRhaWwsIHBkLT5wb3J0X3BvcnQpOworCX0KKwkvKiBhbHdheXM7IG5ldyBoZWFkIHNob3VsZCBiZSBlcXVhbCB0byBuZXcgdGFpbDsgc2VlIGFib3ZlICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX2NsZWFuX3BhcnRfa2V5KHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsCisJCQkJIHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgaSwgaiwgcGNoYW5nZWQgPSAwOworCXU2NCBvbGRwa2V5OworCisJLyogZm9yIGRlYnVnZ2luZyBvbmx5ICovCisJb2xkcGtleSA9ICh1NjQpIGRkLT5pcGF0aF9wa2V5c1swXSB8CisJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbMV0gPDwgMTYpIHwKKwkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1syXSA8PCAzMikgfAorCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzNdIDw8IDQ4KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkLT5wb3J0X3BrZXlzKTsgaSsrKSB7CisJCWlmICghcGQtPnBvcnRfcGtleXNbaV0pCisJCQljb250aW51ZTsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAibG9vayBmb3Iga2V5WyVkXSAlaHggaW4gcGtleXNcbiIsIGksCisJCQkgICBwZC0+cG9ydF9wa2V5c1tpXSk7CisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wa2V5cyk7IGorKykgeworCQkJLyogY2hlY2sgZm9yIG1hdGNoIGluZGVwZW5kZW50IG9mIHRoZSBnbG9iYWwgYml0ICovCisJCQlpZiAoKGRkLT5pcGF0aF9wa2V5c1tqXSAmIDB4N2ZmZikgIT0KKwkJCSAgICAocGQtPnBvcnRfcGtleXNbaV0gJiAweDdmZmYpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRkLT5pcGF0aF9wa2V5cmVmc1tqXSkpIHsKKwkJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJwJXUgY2xlYXIga2V5ICIKKwkJCQkJICAgIiV4IG1hdGNoZXMgIyVkXG4iLAorCQkJCQkgICBwZC0+cG9ydF9wb3J0LAorCQkJCQkgICBwZC0+cG9ydF9wa2V5c1tpXSwgaik7CisJCQkJaXBhdGhfc3RhdHMuc3BzX3BrZXlzW2pdID0KKwkJCQkJZGQtPmlwYXRoX3BrZXlzW2pdID0gMDsKKwkJCQlwY2hhbmdlZCsrOworCQkJfQorCQkJZWxzZSBpcGF0aF9jZGJnKAorCQkJCVZFUkJPU0UsICJwJXUga2V5ICV4IG1hdGNoZXMgIyVkLCAiCisJCQkJImJ1dCByZWYgc3RpbGwgJWRcbiIsIHBkLT5wb3J0X3BvcnQsCisJCQkJcGQtPnBvcnRfcGtleXNbaV0sIGosCisJCQkJYXRvbWljX3JlYWQoJmRkLT5pcGF0aF9wa2V5cmVmc1tqXSkpOworCQkJYnJlYWs7CisJCX0KKwkJcGQtPnBvcnRfcGtleXNbaV0gPSAwOworCX0KKwlpZiAocGNoYW5nZWQpIHsKKwkJdTY0IHBrZXkgPSAodTY0KSBkZC0+aXBhdGhfcGtleXNbMF0gfAorCQkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1sxXSA8PCAxNikgfAorCQkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1syXSA8PCAzMikgfAorCQkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1szXSA8PCA0OCk7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInAldSBvbGQgcGtleSByZWcgJWxseCwgIgorCQkJICAgIm5ldyBwa2V5IHJlZyAlbGx4XG4iLCBwZC0+cG9ydF9wb3J0LAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2xkcGtleSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrZXkpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3BhcnRpdGlvbmtleSwKKwkJCQkgcGtleSk7CisJfQorfQorCisvKioKKyAqIGlwYXRoX2NyZWF0ZV91c2VyX2VnciAtIGFsbG9jYXRlIGVhZ2VyIFRJRCBidWZmZXJzCisgKiBAcGQ6IHRoZSBwb3J0IHRvIGFsbG9jYXRlIFRJRCBidWZmZXJzIGZvcgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBub3cgcXVpdGUgZGlmZmVyZW50IGZvciB1c2VyIGFuZCBrZXJuZWwsIGJlY2F1c2UKKyAqIHRoZSBrZXJuZWwgdXNlcyBza2IncywgZm9yIHRoZSBhY2NlbGVyYXRlZCBuZXR3b3JrIHBlcmZvcm1hbmNlCisgKiBUaGlzIGlzIHRoZSB1c2VyIHBvcnQgdmVyc2lvbgorICoKKyAqIEFsbG9jYXRlIHRoZSBlYWdlciBUSUQgYnVmZmVycyBhbmQgcHJvZ3JhbSB0aGVtIGludG8gaW5maW5pcGF0aAorICogVGhleSBhcmUgbm8gbG9uZ2VyIGNvbXBsZXRlbHkgY29udGlndW91cywgd2UgZG8gbXVsdGlwbGUgYWxsb2NhdGlvbgorICogY2FsbHMuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfY3JlYXRlX3VzZXJfZWdyKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7CisJdW5zaWduZWQgZSwgZWdyY250LCBhbGxvY2VkLCBlZ3JwZXJjaHVuaywgY2h1bmssIGVncnNpemUsIGVncm9mZjsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgcmV0OworCisJZWdyY250ID0gZGQtPmlwYXRoX3JjdmVncmNudDsKKwkvKiBUSUQgbnVtYmVyIG9mZnNldCBmb3IgdGhpcyBwb3J0ICovCisJZWdyb2ZmID0gcGQtPnBvcnRfcG9ydCAqIGVncmNudDsKKwllZ3JzaXplID0gZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemU7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQWxsb2NhdGluZyAlZCBlZ3IgYnVmZmVycywgYXQgZWdydGlkICIKKwkJICAgIm9mZnNldCAleCwgZWdyc2l6ZSAldVxuIiwgZWdyY250LCBlZ3JvZmYsIGVncnNpemUpOworCisJLyoKKwkgKiB0byBhdm9pZCB3YXN0aW5nIGEgbG90IG9mIG1lbW9yeSwgd2UgYWxsb2NhdGUgMzJLQiBjaHVua3Mgb2YKKwkgKiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LCBhZHZhbmNlIHRocm91Z2ggaXQgdW50aWwgdXNlZCB1cAorCSAqIGFuZCB0aGVuIGFsbG9jYXRlIG1vcmUuICBPZiBjb3Vyc2UsIHdlIG5lZWQgbWVtb3J5IHRvIHN0b3JlIHRob3NlCisJICogZXh0cmEgcG9pbnRlcnMsIG5vdy4gIFN0YXJ0ZWQgb3V0IHdpdGggMjU2S0IsIGJ1dCB1bmRlciBoZWF2eQorCSAqIG1lbW9yeSBwcmVzc3VyZSAoY3JlYXRpbmcgbGFyZ2UgZmlsZXMgYW5kIHRoZW4gY29weWluZyB0aGVtIG92ZXIKKwkgKiBORlMgd2hpbGUgZG9pbmcgbG90cyBvZiBNUEkgam9icyksIHdlIGhpdCBzb21lIGFsbG9jYXRpb24KKwkgKiBmYWlsdXJlcywgZXZlbiB0aG91Z2ggd2UgY2FuIHNsZWVwLi4uICAoMi42LjEwKSBTdGlsbCBnZXQKKwkgKiBmYWlsdXJlcyBhdCA2NEsuICAzMksgaXMgdGhlIGxvd2VzdCB3ZSBjYW4gZ28gd2l0aG91dCB3YWl0aW5nCisJICogbW9yZSBtZW1vcnkgYWdhaW4uICBJdCBzZWVtcyBsaWtlbHkgdGhhdCB0aGUgY29hbGVzY2luZyBpbgorCSAqIGZyZWVfcGFnZXMsIGV0Yy4gc3RpbGwgaGFzIGlzc3VlcyAoYXMgaXQgaGFzIGhhZCBwcmV2aW91c2x5CisJICogZHVyaW5nIDIuNi54IGRldmVsb3BtZW50KS4KKwkgKi8KKwlzaXplID0gMHg4MDAwOworCWFsbG9jZWQgPSBBTElHTihlZ3JzaXplICogZWdyY250LCBzaXplKTsKKwllZ3JwZXJjaHVuayA9IHNpemUgLyBlZ3JzaXplOworCWNodW5rID0gKGVncmNudCArIGVncnBlcmNodW5rIC0gMSkgLyBlZ3JwZXJjaHVuazsKKwlwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzID0gY2h1bms7CisJcGQtPnBvcnRfcmN2ZWdyYnVmc19wZXJjaHVuayA9IGVncnBlcmNodW5rOworCXBkLT5wb3J0X3JjdmVncmJ1Zl9zaXplID0gc2l6ZTsKKwlwZC0+cG9ydF9yY3ZlZ3JidWYgPSB2bWFsbG9jKGNodW5rICogc2l6ZW9mKHBkLT5wb3J0X3JjdmVncmJ1ZlswXSkpOworCWlmICghcGQtPnBvcnRfcmN2ZWdyYnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisJcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMgPQorCQl2bWFsbG9jKGNodW5rICogc2l6ZW9mKHBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzWzBdKSk7CisJaWYgKCFwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWxfcmN2ZWdyYnVmOworCX0KKwlmb3IgKGUgPSAwOyBlIDwgcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rczsgZSsrKSB7CisJCS8qCisJCSAqIEdGUF9VU0VSLCBidXQgd2l0aG91dCBHRlBfRlMsIHNvIGJ1ZmZlciBjYWNoZSBjYW4gYmUKKwkJICogY29hbGVzY2VkICh3ZSBob3BlKTsgb3RoZXJ3aXNlLCBldmVuIGF0IG9yZGVyIDQsCisJCSAqIGhlYXZ5IGZpbGVzeXN0ZW0gYWN0aXZpdHkgbWFrZXMgdGhlc2UgZmFpbAorCQkgKi8KKwkJZ2ZwX3QgZ2ZwX2ZsYWdzID0gX19HRlBfV0FJVCB8IF9fR0ZQX0lPIHwgX19HRlBfQ09NUDsKKworCQlwZC0+cG9ydF9yY3ZlZ3JidWZbZV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoCisJCQkmZGQtPnBjaWRldi0+ZGV2LCBzaXplLCAmcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXNbZV0sCisJCQlnZnBfZmxhZ3MpOworCisJCWlmICghcGQtPnBvcnRfcmN2ZWdyYnVmW2VdKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsX3JjdmVncmJ1Zl9waHlzOworCQl9CisJfQorCisJcGQtPnBvcnRfcmN2ZWdyX3BoeXMgPSBwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5c1swXTsKKworCWZvciAoZSA9IGNodW5rID0gMDsgY2h1bmsgPCBwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzOyBjaHVuaysrKSB7CisJCWRtYV9hZGRyX3QgcGEgPSBwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5c1tjaHVua107CisJCXVuc2lnbmVkIGk7CisKKwkJZm9yIChpID0gMDsgZSA8IGVncmNudCAmJiBpIDwgZWdycGVyY2h1bms7IGUrKywgaSsrKSB7CisJCQlkZC0+aXBhdGhfZl9wdXRfdGlkKGRkLCBlICsgZWdyb2ZmICsKKwkJCQkJICAgICh1NjQgX19pb21lbSAqKQorCQkJCQkgICAgKChjaGFyIF9faW9tZW0gKikKKwkJCQkJICAgICBkZC0+aXBhdGhfa3JlZ2Jhc2UgKworCQkJCQkgICAgIGRkLT5pcGF0aF9yY3ZlZ3JiYXNlKSwgMCwgcGEpOworCQkJcGEgKz0gZWdyc2l6ZTsKKwkJfQorCQljb25kX3Jlc2NoZWQoKTsJLyogZG9uJ3QgaG9nIHRoZSBjcHUgKi8KKwl9CisKKwlyZXQgPSAwOworCWdvdG8gYmFpbDsKKworYmFpbF9yY3ZlZ3JidWZfcGh5czoKKwlmb3IgKGUgPSAwOyBlIDwgcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyAmJgorCQkgICAgIHBkLT5wb3J0X3JjdmVncmJ1ZltlXTsgZSsrKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmZGQtPnBjaWRldi0+ZGV2LCBzaXplLAorCQkJCSAgcGQtPnBvcnRfcmN2ZWdyYnVmW2VdLAorCQkJCSAgcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXNbZV0pOworCisJdmZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMpOworCXBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzID0gTlVMTDsKK2JhaWxfcmN2ZWdyYnVmOgorCXZmcmVlKHBkLT5wb3J0X3JjdmVncmJ1Zik7CisJcGQtPnBvcnRfcmN2ZWdyYnVmID0gTlVMTDsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF9kb191c2VyX2luaXQoc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpcGF0aF91c2VyX2luZm8gKnVpbmZvKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXU2NCBwaHlzYWRkciwgdWFkZHIsIG9mZiwgYXRtcDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXA7CisJdTMyIGhlYWQzMjsKKwl1NjQgaGVhZDsKKworCS8qIGZvciBub3csIGlmIG1ham9yIHZlcnNpb24gaXMgZGlmZmVyZW50LCBiYWlsICovCisJaWYgKCh1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uID4+IDE2KSAhPSBJUEFUSF9VU0VSX1NXTUFKT1IpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCSAiVXNlciBtYWpvciB2ZXJzaW9uICVkIG5vdCBzYW1lIGFzIGRyaXZlciAiCisJCQkgIm1ham9yICVkXG4iLCB1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uID4+IDE2LAorCQkJIElQQVRIX1VTRVJfU1dNQUpPUik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoKHVpbmZvLT5zcHVfdXNlcnZlcnNpb24gJiAweGZmZmYpICE9IElQQVRIX1VTRVJfU1dNSU5PUikKKwkJaXBhdGhfZGJnKCJVc2VyIG1pbm9yIHZlcnNpb24gJWQgbm90IHNhbWUgYXMgZHJpdmVyICIKKwkJCSAgIm1pbm9yICVkXG4iLCB1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uICYgMHhmZmZmLAorCQkJICBJUEFUSF9VU0VSX1NXTUlOT1IpOworCisJaWYgKHVpbmZvLT5zcHVfcmN2aGRyc2l6ZSkgeworCQlyZXQgPSBpcGF0aF9zZXRyY3ZoZHJzaXplKGRkLCB1aW5mby0+c3B1X3JjdmhkcnNpemUpOworCQlpZiAocmV0KQorCQkJZ290byBkb25lOworCX0KKworCS8qIGZvciBub3cgd2UgZG8gbm90aGluZyB3aXRoIHJjdmhkcmNudDogdWluZm8tPnNwdV9yY3ZoZHJjbnQgKi8KKworCS8qIHNldCB1cCBmb3IgdGhlIHJjdmhkciBRIHRhaWwgcmVnaXN0ZXIgd3JpdGViYWNrIHRvIHVzZXIgbWVtb3J5ICovCisJaWYgKCF1aW5mby0+c3B1X3JjdmhkcmFkZHIgfHwKKwkgICAgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsICh1NjQgX191c2VyICopICh1bnNpZ25lZCBsb25nKQorCQkgICAgICAgdWluZm8tPnNwdV9yY3ZoZHJhZGRyLCBzaXplb2YodTY0KSkpIHsKKwkJaXBhdGhfZGJnKCJQb3J0ICVkIHJjdmhkcnRhaWwgYWRkciAlbGx4IG5vdCB2YWxpZFxuIiwKKwkJCSAgcGQtPnBvcnRfcG9ydCwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdWluZm8tPnNwdV9yY3ZoZHJhZGRyKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCW9mZiA9IG9mZnNldF9pbl9wYWdlKHVpbmZvLT5zcHVfcmN2aGRyYWRkcik7CisJdWFkZHIgPSBQQUdFX01BU0sgJiAodW5zaWduZWQgbG9uZykgdWluZm8tPnNwdV9yY3ZoZHJhZGRyOworCXJldCA9IGlwYXRoX2dldF91c2VyX3BhZ2VzX25vY29weSh1YWRkciwgJnBhZ2VwKTsKKwlpZiAocmV0KSB7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJGYWlsZWQgdG8gbG9va3VwIGFuZCBsb2NrICIKKwkJCSAiYWRkcmVzcyAlbGx4IGZvciByY3ZoZHJ0YWlsOiBlcnJubyAlZFxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSB1aW5mby0+c3B1X3JjdmhkcmFkZHIsIC1yZXQpOworCQlnb3RvIGRvbmU7CisJfQorCWlwYXRoX3N0YXRzLnNwc19wYWdlbG9ja3MrKzsKKwlwZC0+cG9ydF9yY3ZoZHJ0YWlsX3VhZGRyID0gdWFkZHI7CisJcGQtPnBvcnRfcmN2aGRydGFpbF9wYWdlcCA9IHBhZ2VwOworCXBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyID0KKwkJcGFnZV9hZGRyZXNzKHBhZ2VwKTsKKwlwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciArPSBvZmY7CisJcGh5c2FkZHIgPSBwYWdlX3RvX3BoeXMocGFnZXApICsgb2ZmOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgInBvcnQgJWQgdXNlciBhZGRyICVsbHggaGRydGFpbGFkZHIsICVsbHggIgorCQkgICAicGh5c2ljYWwgKG9mZj0lbGx4KVxuIiwKKwkJICAgcGQtPnBvcnRfcG9ydCwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdWluZm8tPnNwdV9yY3ZoZHJhZGRyLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwaHlzYWRkciwgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2ZmKTsKKwlpcGF0aF93cml0ZV9rcmVnX3BvcnQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIsCisJCQkgICAgICBwZC0+cG9ydF9wb3J0LCBwaHlzYWRkcik7CisJYXRtcCA9IGlwYXRoX3JlYWRfa3JlZzY0X3BvcnQoZGQsCisJCQkJICAgICAgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJ0YWlsYWRkciwKKwkJCQkgICAgICBwZC0+cG9ydF9wb3J0KTsKKwlpZiAocGh5c2FkZHIgIT0gYXRtcCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJICAgICAgIkNhdGFzdHJvcGhpYyBzb2Z0d2FyZSBlcnJvciwgIgorCQkJICAgICAgIlJjdkhkclRhaWxBZGRyJXUgd3JpdHRlbiBhcyAlbGx4LCAiCisJCQkgICAgICAicmVhZCBiYWNrIGFzICVsbHhcbiIsIHBkLT5wb3J0X3BvcnQsCisJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwaHlzYWRkciwKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGF0bXApOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogZm9yIHJpZ2h0IG5vdywga2VybmVsIHBpb2J1ZnMgYXJlIGF0IGVuZCwgc28gcG9ydCAxIGlzIGF0IDAgKi8KKwlwZC0+cG9ydF9waW9idWZzID0gZGQtPmlwYXRoX3Bpb2J1ZmJhc2UgKworCQlkZC0+aXBhdGhfcGJ1ZnNwb3J0ICogKHBkLT5wb3J0X3BvcnQgLQorCQkJCSAgICAgICAxKSAqIGRkLT5pcGF0aF9wYWxpZ247CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiU2V0IGJhc2Ugb2YgcGlvYnVmcyBmb3IgcG9ydCAldSB0byAweCV4XG4iLAorCQkgICBwZC0+cG9ydF9wb3J0LCBwZC0+cG9ydF9waW9idWZzKTsKKworCS8qCisJICogTm93IGFsbG9jYXRlIHRoZSByY3ZoZHIgUSBhbmQgZWFnZXIgVElEczsgc2tpcCB0aGUgVElECisJICogYXJyYXkgZm9yIHRpbWUgYmVpbmcuICBJZiBwZC0+cG9ydF9wb3J0ID4gY2hpcC1zdXBwb3J0ZWQsCisJICogd2UgbmVlZCB0byBkbyBleHRyYSBzdHVmZiBoZXJlIHRvIGhhbmRsZSBieSBoYW5kbGluZyBvdmVyZmxvdworCSAqIHRocm91Z2ggcG9ydCAwLCBzb21lZGF5CisJICovCisJcmV0ID0gaXBhdGhfY3JlYXRlX3JjdmhkcnEoZGQsIHBkKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gaXBhdGhfY3JlYXRlX3VzZXJfZWdyKHBkKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisJLyogZW5hYmxlIHJlY2VpdmVzIG5vdyAqLworCS8qIGF0b21pY2FsbHkgc2V0IGVuYWJsZSBiaXQgZm9yIHRoaXMgcG9ydCAqLworCXNldF9iaXQoSU5GSU5JUEFUSF9SX1BPUlRFTkFCTEVfU0hJRlQgKyBwZC0+cG9ydF9wb3J0LAorCQkmZGQtPmlwYXRoX3JjdmN0cmwpOworCisJLyoKKwkgKiBzZXQgdGhlIGhlYWQgcmVnaXN0ZXJzIGZvciB0aGlzIHBvcnQgdG8gdGhlIGN1cnJlbnQgdmFsdWVzCisJICogb2YgdGhlIHRhaWwgcG9pbnRlcnMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhleSB3ZXJlCisJICogdXBkYXRlZCBvbiBsYXN0IHVzZSBvZiB0aGUgcG9ydC4KKwkgKi8KKwloZWFkMzIgPSBpcGF0aF9yZWFkX3VyZWczMihkZCwgdXJfcmN2aGRydGFpbCwgcGQtPnBvcnRfcG9ydCk7CisJaGVhZCA9ICh1NjQpIGhlYWQzMjsKKwlpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZoZHJoZWFkLCBoZWFkLCBwZC0+cG9ydF9wb3J0KTsKKwloZWFkMzIgPSBpcGF0aF9yZWFkX3VyZWczMihkZCwgdXJfcmN2ZWdyaW5kZXh0YWlsLCBwZC0+cG9ydF9wb3J0KTsKKwlpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZlZ3JpbmRleGhlYWQsIGhlYWQzMiwgcGQtPnBvcnRfcG9ydCk7CisJZGQtPmlwYXRoX2xhc3RlZ3JoZWFkc1twZC0+cG9ydF9wb3J0XSA9IC0xOworCWRkLT5pcGF0aF9sYXN0cmN2aGRycXRhaWxzW3BkLT5wb3J0X3BvcnRdID0gLTE7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiV3JvdGUgcG9ydCVkIGhlYWQgJWxseCwgZWdyaGVhZCAleCBmcm9tICIKKwkJICAgInRhaWwgcmVnc1xuIiwgcGQtPnBvcnRfcG9ydCwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaGVhZCwgaGVhZDMyKTsKKwlwZC0+cG9ydF90aWRjdXJzb3IgPSAwOwkvKiBzdGFydCBhdCBiZWdpbm5pbmcgYWZ0ZXIgb3BlbiAqLworCS8qCisJICogbm93IGVuYWJsZSB0aGUgcG9ydDsgdGhlIHRhaWwgcmVnaXN0ZXJzIHdpbGwgYmUgd3JpdHRlbiB0byBtZW1vcnkKKwkgKiBieSB0aGUgY2hpcCBhcyBzb29uIGFzIGl0IHNlZXMgdGhlIHdyaXRlIHRvCisJICogZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLiAgVGhlIHVwZGF0ZSBvbmx5IGhhcHBlbnMgb24KKwkgKiB0cmFuc2l0aW9uIGZyb20gMCB0byAxLCBzbyBjbGVhciBpdCBmaXJzdCwgdGhlbiBzZXQgaXQgYXMgcGFydCBvZgorCSAqIGVuYWJsaW5nIHRoZSBwb3J0LiAgVGhpcyB3aWxsICh2ZXJ5IGJyaWVmbHkpIGFmZmVjdCBhbnkgb3RoZXIKKwkgKiBvcGVuIHBvcnRzLCBidXQgaXQgc2hvdWxkbid0IGJlIGxvbmcgZW5vdWdoIHRvIGJlIGFuIGlzc3VlLgorCSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCSBkZC0+aXBhdGhfcmN2Y3RybCAmIH5JTkZJTklQQVRIX1JfVEFJTFVQRCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKKworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1tYXBfdXJlZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkgICAgIHU2NCB1cmVnKQoreworCXVuc2lnbmVkIGxvbmcgcGh5czsKKwlpbnQgcmV0OworCisJLyogaXQncyB0aGUgcmVhbCBoYXJkd2FyZSwgc28gaW9fcmVtYXAgd29ya3MgKi8KKworCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+IFBBR0VfU0laRSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiRkFJTCBtbWFwIHVzZXJyZWc6IHJlcWxlbiAiCisJCQkgIiVseCA+IFBBR0VcbiIsIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CisJCXJldCA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJcGh5cyA9IGRkLT5pcGF0aF9waHlzYWRkciArIHVyZWc7CisJCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwkJdm1hLT52bV9mbGFncyB8PSBWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQ7CisJCXJldCA9IGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCisJCQkJCSBwaHlzID4+IFBBR0VfU0hJRlQsCisJCQkJCSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkJCSB2bWEtPnZtX3BhZ2VfcHJvdCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbW1hcF9waW9idWZzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXM7CisJaW50IHJldDsKKworCS8qCisJICogV2hlbiB3ZSBtYXAgdGhlIFBJTyBidWZmZXJzLCB3ZSB3YW50IHRvIG1hcCB0aGVtIGFzIHdyaXRlb25seSwgbm8KKwkgKiByZWFkIHBvc3NpYmxlLgorCSAqLworCisJaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4KKwkgICAgKGRkLT5pcGF0aF9wYnVmc3BvcnQgKiBkZC0+aXBhdGhfcGFsaWduKSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiRkFJTCBtbWFwIHBpb2J1ZnM6ICIKKwkJCSAicmVxbGVuICVseCA+IFBBR0VcbiIsCisJCQkgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsOworCX0KKworCXBoeXMgPSBkZC0+aXBhdGhfcGh5c2FkZHIgKyBwZC0+cG9ydF9waW9idWZzOworCS8qCisJICogRG8gKk5PVCogbWFyayB0aGlzIGFzIG5vbi1jYWNoZWQgKFBXVCBiaXQpLCBvciB3ZSBkb24ndCBnZXQgdGhlCisJICogd3JpdGUgY29tYmluaW5nIGJlaGF2aW9yIHdlIHdhbnQgb24gdGhlIFBJTyBidWZmZXJzIQorCSAqIHZtYS0+dm1fcGFnZV9wcm90ID0KKwkgKiAgICAgICAgcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisJICovCisKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1JFQUQpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCSAiQ2FuJ3QgbWFwIHBpb2J1ZnMgYXMgcmVhZGFibGUgKGZsYWdzPSVseClcbiIsCisJCQkgdm1hLT52bV9mbGFncyk7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBiYWlsOworCX0KKworCS8qIGRvbid0IGFsbG93IHRoZW0gdG8gbGF0ZXIgY2hhbmdlIHRvIHJlYWRhYmxlIHdpdGggbXByb3RlY3QgKi8KKworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX01BWVdSSVRFOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EOworCisJcmV0ID0gaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgcGh5cyA+PiBQQUdFX1NISUZULAorCQkJCSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkJIHZtYS0+dm1fcGFnZV9wcm90KTsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtbWFwX3JjdmVncmJ1ZnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemU7CisJc2l6ZV90IHRvdGFsX3NpemUsIGk7CisJZG1hX2FkZHJfdCAqcGh5czsKKwlpbnQgcmV0OworCisJaWYgKCFwZC0+cG9ydF9yY3ZlZ3JidWYpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsOworCX0KKworCXNpemUgPSBwZC0+cG9ydF9yY3ZlZ3JidWZfc2l6ZTsKKwl0b3RhbF9zaXplID0gcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyAqIHNpemU7CisJaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gdG90YWxfc2l6ZSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiRkFJTCBvbiBlZ3IgYnVmczogIgorCQkJICJyZXFsZW4gJWx4ID4gYWN0dWFsICVseFxuIiwKKwkJCSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkgKHVuc2lnbmVkIGxvbmcpIHRvdGFsX3NpemUpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQ2FuJ3QgbWFwIGVhZ2VyIGJ1ZmZlcnMgYXMgIgorCQkJICJ3cml0YWJsZSAoZmxhZ3M9JWx4KVxuIiwgdm1hLT52bV9mbGFncyk7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBiYWlsOworCX0KKworCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwlwaHlzID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXM7CisKKwkvKiBkb24ndCBhbGxvdyB0aGVtIHRvIGxhdGVyIGNoYW5nZSB0byB3cml0ZWFibGUgd2l0aCBtcHJvdGVjdCAqLworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX01BWVdSSVRFOworCisJZm9yIChpID0gMDsgaSA8IHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3M7IGkrKywgc3RhcnQgKz0gc2l6ZSkgeworCQlyZXQgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGh5c1tpXSA+PiBQQUdFX1NISUZULAorCQkJCSAgICAgIHNpemUsIHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGJhaWw7CisJfQorCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtbWFwX3JjdmhkcnEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXNpemVfdCB0b3RhbF9zaXplOworCWludCByZXQ7CisKKwkvKgorCSAqIGttYWxsb2MnZWQgbWVtb3J5LCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXM7IHRoaXMgaXMgZnJvbQorCSAqIHNwaV9yY3ZoZHJfYmFzZTsgd2UgYWxsb3cgdXNlciB0byBtYXAgcmVhZC13cml0ZSBzbyB0aGV5IGNhbgorCSAqIHdyaXRlIGhkcnEgZW50cmllcyB0byBhbGxvdyBwcm90b2NvbCBjb2RlIHRvIGRpcmVjdGx5IHBvbGwKKwkgKiB3aGV0aGVyIGEgaGRycSBlbnRyeSBoYXMgYmVlbiB3cml0dGVuLgorCSAqLworCXRvdGFsX3NpemUgPSBBTElHTihkZC0+aXBhdGhfcmN2aGRyY250ICogZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgKgorCQkJICAgc2l6ZW9mKHUzMiksIFBBR0VfU0laRSk7CisJaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gdG90YWxfc2l6ZSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJICJGQUlMIG9uIHJjdmhkcnE6IHJlcWxlbiAlbHggPiBhY3R1YWwgJWx4XG4iLAorCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCSAodW5zaWduZWQgbG9uZykgdG90YWxfc2l6ZSk7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAorCQkJICAgICAgcGQtPnBvcnRfcmN2aGRycV9waHlzID4+IFBBR0VfU0hJRlQsCisJCQkgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbW1hcF9waW9hdmFpbHJlZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgIHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7CisJaW50IHJldDsKKworCS8qCisJICogd2hlbiB3ZSBtYXAgdGhlIFBJTyBidWZmZXJhdmFpbCByZWdpc3RlcnMsIHdlIHdhbnQgdG8gbWFwIHRoZW0gYXMKKwkgKiByZWFkb25seSwgbm8gd3JpdGUgcG9zc2libGUuCisJICoKKwkgKiBrbWFsbG9jJ2VkIG1lbW9yeSwgcGh5c2ljYWxseSBjb250aWd1b3VzLCBvbmUgcGFnZSBvbmx5LCByZWFkb25seQorCSAqLworCisJaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gUEFHRV9TSVpFKSB7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJGQUlMIG9uIHBpb2F2YWlscmVnc19kbWE6ICIKKwkJCSAicmVxbGVuICVseCA+IGFjdHVhbCAlbHhcbiIsCisJCQkgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJICh1bnNpZ25lZCBsb25nKSBQQUdFX1NJWkUpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJICJDYW4ndCBtYXAgcGlvYXZhaWxyZWdzIGFzIHdyaXRhYmxlIChmbGFncz0lbHgpXG4iLAorCQkJIHZtYS0+dm1fZmxhZ3MpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBkb24ndCBhbGxvdyB0aGVtIHRvIGxhdGVyIGNoYW5nZSB3aXRoIG1wcm90ZWN0ICovCisJdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CisKKwlyZXQgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAorCQkJICAgICAgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzID4+IFBBR0VfU0hJRlQsCisJCQkgICAgICBQQUdFX1NJWkUsIHZtYS0+dm1fcGFnZV9wcm90KTsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9tbWFwIC0gbW1hcCB2YXJpb3VzIHN0cnVjdHVyZXMgaW50byB1c2VyIHNwYWNlCisgKiBAZnA6IHRoZSBmaWxlIHBvaW50ZXIKKyAqIEB2bWE6IHRoZSBWTSBhcmVhCisgKgorICogV2UgdXNlIHRoaXMgdG8gaGF2ZSBhIHNoYXJlZCBidWZmZXIgYmV0d2VlbiB0aGUga2VybmVsIGFuZCB0aGUgdXNlciBjb2RlCisgKiBmb3IgdGhlIHJjdmhkciBxdWV1ZSwgZWdyIGJ1ZmZlcnMsIGFuZCB0aGUgcGVyLXBvcnQgdXNlciByZWdzIGFuZCBwaW8KKyAqIGJ1ZmZlcnMgaW4gdGhlIGNoaXAuICBXZSBoYXZlIHRoZSBvcGVuIGFuZCBjbG9zZSBlbnRyaWVzIHNvIHdlIGNhbiBidW1wCisgKiB0aGUgcmVmIGNvdW50IGFuZCBrZWVwIHRoZSBkcml2ZXIgZnJvbSBiZWluZyB1bmxvYWRlZCB3aGlsZSBzdGlsbCBtYXBwZWQuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfbW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQ7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXU2NCBwZ2FkZHIsIHVyZWc7CisJaW50IHJldDsKKworCXBkID0gcG9ydF9mcChmcCk7CisJZGQgPSBwZC0+cG9ydF9kZDsKKwkvKgorCSAqIFRoaXMgaXMgdGhlIGlwYXRoX2RvX3VzZXJfaW5pdCgpIGNvZGUsIG1hcHBpbmcgdGhlIHNoYXJlZCBidWZmZXJzCisJICogaW50byB0aGUgdXNlciBwcm9jZXNzLiBUaGUgYWRkcmVzcyByZWZlcnJlZCB0byBieSB2bV9wZ29mZiBpcyB0aGUKKwkgKiB2aXJ0dWFsLCBub3QgcGh5c2ljYWwsIGFkZHJlc3M7IHdlIG9ubHkgZG8gb25lIG1tYXAgZm9yIGVhY2gKKwkgKiBzcGFjZSBtYXBwZWQuCisJICovCisJcGdhZGRyID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCisJLyoKKwkgKiBub3RlIHRoYXQgdXJlZyBkb2VzICpOT1QqIGhhdmUgdGhlIGtyZWd2aXJ0IGFzIHBhcnQgb2YgaXQsIHRvIGJlCisJICogc3VyZSB0aGF0IGZvciAzMiBiaXQgcHJvZ3JhbXMsIHdlIGRvbid0IGVuZCB1cCB0cnlpbmcgdG8gbWFwIGEgPgorCSAqIDQ0IGFkZHJlc3MuICBIYXMgdG8gbWF0Y2ggaXBhdGhfZ2V0X2Jhc2VfaW5mbygpIGNvZGUgdGhhdCBzZXRzCisJICogX19zcGlfdXJlZ2Jhc2UKKwkgKi8KKworCXVyZWcgPSBkZC0+aXBhdGhfdXJlZ2Jhc2UgKyBkZC0+aXBhdGhfcGFsaWduICogcGQtPnBvcnRfcG9ydDsKKworCWlwYXRoX2NkYmcoTU0sICJ1c2hhcmU6IHBnYWRkciAlbGx4IHZtX3N0YXJ0PSVseCwgdm1sZW4gJWx4XG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwZ2FkZHIsIHZtYS0+dm1fc3RhcnQsCisJCSAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CisKKwlpZiAocGdhZGRyID09IHVyZWcpCisJCXJldCA9IG1tYXBfdXJlZyh2bWEsIGRkLCB1cmVnKTsKKwllbHNlIGlmIChwZ2FkZHIgPT0gcGQtPnBvcnRfcGlvYnVmcykKKwkJcmV0ID0gbW1hcF9waW9idWZzKHZtYSwgZGQsIHBkKTsKKwllbHNlIGlmIChwZ2FkZHIgPT0gKHU2NCkgcGQtPnBvcnRfcmN2ZWdyX3BoeXMpCisJCXJldCA9IG1tYXBfcmN2ZWdyYnVmcyh2bWEsIHBkKTsKKwllbHNlIGlmIChwZ2FkZHIgPT0gKHU2NCkgcGQtPnBvcnRfcmN2aGRycV9waHlzKQorCQlyZXQgPSBtbWFwX3JjdmhkcnEodm1hLCBwZCk7CisJZWxzZSBpZiAocGdhZGRyID09IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfcGh5cykKKwkJcmV0ID0gbW1hcF9waW9hdmFpbHJlZ3Modm1hLCBwZCk7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOworCisJaWYgKHJldCA8IDApCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkgIkZhaWx1cmUgJWQgb24gYWRkciAlbHgsIG9mZiAlbHhcbiIsCisJCQkgLXJldCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9wZ29mZik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlwYXRoX3BvbGwoc3RydWN0IGZpbGUgKmZwLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHQpCit7CisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKKwl1MzIgaGVhZCwgdGFpbDsKKwlpbnQgYml0OworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKworCXBkID0gcG9ydF9mcChmcCk7CisJZGQgPSBwZC0+cG9ydF9kZDsKKworCWJpdCA9IHBkLT5wb3J0X3BvcnQgKyBJTkZJTklQQVRIX1JfSU5UUkFWQUlMX1NISUZUOworCXNldF9iaXQoYml0LCAmZGQtPmlwYXRoX3JjdmN0cmwpOworCisJLyoKKwkgKiBCZWZvcmUgYmxvY2tpbmcsIG1ha2Ugc3VyZSB0aGF0IGhlYWQgaXMgc3RpbGwgPT0gdGFpbCwKKwkgKiByZWFkaW5nIGZyb20gdGhlIGNoaXAsIHNvIHdlIGNhbiBiZSBzdXJlIHRoZSBpbnRlcnJ1cHQKKwkgKiBlbmFibGUgaGFzIG1hZGUgaXQgdG8gdGhlIGNoaXAuICBJZiBub3QgZXF1YWwsIGRpc2FibGUKKwkgKiBpbnRlcnJ1cHQgYWdhaW4gYW5kIHJldHVybiBpbW1lZGlhdGVseS4gIFRoaXMgYXZvaWRzIHJhY2VzLAorCSAqIGFuZCB0aGUgb3ZlcmhlYWQgb2YgdGhlIGNoaXAgcmVhZCBkb2Vzbid0IG1hdHRlciBtdWNoIGF0CisJICogdGhpcyBwb2ludCwgc2luY2Ugd2UgYXJlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyBhbnl3YXkuCisJICovCisKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCisJCQkgZGQtPmlwYXRoX3JjdmN0cmwpOworCisJaGVhZCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJoZWFkLCBwZC0+cG9ydF9wb3J0KTsKKwl0YWlsID0gaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmhkcnRhaWwsIHBkLT5wb3J0X3BvcnQpOworCisJaWYgKHRhaWwgPT0gaGVhZCkgeworCQlzZXRfYml0KElQQVRIX1BPUlRfV0FJVElOR19SQ1YsICZwZC0+cG9ydF9mbGFnKTsKKwkJaWYoZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmKSAvKiBhcm0gcmN2IGludGVycnVwdCAqLworCQkJKHZvaWQpaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2aGRyaGVhZCwKKwkJCQkJICAgICAgIGRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZgorCQkJCQkgICAgICAgfCBoZWFkLCBwZC0+cG9ydF9wb3J0KTsKKwkJcG9sbF93YWl0KGZwLCAmcGQtPnBvcnRfd2FpdCwgcHQpOworCisJCWlmICh0ZXN0X2JpdChJUEFUSF9QT1JUX1dBSVRJTkdfUkNWLCAmcGQtPnBvcnRfZmxhZykpIHsKKwkJCS8qIHRpbWVkIG91dCwgbm8gcGFja2V0cyByZWNlaXZlZCAqLworCQkJY2xlYXJfYml0KElQQVRIX1BPUlRfV0FJVElOR19SQ1YsICZwZC0+cG9ydF9mbGFnKTsKKwkJCXBkLT5wb3J0X3JjdndhaXRfdG8rKzsKKwkJfQorCX0KKwllbHNlIHsKKwkJLyogaXQncyBhbHJlYWR5IGhhcHBlbmVkOyBkb24ndCBkbyB3YWl0X2V2ZW50IG92ZXJoZWFkICovCisJCXBkLT5wb3J0X3Jjdm5vd2FpdCsrOworCX0KKworCWNsZWFyX2JpdChiaXQsICZkZC0+aXBhdGhfcmN2Y3RybCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyeV9hbGxvY19wb3J0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHBvcnQsCisJCQkgIHN0cnVjdCBmaWxlICpmcCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFkZC0+aXBhdGhfcGRbcG9ydF0pIHsKKwkJdm9pZCAqcCwgKnB0bXA7CisKKwkJcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSksIEdGUF9LRVJORUwpOworCisJCS8qCisJCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgdXNlIGluIGlwYXRoX3RpZF91cGRhdGUoKSBqdXN0IG9uY2UKKwkJICogYXQgb3Blbiwgbm90IHBlciBjYWxsLiAgUmVkdWNlcyBjb3N0IG9mIGV4cGVjdGVkIHNlbmQKKwkJICogc2V0dXAuCisJCSAqLworCQlwdG1wID0ga21hbGxvYyhkZC0+aXBhdGhfcmN2dGlkY250ICogc2l6ZW9mKHUxNikgKworCQkJICAgICAgIGRkLT5pcGF0aF9yY3Z0aWRjbnQgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiopLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIXAgfHwgIXB0bXApIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJVbmFibGUgdG8gYWxsb2NhdGUgcG9ydGRhdGEgIgorCQkJCSAgICAgICJtZW1vcnksIGZhaWxpbmcgb3BlblxuIik7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJa2ZyZWUocCk7CisJCQlrZnJlZShwdG1wKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlkZC0+aXBhdGhfcGRbcG9ydF0gPSBwOworCQlkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfcG9ydCA9IHBvcnQ7CisJCWRkLT5pcGF0aF9wZFtwb3J0XS0+cG9ydF9kZCA9IGRkOworCQlkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfdGlkX3BnX2xpc3QgPSBwdG1wOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfd2FpdCk7CisJfQorCWlmICghZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X2NudCkgeworCQlkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfY250ID0gMTsKKwkJZnAtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopIGRkLT5pcGF0aF9wZFtwb3J0XTsKKwkJaXBhdGhfY2RiZyhQUk9DLCAiJXNbJXVdIG9wZW5lZCB1bml0OnBvcnQgJXU6JXVcbiIsCisJCQkgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGRkLT5pcGF0aF91bml0LAorCQkJICAgcG9ydCk7CisJCWRkLT5pcGF0aF9wZFtwb3J0XS0+cG9ydF9waWQgPSBjdXJyZW50LT5waWQ7CisJCXN0cm5jcHkoZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X2NvbW0sIGN1cnJlbnQtPmNvbW0sCisJCQlzaXplb2YoZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X2NvbW0pKTsKKwkJaXBhdGhfc3RhdHMuc3BzX3BvcnRzKys7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisJcmV0ID0gLUVCVVNZOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVzYWJsZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGRkICYmCisJCShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSAmJgorCQlkZC0+aXBhdGhfa3JlZ2Jhc2UgJiYKKwkJZGQtPmlwYXRoX2xpZCAmJgorCQkhKGRkLT5pcGF0aF9mbGFncyAmIChJUEFUSF9MSU5LRE9XTiB8IElQQVRIX0RJU0FCTEVECisJCQkJICAgICB8IElQQVRIX0xJTktVTkspKTsKK30KKworc3RhdGljIGludCBmaW5kX2ZyZWVfcG9ydChpbnQgdW5pdCwgc3RydWN0IGZpbGUgKmZwKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGlwYXRoX2xvb2t1cCh1bml0KTsKKwlpbnQgcmV0LCBpOworCisJaWYgKCFkZCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKCF1c2FibGUoZGQpKSB7CisJCXJldCA9IC1FTkVURE9XTjsKKwkJZ290byBiYWlsOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IGkrKykgeworCQlyZXQgPSB0cnlfYWxsb2NfcG9ydChkZCwgaSwgZnApOworCQlpZiAocmV0ICE9IC1FQlVTWSkKKwkJCWdvdG8gYmFpbDsKKwl9CisJcmV0ID0gLUVCVVNZOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9iZXN0X3VuaXQoc3RydWN0IGZpbGUgKmZwKQoreworCWludCByZXQgPSAwLCBpLCBwcmVmdW5pdCA9IC0xLCBkZXZtYXg7CisJaW50IG1heG9mYWxscG9ydHMsIG5wcmVzZW50LCBudXA7CisJaW50IG5kZXY7CisKKwkodm9pZCkgaXBhdGhfY291bnRfdW5pdHMoJm5wcmVzZW50LCAmbnVwLCAmbWF4b2ZhbGxwb3J0cyk7CisKKwkvKgorCSAqIFRoaXMgY29kZSBpcyBwcmVzZW50IHRvIGFsbG93IGEga25vd2xlZGdlYWJsZSBwZXJzb24gdG8KKwkgKiBzcGVjaWZ5IHRoZSBsYXlvdXQgb2YgcHJvY2Vzc2VzIHRvIHByb2Nlc3NvcnMgYmVmb3JlIG9wZW5pbmcKKwkgKiB0aGlzIGRyaXZlciwgYW5kIHRoZW4gd2UnbGwgYXNzaWduIHRoZSBwcm9jZXNzIHRvIHRoZSAiY2xvc2VzdCIKKwkgKiBIVC00MDAgdG8gdGhhdCBwcm9jZXNzb3IgKHdlIGFzc3VtZSByZWFzb25hYmxlIGNvbm5lY3Rpdml0eSwKKwkgKiBmb3Igbm93KS4gIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgaWYgYWZmaW5pdHkgaGFzIGJlZW4gc2V0CisJICogYmVmb3JlIHRoaXMgcG9pbnQsIHRoYXQgYXQgbW9zdCBvbmUgY3B1IGlzIHNldDsgZm9yIG5vdyB0aGlzCisJICogaXMgcmVhc29uYWJsZS4gIEkgY2hlY2sgZm9yIGJvdGggY3B1c19lbXB0eSgpIGFuZCBjcHVzX2Z1bGwoKSwKKwkgKiBpbiBjYXNlIHNvbWUga2VybmVsIHZhcmlhbnQgc2V0cyBub25lIG9mIHRoZSBiaXRzIHdoZW4gbm8KKwkgKiBhZmZpbml0eSBpcyBzZXQuICAyLjYuMTEgYW5kIDEyIGtlcm5lbHMgaGF2ZSBhbGwgcHJlc2VudAorCSAqIGNwdXMgc2V0LiAgU29tZSBkYXkgd2UnbGwgaGF2ZSB0byBmaXggaXQgdXAgZnVydGhlciB0byBoYW5kbGUKKwkgKiBhIGNwdSBzdWJzZXQuICBUaGlzIGFsZ29yaXRobSBmYWlscyBmb3IgdHdvIEhULTQwMCdzIGNvbm5lY3RlZAorCSAqIGluIHR1bm5lbCBmYXNoaW9uLiAgRXZlbnR1YWxseSB0aGlzIG5lZWRzIHJlYWwgdG9wb2xvZ3kKKwkgKiBpbmZvcm1hdGlvbi4gIFRoZXJlIG1heSBiZSBzb21lIGlzc3VlcyB3aXRoIGR1YWwgY29yZSBudW1iZXJpbmcKKwkgKiBhcyB3ZWxsLiAgVGhpcyBuZWVkcyBtb3JlIHdvcmsgcHJpb3IgdG8gcmVsZWFzZS4KKwkgKi8KKwlpZiAoIWNwdXNfZW1wdHkoY3VycmVudC0+Y3B1c19hbGxvd2VkKSAmJgorCSAgICAhY3B1c19mdWxsKGN1cnJlbnQtPmNwdXNfYWxsb3dlZCkpIHsKKwkJaW50IG5jcHVzID0gbnVtX29ubGluZV9jcHVzKCksIGN1cmNwdSA9IC0xOworCQlmb3IgKGkgPSAwOyBpIDwgbmNwdXM7IGkrKykKKwkJCWlmIChjcHVfaXNzZXQoaSwgY3VycmVudC0+Y3B1c19hbGxvd2VkKSkgeworCQkJCWlwYXRoX2NkYmcoUFJPQywgIiVzWyV1XSBhZmZpbml0eSBzZXQgZm9yICIKKwkJCQkJICAgImNwdSAlZFxuIiwgY3VycmVudC0+Y29tbSwKKwkJCQkJICAgY3VycmVudC0+cGlkLCBpKTsKKwkJCQljdXJjcHUgPSBpOworCQkJfQorCQlpZiAoY3VyY3B1ICE9IC0xKSB7CisJCQlpZiAobnByZXNlbnQpIHsKKwkJCQlwcmVmdW5pdCA9IGN1cmNwdSAvIChuY3B1cyAvIG5wcmVzZW50KTsKKwkJCQlpcGF0aF9kYmcoIiVzWyV1XSAlZCBjaGlwcywgJWQgY3B1cywgIgorCQkJCQkgICIlZCBjcHVzL2NoaXAsIHNlbGVjdCB1bml0ICVkXG4iLAorCQkJCQkgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCQkJICBucHJlc2VudCwgbmNwdXMsIG5jcHVzIC8gbnByZXNlbnQsCisJCQkJCSAgcHJlZnVuaXQpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiB1c2VyIHBvcnRzIHN0YXJ0IGF0IDEsIGtlcm5lbCBwb3J0IGlzIDAKKwkgKiBGb3Igbm93LCB3ZSBkbyByb3VuZC1yb2JpbiBhY2Nlc3MgYWNyb3NzIGFsbCBjaGlwcworCSAqLworCisJaWYgKHByZWZ1bml0ICE9IC0xKQorCQlkZXZtYXggPSBwcmVmdW5pdCArIDE7CisJZWxzZQorCQlkZXZtYXggPSBpcGF0aF9jb3VudF91bml0cyhOVUxMLCBOVUxMLCBOVUxMKTsKK3JlY2hlY2s6CisJZm9yIChpID0gMTsgaSA8IG1heG9mYWxscG9ydHM7IGkrKykgeworCQlmb3IgKG5kZXYgPSBwcmVmdW5pdCAhPSAtMSA/IHByZWZ1bml0IDogMDsgbmRldiA8IGRldm1heDsKKwkJICAgICBuZGV2KyspIHsKKwkJCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGlwYXRoX2xvb2t1cChuZGV2KTsKKworCQkJaWYgKCF1c2FibGUoZGQpKQorCQkJCWNvbnRpbnVlOyAvKiBjYW4ndCB1c2UgdGhpcyB1bml0ICovCisJCQlpZiAoaSA+PSBkZC0+aXBhdGhfY2ZncG9ydHMpCisJCQkJLyoKKwkJCQkgKiBNYXhlZCBvdXQgb24gdXNlcnMgb2YgdGhpcyB1bml0LiBUcnkKKwkJCQkgKiBuZXh0LgorCQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJcmV0ID0gdHJ5X2FsbG9jX3BvcnQoZGQsIGksIGZwKTsKKwkJCWlmICghcmV0KQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWlmIChucHJlc2VudCkgeworCQlpZiAobnVwID09IDApIHsKKwkJCXJldCA9IC1FTkVURE9XTjsKKwkJCWlwYXRoX2RiZygiTm8gcG9ydHMgYXZhaWxhYmxlIChub25lIGluaXRpYWxpemVkICIKKwkJCQkgICJhbmQgcmVhZHkpXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwcmVmdW5pdCA+IDApIHsKKwkJCQkvKiBpZiBzdGFydGVkIGFib3ZlIDAsIHJldHJ5IGZyb20gMCAqLworCQkJCWlwYXRoX2NkYmcoUFJPQywKKwkJCQkJICAgIiVzWyV1XSBubyBwb3J0cyBvbiBwcmVmdW5pdCAiCisJCQkJCSAgICIlZCwgY2xlYXIgYW5kIHJlLWNoZWNrXG4iLAorCQkJCQkgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCQkJCSAgIHByZWZ1bml0KTsKKwkJCQlkZXZtYXggPSBpcGF0aF9jb3VudF91bml0cyhOVUxMLCBOVUxMLAorCQkJCQkJCSAgIE5VTEwpOworCQkJCXByZWZ1bml0ID0gLTE7CisJCQkJZ290byByZWNoZWNrOworCQkJfQorCQkJcmV0ID0gLUVCVVNZOworCQkJaXBhdGhfZGJnKCJObyBwb3J0cyBhdmFpbGFibGVcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOWElPOworCQlpcGF0aF9kYmcoIk5vIGJvYXJkcyBmb3VuZFxuIik7CisJfQorCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfb3BlbihzdHJ1Y3QgaW5vZGUgKmluLCBzdHJ1Y3QgZmlsZSAqZnApCit7CisJaW50IHJldCwgbWlub3I7CisKKwltdXRleF9sb2NrKCZpcGF0aF9tdXRleCk7CisKKwltaW5vciA9IGltaW5vcihpbik7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAib3BlbiBvbiBkZXYgJWx4IChtaW5vciAlZClcbiIsCisJCSAgIChsb25nKWluLT5pX3JkZXYsIG1pbm9yKTsKKworCWlmIChtaW5vcikKKwkJcmV0ID0gZmluZF9mcmVlX3BvcnQobWlub3IgLSAxLCBmcCk7CisJZWxzZQorCQlyZXQgPSBmaW5kX2Jlc3RfdW5pdChmcCk7CisKKwltdXRleF91bmxvY2soJmlwYXRoX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHVubG9ja19leHB0aWQgLSB1bmxvY2sgYW55IGV4cGVjdGVkIFRJRCBlbnRyaWVzIHBvcnQgc3RpbGwgaGFkIGluIHVzZQorICogQHBkOiBwb3J0CisgKgorICogV2UgZG9uJ3QgYWN0dWFsbHkgdXBkYXRlIHRoZSBjaGlwIGhlcmUsIGJlY2F1c2Ugd2UgZG8gYSBidWxrIHVwZGF0ZQorICogYmVsb3csIHVzaW5nIGlwYXRoX2ZfY2xlYXJfdGlkcy4KKyAqLworc3RhdGljIHZvaWQgdW5sb2NrX2V4cGVjdGVkX3RpZHMoc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwlpbnQgcG9ydF90aWRiYXNlID0gcGQtPnBvcnRfcG9ydCAqIGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisJaW50IGksIGNudCA9IDAsIG1heHRpZCA9IHBvcnRfdGlkYmFzZSArIGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJQb3J0ICV1IHVubG9ja2luZyBhbnkgbG9ja2VkIGV4cFRJRCBwYWdlc1xuIiwKKwkJICAgcGQtPnBvcnRfcG9ydCk7CisJZm9yIChpID0gcG9ydF90aWRiYXNlOyBpIDwgbWF4dGlkOyBpKyspIHsKKwkJaWYgKCFkZC0+aXBhdGhfcGFnZXNoYWRvd1tpXSkKKwkJCWNvbnRpbnVlOworCisJCWlwYXRoX3JlbGVhc2VfdXNlcl9wYWdlc19vbl9jbG9zZSgmZGQtPmlwYXRoX3BhZ2VzaGFkb3dbaV0sCisJCQkJCQkgIDEpOworCQlkZC0+aXBhdGhfcGFnZXNoYWRvd1tpXSA9IE5VTEw7CisJCWNudCsrOworCQlpcGF0aF9zdGF0cy5zcHNfcGFnZXVubG9ja3MrKzsKKwl9CisJaWYgKGNudCkKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUG9ydCAldSBsb2NrZWQgJXUgZXhwVElEIGVudHJpZXNcbiIsCisJCQkgICBwZC0+cG9ydF9wb3J0LCBjbnQpOworCisJaWYgKGlwYXRoX3N0YXRzLnNwc19wYWdlbG9ja3MgfHwgaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKQorCQlpcGF0aF9jZGJnKFZFUkJPU0UsICIlbGx1IHBhZ2VzIGxvY2tlZCwgJWxsdSB1bmxvY2tlZFxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlwYXRoX3N0YXRzLnNwc19wYWdlbG9ja3MsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKTsKK30KKworc3RhdGljIGludCBpcGF0aF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmluLCBzdHJ1Y3QgZmlsZSAqZnApCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJdW5zaWduZWQgcG9ydDsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgImNsb3NlIG9uIGRldiAlbHgsIHByaXZhdGUgZGF0YSAlcFxuIiwKKwkJICAgKGxvbmcpaW4tPmlfcmRldiwgZnAtPnByaXZhdGVfZGF0YSk7CisKKwltdXRleF9sb2NrKCZpcGF0aF9tdXRleCk7CisKKwlwZCA9IHBvcnRfZnAoZnApOworCXBvcnQgPSBwZC0+cG9ydF9wb3J0OworCWZwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWRkID0gcGQtPnBvcnRfZGQ7CisKKwlpZiAocGQtPnBvcnRfaGRycWZ1bGwpIHsKKwkJaXBhdGhfY2RiZyhQUk9DLCAiJXNbJXVdIGhhZCAldSByY3ZoZHJxZnVsbCBlcnJvcnMgIgorCQkJICAgImR1cmluZyBydW5cbiIsIHBkLT5wb3J0X2NvbW0sIHBkLT5wb3J0X3BpZCwKKwkJCSAgIHBkLT5wb3J0X2hkcnFmdWxsKTsKKwkJcGQtPnBvcnRfaGRycWZ1bGwgPSAwOworCX0KKworCWlmIChwZC0+cG9ydF9yY3Z3YWl0X3RvIHx8IHBkLT5wb3J0X3Bpb3dhaXRfdG8KKwkgICAgfHwgcGQtPnBvcnRfcmN2bm93YWl0IHx8IHBkLT5wb3J0X3Bpb25vd2FpdCkgeworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJwb3J0JXUsICV1IHJjdiwgJXUgcGlvIHdhaXQgdGltZW87ICIKKwkJCSAgICIldSByY3YgJXUsIHBpbyBhbHJlYWR5XG4iLAorCQkJICAgcGQtPnBvcnRfcG9ydCwgcGQtPnBvcnRfcmN2d2FpdF90bywKKwkJCSAgIHBkLT5wb3J0X3Bpb3dhaXRfdG8sIHBkLT5wb3J0X3Jjdm5vd2FpdCwKKwkJCSAgIHBkLT5wb3J0X3Bpb25vd2FpdCk7CisJCXBkLT5wb3J0X3JjdndhaXRfdG8gPSBwZC0+cG9ydF9waW93YWl0X3RvID0KKwkJCXBkLT5wb3J0X3Jjdm5vd2FpdCA9IHBkLT5wb3J0X3Bpb25vd2FpdCA9IDA7CisJfQorCWlmIChwZC0+cG9ydF9mbGFnKSB7CisJCWlwYXRoX2RiZygicG9ydCAldSBwb3J0X2ZsYWcgc3RpbGwgc2V0IHRvIDB4JWx4XG4iLAorCQkJICBwZC0+cG9ydF9wb3J0LCBwZC0+cG9ydF9mbGFnKTsKKwkJcGQtPnBvcnRfZmxhZyA9IDA7CisJfQorCisJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkgeworCQlpZiAocGQtPnBvcnRfcmN2aGRydGFpbF91YWRkcikgeworCQkJcGQtPnBvcnRfcmN2aGRydGFpbF91YWRkciA9IDA7CisJCQlwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciA9IE5VTEw7CisJCQlpcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXNfb25fY2xvc2UoCisJCQkJJnBkLT5wb3J0X3JjdmhkcnRhaWxfcGFnZXAsIDEpOworCQkJcGQtPnBvcnRfcmN2aGRydGFpbF9wYWdlcCA9IE5VTEw7CisJCQlpcGF0aF9zdGF0cy5zcHNfcGFnZXVubG9ja3MrKzsKKwkJfQorCQlpcGF0aF93cml0ZV9rcmVnX3BvcnQoCisJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJ0YWlsYWRkciwKKwkJCXBvcnQsIDBVTEwpOworCQlpcGF0aF93cml0ZV9rcmVnX3BvcnQoCisJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJhZGRyLAorCQkJcGQtPnBvcnRfcG9ydCwgMCk7CisKKwkJLyogY2xlYW4gdXAgdGhlIHBrZXlzIGZvciB0aGlzIHBvcnQgdXNlciAqLworCQlpcGF0aF9jbGVhbl9wYXJ0X2tleShwZCwgZGQpOworCisJCWlmIChwb3J0IDwgZGQtPmlwYXRoX2NmZ3BvcnRzKSB7CisJCQlpbnQgaSA9IGRkLT5pcGF0aF9wYnVmc3BvcnQgKiAocG9ydCAtIDEpOworCQkJaXBhdGhfZGlzYXJtX3Bpb2J1ZnMoZGQsIGksIGRkLT5pcGF0aF9wYnVmc3BvcnQpOworCisJCQkvKiBhdG9taWNhbGx5IGNsZWFyIHJlY2VpdmUgZW5hYmxlIHBvcnQuICovCisJCQljbGVhcl9iaXQoSU5GSU5JUEFUSF9SX1BPUlRFTkFCTEVfU0hJRlQgKyBwb3J0LAorCQkJCSAgJmRkLT5pcGF0aF9yY3ZjdHJsKTsKKwkJCWlwYXRoX3dyaXRlX2tyZWcoCisJCQkJZGQsCisJCQkJZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJCWRkLT5pcGF0aF9yY3ZjdHJsKTsKKworCQkJaWYgKGRkLT5pcGF0aF9wYWdlc2hhZG93KQorCQkJCXVubG9ja19leHBlY3RlZF90aWRzKHBkKTsKKwkJCWlwYXRoX3N0YXRzLnNwc19wb3J0cy0tOworCQkJaXBhdGhfY2RiZyhQUk9DLCAiJXNbJXVdIGNsb3NlZCBwb3J0ICV1OiV1XG4iLAorCQkJCSAgIHBkLT5wb3J0X2NvbW0sIHBkLT5wb3J0X3BpZCwKKwkJCQkgICBkZC0+aXBhdGhfdW5pdCwgcG9ydCk7CisJCX0KKwl9CisKKwlwZC0+cG9ydF9jbnQgPSAwOworCXBkLT5wb3J0X3BpZCA9IDA7CisKKwlkZC0+aXBhdGhfZl9jbGVhcl90aWRzKGRkLCBwZC0+cG9ydF9wb3J0KTsKKworCWlwYXRoX2ZyZWVfcGRkYXRhKGRkLCBwZC0+cG9ydF9wb3J0LCAwKTsKKworCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF9wb3J0X2luZm8oc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwKKwkJCSAgIHN0cnVjdCBpcGF0aF9wb3J0X2luZm8gX191c2VyICp1aW5mbykKK3sKKwlzdHJ1Y3QgaXBhdGhfcG9ydF9pbmZvIGluZm87CisJaW50IG51cDsKKwlpbnQgcmV0OworCisJKHZvaWQpIGlwYXRoX2NvdW50X3VuaXRzKE5VTEwsICZudXAsIE5VTEwpOworCWluZm8ubnVtX2FjdGl2ZSA9IG51cDsKKwlpbmZvLnVuaXQgPSBwZC0+cG9ydF9kZC0+aXBhdGhfdW5pdDsKKwlpbmZvLnBvcnQgPSBwZC0+cG9ydF9wb3J0OworCisJaWYgKGNvcHlfdG9fdXNlcih1aW5mbywgJmluZm8sIHNpemVvZihpbmZvKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsOworCX0KKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlwYXRoX3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCWNvbnN0IHN0cnVjdCBpcGF0aF9jbWQgX191c2VyICp1Y21kOworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQ7CisJY29uc3Qgdm9pZCBfX3VzZXIgKnNyYzsKKwlzaXplX3QgY29uc3VtZWQsIGNvcHk7CisJc3RydWN0IGlwYXRoX2NtZCBjbWQ7CisJc3NpemVfdCByZXQgPSAwOworCXZvaWQgKmRlc3Q7CisKKwlpZiAoY291bnQgPCBzaXplb2YoY21kLnR5cGUpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwl1Y21kID0gKGNvbnN0IHN0cnVjdCBpcGF0aF9jbWQgX191c2VyICopIGRhdGE7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZC50eXBlLCAmdWNtZC0+dHlwZSwgc2l6ZW9mKGNtZC50eXBlKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsOworCX0KKworCWNvbnN1bWVkID0gc2l6ZW9mKGNtZC50eXBlKTsKKworCXN3aXRjaCAoY21kLnR5cGUpIHsKKwljYXNlIElQQVRIX0NNRF9VU0VSX0lOSVQ6CisJCWNvcHkgPSBzaXplb2YoY21kLmNtZC51c2VyX2luZm8pOworCQlkZXN0ID0gJmNtZC5jbWQudXNlcl9pbmZvOworCQlzcmMgPSAmdWNtZC0+Y21kLnVzZXJfaW5mbzsKKwkJYnJlYWs7CisJY2FzZSBJUEFUSF9DTURfUkVDVl9DVFJMOgorCQljb3B5ID0gc2l6ZW9mKGNtZC5jbWQucmVjdl9jdHJsKTsKKwkJZGVzdCA9ICZjbWQuY21kLnJlY3ZfY3RybDsKKwkJc3JjID0gJnVjbWQtPmNtZC5yZWN2X2N0cmw7CisJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1BPUlRfSU5GTzoKKwkJY29weSA9IHNpemVvZihjbWQuY21kLnBvcnRfaW5mbyk7CisJCWRlc3QgPSAmY21kLmNtZC5wb3J0X2luZm87CisJCXNyYyA9ICZ1Y21kLT5jbWQucG9ydF9pbmZvOworCQlicmVhazsKKwljYXNlIElQQVRIX0NNRF9USURfVVBEQVRFOgorCWNhc2UgSVBBVEhfQ01EX1RJRF9GUkVFOgorCQljb3B5ID0gc2l6ZW9mKGNtZC5jbWQudGlkX2luZm8pOworCQlkZXN0ID0gJmNtZC5jbWQudGlkX2luZm87CisJCXNyYyA9ICZ1Y21kLT5jbWQudGlkX2luZm87CisJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1NFVF9QQVJUX0tFWToKKwkJY29weSA9IHNpemVvZihjbWQuY21kLnBhcnRfa2V5KTsKKwkJZGVzdCA9ICZjbWQuY21kLnBhcnRfa2V5OworCQlzcmMgPSAmdWNtZC0+Y21kLnBhcnRfa2V5OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKChjb3VudCAtIGNvbnN1bWVkKSA8IGNvcHkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihkZXN0LCBzcmMsIGNvcHkpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gYmFpbDsKKwl9CisKKwljb25zdW1lZCArPSBjb3B5OworCXBkID0gcG9ydF9mcChmcCk7CisKKwlzd2l0Y2ggKGNtZC50eXBlKSB7CisJY2FzZSBJUEFUSF9DTURfVVNFUl9JTklUOgorCQlyZXQgPSBpcGF0aF9kb191c2VyX2luaXQocGQsICZjbWQuY21kLnVzZXJfaW5mbyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBiYWlsOworCQlyZXQgPSBpcGF0aF9nZXRfYmFzZV9pbmZvKAorCQkJcGQsICh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykKKwkJCWNtZC5jbWQudXNlcl9pbmZvLnNwdV9iYXNlX2luZm8sCisJCQljbWQuY21kLnVzZXJfaW5mby5zcHVfYmFzZV9pbmZvX3NpemUpOworCQlicmVhazsKKwljYXNlIElQQVRIX0NNRF9SRUNWX0NUUkw6CisJCXJldCA9IGlwYXRoX21hbmFnZV9yY3ZxKHBkLCBjbWQuY21kLnJlY3ZfY3RybCk7CisJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1BPUlRfSU5GTzoKKwkJcmV0ID0gaXBhdGhfcG9ydF9pbmZvKHBkLAorCQkJCSAgICAgIChzdHJ1Y3QgaXBhdGhfcG9ydF9pbmZvIF9fdXNlciAqKQorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBjbWQuY21kLnBvcnRfaW5mbyk7CisJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1RJRF9VUERBVEU6CisJCXJldCA9IGlwYXRoX3RpZF91cGRhdGUocGQsICZjbWQuY21kLnRpZF9pbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBJUEFUSF9DTURfVElEX0ZSRUU6CisJCXJldCA9IGlwYXRoX3RpZF9mcmVlKHBkLCAmY21kLmNtZC50aWRfaW5mbyk7CisJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1NFVF9QQVJUX0tFWToKKwkJcmV0ID0gaXBhdGhfc2V0X3BhcnRfa2V5KHBkLCBjbWQuY21kLnBhcnRfa2V5KTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBjb25zdW1lZDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzICppcGF0aF9jbGFzczsKKworc3RhdGljIGludCBpbml0X2NkZXYoaW50IG1pbm9yLCBjaGFyICpuYW1lLCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQkgICAgIHN0cnVjdCBjZGV2ICoqY2RldnAsIHN0cnVjdCBjbGFzc19kZXZpY2UgKipjbGFzc19kZXZwKQoreworCWNvbnN0IGRldl90IGRldiA9IE1LREVWKElQQVRIX01BSk9SLCBtaW5vcik7CisJc3RydWN0IGNkZXYgKmNkZXYgPSBOVUxMOworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9IE5VTEw7CisJaW50IHJldDsKKworCWNkZXYgPSBjZGV2X2FsbG9jKCk7CisJaWYgKCFjZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRQorCQkgICAgICAgIjogQ291bGQgbm90IGFsbG9jYXRlIGNkZXYgZm9yIG1pbm9yICVkLCAlc1xuIiwKKwkJICAgICAgIG1pbm9yLCBuYW1lKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCWNkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY2Rldi0+b3BzID0gZm9wczsKKwlrb2JqZWN0X3NldF9uYW1lKCZjZGV2LT5rb2JqLCBuYW1lKTsKKworCXJldCA9IGNkZXZfYWRkKGNkZXYsIGRldiwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FCisJCSAgICAgICAiOiBDb3VsZCBub3QgYWRkIGNkZXYgZm9yIG1pbm9yICVkLCAlcyAoZXJyICVkKVxuIiwKKwkJICAgICAgIG1pbm9yLCBuYW1lLCAtcmV0KTsKKwkJZ290byBlcnJfY2RldjsKKwl9CisKKwljbGFzc19kZXYgPSBjbGFzc19kZXZpY2VfY3JlYXRlKGlwYXRoX2NsYXNzLCBOVUxMLCBkZXYsIE5VTEwsIG5hbWUpOworCisJaWYgKElTX0VSUihjbGFzc19kZXYpKSB7CisJCXJldCA9IFBUUl9FUlIoY2xhc3NfZGV2KTsKKwkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FICI6IENvdWxkIG5vdCBjcmVhdGUgIgorCQkgICAgICAgImNsYXNzX2RldiBmb3IgbWlub3IgJWQsICVzIChlcnIgJWQpXG4iLAorCQkgICAgICAgbWlub3IsIG5hbWUsIC1yZXQpOworCQlnb3RvIGVycl9jZGV2OworCX0KKworCWdvdG8gZG9uZTsKKworZXJyX2NkZXY6CisJY2Rldl9kZWwoY2Rldik7CisJY2RldiA9IE5VTEw7CisKK2RvbmU6CisJaWYgKHJldCA+PSAwKSB7CisJCSpjZGV2cCA9IGNkZXY7CisJCSpjbGFzc19kZXZwID0gY2xhc3NfZGV2OworCX0gZWxzZSB7CisJCSpjZGV2cCA9IE5VTEw7CisJCSpjbGFzc19kZXZwID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfY2Rldl9pbml0KGludCBtaW5vciwgY2hhciAqbmFtZSwgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJICAgIHN0cnVjdCBjZGV2ICoqY2RldnAsIHN0cnVjdCBjbGFzc19kZXZpY2UgKipjbGFzc19kZXZwKQoreworCXJldHVybiBpbml0X2NkZXYobWlub3IsIG5hbWUsIGZvcHMsIGNkZXZwLCBjbGFzc19kZXZwKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9jZGV2KHN0cnVjdCBjZGV2ICoqY2RldnAsCisJCQkgc3RydWN0IGNsYXNzX2RldmljZSAqKmNsYXNzX2RldnApCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gKmNsYXNzX2RldnA7CisKKwlpZiAoY2xhc3NfZGV2KSB7CisJCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKGNsYXNzX2Rldik7CisJCSpjbGFzc19kZXZwID0gTlVMTDsKKwl9CisKKwlpZiAoKmNkZXZwKSB7CisJCWNkZXZfZGVsKCpjZGV2cCk7CisJCSpjZGV2cCA9IE5VTEw7CisJfQorfQorCit2b2lkIGlwYXRoX2NkZXZfY2xlYW51cChzdHJ1Y3QgY2RldiAqKmNkZXZwLAorCQkJc3RydWN0IGNsYXNzX2RldmljZSAqKmNsYXNzX2RldnApCit7CisJY2xlYW51cF9jZGV2KGNkZXZwLCBjbGFzc19kZXZwKTsKK30KKworc3RhdGljIHN0cnVjdCBjZGV2ICp3aWxkY2FyZF9jZGV2Oworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKndpbGRjYXJkX2NsYXNzX2RldjsKKworc3RhdGljIGNvbnN0IGRldl90IGRldiA9IE1LREVWKElQQVRIX01BSk9SLCAwKTsKKworc3RhdGljIGludCB1c2VyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXYsIElQQVRIX05NSU5PUlMsIElQQVRIX0RSVl9OQU1FKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgSVBBVEhfRFJWX05BTUUgIjogQ291bGQgbm90IHJlZ2lzdGVyICIKKwkJICAgICAgICJjaHJkZXYgcmVnaW9uIChlcnIgJWQpXG4iLCAtcmV0KTsKKwkJZ290byBkb25lOworCX0KKworCWlwYXRoX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBJUEFUSF9EUlZfTkFNRSk7CisKKwlpZiAoSVNfRVJSKGlwYXRoX2NsYXNzKSkgeworCQlyZXQgPSBQVFJfRVJSKGlwYXRoX2NsYXNzKTsKKwkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FICI6IENvdWxkIG5vdCBjcmVhdGUgIgorCQkgICAgICAgImRldmljZSBjbGFzcyAoZXJyICVkKVxuIiwgLXJldCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlnb3RvIGRvbmU7CitiYWlsOgorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXYsIElQQVRIX05NSU5PUlMpOworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1c2VyX2NsZWFudXAodm9pZCkKK3sKKwlpZiAoaXBhdGhfY2xhc3MpIHsKKwkJY2xhc3NfZGVzdHJveShpcGF0aF9jbGFzcyk7CisJCWlwYXRoX2NsYXNzID0gTlVMTDsKKwl9CisKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBJUEFUSF9OTUlOT1JTKTsKK30KKworc3RhdGljIGF0b21pY190IHVzZXJfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBhdG9taWNfdCB1c2VyX3NldHVwID0gQVRPTUlDX0lOSVQoMCk7CisKK2ludCBpcGF0aF91c2VyX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJY2hhciBuYW1lWzEwXTsKKwlpbnQgcmV0OworCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZ1c2VyX2NvdW50KSA9PSAxKSB7CisJCXJldCA9IHVzZXJfaW5pdCgpOworCQlpZiAocmV0IDwgMCkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIlVuYWJsZSB0byBzZXQgdXAgdXNlciBzdXBwb3J0OiAiCisJCQkJICAgICAgImVycm9yICVkXG4iLCAtcmV0KTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlyZXQgPSBpcGF0aF9kaWFnX2luaXQoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJVbmFibGUgdG8gc2V0IHVwIGRpYWcgc3VwcG9ydDogIgorCQkJCSAgICAgICJlcnJvciAlZFxuIiwgLXJldCk7CisJCQlnb3RvIGJhaWxfc21hOworCQl9CisKKwkJcmV0ID0gaW5pdF9jZGV2KDAsICJpcGF0aCIsICZpcGF0aF9maWxlX29wcywgJndpbGRjYXJkX2NkZXYsCisJCQkJJndpbGRjYXJkX2NsYXNzX2Rldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGQgbm90IGNyZWF0ZSB3aWxkY2FyZCAiCisJCQkJICAgICAgIm1pbm9yOiBlcnJvciAlZFxuIiwgLXJldCk7CisJCQlnb3RvIGJhaWxfZGlhZzsKKwkJfQorCisJCWF0b21pY19zZXQoJnVzZXJfc2V0dXAsIDEpOworCX0KKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImlwYXRoJWQiLCBkZC0+aXBhdGhfdW5pdCk7CisKKwlyZXQgPSBpbml0X2NkZXYoZGQtPmlwYXRoX3VuaXQgKyAxLCBuYW1lLCAmaXBhdGhfZmlsZV9vcHMsCisJCQkmZGQtPmNkZXYsICZkZC0+Y2xhc3NfZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkIG5vdCBjcmVhdGUgdXNlciBtaW5vciAlZCwgJXNcbiIsCisJCQkgICAgICBkZC0+aXBhdGhfdW5pdCArIDEsIG5hbWUpOworCisJZ290byBiYWlsOworCitiYWlsX2RpYWc6CisJaXBhdGhfZGlhZ19jbGVhbnVwKCk7CitiYWlsX3NtYToKKwl1c2VyX2NsZWFudXAoKTsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpcGF0aF91c2VyX2RlbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJY2xlYW51cF9jZGV2KCZkZC0+Y2RldiwgJmRkLT5jbGFzc19kZXYpOworCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZ1c2VyX2NvdW50KSA9PSAwKSB7CisJCWlmIChhdG9taWNfcmVhZCgmdXNlcl9zZXR1cCkgPT0gMCkKKwkJCWdvdG8gYmFpbDsKKworCQljbGVhbnVwX2NkZXYoJndpbGRjYXJkX2NkZXYsICZ3aWxkY2FyZF9jbGFzc19kZXYpOworCQlpcGF0aF9kaWFnX2NsZWFudXAoKTsKKwkJdXNlcl9jbGVhbnVwKCk7CisKKwkJYXRvbWljX3NldCgmdXNlcl9zZXR1cCwgMCk7CisJfQorYmFpbDoKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9mcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzQxMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYwpAQCAtMCwwICsxLDYwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorCisjZGVmaW5lIElQQVRIRlNfTUFHSUMgMHg3MjZhNzcKKworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqaXBhdGhfc3VwZXI7CisKK3N0YXRpYyBpbnQgaXBhdGhmc19ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJIGludCBtb2RlLCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQkJIHZvaWQgKmRhdGEpCit7CisJaW50IGVycm9yOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKTsKKworCWlmICghaW5vZGUpIHsKKwkJZXJyb3IgPSAtRVBFUk07CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwlpbm9kZS0+aV91aWQgPSAwOworCWlub2RlLT5pX2dpZCA9IDA7CisJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKKwlpbm9kZS0+aV9ibG9ja3MgPSAwOworCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlpbm9kZS0+dS5nZW5lcmljX2lwID0gZGF0YTsKKwlpZiAoKG1vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpIHsKKwkJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9ubGluaysrOworCQlkaXItPmlfbmxpbmsrKzsKKwl9CisKKwlpbm9kZS0+aV9mb3AgPSBmb3BzOworCisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwllcnJvciA9IDA7CisKK2JhaWw6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkgICAgICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICoqZGVudHJ5LAorCQkgICAgICAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywgdm9pZCAqZGF0YSkKK3sKKwlpbnQgZXJyb3I7CisKKwkqZGVudHJ5ID0gTlVMTDsKKwltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCSpkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCBwYXJlbnQsIHN0cmxlbihuYW1lKSk7CisJaWYgKCFJU19FUlIoZGVudHJ5KSkKKwkJZXJyb3IgPSBpcGF0aGZzX21rbm9kKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwKKwkJCQkgICAgICBtb2RlLCBmb3BzLCBkYXRhKTsKKwllbHNlCisJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOworCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHNzaXplX3QgYXRvbWljX3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCAmaXBhdGhfc3RhdHMsCisJCQkJICAgICAgIHNpemVvZiBpcGF0aF9zdGF0cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0b21pY19zdGF0c19vcHMgPSB7CisJLnJlYWQgPSBhdG9taWNfc3RhdHNfcmVhZCwKK307CisKKyNkZWZpbmUgTlVNX0NPVU5URVJTIHNpemVvZihzdHJ1Y3QgaW5maW5pcGF0aF9jb3VudGVycykgLyBzaXplb2YodTY0KQorCitzdGF0aWMgc3NpemVfdCBhdG9taWNfY291bnRlcnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJdTY0IGNvdW50ZXJzW05VTV9DT1VOVEVSU107CisJdTE2IGk7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgaSsrKQorCQljb3VudGVyc1tpXSA9IGlwYXRoX3NuYXBfY250cihkZCwgaSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgY291bnRlcnMsCisJCQkJICAgICAgIHNpemVvZiBjb3VudGVycyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0b21pY19jb3VudGVyc19vcHMgPSB7CisJLnJlYWQgPSBhdG9taWNfY291bnRlcnNfcmVhZCwKK307CisKK3N0YXRpYyBzc2l6ZV90IGF0b21pY19ub2RlX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXUzMiBub2RlaW5mb1sxMF07CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXU2NCBndWlkOworCisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwOworCisJZ3VpZCA9IGJlNjRfdG9fY3B1KGRkLT5pcGF0aF9ndWlkKTsKKworCW5vZGVpbmZvWzBdID0JCQkvKiBCYXNlVmVyc2lvbiBpcyBTTUEgKi8KKwkJLyogQ2xhc3NWZXJzaW9uIGlzIFNNQSAqLworCQkoMSA8PCA4KQkJLyogTm9kZVR5cGUgICovCisJCXwgKDEgPDwgMCk7CQkvKiBOdW1Qb3J0cyAqLworCW5vZGVpbmZvWzFdID0gKHUzMikgKGd1aWQgPj4gMzIpOworCW5vZGVpbmZvWzJdID0gKHUzMikgKGd1aWQgJiAweGZmZmZmZmZmKTsKKwkvKiBQb3J0R1VJRCA9PSBTeXN0ZW1JbWFnZUdVSUQgZm9yIHVzICovCisJbm9kZWluZm9bM10gPSBub2RlaW5mb1sxXTsKKwkvKiBQb3J0R1VJRCA9PSBTeXN0ZW1JbWFnZUdVSUQgZm9yIHVzICovCisJbm9kZWluZm9bNF0gPSBub2RlaW5mb1syXTsKKwkvKiBQb3J0R1VJRCA9PSBOb2RlR1VJRCBmb3IgdXMgKi8KKwlub2RlaW5mb1s1XSA9IG5vZGVpbmZvWzNdOworCS8qIFBvcnRHVUlEID09IE5vZGVHVUlEIGZvciB1cyAqLworCW5vZGVpbmZvWzZdID0gbm9kZWluZm9bNF07CisJbm9kZWluZm9bN10gPSAoNCA8PCAxNikgLyogd2Ugc3VwcG9ydCA0IHBrZXlzICovCisJCXwgKGRkLT5pcGF0aF9kZXZpY2VpZCA8PCAwKTsKKwkvKiBvdXIgY2hpcCB2ZXJzaW9uIGFzIDE2IGJpdHMgbWFqb3IsIDE2IGJpdHMgbWlub3IgKi8KKwlub2RlaW5mb1s4XSA9IGRkLT5pcGF0aF9taW5yZXYgfCAoZGQtPmlwYXRoX21hanJldiA8PCAxNik7CisJbm9kZWluZm9bOV0gPSAoZGQtPmlwYXRoX3VuaXQgPDwgMjQpIHwgKGRkLT5pcGF0aF92ZW5kb3JpZCA8PCAwKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBub2RlaW5mbywKKwkJCQkgICAgICAgc2l6ZW9mIG5vZGVpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXRvbWljX25vZGVfaW5mb19vcHMgPSB7CisJLnJlYWQgPSBhdG9taWNfbm9kZV9pbmZvX3JlYWQsCit9OworCitzdGF0aWMgc3NpemVfdCBhdG9taWNfcG9ydF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwl1MzIgcG9ydGluZm9bMTNdOworCXUzMiB0bXAsIHRtcDI7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwOworCisJLyogc28gd2Ugb25seSBpbml0aWFsaXplIG5vbi16ZXJvIGZpZWxkcy4gKi8KKwltZW1zZXQocG9ydGluZm8sIDAsIHNpemVvZiBwb3J0aW5mbyk7CisKKwkvKgorCSAqIE5vdGltcGwgeWV0IE1fS2V5ICg2NCkKKwkgKiBOb3RpbXBsIHlldCBHSUQgKDY0KQorCSAqLworCisJcG9ydGluZm9bNF0gPSAoZGQtPmlwYXRoX2xpZCA8PCAxNik7CisKKwkvKgorCSAqIE5vdGltcGwgeWV0IFNNTElEIChzaG91bGQgd2Ugc3RvcmUgdGhpcyBpbiB0aGUgZHJpdmVyLCBpbiBjYXNlCisJICogU01BIGRpZXM/KSAgQ2FwYWJpbGl0eU1hc2sgaXMgMCwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgb2YgdGhlc2UKKwkgKiBEaWFnQ29kZSBpcyAwOyB3ZSBkb24ndCBzdG9yZSBhbnkgZGlhZyBpbmZvIGZvciBub3cgTm90aW1wbCB5ZXQKKwkgKiBNX0tleUxlYXNlUGVyaW9kICh3ZSBkb24ndCBzdXBwb3J0IE1fS2V5KQorCSAqLworCisJLyogTG9jYWxQb3J0TnVtIGlzIHdoaWNoZXZlciBwb3J0IG51bWJlciB0aGV5IGFzayBmb3IgKi8KKwlwb3J0aW5mb1s3XSA9IChkZC0+aXBhdGhfdW5pdCA8PCAyNCkKKwkJLyogTGlua1dpZHRoRW5hYmxlZCAqLworCQl8ICgyIDw8IDE2KQorCQkvKiBMaW5rV2lkdGhTdXBwb3J0ZWQgKHJlYWxseSAyLCBidXQgbm90IElCIHZhbGlkKSAqLworCQl8ICgzIDw8IDgpCisJCS8qIExpbmtXaWR0aEFjdGl2ZSAqLworCQl8ICgyIDw8IDApOworCXRtcCA9IGRkLT5pcGF0aF9sYXN0aWJjc3RhdCAmIElQQVRIX0lCU1RBVEVfTUFTSzsKKwl0bXAyID0gNTsKKwlpZiAodG1wID09IElQQVRIX0lCU1RBVEVfSU5JVCkKKwkJdG1wID0gMjsKKwllbHNlIGlmICh0bXAgPT0gSVBBVEhfSUJTVEFURV9BUk0pCisJCXRtcCA9IDM7CisJZWxzZSBpZiAodG1wID09IElQQVRIX0lCU1RBVEVfQUNUSVZFKQorCQl0bXAgPSA0OworCWVsc2UgeworCQl0bXAgPSAwOwkvKiBkb3duICovCisJCXRtcDIgPSB0bXAgJiAweGY7CisJfQorCisJcG9ydGluZm9bOF0gPSAoMSA8PCAyOCkJLyogTGlua1NwZWVkU3VwcG9ydGVkICovCisJCXwgKHRtcCA8PCAyNCkJLyogUG9ydFN0YXRlICovCisJCXwgKHRtcDIgPDwgMjApCS8qIFBvcnRQaHlzaWNhbFN0YXRlICovCisJCXwgKDIgPDwgMTYpCisKKwkJLyogTGlua0Rvd25EZWZhdWx0U3RhdGUgKi8KKwkJLyogTV9LZXlQcm90ZWN0Qml0cyA9PSAwICovCisJCS8qIE5vdEltcGwgeWV0IExNQyA9PSAwICh3ZSBjYW4gc3VwcG9ydCBhbGwgdmFsdWVzKSAqLworCQl8ICgxIDw8IDQpCS8qIExpbmtTcGVlZEFjdGl2ZSAqLworCQl8ICgxIDw8IDApOwkvKiBMaW5rU3BlZWRFbmFibGVkICovCisJc3dpdGNoIChkZC0+aXBhdGhfaWJtdHUpIHsKKwljYXNlIDQwOTY6CisJCXRtcCA9IDU7CisJCWJyZWFrOworCWNhc2UgMjA0ODoKKwkJdG1wID0gNDsKKwkJYnJlYWs7CisJY2FzZSAxMDI0OgorCQl0bXAgPSAzOworCQlicmVhazsKKwljYXNlIDUxMjoKKwkJdG1wID0gMjsKKwkJYnJlYWs7CisJY2FzZSAyNTY6CisJCXRtcCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiBvb3BzLCBzb21ldGhpbmcgaXMgd3JvbmcgKi8KKwkJaXBhdGhfZGJnKCJQcm9ibGVtLCBpcGF0aF9pYm10dSAweCV4IG5vdCBhIHZhbGlkIElCIE1UVSwgIgorCQkJICAidHJlYXQgYXMgMjA0OFxuIiwgZGQtPmlwYXRoX2libXR1KTsKKwkJdG1wID0gNDsKKwkJYnJlYWs7CisJfQorCXBvcnRpbmZvWzldID0gKHRtcCA8PCAyOCkKKwkJLyogTmVpZ2hib3JNVFUgKi8KKwkJLyogTm90aW1wbCBNYXN0ZXJTTVNMICovCisJCXwgKDEgPDwgMjApCisKKwkJLyogVkxDYXAgKi8KKwkJLyogTm90aW1wbCBJbml0VHlwZSAoYWN0dWFsbHksIGFuIFNNQSBkZWNpc2lvbikgKi8KKwkJLyogVkxIaWdoTGltaXQgaXMgMCAob25seSBvbmUgVkwpICovCisJCTsgLyogVkxBcmJpdHJhdGlvbkhpZ2hDYXAgaXMgMCAob25seSBvbmUgVkwpICovCisJcG9ydGluZm9bMTBdID0gCS8qIFZMQXJiaXRyYXRpb25Mb3dDYXAgaXMgMCAob25seSBvbmUgVkwpICovCisJCS8qIEluaXRUeXBlUmVwbHkgaXMgU01BIGRlY2lzaW9uICovCisJCSg1IDw8IDE2KQkvKiBNVFVDYXAgNDA5NiAqLworCQl8ICg3IDw8IDEzKQkvKiBWTFN0YWxsQ291bnQgKi8KKwkJfCAoMHgxZiA8PCA4KQkvKiBIT1FMaWZlICovCisJCXwgKDEgPDwgNCkKKworCQkvKiBPcGVyYXRpb25hbFZMcyAwICovCisJCS8qIFBhcnRpdGlvbkVuZm9yY2VtZW50SW5ib3VuZCAqLworCQkvKiBQYXJ0aXRpb25FbmZvcmNlbWVudE91dGJvdW5kIG5vdCBlbmZvcmNlZCAqLworCQkvKiBGaWx0ZXJSYXdpbmJvdW5kIG5vdCBlbmZvcmNlZCAqLworCQk7CQkvKiBGaWx0ZXJSYXdPdXRib3VuZCBub3QgZW5mb3JjZWQgKi8KKwkvKiBNX0tleVZpb2xhdGlvbnMgYXJlIG5vdCBjb3VudGVkIGJ5IGhhcmR3YXJlLCBTTUEgY2FuIGNvdW50ICovCisJdG1wID0gaXBhdGhfcmVhZF9jcmVnMzIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJycGtleSk7CisJLyogUF9LZXlWaW9sYXRpb25zIGFyZSBjb3VudGVkIGJ5IGhhcmR3YXJlLiAqLworCXBvcnRpbmZvWzExXSA9ICgodG1wICYgMHhmZmZmKSA8PCAwKTsKKwlwb3J0aW5mb1sxMl0gPQorCQkvKiBRX0tleVZpb2xhdGlvbnMgYXJlIG5vdCBjb3VudGVkIGJ5IGhhcmR3YXJlICovCisJCSgxIDw8IDgpCisKKwkJLyogR1VJRENhcCAqLworCQkvKiBTdWJuZXRUaW1lT3V0IGhhbmRsZWQgYnkgU01BICovCisJCS8qIFJlc3BUaW1lVmFsdWUgaGFuZGxlZCBieSBTTUEgKi8KKwkJOworCS8qIExvY2FsUGh5RXJyb3JzIGFyZSBwcm9ncmFtbWVkIHRvIG1heCAqLworCXBvcnRpbmZvWzEyXSB8PSAoMHhmIDw8IDIwKQorCQl8ICgweGYgPDwgMTYpICAgLyogT3ZlclJ1bkVycm9ycyBhcmUgcHJvZ3JhbW1lZCB0byBtYXggKi8KKwkJOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIHBvcnRpbmZvLAorCQkJCSAgICAgICBzaXplb2YgcG9ydGluZm8pOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdG9taWNfcG9ydF9pbmZvX29wcyA9IHsKKwkucmVhZCA9IGF0b21pY19wb3J0X2luZm9fcmVhZCwKK307CisKK3N0YXRpYyBzc2l6ZV90IGZsYXNoX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwlzc2l6ZV90IHJldDsKKwlsb2ZmX3QgcG9zOworCWNoYXIgKnRtcDsKKworCXBvcyA9ICpwcG9zOworCisJaWYgKCBwb3MgPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAocG9zID49IHNpemVvZihzdHJ1Y3QgaXBhdGhfZmxhc2gpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoY291bnQgPiBzaXplb2Yoc3RydWN0IGlwYXRoX2ZsYXNoKSAtIHBvcykKKwkJY291bnQgPSBzaXplb2Yoc3RydWN0IGlwYXRoX2ZsYXNoKSAtIHBvczsKKworCXRtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdG1wKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisKKwlkZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CisJaWYgKGlwYXRoX2VlcHJvbV9yZWFkKGRkLCBwb3MsIHRtcCwgY291bnQpKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gcmVhZCBmcm9tIGZsYXNoXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGJhaWxfdG1wOworCX0KKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCB0bXAsIGNvdW50KSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGJhaWxfdG1wOworCX0KKworCSpwcG9zID0gcG9zICsgY291bnQ7CisJcmV0ID0gY291bnQ7CisKK2JhaWxfdG1wOgorCWtmcmVlKHRtcCk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJc3NpemVfdCByZXQ7CisJbG9mZl90IHBvczsKKwljaGFyICp0bXA7CisKKwlwb3MgPSAqcHBvczsKKworCWlmICggcG9zIDwgMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKHBvcyA+PSBzaXplb2Yoc3RydWN0IGlwYXRoX2ZsYXNoKSkgeworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGNvdW50ID4gc2l6ZW9mKHN0cnVjdCBpcGF0aF9mbGFzaCkgLSBwb3MpCisJCWNvdW50ID0gc2l6ZW9mKHN0cnVjdCBpcGF0aF9mbGFzaCkgLSBwb3M7CisKKwl0bXAgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKHRtcCwgYnVmLCBjb3VudCkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsX3RtcDsKKwl9CisKKwlkZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CisJaWYgKGlwYXRoX2VlcHJvbV93cml0ZShkZCwgcG9zLCB0bXAsIGNvdW50KSkgeworCQlyZXQgPSAtRU5YSU87CisJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gd3JpdGUgdG8gZmxhc2hcbiIpOworCQlnb3RvIGJhaWxfdG1wOworCX0KKworCSpwcG9zID0gcG9zICsgY291bnQ7CisJcmV0ID0gY291bnQ7CisKK2JhaWxfdG1wOgorCWtmcmVlKHRtcCk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmxhc2hfb3BzID0geworCS5yZWFkID0gZmxhc2hfcmVhZCwKKwkud3JpdGUgPSBmbGFzaF93cml0ZSwKK307CisKK3N0YXRpYyBpbnQgY3JlYXRlX2RldmljZV9maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJICAgICAgIHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIsICp0bXA7CisJY2hhciB1bml0WzEwXTsKKwlpbnQgcmV0OworCisJc25wcmludGYodW5pdCwgc2l6ZW9mIHVuaXQsICIlMDJkIiwgZGQtPmlwYXRoX3VuaXQpOworCXJldCA9IGNyZWF0ZV9maWxlKHVuaXQsIFNfSUZESVJ8U19JUlVHT3xTX0lYVUdPLCBzYi0+c19yb290LCAmZGlyLAorCQkJICAoc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqKSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zLAorCQkJICBkZCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImNyZWF0ZV9maWxlKCVzKSBmYWlsZWQ6ICVkXG4iLCB1bml0LCByZXQpOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gY3JlYXRlX2ZpbGUoImF0b21pY19jb3VudGVycyIsIFNfSUZSRUd8U19JUlVHTywgZGlyLCAmdG1wLAorCQkJICAmYXRvbWljX2NvdW50ZXJzX29wcywgZGQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcmVhdGVfZmlsZSglcy9hdG9taWNfY291bnRlcnMpICIKKwkJICAgICAgICJmYWlsZWQ6ICVkXG4iLCB1bml0LCByZXQpOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gY3JlYXRlX2ZpbGUoIm5vZGVfaW5mbyIsIFNfSUZSRUd8U19JUlVHTywgZGlyLCAmdG1wLAorCQkJICAmYXRvbWljX25vZGVfaW5mb19vcHMsIGRkKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3JlYXRlX2ZpbGUoJXMvbm9kZV9pbmZvKSAiCisJCSAgICAgICAiZmFpbGVkOiAlZFxuIiwgdW5pdCwgcmV0KTsKKwkJZ290byBiYWlsOworCX0KKworCXJldCA9IGNyZWF0ZV9maWxlKCJwb3J0X2luZm8iLCBTX0lGUkVHfFNfSVJVR08sIGRpciwgJnRtcCwKKwkJCSAgJmF0b21pY19wb3J0X2luZm9fb3BzLCBkZCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImNyZWF0ZV9maWxlKCVzL3BvcnRfaW5mbykgIgorCQkgICAgICAgImZhaWxlZDogJWRcbiIsIHVuaXQsIHJldCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSBjcmVhdGVfZmlsZSgiZmxhc2giLCBTX0lGUkVHfFNfSVdVU1J8U19JUlVHTywgZGlyLCAmdG1wLAorCQkJICAmZmxhc2hfb3BzLCBkZCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImNyZWF0ZV9maWxlKCVzL2ZsYXNoKSAiCisJCSAgICAgICAiZmFpbGVkOiAlZFxuIiwgdW5pdCwgcmV0KTsKKwkJZ290byBiYWlsOworCX0KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZmlsZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRlbnRyeSAqdG1wOworCisJdG1wID0gbG9va3VwX29uZV9sZW4obmFtZSwgcGFyZW50LCBzdHJsZW4obmFtZSkpOworCisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZ0bXAtPmRfbG9jayk7CisJaWYgKCEoZF91bmhhc2hlZCh0bXApICYmIHRtcC0+ZF9pbm9kZSkpIHsKKwkJZGdldF9sb2NrZWQodG1wKTsKKwkJX19kX2Ryb3AodG1wKTsKKwkJc3Bpbl91bmxvY2soJnRtcC0+ZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJc2ltcGxlX3VubGluayhwYXJlbnQtPmRfaW5vZGUsIHRtcCk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJnRtcC0+ZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2RldmljZV9maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJICAgICAgIHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpyb290OworCWNoYXIgdW5pdFsxMF07CisJaW50IHJldDsKKworCXJvb3QgPSBkZ2V0KHNiLT5zX3Jvb3QpOworCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCXNucHJpbnRmKHVuaXQsIHNpemVvZiB1bml0LCAiJTAyZCIsIGRkLT5pcGF0aF91bml0KTsKKwlkaXIgPSBsb29rdXBfb25lX2xlbih1bml0LCByb290LCBzdHJsZW4odW5pdCkpOworCisJaWYgKElTX0VSUihkaXIpKSB7CisJCXJldCA9IFBUUl9FUlIoZGlyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMb29rdXAgb2YgJXMgZmFpbGVkXG4iLCB1bml0KTsKKwkJZ290byBiYWlsOworCX0KKworCXJlbW92ZV9maWxlKGRpciwgImZsYXNoIik7CisJcmVtb3ZlX2ZpbGUoZGlyLCAicG9ydF9pbmZvIik7CisJcmVtb3ZlX2ZpbGUoZGlyLCAibm9kZV9pbmZvIik7CisJcmVtb3ZlX2ZpbGUoZGlyLCAiYXRvbWljX2NvdW50ZXJzIik7CisJZF9kZWxldGUoZGlyKTsKKwlyZXQgPSBzaW1wbGVfcm1kaXIocm9vdC0+ZF9pbm9kZSwgZGlyKTsKKworYmFpbDoKKwltdXRleF91bmxvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCWRwdXQocm9vdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgIGludCBzaWxlbnQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXN0YXRpYyBzdHJ1Y3QgdHJlZV9kZXNjciBmaWxlc1tdID0geworCQlbMV0gPSB7ImF0b21pY19zdGF0cyIsICZhdG9taWNfc3RhdHNfb3BzLCBTX0lSVUdPfSwKKwkJeyIifSwKKwl9OworCisJcmV0ID0gc2ltcGxlX2ZpbGxfc3VwZXIoc2IsIElQQVRIRlNfTUFHSUMsIGZpbGVzKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2ltcGxlX2ZpbGxfc3VwZXIgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBiYWlsOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZCwgdG1wLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisJCXJldCA9IGNyZWF0ZV9kZXZpY2VfZmlsZXMoc2IsIGRkKTsKKwkJaWYgKHJldCkgeworCQkJZGVhY3RpdmF0ZV9zdXBlcihzYik7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmlwYXRoZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAorCQkJCSAgICAgICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKKwkJCQkJdm9pZCAqZGF0YSkKK3sKKwlpcGF0aF9zdXBlciA9IGdldF9zYl9zaW5nbGUoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsCisJCQkJICAgIGlwYXRoZnNfZmlsbF9zdXBlcik7CisJcmV0dXJuIGlwYXRoX3N1cGVyOworfQorCitzdGF0aWMgdm9pZCBpcGF0aGZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCWtpbGxfbGl0dGVyX3N1cGVyKHMpOworCWlwYXRoX3N1cGVyID0gTlVMTDsKK30KKworaW50IGlwYXRoZnNfYWRkX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldDsKKworCWlmIChpcGF0aF9zdXBlciA9PSBOVUxMKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSBjcmVhdGVfZGV2aWNlX2ZpbGVzKGlwYXRoX3N1cGVyLCBkZCk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworaW50IGlwYXRoZnNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldDsKKworCWlmIChpcGF0aF9zdXBlciA9PSBOVUxMKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSByZW1vdmVfZGV2aWNlX2ZpbGVzKGlwYXRoX3N1cGVyLCBkZCk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGlwYXRoZnNfZnNfdHlwZSA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiaXBhdGhmcyIsCisJLmdldF9zYiA9CWlwYXRoZnNfZ2V0X3NiLAorCS5raWxsX3NiID0JaXBhdGhmc19raWxsX3N1cGVyLAorfTsKKworaW50IF9faW5pdCBpcGF0aF9pbml0X2lwYXRoZnModm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmaXBhdGhmc19mc190eXBlKTsKK30KKwordm9pZCBfX2V4aXQgaXBhdGhfZXhpdF9pcGF0aGZzKHZvaWQpCit7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZpcGF0aGZzX2ZzX3R5cGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2h0NDAwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaHQ0MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWMwYTJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2h0NDAwLmMKQEAgLTAsMCArMSwxNjAzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgb2YgdGhlIGNvZGUgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgSW5maW5pUGF0aAorICogSFQtNDAwIGNoaXAuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKyNpbmNsdWRlICJpcGF0aF9yZWdpc3RlcnMuaCIKKworLyoKKyAqIFRoaXMgbGlzdHMgdGhlIEluZmluaVBhdGggSFQ0MDAgcmVnaXN0ZXJzLCBpbiB0aGUgYWN0dWFsIGNoaXAgbGF5b3V0LgorICogVGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIG5ldmVyIGJlIGRpcmVjdGx5IGFjY2Vzc2VkLgorICoKKyAqIFRoZSBuYW1lcyBhcmUgaW4gSW50ZXJDYXAgZm9ybSBiZWNhdXNlIHRoZXkncmUgdGFrZW4gc3RyYWlnaHQgZnJvbQorICogdGhlIGNoaXAgc3BlY2lmaWNhdGlvbi4gIFNpbmNlIHRoZXkncmUgb25seSB1c2VkIGluIHRoaXMgZmlsZSwgdGhleQorICogZG9uJ3QgcG9sbHV0ZSB0aGUgcmVzdCBvZiB0aGUgc291cmNlLgorKi8KKworc3RydWN0IF9pbmZpbmlwYXRoX2RvX25vdF91c2Vfa2VybmVsX3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXZpc2lvbjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgQ29udHJvbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUGFnZUFsaWduOworCXVuc2lnbmVkIGxvbmcgbG9uZyBQb3J0Q250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBEZWJ1Z1BvcnRTZWxlY3Q7CisJdW5zaWduZWQgbG9uZyBsb25nIERlYnVnUG9ydDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFJlZ0Jhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFVzZXJSZWdCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBDb3VudGVyUmVnQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2NyYXRjaDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWRNaXNjMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSW50ZXJydXB0Q29uZmlnOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJbnRCbG9ja2VkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJbnRNYXNrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJbnRTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEludENsZWFyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFcnJvck1hc2s7CisJdW5zaWduZWQgbG9uZyBsb25nIEVycm9yU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFcnJvckNsZWFyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBId0Vyck1hc2s7CisJdW5zaWduZWQgbG9uZyBsb25nIEh3RXJyU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBId0VyckNsZWFyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBId0RpYWdDdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBNRElPOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJQkNTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIElCQ0N0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIEV4dFN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRXh0Q3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgR1BJT091dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgR1BJT01hc2s7CisJdW5zaWduZWQgbG9uZyBsb25nIEdQSU9TdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEdQSU9DbGVhcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2Q3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2QlRIUVA7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckNudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyRW50U2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2VElEQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2VElEQ250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZFZ3JCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZFZ3JDbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkJ1ZkJhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkJ1ZlNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJ4SW50TWVtQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUnhJbnRNZW1TaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZQYXJ0aXRpb25LZXk7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkUmN2WzEwXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEN0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRQSU9CdWZCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kUElPU2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFBJT0J1ZkNudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFBJT0F2YWlsQWRkcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgVHhJbnRNZW1CYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBUeEludE1lbVNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkU2VuZFs5XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEJ1ZmZlckVycm9yOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kQnVmZmVyRXJyb3JDT05UMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEJ1ZmZlckVycm9yQ09OVDI7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRCdWZmZXJFcnJvckNPTlQzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZFNCRVs0XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjA7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHIxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyMjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjM7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHI0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyNTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjY7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHI3OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyODsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWRSSEFbN107CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHIxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjI7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyMzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHI0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyNjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHI3OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjg7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkUkhUQVs3XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU3luYzsJLyogU29mdHdhcmUgb25seSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBEdW1wOwkvKiBTb2Z0d2FyZSBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBsb25nIFNpbVZlcjsJLyogU29mdHdhcmUgb25seSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZFNXWzVdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZXJkZXNDb25maWcwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZXJkZXNDb25maWcxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZXJkZXNTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIFhHWFNDb25maWc7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkU1cyWzRdOworfTsKKworI2RlZmluZSBJUEFUSF9LUkVHX09GRlNFVChmaWVsZCkgKG9mZnNldG9mKHN0cnVjdCBcCisgICAgX2luZmluaXBhdGhfZG9fbm90X3VzZV9rZXJuZWxfcmVncywgZmllbGQpIC8gc2l6ZW9mKHU2NCkpCisjZGVmaW5lIElQQVRIX0NSRUdfT0ZGU0VUKGZpZWxkKSAob2Zmc2V0b2YoIFwKKyAgICBzdHJ1Y3QgaW5maW5pcGF0aF9jb3VudGVycywgZmllbGQpIC8gc2l6ZW9mKHU2NCkpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXBhdGhfa3JlZ3MgaXBhdGhfaHRfa3JlZ3MgPSB7CisJLmtyX2NvbnRyb2wgPSBJUEFUSF9LUkVHX09GRlNFVChDb250cm9sKSwKKwkua3JfY291bnRlcnJlZ2Jhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChDb3VudGVyUmVnQmFzZSksCisJLmtyX2RlYnVncG9ydCA9IElQQVRIX0tSRUdfT0ZGU0VUKERlYnVnUG9ydCksCisJLmtyX2RlYnVncG9ydHNlbGVjdCA9IElQQVRIX0tSRUdfT0ZGU0VUKERlYnVnUG9ydFNlbGVjdCksCisJLmtyX2Vycm9yY2xlYXIgPSBJUEFUSF9LUkVHX09GRlNFVChFcnJvckNsZWFyKSwKKwkua3JfZXJyb3JtYXNrID0gSVBBVEhfS1JFR19PRkZTRVQoRXJyb3JNYXNrKSwKKwkua3JfZXJyb3JzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChFcnJvclN0YXR1cyksCisJLmtyX2V4dGN0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChFeHRDdHJsKSwKKwkua3JfZXh0c3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoRXh0U3RhdHVzKSwKKwkua3JfZ3Bpb19jbGVhciA9IElQQVRIX0tSRUdfT0ZGU0VUKEdQSU9DbGVhciksCisJLmtyX2dwaW9fbWFzayA9IElQQVRIX0tSRUdfT0ZGU0VUKEdQSU9NYXNrKSwKKwkua3JfZ3Bpb19vdXQgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPT3V0KSwKKwkua3JfZ3Bpb19zdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPU3RhdHVzKSwKKwkua3JfaHdkaWFnY3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RGlhZ0N0cmwpLAorCS5rcl9od2VycmNsZWFyID0gSVBBVEhfS1JFR19PRkZTRVQoSHdFcnJDbGVhciksCisJLmtyX2h3ZXJybWFzayA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RXJyTWFzayksCisJLmtyX2h3ZXJyc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoSHdFcnJTdGF0dXMpLAorCS5rcl9pYmNjdHJsID0gSVBBVEhfS1JFR19PRkZTRVQoSUJDQ3RybCksCisJLmtyX2liY3N0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKElCQ1N0YXR1cyksCisJLmtyX2ludGJsb2NrZWQgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRCbG9ja2VkKSwKKwkua3JfaW50Y2xlYXIgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRDbGVhciksCisJLmtyX2ludGVycnVwdGNvbmZpZyA9IElQQVRIX0tSRUdfT0ZGU0VUKEludGVycnVwdENvbmZpZyksCisJLmtyX2ludG1hc2sgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRNYXNrKSwKKwkua3JfaW50c3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoSW50U3RhdHVzKSwKKwkua3JfbWRpbyA9IElQQVRIX0tSRUdfT0ZGU0VUKE1ESU8pLAorCS5rcl9wYWdlYWxpZ24gPSBJUEFUSF9LUkVHX09GRlNFVChQYWdlQWxpZ24pLAorCS5rcl9wYXJ0aXRpb25rZXkgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZQYXJ0aXRpb25LZXkpLAorCS5rcl9wb3J0Y250ID0gSVBBVEhfS1JFR19PRkZTRVQoUG9ydENudCksCisJLmtyX3JjdmJ0aHFwID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2QlRIUVApLAorCS5rcl9yY3ZidWZiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2QnVmQmFzZSksCisJLmtyX3JjdmJ1ZnNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZCdWZTaXplKSwKKwkua3JfcmN2Y3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkN0cmwpLAorCS5rcl9yY3ZlZ3JiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2RWdyQmFzZSksCisJLmtyX3JjdmVncmNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkVnckNudCksCisJLmtyX3JjdmhkcmNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkckNudCksCisJLmtyX3JjdmhkcmVudHNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJFbnRTaXplKSwKKwkua3JfcmN2aGRyc2l6ZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkclNpemUpLAorCS5rcl9yY3ZpbnRtZW1iYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUnhJbnRNZW1CYXNlKSwKKwkua3JfcmN2aW50bWVtc2l6ZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJ4SW50TWVtU2l6ZSksCisJLmtyX3JjdnRpZGJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZUSURCYXNlKSwKKwkua3JfcmN2dGlkY250ID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2VElEQ250KSwKKwkua3JfcmV2aXNpb24gPSBJUEFUSF9LUkVHX09GRlNFVChSZXZpc2lvbiksCisJLmtyX3NjcmF0Y2ggPSBJUEFUSF9LUkVHX09GRlNFVChTY3JhdGNoKSwKKwkua3Jfc2VuZGJ1ZmZlcmVycm9yID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZEJ1ZmZlckVycm9yKSwKKwkua3Jfc2VuZGN0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kQ3RybCksCisJLmtyX3NlbmRwaW9hdmFpbGFkZHIgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kUElPQXZhaWxBZGRyKSwKKwkua3Jfc2VuZHBpb2J1ZmJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kUElPQnVmQmFzZSksCisJLmtyX3NlbmRwaW9idWZjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kUElPQnVmQ250KSwKKwkua3Jfc2VuZHBpb3NpemUgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kUElPU2l6ZSksCisJLmtyX3NlbmRyZWdiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFJlZ0Jhc2UpLAorCS5rcl90eGludG1lbWJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChUeEludE1lbUJhc2UpLAorCS5rcl90eGludG1lbXNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChUeEludE1lbVNpemUpLAorCS5rcl91c2VycmVnYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFVzZXJSZWdCYXNlKSwKKwkua3Jfc2VyZGVzY29uZmlnMCA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlcmRlc0NvbmZpZzApLAorCS5rcl9zZXJkZXNjb25maWcxID0gSVBBVEhfS1JFR19PRkZTRVQoU2VyZGVzQ29uZmlnMSksCisJLmtyX3NlcmRlc3N0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlcmRlc1N0YXR1cyksCisJLmtyX3hneHNjb25maWcgPSBJUEFUSF9LUkVHX09GRlNFVChYR1hTQ29uZmlnKSwKKwkvKgorCSAqIFRoZXNlIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSB2aWEgaXBhdGhfcmVhZF9rcmVnNjQoKSwKKwkgKiB1c2UgdGhlbSB3aXRoIGlwYXRoX3JlYWRfa3JlZzY0X3BvcnQoKSwKKwkgKi8KKwkua3JfcmN2aGRyYWRkciA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkckFkZHIwKSwKKwkua3JfcmN2aGRydGFpbGFkZHIgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJUYWlsQWRkcjApCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlwYXRoX2NyZWdzIGlwYXRoX2h0X2NyZWdzID0geworCS5jcl9iYWRmb3JtYXRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEJhZEZvcm1hdENudCksCisJLmNyX2VycmljcmNjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeElDUkNFcnJDbnQpLAorCS5jcl9lcnJsaW5rY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhMaW5rUHJvYmxlbUNudCksCisJLmNyX2VycmxwY3JjY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhMUENSQ0VyckNudCksCisJLmNyX2VycnBrZXkgPSBJUEFUSF9DUkVHX09GRlNFVChSeFBLZXlNaXNtYXRjaENudCksCisJLmNyX2VycnJjdmZsb3djdHJsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhGbG93Q3RybEVyckNudCksCisJLmNyX2Vycl9ybGVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhMZW5FcnJDbnQpLAorCS5jcl9lcnJzbGVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhMZW5FcnJDbnQpLAorCS5jcl9lcnJ0aWRmdWxsID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhUSURGdWxsRXJyQ250KSwKKwkuY3JfZXJydGlkdmFsaWQgPSBJUEFUSF9DUkVHX09GRlNFVChSeFRJRFZhbGlkRXJyQ250KSwKKwkuY3JfZXJydmNyY2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4VkNSQ0VyckNudCksCisJLmNyX2lic3RhdHVzY2hhbmdlID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJTdGF0dXNDaGFuZ2VDbnQpLAorCS8qIGNhbGMgZnJvbSBSZWdfQ291bnRlclJlZ0Jhc2UgKyBvZmZzZXQgKi8KKwkuY3JfaW50Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoTEJJbnRDbnQpLAorCS5jcl9pbnZhbGlkcmxlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TWF4TWluTGVuRXJyQ250KSwKKwkuY3JfaW52YWxpZHNsZW5jbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeE1heE1pbkxlbkVyckNudCksCisJLmNyX2xiZmxvd3N0YWxsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoTEJGbG93U3RhbGxDbnQpLAorCS5jcl9wa3RyY3ZjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeERhdGFQa3RDbnQpLAorCS5jcl9wa3RyY3ZmbG93Y3RybGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4Rmxvd1BrdENudCksCisJLmNyX3BrdHNlbmRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeERhdGFQa3RDbnQpLAorCS5jcl9wa3RzZW5kZmxvd2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4Rmxvd1BrdENudCksCisJLmNyX3BvcnRvdmZsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhQMEhkckVnck92ZmxDbnQpLAorCS5jcl9yY3ZlYnBjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEVCUENudCksCisJLmNyX3Jjdm92ZmxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEJ1Zk92ZmxDbnQpLAorCS5jcl9zZW5kZHJvcHBlZCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4RHJvcHBlZFBrdENudCksCisJLmNyX3NlbmRzdGFsbGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4Rmxvd1N0YWxsQ250KSwKKwkuY3Jfc2VuZHVuZGVycnVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhVbmRlcnJ1bkNudCksCisJLmNyX3dvcmRyY3ZjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeER3b3JkQ250KSwKKwkuY3Jfd29yZHNlbmRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeER3b3JkQ250KSwKKwkuY3JfdW5zdXB2bGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4VW5zdXBWTEVyckNudCksCisJLmNyX3J4ZHJvcHBrdGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4RHJvcHBlZFBrdENudCksCisJLmNyX2libGlua2VycnJlY292Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJMaW5rRXJyUmVjb3ZlcnlDbnQpLAorCS5jcl9pYmxpbmtkb3duY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJMaW5rRG93bmVkQ250KSwKKwkuY3JfaWJzeW1ib2xlcnJjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChJQlN5bWJvbEVyckNudCkKK307CisKKy8qIGtyX2ludHN0YXR1cywga3JfaW50Y2xlYXIsIGtyX2ludG1hc2sgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWVVJHX01BU0sgMHgxRkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0sgMHgxRkYKKworLyoga3JfaHdlcnJjbGVhciwga3JfaHdlcnJtYXNrLCBrcl9od2VycnN0YXR1cywgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfU0hJRlQgMAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfTUFTSyAweDNGRkZGRlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENMTktBQllURTBDUkNFUlIgICAweDAwMDAwMDAwMDA4MDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDTE5LQUJZVEUxQ1JDRVJSICAgMHgwMDAwMDAwMDAxMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQ0xOS0JCWVRFMENSQ0VSUiAgIDB4MDAwMDAwMDAwMjAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENMTktCQllURTFDUkNFUlIgICAweDAwMDAwMDAwMDQwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjQgICAgICAgICAgMHgwMDAwMDAwMDA4MDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI1ICAgICAgICAgIDB4MDAwMDAwMDAxMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENNSVNDRVJSNiAgICAgICAgICAweDAwMDAwMDAwMjAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjcgICAgICAgICAgMHgwMDAwMDAwMDQwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQ0JVU1RSRVFQQVJJVFlFUlIgIDB4MDAwMDAwMDA4MDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENCVVNUUkVTUFBBUklUWUVSUiAweDAwMDAwMDAxMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDQlVTSVJFUVBBUklUWUVSUiAgMHgwMDAwMDAwMjAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0NPUkVQTExfRkJTTElQICAgICAgIDB4MDA4MDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9DT1JFUExMX1JGU0xJUCAgICAgICAweDAxMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRCUExMX0ZCU0xJUCAgICAgICAgMHgwMjAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQlBMTF9SRlNMSVAgICAgICAgIDB4MDQwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVEFQTExfRkJTTElQICAgICAgICAweDA4MDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRBUExMX1JGU0xJUCAgICAgICAgMHgxMDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCAgICAgIDB4MjAwMDAwMDAwMDAwMDAwMFVMTAorCisvKiBrcl9leHRzdGF0dXMgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfRlJFUVNFTCAweDIKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX1NFUkRFU1NFTCAweDQKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX01FTUJJU1RfRU5EVEVTVCAgICAgMHgwMDAwMDAwMDAwMDA0MDAwCisjZGVmaW5lIElORklOSVBBVEhfRVhUU19NRU1CSVNUX0NPUlJFQ1QgICAgIDB4MDAwMDAwMDAwMDAwODAwMAorCisvKgorICogbWFza3MgYW5kIGJpdHMgdGhhdCBhcmUgZGlmZmVyZW50IGluIGRpZmZlcmVudCBjaGlwcywgb3IgcHJlc2VudCBvbmx5CisgKiBpbiBvbmUKKyAqLworc3RhdGljIGNvbnN0IGlwYXRoX2Vycl90IGluZmluaXBhdGhfaHdlX2h0Y21lbXBhcml0eWVycl9tYXNrID0KKyAgICBJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfTUFTSzsKK3N0YXRpYyBjb25zdCBpcGF0aF9lcnJfdCBpbmZpbmlwYXRoX2h3ZV9odGNtZW1wYXJpdHllcnJfc2hpZnQgPQorICAgIElORklOSVBBVEhfSFdFX0hUQ01FTVBBUklUWUVSUl9TSElGVDsKKworc3RhdGljIGNvbnN0IGlwYXRoX2Vycl90IGluZmluaXBhdGhfaHdlX2h0Y2xua2FieXRlMGNyY2VyciA9CisgICAgSU5GSU5JUEFUSF9IV0VfSFRDTE5LQUJZVEUwQ1JDRVJSOworc3RhdGljIGNvbnN0IGlwYXRoX2Vycl90IGluZmluaXBhdGhfaHdlX2h0Y2xua2FieXRlMWNyY2VyciA9CisgICAgSU5GSU5JUEFUSF9IV0VfSFRDTE5LQUJZVEUxQ1JDRVJSOworc3RhdGljIGNvbnN0IGlwYXRoX2Vycl90IGluZmluaXBhdGhfaHdlX2h0Y2xua2JieXRlMGNyY2VyciA9CisgICAgSU5GSU5JUEFUSF9IV0VfSFRDTE5LQkJZVEUwQ1JDRVJSOworc3RhdGljIGNvbnN0IGlwYXRoX2Vycl90IGluZmluaXBhdGhfaHdlX2h0Y2xua2JieXRlMWNyY2VyciA9CisgICAgSU5GSU5JUEFUSF9IV0VfSFRDTE5LQkJZVEUxQ1JDRVJSOworCisjZGVmaW5lIF9JUEFUSF9HUElPX1NEQV9OVU0gMQorI2RlZmluZSBfSVBBVEhfR1BJT19TQ0xfTlVNIDAKKworI2RlZmluZSBJUEFUSF9HUElPX1NEQSBcCisJKDFVTEwgPDwgKF9JUEFUSF9HUElPX1NEQV9OVU0rSU5GSU5JUEFUSF9FWFRDX0dQSU9PRV9TSElGVCkpCisjZGVmaW5lIElQQVRIX0dQSU9fU0NMIFwKKwkoMVVMTCA8PCAoX0lQQVRIX0dQSU9fU0NMX05VTStJTkZJTklQQVRIX0VYVENfR1BJT09FX1NISUZUKSkKKworLyoga2VlcCB0aGUgY29kZSBiZWxvdyBzb21ld2hhdCBtb3JlIHJlYWRvbmFibGU7IG5vdCB1c2VkIGVsc2V3aGVyZSAqLworI2RlZmluZSBfSVBBVEhfSFRMSU5LMF9DUkNCSVRTIChpbmZpbmlwYXRoX2h3ZV9odGNsbmthYnl0ZTBjcmNlcnIgfAlcCisJCQkJaW5maW5pcGF0aF9od2VfaHRjbG5rYWJ5dGUxY3JjZXJyKQorI2RlZmluZSBfSVBBVEhfSFRMSU5LMV9DUkNCSVRTIChpbmZpbmlwYXRoX2h3ZV9odGNsbmtiYnl0ZTBjcmNlcnIgfAlcCisJCQkJaW5maW5pcGF0aF9od2VfaHRjbG5rYmJ5dGUxY3JjZXJyKQorI2RlZmluZSBfSVBBVEhfSFRMQU5FMF9DUkNCSVRTIChpbmZpbmlwYXRoX2h3ZV9odGNsbmthYnl0ZTBjcmNlcnIgfAlcCisJCQkJaW5maW5pcGF0aF9od2VfaHRjbG5rYmJ5dGUwY3JjZXJyKQorI2RlZmluZSBfSVBBVEhfSFRMQU5FMV9DUkNCSVRTIChpbmZpbmlwYXRoX2h3ZV9odGNsbmthYnl0ZTFjcmNlcnIgfAlcCisJCQkJaW5maW5pcGF0aF9od2VfaHRjbG5rYmJ5dGUxY3JjZXJyKQorCitzdGF0aWMgdm9pZCBod2Vycl9jcmNiaXRzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaXBhdGhfZXJyX3QgaHdlcnJzLAorCQkJICBjaGFyICptc2csIHNpemVfdCBtc2dsKQoreworCWNoYXIgYml0c21zZ1s2NF07CisJaXBhdGhfZXJyX3QgY3JjYml0cyA9IGh3ZXJycyAmCisJCShfSVBBVEhfSFRMSU5LMF9DUkNCSVRTIHwgX0lQQVRIX0hUTElOSzFfQ1JDQklUUyk7CisJLyogZG9uJ3QgY2hlY2sgaWYgOGJpdCBIVCAqLworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF84QklUX0lOX0hUMCkKKwkJY3JjYml0cyAmPSB+aW5maW5pcGF0aF9od2VfaHRjbG5rYWJ5dGUxY3JjZXJyOworCS8qIGRvbid0IGNoZWNrIGlmIDhiaXQgSFQgKi8KKwlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfOEJJVF9JTl9IVDEpCisJCWNyY2JpdHMgJj0gfmluZmluaXBhdGhfaHdlX2h0Y2xua2JieXRlMWNyY2VycjsKKwkvKgorCSAqIHdlJ2xsIHdhbnQgdG8gaWdub3JlIGxpbmsgZXJyb3JzIG9uIGxpbmsgdGhhdCBpcworCSAqIG5vdCBpbiB1c2UsIGlmIGFueS4gIEZvciBub3csIGNvbXBsYWluIGFib3V0IGJvdGgKKwkgKi8KKwlpZiAoY3JjYml0cykgeworCQl1MTYgY3RybDAsIGN0cmwxOworCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywKKwkJCSAiW0hUJXMgbGFuZSAlcyBDUkMgKCVsbHgpOyBpZ25vcmUgdGlsbCByZWxvYWRdIiwKKwkJCSAhKGNyY2JpdHMgJiBfSVBBVEhfSFRMSU5LMV9DUkNCSVRTKSA/CisJCQkgIjAgKEEpIiA6ICghKGNyY2JpdHMgJiBfSVBBVEhfSFRMSU5LMF9DUkNCSVRTKQorCQkJCSAgICA/ICIxIChCKSIgOiAiMCsxIChBK0IpIiksCisJCQkgIShjcmNiaXRzICYgX0lQQVRIX0hUTEFORTFfQ1JDQklUUykgPyAiMCIKKwkJCSA6ICghKGNyY2JpdHMgJiBfSVBBVEhfSFRMQU5FMF9DUkNCSVRTKSA/ICIxIiA6CisJCQkgICAgIjArMSIpLCAodW5zaWduZWQgbG9uZyBsb25nKSBjcmNiaXRzKTsKKwkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOworCisJCS8qCisJCSAqIHByaW50IGV4dHJhIGluZm8gZm9yIGRlYnVnZ2luZy4gIHNsYXZlL3ByaW1hcnkKKwkJICogY29uZmlnIHdvcmQgNCwgOCAobGluayBjb250cm9sIDAsIDEpCisJCSAqLworCisJCWlmIChwY2lfcmVhZF9jb25maWdfd29yZChkZC0+cGNpZGV2LAorCQkJCQkgZGQtPmlwYXRoX2h0X3NsYXZlX29mZiArIDB4NCwKKwkJCQkJICZjdHJsMCkpCisJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQ291bGRuJ3QgcmVhZCAiCisJCQkJICJsaW5rY3RybDAgb2Ygc2xhdmUvcHJpbWFyeSAiCisJCQkJICJjb25maWcgYmxvY2tcbiIpOworCQllbHNlIGlmICghKGN0cmwwICYgMSA8PCA2KSkKKwkJCS8qIG5vdCBpZiBFT0MgYml0IHNldCAqLworCQkJaXBhdGhfZGJnKCJIVCBsaW5rY3RybDAgMHgleCVzJXNcbiIsIGN0cmwwLAorCQkJCSAgKChjdHJsMCA+PiA4KSAmIDcpID8gIiBDUkMiIDogIiIsCisJCQkJICAoKGN0cmwwID4+IDQpICYgMSkgPyAibGlua2ZhaWwiIDoKKwkJCQkgICIiKTsKKwkJaWYgKHBjaV9yZWFkX2NvbmZpZ193b3JkKGRkLT5wY2lkZXYsCisJCQkJCSBkZC0+aXBhdGhfaHRfc2xhdmVfb2ZmICsgMHg4LAorCQkJCQkgJmN0cmwxKSkKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJDb3VsZG4ndCByZWFkICIKKwkJCQkgImxpbmtjdHJsMSBvZiBzbGF2ZS9wcmltYXJ5ICIKKwkJCQkgImNvbmZpZyBibG9ja1xuIik7CisJCWVsc2UgaWYgKCEoY3RybDEgJiAxIDw8IDYpKQorCQkJLyogbm90IGlmIEVPQyBiaXQgc2V0ICovCisJCQlpcGF0aF9kYmcoIkhUIGxpbmtjdHJsMSAweCV4JXMlc1xuIiwgY3RybDEsCisJCQkJICAoKGN0cmwxID4+IDgpICYgNykgPyAiIENSQyIgOiAiIiwKKwkJCQkgICgoY3RybDEgPj4gNCkgJiAxKSA/ICJsaW5rZmFpbCIgOgorCQkJCSAgIiIpOworCisJCS8qIGRpc2FibGUgdW50aWwgZHJpdmVyIHJlbG9hZGVkICovCisJCWRkLT5pcGF0aF9od2Vycm1hc2sgJj0gfmNyY2JpdHM7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJtYXNrLAorCQkJCSBkZC0+aXBhdGhfaHdlcnJtYXNrKTsKKwkJaXBhdGhfZGJnKCJIVCBjcmMgZXJyczogJXNcbiIsIG1zZyk7CisJfSBlbHNlCisJCWlwYXRoX2RiZygiaWdub3JpbmcgSFQgY3JjIGVycm9ycyAweCVsbHgsICIKKwkJCSAgIm5vdCBpbiB1c2VcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgIChod2VycnMgJiAoX0lQQVRIX0hUTElOSzBfQ1JDQklUUyB8CisJCQkJICAgICBfSVBBVEhfSFRMSU5LMV9DUkNCSVRTKSkpOworfQorCisvKioKKyAqIGlwYXRoX2h0X2hhbmRsZV9od2Vycm9ycyAtIGRpc3BsYXkgaGFyZHdhcmUgZXJyb3JzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQG1zZzogdGhlIG91dHB1dCBidWZmZXIKKyAqIEBtc2dsOiB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFVzZSBzYW1lIG1zZyBidWZmZXIgYXMgcmVndWxhciBlcnJvcnMgdG8gYXZvaWQKKyAqIGV4Y2Vzc2l2ZSBzdGFjayB1c2UuICBNb3N0IGhhcmR3YXJlIGVycm9ycyBhcmUgY2F0YXN0cm9waGljLCBidXQgZm9yCisgKiByaWdodCBub3csIHdlJ2xsIHByaW50IHRoZW0gYW5kIGNvbnRpbnVlLgorICogV2UgcmV1c2UgdGhlIHNhbWUgbWVzc2FnZSBidWZmZXIgYXMgaXBhdGhfaGFuZGxlX2Vycm9ycygpIHRvIGF2b2lkCisgKiBleGNlc3NpdmUgc3RhY2sgdXNhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX2h0X2hhbmRsZV9od2Vycm9ycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGNoYXIgKm1zZywKKwkJCQkgICAgIHNpemVfdCBtc2dsKQoreworCWlwYXRoX2Vycl90IGh3ZXJyczsKKwl1MzIgYml0cywgY3RybDsKKwlpbnQgaXNmYXRhbCA9IDA7CisJY2hhciBiaXRzbXNnWzY0XTsKKworCWh3ZXJycyA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyc3RhdHVzKTsKKworCWlmICghaHdlcnJzKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkNhbGxlZCBidXQgbm8gaGFyZHdhcmUgZXJyb3JzIHNldFxuIik7CisJCS8qCisJCSAqIGJldHRlciB0aGFuIHByaW50aW5nIGNvZnVzaW5nIG1lc3NhZ2VzCisJCSAqIFRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBjbGVhcmluZyB0aGUgY3JjIGVycm9yLCBvcgorCQkgKiB0aGUgcGxsIGVycm9yIGR1cmluZyBpbml0LgorCQkgKi8KKwkJZ290byBiYWlsOworCX0gZWxzZSBpZiAoaHdlcnJzID09IC0xTEwpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIlJlYWQgb2YgaGFyZHdhcmUgZXJyb3Igc3RhdHVzIGZhaWxlZCAiCisJCQkgICAgICAiKGFsbCBiaXRzIHNldCk7IGlnbm9yaW5nXG4iKTsKKwkJZ290byBiYWlsOworCX0KKwlpcGF0aF9zdGF0cy5zcHNfaHdlcnJzKys7CisKKwkvKiBBbHdheXMgY2xlYXIgdGhlIGVycm9yIHN0YXR1cyByZWdpc3RlciwgZXhjZXB0IE1FTUJJU1RGQUlMLAorCSAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBjb250aW51ZSBvciBzdG9wIHVzaW5nIHRoZSBjaGlwLgorCSAqIFdlIHdhbnQgdGhhdCBzZXQgc28gd2Uga25vdyBpdCBmYWlsZWQsIGV2ZW4gYWNyb3NzIGRyaXZlciByZWxvYWQuCisJICogV2UnbGwgc3RpbGwgaWdub3JlIGl0IGluIHRoZSBod2Vycm1hc2suICBXZSBkbyB0aGlzIHBhcnRseSBmb3IKKwkgKiBkaWFnbm9zdGljcywgYnV0IGFsc28gZm9yIHN1cHBvcnQgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyY2xlYXIsCisJCQkgaHdlcnJzJn5JTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEKTsKKworCWh3ZXJycyAmPSBkZC0+aXBhdGhfaHdlcnJtYXNrOworCisJLyoKKwkgKiBtYWtlIHN1cmUgd2UgZ2V0IHRoaXMgbXVjaCBvdXQsIHVubGVzcyB0b2xkIHRvIGJlIHF1aWV0LAorCSAqIG9yIGl0J3Mgb2NjdXJyZWQgd2l0aGluIHRoZSBsYXN0IDUgc2Vjb25kcworCSAqLworCWlmICgoaHdlcnJzICYgfmRkLT5pcGF0aF9sYXN0aHdlcnJvcikgfHwKKwkgICAgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9WRVJCREJHKSkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkhhcmR3YXJlIGVycm9yOiBod2Vycj0weCVsbHggIgorCQkJICIoY2xlYXJlZClcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGh3ZXJycyk7CisJZGQtPmlwYXRoX2xhc3Rod2Vycm9yIHw9IGh3ZXJyczsKKworCWlmIChod2VycnMgJiB+aW5maW5pcGF0aF9od2VfYml0c2V4dGFudCkKKwkJaXBhdGhfZGV2X2VycihkZCwgImh3ZXJyb3IgaW50ZXJydXB0IHdpdGggdW5rbm93biBlcnJvcnMgIgorCQkJICAgICAgIiVsbHggc2V0XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgICAgKGh3ZXJycyAmIH5pbmZpbmlwYXRoX2h3ZV9iaXRzZXh0YW50KSk7CisKKwljdHJsID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCk7CisJaWYgKGN0cmwgJiBJTkZJTklQQVRIX0NfRlJFRVpFTU9ERSkgeworCQlpZiAoaHdlcnJzKSB7CisJCQkvKgorCQkJICogaWYgYW55IHNldCB0aGF0IHdlIGFyZW4ndCBpZ25vcmluZzsgb25seQorCQkJICogbWFrZSB0aGUgY29tcGxhaW50IG9uY2UsIGluIGNhc2UgaXQncyBzdHVjaworCQkJICogb3IgcmVjdXJyaW5nLCBhbmQgd2UgZ2V0IGhlcmUgbXVsdGlwbGUKKwkJCSAqIHRpbWVzLgorCQkJICovCisJCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkgeworCQkJCWlwYXRoX2Rldl9lcnIoZGQsICJGYXRhbCBFcnJvciAoZnJlZXplICIKKwkJCQkJICAgICAgIm1vZGUpLCBubyBsb25nZXIgdXNhYmxlXG4iKTsKKwkJCQlpc2ZhdGFsID0gMTsKKwkJCX0KKwkJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0lCX1JFQURZOworCQkJLyogbWFyayBhcyBoYXZpbmcgaGFkIGVycm9yICovCisJCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX0hXRVJST1I7CisJCQkvKgorCQkJICogbWFyayBhcyBub3QgdXNhYmxlLCBhdCBhIG1pbmltdW0gdW50aWwgZHJpdmVyCisJCQkgKiBpcyByZWxvYWRlZCwgcHJvYmFibHkgdW50aWwgcmVib290LCBzaW5jZSBubworCQkJICogb3RoZXIgcmVzZXQgaXMgcG9zc2libGUuCisJCQkgKi8KKwkJCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfSU5JVFRFRDsKKwkJfSBlbHNlIHsKKwkJCWlwYXRoX2RiZygiQ2xlYXJpbmcgZnJlZXplbW9kZSBvbiBpZ25vcmVkIGhhcmR3YXJlICIKKwkJCQkgICJlcnJvclxuIik7CisJCQljdHJsICY9IH5JTkZJTklQQVRIX0NfRlJFRVpFTU9ERTsKKwkJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCwKKwkJCQkJIGN0cmwpOworCQl9CisJfQorCisJKm1zZyA9ICdcMCc7CisKKwkvKgorCSAqIG1heSBzb21lZGF5IHdhbnQgdG8gZGVjb2RlIGludG8gd2hpY2ggYml0cyBhcmUgd2hpY2gKKwkgKiBmdW5jdGlvbmFsIGFyZWEgZm9yIHBhcml0eSBlcnJvcnMsIGV0Yy4KKwkgKi8KKwlpZiAoaHdlcnJzICYgKGluZmluaXBhdGhfaHdlX2h0Y21lbXBhcml0eWVycl9tYXNrCisJCSAgICAgIDw8IElORklOSVBBVEhfSFdFX0hUQ01FTVBBUklUWUVSUl9TSElGVCkpIHsKKwkJYml0cyA9ICh1MzIpICgoaHdlcnJzID4+CisJCQkgICAgICAgSU5GSU5JUEFUSF9IV0VfSFRDTUVNUEFSSVRZRVJSX1NISUZUKSAmCisJCQkgICAgICBJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfTUFTSyk7CisJCXNucHJpbnRmKGJpdHNtc2csIHNpemVvZiBiaXRzbXNnLCAiW0hUQyBQYXJpdHkgRXJycyAleF0gIiwKKwkJCSBiaXRzKTsKKwkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOworCX0KKwlpZiAoaHdlcnJzICYgKElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9NQVNLCisJCSAgICAgIDw8IElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9TSElGVCkpIHsKKwkJYml0cyA9ICh1MzIpICgoaHdlcnJzID4+CisJCQkgICAgICAgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX1NISUZUKSAmCisJCQkgICAgICBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSyk7CisJCXNucHJpbnRmKGJpdHNtc2csIHNpemVvZiBiaXRzbXNnLCAiW1JYRSBQYXJpdHkgRXJycyAleF0gIiwKKwkJCSBiaXRzKTsKKwkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOworCX0KKwlpZiAoaHdlcnJzICYgKElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9NQVNLCisJCSAgICAgIDw8IElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCkpIHsKKwkJYml0cyA9ICh1MzIpICgoaHdlcnJzID4+CisJCQkgICAgICAgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSAmCisJCQkgICAgICBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTUFTSyk7CisJCXNucHJpbnRmKGJpdHNtc2csIHNpemVvZiBiaXRzbXNnLCAiW1RYRSBQYXJpdHkgRXJycyAleF0gIiwKKwkJCSBiaXRzKTsKKwkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOworCX0KKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSUJDQlVTVE9TUENQQVJJVFlFUlIpCisJCXN0cmxjYXQobXNnLCAiW0lCMklQQVRIIFBhcml0eV0iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSUJDQlVTRlJTUENQQVJJVFlFUlIpCisJCXN0cmxjYXQobXNnLCAiW0lQQVRIMklCIFBhcml0eV0iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSFRDQlVTSVJFUVBBUklUWUVSUikKKwkJc3RybGNhdChtc2csICJbSFRDIElyZXEgUGFyaXR5XSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9IVENCVVNUUkVRUEFSSVRZRVJSKQorCQlzdHJsY2F0KG1zZywgIltIVEMgVHJlcSBQYXJpdHldIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0hUQ0JVU1RSRVNQUEFSSVRZRVJSKQorCQlzdHJsY2F0KG1zZywgIltIVEMgVHJlc3AgUGFyaXR5XSIsIG1zZ2wpOworCisJaWYgKGh3ZXJycyAmIChfSVBBVEhfSFRMSU5LMF9DUkNCSVRTIHwgX0lQQVRIX0hUTElOSzFfQ1JDQklUUykpCisJCWh3ZXJyX2NyY2JpdHMoZGQsIGh3ZXJycywgbXNnLCBtc2dsKTsKKworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9IVENNSVNDRVJSNSkKKwkJc3RybGNhdChtc2csICJbSFQgY29yZSBNaXNjNV0iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjYpCisJCXN0cmxjYXQobXNnLCAiW0hUIGNvcmUgTWlzYzZdIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI3KQorCQlzdHJsY2F0KG1zZywgIltIVCBjb3JlIE1pc2M3XSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEKSB7CisJCXN0cmxjYXQobXNnLCAiW01lbW9yeSBCSVNUIHRlc3QgZmFpbGVkLCBIVC00MDAgdW51c2FibGVdIiwKKwkJCW1zZ2wpOworCQkvKiBpZ25vcmUgZnJvbSBub3cgb24sIHNvIGRpc2FibGUgdW50aWwgZHJpdmVyIHJlbG9hZGVkICovCisJCWRkLT5pcGF0aF9od2Vycm1hc2sgJj0gfklORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQ7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJtYXNrLAorCQkJCSBkZC0+aXBhdGhfaHdlcnJtYXNrKTsKKwl9CisjZGVmaW5lIF9JUEFUSF9QTExfRkFJTCAoSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9GQlNMSVAgfAlcCisJCQkgSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9SRlNMSVAgfAlcCisJCQkgSU5GSU5JUEFUSF9IV0VfSFRCUExMX0ZCU0xJUCB8CQlcCisJCQkgSU5GSU5JUEFUSF9IV0VfSFRCUExMX1JGU0xJUCB8CQlcCisJCQkgSU5GSU5JUEFUSF9IV0VfSFRBUExMX0ZCU0xJUCB8CQlcCisJCQkgSU5GSU5JUEFUSF9IV0VfSFRBUExMX1JGU0xJUCkKKworCWlmIChod2VycnMgJiBfSVBBVEhfUExMX0ZBSUwpIHsKKwkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csCisJCQkgIltQTEwgZmFpbGVkICglbGx4KSwgSFQtNDAwIHVudXNhYmxlXSIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgKGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCkpOworCQlzdHJsY2F0KG1zZywgYml0c21zZywgbXNnbCk7CisJCS8qIGlnbm9yZSBmcm9tIG5vdyBvbiwgc28gZGlzYWJsZSB1bnRpbCBkcml2ZXIgcmVsb2FkZWQgKi8KKwkJZGQtPmlwYXRoX2h3ZXJybWFzayAmPSB+KGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCk7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJtYXNrLAorCQkJCSBkZC0+aXBhdGhfaHdlcnJtYXNrKTsKKwl9CisKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKSB7CisJCS8qCisJCSAqIElmIGl0IG9jY3VycywgaXQgaXMgbGVmdCBtYXNrZWQgc2luY2UgdGhlIGV0ZXJuYWwKKwkJICogaW50ZXJmYWNlIGlzIHVudXNlZAorCQkgKi8KKwkJZGQtPmlwYXRoX2h3ZXJybWFzayAmPSB+SU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CisJfQorCisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1JYRFNZTkNNRU1QQVJJVFlFUlIpCisJCXN0cmxjYXQobXNnLCAiW1J4IERzeW5jXSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQpCisJCXN0cmxjYXQobXNnLCAiW1NlckRlcyBQTExdIiwgbXNnbCk7CisKKwlpcGF0aF9kZXZfZXJyKGRkLCAiJXMgaGFyZHdhcmUgZXJyb3JcbiIsIG1zZyk7CisJaWYgKGlzZmF0YWwgJiYgIWlwYXRoX2RpYWdfaW51c2UgJiYgZGQtPmlwYXRoX2ZyZWV6ZW1zZykKKwkJLyoKKwkJICogZm9yIHN0YXR1cyBmaWxlOyBpZiBubyB0cmFpbGluZyBicmFjZSBpcyBjb3BpZWQsCisJCSAqIHdlJ2xsIGtub3cgaXQgd2FzIHRydW5jYXRlZC4KKwkJICovCisJCXNucHJpbnRmKGRkLT5pcGF0aF9mcmVlemVtc2csCisJCQkgZGQtPmlwYXRoX2ZyZWV6ZWxlbiwgInslc30iLCBtc2cpOworCitiYWlsOjsKK30KKworLyoqCisgKiBpcGF0aF9odF9ib2FyZG5hbWUgLSBmaWxsIGluIHRoZSBib2FyZCBuYW1lCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQG5hbWU6IHRoZSBvdXRwdXQgYnVmZmVyCisgKiBAbmFtZWxlbjogdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBmaWxsIGluIHRoZSBib2FyZCBuYW1lLCBiYXNlZCBvbiB0aGUgYm9hcmQgcmV2aXNpb24gcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBpcGF0aF9odF9ib2FyZG5hbWUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBjaGFyICpuYW1lLAorCQkJICAgICAgc2l6ZV90IG5hbWVsZW4pCit7CisJY2hhciAqbiA9IE5VTEw7CisJdTggYm9hcmRyZXYgPSBkZC0+aXBhdGhfYm9hcmRyZXY7CisJaW50IHJldDsKKworCXN3aXRjaCAoYm9hcmRyZXYpIHsKKwljYXNlIDQ6CQkvKiBQb25kZXJvc2EgaXMgb25lIG9mIHRoZSBicmluZ3VwIGJvYXJkcyAqLworCQluID0gIlBvbmRlcm9zYSI7CisJCWJyZWFrOworCWNhc2UgNToKKwkJLyoKKwkJICogSFQtNDYwIG9yaWdpbmFsIHByb2R1Y3Rpb24gYm9hcmQ7IHR3byBwcm9kdWN0aW9uIGxldmVscywgd2l0aAorCQkgKiBkaWZmZXJlbnQgc2VyaWFsIG51bWJlciByYW5nZXMuICAgU2VlIGlwYXRoX2h0X2Vhcmx5X2luaXQoKSBmb3IKKwkJICogY2FzZSB3aGVyZSB3ZSBlbmFibGUgSVBBVEhfR1BJT19JTlRSIGZvciBsYXRlciBzZXJpYWwgIyByYW5nZS4KKwkJICovCisJCW4gPSAiSW5maW5pUGF0aF9IVC00NjAiOworCQlicmVhazsKKwljYXNlIDY6CisJCW4gPSAiT0VNX0JvYXJkXzMiOworCQlicmVhazsKKwljYXNlIDc6CisJCS8qIEhULTQ2MCBzbWFsbCBmb3JtIGZhY3RvciBwcm9kdWN0aW9uIGJvYXJkICovCisJCW4gPSAiSW5maW5pUGF0aF9IVC00NjUiOworCQlicmVhazsKKwljYXNlIDg6CisJCW4gPSAiTFMvWC0xIjsKKwkJYnJlYWs7CisJY2FzZSA5OgkJLyogQ29tc3RvY2sgYnJpbmd1cCB0ZXN0IGJvYXJkICovCisJCW4gPSAiQ29tc3RvY2siOworCQlicmVhazsKKwljYXNlIDEwOgorCQluID0gIk9FTV9Cb2FyZF8yIjsKKwkJYnJlYWs7CisJY2FzZSAxMToKKwkJbiA9ICJJbmZpbmlQYXRoX0hULTQ3MCI7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCW4gPSAiT0VNX0JvYXJkXzQiOworCQlicmVhazsKKwlkZWZhdWx0OgkJLyogZG9uJ3Qga25vdywganVzdCBwcmludCB0aGUgbnVtYmVyICovCisJCWlwYXRoX2Rldl9lcnIoZGQsICJEb24ndCB5ZXQga25vdyBhYm91dCBib2FyZCAiCisJCQkgICAgICAid2l0aCBJRCAldVxuIiwgYm9hcmRyZXYpOworCQlzbnByaW50ZihuYW1lLCBuYW1lbGVuLCAiVW5rbm93bl9JbmZpbmlQYXRoX0hULTR4eF8ldSIsCisJCQkgYm9hcmRyZXYpOworCQlicmVhazsKKwl9CisJaWYgKG4pCisJCXNucHJpbnRmKG5hbWUsIG5hbWVsZW4sICIlcyIsIG4pOworCisJaWYgKGRkLT5pcGF0aF9tYWpyZXYgIT0gMyB8fCAoZGQtPmlwYXRoX21pbnJldiA8IDIgfHwgZGQtPmlwYXRoX21pbnJldiA+IDMpKSB7CisJCS8qCisJCSAqIFRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIG9ubHkgc3VwcG9ydHMgdGhlIEhULTQwMAorCQkgKiBSZXYgMy4yCisJCSAqLworCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJICAgICAgIlVuc3VwcG9ydGVkIEhULTQwMCByZXZpc2lvbiAldS4ldSFcbiIsCisJCQkgICAgICBkZC0+aXBhdGhfbWFqcmV2LCBkZC0+aXBhdGhfbWlucmV2KTsKKwkJcmV0ID0gMTsKKwkJZ290byBiYWlsOworCX0KKwkvKgorCSAqIHBrdC93b3JkIGNvdW50ZXJzIGFyZSAzMiBiaXQsIGFuZCB0aGVyZWZvcmUgd3JhcCBmYXN0IGVub3VnaAorCSAqIHRoYXQgd2Ugc25hcHNob3QgdGhlbSBmcm9tIGEgdGltZXIsIGFuZCBtYWludGFpbiA2NCBiaXQgc2hhZG93CisJICogY29waWVzCisJICovCisJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIXzMyQklUQ09VTlRFUlM7CisJaWYgKGRkLT5pcGF0aF9odHNwZWVkICE9IDgwMCkKKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSAgICAgICJJbmNvcnJlY3RseSBjb25maWd1cmVkIGZvciBIVCBAICV1TUh6XG4iLAorCQkJICAgICAgZGQtPmlwYXRoX2h0c3BlZWQpOworCWlmIChkZC0+aXBhdGhfYm9hcmRyZXYgPT0gNyB8fCBkZC0+aXBhdGhfYm9hcmRyZXYgPT0gMTEgfHwKKwkgICAgZGQtPmlwYXRoX2JvYXJkcmV2ID09IDYpCisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9HUElPX0lOVFI7CisJZWxzZQorCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfUE9MTF9SWF9JTlRSOworCWlmIChkZC0+aXBhdGhfYm9hcmRyZXYgPT0gOCkgewkvKiBMUy9YLTEgKi8KKwkJdTY0IHZhbDsKKwkJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0c3RhdHVzKTsKKwkJaWYgKHZhbCAmIElORklOSVBBVEhfRVhUU19TRVJERVNTRUwpIHsKKwkJCS8qCisJCQkgKiBoYXJkd2FyZSBkaXNhYmxlZAorCQkJICoKKwkJCSAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2hpcCBpcyBoYXJkd2FyZSBkaXNhYmxlZCwKKwkJCSAqIGFuZCB3aWxsIG5vdCBiZSBhYmxlIHRvIGJyaW5nIHVwIHRoZSBsaW5rLAorCQkJICogaW4gYW55IGNhc2UuICBXZSBzcGVjaWFsIGNhc2UgdGhpcyBhbmQgYWJvcnQKKwkJCSAqIGVhcmx5LCB0byBhdm9pZCBsYXRlciBtZXNzYWdlcy4gIFdlIGFsc28gc2V0CisJCQkgKiB0aGUgRElTQUJMRUQgc3RhdHVzIGJpdAorCQkJICovCisJCQlpcGF0aF9kYmcoIlVuaXQgJXUgaXMgaGFyZHdhcmUtZGlzYWJsZWRcbiIsCisJCQkJICBkZC0+aXBhdGhfdW5pdCk7CisJCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX0RJU0FCTEVEOworCQkJLyogdGhpcyB2YWx1ZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5ICovCisJCQlyZXQgPSAyOworCQkJZ290byBiYWlsOworCQl9CisJfQorCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfY2hlY2tfaHRsaW5rKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1OCBsaW5rZXJyLCBsaW5rX29mZiwgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJbGlua19vZmYgPSBkZC0+aXBhdGhfaHRfc2xhdmVfb2ZmICsgaSAqIDQgKyAweGQ7CisJCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZC0+cGNpZGV2LCBsaW5rX29mZiwgJmxpbmtlcnIpKQorCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkNvdWxkbid0IHJlYWQgIgorCQkJCSAibGlua2Vycm9yJWQgb2YgSFQgc2xhdmUvcHJpbWFyeSBibG9ja1xuIiwKKwkJCQkgaSk7CisJCWVsc2UgaWYgKGxpbmtlcnIgJiAweGYwKSB7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJIVCBsaW5rZXJyJWQgYml0cyAweCV4IHNldCwgIgorCQkJCSAgICJjbGVhcmluZ1xuIiwgbGlua2VyciA+PiA0LCBpKTsKKwkJCS8qCisJCQkgKiB3cml0aW5nIHRoZSBsaW5rZXJyIGJpdHMgdGhhdCBhcmUgc2V0IHNob3VsZAorCQkJICogY2xlYXIgdGhlbQorCQkJICovCisJCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRkLT5wY2lkZXYsIGxpbmtfb2ZmLAorCQkJCQkJICBsaW5rZXJyKSkKKwkJCQlpcGF0aF9kYmcoIkZhaWxlZCB3cml0ZSB0byBjbGVhciBIVCAiCisJCQkJCSAgImxpbmtlcnJvciVkXG4iLCBpKTsKKwkJCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZC0+cGNpZGV2LCBsaW5rX29mZiwKKwkJCQkJCSAmbGlua2VycikpCisJCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCQkJICJDb3VsZG4ndCByZXJlYWQgbGlua2Vycm9yJWQgb2YgIgorCQkJCQkgIkhUIHNsYXZlL3ByaW1hcnkgYmxvY2tcbiIsIGkpOworCQkJZWxzZSBpZiAobGlua2VyciAmIDB4ZjApCisJCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCQkJICJIVCBsaW5rZXJyb3IlZCBiaXRzIDB4JXggIgorCQkJCQkgImNvdWxkbid0IGJlIGNsZWFyZWRcbiIsCisJCQkJCSBpLCBsaW5rZXJyID4+IDQpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGlwYXRoX3NldHVwX2h0X3Jlc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpcGF0aF9kYmcoIk5vIHJlc2V0IHBvc3NpYmxlIGZvciBIVC00MDBcbiIpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIEhUX0NBUEFCSUxJVFlfSUQgICAweDA4CS8qIEhUIGNhcGFiaWxpdGllcyBub3QgZGVmaW5lZCBpbiBrZXJuZWwgKi8KKyNkZWZpbmUgSFRfSU5UUl9ESVNDX0NPTkZJRyAgMHg4MAkvKiBIVCBpbnRlcnJ1cHQgYW5kIGRpc2NvdmVyeSBjYXAgKi8KKyNkZWZpbmUgSFRfSU5UUl9SRUdfSU5ERVggICAgMgkvKiBpbnRjb25maWcgcmVxdWlyZXMgaW5kaXJlY3QgYWNjZXNzZXMgKi8KKworLyoKKyAqIEJpdHMgMTMtMTUgb2YgY29tbWFuZD09MCBpcyBzbGF2ZS9wcmltYXJ5IGJsb2NrLiAgQ2xlYXIgYW55IEhUIENSQworICogZXJyb3JzLiAgV2Ugb25seSBib3RoZXIgdG8gZG8gdGhpcyBhdCBsb2FkIHRpbWUsIGJlY2F1c2UgaXQncyBPSyBpZgorICogaXQgaGFwcGVuZWQgYmVmb3JlIHdlIHdlcmUgbG9hZGVkIChmaXJzdCB0aW1lIGFmdGVyIGJvb3QvcmVzZXQpLAorICogYnV0IGFueSB0aW1lIGFmdGVyIHRoYXQsIGl0J3MgZmF0YWwgYW55d2F5LiAgQWxzbyBuZWVkIHRvIG5vdCBjaGVjaworICogZm9yIGZvciB1cHBlciBieXRlIGVycm9ycyBpZiB3ZSBhcmUgaW4gOCBiaXQgbW9kZSwgc28gZmlndXJlIG91dAorICogb3VyIHdpZHRoLiAgRm9yIG5vdywgYXQgbGVhc3QsIGFsc28gY29tcGxhaW4gaWYgaXQncyA4IGJpdC4KKyAqLworc3RhdGljIHZvaWQgc2xhdmVfb3JfcHJpX2JsayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgICBpbnQgcG9zLCB1OCBjYXBfdHlwZSkKK3sKKwl1OCBsaW5rd2lkdGggPSAwLCBsaW5rZXJyLCBsaW5rX2FfYl9vZmYsIGxpbmtfb2ZmOworCXUxNiBsaW5rY3RybCA9IDA7CisJaW50IGk7CisKKwlkZC0+aXBhdGhfaHRfc2xhdmVfb2ZmID0gcG9zOworCS8qIGNvbW1hbmQgd29yZCwgbWFzdGVyX2hvc3QgYml0ICovCisJLyogbWFzdGVyIGhvc3QgfHwgc2xhdmUgKi8KKwlpZiAoKGNhcF90eXBlID4+IDIpICYgMSkKKwkJbGlua19hX2Jfb2ZmID0gNDsKKwllbHNlCisJCWxpbmtfYV9iX29mZiA9IDA7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiSFQldSAoTGluayAlYykgY29ubmVjdGVkIHRvIHByb2Nlc3NvclxuIiwKKwkJICAgbGlua19hX2Jfb2ZmID8gMSA6IDAsCisJCSAgIGxpbmtfYV9iX29mZiA/ICdCJyA6ICdBJyk7CisKKwlsaW5rX2FfYl9vZmYgKz0gcG9zOworCisJLyoKKwkgKiBjaGVjayBib3RoIGxpbmsgY29udHJvbCByZWdpc3RlcnM7IGNsZWFyIGJvdGggSFQgQ1JDIHNldHMgaWYKKwkgKiBuZWNlc3NhcnkuCisJICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlsaW5rX29mZiA9IHBvcyArIGkgKiA0ICsgMHg0OworCQlpZiAocGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgbGlua19vZmYsICZsaW5rY3RybCkpCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGRuJ3QgcmVhZCBIVCBsaW5rIGNvbnRyb2wlZCAiCisJCQkJICAgICAgInJlZ2lzdGVyXG4iLCBpKTsKKwkJZWxzZSBpZiAobGlua2N0cmwgJiAoMHhmIDw8IDgpKSB7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJDbGVhciBsaW5rY3RybCVkIENSQyBFcnJvciAiCisJCQkJICAgImJpdHMgJXhcbiIsIGksIGxpbmtjdHJsICYgKDB4ZiA8PCA4KSk7CisJCQkvKgorCQkJICogbm93IHdyaXRlIHRoZW0gYmFjayB0byBjbGVhciB0aGUgZXJyb3IuCisJCQkgKi8KKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBsaW5rX29mZiwKKwkJCQkJICAgICAgbGlua2N0cmwgJiAoMHhmIDw8IDgpKTsKKwkJfQorCX0KKworCS8qCisJICogQXMgd2l0aCBIVCBDUkMgYml0cywgc2FtZSBmb3IgcHJvdG9jb2wgZXJyb3JzIHRoYXQgbWlnaHQgb2NjdXIKKwkgKiBkdXJpbmcgYm9vdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWxpbmtfb2ZmID0gcG9zICsgaSAqIDQgKyAweGQ7CisJCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBsaW5rX29mZiwgJmxpbmtlcnIpKQorCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNvdWxkbid0IHJlYWQgbGlua2Vycm9yJWQgIgorCQkJCSAib2YgSFQgc2xhdmUvcHJpbWFyeSBibG9ja1xuIiwgaSk7CisJCWVsc2UgaWYgKGxpbmtlcnIgJiAweGYwKSB7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJIVCBsaW5rZXJyJWQgYml0cyAweCV4IHNldCwgIgorCQkJCSAgICJjbGVhcmluZ1xuIiwgbGlua2VyciA+PiA0LCBpKTsKKwkJCS8qCisJCQkgKiB3cml0aW5nIHRoZSBsaW5rZXJyIGJpdHMgdGhhdCBhcmUgc2V0IHdpbGwgY2xlYXIKKwkJCSAqIHRoZW0KKwkJCSAqLworCQkJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZQorCQkJICAgIChwZGV2LCBsaW5rX29mZiwgbGlua2VycikpCisJCQkJaXBhdGhfZGJnKCJGYWlsZWQgd3JpdGUgdG8gY2xlYXIgSFQgIgorCQkJCQkgICJsaW5rZXJyb3IlZFxuIiwgaSk7CisJCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgbGlua19vZmYsICZsaW5rZXJyKSkKKwkJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ291bGRuJ3QgcmVyZWFkICIKKwkJCQkJICJsaW5rZXJyb3IlZCBvZiBIVCBzbGF2ZS9wcmltYXJ5ICIKKwkJCQkJICJibG9ja1xuIiwgaSk7CisJCQllbHNlIGlmIChsaW5rZXJyICYgMHhmMCkKKwkJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSFQgbGlua2Vycm9yJWQgYml0cyAiCisJCQkJCSAiMHgleCBjb3VsZG4ndCBiZSBjbGVhcmVkXG4iLAorCQkJCQkgaSwgbGlua2VyciA+PiA0KTsKKwkJfQorCX0KKworCS8qCisJICogdGhpcyBpcyBqdXN0IGZvciBvdXIgbGluayB0byB0aGUgaG9zdCwgbm90IGRldmljZXMgY29ubmVjdGVkCisJICogdGhyb3VnaCB0dW5uZWwuCisJICovCisKKwlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgbGlua19hX2Jfb2ZmICsgNywgJmxpbmt3aWR0aCkpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZG4ndCByZWFkIEhUIGxpbmsgd2lkdGggIgorCQkJICAgICAgImNvbmZpZyByZWdpc3RlclxuIik7CisJZWxzZSB7CisJCXUzMiB3aWR0aDsKKwkJc3dpdGNoIChsaW5rd2lkdGggJiA3KSB7CisJCWNhc2UgNToKKwkJCXdpZHRoID0gNDsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQl3aWR0aCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJd2lkdGggPSAzMjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3aWR0aCA9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJZGVmYXVsdDoJLyogaWYgd3JvbmcsIGFzc3VtZSA4IGJpdCAqLworCQkJd2lkdGggPSA4OworCQkJYnJlYWs7CisJCX0KKworCQlkZC0+aXBhdGhfaHR3aWR0aCA9IHdpZHRoOworCisJCWlmIChsaW5rd2lkdGggIT0gMHgxMSkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIk5vdCBjb25maWd1cmVkIGZvciAxNiBiaXQgSFQgIgorCQkJCSAgICAgICIoJXgpXG4iLCBsaW5rd2lkdGgpOworCQkJaWYgKCEobGlua3dpZHRoICYgMHhmKSkgeworCQkJCWlwYXRoX2RiZygiV2lsbCBpZ25vcmUgSFQgbGFuZTEgZXJyb3JzXG4iKTsKKwkJCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfOEJJVF9JTl9IVDA7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIHRoaXMgaXMganVzdCBmb3Igb3VyIGxpbmsgdG8gdGhlIGhvc3QsIG5vdCBkZXZpY2VzIGNvbm5lY3RlZAorCSAqIHRocm91Z2ggdHVubmVsLgorCSAqLworCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBsaW5rX2FfYl9vZmYgKyAweGQsICZsaW5rd2lkdGgpKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGRuJ3QgcmVhZCBIVCBsaW5rIGZyZXF1ZW5jeSAiCisJCQkgICAgICAiY29uZmlnIHJlZ2lzdGVyXG4iKTsKKwllbHNlIHsKKwkJdTMyIHNwZWVkOworCQlzd2l0Y2ggKGxpbmt3aWR0aCAmIDB4ZikgeworCQljYXNlIDY6CisJCQlzcGVlZCA9IDEwMDA7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJc3BlZWQgPSA4MDA7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJc3BlZWQgPSA2MDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJc3BlZWQgPSA1MDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3BlZWQgPSA0MDA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc3BlZWQgPSAzMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBhc3N1bWUgcmVzZXJ2ZWQgYW5kIHZlbmRvci1zcGVjaWZpYyBhcmUgMjAwLi4uCisJCQkgKi8KKwkJY2FzZSAwOgorCQkJc3BlZWQgPSAyMDA7CisJCQlicmVhazsKKwkJfQorCQlkZC0+aXBhdGhfaHRzcGVlZCA9IHNwZWVkOworCX0KK30KKworc3RhdGljIGludCBzZXRfaW50X2hhbmRsZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgICBpbnQgcG9zKQoreworCXUzMiBpbnRfaGFuZGxlcl9hZGRyX2xvd2VyOworCXUzMiBpbnRfaGFuZGxlcl9hZGRyX3VwcGVyOworCXU2NCBpaGFuZGxlcjsKKwl1MzIgaW50dmVjOworCisJLyogdXNlIGluZGlyZWN0aW9uIHJlZ2lzdGVyIHRvIGdldCB0aGUgaW50ciBoYW5kbGVyICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIHBvcyArIEhUX0lOVFJfUkVHX0lOREVYLCAweDEwKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcG9zICsgNCwgJmludF9oYW5kbGVyX2FkZHJfbG93ZXIpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBwb3MgKyBIVF9JTlRSX1JFR19JTkRFWCwgMHgxMSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBvcyArIDQsICZpbnRfaGFuZGxlcl9hZGRyX3VwcGVyKTsKKworCWloYW5kbGVyID0gKHU2NCkgaW50X2hhbmRsZXJfYWRkcl9sb3dlciB8CisJCSgodTY0KSBpbnRfaGFuZGxlcl9hZGRyX3VwcGVyIDw8IDMyKTsKKworCS8qCisJICoga2VybmVscyB3aXRoIENPTkZJR19QQ0lfTVNJIHNldCB0aGUgdmVjdG9yIGluIHRoZSBpcnEgZmllbGQgb2YKKwkgKiBzdHJ1Y3QgcGNpX2RldmljZSwgc28gd2UgdXNlIHRoYXQgdG8gcHJvZ3JhbSB0aGUgSFQtNDAwIGludGVybmFsCisJICogaW50ZXJydXB0IHJlZ2lzdGVyIChub3QgY29uZmlnIHNwYWNlKSB3aXRoIHRoYXQgdmFsdWUuIFRoZSBCSU9TCisJICogbXVzdCBzdGlsbCBoYXZlIGRvbmUgdGhlIGJhc2ljIE1TSSBzZXR1cC4KKwkgKi8KKwlpbnR2ZWMgPSBwZGV2LT5pcnE7CisJLyoKKwkgKiBjbGVhciBhbnkgdmVjdG9yIGJpdHMgdGhlcmU7IG5vcm1hbGx5IG5vdCBzZXQgYnV0IHdlJ2xsIG92ZXJsb2FkCisJICogdGhpcyBmb3Igc29tZSBkZWJ1ZyBwdXJwb3NlcyAoc2V0dGluZyB0aGUgSFRDIGRlYnVnIHJlZ2lzdGVyCisJICogdmFsdWUgZnJvbSBzb2Z0d2FyZSwgcmF0aGVyIHRoYW4gR1BJT3MpLCBzbyBpdCBtaWdodCBiZSBzZXQgb24gYQorCSAqIGRyaXZlciByZWxvYWQuCisJICovCisJaWhhbmRsZXIgJj0gfjB4ZmYwMDAwOworCS8qIHg4NiB2ZWN0b3IgZ29lcyBpbiBpbnRyaW5mb1syMzoxNl0gKi8KKwlpaGFuZGxlciB8PSBpbnR2ZWMgPDwgMTY7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiaWhhbmRsZXIgbG93ZXIgJXgsIHVwcGVyICV4LCBpbnR2ZWMgJXgsICIKKwkJICAgImludGVycnVwdGNvbmZpZyAlbGx4XG4iLCBpbnRfaGFuZGxlcl9hZGRyX2xvd2VyLAorCQkgICBpbnRfaGFuZGxlcl9hZGRyX3VwcGVyLCBpbnR2ZWMsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGloYW5kbGVyKTsKKworCS8qIGNhbid0IHByb2dyYW0geWV0LCBzbyBzYXZlIGZvciBpbnRlcnJ1cHQgc2V0dXAgKi8KKwlkZC0+aXBhdGhfaW50Y29uZmlnID0gaWhhbmRsZXI7CisJLyoga2VlcCBnb2luZywgc28gd2UgZmluZCBsaW5rIGNvbnRyb2wgc3R1ZmYgYWxzbyAqLworCisJcmV0dXJuIGloYW5kbGVyICE9IDA7Cit9CisKKy8qKgorICogaXBhdGhfc2V0dXBfaHRfY29uZmlnIC0gc2V0dXAgdGhlIGludGVycnVwdGNvbmZpZyByZWdpc3RlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwZGV2OiB0aGUgUENJIGRldmljZQorICoKKyAqIHNldHVwIHRoZSBpbnRlcnJ1cHRjb25maWcgcmVnaXN0ZXIgZnJvbSB0aGUgSFQgY29uZmlnIGluZm8uCisgKiBBbHNvIGNsZWFyIENSQyBlcnJvcnMgaW4gSFQgbGlua2NvbnRyb2wsIGlmIG5lY2Vzc2FyeS4KKyAqIFRoaXMgaXMgZG9uZSBvbmx5IGZvciB0aGUgcmVhbCBoYXJkd2FyZS4gIEl0IGlzIGRvbmUgYmVmb3JlCisgKiBjaGlwIGFkZHJlc3Mgc3BhY2UgaXMgaW5pdHRlZCwgc28gY2FuJ3QgdG91Y2ggaW5maW5pcGF0aCByZWdpc3RlcnMKKyAqLworc3RhdGljIGludCBpcGF0aF9zZXR1cF9odF9jb25maWcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcG9zLCByZXQgPSAwOworCWludCBpaGFuZGxlciA9IDA7CisKKwkvKgorCSAqIFJlYWQgdGhlIGNhcGFiaWxpdHkgaW5mbyB0byBmaW5kIHRoZSBpbnRlcnJ1cHQgaW5mbywgYW5kIGFsc28KKwkgKiBoYW5kbGUgY2xlYXJpbmcgQ1JDIGVycm9ycyBpbiBsaW5rY3RybCByZWdpc3RlciBpZiBuZWNlc3NhcnkuICBXZQorCSAqIGRvIHRoaXMgZWFybHksIGJlZm9yZSB3ZSBldmVyIGVuYWJsZSBlcnJvcnMgb3IgaGFyZHdhcmUgZXJyb3JzLAorCSAqIG1vc3RseSB0byBhdm9pZCBjYXVzaW5nIHRoZSBjaGlwIHRvIGVudGVyIGZyZWV6ZSBtb2RlLgorCSAqLworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgSFRfQ0FQQUJJTElUWV9JRCk7CisJaWYgKCFwb3MpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkbid0IGZpbmQgSHlwZXJUcmFuc3BvcnQgIgorCQkJICAgICAgImNhcGFiaWxpdHk7IG5vIGludGVycnVwdHNcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWw7CisJfQorCWRvIHsKKwkJdTggY2FwX3R5cGU7CisKKwkJLyogdGhlIEhUIGNhcGFiaWxpdHkgdHlwZSBieXRlIGlzIDMgYnl0ZXMgYWZ0ZXIgdGhlCisJCSAqIGNhcGFiaWxpdHkgYnl0ZS4KKwkJICovCisJCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBwb3MgKyAzLCAmY2FwX3R5cGUpKSB7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ291bGRuJ3QgcmVhZCBjb25maWcgIgorCQkJCSAiY29tbWFuZCBAICVkXG4iLCBwb3MpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCEoY2FwX3R5cGUgJiAweEUwKSkKKwkJCXNsYXZlX29yX3ByaV9ibGsoZGQsIHBkZXYsIHBvcywgY2FwX3R5cGUpOworCQllbHNlIGlmIChjYXBfdHlwZSA9PSBIVF9JTlRSX0RJU0NfQ09ORklHKQorCQkJaWhhbmRsZXIgPSBzZXRfaW50X2hhbmRsZXIoZGQsIHBkZXYsIHBvcyk7CisJfSB3aGlsZSAoKHBvcyA9IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShwZGV2LCBwb3MsCisJCQkJCQkgSFRfQ0FQQUJJTElUWV9JRCkpKTsKKworCWlmICghaWhhbmRsZXIpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkbid0IGZpbmQgaW50ZXJydXB0IGhhbmRsZXIgaW4gIgorCQkJICAgICAgImNvbmZpZyBzcGFjZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfc2V0dXBfaHRfY2xlYW51cCAtIGNsZWFuIHVwIGFueSBwZXItY2hpcCBjaGlwLXNwZWNpZmljIHN0dWZmCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIENhbGxlZCBkdXJpbmcgZHJpdmVyIHVubG9hZC4KKyAqIFRoaXMgaXMgY3VycmVudGx5IGEgbm9wIGZvciB0aGUgSFQtNDAwLCBub3QgZm9yIGFsbCBjaGlwcworICovCitzdGF0aWMgdm9pZCBpcGF0aF9zZXR1cF9odF9jbGVhbnVwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKK30KKworLyoqCisgKiBpcGF0aF9zZXR1cF9odF9zZXRleHRsZWQgLSBzZXQgdGhlIHN0YXRlIG9mIHRoZSB0d28gZXh0ZXJuYWwgTEVEcworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBsc3Q6IHRoZSBMIHN0YXRlCisgKiBAbHRzdDogdGhlIExUIHN0YXRlCisgKgorICogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgdHdvIGV4dGVybmFsIExFRHMsIHRvIGluZGljYXRlIHBoeXNpY2FsIGFuZAorICogbG9naWNhbCBzdGF0ZSBvZiBJQiBsaW5rLiAgIEZvciB0aGlzIGNoaXAgKGF0IGxlYXN0IHdpdGggcmVjb21tZW5kZWQKKyAqIGJvYXJkIHBpbm91dHMpLCBMRUQxIGlzIEdyZWVuIChwaHlzaWNhbCBzdGF0ZSksIGFuZCBMRUQyIGlzIFllbGxvdworICogKGxvZ2ljYWwgc3RhdGUpCisgKgorICogTm90ZTogIFdlIHRyeSB0byBtYXRjaCB0aGUgTWVsbGFub3ggSENBIExFRCBiZWhhdmlvciBhcyBiZXN0CisgKiB3ZSBjYW4uICBHcmVlbiBpbmRpY2F0ZXMgcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBPSyAoc29tZXRoaW5nIGlzCisgKiBwbHVnZ2VkIGluLCBhbmQgd2UgY2FuIHRyYWluKS4KKyAqIEFtYmVyIGluZGljYXRlcyB0aGUgbGluayBpcyBsb2dpY2FsbHkgdXAgKEFDVElWRSkuCisgKiBNZWxsYW5veCBmdXJ0aGVyIGJsaW5rcyB0aGUgYW1iZXIgTEVEIHRvIGluZGljYXRlIGRhdGEgcGFja2V0CisgKiBhY3Rpdml0eSwgYnV0IHdlIGhhdmUgbm8gaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhhdCwgc28gaXQgd291bGQKKyAqIHJlcXVpcmUgd2FraW5nIHVwIGV2ZXJ5IDEwLTIwIG1zZWNzIGFuZCBjaGVja2luZyB0aGUgY291bnRlcnMKKyAqIG9uIHRoZSBjaGlwLCBhbmQgdGhlbiB0dXJuaW5nIHRoZSBMRUQgb2ZmIGlmIGFwcHJvcHJpYXRlLiAgVGhhdCdzCisgKiB2aXNpYmxlIG92ZXJoZWFkLCBzbyBub3Qgc29tZXRoaW5nIHdlIHdpbGwgZG8uCisgKgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9zZXR1cF9odF9zZXRleHRsZWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICAgdTY0IGxzdCwgdTY0IGx0c3QpCit7CisJdTY0IGV4dGN0bDsKKworCS8qIHRoZSBkaWFncyB1c2UgdGhlIExFRCB0byBpbmRpY2F0ZSBkaWFnIGluZm8sIHNvIHdlIGxlYXZlCisJICogdGhlIGV4dGVybmFsIExFRCBhbG9uZSB3aGVuIHRoZSBkaWFncyBhcmUgcnVubmluZyAqLworCWlmIChpcGF0aF9kaWFnX2ludXNlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIHN0YXJ0IGJ5IHNldHRpbmcgYm90aCBMRUQgY29udHJvbCBiaXRzIHRvIG9mZiwgdGhlbiB0dXJuCisJICogb24gdGhlIGFwcHJvcHJpYXRlIGJpdChzKS4KKwkgKi8KKwlpZiAoZGQtPmlwYXRoX2JvYXJkcmV2ID09IDgpIHsgLyogTFMvWC0xIHVzZXMgZGlmZmVyZW50IHBpbnMgKi8KKwkJLyoKKwkJICogbWFqb3IgZGlmZmVyZW5jZSBpcyB0aGF0IElORklOSVBBVEhfRVhUQ19MRURHQkxFUlJfT0ZGCisJCSAqIGlzIGludmVydGVkLCAgYmVjYXVzZSBpdCBpcyBub3JtYWxseSB1c2VkIHRvIGluZGljYXRlCisJCSAqIGEgaGFyZHdhcmUgZmF1bHQgYXQgcmVzZXQsIGlmIHRoZXJlIHdlcmUgZXJyb3JzCisJCSAqLworCQlleHRjdGwgPSAoZGQtPmlwYXRoX2V4dGN0cmwgJiB+SU5GSU5JUEFUSF9FWFRDX0xFREdCTE9LX09OKQorCQkJfCBJTkZJTklQQVRIX0VYVENfTEVER0JMRVJSX09GRjsKKwkJaWYgKGx0c3QgPT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCkKKwkJCWV4dGN0bCAmPSB+SU5GSU5JUEFUSF9FWFRDX0xFREdCTEVSUl9PRkY7CisJCWlmIChsc3QgPT0gSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFKQorCQkJZXh0Y3RsIHw9IElORklOSVBBVEhfRVhUQ19MRURHQkxPS19PTjsKKwl9CisJZWxzZSB7CisJCWV4dGN0bCA9IGRkLT5pcGF0aF9leHRjdHJsICYKKwkJCX4oSU5GSU5JUEFUSF9FWFRDX0xFRDFQUklQT1JUX09OIHwKKwkJCSAgSU5GSU5JUEFUSF9FWFRDX0xFRDJQUklQT1JUX09OKTsKKwkJaWYgKGx0c3QgPT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCkKKwkJCWV4dGN0bCB8PSBJTkZJTklQQVRIX0VYVENfTEVEMVBSSVBPUlRfT047CisJCWlmIChsc3QgPT0gSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFKQorCQkJZXh0Y3RsIHw9IElORklOSVBBVEhfRVhUQ19MRUQyUFJJUE9SVF9PTjsKKwl9CisJZGQtPmlwYXRoX2V4dGN0cmwgPSBleHRjdGw7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRjdHJsLCBleHRjdGwpOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9pbml0X2h0X3ZhcmlhYmxlcyh2b2lkKQoreworCWlwYXRoX2dwaW9fc2RhX251bSA9IF9JUEFUSF9HUElPX1NEQV9OVU07CisJaXBhdGhfZ3Bpb19zY2xfbnVtID0gX0lQQVRIX0dQSU9fU0NMX05VTTsKKwlpcGF0aF9ncGlvX3NkYSA9IElQQVRIX0dQSU9fU0RBOworCWlwYXRoX2dwaW9fc2NsID0gSVBBVEhfR1BJT19TQ0w7CisKKwlpbmZpbmlwYXRoX2lfYml0c2V4dGFudCA9CisJCShJTkZJTklQQVRIX0lfUkNWVVJHX01BU0sgPDwgSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCkgfAorCQkoSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0sgPDwKKwkJIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCkgfAorCQlJTkZJTklQQVRIX0lfRVJST1IgfCBJTkZJTklQQVRIX0lfU1BJT1NFTlQgfAorCQlJTkZJTklQQVRIX0lfU1BJT0JVRkFWQUlMIHwgSU5GSU5JUEFUSF9JX0dQSU87CisKKwlpbmZpbmlwYXRoX2VfYml0c2V4dGFudCA9CisJCUlORklOSVBBVEhfRV9SRk9STUFURVJSIHwgSU5GSU5JUEFUSF9FX1JWQ1JDIHwKKwkJSU5GSU5JUEFUSF9FX1JJQ1JDIHwgSU5GSU5JUEFUSF9FX1JNSU5QS1RMRU4gfAorCQlJTkZJTklQQVRIX0VfUk1BWFBLVExFTiB8IElORklOSVBBVEhfRV9STE9OR1BLVExFTiB8CisJCUlORklOSVBBVEhfRV9SU0hPUlRQS1RMRU4gfCBJTkZJTklQQVRIX0VfUlVORVhQQ0hBUiB8CisJCUlORklOSVBBVEhfRV9SVU5TVVBWTCB8IElORklOSVBBVEhfRV9SRUJQIHwKKwkJSU5GSU5JUEFUSF9FX1JJQkZMT1cgfCBJTkZJTklQQVRIX0VfUkJBRFZFUlNJT04gfAorCQlJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfCBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwgfAorCQlJTkZJTklQQVRIX0VfUkJBRFRJRCB8IElORklOSVBBVEhfRV9SSERSTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1JIRFIgfCBJTkZJTklQQVRIX0VfUklCTE9TVExJTksgfAorCQlJTkZJTklQQVRIX0VfU01JTlBLVExFTiB8IElORklOSVBBVEhfRV9TTUFYUEtUTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1NVTkRFUlJVTiB8IElORklOSVBBVEhfRV9TUEtUTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1NEUk9QUEVEU01QUEtUIHwgSU5GSU5JUEFUSF9FX1NEUk9QUEVEREFUQVBLVCB8CisJCUlORklOSVBBVEhfRV9TUElPQVJNTEFVTkNIIHwgSU5GSU5JUEFUSF9FX1NVTkVYUEVSUlBLVE5VTSB8CisJCUlORklOSVBBVEhfRV9TVU5TVVBWTCB8IElORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQgfAorCQlJTkZJTklQQVRIX0VfSU5WQUxJREFERFIgfCBJTkZJTklQQVRIX0VfUkVTRVQgfAorCQlJTkZJTklQQVRIX0VfSEFSRFdBUkU7CisKKwlpbmZpbmlwYXRoX2h3ZV9iaXRzZXh0YW50ID0KKwkJKElORklOSVBBVEhfSFdFX0hUQ01FTVBBUklUWUVSUl9NQVNLIDw8CisJCSBJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfU0hJRlQpIHwKKwkJKElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9NQVNLIDw8CisJCSBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQpIHwKKwkJKElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9NQVNLIDw8CisJCSBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQpIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDTE5LQUJZVEUwQ1JDRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDTE5LQUJZVEUxQ1JDRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDTE5LQkJZVEUwQ1JDRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDTE5LQkJZVEUxQ1JDRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjQgfAorCQlJTkZJTklQQVRIX0hXRV9IVENNSVNDRVJSNSB8IElORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI2IHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjcgfAorCQlJTkZJTklQQVRIX0hXRV9IVENCVVNUUkVRUEFSSVRZRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDQlVTVFJFU1BQQVJJVFlFUlIgfAorCQlJTkZJTklQQVRIX0hXRV9IVENCVVNJUkVRUEFSSVRZRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfUlhEU1lOQ01FTVBBUklUWUVSUiB8CisJCUlORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQgfAorCQlJTkZJTklQQVRIX0hXRV9DT1JFUExMX0ZCU0xJUCB8CisJCUlORklOSVBBVEhfSFdFX0NPUkVQTExfUkZTTElQIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRCUExMX0ZCU0xJUCB8CisJCUlORklOSVBBVEhfSFdFX0hUQlBMTF9SRlNMSVAgfAorCQlJTkZJTklQQVRIX0hXRV9IVEFQTExfRkJTTElQIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRBUExMX1JGU0xJUCB8CisJCUlORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCB8CisJCUlORklOSVBBVEhfSFdFX0lCQ0JVU1RPU1BDUEFSSVRZRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfSUJDQlVTRlJTUENQQVJJVFlFUlI7CisKKwlpbmZpbmlwYXRoX2lfcmN2YXZhaWxfbWFzayA9IElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLOworCWluZmluaXBhdGhfaV9yY3Z1cmdfbWFzayA9IElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSzsKK30KKworLyoqCisgKiBpcGF0aF9odF9pbml0X2h3ZXJyb3JzIC0gZW5hYmxlIGhhcmR3YXJlIGVycm9ycworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBub3cgdGhhdCB3ZSBoYXZlIGZpbmlzaGVkIGluaXRpYWxpemluZyBldmVyeXRoaW5nIHRoYXQgbWlnaHQgcmVhc29uYWJseQorICogY2F1c2UgYSBoYXJkd2FyZSBlcnJvciwgYW5kIGNsZWFyZWQgdGhvc2UgZXJyb3JzIGJpdHMgYXMgdGhleSBvY2N1ciwKKyAqIHdlIGNhbiBlbmFibGUgaGFyZHdhcmUgZXJyb3JzIGluIHRoZSBtYXNrIChwb3RlbnRpYWxseSBlbmFibGluZworICogZnJlZXplIG1vZGUpLCBhbmQgZW5hYmxlIGhhcmR3YXJlIGVycm9ycyBhcyBlcnJvcnMgKGFsb25nIHdpdGgKKyAqIGV2ZXJ5dGhpbmcgZWxzZSkgaW4gZXJyb3JtYXNrCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX2h0X2luaXRfaHdlcnJvcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWlwYXRoX2Vycl90IHZhbDsKKwl1NjQgZXh0c3ZhbDsKKworCWV4dHN2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRzdGF0dXMpOworCisJaWYgKCEoZXh0c3ZhbCAmIElORklOSVBBVEhfRVhUU19NRU1CSVNUX0VORFRFU1QpKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiTWVtQklTVCBkaWQgbm90IGNvbXBsZXRlIVxuIik7CisKKwlpcGF0aF9jaGVja19odGxpbmsoZGQpOworCisJLyogYmFycmluZyBidWdzLCBhbGwgaHdlcnJvcnMgYmVjb21lIGludGVycnVwdHMsIHdoaWNoIGNhbiAqLworCXZhbCA9IC0xTEw7CisJLyogZG9uJ3QgbG9vayBhdCBjcmMgbGFuZTEgaWYgOCBiaXQgKi8KKwlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfOEJJVF9JTl9IVDApCisJCXZhbCAmPSB+aW5maW5pcGF0aF9od2VfaHRjbG5rYWJ5dGUxY3JjZXJyOworCS8qIGRvbid0IGxvb2sgYXQgY3JjIGxhbmUxIGlmIDggYml0ICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIXzhCSVRfSU5fSFQxKQorCQl2YWwgJj0gfmluZmluaXBhdGhfaHdlX2h0Y2xua2JieXRlMWNyY2VycjsKKworCS8qCisJICogZGlzYWJsZSBSWERTWU5DTUVNUEFSSVRZIGJlY2F1c2UgZXh0ZXJuYWwgc2VyZGVzIGlzIHVudXNlZCwKKwkgKiBhbmQgdGhlcmVmb3JlIHRoZSBsb2dpYyB3aWxsIG5ldmVyIGJlIHVzZWQgb3IgaW5pdGlhbGl6ZWQsCisJICogYW5kIHVuaW5pdGlhbGl6ZWQgc3RhdGUgd2lsbCBub3JtYWxseSByZXN1bHQgaW4gdGhpcyBlcnJvcgorCSAqIGJlaW5nIGFzc2VydGVkLiAgU2ltaWxhcmx5IGZvciB0aGUgZXh0ZXJuYWwgc2VyZGVzcyBwbGwKKwkgKiBsb2NrIHNpZ25hbC4KKwkgKi8KKwl2YWwgJj0gfihJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQgfAorCQkgSU5GSU5JUEFUSF9IV0VfUlhEU1lOQ01FTVBBUklUWUVSUik7CisKKwkvKgorCSAqIERpc2FibGUgTUlTQ0VSUjQgYmVjYXVzZSBvZiBhbiBpbnZlcnNpb24gaW4gdGhlIEhUIGNvcmUKKwkgKiBsb2dpYyBjaGVja2luZyBmb3IgZXJyb3JzIHRoYXQgY2F1c2UgdGhpcyBiaXQgdG8gYmUgc2V0LgorCSAqIFRoZSBlcnJhdGEgY2FuIGFsc28gY2F1c2UgdGhlIHByb3RvY29sIGVycm9yIGJpdCB0byBiZSBzZXQKKwkgKiBpbiB0aGUgSFQgY29uZmlnIHNwYWNlIGxpbmtlcnJvciByZWdpc3RlcihzKS4KKwkgKi8KKwl2YWwgJj0gfklORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI0OworCisJLyoKKwkgKiBQTEwgaWdub3JlZCBiZWNhdXNlIE1ESU8gaW50ZXJmYWNlIGhhcyBhIGxvZ2ljIHByb2JsZW0KKwkgKiBmb3IgcmVhZHMsIG9uIENvbXN0b2NrIGFuZCBQb25kZXJvc2EuICBCUklOR1VQCisJICovCisJaWYgKGRkLT5pcGF0aF9ib2FyZHJldiA9PSA0IHx8IGRkLT5pcGF0aF9ib2FyZHJldiA9PSA5KQorCQl2YWwgJj0gfklORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRDsKKwlkZC0+aXBhdGhfaHdlcnJtYXNrID0gdmFsOworfQorCisvKioKKyAqIGlwYXRoX2h0X2JyaW5ndXBfc2VyZGVzIC0gYnJpbmcgdXAgdGhlIHNlcmRlcworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqLworc3RhdGljIGludCBpcGF0aF9odF9icmluZ3VwX3NlcmRlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTY0IHZhbCwgY29uZmlnMTsKKwlpbnQgcmV0ID0gMCwgY2hhbmdlID0gMDsKKworCWlwYXRoX2RiZygiVHJ5aW5nIHRvIGJyaW5ndXAgc2VyZGVzXG4iKTsKKworCWlmIChpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycnN0YXR1cykgJgorCSAgICBJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQpCisJeworCQlpcGF0aF9kYmcoIkF0IHN0YXJ0LCBzZXJkZXMgUExMIGZhaWxlZCBiaXQgc2V0IGluICIKKwkJCSAgImh3ZXJyc3RhdHVzLCBjbGVhcmluZyBhbmQgY29udGludWluZ1xuIik7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJjbGVhciwKKwkJCQkgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKTsKKwl9CisKKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwKTsKKwljb25maWcxID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMSk7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJJbml0aWFsIHNlcmRlcyBzdGF0dXMgaXMgY29uZmlnMD0lbGx4ICIKKwkJICAgImNvbmZpZzE9JWxseCwgc3N0YXR1cz0lbGx4IHhneHMgJWxseFxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLCAodW5zaWduZWQgbG9uZyBsb25nKSBjb25maWcxLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNzdGF0dXMpLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnKSk7CisKKwkvKiBmb3JjZSByZXNldCBvbiAqLworCXZhbCB8PSBJTkZJTklQQVRIX1NFUkRDMF9SRVNFVF9QTEwKKwkJLyogfCBJTkZJTklQQVRIX1NFUkRDMF9SRVNFVF9NQVNLICovCisJCTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsIHZhbCk7CisJdWRlbGF5KDE1KTsJCS8qIG5lZWQgcGxsIHJlc2V0IHNldCBhdCBsZWFzdCBmb3IgYSBiaXQgKi8KKworCWlmICh2YWwgJiBJTkZJTklQQVRIX1NFUkRDMF9SRVNFVF9QTEwpIHsKKwkJdTY0IHZhbDIgPSB2YWwgJj0gfklORklOSVBBVEhfU0VSREMwX1JFU0VUX1BMTDsKKwkJLyogc2V0IGxhbmUgcmVzZXRzLCBhbmQgdHggaWRsZSwgZHVyaW5nIHBsbCByZXNldCAqLworCQl2YWwyIHw9IElORklOSVBBVEhfU0VSREMwX1JFU0VUX01BU0sgfAorCQkJSU5GSU5JUEFUSF9TRVJEQzBfVFhJRExFOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJDbGVhcmluZyBzZXJkZXMgUExMIHJlc2V0ICh3cml0aW5nICIKKwkJCSAgICIlbGx4KVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsMik7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMCwKKwkJCQkgdmFsMik7CisJCS8qCisJCSAqIGJlIHN1cmUgY2hpcCBzYXcgaXQKKwkJICovCisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCQkvKgorCQkgKiBuZWVkIHBsbCByZXNldCBjbGVhciBhdCBsZWFzdCAxMSB1c2VjIGJlZm9yZSBsYW5lCisJCSAqIHJlc2V0cyBjbGVhcmVkOyBnaXZlIGl0IGEgZmV3IG1vcmUKKwkJICovCisJCXVkZWxheSgxNSk7CisJCXZhbCA9IHZhbDI7CS8qIGZvciBjaGVjayBiZWxvdyAqLworCX0KKworCWlmICh2YWwgJiAoSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfUExMIHwKKwkJICAgSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfTUFTSyB8CisJCSAgIElORklOSVBBVEhfU0VSREMwX1RYSURMRSkpIHsKKwkJdmFsICY9IH4oSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfUExMIHwKKwkJCSBJTkZJTklQQVRIX1NFUkRDMF9SRVNFVF9NQVNLIHwKKwkJCSBJTkZJTklQQVRIX1NFUkRDMF9UWElETEUpOworCQkvKiBjbGVhciB0aGVtICovCisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMCwKKwkJCQkgdmFsKTsKKwl9CisKKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnKTsKKwlpZiAoKCh2YWwgPj4gSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX1NISUZUKSAmCisJICAgICBJTkZJTklQQVRIX1hHWFNfTURJT0FERFJfTUFTSykgIT0gMykgeworCQl2YWwgJj0gfihJTkZJTklQQVRIX1hHWFNfTURJT0FERFJfTUFTSyA8PAorCQkJIElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVCk7CisJCS8qCisJCSAqIHdlIHVzZSBhZGRyZXNzIDMKKwkJICovCisJCXZhbCB8PSAzVUxMIDw8IElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVDsKKwkJY2hhbmdlID0gMTsKKwl9CisJaWYgKHZhbCAmIElORklOSVBBVEhfWEdYU19SRVNFVCkgeworCQkvKiBub3JtYWxseSB0cnVlIGFmdGVyIGJvb3QgKi8KKwkJdmFsICY9IH5JTkZJTklQQVRIX1hHWFNfUkVTRVQ7CisJCWNoYW5nZSA9IDE7CisJfQorCWlmIChjaGFuZ2UpCisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZywgdmFsKTsKKworCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzApOworCisJLyogY2xlYXIgY3VycmVudCBhbmQgZGUtZW1waGFzaXMgYml0cyAqLworCWNvbmZpZzEgJj0gfjB4MGZmZmZmZmZmMDBVTEw7CisJLyogc2V0IGN1cnJlbnQgdG8gMjBtYSAqLworCWNvbmZpZzEgfD0gMHgwMDAwMDAwMDAwMFVMTDsKKwkvKiBzZXQgZGUtZW1waGFzaXMgdG8gLTUuNjhkQiAqLworCWNvbmZpZzEgfD0gMHgwY2NjYzAwMDAwMFVMTDsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzEsIGNvbmZpZzEpOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQWZ0ZXIgc2V0dXA6IHNlcmRlcyBzdGF0dXMgaXMgY29uZmlnMD0lbGx4ICIKKwkJICAgImNvbmZpZzE9JWxseCwgc3N0YXR1cz0lbGx4IHhneHMgJWxseFxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLCAodW5zaWduZWQgbG9uZyBsb25nKSBjb25maWcxLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNzdGF0dXMpLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnKSk7CisKKwlpZiAoIWlwYXRoX3dhaXRmb3JfbWRpb19jbWRyZWFkeShkZCkpIHsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9tZGlvLAorCQkJCSBpcGF0aF9tZGlvX3JlcShJUEFUSF9NRElPX0NNRF9SRUFELCAzMSwKKwkJCQkJCUlQQVRIX01ESU9fQ1RSTF9YR1hTX1JFR184LAorCQkJCQkJMCkpOworCQlpZiAoaXBhdGhfd2FpdGZvcl9jb21wbGV0ZShkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9tZGlvLAorCQkJCQkgICBJUEFUSF9NRElPX0RBVEFWQUxJRCwgJnZhbCkpCisJCQlpcGF0aF9kYmcoIk5ldmVyIGdvdCBNRElPIGRhdGEgZm9yIFhHWFMgc3RhdHVzICIKKwkJCQkgICJyZWFkXG4iKTsKKwkJZWxzZQorCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiTURJTyBSZWFkIHJlZzgsICIKKwkJCQkgICAiJ2JhbmsnIDMxICV4XG4iLCAodTMyKSB2YWwpOworCX0gZWxzZQorCQlpcGF0aF9kYmcoIk5ldmVyIGdvdCBNRElPIGNtZHJlYWR5IGZvciBYR1hTIHN0YXR1cyByZWFkXG4iKTsKKworCXJldHVybiByZXQ7CQkvKiBmb3Igbm93LCBzYXkgd2UgYWx3YXlzIHN1Y2NlZWRlZCAqLworfQorCisvKioKKyAqIGlwYXRoX2h0X3F1aWV0X3NlcmRlcyAtIHNldCBzZXJkZXMgdG8gdHhpZGxlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogZHJpdmVyIGlzIGJlaW5nIHVubG9hZGVkCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX2h0X3F1aWV0X3NlcmRlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTY0IHZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzApOworCisJdmFsIHw9IElORklOSVBBVEhfU0VSREMwX1RYSURMRTsKKwlpcGF0aF9kYmcoIlNldHRpbmcgVHhJZGxlRW4gb24gc2VyZGVzIChjb25maWcwID0gJWxseClcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfaHRfaW50Y29uZmlnKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFkZC0+aXBhdGhfaW50Y29uZmlnKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJObyBpbnRlcnJ1cHRzIGVuYWJsZWQsIGNvdWxkbid0IHNldHVwICIKKwkJCSAgICAgICJpbnRlcnJ1cHQgYWRkcmVzc1xuIik7CisJCXJldCA9IDE7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludGVycnVwdGNvbmZpZywKKwkJCSBkZC0+aXBhdGhfaW50Y29uZmlnKTsJLyogaW50ZXJydXB0IGFkZHJlc3MgKi8KKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcGVfcHV0X3RpZCAtIHdyaXRlIGEgVElEIGluIGNoaXAKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAdGlkcHRyOiBwb2ludGVyIHRvIHRoZSBleHBlY3RlZCBUSUQgKGluIGNoaXApIHRvIHVkcGF0ZQorICogQHRpZHR5cGU6IDAgZm9yIGVhZ2VyLCAxIGZvciBleHBlY3RlZAorICogQHBhOiBwaHlzaWNhbCBhZGRyZXNzIG9mIGluIG1lbW9yeSBidWZmZXI7IGlwYXRoX3RpZGludmFsaWQgaWYgZnJlZWluZworICoKKyAqIFRoaXMgZXhpc3RzIGFzIGEgc2VwYXJhdGUgcm91dGluZSB0byBhbGxvdyBmb3Igc3BlY2lhbCBsb2NraW5nIGV0Yy4KKyAqIEl0J3MgdXNlZCBmb3IgYm90aCB0aGUgZnVsbCBjbGVhbnVwIG9uIGV4aXQsIGFzIHdlbGwgYXMgdGhlIG5vcm1hbAorICogc2V0dXAgYW5kIHRlYXJkb3duLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9odF9wdXRfdGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCSAgICAgdTY0IF9faW9tZW0gKnRpZHB0ciwgdTMyIHR5cGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGEpCit7CisJaWYgKHBhICE9IGRkLT5pcGF0aF90aWRpbnZhbGlkKSB7CisJCWlmICh1bmxpa2VseSgocGEgJiB+SU5GSU5JUEFUSF9SVF9BRERSX01BU0spKSkgeworCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCQkgInBoeXNhZGRyICVseCBoYXMgbW9yZSB0aGFuICIKKwkJCQkgIjQwIGJpdHMsIHVzaW5nIG9ubHkgNDAhISFcbiIsIHBhKTsKKwkJCXBhICY9IElORklOSVBBVEhfUlRfQUREUl9NQVNLOworCQl9CisJCWlmICh0eXBlID09IDApCisJCQlwYSB8PSBkZC0+aXBhdGhfdGlkdGVtcGxhdGU7CisJCWVsc2UgeworCQkJLyogaW4gd29yZHMgKGZpeGVkLCBmdWxsIHBhZ2UpLiAgKi8KKwkJCXU2NCBsZW52YWxpZCA9IFBBR0VfU0laRSA+PiAyOworCQkJbGVudmFsaWQgPDw9IElORklOSVBBVEhfUlRfQlVGU0laRV9TSElGVDsKKwkJCXBhIHw9IGxlbnZhbGlkIHwgSU5GSU5JUEFUSF9SVF9WQUxJRDsKKwkJfQorCX0KKwlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKQorCQl3cml0ZXEocGEsIHRpZHB0cik7Cit9CisKKy8qKgorICogaXBhdGhfaHRfY2xlYXJfdGlkIC0gY2xlYXIgYWxsIFRJRCBlbnRyaWVzIGZvciBhIHBvcnQsIGV4cGVjdGVkIGFuZCBlYWdlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwb3J0OiB0aGUgcG9ydAorICoKKyAqIFVzZWQgZnJvbSBpcGF0aF9jbG9zZSgpLCBhbmQgYXQgY2hpcCBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfaHRfY2xlYXJfdGlkcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIHBvcnQpCit7CisJdTY0IF9faW9tZW0gKnRpZGJhc2U7CisJaW50IGk7CisKKwlpZiAoIWRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJcmV0dXJuOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiSW52YWxpZGF0ZSBUSURzIGZvciBwb3J0ICV1XG4iLCBwb3J0KTsKKworCS8qCisJICogbmVlZCB0byBpbnZhbGlkYXRlIGFsbCBvZiB0aGUgZXhwZWN0ZWQgVElEIGVudHJpZXMgZm9yIHRoaXMKKwkgKiBwb3J0LCBzbyB3ZSBkb24ndCBoYXZlIHZhbGlkIGVudHJpZXMgdGhhdCBtaWdodCBzb21laG93IGdldAorCSAqIHVzZWQgKGVhcmx5IGluIG5leHQgdXNlIG9mIHRoaXMgcG9ydCwgb3IgdGhyb3VnaCBzb21lIGJ1ZykKKwkgKi8KKwl0aWRiYXNlID0gKHU2NCBfX2lvbWVtICopICgoY2hhciBfX2lvbWVtICopKGRkLT5pcGF0aF9rcmVnYmFzZSkgKworCQkJCSAgIGRkLT5pcGF0aF9yY3Z0aWRiYXNlICsKKwkJCQkgICBwb3J0ICogZGQtPmlwYXRoX3JjdnRpZGNudCAqCisJCQkJICAgc2l6ZW9mKCp0aWRiYXNlKSk7CisJZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9yY3Z0aWRjbnQ7IGkrKykKKwkJaXBhdGhfaHRfcHV0X3RpZChkZCwgJnRpZGJhc2VbaV0sIDEsIGRkLT5pcGF0aF90aWRpbnZhbGlkKTsKKworCXRpZGJhc2UgPSAodTY0IF9faW9tZW0gKikgKChjaGFyIF9faW9tZW0gKikoZGQtPmlwYXRoX2tyZWdiYXNlKSArCisJCQkJICAgZGQtPmlwYXRoX3JjdmVncmJhc2UgKworCQkJCSAgIHBvcnQgKiBkZC0+aXBhdGhfcmN2ZWdyY250ICoKKwkJCQkgICBzaXplb2YoKnRpZGJhc2UpKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfcmN2ZWdyY250OyBpKyspCisJCWlwYXRoX2h0X3B1dF90aWQoZGQsICZ0aWRiYXNlW2ldLCAwLCBkZC0+aXBhdGhfdGlkaW52YWxpZCk7Cit9CisKKy8qKgorICogaXBhdGhfaHRfdGlkdGVtcGxhdGUgLSBzZXR1cCBjb25zdGFudHMgZm9yIFRJRCB1cGRhdGVzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFdlIHNldHVwIHN0dWZmIHRoYXQgd2UgdXNlIGEgbG90LCB0byBhdm9pZCBjYWxjdWxhdGluZyBlYWNoIHRpbWUKKyAqLworc3RhdGljIHZvaWQgaXBhdGhfaHRfdGlkdGVtcGxhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWRkLT5pcGF0aF90aWR0ZW1wbGF0ZSA9IGRkLT5pcGF0aF9pYm1heGxlbiA+PiAyOworCWRkLT5pcGF0aF90aWR0ZW1wbGF0ZSA8PD0gSU5GSU5JUEFUSF9SVF9CVUZTSVpFX1NISUZUOworCWRkLT5pcGF0aF90aWR0ZW1wbGF0ZSB8PSBJTkZJTklQQVRIX1JUX1ZBTElEOworCisJLyoKKwkgKiB3b3JrIGFyb3VuZCBjaGlwIGVycmF0YSBidWcgNzM1OCwgYnkgbWFya2luZyBpbnZhbGlkIHRpZHMKKwkgKiBhcyBoYXZpbmcgbWF4IGxlbmd0aAorCSAqLworCWRkLT5pcGF0aF90aWRpbnZhbGlkID0gKC0xTEwgJiBJTkZJTklQQVRIX1JUX0JVRlNJWkVfTUFTSykgPDwKKwkJSU5GSU5JUEFUSF9SVF9CVUZTSVpFX1NISUZUOworfQorCitzdGF0aWMgaW50IGlwYXRoX2h0X2Vhcmx5X2luaXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXUzMiBfX2lvbWVtICpwaW9idWY7CisJdTMyIHBpb2luY3IsIHZhbDMyLCBlZ3JzaXplOworCWludCBpOworCisJLyoKKwkgKiBvbmUgY2FjaGUgbGluZTsgbG9uZyBJQiBoZWFkZXJzIHdpbGwgc3BpbGwgb3ZlciBpbnRvIHJlY2VpdmVkCisJICogYnVmZmVyCisJICovCisJZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgPSAxNjsKKwlkZC0+aXBhdGhfcmN2aGRyc2l6ZSA9IElQQVRIX0RGTFRfUkNWSERSU0laRTsKKworCS8qCisJICogRm9yIEhULTQwMCwgd2UgYWxsb2NhdGUgYSBzb21ld2hhdCBvdmVybHkgbGFyZ2UgZWFnZXIgYnVmZmVyLAorCSAqIHN1Y2ggdGhhdCB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgd2UgY2FuIHJlY2VpdmUgdGhlIGxhcmdlc3QKKwkgKiBwYWNrZXQgdGhhdCB3ZSBjYW4gc2VuZCBvdXQuICBUbyB0cnVseSBzdXBwb3J0IGEgNEtCIE1UVSwKKwkgKiB3ZSBuZWVkIHRvIGJ1bXAgdGhpcyB0byBhIGxhcmdlIHZhbHVlLiAgVG8gZGF0ZSwgb3RoZXIgdGhhbgorCSAqIHRlc3RpbmcsIHdlIGhhdmUgbmV2ZXIgZW5jb3VudGVyZWQgYW4gSENBIHRoYXQgY2FuIHJlYWxseQorCSAqIHNlbmQgNEtCIE1UVSBwYWNrZXRzLCBzbyB3ZSBkbyBub3QgaGFuZGxlIHRoYXQgKHdlJ2xsIGdldAorCSAqIGVycm9ycyBpbnRlcnJ1cHRzIGlmIHdlIGV2ZXIgc2VlIG9uZSkuCisJICovCisJZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemUgPSBkZC0+aXBhdGhfcGlvc2l6ZTJrOworCWVncnNpemUgPSBkZC0+aXBhdGhfcmN2ZWdyYnVmc2l6ZTsKKworCS8qCisJICogdGhlIG1pbigpIGNoZWNrIGhlcmUgaXMgY3VycmVudGx5IGEgbm9wLCBidXQgaXQgbWF5IG5vdAorCSAqIGFsd2F5cyBiZSwgZGVwZW5kaW5nIG9uIGp1c3QgaG93IHdlIGRvIGlwYXRoX3JjdmVncmJ1ZnNpemUKKwkgKi8KKwlkZC0+aXBhdGhfaWJtYXhsZW4gPSBtaW4oZGQtPmlwYXRoX3Bpb3NpemUyaywKKwkJCQkgZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemUpOworCWRkLT5pcGF0aF9pbml0X2libWF4bGVuID0gZGQtPmlwYXRoX2libWF4bGVuOworCWlwYXRoX2h0X3RpZHRlbXBsYXRlKGRkKTsKKworCS8qCisJICogemVybyBhbGwgdGhlIFRJRCBlbnRyaWVzIGF0IHN0YXJ0dXAuICBXZSBkbyB0aGlzIGZvciBzYW5pdHksCisJICogaW4gY2FzZSBvZiBhIHByZXZpb3VzIGRyaXZlciBjcmFzaCBvZiBzb21lIGtpbmQsIGFuZCBhbHNvCisJICogYmVjYXVzZSB0aGUgY2hpcCBwb3dlcnMgdXAgd2l0aCB0aGVzZSBtZW1vcmllcyBpbiBhbiB1bmtub3duCisJICogc3RhdGUuICBVc2UgcG9ydGNudCwgbm90IGNmZ3BvcnRzLCBzaW5jZSB0aGlzIGlzIGZvciB0aGUKKwkgKiBmdWxsIGNoaXAsIG5vdCBmb3IgY3VycmVudCAocG9zc2libHkgZGlmZmVyZW50KSBjb25maWd1cmF0aW9uCisJICogdmFsdWUuCisJICogQ2hpcCBFcnJhdGEgYnVnIDY0NDcKKwkgKi8KKwlmb3IgKHZhbDMyID0gMDsgdmFsMzIgPCBkZC0+aXBhdGhfcG9ydGNudDsgdmFsMzIrKykKKwkJaXBhdGhfaHRfY2xlYXJfdGlkcyhkZCwgdmFsMzIpOworCisJLyoKKwkgKiB3cml0ZSB0aGUgcGJjIG9mIGVhY2ggYnVmZmVyLCB0byBiZSBzdXJlIGl0J3MgaW5pdGlhbGl6ZWQsIHRoZW4KKwkgKiBjYW5jZWwgYWxsIHRoZSBidWZmZXJzLCBhbmQgYWxzbyBhYm9ydCBhbnkgcGFja2V0cyB0aGF0IG1pZ2h0CisJICogaGF2ZSBiZWVuIGluIGZsaWdodCBmb3Igc29tZSByZWFzb24gKHRoZSBsYXR0ZXIgaXMgZm9yIGRyaXZlcgorCSAqIHVubG9hZC9yZWxvYWQsIGJ1dCBpc24ndCBhIGJhZCBpZGVhIGF0IGZpcnN0IGluaXQpLglQSU8gc2VuZAorCSAqIGlzbid0IGVuYWJsZWQgYXQgdGhpcyBwb2ludCwgc28gdGhlcmUgaXMgbm8gZGFuZ2VyIG9mIHNlbmRpbmcKKwkgKiB0aGVzZSBvdXQgb24gdGhlIHdpcmUuCisJICogQ2hpcCBFcnJhdGEgYnVnIDY2MTAKKwkgKi8KKwlwaW9idWYgPSAodTMyIF9faW9tZW0gKikgKCgoY2hhciBfX2lvbWVtICopKGRkLT5pcGF0aF9rcmVnYmFzZSkpICsKKwkJCQkgIGRkLT5pcGF0aF9waW9idWZiYXNlKTsKKwlwaW9pbmNyID0gZGQtPmlwYXRoX3BhbGlnbiAvIHNpemVvZigqcGlvYnVmKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGQtPmlwYXRoX3Bpb2JjbnQyazsgaSsrKSB7CisJCS8qCisJCSAqIHJlYXNvbmFibGUgd29yZCBjb3VudCwganVzdCB0byBpbml0IHBiYworCQkgKi8KKwkJd3JpdGVsKDE2LCBwaW9idWYpOworCQlwaW9idWYgKz0gcGlvaW5jcjsKKwl9CisJLyoKKwkgKiBzZWxmLWNsZWFyaW5nCisJICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJCSBJTkZJTklQQVRIX1NfQUJPUlQpOworCisJaXBhdGhfZ2V0X2VlcHJvbV9pbmZvKGRkKTsKKwlpZihkZC0+aXBhdGhfYm9hcmRyZXYgPT0gNSAmJiBkZC0+aXBhdGhfc2VyaWFsWzBdID09ICcxJyAmJgorCQlkZC0+aXBhdGhfc2VyaWFsWzFdID09ICcyJyAmJiBkZC0+aXBhdGhfc2VyaWFsWzJdID09ICc4JykgeworCQkvKgorCQkgKiBMYXRlciBwcm9kdWN0aW9uIEhULTQ2MCBoYXMgc2FtZSBjaGFuZ2VzIGFzIEhULTQ2NSwgc28KKwkJICogY2FuIHVzZSBHUElPIGludGVycnVwdHMuICBUaGV5IGhhdmUgc2VyaWFsICMncyBzdGFydGluZworCQkgKiB3aXRoIDEyOCwgcmF0aGVyIHRoYW4gMTEyLgorCQkgKi8KKwkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0dQSU9fSU5UUjsKKwkJZGQtPmlwYXRoX2ZsYWdzICY9IH5JUEFUSF9QT0xMX1JYX0lOVFI7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2luaXRfaHRfZ2V0X2Jhc2VfaW5mbyAtIHNldCBjaGlwLXNwZWNpZmljIGZsYWdzIGZvciB1c2VyIGNvZGUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAa2Jhc2U6IGlwYXRoX2Jhc2VfaW5mbyBwb2ludGVyCisgKgorICogV2Ugc2V0IHRoZSBQQ0lFIGZsYWcgYmVjYXVzZSB0aGUgbG93ZXIgYmFuZHdpZHRoIG9uIFBDSWUgdnMKKyAqIEh5cGVyVHJhbnNwb3J0IGNhbiBhZmZlY3Qgc29tZSB1c2VyIHBhY2tldCBhbGdvcml0aGltcy4KKyAqLworc3RhdGljIGludCBpcGF0aF9odF9nZXRfYmFzZV9pbmZvKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIHZvaWQgKmtiYXNlKQoreworCXN0cnVjdCBpcGF0aF9iYXNlX2luZm8gKmtpbmZvID0ga2Jhc2U7CisKKwlraW5mby0+c3BpX3J1bnRpbWVfZmxhZ3MgfD0gSVBBVEhfUlVOVElNRV9IVCB8CisJCUlQQVRIX1JVTlRJTUVfUkNWSERSX0NPUFk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9pbml0X2h0NDAwX2Z1bmNzIC0gc2V0IHVwIHRoZSBjaGlwLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFRoaXMgaXMgZ2xvYmFsLCBhbmQgaXMgY2FsbGVkIGRpcmVjdGx5IGF0IGluaXQgdG8gc2V0IHVwIHRoZQorICogY2hpcC1zcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycyBmb3IgbGF0ZXIgdXNlLgorICovCit2b2lkIGlwYXRoX2luaXRfaHQ0MDBfZnVuY3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWRkLT5pcGF0aF9mX2ludHJzZXR1cCA9IGlwYXRoX2h0X2ludGNvbmZpZzsKKwlkZC0+aXBhdGhfZl9idXMgPSBpcGF0aF9zZXR1cF9odF9jb25maWc7CisJZGQtPmlwYXRoX2ZfcmVzZXQgPSBpcGF0aF9zZXR1cF9odF9yZXNldDsKKwlkZC0+aXBhdGhfZl9nZXRfYm9hcmRuYW1lID0gaXBhdGhfaHRfYm9hcmRuYW1lOworCWRkLT5pcGF0aF9mX2luaXRfaHdlcnJvcnMgPSBpcGF0aF9odF9pbml0X2h3ZXJyb3JzOworCWRkLT5pcGF0aF9mX2luaXRfaHdlcnJvcnMgPSBpcGF0aF9odF9pbml0X2h3ZXJyb3JzOworCWRkLT5pcGF0aF9mX2Vhcmx5X2luaXQgPSBpcGF0aF9odF9lYXJseV9pbml0OworCWRkLT5pcGF0aF9mX2hhbmRsZV9od2Vycm9ycyA9IGlwYXRoX2h0X2hhbmRsZV9od2Vycm9yczsKKwlkZC0+aXBhdGhfZl9xdWlldF9zZXJkZXMgPSBpcGF0aF9odF9xdWlldF9zZXJkZXM7CisJZGQtPmlwYXRoX2ZfYnJpbmd1cF9zZXJkZXMgPSBpcGF0aF9odF9icmluZ3VwX3NlcmRlczsKKwlkZC0+aXBhdGhfZl9jbGVhcl90aWRzID0gaXBhdGhfaHRfY2xlYXJfdGlkczsKKwlkZC0+aXBhdGhfZl9wdXRfdGlkID0gaXBhdGhfaHRfcHV0X3RpZDsKKwlkZC0+aXBhdGhfZl9jbGVhbnVwID0gaXBhdGhfc2V0dXBfaHRfY2xlYW51cDsKKwlkZC0+aXBhdGhfZl9zZXRleHRsZWQgPSBpcGF0aF9zZXR1cF9odF9zZXRleHRsZWQ7CisJZGQtPmlwYXRoX2ZfZ2V0X2Jhc2VfaW5mbyA9IGlwYXRoX2h0X2dldF9iYXNlX2luZm87CisKKwkvKgorCSAqIGluaXRpYWxpemUgY2hpcC1zcGVjaWZpYyB2YXJpYWJsZXMKKwkgKi8KKwlkZC0+aXBhdGhfZl90aWR0ZW1wbGF0ZSA9IGlwYXRoX2h0X3RpZHRlbXBsYXRlOworCisJLyoKKwkgKiBzZXR1cCB0aGUgcmVnaXN0ZXIgb2Zmc2V0cywgc2luY2UgdGhleSBhcmUgZGlmZmVyZW50IGZvciBlYWNoCisJICogY2hpcAorCSAqLworCWRkLT5pcGF0aF9rcmVncyA9ICZpcGF0aF9odF9rcmVnczsKKwlkZC0+aXBhdGhfY3JlZ3MgPSAmaXBhdGhfaHRfY3JlZ3M7CisKKwkvKgorCSAqIGRvIHZlcnkgZWFybHkgaW5pdCB0aGF0IGlzIG5lZWRlZCBiZWZvcmUgaXBhdGhfZl9idXMgaXMKKwkgKiBjYWxsZWQKKwkgKi8KKwlpcGF0aF9pbml0X2h0X3ZhcmlhYmxlcygpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODMyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKQEAgLTAsMCArMSw5NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorCisvKgorICogbWluIGJ1ZmZlcnMgd2Ugd2FudCB0byBoYXZlIHBlciBwb3J0LCBhZnRlciBkcml2ZXIKKyAqLworI2RlZmluZSBJUEFUSF9NSU5fVVNFUl9QT1JUX0JVRkNOVCA4CisKKy8qCisgKiBOdW1iZXIgb2YgcG9ydHMgd2UgYXJlIGNvbmZpZ3VyZWQgdG8gdXNlICh0byBhbGxvdyBmb3IgbW9yZSBwaW8KKyAqIGJ1ZmZlcnMgcGVyIHBvcnQsIGV0Yy4pICBaZXJvIG1lYW5zIHVzZSBjaGlwIHZhbHVlLgorICovCitzdGF0aWMgdXNob3J0IGlwYXRoX2NmZ3BvcnRzOworCittb2R1bGVfcGFyYW1fbmFtZWQoY2ZncG9ydHMsIGlwYXRoX2NmZ3BvcnRzLCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhjZmdwb3J0cywgIlNldCBtYXggbnVtYmVyIG9mIHBvcnRzIHRvIHVzZSIpOworCisvKgorICogTnVtYmVyIG9mIGJ1ZmZlcnMgcmVzZXJ2ZWQgZm9yIGRyaXZlciAobGF5ZXJlZCBkcml2ZXJzIGFuZCBTTUEKKyAqIHNlbmQpLiAgUmVzZXJ2ZWQgYXQgZW5kIG9mIGJ1ZmZlciBsaXN0LiAgIEluaXRpYWxpemVkIGJhc2VkIG9uCisgKiBudW1iZXIgb2YgUElPIGJ1ZmZlcnMgaWYgbm90IHNldCB2aWEgbW9kdWxlIGludGVyZmFjZS4KKyAqIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0IGl0J3MgZ2xvYmFsLCBidXQgd2UnbGwgdXNlIGRpZmZlcmVudAorICogbnVtYmVycyBmb3IgZGlmZmVyZW50IGNoaXAgdHlwZXMuICBTbyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBub3QKKyAqIHZlcnkgdXNlZnVsLiAgSSd2ZSByZWRlZmluZWQgaXQgZm9yIHRoZSAxLjMgcmVsZWFzZSBzbyB0aGF0IGl0J3MKKyAqIHplcm8gdW5sZXNzIHNldCBieSB0aGUgdXNlciB0byBzb21ldGhpbmcgZWxzZSwgaW4gd2hpY2ggY2FzZSB3ZQorICogdHJ5IHRvIHJlc3BlY3QgaXQuCisgKi8KK3N0YXRpYyB1c2hvcnQgaXBhdGhfa3Bpb2J1ZnM7CisKK3N0YXRpYyBpbnQgaXBhdGhfc2V0X2twaW9idWZzKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworCittb2R1bGVfcGFyYW1fY2FsbChrcGlvYnVmcywgaXBhdGhfc2V0X2twaW9idWZzLCBwYXJhbV9nZXRfdXNob3J0LAorCQkgICZpcGF0aF9rcGlvYnVmcywgU19JV1VTUiB8IFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhrcGlvYnVmcywgIlNldCBudW1iZXIgb2YgUElPIGJ1ZmZlcnMgZm9yIGRyaXZlciIpOworCisvKioKKyAqIGNyZWF0ZV9wb3J0MF9lZ3IgLSBhbGxvY2F0ZSB0aGUgZWFnZXIgVElEIGJ1ZmZlcnMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogVGhpcyBjb2RlIGlzIG5vdyBxdWl0ZSBkaWZmZXJlbnQgZm9yIHVzZXIgYW5kIGtlcm5lbCwgYmVjYXVzZQorICogdGhlIGtlcm5lbCB1c2VzIHNrYidzLCBmb3IgdGhlIGFjY2VsZXJhdGVkIG5ldHdvcmsgcGVyZm9ybWFuY2UuCisgKiBUaGlzIGlzIHRoZSBrZXJuZWwgKHBvcnQwKSB2ZXJzaW9uLgorICoKKyAqIEFsbG9jYXRlIHRoZSBlYWdlciBUSUQgYnVmZmVycyBhbmQgcHJvZ3JhbSB0aGVtIGludG8gaW5maW5pcGF0aC4KKyAqIFdlIHVzZSB0aGUgbmV0d29yayBsYXllciBhbGxvY19za2IoKSBhbGxvY2F0b3IgdG8gYWxsb2NhdGUgdGhlCisgKiBtZW1vcnksIGFuZCBlaXRoZXIgdXNlIHRoZSBidWZmZXJzIGFzIGlzIGZvciB0aGluZ3MgbGlrZSBTTUEKKyAqIHBhY2tldHMsIG9yIHBhc3MgdGhlIGJ1ZmZlcnMgdXAgdG8gdGhlIGlwYXRoIGxheWVyZWQgZHJpdmVyIGFuZAorICogdGhlbmNlIHRoZSBuZXR3b3JrIGxheWVyLCByZXBsYWNpbmcgdGhlbSBhcyB3ZSBkbyBzbyAoc2VlCisgKiBpcGF0aF9yY3ZfbGF5ZXIoKSkuCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX3BvcnQwX2VncihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdW5zaWduZWQgZSwgZWdyY250OworCXN0cnVjdCBza19idWZmICoqc2ticzsKKwlpbnQgcmV0OworCisJZWdyY250ID0gZGQtPmlwYXRoX3JjdmVncmNudDsKKworCXNrYnMgPSB2bWFsbG9jKHNpemVvZigqZGQtPmlwYXRoX3BvcnQwX3NrYnMpICogZWdyY250KTsKKwlpZiAoc2ticyA9PSBOVUxMKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJhbGxvY2F0aW9uIGVycm9yIGZvciBlYWdlciBUSUQgIgorCQkJICAgICAgInNrYiBhcnJheVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisJZm9yIChlID0gMDsgZSA8IGVncmNudDsgZSsrKSB7CisJCS8qCisJCSAqIFRoaXMgaXMgYSBiaXQgdHJpY2t5IGluIHRoYXQgd2UgYWxsb2NhdGUgZXh0cmEKKwkJICogc3BhY2UgZm9yIDIgYnl0ZXMgb2YgdGhlIDE0IGJ5dGUgZXRoZXJuZXQgaGVhZGVyLgorCQkgKiBUaGVzZSB0d28gYnl0ZXMgYXJlIHBhc3NlZCBpbiB0aGUgaXBhdGggaGVhZGVyIHNvCisJCSAqIHRoZSByZXN0IG9mIHRoZSBkYXRhIGlzIHdvcmQgYWxpZ25lZC4gIFdlIGFsbG9jYXRlCisJCSAqIDQgYnl0ZXMgc28gdGhhdCB0aGUgZGF0YSBidWZmZXIgc3RheXMgd29yZCBhbGlnbmVkLgorCQkgKiBTZWUgaXBhdGhfa3JlY2VpdmUoKSBmb3IgbW9yZSBkZXRhaWxzLgorCQkgKi8KKwkJc2tic1tlXSA9IGlwYXRoX2FsbG9jX3NrYihkZCwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2tic1tlXSkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIlNLQiBhbGxvY2F0aW9uIGVycm9yIGZvciAiCisJCQkJICAgICAgImVhZ2VyIFRJRCAldVxuIiwgZSk7CisJCQl3aGlsZSAoZSAhPSAwKQorCQkJCWRldl9rZnJlZV9za2Ioc2tic1stLWVdKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisJLyoKKwkgKiBBZnRlciBsb29wIGFib3ZlLCBzbyB3ZSBjYW4gdGVzdCBub24tTlVMTCB0byBzZWUgaWYgcmVhZHkKKwkgKiB0byB1c2UgYXQgcmVjZWl2ZSwgZXRjLgorCSAqLworCWRkLT5pcGF0aF9wb3J0MF9za2JzID0gc2ticzsKKworCWZvciAoZSA9IDA7IGUgPCBlZ3JjbnQ7IGUrKykgeworCQl1bnNpZ25lZCBsb25nIHBoeXMgPQorCQkJdmlydF90b19waHlzKGRkLT5pcGF0aF9wb3J0MF9za2JzW2VdLT5kYXRhKTsKKwkJZGQtPmlwYXRoX2ZfcHV0X3RpZChkZCwgZSArICh1NjQgX19pb21lbSAqKQorCQkJCSAgICAoKGNoYXIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UgKworCQkJCSAgICAgZGQtPmlwYXRoX3JjdmVncmJhc2UpLCAwLCBwaHlzKTsKKwl9CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnJpbmd1cF9saW5rKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1NjQgdmFsLCBpYmM7CisJaW50IHJldCA9IDA7CisKKwkvKiBob2xkIElCQyBpbiByZXNldCAqLworCWRkLT5pcGF0aF9jb250cm9sICY9IH5JTkZJTklQQVRIX0NfTElOS0VOQUJMRTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsCisJCQkgZGQtPmlwYXRoX2NvbnRyb2wpOworCisJLyoKKwkgKiBOb3RlIHRoYXQgcHJpb3IgdG8gdHJ5IDE0IG9yIDE1IG9mIElCLCB0aGUgY3JlZGl0IHNjYWxpbmcKKwkgKiB3YXNuJ3Qgd29ya2luZywgYmVjYXVzZSBpdCB3YXMgc3dhcHBlZCBmb3Igd3JpdGVzIHdpdGggdGhlCisJICogMSBiaXQgZGVmYXVsdCBsaW5rc3RhdGUgZmllbGQKKwkgKi8KKworCS8qIGlnbm9yZSBwYmMgYW5kIGFsaWduIHdvcmQgKi8KKwl2YWwgPSBkZC0+aXBhdGhfcGlvc2l6ZTJrIC0gMiAqIHNpemVvZih1MzIpOworCS8qCisJICogZm9yIElDUkMsIHdoaWNoIHdlIG9ubHkgc2VuZCBpbiBkaWFnIHRlc3QgcGt0IG1vZGUsIGFuZCB3ZQorCSAqIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdCBmb3IgbXR1CisJICovCisJdmFsICs9IDE7CisJLyoKKwkgKiBTZXQgdGhlIElCQyBtYXhwa3RsZW5ndGggdG8gdGhlIHNpemUgb2Ygb3VyIHBpbyBidWZmZXJzIHRoZQorCSAqIG1heHBrdGxlbmd0aCBpcyBpbiB3b3Jkcy4gIFRoaXMgaXMgKm5vdCogdGhlIElCIGRhdGEgTVRVLgorCSAqLworCWliYyA9ICh2YWwgLyBzaXplb2YodTMyKSkgPDwgSU5GSU5JUEFUSF9JQkNDX01BWFBLVExFTl9TSElGVDsKKwkvKiBpbiBLQiAqLworCWliYyB8PSAweDVVTEwgPDwgSU5GSU5JUEFUSF9JQkNDX0ZMT1dDVFJMV0FURVJNQVJLX1NISUZUOworCS8qCisJICogSG93IG9mdGVuIGZsb3djdHJsIHNlbnQuICBNb3JlIG9yIGxlc3MgaW4gdXNlY3M7IGJhbGFuY2UgYWdhaW5zdAorCSAqIHdhdGVybWFyayB2YWx1ZSwgc28gdGhhdCBpbiB0aGVvcnkgc2VuZGVycyBhbHdheXMgZ2V0IGEgZmxvdworCSAqIGNvbnRyb2wgdXBkYXRlIGluIHRpbWUgdG8gbm90IGxldCB0aGUgSUIgbGluayBnbyBpZGxlLgorCSAqLworCWliYyB8PSAweDNVTEwgPDwgSU5GSU5JUEFUSF9JQkNDX0ZMT1dDVFJMUEVSSU9EX1NISUZUOworCS8qIG1heCBlcnJvciB0b2xlcmFuY2UgKi8KKwlpYmMgfD0gMHhmVUxMIDw8IElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQ7CisJLyogdXNlICJyZWFsIiBidWZmZXIgc3BhY2UgZm9yICovCisJaWJjIHw9IDRVTEwgPDwgSU5GSU5JUEFUSF9JQkNDX0NSRURJVFNDQUxFX1NISUZUOworCS8qIElCIGNyZWRpdCBmbG93IGNvbnRyb2wuICovCisJaWJjIHw9IDB4ZlVMTCA8PCBJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9TSElGVDsKKwkvKiBpbml0aWFsbHkgY29tZSB1cCB3YWl0aW5nIGZvciBUUzEsIHdpdGhvdXQgc2VuZGluZyBhbnl0aGluZy4gKi8KKwlkZC0+aXBhdGhfaWJjY3RybCA9IGliYzsKKwkvKgorCSAqIFdhbnQgdG8gc3RhcnQgb3V0IHdpdGggYm90aCBMSU5LQ01EIGFuZCBMSU5LSU5JVENNRCBpbiBOT1AKKwkgKiAoMCBhbmQgMCkuICBEb24ndCBwdXQgbGlua2luaXRjbWQgaW4gaXBhdGhfaWJjY3RybCwgd2FudCB0aGF0CisJICogdG8gc3RheSBhIE5PUAorCSAqLworCWliYyB8PSBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSA8PAorCQlJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQ7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiV3JpdGluZyAweCVsbHggdG8gaWJjY3RybFxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaWJjKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsIGliYyk7CisKKwkvLyBiZSBzdXJlIGNoaXAgc2F3IGl0CisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisKKwlyZXQgPSBkZC0+aXBhdGhfZl9icmluZ3VwX3NlcmRlcyhkZCk7CisKKwlpZiAocmV0KQorCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQ291bGQgbm90IGluaXRpYWxpemUgU2VyRGVzLCAiCisJCQkgIm5vdCB1c2FibGVcbiIpOworCWVsc2UgeworCQkvKiBlbmFibGUgSUJDICovCisJCWRkLT5pcGF0aF9jb250cm9sIHw9IElORklOSVBBVEhfQ19MSU5LRU5BQkxFOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsCisJCQkJIGRkLT5pcGF0aF9jb250cm9sKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluaXRfY2hpcF9maXJzdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkgICBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKipwZHApCit7CisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJdTY0IHZhbDsKKworCS8qCisJICogc2tpcCBjZmdwb3J0cyBzdHVmZiBiZWNhdXNlIHdlIGFyZSBub3QgYWxsb2NhdGluZyBtZW1vcnksCisJICogYW5kIHdlIGRvbid0IHdhbnQgcHJvYmxlbXMgaWYgdGhlIHBvcnRjbnQgY2hhbmdlZCBkdWUgdG8KKwkgKiBjZmdwb3J0cy4gIFdlIGRvIHN0aWxsIGNoZWNrIGFuZCByZXBvcnQgYSBkaWZmZXJlbmNlLCBpZgorCSAqIG5vdCBzYW1lIChzaG91bGQgYmUgaW1wb3NzaWJsZSkuCisJICovCisJZGQtPmlwYXRoX3BvcnRjbnQgPQorCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9wb3J0Y250KTsKKwlpZiAoIWlwYXRoX2NmZ3BvcnRzKQorCQlkZC0+aXBhdGhfY2ZncG9ydHMgPSBkZC0+aXBhdGhfcG9ydGNudDsKKwllbHNlIGlmIChpcGF0aF9jZmdwb3J0cyA8PSBkZC0+aXBhdGhfcG9ydGNudCkgeworCQlkZC0+aXBhdGhfY2ZncG9ydHMgPSBpcGF0aF9jZmdwb3J0czsKKwkJaXBhdGhfZGJnKCJDb25maWd1cmVkIHRvIHVzZSAldSBwb3J0cyBvdXQgb2YgJXUgaW4gY2hpcFxuIiwKKwkJCSAgZGQtPmlwYXRoX2NmZ3BvcnRzLCBkZC0+aXBhdGhfcG9ydGNudCk7CisJfSBlbHNlIHsKKwkJZGQtPmlwYXRoX2NmZ3BvcnRzID0gZGQtPmlwYXRoX3BvcnRjbnQ7CisJCWlwYXRoX2RiZygiVHJpZWQgdG8gY29uZmlndXJlZCB0byB1c2UgJXUgcG9ydHM7IGNoaXAgIgorCQkJICAib25seSBzdXBwb3J0cyAldVxuIiwgaXBhdGhfY2ZncG9ydHMsCisJCQkgIGRkLT5pcGF0aF9wb3J0Y250KTsKKwl9CisJZGQtPmlwYXRoX3BkID0ga3phbGxvYyhzaXplb2YoKmRkLT5pcGF0aF9wZCkgKiBkZC0+aXBhdGhfY2ZncG9ydHMsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRkLT5pcGF0aF9wZCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHBvcnRkYXRhIGFycmF5LCAiCisJCQkgICAgICAiZmFpbGluZ1xuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwlkZC0+aXBhdGhfbGFzdGVncmhlYWRzID0ga3phbGxvYyhzaXplb2YoKmRkLT5pcGF0aF9sYXN0ZWdyaGVhZHMpCisJCQkJCSAqIGRkLT5pcGF0aF9jZmdwb3J0cywKKwkJCQkJIEdGUF9LRVJORUwpOworCWRkLT5pcGF0aF9sYXN0cmN2aGRycXRhaWxzID0KKwkJa3phbGxvYyhzaXplb2YoKmRkLT5pcGF0aF9sYXN0cmN2aGRycXRhaWxzKQorCQkJKiBkZC0+aXBhdGhfY2ZncG9ydHMsIEdGUF9LRVJORUwpOworCisJaWYgKCFkZC0+aXBhdGhfbGFzdGVncmhlYWRzIHx8ICFkZC0+aXBhdGhfbGFzdHJjdmhkcnF0YWlscykgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGhlYWQgYXJyYXlzLCAiCisJCQkgICAgICAiZmFpbGluZ1xuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwlkZC0+aXBhdGhfcGRbMF0gPSBremFsbG9jKHNpemVvZigqcGQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghZGQtPmlwYXRoX3BkWzBdKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJVbmFibGUgdG8gYWxsb2NhdGUgcG9ydGRhdGEgZm9yIHBvcnQgIgorCQkJICAgICAgIjAsIGZhaWxpbmdcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCXBkID0gZGQtPmlwYXRoX3BkWzBdOworCXBkLT5wb3J0X2RkID0gZGQ7CisJcGQtPnBvcnRfcG9ydCA9IDA7CisJcGQtPnBvcnRfY250ID0gMTsKKwkvKiBUaGUgcG9ydCAwIHBrZXkgdGFibGUgaXMgdXNlZCBieSB0aGUgbGF5ZXIgaW50ZXJmYWNlLiAqLworCXBkLT5wb3J0X3BrZXlzWzBdID0gSVBTX0RFRkFVTFRfUF9LRVk7CisJZGQtPmlwYXRoX3JjdnRpZGNudCA9CisJCWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdnRpZGNudCk7CisJZGQtPmlwYXRoX3JjdnRpZGJhc2UgPQorCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3Z0aWRiYXNlKTsKKwlkZC0+aXBhdGhfcmN2ZWdyY250ID0KKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2ZWdyY250KTsKKwlkZC0+aXBhdGhfcmN2ZWdyYmFzZSA9CisJCWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmVncmJhc2UpOworCWRkLT5pcGF0aF9wYWxpZ24gPQorCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9wYWdlYWxpZ24pOworCWRkLT5pcGF0aF9waW9idWZiYXNlID0KKwkJaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZHBpb2J1ZmJhc2UpOworCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRwaW9zaXplKTsKKwlkZC0+aXBhdGhfcGlvc2l6ZTJrID0gdmFsICYgfjBVOworCWRkLT5pcGF0aF9waW9zaXplNGsgPSB2YWwgPj4gMzI7CisJZGQtPmlwYXRoX2libXR1ID0gNDA5NjsJLyogZGVmYXVsdCB0byBsYXJnZXN0IGxlZ2FsIE1UVSAqLworCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRwaW9idWZjbnQpOworCWRkLT5pcGF0aF9waW9iY250MmsgPSB2YWwgJiB+MFU7CisJZGQtPmlwYXRoX3Bpb2JjbnQ0ayA9IHZhbCA+PiAzMjsKKwlkZC0+aXBhdGhfcGlvMmtiYXNlID0KKwkJKHUzMiBfX2lvbWVtICopICgoKGNoYXIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UpICsKKwkJCQkgKGRkLT5pcGF0aF9waW9idWZiYXNlICYgMHhmZmZmZmZmZikpOworCWlmIChkZC0+aXBhdGhfcGlvYmNudDRrKSB7CisJCWRkLT5pcGF0aF9waW80a2Jhc2UgPSAodTMyIF9faW9tZW0gKikKKwkJCSgoKGNoYXIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UpICsKKwkJCSAoZGQtPmlwYXRoX3Bpb2J1ZmJhc2UgPj4gMzIpKTsKKwkJLyoKKwkJICogNEsgYnVmZmVycyB0YWtlIDIgcGFnZXM7IHdlIHVzZSByb3VuZHVwIGp1c3QgdG8gYmUKKwkJICogcGFyYW5vaWQ7IHdlIGNhbGN1bGF0ZSBpdCBvbmNlIGhlcmUsIHJhdGhlciB0aGFuIG9uCisJCSAqIGV2ZXIgYnVmIGFsbG9jYXRlCisJCSAqLworCQlkZC0+aXBhdGhfNGthbGlnbiA9IEFMSUdOKGRkLT5pcGF0aF9waW9zaXplNGssCisJCQkJCSAgZGQtPmlwYXRoX3BhbGlnbik7CisJCWlwYXRoX2RiZygiJXUgMmsoJXgpIHBpb2J1ZnMgQCAlcCwgJXUgNGsoJXgpIEAgJXAgIgorCQkJICAiKCV4IGFsaWduZWQpXG4iLAorCQkJICBkZC0+aXBhdGhfcGlvYmNudDJrLCBkZC0+aXBhdGhfcGlvc2l6ZTJrLAorCQkJICBkZC0+aXBhdGhfcGlvMmtiYXNlLCBkZC0+aXBhdGhfcGlvYmNudDRrLAorCQkJICBkZC0+aXBhdGhfcGlvc2l6ZTRrLCBkZC0+aXBhdGhfcGlvNGtiYXNlLAorCQkJICBkZC0+aXBhdGhfNGthbGlnbik7CisJfQorCWVsc2UgaXBhdGhfZGJnKCIldSAyayBwaW9idWZzIEAgJXBcbiIsCisJCSAgICAgICBkZC0+aXBhdGhfcGlvYmNudDJrLCBkZC0+aXBhdGhfcGlvMmtiYXNlKTsKKworCXNwaW5fbG9ja19pbml0KCZkZC0+aXBhdGhfdGlkX2xvY2spOworCitkb25lOgorCSpwZHAgPSBwZDsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGluaXRfY2hpcF9yZXNldCAtIHJlLWluaXRpYWxpemUgYWZ0ZXIgYSByZXNldCwgb3IgZW5hYmxlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBkcDogb3V0cHV0IGZvciBwb3J0IGRhdGEKKyAqCisgKiBzYW5pdHkgY2hlY2sgYXQgbGVhc3Qgc29tZSBvZiB0aGUgdmFsdWVzIGFmdGVyIHJlc2V0LCBhbmQKKyAqIGVuc3VyZSBubyByZWNlaXZlIG9yIHRyYW5zbWl0IChleHBsaWN0bHksIGluIGNhc2UgcmVzZXQKKyAqIGZhaWxlZAorICovCitzdGF0aWMgaW50IGluaXRfY2hpcF9yZXNldChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkgICBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKipwZHApCit7CisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKKwl1MzIgcnRtcDsKKworCSpwZHAgPSBwZCA9IGRkLT5pcGF0aF9wZFswXTsKKwkvKiBlbnN1cmUgY2hpcCBkb2VzIG5vIHNlbmRzIG9yIHJlY2VpdmVzIHdoaWxlIHdlIHJlLWluaXRpYWxpemUgKi8KKwlkZC0+aXBhdGhfY29udHJvbCA9IGRkLT5pcGF0aF9zZW5kY3RybCA9IGRkLT5pcGF0aF9yY3ZjdHJsID0gMFU7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLCAwKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLCAwKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsIDApOworCisJcnRtcCA9IGlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3BvcnRjbnQpOworCWlmIChkZC0+aXBhdGhfcG9ydGNudCAhPSBydG1wKQorCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAicG9ydGNudCB3YXMgJXUgYmVmb3JlICIKKwkJCSAicmVzZXQsIG5vdyAldSwgdXNpbmcgb3JpZ2luYWxcbiIsCisJCQkgZGQtPmlwYXRoX3BvcnRjbnQsIHJ0bXApOworCXJ0bXAgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3Z0aWRjbnQpOworCWlmIChydG1wICE9IGRkLT5pcGF0aF9yY3Z0aWRjbnQpCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJ0aWRjbnQgd2FzICV1IGJlZm9yZSAiCisJCQkgInJlc2V0LCBub3cgJXUsIHVzaW5nIG9yaWdpbmFsXG4iLAorCQkJIGRkLT5pcGF0aF9yY3Z0aWRjbnQsIHJ0bXApOworCXJ0bXAgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3Z0aWRiYXNlKTsKKwlpZiAocnRtcCAhPSBkZC0+aXBhdGhfcmN2dGlkYmFzZSkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgInRpZGJhc2Ugd2FzICV1IGJlZm9yZSAiCisJCQkgInJlc2V0LCBub3cgJXUsIHVzaW5nIG9yaWdpbmFsXG4iLAorCQkJIGRkLT5pcGF0aF9yY3Z0aWRiYXNlLCBydG1wKTsKKwlydG1wID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2ZWdyY250KTsKKwlpZiAocnRtcCAhPSBkZC0+aXBhdGhfcmN2ZWdyY250KQorCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiZWdyY250IHdhcyAldSBiZWZvcmUgIgorCQkJICJyZXNldCwgbm93ICV1LCB1c2luZyBvcmlnaW5hbFxuIiwKKwkJCSBkZC0+aXBhdGhfcmN2ZWdyY250LCBydG1wKTsKKwlydG1wID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2ZWdyYmFzZSk7CisJaWYgKHJ0bXAgIT0gZGQtPmlwYXRoX3JjdmVncmJhc2UpCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJlZ3JiYXNlIHdhcyAldSBiZWZvcmUgIgorCQkJICJyZXNldCwgbm93ICV1LCB1c2luZyBvcmlnaW5hbFxuIiwKKwkJCSBkZC0+aXBhdGhfcmN2ZWdyYmFzZSwgcnRtcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3Bpb2F2YWlscmVncyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldDsKKworCWRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hID0gZG1hX2FsbG9jX2NvaGVyZW50KAorCQkmZGQtPnBjaWRldi0+ZGV2LCBQQUdFX1NJWkUsICZkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMsCisJCUdGUF9LRVJORUwpOworCWlmICghZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBQSU9hdmFpbCByZWcgYXJlYSAiCisJCQkgICAgICAiaW4gbWVtb3J5XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogd2UgcmVhbGx5IHdhbnQgTDIgY2FjaGUgYWxpZ25lZCwgYnV0IGZvciBjdXJyZW50IENQVXMgb2YKKwkgKiBpbnRlcmVzdCwgdGhleSBhcmUgdGhlIHNhbWUuCisJICovCisJZGQtPmlwYXRoX3N0YXR1c3AgPSAodTY0ICopCisJCSgoY2hhciAqKWRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hICsKKwkJICgoMiAqIEwxX0NBQ0hFX0JZVEVTICsKKwkJICAgZGQtPmlwYXRoX3Bpb2F2cmVncyAqIHNpemVvZih1NjQpKSAmIH5MMV9DQUNIRV9CWVRFUykpOworCS8qIGNvcHkgdGhlIGN1cnJlbnQgdmFsdWUgbm93IHRoYXQgaXQncyByZWFsbHkgYWxsb2NhdGVkICovCisJKmRkLT5pcGF0aF9zdGF0dXNwID0gZGQtPl9pcGF0aF9zdGF0dXM7CisJLyoKKwkgKiBzZXR1cCBidWZmZXIgdG8gaG9sZCBmcmVlemUgbXNnLCBhY2Nlc3NpYmxlIHRvIGFwcHMsCisJICogZm9sbG93aW5nIHN0YXR1c3AKKwkgKi8KKwlkZC0+aXBhdGhfZnJlZXplbXNnID0gKGNoYXIgKikmZGQtPmlwYXRoX3N0YXR1c3BbMV07CisJLyogYW5kIGl0cyBsZW5ndGggKi8KKwlkZC0+aXBhdGhfZnJlZXplbGVuID0gTDFfQ0FDSEVfQllURVMgLSBzaXplb2YoZGQtPmlwYXRoX3N0YXR1c3BbMF0pOworCisJaWYgKGRkLT5pcGF0aF91bml0ICogNjQgPiAoSVBBVEhfUE9SVDBfUkNWSERSVEFJTF9TSVpFIC0gNjQpKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJ1bml0ICV1IHRvbyBsYXJnZSBmb3IgcG9ydCAwICIKKwkJCSAgICAgICJyY3ZoZHJ0YWlsIGJ1ZmZlciBzaXplXG4iLCBkZC0+aXBhdGhfdW5pdCk7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCWVsc2UKKwkJcmV0ID0gMDsKKworCS8qIHNvIHdlIGNhbiBnZXQgY3VycmVudCB0YWlsIGluIGlwYXRoX2tyZWNlaXZlKCksIHBlciBjaGlwICovCisJZGQtPmlwYXRoX2hkcnF0YWlscHRyID0gJmlwYXRoX3BvcnQwX3JjdmhkcnRhaWxbCisJCWRkLT5pcGF0aF91bml0ICogKDY0IC8gc2l6ZW9mKCppcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsKSldOworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGluaXRfc2hhZG93X3RpZHMgLSBhbGxvY2F0ZSB0aGUgc2hhZG93IFRJRCBhcnJheQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBhbGxvY2F0ZSB0aGUgc2hhZG93IFRJRCBhcnJheSwgc28gd2UgY2FuIGlwYXRoX211bmxvY2sgcHJldmlvdXMKKyAqIGVudHJpZXMuICBJdCBtYXkgbWFrZSBtb3JlIHNlbnNlIHRvIG1vdmUgdGhlIHBhZ2VzaGFkb3cgdG8gdGhlCisgKiBwb3J0IGRhdGEgc3RydWN0dXJlLCBzbyB3ZSBvbmx5IGFsbG9jYXRlIG1lbW9yeSBmb3IgcG9ydHMgYWN0dWFsbHkKKyAqIGluIHVzZSwgc2luY2Ugd2UgYXQgOGsgcGVyIHBvcnQsIG5vdy4KKyAqLworc3RhdGljIHZvaWQgaW5pdF9zaGFkb3dfdGlkcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJZGQtPmlwYXRoX3BhZ2VzaGFkb3cgPSAoc3RydWN0IHBhZ2UgKiopCisJCXZtYWxsb2MoZGQtPmlwYXRoX2NmZ3BvcnRzICogZGQtPmlwYXRoX3JjdnRpZGNudCAqCisJCQlzaXplb2Yoc3RydWN0IHBhZ2UgKikpOworCWlmICghZGQtPmlwYXRoX3BhZ2VzaGFkb3cpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gYWxsb2NhdGUgc2hhZG93IHBhZ2UgKiAiCisJCQkgICAgICAiYXJyYXksIG5vIGV4cGVjdGVkIHNlbmRzIVxuIik7CisJZWxzZQorCQltZW1zZXQoZGQtPmlwYXRoX3BhZ2VzaGFkb3csIDAsCisJCSAgICAgICBkZC0+aXBhdGhfY2ZncG9ydHMgKiBkZC0+aXBhdGhfcmN2dGlkY250ICoKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9jaGlwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIGludCByZWluaXQpCit7CisJdTMyIHZhbDsKKwlpbnQgaTsKKworCWlmICghcmVpbml0KSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlwYXRoX3NtYV9zdGF0ZV93YWl0KTsKKwl9CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKKworCS8qIEVuYWJsZSBQSU8gc2VuZCwgYW5kIHVwZGF0ZSBvZiBQSU9hdmFpbCByZWdzIHRvIG1lbW9yeS4gKi8KKwlkZC0+aXBhdGhfc2VuZGN0cmwgPSBJTkZJTklQQVRIX1NfUElPRU5BQkxFIHwKKwkJSU5GSU5JUEFUSF9TX1BJT0JVRkFWQUlMVVBEOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkgZGQtPmlwYXRoX3NlbmRjdHJsKTsKKworCS8qCisJICogZW5hYmxlIHBvcnQgMCByZWNlaXZlLCBhbmQgcmVjZWl2ZSBpbnRlcnJ1cHQuICBvdGhlciBwb3J0cworCSAqIGRvbmUgYXMgdXNlciBvcGVucyBhbmQgaW5pdHMgdGhlbS4KKwkgKi8KKwlkZC0+aXBhdGhfcmN2Y3RybCA9IElORklOSVBBVEhfUl9UQUlMVVBEIHwKKwkJKDFVTEwgPDwgSU5GSU5JUEFUSF9SX1BPUlRFTkFCTEVfU0hJRlQpIHwKKwkJKDFVTEwgPDwgSU5GSU5JUEFUSF9SX0lOVFJBVkFJTF9TSElGVCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKKworCS8qCisJICogbm93IHJlYWR5IGZvciB1c2UuICB0aGlzIHNob3VsZCBiZSBjbGVhcmVkIHdoZW5ldmVyIHdlCisJICogZGV0ZWN0IGEgcmVzZXQsIG9yIGluaXRpYXRlIG9uZS4KKwkgKi8KKwlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfSU5JVFRFRDsKKworCS8qCisJICogaW5pdCBvdXIgc2hhZG93IGNvcGllcyBvZiBoZWFkIGZyb20gdGFpbCB2YWx1ZXMsIGFuZCB3cml0ZQorCSAqIGhlYWQgdmFsdWVzIHRvIG1hdGNoLgorCSAqLworCXZhbCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZlZ3JpbmRleHRhaWwsIDApOworCSh2b2lkKWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwgdmFsLCAwKTsKKwlkZC0+aXBhdGhfcG9ydDBoZWFkID0gaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmhkcnRhaWwsIDApOworCisJLyogSW5pdGlhbGl6ZSBzbyB3ZSBpbnRlcnJ1cHQgb24gbmV4dCBwYWNrZXQgcmVjZWl2ZWQgKi8KKwkodm9pZClpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZoZHJoZWFkLAorCQkJICAgICAgIGRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZiB8CisJCQkgICAgICAgZGQtPmlwYXRoX3BvcnQwaGVhZCwgMCk7CisKKwkvKgorCSAqIGJ5IG5vdyBwaW9hdmFpbCB1cGRhdGVzIHRvIG1lbW9yeSBzaG91bGQgaGF2ZSBvY2N1cnJlZCwgc28KKwkgKiBjb3B5IHRoZW0gaW50byBvdXIgd29ya2luZy9zaGFkb3cgcmVnaXN0ZXJzOyB0aGlzIGlzIGluCisJICogY2FzZSBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGFib3J0LCBidXQgbW9zdGx5IHRvIGdldCB0aGUKKwkgKiBpbml0aWFsIHZhbHVlcyBvZiB0aGUgZ2VuZXJhdGlvbiBiaXQgY29ycmVjdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGQtPmlwYXRoX3Bpb2F2cmVnczsgaSsrKSB7CisJCV9fbGU2NCB2YWw7CisKKwkJLyoKKwkJICogQ2hpcCBFcnJhdGEgYnVnIDY2NDE7IGV2ZW4gYW5kIG9kZCBxd29yZHM+MyBhcmUgc3dhcHBlZC4KKwkJICovCisJCWlmIChpID4gMykgeworCQkJaWYgKGkgJiAxKQorCQkJCXZhbCA9IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hW2kgLSAxXTsKKwkJCWVsc2UKKwkJCQl2YWwgPSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYVtpICsgMV07CisJCX0KKwkJZWxzZQorCQkJdmFsID0gZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWFbaV07CisJCWRkLT5pcGF0aF9waW9hdmFpbHNoYWRvd1tpXSA9IGxlNjRfdG9fY3B1KHZhbCk7CisJfQorCS8qIGNhbiBnZXQgY291bnRlcnMsIHN0YXRzLCBldGMuICovCisJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX1BSRVNFTlQ7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9ob3VzZWtlZXBpbmcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJICAgICBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKipwZHAsIGludCByZWluaXQpCit7CisJY2hhciBib2FyZG5bMzJdOworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBoYXZlIHRvIGNsZWFyIHNoYWRvdyBjb3BpZXMgb2YgcmVnaXN0ZXJzIGF0IGluaXQgdGhhdCBhcmUKKwkgKiBub3Qgb3RoZXJ3aXNlIHNldCBoZXJlLCBvciBhbGwga2luZHMgb2YgYml6YXJyZSB0aGluZ3MKKwkgKiBoYXBwZW4gd2l0aCBkcml2ZXIgb24gY2hpcCByZXNldAorCSAqLworCWRkLT5pcGF0aF9yY3ZoZHJzaXplID0gMDsKKworCS8qCisJICogRG9uJ3QgY2xlYXIgaXBhdGhfZmxhZ3MgYXMgOGJpdCBtb2RlIHdhcyBzZXQgYmVmb3JlCisJICogZW50ZXJpbmcgdGhpcyBmdW5jLiBIb3dldmVyLCB3ZSBkbyBzZXQgdGhlIGxpbmtzdGF0ZSB0bworCSAqIHVua25vd24sIHNvIHdlIGNhbiB3YXRjaCBmb3IgYSB0cmFuc2l0aW9uLgorCSAqIFBSRVNFTlQgaXMgc2V0IGJlY2F1c2Ugd2Ugd2FudCByZWdpc3RlciByZWFkcyB0byB3b3JrLAorCSAqIGFuZCB0aGUga2VybmVsIGluZnJhc3RydWN0dXJlIHNhdyBpdCBpbiBjb25maWcgc3BhY2U7CisJICogV2UgY2xlYXIgaXQgaWYgd2UgaGF2ZSBmYWlsdXJlcy4KKwkgKi8KKwlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTElOS1VOSyB8IElQQVRIX1BSRVNFTlQ7CisJZGQtPmlwYXRoX2ZsYWdzICY9IH4oSVBBVEhfTElOS0FDVElWRSB8IElQQVRIX0xJTktBUk1FRCB8CisJCQkgICAgIElQQVRIX0xJTktET1dOIHwgSVBBVEhfTElOS0lOSVQpOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVHJ5IHRvIHJlYWQgc3BjIGNoaXAgcmV2aXNpb25cbiIpOworCWRkLT5pcGF0aF9yZXZpc2lvbiA9CisJCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JldmlzaW9uKTsKKworCS8qCisJICogc2V0IHVwIGZ1bmRhbWVudGFsIGluZm8gd2UgbmVlZCB0byB1c2UgdGhlIGNoaXA7IHdlIGFzc3VtZQorCSAqIGlmIHRoZSByZXZpc2lvbiByZWcgYW5kIHRoZXNlIHJlZ3MgYXJlIE9LLCB3ZSBkb24ndCBuZWVkIHRvCisJICogc3BlY2lhbCBjYXNlIHRoZSByZXN0CisJICovCisJZGQtPmlwYXRoX3NyZWdiYXNlID0KKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZHJlZ2Jhc2UpOworCWRkLT5pcGF0aF9jcmVnYmFzZSA9CisJCWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvdW50ZXJyZWdiYXNlKTsKKwlkZC0+aXBhdGhfdXJlZ2Jhc2UgPQorCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl91c2VycmVnYmFzZSk7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiaXBhdGhfa3JlZ2Jhc2UgJXAsIHNlbmRiYXNlICV4IHVzcmJhc2UgJXgsICIKKwkJICAgImNudHJiYXNlICV4XG4iLCBkZC0+aXBhdGhfa3JlZ2Jhc2UsIGRkLT5pcGF0aF9zcmVnYmFzZSwKKwkJICAgZGQtPmlwYXRoX3VyZWdiYXNlLCBkZC0+aXBhdGhfY3JlZ2Jhc2UpOworCWlmICgoZGQtPmlwYXRoX3JldmlzaW9uICYgMHhmZmZmZmZmZikgPT0gMHhmZmZmZmZmZgorCSAgICB8fCAoZGQtPmlwYXRoX3NyZWdiYXNlICYgMHhmZmZmZmZmZikgPT0gMHhmZmZmZmZmZgorCSAgICB8fCAoZGQtPmlwYXRoX2NyZWdiYXNlICYgMHhmZmZmZmZmZikgPT0gMHhmZmZmZmZmZgorCSAgICB8fCAoZGQtPmlwYXRoX3VyZWdiYXNlICYgMHhmZmZmZmZmZikgPT0gMHhmZmZmZmZmZikgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiUmVnaXN0ZXIgcmVhZCBmYWlsdXJlcyBmcm9tIGNoaXAsICIKKwkJCSAgICAgICJnaXZpbmcgdXAgaW5pdGlhbGl6YXRpb25cbiIpOworCQlkZC0+aXBhdGhfZmxhZ3MgJj0gfklQQVRIX1BSRVNFTlQ7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjbGVhciB0aGUgaW5pdGlhbCByZXNldCBmbGFnLCBpbiBjYXNlIGZpcnN0IGRyaXZlciBsb2FkICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcmNsZWFyLAorCQkJIElORklOSVBBVEhfRV9SRVNFVCk7CisKKwlpZiAocmVpbml0KQorCQlyZXQgPSBpbml0X2NoaXBfcmVzZXQoZGQsIHBkcCk7CisJZWxzZQorCQlyZXQgPSBpbml0X2NoaXBfZmlyc3QoZGQsIHBkcCk7CisKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZXZpc2lvbiAlbGx4IChQQ0kgJXgpLCAldSBwb3J0cywgJXUgdGlkcywgIgorCQkgICAiJXUgZWdydGlkc1xuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGQtPmlwYXRoX3JldmlzaW9uLAorCQkgICBkZC0+aXBhdGhfcGNpcmV2LCBkZC0+aXBhdGhfcG9ydGNudCwgZGQtPmlwYXRoX3JjdnRpZGNudCwKKwkJICAgZGQtPmlwYXRoX3JjdmVncmNudCk7CisKKwlpZiAoKChkZC0+aXBhdGhfcmV2aXNpb24gPj4gSU5GSU5JUEFUSF9SX1NPRlRXQVJFX1NISUZUKSAmCisJICAgICBJTkZJTklQQVRIX1JfU09GVFdBUkVfTUFTSykgIT0gSVBBVEhfQ0hJUF9TV1ZFUlNJT04pIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkRyaXZlciBvbmx5IGhhbmRsZXMgdmVyc2lvbiAlZCwgIgorCQkJICAgICAgImNoaXAgc3d2ZXJzaW9uIGlzICVkICglbGx4KSwgZmFpbG5nXG4iLAorCQkJICAgICAgSVBBVEhfQ0hJUF9TV1ZFUlNJT04sCisJCQkgICAgICAoaW50KShkZC0+aXBhdGhfcmV2aXNpb24gPj4KKwkJCQkgICAgSU5GSU5JUEFUSF9SX1NPRlRXQVJFX1NISUZUKSAmCisJCQkgICAgICBJTkZJTklQQVRIX1JfU09GVFdBUkVfTUFTSywKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGRkLT5pcGF0aF9yZXZpc2lvbik7CisJCXJldCA9IC1FTk9TWVM7CisJCWdvdG8gZG9uZTsKKwl9CisJZGQtPmlwYXRoX21hanJldiA9ICh1OCkgKChkZC0+aXBhdGhfcmV2aXNpb24gPj4KKwkJCQkgIElORklOSVBBVEhfUl9DSElQUkVWTUFKT1JfU0hJRlQpICYKKwkJCQkgSU5GSU5JUEFUSF9SX0NISVBSRVZNQUpPUl9NQVNLKTsKKwlkZC0+aXBhdGhfbWlucmV2ID0gKHU4KSAoKGRkLT5pcGF0aF9yZXZpc2lvbiA+PgorCQkJCSAgSU5GSU5JUEFUSF9SX0NISVBSRVZNSU5PUl9TSElGVCkgJgorCQkJCSBJTkZJTklQQVRIX1JfQ0hJUFJFVk1JTk9SX01BU0spOworCWRkLT5pcGF0aF9ib2FyZHJldiA9ICh1OCkgKChkZC0+aXBhdGhfcmV2aXNpb24gPj4KKwkJCQkgICAgSU5GSU5JUEFUSF9SX0JPQVJESURfU0hJRlQpICYKKwkJCQkgICBJTkZJTklQQVRIX1JfQk9BUkRJRF9NQVNLKTsKKworCXJldCA9IGRkLT5pcGF0aF9mX2dldF9ib2FyZG5hbWUoZGQsIGJvYXJkbiwgc2l6ZW9mIGJvYXJkbik7CisKKwlzbnByaW50ZihkZC0+aXBhdGhfYm9hcmR2ZXJzaW9uLCBzaXplb2YoZGQtPmlwYXRoX2JvYXJkdmVyc2lvbiksCisJCSAiRHJpdmVyICV1LiV1LCAlcywgSW5maW5pUGF0aCV1ICV1LiV1LCBQQ0kgJXUsICIKKwkJICJTVyBDb21wYXQgJXVcbiIsCisJCSBJUEFUSF9DSElQX1ZFUlNfTUFKLCBJUEFUSF9DSElQX1ZFUlNfTUlOLCBib2FyZG4sCisJCSAodW5zaWduZWQpKGRkLT5pcGF0aF9yZXZpc2lvbiA+PiBJTkZJTklQQVRIX1JfQVJDSF9TSElGVCkgJgorCQkgSU5GSU5JUEFUSF9SX0FSQ0hfTUFTSywKKwkJIGRkLT5pcGF0aF9tYWpyZXYsIGRkLT5pcGF0aF9taW5yZXYsIGRkLT5pcGF0aF9wY2lyZXYsCisJCSAodW5zaWduZWQpKGRkLT5pcGF0aF9yZXZpc2lvbiA+PgorCQkJICAgIElORklOSVBBVEhfUl9TT0ZUV0FSRV9TSElGVCkgJgorCQkgSU5GSU5JUEFUSF9SX1NPRlRXQVJFX01BU0spOworCisJaXBhdGhfZGJnKCIlcyIsIGRkLT5pcGF0aF9ib2FyZHZlcnNpb24pOworCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiBpcGF0aF9pbml0X2NoaXAgLSBkbyB0aGUgYWN0dWFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9uIHRoZSBjaGlwCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHJlaW5pdDogcmVpbml0aWFsaXppbmcsIHNvIGRvbid0IGFsbG9jYXRlIG5ldyBtZW1vcnkKKyAqCisgKiBEbyB0aGUgYWN0dWFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9uIHRoZSBjaGlwLiAgVGhpcyBpcyBkb25lCisgKiBib3RoIGZyb20gdGhlIGluaXQgcm91dGluZSBjYWxsZWQgZnJvbSB0aGUgUENJIGluZnJhc3RydWN0dXJlLCBhbmQKKyAqIHdoZW4gd2UgcmVzZXQgdGhlIGNoaXAsIG9yIGRldGVjdCB0aGF0IGl0IHdhcyByZXNldCBpbnRlcm5hbGx5LAorICogb3IgaXQncyBhZG1pbmlzdHJhdGl2ZWx5IHJlLWVuYWJsZWQuCisgKgorICogTWVtb3J5IGFsbG9jYXRpb24gaGVyZSBhbmQgaW4gY2FsbGVkIHJvdXRpbmVzIGlzIG9ubHkgZG9uZSBpbgorICogdGhlIGZpcnN0IGNhc2UgKHJlaW5pdCA9PSAwKS4gIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCwgYmVjYXVzZSBldmVuCisgKiB3aXRob3V0IG1lbW9yeSBhbGxvY2F0aW9uLCB3ZSBuZWVkIHRvIHJlLXdyaXRlIGFsbCB0aGUgY2hpcCByZWdpc3RlcnMKKyAqIFRJRHMsIGV0Yy4gYWZ0ZXIgdGhlIHJlc2V0IG9yIGVuYWJsZSBoYXMgY29tcGxldGVkLgorICovCitpbnQgaXBhdGhfaW5pdF9jaGlwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHJlaW5pdCkKK3sKKwlpbnQgcmV0ID0gMCwgaTsKKwl1MzIgdmFsMzIsIGtwaW9idWZzOworCXU2NCB2YWwsIGF0bXA7CisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IE5VTEw7IC8qIGtlZXAgZ2NjNCBoYXBweSAqLworCisJcmV0ID0gaW5pdF9ob3VzZWtlZXBpbmcoZGQsICZwZCwgcmVpbml0KTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwkvKgorCSAqIHdlIGlnbm9yZSBtb3N0IGlzc3VlcyBhZnRlciByZXBvcnRpbmcgdGhlbSwgYnV0IGhhdmUgdG8gc3BlY2lhbGx5CisJICogaGFuZGxlIGhhcmR3YXJlLWRpc2FibGVkIGNoaXBzLgorCSAqLworCWlmIChyZXQgPT0gMikgeworCQkvKiB1bmlxdWUgZXJyb3IsIGtub3duIHRvIGlwYXRoX2luaXRfb25lICovCisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogV2UgY291bGQgYnVtcCB0aGlzIHRvIGFsbG93IGZvciBmdWxsIHJjdmVncmNudCArIHJjdnRpZGNudCwKKwkgKiBidXQgdGhlbiBpdCBubyBsb25nZXIgbmljZWx5IGZpdHMgcG93ZXIgb2YgdHdvLCBhbmQgc2luY2UKKwkgKiB3ZSBub3cgdXNlIHJvdXRpbmVzIHRoYXQgYmFja2VuZCBvbnRvIF9fZ2V0X2ZyZWVfcGFnZXMsIHRoZQorCSAqIHJlc3Qgd291bGQgYmUgd2FzdGVkLgorCSAqLworCWRkLT5pcGF0aF9yY3ZoZHJjbnQgPSBkZC0+aXBhdGhfcmN2ZWdyY250OworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRyY250LAorCQkJIGRkLT5pcGF0aF9yY3ZoZHJjbnQpOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIHNoYWRvdyBjb3BpZXMgb2YgdGhlIHBpb2J1ZmF2YWlsIHJlZ2lzdGVycywKKwkgKiB3aGljaCB3ZSBjb21wYXJlIGFnYWluc3QgdGhlIGNoaXAgcmVnaXN0ZXJzIGZvciBub3csIGFuZAorCSAqIHRoZSBpbiBtZW1vcnkgRE1BJ2VkIGNvcGllcyBvZiB0aGUgcmVnaXN0ZXJzLiAgVGhpcyBoYXMgdG8KKwkgKiBiZSBkb25lIGVhcmx5LCBiZWZvcmUgd2UgY2FsY3VsYXRlIGxhc3Rwb3J0LCBldGMuCisJICovCisJdmFsID0gZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGs7CisJLyoKKwkgKiBjYWxjIG51bWJlciBvZiBwaW9hdmFpbCByZWdpc3RlcnMsIGFuZCBzYXZlIGl0OyB3ZSBoYXZlIDIKKwkgKiBiaXRzIHBlciBidWZmZXIuCisJICovCisJZGQtPmlwYXRoX3Bpb2F2cmVncyA9IEFMSUdOKHZhbCwgc2l6ZW9mKHU2NCkgKiBCSVRTX1BFUl9CWVRFIC8gMikKKwkJLyAoc2l6ZW9mKHU2NCkgKiBCSVRTX1BFUl9CWVRFIC8gMik7CisJaWYgKGlwYXRoX2twaW9idWZzID09IDApIHsKKwkJLyogbm90IHNldCBieSB1c2VyLCBvciBzZXQgZXhwbGljdGx5IHRvIGRlZmF1bHQgICovCisJCWlmICgoZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGspID4gMTI4KQorCQkJa3Bpb2J1ZnMgPSAzMjsKKwkJZWxzZQorCQkJa3Bpb2J1ZnMgPSAxNjsKKwl9CisJZWxzZQorCQlrcGlvYnVmcyA9IGlwYXRoX2twaW9idWZzOworCisJaWYgKGtwaW9idWZzID4KKwkgICAgKGRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrIC0KKwkgICAgIChkZC0+aXBhdGhfY2ZncG9ydHMgKiBJUEFUSF9NSU5fVVNFUl9QT1JUX0JVRkNOVCkpKSB7CisJCWkgPSBkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0ayAtCisJCQkoZGQtPmlwYXRoX2NmZ3BvcnRzICogSVBBVEhfTUlOX1VTRVJfUE9SVF9CVUZDTlQpOworCQlpZiAoaSA8IDApCisJCQlpID0gMDsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkFsbG9jYXRpbmcgJWQgUElPIGJ1ZnMgZm9yICIKKwkJCSAia2VybmVsIGxlYXZlcyB0b28gZmV3IGZvciAlZCB1c2VyIHBvcnRzICIKKwkJCSAiKCVkIGVhY2gpOyB1c2luZyAldVxuIiwga3Bpb2J1ZnMsCisJCQkgZGQtPmlwYXRoX2NmZ3BvcnRzIC0gMSwKKwkJCSBJUEFUSF9NSU5fVVNFUl9QT1JUX0JVRkNOVCwgaSk7CisJCS8qCisJCSAqIHNob3VsZG4ndCBjaGFuZ2UgaXBhdGhfa3Bpb2J1ZnMsIGJlY2F1c2UgY291bGQgYmUKKwkJICogZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZGV2aWNlcy4uLgorCQkgKi8KKwkJa3Bpb2J1ZnMgPSBpOworCX0KKwlkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmID0KKwkJZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGsgLSBrcGlvYnVmczsKKwlkZC0+aXBhdGhfcGJ1ZnNwb3J0ID0gZGQtPmlwYXRoX2NmZ3BvcnRzID4gMQorCQk/IGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWYgLyAoZGQtPmlwYXRoX2NmZ3BvcnRzIC0gMSkKKwkJOiAwOworCXZhbDMyID0gZGQtPmlwYXRoX2xhc3Rwb3J0X3Bpb2J1ZiAtCisJCShkZC0+aXBhdGhfcGJ1ZnNwb3J0ICogKGRkLT5pcGF0aF9jZmdwb3J0cyAtIDEpKTsKKwlpZiAodmFsMzIgPiAwKSB7CisJCWlwYXRoX2RiZygiYWxsb2NhdGluZyAldSBwYnVmcy9wb3J0IGxlYXZlcyAldSB1bnVzZWQsICIKKwkJCSAgImFkZCB0byBrZXJuZWxcbiIsIGRkLT5pcGF0aF9wYnVmc3BvcnQsIHZhbDMyKTsKKwkJZGQtPmlwYXRoX2xhc3Rwb3J0X3Bpb2J1ZiAtPSB2YWwzMjsKKwkJaXBhdGhfZGJnKCIldSBwYnVmcy9wb3J0IGxlYXZlcyAldSB1bnVzZWQsIGFkZCB0byBrZXJuZWxcbiIsCisJCQkgIGRkLT5pcGF0aF9wYnVmc3BvcnQsIHZhbDMyKTsKKwl9CisJZGQtPmlwYXRoX2xhc3RwaW9pbmRleCA9IGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWY7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJWQgUElPIGJ1ZnMgZm9yIGtlcm5lbCBvdXQgb2YgJWQgdG90YWwgJXUgIgorCQkgICAiZWFjaCBmb3IgJXUgdXNlciBwb3J0c1xuIiwga3Bpb2J1ZnMsCisJCSAgIGRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrLAorCQkgICBkZC0+aXBhdGhfcGJ1ZnNwb3J0LCBkZC0+aXBhdGhfY2ZncG9ydHMgLSAxKTsKKworCWRkLT5pcGF0aF9mX2Vhcmx5X2luaXQoZGQpOworCisJLyogZWFybHlfaW5pdCBzZXRzIHJjdmhkcmVudHNpemUgYW5kIHJjdmhkcnNpemUsIHNvIHRoaXMgbXVzdCBiZQorCSAqIGRvbmUgYWZ0ZXIgZWFybHlfaW5pdCAqLworCWRkLT5pcGF0aF9oZHJxbGFzdCA9CisJCWRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplICogKGRkLT5pcGF0aF9yY3ZoZHJjbnQgLSAxKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcmVudHNpemUsCisJCQkgZGQtPmlwYXRoX3JjdmhkcmVudHNpemUpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRyc2l6ZSwKKwkJCSBkZC0+aXBhdGhfcmN2aGRyc2l6ZSk7CisKKwlpZiAoIXJlaW5pdCkgeworCQlyZXQgPSBpbml0X3Bpb2F2YWlscmVncyhkZCk7CisJCWluaXRfc2hhZG93X3RpZHMoZGQpOworCQlpZiAocmV0KQorCQkJZ290byBkb25lOworCX0KKworCSh2b2lkKWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZHBpb2F2YWlsYWRkciwKKwkJCSAgICAgICBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMpOworCS8qCisJICogdGhpcyBpcyB0byBkZXRlY3Qgcy93IGVycm9ycywgd2hpY2ggdGhlIGgvdyB3b3JrcyBhcm91bmQgYnkKKwkgKiBpZ25vcmluZyB0aGUgbG93IDYgYml0cyBvZiBhZGRyZXNzLCBpZiBpdCB3YXNuJ3QgYWxpZ25lZC4KKwkgKi8KKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kcGlvYXZhaWxhZGRyKTsKKwlpZiAodmFsICE9IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfcGh5cykgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ2F0YXN0cm9waGljIHNvZnR3YXJlIGVycm9yLCAiCisJCQkgICAgICAiU2VuZFBJT0F2YWlsQWRkciB3cml0dGVuIGFzICVseCwgIgorCQkJICAgICAgInJlYWQgYmFjayBhcyAlbGx4XG4iLAorCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfcGh5cywKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwl2YWwgPSBpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsX2RtYSArIGRkLT5pcGF0aF91bml0ICogNjQ7CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IHdhcyBtZXQgKi8KKwlpcGF0aF93cml0ZV9rcmVnX3BvcnQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIsCisJCQkgICAgICAwLCB2YWwpOworCWF0bXAgPSBpcGF0aF9yZWFkX2tyZWc2NF9wb3J0KAorCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJ0YWlsYWRkciwgMCk7CisJaWYgKHZhbCAhPSBhdG1wKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJDYXRhc3Ryb3BoaWMgc29mdHdhcmUgZXJyb3IsICIKKwkJCSAgICAgICJSY3ZIZHJUYWlsQWRkcjAgd3JpdHRlbiBhcyAlbGx4LCAiCisJCQkgICAgICAicmVhZCBiYWNrIGFzICVsbHggZnJvbSAleFxuIiwKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCwKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGF0bXAsCisJCQkgICAgICBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnRhaWxhZGRyKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2YnRocXAsIElQQVRIX0tEX1FQKTsKKworCS8qCisJICogbWFrZSBzdXJlIHdlIGFyZSBub3QgaW4gZnJlZXplLCBhbmQgUElPIHNlbmQgZW5hYmxlZCwgc28KKwkgKiB3cml0ZXMgdG8gcGJjIGhhcHBlbgorCSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJtYXNrLCAwVUxMKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyY2xlYXIsCisJCQkgfjBVTEwmfklORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCwgMFVMTCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJCSBJTkZJTklQQVRIX1NfUElPRU5BQkxFKTsKKworCS8qCisJICogYmVmb3JlIGVycm9yIGNsZWFycywgc2luY2Ugd2UgZXhwZWN0IHNlcmRlcyBwbGwgZXJyb3JzIGR1cmluZworCSAqIHRoaXMsIHRoZSBmaXJzdCB0aW1lIGFmdGVyIHJlc2V0CisJICovCisJaWYgKGJyaW5ndXBfbGluayhkZCkpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkZhaWxlZCB0byBicmluZ3VwIElCIGxpbmtcbiIpOworCQlyZXQgPSAtRU5FVERPV047CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIGNsZWFyIGFueSAiZXhwZWN0ZWQiIGh3ZXJycyBmcm9tIHJlc2V0IGFuZC9vciBpbml0aWFsaXphdGlvbgorCSAqIGNsZWFyIGFueSB0aGF0IGFyZW4ndCBlbmFibGVkIChhdCBsZWFzdCB0aGlzIG9uY2UpLCBhbmQgdGhlbgorCSAqIHNldCB0aGUgZW5hYmxlIG1hc2sKKwkgKi8KKwlkZC0+aXBhdGhfZl9pbml0X2h3ZXJyb3JzKGRkKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyY2xlYXIsCisJCQkgfjBVTEwmfklORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJtYXNrLAorCQkJIGRkLT5pcGF0aF9od2Vycm1hc2spOworCisJZGQtPmlwYXRoX21hc2tlZGVycnMgPSBkZC0+aXBhdGhfaWdub3JlZGVycnM7CisJLyogY2xlYXIgYWxsICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcmNsZWFyLCAtMUxMKTsKKwkvKiBlbmFibGUgZXJyb3JzIHRoYXQgYXJlIG1hc2tlZCwgYXQgbGVhc3QgdGhpcyBmaXJzdCB0aW1lLiAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JtYXNrLAorCQkJIH5kZC0+aXBhdGhfbWFza2VkZXJycyk7CisJLyogY2xlYXIgYW55IGludGVycnVwcyB1cCB0byB0aGlzIHBvaW50IChpbnRzIHN0aWxsIG5vdCBlbmFibGVkKSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50Y2xlYXIsIC0xTEwpOworCisJaXBhdGhfc3RhdHMuc3BzX2xpZFtkZC0+aXBhdGhfdW5pdF0gPSBkZC0+aXBhdGhfbGlkOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIHBvcnQgMCAoa2VybmVsKSByY3ZoZHIgcSBhbmQgZWdyIFRJRHMuICBJZiBkb2luZworCSAqIHJlLWluaXQsIHRoZSBzaW1wbGVzdCB3YXkgdG8gaGFuZGxlIHRoaXMgaXMgdG8gZnJlZQorCSAqIGV4aXN0aW5nLCBhbmQgcmUtYWxsb2NhdGUuCisJICovCisJaWYgKHJlaW5pdCkKKwkJaXBhdGhfZnJlZV9wZGRhdGEoZGQsIDAsIDApOworCWRkLT5pcGF0aF9mX3RpZHRlbXBsYXRlKGRkKTsKKwlyZXQgPSBpcGF0aF9jcmVhdGVfcmN2aGRycShkZCwgcGQpOworCWlmICghcmV0KQorCQlyZXQgPSBjcmVhdGVfcG9ydDBfZWdyKGRkKTsKKwlpZiAocmV0KQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIGFsbG9jYXRlIHBvcnQgMCAoa2VybmVsKSAiCisJCQkgICAgICAicmN2aGRycSBhbmQvb3IgZWdyIGJ1ZnNcbiIpOworCWVsc2UKKwkJZW5hYmxlX2NoaXAoZGQsIHBkLCByZWluaXQpOworCisJLyoKKwkgKiBjYXVzZSByZXRyaWdnZXIgb2YgcGVuZGluZyBpbnRlcnJ1cHRzIGlnbm9yZWQgZHVyaW5nIGluaXQsCisJICogZXZlbiBpZiB3ZSBoYWQgZXJyb3JzCisJICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRjbGVhciwgMFVMTCk7CisKKwlpZighZGQtPmlwYXRoX3N0YXRzX3RpbWVyX2FjdGl2ZSkgeworCQkvKgorCQkgKiBmaXJzdCBpbml0LCBvciBhZnRlciBhbiBhZG1pbiBkaXNhYmxlL2VuYWJsZQorCQkgKiBzZXQgdXAgc3RhdHMgcmV0cmlldmFsIHRpbWVyLCBldmVuIGlmIHdlIGhhZCBlcnJvcnMKKwkJICogaW4gbGFzdCBwb3J0aW9uIG9mIHNldHVwCisJCSAqLworCQlpbml0X3RpbWVyKCZkZC0+aXBhdGhfc3RhdHNfdGltZXIpOworCQlkZC0+aXBhdGhfc3RhdHNfdGltZXIuZnVuY3Rpb24gPSBpcGF0aF9nZXRfZmFzdHN0YXRzOworCQlkZC0+aXBhdGhfc3RhdHNfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZDsKKwkJLyogZXZlcnkgNSBzZWNvbmRzOyAqLworCQlkZC0+aXBhdGhfc3RhdHNfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyA1ICogSFo7CisJCS8qIHRha2VzIH4xNiBzZWNvbmRzIHRvIG92ZXJmbG93IGF0IGZ1bGwgSUIgNHggYmFuZHdkaXRoICovCisJCWFkZF90aW1lcigmZGQtPmlwYXRoX3N0YXRzX3RpbWVyKTsKKwkJZGQtPmlwYXRoX3N0YXRzX3RpbWVyX2FjdGl2ZSA9IDE7CisJfQorCitkb25lOgorCWlmICghcmV0KSB7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfQ0hJUF9QUkVTRU5UOworCQlpZiAoIWRkLT5pcGF0aF9mX2ludHJzZXR1cChkZCkpIHsKKwkJCS8qIG5vdyB3ZSBjYW4gZW5hYmxlIGFsbCBpbnRlcnJ1cHRzIGZyb20gdGhlIGNoaXAgKi8KKwkJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50bWFzaywKKwkJCQkJIC0xTEwpOworCQkJLyogZm9yY2UgcmUtaW50ZXJydXB0IG9mIGFueSBwZW5kaW5nIGludGVycnVwdHMuICovCisJCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludGNsZWFyLAorCQkJCQkgMFVMTCk7CisJCQkvKiBjaGlwIGlzIHVzYWJsZTsgbWFyayBpdCBhcyBpbml0aWFsaXplZCAqLworCQkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9IElQQVRIX1NUQVRVU19JTklUVEVEOworCQl9IGVsc2UKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJObyBpbnRlcnJ1cHRzIGVuYWJsZWQsIGNvdWxkbid0ICIKKwkJCQkgICAgICAic2V0dXAgaW50ZXJydXB0IGFkZHJlc3NcbiIpOworCisJCWlmIChkZC0+aXBhdGhfY2ZncG9ydHMgPiBpcGF0aF9zdGF0cy5zcHNfbnBvcnRzKQorCQkJLyoKKwkJCSAqIHNwc19ucG9ydHMgaXMgYSBnbG9iYWwsIHNvLCB3ZSBzZXQgaXQgdG8KKwkJCSAqIHRoZSBoaWdoZXN0IG51bWJlciBvZiBwb3J0cyBvZiBhbnkgb2YgdGhlCisJCQkgKiBjaGlwcyB3ZSBmaW5kOyB3ZSBuZXZlciBkZWNyZW1lbnQgaXQsIGF0CisJCQkgKiBsZWFzdCBmb3Igbm93LiAgU2luY2UgdGhpcyBtaWdodCBoYXZlIGNoYW5nZWQKKwkJCSAqIG92ZXIgZGlzYWJsZS9lbmFibGUgb3IgcHJpb3IgdG8gcmVzZXQsIGFsd2F5cworCQkJICogZG8gdGhlIGNoZWNrIGFuZCBwb3RlbnRpYWxseSBhZGp1c3QuCisJCQkgKi8KKwkJCWlwYXRoX3N0YXRzLnNwc19ucG9ydHMgPSBkZC0+aXBhdGhfY2ZncG9ydHM7CisJfSBlbHNlCisJCWlwYXRoX2RiZygiRmFpbGVkICglZCkgdG8gaW5pdGlhbGl6ZSBjaGlwXG4iLCByZXQpOworCisJLyogaWYgcmV0IGlzIG5vbi16ZXJvLCB3ZSBwcm9iYWJseSBzaG91bGQgZG8gc29tZSBjbGVhbnVwCisJICAgaGVyZS4uLiAqLworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfc2V0X2twaW9idWZzKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgc2hvcnQgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBpcGF0aF9wYXJzZV91c2hvcnQoc3RyLCAmdmFsKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIGJhaWw7CisKKwlpZiAodmFsID09IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgeworCQlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKQorCQkJY29udGludWU7CisJCWlmICh2YWwgPiAoZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGsgLQorCQkJICAgKGRkLT5pcGF0aF9jZmdwb3J0cyAqCisJCQkgICAgSVBBVEhfTUlOX1VTRVJfUE9SVF9CVUZDTlQpKSkKKwkJeworCQkJaXBhdGhfZGV2X2VycigKKwkJCQlkZCwKKwkJCQkiQWxsb2NhdGluZyAlZCBQSU8gYnVmcyBmb3Iga2VybmVsIGxlYXZlcyAiCisJCQkJInRvbyBmZXcgZm9yICVkIHVzZXIgcG9ydHMgKCVkIGVhY2gpXG4iLAorCQkJCXZhbCwgZGQtPmlwYXRoX2NmZ3BvcnRzIC0gMSwKKwkJCQlJUEFUSF9NSU5fVVNFUl9QT1JUX0JVRkNOVCk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBiYWlsOworCQl9CisJCWRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWYgPQorCQkJZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGsgLSB2YWw7CisJfQorCisJcmV0ID0gMDsKK2JhaWw6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3MmExZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKQEAgLTAsMCArMSw4NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKyNpbmNsdWRlICJpcHNfY29tbW9uLmgiCisjaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKworI2RlZmluZSBFX1NVTV9QS1RFUlJTIFwKKwkoSU5GSU5JUEFUSF9FX1JIRFJMRU4gfCBJTkZJTklQQVRIX0VfUkJBRFRJRCB8IFwKKwkgSU5GSU5JUEFUSF9FX1JCQURWRVJTSU9OIHwgSU5GSU5JUEFUSF9FX1JIRFIgfCBcCisJIElORklOSVBBVEhfRV9STE9OR1BLVExFTiB8IElORklOSVBBVEhfRV9SU0hPUlRQS1RMRU4gfCBcCisJIElORklOSVBBVEhfRV9STUFYUEtUTEVOIHwgSU5GSU5JUEFUSF9FX1JNSU5QS1RMRU4gfCBcCisJIElORklOSVBBVEhfRV9SRk9STUFURVJSIHwgSU5GSU5JUEFUSF9FX1JVTlNVUFZMIHwgXAorCSBJTkZJTklQQVRIX0VfUlVORVhQQ0hBUiB8IElORklOSVBBVEhfRV9SRUJQKQorCisjZGVmaW5lIEVfU1VNX0VSUlMgXAorCShJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSCB8IElORklOSVBBVEhfRV9TVU5FWFBFUlJQS1ROVU0gfCBcCisJIElORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QgfCBJTkZJTklQQVRIX0VfU0RST1BQRURTTVBQS1QgfCBcCisJIElORklOSVBBVEhfRV9TTUFYUEtUTEVOIHwgSU5GSU5JUEFUSF9FX1NVTlNVUFZMIHwgXAorCSBJTkZJTklQQVRIX0VfU01JTlBLVExFTiB8IElORklOSVBBVEhfRV9TUEtUTEVOIHwgXAorCSBJTkZJTklQQVRIX0VfSU5WQUxJREFERFIpCisKK3N0YXRpYyB1NjQgaGFuZGxlX2Vfc3VtX2VycnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpcGF0aF9lcnJfdCBlcnJzKQoreworCXVuc2lnbmVkIGxvbmcgc2J1Zls0XTsKKwl1NjQgaWdub3JlX3RoaXNfdGltZSA9IDA7CisJdTMyIHBpb2JjbnQ7CisKKwkvKiBpZiBwb3NzaWJsZSB0aGF0IHNlbmRidWZmZXJlcnJvciBjb3VsZCBiZSB2YWxpZCAqLworCXBpb2JjbnQgPSBkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0azsKKwkvKiByZWFkIHRoZXNlIGJlZm9yZSB3cml0aW5nIGVycm9yY2xlYXIgKi8KKwlzYnVmWzBdID0gaXBhdGhfcmVhZF9rcmVnNjQoCisJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRidWZmZXJlcnJvcik7CisJc2J1ZlsxXSA9IGlwYXRoX3JlYWRfa3JlZzY0KAorCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kYnVmZmVyZXJyb3IgKyAxKTsKKwlpZiAocGlvYmNudCA+IDEyOCkgeworCQlzYnVmWzJdID0gaXBhdGhfcmVhZF9rcmVnNjQoCisJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kYnVmZmVyZXJyb3IgKyAyKTsKKwkJc2J1ZlszXSA9IGlwYXRoX3JlYWRfa3JlZzY0KAorCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGJ1ZmZlcmVycm9yICsgMyk7CisJfQorCisJaWYgKHNidWZbMF0gfHwgc2J1ZlsxXSB8fCAocGlvYmNudCA+IDEyOCAmJiAoc2J1ZlsyXSB8fCBzYnVmWzNdKSkpIHsKKwkJaW50IGk7CisKKwkJaXBhdGhfY2RiZyhQS1QsICJTZW5kYnVmRXJycyAlbHggJWx4ICIsIHNidWZbMF0sIHNidWZbMV0pOworCQlpZiAoaXBhdGhfZGVidWcgJiBfX0lQQVRIX1BLVERCRyAmJiBwaW9iY250ID4gMTI4KQorCQkJcHJpbnRrKCIlbHggJWx4ICIsIHNidWZbMl0sIHNidWZbM10pOworCQlmb3IgKGkgPSAwOyBpIDwgcGlvYmNudDsgaSsrKSB7CisJCQlpZiAodGVzdF9iaXQoaSwgc2J1ZikpIHsKKwkJCQl1MzIgX19pb21lbSAqcGlvYnVmOworCQkJCWlmIChpIDwgZGQtPmlwYXRoX3Bpb2JjbnQyaykKKwkJCQkJcGlvYnVmID0gKHUzMiBfX2lvbWVtICopCisJCQkJCQkoZGQtPmlwYXRoX3BpbzJrYmFzZSArCisJCQkJCQkgaSAqIGRkLT5pcGF0aF9wYWxpZ24pOworCQkJCWVsc2UKKwkJCQkJcGlvYnVmID0gKHUzMiBfX2lvbWVtICopCisJCQkJCQkoZGQtPmlwYXRoX3BpbzRrYmFzZSArCisJCQkJCQkgKGkgLSBkZC0+aXBhdGhfcGlvYmNudDJrKSAqCisJCQkJCQkgZGQtPmlwYXRoXzRrYWxpZ24pOworCisJCQkJaXBhdGhfY2RiZyhQS1QsCisJCQkJCSAgICJQSU9idWZbJXVdIEAlcCBwYmMgaXMgJXg7ICIsCisJCQkJCSAgIGksIHBpb2J1ZiwgcmVhZGwocGlvYnVmKSk7CisKKwkJCQlpcGF0aF9kaXNhcm1fcGlvYnVmcyhkZCwgaSwgMSk7CisJCQl9CisJCX0KKwkJaWYgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9QS1REQkcpCisJCQlwcmludGsoIlxuIik7CisJfQorCWlmICgoZXJycyAmIChJTkZJTklQQVRIX0VfU0RST1BQRUREQVRBUEtUIHwKKwkJICAgICBJTkZJTklQQVRIX0VfU0RST1BQRURTTVBQS1QgfAorCQkgICAgIElORklOSVBBVEhfRV9TTUlOUEtUTEVOKSkgJiYKKwkgICAgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSkgeworCQkvKgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBTTUEgaXMgdHJ5aW5nIHRvIGJyaW5nIHRoZSBsaW5rCisJCSAqIHVwLCBidXQgdGhlIElCIGxpbmsgY2hhbmdlcyBzdGF0ZSBhdCB0aGUgIndyb25nIiB0aW1lLgorCQkgKiBUaGUgSUIgbG9naWMgdGhlbiBjb21wbGFpbnMgdGhhdCB0aGUgcGFja2V0IGlzbid0CisJCSAqIHZhbGlkLiAgV2UgZG9uJ3Qgd2FudCB0byBjb25mdXNlIHBlb3BsZSwgc28gd2UganVzdAorCQkgKiBkb24ndCBwcmludCB0aGVtLCBleGNlcHQgYXQgZGVidWcKKwkJICovCisJCWlwYXRoX2RiZygiSWdub3JpbmcgcGt0c2VuZCBlcnJvcnMgJWxseCwgYmVjYXVzZSBub3QgIgorCQkJICAieWV0IGFjdGl2ZVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZXJycyk7CisJCWlnbm9yZV90aGlzX3RpbWUgPSBJTkZJTklQQVRIX0VfU0RST1BQRUREQVRBUEtUIHwKKwkJCUlORklOSVBBVEhfRV9TRFJPUFBFRFNNUFBLVCB8CisJCQlJTkZJTklQQVRIX0VfU01JTlBLVExFTjsKKwl9CisKKwlyZXR1cm4gaWdub3JlX3RoaXNfdGltZTsKK30KKworLyogcmV0dXJuIHRoZSBzdHJpbmdzIGZvciB0aGUgbW9zdCBjb21tb24gbGluayBzdGF0ZXMgKi8KK3N0YXRpYyBjaGFyICppYl9saW5rc3RhdGUodTMyIGxpbmtzdGF0ZSkKK3sKKwljaGFyICpyZXQ7CisKKwlzd2l0Y2ggKGxpbmtzdGF0ZSkgeworCWNhc2UgSVBBVEhfSUJTVEFURV9JTklUOgorCQlyZXQgPSAiSW5pdCI7CisJCWJyZWFrOworCWNhc2UgSVBBVEhfSUJTVEFURV9BUk06CisJCXJldCA9ICJBcm0iOworCQlicmVhazsKKwljYXNlIElQQVRIX0lCU1RBVEVfQUNUSVZFOgorCQlyZXQgPSAiQWN0aXZlIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gIkRvd24iOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9lX2lic3RhdHVzY2hhbmdlZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICAgICBpcGF0aF9lcnJfdCBlcnJzLCBpbnQgbm9wcmludCkKK3sKKwl1NjQgdmFsOworCXUzMiBsdHN0YXRlLCBsc3RhdGU7CisKKwkvKgorCSAqIGV2ZW4gaWYgZGlhZ3MgYXJlIGVuYWJsZWQsIHdlIHdhbnQgdG8gbm90aWNlIExJTktJTklULCBldGMuCisJICogV2UganVzdCBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgTEVEIHN0YXRlLCBvcgorCSAqIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjY3RybAorCSAqLworCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY3N0YXR1cyk7CisJbHN0YXRlID0gdmFsICYgSVBBVEhfSUJTVEFURV9NQVNLOworCWlmIChsc3RhdGUgPT0gSVBBVEhfSUJTVEFURV9JTklUIHx8IGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0FSTSB8fAorCSAgICBsc3RhdGUgPT0gSVBBVEhfSUJTVEFURV9BQ1RJVkUpIHsKKwkJLyoKKwkJICogb25seSBwcmludCBhdCBTTUEgaWYgdGhlcmUgaXMgYSBjaGFuZ2UsIGRlYnVnIGlmIG5vdAorCQkgKiAoc29tZXRpbWVzIHdlIHdhbnQgdG8ga25vdyB0aGF0LCB1c3VhbGx5IG5vdCkuCisJCSAqLworCQlpZiAobHN0YXRlID09ICgodW5zaWduZWQpIGRkLT5pcGF0aF9sYXN0aWJjc3RhdAorCQkJICAgICAgICYgSVBBVEhfSUJTVEFURV9NQVNLKSkgeworCQkJaXBhdGhfZGJnKCJTdGF0dXMgY2hhbmdlIGludHIgYnV0IG5vIGNoYW5nZSAoJXMpXG4iLAorCQkJCSAgaWJfbGlua3N0YXRlKGxzdGF0ZSkpOworCQl9CisJCWVsc2UKKwkJCWlwYXRoX2NkYmcoU01BLCAiVW5pdCAldSBsaW5rIHN0YXRlICVzLCBsYXN0ICIKKwkJCQkgICAid2FzICVzXG4iLCBkZC0+aXBhdGhfdW5pdCwKKwkJCQkgICBpYl9saW5rc3RhdGUobHN0YXRlKSwKKwkJCQkgICBpYl9saW5rc3RhdGUoKHVuc2lnbmVkKQorCQkJCQkJZGQtPmlwYXRoX2xhc3RpYmNzdGF0CisJCQkJCQkmIElQQVRIX0lCU1RBVEVfTUFTSykpOworCX0KKwllbHNlIHsKKwkJbHN0YXRlID0gZGQtPmlwYXRoX2xhc3RpYmNzdGF0ICYgSVBBVEhfSUJTVEFURV9NQVNLOworCQlpZiAobHN0YXRlID09IElQQVRIX0lCU1RBVEVfSU5JVCB8fAorCQkgICAgbHN0YXRlID09IElQQVRIX0lCU1RBVEVfQVJNIHx8CisJCSAgICBsc3RhdGUgPT0gSVBBVEhfSUJTVEFURV9BQ1RJVkUpCisJCQlpcGF0aF9jZGJnKFNNQSwgIlVuaXQgJXUgbGluayBzdGF0ZSBkb3duIgorCQkJCSAgICIgKHN0YXRlIDB4JXgpLCBmcm9tICVzXG4iLAorCQkJCSAgIGRkLT5pcGF0aF91bml0LAorCQkJCSAgICh1MzIpdmFsICYgSVBBVEhfSUJTVEFURV9NQVNLLAorCQkJCSAgIGliX2xpbmtzdGF0ZShsc3RhdGUpKTsKKwkJZWxzZQorCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5pdCAldSBsaW5rIHN0YXRlIGNoYW5nZWQgIgorCQkJCSAgICJ0byAweCV4IGZyb20gZG93biAoJXgpXG4iLAorCQkJCSAgIGRkLT5pcGF0aF91bml0LCAodTMyKSB2YWwsIGxzdGF0ZSk7CisJfQorCWx0c3RhdGUgPSAodmFsID4+IElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCkgJgorCQlJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTSzsKKwlsc3RhdGUgPSAodmFsID4+IElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpICYKKwkJSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9NQVNLOworCisJaWYgKGx0c3RhdGUgPT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1BPTExBQ1RJVkUgfHwKKwkgICAgbHRzdGF0ZSA9PSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUE9MTFFVSUVUKSB7CisJCXUzMiBsYXN0X2x0c3RhdGU7CisKKwkJLyoKKwkJICogSWdub3JlIGN5Y2xpbmcgYmFjayBhbmQgZm9ydGggZnJvbSBQb2xsaW5nLkFjdGl2ZQorCQkgKiB0byBQb2xsaW5nLlF1aWV0IHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBvdGhlciBlbmQgb2YKKwkJICogdGhlIGxpbmsgdG8gY29tZSB1cC4gV2Ugd2lsbCBjeWNsZSBiYWNrIGFuZCBmb3J0aAorCQkgKiBiZXR3ZWVuIHRoZW0gaWYgbm8gY2FibGUgaXMgcGx1Z2dlZCBpbiwKKwkJICogdGhlIG90aGVyIGRldmljZSBpcyBwb3dlcmVkIG9mZiBvciBkaXNhYmxlZCwgZXRjLgorCQkgKi8KKwkJbGFzdF9sdHN0YXRlID0gKGRkLT5pcGF0aF9sYXN0aWJjc3RhdCA+PgorCQkJCUlORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCkKKwkJCSYgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0s7CisJCWlmIChsYXN0X2x0c3RhdGUgPT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1BPTExBQ1RJVkUKKwkJICAgIHx8IGxhc3RfbHRzdGF0ZSA9PQorCQkgICAgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1BPTExRVUlFVCkgeworCQkJaWYgKGRkLT5pcGF0aF9pYnBvbGxjbnQgPiA0MCkgeworCQkJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9OT0NBQkxFOworCQkJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PQorCQkJCQlJUEFUSF9TVEFUVVNfSUJfTk9DQUJMRTsKKwkJCX0gZWxzZQorCQkJCWRkLT5pcGF0aF9pYnBvbGxjbnQrKzsKKwkJCWdvdG8gc2tpcF9pYmNoYW5nZTsKKwkJfQorCX0KKwlkZC0+aXBhdGhfaWJwb2xsY250ID0gMDsJLyogc29tZSBzdGF0ZSBvdGhlciB0aGFuIDIgb3IgMyAqLworCWlwYXRoX3N0YXRzLnNwc19pYmxpbmsrKzsKKwlpZiAobHRzdGF0ZSAhPSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQKSB7CisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9MSU5LRE9XTjsKKwkJZGQtPmlwYXRoX2ZsYWdzICY9IH4oSVBBVEhfTElOS1VOSyB8IElQQVRIX0xJTktJTklUCisJCQkJICAgICB8IElQQVRIX0xJTktBQ1RJVkUgfAorCQkJCSAgICAgSVBBVEhfTElOS0FSTUVEKTsKKwkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfSUJfUkVBRFk7CisJCWlmICghbm9wcmludCkgeworCQkJaWYgKCgoZGQtPmlwYXRoX2xhc3RpYmNzdGF0ID4+CisJCQkgICAgICBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSAmCisJCQkgICAgIElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfTUFTSykKKwkJCSAgICA9PSBJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9BQ1RJVkUpCisJCQkJLyogaWYgZnJvbSB1cCB0byBkb3duIGJlIG1vcmUgdm9jYWwgKi8KKwkJCQlpcGF0aF9jZGJnKFNNQSwKKwkJCQkJICAgIlVuaXQgJXUgbGluayBub3cgZG93biAoJXMpXG4iLAorCQkJCQkgICBkZC0+aXBhdGhfdW5pdCwKKwkJCQkJICAgaXBhdGhfaWJjc3RhdHVzX3N0cltsdHN0YXRlXSk7CisJCQllbHNlCisJCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5pdCAldSBsaW5rIGlzICIKKwkJCQkJICAgImRvd24gKCVzKVxuIiwgZGQtPmlwYXRoX3VuaXQsCisJCQkJCSAgIGlwYXRoX2liY3N0YXR1c19zdHJbbHRzdGF0ZV0pOworCQl9CisKKwkJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkKGRkLCBsc3RhdGUsIGx0c3RhdGUpOworCX0gZWxzZSBpZiAoKHZhbCAmIElQQVRIX0lCU1RBVEVfTUFTSykgPT0gSVBBVEhfSUJTVEFURV9BQ1RJVkUpIHsKKwkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0xJTktBQ1RJVkU7CisJCWRkLT5pcGF0aF9mbGFncyAmPQorCQkJfihJUEFUSF9MSU5LVU5LIHwgSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LRE9XTiB8CisJCQkgIElQQVRIX0xJTktBUk1FRCB8IElQQVRIX05PQ0FCTEUpOworCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19JQl9OT0NBQkxFOworCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0KKwkJCUlQQVRIX1NUQVRVU19JQl9SRUFEWSB8IElQQVRIX1NUQVRVU19JQl9DT05GOworCQlkZC0+aXBhdGhfZl9zZXRleHRsZWQoZGQsIGxzdGF0ZSwgbHRzdGF0ZSk7CisKKwkJX19pcGF0aF9sYXllcl9pbnRyKGRkLCBJUEFUSF9MQVlFUl9JTlRfSUZfVVApOworCX0gZWxzZSBpZiAoKHZhbCAmIElQQVRIX0lCU1RBVEVfTUFTSykgPT0gSVBBVEhfSUJTVEFURV9JTklUKSB7CisJCS8qCisJCSAqIHNldCBJTklUIGFuZCBET1dOLiAgRG93biBpcyBjaGVja2VkIGJ5IG1vc3Qgb2YgdGhlIG90aGVyCisJCSAqIGNvZGUsIGJ1dCBJTklUIGlzIHVzZWZ1bCB0byBrbm93IGluIGEgZmV3IHBsYWNlcy4KKwkJICovCisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9MSU5LSU5JVCB8IElQQVRIX0xJTktET1dOOworCQlkZC0+aXBhdGhfZmxhZ3MgJj0KKwkJCX4oSVBBVEhfTElOS1VOSyB8IElQQVRIX0xJTktBQ1RJVkUgfCBJUEFUSF9MSU5LQVJNRUQKKwkJCSAgfCBJUEFUSF9OT0NBQkxFKTsKKwkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH4oSVBBVEhfU1RBVFVTX0lCX05PQ0FCTEUKKwkJCQkJfCBJUEFUSF9TVEFUVVNfSUJfUkVBRFkpOworCQlkZC0+aXBhdGhfZl9zZXRleHRsZWQoZGQsIGxzdGF0ZSwgbHRzdGF0ZSk7CisJfSBlbHNlIGlmICgodmFsICYgSVBBVEhfSUJTVEFURV9NQVNLKSA9PSBJUEFUSF9JQlNUQVRFX0FSTSkgeworCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTElOS0FSTUVEOworCQlkZC0+aXBhdGhfZmxhZ3MgJj0KKwkJCX4oSVBBVEhfTElOS1VOSyB8IElQQVRIX0xJTktET1dOIHwgSVBBVEhfTElOS0lOSVQgfAorCQkJICBJUEFUSF9MSU5LQUNUSVZFIHwgSVBBVEhfTk9DQUJMRSk7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+KElQQVRIX1NUQVRVU19JQl9OT0NBQkxFCisJCQkJCXwgSVBBVEhfU1RBVFVTX0lCX1JFQURZKTsKKwkJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkKGRkLCBsc3RhdGUsIGx0c3RhdGUpOworCX0gZWxzZSB7CisJCWlmICghbm9wcmludCkKKwkJCWlwYXRoX2RiZygiSUJzdGF0dXNjaGFuZ2UgdW5pdCAldTogJXMgKCV4KVxuIiwKKwkJCQkgIGRkLT5pcGF0aF91bml0LAorCQkJCSAgaXBhdGhfaWJjc3RhdHVzX3N0cltsdHN0YXRlXSwgbHRzdGF0ZSk7CisJfQorc2tpcF9pYmNoYW5nZToKKwlkZC0+aXBhdGhfbGFzdGliY3N0YXQgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdXBwX21zZ3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJICAgICB1bnNpZ25lZCBzdXBwX21zZ3MsIGNoYXIgbXNnWzUxMl0pCit7CisJLyoKKwkgKiBQcmludCB0aGUgbWVzc2FnZSB1bmxlc3MgaXQncyBpYmMgc3RhdHVzIGNoYW5nZSBvbmx5LCB3aGljaAorCSAqIGhhcHBlbnMgc28gb2Z0ZW4gd2UgbmV2ZXIgd2FudCB0byBjb3VudCBpdC4KKwkgKi8KKwlpZiAoZGQtPmlwYXRoX2xhc3RlcnJvciAmIH5JTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEKSB7CisJCWlwYXRoX2RlY29kZV9lcnIobXNnLCBzaXplb2YgbXNnLCBkZC0+aXBhdGhfbGFzdGVycm9yICYKKwkJCQkgfklORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQpOworCQlpZiAoZGQtPmlwYXRoX2xhc3RlcnJvciAmCisJCSAgICB+KElORklOSVBBVEhfRV9SUkNWRUdSRlVMTCB8IElORklOSVBBVEhfRV9SUkNWSERSRlVMTCkpCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiU3VwcHJlc3NlZCAldSBtZXNzYWdlcyBmb3IgIgorCQkJCSAgICAgICJmYXN0LXJlcGVhdGluZyBlcnJvcnMgKCVzKSAoJWxseClcbiIsCisJCQkJICAgICAgc3VwcF9tc2dzLCBtc2csCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkgICAgICBkZC0+aXBhdGhfbGFzdGVycm9yKTsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogcmN2ZWdyZnVsbCBhbmQgcmN2aGRycWZ1bGwgYXJlICJub3JtYWwiLCBmb3Igc29tZQorCQkJICogdHlwZXMgb2YgcHJvY2Vzc2VzIChtb3N0bHkgYmVuY2htYXJrcykgdGhhdCBzZW5kCisJCQkgKiBodWdlIG51bWJlcnMgb2YgbWVzc2FnZXMsIHdoaWxlIG5vdCBwcm9jZXNzaW5nCisJCQkgKiB0aGVtLiBTbyBvbmx5IGNvbXBsYWluIGFib3V0IHRoZXNlIGF0IGRlYnVnCisJCQkgKiBsZXZlbC4KKwkJCSAqLworCQkJaXBhdGhfZGJnKCJTdXBwcmVzc2VkICV1IG1lc3NhZ2VzIGZvciAlc1xuIiwKKwkJCQkgIHN1cHBfbXNncywgbXNnKTsKKwkJfQorCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGhhbmRsZV9mcmVxdWVudF9lcnJvcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICAgICBpcGF0aF9lcnJfdCBlcnJzLCBjaGFyIG1zZ1s1MTJdLAorCQkJCSAgICAgICBpbnQgKm5vcHJpbnQpCit7CisJdW5zaWduZWQgbG9uZyBuYzsKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBuZXh0bXNnX3RpbWU7CisJc3RhdGljIHVuc2lnbmVkIG5tc2dzLCBzdXBwX21zZ3M7CisKKwkvKgorCSAqIFRocm90dGxlIGJhY2sgImZhc3QiIG1lc3NhZ2VzIHRvIG5vIG1vcmUgdGhhbiAxMCBwZXIgNSBzZWNvbmRzLgorCSAqIFRoaXMgaXNuJ3QgcGVyZmVjdCwgYnV0IGl0J3MgYSByZWFzb25hYmxlIGhldXJpc3RpYy4gSWYgd2UgZ2V0CisJICogbW9yZSB0aGFuIDEwLCBnaXZlIGEgNnggbG9uZ2VyIGRlbGF5LgorCSAqLworCW5jID0gamlmZmllczsKKwlpZiAobm1zZ3MgPiAxMCkgeworCQlpZiAodGltZV9iZWZvcmUobmMsIG5leHRtc2dfdGltZSkpIHsKKwkJCSpub3ByaW50ID0gMTsKKwkJCWlmICghc3VwcF9tc2dzKyspCisJCQkJbmV4dG1zZ190aW1lID0gbmMgKyBIWiAqIDM7CisJCX0KKwkJZWxzZSBpZiAoc3VwcF9tc2dzKSB7CisJCQloYW5kbGVfc3VwcF9tc2dzKGRkLCBzdXBwX21zZ3MsIG1zZyk7CisJCQlzdXBwX21zZ3MgPSAwOworCQkJbm1zZ3MgPSAwOworCQl9CisJfQorCWVsc2UgaWYgKCFubXNncysrIHx8IHRpbWVfYWZ0ZXIobmMsIG5leHRtc2dfdGltZSkpCisJCW5leHRtc2dfdGltZSA9IG5jICsgSFogLyAyOworCisJcmV0dXJuIHN1cHBfbXNnczsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2Vycm9ycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2Vycl90IGVycnMpCit7CisJY2hhciBtc2dbNTEyXTsKKwl1NjQgaWdub3JlX3RoaXNfdGltZSA9IDA7CisJaW50IGk7CisJaW50IGNoa2VycnBrdHMgPSAwLCBub3ByaW50ID0gMDsKKwl1bnNpZ25lZCBzdXBwX21zZ3M7CisKKwlzdXBwX21zZ3MgPSBoYW5kbGVfZnJlcXVlbnRfZXJyb3JzKGRkLCBlcnJzLCBtc2csICZub3ByaW50KTsKKworCS8qCisJICogZG9uJ3QgcmVwb3J0IGVycm9ycyB0aGF0IGFyZSBtYXNrZWQgKGluY2x1ZGVzIHRob3NlIGFsd2F5cworCSAqIGlnbm9yZWQpCisJICovCisJZXJycyAmPSB+ZGQtPmlwYXRoX21hc2tlZGVycnM7CisKKwkvKiBkbyB0aGVzZSBmaXJzdCwgdGhleSBhcmUgbW9zdCBpbXBvcnRhbnQgKi8KKwlpZiAoZXJycyAmIElORklOSVBBVEhfRV9IQVJEV0FSRSkgeworCQkvKiByZXVzZSBzYW1lIG1zZyBidWYgKi8KKwkJZGQtPmlwYXRoX2ZfaGFuZGxlX2h3ZXJyb3JzKGRkLCBtc2csIHNpemVvZiBtc2cpOworCX0KKworCWlmICghbm9wcmludCAmJiAoZXJycyAmIH5pbmZpbmlwYXRoX2VfYml0c2V4dGFudCkpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJlcnJvciBpbnRlcnJ1cHQgd2l0aCB1bmtub3duIGVycm9ycyAiCisJCQkgICAgICAiJWxseCBzZXRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgICAoZXJycyAmIH5pbmZpbmlwYXRoX2VfYml0c2V4dGFudCkpOworCisJaWYgKGVycnMgJiBFX1NVTV9FUlJTKQorCQlpZ25vcmVfdGhpc190aW1lID0gaGFuZGxlX2Vfc3VtX2VycnMoZGQsIGVycnMpOworCisJaWYgKHN1cHBfbXNncyA9PSAyNTAwMDApIHsKKwkJLyoKKwkJICogSXQncyBub3QgZW50aXJlbHkgcmVhc29uYWJsZSBhc3N1bWluZyB0aGF0IHRoZSBlcnJvcnMgc2V0CisJCSAqIGluIHRoZSBsYXN0IGNsZWFyIHBlcmlvZCBhcmUgYWxsIHJlc3BvbnNpYmxlIGZvciB0aGUKKwkJICogcHJvYmxlbSwgYnV0IHRoZSBhbHRlcm5hdGl2ZSBpcyB0byBhc3N1bWUgaXQncyB0aGUgb25seQorCQkgKiBvbmVzIG9uIHRoaXMgcGFydGljdWxhciBpbnRlcnJ1cHQsIHdoaWNoIGFsc28gaXNuJ3QgZ3JlYXQKKwkJICovCisJCWRkLT5pcGF0aF9tYXNrZWRlcnJzIHw9IGRkLT5pcGF0aF9sYXN0ZXJyb3IgfCBlcnJzOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2Vycm9ybWFzaywKKwkJCQkgfmRkLT5pcGF0aF9tYXNrZWRlcnJzKTsKKwkJaXBhdGhfZGVjb2RlX2Vycihtc2csIHNpemVvZiBtc2csCisJCQkJIChkZC0+aXBhdGhfbWFza2VkZXJycyAmIH5kZC0+CisJCQkJICBpcGF0aF9pZ25vcmVkZXJycykpOworCisJCWlmICgoZGQtPmlwYXRoX21hc2tlZGVycnMgJiB+ZGQtPmlwYXRoX2lnbm9yZWRlcnJzKSAmCisJCSAgICB+KElORklOSVBBVEhfRV9SUkNWRUdSRlVMTCB8IElORklOSVBBVEhfRV9SUkNWSERSRlVMTCkpCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRGlzYWJsaW5nIGVycm9yKHMpICVsbHggYmVjYXVzZSAiCisJCQkJICAgICAgIm9jY3VyaW5nIHRvbyBmcmVxdWVudGx5ICglcylcbiIsCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkgICAgICAoZGQtPmlwYXRoX21hc2tlZGVycnMgJgorCQkJCSAgICAgICB+ZGQtPmlwYXRoX2lnbm9yZWRlcnJzKSwgbXNnKTsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogcmN2ZWdyZnVsbCBhbmQgcmN2aGRycWZ1bGwgYXJlICJub3JtYWwiLAorCQkJICogZm9yIHNvbWUgdHlwZXMgb2YgcHJvY2Vzc2VzIChtb3N0bHkgYmVuY2htYXJrcykKKwkJCSAqIHRoYXQgc2VuZCBodWdlIG51bWJlcnMgb2YgbWVzc2FnZXMsIHdoaWxlIG5vdAorCQkJICogcHJvY2Vzc2luZyB0aGVtLiAgU28gb25seSBjb21wbGFpbiBhYm91dAorCQkJICogdGhlc2UgYXQgZGVidWcgbGV2ZWwuCisJCQkgKi8KKwkJCWlwYXRoX2RiZygiRGlzYWJsaW5nIGZyZXF1ZW50IHF1ZXVlIGZ1bGwgZXJyb3JzICIKKwkJCQkgICIoJXMpXG4iLCBtc2cpOworCQl9CisKKwkJLyoKKwkJICogUmUtZW5hYmxlIHRoZSBtYXNrZWQgZXJyb3JzIGFmdGVyIGFyb3VuZCAzIG1pbnV0ZXMuICBpbgorCQkgKiBpcGF0aF9nZXRfZmFzdHN0YXRzKCkuICBJZiB3ZSBoYXZlIGEgc2VyaWVzIG9mIGZhc3QKKwkJICogcmVwZWF0aW5nIGJ1dCBkaWZmZXJlbnQgZXJyb3JzLCB0aGUgaW50ZXJ2YWwgd2lsbCBrZWVwCisJCSAqIHN0cmV0Y2hpbmcgb3V0LCBidXQgdGhhdCdzIE9LLCBhcyB0aGF0J3MgcHJldHR5CisJCSAqIGNhdGFzdHJvcGhpYy4KKwkJICovCisJCWRkLT5pcGF0aF91bm1hc2t0aW1lID0gamlmZmllcyArIEhaICogMTgwOworCX0KKworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JjbGVhciwgZXJycyk7CisJaWYgKGlnbm9yZV90aGlzX3RpbWUpCisJCWVycnMgJj0gfmlnbm9yZV90aGlzX3RpbWU7CisJaWYgKGVycnMgJiB+ZGQtPmlwYXRoX2xhc3RlcnJvcikgeworCQllcnJzICY9IH5kZC0+aXBhdGhfbGFzdGVycm9yOworCQkvKiBuZXZlciBzdXBwcmVzcyBkdXBsaWNhdGUgaHdlcnJvcnMgb3IgaWJzdGF0dXNjaGFuZ2UgKi8KKwkJZGQtPmlwYXRoX2xhc3RlcnJvciB8PSBlcnJzICYKKwkJCX4oSU5GSU5JUEFUSF9FX0hBUkRXQVJFIHwKKwkJCSAgSU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCk7CisJfQorCWlmICghZXJycykKKwkJcmV0dXJuOworCisJaWYgKCFub3ByaW50KQorCQkvKgorCQkgKiB0aGUgb25lcyB3ZSBtYXNrIG9mZiBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYmVsb3cgb3IgYWJvdmUKKwkJICovCisJCWlwYXRoX2RlY29kZV9lcnIobXNnLCBzaXplb2YgbXNnLAorCQkJCSBlcnJzICYgfihJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEIHwKKwkJCQkJICBJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfAorCQkJCQkgIElORklOSVBBVEhfRV9SUkNWSERSRlVMTCB8CisJCQkJCSAgSU5GSU5JUEFUSF9FX0hBUkRXQVJFKSk7CisJZWxzZQorCQkvKiBzbyB3ZSBkb24ndCBuZWVkIGlmICghbm9wcmludCkgYXQgc3RybGNhdCdzIGJlbG93ICovCisJCSptc2cgPSAwOworCisJaWYgKGVycnMgJiBFX1NVTV9QS1RFUlJTKSB7CisJCWlwYXRoX3N0YXRzLnNwc19wa3RlcnJzKys7CisJCWNoa2VycnBrdHMgPSAxOworCX0KKwlpZiAoZXJycyAmIEVfU1VNX0VSUlMpCisJCWlwYXRoX3N0YXRzLnNwc19lcnJzKys7CisKKwlpZiAoZXJycyAmIChJTkZJTklQQVRIX0VfUklDUkMgfCBJTkZJTklQQVRIX0VfUlZDUkMpKSB7CisJCWlwYXRoX3N0YXRzLnNwc19jcmNlcnJzKys7CisJCWNoa2VycnBrdHMgPSAxOworCX0KKworCS8qCisJICogV2UgZG9uJ3Qgd2FudCB0byBwcmludCB0aGVzZSB0d28gYXMgdGhleSBoYXBwZW4sIG9yIHdlIGNhbiBtYWtlCisJICogdGhlIHNpdHVhdGlvbiBldmVuIHdvcnNlLCBiZWNhdXNlIGl0IHRha2VzIHNvIGxvbmcgdG8gcHJpbnQKKwkgKiBtZXNzYWdlcyB0byBzZXJpYWwgY29uc29sZXMuICBLZXJuZWwgcG9ydHMgZ2V0IHByaW50ZWQgZnJvbQorCSAqIGZhc3Rfc3RhdHMsIG5vIG1vcmUgdGhhbiBldmVyeSA1IHNlY29uZHMsIHVzZXIgcG9ydHMgZ2V0IHByaW50ZWQKKwkgKiBvbiBjbG9zZQorCSAqLworCWlmIChlcnJzICYgSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMKSB7CisJCWludCBhbnk7CisJCXUzMiBoZCwgdGw7CisJCWlwYXRoX3N0YXRzLnNwc19oZHJxZnVsbCsrOworCQlmb3IgKGFueSA9IGkgPSAwOyBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKKwkJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbaV07CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaGQgPSBkZC0+aXBhdGhfcG9ydDBoZWFkOworCQkJCXRsID0gKHUzMikgbGU2NF90b19jcHUoCisJCQkJCSpkZC0+aXBhdGhfaGRycXRhaWxwdHIpOworCQkJfSBlbHNlIGlmIChwZCAmJiBwZC0+cG9ydF9jbnQgJiYKKwkJCQkgICBwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkcikgeworCQkJCS8qCisJCQkJICogZG9uJ3QgcmVwb3J0IHNhbWUgcG9pbnQgbXVsdGlwbGUgdGltZXMsCisJCQkJICogZXhjZXB0IGtlcm5lbAorCQkJCSAqLworCQkJCXRsID0gKHUzMikgKiBwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkcjsKKwkJCQlpZiAodGwgPT0gZGQtPmlwYXRoX2xhc3RyY3ZoZHJxdGFpbHNbaV0pCisJCQkJCWNvbnRpbnVlOworCQkJCWhkID0gaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmhkcmhlYWQsCisJCQkJCQkgICAgICAgaSk7CisJCQl9IGVsc2UKKwkJCQljb250aW51ZTsKKwkJCWlmIChoZCA9PSAodGwgKyAxKSB8fAorCQkJICAgICghaGQgJiYgdGwgPT0gZGQtPmlwYXRoX2hkcnFsYXN0KSkgeworCQkJCWRkLT5pcGF0aF9sYXN0cmN2aGRycXRhaWxzW2ldID0gdGw7CisJCQkJcGQtPnBvcnRfaGRycWZ1bGwrKzsKKwkJCQlpZiAoaSA9PSAwKQorCQkJCQljaGtlcnJwa3RzID0gMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZXJycyAmIElORklOSVBBVEhfRV9SUkNWRUdSRlVMTCkgeworCQkvKgorCQkgKiBzaW5jZSB0aGlzIGlzIG9mIGxlc3MgaW1wb3J0YW5jZSBhbmQgbm90IGxpa2VseSB0bworCQkgKiBoYXBwZW4gd2l0aG91dCBhbHNvIGdldHRpbmcgaGRyZnVsbCwgb25seSBjb3VudAorCQkgKiBvY2N1cnJlbmNlczsgZG9uJ3QgY2hlY2sgZWFjaCBwb3J0IChvciBldmVuIHRoZSBrZXJuZWwKKwkJICogdnMgdXNlcikKKwkJICovCisJCWlwYXRoX3N0YXRzLnNwc19ldGlkZnVsbCsrOworCQlpZiAoZGQtPmlwYXRoX3BvcnQwaGVhZCAhPQorCQkgICAgKHUzMikgbGU2NF90b19jcHUoKmRkLT5pcGF0aF9oZHJxdGFpbHB0cikpCisJCQljaGtlcnJwa3RzID0gMTsKKwl9CisKKwkvKgorCSAqIGRvIHRoaXMgYmVmb3JlIElCU1RBVFVTQ0hBTkdFRCwgaW4gY2FzZSBib3RoIGJpdHMgc2V0IGluIGEgc2luZ2xlCisJICogaW50ZXJydXB0OyB3ZSB3YW50IHRoZSBTVEFUVVNDSEFOR0UgdG8gIndpbiIsIHNvIHdlIGRvIG91cgorCSAqIGludGVybmFsIGNvcHkgb2Ygc3RhdGUgbWFjaGluZSBjb3JyZWN0bHkKKwkgKi8KKwlpZiAoZXJycyAmIElORklOSVBBVEhfRV9SSUJMT1NUTElOSykgeworCQkvKgorCQkgKiBmb3JjZSB0aHJvdWdoIGJsb2NrIGJlbG93CisJCSAqLworCQllcnJzIHw9IElORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQ7CisJCWlwYXRoX3N0YXRzLnNwc19pYmxpbmsrKzsKKwkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0xJTktET1dOOworCQlkZC0+aXBhdGhfZmxhZ3MgJj0gfihJUEFUSF9MSU5LVU5LIHwgSVBBVEhfTElOS0lOSVQKKwkJCQkgICAgIHwgSVBBVEhfTElOS0FSTUVEIHwgSVBBVEhfTElOS0FDVElWRSk7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0lCX1JFQURZOworCQlpZiAoIW5vcHJpbnQpIHsKKwkJCXU2NCBzdCA9IGlwYXRoX3JlYWRfa3JlZzY0KAorCQkJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY3N0YXR1cyk7CisKKwkJCWlwYXRoX2RiZygiTG9zdCBsaW5rLCBsaW5rIG5vdyBkb3duICglcylcbiIsCisJCQkJICBpcGF0aF9pYmNzdGF0dXNfc3RyW3N0ICYgMHhmXSk7CisJCX0KKwl9CisJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEKQorCQloYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQoZGQsIGVycnMsIG5vcHJpbnQpOworCisJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfUkVTRVQpIHsKKwkJaWYgKCFub3ByaW50KQorCQkJaXBhdGhfZGV2X2VycihkZCwgIkdvdCByZXNldCwgcmVxdWlyZXMgcmUtaW5pdCAiCisJCQkJICAgICAgIih1bmxvYWQgYW5kIHJlbG9hZCBkcml2ZXIpXG4iKTsKKwkJZGQtPmlwYXRoX2ZsYWdzICY9IH5JUEFUSF9JTklUVEVEOwkvKiBuZWVkcyByZS1pbml0ICovCisJCS8qIG1hcmsgYXMgaGF2aW5nIGhhZCBlcnJvciAqLworCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX0hXRVJST1I7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0lCX0NPTkY7CisJfQorCisJaWYgKCFub3ByaW50ICYmICptc2cpCisJCWlwYXRoX2Rldl9lcnIoZGQsICIlcyBlcnJvclxuIiwgbXNnKTsKKwlpZiAoZGQtPmlwYXRoX3NtYV9zdGF0ZV93YW50ZWQgJiBkZC0+aXBhdGhfZmxhZ3MpIHsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAic21hIHdhbnRlZCBzdGF0ZSAleCwgaWZsYWdzIG5vdyAleCwgIgorCQkJICAgIndha2luZ1xuIiwgZGQtPmlwYXRoX3NtYV9zdGF0ZV93YW50ZWQsCisJCQkgICBkZC0+aXBhdGhfZmxhZ3MpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmlwYXRoX3NtYV9zdGF0ZV93YWl0KTsKKwl9CisKKwlpZiAoY2hrZXJycGt0cykKKwkJLyogcHJvY2VzcyBwb3NzaWJsZSBlcnJvciBwYWNrZXRzIGluIGhkcnEgKi8KKwkJaXBhdGhfa3JlY2VpdmUoZGQpOworfQorCisvKiB0aGlzIGlzIHNlcGFyYXRlIHRvIGFsbG93IGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIG9mIGlwYXRoX2ludHIoKSAqLworCitzdGF0aWMgdm9pZCBpcGF0aF9iYWRfaW50cihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiAqIHVuZXhwZWN0cCkKK3sKKwkvKgorCSAqIHNvbWV0aW1lcyBoYXBwZW4gZHVyaW5nIGRyaXZlciBpbml0IGFuZCB1bmxvYWQsIGRvbid0IHdhbnQKKwkgKiB0byBwcm9jZXNzIGFueSBpbnRlcnJ1cHRzIGF0IHRoYXQgcG9pbnQKKwkgKi8KKworCS8qIHRoaXMgaXMganVzdCBhIGJhbmRhaWQsIG5vdCBhIGZpeCwgaWYgc29tZXRoaW5nIGdvZXMgYmFkbHkKKwkgKiB3cm9uZyAqLworCWlmICgrKyp1bmV4cGVjdHAgPiAxMDApIHsKKwkJaWYgKCsrKnVuZXhwZWN0cCA+IDEwNSkgeworCQkJLyoKKwkJCSAqIG9rLCB3ZSBtdXN0IGJlIHRha2luZyBzb21lYm9keSBlbHNlJ3MgaW50ZXJydXB0cywKKwkJCSAqIGR1ZSB0byBhIG1lc3NlZCB1cCBtcHRhYmxlIGFuZC9vciBQSVJRIHRhYmxlLCBzbworCQkJICogdW5yZWdpc3RlciB0aGUgaW50ZXJydXB0LiAgV2UndmUgc2VlbiB0aGlzIGR1cmluZworCQkJICogbGludXhiaW9zIGRldmVsb3BtZW50IHdvcmssIGFuZCBpdCBtYXkgaGFwcGVuIGluCisJCQkgKiB0aGUgZnV0dXJlIGFnYWluLgorCQkJICovCisJCQlpZiAoZGQtPnBjaWRldiAmJiBkZC0+cGNpZGV2LT5pcnEpIHsKKwkJCQlpcGF0aF9kZXZfZXJyKGRkLCAiTm93ICV1IHVuZXhwZWN0ZWQgIgorCQkJCQkgICAgICAiaW50ZXJydXB0cywgdW5yZWdpc3RlcmluZyAiCisJCQkJCSAgICAgICJpbnRlcnJ1cHQgaGFuZGxlclxuIiwKKwkJCQkJICAgICAgKnVuZXhwZWN0cCk7CisJCQkJaXBhdGhfZGJnKCJmcmVlX2lycSBvZiBpcnEgJXhcbiIsCisJCQkJCSAgZGQtPnBjaWRldi0+aXJxKTsKKwkJCQlmcmVlX2lycShkZC0+cGNpZGV2LT5pcnEsIGRkKTsKKwkJCX0KKwkJfQorCQlpZiAoaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50bWFzaykpIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICIldSB1bmV4cGVjdGVkIGludGVycnVwdHMsICIKKwkJCQkgICAgICAiZGlzYWJsaW5nIGludGVycnVwdHMgY29tcGxldGVseVxuIiwKKwkJCQkgICAgICAqdW5leHBlY3RwKTsKKwkJCS8qCisJCQkgKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLCBzb21ldGhpbmcgaXMgdmVyeSB3cm9uZworCQkJICovCisJCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludG1hc2ssCisJCQkJCSAwVUxMKTsKKwkJfQorCX0gZWxzZSBpZiAoKnVuZXhwZWN0cCA+IDEpCisJCWlwYXRoX2RiZygiSW50ZXJydXB0IHdoZW4gbm90IHJlYWR5LCBzaG91bGQgbm90IGhhcHBlbiwgIgorCQkJICAiaWdub3JpbmdcbiIpOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9iYWRfcmVncmVhZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJc3RhdGljIGludCBhbGxiaXRzOworCisJLyogc2VwYXJhdGUgcm91dGluZSwgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gb2YgaXBhdGhfaW50cigpICovCisKKwkvKgorCSAqIFdlIHByaW50IHRoZSBtZXNzYWdlIGFuZCBkaXNhYmxlIGludGVycnVwdHMsIGluIGhvcGUgb2YKKwkgKiBoYXZpbmcgYSBiZXR0ZXIgY2hhbmNlIG9mIGRlYnVnZ2luZyB0aGUgcHJvYmxlbS4KKwkgKi8KKwlpcGF0aF9kZXZfZXJyKGRkLAorCQkgICAgICAiUmVhZCBvZiBpbnRlcnJ1cHQgc3RhdHVzIGZhaWxlZCAoYWxsIGJpdHMgc2V0KVxuIik7CisJaWYgKGFsbGJpdHMrKykgeworCQkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLCBzb21ldGhpbmcgaXMgdmVyeSB3cm9uZyAqLworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludG1hc2ssIDBVTEwpOworCQlpZiAoYWxsYml0cyA9PSAyKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiU3RpbGwgYmFkIGludGVycnVwdCBzdGF0dXMsICIKKwkJCQkgICAgICAidW5yZWdpc3RlcmluZyBpbnRlcnJ1cHRcbiIpOworCQkJZnJlZV9pcnEoZGQtPnBjaWRldi0+aXJxLCBkZCk7CisJCX0gZWxzZSBpZiAoYWxsYml0cyA+IDIpIHsKKwkJCWlmICgoYWxsYml0cyAlIDEwMDAwKSA9PSAwKQorCQkJCXByaW50aygiLiIpOworCQl9IGVsc2UKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJEaXNhYmxpbmcgaW50ZXJydXB0cywgIgorCQkJCSAgICAgICJtdWx0aXBsZSBlcnJvcnNcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3BvcnRfcGlvYXZhaWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXUzMiBpOworCS8qCisJICogc3RhcnQgZnJvbSBwb3J0IDEsIHNpbmNlIGZvciBub3cgcG9ydCAwICBpcyBuZXZlciB1c2luZworCSAqIHdhaXRfZXZlbnQgZm9yIFBJTworCSAqLworCWZvciAoaSA9IDE7IGRkLT5pcGF0aF9wb3J0cGlvd2FpdCAmJiBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKKwkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IGRkLT5pcGF0aF9wZFtpXTsKKworCQlpZiAocGQgJiYgcGQtPnBvcnRfY250ICYmCisJCSAgICBkZC0+aXBhdGhfcG9ydHBpb3dhaXQgJiAoMVUgPDwgaSkpIHsKKwkJCWNsZWFyX2JpdChpLCAmZGQtPmlwYXRoX3BvcnRwaW93YWl0KTsKKwkJCWlmICh0ZXN0X2JpdChJUEFUSF9QT1JUX1dBSVRJTkdfUElPLAorCQkJCSAgICAgJnBkLT5wb3J0X2ZsYWcpKSB7CisJCQkJY2xlYXJfYml0KElQQVRIX1BPUlRfV0FJVElOR19QSU8sCisJCQkJCSAgJnBkLT5wb3J0X2ZsYWcpOworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGQtPnBvcnRfd2FpdCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9sYXllcl9waW9hdmFpbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldDsKKworCXJldCA9IF9faXBhdGhfbGF5ZXJfaW50cihkZCwgSVBBVEhfTEFZRVJfSU5UX1NFTkRfQ09OVElOVUUpOworCWlmIChyZXQgPiAwKQorCQlnb3RvIHNldDsKKworCXJldCA9IF9faXBhdGhfdmVyYnNfcGlvYnVmYXZhaWwoZGQpOworCWlmIChyZXQgPiAwKQorCQlnb3RvIHNldDsKKworCXJldHVybjsKK3NldDoKKwlzZXRfYml0KElQQVRIX1NfUElPSU5UQlVGQVZBSUwsICZkZC0+aXBhdGhfc2VuZGN0cmwpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkgZGQtPmlwYXRoX3NlbmRjdHJsKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JjdihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBpc3RhdCkKK3sKKwl1NjQgcG9ydHI7CisJaW50IGk7CisJaW50IHJjdmRpbnQgPSAwOworCisJcG9ydHIgPSAoKGlzdGF0ID4+IElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCkgJgorCQkgaW5maW5pcGF0aF9pX3JjdmF2YWlsX21hc2spCisJCXwgKChpc3RhdCA+PiBJTkZJTklQQVRIX0lfUkNWVVJHX1NISUZUKSAmCisJCSAgIGluZmluaXBhdGhfaV9yY3Z1cmdfbWFzayk7CisJZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9jZmdwb3J0czsgaSsrKSB7CisJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbaV07CisJCWlmIChwb3J0ciAmICgxIDw8IGkpICYmIHBkICYmCisJCSAgICBwZC0+cG9ydF9jbnQpIHsKKwkJCWlmIChpID09IDApCisJCQkJaXBhdGhfa3JlY2VpdmUoZGQpOworCQkJZWxzZSBpZiAodGVzdF9iaXQoSVBBVEhfUE9SVF9XQUlUSU5HX1JDViwKKwkJCQkJICAmcGQtPnBvcnRfZmxhZykpIHsKKwkJCQlpbnQgcmNiaXQ7CisJCQkJY2xlYXJfYml0KElQQVRIX1BPUlRfV0FJVElOR19SQ1YsCisJCQkJCSAgJnBkLT5wb3J0X2ZsYWcpOworCQkJCXJjYml0ID0gaSArIElORklOSVBBVEhfUl9JTlRSQVZBSUxfU0hJRlQ7CisJCQkJY2xlYXJfYml0KDFVTCA8PCByY2JpdCwgJmRkLT5pcGF0aF9yY3ZjdHJsKTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkLT5wb3J0X3dhaXQpOworCQkJCXJjdmRpbnQgPSAxOworCQkJfQorCQl9CisJfQorCWlmIChyY3ZkaW50KSB7CisJCS8qIG9ubHkgd2FudCB0byB0YWtlIG9uZSBpbnRlcnJ1cHQsIHNvIHR1cm4gb2ZmIHRoZSByY3YKKwkJICogaW50ZXJydXB0IGZvciBhbGwgdGhlIHBvcnRzIHRoYXQgd2UgZGlkIHRoZSB3YWtldXAgb24KKwkJICogKGJ1dCBuZXZlciBmb3Iga2VybmVsIHBvcnQpCisJCSAqLworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCisJCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKKwl9Cit9CisKK2lycXJldHVybl90IGlwYXRoX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGF0YTsKKwl1MzIgaXN0YXQ7CisJaXBhdGhfZXJyX3QgZXN0YXQgPSAwOworCXN0YXRpYyB1bnNpZ25lZCB1bmV4cGVjdGVkID0gMDsKKwlpcnFyZXR1cm5fdCByZXQ7CisKKwlpZighKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpKSB7CisJCS8qIHRoaXMgaXMgbW9zdGx5IHNvIHdlIGRvbid0IHRyeSB0byB0b3VjaCB0aGUgY2hpcCB3aGlsZQorCQkgKiBpdCBpcyBiZWluZyByZXNldCAqLworCQkvKgorCQkgKiBUaGlzIHJldHVybiB2YWx1ZSBpcyBwZXJoYXBzIG9kZCwgYnV0IHdlIGRvIG5vdCB3YW50IHRoZQorCQkgKiBpbnRlcnJ1cHQgY29yZSBjb2RlIHRvIHJlbW92ZSBvdXIgaW50ZXJydXB0IGhhbmRsZXIKKwkJICogYmVjYXVzZSB3ZSBkb24ndCBhcHBlYXIgdG8gYmUgaGFuZGxpbmcgYW4gaW50ZXJydXB0CisJCSAqIGR1cmluZyBhIGNoaXAgcmVzZXQuCisJCSAqLworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaXN0YXQgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRzdGF0dXMpOworCWlmICh1bmxpa2VseSghaXN0YXQpKSB7CisJCWlwYXRoX3N0YXRzLnNwc19udWxsaW50cisrOworCQlyZXQgPSBJUlFfTk9ORTsgLyogbm90IG91ciBpbnRlcnJ1cHQsIG9yIGFscmVhZHkgaGFuZGxlZCAqLworCQlnb3RvIGJhaWw7CisJfQorCWlmICh1bmxpa2VseShpc3RhdCA9PSAtMSkpIHsKKwkJaXBhdGhfYmFkX3JlZ3JlYWQoZGQpOworCQkvKiBkb24ndCBrbm93IGlmIGl0IHdhcyBvdXIgaW50ZXJydXB0IG9yIG5vdCAqLworCQlyZXQgPSBJUlFfTk9ORTsKKwkJZ290byBiYWlsOworCX0KKworCWlwYXRoX3N0YXRzLnNwc19pbnRzKys7CisKKwkvKgorCSAqIHRoaXMgbmVlZHMgdG8gYmUgZmxhZ3MmaW5pdHRlZCwgbm90IHN0YXR1c3AsIHNvIHdlIGtlZXAKKwkgKiB0YWtpbmcgaW50ZXJydXB0cyBldmVuIGFmdGVyIGxpbmsgZ29lcyBkb3duLCBldGMuCisJICogQWxzbywgd2UgKm11c3QqIGNsZWFyIHRoZSBpbnRlcnJ1cHQgYXQgc29tZSBwb2ludCwgb3Igd2Ugd29uJ3QKKwkgKiB0YWtlIGl0IGFnYWluLCB3aGljaCBjYW4gYmUgcmVhbCBiYWQgZm9yIGVycm9ycywgZXRjLi4uCisJICovCisKKwlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JTklUVEVEKSkgeworCQlpcGF0aF9iYWRfaW50cihkZCwgJnVuZXhwZWN0ZWQpOworCQlyZXQgPSBJUlFfTk9ORTsKKwkJZ290byBiYWlsOworCX0KKwlpZiAodW5leHBlY3RlZCkKKwkJdW5leHBlY3RlZCA9IDA7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJpbnRyIHN0YXQ9MHgleFxuIiwgaXN0YXQpOworCisJaWYgKGlzdGF0ICYgfmluZmluaXBhdGhfaV9iaXRzZXh0YW50KQorCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJICAgICAgImludGVycnVwdCB3aXRoIHVua25vd24gaW50ZXJydXB0cyAleCBzZXRcbiIsCisJCQkgICAgICBpc3RhdCAmICh1MzIpIH4gaW5maW5pcGF0aF9pX2JpdHNleHRhbnQpOworCisJaWYgKGlzdGF0ICYgSU5GSU5JUEFUSF9JX0VSUk9SKSB7CisJCWlwYXRoX3N0YXRzLnNwc19lcnJpbnRzKys7CisJCWVzdGF0ID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsCisJCQkJCSAgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcnN0YXR1cyk7CisJCWlmICghZXN0YXQpCisJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiZXJyb3IgaW50ZXJydXB0ICgleCksICIKKwkJCQkgImJ1dCBubyBlcnJvciBiaXRzIHNldCFcbiIsIGlzdGF0KTsKKwkJZWxzZSBpZiAoZXN0YXQgPT0gLTFMTCkKKwkJCS8qCisJCQkgKiBzaG91bGQgd2UgdHJ5IGNsZWFyaW5nIGFsbCwgb3IgaG9wZSBuZXh0IHJlYWQKKwkJCSAqIHdvcmtzPworCQkJICovCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiUmVhZCBvZiBlcnJvciBzdGF0dXMgZmFpbGVkICIKKwkJCQkgICAgICAiKGFsbCBiaXRzIHNldCk7IGlnbm9yaW5nXG4iKTsKKwkJZWxzZQorCQkJaGFuZGxlX2Vycm9ycyhkZCwgZXN0YXQpOworCX0KKworCWlmIChpc3RhdCAmIElORklOSVBBVEhfSV9HUElPKSB7CisJCWlmICh1bmxpa2VseSghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikpKSB7CisJCQl1MzIgZ3Bpb3N0YXR1czsKKwkJCWdwaW9zdGF0dXMgPSBpcGF0aF9yZWFkX2tyZWczMigKKwkJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX3N0YXR1cyk7CisJCQlpcGF0aF9kYmcoIlVuZXhwZWN0ZWQgR1BJTyBpbnRlcnJ1cHQgYml0cyAleFxuIiwKKwkJCQkgIGdwaW9zdGF0dXMpOworCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX2NsZWFyLAorCQkJCQkgZ3Bpb3N0YXR1cyk7CisJCX0KKwkJZWxzZSB7CisJCQkvKiBDbGVhciBHUElPIHN0YXR1cyBiaXQgMiAqLworCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX2NsZWFyLAorCQkJCQkgKHU2NCkgKDEgPDwgMikpOworCisJCQkvKgorCQkJICogUGFja2V0cyBhcmUgYXZhaWxhYmxlIGluIHRoZSBwb3J0IDAgcmN2IHF1ZXVlLgorCQkJICogRXZlbnR1YWxseSB0aGlzIG5lZWRzIHRvIGJlIGdlbmVyYWxpemVkIHRvIGNoZWNrCisJCQkgKiBJUEFUSF9HUElPX0lOVFIsIGFuZCB0aGUgc3BlY2lmaWMgR1BJTyBiaXQsIGlmCisJCQkgKiBHUElPIGludGVycnVwdHMgYXJlIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuCisJCQkgKi8KKwkJCWlwYXRoX2tyZWNlaXZlKGRkKTsKKwkJfQorCX0KKworCS8qCisJICogY2xlYXIgdGhlIG9uZXMgd2Ugd2lsbCBkZWFsIHdpdGggb24gdGhpcyByb3VuZAorCSAqIFdlIGNsZWFyIGl0IGVhcmx5LCBtb3N0bHkgZm9yIHJlY2VpdmUgaW50ZXJydXB0cywgc28gd2UKKwkgKiBrbm93IHRoZSBjaGlwIHdpbGwgaGF2ZSBzZWVuIHRoaXMgYnkgdGhlIHRpbWUgd2UgcHJvY2VzcworCSAqIHRoZSBxdWV1ZSwgYW5kIHdpbGwgcmUtaW50ZXJydXB0IGlmIG5lY2Vzc2FyeS4gIFRoZSBwcm9jZXNzb3IKKwkgKiBpdHNlbGYgd29uJ3QgdGFrZSB0aGUgaW50ZXJydXB0IGFnYWluIHVudGlsIHdlIHJldHVybi4KKwkgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludGNsZWFyLCBpc3RhdCk7CisKKwlpZiAoaXN0YXQgJiBJTkZJTklQQVRIX0lfU1BJT0JVRkFWQUlMKSB7CisJCWNsZWFyX2JpdChJUEFUSF9TX1BJT0lOVEJVRkFWQUlMLCAmZGQtPmlwYXRoX3NlbmRjdHJsKTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJCQkgZGQtPmlwYXRoX3NlbmRjdHJsKTsKKworCQlpZiAoZGQtPmlwYXRoX3BvcnRwaW93YWl0KQorCQkJaGFuZGxlX3BvcnRfcGlvYXZhaWwoZGQpOworCisJCWhhbmRsZV9sYXllcl9waW9hdmFpbChkZCk7CisJfQorCisJLyoKKwkgKiB3ZSBjaGVjayBmb3IgYm90aCB0cmFuc2l0aW9uIGZyb20gZW1wdHkgdG8gbm9uLWVtcHR5LCBhbmQgdXJnZW50CisJICogcGFja2V0cyAodGhvc2Ugd2l0aCB0aGUgaW50ZXJydXB0IGJpdCBzZXQgaW4gdGhlIGhlYWRlcikKKwkgKi8KKworCWlmIChpc3RhdCAmICgoaW5maW5pcGF0aF9pX3JjdmF2YWlsX21hc2sgPDwKKwkJICAgICAgSU5GSU5JUEFUSF9JX1JDVkFWQUlMX1NISUZUKQorCQkgICAgIHwgKGluZmluaXBhdGhfaV9yY3Z1cmdfbWFzayA8PAorCQkJSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCkpKQorCQloYW5kbGVfcmN2KGRkLCBpc3RhdCk7CisKKwlyZXQgPSBJUlFfSEFORExFRDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTJkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2VybmVsLmgKQEAgLTAsMCArMSw4ODMgQEAKKyNpZm5kZWYgX0lQQVRIX0tFUk5FTF9ICisjZGVmaW5lIF9JUEFUSF9LRVJORUxfSAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBUaGlzIGhlYWRlciBmaWxlIGlzIHRoZSBiYXNlIGhlYWRlciBmaWxlIGZvciBpbmZpbmlwYXRoIGtlcm5lbCBjb2RlCisgKiBpcGF0aF91c2VyLmggc2VydmVzIGEgc2ltaWxhciBwdXJwb3NlIGZvciB1c2VyIGNvZGUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCisjaW5jbHVkZSAiaXBhdGhfZGVidWcuaCIKKyNpbmNsdWRlICJpcGF0aF9yZWdpc3RlcnMuaCIKKworLyogb25seSBzL3cgbWFqb3IgdmVyc2lvbiBvZiBJbmZpbmlQYXRoIHdlIGNhbiBoYW5kbGUgKi8KKyNkZWZpbmUgSVBBVEhfQ0hJUF9WRVJTX01BSiAyVQorCisvKiBkb24ndCBjYXJlIGFib3V0IHRoaXMgZXhjZXB0IHByaW50aW5nICovCisjZGVmaW5lIElQQVRIX0NISVBfVkVSU19NSU4gMFUKKworLyogdGVtcG9yYXJ5LCBtYXliZSBhbHdheXMgKi8KK2V4dGVybiBzdHJ1Y3QgaW5maW5pcGF0aF9zdGF0cyBpcGF0aF9zdGF0czsKKworI2RlZmluZSBJUEFUSF9DSElQX1NXVkVSU0lPTiBJUEFUSF9DSElQX1ZFUlNfTUFKCisKK3N0cnVjdCBpcGF0aF9wb3J0ZGF0YSB7CisJdm9pZCAqKnBvcnRfcmN2ZWdyYnVmOworCWRtYV9hZGRyX3QgKnBvcnRfcmN2ZWdyYnVmX3BoeXM7CisJLyogcmN2aGRycSBiYXNlLCBuZWVkcyBtbWFwIGJlZm9yZSB1c2VmdWwgKi8KKwl2b2lkICpwb3J0X3JjdmhkcnE7CisJLyoga2VybmVsIHZpcnR1YWwgYWRkcmVzcyB3aGVyZSBoZHJxdGFpbCBpcyB1cGRhdGVkICovCisJdTY0ICpwb3J0X3JjdmhkcnRhaWxfa3ZhZGRyOworCS8qIHBhZ2UgKiB1c2VkIGZvciB1YWRkciAqLworCXN0cnVjdCBwYWdlICpwb3J0X3JjdmhkcnRhaWxfcGFnZXA7CisJLyoKKwkgKiB0ZW1wIGJ1ZmZlciBmb3IgZXhwZWN0ZWQgc2VuZCBzZXR1cCwgYWxsb2NhdGVkIGF0IG9wZW4sIGluc3RlYWQKKwkgKiBvZiBlYWNoIHNldHVwIGNhbGwKKwkgKi8KKwl2b2lkICpwb3J0X3RpZF9wZ19saXN0OworCS8qIHdoZW4gd2FpdGluZyBmb3IgcmN2IG9yIHBpb2F2YWlsICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgcG9ydF93YWl0OworCS8qCisJICogcmN2ZWdyIGJ1ZnMgYmFzZSwgcGh5c2ljYWwsIG11c3QgZml0CisJICogaW4gNDQgYml0cyBzbyAzMiBiaXQgcHJvZ3JhbXMgbW1hcDY0IDQ0IGJpdCB3b3JrcykKKwkgKi8KKwlkbWFfYWRkcl90IHBvcnRfcmN2ZWdyX3BoeXM7CisJLyogbW1hcCBvZiBoZHJxLCBtdXN0IGZpdCBpbiA0NCBiaXRzICovCisJZG1hX2FkZHJfdCBwb3J0X3JjdmhkcnFfcGh5czsKKwkvKgorCSAqIHRoZSBhY3R1YWwgdXNlciBhZGRyZXNzIHRoYXQgd2UgaXBhdGhfbWxvY2snZWQsIHNvIHdlIGNhbgorCSAqIGlwYXRoX211bmxvY2sgaXQgYXQgY2xvc2UKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHBvcnRfcmN2aGRydGFpbF91YWRkcjsKKwkvKgorCSAqIG51bWJlciBvZiBvcGVucyBvbiB0aGlzIGluc3RhbmNlICgwIG9yIDE7IGlnbm9yaW5nIGZvcmtzLCBkdXAsCisJICogZXRjLiBmb3Igbm93KQorCSAqLworCWludCBwb3J0X2NudDsKKwkvKgorCSAqIGhvdyBtdWNoIHNwYWNlIHRvIGxlYXZlIGF0IHN0YXJ0IG9mIGVhZ2VyIFRJRCBlbnRyaWVzIGZvcgorCSAqIHByb3RvY29sIHVzZSwgb24gZWFjaCBUSUQKKwkgKi8KKwkvKiBpbnN0ZWFkIG9mIGNhbGN1bGF0aW5nIGl0ICovCisJdW5zaWduZWQgcG9ydF9wb3J0OworCS8qIGNoaXAgb2Zmc2V0IG9mIFBJTyBidWZmZXJzIGZvciB0aGlzIHBvcnQgKi8KKwl1MzIgcG9ydF9waW9idWZzOworCS8qIGhvdyBtYW55IGFsbG9jX3BhZ2VzKCkgY2h1bmtzIGluIHBvcnRfcmN2ZWdyYnVmX3BhZ2VzICovCisJdTMyIHBvcnRfcmN2ZWdyYnVmX2NodW5rczsKKwkvKiBob3cgbWFueSBlZ3JidWZzIHBlciBjaHVuayAqLworCXUzMiBwb3J0X3JjdmVncmJ1ZnNfcGVyY2h1bms7CisJLyogb3JkZXIgZm9yIHBvcnRfcmN2ZWdyYnVmX3BhZ2VzICovCisJc2l6ZV90IHBvcnRfcmN2ZWdyYnVmX3NpemU7CisJLyogcmN2aGRycSBzaXplIChmb3IgZnJlZWluZykgKi8KKwlzaXplX3QgcG9ydF9yY3ZoZHJxX3NpemU7CisJLyogbmV4dCBleHBlY3RlZCBUSUQgdG8gY2hlY2sgd2hlbiBsb29raW5nIGZvciBmcmVlICovCisJdTMyIHBvcnRfdGlkY3Vyc29yOworCS8qIG5leHQgZXhwZWN0ZWQgVElEIHRvIGNoZWNrICovCisJdW5zaWduZWQgbG9uZyBwb3J0X2ZsYWc7CisJLyogV0FJVF9SQ1YgdGhhdCB0aW1lZCBvdXQsIG5vIGludGVycnVwdCAqLworCXUzMiBwb3J0X3JjdndhaXRfdG87CisJLyogV0FJVF9QSU8gdGhhdCB0aW1lZCBvdXQsIG5vIGludGVycnVwdCAqLworCXUzMiBwb3J0X3Bpb3dhaXRfdG87CisJLyogV0FJVF9SQ1YgYWxyZWFkeSBoYXBwZW5lZCwgbm8gd2FpdCAqLworCXUzMiBwb3J0X3Jjdm5vd2FpdDsKKwkvKiBXQUlUX1BJTyBhbHJlYWR5IGhhcHBlbmVkLCBubyB3YWl0ICovCisJdTMyIHBvcnRfcGlvbm93YWl0OworCS8qIHRvdGFsIG51bWJlciBvZiByY3ZoZHJxZnVsbCBlcnJvcnMgKi8KKwl1MzIgcG9ydF9oZHJxZnVsbDsKKwkvKiBwaWQgb2YgcHJvY2VzcyB1c2luZyB0aGlzIHBvcnQgKi8KKwlwaWRfdCBwb3J0X3BpZDsKKwkvKiBzYW1lIHNpemUgYXMgdGFza19zdHJ1Y3QgLmNvbW1bXSAqLworCWNoYXIgcG9ydF9jb21tWzE2XTsKKwkvKiBwa2V5cyBzZXQgYnkgdGhpcyB1c2Ugb2YgdGhpcyBwb3J0ICovCisJdTE2IHBvcnRfcGtleXNbNF07CisJLyogc28gZmlsZSBvcHMgY2FuIGdldCBhdCB1bml0ICovCisJc3RydWN0IGlwYXRoX2RldmRhdGEgKnBvcnRfZGQ7Cit9OworCitzdHJ1Y3Qgc2tfYnVmZjsKKworLyoKKyAqIGNvbnRyb2wgaW5mb3JtYXRpb24gZm9yIGxheWVyZWQgZHJpdmVycworICovCitzdHJ1Y3QgX2lwYXRoX2xheWVyIHsKKwl2b2lkICpsX2FyZzsKK307CisKKy8qIFZlcmJzIGxheWVyIGludGVyZmFjZSAqLworc3RydWN0IF92ZXJic19sYXllciB7CisJdm9pZCAqbF9hcmc7CisJc3RydWN0IHRpbWVyX2xpc3QgbF90aW1lcjsKK307CisKK3N0cnVjdCBpcGF0aF9kZXZkYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlwYXRoX2xpc3Q7CisKKwlzdHJ1Y3QgaXBhdGhfa3JlZ3MgY29uc3QgKmlwYXRoX2tyZWdzOworCXN0cnVjdCBpcGF0aF9jcmVncyBjb25zdCAqaXBhdGhfY3JlZ3M7CisKKwkvKiBtZW0tbWFwcGVkIHBvaW50ZXIgdG8gYmFzZSBvZiBjaGlwIHJlZ3MgKi8KKwl1NjQgX19pb21lbSAqaXBhdGhfa3JlZ2Jhc2U7CisJLyogZW5kIG9mIG1lbS1tYXBwZWQgY2hpcCBzcGFjZTsgcmFuZ2UgY2hlY2tpbmcgKi8KKwl1NjQgX19pb21lbSAqaXBhdGhfa3JlZ2VuZDsKKwkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGNoaXAgZm9yIGlvX3JlbWFwLCBldGMuICovCisJdW5zaWduZWQgbG9uZyBpcGF0aF9waHlzYWRkcjsKKwkvKiBiYXNlIG9mIG1lbW9yeSBhbGxvY2VkIGZvciBpcGF0aF9rcmVnYmFzZSwgZm9yIGZyZWUgKi8KKwl1NjQgKmlwYXRoX2tyZWdhbGxvYzsKKwkvKgorCSAqIHZlcnNpb24gb2Yga3JlZ2Jhc2UgdGhhdCBkb2Vzbid0IGhhdmUgaGlnaCBiaXRzIHNldCAoZm9yIDMyIGJpdAorCSAqIHByb2dyYW1zLCBzbyBtbWFwNjQgNDQgYml0IHdvcmtzKQorCSAqLworCXU2NCBfX2lvbWVtICppcGF0aF9rcmVndmlydDsKKwkvKgorCSAqIHZpcnR1YWwgYWRkcmVzcyB3aGVyZSBwb3J0MCByY3ZoZHJxdGFpbCB1cGRhdGVkIGZvciB0aGlzIHVuaXQuCisJICogb25seSB3cml0dGVuIHRvIGJ5IHRoZSBjaGlwLCBub3QgdGhlIGRyaXZlci4KKwkgKi8KKwl2b2xhdGlsZSBfX2xlNjQgKmlwYXRoX2hkcnF0YWlscHRyOworCWRtYV9hZGRyX3QgaXBhdGhfZG1hX2FkZHI7CisJLyogaXBhdGhfY2ZncG9ydHMgcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKippcGF0aF9wZDsKKwkvKiBza19idWZmcyB1c2VkIGJ5IHBvcnQgMCBlYWdlciByZWNlaXZlIHF1ZXVlICovCisJc3RydWN0IHNrX2J1ZmYgKippcGF0aF9wb3J0MF9za2JzOworCS8qIGt2aXJ0IGFkZHJlc3Mgb2YgMXN0IDJrIHBpbyBidWZmZXIgKi8KKwl2b2lkIF9faW9tZW0gKmlwYXRoX3BpbzJrYmFzZTsKKwkvKiBrdmlydCBhZGRyZXNzIG9mIDFzdCA0ayBwaW8gYnVmZmVyICovCisJdm9pZCBfX2lvbWVtICppcGF0aF9waW80a2Jhc2U7CisJLyoKKwkgKiBwb2ludHMgdG8gYXJlYSB3aGVyZSBQSU9hdmFpbCByZWdpc3RlcnMgd2lsbCBiZSBETUEnZWQuCisJICogSGFzIHRvIGJlIG9uIGEgcGFnZSBvZiBpdCdzIG93biwgYmVjYXVzZSB0aGUgcGFnZSB3aWxsIGJlCisJICogbWFwcGVkIGludG8gdXNlciBwcm9ncmFtIHNwYWNlLiAgVGhpcyBjb3B5IGlzICpPTkxZKiBldmVyCisJICogd3JpdHRlbiBieSBETUEsIG5vdCBieSB0aGUgZHJpdmVyISAgTmVlZCBhIGNvcHkgcGVyIGRldmljZQorCSAqIHdoZW4gd2UgZ2V0IHRvIG11bHRpcGxlIGRldmljZXMKKwkgKi8KKwl2b2xhdGlsZSBfX2xlNjQgKmlwYXRoX3Bpb2F2YWlscmVnc19kbWE7CisJLyogcGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB1cGRhdGVzIG9jY3VyICovCisJZG1hX2FkZHJfdCBpcGF0aF9waW9hdmFpbHJlZ3NfcGh5czsKKwlzdHJ1Y3QgX2lwYXRoX2xheWVyIGlwYXRoX2xheWVyOworCS8qIHNldHVwIGludHIgKi8KKwlpbnQgKCppcGF0aF9mX2ludHJzZXR1cCkoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisJLyogc2V0dXAgb24tY2hpcCBidXMgY29uZmlnICovCisJaW50ICgqaXBhdGhfZl9idXMpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHN0cnVjdCBwY2lfZGV2ICopOworCS8qIGhhcmQgcmVzZXQgY2hpcCAqLworCWludCAoKmlwYXRoX2ZfcmVzZXQpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCWludCAoKmlwYXRoX2ZfZ2V0X2JvYXJkbmFtZSkoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgY2hhciAqLAorCQkJCSAgICAgc2l6ZV90KTsKKwl2b2lkICgqaXBhdGhfZl9pbml0X2h3ZXJyb3JzKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKwl2b2lkICgqaXBhdGhfZl9oYW5kbGVfaHdlcnJvcnMpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGNoYXIgKiwKKwkJCQkJc2l6ZV90KTsKKwl2b2lkICgqaXBhdGhfZl9xdWlldF9zZXJkZXMpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCWludCAoKmlwYXRoX2ZfYnJpbmd1cF9zZXJkZXMpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCWludCAoKmlwYXRoX2ZfZWFybHlfaW5pdCkoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisJdm9pZCAoKmlwYXRoX2ZfY2xlYXJfdGlkcykoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdW5zaWduZWQpOworCXZvaWQgKCppcGF0aF9mX3B1dF90aWQpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHU2NCBfX2lvbWVtKiwKKwkJCQl1MzIsIHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCppcGF0aF9mX3RpZHRlbXBsYXRlKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKwl2b2lkICgqaXBhdGhfZl9jbGVhbnVwKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKwl2b2lkICgqaXBhdGhfZl9zZXRleHRsZWQpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHU2NCwgdTY0KTsKKwkvKiBmaWxsIG91dCBjaGlwLXNwZWNpZmljIGZpZWxkcyAqLworCWludCAoKmlwYXRoX2ZfZ2V0X2Jhc2VfaW5mbykoc3RydWN0IGlwYXRoX3BvcnRkYXRhICosIHZvaWQgKik7CisJc3RydWN0IF92ZXJic19sYXllciB2ZXJic19sYXllcjsKKwkvKiB0b3RhbCBkd29yZHMgc2VudCAoc3VtbWVkIGZyb20gY291bnRlcikgKi8KKwl1NjQgaXBhdGhfc3dvcmQ7CisJLyogdG90YWwgZHdvcmRzIHJjdmQgKHN1bW1lZCBmcm9tIGNvdW50ZXIpICovCisJdTY0IGlwYXRoX3J3b3JkOworCS8qIHRvdGFsIHBhY2tldHMgc2VudCAoc3VtbWVkIGZyb20gY291bnRlcikgKi8KKwl1NjQgaXBhdGhfc3BrdHM7CisJLyogdG90YWwgcGFja2V0cyByY3ZkIChzdW1tZWQgZnJvbSBjb3VudGVyKSAqLworCXU2NCBpcGF0aF9ycGt0czsKKwkvKiBpcGF0aF9zdGF0dXNwIGluaXRpYWxseSBwb2ludHMgdG8gdGhpcy4gKi8KKwl1NjQgX2lwYXRoX3N0YXR1czsKKwkvKiBHVUlEIGZvciB0aGlzIGludGVyZmFjZSwgaW4gbmV0d29yayBvcmRlciAqLworCV9fYmU2NCBpcGF0aF9ndWlkOworCS8qCisJICogYWdncmVncmF0ZSBvZiBlcnJvciBiaXRzIHJlcG9ydGVkIHNpbmNlIGxhc3QgY2xlYXJlZCwgZm9yCisJICogbGltaXRpbmcgb2YgZXJyb3IgcmVwb3J0aW5nCisJICovCisJaXBhdGhfZXJyX3QgaXBhdGhfbGFzdGVycm9yOworCS8qCisJICogYWdncmVncmF0ZSBvZiBlcnJvciBiaXRzIHJlcG9ydGVkIHNpbmNlIGxhc3QgY2xlYXJlZCwgZm9yCisJICogbGltaXRpbmcgb2YgaHdlcnJvciByZXBvcnRpbmcKKwkgKi8KKwlpcGF0aF9lcnJfdCBpcGF0aF9sYXN0aHdlcnJvcjsKKwkvKgorCSAqIGVycm9ycyBtYXNrZWQgYmVjYXVzZSB0aGV5IG9jY3VyIHRvbyBmYXN0LCBhbHNvIGluY2x1ZGVzIGVycm9ycworCSAqIHRoYXQgYXJlIGFsd2F5cyBpZ25vcmVkIChpcGF0aF9pZ25vcmVkZXJycykKKwkgKi8KKwlpcGF0aF9lcnJfdCBpcGF0aF9tYXNrZWRlcnJzOworCS8qIHRpbWUgaW4gamlmZmllcyBhdCB3aGljaCB0byByZS1lbmFibGUgbWFza2VkZXJycyAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfdW5tYXNrdGltZTsKKwkvKgorCSAqIGVycm9ycyBhbHdheXMgaWdub3JlZCAobWFza2VkKSwgYXQgbGVhc3QgZm9yIGEgZ2l2ZW4KKwkgKiBjaGlwL2RldmljZSwgYmVjYXVzZSB0aGV5IGFyZSB3cm9uZyBvciBub3QgdXNlZnVsCisJICovCisJaXBhdGhfZXJyX3QgaXBhdGhfaWdub3JlZGVycnM7CisJLyogY291bnQgb2YgZWdyZnVsbCBlcnJvcnMsIGNvbWJpbmVkIGZvciBhbGwgcG9ydHMgKi8KKwl1NjQgaXBhdGhfbGFzdF90aWRmdWxsOworCS8qIGZvciBpcGF0aF9xY2hlY2soKSAqLworCXU2NCBpcGF0aF9sYXN0cG9ydDByY3ZfY250OworCS8qIHRlbXBsYXRlIGZvciB3cml0aW5nIFRJRHMgICovCisJdTY0IGlwYXRoX3RpZHRlbXBsYXRlOworCS8qIHZhbHVlIHRvIHdyaXRlIHRvIGZyZWUgVElEcyAqLworCXU2NCBpcGF0aF90aWRpbnZhbGlkOworCS8qIFBFLTgwMCByY3YgaW50ZXJydXB0IHNldHVwICovCisJdTY0IGlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmOworCisJLyogc2l6ZSBvZiBtZW1vcnkgYXQgaXBhdGhfa3JlZ2Jhc2UgKi8KKwl1MzIgaXBhdGhfa3JlZ3NpemU7CisJLyogbnVtYmVyIG9mIHJlZ2lzdGVycyB1c2VkIGZvciBwaW9hdmFpbCAqLworCXUzMiBpcGF0aF9waW9hdnJlZ3M7CisJLyogSVBBVEhfUE9MTCwgZXRjLiAqLworCXUzMiBpcGF0aF9mbGFnczsKKwkvKiBpcGF0aF9mbGFncyBzbWEgaXMgd2FpdGluZyBmb3IgKi8KKwl1MzIgaXBhdGhfc21hX3N0YXRlX3dhbnRlZDsKKwkvKiBsYXN0IGJ1ZmZlciBmb3IgdXNlciB1c2UsIGZpcnN0IGJ1ZiBmb3Iga2VybmVsIHVzZSBpcyB0aGlzCisJICogaW5kZXguICovCisJdTMyIGlwYXRoX2xhc3Rwb3J0X3Bpb2J1ZjsKKwkvKiBpcyBhIHN0YXRzIHRpbWVyIGFjdGl2ZSAqLworCXUzMiBpcGF0aF9zdGF0c190aW1lcl9hY3RpdmU7CisJLyogZHdvcmRzIHNlbnQgcmVhZCBmcm9tIGNvdW50ZXIgKi8KKwl1MzIgaXBhdGhfbGFzdHN3b3JkOworCS8qIGR3b3JkcyByZWNlaXZlZCByZWFkIGZyb20gY291bnRlciAqLworCXUzMiBpcGF0aF9sYXN0cndvcmQ7CisJLyogc2VudCBwYWNrZXRzIHJlYWQgZnJvbSBjb3VudGVyICovCisJdTMyIGlwYXRoX2xhc3RzcGt0czsKKwkvKiByZWNlaXZlZCBwYWNrZXRzIHJlYWQgZnJvbSBjb3VudGVyICovCisJdTMyIGlwYXRoX2xhc3RycGt0czsKKwkvKiBwaW8gYnVmcyBhbGxvY2F0ZWQgcGVyIHBvcnQgKi8KKwl1MzIgaXBhdGhfcGJ1ZnNwb3J0OworCS8qCisJICogbnVtYmVyIG9mIHBvcnRzIGNvbmZpZ3VyZWQgYXMgbWF4OyB6ZXJvIGlzIHNldCB0byBudW1iZXIgY2hpcAorCSAqIHN1cHBvcnRzLCBsZXNzIGdpdmVzIG1vcmUgcGlvIGJ1ZnMvcG9ydCwgZXRjLgorCSAqLworCXUzMiBpcGF0aF9jZmdwb3J0czsKKwkvKiBwb3J0MCByY3ZoZHJxIGhlYWQgb2Zmc2V0ICovCisJdTMyIGlwYXRoX3BvcnQwaGVhZDsKKwkvKiBjb3VudCBvZiBwb3J0IDAgaGRycWZ1bGwgZXJyb3JzICovCisJdTMyIGlwYXRoX3AwX2hkcnFmdWxsOworCisJLyoKKwkgKiAoKmNmZ3BvcnRzKSB1c2VkIHRvIHN1cHByZXNzIG11bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lCisJICogcG9ydCBzdGF5aW5nIHN0dWNrIGF0IHNhbWUgcG9pbnQKKwkgKi8KKwl1MzIgKmlwYXRoX2xhc3RyY3ZoZHJxdGFpbHM7CisJLyoKKwkgKiAoKmNmZ3BvcnRzKSB1c2VkIHRvIHN1cHByZXNzIG11bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lCisJICogcG9ydCBzdGF5aW5nIHN0dWNrIGF0IHNhbWUgcG9pbnQKKwkgKi8KKwl1MzIgKmlwYXRoX2xhc3RlZ3JoZWFkczsKKwkvKgorCSAqIGluZGV4IG9mIGxhc3QgcGlvYnVmZmVyIHdlIHVzZWQuICBTcGVlZHMgdXAgc2VhcmNoaW5nLCBieQorCSAqIHN0YXJ0aW5nIGF0IHRoaXMgcG9pbnQuICBEb2Vzbid0IG1hdHRlciBpZiBtdWx0aXBsZSBjcHUncyB1c2UgYW5kCisJICogdXBkYXRlLCBsYXN0IHVwZGF0ZXIgaXMgb25seSB3cml0ZSB0aGF0IG1hdHRlcnMuICBXaGVuZXZlciBpdAorCSAqIHdyYXBzLCB3ZSB1cGRhdGUgc2hhZG93IGNvcGllcy4gIE5lZWQgYSBjb3B5IHBlciBkZXZpY2Ugd2hlbiB3ZQorCSAqIGdldCB0byBtdWx0aXBsZSBkZXZpY2VzCisJICovCisJdTMyIGlwYXRoX2xhc3RwaW9pbmRleDsKKwkvKiBtYXggbGVuZ3RoIG9mIGZyZWV6ZW1zZyAqLworCXUzMiBpcGF0aF9mcmVlemVsZW47CisJLyoKKwkgKiBjb25zZWN1dGl2ZSB0aW1lcyB3ZSB3YW50ZWQgYSBQSU8gYnVmZmVyIGJ1dCB3ZXJlIHVuYWJsZSB0bworCSAqIGdldCBvbmUKKwkgKi8KKwl1MzIgaXBhdGhfY29uc2VjX25vcGlvYnVmOworCS8qCisJICogaGludCB0aGF0IHdlIHNob3VsZCB1cGRhdGUgaXBhdGhfcGlvYXZhaWxzaGFkb3cgYmVmb3JlCisJICogbG9va2luZyBmb3IgYSBQSU8gYnVmZmVyCisJICovCisJdTMyIGlwYXRoX3VwZF9waW9fc2hhZG93OworCS8qIHNvIHdlIGNhbiByZXdyaXRlIGl0IGFmdGVyIGEgY2hpcCByZXNldCAqLworCXUzMiBpcGF0aF9wY2liYXIwOworCS8qIHNvIHdlIGNhbiByZXdyaXRlIGl0IGFmdGVyIGEgY2hpcCByZXNldCAqLworCXUzMiBpcGF0aF9wY2liYXIxOworCS8qIHNlcXVlbnRpYWwgdHJpZXMgZm9yIFNNQSBzZW5kIGFuZCBubyBidWZzICovCisJdTMyIGlwYXRoX25vc21hX2J1ZnM7CisJLyogZHVyYXRpb24gKHNlY29uZHMpIGlwYXRoX25vc21hX2J1ZnMgc2V0ICovCisJdTMyIGlwYXRoX25vc21hX3NlY3M7CisKKwkvKiBIVC9QQ0kgVmVuZG9yIElEIChoZXJlIGZvciBOb2RlSW5mbykgKi8KKwl1MTYgaXBhdGhfdmVuZG9yaWQ7CisJLyogSFQvUENJIERldmljZSBJRCAoaGVyZSBmb3IgTm9kZUluZm8pICovCisJdTE2IGlwYXRoX2RldmljZWlkOworCS8qIG9mZnNldCBpbiBIVCBjb25maWcgc3BhY2Ugb2Ygc2xhdmUvcHJpbWFyeSBpbnRlcmZhY2UgYmxvY2sgKi8KKwl1OCBpcGF0aF9odF9zbGF2ZV9vZmY7CisJLyogZm9yIHdyaXRlIGNvbWJpbmluZyBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfd2NfY29va2llOworCS8qIHJlZiBjb3VudCBmb3IgZWFjaCBwa2V5ICovCisJYXRvbWljX3QgaXBhdGhfcGtleXJlZnNbNF07CisJLyogc2hhZG93IGNvcHkgb2YgYWxsIGV4cHRpZHMgcGh5c2FkZHI7IHVzZWQgb25seSBieSBmdW5jc2ltICovCisJdTY0ICppcGF0aF90aWRzaW1zaGFkb3c7CisJLyogc2hhZG93IGNvcHkgb2Ygc3RydWN0IHBhZ2UgKidzIGZvciBleHAgdGlkIHBhZ2VzICovCisJc3RydWN0IHBhZ2UgKippcGF0aF9wYWdlc2hhZG93OworCS8qIGxvY2sgdG8gd29ya2Fyb3VuZCBjaGlwIGJ1ZyA5NDM3ICovCisJc3BpbmxvY2tfdCBpcGF0aF90aWRfbG9jazsKKworCS8qCisJICogSVBBVEhfU1RBVFVTXyosCisJICogdGhpcyBhZGRyZXNzIGlzIG1hcHBlZCByZWFkb25seSBpbnRvIHVzZXIgcHJvY2Vzc2VzIHNvIHRoZXkgY2FuCisJICogZ2V0IHN0YXR1cyBjaGVhcGx5LCB3aGVuZXZlciB0aGV5IHdhbnQuCisJICovCisJdTY0ICppcGF0aF9zdGF0dXNwOworCS8qIGZyZWV6ZSBtc2cgaWYgaHcgZXJyb3IgcHV0IGNoaXAgaW4gZnJlZXplICovCisJY2hhciAqaXBhdGhfZnJlZXplbXNnOworCS8qIHBjaSBhY2Nlc3MgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBjZGV2ICpjZGV2OworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKKwkvKiB0aW1lciB1c2VkIHRvIHByZXZlbnQgc3RhdHMgb3ZlcmZsb3csIGVycm9yIHRocm90dGxpbmcsIGV0Yy4gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBpcGF0aF9zdGF0c190aW1lcjsKKwkvKiBjaGVjayBmb3Igc3RhbGUgbWVzc2FnZXMgaW4gcmN2IHF1ZXVlICovCisJLyogb25seSBhbGxvdyBvbmUgaW50ciBhdCBhIHRpbWUuICovCisJdW5zaWduZWQgbG9uZyBpcGF0aF9yY3ZfcGVuZGluZzsKKworCS8qCisJICogU2hhZG93IGNvcGllcyBvZiByZWdpc3RlcnM7IHNpemUgaW5kaWNhdGVzIHJlYWQgYWNjZXNzIHNpemUuCisJICogTW9zdCBvZiB0aGVtIGFyZSByZWFkb25seSwgYnV0IHNvbWUgYXJlIHdyaXRlLW9ubHkgcmVnaXN0ZXIsCisJICogd2hlcmUgd2UgbWFuaXB1bGF0ZSB0aGUgYml0cyBpbiB0aGUgc2hhZG93IGNvcHksIGFuZCB0aGVuIHdyaXRlCisJICogdGhlIHNoYWRvdyBjb3B5IHRvIGluZmluaXBhdGguCisJICoKKwkgKiBXZSBkZWxpYmVyYXRlbHkgbWFrZSBtb3N0IG9mIHRoZXNlIDMyIGJpdHMsIHNpbmNlIHRoZXkgaGF2ZQorCSAqIHJlc3RyaWN0ZWQgcmFuZ2UuICBGb3IgYW55IHRoYXQgd2UgcmVhZCwgd2Ugd29uJ3QgdG8gZ2VuZXJhdGUgMzIKKwkgKiBiaXQgYWNjZXNzZXMsIHNpbmNlIE9wdGVyb24gd2lsbCBnZW5lcmF0ZSAyIHNlcGFyYXRlIDMyIGJpdCBIVAorCSAqIHRyYW5zYWN0aW9ucyBmb3IgYSA2NCBiaXQgcmVhZCwgYW5kIHdlIHdhbnQgdG8gYXZvaWQgdW5uZWNlc3NhcnkKKwkgKiBIVCB0cmFuc2FjdGlvbnMuCisJICovCisKKwkvKiBUaGlzIGlzIHRoZSA2NCBiaXQgZ3JvdXAgKi8KKworCS8qCisJICogc2hhZG93IG9mIHBpb2F2YWlsLCBjaGVjayB0byBiZSBzdXJlIGl0J3MgbGFyZ2UgZW5vdWdoIGF0CisJICogaW5pdCB0aW1lLgorCSAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfcGlvYXZhaWxzaGFkb3dbOF07CisJLyogc2hhZG93IG9mIGtyX2dwaW9fb3V0LCBmb3Igcm13IG9wcyAqLworCXU2NCBpcGF0aF9ncGlvX291dDsKKwkvKiBrcl9yZXZpc2lvbiBzaGFkb3cgKi8KKwl1NjQgaXBhdGhfcmV2aXNpb247CisJLyoKKwkgKiBzaGFkb3cgb2YgaWJjY3RybCwgZm9yIGludGVycnVwdCBoYW5kbGluZyBvZiBsaW5rIGNoYW5nZXMsCisJICogZXRjLgorCSAqLworCXU2NCBpcGF0aF9pYmNjdHJsOworCS8qCisJICogbGFzdCBpYmNzdGF0dXMsIHRvIHN1cHByZXNzICJkdXBsaWNhdGUiIHN0YXR1cyBjaGFuZ2UgbWVzc2FnZXMsCisJICogbW9zdGx5IGZyb20gMiB0byAzCisJICovCisJdTY0IGlwYXRoX2xhc3RpYmNzdGF0OworCS8qIGh3ZXJybWFzayBzaGFkb3cgKi8KKwlpcGF0aF9lcnJfdCBpcGF0aF9od2Vycm1hc2s7CisJLyogaW50ZXJydXB0IGNvbmZpZyByZWcgc2hhZG93ICovCisJdTY0IGlwYXRoX2ludGNvbmZpZzsKKwkvKiBrcl9zZW5kcGlvYnVmYmFzZSB2YWx1ZSAqLworCXU2NCBpcGF0aF9waW9idWZiYXNlOworCisJLyogdGhlc2UgYXJlIHRoZSAiMzIgYml0IiByZWdzICovCisKKwkvKgorCSAqIG51bWJlciBvZiBHVUlEcyBpbiB0aGUgZmxhc2ggZm9yIHRoaXMgaW50ZXJmYWNlOyBtYXkgbmVlZCBzb21lCisJICogcmV0aGlua2luZyBmb3Igc2V0dGluZyBvbiBvdGhlciBpZmFjZXMKKwkgKi8KKwl1MzIgaXBhdGhfbmd1aWQ7CisJLyoKKwkgKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgMzItYml0IGJpdG1hc2tzLCBidXQge3Rlc3QsY2xlYXIsc2V0fV9iaXQKKwkgKiBhbGwgZXhwZWN0IGJpdCBmaWVsZHMgdG8gYmUgInVuc2lnbmVkIGxvbmciCisJICovCisJLyogc2hhZG93IGtyX3JjdmN0cmwgKi8KKwl1bnNpZ25lZCBsb25nIGlwYXRoX3JjdmN0cmw7CisJLyogc2hhZG93IGtyX3NlbmRjdHJsICovCisJdW5zaWduZWQgbG9uZyBpcGF0aF9zZW5kY3RybDsKKworCS8qIHZhbHVlIHdlIHB1dCBpbiBrcl9yY3ZoZHJjbnQgKi8KKwl1MzIgaXBhdGhfcmN2aGRyY250OworCS8qIHZhbHVlIHdlIHB1dCBpbiBrcl9yY3ZoZHJzaXplICovCisJdTMyIGlwYXRoX3JjdmhkcnNpemU7CisJLyogdmFsdWUgd2UgcHV0IGluIGtyX3JjdmhkcmVudHNpemUgKi8KKwl1MzIgaXBhdGhfcmN2aGRyZW50c2l6ZTsKKwkvKiBvZmZzZXQgb2YgbGFzdCBlbnRyeSBpbiByY3ZoZHJxICovCisJdTMyIGlwYXRoX2hkcnFsYXN0OworCS8qIGtyX3BvcnRjbnQgdmFsdWUgKi8KKwl1MzIgaXBhdGhfcG9ydGNudDsKKwkvKiBrcl9wYWdlYWxpZ24gdmFsdWUgKi8KKwl1MzIgaXBhdGhfcGFsaWduOworCS8qIG51bWJlciBvZiAiMktCIiBQSU8gYnVmZmVycyAqLworCXUzMiBpcGF0aF9waW9iY250Mms7CisJLyogc2l6ZSBpbiBieXRlcyBvZiAiMktCIiBQSU8gYnVmZmVycyAqLworCXUzMiBpcGF0aF9waW9zaXplMms7CisJLyogbnVtYmVyIG9mICI0S0IiIFBJTyBidWZmZXJzICovCisJdTMyIGlwYXRoX3Bpb2JjbnQ0azsKKwkvKiBzaXplIGluIGJ5dGVzIG9mICI0S0IiIFBJTyBidWZmZXJzICovCisJdTMyIGlwYXRoX3Bpb3NpemU0azsKKwkvKiBrcl9yY3ZlZ3JiYXNlIHZhbHVlICovCisJdTMyIGlwYXRoX3JjdmVncmJhc2U7CisJLyoga3JfcmN2ZWdyY250IHZhbHVlICovCisJdTMyIGlwYXRoX3JjdmVncmNudDsKKwkvKiBrcl9yY3Z0aWRiYXNlIHZhbHVlICovCisJdTMyIGlwYXRoX3JjdnRpZGJhc2U7CisJLyoga3JfcmN2dGlkY250IHZhbHVlICovCisJdTMyIGlwYXRoX3JjdnRpZGNudDsKKwkvKiBrcl9zZW5kcmVnYmFzZSAqLworCXUzMiBpcGF0aF9zcmVnYmFzZTsKKwkvKiBrcl91c2VycmVnYmFzZSAqLworCXUzMiBpcGF0aF91cmVnYmFzZTsKKwkvKiBrcl9jb3VudGVycmVnYmFzZSAqLworCXUzMiBpcGF0aF9jcmVnYmFzZTsKKwkvKiBzaGFkb3cgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgKi8KKwl1MzIgaXBhdGhfY29udHJvbDsKKwkvKiBzaGFkb3cgdGhlIGdwaW8gb3V0cHV0IGNvbnRlbnRzICovCisJdTMyIGlwYXRoX2V4dGN0cmw7CisJLyogUENJIHJldmlzaW9uIHJlZ2lzdGVyIChIVEMgcmV2IG9uIEZQR0EpICovCisJdTMyIGlwYXRoX3BjaXJldjsKKworCS8qIGNoaXAgYWRkcmVzcyBzcGFjZSB1c2VkIGJ5IDRrIHBpbyBidWZmZXJzICovCisJdTMyIGlwYXRoXzRrYWxpZ247CisJLyogVGhlIE1UVSBwcm9ncmFtbWVkIGZvciB0aGlzIHVuaXQgKi8KKwl1MzIgaXBhdGhfaWJtdHU7CisJLyoKKwkgKiBUaGUgbWF4IHNpemUgSUIgcGFja2V0LCBpbmNsdWRlZCBJQiBoZWFkZXJzIHRoYXQgd2UgY2FuIHNlbmQuCisJICogU3RhcnRzIHNhbWUgYXMgaXBhdGhfcGlvc2l6ZSwgYnV0IGlzIGFmZmVjdGVkIHdoZW4gaWJtdHUgaXMKKwkgKiBjaGFuZ2VkLCBvciBieSBzaXplIG9mIGVhZ2VyIGJ1ZmZlcnMKKwkgKi8KKwl1MzIgaXBhdGhfaWJtYXhsZW47CisJLyoKKwkgKiBpYm1heGxlbiBhdCBpbml0IHRpbWUsIGxpbWl0ZWQgYnkgY2hpcCBhbmQgYnkgcmVjZWl2ZSBidWZmZXIKKwkgKiBzaXplLiAgTm90IGNoYW5nZWQgYWZ0ZXIgaW5pdC4KKwkgKi8KKwl1MzIgaXBhdGhfaW5pdF9pYm1heGxlbjsKKwkvKiBzaXplIG9mIGVhY2ggcmN2ZWdyYnVmZmVyICovCisJdTMyIGlwYXRoX3JjdmVncmJ1ZnNpemU7CisJLyogd2lkdGggKDIsNCw4LDE2LDMyKSBmcm9tIEhUIGNvbmZpZyByZWcgKi8KKwl1MzIgaXBhdGhfaHR3aWR0aDsKKwkvKiBIVCBzcGVlZCAoMjAwLDQwMCw4MDAsMTAwMCkgZnJvbSBIVCBjb25maWcgKi8KKwl1MzIgaXBhdGhfaHRzcGVlZDsKKwkvKiBwb3J0cyB3YWl0aW5nIGZvciBQSU9hdmFpbCBpbnRyICovCisJdW5zaWduZWQgbG9uZyBpcGF0aF9wb3J0cGlvd2FpdDsKKwkvKgorCSAqIG51bWJlciBvZiBzZXF1ZW50aWFsIGliY3N0YXR1cyBjaGFuZ2UgZm9yIHBvbGxpbmcgYWN0aXZlL3F1aWV0CisJICogKGkuZS4sIGxpbmsgbm90IGNvbWluZyB1cCkuCisJICovCisJdTMyIGlwYXRoX2licG9sbGNudDsKKwkvKiBsb3cgYW5kIGhpZ2ggcG9ydGlvbnMgb2YgTVNJIGNhcGFiaWxpdHkvdmVjdG9yICovCisJdTMyIGlwYXRoX21zaV9sbzsKKwkvKiBzYXZlZCBhZnRlciBQQ0llIGluaXQgZm9yIHJlc3RvcmUgYWZ0ZXIgcmVzZXQgKi8KKwl1MzIgaXBhdGhfbXNpX2hpOworCS8qIE1TSSBkYXRhICh2ZWN0b3IpIHNhdmVkIGZvciByZXN0b3JlICovCisJdTE2IGlwYXRoX21zaV9kYXRhOworCS8qIE1MSUQgcHJvZ3JhbW1lZCBmb3IgdGhpcyBpbnN0YW5jZSAqLworCXUxNiBpcGF0aF9tbGlkOworCS8qIExJRCBwcm9ncmFtbWVkIGZvciB0aGlzIGluc3RhbmNlICovCisJdTE2IGlwYXRoX2xpZDsKKwkvKiBsaXN0IG9mIHBrZXlzIHByb2dyYW1tZWQ7IDAgaWYgbm90IHNldCAqLworCXUxNiBpcGF0aF9wa2V5c1s0XTsKKwkvKiBBU0NJSSBzZXJpYWwgbnVtYmVyLCBmcm9tIGZsYXNoICovCisJdTggaXBhdGhfc2VyaWFsWzEyXTsKKwkvKiBodW1hbiByZWFkYWJsZSBib2FyZCB2ZXJzaW9uICovCisJdTggaXBhdGhfYm9hcmR2ZXJzaW9uWzgwXTsKKwkvKiBjaGlwIG1ham9yIHJldiwgZnJvbSBpcGF0aF9yZXZpc2lvbiAqLworCXU4IGlwYXRoX21hanJldjsKKwkvKiBjaGlwIG1pbm9yIHJldiwgZnJvbSBpcGF0aF9yZXZpc2lvbiAqLworCXU4IGlwYXRoX21pbnJldjsKKwkvKiBib2FyZCByZXYsIGZyb20gaXBhdGhfcmV2aXNpb24gKi8KKwl1OCBpcGF0aF9ib2FyZHJldjsKKwkvKiB1bml0ICMgb2YgdGhpcyBjaGlwLCBpZiBwcmVzZW50ICovCisJaW50IGlwYXRoX3VuaXQ7CisJLyogc2F2ZWQgZm9yIHJlc3RvcmUgYWZ0ZXIgcmVzZXQgKi8KKwl1OCBpcGF0aF9wY2lfY2FjaGVsaW5lOworCS8qIExJRCBtYXNrIGNvbnRyb2wgKi8KKwl1OCBpcGF0aF9sbWM7Cit9OworCitleHRlcm4gdm9sYXRpbGUgX19sZTY0ICppcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsOworZXh0ZXJuIGRtYV9hZGRyX3QgaXBhdGhfcG9ydDBfcmN2aGRydGFpbF9kbWE7CisKKyNkZWZpbmUgSVBBVEhfUE9SVDBfUkNWSERSVEFJTF9TSVpFIFBBR0VfU0laRQorCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpcGF0aF9kZXZfbGlzdDsKK2V4dGVybiBzcGlubG9ja190IGlwYXRoX2RldnNfbG9jazsKK2V4dGVybiBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqaXBhdGhfbG9va3VwKGludCB1bml0KTsKKworZXh0ZXJuIHUxNiBpcGF0aF9sYXllcl9yY3Zfb3Bjb2RlOworZXh0ZXJuIGludCBfX2lwYXRoX2xheWVyX2ludHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyKTsKK2V4dGVybiBpbnQgaXBhdGhfbGF5ZXJfaW50cihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1MzIpOworZXh0ZXJuIGludCBfX2lwYXRoX2xheWVyX3JjdihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB2b2lkICosCisJCQkgICAgIHN0cnVjdCBza19idWZmICopOworZXh0ZXJuIGludCBfX2lwYXRoX2xheWVyX3Jjdl9saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgX19pcGF0aF92ZXJic19waW9idWZhdmFpbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK2V4dGVybiBpbnQgX19pcGF0aF92ZXJic19yY3Yoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdm9pZCAqLCB2b2lkICosIHUzMik7CisKK3ZvaWQgaXBhdGhfbGF5ZXJfYWRkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordm9pZCBpcGF0aF9sYXllcl9kZWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisKK2ludCBpcGF0aF9pbml0X2NoaXAoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaW50KTsKK2ludCBpcGF0aF9lbmFibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK3ZvaWQgaXBhdGhfZGlzYWJsZV93YyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2NvdW50X3VuaXRzKGludCAqbnByZXNlbnRwLCBpbnQgKm51cHAsIHUzMiAqbWF4cG9ydHNwKTsKK3ZvaWQgaXBhdGhfc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zOworaW50IGlwYXRoX2NkZXZfaW5pdChpbnQgbWlub3IsIGNoYXIgKm5hbWUsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCSAgICBzdHJ1Y3QgY2RldiAqKmNkZXZwLCBzdHJ1Y3QgY2xhc3NfZGV2aWNlICoqY2xhc3NfZGV2cCk7Cit2b2lkIGlwYXRoX2NkZXZfY2xlYW51cChzdHJ1Y3QgY2RldiAqKmNkZXZwLAorCQkJc3RydWN0IGNsYXNzX2RldmljZSAqKmNsYXNzX2RldnApOworCitpbnQgaXBhdGhfZGlhZ19pbml0KHZvaWQpOwordm9pZCBpcGF0aF9kaWFnX2NsZWFudXAodm9pZCk7Cit2b2lkIGlwYXRoX2RpYWdfYnJpbmd1cF9saW5rKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgaXBhdGhfc21hX3N0YXRlX3dhaXQ7CisKK2ludCBpcGF0aF91c2VyX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwordm9pZCBpcGF0aF91c2VyX2RlbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworCitzdHJ1Y3Qgc2tfYnVmZiAqaXBhdGhfYWxsb2Nfc2tiKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgZ2ZwX3QpOworCitleHRlcm4gaW50IGlwYXRoX2RpYWdfaW51c2U7CisKK2lycXJldHVybl90IGlwYXRoX2ludHIoaW50IGlycSwgdm9pZCAqZGV2aWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3ZvaWQgaXBhdGhfZGVjb2RlX2VycihjaGFyICpidWYsIHNpemVfdCBibGVuLCBpcGF0aF9lcnJfdCBlcnIpOworI2lmIF9fSVBBVEhfSU5GTyB8fCBfX0lQQVRIX0RCRworZXh0ZXJuIGNvbnN0IGNoYXIgKmlwYXRoX2liY3N0YXR1c19zdHJbXTsKKyNlbmRpZgorCisvKiBjbGVhbiB1cCBhbnkgcGVyLWNoaXAgY2hpcC1zcGVjaWZpYyBzdHVmZiAqLwordm9pZCBpcGF0aF9jaGlwX2NsZWFudXAoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisvKiBjbGVhbiB1cCBhbnkgY2hpcCB0eXBlLXNwZWNpZmljIHN0dWZmICovCit2b2lkIGlwYXRoX2NoaXBfZG9uZSh2b2lkKTsKKworLyogY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgdG8gZm9yY2Ugb3JkZXJpbmcgZm9yIHdyaXRlIGNvbWJpbmluZyAqLworaW50IGlwYXRoX3Vub3JkZXJlZF93Yyh2b2lkKTsKKwordm9pZCBpcGF0aF9kaXNhcm1fcGlvYnVmcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1bnNpZ25lZCBmaXJzdCwKKwkJCSAgdW5zaWduZWQgY250KTsKKworaW50IGlwYXRoX2NyZWF0ZV9yY3ZoZHJxKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqKTsKK3ZvaWQgaXBhdGhfZnJlZV9wZGRhdGEoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyLCBpbnQpOworCitpbnQgaXBhdGhfcGFyc2VfdXNob3J0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgc2hvcnQgKnZhbHApOworCitpbnQgaXBhdGhfd2FpdF9saW5rc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyLCBpbnQpOwordm9pZCBpcGF0aF9zZXRfaWJfbHN0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGludCk7Cit2b2lkIGlwYXRoX2tyZWNlaXZlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworaW50IGlwYXRoX3NldHJjdmhkcnNpemUoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdW5zaWduZWQpOworaW50IGlwYXRoX3Jlc2V0X2RldmljZShpbnQpOwordm9pZCBpcGF0aF9nZXRfZmFzdHN0YXRzKHVuc2lnbmVkIGxvbmcpOworCisvKiBmb3IgdXNlIGluIHN5c3RlbSBjYWxscywgd2hlcmUgd2Ugd2FudCB0byBrbm93IGRldmljZSB0eXBlLCBldGMuICovCisjZGVmaW5lIHBvcnRfZnAoZnApICgoc3RydWN0IGlwYXRoX3BvcnRkYXRhICopIChmcCktPnByaXZhdGVfZGF0YSkKKworLyoKKyAqIHZhbHVlcyBmb3IgaXBhdGhfZmxhZ3MKKyAqLworLyogVGhlIGNoaXAgaXMgdXAgYW5kIGluaXR0ZWQgKi8KKyNkZWZpbmUgSVBBVEhfSU5JVFRFRCAgICAgICAweDIKKwkJLyogc2V0IGlmIGFueSB1c2VyIGNvZGUgaGFzIHNldCBrcl9yY3ZoZHJzaXplICovCisjZGVmaW5lIElQQVRIX1JDVkhEUlNaX1NFVCAgMHg0CisJCS8qIFRoZSBjaGlwIGlzIHByZXNlbnQgYW5kIHZhbGlkIGZvciBhY2Nlc3NlcyAqLworI2RlZmluZSBJUEFUSF9QUkVTRU5UICAgICAgIDB4OAorCQkvKiBIVCBsaW5rMCBpcyBvbmx5IDggYml0cyB3aWRlLCBpZ25vcmUgdXBwZXIgYnl0ZSBjcmMKKwkJICogZXJyb3JzLCBldGMuICovCisjZGVmaW5lIElQQVRIXzhCSVRfSU5fSFQwICAgMHgxMAorCQkvKiBIVCBsaW5rMSBpcyBvbmx5IDggYml0cyB3aWRlLCBpZ25vcmUgdXBwZXIgYnl0ZSBjcmMKKwkJICogZXJyb3JzLCBldGMuICovCisjZGVmaW5lIElQQVRIXzhCSVRfSU5fSFQxICAgMHgyMAorCQkvKiBUaGUgbGluayBpcyBkb3duICovCisjZGVmaW5lIElQQVRIX0xJTktET1dOICAgICAgMHg0MAorCQkvKiBUaGUgbGluayBsZXZlbCBpcyB1cCAoMHgxMSkgKi8KKyNkZWZpbmUgSVBBVEhfTElOS0lOSVQgICAgICAweDgwCisJCS8qIFRoZSBsaW5rIGlzIGluIHRoZSBhcm1lZCAoMHgyMSkgc3RhdGUgKi8KKyNkZWZpbmUgSVBBVEhfTElOS0FSTUVEICAgICAweDEwMAorCQkvKiBUaGUgbGluayBpcyBpbiB0aGUgYWN0aXZlICgweDMxKSBzdGF0ZSAqLworI2RlZmluZSBJUEFUSF9MSU5LQUNUSVZFICAgIDB4MjAwCisJCS8qIGxpbmsgY3VycmVudCBzdGF0ZSBpcyB1bmtub3duICovCisjZGVmaW5lIElQQVRIX0xJTktVTksgICAgICAgMHg0MDAKKwkJLyogbm8gSUIgY2FibGUsIG9yIG5vIGRldmljZSBvbiBJQiBjYWJsZSAqLworI2RlZmluZSBJUEFUSF9OT0NBQkxFICAgICAgIDB4NDAwMAorCQkvKiBTdXBwb3J0cyBwb3J0IHplcm8gcGVyIHBhY2tldCByZWNlaXZlIGludGVycnVwdHMgdmlhCisJCSAqIEdQSU8gKi8KKyNkZWZpbmUgSVBBVEhfR1BJT19JTlRSICAgICAweDgwMDAKKwkJLyogdXNlcyB0aGUgY29kZWQgNGJ5dGUgVElELCBub3QgOCBieXRlICovCisjZGVmaW5lIElQQVRIXzRCWVRFX1RJRCAgICAgMHgxMDAwMAorCQkvKiBwYWNrZXQvd29yZCBjb3VudGVycyBhcmUgMzIgYml0LCBlbHNlIHRob3NlIDQgY291bnRlcnMKKwkJICogYXJlIDY0Yml0ICovCisjZGVmaW5lIElQQVRIXzMyQklUQ09VTlRFUlMgMHgyMDAwMAorCQkvKiBjYW4gbWlzcyBwb3J0MCByeCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElQQVRIX1BPTExfUlhfSU5UUiAgMHg0MDAwMAorI2RlZmluZSBJUEFUSF9ESVNBQkxFRCAgICAgIDB4ODAwMDAgLyogYWRtaW5pc3RyYXRpdmVseSBkaXNhYmxlZCAqLworCisvKiBwb3J0ZGF0YSBmbGFnIGJpdCBvZmZzZXRzICovCisJCS8qIHdhaXRpbmcgZm9yIGEgcGFja2V0IHRvIGFycml2ZSAqLworI2RlZmluZSBJUEFUSF9QT1JUX1dBSVRJTkdfUkNWICAgMgorCQkvKiB3YWl0aW5nIGZvciBhIFBJTyBidWZmZXIgdG8gYmUgYXZhaWxhYmxlICovCisjZGVmaW5lIElQQVRIX1BPUlRfV0FJVElOR19QSU8gICAzCisKKy8qIGZyZWUgdXAgYW55IGFsbG9jYXRlZCBkYXRhIGF0IGNsb3NlcyAqLwordm9pZCBpcGF0aF9mcmVlX2RhdGEoc3RydWN0IGlwYXRoX3BvcnRkYXRhICpkZCk7CitpbnQgaXBhdGhfd2FpdGZvcl9tZGlvX2NtZHJlYWR5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworaW50IGlwYXRoX3dhaXRmb3JfY29tcGxldGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaXBhdGhfa3JlZywgdTY0LCB1NjQgKik7Cit1MzIgX19pb21lbSAqaXBhdGhfZ2V0cGlvYnVmKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiAqKTsKKy8qIGluaXQgUEUtODAwLXNwZWNpZmljIGZ1bmMgKi8KK3ZvaWQgaXBhdGhfaW5pdF9wZTgwMF9mdW5jcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKy8qIGluaXQgSFQtNDAwLXNwZWNpZmljIGZ1bmMgKi8KK3ZvaWQgaXBhdGhfaW5pdF9odDQwMF9mdW5jcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3ZvaWQgaXBhdGhfZ2V0X2VlcHJvbV9pbmZvKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordTY0IGlwYXRoX3NuYXBfY250cihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBpcGF0aF9jcmVnKTsKKworLyoKKyAqIG51bWJlciBvZiB3b3JkcyB1c2VkIGZvciBwcm90b2NvbCBoZWFkZXIgaWYgbm90IHNldCBieSBpcGF0aF91c2VyaW5pdCgpOworICovCisjZGVmaW5lIElQQVRIX0RGTFRfUkNWSERSU0laRSA5CisKKyNkZWZpbmUgSVBBVEhfTURJT19DTURfV1JJVEUgICAxCisjZGVmaW5lIElQQVRIX01ESU9fQ01EX1JFQUQgICAgMgorI2RlZmluZSBJUEFUSF9NRElPX0NMRF9ESVYgICAgIDI1CS8qIHRvIGdldCAyLjUgTWh6IG1kaW8gY2xvY2sgKi8KKyNkZWZpbmUgSVBBVEhfTURJT19DTURWQUxJRCAgICAweDQwMDAwMDAwCS8qIGJpdCAzMCAqLworI2RlZmluZSBJUEFUSF9NRElPX0RBVEFWQUxJRCAgIDB4ODAwMDAwMDAJLyogYml0IDMxICovCisjZGVmaW5lIElQQVRIX01ESU9fQ1RSTF9TVEQgICAgMHgwCisKK3N0YXRpYyBpbmxpbmUgdTY0IGlwYXRoX21kaW9fcmVxKGludCBjbWQsIGludCBkZXYsIGludCByZWcsIGludCBkYXRhKQoreworCXJldHVybiAoKCh1NjQpIElQQVRIX01ESU9fQ0xEX0RJVikgPDwgMzIpIHwKKwkJKGNtZCA8PCAyNikgfAorCQkoZGV2IDw8IDIxKSB8CisJCShyZWcgPDwgMTYpIHwKKwkJKGRhdGEgJiAweEZGRkYpOworfQorCisJCS8qIHNpZ25hbCBhbmQgZmlmbyBzdGF0dXMsIGluIGJhbmsgMzEgKi8KKyNkZWZpbmUgSVBBVEhfTURJT19DVFJMX1hHWFNfUkVHXzggIDB4OAorCQkvKiBjb250cm9scyBsb29wYmFjaywgcmVkdW5kYW5jeSAqLworI2RlZmluZSBJUEFUSF9NRElPX0NUUkxfODM1NV9SRUdfMSAgMHgxMAorCQkvKiBwcmVtcGgsIGVuY2RlYywgZXRjLiAqLworI2RlZmluZSBJUEFUSF9NRElPX0NUUkxfODM1NV9SRUdfMiAgMHgxMQorCQkvKiBLY2hhcnMsIGV0Yy4gKi8KKyNkZWZpbmUgSVBBVEhfTURJT19DVFJMXzgzNTVfUkVHXzYgIDB4MTUKKyNkZWZpbmUgSVBBVEhfTURJT19DVFJMXzgzNTVfUkVHXzkgIDB4MTgKKyNkZWZpbmUgSVBBVEhfTURJT19DVFJMXzgzNTVfUkVHXzEwIDB4MUQKKworaW50IGlwYXRoX2dldF91c2VyX3BhZ2VzKHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgc3RydWN0IHBhZ2UgKiopOworaW50IGlwYXRoX2dldF91c2VyX3BhZ2VzX25vY29weSh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcGFnZSAqKik7Cit2b2lkIGlwYXRoX3JlbGVhc2VfdXNlcl9wYWdlcyhzdHJ1Y3QgcGFnZSAqKiwgc2l6ZV90KTsKK3ZvaWQgaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzX29uX2Nsb3NlKHN0cnVjdCBwYWdlICoqLCBzaXplX3QpOworaW50IGlwYXRoX2VlcHJvbV9yZWFkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHU4LCB2b2lkICosIGludCk7CitpbnQgaXBhdGhfZWVwcm9tX3dyaXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHU4LCBjb25zdCB2b2lkICosIGludCk7CisKKy8qIHRoZXNlIGFyZSB1c2VkIGZvciB0aGUgcmVnaXN0ZXJzIHRoYXQgdmFyeSB3aXRoIHBvcnQgKi8KK3ZvaWQgaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGlwYXRoX2tyZWcsCisJCQkgICB1bnNpZ25lZCwgdTY0KTsKK3U2NCBpcGF0aF9yZWFkX2tyZWc2NF9wb3J0KGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGlwYXRoX2tyZWcsCisJCQkgICB1bnNpZ25lZCk7CisKKy8qCisgKiBXZSBjb3VsZCBoYXZlIGEgc2luZ2xlIHJlZ2lzdGVyIGdldC9wdXQgcm91dGluZSwgdGhhdCB0YWtlcyBhIGdyb3VwIHR5cGUsCisgKiBidXQgdGhpcyBpcyBzb21ld2hhdCBjbGVhcmVyIGFuZCBjbGVhbmVyLiAgSXQgYWxzbyBnaXZlcyB1cyBzb21lIGVycm9yCisgKiBjaGVja2luZy4gIDY0IGJpdCByZWdpc3RlciByZWFkcyBzaG91bGQgYWx3YXlzIHdvcmssIGJ1dCBhcmUgaW5lZmZpY2llbnQKKyAqIG9uIG9wdGVyb24gKHRoZSBub3J0aGJyaWRnZSBhbHdheXMgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgSFQgMzIgYml0IHJlYWRzKSwKKyAqIHNvIHdlIHVzZSBrcmVnMzIgd2hlcmV2ZXIgcG9zc2libGUuICBVc2VyIHJlZ2lzdGVyIGFuZCBjb3VudGVyIHJlZ2lzdGVyCisgKiByZWFkcyBhcmUgYWx3YXlzIDMyIGJpdCByZWFkcywgc28gb25seSBvbmUgZm9ybSBvZiB0aG9zZSByb3V0aW5lcy4KKyAqLworCisvKgorICogQXQgdGhlIG1vbWVudCwgbm9uZSBvZiB0aGUgcy1yZWdpc3RlcnMgYXJlIHdyaXRhYmxlLCBzbyBubworICogaXBhdGhfd3JpdGVfc3JlZygpLCBhbmQgbm9uZSBvZiB0aGUgYy1yZWdpc3RlcnMgYXJlIHdyaXRhYmxlLCBzbyBubworICogaXBhdGhfd3JpdGVfY3JlZygpLgorICovCisKKy8qKgorICogaXBhdGhfcmVhZF91cmVnMzIgLSByZWFkIDMyLWJpdCB2aXJ0dWFsaXplZCBwZXItcG9ydCByZWdpc3RlcgorICogQGRkOiBkZXZpY2UKKyAqIEByZWdubzogcmVnaXN0ZXIgbnVtYmVyCisgKiBAcG9ydDogcG9ydCBudW1iZXIKKyAqCisgKiBSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgdGhhdCBpcyB2aXJ0dWFsaXplZCB0byBiZSBwZXIgcG9ydC4KKyAqIFByaW50cyBhIGRlYnVnIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEgb24gZXJyb3JzIChub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20KKyAqIHZhbGlkIGNvbnRlbnRzIGF0IHJ1bnRpbWU7IHdlIG1heSBhZGQgYSBzZXBhcmF0ZSBlcnJvciB2YXJpYWJsZSBhdCBzb21lCisgKiBwb2ludCkuCisgKgorICogVGhpcyBpcyBub3JtYWxseSBub3QgdXNlZCBieSB0aGUga2VybmVsLCBidXQgbWF5IGJlIGZvciBkZWJ1Z2dpbmcsIGFuZAorICogaGFzIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIHRoYW4gdXNlciBtb2RlLCB3aGljaCBpcyB3aHkgaXQncyBub3QgaW4KKyAqIF9jb21tb24uaC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgaXBhdGhfcmVhZF91cmVnMzIoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICBpcGF0aF91cmVnIHJlZ25vLCBpbnQgcG9ydCkKK3sKKwlpZiAoIWRkLT5pcGF0aF9rcmVnYmFzZSB8fCAhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZWFkbChyZWdubyArICh1NjQgX19pb21lbSAqKQorCQkgICAgIChkZC0+aXBhdGhfdXJlZ2Jhc2UgKworCQkgICAgICAoY2hhciBfX2lvbWVtICopZGQtPmlwYXRoX2tyZWdiYXNlICsKKwkJICAgICAgZGQtPmlwYXRoX3BhbGlnbiAqIHBvcnQpKTsKK30KKworLyoqCisgKiBpcGF0aF93cml0ZV91cmVnIC0gd3JpdGUgMzItYml0IHZpcnR1YWxpemVkIHBlci1wb3J0IHJlZ2lzdGVyCisgKiBAZGQ6IGRldmljZQorICogQHJlZ25vOiByZWdpc3RlciBudW1iZXIKKyAqIEB2YWx1ZTogdmFsdWUKKyAqIEBwb3J0OiBwb3J0CisgKgorICogV3JpdGUgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgdGhhdCBpcyB2aXJ0dWFsaXplZCB0byBiZSBwZXIgcG9ydC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlwYXRoX3dyaXRlX3VyZWcoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICBpcGF0aF91cmVnIHJlZ25vLCB1NjQgdmFsdWUsIGludCBwb3J0KQoreworCXU2NCBfX2lvbWVtICp1YmFzZSA9ICh1NjQgX19pb21lbSAqKQorCQkoZGQtPmlwYXRoX3VyZWdiYXNlICsgKGNoYXIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UgKworCQkgZGQtPmlwYXRoX3BhbGlnbiAqIHBvcnQpOworCWlmIChkZC0+aXBhdGhfa3JlZ2Jhc2UpCisJCXdyaXRlcSh2YWx1ZSwgJnViYXNlW3JlZ25vXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGlwYXRoX3JlYWRfa3JlZzMyKGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgICAgaXBhdGhfa3JlZyByZWdubykKK3sKKwlpZiAoIWRkLT5pcGF0aF9rcmVnYmFzZSB8fCAhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJlYWRsKCh1MzIgX19pb21lbSAqKSAmIGRkLT5pcGF0aF9rcmVnYmFzZVtyZWdub10pOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBpcGF0aF9yZWFkX2tyZWc2NChjb25zdCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICAgIGlwYXRoX2tyZWcgcmVnbm8pCit7CisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHJlYWRxKCZkZC0+aXBhdGhfa3JlZ2Jhc2VbcmVnbm9dKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwYXRoX3dyaXRlX2tyZWcoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICBpcGF0aF9rcmVnIHJlZ25vLCB1NjQgdmFsdWUpCit7CisJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJd3JpdGVxKHZhbHVlLCAmZGQtPmlwYXRoX2tyZWdiYXNlW3JlZ25vXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGlwYXRoX3JlYWRfY3JlZyhjb25zdCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICBpcGF0aF9zcmVnIHJlZ25vKQoreworCWlmICghZGQtPmlwYXRoX2tyZWdiYXNlIHx8ICEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfUFJFU0VOVCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHJlYWRxKHJlZ25vICsgKHU2NCBfX2lvbWVtICopCisJCSAgICAgKGRkLT5pcGF0aF9jcmVnYmFzZSArCisJCSAgICAgIChjaGFyIF9faW9tZW0gKilkZC0+aXBhdGhfa3JlZ2Jhc2UpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaXBhdGhfcmVhZF9jcmVnMzIoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCQkgaXBhdGhfc3JlZyByZWdubykKK3sKKwlpZiAoIWRkLT5pcGF0aF9rcmVnYmFzZSB8fCAhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVhZGwocmVnbm8gKyAodTY0IF9faW9tZW0gKikKKwkJICAgICAoZGQtPmlwYXRoX2NyZWdiYXNlICsKKwkJICAgICAgKGNoYXIgX19pb21lbSAqKWRkLT5pcGF0aF9rcmVnYmFzZSkpOworfQorCisvKgorICogc3lzZnMgaW50ZXJmYWNlLgorICovCisKK3N0cnVjdCBkZXZpY2VfZHJpdmVyOworCitleHRlcm4gY29uc3QgY2hhciBpcGF0aF9jb3JlX3ZlcnNpb25bXTsKKworaW50IGlwYXRoX2RyaXZlcl9jcmVhdGVfZ3JvdXAoc3RydWN0IGRldmljZV9kcml2ZXIgKik7Cit2b2lkIGlwYXRoX2RyaXZlcl9yZW1vdmVfZ3JvdXAoc3RydWN0IGRldmljZV9kcml2ZXIgKik7CisKK2ludCBpcGF0aF9kZXZpY2VfY3JlYXRlX2dyb3VwKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Cit2b2lkIGlwYXRoX2RldmljZV9yZW1vdmVfZ3JvdXAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK2ludCBpcGF0aF9leHBvc2VfcmVzZXQoc3RydWN0IGRldmljZSAqKTsKKworaW50IGlwYXRoX2luaXRfaXBhdGhmcyh2b2lkKTsKK3ZvaWQgaXBhdGhfZXhpdF9pcGF0aGZzKHZvaWQpOworaW50IGlwYXRoZnNfYWRkX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK2ludCBpcGF0aGZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisKKy8qCisgKiBGbHVzaCB3cml0ZSBjb21iaW5pbmcgc3RvcmUgYnVmZmVycyAoaWYgcHJlc2VudCkgYW5kIHBlcmZvcm0gYSB3cml0ZQorICogYmFycmllci4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKyNkZWZpbmUgaXBhdGhfZmx1c2hfd2MoKSBhc20gdm9sYXRpbGUoInNmZW5jZSIgOjo6ICJtZW1vcnkiKQorI2Vsc2UKKyNkZWZpbmUgaXBhdGhfZmx1c2hfd2MoKSB3bWIoKQorI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBpcGF0aF9kZWJ1ZzsgLyogZGVidWdnaW5nIGJpdCBtYXNrICovCisKK2NvbnN0IGNoYXIgKmlwYXRoX2dldF91bml0X25hbWUoaW50IHVuaXQpOworCitleHRlcm4gc3RydWN0IG11dGV4IGlwYXRoX211dGV4OworCisjZGVmaW5lIElQQVRIX0RSVl9OQU1FCQkiaXBhdGhfY29yZSIKKyNkZWZpbmUgSVBBVEhfTUFKT1IJCTIzMworI2RlZmluZSBJUEFUSF9TTUFfTUlOT1IJCTEyOAorI2RlZmluZSBJUEFUSF9ESUFHX01JTk9SCTEyOQorI2RlZmluZSBJUEFUSF9OTUlOT1JTCQkxMzAKKworI2RlZmluZSBpcGF0aF9kZXZfZXJyKGRkLGZtdCwuLi4pIFwKKwlkbyB7IFwKKwkJY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKl9fZGQgPSAoZGQpOyBcCisJCWlmIChfX2RkLT5wY2lkZXYpIFwKKwkJCWRldl9lcnIoJl9fZGQtPnBjaWRldi0+ZGV2LCAiJXM6ICIgZm10LCBcCisJCQkJaXBhdGhfZ2V0X3VuaXRfbmFtZShfX2RkLT5pcGF0aF91bml0KSwgXAorCQkJCSMjX19WQV9BUkdTX18pOyBcCisJCWVsc2UgXAorCQkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FICI6ICVzOiAiIGZtdCwgXAorCQkJICAgICAgIGlwYXRoX2dldF91bml0X25hbWUoX19kZC0+aXBhdGhfdW5pdCksIFwKKwkJCSAgICAgICAjI19fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUgKDApCisKKyNpZiBfSVBBVEhfREVCVUdHSU5HCisKKyMgZGVmaW5lIF9fSVBBVEhfREJHX1dISUNIKHdoaWNoLGZtdCwuLi4pIFwKKwlkbyB7IFwKKwkJaWYodW5saWtlbHkoaXBhdGhfZGVidWcmKHdoaWNoKSkpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIElQQVRIX0RSVl9OQU1FICI6ICVzOiAiIGZtdCwgXAorCQkJICAgICAgIF9fZnVuY19fLCMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSgwKQorCisjIGRlZmluZSBpcGF0aF9kYmcoZm10LC4uLikgXAorCV9fSVBBVEhfREJHX1dISUNIKF9fSVBBVEhfREJHLGZtdCwjI19fVkFfQVJHU19fKQorIyBkZWZpbmUgaXBhdGhfY2RiZyh3aGljaCxmbXQsLi4uKSBcCisJX19JUEFUSF9EQkdfV0hJQ0goX19JUEFUSF8jI3doaWNoIyNEQkcsZm10LCMjX19WQV9BUkdTX18pCisKKyNlbHNlIC8qICEgX0lQQVRIX0RFQlVHR0lORyAqLworCisjIGRlZmluZSBpcGF0aF9kYmcoZm10LC4uLikKKyMgZGVmaW5lIGlwYXRoX2NkYmcod2hpY2gsZm10LC4uLikKKworI2VuZGlmIC8qIF9JUEFUSF9ERUJVR0dJTkcgKi8KKworI2VuZGlmCQkJCS8qIF9JUEFUSF9LRVJORUxfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tleXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlODc2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXlzLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorCisvKioKKyAqIGlwYXRoX2FsbG9jX2xrZXkgLSBhbGxvY2F0ZSBhbiBsa2V5CisgKiBAcmt0OiBsa2V5IHRhYmxlIGluIHdoaWNoIHRvIGFsbG9jYXRlIHRoZSBsa2V5CisgKiBAbXI6IG1lbW9yeSByZWdpb24gdGhhdCB0aGlzIGxrZXkgcHJvdGVjdHMKKyAqCisgKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIHJldHVybnMgMC4KKyAqLworCitpbnQgaXBhdGhfYWxsb2NfbGtleShzdHJ1Y3QgaXBhdGhfbGtleV90YWJsZSAqcmt0LCBzdHJ1Y3QgaXBhdGhfbXJlZ2lvbiAqbXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcjsKKwl1MzIgbjsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJrdC0+bG9jaywgZmxhZ3MpOworCisJLyogRmluZCB0aGUgbmV4dCBhdmFpbGFibGUgTEtFWSAqLworCXIgPSBuID0gcmt0LT5uZXh0OworCWZvciAoOzspIHsKKwkJaWYgKHJrdC0+dGFibGVbcl0gPT0gTlVMTCkKKwkJCWJyZWFrOworCQlyID0gKHIgKyAxKSAmIChya3QtPm1heCAtIDEpOworCQlpZiAociA9PSBuKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZya3QtPmxvY2ssIGZsYWdzKTsKKwkJCV9WRVJCU19JTkZPKCJMS0VZIHRhYmxlIGZ1bGxcbiIpOworCQkJcmV0ID0gMDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlya3QtPm5leHQgPSAociArIDEpICYgKHJrdC0+bWF4IC0gMSk7CisJLyoKKwkgKiBNYWtlIHN1cmUgbGtleSBpcyBuZXZlciB6ZXJvIHdoaWNoIGlzIHJlc2VydmVkIHRvIGluZGljYXRlIGFuCisJICogdW5yZXN0cmljdGVkIExLRVkuCisJICovCisJcmt0LT5nZW4rKzsKKwltci0+bGtleSA9IChyIDw8ICgzMiAtIGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZSkpIHwKKwkJKCgoKDEgPDwgKDI0IC0gaWJfaXBhdGhfbGtleV90YWJsZV9zaXplKSkgLSAxKSAmIHJrdC0+Z2VuKQorCQkgPDwgOCk7CisJaWYgKG1yLT5sa2V5ID09IDApIHsKKwkJbXItPmxrZXkgfD0gMSA8PCA4OworCQlya3QtPmdlbisrOworCX0KKwlya3QtPnRhYmxlW3JdID0gbXI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmt0LT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSAxOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfZnJlZV9sa2V5IC0gZnJlZSBhbiBsa2V5CisgKiBAcmt0OiB0YWJsZSBmcm9tIHdoaWNoIHRvIGZyZWUgdGhlIGxrZXkKKyAqIEBsa2V5OiBsa2V5IGlkIHRvIGZyZWUKKyAqLwordm9pZCBpcGF0aF9mcmVlX2xrZXkoc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCwgdTMyIGxrZXkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcjsKKworCWlmIChsa2V5ID09IDApCisJCXJldHVybjsKKwlyID0gbGtleSA+PiAoMzIgLSBpYl9pcGF0aF9sa2V5X3RhYmxlX3NpemUpOworCXNwaW5fbG9ja19pcnFzYXZlKCZya3QtPmxvY2ssIGZsYWdzKTsKKwlya3QtPnRhYmxlW3JdID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZya3QtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBpcGF0aF9sa2V5X29rIC0gY2hlY2sgSUIgU0dFIGZvciB2YWxpZGl0eSBhbmQgaW5pdGlhbGl6ZQorICogQHJrdDogdGFibGUgY29udGFpbmluZyBsa2V5IHRvIGNoZWNrIFNHRSBhZ2FpbnN0CisgKiBAaXNnZTogb3V0Z29pbmcgaW50ZXJuYWwgU0dFCisgKiBAc2dlOiBTR0UgdG8gY2hlY2sKKyAqIEBhY2M6IGFjY2VzcyBmbGFncworICoKKyAqIFJldHVybiAxIGlmIHZhbGlkIGFuZCBzdWNjZXNzZnVsLCBvdGhlcndpc2UgcmV0dXJucyAwLgorICoKKyAqIENoZWNrIHRoZSBJQiBTR0UgZm9yIHZhbGlkaXR5IGFuZCBpbml0aWFsaXplIG91ciBpbnRlcm5hbCB2ZXJzaW9uCisgKiBvZiBpdC4KKyAqLworaW50IGlwYXRoX2xrZXlfb2soc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCwgc3RydWN0IGlwYXRoX3NnZSAqaXNnZSwKKwkJICBzdHJ1Y3QgaWJfc2dlICpzZ2UsIGludCBhY2MpCit7CisJc3RydWN0IGlwYXRoX21yZWdpb24gKm1yOworCXNpemVfdCBvZmY7CisJaW50IHJldDsKKworCS8qCisJICogV2UgdXNlIExLRVkgPT0gemVybyB0byBtZWFuIGEgcGh5c2ljYWwga21hbGxvYygpIGFkZHJlc3MuCisJICogVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgc2luY2Ugd2UgcmVseSBvbiBkbWFfbWFwX3NpbmdsZSgpCisJICogYmVpbmcgcmV2ZXJzaWJsZSBieSBjYWxsaW5nIGJ1c190b192aXJ0KCkuCisJICovCisJaWYgKHNnZS0+bGtleSA9PSAwKSB7CisJCWlzZ2UtPm1yID0gTlVMTDsKKwkJaXNnZS0+dmFkZHIgPSBidXNfdG9fdmlydChzZ2UtPmFkZHIpOworCQlpc2dlLT5sZW5ndGggPSBzZ2UtPmxlbmd0aDsKKwkJaXNnZS0+c2dlX2xlbmd0aCA9IHNnZS0+bGVuZ3RoOworCQlyZXQgPSAxOworCQlnb3RvIGJhaWw7CisJfQorCW1yID0gcmt0LT50YWJsZVsoc2dlLT5sa2V5ID4+ICgzMiAtIGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZSkpXTsKKwlpZiAodW5saWtlbHkobXIgPT0gTlVMTCB8fCBtci0+bGtleSAhPSBzZ2UtPmxrZXkpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlvZmYgPSBzZ2UtPmFkZHIgLSBtci0+dXNlcl9iYXNlOworCWlmICh1bmxpa2VseShzZ2UtPmFkZHIgPCBtci0+dXNlcl9iYXNlIHx8CisJCSAgICAgb2ZmICsgc2dlLT5sZW5ndGggPiBtci0+bGVuZ3RoIHx8CisJCSAgICAgKG1yLT5hY2Nlc3NfZmxhZ3MgJiBhY2MpICE9IGFjYykpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCX0KKworCW9mZiArPSBtci0+b2Zmc2V0OworCWlzZ2UtPm1yID0gbXI7CisJaXNnZS0+bSA9IDA7CisJaXNnZS0+biA9IDA7CisJd2hpbGUgKG9mZiA+PSBtci0+bWFwW2lzZ2UtPm1dLT5zZWdzW2lzZ2UtPm5dLmxlbmd0aCkgeworCQlvZmYgLT0gbXItPm1hcFtpc2dlLT5tXS0+c2Vnc1tpc2dlLT5uXS5sZW5ndGg7CisJCWlzZ2UtPm4rKzsKKwkJaWYgKGlzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCWlzZ2UtPm0rKzsKKwkJCWlzZ2UtPm4gPSAwOworCQl9CisJfQorCWlzZ2UtPnZhZGRyID0gbXItPm1hcFtpc2dlLT5tXS0+c2Vnc1tpc2dlLT5uXS52YWRkciArIG9mZjsKKwlpc2dlLT5sZW5ndGggPSBtci0+bWFwW2lzZ2UtPm1dLT5zZWdzW2lzZ2UtPm5dLmxlbmd0aCAtIG9mZjsKKwlpc2dlLT5zZ2VfbGVuZ3RoID0gc2dlLT5sZW5ndGg7CisKKwlyZXQgPSAxOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcmtleV9vayAtIGNoZWNrIHRoZSBJQiB2aXJ0dWFsIGFkZHJlc3MsIGxlbmd0aCwgYW5kIFJLRVkKKyAqIEBkZXY6IGluZmluaWJhbmQgZGV2aWNlCisgKiBAc3M6IFNHRSBzdGF0ZQorICogQGxlbjogbGVuZ3RoIG9mIGRhdGEKKyAqIEB2YWRkcjogdmlydHVhbCBhZGRyZXNzIHRvIHBsYWNlIGRhdGEKKyAqIEBya2V5OiBya2V5IHRvIGNoZWNrCisgKiBAYWNjOiBhY2Nlc3MgZmxhZ3MKKyAqCisgKiBSZXR1cm4gMSBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgMC4KKyAqLworaW50IGlwYXRoX3JrZXlfb2soc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLAorCQkgIHUzMiBsZW4sIHU2NCB2YWRkciwgdTMyIHJrZXksIGludCBhY2MpCit7CisJc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCA9ICZkZXYtPmxrX3RhYmxlOworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZSA9ICZzcy0+c2dlOworCXN0cnVjdCBpcGF0aF9tcmVnaW9uICptcjsKKwlzaXplX3Qgb2ZmOworCWludCByZXQ7CisKKwltciA9IHJrdC0+dGFibGVbKHJrZXkgPj4gKDMyIC0gaWJfaXBhdGhfbGtleV90YWJsZV9zaXplKSldOworCWlmICh1bmxpa2VseShtciA9PSBOVUxMIHx8IG1yLT5sa2V5ICE9IHJrZXkpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlvZmYgPSB2YWRkciAtIG1yLT5pb3ZhOworCWlmICh1bmxpa2VseSh2YWRkciA8IG1yLT5pb3ZhIHx8IG9mZiArIGxlbiA+IG1yLT5sZW5ndGggfHwKKwkJICAgICAobXItPmFjY2Vzc19mbGFncyAmIGFjYykgPT0gMCkpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCX0KKworCW9mZiArPSBtci0+b2Zmc2V0OworCXNnZS0+bXIgPSBtcjsKKwlzZ2UtPm0gPSAwOworCXNnZS0+biA9IDA7CisJd2hpbGUgKG9mZiA+PSBtci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS5sZW5ndGgpIHsKKwkJb2ZmIC09IG1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLmxlbmd0aDsKKwkJc2dlLT5uKys7CisJCWlmIChzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCXNnZS0+bSsrOworCQkJc2dlLT5uID0gMDsKKwkJfQorCX0KKwlzZ2UtPnZhZGRyID0gbXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0udmFkZHIgKyBvZmY7CisJc2dlLT5sZW5ndGggPSBtci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS5sZW5ndGggLSBvZmY7CisJc2dlLT5zZ2VfbGVuZ3RoID0gbGVuOworCXNzLT5zZ19saXN0ID0gTlVMTDsKKwlzcy0+bnVtX3NnZSA9IDE7CisKKwlyZXQgPSAxOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9sYXllci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzRhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuYwpAQCAtMCwwICsxLDE1MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogVGhlc2UgYXJlIHRoZSByb3V0aW5lcyB1c2VkIGJ5IGxheWVyZWQgZHJpdmVycywgY3VycmVudGx5IGp1c3QgdGhlCisgKiBsYXllcmVkIGV0aGVybmV0IGRyaXZlciBhbmQgdmVyYnMgbGF5ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2xheWVyLmgiCisKKy8qIEFjcXVpcmUgYmVmb3JlIGlwYXRoX2RldnNfbG9jay4gKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoaXBhdGhfbGF5ZXJfbXV0ZXgpOworCitzdGF0aWMgaW50IGlwYXRoX3ZlcmJzX3JlZ2lzdGVyZWQ7CisKK3UxNiBpcGF0aF9sYXllcl9yY3Zfb3Bjb2RlOworCitzdGF0aWMgaW50ICgqbGF5ZXJfaW50cikodm9pZCAqLCB1MzIpOworc3RhdGljIGludCAoKmxheWVyX3Jjdikodm9pZCAqLCB2b2lkICosIHN0cnVjdCBza19idWZmICopOworc3RhdGljIGludCAoKmxheWVyX3Jjdl9saWQpKHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyBpbnQgKCp2ZXJic19waW9idWZhdmFpbCkodm9pZCAqKTsKK3N0YXRpYyB2b2lkICgqdmVyYnNfcmN2KSh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCB1MzIpOworCitzdGF0aWMgdm9pZCAqKCpsYXllcl9hZGRfb25lKShpbnQsIHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworc3RhdGljIHZvaWQgKCpsYXllcl9yZW1vdmVfb25lKSh2b2lkICopOworc3RhdGljIHZvaWQgKigqdmVyYnNfYWRkX29uZSkoaW50LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3N0YXRpYyB2b2lkICgqdmVyYnNfcmVtb3ZlX29uZSkodm9pZCAqKTsKK3N0YXRpYyB2b2lkICgqdmVyYnNfdGltZXJfY2IpKHZvaWQgKik7CisKK2ludCBfX2lwYXRoX2xheWVyX2ludHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgYXJnKQoreworCWludCByZXQgPSAtRU5PREVWOworCisJaWYgKGRkLT5pcGF0aF9sYXllci5sX2FyZyAmJiBsYXllcl9pbnRyKQorCQlyZXQgPSBsYXllcl9pbnRyKGRkLT5pcGF0aF9sYXllci5sX2FyZywgYXJnKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aF9sYXllcl9pbnRyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGFyZykKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJcmV0ID0gX19pcGF0aF9sYXllcl9pbnRyKGRkLCBhcmcpOworCisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19pcGF0aF9sYXllcl9yY3Yoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB2b2lkICpoZHIsCisJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHJldCA9IC1FTk9ERVY7CisKKwlpZiAoZGQtPmlwYXRoX2xheWVyLmxfYXJnICYmIGxheWVyX3JjdikKKwkJcmV0ID0gbGF5ZXJfcmN2KGRkLT5pcGF0aF9sYXllci5sX2FyZywgaGRyLCBza2IpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faXBhdGhfbGF5ZXJfcmN2X2xpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHZvaWQgKmhkcikKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCWlmIChkZC0+aXBhdGhfbGF5ZXIubF9hcmcgJiYgbGF5ZXJfcmN2X2xpZCkKKwkJcmV0ID0gbGF5ZXJfcmN2X2xpZChkZC0+aXBhdGhfbGF5ZXIubF9hcmcsIGhkcik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19pcGF0aF92ZXJic19waW9idWZhdmFpbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldCA9IC1FTk9ERVY7CisKKwlpZiAoZGQtPnZlcmJzX2xheWVyLmxfYXJnICYmIHZlcmJzX3Bpb2J1ZmF2YWlsKQorCQlyZXQgPSB2ZXJic19waW9idWZhdmFpbChkZC0+dmVyYnNfbGF5ZXIubF9hcmcpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faXBhdGhfdmVyYnNfcmN2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdm9pZCAqcmMsIHZvaWQgKmVidWYsCisJCSAgICAgIHUzMiB0bGVuKQoreworCWludCByZXQgPSAtRU5PREVWOworCisJaWYgKGRkLT52ZXJic19sYXllci5sX2FyZyAmJiB2ZXJic19yY3YpIHsKKwkJdmVyYnNfcmN2KGRkLT52ZXJic19sYXllci5sX2FyZywgcmMsIGVidWYsIHRsZW4pOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggbmV3c3RhdGUpCit7CisJdTMyIGxzdGF0ZTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChuZXdzdGF0ZSkgeworCWNhc2UgSVBBVEhfSUJfTElOS0RPV046CisJCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9QT0xMIDw8CisJCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TSElGVCk7CisJCS8qIGRvbid0IHdhaXQgKi8KKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCisJY2FzZSBJUEFUSF9JQl9MSU5LRE9XTl9TTEVFUDoKKwkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NMRUVQIDw8CisJCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TSElGVCk7CisJCS8qIGRvbid0IHdhaXQgKi8KKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCisJY2FzZSBJUEFUSF9JQl9MSU5LRE9XTl9ESVNBQkxFOgorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSA8PAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOworCQkvKiBkb24ndCB3YWl0ICovCisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKworCWNhc2UgSVBBVEhfSUJfTElOS0lOSVQ6CisJCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LSU5JVCkgeworCQkJcmV0ID0gMDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9JTklUIDw8CisJCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX1NISUZUKTsKKwkJbHN0YXRlID0gSVBBVEhfTElOS0lOSVQ7CisJCWJyZWFrOworCisJY2FzZSBJUEFUSF9JQl9MSU5LQVJNOgorCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FSTUVEKSB7CisJCQlyZXQgPSAwOworCQkJZ290byBiYWlsOworCQl9CisJCWlmICghKGRkLT5pcGF0aF9mbGFncyAmCisJCSAgICAgIChJUEFUSF9MSU5LSU5JVCB8IElQQVRIX0xJTktBQ1RJVkUpKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9BUk1FRCA8PAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9TSElGVCk7CisJCS8qCisJCSAqIFNpbmNlIHRoZSBwb3J0IGNhbiB0cmFuc2l0aW9uIHRvIEFDVElWRSBieSByZWNlaXZpbmcKKwkJICogYSBub24gVkwgMTUgcGFja2V0LCB3YWl0IGZvciBlaXRoZXIgc3RhdGUuCisJCSAqLworCQlsc3RhdGUgPSBJUEFUSF9MSU5LQVJNRUQgfCBJUEFUSF9MSU5LQUNUSVZFOworCQlicmVhazsKKworCWNhc2UgSVBBVEhfSUJfTElOS0FDVElWRToKKwkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpIHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FSTUVEKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9BQ1RJVkUgPDwKKwkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfU0hJRlQpOworCQlsc3RhdGUgPSBJUEFUSF9MSU5LQUNUSVZFOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWlwYXRoX2RiZygiSW52YWxpZCBsaW5rc3RhdGUgMHgleCByZXF1ZXN0ZWRcbiIsIG5ld3N0YXRlKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwlyZXQgPSBpcGF0aF93YWl0X2xpbmtzdGF0ZShkZCwgbHN0YXRlLCAyMDAwKTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlKTsKKworLyoqCisgKiBpcGF0aF9sYXllcl9zZXRfbXR1IC0gc2V0IHRoZSBNVFUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAYXJnOiB0aGUgbmV3IE1UVQorICoKKyAqIHdlIGNhbiBoYW5kbGUgImFueSIgaW5jb21pbmcgc2l6ZSwgdGhlIGlzc3VlIGhlcmUgaXMgd2hldGhlciB3ZQorICogbmVlZCB0byByZXN0cmljdCBvdXIgb3V0Z29pbmcgc2l6ZS4gICBGb3Igbm93LCB3ZSBkb24ndCBkbyBhbnkKKyAqIHNhbml0eSBjaGVja2luZyBvbiB0aGlzLCBhbmQgd2UgZG9uJ3QgZGVhbCB3aXRoIHdoYXQgaGFwcGVucyB0bworICogcHJvZ3JhbXMgdGhhdCBhcmUgYWxyZWFkeSBydW5uaW5nIHdoZW4gdGhlIHNpemUgY2hhbmdlcy4KKyAqIE5PVEU6IGNoYW5naW5nIHRoZSBNVFUgd2lsbCB1c3VhbGx5IGNhdXNlIHRoZSBJQkMgdG8gZ28gYmFjayB0bworICogbGluayBpbml0aWFsaXplIChJUEFUSF9JQlNUQVRFX0lOSVQpIHN0YXRlLi4uCisgKi8KK2ludCBpcGF0aF9sYXllcl9zZXRfbXR1KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2IGFyZykKK3sKKwl1MzIgcGlvc2l6ZTsKKwlpbnQgY2hhbmdlZCA9IDA7CisJaW50IHJldDsKKworCS8qCisJICogbXR1IGlzIElCIGRhdGEgcGF5bG9hZCBtYXguICBJdCdzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIDIgbGVzcworCSAqIHRoYW4gcGlvc2l6ZSAob3IgZXZlbiBsYXJnZXIsIHNpbmNlIGl0IG9ubHkgcmVhbGx5IGNvbnRyb2xzIHRoZQorCSAqIGxhcmdlc3Qgd2UgY2FuIHJlY2VpdmU7IHdlIGNhbiBzZW5kIHRoZSBtYXggb2YgdGhlIG10dSBhbmQKKwkgKiBwaW9zaXplKS4gIFdlIGNoZWNrIHRoYXQgaXQncyBvbmUgb2YgdGhlIHZhbGlkIElCIHNpemVzLgorCSAqLworCWlmIChhcmcgIT0gMjU2ICYmIGFyZyAhPSA1MTIgJiYgYXJnICE9IDEwMjQgJiYgYXJnICE9IDIwNDggJiYKKwkgICAgYXJnICE9IDQwOTYpIHsKKwkJaXBhdGhfZGJnKCJUcnlpbmcgdG8gc2V0IGludmFsaWQgbXR1ICV1LCBmYWlsaW5nXG4iLCBhcmcpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCWlmIChkZC0+aXBhdGhfaWJtdHUgPT0gYXJnKSB7CisJCXJldCA9IDA7CS8qIHNhbWUgYXMgY3VycmVudCAqLworCQlnb3RvIGJhaWw7CisJfQorCisJcGlvc2l6ZSA9IGRkLT5pcGF0aF9pYm1heGxlbjsKKwlkZC0+aXBhdGhfaWJtdHUgPSBhcmc7CisKKwlpZiAoYXJnID49IChwaW9zaXplIC0gSVBBVEhfUElPX01BWElCSERSKSkgeworCQkvKiBPbmx5IGlmIGl0J3Mgbm90IHRoZSBpbml0aWFsIHZhbHVlIChvciByZXNldCB0byBpdCkgKi8KKwkJaWYgKHBpb3NpemUgIT0gZGQtPmlwYXRoX2luaXRfaWJtYXhsZW4pIHsKKwkJCWRkLT5pcGF0aF9pYm1heGxlbiA9IHBpb3NpemU7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCX0gZWxzZSBpZiAoKGFyZyArIElQQVRIX1BJT19NQVhJQkhEUikgIT0gZGQtPmlwYXRoX2libWF4bGVuKSB7CisJCXBpb3NpemUgPSBhcmcgKyBJUEFUSF9QSU9fTUFYSUJIRFI7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImlibWF4bGVuIHdhcyAweCV4LCBzZXR0aW5nIHRvIDB4JXggIgorCQkJICAgIihtdHUgMHgleClcbiIsIGRkLT5pcGF0aF9pYm1heGxlbiwgcGlvc2l6ZSwKKwkJCSAgIGFyZyk7CisJCWRkLT5pcGF0aF9pYm1heGxlbiA9IHBpb3NpemU7CisJCWNoYW5nZWQgPSAxOworCX0KKworCWlmIChjaGFuZ2VkKSB7CisJCS8qCisJCSAqIHNldCB0aGUgSUJDIG1heHBrdGxlbmd0aCB0byB0aGUgc2l6ZSBvZiBvdXIgcGlvCisJCSAqIGJ1ZmZlcnMgaW4gd29yZHMKKwkJICovCisJCXU2NCBpYmMgPSBkZC0+aXBhdGhfaWJjY3RybDsKKwkJaWJjICY9IH4oSU5GSU5JUEFUSF9JQkNDX01BWFBLVExFTl9NQVNLIDw8CisJCQkgSU5GSU5JUEFUSF9JQkNDX01BWFBLVExFTl9TSElGVCk7CisKKwkJcGlvc2l6ZSA9IHBpb3NpemUgLSAyICogc2l6ZW9mKHUzMik7CS8qIGlnbm9yZSBwYmMgKi8KKwkJZGQtPmlwYXRoX2libWF4bGVuID0gcGlvc2l6ZTsKKwkJcGlvc2l6ZSAvPSBzaXplb2YodTMyKTsJLyogaW4gd29yZHMgKi8KKwkJLyoKKwkJICogZm9yIElDUkMsIHdoaWNoIHdlIG9ubHkgc2VuZCBpbiBkaWFnIHRlc3QgcGt0IG1vZGUsIGFuZAorCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQgZm9yIG10dQorCQkgKi8KKwkJcGlvc2l6ZSArPSAxOworCisJCWliYyB8PSBwaW9zaXplIDw8IElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fU0hJRlQ7CisJCWRkLT5pcGF0aF9pYmNjdHJsID0gaWJjOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCisJCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKwkJZGQtPmlwYXRoX2ZfdGlkdGVtcGxhdGUoZGQpOworCX0KKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X210dSk7CisKK2ludCBpcGF0aF9zZXRfc3BzX2xpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBhcmcsIHU4IGxtYykKK3sKKwlpcGF0aF9zdGF0cy5zcHNfbGlkW2RkLT5pcGF0aF91bml0XSA9IGFyZzsKKwlkZC0+aXBhdGhfbGlkID0gYXJnOworCWRkLT5pcGF0aF9sbWMgPSBsbWM7CisKKwltdXRleF9sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CisKKwlpZiAoZGQtPmlwYXRoX2xheWVyLmxfYXJnICYmIGxheWVyX2ludHIpCisJCWxheWVyX2ludHIoZGQtPmlwYXRoX2xheWVyLmxfYXJnLCBJUEFUSF9MQVlFUl9JTlRfTElEKTsKKworCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX3NldF9zcHNfbGlkKTsKKworaW50IGlwYXRoX2xheWVyX3NldF9ndWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgX19iZTY0IGd1aWQpCit7CisJLyogWFhYIC0gbmVlZCB0byBpbmZvcm0gYW55b25lIHdobyBjYXJlcyB0aGlzIGp1c3QgaGFwcGVuZWQuICovCisJZGQtPmlwYXRoX2d1aWQgPSBndWlkOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZXRfZ3VpZCk7CisKK19fYmU2NCBpcGF0aF9sYXllcl9nZXRfZ3VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGRkLT5pcGF0aF9ndWlkOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfZ3VpZCk7CisKK3UzMiBpcGF0aF9sYXllcl9nZXRfbmd1aWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBkZC0+aXBhdGhfbmd1aWQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9uZ3VpZCk7CisKK2ludCBpcGF0aF9sYXllcl9xdWVyeV9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgKiB2ZW5kb3IsCisJCQkgICAgIHUzMiAqIGJvYXJkcmV2LCB1MzIgKiBtYWpyZXYsIHUzMiAqIG1pbnJldikKK3sKKwkqdmVuZG9yID0gZGQtPmlwYXRoX3ZlbmRvcmlkOworCSpib2FyZHJldiA9IGRkLT5pcGF0aF9ib2FyZHJldjsKKwkqbWFqcmV2ID0gZGQtPmlwYXRoX21hanJldjsKKwkqbWlucmV2ID0gZGQtPmlwYXRoX21pbnJldjsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9xdWVyeV9kZXZpY2UpOworCit1MzIgaXBhdGhfbGF5ZXJfZ2V0X2ZsYWdzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX2ZsYWdzOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfZmxhZ3MpOworCitzdHJ1Y3QgZGV2aWNlICppcGF0aF9sYXllcl9nZXRfZGV2aWNlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gJmRkLT5wY2lkZXYtPmRldjsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2RldmljZSk7CisKK3UxNiBpcGF0aF9sYXllcl9nZXRfZGV2aWNlaWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBkZC0+aXBhdGhfZGV2aWNlaWQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9kZXZpY2VpZCk7CisKK3U2NCBpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBkZC0+aXBhdGhfbGFzdGliY3N0YXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9sYXN0aWJjc3RhdCk7CisKK3UzMiBpcGF0aF9sYXllcl9nZXRfaWJtdHUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBkZC0+aXBhdGhfaWJtdHU7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9pYm10dSk7CisKK3ZvaWQgaXBhdGhfbGF5ZXJfYWRkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwltdXRleF9sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CisKKwlpZiAobGF5ZXJfYWRkX29uZSkKKwkJZGQtPmlwYXRoX2xheWVyLmxfYXJnID0KKwkJCWxheWVyX2FkZF9vbmUoZGQtPmlwYXRoX3VuaXQsIGRkKTsKKworCWlmICh2ZXJic19hZGRfb25lKQorCQlkZC0+dmVyYnNfbGF5ZXIubF9hcmcgPQorCQkJdmVyYnNfYWRkX29uZShkZC0+aXBhdGhfdW5pdCwgZGQpOworCisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7Cit9CisKK3ZvaWQgaXBhdGhfbGF5ZXJfZGVsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwltdXRleF9sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CisKKwlpZiAoZGQtPmlwYXRoX2xheWVyLmxfYXJnICYmIGxheWVyX3JlbW92ZV9vbmUpIHsKKwkJbGF5ZXJfcmVtb3ZlX29uZShkZC0+aXBhdGhfbGF5ZXIubF9hcmcpOworCQlkZC0+aXBhdGhfbGF5ZXIubF9hcmcgPSBOVUxMOworCX0KKworCWlmIChkZC0+dmVyYnNfbGF5ZXIubF9hcmcgJiYgdmVyYnNfcmVtb3ZlX29uZSkgeworCQl2ZXJic19yZW1vdmVfb25lKGRkLT52ZXJic19sYXllci5sX2FyZyk7CisJCWRkLT52ZXJic19sYXllci5sX2FyZyA9IE5VTEw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7Cit9CisKK2ludCBpcGF0aF9sYXllcl9yZWdpc3Rlcih2b2lkICooKmxfYWRkKShpbnQsIHN0cnVjdCBpcGF0aF9kZXZkYXRhICopLAorCQkJIHZvaWQgKCpsX3JlbW92ZSkodm9pZCAqKSwKKwkJCSBpbnQgKCpsX2ludHIpKHZvaWQgKiwgdTMyKSwKKwkJCSBpbnQgKCpsX3Jjdikodm9pZCAqLCB2b2lkICosIHN0cnVjdCBza19idWZmICopLAorCQkJIHUxNiBsX3Jjdl9vcGNvZGUsCisJCQkgaW50ICgqbF9yY3ZfbGlkKSh2b2lkICosIHZvaWQgKikpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CisKKwlsYXllcl9hZGRfb25lID0gbF9hZGQ7CisJbGF5ZXJfcmVtb3ZlX29uZSA9IGxfcmVtb3ZlOworCWxheWVyX2ludHIgPSBsX2ludHI7CisJbGF5ZXJfcmN2ID0gbF9yY3Y7CisJbGF5ZXJfcmN2X2xpZCA9IGxfcmN2X2xpZDsKKwlpcGF0aF9sYXllcl9yY3Zfb3Bjb2RlID0gbF9yY3Zfb3Bjb2RlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkLCB0bXAsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgeworCQlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JTklUVEVEKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkZC0+aXBhdGhfbGF5ZXIubF9hcmcpCisJCQljb250aW51ZTsKKworCQlpZiAoISgqZGQtPmlwYXRoX3N0YXR1c3AgJiBJUEFUSF9TVEFUVVNfU01BKSkKKwkJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfT0lCX1NNQTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwkJZGQtPmlwYXRoX2xheWVyLmxfYXJnID0gbF9hZGQoZGQtPmlwYXRoX3VuaXQsIGRkKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3JlZ2lzdGVyKTsKKwordm9pZCBpcGF0aF9sYXllcl91bnJlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkLCB0bXAsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgeworCQlpZiAoZGQtPmlwYXRoX2xheWVyLmxfYXJnICYmIGxheWVyX3JlbW92ZV9vbmUpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCQkJbGF5ZXJfcmVtb3ZlX29uZShkZC0+aXBhdGhfbGF5ZXIubF9hcmcpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCQkJZGQtPmlwYXRoX2xheWVyLmxfYXJnID0gTlVMTDsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJbGF5ZXJfYWRkX29uZSA9IE5VTEw7CisJbGF5ZXJfcmVtb3ZlX29uZSA9IE5VTEw7CisJbGF5ZXJfaW50ciA9IE5VTEw7CisJbGF5ZXJfcmN2ID0gTlVMTDsKKwlsYXllcl9yY3ZfbGlkID0gTlVMTDsKKworCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl91bnJlZ2lzdGVyKTsKKworc3RhdGljIHZvaWQgX19pcGF0aF92ZXJic190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSAoc3RydWN0IGlwYXRoX2RldmRhdGEgKikgYXJnOworCisJLyoKKwkgKiBJZiBwb3J0IDAgcmVjZWl2ZSBwYWNrZXQgaW50ZXJydXB0cyBhcmUgbm90IGF2YWlsYWJsZSwgb3IKKwkgKiBjYW4gYmUgbWlzc2VkLCBwb2xsIHRoZSByZWNlaXZlIHF1ZXVlCisJICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BPTExfUlhfSU5UUikKKwkJaXBhdGhfa3JlY2VpdmUoZGQpOworCisJLyogSGFuZGxlIHZlcmJzIGxheWVyIHRpbWVvdXRzLiAqLworCWlmIChkZC0+dmVyYnNfbGF5ZXIubF9hcmcgJiYgdmVyYnNfdGltZXJfY2IpCisJCXZlcmJzX3RpbWVyX2NiKGRkLT52ZXJic19sYXllci5sX2FyZyk7CisKKwltb2RfdGltZXIoJmRkLT52ZXJic19sYXllci5sX3RpbWVyLCBqaWZmaWVzICsgMSk7Cit9CisKKy8qKgorICogaXBhdGhfdmVyYnNfcmVnaXN0ZXIgLSB2ZXJicyBsYXllciByZWdpc3RyYXRpb24KKyAqIEBsX3Bpb2J1ZmF2YWlsOiBjYWxsYmFjayBmb3Igd2hlbiBQSU8gYnVmZmVycyBiZWNvbWUgYXZhaWxhYmxlCisgKiBAbF9yY3Y6IGNhbGxiYWNrIGZvciByZWNlaXZpbmcgYSBwYWNrZXQKKyAqIEBsX3RpbWVyX2NiOiB0aW1lciBjYWxsYmFjaworICogQGlwYXRoX2RldmRhdGE6IGRldmljZSBkYXRhIHN0cnVjdHVyZSBpcyBwdXQgaGVyZQorICovCitpbnQgaXBhdGhfdmVyYnNfcmVnaXN0ZXIodm9pZCAqKCpsX2FkZCkoaW50LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKSwKKwkJCSB2b2lkICgqbF9yZW1vdmUpKHZvaWQgKmFyZyksCisJCQkgaW50ICgqbF9waW9idWZhdmFpbCkgKHZvaWQgKmFyZyksCisJCQkgdm9pZCAoKmxfcmN2KSAodm9pZCAqYXJnLCB2b2lkICpyaGRyLAorCQkJCQl2b2lkICpkYXRhLCB1MzIgdGxlbiksCisJCQkgdm9pZCAoKmxfdGltZXJfY2IpICh2b2lkICphcmcpKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJdmVyYnNfYWRkX29uZSA9IGxfYWRkOworCXZlcmJzX3JlbW92ZV9vbmUgPSBsX3JlbW92ZTsKKwl2ZXJic19waW9idWZhdmFpbCA9IGxfcGlvYnVmYXZhaWw7CisJdmVyYnNfcmN2ID0gbF9yY3Y7CisJdmVyYnNfdGltZXJfY2IgPSBsX3RpbWVyX2NiOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkLCB0bXAsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgeworCQlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JTklUVEVEKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkZC0+dmVyYnNfbGF5ZXIubF9hcmcpCisJCQljb250aW51ZTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwkJZGQtPnZlcmJzX2xheWVyLmxfYXJnID0gbF9hZGQoZGQtPmlwYXRoX3VuaXQsIGRkKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJaXBhdGhfdmVyYnNfcmVnaXN0ZXJlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfdmVyYnNfcmVnaXN0ZXIpOworCit2b2lkIGlwYXRoX3ZlcmJzX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJmlwYXRoX2xheWVyX211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGQsIHRtcCwgJmlwYXRoX2Rldl9saXN0LCBpcGF0aF9saXN0KSB7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX09JQl9TTUE7CisKKwkJaWYgKGRkLT52ZXJic19sYXllci5sX2FyZyAmJiB2ZXJic19yZW1vdmVfb25lKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwkJCXZlcmJzX3JlbW92ZV9vbmUoZGQtPnZlcmJzX2xheWVyLmxfYXJnKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwkJCWRkLT52ZXJic19sYXllci5sX2FyZyA9IE5VTEw7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCXZlcmJzX2FkZF9vbmUgPSBOVUxMOworCXZlcmJzX3JlbW92ZV9vbmUgPSBOVUxMOworCXZlcmJzX3Bpb2J1ZmF2YWlsID0gTlVMTDsKKwl2ZXJic19yY3YgPSBOVUxMOworCXZlcmJzX3RpbWVyX2NiID0gTlVMTDsKKworCWlwYXRoX3ZlcmJzX3JlZ2lzdGVyZWQgPSAwOworCisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX3ZlcmJzX3VucmVnaXN0ZXIpOworCitpbnQgaXBhdGhfbGF5ZXJfb3BlbihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiAqIHBrdG1heCkKK3sKKwlpbnQgcmV0OworCXUzMiBpbnR2YWwgPSAwOworCisJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJaWYgKCFkZC0+aXBhdGhfbGF5ZXIubF9hcmcpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCXJldCA9IGlwYXRoX3NldHJjdmhkcnNpemUoZGQsIE5VTV9PRl9FWFRSQV9XT1JEU19JTl9IRUFERVJfUVVFVUUpOworCisJaWYgKHJldCA8IDApCisJCWdvdG8gYmFpbDsKKworCSpwa3RtYXggPSBkZC0+aXBhdGhfaWJtYXhsZW47CisKKwlpZiAoKmRkLT5pcGF0aF9zdGF0dXNwICYgSVBBVEhfU1RBVFVTX0lCX1JFQURZKQorCQlpbnR2YWwgfD0gSVBBVEhfTEFZRVJfSU5UX0lGX1VQOworCWlmIChpcGF0aF9zdGF0cy5zcHNfbGlkW2RkLT5pcGF0aF91bml0XSkKKwkJaW50dmFsIHw9IElQQVRIX0xBWUVSX0lOVF9MSUQ7CisJaWYgKGlwYXRoX3N0YXRzLnNwc19tbGlkW2RkLT5pcGF0aF91bml0XSkKKwkJaW50dmFsIHw9IElQQVRIX0xBWUVSX0lOVF9CQ0FTVDsKKwkvKgorCSAqIGRvIHRoaXMgb24gb3BlbiwgaW4gY2FzZSBsb3cgbGV2ZWwgaXMgYWxyZWFkeSB1cCBhbmQKKwkgKiBqdXN0IGxheWVyZWQgZHJpdmVyIHdhcyByZWxvYWRlZCwgZXRjLgorCSAqLworCWlmIChpbnR2YWwpCisJCWxheWVyX2ludHIoZGQtPmlwYXRoX2xheWVyLmxfYXJnLCBpbnR2YWwpOworCisJcmV0ID0gMDsKK2JhaWw6CisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9vcGVuKTsKKwordTE2IGlwYXRoX2xheWVyX2dldF9saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBkZC0+aXBhdGhfbGlkOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbGlkKTsKKworLyoqCisgKiBpcGF0aF9sYXllcl9nZXRfbWFjIC0gZ2V0IHRoZSBNQUMgYWRkcmVzcworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBtYWM6IHRoZSBNQUMgaXMgcHV0IGhlcmUKKyAqCisgKiBUaGlzIGlzIHRoZSBFVUlELTY0IE9VSSBvY3RldHMgKHRvcCAzKSwgdGhlbgorICogc2tpcCB0aGUgbmV4dCAyICh3aGljaCBzaG91bGQgYm90aCBiZSB6ZXJvIG9yIDB4ZmYpLgorICogVGhlIHJldHVybmVkIE1BQyBpcyBpbiBuZXR3b3JrIG9yZGVyCisgKiBtYWMgcG9pbnRzIHRvIGF0IGxlYXN0IDYgYnl0ZXMgb2YgYnVmZmVyCisgKiBXZSBhc3N1bWUgdGhhdCBieSB0aGUgdGltZSB0aGUgTElEIGlzIHNldCwgdGhhdCB0aGUgR1VJRCBpcyBhcyB2YWxpZAorICogYXMgaXQncyBldmVyIGdvaW5nIHRvIGJlLCByYXRoZXIgdGhhbiBhZGRpbmcgeWV0IGFub3RoZXIgc3RhdHVzIGJpdC4KKyAqLworCitpbnQgaXBhdGhfbGF5ZXJfZ2V0X21hYyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4ICogbWFjKQoreworCXU4ICpndWlkOworCisJZ3VpZCA9ICh1OCAqKSAmZGQtPmlwYXRoX2d1aWQ7CisKKwltYWNbMF0gPSBndWlkWzBdOworCW1hY1sxXSA9IGd1aWRbMV07CisJbWFjWzJdID0gZ3VpZFsyXTsKKwltYWNbM10gPSBndWlkWzVdOworCW1hY1s0XSA9IGd1aWRbNl07CisJbWFjWzVdID0gZ3VpZFs3XTsKKwlpZiAoKGd1aWRbM10gfHwgZ3VpZFs0XSkgJiYgIShndWlkWzNdID09IDB4ZmYgJiYgZ3VpZFs0XSA9PSAweGZmKSkKKwkJaXBhdGhfZGJnKCJXYXJuaW5nLCBndWlkIGJ5dGVzIDMgYW5kIDQgbm90IDAgb3IgMHhmZmZmOiAiCisJCQkgICIleCAleFxuIiwgZ3VpZFszXSwgZ3VpZFs0XSk7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9tYWMpOworCit1MTYgaXBhdGhfbGF5ZXJfZ2V0X2JjYXN0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX21saWQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9iY2FzdCk7CisKK3UzMiBpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGlwYXRoX3JlYWRfY3JlZzMyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2VycnBrZXkpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleSk7CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zZ2Uoc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsIHUzMiBsZW5ndGgpCit7CisJc3RydWN0IGlwYXRoX3NnZSAqc2dlID0gJnNzLT5zZ2U7CisKKwlzZ2UtPnZhZGRyICs9IGxlbmd0aDsKKwlzZ2UtPmxlbmd0aCAtPSBsZW5ndGg7CisJc2dlLT5zZ2VfbGVuZ3RoIC09IGxlbmd0aDsKKwlpZiAoc2dlLT5zZ2VfbGVuZ3RoID09IDApIHsKKwkJaWYgKC0tc3MtPm51bV9zZ2UpCisJCQkqc2dlID0gKnNzLT5zZ19saXN0Kys7CisJfSBlbHNlIGlmIChzZ2UtPmxlbmd0aCA9PSAwICYmIHNnZS0+bXIgIT0gTlVMTCkgeworCQlpZiAoKytzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCWlmICgrK3NnZS0+bSA+PSBzZ2UtPm1yLT5tYXBzeikKKwkJCQlyZXR1cm47CisJCQlzZ2UtPm4gPSAwOworCQl9CisJCXNnZS0+dmFkZHIgPSBzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLnZhZGRyOworCQlzZ2UtPmxlbmd0aCA9IHNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoOworCX0KK30KKworI2lmZGVmIF9fTElUVExFX0VORElBTgorc3RhdGljIGlubGluZSB1MzIgZ2V0X3VwcGVyX2JpdHModTMyIGRhdGEsIHUzMiBzaGlmdCkKK3sKKwlyZXR1cm4gZGF0YSA+PiBzaGlmdDsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2V0X3VwcGVyX2JpdHModTMyIGRhdGEsIHUzMiBzaGlmdCkKK3sKKwlyZXR1cm4gZGF0YSA8PCBzaGlmdDsKK30KKworc3RhdGljIGlubGluZSB1MzIgY2xlYXJfdXBwZXJfYnl0ZXModTMyIGRhdGEsIHUzMiBuLCB1MzIgb2ZmKQoreworCWRhdGEgPDw9ICgoc2l6ZW9mKHUzMikgLSBuKSAqIEJJVFNfUEVSX0JZVEUpOworCWRhdGEgPj49ICgoc2l6ZW9mKHUzMikgLSBuIC0gb2ZmKSAqIEJJVFNfUEVSX0JZVEUpOworCXJldHVybiBkYXRhOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdTMyIGdldF91cHBlcl9iaXRzKHUzMiBkYXRhLCB1MzIgc2hpZnQpCit7CisJcmV0dXJuIGRhdGEgPDwgc2hpZnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNldF91cHBlcl9iaXRzKHUzMiBkYXRhLCB1MzIgc2hpZnQpCit7CisJcmV0dXJuIGRhdGEgPj4gc2hpZnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNsZWFyX3VwcGVyX2J5dGVzKHUzMiBkYXRhLCB1MzIgbiwgdTMyIG9mZikKK3sKKwlkYXRhID4+PSAoKHNpemVvZih1MzIpIC0gbikgKiBCSVRTX1BFUl9CWVRFKTsKKwlkYXRhIDw8PSAoKHNpemVvZih1MzIpIC0gbiAtIG9mZikgKiBCSVRTX1BFUl9CWVRFKTsKKwlyZXR1cm4gZGF0YTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBjb3B5X2lvKHUzMiBfX2lvbWVtICpwaW9idWYsIHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLAorCQkgICAgdTMyIGxlbmd0aCkKK3sKKwl1MzIgZXh0cmEgPSAwOworCXUzMiBkYXRhID0gMDsKKwl1MzIgbGFzdDsKKworCXdoaWxlICgxKSB7CisJCXUzMiBsZW4gPSBzcy0+c2dlLmxlbmd0aDsKKwkJdTMyIG9mZjsKKworCQlCVUdfT04obGVuID09IDApOworCQlpZiAobGVuID4gbGVuZ3RoKQorCQkJbGVuID0gbGVuZ3RoOworCQlpZiAobGVuID4gc3MtPnNnZS5zZ2VfbGVuZ3RoKQorCQkJbGVuID0gc3MtPnNnZS5zZ2VfbGVuZ3RoOworCQkvKiBJZiB0aGUgc291cmNlIGFkZHJlc3MgaXMgbm90IGFsaWduZWQsIHRyeSB0byBhbGlnbiBpdC4gKi8KKwkJb2ZmID0gKHVuc2lnbmVkIGxvbmcpc3MtPnNnZS52YWRkciAmIChzaXplb2YodTMyKSAtIDEpOworCQlpZiAob2ZmKSB7CisJCQl1MzIgKmFkZHIgPSAodTMyICopKCh1bnNpZ25lZCBsb25nKXNzLT5zZ2UudmFkZHIgJgorCQkJCQkgICAgfihzaXplb2YodTMyKSAtIDEpKTsKKwkJCXUzMiB2ID0gZ2V0X3VwcGVyX2JpdHMoKmFkZHIsIG9mZiAqIEJJVFNfUEVSX0JZVEUpOworCQkJdTMyIHk7CisKKwkJCXkgPSBzaXplb2YodTMyKSAtIG9mZjsKKwkJCWlmIChsZW4gPiB5KQorCQkJCWxlbiA9IHk7CisJCQlpZiAobGVuICsgZXh0cmEgPj0gc2l6ZW9mKHUzMikpIHsKKwkJCQlkYXRhIHw9IHNldF91cHBlcl9iaXRzKHYsIGV4dHJhICoKKwkJCQkJCSAgICAgICBCSVRTX1BFUl9CWVRFKTsKKwkJCQlsZW4gPSBzaXplb2YodTMyKSAtIGV4dHJhOworCQkJCWlmIChsZW4gPT0gbGVuZ3RoKSB7CisJCQkJCWxhc3QgPSBkYXRhOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIHBpb2J1Zik7CisJCQkJcGlvYnVmKys7CisJCQkJZXh0cmEgPSAwOworCQkJCWRhdGEgPSAwOworCQkJfSBlbHNlIHsKKwkJCQkvKiBDbGVhciB1bnVzZWQgdXBwZXIgYnl0ZXMgKi8KKwkJCQlkYXRhIHw9IGNsZWFyX3VwcGVyX2J5dGVzKHYsIGxlbiwgZXh0cmEpOworCQkJCWlmIChsZW4gPT0gbGVuZ3RoKSB7CisJCQkJCWxhc3QgPSBkYXRhOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZXh0cmEgKz0gbGVuOworCQkJfQorCQl9IGVsc2UgaWYgKGV4dHJhKSB7CisJCQkvKiBTb3VyY2UgYWRkcmVzcyBpcyBhbGlnbmVkLiAqLworCQkJdTMyICphZGRyID0gKHUzMiAqKSBzcy0+c2dlLnZhZGRyOworCQkJaW50IHNoaWZ0ID0gZXh0cmEgKiBCSVRTX1BFUl9CWVRFOworCQkJaW50IHVzaGlmdCA9IDMyIC0gc2hpZnQ7CisJCQl1MzIgbCA9IGxlbjsKKworCQkJd2hpbGUgKGwgPj0gc2l6ZW9mKHUzMikpIHsKKwkJCQl1MzIgdiA9ICphZGRyOworCisJCQkJZGF0YSB8PSBzZXRfdXBwZXJfYml0cyh2LCBzaGlmdCk7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIHBpb2J1Zik7CisJCQkJZGF0YSA9IGdldF91cHBlcl9iaXRzKHYsIHVzaGlmdCk7CisJCQkJcGlvYnVmKys7CisJCQkJYWRkcisrOworCQkJCWwgLT0gc2l6ZW9mKHUzMik7CisJCQl9CisJCQkvKgorCQkJICogV2Ugc3RpbGwgaGF2ZSAnZXh0cmEnIG51bWJlciBvZiBieXRlcyBsZWZ0b3Zlci4KKwkJCSAqLworCQkJaWYgKGwpIHsKKwkJCQl1MzIgdiA9ICphZGRyOworCisJCQkJaWYgKGwgKyBleHRyYSA+PSBzaXplb2YodTMyKSkgeworCQkJCQlkYXRhIHw9IHNldF91cHBlcl9iaXRzKHYsIHNoaWZ0KTsKKwkJCQkJbGVuIC09IGwgKyBleHRyYSAtIHNpemVvZih1MzIpOworCQkJCQlpZiAobGVuID09IGxlbmd0aCkgeworCQkJCQkJbGFzdCA9IGRhdGE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlfX3Jhd193cml0ZWwoZGF0YSwgcGlvYnVmKTsKKwkJCQkJcGlvYnVmKys7CisJCQkJCWV4dHJhID0gMDsKKwkJCQkJZGF0YSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogQ2xlYXIgdW51c2VkIHVwcGVyIGJ5dGVzICovCisJCQkJCWRhdGEgfD0gY2xlYXJfdXBwZXJfYnl0ZXModiwgbCwKKwkJCQkJCQkJICBleHRyYSk7CisJCQkJCWlmIChsZW4gPT0gbGVuZ3RoKSB7CisJCQkJCQlsYXN0ID0gZGF0YTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWV4dHJhICs9IGw7CisJCQkJfQorCQkJfSBlbHNlIGlmIChsZW4gPT0gbGVuZ3RoKSB7CisJCQkJbGFzdCA9IGRhdGE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAobGVuID09IGxlbmd0aCkgeworCQkJdTMyIHc7CisKKwkJCS8qCisJCQkgKiBOZWVkIHRvIHJvdW5kIHVwIGZvciB0aGUgbGFzdCBkd29yZCBpbiB0aGUKKwkJCSAqIHBhY2tldC4KKwkJCSAqLworCQkJdyA9IChsZW4gKyAzKSA+PiAyOworCQkJX19pb3dyaXRlMzJfY29weShwaW9idWYsIHNzLT5zZ2UudmFkZHIsIHcgLSAxKTsKKwkJCXBpb2J1ZiArPSB3IC0gMTsKKwkJCWxhc3QgPSAoKHUzMiAqKSBzcy0+c2dlLnZhZGRyKVt3IC0gMV07CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXUzMiB3ID0gbGVuID4+IDI7CisKKwkJCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBzcy0+c2dlLnZhZGRyLCB3KTsKKwkJCXBpb2J1ZiArPSB3OworCisJCQlleHRyYSA9IGxlbiAmIChzaXplb2YodTMyKSAtIDEpOworCQkJaWYgKGV4dHJhKSB7CisJCQkJdTMyIHYgPSAoKHUzMiAqKSBzcy0+c2dlLnZhZGRyKVt3XTsKKworCQkJCS8qIENsZWFyIHVudXNlZCB1cHBlciBieXRlcyAqLworCQkJCWRhdGEgPSBjbGVhcl91cHBlcl9ieXRlcyh2LCBleHRyYSwgMCk7CisJCQl9CisJCX0KKwkJdXBkYXRlX3NnZShzcywgbGVuKTsKKwkJbGVuZ3RoIC09IGxlbjsKKwl9CisJLyogVXBkYXRlIGFkZHJlc3MgYmVmb3JlIHNlbmRpbmcgcGFja2V0LiAqLworCXVwZGF0ZV9zZ2Uoc3MsIGxlbmd0aCk7CisJLyogbXVzdCBmbHVzaCBlYXJseSBldmVyeXRoaW5nIGJlZm9yZSB0cmlnZ2VyIHdvcmQgKi8KKwlpcGF0aF9mbHVzaF93YygpOworCV9fcmF3X3dyaXRlbChsYXN0LCBwaW9idWYpOworCS8qIGJlIHN1cmUgdHJpZ2dlciB3b3JkIGlzIHdyaXR0ZW4gKi8KKwlpcGF0aF9mbHVzaF93YygpOworfQorCisvKioKKyAqIGlwYXRoX3ZlcmJzX3NlbmQgLSBzZW5kIGEgcGFja2V0IGZyb20gdGhlIHZlcmJzIGxheWVyCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGhkcndvcmRzOiB0aGUgbnVtYmVyIG9mIHdvcmtzIGluIHRoZSBoZWFkZXIKKyAqIEBoZHI6IHRoZSBwYWNrZXQgaGVhZGVyCisgKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaW4gYnl0ZXMKKyAqIEBzczogdGhlIFNHRSB0byBzZW5kCisgKgorICogVGhpcyBpcyBsaWtlIGlwYXRoX3NtYV9zZW5kX3BrdCgpIGluIHRoYXQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHNlbmQKKyAqIHBhY2tldHMgYWZ0ZXIgdGhlIGNoaXAgaXMgaW5pdGlhbGl6ZWQgKE1BRHMpIGJ1dCBhbHNvIGxpa2UKKyAqIGlwYXRoX2xheWVyX3NlbmRfaGRyKCkgc2luY2UgaXRzIHVzZWQgYnkgdGhlIHZlcmJzIGxheWVyLgorICovCitpbnQgaXBhdGhfdmVyYnNfc2VuZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBoZHJ3b3JkcywKKwkJICAgICB1MzIgKmhkciwgdTMyIGxlbiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MpCit7CisJdTMyIF9faW9tZW0gKnBpb2J1ZjsKKwl1MzIgcGxlbjsKKwlpbnQgcmV0OworCisJLyogKzEgaXMgZm9yIHRoZSBxd29yZCBwYWRkaW5nIG9mIHBiYyAqLworCXBsZW4gPSBoZHJ3b3JkcyArICgobGVuICsgMykgPj4gMikgKyAxOworCWlmICh1bmxpa2VseSgocGxlbiA8PCAyKSA+IGRkLT5pcGF0aF9pYm1heGxlbikpIHsKKwkJaXBhdGhfZGJnKCJwYWNrZXQgbGVuIDB4JXggdG9vIGxvbmcsIGZhaWxpbmdcbiIsIHBsZW4pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogR2V0IGEgUElPIGJ1ZmZlciB0byB1c2UuICovCisJcGlvYnVmID0gaXBhdGhfZ2V0cGlvYnVmKGRkLCBOVUxMKTsKKwlpZiAodW5saWtlbHkocGlvYnVmID09IE5VTEwpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogV3JpdGUgbGVuIHRvIGNvbnRyb2wgcXdvcmQsIG5vIGZsYWdzLgorCSAqIFdlIGhhdmUgdG8gZmx1c2ggYWZ0ZXIgdGhlIFBCQyBmb3IgY29ycmVjdG5lc3Mgb24gc29tZSBjcHVzCisJICogb3IgV0MgYnVmZmVyIGNhbiBiZSB3cml0dGVuIG91dCBvZiBvcmRlci4KKwkgKi8KKwl3cml0ZXEocGxlbiwgcGlvYnVmKTsKKwlpcGF0aF9mbHVzaF93YygpOworCXBpb2J1ZiArPSAyOworCWlmIChsZW4gPT0gMCkgeworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBqdXN0IHRoZSBoZWFkZXIgcG9ydGlvbiwgbXVzdCBmbHVzaCBiZWZvcmUKKwkJICogd3JpdGluZyBsYXN0IHdvcmQgb2YgaGVhZGVyIGZvciBjb3JyZWN0bmVzcywgYW5kIGFmdGVyCisJCSAqIHRoZSBsYXN0IGhlYWRlciB3b3JkICh0cmlnZ2VyIHdvcmQpLgorCQkgKi8KKwkJX19pb3dyaXRlMzJfY29weShwaW9idWYsIGhkciwgaGRyd29yZHMgLSAxKTsKKwkJaXBhdGhfZmx1c2hfd2MoKTsKKwkJX19yYXdfd3JpdGVsKGhkcltoZHJ3b3JkcyAtIDFdLCBwaW9idWYgKyBoZHJ3b3JkcyAtIDEpOworCQlpcGF0aF9mbHVzaF93YygpOworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJX19pb3dyaXRlMzJfY29weShwaW9idWYsIGhkciwgaGRyd29yZHMpOworCXBpb2J1ZiArPSBoZHJ3b3JkczsKKworCS8qIFRoZSBjb21tb24gY2FzZSBpcyBhbGlnbmVkIGFuZCBjb250YWluZWQgaW4gb25lIHNlZ21lbnQuICovCisJaWYgKGxpa2VseShzcy0+bnVtX3NnZSA9PSAxICYmIGxlbiA8PSBzcy0+c2dlLmxlbmd0aCAmJgorCQkgICAhKCh1bnNpZ25lZCBsb25nKXNzLT5zZ2UudmFkZHIgJiAoc2l6ZW9mKHUzMikgLSAxKSkpKSB7CisJCXUzMiB3OworCQl1MzIgKmFkZHIgPSAodTMyICopIHNzLT5zZ2UudmFkZHI7CisKKwkJLyogVXBkYXRlIGFkZHJlc3MgYmVmb3JlIHNlbmRpbmcgcGFja2V0LiAqLworCQl1cGRhdGVfc2dlKHNzLCBsZW4pOworCQkvKiBOZWVkIHRvIHJvdW5kIHVwIGZvciB0aGUgbGFzdCBkd29yZCBpbiB0aGUgcGFja2V0LiAqLworCQl3ID0gKGxlbiArIDMpID4+IDI7CisJCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBhZGRyLCB3IC0gMSk7CisJCS8qIG11c3QgZmx1c2ggZWFybHkgZXZlcnl0aGluZyBiZWZvcmUgdHJpZ2dlciB3b3JkICovCisJCWlwYXRoX2ZsdXNoX3djKCk7CisJCV9fcmF3X3dyaXRlbChhZGRyW3cgLSAxXSwgcGlvYnVmICsgdyAtIDEpOworCQkvKiBiZSBzdXJlIHRyaWdnZXIgd29yZCBpcyB3cml0dGVuICovCisJCWlwYXRoX2ZsdXNoX3djKCk7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisJY29weV9pbyhwaW9idWYsIHNzLCBsZW4pOworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfdmVyYnNfc2VuZCk7CisKK2ludCBpcGF0aF9sYXllcl9zbmFwc2hvdF9jb3VudGVycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU2NCAqc3dvcmRzLAorCQkJCSAgdTY0ICpyd29yZHMsIHU2NCAqc3BrdHMsIHU2NCAqcnBrdHMsCisJCQkJICB1NjQgKnhtaXRfd2FpdCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkpIHsKKwkJLyogbm8gaGFyZHdhcmUsIGZyZWV6ZSwgZXRjLiAqLworCQlpcGF0aF9kYmcoInVuaXQgJXUgbm90IHVzYWJsZVxuIiwgZGQtPmlwYXRoX3VuaXQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCSpzd29yZHMgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3Jfd29yZHNlbmRjbnQpOworCSpyd29yZHMgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3Jfd29yZHJjdmNudCk7CisJKnNwa3RzID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHNlbmRjbnQpOworCSpycGt0cyA9IGlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RyY3ZjbnQpOworCSp4bWl0X3dhaXQgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3Jfc2VuZHN0YWxsY250KTsKKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc25hcHNob3RfY291bnRlcnMpOworCisvKioKKyAqIGlwYXRoX2xheWVyX2dldF9jb3VudGVycyAtIGdldCB2YXJpb3VzIGNoaXAgY291bnRlcnMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAY250cnM6IGNvdW50ZXJzIGFyZSBwbGFjZWQgaGVyZQorICoKKyAqIFJldHVybiB0aGUgY291bnRlcnMgbmVlZGVkIGJ5IHJlY3ZfcG1hX2dldF9wb3J0Y291bnRlcnMoKS4KKyAqLworaW50IGlwYXRoX2xheWVyX2dldF9jb3VudGVycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkgICAgICBzdHJ1Y3QgaXBhdGhfbGF5ZXJfY291bnRlcnMgKmNudHJzKQoreworCWludCByZXQ7CisKKwlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JTklUVEVEKSkgeworCQkvKiBubyBoYXJkd2FyZSwgZnJlZXplLCBldGMuICovCisJCWlwYXRoX2RiZygidW5pdCAldSBub3QgdXNhYmxlXG4iLCBkZC0+aXBhdGhfdW5pdCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJY250cnMtPnN5bWJvbF9lcnJvcl9jb3VudGVyID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2lic3ltYm9sZXJyY250KTsKKwljbnRycy0+bGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2libGlua2VycnJlY292Y250KTsKKwljbnRycy0+bGlua19kb3duZWRfY291bnRlciA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pYmxpbmtkb3duY250KTsKKwljbnRycy0+cG9ydF9yY3ZfZXJyb3JzID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3J4ZHJvcHBrdGNudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcmN2b3ZmbGNudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcG9ydG92ZmxjbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2VycnJjdmZsb3djdHJsY250KSArCisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJfcmxlbmNudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfaW52YWxpZHJsZW5jbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2VycmljcmNjbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2VycnZjcmNjbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2VycmxwY3JjY250KSArCisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJsaW5rY250KSArCisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9iYWRmb3JtYXRjbnQpOworCWNudHJzLT5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9yY3ZlYnBjbnQpOworCWNudHJzLT5wb3J0X3htaXRfZGlzY2FyZHMgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfdW5zdXB2bGNudCk7CisJY250cnMtPnBvcnRfeG1pdF9kYXRhID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRzZW5kY250KTsKKwljbnRycy0+cG9ydF9yY3ZfZGF0YSA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl93b3JkcmN2Y250KTsKKwljbnRycy0+cG9ydF94bWl0X3BhY2tldHMgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0c2VuZGNudCk7CisJY250cnMtPnBvcnRfcmN2X3BhY2tldHMgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0cmN2Y250KTsKKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2NvdW50ZXJzKTsKKworaW50IGlwYXRoX2xheWVyX3dhbnRfYnVmZmVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzZXRfYml0KElQQVRIX1NfUElPSU5UQlVGQVZBSUwsICZkZC0+aXBhdGhfc2VuZGN0cmwpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkgZGQtPmlwYXRoX3NlbmRjdHJsKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl93YW50X2J1ZmZlcik7CisKK2ludCBpcGF0aF9sYXllcl9zZW5kX2hkcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHN0cnVjdCBldGhlcl9oZWFkZXIgKmhkcikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgX19pb21lbSAqcGlvYnVmOworCXUzMiBwbGVuLCAqdWhkcjsKKwlzaXplX3QgY291bnQ7CisJX19iZTE2IHZsc2xsbmg7CisKKwlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9SQ1ZIRFJTWl9TRVQpKSB7CisJCWlwYXRoX2RiZygic2VuZCB3aGlsZSBub3Qgb3BlblxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfSBlbHNlCisJCWlmICgoZGQtPmlwYXRoX2ZsYWdzICYgKElQQVRIX0xJTktVTksgfCBJUEFUSF9MSU5LRE9XTikpIHx8CisJCSAgICBkZC0+aXBhdGhfbGlkID09IDApIHsKKwkJCS8qCisJCQkgKiBsaWQgY2hlY2sgaXMgZm9yIHdoZW4gc21hIGhhc24ndCB5ZXQgY29uZmlndXJlZAorCQkJICovCisJCQlyZXQgPSAtRU5FVERPV047CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJzZW5kIHdoaWxlIG5vdCByZWFkeSwgIgorCQkJCSAgICJteWxpZD0ldSwgZmxhZ3M9MHgleFxuIiwKKwkJCQkgICBkZC0+aXBhdGhfbGlkLCBkZC0+aXBhdGhfZmxhZ3MpOworCQl9CisKKwl2bHNsbG5oID0gKigoX19iZTE2ICopIGhkcik7CisJaWYgKHZsc2xsbmggIT0gaHRvbnMoSVBTX0xSSF9CVEgpKSB7CisJCWlwYXRoX2RiZygiV2FybmluZzogbHJoWzBdIHdyb25nICgleCwgbm90ICV4KTsgIgorCQkJICAibm90IHNlbmRpbmdcbiIsIGJlMTZfdG9fY3B1KHZsc2xsbmgpLAorCQkJICBJUFNfTFJIX0JUSCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKworCS8qIEdldCBhIFBJTyBidWZmZXIgdG8gdXNlLiAqLworCXBpb2J1ZiA9IGlwYXRoX2dldHBpb2J1ZihkZCwgTlVMTCk7CisJaWYgKHBpb2J1ZiA9PSBOVUxMKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKworCXBsZW4gPSAoc2l6ZW9mKCpoZHIpID4+IDIpOyAvKiBhY3R1YWwgbGVuZ3RoICovCisJaXBhdGhfY2RiZyhFUEtULCAiMHgleCsxdyBwaW8gJXBcbiIsIHBsZW4sIHBpb2J1Zik7CisKKwl3cml0ZXEocGxlbisxLCBwaW9idWYpOyAvKiBsZW4gKCsxIGZvciBwYWQpIHRvIHBiYywgbm8gZmxhZ3MgKi8KKwlpcGF0aF9mbHVzaF93YygpOworCXBpb2J1ZiArPSAyOworCXVoZHIgPSAodTMyICopaGRyOworCWNvdW50ID0gcGxlbi0xOyAvKiBhbW91bnQgd2UgY2FuIGNvcHkgYmVmb3JlIHRyaWdnZXIgd29yZCAqLworCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCB1aGRyLCBjb3VudCk7CisJaXBhdGhfZmx1c2hfd2MoKTsKKwlfX3Jhd193cml0ZWwodWhkcltjb3VudF0sIHBpb2J1ZiArIGNvdW50KTsKKwlpcGF0aF9mbHVzaF93YygpOyAvKiBlbnN1cmUgaXQncyBzZW50LCBub3cgKi8KKworCWlwYXRoX3N0YXRzLnNwc19ldGhlcl9zcGt0cysrOwkvKiBldGhlciBwYWNrZXQgc2VudCAqLworCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NlbmRfaGRyKTsKKworaW50IGlwYXRoX2xheWVyX3NldF9waW9pbnRidWZhdmFpbF9pbnQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXNldF9iaXQoSVBBVEhfU19QSU9JTlRCVUZBVkFJTCwgJmRkLT5pcGF0aF9zZW5kY3RybCk7CisKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9waW9pbnRidWZhdmFpbF9pbnQpOworCitpbnQgaXBhdGhfbGF5ZXJfZW5hYmxlX3RpbWVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwkvKgorCSAqIEhULTQwMCBoYXMgYSBkZXNpZ24gZmxhdyB3aGVyZSB0aGUgY2hpcCBhbmQga2VybmVsIGlkZWEKKwkgKiBvZiB0aGUgdGFpbCByZWdpc3RlciBkb24ndCBhbHdheXMgYWdyZWUsIGFuZCB0aGVyZWZvcmUgd2Ugd29uJ3QKKwkgKiBnZXQgYW4gaW50ZXJydXB0IG9uIHRoZSBuZXh0IHBhY2tldCByZWNlaXZlZC4KKwkgKiBJZiB0aGUgYm9hcmQgc3VwcG9ydHMgcGVyIHBhY2tldCByZWNlaXZlIGludGVycnVwdHMsIHVzZSBpdC4KKwkgKiBPdGhlcndpc2UsIHRoZSB0aW1lciBmdW5jdGlvbiBwZXJpb2RpY2FsbHkgY2hlY2tzIGZvciBwYWNrZXRzCisJICogdG8gY292ZXIgdGhpcyBjYXNlLgorCSAqIEVpdGhlciB3YXksIHRoZSB0aW1lciBpcyBuZWVkZWQgZm9yIHZlcmJzIGxheWVyIHJlbGF0ZWQKKwkgKiBwcm9jZXNzaW5nLgorCSAqLworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9HUElPX0lOVFIpIHsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9kZWJ1Z3BvcnRzZWxlY3QsCisJCQkJIDB4MjA3NDA3NjU0MjMxMFVMTCk7CisJCS8qIEVuYWJsZSBHUElPIGJpdCAyIGludGVycnVwdCAqLworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzaywKKwkJCQkgKHU2NCkgKDEgPDwgMikpOworCX0KKworCWluaXRfdGltZXIoJmRkLT52ZXJic19sYXllci5sX3RpbWVyKTsKKwlkZC0+dmVyYnNfbGF5ZXIubF90aW1lci5mdW5jdGlvbiA9IF9faXBhdGhfdmVyYnNfdGltZXI7CisJZGQtPnZlcmJzX2xheWVyLmxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRkOworCWRkLT52ZXJic19sYXllci5sX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKKwlhZGRfdGltZXIoJmRkLT52ZXJic19sYXllci5sX3RpbWVyKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9lbmFibGVfdGltZXIpOworCitpbnQgaXBhdGhfbGF5ZXJfZGlzYWJsZV90aW1lcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJLyogRGlzYWJsZSBHUElPIGJpdCAyIGludGVycnVwdCAqLworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9HUElPX0lOVFIpCisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19tYXNrLCAwKTsKKworCWRlbF90aW1lcl9zeW5jKCZkZC0+dmVyYnNfbGF5ZXIubF90aW1lcik7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZGlzYWJsZV90aW1lcik7CisKKy8qKgorICogaXBhdGhfbGF5ZXJfc2V0X3ZlcmJzX2ZsYWdzIC0gc2V0IHRoZSB2ZXJicyBsYXllciBmbGFncworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBmbGFnczogdGhlIGZsYWdzIHRvIHNldAorICovCitpbnQgaXBhdGhfbGF5ZXJfc2V0X3ZlcmJzX2ZsYWdzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKnNzOworCXVuc2lnbmVkIGxvbmcgbGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgbGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3MsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgeworCQlpZiAoIShzcy0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JTklUVEVEKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGZsYWdzICYgSVBBVEhfVkVSQlNfS0VSTkVMX1NNQSkgJiYKKwkJICAgICEoKnNzLT5pcGF0aF9zdGF0dXNwICYgSVBBVEhfU1RBVFVTX1NNQSkpCisJCQkqc3MtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX09JQl9TTUE7CisJCWVsc2UKKwkJCSpzcy0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX09JQl9TTUE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBsZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF92ZXJic19mbGFncyk7CisKKy8qKgorICogaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyAtIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgUEtFWSB0YWJsZSBmb3IgcG9ydCAwCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICovCit1bnNpZ25lZCBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gQVJSQVlfU0laRShkZC0+aXBhdGhfcGRbMF0tPnBvcnRfcGtleXMpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbnBrZXlzKTsKKworLyoqCisgKiBpcGF0aF9sYXllcl9nZXRfcGtleSAtIHJldHVybiB0aGUgaW5kZXhlZCBQS0VZIGZyb20gdGhlIHBvcnQgMCBQS0VZIHRhYmxlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGluZGV4OiB0aGUgUEtFWSBpbmRleAorICovCit1bnNpZ25lZCBpcGF0aF9sYXllcl9nZXRfcGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIGluZGV4KQoreworCXVuc2lnbmVkIHJldDsKKworCWlmIChpbmRleCA+PSBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wZFswXS0+cG9ydF9wa2V5cykpCisJCXJldCA9IDA7CisJZWxzZQorCQlyZXQgPSBkZC0+aXBhdGhfcGRbMF0tPnBvcnRfcGtleXNbaW5kZXhdOworCisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X3BrZXkpOworCisvKioKKyAqIGlwYXRoX2xheWVyX2dldF9wa2V5cyAtIHJldHVybiB0aGUgUEtFWSB0YWJsZSBmb3IgcG9ydCAwCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBrZXlzOiB0aGUgcGtleSB0YWJsZSBpcyBwbGFjZWQgaGVyZQorICovCitpbnQgaXBhdGhfbGF5ZXJfZ2V0X3BrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2ICogcGtleXMpCit7CisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IGRkLT5pcGF0aF9wZFswXTsKKworCW1lbWNweShwa2V5cywgcGQtPnBvcnRfcGtleXMsIHNpemVvZihwZC0+cG9ydF9wa2V5cykpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9wa2V5cyk7CisKKy8qKgorICogcm1fcGtleSAtIGRlY3JlY21lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIGdpdmVuIFBLRVkKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAa2V5OiB0aGUgUEtFWSBpbmRleAorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHJlZmVyZW5jZSBhbmQgdGhlIGhhcmR3YXJlIHRhYmxlIGVudHJ5CisgKiBuZWVkcyB0byBiZSBjaGFuZ2VkLgorICovCitzdGF0aWMgaW50IHJtX3BrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MTYga2V5KQoreworCWludCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZC0+aXBhdGhfcGtleXMpOyBpKyspIHsKKwkJaWYgKGRkLT5pcGF0aF9wa2V5c1tpXSAhPSBrZXkpCisJCQljb250aW51ZTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRkLT5pcGF0aF9wa2V5cmVmc1tpXSkpIHsKKwkJCWRkLT5pcGF0aF9wa2V5c1tpXSA9IDA7CisJCQlyZXQgPSAxOworCQkJZ290byBiYWlsOworCQl9CisJCWJyZWFrOworCX0KKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBhZGRfcGtleSAtIGFkZCB0aGUgZ2l2ZW4gUEtFWSB0byB0aGUgaGFyZHdhcmUgdGFibGUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAa2V5OiB0aGUgUEtFWQorICoKKyAqIFJldHVybiBhbiBlcnJvciBjb2RlIGlmIHVuYWJsZSB0byBhZGQgdGhlIGVudHJ5LCB6ZXJvIGlmIG5vIGNoYW5nZSwKKyAqIG9yIDEgaWYgdGhlIGhhcmR3YXJlIFBLRVkgcmVnaXN0ZXIgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKyAqLworc3RhdGljIGludCBhZGRfcGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiBrZXkpCit7CisJaW50IGk7CisJdTE2IGxrZXkgPSBrZXkgJiAweDdGRkY7CisJaW50IGFueSA9IDA7CisJaW50IHJldDsKKworCWlmIChsa2V5ID09IDB4N0ZGRikgeworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogTG9vayBmb3IgYW4gZW1wdHkgc2xvdCBvciBhIG1hdGNoaW5nIFBLRVkuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGQtPmlwYXRoX3BrZXlzKTsgaSsrKSB7CisJCWlmICghZGQtPmlwYXRoX3BrZXlzW2ldKSB7CisJCQlhbnkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIElmIGl0IG1hdGNoZXMgZXhhY3RseSwgdHJ5IHRvIGluY3JlbWVudCB0aGUgcmVmIGNvdW50ICovCisJCWlmIChkZC0+aXBhdGhfcGtleXNbaV0gPT0ga2V5KSB7CisJCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmRkLT5pcGF0aF9wa2V5cmVmc1tpXSkgPiAxKSB7CisJCQkJcmV0ID0gMDsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQkvKiBMb3N0IHRoZSByYWNlLiBMb29rIGZvciBhbiBlbXB0eSBzbG90IGJlbG93LiAqLworCQkJYXRvbWljX2RlYygmZGQtPmlwYXRoX3BrZXlyZWZzW2ldKTsKKwkJCWFueSsrOworCQl9CisJCS8qCisJCSAqIEl0IG1ha2VzIG5vIHNlbnNlIHRvIGhhdmUgYm90aCB0aGUgbGltaXRlZCBhbmQgdW5saW1pdGVkCisJCSAqIFBLRVkgc2V0IGF0IHRoZSBzYW1lIHRpbWUgc2luY2UgdGhlIHVubGltaXRlZCBvbmUgd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBsaW1pdGVkIG9uZS4KKwkJICovCisJCWlmICgoZGQtPmlwYXRoX3BrZXlzW2ldICYgMHg3RkZGKSA9PSBsa2V5KSB7CisJCQlyZXQgPSAtRUVYSVNUOworCQkJZ290byBiYWlsOworCQl9CisJfQorCWlmICghYW55KSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBiYWlsOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZC0+aXBhdGhfcGtleXMpOyBpKyspIHsKKwkJaWYgKCFkZC0+aXBhdGhfcGtleXNbaV0gJiYKKwkJICAgIGF0b21pY19pbmNfcmV0dXJuKCZkZC0+aXBhdGhfcGtleXJlZnNbaV0pID09IDEpIHsKKwkJCS8qIGZvciBpcGF0aHN0YXRzLCBldGMuICovCisJCQlpcGF0aF9zdGF0cy5zcHNfcGtleXNbaV0gPSBsa2V5OworCQkJZGQtPmlwYXRoX3BrZXlzW2ldID0ga2V5OworCQkJcmV0ID0gMTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlyZXQgPSAtRUJVU1k7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9sYXllcl9zZXRfcGtleXMgLSBzZXQgdGhlIFBLRVkgdGFibGUgZm9yIHBvcnQgMAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwa2V5czogdGhlIFBLRVkgdGFibGUKKyAqLworaW50IGlwYXRoX2xheWVyX3NldF9wa2V5cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiAqIHBrZXlzKQoreworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQ7CisJaW50IGk7CisJaW50IGNoYW5nZWQgPSAwOworCisJcGQgPSBkZC0+aXBhdGhfcGRbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZC0+cG9ydF9wa2V5cyk7IGkrKykgeworCQl1MTYga2V5ID0gcGtleXNbaV07CisJCXUxNiBva2V5ID0gcGQtPnBvcnRfcGtleXNbaV07CisKKwkJaWYgKGtleSA9PSBva2V5KQorCQkJY29udGludWU7CisJCS8qCisJCSAqIFRoZSB2YWx1ZSBvZiB0aGlzIFBLRVkgdGFibGUgZW50cnkgaXMgY2hhbmdpbmcuCisJCSAqIFJlbW92ZSB0aGUgb2xkIGVudHJ5IGluIHRoZSBoYXJkd2FyZSdzIGFycmF5IG9mIFBLRVlzLgorCQkgKi8KKwkJaWYgKG9rZXkgJiAweDdGRkYpCisJCQljaGFuZ2VkIHw9IHJtX3BrZXkoZGQsIG9rZXkpOworCQlpZiAoa2V5ICYgMHg3RkZGKSB7CisJCQlpbnQgcmV0ID0gYWRkX3BrZXkoZGQsIGtleSk7CisKKwkJCWlmIChyZXQgPCAwKQorCQkJCWtleSA9IDA7CisJCQllbHNlCisJCQkJY2hhbmdlZCB8PSByZXQ7CisJCX0KKwkJcGQtPnBvcnRfcGtleXNbaV0gPSBrZXk7CisJfQorCWlmIChjaGFuZ2VkKSB7CisJCXU2NCBwa2V5OworCisJCXBrZXkgPSAodTY0KSBkZC0+aXBhdGhfcGtleXNbMF0gfAorCQkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1sxXSA8PCAxNikgfAorCQkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1syXSA8PCAzMikgfAorCQkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1szXSA8PCA0OCk7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInAwIG5ldyBwa2V5IHJlZyAlbGx4XG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGtleSk7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcGFydGl0aW9ua2V5LAorCQkJCSBwa2V5KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9wa2V5cyk7CisKKy8qKgorICogaXBhdGhfbGF5ZXJfZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlIC0gZ2V0IHRoZSBkZWZhdWx0IGxpbmtkb3duIHN0YXRlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFJldHVybnMgemVybyBpZiB0aGUgZGVmYXVsdCBpcyBQT0xMLCAxIGlmIHRoZSBkZWZhdWx0IGlzIFNMRUVQLgorICovCitpbnQgaXBhdGhfbGF5ZXJfZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gISEoZGQtPmlwYXRoX2liY2N0cmwgJiBJTkZJTklQQVRIX0lCQ0NfTElOS0RPV05ERUZBVUxUU1RBVEUpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUpOworCisvKioKKyAqIGlwYXRoX2xheWVyX3NldF9saW5rZG93bmRlZmF1bHRzdGF0ZSAtIHNldCB0aGUgZGVmYXVsdCBsaW5rZG93biBzdGF0ZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBzbGVlcDogdGhlIG5ldyBzdGF0ZQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB0YWtlIGVmZmVjdCB3aGVuIHRoZSBsaW5rIHN0YXRlIGNoYW5nZXMuCisgKi8KK2ludCBpcGF0aF9sYXllcl9zZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCQkgaW50IHNsZWVwKQoreworCWlmIChzbGVlcCkKKwkJZGQtPmlwYXRoX2liY2N0cmwgfD0gSU5GSU5JUEFUSF9JQkNDX0xJTktET1dOREVGQVVMVFNUQVRFOworCWVsc2UKKwkJZGQtPmlwYXRoX2liY2N0cmwgJj0gfklORklOSVBBVEhfSUJDQ19MSU5LRE9XTkRFRkFVTFRTVEFURTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCisJCQkgZGQtPmlwYXRoX2liY2N0cmwpOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUpOworCitpbnQgaXBhdGhfbGF5ZXJfZ2V0X3BoeWVycnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIChkZC0+aXBhdGhfaWJjY3RybCA+PgorCQlJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX1NISUZUKSAmCisJCUlORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfTUFTSzsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X3BoeWVycnRocmVzaG9sZCk7CisKKy8qKgorICogaXBhdGhfbGF5ZXJfc2V0X3BoeWVycnRocmVzaG9sZCAtIHNldCB0aGUgcGh5c2ljYWwgZXJyb3IgdGhyZXNob2xkCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQG46IHRoZSBuZXcgdGhyZXNob2xkCisgKgorICogTm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5IHRha2UgZWZmZWN0IHdoZW4gdGhlIGxpbmsgc3RhdGUgY2hhbmdlcy4KKyAqLworaW50IGlwYXRoX2xheWVyX3NldF9waHllcnJ0aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBuKQoreworCXVuc2lnbmVkIHY7CisKKwl2ID0gKGRkLT5pcGF0aF9pYmNjdHJsID4+IElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQpICYKKwkJSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9NQVNLOworCWlmICh2ICE9IG4pIHsKKwkJZGQtPmlwYXRoX2liY2N0cmwgJj0KKwkJCX4oSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9NQVNLIDw8CisJCQkgIElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQpOworCQlkZC0+aXBhdGhfaWJjY3RybCB8PQorCQkJKHU2NCkgbiA8PCBJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX1NISUZUOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCisJCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9waHllcnJ0aHJlc2hvbGQpOworCitpbnQgaXBhdGhfbGF5ZXJfZ2V0X292ZXJydW50aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiAoZGQtPmlwYXRoX2liY2N0cmwgPj4KKwkJSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfU0hJRlQpICYKKwkJSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfTUFTSzsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X292ZXJydW50aHJlc2hvbGQpOworCisvKioKKyAqIGlwYXRoX2xheWVyX3NldF9vdmVycnVudGhyZXNob2xkIC0gc2V0IHRoZSBvdmVycnVuIHRocmVzaG9sZAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBuOiB0aGUgbmV3IHRocmVzaG9sZAorICoKKyAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB0YWtlIGVmZmVjdCB3aGVuIHRoZSBsaW5rIHN0YXRlIGNoYW5nZXMuCisgKi8KK2ludCBpcGF0aF9sYXllcl9zZXRfb3ZlcnJ1bnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIG4pCit7CisJdW5zaWduZWQgdjsKKworCXYgPSAoZGQtPmlwYXRoX2liY2N0cmwgPj4gSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfU0hJRlQpICYKKwkJSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfTUFTSzsKKwlpZiAodiAhPSBuKSB7CisJCWRkLT5pcGF0aF9pYmNjdHJsICY9CisJCQl+KElORklOSVBBVEhfSUJDQ19PVkVSUlVOVEhSRVNIT0xEX01BU0sgPDwKKwkJCSAgSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfU0hJRlQpOworCQlkZC0+aXBhdGhfaWJjY3RybCB8PQorCQkJKHU2NCkgbiA8PCBJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9TSElGVDsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLAorCQkJCSBkZC0+aXBhdGhfaWJjY3RybCk7CisJfQorCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZXRfb3ZlcnJ1bnRocmVzaG9sZCk7CisKK2ludCBpcGF0aF9sYXllcl9nZXRfYm9hcmRuYW1lKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgY2hhciAqbmFtZSwKKwkJCSAgICAgIHNpemVfdCBuYW1lbGVuKQoreworCXJldHVybiBkZC0+aXBhdGhfZl9nZXRfYm9hcmRuYW1lKGRkLCBuYW1lLCBuYW1lbGVuKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9ib2FyZG5hbWUpOworCit1MzIgaXBhdGhfbGF5ZXJfZ2V0X3JjdmhkcmVudHNpemUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9yY3ZoZHJlbnRzaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9sYXllci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlZmQxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9sYXllci5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfSVBBVEhfTEFZRVJfSAorI2RlZmluZSBfSVBBVEhfTEFZRVJfSAorCisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBpcyBmb3Igc3ltYm9scyBzaGFyZWQgYmV0d2VlbiB0aGUgaW5maW5pcGF0aCBkcml2ZXIKKyAqIGFuZCBkcml2ZXJzIGxheWVyZWQgdXBvbiBpdCAoc3VjaCBhcyBpcGF0aCkuCisgKi8KKworc3RydWN0IHNrX2J1ZmY7CitzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlOworc3RydWN0IGlwYXRoX2RldmRhdGE7CitzdHJ1Y3QgZXRoZXJfaGVhZGVyOworCitzdHJ1Y3QgaXBhdGhfbGF5ZXJfY291bnRlcnMgeworCXU2NCBzeW1ib2xfZXJyb3JfY291bnRlcjsKKwl1NjQgbGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyOworCXU2NCBsaW5rX2Rvd25lZF9jb3VudGVyOworCXU2NCBwb3J0X3Jjdl9lcnJvcnM7CisJdTY0IHBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzOworCXU2NCBwb3J0X3htaXRfZGlzY2FyZHM7CisJdTY0IHBvcnRfeG1pdF9kYXRhOworCXU2NCBwb3J0X3Jjdl9kYXRhOworCXU2NCBwb3J0X3htaXRfcGFja2V0czsKKwl1NjQgcG9ydF9yY3ZfcGFja2V0czsKK307CisKKy8qCisgKiBBIHNlZ21lbnQgaXMgYSBsaW5lYXIgcmVnaW9uIG9mIGxvdyBwaHlzaWNhbCBtZW1vcnkuCisgKiBYWFggTWF5YmUgd2Ugc2hvdWxkIHVzZSBwaHlzIGFkZHIgaGVyZSBhbmQga21hcCgpL2t1bm1hcCgpLgorICogVXNlZCBieSB0aGUgdmVyYnMgbGF5ZXIuCisgKi8KK3N0cnVjdCBpcGF0aF9zZWcgeworCXZvaWQgKnZhZGRyOworCXNpemVfdCBsZW5ndGg7Cit9OworCisvKiBUaGUgbnVtYmVyIG9mIGlwYXRoX3NlZ3MgdGhhdCBmaXQgaW4gYSBwYWdlLiAqLworI2RlZmluZSBJUEFUSF9TRUdTWiAgICAgKFBBR0VfU0laRSAvIHNpemVvZiAoc3RydWN0IGlwYXRoX3NlZykpCisKK3N0cnVjdCBpcGF0aF9zZWdhcnJheSB7CisJc3RydWN0IGlwYXRoX3NlZyBzZWdzW0lQQVRIX1NFR1NaXTsKK307CisKK3N0cnVjdCBpcGF0aF9tcmVnaW9uIHsKKwl1NjQgdXNlcl9iYXNlOwkJLyogVXNlcidzIGFkZHJlc3MgZm9yIHRoaXMgcmVnaW9uICovCisJdTY0IGlvdmE7CQkvKiBJQiBzdGFydCBhZGRyZXNzIG9mIHRoaXMgcmVnaW9uICovCisJc2l6ZV90IGxlbmd0aDsKKwl1MzIgbGtleTsKKwl1MzIgb2Zmc2V0OwkJLyogb2Zmc2V0IChieXRlcykgdG8gc3RhcnQgb2YgcmVnaW9uICovCisJaW50IGFjY2Vzc19mbGFnczsKKwl1MzIgbWF4X3NlZ3M7CQkvKiBudW1iZXIgb2YgaXBhdGhfc2VncyBpbiBhbGwgdGhlIGFycmF5cyAqLworCXUzMiBtYXBzejsJCS8qIHNpemUgb2YgdGhlIG1hcCBhcnJheSAqLworCXN0cnVjdCBpcGF0aF9zZWdhcnJheSAqbWFwWzBdOwkvKiB0aGUgc2VnbWVudHMgKi8KK307CisKKy8qCisgKiBUaGVzZSBrZWVwIHRyYWNrIG9mIHRoZSBjb3B5IHByb2dyZXNzIHdpdGhpbiBhIG1lbW9yeSByZWdpb24uCisgKiBVc2VkIGJ5IHRoZSB2ZXJicyBsYXllci4KKyAqLworc3RydWN0IGlwYXRoX3NnZSB7CisJc3RydWN0IGlwYXRoX21yZWdpb24gKm1yOworCXZvaWQgKnZhZGRyOwkJLyogY3VycmVudCBwb2ludGVyIGludG8gdGhlIHNlZ21lbnQgKi8KKwl1MzIgc2dlX2xlbmd0aDsJCS8qIGxlbmd0aCBvZiB0aGUgU0dFICovCisJdTMyIGxlbmd0aDsJCS8qIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIHNlZ21lbnQgKi8KKwl1MTYgbTsJCQkvKiBjdXJyZW50IGluZGV4OiBtci0+bWFwW21dICovCisJdTE2IG47CQkJLyogY3VycmVudCBpbmRleDogbXItPm1hcFttXS0+c2Vnc1tuXSAqLworfTsKKworc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSB7CisJc3RydWN0IGlwYXRoX3NnZSAqc2dfbGlzdDsJLyogbmV4dCBTR0UgdG8gYmUgdXNlZCBpZiBhbnkgKi8KKwlzdHJ1Y3QgaXBhdGhfc2dlIHNnZTsJLyogcHJvZ3Jlc3Mgc3RhdGUgZm9yIHRoZSBjdXJyZW50IFNHRSAqLworCXU4IG51bV9zZ2U7Cit9OworCitpbnQgaXBhdGhfbGF5ZXJfcmVnaXN0ZXIodm9pZCAqKCpsX2FkZCkoaW50LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKSwKKwkJCSB2b2lkICgqbF9yZW1vdmUpKHZvaWQgKiksCisJCQkgaW50ICgqbF9pbnRyKSh2b2lkICosIHUzMiksCisJCQkgaW50ICgqbF9yY3YpKHZvaWQgKiwgdm9pZCAqLAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICopLAorCQkJIHUxNiByY3Zfb3Bjb2RlLAorCQkJIGludCAoKmxfcmN2X2xpZCkodm9pZCAqLCB2b2lkICopKTsKK2ludCBpcGF0aF92ZXJic19yZWdpc3Rlcih2b2lkICooKmxfYWRkKShpbnQsIHN0cnVjdCBpcGF0aF9kZXZkYXRhICopLAorCQkJIHZvaWQgKCpsX3JlbW92ZSkodm9pZCAqYXJnKSwKKwkJCSBpbnQgKCpsX3Bpb2J1ZmF2YWlsKSh2b2lkICphcmcpLAorCQkJIHZvaWQgKCpsX3Jjdikodm9pZCAqYXJnLCB2b2lkICpyaGRyLAorCQkJCSAgICAgICB2b2lkICpkYXRhLCB1MzIgdGxlbiksCisJCQkgdm9pZCAoKmxfdGltZXJfY2IpKHZvaWQgKmFyZykpOwordm9pZCBpcGF0aF9sYXllcl91bnJlZ2lzdGVyKHZvaWQpOwordm9pZCBpcGF0aF92ZXJic191bnJlZ2lzdGVyKHZvaWQpOworaW50IGlwYXRoX2xheWVyX29wZW4oc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyICogcGt0bWF4KTsKK3UxNiBpcGF0aF9sYXllcl9nZXRfbGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfbGF5ZXJfZ2V0X21hYyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4ICopOwordTE2IGlwYXRoX2xheWVyX2dldF9iY2FzdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwordTMyIGlwYXRoX2xheWVyX2dldF9jcl9lcnJwa2V5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IHN0YXRlKTsKK2ludCBpcGF0aF9sYXllcl9zZXRfbXR1KHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUxNik7CitpbnQgaXBhdGhfc2V0X3Nwc19saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyLCB1OCk7CitpbnQgaXBhdGhfbGF5ZXJfc2VuZF9oZHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJIHN0cnVjdCBldGhlcl9oZWFkZXIgKmhkcik7CitpbnQgaXBhdGhfdmVyYnNfc2VuZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBoZHJ3b3JkcywKKwkJICAgICB1MzIgKiBoZHIsIHUzMiBsZW4sIHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzKTsKK2ludCBpcGF0aF9sYXllcl9zZXRfcGlvaW50YnVmYXZhaWxfaW50KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfbGF5ZXJfZ2V0X2JvYXJkbmFtZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGNoYXIgKm5hbWUsCisJCQkgICAgICBzaXplX3QgbmFtZWxlbik7CitpbnQgaXBhdGhfbGF5ZXJfc25hcHNob3RfY291bnRlcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1NjQgKnN3b3JkcywKKwkJCQkgIHU2NCAqcndvcmRzLCB1NjQgKnNwa3RzLCB1NjQgKnJwa3RzLAorCQkJCSAgdTY0ICp4bWl0X3dhaXQpOworaW50IGlwYXRoX2xheWVyX2dldF9jb3VudGVycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkgICAgIHN0cnVjdCBpcGF0aF9sYXllcl9jb3VudGVycyAqY250cnMpOworaW50IGlwYXRoX2xheWVyX3dhbnRfYnVmZmVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X2d1aWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgX19iZTY0IGd1aWQpOworX19iZTY0IGlwYXRoX2xheWVyX2dldF9ndWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordTMyIGlwYXRoX2xheWVyX2dldF9uZ3VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK2ludCBpcGF0aF9sYXllcl9xdWVyeV9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyICogdmVuZG9yLAorCQkJICAgICB1MzIgKiBib2FyZHJldiwgdTMyICogbWFqcmV2LCB1MzIgKiBtaW5yZXYpOwordTMyIGlwYXRoX2xheWVyX2dldF9mbGFncyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworc3RydWN0IGRldmljZSAqaXBhdGhfbGF5ZXJfZ2V0X2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwordTE2IGlwYXRoX2xheWVyX2dldF9kZXZpY2VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwordTY0IGlwYXRoX2xheWVyX2dldF9sYXN0aWJjc3RhdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwordTMyIGlwYXRoX2xheWVyX2dldF9pYm10dShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2xheWVyX2VuYWJsZV90aW1lcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2xheWVyX2Rpc2FibGVfdGltZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK2ludCBpcGF0aF9sYXllcl9zZXRfdmVyYnNfZmxhZ3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBmbGFncyk7Cit1bnNpZ25lZCBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7Cit1bnNpZ25lZCBpcGF0aF9sYXllcl9nZXRfcGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIGluZGV4KTsKK2ludCBpcGF0aF9sYXllcl9nZXRfcGtleXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MTYgKnBrZXlzKTsKK2ludCBpcGF0aF9sYXllcl9zZXRfcGtleXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MTYgKnBrZXlzKTsKK2ludCBpcGF0aF9sYXllcl9nZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK2ludCBpcGF0aF9sYXllcl9zZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCQkgaW50IHNsZWVwKTsKK2ludCBpcGF0aF9sYXllcl9nZXRfcGh5ZXJydGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X3BoeWVycnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIG4pOworaW50IGlwYXRoX2xheWVyX2dldF9vdmVycnVudGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X292ZXJydW50aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBuKTsKK3UzMiBpcGF0aF9sYXllcl9nZXRfcmN2aGRyZW50c2l6ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworCisvKiBpcGF0aF9ldGhlciBpbnRlcnJ1cHQgdmFsdWVzICovCisjZGVmaW5lIElQQVRIX0xBWUVSX0lOVF9JRl9VUCAweDIKKyNkZWZpbmUgSVBBVEhfTEFZRVJfSU5UX0lGX0RPV04gMHg0CisjZGVmaW5lIElQQVRIX0xBWUVSX0lOVF9MSUQgMHg4CisjZGVmaW5lIElQQVRIX0xBWUVSX0lOVF9TRU5EX0NPTlRJTlVFIDB4MTAKKyNkZWZpbmUgSVBBVEhfTEFZRVJfSU5UX0JDQVNUIDB4NDAKKworLyogX3ZlcmJzX2xheWVyLmxfZmxhZ3MgKi8KKyNkZWZpbmUgSVBBVEhfVkVSQlNfS0VSTkVMX1NNQSAweDEKKworZXh0ZXJuIHVuc2lnbmVkIGlwYXRoX2RlYnVnOyAvKiBkZWJ1Z2dpbmcgYml0IG1hc2sgKi8KKworI2VuZGlmCQkJCS8qIF9JUEFUSF9MQVlFUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmODM5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwpAQCAtMCwwICsxLDEzNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorCisjZGVmaW5lIElCX1NNUF9VTlNVUF9WRVJTSU9OCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQorI2RlZmluZSBJQl9TTVBfVU5TVVBfTUVUSE9ECV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQorI2RlZmluZSBJQl9TTVBfVU5TVVBfTUVUSF9BVFRSCV9fY29uc3RhbnRfaHRvbnMoMHgwMDBDKQorI2RlZmluZSBJQl9TTVBfSU5WQUxJRF9GSUVMRAlfX2NvbnN0YW50X2h0b25zKDB4MDAxQykKKworc3RhdGljIGludCByZXBseShzdHJ1Y3QgaWJfc21wICpzbXApCit7CisJLyoKKwkgKiBUaGUgdmVyYnMgZnJhbWV3b3JrIHdpbGwgaGFuZGxlIHRoZSBkaXJlY3RlZC9MSUQgcm91dGUKKwkgKiBwYWNrZXQgY2hhbmdlcy4KKwkgKi8KKwlzbXAtPm1ldGhvZCA9IElCX01HTVRfTUVUSE9EX0dFVF9SRVNQOworCWlmIChzbXAtPm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKQorCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfRElSRUNUSU9OOworCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1MgfCBJQl9NQURfUkVTVUxUX1JFUExZOworfQorCitzdGF0aWMgaW50IHJlY3Zfc3Vibl9nZXRfbm9kZWRlc2NyaXB0aW9uKHN0cnVjdCBpYl9zbXAgKnNtcCwKKwkJCQkJIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQoreworCWlmIChzbXAtPmF0dHJfbW9kKQorCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKworCXN0cm5jcHkoc21wLT5kYXRhLCBpYmRldi0+bm9kZV9kZXNjLCBzaXplb2Yoc21wLT5kYXRhKSk7CisKKwlyZXR1cm4gcmVwbHkoc21wKTsKK30KKworc3RydWN0IG5vZGVpbmZvIHsKKwl1OCBiYXNlX3ZlcnNpb247CisJdTggY2xhc3NfdmVyc2lvbjsKKwl1OCBub2RlX3R5cGU7CisJdTggbnVtX3BvcnRzOworCV9fYmU2NCBzeXNfZ3VpZDsKKwlfX2JlNjQgbm9kZV9ndWlkOworCV9fYmU2NCBwb3J0X2d1aWQ7CisJX19iZTE2IHBhcnRpdGlvbl9jYXA7CisJX19iZTE2IGRldmljZV9pZDsKKwlfX2JlMzIgcmV2aXNpb247CisJdTggbG9jYWxfcG9ydF9udW07CisJdTggdmVuZG9yX2lkWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgcmVjdl9zdWJuX2dldF9ub2RlaW5mbyhzdHJ1Y3QgaWJfc21wICpzbXAsCisJCQkJICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKK3sKKwlzdHJ1Y3Qgbm9kZWluZm8gKm5pcCA9IChzdHJ1Y3Qgbm9kZWluZm8gKikmc21wLT5kYXRhOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHRvX2lkZXYoaWJkZXYpLT5kZDsKKwl1MzIgdmVuZG9yLCBib2FyZGlkLCBtYWpyZXYsIG1pbnJldjsKKworCWlmIChzbXAtPmF0dHJfbW9kKQorCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKworCW5pcC0+YmFzZV92ZXJzaW9uID0gMTsKKwluaXAtPmNsYXNzX3ZlcnNpb24gPSAxOworCW5pcC0+bm9kZV90eXBlID0gMTsJLyogY2hhbm5lbCBhZGFwdGVyICovCisJLyoKKwkgKiBYWFggVGhlIG51bV9wb3J0cyB2YWx1ZSB3aWxsIG5lZWQgYSBsYXllciBmdW5jdGlvbiB0byBnZXQKKwkgKiB0aGUgdmFsdWUgaWYgd2UgZXZlciBoYXZlIG1vcmUgdGhhbiBvbmUgSUIgcG9ydCBvbiBhIGNoaXAuCisJICogV2Ugd2lsbCBhbHNvIG5lZWQgdG8gZ2V0IHRoZSBHVUlEIGZvciB0aGUgcG9ydC4KKwkgKi8KKwluaXAtPm51bV9wb3J0cyA9IGliZGV2LT5waHlzX3BvcnRfY250OworCS8qIFRoaXMgaXMgYWxyZWFkeSBpbiBuZXR3b3JrIG9yZGVyICovCisJbmlwLT5zeXNfZ3VpZCA9IHRvX2lkZXYoaWJkZXYpLT5zeXNfaW1hZ2VfZ3VpZDsKKwluaXAtPm5vZGVfZ3VpZCA9IGlwYXRoX2xheWVyX2dldF9ndWlkKGRkKTsKKwluaXAtPnBvcnRfZ3VpZCA9IG5pcC0+c3lzX2d1aWQ7CisJbmlwLT5wYXJ0aXRpb25fY2FwID0gY3B1X3RvX2JlMTYoaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhkZCkpOworCW5pcC0+ZGV2aWNlX2lkID0gY3B1X3RvX2JlMTYoaXBhdGhfbGF5ZXJfZ2V0X2RldmljZWlkKGRkKSk7CisJaXBhdGhfbGF5ZXJfcXVlcnlfZGV2aWNlKGRkLCAmdmVuZG9yLCAmYm9hcmRpZCwgJm1hanJldiwgJm1pbnJldik7CisJbmlwLT5yZXZpc2lvbiA9IGNwdV90b19iZTMyKChtYWpyZXYgPDwgMTYpIHwgbWlucmV2KTsKKwluaXAtPmxvY2FsX3BvcnRfbnVtID0gcG9ydDsKKwluaXAtPnZlbmRvcl9pZFswXSA9IDA7CisJbmlwLT52ZW5kb3JfaWRbMV0gPSB2ZW5kb3IgPj4gODsKKwluaXAtPnZlbmRvcl9pZFsyXSA9IHZlbmRvcjsKKworCXJldHVybiByZXBseShzbXApOworfQorCitzdGF0aWMgaW50IHJlY3Zfc3Vibl9nZXRfZ3VpZGluZm8oc3RydWN0IGliX3NtcCAqc21wLAorCQkJCSAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCit7CisJdTMyIHN0YXJ0Z3ggPSA4ICogYmUzMl90b19jcHUoc21wLT5hdHRyX21vZCk7CisJX19iZTY0ICpwID0gKF9fYmU2NCAqKSBzbXAtPmRhdGE7CisKKwkvKiAzMiBibG9ja3Mgb2YgOCA2NC1iaXQgR1VJRHMgcGVyIGJsb2NrICovCisKKwltZW1zZXQoc21wLT5kYXRhLCAwLCBzaXplb2Yoc21wLT5kYXRhKSk7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgR1VJRCBmb3Igbm93LiAgSWYgdGhpcyBjaGFuZ2VzLCB0aGUKKwkgKiBwb3J0aW5mby5ndWlkX2NhcCBmaWVsZCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvby4KKwkgKi8KKwlpZiAoc3RhcnRneCA9PSAwKQorCQkvKiBUaGUgZmlyc3QgaXMgYSBjb3B5IG9mIHRoZSByZWFkLW9ubHkgSFcgR1VJRC4gKi8KKwkJKnAgPSBpcGF0aF9sYXllcl9nZXRfZ3VpZCh0b19pZGV2KGliZGV2KS0+ZGQpOworCWVsc2UKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisKKwlyZXR1cm4gcmVwbHkoc21wKTsKK30KKworc3RydWN0IHBvcnRfaW5mbyB7CisJX19iZTY0IG1rZXk7CisJX19iZTY0IGdpZF9wcmVmaXg7CisJX19iZTE2IGxpZDsKKwlfX2JlMTYgc21fbGlkOworCV9fYmUzMiBjYXBfbWFzazsKKwlfX2JlMTYgZGlhZ19jb2RlOworCV9fYmUxNiBta2V5X2xlYXNlX3BlcmlvZDsKKwl1OCBsb2NhbF9wb3J0X251bTsKKwl1OCBsaW5rX3dpZHRoX2VuYWJsZWQ7CisJdTggbGlua193aWR0aF9zdXBwb3J0ZWQ7CisJdTggbGlua193aWR0aF9hY3RpdmU7CisJdTggbGlua3NwZWVkX3BvcnRzdGF0ZTsJCQkvKiA0IGJpdHMsIDQgYml0cyAqLworCXU4IHBvcnRwaHlzc3RhdGVfbGlua2Rvd247CQkvKiA0IGJpdHMsIDQgYml0cyAqLworCXU4IG1rZXlwcm90X3Jlc3ZfbG1jOwkJCS8qIDIgYml0cywgMywgMyAqLworCXU4IGxpbmtzcGVlZGFjdGl2ZV9lbmFibGVkOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCBuZWlnaGJvcm10dV9tYXN0ZXJzbXNsOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCB2bGNhcF9pbml0dHlwZTsJCQkvKiA0IGJpdHMsIDQgYml0cyAqLworCXU4IHZsX2hpZ2hfbGltaXQ7CisJdTggdmxfYXJiX2hpZ2hfY2FwOworCXU4IHZsX2FyYl9sb3dfY2FwOworCXU4IGluaXR0eXBlcmVwbHlfbXR1Y2FwOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCB2bHN0YWxsY250X2hvcWxpZmU7CQkJLyogMyBiaXRzLCA1IGJpdHMgKi8KKwl1OCBvcGVyYXRpb25hbHZsX3BlaV9wZW9fZnBpX2ZwbzsJLyogNCBiaXRzLCAxLCAxLCAxLCAxICovCisJX19iZTE2IG1rZXlfdmlvbGF0aW9uczsKKwlfX2JlMTYgcGtleV92aW9sYXRpb25zOworCV9fYmUxNiBxa2V5X3Zpb2xhdGlvbnM7CisJdTggZ3VpZF9jYXA7CisJdTggY2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0bzsJCS8qIDEgYml0LCAyIGJpdHMsIDUgKi8KKwl1OCByZXN2X3Jlc3B0aW1ldmFsdWU7CQkJLyogMyBiaXRzLCA1IGJpdHMgKi8KKwl1OCBsb2NhbHBoeWVycm9yc19vdmVycnVuZXJyb3JzOwkvKiA0IGJpdHMsIDQgYml0cyAqLworCV9fYmUxNiBtYXhfY3JlZGl0X2hpbnQ7CisJdTggcmVzdjsKKwl1OCBsaW5rX3JvdW5kdHJpcF9sYXRlbmN5WzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgcmVjdl9zdWJuX2dldF9wb3J0aW5mbyhzdHJ1Y3QgaWJfc21wICpzbXAsCisJCQkJICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldjsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaXAgPSAoc3RydWN0IHBvcnRfaW5mbyAqKXNtcC0+ZGF0YTsKKwl1MTYgbGlkOworCXU4IGliY3N0YXQ7CisJdTggbXR1OworCWludCByZXQ7CisKKwlpZiAoYmUzMl90b19jcHUoc21wLT5hdHRyX21vZCkgPiBpYmRldi0+cGh5c19wb3J0X2NudCkgeworCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKwkJcmV0ID0gcmVwbHkoc21wKTsKKwkJZ290byBiYWlsOworCX0KKworCWRldiA9IHRvX2lkZXYoaWJkZXYpOworCisJLyogQ2xlYXIgYWxsIGZpZWxkcy4gIE9ubHkgc2V0IHRoZSBub24temVybyBmaWVsZHMuICovCisJbWVtc2V0KHNtcC0+ZGF0YSwgMCwgc2l6ZW9mKHNtcC0+ZGF0YSkpOworCisJLyogT25seSByZXR1cm4gdGhlIG1rZXkgaWYgdGhlIHByb3RlY3Rpb24gZmllbGQgYWxsb3dzIGl0LiAqLworCWlmIChzbXAtPm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9TRVQgfHwgZGV2LT5ta2V5ID09IHNtcC0+bWtleSB8fAorCSAgICAoZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyA+PiA2KSA9PSAwKQorCQlwaXAtPm1rZXkgPSBkZXYtPm1rZXk7CisJcGlwLT5naWRfcHJlZml4ID0gZGV2LT5naWRfcHJlZml4OworCWxpZCA9IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCk7CisJcGlwLT5saWQgPSBsaWQgPyBjcHVfdG9fYmUxNihsaWQpIDogSUJfTElEX1BFUk1JU1NJVkU7CisJcGlwLT5zbV9saWQgPSBjcHVfdG9fYmUxNihkZXYtPnNtX2xpZCk7CisJcGlwLT5jYXBfbWFzayA9IGNwdV90b19iZTMyKGRldi0+cG9ydF9jYXBfZmxhZ3MpOworCS8qIHBpcC0+ZGlhZ19jb2RlOyAqLworCXBpcC0+bWtleV9sZWFzZV9wZXJpb2QgPSBjcHVfdG9fYmUxNihkZXYtPm1rZXlfbGVhc2VfcGVyaW9kKTsKKwlwaXAtPmxvY2FsX3BvcnRfbnVtID0gcG9ydDsKKwlwaXAtPmxpbmtfd2lkdGhfZW5hYmxlZCA9IGRldi0+bGlua193aWR0aF9lbmFibGVkOworCXBpcC0+bGlua193aWR0aF9zdXBwb3J0ZWQgPSAzOwkvKiAxeCBvciA0eCAqLworCXBpcC0+bGlua193aWR0aF9hY3RpdmUgPSAyOwkvKiA0eCAqLworCXBpcC0+bGlua3NwZWVkX3BvcnRzdGF0ZSA9IDB4MTA7CS8qIDIuNUdicHMgKi8KKwlpYmNzdGF0ID0gaXBhdGhfbGF5ZXJfZ2V0X2xhc3RpYmNzdGF0KGRldi0+ZGQpOworCXBpcC0+bGlua3NwZWVkX3BvcnRzdGF0ZSB8PSAoKGliY3N0YXQgPj4gNCkgJiAweDMpICsgMTsKKwlwaXAtPnBvcnRwaHlzc3RhdGVfbGlua2Rvd24gPQorCQkoaXBhdGhfY3Z0X3BoeXNwb3J0c3RhdGVbaWJjc3RhdCAmIDB4Zl0gPDwgNCkgfAorCQkoaXBhdGhfbGF5ZXJfZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKGRldi0+ZGQpID8gMSA6IDIpOworCXBpcC0+bWtleXByb3RfcmVzdl9sbWMgPSBkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jOworCXBpcC0+bGlua3NwZWVkYWN0aXZlX2VuYWJsZWQgPSAweDExOwkvKiAyLjVHYnBzLCAyLjVHYnBzICovCisJc3dpdGNoIChpcGF0aF9sYXllcl9nZXRfaWJtdHUoZGV2LT5kZCkpIHsKKwljYXNlIDQwOTY6CisJCW10dSA9IElCX01UVV80MDk2OworCQlicmVhazsKKwljYXNlIDIwNDg6CisJCW10dSA9IElCX01UVV8yMDQ4OworCQlicmVhazsKKwljYXNlIDEwMjQ6CisJCW10dSA9IElCX01UVV8xMDI0OworCQlicmVhazsKKwljYXNlIDUxMjoKKwkJbXR1ID0gSUJfTVRVXzUxMjsKKwkJYnJlYWs7CisJY2FzZSAyNTY6CisJCW10dSA9IElCX01UVV8yNTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiBvb3BzLCBzb21ldGhpbmcgaXMgd3JvbmcgKi8KKwkJbXR1ID0gSUJfTVRVXzIwNDg7CisJCWJyZWFrOworCX0KKwlwaXAtPm5laWdoYm9ybXR1X21hc3RlcnNtc2wgPSAobXR1IDw8IDQpIHwgZGV2LT5zbV9zbDsKKwlwaXAtPnZsY2FwX2luaXR0eXBlID0gMHgxMDsJLyogVkxDYXAgPSBWTDAsIEluaXRUeXBlID0gMCAqLworCXBpcC0+dmxfaGlnaF9saW1pdCA9IGRldi0+dmxfaGlnaF9saW1pdDsKKwkvKiBwaXAtPnZsX2FyYl9oaWdoX2NhcDsgLy8gb25seSBvbmUgVkwgKi8KKwkvKiBwaXAtPnZsX2FyYl9sb3dfY2FwOyAvLyBvbmx5IG9uZSBWTCAqLworCS8qIEluaXRUeXBlUmVwbHkgPSAwICovCisJcGlwLT5pbml0dHlwZXJlcGx5X210dWNhcCA9IElCX01UVV80MDk2OworCS8vIEhDQXMgaWdub3JlIFZMU3RhbGxDb3VudCBhbmQgSE9RTGlmZQorCS8qIHBpcC0+dmxzdGFsbGNudF9ob3FsaWZlOyAqLworCXBpcC0+b3BlcmF0aW9uYWx2bF9wZWlfcGVvX2ZwaV9mcG8gPSAweDEwOwkvKiBPVkxzID0gMSAqLworCXBpcC0+bWtleV92aW9sYXRpb25zID0gY3B1X3RvX2JlMTYoZGV2LT5ta2V5X3Zpb2xhdGlvbnMpOworCS8qIFBfS2V5VmlvbGF0aW9ucyBhcmUgY291bnRlZCBieSBoYXJkd2FyZS4gKi8KKwlwaXAtPnBrZXlfdmlvbGF0aW9ucyA9CisJCWNwdV90b19iZTE2KChpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShkZXYtPmRkKSAtCisJCQkgICAgIGRldi0+bl9wa2V5X3Zpb2xhdGlvbnMpICYgMHhGRkZGKTsKKwlwaXAtPnFrZXlfdmlvbGF0aW9ucyA9IGNwdV90b19iZTE2KGRldi0+cWtleV92aW9sYXRpb25zKTsKKwkvKiBPbmx5IHRoZSBoYXJkd2FyZSBHVUlEIGlzIHN1cHBvcnRlZCBmb3Igbm93ICovCisJcGlwLT5ndWlkX2NhcCA9IDE7CisJcGlwLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvID0gZGV2LT5zdWJuZXRfdGltZW91dDsKKwkvKiAzMi43NjggdXNlYy4gcmVzcG9uc2UgdGltZSAoZ3Vlc3NpbmcpICovCisJcGlwLT5yZXN2X3Jlc3B0aW1ldmFsdWUgPSAzOworCXBpcC0+bG9jYWxwaHllcnJvcnNfb3ZlcnJ1bmVycm9ycyA9CisJCShpcGF0aF9sYXllcl9nZXRfcGh5ZXJydGhyZXNob2xkKGRldi0+ZGQpIDw8IDQpIHwKKwkJaXBhdGhfbGF5ZXJfZ2V0X292ZXJydW50aHJlc2hvbGQoZGV2LT5kZCk7CisJLyogcGlwLT5tYXhfY3JlZGl0X2hpbnQ7ICovCisJLyogcGlwLT5saW5rX3JvdW5kdHJpcF9sYXRlbmN5WzNdOyAqLworCisJcmV0ID0gcmVwbHkoc21wKTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJlY3Zfc3Vibl9nZXRfcGtleXRhYmxlKHN0cnVjdCBpYl9zbXAgKnNtcCwKKwkJCQkgICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKK3sKKwl1MzIgc3RhcnRweCA9IDMyICogKGJlMzJfdG9fY3B1KHNtcC0+YXR0cl9tb2QpICYgMHhmZmZmKTsKKwl1MTYgKnAgPSAodTE2ICopIHNtcC0+ZGF0YTsKKwlfX2JlMTYgKnEgPSAoX19iZTE2ICopIHNtcC0+ZGF0YTsKKworCS8qIDY0IGJsb2NrcyBvZiAzMiAxNi1iaXQgUF9LZXkgZW50cmllcyAqLworCisJbWVtc2V0KHNtcC0+ZGF0YSwgMCwgc2l6ZW9mKHNtcC0+ZGF0YSkpOworCWlmIChzdGFydHB4ID09IDApIHsKKwkJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwkJdW5zaWduZWQgaSwgbiA9IGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGV2LT5kZCk7CisKKwkJaXBhdGhfbGF5ZXJfZ2V0X3BrZXlzKGRldi0+ZGQsIHApOworCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlxW2ldID0gY3B1X3RvX2JlMTYocFtpXSk7CisJfSBlbHNlCisJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCisJcmV0dXJuIHJlcGx5KHNtcCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9zdWJuX3NldF9ndWlkaW5mbyhzdHJ1Y3QgaWJfc21wICpzbXAsCisJCQkJICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKK3sKKwkvKiBUaGUgb25seSBHVUlEIHdlIHN1cHBvcnQgaXMgdGhlIGZpcnN0IHJlYWQtb25seSBlbnRyeS4gKi8KKwlyZXR1cm4gcmVjdl9zdWJuX2dldF9ndWlkaW5mbyhzbXAsIGliZGV2KTsKK30KKworLyoqCisgKiByZWN2X3N1Ym5fc2V0X3BvcnRpbmZvIC0gc2V0IHBvcnQgaW5mb3JtYXRpb24KKyAqIEBzbXA6IHRoZSBpbmNvbWluZyBTTSBwYWNrZXQKKyAqIEBpYmRldjogdGhlIGluZmluaWJhbmQgZGV2aWNlCisgKiBAcG9ydDogdGhlIHBvcnQgb24gdGhlIGRldmljZQorICoKKyAqIFNldCBQb3J0aW5mbyAoc2VlIGNoLiAxNC4yLjUuNikuCisgKi8KK3N0YXRpYyBpbnQgcmVjdl9zdWJuX3NldF9wb3J0aW5mbyhzdHJ1Y3QgaWJfc21wICpzbXAsCisJCQkJICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaXAgPSAoc3RydWN0IHBvcnRfaW5mbyAqKXNtcC0+ZGF0YTsKKwlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXY7CisJdTMyIGZsYWdzOworCWNoYXIgY2xpZW50cmVyZWcgPSAwOworCXUxNiBsaWQsIHNtbGlkOworCXU4IGx3ZTsKKwl1OCBsc2U7CisJdTggc3RhdGU7CisJdTE2IGxzdGF0ZTsKKwl1MzIgbXR1OworCWludCByZXQ7CisKKwlpZiAoYmUzMl90b19jcHUoc21wLT5hdHRyX21vZCkgPiBpYmRldi0+cGh5c19wb3J0X2NudCkKKwkJZ290byBlcnI7CisKKwlkZXYgPSB0b19pZGV2KGliZGV2KTsKKwlldmVudC5kZXZpY2UgPSBpYmRldjsKKwlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydDsKKworCWRldi0+bWtleSA9IHBpcC0+bWtleTsKKwlkZXYtPmdpZF9wcmVmaXggPSBwaXAtPmdpZF9wcmVmaXg7CisJZGV2LT5ta2V5X2xlYXNlX3BlcmlvZCA9IGJlMTZfdG9fY3B1KHBpcC0+bWtleV9sZWFzZV9wZXJpb2QpOworCisJbGlkID0gYmUxNl90b19jcHUocGlwLT5saWQpOworCWlmIChsaWQgIT0gaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKSkgeworCQkvKiBNdXN0IGJlIGEgdmFsaWQgdW5pY2FzdCBMSUQgYWRkcmVzcy4gKi8KKwkJaWYgKGxpZCA9PSAwIHx8IGxpZCA+PSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFKQorCQkJZ290byBlcnI7CisJCWlwYXRoX3NldF9zcHNfbGlkKGRldi0+ZGQsIGxpZCwgcGlwLT5ta2V5cHJvdF9yZXN2X2xtYyAmIDcpOworCQlldmVudC5ldmVudCA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJfQorCisJc21saWQgPSBiZTE2X3RvX2NwdShwaXAtPnNtX2xpZCk7CisJaWYgKHNtbGlkICE9IGRldi0+c21fbGlkKSB7CisJCS8qIE11c3QgYmUgYSB2YWxpZCB1bmljYXN0IExJRCBhZGRyZXNzLiAqLworCQlpZiAoc21saWQgPT0gMCB8fCBzbWxpZCA+PSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFKQorCQkJZ290byBlcnI7CisJCWRldi0+c21fbGlkID0gc21saWQ7CisJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfU01fQ0hBTkdFOworCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCX0KKworCS8qIE9ubHkgNHggc3VwcG9ydGVkIGJ1dCBhbGxvdyAxeCBvciA0eCB0byBiZSBzZXQgKHNlZSAxNC4yLjYuNikuICovCisJbHdlID0gcGlwLT5saW5rX3dpZHRoX2VuYWJsZWQ7CisJaWYgKChsd2UgPj0gNCAmJiBsd2UgPD0gOCkgfHwgKGx3ZSA+PSAweEMgJiYgbHdlIDw9IDB4RkUpKQorCQlnb3RvIGVycjsKKwlpZiAobHdlID09IDB4RkYpCisJCWRldi0+bGlua193aWR0aF9lbmFibGVkID0gMzsJLyogMXggb3IgNHggKi8KKwllbHNlIGlmIChsd2UpCisJCWRldi0+bGlua193aWR0aF9lbmFibGVkID0gbHdlOworCisJLyogT25seSAyLjUgR2JzIHN1cHBvcnRlZC4gKi8KKwlsc2UgPSBwaXAtPmxpbmtzcGVlZGFjdGl2ZV9lbmFibGVkICYgMHhGOworCWlmIChsc2UgPj0gMiAmJiBsc2UgPD0gMHhFKQorCQlnb3RvIGVycjsKKworCS8qIFNldCBsaW5rIGRvd24gZGVmYXVsdCBzdGF0ZS4gKi8KKwlzd2l0Y2ggKHBpcC0+cG9ydHBoeXNzdGF0ZV9saW5rZG93biAmIDB4RikgeworCWNhc2UgMDogLyogTk9QICovCisJCWJyZWFrOworCWNhc2UgMTogLyogU0xFRVAgKi8KKwkJaWYgKGlwYXRoX2xheWVyX3NldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkLCAxKSkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwljYXNlIDI6IC8qIFBPTEwgKi8KKwkJaWYgKGlwYXRoX2xheWVyX3NldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkLCAwKSkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGVycjsKKwl9CisKKwlkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jID0gcGlwLT5ta2V5cHJvdF9yZXN2X2xtYzsKKwlkZXYtPnZsX2hpZ2hfbGltaXQgPSBwaXAtPnZsX2hpZ2hfbGltaXQ7CisKKwlzd2l0Y2ggKChwaXAtPm5laWdoYm9ybXR1X21hc3RlcnNtc2wgPj4gNCkgJiAweEYpIHsKKwljYXNlIElCX01UVV8yNTY6CisJCW10dSA9IDI1NjsKKwkJYnJlYWs7CisJY2FzZSBJQl9NVFVfNTEyOgorCQltdHUgPSA1MTI7CisJCWJyZWFrOworCWNhc2UgSUJfTVRVXzEwMjQ6CisJCW10dSA9IDEwMjQ7CisJCWJyZWFrOworCWNhc2UgSUJfTVRVXzIwNDg6CisJCW10dSA9IDIwNDg7CisJCWJyZWFrOworCWNhc2UgSUJfTVRVXzQwOTY6CisJCW10dSA9IDQwOTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFhYWCBXZSBoYXZlIGFscmVhZHkgcGFydGlhbGx5IHVwZGF0ZWQgb3VyIHN0YXRlISAqLworCQlnb3RvIGVycjsKKwl9CisJaXBhdGhfbGF5ZXJfc2V0X210dShkZXYtPmRkLCBtdHUpOworCisJZGV2LT5zbV9zbCA9IHBpcC0+bmVpZ2hib3JtdHVfbWFzdGVyc21zbCAmIDB4RjsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCBWTDAgKi8KKwlpZiAoKChwaXAtPm9wZXJhdGlvbmFsdmxfcGVpX3Blb19mcGlfZnBvID4+IDQpICYgMHhGKSA+IDEpCisJCWdvdG8gZXJyOworCisJaWYgKHBpcC0+bWtleV92aW9sYXRpb25zID09IDApCisJCWRldi0+bWtleV92aW9sYXRpb25zID0gMDsKKworCS8qCisJICogSGFyZHdhcmUgY291bnRlciBjYW4ndCBiZSByZXNldCBzbyBzbmFwc2hvdCBhbmQgc3VidHJhY3QKKwkgKiBsYXRlci4KKwkgKi8KKwlpZiAocGlwLT5wa2V5X3Zpb2xhdGlvbnMgPT0gMCkKKwkJZGV2LT5uX3BrZXlfdmlvbGF0aW9ucyA9CisJCQlpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShkZXYtPmRkKTsKKworCWlmIChwaXAtPnFrZXlfdmlvbGF0aW9ucyA9PSAwKQorCQlkZXYtPnFrZXlfdmlvbGF0aW9ucyA9IDA7CisKKwlpZiAoaXBhdGhfbGF5ZXJfc2V0X3BoeWVycnRocmVzaG9sZCgKKwkJICAgIGRldi0+ZGQsCisJCSAgICAocGlwLT5sb2NhbHBoeWVycm9yc19vdmVycnVuZXJyb3JzID4+IDQpICYgMHhGKSkKKwkJZ290byBlcnI7CisKKwlpZiAoaXBhdGhfbGF5ZXJfc2V0X292ZXJydW50aHJlc2hvbGQoCisJCSAgICBkZXYtPmRkLAorCQkgICAgKHBpcC0+bG9jYWxwaHllcnJvcnNfb3ZlcnJ1bmVycm9ycyAmIDB4RikpKQorCQlnb3RvIGVycjsKKworCWRldi0+c3VibmV0X3RpbWVvdXQgPSBwaXAtPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDFGOworCisJaWYgKHBpcC0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApIHsKKwkJY2xpZW50cmVyZWcgPSAxOworCQlldmVudC5ldmVudCA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJfQorCisJLyoKKwkgKiBEbyB0aGUgcG9ydCBzdGF0ZSBjaGFuZ2Ugbm93IHRoYXQgdGhlIG90aGVyIGxpbmsgcGFyYW1ldGVycworCSAqIGhhdmUgYmVlbiBzZXQuCisJICogQ2hhbmdpbmcgdGhlIHBvcnQgcGh5c2ljYWwgc3RhdGUgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgbGluaworCSAqIGlzIGRvd24gb3IgaXMgYmVpbmcgc2V0IHRvIGRvd24uCisJICovCisJc3RhdGUgPSBwaXAtPmxpbmtzcGVlZF9wb3J0c3RhdGUgJiAweEY7CisJZmxhZ3MgPSBpcGF0aF9sYXllcl9nZXRfZmxhZ3MoZGV2LT5kZCk7CisJbHN0YXRlID0gKHBpcC0+cG9ydHBoeXNzdGF0ZV9saW5rZG93biA+PiA0KSAmIDB4RjsKKwlpZiAobHN0YXRlICYmICEoc3RhdGUgPT0gSUJfUE9SVF9ET1dOIHx8IHN0YXRlID09IElCX1BPUlRfTk9QKSkKKwkJZ290byBlcnI7CisKKwkvKgorCSAqIE9ubHkgc3RhdGUgY2hhbmdlcyBvZiBET1dOLCBBUk0sIGFuZCBBQ1RJVkUgYXJlIHZhbGlkCisJICogYW5kIG11c3QgYmUgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgdG8gdGFrZSBlZmZlY3QgKHNlZSA3LjIuNikuCisJICovCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgSUJfUE9SVF9OT1A6CisJCWlmIChsc3RhdGUgPT0gMCkKKwkJCWJyZWFrOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgSUJfUE9SVF9ET1dOOgorCQlpZiAobHN0YXRlID09IDApCisJCQlpZiAoaXBhdGhfbGF5ZXJfZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKGRldi0+ZGQpKQorCQkJCWxzdGF0ZSA9IElQQVRIX0lCX0xJTktET1dOX1NMRUVQOworCQkJZWxzZQorCQkJCWxzdGF0ZSA9IElQQVRIX0lCX0xJTktET1dOOworCQllbHNlIGlmIChsc3RhdGUgPT0gMSkKKwkJCWxzdGF0ZSA9IElQQVRIX0lCX0xJTktET1dOX1NMRUVQOworCQllbHNlIGlmIChsc3RhdGUgPT0gMikKKwkJCWxzdGF0ZSA9IElQQVRIX0lCX0xJTktET1dOOworCQllbHNlIGlmIChsc3RhdGUgPT0gMykKKwkJCWxzdGF0ZSA9IElQQVRIX0lCX0xJTktET1dOX0RJU0FCTEU7CisJCWVsc2UKKwkJCWdvdG8gZXJyOworCQlpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIGxzdGF0ZSk7CisJCWlmIChmbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpIHsKKwkJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9FUlI7CisJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQl9CisJCWJyZWFrOworCWNhc2UgSUJfUE9SVF9BUk1FRDoKKwkJaWYgKCEoZmxhZ3MgJiAoSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LQUNUSVZFKSkpCisJCQlicmVhazsKKwkJaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShkZXYtPmRkLCBJUEFUSF9JQl9MSU5LQVJNKTsKKwkJaWYgKGZsYWdzICYgSVBBVEhfTElOS0FDVElWRSkgeworCQkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9QT1JUX0VSUjsKKwkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJQl9QT1JUX0FDVElWRToKKwkJaWYgKCEoZmxhZ3MgJiBJUEFUSF9MSU5LQVJNRUQpKQorCQkJYnJlYWs7CisJCWlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoZGV2LT5kZCwgSVBBVEhfSUJfTElOS0FDVElWRSk7CisJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9BQ1RJVkU7CisJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFhYWCBXZSBoYXZlIGFscmVhZHkgcGFydGlhbGx5IHVwZGF0ZWQgb3VyIHN0YXRlISAqLworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSByZWN2X3N1Ym5fZ2V0X3BvcnRpbmZvKHNtcCwgaWJkZXYsIHBvcnQpOworCisJaWYgKGNsaWVudHJlcmVnKQorCQlwaXAtPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gfD0gMHg4MDsKKworCWdvdG8gZG9uZTsKKworZXJyOgorCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCXJldCA9IHJlY3Zfc3Vibl9nZXRfcG9ydGluZm8oc21wLCBpYmRldiwgcG9ydCk7CisKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWN2X3N1Ym5fc2V0X3BrZXl0YWJsZShzdHJ1Y3QgaWJfc21wICpzbXAsCisJCQkJICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCit7CisJdTMyIHN0YXJ0cHggPSAzMiAqIChiZTMyX3RvX2NwdShzbXAtPmF0dHJfbW9kKSAmIDB4ZmZmZik7CisJX19iZTE2ICpwID0gKF9fYmUxNiAqKSBzbXAtPmRhdGE7CisJdTE2ICpxID0gKHUxNiAqKSBzbXAtPmRhdGE7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwl1bnNpZ25lZCBpLCBuID0gaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhkZXYtPmRkKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXFbaV0gPSBiZTE2X3RvX2NwdShwW2ldKTsKKworCWlmIChzdGFydHB4ICE9IDAgfHwKKwkgICAgaXBhdGhfbGF5ZXJfc2V0X3BrZXlzKGRldi0+ZGQsIHEpICE9IDApCisJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCisJcmV0dXJuIHJlY3Zfc3Vibl9nZXRfcGtleXRhYmxlKHNtcCwgaWJkZXYpOworfQorCisjZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX0NPTlRST0wJX19jb25zdGFudF9odG9ucygweDAwMTApCisjZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQorI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSUwkJX19jb25zdGFudF9odG9ucygweDAwMTIpCisjZGVmaW5lIElCX1BNQV9QT1JUX0NPVU5URVJTX0VYVAlfX2NvbnN0YW50X2h0b25zKDB4MDAxRCkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFRfRVhUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFFKQorCitzdHJ1Y3QgaWJfcGVyZiB7CisJdTggYmFzZV92ZXJzaW9uOworCXU4IG1nbXRfY2xhc3M7CisJdTggY2xhc3NfdmVyc2lvbjsKKwl1OCBtZXRob2Q7CisJX19iZTE2IHN0YXR1czsKKwlfX2JlMTYgdW51c2VkOworCV9fYmU2NCB0aWQ7CisJX19iZTE2IGF0dHJfaWQ7CisJX19iZTE2IHJlc3Y7CisJX19iZTMyIGF0dHJfbW9kOworCXU4IHJlc2VydmVkWzQwXTsKKwl1OCBkYXRhWzE5Ml07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGliX3BtYV9jbGFzc3BvcnRpbmZvIHsKKwl1OCBiYXNlX3ZlcnNpb247CisJdTggY2xhc3NfdmVyc2lvbjsKKwlfX2JlMTYgY2FwX21hc2s7CisJdTggcmVzZXJ2ZWRbM107CisJdTggcmVzcF90aW1lX3ZhbHVlOwkvKiBvbmx5IGxvd2VyIDUgYml0cyAqLworCXVuaW9uIGliX2dpZCByZWRpcmVjdF9naWQ7CisJX19iZTMyIHJlZGlyZWN0X3RjX3NsX2ZsOwkvKiA4LCA0LCAyMCBiaXRzIHJlc3BlY3RpdmVseSAqLworCV9fYmUxNiByZWRpcmVjdF9saWQ7CisJX19iZTE2IHJlZGlyZWN0X3BrZXk7CisJX19iZTMyIHJlZGlyZWN0X3FwOwkvKiBvbmx5IGxvd2VyIDI0IGJpdHMgKi8KKwlfX2JlMzIgcmVkaXJlY3RfcWtleTsKKwl1bmlvbiBpYl9naWQgdHJhcF9naWQ7CisJX19iZTMyIHRyYXBfdGNfc2xfZmw7CS8qIDgsIDQsIDIwIGJpdHMgcmVzcGVjdGl2ZWx5ICovCisJX19iZTE2IHRyYXBfbGlkOworCV9fYmUxNiB0cmFwX3BrZXk7CisJX19iZTMyIHRyYXBfaGxfcXA7CS8qIDgsIDI0IGJpdHMgcmVzcGVjdGl2ZWx5ICovCisJX19iZTMyIHRyYXBfcWtleTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzY29udHJvbCB7CisJdTggb3Bjb2RlOworCXU4IHBvcnRfc2VsZWN0OworCXU4IHRpY2s7CisJdTggY291bnRlcl93aWR0aDsJLyogb25seSBsb3dlciAzIGJpdHMgKi8KKwlfX2JlMzIgY291bnRlcl9tYXNrMF85OwkvKiAyLCAxMCAqIDMsIGJpdHMgKi8KKwlfX2JlMTYgY291bnRlcl9tYXNrMTBfMTQ7CS8qIDEsIDUgKiAzLCBiaXRzICovCisJdTggc2FtcGxlX21lY2hhbmlzbXM7CisJdTggc2FtcGxlX3N0YXR1czsJLyogb25seSBsb3dlciAyIGJpdHMgKi8KKwlfX2JlNjQgb3B0aW9uX21hc2s7CisJX19iZTY0IHZlbmRvcl9tYXNrOworCV9fYmUzMiBzYW1wbGVfc3RhcnQ7CisJX19iZTMyIHNhbXBsZV9pbnRlcnZhbDsKKwlfX2JlMTYgdGFnOworCV9fYmUxNiBjb3VudGVyX3NlbGVjdFsxNV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGliX3BtYV9wb3J0c2FtcGxlc3Jlc3VsdCB7CisJX19iZTE2IHRhZzsKKwlfX2JlMTYgc2FtcGxlX3N0YXR1czsJLyogb25seSBsb3dlciAyIGJpdHMgKi8KKwlfX2JlMzIgY291bnRlclsxNV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGliX3BtYV9wb3J0c2FtcGxlc3Jlc3VsdF9leHQgeworCV9fYmUxNiB0YWc7CisJX19iZTE2IHNhbXBsZV9zdGF0dXM7CS8qIG9ubHkgbG93ZXIgMiBiaXRzICovCisJX19iZTMyIGV4dGVuZGVkX3dpZHRoOwkvKiBvbmx5IHVwcGVyIDIgYml0cyAqLworCV9fYmU2NCBjb3VudGVyWzE1XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVycyB7CisJdTggcmVzZXJ2ZWQ7CisJdTggcG9ydF9zZWxlY3Q7CisJX19iZTE2IGNvdW50ZXJfc2VsZWN0OworCV9fYmUxNiBzeW1ib2xfZXJyb3JfY291bnRlcjsKKwl1OCBsaW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CisJdTggbGlua19kb3duZWRfY291bnRlcjsKKwlfX2JlMTYgcG9ydF9yY3ZfZXJyb3JzOworCV9fYmUxNiBwb3J0X3Jjdl9yZW1waHlzX2Vycm9yczsKKwlfX2JlMTYgcG9ydF9yY3Zfc3dpdGNoX3JlbGF5X2Vycm9yczsKKwlfX2JlMTYgcG9ydF94bWl0X2Rpc2NhcmRzOworCXU4IHBvcnRfeG1pdF9jb25zdHJhaW50X2Vycm9yczsKKwl1OCBwb3J0X3Jjdl9jb25zdHJhaW50X2Vycm9yczsKKwl1OCByZXNlcnZlZDE7CisJdTggbGxpX2Vib3JfZXJyb3JzOwkvKiA0LCA0LCBiaXRzICovCisJX19iZTE2IHJlc2VydmVkMjsKKwlfX2JlMTYgdmwxNV9kcm9wcGVkOworCV9fYmUzMiBwb3J0X3htaXRfZGF0YTsKKwlfX2JlMzIgcG9ydF9yY3ZfZGF0YTsKKwlfX2JlMzIgcG9ydF94bWl0X3BhY2tldHM7CisJX19iZTMyIHBvcnRfcmN2X3BhY2tldHM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBJQl9QTUFfU0VMX1NZTUJPTF9FUlJPUgkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRVJST1JfUkVDT1ZFUlkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRE9XTkVECQkJX19jb25zdGFudF9odG9ucygweDAwMDQpCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfRVJST1JTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUwlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfRElTQ0FSRFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDQwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MTAwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MjAwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDQwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDgwMDApCisKK3N0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzX2V4dCB7CisJdTggcmVzZXJ2ZWQ7CisJdTggcG9ydF9zZWxlY3Q7CisJX19iZTE2IGNvdW50ZXJfc2VsZWN0OworCV9fYmUzMiByZXNlcnZlZDE7CisJX19iZTY0IHBvcnRfeG1pdF9kYXRhOworCV9fYmU2NCBwb3J0X3Jjdl9kYXRhOworCV9fYmU2NCBwb3J0X3htaXRfcGFja2V0czsKKwlfX2JlNjQgcG9ydF9yY3ZfcGFja2V0czsKKwlfX2JlNjQgcG9ydF91bmljYXN0X3htaXRfcGFja2V0czsKKwlfX2JlNjQgcG9ydF91bmljYXN0X3Jjdl9wYWNrZXRzOworCV9fYmU2NCBwb3J0X211bHRpY2FzdF94bWl0X3BhY2tldHM7CisJX19iZTY0IHBvcnRfbXVsdGljYXN0X3Jjdl9wYWNrZXRzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9QQUNLRVRTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9VTklfWE1JVF9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9SQ1ZfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAyMCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9YTUlUX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwNDApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfUkNWX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwODApCisKK3N0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X2NsYXNzcG9ydGluZm8oc3RydWN0IGliX3BlcmYgKnBtcCkKK3sKKwlzdHJ1Y3QgaWJfcG1hX2NsYXNzcG9ydGluZm8gKnAgPQorCQkoc3RydWN0IGliX3BtYV9jbGFzc3BvcnRpbmZvICopcG1wLT5kYXRhOworCisJbWVtc2V0KHBtcC0+ZGF0YSwgMCwgc2l6ZW9mKHBtcC0+ZGF0YSkpOworCisJaWYgKHBtcC0+YXR0cl9tb2QgIT0gMCkKKwkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisKKwkvKiBJbmRpY2F0ZSBBbGxQb3J0U2VsZWN0IGlzIHZhbGlkIChvbmx5IG9uZSBwb3J0IGFueXdheSkgKi8KKwlwLT5jYXBfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMSA8PCA4KTsKKwlwLT5iYXNlX3ZlcnNpb24gPSAxOworCXAtPmNsYXNzX3ZlcnNpb24gPSAxOworCS8qCisJICogRXhwZWN0ZWQgcmVzcG9uc2UgdGltZSBpcyA0LjA5NiB1c2VjLiAqIDJeMTggPT0gMS4wNzM3NDE4MjQKKwkgKiBzZWMuCisJICovCisJcC0+cmVzcF90aW1lX3ZhbHVlID0gMTg7CisKKwlyZXR1cm4gcmVwbHkoKHN0cnVjdCBpYl9zbXAgKikgcG1wKTsKK30KKworLyoKKyAqIFRoZSBQb3J0U2FtcGxlc0NvbnRyb2wuQ291bnRlck1hc2tzIGZpZWxkIGlzIGFuIGFycmF5IG9mIDMgYml0IGZpZWxkcworICogd2hpY2ggc3BlY2lmeSB0aGUgTid0aCBjb3VudGVyJ3MgY2FwYWJpbGl0aWVzLiBTZWUgY2guIDE2LjEuMy4yLgorICogV2Ugc3VwcG9ydCA1IGNvdW50ZXJzIHdoaWNoIG9ubHkgY291bnQgdGhlIG1hbmRhdG9yeSBxdWFudGl0aWVzLgorICovCisjZGVmaW5lIENPVU5URVJfTUFTSyhxLCBuKSAocSA8PCAoKDkgLSBuKSAqIDMpKQorI2RlZmluZSBDT1VOVEVSX01BU0swXzkgXAorCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoQ09VTlRFUl9NQVNLKDEsIDApIHwgXAorCQkJICAgICAgIENPVU5URVJfTUFTSygxLCAxKSB8IFwKKwkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgMikgfCBcCisJCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDMpIHwgXAorCQkJICAgICAgIENPVU5URVJfTUFTSygxLCA0KSkKKworc3RhdGljIGludCByZWN2X3BtYV9nZXRfcG9ydHNhbXBsZXNjb250cm9sKHN0cnVjdCBpYl9wZXJmICpwbXAsCisJCQkJCSAgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQoreworCXN0cnVjdCBpYl9wbWFfcG9ydHNhbXBsZXNjb250cm9sICpwID0KKwkJKHN0cnVjdCBpYl9wbWFfcG9ydHNhbXBsZXNjb250cm9sICopcG1wLT5kYXRhOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBwb3J0X3NlbGVjdCA9IHAtPnBvcnRfc2VsZWN0OworCisJbWVtc2V0KHBtcC0+ZGF0YSwgMCwgc2l6ZW9mKHBtcC0+ZGF0YSkpOworCisJcC0+cG9ydF9zZWxlY3QgPSBwb3J0X3NlbGVjdDsKKwlpZiAocG1wLT5hdHRyX21vZCAhPSAwIHx8CisJICAgIChwb3J0X3NlbGVjdCAhPSBwb3J0ICYmIHBvcnRfc2VsZWN0ICE9IDB4RkYpKQorCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKwkvKgorCSAqIFRpY2tzIGFyZSAxMHggdGhlIGxpbmsgdHJhbnNmZXIgcGVyaW9kIHdoaWNoIGZvciAyLjVHYnMgaXMgNAorCSAqIG5zZWMuICAwID09IDQgbnNlYy4sIDEgPT0gOCBuc2VjLiwgLi4uLCAyNTUgPT0gMTAyMCBuc2VjLiAgU2FtcGxlCisJICogaW50ZXJ2YWxzIGFyZSBjb3VudGVkIGluIHRpY2tzLiAgU2luY2Ugd2UgdXNlIExpbnV4IHRpbWVycywgdGhhdAorCSAqIGNvdW50IGluIGppZmZpZXMsIHdlIGNhbid0IHNhbXBsZSBmb3IgbGVzcyB0aGFuIDEwMDAgdGlja3MgaWYgSFoKKwkgKiA9PSAxMDAwICg0MDAwIHRpY2tzIGlmIEhaIGlzIDI1MCkuCisJICovCisJLyogWFhYIFRoaXMgaXMgV1JPTkcuICovCisJcC0+dGljayA9IDI1MDsJCS8qIDEgdXNlYy4gKi8KKwlwLT5jb3VudGVyX3dpZHRoID0gNDsJLyogMzIgYml0IGNvdW50ZXJzICovCisJcC0+Y291bnRlcl9tYXNrMF85ID0gQ09VTlRFUl9NQVNLMF85OworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCXAtPnNhbXBsZV9zdGF0dXMgPSBkZXYtPnBtYV9zYW1wbGVfc3RhdHVzOworCXAtPnNhbXBsZV9zdGFydCA9IGNwdV90b19iZTMyKGRldi0+cG1hX3NhbXBsZV9zdGFydCk7CisJcC0+c2FtcGxlX2ludGVydmFsID0gY3B1X3RvX2JlMzIoZGV2LT5wbWFfc2FtcGxlX2ludGVydmFsKTsKKwlwLT50YWcgPSBjcHVfdG9fYmUxNihkZXYtPnBtYV90YWcpOworCXAtPmNvdW50ZXJfc2VsZWN0WzBdID0gZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbMF07CisJcC0+Y291bnRlcl9zZWxlY3RbMV0gPSBkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFsxXTsKKwlwLT5jb3VudGVyX3NlbGVjdFsyXSA9IGRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzJdOworCXAtPmNvdW50ZXJfc2VsZWN0WzNdID0gZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbM107CisJcC0+Y291bnRlcl9zZWxlY3RbNF0gPSBkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFs0XTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9wbWFfc2V0X3BvcnRzYW1wbGVzY29udHJvbChzdHJ1Y3QgaWJfcGVyZiAqcG1wLAorCQkJCQkgICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKK3sKKwlzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzY29udHJvbCAqcCA9CisJCShzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzY29udHJvbCAqKXBtcC0+ZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHN0YXJ0OworCWludCByZXQ7CisKKwlpZiAocG1wLT5hdHRyX21vZCAhPSAwIHx8CisJICAgIChwLT5wb3J0X3NlbGVjdCAhPSBwb3J0ICYmIHAtPnBvcnRfc2VsZWN0ICE9IDB4RkYpKSB7CisJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCQlyZXQgPSByZXBseSgoc3RydWN0IGliX3NtcCAqKSBwbXApOworCQlnb3RvIGJhaWw7CisJfQorCisJc3RhcnQgPSBiZTMyX3RvX2NwdShwLT5zYW1wbGVfc3RhcnQpOworCWlmIChzdGFydCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCQlpZiAoZGV2LT5wbWFfc2FtcGxlX3N0YXR1cyA9PSBJQl9QTUFfU0FNUExFX1NUQVRVU19ET05FKSB7CisJCQlkZXYtPnBtYV9zYW1wbGVfc3RhdHVzID0KKwkJCQlJQl9QTUFfU0FNUExFX1NUQVRVU19TVEFSVEVEOworCQkJZGV2LT5wbWFfc2FtcGxlX3N0YXJ0ID0gc3RhcnQ7CisJCQlkZXYtPnBtYV9zYW1wbGVfaW50ZXJ2YWwgPQorCQkJCWJlMzJfdG9fY3B1KHAtPnNhbXBsZV9pbnRlcnZhbCk7CisJCQlkZXYtPnBtYV90YWcgPSBiZTE2X3RvX2NwdShwLT50YWcpOworCQkJaWYgKHAtPmNvdW50ZXJfc2VsZWN0WzBdKQorCQkJCWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzBdID0KKwkJCQkJcC0+Y291bnRlcl9zZWxlY3RbMF07CisJCQlpZiAocC0+Y291bnRlcl9zZWxlY3RbMV0pCisJCQkJZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbMV0gPQorCQkJCQlwLT5jb3VudGVyX3NlbGVjdFsxXTsKKwkJCWlmIChwLT5jb3VudGVyX3NlbGVjdFsyXSkKKwkJCQlkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFsyXSA9CisJCQkJCXAtPmNvdW50ZXJfc2VsZWN0WzJdOworCQkJaWYgKHAtPmNvdW50ZXJfc2VsZWN0WzNdKQorCQkJCWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzNdID0KKwkJCQkJcC0+Y291bnRlcl9zZWxlY3RbM107CisJCQlpZiAocC0+Y291bnRlcl9zZWxlY3RbNF0pCisJCQkJZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbNF0gPQorCQkJCQlwLT5jb3VudGVyX3NlbGVjdFs0XTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCX0KKwlyZXQgPSByZWN2X3BtYV9nZXRfcG9ydHNhbXBsZXNjb250cm9sKHBtcCwgaWJkZXYsIHBvcnQpOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1NjQgZ2V0X2NvdW50ZXIoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIF9fYmUxNiBzZWwpCit7CisJdTY0IHJldDsKKworCXN3aXRjaCAoc2VsKSB7CisJY2FzZSBJQl9QTUFfUE9SVF9YTUlUX0RBVEE6CisJCXJldCA9IGRldi0+aXBhdGhfc3dvcmQ7CisJCWJyZWFrOworCWNhc2UgSUJfUE1BX1BPUlRfUkNWX0RBVEE6CisJCXJldCA9IGRldi0+aXBhdGhfcndvcmQ7CisJCWJyZWFrOworCWNhc2UgSUJfUE1BX1BPUlRfWE1JVF9QS1RTOgorCQlyZXQgPSBkZXYtPmlwYXRoX3Nwa3RzOworCQlicmVhazsKKwljYXNlIElCX1BNQV9QT1JUX1JDVl9QS1RTOgorCQlyZXQgPSBkZXYtPmlwYXRoX3Jwa3RzOworCQlicmVhazsKKwljYXNlIElCX1BNQV9QT1JUX1hNSVRfV0FJVDoKKwkJcmV0ID0gZGV2LT5pcGF0aF94bWl0X3dhaXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWN2X3BtYV9nZXRfcG9ydHNhbXBsZXNyZXN1bHQoc3RydWN0IGliX3BlcmYgKnBtcCwKKwkJCQkJICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKK3sKKwlzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzcmVzdWx0ICpwID0KKwkJKHN0cnVjdCBpYl9wbWFfcG9ydHNhbXBsZXNyZXN1bHQgKilwbXAtPmRhdGE7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwlpbnQgaTsKKworCW1lbXNldChwbXAtPmRhdGEsIDAsIHNpemVvZihwbXAtPmRhdGEpKTsKKwlwLT50YWcgPSBjcHVfdG9fYmUxNihkZXYtPnBtYV90YWcpOworCXAtPnNhbXBsZV9zdGF0dXMgPSBjcHVfdG9fYmUxNihkZXYtPnBtYV9zYW1wbGVfc3RhdHVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXYtPnBtYV9jb3VudGVyX3NlbGVjdCk7IGkrKykKKwkJcC0+Y291bnRlcltpXSA9IGNwdV90b19iZTMyKAorCQkJZ2V0X2NvdW50ZXIoZGV2LCBkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFtpXSkpOworCisJcmV0dXJuIHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzcmVzdWx0X2V4dChzdHJ1Y3QgaWJfcGVyZiAqcG1wLAorCQkJCQkgICAgICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKK3sKKwlzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzcmVzdWx0X2V4dCAqcCA9CisJCShzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzcmVzdWx0X2V4dCAqKXBtcC0+ZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCWludCBpOworCisJbWVtc2V0KHBtcC0+ZGF0YSwgMCwgc2l6ZW9mKHBtcC0+ZGF0YSkpOworCXAtPnRhZyA9IGNwdV90b19iZTE2KGRldi0+cG1hX3RhZyk7CisJcC0+c2FtcGxlX3N0YXR1cyA9IGNwdV90b19iZTE2KGRldi0+cG1hX3NhbXBsZV9zdGF0dXMpOworCS8qIDY0IGJpdHMgKi8KKwlwLT5leHRlbmRlZF93aWR0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHg4MDAwMDAwMCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2LT5wbWFfY291bnRlcl9zZWxlY3QpOyBpKyspCisJCXAtPmNvdW50ZXJbaV0gPSBjcHVfdG9fYmU2NCgKKwkJCWdldF9jb3VudGVyKGRldiwgZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbaV0pKTsKKworCXJldHVybiByZXBseSgoc3RydWN0IGliX3NtcCAqKSBwbXApOworfQorCitzdGF0aWMgaW50IHJlY3ZfcG1hX2dldF9wb3J0Y291bnRlcnMoc3RydWN0IGliX3BlcmYgKnBtcCwKKwkJCQkgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQoreworCXN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzICpwID0gKHN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzICopCisJCXBtcC0+ZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCXN0cnVjdCBpcGF0aF9sYXllcl9jb3VudGVycyBjbnRyczsKKwl1OCBwb3J0X3NlbGVjdCA9IHAtPnBvcnRfc2VsZWN0OworCisJaXBhdGhfbGF5ZXJfZ2V0X2NvdW50ZXJzKGRldi0+ZGQsICZjbnRycyk7CisKKwkvKiBBZGp1c3QgY291bnRlcnMgZm9yIGFueSByZXNldHMgZG9uZS4gKi8KKwljbnRycy5zeW1ib2xfZXJyb3JfY291bnRlciAtPSBkZXYtPm5fc3ltYm9sX2Vycm9yX2NvdW50ZXI7CisJY250cnMubGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyIC09CisJCWRldi0+bl9saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CisJY250cnMubGlua19kb3duZWRfY291bnRlciAtPSBkZXYtPm5fbGlua19kb3duZWRfY291bnRlcjsKKwljbnRycy5wb3J0X3Jjdl9lcnJvcnMgKz0gZGV2LT5yY3ZfZXJyb3JzOworCWNudHJzLnBvcnRfcmN2X2Vycm9ycyAtPSBkZXYtPm5fcG9ydF9yY3ZfZXJyb3JzOworCWNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzIC09IGRldi0+bl9wb3J0X3Jjdl9yZW1waHlzX2Vycm9yczsKKwljbnRycy5wb3J0X3htaXRfZGlzY2FyZHMgLT0gZGV2LT5uX3BvcnRfeG1pdF9kaXNjYXJkczsKKwljbnRycy5wb3J0X3htaXRfZGF0YSAtPSBkZXYtPm5fcG9ydF94bWl0X2RhdGE7CisJY250cnMucG9ydF9yY3ZfZGF0YSAtPSBkZXYtPm5fcG9ydF9yY3ZfZGF0YTsKKwljbnRycy5wb3J0X3htaXRfcGFja2V0cyAtPSBkZXYtPm5fcG9ydF94bWl0X3BhY2tldHM7CisJY250cnMucG9ydF9yY3ZfcGFja2V0cyAtPSBkZXYtPm5fcG9ydF9yY3ZfcGFja2V0czsKKworCW1lbXNldChwbXAtPmRhdGEsIDAsIHNpemVvZihwbXAtPmRhdGEpKTsKKworCXAtPnBvcnRfc2VsZWN0ID0gcG9ydF9zZWxlY3Q7CisJaWYgKHBtcC0+YXR0cl9tb2QgIT0gMCB8fAorCSAgICAocG9ydF9zZWxlY3QgIT0gcG9ydCAmJiBwb3J0X3NlbGVjdCAhPSAweEZGKSkKKwkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisKKwlpZiAoY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXIgPiAweEZGRkZVTCkKKwkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJZWxzZQorCQlwLT5zeW1ib2xfZXJyb3JfY291bnRlciA9CisJCQljcHVfdG9fYmUxNigodTE2KWNudHJzLnN5bWJvbF9lcnJvcl9jb3VudGVyKTsKKwlpZiAoY250cnMubGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyID4gMHhGRlVMKQorCQlwLT5saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXIgPSAweEZGOworCWVsc2UKKwkJcC0+bGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyID0KKwkJCSh1OCljbnRycy5saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CisJaWYgKGNudHJzLmxpbmtfZG93bmVkX2NvdW50ZXIgPiAweEZGVUwpCisJCXAtPmxpbmtfZG93bmVkX2NvdW50ZXIgPSAweEZGOworCWVsc2UKKwkJcC0+bGlua19kb3duZWRfY291bnRlciA9ICh1OCljbnRycy5saW5rX2Rvd25lZF9jb3VudGVyOworCWlmIChjbnRycy5wb3J0X3Jjdl9lcnJvcnMgPiAweEZGRkZVTCkKKwkJcC0+cG9ydF9yY3ZfZXJyb3JzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCWVsc2UKKwkJcC0+cG9ydF9yY3ZfZXJyb3JzID0KKwkJCWNwdV90b19iZTE2KCh1MTYpIGNudHJzLnBvcnRfcmN2X2Vycm9ycyk7CisJaWYgKGNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID4gMHhGRkZGVUwpCisJCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCWVsc2UKKwkJcC0+cG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPQorCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyk7CisJaWYgKGNudHJzLnBvcnRfeG1pdF9kaXNjYXJkcyA+IDB4RkZGRlVMKQorCQlwLT5wb3J0X3htaXRfZGlzY2FyZHMgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJZWxzZQorCQlwLT5wb3J0X3htaXRfZGlzY2FyZHMgPQorCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5wb3J0X3htaXRfZGlzY2FyZHMpOworCWlmIChjbnRycy5wb3J0X3htaXRfZGF0YSA+IDB4RkZGRkZGRkZVTCkKKwkJcC0+cG9ydF94bWl0X2RhdGEgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4RkZGRkZGRkYpOworCWVsc2UKKwkJcC0+cG9ydF94bWl0X2RhdGEgPSBjcHVfdG9fYmUzMigodTMyKWNudHJzLnBvcnRfeG1pdF9kYXRhKTsKKwlpZiAoY250cnMucG9ydF9yY3ZfZGF0YSA+IDB4RkZGRkZGRkZVTCkKKwkJcC0+cG9ydF9yY3ZfZGF0YSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJZWxzZQorCQlwLT5wb3J0X3Jjdl9kYXRhID0gY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3Jjdl9kYXRhKTsKKwlpZiAoY250cnMucG9ydF94bWl0X3BhY2tldHMgPiAweEZGRkZGRkZGVUwpCisJCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwllbHNlCisJCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0KKwkJCWNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF94bWl0X3BhY2tldHMpOworCWlmIChjbnRycy5wb3J0X3Jjdl9wYWNrZXRzID4gMHhGRkZGRkZGRlVMKQorCQlwLT5wb3J0X3Jjdl9wYWNrZXRzID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwllbHNlCisJCXAtPnBvcnRfcmN2X3BhY2tldHMgPQorCQkJY3B1X3RvX2JlMzIoKHUzMikgY250cnMucG9ydF9yY3ZfcGFja2V0cyk7CisKKwlyZXR1cm4gcmVwbHkoKHN0cnVjdCBpYl9zbXAgKikgcG1wKTsKK30KKworc3RhdGljIGludCByZWN2X3BtYV9nZXRfcG9ydGNvdW50ZXJzX2V4dChzdHJ1Y3QgaWJfcGVyZiAqcG1wLAorCQkJCQkgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCit7CisJc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnNfZXh0ICpwID0KKwkJKHN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzX2V4dCAqKXBtcC0+ZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCXU2NCBzd29yZHMsIHJ3b3Jkcywgc3BrdHMsIHJwa3RzLCB4d2FpdDsKKwl1OCBwb3J0X3NlbGVjdCA9IHAtPnBvcnRfc2VsZWN0OworCisJaXBhdGhfbGF5ZXJfc25hcHNob3RfY291bnRlcnMoZGV2LT5kZCwgJnN3b3JkcywgJnJ3b3JkcywgJnNwa3RzLAorCQkJCSAgICAgICZycGt0cywgJnh3YWl0KTsKKworCS8qIEFkanVzdCBjb3VudGVycyBmb3IgYW55IHJlc2V0cyBkb25lLiAqLworCXN3b3JkcyAtPSBkZXYtPm5fcG9ydF94bWl0X2RhdGE7CisJcndvcmRzIC09IGRldi0+bl9wb3J0X3Jjdl9kYXRhOworCXNwa3RzIC09IGRldi0+bl9wb3J0X3htaXRfcGFja2V0czsKKwlycGt0cyAtPSBkZXYtPm5fcG9ydF9yY3ZfcGFja2V0czsKKworCW1lbXNldChwbXAtPmRhdGEsIDAsIHNpemVvZihwbXAtPmRhdGEpKTsKKworCXAtPnBvcnRfc2VsZWN0ID0gcG9ydF9zZWxlY3Q7CisJaWYgKHBtcC0+YXR0cl9tb2QgIT0gMCB8fAorCSAgICAocG9ydF9zZWxlY3QgIT0gcG9ydCAmJiBwb3J0X3NlbGVjdCAhPSAweEZGKSkKKwkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisKKwlwLT5wb3J0X3htaXRfZGF0YSA9IGNwdV90b19iZTY0KHN3b3Jkcyk7CisJcC0+cG9ydF9yY3ZfZGF0YSA9IGNwdV90b19iZTY0KHJ3b3Jkcyk7CisJcC0+cG9ydF94bWl0X3BhY2tldHMgPSBjcHVfdG9fYmU2NChzcGt0cyk7CisJcC0+cG9ydF9yY3ZfcGFja2V0cyA9IGNwdV90b19iZTY0KHJwa3RzKTsKKwlwLT5wb3J0X3VuaWNhc3RfeG1pdF9wYWNrZXRzID0gY3B1X3RvX2JlNjQoZGV2LT5uX3VuaWNhc3RfeG1pdCk7CisJcC0+cG9ydF91bmljYXN0X3Jjdl9wYWNrZXRzID0gY3B1X3RvX2JlNjQoZGV2LT5uX3VuaWNhc3RfcmN2KTsKKwlwLT5wb3J0X211bHRpY2FzdF94bWl0X3BhY2tldHMgPSBjcHVfdG9fYmU2NChkZXYtPm5fbXVsdGljYXN0X3htaXQpOworCXAtPnBvcnRfbXVsdGljYXN0X3Jjdl9wYWNrZXRzID0gY3B1X3RvX2JlNjQoZGV2LT5uX211bHRpY2FzdF9yY3YpOworCisJcmV0dXJuIHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9wbWFfc2V0X3BvcnRjb3VudGVycyhzdHJ1Y3QgaWJfcGVyZiAqcG1wLAorCQkJCSAgICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCit7CisJc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnMgKnAgPSAoc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnMgKikKKwkJcG1wLT5kYXRhOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzIGNudHJzOworCisJLyoKKwkgKiBTaW5jZSB0aGUgSFcgZG9lc24ndCBzdXBwb3J0IGNsZWFyaW5nIGNvdW50ZXJzLCB3ZSBzYXZlIHRoZQorCSAqIGN1cnJlbnQgY291bnQgYW5kIHN1YnRyYWN0IGl0IGZyb20gZnV0dXJlIHJlc3BvbnNlcy4KKwkgKi8KKwlpcGF0aF9sYXllcl9nZXRfY291bnRlcnMoZGV2LT5kZCwgJmNudHJzKTsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxfU1lNQk9MX0VSUk9SKQorCQlkZXYtPm5fc3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBjbnRycy5zeW1ib2xfZXJyb3JfY291bnRlcjsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxfTElOS19FUlJPUl9SRUNPVkVSWSkKKwkJZGV2LT5uX2xpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA9CisJCQljbnRycy5saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX0xJTktfRE9XTkVEKQorCQlkZXYtPm5fbGlua19kb3duZWRfY291bnRlciA9IGNudHJzLmxpbmtfZG93bmVkX2NvdW50ZXI7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfUkNWX0VSUk9SUykKKwkJZGV2LT5uX3BvcnRfcmN2X2Vycm9ycyA9CisJCQljbnRycy5wb3J0X3Jjdl9lcnJvcnMgKyBkZXYtPnJjdl9lcnJvcnM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfUkNWX1JFTVBIWVNfRVJST1JTKQorCQlkZXYtPm5fcG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPQorCQkJY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfWE1JVF9ESVNDQVJEUykKKwkJZGV2LT5uX3BvcnRfeG1pdF9kaXNjYXJkcyA9IGNudHJzLnBvcnRfeG1pdF9kaXNjYXJkczsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RBVEEpCisJCWRldi0+bl9wb3J0X3htaXRfZGF0YSA9IGNudHJzLnBvcnRfeG1pdF9kYXRhOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9QT1JUX1JDVl9EQVRBKQorCQlkZXYtPm5fcG9ydF9yY3ZfZGF0YSA9IGNudHJzLnBvcnRfcmN2X2RhdGE7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfWE1JVF9QQUNLRVRTKQorCQlkZXYtPm5fcG9ydF94bWl0X3BhY2tldHMgPSBjbnRycy5wb3J0X3htaXRfcGFja2V0czsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUEFDS0VUUykKKwkJZGV2LT5uX3BvcnRfcmN2X3BhY2tldHMgPSBjbnRycy5wb3J0X3Jjdl9wYWNrZXRzOworCisJcmV0dXJuIHJlY3ZfcG1hX2dldF9wb3J0Y291bnRlcnMocG1wLCBpYmRldiwgcG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9wbWFfc2V0X3BvcnRjb3VudGVyc19leHQoc3RydWN0IGliX3BlcmYgKnBtcCwKKwkJCQkJIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQoreworCXN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzICpwID0gKHN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzICopCisJCXBtcC0+ZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCXU2NCBzd29yZHMsIHJ3b3Jkcywgc3BrdHMsIHJwa3RzLCB4d2FpdDsKKworCWlwYXRoX2xheWVyX3NuYXBzaG90X2NvdW50ZXJzKGRldi0+ZGQsICZzd29yZHMsICZyd29yZHMsICZzcGt0cywKKwkJCQkgICAgICAmcnBrdHMsICZ4d2FpdCk7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfREFUQSkKKwkJZGV2LT5uX3BvcnRfeG1pdF9kYXRhID0gc3dvcmRzOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfREFUQSkKKwkJZGV2LT5uX3BvcnRfcmN2X2RhdGEgPSByd29yZHM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfUEFDS0VUUykKKwkJZGV2LT5uX3BvcnRfeG1pdF9wYWNrZXRzID0gc3BrdHM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMWF9QT1JUX1JDVl9QQUNLRVRTKQorCQlkZXYtPm5fcG9ydF9yY3ZfcGFja2V0cyA9IHJwa3RzOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9VTklfWE1JVF9QQUNLRVRTKQorCQlkZXYtPm5fdW5pY2FzdF94bWl0ID0gMDsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxYX1BPUlRfVU5JX1JDVl9QQUNLRVRTKQorCQlkZXYtPm5fdW5pY2FzdF9yY3YgPSAwOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9YTUlUX1BBQ0tFVFMpCisJCWRldi0+bl9tdWx0aWNhc3RfeG1pdCA9IDA7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1JDVl9QQUNLRVRTKQorCQlkZXYtPm5fbXVsdGljYXN0X3JjdiA9IDA7CisKKwlyZXR1cm4gcmVjdl9wbWFfZ2V0X3BvcnRjb3VudGVyc19leHQocG1wLCBpYmRldiwgcG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19zdWJuKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBpbnQgbWFkX2ZsYWdzLAorCQkJdTggcG9ydF9udW0sIHN0cnVjdCBpYl9tYWQgKmluX21hZCwKKwkJCXN0cnVjdCBpYl9tYWQgKm91dF9tYWQpCit7CisJc3RydWN0IGliX3NtcCAqc21wID0gKHN0cnVjdCBpYl9zbXAgKilvdXRfbWFkOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJaW50IHJldDsKKworCSpvdXRfbWFkID0gKmluX21hZDsKKwlpZiAoc21wLT5jbGFzc192ZXJzaW9uICE9IDEpIHsKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX1VOU1VQX1ZFUlNJT047CisJCXJldCA9IHJlcGx5KHNtcCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBJcyB0aGUgbWtleSBpbiB0aGUgcHJvY2VzcyBvZiBleHBpcmluZz8gKi8KKwlpZiAoZGV2LT5ta2V5X2xlYXNlX3RpbWVvdXQgJiYgamlmZmllcyA+PSBkZXYtPm1rZXlfbGVhc2VfdGltZW91dCkgeworCQkvKiBDbGVhciB0aW1lb3V0IGFuZCBta2V5IHByb3RlY3Rpb24gZmllbGQuICovCisJCWRldi0+bWtleV9sZWFzZV90aW1lb3V0ID0gMDsKKwkJZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyAmPSAweDNGOworCX0KKworCS8qCisJICogTV9LZXkgY2hlY2tpbmcgZGVwZW5kcyBvbgorCSAqIFBvcnRpbmZvOk1fS2V5X3Byb3RlY3RfYml0cworCSAqLworCWlmICgobWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9NS0VZKSA9PSAwICYmIGRldi0+bWtleSAhPSAwICYmCisJICAgIGRldi0+bWtleSAhPSBzbXAtPm1rZXkgJiYKKwkgICAgKHNtcC0+bWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCB8fAorCSAgICAgKHNtcC0+bWV0aG9kID09IElCX01HTVRfTUVUSE9EX0dFVCAmJgorCSAgICAgIChkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jID4+IDcpICE9IDApKSkgeworCQlpZiAoZGV2LT5ta2V5X3Zpb2xhdGlvbnMgIT0gMHhGRkZGKQorCQkJKytkZXYtPm1rZXlfdmlvbGF0aW9uczsKKwkJaWYgKGRldi0+bWtleV9sZWFzZV90aW1lb3V0IHx8CisJCSAgICBkZXYtPm1rZXlfbGVhc2VfcGVyaW9kID09IDApIHsKKwkJCXJldCA9IElCX01BRF9SRVNVTFRfU1VDQ0VTUyB8CisJCQkJSUJfTUFEX1JFU1VMVF9DT05TVU1FRDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlkZXYtPm1rZXlfbGVhc2VfdGltZW91dCA9IGppZmZpZXMgKworCQkJZGV2LT5ta2V5X2xlYXNlX3BlcmlvZCAqIEhaOworCQkvKiBGdXR1cmU6IEdlbmVyYXRlIGEgdHJhcCBub3RpY2UuICovCisJCXJldCA9IElCX01BRF9SRVNVTFRfU1VDQ0VTUyB8IElCX01BRF9SRVNVTFRfQ09OU1VNRUQ7CisJCWdvdG8gYmFpbDsKKwl9IGVsc2UgaWYgKGRldi0+bWtleV9sZWFzZV90aW1lb3V0KQorCQlkZXYtPm1rZXlfbGVhc2VfdGltZW91dCA9IDA7CisKKwlzd2l0Y2ggKHNtcC0+bWV0aG9kKSB7CisJY2FzZSBJQl9NR01UX01FVEhPRF9HRVQ6CisJCXN3aXRjaCAoc21wLT5hdHRyX2lkKSB7CisJCWNhc2UgSUJfU01QX0FUVFJfTk9ERV9ERVNDOgorCQkJcmV0ID0gcmVjdl9zdWJuX2dldF9ub2RlZGVzY3JpcHRpb24oc21wLCBpYmRldik7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfU01QX0FUVFJfTk9ERV9JTkZPOgorCQkJcmV0ID0gcmVjdl9zdWJuX2dldF9ub2RlaW5mbyhzbXAsIGliZGV2LCBwb3J0X251bSk7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfU01QX0FUVFJfR1VJRF9JTkZPOgorCQkJcmV0ID0gcmVjdl9zdWJuX2dldF9ndWlkaW5mbyhzbXAsIGliZGV2KTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9TTVBfQVRUUl9QT1JUX0lORk86CisJCQlyZXQgPSByZWN2X3N1Ym5fZ2V0X3BvcnRpbmZvKHNtcCwgaWJkZXYsIHBvcnRfbnVtKTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFOgorCQkJcmV0ID0gcmVjdl9zdWJuX2dldF9wa2V5dGFibGUoc21wLCBpYmRldik7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfU01QX0FUVFJfU01fSU5GTzoKKwkJCWlmIChkZXYtPnBvcnRfY2FwX2ZsYWdzICYgSUJfUE9SVF9TTV9ESVNBQkxFRCkgeworCQkJCXJldCA9IElCX01BRF9SRVNVTFRfU1VDQ0VTUyB8CisJCQkJCUlCX01BRF9SRVNVTFRfQ09OU1VNRUQ7CisJCQkJZ290byBiYWlsOworCQkJfQorCQkJaWYgKGRldi0+cG9ydF9jYXBfZmxhZ3MgJiBJQl9QT1JUX1NNKSB7CisJCQkJcmV0ID0gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfVU5TVVBfTUVUSF9BVFRSOworCQkJcmV0ID0gcmVwbHkoc21wKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJY2FzZSBJQl9NR01UX01FVEhPRF9TRVQ6CisJCXN3aXRjaCAoc21wLT5hdHRyX2lkKSB7CisJCWNhc2UgSUJfU01QX0FUVFJfR1VJRF9JTkZPOgorCQkJcmV0ID0gcmVjdl9zdWJuX3NldF9ndWlkaW5mbyhzbXAsIGliZGV2KTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9TTVBfQVRUUl9QT1JUX0lORk86CisJCQlyZXQgPSByZWN2X3N1Ym5fc2V0X3BvcnRpbmZvKHNtcCwgaWJkZXYsIHBvcnRfbnVtKTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFOgorCQkJcmV0ID0gcmVjdl9zdWJuX3NldF9wa2V5dGFibGUoc21wLCBpYmRldik7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfU01QX0FUVFJfU01fSU5GTzoKKwkJCWlmIChkZXYtPnBvcnRfY2FwX2ZsYWdzICYgSUJfUE9SVF9TTV9ESVNBQkxFRCkgeworCQkJCXJldCA9IElCX01BRF9SRVNVTFRfU1VDQ0VTUyB8CisJCQkJCUlCX01BRF9SRVNVTFRfQ09OU1VNRUQ7CisJCQkJZ290byBiYWlsOworCQkJfQorCQkJaWYgKGRldi0+cG9ydF9jYXBfZmxhZ3MgJiBJQl9QT1JUX1NNKSB7CisJCQkJcmV0ID0gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfVU5TVVBfTUVUSF9BVFRSOworCQkJcmV0ID0gcmVwbHkoc21wKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJY2FzZSBJQl9NR01UX01FVEhPRF9HRVRfUkVTUDoKKwkJLyoKKwkJICogVGhlIGliX21hZCBtb2R1bGUgd2lsbCBjYWxsIHVzIHRvIHByb2Nlc3MgcmVzcG9uc2VzCisJCSAqIGJlZm9yZSBjaGVja2luZyBmb3Igb3RoZXIgY29uc3VtZXJzLgorCQkgKiBKdXN0IHRlbGwgdGhlIGNhbGxlciB0byBwcm9jZXNzIGl0IG5vcm1hbGx5LgorCQkgKi8KKwkJcmV0ID0gSUJfTUFEX1JFU1VMVF9GQUlMVVJFOworCQlnb3RvIGJhaWw7CisJZGVmYXVsdDoKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX1VOU1VQX01FVEhPRDsKKwkJcmV0ID0gcmVwbHkoc21wKTsKKwl9CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3BlcmYoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnRfbnVtLAorCQkJc3RydWN0IGliX21hZCAqaW5fbWFkLAorCQkJc3RydWN0IGliX21hZCAqb3V0X21hZCkKK3sKKwlzdHJ1Y3QgaWJfcGVyZiAqcG1wID0gKHN0cnVjdCBpYl9wZXJmICopb3V0X21hZDsKKwlpbnQgcmV0OworCisJKm91dF9tYWQgPSAqaW5fbWFkOworCWlmIChwbXAtPmNsYXNzX3ZlcnNpb24gIT0gMSkgeworCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfVU5TVVBfVkVSU0lPTjsKKwkJcmV0ID0gcmVwbHkoKHN0cnVjdCBpYl9zbXAgKikgcG1wKTsKKwkJZ290byBiYWlsOworCX0KKworCXN3aXRjaCAocG1wLT5tZXRob2QpIHsKKwljYXNlIElCX01HTVRfTUVUSE9EX0dFVDoKKwkJc3dpdGNoIChwbXAtPmF0dHJfaWQpIHsKKwkJY2FzZSBJQl9QTUFfQ0xBU1NfUE9SVF9JTkZPOgorCQkJcmV0ID0gcmVjdl9wbWFfZ2V0X2NsYXNzcG9ydGluZm8ocG1wKTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9QTUFfUE9SVF9TQU1QTEVTX0NPTlRST0w6CisJCQlyZXQgPSByZWN2X3BtYV9nZXRfcG9ydHNhbXBsZXNjb250cm9sKHBtcCwgaWJkZXYsCisJCQkJCQkJICAgICAgcG9ydF9udW0pOworCQkJZ290byBiYWlsOworCQljYXNlIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUOgorCQkJcmV0ID0gcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzcmVzdWx0KHBtcCwgaWJkZXYpOworCQkJZ290byBiYWlsOworCQljYXNlIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUX0VYVDoKKwkJCXJldCA9IHJlY3ZfcG1hX2dldF9wb3J0c2FtcGxlc3Jlc3VsdF9leHQocG1wLAorCQkJCQkJCQkgaWJkZXYpOworCQkJZ290byBiYWlsOworCQljYXNlIElCX1BNQV9QT1JUX0NPVU5URVJTOgorCQkJcmV0ID0gcmVjdl9wbWFfZ2V0X3BvcnRjb3VudGVycyhwbXAsIGliZGV2LAorCQkJCQkJCXBvcnRfbnVtKTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9QTUFfUE9SVF9DT1VOVEVSU19FWFQ6CisJCQlyZXQgPSByZWN2X3BtYV9nZXRfcG9ydGNvdW50ZXJzX2V4dChwbXAsIGliZGV2LAorCQkJCQkJCSAgICBwb3J0X251bSk7CisJCQlnb3RvIGJhaWw7CisJCWRlZmF1bHQ6CisJCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfVU5TVVBfTUVUSF9BVFRSOworCQkJcmV0ID0gcmVwbHkoKHN0cnVjdCBpYl9zbXAgKikgcG1wKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJY2FzZSBJQl9NR01UX01FVEhPRF9TRVQ6CisJCXN3aXRjaCAocG1wLT5hdHRyX2lkKSB7CisJCWNhc2UgSUJfUE1BX1BPUlRfU0FNUExFU19DT05UUk9MOgorCQkJcmV0ID0gcmVjdl9wbWFfc2V0X3BvcnRzYW1wbGVzY29udHJvbChwbXAsIGliZGV2LAorCQkJCQkJCSAgICAgIHBvcnRfbnVtKTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9QTUFfUE9SVF9DT1VOVEVSUzoKKwkJCXJldCA9IHJlY3ZfcG1hX3NldF9wb3J0Y291bnRlcnMocG1wLCBpYmRldiwKKwkJCQkJCQlwb3J0X251bSk7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfUE1BX1BPUlRfQ09VTlRFUlNfRVhUOgorCQkJcmV0ID0gcmVjdl9wbWFfc2V0X3BvcnRjb3VudGVyc19leHQocG1wLCBpYmRldiwKKwkJCQkJCQkgICAgcG9ydF9udW0pOworCQkJZ290byBiYWlsOworCQlkZWZhdWx0OgorCQkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX1VOU1VQX01FVEhfQVRUUjsKKwkJCXJldCA9IHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCWNhc2UgSUJfTUdNVF9NRVRIT0RfR0VUX1JFU1A6CisJCS8qCisJCSAqIFRoZSBpYl9tYWQgbW9kdWxlIHdpbGwgY2FsbCB1cyB0byBwcm9jZXNzIHJlc3BvbnNlcworCQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIGNvbnN1bWVycy4KKwkJICogSnVzdCB0ZWxsIHRoZSBjYWxsZXIgdG8gcHJvY2VzcyBpdCBub3JtYWxseS4KKwkJICovCisJCXJldCA9IElCX01BRF9SRVNVTFRfRkFJTFVSRTsKKwkJZ290byBiYWlsOworCWRlZmF1bHQ6CisJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9VTlNVUF9NRVRIT0Q7CisJCXJldCA9IHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7CisJfQorCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcHJvY2Vzc19tYWQgLSBwcm9jZXNzIGFuIGluY29taW5nIE1BRCBwYWNrZXQKKyAqIEBpYmRldjogdGhlIGluZmluaWJhbmQgZGV2aWNlIHRoaXMgcGFja2V0IGNhbWUgaW4gb24KKyAqIEBtYWRfZmxhZ3M6IE1BRCBmbGFncworICogQHBvcnRfbnVtOiB0aGUgcG9ydCBudW1iZXIgdGhpcyBwYWNrZXQgY2FtZSBpbiBvbgorICogQGluX3djOiB0aGUgd29yayBjb21wbGV0aW9uIGVudHJ5IGZvciB0aGlzIHBhY2tldAorICogQGluX2dyaDogdGhlIGdsb2JhbCByb3V0ZSBoZWFkZXIgZm9yIHRoaXMgcGFja2V0CisgKiBAaW5fbWFkOiB0aGUgaW5jb21pbmcgTUFECisgKiBAb3V0X21hZDogYW55IG91dGdvaW5nIE1BRCByZXBseQorICoKKyAqIFJldHVybnMgSUJfTUFEX1JFU1VMVF9TVUNDRVNTIGlmIHRoaXMgaXMgYSBNQUQgdGhhdCB3ZSBhcmUgbm90CisgKiBpbnRlcmVzdGVkIGluIHByb2Nlc3NpbmcuCisgKgorICogTm90ZSB0aGF0IHRoZSB2ZXJicyBmcmFtZXdvcmsgaGFzIGFscmVhZHkgZG9uZSB0aGUgTUFEIHNhbml0eSBjaGVja3MsCisgKiBhbmQgaG9wIGNvdW50L3BvaW50ZXIgdXBkYXRpbmcgZm9yIElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURQorICogTUFEcy4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgaWJfbWFkIG1vZHVsZS4KKyAqLworaW50IGlwYXRoX3Byb2Nlc3NfbWFkKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBpbnQgbWFkX2ZsYWdzLCB1OCBwb3J0X251bSwKKwkJICAgICAgc3RydWN0IGliX3djICppbl93Yywgc3RydWN0IGliX2dyaCAqaW5fZ3JoLAorCQkgICAgICBzdHJ1Y3QgaWJfbWFkICppbl9tYWQsIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBTbmFwc2hvdCBjdXJyZW50IEhXIGNvdW50ZXJzIHRvICJjbGVhciIgdGhlbS4KKwkgKiBUaGlzIHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIGRyaXZlciBpcyBsb2FkZWQgZXhjZXB0IHRoYXQgZm9yCisJICogc29tZSByZWFzb24gd2UgZ2V0IGEgemlsbGlvbiBlcnJvcnMgd2hlbiBicmluaW5nIHVwIHRoZSBsaW5rLgorCSAqLworCWlmIChkZXYtPnJjdl9lcnJvcnMgPT0gMCkgeworCQlzdHJ1Y3QgaXBhdGhfbGF5ZXJfY291bnRlcnMgY250cnM7CisKKwkJaXBhdGhfbGF5ZXJfZ2V0X2NvdW50ZXJzKHRvX2lkZXYoaWJkZXYpLT5kZCwgJmNudHJzKTsKKwkJZGV2LT5yY3ZfZXJyb3JzKys7CisJCWRldi0+bl9zeW1ib2xfZXJyb3JfY291bnRlciA9IGNudHJzLnN5bWJvbF9lcnJvcl9jb3VudGVyOworCQlkZXYtPm5fbGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyID0KKwkJCWNudHJzLmxpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlcjsKKwkJZGV2LT5uX2xpbmtfZG93bmVkX2NvdW50ZXIgPSBjbnRycy5saW5rX2Rvd25lZF9jb3VudGVyOworCQlkZXYtPm5fcG9ydF9yY3ZfZXJyb3JzID0gY250cnMucG9ydF9yY3ZfZXJyb3JzICsgMTsKKwkJZGV2LT5uX3BvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KKwkJCWNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzOworCQlkZXYtPm5fcG9ydF94bWl0X2Rpc2NhcmRzID0gY250cnMucG9ydF94bWl0X2Rpc2NhcmRzOworCQlkZXYtPm5fcG9ydF94bWl0X2RhdGEgPSBjbnRycy5wb3J0X3htaXRfZGF0YTsKKwkJZGV2LT5uX3BvcnRfcmN2X2RhdGEgPSBjbnRycy5wb3J0X3Jjdl9kYXRhOworCQlkZXYtPm5fcG9ydF94bWl0X3BhY2tldHMgPSBjbnRycy5wb3J0X3htaXRfcGFja2V0czsKKwkJZGV2LT5uX3BvcnRfcmN2X3BhY2tldHMgPSBjbnRycy5wb3J0X3Jjdl9wYWNrZXRzOworCX0KKwlzd2l0Y2ggKGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzKSB7CisJY2FzZSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEU6CisJY2FzZSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRDoKKwkJcmV0ID0gcHJvY2Vzc19zdWJuKGliZGV2LCBtYWRfZmxhZ3MsIHBvcnRfbnVtLAorCQkJCSAgIGluX21hZCwgb3V0X21hZCk7CisJCWdvdG8gYmFpbDsKKwljYXNlIElCX01HTVRfQ0xBU1NfUEVSRl9NR01UOgorCQlyZXQgPSBwcm9jZXNzX3BlcmYoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQsIG91dF9tYWQpOworCQlnb3RvIGJhaWw7CisJZGVmYXVsdDoKKwkJcmV0ID0gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOworCX0KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWZmZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21yLmMKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8cmRtYS9pYl9wYWNrLmg+CisjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KKworI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisKKy8qKgorICogaXBhdGhfZ2V0X2RtYV9tciAtIGdldCBhIERNQSBtZW1vcnkgcmVnaW9uCisgKiBAcGQ6IHByb3RlY3Rpb24gZG9tYWluIGZvciB0aGlzIG1lbW9yeSByZWdpb24KKyAqIEBhY2M6IGFjY2VzcyBmbGFncworICoKKyAqIFJldHVybnMgdGhlIG1lbW9yeSByZWdpb24gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMgYW4gZXJybm8uCisgKi8KK3N0cnVjdCBpYl9tciAqaXBhdGhfZ2V0X2RtYV9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBpbnQgYWNjKQoreworCXN0cnVjdCBpcGF0aF9tciAqbXI7CisJc3RydWN0IGliX21yICpyZXQ7CisKKwltciA9IGt6YWxsb2Moc2l6ZW9mICptciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcikgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJbXItPm1yLmFjY2Vzc19mbGFncyA9IGFjYzsKKwlyZXQgPSAmbXItPmlibXI7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBpcGF0aF9tciAqYWxsb2NfbXIoaW50IGNvdW50LAorCQkJCSBzdHJ1Y3QgaXBhdGhfbGtleV90YWJsZSAqbGtfdGFibGUpCit7CisJc3RydWN0IGlwYXRoX21yICptcjsKKwlpbnQgbSwgaSA9IDA7CisKKwkvKiBBbGxvY2F0ZSBzdHJ1Y3QgcGx1cyBwb2ludGVycyB0byBmaXJzdCBsZXZlbCBwYWdlIHRhYmxlcy4gKi8KKwltID0gKGNvdW50ICsgSVBBVEhfU0VHU1ogLSAxKSAvIElQQVRIX1NFR1NaOworCW1yID0ga21hbGxvYyhzaXplb2YgKm1yICsgbSAqIHNpemVvZiBtci0+bXIubWFwWzBdLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1yKQorCQlnb3RvIGRvbmU7CisKKwkvKiBBbGxvY2F0ZSBmaXJzdCBsZXZlbCBwYWdlIHRhYmxlcy4gKi8KKwlmb3IgKDsgaSA8IG07IGkrKykgeworCQltci0+bXIubWFwW2ldID0ga21hbGxvYyhzaXplb2YgKm1yLT5tci5tYXBbMF0sIEdGUF9LRVJORUwpOworCQlpZiAoIW1yLT5tci5tYXBbaV0pCisJCQlnb3RvIGJhaWw7CisJfQorCW1yLT5tci5tYXBzeiA9IG07CisKKwkvKgorCSAqIGliX3JlZ19waHlzX21yKCkgd2lsbCBpbml0aWFsaXplIG1yLT5pYm1yIGV4Y2VwdCBmb3IKKwkgKiBsa2V5IGFuZCBya2V5LgorCSAqLworCWlmICghaXBhdGhfYWxsb2NfbGtleShsa190YWJsZSwgJm1yLT5tcikpCisJCWdvdG8gYmFpbDsKKwltci0+aWJtci5ya2V5ID0gbXItPmlibXIubGtleSA9IG1yLT5tci5sa2V5OworCisJZ290byBkb25lOworCitiYWlsOgorCXdoaWxlIChpKSB7CisJCWktLTsKKwkJa2ZyZWUobXItPm1yLm1hcFtpXSk7CisJfQorCWtmcmVlKG1yKTsKKwltciA9IE5VTEw7CisKK2RvbmU6CisJcmV0dXJuIG1yOworfQorCisvKioKKyAqIGlwYXRoX3JlZ19waHlzX21yIC0gcmVnaXN0ZXIgYSBwaHlzaWNhbCBtZW1vcnkgcmVnaW9uCisgKiBAcGQ6IHByb3RlY3Rpb24gZG9tYWluIGZvciB0aGlzIG1lbW9yeSByZWdpb24KKyAqIEBidWZmZXJfbGlzdDogcG9pbnRlciB0byB0aGUgbGlzdCBvZiBwaHlzaWNhbCBidWZmZXJzIHRvIHJlZ2lzdGVyCisgKiBAbnVtX3BoeXNfYnVmOiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIGJ1ZmZlcnMgdG8gcmVnaXN0ZXIKKyAqIEBpb3ZhX3N0YXJ0OiB0aGUgc3RhcnRpbmcgYWRkcmVzcyBwYXNzZWQgb3ZlciBJQiB3aGljaCBtYXBzIHRvIHRoaXMgTVIKKyAqCisgKiBSZXR1cm5zIHRoZSBtZW1vcnkgcmVnaW9uIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSByZXR1cm5zIGFuIGVycm5vLgorICovCitzdHJ1Y3QgaWJfbXIgKmlwYXRoX3JlZ19waHlzX21yKHN0cnVjdCBpYl9wZCAqcGQsCisJCQkJc3RydWN0IGliX3BoeXNfYnVmICpidWZmZXJfbGlzdCwKKwkJCQlpbnQgbnVtX3BoeXNfYnVmLCBpbnQgYWNjLCB1NjQgKmlvdmFfc3RhcnQpCit7CisJc3RydWN0IGlwYXRoX21yICptcjsKKwlpbnQgbiwgbSwgaTsKKwlzdHJ1Y3QgaWJfbXIgKnJldDsKKworCW1yID0gYWxsb2NfbXIobnVtX3BoeXNfYnVmLCAmdG9faWRldihwZC0+ZGV2aWNlKS0+bGtfdGFibGUpOworCWlmIChtciA9PSBOVUxMKSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwltci0+bXIudXNlcl9iYXNlID0gKmlvdmFfc3RhcnQ7CisJbXItPm1yLmlvdmEgPSAqaW92YV9zdGFydDsKKwltci0+bXIubGVuZ3RoID0gMDsKKwltci0+bXIub2Zmc2V0ID0gMDsKKwltci0+bXIuYWNjZXNzX2ZsYWdzID0gYWNjOworCW1yLT5tci5tYXhfc2VncyA9IG51bV9waHlzX2J1ZjsKKworCW0gPSAwOworCW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGh5c19idWY7IGkrKykgeworCQltci0+bXIubWFwW21dLT5zZWdzW25dLnZhZGRyID0KKwkJCXBoeXNfdG9fdmlydChidWZmZXJfbGlzdFtpXS5hZGRyKTsKKwkJbXItPm1yLm1hcFttXS0+c2Vnc1tuXS5sZW5ndGggPSBidWZmZXJfbGlzdFtpXS5zaXplOworCQltci0+bXIubGVuZ3RoICs9IGJ1ZmZlcl9saXN0W2ldLnNpemU7CisJCW4rKzsKKwkJaWYgKG4gPT0gSVBBVEhfU0VHU1opIHsKKwkJCW0rKzsKKwkJCW4gPSAwOworCQl9CisJfQorCisJcmV0ID0gJm1yLT5pYm1yOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcmVnX3VzZXJfbXIgLSByZWdpc3RlciBhIHVzZXJzcGFjZSBtZW1vcnkgcmVnaW9uCisgKiBAcGQ6IHByb3RlY3Rpb24gZG9tYWluIGZvciB0aGlzIG1lbW9yeSByZWdpb24KKyAqIEByZWdpb246IHRoZSB1c2VyIG1lbW9yeSByZWdpb24KKyAqIEBtcl9hY2Nlc3NfZmxhZ3M6IGFjY2VzcyBmbGFncyBmb3IgdGhpcyBtZW1vcnkgcmVnaW9uCisgKiBAdWRhdGE6IHVudXNlZCBieSB0aGUgSW5maW5pUGF0aCBkcml2ZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBtZW1vcnkgcmVnaW9uIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSByZXR1cm5zIGFuIGVycm5vLgorICovCitzdHJ1Y3QgaWJfbXIgKmlwYXRoX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICpyZWdpb24sCisJCQkJaW50IG1yX2FjY2Vzc19mbGFncywgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgaXBhdGhfbXIgKm1yOworCXN0cnVjdCBpYl91bWVtX2NodW5rICpjaHVuazsKKwlpbnQgbiwgbSwgaTsKKwlzdHJ1Y3QgaWJfbXIgKnJldDsKKworCW4gPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZyZWdpb24tPmNodW5rX2xpc3QsIGxpc3QpCisJCW4gKz0gY2h1bmstPm5lbnRzOworCisJbXIgPSBhbGxvY19tcihuLCAmdG9faWRldihwZC0+ZGV2aWNlKS0+bGtfdGFibGUpOworCWlmICghbXIpIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCW1yLT5tci51c2VyX2Jhc2UgPSByZWdpb24tPnVzZXJfYmFzZTsKKwltci0+bXIuaW92YSA9IHJlZ2lvbi0+dmlydF9iYXNlOworCW1yLT5tci5sZW5ndGggPSByZWdpb24tPmxlbmd0aDsKKwltci0+bXIub2Zmc2V0ID0gcmVnaW9uLT5vZmZzZXQ7CisJbXItPm1yLmFjY2Vzc19mbGFncyA9IG1yX2FjY2Vzc19mbGFnczsKKwltci0+bXIubWF4X3NlZ3MgPSBuOworCisJbSA9IDA7CisJbiA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJnJlZ2lvbi0+Y2h1bmtfbGlzdCwgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY2h1bmstPm5tYXA7IGkrKykgeworCQkJbXItPm1yLm1hcFttXS0+c2Vnc1tuXS52YWRkciA9CisJCQkJcGFnZV9hZGRyZXNzKGNodW5rLT5wYWdlX2xpc3RbaV0ucGFnZSk7CisJCQltci0+bXIubWFwW21dLT5zZWdzW25dLmxlbmd0aCA9IHJlZ2lvbi0+cGFnZV9zaXplOworCQkJbisrOworCQkJaWYgKG4gPT0gSVBBVEhfU0VHU1opIHsKKwkJCQltKys7CisJCQkJbiA9IDA7CisJCQl9CisJCX0KKwl9CisJcmV0ID0gJm1yLT5pYm1yOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfZGVyZWdfbXIgLSB1bnJlZ2lzdGVyIGFuZCBmcmVlIGEgbWVtb3J5IHJlZ2lvbgorICogQGlibXI6IHRoZSBtZW1vcnkgcmVnaW9uIHRvIGZyZWUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBjYWxsZWQgdG8gZnJlZSBNUnMgY3JlYXRlZCBieSBpcGF0aF9nZXRfZG1hX21yKCkKKyAqIG9yIGlwYXRoX3JlZ191c2VyX21yKCkuCisgKi8KK2ludCBpcGF0aF9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIpCit7CisJc3RydWN0IGlwYXRoX21yICptciA9IHRvX2ltcihpYm1yKTsKKwlpbnQgaTsKKworCWlwYXRoX2ZyZWVfbGtleSgmdG9faWRldihpYm1yLT5kZXZpY2UpLT5sa190YWJsZSwgaWJtci0+bGtleSk7CisJaSA9IG1yLT5tci5tYXBzejsKKwl3aGlsZSAoaSkgeworCQlpLS07CisJCWtmcmVlKG1yLT5tci5tYXBbaV0pOworCX0KKwlrZnJlZShtcik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXBhdGhfYWxsb2NfZm1yIC0gYWxsb2NhdGUgYSBmYXN0IG1lbW9yeSByZWdpb24KKyAqIEBwZDogdGhlIHByb3RlY3Rpb24gZG9tYWluIGZvciB0aGlzIG1lbW9yeSByZWdpb24KKyAqIEBtcl9hY2Nlc3NfZmxhZ3M6IGFjY2VzcyBmbGFncyBmb3IgdGhpcyBtZW1vcnkgcmVnaW9uCisgKiBAZm1yX2F0dHI6IGZhc3QgbWVtb3J5IHJlZ2lvbiBhdHRyaWJ1dGVzCisgKgorICogUmV0dXJucyB0aGUgbWVtb3J5IHJlZ2lvbiBvbiBzdWNjZXNzLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJuby4KKyAqLworc3RydWN0IGliX2ZtciAqaXBhdGhfYWxsb2NfZm1yKHN0cnVjdCBpYl9wZCAqcGQsIGludCBtcl9hY2Nlc3NfZmxhZ3MsCisJCQkgICAgICAgc3RydWN0IGliX2Ztcl9hdHRyICpmbXJfYXR0cikKK3sKKwlzdHJ1Y3QgaXBhdGhfZm1yICpmbXI7CisJaW50IG0sIGkgPSAwOworCXN0cnVjdCBpYl9mbXIgKnJldDsKKworCS8qIEFsbG9jYXRlIHN0cnVjdCBwbHVzIHBvaW50ZXJzIHRvIGZpcnN0IGxldmVsIHBhZ2UgdGFibGVzLiAqLworCW0gPSAoZm1yX2F0dHItPm1heF9wYWdlcyArIElQQVRIX1NFR1NaIC0gMSkgLyBJUEFUSF9TRUdTWjsKKwlmbXIgPSBrbWFsbG9jKHNpemVvZiAqZm1yICsgbSAqIHNpemVvZiBmbXItPm1yLm1hcFswXSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmbXIpCisJCWdvdG8gYmFpbDsKKworCS8qIEFsbG9jYXRlIGZpcnN0IGxldmVsIHBhZ2UgdGFibGVzLiAqLworCWZvciAoOyBpIDwgbTsgaSsrKSB7CisJCWZtci0+bXIubWFwW2ldID0ga21hbGxvYyhzaXplb2YgKmZtci0+bXIubWFwWzBdLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghZm1yLT5tci5tYXBbaV0pCisJCQlnb3RvIGJhaWw7CisJfQorCWZtci0+bXIubWFwc3ogPSBtOworCisJLyoKKwkgKiBpYl9hbGxvY19mbXIoKSB3aWxsIGluaXRpYWxpemUgZm1yLT5pYmZtciBleGNlcHQgZm9yIGxrZXkgJgorCSAqIHJrZXkuCisJICovCisJaWYgKCFpcGF0aF9hbGxvY19sa2V5KCZ0b19pZGV2KHBkLT5kZXZpY2UpLT5sa190YWJsZSwgJmZtci0+bXIpKQorCQlnb3RvIGJhaWw7CisJZm1yLT5pYmZtci5ya2V5ID0gZm1yLT5pYmZtci5sa2V5ID0gZm1yLT5tci5sa2V5OworCS8qCisJICogUmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQgYnV0IG5vIHZhbGlkIG1hcHBpbmcgKFJLRVkgY2FuJ3QgYmUKKwkgKiB1c2VkKS4KKwkgKi8KKwlmbXItPm1yLnVzZXJfYmFzZSA9IDA7CisJZm1yLT5tci5pb3ZhID0gMDsKKwlmbXItPm1yLmxlbmd0aCA9IDA7CisJZm1yLT5tci5vZmZzZXQgPSAwOworCWZtci0+bXIuYWNjZXNzX2ZsYWdzID0gbXJfYWNjZXNzX2ZsYWdzOworCWZtci0+bXIubWF4X3NlZ3MgPSBmbXJfYXR0ci0+bWF4X3BhZ2VzOworCWZtci0+cGFnZV9zaGlmdCA9IGZtcl9hdHRyLT5wYWdlX3NoaWZ0OworCisJcmV0ID0gJmZtci0+aWJmbXI7CisJZ290byBkb25lOworCitiYWlsOgorCXdoaWxlIChpKQorCQlrZnJlZShmbXItPm1yLm1hcFstLWldKTsKKwlrZnJlZShmbXIpOworCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9tYXBfcGh5c19mbXIgLSBzZXQgdXAgYSBmYXN0IG1lbW9yeSByZWdpb24KKyAqIEBpYm1mcjogdGhlIGZhc3QgbWVtb3J5IHJlZ2lvbiB0byBzZXQgdXAKKyAqIEBwYWdlX2xpc3Q6IHRoZSBsaXN0IG9mIHBhZ2VzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBmYXN0IG1lbW9yeSByZWdpb24KKyAqIEBsaXN0X2xlbjogdGhlIG51bWJlciBvZiBwYWdlcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZmFzdCBtZW1vcnkgcmVnaW9uCisgKiBAaW92YTogdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhlIGZhc3QgbWVtb3J5IHJlZ2lvbgorICoKKyAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICovCisKK2ludCBpcGF0aF9tYXBfcGh5c19mbXIoc3RydWN0IGliX2ZtciAqaWJmbXIsIHU2NCAqIHBhZ2VfbGlzdCwKKwkJICAgICAgIGludCBsaXN0X2xlbiwgdTY0IGlvdmEpCit7CisJc3RydWN0IGlwYXRoX2ZtciAqZm1yID0gdG9faWZtcihpYmZtcik7CisJc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtLCBuLCBpOworCXUzMiBwczsKKwlpbnQgcmV0OworCisJaWYgKGxpc3RfbGVuID4gZm1yLT5tci5tYXhfc2VncykgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCXJrdCA9ICZ0b19pZGV2KGliZm1yLT5kZXZpY2UpLT5sa190YWJsZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmt0LT5sb2NrLCBmbGFncyk7CisJZm1yLT5tci51c2VyX2Jhc2UgPSBpb3ZhOworCWZtci0+bXIuaW92YSA9IGlvdmE7CisJcHMgPSAxIDw8IGZtci0+cGFnZV9zaGlmdDsKKwlmbXItPm1yLmxlbmd0aCA9IGxpc3RfbGVuICogcHM7CisJbSA9IDA7CisJbiA9IDA7CisJcHMgPSAxIDw8IGZtci0+cGFnZV9zaGlmdDsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdF9sZW47IGkrKykgeworCQlmbXItPm1yLm1hcFttXS0+c2Vnc1tuXS52YWRkciA9IHBoeXNfdG9fdmlydChwYWdlX2xpc3RbaV0pOworCQlmbXItPm1yLm1hcFttXS0+c2Vnc1tuXS5sZW5ndGggPSBwczsKKwkJaWYgKCsrbiA9PSBJUEFUSF9TRUdTWikgeworCQkJbSsrOworCQkJbiA9IDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmt0LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3VubWFwX2ZtciAtIHVubWFwIGZhc3QgbWVtb3J5IHJlZ2lvbnMKKyAqIEBmbXJfbGlzdDogdGhlIGxpc3Qgb2YgZmFzdCBtZW1vcnkgcmVnaW9ucyB0byB1bm1hcAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitpbnQgaXBhdGhfdW5tYXBfZm1yKHN0cnVjdCBsaXN0X2hlYWQgKmZtcl9saXN0KQoreworCXN0cnVjdCBpcGF0aF9mbXIgKmZtcjsKKwlzdHJ1Y3QgaXBhdGhfbGtleV90YWJsZSAqcmt0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZtciwgZm1yX2xpc3QsIGliZm1yLmxpc3QpIHsKKwkJcmt0ID0gJnRvX2lkZXYoZm1yLT5pYmZtci5kZXZpY2UpLT5sa190YWJsZTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJrdC0+bG9jaywgZmxhZ3MpOworCQlmbXItPm1yLnVzZXJfYmFzZSA9IDA7CisJCWZtci0+bXIuaW92YSA9IDA7CisJCWZtci0+bXIubGVuZ3RoID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmt0LT5sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2RlYWxsb2NfZm1yIC0gZGVhbGxvY2F0ZSBhIGZhc3QgbWVtb3J5IHJlZ2lvbgorICogQGliZm1yOiB0aGUgZmFzdCBtZW1vcnkgcmVnaW9uIHRvIGRlYWxsb2NhdGUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IGlwYXRoX2RlYWxsb2NfZm1yKHN0cnVjdCBpYl9mbXIgKmliZm1yKQoreworCXN0cnVjdCBpcGF0aF9mbXIgKmZtciA9IHRvX2lmbXIoaWJmbXIpOworCWludCBpOworCisJaXBhdGhfZnJlZV9sa2V5KCZ0b19pZGV2KGliZm1yLT5kZXZpY2UpLT5sa190YWJsZSwgaWJmbXItPmxrZXkpOworCWkgPSBmbXItPm1yLm1hcHN6OworCXdoaWxlIChpKQorCQlrZnJlZShmbXItPm1yLm1hcFstLWldKTsKKwlrZnJlZShmbXIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3BlODAwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcGU4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU4Yzc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3BlODAwLmMKQEAgLTAsMCArMSwxMjUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG9mIHRoZSBjb2RlIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlCisgKiBJbmZpbmlQYXRoIFBFLTgwMCBjaGlwLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKyNpbmNsdWRlICJpcGF0aF9yZWdpc3RlcnMuaCIKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGNoaXAtc3BlY2lmaWMgcmVnaXN0ZXIgaW5mb3JtYXRpb24gYW5kCisgKiBhY2Nlc3MgZnVuY3Rpb25zIGZvciB0aGUgUGF0aFNjYWxlIFBFODAwLCB0aGUgUENJLUV4cHJlc3MgY2hpcC4KKyAqCisgKiBUaGlzIGxpc3RzIHRoZSBJbmZpbmlQYXRoIFBFODAwIHJlZ2lzdGVycywgaW4gdGhlIGFjdHVhbCBjaGlwIGxheW91dC4KKyAqIFRoaXMgc3RydWN0dXJlIHNob3VsZCBuZXZlciBiZSBkaXJlY3RseSBhY2Nlc3NlZC4KKyAqLworc3RydWN0IF9pbmZpbmlwYXRoX2RvX25vdF91c2Vfa2VybmVsX3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXZpc2lvbjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgQ29udHJvbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUGFnZUFsaWduOworCXVuc2lnbmVkIGxvbmcgbG9uZyBQb3J0Q250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBEZWJ1Z1BvcnRTZWxlY3Q7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFJlZ0Jhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFVzZXJSZWdCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBDb3VudGVyUmVnQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2NyYXRjaDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDI7CisJdW5zaWduZWQgbG9uZyBsb25nIEludEJsb2NrZWQ7CisJdW5zaWduZWQgbG9uZyBsb25nIEludE1hc2s7CisJdW5zaWduZWQgbG9uZyBsb25nIEludFN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSW50Q2xlYXI7CisJdW5zaWduZWQgbG9uZyBsb25nIEVycm9yTWFzazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRXJyb3JTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEVycm9yQ2xlYXI7CisJdW5zaWduZWQgbG9uZyBsb25nIEh3RXJyTWFzazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSHdFcnJTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEh3RXJyQ2xlYXI7CisJdW5zaWduZWQgbG9uZyBsb25nIEh3RGlhZ0N0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIE1ESU87CisJdW5zaWduZWQgbG9uZyBsb25nIElCQ1N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSUJDQ3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRXh0U3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFeHRDdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBHUElPT3V0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBHUElPTWFzazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgR1BJT1N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgR1BJT0NsZWFyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZDdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZCVEhRUDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyU2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQ250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJFbnRTaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZUSURCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZUSURDbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkVnckJhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkVnckNudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2QnVmQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2QnVmU2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUnhJbnRNZW1CYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSeEludE1lbVNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdlBhcnRpdGlvbktleTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZQa3RMRURDbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkNFs4XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEN0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRQSU9CdWZCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kUElPU2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFBJT0J1ZkNudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFBJT0F2YWlsQWRkcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgVHhJbnRNZW1CYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBUeEludE1lbVNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkNTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUENJZVJCdWZUZXN0UmVnMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUENJZVJCdWZUZXN0UmVnMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQ1MVs2XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEJ1ZmZlckVycm9yOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kQnVmZmVyRXJyb3JDT05UMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQ2U0JFWzZdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjE7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHIyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyMzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkN1JIQVsxMV07CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHIxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjI7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyMzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHI0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDhSSFRBWzExXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQ5U1dbOF07CisJdW5zaWduZWQgbG9uZyBsb25nIFNlcmRlc0NvbmZpZzA7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlcmRlc0NvbmZpZzE7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlcmRlc1N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgWEdYU0NvbmZpZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSUJQTExDZmc7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkMTBTVzJbM107CisJdW5zaWduZWQgbG9uZyBsb25nIFBDSUVRMFNlcmRlc0NvbmZpZzA7CisJdW5zaWduZWQgbG9uZyBsb25nIFBDSUVRMFNlcmRlc0NvbmZpZzE7CisJdW5zaWduZWQgbG9uZyBsb25nIFBDSUVRMFNlcmRlc1N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQxMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUENJRVExU2VyZGVzQ29uZmlnMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUENJRVExU2VyZGVzQ29uZmlnMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUENJRVExU2VyZGVzU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDEyOworfTsKKworI2RlZmluZSBJUEFUSF9LUkVHX09GRlNFVChmaWVsZCkgKG9mZnNldG9mKHN0cnVjdCBcCisgICAgX2luZmluaXBhdGhfZG9fbm90X3VzZV9rZXJuZWxfcmVncywgZmllbGQpIC8gc2l6ZW9mKHU2NCkpCisjZGVmaW5lIElQQVRIX0NSRUdfT0ZGU0VUKGZpZWxkKSAob2Zmc2V0b2YoIFwKKyAgICBzdHJ1Y3QgaW5maW5pcGF0aF9jb3VudGVycywgZmllbGQpIC8gc2l6ZW9mKHU2NCkpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXBhdGhfa3JlZ3MgaXBhdGhfcGVfa3JlZ3MgPSB7CisJLmtyX2NvbnRyb2wgPSBJUEFUSF9LUkVHX09GRlNFVChDb250cm9sKSwKKwkua3JfY291bnRlcnJlZ2Jhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChDb3VudGVyUmVnQmFzZSksCisJLmtyX2RlYnVncG9ydHNlbGVjdCA9IElQQVRIX0tSRUdfT0ZGU0VUKERlYnVnUG9ydFNlbGVjdCksCisJLmtyX2Vycm9yY2xlYXIgPSBJUEFUSF9LUkVHX09GRlNFVChFcnJvckNsZWFyKSwKKwkua3JfZXJyb3JtYXNrID0gSVBBVEhfS1JFR19PRkZTRVQoRXJyb3JNYXNrKSwKKwkua3JfZXJyb3JzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChFcnJvclN0YXR1cyksCisJLmtyX2V4dGN0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChFeHRDdHJsKSwKKwkua3JfZXh0c3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoRXh0U3RhdHVzKSwKKwkua3JfZ3Bpb19jbGVhciA9IElQQVRIX0tSRUdfT0ZGU0VUKEdQSU9DbGVhciksCisJLmtyX2dwaW9fbWFzayA9IElQQVRIX0tSRUdfT0ZGU0VUKEdQSU9NYXNrKSwKKwkua3JfZ3Bpb19vdXQgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPT3V0KSwKKwkua3JfZ3Bpb19zdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPU3RhdHVzKSwKKwkua3JfaHdkaWFnY3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RGlhZ0N0cmwpLAorCS5rcl9od2VycmNsZWFyID0gSVBBVEhfS1JFR19PRkZTRVQoSHdFcnJDbGVhciksCisJLmtyX2h3ZXJybWFzayA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RXJyTWFzayksCisJLmtyX2h3ZXJyc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoSHdFcnJTdGF0dXMpLAorCS5rcl9pYmNjdHJsID0gSVBBVEhfS1JFR19PRkZTRVQoSUJDQ3RybCksCisJLmtyX2liY3N0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKElCQ1N0YXR1cyksCisJLmtyX2ludGJsb2NrZWQgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRCbG9ja2VkKSwKKwkua3JfaW50Y2xlYXIgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRDbGVhciksCisJLmtyX2ludG1hc2sgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRNYXNrKSwKKwkua3JfaW50c3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoSW50U3RhdHVzKSwKKwkua3JfbWRpbyA9IElQQVRIX0tSRUdfT0ZGU0VUKE1ESU8pLAorCS5rcl9wYWdlYWxpZ24gPSBJUEFUSF9LUkVHX09GRlNFVChQYWdlQWxpZ24pLAorCS5rcl9wYXJ0aXRpb25rZXkgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZQYXJ0aXRpb25LZXkpLAorCS5rcl9wb3J0Y250ID0gSVBBVEhfS1JFR19PRkZTRVQoUG9ydENudCksCisJLmtyX3JjdmJ0aHFwID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2QlRIUVApLAorCS5rcl9yY3ZidWZiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2QnVmQmFzZSksCisJLmtyX3JjdmJ1ZnNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZCdWZTaXplKSwKKwkua3JfcmN2Y3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkN0cmwpLAorCS5rcl9yY3ZlZ3JiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2RWdyQmFzZSksCisJLmtyX3JjdmVncmNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkVnckNudCksCisJLmtyX3JjdmhkcmNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkckNudCksCisJLmtyX3JjdmhkcmVudHNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJFbnRTaXplKSwKKwkua3JfcmN2aGRyc2l6ZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkclNpemUpLAorCS5rcl9yY3ZpbnRtZW1iYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUnhJbnRNZW1CYXNlKSwKKwkua3JfcmN2aW50bWVtc2l6ZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJ4SW50TWVtU2l6ZSksCisJLmtyX3JjdnRpZGJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZUSURCYXNlKSwKKwkua3JfcmN2dGlkY250ID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2VElEQ250KSwKKwkua3JfcmV2aXNpb24gPSBJUEFUSF9LUkVHX09GRlNFVChSZXZpc2lvbiksCisJLmtyX3NjcmF0Y2ggPSBJUEFUSF9LUkVHX09GRlNFVChTY3JhdGNoKSwKKwkua3Jfc2VuZGJ1ZmZlcmVycm9yID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZEJ1ZmZlckVycm9yKSwKKwkua3Jfc2VuZGN0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kQ3RybCksCisJLmtyX3NlbmRwaW9hdmFpbGFkZHIgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kUElPQXZhaWxBZGRyKSwKKwkua3Jfc2VuZHBpb2J1ZmJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kUElPQnVmQmFzZSksCisJLmtyX3NlbmRwaW9idWZjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kUElPQnVmQ250KSwKKwkua3Jfc2VuZHBpb3NpemUgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kUElPU2l6ZSksCisJLmtyX3NlbmRyZWdiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFJlZ0Jhc2UpLAorCS5rcl90eGludG1lbWJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChUeEludE1lbUJhc2UpLAorCS5rcl90eGludG1lbXNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChUeEludE1lbVNpemUpLAorCS5rcl91c2VycmVnYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFVzZXJSZWdCYXNlKSwKKwkua3Jfc2VyZGVzY29uZmlnMCA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlcmRlc0NvbmZpZzApLAorCS5rcl9zZXJkZXNjb25maWcxID0gSVBBVEhfS1JFR19PRkZTRVQoU2VyZGVzQ29uZmlnMSksCisJLmtyX3NlcmRlc3N0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlcmRlc1N0YXR1cyksCisJLmtyX3hneHNjb25maWcgPSBJUEFUSF9LUkVHX09GRlNFVChYR1hTQ29uZmlnKSwKKwkua3JfaWJwbGxjZmcgPSBJUEFUSF9LUkVHX09GRlNFVChJQlBMTENmZyksCisKKwkvKgorCSAqIFRoZXNlIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSB2aWEgaXBhdGhfcmVhZF9rcmVnNjQoKSwKKwkgKiB1c2UgdGhlbSB3aXRoIGlwYXRoX3JlYWRfa3JlZzY0X3BvcnQoKQorCSAqLworCS5rcl9yY3ZoZHJhZGRyID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2SGRyQWRkcjApLAorCS5rcl9yY3ZoZHJ0YWlsYWRkciA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkclRhaWxBZGRyMCksCisKKwkvKiBUaGlzIGdyb3VwIGlzIHBlLTgwMC1zcGVjaWZpYzsgYW5kIHVzZWQgb25seSBpbiB0aGlzIGZpbGUgKi8KKwkvKiBUaGUgcmN2cGt0bGVkIHJlZ2lzdGVyIGNvbnRyb2xzIG9uZSBvZiB0aGUgZGVidWcgcG9ydCBzaWduYWxzLCBzbworCSAqIGEgcGFja2V0IGFjdGl2aXR5IExFRCBjYW4gYmUgY29ubmVjdGVkIHRvIGl0LiAqLworCS5rcl9yY3Zwa3RsZWRjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZQa3RMRURDbnQpLAorCS5rcl9wY2llcmJ1ZnRlc3RyZWcwID0gSVBBVEhfS1JFR19PRkZTRVQoUENJZVJCdWZUZXN0UmVnMCksCisJLmtyX3BjaWVyYnVmdGVzdHJlZzEgPSBJUEFUSF9LUkVHX09GRlNFVChQQ0llUkJ1ZlRlc3RSZWcxKSwKKwkua3JfcGNpZXEwc2VyZGVzY29uZmlnMCA9IElQQVRIX0tSRUdfT0ZGU0VUKFBDSUVRMFNlcmRlc0NvbmZpZzApLAorCS5rcl9wY2llcTBzZXJkZXNjb25maWcxID0gSVBBVEhfS1JFR19PRkZTRVQoUENJRVEwU2VyZGVzQ29uZmlnMSksCisJLmtyX3BjaWVxMHNlcmRlc3N0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKFBDSUVRMFNlcmRlc1N0YXR1cyksCisJLmtyX3BjaWVxMXNlcmRlc2NvbmZpZzAgPSBJUEFUSF9LUkVHX09GRlNFVChQQ0lFUTFTZXJkZXNDb25maWcwKSwKKwkua3JfcGNpZXExc2VyZGVzY29uZmlnMSA9IElQQVRIX0tSRUdfT0ZGU0VUKFBDSUVRMVNlcmRlc0NvbmZpZzEpLAorCS5rcl9wY2llcTFzZXJkZXNzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChQQ0lFUTFTZXJkZXNTdGF0dXMpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlwYXRoX2NyZWdzIGlwYXRoX3BlX2NyZWdzID0geworCS5jcl9iYWRmb3JtYXRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEJhZEZvcm1hdENudCksCisJLmNyX2VycmljcmNjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeElDUkNFcnJDbnQpLAorCS5jcl9lcnJsaW5rY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhMaW5rUHJvYmxlbUNudCksCisJLmNyX2VycmxwY3JjY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhMUENSQ0VyckNudCksCisJLmNyX2VycnBrZXkgPSBJUEFUSF9DUkVHX09GRlNFVChSeFBLZXlNaXNtYXRjaENudCksCisJLmNyX2VycnJjdmZsb3djdHJsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhGbG93Q3RybEVyckNudCksCisJLmNyX2Vycl9ybGVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhMZW5FcnJDbnQpLAorCS5jcl9lcnJzbGVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhMZW5FcnJDbnQpLAorCS5jcl9lcnJ0aWRmdWxsID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhUSURGdWxsRXJyQ250KSwKKwkuY3JfZXJydGlkdmFsaWQgPSBJUEFUSF9DUkVHX09GRlNFVChSeFRJRFZhbGlkRXJyQ250KSwKKwkuY3JfZXJydmNyY2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4VkNSQ0VyckNudCksCisJLmNyX2lic3RhdHVzY2hhbmdlID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJTdGF0dXNDaGFuZ2VDbnQpLAorCS5jcl9pbnRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChMQkludENudCksCisJLmNyX2ludmFsaWRybGVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhNYXhNaW5MZW5FcnJDbnQpLAorCS5jcl9pbnZhbGlkc2xlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4TWF4TWluTGVuRXJyQ250KSwKKwkuY3JfbGJmbG93c3RhbGxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChMQkZsb3dTdGFsbENudCksCisJLmNyX3BrdHJjdmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4RGF0YVBrdENudCksCisJLmNyX3BrdHJjdmZsb3djdHJsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhGbG93UGt0Q250KSwKKwkuY3JfcGt0c2VuZGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4RGF0YVBrdENudCksCisJLmNyX3BrdHNlbmRmbG93Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhGbG93UGt0Q250KSwKKwkuY3JfcG9ydG92ZmxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeFAwSGRyRWdyT3ZmbENudCksCisJLmNyX3JjdmVicGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4RUJQQ250KSwKKwkuY3JfcmN2b3ZmbGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4QnVmT3ZmbENudCksCisJLmNyX3NlbmRkcm9wcGVkID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhEcm9wcGVkUGt0Q250KSwKKwkuY3Jfc2VuZHN0YWxsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhGbG93U3RhbGxDbnQpLAorCS5jcl9zZW5kdW5kZXJydW5jbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeFVuZGVycnVuQ250KSwKKwkuY3Jfd29yZHJjdmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4RHdvcmRDbnQpLAorCS5jcl93b3Jkc2VuZGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4RHdvcmRDbnQpLAorCS5jcl91bnN1cHZsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhVbnN1cFZMRXJyQ250KSwKKwkuY3Jfcnhkcm9wcGt0Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhEcm9wcGVkUGt0Q250KSwKKwkuY3JfaWJsaW5rZXJycmVjb3ZjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChJQkxpbmtFcnJSZWNvdmVyeUNudCksCisJLmNyX2libGlua2Rvd25jbnQgPSBJUEFUSF9DUkVHX09GRlNFVChJQkxpbmtEb3duZWRDbnQpLAorCS5jcl9pYnN5bWJvbGVycmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKElCU3ltYm9sRXJyQ250KQorfTsKKworLyoga3JfaW50c3RhdHVzLCBrcl9pbnRjbGVhciwga3JfaW50bWFzayBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSyAweDFGCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLIDB4MUYKKworLyoga3JfaHdlcnJjbGVhciwga3JfaHdlcnJtYXNrLCBrcl9od2VycnN0YXR1cywgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX01BU0sgIDB4MDAwMDAwMDAwMDAwMDAzZlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRVBPSVNPTkVEVExQICAgICAgMHgwMDAwMDAwMDEwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVDUExUSU1FT1VUICAgICAgIDB4MDAwMDAwMDAyMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZWFRMSCAgICAweDAwMDAwMDAwNDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVhBRE0gICAgMHgwMDAwMDAwMDgwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlSQURNICAgIDB4MDAwMDAwMDEwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9DT1JFUExMX0ZCU0xJUCAgICAgICAweDAwODAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9SRlNMSVAgICAgICAgMHgwMTAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUUxUExMRkFJTEVEICAgICAgIDB4MDQwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFMFBMTEZBSUxFRCAgICAgICAweDA4MDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEICAgICAgMHgxMDAwMDAwMDAwMDAwMDAwVUxMCisKKy8qIGtyX2V4dHN0YXR1cyBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfRVhUU19GUkVRU0VMIDB4MgorI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfU0VSREVTU0VMIDB4NAorI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfTUVNQklTVF9FTkRURVNUICAgICAweDAwMDAwMDAwMDAwMDQwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX01FTUJJU1RfRk9VTkQgICAgICAgMHgwMDAwMDAwMDAwMDA4MDAwCisKKyNkZWZpbmUgX0lQQVRIX0dQSU9fU0RBX05VTSAxCisjZGVmaW5lIF9JUEFUSF9HUElPX1NDTF9OVU0gMAorCisjZGVmaW5lIElQQVRIX0dQSU9fU0RBICgxVUxMIDw8IFwKKwkoX0lQQVRIX0dQSU9fU0RBX05VTStJTkZJTklQQVRIX0VYVENfR1BJT09FX1NISUZUKSkKKyNkZWZpbmUgSVBBVEhfR1BJT19TQ0wgKDFVTEwgPDwgXAorCShfSVBBVEhfR1BJT19TQ0xfTlVNK0lORklOSVBBVEhfRVhUQ19HUElPT0VfU0hJRlQpKQorCisvKioKKyAqIGlwYXRoX3BlX2hhbmRsZV9od2Vycm9ycyAtIGRpc3BsYXkgaGFyZHdhcmUgZXJyb3JzLgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBtc2c6IHRoZSBvdXRwdXQgYnVmZmVyCisgKiBAbXNnbDogdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBVc2Ugc2FtZSBtc2cgYnVmZmVyIGFzIHJlZ3VsYXIgZXJyb3JzIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBzdGFjaworICogdXNlLiAgTW9zdCBoYXJkd2FyZSBlcnJvcnMgYXJlIGNhdGFzdHJvcGhpYywgYnV0IGZvciByaWdodCBub3csCisgKiB3ZSdsbCBwcmludCB0aGVtIGFuZCBjb250aW51ZS4gIFdlIHJldXNlIHRoZSBzYW1lIG1lc3NhZ2UgYnVmZmVyIGFzCisgKiBpcGF0aF9oYW5kbGVfZXJyb3JzKCkgdG8gYXZvaWQgZXhjZXNzaXZlIHN0YWNrIHVzYWdlLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9wZV9oYW5kbGVfaHdlcnJvcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBjaGFyICptc2csCisJCQkJICAgICBzaXplX3QgbXNnbCkKK3sKKwlpcGF0aF9lcnJfdCBod2VycnM7CisJdTMyIGJpdHMsIGN0cmw7CisJaW50IGlzZmF0YWwgPSAwOworCWNoYXIgYml0c21zZ1s2NF07CisKKwlod2VycnMgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycnN0YXR1cyk7CisJaWYgKCFod2VycnMpIHsKKwkJLyoKKwkJICogYmV0dGVyIHRoYW4gcHJpbnRpbmcgY29mdXNpbmcgbWVzc2FnZXMKKwkJICogVGhpcyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGNsZWFyaW5nIHRoZSBjcmMgZXJyb3IsIG9yCisJCSAqIHRoZSBwbGwgZXJyb3IgZHVyaW5nIGluaXQuCisJCSAqLworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJDYWxsZWQgYnV0IG5vIGhhcmR3YXJlIGVycm9ycyBzZXRcbiIpOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChod2VycnMgPT0gfjBVTEwpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIlJlYWQgb2YgaGFyZHdhcmUgZXJyb3Igc3RhdHVzIGZhaWxlZCAiCisJCQkgICAgICAiKGFsbCBiaXRzIHNldCk7IGlnbm9yaW5nXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpcGF0aF9zdGF0cy5zcHNfaHdlcnJzKys7CisKKwkvKiBBbHdheXMgY2xlYXIgdGhlIGVycm9yIHN0YXR1cyByZWdpc3RlciwgZXhjZXB0IE1FTUJJU1RGQUlMLAorCSAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBjb250aW51ZSBvciBzdG9wIHVzaW5nIHRoZSBjaGlwLgorCSAqIFdlIHdhbnQgdGhhdCBzZXQgc28gd2Uga25vdyBpdCBmYWlsZWQsIGV2ZW4gYWNyb3NzIGRyaXZlciByZWxvYWQuCisJICogV2UnbGwgc3RpbGwgaWdub3JlIGl0IGluIHRoZSBod2Vycm1hc2suICBXZSBkbyB0aGlzIHBhcnRseSBmb3IKKwkgKiBkaWFnbm9zdGljcywgYnV0IGFsc28gZm9yIHN1cHBvcnQgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyY2xlYXIsCisJCQkgaHdlcnJzJn5JTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEKTsKKworCWh3ZXJycyAmPSBkZC0+aXBhdGhfaHdlcnJtYXNrOworCisJLyoKKwkgKiBtYWtlIHN1cmUgd2UgZ2V0IHRoaXMgbXVjaCBvdXQsIHVubGVzcyB0b2xkIHRvIGJlIHF1aWV0LAorCSAqIG9yIGl0J3Mgb2NjdXJyZWQgd2l0aGluIHRoZSBsYXN0IDUgc2Vjb25kcworCSAqLworCWlmICgoaHdlcnJzICYgfmRkLT5pcGF0aF9sYXN0aHdlcnJvcikgfHwKKwkgICAgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9WRVJCREJHKSkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkhhcmR3YXJlIGVycm9yOiBod2Vycj0weCVsbHggIgorCQkJICIoY2xlYXJlZClcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGh3ZXJycyk7CisJZGQtPmlwYXRoX2xhc3Rod2Vycm9yIHw9IGh3ZXJyczsKKworCWlmIChod2VycnMgJiB+aW5maW5pcGF0aF9od2VfYml0c2V4dGFudCkKKwkJaXBhdGhfZGV2X2VycihkZCwgImh3ZXJyb3IgaW50ZXJydXB0IHdpdGggdW5rbm93biBlcnJvcnMgIgorCQkJICAgICAgIiVsbHggc2V0XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgICAgKGh3ZXJycyAmIH5pbmZpbmlwYXRoX2h3ZV9iaXRzZXh0YW50KSk7CisKKwljdHJsID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCk7CisJaWYgKGN0cmwgJiBJTkZJTklQQVRIX0NfRlJFRVpFTU9ERSkgeworCQlpZiAoaHdlcnJzKSB7CisJCQkvKgorCQkJICogaWYgYW55IHNldCB0aGF0IHdlIGFyZW4ndCBpZ25vcmluZyBvbmx5IG1ha2UgdGhlCisJCQkgKiBjb21wbGFpbnQgb25jZSwgaW4gY2FzZSBpdCdzIHN0dWNrIG9yIHJlY3VycmluZywKKwkJCSAqIGFuZCB3ZSBnZXQgaGVyZSBtdWx0aXBsZSB0aW1lcworCQkJICovCisJCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkgeworCQkJCWlwYXRoX2Rldl9lcnIoZGQsICJGYXRhbCBFcnJvciAoZnJlZXplICIKKwkJCQkJICAgICAgIm1vZGUpLCBubyBsb25nZXIgdXNhYmxlXG4iKTsKKwkJCQlpc2ZhdGFsID0gMTsKKwkJCX0KKwkJCS8qCisJCQkgKiBNYXJrIGFzIGhhdmluZyBoYWQgYW4gZXJyb3IgZm9yIGRyaXZlciwgYW5kIGFsc28KKwkJCSAqIGZvciAvc3lzIGFuZCBzdGF0dXMgd29yZCBtYXBwZWQgdG8gdXNlciBwcm9ncmFtcy4KKwkJCSAqIFRoaXMgbWFya3MgdW5pdCBhcyBub3QgdXNhYmxlLCB1bnRpbCByZXNldAorCQkJICovCisJCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19JQl9SRUFEWTsKKwkJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfSFdFUlJPUjsKKwkJCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfSU5JVFRFRDsKKwkJfSBlbHNlIHsKKwkJCWlwYXRoX2RiZygiQ2xlYXJpbmcgZnJlZXplbW9kZSBvbiBpZ25vcmVkIGhhcmR3YXJlICIKKwkJCQkgICJlcnJvclxuIik7CisJCQljdHJsICY9IH5JTkZJTklQQVRIX0NfRlJFRVpFTU9ERTsKKwkJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCwKKwkJCQkJIGN0cmwpOworCQl9CisJfQorCisJKm1zZyA9ICdcMCc7CisKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRCkgeworCQlzdHJsY2F0KG1zZywgIltNZW1vcnkgQklTVCB0ZXN0IGZhaWxlZCwgUEUtODAwIHVudXNhYmxlXSIsCisJCQltc2dsKTsKKwkJLyogaWdub3JlIGZyb20gbm93IG9uLCBzbyBkaXNhYmxlIHVudGlsIGRyaXZlciByZWxvYWRlZCAqLworCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX0hXRVJST1I7CisJCWRkLT5pcGF0aF9od2Vycm1hc2sgJj0gfklORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQ7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJtYXNrLAorCQkJCSBkZC0+aXBhdGhfaHdlcnJtYXNrKTsKKwl9CisJaWYgKGh3ZXJycyAmIChJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSworCQkgICAgICA8PCBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQpKSB7CisJCWJpdHMgPSAodTMyKSAoKGh3ZXJycyA+PgorCQkJICAgICAgIElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9TSElGVCkgJgorCQkJICAgICAgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01BU0spOworCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywgIltSWEUgUGFyaXR5IEVycnMgJXhdICIsCisJCQkgYml0cyk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwl9CisJaWYgKGh3ZXJycyAmIChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTUFTSworCQkgICAgICA8PCBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQpKSB7CisJCWJpdHMgPSAodTMyKSAoKGh3ZXJycyA+PgorCQkJICAgICAgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCkgJgorCQkJICAgICAgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX01BU0spOworCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywgIltUWEUgUGFyaXR5IEVycnMgJXhdICIsCisJCQkgYml0cyk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwl9CisJaWYgKGh3ZXJycyAmIChJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX01BU0sKKwkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9TSElGVCkpIHsKKwkJYml0cyA9ICh1MzIpICgoaHdlcnJzID4+CisJCQkgICAgICAgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9TSElGVCkgJgorCQkJICAgICAgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9NQVNLKTsKKwkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csCisJCQkgIltQQ0llIE1lbSBQYXJpdHkgRXJycyAleF0gIiwgYml0cyk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwl9CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0lCQ0JVU1RPU1BDUEFSSVRZRVJSKQorCQlzdHJsY2F0KG1zZywgIltJQjJJUEFUSCBQYXJpdHldIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0lCQ0JVU0ZSU1BDUEFSSVRZRVJSKQorCQlzdHJsY2F0KG1zZywgIltJUEFUSDJJQiBQYXJpdHldIiwgbXNnbCk7CisKKyNkZWZpbmUgX0lQQVRIX1BMTF9GQUlMIChJTkZJTklQQVRIX0hXRV9DT1JFUExMX0ZCU0xJUCB8CVwKKwkJCSBJTkZJTklQQVRIX0hXRV9DT1JFUExMX1JGU0xJUCApCisKKwlpZiAoaHdlcnJzICYgX0lQQVRIX1BMTF9GQUlMKSB7CisJCXNucHJpbnRmKGJpdHNtc2csIHNpemVvZiBiaXRzbXNnLAorCQkJICJbUExMIGZhaWxlZCAoJWxseCksIFBFLTgwMCB1bnVzYWJsZV0iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwkJLyogaWdub3JlIGZyb20gbm93IG9uLCBzbyBkaXNhYmxlIHVudGlsIGRyaXZlciByZWxvYWRlZCAqLworCQlkZC0+aXBhdGhfaHdlcnJtYXNrICY9IH4oaHdlcnJzICYgX0lQQVRIX1BMTF9GQUlMKTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2Vycm1hc2ssCisJCQkJIGRkLT5pcGF0aF9od2Vycm1hc2spOworCX0KKworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQpIHsKKwkJLyoKKwkJICogSWYgaXQgb2NjdXJzLCBpdCBpcyBsZWZ0IG1hc2tlZCBzaW5jZSB0aGUgZXRlcm5hbAorCQkgKiBpbnRlcmZhY2UgaXMgdW51c2VkCisJCSAqLworCQlkZC0+aXBhdGhfaHdlcnJtYXNrICY9IH5JTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQ7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJtYXNrLAorCQkJCSBkZC0+aXBhdGhfaHdlcnJtYXNrKTsKKwl9CisKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfUENJRVBPSVNPTkVEVExQKQorCQlzdHJsY2F0KG1zZywgIltQQ0llIFBvaXNvbmVkIFRMUF0iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfUENJRUNQTFRJTUVPVVQpCisJCXN0cmxjYXQobXNnLCAiW1BDSWUgY29tcGxldGlvbiB0aW1lb3V0XSIsIG1zZ2wpOworCisJLyoKKwkgKiBJbiBwcmFjdGljZSwgaXQncyB1bmxpa2VseSB3dGhhdCB3ZSdsbCBzZWUgUENJZSBQTEwsIG9yIGJ1cworCSAqIHBhcml0eSBvciBtZW1vcnkgcGFyaXR5IGVycm9yIGZhaWx1cmVzLCBiZWNhdXNlIG1vc3QgbGlrZWx5IHdlCisJICogd29uJ3QgYmUgYWJsZSB0byB0YWxrIHRvIHRoZSBjb3JlIG9mIHRoZSBjaGlwLiAgTm9uZXRoZWxlc3MsIHdlCisJICogbWlnaHQgc2VlIHRoZW0sIGlmIHRoZXkgYXJlIGluIHBhcnRzIG9mIHRoZSBQQ0llIGNvcmUgdGhhdCBhcmVuJ3QKKwkgKiBlc3NlbnRpYWwuCisJICovCisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1BDSUUxUExMRkFJTEVEKQorCQlzdHJsY2F0KG1zZywgIltQQ0llUExMMV0iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfUENJRTBQTExGQUlMRUQpCisJCXN0cmxjYXQobXNnLCAiW1BDSWVQTEwwXSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZWFRMSCkKKwkJc3RybGNhdChtc2csICJbUENJZSBYVExIIGNvcmUgcGFyaXR5XSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZWEFETSkKKwkJc3RybGNhdChtc2csICJbUENJZSBBRE0gVFggY29yZSBwYXJpdHldIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlSQURNKQorCQlzdHJsY2F0KG1zZywgIltQQ0llIEFETSBSWCBjb3JlIHBhcml0eV0iLCBtc2dsKTsKKworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9SWERTWU5DTUVNUEFSSVRZRVJSKQorCQlzdHJsY2F0KG1zZywgIltSeCBEc3luY10iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKQorCQlzdHJsY2F0KG1zZywgIltTZXJEZXMgUExMXSIsIG1zZ2wpOworCisJaXBhdGhfZGV2X2VycihkZCwgIiVzIGhhcmR3YXJlIGVycm9yXG4iLCBtc2cpOworCWlmIChpc2ZhdGFsICYmICFpcGF0aF9kaWFnX2ludXNlICYmIGRkLT5pcGF0aF9mcmVlemVtc2cpIHsKKwkJLyoKKwkJICogZm9yIC9zeXMgc3RhdHVzIGZpbGUgOyBpZiBubyB0cmFpbGluZyB9IGlzIGNvcGllZCwgd2UnbGwKKwkJICoga25vdyBpdCB3YXMgdHJ1bmNhdGVkLgorCQkgKi8KKwkJc25wcmludGYoZGQtPmlwYXRoX2ZyZWV6ZW1zZywgZGQtPmlwYXRoX2ZyZWV6ZWxlbiwKKwkJCSAieyVzfSIsIG1zZyk7CisJfQorfQorCisvKioKKyAqIGlwYXRoX3BlX2JvYXJkbmFtZSAtIGZpbGwgaW4gdGhlIGJvYXJkIG5hbWUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbmFtZTogdGhlIG91dHB1dCBidWZmZXIKKyAqIEBuYW1lbGVuOiB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIGluZm8gaXMgYmFzZWQgb24gdGhlIGJvYXJkIHJldmlzaW9uIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfcGVfYm9hcmRuYW1lKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgY2hhciAqbmFtZSwKKwkJCSAgICAgIHNpemVfdCBuYW1lbGVuKQoreworCWNoYXIgKm4gPSBOVUxMOworCXU4IGJvYXJkcmV2ID0gZGQtPmlwYXRoX2JvYXJkcmV2OworCWludCByZXQ7CisKKwlzd2l0Y2ggKGJvYXJkcmV2KSB7CisJY2FzZSAwOgorCQluID0gIkluZmluaVBhdGhfRW11bGF0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQluID0gIkluZmluaVBhdGhfUEUtODAwLUJyaW5ndXAiOworCQlicmVhazsKKwljYXNlIDI6CisJCW4gPSAiSW5maW5pUGF0aF9QRS04ODAiOworCQlicmVhazsKKwljYXNlIDM6CisJCW4gPSAiSW5maW5pUGF0aF9QRS04NTAiOworCQlicmVhazsKKwljYXNlIDQ6CisJCW4gPSAiSW5maW5pUGF0aF9QRS04NjAiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJICAgICAgIkRvbid0IHlldCBrbm93IGFib3V0IGJvYXJkIHdpdGggSUQgJXVcbiIsCisJCQkgICAgICBib2FyZHJldik7CisJCXNucHJpbnRmKG5hbWUsIG5hbWVsZW4sICJVbmtub3duX0luZmluaVBhdGhfUEUtOHh4XyV1IiwKKwkJCSBib2FyZHJldik7CisJCWJyZWFrOworCX0KKwlpZiAobikKKwkJc25wcmludGYobmFtZSwgbmFtZWxlbiwgIiVzIiwgbik7CisKKwlpZiAoZGQtPmlwYXRoX21hanJldiAhPSA0IHx8IGRkLT5pcGF0aF9taW5yZXYgIT0gMSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5zdXBwb3J0ZWQgUEUtODAwIHJldmlzaW9uICV1LiV1IVxuIiwKKwkJCSAgICAgIGRkLT5pcGF0aF9tYWpyZXYsIGRkLT5pcGF0aF9taW5yZXYpOworCQlyZXQgPSAxOworCX0gZWxzZQorCQlyZXQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9wZV9pbml0X2h3ZXJyb3JzIC0gZW5hYmxlIGhhcmR3YXJlIGVycm9ycworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBub3cgdGhhdCB3ZSBoYXZlIGZpbmlzaGVkIGluaXRpYWxpemluZyBldmVyeXRoaW5nIHRoYXQgbWlnaHQgcmVhc29uYWJseQorICogY2F1c2UgYSBoYXJkd2FyZSBlcnJvciwgYW5kIGNsZWFyZWQgdGhvc2UgZXJyb3JzIGJpdHMgYXMgdGhleSBvY2N1ciwKKyAqIHdlIGNhbiBlbmFibGUgaGFyZHdhcmUgZXJyb3JzIGluIHRoZSBtYXNrIChwb3RlbnRpYWxseSBlbmFibGluZworICogZnJlZXplIG1vZGUpLCBhbmQgZW5hYmxlIGhhcmR3YXJlIGVycm9ycyBhcyBlcnJvcnMgKGFsb25nIHdpdGgKKyAqIGV2ZXJ5dGhpbmcgZWxzZSkgaW4gZXJyb3JtYXNrCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3BlX2luaXRfaHdlcnJvcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWlwYXRoX2Vycl90IHZhbDsKKwl1NjQgZXh0c3ZhbDsKKworCWV4dHN2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRzdGF0dXMpOworCisJaWYgKCEoZXh0c3ZhbCAmIElORklOSVBBVEhfRVhUU19NRU1CSVNUX0VORFRFU1QpKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiTWVtQklTVCBkaWQgbm90IGNvbXBsZXRlIVxuIik7CisKKwl2YWwgPSB+MFVMTDsJLyogYmFycmluZyBidWdzLCBhbGwgaHdlcnJvcnMgYmVjb21lIGludGVycnVwdHMsICovCisKKwlpZiAoIWRkLT5pcGF0aF9ib2FyZHJldikJLy8gbm8gUExMIGZvciBFbXVsYXRvcgorCQl2YWwgJj0gfklORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRDsKKworCS8qIHdvcmthcm91bmQgYnVnIDk0NjAgaW4gaW50ZXJuYWwgaW50ZXJmYWNlIGJ1cyBwYXJpdHkgY2hlY2tpbmcgKi8KKwl2YWwgJj0gfklORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlSQURNOworCisJZGQtPmlwYXRoX2h3ZXJybWFzayA9IHZhbDsKK30KKworLyoqCisgKiBpcGF0aF9wZV9icmluZ3VwX3NlcmRlcyAtIGJyaW5nIHVwIHRoZSBzZXJkZXMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfcGVfYnJpbmd1cF9zZXJkZXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU2NCB2YWwsIHRtcCwgY29uZmlnMTsKKwlpbnQgcmV0ID0gMCwgY2hhbmdlID0gMDsKKworCWlwYXRoX2RiZygiVHJ5aW5nIHRvIGJyaW5ndXAgc2VyZGVzXG4iKTsKKworCWlmIChpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycnN0YXR1cykgJgorCSAgICBJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQpIHsKKwkJaXBhdGhfZGJnKCJBdCBzdGFydCwgc2VyZGVzIFBMTCBmYWlsZWQgYml0IHNldCAiCisJCQkgICJpbiBod2VycnN0YXR1cywgY2xlYXJpbmcgYW5kIGNvbnRpbnVpbmdcbiIpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyY2xlYXIsCisJCQkJIElORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCk7CisJfQorCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMCk7CisJY29uZmlnMSA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzEpOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiU2VyRGVzIHN0YXR1cyBjb25maWcwPSVsbHggY29uZmlnMT0lbGx4LCAiCisJCSAgICJ4Z3hzY29uZmlnICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY29uZmlnMSwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZykpOworCisJLyoKKwkgKiBGb3JjZSByZXNldCBvbiwgYWxzbyBzZXQgcnhkZXRlY3QgZW5hYmxlLiAgTXVzdCBkbyBiZWZvcmUgcmVhZGluZworCSAqIHNlcmRlc3N0YXR1cyBhdCBsZWFzdCBmb3Igc2ltdWxhdGlvbiwgb3Igc29tZSBvZiB0aGUgYml0cyBpbgorCSAqIHNlcmRlcyBzdGF0dXMgd2lsbCBjb21lIGJhY2sgYXMgdW5kZWZpbmVkIGFuZCBjYXVzZSBzaW11bGF0aW9uCisJICogZmFpbHVyZXMKKwkgKi8KKwl2YWwgfD0gSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfUExMIHwgSU5GSU5JUEFUSF9TRVJEQzBfUlhERVRFQ1RfRU4KKwkJfCBJTkZJTklQQVRIX1NFUkRDMF9MMVBXUl9ETjsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsIHZhbCk7CisJLyogYmUgc3VyZSBjaGlwIHNhdyBpdCAqLworCXRtcCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCXVkZWxheSg1KTsJCS8qIG5lZWQgcGxsIHJlc2V0IHNldCBhdCBsZWFzdCBmb3IgYSBiaXQgKi8KKwkvKgorCSAqIGFmdGVyIFBMTCBpcyByZXNldCwgc2V0IHRoZSBwZXItbGFuZSBSZXNldHMgYW5kIFR4SWRsZSBhbmQKKwkgKiBjbGVhciB0aGUgUExMIHJlc2V0IGFuZCByeGRldGVjdCAodG8gZ2V0IGZhbGxpbmcgZWRnZSkuCisJICogTGVhdmUgTDFQV1IgYml0cyBzZXQgKHBlcm1hbmVudGx5KQorCSAqLworCXZhbCAmPSB+KElORklOSVBBVEhfU0VSREMwX1JYREVURUNUX0VOIHwgSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfUExMCisJCSB8IElORklOSVBBVEhfU0VSREMwX0wxUFdSX0ROKTsKKwl2YWwgfD0gSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfTUFTSyB8IElORklOSVBBVEhfU0VSREMwX1RYSURMRTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJDbGVhcmluZyBwbGwgcmVzZXQgYW5kIHNldHRpbmcgbGFuZSByZXNldHMgIgorCQkgICAiYW5kIHR4aWRsZSAoJWxseClcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwLCB2YWwpOworCS8qIGJlIHN1cmUgY2hpcCBzYXcgaXQgKi8KKwl0bXAgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwkvKiBuZWVkIFBMTCByZXNldCBjbGVhciBmb3IgYXQgbGVhc3QgMTEgdXNlYyBiZWZvcmUgbGFuZQorCSAqIHJlc2V0cyBjbGVhcmVkOyBnaXZlIGl0IGEgZmV3IG1vcmUgdG8gYmUgc3VyZSAqLworCXVkZWxheSgxNSk7CisJdmFsICY9IH4oSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfTUFTSyB8IElORklOSVBBVEhfU0VSREMwX1RYSURMRSk7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJDbGVhcmluZyBsYW5lIHJlc2V0cyBhbmQgdHhpZGxlICIKKwkJICAgIih3cml0aW5nICVsbHgpXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMCwgdmFsKTsKKwkvKiBiZSBzdXJlIGNoaXAgc2F3IGl0ICovCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisKKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnKTsKKwlpZiAoKCh2YWwgPj4gSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX1NISUZUKSAmCisJICAgICBJTkZJTklQQVRIX1hHWFNfTURJT0FERFJfTUFTSykgIT0gMykgeworCQl2YWwgJj0KKwkJCX4oSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX01BU0sgPDwKKwkJCSAgSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX1NISUZUKTsKKwkJLyogTURJTyBhZGRyZXNzIDMgKi8KKwkJdmFsIHw9IDNVTEwgPDwgSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX1NISUZUOworCQljaGFuZ2UgPSAxOworCX0KKwlpZiAodmFsICYgSU5GSU5JUEFUSF9YR1hTX1JFU0VUKSB7CisJCXZhbCAmPSB+SU5GSU5JUEFUSF9YR1hTX1JFU0VUOworCQljaGFuZ2UgPSAxOworCX0KKwlpZiAoY2hhbmdlKQorCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcsIHZhbCk7CisKKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwKTsKKworCS8qIGNsZWFyIGN1cnJlbnQgYW5kIGRlLWVtcGhhc2lzIGJpdHMgKi8KKwljb25maWcxICY9IH4weDBmZmZmZmZmZjAwVUxMOworCS8qIHNldCBjdXJyZW50IHRvIDIwbWEgKi8KKwljb25maWcxIHw9IDB4MDAwMDAwMDAwMDBVTEw7CisJLyogc2V0IGRlLWVtcGhhc2lzIHRvIC01LjY4ZEIgKi8KKwljb25maWcxIHw9IDB4MGNjY2MwMDAwMDBVTEw7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcxLCBjb25maWcxKTsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgImRvbmU6IFNlckRlcyBzdGF0dXMgY29uZmlnMD0lbGx4ICIKKwkJICAgImNvbmZpZzE9JWxseCwgc3N0YXR1cz0lbGx4IHhneHM9JWxseFxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLCAodW5zaWduZWQgbG9uZyBsb25nKSBjb25maWcxLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNzdGF0dXMpLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnKSk7CisKKwlpZiAoIWlwYXRoX3dhaXRmb3JfbWRpb19jbWRyZWFkeShkZCkpIHsKKwkJaXBhdGhfd3JpdGVfa3JlZygKKwkJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX21kaW8sCisJCQlpcGF0aF9tZGlvX3JlcShJUEFUSF9NRElPX0NNRF9SRUFELCAzMSwKKwkJCQkgICAgICAgSVBBVEhfTURJT19DVFJMX1hHWFNfUkVHXzgsIDApKTsKKwkJaWYgKGlwYXRoX3dhaXRmb3JfY29tcGxldGUoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfbWRpbywKKwkJCQkJICAgSVBBVEhfTURJT19EQVRBVkFMSUQsICZ2YWwpKQorCQkJaXBhdGhfZGJnKCJOZXZlciBnb3QgTURJTyBkYXRhIGZvciBYR1hTICIKKwkJCQkgICJzdGF0dXMgcmVhZFxuIik7CisJCWVsc2UKKwkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIk1ESU8gUmVhZCByZWc4LCAiCisJCQkJICAgIidiYW5rJyAzMSAleFxuIiwgKHUzMikgdmFsKTsKKwl9IGVsc2UKKwkJaXBhdGhfZGJnKCJOZXZlciBnb3QgTURJTyBjbWRyZWFkeSBmb3IgWEdYUyBzdGF0dXMgcmVhZFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3BlX3F1aWV0X3NlcmRlcyAtIHNldCBzZXJkZXMgdG8gdHhpZGxlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQ2FsbGVkIHdoZW4gZHJpdmVyIGlzIGJlaW5nIHVubG9hZGVkCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3BlX3F1aWV0X3NlcmRlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTY0IHZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzApOworCisJdmFsIHw9IElORklOSVBBVEhfU0VSREMwX1RYSURMRTsKKwlpcGF0aF9kYmcoIlNldHRpbmcgVHhJZGxlRW4gb24gc2VyZGVzIChjb25maWcwID0gJWxseClcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsIHZhbCk7Cit9CisKKy8qIHRoaXMgaXMgbm90IHlldCBuZWVkZWQgb24gdGhlIFBFODAwLCBzbyBqdXN0IHJldHVybiAwLiAqLworc3RhdGljIGludCBpcGF0aF9wZV9pbnRjb25maWcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX3NldHVwX3BlX3NldGV4dGxlZCAtIHNldCB0aGUgc3RhdGUgb2YgdGhlIHR3byBleHRlcm5hbCBMRURzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGxzdDogdGhlIEwgc3RhdGUKKyAqIEBsdHN0OiB0aGUgTFQgc3RhdGUKKworICogVGhlc2UgTEVEcyBpbmRpY2F0ZSB0aGUgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgc3RhdGUgb2YgSUIgbGluay4KKyAqIEZvciB0aGlzIGNoaXAgKGF0IGxlYXN0IHdpdGggcmVjb21tZW5kZWQgYm9hcmQgcGlub3V0cyksIExFRDEKKyAqIGlzIFllbGxvdyAobG9naWNhbCBzdGF0ZSkgYW5kIExFRDIgaXMgR3JlZW4gKHBoeXNpY2FsIHN0YXRlKSwKKyAqCisgKiBOb3RlOiAgV2UgdHJ5IHRvIG1hdGNoIHRoZSBNZWxsYW5veCBIQ0EgTEVEIGJlaGF2aW9yIGFzIGJlc3QKKyAqIHdlIGNhbi4gIEdyZWVuIGluZGljYXRlcyBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIE9LIChzb21ldGhpbmcgaXMKKyAqIHBsdWdnZWQgaW4sIGFuZCB3ZSBjYW4gdHJhaW4pLgorICogQW1iZXIgaW5kaWNhdGVzIHRoZSBsaW5rIGlzIGxvZ2ljYWxseSB1cCAoQUNUSVZFKS4KKyAqIE1lbGxhbm94IGZ1cnRoZXIgYmxpbmtzIHRoZSBhbWJlciBMRUQgdG8gaW5kaWNhdGUgZGF0YSBwYWNrZXQKKyAqIGFjdGl2aXR5LCBidXQgd2UgaGF2ZSBubyBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGF0LCBzbyBpdCB3b3VsZAorICogcmVxdWlyZSB3YWtpbmcgdXAgZXZlcnkgMTAtMjAgbXNlY3MgYW5kIGNoZWNraW5nIHRoZSBjb3VudGVycworICogb24gdGhlIGNoaXAsIGFuZCB0aGVuIHR1cm5pbmcgdGhlIExFRCBvZmYgaWYgYXBwcm9wcmlhdGUuICBUaGF0J3MKKyAqIHZpc2libGUgb3ZlcmhlYWQsIHNvIG5vdCBzb21ldGhpbmcgd2Ugd2lsbCBkby4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3NldHVwX3BlX3NldGV4dGxlZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU2NCBsc3QsCisJCQkJICAgICB1NjQgbHRzdCkKK3sKKwl1NjQgZXh0Y3RsOworCisJLyogdGhlIGRpYWdzIHVzZSB0aGUgTEVEIHRvIGluZGljYXRlIGRpYWcgaW5mbywgc28gd2UgbGVhdmUKKwkgKiB0aGUgZXh0ZXJuYWwgTEVEIGFsb25lIHdoZW4gdGhlIGRpYWdzIGFyZSBydW5uaW5nICovCisJaWYgKGlwYXRoX2RpYWdfaW51c2UpCisJCXJldHVybjsKKworCWV4dGN0bCA9IGRkLT5pcGF0aF9leHRjdHJsICYgfihJTkZJTklQQVRIX0VYVENfTEVEMVBSSVBPUlRfT04gfAorCQkJCSAgICAgICBJTkZJTklQQVRIX0VYVENfTEVEMlBSSVBPUlRfT04pOworCisJaWYgKGx0c3QgJiBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQKQorCQlleHRjdGwgfD0gSU5GSU5JUEFUSF9FWFRDX0xFRDJQUklQT1JUX09OOworCWlmIChsc3QgPT0gSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFKQorCQlleHRjdGwgfD0gSU5GSU5JUEFUSF9FWFRDX0xFRDFQUklQT1JUX09OOworCWRkLT5pcGF0aF9leHRjdHJsID0gZXh0Y3RsOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0Y3RybCwgZXh0Y3RsKTsKK30KKworLyoqCisgKiBpcGF0aF9zZXR1cF9wZV9jbGVhbnVwIC0gY2xlYW4gdXAgYW55IHBlci1jaGlwIGNoaXAtc3BlY2lmaWMgc3R1ZmYKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGRyaXZlciB1bmxvYWQuCisgKiBXZSBkbyB0aGUgcGNpX2Rpc2FibGVfbXNpIGhlcmUsIG5vdCBpbiBnZW5lcmljIGNvZGUsIGJlY2F1c2UgaXQKKyAqIGlzbid0IHVzZWQgZm9yIHRoZSBIVC00MDAuIElmIHdlIGRvIGVuZCB1cCBuZWVkaW5nIHBjaV9lbmFibGVfbXNpCisgKiBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUgZm9yIEhULTQwMCwgd2UnbGwgbW92ZSB0aGUgY2FsbCBiYWNrCisgKiBpbnRvIHRoZSBtYWluIGluaXRfb25lIGNvZGUuCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3NldHVwX3BlX2NsZWFudXAoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWRkLT5pcGF0aF9tc2lfbG8gPSAwOwkvKiBqdXN0IGluIGNhc2UgdW5sb2FkIGZhaWxzICovCisJcGNpX2Rpc2FibGVfbXNpKGRkLT5wY2lkZXYpOworfQorCisvKioKKyAqIGlwYXRoX3NldHVwX3BlX2NvbmZpZyAtIHNldHVwIFBDSWUgY29uZmlnIHJlbGF0ZWQgc3R1ZmYKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcGRldjogdGhlIFBDSSBkZXZpY2UKKyAqCisgKiBUaGUgcGNpX2VuYWJsZV9tc2koKSBjYWxsIHdpbGwgZmFpbCBvbiBzeXN0ZW1zIHdpdGggTVNJIHF1aXJrcworICogc3VjaCBhcyB0aG9zZSB3aXRoIEFNRDgxMzEsIGV2ZW4gaWYgdGhlIGRldmljZSBvZiBpbnRlcmVzdCBpcyBub3QKKyAqIGF0dGFjaGVkIHRvIHRoYXQgZGV2aWNlLCAoaW4gdGhlIDIuNi4xMyAtIDIuNi4xNSBrZXJuZWxzLCBhdCBsZWFzdCwgZml4ZWQKKyAqIGxhdGUgaW4gMi42LjE2KS4KKyAqIEFsbCB0aGF0IGNhbiBiZSBkb25lIGlzIHRvIGVkaXQgdGhlIGtlcm5lbCBzb3VyY2UgdG8gcmVtb3ZlIHRoZSBxdWlyaworICogY2hlY2sgdW50aWwgdGhhdCBpcyBmaXhlZC4KKyAqIFdlIGRvIG5vdCBuZWVkIHRvIGNhbGwgZW5hYmxlX21zaSgpIGZvciBvdXIgSHlwZXJUcmFuc3BvcnQgY2hpcCAoSFQtNDAwKSwKKyAqIGV2ZW4gdGhvc2UgaXQgdXNlcyBNU0ksIGFuZCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBxdWlyayB3YXJuaW5nLCBzbworICogU28gd2UgY2FsbCBlbmFibGVfbXNpIG9ubHkgZm9yIHRoZSBQRS04MDAuICBJZiB3ZSBkbyBlbmQgdXAgbmVlZGluZworICogcGNpX2VuYWJsZV9tc2kgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlIGZvciBIVC00MDAsIHdlJ2xsIG1vdmUgdGhlCisgKiBjYWxsIGJhY2sgaW50byB0aGUgbWFpbiBpbml0X29uZSBjb2RlLgorICogV2Ugc2F2ZSB0aGUgbXNpIGxvIGFuZCBoaSB2YWx1ZXMsIHNvIHdlIGNhbiByZXN0b3JlIHRoZW0gYWZ0ZXIKKyAqIGNoaXAgcmVzZXQgKHRoZSBrZXJuZWwgUENJIGluZnJhc3RydWN0dXJlIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGF0CisgKiBjb3JyZWN0bHkpLgorICovCitzdGF0aWMgaW50IGlwYXRoX3NldHVwX3BlX2NvbmZpZyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBwb3MsIHJldDsKKworCWRkLT5pcGF0aF9tc2lfbG8gPSAwOwkvKiB1c2VkIGFzIGEgZmxhZyBkdXJpbmcgcmVzZXQgcHJvY2Vzc2luZyAqLworCXJldCA9IHBjaV9lbmFibGVfbXNpKGRkLT5wY2lkZXYpOworCWlmIChyZXQpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJwY2lfZW5hYmxlX21zaSBmYWlsZWQ6ICVkLCAiCisJCQkgICAgICAiaW50ZXJydXB0cyBtYXkgbm90IHdvcmtcbiIsIHJldCk7CisJLyogY29udGludWUgZXZlbiBpZiBpdCBmYWlscywgd2UgbWF5IHN0aWxsIGJlIE9LLi4uICovCisKKwlpZiAoKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGQtPnBjaWRldiwgUENJX0NBUF9JRF9NU0kpKSkgeworCQl1MTYgY29udHJvbDsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRkLT5wY2lkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19MTywKKwkJCQkgICAgICAmZGQtPmlwYXRoX21zaV9sbyk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfSEksCisJCQkJICAgICAgJmRkLT5pcGF0aF9tc2lfaGkpOworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLAorCQkJCSAgICAgJmNvbnRyb2wpOworCQkvKiBub3cgc2F2ZSB0aGUgZGF0YSAodmVjdG9yKSBpbmZvICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRkLT5wY2lkZXYsCisJCQkJICAgICBwb3MgKyAoKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKQorCQkJCQkgICAgPyAxMiA6IDgpLAorCQkJCSAgICAgJmRkLT5pcGF0aF9tc2lfZGF0YSk7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlJlYWQgbXNpIGRhdGEgMHgleCBmcm9tIGNvbmZpZyBvZmZzZXQgIgorCQkJICAgIjB4JXgsIGNvbnRyb2w9MHgleFxuIiwgZGQtPmlwYXRoX21zaV9kYXRhLAorCQkJICAgcG9zICsgKChjb250cm9sICYgUENJX01TSV9GTEFHU182NEJJVCkgPyAxMiA6IDgpLAorCQkJICAgY29udHJvbCk7CisJCS8qIHdlIHNhdmUgdGhlIGNhY2hlbGluZXNpemUgYWxzbywgYWx0aG91Z2ggaXQgZG9lc24ndAorCQkgKiByZWFsbHkgbWF0dGVyICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRkLT5wY2lkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsCisJCQkJICAgICAmZGQtPmlwYXRoX3BjaV9jYWNoZWxpbmUpOworCX0gZWxzZQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ2FuJ3QgZmluZCBNU0kgY2FwYWJpbGl0eSwgIgorCQkJICAgICAgImNhbid0IHNhdmUgTVNJIHNldHRpbmdzIGZvciByZXNldFxuIik7CisJaWYgKChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRkLT5wY2lkZXYsIFBDSV9DQVBfSURfRVhQKSkpIHsKKwkJdTE2IGxpbmtzdGF0OworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS1NUQSwKKwkJCQkgICAgICZsaW5rc3RhdCk7CisJCWxpbmtzdGF0ID4+PSA0OworCQlsaW5rc3RhdCAmPSAweDFmOworCQlpZiAobGlua3N0YXQgIT0gOCkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJQQ0llIHdpZHRoICV1LCAiCisJCQkJICAgICAgInBlcmZvcm1hbmNlIHJlZHVjZWRcbiIsIGxpbmtzdGF0KTsKKwl9CisJZWxzZQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ2FuJ3QgZmluZCBQQ0kgRXhwcmVzcyAiCisJCQkgICAgICAiY2FwYWJpbGl0eSFcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9pbml0X3BlX3ZhcmlhYmxlcyh2b2lkKQoreworCS8qCisJICogYml0cyBmb3Igc2VsZWN0aW5nIGkyYyBkaXJlY3Rpb24gYW5kIHZhbHVlcywKKwkgKiB1c2VkIGZvciBJMkMgc2VyaWFsIGZsYXNoCisJICovCisJaXBhdGhfZ3Bpb19zZGFfbnVtID0gX0lQQVRIX0dQSU9fU0RBX05VTTsKKwlpcGF0aF9ncGlvX3NjbF9udW0gPSBfSVBBVEhfR1BJT19TQ0xfTlVNOworCWlwYXRoX2dwaW9fc2RhID0gSVBBVEhfR1BJT19TREE7CisJaXBhdGhfZ3Bpb19zY2wgPSBJUEFUSF9HUElPX1NDTDsKKworCS8qIHZhcmlhYmxlcyBmb3Igc2FuaXR5IGNoZWNraW5nIGludGVycnVwdCBhbmQgZXJyb3JzICovCisJaW5maW5pcGF0aF9od2VfYml0c2V4dGFudCA9CisJCShJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSyA8PAorCQkgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX1NISUZUKSB8CisJCShJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX01BU0sgPDwKKwkJIElORklOSVBBVEhfSFdFX1BDSUVNRU1QQVJJVFlFUlJfU0hJRlQpIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRTFQTExGQUlMRUQgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFMFBMTEZBSUxFRCB8CisJCUlORklOSVBBVEhfSFdFX1BDSUVQT0lTT05FRFRMUCB8CisJCUlORklOSVBBVEhfSFdFX1BDSUVDUExUSU1FT1VUIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVhUTEggfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZWEFETSB8CisJCUlORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlSQURNIHwKKwkJSU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRCB8CisJCUlORklOSVBBVEhfSFdFX0NPUkVQTExfRkJTTElQIHwKKwkJSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9SRlNMSVAgfAorCQlJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQgfAorCQlJTkZJTklQQVRIX0hXRV9JQkNCVVNUT1NQQ1BBUklUWUVSUiB8CisJCUlORklOSVBBVEhfSFdFX0lCQ0JVU0ZSU1BDUEFSSVRZRVJSOworCWluZmluaXBhdGhfaV9iaXRzZXh0YW50ID0KKwkJKElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSyA8PCBJTkZJTklQQVRIX0lfUkNWVVJHX1NISUZUKSB8CisJCShJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSyA8PAorCQkgSU5GSU5JUEFUSF9JX1JDVkFWQUlMX1NISUZUKSB8CisJCUlORklOSVBBVEhfSV9FUlJPUiB8IElORklOSVBBVEhfSV9TUElPU0VOVCB8CisJCUlORklOSVBBVEhfSV9TUElPQlVGQVZBSUwgfCBJTkZJTklQQVRIX0lfR1BJTzsKKwlpbmZpbmlwYXRoX2VfYml0c2V4dGFudCA9CisJCUlORklOSVBBVEhfRV9SRk9STUFURVJSIHwgSU5GSU5JUEFUSF9FX1JWQ1JDIHwKKwkJSU5GSU5JUEFUSF9FX1JJQ1JDIHwgSU5GSU5JUEFUSF9FX1JNSU5QS1RMRU4gfAorCQlJTkZJTklQQVRIX0VfUk1BWFBLVExFTiB8IElORklOSVBBVEhfRV9STE9OR1BLVExFTiB8CisJCUlORklOSVBBVEhfRV9SU0hPUlRQS1RMRU4gfCBJTkZJTklQQVRIX0VfUlVORVhQQ0hBUiB8CisJCUlORklOSVBBVEhfRV9SVU5TVVBWTCB8IElORklOSVBBVEhfRV9SRUJQIHwKKwkJSU5GSU5JUEFUSF9FX1JJQkZMT1cgfCBJTkZJTklQQVRIX0VfUkJBRFZFUlNJT04gfAorCQlJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfCBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwgfAorCQlJTkZJTklQQVRIX0VfUkJBRFRJRCB8IElORklOSVBBVEhfRV9SSERSTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1JIRFIgfCBJTkZJTklQQVRIX0VfUklCTE9TVExJTksgfAorCQlJTkZJTklQQVRIX0VfU01JTlBLVExFTiB8IElORklOSVBBVEhfRV9TTUFYUEtUTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1NVTkRFUlJVTiB8IElORklOSVBBVEhfRV9TUEtUTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1NEUk9QUEVEU01QUEtUIHwgSU5GSU5JUEFUSF9FX1NEUk9QUEVEREFUQVBLVCB8CisJCUlORklOSVBBVEhfRV9TUElPQVJNTEFVTkNIIHwgSU5GSU5JUEFUSF9FX1NVTkVYUEVSUlBLVE5VTSB8CisJCUlORklOSVBBVEhfRV9TVU5TVVBWTCB8IElORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQgfAorCQlJTkZJTklQQVRIX0VfSU5WQUxJREFERFIgfCBJTkZJTklQQVRIX0VfUkVTRVQgfAorCQlJTkZJTklQQVRIX0VfSEFSRFdBUkU7CisKKwlpbmZpbmlwYXRoX2lfcmN2YXZhaWxfbWFzayA9IElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLOworCWluZmluaXBhdGhfaV9yY3Z1cmdfbWFzayA9IElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSzsKK30KKworLyogc2V0dXAgdGhlIE1TSSBzdHVmZiBhZ2FpbiBhZnRlciBhIHJlc2V0LiAgSSdkIGxpa2UgdG8ganVzdCBjYWxsCisgKiBwY2lfZW5hYmxlX21zaSgpIGFuZCByZXF1ZXN0X2lycSgpIGFnYWluLCBidXQgd2hlbiBJIGRvIHRoYXQsCisgKiB0aGUgTVNJIGVuYWJsZSBiaXQgZG9lc24ndCBnZXQgc2V0IGluIHRoZSBjb21tYW5kIHdvcmQsIGFuZAorICogd2Ugc3dpdGNoIHRvIHRvIGEgZGlmZmVyZW50IGludGVycnVwdCB2ZWN0b3IsIHdoaWNoIGlzIGNvbmZ1c2luZywKKyAqIHNvIEkgaW5zdGVhZCBqdXN0IGRvIGl0IGFsbCBpbmxpbmUuICBQZXJoYXBzIHNvbWVob3cgY2FuIHRpZSB0aGlzCisgKiBpbnRvIHRoZSBQQ0llIGhvdHBsdWcgc3VwcG9ydCBhdCBzb21lIHBvaW50CisgKiBOb3RlLCBiZWNhdXNlIEknbSBkb2luZyBpdCBhbGwgaGVyZSwgSSBkb24ndCBjYWxsIHBjaV9kaXNhYmxlX21zaSgpCisgKiBvciBmcmVlX2lycSgpIGF0IHRoZSBzdGFydCBvZiBpcGF0aF9zZXR1cF9wZV9yZXNldCgpLgorICovCitzdGF0aWMgaW50IGlwYXRoX3JlaW5pdF9tc2koc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCBwb3M7CisJdTE2IGNvbnRyb2w7CisJaW50IHJldDsKKworCWlmICghZGQtPmlwYXRoX21zaV9sbykgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQ2FuJ3QgcmVzdG9yZSBNU0kgY29uZmlnLCAiCisJCQkgImluaXRpYWwgc2V0dXAgZmFpbGVkP1xuIik7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoIShwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRkLT5wY2lkZXYsIFBDSV9DQVBfSURfTVNJKSkpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNhbid0IGZpbmQgTVNJIGNhcGFiaWxpdHksICIKKwkJCSAgICAgICJjYW4ndCByZXN0b3JlIE1TSSBzZXR0aW5nc1xuIik7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiV3JpdGluZyBtc2lfbG8gMHgleCB0byBjb25maWcgb2Zmc2V0IDB4JXhcbiIsCisJCSAgIGRkLT5pcGF0aF9tc2lfbG8sIHBvcyArIFBDSV9NU0lfQUREUkVTU19MTyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfTE8sCisJCQkgICAgICAgZGQtPmlwYXRoX21zaV9sbyk7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiV3JpdGluZyBtc2lfbG8gMHgleCB0byBjb25maWcgb2Zmc2V0IDB4JXhcbiIsCisJCSAgIGRkLT5pcGF0aF9tc2lfaGksIHBvcyArIFBDSV9NU0lfQUREUkVTU19ISSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfSEksCisJCQkgICAgICAgZGQtPmlwYXRoX21zaV9oaSk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGQtPnBjaWRldiwgcG9zICsgUENJX01TSV9GTEFHUywgJmNvbnRyb2wpOworCWlmICghKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX0VOQUJMRSkpIHsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiTVNJIGNvbnRyb2wgYXQgb2ZmICV4IHdhcyAleCwgIgorCQkJICAgInNldHRpbmcgTVNJIGVuYWJsZSAoJXgpXG4iLCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLAorCQkJICAgY29udHJvbCwgY29udHJvbCB8IFBDSV9NU0lfRkxBR1NfRU5BQkxFKTsKKwkJY29udHJvbCB8PSBQQ0lfTVNJX0ZMQUdTX0VOQUJMRTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRkLT5wY2lkZXYsIHBvcyArIFBDSV9NU0lfRkxBR1MsCisJCQkJICAgICAgY29udHJvbCk7CisJfQorCS8qIG5vdyByZXdyaXRlIHRoZSBkYXRhICh2ZWN0b3IpIGluZm8gKi8KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGQtPnBjaWRldiwgcG9zICsKKwkJCSAgICAgICgoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfNjRCSVQpID8gMTIgOiA4KSwKKwkJCSAgICAgIGRkLT5pcGF0aF9tc2lfZGF0YSk7CisJLyogd2UgcmVzdG9yZSB0aGUgY2FjaGVsaW5lc2l6ZSBhbHNvLCBhbHRob3VnaCBpdCBkb2Vzbid0IHJlYWxseQorCSAqIG1hdHRlciAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZC0+cGNpZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLAorCQkJICAgICAgZGQtPmlwYXRoX3BjaV9jYWNoZWxpbmUpOworCS8qIGFuZCBub3cgc2V0IHRoZSBwY2kgbWFzdGVyIGJpdCBhZ2FpbiAqLworCXBjaV9zZXRfbWFzdGVyKGRkLT5wY2lkZXYpOworCXJldCA9IDE7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyogVGhpcyByb3V0aW5lIHNsZWVwcywgc28gaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LCBub3QKKyAqIGZyb20gaW50ZXJydXB0IGNvbnRleHQuICBJZiB3ZSBuZWVkIGludGVycnVwdCBjb250ZXh0LCB3ZSBjYW4gc3BsaXQKKyAqIGl0IGludG8gdHdvIHJvdXRpbmVzLgorKi8KK3N0YXRpYyBpbnQgaXBhdGhfc2V0dXBfcGVfcmVzZXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU2NCB2YWw7CisJaW50IGk7CisJaW50IHJldDsKKworCS8qIFVzZSBFUlJPUiBzbyBpdCBzaG93cyB1cCBpbiBsb2dzLCBldGMuICovCisJaXBhdGhfZGV2X2VycihkZCwgIlJlc2V0dGluZyBQRS04MDAgdW5pdCAldVxuIiwKKwkJICAgICAgZGQtPmlwYXRoX3VuaXQpOworCS8qIGtlZXAgY2hpcCBmcm9tIGJlaW5nIGFjY2Vzc2VkIGluIGEgZmV3IHBsYWNlcyAqLworCWRkLT5pcGF0aF9mbGFncyAmPSB+KElQQVRIX0lOSVRURUR8SVBBVEhfUFJFU0VOVCk7CisJdmFsID0gZGQtPmlwYXRoX2NvbnRyb2wgfCBJTkZJTklQQVRIX0NfUkVTRVQ7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sLCB2YWwpOworCW1iKCk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IDU7IGkrKykgeworCQlpbnQgcjsKKwkJLyogYWxsb3cgTUJJU1QsIGV0Yy4gdG8gY29tcGxldGU7IGxvbmdlciBvbiBlYWNoIHJldHJ5LgorCQkgKiBXZSBzb21ldGltZXMgZ2V0IG1hY2hpbmUgY2hlY2tzIGZyb20gYnVzIHRpbWVvdXQgaWYgbm8KKwkJICogcmVzcG9uc2UsIHNvIGZvciBub3csIG1ha2UgaXQgKnJlYWxseSogbG9uZy4KKwkJICovCisJCW1zbGVlcCgxMDAwICsgKDEgKyBpKSAqIDIwMDApOworCQlpZiAoKHIgPQorCQkgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoZGQtPnBjaWRldiwgUENJX0JBU0VfQUREUkVTU18wLAorCQkJCQkgICAgZGQtPmlwYXRoX3BjaWJhcjApKSkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJyZXdyaXRlIG9mIEJBUjAgZmFpbGVkOiAlZFxuIiwKKwkJCQkgICAgICByKTsKKwkJaWYgKChyID0KKwkJICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRkLT5wY2lkZXYsIFBDSV9CQVNFX0FERFJFU1NfMSwKKwkJCQkJICAgIGRkLT5pcGF0aF9wY2liYXIxKSkpCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAicmV3cml0ZSBvZiBCQVIxIGZhaWxlZDogJWRcbiIsCisJCQkJICAgICAgcik7CisJCS8qIG5vdyByZS1lbmFibGUgbWVtb3J5IGFjY2VzcyAqLworCQlpZiAoKHIgPSBwY2lfZW5hYmxlX2RldmljZShkZC0+cGNpZGV2KSkpCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGFmdGVyICIKKwkJCQkgICAgICAicmVzZXQ6ICVkXG4iLCByKTsKKwkJLyogd2hldGhlciBpdCB3b3JrZWQgb3Igbm90LCBtYXJrIGFzIHByZXNlbnQsIGFnYWluICovCisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9QUkVTRU5UOworCQl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yZXZpc2lvbik7CisJCWlmICh2YWwgPT0gZGQtPmlwYXRoX3JldmlzaW9uKSB7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJHb3QgbWF0Y2hpbmcgcmV2aXNpb24gIgorCQkJCSAgICJyZWdpc3RlciAlbGx4IG9uIHRyeSAlZFxuIiwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwsIGkpOworCQkJcmV0ID0gaXBhdGhfcmVpbml0X21zaShkZCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJLyogUHJvYmFibHkgZ2V0dGluZyAtMSBiYWNrICovCisJCWlwYXRoX2RiZygiRGlkbid0IGdldCBleHBlY3RlZCByZXZpc2lvbiByZWdpc3RlciwgIgorCQkJICAiZ290ICVsbHgsIHRyeSAlZFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLAorCQkJICBpICsgMSk7CisJfQorCXJldCA9IDA7IC8qIGZhaWxlZCAqLworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcGVfcHV0X3RpZCAtIHdyaXRlIGEgVElEIGluIGNoaXAKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAdGlkcHRyOiBwb2ludGVyIHRvIHRoZSBleHBlY3RlZCBUSUQgKGluIGNoaXApIHRvIHVkcGF0ZQorICogQHRpZHR5cGU6IDAgZm9yIGVhZ2VyLCAxIGZvciBleHBlY3RlZAorICogQHBhOiBwaHlzaWNhbCBhZGRyZXNzIG9mIGluIG1lbW9yeSBidWZmZXI7IGlwYXRoX3RpZGludmFsaWQgaWYgZnJlZWluZworICoKKyAqIFRoaXMgZXhpc3RzIGFzIGEgc2VwYXJhdGUgcm91dGluZSB0byBhbGxvdyBmb3Igc3BlY2lhbCBsb2NraW5nIGV0Yy4KKyAqIEl0J3MgdXNlZCBmb3IgYm90aCB0aGUgZnVsbCBjbGVhbnVwIG9uIGV4aXQsIGFzIHdlbGwgYXMgdGhlIG5vcm1hbAorICogc2V0dXAgYW5kIHRlYXJkb3duLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9wZV9wdXRfdGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTY0IF9faW9tZW0gKnRpZHB0ciwKKwkJCSAgICAgdTMyIHR5cGUsIHVuc2lnbmVkIGxvbmcgcGEpCit7CisJdTMyIF9faW9tZW0gKnRpZHAzMiA9ICh1MzIgX19pb21lbSAqKXRpZHB0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsgLyoga2VlcCBnY2MgcXVpZXQgKi8KKworCWlmIChwYSAhPSBkZC0+aXBhdGhfdGlkaW52YWxpZCkgeworCQlpZiAocGEgJiAoKDFVIDw8IDExKSAtIDEpKSB7CisJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQlVHOiBwaHlzYWRkciAlbHggIgorCQkJCSAibm90IDRLQiBhbGlnbmVkIVxuIiwgcGEpOworCQkJcmV0dXJuOworCQl9CisJCXBhID4+PSAxMTsKKwkJLyogcGFyYW5vaWEgY2hlY2sgKi8KKwkJaWYgKHBhICYgKDc8PDI5KSkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsCisJCQkJICAgICAgIkJVRzogUGh5c2ljYWwgcGFnZSBhZGRyZXNzIDB4JWx4ICIKKwkJCQkgICAgICAiaGFzIGJpdHMgc2V0IGluIDMxLTI5XG4iLCBwYSk7CisKKwkJaWYgKHR5cGUgPT0gMCkKKwkJCXBhIHw9IGRkLT5pcGF0aF90aWR0ZW1wbGF0ZTsKKwkJZWxzZSAvKiBmb3Igbm93LCBhbHdheXMgZnVsbCA0S0IgcGFnZSAqLworCQkJcGEgfD0gMiA8PCAyOTsKKwl9CisKKwkvKiB3b3JrYXJvdW5kIGNoaXAgYnVnIDk0MzcgYnkgd3JpdGluZyBlYWNoIFRJRCB0d2ljZQorCSAqIGFuZCBob2xkaW5nIGEgc3BpbmxvY2sgYXJvdW5kIHRoZSB3cml0ZXMsIHNvIHRoZXkgZG9uJ3QKKwkgKiBpbnRlcm1peCB3aXRoIG90aGVyIFRJRCAoZWFnZXIgb3IgZXhwZWN0ZWQpIHdyaXRlcworCSAqIFVuZm9ydHVuYXRlbHksIHRoaXMgY2FsbCBjYW4gYmUgZG9uZSBmcm9tIGludGVycnVwdCBsZXZlbAorCSAqIGZvciB0aGUgcG9ydCAwIGVhZ2VyIFRJRHMsIHNvIHdlIGhhdmUgdG8gdXNlIGlycXNhdmUKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3RpZF9sb2NrLCBmbGFncyk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoLCAweGZlZWRkZWFmKTsKKwlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKQorCQl3cml0ZWwocGEsIHRpZHAzMik7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoLCAweGRlYWRiZWVmKTsKKwltbWlvd2IoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfdGlkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBpcGF0aF9wZV9jbGVhcl90aWQgLSBjbGVhciBhbGwgVElEIGVudHJpZXMgZm9yIGEgcG9ydCwgZXhwZWN0ZWQgYW5kIGVhZ2VyCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBvcnQ6IHRoZSBwb3J0CisgKgorICogY2xlYXIgYWxsIFRJRCBlbnRyaWVzIGZvciBhIHBvcnQsIGV4cGVjdGVkIGFuZCBlYWdlci4KKyAqIFVzZWQgZnJvbSBpcGF0aF9jbG9zZSgpLiAgT24gUEU4MDAsIFRJRHMgYXJlIG9ubHkgMzIgYml0cywKKyAqIG5vdCA2NCwgYnV0IHRoZXkgYXJlIHN0aWxsIG9uIDY0IGJpdCBib3VuZGFyaWVzLCBzbyB0aWRiYXNlCisgKiBpcyBkZWNsYXJlZCBhcyB1NjQgKiBmb3IgdGhlIHBvaW50ZXIgbWF0aCwgZXZlbiB0aG91Z2ggd2Ugd3JpdGUgMzIgYml0cworICovCitzdGF0aWMgdm9pZCBpcGF0aF9wZV9jbGVhcl90aWRzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgcG9ydCkKK3sKKwl1NjQgX19pb21lbSAqdGlkYmFzZTsKKwl1bnNpZ25lZCBsb25nIHRpZGludjsKKwlpbnQgaTsKKworCWlmICghZGQtPmlwYXRoX2tyZWdiYXNlKQorCQlyZXR1cm47CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJJbnZhbGlkYXRlIFRJRHMgZm9yIHBvcnQgJXVcbiIsIHBvcnQpOworCisJdGlkaW52ID0gZGQtPmlwYXRoX3RpZGludmFsaWQ7CisJdGlkYmFzZSA9ICh1NjQgX19pb21lbSAqKQorCQkoKGNoYXIgX19pb21lbSAqKShkZC0+aXBhdGhfa3JlZ2Jhc2UpICsKKwkJIGRkLT5pcGF0aF9yY3Z0aWRiYXNlICsKKwkJIHBvcnQgKiBkZC0+aXBhdGhfcmN2dGlkY250ICogc2l6ZW9mKCp0aWRiYXNlKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGQtPmlwYXRoX3JjdnRpZGNudDsgaSsrKQorCQlpcGF0aF9wZV9wdXRfdGlkKGRkLCAmdGlkYmFzZVtpXSwgMCwgdGlkaW52KTsKKworCXRpZGJhc2UgPSAodTY0IF9faW9tZW0gKikKKwkJKChjaGFyIF9faW9tZW0gKikoZGQtPmlwYXRoX2tyZWdiYXNlKSArCisJCSBkZC0+aXBhdGhfcmN2ZWdyYmFzZSArCisJCSBwb3J0ICogZGQtPmlwYXRoX3JjdmVncmNudCAqIHNpemVvZigqdGlkYmFzZSkpOworCisJZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9yY3ZlZ3JjbnQ7IGkrKykKKwkJaXBhdGhfcGVfcHV0X3RpZChkZCwgJnRpZGJhc2VbaV0sIDEsIHRpZGludik7Cit9CisKKy8qKgorICogaXBhdGhfcGVfdGlkdGVtcGxhdGUgLSBzZXR1cCBjb25zdGFudHMgZm9yIFRJRCB1cGRhdGVzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFdlIHNldHVwIHN0dWZmIHRoYXQgd2UgdXNlIGEgbG90LCB0byBhdm9pZCBjYWxjdWxhdGluZyBlYWNoIHRpbWUKKyAqLworc3RhdGljIHZvaWQgaXBhdGhfcGVfdGlkdGVtcGxhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXUzMiBlZ3JzaXplID0gZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemU7CisKKwkvKiBGb3Igbm93LCB3ZSBhbHdheXMgYWxsb2NhdGUgNEtCIGJ1ZmZlcnMgKGF0IGluaXQpIHNvIHdlIGNhbgorCSAqIHJlY2VpdmUgbWF4IHNpemUgcGFja2V0cy4gIFdlIG1heSB3YW50IGEgbW9kdWxlIHBhcmFtZXRlciB0bworCSAqIHNwZWNpZnkgMktCIG9yIDRLQiBhbmQvb3IgbWFrZSBiZSBwZXIgcG9ydCBpbnN0ZWFkIG9mIHBlciBkZXZpY2UKKwkgKiBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gcmVkdWNlIG1lbW9yeSBmb290cHJpbnQuICBOb3RlIHRoYXQgdGhlCisJICogaXBhdGhfcmN2aGRyZW50c2l6ZSBzaXplIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGxhcmdlc3QKKwkgKiBJQiBoZWFkZXIgKGN1cnJlbnRseSA5NiBieXRlcykgdGhhdCB3ZSBleHBlY3QgdG8gaGFuZGxlIChwbHVzIG9mCisJICogY291cnNlIHRoZSAyIGR3b3JkcyBvZiBSSEYpLgorCSAqLworCWlmIChlZ3JzaXplID09IDIwNDgpCisJCWRkLT5pcGF0aF90aWR0ZW1wbGF0ZSA9IDFVIDw8IDI5OworCWVsc2UgaWYgKGVncnNpemUgPT0gNDA5NikKKwkJZGQtPmlwYXRoX3RpZHRlbXBsYXRlID0gMlUgPDwgMjk7CisJZWxzZSB7CisJCWVncnNpemUgPSA0MDk2OworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQlVHOiB1bnN1cHBvcnRlZCBlZ3JidWZzaXplICIKKwkJCSAiJXUsIHVzaW5nICV1XG4iLCBkZC0+aXBhdGhfcmN2ZWdyYnVmc2l6ZSwKKwkJCSBlZ3JzaXplKTsKKwkJZGQtPmlwYXRoX3RpZHRlbXBsYXRlID0gMlUgPDwgMjk7CisJfQorCWRkLT5pcGF0aF90aWRpbnZhbGlkID0gMDsKK30KKworc3RhdGljIGludCBpcGF0aF9wZV9lYXJseV9pbml0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfNEJZVEVfVElEOworCisJLyoKKwkgKiBGb3Igb3BlbmliLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gaGFuZGxlIGFuIElCIGhlYWRlciBvZiA5NiBieXRlcworCSAqIG9yIDI0IGR3b3Jkcy4gIEhULTQwMCBoYXMgYXJiaXRyYXJ5IHNpemVkIHJlY2VpdmUgYnVmZmVycywgc28gd2UKKwkgKiBtYWRlIHRoZW0gdGhlIHNhbWUgc2l6ZSBhcyB0aGUgUElPIGJ1ZmZlcnMuICBUaGUgUEUtODAwIGRvZXMgbm90CisJICogaGFuZGxlIGFyYml0cmFyeSBzaXplIGJ1ZmZlcnMsIHNvIHdlIG5lZWQgdGhlIGhlYWRlciBsYXJnZSBlbm91Z2gKKwkgKiB0byBoYW5kbGUgbGFyZ2VzdCBJQiBoZWFkZXIsIGJ1dCBzdGlsbCBoYXZlIHJvb20gZm9yIGEgMktCIE1UVQorCSAqIHN0YW5kYXJkIElCIHBhY2tldC4KKwkgKi8KKwlkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZSA9IDI0OworCWRkLT5pcGF0aF9yY3ZoZHJzaXplID0gSVBBVEhfREZMVF9SQ1ZIRFJTSVpFOworCisJLyogRm9yIEhULTQwMCwgd2UgYWxsb2NhdGUgYSBzb21ld2hhdCBvdmVybHkgbGFyZ2UgZWFnZXIgYnVmZmVyLAorCSAqIHN1Y2ggdGhhdCB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgd2UgY2FuIHJlY2VpdmUgdGhlIGxhcmdlc3QgcGFja2V0CisJICogdGhhdCB3ZSBjYW4gc2VuZCBvdXQuICBUbyB0cnVseSBzdXBwb3J0IGEgNEtCIE1UVSwgd2UgbmVlZCB0bworCSAqIGJ1bXAgdGhpcyB0byBhIGxhcmdlciB2YWx1ZS4gIFdlJ2xsIGRvIHRoaXMgd2hlbiBJIGdldCBhcm91bmQgdG8KKwkgKiB0ZXN0aW5nIDRLQiBzZW5kcyBvbiB0aGUgUEUtODAwLCB3aGljaCBJIGhhdmUgbm90IHlldCBkb25lLgorCSAqLworCWRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplID0gMjA0ODsKKwkvKgorCSAqIHRoZSBtaW4oKSBjaGVjayBoZXJlIGlzIGN1cnJlbnRseSBhIG5vcCwgYnV0IGl0IG1heSBub3QgYWx3YXlzCisJICogYmUsIGRlcGVuZGluZyBvbiBqdXN0IGhvdyB3ZSBkbyBpcGF0aF9yY3ZlZ3JidWZzaXplCisJICovCisJZGQtPmlwYXRoX2libWF4bGVuID0gbWluKGRkLT5pcGF0aF9waW9zaXplMmssCisJCQkJIGRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplICsKKwkJCQkgKGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplIDw8IDIpKTsKKwlkZC0+aXBhdGhfaW5pdF9pYm1heGxlbiA9IGRkLT5pcGF0aF9pYm1heGxlbjsKKworCS8qCisJICogRm9yIFBFLTgwMCwgd2UgY2FuIHJlcXVlc3QgYSByZWNlaXZlIGludGVycnVwdCBmb3IgMSBvcgorCSAqIG1vcmUgcGFja2V0cyBmcm9tIGN1cnJlbnQgb2Zmc2V0LiAgRm9yIG5vdywgd2Ugc2V0IHRoaXMKKwkgKiB1cCBmb3IgYSBzaW5nbGUgcGFja2V0LCB0byBtYXRjaCB0aGUgSFQtNDAwIGJlaGF2aW9yLgorCSAqLworCWRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZiA9IDFVTEw8PDMyOworCisJaXBhdGhfZ2V0X2VlcHJvbV9pbmZvKGRkKTsKKworCXJldHVybiAwOworfQorCitpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIGlwYXRoX3Vub3JkZXJlZF93Yyh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2luaXRfcGVfZ2V0X2Jhc2VfaW5mbyAtIHNldCBjaGlwLXNwZWNpZmljIGZsYWdzIGZvciB1c2VyIGNvZGUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAa2Jhc2U6IGlwYXRoX2Jhc2VfaW5mbyBwb2ludGVyCisgKgorICogV2Ugc2V0IHRoZSBQQ0lFIGZsYWcgYmVjYXVzZSB0aGUgbG93ZXIgYmFuZHdpZHRoIG9uIFBDSWUgdnMKKyAqIEh5cGVyVHJhbnNwb3J0IGNhbiBhZmZlY3Qgc29tZSB1c2VyIHBhY2tldCBhbGdvcml0aGltcy4KKyAqLworc3RhdGljIGludCBpcGF0aF9wZV9nZXRfYmFzZV9pbmZvKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIHZvaWQgKmtiYXNlKQoreworCXN0cnVjdCBpcGF0aF9iYXNlX2luZm8gKmtpbmZvID0ga2Jhc2U7CisKKwlpZiAoaXBhdGhfdW5vcmRlcmVkX3djKCkpIHsKKwkJa2luZm8tPnNwaV9ydW50aW1lX2ZsYWdzIHw9IElQQVRIX1JVTlRJTUVfRk9SQ0VfV0NfT1JERVI7CisJCWlwYXRoX2NkYmcoUFJPQywgIkludGVsIHByb2Nlc3NvciwgZm9yY2luZyBXQyBvcmRlclxuIik7CisJfQorCWVsc2UKKwkJaXBhdGhfY2RiZyhQUk9DLCAiTm90IEludGVsIHByb2Nlc3NvciwgV0Mgb3JkZXJlZFxuIik7CisKKwlraW5mby0+c3BpX3J1bnRpbWVfZmxhZ3MgfD0gSVBBVEhfUlVOVElNRV9QQ0lFOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXBhdGhfaW5pdF9wZTgwMF9mdW5jcyAtIHNldCB1cCB0aGUgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBUaGlzIGlzIGdsb2JhbCwgYW5kIGlzIGNhbGxlZCBkaXJlY3RseSBhdCBpbml0IHRvIHNldCB1cCB0aGUKKyAqIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGxhdGVyIHVzZS4KKyAqLwordm9pZCBpcGF0aF9pbml0X3BlODAwX2Z1bmNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlkZC0+aXBhdGhfZl9pbnRyc2V0dXAgPSBpcGF0aF9wZV9pbnRjb25maWc7CisJZGQtPmlwYXRoX2ZfYnVzID0gaXBhdGhfc2V0dXBfcGVfY29uZmlnOworCWRkLT5pcGF0aF9mX3Jlc2V0ID0gaXBhdGhfc2V0dXBfcGVfcmVzZXQ7CisJZGQtPmlwYXRoX2ZfZ2V0X2JvYXJkbmFtZSA9IGlwYXRoX3BlX2JvYXJkbmFtZTsKKwlkZC0+aXBhdGhfZl9pbml0X2h3ZXJyb3JzID0gaXBhdGhfcGVfaW5pdF9od2Vycm9yczsKKwlkZC0+aXBhdGhfZl9lYXJseV9pbml0ID0gaXBhdGhfcGVfZWFybHlfaW5pdDsKKwlkZC0+aXBhdGhfZl9oYW5kbGVfaHdlcnJvcnMgPSBpcGF0aF9wZV9oYW5kbGVfaHdlcnJvcnM7CisJZGQtPmlwYXRoX2ZfcXVpZXRfc2VyZGVzID0gaXBhdGhfcGVfcXVpZXRfc2VyZGVzOworCWRkLT5pcGF0aF9mX2JyaW5ndXBfc2VyZGVzID0gaXBhdGhfcGVfYnJpbmd1cF9zZXJkZXM7CisJZGQtPmlwYXRoX2ZfY2xlYXJfdGlkcyA9IGlwYXRoX3BlX2NsZWFyX3RpZHM7CisJZGQtPmlwYXRoX2ZfcHV0X3RpZCA9IGlwYXRoX3BlX3B1dF90aWQ7CisJZGQtPmlwYXRoX2ZfY2xlYW51cCA9IGlwYXRoX3NldHVwX3BlX2NsZWFudXA7CisJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkID0gaXBhdGhfc2V0dXBfcGVfc2V0ZXh0bGVkOworCWRkLT5pcGF0aF9mX2dldF9iYXNlX2luZm8gPSBpcGF0aF9wZV9nZXRfYmFzZV9pbmZvOworCisJLyogaW5pdGlhbGl6ZSBjaGlwLXNwZWNpZmljIHZhcmlhYmxlcyAqLworCWRkLT5pcGF0aF9mX3RpZHRlbXBsYXRlID0gaXBhdGhfcGVfdGlkdGVtcGxhdGU7CisKKwkvKgorCSAqIHNldHVwIHRoZSByZWdpc3RlciBvZmZzZXRzLCBzaW5jZSB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGVhY2gKKwkgKiBjaGlwCisJICovCisJZGQtPmlwYXRoX2tyZWdzID0gJmlwYXRoX3BlX2tyZWdzOworCWRkLT5pcGF0aF9jcmVncyA9ICZpcGF0aF9wZV9jcmVnczsKKworCWlwYXRoX2luaXRfcGVfdmFyaWFibGVzKCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4ODU1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwpAQCAtMCwwICsxLDkxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKworI2RlZmluZSBCSVRTX1BFUl9QQUdFCQkoUEFHRV9TSVpFKkJJVFNfUEVSX0JZVEUpCisjZGVmaW5lIEJJVFNfUEVSX1BBR0VfTUFTSwkoQklUU19QRVJfUEFHRS0xKQorI2RlZmluZSBta19xcG4ocXB0LCBtYXAsIG9mZikJKCgobWFwKSAtIChxcHQpLT5tYXApICogQklUU19QRVJfUEFHRSArIFwKKwkJCQkgKG9mZikpCisjZGVmaW5lIGZpbmRfbmV4dF9vZmZzZXQobWFwLCBvZmYpIGZpbmRfbmV4dF96ZXJvX2JpdCgobWFwKS0+cGFnZSwgXAorCQkJCQkJICAgICAgQklUU19QRVJfUEFHRSwgb2ZmKQorCisjZGVmaW5lIFRSQU5TX0lOVkFMSUQJMAorI2RlZmluZSBUUkFOU19BTlkyUlNUCTEKKyNkZWZpbmUgVFJBTlNfUlNUMklOSVQJMgorI2RlZmluZSBUUkFOU19JTklUMklOSVQJMworI2RlZmluZSBUUkFOU19JTklUMlJUUgk0CisjZGVmaW5lIFRSQU5TX1JUUjJSVFMJNQorI2RlZmluZSBUUkFOU19SVFMyUlRTCTYKKyNkZWZpbmUgVFJBTlNfU1FFUlIyUlRTCTcKKyNkZWZpbmUgVFJBTlNfQU5ZMkVSUgk4CisjZGVmaW5lIFRSQU5TX1JUUzJTUUQJOSAgLyogWFhYIFdhaXQgZm9yIGV4cGVjdGVkIEFDS3MgJiBzaWduYWwgZXZlbnQgKi8KKyNkZWZpbmUgVFJBTlNfU1FEMlNRRAkxMCAvKiBlcnJvciBpZiBub3QgZHJhaW5lZCAmIHBhcmFtZXRlciBjaGFuZ2UgKi8KKyNkZWZpbmUgVFJBTlNfU1FEMlJUUwkxMSAvKiBlcnJvciBpZiBub3QgZHJhaW5lZCAqLworCisvKgorICogQ29udmVydCB0aGUgQUVUSCBjcmVkaXQgY29kZSBpbnRvIHRoZSBudW1iZXIgb2YgY3JlZGl0cy4KKyAqLworc3RhdGljIHUzMiBjcmVkaXRfdGFibGVbMzFdID0geworCTAsCQkJLyogMCAqLworCTEsCQkJLyogMSAqLworCTIsCQkJLyogMiAqLworCTMsCQkJLyogMyAqLworCTQsCQkJLyogNCAqLworCTYsCQkJLyogNSAqLworCTgsCQkJLyogNiAqLworCTEyLAkJCS8qIDcgKi8KKwkxNiwJCQkvKiA4ICovCisJMjQsCQkJLyogOSAqLworCTMyLAkJCS8qIEEgKi8KKwk0OCwJCQkvKiBCICovCisJNjQsCQkJLyogQyAqLworCTk2LAkJCS8qIEQgKi8KKwkxMjgsCQkJLyogRSAqLworCTE5MiwJCQkvKiBGICovCisJMjU2LAkJCS8qIDEwICovCisJMzg0LAkJCS8qIDExICovCisJNTEyLAkJCS8qIDEyICovCisJNzY4LAkJCS8qIDEzICovCisJMTAyNCwJCQkvKiAxNCAqLworCTE1MzYsCQkJLyogMTUgKi8KKwkyMDQ4LAkJCS8qIDE2ICovCisJMzA3MiwJCQkvKiAxNyAqLworCTQwOTYsCQkJLyogMTggKi8KKwk2MTQ0LAkJCS8qIDE5ICovCisJODE5MiwJCQkvKiAxQSAqLworCTEyMjg4LAkJCS8qIDFCICovCisJMTYzODQsCQkJLyogMUMgKi8KKwkyNDU3NiwJCQkvKiAxRCAqLworCTMyNzY4CQkJLyogMUUgKi8KK307CisKK3N0YXRpYyB1MzIgYWxsb2NfcXBuKHN0cnVjdCBpcGF0aF9xcF90YWJsZSAqcXB0KQoreworCXUzMiBpLCBvZmZzZXQsIG1heF9zY2FuLCBxcG47CisJc3RydWN0IHFwbl9tYXAgKm1hcDsKKwl1MzIgcmV0OworCisJcXBuID0gcXB0LT5sYXN0ICsgMTsKKwlpZiAocXBuID49IFFQTl9NQVgpCisJCXFwbiA9IDI7CisJb2Zmc2V0ID0gcXBuICYgQklUU19QRVJfUEFHRV9NQVNLOworCW1hcCA9ICZxcHQtPm1hcFtxcG4gLyBCSVRTX1BFUl9QQUdFXTsKKwltYXhfc2NhbiA9IHFwdC0+bm1hcHMgLSAhb2Zmc2V0OworCWZvciAoaSA9IDA7OykgeworCQlpZiAodW5saWtlbHkoIW1hcC0+cGFnZSkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCS8qCisJCQkgKiBGcmVlIHRoZSBwYWdlIGlmIHNvbWVvbmUgcmFjZWQgd2l0aCB1cworCQkJICogaW5zdGFsbGluZyBpdDoKKwkJCSAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwdC0+bG9jaywgZmxhZ3MpOworCQkJaWYgKG1hcC0+cGFnZSkKKwkJCQlmcmVlX3BhZ2UocGFnZSk7CisJCQllbHNlCisJCQkJbWFwLT5wYWdlID0gKHZvaWQgKilwYWdlOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXB0LT5sb2NrLCBmbGFncyk7CisJCQlpZiAodW5saWtlbHkoIW1hcC0+cGFnZSkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmbWFwLT5uX2ZyZWUpKSkgeworCQkJZG8geworCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChvZmZzZXQsIG1hcC0+cGFnZSkpIHsKKwkJCQkJYXRvbWljX2RlYygmbWFwLT5uX2ZyZWUpOworCQkJCQlxcHQtPmxhc3QgPSBxcG47CisJCQkJCXJldCA9IHFwbjsKKwkJCQkJZ290byBiYWlsOworCQkJCX0KKwkJCQlvZmZzZXQgPSBmaW5kX25leHRfb2Zmc2V0KG1hcCwgb2Zmc2V0KTsKKwkJCQlxcG4gPSBta19xcG4ocXB0LCBtYXAsIG9mZnNldCk7CisJCQkJLyoKKwkJCQkgKiBUaGlzIHRlc3QgZGlmZmVycyBmcm9tIGFsbG9jX3BpZG1hcCgpLgorCQkJCSAqIElmIGZpbmRfbmV4dF9vZmZzZXQoKSBkb2VzIGZpbmQgYSB6ZXJvCisJCQkJICogYml0LCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBRUE4KKwkJCQkgKiB3cmFwcGluZyBhcm91bmQgcGFzdCBvdXIgc3RhcnRpbmcgUVBOLgorCQkJCSAqIFdlIGp1c3QgbmVlZCB0byBiZSBzdXJlIHdlIGRvbid0IGxvb3AKKwkJCQkgKiBmb3JldmVyLgorCQkJCSAqLworCQkJfSB3aGlsZSAob2Zmc2V0IDwgQklUU19QRVJfUEFHRSAmJiBxcG4gPCBRUE5fTUFYKTsKKwkJfQorCQkvKgorCQkgKiBJbiBvcmRlciB0byBrZWVwIHRoZSBudW1iZXIgb2YgcGFnZXMgYWxsb2NhdGVkIHRvIGEKKwkJICogbWluaW11bSwgd2Ugc2NhbiB0aGUgYWxsIGV4aXN0aW5nIHBhZ2VzIGJlZm9yZSBpbmNyZWFzaW5nCisJCSAqIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgdGFibGUuCisJCSAqLworCQlpZiAoKytpID4gbWF4X3NjYW4pIHsKKwkJCWlmIChxcHQtPm5tYXBzID09IFFQTk1BUF9FTlRSSUVTKQorCQkJCWJyZWFrOworCQkJbWFwID0gJnFwdC0+bWFwW3FwdC0+bm1hcHMrK107CisJCQlvZmZzZXQgPSAwOworCQl9IGVsc2UgaWYgKG1hcCA8ICZxcHQtPm1hcFtxcHQtPm5tYXBzXSkgeworCQkJKyttYXA7CisJCQlvZmZzZXQgPSAwOworCQl9IGVsc2UgeworCQkJbWFwID0gJnFwdC0+bWFwWzBdOworCQkJb2Zmc2V0ID0gMjsKKwkJfQorCQlxcG4gPSBta19xcG4ocXB0LCBtYXAsIG9mZnNldCk7CisJfQorCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3FwbihzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgKnFwdCwgdTMyIHFwbikKK3sKKwlzdHJ1Y3QgcXBuX21hcCAqbWFwOworCisJbWFwID0gcXB0LT5tYXAgKyBxcG4gLyBCSVRTX1BFUl9QQUdFOworCWlmIChtYXAtPnBhZ2UpCisJCWNsZWFyX2JpdChxcG4gJiBCSVRTX1BFUl9QQUdFX01BU0ssIG1hcC0+cGFnZSk7CisJYXRvbWljX2luYygmbWFwLT5uX2ZyZWUpOworfQorCisvKioKKyAqIGlwYXRoX2FsbG9jX3FwbiAtIGFsbG9jYXRlIGEgUVAgbnVtYmVyCisgKiBAcXB0OiB0aGUgUVAgdGFibGUKKyAqIEBxcDogdGhlIFFQCisgKiBAdHlwZTogdGhlIFFQIHR5cGUgKElCX1FQVF9TTUkgYW5kIElCX1FQVF9HU0kgYXJlIHNwZWNpYWwpCisgKgorICogQWxsb2NhdGUgdGhlIG5leHQgYXZhaWxhYmxlIFFQTiBhbmQgcHV0IHRoZSBRUCBpbnRvIHRoZSBoYXNoIHRhYmxlLgorICogVGhlIGhhc2ggdGFibGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIFFQLgorICovCitzdGF0aWMgaW50IGlwYXRoX2FsbG9jX3FwbihzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgKnFwdCwgc3RydWN0IGlwYXRoX3FwICpxcCwKKwkJCSAgIGVudW0gaWJfcXBfdHlwZSB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHFwbjsKKwlpbnQgcmV0OworCisJaWYgKHR5cGUgPT0gSUJfUVBUX1NNSSkKKwkJcXBuID0gMDsKKwllbHNlIGlmICh0eXBlID09IElCX1FQVF9HU0kpCisJCXFwbiA9IDE7CisJZWxzZSB7CisJCS8qIEFsbG9jYXRlIHRoZSBuZXh0IGF2YWlsYWJsZSBRUE4gKi8KKwkJcXBuID0gYWxsb2NfcXBuKHFwdCk7CisJCWlmIChxcG4gPT0gMCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlxcC0+aWJxcC5xcF9udW0gPSBxcG47CisKKwkvKiBBZGQgdGhlIFFQIHRvIHRoZSBoYXNoIHRhYmxlLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZxcHQtPmxvY2ssIGZsYWdzKTsKKworCXFwbiAlPSBxcHQtPm1heDsKKwlxcC0+bmV4dCA9IHFwdC0+dGFibGVbcXBuXTsKKwlxcHQtPnRhYmxlW3Fwbl0gPSBxcDsKKwlhdG9taWNfaW5jKCZxcC0+cmVmY291bnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXB0LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2ZyZWVfcXAgLSByZW1vdmUgYSBRUCBmcm9tIHRoZSBRUCB0YWJsZQorICogQHFwdDogdGhlIFFQIHRhYmxlCisgKiBAcXA6IHRoZSBRUCB0byByZW1vdmUKKyAqCisgKiBSZW1vdmUgdGhlIFFQIGZyb20gdGhlIHRhYmxlIHNvIGl0IGNhbid0IGJlIGZvdW5kIGFzeW5jaHJvbm91c2x5IGJ5CisgKiB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfZnJlZV9xcChzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgKnFwdCwgc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnEsICoqcXBwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZuZCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXB0LT5sb2NrLCBmbGFncyk7CisKKwkvKiBSZW1vdmUgUVAgZnJvbSB0aGUgaGFzaCB0YWJsZS4gKi8KKwlxcHAgPSAmcXB0LT50YWJsZVtxcC0+aWJxcC5xcF9udW0gJSBxcHQtPm1heF07CisJZm9yICg7IChxID0gKnFwcCkgIT0gTlVMTDsgcXBwID0gJnEtPm5leHQpIHsKKwkJaWYgKHEgPT0gcXApIHsKKwkJCSpxcHAgPSBxcC0+bmV4dDsKKwkJCXFwLT5uZXh0ID0gTlVMTDsKKwkJCWF0b21pY19kZWMoJnFwLT5yZWZjb3VudCk7CisJCQlmbmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcHQtPmxvY2ssIGZsYWdzKTsKKworCWlmICghZm5kKQorCQlyZXR1cm47CisKKwkvKiBJZiBRUE4gaXMgbm90IHJlc2VydmVkLCBtYXJrIFFQTiBmcmVlIGluIHRoZSBiaXRtYXAuICovCisJaWYgKHFwLT5pYnFwLnFwX251bSA+IDEpCisJCWZyZWVfcXBuKHFwdCwgcXAtPmlicXAucXBfbnVtKTsKKworCXdhaXRfZXZlbnQocXAtPndhaXQsICFhdG9taWNfcmVhZCgmcXAtPnJlZmNvdW50KSk7Cit9CisKKy8qKgorICogaXBhdGhfZnJlZV9hbGxfcXBzIC0gcmVtb3ZlIGFsbCBRUHMgZnJvbSB0aGUgdGFibGUKKyAqIEBxcHQ6IHRoZSBRUCB0YWJsZSB0byBlbXB0eQorICovCit2b2lkIGlwYXRoX2ZyZWVfYWxsX3FwcyhzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgKnFwdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcGF0aF9xcCAqcXAsICpucXA7CisJdTMyIG47CisKKwlmb3IgKG4gPSAwOyBuIDwgcXB0LT5tYXg7IG4rKykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcXB0LT5sb2NrLCBmbGFncyk7CisJCXFwID0gcXB0LT50YWJsZVtuXTsKKwkJcXB0LT50YWJsZVtuXSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwdC0+bG9jaywgZmxhZ3MpOworCisJCXdoaWxlIChxcCkgeworCQkJbnFwID0gcXAtPm5leHQ7CisJCQlpZiAocXAtPmlicXAucXBfbnVtID4gMSkKKwkJCQlmcmVlX3FwbihxcHQsIHFwLT5pYnFwLnFwX251bSk7CisJCQlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnFwLT5yZWZjb3VudCkgfHwKKwkJCSAgICAhaXBhdGhfZGVzdHJveV9xcCgmcXAtPmlicXApKQorCQkJCV9WRVJCU19JTkZPKCJRUCBtZW1vcnkgbGVhayFcbiIpOworCQkJcXAgPSBucXA7CisJCX0KKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShxcHQtPm1hcCk7IG4rKykgeworCQlpZiAocXB0LT5tYXBbbl0ucGFnZSkKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylxcHQtPm1hcFtuXS5wYWdlKTsKKwl9Cit9CisKKy8qKgorICogaXBhdGhfbG9va3VwX3FwbiAtIHJldHVybiB0aGUgUVAgd2l0aCB0aGUgZ2l2ZW4gUVBOCisgKiBAcXB0OiB0aGUgUVAgdGFibGUKKyAqIEBxcG46IHRoZSBRUCBudW1iZXIgdG8gbG9vayB1cAorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlY3JlbWVudGluZyB0aGUgUVAgcmVmZXJlbmNlIGNvdW50CisgKiB3aGVuIGRvbmUuCisgKi8KK3N0cnVjdCBpcGF0aF9xcCAqaXBhdGhfbG9va3VwX3FwbihzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgKnFwdCwgdTMyIHFwbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcGF0aF9xcCAqcXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXB0LT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKHFwID0gcXB0LT50YWJsZVtxcG4gJSBxcHQtPm1heF07IHFwOyBxcCA9IHFwLT5uZXh0KSB7CisJCWlmIChxcC0+aWJxcC5xcF9udW0gPT0gcXBuKSB7CisJCQlhdG9taWNfaW5jKCZxcC0+cmVmY291bnQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcHQtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcXA7Cit9CisKKy8qKgorICogaXBhdGhfcmVzZXRfcXAgLSBpbml0aWFsaXplIHRoZSBRUCBzdGF0ZSB0byB0aGUgcmVzZXQgc3RhdGUKKyAqIEBxcDogdGhlIFFQIHRvIHJlc2V0CisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3Jlc2V0X3FwKHN0cnVjdCBpcGF0aF9xcCAqcXApCit7CisJcXAtPnJlbW90ZV9xcG4gPSAwOworCXFwLT5xa2V5ID0gMDsKKwlxcC0+cXBfYWNjZXNzX2ZsYWdzID0gMDsKKwlxcC0+c19oZHJ3b3JkcyA9IDA7CisJcXAtPnNfcHNuID0gMDsKKwlxcC0+cl9wc24gPSAwOworCWF0b21pY19zZXQoJnFwLT5tc24sIDApOworCWlmIChxcC0+aWJxcC5xcF90eXBlID09IElCX1FQVF9SQykgeworCQlxcC0+c19zdGF0ZSA9IElCX09QQ09ERV9SQ19TRU5EX0xBU1Q7CisJCXFwLT5yX3N0YXRlID0gSUJfT1BDT0RFX1JDX1NFTkRfTEFTVDsKKwl9IGVsc2UgeworCQlxcC0+c19zdGF0ZSA9IElCX09QQ09ERV9VQ19TRU5EX0xBU1Q7CisJCXFwLT5yX3N0YXRlID0gSUJfT1BDT0RFX1VDX1NFTkRfTEFTVDsKKwl9CisJcXAtPnNfYWNrX3N0YXRlID0gSUJfT1BDT0RFX1JDX0FDS05PV0xFREdFOworCXFwLT5zX25ha19zdGF0ZSA9IDA7CisJcXAtPnNfcm5yX3RpbWVvdXQgPSAwOworCXFwLT5zX2hlYWQgPSAwOworCXFwLT5zX3RhaWwgPSAwOworCXFwLT5zX2N1ciA9IDA7CisJcXAtPnNfbGFzdCA9IDA7CisJcXAtPnNfc3NuID0gMTsKKwlxcC0+c19sc24gPSAwOworCXFwLT5yX3JxLmhlYWQgPSAwOworCXFwLT5yX3JxLnRhaWwgPSAwOworCXFwLT5yX3JldXNlX3NnZSA9IDA7Cit9CisKKy8qKgorICogaXBhdGhfZXJyb3JfcXAgLSBwdXQgYSBRUCBpbnRvIGFuIGVycm9yIHN0YXRlCisgKiBAcXA6IHRoZSBRUCB0byBwdXQgaW50byBhbiBlcnJvciBzdGF0ZQorICoKKyAqIEZsdXNoZXMgYm90aCBzZW5kIGFuZCByZWNlaXZlIHdvcmsgcXVldWVzLgorICogUVAgcl9ycS5sb2NrIGFuZCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQuCisgKi8KKworc3RhdGljIHZvaWQgaXBhdGhfZXJyb3JfcXAoc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisKKwlfVkVSQlNfSU5GTygiUVAlZC8lZCBpbiBlcnJvciBzdGF0ZVxuIiwKKwkJICAgIHFwLT5pYnFwLnFwX251bSwgcXAtPnJlbW90ZV9xcG4pOworCisJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJLyogWFhYIFdoYXQgaWYgaXRzIGFscmVhZHkgcmVtb3ZlZCBieSB0aGUgdGltZW91dCBjb2RlPyAqLworCWlmICghbGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCWxpc3RfZGVsX2luaXQoJnFwLT50aW1lcndhaXQpOworCWlmICghbGlzdF9lbXB0eSgmcXAtPnBpb3dhaXQpKQorCQlsaXN0X2RlbF9pbml0KCZxcC0+cGlvd2FpdCk7CisJc3Bpbl91bmxvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKworCXdjLnN0YXR1cyA9IElCX1dDX1dSX0ZMVVNIX0VSUjsKKwl3Yy52ZW5kb3JfZXJyID0gMDsKKwl3Yy5ieXRlX2xlbiA9IDA7CisJd2MuaW1tX2RhdGEgPSAwOworCXdjLnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwl3Yy5zcmNfcXAgPSAwOworCXdjLndjX2ZsYWdzID0gMDsKKwl3Yy5wa2V5X2luZGV4ID0gMDsKKwl3Yy5zbGlkID0gMDsKKwl3Yy5zbCA9IDA7CisJd2MuZGxpZF9wYXRoX2JpdHMgPSAwOworCXdjLnBvcnRfbnVtID0gMDsKKworCXdoaWxlIChxcC0+c19sYXN0ICE9IHFwLT5zX2hlYWQpIHsKKwkJc3RydWN0IGlwYXRoX3N3cWUgKndxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfbGFzdCk7CisKKwkJd2Mud3JfaWQgPSB3cWUtPndyLndyX2lkOworCQl3Yy5vcGNvZGUgPSBpYl9pcGF0aF93Y19vcGNvZGVbd3FlLT53ci5vcGNvZGVdOworCQlpZiAoKytxcC0+c19sYXN0ID49IHFwLT5zX3NpemUpCisJCQlxcC0+c19sYXN0ID0gMDsKKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCAmd2MsIDEpOworCX0KKwlxcC0+c19jdXIgPSBxcC0+c190YWlsID0gcXAtPnNfaGVhZDsKKwlxcC0+c19oZHJ3b3JkcyA9IDA7CisJcXAtPnNfYWNrX3N0YXRlID0gSUJfT1BDT0RFX1JDX0FDS05PV0xFREdFOworCisJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKKwl3aGlsZSAocXAtPnJfcnEudGFpbCAhPSBxcC0+cl9ycS5oZWFkKSB7CisJCXdjLndyX2lkID0gZ2V0X3J3cWVfcHRyKCZxcC0+cl9ycSwgcXAtPnJfcnEudGFpbCktPndyX2lkOworCQlpZiAoKytxcC0+cl9ycS50YWlsID49IHFwLT5yX3JxLnNpemUpCisJCQlxcC0+cl9ycS50YWlsID0gMDsKKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsIDEpOworCX0KK30KKworLyoqCisgKiBpcGF0aF9tb2RpZnlfcXAgLSBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMgb2YgYSBxdWV1ZSBwYWlyCisgKiBAaWJxcDogdGhlIHF1ZXVlIHBhaXIgd2hvJ3MgYXR0cmlidXRlcyB3ZSdyZSBtb2RpZnlpbmcKKyAqIEBhdHRyOiB0aGUgbmV3IGF0dHJpYnV0ZXMKKyAqIEBhdHRyX21hc2s6IHRoZSBtYXNrIG9mIGF0dHJpYnV0ZXMgdG8gbW9kaWZ5CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSByZXR1cm5zIGFuIGVycm5vLgorICovCitpbnQgaXBhdGhfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCisJCSAgICBpbnQgYXR0cl9tYXNrKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnFwLT5kZXZpY2UpOworCXN0cnVjdCBpcGF0aF9xcCAqcXAgPSB0b19pcXAoaWJxcCk7CisJZW51bSBpYl9xcF9zdGF0ZSBjdXJfc3RhdGUsIG5ld19zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7CisKKwljdXJfc3RhdGUgPSBhdHRyX21hc2sgJiBJQl9RUF9DVVJfU1RBVEUgPworCQlhdHRyLT5jdXJfcXBfc3RhdGUgOiBxcC0+c3RhdGU7CisJbmV3X3N0YXRlID0gYXR0cl9tYXNrICYgSUJfUVBfU1RBVEUgPyBhdHRyLT5xcF9zdGF0ZSA6IGN1cl9zdGF0ZTsKKworCWlmICghaWJfbW9kaWZ5X3FwX2lzX29rKGN1cl9zdGF0ZSwgbmV3X3N0YXRlLCBpYnFwLT5xcF90eXBlLAorCQkJCWF0dHJfbWFzaykpCisJCWdvdG8gaW52YWw7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQVYpCisJCWlmIChhdHRyLT5haF9hdHRyLmRsaWQgPT0gMCB8fAorCQkgICAgYXR0ci0+YWhfYXR0ci5kbGlkID49IElQU19NVUxUSUNBU1RfTElEX0JBU0UpCisJCQlnb3RvIGludmFsOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpCisJCWlmIChhdHRyLT5wa2V5X2luZGV4ID49IGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGV2LT5kZCkpCisJCQlnb3RvIGludmFsOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX01JTl9STlJfVElNRVIpCisJCWlmIChhdHRyLT5taW5fcm5yX3RpbWVyID4gMzEpCisJCQlnb3RvIGludmFsOworCisJc3dpdGNoIChuZXdfc3RhdGUpIHsKKwljYXNlIElCX1FQU19SRVNFVDoKKwkJaXBhdGhfcmVzZXRfcXAocXApOworCQlicmVhazsKKworCWNhc2UgSUJfUVBTX0VSUjoKKwkJaXBhdGhfZXJyb3JfcXAocXApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCisJfQorCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpCisJCXFwLT5zX3BrZXlfaW5kZXggPSBhdHRyLT5wa2V5X2luZGV4OworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0RFU1RfUVBOKQorCQlxcC0+cmVtb3RlX3FwbiA9IGF0dHItPmRlc3RfcXBfbnVtOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1NRX1BTTikgeworCQlxcC0+c19uZXh0X3BzbiA9IGF0dHItPnNxX3BzbjsKKwkJcXAtPnNfbGFzdF9wc24gPSBxcC0+c19uZXh0X3BzbiAtIDE7CisJfQorCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1JRX1BTTikKKwkJcXAtPnJfcHNuID0gYXR0ci0+cnFfcHNuOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0FDQ0VTU19GTEFHUykKKwkJcXAtPnFwX2FjY2Vzc19mbGFncyA9IGF0dHItPnFwX2FjY2Vzc19mbGFnczsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BVikKKwkJcXAtPnJlbW90ZV9haF9hdHRyID0gYXR0ci0+YWhfYXR0cjsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QQVRIX01UVSkKKwkJcXAtPnBhdGhfbXR1ID0gYXR0ci0+cGF0aF9tdHU7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUkVUUllfQ05UKQorCQlxcC0+c19yZXRyeSA9IHFwLT5zX3JldHJ5X2NudCA9IGF0dHItPnJldHJ5X2NudDsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9STlJfUkVUUlkpIHsKKwkJcXAtPnNfcm5yX3JldHJ5ID0gYXR0ci0+cm5yX3JldHJ5OworCQlpZiAocXAtPnNfcm5yX3JldHJ5ID4gNykKKwkJCXFwLT5zX3Jucl9yZXRyeSA9IDc7CisJCXFwLT5zX3Jucl9yZXRyeV9jbnQgPSBxcC0+c19ybnJfcmV0cnk7CisJfQorCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX01JTl9STlJfVElNRVIpCisJCXFwLT5zX21pbl9ybnJfdGltZXIgPSBhdHRyLT5taW5fcm5yX3RpbWVyOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1FLRVkpCisJCXFwLT5xa2V5ID0gYXR0ci0+cWtleTsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QS0VZX0lOREVYKQorCQlxcC0+c19wa2V5X2luZGV4ID0gYXR0ci0+cGtleV9pbmRleDsKKworCXFwLT5zdGF0ZSA9IG5ld19zdGF0ZTsKKwlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBJZiBRUDEgY2hhbmdlZCB0byB0aGUgUlRTIHN0YXRlLCB0cnkgdG8gbW92ZSB0byB0aGUgbGluayB0byBJTklUCisJICogZXZlbiBpZiBpdCB3YXMgQUNUSVZFIHNvIHRoZSBTTSB3aWxsIHJlaW5pdGlhbGl6ZSB0aGUgU01BJ3MKKwkgKiBzdGF0ZS4KKwkgKi8KKwlpZiAocXAtPmlicXAucXBfbnVtID09IDEgJiYgbmV3X3N0YXRlID09IElCX1FQU19SVFMpIHsKKwkJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGlicXAtPmRldmljZSk7CisKKwkJaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShkZXYtPmRkLCBJUEFUSF9JQl9MSU5LRE9XTik7CisJfQorCXJldCA9IDA7CisJZ290byBiYWlsOworCitpbnZhbDoKKwlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCXJldCA9IC1FSU5WQUw7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworaW50IGlwYXRoX3F1ZXJ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCisJCSAgIGludCBhdHRyX21hc2ssIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKmluaXRfYXR0cikKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gdG9faXFwKGlicXApOworCisJYXR0ci0+cXBfc3RhdGUgPSBxcC0+c3RhdGU7CisJYXR0ci0+Y3VyX3FwX3N0YXRlID0gYXR0ci0+cXBfc3RhdGU7CisJYXR0ci0+cGF0aF9tdHUgPSBxcC0+cGF0aF9tdHU7CisJYXR0ci0+cGF0aF9taWdfc3RhdGUgPSAwOworCWF0dHItPnFrZXkgPSBxcC0+cWtleTsKKwlhdHRyLT5ycV9wc24gPSBxcC0+cl9wc247CisJYXR0ci0+c3FfcHNuID0gcXAtPnNfbmV4dF9wc247CisJYXR0ci0+ZGVzdF9xcF9udW0gPSBxcC0+cmVtb3RlX3FwbjsKKwlhdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgPSBxcC0+cXBfYWNjZXNzX2ZsYWdzOworCWF0dHItPmNhcC5tYXhfc2VuZF93ciA9IHFwLT5zX3NpemUgLSAxOworCWF0dHItPmNhcC5tYXhfcmVjdl93ciA9IHFwLT5yX3JxLnNpemUgLSAxOworCWF0dHItPmNhcC5tYXhfc2VuZF9zZ2UgPSBxcC0+c19tYXhfc2dlOworCWF0dHItPmNhcC5tYXhfcmVjdl9zZ2UgPSBxcC0+cl9ycS5tYXhfc2dlOworCWF0dHItPmNhcC5tYXhfaW5saW5lX2RhdGEgPSAwOworCWF0dHItPmFoX2F0dHIgPSBxcC0+cmVtb3RlX2FoX2F0dHI7CisJbWVtc2V0KCZhdHRyLT5hbHRfYWhfYXR0ciwgMCwgc2l6ZW9mKGF0dHItPmFsdF9haF9hdHRyKSk7CisJYXR0ci0+cGtleV9pbmRleCA9IHFwLT5zX3BrZXlfaW5kZXg7CisJYXR0ci0+YWx0X3BrZXlfaW5kZXggPSAwOworCWF0dHItPmVuX3NxZF9hc3luY19ub3RpZnkgPSAwOworCWF0dHItPnNxX2RyYWluaW5nID0gMDsKKwlhdHRyLT5tYXhfcmRfYXRvbWljID0gMTsKKwlhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWMgPSAxOworCWF0dHItPm1pbl9ybnJfdGltZXIgPSBxcC0+c19taW5fcm5yX3RpbWVyOworCWF0dHItPnBvcnRfbnVtID0gMTsKKwlhdHRyLT50aW1lb3V0ID0gMDsKKwlhdHRyLT5yZXRyeV9jbnQgPSBxcC0+c19yZXRyeV9jbnQ7CisJYXR0ci0+cm5yX3JldHJ5ID0gcXAtPnNfcm5yX3JldHJ5OworCWF0dHItPmFsdF9wb3J0X251bSA9IDA7CisJYXR0ci0+YWx0X3RpbWVvdXQgPSAwOworCisJaW5pdF9hdHRyLT5ldmVudF9oYW5kbGVyID0gcXAtPmlicXAuZXZlbnRfaGFuZGxlcjsKKwlpbml0X2F0dHItPnFwX2NvbnRleHQgPSBxcC0+aWJxcC5xcF9jb250ZXh0OworCWluaXRfYXR0ci0+c2VuZF9jcSA9IHFwLT5pYnFwLnNlbmRfY3E7CisJaW5pdF9hdHRyLT5yZWN2X2NxID0gcXAtPmlicXAucmVjdl9jcTsKKwlpbml0X2F0dHItPnNycSA9IHFwLT5pYnFwLnNycTsKKwlpbml0X2F0dHItPmNhcCA9IGF0dHItPmNhcDsKKwlpbml0X2F0dHItPnNxX3NpZ190eXBlID0KKwkJKHFwLT5zX2ZsYWdzICYgKDEgPDwgSVBBVEhfU19TSUdOQUxfUkVRX1dSKSkKKwkJPyBJQl9TSUdOQUxfUkVRX1dSIDogMDsKKwlpbml0X2F0dHItPnFwX3R5cGUgPSBxcC0+aWJxcC5xcF90eXBlOworCWluaXRfYXR0ci0+cG9ydF9udW0gPSAxOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2NvbXB1dGVfYWV0aCAtIGNvbXB1dGUgdGhlIEFFVEggKHN5bmRyb21lICsgTVNOKQorICogQHFwOiB0aGUgcXVldWUgcGFpciB0byBjb21wdXRlIHRoZSBBRVRIIGZvcgorICoKKyAqIFJldHVybnMgdGhlIEFFVEguCisgKgorICogVGhlIFFQIHNfbG9jayBzaG91bGQgYmUgaGVsZC4KKyAqLworX19iZTMyIGlwYXRoX2NvbXB1dGVfYWV0aChzdHJ1Y3QgaXBhdGhfcXAgKnFwKQoreworCXUzMiBhZXRoID0gYXRvbWljX3JlYWQoJnFwLT5tc24pICYgSVBTX01TTl9NQVNLOworCisJaWYgKHFwLT5zX25ha19zdGF0ZSkgeworCQlhZXRoIHw9IHFwLT5zX25ha19zdGF0ZSA8PCBJUFNfQUVUSF9DUkVESVRfU0hJRlQ7CisJfSBlbHNlIGlmIChxcC0+aWJxcC5zcnEpIHsKKwkJLyoKKwkJICogU2hhcmVkIHJlY2VpdmUgcXVldWVzIGRvbid0IGdlbmVyYXRlIGNyZWRpdHMuCisJCSAqIFNldCB0aGUgY3JlZGl0IGZpZWxkIHRvIHRoZSBpbnZhbGlkIHZhbHVlLgorCQkgKi8KKwkJYWV0aCB8PSBJUFNfQUVUSF9DUkVESVRfSU5WQUwgPDwgSVBTX0FFVEhfQ1JFRElUX1NISUZUOworCX0gZWxzZSB7CisJCXUzMiBtaW4sIG1heCwgeDsKKwkJdTMyIGNyZWRpdHM7CisKKwkJLyoKKwkJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNyZWRpdHMgYXZhaWxhYmxlIChSV1FFcykuCisJCSAqIFhYWCBOb3QgaG9sZGluZyB0aGUgcl9ycS5sb2NrIGhlcmUgc28gdGhlcmUgaXMgYSBzbWFsbAorCQkgKiBjaGFuY2UgdGhhdCB0aGUgcGFpciBvZiByZWFkcyBhcmUgbm90IGF0b21pYy4KKwkJICovCisJCWNyZWRpdHMgPSBxcC0+cl9ycS5oZWFkIC0gcXAtPnJfcnEudGFpbDsKKwkJaWYgKChpbnQpY3JlZGl0cyA8IDApCisJCQljcmVkaXRzICs9IHFwLT5yX3JxLnNpemU7CisJCS8qCisJCSAqIEJpbmFyeSBzZWFyY2ggdGhlIGNyZWRpdCB0YWJsZSB0byBmaW5kIHRoZSBjb2RlIHRvCisJCSAqIHVzZS4KKwkJICovCisJCW1pbiA9IDA7CisJCW1heCA9IDMxOworCQlmb3IgKDs7KSB7CisJCQl4ID0gKG1pbiArIG1heCkgLyAyOworCQkJaWYgKGNyZWRpdF90YWJsZVt4XSA9PSBjcmVkaXRzKQorCQkJCWJyZWFrOworCQkJaWYgKGNyZWRpdF90YWJsZVt4XSA+IGNyZWRpdHMpCisJCQkJbWF4ID0geDsKKwkJCWVsc2UgaWYgKG1pbiA9PSB4KQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCW1pbiA9IHg7CisJCX0KKwkJYWV0aCB8PSB4IDw8IElQU19BRVRIX0NSRURJVF9TSElGVDsKKwl9CisJcmV0dXJuIGNwdV90b19iZTMyKGFldGgpOworfQorCisvKioKKyAqIGlwYXRoX2NyZWF0ZV9xcCAtIGNyZWF0ZSBhIHF1ZXVlIHBhaXIgZm9yIGEgZGV2aWNlCisgKiBAaWJwZDogdGhlIHByb3RlY3Rpb24gZG9tYWluIHdobydzIGRldmljZSB3ZSBjcmVhdGUgdGhlIHF1ZXVlIHBhaXIgZm9yCisgKiBAaW5pdF9hdHRyOiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgcXVldWUgcGFpcgorICogQHVkYXRhOiB1bnVzZWQgYnkgSW5maW5pUGF0aAorICoKKyAqIFJldHVybnMgdGhlIHF1ZXVlIHBhaXIgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMgYW4gZXJybm8uCisgKgorICogQ2FsbGVkIGJ5IHRoZSBpYl9jcmVhdGVfcXAoKSBjb3JlIHZlcmJzIGZ1bmN0aW9uLgorICovCitzdHJ1Y3QgaWJfcXAgKmlwYXRoX2NyZWF0ZV9xcChzdHJ1Y3QgaWJfcGQgKmlicGQsCisJCQkgICAgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIsCisJCQkgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBpcGF0aF9xcCAqcXA7CisJaW50IGVycjsKKwlzdHJ1Y3QgaXBhdGhfc3dxZSAqc3dxID0gTlVMTDsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldjsKKwlzaXplX3Qgc3o7CisJc3RydWN0IGliX3FwICpyZXQ7CisKKwlpZiAoaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlID4gMjU1IHx8CisJICAgIGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSA+IDI1NSkgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJc3dpdGNoIChpbml0X2F0dHItPnFwX3R5cGUpIHsKKwljYXNlIElCX1FQVF9VQzoKKwljYXNlIElCX1FQVF9SQzoKKwkJc3ogPSBzaXplb2Yoc3RydWN0IGlwYXRoX3NnZSkgKgorCQkJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlICsKKwkJCXNpemVvZihzdHJ1Y3QgaXBhdGhfc3dxZSk7CisJCXN3cSA9IHZtYWxsb2MoKGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyICsgMSkgKiBzeik7CisJCWlmIChzd3EgPT0gTlVMTCkgeworCQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgSUJfUVBUX1VEOgorCWNhc2UgSUJfUVBUX1NNSToKKwljYXNlIElCX1FQVF9HU0k6CisJCXFwID0ga21hbGxvYyhzaXplb2YoKnFwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcXApIHsKKwkJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJcXAtPnJfcnEuc2l6ZSA9IGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyICsgMTsKKwkJc3ogPSBzaXplb2Yoc3RydWN0IGlwYXRoX3NnZSkgKgorCQkJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlICsKKwkJCXNpemVvZihzdHJ1Y3QgaXBhdGhfcndxZSk7CisJCXFwLT5yX3JxLndxID0gdm1hbGxvYyhxcC0+cl9ycS5zaXplICogc3opOworCQlpZiAoIXFwLT5yX3JxLndxKSB7CisJCQlrZnJlZShxcCk7CisJCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQkJZ290byBiYWlsOworCQl9CisKKwkJLyoKKwkJICogaWJfY3JlYXRlX3FwKCkgd2lsbCBpbml0aWFsaXplIHFwLT5pYnFwCisJCSAqIGV4Y2VwdCBmb3IgcXAtPmlicXAucXBfbnVtLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2luaXQoJnFwLT5zX2xvY2spOworCQlzcGluX2xvY2tfaW5pdCgmcXAtPnJfcnEubG9jayk7CisJCWF0b21pY19zZXQoJnFwLT5yZWZjb3VudCwgMCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnFwLT53YWl0KTsKKwkJdGFza2xldF9pbml0KCZxcC0+c190YXNrLAorCQkJICAgICBpbml0X2F0dHItPnFwX3R5cGUgPT0gSUJfUVBUX1JDID8KKwkJCSAgICAgaXBhdGhfZG9fcmNfc2VuZCA6IGlwYXRoX2RvX3VjX3NlbmQsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKXFwKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnFwLT5waW93YWl0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJnFwLT50aW1lcndhaXQpOworCQlxcC0+c3RhdGUgPSBJQl9RUFNfUkVTRVQ7CisJCXFwLT5zX3dxID0gc3dxOworCQlxcC0+c19zaXplID0gaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgKyAxOworCQlxcC0+c19tYXhfc2dlID0gaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlOworCQlxcC0+cl9ycS5tYXhfc2dlID0gaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlOworCQlxcC0+c19mbGFncyA9IGluaXRfYXR0ci0+c3Ffc2lnX3R5cGUgPT0gSUJfU0lHTkFMX1JFUV9XUiA/CisJCQkxIDw8IElQQVRIX1NfU0lHTkFMX1JFUV9XUiA6IDA7CisJCWRldiA9IHRvX2lkZXYoaWJwZC0+ZGV2aWNlKTsKKwkJZXJyID0gaXBhdGhfYWxsb2NfcXBuKCZkZXYtPnFwX3RhYmxlLCBxcCwKKwkJCQkgICAgICBpbml0X2F0dHItPnFwX3R5cGUpOworCQlpZiAoZXJyKSB7CisJCQl2ZnJlZShzd3EpOworCQkJdmZyZWUocXAtPnJfcnEud3EpOworCQkJa2ZyZWUocXApOworCQkJcmV0ID0gRVJSX1BUUihlcnIpOworCQkJZ290byBiYWlsOworCQl9CisJCWlwYXRoX3Jlc2V0X3FwKHFwKTsKKworCQkvKiBUZWxsIHRoZSBjb3JlIGRyaXZlciB0aGF0IHRoZSBrZXJuZWwgU01BIGlzIHByZXNlbnQuICovCisJCWlmIChpbml0X2F0dHItPnFwX3R5cGUgPT0gSUJfUVBUX1NNSSkKKwkJCWlwYXRoX2xheWVyX3NldF92ZXJic19mbGFncyhkZXYtPmRkLAorCQkJCQkJICAgIElQQVRIX1ZFUkJTX0tFUk5FTF9TTUEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIERvbid0IHN1cHBvcnQgcmF3IFFQcyAqLworCQlyZXQgPSBFUlJfUFRSKC1FTk9TWVMpOworCQlnb3RvIGJhaWw7CisJfQorCisJaW5pdF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gMDsKKworCXJldCA9ICZxcC0+aWJxcDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2Rlc3Ryb3lfcXAgLSBkZXN0cm95IGEgcXVldWUgcGFpcgorICogQGlicXA6IHRoZSBxdWV1ZSBwYWlyIHRvIGRlc3Ryb3kKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBjYW4gYmUgY2FsbGVkIHdoaWxlIHRoZSBRUCBpcyBhY3RpdmVseSBzZW5kaW5nIG9yCisgKiByZWNlaXZpbmchCisgKi8KK2ludCBpcGF0aF9kZXN0cm95X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gdG9faXFwKGlicXApOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnFwLT5kZXZpY2UpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBUZWxsIHRoZSBjb3JlIGRyaXZlciB0aGF0IHRoZSBrZXJuZWwgU01BIGlzIGdvbmUuICovCisJaWYgKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1NNSSkKKwkJaXBhdGhfbGF5ZXJfc2V0X3ZlcmJzX2ZsYWdzKGRldi0+ZGQsIDApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCXFwLT5zdGF0ZSA9IElCX1FQU19FUlI7CisJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKworCS8qIFN0b3AgdGhlIHNlbmRpbmcgdGFza2xldC4gKi8KKwl0YXNrbGV0X2tpbGwoJnFwLT5zX3Rhc2spOworCisJLyogTWFrZSBzdXJlIHRoZSBRUCBpc24ndCBvbiB0aGUgdGltZW91dCBsaXN0LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCWxpc3RfZGVsX2luaXQoJnFwLT50aW1lcndhaXQpOworCWlmICghbGlzdF9lbXB0eSgmcXAtPnBpb3dhaXQpKQorCQlsaXN0X2RlbF9pbml0KCZxcC0+cGlvd2FpdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgdGhlIFFQIGlzIG5vdCBpbiB0aGUgUVBOIHRhYmxlIHNvIHJlY2VpdmUKKwkgKiBpbnRlcnJ1cHRzIHdpbGwgZGlzY2FyZCBwYWNrZXRzIGZvciB0aGlzIFFQLiAgWFhYIEFsc28gcmVtb3ZlIFFQCisJICogZnJvbSBtdWx0aWNhc3QgdGFibGUuCisJICovCisJaWYgKGF0b21pY19yZWFkKCZxcC0+cmVmY291bnQpICE9IDApCisJCWlwYXRoX2ZyZWVfcXAoJmRldi0+cXBfdGFibGUsIHFwKTsKKworCXZmcmVlKHFwLT5zX3dxKTsKKwl2ZnJlZShxcC0+cl9ycS53cSk7CisJa2ZyZWUocXApOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2luaXRfcXBfdGFibGUgLSBpbml0aWFsaXplIHRoZSBRUCB0YWJsZSBmb3IgYSBkZXZpY2UKKyAqIEBpZGV2OiB0aGUgZGV2aWNlIHdobydzIFFQIHRhYmxlIHdlJ3JlIGluaXRpYWxpemluZworICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBRUCB0YWJsZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJuby4KKyAqLworaW50IGlwYXRoX2luaXRfcXBfdGFibGUoc3RydWN0IGlwYXRoX2liZGV2ICppZGV2LCBpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJaWRldi0+cXBfdGFibGUubGFzdCA9IDE7CS8qIFFQTiAwIGFuZCAxIGFyZSBzcGVjaWFsLiAqLworCWlkZXYtPnFwX3RhYmxlLm1heCA9IHNpemU7CisJaWRldi0+cXBfdGFibGUubm1hcHMgPSAxOworCWlkZXYtPnFwX3RhYmxlLnRhYmxlID0ga3phbGxvYyhzaXplICogc2l6ZW9mKCppZGV2LT5xcF90YWJsZS50YWJsZSksCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChpZGV2LT5xcF90YWJsZS50YWJsZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpZGV2LT5xcF90YWJsZS5tYXApOyBpKyspIHsKKwkJYXRvbWljX3NldCgmaWRldi0+cXBfdGFibGUubWFwW2ldLm5fZnJlZSwgQklUU19QRVJfUEFHRSk7CisJCWlkZXYtPnFwX3RhYmxlLm1hcFtpXS5wYWdlID0gTlVMTDsKKwl9CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfc3FlcnJvcl9xcCAtIHB1dCBhIFFQJ3Mgc2VuZCBxdWV1ZSBpbnRvIGFuIGVycm9yIHN0YXRlCisgKiBAcXA6IFFQIHdobydzIHNlbmQgcXVldWUgd2lsbCBiZSBwdXQgaW50byBhbiBlcnJvciBzdGF0ZQorICogQHdjOiB0aGUgV0MgcmVzcG9uc2libGUgZm9yIHB1dHRpbmcgdGhlIFFQIGluIHRoaXMgc3RhdGUKKyAqCisgKiBGbHVzaGVzIHRoZSBzZW5kIHdvcmsgcXVldWUuCisgKiBUaGUgUVAgc19sb2NrIHNob3VsZCBiZSBoZWxkLgorICovCisKK3ZvaWQgaXBhdGhfc3FlcnJvcl9xcChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaWJfd2MgKndjKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCXN0cnVjdCBpcGF0aF9zd3FlICp3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOworCisJX1ZFUkJTX0lORk8oIlNlbmQgcXVldWUgZXJyb3Igb24gUVAlZC8lZDogZXJyOiAlZFxuIiwKKwkJICAgIHFwLT5pYnFwLnFwX251bSwgcXAtPnJlbW90ZV9xcG4sIHdjLT5zdGF0dXMpOworCisJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJLyogWFhYIFdoYXQgaWYgaXRzIGFscmVhZHkgcmVtb3ZlZCBieSB0aGUgdGltZW91dCBjb2RlPyAqLworCWlmICghbGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCWxpc3RfZGVsX2luaXQoJnFwLT50aW1lcndhaXQpOworCWlmICghbGlzdF9lbXB0eSgmcXAtPnBpb3dhaXQpKQorCQlsaXN0X2RlbF9pbml0KCZxcC0+cGlvd2FpdCk7CisJc3Bpbl91bmxvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKworCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5zZW5kX2NxKSwgd2MsIDEpOworCWlmICgrK3FwLT5zX2xhc3QgPj0gcXAtPnNfc2l6ZSkKKwkJcXAtPnNfbGFzdCA9IDA7CisKKwl3Yy0+c3RhdHVzID0gSUJfV0NfV1JfRkxVU0hfRVJSOworCisJd2hpbGUgKHFwLT5zX2xhc3QgIT0gcXAtPnNfaGVhZCkgeworCQl3Yy0+d3JfaWQgPSB3cWUtPndyLndyX2lkOworCQl3Yy0+b3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCB3YywgMSk7CisJCWlmICgrK3FwLT5zX2xhc3QgPj0gcXAtPnNfc2l6ZSkKKwkJCXFwLT5zX2xhc3QgPSAwOworCQl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOworCX0KKwlxcC0+c19jdXIgPSBxcC0+c190YWlsID0gcXAtPnNfaGVhZDsKKwlxcC0+c3RhdGUgPSBJQl9RUFNfU1FFOworfQorCisvKioKKyAqIGlwYXRoX2dldF9jcmVkaXQgLSBmbHVzaCB0aGUgc2VuZCB3b3JrIHF1ZXVlIG9mIGEgUVAKKyAqIEBxcDogdGhlIHFwIHdobydzIHNlbmQgd29yayBxdWV1ZSB0byBmbHVzaAorICogQGFldGg6IHRoZSBBY2tub3dsZWRnZSBFeHRlbmRlZCBUcmFuc3BvcnQgSGVhZGVyCisgKgorICogVGhlIFFQIHNfbG9jayBzaG91bGQgYmUgaGVsZC4KKyAqLwordm9pZCBpcGF0aF9nZXRfY3JlZGl0KHN0cnVjdCBpcGF0aF9xcCAqcXAsIHUzMiBhZXRoKQoreworCXUzMiBjcmVkaXQgPSAoYWV0aCA+PiBJUFNfQUVUSF9DUkVESVRfU0hJRlQpICYgSVBTX0FFVEhfQ1JFRElUX01BU0s7CisKKwkvKgorCSAqIElmIHRoZSBjcmVkaXQgaXMgaW52YWxpZCwgd2UgY2FuIHNlbmQKKwkgKiBhcyBtYW55IHBhY2tldHMgYXMgd2UgbGlrZS4gIE90aGVyd2lzZSwgd2UgaGF2ZSB0bworCSAqIGhvbm9yIHRoZSBjcmVkaXQgZmllbGQuCisJICovCisJaWYgKGNyZWRpdCA9PSBJUFNfQUVUSF9DUkVESVRfSU5WQUwpIHsKKwkJcXAtPnNfbHNuID0gKHUzMikgLTE7CisJfSBlbHNlIGlmIChxcC0+c19sc24gIT0gKHUzMikgLTEpIHsKKwkJLyogQ29tcHV0ZSBuZXcgTFNOIChpLmUuLCBNU04gKyBjcmVkaXQpICovCisJCWNyZWRpdCA9IChhZXRoICsgY3JlZGl0X3RhYmxlW2NyZWRpdF0pICYgSVBTX01TTl9NQVNLOworCQlpZiAoaXBhdGhfY21wMjQoY3JlZGl0LCBxcC0+c19sc24pID4gMCkKKwkJCXFwLT5zX2xzbiA9IGNyZWRpdDsKKwl9CisKKwkvKiBSZXN0YXJ0IHNlbmRpbmcgaWYgaXQgd2FzIGJsb2NrZWQgZHVlIHRvIGxhY2sgb2YgY3JlZGl0cy4gKi8KKwlpZiAocXAtPnNfY3VyICE9IHFwLT5zX2hlYWQgJiYKKwkgICAgKHFwLT5zX2xzbiA9PSAodTMyKSAtMSB8fAorCSAgICAgaXBhdGhfY21wMjQoZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19jdXIpLT5zc24sCisJCQkgcXAtPnNfbHNuICsgMSkgPD0gMCkpCisJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnFwLT5zX3Rhc2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTNiMTgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKQEAgLTAsMCArMSwxODU2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorCisvKiBjdXQgZG93biByaWRpY3Vsb3VzbHkgbG9uZyBJQiBtYWNybyBuYW1lcyAqLworI2RlZmluZSBPUCh4KSBJQl9PUENPREVfUkNfIyN4CisKKy8qKgorICogaXBhdGhfaW5pdF9yZXN0YXJ0LSBpbml0aWFsaXplIHRoZSBxcC0+c19zZ2UgYWZ0ZXIgYSByZXN0YXJ0CisgKiBAcXA6IHRoZSBRUCB3aG8ncyBTR0Ugd2UncmUgcmVzdGFydGluZworICogQHdxZTogdGhlIHdvcmsgcXVldWUgdG8gaW5pdGlhbGl6ZSB0aGUgUVAncyBTR0UgZnJvbQorICoKKyAqIFRoZSBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX2luaXRfcmVzdGFydChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfc3dxZSAqd3FlKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2OworCXUzMiBsZW47CisKKwlsZW4gPSAoKHFwLT5zX3BzbiAtIHdxZS0+cHNuKSAmIElQU19QU05fTUFTSykgKgorCQlpYl9tdHVfZW51bV90b19pbnQocXAtPnBhdGhfbXR1KTsKKwlxcC0+c19zZ2Uuc2dlID0gd3FlLT5zZ19saXN0WzBdOworCXFwLT5zX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwlxcC0+c19zZ2UubnVtX3NnZSA9IHdxZS0+d3IubnVtX3NnZTsKKwlpcGF0aF9za2lwX3NnZSgmcXAtPnNfc2dlLCBsZW4pOworCXFwLT5zX2xlbiA9IHdxZS0+bGVuZ3RoIC0gbGVuOworCWRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwlzcGluX2xvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCWxpc3RfYWRkX3RhaWwoJnFwLT50aW1lcndhaXQsCisJCQkgICAgICAmZGV2LT5wZW5kaW5nW2Rldi0+cGVuZGluZ19pbmRleF0pOworCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7Cit9CisKKy8qKgorICogaXBhdGhfbWFrZV9yY19hY2sgLSBjb25zdHJ1Y3QgYSByZXNwb25zZSBwYWNrZXQgKEFDSywgTkFLLCBvciBSRE1BIHJlYWQpCisgKiBAcXA6IGEgcG9pbnRlciB0byB0aGUgUVAKKyAqIEBvaGRyOiBhIHBvaW50ZXIgdG8gdGhlIElCIGhlYWRlciBiZWluZyBjb25zdHJ1Y3RlZAorICogQHBtdHU6IHRoZSBwYXRoIE1UVQorICoKKyAqIFJldHVybiBidGgwIGlmIGNvbnN0cnVjdGVkOyBvdGhlcndpc2UsIHJldHVybiAwLgorICogTm90ZSB0aGUgUVAgc19sb2NrIG11c3QgYmUgaGVsZC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgaXBhdGhfbWFrZV9yY19hY2soc3RydWN0IGlwYXRoX3FwICpxcCwKKwkJCQkgICAgc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHIsCisJCQkJICAgIHUzMiBwbXR1KQoreworCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzOworCXUzMiBod29yZHM7CisJdTMyIGxlbjsKKwl1MzIgYnRoMDsKKworCS8qIGhlYWRlciBzaXplIGluIDMyLWJpdCB3b3JkcyBMUkgrQlRIID0gKDgrMTIpLzQuICovCisJaHdvcmRzID0gNTsKKworCS8qCisJICogU2VuZCBhIHJlc3BvbnNlLiAgTm90ZSB0aGF0IHdlIGFyZSBpbiB0aGUgcmVzcG9uZGVyJ3MKKwkgKiBzaWRlIG9mIHRoZSBRUCBjb250ZXh0LgorCSAqLworCXN3aXRjaCAocXAtPnNfYWNrX3N0YXRlKSB7CisJY2FzZSBPUChSRE1BX1JFQURfUkVRVUVTVCk6CisJCXNzID0gJnFwLT5zX3JkbWFfc2dlOworCQlsZW4gPSBxcC0+c19yZG1hX2xlbjsKKwkJaWYgKGxlbiA+IHBtdHUpIHsKKwkJCWxlbiA9IHBtdHU7CisJCQlxcC0+c19hY2tfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfRklSU1QpOworCQl9CisJCWVsc2UKKwkJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9PTkxZKTsKKwkJcXAtPnNfcmRtYV9sZW4gLT0gbGVuOworCQlidGgwID0gcXAtPnNfYWNrX3N0YXRlIDw8IDI0OworCQlvaGRyLT51LmFldGggPSBpcGF0aF9jb21wdXRlX2FldGgocXApOworCQlod29yZHMrKzsKKwkJYnJlYWs7CisKKwljYXNlIE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCk6CisJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9NSURETEUpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSk6CisJCXNzID0gJnFwLT5zX3JkbWFfc2dlOworCQlsZW4gPSBxcC0+c19yZG1hX2xlbjsKKwkJaWYgKGxlbiA+IHBtdHUpCisJCQlsZW4gPSBwbXR1OworCQllbHNlIHsKKwkJCW9oZHItPnUuYWV0aCA9IGlwYXRoX2NvbXB1dGVfYWV0aChxcCk7CisJCQlod29yZHMrKzsKKwkJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9MQVNUKTsKKwkJfQorCQlxcC0+c19yZG1hX2xlbiAtPSBsZW47CisJCWJ0aDAgPSBxcC0+c19hY2tfc3RhdGUgPDwgMjQ7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk6CisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfT05MWSk6CisJCS8qCisJCSAqIFdlIGhhdmUgdG8gcHJldmVudCBuZXcgcmVxdWVzdHMgZnJvbSBjaGFuZ2luZworCQkgKiB0aGUgcl9zZ2Ugc3RhdGUgd2hpbGUgYSBpcGF0aF92ZXJic19zZW5kKCkKKwkJICogaXMgaW4gcHJvZ3Jlc3MuCisJCSAqIENoYW5naW5nIHJfc3RhdGUgYWxsb3dzIHRoZSByZWNlaXZlcgorCQkgKiB0byBjb250aW51ZSBwcm9jZXNzaW5nIG5ldyBwYWNrZXRzLgorCQkgKiBXZSBkbyBpdCBoZXJlIG5vdyBpbnN0ZWFkIG9mIGFib3ZlIHNvCisJCSAqIHRoYXQgd2UgYXJlIHN1cmUgdGhlIHBhY2tldCB3YXMgc2VudCBiZWZvcmUKKwkJICogY2hhbmdpbmcgdGhlIHN0YXRlLgorCQkgKi8KKwkJcXAtPnJfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk7CisJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKEFDS05PV0xFREdFKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QKENPTVBBUkVfU1dBUCk6CisJY2FzZSBPUChGRVRDSF9BREQpOgorCQlzcyA9IE5VTEw7CisJCWxlbiA9IDA7CisJCXFwLT5yX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwkJcXAtPnNfYWNrX3N0YXRlID0gT1AoQUNLTk9XTEVER0UpOworCQlidGgwID0gSUJfT1BDT0RFX0FUT01JQ19BQ0tOT1dMRURHRSA8PCAyNDsKKwkJb2hkci0+dS5hdC5hZXRoID0gaXBhdGhfY29tcHV0ZV9hZXRoKHFwKTsKKwkJb2hkci0+dS5hdC5hdG9taWNfYWNrX2V0aCA9IGNwdV90b19iZTY0KHFwLT5zX2Fja19hdG9taWMpOworCQlod29yZHMgKz0gc2l6ZW9mKG9oZHItPnUuYXQpIC8gNDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBTZW5kIGEgcmVndWxhciBBQ0suICovCisJCXNzID0gTlVMTDsKKwkJbGVuID0gMDsKKwkJcXAtPnNfYWNrX3N0YXRlID0gT1AoQUNLTk9XTEVER0UpOworCQlidGgwID0gcXAtPnNfYWNrX3N0YXRlIDw8IDI0OworCQlvaGRyLT51LmFldGggPSBpcGF0aF9jb21wdXRlX2FldGgocXApOworCQlod29yZHMrKzsKKwl9CisJcXAtPnNfaGRyd29yZHMgPSBod29yZHM7CisJcXAtPnNfY3VyX3NnZSA9IHNzOworCXFwLT5zX2N1cl9zaXplID0gbGVuOworCisJcmV0dXJuIGJ0aDA7Cit9CisKKy8qKgorICogaXBhdGhfbWFrZV9yY19yZXEgLSBjb25zdHJ1Y3QgYSByZXF1ZXN0IHBhY2tldCAoU0VORCwgUkRNQSByL3csIEFUT01JQykKKyAqIEBxcDogYSBwb2ludGVyIHRvIHRoZSBRUAorICogQG9oZHI6IGEgcG9pbnRlciB0byB0aGUgSUIgaGVhZGVyIGJlaW5nIGNvbnN0cnVjdGVkCisgKiBAcG10dTogdGhlIHBhdGggTVRVCisgKiBAYnRoMHA6IHBvaW50ZXIgdG8gdGhlIEJUSCBvcGNvZGUgd29yZAorICogQGJ0aDJwOiBwb2ludGVyIHRvIHRoZSBCVEggUFNOIHdvcmQKKyAqCisgKiBSZXR1cm4gMSBpZiBjb25zdHJ1Y3RlZDsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KKyAqIE5vdGUgdGhlIFFQIHNfbG9jayBtdXN0IGJlIGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlwYXRoX21ha2VfcmNfcmVxKHN0cnVjdCBpcGF0aF9xcCAqcXAsCisJCQkJICAgIHN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyLAorCQkJCSAgICB1MzIgcG10dSwgdTMyICpidGgwcCwgdTMyICpidGgycCkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzczsKKwlzdHJ1Y3QgaXBhdGhfc3dxZSAqd3FlOworCXUzMiBod29yZHM7CisJdTMyIGxlbjsKKwl1MzIgYnRoMDsKKwl1MzIgYnRoMjsKKwljaGFyIG5ld3JlcTsKKworCWlmICghKGliX2lwYXRoX3N0YXRlX29wc1txcC0+c3RhdGVdICYgSVBBVEhfUFJPQ0VTU19TRU5EX09LKSB8fAorCSAgICBxcC0+c19ybnJfdGltZW91dCkKKwkJZ290byBkb25lOworCisJLyogaGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzIExSSCtCVEggPSAoOCsxMikvNC4gKi8KKwlod29yZHMgPSA1OworCWJ0aDAgPSAwOworCisJLyogU2VuZCBhIHJlcXVlc3QuICovCisJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19jdXIpOworCXN3aXRjaCAocXAtPnNfc3RhdGUpIHsKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBSZXNlbmQgYW4gb2xkIHJlcXVlc3Qgb3Igc3RhcnQgYSBuZXcgb25lLgorCQkgKgorCQkgKiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IFNXUUUgc28gdGhhdAorCQkgKiB3ZSBkb24ndCByZXNldCB0aGUgImZ1cnRoZXN0IHByb2dyZXNzIiBzdGF0ZQorCQkgKiBpZiB3ZSBuZWVkIHRvIGJhY2sgdXAuCisJCSAqLworCQluZXdyZXEgPSAwOworCQlpZiAocXAtPnNfY3VyID09IHFwLT5zX3RhaWwpIHsKKwkJCS8qIENoZWNrIGlmIHNlbmQgd29yayBxdWV1ZSBpcyBlbXB0eS4gKi8KKwkJCWlmIChxcC0+c190YWlsID09IHFwLT5zX2hlYWQpCisJCQkJZ290byBkb25lOworCQkJcXAtPnNfcHNuID0gd3FlLT5wc24gPSBxcC0+c19uZXh0X3BzbjsKKwkJCW5ld3JlcSA9IDE7CisJCX0KKwkJLyoKKwkJICogTm90ZSB0aGF0IHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gbW9kaWZ5IHRoZQorCQkgKiBvcmlnaW5hbCB3b3JrIHJlcXVlc3Qgc2luY2Ugd2UgbWF5IG5lZWQgdG8gcmVzZW5kCisJCSAqIGl0LgorCQkgKi8KKwkJcXAtPnNfc2dlLnNnZSA9IHdxZS0+c2dfbGlzdFswXTsKKwkJcXAtPnNfc2dlLnNnX2xpc3QgPSB3cWUtPnNnX2xpc3QgKyAxOworCQlxcC0+c19zZ2UubnVtX3NnZSA9IHdxZS0+d3IubnVtX3NnZTsKKwkJcXAtPnNfbGVuID0gbGVuID0gd3FlLT5sZW5ndGg7CisJCXNzID0gJnFwLT5zX3NnZTsKKwkJYnRoMiA9IDA7CisJCXN3aXRjaCAod3FlLT53ci5vcGNvZGUpIHsKKwkJY2FzZSBJQl9XUl9TRU5EOgorCQljYXNlIElCX1dSX1NFTkRfV0lUSF9JTU06CisJCQkvKiBJZiBubyBjcmVkaXQsIHJldHVybi4gKi8KKwkJCWlmIChxcC0+c19sc24gIT0gKHUzMikgLTEgJiYKKwkJCSAgICBpcGF0aF9jbXAyNCh3cWUtPnNzbiwgcXAtPnNfbHNuICsgMSkgPiAwKQorCQkJCWdvdG8gZG9uZTsKKwkJCXdxZS0+bHBzbiA9IHdxZS0+cHNuOworCQkJaWYgKGxlbiA+IHBtdHUpIHsKKwkJCQl3cWUtPmxwc24gKz0gKGxlbiAtIDEpIC8gcG10dTsKKwkJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfRklSU1QpOworCQkJCWxlbiA9IHBtdHU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfU0VORCkKKwkJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfT05MWSk7CisJCQllbHNlIHsKKwkJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfT05MWV9XSVRIX0lNTUVESUFURSk7CisJCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgdGhlIEJUSCAqLworCQkJCW9oZHItPnUuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkJCWh3b3JkcyArPSAxOworCQkJfQorCQkJaWYgKHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKQorCQkJCWJ0aDAgfD0gMSA8PCAyMzsKKwkJCWJ0aDIgPSAxIDw8IDMxOwkvKiBSZXF1ZXN0IEFDSy4gKi8KKwkJCWlmICgrK3FwLT5zX2N1ciA9PSBxcC0+c19zaXplKQorCQkJCXFwLT5zX2N1ciA9IDA7CisJCQlicmVhazsKKworCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCQlpZiAobmV3cmVxKQorCQkJCXFwLT5zX2xzbisrOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NOgorCQkJLyogSWYgbm8gY3JlZGl0LCByZXR1cm4uICovCisJCQlpZiAocXAtPnNfbHNuICE9ICh1MzIpIC0xICYmCisJCQkgICAgaXBhdGhfY21wMjQod3FlLT5zc24sIHFwLT5zX2xzbiArIDEpID4gMCkKKwkJCQlnb3RvIGRvbmU7CisJCQlvaGRyLT51LnJjLnJldGgudmFkZHIgPQorCQkJCWNwdV90b19iZTY0KHdxZS0+d3Iud3IucmRtYS5yZW1vdGVfYWRkcik7CisJCQlvaGRyLT51LnJjLnJldGgucmtleSA9CisJCQkJY3B1X3RvX2JlMzIod3FlLT53ci53ci5yZG1hLnJrZXkpOworCQkJb2hkci0+dS5yYy5yZXRoLmxlbmd0aCA9IGNwdV90b19iZTMyKGxlbik7CisJCQlod29yZHMgKz0gc2l6ZW9mKHN0cnVjdCBpYl9yZXRoKSAvIDQ7CisJCQl3cWUtPmxwc24gPSB3cWUtPnBzbjsKKwkJCWlmIChsZW4gPiBwbXR1KSB7CisJCQkJd3FlLT5scHNuICs9IChsZW4gLSAxKSAvIHBtdHU7CisJCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1dSSVRFX0ZJUlNUKTsKKwkJCQlsZW4gPSBwbXR1OworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1JETUFfV1JJVEUpCisJCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1dSSVRFX09OTFkpOworCQkJZWxzZSB7CisJCQkJcXAtPnNfc3RhdGUgPQorCQkJCQlPUChSRE1BX1dSSVRFX09OTFlfV0lUSF9JTU1FRElBVEUpOworCQkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzCisJCQkJICogYWZ0ZXIgUkVUSCAqLworCQkJCW9oZHItPnUucmMuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkJCWh3b3JkcyArPSAxOworCQkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCQkJYnRoMCB8PSAxIDw8IDIzOworCQkJfQorCQkJYnRoMiA9IDEgPDwgMzE7CS8qIFJlcXVlc3QgQUNLLiAqLworCQkJaWYgKCsrcXAtPnNfY3VyID09IHFwLT5zX3NpemUpCisJCQkJcXAtPnNfY3VyID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQkJb2hkci0+dS5yYy5yZXRoLnZhZGRyID0KKwkJCQljcHVfdG9fYmU2NCh3cWUtPndyLndyLnJkbWEucmVtb3RlX2FkZHIpOworCQkJb2hkci0+dS5yYy5yZXRoLnJrZXkgPQorCQkJCWNwdV90b19iZTMyKHdxZS0+d3Iud3IucmRtYS5ya2V5KTsKKwkJCW9oZHItPnUucmMucmV0aC5sZW5ndGggPSBjcHVfdG9fYmUzMihsZW4pOworCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVRVUVTVCk7CisJCQlod29yZHMgKz0gc2l6ZW9mKG9oZHItPnUucmMucmV0aCkgLyA0OworCQkJaWYgKG5ld3JlcSkgeworCQkJCXFwLT5zX2xzbisrOworCQkJCS8qCisJCQkJICogQWRqdXN0IHNfbmV4dF9wc24gdG8gY291bnQgdGhlCisJCQkJICogZXhwZWN0ZWQgbnVtYmVyIG9mIHJlc3BvbnNlcy4KKwkJCQkgKi8KKwkJCQlpZiAobGVuID4gcG10dSkKKwkJCQkJcXAtPnNfbmV4dF9wc24gKz0gKGxlbiAtIDEpIC8gcG10dTsKKwkJCQl3cWUtPmxwc24gPSBxcC0+c19uZXh0X3BzbisrOworCQkJfQorCQkJc3MgPSBOVUxMOworCQkJbGVuID0gMDsKKwkJCWlmICgrK3FwLT5zX2N1ciA9PSBxcC0+c19zaXplKQorCQkJCXFwLT5zX2N1ciA9IDA7CisJCQlicmVhazsKKworCQljYXNlIElCX1dSX0FUT01JQ19DTVBfQU5EX1NXUDoKKwkJY2FzZSBJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERDoKKwkJCWlmICh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1ApCisJCQkJcXAtPnNfc3RhdGUgPSBPUChDT01QQVJFX1NXQVApOworCQkJZWxzZQorCQkJCXFwLT5zX3N0YXRlID0gT1AoRkVUQ0hfQUREKTsKKwkJCW9oZHItPnUuYXRvbWljX2V0aC52YWRkciA9IGNwdV90b19iZTY0KAorCQkJCXdxZS0+d3Iud3IuYXRvbWljLnJlbW90ZV9hZGRyKTsKKwkJCW9oZHItPnUuYXRvbWljX2V0aC5ya2V5ID0gY3B1X3RvX2JlMzIoCisJCQkJd3FlLT53ci53ci5hdG9taWMucmtleSk7CisJCQlvaGRyLT51LmF0b21pY19ldGguc3dhcF9kYXRhID0gY3B1X3RvX2JlNjQoCisJCQkJd3FlLT53ci53ci5hdG9taWMuc3dhcCk7CisJCQlvaGRyLT51LmF0b21pY19ldGguY29tcGFyZV9kYXRhID0gY3B1X3RvX2JlNjQoCisJCQkJd3FlLT53ci53ci5hdG9taWMuY29tcGFyZV9hZGQpOworCQkJaHdvcmRzICs9IHNpemVvZihzdHJ1Y3QgaWJfYXRvbWljX2V0aCkgLyA0OworCQkJaWYgKG5ld3JlcSkgeworCQkJCXFwLT5zX2xzbisrOworCQkJCXdxZS0+bHBzbiA9IHdxZS0+cHNuOworCQkJfQorCQkJaWYgKCsrcXAtPnNfY3VyID09IHFwLT5zX3NpemUpCisJCQkJcXAtPnNfY3VyID0gMDsKKwkJCXNzID0gTlVMTDsKKwkJCWxlbiA9IDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZ290byBkb25lOworCQl9CisJCWlmIChuZXdyZXEpIHsKKwkJCXFwLT5zX3RhaWwrKzsKKwkJCWlmIChxcC0+c190YWlsID49IHFwLT5zX3NpemUpCisJCQkJcXAtPnNfdGFpbCA9IDA7CisJCX0KKwkJYnRoMiB8PSBxcC0+c19wc24rKyAmIElQU19QU05fTUFTSzsKKwkJaWYgKChpbnQpKHFwLT5zX3BzbiAtIHFwLT5zX25leHRfcHNuKSA+IDApCisJCQlxcC0+c19uZXh0X3BzbiA9IHFwLT5zX3BzbjsKKwkJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZxcC0+dGltZXJ3YWl0KSkKKwkJCWxpc3RfYWRkX3RhaWwoJnFwLT50aW1lcndhaXQsCisJCQkJICAgICAgJmRldi0+cGVuZGluZ1tkZXYtPnBlbmRpbmdfaW5kZXhdKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKwkJYnJlYWs7CisKKwljYXNlIE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCk6CisJCS8qCisJCSAqIFRoaXMgY2FzZSBjYW4gb25seSBoYXBwZW4gaWYgYSBzZW5kIGlzIHJlc3RhcnRlZC4gIFNlZQorCQkgKiBpcGF0aF9yZXN0YXJ0X3JjKCkuCisJCSAqLworCQlpcGF0aF9pbml0X3Jlc3RhcnQocXAsIHdxZSk7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBPUChTRU5EX0ZJUlNUKToKKwkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX01JRERMRSk7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBPUChTRU5EX01JRERMRSk6CisJCWJ0aDIgPSBxcC0+c19wc24rKyAmIElQU19QU05fTUFTSzsKKwkJaWYgKChpbnQpKHFwLT5zX3BzbiAtIHFwLT5zX25leHRfcHNuKSA+IDApCisJCQlxcC0+c19uZXh0X3BzbiA9IHFwLT5zX3BzbjsKKwkJc3MgPSAmcXAtPnNfc2dlOworCQlsZW4gPSBxcC0+c19sZW47CisJCWlmIChsZW4gPiBwbXR1KSB7CisJCQkvKgorCQkJICogUmVxdWVzdCBhbiBBQ0sgZXZlcnkgMS8yIE1CIHRvIGF2b2lkIHJldHJhbnNtaXQKKwkJCSAqIHRpbWVvdXRzLgorCQkJICovCisJCQlpZiAoKCh3cWUtPmxlbmd0aCAtIGxlbikgJSAoNTEyICogMTAyNCkpID09IDApCisJCQkJYnRoMiB8PSAxIDw8IDMxOworCQkJbGVuID0gcG10dTsKKwkJCWJyZWFrOworCQl9CisJCWlmICh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9TRU5EKQorCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1QpOworCQllbHNlIHsKKwkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUX1dJVEhfSU1NRURJQVRFKTsKKwkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIHRoZSBCVEggKi8KKwkJCW9oZHItPnUuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkJaHdvcmRzICs9IDE7CisJCX0KKwkJaWYgKHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKQorCQkJYnRoMCB8PSAxIDw8IDIzOworCQlidGgyIHw9IDEgPDwgMzE7CS8qIFJlcXVlc3QgQUNLLiAqLworCQlxcC0+c19jdXIrKzsKKwkJaWYgKHFwLT5zX2N1ciA+PSBxcC0+c19zaXplKQorCQkJcXAtPnNfY3VyID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIE9QKFJETUFfUkVBRF9SRVNQT05TRV9MQVNUKToKKwkJLyoKKwkJICogVGhpcyBjYXNlIGNhbiBvbmx5IGhhcHBlbiBpZiBhIFJETUEgd3JpdGUgaXMgcmVzdGFydGVkLgorCQkgKiBTZWUgaXBhdGhfcmVzdGFydF9yYygpLgorCQkgKi8KKwkJaXBhdGhfaW5pdF9yZXN0YXJ0KHFwLCB3cWUpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoUkRNQV9XUklURV9GSVJTVCk6CisJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9XUklURV9NSURETEUpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoUkRNQV9XUklURV9NSURETEUpOgorCQlidGgyID0gcXAtPnNfcHNuKysgJiBJUFNfUFNOX01BU0s7CisJCWlmICgoaW50KShxcC0+c19wc24gLSBxcC0+c19uZXh0X3BzbikgPiAwKQorCQkJcXAtPnNfbmV4dF9wc24gPSBxcC0+c19wc247CisJCXNzID0gJnFwLT5zX3NnZTsKKwkJbGVuID0gcXAtPnNfbGVuOworCQlpZiAobGVuID4gcG10dSkgeworCQkJLyoKKwkJCSAqIFJlcXVlc3QgYW4gQUNLIGV2ZXJ5IDEvMiBNQiB0byBhdm9pZCByZXRyYW5zbWl0CisJCQkgKiB0aW1lb3V0cy4KKwkJCSAqLworCQkJaWYgKCgod3FlLT5sZW5ndGggLSBsZW4pICUgKDUxMiAqIDEwMjQpKSA9PSAwKQorCQkJCWJ0aDIgfD0gMSA8PCAzMTsKKwkJCWxlbiA9IHBtdHU7CisJCQlicmVhazsKKwkJfQorCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURSkKKwkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9XUklURV9MQVNUKTsKKwkJZWxzZSB7CisJCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfTEFTVF9XSVRIX0lNTUVESUFURSk7CisJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcyBhZnRlciB0aGUgQlRIICovCisJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCWh3b3JkcyArPSAxOworCQkJaWYgKHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKQorCQkJCWJ0aDAgfD0gMSA8PCAyMzsKKwkJfQorCQlidGgyIHw9IDEgPDwgMzE7CS8qIFJlcXVlc3QgQUNLLiAqLworCQlxcC0+c19jdXIrKzsKKwkJaWYgKHFwLT5zX2N1ciA+PSBxcC0+c19zaXplKQorCQkJcXAtPnNfY3VyID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIE9QKFJETUFfUkVBRF9SRVNQT05TRV9NSURETEUpOgorCQkvKgorCQkgKiBUaGlzIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIGEgUkRNQSByZWFkIGlzIHJlc3RhcnRlZC4KKwkJICogU2VlIGlwYXRoX3Jlc3RhcnRfcmMoKS4KKwkJICovCisJCWlwYXRoX2luaXRfcmVzdGFydChxcCwgd3FlKTsKKwkJbGVuID0gKChxcC0+c19wc24gLSB3cWUtPnBzbikgJiBJUFNfUFNOX01BU0spICogcG10dTsKKwkJb2hkci0+dS5yYy5yZXRoLnZhZGRyID0KKwkJCWNwdV90b19iZTY0KHdxZS0+d3Iud3IucmRtYS5yZW1vdGVfYWRkciArIGxlbik7CisJCW9oZHItPnUucmMucmV0aC5ya2V5ID0KKwkJCWNwdV90b19iZTMyKHdxZS0+d3Iud3IucmRtYS5ya2V5KTsKKwkJb2hkci0+dS5yYy5yZXRoLmxlbmd0aCA9IGNwdV90b19iZTMyKHFwLT5zX2xlbik7CisJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFUVVFU1QpOworCQlod29yZHMgKz0gc2l6ZW9mKG9oZHItPnUucmMucmV0aCkgLyA0OworCQlidGgyID0gcXAtPnNfcHNuKysgJiBJUFNfUFNOX01BU0s7CisJCWlmICgoaW50KShxcC0+c19wc24gLSBxcC0+c19uZXh0X3BzbikgPiAwKQorCQkJcXAtPnNfbmV4dF9wc24gPSBxcC0+c19wc247CisJCXNzID0gTlVMTDsKKwkJbGVuID0gMDsKKwkJcXAtPnNfY3VyKys7CisJCWlmIChxcC0+c19jdXIgPT0gcXAtPnNfc2l6ZSkKKwkJCXFwLT5zX2N1ciA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1JFQURfUkVRVUVTVCk6CisJY2FzZSBPUChDT01QQVJFX1NXQVApOgorCWNhc2UgT1AoRkVUQ0hfQUREKToKKwkJLyoKKwkJICogV2Ugc2hvdWxkbid0IHN0YXJ0IGFueXRoaW5nIG5ldyB1bnRpbCB0aGlzIHJlcXVlc3QgaXMKKwkJICogZmluaXNoZWQuICBUaGUgQUNLIHdpbGwgaGFuZGxlIHJlc2NoZWR1bGluZyB1cy4gIFhYWCBUaGUKKwkJICogbnVtYmVyIG9mIG91dHN0YW5kaW5nIG9uZXMgaXMgbmVnb3RpYXRlZCBhdCBjb25uZWN0aW9uCisJCSAqIHNldHVwIHRpbWUgKHNlZSBwZy4gMjU4LDI4OSk/ICBYWFggQWxzbywgaWYgd2Ugc3VwcG9ydAorCQkgKiBtdWx0aXBsZSBvdXRzdGFuZGluZyByZXF1ZXN0cywgd2UgbmVlZCB0byBjaGVjayB0aGUgV1FFCisJCSAqIElCX1NFTkRfRkVOQ0UgZmxhZyBhbmQgbm90IHNlbmQgYSBuZXcgcmVxdWVzdCBpZiBhIFJETUEKKwkJICogcmVhZCBvciBhdG9taWMgaXMgcGVuZGluZy4KKwkJICovCisJCWdvdG8gZG9uZTsKKwl9CisJcXAtPnNfbGVuIC09IGxlbjsKKwlxcC0+c19oZHJ3b3JkcyA9IGh3b3JkczsKKwlxcC0+c19jdXJfc2dlID0gc3M7CisJcXAtPnNfY3VyX3NpemUgPSBsZW47CisJKmJ0aDBwID0gYnRoMCB8IChxcC0+c19zdGF0ZSA8PCAyNCk7CisJKmJ0aDJwID0gYnRoMjsKKwlyZXR1cm4gMTsKKworZG9uZToKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwYXRoX21ha2VfcmNfZ3JoKHN0cnVjdCBpcGF0aF9xcCAqcXAsCisJCQkJICAgICBzdHJ1Y3QgaWJfZ2xvYmFsX3JvdXRlICpncmgsCisJCQkJICAgICB1MzIgbndvcmRzKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCisJLyogR1JIIGhlYWRlciBzaXplIGluIDMyLWJpdCB3b3Jkcy4gKi8KKwlxcC0+c19oZHJ3b3JkcyArPSAxMDsKKwlxcC0+c19oZHIudS5sLmdyaC52ZXJzaW9uX3RjbGFzc19mbG93ID0KKwkJY3B1X3RvX2JlMzIoKDYgPDwgMjgpIHwKKwkJCSAgICAoZ3JoLT50cmFmZmljX2NsYXNzIDw8IDIwKSB8CisJCQkgICAgZ3JoLT5mbG93X2xhYmVsKTsKKwlxcC0+c19oZHIudS5sLmdyaC5wYXlsZW4gPQorCQljcHVfdG9fYmUxNigoKHFwLT5zX2hkcndvcmRzIC0gMTIpICsgbndvcmRzICsKKwkJCSAgICAgU0laRV9PRl9DUkMpIDw8IDIpOworCS8qIG5leHRfaGRyIGlzIGRlZmluZWQgYnkgQzgtNyBpbiBjaC4gOC40LjEgKi8KKwlxcC0+c19oZHIudS5sLmdyaC5uZXh0X2hkciA9IDB4MUI7CisJcXAtPnNfaGRyLnUubC5ncmguaG9wX2xpbWl0ID0gZ3JoLT5ob3BfbGltaXQ7CisJLyogVGhlIFNHSUQgaXMgMzItYml0IGFsaWduZWQuICovCisJcXAtPnNfaGRyLnUubC5ncmguc2dpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCA9IGRldi0+Z2lkX3ByZWZpeDsKKwlxcC0+c19oZHIudS5sLmdyaC5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQgPQorCQlpcGF0aF9sYXllcl9nZXRfZ3VpZChkZXYtPmRkKTsKKwlxcC0+c19oZHIudS5sLmdyaC5kZ2lkID0gZ3JoLT5kZ2lkOworfQorCisvKioKKyAqIGlwYXRoX2RvX3JjX3NlbmQgLSBwZXJmb3JtIGEgc2VuZCBvbiBhbiBSQyBRUAorICogQGRhdGE6IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgUVAKKyAqCisgKiBQcm9jZXNzIGVudHJpZXMgaW4gdGhlIHNlbmQgd29yayBxdWV1ZSB1bnRpbCBjcmVkaXQgb3IgcXVldWUgaXMKKyAqIGV4aGF1c3RlZC4gIE9ubHkgYWxsb3cgb25lIENQVSB0byBzZW5kIGEgcGFja2V0IHBlciBRUCAodGFza2xldCkuCisgKiBPdGhlcndpc2UsIGFmdGVyIHdlIGRyb3AgdGhlIFFQIHNfbG9jaywgdHdvIHRocmVhZHMgY291bGQgc2VuZAorICogcGFja2V0cyBvdXQgb2Ygb3JkZXIuCisgKi8KK3ZvaWQgaXBhdGhfZG9fcmNfc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGlwYXRoX3FwICpxcCA9IChzdHJ1Y3QgaXBhdGhfcXAgKilkYXRhOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGxyaDA7CisJdTMyIG53b3JkczsKKwl1MzIgZXh0cmFfYnl0ZXM7CisJdTMyIGJ0aDA7CisJdTMyIGJ0aDI7CisJdTMyIHBtdHUgPSBpYl9tdHVfZW51bV90b19pbnQocXAtPnBhdGhfbXR1KTsKKwlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKSkKKwkJZ290byBiYWlsOworCisJaWYgKHVubGlrZWx5KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkID09CisJCSAgICAgaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKSkpIHsKKwkJc3RydWN0IGliX3djIHdjOworCisJCS8qCisJCSAqIFBhc3MgaW4gYW4gdW5pbml0aWFsaXplZCBpYl93YyB0byBiZSBjb25zaXN0ZW50IHdpdGgKKwkJICogb3RoZXIgcGxhY2VzIHdoZXJlIGlwYXRoX3J1Y19sb29wYmFjaygpIGlzIGNhbGxlZC4KKwkJICovCisJCWlwYXRoX3J1Y19sb29wYmFjayhxcCwgJndjKTsKKwkJZ290byBjbGVhcjsKKwl9CisKKwlvaGRyID0gJnFwLT5zX2hkci51Lm90aDsKKwlpZiAocXAtPnJlbW90ZV9haF9hdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKQorCQlvaGRyID0gJnFwLT5zX2hkci51Lmwub3RoOworCithZ2FpbjoKKwkvKiBDaGVjayBmb3IgYSBjb25zdHJ1Y3RlZCBwYWNrZXQgdG8gYmUgc2VudC4gKi8KKwlpZiAocXAtPnNfaGRyd29yZHMgIT0gMCkgeworCQkvKgorCQkgKiBJZiBubyBQSU8gYnVmcyBhcmUgYXZhaWxhYmxlLCByZXR1cm4uICBBbiBpbnRlcnJ1cHQgd2lsbAorCQkgKiBjYWxsIGlwYXRoX2liX3Bpb2J1ZmF2YWlsKCkgd2hlbiBvbmUgaXMgYXZhaWxhYmxlLgorCQkgKi8KKwkJX1ZFUkJTX0lORk8oImggJXUgJXBcbiIsIHFwLT5zX2hkcndvcmRzLCAmcXAtPnNfaGRyKTsKKwkJX1ZFUkJTX0lORk8oImQgJXUgJXAgJXUgJXAgJXUgJXUgJXUgJXVcbiIsIHFwLT5zX2N1cl9zaXplLAorCQkJICAgIHFwLT5zX2N1cl9zZ2UtPnNnX2xpc3QsCisJCQkgICAgcXAtPnNfY3VyX3NnZS0+bnVtX3NnZSwKKwkJCSAgICBxcC0+c19jdXJfc2dlLT5zZ2UudmFkZHIsCisJCQkgICAgcXAtPnNfY3VyX3NnZS0+c2dlLnNnZV9sZW5ndGgsCisJCQkgICAgcXAtPnNfY3VyX3NnZS0+c2dlLmxlbmd0aCwKKwkJCSAgICBxcC0+c19jdXJfc2dlLT5zZ2UubSwKKwkJCSAgICBxcC0+c19jdXJfc2dlLT5zZ2Uubik7CisJCWlmIChpcGF0aF92ZXJic19zZW5kKGRldi0+ZGQsIHFwLT5zX2hkcndvcmRzLAorCQkJCSAgICAgKHUzMiAqKSAmcXAtPnNfaGRyLCBxcC0+c19jdXJfc2l6ZSwKKwkJCQkgICAgIHFwLT5zX2N1cl9zZ2UpKSB7CisJCQlpcGF0aF9ub19idWZzX2F2YWlsYWJsZShxcCwgZGV2KTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlkZXYtPm5fdW5pY2FzdF94bWl0Kys7CisJCS8qIFJlY29yZCB0aGF0IHdlIHNlbnQgdGhlIHBhY2tldCBhbmQgc19oZHIgaXMgZW1wdHkuICovCisJCXFwLT5zX2hkcndvcmRzID0gMDsKKwl9CisKKwkvKgorCSAqIFRoZSBsb2NrIGlzIG5lZWRlZCB0byBzeW5jaHJvbml6ZSBiZXR3ZWVuIHNldHRpbmcKKwkgKiBxcC0+c19hY2tfc3RhdGUsIHJlc2VuZCB0aW1lciwgYW5kIHBvc3Rfc2VuZCgpLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CisKKwkvKiBTZW5kaW5nIHJlc3BvbnNlcyBoYXMgaGlnaGVyIHByaW9yaXR5IG92ZXIgc2VuZGluZyByZXF1ZXN0cy4gKi8KKwlpZiAocXAtPnNfYWNrX3N0YXRlICE9IE9QKEFDS05PV0xFREdFKSAmJgorCSAgICAoYnRoMCA9IGlwYXRoX21ha2VfcmNfYWNrKHFwLCBvaGRyLCBwbXR1KSkgIT0gMCkKKwkJYnRoMiA9IHFwLT5zX2Fja19wc24rKyAmIElQU19QU05fTUFTSzsKKwllbHNlIGlmICghaXBhdGhfbWFrZV9yY19yZXEocXAsIG9oZHIsIHBtdHUsICZidGgwLCAmYnRoMikpCisJCWdvdG8gZG9uZTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKworCS8qIENvbnN0cnVjdCB0aGUgaGVhZGVyLiAqLworCWV4dHJhX2J5dGVzID0gKDQgLSBxcC0+c19jdXJfc2l6ZSkgJiAzOworCW53b3JkcyA9IChxcC0+c19jdXJfc2l6ZSArIGV4dHJhX2J5dGVzKSA+PiAyOworCWxyaDAgPSBJUFNfTFJIX0JUSDsKKwlpZiAodW5saWtlbHkocXAtPnJlbW90ZV9haF9hdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKSkgeworCQlpcGF0aF9tYWtlX3JjX2dyaChxcCwgJnFwLT5yZW1vdGVfYWhfYXR0ci5ncmgsIG53b3Jkcyk7CisJCWxyaDAgPSBJUFNfTFJIX0dSSDsKKwl9CisJbHJoMCB8PSBxcC0+cmVtb3RlX2FoX2F0dHIuc2wgPDwgNDsKKwlxcC0+c19oZHIubHJoWzBdID0gY3B1X3RvX2JlMTYobHJoMCk7CisJcXAtPnNfaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkKTsKKwlxcC0+c19oZHIubHJoWzJdID0gY3B1X3RvX2JlMTYocXAtPnNfaGRyd29yZHMgKyBud29yZHMgKworCQkJCSAgICAgICBTSVpFX09GX0NSQyk7CisJcXAtPnNfaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpOworCWJ0aDAgfD0gaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoZGV2LT5kZCwgcXAtPnNfcGtleV9pbmRleCk7CisJYnRoMCB8PSBleHRyYV9ieXRlcyA8PCAyMDsKKwlvaGRyLT5idGhbMF0gPSBjcHVfdG9fYmUzMihidGgwKTsKKwlvaGRyLT5idGhbMV0gPSBjcHVfdG9fYmUzMihxcC0+cmVtb3RlX3Fwbik7CisJb2hkci0+YnRoWzJdID0gY3B1X3RvX2JlMzIoYnRoMik7CisKKwkvKiBDaGVjayBmb3IgbW9yZSB3b3JrIHRvIGRvLiAqLworCWdvdG8gYWdhaW47CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworY2xlYXI6CisJY2xlYXJfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKTsKK2JhaWw6CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzZW5kX3JjX2FjayhzdHJ1Y3QgaXBhdGhfcXAgKnFwKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCXUxNiBscmgwOworCXUzMiBidGgwOworCXN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyOworCisJLyogQ29uc3RydWN0IHRoZSBoZWFkZXIuICovCisJb2hkciA9ICZxcC0+c19oZHIudS5vdGg7CisJbHJoMCA9IElQU19MUkhfQlRIOworCS8qIGhlYWRlciBzaXplIGluIDMyLWJpdCB3b3JkcyBMUkgrQlRIK0FFVEggPSAoOCsxMis0KS80LiAqLworCXFwLT5zX2hkcndvcmRzID0gNjsKKwlpZiAodW5saWtlbHkocXAtPnJlbW90ZV9haF9hdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKSkgeworCQlpcGF0aF9tYWtlX3JjX2dyaChxcCwgJnFwLT5yZW1vdGVfYWhfYXR0ci5ncmgsIDApOworCQlvaGRyID0gJnFwLT5zX2hkci51Lmwub3RoOworCQlscmgwID0gSVBTX0xSSF9HUkg7CisJfQorCWJ0aDAgPSBpcGF0aF9sYXllcl9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KTsKKwlvaGRyLT51LmFldGggPSBpcGF0aF9jb21wdXRlX2FldGgocXApOworCWlmIChxcC0+c19hY2tfc3RhdGUgPj0gT1AoQ09NUEFSRV9TV0FQKSkgeworCQlidGgwIHw9IElCX09QQ09ERV9BVE9NSUNfQUNLTk9XTEVER0UgPDwgMjQ7CisJCW9oZHItPnUuYXQuYXRvbWljX2Fja19ldGggPSBjcHVfdG9fYmU2NChxcC0+c19hY2tfYXRvbWljKTsKKwkJcXAtPnNfaGRyd29yZHMgKz0gc2l6ZW9mKG9oZHItPnUuYXQuYXRvbWljX2Fja19ldGgpIC8gNDsKKwl9CisJZWxzZQorCQlidGgwIHw9IE9QKEFDS05PV0xFREdFKSA8PCAyNDsKKwlscmgwIHw9IHFwLT5yZW1vdGVfYWhfYXR0ci5zbCA8PCA0OworCXFwLT5zX2hkci5scmhbMF0gPSBjcHVfdG9fYmUxNihscmgwKTsKKwlxcC0+c19oZHIubHJoWzFdID0gY3B1X3RvX2JlMTYocXAtPnJlbW90ZV9haF9hdHRyLmRsaWQpOworCXFwLT5zX2hkci5scmhbMl0gPSBjcHVfdG9fYmUxNihxcC0+c19oZHJ3b3JkcyArIFNJWkVfT0ZfQ1JDKTsKKwlxcC0+c19oZHIubHJoWzNdID0gY3B1X3RvX2JlMTYoaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKSk7CisJb2hkci0+YnRoWzBdID0gY3B1X3RvX2JlMzIoYnRoMCk7CisJb2hkci0+YnRoWzFdID0gY3B1X3RvX2JlMzIocXAtPnJlbW90ZV9xcG4pOworCW9oZHItPmJ0aFsyXSA9IGNwdV90b19iZTMyKHFwLT5zX2Fja19wc24gJiBJUFNfUFNOX01BU0spOworCisJLyoKKwkgKiBJZiB3ZSBjYW4gc2VuZCB0aGUgQUNLLCBjbGVhciB0aGUgQUNLIHN0YXRlLgorCSAqLworCWlmIChpcGF0aF92ZXJic19zZW5kKGRldi0+ZGQsIHFwLT5zX2hkcndvcmRzLCAodTMyICopICZxcC0+c19oZHIsCisJCQkgICAgIDAsIE5VTEwpID09IDApIHsKKwkJcXAtPnNfYWNrX3N0YXRlID0gT1AoQUNLTk9XTEVER0UpOworCQlkZXYtPm5fcmNfcWFja3MrKzsKKwkJZGV2LT5uX3VuaWNhc3RfeG1pdCsrOworCX0KK30KKworLyoqCisgKiBpcGF0aF9yZXN0YXJ0X3JjIC0gYmFjayB1cCByZXF1ZXN0ZXIgdG8gcmVzZW5kIHRoZSBsYXN0IHVuLUFDS2VkIHJlcXVlc3QKKyAqIEBxcDogdGhlIFFQIHRvIHJlc3RhcnQKKyAqIEBwc246IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoZSByZXF1ZXN0CisgKiBAd2M6IHRoZSB3b3JrIGNvbXBsZXRpb24gcmVxdWVzdAorICoKKyAqIFRoZSBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQuCisgKi8KK3ZvaWQgaXBhdGhfcmVzdGFydF9yYyhzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgcHNuLCBzdHJ1Y3QgaWJfd2MgKndjKQoreworCXN0cnVjdCBpcGF0aF9zd3FlICp3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2OworCXUzMiBuOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gcmVxdWVzdHMgcGVuZGluZywgd2UgYXJlIGRvbmUuCisJICovCisJaWYgKGlwYXRoX2NtcDI0KHBzbiwgcXAtPnNfbmV4dF9wc24pID49IDAgfHwKKwkgICAgcXAtPnNfbGFzdCA9PSBxcC0+c190YWlsKQorCQlnb3RvIGRvbmU7CisKKwlpZiAocXAtPnNfcmV0cnkgPT0gMCkgeworCQl3Yy0+d3JfaWQgPSB3cWUtPndyLndyX2lkOworCQl3Yy0+c3RhdHVzID0gSUJfV0NfUkVUUllfRVhDX0VSUjsKKwkJd2MtPm9wY29kZSA9IGliX2lwYXRoX3djX29wY29kZVt3cWUtPndyLm9wY29kZV07CisJCXdjLT52ZW5kb3JfZXJyID0gMDsKKwkJd2MtPmJ5dGVfbGVuID0gMDsKKwkJd2MtPnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwkJd2MtPnNyY19xcCA9IHFwLT5yZW1vdGVfcXBuOworCQl3Yy0+cGtleV9pbmRleCA9IDA7CisJCXdjLT5zbGlkID0gcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQ7CisJCXdjLT5zbCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5zbDsKKwkJd2MtPmRsaWRfcGF0aF9iaXRzID0gMDsKKwkJd2MtPnBvcnRfbnVtID0gMDsKKwkJaXBhdGhfc3FlcnJvcl9xcChxcCwgd2MpOworCQlnb3RvIGJhaWw7CisJfQorCXFwLT5zX3JldHJ5LS07CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgUVAgZnJvbSB0aGUgdGltZW91dCBxdWV1ZS4KKwkgKiBOb3RlOiBpdCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCBieSBpcGF0aF9pYl90aW1lcigpLgorCSAqLworCWRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwlzcGluX2xvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnFwLT50aW1lcndhaXQpKQorCQlsaXN0X2RlbF9pbml0KCZxcC0+dGltZXJ3YWl0KTsKKwlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCisJaWYgKHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1JETUFfUkVBRCkKKwkJZGV2LT5uX3JjX3Jlc2VuZHMrKzsKKwllbHNlCisJCWRldi0+bl9yY19yZXNlbmRzICs9IChpbnQpcXAtPnNfcHNuIC0gKGludClwc247CisKKwkvKgorCSAqIElmIHdlIGFyZSBzdGFydGluZyB0aGUgcmVxdWVzdCBmcm9tIHRoZSBiZWdpbm5pbmcsIGxldCB0aGUgbm9ybWFsCisJICogc2VuZCBjb2RlIGhhbmRsZSBpbml0aWFsaXphdGlvbi4KKwkgKi8KKwlxcC0+c19jdXIgPSBxcC0+c19sYXN0OworCWlmIChpcGF0aF9jbXAyNChwc24sIHdxZS0+cHNuKSA8PSAwKSB7CisJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwkJcXAtPnNfcHNuID0gd3FlLT5wc247CisJfSBlbHNlIHsKKwkJbiA9IHFwLT5zX2N1cjsKKwkJZm9yICg7OykgeworCQkJaWYgKCsrbiA9PSBxcC0+c19zaXplKQorCQkJCW4gPSAwOworCQkJaWYgKG4gPT0gcXAtPnNfdGFpbCkgeworCQkJCWlmIChpcGF0aF9jbXAyNChwc24sIHFwLT5zX25leHRfcHNuKSA+PSAwKSB7CisJCQkJCXFwLT5zX2N1ciA9IG47CisJCQkJCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgbik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBuKTsKKwkJCWlmIChpcGF0aF9jbXAyNChwc24sIHdxZS0+cHNuKSA8IDApCisJCQkJYnJlYWs7CisJCQlxcC0+c19jdXIgPSBuOworCQl9CisJCXFwLT5zX3BzbiA9IHBzbjsKKworCQkvKgorCQkgKiBSZXNldCB0aGUgc3RhdGUgdG8gcmVzdGFydCBpbiB0aGUgbWlkZGxlIG9mIGEgcmVxdWVzdC4KKwkJICogRG9uJ3QgY2hhbmdlIHRoZSBzX3NnZSwgc19jdXJfc2dlLCBvciBzX2N1cl9zaXplLgorCQkgKiBTZWUgaXBhdGhfZG9fcmNfc2VuZCgpLgorCQkgKi8KKwkJc3dpdGNoICh3cWUtPndyLm9wY29kZSkgeworCQljYXNlIElCX1dSX1NFTkQ6CisJCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lNTToKKwkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0ZJUlNUKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NOgorCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk7CisJCQlicmVhazsKKworCQljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJCXFwLT5zX3N0YXRlID0KKwkJCQlPUChSRE1BX1JFQURfUkVTUE9OU0VfTUlERExFKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogVGhpcyBjYXNlIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgaXRzIG9ubHkKKwkJCSAqIG9uZSBQU04gcGVyIHJlcS4KKwkJCSAqLworCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1QpOworCQl9CisJfQorCitkb25lOgorCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnFwLT5zX3Rhc2spOworCitiYWlsOgorCXJldHVybjsKK30KKworLyoqCisgKiByZXNldF9wc24gLSByZXNldCB0aGUgUVAgc3RhdGUgdG8gc2VuZCBzdGFydGluZyBmcm9tIFBTTgorICogQHFwOiB0aGUgUVAKKyAqIEBwc246IHRoZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIHRvIHJlc3RhcnQgYXQKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX3JjX3JjdigpIHRvIHByb2Nlc3MgYW4gaW5jb21pbmcgUkMgQUNLCisgKiBmb3IgdGhlIGdpdmVuIFFQLgorICogQ2FsbGVkIGF0IGludGVycnVwdCBsZXZlbCB3aXRoIHRoZSBRUCBzX2xvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQgcmVzZXRfcHNuKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHUzMiBwc24pCit7CisJc3RydWN0IGlwYXRoX3N3cWUgKndxZTsKKwl1MzIgbjsKKworCW4gPSBxcC0+c19jdXI7CisJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBuKTsKKwlmb3IgKDs7KSB7CisJCWlmICgrK24gPT0gcXAtPnNfc2l6ZSkKKwkJCW4gPSAwOworCQlpZiAobiA9PSBxcC0+c190YWlsKSB7CisJCQlpZiAoaXBhdGhfY21wMjQocHNuLCBxcC0+c19uZXh0X3BzbikgPj0gMCkgeworCQkJCXFwLT5zX2N1ciA9IG47CisJCQkJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBuKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgbik7CisJCWlmIChpcGF0aF9jbXAyNChwc24sIHdxZS0+cHNuKSA8IDApCisJCQlicmVhazsKKwkJcXAtPnNfY3VyID0gbjsKKwl9CisJcXAtPnNfcHNuID0gcHNuOworCisJLyoKKwkgKiBTZXQgdGhlIHN0YXRlIHRvIHJlc3RhcnQgaW4gdGhlIG1pZGRsZSBvZiBhCisJICogcmVxdWVzdC4gIERvbid0IGNoYW5nZSB0aGUgc19zZ2UsIHNfY3VyX3NnZSwgb3IKKwkgKiBzX2N1cl9zaXplLiAgU2VlIGlwYXRoX2RvX3JjX3NlbmQoKS4KKwkgKi8KKwlzd2l0Y2ggKHdxZS0+d3Iub3Bjb2RlKSB7CisJY2FzZSBJQl9XUl9TRU5EOgorCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lNTToKKwkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfRklSU1QpOworCQlicmVhazsKKworCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwljYXNlIElCX1dSX1JETUFfV1JJVEVfV0lUSF9JTU06CisJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0xBU1QpOworCQlicmVhazsKKworCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9NSURETEUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qCisJCSAqIFRoaXMgY2FzZSBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIGl0cyBvbmx5CisJCSAqIG9uZSBQU04gcGVyIHJlcS4KKwkJICovCisJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwl9Cit9CisKKy8qKgorICogZG9fcmNfYWNrIC0gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyBBQ0sKKyAqIEBxcDogdGhlIFFQIHRoZSBBQ0sgY2FtZSBpbiBvbgorICogQHBzbjogdGhlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIEFDSworICogQG9wY29kZTogdGhlIG9wY29kZSBvZiB0aGUgcmVxdWVzdCB0aGF0IHJlc3VsdGVkIGluIHRoZSBBQ0sKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX3JjX3JjdigpIHRvIHByb2Nlc3MgYW4gaW5jb21pbmcgUkMgQUNLCisgKiBmb3IgdGhlIGdpdmVuIFFQLgorICogQ2FsbGVkIGF0IGludGVycnVwdCBsZXZlbCB3aXRoIHRoZSBRUCBzX2xvY2sgaGVsZC4KKyAqIFJldHVybnMgMSBpZiBPSywgMCBpZiBjdXJyZW50IG9wZXJhdGlvbiBzaG91bGQgYmUgYWJvcnRlZCAoTkFLKS4KKyAqLworc3RhdGljIGludCBkb19yY19hY2soc3RydWN0IGlwYXRoX3FwICpxcCwgdTMyIGFldGgsIHUzMiBwc24sIGludCBvcGNvZGUpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJc3RydWN0IGliX3djIHdjOworCXN0cnVjdCBpcGF0aF9zd3FlICp3cWU7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgUVAgZnJvbSB0aGUgdGltZW91dCBxdWV1ZSAob3IgUk5SIHRpbWVvdXQgcXVldWUpLgorCSAqIElmIGlwYXRoX2liX3RpbWVyKCkgaGFzIGFscmVhZHkgcmVtb3ZlZCBpdCwKKwkgKiBpdCdzIE9LIHNpbmNlIHdlIGhvbGQgdGhlIFFQIHNfbG9jayBhbmQgaXBhdGhfcmVzdGFydF9yYygpCisJICoganVzdCB3b24ndCBmaW5kIGFueXRoaW5nIHRvIHJlc3RhcnQgaWYgd2UgQUNLIGV2ZXJ5dGhpbmcuCisJICovCisJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZxcC0+dGltZXJ3YWl0KSkKKwkJbGlzdF9kZWxfaW5pdCgmcXAtPnRpbWVyd2FpdCk7CisJc3Bpbl91bmxvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKworCS8qCisJICogTm90ZSB0aGF0IE5BS3MgaW1wbGljaXRseSBBQ0sgb3V0c3RhbmRpbmcgU0VORCBhbmQgUkRNQSB3cml0ZQorCSAqIHJlcXVlc3RzIGFuZCBpbXBsaWNpdGx5IE5BSyBSRE1BIHJlYWQgYW5kIGF0b21pYyByZXF1ZXN0cyBpc3N1ZWQKKwkgKiBiZWZvcmUgdGhlIE5BSydlZCByZXF1ZXN0LiAgVGhlIE1TTiB3b24ndCBpbmNsdWRlIHRoZSBOQUsnZWQKKwkgKiByZXF1ZXN0IGJ1dCB3aWxsIGluY2x1ZGUgYW4gQUNLJ2VkIHJlcXVlc3QocykuCisJICovCisJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19sYXN0KTsKKworCS8qIE5vdGhpbmcgaXMgcGVuZGluZyB0byBBQ0svTkFLLiAqLworCWlmIChxcC0+c19sYXN0ID09IHFwLT5zX3RhaWwpCisJCWdvdG8gYmFpbDsKKworCS8qCisJICogVGhlIE1TTiBtaWdodCBiZSBmb3IgYSBsYXRlciBXUUUgdGhhbiB0aGUgUFNOIGluZGljYXRlcyBzbworCSAqIG9ubHkgY29tcGxldGUgV1FFcyB0aGF0IHRoZSBQU04gZmluaXNoZXMuCisJICovCisJd2hpbGUgKGlwYXRoX2NtcDI0KHBzbiwgd3FlLT5scHNuKSA+PSAwKSB7CisJCS8qIElmIHdlIGFyZSBBQ0tpbmcgYSBXUUUsIHRoZSBNU04gc2hvdWxkIGJlID49IHRoZSBTU04uICovCisJCWlmIChpcGF0aF9jbXAyNChhZXRoLCB3cWUtPnNzbikgPCAwKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIElmIHRoaXMgcmVxdWVzdCBpcyBhIFJETUEgcmVhZCBvciBhdG9taWMsIGFuZCB0aGUgQUNLIGlzCisJCSAqIGZvciBhIGxhdGVyIG9wZXJhdGlvbiwgdGhpcyBBQ0sgTkFLcyB0aGUgUkRNQSByZWFkIG9yCisJCSAqIGF0b21pYy4gIEluIG90aGVyIHdvcmRzLCBvbmx5IGEgUkRNQV9SRUFEX0xBU1Qgb3IgT05MWQorCQkgKiBjYW4gQUNLIGEgUkRNQSByZWFkIGFuZCBsaWtld2lzZSBmb3IgYXRvbWljIG9wcy4gIE5vdGUKKwkJICogdGhhdCB0aGUgTkFLIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIHJlbGF4ZWQgb3JkZXJpbmcgaXMKKwkJICogdXNlZCBhbmQgcmVxdWVzdHMgYXJlIHNlbnQgYWZ0ZXIgYW4gUkRNQSByZWFkIG9yIGF0b21pYworCQkgKiBpcyBzZW50IGJ1dCBiZWZvcmUgdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgorCQkgKi8KKwkJaWYgKCh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1JFQUQgJiYKKwkJICAgICBvcGNvZGUgIT0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0xBU1QpKSB8fAorCQkgICAgKCh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1AgfHwKKwkJICAgICAgd3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BREQpICYmCisJCSAgICAgKG9wY29kZSAhPSBPUChBVE9NSUNfQUNLTk9XTEVER0UpIHx8CisJCSAgICAgIGlwYXRoX2NtcDI0KHdxZS0+cHNuLCBwc24pICE9IDApKSkgeworCQkJLyoKKwkJCSAqIFRoZSBsYXN0IHZhbGlkIFBTTiBzZWVuIGlzIHRoZSBwcmV2aW91cworCQkJICogcmVxdWVzdCdzLgorCQkJICovCisJCQlxcC0+c19sYXN0X3BzbiA9IHdxZS0+cHNuIC0gMTsKKwkJCS8qIFJldHJ5IHRoaXMgcmVxdWVzdC4gKi8KKwkJCWlwYXRoX3Jlc3RhcnRfcmMocXAsIHdxZS0+cHNuLCAmd2MpOworCQkJLyoKKwkJCSAqIE5vIG5lZWQgdG8gcHJvY2VzcyB0aGUgQUNLL05BSyBzaW5jZSB3ZSBhcmUKKwkJCSAqIHJlc3RhcnRpbmcgYW4gZWFybGllciByZXF1ZXN0LgorCQkJICovCisJCQlnb3RvIGJhaWw7CisJCX0KKwkJLyogUG9zdCBhIHNlbmQgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSBpZiByZXF1ZXN0ZWQuICovCisJCWlmICghdGVzdF9iaXQoSVBBVEhfU19TSUdOQUxfUkVRX1dSLCAmcXAtPnNfZmxhZ3MpIHx8CisJCSAgICAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TSUdOQUxFRCkpIHsKKwkJCXdjLndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJCXdjLnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CisJCQl3Yy5vcGNvZGUgPSBpYl9pcGF0aF93Y19vcGNvZGVbd3FlLT53ci5vcGNvZGVdOworCQkJd2MudmVuZG9yX2VyciA9IDA7CisJCQl3Yy5ieXRlX2xlbiA9IHdxZS0+bGVuZ3RoOworCQkJd2MucXBfbnVtID0gcXAtPmlicXAucXBfbnVtOworCQkJd2Muc3JjX3FwID0gcXAtPnJlbW90ZV9xcG47CisJCQl3Yy5wa2V5X2luZGV4ID0gMDsKKwkJCXdjLnNsaWQgPSBxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZDsKKwkJCXdjLnNsID0gcXAtPnJlbW90ZV9haF9hdHRyLnNsOworCQkJd2MuZGxpZF9wYXRoX2JpdHMgPSAwOworCQkJd2MucG9ydF9udW0gPSAwOworCQkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCAmd2MsIDApOworCQl9CisJCXFwLT5zX3JldHJ5ID0gcXAtPnNfcmV0cnlfY250OworCQkvKgorCQkgKiBJZiB3ZSBhcmUgY29tcGxldGluZyBhIHJlcXVlc3Qgd2hpY2ggaXMgaW4gdGhlIHByb2Nlc3Mgb2YKKwkJICogYmVpbmcgcmVzZW50LCB3ZSBjYW4gc3RvcCByZXNlbmRpbmcgaXQgc2luY2Ugd2Uga25vdyB0aGUKKwkJICogcmVzcG9uZGVyIGhhcyBhbHJlYWR5IHNlZW4gaXQuCisJCSAqLworCQlpZiAocXAtPnNfbGFzdCA9PSBxcC0+c19jdXIpIHsKKwkJCWlmICgrK3FwLT5zX2N1ciA+PSBxcC0+c19zaXplKQorCQkJCXFwLT5zX2N1ciA9IDA7CisJCQl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2N1cik7CisJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7CisJCQlxcC0+c19wc24gPSB3cWUtPnBzbjsKKwkJfQorCQlpZiAoKytxcC0+c19sYXN0ID49IHFwLT5zX3NpemUpCisJCQlxcC0+c19sYXN0ID0gMDsKKwkJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19sYXN0KTsKKwkJaWYgKHFwLT5zX2xhc3QgPT0gcXAtPnNfdGFpbCkKKwkJCWJyZWFrOworCX0KKworCXN3aXRjaCAoYWV0aCA+PiAyOSkgeworCWNhc2UgMDoJCS8qIEFDSyAqLworCQlkZXYtPm5fcmNfYWNrcysrOworCQkvKiBJZiB0aGlzIGlzIGEgcGFydGlhbCBBQ0ssIHJlc2V0IHRoZSByZXRyYW5zbWl0IHRpbWVyLiAqLworCQlpZiAocXAtPnNfbGFzdCAhPSBxcC0+c190YWlsKSB7CisJCQlzcGluX2xvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnFwLT50aW1lcndhaXQsCisJCQkJICAgICAgJmRldi0+cGVuZGluZ1tkZXYtPnBlbmRpbmdfaW5kZXhdKTsKKwkJCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJCX0KKwkJaXBhdGhfZ2V0X2NyZWRpdChxcCwgYWV0aCk7CisJCXFwLT5zX3Jucl9yZXRyeSA9IHFwLT5zX3Jucl9yZXRyeV9jbnQ7CisJCXFwLT5zX3JldHJ5ID0gcXAtPnNfcmV0cnlfY250OworCQlxcC0+c19sYXN0X3BzbiA9IHBzbjsKKwkJcmV0ID0gMTsKKwkJZ290byBiYWlsOworCisJY2FzZSAxOgkJLyogUk5SIE5BSyAqLworCQlkZXYtPm5fcm5yX25ha3MrKzsKKwkJaWYgKHFwLT5zX3Jucl9yZXRyeSA9PSAwKSB7CisJCQlpZiAocXAtPnNfbGFzdCA9PSBxcC0+c190YWlsKQorCQkJCWdvdG8gYmFpbDsKKworCQkJd2Muc3RhdHVzID0gSUJfV0NfUk5SX1JFVFJZX0VYQ19FUlI7CisJCQlnb3RvIGNsYXNzX2I7CisJCX0KKwkJaWYgKHFwLT5zX3Jucl9yZXRyeV9jbnQgPCA3KQorCQkJcXAtPnNfcm5yX3JldHJ5LS07CisJCWlmIChxcC0+c19sYXN0ID09IHFwLT5zX3RhaWwpCisJCQlnb3RvIGJhaWw7CisKKwkJLyogVGhlIGxhc3QgdmFsaWQgUFNOIHNlZW4gaXMgdGhlIHByZXZpb3VzIHJlcXVlc3Qncy4gKi8KKwkJcXAtPnNfbGFzdF9wc24gPSB3cWUtPnBzbiAtIDE7CisKKwkJZGV2LT5uX3JjX3Jlc2VuZHMgKz0gKGludClxcC0+c19wc24gLSAoaW50KXBzbjsKKworCQkvKgorCQkgKiBJZiB3ZSBhcmUgc3RhcnRpbmcgdGhlIHJlcXVlc3QgZnJvbSB0aGUgYmVnaW5uaW5nLCBsZXQKKwkJICogdGhlIG5vcm1hbCBzZW5kIGNvZGUgaGFuZGxlIGluaXRpYWxpemF0aW9uLgorCQkgKi8KKwkJcXAtPnNfY3VyID0gcXAtPnNfbGFzdDsKKwkJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19jdXIpOworCQlpZiAoaXBhdGhfY21wMjQocHNuLCB3cWUtPnBzbikgPD0gMCkgeworCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1QpOworCQkJcXAtPnNfcHNuID0gd3FlLT5wc247CisJCX0gZWxzZQorCQkJcmVzZXRfcHNuKHFwLCBwc24pOworCisJCXFwLT5zX3Jucl90aW1lb3V0ID0KKwkJCWliX2lwYXRoX3Jucl90YWJsZVsoYWV0aCA+PiBJUFNfQUVUSF9DUkVESVRfU0hJRlQpICYKKwkJCQkJICAgSVBTX0FFVEhfQ1JFRElUX01BU0tdOworCQlpcGF0aF9pbnNlcnRfcm5yX3F1ZXVlKHFwKTsKKwkJZ290byBiYWlsOworCisJY2FzZSAzOgkJLyogTkFLICovCisJCS8qIFRoZSBsYXN0IHZhbGlkIFBTTiBzZWVuIGlzIHRoZSBwcmV2aW91cyByZXF1ZXN0J3MuICovCisJCWlmIChxcC0+c19sYXN0ICE9IHFwLT5zX3RhaWwpCisJCQlxcC0+c19sYXN0X3BzbiA9IHdxZS0+cHNuIC0gMTsKKwkJc3dpdGNoICgoYWV0aCA+PiBJUFNfQUVUSF9DUkVESVRfU0hJRlQpICYKKwkJCUlQU19BRVRIX0NSRURJVF9NQVNLKSB7CisJCWNhc2UgMDoJLyogUFNOIHNlcXVlbmNlIGVycm9yICovCisJCQlkZXYtPm5fc2VxX25ha3MrKzsKKwkJCS8qCisJCQkgKiBCYWNrIHVwIHRvIHRoZSByZXNwb25kZXIncyBleHBlY3RlZCBQU04uICBYWFgKKwkJCSAqIE5vdGUgdGhhdCB3ZSBtaWdodCBnZXQgYSBOQUsgaW4gdGhlIG1pZGRsZSBvZiBhbgorCQkJICogUkRNQSBSRUFEIHJlc3BvbnNlIHdoaWNoIHRlcm1pbmF0ZXMgdGhlIFJETUEKKwkJCSAqIFJFQUQuCisJCQkgKi8KKwkJCWlmIChxcC0+c19sYXN0ID09IHFwLT5zX3RhaWwpCisJCQkJYnJlYWs7CisKKwkJCWlmIChpcGF0aF9jbXAyNChwc24sIHdxZS0+cHNuKSA8IDApCisJCQkJYnJlYWs7CisKKwkJCS8qIFJldHJ5IHRoZSByZXF1ZXN0LiAqLworCQkJaXBhdGhfcmVzdGFydF9yYyhxcCwgcHNuLCAmd2MpOworCQkJYnJlYWs7CisKKwkJY2FzZSAxOgkvKiBJbnZhbGlkIFJlcXVlc3QgKi8KKwkJCXdjLnN0YXR1cyA9IElCX1dDX1JFTV9JTlZfUkVRX0VSUjsKKwkJCWRldi0+bl9vdGhlcl9uYWtzKys7CisJCQlnb3RvIGNsYXNzX2I7CisKKwkJY2FzZSAyOgkvKiBSZW1vdGUgQWNjZXNzIEVycm9yICovCisJCQl3Yy5zdGF0dXMgPSBJQl9XQ19SRU1fQUNDRVNTX0VSUjsKKwkJCWRldi0+bl9vdGhlcl9uYWtzKys7CisJCQlnb3RvIGNsYXNzX2I7CisKKwkJY2FzZSAzOgkvKiBSZW1vdGUgT3BlcmF0aW9uIEVycm9yICovCisJCQl3Yy5zdGF0dXMgPSBJQl9XQ19SRU1fT1BfRVJSOworCQkJZGV2LT5uX290aGVyX25ha3MrKzsKKwkJY2xhc3NfYjoKKwkJCXdjLndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJCXdjLm9wY29kZSA9IGliX2lwYXRoX3djX29wY29kZVt3cWUtPndyLm9wY29kZV07CisJCQl3Yy52ZW5kb3JfZXJyID0gMDsKKwkJCXdjLmJ5dGVfbGVuID0gMDsKKwkJCXdjLnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwkJCXdjLnNyY19xcCA9IHFwLT5yZW1vdGVfcXBuOworCQkJd2MucGtleV9pbmRleCA9IDA7CisJCQl3Yy5zbGlkID0gcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQ7CisJCQl3Yy5zbCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5zbDsKKwkJCXdjLmRsaWRfcGF0aF9iaXRzID0gMDsKKwkJCXdjLnBvcnRfbnVtID0gMDsKKwkJCWlwYXRoX3NxZXJyb3JfcXAocXAsICZ3Yyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogSWdub3JlIG90aGVyIHJlc2VydmVkIE5BSyBlcnJvciBjb2RlcyAqLworCQkJZ290byByZXNlcnZlZDsKKwkJfQorCQlxcC0+c19ybnJfcmV0cnkgPSBxcC0+c19ybnJfcmV0cnlfY250OworCQlnb3RvIGJhaWw7CisKKwlkZWZhdWx0OgkJLyogMjogcmVzZXJ2ZWQgKi8KKwlyZXNlcnZlZDoKKwkJLyogSWdub3JlIHJlc2VydmVkIE5BSyBjb2Rlcy4gKi8KKwkJZ290byBiYWlsOworCX0KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3JjX3Jjdl9yZXNwIC0gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyByZXNwb25zZSBwYWNrZXQKKyAqIEBkZXY6IHRoZSBkZXZpY2UgdGhpcyBwYWNrZXQgY2FtZSBpbiBvbgorICogQG9oZHI6IHRoZSBvdGhlciBoZWFkZXJzIGZvciB0aGlzIHBhY2tldAorICogQGRhdGE6IHRoZSBwYWNrZXQgZGF0YQorICogQHRsZW46IHRoZSBwYWNrZXQgbGVuZ3RoCisgKiBAcXA6IHRoZSBRUCBmb3IgdGhpcyBwYWNrZXQKKyAqIEBvcGNvZGU6IHRoZSBvcGNvZGUgZm9yIHRoaXMgcGFja2V0CisgKiBAcHNuOiB0aGUgcGFja2V0IHNlcXVlbmNlIG51bWJlciBmb3IgdGhpcyBwYWNrZXQKKyAqIEBoZHJzaXplOiB0aGUgaGVhZGVyIGxlbmd0aAorICogQHBtdHU6IHRoZSBwYXRoIE1UVQorICogQGhlYWRlcl9pbl9kYXRhOiB0cnVlIGlmIHBhcnQgb2YgdGhlIGhlYWRlciBkYXRhIGlzIGluIHRoZSBkYXRhIGJ1ZmZlcgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcmNfcmN2KCkgdG8gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyByZXNwb25zZQorICogcGFja2V0IGZvciB0aGUgZ2l2ZW4gUVAuCisgKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXBhdGhfcmNfcmN2X3Jlc3Aoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkciwKKwkJCQkgICAgIHZvaWQgKmRhdGEsIHUzMiB0bGVuLAorCQkJCSAgICAgc3RydWN0IGlwYXRoX3FwICpxcCwKKwkJCQkgICAgIHUzMiBvcGNvZGUsCisJCQkJICAgICB1MzIgcHNuLCB1MzIgaGRyc2l6ZSwgdTMyIHBtdHUsCisJCQkJICAgICBpbnQgaGVhZGVyX2luX2RhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJaW50IGRpZmY7CisJdTMyIHBhZDsKKwl1MzIgYWV0aDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CisKKwkvKiBJZ25vcmUgaW52YWxpZCByZXNwb25zZXMuICovCisJaWYgKGlwYXRoX2NtcDI0KHBzbiwgcXAtPnNfbmV4dF9wc24pID49IDApCisJCWdvdG8gYWNrX2RvbmU7CisKKwkvKiBJZ25vcmUgZHVwbGljYXRlIHJlc3BvbnNlcy4gKi8KKwlkaWZmID0gaXBhdGhfY21wMjQocHNuLCBxcC0+c19sYXN0X3Bzbik7CisJaWYgKHVubGlrZWx5KGRpZmYgPD0gMCkpIHsKKwkJLyogVXBkYXRlIGNyZWRpdHMgZm9yICJnaG9zdCIgQUNLcyAqLworCQlpZiAoZGlmZiA9PSAwICYmIG9wY29kZSA9PSBPUChBQ0tOT1dMRURHRSkpIHsKKwkJCWlmICghaGVhZGVyX2luX2RhdGEpCisJCQkJYWV0aCA9IGJlMzJfdG9fY3B1KG9oZHItPnUuYWV0aCk7CisJCQllbHNlIHsKKwkJCQlhZXRoID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMF0pOworCQkJCWRhdGEgKz0gc2l6ZW9mKF9fYmUzMik7CisJCQl9CisJCQlpZiAoKGFldGggPj4gMjkpID09IDApCisJCQkJaXBhdGhfZ2V0X2NyZWRpdChxcCwgYWV0aCk7CisJCX0KKwkJZ290byBhY2tfZG9uZTsKKwl9CisKKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgT1AoQUNLTk9XTEVER0UpOgorCWNhc2UgT1AoQVRPTUlDX0FDS05PV0xFREdFKToKKwljYXNlIE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCk6CisJCWlmICghaGVhZGVyX2luX2RhdGEpCisJCQlhZXRoID0gYmUzMl90b19jcHUob2hkci0+dS5hZXRoKTsKKwkJZWxzZSB7CisJCQlhZXRoID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMF0pOworCQkJZGF0YSArPSBzaXplb2YoX19iZTMyKTsKKwkJfQorCQlpZiAob3Bjb2RlID09IE9QKEFUT01JQ19BQ0tOT1dMRURHRSkpCisJCQkqKHU2NCAqKSBxcC0+c19zZ2Uuc2dlLnZhZGRyID0gKih1NjQgKikgZGF0YTsKKwkJaWYgKCFkb19yY19hY2socXAsIGFldGgsIHBzbiwgb3Bjb2RlKSB8fAorCQkgICAgb3Bjb2RlICE9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCkpCisJCQlnb3RvIGFja19kb25lOworCQloZHJzaXplICs9IDQ7CisJCS8qCisJCSAqIGRvX3JjX2FjaygpIGhhcyBhbHJlYWR5IGNoZWNrZWQgdGhlIFBTTiBzbyBza2lwCisJCSAqIHRoZSBzZXF1ZW5jZSBjaGVjay4KKwkJICovCisJCWdvdG8gcmRtYV9yZWFkOworCisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTUlERExFKToKKwkJLyogbm8gQUVUSCwgbm8gQUNLICovCisJCWlmICh1bmxpa2VseShpcGF0aF9jbXAyNChwc24sIHFwLT5zX2xhc3RfcHNuICsgMSkpKSB7CisJCQlkZXYtPm5fcmRtYV9zZXErKzsKKwkJCWlwYXRoX3Jlc3RhcnRfcmMocXAsIHFwLT5zX2xhc3RfcHNuICsgMSwgJndjKTsKKwkJCWdvdG8gYWNrX2RvbmU7CisJCX0KKwlyZG1hX3JlYWQ6CisJaWYgKHVubGlrZWx5KHFwLT5zX3N0YXRlICE9IE9QKFJETUFfUkVBRF9SRVFVRVNUKSkpCisJCWdvdG8gYWNrX2RvbmU7CisJaWYgKHVubGlrZWx5KHRsZW4gIT0gKGhkcnNpemUgKyBwbXR1ICsgNCkpKQorCQlnb3RvIGFja19kb25lOworCWlmICh1bmxpa2VseShwbXR1ID49IHFwLT5zX2xlbikpCisJCWdvdG8gYWNrX2RvbmU7CisJLyogV2UgZ290IGEgcmVzcG9uc2Ugc28gdXBkYXRlIHRoZSB0aW1lb3V0LiAqLworCWlmICh1bmxpa2VseShxcC0+c19sYXN0ID09IHFwLT5zX3RhaWwgfHwKKwkJICAgICBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpLT53ci5vcGNvZGUgIT0KKwkJICAgICBJQl9XUl9SRE1BX1JFQUQpKQorCQlnb3RvIGFja19kb25lOworCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCWlmIChxcC0+c19ybnJfdGltZW91dCA9PSAwICYmICFsaXN0X2VtcHR5KCZxcC0+dGltZXJ3YWl0KSkKKwkJbGlzdF9tb3ZlX3RhaWwoJnFwLT50aW1lcndhaXQsCisJCQkgICAgICAgJmRldi0+cGVuZGluZ1tkZXYtPnBlbmRpbmdfaW5kZXhdKTsKKwlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCS8qCisJICogVXBkYXRlIHRoZSBSRE1BIHJlY2VpdmUgc3RhdGUgYnV0IGRvIHRoZSBjb3B5IHcvbyBob2xkaW5nIHRoZQorCSAqIGxvY2tzIGFuZCBibG9ja2luZyBpbnRlcnJ1cHRzLiAgWFhYIFlldCBhbm90aGVyIHBsYWNlIHRoYXQKKwkgKiBhZmZlY3RzIHJlbGF4ZWQgUkRNQSBvcmRlciBzaW5jZSB3ZSBkb24ndCB3YW50IHNfc2dlIG1vZGlmaWVkLgorCSAqLworCXFwLT5zX2xlbiAtPSBwbXR1OworCXFwLT5zX2xhc3RfcHNuID0gcHNuOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwlpcGF0aF9jb3B5X3NnZSgmcXAtPnNfc2dlLCBkYXRhLCBwbXR1KTsKKwlnb3RvIGJhaWw7CisKKwljYXNlIE9QKFJETUFfUkVBRF9SRVNQT05TRV9MQVNUKToKKwkJLyogQUNLcyBSRUFEIHJlcS4gKi8KKwkJaWYgKHVubGlrZWx5KGlwYXRoX2NtcDI0KHBzbiwgcXAtPnNfbGFzdF9wc24gKyAxKSkpIHsKKwkJCWRldi0+bl9yZG1hX3NlcSsrOworCQkJaXBhdGhfcmVzdGFydF9yYyhxcCwgcXAtPnNfbGFzdF9wc24gKyAxLCAmd2MpOworCQkJZ290byBhY2tfZG9uZTsKKwkJfQorCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoUkRNQV9SRUFEX1JFU1BPTlNFX09OTFkpOgorCQlpZiAodW5saWtlbHkocXAtPnNfc3RhdGUgIT0gT1AoUkRNQV9SRUFEX1JFUVVFU1QpKSkKKwkJCWdvdG8gYWNrX2RvbmU7CisJCS8qCisJCSAqIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBtZXNzYWdlIHdhcyBwYWRkZWQgYnkuCisJCSAqLworCQlwYWQgPSAoYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyMCkgJiAzOworCQkvKgorCQkgKiBDaGVjayB0aGF0IHRoZSBkYXRhIHNpemUgaXMgPj0gMSAmJiA8PSBwbXR1LgorCQkgKiBSZW1lbWJlciB0byBhY2NvdW50IGZvciB0aGUgQUVUSCBoZWFkZXIgKDQpIGFuZAorCQkgKiBJQ1JDICg0KS4KKwkJICovCisJCWlmICh1bmxpa2VseSh0bGVuIDw9IChoZHJzaXplICsgcGFkICsgOCkpKSB7CisJCQkvKgorCQkJICogWFhYIE5lZWQgdG8gZ2VuZXJhdGUgYW4gZXJyb3IgQ1EKKwkJCSAqIGVudHJ5LgorCQkJICovCisJCQlnb3RvIGFja19kb25lOworCQl9CisJCXRsZW4gLT0gaGRyc2l6ZSArIHBhZCArIDg7CisJCWlmICh1bmxpa2VseSh0bGVuICE9IHFwLT5zX2xlbikpIHsKKwkJCS8qCisJCQkgKiBYWFggTmVlZCB0byBnZW5lcmF0ZSBhbiBlcnJvciBDUQorCQkJICogZW50cnkuCisJCQkgKi8KKwkJCWdvdG8gYWNrX2RvbmU7CisJCX0KKwkJaWYgKCFoZWFkZXJfaW5fZGF0YSkKKwkJCWFldGggPSBiZTMyX3RvX2NwdShvaGRyLT51LmFldGgpOworCQllbHNlIHsKKwkJCWFldGggPSBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKSBkYXRhKVswXSk7CisJCQlkYXRhICs9IHNpemVvZihfX2JlMzIpOworCQl9CisJCWlwYXRoX2NvcHlfc2dlKCZxcC0+c19zZ2UsIGRhdGEsIHRsZW4pOworCQlpZiAoZG9fcmNfYWNrKHFwLCBhZXRoLCBwc24sIE9QKFJETUFfUkVBRF9SRVNQT05TRV9MQVNUKSkpIHsKKwkJCS8qCisJCQkgKiBDaGFuZ2UgdGhlIHN0YXRlIHNvIHdlIGNvbnRpbXVlCisJCQkgKiBwcm9jZXNzaW5nIG5ldyByZXF1ZXN0cy4KKwkJCSAqLworCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1QpOworCQl9CisJCWdvdG8gYWNrX2RvbmU7CisJfQorCithY2tfZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CitiYWlsOgorCXJldHVybjsKK30KKworLyoqCisgKiBpcGF0aF9yY19yY3ZfZXJyb3IgLSBwcm9jZXNzIGFuIGluY29taW5nIGR1cGxpY2F0ZSBvciBlcnJvciBSQyBwYWNrZXQKKyAqIEBkZXY6IHRoZSBkZXZpY2UgdGhpcyBwYWNrZXQgY2FtZSBpbiBvbgorICogQG9oZHI6IHRoZSBvdGhlciBoZWFkZXJzIGZvciB0aGlzIHBhY2tldAorICogQGRhdGE6IHRoZSBwYWNrZXQgZGF0YQorICogQHFwOiB0aGUgUVAgZm9yIHRoaXMgcGFja2V0CisgKiBAb3Bjb2RlOiB0aGUgb3Bjb2RlIGZvciB0aGlzIHBhY2tldAorICogQHBzbjogdGhlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgcGFja2V0CisgKiBAZGlmZjogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgUFNOIGFuZCB0aGUgZXhwZWN0ZWQgUFNOCisgKiBAaGVhZGVyX2luX2RhdGE6IHRydWUgaWYgcGFydCBvZiB0aGUgaGVhZGVyIGRhdGEgaXMgaW4gdGhlIGRhdGEgYnVmZmVyCisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9yY19yY3YoKSB0byBwcm9jZXNzIGFuIHVuZXhwZWN0ZWQKKyAqIGluY29taW5nIFJDIHBhY2tldCBmb3IgdGhlIGdpdmVuIFFQLgorICogQ2FsbGVkIGF0IGludGVycnVwdCBsZXZlbC4KKyAqIFJldHVybiAxIGlmIG5vIG1vcmUgcHJvY2Vzc2luZyBpcyBuZWVkZWQ7IG90aGVyd2lzZSByZXR1cm4gMCB0bworICogc2NoZWR1bGUgYSByZXNwb25zZSB0byBiZSBzZW50IGFuZCB0aGUgc19sb2NrIHVubG9ja2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBpcGF0aF9yY19yY3ZfZXJyb3Ioc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkciwKKwkJCQkgICAgIHZvaWQgKmRhdGEsCisJCQkJICAgICBzdHJ1Y3QgaXBhdGhfcXAgKnFwLAorCQkJCSAgICAgdTMyIG9wY29kZSwKKwkJCQkgICAgIHUzMiBwc24sCisJCQkJICAgICBpbnQgZGlmZiwKKwkJCQkgICAgIGludCBoZWFkZXJfaW5fZGF0YSkKK3sKKwlzdHJ1Y3QgaWJfcmV0aCAqcmV0aDsKKworCWlmIChkaWZmID4gMCkgeworCQkvKgorCQkgKiBQYWNrZXQgc2VxdWVuY2UgZXJyb3IuCisJCSAqIEEgTkFLIHdpbGwgQUNLIGVhcmxpZXIgc2VuZHMgYW5kIFJETUEgd3JpdGVzLgorCQkgKiBEb24ndCBxdWV1ZSB0aGUgTkFLIGlmIGEgUkRNQSByZWFkLCBhdG9taWMsIG9yCisJCSAqIE5BSyBpcyBwZW5kaW5nIHRob3VnaC4KKwkJICovCisJCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7CisJCWlmICgocXAtPnNfYWNrX3N0YXRlID49IE9QKFJETUFfUkVBRF9SRVFVRVNUKSAmJgorCQkgICAgIHFwLT5zX2Fja19zdGF0ZSAhPSBJQl9PUENPREVfQUNLTk9XTEVER0UpIHx8CisJCSAgICBxcC0+c19uYWtfc3RhdGUgIT0gMCkgeworCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQkJZ290byBkb25lOworCQl9CisJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFNFTkRfT05MWSk7CisJCXFwLT5zX25ha19zdGF0ZSA9IElCX05BS19QU05fRVJST1I7CisJCS8qIFVzZSB0aGUgZXhwZWN0ZWQgUFNOLiAqLworCQlxcC0+c19hY2tfcHNuID0gcXAtPnJfcHNuOworCQlnb3RvIHJlc2NoZWQ7CisJfQorCisJLyoKKwkgKiBIYW5kbGUgYSBkdXBsaWNhdGUgcmVxdWVzdC4gIERvbid0IHJlLWV4ZWN1dGUgU0VORCwgUkRNQQorCSAqIHdyaXRlIG9yIGF0b21pYyBvcC4gIERvbid0IE5BSyBlcnJvcnMsIGp1c3Qgc2lsZW50bHkgZHJvcAorCSAqIHRoZSBkdXBsaWNhdGUgcmVxdWVzdC4gIE5vdGUgdGhhdCByX3NnZSwgcl9sZW4sIGFuZAorCSAqIHJfcmN2X2xlbiBtYXkgYmUgaW4gdXNlIHNvIGRvbid0IG1vZGlmeSB0aGVtLgorCSAqCisJICogV2UgYXJlIHN1cHBvc2VkIHRvIEFDSyB0aGUgZWFybGllc3QgZHVwbGljYXRlIFBTTiBidXQgd2UKKwkgKiBjYW4gY29hbGVzY2UgYW4gb3V0c3RhbmRpbmcgZHVwbGljYXRlIEFDSy4gIFdlIGhhdmUgdG8KKwkgKiBzZW5kIHRoZSBlYXJsaWVzdCBzbyB0aGF0IFJETUEgcmVhZHMgY2FuIGJlIHJlc3RhcnRlZCBhdAorCSAqIHRoZSByZXF1ZXN0ZXIncyBleHBlY3RlZCBQU04uCisJICovCisJc3Bpbl9sb2NrKCZxcC0+c19sb2NrKTsKKwlpZiAocXAtPnNfYWNrX3N0YXRlICE9IElCX09QQ09ERV9BQ0tOT1dMRURHRSAmJgorCSAgICBpcGF0aF9jbXAyNChwc24sIHFwLT5zX2Fja19wc24pID49IDApIHsKKwkJaWYgKHFwLT5zX2Fja19zdGF0ZSA8IElCX09QQ09ERV9SRE1BX1JFQURfUkVRVUVTVCkKKwkJCXFwLT5zX2Fja19wc24gPSBwc247CisJCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwkJZ290byBkb25lOworCX0KKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgT1AoUkRNQV9SRUFEX1JFUVVFU1QpOgorCQkvKgorCQkgKiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgdG8gbm90IGNoYW5nZSBzX3JkbWFfc2dlCisJCSAqIHdoaWxlIGlwYXRoX2RvX3JjX3NlbmQoKSBpcyB1c2luZyBpdCBhbmQgbm90CisJCSAqIGhvbGRpbmcgdGhlIHNfbG9jay4KKwkJICovCisJCWlmIChxcC0+c19hY2tfc3RhdGUgIT0gT1AoQUNLTk9XTEVER0UpICYmCisJCSAgICBxcC0+c19hY2tfc3RhdGUgPj0gSUJfT1BDT0RFX1JETUFfUkVBRF9SRVFVRVNUKSB7CisJCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJCQlkZXYtPm5fcmRtYV9kdXBfYnVzeSsrOworCQkJZ290byBkb25lOworCQl9CisJCS8qIFJFVEggY29tZXMgYWZ0ZXIgQlRIICovCisJCWlmICghaGVhZGVyX2luX2RhdGEpCisJCQlyZXRoID0gJm9oZHItPnUucmMucmV0aDsKKwkJZWxzZSB7CisJCQlyZXRoID0gKHN0cnVjdCBpYl9yZXRoICopZGF0YTsKKwkJCWRhdGEgKz0gc2l6ZW9mKCpyZXRoKTsKKwkJfQorCQlxcC0+c19yZG1hX2xlbiA9IGJlMzJfdG9fY3B1KHJldGgtPmxlbmd0aCk7CisJCWlmIChxcC0+c19yZG1hX2xlbiAhPSAwKSB7CisJCQl1MzIgcmtleSA9IGJlMzJfdG9fY3B1KHJldGgtPnJrZXkpOworCQkJdTY0IHZhZGRyID0gYmU2NF90b19jcHUocmV0aC0+dmFkZHIpOworCQkJaW50IG9rOworCisJCQkvKgorCQkJICogQWRkcmVzcyByYW5nZSBtdXN0IGJlIGEgc3Vic2V0IG9mIHRoZSBvcmlnaW5hbAorCQkJICogcmVxdWVzdCBhbmQgc3RhcnQgb24gcG10dSBib3VuZGFyaWVzLgorCQkJICovCisJCQlvayA9IGlwYXRoX3JrZXlfb2soZGV2LCAmcXAtPnNfcmRtYV9zZ2UsCisJCQkJCSAgIHFwLT5zX3JkbWFfbGVuLCB2YWRkciwgcmtleSwKKwkJCQkJICAgSUJfQUNDRVNTX1JFTU9URV9SRUFEKTsKKwkJCWlmICh1bmxpa2VseSghb2spKQorCQkJCWdvdG8gZG9uZTsKKwkJfSBlbHNlIHsKKwkJCXFwLT5zX3JkbWFfc2dlLnNnX2xpc3QgPSBOVUxMOworCQkJcXAtPnNfcmRtYV9zZ2UubnVtX3NnZSA9IDA7CisJCQlxcC0+c19yZG1hX3NnZS5zZ2UubXIgPSBOVUxMOworCQkJcXAtPnNfcmRtYV9zZ2Uuc2dlLnZhZGRyID0gTlVMTDsKKwkJCXFwLT5zX3JkbWFfc2dlLnNnZS5sZW5ndGggPSAwOworCQkJcXAtPnNfcmRtYV9zZ2Uuc2dlLnNnZV9sZW5ndGggPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBPUChDT01QQVJFX1NXQVApOgorCWNhc2UgT1AoRkVUQ0hfQUREKToKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHRoZSBQU04gb2YgdGhlIGxhc3QgYXRvbWljIG9wZXJhdGlvbnMKKwkJICogcGVyZm9ybWVkIGFuZCByZXNlbmQgdGhlIHJlc3VsdCBpZiBmb3VuZC4KKwkJICovCisJCWlmICgocHNuICYgSVBTX1BTTl9NQVNLKSAhPSBxcC0+cl9hdG9taWNfcHNuKSB7CisJCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJcXAtPnNfYWNrX2F0b21pYyA9IHFwLT5yX2F0b21pY19kYXRhOworCQlicmVhazsKKwl9CisJcXAtPnNfYWNrX3N0YXRlID0gb3Bjb2RlOworCXFwLT5zX25ha19zdGF0ZSA9IDA7CisJcXAtPnNfYWNrX3BzbiA9IHBzbjsKK3Jlc2NoZWQ6CisJcmV0dXJuIDA7CisKK2RvbmU6CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogaXBhdGhfcmNfcmN2IC0gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyBwYWNrZXQKKyAqIEBkZXY6IHRoZSBkZXZpY2UgdGhpcyBwYWNrZXQgY2FtZSBpbiBvbgorICogQGhkcjogdGhlIGhlYWRlciBvZiB0aGlzIHBhY2tldAorICogQGhhc19ncmg6IHRydWUgaWYgdGhlIGhlYWRlciBoYXMgYSBHUkgKKyAqIEBkYXRhOiB0aGUgcGFja2V0IGRhdGEKKyAqIEB0bGVuOiB0aGUgcGFja2V0IGxlbmd0aAorICogQHFwOiB0aGUgUVAgZm9yIHRoaXMgcGFja2V0CisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9xcF9yY3YoKSB0byBwcm9jZXNzIGFuIGluY29taW5nIFJDIHBhY2tldAorICogZm9yIHRoZSBnaXZlbiBRUC4KKyAqIENhbGxlZCBhdCBpbnRlcnJ1cHQgbGV2ZWwuCisgKi8KK3ZvaWQgaXBhdGhfcmNfcmN2KHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaXBhdGhfaWJfaGVhZGVyICpoZHIsCisJCSAgaW50IGhhc19ncmgsIHZvaWQgKmRhdGEsIHUzMiB0bGVuLCBzdHJ1Y3QgaXBhdGhfcXAgKnFwKQoreworCXN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyOworCXUzMiBvcGNvZGU7CisJdTMyIGhkcnNpemU7CisJdTMyIHBzbjsKKwl1MzIgcGFkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGliX3djIHdjOworCXUzMiBwbXR1ID0gaWJfbXR1X2VudW1fdG9faW50KHFwLT5wYXRoX210dSk7CisJaW50IGRpZmY7CisJc3RydWN0IGliX3JldGggKnJldGg7CisJaW50IGhlYWRlcl9pbl9kYXRhOworCisJLyogQ2hlY2sgZm9yIEdSSCAqLworCWlmICghaGFzX2dyaCkgeworCQlvaGRyID0gJmhkci0+dS5vdGg7CisJCWhkcnNpemUgPSA4ICsgMTI7CS8qIExSSCArIEJUSCAqLworCQlwc24gPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMl0pOworCQloZWFkZXJfaW5fZGF0YSA9IDA7CisJfSBlbHNlIHsKKwkJb2hkciA9ICZoZHItPnUubC5vdGg7CisJCWhkcnNpemUgPSA4ICsgNDAgKyAxMjsJLyogTFJIICsgR1JIICsgQlRIICovCisJCS8qCisJCSAqIFRoZSBoZWFkZXIgd2l0aCBHUkggaXMgNjAgYnl0ZXMgYW5kIHRoZSBjb3JlIGRyaXZlciBzZXRzCisJCSAqIHRoZSBlYWdlciBoZWFkZXIgYnVmZmVyIHNpemUgdG8gNTYgYnl0ZXMgc28gdGhlIGxhc3QgNAorCQkgKiBieXRlcyBvZiB0aGUgQlRIIGhlYWRlciAoUFNOKSBpcyBpbiB0aGUgZGF0YSBidWZmZXIuCisJCSAqLworCQloZWFkZXJfaW5fZGF0YSA9CisJCQlpcGF0aF9sYXllcl9nZXRfcmN2aGRyZW50c2l6ZShkZXYtPmRkKSA9PSAxNjsKKwkJaWYgKGhlYWRlcl9pbl9kYXRhKSB7CisJCQlwc24gPSBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKSBkYXRhKVswXSk7CisJCQlkYXRhICs9IHNpemVvZihfX2JlMzIpOworCQl9IGVsc2UKKwkJCXBzbiA9IGJlMzJfdG9fY3B1KG9oZHItPmJ0aFsyXSk7CisJfQorCS8qCisJICogVGhlIG9wY29kZSBpcyBpbiB0aGUgbG93IGJ5dGUgd2hlbiBpdHMgaW4gbmV0d29yayBvcmRlcgorCSAqICh0b3AgYnl0ZSB3aGVuIGluIGhvc3Qgb3JkZXIpLgorCSAqLworCW9wY29kZSA9IGJlMzJfdG9fY3B1KG9oZHItPmJ0aFswXSkgPj4gMjQ7CisKKwkvKgorCSAqIFByb2Nlc3MgcmVzcG9uc2VzIChBQ0tzKSBiZWZvcmUgYW55dGhpbmcgZWxzZS4gIE5vdGUgdGhhdCB0aGUKKwkgKiBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIHdpbGwgYmUgZm9yIHNvbWV0aGluZyBpbiB0aGUgc2VuZCB3b3JrCisJICogcXVldWUgcmF0aGVyIHRoYW4gdGhlIGV4cGVjdGVkIHJlY2VpdmUgcGFja2V0IHNlcXVlbmNlIG51bWJlci4KKwkgKiBJbiBvdGhlciB3b3JkcywgdGhpcyBRUCBpcyB0aGUgcmVxdWVzdGVyLgorCSAqLworCWlmIChvcGNvZGUgPj0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0ZJUlNUKSAmJgorCSAgICBvcGNvZGUgPD0gT1AoQVRPTUlDX0FDS05PV0xFREdFKSkgeworCQlpcGF0aF9yY19yY3ZfcmVzcChkZXYsIG9oZHIsIGRhdGEsIHRsZW4sIHFwLCBvcGNvZGUsIHBzbiwKKwkJCQkgIGhkcnNpemUsIHBtdHUsIGhlYWRlcl9pbl9kYXRhKTsKKwkJZ290byBiYWlsOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisKKwkvKiBDb21wdXRlIDI0IGJpdHMgd29ydGggb2YgZGlmZmVyZW5jZS4gKi8KKwlkaWZmID0gaXBhdGhfY21wMjQocHNuLCBxcC0+cl9wc24pOworCWlmICh1bmxpa2VseShkaWZmKSkgeworCQlpZiAoaXBhdGhfcmNfcmN2X2Vycm9yKGRldiwgb2hkciwgZGF0YSwgcXAsIG9wY29kZSwKKwkJCQkgICAgICAgcHNuLCBkaWZmLCBoZWFkZXJfaW5fZGF0YSkpCisJCQlnb3RvIGRvbmU7CisJCWdvdG8gcmVzY2hlZDsKKwl9CisKKwkvKiBDaGVjayBmb3Igb3Bjb2RlIHNlcXVlbmNlIGVycm9ycy4gKi8KKwlzd2l0Y2ggKHFwLT5yX3N0YXRlKSB7CisJY2FzZSBPUChTRU5EX0ZJUlNUKToKKwljYXNlIE9QKFNFTkRfTUlERExFKToKKwkJaWYgKG9wY29kZSA9PSBPUChTRU5EX01JRERMRSkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChTRU5EX0xBU1QpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoU0VORF9MQVNUX1dJVEhfSU1NRURJQVRFKSkKKwkJCWJyZWFrOworCW5hY2tfaW52OgorCS8qCisJICogQSBOQUsgd2lsbCBBQ0sgZWFybGllciBzZW5kcyBhbmQgUkRNQSB3cml0ZXMuICBEb24ndCBxdWV1ZSB0aGUKKwkgKiBOQUsgaWYgYSBSRE1BIHJlYWQsIGF0b21pYywgb3IgTkFLIGlzIHBlbmRpbmcgdGhvdWdoLgorCSAqLworCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7CisJaWYgKHFwLT5zX2Fja19zdGF0ZSA+PSBPUChSRE1BX1JFQURfUkVRVUVTVCkgJiYKKwkgICAgcXAtPnNfYWNrX3N0YXRlICE9IElCX09QQ09ERV9BQ0tOT1dMRURHRSkgeworCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJCWdvdG8gZG9uZTsKKwl9CisJLyogWFhYIEZsdXNoIFdRRXMgKi8KKwlxcC0+c3RhdGUgPSBJQl9RUFNfRVJSOworCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFNFTkRfT05MWSk7CisJcXAtPnNfbmFrX3N0YXRlID0gSUJfTkFLX0lOVkFMSURfUkVRVUVTVDsKKwlxcC0+c19hY2tfcHNuID0gcXAtPnJfcHNuOworCWdvdG8gcmVzY2hlZDsKKworCWNhc2UgT1AoUkRNQV9XUklURV9GSVJTVCk6CisJY2FzZSBPUChSRE1BX1dSSVRFX01JRERMRSk6CisJCWlmIChvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9NSURETEUpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9MQVNUKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTEFTVF9XSVRIX0lNTUVESUFURSkpCisJCQlicmVhazsKKwkJZ290byBuYWNrX2ludjsKKworCWNhc2UgT1AoUkRNQV9SRUFEX1JFUVVFU1QpOgorCWNhc2UgT1AoQ09NUEFSRV9TV0FQKToKKwljYXNlIE9QKEZFVENIX0FERCk6CisJCS8qCisJCSAqIERyb3AgYWxsIG5ldyByZXF1ZXN0cyB1bnRpbCBhIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQuICBBCisJCSAqIG5ldyByZXF1ZXN0IHRoZW4gQUNLcyB0aGUgUkRNQSByZXNwb25zZSB3ZSBzZW50LiAgUmVsYXhlZAorCQkgKiBvcmRlcmluZyB3b3VsZCBhbGxvdyBuZXcgcmVxdWVzdHMgdG8gYmUgcHJvY2Vzc2VkIGJ1dCB3ZQorCQkgKiB3b3VsZCBuZWVkIHRvIGtlZXAgYSBxdWV1ZSBvZiByd3FlJ3MgZm9yIGFsbCB0aGF0IGFyZSBpbgorCQkgKiBwcm9ncmVzcy4gIE5vdGUgdGhhdCB3ZSBjYW4ndCBSTlIgTkFLIHRoaXMgcmVxdWVzdCBzaW5jZQorCQkgKiB0aGUgUkRNQSBSRUFEIG9yIGF0b21pYyByZXNwb25zZSBpcyBhbHJlYWR5IHF1ZXVlZCB0byBiZQorCQkgKiBzZW50ICh1bmxlc3Mgd2UgaW1wbGVtZW50IGEgcmVzcG9uc2Ugc2VuZCBxdWV1ZSkuCisJCSAqLworCQlnb3RvIGRvbmU7CisKKwlkZWZhdWx0OgorCQlpZiAob3Bjb2RlID09IE9QKFNFTkRfTUlERExFKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFNFTkRfTEFTVCkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChTRU5EX0xBU1RfV0lUSF9JTU1FRElBVEUpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9NSURETEUpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9MQVNUKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTEFTVF9XSVRIX0lNTUVESUFURSkpCisJCQlnb3RvIG5hY2tfaW52OworCQlicmVhazsKKwl9CisKKwl3Yy5pbW1fZGF0YSA9IDA7CisJd2Mud2NfZmxhZ3MgPSAwOworCisJLyogT0ssIHByb2Nlc3MgdGhlIHBhY2tldC4gKi8KKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgT1AoU0VORF9GSVJTVCk6CisJCWlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDApKSB7CisJCXJucl9uYWs6CisJCQkvKgorCQkJICogQSBSTlIgTkFLIHdpbGwgQUNLIGVhcmxpZXIgc2VuZHMgYW5kIFJETUEgd3JpdGVzLgorCQkJICogRG9uJ3QgcXVldWUgdGhlIE5BSyBpZiBhIFJETUEgcmVhZCBvciBhdG9taWMKKwkJCSAqIGlzIHBlbmRpbmcgdGhvdWdoLgorCQkJICovCisJCQlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCQkJaWYgKHFwLT5zX2Fja19zdGF0ZSA+PQorCQkJICAgIE9QKFJETUFfUkVBRF9SRVFVRVNUKSAmJgorCQkJICAgIHFwLT5zX2Fja19zdGF0ZSAhPSBJQl9PUENPREVfQUNLTk9XTEVER0UpIHsKKwkJCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcXAtPnNfYWNrX3N0YXRlID0gT1AoU0VORF9PTkxZKTsKKwkJCXFwLT5zX25ha19zdGF0ZSA9IElCX1JOUl9OQUsgfCBxcC0+c19taW5fcm5yX3RpbWVyOworCQkJcXAtPnNfYWNrX3BzbiA9IHFwLT5yX3BzbjsKKwkJCWdvdG8gcmVzY2hlZDsKKwkJfQorCQlxcC0+cl9yY3ZfbGVuID0gMDsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFNFTkRfTUlERExFKToKKwljYXNlIE9QKFJETUFfV1JJVEVfTUlERExFKToKKwlzZW5kX21pZGRsZToKKwkJLyogQ2hlY2sgZm9yIGludmFsaWQgbGVuZ3RoIFBNVFUgb3IgcG9zdGVkIHJ3cWUgbGVuLiAqLworCQlpZiAodW5saWtlbHkodGxlbiAhPSAoaGRyc2l6ZSArIHBtdHUgKyA0KSkpCisJCQlnb3RvIG5hY2tfaW52OworCQlxcC0+cl9yY3ZfbGVuICs9IHBtdHU7CisJCWlmICh1bmxpa2VseShxcC0+cl9yY3ZfbGVuID4gcXAtPnJfbGVuKSkKKwkJCWdvdG8gbmFja19pbnY7CisJCWlwYXRoX2NvcHlfc2dlKCZxcC0+cl9zZ2UsIGRhdGEsIHBtdHUpOworCQlicmVhazsKKworCWNhc2UgT1AoUkRNQV9XUklURV9MQVNUX1dJVEhfSU1NRURJQVRFKToKKwkJLyogY29uc3VtZSBSV1FFICovCisJCWlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDEpKQorCQkJZ290byBybnJfbmFrOworCQlnb3RvIHNlbmRfbGFzdF9pbW07CisKKwljYXNlIE9QKFNFTkRfT05MWSk6CisJY2FzZSBPUChTRU5EX09OTFlfV0lUSF9JTU1FRElBVEUpOgorCQlpZiAoIWlwYXRoX2dldF9yd3FlKHFwLCAwKSkKKwkJCWdvdG8gcm5yX25hazsKKwkJcXAtPnJfcmN2X2xlbiA9IDA7CisJCWlmIChvcGNvZGUgPT0gT1AoU0VORF9PTkxZKSkKKwkJCWdvdG8gc2VuZF9sYXN0OworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoU0VORF9MQVNUX1dJVEhfSU1NRURJQVRFKToKKwlzZW5kX2xhc3RfaW1tOgorCQlpZiAoaGVhZGVyX2luX2RhdGEpIHsKKwkJCXdjLmltbV9kYXRhID0gKihfX2JlMzIgKikgZGF0YTsKKwkJCWRhdGEgKz0gc2l6ZW9mKF9fYmUzMik7CisJCX0gZWxzZSB7CisJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcyBhZnRlciBCVEggKi8KKwkJCXdjLmltbV9kYXRhID0gb2hkci0+dS5pbW1fZGF0YTsKKwkJfQorCQloZHJzaXplICs9IDQ7CisJCXdjLndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBPUChTRU5EX0xBU1QpOgorCWNhc2UgT1AoUkRNQV9XUklURV9MQVNUKToKKwlzZW5kX2xhc3Q6CisJCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBtZXNzYWdlIHdhcyBwYWRkZWQgYnkuICovCisJCXBhZCA9IChiZTMyX3RvX2NwdShvaGRyLT5idGhbMF0pID4+IDIwKSAmIDM7CisJCS8qIENoZWNrIGZvciBpbnZhbGlkIGxlbmd0aC4gKi8KKwkJLyogWFhYIExBU1QgbGVuIHNob3VsZCBiZSA+PSAxICovCisJCWlmICh1bmxpa2VseSh0bGVuIDwgKGhkcnNpemUgKyBwYWQgKyA0KSkpCisJCQlnb3RvIG5hY2tfaW52OworCQkvKiBEb24ndCBjb3VudCB0aGUgQ1JDLiAqLworCQl0bGVuIC09IChoZHJzaXplICsgcGFkICsgNCk7CisJCXdjLmJ5dGVfbGVuID0gdGxlbiArIHFwLT5yX3Jjdl9sZW47CisJCWlmICh1bmxpa2VseSh3Yy5ieXRlX2xlbiA+IHFwLT5yX2xlbikpCisJCQlnb3RvIG5hY2tfaW52OworCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCBkYXRhLCB0bGVuKTsKKwkJYXRvbWljX2luYygmcXAtPm1zbik7CisJCWlmIChvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9MQVNUKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfT05MWSkpCisJCQlicmVhazsKKwkJd2Mud3JfaWQgPSBxcC0+cl93cl9pZDsKKwkJd2Muc3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKKwkJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKKwkJd2MudmVuZG9yX2VyciA9IDA7CisJCXdjLnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwkJd2Muc3JjX3FwID0gcXAtPnJlbW90ZV9xcG47CisJCXdjLnBrZXlfaW5kZXggPSAwOworCQl3Yy5zbGlkID0gcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQ7CisJCXdjLnNsID0gcXAtPnJlbW90ZV9haF9hdHRyLnNsOworCQl3Yy5kbGlkX3BhdGhfYml0cyA9IDA7CisJCXdjLnBvcnRfbnVtID0gMDsKKwkJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLworCQlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywKKwkJCSAgICAgICAob2hkci0+YnRoWzBdICYKKwkJCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKKwkJYnJlYWs7CisKKwljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgorCWNhc2UgT1AoUkRNQV9XUklURV9PTkxZKToKKwljYXNlIE9QKFJETUFfV1JJVEVfT05MWV9XSVRIX0lNTUVESUFURSk6CisJCS8qIGNvbnN1bWUgUldRRSAqLworCQkvKiBSRVRIIGNvbWVzIGFmdGVyIEJUSCAqLworCQlpZiAoIWhlYWRlcl9pbl9kYXRhKQorCQkJcmV0aCA9ICZvaGRyLT51LnJjLnJldGg7CisJCWVsc2UgeworCQkJcmV0aCA9IChzdHJ1Y3QgaWJfcmV0aCAqKWRhdGE7CisJCQlkYXRhICs9IHNpemVvZigqcmV0aCk7CisJCX0KKwkJaGRyc2l6ZSArPSBzaXplb2YoKnJldGgpOworCQlxcC0+cl9sZW4gPSBiZTMyX3RvX2NwdShyZXRoLT5sZW5ndGgpOworCQlxcC0+cl9yY3ZfbGVuID0gMDsKKwkJaWYgKHFwLT5yX2xlbiAhPSAwKSB7CisJCQl1MzIgcmtleSA9IGJlMzJfdG9fY3B1KHJldGgtPnJrZXkpOworCQkJdTY0IHZhZGRyID0gYmU2NF90b19jcHUocmV0aC0+dmFkZHIpOworCQkJaW50IG9rOworCisJCQkvKiBDaGVjayBya2V5ICYgTkFLICovCisJCQlvayA9IGlwYXRoX3JrZXlfb2soZGV2LCAmcXAtPnJfc2dlLAorCQkJCQkgICBxcC0+cl9sZW4sIHZhZGRyLCBya2V5LAorCQkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKTsKKwkJCWlmICh1bmxpa2VseSghb2spKSB7CisJCQluYWNrX2FjYzoKKwkJCQkvKgorCQkJCSAqIEEgTkFLIHdpbGwgQUNLIGVhcmxpZXIgc2VuZHMgYW5kIFJETUEKKwkJCQkgKiB3cml0ZXMuICBEb24ndCBxdWV1ZSB0aGUgTkFLIGlmIGEgUkRNQQorCQkJCSAqIHJlYWQsIGF0b21pYywgb3IgTkFLIGlzIHBlbmRpbmcgdGhvdWdoLgorCQkJCSAqLworCQkJCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7CisJCQkJaWYgKHFwLT5zX2Fja19zdGF0ZSA+PQorCQkJCSAgICBPUChSRE1BX1JFQURfUkVRVUVTVCkgJiYKKwkJCQkgICAgcXAtPnNfYWNrX3N0YXRlICE9CisJCQkJICAgIElCX09QQ09ERV9BQ0tOT1dMRURHRSkgeworCQkJCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisJCQkJLyogWFhYIEZsdXNoIFdRRXMgKi8KKwkJCQlxcC0+c3RhdGUgPSBJQl9RUFNfRVJSOworCQkJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfT05MWSk7CisJCQkJcXAtPnNfbmFrX3N0YXRlID0KKwkJCQkJSUJfTkFLX1JFTU9URV9BQ0NFU1NfRVJST1I7CisJCQkJcXAtPnNfYWNrX3BzbiA9IHFwLT5yX3BzbjsKKwkJCQlnb3RvIHJlc2NoZWQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlxcC0+cl9zZ2Uuc2dfbGlzdCA9IE5VTEw7CisJCQlxcC0+cl9zZ2Uuc2dlLm1yID0gTlVMTDsKKwkJCXFwLT5yX3NnZS5zZ2UudmFkZHIgPSBOVUxMOworCQkJcXAtPnJfc2dlLnNnZS5sZW5ndGggPSAwOworCQkJcXAtPnJfc2dlLnNnZS5zZ2VfbGVuZ3RoID0gMDsKKwkJfQorCQlpZiAodW5saWtlbHkoIShxcC0+cXBfYWNjZXNzX2ZsYWdzICYKKwkJCSAgICAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSkpCisJCQlnb3RvIG5hY2tfYWNjOworCQlpZiAob3Bjb2RlID09IE9QKFJETUFfV1JJVEVfRklSU1QpKQorCQkJZ290byBzZW5kX21pZGRsZTsKKwkJZWxzZSBpZiAob3Bjb2RlID09IE9QKFJETUFfV1JJVEVfT05MWSkpCisJCQlnb3RvIHNlbmRfbGFzdDsKKwkJaWYgKCFpcGF0aF9nZXRfcndxZShxcCwgMSkpCisJCQlnb3RvIHJucl9uYWs7CisJCWdvdG8gc2VuZF9sYXN0X2ltbTsKKworCWNhc2UgT1AoUkRNQV9SRUFEX1JFUVVFU1QpOgorCQkvKiBSRVRIIGNvbWVzIGFmdGVyIEJUSCAqLworCQlpZiAoIWhlYWRlcl9pbl9kYXRhKQorCQkJcmV0aCA9ICZvaGRyLT51LnJjLnJldGg7CisJCWVsc2UgeworCQkJcmV0aCA9IChzdHJ1Y3QgaWJfcmV0aCAqKWRhdGE7CisJCQlkYXRhICs9IHNpemVvZigqcmV0aCk7CisJCX0KKwkJc3Bpbl9sb2NrKCZxcC0+c19sb2NrKTsKKwkJaWYgKHFwLT5zX2Fja19zdGF0ZSAhPSBPUChBQ0tOT1dMRURHRSkgJiYKKwkJICAgIHFwLT5zX2Fja19zdGF0ZSA+PSBJQl9PUENPREVfUkRNQV9SRUFEX1JFUVVFU1QpIHsKKwkJCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlxcC0+c19yZG1hX2xlbiA9IGJlMzJfdG9fY3B1KHJldGgtPmxlbmd0aCk7CisJCWlmIChxcC0+c19yZG1hX2xlbiAhPSAwKSB7CisJCQl1MzIgcmtleSA9IGJlMzJfdG9fY3B1KHJldGgtPnJrZXkpOworCQkJdTY0IHZhZGRyID0gYmU2NF90b19jcHUocmV0aC0+dmFkZHIpOworCQkJaW50IG9rOworCisJCQkvKiBDaGVjayBya2V5ICYgTkFLICovCisJCQlvayA9IGlwYXRoX3JrZXlfb2soZGV2LCAmcXAtPnNfcmRtYV9zZ2UsCisJCQkJCSAgIHFwLT5zX3JkbWFfbGVuLCB2YWRkciwgcmtleSwKKwkJCQkJICAgSUJfQUNDRVNTX1JFTU9URV9SRUFEKTsKKwkJCWlmICh1bmxpa2VseSghb2spKSB7CisJCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQkJCWdvdG8gbmFja19hY2M7CisJCQl9CisJCQkvKgorCQkJICogVXBkYXRlIHRoZSBuZXh0IGV4cGVjdGVkIFBTTi4gIFdlIGFkZCAxIGxhdGVyCisJCQkgKiBiZWxvdywgc28gb25seSBhZGQgdGhlIHJlbWFpbmRlciBoZXJlLgorCQkJICovCisJCQlpZiAocXAtPnNfcmRtYV9sZW4gPiBwbXR1KQorCQkJCXFwLT5yX3BzbiArPSAocXAtPnNfcmRtYV9sZW4gLSAxKSAvIHBtdHU7CisJCX0gZWxzZSB7CisJCQlxcC0+c19yZG1hX3NnZS5zZ19saXN0ID0gTlVMTDsKKwkJCXFwLT5zX3JkbWFfc2dlLm51bV9zZ2UgPSAwOworCQkJcXAtPnNfcmRtYV9zZ2Uuc2dlLm1yID0gTlVMTDsKKwkJCXFwLT5zX3JkbWFfc2dlLnNnZS52YWRkciA9IE5VTEw7CisJCQlxcC0+c19yZG1hX3NnZS5zZ2UubGVuZ3RoID0gMDsKKwkJCXFwLT5zX3JkbWFfc2dlLnNnZS5zZ2VfbGVuZ3RoID0gMDsKKwkJfQorCQlpZiAodW5saWtlbHkoIShxcC0+cXBfYWNjZXNzX2ZsYWdzICYKKwkJCSAgICAgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpKSkKKwkJCWdvdG8gbmFja19hY2M7CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gaW5jcmVtZW50IHRoZSBNU04gaGVyZSBpbnN0ZWFkIG9mIHdoZW4gd2UKKwkJICogZmluaXNoIHNlbmRpbmcgdGhlIHJlc3VsdCBzaW5jZSBhIGR1cGxpY2F0ZSByZXF1ZXN0IHdvdWxkCisJCSAqIGluY3JlbWVudCBpdCBtb3JlIHRoYW4gb25jZS4KKwkJICovCisJCWF0b21pY19pbmMoJnFwLT5tc24pOworCQlxcC0+c19hY2tfc3RhdGUgPSBvcGNvZGU7CisJCXFwLT5zX25ha19zdGF0ZSA9IDA7CisJCXFwLT5zX2Fja19wc24gPSBwc247CisJCXFwLT5yX3BzbisrOworCQlxcC0+cl9zdGF0ZSA9IG9wY29kZTsKKwkJZ290byByZG1hZG9uZTsKKworCWNhc2UgT1AoQ09NUEFSRV9TV0FQKToKKwljYXNlIE9QKEZFVENIX0FERCk6IHsKKwkJc3RydWN0IGliX2F0b21pY19ldGggKmF0ZXRoOworCQl1NjQgdmFkZHI7CisJCXU2NCBzZGF0YTsKKwkJdTMyIHJrZXk7CisKKwkJaWYgKCFoZWFkZXJfaW5fZGF0YSkKKwkJCWF0ZXRoID0gJm9oZHItPnUuYXRvbWljX2V0aDsKKwkJZWxzZSB7CisJCQlhdGV0aCA9IChzdHJ1Y3QgaWJfYXRvbWljX2V0aCAqKWRhdGE7CisJCQlkYXRhICs9IHNpemVvZigqYXRldGgpOworCQl9CisJCXZhZGRyID0gYmU2NF90b19jcHUoYXRldGgtPnZhZGRyKTsKKwkJaWYgKHVubGlrZWx5KHZhZGRyICYgKHNpemVvZih1NjQpIC0gMSkpKQorCQkJZ290byBuYWNrX2ludjsKKwkJcmtleSA9IGJlMzJfdG9fY3B1KGF0ZXRoLT5ya2V5KTsKKwkJLyogQ2hlY2sgcmtleSAmIE5BSyAqLworCQlpZiAodW5saWtlbHkoIWlwYXRoX3JrZXlfb2soZGV2LCAmcXAtPnJfc2dlLAorCQkJCQkgICAgc2l6ZW9mKHU2NCksIHZhZGRyLCBya2V5LAorCQkJCQkgICAgSUJfQUNDRVNTX1JFTU9URV9BVE9NSUMpKSkKKwkJCWdvdG8gbmFja19hY2M7CisJCWlmICh1bmxpa2VseSghKHFwLT5xcF9hY2Nlc3NfZmxhZ3MgJgorCQkJICAgICAgIElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDKSkpCisJCQlnb3RvIG5hY2tfYWNjOworCQkvKiBQZXJmb3JtIGF0b21pYyBPUCBhbmQgc2F2ZSByZXN1bHQuICovCisJCXNkYXRhID0gYmU2NF90b19jcHUoYXRldGgtPnN3YXBfZGF0YSk7CisJCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCQlxcC0+cl9hdG9taWNfZGF0YSA9ICoodTY0ICopIHFwLT5yX3NnZS5zZ2UudmFkZHI7CisJCWlmIChvcGNvZGUgPT0gT1AoRkVUQ0hfQUREKSkKKwkJCSoodTY0ICopIHFwLT5yX3NnZS5zZ2UudmFkZHIgPQorCQkJCXFwLT5yX2F0b21pY19kYXRhICsgc2RhdGE7CisJCWVsc2UgaWYgKHFwLT5yX2F0b21pY19kYXRhID09CisJCQkgYmU2NF90b19jcHUoYXRldGgtPmNvbXBhcmVfZGF0YSkpCisJCQkqKHU2NCAqKSBxcC0+cl9zZ2Uuc2dlLnZhZGRyID0gc2RhdGE7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJCWF0b21pY19pbmMoJnFwLT5tc24pOworCQlxcC0+cl9hdG9taWNfcHNuID0gcHNuICYgSVBTX1BTTl9NQVNLOworCQlwc24gfD0gMSA8PCAzMTsKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJLyogRHJvcCBwYWNrZXQgZm9yIHVua25vd24gb3Bjb2Rlcy4gKi8KKwkJZ290byBkb25lOworCX0KKwlxcC0+cl9wc24rKzsKKwlxcC0+cl9zdGF0ZSA9IG9wY29kZTsKKwkvKiBTZW5kIGFuIEFDSyBpZiByZXF1ZXN0ZWQgb3IgcmVxdWlyZWQuICovCisJaWYgKHBzbiAmICgxIDw8IDMxKSkgeworCQkvKgorCQkgKiBDb2FsZXNjZSBBQ0tzIHVubGVzcyB0aGVyZSBpcyBhIFJETUEgUkVBRCBvcgorCQkgKiBBVE9NSUMgcGVuZGluZy4KKwkJICovCisJCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7CisJCWlmIChxcC0+c19hY2tfc3RhdGUgPT0gT1AoQUNLTk9XTEVER0UpIHx8CisJCSAgICBxcC0+c19hY2tfc3RhdGUgPCBJQl9PUENPREVfUkRNQV9SRUFEX1JFUVVFU1QpIHsKKwkJCXFwLT5zX2Fja19zdGF0ZSA9IG9wY29kZTsKKwkJCXFwLT5zX25ha19zdGF0ZSA9IDA7CisJCQlxcC0+c19hY2tfcHNuID0gcHNuOworCQkJcXAtPnNfYWNrX2F0b21pYyA9IHFwLT5yX2F0b21pY19kYXRhOworCQkJZ290byByZXNjaGVkOworCQl9CisJCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwl9Citkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwlnb3RvIGJhaWw7CisKK3Jlc2NoZWQ6CisJLyoKKwkgKiBUcnkgdG8gc2VuZCBBQ0sgcmlnaHQgYXdheSBidXQgbm90IGlmIGlwYXRoX2RvX3JjX3NlbmQoKSBpcworCSAqIGFjdGl2ZS4KKwkgKi8KKwlpZiAocXAtPnNfaGRyd29yZHMgPT0gMCAmJgorCSAgICAocXAtPnNfYWNrX3N0YXRlIDwgSUJfT1BDT0RFX1JETUFfUkVBRF9SRVFVRVNUIHx8CisJICAgICBxcC0+c19hY2tfc3RhdGUgPj0gSUJfT1BDT0RFX0NPTVBBUkVfU1dBUCkpCisJCXNlbmRfcmNfYWNrKHFwKTsKKworcmRtYWRvbmU6CisJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKworCS8qIENhbGwgaXBhdGhfZG9fcmNfc2VuZCgpIGluIGFub3RoZXIgdGhyZWFkLiAqLworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnFwLT5zX3Rhc2spOworCitiYWlsOgorCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDIxMjZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsNDUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfSVBBVEhfUkVHSVNURVJTX0gKKyNkZWZpbmUgX0lQQVRIX1JFR0lTVEVSU19ICisKKy8qCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkga2VybmVsIHNvdXJjZSwgYW5kIGJ5IHRoZSBkaWFncy4gIEl0CisgKiBkZWZpbmVzIHRoZSByZWdpc3RlcnMsIGFuZCB0aGVpciBjb250ZW50cywgZm9yIHRoZSBJbmZpbmlQYXRoIEhULTQwMAorICogY2hpcC4KKyAqLworCisvKgorICogVGhlc2UgYXJlIHRoZSBJbmZpbmlQYXRoIHJlZ2lzdGVyIGFuZCBidWZmZXIgYml0IGRlZmluaXRpb25zLAorICogdGhhdCBhcmUgdmlzaWJsZSB0byBzb2Z0d2FyZSwgYW5kIG5lZWRlZCBvbmx5IGJ5IHRoZSBrZXJuZWwKKyAqIGFuZCBkaWFnIGNvZGUuICBBIGZldywgdGhhdCBhcmUgdmlzaWJsZSB0byBwcm90b2NvbCBhbmQgdXNlcgorICogY29kZSBhcmUgaW4gaXBhdGhfY29tbW9uLmguICBTb21lIGJpdHMgYXJlIHNwZWNpZmljCisgKiB0byBhIGdpdmVuIGNoaXAgaW1wbGVtZW50YXRpb24sIGFuZCBoYXZlIGJlZW4gbW92ZWQgdG8gdGhlCisgKiBjaGlwLXNwZWNpZmljIHNvdXJjZSBmaWxlCisgKi8KKworLyoga3JfcmV2aXNpb24gYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1JfQ0hJUFJFVk1JTk9SX01BU0sgMHhGRgorI2RlZmluZSBJTkZJTklQQVRIX1JfQ0hJUFJFVk1JTk9SX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SX0NISVBSRVZNQUpPUl9NQVNLIDB4RkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SX0NISVBSRVZNQUpPUl9TSElGVCA4CisjZGVmaW5lIElORklOSVBBVEhfUl9BUkNIX01BU0sgMHhGRgorI2RlZmluZSBJTkZJTklQQVRIX1JfQVJDSF9TSElGVCAxNgorI2RlZmluZSBJTkZJTklQQVRIX1JfU09GVFdBUkVfTUFTSyAweEZGCisjZGVmaW5lIElORklOSVBBVEhfUl9TT0ZUV0FSRV9TSElGVCAyNAorI2RlZmluZSBJTkZJTklQQVRIX1JfQk9BUkRJRF9NQVNLIDB4RkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SX0JPQVJESURfU0hJRlQgMzIKKworLyoga3JfY29udHJvbCBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfQ19GUkVFWkVNT0RFIDB4MDAwMDAwMDIKKyNkZWZpbmUgSU5GSU5JUEFUSF9DX0xJTktFTkFCTEUgMHgwMDAwMDAwNAorI2RlZmluZSBJTkZJTklQQVRIX0NfUkVTRVQgMHgwMDAwMDAwMQorCisvKiBrcl9zZW5kY3RybCBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfU19ESVNBUk1QSU9CVUZfU0hJRlQgMTYKKworI2RlZmluZSBJUEFUSF9TX0FCT1JUCQkwCisjZGVmaW5lIElQQVRIX1NfUElPSU5UQlVGQVZBSUwJMQorI2RlZmluZSBJUEFUSF9TX1BJT0JVRkFWQUlMVVBECTIKKyNkZWZpbmUgSVBBVEhfU19QSU9FTkFCTEUJMworI2RlZmluZSBJUEFUSF9TX0RJU0FSTQkJMzEKKworI2RlZmluZSBJTkZJTklQQVRIX1NfQUJPUlQJCSgxVSA8PCBJUEFUSF9TX0FCT1JUKQorI2RlZmluZSBJTkZJTklQQVRIX1NfUElPSU5UQlVGQVZBSUwJKDFVIDw8IElQQVRIX1NfUElPSU5UQlVGQVZBSUwpCisjZGVmaW5lIElORklOSVBBVEhfU19QSU9CVUZBVkFJTFVQRAkoMVUgPDwgSVBBVEhfU19QSU9CVUZBVkFJTFVQRCkKKyNkZWZpbmUgSU5GSU5JUEFUSF9TX1BJT0VOQUJMRQkJKDFVIDw8IElQQVRIX1NfUElPRU5BQkxFKQorI2RlZmluZSBJTkZJTklQQVRIX1NfRElTQVJNCQkoMVUgPDwgSVBBVEhfU19ESVNBUk0pCisKKy8qIGtyX3JjdmN0cmwgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1JfUE9SVEVOQUJMRV9TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfUl9JTlRSQVZBSUxfU0hJRlQgMTYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SX1RBSUxVUEQgICAweDgwMDAwMDAwCisKKy8qIGtyX2ludHN0YXR1cywga3JfaW50Y2xlYXIsIGtyX2ludG1hc2sgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWVVJHX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVkFWQUlMX1NISUZUIDEyCisjZGVmaW5lIElORklOSVBBVEhfSV9FUlJPUiAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX0lfU1BJT1NFTlQgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1NQSU9CVUZBVkFJTCAweDIwMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfSV9HUElPICAgICAgICAgMHgxMDAwMDAwMAorCisvKiBrcl9lcnJvcnN0YXR1cywga3JfZXJyb3JjbGVhciwga3JfZXJyb3JtYXNrIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JGT1JNQVRFUlIgICAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JWQ1JDICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDJVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JJQ1JDICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDRVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JNSU5QS1RMRU4gICAgICAweDAwMDAwMDAwMDAwMDAwMDhVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JNQVhQS1RMRU4gICAgICAweDAwMDAwMDAwMDAwMDAwMTBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JMT05HUEtUTEVOICAgICAweDAwMDAwMDAwMDAwMDAwMjBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JTSE9SVFBLVExFTiAgICAweDAwMDAwMDAwMDAwMDAwNDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JVTkVYUENIQVIgICAgICAweDAwMDAwMDAwMDAwMDAwODBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JVTlNVUFZMICAgICAgICAweDAwMDAwMDAwMDAwMDAxMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JFQlAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAyMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JJQkZMT1cgICAgICAgICAweDAwMDAwMDAwMDAwMDA0MDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JCQURWRVJTSU9OICAgICAweDAwMDAwMDAwMDAwMDA4MDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMICAgICAweDAwMDAwMDAwMDAwMDEwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMICAgICAweDAwMDAwMDAwMDAwMDIwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JCQURUSUQgICAgICAgICAweDAwMDAwMDAwMDAwMDQwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JIRFJMRU4gICAgICAgICAweDAwMDAwMDAwMDAwMDgwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JIRFIgICAgICAgICAgICAweDAwMDAwMDAwMDAwMTAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JJQkxPU1RMSU5LICAgICAweDAwMDAwMDAwMDAwMjAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NNSU5QS1RMRU4gICAgICAweDAwMDAwMDAwMjAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NNQVhQS1RMRU4gICAgICAweDAwMDAwMDAwNDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NVTkRFUlJVTiAgICAgICAweDAwMDAwMDAwODAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NQS1RMRU4gICAgICAgICAweDAwMDAwMDAxMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NEUk9QUEVEU01QUEtUICAweDAwMDAwMDAyMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NEUk9QUEVEREFUQVBLVCAweDAwMDAwMDA0MDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NQSU9BUk1MQVVOQ0ggICAweDAwMDAwMDA4MDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NVTkVYUEVSUlBLVE5VTSAweDAwMDAwMDEwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NVTlNVUFZMICAgICAgICAweDAwMDAwMDIwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCAweDAwMDEwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX0lOVkFMSURBRERSICAgICAweDAwMDIwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JFU0VUICAgICAgICAgICAweDAwMDQwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX0hBUkRXQVJFICAgICAgICAweDAwMDgwMDAwMDAwMDAwMDBVTEwKKworLyoga3JfaHdlcnJjbGVhciwga3JfaHdlcnJtYXNrLCBrcl9od2VycnN0YXR1cywgYml0cyAqLworLyogVFhFTUVNUEFSSVRZRVJSIGJpdCAwOiBQSU9idWYsIDE6IFBJT3BiYywgMjogbGF1bmNoZmlmbworICogUlhFTUVNUEFSSVRZRVJSIGJpdCAwOiByY3ZidWYsIDE6IGxvb2t1cHEsIDI6IGVhZ2VyVElELCAzOiBleHBUSUQKKyAqIAkJYml0IDQ6IGZsYWcgYnVmZmVyLCA1OiBkYXRhaW5mbywgNjogaGVhZGVyIGluZm8gKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX01BU0sgMHhGVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCA0MAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSyAweDdGVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9TSElGVCA0NAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9SWERTWU5DTUVNUEFSSVRZRVJSICAweDAwMDAwMDA0MDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRCAgICAgICAgMHgwMDQwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0lCQ0JVU1RPU1BDUEFSSVRZRVJSIDB4NDAwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9JQkNCVVNGUlNQQ1BBUklUWUVSUiAweDgwMDAwMDAwMDAwMDAwMDBVTEwKKworLyoga3JfaHdkaWFnY3RybCBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfRENfRk9SQ0VUWEVNRU1QQVJJVFlFUlJfTUFTSyAweEZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9EQ19GT1JDRVRYRU1FTVBBUklUWUVSUl9TSElGVCA0MAorI2RlZmluZSBJTkZJTklQQVRIX0RDX0ZPUkNFUlhFTUVNUEFSSVRZRVJSX01BU0sgMHg3RlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0RDX0ZPUkNFUlhFTUVNUEFSSVRZRVJSX1NISUZUIDQ0CisjZGVmaW5lIElORklOSVBBVEhfRENfRk9SQ0VSWERTWU5DTUVNUEFSSVRZRVJSICAweDAwMDAwMDA0MDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9EQ19DT1VOVEVSRElTQUJMRSAgICAgICAgICAgIDB4MTAwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0RDX0NPVU5URVJXUkVOICAgICAgICAgICAgICAgMHgyMDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRENfRk9SQ0VJQkNCVVNUT1NQQ1BBUklUWUVSUiAweDQwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9EQ19GT1JDRUlCQ0JVU0ZSU1BDUEFSSVRZRVJSIDB4ODAwMDAwMDAwMDAwMDAwMFVMTAorCisvKiBrcl9pYmNjdHJsIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0ZMT1dDVFJMUEVSSU9EX01BU0sgMHhGRlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfRkxPV0NUUkxQRVJJT0RfU0hJRlQgMAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfRkxPV0NUUkxXQVRFUk1BUktfTUFTSyAweEZGVUxMCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19GTE9XQ1RSTFdBVEVSTUFSS19TSElGVCA4CisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9NQVNLIDB4M1VMTAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSAxCisvKiBjeWNsZSB0aHJvdWdoIFRTMS9UUzIgdGlsbCBPSyAqLworI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfUE9MTCAyCisvKiB3YWl0IGZvciBUUzEsIHRoZW4gZ28gb24gKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NMRUVQIDMKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NISUZUIDE2CisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX01BU0sgMHgzVUxMCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0lOSVQgMQkvKiBtb3ZlIHRvIDB4MTEgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQVJNRUQgMgkvKiBtb3ZlIHRvIDB4MjEgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQUNUSVZFIDMJLyogbW92ZSB0byAweDMxICovCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX1NISUZUIDE4CisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fTUFTSyAweDdGRlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTUFYUEtUTEVOX1NISUZUIDIwCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfTUFTSyAweEZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9TSElGVCAzMgorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9NQVNLIDB4RlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9TSElGVCAzNgorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfQ1JFRElUU0NBTEVfTUFTSyAweDdVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0NSRURJVFNDQUxFX1NISUZUIDQwCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MT09QQkFDSyAgICAgICAgICAgICAweDgwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktET1dOREVGQVVMVFNUQVRFIDB4NDAwMDAwMDAwMDAwMDAwMFVMTAorCisvKiBrcl9pYmNzdGF0dXMgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTSyAweEYKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9NQVNLIDB4NworI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUIDQKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX1RYUkVBRFkgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfVFhDUkVESVRPSyAgICAweDgwMDAwMDAwCisvKiBsaW5rIHRyYWluaW5nIHN0YXRlcyAoc2hpZnQgYnkKKyAgIElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCkgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0RJU0FCTEVECTB4MDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUAkJMHgwMQorI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUE9MTEFDVElWRQkweDAyCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMUVVJRVQJMHgwMworI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfU0xFRVBERUxBWQkweDA0CisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9TTEVFUFFVSUVUCTB4MDUKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0NGR0RFQk9VTkNFCTB4MDgKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0NGR1JDVkZDRkcJMHgwOQorI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfQ0ZHV0FJVFJNVAkweDBhCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9DRkdJRExFCTB4MGIKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJSRVRSQUlOCTB4MGMKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJXQUlUUk1UCTB4MGUKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJJRExFCTB4MGYKKy8qIGxpbmsgc3RhdGUgbWFjaGluZSBzdGF0ZXMgKHNoaWZ0IGJ5IElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpICovCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MX1NUQVRFX0RPV04JCTB4MAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9JTklUCQkweDEKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQVJNCQkweDIKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFCQkweDMKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUX0RFRkVSCTB4NAorCisvKiBjb21iaW5hdGlvbiBsaW5rIHN0YXR1cyBzdGF0ZXMgdGhhdCB3ZSB1c2Ugd2l0aCBzb21lIGZyZXF1ZW5jeSAqLworI2RlZmluZSBJUEFUSF9JQlNUQVRFX01BU0sgKChJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTSyBcCisJCTw8IElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpIHwgXAorCQkoSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9NQVNLIFwKKwkJPDxJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpKQorI2RlZmluZSBJUEFUSF9JQlNUQVRFX0lOSVQgKChJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9JTklUIFwKKwkJPDwgSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9TSElGVCkgfCBcCisJCShJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQIFwKKwkJPDxJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpKQorI2RlZmluZSBJUEFUSF9JQlNUQVRFX0FSTSAoKElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FSTSBcCisJCTw8IElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpIHwgXAorCQkoSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCBcCisJCTw8SU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSkKKyNkZWZpbmUgSVBBVEhfSUJTVEFURV9BQ1RJVkUgKChJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9BQ1RJVkUgXAorCQk8PCBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSB8IFwKKwkJKElORklOSVBBVEhfSUJDU19MVF9TVEFURV9MSU5LVVAgXAorCQk8PElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCkpCisKKy8qIGtyX2V4dHN0YXR1cyBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfRVhUU19TRVJERVNQTExMT0NLIDB4MQorI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfR1BJT0lOX01BU0sgMHhGRkZGVUxMCisjZGVmaW5lIElORklOSVBBVEhfRVhUU19HUElPSU5fU0hJRlQgNDgKKworLyoga3JfZXh0Y3RybCBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfRVhUQ19HUElPSU5WRVJUX01BU0sgMHhGRkZGVUxMCisjZGVmaW5lIElORklOSVBBVEhfRVhUQ19HUElPSU5WRVJUX1NISUZUIDMyCisjZGVmaW5lIElORklOSVBBVEhfRVhUQ19HUElPT0VfTUFTSyAweEZGRkZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX0dQSU9PRV9TSElGVCA0OAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfU0VSREVTRU5BQkxFICAgICAgICAgMHg4MDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfU0VSREVTQ09OTkVDVCAgICAgICAgMHg0MDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfU0VSREVTRU5UUlVOS0lORyAgICAgMHgyMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfU0VSREVTRElTUlhGSUZPICAgICAgMHgxMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfU0VSREVTRU5QTFBCSzEgICAgICAgMHgwODAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfU0VSREVTRU5QTFBCSzIgICAgICAgMHgwNDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfU0VSREVTRU5FTkNERUMgICAgICAgMHgwMjAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfTEVEMVNFQ1BPUlRfT04gICAgICAgMHgwMDAwMDAyMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfTEVEMlNFQ1BPUlRfT04gICAgICAgMHgwMDAwMDAxMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfTEVEMVBSSVBPUlRfT04gICAgICAgMHgwMDAwMDAwOFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfTEVEMlBSSVBPUlRfT04gICAgICAgMHgwMDAwMDAwNFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfTEVER0JMT0tfT04gICAgICAgICAgMHgwMDAwMDAwMlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfTEVER0JMRVJSX09GRiAgICAgICAgMHgwMDAwMDAwMVVMTAorCisvKiBrcl9tZGlvIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX0NMS0RJVl9NQVNLIDB4N0ZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX0NMS0RJVl9TSElGVCAzMgorI2RlZmluZSBJTkZJTklQQVRIX01ESU9fQ09NTUFORF9NQVNLIDB4N1VMTAorI2RlZmluZSBJTkZJTklQQVRIX01ESU9fQ09NTUFORF9TSElGVCAyNgorI2RlZmluZSBJTkZJTklQQVRIX01ESU9fREVWQUREUl9NQVNLIDB4MUZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX0RFVkFERFJfU0hJRlQgMjEKKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX1JFR0FERFJfTUFTSyAweDFGVUxMCisjZGVmaW5lIElORklOSVBBVEhfTURJT19SRUdBRERSX1NISUZUIDE2CisjZGVmaW5lIElORklOSVBBVEhfTURJT19EQVRBX01BU0sgMHhGRkZGVUxMCisjZGVmaW5lIElORklOSVBBVEhfTURJT19EQVRBX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX0NNRFZBTElEICAgIDB4MDAwMDAwMDA0MDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX01ESU9fUkREQVRBVkFMSUQgMHgwMDAwMDAwMDgwMDAwMDAwVUxMCisKKy8qIGtyX3BhcnRpdGlvbmtleSBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfUEtFWV9TSVpFIDE2CisjZGVmaW5lIElORklOSVBBVEhfUEtFWV9NQVNLIDB4RkZGRgorI2RlZmluZSBJTkZJTklQQVRIX1BLRVlfREVGQVVMVF9QS0VZIDB4RkZGRgorCisvKiBrcl9zZXJkZXNjb25maWcwIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfTUFTSyAgMHhmVUxMCS8qIG92ZXJhbCByZXNldCBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfU0VSREMwX1JFU0VUX1BMTCAgIDB4MTAwMDAwMDBVTEwJLyogcGxsIHJlc2V0ICovCisvKiB0eCBpZGxlIGVuYWJsZXMgKHBlciBsYW5lKSAqLworI2RlZmluZSBJTkZJTklQQVRIX1NFUkRDMF9UWElETEUgICAgICAweEYwMDBVTEwKKy8qIHJ4IGRldGVjdCBlbmFibGVzIChwZXIgbGFuZSkgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9TRVJEQzBfUlhERVRFQ1RfRU4gMHhGMDAwMFVMTAorLyogTDEgUG93ZXIgZG93bjsgdXNlIHdpdGggUlhERVRFQ1QsIE90aGVyd2lzZSBub3QgdXNlZCBvbiBJQiBzaWRlICovCisjZGVmaW5lIElORklOSVBBVEhfU0VSREMwX0wxUFdSX0ROCSAweEYwVUxMCisKKy8qIGtyX3hneHNjb25maWcgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1hHWFNfUkVTRVQgICAgICAgICAgMHg3VUxMCisjZGVmaW5lIElORklOSVBBVEhfWEdYU19NRElPQUREUl9NQVNLICAweGZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX1NISUZUIDQKKworI2RlZmluZSBJTkZJTklQQVRIX1JUX0FERFJfTUFTSyAweEZGRkZGRkZGRkZVTEwJLyogNDAgYml0cyB2YWxpZCAqLworCisvKiBUSUQgZW50cmllcyAobWVtb3J5KSwgSFQ0MDAtb25seSAqLworI2RlZmluZSBJTkZJTklQQVRIX1JUX1ZBTElEIDB4ODAwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX1JUX0FERFJfU0hJRlQgMAorI2RlZmluZSBJTkZJTklQQVRIX1JUX0JVRlNJWkVfTUFTSyAweDNGRkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SVF9CVUZTSVpFX1NISUZUIDQ4CisKKy8qCisgKiBJUEFUSF9QSU9fTUFYSUJIRFIgaXMgdGhlIG1heCBJQiBoZWFkZXIgc2l6ZSBhbGxvd2VkIGZvciBpbiBvdXIKKyAqIFBJTyBzZW5kIGJ1ZmZlcnMuICBUaGlzIGlzIHdlbGwgYmV5b25kIGFueXRoaW5nIGN1cnJlbnRseQorICogZGVmaW5lZCBpbiB0aGUgSW5maW5pQmFuZCBzcGVjLgorICovCisjZGVmaW5lIElQQVRIX1BJT19NQVhJQkhEUiAxMjgKKwordHlwZWRlZiB1NjQgaXBhdGhfZXJyX3Q7CisKKy8qIG1hc2sgb2YgZGVmaW5lZCBiaXRzIGZvciB2YXJpb3VzIHJlZ2lzdGVycyAqLworZXh0ZXJuIHU2NCBpbmZpbmlwYXRoX2lfYml0c2V4dGFudDsKK2V4dGVybiBpcGF0aF9lcnJfdCBpbmZpbmlwYXRoX2VfYml0c2V4dGFudCwgaW5maW5pcGF0aF9od2VfYml0c2V4dGFudDsKKworLyogbWFza3MgdGhhdCBhcmUgZGlmZmVyZW50IGluIHZhcmlvdXMgY2hpcHMsIG9yIG9ubHkgZXhpc3QgaW4gc29tZSBjaGlwcyAqLworZXh0ZXJuIHUzMiBpbmZpbmlwYXRoX2lfcmN2YXZhaWxfbWFzaywgaW5maW5pcGF0aF9pX3JjdnVyZ19tYXNrOworCisvKgorICogcmVnaXN0ZXIgYml0cyBmb3Igc2VsZWN0aW5nIGkyYyBkaXJlY3Rpb24gYW5kIHZhbHVlcywgdXNlZCBmb3IgSTJDIHNlcmlhbAorICogZmxhc2gKKyAqLworZXh0ZXJuIHUxNiBpcGF0aF9ncGlvX3NkYV9udW0sIGlwYXRoX2dwaW9fc2NsX251bTsKK2V4dGVybiB1NjQgaXBhdGhfZ3Bpb19zZGEsIGlwYXRoX2dwaW9fc2NsOworCisvKgorICogVGhlc2UgYXJlIHRoZSBpbmZpbmlwYXRoIGdlbmVyYWwgcmVnaXN0ZXIgbnVtYmVycyAobm90IG9mZnNldHMpLgorICogVGhlIGtlcm5lbCByZWdpc3RlcnMgYXJlIHVzZWQgZGlyZWN0bHksIHRob3NlIGJleW9uZCB0aGUga2VybmVsCisgKiByZWdpc3RlcnMgYXJlIGNhbGN1bGF0ZWQgZnJvbSBvbmUgb2YgdGhlIGJhc2UgcmVnaXN0ZXJzLiAgVGhlIHVzZSBvZgorICogYW4gaW50ZWdlciB0eXBlIGRvZXNuJ3QgYWxsb3cgdHlwZS1jaGVja2luZyBhcyB0aG9yb3VnaCBhcywgc2F5LAorICogYW4gZW51bSBidXQgYWxsb3dzIGZvciBiZXR0ZXIgaGlkaW5nIG9mIGNoaXAgZGlmZmVyZW5jZXMuCisgKi8KK3R5cGVkZWYgY29uc3QgdTE2IGlwYXRoX2tyZWcsCS8qIGluZmluaXBhdGggZ2VuZXJhbCByZWdpc3RlcnMgKi8KKyBpcGF0aF9jcmVnLAkJCS8qIGluZmluaXBhdGggY291bnRlciByZWdpc3RlcnMgKi8KKyBpcGF0aF9zcmVnOwkJCS8qIGtlcm5lbC1vbmx5LCBpbmZpbmlwYXRoIHNlbmQgcmVnaXN0ZXJzICovCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGNoaXAgcmVnaXN0ZXJzIGNvbW1vbiB0byBhbGwgaW5maW5pcGF0aCBjaGlwcywgYW5kCisgKiB1c2VkIGJvdGggYnkgdGhlIGtlcm5lbCBhbmQgdGhlIGRpYWdub3N0aWNzIG9yIG90aGVyIHVzZXIgY29kZS4KKyAqIFRoZXkgYXJlIGFsbCBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgNjQgYml0IGFjY2Vzc2VzIHdvcmsuCisgKiBTb21lIGltcGxlbWVudCBubyBtb3JlIHRoYW4gMzIgYml0cy4gIEJlY2F1c2UgNjQgYml0IHJlYWRzCisgKiByZXF1aXJlIDIgSFQgY21kcyBvbiBvcHRlcm9uLCB3ZSBhY2Nlc3MgdGhvc2Ugd2l0aCAzMiBiaXQKKyAqIHJlYWRzIGZvciBlZmZpY2llbmN5ICh0aGV5IGFyZSB3cml0dGVuIGFzIDY0IGJpdHMsIHNpbmNlCisgKiB0aGUgZXh0cmEgMzIgYml0cyBhcmUgbmVhcmx5IGZyZWUgb24gd3JpdGVzLCBhbmQgaXQgc2xpZ2h0bHkgcmVkdWNlcworICogY29tcGxleGl0eSkuICBUaGUgcmVzdCBhcmUgYWxsIGFjY2Vzc2VkIGFzIDY0IGJpdHMuCisgKi8KK3N0cnVjdCBpcGF0aF9rcmVncyB7CisJLyogVGhlc2UgYXJlIHRoZSAzMiBiaXQgZ3JvdXAgKi8KKwlpcGF0aF9rcmVnIGtyX2NvbnRyb2w7CisJaXBhdGhfa3JlZyBrcl9jb3VudGVycmVnYmFzZTsKKwlpcGF0aF9rcmVnIGtyX2ludG1hc2s7CisJaXBhdGhfa3JlZyBrcl9pbnRzdGF0dXM7CisJaXBhdGhfa3JlZyBrcl9wYWdlYWxpZ247CisJaXBhdGhfa3JlZyBrcl9wb3J0Y250OworCWlwYXRoX2tyZWcga3JfcmN2dGlkYmFzZTsKKwlpcGF0aF9rcmVnIGtyX3JjdnRpZGNudDsKKwlpcGF0aF9rcmVnIGtyX3JjdmVncmJhc2U7CisJaXBhdGhfa3JlZyBrcl9yY3ZlZ3JjbnQ7CisJaXBhdGhfa3JlZyBrcl9zY3JhdGNoOworCWlwYXRoX2tyZWcga3Jfc2VuZGN0cmw7CisJaXBhdGhfa3JlZyBrcl9zZW5kcGlvYnVmYmFzZTsKKwlpcGF0aF9rcmVnIGtyX3NlbmRwaW9idWZjbnQ7CisJaXBhdGhfa3JlZyBrcl9zZW5kcGlvc2l6ZTsKKwlpcGF0aF9rcmVnIGtyX3NlbmRyZWdiYXNlOworCWlwYXRoX2tyZWcga3JfdXNlcnJlZ2Jhc2U7CisJLyogVGhlc2UgYXJlIHRoZSA2NCBiaXQgZ3JvdXAgKi8KKwlpcGF0aF9rcmVnIGtyX2RlYnVncG9ydDsKKwlpcGF0aF9rcmVnIGtyX2RlYnVncG9ydHNlbGVjdDsKKwlpcGF0aF9rcmVnIGtyX2Vycm9yY2xlYXI7CisJaXBhdGhfa3JlZyBrcl9lcnJvcm1hc2s7CisJaXBhdGhfa3JlZyBrcl9lcnJvcnN0YXR1czsKKwlpcGF0aF9rcmVnIGtyX2V4dGN0cmw7CisJaXBhdGhfa3JlZyBrcl9leHRzdGF0dXM7CisJaXBhdGhfa3JlZyBrcl9ncGlvX2NsZWFyOworCWlwYXRoX2tyZWcga3JfZ3Bpb19tYXNrOworCWlwYXRoX2tyZWcga3JfZ3Bpb19vdXQ7CisJaXBhdGhfa3JlZyBrcl9ncGlvX3N0YXR1czsKKwlpcGF0aF9rcmVnIGtyX2h3ZGlhZ2N0cmw7CisJaXBhdGhfa3JlZyBrcl9od2VycmNsZWFyOworCWlwYXRoX2tyZWcga3JfaHdlcnJtYXNrOworCWlwYXRoX2tyZWcga3JfaHdlcnJzdGF0dXM7CisJaXBhdGhfa3JlZyBrcl9pYmNjdHJsOworCWlwYXRoX2tyZWcga3JfaWJjc3RhdHVzOworCWlwYXRoX2tyZWcga3JfaW50YmxvY2tlZDsKKwlpcGF0aF9rcmVnIGtyX2ludGNsZWFyOworCWlwYXRoX2tyZWcga3JfaW50ZXJydXB0Y29uZmlnOworCWlwYXRoX2tyZWcga3JfbWRpbzsKKwlpcGF0aF9rcmVnIGtyX3BhcnRpdGlvbmtleTsKKwlpcGF0aF9rcmVnIGtyX3JjdmJ0aHFwOworCWlwYXRoX2tyZWcga3JfcmN2YnVmYmFzZTsKKwlpcGF0aF9rcmVnIGtyX3JjdmJ1ZnNpemU7CisJaXBhdGhfa3JlZyBrcl9yY3ZjdHJsOworCWlwYXRoX2tyZWcga3JfcmN2aGRyY250OworCWlwYXRoX2tyZWcga3JfcmN2aGRyZW50c2l6ZTsKKwlpcGF0aF9rcmVnIGtyX3JjdmhkcnNpemU7CisJaXBhdGhfa3JlZyBrcl9yY3ZpbnRtZW1iYXNlOworCWlwYXRoX2tyZWcga3JfcmN2aW50bWVtc2l6ZTsKKwlpcGF0aF9rcmVnIGtyX3JldmlzaW9uOworCWlwYXRoX2tyZWcga3Jfc2VuZGJ1ZmZlcmVycm9yOworCWlwYXRoX2tyZWcga3Jfc2VuZHBpb2F2YWlsYWRkcjsKKwlpcGF0aF9rcmVnIGtyX3NlcmRlc2NvbmZpZzA7CisJaXBhdGhfa3JlZyBrcl9zZXJkZXNjb25maWcxOworCWlwYXRoX2tyZWcga3Jfc2VyZGVzc3RhdHVzOworCWlwYXRoX2tyZWcga3JfdHhpbnRtZW1iYXNlOworCWlwYXRoX2tyZWcga3JfdHhpbnRtZW1zaXplOworCWlwYXRoX2tyZWcga3JfeGd4c2NvbmZpZzsKKwlpcGF0aF9rcmVnIGtyX2licGxsY2ZnOworCS8qIHVzZSB0aGVzZSB0d28gKGFuZCB0aGUgZm9sbG93aW5nIE4gcG9ydHMpIG9ubHkgd2l0aAorCSAqIGlwYXRoX2sqX2tyZWc2NF9wb3J0KCk7IG5vdCAqa3JlZzY0KCkgKi8KKwlpcGF0aF9rcmVnIGtyX3JjdmhkcmFkZHI7CisJaXBhdGhfa3JlZyBrcl9yY3ZoZHJ0YWlsYWRkcjsKKworCS8qIHJlbWFpbmluZyByZWdpc3RlcnMgYXJlIG5vdCBwcmVzZW50IG9uIGFsbCB0eXBlcyBvZiBpbmZpbmlwYXRoCisJICAgY2hpcHMgICovCisJaXBhdGhfa3JlZyBrcl9yY3Zwa3RsZWRjbnQ7CisJaXBhdGhfa3JlZyBrcl9wY2llcmJ1ZnRlc3RyZWcwOworCWlwYXRoX2tyZWcga3JfcGNpZXJidWZ0ZXN0cmVnMTsKKwlpcGF0aF9rcmVnIGtyX3BjaWVxMHNlcmRlc2NvbmZpZzA7CisJaXBhdGhfa3JlZyBrcl9wY2llcTBzZXJkZXNjb25maWcxOworCWlwYXRoX2tyZWcga3JfcGNpZXEwc2VyZGVzc3RhdHVzOworCWlwYXRoX2tyZWcga3JfcGNpZXExc2VyZGVzY29uZmlnMDsKKwlpcGF0aF9rcmVnIGtyX3BjaWVxMXNlcmRlc2NvbmZpZzE7CisJaXBhdGhfa3JlZyBrcl9wY2llcTFzZXJkZXNzdGF0dXM7Cit9OworCitzdHJ1Y3QgaXBhdGhfY3JlZ3MgeworCWlwYXRoX2NyZWcgY3JfYmFkZm9ybWF0Y250OworCWlwYXRoX2NyZWcgY3JfZXJyaWNyY2NudDsKKwlpcGF0aF9jcmVnIGNyX2VycmxpbmtjbnQ7CisJaXBhdGhfY3JlZyBjcl9lcnJscGNyY2NudDsKKwlpcGF0aF9jcmVnIGNyX2VycnBrZXk7CisJaXBhdGhfY3JlZyBjcl9lcnJyY3ZmbG93Y3RybGNudDsKKwlpcGF0aF9jcmVnIGNyX2Vycl9ybGVuY250OworCWlwYXRoX2NyZWcgY3JfZXJyc2xlbmNudDsKKwlpcGF0aF9jcmVnIGNyX2VycnRpZGZ1bGw7CisJaXBhdGhfY3JlZyBjcl9lcnJ0aWR2YWxpZDsKKwlpcGF0aF9jcmVnIGNyX2VycnZjcmNjbnQ7CisJaXBhdGhfY3JlZyBjcl9pYnN0YXR1c2NoYW5nZTsKKwlpcGF0aF9jcmVnIGNyX2ludGNudDsKKwlpcGF0aF9jcmVnIGNyX2ludmFsaWRybGVuY250OworCWlwYXRoX2NyZWcgY3JfaW52YWxpZHNsZW5jbnQ7CisJaXBhdGhfY3JlZyBjcl9sYmZsb3dzdGFsbGNudDsKKwlpcGF0aF9jcmVnIGNyX2libGlua2Rvd25jbnQ7CisJaXBhdGhfY3JlZyBjcl9pYmxpbmtlcnJyZWNvdmNudDsKKwlpcGF0aF9jcmVnIGNyX2lic3ltYm9sZXJyY250OworCWlwYXRoX2NyZWcgY3JfcGt0cmN2Y250OworCWlwYXRoX2NyZWcgY3JfcGt0cmN2Zmxvd2N0cmxjbnQ7CisJaXBhdGhfY3JlZyBjcl9wa3RzZW5kY250OworCWlwYXRoX2NyZWcgY3JfcGt0c2VuZGZsb3djbnQ7CisJaXBhdGhfY3JlZyBjcl9wb3J0b3ZmbGNudDsKKwlpcGF0aF9jcmVnIGNyX3JjdmVicGNudDsKKwlpcGF0aF9jcmVnIGNyX3Jjdm92ZmxjbnQ7CisJaXBhdGhfY3JlZyBjcl9yeGRyb3Bwa3RjbnQ7CisJaXBhdGhfY3JlZyBjcl9zZW5kZHJvcHBlZDsKKwlpcGF0aF9jcmVnIGNyX3NlbmRzdGFsbGNudDsKKwlpcGF0aF9jcmVnIGNyX3NlbmR1bmRlcnJ1bmNudDsKKwlpcGF0aF9jcmVnIGNyX3Vuc3VwdmxjbnQ7CisJaXBhdGhfY3JlZyBjcl93b3JkcmN2Y250OworCWlwYXRoX2NyZWcgY3Jfd29yZHNlbmRjbnQ7Cit9OworCisjZW5kaWYJCQkJLyogX0lQQVRIX1JFR0lTVEVSU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4ZjRmMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwpAQCAtMCwwICsxLDU0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorCisvKgorICogQ29udmVydCB0aGUgQUVUSCBSTlIgdGltZW91dCBjb2RlIGludG8gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMuCisgKi8KK2NvbnN0IHUzMiBpYl9pcGF0aF9ybnJfdGFibGVbMzJdID0geworCTY1NiwJCQkvKiAwICovCisJMSwJCQkvKiAxICovCisJMSwJCQkvKiAyICovCisJMSwJCQkvKiAzICovCisJMSwJCQkvKiA0ICovCisJMSwJCQkvKiA1ICovCisJMSwJCQkvKiA2ICovCisJMSwJCQkvKiA3ICovCisJMSwJCQkvKiA4ICovCisJMSwJCQkvKiA5ICovCisJMSwJCQkvKiBBICovCisJMSwJCQkvKiBCICovCisJMSwJCQkvKiBDICovCisJMSwJCQkvKiBEICovCisJMiwJCQkvKiBFICovCisJMiwJCQkvKiBGICovCisJMywJCQkvKiAxMCAqLworCTQsCQkJLyogMTEgKi8KKwk2LAkJCS8qIDEyICovCisJOCwJCQkvKiAxMyAqLworCTExLAkJCS8qIDE0ICovCisJMTYsCQkJLyogMTUgKi8KKwkyMSwJCQkvKiAxNiAqLworCTMxLAkJCS8qIDE3ICovCisJNDEsCQkJLyogMTggKi8KKwk2MiwJCQkvKiAxOSAqLworCTgyLAkJCS8qIDFBICovCisJMTIzLAkJCS8qIDFCICovCisJMTY0LAkJCS8qIDFDICovCisJMjQ2LAkJCS8qIDFEICovCisJMzI4LAkJCS8qIDFFICovCisJNDkyCQkJLyogMUYgKi8KK307CisKKy8qKgorICogaXBhdGhfaW5zZXJ0X3Jucl9xdWV1ZSAtIHB1dCBRUCBvbiB0aGUgUk5SIHRpbWVvdXQgbGlzdCBmb3IgdGhlIGRldmljZQorICogQHFwOiB0aGUgUVAKKyAqCisgKiBYWFggVXNlIGEgc2ltcGxlIGxpc3QgZm9yIG5vdy4gIFdlIG1pZ2h0IG5lZWQgYSBwcmlvcml0eQorICogcXVldWUgaWYgd2UgaGF2ZSBsb3RzIG9mIFFQcyB3YWl0aW5nIGZvciBSTlIgdGltZW91dHMKKyAqIGJ1dCB0aGF0IHNob3VsZCBiZSByYXJlLgorICovCit2b2lkIGlwYXRoX2luc2VydF9ybnJfcXVldWUoc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmRldi0+cm5yd2FpdCkpCisJCWxpc3RfYWRkKCZxcC0+dGltZXJ3YWl0LCAmZGV2LT5ybnJ3YWl0KTsKKwllbHNlIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbCA9ICZkZXYtPnJucndhaXQ7CisJCXN0cnVjdCBpcGF0aF9xcCAqbnFwID0gbGlzdF9lbnRyeShsLT5uZXh0LCBzdHJ1Y3QgaXBhdGhfcXAsCisJCQkJCQkgIHRpbWVyd2FpdCk7CisKKwkJd2hpbGUgKHFwLT5zX3Jucl90aW1lb3V0ID49IG5xcC0+c19ybnJfdGltZW91dCkgeworCQkJcXAtPnNfcm5yX3RpbWVvdXQgLT0gbnFwLT5zX3Jucl90aW1lb3V0OworCQkJbCA9IGwtPm5leHQ7CisJCQlpZiAobC0+bmV4dCA9PSAmZGV2LT5ybnJ3YWl0KQorCQkJCWJyZWFrOworCQkJbnFwID0gbGlzdF9lbnRyeShsLT5uZXh0LCBzdHJ1Y3QgaXBhdGhfcXAsCisJCQkJCSB0aW1lcndhaXQpOworCQl9CisJCWxpc3RfYWRkKCZxcC0+dGltZXJ3YWl0LCBsKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBpcGF0aF9nZXRfcndxZSAtIGNvcHkgdGhlIG5leHQgUldRRSBpbnRvIHRoZSBRUCdzIFJXUUUKKyAqIEBxcDogdGhlIFFQCisgKiBAd3JfaWRfb25seTogdXBkYXRlIHdyX2lkIG9ubHksIG5vdCBTR0VzCisgKgorICogUmV0dXJuIDAgaWYgbm8gUldRRSBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSByZXR1cm4gMS4KKyAqCisgKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsIHdpdGggdGhlIFFQIHJfcnEubG9jayBoZWxkLgorICovCitpbnQgaXBhdGhfZ2V0X3J3cWUoc3RydWN0IGlwYXRoX3FwICpxcCwgaW50IHdyX2lkX29ubHkpCit7CisJc3RydWN0IGlwYXRoX3JxICpycTsKKwlzdHJ1Y3QgaXBhdGhfc3JxICpzcnE7CisJc3RydWN0IGlwYXRoX3J3cWUgKndxZTsKKwlpbnQgcmV0OworCisJaWYgKCFxcC0+aWJxcC5zcnEpIHsKKwkJcnEgPSAmcXAtPnJfcnE7CisJCWlmICh1bmxpa2VseShycS0+dGFpbCA9PSBycS0+aGVhZCkpIHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJd3FlID0gZ2V0X3J3cWVfcHRyKHJxLCBycS0+dGFpbCk7CisJCXFwLT5yX3dyX2lkID0gd3FlLT53cl9pZDsKKwkJaWYgKCF3cl9pZF9vbmx5KSB7CisJCQlxcC0+cl9zZ2Uuc2dlID0gd3FlLT5zZ19saXN0WzBdOworCQkJcXAtPnJfc2dlLnNnX2xpc3QgPSB3cWUtPnNnX2xpc3QgKyAxOworCQkJcXAtPnJfc2dlLm51bV9zZ2UgPSB3cWUtPm51bV9zZ2U7CisJCQlxcC0+cl9sZW4gPSB3cWUtPmxlbmd0aDsKKwkJfQorCQlpZiAoKytycS0+dGFpbCA+PSBycS0+c2l6ZSkKKwkJCXJxLT50YWlsID0gMDsKKwkJcmV0ID0gMTsKKwkJZ290byBiYWlsOworCX0KKworCXNycSA9IHRvX2lzcnEocXAtPmlicXAuc3JxKTsKKwlycSA9ICZzcnEtPnJxOworCXNwaW5fbG9jaygmcnEtPmxvY2spOworCWlmICh1bmxpa2VseShycS0+dGFpbCA9PSBycS0+aGVhZCkpIHsKKwkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCX0KKwl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHJxLT50YWlsKTsKKwlxcC0+cl93cl9pZCA9IHdxZS0+d3JfaWQ7CisJaWYgKCF3cl9pZF9vbmx5KSB7CisJCXFwLT5yX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07CisJCXFwLT5yX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwkJcXAtPnJfc2dlLm51bV9zZ2UgPSB3cWUtPm51bV9zZ2U7CisJCXFwLT5yX2xlbiA9IHdxZS0+bGVuZ3RoOworCX0KKwlpZiAoKytycS0+dGFpbCA+PSBycS0+c2l6ZSkKKwkJcnEtPnRhaWwgPSAwOworCWlmIChzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIpIHsKKwkJc3RydWN0IGliX2V2ZW50IGV2OworCQl1MzIgbjsKKworCQlpZiAocnEtPmhlYWQgPCBycS0+dGFpbCkKKwkJCW4gPSBycS0+c2l6ZSArIHJxLT5oZWFkIC0gcnEtPnRhaWw7CisJCWVsc2UKKwkJCW4gPSBycS0+aGVhZCAtIHJxLT50YWlsOworCQlpZiAobiA8IHNycS0+bGltaXQpIHsKKwkJCXNycS0+bGltaXQgPSAwOworCQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwkJCWV2LmRldmljZSA9IHFwLT5pYnFwLmRldmljZTsKKwkJCWV2LmVsZW1lbnQuc3JxID0gcXAtPmlicXAuc3JxOworCQkJZXYuZXZlbnQgPSBJQl9FVkVOVF9TUlFfTElNSVRfUkVBQ0hFRDsKKwkJCXNycS0+aWJzcnEuZXZlbnRfaGFuZGxlcigmZXYsCisJCQkJCQkgc3JxLT5pYnNycS5zcnFfY29udGV4dCk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwlyZXQgPSAxOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcnVjX2xvb3BiYWNrIC0gaGFuZGxlIFVDIGFuZCBSQyBsb29rYmFjayByZXF1ZXN0cworICogQHNxcDogdGhlIGxvb3BiYWNrIFFQCisgKiBAd2M6IHRoZSB3b3JrIGNvbXBsZXRpb24gZW50cnkKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX2RvX3VjX3NlbmQoKSBvciBpcGF0aF9kb19yY19zZW5kKCkgdG8KKyAqIGZvcndhcmQgYSBXUUUgYWRkcmVzc2VkIHRvIHRoZSBzYW1lIEhDQS4KKyAqIE5vdGUgdGhhdCBhbHRob3VnaCB3ZSBhcmUgc2luZ2xlIHRocmVhZGVkIGR1ZSB0byB0aGUgdGFza2xldCwgd2Ugc3RpbGwKKyAqIGhhdmUgdG8gcHJvdGVjdCBhZ2FpbnN0IHBvc3Rfc2VuZCgpLiAgV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAorICogcmVjZWl2ZSBpbnRlcnJ1cHRzIHNpbmNlIHRoaXMgaXMgYSBjb25uZWN0ZWQgcHJvdG9jb2wgYW5kIGFsbCBwYWNrZXRzCisgKiB3aWxsIHBhc3MgdGhyb3VnaCBoZXJlLgorICovCit2b2lkIGlwYXRoX3J1Y19sb29wYmFjayhzdHJ1Y3QgaXBhdGhfcXAgKnNxcCwgc3RydWN0IGliX3djICp3YykKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoc3FwLT5pYnFwLmRldmljZSk7CisJc3RydWN0IGlwYXRoX3FwICpxcDsKKwlzdHJ1Y3QgaXBhdGhfc3dxZSAqd3FlOworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBzZGF0YTsKKworCXFwID0gaXBhdGhfbG9va3VwX3FwbigmZGV2LT5xcF90YWJsZSwgc3FwLT5yZW1vdGVfcXBuKTsKKwlpZiAoIXFwKSB7CisJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJcmV0dXJuOworCX0KKworYWdhaW46CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNxcC0+c19sb2NrLCBmbGFncyk7CisKKwlpZiAoIShpYl9pcGF0aF9zdGF0ZV9vcHNbc3FwLT5zdGF0ZV0gJiBJUEFUSF9QUk9DRVNTX1NFTkRfT0spKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNxcC0+c19sb2NrLCBmbGFncyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBHZXQgdGhlIG5leHQgc2VuZCByZXF1ZXN0LiAqLworCWlmIChzcXAtPnNfbGFzdCA9PSBzcXAtPnNfaGVhZCkgeworCQkvKiBTZW5kIHdvcmsgcXVldWUgaXMgZW1wdHkuICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNxcC0+c19sb2NrLCBmbGFncyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIFdlIGNhbiByZWx5IG9uIHRoZSBlbnRyeSBub3QgY2hhbmdpbmcgd2l0aG91dCB0aGUgc19sb2NrCisJICogYmVpbmcgaGVsZCB1bnRpbCB3ZSB1cGRhdGUgc19sYXN0LgorCSAqLworCXdxZSA9IGdldF9zd3FlX3B0cihzcXAsIHNxcC0+c19sYXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcXAtPnNfbG9jaywgZmxhZ3MpOworCisJd2MtPndjX2ZsYWdzID0gMDsKKwl3Yy0+aW1tX2RhdGEgPSAwOworCisJc3FwLT5zX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07CisJc3FwLT5zX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwlzcXAtPnNfc2dlLm51bV9zZ2UgPSB3cWUtPndyLm51bV9zZ2U7CisJc3FwLT5zX2xlbiA9IHdxZS0+bGVuZ3RoOworCXN3aXRjaCAod3FlLT53ci5vcGNvZGUpIHsKKwljYXNlIElCX1dSX1NFTkRfV0lUSF9JTU06CisJCXdjLT53Y19mbGFncyA9IElCX1dDX1dJVEhfSU1NOworCQl3Yy0+aW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgSUJfV1JfU0VORDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFpcGF0aF9nZXRfcndxZShxcCwgMCkpIHsKKwkJcm5yX25hazoKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwkJCS8qIEhhbmRsZSBSTlIgTkFLICovCisJCQlpZiAocXAtPmlicXAucXBfdHlwZSA9PSBJQl9RUFRfVUMpCisJCQkJZ290byBzZW5kX2NvbXA7CisJCQlpZiAoc3FwLT5zX3Jucl9yZXRyeSA9PSAwKSB7CisJCQkJd2MtPnN0YXR1cyA9IElCX1dDX1JOUl9SRVRSWV9FWENfRVJSOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJaWYgKHNxcC0+c19ybnJfcmV0cnlfY250IDwgNykKKwkJCQlzcXAtPnNfcm5yX3JldHJ5LS07CisJCQlkZXYtPm5fcm5yX25ha3MrKzsKKwkJCXNxcC0+c19ybnJfdGltZW91dCA9CisJCQkJaWJfaXBhdGhfcm5yX3RhYmxlW3NxcC0+c19taW5fcm5yX3RpbWVyXTsKKwkJCWlwYXRoX2luc2VydF9ybnJfcXVldWUoc3FwKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCisJY2FzZSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NOgorCQl3Yy0+d2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKKwkJd2MtPmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFpcGF0aF9nZXRfcndxZShxcCwgMSkpCisJCQlnb3RvIHJucl9uYWs7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCWlmICh3cWUtPmxlbmd0aCA9PSAwKQorCQkJYnJlYWs7CisJCWlmICh1bmxpa2VseSghaXBhdGhfcmtleV9vayhkZXYsICZxcC0+cl9zZ2UsIHdxZS0+bGVuZ3RoLAorCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJlbW90ZV9hZGRyLAorCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJrZXksCisJCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSkpIHsKKwkJYWNjX2VycjoKKwkJCXdjLT5zdGF0dXMgPSBJQl9XQ19SRU1fQUNDRVNTX0VSUjsKKwkJZXJyOgorCQkJd2MtPndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJCXdjLT5vcGNvZGUgPSBpYl9pcGF0aF93Y19vcGNvZGVbd3FlLT53ci5vcGNvZGVdOworCQkJd2MtPnZlbmRvcl9lcnIgPSAwOworCQkJd2MtPmJ5dGVfbGVuID0gMDsKKwkJCXdjLT5xcF9udW0gPSBzcXAtPmlicXAucXBfbnVtOworCQkJd2MtPnNyY19xcCA9IHNxcC0+cmVtb3RlX3FwbjsKKwkJCXdjLT5wa2V5X2luZGV4ID0gMDsKKwkJCXdjLT5zbGlkID0gc3FwLT5yZW1vdGVfYWhfYXR0ci5kbGlkOworCQkJd2MtPnNsID0gc3FwLT5yZW1vdGVfYWhfYXR0ci5zbDsKKwkJCXdjLT5kbGlkX3BhdGhfYml0cyA9IDA7CisJCQl3Yy0+cG9ydF9udW0gPSAwOworCQkJaXBhdGhfc3FlcnJvcl9xcChzcXAsIHdjKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQlpZiAodW5saWtlbHkoIWlwYXRoX3JrZXlfb2soZGV2LCAmc3FwLT5zX3NnZSwgd3FlLT5sZW5ndGgsCisJCQkJCSAgICB3cWUtPndyLndyLnJkbWEucmVtb3RlX2FkZHIsCisJCQkJCSAgICB3cWUtPndyLndyLnJkbWEucmtleSwKKwkJCQkJICAgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCkpKQorCQkJZ290byBhY2NfZXJyOworCQlpZiAodW5saWtlbHkoIShxcC0+cXBfYWNjZXNzX2ZsYWdzICYKKwkJCSAgICAgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpKSkKKwkJCWdvdG8gYWNjX2VycjsKKwkJcXAtPnJfc2dlLnNnZSA9IHdxZS0+c2dfbGlzdFswXTsKKwkJcXAtPnJfc2dlLnNnX2xpc3QgPSB3cWUtPnNnX2xpc3QgKyAxOworCQlxcC0+cl9zZ2UubnVtX3NnZSA9IHdxZS0+d3IubnVtX3NnZTsKKwkJYnJlYWs7CisKKwljYXNlIElCX1dSX0FUT01JQ19DTVBfQU5EX1NXUDoKKwljYXNlIElCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREOgorCQlpZiAodW5saWtlbHkoIWlwYXRoX3JrZXlfb2soZGV2LCAmcXAtPnJfc2dlLCBzaXplb2YodTY0KSwKKwkJCQkJICAgIHdxZS0+d3Iud3IucmRtYS5yZW1vdGVfYWRkciwKKwkJCQkJICAgIHdxZS0+d3Iud3IucmRtYS5ya2V5LAorCQkJCQkgICAgSUJfQUNDRVNTX1JFTU9URV9BVE9NSUMpKSkKKwkJCWdvdG8gYWNjX2VycjsKKwkJLyogUGVyZm9ybSBhdG9taWMgT1AgYW5kIHNhdmUgcmVzdWx0LiAqLworCQlzZGF0YSA9IHdxZS0+d3Iud3IuYXRvbWljLnN3YXA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCQlxcC0+cl9hdG9taWNfZGF0YSA9ICoodTY0ICopIHFwLT5yX3NnZS5zZ2UudmFkZHI7CisJCWlmICh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERCkKKwkJCSoodTY0ICopIHFwLT5yX3NnZS5zZ2UudmFkZHIgPQorCQkJCXFwLT5yX2F0b21pY19kYXRhICsgc2RhdGE7CisJCWVsc2UgaWYgKHFwLT5yX2F0b21pY19kYXRhID09IHdxZS0+d3Iud3IuYXRvbWljLmNvbXBhcmVfYWRkKQorCQkJKih1NjQgKikgcXAtPnJfc2dlLnNnZS52YWRkciA9IHNkYXRhOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCQkqKHU2NCAqKSBzcXAtPnNfc2dlLnNnZS52YWRkciA9IHFwLT5yX2F0b21pY19kYXRhOworCQlnb3RvIHNlbmRfY29tcDsKKworCWRlZmF1bHQ6CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzZ2UgPSAmc3FwLT5zX3NnZS5zZ2U7CisJd2hpbGUgKHNxcC0+c19sZW4pIHsKKwkJdTMyIGxlbiA9IHNxcC0+c19sZW47CisKKwkJaWYgKGxlbiA+IHNnZS0+bGVuZ3RoKQorCQkJbGVuID0gc2dlLT5sZW5ndGg7CisJCUJVR19PTihsZW4gPT0gMCk7CisJCWlwYXRoX2NvcHlfc2dlKCZxcC0+cl9zZ2UsIHNnZS0+dmFkZHIsIGxlbik7CisJCXNnZS0+dmFkZHIgKz0gbGVuOworCQlzZ2UtPmxlbmd0aCAtPSBsZW47CisJCXNnZS0+c2dlX2xlbmd0aCAtPSBsZW47CisJCWlmIChzZ2UtPnNnZV9sZW5ndGggPT0gMCkgeworCQkJaWYgKC0tc3FwLT5zX3NnZS5udW1fc2dlKQorCQkJCSpzZ2UgPSAqc3FwLT5zX3NnZS5zZ19saXN0Kys7CisJCX0gZWxzZSBpZiAoc2dlLT5sZW5ndGggPT0gMCAmJiBzZ2UtPm1yICE9IE5VTEwpIHsKKwkJCWlmICgrK3NnZS0+biA+PSBJUEFUSF9TRUdTWikgeworCQkJCWlmICgrK3NnZS0+bSA+PSBzZ2UtPm1yLT5tYXBzeikKKwkJCQkJYnJlYWs7CisJCQkJc2dlLT5uID0gMDsKKwkJCX0KKwkJCXNnZS0+dmFkZHIgPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0udmFkZHI7CisJCQlzZ2UtPmxlbmd0aCA9CisJCQkJc2dlLT5tci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS5sZW5ndGg7CisJCX0KKwkJc3FwLT5zX2xlbiAtPSBsZW47CisJfQorCisJaWYgKHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1JETUFfV1JJVEUgfHwKKwkgICAgd3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9SRUFEKQorCQlnb3RvIHNlbmRfY29tcDsKKworCWlmICh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NKQorCQl3Yy0+b3Bjb2RlID0gSUJfV0NfUkVDVl9SRE1BX1dJVEhfSU1NOworCWVsc2UKKwkJd2MtPm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJd2MtPndyX2lkID0gcXAtPnJfd3JfaWQ7CisJd2MtPnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CisJd2MtPnZlbmRvcl9lcnIgPSAwOworCXdjLT5ieXRlX2xlbiA9IHdxZS0+bGVuZ3RoOworCXdjLT5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJd2MtPnNyY19xcCA9IHFwLT5yZW1vdGVfcXBuOworCS8qIFhYWCBkbyB3ZSBrbm93IHdoaWNoIHBrZXkgbWF0Y2hlZD8gT25seSBuZWVkZWQgZm9yIEdTSS4gKi8KKwl3Yy0+cGtleV9pbmRleCA9IDA7CisJd2MtPnNsaWQgPSBxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZDsKKwl3Yy0+c2wgPSBxcC0+cmVtb3RlX2FoX2F0dHIuc2w7CisJd2MtPmRsaWRfcGF0aF9iaXRzID0gMDsKKwkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCisJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCB3YywKKwkJICAgICAgIHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKTsKKworc2VuZF9jb21wOgorCXNxcC0+c19ybnJfcmV0cnkgPSBzcXAtPnNfcm5yX3JldHJ5X2NudDsKKworCWlmICghdGVzdF9iaXQoSVBBVEhfU19TSUdOQUxfUkVRX1dSLCAmc3FwLT5zX2ZsYWdzKSB8fAorCSAgICAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TSUdOQUxFRCkpIHsKKwkJd2MtPndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJd2MtPnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CisJCXdjLT5vcGNvZGUgPSBpYl9pcGF0aF93Y19vcGNvZGVbd3FlLT53ci5vcGNvZGVdOworCQl3Yy0+dmVuZG9yX2VyciA9IDA7CisJCXdjLT5ieXRlX2xlbiA9IHdxZS0+bGVuZ3RoOworCQl3Yy0+cXBfbnVtID0gc3FwLT5pYnFwLnFwX251bTsKKwkJd2MtPnNyY19xcCA9IDA7CisJCXdjLT5wa2V5X2luZGV4ID0gMDsKKwkJd2MtPnNsaWQgPSAwOworCQl3Yy0+c2wgPSAwOworCQl3Yy0+ZGxpZF9wYXRoX2JpdHMgPSAwOworCQl3Yy0+cG9ydF9udW0gPSAwOworCQlpcGF0aF9jcV9lbnRlcih0b19pY3Eoc3FwLT5pYnFwLnNlbmRfY3EpLCB3YywgMCk7CisJfQorCisJLyogVXBkYXRlIHNfbGFzdCBub3cgdGhhdCB3ZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgU1dRRSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzcXAtPnNfbG9jaywgZmxhZ3MpOworCWlmICgrK3NxcC0+c19sYXN0ID49IHNxcC0+c19zaXplKQorCQlzcXAtPnNfbGFzdCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3FwLT5zX2xvY2ssIGZsYWdzKTsKKwlnb3RvIGFnYWluOworCitkb25lOgorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZxcC0+cmVmY291bnQpKQorCQl3YWtlX3VwKCZxcC0+d2FpdCk7Cit9CisKKy8qKgorICogaXBhdGhfbm9fYnVmc19hdmFpbGFibGUgLSB0ZWxsIHRoZSBsYXllciBkcml2ZXIgd2UgbmVlZCBidWZmZXJzCisgKiBAcXA6IHRoZSBRUCB0aGF0IGNhdXNlZCB0aGUgcHJvYmxlbQorICogQGRldjogdGhlIGRldmljZSB3ZSByYW4gb3V0IG9mIGJ1ZmZlcnMgb24KKyAqCisgKiBDYWxsZWQgd2hlbiB3ZSBydW4gb3V0IG9mIFBJTyBidWZmZXJzLgorICovCit2b2lkIGlwYXRoX25vX2J1ZnNfYXZhaWxhYmxlKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmcXAtPnBpb3dhaXQpKQorCQlsaXN0X2FkZF90YWlsKCZxcC0+cGlvd2FpdCwgJmRldi0+cGlvd2FpdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwkvKgorCSAqIE5vdGUgdGhhdCBhcyBzb29uIGFzIGlwYXRoX2xheWVyX3dhbnRfYnVmZmVyKCkgaXMgY2FsbGVkIGFuZAorCSAqIHBvc3NpYmx5IGJlZm9yZSBpdCByZXR1cm5zLCBpcGF0aF9pYl9waW9idWZhdmFpbCgpCisJICogY291bGQgYmUgY2FsbGVkLiAgSWYgd2UgYXJlIHN0aWxsIGluIHRoZSB0YXNrbGV0IGZ1bmN0aW9uLAorCSAqIHRhc2tsZXRfaGlfc2NoZWR1bGUoKSB3aWxsIG5vdCBjYWxsIHVzIHVudGlsIHRoZSBuZXh0IHRpbWUKKwkgKiB0YXNrbGV0X2hpX3NjaGVkdWxlKCkgaXMgY2FsbGVkLgorCSAqIFdlIGNsZWFyIHRoZSB0YXNrbGV0IGZsYWcgbm93IHNpbmNlIHdlIGFyZSBjb21taXR0aW5nIHRvIHJldHVybgorCSAqIGZyb20gdGhlIHRhc2tsZXQgZnVuY3Rpb24uCisJICovCisJY2xlYXJfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKTsKKwl0YXNrbGV0X3VubG9jaygmcXAtPnNfdGFzayk7CisJaXBhdGhfbGF5ZXJfd2FudF9idWZmZXIoZGV2LT5kZCk7CisJZGV2LT5uX3Bpb3dhaXQrKzsKK30KKworLyoqCisgKiBpcGF0aF9wb3N0X3JjX3NlbmQgLSBwb3N0IFJDIGFuZCBVQyBzZW5kcworICogQHFwOiB0aGUgUVAgdG8gcG9zdCBvbgorICogQHdyOiB0aGUgd29yayByZXF1ZXN0IHRvIHNlbmQKKyAqLworaW50IGlwYXRoX3Bvc3RfcmNfc2VuZChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IpCit7CisJc3RydWN0IGlwYXRoX3N3cWUgKndxZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBuZXh0OworCWludCBpLCBqOworCWludCBhY2M7CisJaW50IHJldDsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgUkRNQSByZWFkcyBvciBhdG9taWMgb3BlcmF0aW9ucyBvbiBVQyBvcgorCSAqIHVuZGVmaW5lZCBvcGVyYXRpb25zLgorCSAqIE1ha2Ugc3VyZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCBmb3IgYXRvbWljcy4KKwkgKi8KKwlpZiAocXAtPmlicXAucXBfdHlwZSA9PSBJQl9RUFRfVUMpIHsKKwkJaWYgKCh1bnNpZ25lZCkgd3ItPm9wY29kZSA+PSBJQl9XUl9SRE1BX1JFQUQpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9IGVsc2UgaWYgKCh1bnNpZ25lZCkgd3ItPm9wY29kZSA+IElCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9IGVsc2UgaWYgKHdyLT5vcGNvZGUgPj0gSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQICYmCisJCSAgICh3ci0+bnVtX3NnZSA9PSAwIHx8CisJCSAgICB3ci0+c2dfbGlzdFswXS5sZW5ndGggPCBzaXplb2YodTY0KSB8fAorCQkgICAgd3ItPnNnX2xpc3RbMF0uYWRkciAmIChzaXplb2YodTY0KSAtIDEpKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCS8qIElCIHNwZWMgc2F5cyB0aGF0IG51bV9zZ2UgPT0gMCBpcyBPSy4gKi8KKwlpZiAod3ItPm51bV9zZ2UgPiBxcC0+c19tYXhfc2dlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwluZXh0ID0gcXAtPnNfaGVhZCArIDE7CisJaWYgKG5leHQgPj0gcXAtPnNfc2l6ZSkKKwkJbmV4dCA9IDA7CisJaWYgKG5leHQgPT0gcXAtPnNfbGFzdCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2hlYWQpOworCXdxZS0+d3IgPSAqd3I7CisJd3FlLT5zc24gPSBxcC0+c19zc24rKzsKKwl3cWUtPnNnX2xpc3RbMF0ubXIgPSBOVUxMOworCXdxZS0+c2dfbGlzdFswXS52YWRkciA9IE5VTEw7CisJd3FlLT5zZ19saXN0WzBdLmxlbmd0aCA9IDA7CisJd3FlLT5zZ19saXN0WzBdLnNnZV9sZW5ndGggPSAwOworCXdxZS0+bGVuZ3RoID0gMDsKKwlhY2MgPSB3ci0+b3Bjb2RlID49IElCX1dSX1JETUFfUkVBRCA/IElCX0FDQ0VTU19MT0NBTF9XUklURSA6IDA7CisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgaSsrKSB7CisJCWlmICh0b19pcGQocXAtPmlicXAucGQpLT51c2VyICYmIHdyLT5zZ19saXN0W2ldLmxrZXkgPT0gMCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpZiAod3ItPnNnX2xpc3RbaV0ubGVuZ3RoID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKCFpcGF0aF9sa2V5X29rKCZ0b19pZGV2KHFwLT5pYnFwLmRldmljZSktPmxrX3RhYmxlLAorCQkJCSAgICZ3cWUtPnNnX2xpc3Rbal0sICZ3ci0+c2dfbGlzdFtpXSwKKwkJCQkgICBhY2MpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBiYWlsOworCQl9CisJCXdxZS0+bGVuZ3RoICs9IHdyLT5zZ19saXN0W2ldLmxlbmd0aDsKKwkJaisrOworCX0KKwl3cWUtPndyLm51bV9zZ2UgPSBqOworCXFwLT5zX2hlYWQgPSBuZXh0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKworCWlmIChxcC0+aWJxcC5xcF90eXBlID09IElCX1FQVF9VQykKKwkJaXBhdGhfZG9fdWNfc2VuZCgodW5zaWduZWQgbG9uZykgcXApOworCWVsc2UKKwkJaXBhdGhfZG9fcmNfc2VuZCgodW5zaWduZWQgbG9uZykgcXApOworCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzRjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3JxLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKKworLyoqCisgKiBpcGF0aF9wb3N0X3NycV9yZWNlaXZlIC0gcG9zdCBhIHJlY2VpdmUgb24gYSBzaGFyZWQgcmVjZWl2ZSBxdWV1ZQorICogQGlic3JxOiB0aGUgU1JRIHRvIHBvc3QgdGhlIHJlY2VpdmUgb24KKyAqIEB3cjogdGhlIGxpc3Qgb2Ygd29yayByZXF1ZXN0cyB0byBwb3N0CisgKiBAYmFkX3dyOiB0aGUgZmlyc3QgV1IgdG8gY2F1c2UgYSBwcm9ibGVtIGlzIHB1dCBoZXJlCisgKgorICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK2ludCBpcGF0aF9wb3N0X3NycV9yZWNlaXZlKHN0cnVjdCBpYl9zcnEgKmlic3JxLCBzdHJ1Y3QgaWJfcmVjdl93ciAqd3IsCisJCQkgICBzdHJ1Y3QgaWJfcmVjdl93ciAqKmJhZF93cikKK3sKKwlzdHJ1Y3QgaXBhdGhfc3JxICpzcnEgPSB0b19pc3JxKGlic3JxKTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJzcnEtPmRldmljZSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJZm9yICg7IHdyOyB3ciA9IHdyLT5uZXh0KSB7CisJCXN0cnVjdCBpcGF0aF9yd3FlICp3cWU7CisJCXUzMiBuZXh0OworCQlpbnQgaSwgajsKKworCQlpZiAod3ItPm51bV9zZ2UgPiBzcnEtPnJxLm1heF9zZ2UpIHsKKwkJCSpiYWRfd3IgPSB3cjsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3JxLT5ycS5sb2NrLCBmbGFncyk7CisJCW5leHQgPSBzcnEtPnJxLmhlYWQgKyAxOworCQlpZiAobmV4dCA+PSBzcnEtPnJxLnNpemUpCisJCQluZXh0ID0gMDsKKwkJaWYgKG5leHQgPT0gc3JxLT5ycS50YWlsKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwkJCSpiYWRfd3IgPSB3cjsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQl3cWUgPSBnZXRfcndxZV9wdHIoJnNycS0+cnEsIHNycS0+cnEuaGVhZCk7CisJCXdxZS0+d3JfaWQgPSB3ci0+d3JfaWQ7CisJCXdxZS0+c2dfbGlzdFswXS5tciA9IE5VTEw7CisJCXdxZS0+c2dfbGlzdFswXS52YWRkciA9IE5VTEw7CisJCXdxZS0+c2dfbGlzdFswXS5sZW5ndGggPSAwOworCQl3cWUtPnNnX2xpc3RbMF0uc2dlX2xlbmd0aCA9IDA7CisJCXdxZS0+bGVuZ3RoID0gMDsKKwkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgaSsrKSB7CisJCQkvKiBDaGVjayBMS0VZICovCisJCQlpZiAodG9faXBkKHNycS0+aWJzcnEucGQpLT51c2VyICYmCisJCQkgICAgd3ItPnNnX2xpc3RbaV0ubGtleSA9PSAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3JxLT5ycS5sb2NrLAorCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQkqYmFkX3dyID0gd3I7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQlpZiAod3ItPnNnX2xpc3RbaV0ubGVuZ3RoID09IDApCisJCQkJY29udGludWU7CisJCQlpZiAoIWlwYXRoX2xrZXlfb2soJmRldi0+bGtfdGFibGUsCisJCQkJCSAgICZ3cWUtPnNnX2xpc3Rbal0sCisJCQkJCSAgICZ3ci0+c2dfbGlzdFtpXSwKKwkJCQkJICAgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKSkgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJKmJhZF93ciA9IHdyOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBiYWlsOworCQkJfQorCQkJd3FlLT5sZW5ndGggKz0gd3ItPnNnX2xpc3RbaV0ubGVuZ3RoOworCQkJaisrOworCQl9CisJCXdxZS0+bnVtX3NnZSA9IGo7CisJCXNycS0+cnEuaGVhZCA9IG5leHQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOworCX0KKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfY3JlYXRlX3NycSAtIGNyZWF0ZSBhIHNoYXJlZCByZWNlaXZlIHF1ZXVlCisgKiBAaWJwZDogdGhlIHByb3RlY3Rpb24gZG9tYWluIG9mIHRoZSBTUlEgdG8gY3JlYXRlCisgKiBAYXR0cjogdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFNSUQorICogQHVkYXRhOiBub3QgdXNlZCBieSB0aGUgSW5maW5pUGF0aCB2ZXJicyBkcml2ZXIKKyAqLworc3RydWN0IGliX3NycSAqaXBhdGhfY3JlYXRlX3NycShzdHJ1Y3QgaWJfcGQgKmlicGQsCisJCQkJc3RydWN0IGliX3NycV9pbml0X2F0dHIgKnNycV9pbml0X2F0dHIsCisJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgaXBhdGhfc3JxICpzcnE7CisJdTMyIHN6OworCXN0cnVjdCBpYl9zcnEgKnJldDsKKworCWlmIChzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF9zZ2UgPCAxKSB7CisJCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzcnEgPSBrbWFsbG9jKHNpemVvZigqc3JxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcnEpIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogTmVlZCB0byB1c2Ugdm1hbGxvYygpIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCBsYXJnZSAjcyBvZiBlbnRyaWVzLgorCSAqLworCXNycS0+cnEuc2l6ZSA9IHNycV9pbml0X2F0dHItPmF0dHIubWF4X3dyICsgMTsKKwlzeiA9IHNpemVvZihzdHJ1Y3QgaXBhdGhfc2dlKSAqIHNycV9pbml0X2F0dHItPmF0dHIubWF4X3NnZSArCisJCXNpemVvZihzdHJ1Y3QgaXBhdGhfcndxZSk7CisJc3JxLT5ycS53cSA9IHZtYWxsb2Moc3JxLT5ycS5zaXplICogc3opOworCWlmICghc3JxLT5ycS53cSkgeworCQlrZnJlZShzcnEpOworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJLyoKKwkgKiBpYl9jcmVhdGVfc3JxKCkgd2lsbCBpbml0aWFsaXplIHNycS0+aWJzcnEuCisJICovCisJc3Bpbl9sb2NrX2luaXQoJnNycS0+cnEubG9jayk7CisJc3JxLT5ycS5oZWFkID0gMDsKKwlzcnEtPnJxLnRhaWwgPSAwOworCXNycS0+cnEubWF4X3NnZSA9IHNycV9pbml0X2F0dHItPmF0dHIubWF4X3NnZTsKKwlzcnEtPmxpbWl0ID0gc3JxX2luaXRfYXR0ci0+YXR0ci5zcnFfbGltaXQ7CisKKwlyZXQgPSAmc3JxLT5pYnNycTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX21vZGlmeV9zcnEgLSBtb2RpZnkgYSBzaGFyZWQgcmVjZWl2ZSBxdWV1ZQorICogQGlic3JxOiB0aGUgU1JRIHRvIG1vZGlmeQorICogQGF0dHI6IHRoZSBuZXcgYXR0cmlidXRlcyBvZiB0aGUgU1JRCisgKiBAYXR0cl9tYXNrOiBpbmRpY2F0ZXMgd2hpY2ggYXR0cmlidXRlcyB0byBtb2RpZnkKKyAqLworaW50IGlwYXRoX21vZGlmeV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0ciwKKwkJICAgICBlbnVtIGliX3NycV9hdHRyX21hc2sgYXR0cl9tYXNrKQoreworCXN0cnVjdCBpcGF0aF9zcnEgKnNycSA9IHRvX2lzcnEoaWJzcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWlmIChhdHRyX21hc2sgJiBJQl9TUlFfTElNSVQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOworCQlzcnEtPmxpbWl0ID0gYXR0ci0+c3JxX2xpbWl0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwl9CisJaWYgKGF0dHJfbWFzayAmIElCX1NSUV9NQVhfV1IpIHsKKwkJdTMyIHNpemUgPSBhdHRyLT5tYXhfd3IgKyAxOworCQlzdHJ1Y3QgaXBhdGhfcndxZSAqd3EsICpwOworCQl1MzIgbjsKKwkJdTMyIHN6OworCisJCWlmIChhdHRyLT5tYXhfc2dlIDwgc3JxLT5ycS5tYXhfc2dlKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBiYWlsOworCQl9CisKKwkJc3ogPSBzaXplb2Yoc3RydWN0IGlwYXRoX3J3cWUpICsKKwkJCWF0dHItPm1heF9zZ2UgKiBzaXplb2Yoc3RydWN0IGlwYXRoX3NnZSk7CisJCXdxID0gdm1hbGxvYyhzaXplICogc3opOworCQlpZiAoIXdxKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOworCQlpZiAoc3JxLT5ycS5oZWFkIDwgc3JxLT5ycS50YWlsKQorCQkJbiA9IHNycS0+cnEuc2l6ZSArIHNycS0+cnEuaGVhZCAtIHNycS0+cnEudGFpbDsKKwkJZWxzZQorCQkJbiA9IHNycS0+cnEuaGVhZCAtIHNycS0+cnEudGFpbDsKKwkJaWYgKHNpemUgPD0gbiB8fCBzaXplIDw9IHNycS0+bGltaXQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOworCQkJdmZyZWUod3EpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQluID0gMDsKKwkJcCA9IHdxOworCQl3aGlsZSAoc3JxLT5ycS50YWlsICE9IHNycS0+cnEuaGVhZCkgeworCQkJc3RydWN0IGlwYXRoX3J3cWUgKndxZTsKKwkJCWludCBpOworCisJCQl3cWUgPSBnZXRfcndxZV9wdHIoJnNycS0+cnEsIHNycS0+cnEudGFpbCk7CisJCQlwLT53cl9pZCA9IHdxZS0+d3JfaWQ7CisJCQlwLT5sZW5ndGggPSB3cWUtPmxlbmd0aDsKKwkJCXAtPm51bV9zZ2UgPSB3cWUtPm51bV9zZ2U7CisJCQlmb3IgKGkgPSAwOyBpIDwgd3FlLT5udW1fc2dlOyBpKyspCisJCQkJcC0+c2dfbGlzdFtpXSA9IHdxZS0+c2dfbGlzdFtpXTsKKwkJCW4rKzsKKwkJCXAgPSAoc3RydWN0IGlwYXRoX3J3cWUgKikoKGNoYXIgKikgcCArIHN6KTsKKwkJCWlmICgrK3NycS0+cnEudGFpbCA+PSBzcnEtPnJxLnNpemUpCisJCQkJc3JxLT5ycS50YWlsID0gMDsKKwkJfQorCQl2ZnJlZShzcnEtPnJxLndxKTsKKwkJc3JxLT5ycS53cSA9IHdxOworCQlzcnEtPnJxLnNpemUgPSBzaXplOworCQlzcnEtPnJxLmhlYWQgPSBuOworCQlzcnEtPnJxLnRhaWwgPSAwOworCQlzcnEtPnJxLm1heF9zZ2UgPSBhdHRyLT5tYXhfc2dlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aF9xdWVyeV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3QgaXBhdGhfc3JxICpzcnEgPSB0b19pc3JxKGlic3JxKTsKKworCWF0dHItPm1heF93ciA9IHNycS0+cnEuc2l6ZSAtIDE7CisJYXR0ci0+bWF4X3NnZSA9IHNycS0+cnEubWF4X3NnZTsKKwlhdHRyLT5zcnFfbGltaXQgPSBzcnEtPmxpbWl0OworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2Rlc3Ryb3lfc3JxIC0gZGVzdHJveSBhIHNoYXJlZCByZWNlaXZlIHF1ZXVlCisgKiBAaWJzcnE6IHRoZSBTUlEgdG8gZGVzdHJveQorICovCitpbnQgaXBhdGhfZGVzdHJveV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEpCit7CisJc3RydWN0IGlwYXRoX3NycSAqc3JxID0gdG9faXNycShpYnNycSk7CisKKwl2ZnJlZShzcnEtPnJxLndxKTsKKwlrZnJlZShzcnEpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3RhdHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjA5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3RhdHMuYwpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorCitzdHJ1Y3QgaW5maW5pcGF0aF9zdGF0cyBpcGF0aF9zdGF0czsKKworLyoqCisgKiBpcGF0aF9zbmFwX2NudHIgLSBzbmFwc2hvdCBhIGNoaXAgY291bnRlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBjcmVnOiB0aGUgY291bnRlciB0byBzbmFwc2hvdAorICoKKyAqIGNhbGxlZCBmcm9tIGFkZF90aW1lciBhbmQgdXNlciBjb3VudGVyIHJlYWQgY2FsbHMsIHRvIGRlYWwgd2l0aAorICogY291bnRlcnMgdGhhdCB3cmFwIGluICJodW1hbiB0aW1lIi4gIFRoZSB3b3JkcyBzZW50IGFuZCByZWNlaXZlZCwgYW5kCisgKiB0aGUgcGFja2V0cyBzZW50IGFuZCByZWNlaXZlZCBhcmUgYWxsIHRoYXQgd2Ugd29ycnkgYWJvdXQuICBGb3Igbm93LAorICogYXQgbGVhc3QsIHdlIGRvbid0IHdvcnJ5IGFib3V0IGVycm9yIGNvdW50ZXJzLCBiZWNhdXNlIGlmIHRoZXkgd3JhcAorICogdGhhdCBxdWlja2x5LCB3ZSBwcm9iYWJseSBkb24ndCBjYXJlLiAgV2UgbWF5IGV2ZW50dWFsbHkganVzdCBtYWtlIHRoaXMKKyAqIGhhbmRsZSBhbGwgdGhlIGNvdW50ZXJzLiAgd29yZCBjb3VudGVycyBjYW4gd3JhcCBpbiBhYm91dCAyMCBzZWNvbmRzCisgKiBvZiBmdWxsIGJhbmR3aWR0aCB0cmFmZmljLCBwYWNrZXQgY291bnRlcnMgaW4gYSBmZXcgaG91cnMuCisgKi8KKwordTY0IGlwYXRoX3NuYXBfY250cihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2NyZWcgY3JlZykKK3sKKwl1MzIgdmFsLCByZWc2NCA9IDA7CisJdTY0IHZhbDY0OworCXVuc2lnbmVkIGxvbmcgdDAsIHQxOworCXU2NCByZXQ7CisKKwl0MCA9IGppZmZpZXM7CisJLyogSWYgZmFzdCBpbmNyZW1lbnQgY291bnRlcnMgYXJlIG9ubHkgMzIgYml0cywgc25hcHNob3QgdGhlbSwKKwkgKiBhbmQgbWFpbnRhaW4gdGhlbSBhcyA2NGJpdCB2YWx1ZXMgaW4gdGhlIGRyaXZlciAqLworCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIXzMyQklUQ09VTlRFUlMpICYmCisJICAgIChjcmVnID09IGRkLT5pcGF0aF9jcmVncy0+Y3Jfd29yZHNlbmRjbnQgfHwKKwkgICAgIGNyZWcgPT0gZGQtPmlwYXRoX2NyZWdzLT5jcl93b3JkcmN2Y250IHx8CisJICAgICBjcmVnID09IGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0c2VuZGNudCB8fAorCSAgICAgY3JlZyA9PSBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHJjdmNudCkpIHsKKwkJdmFsNjQgPSBpcGF0aF9yZWFkX2NyZWcoZGQsIGNyZWcpOworCQl2YWwgPSB2YWw2NCA9PSB+MFVMTCA/IH4wVSA6IDA7CisJCXJlZzY0ID0gMTsKKwl9IGVsc2UJCQkvKiB2YWw2NCBqdXN0IHRvIGtlZXAgZ2NjIHF1aWV0Li4uICovCisJCXZhbDY0ID0gdmFsID0gaXBhdGhfcmVhZF9jcmVnMzIoZGQsIGNyZWcpOworCS8qCisJICogU2VlIGlmIGEgc2Vjb25kIGhhcyBwYXNzZWQuICBUaGlzIGlzIGp1c3QgYSB3YXkgdG8gZGV0ZWN0IHRoaW5ncworCSAqIHRoYXQgYXJlIHF1aXRlIGJyb2tlbi4gIE5vcm1hbGx5IHRoaXMgc2hvdWxkIHRha2UganVzdCBhIGZldworCSAqIGN5Y2xlcyAodGhlIGNoZWNrIGlzIGZvciBsb25nIGVub3VnaCB0aGF0IHdlIGRvbid0IGNhcmUgaWYgd2UgZ2V0CisJICogcHJlLWVtcHRlZC4pICBBbiBPcHRlcm9uIEhUIE8gcmVhZCB0aW1lb3V0IGlzIDQgc2Vjb25kcyB3aXRoCisJICogbm9ybWFsIE5CIHZhbHVlcworCSAqLworCXQxID0gamlmZmllczsKKwlpZiAodGltZV9iZWZvcmUodDAgKyBIWiwgdDEpICYmIHZhbCA9PSAtMSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRXJyb3IhICBSZWFkIGNvdW50ZXIgMHgleCB0aW1lZCBvdXRcbiIsCisJCQkgICAgICBjcmVnKTsKKwkJcmV0ID0gMFVMTDsKKwkJZ290byBiYWlsOworCX0KKwlpZiAocmVnNjQpIHsKKwkJcmV0ID0gdmFsNjQ7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoY3JlZyA9PSBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRzZW5kY250KSB7CisJCWlmICh2YWwgIT0gZGQtPmlwYXRoX2xhc3Rzd29yZCkgeworCQkJZGQtPmlwYXRoX3N3b3JkICs9IHZhbCAtIGRkLT5pcGF0aF9sYXN0c3dvcmQ7CisJCQlkZC0+aXBhdGhfbGFzdHN3b3JkID0gdmFsOworCQl9CisJCXZhbDY0ID0gZGQtPmlwYXRoX3N3b3JkOworCX0gZWxzZSBpZiAoY3JlZyA9PSBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRyY3ZjbnQpIHsKKwkJaWYgKHZhbCAhPSBkZC0+aXBhdGhfbGFzdHJ3b3JkKSB7CisJCQlkZC0+aXBhdGhfcndvcmQgKz0gdmFsIC0gZGQtPmlwYXRoX2xhc3Ryd29yZDsKKwkJCWRkLT5pcGF0aF9sYXN0cndvcmQgPSB2YWw7CisJCX0KKwkJdmFsNjQgPSBkZC0+aXBhdGhfcndvcmQ7CisJfSBlbHNlIGlmIChjcmVnID09IGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0c2VuZGNudCkgeworCQlpZiAodmFsICE9IGRkLT5pcGF0aF9sYXN0c3BrdHMpIHsKKwkJCWRkLT5pcGF0aF9zcGt0cyArPSB2YWwgLSBkZC0+aXBhdGhfbGFzdHNwa3RzOworCQkJZGQtPmlwYXRoX2xhc3RzcGt0cyA9IHZhbDsKKwkJfQorCQl2YWw2NCA9IGRkLT5pcGF0aF9zcGt0czsKKwl9IGVsc2UgaWYgKGNyZWcgPT0gZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RyY3ZjbnQpIHsKKwkJaWYgKHZhbCAhPSBkZC0+aXBhdGhfbGFzdHJwa3RzKSB7CisJCQlkZC0+aXBhdGhfcnBrdHMgKz0gdmFsIC0gZGQtPmlwYXRoX2xhc3RycGt0czsKKwkJCWRkLT5pcGF0aF9sYXN0cnBrdHMgPSB2YWw7CisJCX0KKwkJdmFsNjQgPSBkZC0+aXBhdGhfcnBrdHM7CisJfSBlbHNlCisJCXZhbDY0ID0gKHU2NCkgdmFsOworCisJcmV0ID0gdmFsNjQ7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9xY2hlY2sgLSBwcmludCBkZWx0YSBvZiBlZ3JmdWxsL2hkcnFmdWxsIGVycm9ycyBmb3Iga2VybmVsIHBvcnRzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIHByaW50IHRoZSBkZWx0YSBvZiBlZ3JmdWxsL2hkcnFmdWxsIGVycm9ycyBmb3Iga2VybmVsIHBvcnRzIG5vIG1vcmUgdGhhbgorICogZXZlcnkgNSBzZWNvbmRzLiAgVXNlciBwcm9jZXNzZXMgYXJlIHByaW50ZWQgYXQgY2xvc2UsIGJ1dCBrZXJuZWwgZG9lc24ndAorICogY2xvc2UsIHNvLi4uICBTZXBhcmF0ZSByb3V0aW5lIHNvIG1heSBjYWxsIGZyb20gb3RoZXIgcGxhY2VzIHNvbWVkYXksIGFuZAorICogc28gZnVuY3Rpb24gbmFtZSB3aGVuIHByaW50ZWQgYnkgX0lQQVRIX0lORk8gaXMgbWVhbmluZ2Z1bGwKKyAqLworc3RhdGljIHZvaWQgaXBhdGhfcWNoZWNrKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzdGF0aWMgdTY0IGxhc3RfdG90X2hkcnFmdWxsOworCXNpemVfdCBibGVuID0gMDsKKwljaGFyIGJ1ZlsxMjhdOworCisJKmJ1ZiA9IDA7CisJaWYgKGRkLT5pcGF0aF9wZFswXS0+cG9ydF9oZHJxZnVsbCAhPSBkZC0+aXBhdGhfcDBfaGRycWZ1bGwpIHsKKwkJYmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgInBvcnQgMCBoZHJxZnVsbCAldSIsCisJCQkJZGQtPmlwYXRoX3BkWzBdLT5wb3J0X2hkcnFmdWxsIC0KKwkJCQlkZC0+aXBhdGhfcDBfaGRycWZ1bGwpOworCQlkZC0+aXBhdGhfcDBfaGRycWZ1bGwgPSBkZC0+aXBhdGhfcGRbMF0tPnBvcnRfaGRycWZ1bGw7CisJfQorCWlmIChpcGF0aF9zdGF0cy5zcHNfZXRpZGZ1bGwgIT0gZGQtPmlwYXRoX2xhc3RfdGlkZnVsbCkgeworCQlibGVuICs9IHNucHJpbnRmKGJ1ZiArIGJsZW4sIHNpemVvZiBidWYgLSBibGVuLAorCQkJCSAiJXNyY3ZlZ3JmdWxsICVsbHUiLAorCQkJCSBibGVuID8gIiwgIiA6ICIiLAorCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCSAoaXBhdGhfc3RhdHMuc3BzX2V0aWRmdWxsIC0KKwkJCQkgIGRkLT5pcGF0aF9sYXN0X3RpZGZ1bGwpKTsKKwkJZGQtPmlwYXRoX2xhc3RfdGlkZnVsbCA9IGlwYXRoX3N0YXRzLnNwc19ldGlkZnVsbDsKKwl9CisKKwkvKgorCSAqIHRoaXMgaXMgYWN0dWFsbHkgdGhlIG51bWJlciBvZiBoZHJxIGZ1bGwgaW50ZXJydXB0cywgbm90IGFjdHVhbAorCSAqIGV2ZW50cywgYnV0IGF0IHRoZSBtb21lbnQgdGhhdCdzIG1vc3RseSB3aGF0IEknbSBpbnRlcmVzdGVkIGluLgorCSAqIEFjdHVhbCBjb3VudCwgZXRjLiBpcyBpbiB0aGUgY291bnRlcnMsIGlmIG5lZWRlZC4gIEZvciBwcm9kdWN0aW9uCisJICogdXNlcnMgdGhpcyB3b24ndCBvcmRpbmFyaWx5IGJlIHByaW50ZWQuCisJICovCisKKwlpZiAoKGlwYXRoX2RlYnVnICYgKF9fSVBBVEhfUEtUREJHIHwgX19JUEFUSF9EQkcpKSAmJgorCSAgICBpcGF0aF9zdGF0cy5zcHNfaGRycWZ1bGwgIT0gbGFzdF90b3RfaGRycWZ1bGwpIHsKKwkJYmxlbiArPSBzbnByaW50ZihidWYgKyBibGVuLCBzaXplb2YgYnVmIC0gYmxlbiwKKwkJCQkgIiVzaGRycWZ1bGwgJWxsdSAoYWxsIHBvcnRzKSIsCisJCQkJIGJsZW4gPyAiLCAiIDogIiIsCisJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJIChpcGF0aF9zdGF0cy5zcHNfaGRycWZ1bGwgLQorCQkJCSAgbGFzdF90b3RfaGRycWZ1bGwpKTsKKwkJbGFzdF90b3RfaGRycWZ1bGwgPSBpcGF0aF9zdGF0cy5zcHNfaGRycWZ1bGw7CisJfQorCWlmIChibGVuKQorCQlpcGF0aF9kYmcoIiVzXG4iLCBidWYpOworCisJaWYgKGRkLT5pcGF0aF9wb3J0MGhlYWQgIT0gKHUzMikKKwkgICAgbGU2NF90b19jcHUoKmRkLT5pcGF0aF9oZHJxdGFpbHB0cikpIHsKKwkJaWYgKGRkLT5pcGF0aF9sYXN0cG9ydDByY3ZfY250ID09CisJCSAgICBpcGF0aF9zdGF0cy5zcHNfcG9ydDBwa3RzKSB7CisJCQlpcGF0aF9jZGJnKFBLVCwgIm1pc3NpbmcgcmN2IGludGVycnVwdHM/ICIKKwkJCQkgICAicG9ydDAgaGQ9JWxseCB0bD0leDsgcG9ydDBwa3RzICVsbHhcbiIsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkgICBsZTY0X3RvX2NwdSgqZGQtPmlwYXRoX2hkcnF0YWlscHRyKSwKKwkJCQkgICBkZC0+aXBhdGhfcG9ydDBoZWFkLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJICAgaXBhdGhfc3RhdHMuc3BzX3BvcnQwcGt0cyk7CisJCQlpcGF0aF9rcmVjZWl2ZShkZCk7CisJCX0KKwkJZGQtPmlwYXRoX2xhc3Rwb3J0MHJjdl9jbnQgPSBpcGF0aF9zdGF0cy5zcHNfcG9ydDBwa3RzOworCX0KK30KKworLyoqCisgKiBpcGF0aF9nZXRfZmFzdHN0YXRzIC0gZ2V0IHdvcmQgY291bnRlcnMgZnJvbSBjaGlwIGJlZm9yZSB0aGV5IG92ZXJmbG93CisgKiBAb3BhcXVlIC0gY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBpbmZpbmlwYXRoIGRldmljZSBpcGF0aF9kZXZkYXRhCisgKgorICogY2FsbGVkIGZyb20gYWRkX3RpbWVyCisgKi8KK3ZvaWQgaXBhdGhfZ2V0X2Zhc3RzdGF0cyh1bnNpZ25lZCBsb25nIG9wYXF1ZSkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSAoc3RydWN0IGlwYXRoX2RldmRhdGEgKikgb3BhcXVlOworCXUzMiB2YWw7CisJc3RhdGljIHVuc2lnbmVkIGNudDsKKworCS8qCisJICogZG9uJ3QgYWNjZXNzIHRoZSBjaGlwIHdoaWxlIHJ1bm5pbmcgZGlhZ3MsIG9yIG1lbW9yeSBkaWFncyBjYW4KKwkgKiBmYWlsCisJICovCisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSB8fAorCSAgICBpcGF0aF9kaWFnX2ludXNlKQorCQkvKiBidXQgcmUtYXJtIHRoZSB0aW1lciwgZm9yIGRpYWdzIGNhc2U7IHdvbid0IGh1cnQgb3RoZXIgKi8KKwkJZ290byBkb25lOworCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIXzMyQklUQ09VTlRFUlMpIHsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRzZW5kY250KTsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRyY3ZjbnQpOworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0c2VuZGNudCk7CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RyY3ZjbnQpOworCX0KKworCWlwYXRoX3FjaGVjayhkZCk7CisKKwkvKgorCSAqIGRlYWwgd2l0aCByZXBlYXQgZXJyb3Igc3VwcHJlc3Npb24uICBEb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYKKwkgKiBsYXN0IGVycm9yIHdhcyBhbG1vc3QgYSBmdWxsIGludGVydmFsIGFnbywgb3IganVzdCBhIGZldyB1c2VjcworCSAqIGFnbzsgc3RpbGwgd29uJ3QgZ2V0IG1vcmUgdGhhbiAyIHBlciBpbnRlcnZhbC4gIFdlIG1heSB3YW50CisJICogbG9uZ2VyIGludGVydmFscyBmb3IgdGhpcyBldmVudHVhbGx5LCBjb3VsZCBkbyB3aXRoIG1vZCwgY291bnRlcgorCSAqIG9yIHNlcGFyYXRlIHRpbWVyLiAgQWxzbyBzZWUgY29kZSBpbiBpcGF0aF9oYW5kbGVfZXJyb3JzKCkgYW5kCisJICogaXBhdGhfaGFuZGxlX2h3ZXJyb3JzKCkuCisJICovCisKKwlpZiAoZGQtPmlwYXRoX2xhc3RlcnJvcikKKwkJZGQtPmlwYXRoX2xhc3RlcnJvciA9IDA7CisJaWYgKGRkLT5pcGF0aF9sYXN0aHdlcnJvcikKKwkJZGQtPmlwYXRoX2xhc3Rod2Vycm9yID0gMDsKKwlpZiAoKGRkLT5pcGF0aF9tYXNrZWRlcnJzICYgfmRkLT5pcGF0aF9pZ25vcmVkZXJycykKKwkgICAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBkZC0+aXBhdGhfdW5tYXNrdGltZSkpIHsKKwkJY2hhciBlYnVmWzI1Nl07CisJCWlwYXRoX2RlY29kZV9lcnIoZWJ1Ziwgc2l6ZW9mIGVidWYsCisJCQkJIChkZC0+aXBhdGhfbWFza2VkZXJycyAmIH5kZC0+CisJCQkJICBpcGF0aF9pZ25vcmVkZXJycykpOworCQlpZiAoKGRkLT5pcGF0aF9tYXNrZWRlcnJzICYgfmRkLT5pcGF0aF9pZ25vcmVkZXJycykgJgorCQkgICAgfihJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfCBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwpKQorCQkJaXBhdGhfZGV2X2VycihkZCwgIlJlLWVuYWJsaW5nIG1hc2tlZCBlcnJvcnMgIgorCQkJCSAgICAgICIoJXMpXG4iLCBlYnVmKTsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogcmN2ZWdyZnVsbCBhbmQgcmN2aGRycWZ1bGwgYXJlICJub3JtYWwiLCBmb3Igc29tZQorCQkJICogdHlwZXMgb2YgcHJvY2Vzc2VzIChtb3N0bHkgYmVuY2htYXJrcykgdGhhdCBzZW5kCisJCQkgKiBodWdlIG51bWJlcnMgb2YgbWVzc2FnZXMsIHdoaWxlIG5vdCBwcm9jZXNzaW5nCisJCQkgKiB0aGVtLiAgU28gb25seSBjb21wbGFpbiBhYm91dCB0aGVzZSBhdCBkZWJ1ZworCQkJICogbGV2ZWwuCisJCQkgKi8KKwkJCWlwYXRoX2RiZygiRGlzYWJsaW5nIGZyZXF1ZW50IHF1ZXVlIGZ1bGwgZXJyb3JzICIKKwkJCQkgICIoJXMpXG4iLCBlYnVmKTsKKwkJfQorCQlkZC0+aXBhdGhfbWFza2VkZXJycyA9IGRkLT5pcGF0aF9pZ25vcmVkZXJyczsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcm1hc2ssCisJCQkJIH5kZC0+aXBhdGhfbWFza2VkZXJycyk7CisJfQorCisJLyogbGltaXQgcWZ1bGwgbWVzc2FnZXMgdG8gfm9uZSBwZXIgbWludXRlIHBlciBwb3J0ICovCisJaWYgKCgrK2NudCAmIDB4MTApKSB7CisJCWZvciAodmFsID0gZGQtPmlwYXRoX2NmZ3BvcnRzIC0gMTsgKChpbnQpdmFsKSA+PSAwOworCQkgICAgIHZhbC0tKSB7CisJCQlpZiAoZGQtPmlwYXRoX2xhc3RlZ3JoZWFkc1t2YWxdICE9IC0xKQorCQkJCWRkLT5pcGF0aF9sYXN0ZWdyaGVhZHNbdmFsXSA9IC0xOworCQkJaWYgKGRkLT5pcGF0aF9sYXN0cmN2aGRycXRhaWxzW3ZhbF0gIT0gLTEpCisJCQkJZGQtPmlwYXRoX2xhc3RyY3ZoZHJxdGFpbHNbdmFsXSA9IC0xOworCQl9CisJfQorCisJaWYgKGRkLT5pcGF0aF9ub3NtYV9idWZzKSB7CisJCWRkLT5pcGF0aF9ub3NtYV9zZWNzICs9IDU7CisJCWlmIChkZC0+aXBhdGhfbm9zbWFfc2VjcyA+PSAzMCkgeworCQkJaXBhdGhfY2RiZyhTTUEsICJObyBTTUEgYnVmcyBhdmFpbCAldSBzZWNvbmRzOyAiCisJCQkJICAgImNhbmNlbGxpbmcgcGVuZGluZyBzZW5kc1xuIiwKKwkJCQkgICBkZC0+aXBhdGhfbm9zbWFfc2Vjcyk7CisJCQkvKgorCQkJICogaXNzdWUgYW4gYWJvcnQgYXMgd2VsbCwgaW4gY2FzZSB3ZSBoYXZlIGEgcGFja2V0CisJCQkgKiBzdHVjayBpbiBsYXVuY2ggZmlmby4gIFRoaXMgY291bGQgY29ycnVwdCBhbgorCQkJICogb3V0Z29pbmcgdXNlciBwYWNrZXQgaW4gdGhlIHdvcnN0IGNhc2UsCisJCQkgKiBidXQgdGhpcyBpcyBhIHByZXR0eSBjYXRhc3Ryb3BoaWMsIGFueXdheS4KKwkJCSAqLworCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJCQkJIElORklOSVBBVEhfU19BQk9SVCk7CisJCQlpcGF0aF9kaXNhcm1fcGlvYnVmcyhkZCwgZGQtPmlwYXRoX2xhc3Rwb3J0X3Bpb2J1ZiwKKwkJCQkJICAgICBkZC0+aXBhdGhfcGlvYmNudDJrICsKKwkJCQkJICAgICBkZC0+aXBhdGhfcGlvYmNudDRrIC0KKwkJCQkJICAgICBkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmKTsKKwkJCS8qIHN0YXJ0IGFnYWluLCBpZiBuZWNlc3NhcnkgKi8KKwkJCWRkLT5pcGF0aF9ub3NtYV9zZWNzID0gMDsKKwkJfSBlbHNlCisJCQlpcGF0aF9jZGJnKFNNQSwgIk5vIFNNQSBidWZzIGF2YWlsICV1IHRyaWVzLCAiCisJCQkJICAgImFmdGVyICV1IHNlY29uZHNcbiIsCisJCQkJICAgZGQtPmlwYXRoX25vc21hX2J1ZnMsCisJCQkJICAgZGQtPmlwYXRoX25vc21hX3NlY3MpOworCX0KKworZG9uZToKKwltb2RfdGltZXIoJmRkLT5pcGF0aF9zdGF0c190aW1lciwgamlmZmllcyArIEhaICogNSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjM3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYwpAQCAtMCwwICsxLDc5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2xheWVyLmgiCisKKy8qKgorICogaXBhdGhfcGFyc2VfdXNob3J0IC0gcGFyc2UgYW4gdW5zaWduZWQgc2hvcnQgdmFsdWUgaW4gYW4gYXJiaXRyYXJ5IGJhc2UKKyAqIEBzdHI6IHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgbnVtYmVyCisgKiBAdmFscDogd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQKKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQsIG9yIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yCisgKi8KK2ludCBpcGF0aF9wYXJzZV91c2hvcnQoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBzaG9ydCAqdmFscCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwljaGFyICplbmQ7CisJaW50IHJldDsKKworCWlmICghaXNkaWdpdChzdHJbMF0pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwl2YWwgPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmQsIDApOworCisJaWYgKHZhbCA+IDB4ZmZmZikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJKnZhbHAgPSB2YWw7CisKKwlyZXQgPSBlbmQgKyAxIC0gc3RyOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gLUVJTlZBTDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3ZlcnNpb24oc3RydWN0IGRldmljZV9kcml2ZXIgKmRldiwgY2hhciAqYnVmKQoreworCS8qIFRoZSBzdHJpbmcgcHJpbnRlZCBoZXJlIGlzIGFscmVhZHkgbmV3bGluZS10ZXJtaW5hdGVkLiAqLworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlcyIsIGlwYXRoX2NvcmVfdmVyc2lvbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbnVtX3VuaXRzKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCQkgaXBhdGhfY291bnRfdW5pdHMoTlVMTCwgTlVMTCwgTlVMTCkpOworfQorCisjZGVmaW5lIERSSVZFUl9TVEFUKG5hbWUsIGF0dHIpIFwKKwlzdGF0aWMgc3NpemVfdCBzaG93X3N0YXRfIyNuYW1lKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsIFwKKwkJCQkJY2hhciAqYnVmKSBcCisJeyBcCisJCXJldHVybiBzY25wcmludGYoIFwKKwkJCWJ1ZiwgUEFHRV9TSVpFLCAiJWxsdVxuIiwgXAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaXBhdGhfc3RhdHMuc3BzXyAjI2F0dHIpOyBcCisJfSBcCisJc3RhdGljIERSSVZFUl9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfc3RhdF8jI25hbWUsIE5VTEwpCisKK0RSSVZFUl9TVEFUKGludHJzLCBpbnRzKTsKK0RSSVZFUl9TVEFUKGVycl9pbnRycywgZXJyaW50cyk7CitEUklWRVJfU1RBVChlcnJzLCBlcnJzKTsKK0RSSVZFUl9TVEFUKHBrdF9lcnJzLCBwa3RlcnJzKTsKK0RSSVZFUl9TVEFUKGNyY19lcnJzLCBjcmNlcnJzKTsKK0RSSVZFUl9TVEFUKGh3X2VycnMsIGh3ZXJycyk7CitEUklWRVJfU1RBVChpYl9saW5rLCBpYmxpbmspOworRFJJVkVSX1NUQVQocG9ydDBfcGt0cywgcG9ydDBwa3RzKTsKK0RSSVZFUl9TVEFUKGV0aGVyX3Nwa3RzLCBldGhlcl9zcGt0cyk7CitEUklWRVJfU1RBVChldGhlcl9ycGt0cywgZXRoZXJfcnBrdHMpOworRFJJVkVSX1NUQVQoc21hX3Nwa3RzLCBzbWFfc3BrdHMpOworRFJJVkVSX1NUQVQoc21hX3Jwa3RzLCBzbWFfcnBrdHMpOworRFJJVkVSX1NUQVQoaGRycV9mdWxsLCBoZHJxZnVsbCk7CitEUklWRVJfU1RBVChldGlkX2Z1bGwsIGV0aWRmdWxsKTsKK0RSSVZFUl9TVEFUKG5vX3Bpb2J1ZnMsIG5vcGlvYnVmcyk7CitEUklWRVJfU1RBVChwb3J0cywgcG9ydHMpOworRFJJVkVSX1NUQVQocGtleTAsIHBrZXlzWzBdKTsKK0RSSVZFUl9TVEFUKHBrZXkxLCBwa2V5c1sxXSk7CitEUklWRVJfU1RBVChwa2V5MiwgcGtleXNbMl0pOworRFJJVkVSX1NUQVQocGtleTMsIHBrZXlzWzNdKTsKKy8qIFhYWCBmaXggdGhlIGZvbGxvd2luZyB3aGVuIGR5bmFtaWMgdGFibGUgb2YgZGV2aWNlcyB1c2VkICovCitEUklWRVJfU1RBVChsaWQwLCBsaWRbMF0pOworRFJJVkVSX1NUQVQobGlkMSwgbGlkWzFdKTsKK0RSSVZFUl9TVEFUKGxpZDIsIGxpZFsyXSk7CitEUklWRVJfU1RBVChsaWQzLCBsaWRbM10pOworCitEUklWRVJfU1RBVChucG9ydHMsIG5wb3J0cyk7CitEUklWRVJfU1RBVChudWxsX2ludHIsIG51bGxpbnRyKTsKK0RSSVZFUl9TVEFUKG1heF9wa3RzX2NhbGwsIG1heHBrdHNfY2FsbCk7CitEUklWRVJfU1RBVChhdmdfcGt0c19jYWxsLCBhdmdwa3RzX2NhbGwpOworRFJJVkVSX1NUQVQocGFnZV9sb2NrcywgcGFnZWxvY2tzKTsKK0RSSVZFUl9TVEFUKHBhZ2VfdW5sb2NrcywgcGFnZXVubG9ja3MpOworRFJJVkVSX1NUQVQoa3Jkcm9wcywga3Jkcm9wcyk7CisvKiBYWFggZml4IHRoZSBmb2xsb3dpbmcgd2hlbiBkeW5hbWljIHRhYmxlIG9mIGRldmljZXMgdXNlZCAqLworRFJJVkVSX1NUQVQobWxpZDAsIG1saWRbMF0pOworRFJJVkVSX1NUQVQobWxpZDEsIG1saWRbMV0pOworRFJJVkVSX1NUQVQobWxpZDIsIG1saWRbMl0pOworRFJJVkVSX1NUQVQobWxpZDMsIG1saWRbM10pOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZHJpdmVyX3N0YXRfYXR0cmlidXRlc1tdID0geworCSZkcml2ZXJfYXR0cl9pbnRycy5hdHRyLAorCSZkcml2ZXJfYXR0cl9lcnJfaW50cnMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfZXJycy5hdHRyLAorCSZkcml2ZXJfYXR0cl9wa3RfZXJycy5hdHRyLAorCSZkcml2ZXJfYXR0cl9jcmNfZXJycy5hdHRyLAorCSZkcml2ZXJfYXR0cl9od19lcnJzLmF0dHIsCisJJmRyaXZlcl9hdHRyX2liX2xpbmsuYXR0ciwKKwkmZHJpdmVyX2F0dHJfcG9ydDBfcGt0cy5hdHRyLAorCSZkcml2ZXJfYXR0cl9ldGhlcl9zcGt0cy5hdHRyLAorCSZkcml2ZXJfYXR0cl9ldGhlcl9ycGt0cy5hdHRyLAorCSZkcml2ZXJfYXR0cl9zbWFfc3BrdHMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfc21hX3Jwa3RzLmF0dHIsCisJJmRyaXZlcl9hdHRyX2hkcnFfZnVsbC5hdHRyLAorCSZkcml2ZXJfYXR0cl9ldGlkX2Z1bGwuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbm9fcGlvYnVmcy5hdHRyLAorCSZkcml2ZXJfYXR0cl9wb3J0cy5hdHRyLAorCSZkcml2ZXJfYXR0cl9wa2V5MC5hdHRyLAorCSZkcml2ZXJfYXR0cl9wa2V5MS5hdHRyLAorCSZkcml2ZXJfYXR0cl9wa2V5Mi5hdHRyLAorCSZkcml2ZXJfYXR0cl9wa2V5My5hdHRyLAorCSZkcml2ZXJfYXR0cl9saWQwLmF0dHIsCisJJmRyaXZlcl9hdHRyX2xpZDEuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbGlkMi5hdHRyLAorCSZkcml2ZXJfYXR0cl9saWQzLmF0dHIsCisJJmRyaXZlcl9hdHRyX25wb3J0cy5hdHRyLAorCSZkcml2ZXJfYXR0cl9udWxsX2ludHIuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbWF4X3BrdHNfY2FsbC5hdHRyLAorCSZkcml2ZXJfYXR0cl9hdmdfcGt0c19jYWxsLmF0dHIsCisJJmRyaXZlcl9hdHRyX3BhZ2VfbG9ja3MuYXR0ciwKKwkmZHJpdmVyX2F0dHJfcGFnZV91bmxvY2tzLmF0dHIsCisJJmRyaXZlcl9hdHRyX2tyZHJvcHMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbWxpZDAuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbWxpZDEuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbWxpZDIuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbWxpZDMuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkcml2ZXJfc3RhdF9hdHRyX2dyb3VwID0geworCS5uYW1lID0gInN0YXRzIiwKKwkuYXR0cnMgPSBkcml2ZXJfc3RhdF9hdHRyaWJ1dGVzCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IHJldDsKKworCWlmICghZGQtPmlwYXRoX3N0YXR1c3ApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCXJldCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JWxseFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpICooZGQtPmlwYXRoX3N0YXR1c3ApKTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqaXBhdGhfc3RhdHVzX3N0cltdID0geworCSJJbml0dGVkIiwKKwkiRGlzYWJsZWQiLAorCSJBZG1pbl9EaXNhYmxlZCIsCisJIk9JQl9TTUEiLAorCSJTTUEiLAorCSJQcmVzZW50IiwKKwkiSUJfbGlua191cCIsCisJIklCX2NvbmZpZ3VyZWQiLAorCSJOb0lCY2FibGUiLAorCSJGYXRhbF9IYXJkd2FyZV9FcnJvciIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzX3N0cihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpLCBhbnk7CisJdTY0IHM7CisJc3NpemVfdCByZXQ7CisKKwlpZiAoIWRkLT5pcGF0aF9zdGF0dXNwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzID0gKihkZC0+aXBhdGhfc3RhdHVzcCk7CisJKmJ1ZiA9ICdcMCc7CisJZm9yIChhbnkgPSBpID0gMDsgcyAmJiBpcGF0aF9zdGF0dXNfc3RyW2ldOyBpKyspIHsKKwkJaWYgKHMgJiAxKSB7CisJCQlpZiAoYW55ICYmIHN0cmxjYXQoYnVmLCAiICIsIFBBR0VfU0laRSkgPj0KKwkJCSAgICBQQUdFX1NJWkUpCisJCQkJLyogb3ZlcmZsb3cgKi8KKwkJCQlicmVhazsKKwkJCWlmIChzdHJsY2F0KGJ1ZiwgaXBhdGhfc3RhdHVzX3N0cltpXSwKKwkJCQkgICAgUEFHRV9TSVpFKSA+PSBQQUdFX1NJWkUpCisJCQkJYnJlYWs7CisJCQlhbnkgPSAxOworCQl9CisJCXMgPj49IDE7CisJfQorCWlmIChhbnkpCisJCXN0cmxjYXQoYnVmLCAiXG4iLCBQQUdFX1NJWkUpOworCisJcmV0ID0gc3RybGVuKGJ1Zik7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19ib2FyZHZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwkvKiBUaGUgc3RyaW5nIHByaW50ZWQgaGVyZSBpcyBhbHJlYWR5IG5ld2xpbmUtdGVybWluYXRlZC4gKi8KKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXMiLCBkZC0+aXBhdGhfYm9hcmR2ZXJzaW9uKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19saWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHgleFxuIiwgZGQtPmlwYXRoX2xpZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2xpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUxNiBsaWQ7CisJaW50IHJldDsKKworCXJldCA9IGlwYXRoX3BhcnNlX3VzaG9ydChidWYsICZsaWQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGludmFsaWQ7CisKKwlpZiAobGlkID09IDAgfHwgbGlkID49IDB4YzAwMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGludmFsaWQ7CisJfQorCisJaXBhdGhfc2V0X3Nwc19saWQoZGQsIGxpZCwgMCk7CisKKwlnb3RvIGJhaWw7CitpbnZhbGlkOgorCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIHNldCBpbnZhbGlkIExJRFxuIik7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbWxpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JXhcbiIsIGRkLT5pcGF0aF9tbGlkKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbWxpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCB1bml0OworCXUxNiBtbGlkOworCWludCByZXQ7CisKKwlyZXQgPSBpcGF0aF9wYXJzZV91c2hvcnQoYnVmLCAmbWxpZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gaW52YWxpZDsKKworCXVuaXQgPSBkZC0+aXBhdGhfdW5pdDsKKworCWRkLT5pcGF0aF9tbGlkID0gbWxpZDsKKwlpcGF0aF9zdGF0cy5zcHNfbWxpZFt1bml0XSA9IG1saWQ7CisJaXBhdGhfbGF5ZXJfaW50cihkZCwgSVBBVEhfTEFZRVJfSU5UX0JDQVNUKTsKKworCWdvdG8gYmFpbDsKK2ludmFsaWQ6CisJaXBhdGhfZGV2X2VycihkZCwgImF0dGVtcHQgdG8gc2V0IGludmFsaWQgTUxJRFxuIik7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZ3VpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXU4ICpndWlkOworCisJZ3VpZCA9ICh1OCAqKSAmIChkZC0+aXBhdGhfZ3VpZCk7CisKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAorCQkJICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkgZ3VpZFswXSwgZ3VpZFsxXSwgZ3VpZFsyXSwgZ3VpZFszXSwKKwkJCSBndWlkWzRdLCBndWlkWzVdLCBndWlkWzZdLCBndWlkWzddKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfZ3VpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgcmV0OworCXVuc2lnbmVkIHNob3J0IGd1aWRbOF07CisJX19iZTY0IG5ndWlkOworCXU4ICpuZzsKKwlpbnQgaTsKKworCWlmIChzc2NhbmYoYnVmLCAiJWh4OiVoeDolaHg6JWh4OiVoeDolaHg6JWh4OiVoeCIsCisJCSAgICZndWlkWzBdLCAmZ3VpZFsxXSwgJmd1aWRbMl0sICZndWlkWzNdLAorCQkgICAmZ3VpZFs0XSwgJmd1aWRbNV0sICZndWlkWzZdLCAmZ3VpZFs3XSkgIT0gOCkKKwkJZ290byBpbnZhbGlkOworCisJbmcgPSAodTggKikgJm5ndWlkOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoZ3VpZFtpXSA+IDB4ZmYpCisJCQlnb3RvIGludmFsaWQ7CisJCW5nW2ldID0gZ3VpZFtpXTsKKwl9CisKKwlkZC0+aXBhdGhfZ3VpZCA9IG5ndWlkOworCWRkLT5pcGF0aF9uZ3VpZCA9IDE7CisKKwlyZXQgPSBzdHJsZW4oYnVmKTsKKwlnb3RvIGJhaWw7CisKK2ludmFsaWQ6CisJaXBhdGhfZGV2X2VycihkZCwgImF0dGVtcHQgdG8gc2V0IGludmFsaWQgR1VJRFxuIik7CisJcmV0ID0gLUVJTlZBTDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X25ndWlkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgZGQtPmlwYXRoX25ndWlkKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19zZXJpYWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlidWZbc2l6ZW9mIGRkLT5pcGF0aF9zZXJpYWxdID0gJ1wwJzsKKwltZW1jcHkoYnVmLCBkZC0+aXBhdGhfc2VyaWFsLCBzaXplb2YgZGQtPmlwYXRoX3NlcmlhbCk7CisJc3RyY2F0KGJ1ZiwgIlxuIik7CisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3VuaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgZGQtPmlwYXRoX3VuaXQpOworfQorCisjZGVmaW5lIERFVklDRV9DT1VOVEVSKG5hbWUsIGF0dHIpIFwKKwlzdGF0aWMgc3NpemVfdCBzaG93X2NvdW50ZXJfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAorCQkJCQkgICBjaGFyICpidWYpIFwKKwl7IFwKKwkJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7IFwKKwkJcmV0dXJuIHNjbnByaW50ZihcCisJCQlidWYsIFBBR0VfU0laRSwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIFwKKwkJCWlwYXRoX3NuYXBfY250ciggXAorCQkJCWRkLCBvZmZzZXRvZihzdHJ1Y3QgaW5maW5pcGF0aF9jb3VudGVycywgXAorCQkJCQkgICAgIGF0dHIpIC8gc2l6ZW9mKHU2NCkpKTsJXAorCX0gXAorCXN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X2NvdW50ZXJfIyNuYW1lLCBOVUxMKTsKKworREVWSUNFX0NPVU5URVIoaWJfbGlua19kb3duZWRzLCBJQkxpbmtEb3duZWRDbnQpOworREVWSUNFX0NPVU5URVIoaWJfbGlua19lcnJfcmVjb3ZlcmllcywgSUJMaW5rRXJyUmVjb3ZlcnlDbnQpOworREVWSUNFX0NPVU5URVIoaWJfc3RhdHVzX2NoYW5nZXMsIElCU3RhdHVzQ2hhbmdlQ250KTsKK0RFVklDRV9DT1VOVEVSKGliX3N5bWJvbF9lcnJzLCBJQlN5bWJvbEVyckNudCk7CitERVZJQ0VfQ09VTlRFUihsYl9mbG93X3N0YWxscywgTEJGbG93U3RhbGxDbnQpOworREVWSUNFX0NPVU5URVIobGJfaW50cywgTEJJbnRDbnQpOworREVWSUNFX0NPVU5URVIocnhfYmFkX2Zvcm1hdHMsIFJ4QmFkRm9ybWF0Q250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X2J1Zl9vdmZscywgUnhCdWZPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X2RhdGFfcGt0cywgUnhEYXRhUGt0Q250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X2Ryb3BwZWRfcGt0cywgUnhEcm9wcGVkUGt0Q250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X2R3b3JkcywgUnhEd29yZENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9lYnBzLCBSeEVCUENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9mbG93X2N0cmxfZXJycywgUnhGbG93Q3RybEVyckNudCk7CitERVZJQ0VfQ09VTlRFUihyeF9mbG93X3BrdHMsIFJ4Rmxvd1BrdENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9pY3JjX2VycnMsIFJ4SUNSQ0VyckNudCk7CitERVZJQ0VfQ09VTlRFUihyeF9sZW5fZXJycywgUnhMZW5FcnJDbnQpOworREVWSUNFX0NPVU5URVIocnhfbGlua19wcm9ibGVtcywgUnhMaW5rUHJvYmxlbUNudCk7CitERVZJQ0VfQ09VTlRFUihyeF9scGNyY19lcnJzLCBSeExQQ1JDRXJyQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X21heF9taW5fbGVuX2VycnMsIFJ4TWF4TWluTGVuRXJyQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3AwX2hkcl9lZ3Jfb3ZmbHMsIFJ4UDBIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3AxX2hkcl9lZ3Jfb3ZmbHMsIFJ4UDFIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3AyX2hkcl9lZ3Jfb3ZmbHMsIFJ4UDJIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3AzX2hkcl9lZ3Jfb3ZmbHMsIFJ4UDNIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3A0X2hkcl9lZ3Jfb3ZmbHMsIFJ4UDRIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3A1X2hkcl9lZ3Jfb3ZmbHMsIFJ4UDVIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3A2X2hkcl9lZ3Jfb3ZmbHMsIFJ4UDZIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3A3X2hkcl9lZ3Jfb3ZmbHMsIFJ4UDdIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3A4X2hkcl9lZ3Jfb3ZmbHMsIFJ4UDhIZHJFZ3JPdmZsQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3BrZXlfbWlzbWF0Y2hlcywgUnhQS2V5TWlzbWF0Y2hDbnQpOworREVWSUNFX0NPVU5URVIocnhfdGlkX2Z1bGxfZXJycywgUnhUSURGdWxsRXJyQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3RpZF92YWxpZF9lcnJzLCBSeFRJRFZhbGlkRXJyQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3ZjcmNfZXJycywgUnhWQ1JDRXJyQ250KTsKK0RFVklDRV9DT1VOVEVSKHR4X2RhdGFfcGt0cywgVHhEYXRhUGt0Q250KTsKK0RFVklDRV9DT1VOVEVSKHR4X2Ryb3BwZWRfcGt0cywgVHhEcm9wcGVkUGt0Q250KTsKK0RFVklDRV9DT1VOVEVSKHR4X2R3b3JkcywgVHhEd29yZENudCk7CitERVZJQ0VfQ09VTlRFUih0eF9mbG93X3BrdHMsIFR4Rmxvd1BrdENudCk7CitERVZJQ0VfQ09VTlRFUih0eF9mbG93X3N0YWxscywgVHhGbG93U3RhbGxDbnQpOworREVWSUNFX0NPVU5URVIodHhfbGVuX2VycnMsIFR4TGVuRXJyQ250KTsKK0RFVklDRV9DT1VOVEVSKHR4X21heF9taW5fbGVuX2VycnMsIFR4TWF4TWluTGVuRXJyQ250KTsKK0RFVklDRV9DT1VOVEVSKHR4X3VuZGVycnVucywgVHhVbmRlcnJ1bkNudCk7CitERVZJQ0VfQ09VTlRFUih0eF91bnN1cF92bF9lcnJzLCBUeFVuc3VwVkxFcnJDbnQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGV2X2NvdW50ZXJfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9pYl9saW5rX2Rvd25lZHMuYXR0ciwKKwkmZGV2X2F0dHJfaWJfbGlua19lcnJfcmVjb3Zlcmllcy5hdHRyLAorCSZkZXZfYXR0cl9pYl9zdGF0dXNfY2hhbmdlcy5hdHRyLAorCSZkZXZfYXR0cl9pYl9zeW1ib2xfZXJycy5hdHRyLAorCSZkZXZfYXR0cl9sYl9mbG93X3N0YWxscy5hdHRyLAorCSZkZXZfYXR0cl9sYl9pbnRzLmF0dHIsCisJJmRldl9hdHRyX3J4X2JhZF9mb3JtYXRzLmF0dHIsCisJJmRldl9hdHRyX3J4X2J1Zl9vdmZscy5hdHRyLAorCSZkZXZfYXR0cl9yeF9kYXRhX3BrdHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfZHJvcHBlZF9wa3RzLmF0dHIsCisJJmRldl9hdHRyX3J4X2R3b3Jkcy5hdHRyLAorCSZkZXZfYXR0cl9yeF9lYnBzLmF0dHIsCisJJmRldl9hdHRyX3J4X2Zsb3dfY3RybF9lcnJzLmF0dHIsCisJJmRldl9hdHRyX3J4X2Zsb3dfcGt0cy5hdHRyLAorCSZkZXZfYXR0cl9yeF9pY3JjX2VycnMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfbGVuX2VycnMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfbGlua19wcm9ibGVtcy5hdHRyLAorCSZkZXZfYXR0cl9yeF9scGNyY19lcnJzLmF0dHIsCisJJmRldl9hdHRyX3J4X21heF9taW5fbGVuX2VycnMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfcDBfaGRyX2Vncl9vdmZscy5hdHRyLAorCSZkZXZfYXR0cl9yeF9wMV9oZHJfZWdyX292ZmxzLmF0dHIsCisJJmRldl9hdHRyX3J4X3AyX2hkcl9lZ3Jfb3ZmbHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfcDNfaGRyX2Vncl9vdmZscy5hdHRyLAorCSZkZXZfYXR0cl9yeF9wNF9oZHJfZWdyX292ZmxzLmF0dHIsCisJJmRldl9hdHRyX3J4X3A1X2hkcl9lZ3Jfb3ZmbHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfcDZfaGRyX2Vncl9vdmZscy5hdHRyLAorCSZkZXZfYXR0cl9yeF9wN19oZHJfZWdyX292ZmxzLmF0dHIsCisJJmRldl9hdHRyX3J4X3A4X2hkcl9lZ3Jfb3ZmbHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfcGtleV9taXNtYXRjaGVzLmF0dHIsCisJJmRldl9hdHRyX3J4X3RpZF9mdWxsX2VycnMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfdGlkX3ZhbGlkX2VycnMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfdmNyY19lcnJzLmF0dHIsCisJJmRldl9hdHRyX3R4X2RhdGFfcGt0cy5hdHRyLAorCSZkZXZfYXR0cl90eF9kcm9wcGVkX3BrdHMuYXR0ciwKKwkmZGV2X2F0dHJfdHhfZHdvcmRzLmF0dHIsCisJJmRldl9hdHRyX3R4X2Zsb3dfcGt0cy5hdHRyLAorCSZkZXZfYXR0cl90eF9mbG93X3N0YWxscy5hdHRyLAorCSZkZXZfYXR0cl90eF9sZW5fZXJycy5hdHRyLAorCSZkZXZfYXR0cl90eF9tYXhfbWluX2xlbl9lcnJzLmF0dHIsCisJJmRldl9hdHRyX3R4X3VuZGVycnVucy5hdHRyLAorCSZkZXZfYXR0cl90eF91bnN1cF92bF9lcnJzLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGV2X2NvdW50ZXJfYXR0cl9ncm91cCA9IHsKKwkubmFtZSA9ICJjb3VudGVycyIsCisJLmF0dHJzID0gZGV2X2NvdW50ZXJfYXR0cmlidXRlcworfTsKKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKGNvdW50IDwgNSB8fCBtZW1jbXAoYnVmLCAicmVzZXQiLCA1KSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0RJU0FCTEVEKSB7CisJCS8qCisJCSAqIHBvc3QtcmVzZXQgaW5pdCB3b3VsZCByZS1lbmFibGUgaW50ZXJydXB0cywgZXRjLgorCQkgKiBzbyBkb24ndCBhbGxvdyByZXNldCBvbiBkaXNhYmxlZCBkZXZpY2VzLiAgTm90CisJCSAqIHBlcmZlY3QgZXJyb3IsIGJ1dCBhYm91dCB0aGUgYmVzdCBjaG9pY2UuCisJCSAqLworCQlkZXZfaW5mbyhkZXYsIlVuaXQgJWQgaXMgZGlzYWJsZWQsIGNhbid0IHJlc2V0XG4iLAorCQkJIGRkLT5pcGF0aF91bml0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJcmV0ID0gaXBhdGhfcmVzZXRfZGV2aWNlKGRkLT5pcGF0aF91bml0KTsKK2JhaWw6CisJcmV0dXJuIHJldDwwID8gcmV0IDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2xpbmtfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0LCByOworCXUxNiBzdGF0ZTsKKworCXJldCA9IGlwYXRoX3BhcnNlX3VzaG9ydChidWYsICZzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gaW52YWxpZDsKKworCXIgPSBpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlKGRkLCBzdGF0ZSk7CisJaWYgKHIgPCAwKSB7CisJCXJldCA9IHI7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlnb3RvIGJhaWw7CitpbnZhbGlkOgorCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIHNldCBpbnZhbGlkIGxpbmsgc3RhdGVcbiIpOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X210dShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgZGQtPmlwYXRoX2libXR1KTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXR1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY29uc3QgY2hhciAqYnVmLAorCQkJICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCByZXQ7CisJdTE2IG10dSA9IDA7CisJaW50IHI7CisKKwlyZXQgPSBpcGF0aF9wYXJzZV91c2hvcnQoYnVmLCAmbXR1KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBpbnZhbGlkOworCisJciA9IGlwYXRoX2xheWVyX3NldF9tdHUoZGQsIG10dSk7CisJaWYgKHIgPCAwKQorCQlyZXQgPSByOworCisJZ290byBiYWlsOworaW52YWxpZDoKKwlpcGF0aF9kZXZfZXJyKGRkLCAiYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBNVFVcbiIpOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2VuYWJsZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCisJCQkgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0RJU0FCTEVEKSA/IDAgOiAxKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgcmV0OworCXUxNiBlbmFibGUgPSAwOworCisJcmV0ID0gaXBhdGhfcGFyc2VfdXNob3J0KGJ1ZiwgJmVuYWJsZSk7CisJaWYgKHJldCA8IDApIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgImF0dGVtcHQgdG8gdXNlIG5vbi1udW1lcmljIG9uIGVuYWJsZVxuIik7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoZW5hYmxlKSB7CisJCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0RJU0FCTEVEKSkKKwkJCWdvdG8gYmFpbDsKKworCQlkZXZfaW5mbyhkZXYsICJFbmFibGluZyB1bml0ICVkXG4iLCBkZC0+aXBhdGhfdW5pdCk7CisJCS8qIHNhbWUgYXMgcG9zdC1yZXNldCAqLworCQlyZXQgPSBpcGF0aF9pbml0X2NoaXAoZGQsIDEpOworCQlpZiAocmV0KQorCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byBlbmFibGUgdW5pdCAlZFxuIiwKKwkJCQkgICAgICBkZC0+aXBhdGhfdW5pdCk7CisJCWVsc2UgeworCQkJZGQtPmlwYXRoX2ZsYWdzICY9IH5JUEFUSF9ESVNBQkxFRDsKKwkJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0FETUlOX0RJU0FCTEVEOworCQl9CisJfQorCWVsc2UgaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfRElTQUJMRUQpKSB7CisJCWRldl9pbmZvKGRldiwgIkRpc2FibGluZyB1bml0ICVkXG4iLCBkZC0+aXBhdGhfdW5pdCk7CisJCWlwYXRoX3NodXRkb3duX2RldmljZShkZCk7CisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9ESVNBQkxFRDsKKwkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9IElQQVRIX1NUQVRVU19BRE1JTl9ESVNBQkxFRDsKKwl9CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKG51bV91bml0cywgU19JUlVHTywgc2hvd19udW1fdW5pdHMsIE5VTEwpOworc3RhdGljIERSSVZFUl9BVFRSKHZlcnNpb24sIFNfSVJVR08sIHNob3dfdmVyc2lvbiwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkcml2ZXJfYXR0cmlidXRlc1tdID0geworCSZkcml2ZXJfYXR0cl9udW1fdW5pdHMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfdmVyc2lvbi5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRyaXZlcl9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGRyaXZlcl9hdHRyaWJ1dGVzCit9OworCitzdGF0aWMgREVWSUNFX0FUVFIoZ3VpZCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZ3VpZCwgc3RvcmVfZ3VpZCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGlkLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19saWQsIHN0b3JlX2xpZCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGlua19zdGF0ZSwgU19JV1VTUiwgTlVMTCwgc3RvcmVfbGlua19zdGF0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobWxpZCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbWxpZCwgc3RvcmVfbWxpZCk7CitzdGF0aWMgREVWSUNFX0FUVFIobXR1LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19tdHUsIHN0b3JlX210dSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlZCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZW5hYmxlZCwgc3RvcmVfZW5hYmxlZCk7CitzdGF0aWMgREVWSUNFX0FUVFIobmd1aWQsIFNfSVJVR08sIHNob3dfbmd1aWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHJlc2V0LCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9yZXNldCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc2VyaWFsLCBTX0lSVUdPLCBzaG93X3NlcmlhbCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzX3N0ciwgU19JUlVHTywgc2hvd19zdGF0dXNfc3RyLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihib2FyZHZlcnNpb24sIFNfSVJVR08sIHNob3dfYm9hcmR2ZXJzaW9uLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih1bml0LCBTX0lSVUdPLCBzaG93X3VuaXQsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGV2X2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfZ3VpZC5hdHRyLAorCSZkZXZfYXR0cl9saWQuYXR0ciwKKwkmZGV2X2F0dHJfbGlua19zdGF0ZS5hdHRyLAorCSZkZXZfYXR0cl9tbGlkLmF0dHIsCisJJmRldl9hdHRyX210dS5hdHRyLAorCSZkZXZfYXR0cl9uZ3VpZC5hdHRyLAorCSZkZXZfYXR0cl9zZXJpYWwuYXR0ciwKKwkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX3N0YXR1c19zdHIuYXR0ciwKKwkmZGV2X2F0dHJfYm9hcmR2ZXJzaW9uLmF0dHIsCisJJmRldl9hdHRyX3VuaXQuYXR0ciwKKwkmZGV2X2F0dHJfZW5hYmxlZC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRldl9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGRldl9hdHRyaWJ1dGVzCit9OworCisvKioKKyAqIGlwYXRoX2V4cG9zZV9yZXNldCAtIGNyZWF0ZSBhIGRldmljZSByZXNldCBmaWxlCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIE9ubHkgZXhwb3NlIGEgZmlsZSB0aGF0IGxldHMgdXMgcmVzZXQgdGhlIGRldmljZSBhZnRlciBzb21lb25lCisgKiBlbnRlcnMgZGlhZyBtb2RlLiAgQSBkZXZpY2UgcmVzZXQgaXMgcXVpdGUgbGlrZWx5IHRvIGNyYXNoIHRoZQorICogbWFjaGluZSBlbnRpcmVseSwgc28gd2UgZG9uJ3Qgd2FudCB0byBub3JtYWxseSBtYWtlIGl0CisgKiBhdmFpbGFibGUuCisgKgorICogQ2FsbGVkIHdpdGggaXBhdGhfbXV0ZXggaGVsZC4KKyAqLworaW50IGlwYXRoX2V4cG9zZV9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RhdGljIGludCBleHBvc2VkOworCWludCByZXQ7CisKKwlpZiAoIWV4cG9zZWQpIHsKKwkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Jlc2V0KTsKKwkJZXhwb3NlZCA9IDE7CisJfQorCWVsc2UKKwkJcmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aF9kcml2ZXJfY3JlYXRlX2dyb3VwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJaW50IHJldDsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZHJ2LT5rb2JqLCAmZHJpdmVyX2F0dHJfZ3JvdXApOworCWlmIChyZXQpCisJCWdvdG8gYmFpbDsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZHJ2LT5rb2JqLCAmZHJpdmVyX3N0YXRfYXR0cl9ncm91cCk7CisJaWYgKHJldCkKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkcnYtPmtvYmosICZkcml2ZXJfYXR0cl9ncm91cCk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpcGF0aF9kcml2ZXJfcmVtb3ZlX2dyb3VwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkcnYtPmtvYmosICZkcml2ZXJfc3RhdF9hdHRyX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRydi0+a29iaiwgJmRyaXZlcl9hdHRyX2dyb3VwKTsKK30KKworaW50IGlwYXRoX2RldmljZV9jcmVhdGVfZ3JvdXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldDsKKwljaGFyIHVuaXRbNV07CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmRldl9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQorCQlnb3RvIGJhaWw7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmRldl9jb3VudGVyX2F0dHJfZ3JvdXApOworCWlmIChyZXQpCisJCWdvdG8gYmFpbF9hdHRyczsKKworCXNucHJpbnRmKHVuaXQsIHNpemVvZih1bml0KSwgIiUwMmQiLCBkZC0+aXBhdGhfdW5pdCk7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+ZHJpdmVyLT5rb2JqLCAmZGV2LT5rb2JqLCB1bml0KTsKKwlpZiAocmV0ID09IDApCisJCWdvdG8gYmFpbDsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZGV2X2NvdW50ZXJfYXR0cl9ncm91cCk7CitiYWlsX2F0dHJzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZGV2X2F0dHJfZ3JvdXApOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGlwYXRoX2RldmljZV9yZW1vdmVfZ3JvdXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJY2hhciB1bml0WzVdOworCisJc25wcmludGYodW5pdCwgc2l6ZW9mKHVuaXQpLCAiJTAyZCIsIGRkLT5pcGF0aF91bml0KTsKKwlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kcml2ZXItPmtvYmosIHVuaXQpOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkZXZfY291bnRlcl9hdHRyX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRldl9hdHRyX2dyb3VwKTsKKworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXNldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmRiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYwpAQCAtMCwwICsxLDY0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKworLyogY3V0IGRvd24gcmlkaWN1bG91c2x5IGxvbmcgSUIgbWFjcm8gbmFtZXMgKi8KKyNkZWZpbmUgT1AoeCkgSUJfT1BDT0RFX1VDXyMjeAorCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9sYXN0X3NlbmQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGlwYXRoX3N3cWUgKndxZSwKKwkJCSAgICAgICBzdHJ1Y3QgaWJfd2MgKndjKQoreworCWlmICgrK3FwLT5zX2xhc3QgPT0gcXAtPnNfc2l6ZSkKKwkJcXAtPnNfbGFzdCA9IDA7CisJaWYgKCF0ZXN0X2JpdChJUEFUSF9TX1NJR05BTF9SRVFfV1IsICZxcC0+c19mbGFncykgfHwKKwkgICAgKHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU0lHTkFMRUQpKSB7CisJCXdjLT53cl9pZCA9IHdxZS0+d3Iud3JfaWQ7CisJCXdjLT5zdGF0dXMgPSBJQl9XQ19TVUNDRVNTOworCQl3Yy0+b3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJd2MtPnZlbmRvcl9lcnIgPSAwOworCQl3Yy0+Ynl0ZV9sZW4gPSB3cWUtPmxlbmd0aDsKKwkJd2MtPnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwkJd2MtPnNyY19xcCA9IHFwLT5yZW1vdGVfcXBuOworCQl3Yy0+cGtleV9pbmRleCA9IDA7CisJCXdjLT5zbGlkID0gcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQ7CisJCXdjLT5zbCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5zbDsKKwkJd2MtPmRsaWRfcGF0aF9iaXRzID0gMDsKKwkJd2MtPnBvcnRfbnVtID0gMDsKKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCB3YywgMCk7CisJfQorCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfbGFzdCk7Cit9CisKKy8qKgorICogaXBhdGhfZG9fdWNfc2VuZCAtIGRvIGEgc2VuZCBvbiBhIFVDIHF1ZXVlCisgKiBAZGF0YTogY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBRUCB0byBzZW5kIG9uCisgKgorICogUHJvY2VzcyBlbnRyaWVzIGluIHRoZSBzZW5kIHdvcmsgcXVldWUgdW50aWwgdGhlIHF1ZXVlIGlzIGV4aGF1c3RlZC4KKyAqIE9ubHkgYWxsb3cgb25lIENQVSB0byBzZW5kIGEgcGFja2V0IHBlciBRUCAodGFza2xldCkuCisgKiBPdGhlcndpc2UsIGFmdGVyIHdlIGRyb3AgdGhlIFFQIGxvY2ssIHR3byB0aHJlYWRzIGNvdWxkIHNlbmQKKyAqIHBhY2tldHMgb3V0IG9mIG9yZGVyLgorICogVGhpcyBpcyBzaW1pbGFyIHRvIGlwYXRoX2RvX3JjX3NlbmQoKSBiZWxvdyBleGNlcHQgd2UgZG9uJ3QgaGF2ZQorICogdGltZW91dHMgb3IgcmVzZW5kcy4KKyAqLwordm9pZCBpcGF0aF9kb191Y19zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gKHN0cnVjdCBpcGF0aF9xcCAqKWRhdGE7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJc3RydWN0IGlwYXRoX3N3cWUgKndxZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBscmgwOworCXUzMiBod29yZHM7CisJdTMyIG53b3JkczsKKwl1MzIgZXh0cmFfYnl0ZXM7CisJdTMyIGJ0aDA7CisJdTMyIGJ0aDI7CisJdTMyIHBtdHUgPSBpYl9tdHVfZW51bV90b19pbnQocXAtPnBhdGhfbXR1KTsKKwl1MzIgbGVuOworCXN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyOworCXN0cnVjdCBpYl93YyB3YzsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKSkKKwkJZ290byBiYWlsOworCisJaWYgKHVubGlrZWx5KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkID09CisJCSAgICAgaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKSkpIHsKKwkJLyogUGFzcyBpbiBhbiB1bmluaXRpYWxpemVkIGliX3djIHRvIHNhdmUgc3RhY2sgc3BhY2UuICovCisJCWlwYXRoX3J1Y19sb29wYmFjayhxcCwgJndjKTsKKwkJY2xlYXJfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKTsKKwkJZ290byBiYWlsOworCX0KKworCW9oZHIgPSAmcXAtPnNfaGRyLnUub3RoOworCWlmIChxcC0+cmVtb3RlX2FoX2F0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpCisJCW9oZHIgPSAmcXAtPnNfaGRyLnUubC5vdGg7CisKK2FnYWluOgorCS8qIENoZWNrIGZvciBhIGNvbnN0cnVjdGVkIHBhY2tldCB0byBiZSBzZW50LiAqLworCWlmIChxcC0+c19oZHJ3b3JkcyAhPSAwKSB7CisJCQkvKgorCQkJICogSWYgbm8gUElPIGJ1ZnMgYXJlIGF2YWlsYWJsZSwgcmV0dXJuLgorCQkJICogQW4gaW50ZXJydXB0IHdpbGwgY2FsbCBpcGF0aF9pYl9waW9idWZhdmFpbCgpCisJCQkgKiB3aGVuIG9uZSBpcyBhdmFpbGFibGUuCisJCQkgKi8KKwkJCWlmIChpcGF0aF92ZXJic19zZW5kKGRldi0+ZGQsIHFwLT5zX2hkcndvcmRzLAorCQkJCQkgICAgICh1MzIgKikgJnFwLT5zX2hkciwKKwkJCQkJICAgICBxcC0+c19jdXJfc2l6ZSwKKwkJCQkJICAgICBxcC0+c19jdXJfc2dlKSkgeworCQkJCWlwYXRoX25vX2J1ZnNfYXZhaWxhYmxlKHFwLCBkZXYpOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCWRldi0+bl91bmljYXN0X3htaXQrKzsKKwkJLyogUmVjb3JkIHRoYXQgd2Ugc2VudCB0aGUgcGFja2V0IGFuZCBzX2hkciBpcyBlbXB0eS4gKi8KKwkJcXAtPnNfaGRyd29yZHMgPSAwOworCX0KKworCWxyaDAgPSBJUFNfTFJIX0JUSDsKKwkvKiBoZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMgTFJIK0JUSCA9ICg4KzEyKS80LiAqLworCWh3b3JkcyA9IDU7CisKKwkvKgorCSAqIFRoZSBsb2NrIGlzIG5lZWRlZCB0byBzeW5jaHJvbml6ZSBiZXR3ZWVuCisJICogc2V0dGluZyBxcC0+c19hY2tfc3RhdGUgYW5kIHBvc3Rfc2VuZCgpLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CisKKwlpZiAoIShpYl9pcGF0aF9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIElQQVRIX1BST0NFU1NfU0VORF9PSykpCisJCWdvdG8gZG9uZTsKKworCWJ0aDAgPSBpcGF0aF9sYXllcl9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KTsKKworCS8qIFNlbmQgYSByZXF1ZXN0LiAqLworCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfbGFzdCk7CisJc3dpdGNoIChxcC0+c19zdGF0ZSkgeworCWRlZmF1bHQ6CisJCS8qCisJCSAqIFNpZ25hbCB0aGUgY29tcGxldGlvbiBvZiB0aGUgbGFzdCBzZW5kIChpZiB0aGVyZSBpcworCQkgKiBvbmUpLgorCQkgKi8KKwkJaWYgKHFwLT5zX2xhc3QgIT0gcXAtPnNfdGFpbCkKKwkJCWNvbXBsZXRlX2xhc3Rfc2VuZChxcCwgd3FlLCAmd2MpOworCisJCS8qIENoZWNrIGlmIHNlbmQgd29yayBxdWV1ZSBpcyBlbXB0eS4gKi8KKwkJaWYgKHFwLT5zX3RhaWwgPT0gcXAtPnNfaGVhZCkKKwkJCWdvdG8gZG9uZTsKKwkJLyoKKwkJICogU3RhcnQgYSBuZXcgcmVxdWVzdC4KKwkJICovCisJCXFwLT5zX3BzbiA9IHdxZS0+cHNuID0gcXAtPnNfbmV4dF9wc247CisJCXFwLT5zX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07CisJCXFwLT5zX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwkJcXAtPnNfc2dlLm51bV9zZ2UgPSB3cWUtPndyLm51bV9zZ2U7CisJCXFwLT5zX2xlbiA9IGxlbiA9IHdxZS0+bGVuZ3RoOworCQlzd2l0Y2ggKHdxZS0+d3Iub3Bjb2RlKSB7CisJCWNhc2UgSUJfV1JfU0VORDoKKwkJY2FzZSBJQl9XUl9TRU5EX1dJVEhfSU1NOgorCQkJaWYgKGxlbiA+IHBtdHUpIHsKKwkJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfRklSU1QpOworCQkJCWxlbiA9IHBtdHU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfU0VORCkKKwkJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfT05MWSk7CisJCQllbHNlIHsKKwkJCQlxcC0+c19zdGF0ZSA9CisJCQkJCU9QKFNFTkRfT05MWV9XSVRIX0lNTUVESUFURSk7CisJCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgdGhlIEJUSCAqLworCQkJCW9oZHItPnUuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkJCWh3b3JkcyArPSAxOworCQkJfQorCQkJaWYgKHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKQorCQkJCWJ0aDAgfD0gMSA8PCAyMzsKKwkJCWJyZWFrOworCisJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NOgorCQkJb2hkci0+dS5yYy5yZXRoLnZhZGRyID0KKwkJCQljcHVfdG9fYmU2NCh3cWUtPndyLndyLnJkbWEucmVtb3RlX2FkZHIpOworCQkJb2hkci0+dS5yYy5yZXRoLnJrZXkgPQorCQkJCWNwdV90b19iZTMyKHdxZS0+d3Iud3IucmRtYS5ya2V5KTsKKwkJCW9oZHItPnUucmMucmV0aC5sZW5ndGggPSBjcHVfdG9fYmUzMihsZW4pOworCQkJaHdvcmRzICs9IHNpemVvZihzdHJ1Y3QgaWJfcmV0aCkgLyA0OworCQkJaWYgKGxlbiA+IHBtdHUpIHsKKwkJCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfRklSU1QpOworCQkJCWxlbiA9IHBtdHU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURSkKKwkJCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfT05MWSk7CisJCQllbHNlIHsKKwkJCQlxcC0+c19zdGF0ZSA9CisJCQkJCU9QKFJETUFfV1JJVEVfT05MWV9XSVRIX0lNTUVESUFURSk7CisJCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgdGhlIFJFVEggKi8KKwkJCQlvaGRyLT51LnJjLmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCQlod29yZHMgKz0gMTsKKwkJCQlpZiAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCisJCQkJCWJ0aDAgfD0gMSA8PCAyMzsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKCsrcXAtPnNfdGFpbCA+PSBxcC0+c19zaXplKQorCQkJcXAtPnNfdGFpbCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPUChTRU5EX0ZJUlNUKToKKwkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX01JRERMRSk7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBPUChTRU5EX01JRERMRSk6CisJCWxlbiA9IHFwLT5zX2xlbjsKKwkJaWYgKGxlbiA+IHBtdHUpIHsKKwkJCWxlbiA9IHBtdHU7CisJCQlicmVhazsKKwkJfQorCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfU0VORCkKKwkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwkJZWxzZSB7CisJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVF9XSVRIX0lNTUVESUFURSk7CisJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcyBhZnRlciB0aGUgQlRIICovCisJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCWh3b3JkcyArPSAxOworCQl9CisJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCWJ0aDAgfD0gMSA8PCAyMzsKKwkJYnJlYWs7CisKKwljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgorCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfTUlERExFKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFJETUFfV1JJVEVfTUlERExFKToKKwkJbGVuID0gcXAtPnNfbGVuOworCQlpZiAobGVuID4gcG10dSkgeworCQkJbGVuID0gcG10dTsKKwkJCWJyZWFrOworCQl9CisJCWlmICh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFKQorCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1dSSVRFX0xBU1QpOworCQllbHNlIHsKKwkJCXFwLT5zX3N0YXRlID0KKwkJCQlPUChSRE1BX1dSSVRFX0xBU1RfV0lUSF9JTU1FRElBVEUpOworCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgdGhlIEJUSCAqLworCQkJb2hkci0+dS5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCQlod29yZHMgKz0gMTsKKwkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCQlidGgwIHw9IDEgPDwgMjM7CisJCX0KKwkJYnJlYWs7CisJfQorCWJ0aDIgPSBxcC0+c19uZXh0X3BzbisrICYgSVBTX1BTTl9NQVNLOworCXFwLT5zX2xlbiAtPSBsZW47CisJYnRoMCB8PSBxcC0+c19zdGF0ZSA8PCAyNDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKworCS8qIENvbnN0cnVjdCB0aGUgaGVhZGVyLiAqLworCWV4dHJhX2J5dGVzID0gKDQgLSBsZW4pICYgMzsKKwlud29yZHMgPSAobGVuICsgZXh0cmFfYnl0ZXMpID4+IDI7CisJaWYgKHVubGlrZWx5KHFwLT5yZW1vdGVfYWhfYXR0ci5haF9mbGFncyAmIElCX0FIX0dSSCkpIHsKKwkJLyogSGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzLiAqLworCQlod29yZHMgKz0gMTA7CisJCWxyaDAgPSBJUFNfTFJIX0dSSDsKKwkJcXAtPnNfaGRyLnUubC5ncmgudmVyc2lvbl90Y2xhc3NfZmxvdyA9CisJCQljcHVfdG9fYmUzMigoNiA8PCAyOCkgfAorCQkJCSAgICAocXAtPnJlbW90ZV9haF9hdHRyLmdyaC50cmFmZmljX2NsYXNzCisJCQkJICAgICA8PCAyMCkgfAorCQkJCSAgICBxcC0+cmVtb3RlX2FoX2F0dHIuZ3JoLmZsb3dfbGFiZWwpOworCQlxcC0+c19oZHIudS5sLmdyaC5wYXlsZW4gPQorCQkJY3B1X3RvX2JlMTYoKChod29yZHMgLSAxMikgKyBud29yZHMgKworCQkJCSAgICAgU0laRV9PRl9DUkMpIDw8IDIpOworCQkvKiBuZXh0X2hkciBpcyBkZWZpbmVkIGJ5IEM4LTcgaW4gY2guIDguNC4xICovCisJCXFwLT5zX2hkci51LmwuZ3JoLm5leHRfaGRyID0gMHgxQjsKKwkJcXAtPnNfaGRyLnUubC5ncmguaG9wX2xpbWl0ID0KKwkJCXFwLT5yZW1vdGVfYWhfYXR0ci5ncmguaG9wX2xpbWl0OworCQkvKiBUaGUgU0dJRCBpcyAzMi1iaXQgYWxpZ25lZC4gKi8KKwkJcXAtPnNfaGRyLnUubC5ncmguc2dpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCA9CisJCQlkZXYtPmdpZF9wcmVmaXg7CisJCXFwLT5zX2hkci51LmwuZ3JoLnNnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCA9CisJCQlpcGF0aF9sYXllcl9nZXRfZ3VpZChkZXYtPmRkKTsKKwkJcXAtPnNfaGRyLnUubC5ncmguZGdpZCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5ncmguZGdpZDsKKwl9CisJcXAtPnNfaGRyd29yZHMgPSBod29yZHM7CisJcXAtPnNfY3VyX3NnZSA9ICZxcC0+c19zZ2U7CisJcXAtPnNfY3VyX3NpemUgPSBsZW47CisJbHJoMCB8PSBxcC0+cmVtb3RlX2FoX2F0dHIuc2wgPDwgNDsKKwlxcC0+c19oZHIubHJoWzBdID0gY3B1X3RvX2JlMTYobHJoMCk7CisJLyogREVTVCBMSUQgKi8KKwlxcC0+c19oZHIubHJoWzFdID0gY3B1X3RvX2JlMTYocXAtPnJlbW90ZV9haF9hdHRyLmRsaWQpOworCXFwLT5zX2hkci5scmhbMl0gPSBjcHVfdG9fYmUxNihod29yZHMgKyBud29yZHMgKyBTSVpFX09GX0NSQyk7CisJcXAtPnNfaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpOworCWJ0aDAgfD0gZXh0cmFfYnl0ZXMgPDwgMjA7CisJb2hkci0+YnRoWzBdID0gY3B1X3RvX2JlMzIoYnRoMCk7CisJb2hkci0+YnRoWzFdID0gY3B1X3RvX2JlMzIocXAtPnJlbW90ZV9xcG4pOworCW9oZHItPmJ0aFsyXSA9IGNwdV90b19iZTMyKGJ0aDIpOworCisJLyogQ2hlY2sgZm9yIG1vcmUgd29yayB0byBkby4gKi8KKwlnb3RvIGFnYWluOworCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwljbGVhcl9iaXQoSVBBVEhfU19CVVNZLCAmcXAtPnNfZmxhZ3MpOworCitiYWlsOgorCXJldHVybjsKK30KKworLyoqCisgKiBpcGF0aF91Y19yY3YgLSBoYW5kbGUgYW4gaW5jb21pbmcgVUMgcGFja2V0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHRoZSBwYWNrZXQgY2FtZSBpbiBvbgorICogQGhkcjogdGhlIGhlYWRlciBvZiB0aGUgcGFja2V0CisgKiBAaGFzX2dyaDogdHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyBhIEdSSAorICogQGRhdGE6IHRoZSBwYWNrZXQgZGF0YQorICogQHRsZW46IHRoZSBsZW5ndGggb2YgdGhlIHBhY2tldAorICogQHFwOiB0aGUgUVAgZm9yIHRoaXMgcGFja2V0LgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcXBfcmN2KCkgdG8gcHJvY2VzcyBhbiBpbmNvbWluZyBVQyBwYWNrZXQKKyAqIGZvciB0aGUgZ2l2ZW4gUVAuCisgKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsLgorICovCit2b2lkIGlwYXRoX3VjX3JjdihzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyLAorCQkgIGludCBoYXNfZ3JoLCB2b2lkICpkYXRhLCB1MzIgdGxlbiwgc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKKwlpbnQgb3Bjb2RlOworCXUzMiBoZHJzaXplOworCXUzMiBwc247CisJdTMyIHBhZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpYl93YyB3YzsKKwl1MzIgcG10dSA9IGliX210dV9lbnVtX3RvX2ludChxcC0+cGF0aF9tdHUpOworCXN0cnVjdCBpYl9yZXRoICpyZXRoOworCWludCBoZWFkZXJfaW5fZGF0YTsKKworCS8qIENoZWNrIGZvciBHUkggKi8KKwlpZiAoIWhhc19ncmgpIHsKKwkJb2hkciA9ICZoZHItPnUub3RoOworCQloZHJzaXplID0gOCArIDEyOwkvKiBMUkggKyBCVEggKi8KKwkJcHNuID0gYmUzMl90b19jcHUob2hkci0+YnRoWzJdKTsKKwkJaGVhZGVyX2luX2RhdGEgPSAwOworCX0gZWxzZSB7CisJCW9oZHIgPSAmaGRyLT51Lmwub3RoOworCQloZHJzaXplID0gOCArIDQwICsgMTI7CS8qIExSSCArIEdSSCArIEJUSCAqLworCQkvKgorCQkgKiBUaGUgaGVhZGVyIHdpdGggR1JIIGlzIDYwIGJ5dGVzIGFuZCB0aGUKKwkJICogY29yZSBkcml2ZXIgc2V0cyB0aGUgZWFnZXIgaGVhZGVyIGJ1ZmZlcgorCQkgKiBzaXplIHRvIDU2IGJ5dGVzIHNvIHRoZSBsYXN0IDQgYnl0ZXMgb2YKKwkJICogdGhlIEJUSCBoZWFkZXIgKFBTTikgaXMgaW4gdGhlIGRhdGEgYnVmZmVyLgorCQkgKi8KKwkJaGVhZGVyX2luX2RhdGEgPQorCQkJaXBhdGhfbGF5ZXJfZ2V0X3JjdmhkcmVudHNpemUoZGV2LT5kZCkgPT0gMTY7CisJCWlmIChoZWFkZXJfaW5fZGF0YSkgeworCQkJcHNuID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMF0pOworCQkJZGF0YSArPSBzaXplb2YoX19iZTMyKTsKKwkJfSBlbHNlCisJCQlwc24gPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMl0pOworCX0KKwkvKgorCSAqIFRoZSBvcGNvZGUgaXMgaW4gdGhlIGxvdyBieXRlIHdoZW4gaXRzIGluIG5ldHdvcmsgb3JkZXIKKwkgKiAodG9wIGJ5dGUgd2hlbiBpbiBob3N0IG9yZGVyKS4KKwkgKi8KKwlvcGNvZGUgPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMF0pID4+IDI0OworCisJd2MuaW1tX2RhdGEgPSAwOworCXdjLndjX2ZsYWdzID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisKKwkvKiBDb21wYXJlIHRoZSBQU04gdmVyc2VzIHRoZSBleHBlY3RlZCBQU04uICovCisJaWYgKHVubGlrZWx5KGlwYXRoX2NtcDI0KHBzbiwgcXAtPnJfcHNuKSAhPSAwKSkgeworCQkvKgorCQkgKiBIYW5kbGUgYSBzZXF1ZW5jZSBlcnJvci4KKwkJICogU2lsZW50bHkgZHJvcCBhbnkgY3VycmVudCBtZXNzYWdlLgorCQkgKi8KKwkJcXAtPnJfcHNuID0gcHNuOworCWludjoKKwkJcXAtPnJfc3RhdGUgPSBPUChTRU5EX0xBU1QpOworCQlzd2l0Y2ggKG9wY29kZSkgeworCQljYXNlIE9QKFNFTkRfRklSU1QpOgorCQljYXNlIE9QKFNFTkRfT05MWSk6CisJCWNhc2UgT1AoU0VORF9PTkxZX1dJVEhfSU1NRURJQVRFKToKKwkJCWdvdG8gc2VuZF9maXJzdDsKKworCQljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgorCQljYXNlIE9QKFJETUFfV1JJVEVfT05MWSk6CisJCWNhc2UgT1AoUkRNQV9XUklURV9PTkxZX1dJVEhfSU1NRURJQVRFKToKKwkJCWdvdG8gcmRtYV9maXJzdDsKKworCQlkZWZhdWx0OgorCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJLyogQ2hlY2sgZm9yIG9wY29kZSBzZXF1ZW5jZSBlcnJvcnMuICovCisJc3dpdGNoIChxcC0+cl9zdGF0ZSkgeworCWNhc2UgT1AoU0VORF9GSVJTVCk6CisJY2FzZSBPUChTRU5EX01JRERMRSk6CisJCWlmIChvcGNvZGUgPT0gT1AoU0VORF9NSURETEUpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoU0VORF9MQVNUKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFNFTkRfTEFTVF9XSVRIX0lNTUVESUFURSkpCisJCQlicmVhazsKKwkJZ290byBpbnY7CisKKwljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgorCWNhc2UgT1AoUkRNQV9XUklURV9NSURETEUpOgorCQlpZiAob3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTUlERExFKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTEFTVCkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX0xBU1RfV0lUSF9JTU1FRElBVEUpKQorCQkJYnJlYWs7CisJCWdvdG8gaW52OworCisJZGVmYXVsdDoKKwkJaWYgKG9wY29kZSA9PSBPUChTRU5EX0ZJUlNUKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFNFTkRfT05MWSkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChTRU5EX09OTFlfV0lUSF9JTU1FRElBVEUpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9GSVJTVCkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX09OTFkpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9PTkxZX1dJVEhfSU1NRURJQVRFKSkKKwkJCWJyZWFrOworCQlnb3RvIGludjsKKwl9CisKKwkvKiBPSywgcHJvY2VzcyB0aGUgcGFja2V0LiAqLworCXN3aXRjaCAob3Bjb2RlKSB7CisJY2FzZSBPUChTRU5EX0ZJUlNUKToKKwljYXNlIE9QKFNFTkRfT05MWSk6CisJY2FzZSBPUChTRU5EX09OTFlfV0lUSF9JTU1FRElBVEUpOgorCXNlbmRfZmlyc3Q6CisJCWlmIChxcC0+cl9yZXVzZV9zZ2UpIHsKKwkJCXFwLT5yX3JldXNlX3NnZSA9IDA7CisJCQlxcC0+cl9zZ2UgPSBxcC0+c19yZG1hX3NnZTsKKwkJfSBlbHNlIGlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDApKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogU2F2ZSB0aGUgV1FFIHNvIHdlIGNhbiByZXVzZSBpdCBpbiBjYXNlIG9mIGFuIGVycm9yLiAqLworCQlxcC0+c19yZG1hX3NnZSA9IHFwLT5yX3NnZTsKKwkJcXAtPnJfcmN2X2xlbiA9IDA7CisJCWlmIChvcGNvZGUgPT0gT1AoU0VORF9PTkxZKSkKKwkJCWdvdG8gc2VuZF9sYXN0OworCQllbHNlIGlmIChvcGNvZGUgPT0gT1AoU0VORF9PTkxZX1dJVEhfSU1NRURJQVRFKSkKKwkJCWdvdG8gc2VuZF9sYXN0X2ltbTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFNFTkRfTUlERExFKToKKwkJLyogQ2hlY2sgZm9yIGludmFsaWQgbGVuZ3RoIFBNVFUgb3IgcG9zdGVkIHJ3cWUgbGVuLiAqLworCQlpZiAodW5saWtlbHkodGxlbiAhPSAoaGRyc2l6ZSArIHBtdHUgKyA0KSkpIHsKKwkJCXFwLT5yX3JldXNlX3NnZSA9IDE7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJcXAtPnJfcmN2X2xlbiArPSBwbXR1OworCQlpZiAodW5saWtlbHkocXAtPnJfcmN2X2xlbiA+IHFwLT5yX2xlbikpIHsKKwkJCXFwLT5yX3JldXNlX3NnZSA9IDE7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaXBhdGhfY29weV9zZ2UoJnFwLT5yX3NnZSwgZGF0YSwgcG10dSk7CisJCWJyZWFrOworCisJY2FzZSBPUChTRU5EX0xBU1RfV0lUSF9JTU1FRElBVEUpOgorCXNlbmRfbGFzdF9pbW06CisJCWlmIChoZWFkZXJfaW5fZGF0YSkgeworCQkJd2MuaW1tX2RhdGEgPSAqKF9fYmUzMiAqKSBkYXRhOworCQkJZGF0YSArPSBzaXplb2YoX19iZTMyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIEJUSCAqLworCQkJd2MuaW1tX2RhdGEgPSBvaGRyLT51LmltbV9kYXRhOworCQl9CisJCWhkcnNpemUgKz0gNDsKKwkJd2Mud2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFNFTkRfTEFTVCk6CisJc2VuZF9sYXN0OgorCQkvKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgbWVzc2FnZSB3YXMgcGFkZGVkIGJ5LiAqLworCQlwYWQgPSAoYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyMCkgJiAzOworCQkvKiBDaGVjayBmb3IgaW52YWxpZCBsZW5ndGguICovCisJCS8qIFhYWCBMQVNUIGxlbiBzaG91bGQgYmUgPj0gMSAqLworCQlpZiAodW5saWtlbHkodGxlbiA8IChoZHJzaXplICsgcGFkICsgNCkpKSB7CisJCQlxcC0+cl9yZXVzZV9zZ2UgPSAxOworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCS8qIERvbid0IGNvdW50IHRoZSBDUkMuICovCisJCXRsZW4gLT0gKGhkcnNpemUgKyBwYWQgKyA0KTsKKwkJd2MuYnl0ZV9sZW4gPSB0bGVuICsgcXAtPnJfcmN2X2xlbjsKKwkJaWYgKHVubGlrZWx5KHdjLmJ5dGVfbGVuID4gcXAtPnJfbGVuKSkgeworCQkJcXAtPnJfcmV1c2Vfc2dlID0gMTsKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBYWFggTmVlZCB0byBmcmVlIFNHRXMgKi8KKwlsYXN0X2ltbToKKwkJaXBhdGhfY29weV9zZ2UoJnFwLT5yX3NnZSwgZGF0YSwgdGxlbik7CisJCXdjLndyX2lkID0gcXAtPnJfd3JfaWQ7CisJCXdjLnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CisJCXdjLm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJCXdjLnZlbmRvcl9lcnIgPSAwOworCQl3Yy5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJCXdjLnNyY19xcCA9IHFwLT5yZW1vdGVfcXBuOworCQl3Yy5wa2V5X2luZGV4ID0gMDsKKwkJd2Muc2xpZCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkOworCQl3Yy5zbCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5zbDsKKwkJd2MuZGxpZF9wYXRoX2JpdHMgPSAwOworCQl3Yy5wb3J0X251bSA9IDA7CisJCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCisJCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCisJCQkJX19jb25zdGFudF9jcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1dSSVRFX0ZJUlNUKToKKwljYXNlIE9QKFJETUFfV1JJVEVfT05MWSk6CisJY2FzZSBPUChSRE1BX1dSSVRFX09OTFlfV0lUSF9JTU1FRElBVEUpOiAvKiBjb25zdW1lIFJXUUUgKi8KKwlyZG1hX2ZpcnN0OgorCQkvKiBSRVRIIGNvbWVzIGFmdGVyIEJUSCAqLworCQlpZiAoIWhlYWRlcl9pbl9kYXRhKQorCQkJcmV0aCA9ICZvaGRyLT51LnJjLnJldGg7CisJCWVsc2UgeworCQkJcmV0aCA9IChzdHJ1Y3QgaWJfcmV0aCAqKWRhdGE7CisJCQlkYXRhICs9IHNpemVvZigqcmV0aCk7CisJCX0KKwkJaGRyc2l6ZSArPSBzaXplb2YoKnJldGgpOworCQlxcC0+cl9sZW4gPSBiZTMyX3RvX2NwdShyZXRoLT5sZW5ndGgpOworCQlxcC0+cl9yY3ZfbGVuID0gMDsKKwkJaWYgKHFwLT5yX2xlbiAhPSAwKSB7CisJCQl1MzIgcmtleSA9IGJlMzJfdG9fY3B1KHJldGgtPnJrZXkpOworCQkJdTY0IHZhZGRyID0gYmU2NF90b19jcHUocmV0aC0+dmFkZHIpOworCisJCQkvKiBDaGVjayBya2V5ICovCisJCQlpZiAodW5saWtlbHkoIWlwYXRoX3JrZXlfb2soCisJCQkJCSAgICAgZGV2LCAmcXAtPnJfc2dlLCBxcC0+cl9sZW4sCisJCQkJCSAgICAgdmFkZHIsIHJrZXksCisJCQkJCSAgICAgSUJfQUNDRVNTX1JFTU9URV9XUklURSkpKSB7CisJCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXFwLT5yX3NnZS5zZ19saXN0ID0gTlVMTDsKKwkJCXFwLT5yX3NnZS5zZ2UubXIgPSBOVUxMOworCQkJcXAtPnJfc2dlLnNnZS52YWRkciA9IE5VTEw7CisJCQlxcC0+cl9zZ2Uuc2dlLmxlbmd0aCA9IDA7CisJCQlxcC0+cl9zZ2Uuc2dlLnNnZV9sZW5ndGggPSAwOworCQl9CisJCWlmICh1bmxpa2VseSghKHFwLT5xcF9hY2Nlc3NfZmxhZ3MgJgorCQkJICAgICAgIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCWlmIChvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9PTkxZKSkKKwkJCWdvdG8gcmRtYV9sYXN0OworCQllbHNlIGlmIChvcGNvZGUgPT0KKwkJCSBPUChSRE1BX1dSSVRFX09OTFlfV0lUSF9JTU1FRElBVEUpKQorCQkJZ290byByZG1hX2xhc3RfaW1tOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoUkRNQV9XUklURV9NSURETEUpOgorCQkvKiBDaGVjayBmb3IgaW52YWxpZCBsZW5ndGggUE1UVSBvciBwb3N0ZWQgcndxZSBsZW4uICovCisJCWlmICh1bmxpa2VseSh0bGVuICE9IChoZHJzaXplICsgcG10dSArIDQpKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCXFwLT5yX3Jjdl9sZW4gKz0gcG10dTsKKwkJaWYgKHVubGlrZWx5KHFwLT5yX3Jjdl9sZW4gPiBxcC0+cl9sZW4pKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaXBhdGhfY29weV9zZ2UoJnFwLT5yX3NnZSwgZGF0YSwgcG10dSk7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1dSSVRFX0xBU1RfV0lUSF9JTU1FRElBVEUpOgorCXJkbWFfbGFzdF9pbW06CisJCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBtZXNzYWdlIHdhcyBwYWRkZWQgYnkuICovCisJCXBhZCA9IChiZTMyX3RvX2NwdShvaGRyLT5idGhbMF0pID4+IDIwKSAmIDM7CisJCS8qIENoZWNrIGZvciBpbnZhbGlkIGxlbmd0aC4gKi8KKwkJLyogWFhYIExBU1QgbGVuIHNob3VsZCBiZSA+PSAxICovCisJCWlmICh1bmxpa2VseSh0bGVuIDwgKGhkcnNpemUgKyBwYWQgKyA0KSkpIHsKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBEb24ndCBjb3VudCB0aGUgQ1JDLiAqLworCQl0bGVuIC09IChoZHJzaXplICsgcGFkICsgNCk7CisJCWlmICh1bmxpa2VseSh0bGVuICsgcXAtPnJfcmN2X2xlbiAhPSBxcC0+cl9sZW4pKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKHFwLT5yX3JldXNlX3NnZSkgeworCQkJcXAtPnJfcmV1c2Vfc2dlID0gMDsKKwkJfSBlbHNlIGlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDEpKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKGhlYWRlcl9pbl9kYXRhKSB7CisJCQl3Yy5pbW1fZGF0YSA9ICooX19iZTMyICopIGRhdGE7CisJCQlkYXRhICs9IHNpemVvZihfX2JlMzIpOworCQl9IGVsc2UgeworCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgQlRIICovCisJCQl3Yy5pbW1fZGF0YSA9IG9oZHItPnUuaW1tX2RhdGE7CisJCX0KKwkJaGRyc2l6ZSArPSA0OworCQl3Yy53Y19mbGFncyA9IElCX1dDX1dJVEhfSU1NOworCQl3Yy5ieXRlX2xlbiA9IDA7CisJCWdvdG8gbGFzdF9pbW07CisKKwljYXNlIE9QKFJETUFfV1JJVEVfTEFTVCk6CisJcmRtYV9sYXN0OgorCQkvKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgbWVzc2FnZSB3YXMgcGFkZGVkIGJ5LiAqLworCQlwYWQgPSAoYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyMCkgJiAzOworCQkvKiBDaGVjayBmb3IgaW52YWxpZCBsZW5ndGguICovCisJCS8qIFhYWCBMQVNUIGxlbiBzaG91bGQgYmUgPj0gMSAqLworCQlpZiAodW5saWtlbHkodGxlbiA8IChoZHJzaXplICsgcGFkICsgNCkpKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogRG9uJ3QgY291bnQgdGhlIENSQy4gKi8KKwkJdGxlbiAtPSAoaGRyc2l6ZSArIHBhZCArIDQpOworCQlpZiAodW5saWtlbHkodGxlbiArIHFwLT5yX3Jjdl9sZW4gIT0gcXAtPnJfbGVuKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCWlwYXRoX2NvcHlfc2dlKCZxcC0+cl9zZ2UsIGRhdGEsIHRsZW4pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIERyb3AgcGFja2V0IGZvciB1bmtub3duIG9wY29kZXMuICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwkJZGV2LT5uX3BrdF9kcm9wcysrOworCQlnb3RvIGJhaWw7CisJfQorCXFwLT5yX3BzbisrOworCXFwLT5yX3N0YXRlID0gb3Bjb2RlOworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisKK2JhaWw6CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjA2ZGFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KKworI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorCisvKioKKyAqIGlwYXRoX3VkX2xvb3BiYWNrIC0gaGFuZGxlIHNlbmQgb24gbG9vcGJhY2sgUVBzCisgKiBAc3FwOiB0aGUgUVAKKyAqIEBzczogdGhlIFNHRSBzdGF0ZQorICogQGxlbmd0aDogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBzZW5kCisgKiBAd3I6IHRoZSB3b3JrIHJlcXVlc3QKKyAqIEB3YzogdGhlIHdvcmsgY29tcGxldGlvbiBlbnRyeQorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcG9zdF91ZF9zZW5kKCkgdG8gZm9yd2FyZCBhIFdRRSBhZGRyZXNzZWQKKyAqIHRvIHRoZSBzYW1lIEhDQS4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfdWRfbG9vcGJhY2soc3RydWN0IGlwYXRoX3FwICpzcXAsCisJCQkgICAgICBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKKwkJCSAgICAgIHUzMiBsZW5ndGgsIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwKKwkJCSAgICAgIHN0cnVjdCBpYl93YyAqd2MpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHNxcC0+aWJxcC5kZXZpY2UpOworCXN0cnVjdCBpcGF0aF9xcCAqcXA7CisJc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXBhdGhfcnEgKnJxOworCXN0cnVjdCBpcGF0aF9zcnEgKnNycTsKKwlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlIHJzZ2U7CisJc3RydWN0IGlwYXRoX3NnZSAqc2dlOworCXN0cnVjdCBpcGF0aF9yd3FlICp3cWU7CisKKwlxcCA9IGlwYXRoX2xvb2t1cF9xcG4oJmRldi0+cXBfdGFibGUsIHdyLT53ci51ZC5yZW1vdGVfcXBuKTsKKwlpZiAoIXFwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHFrZXkgbWF0Y2hlcyAoZXhjZXB0IGZvciBRUDAsIHNlZSA5LjYuMS40LjEpLgorCSAqIFFrZXlzIHdpdGggdGhlIGhpZ2ggb3JkZXIgYml0IHNldCBtZWFuIHVzZSB0aGUKKwkgKiBxa2V5IGZyb20gdGhlIFFQIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUgV1IgKHNlZSAxMC4yLjUpLgorCSAqLworCWlmICh1bmxpa2VseShxcC0+aWJxcC5xcF9udW0gJiYKKwkJICAgICAoKGludCkgd3ItPndyLnVkLnJlbW90ZV9xa2V5IDwgMAorCQkgICAgICA/IHFwLT5xa2V5IDogd3ItPndyLnVkLnJlbW90ZV9xa2V5KSAhPSBxcC0+cWtleSkpIHsKKwkJLyogWFhYIE9LIHRvIGxvc2UgYSBjb3VudCBvbmNlIGluIGEgd2hpbGUuICovCisJCWRldi0+cWtleV92aW9sYXRpb25zKys7CisJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogQSBHUkggaXMgZXhwZWN0ZWQgdG8gcHJlY2VlZCB0aGUgZGF0YSBldmVuIGlmIG5vdAorCSAqIHByZXNlbnQgb24gdGhlIHdpcmUuCisJICovCisJd2MtPmJ5dGVfbGVuID0gbGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBpYl9ncmgpOworCisJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfU0VORF9XSVRIX0lNTSkgeworCQl3Yy0+d2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKKwkJd2MtPmltbV9kYXRhID0gd3ItPmltbV9kYXRhOworCX0gZWxzZSB7CisJCXdjLT53Y19mbGFncyA9IDA7CisJCXdjLT5pbW1fZGF0YSA9IDA7CisJfQorCisJLyoKKwkgKiBHZXQgdGhlIG5leHQgd29yayByZXF1ZXN0IGVudHJ5IHRvIGZpbmQgd2hlcmUgdG8gcHV0IHRoZSBkYXRhLgorCSAqIE5vdGUgdGhhdCBpdCBpcyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgYWZ0ZXIgY2hhbmdpbmcgcnEtPnRhaWwKKwkgKiBzaW5jZSBpcGF0aF9wb3N0X3JlY2VpdmUoKSB3b24ndCBmaWxsIHRoZSBlbXB0eSBzbG90LgorCSAqLworCWlmIChxcC0+aWJxcC5zcnEpIHsKKwkJc3JxID0gdG9faXNycShxcC0+aWJxcC5zcnEpOworCQlycSA9ICZzcnEtPnJxOworCX0gZWxzZSB7CisJCXNycSA9IE5VTEw7CisJCXJxID0gJnFwLT5yX3JxOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlpZiAocnEtPnRhaWwgPT0gcnEtPmhlYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJZGV2LT5uX3BrdF9kcm9wcysrOworCQlnb3RvIGRvbmU7CisJfQorCS8qIFNpbGVudGx5IGRyb3AgcGFja2V0cyB3aGljaCBhcmUgdG9vIGJpZy4gKi8KKwl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHJxLT50YWlsKTsKKwlpZiAod2MtPmJ5dGVfbGVuID4gd3FlLT5sZW5ndGgpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJZGV2LT5uX3BrdF9kcm9wcysrOworCQlnb3RvIGRvbmU7CisJfQorCXdjLT53cl9pZCA9IHdxZS0+d3JfaWQ7CisJcnNnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07CisJcnNnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwlyc2dlLm51bV9zZ2UgPSB3cWUtPm51bV9zZ2U7CisJaWYgKCsrcnEtPnRhaWwgPj0gcnEtPnNpemUpCisJCXJxLT50YWlsID0gMDsKKwlpZiAoc3JxICYmIHNycS0+aWJzcnEuZXZlbnRfaGFuZGxlcikgeworCQl1MzIgbjsKKworCQlpZiAocnEtPmhlYWQgPCBycS0+dGFpbCkKKwkJCW4gPSBycS0+c2l6ZSArIHJxLT5oZWFkIC0gcnEtPnRhaWw7CisJCWVsc2UKKwkJCW4gPSBycS0+aGVhZCAtIHJxLT50YWlsOworCQlpZiAobiA8IHNycS0+bGltaXQpIHsKKwkJCXN0cnVjdCBpYl9ldmVudCBldjsKKworCQkJc3JxLT5saW1pdCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCQkJZXYuZGV2aWNlID0gcXAtPmlicXAuZGV2aWNlOworCQkJZXYuZWxlbWVudC5zcnEgPSBxcC0+aWJxcC5zcnE7CisJCQlldi5ldmVudCA9IElCX0VWRU5UX1NSUV9MSU1JVF9SRUFDSEVEOworCQkJc3JxLT5pYnNycS5ldmVudF9oYW5kbGVyKCZldiwKKwkJCQkJCSBzcnEtPmlic3JxLnNycV9jb250ZXh0KTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCWFoX2F0dHIgPSAmdG9faWFoKHdyLT53ci51ZC5haCktPmF0dHI7CisJaWYgKGFoX2F0dHItPmFoX2ZsYWdzICYgSUJfQUhfR1JIKSB7CisJCWlwYXRoX2NvcHlfc2dlKCZyc2dlLCAmYWhfYXR0ci0+Z3JoLCBzaXplb2Yoc3RydWN0IGliX2dyaCkpOworCQl3Yy0+d2NfZmxhZ3MgfD0gSUJfV0NfR1JIOworCX0gZWxzZQorCQlpcGF0aF9za2lwX3NnZSgmcnNnZSwgc2l6ZW9mKHN0cnVjdCBpYl9ncmgpKTsKKwlzZ2UgPSAmc3MtPnNnZTsKKwl3aGlsZSAobGVuZ3RoKSB7CisJCXUzMiBsZW4gPSBzZ2UtPmxlbmd0aDsKKworCQlpZiAobGVuID4gbGVuZ3RoKQorCQkJbGVuID0gbGVuZ3RoOworCQlCVUdfT04obGVuID09IDApOworCQlpcGF0aF9jb3B5X3NnZSgmcnNnZSwgc2dlLT52YWRkciwgbGVuKTsKKwkJc2dlLT52YWRkciArPSBsZW47CisJCXNnZS0+bGVuZ3RoIC09IGxlbjsKKwkJc2dlLT5zZ2VfbGVuZ3RoIC09IGxlbjsKKwkJaWYgKHNnZS0+c2dlX2xlbmd0aCA9PSAwKSB7CisJCQlpZiAoLS1zcy0+bnVtX3NnZSkKKwkJCQkqc2dlID0gKnNzLT5zZ19saXN0Kys7CisJCX0gZWxzZSBpZiAoc2dlLT5sZW5ndGggPT0gMCAmJiBzZ2UtPm1yICE9IE5VTEwpIHsKKwkJCWlmICgrK3NnZS0+biA+PSBJUEFUSF9TRUdTWikgeworCQkJCWlmICgrK3NnZS0+bSA+PSBzZ2UtPm1yLT5tYXBzeikKKwkJCQkJYnJlYWs7CisJCQkJc2dlLT5uID0gMDsKKwkJCX0KKwkJCXNnZS0+dmFkZHIgPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0udmFkZHI7CisJCQlzZ2UtPmxlbmd0aCA9CisJCQkJc2dlLT5tci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS5sZW5ndGg7CisJCX0KKwkJbGVuZ3RoIC09IGxlbjsKKwl9CisJd2MtPnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CisJd2MtPm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJd2MtPnZlbmRvcl9lcnIgPSAwOworCXdjLT5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJd2MtPnNyY19xcCA9IHNxcC0+aWJxcC5xcF9udW07CisJLyogWFhYIGRvIHdlIGtub3cgd2hpY2ggcGtleSBtYXRjaGVkPyBPbmx5IG5lZWRlZCBmb3IgR1NJLiAqLworCXdjLT5wa2V5X2luZGV4ID0gMDsKKwl3Yy0+c2xpZCA9IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkgfAorCQkoYWhfYXR0ci0+c3JjX3BhdGhfYml0cyAmCisJCSAoKDEgPDwgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgLSAxKSk7CisJd2MtPnNsID0gYWhfYXR0ci0+c2w7CisJd2MtPmRsaWRfcGF0aF9iaXRzID0KKwkJYWhfYXR0ci0+ZGxpZCAmICgoMSA8PCAoZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyAmIDcpKSAtIDEpOworCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KKwlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksIHdjLAorCQkgICAgICAgd3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCk7CisKK2RvbmU6CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnFwLT5yZWZjb3VudCkpCisJCXdha2VfdXAoJnFwLT53YWl0KTsKK30KKworLyoqCisgKiBpcGF0aF9wb3N0X3VkX3NlbmQgLSBwb3N0IGEgVUQgc2VuZCBvbiBRUAorICogQHFwOiB0aGUgUVAKKyAqIEB3cjogdGhlIHdvcmsgcmVxdWVzdAorICoKKyAqIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBzZW5kIHRoZSBkYXRhIGFzIGl0IGlzIHBvc3RlZCBpbnN0ZWFkIG9mIHB1dHRpbmcKKyAqIHRoZSByZXF1ZXN0IGludG8gYSByaW5nIGJ1ZmZlci4gIElmIHdlIHdhbnRlZCB0byB1c2UgYSByaW5nIGJ1ZmZlciwKKyAqIHdlIHdvdWxkIG5lZWQgdG8gc2F2ZSBhIHJlZmVyZW5jZSB0byB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpbiB0aGUgU1dRRS4KKyAqLworaW50IGlwYXRoX3Bvc3RfdWRfc2VuZChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHI7CisJc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHI7CisJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSBzczsKKwlzdHJ1Y3QgaXBhdGhfc2dlICpzZ19saXN0OworCXN0cnVjdCBpYl93YyB3YzsKKwl1MzIgaHdvcmRzOworCXUzMiBud29yZHM7CisJdTMyIGxlbjsKKwl1MzIgZXh0cmFfYnl0ZXM7CisJdTMyIGJ0aDA7CisJdTE2IGxyaDA7CisJdTE2IGxpZDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKCEoaWJfaXBhdGhfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBJUEFUSF9QUk9DRVNTX1NFTkRfT0spKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBJQiBzcGVjIHNheXMgdGhhdCBudW1fc2dlID09IDAgaXMgT0suICovCisJaWYgKHdyLT5udW1fc2dlID4gcXAtPnNfbWF4X3NnZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKHdyLT5udW1fc2dlID4gMSkgeworCQlzZ19saXN0ID0ga21hbGxvYygocXAtPnNfbWF4X3NnZSAtIDEpICogc2l6ZW9mKCpzZ19saXN0KSwKKwkJCQkgIEdGUF9BVE9NSUMpOworCQlpZiAoIXNnX2xpc3QpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9IGVsc2UKKwkJc2dfbGlzdCA9IE5VTEw7CisKKwkvKiBDaGVjayB0aGUgYnVmZmVyIHRvIHNlbmQuICovCisJc3Muc2dfbGlzdCA9IHNnX2xpc3Q7CisJc3Muc2dlLm1yID0gTlVMTDsKKwlzcy5zZ2UudmFkZHIgPSBOVUxMOworCXNzLnNnZS5sZW5ndGggPSAwOworCXNzLnNnZS5zZ2VfbGVuZ3RoID0gMDsKKwlzcy5udW1fc2dlID0gMDsKKwlsZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgaSsrKSB7CisJCS8qIENoZWNrIExLRVkgKi8KKwkJaWYgKHRvX2lwZChxcC0+aWJxcC5wZCktPnVzZXIgJiYgd3ItPnNnX2xpc3RbaV0ubGtleSA9PSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBiYWlsOworCQl9CisKKwkJaWYgKHdyLT5zZ19saXN0W2ldLmxlbmd0aCA9PSAwKQorCQkJY29udGludWU7CisJCWlmICghaXBhdGhfbGtleV9vaygmZGV2LT5sa190YWJsZSwgc3MubnVtX3NnZSA/CisJCQkJICAgc2dfbGlzdCArIHNzLm51bV9zZ2UgLSAxIDogJnNzLnNnZSwKKwkJCQkgICAmd3ItPnNnX2xpc3RbaV0sIDApKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBiYWlsOworCQl9CisJCWxlbiArPSB3ci0+c2dfbGlzdFtpXS5sZW5ndGg7CisJCXNzLm51bV9zZ2UrKzsKKwl9CisJZXh0cmFfYnl0ZXMgPSAoNCAtIGxlbikgJiAzOworCW53b3JkcyA9IChsZW4gKyBleHRyYV9ieXRlcykgPj4gMjsKKworCS8qIENvbnN0cnVjdCB0aGUgaGVhZGVyLiAqLworCWFoX2F0dHIgPSAmdG9faWFoKHdyLT53ci51ZC5haCktPmF0dHI7CisJaWYgKGFoX2F0dHItPmRsaWQgPT0gMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCWlmIChhaF9hdHRyLT5kbGlkID49IElQU19NVUxUSUNBU1RfTElEX0JBU0UpIHsKKwkJaWYgKGFoX2F0dHItPmRsaWQgIT0gSVBTX1BFUk1JU1NJVkVfTElEKQorCQkJZGV2LT5uX211bHRpY2FzdF94bWl0Kys7CisJCWVsc2UKKwkJCWRldi0+bl91bmljYXN0X3htaXQrKzsKKwl9IGVsc2UgeworCQlkZXYtPm5fdW5pY2FzdF94bWl0Kys7CisJCWxpZCA9IGFoX2F0dHItPmRsaWQgJgorCQkJfigoMSA8PCAoZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyAmIDcpKSAtIDEpOworCQlpZiAodW5saWtlbHkobGlkID09IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpKSB7CisJCQkvKgorCQkJICogUGFzcyBpbiBhbiB1bmluaXRpYWxpemVkIGliX3djIHRvIHNhdmUgc3RhY2sKKwkJCSAqIHNwYWNlLgorCQkJICovCisJCQlpcGF0aF91ZF9sb29wYmFjayhxcCwgJnNzLCBsZW4sIHdyLCAmd2MpOworCQkJZ290byBkb25lOworCQl9CisJfQorCWlmIChhaF9hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCkgeworCQkvKiBIZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMuICovCisJCWh3b3JkcyA9IDE3OworCQlscmgwID0gSVBTX0xSSF9HUkg7CisJCW9oZHIgPSAmcXAtPnNfaGRyLnUubC5vdGg7CisJCXFwLT5zX2hkci51LmwuZ3JoLnZlcnNpb25fdGNsYXNzX2Zsb3cgPQorCQkJY3B1X3RvX2JlMzIoKDYgPDwgMjgpIHwKKwkJCQkgICAgKGFoX2F0dHItPmdyaC50cmFmZmljX2NsYXNzIDw8IDIwKSB8CisJCQkJICAgIGFoX2F0dHItPmdyaC5mbG93X2xhYmVsKTsKKwkJcXAtPnNfaGRyLnUubC5ncmgucGF5bGVuID0KKwkJCWNwdV90b19iZTE2KCgod3ItPm9wY29kZSA9PQorCQkJCSAgICAgIElCX1dSX1NFTkRfV0lUSF9JTU0gPyA2IDogNSkgKworCQkJCSAgICAgbndvcmRzICsgU0laRV9PRl9DUkMpIDw8IDIpOworCQkvKiBuZXh0X2hkciBpcyBkZWZpbmVkIGJ5IEM4LTcgaW4gY2guIDguNC4xICovCisJCXFwLT5zX2hkci51LmwuZ3JoLm5leHRfaGRyID0gMHgxQjsKKwkJcXAtPnNfaGRyLnUubC5ncmguaG9wX2xpbWl0ID0gYWhfYXR0ci0+Z3JoLmhvcF9saW1pdDsKKwkJLyogVGhlIFNHSUQgaXMgMzItYml0IGFsaWduZWQuICovCisJCXFwLT5zX2hkci51LmwuZ3JoLnNnaWQuZ2xvYmFsLnN1Ym5ldF9wcmVmaXggPQorCQkJZGV2LT5naWRfcHJlZml4OworCQlxcC0+c19oZHIudS5sLmdyaC5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQgPQorCQkJaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGV2LT5kZCk7CisJCXFwLT5zX2hkci51LmwuZ3JoLmRnaWQgPSBhaF9hdHRyLT5ncmguZGdpZDsKKwkJLyoKKwkJICogRG9uJ3Qgd29ycnkgYWJvdXQgc2VuZGluZyB0byBsb2NhbGx5IGF0dGFjaGVkIG11bHRpY2FzdAorCQkgKiBRUHMuICBJdCBpcyB1bnNwZWNpZmllZCBieSB0aGUgc3BlYy4gd2hhdCBoYXBwZW5zLgorCQkgKi8KKwl9IGVsc2UgeworCQkvKiBIZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMuICovCisJCWh3b3JkcyA9IDc7CisJCWxyaDAgPSBJUFNfTFJIX0JUSDsKKwkJb2hkciA9ICZxcC0+c19oZHIudS5vdGg7CisJfQorCWlmICh3ci0+b3Bjb2RlID09IElCX1dSX1NFTkRfV0lUSF9JTU0pIHsKKwkJb2hkci0+dS51ZC5pbW1fZGF0YSA9IHdyLT5pbW1fZGF0YTsKKwkJd2MuaW1tX2RhdGEgPSB3ci0+aW1tX2RhdGE7CisJCWh3b3JkcyArPSAxOworCQlidGgwID0gSUJfT1BDT0RFX1VEX1NFTkRfT05MWV9XSVRIX0lNTUVESUFURSA8PCAyNDsKKwl9IGVsc2UgaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfU0VORCkgeworCQl3Yy5pbW1fZGF0YSA9IDA7CisJCWJ0aDAgPSBJQl9PUENPREVfVURfU0VORF9PTkxZIDw8IDI0OworCX0gZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJbHJoMCB8PSBhaF9hdHRyLT5zbCA8PCA0OworCWlmIChxcC0+aWJxcC5xcF90eXBlID09IElCX1FQVF9TTUkpCisJCWxyaDAgfD0gMHhGMDAwOwkvKiBTZXQgVkwgKHNlZSBjaC4gMTMuNS4zLjEpICovCisJcXAtPnNfaGRyLmxyaFswXSA9IGNwdV90b19iZTE2KGxyaDApOworCXFwLT5zX2hkci5scmhbMV0gPSBjcHVfdG9fYmUxNihhaF9hdHRyLT5kbGlkKTsJLyogREVTVCBMSUQgKi8KKwlxcC0+c19oZHIubHJoWzJdID0gY3B1X3RvX2JlMTYoaHdvcmRzICsgbndvcmRzICsgU0laRV9PRl9DUkMpOworCWxpZCA9IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCk7CisJaWYgKGxpZCkgeworCQlsaWQgfD0gYWhfYXR0ci0+c3JjX3BhdGhfYml0cyAmCisJCQkoKDEgPDwgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgLSAxKTsKKwkJcXAtPnNfaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGxpZCk7CisJfSBlbHNlCisJCXFwLT5zX2hkci5scmhbM10gPSBJQl9MSURfUEVSTUlTU0lWRTsKKwlpZiAod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJYnRoMCB8PSAxIDw8IDIzOworCWJ0aDAgfD0gZXh0cmFfYnl0ZXMgPDwgMjA7CisJYnRoMCB8PSBxcC0+aWJxcC5xcF90eXBlID09IElCX1FQVF9TTUkgPyBJUFNfREVGQVVMVF9QX0tFWSA6CisJCWlwYXRoX2xheWVyX2dldF9wa2V5KGRldi0+ZGQsIHFwLT5zX3BrZXlfaW5kZXgpOworCW9oZHItPmJ0aFswXSA9IGNwdV90b19iZTMyKGJ0aDApOworCS8qCisJICogVXNlIHRoZSBtdWx0aWNhc3QgUVAgaWYgdGhlIGRlc3RpbmF0aW9uIExJRCBpcyBhIG11bHRpY2FzdCBMSUQuCisJICovCisJb2hkci0+YnRoWzFdID0gYWhfYXR0ci0+ZGxpZCA+PSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFICYmCisJCWFoX2F0dHItPmRsaWQgIT0gSVBTX1BFUk1JU1NJVkVfTElEID8KKwkJX19jb25zdGFudF9jcHVfdG9fYmUzMihJUFNfTVVMVElDQVNUX1FQTikgOgorCQljcHVfdG9fYmUzMih3ci0+d3IudWQucmVtb3RlX3Fwbik7CisJLyogWFhYIENvdWxkIGxvc2UgYSBQU04gY291bnQgYnV0IG5vdCB3b3J0aCBsb2NraW5nICovCisJb2hkci0+YnRoWzJdID0gY3B1X3RvX2JlMzIocXAtPnNfbmV4dF9wc24rKyAmIElQU19QU05fTUFTSyk7CisJLyoKKwkgKiBRa2V5cyB3aXRoIHRoZSBoaWdoIG9yZGVyIGJpdCBzZXQgbWVhbiB1c2UgdGhlCisJICogcWtleSBmcm9tIHRoZSBRUCBjb250ZXh0IGluc3RlYWQgb2YgdGhlIFdSIChzZWUgMTAuMi41KS4KKwkgKi8KKwlvaGRyLT51LnVkLmRldGhbMF0gPSBjcHVfdG9fYmUzMigoaW50KXdyLT53ci51ZC5yZW1vdGVfcWtleSA8IDAgPworCQkJCQkgcXAtPnFrZXkgOiB3ci0+d3IudWQucmVtb3RlX3FrZXkpOworCW9oZHItPnUudWQuZGV0aFsxXSA9IGNwdV90b19iZTMyKHFwLT5pYnFwLnFwX251bSk7CisJaWYgKGlwYXRoX3ZlcmJzX3NlbmQoZGV2LT5kZCwgaHdvcmRzLCAodTMyICopICZxcC0+c19oZHIsCisJCQkgICAgIGxlbiwgJnNzKSkKKwkJZGV2LT5uX25vX3Bpb2J1ZisrOworCitkb25lOgorCS8qIFF1ZXVlIHRoZSBjb21wbGV0aW9uIHN0YXR1cyBlbnRyeS4gKi8KKwlpZiAoIXRlc3RfYml0KElQQVRIX1NfU0lHTkFMX1JFUV9XUiwgJnFwLT5zX2ZsYWdzKSB8fAorCSAgICAod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NJR05BTEVEKSkgeworCQl3Yy53cl9pZCA9IHdyLT53cl9pZDsKKwkJd2Muc3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKKwkJd2MudmVuZG9yX2VyciA9IDA7CisJCXdjLm9wY29kZSA9IElCX1dDX1NFTkQ7CisJCXdjLmJ5dGVfbGVuID0gbGVuOworCQl3Yy5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJCXdjLnNyY19xcCA9IDA7CisJCXdjLndjX2ZsYWdzID0gMDsKKwkJLyogWFhYIGluaXRpYWxpemUgb3RoZXIgZmllbGRzPyAqLworCQlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAuc2VuZF9jcSksICZ3YywgMCk7CisJfQorCWtmcmVlKHNnX2xpc3QpOworCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3VkX3JjdiAtIHJlY2VpdmUgYW4gaW5jb21pbmcgVUQgcGFja2V0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHRoZSBwYWNrZXQgY2FtZSBpbiBvbgorICogQGhkcjogdGhlIHBhY2tldCBoZWFkZXIKKyAqIEBoYXNfZ3JoOiB0cnVlIGlmIHRoZSBwYWNrZXQgaGFzIGEgR1JICisgKiBAZGF0YTogdGhlIHBhY2tldCBkYXRhCisgKiBAdGxlbjogdGhlIHBhY2tldCBsZW5ndGgKKyAqIEBxcDogdGhlIFFQIHRoZSBwYWNrZXQgY2FtZSBvbgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcXBfcmN2KCkgdG8gcHJvY2VzcyBhbiBpbmNvbWluZyBVRCBwYWNrZXQKKyAqIGZvciB0aGUgZ2l2ZW4gUVAuCisgKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsLgorICovCit2b2lkIGlwYXRoX3VkX3JjdihzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyLAorCQkgIGludCBoYXNfZ3JoLCB2b2lkICpkYXRhLCB1MzIgdGxlbiwgc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKKwlpbnQgb3Bjb2RlOworCXUzMiBoZHJzaXplOworCXUzMiBwYWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJdTMyIHFrZXk7CisJdTMyIHNyY19xcDsKKwlzdHJ1Y3QgaXBhdGhfcnEgKnJxOworCXN0cnVjdCBpcGF0aF9zcnEgKnNycTsKKwlzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlOworCXUxNiBkbGlkOworCWludCBoZWFkZXJfaW5fZGF0YTsKKworCS8qIENoZWNrIGZvciBHUkggKi8KKwlpZiAoIWhhc19ncmgpIHsKKwkJb2hkciA9ICZoZHItPnUub3RoOworCQloZHJzaXplID0gOCArIDEyICsgODsJLyogTFJIICsgQlRIICsgREVUSCAqLworCQlxa2V5ID0gYmUzMl90b19jcHUob2hkci0+dS51ZC5kZXRoWzBdKTsKKwkJc3JjX3FwID0gYmUzMl90b19jcHUob2hkci0+dS51ZC5kZXRoWzFdKTsKKwkJaGVhZGVyX2luX2RhdGEgPSAwOworCX0gZWxzZSB7CisJCW9oZHIgPSAmaGRyLT51Lmwub3RoOworCQloZHJzaXplID0gOCArIDQwICsgMTIgKyA4OyAvKiBMUkggKyBHUkggKyBCVEggKyBERVRIICovCisJCS8qCisJCSAqIFRoZSBoZWFkZXIgd2l0aCBHUkggaXMgNjggYnl0ZXMgYW5kIHRoZSBjb3JlIGRyaXZlciBzZXRzCisJCSAqIHRoZSBlYWdlciBoZWFkZXIgYnVmZmVyIHNpemUgdG8gNTYgYnl0ZXMgc28gdGhlIGxhc3QgMTIKKwkJICogYnl0ZXMgb2YgdGhlIElCIGhlYWRlciBpcyBpbiB0aGUgZGF0YSBidWZmZXIuCisJCSAqLworCQloZWFkZXJfaW5fZGF0YSA9CisJCQlpcGF0aF9sYXllcl9nZXRfcmN2aGRyZW50c2l6ZShkZXYtPmRkKSA9PSAxNjsKKwkJaWYgKGhlYWRlcl9pbl9kYXRhKSB7CisJCQlxa2V5ID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMV0pOworCQkJc3JjX3FwID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMl0pOworCQkJZGF0YSArPSAxMjsKKwkJfSBlbHNlIHsKKwkJCXFrZXkgPSBiZTMyX3RvX2NwdShvaGRyLT51LnVkLmRldGhbMF0pOworCQkJc3JjX3FwID0gYmUzMl90b19jcHUob2hkci0+dS51ZC5kZXRoWzFdKTsKKwkJfQorCX0KKwlzcmNfcXAgJj0gSVBTX1FQTl9NQVNLOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBwZXJtaXNzaXZlIExJRCBpcyBvbmx5IHVzZWQgb24gUVAwCisJICogYW5kIHRoZSBRS0VZIG1hdGNoZXMgKHNlZSA5LjYuMS40LjEgYW5kIDkuNi4xLjUuMSkuCisJICovCisJaWYgKHFwLT5pYnFwLnFwX251bSkgeworCQlpZiAodW5saWtlbHkoaGRyLT5scmhbMV0gPT0gSUJfTElEX1BFUk1JU1NJVkUgfHwKKwkJCSAgICAgaGRyLT5scmhbM10gPT0gSUJfTElEX1BFUk1JU1NJVkUpKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaWYgKHVubGlrZWx5KHFrZXkgIT0gcXAtPnFrZXkpKSB7CisJCQkvKiBYWFggT0sgdG8gbG9zZSBhIGNvdW50IG9uY2UgaW4gYSB3aGlsZS4gKi8KKwkJCWRldi0+cWtleV92aW9sYXRpb25zKys7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9IGVsc2UgaWYgKGhkci0+bHJoWzFdID09IElCX0xJRF9QRVJNSVNTSVZFIHx8CisJCSAgIGhkci0+bHJoWzNdID09IElCX0xJRF9QRVJNSVNTSVZFKSB7CisJCXN0cnVjdCBpYl9zbXAgKnNtcCA9IChzdHJ1Y3QgaWJfc21wICopIGRhdGE7CisKKwkJaWYgKHNtcC0+bWdtdF9jbGFzcyAhPSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpIHsKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKworCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBtZXNzYWdlIHdhcyBwYWRkZWQgYnkuICovCisJcGFkID0gKGJlMzJfdG9fY3B1KG9oZHItPmJ0aFswXSkgPj4gMjApICYgMzsKKwlpZiAodW5saWtlbHkodGxlbiA8IChoZHJzaXplICsgcGFkICsgNCkpKSB7CisJCS8qIERyb3AgaW5jb21wbGV0ZSBwYWNrZXRzLiAqLworCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCWdvdG8gYmFpbDsKKwl9CisJdGxlbiAtPSBoZHJzaXplICsgcGFkICsgNDsKKworCS8qIERyb3AgaW52YWxpZCBNQUQgcGFja2V0cyAoc2VlIDEzLjUuMy4xKS4gKi8KKwlpZiAodW5saWtlbHkoKHFwLT5pYnFwLnFwX251bSA9PSAwICYmCisJCSAgICAgICh0bGVuICE9IDI1NiB8fAorCQkgICAgICAgKGJlMTZfdG9fY3B1KGhkci0+bHJoWzBdKSA+PiAxMikgIT0gMTUpKSB8fAorCQkgICAgIChxcC0+aWJxcC5xcF9udW0gPT0gMSAmJgorCQkgICAgICAodGxlbiAhPSAyNTYgfHwKKwkJICAgICAgIChiZTE2X3RvX2NwdShoZHItPmxyaFswXSkgPj4gMTIpID09IDE1KSkpKSB7CisJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogQSBHUkggaXMgZXhwZWN0ZWQgdG8gcHJlY2VlZCB0aGUgZGF0YSBldmVuIGlmIG5vdAorCSAqIHByZXNlbnQgb24gdGhlIHdpcmUuCisJICovCisJd2MuYnl0ZV9sZW4gPSB0bGVuICsgc2l6ZW9mKHN0cnVjdCBpYl9ncmgpOworCisJLyoKKwkgKiBUaGUgb3Bjb2RlIGlzIGluIHRoZSBsb3cgYnl0ZSB3aGVuIGl0cyBpbiBuZXR3b3JrIG9yZGVyCisJICogKHRvcCBieXRlIHdoZW4gaW4gaG9zdCBvcmRlcikuCisJICovCisJb3Bjb2RlID0gYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyNDsKKwlpZiAocXAtPmlicXAucXBfbnVtID4gMSAmJgorCSAgICBvcGNvZGUgPT0gSUJfT1BDT0RFX1VEX1NFTkRfT05MWV9XSVRIX0lNTUVESUFURSkgeworCQlpZiAoaGVhZGVyX2luX2RhdGEpIHsKKwkJCXdjLmltbV9kYXRhID0gKihfX2JlMzIgKikgZGF0YTsKKwkJCWRhdGEgKz0gc2l6ZW9mKF9fYmUzMik7CisJCX0gZWxzZQorCQkJd2MuaW1tX2RhdGEgPSBvaGRyLT51LnVkLmltbV9kYXRhOworCQl3Yy53Y19mbGFncyA9IElCX1dDX1dJVEhfSU1NOworCQloZHJzaXplICs9IHNpemVvZih1MzIpOworCX0gZWxzZSBpZiAob3Bjb2RlID09IElCX09QQ09ERV9VRF9TRU5EX09OTFkpIHsKKwkJd2MuaW1tX2RhdGEgPSAwOworCQl3Yy53Y19mbGFncyA9IDA7CisJfSBlbHNlIHsKKwkJZGV2LT5uX3BrdF9kcm9wcysrOworCQlnb3RvIGJhaWw7CisJfQorCisJLyoKKwkgKiBHZXQgdGhlIG5leHQgd29yayByZXF1ZXN0IGVudHJ5IHRvIGZpbmQgd2hlcmUgdG8gcHV0IHRoZSBkYXRhLgorCSAqIE5vdGUgdGhhdCBpdCBpcyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgYWZ0ZXIgY2hhbmdpbmcgcnEtPnRhaWwKKwkgKiBzaW5jZSBpcGF0aF9wb3N0X3JlY2VpdmUoKSB3b24ndCBmaWxsIHRoZSBlbXB0eSBzbG90LgorCSAqLworCWlmIChxcC0+aWJxcC5zcnEpIHsKKwkJc3JxID0gdG9faXNycShxcC0+aWJxcC5zcnEpOworCQlycSA9ICZzcnEtPnJxOworCX0gZWxzZSB7CisJCXNycSA9IE5VTEw7CisJCXJxID0gJnFwLT5yX3JxOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlpZiAocnEtPnRhaWwgPT0gcnEtPmhlYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJZGV2LT5uX3BrdF9kcm9wcysrOworCQlnb3RvIGJhaWw7CisJfQorCS8qIFNpbGVudGx5IGRyb3AgcGFja2V0cyB3aGljaCBhcmUgdG9vIGJpZy4gKi8KKwl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHJxLT50YWlsKTsKKwlpZiAod2MuYnl0ZV9sZW4gPiB3cWUtPmxlbmd0aCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCWdvdG8gYmFpbDsKKwl9CisJd2Mud3JfaWQgPSB3cWUtPndyX2lkOworCXFwLT5yX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07CisJcXAtPnJfc2dlLnNnX2xpc3QgPSB3cWUtPnNnX2xpc3QgKyAxOworCXFwLT5yX3NnZS5udW1fc2dlID0gd3FlLT5udW1fc2dlOworCWlmICgrK3JxLT50YWlsID49IHJxLT5zaXplKQorCQlycS0+dGFpbCA9IDA7CisJaWYgKHNycSAmJiBzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIpIHsKKwkJdTMyIG47CisKKwkJaWYgKHJxLT5oZWFkIDwgcnEtPnRhaWwpCisJCQluID0gcnEtPnNpemUgKyBycS0+aGVhZCAtIHJxLT50YWlsOworCQllbHNlCisJCQluID0gcnEtPmhlYWQgLSBycS0+dGFpbDsKKwkJaWYgKG4gPCBzcnEtPmxpbWl0KSB7CisJCQlzdHJ1Y3QgaWJfZXZlbnQgZXY7CisKKwkJCXNycS0+bGltaXQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJCWV2LmRldmljZSA9IHFwLT5pYnFwLmRldmljZTsKKwkJCWV2LmVsZW1lbnQuc3JxID0gcXAtPmlicXAuc3JxOworCQkJZXYuZXZlbnQgPSBJQl9FVkVOVF9TUlFfTElNSVRfUkVBQ0hFRDsKKwkJCXNycS0+aWJzcnEuZXZlbnRfaGFuZGxlcigmZXYsCisJCQkJCQkgc3JxLT5pYnNycS5zcnFfY29udGV4dCk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlpZiAoaGFzX2dyaCkgeworCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCAmaGRyLT51LmwuZ3JoLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWJfZ3JoKSk7CisJCXdjLndjX2ZsYWdzIHw9IElCX1dDX0dSSDsKKwl9IGVsc2UKKwkJaXBhdGhfc2tpcF9zZ2UoJnFwLT5yX3NnZSwgc2l6ZW9mKHN0cnVjdCBpYl9ncmgpKTsKKwlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCBkYXRhLAorCQkgICAgICAgd2MuYnl0ZV9sZW4gLSBzaXplb2Yoc3RydWN0IGliX2dyaCkpOworCXdjLnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CisJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKKwl3Yy52ZW5kb3JfZXJyID0gMDsKKwl3Yy5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJd2Muc3JjX3FwID0gc3JjX3FwOworCS8qIFhYWCBkbyB3ZSBrbm93IHdoaWNoIHBrZXkgbWF0Y2hlZD8gT25seSBuZWVkZWQgZm9yIEdTSS4gKi8KKwl3Yy5wa2V5X2luZGV4ID0gMDsKKwl3Yy5zbGlkID0gYmUxNl90b19jcHUoaGRyLT5scmhbM10pOworCXdjLnNsID0gKGJlMTZfdG9fY3B1KGhkci0+bHJoWzBdKSA+PiA0KSAmIDB4RjsKKwlkbGlkID0gYmUxNl90b19jcHUoaGRyLT5scmhbMV0pOworCS8qCisJICogU2F2ZSB0aGUgTE1DIGxvd2VyIGJpdHMgaWYgdGhlIGRlc3RpbmF0aW9uIExJRCBpcyBhIHVuaWNhc3QgTElELgorCSAqLworCXdjLmRsaWRfcGF0aF9iaXRzID0gZGxpZCA+PSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFID8gMCA6CisJCWRsaWQgJiAoKDEgPDwgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgLSAxKTsKKwkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCisJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCisJCSAgICAgICAob2hkci0+YnRoWzBdICYKKwkJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOworCitiYWlsOjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYjA4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKworc3RhdGljIHZvaWQgX19pcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMoc3RydWN0IHBhZ2UgKipwLCBzaXplX3QgbnVtX3BhZ2VzLAorCQkJCSAgIGludCBkaXJ0eSkKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgeworCQlpcGF0aF9jZGJnKE1NLCAiJWx1LyVsdSBwdXRfcGFnZSAlcFxuIiwgKHVuc2lnbmVkIGxvbmcpIGksCisJCQkgICAodW5zaWduZWQgbG9uZykgbnVtX3BhZ2VzLCBwW2ldKTsKKwkJaWYgKGRpcnR5KQorCQkJc2V0X3BhZ2VfZGlydHlfbG9jayhwW2ldKTsKKwkJcHV0X3BhZ2UocFtpXSk7CisJfQorfQorCisvKiBjYWxsIHdpdGggY3VycmVudC0+bW0tPm1tYXBfc2VtIGhlbGQgKi8KK3N0YXRpYyBpbnQgX19nZXRfdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsIHNpemVfdCBudW1fcGFnZXMsCisJCQlzdHJ1Y3QgcGFnZSAqKnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfbGltaXQ7CisJc2l6ZV90IGdvdDsKKwlpbnQgcmV0OworCisjaWYgMAorCS8qCisJICogWFhYIC0gY2F1c2VzIE1QSSBwcm9ncmFtcyB0byBmYWlsLCBoYXZlbid0IGhhZCB0aW1lIHRvIGNoZWNrCisJICogeWV0CisJICovCisJaWYgKCFjYXBhYmxlKENBUF9JUENfTE9DSykpIHsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIGJhaWw7CisJfQorI2VuZGlmCisKKwlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciA+PgorCQlQQUdFX1NISUZUOworCisJaWYgKG51bV9wYWdlcyA+IGxvY2tfbGltaXQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsOworCX0KKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgInBpbiAlbHggcGFnZXMgZnJvbSB2YWRkciAlbHhcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nKSBudW1fcGFnZXMsIHN0YXJ0X3BhZ2UpOworCisJZm9yIChnb3QgPSAwOyBnb3QgPCBudW1fcGFnZXM7IGdvdCArPSByZXQpIHsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sCisJCQkJICAgICBzdGFydF9wYWdlICsgZ290ICogUEFHRV9TSVpFLAorCQkJCSAgICAgbnVtX3BhZ2VzIC0gZ290LCAxLCAxLAorCQkJCSAgICAgcCArIGdvdCwgdm1hKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGJhaWxfcmVsZWFzZTsKKwl9CisKKwljdXJyZW50LT5tbS0+bG9ja2VkX3ZtICs9IG51bV9wYWdlczsKKworCXJldCA9IDA7CisJZ290byBiYWlsOworCitiYWlsX3JlbGVhc2U6CisJX19pcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMocCwgZ290LCAwKTsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9nZXRfdXNlcl9wYWdlcyAtIGxvY2sgdXNlciBwYWdlcyBpbnRvIG1lbW9yeQorICogQHN0YXJ0X3BhZ2U6IHRoZSBzdGFydCBwYWdlCisgKiBAbnVtX3BhZ2VzOiB0aGUgbnVtYmVyIG9mIHBhZ2VzCisgKiBAcDogdGhlIG91dHB1dCBwYWdlIHN0cnVjdHVyZXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgZ2l2ZW4gc3RhcnQgcGFnZSAocGFnZSBhbGlnbmVkIHVzZXIgdmlydHVhbAorICogYWRkcmVzcykgYW5kIHBpbnMgaXQgYW5kIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWVkIG51bWJlciBvZiBwYWdlcy4gIEZvcgorICogbm93LCBudW1fcGFnZXMgaXMgYWx3YXlzIDEsIGJ1dCB0aGF0IHdpbGwgcHJvYmFibHkgY2hhbmdlIGF0IHNvbWUgcG9pbnQKKyAqIChiZWNhdXNlIGNhbGxlciBpcyBkb2luZyBleHBlY3RlZCBzZW5kcyBvbiBhIHNpbmdsZSB2aXJ0dWFsbHkgY29udGlndW91cworICogYnVmZmVyLCBzbyB3ZSBjYW4gZG8gYWxsIHBhZ2VzIGF0IG9uY2UpLgorICovCitpbnQgaXBhdGhfZ2V0X3VzZXJfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLCBzaXplX3QgbnVtX3BhZ2VzLAorCQkJIHN0cnVjdCBwYWdlICoqcCkKK3sKKwlpbnQgcmV0OworCisJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXJldCA9IF9fZ2V0X3VzZXJfcGFnZXMoc3RhcnRfcGFnZSwgbnVtX3BhZ2VzLCBwLCBOVUxMKTsKKworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9nZXRfdXNlcl9wYWdlc19ub2NvcHkgLSBsb2NrIGEgc2luZ2xlIHBhZ2UgZm9yIEkvTyBhbmQgbWFyayBzaGFyZWQKKyAqIEBzdGFydF9wYWdlOiB0aGUgcGFnZSB0byBsb2NrCisgKiBAcDogdGhlIG91dHB1dCBwYWdlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBpcGF0aF9nZXRfdXNlcl9wYWdlcywgYnV0IGl0J3MgYWx3YXlzIG9uZSBwYWdlLCBhbmQgd2UKKyAqIG1hcmsgdGhlIHBhZ2UgYXMgbG9ja2VkIGZvciBJL08sIGFuZCBzaGFyZWQuICBUaGlzIGlzIHVzZWQgZm9yIHRoZSB1c2VyCisgKiBwcm9jZXNzIHBhZ2UgdGhhdCBjb250YWlucyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIHJjdmhkcnEgdGFpbAorICogdXBkYXRlLCBzbyB3ZSBuZWVkIHRvIGhhdmUgdGhlIHZtYS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlIHBhZ2UgY2FuIGJlCisgKiB0YWtlbiBhd2F5IGZyb20gdXMgb24gZm9yaywgZXZlbiBpZiB0aGUgY2hpbGQgbmV2ZXIgdG91Y2hlcyBpdCwgYW5kIHRoZW4KKyAqIHRoZSB1c2VyIHByb2Nlc3MgbmV2ZXIgc2VlcyB0aGUgdGFpbCByZWdpc3RlciB1cGRhdGVzLgorICovCitpbnQgaXBhdGhfZ2V0X3VzZXJfcGFnZXNfbm9jb3B5KHVuc2lnbmVkIGxvbmcgcGFnZSwgc3RydWN0IHBhZ2UgKipwKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWludCByZXQ7CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJcmV0ID0gX19nZXRfdXNlcl9wYWdlcyhwYWdlLCAxLCBwLCAmdm1hKTsKKworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMoc3RydWN0IHBhZ2UgKipwLCBzaXplX3QgbnVtX3BhZ2VzKQoreworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlfX2lwYXRoX3JlbGVhc2VfdXNlcl9wYWdlcyhwLCBudW1fcGFnZXMsIDEpOworCisJY3VycmVudC0+bW0tPmxvY2tlZF92bSAtPSBudW1fcGFnZXM7CisKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKK30KKworc3RydWN0IGlwYXRoX3VzZXJfcGFnZXNfd29yayB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7Cit9OworCitzdGF0aWMgdm9pZCB1c2VyX3BhZ2VzX2FjY291bnQodm9pZCAqcHRyKQoreworCXN0cnVjdCBpcGF0aF91c2VyX3BhZ2VzX3dvcmsgKndvcmsgPSBwdHI7CisKKwlkb3duX3dyaXRlKCZ3b3JrLT5tbS0+bW1hcF9zZW0pOworCXdvcmstPm1tLT5sb2NrZWRfdm0gLT0gd29yay0+bnVtX3BhZ2VzOworCXVwX3dyaXRlKCZ3b3JrLT5tbS0+bW1hcF9zZW0pOworCW1tcHV0KHdvcmstPm1tKTsKKwlrZnJlZSh3b3JrKTsKK30KKwordm9pZCBpcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXNfb25fY2xvc2Uoc3RydWN0IHBhZ2UgKipwLCBzaXplX3QgbnVtX3BhZ2VzKQoreworCXN0cnVjdCBpcGF0aF91c2VyX3BhZ2VzX3dvcmsgKndvcms7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisKKwlfX2lwYXRoX3JlbGVhc2VfdXNlcl9wYWdlcyhwLCBudW1fcGFnZXMsIDEpOworCisJbW0gPSBnZXRfdGFza19tbShjdXJyZW50KTsKKwlpZiAoIW1tKQorCQlnb3RvIGJhaWw7CisKKwl3b3JrID0ga21hbGxvYyhzaXplb2YoKndvcmspLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdvcmspCisJCWdvdG8gYmFpbF9tbTsKKworCWdvdG8gYmFpbDsKKworCUlOSVRfV09SSygmd29yay0+d29yaywgdXNlcl9wYWdlc19hY2NvdW50LCB3b3JrKTsKKwl3b3JrLT5tbSA9IG1tOworCXdvcmstPm51bV9wYWdlcyA9IG51bV9wYWdlczsKKworYmFpbF9tbToKKwltbXB1dChtbSk7CitiYWlsOgorCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmZGJkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCkBAIC0wLDAgKzEsMTIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxyZG1hL2liX21hZC5oPgorI2luY2x1ZGUgPHJkbWEvaWJfdXNlcl92ZXJicy5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorCisvKiBOb3Qgc3RhdGljLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGNvbXBpbGVyIHJlbW92aW5nIGl0ICovCitjb25zdCBjaGFyIGlwYXRoX3ZlcmJzX3ZlcnNpb25bXSA9ICJpcGF0aF92ZXJicyAiIElQQVRIX0lEU1RSOworCitzdGF0aWMgdW5zaWduZWQgaW50IGliX2lwYXRoX3FwX3RhYmxlX3NpemUgPSAyNTE7Cittb2R1bGVfcGFyYW1fbmFtZWQocXBfdGFibGVfc2l6ZSwgaWJfaXBhdGhfcXBfdGFibGVfc2l6ZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHFwX3RhYmxlX3NpemUsICJRUCB0YWJsZSBzaXplIik7CisKK3Vuc2lnbmVkIGludCBpYl9pcGF0aF9sa2V5X3RhYmxlX3NpemUgPSAxMjsKK21vZHVsZV9wYXJhbV9uYW1lZChsa2V5X3RhYmxlX3NpemUsIGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZSwgdWludCwKKwkJICAgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGxrZXlfdGFibGVfc2l6ZSwKKwkJICJMS0VZIHRhYmxlIHNpemUgaW4gYml0cyAoMl5uLCAxIDw9IG4gPD0gMjMpIik7CisKK3Vuc2lnbmVkIGludCBpYl9pcGF0aF9kZWJ1ZzsJLyogZGVidWcgbWFzayAqLworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpYl9pcGF0aF9kZWJ1ZywgdWludCwgU19JV1VTUiB8IFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlZlcmJzIGRlYnVnIG1hc2siKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiUGF0aFNjYWxlIDxzdXBwb3J0QHBhdGhzY2FsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBhdGhzY2FsZSBJbmZpbmlQYXRoIGRyaXZlciIpOworCitjb25zdCBpbnQgaWJfaXBhdGhfc3RhdGVfb3BzW0lCX1FQU19FUlIgKyAxXSA9IHsKKwlbSUJfUVBTX1JFU0VUXSA9IDAsCisJW0lCX1FQU19JTklUXSA9IElQQVRIX1BPU1RfUkVDVl9PSywKKwlbSUJfUVBTX1JUUl0gPSBJUEFUSF9QT1NUX1JFQ1ZfT0sgfCBJUEFUSF9QUk9DRVNTX1JFQ1ZfT0ssCisJW0lCX1FQU19SVFNdID0gSVBBVEhfUE9TVF9SRUNWX09LIHwgSVBBVEhfUFJPQ0VTU19SRUNWX09LIHwKKwkgICAgSVBBVEhfUE9TVF9TRU5EX09LIHwgSVBBVEhfUFJPQ0VTU19TRU5EX09LLAorCVtJQl9RUFNfU1FEXSA9IElQQVRIX1BPU1RfUkVDVl9PSyB8IElQQVRIX1BST0NFU1NfUkVDVl9PSyB8CisJICAgIElQQVRIX1BPU1RfU0VORF9PSywKKwlbSUJfUVBTX1NRRV0gPSBJUEFUSF9QT1NUX1JFQ1ZfT0sgfCBJUEFUSF9QUk9DRVNTX1JFQ1ZfT0ssCisJW0lCX1FQU19FUlJdID0gMCwKK307CisKKy8qCisgKiBUcmFuc2xhdGUgaWJfd3Jfb3Bjb2RlIGludG8gaWJfd2Nfb3Bjb2RlLgorICovCitjb25zdCBlbnVtIGliX3djX29wY29kZSBpYl9pcGF0aF93Y19vcGNvZGVbXSA9IHsKKwlbSUJfV1JfUkRNQV9XUklURV0gPSBJQl9XQ19SRE1BX1dSSVRFLAorCVtJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NXSA9IElCX1dDX1JETUFfV1JJVEUsCisJW0lCX1dSX1NFTkRdID0gSUJfV0NfU0VORCwKKwlbSUJfV1JfU0VORF9XSVRIX0lNTV0gPSBJQl9XQ19TRU5ELAorCVtJQl9XUl9SRE1BX1JFQURdID0gSUJfV0NfUkRNQV9SRUFELAorCVtJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1BdID0gSUJfV0NfQ09NUF9TV0FQLAorCVtJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERF0gPSBJQl9XQ19GRVRDSF9BREQKK307CisKKy8qCisgKiBTeXN0ZW0gaW1hZ2UgR1VJRC4KKyAqLworc3RhdGljIF9fYmU2NCBzeXNfaW1hZ2VfZ3VpZDsKKworLyoqCisgKiBpcGF0aF9jb3B5X3NnZSAtIGNvcHkgZGF0YSB0byBTR0UgbWVtb3J5CisgKiBAc3M6IHRoZSBTR0Ugc3RhdGUKKyAqIEBkYXRhOiB0aGUgZGF0YSB0byBjb3B5CisgKiBAbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhCisgKi8KK3ZvaWQgaXBhdGhfY29weV9zZ2Uoc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsIHZvaWQgKmRhdGEsIHUzMiBsZW5ndGgpCit7CisJc3RydWN0IGlwYXRoX3NnZSAqc2dlID0gJnNzLT5zZ2U7CisKKwl3aGlsZSAobGVuZ3RoKSB7CisJCXUzMiBsZW4gPSBzZ2UtPmxlbmd0aDsKKworCQlCVUdfT04obGVuID09IDApOworCQlpZiAobGVuID4gbGVuZ3RoKQorCQkJbGVuID0gbGVuZ3RoOworCQltZW1jcHkoc2dlLT52YWRkciwgZGF0YSwgbGVuKTsKKwkJc2dlLT52YWRkciArPSBsZW47CisJCXNnZS0+bGVuZ3RoIC09IGxlbjsKKwkJc2dlLT5zZ2VfbGVuZ3RoIC09IGxlbjsKKwkJaWYgKHNnZS0+c2dlX2xlbmd0aCA9PSAwKSB7CisJCQlpZiAoLS1zcy0+bnVtX3NnZSkKKwkJCQkqc2dlID0gKnNzLT5zZ19saXN0Kys7CisJCX0gZWxzZSBpZiAoc2dlLT5sZW5ndGggPT0gMCAmJiBzZ2UtPm1yICE9IE5VTEwpIHsKKwkJCWlmICgrK3NnZS0+biA+PSBJUEFUSF9TRUdTWikgeworCQkJCWlmICgrK3NnZS0+bSA+PSBzZ2UtPm1yLT5tYXBzeikKKwkJCQkJYnJlYWs7CisJCQkJc2dlLT5uID0gMDsKKwkJCX0KKwkJCXNnZS0+dmFkZHIgPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0udmFkZHI7CisJCQlzZ2UtPmxlbmd0aCA9CisJCQkJc2dlLT5tci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS5sZW5ndGg7CisJCX0KKwkJZGF0YSArPSBsZW47CisJCWxlbmd0aCAtPSBsZW47CisJfQorfQorCisvKioKKyAqIGlwYXRoX3NraXBfc2dlIC0gc2tpcCBvdmVyIFNHRSBtZW1vcnkgLSBYWFggYWxtb3N0IGR1cCBvZiBwcmV2IGZ1bmMKKyAqIEBzczogdGhlIFNHRSBzdGF0ZQorICogQGxlbmd0aDogdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwCisgKi8KK3ZvaWQgaXBhdGhfc2tpcF9zZ2Uoc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsIHUzMiBsZW5ndGgpCit7CisJc3RydWN0IGlwYXRoX3NnZSAqc2dlID0gJnNzLT5zZ2U7CisKKwl3aGlsZSAobGVuZ3RoID4gc2dlLT5zZ2VfbGVuZ3RoKSB7CisJCWxlbmd0aCAtPSBzZ2UtPnNnZV9sZW5ndGg7CisJCXNzLT5zZ2UgPSAqc3MtPnNnX2xpc3QrKzsKKwl9CisJd2hpbGUgKGxlbmd0aCkgeworCQl1MzIgbGVuID0gc2dlLT5sZW5ndGg7CisKKwkJQlVHX09OKGxlbiA9PSAwKTsKKwkJaWYgKGxlbiA+IGxlbmd0aCkKKwkJCWxlbiA9IGxlbmd0aDsKKwkJc2dlLT52YWRkciArPSBsZW47CisJCXNnZS0+bGVuZ3RoIC09IGxlbjsKKwkJc2dlLT5zZ2VfbGVuZ3RoIC09IGxlbjsKKwkJaWYgKHNnZS0+c2dlX2xlbmd0aCA9PSAwKSB7CisJCQlpZiAoLS1zcy0+bnVtX3NnZSkKKwkJCQkqc2dlID0gKnNzLT5zZ19saXN0Kys7CisJCX0gZWxzZSBpZiAoc2dlLT5sZW5ndGggPT0gMCAmJiBzZ2UtPm1yICE9IE5VTEwpIHsKKwkJCWlmICgrK3NnZS0+biA+PSBJUEFUSF9TRUdTWikgeworCQkJCWlmICgrK3NnZS0+bSA+PSBzZ2UtPm1yLT5tYXBzeikKKwkJCQkJYnJlYWs7CisJCQkJc2dlLT5uID0gMDsKKwkJCX0KKwkJCXNnZS0+dmFkZHIgPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0udmFkZHI7CisJCQlzZ2UtPmxlbmd0aCA9CisJCQkJc2dlLT5tci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS5sZW5ndGg7CisJCX0KKwkJbGVuZ3RoIC09IGxlbjsKKwl9Cit9CisKKy8qKgorICogaXBhdGhfcG9zdF9zZW5kIC0gcG9zdCBhIHNlbmQgb24gYSBRUAorICogQGlicXA6IHRoZSBRUCB0byBwb3N0IHRoZSBzZW5kIG9uCisgKiBAd3I6IHRoZSBsaXN0IG9mIHdvcmsgcmVxdWVzdHMgdG8gcG9zdAorICogQGJhZF93cjogdGhlIGZpcnN0IGJhZCBXUiBpcyBwdXQgaGVyZQorICoKKyAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICovCitzdGF0aWMgaW50IGlwYXRoX3Bvc3Rfc2VuZChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwKKwkJCSAgIHN0cnVjdCBpYl9zZW5kX3dyICoqYmFkX3dyKQoreworCXN0cnVjdCBpcGF0aF9xcCAqcXAgPSB0b19pcXAoaWJxcCk7CisJaW50IGVyciA9IDA7CisKKwkvKiBDaGVjayB0aGF0IHN0YXRlIGlzIE9LIHRvIHBvc3Qgc2VuZC4gKi8KKwlpZiAoIShpYl9pcGF0aF9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIElQQVRIX1BPU1RfU0VORF9PSykpIHsKKwkJKmJhZF93ciA9IHdyOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJZm9yICg7IHdyOyB3ciA9IHdyLT5uZXh0KSB7CisJCXN3aXRjaCAocXAtPmlicXAucXBfdHlwZSkgeworCQljYXNlIElCX1FQVF9VQzoKKwkJY2FzZSBJQl9RUFRfUkM6CisJCQllcnIgPSBpcGF0aF9wb3N0X3JjX3NlbmQocXAsIHdyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSUJfUVBUX1NNSToKKwkJY2FzZSBJQl9RUFRfR1NJOgorCQljYXNlIElCX1FQVF9VRDoKKwkJCWVyciA9IGlwYXRoX3Bvc3RfdWRfc2VuZChxcCwgd3IpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJaWYgKGVycikgeworCQkJKmJhZF93ciA9IHdyOworCQkJYnJlYWs7CisJCX0KKwl9CisKK2JhaWw6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpcGF0aF9wb3N0X3JlY2VpdmUgLSBwb3N0IGEgcmVjZWl2ZSBvbiBhIFFQCisgKiBAaWJxcDogdGhlIFFQIHRvIHBvc3QgdGhlIHJlY2VpdmUgb24KKyAqIEB3cjogdGhlIFdSIHRvIHBvc3QKKyAqIEBiYWRfd3I6IHRoZSBmaXJzdCBiYWQgV1IgaXMgcHV0IGhlcmUKKyAqCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworc3RhdGljIGludCBpcGF0aF9wb3N0X3JlY2VpdmUoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcmVjdl93ciAqd3IsCisJCQkgICAgICBzdHJ1Y3QgaWJfcmVjdl93ciAqKmJhZF93cikKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gdG9faXFwKGlicXApOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCS8qIENoZWNrIHRoYXQgc3RhdGUgaXMgT0sgdG8gcG9zdCByZWNlaXZlLiAqLworCWlmICghKGliX2lwYXRoX3N0YXRlX29wc1txcC0+c3RhdGVdICYgSVBBVEhfUE9TVF9SRUNWX09LKSkgeworCQkqYmFkX3dyID0gd3I7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlmb3IgKDsgd3I7IHdyID0gd3ItPm5leHQpIHsKKwkJc3RydWN0IGlwYXRoX3J3cWUgKndxZTsKKwkJdTMyIG5leHQ7CisJCWludCBpLCBqOworCisJCWlmICh3ci0+bnVtX3NnZSA+IHFwLT5yX3JxLm1heF9zZ2UpIHsKKwkJCSpiYWRfd3IgPSB3cjsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCQluZXh0ID0gcXAtPnJfcnEuaGVhZCArIDE7CisJCWlmIChuZXh0ID49IHFwLT5yX3JxLnNpemUpCisJCQluZXh0ID0gMDsKKwkJaWYgKG5leHQgPT0gcXAtPnJfcnEudGFpbCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCQkJKmJhZF93ciA9IHdyOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCXdxZSA9IGdldF9yd3FlX3B0cigmcXAtPnJfcnEsIHFwLT5yX3JxLmhlYWQpOworCQl3cWUtPndyX2lkID0gd3ItPndyX2lkOworCQl3cWUtPnNnX2xpc3RbMF0ubXIgPSBOVUxMOworCQl3cWUtPnNnX2xpc3RbMF0udmFkZHIgPSBOVUxMOworCQl3cWUtPnNnX2xpc3RbMF0ubGVuZ3RoID0gMDsKKwkJd3FlLT5zZ19saXN0WzBdLnNnZV9sZW5ndGggPSAwOworCQl3cWUtPmxlbmd0aCA9IDA7CisJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgd3ItPm51bV9zZ2U7IGkrKykgeworCQkJLyogQ2hlY2sgTEtFWSAqLworCQkJaWYgKHRvX2lwZChxcC0+aWJxcC5wZCktPnVzZXIgJiYKKwkJCSAgICB3ci0+c2dfbGlzdFtpXS5sa2V5ID09IDApIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLAorCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQkqYmFkX3dyID0gd3I7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQlpZiAod3ItPnNnX2xpc3RbaV0ubGVuZ3RoID09IDApCisJCQkJY29udGludWU7CisJCQlpZiAoIWlwYXRoX2xrZXlfb2soCisJCQkJICAgICZ0b19pZGV2KHFwLT5pYnFwLmRldmljZSktPmxrX3RhYmxlLAorCQkJCSAgICAmd3FlLT5zZ19saXN0W2pdLCAmd3ItPnNnX2xpc3RbaV0sCisJCQkJICAgIElCX0FDQ0VTU19MT0NBTF9XUklURSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLAorCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQkqYmFkX3dyID0gd3I7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQl3cWUtPmxlbmd0aCArPSB3ci0+c2dfbGlzdFtpXS5sZW5ndGg7CisJCQlqKys7CisJCX0KKwkJd3FlLT5udW1fc2dlID0gajsKKwkJcXAtPnJfcnEuaGVhZCA9IG5leHQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3FwX3JjdiAtIHByb2Nlc3NpbmcgYW4gaW5jb21pbmcgcGFja2V0IG9uIGEgUVAKKyAqIEBkZXY6IHRoZSBkZXZpY2UgdGhlIHBhY2tldCBjYW1lIG9uCisgKiBAaGRyOiB0aGUgcGFja2V0IGhlYWRlcgorICogQGhhc19ncmg6IHRydWUgaWYgdGhlIHBhY2tldCBoYXMgYSBHUkgKKyAqIEBkYXRhOiB0aGUgcGFja2V0IGRhdGEKKyAqIEB0bGVuOiB0aGUgcGFja2V0IGxlbmd0aAorICogQHFwOiB0aGUgUVAgdGhlIHBhY2tldCBjYW1lIG9uCisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9pYl9yY3YoKSB0byBwcm9jZXNzIGFuIGluY29taW5nIHBhY2tldAorICogZm9yIHRoZSBnaXZlbiBRUC4KKyAqIENhbGxlZCBhdCBpbnRlcnJ1cHQgbGV2ZWwuCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3FwX3JjdihzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwKKwkJCSBzdHJ1Y3QgaXBhdGhfaWJfaGVhZGVyICpoZHIsIGludCBoYXNfZ3JoLAorCQkJIHZvaWQgKmRhdGEsIHUzMiB0bGVuLCBzdHJ1Y3QgaXBhdGhfcXAgKnFwKQoreworCS8qIENoZWNrIGZvciB2YWxpZCByZWNlaXZlIHN0YXRlLiAqLworCWlmICghKGliX2lwYXRoX3N0YXRlX29wc1txcC0+c3RhdGVdICYgSVBBVEhfUFJPQ0VTU19SRUNWX09LKSkgeworCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKHFwLT5pYnFwLnFwX3R5cGUpIHsKKwljYXNlIElCX1FQVF9TTUk6CisJY2FzZSBJQl9RUFRfR1NJOgorCWNhc2UgSUJfUVBUX1VEOgorCQlpcGF0aF91ZF9yY3YoZGV2LCBoZHIsIGhhc19ncmgsIGRhdGEsIHRsZW4sIHFwKTsKKwkJYnJlYWs7CisKKwljYXNlIElCX1FQVF9SQzoKKwkJaXBhdGhfcmNfcmN2KGRldiwgaGRyLCBoYXNfZ3JoLCBkYXRhLCB0bGVuLCBxcCk7CisJCWJyZWFrOworCisJY2FzZSBJQl9RUFRfVUM6CisJCWlwYXRoX3VjX3JjdihkZXYsIGhkciwgaGFzX2dyaCwgZGF0YSwgdGxlbiwgcXApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBpcGF0aF9pYl9yY3YgLSBwcm9jZXNzIGFuZCBpbmNvbWluZyBwYWNrZXQKKyAqIEBhcmc6IHRoZSBkZXZpY2UgcG9pbnRlcgorICogQHJoZHI6IHRoZSBoZWFkZXIgb2YgdGhlIHBhY2tldAorICogQGRhdGE6IHRoZSBwYWNrZXQgZGF0YQorICogQHRsZW46IHRoZSBwYWNrZXQgbGVuZ3RoCisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9rcmVjZWl2ZSgpIHRvIHByb2Nlc3MgYW4gaW5jb21pbmcgcGFja2V0IGF0CisgKiBpbnRlcnJ1cHQgbGV2ZWwuIFRsZW4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyICsgZGF0YSArIENSQyBpbiBieXRlcy4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfaWJfcmN2KHZvaWQgKmFyZywgdm9pZCAqcmhkciwgdm9pZCAqZGF0YSwgdTMyIHRsZW4pCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSAoc3RydWN0IGlwYXRoX2liZGV2ICopIGFyZzsKKwlzdHJ1Y3QgaXBhdGhfaWJfaGVhZGVyICpoZHIgPSByaGRyOworCXN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyOworCXN0cnVjdCBpcGF0aF9xcCAqcXA7CisJdTMyIHFwX251bTsKKwlpbnQgbG5oOworCXU4IG9wY29kZTsKKwl1MTYgbGlkOworCisJaWYgKHVubGlrZWx5KGRldiA9PSBOVUxMKSkKKwkJZ290byBiYWlsOworCisJaWYgKHVubGlrZWx5KHRsZW4gPCAyNCkpIHsJLyogTFJIK0JUSCtDUkMgKi8KKwkJZGV2LT5yY3ZfZXJyb3JzKys7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBDaGVjayBmb3IgYSB2YWxpZCBkZXN0aW5hdGlvbiBMSUQgKHNlZSBjaC4gNy4xMS4xKS4gKi8KKwlsaWQgPSBiZTE2X3RvX2NwdShoZHItPmxyaFsxXSk7CisJaWYgKGxpZCA8IElQU19NVUxUSUNBU1RfTElEX0JBU0UpIHsKKwkJbGlkICY9IH4oKDEgPDwgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgLSAxKTsKKwkJaWYgKHVubGlrZWx5KGxpZCAhPSBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpKSkgeworCQkJZGV2LT5yY3ZfZXJyb3JzKys7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisKKwkvKiBDaGVjayBmb3IgR1JIICovCisJbG5oID0gYmUxNl90b19jcHUoaGRyLT5scmhbMF0pICYgMzsKKwlpZiAobG5oID09IElQU19MUkhfQlRIKQorCQlvaGRyID0gJmhkci0+dS5vdGg7CisJZWxzZSBpZiAobG5oID09IElQU19MUkhfR1JIKQorCQlvaGRyID0gJmhkci0+dS5sLm90aDsKKwllbHNlIHsKKwkJZGV2LT5yY3ZfZXJyb3JzKys7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlvcGNvZGUgPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMF0pID4+IDI0OworCWRldi0+b3BzdGF0c1tvcGNvZGVdLm5fYnl0ZXMgKz0gdGxlbjsKKwlkZXYtPm9wc3RhdHNbb3Bjb2RlXS5uX3BhY2tldHMrKzsKKworCS8qIEdldCB0aGUgZGVzdGluYXRpb24gUVAgbnVtYmVyLiAqLworCXFwX251bSA9IGJlMzJfdG9fY3B1KG9oZHItPmJ0aFsxXSkgJiBJUFNfUVBOX01BU0s7CisJaWYgKHFwX251bSA9PSBJUFNfTVVMVElDQVNUX1FQTikgeworCQlzdHJ1Y3QgaXBhdGhfbWNhc3QgKm1jYXN0OworCQlzdHJ1Y3QgaXBhdGhfbWNhc3RfcXAgKnA7CisKKwkJbWNhc3QgPSBpcGF0aF9tY2FzdF9maW5kKCZoZHItPnUubC5ncmguZGdpZCk7CisJCWlmIChtY2FzdCA9PSBOVUxMKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJZGV2LT5uX211bHRpY2FzdF9yY3YrKzsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgJm1jYXN0LT5xcF9saXN0LCBsaXN0KQorCQkJaXBhdGhfcXBfcmN2KGRldiwgaGRyLCBsbmggPT0gSVBTX0xSSF9HUkgsIGRhdGEsCisJCQkJICAgICB0bGVuLCBwLT5xcCk7CisJCS8qCisJCSAqIE5vdGlmeSBpcGF0aF9tdWx0aWNhc3RfZGV0YWNoKCkgaWYgaXQgaXMgd2FpdGluZyBmb3IgdXMKKwkJICogdG8gZmluaXNoLgorCQkgKi8KKwkJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZtY2FzdC0+cmVmY291bnQpIDw9IDEpCisJCQl3YWtlX3VwKCZtY2FzdC0+d2FpdCk7CisJfSBlbHNlIHsKKwkJcXAgPSBpcGF0aF9sb29rdXBfcXBuKCZkZXYtPnFwX3RhYmxlLCBxcF9udW0pOworCQlpZiAocXApIHsKKwkJCWRldi0+bl91bmljYXN0X3JjdisrOworCQkJaXBhdGhfcXBfcmN2KGRldiwgaGRyLCBsbmggPT0gSVBTX0xSSF9HUkgsIGRhdGEsCisJCQkJICAgICB0bGVuLCBxcCk7CisJCQkvKgorCQkJICogTm90aWZ5IGlwYXRoX2Rlc3Ryb3lfcXAoKSBpZiBpdCBpcyB3YWl0aW5nCisJCQkgKiBmb3IgdXMgdG8gZmluaXNoLgorCQkJICovCisJCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcXAtPnJlZmNvdW50KSkKKwkJCQl3YWtlX3VwKCZxcC0+d2FpdCk7CisJCX0gZWxzZQorCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCX0KKworYmFpbDo7Cit9CisKKy8qKgorICogaXBhdGhfaWJfdGltZXIgLSB2ZXJicyB0aW1lcgorICogQGFyZzogdGhlIGRldmljZSBwb2ludGVyCisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9kb19yY3ZfdGltZXIoKSBhdCBpbnRlcnJ1cHQgbGV2ZWwgdG8gY2hlY2sgZm9yCisgKiBRUHMgd2hpY2ggbmVlZCByZXRyYW5zbWl0cyBhbmQgdG8gY29sbGVjdCBwZXJmb3JtYW5jZSBudW1iZXJzLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9pYl90aW1lcih2b2lkICphcmcpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSAoc3RydWN0IGlwYXRoX2liZGV2ICopIGFyZzsKKwlzdHJ1Y3QgaXBhdGhfcXAgKnJlc2VuZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqbGFzdDsKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCS8qIFN0YXJ0IGZpbGxpbmcgdGhlIG5leHQgcGVuZGluZyBxdWV1ZS4gKi8KKwlpZiAoKytkZXYtPnBlbmRpbmdfaW5kZXggPj0gQVJSQVlfU0laRShkZXYtPnBlbmRpbmcpKQorCQlkZXYtPnBlbmRpbmdfaW5kZXggPSAwOworCS8qIFNhdmUgYW55IHJlcXVlc3RzIHN0aWxsIGluIHRoZSBuZXcgcXVldWUsIHRoZXkgaGF2ZSB0aW1lZCBvdXQuICovCisJbGFzdCA9ICZkZXYtPnBlbmRpbmdbZGV2LT5wZW5kaW5nX2luZGV4XTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkobGFzdCkpIHsKKwkJcXAgPSBsaXN0X2VudHJ5KGxhc3QtPm5leHQsIHN0cnVjdCBpcGF0aF9xcCwgdGltZXJ3YWl0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcXAtPnRpbWVyd2FpdCk7CisJCXFwLT50aW1lcl9uZXh0ID0gcmVzZW5kOworCQlyZXNlbmQgPSBxcDsKKwkJYXRvbWljX2luYygmcXAtPnJlZmNvdW50KTsKKwl9CisJbGFzdCA9ICZkZXYtPnJucndhaXQ7CisJaWYgKCFsaXN0X2VtcHR5KGxhc3QpKSB7CisJCXFwID0gbGlzdF9lbnRyeShsYXN0LT5uZXh0LCBzdHJ1Y3QgaXBhdGhfcXAsIHRpbWVyd2FpdCk7CisJCWlmICgtLXFwLT5zX3Jucl90aW1lb3V0ID09IDApIHsKKwkJCWRvIHsKKwkJCQlsaXN0X2RlbF9pbml0KCZxcC0+dGltZXJ3YWl0KTsKKwkJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZxcC0+c190YXNrKTsKKwkJCQlpZiAobGlzdF9lbXB0eShsYXN0KSkKKwkJCQkJYnJlYWs7CisJCQkJcXAgPSBsaXN0X2VudHJ5KGxhc3QtPm5leHQsIHN0cnVjdCBpcGF0aF9xcCwKKwkJCQkJCXRpbWVyd2FpdCk7CisJCQl9IHdoaWxlIChxcC0+c19ybnJfdGltZW91dCA9PSAwKTsKKwkJfQorCX0KKwkvKgorCSAqIFdlIHNob3VsZCBvbmx5IGJlIGluIHRoZSBzdGFydGVkIHN0YXRlIGlmIHBtYV9zYW1wbGVfc3RhcnQgIT0gMAorCSAqLworCWlmIChkZXYtPnBtYV9zYW1wbGVfc3RhdHVzID09IElCX1BNQV9TQU1QTEVfU1RBVFVTX1NUQVJURUQgJiYKKwkgICAgLS1kZXYtPnBtYV9zYW1wbGVfc3RhcnQgPT0gMCkgeworCQlkZXYtPnBtYV9zYW1wbGVfc3RhdHVzID0gSUJfUE1BX1NBTVBMRV9TVEFUVVNfUlVOTklORzsKKwkJaXBhdGhfbGF5ZXJfc25hcHNob3RfY291bnRlcnMoZGV2LT5kZCwgJmRldi0+aXBhdGhfc3dvcmQsCisJCQkJCSAgICAgICZkZXYtPmlwYXRoX3J3b3JkLAorCQkJCQkgICAgICAmZGV2LT5pcGF0aF9zcGt0cywKKwkJCQkJICAgICAgJmRldi0+aXBhdGhfcnBrdHMsCisJCQkJCSAgICAgICZkZXYtPmlwYXRoX3htaXRfd2FpdCk7CisJfQorCWlmIChkZXYtPnBtYV9zYW1wbGVfc3RhdHVzID09IElCX1BNQV9TQU1QTEVfU1RBVFVTX1JVTk5JTkcpIHsKKwkJaWYgKGRldi0+cG1hX3NhbXBsZV9pbnRlcnZhbCA9PSAwKSB7CisJCQl1NjQgdGEsIHRiLCB0YywgdGQsIHRlOworCisJCQlkZXYtPnBtYV9zYW1wbGVfc3RhdHVzID0gSUJfUE1BX1NBTVBMRV9TVEFUVVNfRE9ORTsKKwkJCWlwYXRoX2xheWVyX3NuYXBzaG90X2NvdW50ZXJzKGRldi0+ZGQsICZ0YSwgJnRiLAorCQkJCQkJICAgICAgJnRjLCAmdGQsICZ0ZSk7CisKKwkJCWRldi0+aXBhdGhfc3dvcmQgPSB0YSAtIGRldi0+aXBhdGhfc3dvcmQ7CisJCQlkZXYtPmlwYXRoX3J3b3JkID0gdGIgLSBkZXYtPmlwYXRoX3J3b3JkOworCQkJZGV2LT5pcGF0aF9zcGt0cyA9IHRjIC0gZGV2LT5pcGF0aF9zcGt0czsKKwkJCWRldi0+aXBhdGhfcnBrdHMgPSB0ZCAtIGRldi0+aXBhdGhfcnBrdHM7CisJCQlkZXYtPmlwYXRoX3htaXRfd2FpdCA9IHRlIC0gZGV2LT5pcGF0aF94bWl0X3dhaXQ7CisJCX0KKwkJZWxzZQorCQkJZGV2LT5wbWFfc2FtcGxlX2ludGVydmFsLS07CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CisKKwkvKiBYWFggV2hhdCBpZiB0aW1lciBmaXJlcyBhZ2FpbiB3aGlsZSB0aGlzIGlzIHJ1bm5pbmc/ICovCisJZm9yIChxcCA9IHJlc2VuZDsgcXAgIT0gTlVMTDsgcXAgPSBxcC0+dGltZXJfbmV4dCkgeworCQlzdHJ1Y3QgaWJfd2Mgd2M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHFwLT5zX2xhc3QgIT0gcXAtPnNfdGFpbCAmJiBxcC0+c3RhdGUgPT0gSUJfUVBTX1JUUykgeworCQkJZGV2LT5uX3RpbWVvdXRzKys7CisJCQlpcGF0aF9yZXN0YXJ0X3JjKHFwLCBxcC0+c19sYXN0X3BzbiArIDEsICZ3Yyk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCisJCS8qIE5vdGlmeSBpcGF0aF9kZXN0cm95X3FwKCkgaWYgaXQgaXMgd2FpdGluZy4gKi8KKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnFwLT5yZWZjb3VudCkpCisJCQl3YWtlX3VwKCZxcC0+d2FpdCk7CisJfQorfQorCisvKioKKyAqIGlwYXRoX2liX3Bpb2J1ZmF2YWlsIC0gY2FsbGJhY2sgd2hlbiBhIFBJTyBidWZmZXIgaXMgYXZhaWxhYmxlCisgKiBAYXJnOiB0aGUgZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX2ludHIoKSBhdCBpbnRlcnJ1cHQgbGV2ZWwgd2hlbiBhIFBJTyBidWZmZXIgaXMKKyAqIGF2YWlsYWJsZSBhZnRlciBpcGF0aF92ZXJic19zZW5kKCkgcmV0dXJuZWQgYW4gZXJyb3IgdGhhdCBubyBidWZmZXJzIHdlcmUKKyAqIGF2YWlsYWJsZS4gIFJldHVybiAxIGlmIHdlIGNvbnN1bWVkIGFsbCB0aGUgUElPIGJ1ZmZlcnMgYW5kIHdlIHN0aWxsIGhhdmUKKyAqIFFQcyB3YWl0aW5nIGZvciBidWZmZXJzIChmb3Igbm93LCBqdXN0IGRvIGEgdGFza2xldF9oaV9zY2hlZHVsZSBhbmQKKyAqIHJldHVybiB6ZXJvKS4KKyAqLworc3RhdGljIGludCBpcGF0aF9pYl9waW9idWZhdmFpbCh2b2lkICphcmcpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSAoc3RydWN0IGlwYXRoX2liZGV2ICopIGFyZzsKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGV2ID09IE5VTEwpCisJCWdvdG8gYmFpbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2LT5waW93YWl0KSkgeworCQlxcCA9IGxpc3RfZW50cnkoZGV2LT5waW93YWl0Lm5leHQsIHN0cnVjdCBpcGF0aF9xcCwKKwkJCQlwaW93YWl0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcXAtPnBpb3dhaXQpOworCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZxcC0+c190YXNrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKworYmFpbDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcGF0aF9xdWVyeV9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKnByb3BzKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJdTMyIHZlbmRvciwgYm9hcmRyZXYsIG1hanJldiwgbWlucmV2OworCisJbWVtc2V0KHByb3BzLCAwLCBzaXplb2YoKnByb3BzKSk7CisKKwlwcm9wcy0+ZGV2aWNlX2NhcF9mbGFncyA9IElCX0RFVklDRV9CQURfUEtFWV9DTlRSIHwKKwkJSUJfREVWSUNFX0JBRF9RS0VZX0NOVFIgfCBJQl9ERVZJQ0VfU0hVVERPV05fUE9SVCB8CisJCUlCX0RFVklDRV9TWVNfSU1BR0VfR1VJRDsKKwlpcGF0aF9sYXllcl9xdWVyeV9kZXZpY2UoZGV2LT5kZCwgJnZlbmRvciwgJmJvYXJkcmV2LAorCQkJCSAmbWFqcmV2LCAmbWlucmV2KTsKKwlwcm9wcy0+dmVuZG9yX2lkID0gdmVuZG9yOworCXByb3BzLT52ZW5kb3JfcGFydF9pZCA9IGJvYXJkcmV2OworCXByb3BzLT5od192ZXIgPSBib2FyZHJldiA8PCAxNiB8IG1hanJldiA8PCA4IHwgbWlucmV2OworCisJcHJvcHMtPnN5c19pbWFnZV9ndWlkID0gZGV2LT5zeXNfaW1hZ2VfZ3VpZDsKKworCXByb3BzLT5tYXhfbXJfc2l6ZSA9IH4wdWxsOworCXByb3BzLT5tYXhfcXAgPSAweGZmZmY7CisJcHJvcHMtPm1heF9xcF93ciA9IDB4ZmZmZjsKKwlwcm9wcy0+bWF4X3NnZSA9IDI1NTsKKwlwcm9wcy0+bWF4X2NxID0gMHhmZmZmOworCXByb3BzLT5tYXhfY3FlID0gMHhmZmZmOworCXByb3BzLT5tYXhfbXIgPSAweGZmZmY7CisJcHJvcHMtPm1heF9wZCA9IDB4ZmZmZjsKKwlwcm9wcy0+bWF4X3FwX3JkX2F0b20gPSAxOworCXByb3BzLT5tYXhfcXBfaW5pdF9yZF9hdG9tID0gMTsKKwkvKiBwcm9wcy0+bWF4X3Jlc19yZF9hdG9tICovCisJcHJvcHMtPm1heF9zcnEgPSAweGZmZmY7CisJcHJvcHMtPm1heF9zcnFfd3IgPSAweGZmZmY7CisJcHJvcHMtPm1heF9zcnFfc2dlID0gMjU1OworCS8qIHByb3BzLT5sb2NhbF9jYV9hY2tfZGVsYXkgKi8KKwlwcm9wcy0+YXRvbWljX2NhcCA9IElCX0FUT01JQ19IQ0E7CisJcHJvcHMtPm1heF9wa2V5cyA9IGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGV2LT5kZCk7CisJcHJvcHMtPm1heF9tY2FzdF9ncnAgPSAweGZmZmY7CisJcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2ggPSAweGZmZmY7CisJcHJvcHMtPm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2ggPSBwcm9wcy0+bWF4X21jYXN0X3FwX2F0dGFjaCAqCisJCXByb3BzLT5tYXhfbWNhc3RfZ3JwOworCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHU4IGlwYXRoX2N2dF9waHlzcG9ydHN0YXRlWzE2XSA9IHsKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0RJU0FCTEVEXSA9IDMsCisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9MSU5LVVBdID0gNSwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1BPTExBQ1RJVkVdID0gMiwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1BPTExRVUlFVF0gPSAyLAorCVtJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfU0xFRVBERUxBWV0gPSAxLAorCVtJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfU0xFRVBRVUlFVF0gPSAxLAorCVtJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfQ0ZHREVCT1VOQ0VdID0gNCwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0NGR1JDVkZDRkddID0gNCwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0NGR1dBSVRSTVRdID0gNCwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0NGR0lETEVdID0gNCwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJSRVRSQUlOXSA9IDYsCisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9SRUNPVkVSV0FJVFJNVF0gPSA2LAorCVtJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUkVDT1ZFUklETEVdID0gNiwKK307CisKK3N0YXRpYyBpbnQgaXBhdGhfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKKwkJCSAgICB1OCBwb3J0LCBzdHJ1Y3QgaWJfcG9ydF9hdHRyICpwcm9wcykKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCWVudW0gaWJfbXR1IG10dTsKKwl1MTYgbGlkID0gaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKTsKKwl1NjQgaWJjc3RhdDsKKworCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKCpwcm9wcykpOworCXByb3BzLT5saWQgPSBsaWQgPyBsaWQgOiBfX2NvbnN0YW50X2JlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKKwlwcm9wcy0+bG1jID0gZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyAmIDc7CisJcHJvcHMtPnNtX2xpZCA9IGRldi0+c21fbGlkOworCXByb3BzLT5zbV9zbCA9IGRldi0+c21fc2w7CisJaWJjc3RhdCA9IGlwYXRoX2xheWVyX2dldF9sYXN0aWJjc3RhdChkZXYtPmRkKTsKKwlwcm9wcy0+c3RhdGUgPSAoKGliY3N0YXQgPj4gNCkgJiAweDMpICsgMTsKKwkvKiBTZWUgcGh5c19zdGF0ZV9zaG93KCkgKi8KKwlwcm9wcy0+cGh5c19zdGF0ZSA9IGlwYXRoX2N2dF9waHlzcG9ydHN0YXRlWworCQlpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQoZGV2LT5kZCkgJiAweGZdOworCXByb3BzLT5wb3J0X2NhcF9mbGFncyA9IGRldi0+cG9ydF9jYXBfZmxhZ3M7CisJcHJvcHMtPmdpZF90YmxfbGVuID0gMTsKKwlwcm9wcy0+bWF4X21zZ19zeiA9IDQwOTY7CisJcHJvcHMtPnBrZXlfdGJsX2xlbiA9IGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGV2LT5kZCk7CisJcHJvcHMtPmJhZF9wa2V5X2NudHIgPSBpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShkZXYtPmRkKSAtCisJCWRldi0+bl9wa2V5X3Zpb2xhdGlvbnM7CisJcHJvcHMtPnFrZXlfdmlvbF9jbnRyID0gZGV2LT5xa2V5X3Zpb2xhdGlvbnM7CisJcHJvcHMtPmFjdGl2ZV93aWR0aCA9IElCX1dJRFRIXzRYOworCS8qIFNlZSByYXRlX3Nob3coKSAqLworCXByb3BzLT5hY3RpdmVfc3BlZWQgPSAxOwkvKiBSZWd1bGFyIDEwTWJzIHNwZWVkLiAqLworCXByb3BzLT5tYXhfdmxfbnVtID0gMTsJCS8qIFZMQ2FwID0gVkwwICovCisJcHJvcHMtPmluaXRfdHlwZV9yZXBseSA9IDA7CisKKwlwcm9wcy0+bWF4X210dSA9IElCX01UVV80MDk2OworCXN3aXRjaCAoaXBhdGhfbGF5ZXJfZ2V0X2libXR1KGRldi0+ZGQpKSB7CisJY2FzZSA0MDk2OgorCQltdHUgPSBJQl9NVFVfNDA5NjsKKwkJYnJlYWs7CisJY2FzZSAyMDQ4OgorCQltdHUgPSBJQl9NVFVfMjA0ODsKKwkJYnJlYWs7CisJY2FzZSAxMDI0OgorCQltdHUgPSBJQl9NVFVfMTAyNDsKKwkJYnJlYWs7CisJY2FzZSA1MTI6CisJCW10dSA9IElCX01UVV81MTI7CisJCWJyZWFrOworCWNhc2UgMjU2OgorCQltdHUgPSBJQl9NVFVfMjU2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQltdHUgPSBJQl9NVFVfMjA0ODsKKwl9CisJcHJvcHMtPmFjdGl2ZV9tdHUgPSBtdHU7CisJcHJvcHMtPnN1Ym5ldF90aW1lb3V0ID0gZGV2LT5zdWJuZXRfdGltZW91dDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwYXRoX21vZGlmeV9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkJICAgICAgIGludCBkZXZpY2VfbW9kaWZ5X21hc2ssCisJCQkgICAgICAgc3RydWN0IGliX2RldmljZV9tb2RpZnkgKmRldmljZV9tb2RpZnkpCit7CisJaW50IHJldDsKKworCWlmIChkZXZpY2VfbW9kaWZ5X21hc2sgJiB+KElCX0RFVklDRV9NT0RJRllfU1lTX0lNQUdFX0dVSUQgfAorCQkJCSAgIElCX0RFVklDRV9NT0RJRllfTk9ERV9ERVNDKSkgeworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChkZXZpY2VfbW9kaWZ5X21hc2sgJiBJQl9ERVZJQ0VfTU9ESUZZX05PREVfREVTQykKKwkJbWVtY3B5KGRldmljZS0+bm9kZV9kZXNjLCBkZXZpY2VfbW9kaWZ5LT5ub2RlX2Rlc2MsIDY0KTsKKworCWlmIChkZXZpY2VfbW9kaWZ5X21hc2sgJiBJQl9ERVZJQ0VfTU9ESUZZX1NZU19JTUFHRV9HVUlEKQorCQl0b19pZGV2KGRldmljZSktPnN5c19pbWFnZV9ndWlkID0KKwkJCWNwdV90b19iZTY0KGRldmljZV9tb2RpZnktPnN5c19pbWFnZV9ndWlkKTsKKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF9tb2RpZnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKKwkJCSAgICAgdTggcG9ydCwgaW50IHBvcnRfbW9kaWZ5X21hc2ssCisJCQkgICAgIHN0cnVjdCBpYl9wb3J0X21vZGlmeSAqcHJvcHMpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKworCWRldi0+cG9ydF9jYXBfZmxhZ3MgfD0gcHJvcHMtPnNldF9wb3J0X2NhcF9tYXNrOworCWRldi0+cG9ydF9jYXBfZmxhZ3MgJj0gfnByb3BzLT5jbHJfcG9ydF9jYXBfbWFzazsKKwlpZiAocG9ydF9tb2RpZnlfbWFzayAmIElCX1BPUlRfU0hVVERPV04pCisJCWlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoZGV2LT5kZCwgSVBBVEhfSUJfTElOS0RPV04pOworCWlmIChwb3J0X21vZGlmeV9tYXNrICYgSUJfUE9SVF9SRVNFVF9RS0VZX0NOVFIpCisJCWRldi0+cWtleV92aW9sYXRpb25zID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcGF0aF9xdWVyeV9naWQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQsCisJCQkgICBpbnQgaW5kZXgsIHVuaW9uIGliX2dpZCAqZ2lkKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJaW50IHJldDsKKworCWlmIChpbmRleCA+PSAxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJZ2lkLT5nbG9iYWwuc3VibmV0X3ByZWZpeCA9IGRldi0+Z2lkX3ByZWZpeDsKKwlnaWQtPmdsb2JhbC5pbnRlcmZhY2VfaWQgPSBpcGF0aF9sYXllcl9nZXRfZ3VpZChkZXYtPmRkKTsKKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBpYl9wZCAqaXBhdGhfYWxsb2NfcGQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkJICAgIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwKKwkJCQkgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgaXBhdGhfcGQgKnBkOworCXN0cnVjdCBpYl9wZCAqcmV0OworCisJcGQgPSBrbWFsbG9jKHNpemVvZiAqcGQsIEdGUF9LRVJORUwpOworCWlmICghcGQpIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCS8qIGliX2FsbG9jX3BkKCkgd2lsbCBpbml0aWFsaXplIHBkLT5pYnBkLiAqLworCXBkLT51c2VyID0gdWRhdGEgIT0gTlVMTDsKKworCXJldCA9ICZwZC0+aWJwZDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwYXRoX2RlYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkKQoreworCXN0cnVjdCBpcGF0aF9wZCAqcGQgPSB0b19pcGQoaWJwZCk7CisKKwlrZnJlZShwZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9jcmVhdGVfYWggLSBjcmVhdGUgYW4gYWRkcmVzcyBoYW5kbGUKKyAqIEBwZDogdGhlIHByb3RlY3Rpb24gZG9tYWluCisgKiBAYWhfYXR0cjogdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIEFICisgKgorICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaWJfYWggKmlwYXRoX2NyZWF0ZV9haChzdHJ1Y3QgaWJfcGQgKnBkLAorCQkJCSAgICAgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpCit7CisJc3RydWN0IGlwYXRoX2FoICphaDsKKwlzdHJ1Y3QgaWJfYWggKnJldDsKKworCS8qIEEgbXVsdGljYXN0IGFkZHJlc3MgcmVxdWlyZXMgYSBHUkggKHNlZSBjaC4gOC40LjEpLiAqLworCWlmIChhaF9hdHRyLT5kbGlkID49IElQU19NVUxUSUNBU1RfTElEX0JBU0UgJiYKKwkgICAgYWhfYXR0ci0+ZGxpZCAhPSBJUFNfUEVSTUlTU0lWRV9MSUQgJiYKKwkgICAgIShhaF9hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCkpIHsKKwkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBiYWlsOworCX0KKworCWFoID0ga21hbGxvYyhzaXplb2YgKmFoLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWFoKSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBpYl9jcmVhdGVfYWgoKSB3aWxsIGluaXRpYWxpemUgYWgtPmliYWguICovCisJYWgtPmF0dHIgPSAqYWhfYXR0cjsKKworCXJldCA9ICZhaC0+aWJhaDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2Rlc3Ryb3lfYWggLSBkZXN0cm95IGFuIGFkZHJlc3MgaGFuZGxlCisgKiBAaWJhaDogdGhlIEFIIHRvIGRlc3Ryb3kKKyAqCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworc3RhdGljIGludCBpcGF0aF9kZXN0cm95X2FoKHN0cnVjdCBpYl9haCAqaWJhaCkKK3sKKwlzdHJ1Y3QgaXBhdGhfYWggKmFoID0gdG9faWFoKGliYWgpOworCisJa2ZyZWUoYWgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfcXVlcnlfYWgoc3RydWN0IGliX2FoICppYmFoLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cikKK3sKKwlzdHJ1Y3QgaXBhdGhfYWggKmFoID0gdG9faWFoKGliYWgpOworCisJKmFoX2F0dHIgPSBhaC0+YXR0cjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwYXRoX3F1ZXJ5X3BrZXkoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQsIHUxNiBpbmRleCwKKwkJCSAgICB1MTYgKnBrZXkpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKGluZGV4ID49IGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGV2LT5kZCkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCSpwa2V5ID0gaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoZGV2LT5kZCwgaW5kZXgpOworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqIGlwYXRoX2FsbG9jX3Vjb250ZXh0IC0gYWxsb2NhdGUgYSB1Y29udGVzdAorICogQGliZGV2OiB0aGUgaW5maW5pYmFuZCBkZXZpY2UKKyAqIEB1ZGF0YTogbm90IHVzZWQgYnkgdGhlIEluZmluaVBhdGggZHJpdmVyCisgKi8KKworc3RhdGljIHN0cnVjdCBpYl91Y29udGV4dCAqaXBhdGhfYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBpcGF0aF91Y29udGV4dCAqY29udGV4dDsKKwlzdHJ1Y3QgaWJfdWNvbnRleHQgKnJldDsKKworCWNvbnRleHQgPSBrbWFsbG9jKHNpemVvZiAqY29udGV4dCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb250ZXh0KSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSAmY29udGV4dC0+aWJ1Y29udGV4dDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwYXRoX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQoreworCWtmcmVlKHRvX2l1Y29udGV4dChjb250ZXh0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfdmVyYnNfcmVnaXN0ZXJfc3lzZnMoc3RydWN0IGliX2RldmljZSAqZGV2KTsKKworLyoqCisgKiBpcGF0aF9yZWdpc3Rlcl9pYl9kZXZpY2UgLSByZWdpc3RlciBvdXIgZGV2aWNlIHdpdGggdGhlIGluZmluaWJhbmQgY29yZQorICogQHVuaXQ6IHRoZSBkZXZpY2UgbnVtYmVyIHRvIHJlZ2lzdGVyCisgKiBAZGQ6IHRoZSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUKKyAqIFJldHVybiB0aGUgYWxsb2NhdGVkIGlwYXRoX2liZGV2IHBvaW50ZXIgb3IgTlVMTCBvbiBlcnJvci4KKyAqLworc3RhdGljIHZvaWQgKmlwYXRoX3JlZ2lzdGVyX2liX2RldmljZShpbnQgdW5pdCwgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqaWRldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCWlkZXYgPSAoc3RydWN0IGlwYXRoX2liZGV2ICopaWJfYWxsb2NfZGV2aWNlKHNpemVvZiAqaWRldik7CisJaWYgKGlkZXYgPT0gTlVMTCkKKwkJZ290byBiYWlsOworCisJZGV2ID0gJmlkZXYtPmliZGV2OworCisJLyogT25seSBuZWVkIHRvIGluaXRpYWxpemUgbm9uLXplcm8gZmllbGRzLiAqLworCXNwaW5fbG9ja19pbml0KCZpZGV2LT5xcF90YWJsZS5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaWRldi0+bGtfdGFibGUubG9jayk7CisJaWRldi0+c21fbGlkID0gX19jb25zdGFudF9iZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CisJLyogU2V0IHRoZSBwcmVmaXggdG8gdGhlIGRlZmF1bHQgdmFsdWUgKHNlZSBjaC4gNC4xLjEpICovCisJaWRldi0+Z2lkX3ByZWZpeCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhmZTgwMDAwMDAwMDAwMDAwVUxMKTsKKworCXJldCA9IGlwYXRoX2luaXRfcXBfdGFibGUoaWRldiwgaWJfaXBhdGhfcXBfdGFibGVfc2l6ZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcXA7CisKKwkvKgorCSAqIFRoZSB0b3AgaWJfaXBhdGhfbGtleV90YWJsZV9zaXplIGJpdHMgYXJlIHVzZWQgdG8gaW5kZXggdGhlCisJICogdGFibGUuICBUaGUgbG93ZXIgOCBiaXRzIGNhbiBiZSBvd25lZCBieSB0aGUgdXNlciAoY29waWVkIGZyb20KKwkgKiB0aGUgTEtFWSkuICBUaGUgcmVtYWluaW5nIGJpdHMgYWN0IGFzIGEgZ2VuZXJhdGlvbiBudW1iZXIgb3IgdGFnLgorCSAqLworCWlkZXYtPmxrX3RhYmxlLm1heCA9IDEgPDwgaWJfaXBhdGhfbGtleV90YWJsZV9zaXplOworCWlkZXYtPmxrX3RhYmxlLnRhYmxlID0ga3phbGxvYyhpZGV2LT5sa190YWJsZS5tYXggKgorCQkJCSAgICAgICBzaXplb2YoKmlkZXYtPmxrX3RhYmxlLnRhYmxlKSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKGlkZXYtPmxrX3RhYmxlLnRhYmxlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfbGs7CisJfQorCXNwaW5fbG9ja19pbml0KCZpZGV2LT5wZW5kaW5nX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZpZGV2LT5wZW5kaW5nWzBdKTsKKwlJTklUX0xJU1RfSEVBRCgmaWRldi0+cGVuZGluZ1sxXSk7CisJSU5JVF9MSVNUX0hFQUQoJmlkZXYtPnBlbmRpbmdbMl0pOworCUlOSVRfTElTVF9IRUFEKCZpZGV2LT5waW93YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmaWRldi0+cm5yd2FpdCk7CisJaWRldi0+cGVuZGluZ19pbmRleCA9IDA7CisJaWRldi0+cG9ydF9jYXBfZmxhZ3MgPQorCQlJQl9QT1JUX1NZU19JTUFHRV9HVUlEX1NVUCB8IElCX1BPUlRfQ0xJRU5UX1JFR19TVVA7CisJaWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzBdID0gSUJfUE1BX1BPUlRfWE1JVF9EQVRBOworCWlkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFsxXSA9IElCX1BNQV9QT1JUX1JDVl9EQVRBOworCWlkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFsyXSA9IElCX1BNQV9QT1JUX1hNSVRfUEtUUzsKKwlpZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbM10gPSBJQl9QTUFfUE9SVF9SQ1ZfUEtUUzsKKwlpZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbNV0gPSBJQl9QTUFfUE9SVF9YTUlUX1dBSVQ7CisJaWRldi0+bGlua193aWR0aF9lbmFibGVkID0gMzsJLyogMXggb3IgNHggKi8KKworCS8qCisJICogVGhlIHN5c3RlbSBpbWFnZSBHVUlEIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwKKwkgKiBJQiBIQ0FzIGluIGEgc2luZ2xlIHN5c3RlbSBidXQgc2luY2UgdGhlcmUgY2FuIGJlIG90aGVyCisJICogZGV2aWNlIHR5cGVzIGluIHRoZSBzeXN0ZW0sIHdlIGNhbid0IGJlIHN1cmUgdGhpcyBpcyB1bmlxdWUuCisJICovCisJaWYgKCFzeXNfaW1hZ2VfZ3VpZCkKKwkJc3lzX2ltYWdlX2d1aWQgPSBpcGF0aF9sYXllcl9nZXRfZ3VpZChkZCk7CisJaWRldi0+c3lzX2ltYWdlX2d1aWQgPSBzeXNfaW1hZ2VfZ3VpZDsKKwlpZGV2LT5pYl91bml0ID0gdW5pdDsKKwlpZGV2LT5kZCA9IGRkOworCisJc3RybGNweShkZXYtPm5hbWUsICJpcGF0aCVkIiwgSUJfREVWSUNFX05BTUVfTUFYKTsKKwlkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisJZGV2LT5ub2RlX2d1aWQgPSBpcGF0aF9sYXllcl9nZXRfZ3VpZChkZCk7CisJZGV2LT51dmVyYnNfYWJpX3ZlciA9IElQQVRIX1VWRVJCU19BQklfVkVSU0lPTjsKKwlkZXYtPnV2ZXJic19jbWRfbWFzayA9CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0dFVF9DT05URVhUKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9ERVZJQ0UpCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUE9SVCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfUEQpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFQUxMT0NfUEQpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9BSCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9BSCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfQUgpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1JFR19NUikJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVSRUdfTVIpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DT01QX0NIQU5ORUwpIHwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9SRVNJWkVfQ1EpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfQ1EpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1BPTExfQ1EpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1JFUV9OT1RJRllfQ1EpCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1FQKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9RUCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1FQKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1FQKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1NFTkQpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1BPU1RfUkVDVikJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQVRUQUNIX01DQVNUKQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFVEFDSF9NQ0FTVCkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfU1JRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfU1JRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9TUlEpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfU1JRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1NSUV9SRUNWKTsKKwlkZXYtPm5vZGVfdHlwZSA9IElCX05PREVfQ0E7CisJZGV2LT5waHlzX3BvcnRfY250ID0gMTsKKwlkZXYtPmRtYV9kZXZpY2UgPSBpcGF0aF9sYXllcl9nZXRfZGV2aWNlKGRkKTsKKwlkZXYtPmNsYXNzX2Rldi5kZXYgPSBkZXYtPmRtYV9kZXZpY2U7CisJZGV2LT5xdWVyeV9kZXZpY2UgPSBpcGF0aF9xdWVyeV9kZXZpY2U7CisJZGV2LT5tb2RpZnlfZGV2aWNlID0gaXBhdGhfbW9kaWZ5X2RldmljZTsKKwlkZXYtPnF1ZXJ5X3BvcnQgPSBpcGF0aF9xdWVyeV9wb3J0OworCWRldi0+bW9kaWZ5X3BvcnQgPSBpcGF0aF9tb2RpZnlfcG9ydDsKKwlkZXYtPnF1ZXJ5X3BrZXkgPSBpcGF0aF9xdWVyeV9wa2V5OworCWRldi0+cXVlcnlfZ2lkID0gaXBhdGhfcXVlcnlfZ2lkOworCWRldi0+YWxsb2NfdWNvbnRleHQgPSBpcGF0aF9hbGxvY191Y29udGV4dDsKKwlkZXYtPmRlYWxsb2NfdWNvbnRleHQgPSBpcGF0aF9kZWFsbG9jX3Vjb250ZXh0OworCWRldi0+YWxsb2NfcGQgPSBpcGF0aF9hbGxvY19wZDsKKwlkZXYtPmRlYWxsb2NfcGQgPSBpcGF0aF9kZWFsbG9jX3BkOworCWRldi0+Y3JlYXRlX2FoID0gaXBhdGhfY3JlYXRlX2FoOworCWRldi0+ZGVzdHJveV9haCA9IGlwYXRoX2Rlc3Ryb3lfYWg7CisJZGV2LT5xdWVyeV9haCA9IGlwYXRoX3F1ZXJ5X2FoOworCWRldi0+Y3JlYXRlX3NycSA9IGlwYXRoX2NyZWF0ZV9zcnE7CisJZGV2LT5tb2RpZnlfc3JxID0gaXBhdGhfbW9kaWZ5X3NycTsKKwlkZXYtPnF1ZXJ5X3NycSA9IGlwYXRoX3F1ZXJ5X3NycTsKKwlkZXYtPmRlc3Ryb3lfc3JxID0gaXBhdGhfZGVzdHJveV9zcnE7CisJZGV2LT5jcmVhdGVfcXAgPSBpcGF0aF9jcmVhdGVfcXA7CisJZGV2LT5tb2RpZnlfcXAgPSBpcGF0aF9tb2RpZnlfcXA7CisJZGV2LT5xdWVyeV9xcCA9IGlwYXRoX3F1ZXJ5X3FwOworCWRldi0+ZGVzdHJveV9xcCA9IGlwYXRoX2Rlc3Ryb3lfcXA7CisJZGV2LT5wb3N0X3NlbmQgPSBpcGF0aF9wb3N0X3NlbmQ7CisJZGV2LT5wb3N0X3JlY3YgPSBpcGF0aF9wb3N0X3JlY2VpdmU7CisJZGV2LT5wb3N0X3NycV9yZWN2ID0gaXBhdGhfcG9zdF9zcnFfcmVjZWl2ZTsKKwlkZXYtPmNyZWF0ZV9jcSA9IGlwYXRoX2NyZWF0ZV9jcTsKKwlkZXYtPmRlc3Ryb3lfY3EgPSBpcGF0aF9kZXN0cm95X2NxOworCWRldi0+cmVzaXplX2NxID0gaXBhdGhfcmVzaXplX2NxOworCWRldi0+cG9sbF9jcSA9IGlwYXRoX3BvbGxfY3E7CisJZGV2LT5yZXFfbm90aWZ5X2NxID0gaXBhdGhfcmVxX25vdGlmeV9jcTsKKwlkZXYtPmdldF9kbWFfbXIgPSBpcGF0aF9nZXRfZG1hX21yOworCWRldi0+cmVnX3BoeXNfbXIgPSBpcGF0aF9yZWdfcGh5c19tcjsKKwlkZXYtPnJlZ191c2VyX21yID0gaXBhdGhfcmVnX3VzZXJfbXI7CisJZGV2LT5kZXJlZ19tciA9IGlwYXRoX2RlcmVnX21yOworCWRldi0+YWxsb2NfZm1yID0gaXBhdGhfYWxsb2NfZm1yOworCWRldi0+bWFwX3BoeXNfZm1yID0gaXBhdGhfbWFwX3BoeXNfZm1yOworCWRldi0+dW5tYXBfZm1yID0gaXBhdGhfdW5tYXBfZm1yOworCWRldi0+ZGVhbGxvY19mbXIgPSBpcGF0aF9kZWFsbG9jX2ZtcjsKKwlkZXYtPmF0dGFjaF9tY2FzdCA9IGlwYXRoX211bHRpY2FzdF9hdHRhY2g7CisJZGV2LT5kZXRhY2hfbWNhc3QgPSBpcGF0aF9tdWx0aWNhc3RfZGV0YWNoOworCWRldi0+cHJvY2Vzc19tYWQgPSBpcGF0aF9wcm9jZXNzX21hZDsKKworCXNucHJpbnRmKGRldi0+bm9kZV9kZXNjLCBzaXplb2YoZGV2LT5ub2RlX2Rlc2MpLAorCQkgSVBBVEhfSURTVFIgIiAlcyBrZXJuZWxfU01BIiwgc3lzdGVtX3V0c25hbWUubm9kZW5hbWUpOworCisJcmV0ID0gaWJfcmVnaXN0ZXJfZGV2aWNlKGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVnOworCisJaWYgKGlwYXRoX3ZlcmJzX3JlZ2lzdGVyX3N5c2ZzKGRldikpCisJCWdvdG8gZXJyX2NsYXNzOworCisJaXBhdGhfbGF5ZXJfZW5hYmxlX3RpbWVyKGRkKTsKKworCWdvdG8gYmFpbDsKKworZXJyX2NsYXNzOgorCWliX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CitlcnJfcmVnOgorCWtmcmVlKGlkZXYtPmxrX3RhYmxlLnRhYmxlKTsKK2Vycl9sazoKKwlrZnJlZShpZGV2LT5xcF90YWJsZS50YWJsZSk7CitlcnJfcXA6CisJaWJfZGVhbGxvY19kZXZpY2UoZGV2KTsKKwlfVkVSQlNfRVJST1IoImliX2lwYXRoJWQgY2Fubm90IHJlZ2lzdGVyIHZlcmJzICglZCkhXG4iLAorCQkgICAgIHVuaXQsIC1yZXQpOworCWlkZXYgPSBOVUxMOworCitiYWlsOgorCXJldHVybiBpZGV2OworfQorCitzdGF0aWMgdm9pZCBpcGF0aF91bnJlZ2lzdGVyX2liX2RldmljZSh2b2lkICphcmcpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSAoc3RydWN0IGlwYXRoX2liZGV2ICopIGFyZzsKKwlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9ICZkZXYtPmliZGV2OworCisJaXBhdGhfbGF5ZXJfZGlzYWJsZV90aW1lcihkZXYtPmRkKTsKKworCWliX3VucmVnaXN0ZXJfZGV2aWNlKGliZGV2KTsKKworCWlmICghbGlzdF9lbXB0eSgmZGV2LT5wZW5kaW5nWzBdKSB8fAorCSAgICAhbGlzdF9lbXB0eSgmZGV2LT5wZW5kaW5nWzFdKSB8fAorCSAgICAhbGlzdF9lbXB0eSgmZGV2LT5wZW5kaW5nWzJdKSkKKwkJX1ZFUkJTX0VSUk9SKCJpcGF0aCVkIHBlbmRpbmcgbGlzdCBub3QgZW1wdHkhXG4iLAorCQkJICAgICBkZXYtPmliX3VuaXQpOworCWlmICghbGlzdF9lbXB0eSgmZGV2LT5waW93YWl0KSkKKwkJX1ZFUkJTX0VSUk9SKCJpcGF0aCVkIHBpb3dhaXQgbGlzdCBub3QgZW1wdHkhXG4iLAorCQkJICAgICBkZXYtPmliX3VuaXQpOworCWlmICghbGlzdF9lbXB0eSgmZGV2LT5ybnJ3YWl0KSkKKwkJX1ZFUkJTX0VSUk9SKCJpcGF0aCVkIHJucndhaXQgbGlzdCBub3QgZW1wdHkhXG4iLAorCQkJICAgICBkZXYtPmliX3VuaXQpOworCWlmICghaXBhdGhfbWNhc3RfdHJlZV9lbXB0eSgpKQorCQlfVkVSQlNfRVJST1IoImlwYXRoJWQgbXVsdGljYXN0IHRhYmxlIG1lbW9yeSBsZWFrIVxuIiwKKwkJCSAgICAgZGV2LT5pYl91bml0KTsKKwkvKgorCSAqIE5vdGUgdGhhdCBpcGF0aF91bnJlZ2lzdGVyX2liX2RldmljZSgpIGNhbiBiZSBjYWxsZWQgYmVmb3JlIGFsbAorCSAqIHRoZSBRUHMgYXJlIGRlc3Ryb3llZCEKKwkgKi8KKwlpcGF0aF9mcmVlX2FsbF9xcHMoJmRldi0+cXBfdGFibGUpOworCWtmcmVlKGRldi0+cXBfdGFibGUudGFibGUpOworCWtmcmVlKGRldi0+bGtfdGFibGUudGFibGUpOworCWliX2RlYWxsb2NfZGV2aWNlKGliZGV2KTsKK30KKworc3RhdGljIGludCBfX2luaXQgaXBhdGhfdmVyYnNfaW5pdCh2b2lkKQoreworCXJldHVybiBpcGF0aF92ZXJic19yZWdpc3RlcihpcGF0aF9yZWdpc3Rlcl9pYl9kZXZpY2UsCisJCQkJICAgIGlwYXRoX3VucmVnaXN0ZXJfaWJfZGV2aWNlLAorCQkJCSAgICBpcGF0aF9pYl9waW9idWZhdmFpbCwgaXBhdGhfaWJfcmN2LAorCQkJCSAgICBpcGF0aF9pYl90aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcGF0aF92ZXJic19jbGVhbnVwKHZvaWQpCit7CisJaXBhdGhfdmVyYnNfdW5yZWdpc3RlcigpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3JldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPQorCQljb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOworCWludCB2ZW5kb3IsIGJvYXJkcmV2LCBtYWpyZXYsIG1pbnJldjsKKworCWlwYXRoX2xheWVyX3F1ZXJ5X2RldmljZShkZXYtPmRkLCAmdmVuZG9yLCAmYm9hcmRyZXYsCisJCQkJICZtYWpyZXYsICZtaW5yZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBtYWpyZXYsIG1pbnJldik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGNhKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9CisJCWNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgaXBhdGhfaWJkZXYsIGliZGV2LmNsYXNzX2Rldik7CisJaW50IHJldDsKKworCXJldCA9IGlwYXRoX2xheWVyX2dldF9ib2FyZG5hbWUoZGV2LT5kZCwgYnVmLCAxMjgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGJhaWw7CisJc3RyY2F0KGJ1ZiwgIlxuIik7CisJcmV0ID0gc3RybGVuKGJ1Zik7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0cyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPQorCQljb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOworCWludCBpOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwKKwkJICAgICAgIlJDIHJlc2VuZHMgICVkXG4iCisJCSAgICAgICJSQyBubyBRQUNLICAlZFxuIgorCQkgICAgICAiUkMgQUNLcyAgICAgJWRcbiIKKwkJICAgICAgIlJDIFNFUSBOQUtzICVkXG4iCisJCSAgICAgICJSQyBSRE1BIHNlcSAlZFxuIgorCQkgICAgICAiUkMgUk5SIE5BS3MgJWRcbiIKKwkJICAgICAgIlJDIE9USCBOQUtzICVkXG4iCisJCSAgICAgICJSQyB0aW1lb3V0cyAlZFxuIgorCQkgICAgICAiUkMgUkRNQSBkdXAgJWRcbiIKKwkJICAgICAgInBpb2J1ZiB3YWl0ICVkXG4iCisJCSAgICAgICJubyBwaW9idWYgICAlZFxuIgorCQkgICAgICAiUEtUIGRyb3BzICAgJWRcbiIKKwkJICAgICAgIldRRSBlcnJzICAgICVkXG4iLAorCQkgICAgICBkZXYtPm5fcmNfcmVzZW5kcywgZGV2LT5uX3JjX3FhY2tzLCBkZXYtPm5fcmNfYWNrcywKKwkJICAgICAgZGV2LT5uX3NlcV9uYWtzLCBkZXYtPm5fcmRtYV9zZXEsIGRldi0+bl9ybnJfbmFrcywKKwkJICAgICAgZGV2LT5uX290aGVyX25ha3MsIGRldi0+bl90aW1lb3V0cywKKwkJICAgICAgZGV2LT5uX3JkbWFfZHVwX2J1c3ksIGRldi0+bl9waW93YWl0LAorCQkgICAgICBkZXYtPm5fbm9fcGlvYnVmLCBkZXYtPm5fcGt0X2Ryb3BzLCBkZXYtPm5fd3FlX2VycnMpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+b3BzdGF0cyk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgaXBhdGhfb3Bjb2RlX3N0YXRzICpzaSA9ICZkZXYtPm9wc3RhdHNbaV07CisKKwkJaWYgKCFzaS0+bl9wYWNrZXRzICYmICFzaS0+bl9ieXRlcykKKwkJCWNvbnRpbnVlOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4ICVsbHUvJWxsdVxuIiwgaSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzaS0+bl9wYWNrZXRzLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpLT5uX2J5dGVzKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGh3X3JldiwgU19JUlVHTywgc2hvd19yZXYsIE5VTEwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGhjYV90eXBlLCBTX0lSVUdPLCBzaG93X2hjYSwgTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYm9hcmRfaWQsIFNfSVJVR08sIHNob3dfaGNhLCBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzdGF0cywgU19JUlVHTywgc2hvd19zdGF0cywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaXBhdGhfY2xhc3NfYXR0cmlidXRlc1tdID0geworCSZjbGFzc19kZXZpY2VfYXR0cl9od19yZXYsCisJJmNsYXNzX2RldmljZV9hdHRyX2hjYV90eXBlLAorCSZjbGFzc19kZXZpY2VfYXR0cl9ib2FyZF9pZCwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfc3RhdHMKK307CisKK3N0YXRpYyBpbnQgaXBhdGhfdmVyYnNfcmVnaXN0ZXJfc3lzZnMoc3RydWN0IGliX2RldmljZSAqZGV2KQoreworCWludCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcGF0aF9jbGFzc19hdHRyaWJ1dGVzKTsgKytpKQorCQlpZiAoY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmNsYXNzX2RldiwKKwkJCQkJICAgICBpcGF0aF9jbGFzc19hdHRyaWJ1dGVzW2ldKSkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCittb2R1bGVfaW5pdChpcGF0aF92ZXJic19pbml0KTsKK21vZHVsZV9leGl0KGlwYXRoX3ZlcmJzX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjhkNTkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKQEAgLTAsMCArMSw2OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIElQQVRIX1ZFUkJTX0gKKyNkZWZpbmUgSVBBVEhfVkVSQlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPHJkbWEvaWJfcGFjay5oPgorCisjaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKyNpbmNsdWRlICJ2ZXJic19kZWJ1Zy5oIgorCisjZGVmaW5lIFFQTl9NQVggICAgICAgICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSBRUE5NQVBfRU5UUklFUyAgICAgICAgICAoUVBOX01BWCAvIFBBR0VfU0laRSAvIEJJVFNfUEVSX0JZVEUpCisKKy8qCisgKiBJbmNyZW1lbnQgdGhpcyB2YWx1ZSBpZiBhbnkgY2hhbmdlcyB0aGF0IGJyZWFrIHVzZXJzcGFjZSBBQkkKKyAqIGNvbXBhdGliaWxpdHkgYXJlIG1hZGUuCisgKi8KKyNkZWZpbmUgSVBBVEhfVVZFUkJTX0FCSV9WRVJTSU9OICAgICAgIDEKKworLyoKKyAqIERlZmluZSBhbiBpYl9jcV9ub3RpZnkgdmFsdWUgdGhhdCBpcyBub3QgdmFsaWQgc28gd2Uga25vdyB3aGVuIENRCisgKiBub3RpZmljYXRpb25zIGFyZSBhcm1lZC4KKyAqLworI2RlZmluZSBJQl9DUV9OT05FCShJQl9DUV9ORVhUX0NPTVAgKyAxKQorCisjZGVmaW5lIElCX1JOUl9OQUsJCQkweDIwCisjZGVmaW5lIElCX05BS19QU05fRVJST1IJCTB4NjAKKyNkZWZpbmUgSUJfTkFLX0lOVkFMSURfUkVRVUVTVAkJMHg2MQorI2RlZmluZSBJQl9OQUtfUkVNT1RFX0FDQ0VTU19FUlJPUgkweDYyCisjZGVmaW5lIElCX05BS19SRU1PVEVfT1BFUkFUSU9OQUxfRVJST1IgMHg2MworI2RlZmluZSBJQl9OQUtfSU5WQUxJRF9SRF9SRVFVRVNUCTB4NjQKKworI2RlZmluZSBJUEFUSF9QT1NUX1NFTkRfT0sJCTB4MDEKKyNkZWZpbmUgSVBBVEhfUE9TVF9SRUNWX09LCQkweDAyCisjZGVmaW5lIElQQVRIX1BST0NFU1NfUkVDVl9PSwkJMHgwNAorI2RlZmluZSBJUEFUSF9QUk9DRVNTX1NFTkRfT0sJCTB4MDgKKworLyogSUIgUGVyZm9ybWFuY2UgTWFuYWdlciBzdGF0dXMgdmFsdWVzICovCisjZGVmaW5lIElCX1BNQV9TQU1QTEVfU1RBVFVTX0RPTkUJMHgwMAorI2RlZmluZSBJQl9QTUFfU0FNUExFX1NUQVRVU19TVEFSVEVECTB4MDEKKyNkZWZpbmUgSUJfUE1BX1NBTVBMRV9TVEFUVVNfUlVOTklORwkweDAyCisKKy8qIE1hbmRhdG9yeSBJQiBwZXJmb3JtYW5jZSBjb3VudGVyIHNlbGVjdCB2YWx1ZXMuICovCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfREFUQQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX0RBVEEJX19jb25zdGFudF9odG9ucygweDAwMDIpCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfUEtUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAwMykKKyNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX1BLVFMJX19jb25zdGFudF9odG9ucygweDAwMDQpCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfV0FJVAlfX2NvbnN0YW50X2h0b25zKDB4MDAwNSkKKworc3RydWN0IGliX3JldGggeworCV9fYmU2NCB2YWRkcjsKKwlfX2JlMzIgcmtleTsKKwlfX2JlMzIgbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpYl9hdG9taWNfZXRoIHsKKwlfX2JlNjQgdmFkZHI7CisJX19iZTMyIHJrZXk7CisJX19iZTY0IHN3YXBfZGF0YTsKKwlfX2JlNjQgY29tcGFyZV9kYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzIHsKKwlfX2JlMzIgYnRoWzNdOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fYmUzMiBkZXRoWzJdOworCQkJX19iZTMyIGltbV9kYXRhOworCQl9IHVkOworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGliX3JldGggcmV0aDsKKwkJCV9fYmUzMiBpbW1fZGF0YTsKKwkJfSByYzsKKwkJc3RydWN0IHsKKwkJCV9fYmUzMiBhZXRoOworCQkJX19iZTY0IGF0b21pY19hY2tfZXRoOworCQl9IGF0OworCQlfX2JlMzIgaW1tX2RhdGE7CisJCV9fYmUzMiBhZXRoOworCQlzdHJ1Y3QgaWJfYXRvbWljX2V0aCBhdG9taWNfZXRoOworCX0gdTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogTm90ZSB0aGF0IFVEIHBhY2tldHMgd2l0aCBhIEdSSCBoZWFkZXIgYXJlIDgrNDArMTIrOCA9IDY4IGJ5dGVzCisgKiBsb25nICg3MiB3LyBpbW1fZGF0YSkuICBPbmx5IHRoZSBmaXJzdCA1NiBieXRlcyBvZiB0aGUgSUIgaGVhZGVyCisgKiB3aWxsIGJlIGluIHRoZSBlYWdlciBoZWFkZXIgYnVmZmVyLiAgVGhlIHJlbWFpbmluZyAxMiBvciAxNiBieXRlcworICogYXJlIGluIHRoZSBkYXRhIGJ1ZmZlci4KKyAqLworc3RydWN0IGlwYXRoX2liX2hlYWRlciB7CisJX19iZTE2IGxyaFs0XTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaWJfZ3JoIGdyaDsKKwkJCXN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzIG90aDsKKwkJfSBsOworCQlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyBvdGg7CisJfSB1OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBUaGVyZSBpcyBvbmUgc3RydWN0IGlwYXRoX21jYXN0IGZvciBlYWNoIG11bHRpY2FzdCBHSUQuCisgKiBBbGwgYXR0YWNoZWQgUVBzIGFyZSB0aGVuIHN0b3JlZCBhcyBhIGxpc3Qgb2YKKyAqIHN0cnVjdCBpcGF0aF9tY2FzdF9xcC4KKyAqLworc3RydWN0IGlwYXRoX21jYXN0X3FwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGlwYXRoX3FwICpxcDsKK307CisKK3N0cnVjdCBpcGF0aF9tY2FzdCB7CisJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKKwl1bmlvbiBpYl9naWQgbWdpZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHFwX2xpc3Q7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlhdG9taWNfdCByZWZjb3VudDsKK307CisKKy8qIE1lbW9yeSByZWdpb24gKi8KK3N0cnVjdCBpcGF0aF9tciB7CisJc3RydWN0IGliX21yIGlibXI7CisJc3RydWN0IGlwYXRoX21yZWdpb24gbXI7CS8qIG11c3QgYmUgbGFzdCAqLworfTsKKworLyogRmFzdCBtZW1vcnkgcmVnaW9uICovCitzdHJ1Y3QgaXBhdGhfZm1yIHsKKwlzdHJ1Y3QgaWJfZm1yIGliZm1yOworCXU4IHBhZ2Vfc2hpZnQ7CisJc3RydWN0IGlwYXRoX21yZWdpb24gbXI7CS8qIG11c3QgYmUgbGFzdCAqLworfTsKKworLyogUHJvdGVjdGlvbiBkb21haW4gKi8KK3N0cnVjdCBpcGF0aF9wZCB7CisJc3RydWN0IGliX3BkIGlicGQ7CisJaW50IHVzZXI7CQkvKiBub24temVybyBpZiBjcmVhdGVkIGZyb20gdXNlciBzcGFjZSAqLworfTsKKworLyogQWRkcmVzcyBIYW5kbGUgKi8KK3N0cnVjdCBpcGF0aF9haCB7CisJc3RydWN0IGliX2FoIGliYWg7CisJc3RydWN0IGliX2FoX2F0dHIgYXR0cjsKK307CisKKy8qCisgKiBRdWljayBkZXNjcmlwdGlvbiBvZiBvdXIgQ1EvUVAgbG9ja2luZyBzY2hlbWU6CisgKgorICogV2UgaGF2ZSBvbmUgZ2xvYmFsIGxvY2sgdGhhdCBwcm90ZWN0cyBkZXYtPmNxL3FwX3RhYmxlLiAgRWFjaAorICogc3RydWN0IGlwYXRoX2NxL3FwIGFsc28gaGFzIGl0cyBvd24gbG9jay4gIEFuIGluZGl2aWR1YWwgcXAgbG9jaworICogbWF5IGJlIHRha2VuIGluc2lkZSBvZiBhbiBpbmRpdmlkdWFsIGNxIGxvY2suICBCb3RoIGNxcyBhdHRhY2hlZCB0bworICogYSBxcCBtYXkgYmUgbG9ja2VkLCB3aXRoIHRoZSBzZW5kIGNxIGxvY2tlZCBmaXJzdC4gIE5vIG90aGVyCisgKiBuZXN0aW5nIHNob3VsZCBiZSBkb25lLgorICoKKyAqIEVhY2ggc3RydWN0IGlwYXRoX2NxL3FwIGFsc28gaGFzIGFuIGF0b21pY190IHJlZiBjb3VudC4gIFRoZQorICogcG9pbnRlciBmcm9tIHRoZSBjcS9xcF90YWJsZSB0byB0aGUgc3RydWN0IGNvdW50cyBhcyBvbmUgcmVmZXJlbmNlLgorICogVGhpcyByZWZlcmVuY2UgYWxzbyBpcyBnb29kIGZvciBhY2Nlc3MgdGhyb3VnaCB0aGUgY29uc3VtZXIgQVBJLCBzbworICogbW9kaWZ5aW5nIHRoZSBDUS9RUCBldGMgZG9lc24ndCBuZWVkIHRvIHRha2UgYW5vdGhlciByZWZlcmVuY2UuCisgKiBBY2Nlc3MgYmVjYXVzZSBvZiBhIGNvbXBsZXRpb24gYmVpbmcgcG9sbGVkIGRvZXMgbmVlZCBhIHJlZmVyZW5jZS4KKyAqCisgKiBGaW5hbGx5LCBlYWNoIHN0cnVjdCBpcGF0aF9jcS9xcCBoYXMgYSB3YWl0X3F1ZXVlX2hlYWRfdCBmb3IgdGhlCisgKiBkZXN0cm95IGZ1bmN0aW9uIHRvIHNsZWVwIG9uLgorICoKKyAqIFRoaXMgbWVhbnMgdGhhdCBhY2Nlc3MgZnJvbSB0aGUgY29uc3VtZXIgQVBJIHJlcXVpcmVzIG5vdGhpbmcgYnV0CisgKiB0YWtpbmcgdGhlIHN0cnVjdCdzIGxvY2suCisgKgorICogQWNjZXNzIGJlY2F1c2Ugb2YgYSBjb21wbGV0aW9uIGV2ZW50IHNob3VsZCBnbyBhcyBmb2xsb3dzOgorICogLSBsb2NrIGNxL3FwX3RhYmxlIGFuZCBsb29rIHVwIHN0cnVjdAorICogLSBpbmNyZW1lbnQgcmVmIGNvdW50IGluIHN0cnVjdAorICogLSBkcm9wIGNxL3FwX3RhYmxlIGxvY2sKKyAqIC0gbG9jayBzdHJ1Y3QsIGRvIHlvdXIgdGhpbmcsIGFuZCB1bmxvY2sgc3RydWN0CisgKiAtIGRlY3JlbWVudCByZWYgY291bnQ7IGlmIHplcm8sIHdha2UgdXAgd2FpdGVycworICoKKyAqIFRvIGRlc3Ryb3kgYSBDUS9RUCwgd2UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6CisgKiAtIGxvY2sgY3EvcXBfdGFibGUsIHJlbW92ZSBwb2ludGVyLCB1bmxvY2sgY3EvcXBfdGFibGUgbG9jaworICogLSBkZWNyZW1lbnQgcmVmIGNvdW50CisgKiAtIHdhaXRfZXZlbnQgdW50aWwgcmVmIGNvdW50IGlzIHplcm8KKyAqCisgKiBJdCBpcyB0aGUgY29uc3VtZXIncyByZXNwb25zaWJpbHR5IHRvIG1ha2Ugc3VyZSB0aGF0IG5vIFFQCisgKiBvcGVyYXRpb25zIChXUUUgcG9zdGluZyBvciBzdGF0ZSBtb2RpZmljYXRpb24pIGFyZSBwZW5kaW5nIHdoZW4gdGhlCisgKiBRUCBpcyBkZXN0cm95ZWQuICBBbHNvLCB0aGUgY29uc3VtZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBjYWxscyB0bworICogcXBfbW9kaWZ5IGFyZSBzZXJpYWxpemVkLgorICoKKyAqIFBvc3NpYmxlIG9wdGltaXphdGlvbnMgKHdhaXQgZm9yIHByb2ZpbGUgZGF0YSB0byBzZWUgaWYvd2hlcmUgd2UKKyAqIGhhdmUgbG9ja3MgYm91bmNpbmcgYmV0d2VlbiBDUFVzKToKKyAqIC0gc3BsaXQgY3EvcXAgdGFibGUgbG9jayBpbnRvIG4gc2VwYXJhdGUgKGNhY2hlLWFsaWduZWQpIGxvY2tzLAorICogICBpbmRleGVkIChzYXkpIGJ5IHRoZSBwYWdlIGluIHRoZSB0YWJsZQorICovCisKK3N0cnVjdCBpcGF0aF9jcSB7CisJc3RydWN0IGliX2NxIGliY3E7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGNvbXB0YXNrOworCXNwaW5sb2NrX3QgbG9jazsKKwl1OCBub3RpZnk7CisJdTggdHJpZ2dlcmVkOworCXUzMiBoZWFkOwkJLyogbmV3IHJlY29yZHMgYWRkZWQgdG8gdGhlIGhlYWQgKi8KKwl1MzIgdGFpbDsJCS8qIHBvbGxfY3EoKSByZWFkcyBmcm9tIGhlcmUuICovCisJc3RydWN0IGliX3djICpxdWV1ZTsJLyogdGhpcyBpcyBhY3R1YWxseSBpYmNxLmNxZSArIDEgKi8KK307CisKKy8qCisgKiBTZW5kIHdvcmsgcmVxdWVzdCBxdWV1ZSBlbnRyeS4KKyAqIFRoZSBzaXplIG9mIHRoZSBzZ19saXN0IGlzIGRldGVybWluZWQgd2hlbiB0aGUgUVAgaXMgY3JlYXRlZCBhbmQgc3RvcmVkCisgKiBpbiBxcC0+c19tYXhfc2dlLgorICovCitzdHJ1Y3QgaXBhdGhfc3dxZSB7CisJc3RydWN0IGliX3NlbmRfd3Igd3I7CS8qIGRvbid0IHVzZSB3ci5zZ19saXN0ICovCisJdTMyIHBzbjsJCS8qIGZpcnN0IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1MzIgbHBzbjsJCS8qIGxhc3QgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLworCXUzMiBzc247CQkvKiBzZW5kIHNlcXVlbmNlIG51bWJlciAqLworCXUzMiBsZW5ndGg7CQkvKiB0b3RhbCBsZW5ndGggb2YgZGF0YSBpbiBzZ19saXN0ICovCisJc3RydWN0IGlwYXRoX3NnZSBzZ19saXN0WzBdOworfTsKKworLyoKKyAqIFJlY2VpdmUgd29yayByZXF1ZXN0IHF1ZXVlIGVudHJ5LgorICogVGhlIHNpemUgb2YgdGhlIHNnX2xpc3QgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBRUCBpcyBjcmVhdGVkIGFuZCBzdG9yZWQKKyAqIGluIHFwLT5yX21heF9zZ2UuCisgKi8KK3N0cnVjdCBpcGF0aF9yd3FlIHsKKwl1NjQgd3JfaWQ7CisJdTMyIGxlbmd0aDsJCS8qIHRvdGFsIGxlbmd0aCBvZiBkYXRhIGluIHNnX2xpc3QgKi8KKwl1OCBudW1fc2dlOworCXN0cnVjdCBpcGF0aF9zZ2Ugc2dfbGlzdFswXTsKK307CisKK3N0cnVjdCBpcGF0aF9ycSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXUzMiBoZWFkOwkJLyogbmV3IHdvcmsgcmVxdWVzdHMgcG9zdGVkIHRvIHRoZSBoZWFkICovCisJdTMyIHRhaWw7CQkvKiByZWNlaXZlcyBwdWxsIHJlcXVlc3RzIGZyb20gaGVyZS4gKi8KKwl1MzIgc2l6ZTsJCS8qIHNpemUgb2YgUldRRSBhcnJheSAqLworCXU4IG1heF9zZ2U7CisJc3RydWN0IGlwYXRoX3J3cWUgKndxOwkvKiBSV1FFIGFycmF5ICovCit9OworCitzdHJ1Y3QgaXBhdGhfc3JxIHsKKwlzdHJ1Y3QgaWJfc3JxIGlic3JxOworCXN0cnVjdCBpcGF0aF9ycSBycTsKKwkvKiBzZW5kIHNpZ25hbCB3aGVuIG51bWJlciBvZiBSV1FFcyA8IGxpbWl0ICovCisJdTMyIGxpbWl0OworfTsKKworLyoKKyAqIFZhcmlhYmxlcyBwcmVmaXhlZCB3aXRoIHNfIGFyZSBmb3IgdGhlIHJlcXVlc3RlciAoc2VuZGVyKS4KKyAqIFZhcmlhYmxlcyBwcmVmaXhlZCB3aXRoIHJfIGFyZSBmb3IgdGhlIHJlc3BvbmRlciAocmVjZWl2ZXIpLgorICogVmFyaWFibGVzIHByZWZpeGVkIHdpdGggYWNrXyBhcmUgZm9yIHJlc3BvbmRlciByZXBsaWVzLgorICoKKyAqIENvbW1vbiB2YXJpYWJsZXMgYXJlIHByb3RlY3RlZCBieSBib3RoIHJfcnEubG9jayBhbmQgc19sb2NrIGluIHRoYXQgb3JkZXIKKyAqIHdoaWNoIG9ubHkgaGFwcGVucyBpbiBtb2RpZnlfcXAoKSBvciBjaGFuZ2luZyB0aGUgUVAgJ3N0YXRlJy4KKyAqLworc3RydWN0IGlwYXRoX3FwIHsKKwlzdHJ1Y3QgaWJfcXAgaWJxcDsKKwlzdHJ1Y3QgaXBhdGhfcXAgKm5leHQ7CQkvKiBsaW5rIGxpc3QgZm9yIFFQTiBoYXNoIHRhYmxlICovCisJc3RydWN0IGlwYXRoX3FwICp0aW1lcl9uZXh0OwkvKiBsaW5rIGxpc3QgZm9yIGlwYXRoX2liX3RpbWVyKCkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHBpb3dhaXQ7CS8qIGxpbmsgZm9yIHdhaXQgUElPIGJ1ZiAqLworCXN0cnVjdCBsaXN0X2hlYWQgdGltZXJ3YWl0OwkvKiBsaW5rIGZvciB3YWl0aW5nIGZvciB0aW1lb3V0cyAqLworCXN0cnVjdCBpYl9haF9hdHRyIHJlbW90ZV9haF9hdHRyOworCXN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgc19oZHI7CS8qIG5leHQgcGFja2V0IGhlYWRlciB0byBzZW5kICovCisJYXRvbWljX3QgcmVmY291bnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgc190YXNrOworCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNfY3VyX3NnZTsKKwlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlIHNfc2dlOwkvKiBjdXJyZW50IHNlbmQgcmVxdWVzdCBkYXRhICovCisJLyogY3VycmVudCBSRE1BIHJlYWQgc2VuZCBkYXRhICovCisJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSBzX3JkbWFfc2dlOworCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgcl9zZ2U7CS8qIGN1cnJlbnQgcmVjZWl2ZSBkYXRhICovCisJc3BpbmxvY2tfdCBzX2xvY2s7CisJdW5zaWduZWQgbG9uZyBzX2ZsYWdzOworCXUzMiBzX2hkcndvcmRzOwkJLyogc2l6ZSBvZiBzX2hkciBpbiAzMiBiaXQgd29yZHMgKi8KKwl1MzIgc19jdXJfc2l6ZTsJCS8qIHNpemUgb2Ygc2VuZCBwYWNrZXQgaW4gYnl0ZXMgKi8KKwl1MzIgc19sZW47CQkvKiB0b3RhbCBsZW5ndGggb2Ygc19zZ2UgKi8KKwl1MzIgc19yZG1hX2xlbjsJCS8qIHRvdGFsIGxlbmd0aCBvZiBzX3JkbWFfc2dlICovCisJdTMyIHNfbmV4dF9wc247CQkvKiBQU04gZm9yIG5leHQgcmVxdWVzdCAqLworCXUzMiBzX2xhc3RfcHNuOwkJLyogbGFzdCByZXNwb25zZSBQU04gcHJvY2Vzc2VkICovCisJdTMyIHNfcHNuOwkJLyogY3VycmVudCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCisJdTMyIHNfcm5yX3RpbWVvdXQ7CS8qIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZm9yIFJOUiB0aW1lb3V0ICovCisJdTMyIHNfYWNrX3BzbjsJCS8qIFBTTiBmb3IgbmV4dCBBQ0sgb3IgUkRNQV9SRUFEICovCisJdTY0IHNfYWNrX2F0b21pYzsJLyogZGF0YSBmb3IgYXRvbWljIEFDSyAqLworCXU2NCByX3dyX2lkOwkJLyogSUQgZm9yIGN1cnJlbnQgcmVjZWl2ZSBXUUUgKi8KKwl1NjQgcl9hdG9taWNfZGF0YTsJLyogZGF0YSBmb3IgbGFzdCBhdG9taWMgb3AgKi8KKwl1MzIgcl9hdG9taWNfcHNuOwkvKiBQU04gb2YgbGFzdCBhdG9taWMgb3AgKi8KKwl1MzIgcl9sZW47CQkvKiB0b3RhbCBsZW5ndGggb2Ygcl9zZ2UgKi8KKwl1MzIgcl9yY3ZfbGVuOwkJLyogcmVjZWl2ZSBkYXRhIGxlbiBwcm9jZXNzZWQgKi8KKwl1MzIgcl9wc247CQkvKiBleHBlY3RlZCByY3YgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLworCXU4IHN0YXRlOwkJLyogUVAgc3RhdGUgKi8KKwl1OCBzX3N0YXRlOwkJLyogb3Bjb2RlIG9mIGxhc3QgcGFja2V0IHNlbnQgKi8KKwl1OCBzX2Fja19zdGF0ZTsJCS8qIG9wY29kZSBvZiBwYWNrZXQgdG8gQUNLICovCisJdTggc19uYWtfc3RhdGU7CQkvKiBub24temVybyBpZiBOQUsgaXMgcGVuZGluZyAqLworCXU4IHJfc3RhdGU7CQkvKiBvcGNvZGUgb2YgbGFzdCBwYWNrZXQgcmVjZWl2ZWQgKi8KKwl1OCByX3JldXNlX3NnZTsJCS8qIGZvciBVQyByZWNlaXZlIGVycm9ycyAqLworCXU4IHJfc2dlX2lueDsJCS8qIGN1cnJlbnQgaW5kZXggaW50byBzZ19saXN0ICovCisJdTggc19tYXhfc2dlOwkJLyogc2l6ZSBvZiBzX3dxLT5zZ19saXN0ICovCisJdTggcXBfYWNjZXNzX2ZsYWdzOworCXU4IHNfcmV0cnlfY250OwkJLyogbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5ICovCisJdTggc19ybnJfcmV0cnlfY250OworCXU4IHNfbWluX3Jucl90aW1lcjsKKwl1OCBzX3JldHJ5OwkJLyogcmVxdWVzdGVyIHJldHJ5IGNvdW50ZXIgKi8KKwl1OCBzX3Jucl9yZXRyeTsJCS8qIHJlcXVlc3RlciBSTlIgcmV0cnkgY291bnRlciAqLworCXU4IHNfcGtleV9pbmRleDsJLyogUEtFWSBpbmRleCB0byB1c2UgKi8KKwllbnVtIGliX210dSBwYXRoX210dTsKKwlhdG9taWNfdCBtc247CQkvKiBtZXNzYWdlIHNlcXVlbmNlIG51bWJlciAqLworCXUzMiByZW1vdGVfcXBuOworCXUzMiBxa2V5OwkJLyogUUtFWSBmb3IgdGhpcyBRUCAoZm9yIFVEIG9yIFJEKSAqLworCXUzMiBzX3NpemU7CQkvKiBzZW5kIHdvcmsgcXVldWUgc2l6ZSAqLworCXUzMiBzX2hlYWQ7CQkvKiBuZXcgZW50cmllcyBhZGRlZCBoZXJlICovCisJdTMyIHNfdGFpbDsJCS8qIG5leHQgZW50cnkgdG8gcHJvY2VzcyAqLworCXUzMiBzX2N1cjsJCS8qIGN1cnJlbnQgd29yayBxdWV1ZSBlbnRyeSAqLworCXUzMiBzX2xhc3Q7CQkvKiBsYXN0IHVuLUFDSydlZCBlbnRyeSAqLworCXUzMiBzX3NzbjsJCS8qIFNTTiBvZiB0YWlsIGVudHJ5ICovCisJdTMyIHNfbHNuOwkJLyogbGltaXQgc2VxdWVuY2UgbnVtYmVyIChjcmVkaXQpICovCisJc3RydWN0IGlwYXRoX3N3cWUgKnNfd3E7CS8qIHNlbmQgd29yayBxdWV1ZSAqLworCXN0cnVjdCBpcGF0aF9ycSByX3JxOwkvKiByZWNlaXZlIHdvcmsgcXVldWUgKi8KK307CisKKy8qCisgKiBCaXQgZGVmaW5pdGlvbnMgZm9yIHNfZmxhZ3MuCisgKi8KKyNkZWZpbmUgSVBBVEhfU19CVVNZCQkwCisjZGVmaW5lIElQQVRIX1NfU0lHTkFMX1JFUV9XUgkxCisKKy8qCisgKiBTaW5jZSBzdHJ1Y3QgaXBhdGhfc3dxZSBpcyBub3QgYSBmaXhlZCBzaXplLCB3ZSBjYW4ndCBzaW1wbHkgaW5kZXggaW50bworICogc3RydWN0IGlwYXRoX3FwLnNfd3EuICBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFycmF5IGluZGV4IGNvbXB1dGF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9zd3FlICpnZXRfc3dxZV9wdHIoc3RydWN0IGlwYXRoX3FwICpxcCwKKwkJCQkJICAgICAgdW5zaWduZWQgbikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcGF0aF9zd3FlICopKChjaGFyICopcXAtPnNfd3EgKworCQkJCSAgICAgKHNpemVvZihzdHJ1Y3QgaXBhdGhfc3dxZSkgKworCQkJCSAgICAgIHFwLT5zX21heF9zZ2UgKgorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXBhdGhfc2dlKSkgKiBuKTsKK30KKworLyoKKyAqIFNpbmNlIHN0cnVjdCBpcGF0aF9yd3FlIGlzIG5vdCBhIGZpeGVkIHNpemUsIHdlIGNhbid0IHNpbXBseSBpbmRleCBpbnRvCisgKiBzdHJ1Y3QgaXBhdGhfcnEud3EuICBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFycmF5IGluZGV4IGNvbXB1dGF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9yd3FlICpnZXRfcndxZV9wdHIoc3RydWN0IGlwYXRoX3JxICpycSwKKwkJCQkJICAgICAgdW5zaWduZWQgbikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcGF0aF9yd3FlICopCisJCSgoY2hhciAqKSBycS0+d3EgKworCQkgKHNpemVvZihzdHJ1Y3QgaXBhdGhfcndxZSkgKworCQkgIHJxLT5tYXhfc2dlICogc2l6ZW9mKHN0cnVjdCBpcGF0aF9zZ2UpKSAqIG4pOworfQorCisvKgorICogUVBOLW1hcCBwYWdlcyBzdGFydCBvdXQgYXMgTlVMTCwgdGhleSBnZXQgYWxsb2NhdGVkIHVwb24KKyAqIGZpcnN0IHVzZSBhbmQgYXJlIG5ldmVyIGRlYWxsb2NhdGVkLiBUaGlzIHdheSwKKyAqIGxhcmdlIGJpdG1hcHMgYXJlIG5vdCBhbGxvY2F0ZWQgdW5sZXNzIGxhcmdlIG51bWJlcnMgb2YgUVBzIGFyZSB1c2VkLgorICovCitzdHJ1Y3QgcXBuX21hcCB7CisJYXRvbWljX3Qgbl9mcmVlOworCXZvaWQgKnBhZ2U7Cit9OworCitzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgeworCXNwaW5sb2NrX3QgbG9jazsKKwl1MzIgbGFzdDsJCS8qIGxhc3QgUVAgbnVtYmVyIGFsbG9jYXRlZCAqLworCXUzMiBtYXg7CQkvKiBzaXplIG9mIHRoZSBoYXNoIHRhYmxlICovCisJdTMyIG5tYXBzOwkJLyogc2l6ZSBvZiB0aGUgbWFwIHRhYmxlICovCisJc3RydWN0IGlwYXRoX3FwICoqdGFibGU7CisJLyogYml0IG1hcCBvZiBmcmVlIG51bWJlcnMgKi8KKwlzdHJ1Y3QgcXBuX21hcCBtYXBbUVBOTUFQX0VOVFJJRVNdOworfTsKKworc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgeworCXNwaW5sb2NrX3QgbG9jazsKKwl1MzIgbmV4dDsJCS8qIG5leHQgdW51c2VkIGluZGV4IChzcGVlZHMgc2VhcmNoKSAqLworCXUzMiBnZW47CQkvKiBnZW5lcmF0aW9uIGNvdW50ICovCisJdTMyIG1heDsJCS8qIHNpemUgb2YgdGhlIHRhYmxlICovCisJc3RydWN0IGlwYXRoX21yZWdpb24gKip0YWJsZTsKK307CisKK3N0cnVjdCBpcGF0aF9vcGNvZGVfc3RhdHMgeworCXU2NCBuX3BhY2tldHM7CQkvKiBudW1iZXIgb2YgcGFja2V0cyAqLworCXU2NCBuX2J5dGVzOwkJLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzICovCit9OworCitzdHJ1Y3QgaXBhdGhfaWJkZXYgeworCXN0cnVjdCBpYl9kZXZpY2UgaWJkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJaW50IGliX3VuaXQ7CQkvKiBUaGlzIGlzIHRoZSBkZXZpY2UgbnVtYmVyICovCisJdTE2IHNtX2xpZDsJCS8qIGluIGhvc3Qgb3JkZXIgKi8KKwl1OCBzbV9zbDsKKwl1OCBta2V5cHJvdF9yZXN2X2xtYzsKKwkvKiBub24temVybyB3aGVuIHRpbWVyIGlzIHNldCAqLworCXVuc2lnbmVkIGxvbmcgbWtleV9sZWFzZV90aW1lb3V0OworCisJLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHJlYWxseSBwZXIgcG9ydC4gKi8KKwlzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgcXBfdGFibGU7CisJc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgbGtfdGFibGU7CisJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nWzNdOwkvKiBGSUZPIG9mIFFQcyB3YWl0aW5nIGZvciBBQ0tzICovCisJc3RydWN0IGxpc3RfaGVhZCBwaW93YWl0OwkvKiBsaXN0IGZvciB3YWl0IFBJTyBidWYgKi8KKwkvKiBsaXN0IG9mIFFQcyB3YWl0aW5nIGZvciBSTlIgdGltZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJucndhaXQ7CisJc3BpbmxvY2tfdCBwZW5kaW5nX2xvY2s7CisJX19iZTY0IHN5c19pbWFnZV9ndWlkOwkvKiBpbiBuZXR3b3JrIG9yZGVyICovCisJX19iZTY0IGdpZF9wcmVmaXg7CS8qIGluIG5ldHdvcmsgb3JkZXIgKi8KKwlfX2JlNjQgbWtleTsKKwl1NjQgaXBhdGhfc3dvcmQ7CS8qIHRvdGFsIGR3b3JkcyBzZW50IChzYW1wbGUgcmVzdWx0KSAqLworCXU2NCBpcGF0aF9yd29yZDsJLyogdG90YWwgZHdvcmRzIHJlY2VpdmVkIChzYW1wbGUgcmVzdWx0KSAqLworCXU2NCBpcGF0aF9zcGt0czsJLyogdG90YWwgcGFja2V0cyBzZW50IChzYW1wbGUgcmVzdWx0KSAqLworCXU2NCBpcGF0aF9ycGt0czsJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZCAoc2FtcGxlIHJlc3VsdCkgKi8KKwkvKiAjIG9mIHRpY2tzIG5vIGRhdGEgc2VudCAoc2FtcGxlIHJlc3VsdCkgKi8KKwl1NjQgaXBhdGhfeG1pdF93YWl0OworCXU2NCByY3ZfZXJyb3JzOwkJLyogIyBvZiBwYWNrZXRzIHdpdGggU1cgZGV0ZWN0ZWQgcmN2IGVycnMgKi8KKwl1NjQgbl91bmljYXN0X3htaXQ7CS8qIHRvdGFsIHVuaWNhc3QgcGFja2V0cyBzZW50ICovCisJdTY0IG5fdW5pY2FzdF9yY3Y7CS8qIHRvdGFsIHVuaWNhc3QgcGFja2V0cyByZWNlaXZlZCAqLworCXU2NCBuX211bHRpY2FzdF94bWl0OwkvKiB0b3RhbCBtdWx0aWNhc3QgcGFja2V0cyBzZW50ICovCisJdTY0IG5fbXVsdGljYXN0X3JjdjsJLyogdG90YWwgbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1NjQgbl9zeW1ib2xfZXJyb3JfY291bnRlcjsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCBuX2xpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlcjsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCBuX2xpbmtfZG93bmVkX2NvdW50ZXI7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgbl9wb3J0X3Jjdl9lcnJvcnM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgbl9wb3J0X3Jjdl9yZW1waHlzX2Vycm9yczsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCBuX3BvcnRfeG1pdF9kaXNjYXJkczsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCBuX3BvcnRfeG1pdF9kYXRhOwkvKiBzdGFydGluZyBjb3VudCBmb3IgUE1BICovCisJdTY0IG5fcG9ydF9yY3ZfZGF0YTsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCBuX3BvcnRfeG1pdF9wYWNrZXRzOwkvKiBzdGFydGluZyBjb3VudCBmb3IgUE1BICovCisJdTY0IG5fcG9ydF9yY3ZfcGFja2V0czsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXUzMiBuX3BrZXlfdmlvbGF0aW9uczsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXUzMiBuX3JjX3Jlc2VuZHM7CisJdTMyIG5fcmNfYWNrczsKKwl1MzIgbl9yY19xYWNrczsKKwl1MzIgbl9zZXFfbmFrczsKKwl1MzIgbl9yZG1hX3NlcTsKKwl1MzIgbl9ybnJfbmFrczsKKwl1MzIgbl9vdGhlcl9uYWtzOworCXUzMiBuX3RpbWVvdXRzOworCXUzMiBuX3BrdF9kcm9wczsKKwl1MzIgbl93cWVfZXJyczsKKwl1MzIgbl9yZG1hX2R1cF9idXN5OworCXUzMiBuX3Bpb3dhaXQ7CisJdTMyIG5fbm9fcGlvYnVmOworCXUzMiBwb3J0X2NhcF9mbGFnczsKKwl1MzIgcG1hX3NhbXBsZV9zdGFydDsKKwl1MzIgcG1hX3NhbXBsZV9pbnRlcnZhbDsKKwlfX2JlMTYgcG1hX2NvdW50ZXJfc2VsZWN0WzVdOworCXUxNiBwbWFfdGFnOworCXUxNiBxa2V5X3Zpb2xhdGlvbnM7CisJdTE2IG1rZXlfdmlvbGF0aW9uczsKKwl1MTYgbWtleV9sZWFzZV9wZXJpb2Q7CisJdTE2IHBlbmRpbmdfaW5kZXg7CS8qIHdoaWNoIHBlbmRpbmcgcXVldWUgaXMgYWN0aXZlICovCisJdTggcG1hX3NhbXBsZV9zdGF0dXM7CisJdTggc3VibmV0X3RpbWVvdXQ7CisJdTggbGlua193aWR0aF9lbmFibGVkOworCXU4IHZsX2hpZ2hfbGltaXQ7CisJc3RydWN0IGlwYXRoX29wY29kZV9zdGF0cyBvcHN0YXRzWzEyOF07Cit9OworCitzdHJ1Y3QgaXBhdGhfdWNvbnRleHQgeworCXN0cnVjdCBpYl91Y29udGV4dCBpYnVjb250ZXh0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfbXIgKnRvX2ltcihzdHJ1Y3QgaWJfbXIgKmlibXIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYm1yLCBzdHJ1Y3QgaXBhdGhfbXIsIGlibXIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9mbXIgKnRvX2lmbXIoc3RydWN0IGliX2ZtciAqaWJmbXIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYmZtciwgc3RydWN0IGlwYXRoX2ZtciwgaWJmbXIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9wZCAqdG9faXBkKHN0cnVjdCBpYl9wZCAqaWJwZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlicGQsIHN0cnVjdCBpcGF0aF9wZCwgaWJwZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX2FoICp0b19pYWgoc3RydWN0IGliX2FoICppYmFoKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJhaCwgc3RydWN0IGlwYXRoX2FoLCBpYmFoKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfY3EgKnRvX2ljcShzdHJ1Y3QgaWJfY3EgKmliY3EpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYmNxLCBzdHJ1Y3QgaXBhdGhfY3EsIGliY3EpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9zcnEgKnRvX2lzcnEoc3RydWN0IGliX3NycSAqaWJzcnEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYnNycSwgc3RydWN0IGlwYXRoX3NycSwgaWJzcnEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9xcCAqdG9faXFwKHN0cnVjdCBpYl9xcCAqaWJxcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlicXAsIHN0cnVjdCBpcGF0aF9xcCwgaWJxcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX2liZGV2ICp0b19pZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJkZXYsIHN0cnVjdCBpcGF0aF9pYmRldiwgaWJkZXYpOworfQorCitpbnQgaXBhdGhfcHJvY2Vzc19tYWQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCSAgICAgIGludCBtYWRfZmxhZ3MsCisJCSAgICAgIHU4IHBvcnRfbnVtLAorCQkgICAgICBzdHJ1Y3QgaWJfd2MgKmluX3djLAorCQkgICAgICBzdHJ1Y3QgaWJfZ3JoICppbl9ncmgsCisJCSAgICAgIHN0cnVjdCBpYl9tYWQgKmluX21hZCwgc3RydWN0IGliX21hZCAqb3V0X21hZCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX3Vjb250ZXh0ICp0b19pdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0CisJCQkJCQkgICppYnVjb250ZXh0KQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJ1Y29udGV4dCwgc3RydWN0IGlwYXRoX3Vjb250ZXh0LCBpYnVjb250ZXh0KTsKK30KKworLyoKKyAqIENvbXBhcmUgdGhlIGxvd2VyIDI0IGJpdHMgb2YgdGhlIHR3byB2YWx1ZXMuCisgKiBSZXR1cm5zIGFuIGludGVnZXIgPCwgPT0sIG9yID4gdGhhbiB6ZXJvLgorICovCitzdGF0aWMgaW5saW5lIGludCBpcGF0aF9jbXAyNCh1MzIgYSwgdTMyIGIpCit7CisJcmV0dXJuICgoKGludCkgYSkgLSAoKGludCkgYikpIDw8IDg7Cit9CisKK3N0cnVjdCBpcGF0aF9tY2FzdCAqaXBhdGhfbWNhc3RfZmluZCh1bmlvbiBpYl9naWQgKm1naWQpOworCitpbnQgaXBhdGhfbXVsdGljYXN0X2F0dGFjaChzdHJ1Y3QgaWJfcXAgKmlicXAsIHVuaW9uIGliX2dpZCAqZ2lkLCB1MTYgbGlkKTsKKworaW50IGlwYXRoX211bHRpY2FzdF9kZXRhY2goc3RydWN0IGliX3FwICppYnFwLCB1bmlvbiBpYl9naWQgKmdpZCwgdTE2IGxpZCk7CisKK2ludCBpcGF0aF9tY2FzdF90cmVlX2VtcHR5KHZvaWQpOworCitfX2JlMzIgaXBhdGhfY29tcHV0ZV9hZXRoKHN0cnVjdCBpcGF0aF9xcCAqcXApOworCitzdHJ1Y3QgaXBhdGhfcXAgKmlwYXRoX2xvb2t1cF9xcG4oc3RydWN0IGlwYXRoX3FwX3RhYmxlICpxcHQsIHUzMiBxcG4pOworCitzdHJ1Y3QgaWJfcXAgKmlwYXRoX2NyZWF0ZV9xcChzdHJ1Y3QgaWJfcGQgKmlicGQsCisJCQkgICAgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIsCisJCQkgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKKworaW50IGlwYXRoX2Rlc3Ryb3lfcXAoc3RydWN0IGliX3FwICppYnFwKTsKKworaW50IGlwYXRoX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLAorCQkgICAgaW50IGF0dHJfbWFzayk7CisKK2ludCBpcGF0aF9xdWVyeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLAorCQkgICBpbnQgYXR0cl9tYXNrLCBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIpOworCit2b2lkIGlwYXRoX2ZyZWVfYWxsX3FwcyhzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgKnFwdCk7CisKK2ludCBpcGF0aF9pbml0X3FwX3RhYmxlKHN0cnVjdCBpcGF0aF9pYmRldiAqaWRldiwgaW50IHNpemUpOworCit2b2lkIGlwYXRoX3NxZXJyb3JfcXAoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3djICp3Yyk7CisKK3ZvaWQgaXBhdGhfZ2V0X2NyZWRpdChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgYWV0aCk7CisKK3ZvaWQgaXBhdGhfZG9fcmNfc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpOworCit2b2lkIGlwYXRoX2RvX3VjX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKTsKKwordm9pZCBpcGF0aF9jcV9lbnRlcihzdHJ1Y3QgaXBhdGhfY3EgKmNxLCBzdHJ1Y3QgaWJfd2MgKmVudHJ5LCBpbnQgc2lnKTsKKworaW50IGlwYXRoX3JrZXlfb2soc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLAorCQkgIHUzMiBsZW4sIHU2NCB2YWRkciwgdTMyIHJrZXksIGludCBhY2MpOworCitpbnQgaXBhdGhfbGtleV9vayhzdHJ1Y3QgaXBhdGhfbGtleV90YWJsZSAqcmt0LCBzdHJ1Y3QgaXBhdGhfc2dlICppc2dlLAorCQkgIHN0cnVjdCBpYl9zZ2UgKnNnZSwgaW50IGFjYyk7CisKK3ZvaWQgaXBhdGhfY29weV9zZ2Uoc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsIHZvaWQgKmRhdGEsIHUzMiBsZW5ndGgpOworCit2b2lkIGlwYXRoX3NraXBfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB1MzIgbGVuZ3RoKTsKKworaW50IGlwYXRoX3Bvc3RfcmNfc2VuZChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IpOworCit2b2lkIGlwYXRoX3VjX3JjdihzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyLAorCQkgIGludCBoYXNfZ3JoLCB2b2lkICpkYXRhLCB1MzIgdGxlbiwgc3RydWN0IGlwYXRoX3FwICpxcCk7CisKK3ZvaWQgaXBhdGhfcmNfcmN2KHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaXBhdGhfaWJfaGVhZGVyICpoZHIsCisJCSAgaW50IGhhc19ncmgsIHZvaWQgKmRhdGEsIHUzMiB0bGVuLCBzdHJ1Y3QgaXBhdGhfcXAgKnFwKTsKKwordm9pZCBpcGF0aF9yZXN0YXJ0X3JjKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHUzMiBwc24sIHN0cnVjdCBpYl93YyAqd2MpOworCitpbnQgaXBhdGhfcG9zdF91ZF9zZW5kKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpYl9zZW5kX3dyICp3cik7CisKK3ZvaWQgaXBhdGhfdWRfcmN2KHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaXBhdGhfaWJfaGVhZGVyICpoZHIsCisJCSAgaW50IGhhc19ncmgsIHZvaWQgKmRhdGEsIHUzMiB0bGVuLCBzdHJ1Y3QgaXBhdGhfcXAgKnFwKTsKKworaW50IGlwYXRoX2FsbG9jX2xrZXkoc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCwKKwkJICAgICBzdHJ1Y3QgaXBhdGhfbXJlZ2lvbiAqbXIpOworCit2b2lkIGlwYXRoX2ZyZWVfbGtleShzdHJ1Y3QgaXBhdGhfbGtleV90YWJsZSAqcmt0LCB1MzIgbGtleSk7CisKK2ludCBpcGF0aF9sa2V5X29rKHN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3QsIHN0cnVjdCBpcGF0aF9zZ2UgKmlzZ2UsCisJCSAgc3RydWN0IGliX3NnZSAqc2dlLCBpbnQgYWNjKTsKKworaW50IGlwYXRoX3JrZXlfb2soc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLAorCQkgIHUzMiBsZW4sIHU2NCB2YWRkciwgdTMyIHJrZXksIGludCBhY2MpOworCitpbnQgaXBhdGhfcG9zdF9zcnFfcmVjZWl2ZShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3JlY3Zfd3IgKndyLAorCQkJICAgc3RydWN0IGliX3JlY3Zfd3IgKipiYWRfd3IpOworCitzdHJ1Y3QgaWJfc3JxICppcGF0aF9jcmVhdGVfc3JxKHN0cnVjdCBpYl9wZCAqaWJwZCwKKwkJCQlzdHJ1Y3QgaWJfc3JxX2luaXRfYXR0ciAqc3JxX2luaXRfYXR0ciwKKwkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKKworaW50IGlwYXRoX21vZGlmeV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0ciwKKwkJICAgICBlbnVtIGliX3NycV9hdHRyX21hc2sgYXR0cl9tYXNrKTsKKworaW50IGlwYXRoX3F1ZXJ5X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3NycV9hdHRyICphdHRyKTsKKworaW50IGlwYXRoX2Rlc3Ryb3lfc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxKTsKKwordm9pZCBpcGF0aF9jcV9lbnRlcihzdHJ1Y3QgaXBhdGhfY3EgKmNxLCBzdHJ1Y3QgaWJfd2MgKmVudHJ5LCBpbnQgc2lnKTsKKworaW50IGlwYXRoX3BvbGxfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgbnVtX2VudHJpZXMsIHN0cnVjdCBpYl93YyAqZW50cnkpOworCitzdHJ1Y3QgaWJfY3EgKmlwYXRoX2NyZWF0ZV9jcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgaW50IGVudHJpZXMsCisJCQkgICAgICBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKKworaW50IGlwYXRoX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICppYmNxKTsKKworaW50IGlwYXRoX3JlcV9ub3RpZnlfY3Eoc3RydWN0IGliX2NxICppYmNxLCBlbnVtIGliX2NxX25vdGlmeSBub3RpZnkpOworCitpbnQgaXBhdGhfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgaW50IGNxZSwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CisKK3N0cnVjdCBpYl9tciAqaXBhdGhfZ2V0X2RtYV9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBpbnQgYWNjKTsKKworc3RydWN0IGliX21yICppcGF0aF9yZWdfcGh5c19tcihzdHJ1Y3QgaWJfcGQgKnBkLAorCQkJCXN0cnVjdCBpYl9waHlzX2J1ZiAqYnVmZmVyX2xpc3QsCisJCQkJaW50IG51bV9waHlzX2J1ZiwgaW50IGFjYywgdTY0ICppb3ZhX3N0YXJ0KTsKKworc3RydWN0IGliX21yICppcGF0aF9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqcmVnaW9uLAorCQkJCWludCBtcl9hY2Nlc3NfZmxhZ3MsCisJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CisKK2ludCBpcGF0aF9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIpOworCitzdHJ1Y3QgaWJfZm1yICppcGF0aF9hbGxvY19mbXIoc3RydWN0IGliX3BkICpwZCwgaW50IG1yX2FjY2Vzc19mbGFncywKKwkJCSAgICAgICBzdHJ1Y3QgaWJfZm1yX2F0dHIgKmZtcl9hdHRyKTsKKworaW50IGlwYXRoX21hcF9waHlzX2ZtcihzdHJ1Y3QgaWJfZm1yICppYmZtciwgdTY0ICogcGFnZV9saXN0LAorCQkgICAgICAgaW50IGxpc3RfbGVuLCB1NjQgaW92YSk7CisKK2ludCBpcGF0aF91bm1hcF9mbXIoc3RydWN0IGxpc3RfaGVhZCAqZm1yX2xpc3QpOworCitpbnQgaXBhdGhfZGVhbGxvY19mbXIoc3RydWN0IGliX2ZtciAqaWJmbXIpOworCit2b2lkIGlwYXRoX25vX2J1ZnNfYXZhaWxhYmxlKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2KTsKKwordm9pZCBpcGF0aF9pbnNlcnRfcm5yX3F1ZXVlKHN0cnVjdCBpcGF0aF9xcCAqcXApOworCitpbnQgaXBhdGhfZ2V0X3J3cWUoc3RydWN0IGlwYXRoX3FwICpxcCwgaW50IHdyX2lkX29ubHkpOworCit2b2lkIGlwYXRoX3J1Y19sb29wYmFjayhzdHJ1Y3QgaXBhdGhfcXAgKnNxcCwgc3RydWN0IGliX3djICp3Yyk7CisKK2V4dGVybiBjb25zdCBlbnVtIGliX3djX29wY29kZSBpYl9pcGF0aF93Y19vcGNvZGVbXTsKKworZXh0ZXJuIGNvbnN0IHU4IGlwYXRoX2N2dF9waHlzcG9ydHN0YXRlW107CisKK2V4dGVybiBjb25zdCBpbnQgaWJfaXBhdGhfc3RhdGVfb3BzW107CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbGtleV90YWJsZV9zaXplOworCitleHRlcm4gY29uc3QgdTMyIGliX2lwYXRoX3Jucl90YWJsZVtdOworCisjZW5kaWYJCQkJLyogSVBBVEhfVkVSQlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGIzMWQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorCisvKgorICogR2xvYmFsIHRhYmxlIG9mIEdJRCB0byBhdHRhY2hlZCBRUHMuCisgKiBUaGUgdGFibGUgaXMgZ2xvYmFsIHRvIGFsbCBpcGF0aCBkZXZpY2VzIHNpbmNlIGEgc2VuZCBmcm9tIG9uZSBRUC9kZXZpY2UKKyAqIG5lZWRzIHRvIGJlIGxvY2FsbHkgcm91dGVkIHRvIGFueSBsb2NhbGx5IGF0dGFjaGVkIFFQcyBvbiB0aGUgc2FtZQorICogb3IgZGlmZmVyZW50IGRldmljZS4KKyAqLworc3RhdGljIHN0cnVjdCByYl9yb290IG1jYXN0X3RyZWU7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1jYXN0X2xvY2spOworCisvKioKKyAqIGlwYXRoX21jYXN0X3FwX2FsbG9jIC0gYWxsb2MgYSBzdHJ1Y3QgdG8gbGluayBhIFFQIHRvIG1jYXN0IEdJRCBzdHJ1Y3QKKyAqIEBxcDogdGhlIFFQIHRvIGxpbmsKKyAqLworc3RhdGljIHN0cnVjdCBpcGF0aF9tY2FzdF9xcCAqaXBhdGhfbWNhc3RfcXBfYWxsb2Moc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfbWNhc3RfcXAgKm1xcDsKKworCW1xcCA9IGttYWxsb2Moc2l6ZW9mICptcXAsIEdGUF9LRVJORUwpOworCWlmICghbXFwKQorCQlnb3RvIGJhaWw7CisKKwltcXAtPnFwID0gcXA7CisJYXRvbWljX2luYygmcXAtPnJlZmNvdW50KTsKKworYmFpbDoKKwlyZXR1cm4gbXFwOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9tY2FzdF9xcF9mcmVlKHN0cnVjdCBpcGF0aF9tY2FzdF9xcCAqbXFwKQoreworCXN0cnVjdCBpcGF0aF9xcCAqcXAgPSBtcXAtPnFwOworCisJLyogTm90aWZ5IGlwYXRoX2Rlc3Ryb3lfcXAoKSBpZiBpdCBpcyB3YWl0aW5nLiAqLworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZxcC0+cmVmY291bnQpKQorCQl3YWtlX3VwKCZxcC0+d2FpdCk7CisKKwlrZnJlZShtcXApOworfQorCisvKioKKyAqIGlwYXRoX21jYXN0X2FsbG9jIC0gYWxsb2NhdGUgdGhlIG11bHRpY2FzdCBHSUQgc3RydWN0dXJlCisgKiBAbWdpZDogdGhlIG11bHRpY2FzdCBHSUQKKyAqCisgKiBBIGxpc3Qgb2YgUVBzIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhpcyBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXBhdGhfbWNhc3QgKmlwYXRoX21jYXN0X2FsbG9jKHVuaW9uIGliX2dpZCAqbWdpZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfbWNhc3QgKm1jYXN0OworCisJbWNhc3QgPSBrbWFsbG9jKHNpemVvZiAqbWNhc3QsIEdGUF9LRVJORUwpOworCWlmICghbWNhc3QpCisJCWdvdG8gYmFpbDsKKworCW1jYXN0LT5tZ2lkID0gKm1naWQ7CisJSU5JVF9MSVNUX0hFQUQoJm1jYXN0LT5xcF9saXN0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtY2FzdC0+d2FpdCk7CisJYXRvbWljX3NldCgmbWNhc3QtPnJlZmNvdW50LCAwKTsKKworYmFpbDoKKwlyZXR1cm4gbWNhc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX21jYXN0X2ZyZWUoc3RydWN0IGlwYXRoX21jYXN0ICptY2FzdCkKK3sKKwlzdHJ1Y3QgaXBhdGhfbWNhc3RfcXAgKnAsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmbWNhc3QtPnFwX2xpc3QsIGxpc3QpCisJCWlwYXRoX21jYXN0X3FwX2ZyZWUocCk7CisKKwlrZnJlZShtY2FzdCk7Cit9CisKKy8qKgorICogaXBhdGhfbWNhc3RfZmluZCAtIHNlYXJjaCB0aGUgZ2xvYmFsIHRhYmxlIGZvciB0aGUgZ2l2ZW4gbXVsdGljYXN0IEdJRAorICogQG1naWQ6IHRoZSBtdWx0aWNhc3QgR0lEIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYgbm90IGZvdW5kLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IGlmIGZvdW5kLgorICovCitzdHJ1Y3QgaXBhdGhfbWNhc3QgKmlwYXRoX21jYXN0X2ZpbmQodW5pb24gaWJfZ2lkICptZ2lkKQoreworCXN0cnVjdCByYl9ub2RlICpuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlwYXRoX21jYXN0ICptY2FzdDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisJbiA9IG1jYXN0X3RyZWUucmJfbm9kZTsKKwl3aGlsZSAobikgeworCQlpbnQgcmV0OworCisJCW1jYXN0ID0gcmJfZW50cnkobiwgc3RydWN0IGlwYXRoX21jYXN0LCByYl9ub2RlKTsKKworCQlyZXQgPSBtZW1jbXAobWdpZC0+cmF3LCBtY2FzdC0+bWdpZC5yYXcsCisJCQkgICAgIHNpemVvZih1bmlvbiBpYl9naWQpKTsKKwkJaWYgKHJldCA8IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAocmV0ID4gMCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlhdG9taWNfaW5jKCZtY2FzdC0+cmVmY291bnQpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhc3RfbG9jaywgZmxhZ3MpOworCQkJZ290byBiYWlsOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKworCW1jYXN0ID0gTlVMTDsKKworYmFpbDoKKwlyZXR1cm4gbWNhc3Q7Cit9CisKKy8qKgorICogaXBhdGhfbWNhc3RfYWRkIC0gaW5zZXJ0IG1jYXN0IEdJRCBpbnRvIHRhYmxlIGFuZCBhdHRhY2ggUVAgc3RydWN0CisgKiBAbWNhc3Q6IHRoZSBtY2FzdCBHSUQgdGFibGUKKyAqIEBtcXA6IHRoZSBRUCB0byBhdHRhY2gKKyAqCisgKiBSZXR1cm4gemVybyBpZiBib3RoIHdlcmUgYWRkZWQuICBSZXR1cm4gRUVYSVNUIGlmIHRoZSBHSUQgd2FzIGFscmVhZHkgaW4KKyAqIHRoZSB0YWJsZSBidXQgdGhlIFFQIHdhcyBhZGRlZC4gIFJldHVybiBFU1JDSCBpZiB0aGUgUVAgd2FzIGFscmVhZHkKKyAqIGF0dGFjaGVkIGFuZCBuZWl0aGVyIHN0cnVjdHVyZSB3YXMgYWRkZWQuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfbWNhc3RfYWRkKHN0cnVjdCBpcGF0aF9tY2FzdCAqbWNhc3QsCisJCQkgICBzdHJ1Y3QgaXBhdGhfbWNhc3RfcXAgKm1xcCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm4gPSAmbWNhc3RfdHJlZS5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwbiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKworCXdoaWxlICgqbikgeworCQlzdHJ1Y3QgaXBhdGhfbWNhc3QgKnRtY2FzdDsKKwkJc3RydWN0IGlwYXRoX21jYXN0X3FwICpwOworCisJCXBuID0gKm47CisJCXRtY2FzdCA9IHJiX2VudHJ5KHBuLCBzdHJ1Y3QgaXBhdGhfbWNhc3QsIHJiX25vZGUpOworCisJCXJldCA9IG1lbWNtcChtY2FzdC0+bWdpZC5yYXcsIHRtY2FzdC0+bWdpZC5yYXcsCisJCQkgICAgIHNpemVvZih1bmlvbiBpYl9naWQpKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW4gPSAmcG4tPnJiX2xlZnQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocmV0ID4gMCkgeworCQkJbiA9ICZwbi0+cmJfcmlnaHQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNlYXJjaCB0aGUgUVAgbGlzdCB0byBzZWUgaWYgdGhpcyBpcyBhbHJlYWR5IHRoZXJlLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmdG1jYXN0LT5xcF9saXN0LCBsaXN0KSB7CisJCQlpZiAocC0+cXAgPT0gbXFwLT5xcCkgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKwkJCQlyZXQgPSBFU1JDSDsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0KKwkJbGlzdF9hZGRfdGFpbF9yY3UoJm1xcC0+bGlzdCwgJnRtY2FzdC0+cXBfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKwkJcmV0ID0gRUVYSVNUOworCQlnb3RvIGJhaWw7CisJfQorCisJbGlzdF9hZGRfdGFpbF9yY3UoJm1xcC0+bGlzdCwgJm1jYXN0LT5xcF9saXN0KTsKKworCWF0b21pY19pbmMoJm1jYXN0LT5yZWZjb3VudCk7CisJcmJfbGlua19ub2RlKCZtY2FzdC0+cmJfbm9kZSwgcG4sIG4pOworCXJiX2luc2VydF9jb2xvcigmbWNhc3QtPnJiX25vZGUsICZtY2FzdF90cmVlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworaW50IGlwYXRoX211bHRpY2FzdF9hdHRhY2goc3RydWN0IGliX3FwICppYnFwLCB1bmlvbiBpYl9naWQgKmdpZCwgdTE2IGxpZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gdG9faXFwKGlicXApOworCXN0cnVjdCBpcGF0aF9tY2FzdCAqbWNhc3Q7CisJc3RydWN0IGlwYXRoX21jYXN0X3FwICptcXA7CisJaW50IHJldDsKKworCS8qCisJICogQWxsb2NhdGUgZGF0YSBzdHJ1Y3R1cmVzIHNpbmNlIGl0cyBiZXR0ZXIgdG8gZG8gdGhpcyBvdXRzaWRlIG9mCisJICogc3BpbiBsb2NrcyBhbmQgaXQgd2lsbCBtb3N0IGxpa2VseSBiZSBuZWVkZWQuCisJICovCisJbWNhc3QgPSBpcGF0aF9tY2FzdF9hbGxvYyhnaWQpOworCWlmIChtY2FzdCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisJbXFwID0gaXBhdGhfbWNhc3RfcXBfYWxsb2MocXApOworCWlmIChtcXAgPT0gTlVMTCkgeworCQlpcGF0aF9tY2FzdF9mcmVlKG1jYXN0KTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsOworCX0KKwlzd2l0Y2ggKGlwYXRoX21jYXN0X2FkZChtY2FzdCwgbXFwKSkgeworCWNhc2UgRVNSQ0g6CisJCS8qIE5laXRoZXIgd2FzIHVzZWQ6IGNhbid0IGF0dGFjaCB0aGUgc2FtZSBRUCB0d2ljZS4gKi8KKwkJaXBhdGhfbWNhc3RfcXBfZnJlZShtcXApOworCQlpcGF0aF9tY2FzdF9mcmVlKG1jYXN0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCWNhc2UgRUVYSVNUOgkJLyogVGhlIG1jYXN0IHdhc24ndCB1c2VkICovCisJCWlwYXRoX21jYXN0X2ZyZWUobWNhc3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aF9tdWx0aWNhc3RfZGV0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpCit7CisJc3RydWN0IGlwYXRoX3FwICpxcCA9IHRvX2lxcChpYnFwKTsKKwlzdHJ1Y3QgaXBhdGhfbWNhc3QgKm1jYXN0ID0gTlVMTDsKKwlzdHJ1Y3QgaXBhdGhfbWNhc3RfcXAgKnAsICp0bXA7CisJc3RydWN0IHJiX25vZGUgKm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbGFzdCA9IDA7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisKKwkvKiBGaW5kIHRoZSBHSUQgaW4gdGhlIG1jYXN0IHRhYmxlLiAqLworCW4gPSBtY2FzdF90cmVlLnJiX25vZGU7CisJd2hpbGUgKDEpIHsKKwkJaWYgKG4gPT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhc3RfbG9jaywgZmxhZ3MpOworCQkJcmV0ID0gMDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCW1jYXN0ID0gcmJfZW50cnkobiwgc3RydWN0IGlwYXRoX21jYXN0LCByYl9ub2RlKTsKKwkJcmV0ID0gbWVtY21wKGdpZC0+cmF3LCBtY2FzdC0+bWdpZC5yYXcsCisJCQkgICAgIHNpemVvZih1bmlvbiBpYl9naWQpKTsKKwkJaWYgKHJldCA8IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAocmV0ID4gMCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJLyogU2VhcmNoIHRoZSBRUCBsaXN0LiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZtY2FzdC0+cXBfbGlzdCwgbGlzdCkgeworCQlpZiAocC0+cXAgIT0gcXApCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogV2UgZm91bmQgaXQsIHNvIHJlbW92ZSBpdCwgYnV0IGRvbid0IHBvaXNvbiB0aGUgZm9yd2FyZAorCQkgKiBsaW5rIHVudGlsIHdlIGFyZSBzdXJlIHRoZXJlIGFyZSBubyBsaXN0IHdhbGtlcnMuCisJCSAqLworCQlsaXN0X2RlbF9yY3UoJnAtPmxpc3QpOworCisJCS8qIElmIHRoaXMgd2FzIHRoZSBsYXN0IGF0dGFjaGVkIFFQLCByZW1vdmUgdGhlIEdJRCB0b28uICovCisJCWlmIChsaXN0X2VtcHR5KCZtY2FzdC0+cXBfbGlzdCkpIHsKKwkJCXJiX2VyYXNlKCZtY2FzdC0+cmJfbm9kZSwgJm1jYXN0X3RyZWUpOworCQkJbGFzdCA9IDE7CisJCX0KKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhc3RfbG9jaywgZmxhZ3MpOworCisJaWYgKHApIHsKKwkJLyoKKwkJICogV2FpdCBmb3IgYW55IGxpc3Qgd2Fsa2VycyB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcgdGhlCisJCSAqIGxpc3QgZWxlbWVudC4KKwkJICovCisJCXdhaXRfZXZlbnQobWNhc3QtPndhaXQsIGF0b21pY19yZWFkKCZtY2FzdC0+cmVmY291bnQpIDw9IDEpOworCQlpcGF0aF9tY2FzdF9xcF9mcmVlKHApOworCX0KKwlpZiAobGFzdCkgeworCQlhdG9taWNfZGVjKCZtY2FzdC0+cmVmY291bnQpOworCQl3YWl0X2V2ZW50KG1jYXN0LT53YWl0LCAhYXRvbWljX3JlYWQoJm1jYXN0LT5yZWZjb3VudCkpOworCQlpcGF0aF9tY2FzdF9mcmVlKG1jYXN0KTsKKwl9CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aF9tY2FzdF90cmVlX2VtcHR5KHZvaWQpCit7CisJcmV0dXJuIG1jYXN0X3RyZWUucmJfbm9kZSA9PSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3djX3g4Nl82NC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3djX3g4Nl82NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzUzMjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfd2NfeDg2XzY0LmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGlzIGNvbmRpdGlvbmFsbHkgYnVpbHQgb24geDg2XzY0IG9ubHkuICBPdGhlcndpc2Ugd2VhayBzeW1ib2wKKyAqIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSBoZXJlIGFyZSB1c2VkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorCisvKioKKyAqIGlwYXRoX2VuYWJsZV93YyAtIGVuYWJsZSB3cml0ZSBjb21iaW5pbmcgZm9yIE1NSU8gd3JpdGVzIHRvIHRoZSBkZXZpY2UKKyAqIEBkZDogaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgeDg2XzY0LXNwZWNpZmljOyBpdCB0d2lkZGxlcyB0aGUgQ1BVJ3MgTVRSUnMgdG8gZW5hYmxlCisgKiB3cml0ZSBjb21iaW5pbmcuCisgKi8KK2ludCBpcGF0aF9lbmFibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQgPSAwOworCXU2NCBwaW9hZGRyLCBwaW9sZW47CisJdW5zaWduZWQgYml0czsKKwljb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGQtPnBjaWRldiwgMCk7CisJY29uc3Qgc2l6ZV90IGxlbiA9IHBjaV9yZXNvdXJjZV9sZW4oZGQtPnBjaWRldiwgMCk7CisKKwkvKgorCSAqIFNldCB0aGUgUElPIGJ1ZmZlcnMgdG8gYmUgV0NDT01CLCBzbyB3ZSBnZXQgSFQgYnVyc3RzIHRvIHRoZQorCSAqIGNoaXAuICBMaW51eCAocG9zc2libHkgdGhlIGhhcmR3YXJlKSByZXF1aXJlcyBpdCB0byBiZSBvbiBhIHBvd2VyCisJICogb2YgMiBhZGRyZXNzIG1hdGNoaW5nIHRoZSBsZW5ndGggKHdoaWNoIGhhcyB0byBiZSBhIHBvd2VyIG9mIDIpLgorCSAqIEZvciByZXYxLCB0aGF0IG1lYW5zIHRoZSBiYXNlIGFkZHJlc3MsIGZvciByZXYyLCBpdCB3aWxsIGJlIGp1c3QKKwkgKiB0aGUgUElPIGJ1ZmZlcnMgdGhlbXNlbHZlcy4KKwkgKi8KKwlwaW9hZGRyID0gYWRkciArIGRkLT5pcGF0aF9waW9idWZiYXNlOworCXBpb2xlbiA9IChkZC0+aXBhdGhfcGlvYmNudDJrICsKKwkJICBkZC0+aXBhdGhfcGlvYmNudDRrKSAqCisJCUFMSUdOKGRkLT5pcGF0aF9waW9iY250MmsgKworCQkgICAgICBkZC0+aXBhdGhfcGlvYmNudDRrLCBkZC0+aXBhdGhfcGFsaWduKTsKKworCWZvciAoYml0cyA9IDA7ICEocGlvbGVuICYgKDFVTEwgPDwgYml0cykpOyBiaXRzKyspCisJCS8qIGRvIG5vdGhpbmcgKi8gOworCisJaWYgKHBpb2xlbiAhPSAoMVVMTCA8PCBiaXRzKSkgeworCQlwaW9sZW4gPj49IGJpdHM7CisJCXdoaWxlIChwaW9sZW4gPj49IDEpCisJCQliaXRzKys7CisJCXBpb2xlbiA9IDFVTEwgPDwgKGJpdHMgKyAxKTsKKwl9CisJaWYgKHBpb2FkZHIgJiAocGlvbGVuIC0gMSkpIHsKKwkJdTY0IGF0bXA7CisJCWlwYXRoX2RiZygicGlvYWRkciAlbGx4IG5vdCBvbiByaWdodCBib3VuZGFyeSBmb3Igc2l6ZSAiCisJCQkgICIlbGx4LCBmaXhpbmdcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBpb2FkZHIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBpb2xlbik7CisJCWF0bXAgPSBwaW9hZGRyICYgfihwaW9sZW4gLSAxKTsKKwkJaWYgKGF0bXAgPCBhZGRyIHx8IChhdG1wICsgcGlvbGVuKSA+IChhZGRyICsgbGVuKSkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIk5vIHdheSB0byBhbGlnbiBhZGRyZXNzL3NpemUgIgorCQkJCSAgICAgICIoJWxseC8lbGx4KSwgbm8gV0MgbXRyclxuIiwKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBhdG1wLAorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBpb2xlbiA8PCAxKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlpcGF0aF9kYmcoImNoYW5naW5nIFdDIGJhc2UgZnJvbSAlbGx4IHRvICVsbHgsICIKKwkJCQkgICJsZW4gZnJvbSAlbGx4IHRvICVsbHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBwaW9hZGRyLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYXRtcCwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBpb2xlbiwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBpb2xlbiA8PCAxKTsKKwkJCXBpb2FkZHIgPSBhdG1wOworCQkJcGlvbGVuIDw8PSAxOworCQl9CisJfQorCisJaWYgKCFyZXQpIHsKKwkJaW50IGNvb2tpZTsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiU2V0dGluZyBtdHJyIGZvciBjaGlwIHRvIFdDICIKKwkJCSAgICIoYWRkciAlbGx4LCBsZW49MHglbGx4KVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBpb2FkZHIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwaW9sZW4pOworCQljb29raWUgPSBtdHJyX2FkZChwaW9hZGRyLCBwaW9sZW4sIE1UUlJfVFlQRV9XUkNPTUIsIDApOworCQlpZiAoY29va2llIDwgMCkgeworCQkJeworCQkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJCSAibXRycl9hZGQoKSAgV0MgZm9yIFBJTyBidWZzICIKKwkJCQkJICJmYWlsZWQgKCVkKVxuIiwKKwkJCQkJIGNvb2tpZSk7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlNldCBtdHJyIGZvciBjaGlwIHRvIFdDLCAiCisJCQkJICAgImNvb2tpZSBpcyAlZFxuIiwgY29va2llKTsKKwkJCWRkLT5pcGF0aF93Y19jb29raWUgPSBjb29raWU7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2Rpc2FibGVfd2MgLSBkaXNhYmxlIHdyaXRlIGNvbWJpbmluZyBmb3IgTU1JTyB3cml0ZXMgdG8gdGhlIGRldmljZQorICogQGRkOiBpbmZpbmlwYXRoIGRldmljZQorICovCit2b2lkIGlwYXRoX2Rpc2FibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWlmIChkZC0+aXBhdGhfd2NfY29va2llKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInVuZG9pbmcgV0NDT01CIG9uIHBpbyBidWZmZXJzXG4iKTsKKwkJbXRycl9kZWwoZGQtPmlwYXRoX3djX2Nvb2tpZSwgMCwgMCk7CisJCWRkLT5pcGF0aF93Y19jb29raWUgPSAwOworCX0KK30KKworLyoqCisgKiBpcGF0aF91bm9yZGVyZWRfd2MgLSBpbmRpY2F0ZSB3aGV0aGVyIHdyaXRlIGNvbWJpbmluZyBpcyBvcmRlcmVkCisgKgorICogQmVjYXVzZSBvdXIgcGVyZm9ybWFuY2UgZGVwZW5kcyBvbiBvdXIgYWJpbGl0eSB0byBkbyB3cml0ZSBjb21iaW5pbmcgbW1pbworICogd3JpdGVzIGluIHRoZSBtb3N0IGVmZmljaWVudCB3YXksIHdlIG5lZWQgdG8ga25vdyBpZiB3ZSBhcmUgb24gYW4gSW50ZWwKKyAqIG9yIEFNRCB4ODZfNjQgcHJvY2Vzc29yLiAgQU1EIHg4Nl82NCBwcm9jZXNzb3JzIGZsdXNoIFdDIGJ1ZmZlcnMgb3V0IGluCisgKiB0aGUgb3JkZXIgY29tcGxldGVkLCBhbmQgc28gbm8gc3BlY2lhbCBmbHVzaGluZyBpcyByZXF1aXJlZCB0byBnZXQKKyAqIGNvcnJlY3Qgb3JkZXJpbmcuICBJbnRlbCBwcm9jZXNzb3JzLCBob3dldmVyLCB3aWxsIGZsdXNoIHdyaXRlIGJ1ZmZlcnMKKyAqIG91dCBpbiAicmFuZG9tIiBvcmRlcnMsIGFuZCBzbyBleHBsaWNpdCBvcmRlcmluZyBpcyBuZWVkZWQgYXQgdGltZXMuCisgKi8KK2ludCBpcGF0aF91bm9yZGVyZWRfd2Modm9pZCkKK3sKKwlyZXR1cm4gYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwc19jb21tb24uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcHNfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3Y2JiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcHNfY29tbW9uLmgKQEAgLTAsMCArMSwyNjMgQEAKKyNpZm5kZWYgSVBTX0NPTU1PTl9ICisjZGVmaW5lIElQU19DT01NT05fSAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKKworc3RydWN0IGlwYXRoX2hlYWRlciB7CisJLyoKKwkgKiBWZXJzaW9uIC0gNCBiaXRzLCBQb3J0IC0gNCBiaXRzLCBUSUQgLSAxMCBiaXRzIGFuZCBPZmZzZXQgLQorCSAqIDE0IGJpdHMgYmVmb3JlIEVDTyBjaGFuZ2UgfjI4IERlYyAwMy4gIEFmdGVyIHRoYXQsIFZlcnMgNCwKKwkgKiBQb3J0IDMsIFRJRCAxMSwgb2Zmc2V0IDE0LgorCSAqLworCV9fbGUzMiB2ZXJfcG9ydF90aWRfb2Zmc2V0OworCV9fbGUxNiBjaGtzdW07CisJX19sZTE2IHBrdF9mbGFnczsKK307CisKK3N0cnVjdCBpcHNfbWVzc2FnZV9oZWFkZXIgeworCV9fYmUxNiBscmhbNF07CisJX19iZTMyIGJ0aFszXTsKKwkvKiBmaWVsZHMgYmVsb3cgdGhpcyBwb2ludCBhcmUgaW4gaG9zdCBieXRlIG9yZGVyICovCisJc3RydWN0IGlwYXRoX2hlYWRlciBpcGg7CisJX191OCBzdWJfb3Bjb2RlOworCV9fdTggZmxhZ3M7CisJX191MTYgc3JjX3Jhbms7CisJLyogMjQgYml0cy4gVGhlIHVwcGVyIDggYml0IGlzIGF2YWlsYWJsZSBmb3Igb3RoZXIgdXNlICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgYWNrX3NlcV9udW06MjQ7CisJCQl1bnNpZ25lZCBwb3J0OjQ7CisJCQl1bnNpZ25lZCB1bnVzZWQ6NDsKKwkJfTsKKwkJX191MzIgYWNrX3NlcV9udW1fb3JnOworCX07CisJX191OCBleHBlY3RlZF90aWRfc2Vzc2lvbl9pZDsKKwlfX3U4IHRpbnlsZW47CQkvKiB0byBhaWQgTVBJICovCisJdW5pb24geworCSAgICBfX3UxNiB0YWc7CQkvKiB0byBhaWQgTVBJICovCisJICAgIF9fdTE2IG1xaGRyOwkvKiBmb3IgUFNNIE1RICovCisJfTsKKwl1bmlvbiB7CisJCV9fdTMyIG1waVs0XTsJLyogdG8gYWlkIE1QSSAqLworCQlfX3UzMiBkYXRhWzRdOworCQlfX3U2NCBtcVsyXTsJLyogZm9yIFBTTSBNUSAqLworCQlzdHJ1Y3QgeworCQkJX191MTYgbXR1OworCQkJX191OCBtYWpvcl92ZXI7CisJCQlfX3U4IG1pbm9yX3ZlcjsKKwkJCV9fdTMyIG5vdF91c2VkOwkvL2ZyZWUKKwkJCV9fdTMyIHJ1bl9pZDsKKwkJCV9fdTMyIGNsaWVudF92ZXI7CisJCX07CisJfTsKK307CisKK3N0cnVjdCBldGhlcl9oZWFkZXIgeworCV9fYmUxNiBscmhbNF07CisJX19iZTMyIGJ0aFszXTsKKwlzdHJ1Y3QgaXBhdGhfaGVhZGVyIGlwaDsKKwlfX3U4IHN1Yl9vcGNvZGU7CisJX191OCBjbWQ7CisJX19iZTE2IGxpZDsKKwlfX3UxNiBtYWNbM107CisJX191OCBmcmFnX251bTsKKwlfX3U4IHNlcV9udW07CisJX19sZTMyIGxlbjsKKwkvKiBNVVNUIGJlIG9mIHdvcmQgc2l6ZSBkdWUgdG8gUElPIHdyaXRlIHJlcXVpcmVtZW50cyAqLworCV9fbGUzMiBjc3VtOworCV9fbGUxNiBjc3VtX29mZnNldDsKKwlfX2xlMTYgZmxhZ3M7CisJX191MTYgZmlyc3RfMl9ieXRlczsKKwlfX3U4IHVudXNlZFsyXTsJCS8qIGN1cnJlbnRseSB1bnVzZWQgKi8KK307CisKKy8qCisgKiBUaGUgUElPIGJ1ZmZlciB1c2VkIGZvciBzZW5kaW5nIGluZmluaXBhdGggbWVzc2FnZXMgbXVzdCBvbmx5IGJlIHdyaXR0ZW4KKyAqIGluIDMyLWJpdCB3b3JkcywgYWxsIHRoZSBkYXRhIG11c3QgYmUgd3JpdHRlbiwgYW5kIG5vIHdyaXRlcyBjYW4gb2NjdXIKKyAqIGFmdGVyIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbiAod2hpY2ggdHJhbnNmZXJzICJvd25lcnNoaXAiIG9mIHRoZSBidWZmZXIKKyAqIHRvIHRoZSBjaGlwIGFuZCB0cmlnZ2VycyB0aGUgbWVzc2FnZSB0byBiZSBzZW50KS4KKyAqIFNpbmNlIHRoZSBMaW51eCBza19idWZmIHN0cnVjdHVyZSBjYW4gYmUgcmVjdXJzaXZlLCBub24tYWxpZ25lZCwgYW5kCisgKiBhbnkgbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggc2VnbWVudCwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlCisgKiB0byBrZWVwIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvdmVyYWxsIHN0YXRlIG9mIHRoZSBjb3B5IG9wZXJhdGlvbi4KKyAqIFRoaXMgaXMgdXNlZCB0byBzYXZlIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gc3RvcmUgdGhlIGNoZWNrc3VtCisgKiBpbiB0aGUgcmlnaHQgcGxhY2UgYmVmb3JlIHNlbmRpbmcgdGhlIGxhc3Qgd29yZCB0byB0aGUgaGFyZHdhcmUgYW5kCisgKiB0byBidWZmZXIgdGhlIGxhc3QgMC0zIGJ5dGVzIG9mIG5vbi13b3JkIHNpemVkIHNlZ21lbnRzLgorICovCitzdHJ1Y3QgY29weV9kYXRhX3MgeworCXN0cnVjdCBldGhlcl9oZWFkZXIgKmhkcjsKKwkvKiBhZGRyIG9mIFBJTyBidWYgdG8gd3JpdGUgY3N1bSB0byAqLworCV9fdTMyIF9faW9tZW0gKmNzdW1fcGlvOworCV9fdTMyIF9faW9tZW0gKnRvOwkvKiBhZGRyIG9mIFBJTyBidWYgdG8gd3JpdGUgZGF0YSB0byAqLworCV9fdTMyIGRldmljZTsJCS8qIHdoaWNoIGRldmljZSB0byBhbGxvY2F0ZSBQSU8gYnVmcyBmcm9tICovCisJX19zMzIgZXJyb3I7CQkvKiBzZXQgaWYgdGhlcmUgaXMgYW4gZXJyb3IuICovCisJX19zMzIgZXh0cmE7CQkvKiBhbW91bnQgb2YgZGF0YSBzYXZlZCBpbiB1LmJ1ZiBiZWxvdyAqLworCV9fdTMyIGxlbjsJCS8qIHRvdGFsIGxlbmd0aCB0byBzZW5kIGluIGJ5dGVzICovCisJX191MzIgZmxlbjsJCS8qIGZyYW1lbnQgbGVuZ3RoIGluIHdvcmRzICovCisJX191MzIgY3N1bTsJCS8qIHBhcnRpYWwgSVAgY2hlY2tzdW0gKi8KKwlfX3UzMiBwb3M7CQkvKiBwb3NpdGlvbiBmb3IgcGFydGlhbCBjaGVja3N1bSAqLworCV9fdTMyIG9mZnNldDsJCS8qIG9mZnNldCB0byB3aGVyZSBkYXRhIGN1cnJlbnRseSBzdGFydHMgKi8KKwlfX3MzMiBjaGVja3N1bV9jYWxjOwkvKiBzZXQgdG8gMSB3aGVuIGNzdW0gaGFzIGJlZW4gY2FsY3VsYXRlZCAqLworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5pb24geworCQlfX3UzMiB3OworCQlfX3U4IGJ1Zls0XTsKKwl9IHU7Cit9OworCisvKiBJQiAtIExSSCBoZWFkZXIgY29uc3RzICovCisjZGVmaW5lIElQU19MUkhfR1JIIDB4MDAwMwkvKiAxLiB3b3JkIG9mIElCIExSSCAtIG5leHQgaGVhZGVyOiBHUkggKi8KKyNkZWZpbmUgSVBTX0xSSF9CVEggMHgwMDAyCS8qIDEuIHdvcmQgb2YgSUIgTFJIIC0gbmV4dCBoZWFkZXI6IEJUSCAqLworCisjZGVmaW5lIElQU19PRkZTRVQgIDAKKworLyoKKyAqIGRlZmluZXMgdGhlIGN1dC1vZmYgcG9pbnQgYmV0d2VlbiB0aGUgaGVhZGVyIHF1ZXVlIGFuZCBlYWdlci9leHBlY3RlZAorICogVElEIHF1ZXVlCisgKi8KKyNkZWZpbmUgTlVNX09GX0VYVFJBX1dPUkRTX0lOX0hFQURFUl9RVUVVRSBcCisJKChzaXplb2Yoc3RydWN0IGlwc19tZXNzYWdlX2hlYWRlcikgLSBcCisJICBvZmZzZXRvZihzdHJ1Y3QgaXBzX21lc3NhZ2VfaGVhZGVyLCBpcGgpKSA+PiAyKQorCisvKiBPcENvZGVzICAqLworI2RlZmluZSBPUENPREVfSVBTIDB4QzAKKyNkZWZpbmUgT1BDT0RFX0lUSDRYIDB4QzEKKworLyogT3BDb2RlIDMwIGlzIHVzZSBieSBzdGFuZC1hbG9uZSB0ZXN0IHByb2dyYW1zICAqLworI2RlZmluZSBPUENPREVfUkFXX0RBVEEgMHhERQorLyogbGFzdCBPcENvZGUgKDMxKSBpcyByZXNlcnZlZCBmb3IgdGVzdCAgKi8KKyNkZWZpbmUgT1BDT0RFX1RFU1QgMHhERgorCisvKiBzdWIgT3BDb2RlcyAtIGlwcyAgKi8KKyNkZWZpbmUgT1BDT0RFX1NFUV9EQVRBIDB4MDEKKyNkZWZpbmUgT1BDT0RFX1NFUV9DVFJMIDB4MDIKKworI2RlZmluZSBPUENPREVfU0VRX01RX0RBVEEgMHgwMworI2RlZmluZSBPUENPREVfU0VRX01RX0NUUkwgMHgwNAorCisjZGVmaW5lIE9QQ09ERV9BQ0sgMHgxMAorI2RlZmluZSBPUENPREVfTkFLIDB4MTEKKworI2RlZmluZSBPUENPREVfRVJSX0NISyAweDIwCisjZGVmaW5lIE9QQ09ERV9FUlJfQ0hLX1BMUyAweDIxCisKKyNkZWZpbmUgT1BDT0RFX1NUQVJUVVAgMHgzMAorI2RlZmluZSBPUENPREVfU1RBUlRVUF9BQ0sgMHgzMQorI2RlZmluZSBPUENPREVfU1RBUlRVUF9OQUsgMHgzMgorCisjZGVmaW5lIE9QQ09ERV9TVEFSVFVQX0VYVCAweDM0CisjZGVmaW5lIE9QQ09ERV9TVEFSVFVQX0FDS19FWFQgMHgzNQorI2RlZmluZSBPUENPREVfU1RBUlRVUF9OQUtfRVhUIDB4MzYKKworI2RlZmluZSBPUENPREVfVElEU19SRUxFQVNFIDB4NDAKKyNkZWZpbmUgT1BDT0RFX1RJRFNfUkVMRUFTRV9DT05GSVJNIDB4NDEKKworI2RlZmluZSBPUENPREVfQ0xPU0UgMHg1MAorI2RlZmluZSBPUENPREVfQ0xPU0VfQUNLIDB4NTEKKy8qCisgKiBsaWtlIE9QQ09ERV9DTE9TRSwgYnV0IG5vIGNvbXBsYWludCBpZiBvdGhlciBzaWRlIGhhcyBhbHJlYWR5IGNsb3NlZC4KKyAqIFVzZWQgd2hlbiBkb2luZyBhYm9ydCgpLCBNUElfQWJvcnQoKSwgZXRjLgorICovCisjZGVmaW5lIE9QQ09ERV9BQk9SVCAweDUyCisKKy8qIHN1YiBPcENvZGVzIC0gaXRoNHggICovCisjZGVmaW5lIE9QQ09ERV9FTkNBUCAweDgxCisjZGVmaW5lIE9QQ09ERV9MSURfQVJQIDB4ODIKKworLyogUmVjZWl2ZSBIZWFkZXIgUXVldWU6IHJlY2VpdmUgdHlwZSAoZnJvbSBpbmZpbmlwYXRoKSAqLworI2RlZmluZSBSQ1ZIUV9SQ1ZfVFlQRV9FWFBFQ1RFRCAgMAorI2RlZmluZSBSQ1ZIUV9SQ1ZfVFlQRV9FQUdFUiAgICAgMQorI2RlZmluZSBSQ1ZIUV9SQ1ZfVFlQRV9OT05fS0QgICAgMgorI2RlZmluZSBSQ1ZIUV9SQ1ZfVFlQRV9FUlJPUiAgICAgMworCisvKiBtaXNjLiAqLworI2RlZmluZSBTSVpFX09GX0NSQyAxCisKKyNkZWZpbmUgRUFHRVJfVElEX0lEIElORklOSVBBVEhfSV9USURfTUFTSworCisjZGVmaW5lIElQU19ERUZBVUxUX1BfS0VZIDB4RkZGRgorCisjZGVmaW5lIElQU19QRVJNSVNTSVZFX0xJRCAweEZGRkYKKyNkZWZpbmUgSVBTX01VTFRJQ0FTVF9MSURfQkFTRSAweEMwMDAKKworI2RlZmluZSBJUFNfQUVUSF9DUkVESVRfU0hJRlQgMjQKKyNkZWZpbmUgSVBTX0FFVEhfQ1JFRElUX01BU0sgMHgxRgorI2RlZmluZSBJUFNfQUVUSF9DUkVESVRfSU5WQUwgMHgxRgorCisjZGVmaW5lIElQU19QU05fTUFTSyAweEZGRkZGRgorI2RlZmluZSBJUFNfTVNOX01BU0sgMHhGRkZGRkYKKyNkZWZpbmUgSVBTX1FQTl9NQVNLIDB4RkZGRkZGCisjZGVmaW5lIElQU19NVUxUSUNBU1RfUVBOIDB4RkZGRkZGCisKKy8qIGZ1bmN0aW9ucyBmb3IgZXh0cmFjdGluZyBmaWVsZHMgZnJvbSByY3ZoZHJxIGVudHJpZXMgKi8KK3N0YXRpYyBpbmxpbmUgX191MzIgaXBzX2dldF9oZHJfZXJyX2ZsYWdzKGNvbnN0IF9fbGUzMiAqIHJidWYpCit7CisJcmV0dXJuIF9fbGUzMl90b19jcHUocmJ1ZlsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXBzX2dldF9pbmRleChjb25zdCBfX2xlMzIgKiByYnVmKQoreworCXJldHVybiAoX19sZTMyX3RvX2NwdShyYnVmWzBdKSA+PiBJTkZJTklQQVRIX1JIRl9FR1JJTkRFWF9TSElGVCkKKwkgICAgJiBJTkZJTklQQVRIX1JIRl9FR1JJTkRFWF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIF9fdTMyIGlwc19nZXRfcmN2X3R5cGUoY29uc3QgX19sZTMyICogcmJ1ZikKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUocmJ1ZlswXSkgPj4gSU5GSU5JUEFUSF9SSEZfUkNWVFlQRV9TSElGVCkKKwkgICAgJiBJTkZJTklQQVRIX1JIRl9SQ1ZUWVBFX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXBzX2dldF9sZW5ndGhfaW5fYnl0ZXMoY29uc3QgX19sZTMyICogcmJ1ZikKK3sKKwlyZXR1cm4gKChfX2xlMzJfdG9fY3B1KHJidWZbMF0pID4+IElORklOSVBBVEhfUkhGX0xFTkdUSF9TSElGVCkKKwkJJiBJTkZJTklQQVRIX1JIRl9MRU5HVEhfTUFTSykgPDwgMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkICppcHNfZ2V0X2ZpcnN0X3Byb3RvY29sX2hlYWRlcihjb25zdCBfX3UzMiAqIHJidWYpCit7CisJcmV0dXJuICh2b2lkICopJnJidWZbMl07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwc19tZXNzYWdlX2hlYWRlciAqaXBzX2dldF9pcHNfaGVhZGVyKGNvbnN0IF9fdTMyICoKKwkJCQkJCQkgICAgcmJ1ZikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcHNfbWVzc2FnZV9oZWFkZXIgKikmcmJ1ZlsyXTsKK30KKworc3RhdGljIGlubGluZSBfX3UzMiBpcHNfZ2V0X2lwYXRoX3ZlcihfX2xlMzIgaGRyd29yZCkKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoaGRyd29yZCkgPj4gSU5GSU5JUEFUSF9JX1ZFUlNfU0hJRlQpCisJICAgICYgSU5GSU5JUEFUSF9JX1ZFUlNfTUFTSzsKK30KKworI2VuZGlmCQkJCS8qIElQU19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL3ZlcmJzX2RlYnVnLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvdmVyYnNfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQ2OTNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL3ZlcmJzX2RlYnVnLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9WRVJCU19ERUJVR19ICisjZGVmaW5lIF9WRVJCU19ERUJVR19ICisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdHJhY2luZyBjb2RlIGZvciB0aGUgaWJfaXBhdGgga2VybmVsIG1vZHVsZS4KKyAqLworI2lmbmRlZiBfVkVSQlNfREVCVUdHSU5HCS8qIHRyYWNpbmcgZW5hYmxlZCBvciBub3QgKi8KKyNkZWZpbmUgX1ZFUkJTX0RFQlVHR0lORyAxCisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGliX2lwYXRoX2RlYnVnOworCisjZGVmaW5lIF9WRVJCU19FUlJPUihmbXQsLi4uKSBcCisJZG8geyBcCisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10LCAiaWJfaXBhdGgiLCAjI19fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUoMCkKKworI2RlZmluZSBfVkVSQlNfVU5JVF9FUlJPUih1bml0LGZtdCwuLi4pIFwKKwlkbyB7IFwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQsICJpYl9pcGF0aCIsICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSgwKQorCisjaWYgX1ZFUkJTX0RFQlVHR0lORworCisvKgorICogTWFzayB2YWx1ZXMgZm9yIGRlYnVnZ2luZy4gIFRoZSBzY2hlbWUgYWxsb3dzIHVzIHRvIGNvbXBpbGUgb3V0IGFueQorICogb2YgdGhlIGRlYnVnIHRyYWNpbmcgc3R1ZmYsIGFuZCBpZiBjb21waWxlZCBpbiwgdG8gZW5hYmxlIG9yCisgKiBkaXNhYmxlIGR5bmFtaWNhbGx5LgorICogVGhpcyBjYW4gYmUgc2V0IGF0IG1vZHByb2JlIHRpbWUgYWxzbzoKKyAqICAgICAgbW9kcHJvYmUgaWJfcGF0aCBpYl9pcGF0aF9kZWJ1Zz0zCisgKi8KKworI2RlZmluZSBfX1ZFUkJTX0lORk8gICAgICAgIDB4MQkvKiBnZW5lcmljIGxvdyB2ZXJib3NpdHkgc3R1ZmYgKi8KKyNkZWZpbmUgX19WRVJCU19EQkcgICAgICAgICAweDIJLyogZ2VuZXJpYyBkZWJ1ZyAqLworI2RlZmluZSBfX1ZFUkJTX1ZEQkcgICAgICAgIDB4NAkvKiB2ZXJib3NlIGRlYnVnICovCisjZGVmaW5lIF9fVkVSQlNfU01BREJHICAgICAgMHg4MDAwCS8qIHNtYSBwYWNrZXQgZGVidWcgKi8KKworI2RlZmluZSBfVkVSQlNfSU5GTyhmbXQsLi4uKSBcCisJZG8geyBcCisJCWlmICh1bmxpa2VseShpYl9pcGF0aF9kZWJ1ZyZfX1ZFUkJTX0lORk8pKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQsImliX2lwYXRoIiwgXAorCQkJICAgICAgICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIF9WRVJCU19EQkcoZm10LC4uLikgXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoaWJfaXBhdGhfZGVidWcmX19WRVJCU19EQkcpKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBfX2Z1bmNfXywgXAorCQkJICAgICAgICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIF9WRVJCU19WREJHKGZtdCwuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKHVubGlrZWx5KGliX2lwYXRoX2RlYnVnJl9fVkVSQlNfVkRCRykpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsIF9fZnVuY19fLCBcCisJCQkgICAgICAgIyNfX1ZBX0FSR1NfXyk7IFwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgX1ZFUkJTX1NNQURCRyhmbXQsLi4uKSBcCisJZG8geyBcCisJCWlmICh1bmxpa2VseShpYl9pcGF0aF9kZWJ1ZyZfX1ZFUkJTX1NNQURCRykpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsIF9fZnVuY19fLCBcCisJCQkgICAgICAgIyNfX1ZBX0FSR1NfXyk7IFwKKwl9IHdoaWxlKDApCisKKyNlbHNlIC8qICEgX1ZFUkJTX0RFQlVHR0lORyAqLworCisjZGVmaW5lIF9WRVJCU19JTkZPKGZtdCwuLi4pCisjZGVmaW5lIF9WRVJCU19EQkcoZm10LC4uLikKKyNkZWZpbmUgX1ZFUkJTX1ZEQkcoZm10LC4uLikKKyNkZWZpbmUgX1ZFUkJTX1NNQURCRyhmbXQsLi4uKQorCisjZW5kaWYgLyogX1ZFUkJTX0RFQlVHR0lORyAqLworCisjZW5kaWYgLyogX1ZFUkJTX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWcKaW5kZXggZTg4YmU4NS4uOWFhNWE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWcKQEAgLTcsMTAgKzcsMTEgQEAKIAkgICgiVGF2b3IiKSBhbmQgdGhlIE1UMjUyMDggUENJIEV4cHJlc3MgSENBICgiQXJiZWwiKS4KIAogY29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUcKLQlib29sICJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQiCisJYm9vbCAiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gSU5GSU5JQkFORF9NVEhDQQotCWRlZmF1bHQgbgorCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgbXRoY2EgZHJpdmVyIHByb2R1Y2UgYSBidW5jaCBvZiBkZWJ1ZwotCSAgbWVzc2FnZXMuICBTZWxlY3QgdGhpcyBpcyB5b3UgYXJlIGRldmVsb3BpbmcgdGhlIGRyaXZlciBvcgotCSAgdHJ5aW5nIHRvIGRpYWdub3NlIGEgcHJvYmxlbS4KKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBkZWJ1Z2dpbmcgY29kZSB0byBiZSBjb21waWxlZCBpbnRvIHRoZQorCSAgbXRoY2EgZHJpdmVyLiAgVGhlIG91dHB1dCBjYW4gYmUgdHVybmVkIG9uIHZpYSB0aGUKKwkgIGRlYnVnX2xldmVsIG1vZHVsZSBwYXJhbWV0ZXIgKHdoaWNoIGNhbiBhbHNvIGJlIHNldCBhZnRlcgorCSAgdGhlIGRyaXZlciBpcyBsb2FkZWQgdGhyb3VnaCBzeXNmcykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvTWFrZWZpbGUgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvTWFrZWZpbGUKaW5kZXggNDdlYzVhNy4uZTM4OGQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9NYWtlZmlsZQpAQCAtMSw3ICsxLDMgQEAKLWlmZGVmIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHCi1FWFRSQV9DRkxBR1MgKz0gLURERUJVRwotZW5kaWYKLQogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfTVRIQ0EpICs9IGliX210aGNhLm8KIAogaWJfbXRoY2EteSA6PQltdGhjYV9tYWluLm8gbXRoY2FfY21kLm8gbXRoY2FfcHJvZmlsZS5vIG10aGNhX3Jlc2V0Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2F2LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYwppbmRleCBiYzViZGNiLi5iMTJhYTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYwpAQCAtNDIsNiArNDIsMjAgQEAKIAogI2luY2x1ZGUgIm10aGNhX2Rldi5oIgogCitlbnVtIHsKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfRlVMTCAgID0gMCwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfMVggICAgID0gMSwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfNFggICAgID0gMiwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfMVhfRERSID0gMworfTsKKworZW51bSB7CisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfRlVMTCAgICA9IDAsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfUVVBUlRFUiA9IDEsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfRUlHSFRIICA9IDIsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfSEFMRiAgICA9IDMKK307CisKIHN0cnVjdCBtdGhjYV9hdiB7CiAJX19iZTMyIHBvcnRfcGQ7CiAJdTggICAgIHJlc2VydmVkMTsKQEAgLTU1LDYgKzY5LDkwIEBACiAJX19iZTMyIGRnaWRbNF07CiB9OwogCitzdGF0aWMgZW51bSBpYl9yYXRlIG1lbWZyZWVfcmF0ZV90b19pYih1OCBtdGhjYV9yYXRlLCB1OCBwb3J0X3JhdGUpCit7CisJc3dpdGNoIChtdGhjYV9yYXRlKSB7CisJY2FzZSBNVEhDQV9SQVRFX01FTUZSRUVfRUlHSFRIOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAzKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9RVUFSVEVSOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAyKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9IQUxGOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAxKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9GVUxMOgorCWRlZmF1bHQ6CisJCXJldHVybiBtdWx0X3RvX2liX3JhdGUocG9ydF9yYXRlKTsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGliX3JhdGUgdGF2b3JfcmF0ZV90b19pYih1OCBtdGhjYV9yYXRlLCB1OCBwb3J0X3JhdGUpCit7CisJc3dpdGNoIChtdGhjYV9yYXRlKSB7CisJY2FzZSBNVEhDQV9SQVRFX1RBVk9SXzFYOiAgICAgcmV0dXJuIElCX1JBVEVfMl81X0dCUFM7CisJY2FzZSBNVEhDQV9SQVRFX1RBVk9SXzFYX0REUjogcmV0dXJuIElCX1JBVEVfNV9HQlBTOworCWNhc2UgTVRIQ0FfUkFURV9UQVZPUl80WDogICAgIHJldHVybiBJQl9SQVRFXzEwX0dCUFM7CisJZGVmYXVsdDoJCSAgICAgIHJldHVybiBwb3J0X3JhdGU7CisJfQorfQorCitlbnVtIGliX3JhdGUgbXRoY2FfcmF0ZV90b19pYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHU4IG10aGNhX3JhdGUsIHU4IHBvcnQpCit7CisJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgeworCQkvKiBIYW5kbGUgb2xkIEFyYmVsIEZXICovCisJCWlmIChkZXYtPmxpbWl0cy5zdGF0X3JhdGVfc3VwcG9ydCA9PSAweDMgJiYgbXRoY2FfcmF0ZSkKKwkJCXJldHVybiBJQl9SQVRFXzJfNV9HQlBTOworCisJCXJldHVybiBtZW1mcmVlX3JhdGVfdG9faWIobXRoY2FfcmF0ZSwgZGV2LT5yYXRlW3BvcnQgLSAxXSk7CisJfSBlbHNlCisJCXJldHVybiB0YXZvcl9yYXRlX3RvX2liKG10aGNhX3JhdGUsIGRldi0+cmF0ZVtwb3J0IC0gMV0pOworfQorCitzdGF0aWMgdTggaWJfcmF0ZV90b19tZW1mcmVlKHU4IHJlcV9yYXRlLCB1OCBjdXJfcmF0ZSkKK3sKKwlpZiAoY3VyX3JhdGUgPD0gcmVxX3JhdGUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJbnRlci1wYWNrZXQgZGVsYXkgKElQRCkgdG8gZ2V0IGZyb20gcmF0ZSBYIGRvd24gdG8gYSByYXRlCisJICogbm8gbW9yZSB0aGFuIFkgaXMgKFggLSAxKSAvIFkuCisJICovCisJc3dpdGNoICgoY3VyX3JhdGUgLSAxKSAvIHJlcV9yYXRlKSB7CisJY2FzZSAwOgkgcmV0dXJuIE1USENBX1JBVEVfTUVNRlJFRV9GVUxMOworCWNhc2UgMToJIHJldHVybiBNVEhDQV9SQVRFX01FTUZSRUVfSEFMRjsKKwljYXNlIDI6CSAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDM6CSByZXR1cm4gTVRIQ0FfUkFURV9NRU1GUkVFX1FVQVJURVI7CisJZGVmYXVsdDogcmV0dXJuIE1USENBX1JBVEVfTUVNRlJFRV9FSUdIVEg7CisJfQorfQorCitzdGF0aWMgdTggaWJfcmF0ZV90b190YXZvcih1OCBzdGF0aWNfcmF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRpY19yYXRlKSB7CisJY2FzZSBJQl9SQVRFXzJfNV9HQlBTOiByZXR1cm4gTVRIQ0FfUkFURV9UQVZPUl8xWDsKKwljYXNlIElCX1JBVEVfNV9HQlBTOiAgIHJldHVybiBNVEhDQV9SQVRFX1RBVk9SXzFYX0REUjsKKwljYXNlIElCX1JBVEVfMTBfR0JQUzogIHJldHVybiBNVEhDQV9SQVRFX1RBVk9SXzRYOworCWRlZmF1bHQ6CSAgICAgICByZXR1cm4gTVRIQ0FfUkFURV9UQVZPUl9GVUxMOworCX0KK30KKwordTggbXRoY2FfZ2V0X3JhdGUoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgc3RhdGljX3JhdGUsIHU4IHBvcnQpCit7CisJdTggcmF0ZTsKKworCWlmICghc3RhdGljX3JhdGUgfHwgaWJfcmF0ZV90b19tdWx0KHN0YXRpY19yYXRlKSA+PSBkZXYtPnJhdGVbcG9ydCAtIDFdKQorCQlyZXR1cm4gMDsKKworCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCisJCXJhdGUgPSBpYl9yYXRlX3RvX21lbWZyZWUoaWJfcmF0ZV90b19tdWx0KHN0YXRpY19yYXRlKSwKKwkJCQkJICBkZXYtPnJhdGVbcG9ydCAtIDFdKTsKKwllbHNlCisJCXJhdGUgPSBpYl9yYXRlX3RvX3Rhdm9yKHN0YXRpY19yYXRlKTsKKworCWlmICghKGRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ICYgKDEgPDwgcmF0ZSkpKQorCQlyYXRlID0gMTsKKworCXJldHVybiByYXRlOworfQorCiBpbnQgbXRoY2FfY3JlYXRlX2FoKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKIAkJICAgIHN0cnVjdCBtdGhjYV9wZCAqcGQsCiAJCSAgICBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0ciwKQEAgLTEwNyw3ICsyMDUsNyBAQAogCWF2LT5nX3NsaWQgID0gYWhfYXR0ci0+c3JjX3BhdGhfYml0czsKIAlhdi0+ZGxpZCAgICA9IGNwdV90b19iZTE2KGFoX2F0dHItPmRsaWQpOwogCWF2LT5tc2dfc3IgID0gKDMgPDwgNCkgfCAvKiAySyBtZXNzYWdlICovCi0JCWFoX2F0dHItPnN0YXRpY19yYXRlOworCQltdGhjYV9nZXRfcmF0ZShkZXYsIGFoX2F0dHItPnN0YXRpY19yYXRlLCBhaF9hdHRyLT5wb3J0X251bSk7CiAJYXYtPnNsX3RjbGFzc19mbG93bGFiZWwgPSBjcHVfdG9fYmUzMihhaF9hdHRyLT5zbCA8PCAyOCk7CiAJaWYgKGFoX2F0dHItPmFoX2ZsYWdzICYgSUJfQUhfR1JIKSB7CiAJCWF2LT5nX3NsaWQgfD0gMHg4MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwppbmRleCAzNDNlY2E1Li43OThlMTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAl1OCAgICAgICAgICAgICAgICBzdGF0dXM7CiB9OwogCi1zdGF0aWMgaW50IGZ3X2NtZF9kb29yYmVsbCA9IDE7CitzdGF0aWMgaW50IGZ3X2NtZF9kb29yYmVsbCA9IDA7CiBtb2R1bGVfcGFyYW0oZndfY21kX2Rvb3JiZWxsLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhmd19jbWRfZG9vcmJlbGwsICJwb3N0IEZXIGNvbW1hbmRzIHRocm91Z2ggZG9vcmJlbGwgcGFnZSBpZiBub256ZXJvICIKIAkJICIoYW5kIHN1cHBvcnRlZCBieSBGVykiKTsKQEAgLTk2NSw2ICs5NjUsNyBAQAogCXUzMiAqb3V0Ym94OwogCXU4IGZpZWxkOwogCXUxNiBzaXplOworCXUxNiBzdGF0X3JhdGU7CiAJaW50IGVycjsKIAogI2RlZmluZSBRVUVSWV9ERVZfTElNX09VVF9TSVpFICAgICAgICAgICAgIDB4MTAwCkBAIC05OTUsNiArOTk2LDcgQEAKICNkZWZpbmUgUVVFUllfREVWX0xJTV9NVFVfV0lEVEhfT0ZGU0VUICAgICAgMHgzNgogI2RlZmluZSBRVUVSWV9ERVZfTElNX1ZMX1BPUlRfT0ZGU0VUICAgICAgICAweDM3CiAjZGVmaW5lIFFVRVJZX0RFVl9MSU1fTUFYX0dJRF9PRkZTRVQgICAgICAgIDB4M2IKKyNkZWZpbmUgUVVFUllfREVWX0xJTV9SQVRFX1NVUFBPUlRfT0ZGU0VUICAgMHgzYwogI2RlZmluZSBRVUVSWV9ERVZfTElNX01BWF9QS0VZX09GRlNFVCAgICAgICAweDNmCiAjZGVmaW5lIFFVRVJZX0RFVl9MSU1fRkxBR1NfT0ZGU0VUICAgICAgICAgIDB4NDQKICNkZWZpbmUgUVVFUllfREVWX0xJTV9SU1ZEX1VBUl9PRkZTRVQgICAgICAgMHg0OApAQCAtMTA4Niw2ICsxMDg4LDggQEAKIAlkZXZfbGltLT5udW1fcG9ydHMgPSBmaWVsZCAmIDB4ZjsKIAlNVEhDQV9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0xJTV9NQVhfR0lEX09GRlNFVCk7CiAJZGV2X2xpbS0+bWF4X2dpZHMgPSAxIDw8IChmaWVsZCAmIDB4Zik7CisJTVRIQ0FfR0VUKHN0YXRfcmF0ZSwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX1JBVEVfU1VQUE9SVF9PRkZTRVQpOworCWRldl9saW0tPnN0YXRfcmF0ZV9zdXBwb3J0ID0gc3RhdF9yYXRlOwogCU1USENBX0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX01BWF9QS0VZX09GRlNFVCk7CiAJZGV2X2xpbS0+bWF4X3BrZXlzID0gMSA8PCAoZmllbGQgJiAweGYpOwogCU1USENBX0dFVChkZXZfbGltLT5mbGFncywgb3V0Ym94LCBRVUVSWV9ERVZfTElNX0ZMQUdTX09GRlNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmgKaW5kZXggZTRlYzM1Yy4uMmY5NzZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuaApAQCAtMTQ2LDYgKzE0Niw3IEBACiAJaW50IG1heF92bDsKIAlpbnQgbnVtX3BvcnRzOwogCWludCBtYXhfZ2lkczsKKwl1MTYgc3RhdF9yYXRlX3N1cHBvcnQ7CiAJaW50IG1heF9wa2V5czsKIAl1MzIgZmxhZ3M7CiAJaW50IHJlc2VydmVkX3VhcnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCmluZGV4IDMxMmNmOTAuLjIwNTg1NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCkBAIC0yMzgsOSArMjM4LDkgQEAKIAlzcGluX2xvY2soJmRldi0+Y3FfdGFibGUubG9jayk7CiAKIAljcSA9IG10aGNhX2FycmF5X2dldCgmZGV2LT5jcV90YWJsZS5jcSwgY3FuICYgKGRldi0+bGltaXRzLm51bV9jcXMgLSAxKSk7Ci0KIAlpZiAoY3EpCi0JCWF0b21pY19pbmMoJmNxLT5yZWZjb3VudCk7CisJCSsrY3EtPnJlZmNvdW50OworCiAJc3Bpbl91bmxvY2soJmRldi0+Y3FfdGFibGUubG9jayk7CiAKIAlpZiAoIWNxKSB7CkBAIC0yNTQsOCArMjU0LDEwIEBACiAJaWYgKGNxLT5pYmNxLmV2ZW50X2hhbmRsZXIpCiAJCWNxLT5pYmNxLmV2ZW50X2hhbmRsZXIoJmV2ZW50LCBjcS0+aWJjcS5jcV9jb250ZXh0KTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjcS0+cmVmY291bnQpKQorCXNwaW5fbG9jaygmZGV2LT5jcV90YWJsZS5sb2NrKTsKKwlpZiAoIS0tY3EtPnJlZmNvdW50KQogCQl3YWtlX3VwKCZjcS0+d2FpdCk7CisJc3Bpbl91bmxvY2soJmRldi0+Y3FfdGFibGUubG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3JlY3ZfY3FlKHN0cnVjdCBtdGhjYV9jcWUgKmNxZSkKQEAgLTI2NywyMyArMjY5LDEzIEBACiAJCXJldHVybiAhKGNxZS0+aXNfc2VuZCAmIDB4ODApOwogfQogCi12b2lkIG10aGNhX2NxX2NsZWFuKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIGNxbiwgdTMyIHFwbiwKK3ZvaWQgbXRoY2FfY3FfY2xlYW4oc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfY3EgKmNxLCB1MzIgcXBuLAogCQkgICAgc3RydWN0IG10aGNhX3NycSAqc3JxKQogewotCXN0cnVjdCBtdGhjYV9jcSAqY3E7CiAJc3RydWN0IG10aGNhX2NxZSAqY3FlOwogCXUzMiBwcm9kX2luZGV4OwogCWludCBuZnJlZWQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKLQljcSA9IG10aGNhX2FycmF5X2dldCgmZGV2LT5jcV90YWJsZS5jcSwgY3FuICYgKGRldi0+bGltaXRzLm51bV9jcXMgLSAxKSk7Ci0JaWYgKGNxKQotCQlhdG9taWNfaW5jKCZjcS0+cmVmY291bnQpOwotCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKLQotCWlmICghY3EpCi0JCXJldHVybjsKLQogCXNwaW5fbG9ja19pcnEoJmNxLT5sb2NrKTsKIAogCS8qCkBAIC0zMDEsNyArMjkzLDcgQEAKIAogCWlmICgwKQogCQltdGhjYV9kYmcoZGV2LCAiQ2xlYW5pbmcgUVBOICUwNnggZnJvbSBDUU4gJTA2eDsgY2kgJWQsIHBpICVkXG4iLAotCQkJICBxcG4sIGNxbiwgY3EtPmNvbnNfaW5kZXgsIHByb2RfaW5kZXgpOworCQkJICBxcG4sIGNxLT5jcW4sIGNxLT5jb25zX2luZGV4LCBwcm9kX2luZGV4KTsKIAogCS8qCiAJICogTm93IHN3ZWVwIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBDUSwgcmVtb3ZpbmcgQ1EgZW50cmllcwpAQCAtMzI1LDggKzMxNyw2IEBACiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZjcS0+bG9jayk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNxLT5yZWZjb3VudCkpCi0JCXdha2VfdXAoJmNxLT53YWl0KTsKIH0KIAogdm9pZCBtdGhjYV9jcV9yZXNpemVfY29weV9jcWVzKHN0cnVjdCBtdGhjYV9jcSAqY3EpCkBAIC04MjEsNyArODExLDcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmY3EtPmxvY2spOwotCWF0b21pY19zZXQoJmNxLT5yZWZjb3VudCwgMSk7CisJY3EtPnJlZmNvdW50ID0gMTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjcS0+d2FpdCk7CiAKIAltZW1zZXQoY3FfY29udGV4dCwgMCwgc2l6ZW9mICpjcV9jb250ZXh0KTsKQEAgLTg5Niw2ICs4ODYsMTcgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW5saW5lIGludCBnZXRfY3FfcmVmY291bnQoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfY3EgKmNxKQoreworCWludCBjOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKKwljID0gY3EtPnJlZmNvdW50OworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKKworCXJldHVybiBjOworfQorCiB2b2lkIG10aGNhX2ZyZWVfY3Eoc3RydWN0IG10aGNhX2RldiAqZGV2LAogCQkgICBzdHJ1Y3QgbXRoY2FfY3EgKmNxKQogewpAQCAtOTI5LDYgKzkzMCw3IEBACiAJc3Bpbl9sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKIAltdGhjYV9hcnJheV9jbGVhcigmZGV2LT5jcV90YWJsZS5jcSwKIAkJCSAgY3EtPmNxbiAmIChkZXYtPmxpbWl0cy5udW1fY3FzIC0gMSkpOworCS0tY3EtPnJlZmNvdW50OwogCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKIAogCWlmIChkZXYtPm10aGNhX2ZsYWdzICYgTVRIQ0FfRkxBR19NU0lfWCkKQEAgLTkzNiw4ICs5MzgsNyBAQAogCWVsc2UKIAkJc3luY2hyb25pemVfaXJxKGRldi0+cGRldi0+aXJxKTsKIAotCWF0b21pY19kZWMoJmNxLT5yZWZjb3VudCk7Ci0Jd2FpdF9ldmVudChjcS0+d2FpdCwgIWF0b21pY19yZWFkKCZjcS0+cmVmY291bnQpKTsKKwl3YWl0X2V2ZW50KGNxLT53YWl0LCAhZ2V0X2NxX3JlZmNvdW50KGRldiwgY3EpKTsKIAogCWlmIChjcS0+aXNfa2VybmVsKSB7CiAJCW10aGNhX2ZyZWVfY3FfYnVmKGRldiwgJmNxLT5idWYsIGNxLT5pYmNxLmNxZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKaW5kZXggYWQ1MmVkYi4uZjgxNjBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaApAQCAtMTUxLDYgKzE1MSw3IEBACiAJaW50ICAgICAgcmVzZXJ2ZWRfcXBzOwogCWludCAgICAgIG51bV9zcnFzOwogCWludCAgICAgIG1heF9zcnFfd3FlczsKKwlpbnQgICAgICBtYXhfc3JxX3NnZTsKIAlpbnQgICAgICByZXNlcnZlZF9zcnFzOwogCWludCAgICAgIG51bV9lZWNzOwogCWludCAgICAgIHJlc2VydmVkX2VlY3M7CkBAIC0xNzIsNiArMTczLDcgQEAKIAlpbnQgICAgICByZXNlcnZlZF9wZHM7CiAJdTMyICAgICAgcGFnZV9zaXplX2NhcDsKIAl1MzIgICAgICBmbGFnczsKKwl1MTYgICAgICBzdGF0X3JhdGVfc3VwcG9ydDsKIAl1OCAgICAgICBwb3J0X3dpZHRoX2NhcDsKIH07CiAKQEAgLTM1MywxMCArMzU1LDI0IEBACiAJc3RydWN0IGliX21hZF9hZ2VudCAgKnNlbmRfYWdlbnRbTVRIQ0FfTUFYX1BPUlRTXVsyXTsKIAlzdHJ1Y3QgaWJfYWggICAgICAgICAqc21fYWhbTVRIQ0FfTUFYX1BPUlRTXTsKIAlzcGlubG9ja190ICAgICAgICAgICAgc21fbG9jazsKKwl1OCAgICAgICAgICAgICAgICAgICAgcmF0ZVtNVEhDQV9NQVhfUE9SVFNdOwogfTsKIAotI2RlZmluZSBtdGhjYV9kYmcobWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKLQlkZXZfZGJnKCZtZGV2LT5wZGV2LT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHCitleHRlcm4gaW50IG10aGNhX2RlYnVnX2xldmVsOworCisjZGVmaW5lIG10aGNhX2RiZyhtZGV2LCBmb3JtYXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChtdGhjYV9kZWJ1Z19sZXZlbCkJCQkJCVwKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJm1kZXYtPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2Vsc2UgLyogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgKi8KKworI2RlZmluZSBtdGhjYV9kYmcobWRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgKHZvaWQpIG1kZXY7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRyAqLworCiAjZGVmaW5lIG10aGNhX2VycihtZGV2LCBmb3JtYXQsIGFyZy4uLikgXAogCWRldl9lcnIoJm1kZXYtPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpCiAjZGVmaW5lIG10aGNhX2luZm8obWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKQEAgLTQ4MCw3ICs0OTYsNyBAQAogdm9pZCBtdGhjYV9jcV9jb21wbGV0aW9uKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIGNxbik7CiB2b2lkIG10aGNhX2NxX2V2ZW50KHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIGNxbiwKIAkJICAgIGVudW0gaWJfZXZlbnRfdHlwZSBldmVudF90eXBlKTsKLXZvaWQgbXRoY2FfY3FfY2xlYW4oc3RydWN0IG10aGNhX2RldiAqZGV2LCB1MzIgY3FuLCB1MzIgcXBuLAordm9pZCBtdGhjYV9jcV9jbGVhbihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcSAqY3EsIHUzMiBxcG4sCiAJCSAgICBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpOwogdm9pZCBtdGhjYV9jcV9yZXNpemVfY29weV9jcWVzKHN0cnVjdCBtdGhjYV9jcSAqY3EpOwogaW50IG10aGNhX2FsbG9jX2NxX2J1ZihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcV9idWYgKmJ1ZiwgaW50IG5lbnQpOwpAQCAtNDkyLDYgKzUwOCw3IEBACiBpbnQgbXRoY2FfbW9kaWZ5X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3NycV9hdHRyICphdHRyLAogCQkgICAgIGVudW0gaWJfc3JxX2F0dHJfbWFzayBhdHRyX21hc2spOwogaW50IG10aGNhX3F1ZXJ5X3NycShzdHJ1Y3QgaWJfc3JxICpzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqc3JxX2F0dHIpOworaW50IG10aGNhX21heF9zcnFfc2dlKHN0cnVjdCBtdGhjYV9kZXYgKmRldik7CiB2b2lkIG10aGNhX3NycV9ldmVudChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHUzMiBzcnFuLAogCQkgICAgIGVudW0gaWJfZXZlbnRfdHlwZSBldmVudF90eXBlKTsKIHZvaWQgbXRoY2FfZnJlZV9zcnFfd3FlKHN0cnVjdCBtdGhjYV9zcnEgKnNycSwgdTMyIHdxZV9hZGRyKTsKQEAgLTU0Miw2ICs1NTksOCBAQAogCQkgIHN0cnVjdCBpYl91ZF9oZWFkZXIgKmhlYWRlcik7CiBpbnQgbXRoY2FfYWhfcXVlcnkoc3RydWN0IGliX2FoICppYmFoLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYXR0cik7CiBpbnQgbXRoY2FfYWhfZ3JoX3ByZXNlbnQoc3RydWN0IG10aGNhX2FoICphaCk7Cit1OCBtdGhjYV9nZXRfcmF0ZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIGludCBzdGF0aWNfcmF0ZSwgdTggcG9ydCk7CitlbnVtIGliX3JhdGUgbXRoY2FfcmF0ZV90b19pYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHU4IG10aGNhX3JhdGUsIHU4IHBvcnQpOwogCiBpbnQgbXRoY2FfbXVsdGljYXN0X2F0dGFjaChzdHJ1Y3QgaWJfcXAgKmlicXAsIHVuaW9uIGliX2dpZCAqZ2lkLCB1MTYgbGlkKTsKIGludCBtdGhjYV9tdWx0aWNhc3RfZGV0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCmluZGV4IGRmYjQ4MmUuLjQ3MzA4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKQEAgLTQ5LDYgKzQ5LDMwIEBACiAJTVRIQ0FfVkVORE9SX0NMQVNTMiA9IDB4YQogfTsKIAorc3RhdGljIGludCBtdGhjYV91cGRhdGVfcmF0ZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHU4IHBvcnRfbnVtKQoreworCXN0cnVjdCBpYl9wb3J0X2F0dHIgKnRwcm9wcyA9IE5VTEw7CisJaW50ICAgICAgICAgICAgICAgICAgcmV0OworCisJdHByb3BzID0ga21hbGxvYyhzaXplb2YgKnRwcm9wcywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cHJvcHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gaWJfcXVlcnlfcG9ydCgmZGV2LT5pYl9kZXYsIHBvcnRfbnVtLCB0cHJvcHMpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWJfcXVlcnlfcG9ydCBmYWlsZWQgKCVkKSBmb3IgJXMgcG9ydCAlZFxuIiwKKwkJICAgICAgIHJldCwgZGV2LT5pYl9kZXYubmFtZSwgcG9ydF9udW0pOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXYtPnJhdGVbcG9ydF9udW0gLSAxXSA9IHRwcm9wcy0+YWN0aXZlX3NwZWVkICoKKwkJCQkgIGliX3dpZHRoX2VudW1fdG9faW50KHRwcm9wcy0+YWN0aXZlX3dpZHRoKTsKKworb3V0OgorCWtmcmVlKHRwcm9wcyk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgdXBkYXRlX3NtX2FoKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKIAkJCSB1OCBwb3J0X251bSwgdTE2IGxpZCwgdTggc2wpCiB7CkBAIC05MCw2ICsxMTQsNyBAQAogCSAgICAgbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkgJiYKIAkgICAgbWFkLT5tYWRfaGRyLm1ldGhvZCAgICAgPT0gSUJfTUdNVF9NRVRIT0RfU0VUKSB7CiAJCWlmIChtYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8pIHsKKwkJCW10aGNhX3VwZGF0ZV9yYXRlKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSk7CiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLAogCQkJCSAgICAgYmUxNl90b19jcHVwKChfX2JlMTYgKikgKG1hZC0+ZGF0YSArIDU4KSksCiAJCQkJICAgICAoKih1OCAqKSAobWFkLT5kYXRhICsgNzYpKSAmIDB4Zik7CkBAIC0yNDYsNiArMjcxLDcgQEAKIHsKIAlzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudDsKIAlpbnQgcCwgcTsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c21fbG9jayk7CiAKQEAgLTI1NSwxMSArMjgxLDIzIEBACiAJCQkJCQkgICAgICBxID8gSUJfUVBUX0dTSSA6IElCX1FQVF9TTUksCiAJCQkJCQkgICAgICBOVUxMLCAwLCBzZW5kX2hhbmRsZXIsCiAJCQkJCQkgICAgICBOVUxMLCBOVUxMKTsKLQkJCWlmIChJU19FUlIoYWdlbnQpKQorCQkJaWYgKElTX0VSUihhZ2VudCkpIHsKKwkJCQlyZXQgPSBQVFJfRVJSKGFnZW50KTsKIAkJCQlnb3RvIGVycjsKKwkJCX0KIAkJCWRldi0+c2VuZF9hZ2VudFtwXVtxXSA9IGFnZW50OwogCQl9CiAKKworCWZvciAocCA9IDE7IHAgPD0gZGV2LT5saW1pdHMubnVtX3BvcnRzOyArK3ApIHsKKwkJcmV0ID0gbXRoY2FfdXBkYXRlX3JhdGUoZGV2LCBwKTsKKwkJaWYgKHJldCkgeworCQkJbXRoY2FfZXJyKGRldiwgIkZhaWxlZCB0byBvYnRhaW4gcG9ydCAlZCByYXRlLiIKKwkJCQkgICIgYWJvcnRpbmcuXG4iLCBwKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKIGVycjoKQEAgLTI2OCw3ICszMDYsNyBAQAogCQkJaWYgKGRldi0+c2VuZF9hZ2VudFtwXVtxXSkKIAkJCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChkZXYtPnNlbmRfYWdlbnRbcF1bcV0pOwogCi0JcmV0dXJuIFBUUl9FUlIoYWdlbnQpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgX19kZXZleGl0IG10aGNhX2ZyZWVfYWdlbnRzKHN0cnVjdCBtdGhjYV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IDI2NmYzNDcuLjliOWZmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwpAQCAtNTIsNiArNTIsMTQgQEAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIAorI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHCisKK2ludCBtdGhjYV9kZWJ1Z19sZXZlbCA9IDA7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfbGV2ZWwsIG10aGNhX2RlYnVnX2xldmVsLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sZXZlbCwgIkVuYWJsZSBkZWJ1ZyB0cmFjaW5nIGlmID4gMCIpOworCisjZW5kaWYgLyogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgKi8KKwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAKIHN0YXRpYyBpbnQgbXNpX3ggPSAwOwpAQCAtNjksNiArNzcsMTAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCiAKK3N0YXRpYyBpbnQgdHVuZV9wY2kgPSAwOworbW9kdWxlX3BhcmFtKHR1bmVfcGNpLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh0dW5lX3BjaSwgImluY3JlYXNlIFBDSSBidXJzdCBmcm9tIHRoZSBkZWZhdWx0IHNldCBieSBCSU9TIGlmIG5vbnplcm8iKTsKKwogc3RhdGljIGNvbnN0IGNoYXIgbXRoY2FfdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogCURSVl9OQU1FICI6IE1lbGxhbm94IEluZmluaUJhbmQgSENBIGRyaXZlciB2IgogCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CkBAIC05MCw2ICsxMDIsOSBAQAogCWludCBjYXA7CiAJdTE2IHZhbDsKIAorCWlmICghdHVuZV9wY2kpCisJCXJldHVybiAwOworCiAJLyogRmlyc3QgdHJ5IHRvIG1heCBvdXQgUmVhZCBCeXRlIENvdW50ICovCiAJY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShtZGV2LT5wZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOwogCWlmIChjYXApIHsKQEAgLTE3Niw2ICsxOTEsNyBAQAogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF9zcnFzICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF9zcnFzOwogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF9lZWNzICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF9lZWNzOwogCW1kZXYtPmxpbWl0cy5tYXhfZGVzY19zeiAgICAgICAgPSBkZXZfbGltLT5tYXhfZGVzY19zejsKKwltZGV2LT5saW1pdHMubWF4X3NycV9zZ2UJPSBtdGhjYV9tYXhfc3JxX3NnZShtZGV2KTsKIAkvKgogCSAqIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGltaXQgYmVjYXVzZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEKIAkgKiBzcGFyZSBDUUUgc28gdGhlIEhDQSBIVyBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuCkBAIC0xOTEsNiArMjA3LDE4IEBACiAJbWRldi0+bGltaXRzLnBvcnRfd2lkdGhfY2FwICAgICA9IGRldl9saW0tPm1heF9wb3J0X3dpZHRoOwogCW1kZXYtPmxpbWl0cy5wYWdlX3NpemVfY2FwICAgICAgPSB+KHUzMikgKGRldl9saW0tPm1pbl9wYWdlX3N6IC0gMSk7CiAJbWRldi0+bGltaXRzLmZsYWdzICAgICAgICAgICAgICA9IGRldl9saW0tPmZsYWdzOworCS8qCisJICogRm9yIG9sZCBGVyB0aGF0IGRvZXNuJ3QgcmV0dXJuIHN0YXRpYyByYXRlIHN1cHBvcnQsIHVzZSBhCisJICogdmFsdWUgb2YgMHgzIChvbmx5IHN0YXRpYyByYXRlIHZhbHVlcyBvZiAwIG9yIDEgYXJlIGhhbmRsZWQpLAorCSAqIGV4Y2VwdCBvbiBTaW5haSwgd2hlcmUgZXZlbiBvbGQgRlcgY2FuIGhhbmRsZSBzdGF0aWMgcmF0ZQorCSAqIHZhbHVlcyBvZiAyIGFuZCAzLgorCSAqLworCWlmIChkZXZfbGltLT5zdGF0X3JhdGVfc3VwcG9ydCkKKwkJbWRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ID0gZGV2X2xpbS0+c3RhdF9yYXRlX3N1cHBvcnQ7CisJZWxzZSBpZiAobWRldi0+bXRoY2FfZmxhZ3MgJiBNVEhDQV9GTEFHX1NJTkFJX09QVCkKKwkJbWRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ID0gMHhmOworCWVsc2UKKwkJbWRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ID0gMHgzOwogCiAJLyogSUJfREVWSUNFX1JFU0laRV9NQVhfV1Igbm90IHN1cHBvcnRlZCBieSBkcml2ZXIuCiAJICAgTWF5IGJlIGRvYWJsZSBzaW5jZSBoYXJkd2FyZSBzdXBwb3J0cyBpdCBmb3IgU1JRLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbXIuYwppbmRleCAyNWUxYzFkLi5hNDg2ZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbXIuYwpAQCAtNzYxLDYgKzc2MSw3IEBACiAKIGludCBfX2RldmluaXQgbXRoY2FfaW5pdF9tcl90YWJsZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYpCiB7CisJdW5zaWduZWQgbG9uZyBhZGRyOwogCWludCBlcnIsIGk7CiAKIAllcnIgPSBtdGhjYV9hbGxvY19pbml0KCZkZXYtPm1yX3RhYmxlLm1wdF9hbGxvYywKQEAgLTc5Niw5ICs3OTcsMTIgQEAKIAkJCWdvdG8gZXJyX2Ztcl9tcHQ7CiAJCX0KIAorCQlhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgNCkgKworCQkJKChwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgNCkgLSAxKSAmCisJCQkgZGV2LT5tcl90YWJsZS5tcHRfYmFzZSk7CisKIAkJZGV2LT5tcl90YWJsZS50YXZvcl9mbXIubXB0X2Jhc2UgPQotCQkJaW9yZW1hcChkZXYtPm1yX3RhYmxlLm1wdF9iYXNlLAotCQkJCSgxIDw8IGkpICogc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbXB0X2VudHJ5KSk7CisJCQlpb3JlbWFwKGFkZHIsICgxIDw8IGkpICogc2l6ZW9mKHN0cnVjdCBtdGhjYV9tcHRfZW50cnkpKTsKIAogCQlpZiAoIWRldi0+bXJfdGFibGUudGF2b3JfZm1yLm1wdF9iYXNlKSB7CiAJCQltdGhjYV93YXJuKGRldiwgIk1QVCBpb3JlbWFwIGZvciBGTVIgZmFpbGVkLlxuIik7CkBAIC04MDYsOSArODEwLDEyIEBACiAJCQlnb3RvIGVycl9mbXJfbXB0OwogCQl9CiAKKwkJYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDQpICsKKwkJCSgocGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDQpIC0gMSkgJgorCQkJIGRldi0+bXJfdGFibGUubXR0X2Jhc2UpOworCiAJCWRldi0+bXJfdGFibGUudGF2b3JfZm1yLm10dF9iYXNlID0KLQkJCWlvcmVtYXAoZGV2LT5tcl90YWJsZS5tdHRfYmFzZSwKLQkJCQkoMSA8PCBpKSAqIE1USENBX01UVF9TRUdfU0laRSk7CisJCQlpb3JlbWFwKGFkZHIsICgxIDw8IGkpICogTVRIQ0FfTVRUX1NFR19TSVpFKTsKIAkJaWYgKCFkZXYtPm1yX3RhYmxlLnRhdm9yX2Ztci5tdHRfYmFzZSkgewogCQkJbXRoY2Ffd2FybihkZXYsICJNVFQgaW9yZW1hcCBmb3IgRk1SIGZhaWxlZC5cbiIpOwogCQkJZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKaW5kZXggMmMyNTBiYy4uYTJlYWU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXByb3BzLT5tYXhfcmVzX3JkX2F0b20gICAgID0gcHJvcHMtPm1heF9xcF9yZF9hdG9tICogcHJvcHMtPm1heF9xcDsKIAlwcm9wcy0+bWF4X3NycSAgICAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5udW1fc3JxcyAtIG1kZXYtPmxpbWl0cy5yZXNlcnZlZF9zcnFzOwogCXByb3BzLT5tYXhfc3JxX3dyICAgICAgICAgID0gbWRldi0+bGltaXRzLm1heF9zcnFfd3FlczsKLQlwcm9wcy0+bWF4X3NycV9zZ2UgICAgICAgICA9IG1kZXYtPmxpbWl0cy5tYXhfc2c7CisJcHJvcHMtPm1heF9zcnFfc2dlICAgICAgICAgPSBtZGV2LT5saW1pdHMubWF4X3NycV9zZ2U7CiAJcHJvcHMtPmxvY2FsX2NhX2Fja19kZWxheSAgPSBtZGV2LT5saW1pdHMubG9jYWxfY2FfYWNrX2RlbGF5OwogCXByb3BzLT5hdG9taWNfY2FwICAgICAgICAgID0gbWRldi0+bGltaXRzLmZsYWdzICYgREVWX0xJTV9GTEFHX0FUT01JQyA/CiAJCQkJCUlCX0FUT01JQ19IQ0EgOiBJQl9BVE9NSUNfTk9ORTsKQEAgLTMwNiw3ICszMDYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltZW1jcHkoZ2lkLT5yYXcgKyA4LCBvdXRfbWFkLT5kYXRhICsgKGluZGV4ICUgOCkgKiAxNiwgOCk7CisJbWVtY3B5KGdpZC0+cmF3ICsgOCwgb3V0X21hZC0+ZGF0YSArIChpbmRleCAlIDgpICogOCwgOCk7CiAKICBvdXQ6CiAJa2ZyZWUoaW5fbWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKaW5kZXggMmU3ZjUyMS4uMTc5YThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKQEAgLTEzOSwxMSArMTM5LDEyIEBACiAgKiBhIHFwIG1heSBiZSBsb2NrZWQsIHdpdGggdGhlIHNlbmQgY3EgbG9ja2VkIGZpcnN0LiAgTm8gb3RoZXIKICAqIG5lc3Rpbmcgc2hvdWxkIGJlIGRvbmUuCiAgKgotICogRWFjaCBzdHJ1Y3QgbXRoY2FfY3EvcXAgYWxzbyBoYXMgYW4gYXRvbWljX3QgcmVmIGNvdW50LiAgVGhlCi0gKiBwb2ludGVyIGZyb20gdGhlIGNxL3FwX3RhYmxlIHRvIHRoZSBzdHJ1Y3QgY291bnRzIGFzIG9uZSByZWZlcmVuY2UuCi0gKiBUaGlzIHJlZmVyZW5jZSBhbHNvIGlzIGdvb2QgZm9yIGFjY2VzcyB0aHJvdWdoIHRoZSBjb25zdW1lciBBUEksIHNvCi0gKiBtb2RpZnlpbmcgdGhlIENRL1FQIGV0YyBkb2Vzbid0IG5lZWQgdG8gdGFrZSBhbm90aGVyIHJlZmVyZW5jZS4KLSAqIEFjY2VzcyBiZWNhdXNlIG9mIGEgY29tcGxldGlvbiBiZWluZyBwb2xsZWQgZG9lcyBuZWVkIGEgcmVmZXJlbmNlLgorICogRWFjaCBzdHJ1Y3QgbXRoY2FfY3EvcXAgYWxzbyBoYXMgYW4gcmVmIGNvdW50LCBwcm90ZWN0ZWQgYnkgdGhlCisgKiBjb3JyZXNwb25kaW5nIHRhYmxlIGxvY2suICBUaGUgcG9pbnRlciBmcm9tIHRoZSBjcS9xcF90YWJsZSB0byB0aGUKKyAqIHN0cnVjdCBjb3VudHMgYXMgb25lIHJlZmVyZW5jZS4gIFRoaXMgcmVmZXJlbmNlIGFsc28gaXMgZ29vZCBmb3IKKyAqIGFjY2VzcyB0aHJvdWdoIHRoZSBjb25zdW1lciBBUEksIHNvIG1vZGlmeWluZyB0aGUgQ1EvUVAgZXRjIGRvZXNuJ3QKKyAqIG5lZWQgdG8gdGFrZSBhbm90aGVyIHJlZmVyZW5jZS4gIEFjY2VzcyB0byBhIFFQIGJlY2F1c2Ugb2YgYQorICogY29tcGxldGlvbiBiZWluZyBwb2xsZWQgZG9lcyBub3QgbmVlZCBhIHJlZmVyZW5jZSBlaXRoZXIuCiAgKgogICogRmluYWxseSwgZWFjaCBzdHJ1Y3QgbXRoY2FfY3EvcXAgaGFzIGEgd2FpdF9xdWV1ZV9oZWFkX3QgZm9yIHRoZQogICogZGVzdHJveSBmdW5jdGlvbiB0byBzbGVlcCBvbi4KQEAgLTE1OSw4ICsxNjAsOSBAQAogICogLSBkZWNyZW1lbnQgcmVmIGNvdW50OyBpZiB6ZXJvLCB3YWtlIHVwIHdhaXRlcnMKICAqCiAgKiBUbyBkZXN0cm95IGEgQ1EvUVAsIHdlIGNhbiBkbyB0aGUgZm9sbG93aW5nOgotICogLSBsb2NrIGNxL3FwX3RhYmxlLCByZW1vdmUgcG9pbnRlciwgdW5sb2NrIGNxL3FwX3RhYmxlIGxvY2sKLSAqIC0gZGVjcmVtZW50IHJlZiBjb3VudAorICogLSBsb2NrIGNxL3FwX3RhYmxlCisgKiAtIHJlbW92ZSBwb2ludGVyIGFuZCBkZWNyZW1lbnQgcmVmIGNvdW50CisgKiAtIHVubG9jayBjcS9xcF90YWJsZSBsb2NrCiAgKiAtIHdhaXRfZXZlbnQgdW50aWwgcmVmIGNvdW50IGlzIHplcm8KICAqCiAgKiBJdCBpcyB0aGUgY29uc3VtZXIncyByZXNwb25zaWJpbHR5IHRvIG1ha2Ugc3VyZSB0aGF0IG5vIFFQCkBAIC0xOTcsNyArMTk5LDcgQEAKIHN0cnVjdCBtdGhjYV9jcSB7CiAJc3RydWN0IGliX2NxCQlpYmNxOwogCXNwaW5sb2NrX3QJCWxvY2s7Ci0JYXRvbWljX3QJCXJlZmNvdW50OworCWludAkJCXJlZmNvdW50OwogCWludAkJCWNxbjsKIAl1MzIJCQljb25zX2luZGV4OwogCXN0cnVjdCBtdGhjYV9jcV9idWYJYnVmOwpAQCAtMjE3LDcgKzIxOSw3IEBACiBzdHJ1Y3QgbXRoY2Ffc3JxIHsKIAlzdHJ1Y3QgaWJfc3JxCQlpYnNycTsKIAlzcGlubG9ja190CQlsb2NrOwotCWF0b21pY190CQlyZWZjb3VudDsKKwlpbnQJCQlyZWZjb3VudDsKIAlpbnQJCQlzcnFuOwogCWludAkJCW1heDsKIAlpbnQJCQltYXhfZ3M7CkBAIC0yNTQsOSArMjU2LDExIEBACiAKIHN0cnVjdCBtdGhjYV9xcCB7CiAJc3RydWN0IGliX3FwICAgICAgICAgICBpYnFwOwotCWF0b21pY190ICAgICAgICAgICAgICAgcmVmY291bnQ7CisJaW50ICAgICAgICAgICAgICAgICAgICByZWZjb3VudDsKIAl1MzIgICAgICAgICAgICAgICAgICAgIHFwbjsKIAlpbnQgICAgICAgICAgICAgICAgICAgIGlzX2RpcmVjdDsKKwl1OCAgICAgICAgICAgICAgICAgICAgIHBvcnQ7IC8qIGZvciBTUVAgYW5kIG1lbWZyZWUgdXNlIG9ubHkgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgIGFsdF9wb3J0OyAvKiBmb3IgbWVtZnJlZSB1c2Ugb25seSAqLwogCXU4ICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0OwogCXU4ICAgICAgICAgICAgICAgICAgICAgc3RhdGU7CiAJdTggICAgICAgICAgICAgICAgICAgICBhdG9taWNfcmRfZW47CkBAIC0yNzgsNyArMjgyLDYgQEAKIAogc3RydWN0IG10aGNhX3NxcCB7CiAJc3RydWN0IG10aGNhX3FwIHFwOwotCWludCAgICAgICAgICAgICBwb3J0OwogCWludCAgICAgICAgICAgICBwa2V5X2luZGV4OwogCXUzMiAgICAgICAgICAgICBxa2V5OwogCXUzMiAgICAgICAgICAgICBzZW5kX3BzbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggMDU3YzhlNi4uMDdjMTNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCXNwaW5fbG9jaygmZGV2LT5xcF90YWJsZS5sb2NrKTsKIAlxcCA9IG10aGNhX2FycmF5X2dldCgmZGV2LT5xcF90YWJsZS5xcCwgcXBuICYgKGRldi0+bGltaXRzLm51bV9xcHMgLSAxKSk7CiAJaWYgKHFwKQotCQlhdG9taWNfaW5jKCZxcC0+cmVmY291bnQpOworCQkrK3FwLT5yZWZjb3VudDsKIAlzcGluX3VubG9jaygmZGV2LT5xcF90YWJsZS5sb2NrKTsKIAogCWlmICghcXApIHsKQEAgLTI0OCwxNCArMjQ4LDE5IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoZXZlbnRfdHlwZSA9PSBJQl9FVkVOVF9QQVRIX01JRykKKwkJcXAtPnBvcnQgPSBxcC0+YWx0X3BvcnQ7CisKIAlldmVudC5kZXZpY2UgICAgICA9ICZkZXYtPmliX2RldjsKIAlldmVudC5ldmVudCAgICAgICA9IGV2ZW50X3R5cGU7CiAJZXZlbnQuZWxlbWVudC5xcCAgPSAmcXAtPmlicXA7CiAJaWYgKHFwLT5pYnFwLmV2ZW50X2hhbmRsZXIpCiAJCXFwLT5pYnFwLmV2ZW50X2hhbmRsZXIoJmV2ZW50LCBxcC0+aWJxcC5xcF9jb250ZXh0KTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZxcC0+cmVmY291bnQpKQorCXNwaW5fbG9jaygmZGV2LT5xcF90YWJsZS5sb2NrKTsKKwlpZiAoIS0tcXAtPnJlZmNvdW50KQogCQl3YWtlX3VwKCZxcC0+d2FpdCk7CisJc3Bpbl91bmxvY2soJmRldi0+cXBfdGFibGUubG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdG9fbXRoY2Ffc3RhdGUoZW51bSBpYl9xcF9zdGF0ZSBpYl9zdGF0ZSkKQEAgLTM5MiwxMCArMzk3LDE2IEBACiB7CiAJbWVtc2V0KGliX2FoX2F0dHIsIDAsIHNpemVvZiAqcGF0aCk7CiAJaWJfYWhfYXR0ci0+cG9ydF9udW0gCSAgPSAoYmUzMl90b19jcHUocGF0aC0+cG9ydF9wa2V5KSA+PiAyNCkgJiAweDM7CisKKwlpZiAoaWJfYWhfYXR0ci0+cG9ydF9udW0gPT0gMCB8fCBpYl9haF9hdHRyLT5wb3J0X251bSA+IGRldi0+bGltaXRzLm51bV9wb3J0cykKKwkJcmV0dXJuOworCiAJaWJfYWhfYXR0ci0+ZGxpZCAgICAgCSAgPSBiZTE2X3RvX2NwdShwYXRoLT5ybGlkKTsKIAlpYl9haF9hdHRyLT5zbCAgICAgICAJICA9IGJlMzJfdG9fY3B1KHBhdGgtPnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDI4OwogCWliX2FoX2F0dHItPnNyY19wYXRoX2JpdHMgPSBwYXRoLT5nX215bG1jICYgMHg3ZjsKLQlpYl9haF9hdHRyLT5zdGF0aWNfcmF0ZSAgID0gcGF0aC0+c3RhdGljX3JhdGUgJiAweDc7CisJaWJfYWhfYXR0ci0+c3RhdGljX3JhdGUgICA9IG10aGNhX3JhdGVfdG9faWIoZGV2LAorCQkJCQkJICAgICBwYXRoLT5zdGF0aWNfcmF0ZSAmIDB4NywKKwkJCQkJCSAgICAgaWJfYWhfYXR0ci0+cG9ydF9udW0pOwogCWliX2FoX2F0dHItPmFoX2ZsYWdzICAgICAgPSAocGF0aC0+Z19teWxtYyAmICgxIDw8IDcpKSA/IElCX0FIX0dSSCA6IDA7CiAJaWYgKGliX2FoX2F0dHItPmFoX2ZsYWdzKSB7CiAJCWliX2FoX2F0dHItPmdyaC5zZ2lkX2luZGV4ID0gcGF0aC0+bWdpZF9pbmRleCAmIChkZXYtPmxpbWl0cy5naWRfdGFibGVfbGVuIC0gMSk7CkBAIC00NTUsOCArNDY2LDEwIEBACiAJcXBfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSAgICA9IHFwLT5ycS5tYXhfZ3M7CiAJcXBfYXR0ci0+Y2FwLm1heF9pbmxpbmVfZGF0YSA9IHFwLT5tYXhfaW5saW5lX2RhdGE7CiAKLQl0b19pYl9haF9hdHRyKGRldiwgJnFwX2F0dHItPmFoX2F0dHIsICZjb250ZXh0LT5wcmlfcGF0aCk7Ci0JdG9faWJfYWhfYXR0cihkZXYsICZxcF9hdHRyLT5hbHRfYWhfYXR0ciwgJmNvbnRleHQtPmFsdF9wYXRoKTsKKwlpZiAocXAtPnRyYW5zcG9ydCA9PSBSQyB8fCBxcC0+dHJhbnNwb3J0ID09IFVDKSB7CisJCXRvX2liX2FoX2F0dHIoZGV2LCAmcXBfYXR0ci0+YWhfYXR0ciwgJmNvbnRleHQtPnByaV9wYXRoKTsKKwkJdG9faWJfYWhfYXR0cihkZXYsICZxcF9hdHRyLT5hbHRfYWhfYXR0ciwgJmNvbnRleHQtPmFsdF9wYXRoKTsKKwl9CiAKIAlxcF9hdHRyLT5wa2V5X2luZGV4ICAgICA9IGJlMzJfdG9fY3B1KGNvbnRleHQtPnByaV9wYXRoLnBvcnRfcGtleSkgJiAweDdmOwogCXFwX2F0dHItPmFsdF9wa2V5X2luZGV4ID0gYmUzMl90b19jcHUoY29udGV4dC0+YWx0X3BhdGgucG9ydF9wa2V5KSAmIDB4N2Y7CkBAIC00ODQsMTEgKzQ5NywxMSBAQAogfQogCiBzdGF0aWMgaW50IG10aGNhX3BhdGhfc2V0KHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IGliX2FoX2F0dHIgKmFoLAotCQkJICBzdHJ1Y3QgbXRoY2FfcXBfcGF0aCAqcGF0aCkKKwkJCSAgc3RydWN0IG10aGNhX3FwX3BhdGggKnBhdGgsIHU4IHBvcnQpCiB7CiAJcGF0aC0+Z19teWxtYyAgICAgPSBhaC0+c3JjX3BhdGhfYml0cyAmIDB4N2Y7CiAJcGF0aC0+cmxpZCAgICAgICAgPSBjcHVfdG9fYmUxNihhaC0+ZGxpZCk7Ci0JcGF0aC0+c3RhdGljX3JhdGUgPSAhIWFoLT5zdGF0aWNfcmF0ZTsKKwlwYXRoLT5zdGF0aWNfcmF0ZSA9IG10aGNhX2dldF9yYXRlKGRldiwgYWgtPnN0YXRpY19yYXRlLCBwb3J0KTsKIAogCWlmIChhaC0+YWhfZmxhZ3MgJiBJQl9BSF9HUkgpIHsKIAkJaWYgKGFoLT5ncmguc2dpZF9pbmRleCA+PSBkZXYtPmxpbWl0cy5naWRfdGFibGVfbGVuKSB7CkBAIC02MzQsNyArNjQ3LDcgQEAKIAogCWlmIChxcC0+dHJhbnNwb3J0ID09IE1MWCkKIAkJcXBfY29udGV4dC0+cHJpX3BhdGgucG9ydF9wa2V5IHw9Ci0JCQljcHVfdG9fYmUzMih0b19tc3FwKHFwKS0+cG9ydCA8PCAyNCk7CisJCQljcHVfdG9fYmUzMihxcC0+cG9ydCA8PCAyNCk7CiAJZWxzZSB7CiAJCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKSB7CiAJCQlxcF9jb250ZXh0LT5wcmlfcGF0aC5wb3J0X3BrZXkgfD0KQEAgLTY1Nyw3ICs2NzAsOCBAQAogCX0KIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BVikgewotCQlpZiAobXRoY2FfcGF0aF9zZXQoZGV2LCAmYXR0ci0+YWhfYXR0ciwgJnFwX2NvbnRleHQtPnByaV9wYXRoKSkKKwkJaWYgKG10aGNhX3BhdGhfc2V0KGRldiwgJmF0dHItPmFoX2F0dHIsICZxcF9jb250ZXh0LT5wcmlfcGF0aCwKKwkJCQkgICBhdHRyX21hc2sgJiBJQl9RUF9QT1JUID8gYXR0ci0+cG9ydF9udW0gOiBxcC0+cG9ydCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlxcF9wYXJhbS0+b3B0X3BhcmFtX21hc2sgfD0gY3B1X3RvX2JlMzIoTVRIQ0FfUVBfT1BUUEFSX1BSSU1BUllfQUREUl9QQVRIKTsKQEAgLTY4MSw3ICs2OTUsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAobXRoY2FfcGF0aF9zZXQoZGV2LCAmYXR0ci0+YWx0X2FoX2F0dHIsICZxcF9jb250ZXh0LT5hbHRfcGF0aCkpCisJCWlmIChtdGhjYV9wYXRoX3NldChkZXYsICZhdHRyLT5hbHRfYWhfYXR0ciwgJnFwX2NvbnRleHQtPmFsdF9wYXRoLAorCQkJCSAgIGF0dHItPmFsdF9haF9hdHRyLnBvcnRfbnVtKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXFwX2NvbnRleHQtPmFsdF9wYXRoLnBvcnRfcGtleSB8PSBjcHVfdG9fYmUzMihhdHRyLT5hbHRfcGtleV9pbmRleCB8CkBAIC03OTEsNiArODA2LDEwIEBACiAJCXFwLT5hdG9taWNfcmRfZW4gPSBhdHRyLT5xcF9hY2Nlc3NfZmxhZ3M7CiAJaWYgKGF0dHJfbWFzayAmIElCX1FQX01BWF9ERVNUX1JEX0FUT01JQykKIAkJcXAtPnJlc3BfZGVwdGggPSBhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWM7CisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1BPUlQpCisJCXFwLT5wb3J0ID0gYXR0ci0+cG9ydF9udW07CisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0FMVF9QQVRIKQorCQlxcC0+YWx0X3BvcnQgPSBhdHRyLT5hbHRfcG9ydF9udW07CiAKIAlpZiAoaXNfc3FwKGRldiwgcXApKQogCQlzdG9yZV9hdHRycyh0b19tc3FwKHFwKSwgYXR0ciwgYXR0cl9tYXNrKTsKQEAgLTgwMiwxMyArODIxLDEzIEBACiAJaWYgKGlzX3FwMChkZXYsIHFwKSkgewogCQlpZiAoY3VyX3N0YXRlICE9IElCX1FQU19SVFIgJiYKIAkJICAgIG5ld19zdGF0ZSA9PSBJQl9RUFNfUlRSKQotCQkJaW5pdF9wb3J0KGRldiwgdG9fbXNxcChxcCktPnBvcnQpOworCQkJaW5pdF9wb3J0KGRldiwgcXAtPnBvcnQpOwogCiAJCWlmIChjdXJfc3RhdGUgIT0gSUJfUVBTX1JFU0VUICYmCiAJCSAgICBjdXJfc3RhdGUgIT0gSUJfUVBTX0VSUiAmJgogCQkgICAgKG5ld19zdGF0ZSA9PSBJQl9RUFNfUkVTRVQgfHwKIAkJICAgICBuZXdfc3RhdGUgPT0gSUJfUVBTX0VSUikpCi0JCQltdGhjYV9DTE9TRV9JQihkZXYsIHRvX21zcXAocXApLT5wb3J0LCAmc3RhdHVzKTsKKwkJCW10aGNhX0NMT1NFX0lCKGRldiwgcXAtPnBvcnQsICZzdGF0dXMpOwogCX0KIAogCS8qCkBAIC04MTYsMTAgKzgzNSwxMCBAQAogCSAqIGVudHJpZXMgYW5kIHJlaW5pdGlhbGl6ZSB0aGUgUVAuCiAJICovCiAJaWYgKG5ld19zdGF0ZSA9PSBJQl9RUFNfUkVTRVQgJiYgIXFwLT5pYnFwLnVvYmplY3QpIHsKLQkJbXRoY2FfY3FfY2xlYW4oZGV2LCB0b19tY3EocXAtPmlicXAuc2VuZF9jcSktPmNxbiwgcXAtPnFwbiwKKwkJbXRoY2FfY3FfY2xlYW4oZGV2LCB0b19tY3EocXAtPmlicXAuc2VuZF9jcSksIHFwLT5xcG4sCiAJCQkgICAgICAgcXAtPmlicXAuc3JxID8gdG9fbXNycShxcC0+aWJxcC5zcnEpIDogTlVMTCk7CiAJCWlmIChxcC0+aWJxcC5zZW5kX2NxICE9IHFwLT5pYnFwLnJlY3ZfY3EpCi0JCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5yZWN2X2NxKS0+Y3FuLCBxcC0+cXBuLAorCQkJbXRoY2FfY3FfY2xlYW4oZGV2LCB0b19tY3EocXAtPmlicXAucmVjdl9jcSksIHFwLT5xcG4sCiAJCQkJICAgICAgIHFwLT5pYnFwLnNycSA/IHRvX21zcnEocXAtPmlicXAuc3JxKSA6IE5VTEwpOwogCiAJCW10aGNhX3dxX2luaXQoJnFwLT5zcSk7CkBAIC0xMDc5LDcgKzEwOTgsNyBAQAogCWludCByZXQ7CiAJaW50IGk7CiAKLQlhdG9taWNfc2V0KCZxcC0+cmVmY291bnQsIDEpOworCXFwLT5yZWZjb3VudCA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcXAtPndhaXQpOwogCXFwLT5zdGF0ZSAgICAJID0gSUJfUVBTX1JFU0VUOwogCXFwLT5hdG9taWNfcmRfZW4gPSAwOwpAQCAtMTIxMiw2ICsxMjMxLDkgQEAKIAlpZiAocXAtPnFwbiA9PSAtMSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKiBpbml0aWFsaXplIHBvcnQgdG8gemVybyBmb3IgZXJyb3ItY2F0Y2hpbmcuICovCisJcXAtPnBvcnQgPSAwOworCiAJZXJyID0gbXRoY2FfYWxsb2NfcXBfY29tbW9uKGRldiwgcGQsIHNlbmRfY3EsIHJlY3ZfY3EsCiAJCQkJICAgIHNlbmRfcG9saWN5LCBxcCk7CiAJaWYgKGVycikgewpAQCAtMTI2MSw3ICsxMjgzLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlzcXAtPnBvcnQgPSBwb3J0OworCXNxcC0+cXAucG9ydCAgICAgID0gcG9ydDsKIAlzcXAtPnFwLnFwbiAgICAgICA9IG1xcG47CiAJc3FwLT5xcC50cmFuc3BvcnQgPSBNTFg7CiAKQEAgLTEyOTgsNiArMTMyMCwxNyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9xcF9yZWZjb3VudChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9xcCAqcXApCit7CisJaW50IGM7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnFwX3RhYmxlLmxvY2spOworCWMgPSBxcC0+cmVmY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnFwX3RhYmxlLmxvY2spOworCisJcmV0dXJuIGM7Cit9CisKIHZvaWQgbXRoY2FfZnJlZV9xcChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCiAJCSAgIHN0cnVjdCBtdGhjYV9xcCAqcXApCiB7CkBAIC0xMzE5LDE0ICsxMzUyLDE0IEBACiAJc3Bpbl9sb2NrKCZkZXYtPnFwX3RhYmxlLmxvY2spOwogCW10aGNhX2FycmF5X2NsZWFyKCZkZXYtPnFwX3RhYmxlLnFwLAogCQkJICBxcC0+cXBuICYgKGRldi0+bGltaXRzLm51bV9xcHMgLSAxKSk7CisJLS1xcC0+cmVmY291bnQ7CiAJc3Bpbl91bmxvY2soJmRldi0+cXBfdGFibGUubG9jayk7CiAKIAlpZiAoc2VuZF9jcSAhPSByZWN2X2NxKQogCQlzcGluX3VubG9jaygmcmVjdl9jcS0+bG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKIAotCWF0b21pY19kZWMoJnFwLT5yZWZjb3VudCk7Ci0Jd2FpdF9ldmVudChxcC0+d2FpdCwgIWF0b21pY19yZWFkKCZxcC0+cmVmY291bnQpKTsKKwl3YWl0X2V2ZW50KHFwLT53YWl0LCAhZ2V0X3FwX3JlZmNvdW50KGRldiwgcXApKTsKIAogCWlmIChxcC0+c3RhdGUgIT0gSUJfUVBTX1JFU0VUKQogCQltdGhjYV9NT0RJRllfUVAoZGV2LCBxcC0+c3RhdGUsIElCX1FQU19SRVNFVCwgcXAtPnFwbiwgMCwKQEAgLTEzMzgsMTAgKzEzNzEsMTAgQEAKIAkgKiB1bnJlZiB0aGUgbWVtLWZyZWUgdGFibGVzIGFuZCBmcmVlIHRoZSBRUE4gaW4gb3VyIHRhYmxlLgogCSAqLwogCWlmICghcXAtPmlicXAudW9iamVjdCkgewotCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5zZW5kX2NxKS0+Y3FuLCBxcC0+cXBuLAorCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5zZW5kX2NxKSwgcXAtPnFwbiwKIAkJCSAgICAgICBxcC0+aWJxcC5zcnEgPyB0b19tc3JxKHFwLT5pYnFwLnNycSkgOiBOVUxMKTsKIAkJaWYgKHFwLT5pYnFwLnNlbmRfY3EgIT0gcXAtPmlicXAucmVjdl9jcSkKLQkJCW10aGNhX2NxX2NsZWFuKGRldiwgdG9fbWNxKHFwLT5pYnFwLnJlY3ZfY3EpLT5jcW4sIHFwLT5xcG4sCisJCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5yZWN2X2NxKSwgcXAtPnFwbiwKIAkJCQkgICAgICAgcXAtPmlicXAuc3JxID8gdG9fbXNycShxcC0+aWJxcC5zcnEpIDogTlVMTCk7CiAKIAkJbXRoY2FfZnJlZV9tZW1mcmVlKGRldiwgcXApOwpAQCAtMTQwNCwxMCArMTQzNywxMCBAQAogCQlzcXAtPnVkX2hlYWRlci5scmguc291cmNlX2xpZCA9IElCX0xJRF9QRVJNSVNTSVZFOwogCXNxcC0+dWRfaGVhZGVyLmJ0aC5zb2xpY2l0ZWRfZXZlbnQgPSAhISh3ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKTsKIAlpZiAoIXNxcC0+cXAuaWJxcC5xcF9udW0pCi0JCWliX2dldF9jYWNoZWRfcGtleSgmZGV2LT5pYl9kZXYsIHNxcC0+cG9ydCwKKwkJaWJfZ2V0X2NhY2hlZF9wa2V5KCZkZXYtPmliX2Rldiwgc3FwLT5xcC5wb3J0LAogCQkJCSAgIHNxcC0+cGtleV9pbmRleCwgJnBrZXkpOwogCWVsc2UKLQkJaWJfZ2V0X2NhY2hlZF9wa2V5KCZkZXYtPmliX2Rldiwgc3FwLT5wb3J0LAorCQlpYl9nZXRfY2FjaGVkX3BrZXkoJmRldi0+aWJfZGV2LCBzcXAtPnFwLnBvcnQsCiAJCQkJICAgd3ItPndyLnVkLnBrZXlfaW5kZXgsICZwa2V5KTsKIAlzcXAtPnVkX2hlYWRlci5idGgucGtleSA9IGNwdV90b19iZTE2KHBrZXkpOwogCXNxcC0+dWRfaGVhZGVyLmJ0aC5kZXN0aW5hdGlvbl9xcG4gPSBjcHVfdG9fYmUzMih3ci0+d3IudWQucmVtb3RlX3Fwbik7CkBAIC0xNjk0LDIzICsxNzI3LDcgQEAKIAogCWluZCA9IHFwLT5ycS5uZXh0X2luZDsKIAotCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKLQkJaWYgKHVubGlrZWx5KG5yZXEgPT0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREIpKSB7Ci0JCQlucmVxID0gMDsKLQotCQkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMigocXAtPnJxLm5leHRfaW5kIDw8IHFwLT5ycS53cWVfc2hpZnQpIHwgc2l6ZTApOwotCQkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMihxcC0+cXBuIDw8IDgpOwotCi0JCQl3bWIoKTsKLQotCQkJbXRoY2Ffd3JpdGU2NChkb29yYmVsbCwKLQkJCQkgICAgICBkZXYtPmthciArIE1USENBX1JFQ0VJVkVfRE9PUkJFTEwsCi0JCQkJICAgICAgTVRIQ0FfR0VUX0RPT1JCRUxMX0xPQ0soJmRldi0+ZG9vcmJlbGxfbG9jaykpOwotCi0JCQlxcC0+cnEuaGVhZCArPSBNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQjsKLQkJCXNpemUwID0gMDsKLQkJfQotCisJZm9yIChucmVxID0gMDsgd3I7IHdyID0gd3ItPm5leHQpIHsKIAkJaWYgKG10aGNhX3dxX292ZXJmbG93KCZxcC0+cnEsIG5yZXEsIHFwLT5pYnFwLnJlY3ZfY3EpKSB7CiAJCQltdGhjYV9lcnIoZGV2LCAiUlEgJTA2eCBmdWxsICgldSBoZWFkLCAldSB0YWlsLCIKIAkJCQkJIiAlZCBtYXgsICVkIG5yZXEpXG4iLCBxcC0+cXBuLApAQCAtMTc2NCw2ICsxNzgxLDIzIEBACiAJCSsraW5kOwogCQlpZiAodW5saWtlbHkoaW5kID49IHFwLT5ycS5tYXgpKQogCQkJaW5kIC09IHFwLT5ycS5tYXg7CisKKwkJKytucmVxOworCQlpZiAodW5saWtlbHkobnJlcSA9PSBNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQikpIHsKKwkJCW5yZXEgPSAwOworCisJCQlkb29yYmVsbFswXSA9IGNwdV90b19iZTMyKChxcC0+cnEubmV4dF9pbmQgPDwgcXAtPnJxLndxZV9zaGlmdCkgfCBzaXplMCk7CisJCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKHFwLT5xcG4gPDwgOCk7CisKKwkJCXdtYigpOworCisJCQltdGhjYV93cml0ZTY0KGRvb3JiZWxsLAorCQkJCSAgICAgIGRldi0+a2FyICsgTVRIQ0FfUkVDRUlWRV9ET09SQkVMTCwKKwkJCQkgICAgICBNVEhDQV9HRVRfRE9PUkJFTExfTE9DSygmZGV2LT5kb29yYmVsbF9sb2NrKSk7CisKKwkJCXFwLT5ycS5oZWFkICs9IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCOworCQkJc2l6ZTAgPSAwOworCQl9CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKaW5kZXggMmRkM2FlYS4uYjI5MmZlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAKIAkvKiBTYW5pdHkgY2hlY2sgU1JRIHNpemUgYmVmb3JlIHByb2NlZWRpbmcgKi8KIAlpZiAoYXR0ci0+bWF4X3dyICA+IGRldi0+bGltaXRzLm1heF9zcnFfd3FlcyB8fAotCSAgICBhdHRyLT5tYXhfc2dlID4gZGV2LT5saW1pdHMubWF4X3NnKQorCSAgICBhdHRyLT5tYXhfc2dlID4gZGV2LT5saW1pdHMubWF4X3NycV9zZ2UpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3JxLT5tYXggICAgICA9IGF0dHItPm1heF93cjsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCQlnb3RvIGVycl9vdXRfbWFpbGJveDsKIAogCXNwaW5fbG9ja19pbml0KCZzcnEtPmxvY2spOwotCWF0b21pY19zZXQoJnNycS0+cmVmY291bnQsIDEpOworCXNycS0+cmVmY291bnQgPSAxOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNycS0+d2FpdCk7CiAKIAlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQpAQCAtMzA4LDYgKzMwOCwxNyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9zcnFfcmVmY291bnQoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpCit7CisJaW50IGM7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnNycV90YWJsZS5sb2NrKTsKKwljID0gc3JxLT5yZWZjb3VudDsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+c3JxX3RhYmxlLmxvY2spOworCisJcmV0dXJuIGM7Cit9CisKIHZvaWQgbXRoY2FfZnJlZV9zcnEoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpCiB7CiAJc3RydWN0IG10aGNhX21haWxib3ggKm1haWxib3g7CkBAIC0zMjksMTAgKzM0MCwxMCBAQAogCXNwaW5fbG9ja19pcnEoJmRldi0+c3JxX3RhYmxlLmxvY2spOwogCW10aGNhX2FycmF5X2NsZWFyKCZkZXYtPnNycV90YWJsZS5zcnEsCiAJCQkgIHNycS0+c3JxbiAmIChkZXYtPmxpbWl0cy5udW1fc3JxcyAtIDEpKTsKKwktLXNycS0+cmVmY291bnQ7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnNycV90YWJsZS5sb2NrKTsKIAotCWF0b21pY19kZWMoJnNycS0+cmVmY291bnQpOwotCXdhaXRfZXZlbnQoc3JxLT53YWl0LCAhYXRvbWljX3JlYWQoJnNycS0+cmVmY291bnQpKTsKKwl3YWl0X2V2ZW50KHNycS0+d2FpdCwgIWdldF9zcnFfcmVmY291bnQoZGV2LCBzcnEpKTsKIAogCWlmICghc3JxLT5pYnNycS51b2JqZWN0KSB7CiAJCW10aGNhX2ZyZWVfc3JxX2J1ZihkZXYsIHNycSk7CkBAIC00MTQsNyArNDI1LDcgQEAKIAlzcGluX2xvY2soJmRldi0+c3JxX3RhYmxlLmxvY2spOwogCXNycSA9IG10aGNhX2FycmF5X2dldCgmZGV2LT5zcnFfdGFibGUuc3JxLCBzcnFuICYgKGRldi0+bGltaXRzLm51bV9zcnFzIC0gMSkpOwogCWlmIChzcnEpCi0JCWF0b21pY19pbmMoJnNycS0+cmVmY291bnQpOworCQkrK3NycS0+cmVmY291bnQ7CiAJc3Bpbl91bmxvY2soJmRldi0+c3JxX3RhYmxlLmxvY2spOwogCiAJaWYgKCFzcnEpIHsKQEAgLTQzMSw4ICs0NDIsMTAgQEAKIAlzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIoJmV2ZW50LCBzcnEtPmlic3JxLnNycV9jb250ZXh0KTsKIAogb3V0OgotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzcnEtPnJlZmNvdW50KSkKKwlzcGluX2xvY2soJmRldi0+c3JxX3RhYmxlLmxvY2spOworCWlmICghLS1zcnEtPnJlZmNvdW50KQogCQl3YWtlX3VwKCZzcnEtPndhaXQpOworCXNwaW5fdW5sb2NrKCZkZXYtPnNycV90YWJsZS5sb2NrKTsKIH0KIAogLyoKQEAgLTQ3NywyNiArNDkwLDcgQEAKIAogCWZpcnN0X2luZCA9IHNycS0+Zmlyc3RfZnJlZTsKIAotCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKLQkJaWYgKHVubGlrZWx5KG5yZXEgPT0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREIpKSB7Ci0JCQlucmVxID0gMDsKLQotCQkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMihmaXJzdF9pbmQgPDwgc3JxLT53cWVfc2hpZnQpOwotCQkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMihzcnEtPnNycW4gPDwgOCk7Ci0KLQkJCS8qCi0JCQkgKiBNYWtlIHN1cmUgdGhhdCBkZXNjcmlwdG9ycyBhcmUgd3JpdHRlbgotCQkJICogYmVmb3JlIGRvb3JiZWxsIGlzIHJ1bmcuCi0JCQkgKi8KLQkJCXdtYigpOwotCi0JCQltdGhjYV93cml0ZTY0KGRvb3JiZWxsLAotCQkJCSAgICAgIGRldi0+a2FyICsgTVRIQ0FfUkVDRUlWRV9ET09SQkVMTCwKLQkJCQkgICAgICBNVEhDQV9HRVRfRE9PUkJFTExfTE9DSygmZGV2LT5kb29yYmVsbF9sb2NrKSk7Ci0KLQkJCWZpcnN0X2luZCA9IHNycS0+Zmlyc3RfZnJlZTsKLQkJfQotCisJZm9yIChucmVxID0gMDsgd3I7IHdyID0gd3ItPm5leHQpIHsKIAkJaW5kID0gc3JxLT5maXJzdF9mcmVlOwogCiAJCWlmIChpbmQgPCAwKSB7CkBAIC01NTYsNiArNTUwLDI2IEBACiAKIAkJc3JxLT53cmlkW2luZF0gID0gd3ItPndyX2lkOwogCQlzcnEtPmZpcnN0X2ZyZWUgPSBuZXh0X2luZDsKKworCQkrK25yZXE7CisJCWlmICh1bmxpa2VseShucmVxID09IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCKSkgeworCQkJbnJlcSA9IDA7CisKKwkJCWRvb3JiZWxsWzBdID0gY3B1X3RvX2JlMzIoZmlyc3RfaW5kIDw8IHNycS0+d3FlX3NoaWZ0KTsKKwkJCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIoc3JxLT5zcnFuIDw8IDgpOworCisJCQkvKgorCQkJICogTWFrZSBzdXJlIHRoYXQgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4KKwkJCSAqIGJlZm9yZSBkb29yYmVsbCBpcyBydW5nLgorCQkJICovCisJCQl3bWIoKTsKKworCQkJbXRoY2Ffd3JpdGU2NChkb29yYmVsbCwKKwkJCQkgICAgICBkZXYtPmthciArIE1USENBX1JFQ0VJVkVfRE9PUkJFTEwsCisJCQkJICAgICAgTVRIQ0FfR0VUX0RPT1JCRUxMX0xPQ0soJmRldi0+ZG9vcmJlbGxfbG9jaykpOworCisJCQlmaXJzdF9pbmQgPSBzcnEtPmZpcnN0X2ZyZWU7CisJCX0KIAl9CiAKIAlpZiAobGlrZWx5KG5yZXEpKSB7CkBAIC02NjAsNiArNjc0LDMxIEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IG10aGNhX21heF9zcnFfc2dlKHN0cnVjdCBtdGhjYV9kZXYgKmRldikKK3sKKwlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQorCQlyZXR1cm4gZGV2LT5saW1pdHMubWF4X3NnOworCisJLyoKKwkgKiBTUlEgYWxsb2NhdGlvbnMgYXJlIGJhc2VkIG9uIHBvd2VycyBvZiAyIGZvciBUYXZvciwKKwkgKiAoYWx0aG91Z2ggdGhleSBvbmx5IG5lZWQgdG8gYmUgbXVsdGlwbGVzIG9mIDE2IGJ5dGVzKS4KKwkgKgorCSAqIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBiYXNlIHRoZSBtYXggbnVtYmVyIG9mIHNnIGVudHJpZXMgb24KKwkgKiB0aGUgbGFyZ2VzdCBwb3dlciBvZiAyIGRlc2NyaXB0b3Igc2l6ZSB0aGF0IGlzIDw9IHRvIHRoZQorCSAqIGFjdHVhbCBtYXggV1FFIGRlc2NyaXB0b3Igc2l6ZSwgcmF0aGVyIHRoYW4gcmV0dXJuIHRoZQorCSAqIG1heF9zZyB2YWx1ZSBnaXZlbiBieSB0aGUgZmlybXdhcmUgKHdoaWNoIGlzIGJhc2VkIG9uIFdRRQorCSAqIHNpemVzIGFzIG11bHRpcGxlcyBvZiAxNiwgbm90IHBvd2VycyBvZiAyKS4KKwkgKgorCSAqIElmIFNSUSBpbXBsZW1lbnRhdGlvbiBpcyBjaGFuZ2VkIGZvciBUYXZvciB0byBiZSBiYXNlZCBvbgorCSAqIG11bHRpcGxlcyBvZiAxNiwgdGhlIGNhbGN1bGF0aW9uIGJlbG93IGNhbiBiZSBkZWxldGVkIGFuZAorCSAqIHRoZSBGVyBtYXhfc2cgdmFsdWUgcmV0dXJuZWQuCisJICovCisJcmV0dXJuIG1pbl90KGludCwgZGV2LT5saW1pdHMubWF4X3NnLAorCQkgICAgICgoMSA8PCAoZmxzKGRldi0+bGltaXRzLm1heF9kZXNjX3N6KSAtIDEpKSAtCisJCSAgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSkgLworCQkgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKSk7Cit9CisKIGludCBfX2RldmluaXQgbXRoY2FfaW5pdF9zcnFfdGFibGUoc3RydWN0IG10aGNhX2RldiAqZGV2KQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcKaW5kZXggOGQyZTA0Yy4uMTNkNmQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZwpAQCAtMTAsOCArMTAsOSBAQAogCSAgZ3JvdXA6IDxodHRwOi8vd3d3LmlldGYub3JnL2h0bWwuY2hhcnRlcnMvaXBvaWItY2hhcnRlci5odG1sPi4KIAogY29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUcKLQlib29sICJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nIgorCWJvb2wgIklQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmciIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBJTkZJTklCQU5EX0lQT0lCCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gY2F1c2VzIGRlYnVnZ2luZyBjb2RlIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlCiAJICBJUG9JQiBkcml2ZXIuICBUaGUgb3V0cHV0IGNhbiBiZSB0dXJuZWQgb24gdmlhIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IGI2NDAxMDcuLjEyYTFlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTY1LDYgKzY1LDggQEAKIAogCUlQT0lCX1JYX1JJTkdfU0laRSAJICA9IDEyOCwKIAlJUE9JQl9UWF9SSU5HX1NJWkUgCSAgPSA2NCwKKwlJUE9JQl9NQVhfUVVFVUVfU0laRQkgID0gODE5MiwKKwlJUE9JQl9NSU5fUVVFVUVfU0laRQkgID0gMiwKIAogCUlQT0lCX05VTV9XQyAJCSAgPSA0LAogCkBAIC0yMzAsNiArMjMyLDkgQEAKIAkJCQkgICAgIElORklOSUJBTkRfQUxFTiwgc2l6ZW9mKHZvaWQgKikpOwogfQogCitzdHJ1Y3QgaXBvaWJfbmVpZ2ggKmlwb2liX25laWdoX2FsbG9jKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKTsKK3ZvaWQgaXBvaWJfbmVpZ2hfZnJlZShzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoKTsKKwogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppcG9pYl93b3JrcXVldWU7CiAKIC8qIGZ1bmN0aW9ucyAqLwpAQCAtMzI5LDYgKzMzNCw4IEBACiAjZGVmaW5lIGlwb2liX3dhcm4ocHJpdiwgZm9ybWF0LCBhcmcuLi4pCQlcCiAJaXBvaWJfcHJpbnRrKEtFUk5fV0FSTklORywgcHJpdiwgZm9ybWF0ICwgIyMgYXJnKQogCitleHRlcm4gaW50IGlwb2liX3NlbmRxX3NpemU7CitleHRlcm4gaW50IGlwb2liX3JlY3ZxX3NpemU7CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogZXh0ZXJuIGludCBpcG9pYl9kZWJ1Z19sZXZlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYwppbmRleCA2ODUyNThlLi41ZGRlMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJICAgZ2lkX2J1ZiwgcGF0aC5wYXRocmVjLmRsaWQgPyAieWVzIiA6ICJubyIpOwogCiAJaWYgKHBhdGgucGF0aHJlYy5kbGlkKSB7Ci0JCXJhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KHBhdGgucGF0aHJlYy5yYXRlKSAqIDI1OworCQlyYXRlID0gaWJfcmF0ZV90b19tdWx0KHBhdGgucGF0aHJlYy5yYXRlKSAqIDI1OwogCiAJCXNlcV9wcmludGYoZmlsZSwKIAkJCSAgICIgIERMSUQ6ICAgICAweCUwNHhcbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwppbmRleCBlZDY1MjAyLi44NDA2ODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IElQT0lCX1JYX1JJTkdfU0laRTsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGlwb2liX3JlY3ZxX3NpemU7ICsraSkgewogCQlpZiAoaXBvaWJfYWxsb2Nfcnhfc2tiKGRldiwgaSkpIHsKIAkJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZWNlaXZlIGJ1ZmZlciAlZFxuIiwgaSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCWlmICh3cl9pZCAmIElQT0lCX09QX1JFQ1YpIHsKIAkJd3JfaWQgJj0gfklQT0lCX09QX1JFQ1Y7CiAKLQkJaWYgKHdyX2lkIDwgSVBPSUJfUlhfUklOR19TSVpFKSB7CisJCWlmICh3cl9pZCA8IGlwb2liX3JlY3ZxX3NpemUpIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgID0gcHJpdi0+cnhfcmluZ1t3cl9pZF0uc2tiOwogCQkJZG1hX2FkZHJfdCAgICAgIGFkZHIgPSBwcml2LT5yeF9yaW5nW3dyX2lkXS5tYXBwaW5nOwogCkBAIC0yNTIsOSArMjUyLDkgQEAKIAkJc3RydWN0IGlwb2liX3R4X2J1ZiAqdHhfcmVxOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCWlmICh3cl9pZCA+PSBJUE9JQl9UWF9SSU5HX1NJWkUpIHsKKwkJaWYgKHdyX2lkID49IGlwb2liX3NlbmRxX3NpemUpIHsKIAkJCWlwb2liX3dhcm4ocHJpdiwgImNvbXBsZXRpb24gZXZlbnQgd2l0aCB3cmlkICVkICg+ICVkKVxuIiwKLQkJCQkgICB3cl9pZCwgSVBPSUJfVFhfUklOR19TSVpFKTsKKwkJCQkgICB3cl9pZCwgaXBvaWJfc2VuZHFfc2l6ZSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMjc1LDcgKzI3NSw4IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAJCSsrcHJpdi0+dHhfdGFpbDsKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJgotCQkgICAgcHJpdi0+dHhfaGVhZCAtIHByaXYtPnR4X3RhaWwgPD0gSVBPSUJfVFhfUklOR19TSVpFIC8gMikKKwkJICAgIHRlc3RfYml0KElQT0lCX0ZMQUdfQURNSU5fVVAsICZwcml2LT5mbGFncykgJiYKKwkJICAgIHByaXYtPnR4X2hlYWQgLSBwcml2LT50eF90YWlsIDw9IGlwb2liX3NlbmRxX3NpemUgPj4gMSkKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCkBAIC0zNDQsMTMgKzM0NSwxMyBAQAogCSAqIG1lYW5zIHdlIGhhdmUgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgcmVjb3JkZWQgYW5kCiAJICogb3VyIHN0YXRlIGlzIGNvbnNpc3RlbnQgYmVmb3JlIHdlIGNhbGwgcG9zdF9zZW5kKCkuCiAJICovCi0JdHhfcmVxID0gJnByaXYtPnR4X3JpbmdbcHJpdi0+dHhfaGVhZCAmIChJUE9JQl9UWF9SSU5HX1NJWkUgLSAxKV07CisJdHhfcmVxID0gJnByaXYtPnR4X3JpbmdbcHJpdi0+dHhfaGVhZCAmIChpcG9pYl9zZW5kcV9zaXplIC0gMSldOwogCXR4X3JlcS0+c2tiID0gc2tiOwogCWFkZHIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwogCXBjaV91bm1hcF9hZGRyX3NldCh0eF9yZXEsIG1hcHBpbmcsIGFkZHIpOwogCi0JaWYgKHVubGlrZWx5KHBvc3Rfc2VuZChwcml2LCBwcml2LT50eF9oZWFkICYgKElQT0lCX1RYX1JJTkdfU0laRSAtIDEpLAorCWlmICh1bmxpa2VseShwb3N0X3NlbmQocHJpdiwgcHJpdi0+dHhfaGVhZCAmIChpcG9pYl9zZW5kcV9zaXplIC0gMSksCiAJCQkgICAgICAgYWRkcmVzcy0+YWgsIHFwbiwgYWRkciwgc2tiLT5sZW4pKSkgewogCQlpcG9pYl93YXJuKHByaXYsICJwb3N0X3NlbmQgZmFpbGVkXG4iKTsKIAkJKytwcml2LT5zdGF0cy50eF9lcnJvcnM7CkBAIC0zNjMsNyArMzY0LDcgQEAKIAkJYWRkcmVzcy0+bGFzdF9zZW5kID0gcHJpdi0+dHhfaGVhZDsKIAkJKytwcml2LT50eF9oZWFkOwogCi0JCWlmIChwcml2LT50eF9oZWFkIC0gcHJpdi0+dHhfdGFpbCA9PSBJUE9JQl9UWF9SSU5HX1NJWkUpIHsKKwkJaWYgKHByaXYtPnR4X2hlYWQgLSBwcml2LT50eF90YWlsID09IGlwb2liX3NlbmRxX3NpemUpIHsKIAkJCWlwb2liX2RiZyhwcml2LCAiVFggcmluZyBmdWxsLCBzdG9wcGluZyBrZXJuZWwgbmV0IHF1ZXVlXG4iKTsKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJfQpAQCAtNDg4LDcgKzQ4OSw3IEBACiAJaW50IHBlbmRpbmcgPSAwOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IElQT0lCX1JYX1JJTkdfU0laRTsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBpcG9pYl9yZWN2cV9zaXplOyArK2kpCiAJCWlmIChwcml2LT5yeF9yaW5nW2ldLnNrYikKIAkJCSsrcGVuZGluZzsKIApAQCAtNTI3LDcgKzUyOCw3IEBACiAJCQkgKi8KIAkJCXdoaWxlICgoaW50KSBwcml2LT50eF90YWlsIC0gKGludCkgcHJpdi0+dHhfaGVhZCA8IDApIHsKIAkJCQl0eF9yZXEgPSAmcHJpdi0+dHhfcmluZ1twcml2LT50eF90YWlsICYKLQkJCQkJCQkoSVBPSUJfVFhfUklOR19TSVpFIC0gMSldOworCQkJCQkJCShpcG9pYl9zZW5kcV9zaXplIC0gMSldOwogCQkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EtPmRtYV9kZXZpY2UsCiAJCQkJCQkgcGNpX3VubWFwX2FkZHIodHhfcmVxLCBtYXBwaW5nKSwKIAkJCQkJCSB0eF9yZXEtPnNrYi0+bGVuLApAQCAtNTM2LDcgKzUzNyw3IEBACiAJCQkJKytwcml2LT50eF90YWlsOwogCQkJfQogCi0JCQlmb3IgKGkgPSAwOyBpIDwgSVBPSUJfUlhfUklOR19TSVpFOyArK2kpCisJCQlmb3IgKGkgPSAwOyBpIDwgaXBvaWJfcmVjdnFfc2l6ZTsgKytpKQogCQkJCWlmIChwcml2LT5yeF9yaW5nW2ldLnNrYikgewogCQkJCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLT5kbWFfZGV2aWNlLAogCQkJCQkJCSBwY2lfdW5tYXBfYWRkcigmcHJpdi0+cnhfcmluZ1tpXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggOWIwYmQ3Yy4uY2IwNzhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBGb3IgQVJQSFJEX3h4eCAqLwogCkBAIC01Myw2ICs1NCwxNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUC1vdmVyLUluZmluaUJhbmQgbmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogCitpbnQgaXBvaWJfc2VuZHFfc2l6ZSBfX3JlYWRfbW9zdGx5ID0gSVBPSUJfVFhfUklOR19TSVpFOworaW50IGlwb2liX3JlY3ZxX3NpemUgX19yZWFkX21vc3RseSA9IElQT0lCX1JYX1JJTkdfU0laRTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHNlbmRfcXVldWVfc2l6ZSwgaXBvaWJfc2VuZHFfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2VuZF9xdWV1ZV9zaXplLCAiTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHNlbmQgcXVldWUiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChyZWN2X3F1ZXVlX3NpemUsIGlwb2liX3JlY3ZxX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlY3ZfcXVldWVfc2l6ZSwgIk51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByZWNlaXZlIHF1ZXVlIik7CisKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogaW50IGlwb2liX2RlYnVnX2xldmVsOwogCkBAIC0yNTIsOCArMjYxLDggQEAKIAkJICovCiAJCWlmIChuZWlnaC0+YWgpCiAJCQlpcG9pYl9wdXRfYWgobmVpZ2gtPmFoKTsKLQkJKnRvX2lwb2liX25laWdoKG5laWdoLT5uZWlnaGJvdXIpID0gTlVMTDsKLQkJa2ZyZWUobmVpZ2gpOworCisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTMyNyw5ICszMzYsOCBAQAogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwb2liX3BhdGggKnBhdGgsICp0cDsKIAlMSVNUX0hFQUQocmVtb3ZlX2xpc3QpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCiAJbGlzdF9zcGxpY2UoJnByaXYtPnBhdGhfbGlzdCwgJnJlbW92ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cGF0aF9saXN0KTsKQEAgLTMzNywxNCArMzQ1LDE1IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmcmVtb3ZlX2xpc3QsIGxpc3QpCiAJCXJiX2VyYXNlKCZwYXRoLT5yYl9ub2RlLCAmcHJpdi0+cGF0aF90cmVlKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYXRoLCB0cCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CiAJCWlmIChwYXRoLT5xdWVyeSkKIAkJCWliX3NhX2NhbmNlbF9xdWVyeShwYXRoLT5xdWVyeV9pZCwgcGF0aC0+cXVlcnkpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwYXRoLT5kb25lKTsKIAkJcGF0aF9mcmVlKGRldiwgcGF0aCk7CisJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCX0KKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBwYXRoX3JlY19jb21wbGV0aW9uKGludCBzdGF0dXMsCkBAIC0zNzMsMTYgKzM4Miw5IEBACiAJCXN0cnVjdCBpYl9haF9hdHRyIGF2ID0gewogCQkJLmRsaWQgCSAgICAgICA9IGJlMTZfdG9fY3B1KHBhdGhyZWMtPmRsaWQpLAogCQkJLnNsIAkgICAgICAgPSBwYXRocmVjLT5zbCwKLQkJCS5wb3J0X251bSAgICAgID0gcHJpdi0+cG9ydAorCQkJLnBvcnRfbnVtICAgICAgPSBwcml2LT5wb3J0LAorCQkJLnN0YXRpY19yYXRlICAgPSBwYXRocmVjLT5yYXRlCiAJCX07Ci0JCWludCBwYXRoX3JhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KHBhdGhyZWMtPnJhdGUpOwotCi0JCWlmIChwYXRoX3JhdGUgPiAwICYmIHByaXYtPmxvY2FsX3JhdGUgPiBwYXRoX3JhdGUpCi0JCQlhdi5zdGF0aWNfcmF0ZSA9IChwcml2LT5sb2NhbF9yYXRlIC0gMSkgLyBwYXRoX3JhdGU7Ci0KLQkJaXBvaWJfZGJnKHByaXYsICJzdGF0aWNfcmF0ZSAlZCBmb3IgbG9jYWwgcG9ydCAlZFgsIHBhdGggJWRYXG4iLAotCQkJICBhdi5zdGF0aWNfcmF0ZSwgcHJpdi0+bG9jYWxfcmF0ZSwKLQkJCSAgaWJfc2FfcmF0ZV9lbnVtX3RvX2ludChwYXRocmVjLT5yYXRlKSk7CiAKIAkJYWggPSBpcG9pYl9jcmVhdGVfYWgoZGV2LCBwcml2LT5wZCwgJmF2KTsKIAl9CkBAIC00ODEsNyArNDgzLDcgQEAKIAlzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoOwogCi0JbmVpZ2ggPSBrbWFsbG9jKHNpemVvZiAqbmVpZ2gsIEdGUF9BVE9NSUMpOworCW5laWdoID0gaXBvaWJfbmVpZ2hfYWxsb2Moc2tiLT5kc3QtPm5laWdoYm91cik7CiAJaWYgKCFuZWlnaCkgewogCQkrK3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC00ODksOCArNDkxLDYgQEAKIAl9CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZuZWlnaC0+cXVldWUpOwotCW5laWdoLT5uZWlnaGJvdXIgPSBza2ItPmRzdC0+bmVpZ2hib3VyOwotCSp0b19pcG9pYl9uZWlnaChza2ItPmRzdC0+bmVpZ2hib3VyKSA9IG5laWdoOwogCiAJLyoKIAkgKiBXZSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBpcG9pYl9zdGFydF94bWl0LCBzbyB3ZSdyZQpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCXBhdGggPSBwYXRoX3JlY19jcmVhdGUoZGV2LAogCQkJCSAgICAgICAodW5pb24gaWJfZ2lkICopIChza2ItPmRzdC0+bmVpZ2hib3VyLT5oYSArIDQpKTsKIAkJaWYgKCFwYXRoKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9wYXRoOwogCiAJCV9fcGF0aF9hZGQoZGV2LCBwYXRoKTsKIAl9CkBAIC01MjEsMTcgKzUyMSwxNyBAQAogCQlfX3NrYl9xdWV1ZV90YWlsKCZuZWlnaC0+cXVldWUsIHNrYik7CiAKIAkJaWYgKCFwYXRoLT5xdWVyeSAmJiBwYXRoX3JlY19zdGFydChkZXYsIHBhdGgpKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9saXN0OwogCX0KIAogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAlyZXR1cm47CiAKLWVycjoKLQkqdG9faXBvaWJfbmVpZ2goc2tiLT5kc3QtPm5laWdoYm91cikgPSBOVUxMOworZXJyX2xpc3Q6CiAJbGlzdF9kZWwoJm5laWdoLT5saXN0KTsKLQlrZnJlZShuZWlnaCk7CiAKK2Vycl9wYXRoOgorCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCSsrcHJpdi0+c3RhdHMudHhfZHJvcHBlZDsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCkBAIC03NjMsOCArNzYzLDcgQEAKIAkJaWYgKG5laWdoLT5haCkKIAkJCWFoID0gbmVpZ2gtPmFoOwogCQlsaXN0X2RlbCgmbmVpZ2gtPmxpc3QpOwotCQkqdG9faXBvaWJfbmVpZ2gobikgPSBOVUxMOwotCQlrZnJlZShuZWlnaCk7CisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTc3Myw2ICs3NzIsMjYgQEAKIAkJaXBvaWJfcHV0X2FoKGFoKTsKIH0KIAorc3RydWN0IGlwb2liX25laWdoICppcG9pYl9uZWlnaF9hbGxvYyhzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaGJvdXIpCit7CisJc3RydWN0IGlwb2liX25laWdoICpuZWlnaDsKKworCW5laWdoID0ga21hbGxvYyhzaXplb2YgKm5laWdoLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW5laWdoKQorCQlyZXR1cm4gTlVMTDsKKworCW5laWdoLT5uZWlnaGJvdXIgPSBuZWlnaGJvdXI7CisJKnRvX2lwb2liX25laWdoKG5laWdoYm91cikgPSBuZWlnaDsKKworCXJldHVybiBuZWlnaDsKK30KKwordm9pZCBpcG9pYl9uZWlnaF9mcmVlKHN0cnVjdCBpcG9pYl9uZWlnaCAqbmVpZ2gpCit7CisJKnRvX2lwb2liX25laWdoKG5laWdoLT5uZWlnaGJvdXIpID0gTlVMTDsKKwlrZnJlZShuZWlnaCk7Cit9CisKIHN0YXRpYyBpbnQgaXBvaWJfbmVpZ2hfc2V0dXBfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXMpCiB7CiAJcGFybXMtPm5laWdoX2Rlc3RydWN0b3IgPSBpcG9pYl9uZWlnaF9kZXN0cnVjdG9yOwpAQCAtNzg1LDIwICs4MDQsMTkgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogQWxsb2NhdGUgUlgvVFggInJpbmdzIiB0byBob2xkIHF1ZXVlZCBza2JzICovCi0KLQlwcml2LT5yeF9yaW5nID0Ja3phbGxvYyhJUE9JQl9SWF9SSU5HX1NJWkUgKiBzaXplb2YgKHN0cnVjdCBpcG9pYl9yeF9idWYpLAorCXByaXYtPnJ4X3JpbmcgPQlremFsbG9jKGlwb2liX3JlY3ZxX3NpemUgKiBzaXplb2YgKnByaXYtPnJ4X3JpbmcsCiAJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5yeF9yaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgUlggcmluZyAoJWQgZW50cmllcylcbiIsCi0JCSAgICAgICBjYS0+bmFtZSwgSVBPSUJfUlhfUklOR19TSVpFKTsKKwkJICAgICAgIGNhLT5uYW1lLCBpcG9pYl9yZWN2cV9zaXplKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcHJpdi0+dHhfcmluZyA9IGt6YWxsb2MoSVBPSUJfVFhfUklOR19TSVpFICogc2l6ZW9mIChzdHJ1Y3QgaXBvaWJfdHhfYnVmKSwKKwlwcml2LT50eF9yaW5nID0ga3phbGxvYyhpcG9pYl9zZW5kcV9zaXplICogc2l6ZW9mICpwcml2LT50eF9yaW5nLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+dHhfcmluZykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIFRYIHJpbmcgKCVkIGVudHJpZXMpXG4iLAotCQkgICAgICAgY2EtPm5hbWUsIElQT0lCX1RYX1JJTkdfU0laRSk7CisJCSAgICAgICBjYS0+bmFtZSwgaXBvaWJfc2VuZHFfc2l6ZSk7CiAJCWdvdG8gb3V0X3J4X3JpbmdfY2xlYW51cDsKIAl9CiAKQEAgLTg2Niw3ICs4ODQsNyBAQAogCWRldi0+aGFyZF9oZWFkZXJfbGVuIAkgPSBJUE9JQl9FTkNBUF9MRU4gKyBJTkZJTklCQU5EX0FMRU47CiAJZGV2LT5hZGRyX2xlbiAJCSA9IElORklOSUJBTkRfQUxFTjsKIAlkZXYtPnR5cGUgCQkgPSBBUlBIUkRfSU5GSU5JQkFORDsKLQlkZXYtPnR4X3F1ZXVlX2xlbiAJID0gSVBPSUJfVFhfUklOR19TSVpFICogMjsKKwlkZXYtPnR4X3F1ZXVlX2xlbiAJID0gaXBvaWJfc2VuZHFfc2l6ZSAqIDI7CiAJZGV2LT5mZWF0dXJlcyAgICAgICAgICAgID0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfCBORVRJRl9GX0xMVFg7CiAKIAkvKiBNVFUgd2lsbCBiZSByZXNldCB3aGVuIG1jYXN0IGpvaW4gaGFwcGVucyAqLwpAQCAtMTExOCw2ICsxMTM2LDE0IEBACiB7CiAJaW50IHJldDsKIAorCWlwb2liX3JlY3ZxX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oaXBvaWJfcmVjdnFfc2l6ZSk7CisJaXBvaWJfcmVjdnFfc2l6ZSA9IG1pbihpcG9pYl9yZWN2cV9zaXplLCBJUE9JQl9NQVhfUVVFVUVfU0laRSk7CisJaXBvaWJfcmVjdnFfc2l6ZSA9IG1heChpcG9pYl9yZWN2cV9zaXplLCBJUE9JQl9NSU5fUVVFVUVfU0laRSk7CisKKwlpcG9pYl9zZW5kcV9zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKGlwb2liX3NlbmRxX3NpemUpOworCWlwb2liX3NlbmRxX3NpemUgPSBtaW4oaXBvaWJfc2VuZHFfc2l6ZSwgSVBPSUJfTUFYX1FVRVVFX1NJWkUpOworCWlwb2liX3NlbmRxX3NpemUgPSBtYXgoaXBvaWJfc2VuZHFfc2l6ZSwgSVBPSUJfTUlOX1FVRVVFX1NJWkUpOworCiAJcmV0ID0gaXBvaWJfcmVnaXN0ZXJfZGVidWdmcygpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCA5M2M0NjJlLi4xZGFlNGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTExNCw4ICsxMTQsNyBAQAogCQkgKi8KIAkJaWYgKG5laWdoLT5haCkKIAkJCWlwb2liX3B1dF9haChuZWlnaC0+YWgpOwotCQkqdG9faXBvaWJfbmVpZ2gobmVpZ2gtPm5laWdoYm91cikgPSBOVUxMOwotCQlrZnJlZShuZWlnaCk7CisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTI1MSw2ICsyNTAsNyBAQAogCQkJLnBvcnRfbnVtICAgICAgPSBwcml2LT5wb3J0LAogCQkJLnNsCSAgICAgICA9IG1jYXN0LT5tY21lbWJlci5zbCwKIAkJCS5haF9mbGFncyAgICAgID0gSUJfQUhfR1JILAorCQkJLnN0YXRpY19yYXRlICAgPSBtY2FzdC0+bWNtZW1iZXIucmF0ZSwKIAkJCS5ncmgJICAgICAgID0gewogCQkJCS5mbG93X2xhYmVsICAgID0gYmUzMl90b19jcHUobWNhc3QtPm1jbWVtYmVyLmZsb3dfbGFiZWwpLAogCQkJCS5ob3BfbGltaXQgICAgID0gbWNhc3QtPm1jbWVtYmVyLmhvcF9saW1pdCwKQEAgLTI1OCwxNyArMjU4LDggQEAKIAkJCQkudHJhZmZpY19jbGFzcyA9IG1jYXN0LT5tY21lbWJlci50cmFmZmljX2NsYXNzCiAJCQl9CiAJCX07Ci0JCWludCBwYXRoX3JhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KG1jYXN0LT5tY21lbWJlci5yYXRlKTsKLQogCQlhdi5ncmguZGdpZCA9IG1jYXN0LT5tY21lbWJlci5tZ2lkOwogCi0JCWlmIChwYXRoX3JhdGUgPiAwICYmIHByaXYtPmxvY2FsX3JhdGUgPiBwYXRoX3JhdGUpCi0JCQlhdi5zdGF0aWNfcmF0ZSA9IChwcml2LT5sb2NhbF9yYXRlIC0gMSkgLyBwYXRoX3JhdGU7Ci0KLQkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJzdGF0aWNfcmF0ZSAlZCBmb3IgbG9jYWwgcG9ydCAlZFgsIG1jbWVtYmVyICVkWFxuIiwKLQkJCQlhdi5zdGF0aWNfcmF0ZSwgcHJpdi0+bG9jYWxfcmF0ZSwKLQkJCQlpYl9zYV9yYXRlX2VudW1fdG9faW50KG1jYXN0LT5tY21lbWJlci5yYXRlKSk7Ci0KIAkJYWggPSBpcG9pYl9jcmVhdGVfYWgoZGV2LCBwcml2LT5wZCwgJmF2KTsKIAkJaWYgKCFhaCkgewogCQkJaXBvaWJfd2Fybihwcml2LCAiaWJfYWRkcmVzc19jcmVhdGUgZmFpbGVkXG4iKTsKQEAgLTYxOCw2ICs2MDksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgd2FpdF9mb3JfbWNhc3Rfam9pbihzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGlwb2liX21jYXN0ICptY2FzdCkKK3sKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlpZiAobWNhc3QgJiYgbWNhc3QtPnF1ZXJ5KSB7CisJCWliX3NhX2NhbmNlbF9xdWVyeShtY2FzdC0+cXVlcnlfaWQsIG1jYXN0LT5xdWVyeSk7CisJCW1jYXN0LT5xdWVyeSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJCWlwb2liX2RiZ19tY2FzdChwcml2LCAid2FpdGluZyBmb3IgTUdJRCAiIElQT0lCX0dJRF9GTVQgIlxuIiwKKwkJCQlJUE9JQl9HSURfQVJHKG1jYXN0LT5tY21lbWJlci5tZ2lkKSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKKwl9CisJZWxzZQorCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworfQorCiBpbnQgaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZsdXNoKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC02MzcsMjggKzY0NCwxMCBAQAogCWlmIChmbHVzaCkKIAkJZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiAKLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQlpZiAocHJpdi0+YnJvYWRjYXN0ICYmIHByaXYtPmJyb2FkY2FzdC0+cXVlcnkpIHsKLQkJaWJfc2FfY2FuY2VsX3F1ZXJ5KHByaXYtPmJyb2FkY2FzdC0+cXVlcnlfaWQsIHByaXYtPmJyb2FkY2FzdC0+cXVlcnkpOwotCQlwcml2LT5icm9hZGNhc3QtPnF1ZXJ5ID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJ3YWl0aW5nIGZvciBiY2FzdFxuIik7Ci0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJnByaXYtPmJyb2FkY2FzdC0+ZG9uZSk7Ci0JfSBlbHNlCi0JCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJd2FpdF9mb3JfbWNhc3Rfam9pbihwcml2LCBwcml2LT5icm9hZGNhc3QpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtY2FzdCwgJnByaXYtPm11bHRpY2FzdF9saXN0LCBsaXN0KSB7Ci0JCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwotCQlpZiAobWNhc3QtPnF1ZXJ5KSB7Ci0JCQlpYl9zYV9jYW5jZWxfcXVlcnkobWNhc3QtPnF1ZXJ5X2lkLCBtY2FzdC0+cXVlcnkpOwotCQkJbWNhc3QtPnF1ZXJ5ID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIndhaXRpbmcgZm9yIE1HSUQgIiBJUE9JQl9HSURfRk1UICJcbiIsCi0JCQkJCUlQT0lCX0dJRF9BUkcobWNhc3QtPm1jbWVtYmVyLm1naWQpKTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKLQkJfSBlbHNlCi0JCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmcHJpdi0+bXVsdGljYXN0X2xpc3QsIGxpc3QpCisJCXdhaXRfZm9yX21jYXN0X2pvaW4ocHJpdiwgbWNhc3QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NzIsMTMgKzc2MSwxMSBAQAogCQlpZiAoc2tiLT5kc3QgICAgICAgICAgICAmJgogCQkgICAgc2tiLT5kc3QtPm5laWdoYm91ciAmJgogCQkgICAgISp0b19pcG9pYl9uZWlnaChza2ItPmRzdC0+bmVpZ2hib3VyKSkgewotCQkJc3RydWN0IGlwb2liX25laWdoICpuZWlnaCA9IGttYWxsb2Moc2l6ZW9mICpuZWlnaCwgR0ZQX0FUT01JQyk7CisJCQlzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoID0gaXBvaWJfbmVpZ2hfYWxsb2Moc2tiLT5kc3QtPm5laWdoYm91cik7CiAKIAkJCWlmIChuZWlnaCkgewogCQkJCWtyZWZfZ2V0KCZtY2FzdC0+YWgtPnJlZik7CiAJCQkJbmVpZ2gtPmFoICAJPSBtY2FzdC0+YWg7Ci0JCQkJbmVpZ2gtPm5laWdoYm91ciA9IHNrYi0+ZHN0LT5uZWlnaGJvdXI7Ci0JCQkJKnRvX2lwb2liX25laWdoKHNrYi0+ZHN0LT5uZWlnaGJvdXIpID0gbmVpZ2g7CiAJCQkJbGlzdF9hZGRfdGFpbCgmbmVpZ2gtPmxpc3QsICZtY2FzdC0+bmVpZ2hfbGlzdCk7CiAJCQl9CiAJCX0KQEAgLTkxMyw2ICs5MDAsNyBAQAogCiAJLyogV2UgaGF2ZSB0byBjYW5jZWwgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2sgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWNhc3QsIHRtY2FzdCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CisJCXdhaXRfZm9yX21jYXN0X2pvaW4ocHJpdiwgbWNhc3QpOwogCQlpcG9pYl9tY2FzdF9sZWF2ZShtY2FzdC0+ZGV2LCBtY2FzdCk7CiAJCWlwb2liX21jYXN0X2ZyZWUobWNhc3QpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYwppbmRleCA1ZjAzODgwLi4xZDQ5ZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jCkBAIC0xNTksOCArMTU5LDggQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgaW5pdF9hdHRyID0gewogCQkuY2FwID0gewotCQkJLm1heF9zZW5kX3dyICA9IElQT0lCX1RYX1JJTkdfU0laRSwKLQkJCS5tYXhfcmVjdl93ciAgPSBJUE9JQl9SWF9SSU5HX1NJWkUsCisJCQkubWF4X3NlbmRfd3IgID0gaXBvaWJfc2VuZHFfc2l6ZSwKKwkJCS5tYXhfcmVjdl93ciAgPSBpcG9pYl9yZWN2cV9zaXplLAogCQkJLm1heF9zZW5kX3NnZSA9IDEsCiAJCQkubWF4X3JlY3Zfc2dlID0gMQogCQl9LApAQCAtMTc1LDcgKzE3NSw3IEBACiAJfQogCiAJcHJpdi0+Y3EgPSBpYl9jcmVhdGVfY3EocHJpdi0+Y2EsIGlwb2liX2liX2NvbXBsZXRpb24sIE5VTEwsIGRldiwKLQkJCQlJUE9JQl9UWF9SSU5HX1NJWkUgKyBJUE9JQl9SWF9SSU5HX1NJWkUgKyAxKTsKKwkJCQlpcG9pYl9zZW5kcV9zaXplICsgaXBvaWJfcmVjdnFfc2l6ZSArIDEpOwogCWlmIChJU19FUlIocHJpdi0+Y3EpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIENRXG4iLCBjYS0+bmFtZSk7CiAJCWdvdG8gb3V0X2ZyZWVfcGQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCmluZGV4IDRjYTE3NTUuLmY4ODc3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCkBAIC0xNTgsMTAgKzE1OCw4IEBACiAJCWlmIChwcml2LT5wa2V5ID09IHBrZXkpIHsKIAkJCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAJCQlpcG9pYl9kZXZfY2xlYW51cChwcml2LT5kZXYpOwotCiAJCQlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7Ci0KLQkJCWtmcmVlKHByaXYpOworCQkJZnJlZV9uZXRkZXYocHJpdi0+ZGV2KTsKIAogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCBmZDhhOTVhLi45Y2JkZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtMzQwLDcgKzM0MCwxMCBAQAogCS8qIFhYWCBzaG91bGQgc2VuZCBTUlBfSV9MT0dPVVQgcmVxdWVzdCAqLwogCiAJaW5pdF9jb21wbGV0aW9uKCZ0YXJnZXQtPmRvbmUpOwotCWliX3NlbmRfY21fZHJlcSh0YXJnZXQtPmNtX2lkLCBOVUxMLCAwKTsKKwlpZiAoaWJfc2VuZF9jbV9kcmVxKHRhcmdldC0+Y21faWQsIE5VTEwsIDApKSB7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiU2VuZGluZyBDTSBEUkVRIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CiAJd2FpdF9mb3JfY29tcGxldGlvbigmdGFyZ2V0LT5kb25lKTsKIH0KIApAQCAtMzUxLDcgKzM1NCw2IEBACiAJc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAodGFyZ2V0LT5zdGF0ZSAhPSBTUlBfVEFSR0VUX0RFQUQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwotCQlzY3NpX2hvc3RfcHV0KHRhcmdldC0+c2NzaV9ob3N0KTsKIAkJcmV0dXJuOwogCX0KIAl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9SRU1PVkVEOwpAQCAtMzY1LDggKzM2Nyw2IEBACiAJaWJfZGVzdHJveV9jbV9pZCh0YXJnZXQtPmNtX2lkKTsKIAlzcnBfZnJlZV90YXJnZXRfaWIodGFyZ2V0KTsKIAlzY3NpX2hvc3RfcHV0KHRhcmdldC0+c2NzaV9ob3N0KTsKLQkvKiBBbmQgYW5vdGhlciBwdXQgdG8gcmVhbGx5IGZyZWUgdGhlIHRhcmdldCBwb3J0Li4uICovCi0Jc2NzaV9ob3N0X3B1dCh0YXJnZXQtPnNjc2lfaG9zdCk7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX2Nvbm5lY3RfdGFyZ2V0KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKQEAgLTQwOSw2ICs0MDksMzQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNycF91bm1hcF9kYXRhKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLAorCQkJICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorCQkJICAgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCWludCBuZW50czsKKworCWlmICghc2NtbmQtPnJlcXVlc3RfYnVmZmVyIHx8CisJICAgIChzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSAmJgorCSAgICAgc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSkpCisJCXJldHVybjsKKworCS8qCisJICogVGhpcyBoYW5kbGluZyBvZiBub24tU0cgY29tbWFuZHMgY2FuIGJlIGtpbGxlZCB3aGVuIHRoZQorCSAqIFNDU0kgbWlkbGF5ZXIgbm8gbG9uZ2VyIGdlbmVyYXRlcyBub24tU0cgY29tbWFuZHMuCisJICovCisJaWYgKGxpa2VseShzY21uZC0+dXNlX3NnKSkgeworCQluZW50cyA9IHNjbW5kLT51c2Vfc2c7CisJCXNjYXQgID0gc2NtbmQtPnJlcXVlc3RfYnVmZmVyOworCX0gZWxzZSB7CisJCW5lbnRzID0gMTsKKwkJc2NhdCAgPSAmcmVxLT5mYWtlX3NnOworCX0KKworCWRtYV91bm1hcF9zZyh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIHNjYXQsIG5lbnRzLAorCQkgICAgIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7Cit9CisKIHN0YXRpYyBpbnQgc3JwX3JlY29ubmVjdF90YXJnZXQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQogewogCXN0cnVjdCBpYl9jbV9pZCAqbmV3X2NtX2lkOwpAQCAtNDU1LDE2ICs0ODMsMTYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJnRhcmdldC0+cmVxX3F1ZXVlLCBsaXN0KSB7CiAJCXJlcS0+c2NtbmQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKIAkJcmVxLT5zY21uZC0+c2NzaV9kb25lKHJlcS0+c2NtbmQpOworCQlzcnBfdW5tYXBfZGF0YShyZXEtPnNjbW5kLCB0YXJnZXQsIHJlcSk7CiAJfQogCiAJdGFyZ2V0LT5yeF9oZWFkCSA9IDA7CiAJdGFyZ2V0LT50eF9oZWFkCSA9IDA7CiAJdGFyZ2V0LT50eF90YWlsICA9IDA7Ci0JdGFyZ2V0LT5yZXFfaGVhZCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNSUF9TUV9TSVpFIC0gMTsgKytpKQotCQl0YXJnZXQtPnJlcV9yaW5nW2ldLm5leHQgPSBpICsgMTsKLQl0YXJnZXQtPnJlcV9yaW5nW1NSUF9TUV9TSVpFIC0gMV0ubmV4dCA9IC0xOworCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPmZyZWVfcmVxcyk7CiAJSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+cmVxX3F1ZXVlKTsKKwlmb3IgKGkgPSAwOyBpIDwgU1JQX1NRX1NJWkU7ICsraSkKKwkJbGlzdF9hZGRfdGFpbCgmdGFyZ2V0LT5yZXFfcmluZ1tpXS5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOwogCiAJcmV0ID0gc3JwX2Nvbm5lY3RfdGFyZ2V0KHRhcmdldCk7CiAJaWYgKHJldCkKQEAgLTU4OSwzMiArNjE3LDEwIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHZvaWQgc3JwX3VubWFwX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsCi0JCQkgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQkgICBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIHNycF9yZW1vdmVfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OwotCWludCBuZW50czsKLQotCWlmICghc2NtbmQtPnJlcXVlc3RfYnVmZmVyIHx8Ci0JICAgIChzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSAmJgotCSAgICAgc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSkpCi0JCXJldHVybjsKLQotCS8qCi0JICogVGhpcyBoYW5kbGluZyBvZiBub24tU0cgY29tbWFuZHMgY2FuIGJlIGtpbGxlZCB3aGVuIHRoZQotCSAqIFNDU0kgbWlkbGF5ZXIgbm8gbG9uZ2VyIGdlbmVyYXRlcyBub24tU0cgY29tbWFuZHMuCi0JICovCi0JaWYgKGxpa2VseShzY21uZC0+dXNlX3NnKSkgewotCQluZW50cyA9IHNjbW5kLT51c2Vfc2c7Ci0JCXNjYXQgID0gc2NtbmQtPnJlcXVlc3RfYnVmZmVyOwotCX0gZWxzZSB7Ci0JCW5lbnRzID0gMTsKLQkJc2NhdCAgPSAmcmVxLT5mYWtlX3NnOwotCX0KLQotCWRtYV91bm1hcF9zZyh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIHNjYXQsIG5lbnRzLAotCQkgICAgIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7CisJc3JwX3VubWFwX2RhdGEocmVxLT5zY21uZCwgdGFyZ2V0LCByZXEpOworCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZ0YXJnZXQtPmZyZWVfcmVxcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNycF9wcm9jZXNzX3JzcChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcnNwICpyc3ApCkBAIC02MzksNyArNjQ1LDcgQEAKIAkJCXJlcS0+dHNrX3N0YXR1cyA9IHJzcC0+ZGF0YVszXTsKIAkJY29tcGxldGUoJnJlcS0+ZG9uZSk7CiAJfSBlbHNlIHsKLQkJc2NtbmQgCSAgICAgID0gcmVxLT5zY21uZDsKKwkJc2NtbmQgPSByZXEtPnNjbW5kOwogCQlpZiAoIXNjbW5kKQogCQkJcHJpbnRrKEtFUk5fRVJSICJOdWxsIHNjbW5kIGZvciBSU1Agdy90YWcgJTAxNmxseFxuIiwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSByc3AtPnRhZyk7CkBAIC02NTcsMTYgKzY2MywxMSBAQAogCQllbHNlIGlmIChyc3AtPmZsYWdzICYgKFNSUF9SU1BfRkxBR19ESU9WRVIgfCBTUlBfUlNQX0ZMQUdfRElVTkRFUikpCiAJCQlzY21uZC0+cmVzaWQgPSBiZTMyX3RvX2NwdShyc3AtPmRhdGFfaW5fcmVzX2NudCk7CiAKLQkJc3JwX3VubWFwX2RhdGEoc2NtbmQsIHRhcmdldCwgcmVxKTsKLQogCQlpZiAoIXJlcS0+dHNrX21nbXQpIHsKLQkJCXJlcS0+c2NtbmQgPSBOVUxMOwogCQkJc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSAodm9pZCAqKSAtMUw7CiAJCQlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKIAotCQkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7Ci0JCQlyZXEtPm5leHQgPSB0YXJnZXQtPnJlcV9oZWFkOwotCQkJdGFyZ2V0LT5yZXFfaGVhZCA9IHJzcC0+dGFnICYgflNSUF9UQUdfVFNLX01HTVQ7CisJCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7CiAJCX0gZWxzZQogCQkJcmVxLT5jbWRfZG9uZSA9IDE7CiAJfQpAQCAtODUzLDcgKzg1NCw2IEBACiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNycF9pdSAqaXU7CiAJc3RydWN0IHNycF9jbWQgKmNtZDsKLQlsb25nIHJlcV9pbmRleDsKIAlpbnQgbGVuOwogCiAJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9DT05ORUNUSU5HKQpAQCAtODczLDIyICs4NzMsMjAgQEAKIAlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIGl1LT5kbWEsCiAJCQkJU1JQX01BWF9JVV9MRU4sIERNQV9UT19ERVZJQ0UpOwogCi0JcmVxX2luZGV4ID0gdGFyZ2V0LT5yZXFfaGVhZDsKKwlyZXEgPSBsaXN0X2VudHJ5KHRhcmdldC0+ZnJlZV9yZXFzLm5leHQsIHN0cnVjdCBzcnBfcmVxdWVzdCwgbGlzdCk7CiAKIAlzY21uZC0+c2NzaV9kb25lICAgICA9IGRvbmU7CiAJc2NtbmQtPnJlc3VsdCAgICAgICAgPSAwOwotCXNjbW5kLT5ob3N0X3NjcmliYmxlID0gKHZvaWQgKikgcmVxX2luZGV4OworCXNjbW5kLT5ob3N0X3NjcmliYmxlID0gKHZvaWQgKikgKGxvbmcpIHJlcS0+aW5kZXg7CiAKIAljbWQgPSBpdS0+YnVmOwogCW1lbXNldChjbWQsIDAsIHNpemVvZiAqY21kKTsKIAogCWNtZC0+b3Bjb2RlID0gU1JQX0NNRDsKIAljbWQtPmx1biAgICA9IGNwdV90b19iZTY0KCh1NjQpIHNjbW5kLT5kZXZpY2UtPmx1biA8PCA0OCk7Ci0JY21kLT50YWcgICAgPSByZXFfaW5kZXg7CisJY21kLT50YWcgICAgPSByZXEtPmluZGV4OwogCW1lbWNweShjbWQtPmNkYiwgc2NtbmQtPmNtbmQsIHNjbW5kLT5jbWRfbGVuKTsKIAotCXJlcSA9ICZ0YXJnZXQtPnJlcV9yaW5nW3JlcV9pbmRleF07Ci0KIAlyZXEtPnNjbW5kICAgID0gc2NtbmQ7CiAJcmVxLT5jbWQgICAgICA9IGl1OwogCXJlcS0+Y21kX2RvbmUgPSAwOwpAQCAtOTEzLDggKzkxMSw3IEBACiAJCWdvdG8gZXJyX3VubWFwOwogCX0KIAotCXRhcmdldC0+cmVxX2hlYWQgPSByZXEtPm5leHQ7Ci0JbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5yZXFfcXVldWUpOworCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZ0YXJnZXQtPnJlcV9xdWV1ZSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTEzNywzMCArMTEzNCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNycF9zZW5kX3Rza19tZ210KHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLCB1OCBmdW5jKQorc3RhdGljIGludCBzcnBfc2VuZF90c2tfbWdtdChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCisJCQkgICAgIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLCB1OCBmdW5jKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNjbW5kLT5kZXZpY2UtPmhvc3QpOwotCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBzcnBfaXUgKml1OwogCXN0cnVjdCBzcnBfdHNrX21nbXQgKnRza19tZ210OwotCWludCByZXFfaW5kZXg7Ci0JaW50IHJldCA9IEZBSUxFRDsKIAogCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAKIAlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX0RFQUQgfHwKIAkgICAgdGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1JFTU9WRUQpIHsKLQkJc2NtbmQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCQlyZXEtPnNjbW5kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHNjbW5kLT5ob3N0X3NjcmliYmxlID09ICh2b2lkICopIC0xTCkKLQkJZ290byBvdXQ7Ci0KLQlyZXFfaW5kZXggPSAobG9uZykgc2NtbmQtPmhvc3Rfc2NyaWJibGU7Ci0JcHJpbnRrKEtFUk5fRVJSICJBYm9ydCBmb3IgcmVxX2luZGV4ICVkXG4iLCByZXFfaW5kZXgpOwotCi0JcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbcmVxX2luZGV4XTsKIAlpbml0X2NvbXBsZXRpb24oJnJlcS0+ZG9uZSk7CiAKIAlpdSA9IF9fc3JwX2dldF90eF9pdSh0YXJnZXQpOwpAQCAtMTE3MSwxMCArMTE1OCwxMCBAQAogCW1lbXNldCh0c2tfbWdtdCwgMCwgc2l6ZW9mICp0c2tfbWdtdCk7CiAKIAl0c2tfbWdtdC0+b3Bjb2RlIAk9IFNSUF9UU0tfTUdNVDsKLQl0c2tfbWdtdC0+bHVuIAkJPSBjcHVfdG9fYmU2NCgodTY0KSBzY21uZC0+ZGV2aWNlLT5sdW4gPDwgNDgpOwotCXRza19tZ210LT50YWcgCQk9IHJlcV9pbmRleCB8IFNSUF9UQUdfVFNLX01HTVQ7CisJdHNrX21nbXQtPmx1biAJCT0gY3B1X3RvX2JlNjQoKHU2NCkgcmVxLT5zY21uZC0+ZGV2aWNlLT5sdW4gPDwgNDgpOworCXRza19tZ210LT50YWcgCQk9IHJlcS0+aW5kZXggfCBTUlBfVEFHX1RTS19NR01UOwogCXRza19tZ210LT50c2tfbWdtdF9mdW5jID0gZnVuYzsKLQl0c2tfbWdtdC0+dGFza190YWcgCT0gcmVxX2luZGV4OworCXRza19tZ210LT50YXNrX3RhZyAJPSByZXEtPmluZGV4OwogCiAJaWYgKF9fc3JwX3Bvc3Rfc2VuZCh0YXJnZXQsIGl1LCBzaXplb2YgKnRza19tZ210KSkKIAkJZ290byBvdXQ7CkBAIC0xMTgyLDM5ICsxMTY5LDg1IEBACiAJcmVxLT50c2tfbWdtdCA9IGl1OwogCiAJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCiAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnJlcS0+ZG9uZSwKIAkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoU1JQX0FCT1JUX1RJTUVPVVRfTVMpKSkKLQkJcmV0dXJuIEZBSUxFRDsKLQlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCQlyZXR1cm4gLTE7CiAKLQlpZiAocmVxLT5jbWRfZG9uZSkgewotCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKLQkJcmVxLT5uZXh0ID0gdGFyZ2V0LT5yZXFfaGVhZDsKLQkJdGFyZ2V0LT5yZXFfaGVhZCA9IHJlcV9pbmRleDsKLQotCQlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKLQl9IGVsc2UgaWYgKCFyZXEtPnRza19zdGF0dXMpIHsKLQkJc2NtbmQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKLQkJcmV0ID0gU1VDQ0VTUzsKLQl9CisJcmV0dXJuIDA7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgc3JwX2ZpbmRfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKKwkJCXN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLAorCQkJc3RydWN0IHNycF9yZXF1ZXN0ICoqcmVxKQoreworCWlmIChzY21uZC0+aG9zdF9zY3JpYmJsZSA9PSAodm9pZCAqKSAtMUwpCisJCXJldHVybiAtMTsKKworCSpyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1sobG9uZykgc2NtbmQtPmhvc3Rfc2NyaWJibGVdOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNjbW5kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOworCWludCByZXQgPSBTVUNDRVNTOworCiAJcHJpbnRrKEtFUk5fRVJSICJTUlAgYWJvcnQgY2FsbGVkXG4iKTsKIAotCXJldHVybiBzcnBfc2VuZF90c2tfbWdtdChzY21uZCwgU1JQX1RTS19BQk9SVF9UQVNLKTsKKwlpZiAoc3JwX2ZpbmRfcmVxKHRhcmdldCwgc2NtbmQsICZyZXEpKQorCQlyZXR1cm4gRkFJTEVEOworCWlmIChzcnBfc2VuZF90c2tfbWdtdCh0YXJnZXQsIHJlcSwgU1JQX1RTS19BQk9SVF9UQVNLKSkKKwkJcmV0dXJuIEZBSUxFRDsKKworCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CisKKwlpZiAocmVxLT5jbWRfZG9uZSkgeworCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7CisJCXNjbW5kLT5zY3NpX2RvbmUoc2NtbmQpOworCX0gZWxzZSBpZiAoIXJlcS0+dHNrX3N0YXR1cykgeworCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7CisJCXNjbW5kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CisJfSBlbHNlCisJCXJldCA9IEZBSUxFRDsKKworCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX3Jlc2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChzY21uZC0+ZGV2aWNlLT5ob3N0KTsKKwlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwgKnRtcDsKKwogCXByaW50ayhLRVJOX0VSUiAiU1JQIHJlc2V0X2RldmljZSBjYWxsZWRcbiIpOwogCi0JcmV0dXJuIHNycF9zZW5kX3Rza19tZ210KHNjbW5kLCBTUlBfVFNLX0xVTl9SRVNFVCk7CisJaWYgKHNycF9maW5kX3JlcSh0YXJnZXQsIHNjbW5kLCAmcmVxKSkKKwkJcmV0dXJuIEZBSUxFRDsKKwlpZiAoc3JwX3NlbmRfdHNrX21nbXQodGFyZ2V0LCByZXEsIFNSUF9UU0tfTFVOX1JFU0VUKSkKKwkJcmV0dXJuIEZBSUxFRDsKKwlpZiAocmVxLT50c2tfc3RhdHVzKQorCQlyZXR1cm4gRkFJTEVEOworCisJc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgJnRhcmdldC0+cmVxX3F1ZXVlLCBsaXN0KQorCQlpZiAocmVxLT5zY21uZC0+ZGV2aWNlID09IHNjbW5kLT5kZXZpY2UpIHsKKwkJCXJlcS0+c2NtbmQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKKwkJCXJlcS0+c2NtbmQtPnNjc2lfZG9uZShyZXEtPnNjbW5kKTsKKwkJCXNycF9yZW1vdmVfcmVxKHRhcmdldCwgcmVxKTsKKwkJfQorCisJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCisJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX3Jlc2V0X2hvc3Qoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQpCkBAIC0xNDM0LDYgKzE0NjcsNyBAQAogCQkJcCA9IG1hdGNoX3N0cmR1cChhcmdzKTsKIAkJCWlmIChzdHJsZW4ocCkgIT0gMzIpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiYmFkIGRlc3QgR0lEIHBhcmFtZXRlciAnJXMnXG4iLCBwKTsKKwkJCQlrZnJlZShwKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIApAQCAtMTUxMywxMCArMTU0NywxMiBAQAogCiAJSU5JVF9XT1JLKCZ0YXJnZXQtPndvcmssIHNycF9yZWNvbm5lY3Rfd29yaywgdGFyZ2V0KTsKIAotCWZvciAoaSA9IDA7IGkgPCBTUlBfU1FfU0laRSAtIDE7ICsraSkKLQkJdGFyZ2V0LT5yZXFfcmluZ1tpXS5uZXh0ID0gaSArIDE7Ci0JdGFyZ2V0LT5yZXFfcmluZ1tTUlBfU1FfU0laRSAtIDFdLm5leHQgPSAtMTsKKwlJTklUX0xJU1RfSEVBRCgmdGFyZ2V0LT5mcmVlX3JlcXMpOwogCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPnJlcV9xdWV1ZSk7CisJZm9yIChpID0gMDsgaSA8IFNSUF9TUV9TSVpFOyArK2kpIHsKKwkJdGFyZ2V0LT5yZXFfcmluZ1tpXS5pbmRleCA9IGk7CisJCWxpc3RfYWRkX3RhaWwoJnRhcmdldC0+cmVxX3JpbmdbaV0ubGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKKwl9CiAKIAlyZXQgPSBzcnBfcGFyc2Vfb3B0aW9ucyhidWYsIHRhcmdldCk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKaW5kZXggYmQ3ZjdjMy4uYzVjZDQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogCSAqLwogCXN0cnVjdCBzY2F0dGVybGlzdAlmYWtlX3NnOwogCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7Ci0Jc2hvcnQJCQluZXh0OworCXNob3J0CQkJaW5kZXg7CiAJdTgJCQljbWRfZG9uZTsKIAl1OAkJCXRza19zdGF0dXM7CiB9OwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJdW5zaWduZWQJCXR4X3RhaWw7CiAJc3RydWN0IHNycF9pdQkgICAgICAgKnR4X3JpbmdbU1JQX1NRX1NJWkUgKyAxXTsKIAotCWludAkJCXJlcV9oZWFkOworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9yZXFzOwogCXN0cnVjdCBsaXN0X2hlYWQJcmVxX3F1ZXVlOwogCXN0cnVjdCBzcnBfcmVxdWVzdAlyZXFfcmluZ1tTUlBfU1FfU0laRV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZidWcuYyBiL2RyaXZlcnMvaW5wdXQvZXZidWcuYwppbmRleCBkNzgyODkzLi4wNzM1OGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2YnVnLmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmJ1Zy5jCkBAIC00OSw5ICs0OSw4IEBACiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlOwogCi0JaWYgKCEoaGFuZGxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlucHV0X2hhbmRsZSksIEdGUF9LRVJORUwpKSkKKwlpZiAoIShoYW5kbGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5wdXRfaGFuZGxlKSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoaGFuZGxlLCAwLCBzaXplb2Yoc3RydWN0IGlucHV0X2hhbmRsZSkpOwogCiAJaGFuZGxlLT5kZXYgPSBkZXY7CiAJaGFuZGxlLT5oYW5kbGVyID0gaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCA3NDU5NzlmLi5iYTMyNWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC0xMzAsOSArMTMwLDggQEAKIAlpZiAoKGFjY2VwdF9lcnIgPSBpbnB1dF9hY2NlcHRfcHJvY2VzcygmKGV2ZGV2X3RhYmxlW2ldLT5oYW5kbGUpLCBmaWxlKSkpCiAJCXJldHVybiBhY2NlcHRfZXJyOwogCi0JaWYgKCEobGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBldmRldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZXZkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGxpc3QsIDAsIHNpemVvZihzdHJ1Y3QgZXZkZXZfbGlzdCkpOwogCiAJbGlzdC0+ZXZkZXYgPSBldmRldl90YWJsZVtpXTsKIAlsaXN0X2FkZF90YWlsKCZsaXN0LT5ub2RlLCAmZXZkZXZfdGFibGVbaV0tPmxpc3QpOwpAQCAtNDA0LDYgKzQwMywyNyBAQAogCQljYXNlIEVWSU9DR0lEOgogCQkJaWYgKGNvcHlfdG9fdXNlcihwLCAmZGV2LT5pZCwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9pZCkpKQogCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBFVklPQ0dSRVA6CisJCQlpZiAoIXRlc3RfYml0KEVWX1JFUCwgZGV2LT5ldmJpdCkpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlpZiAocHV0X3VzZXIoZGV2LT5yZXBbUkVQX0RFTEFZXSwgaXApKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKHB1dF91c2VyKGRldi0+cmVwW1JFUF9QRVJJT0RdLCBpcCArIDEpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBFVklPQ1NSRVA6CisJCQlpZiAoIXRlc3RfYml0KEVWX1JFUCwgZGV2LT5ldmJpdCkpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlpZiAoZ2V0X3VzZXIodSwgaXApKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKGdldF91c2VyKHYsIGlwICsgMSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlucHV0X2V2ZW50KGRldiwgRVZfUkVQLCBSRVBfREVMQVksIHUpOworCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9SRVAsIFJFUF9QRVJJT0QsIHYpOwogCiAJCQlyZXR1cm4gMDsKIApAQCAtNjA5LDkgKzYyOSw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICghKGV2ZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGV2ZGV2KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGV2ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGV2ZGV2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoZXZkZXYsIDAsIHNpemVvZihzdHJ1Y3QgZXZkZXYpKTsKIAogCUlOSVRfTElTVF9IRUFEKCZldmRldi0+bGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZkZXYtPndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCmluZGV4IGI3NjVhMTUuLjM2NjQ0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBIWiAqLworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qI2luY2x1ZGUgPGFzbS9pby5oPiovCiAKQEAgLTQzLDEwICs0NCwxMCBAQAogRVhQT1JUX1NZTUJPTChnYW1lcG9ydF9zdG9wX3BvbGxpbmcpOwogCiAvKgotICogZ2FtZXBvcnRfc2VtIHByb3RlY3RzIGVudGlyZSBnYW1lcG9ydCBzdWJzeXN0ZW0gYW5kIGlzIHRha2VuCisgKiBnYW1lcG9ydF9tdXRleCBwcm90ZWN0cyBlbnRpcmUgZ2FtZXBvcnQgc3Vic3lzdGVtIGFuZCBpcyB0YWtlbgogICogZXZlcnkgdGltZSBnYW1lcG9ydCBwb3J0IG9yIGRyaXZlciByZWdpc3RyZXJlZCBvciB1bnJlZ2lzdGVyZWQuCiAgKi8KLXN0YXRpYyBERUNMQVJFX01VVEVYKGdhbWVwb3J0X3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGdhbWVwb3J0X211dGV4KTsKIAogc3RhdGljIExJU1RfSEVBRChnYW1lcG9ydF9saXN0KTsKIApAQCAtMjY1LDYgKzI2Niw3IEBACiAJaWYgKChldmVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnYW1lcG9ydF9ldmVudCksIEdGUF9BVE9NSUMpKSkgewogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2FtZXBvcnQ6IENhbid0IGdldCBtb2R1bGUgcmVmZXJlbmNlLCBkcm9wcGluZyBldmVudCAlZFxuIiwgZXZlbnRfdHlwZSk7CisJCQlrZnJlZShldmVudCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0zNDIsNyArMzQ0LDcgQEAKIAlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmdhbWVwb3J0X2RydjsKIAotCWRvd24oJmdhbWVwb3J0X3NlbSk7CisJbXV0ZXhfbG9jaygmZ2FtZXBvcnRfbXV0ZXgpOwogCiAJLyoKIAkgKiBOb3RlIHRoYXQgd2UgaGFuZGxlIG9ubHkgb25lIGV2ZW50IGhlcmUgdG8gZ2l2ZSBzd3N1c3AKQEAgLTM3OSw3ICszODEsNyBAQAogCQlnYW1lcG9ydF9mcmVlX2V2ZW50KGV2ZW50KTsKIAl9CiAKLQl1cCgmZ2FtZXBvcnRfc2VtKTsKKwltdXRleF91bmxvY2soJmdhbWVwb3J0X211dGV4KTsKIH0KIAogLyoKQEAgLTQ2NCw3ICs0NjYsNyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSgmZ2FtZXBvcnRfc2VtKTsKKwlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdhbWVwb3J0X211dGV4KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC00ODQsNyArNDg2LDcgQEAKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAl9CiAKLQl1cCgmZ2FtZXBvcnRfc2VtKTsKKwltdXRleF91bmxvY2soJmdhbWVwb3J0X211dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC01MjEsNyArNTIzLDcgQEAKIAogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAKLQlpbml0X01VVEVYKCZnYW1lcG9ydC0+ZHJ2X3NlbSk7CisJbXV0ZXhfaW5pdCgmZ2FtZXBvcnQtPmRydl9tdXRleCk7CiAJZGV2aWNlX2luaXRpYWxpemUoJmdhbWVwb3J0LT5kZXYpOwogCXNucHJpbnRmKGdhbWVwb3J0LT5kZXYuYnVzX2lkLCBzaXplb2YoZ2FtZXBvcnQtPmRldi5idXNfaWQpLAogCQkgImdhbWVwb3J0JWx1IiwgKHVuc2lnbmVkIGxvbmcpYXRvbWljX2luY19yZXR1cm4oJmdhbWVwb3J0X25vKSAtIDEpOwpAQCAtNjYxLDEwICs2NjMsMTAgQEAKICAqLwogdm9pZCBnYW1lcG9ydF91bnJlZ2lzdGVyX3BvcnQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCkKIHsKLQlkb3duKCZnYW1lcG9ydF9zZW0pOworCW11dGV4X2xvY2soJmdhbWVwb3J0X211dGV4KTsKIAlnYW1lcG9ydF9kaXNjb25uZWN0X3BvcnQoZ2FtZXBvcnQpOwogCWdhbWVwb3J0X2Rlc3Ryb3lfcG9ydChnYW1lcG9ydCk7Ci0JdXAoJmdhbWVwb3J0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZnYW1lcG9ydF9tdXRleCk7CiB9CiAKIApAQCAtNzE3LDcgKzcxOSw3IEBACiB7CiAJc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydDsKIAotCWRvd24oJmdhbWVwb3J0X3NlbSk7CisJbXV0ZXhfbG9jaygmZ2FtZXBvcnRfbXV0ZXgpOwogCWRydi0+aWdub3JlID0gMTsJLyogc28gZ2FtZXBvcnRfZmluZF9kcml2ZXIgaWdub3JlcyBpdCAqLwogCiBzdGFydF9vdmVyOgpAQCAtNzMxLDcgKzczMyw3IEBACiAJfQogCiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKLQl1cCgmZ2FtZXBvcnRfc2VtKTsKKwltdXRleF91bmxvY2soJmdhbWVwb3J0X211dGV4KTsKIH0KIAogc3RhdGljIGludCBnYW1lcG9ydF9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQpAQCAtNzQzLDkgKzc0NSw5IEBACiAKIHN0YXRpYyB2b2lkIGdhbWVwb3J0X3NldF9kcnYoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KQogewotCWRvd24oJmdhbWVwb3J0LT5kcnZfc2VtKTsKKwltdXRleF9sb2NrKCZnYW1lcG9ydC0+ZHJ2X211dGV4KTsKIAlnYW1lcG9ydC0+ZHJ2ID0gZHJ2OwotCXVwKCZnYW1lcG9ydC0+ZHJ2X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZnYW1lcG9ydC0+ZHJ2X211dGV4KTsKIH0KIAogaW50IGdhbWVwb3J0X29wZW4oc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2LCBpbnQgbW9kZSkKQEAgLTc5Niw1ICs3OTgsNSBAQAogCWt0aHJlYWRfc3RvcChnYW1lcG9ydF90YXNrKTsKIH0KIAotbW9kdWxlX2luaXQoZ2FtZXBvcnRfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwoZ2FtZXBvcnRfaW5pdCk7CiBtb2R1bGVfZXhpdChnYW1lcG9ydF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYwppbmRleCBkMmU1NWRjLi4zZTJkMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L25zNTU4LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9uczU1OC5jCkBAIC0yNTIsMTQgKzI1MiwxNCBAQAogCiAjZW5kaWYKIAotc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZCA9IDA7Ci0KIHN0YXRpYyBpbnQgX19pbml0IG5zNTU4X2luaXQodm9pZCkKIHsKIAlpbnQgaSA9IDA7CisJaW50IGVycm9yOwogCi0JaWYgKHBucF9yZWdpc3Rlcl9kcml2ZXIoJm5zNTU4X3BucF9kcml2ZXIpID49IDApCi0JCXBucF9yZWdpc3RlcmVkID0gMTsKKwllcnJvciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJm5zNTU4X3BucF9kcml2ZXIpOworCWlmIChlcnJvciAmJiBlcnJvciAhPSAtRU5PREVWKQkvKiBzaG91bGQgYmUgRU5PU1lTIHJlYWxseSAqLworCQlyZXR1cm4gZXJyb3I7CiAKIC8qCiAgKiBQcm9iZSBJU0EgcG9ydHMgYWZ0ZXIgUG5QLCBzbyB0aGF0IFBuUCBwb3J0cyB0aGF0IGFyZSBhbHJlYWR5CkBAIC0yNzAsNyArMjcwLDcgQEAKIAl3aGlsZSAobnM1NThfaXNhX3BvcnRsaXN0W2ldKQogCQluczU1OF9pc2FfcHJvYmUobnM1NThfaXNhX3BvcnRsaXN0W2krK10pOwogCi0JcmV0dXJuIChsaXN0X2VtcHR5KCZuczU1OF9saXN0KSAmJiAhcG5wX3JlZ2lzdGVyZWQpID8gLUVOT0RFViA6IDA7CisJcmV0dXJuIGxpc3RfZW1wdHkoJm5zNTU4X2xpc3QpICYmIGVycm9yID8gLUVOT0RFViA6IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuczU1OF9leGl0KHZvaWQpCkBAIC0yODMsOCArMjgzLDcgQEAKIAkJa2ZyZWUobnM1NTgpOwogCX0KIAotCWlmIChwbnBfcmVnaXN0ZXJlZCkKLQkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZuczU1OF9wbnBfZHJpdmVyKTsKKwlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJm5zNTU4X3BucF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChuczU1OF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBmOGFmMDk0Li4zMDM4YzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xOCw5ICsxOCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklucHV0IGNvcmUiKTsKQEAgLTE1Myw2ICsxNTUsOSBAQAogCQkJaWYgKGNvZGUgPiBTTkRfTUFYIHx8ICF0ZXN0X2JpdChjb2RlLCBkZXYtPnNuZGJpdCkpCiAJCQkJcmV0dXJuOwogCisJCQlpZiAoISF0ZXN0X2JpdChjb2RlLCBkZXYtPnNuZCkgIT0gISF2YWx1ZSkKKwkJCQljaGFuZ2VfYml0KGNvZGUsIGRldi0+c25kKTsKKwogCQkJaWYgKGRldi0+ZXZlbnQpIGRldi0+ZXZlbnQoZGV2LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CiAKIAkJCWJyZWFrOwpAQCAtMjI0LDcgKzIyOSw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gaGFuZGxlLT5kZXY7CiAJaW50IGVycjsKIAotCWVyciA9IGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5zZW0pOworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5tdXRleCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjM2LDcgKzI0MSw3IEBACiAJaWYgKGVycikKIAkJaGFuZGxlLT5vcGVuLS07CiAKLQl1cCgmZGV2LT5zZW0pOworCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjU1LDEzICsyNjAsMTMgQEAKIAogCWlucHV0X3JlbGVhc2VfZGV2aWNlKGhhbmRsZSk7CiAKLQlkb3duKCZkZXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAKIAlpZiAoIS0tZGV2LT51c2VycyAmJiBkZXYtPmNsb3NlKQogCQlkZXYtPmNsb3NlKGRldik7CiAJaGFuZGxlLT5vcGVuLS07CiAKLQl1cCgmZGV2LT5zZW0pOworCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlucHV0X2xpbmtfaGFuZGxlKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSkKQEAgLTI4NCwxOSArMjg5LDE5IEBACiAJZm9yICg7IGlkLT5mbGFncyB8fCBpZC0+ZHJpdmVyX2luZm87IGlkKyspIHsKIAogCQlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX0JVUykKLQkJCWlmIChpZC0+aWQuYnVzdHlwZSAhPSBkZXYtPmlkLmJ1c3R5cGUpCisJCQlpZiAoaWQtPmJ1c3R5cGUgIT0gZGV2LT5pZC5idXN0eXBlKQogCQkJCWNvbnRpbnVlOwogCiAJCWlmIChpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SKQotCQkJaWYgKGlkLT5pZC52ZW5kb3IgIT0gZGV2LT5pZC52ZW5kb3IpCisJCQlpZiAoaWQtPnZlbmRvciAhPSBkZXYtPmlkLnZlbmRvcikKIAkJCQljb250aW51ZTsKIAogCQlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX1BST0RVQ1QpCi0JCQlpZiAoaWQtPmlkLnByb2R1Y3QgIT0gZGV2LT5pZC5wcm9kdWN0KQorCQkJaWYgKGlkLT5wcm9kdWN0ICE9IGRldi0+aWQucHJvZHVjdCkKIAkJCQljb250aW51ZTsKIAogCQlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFUlNJT04pCi0JCQlpZiAoaWQtPmlkLnZlcnNpb24gIT0gZGV2LT5pZC52ZXJzaW9uKQorCQkJaWYgKGlkLT52ZXJzaW9uICE9IGRldi0+aWQudmVyc2lvbikKIAkJCQljb250aW51ZTsKIAogCQlNQVRDSF9CSVQoZXZiaXQsICBFVl9NQVgpOwpAQCAtMzE1LDIxICszMjAsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGlucHV0X3ByaW50X2JpdG1hcChjaGFyICpidWYsIGludCBidWZfc2l6ZSwgdW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgbWF4KQotewotCWludCBpOwotCWludCBsZW4gPSAwOwotCi0JZm9yIChpID0gTkJJVFMobWF4KSAtIDE7IGkgPiAwOyBpLS0pCi0JCWlmIChiaXRtYXBbaV0pCi0JCQlicmVhazsKLQotCWZvciAoOyBpID49IDA7IGktLSkKLQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KGJ1Zl9zaXplIC0gbGVuLCAwKSwKLQkJCQkiJWx4JXMiLCBiaXRtYXBbaV0sIGkgPiAwID8gIiAiIDogIiIpOwotCXJldHVybiBsZW47Ci19Ci0KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2J1c19pbnB1dF9kaXI7CkBAIC0zNDIsNyArMzMyLDcgQEAKIAl3YWtlX3VwKCZpbnB1dF9kZXZpY2VzX3BvbGxfd2FpdCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRfZGV2aWNlc19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQorc3RhdGljIHVuc2lnbmVkIGludCBpbnB1dF9wcm9jX2RldmljZXNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlpbnQgc3RhdGUgPSBpbnB1dF9kZXZpY2VzX3N0YXRlOwogCXBvbGxfd2FpdChmaWxlLCAmaW5wdXRfZGV2aWNlc19wb2xsX3dhaXQsIHdhaXQpOwpAQCAtMzUxLDExNSArMzQxLDE3MSBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFNQUklOVEZfQklUKGV2LCBibSkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJCOiAlcz0iLCAjZXYpOwkJXAotCQlsZW4gKz0gaW5wdXRfcHJpbnRfYml0bWFwKGJ1ZiArIGxlbiwgSU5UX01BWCwJCVwKLQkJCQkJZGV2LT5ibSMjYml0LCBldiMjX01BWCk7CVwKLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG4iKTsJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBURVNUX0FORF9TUFJJTlRGX0JJVChldiwgYm0pCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAodGVzdF9iaXQoRVZfIyNldiwgZGV2LT5ldmJpdCkpCQkJXAotCQkJU1BSSU5URl9CSVQoZXYsIGJtKTsJCQkJXAotCX0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbnQgaW5wdXRfZGV2aWNlc19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBwb3MsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9nZXRfbnRoX2VsZW1lbnQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CisJbG9mZl90IGkgPSAwOworCisJbGlzdF9mb3JfZWFjaChub2RlLCBsaXN0KQorCQlpZiAoaSsrID09ICpwb3MpCisJCQlyZXR1cm4gbm9kZTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9nZXRfbmV4dF9lbGVtZW50KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQsIGxvZmZfdCAqcG9zKQoreworCWlmIChlbGVtZW50LT5uZXh0ID09IGxpc3QpCisJCXJldHVybiBOVUxMOworCisJKysoKnBvcyk7CisJcmV0dXJuIGVsZW1lbnQtPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkICppbnB1dF9kZXZpY2VzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJLyogYWNxdWlyZSBsb2NrIGhlcmUgLi4uIFllcywgd2UgZG8gbmVlZCBsb2NraW5nLCBJIGtub3dpLCBJIGtub3cuLi4gKi8KKworCXJldHVybiBsaXN0X2dldF9udGhfZWxlbWVudCgmaW5wdXRfZGV2X2xpc3QsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkICppbnB1dF9kZXZpY2VzX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gbGlzdF9nZXRfbmV4dF9lbGVtZW50KCZpbnB1dF9kZXZfbGlzdCwgdiwgcG9zKTsKK30KKworc3RhdGljIHZvaWQgaW5wdXRfZGV2aWNlc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwkvKiByZWxlYXNlIGxvY2sgaGVyZSAqLworfQorCitzdGF0aWMgdm9pZCBpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IG1heCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IE5CSVRTKG1heCkgLSAxOyBpID4gMDsgaS0tKQorCQlpZiAoYml0bWFwW2ldKQorCQkJYnJlYWs7CisKKwlzZXFfcHJpbnRmKHNlcSwgIkI6ICVzPSIsIG5hbWUpOworCWZvciAoOyBpID49IDA7IGktLSkKKwkJc2VxX3ByaW50ZihzZXEsICIlbHglcyIsIGJpdG1hcFtpXSwgaSA+IDAgPyAiICIgOiAiIik7CisJc2VxX3B1dGMoc2VxLCAnXG4nKTsKK30KKworc3RhdGljIGludCBpbnB1dF9kZXZpY2VzX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih2LCBzdHJ1Y3QgaW5wdXRfZGV2LCBub2RlKTsKKwljb25zdCBjaGFyICpwYXRoID0ga29iamVjdF9nZXRfcGF0aCgmZGV2LT5jZGV2LmtvYmosIEdGUF9LRVJORUwpOwogCXN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZTsKLQljb25zdCBjaGFyICpwYXRoOwogCi0Jb2ZmX3QgYXQgPSAwOwotCWludCBsZW4sIGNudCA9IDA7CisJc2VxX3ByaW50ZihzZXEsICJJOiBCdXM9JTA0eCBWZW5kb3I9JTA0eCBQcm9kdWN0PSUwNHggVmVyc2lvbj0lMDR4XG4iLAorCQkgICBkZXYtPmlkLmJ1c3R5cGUsIGRldi0+aWQudmVuZG9yLCBkZXYtPmlkLnByb2R1Y3QsIGRldi0+aWQudmVyc2lvbik7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmlucHV0X2Rldl9saXN0LCBub2RlKSB7CisJc2VxX3ByaW50ZihzZXEsICJOOiBOYW1lPVwiJXNcIlxuIiwgZGV2LT5uYW1lID8gZGV2LT5uYW1lIDogIiIpOworCXNlcV9wcmludGYoc2VxLCAiUDogUGh5cz0lc1xuIiwgZGV2LT5waHlzID8gZGV2LT5waHlzIDogIiIpOworCXNlcV9wcmludGYoc2VxLCAiUzogU3lzZnM9JXNcbiIsIHBhdGggPyBwYXRoIDogIiIpOworCXNlcV9wcmludGYoc2VxLCAiSDogSGFuZGxlcnM9Iik7CiAKLQkJcGF0aCA9IGtvYmplY3RfZ2V0X3BhdGgoJmRldi0+Y2Rldi5rb2JqLCBHRlBfS0VSTkVMKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZSwgJmRldi0+aF9saXN0LCBkX25vZGUpCisJCXNlcV9wcmludGYoc2VxLCAiJXMgIiwgaGFuZGxlLT5uYW1lKTsKKwlzZXFfcHV0YyhzZXEsICdcbicpOwogCi0JCWxlbiA9IHNwcmludGYoYnVmLCAiSTogQnVzPSUwNHggVmVuZG9yPSUwNHggUHJvZHVjdD0lMDR4IFZlcnNpb249JTA0eFxuIiwKLQkJCWRldi0+aWQuYnVzdHlwZSwgZGV2LT5pZC52ZW5kb3IsIGRldi0+aWQucHJvZHVjdCwgZGV2LT5pZC52ZXJzaW9uKTsKKwlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIkVWIiwgZGV2LT5ldmJpdCwgRVZfTUFYKTsKKwlpZiAodGVzdF9iaXQoRVZfS0VZLCBkZXYtPmV2Yml0KSkKKwkJaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzZXEsICJLRVkiLCBkZXYtPmtleWJpdCwgS0VZX01BWCk7CisJaWYgKHRlc3RfYml0KEVWX1JFTCwgZGV2LT5ldmJpdCkpCisJCWlucHV0X3NlcV9wcmludF9iaXRtYXAoc2VxLCAiUkVMIiwgZGV2LT5yZWxiaXQsIFJFTF9NQVgpOworCWlmICh0ZXN0X2JpdChFVl9BQlMsIGRldi0+ZXZiaXQpKQorCQlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIkFCUyIsIGRldi0+YWJzYml0LCBBQlNfTUFYKTsKKwlpZiAodGVzdF9iaXQoRVZfTVNDLCBkZXYtPmV2Yml0KSkKKwkJaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzZXEsICJNU0MiLCBkZXYtPm1zY2JpdCwgTVNDX01BWCk7CisJaWYgKHRlc3RfYml0KEVWX0xFRCwgZGV2LT5ldmJpdCkpCisJCWlucHV0X3NlcV9wcmludF9iaXRtYXAoc2VxLCAiTEVEIiwgZGV2LT5sZWRiaXQsIExFRF9NQVgpOworCWlmICh0ZXN0X2JpdChFVl9TTkQsIGRldi0+ZXZiaXQpKQorCQlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIlNORCIsIGRldi0+c25kYml0LCBTTkRfTUFYKTsKKwlpZiAodGVzdF9iaXQoRVZfRkYsIGRldi0+ZXZiaXQpKQorCQlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIkZGIiwgZGV2LT5mZmJpdCwgRkZfTUFYKTsKKwlpZiAodGVzdF9iaXQoRVZfU1csIGRldi0+ZXZiaXQpKQorCQlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIlNXIiwgZGV2LT5zd2JpdCwgU1dfTUFYKTsKIAotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJOOiBOYW1lPVwiJXNcIlxuIiwgZGV2LT5uYW1lID8gZGV2LT5uYW1lIDogIiIpOwotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJQOiBQaHlzPSVzXG4iLCBkZXYtPnBoeXMgPyBkZXYtPnBoeXMgOiAiIik7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlM6IFN5c2ZzPSVzXG4iLCBwYXRoID8gcGF0aCA6ICIiKTsKLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiSDogSGFuZGxlcnM9Iik7CisJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZSwgJmRldi0+aF9saXN0LCBkX25vZGUpCi0JCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlcyAiLCBoYW5kbGUtPm5hbWUpOwotCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlxuIik7Ci0KLQkJU1BSSU5URl9CSVQoRVYsIGV2KTsKLQkJVEVTVF9BTkRfU1BSSU5URl9CSVQoS0VZLCBrZXkpOwotCQlURVNUX0FORF9TUFJJTlRGX0JJVChSRUwsIHJlbCk7Ci0JCVRFU1RfQU5EX1NQUklOVEZfQklUKEFCUywgYWJzKTsKLQkJVEVTVF9BTkRfU1BSSU5URl9CSVQoTVNDLCBtc2MpOwotCQlURVNUX0FORF9TUFJJTlRGX0JJVChMRUQsIGxlZCk7Ci0JCVRFU1RfQU5EX1NQUklOVEZfQklUKFNORCwgc25kKTsKLQkJVEVTVF9BTkRfU1BSSU5URl9CSVQoRkYsIGZmKTsKLQkJVEVTVF9BTkRfU1BSSU5URl9CSVQoU1csIHN3KTsKLQotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcbiIpOwotCi0JCWF0ICs9IGxlbjsKLQotCQlpZiAoYXQgPj0gcG9zKSB7Ci0JCQlpZiAoISpzdGFydCkgewotCQkJCSpzdGFydCA9IGJ1ZiArIChwb3MgLSAoYXQgLSBsZW4pKTsKLQkJCQljbnQgPSBhdCAtIHBvczsKLQkJCX0gZWxzZSAgY250ICs9IGxlbjsKLQkJCWJ1ZiArPSBsZW47Ci0JCQlpZiAoY250ID49IGNvdW50KQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJa2ZyZWUocGF0aCk7Ci0JfQotCi0JaWYgKCZkZXYtPm5vZGUgPT0gJmlucHV0X2Rldl9saXN0KQotCQkqZW9mID0gMTsKLQotCXJldHVybiAoY291bnQgPiBjbnQpID8gY250IDogY291bnQ7CisJa2ZyZWUocGF0aCk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5wdXRfaGFuZGxlcnNfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgcG9zLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbnB1dF9kZXZpY2VzX3NlcV9vcHMgPSB7CisJLnN0YXJ0CT0gaW5wdXRfZGV2aWNlc19zZXFfc3RhcnQsCisJLm5leHQJPSBpbnB1dF9kZXZpY2VzX3NlcV9uZXh0LAorCS5zdG9wCT0gaW5wdXRfZGV2aWNlc19zZXFfc3RvcCwKKwkuc2hvdwk9IGlucHV0X2RldmljZXNfc2VxX3Nob3csCit9OworCitzdGF0aWMgaW50IGlucHV0X3Byb2NfZGV2aWNlc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBpbnB1dF9oYW5kbGVyICpoYW5kbGVyOwotCi0Jb2ZmX3QgYXQgPSAwOwotCWludCBsZW4gPSAwLCBjbnQgPSAwOwotCWludCBpID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoaGFuZGxlciwgJmlucHV0X2hhbmRsZXJfbGlzdCwgbm9kZSkgewotCi0JCWlmIChoYW5kbGVyLT5mb3BzKQotCQkJbGVuID0gc3ByaW50ZihidWYsICJOOiBOdW1iZXI9JWQgTmFtZT0lcyBNaW5vcj0lZFxuIiwKLQkJCQlpKyssIGhhbmRsZXItPm5hbWUsIGhhbmRsZXItPm1pbm9yKTsKLQkJZWxzZQotCQkJbGVuID0gc3ByaW50ZihidWYsICJOOiBOdW1iZXI9JWQgTmFtZT0lc1xuIiwKLQkJCQlpKyssIGhhbmRsZXItPm5hbWUpOwotCi0JCWF0ICs9IGxlbjsKLQotCQlpZiAoYXQgPj0gcG9zKSB7Ci0JCQlpZiAoISpzdGFydCkgewotCQkJCSpzdGFydCA9IGJ1ZiArIChwb3MgLSAoYXQgLSBsZW4pKTsKLQkJCQljbnQgPSBhdCAtIHBvczsKLQkJCX0gZWxzZSAgY250ICs9IGxlbjsKLQkJCWJ1ZiArPSBsZW47Ci0JCQlpZiAoY250ID49IGNvdW50KQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICgmaGFuZGxlci0+bm9kZSA9PSAmaW5wdXRfaGFuZGxlcl9saXN0KQotCQkqZW9mID0gMTsKLQotCXJldHVybiAoY291bnQgPiBjbnQpID8gY250IDogY291bnQ7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbnB1dF9kZXZpY2VzX3NlcV9vcHMpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbnB1dF9maWxlb3BzOworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW5wdXRfZGV2aWNlc19maWxlb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpbnB1dF9wcm9jX2RldmljZXNfb3BlbiwKKwkucG9sbAkJPSBpbnB1dF9wcm9jX2RldmljZXNfcG9sbCwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgKmlucHV0X2hhbmRsZXJzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJLyogYWNxdWlyZSBsb2NrIGhlcmUgLi4uIFllcywgd2UgZG8gbmVlZCBsb2NraW5nLCBJIGtub3dpLCBJIGtub3cuLi4gKi8KKwlzZXEtPnByaXZhdGUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSpwb3M7CisJcmV0dXJuIGxpc3RfZ2V0X250aF9lbGVtZW50KCZpbnB1dF9oYW5kbGVyX2xpc3QsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkICppbnB1dF9oYW5kbGVyc19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc2VxLT5wcml2YXRlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykoKnBvcyArIDEpOworCXJldHVybiBsaXN0X2dldF9uZXh0X2VsZW1lbnQoJmlucHV0X2hhbmRsZXJfbGlzdCwgdiwgcG9zKTsKK30KKworc3RhdGljIHZvaWQgaW5wdXRfaGFuZGxlcnNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJLyogcmVsZWFzZSBsb2NrIGhlcmUgKi8KK30KKworc3RhdGljIGludCBpbnB1dF9oYW5kbGVyc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciA9IGNvbnRhaW5lcl9vZih2LCBzdHJ1Y3QgaW5wdXRfaGFuZGxlciwgbm9kZSk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIk46IE51bWJlcj0lbGQgTmFtZT0lcyIsCisJCSAgICh1bnNpZ25lZCBsb25nKXNlcS0+cHJpdmF0ZSwgaGFuZGxlci0+bmFtZSk7CisJaWYgKGhhbmRsZXItPmZvcHMpCisJCXNlcV9wcmludGYoc2VxLCAiIE1pbm9yPSVkIiwgaGFuZGxlci0+bWlub3IpOworCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW5wdXRfaGFuZGxlcnNfc2VxX29wcyA9IHsKKwkuc3RhcnQJPSBpbnB1dF9oYW5kbGVyc19zZXFfc3RhcnQsCisJLm5leHQJPSBpbnB1dF9oYW5kbGVyc19zZXFfbmV4dCwKKwkuc3RvcAk9IGlucHV0X2hhbmRsZXJzX3NlcV9zdG9wLAorCS5zaG93CT0gaW5wdXRfaGFuZGxlcnNfc2VxX3Nob3csCit9OworCitzdGF0aWMgaW50IGlucHV0X3Byb2NfaGFuZGxlcnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmlucHV0X2hhbmRsZXJzX3NlcV9vcHMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbnB1dF9oYW5kbGVyc19maWxlb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpbnB1dF9wcm9jX2hhbmRsZXJzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGlucHV0X3Byb2NfaW5pdCh2b2lkKQogewpAQCAtNDcxLDIwICs1MTcsMTkgQEAKIAogCXByb2NfYnVzX2lucHV0X2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCWVudHJ5ID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZGV2aWNlcyIsIDAsIHByb2NfYnVzX2lucHV0X2RpciwgaW5wdXRfZGV2aWNlc19yZWFkLCBOVUxMKTsKKwllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZXZpY2VzIiwgMCwgcHJvY19idXNfaW5wdXRfZGlyKTsKIAlpZiAoIWVudHJ5KQogCQlnb3RvIGZhaWwxOwogCiAJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JaW5wdXRfZmlsZW9wcyA9ICplbnRyeS0+cHJvY19mb3BzOwotCWlucHV0X2ZpbGVvcHMucG9sbCA9IGlucHV0X2RldmljZXNfcG9sbDsKLQllbnRyeS0+cHJvY19mb3BzID0gJmlucHV0X2ZpbGVvcHM7CisJZW50cnktPnByb2NfZm9wcyA9ICZpbnB1dF9kZXZpY2VzX2ZpbGVvcHM7CiAKLQllbnRyeSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImhhbmRsZXJzIiwgMCwgcHJvY19idXNfaW5wdXRfZGlyLCBpbnB1dF9oYW5kbGVyc19yZWFkLCBOVUxMKTsKKwllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJoYW5kbGVycyIsIDAsIHByb2NfYnVzX2lucHV0X2Rpcik7CiAJaWYgKCFlbnRyeSkKIAkJZ290byBmYWlsMjsKIAogCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOworCWVudHJ5LT5wcm9jX2ZvcHMgPSAmaW5wdXRfaGFuZGxlcnNfZmlsZW9wczsKIAogCXJldHVybiAwOwogCkBAIC01MTIsMTMgKzU1NywxNCBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IHRvX2lucHV0X2RldihkZXYpOwkJCVwKIAlpbnQgcmV0dmFsOwkJCQkJCQkJXAogCQkJCQkJCQkJCVwKLQlyZXR2YWwgPSBkb3duX2ludGVycnVwdGlibGUoJmlucHV0X2Rldi0+c2VtKTsJCQkJXAorCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfZGV2LT5tdXRleCk7CQkJXAogCWlmIChyZXR2YWwpCQkJCQkJCQlcCiAJCXJldHVybiByZXR2YWw7CQkJCQkJCVwKIAkJCQkJCQkJCQlcCi0JcmV0dmFsID0gc3ByaW50ZihidWYsICIlc1xuIiwgaW5wdXRfZGV2LT5uYW1lID8gaW5wdXRfZGV2LT5uYW1lIDogIiIpOwlcCisJcmV0dmFsID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAkJCQkJXAorCQkJICAgIiVzXG4iLCBpbnB1dF9kZXYtPm5hbWUgPyBpbnB1dF9kZXYtPm5hbWUgOiAiIik7CVwKIAkJCQkJCQkJCQlcCi0JdXAoJmlucHV0X2Rldi0+c2VtKTsJCQkJCQkJXAorCW11dGV4X3VubG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CQkJCQlcCiAJCQkJCQkJCQkJXAogCXJldHVybiByZXR2YWw7CQkJCQkJCQlcCiB9CQkJCQkJCQkJCVwKQEAgLTUyOCw0NiArNTc0LDUxIEBACiBJTlBVVF9ERVZfU1RSSU5HX0FUVFJfU0hPVyhwaHlzKTsKIElOUFVUX0RFVl9TVFJJTkdfQVRUUl9TSE9XKHVuaXEpOwogCi1zdGF0aWMgaW50IHByaW50X21vZGFsaWFzX2JpdHMoY2hhciAqYnVmLCBpbnQgc2l6ZSwgY2hhciBwcmVmaXgsIHVuc2lnbmVkIGxvbmcgKmFyciwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KQorc3RhdGljIGludCBpbnB1dF9wcmludF9tb2RhbGlhc19iaXRzKGNoYXIgKmJ1ZiwgaW50IHNpemUsCisJCQkJICAgICBjaGFyIG5hbWUsIHVuc2lnbmVkIGxvbmcgKmJtLAorCQkJCSAgICAgdW5zaWduZWQgaW50IG1pbl9iaXQsIHVuc2lnbmVkIGludCBtYXhfYml0KQogewotCWludCBsZW4sIGk7CisJaW50IGxlbiA9IDAsIGk7CiAKLQlsZW4gPSBzbnByaW50ZihidWYsIHNpemUsICIlYyIsIHByZWZpeCk7Ci0JZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCi0JCWlmIChhcnJbTE9ORyhpKV0gJiBCSVQoaSkpCi0JCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAiJVgsIiwgaSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiwgbWF4KHNpemUsIDApLCAiJWMiLCBuYW1lKTsKKwlmb3IgKGkgPSBtaW5fYml0OyBpIDwgbWF4X2JpdDsgaSsrKQorCQlpZiAoYm1bTE9ORyhpKV0gJiBCSVQoaSkpCisJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoc2l6ZSAtIGxlbiwgMCksICIlWCwiLCBpKTsKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50IHByaW50X21vZGFsaWFzKGNoYXIgKmJ1ZiwgaW50IHNpemUsIHN0cnVjdCBpbnB1dF9kZXYgKmlkKQorc3RhdGljIGludCBpbnB1dF9wcmludF9tb2RhbGlhcyhjaGFyICpidWYsIGludCBzaXplLCBzdHJ1Y3QgaW5wdXRfZGV2ICppZCwKKwkJCQlpbnQgYWRkX2NyKQogewogCWludCBsZW47CiAKLQlsZW4gPSBzbnByaW50ZihidWYsIHNpemUsICJpbnB1dDpiJTA0WHYlMDRYcCUwNFhlJTA0WC0iLAotCQkgICAgICAgaWQtPmlkLmJ1c3R5cGUsCi0JCSAgICAgICBpZC0+aWQudmVuZG9yLAotCQkgICAgICAgaWQtPmlkLnByb2R1Y3QsCi0JCSAgICAgICBpZC0+aWQudmVyc2lvbik7CisJbGVuID0gc25wcmludGYoYnVmLCBtYXgoc2l6ZSwgMCksCisJCSAgICAgICAiaW5wdXQ6YiUwNFh2JTA0WHAlMDRYZSUwNFgtIiwKKwkJICAgICAgIGlkLT5pZC5idXN0eXBlLCBpZC0+aWQudmVuZG9yLAorCQkgICAgICAgaWQtPmlkLnByb2R1Y3QsIGlkLT5pZC52ZXJzaW9uKTsKIAotCWxlbiArPSBwcmludF9tb2RhbGlhc19iaXRzKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgJ2UnLCBpZC0+ZXZiaXQsCi0JCQkJICAgMCwgRVZfTUFYKTsKLQlsZW4gKz0gcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sICdrJywgaWQtPmtleWJpdCwKLQkJCQkgICBLRVlfTUlOX0lOVEVSRVNUSU5HLCBLRVlfTUFYKTsKLQlsZW4gKz0gcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sICdyJywgaWQtPnJlbGJpdCwKLQkJCQkgICAwLCBSRUxfTUFYKTsKLQlsZW4gKz0gcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sICdhJywgaWQtPmFic2JpdCwKLQkJCQkgICAwLCBBQlNfTUFYKTsKLQlsZW4gKz0gcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sICdtJywgaWQtPm1zY2JpdCwKLQkJCQkgICAwLCBNU0NfTUFYKTsKLQlsZW4gKz0gcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sICdsJywgaWQtPmxlZGJpdCwKLQkJCQkgICAwLCBMRURfTUFYKTsKLQlsZW4gKz0gcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sICdzJywgaWQtPnNuZGJpdCwKLQkJCQkgICAwLCBTTkRfTUFYKTsKLQlsZW4gKz0gcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sICdmJywgaWQtPmZmYml0LAotCQkJCSAgIDAsIEZGX01BWCk7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAndycsIGlkLT5zd2JpdCwKLQkJCQkgICAwLCBTV19NQVgpOworCWxlbiArPSBpbnB1dF9wcmludF9tb2RhbGlhc19iaXRzKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCQknZScsIGlkLT5ldmJpdCwgMCwgRVZfTUFYKTsKKwlsZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJJ2snLCBpZC0+a2V5Yml0LCBLRVlfTUlOX0lOVEVSRVNUSU5HLCBLRVlfTUFYKTsKKwlsZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJJ3InLCBpZC0+cmVsYml0LCAwLCBSRUxfTUFYKTsKKwlsZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJJ2EnLCBpZC0+YWJzYml0LCAwLCBBQlNfTUFYKTsKKwlsZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJJ20nLCBpZC0+bXNjYml0LCAwLCBNU0NfTUFYKTsKKwlsZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJJ2wnLCBpZC0+bGVkYml0LCAwLCBMRURfTUFYKTsKKwlsZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJJ3MnLCBpZC0+c25kYml0LCAwLCBTTkRfTUFYKTsKKwlsZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJJ2YnLCBpZC0+ZmZiaXQsIDAsIEZGX01BWCk7CisJbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSd3JywgaWQtPnN3Yml0LCAwLCBTV19NQVgpOworCisJaWYgKGFkZF9jcikKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KHNpemUgLSBsZW4sIDApLCAiXG4iKTsKKwogCXJldHVybiBsZW47CiB9CiAKQEAgLTU3Niw5ICs2MjcsOSBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlkID0gdG9faW5wdXRfZGV2KGRldik7CiAJc3NpemVfdCBsZW47CiAKLQlsZW4gPSBwcmludF9tb2RhbGlhcyhidWYsIFBBR0VfU0laRSwgaWQpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sICJcbiIpOwotCXJldHVybiBsZW47CisJbGVuID0gaW5wdXRfcHJpbnRfbW9kYWxpYXMoYnVmLCBQQUdFX1NJWkUsIGlkLCAxKTsKKworCXJldHVybiBtYXhfdChpbnQsIGxlbiwgUEFHRV9TSVpFKTsKIH0KIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgaW5wdXRfZGV2X3Nob3dfbW9kYWxpYXMsIE5VTEwpOwogCkBAIC01OTgsNyArNjQ5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGlucHV0X2Rldl9zaG93X2lkXyMjbmFtZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCQlcCiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gdG9faW5wdXRfZGV2KGRldik7CQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwNHhcbiIsIGlucHV0X2Rldi0+aWQubmFtZSk7CQkJXAorCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDR4XG4iLCBpbnB1dF9kZXYtPmlkLm5hbWUpOwkJXAogfQkJCQkJCQkJCQlcCiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgaW5wdXRfZGV2X3Nob3dfaWRfIyNuYW1lLCBOVUxMKTsKIApAQCAtNjIwLDExICs2NzEsMzMgQEAKIAkuYXR0cnMJPSBpbnB1dF9kZXZfaWRfYXR0cnMsCiB9OwogCitzdGF0aWMgaW50IGlucHV0X3ByaW50X2JpdG1hcChjaGFyICpidWYsIGludCBidWZfc2l6ZSwgdW5zaWduZWQgbG9uZyAqYml0bWFwLAorCQkJICAgICAgaW50IG1heCwgaW50IGFkZF9jcikKK3sKKwlpbnQgaTsKKwlpbnQgbGVuID0gMDsKKworCWZvciAoaSA9IE5CSVRTKG1heCkgLSAxOyBpID4gMDsgaS0tKQorCQlpZiAoYml0bWFwW2ldKQorCQkJYnJlYWs7CisKKwlmb3IgKDsgaSA+PSAwOyBpLS0pCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIG1heChidWZfc2l6ZSAtIGxlbiwgMCksCisJCQkJIiVseCVzIiwgYml0bWFwW2ldLCBpID4gMCA/ICIgIiA6ICIiKTsKKworCWlmIChhZGRfY3IpCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIG1heChidWZfc2l6ZSAtIGxlbiwgMCksICJcbiIpOworCisJcmV0dXJuIGxlbjsKK30KKwogI2RlZmluZSBJTlBVVF9ERVZfQ0FQX0FUVFIoZXYsIGJtKQkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90IGlucHV0X2Rldl9zaG93X2NhcF8jI2JtKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQkJCVwKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSB0b19pbnB1dF9kZXYoZGV2KTsJCQlcCi0JcmV0dXJuIGlucHV0X3ByaW50X2JpdG1hcChidWYsIFBBR0VfU0laRSwgaW5wdXRfZGV2LT5ibSMjYml0LCBldiMjX01BWCk7XAorCWludCBsZW4gPSBpbnB1dF9wcmludF9iaXRtYXAoYnVmLCBQQUdFX1NJWkUsCQkJCVwKKwkJCQkgICAgIGlucHV0X2Rldi0+Ym0jI2JpdCwgZXYjI19NQVgsIDEpOwkJXAorCXJldHVybiBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFKTsJCQkJCVwKIH0JCQkJCQkJCQkJXAogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJtLCBTX0lSVUdPLCBpbnB1dF9kZXZfc2hvd19jYXBfIyNibSwgTlVMTCk7CiAKQEAgLTY2OSw4ICs3NDIsOCBAQAogICogZGV2aWNlIGJpdGZpZWxkcy4KICAqLwogc3RhdGljIGludCBpbnB1dF9hZGRfdWV2ZW50X2JtX3ZhcihjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLCBpbnQgKmN1cl9pbmRleCwKLQkJCQkgICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUsIGludCAqY3VyX2xlbiwKLQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgbWF4KQorCQkJCSAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLCBpbnQgKmN1cl9sZW4sCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgbWF4KQogewogCWlmICgqY3VyX2luZGV4ID49IG51bV9lbnZwIC0gMSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NzgsMTIgKzc1MSwzNiBAQAogCWVudnBbKmN1cl9pbmRleF0gPSBidWZmZXIgKyAqY3VyX2xlbjsKIAogCSpjdXJfbGVuICs9IHNucHJpbnRmKGJ1ZmZlciArICpjdXJfbGVuLCBtYXgoYnVmZmVyX3NpemUgLSAqY3VyX2xlbiwgMCksIG5hbWUpOwotCWlmICgqY3VyX2xlbiA+IGJ1ZmZlcl9zaXplKQorCWlmICgqY3VyX2xlbiA+PSBidWZmZXJfc2l6ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkqY3VyX2xlbiArPSBpbnB1dF9wcmludF9iaXRtYXAoYnVmZmVyICsgKmN1cl9sZW4sCiAJCQkJCW1heChidWZmZXJfc2l6ZSAtICpjdXJfbGVuLCAwKSwKLQkJCQkJYml0bWFwLCBtYXgpICsgMTsKKwkJCQkJYml0bWFwLCBtYXgsIDApICsgMTsKKwlpZiAoKmN1cl9sZW4gPiBidWZmZXJfc2l6ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkoKmN1cl9pbmRleCkrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnB1dF9hZGRfdWV2ZW50X21vZGFsaWFzX3ZhcihjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLCBpbnQgKmN1cl9pbmRleCwKKwkJCQkJIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLCBpbnQgKmN1cl9sZW4sCisJCQkJCSBzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJaWYgKCpjdXJfaW5kZXggPj0gbnVtX2VudnAgLSAxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVudnBbKmN1cl9pbmRleF0gPSBidWZmZXIgKyAqY3VyX2xlbjsKKworCSpjdXJfbGVuICs9IHNucHJpbnRmKGJ1ZmZlciArICpjdXJfbGVuLCBtYXgoYnVmZmVyX3NpemUgLSAqY3VyX2xlbiwgMCksCisJCQkgICAgICJNT0RBTElBUz0iKTsKKwlpZiAoKmN1cl9sZW4gPj0gYnVmZmVyX3NpemUpCisJCXJldHVybiAtRU5PTUVNOworCisJKmN1cl9sZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXMoYnVmZmVyICsgKmN1cl9sZW4sCisJCQkJCSBtYXgoYnVmZmVyX3NpemUgLSAqY3VyX2xlbiwgMCksCisJCQkJCSBkZXYsIDApICsgMTsKIAlpZiAoKmN1cl9sZW4gPiBidWZmZXJfc2l6ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTY5Myw3ICs3OTAsNyBAQAogCiAjZGVmaW5lIElOUFVUX0FERF9IT1RQTFVHX1ZBUihmbXQsIHZhbC4uLikJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJaW50IGVyciA9IGFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwJXAorCQlpbnQgZXJyID0gYWRkX3VldmVudF92YXIoZW52cCwgbnVtX2VudnAsICZpLAkJXAogCQkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuLAlcCiAJCQkJCWZtdCwgdmFsKTsJCQlcCiAJCWlmIChlcnIpCQkJCQkJXApAQCAtNzA5LDYgKzgwNiwxNiBAQAogCQkJcmV0dXJuIGVycjsJCQkJCVwKIAl9IHdoaWxlICgwKQogCisjZGVmaW5lIElOUFVUX0FERF9IT1RQTFVHX01PREFMSUFTX1ZBUihkZXYpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBlcnIgPSBpbnB1dF9hZGRfdWV2ZW50X21vZGFsaWFzX3ZhcihlbnZwLAkJXAorCQkJCQludW1fZW52cCwgJmksCQkJXAorCQkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuLAlcCisJCQkJCWRldik7CQkJCVwKKwkJaWYgKGVycikJCQkJCQlcCisJCQlyZXR1cm4gZXJyOwkJCQkJXAorCX0gd2hpbGUgKDApCisKIHN0YXRpYyBpbnQgaW5wdXRfZGV2X3VldmVudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICoqZW52cCwKIAkJCSAgICBpbnQgbnVtX2VudnAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKQogewpAQCAtNzQ0LDkgKzg1MSw3IEBACiAJaWYgKHRlc3RfYml0KEVWX1NXLCBkZXYtPmV2Yml0KSkKIAkJSU5QVVRfQUREX0hPVFBMVUdfQk1fVkFSKCJTVz0iLCBkZXYtPnN3Yml0LCBTV19NQVgpOwogCi0JZW52cFtpKytdID0gYnVmZmVyICsgbGVuOwotCWxlbiArPSBzbnByaW50ZihidWZmZXIgKyBsZW4sIGJ1ZmZlcl9zaXplIC0gbGVuLCAiTU9EQUxJQVM9Iik7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzKGJ1ZmZlciArIGxlbiwgYnVmZmVyX3NpemUgLSBsZW4sIGRldikgKyAxOworCUlOUFVUX0FERF9IT1RQTFVHX01PREFMSUFTX1ZBUihkZXYpOwogCiAJZW52cFtpXSA9IE5VTEw7CiAJcmV0dXJuIDA7CkBAIC03OTAsNyArODk1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaW5pdF9NVVRFWCgmZGV2LT5zZW0pOworCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOwogCXNldF9iaXQoRVZfU1lOLCBkZXYtPmV2Yml0KTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCAyMGUyOTcyLi45NDliZGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKQEAgLTE3MSw5ICsxNzEsOCBAQAogCWlmIChpID49IEpPWURFVl9NSU5PUlMgfHwgIWpveWRldl90YWJsZVtpXSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIShsaXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGpveWRldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgam95ZGV2X2xpc3QpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChsaXN0LCAwLCBzaXplb2Yoc3RydWN0IGpveWRldl9saXN0KSk7CiAKIAlsaXN0LT5qb3lkZXYgPSBqb3lkZXZfdGFibGVbaV07CiAJbGlzdF9hZGRfdGFpbCgmbGlzdC0+bm9kZSwgJmpveWRldl90YWJsZVtpXS0+bGlzdCk7CkBAIC00NTcsOSArNDU2LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCEoam95ZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGpveWRldiksIEdGUF9LRVJORUwpKSkKKwlpZiAoIShqb3lkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgam95ZGV2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoam95ZGV2LCAwLCBzaXplb2Yoc3RydWN0IGpveWRldikpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmpveWRldi0+bGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmam95ZGV2LT53YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jCmluZGV4IGVjNTVhMjkuLjcyNDlkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KQEAgLTUyLDcgKzUzLDcgQEAKIF9fb2Jzb2xldGVfc2V0dXAoImFtaWpveT0iKTsKIAogc3RhdGljIGludCBhbWlqb3lfdXNlZDsKLXN0YXRpYyBERUNMQVJFX01VVEVYKGFtaWpveV9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChhbWlqb3lfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmFtaWpveV9kZXZbMl07CiBzdGF0aWMgY2hhciAqYW1pam95X3BoeXNbMl0gPSB7ICJhbWlqb3kvaW5wdXQwIiwgImFtaWpveS9pbnB1dDEiIH07CiAKQEAgLTg1LDcgKzg2LDcgQEAKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZhbWlqb3lfc2VtKTsKKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFtaWpveV9tdXRleCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtOTcsMTYgKzk4LDE2IEBACiAKIAlhbWlqb3lfdXNlZCsrOwogb3V0OgotCXVwKCZhbWlqb3lfc2VtKTsKKwltdXRleF91bmxvY2soJmFtaWpveV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgYW1pam95X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKLQlkb3duKCZhbWlqb3lfc2VtKTsKKwltdXRleF9sb2NrKCZhbWlqb3lfbXV0ZXgpOwogCWlmICghLS1hbWlqb3lfdXNlZCkKIAkJZnJlZV9pcnEoSVJRX0FNSUdBX1ZFUlRCLCBhbWlqb3lfaW50ZXJydXB0KTsKLQl1cCgmYW1pam95X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZhbWlqb3lfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhbWlqb3lfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9kYjkuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMKaW5kZXggZGNmZmMzNC4uZTYxODk0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9kYjkuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQXRhcmksIEFtc3RyYWQsIENvbW1vZG9yZSwgQW1pZ2EsIFNlZ2EsIGV0Yy4gam95c3RpY2sgZHJpdmVyIik7CkBAIC0xMTEsNyArMTEyLDcgQEAKIAlzdHJ1Y3QgcGFyZGV2aWNlICpwZDsKIAlpbnQgbW9kZTsKIAlpbnQgdXNlZDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJY2hhciBwaHlzW0RCOV9NQVhfREVWSUNFU11bMzJdOwogfTsKIApAQCAtNTI1LDcgKzUyNiw3IEBACiAJc3RydWN0IHBhcnBvcnQgKnBvcnQgPSBkYjktPnBkLT5wb3J0OwogCWludCBlcnI7CiAKLQllcnIgPSBkb3duX2ludGVycnVwdGlibGUoJmRiOS0+c2VtKTsKKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRiOS0+bXV0ZXgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTUzOSw3ICs1NDAsNyBAQAogCQltb2RfdGltZXIoJmRiOS0+dGltZXIsIGppZmZpZXMgKyBEQjlfUkVGUkVTSF9USU1FKTsKIAl9CiAKLQl1cCgmZGI5LT5zZW0pOworCW11dGV4X3VubG9jaygmZGI5LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU0OCwxNCArNTQ5LDE0IEBACiAJc3RydWN0IGRiOSAqZGI5ID0gZGV2LT5wcml2YXRlOwogCXN0cnVjdCBwYXJwb3J0ICpwb3J0ID0gZGI5LT5wZC0+cG9ydDsKIAotCWRvd24oJmRiOS0+c2VtKTsKKwltdXRleF9sb2NrKCZkYjktPm11dGV4KTsKIAlpZiAoIS0tZGI5LT51c2VkKSB7CiAJCWRlbF90aW1lcl9zeW5jKCZkYjktPnRpbWVyKTsKIAkJcGFycG9ydF93cml0ZV9jb250cm9sKHBvcnQsIDB4MDApOwogCQlwYXJwb3J0X2RhdGFfZm9yd2FyZChwb3J0KTsKIAkJcGFycG9ydF9yZWxlYXNlKGRiOS0+cGQpOwogCX0KLQl1cCgmZGI5LT5zZW0pOworCW11dGV4X3VubG9jaygmZGI5LT5tdXRleCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGI5IF9faW5pdCAqZGI5X3Byb2JlKGludCBwYXJwb3J0LCBpbnQgbW9kZSkKQEAgLTYwMyw3ICs2MDQsNyBAQAogCQlnb3RvIGVycl91bnJlZ19wYXJkZXY7CiAJfQogCi0JaW5pdF9NVVRFWCgmZGI5LT5zZW0pOworCW11dGV4X2luaXQoJmRiOS0+bXV0ZXgpOwogCWRiOS0+cGQgPSBwZDsKIAlkYjktPm1vZGUgPSBtb2RlOwogCWluaXRfdGltZXIoJmRiOS0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYwppbmRleCA5MDA1ODdhLi5lY2JkYjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYwpAQCAtNyw2ICs3LDcgQEAKICAqICBCYXNlZCBvbiB0aGUgd29yayBvZjoKICAqCUFuZHJlZSBCb3JybWFubgkJSm9obiBEYWhsc3Ryb20KICAqCURhdmlkIEt1ZGVyCQlOYXRoYW4gSGFuZAorICoJUmFwaGFlbCBBc3NlbmF0CiAgKi8KIAogLyoKQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogTU9EVUxFX0FVVEhPUigiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJORVMsIFNORVMsIE42NCwgTXVsdGlTeXN0ZW0sIFBTWCBnYW1lcGFkIGRyaXZlciIpOwpAQCAtNzIsOCArNzQsOSBAQAogI2RlZmluZSBHQ19ONjQJCTYKICNkZWZpbmUgR0NfUFNYCQk3CiAjZGVmaW5lIEdDX0REUgkJOAorI2RlZmluZSBHQ19TTkVTTU9VU0UJOQogCi0jZGVmaW5lIEdDX01BWAkJOAorI2RlZmluZSBHQ19NQVgJCTkKIAogI2RlZmluZSBHQ19SRUZSRVNIX1RJTUUJSFovMTAwCiAKQEAgLTgzLDcgKzg2LDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAl1bnNpZ25lZCBjaGFyIHBhZHNbR0NfTUFYICsgMV07CiAJaW50IHVzZWQ7Ci0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IG11dGV4IG11dGV4OwogCWNoYXIgcGh5c1tHQ19NQVhfREVWSUNFU11bMzJdOwogfTsKIApAQCAtOTMsNyArOTYsNyBAQAogCiBzdGF0aWMgY2hhciAqZ2NfbmFtZXNbXSA9IHsgTlVMTCwgIlNORVMgcGFkIiwgIk5FUyBwYWQiLCAiTkVTIEZvdXJQb3J0IiwgIk11bHRpc3lzdGVtIGpveXN0aWNrIiwKIAkJCQkiTXVsdGlzeXN0ZW0gMi1idXR0b24gam95c3RpY2siLCAiTjY0IGNvbnRyb2xsZXIiLCAiUFNYIGNvbnRyb2xsZXIiLAotCQkJCSJQU1ggRERSIGNvbnRyb2xsZXIiIH07CisJCQkJIlBTWCBERFIgY29udHJvbGxlciIsICJTTkVTIG1vdXNlIiB9OwogLyoKICAqIE42NCBzdXBwb3J0LgogICovCkBAIC0yMDUsOSArMjA4LDEyIEBACiAgKiBORVMvU05FUyBzdXBwb3J0LgogICovCiAKLSNkZWZpbmUgR0NfTkVTX0RFTEFZCTYJLyogRGVsYXkgYmV0d2VlbiBiaXRzIC0gNnVzICovCi0jZGVmaW5lIEdDX05FU19MRU5HVEgJOAkvKiBUaGUgTkVTIHBhZHMgdXNlIDggYml0cyBvZiBkYXRhICovCi0jZGVmaW5lIEdDX1NORVNfTEVOR1RICTEyCS8qIFRoZSBTTkVTIHRydWUgbGVuZ3RoIGlzIDE2LCBidXQgdGhlIGxhc3QgNCBiaXRzIGFyZSB1bnVzZWQgKi8KKyNkZWZpbmUgR0NfTkVTX0RFTEFZCQk2CS8qIERlbGF5IGJldHdlZW4gYml0cyAtIDZ1cyAqLworI2RlZmluZSBHQ19ORVNfTEVOR1RICQk4CS8qIFRoZSBORVMgcGFkcyB1c2UgOCBiaXRzIG9mIGRhdGEgKi8KKyNkZWZpbmUgR0NfU05FU19MRU5HVEgJCTEyCS8qIFRoZSBTTkVTIHRydWUgbGVuZ3RoIGlzIDE2LCBidXQgdGhlCisJCQkJCSAgIGxhc3QgNCBiaXRzIGFyZSB1bnVzZWQgKi8KKyNkZWZpbmUgR0NfU05FU01PVVNFX0xFTkdUSAkzMgkvKiBUaGUgU05FUyBtb3VzZSB1c2VzIDMyIGJpdHMsIHRoZSBmaXJzdAorCQkJCQkgICAxNiBiaXRzIGFyZSBlcXVpdmFsZW50IHRvIGEgZ2FtZXBhZCAqLwogCiAjZGVmaW5lIEdDX05FU19QT1dFUgkweGZjCiAjZGVmaW5lIEdDX05FU19DTE9DSwkweDAxCkBAIC0yNDIsMTEgKzI0OCwxNSBAQAogCiBzdGF0aWMgdm9pZCBnY19uZXNfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGdjICpnYykKIHsKLQl1bnNpZ25lZCBjaGFyIGRhdGFbR0NfU05FU19MRU5HVEhdOworCXVuc2lnbmVkIGNoYXIgZGF0YVtHQ19TTkVTTU9VU0VfTEVOR1RIXTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7Ci0JaW50IGksIGosIHM7CisJaW50IGksIGosIHMsIGxlbjsKKwljaGFyIHhfcmVsLCB5X3JlbDsKIAotCWdjX25lc19yZWFkX3BhY2tldChnYywgZ2MtPnBhZHNbR0NfU05FU10gPyBHQ19TTkVTX0xFTkdUSCA6IEdDX05FU19MRU5HVEgsIGRhdGEpOworCWxlbiA9IGdjLT5wYWRzW0dDX1NORVNNT1VTRV0gPyBHQ19TTkVTTU9VU0VfTEVOR1RIIDoKKwkJCShnYy0+cGFkc1tHQ19TTkVTXSA/IEdDX1NORVNfTEVOR1RIIDogR0NfTkVTX0xFTkdUSCk7CisKKwlnY19uZXNfcmVhZF9wYWNrZXQoZ2MsIGxlbiwgZGF0YSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgR0NfTUFYX0RFVklDRVM7IGkrKykgewogCkBAIC0yNjksNiArMjc5LDQ0IEBACiAJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19zbmVzX2J0bltqXSwgcyAmIGRhdGFbZ2Nfc25lc19ieXRlc1tqXV0pOwogCisJCWlmIChzICYgZ2MtPnBhZHNbR0NfU05FU01PVVNFXSkgeworCQkJLyoKKwkJCSAqIFRoZSA0IHVudXNlZCBiaXRzIGZyb20gU05FUyBjb250cm9sbGVycyBhcHBlYXIgdG8gYmUgSUQgYml0cworCQkJICogc28gdXNlIHRoZW0gdG8gbWFrZSBzdXJlIGl3ZSBhcmUgZGVhbGluZyB3aXRoIGEgbW91c2UuCisJCQkgKiBnYW1lcGFkIGlzIGNvbm5lY3RlZC4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UKKwkJCSAqIG15IFNORVMgZ2FtZXBhZCBzZW5kcyAxJ3MgZm9yIGJpdHMgMTYtMzEsIHdoaWNoCisJCQkgKiBjYXVzZSB0aGUgbW91c2UgcG9pbnRlciB0byBxdWlja2x5IG1vdmUgdG8gdGhlCisJCQkgKiB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuLgorCQkJICovCisJCQlpZiAoIShzICYgZGF0YVsxMl0pICYmICEocyAmIGRhdGFbMTNdKSAmJgorCQkJICAgICEocyAmIGRhdGFbMTRdKSAmJiAocyAmIGRhdGFbMTVdKSkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgcyAmIGRhdGFbOV0pOworCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIHMgJiBkYXRhWzhdKTsKKworCQkJCXhfcmVsID0geV9yZWwgPSAwOworCQkJCWZvciAoaiA9IDA7IGogPCA3OyBqKyspIHsKKwkJCQkJeF9yZWwgPDw9IDE7CisJCQkJCWlmIChkYXRhWzI1ICsgal0gJiBzKQorCQkJCQkJeF9yZWwgfD0gMTsKKworCQkJCQl5X3JlbCA8PD0gMTsKKwkJCQkJaWYgKGRhdGFbMTcgKyBqXSAmIHMpCisJCQkJCQl5X3JlbCB8PSAxOworCQkJCX0KKworCQkJCWlmICh4X3JlbCkgeworCQkJCQlpZiAoZGF0YVsyNF0gJiBzKQorCQkJCQkJeF9yZWwgPSAteF9yZWw7CisJCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgeF9yZWwpOworCQkJCX0KKworCQkJCWlmICh5X3JlbCkgeworCQkJCQlpZiAoZGF0YVsxNl0gJiBzKQorCQkJCQkJeV9yZWwgPSAteV9yZWw7CisJCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgeV9yZWwpOworCQkJCX0KKwkJCX0KKwkJfQogCQlpbnB1dF9zeW5jKGRldik7CiAJfQogfQpAQCAtNTI0LDEwICs1NzIsMTAgQEAKIAkJZ2NfbjY0X3Byb2Nlc3NfcGFja2V0KGdjKTsKIAogLyoKLSAqIE5FUyBhbmQgU05FUyBwYWRzCisgKiBORVMgYW5kIFNORVMgcGFkcyBvciBtb3VzZQogICovCiAKLQlpZiAoZ2MtPnBhZHNbR0NfTkVTXSB8fCBnYy0+cGFkc1tHQ19TTkVTXSkKKwlpZiAoZ2MtPnBhZHNbR0NfTkVTXSB8fCBnYy0+cGFkc1tHQ19TTkVTXSB8fCBnYy0+cGFkc1tHQ19TTkVTTU9VU0VdKQogCQlnY19uZXNfcHJvY2Vzc19wYWNrZXQoZ2MpOwogCiAvKgpAQCAtNTUyLDcgKzYwMCw3IEBACiAJc3RydWN0IGdjICpnYyA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgZXJyOwogCi0JZXJyID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZnYy0+c2VtKTsKKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdjLT5tdXRleCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTYyLDcgKzYxMCw3IEBACiAJCW1vZF90aW1lcigmZ2MtPnRpbWVyLCBqaWZmaWVzICsgR0NfUkVGUkVTSF9USU1FKTsKIAl9CiAKLQl1cCgmZ2MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZnYy0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC01NzAsMTMgKzYxOCwxMyBAQAogewogCXN0cnVjdCBnYyAqZ2MgPSBkZXYtPnByaXZhdGU7CiAKLQlkb3duKCZnYy0+c2VtKTsKKwltdXRleF9sb2NrKCZnYy0+bXV0ZXgpOwogCWlmICghLS1nYy0+dXNlZCkgewogCQlkZWxfdGltZXJfc3luYygmZ2MtPnRpbWVyKTsKIAkJcGFycG9ydF93cml0ZV9jb250cm9sKGdjLT5wZC0+cG9ydCwgMHgwMCk7CiAJCXBhcnBvcnRfcmVsZWFzZShnYy0+cGQpOwogCX0KLQl1cCgmZ2MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZnYy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBnY19zZXR1cF9wYWQoc3RydWN0IGdjICpnYywgaW50IGlkeCwgaW50IHBhZF90eXBlKQpAQCAtNjA5LDEwICs2NTcsMTMgQEAKIAlpbnB1dF9kZXYtPm9wZW4gPSBnY19vcGVuOwogCWlucHV0X2Rldi0+Y2xvc2UgPSBnY19jbG9zZTsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCWlmIChwYWRfdHlwZSAhPSBHQ19TTkVTTU9VU0UpIHsKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQotCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YICsgaSwgLTEsIDEsIDAsIDApOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCArIGksIC0xLCAxLCAwLCAwKTsKKwl9IGVsc2UKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7CiAKIAlnYy0+cGFkc1swXSB8PSBnY19zdGF0dXNfYml0W2lkeF07CiAJZ2MtPnBhZHNbcGFkX3R5cGVdIHw9IGdjX3N0YXR1c19iaXRbaWR4XTsKQEAgLTYzMCw2ICs2ODEsMTMgQEAKIAogCQkJYnJlYWs7CiAKKwkJY2FzZSBHQ19TTkVTTU9VU0U6CisJCQlzZXRfYml0KEJUTl9MRUZULCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCQlzZXRfYml0KEJUTl9SSUdIVCwgaW5wdXRfZGV2LT5rZXliaXQpOworCQkJc2V0X2JpdChSRUxfWCwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQkJc2V0X2JpdChSRUxfWSwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQkJYnJlYWs7CisKIAkJY2FzZSBHQ19TTkVTOgogCQkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKIAkJCQlzZXRfYml0KGdjX3NuZXNfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CkBAIC02OTMsNyArNzUxLDcgQEAKIAkJZ290byBlcnJfdW5yZWdfcGFyZGV2OwogCX0KIAotCWluaXRfTVVURVgoJmdjLT5zZW0pOworCW11dGV4X2luaXQoJmdjLT5tdXRleCk7CiAJZ2MtPnBkID0gcGQ7CiAJaW5pdF90aW1lcigmZ2MtPnRpbWVyKTsKIAlnYy0+dGltZXIuZGF0YSA9IChsb25nKSBnYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKaW5kZXggNDY3OGI2ZC4uMmI4ZTg0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKQEAgLTQyLDE0ICs0MiwxNCBAQAogCXVuc2lnbmVkIGNoYXIgZGF0YVszXTsKIAogCWlmICghbm9fYWxsb2MpIHsKLQkJZG93bigmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQltdXRleF9sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJCWlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmKGlmb3JjZS0+ZGV2aWNlX21lbW9yeSksIG1vZF9jaHVuaywgMiwKIAkJCWlmb3JjZS0+ZGV2aWNlX21lbW9yeS5zdGFydCwgaWZvcmNlLT5kZXZpY2VfbWVtb3J5LmVuZCwgMkwsCiAJCQlOVUxMLCBOVUxMKSkgewotCQkJdXAoJmlmb3JjZS0+bWVtX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmaWZvcmNlLT5tZW1fbXV0ZXgpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJdXAoJmlmb3JjZS0+bWVtX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJfQogCiAJZGF0YVswXSA9IExPKG1vZF9jaHVuay0+c3RhcnQpOwpAQCAtNzUsMTQgKzc1LDE0IEBACiAJcGVyaW9kID0gVElNRV9TQ0FMRShwZXJpb2QpOwogCiAJaWYgKCFub19hbGxvYykgewotCQlkb3duKCZpZm9yY2UtPm1lbV9tdXRleCk7CisJCW11dGV4X2xvY2soJmlmb3JjZS0+bWVtX211dGV4KTsKIAkJaWYgKGFsbG9jYXRlX3Jlc291cmNlKCYoaWZvcmNlLT5kZXZpY2VfbWVtb3J5KSwgbW9kX2NodW5rLCAweDBjLAogCQkJaWZvcmNlLT5kZXZpY2VfbWVtb3J5LnN0YXJ0LCBpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kLCAyTCwKIAkJCU5VTEwsIE5VTEwpKSB7Ci0JCQl1cCgmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl1cCgmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmlmb3JjZS0+bWVtX211dGV4KTsKIAl9CiAKIAlkYXRhWzBdID0gTE8obW9kX2NodW5rLT5zdGFydCk7CkBAIC0xMTUsMTQgKzExNSwxNCBAQAogCWZhZGVfZHVyYXRpb24gPSBUSU1FX1NDQUxFKGZhZGVfZHVyYXRpb24pOwogCiAJaWYgKCFub19hbGxvYykgewotCQlkb3duKCZpZm9yY2UtPm1lbV9tdXRleCk7CisJCW11dGV4X2xvY2soJmlmb3JjZS0+bWVtX211dGV4KTsKIAkJaWYgKGFsbG9jYXRlX3Jlc291cmNlKCYoaWZvcmNlLT5kZXZpY2VfbWVtb3J5KSwgbW9kX2NodW5rLCAweDBlLAogCQkJaWZvcmNlLT5kZXZpY2VfbWVtb3J5LnN0YXJ0LCBpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kLCAyTCwKIAkJCU5VTEwsIE5VTEwpKSB7Ci0JCQl1cCgmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl1cCgmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmlmb3JjZS0+bWVtX211dGV4KTsKIAl9CiAKIAlkYXRhWzBdID0gTE8obW9kX2NodW5rLT5zdGFydCk7CkBAIC0xNTIsMTQgKzE1MiwxNCBAQAogCXVuc2lnbmVkIGNoYXIgZGF0YVsxMF07CiAKIAlpZiAoIW5vX2FsbG9jKSB7Ci0JCWRvd24oJmlmb3JjZS0+bWVtX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmaWZvcmNlLT5tZW1fbXV0ZXgpOwogCQlpZiAoYWxsb2NhdGVfcmVzb3VyY2UoJihpZm9yY2UtPmRldmljZV9tZW1vcnkpLCBtb2RfY2h1bmssIDgsCiAJCQlpZm9yY2UtPmRldmljZV9tZW1vcnkuc3RhcnQsIGlmb3JjZS0+ZGV2aWNlX21lbW9yeS5lbmQsIDJMLAogCQkJTlVMTCwgTlVMTCkpIHsKLQkJCXVwKCZpZm9yY2UtPm1lbV9tdXRleCk7CisJCQltdXRleF91bmxvY2soJmlmb3JjZS0+bWVtX211dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXVwKCZpZm9yY2UtPm1lbV9tdXRleCk7CisJCW11dGV4X3VubG9jaygmaWZvcmNlLT5tZW1fbXV0ZXgpOwogCX0KIAogCWRhdGFbMF0gPSBMTyhtb2RfY2h1bmstPnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCmluZGV4IGI2YmMwNDkuLmFiMGEyNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpZm9yY2UtPndhaXQpOwogCXNwaW5fbG9ja19pbml0KCZpZm9yY2UtPnhtaXRfbG9jayk7Ci0JaW5pdF9NVVRFWCgmaWZvcmNlLT5tZW1fbXV0ZXgpOworCW11dGV4X2luaXQoJmlmb3JjZS0+bWVtX211dGV4KTsKIAlpZm9yY2UtPnhtaXQuYnVmID0gaWZvcmNlLT54bWl0X2RhdGE7CiAJaWZvcmNlLT5kZXYgPSBpbnB1dF9kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS5oIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLmgKaW5kZXggMTQ2ZjQwNi4uNjY4ZjI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLmgKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFyYml0cmFyeSByZXNvdXJjZSBtYW5hZ2VtZW50IHJvdXRpbmVzLgogICogSSB1c2UgaXQgdG8gbWFuYWdlIHRoZSBkZXZpY2UncyBtZW1vcnkuCkBAIC00NSw2ICs0NSw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAorCiAjZGVmaW5lIElGT1JDRV9NQVhfTEVOR1RICTE2CiAKIC8qIGlmb3JjZTo6YnVzICovCkBAIC0xNDYsNyArMTQ3LDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXN0cnVjdCByZXNvdXJjZSBkZXZpY2VfbWVtb3J5OwogCXN0cnVjdCBpZm9yY2VfY29yZV9lZmZlY3QgY29yZV9lZmZlY3RzW0ZGX0VGRkVDVFNfTUFYXTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG1lbV9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggbWVtX211dGV4OwogfTsKIAogLyogR2V0IGhpIGFuZCBsb3cgYnl0ZXMgb2YgYSAxNi1iaXRzIGludCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwppbmRleCAyYjJlYzEwLi45NWMwZGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJc3RydWN0IHN3ICpzdzsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGksIGosIGssIGw7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwkvKiBbU1dfTEVOR1RIXSAqLwogCXVuc2lnbmVkIGNoYXIgKmlkYnVmID0gTlVMTDsJLyogW1NXX0xFTkdUSF0gKi8KIAl1bnNpZ25lZCBjaGFyIG0gPSAxOwpAQCAtNzc2LDcgKzc3NiwxMCBAQAogCQkJZ290byBmYWlsNDsKIAl9CiAKLQlyZXR1cm4gMDsKKyBvdXQ6CWtmcmVlKGJ1Zik7CisJa2ZyZWUoaWRidWYpOworCisJcmV0dXJuIGVycjsKIAogIGZhaWw0OglpbnB1dF9mcmVlX2RldmljZShzdy0+ZGV2W2ldKTsKICBmYWlsMzoJd2hpbGUgKC0taSA+PSAwKQpAQCAtNzg0LDkgKzc4Nyw3IEBACiAgZmFpbDI6CWdhbWVwb3J0X2Nsb3NlKGdhbWVwb3J0KTsKICBmYWlsMToJZ2FtZXBvcnRfc2V0X2RydmRhdGEoZ2FtZXBvcnQsIE5VTEwpOwogCWtmcmVlKHN3KTsKLQlrZnJlZShidWYpOwotCWtmcmVlKGlkYnVmKTsKLQlyZXR1cm4gZXJyOworCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgdm9pZCBzd19kaXNjb25uZWN0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCmluZGV4IGIxNTQ5MzguLjU1NzBmZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogTU9EVUxFX0FVVEhPUigiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJUdXJib0dyYUZYIHBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlIGRyaXZlciIpOwpAQCAtODYsNyArODcsNyBAQAogCWNoYXIgcGh5c1tUR0ZYX01BWF9ERVZJQ0VTXVszMl07CiAJaW50IHN0aWNrczsKIAlpbnQgdXNlZDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggc2VtOwogfSAqdGdmeF9iYXNlW1RHRlhfTUFYX1BPUlRTXTsKIAogLyoKQEAgLTEyOCw3ICsxMjksNyBAQAogCXN0cnVjdCB0Z2Z4ICp0Z2Z4ID0gZGV2LT5wcml2YXRlOwogCWludCBlcnI7CiAKLQllcnIgPSBkb3duX2ludGVycnVwdGlibGUoJnRnZngtPnNlbSk7CisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0Z2Z4LT5zZW0pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTEzOCw3ICsxMzksNyBAQAogCQltb2RfdGltZXIoJnRnZngtPnRpbWVyLCBqaWZmaWVzICsgVEdGWF9SRUZSRVNIX1RJTUUpOwogCX0KIAotCXVwKCZ0Z2Z4LT5zZW0pOworCW11dGV4X3VubG9jaygmdGdmeC0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ2LDEzICsxNDcsMTMgQEAKIHsKIAlzdHJ1Y3QgdGdmeCAqdGdmeCA9IGRldi0+cHJpdmF0ZTsKIAotCWRvd24oJnRnZngtPnNlbSk7CisJbXV0ZXhfbG9jaygmdGdmeC0+c2VtKTsKIAlpZiAoIS0tdGdmeC0+dXNlZCkgewogCQlkZWxfdGltZXJfc3luYygmdGdmeC0+dGltZXIpOwogCQlwYXJwb3J0X3dyaXRlX2NvbnRyb2wodGdmeC0+cGQtPnBvcnQsIDB4MDApOwogCQlwYXJwb3J0X3JlbGVhc2UodGdmeC0+cGQpOwogCX0KLQl1cCgmdGdmeC0+c2VtKTsKKwltdXRleF91bmxvY2soJnRnZngtPnNlbSk7CiB9CiAKIApAQCAtMTkxLDcgKzE5Miw3IEBACiAJCWdvdG8gZXJyX3VucmVnX3BhcmRldjsKIAl9CiAKLQlpbml0X01VVEVYKCZ0Z2Z4LT5zZW0pOworCW11dGV4X2luaXQoJnRnZngtPnNlbSk7CiAJdGdmeC0+cGQgPSBwZDsKIAlpbml0X3RpbWVyKCZ0Z2Z4LT50aW1lcik7CiAJdGdmeC0+dGltZXIuZGF0YSA9IChsb25nKSB0Z2Z4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IDNiMGFjM2IuLmE5ZGRhNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKQEAgLTEzLDcgKzEzLDcgQEAKIGlmIElOUFVUX0tFWUJPQVJECiAKIGNvbmZpZyBLRVlCT0FSRF9BVEtCRAotCXRyaXN0YXRlICJBVCBrZXlib2FyZCIgaWYgIVg4Nl9QQworCXRyaXN0YXRlICJBVCBrZXlib2FyZCIgaWYgRU1CRURERUQgfHwgIVg4Nl9QQwogCWRlZmF1bHQgeQogCXNlbGVjdCBTRVJJTwogCXNlbGVjdCBTRVJJT19MSUJQUzIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCBmZmFjZjZlLi5mYWQwNGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9saWJwczIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIERSSVZFUl9ERVNDCSJBVCBhbmQgUFMvMiBrZXlib2FyZCBkcml2ZXIiCiAKQEAgLTIxNiw3ICsyMTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgdGltZTsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCBldmVudF93b3JrOwotCXN0cnVjdCBzZW1hcGhvcmUgZXZlbnRfc2VtOworCXN0cnVjdCBtdXRleCBldmVudF9tdXRleDsKIAl1bnNpZ25lZCBsb25nIGV2ZW50X21hc2s7CiB9OwogCkBAIC0zMDIsMTkgKzMwMywxOSBAQAogCWlmIChhdGtiZC0+dHJhbnNsYXRlZCkgewogCiAJCWlmIChhdGtiZC0+ZW11bCB8fAotCQkgICAgIShjb2RlID09IEFUS0JEX1JFVF9FTVVMMCB8fCBjb2RlID09IEFUS0JEX1JFVF9FTVVMMSB8fAotCQkgICAgICBjb2RlID09IEFUS0JEX1JFVF9IQU5HVUVMIHx8IGNvZGUgPT0gQVRLQkRfUkVUX0hBTkpBIHx8Ci0JCSAgICAgKGNvZGUgPT0gQVRLQkRfUkVUX0VSUiAmJiAhYXRrYmQtPmVycl94bCkgfHwKLQkgICAgICAgICAgICAgKGNvZGUgPT0gQVRLQkRfUkVUX0JBVCAmJiAhYXRrYmQtPmJhdF94bCkpKSB7CisJCSAgICAoY29kZSAhPSBBVEtCRF9SRVRfRU1VTDAgJiYgY29kZSAhPSBBVEtCRF9SRVRfRU1VTDEgJiYKKwkJICAgICBjb2RlICE9IEFUS0JEX1JFVF9IQU5HVUVMICYmIGNvZGUgIT0gQVRLQkRfUkVUX0hBTkpBICYmCisJCSAgICAgKGNvZGUgIT0gQVRLQkRfUkVUX0VSUiB8fCBhdGtiZC0+ZXJyX3hsKSAmJgorCSAgICAgICAgICAgICAoY29kZSAhPSBBVEtCRF9SRVRfQkFUIHx8IGF0a2JkLT5iYXRfeGwpKSkgewogCQkJYXRrYmQtPnJlbGVhc2UgPSBjb2RlID4+IDc7CiAJCQljb2RlICY9IDB4N2Y7CiAJCX0KIAogCQlpZiAoIWF0a2JkLT5lbXVsKSB7CiAJCSAgICAgaWYgKChjb2RlICYgMHg3ZikgPT0gKEFUS0JEX1JFVF9CQVQgJiAweDdmKSkKLQkJCWF0a2JkLT5iYXRfeGwgPSAhYXRrYmQtPnJlbGVhc2U7CisJCQlhdGtiZC0+YmF0X3hsID0gIShkYXRhID4+IDcpOwogCQkgICAgIGlmICgoY29kZSAmIDB4N2YpID09IChBVEtCRF9SRVRfRVJSICYgMHg3ZikpCi0JCQlhdGtiZC0+ZXJyX3hsID0gIWF0a2JkLT5yZWxlYXNlOworCQkJYXRrYmQtPmVycl94bCA9ICEoZGF0YSA+PiA3KTsKIAkJfQogCX0KIApAQCAtNDQ5LDcgKzQ1MCw3IEBACiAJdW5zaWduZWQgY2hhciBwYXJhbVsyXTsKIAlpbnQgaSwgajsKIAotCWRvd24oJmF0a2JkLT5ldmVudF9zZW0pOworCW11dGV4X2xvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX0xFRF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpIHsKIAkJcGFyYW1bMF0gPSAodGVzdF9iaXQoTEVEX1NDUk9MTEwsIGRldi0+bGVkKSA/IDEgOiAwKQpAQCAtNDgwLDcgKzQ4MSw3IEBACiAJCXBzMl9jb21tYW5kKCZhdGtiZC0+cHMyZGV2LCBwYXJhbSwgQVRLQkRfQ01EX1NFVFJFUCk7CiAJfQogCi0JdXAoJmF0a2JkLT5ldmVudF9zZW0pOworCW11dGV4X3VubG9jaygmYXRrYmQtPmV2ZW50X211dGV4KTsKIH0KIAogLyoKQEAgLTg0Niw3ICs4NDcsNyBAQAogCWF0a2JkLT5kZXYgPSBkZXY7CiAJcHMyX2luaXQoJmF0a2JkLT5wczJkZXYsIHNlcmlvKTsKIAlJTklUX1dPUksoJmF0a2JkLT5ldmVudF93b3JrLCBhdGtiZF9ldmVudF93b3JrLCBhdGtiZCk7Ci0JaW5pdF9NVVRFWCgmYXRrYmQtPmV2ZW50X3NlbSk7CisJbXV0ZXhfaW5pdCgmYXRrYmQtPmV2ZW50X211dGV4KTsKIAogCXN3aXRjaCAoc2VyaW8tPmlkLnR5cGUpIHsKIApAQCAtODYyLDkgKzg2Myw2IEBACiAJYXRrYmQtPnNvZnRyZXBlYXQgPSBhdGtiZF9zb2Z0cmVwZWF0OwogCWF0a2JkLT5zY3JvbGwgPSBhdGtiZF9zY3JvbGw7CiAKLQlpZiAoIWF0a2JkLT53cml0ZSkKLQkJYXRrYmQtPnNvZnRyZXBlYXQgPSAxOwotCiAJaWYgKGF0a2JkLT5zb2Z0cmVwZWF0KQogCQlhdGtiZC0+c29mdHJhdyA9IDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwppbmRleCBlMzAxZWU0Li4xZjBlNzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCkBAIC0yOSwxMSArMjksMTEgQEAKICNkZWZpbmUgS0JfQ09MUwkJCQkxMgogI2RlZmluZSBLQl9ST1dNQVNLKHIpCQkoMSA8PCAocikpCiAjZGVmaW5lIFNDQU5DT0RFKHIsYykJCSggKChyKTw8NCkgKyAoYykgKyAxICkKLS8qIHplcm8gY29kZSwgMTI0IHNjYW5jb2RlcyArIDMgaGluZ2UgY29tYmluYXRpb25zICovCi0jZGVmaW5lCU5SX1NDQU5DT0RFUwkJKCBTQ0FOQ09ERShLQl9ST1dTLTEsS0JfQ09MUy0xKSArMSArMSArMyApCi0jZGVmaW5lIFNDQU5fSU5URVJWQUwJCShIWi8xMCkKKy8qIHplcm8gY29kZSwgMTI0IHNjYW5jb2RlcyAqLworI2RlZmluZQlOUl9TQ0FOQ09ERVMJCSggU0NBTkNPREUoS0JfUk9XUy0xLEtCX0NPTFMtMSkgKzEgKzEgKQogCi0jZGVmaW5lIEhJTkdFX1NDQU5fSU5URVJWQUwJCShIWi80KQorI2RlZmluZSBTQ0FOX0lOVEVSVkFMCQkoNTApIC8qIG1zICovCisjZGVmaW5lIEhJTkdFX1NDQU5fSU5URVJWQUwJKDI1MCkgLyogbXMgKi8KIAogI2RlZmluZSBDT1JHSV9LRVlfQ0FMRU5ERVIJS0VZX0YxCiAjZGVmaW5lIENPUkdJX0tFWV9BRERSRVNTCUtFWV9GMgpAQCAtNDksOSArNDksNiBAQAogI2RlZmluZSBDT1JHSV9LRVlfTUFJTAkJS0VZX0YxMAogI2RlZmluZSBDT1JHSV9LRVlfT0sJCUtFWV9GMTEKICNkZWZpbmUgQ09SR0lfS0VZX01FTlUJCUtFWV9GMTIKLSNkZWZpbmUgQ09SR0lfSElOR0VfMAkJS0VZX0tQMAotI2RlZmluZSBDT1JHSV9ISU5HRV8xCQlLRVlfS1AxCi0jZGVmaW5lIENPUkdJX0hJTkdFXzIJCUtFWV9LUDIKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY29yZ2lrYmRfa2V5Y29kZVtOUl9TQ0FOQ09ERVNdID0gewogCTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgKi8KQEAgLTYzLDcgKzYwLDYgQEAKIAlDT1JHSV9LRVlfTUFJTCwgS0VZX1osIEtFWV9YLCBLRVlfTUlOVVMsIEtFWV9TUEFDRSwgS0VZX0NPTU1BLCAwLCBLRVlfVVAsIDAsIDAsIDAsIENPUkdJX0tFWV9GTiwgMCwgMCwgMCwgMCwgICAgICAgICAgICAvKiA4MS05NiAqLwogCUtFWV9TWVNSUSwgQ09SR0lfS0VZX0pBUDEsIENPUkdJX0tFWV9KQVAyLCBDT1JHSV9LRVlfQ0FOQ0VMLCBDT1JHSV9LRVlfT0ssIENPUkdJX0tFWV9NRU5VLCBLRVlfTEVGVCwgS0VZX0RPV04sIEtFWV9SSUdIVCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgIC8qIDk3LTExMiAqLwogCUNPUkdJX0tFWV9PRkYsIENPUkdJX0tFWV9FWE9LLCBDT1JHSV9LRVlfRVhDQU5DRUwsIENPUkdJX0tFWV9FWEpPR0RPV04sIENPUkdJX0tFWV9FWEpPR1VQLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgIC8qIDExMy0xMjQgKi8KLQlDT1JHSV9ISU5HRV8wLCBDT1JHSV9ISU5HRV8xLCBDT1JHSV9ISU5HRV8yCSAgLyogMTI1LTEyNyAqLwogfTsKIAogCkBAIC0xODcsNyArMTgzLDcgQEAKIAogCS8qIGlmIGFueSBrZXlzIGFyZSBwcmVzc2VkLCBlbmFibGUgdGhlIHRpbWVyICovCiAJaWYgKG51bV9wcmVzc2VkKQotCQltb2RfdGltZXIoJmNvcmdpa2JkX2RhdGEtPnRpbWVyLCBqaWZmaWVzICsgU0NBTl9JTlRFUlZBTCk7CisJCW1vZF90aW1lcigmY29yZ2lrYmRfZGF0YS0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFNDQU5fSU5URVJWQUwpKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmdpa2JkX2RhdGEtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTIyOCw2ICsyMjQsNyBAQAogICogICAgICAgICAgMHgwYyAtIEtleWJvYXJkIGFuZCBTY3JlZW4gQ2xvc2VkCiAgKi8KIAorI2RlZmluZSBSRUFEX0dQSU9fQklUKHgpICAgIChHUExSKHgpICYgR1BJT19iaXQoeCkpCiAjZGVmaW5lIEhJTkdFX1NUQUJMRV9DT1VOVCAyCiBzdGF0aWMgaW50IHNoYXJwc2xfaGluZ2Vfc3RhdGU7CiBzdGF0aWMgaW50IGhpbmdlX2NvdW50OwpAQCAtMjM5LDYgKzIzNiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWdwcnIgPSByZWFkX3Njb29wX3JlZygmY29yZ2lzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9HUFJSKSAmIChDT1JHSV9TQ1BfU1dBIHwgQ09SR0lfU0NQX1NXQik7CisJZ3ByciB8PSAoUkVBRF9HUElPX0JJVChDT1JHSV9HUElPX0FLX0lOVCkgIT0gMCk7CiAJaWYgKGdwcnIgIT0gc2hhcnBzbF9oaW5nZV9zdGF0ZSkgewogCQloaW5nZV9jb3VudCA9IDA7CiAJCXNoYXJwc2xfaGluZ2Vfc3RhdGUgPSBncHJyOwpAQCAtMjQ3LDI5ICsyNDUsNDAgQEAKIAkJaWYgKGhpbmdlX2NvdW50ID49IEhJTkdFX1NUQUJMRV9DT1VOVCkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmdpa2JkX2RhdGEtPmxvY2ssIGZsYWdzKTsKIAotCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChjb3JnaWtiZF9kYXRhLT5pbnB1dCwgU1dfMCwgKChzaGFycHNsX2hpbmdlX3N0YXRlICYgQ09SR0lfU0NQX1NXQSkgIT0gMCkpOwotCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChjb3JnaWtiZF9kYXRhLT5pbnB1dCwgU1dfMSwgKChzaGFycHNsX2hpbmdlX3N0YXRlICYgQ09SR0lfU0NQX1NXQikgIT0gMCkpOworCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChjb3JnaWtiZF9kYXRhLT5pbnB1dCwgU1dfTElELCAoKHNoYXJwc2xfaGluZ2Vfc3RhdGUgJiBDT1JHSV9TQ1BfU1dBKSAhPSAwKSk7CisJCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGNvcmdpa2JkX2RhdGEtPmlucHV0LCBTV19UQUJMRVRfTU9ERSwgKChzaGFycHNsX2hpbmdlX3N0YXRlICYgQ09SR0lfU0NQX1NXQikgIT0gMCkpOworCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChjb3JnaWtiZF9kYXRhLT5pbnB1dCwgU1dfSEVBRFBIT05FX0lOU0VSVCwgKFJFQURfR1BJT19CSVQoQ09SR0lfR1BJT19BS19JTlQpICE9IDApKTsKIAkJCWlucHV0X3N5bmMoY29yZ2lrYmRfZGF0YS0+aW5wdXQpOwogCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JnaWtiZF9kYXRhLT5sb2NrLCBmbGFncyk7CiAJCX0KIAl9Ci0JbW9kX3RpbWVyKCZjb3JnaWtiZF9kYXRhLT5odGltZXIsIGppZmZpZXMgKyBISU5HRV9TQ0FOX0lOVEVSVkFMKTsKKwltb2RfdGltZXIoJmNvcmdpa2JkX2RhdGEtPmh0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSElOR0VfU0NBTl9JTlRFUlZBTCkpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGNvcmdpa2JkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJaW50IGk7CiAJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKIAljb3JnaWtiZC0+c3VzcGVuZGVkID0gMTsKKwkvKiBzdHJvYmUgMCBpcyB0aGUgcG93ZXIga2V5IHNvIHRoaXMgY2FuJ3QgYmUgbWFkZSBhbiBpbnB1dCBmb3IKKwkgICBwb3dlcnNhdmluZyB0aGVyZWZvcmUgaSA9IDEgKi8KKwlmb3IgKGkgPSAxOyBpIDwgQ09SR0lfS0VZX1NUUk9CRV9OVU07IGkrKykKKwkJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX0tFWV9TVFJPQkUoaSkgfCBHUElPX0lOKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNvcmdpa2JkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJaW50IGk7CiAJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKKwlmb3IgKGkgPSAxOyBpIDwgQ09SR0lfS0VZX1NUUk9CRV9OVU07IGkrKykKKwkJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX0tFWV9TVFJPQkUoaSkgfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIKTsKKwogCS8qIFVwb24gcmVzdW1lLCBpZ25vcmUgdGhlIHN1c3BlbmQga2V5IGZvciBhIHNob3J0IHdoaWxlICovCiAJY29yZ2lrYmQtPnN1c3BlbmRfamlmZmllcz1qaWZmaWVzOwogCWNvcmdpa2JkLT5zdXNwZW5kZWQgPSAwOwpAQCAtMzMxLDEyICszNDAsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb3JnaWtiZF9rZXljb2RlKTsgaSsrKQogCQlzZXRfYml0KGNvcmdpa2JkLT5rZXljb2RlW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJY2xlYXJfYml0KDAsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQlzZXRfYml0KFNXXzAsIGlucHV0X2Rldi0+c3diaXQpOwotCXNldF9iaXQoU1dfMSwgaW5wdXRfZGV2LT5zd2JpdCk7CisJc2V0X2JpdChTV19MSUQsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfVEFCTEVUX01PREUsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfSEVBRFBIT05FX0lOU0VSVCwgaW5wdXRfZGV2LT5zd2JpdCk7CiAKIAlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoY29yZ2lrYmQtPmlucHV0KTsKIAotCW1vZF90aW1lcigmY29yZ2lrYmQtPmh0aW1lciwgamlmZmllcyArIEhJTkdFX1NDQU5fSU5URVJWQUwpOworCW1vZF90aW1lcigmY29yZ2lrYmQtPmh0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSElOR0VfU0NBTl9JTlRFUlZBTCkpOwogCiAJLyogU2V0dXAgc2Vuc2UgaW50ZXJydXB0cyAtIFJpc2luZ0VkZ2UgRGV0ZWN0LCBzZW5zZSBsaW5lcyBhcyBpbnB1dHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ09SR0lfS0VZX1NFTlNFX05VTTsgaSsrKSB7CkBAIC0zNTEsNiArMzYxLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQ09SR0lfS0VZX1NUUk9CRV9OVU07IGkrKykKIAkJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX0tFWV9TVFJPQkUoaSkgfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIKTsKIAorCS8qIFNldHVwIHRoZSBoZWFkcGhvbmUgamFjayBhcyBhbiBpbnB1dCAqLworCXB4YV9ncGlvX21vZGUoQ09SR0lfR1BJT19BS19JTlQgfCBHUElPX0lOKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCmluZGV4IDYzZjM4N2UuLjJlNGFiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCkBAIC0yNTAsMTYgKzI1MCwxOSBAQAogCXN0cnVjdCBoaWxfa2JkCSprYmQ7CiAJdWludDhfdAkJZGlkLCAqaWRkOwogCWludAkJaTsKLQkKKwogCWtiZCA9IGt6YWxsb2Moc2l6ZW9mKCprYmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtiZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlrYmQtPmRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICgha2JkLT5kZXYpIGdvdG8gYmFpbDE7CisJaWYgKCFrYmQtPmRldikKKwkJZ290byBiYWlsMDsKKwogCWtiZC0+ZGV2LT5wcml2YXRlID0ga2JkOwogCi0JaWYgKHNlcmlvX29wZW4oc2VyaW8sIGRydikpIGdvdG8gYmFpbDA7CisJaWYgKHNlcmlvX29wZW4oc2VyaW8sIGRydikpCisJCWdvdG8gYmFpbDE7CiAKIAlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywga2JkKTsKIAlrYmQtPnNlcmlvID0gc2VyaW87CkBAIC0zNDcsMTEgKzM1MCwxMSBAQAogCXJldHVybiAwOwogIGJhaWwyOgogCXNlcmlvX2Nsb3NlKHNlcmlvKTsKKwlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CiAgYmFpbDE6CiAJaW5wdXRfZnJlZV9kZXZpY2Uoa2JkLT5kZXYpOwogIGJhaWwwOgogCWtmcmVlKGtiZCk7Ci0Jc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwogCXJldHVybiAtRUlPOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKaW5kZXggODM5OTlkNS4uYzVkMDNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBTQ0FOQ09ERShyLGMpCQkoKChyKTw8NCkgKyAoYykgKyAxKQogI2RlZmluZQlOUl9TQ0FOQ09ERVMJCSgoS0JfUk9XUzw8NCkgKyAxKQogCisjZGVmaW5lIFNDQU5fSU5URVJWQUwJCSg1MCkgLyogbXMgKi8KICNkZWZpbmUgSElOR0VfU0NBTl9JTlRFUlZBTAkoMTUwKSAvKiBtcyAqLwogCiAjZGVmaW5lIFNQSVRaX0tFWV9DQUxFTkRFUglLRVlfRjEKQEAgLTUyLDggKzUzLDggQEAKIAlLRVlfTEVGVENUUkwsIEtFWV8xLCBLRVlfMywgS0VZXzUsIEtFWV82LCBLRVlfNywgS0VZXzksIEtFWV8wLCBLRVlfQkFDS1NQQUNFLCBTUElUWl9LRVlfRVhPSywgU1BJVFpfS0VZX0VYQ0FOQ0VMLCAwLCAwLCAwLCAwLCAwLCAgLyogMS0xNiAqLwogCTAsIEtFWV8yLCBLRVlfNCwgS0VZX1IsIEtFWV9ZLCBLRVlfOCwgS0VZX0ksIEtFWV9PLCBLRVlfUCwgU1BJVFpfS0VZX0VYSk9HRE9XTiwgU1BJVFpfS0VZX0VYSk9HVVAsIDAsIDAsIDAsIDAsIDAsIC8qIDE3LTMyICovCiAJS0VZX1RBQiwgS0VZX1EsIEtFWV9FLCBLRVlfVCwgS0VZX0csIEtFWV9VLCBLRVlfSiwgS0VZX0ssIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzMtNDggKi8KLQlTUElUWl9LRVlfQ0FMRU5ERVIsIEtFWV9XLCBLRVlfUywgS0VZX0YsIEtFWV9WLCBLRVlfSCwgS0VZX00sIEtFWV9MLCAwLCBLRVlfUklHSFRTSElGVCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAvKiA0OS02NCAqLwotCVNQSVRaX0tFWV9BRERSRVNTLCBLRVlfQSwgS0VZX0QsIEtFWV9DLCBLRVlfQiwgS0VZX04sIEtFWV9ET1QsIDAsIEtFWV9FTlRFUiwgS0VZX0xFRlRTSElGVCwgMCwgMCwgMCwgMCwgMCwgMCwJICAvKiA2NS04MCAqLworCVNQSVRaX0tFWV9BRERSRVNTLCBLRVlfVywgS0VZX1MsIEtFWV9GLCBLRVlfViwgS0VZX0gsIEtFWV9NLCBLRVlfTCwgMCwgS0VZX1JJR0hUU0hJRlQsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgLyogNDktNjQgKi8KKwlTUElUWl9LRVlfQ0FMRU5ERVIsIEtFWV9BLCBLRVlfRCwgS0VZX0MsIEtFWV9CLCBLRVlfTiwgS0VZX0RPVCwgMCwgS0VZX0VOVEVSLCBLRVlfTEVGVFNISUZULCAwLCAwLCAwLCAwLCAwLCAwLAkgIC8qIDY1LTgwICovCiAJU1BJVFpfS0VZX01BSUwsIEtFWV9aLCBLRVlfWCwgS0VZX01JTlVTLCBLRVlfU1BBQ0UsIEtFWV9DT01NQSwgMCwgS0VZX1VQLCAwLCAwLCBTUElUWl9LRVlfRk4sIDAsIDAsIDAsIDAsIDAsICAgICAgLyogODEtOTYgKi8KIAlLRVlfU1lTUlEsIFNQSVRaX0tFWV9KQVAxLCBTUElUWl9LRVlfSkFQMiwgU1BJVFpfS0VZX0NBTkNFTCwgU1BJVFpfS0VZX09LLCBTUElUWl9LRVlfTUVOVSwgS0VZX0xFRlQsIEtFWV9ET1dOLCBLRVlfUklHSFQsIDAsIDAsIDAsIDAsIDAsIDAsIDAgIC8qIDk3LTExMiAqLwogfTsKQEAgLTIzMCw3ICsyMzEsNyBAQAogCiAJLyogaWYgYW55IGtleXMgYXJlIHByZXNzZWQsIGVuYWJsZSB0aGUgdGltZXIgKi8KIAlpZiAobnVtX3ByZXNzZWQpCi0JCW1vZF90aW1lcigmc3BpdHprYmRfZGF0YS0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCQltb2RfdGltZXIoJnNwaXR6a2JkX2RhdGEtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhTQ0FOX0lOVEVSVkFMKSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGl0emtiZF9kYXRhLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0yODcsNiArMjg4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3RhdGUgPSBHUExSKFNQSVRaX0dQSU9fU1dBKSAmIChHUElPX2JpdChTUElUWl9HUElPX1NXQSl8R1BJT19iaXQoU1BJVFpfR1BJT19TV0IpKTsKKwlzdGF0ZSB8PSAoR1BMUihTUElUWl9HUElPX0FLX0lOVCkgJiBHUElPX2JpdChTUElUWl9HUElPX0FLX0lOVCkpOwogCWlmIChzdGF0ZSAhPSBzaGFycHNsX2hpbmdlX3N0YXRlKSB7CiAJCWhpbmdlX2NvdW50ID0gMDsKIAkJc2hhcnBzbF9oaW5nZV9zdGF0ZSA9IHN0YXRlOwpAQCAtMjk3LDggKzI5OSw5IEBACiAJaWYgKGhpbmdlX2NvdW50ID49IEhJTkdFX1NUQUJMRV9DT1VOVCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3BpdHprYmRfZGF0YS0+bG9jaywgZmxhZ3MpOwogCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXXzAsICgoR1BMUihTUElUWl9HUElPX1NXQSkgJiBHUElPX2JpdChTUElUWl9HUElPX1NXQSkpICE9IDApKTsKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChzcGl0emtiZF9kYXRhLT5pbnB1dCwgU1dfMSwgKChHUExSKFNQSVRaX0dQSU9fU1dCKSAmIEdQSU9fYml0KFNQSVRaX0dQSU9fU1dCKSkgIT0gMCkpOworCQlpbnB1dF9yZXBvcnRfc3dpdGNoKHNwaXR6a2JkX2RhdGEtPmlucHV0LCBTV19MSUQsICgoR1BMUihTUElUWl9HUElPX1NXQSkgJiBHUElPX2JpdChTUElUWl9HUElPX1NXQSkpICE9IDApKTsKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChzcGl0emtiZF9kYXRhLT5pbnB1dCwgU1dfVEFCTEVUX01PREUsICgoR1BMUihTUElUWl9HUElPX1NXQikgJiBHUElPX2JpdChTUElUWl9HUElPX1NXQikpICE9IDApKTsKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChzcGl0emtiZF9kYXRhLT5pbnB1dCwgU1dfSEVBRFBIT05FX0lOU0VSVCwgKChHUExSKFNQSVRaX0dQSU9fQUtfSU5UKSAmIEdQSU9fYml0KFNQSVRaX0dQSU9fQUtfSU5UKSkgIT0gMCkpOwogCQlpbnB1dF9zeW5jKHNwaXR6a2JkX2RhdGEtPmlucHV0KTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGl0emtiZF9kYXRhLT5sb2NrLCBmbGFncyk7CkBAIC0zOTUsOCArMzk4LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGl0emtiZF9rZXljb2RlKTsgaSsrKQogCQlzZXRfYml0KHNwaXR6a2JkLT5rZXljb2RlW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJY2xlYXJfYml0KDAsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQlzZXRfYml0KFNXXzAsIGlucHV0X2Rldi0+c3diaXQpOwotCXNldF9iaXQoU1dfMSwgaW5wdXRfZGV2LT5zd2JpdCk7CisJc2V0X2JpdChTV19MSUQsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfVEFCTEVUX01PREUsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfSEVBRFBIT05FX0lOU0VSVCwgaW5wdXRfZGV2LT5zd2JpdCk7CiAKIAlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKIApAQCAtNDMyLDYgKzQzNiw5IEBACiAJcmVxdWVzdF9pcnEoU1BJVFpfSVJRX0dQSU9fU1dCLCBzcGl0emtiZF9oaW5nZV9pc3IsCiAJCSAgICBTQV9JTlRFUlJVUFQgfCBTQV9UUklHR0VSX1JJU0lORyB8IFNBX1RSSUdHRVJfRkFMTElORywKIAkJICAgICJTcGl0emtiZCBTV0IiLCBzcGl0emtiZCk7CisgCXJlcXVlc3RfaXJxKFNQSVRaX0lSUV9HUElPX0FLX0lOVCwgc3BpdHprYmRfaGluZ2VfaXNyLAorCQkgICAgU0FfSU5URVJSVVBUIHwgU0FfVFJJR0dFUl9SSVNJTkcgfCBTQV9UUklHR0VSX0ZBTExJTkcsCisJCSAgICAiU3BpdHprYmQgSFAiLCBzcGl0emtiZCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogU3BpdHogS2V5Ym9hcmQgUmVnaXN0ZXJlZFxuIik7CiAKQEAgLTQ1MCw2ICs0NTcsNyBAQAogCWZyZWVfaXJxKFNQSVRaX0lSUV9HUElPX09OX0tFWSwgc3BpdHprYmQpOwogCWZyZWVfaXJxKFNQSVRaX0lSUV9HUElPX1NXQSwgc3BpdHprYmQpOwogCWZyZWVfaXJxKFNQSVRaX0lSUV9HUElPX1NXQiwgc3BpdHprYmQpOworCWZyZWVfaXJxKFNQSVRaX0lSUV9HUElPX0FLX0lOVCwgc3BpdHprYmQpOwogCiAJZGVsX3RpbWVyX3N5bmMoJnNwaXR6a2JkLT5odGltZXIpOwogCWRlbF90aW1lcl9zeW5jKCZzcGl0emtiZC0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3Bjc3Brci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3Bjc3Brci5jCmluZGV4IDFlZjQ3N2YuLmFmZDMyMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9wY3Nwa3IuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvcGNzcGtyLmMKQEAgLTI0LDcgKzI0LDYgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUEMgU3BlYWtlciBiZWVwZXIgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwY3Nwa3JfcGxhdGZvcm1fZGV2aWNlOwogc3RhdGljIERFRklORV9TUElOTE9DSyhpODI1M19iZWVwX2xvY2spOwogCiBzdGF0aWMgaW50IHBjc3Brcl9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQpAQCAtMTM1LDM1ICsxMzQsMTEgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGNzcGtyX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwY3Nwa3JfcGxhdGZvcm1fZHJpdmVyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcGNzcGtyX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicGNzcGtyIiwgLTEpOwotCWlmICghcGNzcGtyX3BsYXRmb3JtX2RldmljZSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl91bnJlZ2lzdGVyX2RyaXZlcjsKLQl9Ci0KLQllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBjc3Brcl9wbGF0Zm9ybV9kZXZpY2UpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfZGV2aWNlOwotCi0JcmV0dXJuIDA7Ci0KLSBlcnJfZnJlZV9kZXZpY2U6Ci0JcGxhdGZvcm1fZGV2aWNlX3B1dChwY3Nwa3JfcGxhdGZvcm1fZGV2aWNlKTsKLSBlcnJfdW5yZWdpc3Rlcl9kcml2ZXI6Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjc3Brcl9wbGF0Zm9ybV9kcml2ZXIpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwY3Nwa3JfcGxhdGZvcm1fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBjc3Brcl9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGNzcGtyX3BsYXRmb3JtX2RldmljZSk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjc3Brcl9wbGF0Zm9ybV9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKaW5kZXggNTQ2ZWQ5Yi4uZDcyM2U5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJaWYgKCFuZXdkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW5pdF9NVVRFWCgmbmV3ZGV2LT5zZW0pOworCW11dGV4X2luaXQoJm5ld2Rldi0+bXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZuZXdkZXYtPnJlcXVlc3RzX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5ld2Rldi0+cmVxdWVzdHNfd2FpdHEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5ld2Rldi0+d2FpdHEpOwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJc3RydWN0IHVpbnB1dF9kZXZpY2UgKnVkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSgmdWRldi0+c2VtKTsKKwlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnVkZXYtPm11dGV4KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAkJCXVpbnB1dF9pbmplY3RfZXZlbnQodWRldiwgYnVmZmVyLCBjb3VudCkgOgogCQkJdWlucHV0X3NldHVwX2RldmljZSh1ZGV2LCBidWZmZXIsIGNvdW50KTsKIAotCXVwKCZ1ZGV2LT5zZW0pOworCW11dGV4X3VubG9jaygmdWRldi0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM2OSw3ICszNjksNyBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR2YWwgPSBkb3duX2ludGVycnVwdGlibGUoJnVkZXYtPnNlbSk7CisJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ1ZGV2LT5tdXRleCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtMzg4LDcgKzM4OCw3IEBACiAJfQogCiAgb3V0OgotCXVwKCZ1ZGV2LT5zZW0pOworCW11dGV4X3VubG9jaygmdWRldi0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTQzOSw3ICs0MzksNyBAQAogCiAJdWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSgmdWRldi0+c2VtKTsKKwlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnVkZXYtPm11dGV4KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC01ODksNyArNTg5LDcgQEAKIAl9CiAKICBvdXQ6Ci0JdXAoJnVkZXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ1ZGV2LT5tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCmluZGV4IDRiNDE1ZDkuLmU0ZTViZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKQEAgLTI3Myw2ICsyNzMsMTggQEAKIAl7IEtFX0VORCwgIDAgfQogfTsKIAorc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX2Z1aml0c3VfbjM1MTBbXSA9IHsKKwl7IEtFX0tFWSwgMHgxMSwgS0VZX1BST0cxIH0sCisJeyBLRV9LRVksIDB4MTIsIEtFWV9QUk9HMiB9LAorCXsgS0VfS0VZLCAweDM2LCBLRVlfV1dXIH0sCisJeyBLRV9LRVksIDB4MzEsIEtFWV9NQUlMIH0sCisJeyBLRV9LRVksIDB4NzEsIEtFWV9TVE9QQ0QgfSwKKwl7IEtFX0tFWSwgMHg3MiwgS0VZX1BMQVlQQVVTRSB9LAorCXsgS0VfS0VZLCAweDc0LCBLRVlfUkVXSU5EIH0sCisJeyBLRV9LRVksIDB4NzgsIEtFWV9GT1JXQVJEIH0sCisJeyBLRV9FTkQsIDAgfQorfTsKKwogc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX3dpc3Ryb25fbXMyMTQxW10gPSB7CiAJeyBLRV9LRVksICAweDExLCBLRVlfUFJPRzEgfSwKIAl7IEtFX0tFWSwgIDB4MTIsIEtFWV9QUk9HMiB9LApAQCAtMzA2LDYgKzMxOCwxNiBAQAogCXsgS0VfRU5ELCAwIH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5IGtleW1hcF9hb3Blbl8xNTU5YXNbXSA9IHsKKwl7IEtFX0tFWSwgIDB4MDEsIEtFWV9IRUxQIH0sCisJeyBLRV9LRVksICAweDA2LCBLRVlfUFJPRzMgfSwKKwl7IEtFX0tFWSwgIDB4MTEsIEtFWV9QUk9HMSB9LAorCXsgS0VfS0VZLCAgMHgxMiwgS0VZX1BST0cyIH0sCisJeyBLRV9XSUZJLCAweDMwLCAwIH0sCisJeyBLRV9LRVksICAweDMxLCBLRVlfTUFJTCB9LAorCXsgS0VfS0VZLCAgMHgzNiwgS0VZX1dXVyB9LAorfTsKKwogLyoKICAqIElmIHlvdXIgbWFjaGluZSBpcyBub3QgaGVyZSAod2hpY2ggaXMgY3VycmVudGx5IHJhdGhlciBsaWtlbHkpLCBwbGVhc2Ugc2VuZAogICogYSBsaXN0IG9mIGJ1dHRvbnMgYW5kIHRoZWlyIGtleSBjb2RlcyAocmVwb3J0ZWQgd2hlbiBsb2FkaW5nIHRoaXMgbW9kdWxlCkBAIC0zMjMsNiArMzQ1LDI0IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIE03NDAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gTSAgICAgICAgIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9IGtleW1hcF9mc19hbWlsb19wcm9fdjIwMDAKKwl9LAorCXsKKwkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCisJCS5pZGVudCA9ICJGdWppdHN1IE4zNTEwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4zNTEwIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9IGtleW1hcF9mdWppdHN1X24zNTEwCisJfSwKKwl7CisJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAogCQkuaWRlbnQgPSAiQWNlciBBc3BpcmUgMTUwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLApAQCAtMzM5LDYgKzM3OSwxNSBAQAogCQl9LAogCQkuZHJpdmVyX2RhdGEgPSBrZXltYXBfYWNlcl90cmF2ZWxtYXRlXzI0MAogCX0sCisgICAgICAgIHsKKwkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCisJCS5pZGVudCA9ICJBT3BlbiAxNTU5QVMiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiRTJVIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJFMlUiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2FvcGVuXzE1NTlhcworCX0sCiAJeyBOVUxMLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCmluZGV4IDIxNDE1MDEuLmEwZTJlNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCkBAIC0xMDAsOCArMTAwLDggQEAKIAl9CiAKIAlpZiAocHJpdi0+aS0+ZmxhZ3MgJiBBTFBTX09MRFBST1RPKSB7Ci0JCWxlZnQgPSBwYWNrZXRbMl0gJiAweDA4OwotCQlyaWdodCA9IHBhY2tldFsyXSAmIDB4MTA7CisJCWxlZnQgPSBwYWNrZXRbMl0gJiAweDEwOworCQlyaWdodCA9IHBhY2tldFsyXSAmIDB4MDg7CiAJCW1pZGRsZSA9IDA7CiAJCXggPSBwYWNrZXRbMV0gfCAoKHBhY2tldFswXSAmIDB4MDcpIDw8IDcpOwogCQl5ID0gcGFja2V0WzRdIHwgKChwYWNrZXRbM10gJiAweDA3KSA8PCA3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGlsX3B0ci5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKaW5kZXggYmZiNTY0Zi4uNjlmMDIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKQEAgLTI0OSwxMCArMjQ5LDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcHRyLT5kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIXB0ci0+ZGV2KSBnb3RvIGJhaWwwOworCWlmICghcHRyLT5kZXYpCisJCWdvdG8gYmFpbDA7CisKIAlwdHItPmRldi0+cHJpdmF0ZSA9IHB0cjsKIAotCWlmIChzZXJpb19vcGVuKHNlcmlvLCBkcml2ZXIpKSBnb3RvIGJhaWwxOworCWlmIChzZXJpb19vcGVuKHNlcmlvLCBkcml2ZXIpKQorCQlnb3RvIGJhaWwxOwogCiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIHB0cik7CiAJcHRyLT5zZXJpbyA9IHNlcmlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCmluZGV4IDVjY2MzZWYuLmMxNDM5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKQEAgLTIyLDEyICsyMiwzNiBAQAogCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgbGlmZWJvb2tfZG1pX3RhYmxlW10gPSB7CiAgICAgICAgeworICAgICAgICAgICAgICAgLmlkZW50ID0gIkxpZmVCb29rIEIiLAorICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTGlmZUJvb2sgQiBTZXJpZXMiKSwKKyAgICAgICAgICAgICAgIH0sCisgICAgICAgfSwKKyAgICAgICB7CiAgICAgICAgICAgICAgICAuaWRlbnQgPSAiTGlmZWJvb2sgQiIsCiAgICAgICAgICAgICAgICAubWF0Y2hlcyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMSUZFQk9PSyBCIFNlcmllcyIpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKKyAgICAgICAgICAgICAgIC5pZGVudCA9ICJMaWZlYm9vayBCMjEzeC9CMjE1MCIsCisgICAgICAgICAgICAgICAubWF0Y2hlcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMaWZlQm9vayBCMjEzMS9CMjEzMy9CMjE1MCIpLAorICAgICAgICAgICAgICAgfSwKKyAgICAgICB9LAorICAgICAgIHsKKyAgICAgICAgICAgICAgIC5pZGVudCA9ICJaZXBoeXIiLAorICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiWkVQSFlSIiksCisgICAgICAgICAgICAgICB9LAorICAgICAgIH0sCisgICAgICAgeworICAgICAgICAgICAgICAgLmlkZW50ID0gIkNGLTE4IiwKKyAgICAgICAgICAgICAgIC5tYXRjaGVzID0geworICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNGLTE4IiksCisgICAgICAgICAgICAgICB9LAorICAgICAgIH0sCisgICAgICAgewogICAgICAgICAgICAgICAgLmlkZW50ID0gIkxpZmVib29rIEIxNDIiLAogICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTGlmZUJvb2sgQjE0MiIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKaW5kZXggNDAzMzNkNi4uMmYwZDI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIFBTMlBQX0tJTkRfV0hFRUwJMQogI2RlZmluZSBQUzJQUF9LSU5EX01YCQkyCiAjZGVmaW5lIFBTMlBQX0tJTkRfVFAzCQkzCisjZGVmaW5lIFBTMlBQX0tJTkRfVFJBQ0tNQU4JNAogCiAvKiBMb2dpdGVjaCBtb3VzZSBmZWF0dXJlcyAqLwogI2RlZmluZSBQUzJQUF9XSEVFTAkJMHgwMQpAQCAtMjIzLDYgKzIyNCw3IEBACiAJCXsgNzMsCTAsCQkJUFMyUFBfU0lERV9CVE4gfSwKIAkJeyA3NSwJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfV0hFRUwgfSwKIAkJeyA3NiwJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfV0hFRUwgfSwKKwkJeyA3OSwJUFMyUFBfS0lORF9UUkFDS01BTiwJUFMyUFBfV0hFRUwgfSwJCS8qIFRyYWNrTWFuIHdpdGggd2hlZWwgKi8KIAkJeyA4MCwJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfU0lERV9CVE4gfCBQUzJQUF9XSEVFTCB9LAogCQl7IDgxLAlQUzJQUF9LSU5EX1dIRUVMLAlQUzJQUF9XSEVFTCB9LAogCQl7IDgzLAlQUzJQUF9LSU5EX1dIRUVMLAlQUzJQUF9XSEVFTCB9LApAQCAtMjk4LDYgKzMwMCwxMCBAQAogCQkJcHNtb3VzZS0+bmFtZSA9ICJUb3VjaFBhZCAzIjsKIAkJCWJyZWFrOwogCisJCWNhc2UgUFMyUFBfS0lORF9UUkFDS01BTjoKKwkJCXBzbW91c2UtPm5hbWUgPSAiVHJhY2tNYW4iOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCS8qCiAJCQkgKiBTZXQgbmFtZSB0byAiTW91c2UiIG9ubHkgd2hlbiB1c2luZyBQUzIrKywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCmluZGV4IGFkNjIxNzQuLjEzNjMyMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYnBzMi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlICJwc21vdXNlLmgiCiAjaW5jbHVkZSAic3luYXB0aWNzLmgiCiAjaW5jbHVkZSAibG9naXBzMnBwLmgiCkBAIC05OCwxMyArMTAwLDEzIEBACiBfX29ic29sZXRlX3NldHVwKCJwc21vdXNlX3JhdGU9Iik7CiAKIC8qCi0gKiBwc21vdXNlX3NlbSBwcm90ZWN0cyBhbGwgb3BlcmF0aW9ucyBjaGFuZ2luZyBzdGF0ZSBvZiBtb3VzZQorICogcHNtb3VzZV9tdXRleCBwcm90ZWN0cyBhbGwgb3BlcmF0aW9ucyBjaGFuZ2luZyBzdGF0ZSBvZiBtb3VzZQogICogKGNvbm5lY3RpbmcsIGRpc2Nvbm5lY3RpbmcsIGNoYW5naW5nIHJhdGUgb3IgcmVzb2x1dGlvbiB2aWEKICAqIHN5c2ZzKS4gV2UgY291bGQgdXNlIGEgcGVyLWRldmljZSBzZW1hcGhvcmUgYnV0IHNpbmNlIHRoZXJlCiAgKiByYXJlbHkgbW9yZSB0aGFuIG9uZSBQUy8yIG1vdXNlIGNvbm5lY3RlZCBhbmQgc2luY2Ugc2VtYXBob3JlCiAgKiBpcyB0YWtlbiBpbiAic2xvdyIgcGF0aHMgaXQgaXMgbm90IHdvcnRoIGl0LgogICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChwc21vdXNlX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBzbW91c2VfbXV0ZXgpOwogCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtwc21vdXNlZF93cTsKIApAQCAtMzAwLDggKzMwMiwxMCBAQAogICogQ2hlY2sgaWYgdGhpcyBpcyBhIG5ldyBkZXZpY2UgYW5ub3VuY2VtZW50ICgweEFBIDB4MDApCiAgKi8KIAlpZiAodW5saWtlbHkocHNtb3VzZS0+cGFja2V0WzBdID09IFBTTU9VU0VfUkVUX0JBVCAmJiBwc21vdXNlLT5wa3RjbnQgPD0gMikpIHsKLQkJaWYgKHBzbW91c2UtPnBrdGNudCA9PSAxKQorCQlpZiAocHNtb3VzZS0+cGt0Y250ID09IDEpIHsKKwkJCXBzbW91c2UtPmxhc3QgPSBqaWZmaWVzOwogCQkJZ290byBvdXQ7CisJCX0KIAogCQlpZiAocHNtb3VzZS0+cGFja2V0WzFdID09IFBTTU9VU0VfUkVUX0lEKSB7CiAJCQlfX3BzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfSUdOT1JFKTsKQEAgLTg2OCw3ICs4NzIsNyBAQAogCWludCBmYWlsZWQgPSAwLCBlbmFibGVkID0gMDsKIAlpbnQgaTsKIAotCWRvd24oJnBzbW91c2Vfc2VtKTsKKwltdXRleF9sb2NrKCZwc21vdXNlX211dGV4KTsKIAogCWlmIChwc21vdXNlLT5zdGF0ZSAhPSBQU01PVVNFX1JFU1lOQ0lORykKIAkJZ290byBvdXQ7CkBAIC05NDgsNyArOTUyLDcgQEAKIAlpZiAocGFyZW50KQogCQlwc21vdXNlX2FjdGl2YXRlKHBhcmVudCk7CiAgb3V0OgotCXVwKCZwc21vdXNlX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwc21vdXNlX211dGV4KTsKIH0KIAogLyoKQEAgLTk3NCwxNCArOTc4LDE0IEBACiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNlcmlvLT5kZXYua29iaiwgJnBzbW91c2VfYXR0cmlidXRlX2dyb3VwKTsKIAotCWRvd24oJnBzbW91c2Vfc2VtKTsKKwltdXRleF9sb2NrKCZwc21vdXNlX211dGV4KTsKIAogCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQ01EX01PREUpOwogCiAJLyogbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgYSByZXN5bmMgaW4gcHJvZ3Jlc3MgKi8KLQl1cCgmcHNtb3VzZV9zZW0pOworCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CiAJZmx1c2hfd29ya3F1ZXVlKGtwc21vdXNlZF93cSk7Ci0JZG93bigmcHNtb3VzZV9zZW0pOworCW11dGV4X2xvY2soJnBzbW91c2VfbXV0ZXgpOwogCiAJaWYgKHNlcmlvLT5wYXJlbnQgJiYgc2VyaW8tPmlkLnR5cGUgPT0gU0VSSU9fUFNfUFNUSFJVKSB7CiAJCXBhcmVudCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvLT5wYXJlbnQpOwpAQCAtMTAwNCw3ICsxMDA4LDcgQEAKIAlpZiAocGFyZW50KQogCQlwc21vdXNlX2FjdGl2YXRlKHBhcmVudCk7CiAKLQl1cCgmcHNtb3VzZV9zZW0pOworCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgcHNtb3VzZV9zd2l0Y2hfcHJvdG9jb2woc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHN0cnVjdCBwc21vdXNlX3Byb3RvY29sICpwcm90bykKQEAgLTEwNzYsNyArMTA4MCw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JZG93bigmcHNtb3VzZV9zZW0pOworCW11dGV4X2xvY2soJnBzbW91c2VfbXV0ZXgpOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgcGFzcy10aHJvdWdoIHBvcnQgZGVhY3RpdmF0ZSBwYXJlbnQgc28gdGhlIGRldmljZQpAQCAtMTE0NCw3ICsxMTQ4LDcgQEAKIAlpZiAocGFyZW50KQogCQlwc21vdXNlX2FjdGl2YXRlKHBhcmVudCk7CiAKLQl1cCgmcHNtb3VzZV9zZW0pOworCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTE2MSw3ICsxMTY1LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWRvd24oJnBzbW91c2Vfc2VtKTsKKwltdXRleF9sb2NrKCZwc21vdXNlX211dGV4KTsKIAogCWlmIChzZXJpby0+cGFyZW50ICYmIHNlcmlvLT5pZC50eXBlID09IFNFUklPX1BTX1BTVEhSVSkgewogCQlwYXJlbnQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpby0+cGFyZW50KTsKQEAgLTExOTUsNyArMTE5OSw3IEBACiAJaWYgKHBhcmVudCkKIAkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOwogCi0JdXAoJnBzbW91c2Vfc2VtKTsKKwltdXRleF91bmxvY2soJnBzbW91c2VfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTI3Myw3ICsxMjc3LDcgQEAKIAkJZ290byBvdXRfdW5waW47CiAJfQogCi0JcmV0dmFsID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZwc21vdXNlX3NlbSk7CisJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwc21vdXNlX211dGV4KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF91bnBpbjsKIApAQCAtMTI4MSw3ICsxMjg1LDcgQEAKIAogCWlmIChwc21vdXNlLT5zdGF0ZSA9PSBQU01PVVNFX0lHTk9SRSkgewogCQlyZXR2YWwgPSAtRU5PREVWOwotCQlnb3RvIG91dF91cDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCWlmIChzZXJpby0+cGFyZW50ICYmIHNlcmlvLT5pZC50eXBlID09IFNFUklPX1BTX1BTVEhSVSkgewpAQCAtMTI5OSw4ICsxMzAzLDggQEAKIAlpZiAocGFyZW50KQogCQlwc21vdXNlX2FjdGl2YXRlKHBhcmVudCk7CiAKLSBvdXRfdXA6Ci0JdXAoJnBzbW91c2Vfc2VtKTsKKyBvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CiAgb3V0X3VucGluOgogCXNlcmlvX3VucGluX2RyaXZlcihzZXJpbyk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTEzNTcsMTEgKzEzNjEsMTEgQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJdXAoJnBzbW91c2Vfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwc21vdXNlX211dGV4KTsKIAkJc2VyaW9fdW5waW5fZHJpdmVyKHNlcmlvKTsKIAkJc2VyaW9fdW5yZWdpc3Rlcl9jaGlsZF9wb3J0KHNlcmlvKTsKIAkJc2VyaW9fcGluX2RyaXZlcl91bmludGVycnVwdGlibGUoc2VyaW8pOwotCQlkb3duKCZwc21vdXNlX3NlbSk7CisJCW11dGV4X2xvY2soJnBzbW91c2VfbXV0ZXgpOwogCiAJCWlmIChzZXJpby0+ZHJ2ICE9ICZwc21vdXNlX2RydikgewogCQkJaW5wdXRfZnJlZV9kZXZpY2UobmV3X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCAyMDUxYmVjLi5hZDVkMGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTI0NywxNCArMjQ3LDEyIEBACiB7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKIAotCXNlcmlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvKSwgR0ZQX0tFUk5FTCk7CisJc2VyaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNlcmlvKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3luYXB0aWNzOiBub3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSBwYXNzLXRocm91Z2ggcG9ydFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQltZW1zZXQoc2VyaW8sIDAsIHNpemVvZihzdHJ1Y3Qgc2VyaW8pKTsKLQogCXNlcmlvLT5pZC50eXBlID0gU0VSSU9fUFNfUFNUSFJVOwogCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJTeW5hcHRpY3MgcGFzcy10aHJvdWdoIiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7CiAJc3RybGNweShzZXJpby0+cGh5cywgInN5bmFwdGljcy1wdC9zZXJpbzAiLCBzaXplb2Yoc2VyaW8tPm5hbWUpKTsKQEAgLTYwNSwxNCArNjAzLDIxIEBACiAJCS5pZGVudCA9ICJUb3NoaWJhIFNhdGVsbGl0ZSIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiVE9TSElCQSIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUgLCAiU2F0ZWxsaXRlIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlNhdGVsbGl0ZSIpLAogCQl9LAogCX0sCiAJewogCQkuaWRlbnQgPSAiVG9zaGliYSBEeW5hYm9vayIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiVE9TSElCQSIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUgLCAiZHluYWJvb2siKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiZHluYWJvb2siKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIlRvc2hpYmEgUG9ydGVnZSBNMzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJUT1NISUJBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBPUlRFR0UgTTMwMCIpLAogCQl9LAogCX0sCiAJeyB9CkBAIC02MjMsMTAgKzYyOCw5IEBACiB7CiAJc3RydWN0IHN5bmFwdGljc19kYXRhICpwcml2OwogCi0JcHNtb3VzZS0+cHJpdmF0ZSA9IHByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlwc21vdXNlLT5wcml2YXRlID0gcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5hcHRpY3NfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC0xOwotCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IHN5bmFwdGljc19kYXRhKSk7CiAKIAlpZiAoc3luYXB0aWNzX3F1ZXJ5X2hhcmR3YXJlKHBzbW91c2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHF1ZXJ5IFN5bmFwdGljcyBoYXJkd2FyZS5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCmluZGV4IDlhYmVkMTguLmI2ODVhNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKQEAgLTQxMiw5ICs0MTIsOCBAQAogCWlmIChpID49IE1PVVNFREVWX01JTk9SUyB8fCAhbW91c2VkZXZfdGFibGVbaV0pCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCEobGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3VzZWRldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW91c2VkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGxpc3QsIDAsIHNpemVvZihzdHJ1Y3QgbW91c2VkZXZfbGlzdCkpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxpc3QtPnBhY2tldF9sb2NrKTsKIAlsaXN0LT5wb3NfeCA9IHhyZXMgLyAyOwpAQCAtNjI2LDkgKzYyNSw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICghKG1vdXNlZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1vdXNlZGV2KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKG1vdXNlZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vdXNlZGV2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQobW91c2VkZXYsIDAsIHNpemVvZihzdHJ1Y3QgbW91c2VkZXYpKTsKIAogCUlOSVRfTElTVF9IRUFEKCZtb3VzZWRldi0+bGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbW91c2VkZXYtPndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9wb3dlci5jIGIvZHJpdmVycy9pbnB1dC9wb3dlci5jCmluZGV4IGJmYzVjNjMuLjUyNmU2MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvcG93ZXIuYworKysgYi9kcml2ZXJzL2lucHV0L3Bvd2VyLmMKQEAgLTEwMyw5ICsxMDMsOCBAQAogewogCXN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZTsKIAotCWlmICghKGhhbmRsZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnB1dF9oYW5kbGUpLCBHRlBfS0VSTkVMKSkpCisJaWYgKCEoaGFuZGxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlucHV0X2hhbmRsZSksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9oYW5kbGUpKTsKIAogCWhhbmRsZS0+ZGV2ID0gZGV2OwogCWhhbmRsZS0+aGFuZGxlciA9IGhhbmRsZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaGlsX21sYy5jCmluZGV4IGVhNDk5NzguLmJiYmUxNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaGlsX21sYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaGlsX21sYy5jCkBAIC04NzIsOSArODcyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgSElMX01MQ19ERVZNRU07IGkrKykgewogCQlzdHJ1Y3Qgc2VyaW8gKm1sY19zZXJpbzsKIAkJaGlsX21sY19jb3B5X2RpX3NjcmF0Y2gobWxjLCBpKTsKLQkJbWxjX3NlcmlvID0ga21hbGxvYyhzaXplb2YoKm1sY19zZXJpbyksIEdGUF9LRVJORUwpOworCQltbGNfc2VyaW8gPSBremFsbG9jKHNpemVvZigqbWxjX3NlcmlvKSwgR0ZQX0tFUk5FTCk7CiAJCW1sYy0+c2VyaW9baV0gPSBtbGNfc2VyaW87Ci0JCW1lbXNldChtbGNfc2VyaW8sIDAsIHNpemVvZigqbWxjX3NlcmlvKSk7CiAJCW1sY19zZXJpby0+aWQJCQk9IGhpbF9tbGNfc2VyaW9faWQ7CiAJCW1sY19zZXJpby0+d3JpdGUJCT0gaGlsX21sY19zZXJpb193cml0ZTsKIAkJbWxjX3NlcmlvLT5vcGVuCQkJPSBoaWxfbWxjX3NlcmlvX29wZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmgKaW5kZXggOWE5MjIxNi4uY2MyMTkxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaApAQCAtNjcsMTQgKzY3LDE0IEBACiAgKiBPbiBzb21lIHBsYXRmb3JtcyB0b3VjaGluZyB0aGUgaTgwNDIgZGF0YSByZWdpc3RlciByZWdpb24gY2FuIGRvIHJlYWxseQogICogYmFkIHRoaW5ncy4gQmVjYXVzZSBvZiB0aGlzIHRoZSByZWdpb24gaXMgYWx3YXlzIHJlc2VydmVkIG9uIHN1Y2ggYm94ZXMuCiAgKi8KLSNpZiAhZGVmaW5lZChfX3NoX18pICYmICFkZWZpbmVkKF9fYWxwaGFfXykgJiYgIWRlZmluZWQoX19taXBzX18pICYmICFkZWZpbmVkKENPTkZJR19QUEM2NCkKKyNpZiAhZGVmaW5lZChfX3NoX18pICYmICFkZWZpbmVkKF9fYWxwaGFfXykgJiYgIWRlZmluZWQoX19taXBzX18pICYmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihJODA0Ml9EQVRBX1JFRywgMTYsICJpODA0MiIpKQogCQlyZXR1cm4gLUVCVVNZOwogI2VuZGlmCiAKICAgICAgICAgaTgwNDJfcmVzZXQgPSAxOwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KEk4MDQyX0RBVEFfUkVHKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKEk4MDQyX0RBVEFfUkVHLCAxNiwgImk4MDQyIikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAppbmRleCBhNGM2ZjM1Li5mNjA2ZTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKQEAgLTE5Miw3ICsxOTIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogCiBzdGF0aWMgaW50IGk4MDQyX3BucF9rYmRfcmVnaXN0ZXJlZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfcG5wX2tiZF9kZXZpY2VzOwogc3RhdGljIGludCBpODA0Ml9wbnBfYXV4X3JlZ2lzdGVyZWQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX3BucF9hdXhfZGV2aWNlczsKIAogc3RhdGljIGludCBpODA0Ml9wbnBfY29tbWFuZF9yZWc7CiBzdGF0aWMgaW50IGk4MDQyX3BucF9kYXRhX3JlZzsKQEAgLTIxOSw2ICsyMjEsNyBAQAogCQlzdHJuY2F0KGk4MDQyX3BucF9rYmRfbmFtZSwgcG5wX2Rldl9uYW1lKGRldiksIHNpemVvZihpODA0Ml9wbnBfa2JkX25hbWUpKTsKIAl9CiAKKwlpODA0Ml9wbnBfa2JkX2RldmljZXMrKzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM5LDYgKzI0Miw3IEBACiAJCXN0cm5jYXQoaTgwNDJfcG5wX2F1eF9uYW1lLCBwbnBfZGV2X25hbWUoZGV2KSwgc2l6ZW9mKGk4MDQyX3BucF9hdXhfbmFtZSkpOwogCX0KIAorCWk4MDQyX3BucF9hdXhfZGV2aWNlcysrOwogCXJldHVybiAwOwogfQogCkBAIC0yODcsMjEgKzI5MSwyMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9wbnBfaW5pdCh2b2lkKQogewotCWludCByZXN1bHRfa2JkID0gMCwgcmVzdWx0X2F1eCA9IDA7CiAJY2hhciBrYmRfaXJxX3N0cls0XSA9IHsgMCB9LCBhdXhfaXJxX3N0cls0XSA9IHsgMCB9OworCWludCBlcnI7CiAKIAlpZiAoaTgwNDJfbm9wbnApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaTgwNDI6IFBOUCBkZXRlY3Rpb24gZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoKHJlc3VsdF9rYmQgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZpODA0Ml9wbnBfa2JkX2RyaXZlcikpID49IDApCisJZXJyID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmaTgwNDJfcG5wX2tiZF9kcml2ZXIpOworCWlmICghZXJyKQogCQlpODA0Ml9wbnBfa2JkX3JlZ2lzdGVyZWQgPSAxOwogCi0JaWYgKChyZXN1bHRfYXV4ID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmaTgwNDJfcG5wX2F1eF9kcml2ZXIpKSA+PSAwKQorCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmk4MDQyX3BucF9hdXhfZHJpdmVyKTsKKwlpZiAoIWVycikKIAkJaTgwNDJfcG5wX2F1eF9yZWdpc3RlcmVkID0gMTsKIAotCWlmIChyZXN1bHRfa2JkIDw9IDAgJiYgcmVzdWx0X2F1eCA8PSAwKSB7CisJaWYgKCFpODA0Ml9wbnBfa2JkX2RldmljZXMgJiYgIWk4MDQyX3BucF9hdXhfZGV2aWNlcykgewogCQlpODA0Ml9wbnBfZXhpdCgpOwogI2lmIGRlZmluZWQoX19pYTY0X18pCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzExLDI0ICszMTcsMjQgQEAKICNlbmRpZgogCX0KIAotCWlmIChyZXN1bHRfa2JkID4gMCkKKwlpZiAoaTgwNDJfcG5wX2tiZF9kZXZpY2VzKQogCQlzbnByaW50ZihrYmRfaXJxX3N0ciwgc2l6ZW9mKGtiZF9pcnFfc3RyKSwKIAkJCSIlZCIsIGk4MDQyX3BucF9rYmRfaXJxKTsKLQlpZiAocmVzdWx0X2F1eCA+IDApCisJaWYgKGk4MDQyX3BucF9hdXhfZGV2aWNlcykKIAkJc25wcmludGYoYXV4X2lycV9zdHIsIHNpemVvZihhdXhfaXJxX3N0ciksCiAJCQkiJWQiLCBpODA0Ml9wbnBfYXV4X2lycSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJQTlA6IFBTLzIgQ29udHJvbGxlciBbJXMlcyVzXSBhdCAlI3gsJSN4IGlycSAlcyVzJXNcbiIsCi0JCWk4MDQyX3BucF9rYmRfbmFtZSwgKHJlc3VsdF9rYmQgPiAwICYmIHJlc3VsdF9hdXggPiAwKSA/ICIsIiA6ICIiLAorCQlpODA0Ml9wbnBfa2JkX25hbWUsIChpODA0Ml9wbnBfa2JkX2RldmljZXMgJiYgaTgwNDJfcG5wX2F1eF9kZXZpY2VzKSA/ICIsIiA6ICIiLAogCQlpODA0Ml9wbnBfYXV4X25hbWUsCiAJCWk4MDQyX3BucF9kYXRhX3JlZywgaTgwNDJfcG5wX2NvbW1hbmRfcmVnLAotCQlrYmRfaXJxX3N0ciwgKHJlc3VsdF9rYmQgPiAwICYmIHJlc3VsdF9hdXggPiAwKSA/ICIsIiA6ICIiLAorCQlrYmRfaXJxX3N0ciwgKGk4MDQyX3BucF9rYmRfZGV2aWNlcyAmJiBpODA0Ml9wbnBfYXV4X2RldmljZXMpID8gIiwiIDogIiIsCiAJCWF1eF9pcnFfc3RyKTsKIAogI2lmIGRlZmluZWQoX19pYTY0X18pCi0JaWYgKHJlc3VsdF9rYmQgPD0gMCkKKwlpZiAoIWk4MDQyX3BucF9rYmRfZGV2aWNlcykKIAkJaTgwNDJfbm9rYmQgPSAxOwotCWlmIChyZXN1bHRfYXV4IDw9IDApCisJaWYgKCFpODA0Ml9wbnBfYXV4X2RldmljZXMpCiAJCWk4MDQyX25vYXV4ID0gMTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYwppbmRleCBkNGM5OTBmLi43OWM5N2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAkJbWF4Ynl0ZXMgPSBzaXplb2YocHMyZGV2LT5jbWRidWYpOwogCX0KIAotCWRvd24oJnBzMmRldi0+Y21kX3NlbSk7CisJbXV0ZXhfbG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOwogCiAJc2VyaW9fcGF1c2VfcngocHMyZGV2LT5zZXJpbyk7CiAJcHMyZGV2LT5mbGFncyA9IFBTMl9GTEFHX0NNRDsKQEAgLTk0LDcgKzk0LDcgQEAKIAl3YWl0X2V2ZW50X3RpbWVvdXQocHMyZGV2LT53YWl0LAogCQkJICAgIShwczJkZXYtPmZsYWdzICYgUFMyX0ZMQUdfQ01EKSwKIAkJCSAgIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCkpOwotCXVwKCZwczJkZXYtPmNtZF9zZW0pOworCW11dGV4X3VubG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOwogfQogCiAvKgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlkb3duKCZwczJkZXYtPmNtZF9zZW0pOworCW11dGV4X2xvY2soJnBzMmRldi0+Y21kX211dGV4KTsKIAogCXNlcmlvX3BhdXNlX3J4KHBzMmRldi0+c2VyaW8pOwogCXBzMmRldi0+ZmxhZ3MgPSBjb21tYW5kID09IFBTMl9DTURfR0VUSUQgPyBQUzJfRkxBR19XQUlUSUQgOiAwOwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJcHMyZGV2LT5mbGFncyA9IDA7CiAJc2VyaW9fY29udGludWVfcngocHMyZGV2LT5zZXJpbyk7CiAKLQl1cCgmcHMyZGV2LT5jbWRfc2VtKTsKKwltdXRleF91bmxvY2soJnBzMmRldi0+Y21kX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI4MSw3ICsyODEsNyBAQAogCiB2b2lkIHBzMl9pbml0KHN0cnVjdCBwczJkZXYgKnBzMmRldiwgc3RydWN0IHNlcmlvICpzZXJpbykKIHsKLQlpbml0X01VVEVYKCZwczJkZXYtPmNtZF9zZW0pOworCW11dGV4X2luaXQoJnBzMmRldi0+Y21kX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwczJkZXYtPndhaXQpOwogCXBzMmRldi0+c2VyaW8gPSBzZXJpbzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGFya2JkLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3BhcmtiZC5jCmluZGV4IDFkMTVjMjguLmE1YzFmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGFya2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9wYXJrYmQuYwpAQCAtMTcxLDkgKzE3MSw4IEBACiB7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKIAotCXNlcmlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvKSwgR0ZQX0tFUk5FTCk7CisJc2VyaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2VyaW8pIHsKLQkJbWVtc2V0KHNlcmlvLCAwLCBzaXplb2Yoc3RydWN0IHNlcmlvKSk7CiAJCXNlcmlvLT5pZC50eXBlID0gcGFya2JkX21vZGU7CiAJCXNlcmlvLT53cml0ZSA9IHBhcmtiZF93cml0ZSwKIAkJc3RybGNweShzZXJpby0+bmFtZSwgIlBBUktCRCBBVC9YVCBrZXlib2FyZCBhZGFwdGVyIiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYwppbmRleCBhM2JkMTE1Li41MTNkMzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKQEAgLTExMSwxMSArMTExLDEwIEBACiB7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKIAotCXNlcmlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvKSwgR0ZQX0tFUk5FTCk7CisJc2VyaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNlcmlvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChzZXJpbywgMCwgc2l6ZW9mKHN0cnVjdCBzZXJpbykpOwogCXNlcmlvLT5pZC50eXBlCQk9IFNFUklPXzgwNDI7CiAJc2VyaW8tPndyaXRlCQk9IHJwY2tiZF93cml0ZTsKIAlzZXJpby0+b3BlbgkJPSBycGNrYmRfb3BlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwppbmRleCAyZjc2ODEzLi42NTIxMDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU2VyaW8gYWJzdHJhY3Rpb24gY29yZSIpOwpAQCAtNTIsMTAgKzUzLDEwIEBACiBFWFBPUlRfU1lNQk9MKHNlcmlvX3JlY29ubmVjdCk7CiAKIC8qCi0gKiBzZXJpb19zZW0gcHJvdGVjdHMgZW50aXJlIHNlcmlvIHN1YnN5c3RlbSBhbmQgaXMgdGFrZW4gZXZlcnkgdGltZQorICogc2VyaW9fbXV0ZXggcHJvdGVjdHMgZW50aXJlIHNlcmlvIHN1YnN5c3RlbSBhbmQgaXMgdGFrZW4gZXZlcnkgdGltZQogICogc2VyaW8gcG9ydCBvciBkcml2ZXIgcmVnaXN0cmVyZWQgb3IgdW5yZWdpc3RlcmVkLgogICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChzZXJpb19zZW0pOworc3RhdGljIERFRklORV9NVVRFWChzZXJpb19tdXRleCk7CiAKIHN0YXRpYyBMSVNUX0hFQUQoc2VyaW9fbGlzdCk7CiAKQEAgLTcwLDkgKzcxLDkgQEAKIHsKIAlpbnQgcmV0dmFsOwogCi0JZG93bigmc2VyaW8tPmRydl9zZW0pOworCW11dGV4X2xvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogCXJldHZhbCA9IGRydi0+Y29ubmVjdChzZXJpbywgZHJ2KTsKLQl1cCgmc2VyaW8tPmRydl9zZW0pOworCW11dGV4X3VubG9jaygmc2VyaW8tPmRydl9tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtODEsMjAgKzgyLDIwIEBACiB7CiAJaW50IHJldHZhbCA9IC0xOwogCi0JZG93bigmc2VyaW8tPmRydl9zZW0pOworCW11dGV4X2xvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogCWlmIChzZXJpby0+ZHJ2ICYmIHNlcmlvLT5kcnYtPnJlY29ubmVjdCkKIAkJcmV0dmFsID0gc2VyaW8tPmRydi0+cmVjb25uZWN0KHNlcmlvKTsKLQl1cCgmc2VyaW8tPmRydl9zZW0pOworCW11dGV4X3VubG9jaygmc2VyaW8tPmRydl9tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCBzZXJpb19kaXNjb25uZWN0X2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewotCWRvd24oJnNlcmlvLT5kcnZfc2VtKTsKKwltdXRleF9sb2NrKCZzZXJpby0+ZHJ2X211dGV4KTsKIAlpZiAoc2VyaW8tPmRydikKIAkJc2VyaW8tPmRydi0+ZGlzY29ubmVjdChzZXJpbyk7Ci0JdXAoJnNlcmlvLT5kcnZfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHNlcmlvX21hdGNoX3BvcnQoY29uc3Qgc3RydWN0IHNlcmlvX2RldmljZV9pZCAqaWRzLCBzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQpAQCAtMTk1LDYgKzE5Niw3IEBACiAJaWYgKChldmVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpb19ldmVudCksIEdGUF9BVE9NSUMpKSkgewogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2VyaW86IENhbid0IGdldCBtb2R1bGUgcmVmZXJlbmNlLCBkcm9wcGluZyBldmVudCAlZFxuIiwgZXZlbnRfdHlwZSk7CisJCQlrZnJlZShldmVudCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0yNzIsNyArMjc0LDcgQEAKIAlzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBzZXJpb19kcml2ZXIgKnNlcmlvX2RydjsKIAotCWRvd24oJnNlcmlvX3NlbSk7CisJbXV0ZXhfbG9jaygmc2VyaW9fbXV0ZXgpOwogCiAJLyoKIAkgKiBOb3RlIHRoYXQgd2UgaGFuZGxlIG9ubHkgb25lIGV2ZW50IGhlcmUgdG8gZ2l2ZSBzd3N1c3AKQEAgLTMxNCw3ICszMTYsNyBAQAogCQlzZXJpb19mcmVlX2V2ZW50KGV2ZW50KTsKIAl9CiAKLQl1cCgmc2VyaW9fc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvX211dGV4KTsKIH0KIAogLyoKQEAgLTQ0OSw3ICs0NTEsNyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSgmc2VyaW9fc2VtKTsKKwlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNlcmlvX211dGV4KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC00NjksNyArNDcxLDcgQEAKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAl9CiAKLQl1cCgmc2VyaW9fc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvX211dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC01MjQsNyArNTI2LDcgQEAKIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnNlcmlvLT5sb2NrKTsKLQlpbml0X01VVEVYKCZzZXJpby0+ZHJ2X3NlbSk7CisJbXV0ZXhfaW5pdCgmc2VyaW8tPmRydl9tdXRleCk7CiAJZGV2aWNlX2luaXRpYWxpemUoJnNlcmlvLT5kZXYpOwogCXNucHJpbnRmKHNlcmlvLT5kZXYuYnVzX2lkLCBzaXplb2Yoc2VyaW8tPmRldi5idXNfaWQpLAogCQkgInNlcmlvJWxkIiwgKGxvbmcpYXRvbWljX2luY19yZXR1cm4oJnNlcmlvX25vKSAtIDEpOwpAQCAtNjYxLDEwICs2NjMsMTAgQEAKICAqLwogdm9pZCBzZXJpb191bnJlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbykKIHsKLQlkb3duKCZzZXJpb19zZW0pOworCW11dGV4X2xvY2soJnNlcmlvX211dGV4KTsKIAlzZXJpb19kaXNjb25uZWN0X3BvcnQoc2VyaW8pOwogCXNlcmlvX2Rlc3Ryb3lfcG9ydChzZXJpbyk7Ci0JdXAoJnNlcmlvX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19tdXRleCk7CiB9CiAKIC8qCkBAIC02NzIsMTcgKzY3NCwxNyBAQAogICovCiB2b2lkIHNlcmlvX3VucmVnaXN0ZXJfY2hpbGRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewotCWRvd24oJnNlcmlvX3NlbSk7CisJbXV0ZXhfbG9jaygmc2VyaW9fbXV0ZXgpOwogCWlmIChzZXJpby0+Y2hpbGQpIHsKIAkJc2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvLT5jaGlsZCk7CiAJCXNlcmlvX2Rlc3Ryb3lfcG9ydChzZXJpby0+Y2hpbGQpOwogCX0KLQl1cCgmc2VyaW9fc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvX211dGV4KTsKIH0KIAogLyoKICAqIFN1Ym1pdHMgcmVnaXN0ZXIgcmVxdWVzdCB0byBrc2VyaW9kIGZvciBzdWJzZXF1ZW50IGV4ZWN1dGlvbi4KLSAqIENhbiBiZSB1c2VkIHdoZW4gaXQgaXMgbm90IG9idmlvdXMgd2hldGhlciB0aGUgc2VyaW9fc2VtIGlzCisgKiBDYW4gYmUgdXNlZCB3aGVuIGl0IGlzIG5vdCBvYnZpb3VzIHdoZXRoZXIgdGhlIHNlcmlvX211dGV4IGlzCiAgKiB0YWtlbiBvciBub3QgYW5kIHdoZW4gZGVsYXllZCBleGVjdXRpb24gaXMgZmVhc2libGUuCiAgKi8KIHZvaWQgX19zZXJpb191bnJlZ2lzdGVyX3BvcnRfZGVsYXllZChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKQEAgLTc2NSw3ICs3NjcsNyBAQAogewogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAKLQlkb3duKCZzZXJpb19zZW0pOworCW11dGV4X2xvY2soJnNlcmlvX211dGV4KTsKIAlkcnYtPm1hbnVhbF9iaW5kID0gMTsJLyogc28gc2VyaW9fZmluZF9kcml2ZXIgaWdub3JlcyBpdCAqLwogCiBzdGFydF9vdmVyOgpAQCAtNzc5LDcgKzc4MSw3IEBACiAJfQogCiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKLQl1cCgmc2VyaW9fc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaW9fc2V0X2RydihzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpCkBAIC04NTgsNyArODYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogY2FsbGVkIGZyb20gc2VyaW9fZHJpdmVyLT5jb25uZWN0L2Rpc2Nvbm5lY3QgbWV0aG9kcyB1bmRlciBzZXJpb19zZW0gKi8KKy8qIGNhbGxlZCBmcm9tIHNlcmlvX2RyaXZlci0+Y29ubmVjdC9kaXNjb25uZWN0IG1ldGhvZHMgdW5kZXIgc2VyaW9fbXV0ZXggKi8KIGludCBzZXJpb19vcGVuKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydikKIHsKIAlzZXJpb19zZXRfZHJ2KHNlcmlvLCBkcnYpOwpAQCAtODcwLDcgKzg3Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGNhbGxlZCBmcm9tIHNlcmlvX2RyaXZlci0+Y29ubmVjdC9kaXNjb25uZWN0IG1ldGhvZHMgdW5kZXIgc2VyaW9fc2VtICovCisvKiBjYWxsZWQgZnJvbSBzZXJpb19kcml2ZXItPmNvbm5lY3QvZGlzY29ubmVjdCBtZXRob2RzIHVuZGVyIHNlcmlvX211dGV4ICovCiB2b2lkIHNlcmlvX2Nsb3NlKHN0cnVjdCBzZXJpbyAqc2VyaW8pCiB7CiAJaWYgKHNlcmlvLT5jbG9zZSkKQEAgLTkyMyw1ICs5MjUsNSBAQAogCWt0aHJlYWRfc3RvcChzZXJpb190YXNrKTsKIH0KIAotbW9kdWxlX2luaXQoc2VyaW9faW5pdCk7CitzdWJzeXNfaW5pdGNhbGwoc2VyaW9faW5pdCk7CiBtb2R1bGVfZXhpdChzZXJpb19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCmluZGV4IDQ3ZTA4ZGUuLjVhMjcwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBEUklWRVJfREVTQwkiUmF3IHNlcmlvIGRyaXZlciIKIApAQCAtNDYsNyArNDcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIH07CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKHNlcmlvX3Jhd19zZW0pOworc3RhdGljIERFRklORV9NVVRFWChzZXJpb19yYXdfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChzZXJpb19yYXdfbGlzdCk7CiBzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlvX3Jhd19ubzsKIApAQCAtODEsNyArODIsNyBAQAogCXN0cnVjdCBzZXJpb19yYXdfbGlzdCAqbGlzdDsKIAlpbnQgcmV0dmFsID0gMDsKIAotCXJldHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSgmc2VyaW9fcmF3X3NlbSk7CisJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzZXJpb19yYXdfbXV0ZXgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTk1LDEyICs5NiwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIShsaXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvX3Jhd19saXN0KSwgR0ZQX0tFUk5FTCkpKSB7CisJaWYgKCEobGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpb19yYXdfbGlzdCksIEdGUF9LRVJORUwpKSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKLQltZW1zZXQobGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJpb19yYXdfbGlzdCkpOwogCWxpc3QtPnNlcmlvX3JhdyA9IHNlcmlvX3JhdzsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBsaXN0OwogCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlsaXN0X2FkZF90YWlsKCZsaXN0LT5ub2RlLCAmc2VyaW9fcmF3LT5saXN0KTsKIAogb3V0OgotCXVwKCZzZXJpb19yYXdfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvX3Jhd19tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTMwLDEyICsxMzAsMTIgQEAKIAlzdHJ1Y3Qgc2VyaW9fcmF3X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNlcmlvX3JhdyAqc2VyaW9fcmF3ID0gbGlzdC0+c2VyaW9fcmF3OwogCi0JZG93bigmc2VyaW9fcmF3X3NlbSk7CisJbXV0ZXhfbG9jaygmc2VyaW9fcmF3X211dGV4KTsKIAogCXNlcmlvX3Jhd19mYXN5bmMoLTEsIGZpbGUsIDApOwogCXNlcmlvX3Jhd19jbGVhbnVwKHNlcmlvX3Jhdyk7CiAKLQl1cCgmc2VyaW9fcmF3X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19yYXdfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGNoYXIgYzsKIAotCXJldHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSgmc2VyaW9fcmF3X3NlbSk7CisJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzZXJpb19yYXdfbXV0ZXgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTIxOSw3ICsyMTksNyBAQAogCX07CiAKIG91dDoKLQl1cCgmc2VyaW9fcmF3X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19yYXdfbXV0ZXgpOwogCXJldHVybiB3cml0dGVuOwogfQogCkBAIC0yNzUsMTQgKzI3NSwxMyBAQAogCXN0cnVjdCBzZXJpb19yYXcgKnNlcmlvX3JhdzsKIAlpbnQgZXJyOwogCi0JaWYgKCEoc2VyaW9fcmF3ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvX3JhdyksIEdGUF9LRVJORUwpKSkgeworCWlmICghKHNlcmlvX3JhdyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpb19yYXcpLCBHRlBfS0VSTkVMKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzZXJpb19yYXcuYzogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRvd24oJnNlcmlvX3Jhd19zZW0pOworCW11dGV4X2xvY2soJnNlcmlvX3Jhd19tdXRleCk7CiAKLQltZW1zZXQoc2VyaW9fcmF3LCAwLCBzaXplb2Yoc3RydWN0IHNlcmlvX3JhdykpOwogCXNucHJpbnRmKHNlcmlvX3Jhdy0+bmFtZSwgc2l6ZW9mKHNlcmlvX3Jhdy0+bmFtZSksICJzZXJpb19yYXclZCIsIHNlcmlvX3Jhd19ubysrKTsKIAlzZXJpb19yYXctPnJlZmNudCA9IDE7CiAJc2VyaW9fcmF3LT5zZXJpbyA9IHNlcmlvOwpAQCAtMzI1LDcgKzMyNCw3IEBACiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwogCWtmcmVlKHNlcmlvX3Jhdyk7CiBvdXQ6Ci0JdXAoJnNlcmlvX3Jhd19zZW0pOworCW11dGV4X3VubG9jaygmc2VyaW9fcmF3X211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNTAsNyArMzQ5LDcgQEAKIHsKIAlzdHJ1Y3Qgc2VyaW9fcmF3ICpzZXJpb19yYXc7CiAKLQlkb3duKCZzZXJpb19yYXdfc2VtKTsKKwltdXRleF9sb2NrKCZzZXJpb19yYXdfbXV0ZXgpOwogCiAJc2VyaW9fcmF3ID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwogCkBAIC0zNjEsNyArMzYwLDcgQEAKIAlpZiAoIXNlcmlvX3Jhd19jbGVhbnVwKHNlcmlvX3JhdykpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2VyaW9fcmF3LT53YWl0KTsKIAotCXVwKCZzZXJpb19yYXdfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvX3Jhd19tdXRleCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VyaW9fZGV2aWNlX2lkIHNlcmlvX3Jhd19zZXJpb19pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggNDZkMWZlYy4uMTYxYWZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTIsNiArMiw4IEBACiAgKiBBRFM3ODQ2IGJhc2VkIHRvdWNoc2NyZWVuIGFuZCBzZW5zb3IgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIFZhcmlvdXMgY2hhbmdlczogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgogICoKICAqIFVzaW5nIGNvZGUgZnJvbToKICAqICAtIGNvcmdpX3RzLmMKQEAgLTM0LDE3ICszNiwyMiBAQAogCiAKIC8qCi0gKiBUaGlzIGNvZGUgaGFzIGJlZW4gbGlnaHRseSB0ZXN0ZWQgb24gYW4gYWRzNzg0Ni4KKyAqIFRoaXMgY29kZSBoYXMgYmVlbiBoZWF2aWx5IHRlc3RlZCBvbiBhIE5va2lhIDc3MCwgYW5kIGxpZ2h0bHkKKyAqIHRlc3RlZCBvbiBvdGhlciBhZHM3ODQ2IGRldmljZXMgKE9TSy9NaXN0cmFsLCBMdWJib2NrKS4KICAqIFN1cHBvcnQgZm9yIGFkczc4NDMgYW5kIGFkczc4NDUgaGFzIG9ubHkgYmVlbiBzdHViYmVkIGluLgogICoKLSAqIE5vdCB5ZXQgZG9uZTogIGludmVzdGlnYXRlIHRoZSB2YWx1ZXMgcmVwb3J0ZWQuICBBcmUgeC95L3ByZXNzdXJlCi0gKiBldmVudCB2YWx1ZXMgc2FuZSBlbm91Z2ggZm9yIFgxMT8gIEhvdyBhY2N1cmF0ZSBhcmUgdGhlIHRlbXBlcmF0dXJlCi0gKiBhbmQgdm9sdGFnZSByZWFkaW5ncz8gIChTeXN0ZW0tc3BlY2lmaWMgY2FsaWJyYXRpb24gc2hvdWxkIHN1cHBvcnQKLSAqIGFjY3VyYWN5IG9mIDAuMyBkZWdyZWVzIEM7IG90aGVyd2lzZSBpdCdzIDIuMCBkZWdyZWVzLikKKyAqIElSUSBoYW5kbGluZyBuZWVkcyBhIHdvcmthcm91bmQgYmVjYXVzZSBvZiBhIHNob3J0Y29taW5nIGluIGhhbmRsaW5nCisgKiBlZGdlIHRyaWdnZXJlZCBJUlFzIG9uIHNvbWUgcGxhdGZvcm1zIGxpa2UgdGhlIE9NQVAxLzIuIFRoZXNlCisgKiBwbGF0Zm9ybXMgZG9uJ3QgaGFuZGxlIHRoZSBBUk0gbGF6eSBJUlEgZGlzYWJsaW5nIHByb3Blcmx5LCB0aHVzIHdlCisgKiBoYXZlIHRvIG1haW50YWluIG91ciBvd24gU1cgSVJRIGRpc2FibGVkIHN0YXR1cy4gVGhpcyBzaG91bGQgYmUKKyAqIHJlbW92ZWQgYXMgc29vbiBhcyB0aGUgYWZmZWN0ZWQgcGxhdGZvcm0ncyBJUlEgaGFuZGxpbmcgaXMgZml4ZWQuCiAgKgogICogYXBwIG5vdGUgc2JhYTAzNiB0YWxrcyBpbiBtb3JlIGRldGFpbCBhYm91dCBhY2N1cmF0ZSBzYW1wbGluZy4uLgogICogdGhhdCBvdWdodCB0byBoZWxwIGluIHNpdHVhdGlvbnMgbGlrZSBMQ0RzIGluZHVjaW5nIG5vaXNlICh3aGljaAogICogY2FuIGFsc28gYmUgaGVscGVkIGJ5IHVzaW5nIHN5bmNoIHNpZ25hbHMpIGFuZCBtb3JlIGdlbmVyYWxseS4KKyAqIFRoaXMgZHJpdmVyIHRyaWVzIHRvIHV0aWxpemUgdGhlIG1lYXN1cmVzIGRlc2NyaWJlZCBpbiB0aGUgYXBwCisgKiBub3RlLiBUaGUgc3RyZW5ndGggb2YgZmlsdGVyaW5nIGNhbiBiZSBzZXQgaW4gdGhlIGJvYXJkLSogc3BlY2lmaWMKKyAqIGZpbGVzLgogICovCiAKICNkZWZpbmUJVFNfUE9MTF9QRVJJT0QJbXNlY3NfdG9famlmZmllcygxMCkKQEAgLTYxLDYgKzY4LDcgQEAKIAlfX2JlMTYgeDsKIAlfX2JlMTYgeTsKIAlfX2JlMTYgejEsIHoyOworCWludCAgICBpZ25vcmU7CiB9OwogCiBzdHJ1Y3QgYWRzNzg0NiB7CkBAIC03MSwxMiArNzksMjMgQEAKIAl1MTYJCQltb2RlbDsKIAl1MTYJCQl2cmVmX2RlbGF5X3VzZWNzOwogCXUxNgkJCXhfcGxhdGVfb2htczsKKwl1MTYJCQlwcmVzc3VyZV9tYXg7CiAKLQl1OAkJCXJlYWRfeCwgcmVhZF95LCByZWFkX3oxLCByZWFkX3oyOworCXU4CQkJcmVhZF94LCByZWFkX3ksIHJlYWRfejEsIHJlYWRfejIsIHB3cmRvd247CisJdTE2CQkJZHVtbXk7CQkvKiBmb3IgdGhlIHB3cmRvd24gcmVhZCAqLwogCXN0cnVjdCB0c19ldmVudAkJdGM7CiAKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhmZXJbOF07Ci0Jc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhmZXJbMTBdOworCXN0cnVjdCBzcGlfbWVzc2FnZQltc2dbNV07CisJc3RydWN0IHNwaV9tZXNzYWdlCSpsYXN0X21zZzsKKwlpbnQJCQltc2dfaWR4OworCWludAkJCXJlYWRfY250OworCWludAkJCXJlYWRfcmVwOworCWludAkJCWxhc3RfcmVhZDsKKworCXUxNgkJCWRlYm91bmNlX21heDsKKwl1MTYJCQlkZWJvdW5jZV90b2w7CisJdTE2CQkJZGVib3VuY2VfcmVwOwogCiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsJCS8qIFA6IGxvY2sgKi8KQEAgLTg0LDYgKzEwMyw5IEBACiAJdW5zaWduZWQJCXBlbmRpbmc6MTsJLyogUDogbG9jayAqLwogLy8gRklYTUUgcmVtb3ZlICJpcnFfZGlzYWJsZWQiCiAJdW5zaWduZWQJCWlycV9kaXNhYmxlZDoxOwkvKiBQOiBsb2NrICovCisJdW5zaWduZWQJCWRpc2FibGVkOjE7CisKKwlpbnQJCQkoKmdldF9wZW5kb3duX3N0YXRlKSh2b2lkKTsKIH07CiAKIC8qIGxlYXZlIGNoaXAgc2VsZWN0ZWQgd2hlbiB3ZSdyZSBkb25lLCBmb3IgcXVpY2tlciByZS1zZWxlY3Q/ICovCkBAIC0xMjUsNyArMTQ3LDkgQEAKICNkZWZpbmUJUkVBRF9ZCShSRUFEXzEyQklUX0RGUih5KSAgfCBBRFNfUEQxMF9BRENfT04pCiAjZGVmaW5lCVJFQURfWjEJKFJFQURfMTJCSVRfREZSKHoxKSB8IEFEU19QRDEwX0FEQ19PTikKICNkZWZpbmUJUkVBRF9aMgkoUkVBRF8xMkJJVF9ERlIoejIpIHwgQURTX1BEMTBfQURDX09OKQotI2RlZmluZQlSRUFEX1gJKFJFQURfMTJCSVRfREZSKHgpICB8IEFEU19QRDEwX1BET1dOKQkvKiBMQVNUICovCisKKyNkZWZpbmUJUkVBRF9YCShSRUFEXzEyQklUX0RGUih4KSAgfCBBRFNfUEQxMF9BRENfT04pCisjZGVmaW5lCVBXUkRPV04JKFJFQURfMTJCSVRfREZSKHkpICB8IEFEU19QRDEwX1BET1dOKQkvKiBMQVNUICovCiAKIC8qIHNpbmdsZS1lbmRlZCBzYW1wbGVzIG5lZWQgdG8gZmlyc3QgcG93ZXIgdXAgcmVmZXJlbmNlIHZvbHRhZ2U7CiAgKiB3ZSBsZWF2ZSBib3RoIEFEQyBhbmQgVlJFRiBwb3dlcmVkCkBAIC0xNTIsNiArMTc2LDE1IEBACiAJc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyWzZdOwogfTsKIAorc3RhdGljIHZvaWQgYWRzNzg0Nl9lbmFibGUoc3RydWN0IGFkczc4NDYgKnRzKTsKK3N0YXRpYyB2b2lkIGFkczc4NDZfZGlzYWJsZShzdHJ1Y3QgYWRzNzg0NiAqdHMpOworCitzdGF0aWMgaW50IGRldmljZV9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX09OIHx8IHRzLT5kaXNhYmxlZDsKK30KKwogc3RhdGljIGludCBhZHM3ODQ2X3JlYWQxMl9zZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjb21tYW5kKQogewogCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CkBAIC0xNjQsNyArMTk3LDcgQEAKIAlpZiAoIXJlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlJTklUX0xJU1RfSEVBRCgmcmVxLT5tc2cudHJhbnNmZXJzKTsKKwlzcGlfbWVzc2FnZV9pbml0KCZyZXEtPm1zZyk7CiAKIAkvKiBhY3RpdmF0ZSByZWZlcmVuY2UsIHNvIGl0IGhhcyB0aW1lIHRvIHNldHRsZTsgKi8KIAlyZXEtPnJlZl9vbiA9IFJFRl9PTjsKQEAgLTIwNCwxNiArMjM3LDIxIEBACiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnJlcS0+eGZlcltpXSwgJnJlcS0+bXNnKTsKIAorCXRzLT5pcnFfZGlzYWJsZWQgPSAxOwogCWRpc2FibGVfaXJxKHNwaS0+aXJxKTsKIAlzdGF0dXMgPSBzcGlfc3luYyhzcGksICZyZXEtPm1zZyk7CisJdHMtPmlycV9kaXNhYmxlZCA9IDA7CiAJZW5hYmxlX2lycShzcGktPmlycSk7CiAKIAlpZiAocmVxLT5tc2cuc3RhdHVzKQogCQlzdGF0dXMgPSByZXEtPm1zZy5zdGF0dXM7Ci0Jc2FtcGxlID0gYmUxNl90b19jcHUocmVxLT5zYW1wbGUpOwotCXNhbXBsZSA9IHNhbXBsZSA+PiA0OwotCWtmcmVlKHJlcSk7CiAKKwkvKiBvbi13aXJlIGlzIGEgbXVzdC1pZ25vcmUgYml0LCBhIEJFMTIgdmFsdWUsIHRoZW4gcGFkZGluZyAqLworCXNhbXBsZSA9IGJlMTZfdG9fY3B1KHJlcS0+c2FtcGxlKTsKKwlzYW1wbGUgPSBzYW1wbGUgPj4gMzsKKwlzYW1wbGUgJj0gMHgwZmZmOworCisJa2ZyZWUocmVxKTsKIAlyZXR1cm4gc3RhdHVzID8gc3RhdHVzIDogc2FtcGxlOwogfQogCkBAIC0yMzMsNiArMjcxLDUyIEBACiBTSE9XKHZhdXgpCiBTSE9XKHZiYXR0KQogCitzdGF0aWMgaW50IGlzX3Blbl9kb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRzNzg0NgkJKnRzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gdHMtPnBlbmRvd247Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkczc4NDZfcGVuX2Rvd25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBpc19wZW5fZG93bihkZXYpKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBlbl9kb3duLCBTX0lSVUdPLCBhZHM3ODQ2X3Blbl9kb3duX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBhZHM3ODQ2X2Rpc2FibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhZHM3ODQ2CSp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHRzLT5kaXNhYmxlZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkczc4NDZfZGlzYWJsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKmVuZHA7CisJaW50IGk7CisKKwlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMTApOworCXNwaW5fbG9ja19pcnEoJnRzLT5sb2NrKTsKKworCWlmIChpKQorCQlhZHM3ODQ2X2Rpc2FibGUodHMpOworCWVsc2UKKwkJYWRzNzg0Nl9lbmFibGUodHMpOworCisJc3Bpbl91bmxvY2tfaXJxKCZ0cy0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkaXNhYmxlLCAwNjY0LCBhZHM3ODQ2X2Rpc2FibGVfc2hvdywgYWRzNzg0Nl9kaXNhYmxlX3N0b3JlKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC0yNTIsMTkgKzMzNiwxOSBAQAogCXUxNgkJCXgsIHksIHoxLCB6MjsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAotCS8qIGFkanVzdDogIDEyIGJpdCBzYW1wbGVzIChsZWZ0IGFsaWduZWQpLCBidWlsdCBmcm9tCi0JICogdHdvIDggYml0IHZhbHVlcyB3cml0ZW4gbXNiLWZpcnN0LgorCS8qIGFkanVzdDogIG9uLXdpcmUgaXMgYSBtdXN0LWlnbm9yZSBiaXQsIGEgQkUxMiB2YWx1ZSwgdGhlbiBwYWRkaW5nOworCSAqIGJ1aWx0IGZyb20gdHdvIDggYml0IHZhbHVlcyB3cml0dGVuIG1zYi1maXJzdC4KIAkgKi8KLQl4ID0gYmUxNl90b19jcHUodHMtPnRjLngpID4+IDQ7Ci0JeSA9IGJlMTZfdG9fY3B1KHRzLT50Yy55KSA+PiA0OwotCXoxID0gYmUxNl90b19jcHUodHMtPnRjLnoxKSA+PiA0OwotCXoyID0gYmUxNl90b19jcHUodHMtPnRjLnoyKSA+PiA0OworCXggPSAoYmUxNl90b19jcHUodHMtPnRjLngpID4+IDMpICYgMHgwZmZmOworCXkgPSAoYmUxNl90b19jcHUodHMtPnRjLnkpID4+IDMpICYgMHgwZmZmOworCXoxID0gKGJlMTZfdG9fY3B1KHRzLT50Yy56MSkgPj4gMykgJiAweDBmZmY7CisJejIgPSAoYmUxNl90b19jcHUodHMtPnRjLnoyKSA+PiAzKSAmIDB4MGZmZjsKIAogCS8qIHJhbmdlIGZpbHRlcmluZyAqLwogCWlmICh4ID09IE1BWF8xMkJJVCkKIAkJeCA9IDA7CiAKLQlpZiAoeCAmJiB6MSAmJiB0cy0+c3BpLT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04pIHsKKwlpZiAobGlrZWx5KHggJiYgejEgJiYgIWRldmljZV9zdXNwZW5kZWQoJnRzLT5zcGktPmRldikpKSB7CiAJCS8qIGNvbXB1dGUgdG91Y2ggcHJlc3N1cmUgcmVzaXN0YW5jZSB1c2luZyBlcXVhdGlvbiAjMiAqLwogCQlSdCA9IHoyOwogCQlSdCAtPSB6MTsKQEAgLTI3NSw2ICszNTksMTQgQEAKIAl9IGVsc2UKIAkJUnQgPSAwOwogCisJLyogU2FtcGxlIGZvdW5kIGluY29uc2lzdGVudCBieSBkZWJvdW5jaW5nIG9yIHByZXNzdXJlIGlzIGJleW9uZAorCSogdGhlIG1heGltdW0uIERvbid0IHJlcG9ydCBpdCB0byB1c2VyIHNwYWNlLCByZXBlYXQgYXQgbGVhc3QKKwkqIG9uY2UgbW9yZSB0aGUgbWVhc3VyZW1lbnQgKi8KKwlpZiAodHMtPnRjLmlnbm9yZSB8fCBSdCA+IHRzLT5wcmVzc3VyZV9tYXgpIHsKKwkJbW9kX3RpbWVyKCZ0cy0+dGltZXIsIGppZmZpZXMgKyBUU19QT0xMX1BFUklPRCk7CisJCXJldHVybjsKKwl9CisKIAkvKiBOT1RFOiAgInBlbmRvd24iIGlzIGluZmVycmVkIGZyb20gcHJlc3N1cmU7IHdlIGRvbid0IHJlbHkgb24KIAkgKiBiZWluZyBhYmxlIHRvIGNoZWNrIG5QRU5JUlEgc3RhdHVzLCBvciAiZnJpZW5kbHkiIHRyaWdnZXIgbW9kZXMKIAkgKiAoYm90aC1lZGdlcyBpcyBtdWNoIGJldHRlciB0aGFuIGp1c3QtZmFsbGluZyBvciBsb3ctbGV2ZWwpLgpAQCAtMjk2LDExICszODgsMTMgQEAKIAlpZiAoUnQpIHsKIAkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19YLCB4KTsKIAkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19ZLCB5KTsKLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgUnQpOwogCQlzeW5jID0gMTsKIAl9Ci0JaWYgKHN5bmMpCisKKwlpZiAoc3luYykgeworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCBSdCk7CiAJCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKKwl9CiAKICNpZmRlZglWRVJCT1NFCiAJaWYgKFJ0IHx8IHRzLT5wZW5kb3duKQpAQCAtMzA4LDgwICs0MDIsMTM3IEBACiAJCQl4LCB5LCBSdCwgUnQgPyAiIiA6ICIgVVAiKTsKICNlbmRpZgogCi0JLyogZG9uJ3QgcmV0cmlnZ2VyIHdoaWxlIHdlJ3JlIHN1c3BlbmRlZCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cy0+bG9jaywgZmxhZ3MpOwogCiAJdHMtPnBlbmRvd24gPSAoUnQgIT0gMCk7Ci0JdHMtPnBlbmRpbmcgPSAwOwotCi0JaWYgKHRzLT5zcGktPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTikgewotCQlpZiAodHMtPnBlbmRvd24pCi0JCQltb2RfdGltZXIoJnRzLT50aW1lciwgamlmZmllcyArIFRTX1BPTExfUEVSSU9EKTsKLQkJZWxzZSBpZiAodHMtPmlycV9kaXNhYmxlZCkgewotCQkJdHMtPmlycV9kaXNhYmxlZCA9IDA7Ci0JCQllbmFibGVfaXJxKHRzLT5zcGktPmlycSk7Ci0JCX0KLQl9CisJbW9kX3RpbWVyKCZ0cy0+dGltZXIsIGppZmZpZXMgKyBUU19QT0xMX1BFUklPRCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cy0+bG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBhZHM3ODQ2X2RlYm91bmNlKHZvaWQgKmFkcykKK3sKKwlzdHJ1Y3QgYWRzNzg0NgkJKnRzID0gYWRzOworCXN0cnVjdCBzcGlfbWVzc2FnZQkqbTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCSp0OworCWludAkJCXZhbDsKKwlpbnQJCQlzdGF0dXM7CisKKwltID0gJnRzLT5tc2dbdHMtPm1zZ19pZHhdOworCXQgPSBsaXN0X2VudHJ5KG0tPnRyYW5zZmVycy5wcmV2LCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyLCB0cmFuc2Zlcl9saXN0KTsKKwl2YWwgPSAoYmUxNl90b19jcHUoKihfX2JlMTYgKil0LT5yeF9idWYpID4+IDMpICYgMHgwZmZmOworCWlmICghdHMtPnJlYWRfY250IHx8IChhYnModHMtPmxhc3RfcmVhZCAtIHZhbCkgPiB0cy0+ZGVib3VuY2VfdG9sKSkgeworCQkvKiBSZXBlYXQgaXQsIGlmIHRoaXMgd2FzIHRoZSBmaXJzdCByZWFkIG9yIHRoZSByZWFkCisJCSAqIHdhc24ndCBjb25zaXN0ZW50IGVub3VnaC4gKi8KKwkJaWYgKHRzLT5yZWFkX2NudCA8IHRzLT5kZWJvdW5jZV9tYXgpIHsKKwkJCXRzLT5sYXN0X3JlYWQgPSB2YWw7CisJCQl0cy0+cmVhZF9jbnQrKzsKKwkJfSBlbHNlIHsKKwkJCS8qIE1heGltdW0gbnVtYmVyIG9mIGRlYm91bmNpbmcgcmVhY2hlZCBhbmQgc3RpbGwKKwkJCSAqIG5vdCBlbm91Z2ggbnVtYmVyIG9mIGNvbnNpc3RlbnQgcmVhZGluZ3MuIEFib3J0CisJCQkgKiB0aGUgd2hvbGUgc2FtcGxlLCByZXBlYXQgaXQgaW4gdGhlIG5leHQgc2FtcGxpbmcKKwkJCSAqIHBlcmlvZC4KKwkJCSAqLworCQkJdHMtPnRjLmlnbm9yZSA9IDE7CisJCQl0cy0+cmVhZF9jbnQgPSAwOworCQkJLyogTGFzdCBtZXNzYWdlIHdpbGwgY29udGFpbiBhZHM3ODQ2X3J4KCkgYXMgdGhlCisJCQkgKiBjb21wbGV0aW9uIGZ1bmN0aW9uLgorCQkJICovCisJCQltID0gdHMtPmxhc3RfbXNnOworCQl9CisJCS8qIFN0YXJ0IG92ZXIgY29sbGVjdGluZyBjb25zaXN0ZW50IHJlYWRpbmdzLiAqLworCQl0cy0+cmVhZF9yZXAgPSAwOworCX0gZWxzZSB7CisJCWlmICgrK3RzLT5yZWFkX3JlcCA+IHRzLT5kZWJvdW5jZV9yZXApIHsKKwkJCS8qIEdvdCBhIGdvb2QgcmVhZGluZyBmb3IgdGhpcyBjb29yZGluYXRlLAorCQkJICogZ28gZm9yIHRoZSBuZXh0IG9uZS4gKi8KKwkJCXRzLT50Yy5pZ25vcmUgPSAwOworCQkJdHMtPm1zZ19pZHgrKzsKKwkJCXRzLT5yZWFkX2NudCA9IDA7CisJCQl0cy0+cmVhZF9yZXAgPSAwOworCQkJbSsrOworCQl9IGVsc2UKKwkJCS8qIFJlYWQgbW9yZSB2YWx1ZXMgdGhhdCBhcmUgY29uc2lzdGVudC4gKi8KKwkJCXRzLT5yZWFkX2NudCsrOworCX0KKwlzdGF0dXMgPSBzcGlfYXN5bmModHMtPnNwaSwgbSk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmdHMtPnNwaS0+ZGV2LCAic3BpX2FzeW5jIC0tPiAlZFxuIiwKKwkJCQlzdGF0dXMpOworfQorCiBzdGF0aWMgdm9pZCBhZHM3ODQ2X3RpbWVyKHVuc2lnbmVkIGxvbmcgaGFuZGxlKQogewogCXN0cnVjdCBhZHM3ODQ2CSp0cyA9ICh2b2lkICopaGFuZGxlOwogCWludAkJc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCF0cy0+cGVuZGluZykgewotCQl0cy0+cGVuZGluZyA9IDE7Ci0JCWlmICghdHMtPmlycV9kaXNhYmxlZCkgewotCQkJdHMtPmlycV9kaXNhYmxlZCA9IDE7Ci0JCQlkaXNhYmxlX2lycSh0cy0+c3BpLT5pcnEpOworCXNwaW5fbG9ja19pcnEoJnRzLT5sb2NrKTsKKworCWlmICh1bmxpa2VseSh0cy0+bXNnX2lkeCAmJiAhdHMtPnBlbmRvd24pKSB7CisJCS8qIG1lYXN1cmVtZW50IGN5Y2xlIGVuZGVkICovCisJCWlmICghZGV2aWNlX3N1c3BlbmRlZCgmdHMtPnNwaS0+ZGV2KSkgeworCQkJdHMtPmlycV9kaXNhYmxlZCA9IDA7CisJCQllbmFibGVfaXJxKHRzLT5zcGktPmlycSk7CiAJCX0KLQkJc3RhdHVzID0gc3BpX2FzeW5jKHRzLT5zcGksICZ0cy0+bXNnKTsKKwkJdHMtPnBlbmRpbmcgPSAwOworCQl0cy0+bXNnX2lkeCA9IDA7CisJfSBlbHNlIHsKKwkJLyogcGVuIGlzIHN0aWxsIGRvd24sIGNvbnRpbnVlIHdpdGggdGhlIG1lYXN1cmVtZW50ICovCisJCXRzLT5tc2dfaWR4ID0gMDsKKwkJc3RhdHVzID0gc3BpX2FzeW5jKHRzLT5zcGksICZ0cy0+bXNnWzBdKTsKIAkJaWYgKHN0YXR1cykKLQkJCWRldl9lcnIoJnRzLT5zcGktPmRldiwgInNwaV9hc3luYyAtLT4gJWRcbiIsCi0JCQkJCXN0YXR1cyk7CisJCQlkZXZfZXJyKCZ0cy0+c3BpLT5kZXYsICJzcGlfYXN5bmMgLS0+ICVkXG4iLCBzdGF0dXMpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cy0+bG9jaywgZmxhZ3MpOworCisJc3Bpbl91bmxvY2tfaXJxKCZ0cy0+bG9jayk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhZHM3ODQ2X2lycShpbnQgaXJxLCB2b2lkICpoYW5kbGUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWFkczc4NDZfdGltZXIoKHVuc2lnbmVkIGxvbmcpIGhhbmRsZSk7CisJc3RydWN0IGFkczc4NDYgKnRzID0gaGFuZGxlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHMtPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlrZWx5KHRzLT5nZXRfcGVuZG93bl9zdGF0ZSgpKSkgeworCQlpZiAoIXRzLT5pcnFfZGlzYWJsZWQpIHsKKwkJCS8qIFRoZSBBUk0gZG9fc2ltcGxlX0lSUSgpIGRpc3BhdGNoZXIgZG9lc24ndCBhY3QKKwkJCSAqIGxpa2UgdGhlIG90aGVyIGRpc3BhdGNoZXJzOiAgaXQgd2lsbCByZXBvcnQgSVJRcworCQkJICogZXZlbiBhZnRlciB0aGV5J3ZlIGJlZW4gZGlzYWJsZWQuICBXZSB3b3JrIGFyb3VuZAorCQkJICogdGhhdCBoZXJlLiAgKFRoZSAiZ2VuZXJpYyBpcnEiIGZyYW1ld29yayBtYXkgaGVscC4uLikKKwkJCSAqLworCQkJdHMtPmlycV9kaXNhYmxlZCA9IDE7CisJCQlkaXNhYmxlX2lycSh0cy0+c3BpLT5pcnEpOworCQkJdHMtPnBlbmRpbmcgPSAxOworCQkJbW9kX3RpbWVyKCZ0cy0+dGltZXIsIGppZmZpZXMpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50Ci1hZHM3ODQ2X3N1c3BlbmQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRzLT5sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIGFkczc4NDZfZGlzYWJsZShzdHJ1Y3QgYWRzNzg0NiAqdHMpCiB7Ci0Jc3RydWN0IGFkczc4NDYgKnRzID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpZiAodHMtPmRpc2FibGVkKQorCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdHMtPmxvY2ssIGZsYWdzKTsKLQotCXNwaS0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbWVzc2FnZTsKKwl0cy0+ZGlzYWJsZWQgPSAxOwogCiAJLyogYXJlIHdlIHdhaXRpbmcgZm9yIElSUSwgb3IgcG9sbGluZz8gKi8KLQlpZiAoIXRzLT5wZW5kb3duKSB7Ci0JCWlmICghdHMtPmlycV9kaXNhYmxlZCkgewotCQkJdHMtPmlycV9kaXNhYmxlZCA9IDE7Ci0JCQlkaXNhYmxlX2lycSh0cy0+c3BpLT5pcnEpOwotCQl9CisJaWYgKCF0cy0+cGVuZGluZykgeworCQl0cy0+aXJxX2Rpc2FibGVkID0gMTsKKwkJZGlzYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKIAl9IGVsc2UgewotCQkvKiBwb2xsaW5nOyBmb3JjZSBhIGZpbmFsIFNQSSBjb21wbGV0aW9uOwotCQkgKiB0aGF0IHdpbGwgY2xlYW4gdGhpbmdzIHVwIG5lYXRseQorCQkvKiB0aGUgdGltZXIgd2lsbCBydW4gYXQgbGVhc3Qgb25jZSBtb3JlLCBhbmQKKwkJICogbGVhdmUgZXZlcnl0aGluZyBpbiBhIGNsZWFuIHN0YXRlLCBJUlEgZGlzYWJsZWQKIAkJICovCi0JCWlmICghdHMtPnBlbmRpbmcpCi0JCQltb2RfdGltZXIoJnRzLT50aW1lciwgamlmZmllcyk7Ci0KLQkJd2hpbGUgKHRzLT5wZW5kb3duIHx8IHRzLT5wZW5kaW5nKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cy0+bG9jaywgZmxhZ3MpOwotCQkJdWRlbGF5KDEwKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0cy0+bG9jaywgZmxhZ3MpOworCQl3aGlsZSAodHMtPnBlbmRpbmcpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdHMtPmxvY2spOworCQkJbXNsZWVwKDEpOworCQkJc3Bpbl9sb2NrX2lycSgmdHMtPmxvY2spOwogCQl9CiAJfQogCkBAIC0zODksMTcgKzU0MCw0NSBAQAogCSAqIGxlYXZlIGl0IHRoYXQgd2F5IGFmdGVyIGV2ZXJ5IHJlcXVlc3QKIAkgKi8KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggdHMtPmxvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgYWRzNzg0Nl9lbmFibGUoc3RydWN0IGFkczc4NDYgKnRzKQoreworCWlmICghdHMtPmRpc2FibGVkKQorCQlyZXR1cm47CisKKwl0cy0+ZGlzYWJsZWQgPSAwOworCXRzLT5pcnFfZGlzYWJsZWQgPSAwOworCWVuYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKK30KKworc3RhdGljIGludCBhZHM3ODQ2X3N1c3BlbmQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGFkczc4NDYgKnRzID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlzcGluX2xvY2tfaXJxKCZ0cy0+bG9jayk7CisKKwlzcGktPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc3NhZ2U7CisJYWRzNzg0Nl9kaXNhYmxlKHRzKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdHMtPmxvY2spOworCiAJcmV0dXJuIDA7CisKIH0KIAogc3RhdGljIGludCBhZHM3ODQ2X3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwogCi0JdHMtPmlycV9kaXNhYmxlZCA9IDA7Ci0JZW5hYmxlX2lycSh0cy0+c3BpLT5pcnEpOworCXNwaW5fbG9ja19pcnEoJnRzLT5sb2NrKTsKKwogCXNwaS0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwlhZHM3ODQ2X2VuYWJsZSh0cyk7CisKKwlzcGluX3VubG9ja19pcnEoJnRzLT5sb2NrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00MDgsNiArNTg3LDcgQEAKIAlzdHJ1Y3QgYWRzNzg0NgkJCSp0czsKIAlzdHJ1Y3QgaW5wdXRfZGV2CQkqaW5wdXRfZGV2OwogCXN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJCSptOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIJCSp4OwogCWludAkJCQllcnI7CiAKQEAgLTQyOCwxMSArNjA4LDIwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFdlJ2Qgc2V0IHRoZSB3b3Jkc2l6ZSB0byAxMiBiaXRzIC4uLiBleGNlcHQgdGhhdCBzb21lIGNvbnRyb2xsZXJzCi0JICogd2lsbCB0aGVuIHRyZWF0IHRoZSA4IGJpdCBjb21tYW5kIHdvcmRzIGFzIDEyIGJpdHMgKGFuZCBkcm9wIHRoZQotCSAqIGZvdXIgTVNCcyBvZiB0aGUgMTIgYml0IHJlc3VsdCkuICBSZXN1bHQ6IGlucHV0cyBtdXN0IGJlIHNoaWZ0ZWQKLQkgKiB0byBkaXNjYXJkIHRoZSBmb3VyIGdhcmJhZ2UgTFNCcy4KKwkvKiBSRVZJU0lUIHdoZW4gdGhlIGlycSBjYW4gYmUgdHJpZ2dlcmVkIGFjdGl2ZS1sb3csIG9yIGlmIGZvciBzb21lCisJICogcmVhc29uIHRoZSB0b3VjaHNjcmVlbiBpc24ndCBob29rZWQgdXAsIHdlIGRvbid0IG5lZWQgdG8gYWNjZXNzCisJICogdGhlIHBlbmRvd24gc3RhdGUuCiAJICovCisJaWYgKHBkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZSA9PSBOVUxMKSB7CisJCWRldl9kYmcoJnNwaS0+ZGV2LCAibm8gZ2V0X3BlbmRvd25fc3RhdGUgZnVuY3Rpb24/XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2UnZCBzZXQgVFggd29yZHNpemUgOCBiaXRzIGFuZCBSWCB3b3Jkc2l6ZSB0byAxMyBiaXRzIC4uLiBleGNlcHQKKwkgKiB0aGF0IGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGNhbiBkbyB0aGF0LCB0aGUgU1BJIGNvbnRyb2xsZXIgZHJpdmVyCisJICogbWF5IG5vdC4gIFNvIHdlIHN0aWNrIHRvIHZlcnktcG9ydGFibGUgOCBiaXQgd29yZHMsIGJvdGggUlggYW5kIFRYLgorCSAqLworCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CiAKIAl0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHM3ODQ2KSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CkBAIC00NTEsOSArNjQwLDIxIEBACiAJdHMtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgdHM7CiAJdHMtPnRpbWVyLmZ1bmN0aW9uID0gYWRzNzg0Nl90aW1lcjsKIAorCXNwaW5fbG9ja19pbml0KCZ0cy0+bG9jayk7CisKIAl0cy0+bW9kZWwgPSBwZGF0YS0+bW9kZWwgPyA6IDc4NDY7CiAJdHMtPnZyZWZfZGVsYXlfdXNlY3MgPSBwZGF0YS0+dnJlZl9kZWxheV91c2VjcyA/IDogMTAwOwogCXRzLT54X3BsYXRlX29obXMgPSBwZGF0YS0+eF9wbGF0ZV9vaG1zID8gOiA0MDA7CisJdHMtPnByZXNzdXJlX21heCA9IHBkYXRhLT5wcmVzc3VyZV9tYXggPyA6IH4wOworCWlmIChwZGF0YS0+ZGVib3VuY2VfbWF4KSB7CisJCXRzLT5kZWJvdW5jZV9tYXggPSBwZGF0YS0+ZGVib3VuY2VfbWF4OworCQl0cy0+ZGVib3VuY2VfdG9sID0gcGRhdGEtPmRlYm91bmNlX3RvbDsKKwkJdHMtPmRlYm91bmNlX3JlcCA9IHBkYXRhLT5kZWJvdW5jZV9yZXA7CisJCWlmICh0cy0+ZGVib3VuY2VfcmVwID4gdHMtPmRlYm91bmNlX21heCArIDEpCisJCQl0cy0+ZGVib3VuY2VfcmVwID0gdHMtPmRlYm91bmNlX21heCAtIDE7CisJfSBlbHNlCisJCXRzLT5kZWJvdW5jZV90b2wgPSB+MDsKKwl0cy0+Z2V0X3BlbmRvd25fc3RhdGUgPSBwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGU7CiAKIAlzbnByaW50Zih0cy0+cGh5cywgc2l6ZW9mKHRzLT5waHlzKSwgIiVzL2lucHV0MCIsIHNwaS0+ZGV2LmJ1c19pZCk7CiAKQEAgLTQ3Nyw2NCArNjc4LDEwNCBAQAogCS8qIHNldCB1cCB0aGUgdHJhbnNmZXJzIHRvIHJlYWQgdG91Y2hzY3JlZW4gc3RhdGU7IHRoaXMgYXNzdW1lcyB3ZQogCSAqIHVzZSBmb3JtdWxhICMyIGZvciBwcmVzc3VyZSwgbm90ICMzLgogCSAqLwotCUlOSVRfTElTVF9IRUFEKCZ0cy0+bXNnLnRyYW5zZmVycyk7CisJbSA9ICZ0cy0+bXNnWzBdOwogCXggPSB0cy0+eGZlcjsKIAorCXNwaV9tZXNzYWdlX2luaXQobSk7CisKIAkvKiB5LSBzdGlsbCBvbjsgdHVybiBvbiBvbmx5IHkrIChhbmQgQURDKSAqLwogCXRzLT5yZWFkX3kgPSBSRUFEX1k7CiAJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3k7CiAJeC0+bGVuID0gMTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmdHMtPm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAl4Kys7CiAJeC0+cnhfYnVmID0gJnRzLT50Yy55OwogCXgtPmxlbiA9IDI7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJnRzLT5tc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCi0JLyogdHVybiB5KyBvZmYsIHgtIG9uOyB3ZSdsbCB1c2UgZm9ybXVsYSAjMiAqLwotCWlmICh0cy0+bW9kZWwgPT0gNzg0NikgewotCQl4Kys7Ci0JCXRzLT5yZWFkX3oxID0gUkVBRF9aMTsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3oxOwotCQl4LT5sZW4gPSAxOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmdHMtPm1zZyk7CisJbS0+Y29tcGxldGUgPSBhZHM3ODQ2X2RlYm91bmNlOworCW0tPmNvbnRleHQgPSB0czsKIAotCQl4Kys7Ci0JCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMuejE7Ci0JCXgtPmxlbiA9IDI7Ci0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsICZ0cy0+bXNnKTsKLQotCQl4Kys7Ci0JCXRzLT5yZWFkX3oyID0gUkVBRF9aMjsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3oyOwotCQl4LT5sZW4gPSAxOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmdHMtPm1zZyk7Ci0KLQkJeCsrOwotCQl4LT5yeF9idWYgPSAmdHMtPnRjLnoyOwotCQl4LT5sZW4gPSAyOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmdHMtPm1zZyk7Ci0JfQorCW0rKzsKKwlzcGlfbWVzc2FnZV9pbml0KG0pOwogCiAJLyogdHVybiB5LSBvZmYsIHgrIG9uLCB0aGVuIGxlYXZlIGluIGxvd3Bvd2VyICovCiAJeCsrOwogCXRzLT5yZWFkX3ggPSBSRUFEX1g7CiAJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3g7CiAJeC0+bGVuID0gMTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmdHMtPm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAl4Kys7CiAJeC0+cnhfYnVmID0gJnRzLT50Yy54OwogCXgtPmxlbiA9IDI7Ci0JQ1NfQ0hBTkdFKCp4KTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmdHMtPm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKLQl0cy0+bXNnLmNvbXBsZXRlID0gYWRzNzg0Nl9yeDsKLQl0cy0+bXNnLmNvbnRleHQgPSB0czsKKwltLT5jb21wbGV0ZSA9IGFkczc4NDZfZGVib3VuY2U7CisJbS0+Y29udGV4dCA9IHRzOworCisJLyogdHVybiB5KyBvZmYsIHgtIG9uOyB3ZSdsbCB1c2UgZm9ybXVsYSAjMiAqLworCWlmICh0cy0+bW9kZWwgPT0gNzg0NikgeworCQltKys7CisJCXNwaV9tZXNzYWdlX2luaXQobSk7CisKKwkJeCsrOworCQl0cy0+cmVhZF96MSA9IFJFQURfWjE7CisJCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF96MTsKKwkJeC0+bGVuID0gMTsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CisKKwkJeCsrOworCQl4LT5yeF9idWYgPSAmdHMtPnRjLnoxOworCQl4LT5sZW4gPSAyOworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKworCQltLT5jb21wbGV0ZSA9IGFkczc4NDZfZGVib3VuY2U7CisJCW0tPmNvbnRleHQgPSB0czsKKworCQltKys7CisJCXNwaV9tZXNzYWdlX2luaXQobSk7CisKKwkJeCsrOworCQl0cy0+cmVhZF96MiA9IFJFQURfWjI7CisJCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF96MjsKKwkJeC0+bGVuID0gMTsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CisKKwkJeCsrOworCQl4LT5yeF9idWYgPSAmdHMtPnRjLnoyOworCQl4LT5sZW4gPSAyOworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKworCQltLT5jb21wbGV0ZSA9IGFkczc4NDZfZGVib3VuY2U7CisJCW0tPmNvbnRleHQgPSB0czsKKwl9CisKKwkvKiBwb3dlciBkb3duICovCisJbSsrOworCXNwaV9tZXNzYWdlX2luaXQobSk7CisKKwl4Kys7CisJdHMtPnB3cmRvd24gPSBQV1JET1dOOworCXgtPnR4X2J1ZiA9ICZ0cy0+cHdyZG93bjsKKwl4LT5sZW4gPSAxOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOworCisJeCsrOworCXgtPnJ4X2J1ZiA9ICZ0cy0+ZHVtbXk7CisJeC0+bGVuID0gMjsKKwlDU19DSEFOR0UoKngpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOworCisJbS0+Y29tcGxldGUgPSBhZHM3ODQ2X3J4OworCW0tPmNvbnRleHQgPSB0czsKKworCXRzLT5sYXN0X21zZyA9IG07CiAKIAlpZiAocmVxdWVzdF9pcnEoc3BpLT5pcnEsIGFkczc4NDZfaXJxLAogCQkJU0FfU0FNUExFX1JBTkRPTSB8IFNBX1RSSUdHRVJfRkFMTElORywKLQkJCXNwaS0+ZGV2LmJ1c19pZCwgdHMpKSB7CisJCQlzcGktPmRldi5kcml2ZXItPm5hbWUsIHRzKSkgewogCQlkZXZfZGJnKCZzcGktPmRldiwgImlycSAlZCBidXN5P1xuIiwgc3BpLT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwpAQCAtNTU5LDEzICs4MDAsMjcgQEAKIAkJZGV2aWNlX2NyZWF0ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3ZiYXR0KTsKIAlkZXZpY2VfY3JlYXRlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdmF1eCk7CiAKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfcGVuX2Rvd24pOworCisJZGV2aWNlX2NyZWF0ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX2Rpc2FibGUpOworCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CiAJaWYgKGVycikKLQkJZ290byBlcnJfZnJlZV9pcnE7CisJCWdvdG8gZXJyX3JlbW92ZV9hdHRyOwogCiAJcmV0dXJuIDA7CiAKLSBlcnJfZnJlZV9pcnE6CisgZXJyX3JlbW92ZV9hdHRyOgorCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9kaXNhYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfcGVuX2Rvd24pOworCWlmICh0cy0+bW9kZWwgPT0gNzg0NikgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdGVtcDEpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdGVtcDApOworCX0KKwlpZiAodHMtPm1vZGVsICE9IDc4NDUpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl92YmF0dCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3ZhdXgpOworCiAJZnJlZV9pcnEoc3BpLT5pcnEsIHRzKTsKICBlcnJfZnJlZV9tZW06CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKQEAgLTU3NywyMCArODMyLDI0IEBACiB7CiAJc3RydWN0IGFkczc4NDYJCSp0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwogCi0JYWRzNzg0Nl9zdXNwZW5kKHNwaSwgUE1TR19TVVNQRU5EKTsKLQlmcmVlX2lycSh0cy0+c3BpLT5pcnEsIHRzKTsKLQlpZiAodHMtPmlycV9kaXNhYmxlZCkKLQkJZW5hYmxlX2lycSh0cy0+c3BpLT5pcnEpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHRzLT5pbnB1dCk7CiAKKwlhZHM3ODQ2X3N1c3BlbmQoc3BpLCBQTVNHX1NVU1BFTkQpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX2Rpc2FibGUpOworCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9wZW5fZG93bik7CiAJaWYgKHRzLT5tb2RlbCA9PSA3ODQ2KSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMCk7CiAJCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMCk7CiAJfQogCWlmICh0cy0+bW9kZWwgIT0gNzg0NSkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3ZiYXR0KTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdmF1eCk7CiAKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh0cy0+aW5wdXQpOworCWZyZWVfaXJxKHRzLT5zcGktPmlycSwgdHMpOworCS8qIHN1c3BlbmQgbGVmdCB0aGUgSVJRIGRpc2FibGVkICovCisJZW5hYmxlX2lycSh0cy0+c3BpLT5pcnEpOworCiAJa2ZyZWUodHMpOwogCiAJZGV2X2RiZygmc3BpLT5kZXYsICJ1bnJlZ2lzdGVyZWQgdG91Y2hzY3JlZW5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCmluZGV4IDEwNDI5ODcuLjUwMTM3MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgorLy8jaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvc2hhcnBzbC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RzZGV2LmMgYi9kcml2ZXJzL2lucHV0L3RzZGV2LmMKaW5kZXggY2ExNTQ3OS4uZDY3OGQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90c2Rldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdHNkZXYuYwpAQCAtMTU3LDkgKzE1Nyw4IEBACiAJaWYgKGkgPj0gVFNERVZfTUlOT1JTIHx8ICF0c2Rldl90YWJsZVtpICYgVFNERVZfTUlOT1JfTUFTS10pCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCEobGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0c2Rldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHNkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGxpc3QsIDAsIHNpemVvZihzdHJ1Y3QgdHNkZXZfbGlzdCkpOwogCiAJbGlzdC0+cmF3ID0gKGkgPj0gVFNERVZfTUlOT1JTLzIpID8gMSA6IDA7CiAKQEAgLTM3OSw5ICszNzgsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoISh0c2RldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0c2RldiksIEdGUF9LRVJORUwpKSkKKwlpZiAoISh0c2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0c2RldiksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KHRzZGV2LCAwLCBzaXplb2Yoc3RydWN0IHRzZGV2KSk7CiAKIAlJTklUX0xJU1RfSEVBRCgmdHNkZXYtPmxpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRzZGV2LT53YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwppbmRleCA5YjQ5M2YwLi4xNzNjODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC0xNDk5LDcgKzE0OTksNiBAQAogCQlwcmludGsoS0VSTl9FUlIgImNhcGkyMDogdW5hYmxlIHRvIGdldCBtYWpvciAlZFxuIiwgY2FwaV9tYWpvcik7CiAJCXJldHVybiBtYWpvcl9yZXQ7CiAJfQotCWNhcGlfbWFqb3IgPSBtYWpvcl9yZXQ7CiAJY2FwaV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImNhcGkiKTsKIAlpZiAoSVNfRVJSKGNhcGlfY2xhc3MpKSB7CiAJCXVucmVnaXN0ZXJfY2hyZGV2KGNhcGlfbWFqb3IsICJjYXBpMjAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCmluZGV4IDUzYzRmYjYuLjViMjAzZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwpAQCAtMyw4ICszLDggQEAKIAogY29uZmlnIElTRE5fRFJWX0dJR0FTRVQKIAl0cmlzdGF0ZSAiU2llbWVucyBHaWdhc2V0IHN1cHBvcnQgKGlzZG4pIgotCWRlcGVuZHMgb24gSVNETl9JNEwgJiYgbQotIwlkZXBlbmRzIG9uIElTRE5fSTRMICYmIE1PRFVMRVMKKwlkZXBlbmRzIG9uIElTRE5fSTRMCisJc2VsZWN0IENSQ19DQ0lUVAogCWhlbHAKIAkgIFNheSBtIGhlcmUgaWYgeW91IGhhdmUgYSBHaWdhc2V0IG9yIFNpbnVzIGlzZG4gZGV2aWNlLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCmluZGV4IDE3MWY4YjcuLmNlM2NkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwNSBieSBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LAogICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKLSAqICAgICAgICAgICAgICAgICAgICAgICBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPi4KKyAqICAgICAgICAgICAgICAgICAgICAgICBTdGVmYW4gRWlsZXJzLgogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTEsMTAgKzExLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogYXN5bmNkYXRhLmMsdiAxLjIuMi43IDIwMDUvMTEvMTMgMjM6MDU6MTggaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtNDUsNyArNDEsNyBAQAogICoJbnVtYmVyIG9mIHByb2Nlc3NlZCBieXRlcwogICovCiBzdGF0aWMgaW5saW5lIGludCBjbWRfbG9vcCh1bnNpZ25lZCBjaGFyIGMsIHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IG51bWJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQorCQkJICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gaW5idWYtPmNzOwogCXVuc2lnbmVkIGNieXRlcyAgICAgID0gY3MtPmNieXRlczsKQEAgLTU1LDEwICs1MSwxMSBAQAogCWZvciAoOzspIHsKIAkJY3MtPnJlc3BkYXRhW2NieXRlc10gPSBjOwogCQlpZiAoYyA9PSAxMCB8fCBjID09IDEzKSB7Ci0JCQlkYmcoREVCVUdfVFJBTlNDTUQsICIlczogRW5kIG9mIENvbW1hbmQgKCVkIEJ5dGVzKSIsCi0JCQkgICAgX19mdW5jX18sIGNieXRlcyk7CisJCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiJXM6IEVuZCBvZiBDb21tYW5kICglZCBCeXRlcykiLAorCQkJCV9fZnVuY19fLCBjYnl0ZXMpOwogCQkJY3MtPmNieXRlcyA9IGNieXRlczsKLQkJCWdpZ2FzZXRfaGFuZGxlX21vZGVtX3Jlc3BvbnNlKGNzKTsgLyogY2FuIGNoYW5nZSBjcy0+ZGxlICovCisJCQlnaWdhc2V0X2hhbmRsZV9tb2RlbV9yZXNwb25zZShjcyk7IC8qIGNhbiBjaGFuZ2UKKwkJCQkJCQkgICAgICBjcy0+ZGxlICovCiAJCQljYnl0ZXMgPSAwOwogCiAJCQlpZiAoY3MtPmRsZSAmJgpAQCAtNzEsNyArNjgsNyBAQAogCQkJaWYgKGNieXRlcyA8IE1BWF9SRVNQX1NJWkUgLSAxKQogCQkJCWNieXRlcysrOwogCQkJZWxzZQotCQkJCXdhcm4oInJlc3BvbnNlIHRvbyBsYXJnZSIpOworCQkJCWRldl93YXJuKGNzLT5kZXYsICJyZXNwb25zZSB0b28gbGFyZ2VcbiIpOwogCQl9CiAKIAkJaWYgKCFudW1ieXRlcykKQEAgLTk2LDExICs5MywxMiBAQAogICoJbnVtYmVyIG9mIHByb2Nlc3NlZCBieXRlcwogICovCiBzdGF0aWMgaW5saW5lIGludCBsb2NrX2xvb3AodW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbnVtYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQorCQkJICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAotCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19MT0NLQ01ELCAicmVjZWl2ZWQgcmVzcG9uc2UiLCBudW1ieXRlcywgc3JjLCAwKTsKKwlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfTE9DS0NNRCwgInJlY2VpdmVkIHJlc3BvbnNlIiwKKwkJCSAgIG51bWJ5dGVzLCBzcmMpOwogCWdpZ2FzZXRfaWZfcmVjZWl2ZShjcywgc3JjLCBudW1ieXRlcyk7CiAKIAlyZXR1cm4gbnVtYnl0ZXM7CkBAIC0xMTUsMjQgKzExMywxOCBAQAogICoJbnVtYnl0ZXMgKGFsbCBieXRlcyBwcm9jZXNzZWQpIG9uIGVycm9yIC0tRklYTUUKICAqLwogc3RhdGljIGlubGluZSBpbnQgaGRsY19sb29wKHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbnVtYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQorCQkJICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IGluYnVmLT5iY3M7Ci0JaW50IGlucHV0c3RhdGU7Ci0JX191MTYgZmNzOwotCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGlucHV0c3RhdGUgPSBiY3MtPmlucHV0c3RhdGU7CisJX191MTYgZmNzID0gYmNzLT5mY3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJjcy0+c2tiOwogCXVuc2lnbmVkIGNoYXIgZXJyb3I7CiAJc3RydWN0IHNrX2J1ZmYgKmNvbXBza2I7CiAJaW50IHN0YXJ0Ynl0ZXMgPSBudW1ieXRlczsKIAlpbnQgbDsKIAotCUlGTlVMTFJFVFZBTChiY3MsIG51bWJ5dGVzKTsKLQlpbnB1dHN0YXRlID0gYmNzLT5pbnB1dHN0YXRlOwotCWZjcyA9IGJjcy0+ZmNzOwotCXNrYiA9IGJjcy0+c2tiOwotCUlGTlVMTFJFVFZBTChza2IsIG51bWJ5dGVzKTsKLQogCWlmICh1bmxpa2VseShpbnB1dHN0YXRlICYgSU5TX2J5dGVfc3R1ZmYpKSB7CiAJCWlucHV0c3RhdGUgJj0gfklOU19ieXRlX3N0dWZmOwogCQlnb3RvIGJ5dGVfc3R1ZmY7CkBAIC0xNTYsMzkgKzE0OCwzNyBAQAogCQkJYyBePSBQUFBfVFJBTlM7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCWlmICh1bmxpa2VseSghbXVzdHN0dWZmKGMpKSkKLQkJCQlkYmcoREVCVUdfSERMQywKLQkJCQkgICAgImJ5dGUgc3R1ZmZlZDogMHglMDJ4IiwgYyk7CisJCQkJZ2lnX2RiZyhERUJVR19IRExDLCAiYnl0ZSBzdHVmZmVkOiAweCUwMngiLCBjKTsKICNlbmRpZgogCQl9IGVsc2UgaWYgKHVubGlrZWx5KGMgPT0gUFBQX0ZMQUcpKSB7CiAJCQlpZiAodW5saWtlbHkoaW5wdXRzdGF0ZSAmIElOU19za2lwX2ZyYW1lKSkgewogCQkJCWlmICghKGlucHV0c3RhdGUgJiBJTlNfaGF2ZV9kYXRhKSkgeyAvKiA3RSA3RSAqLwotCQkJCQkvL2RiZyhERUJVR19IRExDLCAiKDdlKTdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCQkJKytiY3MtPmVtcHR5Y291bnQ7CiAjZW5kaWYKIAkJCQl9IGVsc2UKLQkJCQkJZGJnKERFQlVHX0hETEMsCisJCQkJCWdpZ19kYmcoREVCVUdfSERMQywKIAkJCQkJICAgICI3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKIAogCQkJCS8qIGVuZCBvZiBmcmFtZSAqLwogCQkJCWVycm9yID0gMTsKIAkJCQlnaWdhc2V0X3Jjdl9lcnJvcihOVUxMLCBjcywgYmNzKTsKIAkJCX0gZWxzZSBpZiAoIShpbnB1dHN0YXRlICYgSU5TX2hhdmVfZGF0YSkpIHsgLyogN0UgN0UgKi8KLQkJCQkvL2RiZyhERUJVR19IRExDLCAiKDdlKTdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCQkrK2Jjcy0+ZW1wdHljb3VudDsKICNlbmRpZgogCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKLQkJCQlkYmcoREVCVUdfSERMQywKLQkJCQkgICAgIjdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworCQkJCWdpZ19kYmcoREVCVUdfSERMQywKKwkJCQkJIjdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogCiAJCQkJLyogZW5kIG9mIGZyYW1lICovCiAJCQkJZXJyb3IgPSAwOwogCiAJCQkJaWYgKHVubGlrZWx5KGZjcyAhPSBQUFBfR09PREZDUykpIHsKLQkJCQkJZXJyKCJQYWNrZXQgY2hlY2tzdW0gYXQgJWx1IGZhaWxlZCwgIgotCQkJCQkgICAgInBhY2tldCBpcyBjb3JydXB0ZWQgKCV1IGJ5dGVzKSEiLAorCQkJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJCSAgICAiUGFja2V0IGNoZWNrc3VtIGF0ICVsdSBmYWlsZWQsICIKKwkJCQkJICAgICJwYWNrZXQgaXMgY29ycnVwdGVkICgldSBieXRlcykhXG4iLAogCQkJCQkgICAgYmNzLT5yY3ZieXRlcywgc2tiLT5sZW4pOwogCQkJCQljb21wc2tiID0gTlVMTDsKIAkJCQkJZ2lnYXNldF9yY3ZfZXJyb3IoY29tcHNrYiwgY3MsIGJjcyk7CkBAIC0yMDIsOSArMTkyLDExIEBACiAJCQkJCQlza2IgPSBOVUxMOwogCQkJCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJCQkJCWlmIChsID09IDEpIHsKLQkJCQkJCQllcnIoImludmFsaWQgcGFja2V0IHNpemUgKDEpISIpOworCQkJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJCSAgImludmFsaWQgcGFja2V0IHNpemUgKDEpIVxuIik7CiAJCQkJCQkJZXJyb3IgPSAxOwotCQkJCQkJCWdpZ2FzZXRfcmN2X2Vycm9yKE5VTEwsIGNzLCBiY3MpOworCQkJCQkJCWdpZ2FzZXRfcmN2X2Vycm9yKE5VTEwsCisJCQkJCQkJCWNzLCBiY3MpOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJCWlmIChsaWtlbHkoIShlcnJvciB8fApAQCAtMjI3LDcgKzIxOSw4IEBACiAJCQl9IGVsc2UgaWYgKGxpa2VseSgoc2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKSkgewogCQkJCXNrYl9yZXNlcnZlKHNrYiwgSFdfSERSX0xFTik7CiAJCQl9IGVsc2UgewotCQkJCXdhcm4oImNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgc2tiIik7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICJjb3VsZCBub3QgYWxsb2NhdGUgbmV3IHNrYlxuIik7CiAJCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJCX0KIApAQCAtMjM1LDcgKzIyOCw3IEBACiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJfSBlbHNlIGlmICh1bmxpa2VseShtdXN0c3R1ZmYoYykpKSB7CiAJCQkvKiBTaG91bGQgbm90IGhhcHBlbi4gUG9zc2libGUgYWZ0ZXIgWkRMRT0xPENSPjxMRj4uICovCi0JCQlkYmcoREVCVUdfSERMQywgIm5vdCBieXRlIHN0dWZmZWQ6IDB4JTAyeCIsIGMpOworCQkJZ2lnX2RiZyhERUJVR19IRExDLCAibm90IGJ5dGUgc3R1ZmZlZDogMHglMDJ4IiwgYyk7CiAjZW5kaWYKIAkJfQogCkBAIC0yNDMsOCArMjM2LDggQEAKIAogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCWlmICh1bmxpa2VseSghKGlucHV0c3RhdGUgJiBJTlNfaGF2ZV9kYXRhKSkpIHsKLQkJCWRiZyhERUJVR19IRExDLAotCQkJICAgICI3ZSAoJWQgeCkgPT09PT09PT09PT09PT09PSIsIGJjcy0+ZW1wdHljb3VudCk7CisJCQlnaWdfZGJnKERFQlVHX0hETEMsICI3ZSAoJWQgeCkgPT09PT09PT09PT09PT09PSIsCisJCQkJYmNzLT5lbXB0eWNvdW50KTsKIAkJCWJjcy0+ZW1wdHljb3VudCA9IDA7CiAJCX0KICNlbmRpZgpAQCAtMjUzLDE0ICsyNDYsMTMgQEAKIAogCQlpZiAobGlrZWx5KCEoaW5wdXRzdGF0ZSAmIElOU19za2lwX2ZyYW1lKSkpIHsKIAkJCWlmICh1bmxpa2VseShza2ItPmxlbiA9PSBTQlVGU0laRSkpIHsKLQkJCQl3YXJuKCJyZWNlaXZlZCBwYWNrZXQgdG9vIGxvbmciKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVjZWl2ZWQgcGFja2V0IHRvbyBsb25nXG4iKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCXNrYiA9IE5VTEw7CiAJCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCSpnaWdhc2V0X3NrYl9wdXRfcXVpY2soc2tiLCAxKSA9IGM7Ci0JCQkvKiAqX19za2JfcHV0IChza2IsIDEpID0gYzsgKi8KKwkJCSpfX3NrYl9wdXQoc2tiLCAxKSA9IGM7CiAJCQlmY3MgPSBjcmNfY2NpdHRfYnl0ZShmY3MsIGMpOwogCQl9CiAKQEAgLTI4OSwxOSArMjgxLDE0IEBACiAgKgludW1ieXRlcyAoYWxsIGJ5dGVzIHByb2Nlc3NlZCkgb24gZXJyb3IgLS1GSVhNRQogICovCiBzdGF0aWMgaW5saW5lIGludCBpcmF3X2xvb3AodW5zaWduZWQgY2hhciBjLCB1bnNpZ25lZCBjaGFyICpzcmMsIGludCBudW1ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5idWZfdCAqaW5idWYpCisJCQkgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gaW5idWYtPmNzOwogCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gaW5idWYtPmJjczsKLQlpbnQgaW5wdXRzdGF0ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpbnB1dHN0YXRlID0gYmNzLT5pbnB1dHN0YXRlOworCXN0cnVjdCBza19idWZmICpza2IgPSBiY3MtPnNrYjsKIAlpbnQgc3RhcnRieXRlcyA9IG51bWJ5dGVzOwogCi0JSUZOVUxMUkVUVkFMKGJjcywgbnVtYnl0ZXMpOwotCWlucHV0c3RhdGUgPSBiY3MtPmlucHV0c3RhdGU7Ci0Jc2tiID0gYmNzLT5za2I7Ci0JSUZOVUxMUkVUVkFMKHNrYiwgbnVtYnl0ZXMpOwotCiAJZm9yICg7OykgewogCQkvKiBhZGQgY2hhcmFjdGVyICovCiAJCWlucHV0c3RhdGUgfD0gSU5TX2hhdmVfZGF0YTsKQEAgLTMwOSwxMyArMjk2LDEzIEBACiAJCWlmIChsaWtlbHkoIShpbnB1dHN0YXRlICYgSU5TX3NraXBfZnJhbWUpKSkgewogCQkJaWYgKHVubGlrZWx5KHNrYi0+bGVuID09IFNCVUZTSVpFKSkgewogCQkJCS8vRklYTUUganVzdCBwYXNzIHNrYiB1cCBhbmQgYWxsb2NhdGUgYSBuZXcgb25lCi0JCQkJd2FybigicmVjZWl2ZWQgcGFja2V0IHRvbyBsb25nIik7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwgInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZ1xuIik7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQlza2IgPSBOVUxMOwogCQkJCWlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQkqZ2lnYXNldF9za2JfcHV0X3F1aWNrKHNrYiwgMSkgPSBnaWdhc2V0X2ludnRhYltjXTsKKwkJCSpfX3NrYl9wdXQoc2tiLCAxKSA9IGdpZ2FzZXRfaW52dGFiW2NdOwogCQl9CiAKIAkJaWYgKHVubGlrZWx5KCFudW1ieXRlcykpCkBAIC0zNDMsNyArMzMwLDcgQEAKIAkJCQkgICE9IE5VTEwpKSB7CiAJCQlza2JfcmVzZXJ2ZShza2IsIEhXX0hEUl9MRU4pOwogCQl9IGVsc2UgewotCQkJd2FybigiY291bGQgbm90IGFsbG9jYXRlIG5ldyBza2IiKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgbmV3IHNrYlxuIik7CiAJCQlpbnB1dHN0YXRlIHw9IElOU19za2lwX2ZyYW1lOwogCQl9CiAJfQpAQCAtMzY0LDEzICszNTEsMTMgQEAKIAogCWhlYWQgPSBhdG9taWNfcmVhZCgmaW5idWYtPmhlYWQpOwogCXRhaWwgPSBhdG9taWNfcmVhZCgmaW5idWYtPnRhaWwpOwotCWRiZyhERUJVR19JTlRSLCAiYnVmZmVyIHN0YXRlOiAldSAtPiAldSIsIGhlYWQsIHRhaWwpOworCWdpZ19kYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKIAogCWlmIChoZWFkICE9IHRhaWwpIHsKIAkJY3MgPSBpbmJ1Zi0+Y3M7CiAJCXNyYyA9IGluYnVmLT5kYXRhICsgaGVhZDsKIAkJbnVtYnl0ZXMgPSAoaGVhZCA+IHRhaWwgPyBSQlVGU0laRSA6IHRhaWwpIC0gaGVhZDsKLQkJZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOwogCiAJCXdoaWxlIChudW1ieXRlcykgewogCQkJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSA9PSBNU19MT0NLRUQpIHsKQEAgLTM5Miw4ICszNzksNyBAQAogCiAJCQkJaWYgKCEoaW5idWYtPmlucHV0c3RhdGUgJiBJTlNfRExFX2NoYXIpKSB7CiAKLQkJCQkJLyogRklYTUUgRWluZmFjaCBqZSBuYWNoIE1vZHVzIEZ1bmt0aW9uc3plaWdlciBpbiBjcyBzZXR6ZW4gW2hpZXIraGRsY19sb29wXT8gICovCi0JCQkJCS8qIEZJWE1FIFNwYXJ0IGZvbGdlbmRlcyAiaWYiIHVuZCBlcm1vZWdsaWNodCBhbmRlcmUgUHJvdG9rb2xsZSAqLworCQkJCQkvKiBGSVhNRSB1c2UgZnVuY3Rpb24gcG9pbnRlcnM/ICAqLwogCQkJCQlpZiAoaW5idWYtPmlucHV0c3RhdGUgJiBJTlNfY29tbWFuZCkKIAkJCQkJCXByb2NieXRlcyA9IGNtZF9sb29wKGMsIHNyYywgbnVtYnl0ZXMsIGluYnVmKTsKIAkJCQkJZWxzZSBpZiAoaW5idWYtPmJjcy0+cHJvdG8yID09IElTRE5fUFJPVE9fTDJfSERMQykKQEAgLTQwMywxMyArMzg5LDE0IEBACiAKIAkJCQkJc3JjICs9IHByb2NieXRlczsKIAkJCQkJbnVtYnl0ZXMgLT0gcHJvY2J5dGVzOwotCQkJCX0gZWxzZSB7ICAvKiBETEUtY2hhciAqLworCQkJCX0gZWxzZSB7ICAvKiBETEUgY2hhciAqLwogCQkJCQlpbmJ1Zi0+aW5wdXRzdGF0ZSAmPSB+SU5TX0RMRV9jaGFyOwogCQkJCQlzd2l0Y2ggKGMpIHsKIAkJCQkJY2FzZSAnWCc6IC8qYmVnaW4gb2YgY29tbWFuZCovCiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCQkJCWlmIChpbmJ1Zi0+aW5wdXRzdGF0ZSAmIElOU19jb21tYW5kKQotCQkJCQkJCWVycigicmVjZWl2ZWQgPERMRT4gJ1gnIGluIGNvbW1hbmQgbW9kZSIpOworCQkJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJInJlY2VpdmVkIDxETEU+ICdYJyBpbiBjb21tYW5kIG1vZGVcbiIpOwogI2VuZGlmCiAJCQkJCQlpbmJ1Zi0+aW5wdXRzdGF0ZSB8PQogCQkJCQkJCUlOU19jb21tYW5kIHwgSU5TX0RMRV9jb21tYW5kOwpAQCAtNDE3LDcgKzQwNCw4IEBACiAJCQkJCWNhc2UgJy4nOiAvKmVuZCBvZiBjb21tYW5kKi8KICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCQkJCQkJaWYgKCEoaW5idWYtPmlucHV0c3RhdGUgJiBJTlNfY29tbWFuZCkpCi0JCQkJCQkJZXJyKCJyZWNlaXZlZCA8RExFPiAnLicgaW4gaGRsYyBtb2RlIik7CisJCQkJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkicmVjZWl2ZWQgPERMRT4gJy4nIGluIGhkbGMgbW9kZVxuIik7CiAjZW5kaWYKIAkJCQkJCWluYnVmLT5pbnB1dHN0YXRlICY9IGNzLT5kbGUgPwogCQkJCQkJCX4oSU5TX0RMRV9jb21tYW5kfElOU19jb21tYW5kKQpAQCAtNDI1LDcgKzQxMyw5IEBACiAJCQkJCQlicmVhazsKIAkJCQkJLy9jYXNlIERMRV9GTEFHOiAvKkRMRV9GTEFHIGluIGRhdGEgc3RyZWFtKi8gLyogc2Nob24gb2JlbiBiZWhhbmRlbHQhICovCiAJCQkJCWRlZmF1bHQ6Ci0JCQkJCQllcnIoInJlY2VpdmVkIDB4MTAgMHglMDJ4ISIsIChpbnQpIGMpOworCQkJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkJICAgICAgInJlY2VpdmVkIDB4MTAgMHglMDJ4IVxuIiwKKwkJCQkJCQkoaW50KSBjKTsKIAkJCQkJCS8qIEZJWE1FOiByZXNldCBkcml2ZXI/PyAqLwogCQkJCQl9CiAJCQkJfQpAQCAtNDQ0LDcgKzQzNCw3IEBACiAJCQl9CiAJCX0KIAotCQlkYmcoREVCVUdfSU5UUiwgInNldHRpbmcgaGVhZCB0byAldSIsIGhlYWQpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJzZXR0aW5nIGhlYWQgdG8gJXUiLCBoZWFkKTsKIAkJYXRvbWljX3NldCgmaW5idWYtPmhlYWQsIGhlYWQpOwogCX0KIH0KQEAgLTQ3OSwxNCArNDY5LDEzIEBACiAJCQlzdHVmX2NudCsrOwogCQlmY3MgPSBjcmNfY2NpdHRfYnl0ZShmY3MsICpjcCsrKTsKIAl9Ci0JZmNzIF49IDB4ZmZmZjsgICAgICAgICAgICAgICAgIC8qIGNvbXBsZW1lbnQgKi8KKwlmY3MgXj0gMHhmZmZmOwkJCS8qIGNvbXBsZW1lbnQgKi8KIAogCS8qIHNpemUgb2YgbmV3IGJ1ZmZlcjogb3JpZ2luYWwgc2l6ZSArIG51bWJlciBvZiBzdHVmZmluZyBieXRlcwogCSAqICsgMiBieXRlcyBGQ1MgKyAyIHN0dWZmaW5nIGJ5dGVzIGZvciBGQ1MgKGlmIG5lZWRlZCkgKyAyIGZsYWcgYnl0ZXMKIAkgKi8KIAloZGxjX3NrYiA9IGRldl9hbGxvY19za2Ioc2tiLT5sZW4gKyBzdHVmX2NudCArIDYgKyB0YWlsICsgaGVhZCk7CiAJaWYgKCFoZGxjX3NrYikgewotCQllcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIEhETEMgZW5jb2RpbmchIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNTA4LDcgKzQ5Nyw3IEBACiAJfQogCiAJLyogRmluYWxseSBhZGQgRkNTIChieXRlIHN0dWZmZWQpIGFuZCBmbGFnIHNlcXVlbmNlICovCi0JYyA9IChmY3MgJiAweDAwZmYpOyAgICAgIC8qIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKi8KKwljID0gKGZjcyAmIDB4MDBmZik7CS8qIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKi8KIAlpZiAobXVzdHN0dWZmKGMpKSB7CiAJCSooc2tiX3B1dChoZGxjX3NrYiwgMSkpID0gUFBQX0VTQ0FQRTsKIAkJYyBePSBQUFBfVFJBTlM7CkBAIC01NDYsNyArNTM1LDYgQEAKIAkvKiB3b3JzdCBjYXNlOiBldmVyeSBieXRlIG11c3QgYmUgc3R1ZmZlZCAqLwogCWlyYXdfc2tiID0gZGV2X2FsbG9jX3NrYigyKnNrYi0+bGVuICsgdGFpbCArIGhlYWQpOwogCWlmICghaXJhd19za2IpIHsKLQkJZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBIRExDIGVuY29kaW5nISIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTU3NywyMSArNTY1LDIzIEBACiAgKi8KIGludCBnaWdhc2V0X20xMHhfc2VuZF9za2Ioc3RydWN0IGJjX3N0YXRlICpiY3MsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdW5zaWduZWQgbGVuOwotCi0JSUZOVUxMUkVUVkFMKGJjcywgLUVGQVVMVCk7Ci0JSUZOVUxMUkVUVkFMKHNrYiwgLUVGQVVMVCk7Ci0JbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChiY3MtPnByb3RvMiA9PSBJU0ROX1BST1RPX0wyX0hETEMpCiAJCXNrYiA9IEhETENfRW5jb2RlKHNrYiwgSFdfSERSX0xFTiwgMCk7CiAJZWxzZQogCQlza2IgPSBpcmF3X2VuY29kZShza2IsIEhXX0hEUl9MRU4sIDApOwotCWlmICghc2tiKQorCWlmICghc2tiKSB7CisJCWVycigidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZW5jb2RpbmchXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJc2tiX3F1ZXVlX3RhaWwoJmJjcy0+c3F1ZXVlLCBza2IpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmJjcy0+Y3MtPndyaXRlX3Rhc2tsZXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKGJjcy0+Y3MtPmNvbm5lY3RlZCkKKwkJdGFza2xldF9zY2hlZHVsZSgmYmNzLT5jcy0+d3JpdGVfdGFza2xldCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGxlbjsJLyogb2sgc28gZmFyICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwppbmRleCAzMWYwZjA3Li5lYjQxYWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKQEAgLTMsOSArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LAotICogICAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+LgotICoKLSAqIEJhc2VkIG9uIHVzYi1naWdhc2V0LmMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgU3RlZmFuIEVpbGVycy4KICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTEzLDEwICsxMSw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGJhcy1naWdhc2V0LmMsdiAxLjUyLjQuMTkgMjAwNi8wMi8wNCAxODoyODoxNiBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpbmNsdWRlICJnaWdhc2V0LmgiCkBAIC0zMCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIAogLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLwotI2RlZmluZSBEUklWRVJfQVVUSE9SICJUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LCBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sIFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LCBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sIFN0ZWZhbiBFaWxlcnMiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgRHJpdmVyIGZvciBHaWdhc2V0IDMwN3giCiAKIApAQCAtNTAsMTkgKzQ0LDIwIEBACiAjZGVmaW5lIEdJR0FTRVRfREVWRlNOQU1FICAiZ2lnL2Jhcy8iCiAjZGVmaW5lIEdJR0FTRVRfREVWTkFNRSAgICAidHR5R0IiCiAKLSNkZWZpbmUgSUZfV1JJVEVCVUYgMjU2IC8vRklYTUUKKy8qIGxlbmd0aCBsaW1pdCBhY2NvcmRpbmcgdG8gU2llbWVucyAzMDcwdXNiLXByb3Rva29sbC5kb2MgY2guIDIuMSAqLworI2RlZmluZSBJRl9XUklURUJVRiAyNjQKIAogLyogVmFsdWVzIGZvciB0aGUgR2lnYXNldCAzMDd4ICovCiAjZGVmaW5lIFVTQl9HSUdBX1ZFTkRPUl9JRCAgICAgIDB4MDY4MQotI2RlZmluZSBVU0JfR0lHQV9QUk9EVUNUX0lEICAgICAweDAwMDEKLSNkZWZpbmUgVVNCXzQxNzVfUFJPRFVDVF9JRCAgICAgMHgwMDAyCisjZGVmaW5lIFVTQl8zMDcwX1BST0RVQ1RfSUQgICAgIDB4MDAwMQorI2RlZmluZSBVU0JfMzA3NV9QUk9EVUNUX0lEICAgICAweDAwMDIKICNkZWZpbmUgVVNCX1NYMzAzX1BST0RVQ1RfSUQgICAgMHgwMDIxCiAjZGVmaW5lIFVTQl9TWDM1M19QUk9EVUNUX0lEICAgIDB4MDAyMgogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZ2lnYXNldF90YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVVNCX0dJR0FfVkVORE9SX0lELCBVU0JfR0lHQV9QUk9EVUNUX0lEKSB9LAotCXsgVVNCX0RFVklDRShVU0JfR0lHQV9WRU5ET1JfSUQsIFVTQl80MTc1X1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9HSUdBX1ZFTkRPUl9JRCwgVVNCXzMwNzBfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX0dJR0FfVkVORE9SX0lELCBVU0JfMzA3NV9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShVU0JfR0lHQV9WRU5ET1JfSUQsIFVTQl9TWDMwM19QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShVU0JfR0lHQV9WRU5ET1JfSUQsIFVTQl9TWDM1M19QUk9EVUNUX0lEKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpAQCAtNzAsOSArNjUsNiBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZ2lnYXNldF90YWJsZSk7CiAKLS8qIEdldCBhIG1pbm9yIHJhbmdlIGZvciB5b3VyIGRldmljZXMgZnJvbSB0aGUgdXNiIG1haW50YWluZXIgKi8KLSNkZWZpbmUgVVNCX1NLRUxfTUlOT1JfQkFTRQkyMDAKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PSBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byB0aGUgVVNCIHBvcnQuIEl0CkBAIC04NCwyOSArNzYsMzMgQEAKIC8qIEZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBkZXZpY2UgaXMgdW5wbHVnZ2VkICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CiAKK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9jYWxsYmFjayhzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICopOworc3RhdGljIHZvaWQgc3RvcHVyYnMoc3RydWN0IGJhc19iY19zdGF0ZSAqKTsKK3N0YXRpYyBpbnQgYXR3cml0ZV9zdWJtaXQoc3RydWN0IGNhcmRzdGF0ZSAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CitzdGF0aWMgaW50IHN0YXJ0X2Nic2VuZChzdHJ1Y3QgY2FyZHN0YXRlICopOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0cnVjdCBiYXNfY2FyZHN0YXRlIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqdWRldjsJCS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICAgICppbnRlcmZhY2U7CS8qIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsJCS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CS8qIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KIAl1bnNpZ25lZCBjaGFyCQltaW5vcjsJCS8qIHN0YXJ0aW5nIG1pbm9yIG51bWJlciAqLwogCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYl9jdHJsOwkvKiBjb250cm9sIHBpcGUgZGVmYXVsdCBVUkIgKi8KKwlzdHJ1Y3QgdXJiCQkqdXJiX2N0cmw7CS8qIGNvbnRyb2wgcGlwZSBkZWZhdWx0IFVSQiAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHJfY3RybDsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcl9jdHJsOwkvKiBjb250cm9sIHJlcXVlc3QgdGltZW91dCAqLwogCiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXJfYXRyZHk7CS8qIEFUIGNvbW1hbmQgcmVhZHkgdGltZW91dCAqLwotCXN0cnVjdCB1cmIgICAgICAgICAgICAgICp1cmJfY21kX291dDsJLyogZm9yIHNlbmRpbmcgQVQgY29tbWFuZHMgKi8KKwlzdHJ1Y3QgdXJiCQkqdXJiX2NtZF9vdXQ7CS8qIGZvciBzZW5kaW5nIEFUIGNvbW1hbmRzICovCiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlkcl9jbWRfb3V0OwogCWludAkJCXJldHJ5X2NtZF9vdXQ7CiAKLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiX2NtZF9pbjsJLyogZm9yIHJlY2VpdmluZyBBVCByZXBsaWVzICovCisJc3RydWN0IHVyYgkJKnVyYl9jbWRfaW47CS8qIGZvciByZWNlaXZpbmcgQVQgcmVwbGllcyAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHJfY21kX2luOwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyX2NtZF9pbjsJLyogcmVjZWl2ZSByZXF1ZXN0IHRpbWVvdXQgKi8KLQl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqcmN2YnVmOwkvKiBBVCByZXBseSByZWNlaXZlIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIJCSpyY3ZidWY7CS8qIEFUIHJlcGx5IHJlY2VpdmUgYnVmZmVyICovCiAKLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiX2ludF9pbjsJLyogVVJCIGZvciBpbnRlcnJ1cHQgcGlwZSAqLworCXN0cnVjdCB1cmIJCSp1cmJfaW50X2luOwkvKiBVUkIgZm9yIGludGVycnVwdCBwaXBlICovCiAJdW5zaWduZWQgY2hhcgkJaW50X2luX2J1ZlszXTsKIAogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBsb2NrcyBhbGwgZm9sbG93aW5nICovCkBAIC0xMTgsMTIgKzExNCwxNCBAQAogfTsKIAogLyogc3RhdHVzIG9mIGRpcmVjdCBVU0IgY29ubmVjdGlvbiB0byAzMDd4IGJhc2UgKGJpdHMgaW4gYmFzc3RhdGUpICovCi0jZGVmaW5lIEJTX0FUT1BFTgkweDAwMQotI2RlZmluZSBCU19CMU9QRU4JMHgwMDIKLSNkZWZpbmUgQlNfQjJPUEVOCTB4MDA0Ci0jZGVmaW5lIEJTX0FUUkVBRFkJMHgwMDgKLSNkZWZpbmUgQlNfSU5JVAkJMHgwMTAKLSNkZWZpbmUgQlNfQVRUSU1FUgkweDAyMAorI2RlZmluZSBCU19BVE9QRU4JMHgwMDEJLyogQVQgY2hhbm5lbCBvcGVuICovCisjZGVmaW5lIEJTX0IxT1BFTgkweDAwMgkvKiBCIGNoYW5uZWwgMSBvcGVuICovCisjZGVmaW5lIEJTX0IyT1BFTgkweDAwNAkvKiBCIGNoYW5uZWwgMiBvcGVuICovCisjZGVmaW5lIEJTX0FUUkVBRFkJMHgwMDgJLyogYmFzZSByZWFkeSBmb3IgQVQgY29tbWFuZCAqLworI2RlZmluZSBCU19JTklUCQkweDAxMAkvKiBiYXNlIGhhcyBzaWduYWxsZWQgSU5JVF9PSyAqLworI2RlZmluZSBCU19BVFRJTUVSCTB4MDIwCS8qIHdhaXRpbmcgZm9yIEhEX1JFQURZX1NFTkRfQVREQVRBICovCisjZGVmaW5lIEJTX0FUUkRQRU5ECTB4MDQwCS8qIHVyYl9jbWRfaW4gaW4gdXNlICovCisjZGVmaW5lIEJTX0FUV1JQRU5ECTB4MDgwCS8qIHVyYl9jbWRfb3V0IGluIHVzZSAqLwogCiAKIHN0YXRpYyBzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRyaXZlciA9IE5VTEw7CkBAIC0xMzcsNiArMTM1LDQ3IEBACiAJLmlkX3RhYmxlID0gICAgIGdpZ2FzZXRfdGFibGUsCiB9OwogCisvKiBnZXQgbWVzc2FnZSB0ZXh0IGZvciB1c2Jfc3VibWl0X3VyYiByZXR1cm4gY29kZQorICovCitzdGF0aWMgY2hhciAqZ2V0X3VzYl9yY21zZyhpbnQgcmMpCit7CisJc3RhdGljIGNoYXIgdW5rbXNnWzI4XTsKKworCXN3aXRjaCAocmMpIHsKKwljYXNlIDA6CisJCXJldHVybiAic3VjY2VzcyI7CisJY2FzZSAtRU5PTUVNOgorCQlyZXR1cm4gIm91dCBvZiBtZW1vcnkiOworCWNhc2UgLUVOT0RFVjoKKwkJcmV0dXJuICJkZXZpY2Ugbm90IHByZXNlbnQiOworCWNhc2UgLUVOT0VOVDoKKwkJcmV0dXJuICJlbmRwb2ludCBub3QgcHJlc2VudCI7CisJY2FzZSAtRU5YSU86CisJCXJldHVybiAiVVJCIHR5cGUgbm90IHN1cHBvcnRlZCI7CisJY2FzZSAtRUlOVkFMOgorCQlyZXR1cm4gImludmFsaWQgYXJndW1lbnQiOworCWNhc2UgLUVBR0FJTjoKKwkJcmV0dXJuICJzdGFydCBmcmFtZSB0b28gZWFybHkgb3IgdG9vIG11Y2ggc2NoZWR1bGVkIjsKKwljYXNlIC1FRkJJRzoKKwkJcmV0dXJuICJ0b28gbWFueSBpc29jaHJvbm91cyBmcmFtZXMgcmVxdWVzdGVkIjsKKwljYXNlIC1FUElQRToKKwkJcmV0dXJuICJlbmRwb2ludCBzdGFsbGVkIjsKKwljYXNlIC1FTVNHU0laRToKKwkJcmV0dXJuICJpbnZhbGlkIHBhY2tldCBzaXplIjsKKwljYXNlIC1FTk9TUEM6CisJCXJldHVybiAid291bGQgb3ZlcmNvbW1pdCBVU0IgYmFuZHdpZHRoIjsKKwljYXNlIC1FU0hVVERPV046CisJCXJldHVybiAiZGV2aWNlIHNodXQgZG93biI7CisJY2FzZSAtRVBFUk06CisJCXJldHVybiAicmVqZWN0IGZsYWcgc2V0IjsKKwljYXNlIC1FSE9TVFVOUkVBQ0g6CisJCXJldHVybiAiZGV2aWNlIHN1c3BlbmRlZCI7CisJZGVmYXVsdDoKKwkJc25wcmludGYodW5rbXNnLCBzaXplb2YodW5rbXNnKSwgInVua25vd24gZXJyb3IgJWQiLCByYyk7CisJCXJldHVybiB1bmttc2c7CisJfQorfQorCiAvKiBnZXQgbWVzc2FnZSB0ZXh0IGZvciBVU0Igc3RhdHVzIGNvZGUKICAqLwogc3RhdGljIGNoYXIgKmdldF91c2Jfc3RhdG1zZyhpbnQgc3RhdHVzKQpAQCAtMTQ3LDQzICsxODYsMzcgQEAKIAljYXNlIDA6CiAJCXJldHVybiAic3VjY2VzcyI7CiAJY2FzZSAtRU5PRU5UOgotCQlyZXR1cm4gImNhbmNlbGVkIjsKLQljYXNlIC1FQ09OTlJFU0VUOgotCQlyZXR1cm4gImNhbmNlbGVkIChhc3luYykiOworCQlyZXR1cm4gInVubGlua2VkIChzeW5jKSI7CiAJY2FzZSAtRUlOUFJPR1JFU1M6CiAJCXJldHVybiAicGVuZGluZyI7CiAJY2FzZSAtRVBST1RPOgotCQlyZXR1cm4gImJpdCBzdHVmZmluZyBvciB1bmtub3duIFVTQiBlcnJvciI7CisJCXJldHVybiAiYml0IHN0dWZmaW5nIGVycm9yLCB0aW1lb3V0LCBvciB1bmtub3duIFVTQiBlcnJvciI7CiAJY2FzZSAtRUlMU0VROgotCQlyZXR1cm4gIklsbGVnYWwgYnl0ZSBzZXF1ZW5jZSAoQ1JDIG1pc21hdGNoKSI7Ci0JY2FzZSAtRVBJUEU6Ci0JCXJldHVybiAiYmFiYmxlIGRldGVjdCBvciBlbmRwb2ludCBzdGFsbGVkIjsKLQljYXNlIC1FTk9TUjoKLQkJcmV0dXJuICJidWZmZXIgZXJyb3IiOworCQlyZXR1cm4gIkNSQyBtaXNtYXRjaCwgdGltZW91dCwgb3IgdW5rbm93biBVU0IgZXJyb3IiOwogCWNhc2UgLUVUSU1FRE9VVDoKIAkJcmV0dXJuICJ0aW1lZCBvdXQiOwotCWNhc2UgLUVOT0RFVjoKLQkJcmV0dXJuICJkZXZpY2Ugbm90IHByZXNlbnQiOworCWNhc2UgLUVQSVBFOgorCQlyZXR1cm4gImVuZHBvaW50IHN0YWxsZWQiOworCWNhc2UgLUVDT01NOgorCQlyZXR1cm4gIklOIGJ1ZmZlciBvdmVycnVuIjsKKwljYXNlIC1FTk9TUjoKKwkJcmV0dXJuICJPVVQgYnVmZmVyIHVuZGVycnVuIjsKKwljYXNlIC1FT1ZFUkZMT1c6CisJCXJldHVybiAidG9vIG11Y2ggZGF0YSI7CiAJY2FzZSAtRVJFTU9URUlPOgogCQlyZXR1cm4gInNob3J0IHBhY2tldCBkZXRlY3RlZCI7CisJY2FzZSAtRU5PREVWOgorCQlyZXR1cm4gImRldmljZSByZW1vdmVkIjsKIAljYXNlIC1FWERFVjoKIAkJcmV0dXJuICJwYXJ0aWFsIGlzb2Nocm9ub3VzIHRyYW5zZmVyIjsKIAljYXNlIC1FSU5WQUw6CiAJCXJldHVybiAiaW52YWxpZCBhcmd1bWVudCI7Ci0JY2FzZSAtRU5YSU86Ci0JCXJldHVybiAiVVJCIGFscmVhZHkgcXVldWVkIjsKLQljYXNlIC1FQUdBSU46Ci0JCXJldHVybiAiaXNvY2hyb25vdXMgc3RhcnQgZnJhbWUgdG9vIGVhcmx5IG9yIHRvbyBtdWNoIHNjaGVkdWxlZCI7Ci0JY2FzZSAtRUZCSUc6Ci0JCXJldHVybiAidG9vIG1hbnkgaXNvY2hyb25vdXMgZnJhbWVzIHJlcXVlc3RlZCI7Ci0JY2FzZSAtRU1TR1NJWkU6Ci0JCXJldHVybiAiZW5kcG9pbnQgbWVzc2FnZSBzaXplIHplcm8iOworCWNhc2UgLUVDT05OUkVTRVQ6CisJCXJldHVybiAidW5saW5rZWQgKGFzeW5jKSI7CiAJY2FzZSAtRVNIVVRET1dOOgotCQlyZXR1cm4gImVuZHBvaW50IHNodXRkb3duIjsKLQljYXNlIC1FQlVTWToKLQkJcmV0dXJuICJhbm90aGVyIHJlcXVlc3QgcGVuZGluZyI7CisJCXJldHVybiAiZGV2aWNlIHNodXQgZG93biI7CiAJZGVmYXVsdDoKLQkJc25wcmludGYodW5rbXNnLCBzaXplb2YodW5rbXNnKSwgInVua25vd24gZXJyb3IgJWQiLCBzdGF0dXMpOworCQlzbnByaW50Zih1bmttc2csIHNpemVvZih1bmttc2cpLCAidW5rbm93biBzdGF0dXMgJWQiLCBzdGF0dXMpOwogCQlyZXR1cm4gdW5rbXNnOwogCX0KIH0KQEAgLTIwOCw1MyArMjQxLDU0IEBACiAgKiB3cml0ZSBjb250ZW50IG9mIFVSQiB0byBzeXNsb2cgZm9yIGRlYnVnZ2luZwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF91cmIoZW51bSBkZWJ1Z2xldmVsIGxldmVsLCBjb25zdCBjaGFyICp0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVyYiAqdXJiKQorCQkJICAgIHN0cnVjdCB1cmIgKnVyYikKIHsKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCWludCBpOwotCUlGTlVMTFJFVCh0YWcpOwotCWRiZyhsZXZlbCwgIiVzIHVyYigweCUwOGx4KS0+eyIsIHRhZywgKHVuc2lnbmVkIGxvbmcpIHVyYik7CisJZ2lnX2RiZyhsZXZlbCwgIiVzIHVyYigweCUwOGx4KS0+eyIsIHRhZywgKHVuc2lnbmVkIGxvbmcpIHVyYik7CiAJaWYgKHVyYikgewotCQlkYmcobGV2ZWwsCi0JCSAgICAiICBkZXY9MHglMDhseCwgcGlwZT0lczpFUCVkL0RWJWQ6JXMsICIKLQkJICAgICJzdGF0dXM9JWQsIGhjcHJpdj0weCUwOGx4LCB0cmFuc2Zlcl9mbGFncz0weCV4LCIsCi0JCSAgICAodW5zaWduZWQgbG9uZykgdXJiLT5kZXYsCi0JCSAgICB1c2JfcGlwZXR5cGVfc3RyKHVyYi0+cGlwZSksCi0JCSAgICB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksIHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksCi0JCSAgICB1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCi0JCSAgICB1cmItPnN0YXR1cywgKHVuc2lnbmVkIGxvbmcpIHVyYi0+aGNwcml2LAotCQkgICAgdXJiLT50cmFuc2Zlcl9mbGFncyk7Ci0JCWRiZyhsZXZlbCwKLQkJICAgICIgIHRyYW5zZmVyX2J1ZmZlcj0weCUwOGx4WyVkXSwgYWN0dWFsX2xlbmd0aD0lZCwgIgotCQkgICAgImJhbmR3aWR0aD0lZCwgc2V0dXBfcGFja2V0PTB4JTA4bHgsIiwKLQkJICAgICh1bnNpZ25lZCBsb25nKSB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoLAotCQkgICAgdXJiLT5iYW5kd2lkdGgsICh1bnNpZ25lZCBsb25nKSB1cmItPnNldHVwX3BhY2tldCk7Ci0JCWRiZyhsZXZlbCwKLQkJICAgICIgIHN0YXJ0X2ZyYW1lPSVkLCBudW1iZXJfb2ZfcGFja2V0cz0lZCwgaW50ZXJ2YWw9JWQsICIKLQkJICAgICJlcnJvcl9jb3VudD0lZCwiLAotCQkgICAgdXJiLT5zdGFydF9mcmFtZSwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cywgdXJiLT5pbnRlcnZhbCwKLQkJICAgIHVyYi0+ZXJyb3JfY291bnQpOwotCQlkYmcobGV2ZWwsCi0JCSAgICAiICBjb250ZXh0PTB4JTA4bHgsIGNvbXBsZXRlPTB4JTA4bHgsIGlzb19mcmFtZV9kZXNjW109eyIsCi0JCSAgICAodW5zaWduZWQgbG9uZykgdXJiLT5jb250ZXh0LAotCQkgICAgKHVuc2lnbmVkIGxvbmcpIHVyYi0+Y29tcGxldGUpOworCQlnaWdfZGJnKGxldmVsLAorCQkJIiAgZGV2PTB4JTA4bHgsIHBpcGU9JXM6RVAlZC9EViVkOiVzLCAiCisJCQkic3RhdHVzPSVkLCBoY3ByaXY9MHglMDhseCwgdHJhbnNmZXJfZmxhZ3M9MHgleCwiLAorCQkJKHVuc2lnbmVkIGxvbmcpIHVyYi0+ZGV2LAorCQkJdXNiX3BpcGV0eXBlX3N0cih1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLCB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVpbih1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAorCQkJdXJiLT5zdGF0dXMsICh1bnNpZ25lZCBsb25nKSB1cmItPmhjcHJpdiwKKwkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCQlnaWdfZGJnKGxldmVsLAorCQkJIiAgdHJhbnNmZXJfYnVmZmVyPTB4JTA4bHhbJWRdLCBhY3R1YWxfbGVuZ3RoPSVkLCAiCisJCQkiYmFuZHdpZHRoPSVkLCBzZXR1cF9wYWNrZXQ9MHglMDhseCwiLAorCQkJKHVuc2lnbmVkIGxvbmcpIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGgsCisJCQl1cmItPmJhbmR3aWR0aCwgKHVuc2lnbmVkIGxvbmcpIHVyYi0+c2V0dXBfcGFja2V0KTsKKwkJZ2lnX2RiZyhsZXZlbCwKKwkJCSIgIHN0YXJ0X2ZyYW1lPSVkLCBudW1iZXJfb2ZfcGFja2V0cz0lZCwgaW50ZXJ2YWw9JWQsICIKKwkJCSJlcnJvcl9jb3VudD0lZCwiLAorCQkJdXJiLT5zdGFydF9mcmFtZSwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cywgdXJiLT5pbnRlcnZhbCwKKwkJCXVyYi0+ZXJyb3JfY291bnQpOworCQlnaWdfZGJnKGxldmVsLAorCQkJIiAgY29udGV4dD0weCUwOGx4LCBjb21wbGV0ZT0weCUwOGx4LCAiCisJCQkiaXNvX2ZyYW1lX2Rlc2NbXT17IiwKKwkJCSh1bnNpZ25lZCBsb25nKSB1cmItPmNvbnRleHQsCisJCQkodW5zaWduZWQgbG9uZykgdXJiLT5jb21wbGV0ZSk7CiAJCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKLQkJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpwaWZkID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07Ci0JCQlkYmcobGV2ZWwsCi0JCQkgICAgIiAgICB7b2Zmc2V0PSV1LCBsZW5ndGg9JXUsIGFjdHVhbF9sZW5ndGg9JXUsICIKLQkJCSAgICAic3RhdHVzPSV1fSIsCi0JCQkgICAgcGlmZC0+b2Zmc2V0LCBwaWZkLT5sZW5ndGgsIHBpZmQtPmFjdHVhbF9sZW5ndGgsCi0JCQkgICAgcGlmZC0+c3RhdHVzKTsKKwkJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpwaWZkCisJCQkJPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKKwkJCWdpZ19kYmcobGV2ZWwsCisJCQkJIiAgICB7b2Zmc2V0PSV1LCBsZW5ndGg9JXUsIGFjdHVhbF9sZW5ndGg9JXUsICIKKwkJCQkic3RhdHVzPSV1fSIsCisJCQkJcGlmZC0+b2Zmc2V0LCBwaWZkLT5sZW5ndGgsIHBpZmQtPmFjdHVhbF9sZW5ndGgsCisJCQkJcGlmZC0+c3RhdHVzKTsKIAkJfQogCX0KLQlkYmcobGV2ZWwsICJ9fSIpOworCWdpZ19kYmcobGV2ZWwsICJ9fSIpOwogI2VuZGlmCiB9CiAKIC8qIHJlYWQvc2V0IG1vZGVtIGNvbnRyb2wgYml0cyBldGMuIChtMTB4IG9ubHkpICovCiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdfc3RhdGUpCisJCQkJICB1bnNpZ25lZCBuZXdfc3RhdGUpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yODAsNDMgKzMxNCwzOSBAQAogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gYmNzLT5jczsKIAotCWRiZyhERUJVR19BTlksCi0JICAgICIlczogc2NoZWR1bGluZyBIVVAgZm9yIGNoYW5uZWwgJWQiLCBfX2Z1bmNfXywgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgIiVzOiBzY2hlZHVsaW5nIEhVUCBmb3IgY2hhbm5lbCAlZCIsCisJCV9fZnVuY19fLCBiY3MtPmNoYW5uZWwpOwogCi0JaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCkpIHsKLQkJLy9GSVhNRSB3aGF0IHNob3VsZCB3ZSBkbz8KLQkJcmV0dXJuOwotCX0KKwlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkKKwkJZGV2X2Vycihjcy0+ZGV2LCAiZXZlbnQgcXVldWUgZnVsbFxuIik7CiAKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIH0KIAogLyogZXJyb3JfcmVzZXQKICAqIHJlc2V0IEdpZ2FzZXQgZGV2aWNlIGJlY2F1c2Ugb2YgYW4gdW5yZWNvdmVyYWJsZSBlcnJvcgotICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQgYW5kIHRha2VzIGNhcmUgb2Ygc2NoZWR1bGluZwotICogdGhlIG5lY2Vzc2FyeSBhY3Rpb25zIGZvciBleGVjdXRpb24gb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LCBhbmQgc2hvdWxkIHRha2UgY2FyZSBvZgorICogc2NoZWR1bGluZyB0aGUgbmVjZXNzYXJ5IGFjdGlvbnMgZm9yIGV4ZWN1dGlvbiBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0LgorICogUmlnaHQgbm93LCBpdCBqdXN0IGdlbmVyYXRlcyBhIGtlcm5lbCBtZXNzYWdlIGNhbGxpbmcgZm9yIGhlbHAuCiAgKiBhcmd1bWVudDoKICAqCWNvbnRyb2xsZXIgc3RhdGUgc3RydWN0dXJlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlcnJvcl9yZXNldChzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKIAkvL0ZJWE1FIHRyeSB0byByZWNvdmVyIHdpdGhvdXQgYm90aGVyaW5nIHRoZSB1c2VyCi0JZXJyKCJ1bnJlY292ZXJhYmxlIGVycm9yIC0gcGxlYXNlIGRpc2Nvbm5lY3QgdGhlIEdpZ2FzZXQgYmFzZSB0byByZXNldCIpOworCWRldl9lcnIoY3MtPmRldiwKKwkgICAgInVucmVjb3ZlcmFibGUgZXJyb3IgLSBwbGVhc2UgZGlzY29ubmVjdCBHaWdhc2V0IGJhc2UgdG8gcmVzZXRcbiIpOwogfQogCiAvKiBjaGVja19wZW5kaW5nCiAgKiBjaGVjayBmb3IgY29tcGxldGlvbiBvZiBwZW5kaW5nIGNvbnRyb2wgcmVxdWVzdAogICogcGFyYW1ldGVyOgotICoJdXJiCVVTQiByZXF1ZXN0IGJsb2NrIG9mIGNvbXBsZXRlZCByZXF1ZXN0Ci0gKgkJdXJiLT5jb250ZXh0ID0gaGFyZHdhcmUgc3BlY2lmaWMgY29udHJvbGxlciBzdGF0ZSBzdHJ1Y3R1cmUKKyAqCXVjcwloYXJkd2FyZSBzcGVjaWZpYyBjb250cm9sbGVyIHN0YXRlIHN0cnVjdHVyZQogICovCiBzdGF0aWMgdm9pZCBjaGVja19wZW5kaW5nKHN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVCh1Y3MpOwotCUlGTlVMTFJFVChjYXJkc3RhdGUpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVjcy0+bG9jaywgZmxhZ3MpOwogCXN3aXRjaCAodWNzLT5wZW5kaW5nKSB7CiAJY2FzZSAwOgpAQCAtMzM2LDggKzM2Niw2IEBACiAJY2FzZSBIRF9DTE9TRV9BVENIQU5ORUw6CiAJCWlmICghKGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKSAmIEJTX0FUT1BFTikpCiAJCQl1Y3MtPnBlbmRpbmcgPSAwOwotCQkvL3dha2VfdXBfaW50ZXJydXB0aWJsZShjcy0+aW5pdHdhaXQpOwotCQkvL0ZJWE1FIG5lZWQgb3duIHdhaXQgcXVldWU/CiAJCWJyZWFrOwogCWNhc2UgSERfQ0xPU0VfQjFDSEFOTkVMOgogCQlpZiAoIShhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19CMU9QRU4pKQpAQCAtMzU0LDcgKzM4Miw5IEBACiAJICogYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBhbmQgc2hvdWxkIG5ldmVyIGVuZCB1cCBoZXJlCiAJICovCiAJZGVmYXVsdDoKLQkJd2FybigidW5rbm93biBwZW5kaW5nIHJlcXVlc3QgMHglMDJ4IGNsZWFyZWQiLCB1Y3MtPnBlbmRpbmcpOworCQlkZXZfd2FybigmdWNzLT5pbnRlcmZhY2UtPmRldiwKKwkJCSAidW5rbm93biBwZW5kaW5nIHJlcXVlc3QgMHglMDJ4IGNsZWFyZWRcbiIsCisJCQkgdWNzLT5wZW5kaW5nKTsKIAkJdWNzLT5wZW5kaW5nID0gMDsKIAl9CiAKQEAgLTM3Miw1OCArNDAyLDUzIEBACiBzdGF0aWMgdm9pZCBjbWRfaW5fdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSBkYXRhOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAotCUlGTlVMTFJFVChjcyk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19VU0JSRVEsICIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQogCWlmICghdWNzLT5yY3ZidWZfc2l6ZSkgewotCQlkYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vIHJlY2VpdmUgaW4gcHJvZ3Jlc3MiLCBfX2Z1bmNfXyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vIHJlY2VpdmUgaW4gcHJvZ3Jlc3MiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAotCWVycigidGltZW91dCByZWFkaW5nIEFUIHJlc3BvbnNlIik7CisJZGV2X2Vycihjcy0+ZGV2LCAidGltZW91dCByZWFkaW5nIEFUIHJlc3BvbnNlXG4iKTsKIAllcnJvcl9yZXNldChjcyk7CS8vRklYTUUgcmV0cnk/CiB9CiAKKy8qIHNldC9jbGVhciBiaXRzIGluIGJhc2UgY29ubmVjdGlvbiBzdGF0ZSwgcmV0dXJuIHByZXZpb3VzIHN0YXRlCisgKi8KK2lubGluZSBzdGF0aWMgaW50IHVwZGF0ZV9iYXNzdGF0ZShzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzLAorCQkJCSAgaW50IHNldCwgaW50IGNsZWFyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXRlOwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVjcy0+bG9jaywgZmxhZ3MpOworCXN0YXRlID0gYXRvbWljX3JlYWQoJnVjcy0+YmFzc3RhdGUpOworCWF0b21pY19zZXQoJnVjcy0+YmFzc3RhdGUsIChzdGF0ZSAmIH5jbGVhcikgfCBzZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVjcy0+bG9jaywgZmxhZ3MpOworCXJldHVybiBzdGF0ZTsKK30KIAogLyogYXRyZWFkX3N1Ym1pdAotICogc3VibWl0IGFuIEhEX1JFQURfQVRNRVNTQUdFIGNvbW1hbmQgVVJCCisgKiBzdWJtaXQgYW4gSERfUkVBRF9BVE1FU1NBR0UgY29tbWFuZCBVUkIgYW5kIG9wdGlvbmFsbHkgc3RhcnQgYSB0aW1lb3V0CiAgKiBwYXJhbWV0ZXJzOgogICoJY3MJY29udHJvbGxlciBzdGF0ZSBzdHJ1Y3R1cmUKICAqCXRpbWVvdXQJdGltZW91dCBpbiAxLzEwIHNlYy4sIDA6IG5vbmUKICAqIHJldHVybiB2YWx1ZToKICAqCTAgb24gc3VjY2VzcwotICoJLUVJTlZBTCBpZiBhIE5VTEwgcG9pbnRlciBpcyBlbmNvdW50ZXJlZCBzb21ld2hlcmUKICAqCS1FQlVTWSBpZiBhbm90aGVyIHJlcXVlc3QgaXMgcGVuZGluZwogICoJYW55IFVSQiBzdWJtaXNzaW9uIGVycm9yIGNvZGUKICAqLwogc3RhdGljIGludCBhdHJlYWRfc3VibWl0KHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgdGltZW91dCkKIHsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCWludCByZXQ7CiAKLQlJRk5VTExSRVRWQUwoY3MsIC1FSU5WQUwpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUVkFMKHVjcywgLUVJTlZBTCk7Ci0JSUZOVUxMUkVUVkFMKHVjcy0+dXJiX2NtZF9pbiwgLUVJTlZBTCk7CisJZ2lnX2RiZyhERUJVR19VU0JSRVEsICItLS0tLS0tPiBIRF9SRUFEX0FUTUVTU0FHRSAoJWQpIiwKKwkJdWNzLT5yY3ZidWZfc2l6ZSk7CiAKLQlkYmcoREVCVUdfVVNCUkVRLCAiLS0tLS0tLT4gSERfUkVBRF9BVE1FU1NBR0UgKCVkKSIsIHVjcy0+cmN2YnVmX3NpemUpOwotCi0JaWYgKHVjcy0+dXJiX2NtZF9pbi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgSERfUkVBRF9BVE1FU1NBR0U6IFVSQiBidXN5Iik7CisJaWYgKHVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIEJTX0FUUkRQRU5ELCAwKSAmIEJTX0FUUkRQRU5EKSB7CisJCWRldl9lcnIoY3MtPmRldiwKKwkJCSJjb3VsZCBub3Qgc3VibWl0IEhEX1JFQURfQVRNRVNTQUdFOiBVUkIgYnVzeVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC00MzMsMTkgKzQ1OCwyMCBAQAogCXVjcy0+ZHJfY21kX2luLndJbmRleCA9IDA7CiAJdWNzLT5kcl9jbWRfaW4ud0xlbmd0aCA9IGNwdV90b19sZTE2KHVjcy0+cmN2YnVmX3NpemUpOwogCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVjcy0+dXJiX2NtZF9pbiwgdWNzLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZjdHJscGlwZSh1Y3MtPnVkZXYsIDApLAotCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKikgJiB1Y3MtPmRyX2NtZF9pbiwKLQkgICAgICAgICAgICAgICAgICAgICB1Y3MtPnJjdmJ1ZiwgdWNzLT5yY3ZidWZfc2l6ZSwKLQkgICAgICAgICAgICAgICAgICAgICByZWFkX2N0cmxfY2FsbGJhY2ssIGNzLT5pbmJ1Zik7CisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZSh1Y3MtPnVkZXYsIDApLAorCQkJICAgICAodW5zaWduZWQgY2hhciopICYgdWNzLT5kcl9jbWRfaW4sCisJCQkgICAgIHVjcy0+cmN2YnVmLCB1Y3MtPnJjdmJ1Zl9zaXplLAorCQkJICAgICByZWFkX2N0cmxfY2FsbGJhY2ssIGNzLT5pbmJ1Zik7CiAKIAlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+dXJiX2NtZF9pbiwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCBIRF9SRUFEX0FUTUVTU0FHRTogJXMiLAotCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOworCQl1cGRhdGVfYmFzc3RhdGUodWNzLCAwLCBCU19BVFJEUEVORCk7CisJCWRldl9lcnIoY3MtPmRldiwgImNvdWxkIG5vdCBzdWJtaXQgSERfUkVBRF9BVE1FU1NBR0U6ICVzXG4iLAorCQkJZ2V0X3VzYl9zdGF0bXNnKHJldCkpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmICh0aW1lb3V0ID4gMCkgewotCQlkYmcoREVCVUdfVVNCUkVRLCAic2V0dGluZyB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLCB0aW1lb3V0KTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJzZXR0aW5nIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIHRpbWVvdXQpOwogCQl1Y3MtPnRpbWVyX2NtZF9pbi5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQgKiBIWiAvIDEwOwogCQl1Y3MtPnRpbWVyX2NtZF9pbi5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGNzOwogCQl1Y3MtPnRpbWVyX2NtZF9pbi5mdW5jdGlvbiA9IGNtZF9pbl90aW1lb3V0OwpAQCAtNDU0LDI2ICs0ODAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzdG9wdXJicyhzdHJ1Y3QgYmFzX2JjX3N0YXRlICopOwotc3RhdGljIGludCBzdGFydF9jYnNlbmQoc3RydWN0IGNhcmRzdGF0ZSAqKTsKLQotLyogc2V0L2NsZWFyIGJpdHMgaW4gYmFzZSBjb25uZWN0aW9uIHN0YXRlCi0gKi8KLWlubGluZSBzdGF0aWMgdm9pZCB1cGRhdGVfYmFzc3RhdGUoc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcywKLQkJCQkgICBpbnQgc2V0LCBpbnQgY2xlYXIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc3RhdGU7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdWNzLT5sb2NrLCBmbGFncyk7Ci0Jc3RhdGUgPSBhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSk7Ci0Jc3RhdGUgJj0gfmNsZWFyOwotCXN0YXRlIHw9IHNldDsKLQlhdG9taWNfc2V0KCZ1Y3MtPmJhc3N0YXRlLCBzdGF0ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWNzLT5sb2NrLCBmbGFncyk7Ci19Ci0KLQogLyogcmVhZF9pbnRfY2FsbGJhY2sKICAqIFVTQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGludGVycnVwdCBwaXBlIGlucHV0CiAgKiBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gaW4gaW50ZXJydXB0IGNvbnRleHQKQEAgLTQ4Myw0OCArNDg5LDQ5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzdGF0dXM7CisJaW50IHJjOwogCXVuc2lnbmVkIGw7CiAJaW50IGNoYW5uZWw7CiAKLQlJRk5VTExSRVQodXJiKTsKLQljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHVyYi0+Y29udGV4dDsKLQlJRk5VTExSRVQoY3MpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7Ci0KLQlpZiAodW5saWtlbHkoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkpIHsKLQkJd2FybigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwogCQlicmVhazsKLQljYXNlIC1FTk9FTlQ6CQkJLyogY2FuY2VsZWQgKi8KLQljYXNlIC1FQ09OTlJFU0VUOgkJLyogY2FuY2VsZWQgKGFzeW5jKSAqLworCWNhc2UgLUVOT0VOVDoJCQkvKiBjYW5jZWxsZWQgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkJLyogY2FuY2VsbGVkIChhc3luYykgKi8KIAljYXNlIC1FSU5QUk9HUkVTUzoJCS8qIHBlbmRpbmcgKi8KIAkJLyogaWdub3JlIHNpbGVudGx5ICovCi0JCWRiZyhERUJVR19VU0JSRVEsCi0JCSAgICAiJXM6ICVzIiwgX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIiVzOiAlcyIsCisJCQlfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCXJldHVybjsKKwljYXNlIC1FTk9ERVY6CQkJLyogZGV2aWNlIHJlbW92ZWQgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkZXZpY2Ugc2h1dCBkb3duICovCisJCS8vRklYTUUgdXNlIHRoaXMgYXMgZGlzY29ubmVjdCBpbmRpY2F0b3I/CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6IGRldmljZSBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgkJLyogc2V2ZXJlIHRyb3VibGUgKi8KLQkJd2FybigiaW50ZXJydXB0IHJlYWQ6ICVzIiwgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCWRldl93YXJuKGNzLT5kZXYsICJpbnRlcnJ1cHQgcmVhZDogJXNcbiIsCisJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCS8vRklYTUUgY29ycmVjdGl2ZSBhY3Rpb24/IHJlc3VibWlzc2lvbiBhbHdheXMgb2s/CiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCisJLyogZHJvcCBpbmNvbXBsZXRlIHBhY2tldHMgZXZlbiBpZiB0aGUgbWlzc2luZyBieXRlcyB3b3VsZG4ndCBtYXR0ZXIgKi8KKwlpZiAodW5saWtlbHkodXJiLT5hY3R1YWxfbGVuZ3RoIDwgMykpIHsKKwkJZGV2X3dhcm4oY3MtPmRldiwgImluY29tcGxldGUgaW50ZXJydXB0IHBhY2tldCAoJWQgYnl0ZXMpXG4iLAorCQkJIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCiAJbCA9ICh1bnNpZ25lZCkgdWNzLT5pbnRfaW5fYnVmWzFdICsKIAkgICAgKCgodW5zaWduZWQpIHVjcy0+aW50X2luX2J1ZlsyXSkgPDwgOCk7CiAKLQlkYmcoREVCVUdfVVNCUkVRLAotCSAgICAiPC0tLS0tLS0lZDogMHglMDJ4ICgldSBbMHglMDJ4IDB4JTAyeF0pIiwgdXJiLT5hY3R1YWxfbGVuZ3RoLAotCSAgICAoaW50KXVjcy0+aW50X2luX2J1ZlswXSwgbCwKLQkgICAgKGludCl1Y3MtPmludF9pbl9idWZbMV0sIChpbnQpdWNzLT5pbnRfaW5fYnVmWzJdKTsKKwlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIjwtLS0tLS0tJWQ6IDB4JTAyeCAoJXUgWzB4JTAyeCAweCUwMnhdKSIsCisJCXVyYi0+YWN0dWFsX2xlbmd0aCwgKGludCl1Y3MtPmludF9pbl9idWZbMF0sIGwsCisJCShpbnQpdWNzLT5pbnRfaW5fYnVmWzFdLCAoaW50KXVjcy0+aW50X2luX2J1ZlsyXSk7CiAKIAljaGFubmVsID0gMDsKIApAQCAtNTcwLDYyICs1NzcsNjggQEAKIAljYXNlIEhEX0IxX0ZMT1dfQ09OVFJPTDoKIAkJYmNzID0gY3MtPmJjcyArIGNoYW5uZWw7CiAJCWF0b21pY19hZGQoKGwgLSBCQVNfTk9STUZSQU1FKSAqIEJBU19DT1JSRlJBTUVTLAotCQkgICAgICAgICAgICZiY3MtPmh3LmJhcy0+Y29ycmJ5dGVzKTsKLQkJZGJnKERFQlVHX0lTTywKLQkJICAgICJGbG93IGNvbnRyb2wgKGNoYW5uZWwgJWQsIHN1YiAlZCk6IDB4JTAyeCA9PiAlZCIsCi0JCSAgICBjaGFubmVsLCBiY3MtPmh3LmJhcy0+bnVtc3ViLCBsLAotCQkgICAgYXRvbWljX3JlYWQoJmJjcy0+aHcuYmFzLT5jb3JyYnl0ZXMpKTsKKwkJCSAgICZiY3MtPmh3LmJhcy0+Y29ycmJ5dGVzKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sCisJCQkiRmxvdyBjb250cm9sIChjaGFubmVsICVkLCBzdWIgJWQpOiAweCUwMnggPT4gJWQiLAorCQkJY2hhbm5lbCwgYmNzLT5ody5iYXMtPm51bXN1YiwgbCwKKwkJCWF0b21pY19yZWFkKCZiY3MtPmh3LmJhcy0+Y29ycmJ5dGVzKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBIRF9SRUNFSVZFQVREQVRBX0FDSzoJLyogQVQgcmVzcG9uc2UgcmVhZHkgdG8gYmUgcmVjZWl2ZWQgKi8KIAkJaWYgKCFsKSB7Ci0JCQl3YXJuKCJIRF9SRUNFSVZFQVREQVRBX0FDSyB3aXRoIGxlbmd0aCAwIGlnbm9yZWQiKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJIkhEX1JFQ0VJVkVBVERBVEFfQUNLIHdpdGggbGVuZ3RoIDAgaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAkJfQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHVjcy0+cmN2YnVmX3NpemUpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCQllcnIoInJlY2VpdmUgQVQgZGF0YSBvdmVycnVuLCAlZCBieXRlcyBsb3N0IiwgbCk7Ci0JCQllcnJvcl9yZXNldChjcyk7CS8vRklYTUUgcmVzY2hlZHVsZQotCQkJYnJlYWs7CisJCQkvKiB0aHJvdyBhd2F5IHByZXZpb3VzIGJ1ZmZlciAtIHdlIGhhdmUgbm8gcXVldWUgKi8KKwkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkicmVjZWl2ZSBBVCBkYXRhIG92ZXJydW4sICVkIGJ5dGVzIGxvc3RcbiIsCisJCQkJdWNzLT5yY3ZidWZfc2l6ZSk7CisJCQlrZnJlZSh1Y3MtPnJjdmJ1Zik7CisJCQl1Y3MtPnJjdmJ1Zl9zaXplID0gMDsKIAkJfQogCQlpZiAoKHVjcy0+cmN2YnVmID0ga21hbGxvYyhsLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQkJCWVycigiJXM6IG91dCBvZiBtZW1vcnksICVkIGJ5dGVzIGxvc3QiLCBfX2Z1bmNfXywgbCk7Ci0JCQllcnJvcl9yZXNldChjcyk7CS8vRklYTUUgcmVzY2hlZHVsZQorCQkJZGV2X2Vycihjcy0+ZGV2LCAib3V0IG9mIG1lbW9yeSByZWNlaXZpbmcgQVQgZGF0YVxuIik7CisJCQllcnJvcl9yZXNldChjcyk7CiAJCQlicmVhazsKIAkJfQogCQl1Y3MtPnJjdmJ1Zl9zaXplID0gbDsKIAkJdWNzLT5yZXRyeV9jbWRfaW4gPSAwOwotCQlpZiAoKHN0YXR1cyA9IGF0cmVhZF9zdWJtaXQoY3MsIEJBU19USU1FT1VUKSkgPCAwKSB7CisJCWlmICgocmMgPSBhdHJlYWRfc3VibWl0KGNzLCBCQVNfVElNRU9VVCkpIDwgMCkgewogCQkJa2ZyZWUodWNzLT5yY3ZidWYpOwogCQkJdWNzLT5yY3ZidWYgPSBOVUxMOwogCQkJdWNzLT5yY3ZidWZfc2l6ZSA9IDA7Ci0JCQllcnJvcl9yZXNldChjcyk7CS8vRklYTUUgcmVzY2hlZHVsZQorCQkJaWYgKHJjICE9IC1FTk9ERVYpCisJCQkJLy9GSVhNRSBjb3JyZWN0aXZlIGFjdGlvbj8KKwkJCQllcnJvcl9yZXNldChjcyk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhEX1JFU0VUX0lOVEVSUlVQVF9QSVBFX0FDSzoKLQkJZGJnKERFQlVHX1VTQlJFUSwgIkhEX1JFU0VUX0lOVEVSUlVQVF9QSVBFX0FDSyIpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIkhEX1JFU0VUX0lOVEVSUlVQVF9QSVBFX0FDSyIpOwogCQlicmVhazsKIAogCWNhc2UgSERfU1VTUEVORF9FTkQ6Ci0JCWRiZyhERUJVR19VU0JSRVEsICJIRF9TVVNQRU5EX0VORCIpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIkhEX1NVU1BFTkRfRU5EIik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJd2FybigidW5rbm93biBHaWdhc2V0IHNpZ25hbCAweCUwMnggKCV1KSBpZ25vcmVkIiwKLQkJICAgICAoaW50KSB1Y3MtPmludF9pbl9idWZbMF0sIGwpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJICJ1bmtub3duIEdpZ2FzZXQgc2lnbmFsIDB4JTAyeCAoJXUpIGlnbm9yZWRcbiIsCisJCQkgKGludCkgdWNzLT5pbnRfaW5fYnVmWzBdLCBsKTsKIAl9CiAKIAljaGVja19wZW5kaW5nKHVjcyk7CiAKIHJlc3VibWl0OgotCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOwotCWlmICh1bmxpa2VseShzdGF0dXMpKSB7Ci0JCWVycigiY291bGQgbm90IHJlc3VibWl0IGludGVycnVwdCBVUkI6ICVzIiwKLQkJICAgIGdldF91c2Jfc3RhdG1zZyhzdGF0dXMpKTsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmICh1bmxpa2VseShyYyAhPSAwICYmIHJjICE9IC1FTk9ERVYpKSB7CisJCWRldl9lcnIoY3MtPmRldiwgImNvdWxkIG5vdCByZXN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlc1xuIiwKKwkJCWdldF91c2JfcmNtc2cocmMpKTsKIAkJZXJyb3JfcmVzZXQoY3MpOwogCX0KIH0KQEAgLTYzOSwzMSArNjUyLDE3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7Ci0JdW5zaWduZWQgbnVtYnl0ZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaW5idWZfdCAqaW5idWY7CisJc3RydWN0IGluYnVmX3QgKmluYnVmID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gaW5idWYtPmNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCWludCBoYXZlX2RhdGEgPSAwOworCXVuc2lnbmVkIG51bWJ5dGVzOworCWludCByYzsKIAotCUlGTlVMTFJFVCh1cmIpOwotCWluYnVmID0gKHN0cnVjdCBpbmJ1Zl90ICopIHVyYi0+Y29udGV4dDsKLQlJRk5VTExSRVQoaW5idWYpOwotCWNzID0gaW5idWYtPmNzOwotCUlGTlVMTFJFVChjcyk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCXdhcm4oIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9CisJdXBkYXRlX2Jhc3N0YXRlKHVjcywgMCwgQlNfQVRSRFBFTkQpOwogCiAJaWYgKCF1Y3MtPnJjdmJ1Zl9zaXplKSB7Ci0JCXdhcm4oIiVzOiBubyByZWNlaXZlIGluIHByb2dyZXNzIiwgX19mdW5jX18pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiJXM6IG5vIHJlY2VpdmUgaW4gcHJvZ3Jlc3NcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjczLDEyICs2NzIsMTQgQEAKIAljYXNlIDA6CQkJCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCiAJCW51bWJ5dGVzID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQlpZiAodW5saWtlbHkobnVtYnl0ZXMgPT0gMCkpIHsKLQkJCXdhcm4oImNvbnRyb2wgcmVhZDogZW1wdHkgYmxvY2sgcmVjZWl2ZWQiKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJICJjb250cm9sIHJlYWQ6IGVtcHR5IGJsb2NrIHJlY2VpdmVkXG4iKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAkJaWYgKHVubGlrZWx5KG51bWJ5dGVzICE9IHVjcy0+cmN2YnVmX3NpemUpKSB7Ci0JCQl3YXJuKCJjb250cm9sIHJlYWQ6IHJlY2VpdmVkICVkIGNoYXJzLCBleHBlY3RlZCAlZCIsCi0JCQkgICAgIG51bWJ5dGVzLCB1Y3MtPnJjdmJ1Zl9zaXplKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkgICAgICAgImNvbnRyb2wgcmVhZDogcmVjZWl2ZWQgJWQgY2hhcnMsIGV4cGVjdGVkICVkXG4iLAorCQkJCSBudW1ieXRlcywgdWNzLT5yY3ZidWZfc2l6ZSk7CiAJCQlpZiAobnVtYnl0ZXMgPiB1Y3MtPnJjdmJ1Zl9zaXplKQogCQkJCW51bWJ5dGVzID0gdWNzLT5yY3ZidWZfc2l6ZTsKIAkJfQpAQCAtNjk0LDI3ICs2OTUsMzIgQEAKIAkJfQogCQlicmVhazsKIAotCWNhc2UgLUVOT0VOVDoJCQkvKiBjYW5jZWxlZCAqLwotCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBjYW5jZWxlZCAoYXN5bmMpICovCisJY2FzZSAtRU5PRU5UOgkJCS8qIGNhbmNlbGxlZCAqLworCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBjYW5jZWxsZWQgKGFzeW5jKSAqLwogCWNhc2UgLUVJTlBST0dSRVNTOgkJLyogcGVuZGluZyAqLworCWNhc2UgLUVOT0RFVjoJCQkvKiBkZXZpY2UgcmVtb3ZlZCAqLworCWNhc2UgLUVTSFVURE9XTjoJCS8qIGRldmljZSBzaHV0IGRvd24gKi8KIAkJLyogbm8gYWN0aW9uIG5lY2Vzc2FyeSAqLwotCQlkYmcoREVCVUdfVVNCUkVRLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogJXMiLAorCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CQkJLyogc2V2ZXJlIHRyb3VibGUgKi8KLQkJd2FybigiY29udHJvbCByZWFkOiAlcyIsIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiY29udHJvbCByZWFkOiAlc1xuIiwKKwkJCSBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAlyZXRyeToKIAkJaWYgKHVjcy0+cmV0cnlfY21kX2luKysgPCBCQVNfUkVUUlkpIHsKLQkJCW5vdGljZSgiY29udHJvbCByZWFkOiByZXRyeSAlZCIsIHVjcy0+cmV0cnlfY21kX2luKTsKLQkJCWlmIChhdHJlYWRfc3VibWl0KGNzLCBCQVNfVElNRU9VVCkgPj0gMCkgewotCQkJCS8qIHJlc3VibWl0dGVkIC0gYnlwYXNzIHJlZ3VsYXIgZXhpdCBibG9jayAqLwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCQlkZXZfbm90aWNlKGNzLT5kZXYsICJjb250cm9sIHJlYWQ6IHJldHJ5ICVkXG4iLAorCQkJCSAgIHVjcy0+cmV0cnlfY21kX2luKTsKKwkJCXJjID0gYXRyZWFkX3N1Ym1pdChjcywgQkFTX1RJTUVPVVQpOworCQkJaWYgKHJjID49IDAgfHwgcmMgPT0gLUVOT0RFVikKKwkJCQkvKiByZXN1Ym1pdHRlZCBvciBkaXNjb25uZWN0ZWQgKi8KKwkJCQkvKiAtIGJ5cGFzcyByZWd1bGFyIGV4aXQgYmxvY2sgKi8KIAkJCQlyZXR1cm47Ci0JCQl9CiAJCX0gZWxzZSB7Ci0JCQllcnIoImNvbnRyb2wgcmVhZDogZ2l2aW5nIHVwIGFmdGVyICVkIHRyaWVzIiwKLQkJCSAgICB1Y3MtPnJldHJ5X2NtZF9pbik7CisJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJImNvbnRyb2wgcmVhZDogZ2l2aW5nIHVwIGFmdGVyICVkIHRyaWVzXG4iLAorCQkJCXVjcy0+cmV0cnlfY21kX2luKTsKIAkJfQogCQllcnJvcl9yZXNldChjcyk7CiAJfQpAQCAtNzIyLDkgKzcyOCw4IEBACiAJa2ZyZWUodWNzLT5yY3ZidWYpOwogCXVjcy0+cmN2YnVmID0gTlVMTDsKIAl1Y3MtPnJjdmJ1Zl9zaXplID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWlmIChoYXZlX2RhdGEpIHsKLQkJZGJnKERFQlVHX0lOVFIsICIlcy0tPkJIIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICIlcy0tPkJIIiwgX19mdW5jX18pOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAl9CiB9CkBAIC03NDMsMjEgKzc0OCwxOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIHJjOwogCi0JSUZOVUxMUkVUKHVyYik7Ci0JSUZOVUxMUkVUKHVyYi0+Y29udGV4dCk7Ci0JSUZOVUxMUkVUKGNhcmRzdGF0ZSk7Ci0KIAkvKiBzdGF0dXMgY29kZXMgbm90IHdvcnRoIGJvdGhlcmluZyB0aGUgdGFza2xldCB3aXRoICovCi0JaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkgICAgICAgICAgICAgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkgewotCQlkYmcoREVCVUdfSVNPLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTIHx8CisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVOT0RFViB8fAorCQkgICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6ICVzIiwKKwkJCV9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJcmV0dXJuOwogCX0KIAotCWJjcyA9IChzdHJ1Y3QgYmNfc3RhdGUgKikgdXJiLT5jb250ZXh0OworCWJjcyA9IHVyYi0+Y29udGV4dDsKIAl1YmMgPSBiY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWJjKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1YmMtPmlzb2lubG9jaywgZmxhZ3MpOwogCWlmIChsaWtlbHkodWJjLT5pc29pbmRvbmUgPT0gTlVMTCkpIHsKQEAgLTc3MCwyMSArNzczLDI0IEBACiAJCWZvciAoaSA9IDA7IGkgPCBCQVNfTlVNRlJBTUVTOyBpKyspIHsKIAkJCXViYy0+aXNvaW5sb3N0ICs9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKIAkJCWlmICh1bmxpa2VseSh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyAhPSAwICYmCi0JCQkJICAgICB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpKSB7CisJCQkJICAgICB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyAhPQorCQkJCQkJCQktRUlOUFJPR1JFU1MpKQogCQkJCXViYy0+bG9zdHN0YXR1cyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOwotCQkJfQogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAwOwogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKIAkJfQogCQlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZ1YmMtPnJ1bm5pbmcpKSkgewotCQkJdXJiLT5kZXYgPSBiY3MtPmNzLT5ody5iYXMtPnVkZXY7CS8qIGNsb2JiZXJlZCBieSBVU0Igc3Vic3lzdGVtICovCisJCQkvKiB1cmItPmRldiBpcyBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCQkJdXJiLT5kZXYgPSBiY3MtPmNzLT5ody5iYXMtPnVkZXY7CiAJCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOwogCQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEJBU19OVU1GUkFNRVM7Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IGlzb2MgcmVhZCBvdmVycnVuL3Jlc3VibWl0IiwgX19mdW5jX18pOworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogaXNvYyByZWFkIG92ZXJydW4vcmVzdWJtaXQiLAorCQkJCV9fZnVuY19fKTsKIAkJCXJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7Ci0JCQlpZiAodW5saWtlbHkocmMgIT0gMCkpIHsKLQkJCQllcnIoImNvdWxkIG5vdCByZXN1Ym1pdCBpc29jaHJvbm91cyByZWFkIFVSQjogJXMiLAotCQkJCSAgICBnZXRfdXNiX3N0YXRtc2cocmMpKTsKKwkJCWlmICh1bmxpa2VseShyYyAhPSAwICYmIHJjICE9IC1FTk9ERVYpKSB7CisJCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkJCSJjb3VsZCBub3QgcmVzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCAiCisJCQkJCSJVUkI6ICVzXG4iLCBnZXRfdXNiX3JjbXNnKHJjKSk7CiAJCQkJZHVtcF91cmIoREVCVUdfSVNPLCAiaXNvYyByZWFkIiwgdXJiKTsKIAkJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJCX0KQEAgLTgwNiwyMyArODEyLDIwIEBACiAJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVQodXJiKTsKLQlJRk5VTExSRVQodXJiLT5jb250ZXh0KTsKLQlJRk5VTExSRVQoY2FyZHN0YXRlKTsKLQogCS8qIHN0YXR1cyBjb2RlcyBub3Qgd29ydGggYm90aGVyaW5nIHRoZSB0YXNrbGV0IHdpdGggKi8KLQlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fCB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAotCSAgICAgICAgICAgICB1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKSB7Ci0JCWRiZyhERUJVR19JU08sCi0JCSAgICAiJXM6ICVzIiwgX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8CisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgfHwKKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRU5PREVWIHx8CisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpIHsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogJXMiLAorCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQlyZXR1cm47CiAJfQogCiAJLyogcGFzcyBVUkIgY29udGV4dCB0byB0YXNrbGV0ICovCi0JdWN4ID0gKHN0cnVjdCBpc293X3VyYmN0eF90ICopIHVyYi0+Y29udGV4dDsKLQlJRk5VTExSRVQodWN4LT5iY3MpOworCXVjeCA9IHVyYi0+Y29udGV4dDsKIAl1YmMgPSB1Y3gtPmJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1YmMpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnViYy0+aXNvb3V0bG9jaywgZmxhZ3MpOwogCXViYy0+aXNvb3V0b3ZmbCA9IHViYy0+aXNvb3V0ZG9uZTsKQEAgLTg0MSwxNSArODQ0LDExIEBACiAgKi8KIHN0YXRpYyBpbnQgc3RhcnR1cmJzKHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogeworCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYyA9IGJjcy0+aHcuYmFzOwogCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmM7CiAJaW50IGosIGs7CiAJaW50IHJjOwogCi0JSUZOVUxMUkVUVkFMKGJjcywgLUVGQVVMVCk7Ci0JdWJjID0gYmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUVkFMKHViYywgLUVGQVVMVCk7Ci0KIAkvKiBpbml0aWFsaXplIEwyIHJlY2VwdGlvbiAqLwogCWlmIChiY3MtPnByb3RvMiA9PSBJU0ROX1BST1RPX0wyX0hETEMpCiAJCWJjcy0+aW5wdXRzdGF0ZSB8PSBJTlNfZmxhZ19odW50OwpAQCAtODU5LDcgKzg1OCw2IEBACiAJZm9yIChrID0gMDsgayA8IEJBU19JTlVSQlM7IGsrKykgewogCQl1cmIgPSB1YmMtPmlzb2ludXJic1trXTsKIAkJaWYgKCF1cmIpIHsKLQkJCWVycigiaXNvaW51cmJzWyVkXT09TlVMTCIsIGspOwogCQkJcmMgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtODgxLDExICs4NzksOCBAQAogCQl9CiAKIAkJZHVtcF91cmIoREVCVUdfSVNPLCAiSW5pdGlhbCBpc29jIHJlYWQiLCB1cmIpOwotCQlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJCWVycigiY291bGQgbm90IHN1Ym1pdCBpc29jaHJvbm91cyByZWFkIFVSQiAlZDogJXMiLAotCQkJICAgIGssIGdldF91c2Jfc3RhdG1zZyhyYykpOworCQlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykpICE9IDApCiAJCQlnb3RvIGVycm9yOwotCQl9CiAJfQogCiAJLyogaW5pdGlhbGl6ZSBMMiB0cmFuc21pc3Npb24gKi8KQEAgLTg5NSw3ICs4OTAsNiBAQAogCWZvciAoayA9IDA7IGsgPCBCQVNfT1VUVVJCUzsgKytrKSB7CiAJCXVyYiA9IHViYy0+aXNvb3V0dXJic1trXS51cmI7CiAJCWlmICghdXJiKSB7Ci0JCQllcnIoImlzb291dHVyYnNbJWRdLnVyYj09TlVMTCIsIGspOwogCQkJcmMgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtOTIxLDExICs5MTUsOCBAQAogCWZvciAoayA9IDA7IGsgPCAyOyArK2spIHsKIAkJZHVtcF91cmIoREVCVUdfSVNPLCAiSW5pdGlhbCBpc29jIHdyaXRlIiwgdXJiKTsKIAkJcmMgPSB1c2Jfc3VibWl0X3VyYih1YmMtPmlzb291dHVyYnNba10udXJiLCBTTEFCX0FUT01JQyk7Ci0JCWlmIChyYyAhPSAwKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgaXNvY2hyb25vdXMgd3JpdGUgVVJCICVkOiAlcyIsCi0JCQkgICAgaywgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CisJCWlmIChyYyAhPSAwKQogCQkJZ290byBlcnJvcjsKLQkJfQogCX0KIAlkdW1wX3VyYihERUJVR19JU08sICJJbml0aWFsIGlzb2Mgd3JpdGUgKGZyZWUpIiwgdXJiKTsKIAl1YmMtPmlzb291dGZyZWUgPSAmdWJjLT5pc29vdXR1cmJzWzJdOwpAQCAtOTQ2LDIwICs5MzcsMjAgQEAKIHsKIAlpbnQgaywgcmM7CiAKLQlJRk5VTExSRVQodWJjKTsKLQogCWF0b21pY19zZXQoJnViYy0+cnVubmluZywgMCk7CiAKIAlmb3IgKGsgPSAwOyBrIDwgQkFTX0lOVVJCUzsgKytrKSB7CiAJCXJjID0gdXNiX3VubGlua191cmIodWJjLT5pc29pbnVyYnNba10pOwotCQlkYmcoREVCVUdfSVNPLCAiJXM6IGlzb2MgaW5wdXQgVVJCICVkIHVubGlua2VkLCByZXN1bHQgPSAlZCIsCi0JCSAgICBfX2Z1bmNfXywgaywgcmMpOworCQlnaWdfZGJnKERFQlVHX0lTTywKKwkJCSIlczogaXNvYyBpbnB1dCBVUkIgJWQgdW5saW5rZWQsIHJlc3VsdCA9ICVzIiwKKwkJCV9fZnVuY19fLCBrLCBnZXRfdXNiX3JjbXNnKHJjKSk7CiAJfQogCiAJZm9yIChrID0gMDsgayA8IEJBU19PVVRVUkJTOyArK2spIHsKIAkJcmMgPSB1c2JfdW5saW5rX3VyYih1YmMtPmlzb291dHVyYnNba10udXJiKTsKLQkJZGJnKERFQlVHX0lTTywgIiVzOiBpc29jIG91dHB1dCBVUkIgJWQgdW5saW5rZWQsIHJlc3VsdCA9ICVkIiwKLQkJICAgIF9fZnVuY19fLCBrLCByYyk7CisJCWdpZ19kYmcoREVCVUdfSVNPLAorCQkJIiVzOiBpc29jIG91dHB1dCBVUkIgJWQgdW5saW5rZWQsIHJlc3VsdCA9ICVzIiwKKwkJCV9fZnVuY19fLCBrLCBnZXRfdXNiX3JjbXNnKHJjKSk7CiAJfQogfQogCkBAIC05NjksNyArOTYwLDcgQEAKIC8qIHN1Ym1pdF9pc29fd3JpdGVfdXJiCiAgKiBmaWxsIGFuZCBzdWJtaXQgdGhlIG5leHQgaXNvY2hyb25vdXMgd3JpdGUgVVJCCiAgKiBwYXJhbWV0ZXJzOgotICoJYmNzCUIgY2hhbm5lbCBzdGF0ZSBzdHJ1Y3R1cmUKKyAqCXVjeAljb250ZXh0IHN0cnVjdHVyZSBjb250YWluaW5nIFVSQgogICogcmV0dXJuIHZhbHVlOgogICoJbnVtYmVyIG9mIGZyYW1lcyBzdWJtaXR0ZWQgaW4gVVJCCiAgKgkwIGlmIFVSQiBub3Qgc3VibWl0dGVkIGJlY2F1c2Ugbm8gZGF0YSBhdmFpbGFibGUgKGlzb291dGJ1ZiBidXN5KQpAQCAtOTc3LDE5ICs5NjgsMTMgQEAKICAqLwogc3RhdGljIGludCBzdWJtaXRfaXNvX3dyaXRlX3VyYihzdHJ1Y3QgaXNvd191cmJjdHhfdCAqdWN4KQogewotCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmM7CisJc3RydWN0IHVyYiAqdXJiID0gdWN4LT51cmI7CisJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjID0gdWN4LT5iY3MtPmh3LmJhczsKIAlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaWZkOwogCWludCBjb3JyYnl0ZXMsIG5mcmFtZSwgcmM7CiAKLQlJRk5VTExSRVRWQUwodWN4LCAtRUZBVUxUKTsKLQl1cmIgPSB1Y3gtPnVyYjsKLQlJRk5VTExSRVRWQUwodXJiLCAtRUZBVUxUKTsKLQlJRk5VTExSRVRWQUwodWN4LT5iY3MsIC1FRkFVTFQpOwotCXViYyA9IHVjeC0+YmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUVkFMKHViYywgLUVGQVVMVCk7Ci0KLQl1cmItPmRldiA9IHVjeC0+YmNzLT5jcy0+aHcuYmFzLT51ZGV2OwkvKiBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCS8qIHVyYi0+ZGV2IGlzIGNsb2JiZXJlZCBieSBVU0Igc3Vic3lzdGVtICovCisJdXJiLT5kZXYgPSB1Y3gtPmJjcy0+Y3MtPmh3LmJhcy0+dWRldjsKIAl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOwogCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdWJjLT5pc29vdXRidWYtPmRhdGE7CiAJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKHViYy0+aXNvb3V0YnVmLT5kYXRhKTsKQEAgLTEwMDAsNyArOTg1LDggQEAKIAkJLyogY29tcHV0ZSBmcmFtZSBsZW5ndGggYWNjb3JkaW5nIHRvIGZsb3cgY29udHJvbCAqLwogCQlpZmQtPmxlbmd0aCA9IEJBU19OT1JNRlJBTUU7CiAJCWlmICgoY29ycmJ5dGVzID0gYXRvbWljX3JlYWQoJnViYy0+Y29ycmJ5dGVzKSkgIT0gMCkgewotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBjb3JyYnl0ZXM9JWQiLCBfX2Z1bmNfXywgY29ycmJ5dGVzKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IGNvcnJieXRlcz0lZCIsCisJCQkJX19mdW5jX18sIGNvcnJieXRlcyk7CiAJCQlpZiAoY29ycmJ5dGVzID4gQkFTX0hJR0hGUkFNRSAtIEJBU19OT1JNRlJBTUUpCiAJCQkJY29ycmJ5dGVzID0gQkFTX0hJR0hGUkFNRSAtIEJBU19OT1JNRlJBTUU7CiAJCQllbHNlIGlmIChjb3JyYnl0ZXMgPCBCQVNfTE9XRlJBTUUgLSBCQVNfTk9STUZSQU1FKQpAQCAtMTAwOCwxOCArOTk0LDIxIEBACiAJCQlpZmQtPmxlbmd0aCArPSBjb3JyYnl0ZXM7CiAJCQlhdG9taWNfYWRkKC1jb3JyYnl0ZXMsICZ1YmMtPmNvcnJieXRlcyk7CiAJCX0KLQkJLy9kYmcoREVCVUdfSVNPLCAiJXM6IGZyYW1lICVkIGxlbmd0aD0lZCIsIF9fZnVuY19fLCBuZnJhbWUsIGlmZC0+bGVuZ3RoKTsKIAogCQkvKiByZXRyaWV2ZSBibG9jayBvZiBkYXRhIHRvIHNlbmQgKi8KLQkJaWZkLT5vZmZzZXQgPSBnaWdhc2V0X2lzb3didWZfZ2V0Ynl0ZXModWJjLT5pc29vdXRidWYsIGlmZC0+bGVuZ3RoKTsKKwkJaWZkLT5vZmZzZXQgPSBnaWdhc2V0X2lzb3didWZfZ2V0Ynl0ZXModWJjLT5pc29vdXRidWYsCisJCQkJCQkgICAgICAgaWZkLT5sZW5ndGgpOwogCQlpZiAoaWZkLT5vZmZzZXQgPCAwKSB7CiAJCQlpZiAoaWZkLT5vZmZzZXQgPT0gLUVCVVNZKSB7Ci0JCQkJZGJnKERFQlVHX0lTTywgIiVzOiBidWZmZXIgYnVzeSBhdCBmcmFtZSAlZCIsCi0JCQkJICAgIF9fZnVuY19fLCBuZnJhbWUpOwotCQkJCS8qIHRhc2tsZXQgd2lsbCBiZSByZXN0YXJ0ZWQgZnJvbSBnaWdhc2V0X3NlbmRfc2tiKCkgKi8KKwkJCQlnaWdfZGJnKERFQlVHX0lTTywKKwkJCQkJIiVzOiBidWZmZXIgYnVzeSBhdCBmcmFtZSAlZCIsCisJCQkJCV9fZnVuY19fLCBuZnJhbWUpOworCQkJCS8qIHRhc2tsZXQgd2lsbCBiZSByZXN0YXJ0ZWQgZnJvbQorCQkJCSAgIGdpZ2FzZXRfc2VuZF9za2IoKSAqLwogCQkJfSBlbHNlIHsKLQkJCQllcnIoIiVzOiBidWZmZXIgZXJyb3IgJWQgYXQgZnJhbWUgJWQiLAotCQkJCSAgICBfX2Z1bmNfXywgaWZkLT5vZmZzZXQsIG5mcmFtZSk7CisJCQkJZGV2X2Vycih1Y3gtPmJjcy0+Y3MtPmRldiwKKwkJCQkJIiVzOiBidWZmZXIgZXJyb3IgJWQgYXQgZnJhbWUgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBpZmQtPm9mZnNldCwgbmZyYW1lKTsKIAkJCQlyZXR1cm4gaWZkLT5vZmZzZXQ7CiAJCQl9CiAJCQlicmVhazsKQEAgLTEwMjgsMTUgKzEwMTcsMjIgQEAKIAkJaWZkLT5zdGF0dXMgPSAwOwogCQlpZmQtPmFjdHVhbF9sZW5ndGggPSAwOwogCX0KLQlpZiAoKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBuZnJhbWUpID4gMCkgewotCQlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJCWVycigiY291bGQgbm90IHN1Ym1pdCBpc29jaHJvbm91cyB3cml0ZSBVUkI6ICVzIiwKLQkJCSAgICBnZXRfdXNiX3N0YXRtc2cocmMpKTsKLQkJCWR1bXBfdXJiKERFQlVHX0lTTywgImlzb2Mgd3JpdGUiLCB1cmIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JCSsrdWJjLT5udW1zdWI7CisJaWYgKHVubGlrZWx5KG5mcmFtZSA9PSAwKSkKKwkJcmV0dXJuIDA7CS8qIG5vIGRhdGEgdG8gc2VuZCAqLworCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBuZnJhbWU7CisKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmICh1bmxpa2VseShyYykpIHsKKwkJaWYgKHJjID09IC1FTk9ERVYpCisJCQkvKiBkZXZpY2UgcmVtb3ZlZCAtIGdpdmUgdXAgc2lsZW50bHkgKi8KKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZGV2X2Vycih1Y3gtPmJjcy0+Y3MtPmRldiwKKwkJCQkiY291bGQgbm90IHN1Ym1pdCBpc29jaHJvbm91cyB3cml0ZSBVUkI6ICVzXG4iLAorCQkJCWdldF91c2JfcmNtc2cocmMpKTsKKwkJcmV0dXJuIHJjOwogCX0KKwkrK3ViYy0+bnVtc3ViOwogCXJldHVybiBuZnJhbWU7CiB9CiAKQEAgLTEwNDgsOSArMTA0NCw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHdyaXRlX2lzb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKLQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmM7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7CisJc3RydWN0IGJjX3N0YXRlICpiY3MgPSAoc3RydWN0IGJjX3N0YXRlICopIGRhdGE7CisJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjID0gYmNzLT5ody5iYXM7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBiY3MtPmNzOwogCXN0cnVjdCBpc293X3VyYmN0eF90ICpkb25lLCAqbmV4dCwgKm92Zmw7CiAJc3RydWN0IHVyYiAqdXJiOwogCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICppZmQ7CkBAIC0xMDU5LDIzICsxMDU1LDEyIEBACiAJaW50IGk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgbGVuOwotCi0JYmNzID0gKHN0cnVjdCBiY19zdGF0ZSAqKSBkYXRhOwotCUlGTlVMTFJFVChiY3MpOwotCXViYyA9IGJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1YmMpOwotCWNzID0gYmNzLT5jczsKLQlJRk5VTExSRVQoY3MpOworCWludCByYzsKIAogCS8qIGxvb3Agd2hpbGUgY29tcGxldGVkIFVSQnMgYXJyaXZlIGluIHRpbWUgKi8KIAlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseSghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSkgewotCQkJd2FybigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJCXJldHVybjsKLQkJfQotCiAJCWlmICh1bmxpa2VseSghKGF0b21pY19yZWFkKCZ1YmMtPnJ1bm5pbmcpKSkpIHsKLQkJCWRiZyhERUJVR19JU08sICIlczogbm90IHJ1bm5pbmciLCBfX2Z1bmNfXyk7CisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBub3QgcnVubmluZyIsIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0xMDg3LDcgKzEwNzIsNyBAQAogCQl1YmMtPmlzb291dG92ZmwgPSBOVUxMOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YmMtPmlzb291dGxvY2ssIGZsYWdzKTsKIAkJaWYgKG92ZmwpIHsKLQkJCWVycigiaXNvY2hyb25vdXMgd3JpdGUgYnVmZmVyIHVuZGVycnVuIC0gYnV5IGEgZmFzdGVyIG1hY2hpbmUgOi0pIik7CisJCQlkZXZfZXJyKGNzLT5kZXYsICJpc29jaHJvbm91cyB3cml0ZSBidWZmZXIgdW5kZXJydW5cbiIpOwogCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTEwMCw3ICsxMDg1LDggQEAKIAkJdWJjLT5pc29vdXRmcmVlID0gTlVMTDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJjLT5pc29vdXRsb2NrLCBmbGFncyk7CiAJCWlmIChuZXh0KSB7Ci0JCQlpZiAoc3VibWl0X2lzb193cml0ZV91cmIobmV4dCkgPD0gMCkgeworCQkJcmMgPSBzdWJtaXRfaXNvX3dyaXRlX3VyYihuZXh0KTsKKwkJCWlmICh1bmxpa2VseShyYyA8PSAwICYmIHJjICE9IC1FTk9ERVYpKSB7CiAJCQkJLyogY291bGQgbm90IHN1Ym1pdCBVUkIsIHB1dCBpdCBiYWNrICovCiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnViYy0+aXNvb3V0bG9jaywgZmxhZ3MpOwogCQkJCWlmICh1YmMtPmlzb291dGZyZWUgPT0gTlVMTCkgewpAQCAtMTExMCw3ICsxMDk2LDggQEAKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YmMtPmlzb291dGxvY2ssIGZsYWdzKTsKIAkJCQlpZiAobmV4dCkgewogCQkJCQkvKiBjb3VsZG4ndCBwdXQgaXQgYmFjayAqLwotCQkJCQllcnIoImxvc2luZyBpc29jaHJvbm91cyB3cml0ZSBVUkIiKTsKKwkJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkgICAgICAibG9zaW5nIGlzb2Nocm9ub3VzIHdyaXRlIFVSQlxuIik7CiAJCQkJCWVycm9yX2hhbmd1cChiY3MpOwogCQkJCX0KIAkJCX0KQEAgLTExMTksMjYgKzExMDYsMzAgQEAKIAkJLyogcHJvY2VzcyBjb21wbGV0ZWQgVVJCICovCiAJCXVyYiA9IGRvbmUtPnVyYjsKIAkJc3dpdGNoICh1cmItPnN0YXR1cykgeworCQljYXNlIC1FWERFVjoJCQkvKiBwYXJ0aWFsIGNvbXBsZXRpb24gKi8KKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBwYXJ0aWFsbHkgY29tcGxldGVkIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQkvKiBmYWxsIHRocm91Z2ggLSB3aGF0J3MgdGhlIGRpZmZlcmVuY2UgYW55d2F5PyAqLwogCQljYXNlIDA6CQkJCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCi0JCQlicmVhazsKLQkJY2FzZSAtRVhERVY6CQkJLyogaW5zcGVjdCBpbmRpdmlkdWFsIGZyYW1lcyAqLwotCQkJLyogYXNzdW1wdGlvbnMgKGZvciBsYWNrIG9mIGRvY3VtZW50YXRpb24pOgotCQkJICogLSBhY3R1YWxfbGVuZ3RoIGJ5dGVzIG9mIHRoZSBmcmFtZSBpbiBlcnJvciBhcmUgc3VjY2Vzc2Z1bGx5IHNlbnQKKwkJCS8qIGluc3BlY3QgaW5kaXZpZHVhbCBmcmFtZXMKKwkJCSAqIGFzc3VtcHRpb25zIChmb3IgbGFjayBvZiBkb2N1bWVudGF0aW9uKToKKwkJCSAqIC0gYWN0dWFsX2xlbmd0aCBieXRlcyBvZiBmaXJzdCBmcmFtZSBpbiBlcnJvciBhcmUKKwkJCSAqICAgc3VjY2Vzc2Z1bGx5IHNlbnQKIAkJCSAqIC0gYWxsIGZvbGxvd2luZyBmcmFtZXMgYXJlIG5vdCBzZW50IGF0IGFsbAogCQkJICovCi0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBwYXJ0aWFsbHkgY29tcGxldGVkIiwgX19mdW5jX18pOwotCQkJb2Zmc2V0ID0gZG9uZS0+bGltaXQ7CS8qIGp1c3QgaW4gY2FzZSAqLworCQkJb2Zmc2V0ID0gZG9uZS0+bGltaXQ7CS8qIGRlZmF1bHQgKG5vIGVycm9yKSAqLwogCQkJZm9yIChpID0gMDsgaSA8IEJBU19OVU1GUkFNRVM7IGkrKykgewogCQkJCWlmZCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOwogCQkJCWlmIChpZmQtPnN0YXR1cyB8fAogCQkJCSAgICBpZmQtPmFjdHVhbF9sZW5ndGggIT0gaWZkLT5sZW5ndGgpIHsKLQkJCQkJd2FybigiaXNvY2hyb25vdXMgd3JpdGU6IGZyYW1lICVkOiAlcywgIgotCQkJCQkgICAgICJvbmx5ICVkIG9mICVkIGJ5dGVzIHNlbnQiLAorCQkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgICAgICJpc29jaHJvbm91cyB3cml0ZTogZnJhbWUgJWQ6ICVzLCAiCisJCQkJCSAgICAgIm9ubHkgJWQgb2YgJWQgYnl0ZXMgc2VudFxuIiwKIAkJCQkJICAgICBpLCBnZXRfdXNiX3N0YXRtc2coaWZkLT5zdGF0dXMpLAogCQkJCQkgICAgIGlmZC0+YWN0dWFsX2xlbmd0aCwgaWZkLT5sZW5ndGgpOwogCQkJCQlvZmZzZXQgPSAoaWZkLT5vZmZzZXQgKwotCQkJCQkgICAgICAgICAgaWZkLT5hY3R1YWxfbGVuZ3RoKQotCQkJCQkgICAgICAgICAlIEJBU19PVVRCVUZTSVpFOworCQkJCQkJICBpZmQtPmFjdHVhbF9sZW5ndGgpCisJCQkJCQkgJSBCQVNfT1VUQlVGU0laRTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtMTE0OCwyNSArMTEzOSwyNiBAQAogCQkJCWlmZCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOwogCQkJCWlmIChpZmQtPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MKIAkJCQkgICAgfHwgaWZkLT5hY3R1YWxfbGVuZ3RoICE9IDApIHsKLQkJCQkJd2FybigiaXNvY2hyb25vdXMgd3JpdGU6IGZyYW1lICVkOiAlcywgIgotCQkJCQkgICAgICIlZCBvZiAlZCBieXRlcyBzZW50IiwKKwkJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICAgICAiaXNvY2hyb25vdXMgd3JpdGU6IGZyYW1lICVkOiAlcywgIgorCQkJCQkgICAgICIlZCBvZiAlZCBieXRlcyBzZW50XG4iLAogCQkJCQkgICAgIGksIGdldF91c2Jfc3RhdG1zZyhpZmQtPnN0YXR1cyksCiAJCQkJCSAgICAgaWZkLT5hY3R1YWxfbGVuZ3RoLCBpZmQtPmxlbmd0aCk7CiAJCQkJCW9mZnNldCA9IChpZmQtPm9mZnNldCArCi0JCQkJCSAgICAgICAgICBpZmQtPmFjdHVhbF9sZW5ndGgpCi0JCQkJCSAgICAgICAgICUgQkFTX09VVEJVRlNJWkU7CisJCQkJCQkgIGlmZC0+YWN0dWFsX2xlbmd0aCkKKwkJCQkJCSAlIEJBU19PVVRCVUZTSVpFOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CiAjZW5kaWYKIAkJCWJyZWFrOwotCQljYXNlIC1FUElQRToJCQkvL0ZJWE1FIGlzIHRoaXMgdGhlIGNvZGUgZm9yICJ1bmRlcnJ1biI/Ci0JCQllcnIoImlzb2Nocm9ub3VzIHdyaXRlIHN0YWxsZWQiKTsKKwkJY2FzZSAtRVBJUEU6CQkJLyogc3RhbGwgLSBwcm9iYWJseSB1bmRlcnJ1biAqLworCQkJZGV2X2Vycihjcy0+ZGV2LCAiaXNvY2hyb25vdXMgd3JpdGUgc3RhbGxlZFxuIik7CiAJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgkJCS8qIHNldmVyZSB0cm91YmxlICovCi0JCQl3YXJuKCJpc29jaHJvbm91cyB3cml0ZTogJXMiLAotCQkJICAgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsICJpc29jaHJvbm91cyB3cml0ZTogJXNcbiIsCisJCQkJIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQl9CiAKIAkJLyogbWFyayB0aGUgd3JpdGUgYnVmZmVyIGFyZWEgY292ZXJlZCBieSB0aGlzIFVSQiBhcyBmcmVlICovCkBAIC0xMTgwLDcgKzExNzIsOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YmMtPmlzb291dGxvY2ssIGZsYWdzKTsKIAkJaWYgKG5leHQpIHsKIAkJCS8qIG9ubHkgb25lIFVSQiBzdGlsbCBhY3RpdmUgLSByZXN1Ym1pdCBvbmUgKi8KLQkJCWlmIChzdWJtaXRfaXNvX3dyaXRlX3VyYihuZXh0KSA8PSAwKSB7CisJCQlyYyA9IHN1Ym1pdF9pc29fd3JpdGVfdXJiKG5leHQpOworCQkJaWYgKHVubGlrZWx5KHJjIDw9IDAgJiYgcmMgIT0gLUVOT0RFVikpIHsKIAkJCQkvKiBjb3VsZG4ndCBzdWJtaXQgKi8KIAkJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJCX0KQEAgLTExOTQsOCArMTE4Nyw4IEBACiAJCWlmIChnaWdhc2V0X2lzb2NfYnVpbGRmcmFtZShiY3MsIHNrYi0+ZGF0YSwgbGVuKSA9PSAtRUFHQUlOKSB7CiAJCQkvKiBpbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlLCBwdXNoIGJhY2sgb250byBxdWV1ZSAqLwogCQkJc2tiX3F1ZXVlX2hlYWQoJmJjcy0+c3F1ZXVlLCBza2IpOwotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBza2IgcmVxdWV1ZWQsIHFsZW49JWQiLAotCQkJICAgIF9fZnVuY19fLCBza2JfcXVldWVfbGVuKCZiY3MtPnNxdWV1ZSkpOworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogc2tiIHJlcXVldWVkLCBxbGVuPSVkIiwKKwkJCQlfX2Z1bmNfXywgc2tiX3F1ZXVlX2xlbigmYmNzLT5zcXVldWUpKTsKIAkJCWJyZWFrOwogCQl9CiAJCXNrYl9wdWxsKHNrYiwgbGVuKTsKQEAgLTEyMTUsMjggKzEyMDgsMTYgQEAKICAqLwogc3RhdGljIHZvaWQgcmVhZF9pc29fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGJjX3N0YXRlICpiY3M7Ci0Jc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOworCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gKHN0cnVjdCBiY19zdGF0ZSAqKSBkYXRhOworCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYyA9IGJjcy0+aHcuYmFzOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gYmNzLT5jczsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJY2hhciAqcmN2YnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRvdGxlZnQsIG51bWJ5dGVzLCBvZmZzZXQsIGZyYW1lLCByYzsKIAotCWJjcyA9IChzdHJ1Y3QgYmNfc3RhdGUgKikgZGF0YTsKLQlJRk5VTExSRVQoYmNzKTsKLQl1YmMgPSBiY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWJjKTsKLQljcyA9IGJjcy0+Y3M7Ci0JSUZOVUxMUkVUKGNzKTsKLQogCS8qIGxvb3Agd2hpbGUgbW9yZSBjb21wbGV0ZWQgVVJCcyBhcnJpdmUgaW4gdGhlIG1lYW50aW1lICovCiAJZm9yICg7OykgewotCQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQkJd2FybigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJCXJldHVybjsKLQkJfQotCiAJCS8qIHJldHJpZXZlIFVSQiAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdWJjLT5pc29pbmxvY2ssIGZsYWdzKTsKIAkJaWYgKCEodXJiID0gdWJjLT5pc29pbmRvbmUpKSB7CkBAIC0xMjQ1LDM4ICsxMjI2LDQ0IEBACiAJCX0KIAkJdWJjLT5pc29pbmRvbmUgPSBOVUxMOwogCQlpZiAodW5saWtlbHkodWJjLT5sb3N0c3RhdHVzICE9IC1FSU5QUk9HUkVTUykpIHsKLQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQgb3ZlcnJ1biwgZHJvcHBlZCBVUkIgd2l0aCBzdGF0dXM6ICVzLCAlZCBieXRlcyBsb3N0IiwKLQkJCSAgICAgZ2V0X3VzYl9zdGF0bXNnKHViYy0+bG9zdHN0YXR1cyksIHViYy0+aXNvaW5sb3N0KTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJICJpc29jaHJvbm91cyByZWFkIG92ZXJydW4sICIKKwkJCQkgImRyb3BwZWQgVVJCIHdpdGggc3RhdHVzOiAlcywgJWQgYnl0ZXMgbG9zdFxuIiwKKwkJCQkgZ2V0X3VzYl9zdGF0bXNnKHViYy0+bG9zdHN0YXR1cyksCisJCQkJIHViYy0+aXNvaW5sb3N0KTsKIAkJCXViYy0+bG9zdHN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YmMtPmlzb2lubG9jaywgZmxhZ3MpOwogCiAJCWlmICh1bmxpa2VseSghKGF0b21pY19yZWFkKCZ1YmMtPnJ1bm5pbmcpKSkpIHsKLQkJCWRiZyhERUJVR19JU08sICIlczogY2hhbm5lbCBub3QgcnVubmluZywgZHJvcHBlZCBVUkIgd2l0aCBzdGF0dXM6ICVzIiwKLQkJCSAgICBfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCQlnaWdfZGJnKERFQlVHX0lTTywKKwkJCQkiJXM6IGNoYW5uZWwgbm90IHJ1bm5pbmcsICIKKwkJCQkiZHJvcHBlZCBVUkIgd2l0aCBzdGF0dXM6ICVzIiwKKwkJCQlfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJCWNhc2UgMDoJCQkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KIAkJCWJyZWFrOwotCQljYXNlIC1FWERFVjoJCQkvKiBpbnNwZWN0IGluZGl2aWR1YWwgZnJhbWVzICh3ZSBkbyB0aGF0IGFueXdheSkgKi8KLQkJCWRiZyhERUJVR19JU08sICIlczogVVJCIHBhcnRpYWxseSBjb21wbGV0ZWQiLCBfX2Z1bmNfXyk7CisJCWNhc2UgLUVYREVWOgkJCS8qIGluc3BlY3QgaW5kaXZpZHVhbCBmcmFtZXMKKwkJCQkJCSAgICh3ZSBkbyB0aGF0IGFueXdheSkgKi8KKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBwYXJ0aWFsbHkgY29tcGxldGVkIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlicmVhazsKIAkJY2FzZSAtRU5PRU5UOgogCQljYXNlIC1FQ09OTlJFU0VUOgotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgY2FuY2VsZWQiLCBfX2Z1bmNfXyk7Ci0JCQljb250aW51ZTsJCS8qIC0+IHNraXAgKi8KLQkJY2FzZSAtRUlOUFJPR1JFU1M6CQkvKiBodWg/ICovCi0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBzdGlsbCBwZW5kaW5nIiwgX19mdW5jX18pOworCQljYXNlIC1FSU5QUk9HUkVTUzoKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6ICVzIiwKKwkJCQlfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCQljb250aW51ZTsJCS8qIC0+IHNraXAgKi8KIAkJY2FzZSAtRVBJUEU6Ci0JCQllcnIoImlzb2Nocm9ub3VzIHJlYWQgc3RhbGxlZCIpOworCQkJZGV2X2Vycihjcy0+ZGV2LCAiaXNvY2hyb25vdXMgcmVhZCBzdGFsbGVkXG4iKTsKIAkJCWVycm9yX2hhbmd1cChiY3MpOwogCQkJY29udGludWU7CQkvKiAtPiBza2lwICovCiAJCWRlZmF1bHQ6CQkJLyogc2V2ZXJlIHRyb3VibGUgKi8KLQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQ6ICVzIiwKLQkJCSAgICAgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LCAiaXNvY2hyb25vdXMgcmVhZDogJXNcbiIsCisJCQkJIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCkBAIC0xMjg0LDMzICsxMjcxLDQ0IEBACiAJCXRvdGxlZnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJCWZvciAoZnJhbWUgPSAwOyB0b3RsZWZ0ID4gMCAmJiBmcmFtZSA8IEJBU19OVU1GUkFNRVM7IGZyYW1lKyspIHsKIAkJCWlmICh1bmxpa2VseSh1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5zdGF0dXMpKSB7Ci0JCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6ICVzIiwKLQkJCQkgICAgIGZyYW1lLCBnZXRfdXNiX3N0YXRtc2codXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uc3RhdHVzKSk7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogJXNcbiIsCisJCQkJCSBmcmFtZSwKKwkJCQkJIGdldF91c2Jfc3RhdG1zZygKKwkJCQkJICAgIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLnN0YXR1cykpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJbnVtYnl0ZXMgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5hY3R1YWxfbGVuZ3RoOwogCQkJaWYgKHVubGlrZWx5KG51bWJ5dGVzID4gQkFTX01BWEZSQU1FKSkgewotCQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiBudW1ieXRlcyAoJWQpID4gQkFTX01BWEZSQU1FIiwKLQkJCQkgICAgIGZyYW1lLCBudW1ieXRlcyk7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogIgorCQkJCQkgIm51bWJ5dGVzICglZCkgPiBCQVNfTUFYRlJBTUVcbiIsCisJCQkJCSBmcmFtZSwgbnVtYnl0ZXMpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKHVubGlrZWx5KG51bWJ5dGVzID4gdG90bGVmdCkpIHsKLQkJCQl3YXJuKCJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogbnVtYnl0ZXMgKCVkKSA+IHRvdGxlZnQgKCVkKSIsCi0JCQkJICAgICBmcmFtZSwgbnVtYnl0ZXMsIHRvdGxlZnQpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6ICIKKwkJCQkJICJudW1ieXRlcyAoJWQpID4gdG90bGVmdCAoJWQpXG4iLAorCQkJCQkgZnJhbWUsIG51bWJ5dGVzLCB0b3RsZWZ0KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW9mZnNldCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLm9mZnNldDsKIAkJCWlmICh1bmxpa2VseShvZmZzZXQgKyBudW1ieXRlcyA+IEJBU19JTkJVRlNJWkUpKSB7Ci0JCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6IG9mZnNldCAoJWQpICsgbnVtYnl0ZXMgKCVkKSA+IEJBU19JTkJVRlNJWkUiLAotCQkJCSAgICAgZnJhbWUsIG9mZnNldCwgbnVtYnl0ZXMpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6ICIKKwkJCQkJICJvZmZzZXQgKCVkKSArIG51bWJ5dGVzICglZCkgIgorCQkJCQkgIj4gQkFTX0lOQlVGU0laRVxuIiwKKwkJCQkJIGZyYW1lLCBvZmZzZXQsIG51bWJ5dGVzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWdpZ2FzZXRfaXNvY19yZWNlaXZlKHJjdmJ1ZiArIG9mZnNldCwgbnVtYnl0ZXMsIGJjcyk7CiAJCQl0b3RsZWZ0IC09IG51bWJ5dGVzOwogCQl9CiAJCWlmICh1bmxpa2VseSh0b3RsZWZ0ID4gMCkpCi0JCQl3YXJuKCJpc29jaHJvbm91cyByZWFkOiAlZCBkYXRhIGJ5dGVzIG1pc3NpbmciLAotCQkJICAgICB0b3RsZWZ0KTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJICJpc29jaHJvbm91cyByZWFkOiAlZCBkYXRhIGJ5dGVzIG1pc3NpbmdcbiIsCisJCQkJIHRvdGxlZnQpOwogCiAJZXJyb3I6CiAJCS8qIFVSQiBwcm9jZXNzZWQsIHJlc3VibWl0ICovCkBAIC0xMzE4LDEyICsxMzE2LDE1IEBACiAJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5zdGF0dXMgPSAwOwogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uYWN0dWFsX2xlbmd0aCA9IDA7CiAJCX0KLQkJdXJiLT5kZXYgPSBiY3MtPmNzLT5ody5iYXMtPnVkZXY7CS8qIGNsb2JiZXJlZCBieSBVU0Igc3Vic3lzdGVtICovCisJCS8qIHVyYi0+ZGV2IGlzIGNsb2JiZXJlZCBieSBVU0Igc3Vic3lzdGVtICovCisJCXVyYi0+ZGV2ID0gYmNzLT5jcy0+aHcuYmFzLT51ZGV2OwogCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOwogCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gQkFTX05VTUZSQU1FUzsKLQkJaWYgKChyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCQllcnIoImNvdWxkIG5vdCByZXN1Ym1pdCBpc29jaHJvbm91cyByZWFkIFVSQjogJXMiLAotCQkJICAgIGdldF91c2Jfc3RhdG1zZyhyYykpOworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOworCQlpZiAodW5saWtlbHkocmMgIT0gMCAmJiByYyAhPSAtRU5PREVWKSkgeworCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCSJjb3VsZCBub3QgcmVzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCBVUkI6ICVzXG4iLAorCQkJCWdldF91c2JfcmNtc2cocmMpKTsKIAkJCWR1bXBfdXJiKERFQlVHX0lTTywgInJlc3VibWl0IGlzbyByZWFkIiwgdXJiKTsKIAkJCWVycm9yX2hhbmd1cChiY3MpOwogCQl9CkBAIC0xMzQxLDE1ICsxMzQyLDEwIEBACiBzdGF0aWMgdm9pZCByZXFfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGJjX3N0YXRlICpiY3MgPSAoc3RydWN0IGJjX3N0YXRlICopIGRhdGE7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gYmNzLT5jcy0+aHcuYmFzOwogCWludCBwZW5kaW5nOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVQoYmNzKTsKLQlJRk5VTExSRVQoYmNzLT5jcyk7Ci0JdWNzID0gYmNzLT5jcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwotCiAJY2hlY2tfcGVuZGluZyh1Y3MpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVjcy0+bG9jaywgZmxhZ3MpOwpAQCAtMTM1OSwzMyArMTM1NSwzNCBAQAogCiAJc3dpdGNoIChwZW5kaW5nKSB7CiAJY2FzZSAwOgkJCQkJLyogbm8gcGVuZGluZyByZXF1ZXN0ICovCi0JCWRiZyhERUJVR19VU0JSRVEsICIlczogbm8gcmVxdWVzdCBwZW5kaW5nIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIiVzOiBubyByZXF1ZXN0IHBlbmRpbmciLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCiAJY2FzZSBIRF9PUEVOX0FUQ0hBTk5FTDoKLQkJZXJyKCJ0aW1lb3V0IG9wZW5pbmcgQVQgY2hhbm5lbCIpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgInRpbWVvdXQgb3BlbmluZyBBVCBjaGFubmVsXG4iKTsKIAkJZXJyb3JfcmVzZXQoYmNzLT5jcyk7CiAJCWJyZWFrOwogCiAJY2FzZSBIRF9PUEVOX0IyQ0hBTk5FTDoKIAljYXNlIEhEX09QRU5fQjFDSEFOTkVMOgotCQllcnIoInRpbWVvdXQgb3BlbmluZyBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsICsgMSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAidGltZW91dCBvcGVuaW5nIGNoYW5uZWwgJWRcbiIsCisJCQliY3MtPmNoYW5uZWwgKyAxKTsKIAkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCWJyZWFrOwogCiAJY2FzZSBIRF9DTE9TRV9BVENIQU5ORUw6Ci0JCWVycigidGltZW91dCBjbG9zaW5nIEFUIGNoYW5uZWwiKTsKLQkJLy93YWtlX3VwX2ludGVycnVwdGlibGUoY3MtPmluaXR3YWl0KTsKLQkJLy9GSVhNRSBuZWVkIG93biB3YWl0IHF1ZXVlPworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgInRpbWVvdXQgY2xvc2luZyBBVCBjaGFubmVsXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhEX0NMT1NFX0IyQ0hBTk5FTDoKIAljYXNlIEhEX0NMT1NFX0IxQ0hBTk5FTDoKLQkJZXJyKCJ0aW1lb3V0IGNsb3NpbmcgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCArIDEpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgInRpbWVvdXQgY2xvc2luZyBjaGFubmVsICVkXG4iLAorCQkJYmNzLT5jaGFubmVsICsgMSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJd2FybigicmVxdWVzdCAweCUwMnggdGltZWQgb3V0LCBjbGVhcmluZyIsIHBlbmRpbmcpOworCQlkZXZfd2FybihiY3MtPmNzLT5kZXYsICJyZXF1ZXN0IDB4JTAyeCB0aW1lZCBvdXQsIGNsZWFyaW5nXG4iLAorCQkJIHBlbmRpbmcpOwogCX0KIH0KIApAQCAtMTM5OCwxOCArMTM5NSwxNCBAQAogICovCiBzdGF0aWMgdm9pZCB3cml0ZV9jdHJsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVQodXJiKTsKLQlJRk5VTExSRVQodXJiLT5jb250ZXh0KTsKLQlJRk5VTExSRVQoY2FyZHN0YXRlKTsKLQotCXVjcyA9IChzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqKSB1cmItPmNvbnRleHQ7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVjcy0+bG9jaywgZmxhZ3MpOwogCWlmICh1cmItPnN0YXR1cyAmJiB1Y3MtPnBlbmRpbmcpIHsKLQkJZXJyKCJjb250cm9sIHJlcXVlc3QgMHglMDJ4IGZhaWxlZDogJXMiLAotCQkgICAgdWNzLT5wZW5kaW5nLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZGV2X2VycigmdWNzLT5pbnRlcmZhY2UtPmRldiwKKwkJCSJjb250cm9sIHJlcXVlc3QgMHglMDJ4IGZhaWxlZDogJXNcbiIsCisJCQl1Y3MtPnBlbmRpbmcsIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQlkZWxfdGltZXIoJnVjcy0+dGltZXJfY3RybCk7CiAJCXVjcy0+cGVuZGluZyA9IDA7CiAJfQpAQCAtMTQzMiwzNCArMTQyNSwyNCBAQAogICoJdGltZW91dAl0aW1lb3V0IGluIHNlY29uZHMgKDA6IG5vIHRpbWVvdXQpCiAgKiByZXR1cm4gdmFsdWU6CiAgKgkwIG9uIHN1Y2Nlc3MKLSAqCS1FSU5WQUwgaWYgYSBOVUxMIHBvaW50ZXIgaXMgZW5jb3VudGVyZWQgc29tZXdoZXJlCiAgKgktRUJVU1kgaWYgYW5vdGhlciByZXF1ZXN0IGlzIHBlbmRpbmcKICAqCWFueSBVUkIgc3VibWlzc2lvbiBlcnJvciBjb2RlCiAgKi8KIHN0YXRpYyBpbnQgcmVxX3N1Ym1pdChzdHJ1Y3QgYmNfc3RhdGUgKmJjcywgaW50IHJlcSwgaW50IHZhbCwgaW50IHRpbWVvdXQpCiB7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gYmNzLT5jcy0+aHcuYmFzOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVFZBTChiY3MsIC1FSU5WQUwpOwotCUlGTlVMTFJFVFZBTChiY3MtPmNzLCAtRUlOVkFMKTsKLQl1Y3MgPSBiY3MtPmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUVkFMKHVjcywgLUVJTlZBTCk7Ci0JSUZOVUxMUkVUVkFMKHVjcy0+dXJiX2N0cmwsIC1FSU5WQUwpOwotCi0JZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IDB4JTAyeCAoJWQpIiwgcmVxLCB2YWwpOworCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiLS0tLS0tLT4gMHglMDJ4ICglZCkiLCByZXEsIHZhbCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKHVjcy0+cGVuZGluZykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKLQkJZXJyKCJzdWJtaXNzaW9uIG9mIHJlcXVlc3QgMHglMDJ4IGZhaWxlZDogcmVxdWVzdCAweCUwMnggc3RpbGwgcGVuZGluZyIsCi0JCSAgICByZXEsIHVjcy0+cGVuZGluZyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCWlmICh1Y3MtPnVyYl9jdHJsLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVjcy0+bG9jaywgZmxhZ3MpOwotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgcmVxdWVzdCAweCUwMng6IFVSQiBidXN5IiwgcmVxKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkic3VibWlzc2lvbiBvZiByZXF1ZXN0IDB4JTAyeCBmYWlsZWQ6ICIKKwkJCSJyZXF1ZXN0IDB4JTAyeCBzdGlsbCBwZW5kaW5nXG4iLAorCQkJcmVxLCB1Y3MtPnBlbmRpbmcpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMTQ2OSwxOSArMTQ1MiwxOSBAQAogCXVjcy0+ZHJfY3RybC53SW5kZXggPSAwOwogCXVjcy0+ZHJfY3RybC53TGVuZ3RoID0gMDsKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1Y3MtPnVyYl9jdHJsLCB1Y3MtPnVkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZSh1Y3MtPnVkZXYsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopICZ1Y3MtPmRyX2N0cmwsIE5VTEwsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2N0cmxfY2FsbGJhY2ssIHVjcyk7CisJCQkgICAgIHVzYl9zbmRjdHJscGlwZSh1Y3MtPnVkZXYsIDApLAorCQkJICAgICAodW5zaWduZWQgY2hhciopICZ1Y3MtPmRyX2N0cmwsIE5VTEwsIDAsCisJCQkgICAgIHdyaXRlX2N0cmxfY2FsbGJhY2ssIHVjcyk7CiAJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9jdHJsLCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHJlcXVlc3QgMHglMDJ4OiAlcyIsCi0JCSAgICByZXEsIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IHJlcXVlc3QgMHglMDJ4OiAlc1xuIiwKKwkJCXJlcSwgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJdWNzLT5wZW5kaW5nID0gcmVxOwogCiAJaWYgKHRpbWVvdXQgPiAwKSB7Ci0JCWRiZyhERUJVR19VU0JSRVEsICJzZXR0aW5nIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIHRpbWVvdXQpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgInNldHRpbmcgdGltZW91dCBvZiAlZC8xMCBzZWNzIiwgdGltZW91dCk7CiAJCXVjcy0+dGltZXJfY3RybC5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQgKiBIWiAvIDEwOwogCQl1Y3MtPnRpbWVyX2N0cmwuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBiY3M7CiAJCXVjcy0+dGltZXJfY3RybC5mdW5jdGlvbiA9IHJlcV90aW1lb3V0OwpAQCAtMTUwMywyMyArMTQ4NiwzNiBAQAogc3RhdGljIGludCBnaWdhc2V0X2luaXRfYmNoYW5uZWwoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CiAJaW50IHJlcSwgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCAtRUlOVkFMKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseSghYmNzLT5jcy0+Y29ubmVjdGVkKSkgeworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIiVzOiBub3QgY29ubmVjdGVkIiwgX19mdW5jX18pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCWlmICgocmV0ID0gc3RhcnR1cmJzKGJjcykpIDwgMCkgewotCQllcnIoImNvdWxkIG5vdCBzdGFydCBpc29jaHJvbm91cyBJL08gZm9yIGNoYW5uZWwgJWQiLAotCQkgICAgYmNzLT5jaGFubmVsICsgMSk7Ci0JCWVycm9yX2hhbmd1cChiY3MpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwKKwkJCSJjb3VsZCBub3Qgc3RhcnQgaXNvY2hyb25vdXMgSS9PIGZvciBjaGFubmVsIEIlZDogJXNcbiIsCisJCQliY3MtPmNoYW5uZWwgKyAxLAorCQkJcmV0ID09IC1FRkFVTFQgPyAibnVsbCBVUkIiIDogZ2V0X3VzYl9yY21zZyhyZXQpKTsKKwkJaWYgKHJldCAhPSAtRU5PREVWKQorCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXEgPSBiY3MtPmNoYW5uZWwgPyBIRF9PUEVOX0IyQ0hBTk5FTCA6IEhEX09QRU5fQjFDSEFOTkVMOwogCWlmICgocmV0ID0gcmVxX3N1Ym1pdChiY3MsIHJlcSwgMCwgQkFTX1RJTUVPVVQpKSA8IDApIHsKLQkJZXJyKCJjb3VsZCBub3Qgb3BlbiBjaGFubmVsICVkOiAlcyIsCi0JCSAgICBiY3MtPmNoYW5uZWwgKyAxLCBnZXRfdXNiX3N0YXRtc2cocmV0KSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IG9wZW4gY2hhbm5lbCBCJWRcbiIsCisJCQliY3MtPmNoYW5uZWwgKyAxKTsKIAkJc3RvcHVyYnMoYmNzLT5ody5iYXMpOwotCQllcnJvcl9oYW5ndXAoYmNzKTsKKwkJaWYgKHJldCAhPSAtRU5PREVWKQorCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1MzYsMjAgKzE1MzIsMzAgQEAKIHN0YXRpYyBpbnQgZ2lnYXNldF9jbG9zZV9iY2hhbm5lbChzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKIAlpbnQgcmVxLCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVFZBTChiY3MsIC1FSU5WQUwpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KCFiY3MtPmNzLT5jb25uZWN0ZWQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogbm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJaWYgKCEoYXRvbWljX3JlYWQoJmJjcy0+Y3MtPmh3LmJhcy0+YmFzc3RhdGUpICYKIAkgICAgICAoYmNzLT5jaGFubmVsID8gQlNfQjJPUEVOIDogQlNfQjFPUEVOKSkpIHsKIAkJLyogY2hhbm5lbCBub3QgcnVubmluZzoganVzdCBzaWduYWwgY29tbW9uLmMgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCQlnaWdhc2V0X2JjaGFubmVsX2Rvd24oYmNzKTsKIAkJcmV0dXJuIDA7CiAJfQogCisJLyogY2hhbm5lbCBydW5uaW5nOiB0ZWxsIGRldmljZSB0byBjbG9zZSBpdCAqLwogCXJlcSA9IGJjcy0+Y2hhbm5lbCA/IEhEX0NMT1NFX0IyQ0hBTk5FTCA6IEhEX0NMT1NFX0IxQ0hBTk5FTDsKIAlpZiAoKHJldCA9IHJlcV9zdWJtaXQoYmNzLCByZXEsIDAsIEJBU19USU1FT1VUKSkgPCAwKQotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgSERfQ0xPU0VfQnhDSEFOTkVMIHJlcXVlc3Q6ICVzIiwKLQkJICAgIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJjbG9zaW5nIGNoYW5uZWwgQiVkIGZhaWxlZFxuIiwKKwkJCWJjcy0+Y2hhbm5lbCArIDEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1NjQsMTcgKzE1NzAsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgY29tcGxldGVfY2Ioc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0Jc3RydWN0IGNtZGJ1Zl90ICpjYjsKLQotCUlGTlVMTFJFVChjcyk7Ci0JY2IgPSBjcy0+Y21kYnVmOwotCUlGTlVMTFJFVChjYik7CisJc3RydWN0IGNtZGJ1Zl90ICpjYiA9IGNzLT5jbWRidWY7CiAKIAkvKiB1bnF1ZXVlIGNvbXBsZXRlZCBidWZmZXIgKi8KIAljcy0+Y21kYnl0ZXMgLT0gY3MtPmN1cmxlbjsKLQlkYmcoREVCVUdfVFJBTlNDTUQgfCBERUJVR19MT0NLQ01ELAotCSAgICAid3JpdGVfY29tbWFuZDogc2VudCAldSBieXRlcywgJXUgbGVmdCIsCi0JICAgIGNzLT5jdXJsZW4sIGNzLT5jbWRieXRlcyk7CisJZ2lnX2RiZyhERUJVR19UUkFOU0NNRHxERUJVR19MT0NLQ01ELAorCQkid3JpdGVfY29tbWFuZDogc2VudCAldSBieXRlcywgJXUgbGVmdCIsCisJCWNzLT5jdXJsZW4sIGNzLT5jbWRieXRlcyk7CiAJaWYgKChjcy0+Y21kYnVmID0gY2ItPm5leHQpICE9IE5VTEwpIHsKIAkJY3MtPmNtZGJ1Zi0+cHJldiA9IE5VTEw7CiAJCWNzLT5jdXJsZW4gPSBjcy0+Y21kYnVmLT5sZW47CkBAIC0xNTg5LDggKzE1OTEsNiBAQAogCWtmcmVlKGNiKTsKIH0KIAotc3RhdGljIGludCBhdHdyaXRlX3N1Ym1pdChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKLQogLyogd3JpdGVfY29tbWFuZF9jYWxsYmFjawogICogVVNCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgQVQgY29tbWFuZCB0cmFuc21pc3Npb24KICAqIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBpbiBpbnRlcnJ1cHQgY29udGV4dApAQCAtMTYwMCw0MCArMTYwMCw0MyBAQAogICovCiBzdGF0aWMgdm9pZCB3cml0ZV9jb21tYW5kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOwogCi0JSUZOVUxMUkVUKHVyYik7Ci0JY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKGNzKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOworCXVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIDAsIEJTX0FUV1JQRU5EKTsKIAogCS8qIGNoZWNrIHN0YXR1cyAqLwogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CQkJCQkvKiBub3JtYWwgY29tcGxldGlvbiAqLwogCQlicmVhazsKLQljYXNlIC1FTk9FTlQ6CQkJLyogY2FuY2VsZWQgKi8KLQljYXNlIC1FQ09OTlJFU0VUOgkJLyogY2FuY2VsZWQgKGFzeW5jKSAqLworCWNhc2UgLUVOT0VOVDoJCQkvKiBjYW5jZWxsZWQgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkJLyogY2FuY2VsbGVkIChhc3luYykgKi8KIAljYXNlIC1FSU5QUk9HUkVTUzoJCS8qIHBlbmRpbmcgKi8KKwljYXNlIC1FTk9ERVY6CQkJLyogZGV2aWNlIHJlbW92ZWQgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkZXZpY2Ugc2h1dCBkb3duICovCiAJCS8qIGlnbm9yZSBzaWxlbnRseSAqLwotCQlkYmcoREVCVUdfVVNCUkVRLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogJXMiLAorCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoJCQkJLyogYW55IGZhaWx1cmUgKi8KIAkJaWYgKCsrdWNzLT5yZXRyeV9jbWRfb3V0ID4gQkFTX1JFVFJZKSB7Ci0JCQl3YXJuKCJjb21tYW5kIHdyaXRlOiAlcywgZ2l2aW5nIHVwIGFmdGVyICVkIHJldHJpZXMiLAotCQkJICAgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpLCB1Y3MtPnJldHJ5X2NtZF9vdXQpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgImNvbW1hbmQgd3JpdGU6ICVzLCAiCisJCQkJICJnaXZpbmcgdXAgYWZ0ZXIgJWQgcmV0cmllc1xuIiwKKwkJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSwKKwkJCQkgdWNzLT5yZXRyeV9jbWRfb3V0KTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChjcy0+Y21kYnVmID09IE5VTEwpIHsKLQkJCXdhcm4oImNvbW1hbmQgd3JpdGU6ICVzLCBjYW5ub3QgcmV0cnkgLSBjbWRidWYgZ29uZSIsCi0JCQkgICAgIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgImNvbW1hbmQgd3JpdGU6ICVzLCAiCisJCQkJICJjYW5ub3QgcmV0cnkgLSBjbWRidWYgZ29uZVxuIiwKKwkJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCQlicmVhazsKIAkJfQotCQlub3RpY2UoImNvbW1hbmQgd3JpdGU6ICVzLCByZXRyeSAlZCIsCi0JCSAgICAgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpLCB1Y3MtPnJldHJ5X2NtZF9vdXQpOworCQlkZXZfbm90aWNlKGNzLT5kZXYsICJjb21tYW5kIHdyaXRlOiAlcywgcmV0cnkgJWRcbiIsCisJCQkgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpLCB1Y3MtPnJldHJ5X2NtZF9vdXQpOwogCQlpZiAoYXR3cml0ZV9zdWJtaXQoY3MsIGNzLT5jbWRidWYtPmJ1ZiwgY3MtPmNtZGJ1Zi0+bGVuKSA+PSAwKQogCQkJLyogcmVzdWJtaXR0ZWQgLSBieXBhc3MgcmVndWxhciBleGl0IGJsb2NrICovCiAJCQlyZXR1cm47CkBAIC0xNjU1LDEzICsxNjU4LDkgQEAKIHN0YXRpYyB2b2lkIGF0cmR5X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgZGF0YTsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCi0JSUZOVUxMUkVUKGNzKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwotCi0Jd2FybigidGltZW91dCB3YWl0aW5nIGZvciBIRF9SRUFEWV9TRU5EX0FUREFUQSIpOworCWRldl93YXJuKGNzLT5kZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9yIEhEX1JFQURZX1NFTkRfQVREQVRBXG4iKTsKIAogCS8qIGZha2UgdGhlIG1pc3Npbmcgc2lnbmFsIC0gd2hhdCBlbHNlIGNhbiBJIGRvPyAqLwogCXVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIEJTX0FUUkVBRFksIEJTX0FUVElNRVIpOwpAQCAtMTY3NiwyNCArMTY3NSwxOSBAQAogICoJbGVuCWxlbmd0aCBvZiBjb21tYW5kIHRvIHNlbmQKICAqIHJldHVybiB2YWx1ZToKICAqCTAgb24gc3VjY2VzcwotICoJLUVGQVVMVCBpZiBhIE5VTEwgcG9pbnRlciBpcyBlbmNvdW50ZXJlZCBzb21ld2hlcmUKICAqCS1FQlVTWSBpZiBhbm90aGVyIHJlcXVlc3QgaXMgcGVuZGluZwogICoJYW55IFVSQiBzdWJtaXNzaW9uIGVycm9yIGNvZGUKICAqLwogc3RhdGljIGludCBhdHdyaXRlX3N1Ym1pdChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQogewotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKKwlpbnQgcmM7CiAKLQlJRk5VTExSRVRWQUwoY3MsIC1FRkFVTFQpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUVkFMKHVjcywgLUVGQVVMVCk7Ci0JSUZOVUxMUkVUVkFMKHVjcy0+dXJiX2NtZF9vdXQsIC1FRkFVTFQpOworCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiLS0tLS0tLT4gSERfV1JJVEVfQVRNRVNTQUdFICglZCkiLCBsZW4pOwogCi0JZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IEhEX1dSSVRFX0FUTUVTU0FHRSAoJWQpIiwgbGVuKTsKLQotCWlmICh1Y3MtPnVyYl9jbWRfb3V0LT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCBIRF9XUklURV9BVE1FU1NBR0U6IFVSQiBidXN5Iik7CisJaWYgKHVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIEJTX0FUV1JQRU5ELCAwKSAmIEJTX0FUV1JQRU5EKSB7CisJCWRldl9lcnIoY3MtPmRldiwKKwkJCSJjb3VsZCBub3Qgc3VibWl0IEhEX1dSSVRFX0FUTUVTU0FHRTogVVJCIGJ1c3lcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMTcwNiwyNSArMTcwMCwyMiBAQAogCQkJICAgICB1c2Jfc25kY3RybHBpcGUodWNzLT51ZGV2LCAwKSwKIAkJCSAgICAgKHVuc2lnbmVkIGNoYXIqKSAmdWNzLT5kcl9jbWRfb3V0LCBidWYsIGxlbiwKIAkJCSAgICAgd3JpdGVfY29tbWFuZF9jYWxsYmFjaywgY3MpOwotCi0JaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9jbWRfb3V0LCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IEhEX1dSSVRFX0FUTUVTU0FHRTogJXMiLAotCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOwotCQlyZXR1cm4gcmV0OworCXJjID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfY21kX291dCwgU0xBQl9BVE9NSUMpOworCWlmICh1bmxpa2VseShyYykpIHsKKwkJdXBkYXRlX2Jhc3N0YXRlKHVjcywgMCwgQlNfQVRXUlBFTkQpOworCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IEhEX1dSSVRFX0FUTUVTU0FHRTogJXNcbiIsCisJCQlnZXRfdXNiX3JjbXNnKHJjKSk7CisJCXJldHVybiByYzsKIAl9CiAKLQkvKiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5ICovCi0JdXBkYXRlX2Jhc3N0YXRlKHVjcywgMCwgQlNfQVRSRUFEWSk7Ci0KLQkvKiBzdGFydCB0aW1lb3V0IGlmIG5lY2Vzc2FyeSAqLwotCWlmICghKGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKSAmIEJTX0FUVElNRVIpKSB7Ci0JCWRiZyhERUJVR19PVVRQVVQsCi0JCSAgICAic2V0dGluZyBBVFJFQURZIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIEFUUkRZX1RJTUVPVVQpOworCS8qIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHksIHN0YXJ0IHRpbWVvdXQgaWYgbmVjZXNzYXJ5ICovCisJaWYgKCEodXBkYXRlX2Jhc3N0YXRlKHVjcywgQlNfQVRUSU1FUiwgQlNfQVRSRUFEWSkgJiBCU19BVFRJTUVSKSkgeworCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgInNldHRpbmcgQVRSRUFEWSB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLAorCQkJQVRSRFlfVElNRU9VVCk7CiAJCXVjcy0+dGltZXJfYXRyZHkuZXhwaXJlcyA9IGppZmZpZXMgKyBBVFJEWV9USU1FT1VUICogSFogLyAxMDsKIAkJdWNzLT50aW1lcl9hdHJkeS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGNzOwogCQl1Y3MtPnRpbWVyX2F0cmR5LmZ1bmN0aW9uID0gYXRyZHlfdGltZW91dDsKIAkJYWRkX3RpbWVyKCZ1Y3MtPnRpbWVyX2F0cmR5KTsKLQkJdXBkYXRlX2Jhc3N0YXRlKHVjcywgQlNfQVRUSU1FUiwgMCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTc0MCwyMSArMTczMSwxNiBAQAogc3RhdGljIGludCBzdGFydF9jYnNlbmQoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7CiAJc3RydWN0IGNtZGJ1Zl90ICpjYjsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwogCWludCByZXR2YWwgPSAwOwogCi0JSUZOVUxMUkVUVkFMKGNzLCAtRUZBVUxUKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1Y3MsIC1FRkFVTFQpOwotCiAJLyogY2hlY2sgaWYgQVQgY2hhbm5lbCBpcyBvcGVuICovCiAJaWYgKCEoYXRvbWljX3JlYWQoJnVjcy0+YmFzc3RhdGUpICYgQlNfQVRPUEVOKSkgewotCQlkYmcoREVCVUdfVFJBTlNDTUQgfCBERUJVR19MT0NLQ01ELCAiQVQgY2hhbm5lbCBub3Qgb3BlbiIpOworCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01EfERFQlVHX0xPQ0tDTUQsICJBVCBjaGFubmVsIG5vdCBvcGVuIik7CiAJCXJjID0gcmVxX3N1Ym1pdChjcy0+YmNzLCBIRF9PUEVOX0FUQ0hBTk5FTCwgMCwgQkFTX1RJTUVPVVQpOwogCQlpZiAocmMgPCAwKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBvcGVuIEFUIGNoYW5uZWwiKTsKIAkJCS8qIGZsdXNoIGNvbW1hbmQgcXVldWUgKi8KIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwogCQkJd2hpbGUgKGNzLT5jbWRidWYgIT0gTlVMTCkKQEAgLTE3OTIsMjcgKzE3NzgsMjMgQEAKICAqCWNzCQljb250cm9sbGVyIHN0YXRlIHN0cnVjdHVyZQogICoJYnVmCQljb21tYW5kIHN0cmluZyB0byBzZW5kCiAgKglsZW4JCW51bWJlciBvZiBieXRlcyB0byBzZW5kIChtYXguIElGX1dSSVRFQlVGKQotICoJd2FrZV90YXNrbGV0CXRhc2tsZXQgdG8gcnVuIHdoZW4gdHJhbnNtaXNzaW9uIGlzIGNvbXBsZXRlZCAoTlVMTCBpZiBub25lKQorICoJd2FrZV90YXNrbGV0CXRhc2tsZXQgdG8gcnVuIHdoZW4gdHJhbnNtaXNzaW9uIGlzIGNvbXBsZXRlZAorICoJCQkoTlVMTCBpZiBub25lKQogICogcmV0dXJuIHZhbHVlOgogICoJbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBvbiBzdWNjZXNzCiAgKgllcnJvciBjb2RlIDwgMCBvbiBlcnJvcgogICovCiBzdGF0aWMgaW50IGdpZ2FzZXRfd3JpdGVfY21kKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KQorCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCisJCQkgICAgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KQogewogCXN0cnVjdCBjbWRidWZfdCAqY2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzOwogCiAJZ2lnYXNldF9kYmdfYnVmZmVyKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQgPwotCSAgICAgICAgICAgICAgICAgICAgIERFQlVHX1RSQU5TQ01EIDogREVCVUdfTE9DS0NNRCwKLQkgICAgICAgICAgICAgICAgICAgIkNNRCBUcmFuc21pdCIsIGxlbiwgYnVmLCAwKTsKLQotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigiJXM6IG5vdCBjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwkJCSAgICAgREVCVUdfVFJBTlNDTUQgOiBERUJVR19MT0NLQ01ELAorCQkJICAgIkNNRCBUcmFuc21pdCIsIGxlbiwgYnVmKTsKIAogCWlmIChsZW4gPD0gMCkKIAkJcmV0dXJuIDA7CQkJLyogbm90aGluZyB0byBkbyAqLwpAQCAtMTgyMCw3ICsxODAyLDcgQEAKIAlpZiAobGVuID4gSUZfV1JJVEVCVUYpCiAJCWxlbiA9IElGX1dSSVRFQlVGOwogCWlmICghKGNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZGJ1Zl90KSArIGxlbiwgR0ZQX0FUT01JQykpKSB7Ci0JCWVycigiJXM6IG91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTg0MiwxNCArMTgyNCwyMSBAQAogCWNzLT5sYXN0Y21kYnVmID0gY2I7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseSghY3MtPmNvbm5lY3RlZCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogbm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCXN0YXR1cyA9IHN0YXJ0X2Nic2VuZChjcyk7Ci0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0dXMgPCAwID8gc3RhdHVzIDogbGVuOwogfQogCiAvKiBnaWdhc2V0X3dyaXRlX3Jvb20KICAqIHR0eV9kcml2ZXIud3JpdGVfcm9vbSBpbnRlcmZhY2Ugcm91dGluZQotICogcmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoZSBkcml2ZXIgd2lsbCBhY2NlcHQgdG8gYmUgd3JpdHRlbiB2aWEgZ2lnYXNldF93cml0ZV9jbWQKKyAqIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGUgZHJpdmVyIHdpbGwgYWNjZXB0IHRvIGJlIHdyaXR0ZW4gdmlhCisgKiBnaWdhc2V0X3dyaXRlX2NtZAogICogcGFyYW1ldGVyOgogICoJY29udHJvbGxlciBzdGF0ZSBzdHJ1Y3R1cmUKICAqIHJldHVybiB2YWx1ZToKQEAgLTE5MDQsMTIgKzE4OTMsMzIgQEAKICAqLwogc3RhdGljIGludCBnaWdhc2V0X2ZyZWViY3NodyhzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKLQlpZiAoIWJjcy0+aHcuYmFzKQorCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYyA9IGJjcy0+aHcuYmFzOworCWludCBpOworCisJaWYgKCF1YmMpCiAJCXJldHVybiAwOwogCi0JaWYgKGJjcy0+aHcuYmFzLT5pc29vdXRidWYpCi0JCWtmcmVlKGJjcy0+aHcuYmFzLT5pc29vdXRidWYpOwotCWtmcmVlKGJjcy0+aHcuYmFzKTsKKwkvKiBraWxsIFVSQnMgYW5kIHRhc2tsZXRzIGJlZm9yZSBmcmVlaW5nIC0gYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSAqLworCWF0b21pY19zZXQoJnViYy0+cnVubmluZywgMCk7CisJZm9yIChpID0gMDsgaSA8IEJBU19PVVRVUkJTOyArK2kpCisJCWlmICh1YmMtPmlzb291dHVyYnNbaV0udXJiKSB7CisJCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczoga2lsbGluZyBpc28gb3V0IFVSQiAlZCIsCisJCQkJX19mdW5jX18sIGkpOworCQkJdXNiX2tpbGxfdXJiKHViYy0+aXNvb3V0dXJic1tpXS51cmIpOworCQkJdXNiX2ZyZWVfdXJiKHViYy0+aXNvb3V0dXJic1tpXS51cmIpOworCQl9CisJZm9yIChpID0gMDsgaSA8IEJBU19JTlVSQlM7ICsraSkKKwkJaWYgKHViYy0+aXNvaW51cmJzW2ldKSB7CisJCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczoga2lsbGluZyBpc28gaW4gVVJCICVkIiwKKwkJCQlfX2Z1bmNfXywgaSk7CisJCQl1c2Jfa2lsbF91cmIodWJjLT5pc29pbnVyYnNbaV0pOworCQkJdXNiX2ZyZWVfdXJiKHViYy0+aXNvaW51cmJzW2ldKTsKKwkJfQorCXRhc2tsZXRfa2lsbCgmdWJjLT5zZW50X3Rhc2tsZXQpOworCXRhc2tsZXRfa2lsbCgmdWJjLT5yY3ZkX3Rhc2tsZXQpOworCWtmcmVlKHViYy0+aXNvb3V0YnVmKTsKKwlrZnJlZSh1YmMpOwogCWJjcy0+aHcuYmFzID0gTlVMTDsKIAlyZXR1cm4gMTsKIH0KQEAgLTE5NDcsNyArMTk1Niw3IEBACiAJCXJldHVybiAwOwogCX0KIAl0YXNrbGV0X2luaXQoJnViYy0+c2VudF90YXNrbGV0LAotCSAgICAgICAgICAgICAmd3JpdGVfaXNvX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKSBiY3MpOworCQkgICAgICZ3cml0ZV9pc29fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGJjcyk7CiAKIAlzcGluX2xvY2tfaW5pdCgmdWJjLT5pc29pbmxvY2spOwogCWZvciAoaSA9IDA7IGkgPCBCQVNfSU5VUkJTOyArK2kpCkBAIC0xOTY4LDcgKzE5NzcsNyBAQAogCXViYy0+c2hhcmVkMHMgPSAwOwogCXViYy0+c3RvbGVuMHMgPSAwOwogCXRhc2tsZXRfaW5pdCgmdWJjLT5yY3ZkX3Rhc2tsZXQsCi0JICAgICAgICAgICAgICZyZWFkX2lzb190YXNrbGV0LCAodW5zaWduZWQgbG9uZykgYmNzKTsKKwkJICAgICAmcmVhZF9pc29fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGJjcyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE5ODYsMTMgKzE5OTUsOSBAQAogCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2ZyZWVjc2h3KHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwotCi0JZGVsX3RpbWVyKCZ1Y3MtPnRpbWVyX2N0cmwpOwotCWRlbF90aW1lcigmdWNzLT50aW1lcl9hdHJkeSk7Ci0JZGVsX3RpbWVyKCZ1Y3MtPnRpbWVyX2NtZF9pbik7Ci0KKwkvKiB0aW1lcnMsIFVSQnMgYW5kIHJjdmJ1ZiBhcmUgZGlzcG9zZWQgb2YgaW4gZGlzY29ubmVjdCAqLwogCWtmcmVlKGNzLT5ody5iYXMpOworCWNzLT5ody5iYXMgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGdpZ2FzZXRfaW5pdGNzaHcoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCkBAIC0yMDI3LDU3ICsyMDMyLDU2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZyZWV1cmJzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwogCWludCBpLCBqOwogCi0JSUZOVUxMUkVUKGNzKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwotCiAJZm9yIChqID0gMDsgaiA8IDI7ICsraikgewogCQl1YmMgPSBjcy0+YmNzW2pdLmh3LmJhczsKLQkJSUZOVUxMQ09OVCh1YmMpOwogCQlmb3IgKGkgPSAwOyBpIDwgQkFTX09VVFVSQlM7ICsraSkKIAkJCWlmICh1YmMtPmlzb291dHVyYnNbaV0udXJiKSB7CiAJCQkJdXNiX2tpbGxfdXJiKHViYy0+aXNvb3V0dXJic1tpXS51cmIpOwotCQkJCWRiZyhERUJVR19JTklULAotCQkJCSAgICAiJXM6IGlzb2Mgb3V0cHV0IFVSQiAlZC8lZCB1bmxpbmtlZCIsCi0JCQkJICAgIF9fZnVuY19fLCBqLCBpKTsKKwkJCQlnaWdfZGJnKERFQlVHX0lOSVQsCisJCQkJCSIlczogaXNvYyBvdXRwdXQgVVJCICVkLyVkIHVubGlua2VkIiwKKwkJCQkJX19mdW5jX18sIGosIGkpOwogCQkJCXVzYl9mcmVlX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKIAkJCQl1YmMtPmlzb291dHVyYnNbaV0udXJiID0gTlVMTDsKIAkJCX0KIAkJZm9yIChpID0gMDsgaSA8IEJBU19JTlVSQlM7ICsraSkKIAkJCWlmICh1YmMtPmlzb2ludXJic1tpXSkgewogCQkJCXVzYl9raWxsX3VyYih1YmMtPmlzb2ludXJic1tpXSk7Ci0JCQkJZGJnKERFQlVHX0lOSVQsCi0JCQkJICAgICIlczogaXNvYyBpbnB1dCBVUkIgJWQvJWQgdW5saW5rZWQiLAotCQkJCSAgICBfX2Z1bmNfXywgaiwgaSk7CisJCQkJZ2lnX2RiZyhERUJVR19JTklULAorCQkJCQkiJXM6IGlzb2MgaW5wdXQgVVJCICVkLyVkIHVubGlua2VkIiwKKwkJCQkJX19mdW5jX18sIGosIGkpOwogCQkJCXVzYl9mcmVlX3VyYih1YmMtPmlzb2ludXJic1tpXSk7CiAJCQkJdWJjLT5pc29pbnVyYnNbaV0gPSBOVUxMOwogCQkJfQogCX0KIAlpZiAodWNzLT51cmJfaW50X2luKSB7CiAJCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9pbnRfaW4pOwotCQlkYmcoREVCVUdfSU5JVCwgIiVzOiBpbnRlcnJ1cHQgaW5wdXQgVVJCIHVubGlua2VkIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogaW50ZXJydXB0IGlucHV0IFVSQiB1bmxpbmtlZCIsCisJCQlfX2Z1bmNfXyk7CiAJCXVzYl9mcmVlX3VyYih1Y3MtPnVyYl9pbnRfaW4pOwogCQl1Y3MtPnVyYl9pbnRfaW4gPSBOVUxMOwogCX0KIAlpZiAodWNzLT51cmJfY21kX291dCkgewogCQl1c2Jfa2lsbF91cmIodWNzLT51cmJfY21kX291dCk7Ci0JCWRiZyhERUJVR19JTklULCAiJXM6IGNvbW1hbmQgb3V0cHV0IFVSQiB1bmxpbmtlZCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGNvbW1hbmQgb3V0cHV0IFVSQiB1bmxpbmtlZCIsCisJCQlfX2Z1bmNfXyk7CiAJCXVzYl9mcmVlX3VyYih1Y3MtPnVyYl9jbWRfb3V0KTsKIAkJdWNzLT51cmJfY21kX291dCA9IE5VTEw7CiAJfQogCWlmICh1Y3MtPnVyYl9jbWRfaW4pIHsKIAkJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2NtZF9pbik7Ci0JCWRiZyhERUJVR19JTklULCAiJXM6IGNvbW1hbmQgaW5wdXQgVVJCIHVubGlua2VkIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogY29tbWFuZCBpbnB1dCBVUkIgdW5saW5rZWQiLAorCQkJX19mdW5jX18pOwogCQl1c2JfZnJlZV91cmIodWNzLT51cmJfY21kX2luKTsKIAkJdWNzLT51cmJfY21kX2luID0gTlVMTDsKIAl9CiAJaWYgKHVjcy0+dXJiX2N0cmwpIHsKIAkJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2N0cmwpOwotCQlkYmcoREVCVUdfSU5JVCwgIiVzOiBjb250cm9sIG91dHB1dCBVUkIgdW5saW5rZWQiLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgIiVzOiBjb250cm9sIG91dHB1dCBVUkIgdW5saW5rZWQiLAorCQkJX19mdW5jX18pOwogCQl1c2JfZnJlZV91cmIodWNzLT51cmJfY3RybCk7CiAJCXVjcy0+dXJiX2N0cmwgPSBOVUxMOwogCX0KQEAgLTIwOTcsMzUgKzIxMDEsMjQgQEAKIAlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmM7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKIAlpbnQgaSwgajsKLQlpbnQgcmV0OworCWludCByYzsKIAotCUlGTlVMTFJFVFZBTCh1ZGV2LCAtRU5PREVWKTsKLQotCWRiZyhERUJVR19BTlksCi0JICAgICIlczogQ2hlY2sgaWYgZGV2aWNlIG1hdGNoZXMgLi4gKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleCkiLAotCSAgICBfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7Ci0KLQkvKiBTZWUgaWYgdGhlIGRldmljZSBvZmZlcmVkIHVzIG1hdGNoZXMgd2hhdCB3ZSBjYW4gYWNjZXB0ICovCi0JaWYgKChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAgIT0gVVNCX0dJR0FfVkVORE9SX0lEKSB8fAotCSAgICAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9HSUdBX1BST0RVQ1RfSUQgJiYKLQkgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfNDE3NV9QUk9EVUNUX0lEICYmCi0JICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX1NYMzAzX1BST0RVQ1RfSUQgJiYKLQkgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfU1gzNTNfUFJPRFVDVF9JRCkpIHsKLQkJZGJnKERFQlVHX0FOWSwgIiVzOiB1bm1hdGNoZWQgSUQgLSBleGl0aW5nIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJZ2lnX2RiZyhERUJVR19BTlksCisJCSIlczogQ2hlY2sgaWYgZGV2aWNlIG1hdGNoZXMgLi4gKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleCkiLAorCQlfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAKIAkvKiBzZXQgcmVxdWlyZWQgYWx0ZXJuYXRlIHNldHRpbmcgKi8KIAlob3N0aWYgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOwogCWlmIChob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcgIT0gMykgewotCQlkYmcoREVCVUdfQU5ZLAotCQkgICAgIiVzOiB3cm9uZyBhbHRlcm5hdGUgc2V0dGluZyAlZCAtIHRyeWluZyB0byBzd2l0Y2giLAotCQkgICAgX19mdW5jX18sIGhvc3RpZi0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkJIiVzOiB3cm9uZyBhbHRlcm5hdGUgc2V0dGluZyAlZCAtIHRyeWluZyB0byBzd2l0Y2giLAorCQkJX19mdW5jX18sIGhvc3RpZi0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CiAJCWlmICh1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBob3N0aWYtPmRlc2MuYkludGVyZmFjZU51bWJlciwgMykgPCAwKSB7Ci0JCQl3YXJuKCJ1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsIGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCIsCi0JCQkgICAgIHVkZXYtPmRldm51bSwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCi0JCQkgICAgIGhvc3RpZi0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCQlkZXZfd2FybigmdWRldi0+ZGV2LCAidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkLCAiCisJCQkJICJkZXZpY2UgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWRcbiIsCisJCQkJIHVkZXYtPmRldm51bSwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJIGhvc3RpZi0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQlob3N0aWYgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOwpAQCAtMjEzNCw2OCArMjEyNyw1MCBAQAogCS8qIFJlamVjdCBhcHBsaWNhdGlvbiBzcGVjaWZpYyBpbnRlcmZhY2VzCiAJICovCiAJaWYgKGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMjU1KSB7Ci0JCXdhcm4oIiVzOiBiSW50ZXJmYWNlQ2xhc3MgPT0gJWQiLAotCQkgICAgIF9fZnVuY19fLCBob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzKTsKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIiVzOiBiSW50ZXJmYWNlQ2xhc3MgPT0gJWRcbiIsCisJCQkgX19mdW5jX18sIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCIlczogRGV2aWNlIG1hdGNoZWQgKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleCkiLAotCSAgICAgX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAotCSAgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwlkZXZfaW5mbygmdWRldi0+ZGV2LAorCQkgIiVzOiBEZXZpY2UgbWF0Y2hlZCAoVmVuZG9yOiAweCV4LCBQcm9kdWN0OiAweCV4KVxuIiwKKwkJIF9fZnVuY19fLCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAKIAljcyA9IGdpZ2FzZXRfZ2V0dW5hc3NpZ25lZGNzKGRyaXZlcik7CiAJaWYgKCFjcykgewotCQllcnIoIiVzOiBubyBmcmVlIGNhcmRzdGF0ZSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAibm8gZnJlZSBjYXJkc3RhdGVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJdWNzID0gY3MtPmh3LmJhczsKKworCS8qIHNhdmUgb2ZmIGRldmljZSBzdHJ1Y3R1cmUgcHRycyBmb3IgbGF0ZXIgdXNlICovCisJdXNiX2dldF9kZXYodWRldik7CiAJdWNzLT51ZGV2ID0gdWRldjsKIAl1Y3MtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwljcy0+ZGV2ID0gJmludGVyZmFjZS0+ZGV2OwogCiAJLyogYWxsb2NhdGUgVVJCczoKIAkgKiAtIG9uZSBmb3IgdGhlIGludGVycnVwdCBwaXBlCiAJICogLSB0aHJlZSBmb3IgdGhlIGRpZmZlcmVudCB1c2VzIG9mIHRoZSBkZWZhdWx0IGNvbnRyb2wgcGlwZQogCSAqIC0gdGhyZWUgZm9yIGVhY2ggaXNvY2hyb25vdXMgcGlwZQogCSAqLwotCXVjcy0+dXJiX2ludF9pbiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwotCWlmICghdWNzLT51cmJfaW50X2luKSB7Ci0JCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOwotCQlnb3RvIGVycm9yOwotCX0KLQl1Y3MtPnVyYl9jbWRfaW4gPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKTsKLQlpZiAoIXVjcy0+dXJiX2NtZF9pbikgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdWNzLT51cmJfY21kX291dCA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwotCWlmICghdWNzLT51cmJfY21kX291dCkgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdWNzLT51cmJfY3RybCA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwotCWlmICghdWNzLT51cmJfY3RybCkgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJZ290byBlcnJvcjsKLQl9CisJaWYgKCEodWNzLT51cmJfaW50X2luID0gdXNiX2FsbG9jX3VyYigwLCBTTEFCX0tFUk5FTCkpIHx8CisJICAgICEodWNzLT51cmJfY21kX2luID0gdXNiX2FsbG9jX3VyYigwLCBTTEFCX0tFUk5FTCkpIHx8CisJICAgICEodWNzLT51cmJfY21kX291dCA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpKSB8fAorCSAgICAhKHVjcy0+dXJiX2N0cmwgPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKSkpCisJCWdvdG8gYWxsb2NlcnI7CiAKIAlmb3IgKGogPSAwOyBqIDwgMjsgKytqKSB7CiAJCXViYyA9IGNzLT5iY3Nbal0uaHcuYmFzOwotCQlmb3IgKGkgPSAwOyBpIDwgQkFTX09VVFVSQlM7ICsraSkgewotCQkJdWJjLT5pc29vdXR1cmJzW2ldLnVyYiA9Ci0JCQkJdXNiX2FsbG9jX3VyYihCQVNfTlVNRlJBTUVTLCBTTEFCX0tFUk5FTCk7Ci0JCQlpZiAoIXViYy0+aXNvb3V0dXJic1tpXS51cmIpIHsKLQkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBCQVNfSU5VUkJTOyArK2kpIHsKLQkJCXViYy0+aXNvaW51cmJzW2ldID0KLQkJCQl1c2JfYWxsb2NfdXJiKEJBU19OVU1GUkFNRVMsIFNMQUJfS0VSTkVMKTsKLQkJCWlmICghdWJjLT5pc29pbnVyYnNbaV0pIHsKLQkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9CisJCWZvciAoaSA9IDA7IGkgPCBCQVNfT1VUVVJCUzsgKytpKQorCQkJaWYgKCEodWJjLT5pc29vdXR1cmJzW2ldLnVyYiA9CisJCQkgICAgICB1c2JfYWxsb2NfdXJiKEJBU19OVU1GUkFNRVMsIFNMQUJfS0VSTkVMKSkpCisJCQkJZ290byBhbGxvY2VycjsKKwkJZm9yIChpID0gMDsgaSA8IEJBU19JTlVSQlM7ICsraSkKKwkJCWlmICghKHViYy0+aXNvaW51cmJzW2ldID0KKwkJCSAgICAgIHVzYl9hbGxvY191cmIoQkFTX05VTUZSQU1FUywgU0xBQl9LRVJORUwpKSkKKwkJCQlnb3RvIGFsbG9jZXJyOwogCX0KIAogCXVjcy0+cmN2YnVmID0gTlVMTDsKQEAgLTIyMDQsMzUgKzIxNzksMzcgQEAKIAkvKiBGaWxsIHRoZSBpbnRlcnJ1cHQgdXJiIGFuZCBzZW5kIGl0IHRvIHRoZSBjb3JlICovCiAJZW5kcG9pbnQgPSAmaG9zdGlmLT5lbmRwb2ludFswXS5kZXNjOwogCXVzYl9maWxsX2ludF91cmIodWNzLT51cmJfaW50X2luLCB1ZGV2LAotCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUodWRldiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgJiAweDBmKSwKLQkgICAgICAgICAgICAgICAgIHVjcy0+aW50X2luX2J1ZiwgMywgcmVhZF9pbnRfY2FsbGJhY2ssIGNzLAotCSAgICAgICAgICAgICAgICAgZW5kcG9pbnQtPmJJbnRlcnZhbCk7Ci0JcmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfaW50X2luLCBTTEFCX0tFUk5FTCk7Ci0JaWYgKHJldCkgewotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgaW50ZXJydXB0IFVSQjogJXMiLCBnZXRfdXNiX3N0YXRtc2cocmV0KSk7CisJCQkgdXNiX3JjdmludHBpcGUodWRldiwKKwkJCQkJKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSAmIDB4MGYpLAorCQkJIHVjcy0+aW50X2luX2J1ZiwgMywgcmVhZF9pbnRfY2FsbGJhY2ssIGNzLAorCQkJIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCWlmICgocmMgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9pbnRfaW4sIFNMQUJfS0VSTkVMKSkgIT0gMCkgeworCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IGludGVycnVwdCBVUkI6ICVzXG4iLAorCQkJZ2V0X3VzYl9yY21zZyhyYykpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCS8qIHRlbGwgdGhlIGRldmljZSB0aGF0IHRoZSBkcml2ZXIgaXMgcmVhZHkgKi8KLQlpZiAoKHJldCA9IHJlcV9zdWJtaXQoY3MtPmJjcywgSERfREVWSUNFX0lOSVRfQUNLLCAwLCAwKSkgIT0gMCkKKwlpZiAoKHJjID0gcmVxX3N1Ym1pdChjcy0+YmNzLCBIRF9ERVZJQ0VfSU5JVF9BQ0ssIDAsIDApKSAhPSAwKQogCQlnb3RvIGVycm9yOwogCiAJLyogdGVsbCBjb21tb24gcGFydCB0aGF0IHRoZSBkZXZpY2UgaXMgcmVhZHkgKi8KIAlpZiAoc3RhcnRtb2RlID09IFNNX0xPQ0tFRCkKIAkJYXRvbWljX3NldCgmY3MtPm1zdGF0ZSwgTVNfTE9DS0VEKTsKLQlpZiAoIWdpZ2FzZXRfc3RhcnQoY3MpKQotCQlnb3RvIGVycm9yOwogCiAJLyogc2F2ZSBhZGRyZXNzIG9mIGNvbnRyb2xsZXIgc3RydWN0dXJlICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGNzKTsKIAotCS8qIHNldCB1cCBkZXZpY2Ugc3lzZnMgKi8KLQlnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKGludGVyZmFjZSk7CisJaWYgKCFnaWdhc2V0X3N0YXJ0KGNzKSkKKwkJZ290byBlcnJvcjsKKwogCXJldHVybiAwOwogCithbGxvY2VycjoKKwlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgVVJCc1xuIik7CiBlcnJvcjoKIAlmcmVldXJicyhjcyk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCWdpZ2FzZXRfdW5hc3NpZ24oY3MpOwogCXJldHVybiAtRU5PREVWOwogfQpAQCAtMjI0NCwyNCArMjIyMSwzOCBAQAogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7Ci0KLQkvKiBjbGVhciBkZXZpY2Ugc3lzZnMgKi8KLQlnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKGludGVyZmFjZSk7CisJaW50IGo7CiAKIAljcyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAKLQlJRk5VTExSRVQoY3MpOwogCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7CiAKLQlpbmZvKCJkaXNjb25uZWN0aW5nIEdpZ2FTZXQgYmFzZSIpOworCWRldl9pbmZvKGNzLT5kZXYsICJkaXNjb25uZWN0aW5nIEdpZ2FzZXQgYmFzZVxuIik7CisKKwkvKiBtYXJrIGJhc2UgYXMgbm90IHJlYWR5LCBhbGwgY2hhbm5lbHMgZGlzY29ubmVjdGVkICovCisJYXRvbWljX3NldCgmdWNzLT5iYXNzdGF0ZSwgMCk7CisKKwkvKiB0ZWxsIExMIGFsbCBjaGFubmVscyBhcmUgZG93biAqLworCS8vRklYTUUgc2hvdWxkbid0IGdpZ2FzZXRfc3RvcCgpIGRvIHRoaXM/CisJZm9yIChqID0gMDsgaiA8IDI7ICsraikKKwkJZ2lnYXNldF9iY2hhbm5lbF9kb3duKGNzLT5iY3MgKyBqKTsKKworCS8qIHN0b3AgZHJpdmVyIChjb21tb24gcGFydCkgKi8KIAlnaWdhc2V0X3N0b3AoY3MpOworCisJLyogc3RvcCB0aW1lcnMgYW5kIFVSQnMsIGZyZWUgcmVzc291cmNlcyAqLworCWRlbF90aW1lcl9zeW5jKCZ1Y3MtPnRpbWVyX2N0cmwpOworCWRlbF90aW1lcl9zeW5jKCZ1Y3MtPnRpbWVyX2F0cmR5KTsKKwlkZWxfdGltZXJfc3luYygmdWNzLT50aW1lcl9jbWRfaW4pOwogCWZyZWV1cmJzKGNzKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJa2ZyZWUodWNzLT5yY3ZidWYpOwogCXVjcy0+cmN2YnVmID0gTlVMTDsKIAl1Y3MtPnJjdmJ1Zl9zaXplID0gMDsKLQlhdG9taWNfc2V0KCZ1Y3MtPmJhc3N0YXRlLCAwKTsKKwl1c2JfcHV0X2Rldih1Y3MtPnVkZXYpOworCXVjcy0+aW50ZXJmYWNlID0gTlVMTDsKKwl1Y3MtPnVkZXYgPSBOVUxMOworCWNzLT5kZXYgPSBOVUxMOwogCWdpZ2FzZXRfdW5hc3NpZ24oY3MpOwogfQogCkBAIC0yMjkzLDEzICsyMjg0LDE0IEBACiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkcml2ZXIgc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLwogCWlmICgoZHJpdmVyID0gZ2lnYXNldF9pbml0ZHJpdmVyKEdJR0FTRVRfTUlOT1IsIEdJR0FTRVRfTUlOT1JTLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSUdBU0VUX01PRFVMRU5BTUUsIEdJR0FTRVRfREVWTkFNRSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lHQVNFVF9ERVZGU05BTUUsICZnaWdvcHMsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRISVNfTU9EVUxFKSkgPT0gTlVMTCkKKwkJCQkgICAgICAgR0lHQVNFVF9NT0RVTEVOQU1FLCBHSUdBU0VUX0RFVk5BTUUsCisJCQkJICAgICAgIEdJR0FTRVRfREVWRlNOQU1FLCAmZ2lnb3BzLAorCQkJCSAgICAgICBUSElTX01PRFVMRSkpID09IE5VTEwpCiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLwotCWNhcmRzdGF0ZSA9IGdpZ2FzZXRfaW5pdGNzKGRyaXZlciwgMiwgMCwgMCwgY2lkbW9kZSwgR0lHQVNFVF9NT0RVTEVOQU1FKTsKKwljYXJkc3RhdGUgPSBnaWdhc2V0X2luaXRjcyhkcml2ZXIsIDIsIDAsIDAsIGNpZG1vZGUsCisJCQkJICAgR0lHQVNFVF9NT0RVTEVOQU1FKTsKIAlpZiAoIWNhcmRzdGF0ZSkKIAkJZ290byBlcnJvcjsKIApAQCAtMjMyOCwyMiArMjMyMCwzNSBAQAogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgYmFzX2dpZ2FzZXRfZXhpdCh2b2lkKQogeworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjYXJkc3RhdGUtPmh3LmJhczsKKwogCWdpZ2FzZXRfYmxvY2tkcml2ZXIoZHJpdmVyKTsgLyogPT4gcHJvYmUgd2lsbCBmYWlsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiA9PiBubyBnaWdhc2V0X3N0YXJ0IGFueSBtb3JlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkgICAgICAqID0+IG5vIGdpZ2FzZXRfc3RhcnQgYW55IG1vcmUKKwkJCQkgICAgICAqLwogCiAJZ2lnYXNldF9zaHV0ZG93bihjYXJkc3RhdGUpOwogCS8qIGZyb20gbm93IG9uLCBubyBpc2RuIGNhbGxiYWNrIHNob3VsZCBiZSBwb3NzaWJsZSAqLwogCi0JaWYgKGF0b21pY19yZWFkKCZjYXJkc3RhdGUtPmh3LmJhcy0+YmFzc3RhdGUpICYgQlNfQVRPUEVOKSB7Ci0JCWRiZyhERUJVR19BTlksICJjbG9zaW5nIEFUIGNoYW5uZWwiKTsKLQkJaWYgKHJlcV9zdWJtaXQoY2FyZHN0YXRlLT5iY3MsCi0JCSAgICAgICAgICAgICAgIEhEX0NMT1NFX0FUQ0hBTk5FTCwgMCwgQkFTX1RJTUVPVVQpID49IDApIHsKLQkJCS8qIHN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQgLSB3YWl0IGZvciBjb21wbGV0aW9uICovCi0JCQkvL3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjcy0+aW5pdHdhaXQsICFjcy0+aHcuYmFzLT5wZW5kaW5nKTsKLQkJCS8vRklYTUUgbmVlZCBvd24gd2FpdCBxdWV1ZT8gd2FrZXVwPwotCQl9CisJLyogY2xvc2UgYWxsIHN0aWxsIG9wZW4gY2hhbm5lbHMgKi8KKwlpZiAoYXRvbWljX3JlYWQoJnVjcy0+YmFzc3RhdGUpICYgQlNfQjFPUEVOKSB7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgImNsb3NpbmcgQjEgY2hhbm5lbCIpOworCQl1c2JfY29udHJvbF9tc2codWNzLT51ZGV2LCB1c2Jfc25kY3RybHBpcGUodWNzLT51ZGV2LCAwKSwKKwkJCQlIRF9DTE9TRV9CMUNIQU5ORUwsIE9VVF9WRU5ET1JfUkVRLCAwLCAwLAorCQkJCU5VTEwsIDAsIEJBU19USU1FT1VUKTsKIAl9CisJaWYgKGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKSAmIEJTX0IyT1BFTikgeworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbG9zaW5nIEIyIGNoYW5uZWwiKTsKKwkJdXNiX2NvbnRyb2xfbXNnKHVjcy0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHVjcy0+dWRldiwgMCksCisJCQkJSERfQ0xPU0VfQjJDSEFOTkVMLCBPVVRfVkVORE9SX1JFUSwgMCwgMCwKKwkJCQlOVUxMLCAwLCBCQVNfVElNRU9VVCk7CisJfQorCWlmIChhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19BVE9QRU4pIHsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiY2xvc2luZyBBVCBjaGFubmVsIik7CisJCXVzYl9jb250cm9sX21zZyh1Y3MtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSh1Y3MtPnVkZXYsIDApLAorCQkJCUhEX0NMT1NFX0FUQ0hBTk5FTCwgT1VUX1ZFTkRPUl9SRVEsIDAsIDAsCisJCQkJTlVMTCwgMCwgQkFTX1RJTUVPVVQpOworCX0KKwlhdG9taWNfc2V0KCZ1Y3MtPmJhc3N0YXRlLCAwKTsKIAogCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXVzYl9kZXJlZ2lzdGVyKCZnaWdhc2V0X3VzYl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwppbmRleCA2NDM3MTk5Li5lNTU3NjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTdHVmZiB1c2VkIGJ5IGFsbCB2YXJpYW50cyBvZiB0aGUgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+LAorICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LAogICogICAgICAgICAgICAgICAgICAgICAgIFRpbG1hbiBTY2htaWR0IDx0aWxtYW5AaW1hcC5jYz4uCiAgKgpAQCAtMTEsMTAgKzExLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogY29tbW9uLmMsdiAxLjEwNC40LjIyIDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtMjMsNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAKIC8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LCBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LCBTdGVmYW4gRWlsZXJzIgogI2RlZmluZSBEUklWRVJfREVTQyAiRHJpdmVyIGZvciBHaWdhc2V0IDMwN3giCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC0zMiwyMSArMjgsMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZ2lnYXNldF9kZWJ1Z2xldmVsLCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgbGV2ZWwiKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFByb3RvdHlwZXMgb2YgaW50ZXJuYWwgZnVuY3Rpb25zCi0gKi8KLQotLy9zdGF0aWMgdm9pZCBnaWdhc2V0X3Byb2Nlc3NfcmVzcG9uc2UoaW50IHJlc3BfY29kZSwgaW50IHBhcmFtZXRlciwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiogcHN0cmluZyk7Ci1zdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqYWxsb2NfY3Moc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpOwotc3RhdGljIHZvaWQgZnJlZV9jcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7Ci1zdGF0aWMgdm9pZCBtYWtlX3ZhbGlkKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBtYXNrKTsKLXN0YXRpYyB2b2lkIG1ha2VfaW52YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzayk7Ci0KLSNkZWZpbmUgVkFMSURfTUlOT1IgICAgICAgMHgwMQotI2RlZmluZSBWQUxJRF9JRCAgICAgICAgICAweDAyCi0jZGVmaW5lIEFTU0lHTkVEICAgICAgICAgIDB4MDQKKy8qIGRyaXZlciBzdGF0ZSBmbGFncyAqLworI2RlZmluZSBWQUxJRF9NSU5PUgkweDAxCisjZGVmaW5lIFZBTElEX0lECTB4MDIKKyNkZWZpbmUgQVNTSUdORUQJMHgwNAogCiAvKiBiaXR3aXNlIGJ5dGUgaW52ZXJzaW9uIHRhYmxlICovCiBfX3U4IGdpZ2FzZXRfaW52dGFiWzI1Nl0gPSB7CkBAIC04Niw0MiArNzEsNDAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfaW52dGFiKTsKIAogdm9pZCBnaWdhc2V0X2RiZ19idWZmZXIoZW51bSBkZWJ1Z2xldmVsIGxldmVsLCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBmcm9tX3VzZXIpCisJCQlzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgY2hhciBvdXRidWZbODBdOwotCXVuc2lnbmVkIGNoYXIgaW5idWZbODAgLSAxXTsKLQlzaXplX3QgbnVtaW47Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqaW47CisJdW5zaWduZWQgY2hhciBjOwogCXNpemVfdCBzcGFjZSA9IHNpemVvZiBvdXRidWYgLSAxOwogCXVuc2lnbmVkIGNoYXIgKm91dCA9IG91dGJ1ZjsKKwlzaXplX3QgbnVtaW4gPSBsZW47CiAKLQlpZiAoIWZyb21fdXNlcikgewotCQlpbiA9IGJ1ZjsKLQkJbnVtaW4gPSBsZW47Ci0JfSBlbHNlIHsKLQkJbnVtaW4gPSBsZW4gPCBzaXplb2YgaW5idWYgPyBsZW4gOiBzaXplb2YgaW5idWY7Ci0JCWluID0gaW5idWY7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihpbmJ1ZiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICopIGJ1ZiwgbnVtaW4pKSB7Ci0JCQlzdHJuY3B5KGluYnVmLCAiPEZBVUxUPiIsIHNpemVvZiBpbmJ1Zik7Ci0JCQludW1pbiA9IHNpemVvZiAiPEZBVUxUPiIgLSAxOworCXdoaWxlIChudW1pbi0tKSB7CisJCWMgPSAqYnVmKys7CisJCWlmIChjID09ICd+JyB8fCBjID09ICdeJyB8fCBjID09ICdcXCcpIHsKKwkJCWlmICghc3BhY2UtLSkKKwkJCQlicmVhazsKKwkJCSpvdXQrKyA9ICdcXCc7CiAJCX0KLQl9Ci0KLQlmb3IgKDsgbnVtaW4gJiYgc3BhY2U7IC0tbnVtaW4sICsraW4pIHsKLQkJLS1zcGFjZTsKLQkJaWYgKCppbiA+PSAzMikKLQkJCSpvdXQrKyA9ICppbjsKLQkJZWxzZSB7CisJCWlmIChjICYgMHg4MCkgeworCQkJaWYgKCFzcGFjZS0tKQorCQkJCWJyZWFrOworCQkJKm91dCsrID0gJ34nOworCQkJYyBePSAweDgwOworCQl9CisJCWlmIChjIDwgMHgyMCB8fCBjID09IDB4N2YpIHsKKwkJCWlmICghc3BhY2UtLSkKKwkJCQlicmVhazsKIAkJCSpvdXQrKyA9ICdeJzsKLQkJCWlmIChzcGFjZSkgewotCQkJCSpvdXQrKyA9ICdAJyArICppbjsKLQkJCQktLXNwYWNlOwotCQkJfQorCQkJYyBePSAweDQwOwogCQl9CisJCWlmICghc3BhY2UtLSkKKwkJCWJyZWFrOworCQkqb3V0KysgPSBjOwogCX0KIAkqb3V0ID0gMDsKIAotCWRiZyhsZXZlbCwgIiVzICgldSBieXRlcyk6ICVzIiwgbXNnLCAodW5zaWduZWQpIGxlbiwgb3V0YnVmKTsKKwlnaWdfZGJnKGxldmVsLCAiJXMgKCV1IGJ5dGVzKTogJXMiLCBtc2csICh1bnNpZ25lZCkgbGVuLCBvdXRidWYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9kYmdfYnVmZmVyKTsKIApAQCAtMTQ2LDExICsxMjksNiBAQAogewogCWludCBpLCByOwogCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZXJyKCJub3QgY29ubmVjdGVkISIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCiAJY3MtPmNvbnRyb2xfc3RhdGUgPSBUSU9DTV9SVFM7IC8vRklYTUUKIAogCXIgPSBzZXRmbGFncyhjcywgVElPQ01fRFRSLCAyMDApOwpAQCAtMTc0LDcgKzE1Miw3IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCWVycigiZXJyb3IgJWQgb24gc2V0dWFydGJpdHMhXG4iLCAtcik7CisJZGV2X2Vycihjcy0+ZGV2LCAiZXJyb3IgJWQgb24gc2V0dWFydGJpdHNcbiIsIC1yKTsKIAljcy0+Y29udHJvbF9zdGF0ZSA9IFRJT0NNX1JUU3xUSU9DTV9EVFI7IC8vIEZJWE1FIGlzIHRoaXMgYSBnb29kIHZhbHVlPwogCWNzLT5vcHMtPnNldF9tb2RlbV9jdHJsKGNzLCAwLCBUSU9DTV9SVFN8VElPQ01fRFRSKTsKIApAQCAtMTg3LDEzICsxNjUsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoLS1hdF9zdGF0ZS0+dGltZXJfZXhwaXJlcykgewotCQlkYmcoREVCVUdfTUNNRCwgImRlY3JlYXNlZCB0aW1lciBvZiAlcCB0byAlbHUiLAotCQkgICAgYXRfc3RhdGUsIGF0X3N0YXRlLT50aW1lcl9leHBpcmVzKTsKKwkJZ2lnX2RiZyhERUJVR19NQ01ELCAiZGVjcmVhc2VkIHRpbWVyIG9mICVwIHRvICVsdSIsCisJCQlhdF9zdGF0ZSwgYXRfc3RhdGUtPnRpbWVyX2V4cGlyZXMpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGF0X3N0YXRlLT5jcywgYXRfc3RhdGUsIEVWX1RJTUVPVVQsIE5VTEwsCi0JICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNfcmVhZCgmYXRfc3RhdGUtPnRpbWVyX2luZGV4KSwgTlVMTCkpIHsKKwkJCSAgICAgICBhdF9zdGF0ZS0+dGltZXJfaW5kZXgsIE5VTEwpKSB7CiAJCS8vRklYTUUgd2hhdCBzaG91bGQgd2UgZG8/CiAJfQogCkBAIC0yMjEsMTAgKzE5OSwxMCBAQAogCQlpZiAodGVzdF90aW1lb3V0KGF0X3N0YXRlKSkKIAkJCXRpbWVvdXQgPSAxOwogCi0JaWYgKGF0b21pY19yZWFkKCZjcy0+cnVubmluZykpIHsKLQkJbW9kX3RpbWVyKCZjcy0+dGltZXIsIGppZmZpZXMgKyBHSUdfVElDSyk7CisJaWYgKGNzLT5ydW5uaW5nKSB7CisJCW1vZF90aW1lcigmY3MtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhHSUdfVElDSykpOwogCQlpZiAodGltZW91dCkgewotCQkJZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgdGltZW91dCIpOworCQkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIHRpbWVvdXQiKTsKIAkJCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT5ldmVudF90YXNrbGV0KTsKIAkJfQogCX0KQEAgLTIzOCwxMyArMjE2LDE0IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCWlmIChiY3MtPnVzZV9jb3VudCkgewotCQlkYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsICVkIiwKKwkJCWJjcy0+Y2hhbm5lbCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQogCSsrYmNzLT51c2VfY291bnQ7CiAJYmNzLT5idXN5ID0gMTsKLQlkYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTI1NSwxMyArMjM0LDEzIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCWlmICghYmNzLT5idXN5KSB7Ci0JCWRiZyhERUJVR19BTlksICJjb3VsZCBub3QgZnJlZSBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjb3VsZCBub3QgZnJlZSBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCS0tYmNzLT51c2VfY291bnQ7CiAJYmNzLT5idXN5ID0gMDsKLQlkYmcoREVCVUdfQU5ZLCAiZnJlZWQgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19BTlksICJmcmVlZCBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI3NCwxNCArMjUzLDE0IEBACiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQlpZiAoY3MtPmJjc1tpXS51c2VfY291bnQpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCQlkYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGFsbG9jYXRlZCBhbGwgY2hhbm5lbHMiKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGFsbG9jYXRlIGFsbCBjaGFubmVscyIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpCiAJCSsrY3MtPmJjc1tpXS51c2VfY291bnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAotCWRiZyhERUJVR19BTlksICJhbGxvY2F0ZWQgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19BTlksICJhbGxvY2F0ZWQgYWxsIGNoYW5uZWxzIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTI5MSw3ICsyNzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQlkYmcoREVCVUdfQU5ZLCAidW5ibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgInVuYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQktLWNzLT5iY3NbaV0udXNlX2NvdW50OwpAQCAtMzAzLDcgKzI4Miw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAotCWRiZyhERUJVR19BTlksICJibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgImJsb2NraW5nIGFsbCBjaGFubmVscyIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkKIAkJKytjcy0+YmNzW2ldLnVzZV9jb3VudDsKQEAgLTMxNCwyNSArMjkzLDI3IEBACiB7CiAJc3RydWN0IGV2ZW50X3QgKmV2OwogCXVuc2lnbmVkIGhlYWQsIHRhaWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIG5vIGxvY2tpbmcgbmVlZGVkIChubyByZWFkZXIvd3JpdGVyIGFsbG93ZWQpICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAKLQloZWFkID0gYXRvbWljX3JlYWQoJmNzLT5ldl9oZWFkKTsKLQl0YWlsID0gYXRvbWljX3JlYWQoJmNzLT5ldl90YWlsKTsKKwloZWFkID0gY3MtPmV2X2hlYWQ7CisJdGFpbCA9IGNzLT5ldl90YWlsOwogCiAJd2hpbGUgKHRhaWwgIT0gaGVhZCkgewogCQlldiA9IGNzLT5ldmVudHMgKyBoZWFkOwogCQlrZnJlZShldi0+cHRyKTsKLQogCQloZWFkID0gKGhlYWQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJfQogCi0JYXRvbWljX3NldCgmY3MtPmV2X2hlYWQsIHRhaWwpOworCWNzLT5ldl9oZWFkID0gdGFpbDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiB9CiAKIHN0cnVjdCBldmVudF90ICpnaWdhc2V0X2FkZF9ldmVudChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIGludCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0ciwgaW50IHBhcmFtZXRlciwgdm9pZCAqYXJnKQorCQkJCSAgc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBpbnQgdHlwZSwKKwkJCQkgIHZvaWQgKnB0ciwgaW50IHBhcmFtZXRlciwgdm9pZCAqYXJnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbmV4dCwgdGFpbDsKQEAgLTM0MCw5ICszMjEsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAKLQl0YWlsID0gYXRvbWljX3JlYWQoJmNzLT5ldl90YWlsKTsKKwl0YWlsID0gY3MtPmV2X3RhaWw7CiAJbmV4dCA9ICh0YWlsICsgMSkgJSBNQVhfRVZFTlRTOwotCWlmICh1bmxpa2VseShuZXh0ID09IGF0b21pY19yZWFkKCZjcy0+ZXZfaGVhZCkpKQorCWlmICh1bmxpa2VseShuZXh0ID09IGNzLT5ldl9oZWFkKSkKIAkJZXJyKCJldmVudCBxdWV1ZSBmdWxsIik7CiAJZWxzZSB7CiAJCWV2ZW50ID0gY3MtPmV2ZW50cyArIHRhaWw7CkBAIC0zNTIsNyArMzMzLDcgQEAKIAkJZXZlbnQtPnB0ciA9IHB0cjsKIAkJZXZlbnQtPmFyZyA9IGFyZzsKIAkJZXZlbnQtPnBhcmFtZXRlciA9IHBhcmFtZXRlcjsKLQkJYXRvbWljX3NldCgmY3MtPmV2X3RhaWwsIG5leHQpOworCQljcy0+ZXZfdGFpbCA9IG5leHQ7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKQEAgLTM5MSwxNCArMzcyLDE0IEBACiB7CiAJaW50IGk7CiAKLQlkYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzWyVkXS0+aHciLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzWyVkXS0+aHciLCBiY3MtPmNoYW5uZWwpOwogCWlmICghYmNzLT5jcy0+b3BzLT5mcmVlYmNzaHcoYmNzKSkgewotCQlkYmcoREVCVUdfSU5JVCwgImZhaWxlZCIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJmYWlsZWQiKTsKIAl9CiAKLQlkYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGJjc1slZF0tPmF0X3N0YXRlIiwgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBiY3NbJWRdLT5hdF9zdGF0ZSIsIGJjcy0+Y2hhbm5lbCk7CiAJY2xlYXJfYXRfc3RhdGUoJmJjcy0+YXRfc3RhdGUpOwotCWRiZyhERUJVR19JTklULCAiZnJlZWluZyBiY3NbJWRdLT5za2IiLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzWyVkXS0+c2tiIiwgYmNzLT5jaGFubmVsKTsKIAogCWlmIChiY3MtPnNrYikKIAkJZGV2X2tmcmVlX3NrYihiY3MtPnNrYik7CkBAIC00MDgsNiArMzg5LDUyIEBACiAJfQogfQogCitzdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqYWxsb2NfY3Moc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpOworCXN0YXRpYyBzdHJ1Y3QgY2FyZHN0YXRlICpyZXQgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBkcnYtPm1pbm9yczsgKytpKSB7CisJCWlmICghKGRydi0+ZmxhZ3NbaV0gJiBWQUxJRF9NSU5PUikpIHsKKwkJCWRydi0+ZmxhZ3NbaV0gPSBWQUxJRF9NSU5PUjsKKwkJCXJldCA9IGRydi0+Y3MgKyBpOworCQl9CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV92YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdIHw9IG1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VfaW52YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdICY9IH5tYXNrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOworfQorCiB2b2lkIGdpZ2FzZXRfZnJlZWNzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewogCWludCBpOwpAQCAtNDE2LDcgKzQ0Myw3IEBACiAJaWYgKCFjcykKIAkJcmV0dXJuOwogCi0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWlmICghY3MtPmJjcykKIAkJZ290byBmX2NzOwpAQCAtNDI0LDggKzQ1MSw5IEBACiAJCWdvdG8gZl9iY3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlhdG9taWNfc2V0KCZjcy0+cnVubmluZywgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsgLyogZXZlbnQgaGFuZGxlciBhbmQgdGltZXIgYXJlIG5vdCByZXNjaGVkdWxlZCBiZWxvdyAqLworCWNzLT5ydW5uaW5nID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOyAvKiBldmVudCBoYW5kbGVyIGFuZCB0aW1lciBhcmUKKwkJCQkJCSAgICAgbm90IHJlc2NoZWR1bGVkIGJlbG93ICovCiAKIAl0YXNrbGV0X2tpbGwoJmNzLT5ldmVudF90YXNrbGV0KTsKIAlkZWxfdGltZXJfc3luYygmY3MtPnRpbWVyKTsKQEAgLTQzNCw3ICs0NjIsNyBAQAogCWRlZmF1bHQ6CiAJCWdpZ2FzZXRfaWZfZnJlZShjcyk7CiAKLQkJZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBodyIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBodyIpOwogCQljcy0+b3BzLT5mcmVlY3Nodyhjcyk7CiAKIAkJLy9GSVhNRSBjbWRidWYKQEAgLTQ0MywzNiArNDcxLDM2IEBACiAJY2FzZSAyOiAvKiBlcnJvciBpbiBpbml0Y3NodyAqLwogCQkvKiBEZXJlZ2lzdGVyIGZyb20gTEwgKi8KIAkJbWFrZV9pbnZhbGlkKGNzLCBWQUxJRF9JRCk7Ci0JCWRiZyhERUJVR19JTklULCAiY2xlYXJpbmcgaWlmIik7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGlpZiIpOwogCQlnaWdhc2V0X2k0bF9jbWQoY3MsIElTRE5fU1RBVF9VTkxPQUQpOwogCiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgMTogLyogZXJyb3Igd2hlbiByZWdlc3RlcmluZyB0byBMTCAqLwotCQlkYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGF0X3N0YXRlIik7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGF0X3N0YXRlIik7CiAJCWNsZWFyX2F0X3N0YXRlKCZjcy0+YXRfc3RhdGUpOwogCQlkZWFsbG9jX2F0X3N0YXRlcyhjcyk7CiAKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSAwOiAvKiBlcnJvciBpbiBvbmUgY2FsbCB0byBpbml0YmNzICovCiAJCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkgewotCQkJZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBiY3NbJWRdIiwgaSk7CisJCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBiY3NbJWRdIiwgaSk7CiAJCQlnaWdhc2V0X2ZyZWViY3MoY3MtPmJjcyArIGkpOwogCQl9CiAKIAkJY2xlYXJfZXZlbnRzKGNzKTsKLQkJZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGluYnVmIik7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgaW5idWYiKTsKIAkJa2ZyZWUoY3MtPmluYnVmKTsKIAl9Ci1mX2JjczoJZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGJjc1tdIik7CitmX2JjczoJZ2lnX2RiZyhERUJVR19JTklULCAiZnJlZWluZyBiY3NbXSIpOwogCWtmcmVlKGNzLT5iY3MpOwotZl9jczoJZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGNzIik7Ci0JdXAoJmNzLT5zZW0pOworZl9jczoJZ2lnX2RiZyhERUJVR19JTklULCAiZnJlZWluZyBjcyIpOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlmcmVlX2NzKGNzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfZnJlZWNzKTsKIAogdm9pZCBnaWdhc2V0X2F0X2luaXQoc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBzdHJ1Y3QgYmNfc3RhdGUgKmJjcywKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2lkKQorCQkgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2lkKQogewogCWludCBpOwogCkBAIC00ODIsOCArNTEwLDggQEAKIAlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyA9IDA7CiAJYXRfc3RhdGUtPnRpbWVyX2V4cGlyZXMgPSAwOwogCWF0X3N0YXRlLT50aW1lcl9hY3RpdmUgPSAwOwotCWF0b21pY19zZXQoJmF0X3N0YXRlLT50aW1lcl9pbmRleCwgMCk7Ci0JYXRvbWljX3NldCgmYXRfc3RhdGUtPnNlcV9pbmRleCwgMCk7CisJYXRfc3RhdGUtPnRpbWVyX2luZGV4ID0gMDsKKwlhdF9zdGF0ZS0+c2VxX2luZGV4ID0gMDsKIAlhdF9zdGF0ZS0+Q29uU3RhdGUgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBTVFJfTlVNOyArK2kpCiAJCWF0X3N0YXRlLT5zdHJfdmFyW2ldID0gTlVMTDsKQEAgLTUwMSw3ICs1MjksNyBAQAogCiAKIHN0YXRpYyB2b2lkIGdpZ2FzZXRfaW5idWZfaW5pdChzdHJ1Y3QgaW5idWZfdCAqaW5idWYsIHN0cnVjdCBiY19zdGF0ZSAqYmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgaW5wdXRzdGF0ZSkKKwkJCSAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGlucHV0c3RhdGUpCiAvKiBpbmJ1Zi0+cmVhZCBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUhICovCiB7CiAJYXRvbWljX3NldCgmaW5idWYtPmhlYWQsIDApOwpAQCAtNTEyLDkgKzU0MCw1MCBAQAogCWluYnVmLT5pbnB1dHN0YXRlID0gaW5wdXRzdGF0ZTsKIH0KIAorLyogYXBwZW5kIHJlY2VpdmVkIGJ5dGVzIHRvIGluYnVmICovCitpbnQgZ2lnYXNldF9maWxsX2luYnVmKHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgbnVtYnl0ZXMpCit7CisJdW5zaWduZWQgbiwgaGVhZCwgdGFpbCwgYnl0ZXNsZWZ0OworCisJZ2lnX2RiZyhERUJVR19JTlRSLCAicmVjZWl2ZWQgJXUgYnl0ZXMiLCBudW1ieXRlcyk7CisKKwlpZiAoIW51bWJ5dGVzKQorCQlyZXR1cm4gMDsKKworCWJ5dGVzbGVmdCA9IG51bWJ5dGVzOworCXRhaWwgPSBhdG9taWNfcmVhZCgmaW5idWYtPnRhaWwpOworCWhlYWQgPSBhdG9taWNfcmVhZCgmaW5idWYtPmhlYWQpOworCWdpZ19kYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKKworCXdoaWxlIChieXRlc2xlZnQpIHsKKwkJaWYgKGhlYWQgPiB0YWlsKQorCQkJbiA9IGhlYWQgLSAxIC0gdGFpbDsKKwkJZWxzZSBpZiAoaGVhZCA9PSAwKQorCQkJbiA9IChSQlVGU0laRS0xKSAtIHRhaWw7CisJCWVsc2UKKwkJCW4gPSBSQlVGU0laRSAtIHRhaWw7CisJCWlmICghbikgeworCQkJZGV2X2VycihpbmJ1Zi0+Y3MtPmRldiwKKwkJCQkiYnVmZmVyIG92ZXJmbG93ICgldSBieXRlcyBsb3N0KSIsIGJ5dGVzbGVmdCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAobiA+IGJ5dGVzbGVmdCkKKwkJCW4gPSBieXRlc2xlZnQ7CisJCW1lbWNweShpbmJ1Zi0+ZGF0YSArIHRhaWwsIHNyYywgbik7CisJCWJ5dGVzbGVmdCAtPSBuOworCQl0YWlsID0gKHRhaWwgKyBuKSAlIFJCVUZTSVpFOworCQlzcmMgKz0gbjsKKwl9CisJZ2lnX2RiZyhERUJVR19JTlRSLCAic2V0dGluZyB0YWlsIHRvICV1IiwgdGFpbCk7CisJYXRvbWljX3NldCgmaW5idWYtPnRhaWwsIHRhaWwpOworCXJldHVybiBudW1ieXRlcyAhPSBieXRlc2xlZnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2ZpbGxfaW5idWYpOworCiAvKiBJbml0aWFsaXplIHRoZSBiLWNoYW5uZWwgc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IGJjX3N0YXRlICpnaWdhc2V0X2luaXRiY3Moc3RydWN0IGJjX3N0YXRlICpiY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBjaGFubmVsKQorCQkJCQlzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNoYW5uZWwpCiB7CiAJaW50IGk7CiAKQEAgLTUyNiw3ICs1OTUsNyBAQAogCWJjcy0+dHJhbnNfZG93biA9IDA7CiAJYmNzLT50cmFuc191cCA9IDA7CiAKLQlkYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgYmNzWyVkXS0+YXRfc3RhdGUiLCBjaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGJjc1slZF0tPmF0X3N0YXRlIiwgY2hhbm5lbCk7CiAJZ2lnYXNldF9hdF9pbml0KCZiY3MtPmF0X3N0YXRlLCBiY3MsIGNzLCAtMSk7CiAKIAliY3MtPnJjdmJ5dGVzID0gMDsKQEAgLTUzNSw3ICs2MDQsNyBAQAogCWJjcy0+ZW1wdHljb3VudCA9IDA7CiAjZW5kaWYKIAotCWRiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBiY3NbJWRdLT5za2IiLCBjaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGJjc1slZF0tPnNrYiIsIGNoYW5uZWwpOwogCWJjcy0+ZmNzID0gUFBQX0lOSVRGQ1M7CiAJYmNzLT5pbnB1dHN0YXRlID0gMDsKIAlpZiAoY3MtPmlnbm9yZWZyYW1lcykgewpAQCAtNTQ0LDcgKzYxMyw3IEBACiAJfSBlbHNlIGlmICgoYmNzLT5za2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTikpICE9IE5VTEwpCiAJCXNrYl9yZXNlcnZlKGJjcy0+c2tiLCBIV19IRFJfTEVOKTsKIAllbHNlIHsKLQkJd2FybigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJCWJjcy0+aW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAl9CiAKQEAgLTU1OSwxNCArNjI4LDEzIEBACiAJZm9yIChpID0gMDsgaSA8IEFUX05VTTsgKytpKQogCQliY3MtPmNvbW1hbmRzW2ldID0gTlVMTDsKIAotCWRiZyhERUJVR19JTklULCAiICBzZXR0aW5nIHVwIGJjc1slZF0tPmh3IiwgY2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiICBzZXR0aW5nIHVwIGJjc1slZF0tPmh3IiwgY2hhbm5lbCk7CiAJaWYgKGNzLT5vcHMtPmluaXRiY3NodyhiY3MpKQogCQlyZXR1cm4gYmNzOwogCi0vL2Vycm9yOgotCWRiZyhERUJVR19JTklULCAiICBmYWlsZWQiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICIgIGZhaWxlZCIpOwogCi0JZGJnKERFQlVHX0lOSVQsICIgIGZyZWVpbmcgYmNzWyVkXS0+c2tiIiwgY2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiICBmcmVlaW5nIGJjc1slZF0tPnNrYiIsIGNoYW5uZWwpOwogCWlmIChiY3MtPnNrYikKIAkJZGV2X2tmcmVlX3NrYihiY3MtPnNrYik7CiAKQEAgLTU3OCw5ICs2NDYsMTAgQEAKICAqIENhbGxzIGhhcmR3YXJlIGRlcGVuZGVudCBnaWdhc2V0X2luaXRjc2h3KCkgZnVuY3Rpb24KICAqIENhbGxzIEIgY2hhbm5lbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBnaWdhc2V0X2luaXRiY3MoKSBmb3IgZWFjaCBCIGNoYW5uZWwKICAqIHBhcmFtZXRlcnM6Ci0gKiAgICAgIGRydgkJaGFyZHdhcmUgZHJpdmVyIHRoZSBkZXZpY2UgYmVsb25ncyB0bworICoJZHJ2CQloYXJkd2FyZSBkcml2ZXIgdGhlIGRldmljZSBiZWxvbmdzIHRvCiAgKgljaGFubmVscwludW1iZXIgb2YgQiBjaGFubmVscyBzdXBwb3J0ZWQgYnkgZGV2aWNlCi0gKglvbmVjaGFubmVsCSE9MDogQiBjaGFubmVsIGRhdGEgYW5kIEFUIGNvbW1hbmRzIHNoYXJlIG9uZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwKKyAqCW9uZWNoYW5uZWwJIT0wOiBCIGNoYW5uZWwgZGF0YSBhbmQgQVQgY29tbWFuZHMgc2hhcmUgb25lCisgKgkJCSAgICAgY29tbXVuaWNhdGlvbiBjaGFubmVsCiAgKgkJCT09MDogQiBjaGFubmVscyBoYXZlIHNlcGFyYXRlIGNvbW11bmljYXRpb24gY2hhbm5lbHMKICAqCWlnbm9yZWZyYW1lcwludW1iZXIgb2YgZnJhbWVzIHRvIGlnbm9yZSBhZnRlciBzZXR0aW5nIHVwIEIgY2hhbm5lbAogICoJY2lkbW9kZQkJIT0wOiBzdGFydCBpbiBDYWxsSUQgbW9kZQpAQCAtNTkzLDE3ICs2NjIsMTggQEAKIAkJCQkgaW50IGNpZG1vZGUsIGNvbnN0IGNoYXIgKm1vZHVsZW5hbWUpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQlkYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgY3MiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGNzIik7CiAJY3MgPSBhbGxvY19jcyhkcnYpOwogCWlmICghY3MpCiAJCWdvdG8gZXJyb3I7Ci0JZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGJjc1swLi4lZF0iLCBjaGFubmVscyAtIDEpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgYmNzWzAuLiVkXSIsIGNoYW5uZWxzIC0gMSk7CiAJY3MtPmJjcyA9IGttYWxsb2MoY2hhbm5lbHMgKiBzaXplb2Yoc3RydWN0IGJjX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcy0+YmNzKQogCQlnb3RvIGVycm9yOwotCWRiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBpbmJ1ZiIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgaW5idWYiKTsKIAljcy0+aW5idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5idWZfdCksIEdGUF9LRVJORUwpOwogCWlmICghY3MtPmluYnVmKQogCQlnb3RvIGVycm9yOwpAQCAtNjEzLDE5ICs2ODMsMjMgQEAKIAljcy0+b25lY2hhbm5lbCA9IG9uZWNoYW5uZWw7CiAJY3MtPmlnbm9yZWZyYW1lcyA9IGlnbm9yZWZyYW1lczsKIAlJTklUX0xJU1RfSEVBRCgmY3MtPnRlbXBfYXRfc3RhdGVzKTsKLQlhdG9taWNfc2V0KCZjcy0+cnVubmluZywgMCk7CisJY3MtPnJ1bm5pbmcgPSAwOwogCWluaXRfdGltZXIoJmNzLT50aW1lcik7IC8qIGNsZWFyIG5leHQgJiBwcmV2ICovCiAJc3Bpbl9sb2NrX2luaXQoJmNzLT5ldl9sb2NrKTsKLQlhdG9taWNfc2V0KCZjcy0+ZXZfdGFpbCwgMCk7Ci0JYXRvbWljX3NldCgmY3MtPmV2X2hlYWQsIDApOwotCWluaXRfTVVURVhfTE9DS0VEKCZjcy0+c2VtKTsKLQl0YXNrbGV0X2luaXQoJmNzLT5ldmVudF90YXNrbGV0LCAmZ2lnYXNldF9oYW5kbGVfZXZlbnQsICh1bnNpZ25lZCBsb25nKSBjcyk7CisJY3MtPmV2X3RhaWwgPSAwOworCWNzLT5ldl9oZWFkID0gMDsKKwltdXRleF9pbml0KCZjcy0+bXV0ZXgpOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CisKKwl0YXNrbGV0X2luaXQoJmNzLT5ldmVudF90YXNrbGV0LCAmZ2lnYXNldF9oYW5kbGVfZXZlbnQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGNzKTsKIAlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMCk7CiAJY3MtPmN1cl9hdF9zZXEgPSAwOwogCWNzLT5nb3Rmd3ZlciA9IC0xOwogCWNzLT5vcGVuX2NvdW50ID0gMDsKKwljcy0+ZGV2ID0gTlVMTDsKIAljcy0+dHR5ID0gTlVMTDsKLQlhdG9taWNfc2V0KCZjcy0+Y2lkbW9kZSwgY2lkbW9kZSAhPSAwKTsKKwljcy0+Y2lkbW9kZSA9IGNpZG1vZGUgIT0gMDsKIAogCS8vaWYob25lY2hhbm5lbCkgeyAvL0ZJWE1FCiAJCWNzLT50YWJub2NpZCA9IGdpZ2FzZXRfdGFiX25vY2lkX20xMHg7CkBAIC02NDIsNTAgKzcxNiw0MyBAQAogCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX1VOSU5JVElBTElaRUQpOwogCiAJZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyArK2kpIHsKLQkJZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGJjc1slZF0ucmVhZCIsIGkpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGJjc1slZF0ucmVhZCIsIGkpOwogCQlpZiAoIWdpZ2FzZXRfaW5pdGJjcyhjcy0+YmNzICsgaSwgY3MsIGkpKQogCQkJZ290byBlcnJvcjsKIAl9CiAKIAkrK2NzLT5jc19pbml0OwogCi0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGF0X3N0YXRlIik7CisJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBhdF9zdGF0ZSIpOwogCXNwaW5fbG9ja19pbml0KCZjcy0+bG9jayk7CiAJZ2lnYXNldF9hdF9pbml0KCZjcy0+YXRfc3RhdGUsIE5VTEwsIGNzLCAwKTsKIAljcy0+ZGxlID0gMDsKIAljcy0+Y2J5dGVzID0gMDsKIAotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBpbmJ1ZiIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgaW5idWYiKTsKIAlpZiAob25lY2hhbm5lbCkgewkJCS8vRklYTUUgZGlzdGluY3Rpb24gbmVjZXNzYXJ5PwogCQlnaWdhc2V0X2luYnVmX2luaXQoY3MtPmluYnVmLCBjcy0+YmNzLCBjcywgSU5TX2NvbW1hbmQpOwogCX0gZWxzZQogCQlnaWdhc2V0X2luYnVmX2luaXQoY3MtPmluYnVmLCBOVUxMLCAgICBjcywgSU5TX2NvbW1hbmQpOwogCi0JYXRvbWljX3NldCgmY3MtPmNvbm5lY3RlZCwgMCk7CisJY3MtPmNvbm5lY3RlZCA9IDA7CisJY3MtPmlzZG5fdXAgPSAwOwogCi0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGNtZGJ1ZiIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgY21kYnVmIik7CiAJY3MtPmNtZGJ1ZiA9IGNzLT5sYXN0Y21kYnVmID0gTlVMTDsKIAlzcGluX2xvY2tfaW5pdCgmY3MtPmNtZGxvY2spOwogCWNzLT5jdXJsZW4gPSAwOwogCWNzLT5jbWRieXRlcyA9IDA7CiAKLQkvKgotCSAqIFRlbGwgdGhlIElTRE40TGludXggc3Vic3lzdGVtICh0aGUgTEwpIHRoYXQKLQkgKiBhIGRyaXZlciBmb3IgYSBVU0ItRGV2aWNlIGlzIGF2YWlsYWJsZSAhCi0JICogSWYgdGhpcyBpcyBkb25lLCAiaXNkbmN0cmwiIGlzIGFibGUgdG8gYmluZCBhIGRldmljZSBmb3IgdGhpcyBkcml2ZXIgZXZlbgotCSAqIGlmIG5vIHBoeXNpY2FsIHVzYi1kZXZpY2UgaXMgY3VycmVudGx5IGNvbm5lY3RlZC4KLQkgKiBCdXQgdGhpcyBkZXZpY2Ugd2lsbCBqdXN0IGJlIGFjY2Vzc2FibGUgaWYgYSBwaHlzaWNhbCBVU0IgZGV2aWNlIGlzIGNvbm5lY3RlZAotCSAqICh2aWEgImdpZ2FzZXRfcHJvYmUiKSAuCi0JICovCi0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGlpZiIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgaWlmIik7CiAJaWYgKCFnaWdhc2V0X3JlZ2lzdGVyX3RvX0xMKGNzLCBtb2R1bGVuYW1lKSkgewotCQllcnIoInJlZ2lzdGVyX2lzZG49PmVycm9yIik7CisJCWVycigicmVnaXN0ZXJfaXNkbiBmYWlsZWQiKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAltYWtlX3ZhbGlkKGNzLCBWQUxJRF9JRCk7CiAJKytjcy0+Y3NfaW5pdDsKLQlkYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgaHciKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGh3Iik7CiAJaWYgKCFjcy0+b3BzLT5pbml0Y3NodyhjcykpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTY5MywyNyArNzYwLDI4IEBACiAKIAlnaWdhc2V0X2lmX2luaXQoY3MpOwogCi0JYXRvbWljX3NldCgmY3MtPnJ1bm5pbmcsIDEpOwotCWNzLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGNzOwotCWNzLT50aW1lci5mdW5jdGlvbiA9IHRpbWVyX3RpY2s7Ci0JY3MtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgR0lHX1RJQ0s7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJY3MtPnJ1bm5pbmcgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisJc2V0dXBfdGltZXIoJmNzLT50aW1lciwgdGltZXJfdGljaywgKHVuc2lnbmVkIGxvbmcpIGNzKTsKKwljcy0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEdJR19USUNLKTsKIAkvKiBGSVhNRTogY2FuIGppZmZpZXMgaW5jcmVhc2UgdG9vIG11Y2ggdW50aWwgdGhlIHRpbWVyIGlzIGFkZGVkPwogCSAqIFNhbWUgcHJvYmxlbSg/KSB3aXRoIG1vZF90aW1lcigpIGluIHRpbWVyX3RpY2soKS4gKi8KIAlhZGRfdGltZXIoJmNzLT50aW1lcik7CiAKLQlkYmcoREVCVUdfSU5JVCwgImNzIGluaXRpYWxpemVkISIpOwotCXVwKCZjcy0+c2VtKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJjcyBpbml0aWFsaXplZCIpOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlyZXR1cm4gY3M7CiAKIGVycm9yOglpZiAoY3MpCi0JCXVwKCZjcy0+c2VtKTsKLQlkYmcoREVCVUdfSU5JVCwgImZhaWxlZCIpOworCQltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiZmFpbGVkIik7CiAJZ2lnYXNldF9mcmVlY3MoY3MpOwogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9pbml0Y3MpOwogCi0vKiBSZUluaXRpYWxpemUgdGhlIGItY2hhbm5lbCBzdHJ1Y3R1cmUgKi8gLyogZS5nLiBjYWxsZWQgb24gaGFuZ3VwLCBkaXNjb25uZWN0ICovCisvKiBSZUluaXRpYWxpemUgdGhlIGItY2hhbm5lbCBzdHJ1Y3R1cmUgb24gaGFuZ3VwICovCiB2b2lkIGdpZ2FzZXRfYmNzX3JlaW5pdChzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNzIzLDEyICs3OTEsMTIgQEAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZiY3MtPnNxdWV1ZSkpICE9IE5VTEwpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOyAvL0ZJWE1FCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJY2xlYXJfYXRfc3RhdGUoJmJjcy0+YXRfc3RhdGUpOwogCWJjcy0+YXRfc3RhdGUuQ29uU3RhdGUgPSAwOwogCWJjcy0+YXRfc3RhdGUudGltZXJfYWN0aXZlID0gMDsKIAliY3MtPmF0X3N0YXRlLnRpbWVyX2V4cGlyZXMgPSAwOwotCWJjcy0+YXRfc3RhdGUuY2lkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgLyogTm8gQ0lEIGRlZmluZWQgKi8KKwliY3MtPmF0X3N0YXRlLmNpZCA9IC0xOwkJCS8qIE5vIENJRCBkZWZpbmVkICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAogCWJjcy0+aW5wdXRzdGF0ZSA9IDA7CkBAIC04MDMsMTEgKzg3MSwxNCBAQAogCiBpbnQgZ2lnYXNldF9zdGFydChzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKLQkJcmV0dXJuIDA7Ci0JLy9pbmZvKCJVU0IgZGV2aWNlIGZvciBHaWdhc2V0IDMwN3ggbm93IGF0dGFjaGVkIHRvIERldiAlZCIsIHVjcy0+bWlub3IpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlhdG9taWNfc2V0KCZjcy0+Y29ubmVjdGVkLCAxKTsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWNzLT5jb25uZWN0ZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCkgewogCQljcy0+b3BzLT5zZXRfbW9kZW1fY3RybChjcywgMCwgVElPQ01fRFRSfFRJT0NNX1JUUyk7CkBAIC04MjYsMjMgKzg5NywyNiBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNUQVJUIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNUQVJUIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CiAKLQl1cCgmY3MtPnNlbSk7CisJLyogc2V0IHVwIGRldmljZSBzeXNmcyAqLworCWdpZ2FzZXRfaW5pdF9kZXZfc3lzZnMoY3MpOworCisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCXJldHVybiAxOwogCiBlcnJvcjoKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9zdGFydCk7CiAKIHZvaWQgZ2lnYXNldF9zaHV0ZG93bihzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlkb3duKCZjcy0+c2VtKTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCiAJY3MtPndhaXRpbmcgPSAxOwogCkBAIC04NTEsMTEgKzkyNSwxMSBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU0hVVERPV04iKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU0hVVERPV04iKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKSkgewotCQl3YXJuKCJhYm9ydGVkIik7CisJCXdhcm4oIiVzOiBhYm9ydGVkIiwgX19mdW5jX18pOwogCQkvL0ZJWE1FCiAJfQogCkBAIC04NzIsMTUgKzk0NiwxMyBAQAogCWNsZWFudXBfY3MoY3MpOwogCiBleGl0OgotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X3NodXRkb3duKTsKIAogdm9pZCBnaWdhc2V0X3N0b3Aoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JZG93bigmY3MtPnNlbSk7Ci0KLQlhdG9taWNfc2V0KCZjcy0+Y29ubmVjdGVkLCAwKTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCiAJY3MtPndhaXRpbmcgPSAxOwogCkBAIC04ODksMjEgKzk2MSwyMSBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU1RPUCIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTVE9QIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZykpIHsKLQkJd2FybigiYWJvcnRlZCIpOworCQl3YXJuKCIlczogYWJvcnRlZCIsIF9fZnVuY19fKTsKIAkJLy9GSVhNRQogCX0KIAotCS8qIFRlbGwgdGhlIExMIHRoYXQgdGhlIGRldmljZSBpcyBub3QgYXZhaWxhYmxlIC4uICovCi0JZ2lnYXNldF9pNGxfY21kKGNzLCBJU0ROX1NUQVRfU1RPUCk7IC8vIEZJWE1FIG1vdmUgdG8gZXZlbnQgbGF5ZXI/CisJLyogY2xlYXIgZGV2aWNlIHN5c2ZzICovCisJZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhjcyk7CiAKIAljbGVhbnVwX2NzKGNzKTsKIAogZXhpdDoKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9zdG9wKTsKIApAQCAtOTQ3LDMxICsxMDE5LDI1IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmRyaXZlcnMsIGxpc3QpIHsKLQkJZGJnKERFQlVHX0RSSVZFUiwgImRyaXZlciAlcCIsIGRydik7CisJCWdpZ19kYmcoREVCVUdfRFJJVkVSLCAiZHJpdmVyICVwIiwgZHJ2KTsKIAkJc3Bpbl9sb2NrKCZkcnYtPmxvY2spOwogCQlmb3IgKGkgPSAwOyBpIDwgZHJ2LT5taW5vcnM7ICsraSkgewotCQkJZGJnKERFQlVHX0RSSVZFUiwgIiAgaW5kZXggJXUiLCBpKTsKLQkJCWRiZyhERUJVR19EUklWRVIsICIgICAgZmxhZ3MgMHglMDJ4IiwgZHJ2LT5mbGFnc1tpXSk7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgaW5kZXggJXUiLCBpKTsKKwkJCWdpZ19kYmcoREVCVUdfRFJJVkVSLCAiICAgIGZsYWdzIDB4JTAyeCIsCisJCQkJZHJ2LT5mbGFnc1tpXSk7CiAJCQljcyA9IGRydi0+Y3MgKyBpOwotCQkJZGJnKERFQlVHX0RSSVZFUiwgIiAgICBjYXJkc3RhdGUgJXAiLCBjcyk7Ci0JCQlkYmcoREVCVUdfRFJJVkVSLCAiICAgIG1pbm9yX2luZGV4ICV1IiwgY3MtPm1pbm9yX2luZGV4KTsKLQkJCWRiZyhERUJVR19EUklWRVIsICIgICAgZHJpdmVyICVwIiwgY3MtPmRyaXZlcik7Ci0JCQlkYmcoREVCVUdfRFJJVkVSLCAiICAgIGk0bCBpZCAlZCIsIGNzLT5teWlkKTsKKwkJCWdpZ19kYmcoREVCVUdfRFJJVkVSLCAiICAgIGNhcmRzdGF0ZSAlcCIsIGNzKTsKKwkJCWdpZ19kYmcoREVCVUdfRFJJVkVSLCAiICAgIG1pbm9yX2luZGV4ICV1IiwKKwkJCQljcy0+bWlub3JfaW5kZXgpOworCQkJZ2lnX2RiZyhERUJVR19EUklWRVIsICIgICAgZHJpdmVyICVwIiwgY3MtPmRyaXZlcik7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgICBpNGwgaWQgJWQiLCBjcy0+bXlpZCk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmRydi0+bG9jayk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRyaXZlcl9sb2NrLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2RlYnVnZHJpdmVycyk7CiAKLXN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWlmICh0dHktPmluZGV4IDwgMCB8fCB0dHktPmluZGV4ID49IHR0eS0+ZHJpdmVyLT5udW0pCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBnaWdhc2V0X2dldF9jc19ieV9taW5vcih0dHktPmluZGV4ICsgdHR5LT5kcml2ZXItPm1pbm9yX3N0YXJ0KTsKLX0KLQotc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9nZXRfY3NfYnlfbWlub3IodW5zaWduZWQgbWlub3IpCitzdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9nZXRfY3NfYnlfbWlub3IodW5zaWduZWQgbWlub3IpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqcmV0ID0gTlVMTDsKQEAgLTk5NCw2ICsxMDYwLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9nZXRfY3NfYnlfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJaWYgKHR0eS0+aW5kZXggPCAwIHx8IHR0eS0+aW5kZXggPj0gdHR5LT5kcml2ZXItPm51bSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGdpZ2FzZXRfZ2V0X2NzX2J5X21pbm9yKHR0eS0+aW5kZXggKyB0dHktPmRyaXZlci0+bWlub3Jfc3RhcnQpOworfQorCiB2b2lkIGdpZ2FzZXRfZnJlZWRyaXZlcihzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTAxNCwyMCArMTA4NywyMCBAQAogLyogZ2lnYXNldF9pbml0ZHJpdmVyCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBnaWdhc2V0X2RyaXZlciBzdHJ1Y3R1cmUuIEluaXRpYWxpemUgaW50ZXJmYWNlLgogICogcGFyYW1ldGVyczoKLSAqICAgICAgbWlub3IgICAgICAgICAgIEZpcnN0IG1pbm9yIG51bWJlcgotICogICAgICBtaW5vcnMgICAgICAgICAgTnVtYmVyIG9mIG1pbm9ycyB0aGlzIGRyaXZlciBjYW4gaGFuZGxlCi0gKiAgICAgIHByb2NuYW1lICAgICAgICBOYW1lIG9mIHRoZSBkcml2ZXIgKGUuZy4gZm9yIC9wcm9jL3R0eS9kcml2ZXJzLCBwYXRoIGluIC9wcm9jL2RyaXZlcikKLSAqICAgICAgZGV2bmFtZSAgICAgICAgIE5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyAocHJlZml4IHdpdGhvdXQgbWlub3IgbnVtYmVyKQotICogICAgICBkZXZmc25hbWUgICAgICAgRGV2ZnMgbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIHdpdGhvdXQgJWQKKyAqCW1pbm9yCQlGaXJzdCBtaW5vciBudW1iZXIKKyAqCW1pbm9ycwkJTnVtYmVyIG9mIG1pbm9ycyB0aGlzIGRyaXZlciBjYW4gaGFuZGxlCisgKglwcm9jbmFtZQlOYW1lIG9mIHRoZSBkcml2ZXIKKyAqCWRldm5hbWUJCU5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyAocHJlZml4IHdpdGhvdXQgbWlub3IgbnVtYmVyKQorICoJZGV2ZnNuYW1lCURldmZzIG5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyB3aXRob3V0ICVkCiAgKiByZXR1cm4gdmFsdWU6Ci0gKiAgICAgIFBvaW50ZXIgdG8gdGhlIGdpZ2FzZXRfZHJpdmVyIHN0cnVjdHVyZSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCisgKglQb2ludGVyIHRvIHRoZSBnaWdhc2V0X2RyaXZlciBzdHJ1Y3R1cmUgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgogICovCiBzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmdpZ2FzZXRfaW5pdGRyaXZlcih1bnNpZ25lZCBtaW5vciwgdW5zaWduZWQgbWlub3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2ZnNuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lcikKKwkJCQkJICBjb25zdCBjaGFyICpwcm9jbmFtZSwKKwkJCQkJICBjb25zdCBjaGFyICpkZXZuYW1lLAorCQkJCQkgIGNvbnN0IGNoYXIgKmRldmZzbmFtZSwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgZ2lnYXNldF9vcHMgKm9wcywKKwkJCQkJICBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIHsKIAlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTAzNiw4ICsxMTA5LDkgQEAKIAlkcnYgPSBrbWFsbG9jKHNpemVvZiAqZHJ2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRydikKIAkJcmV0dXJuIE5VTEw7CisKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gb3V0MTsKIAogCWRydi0+Y3MgPSBOVUxMOwogCWRydi0+aGF2ZV90dHkgPSAwOwpAQCAtMTA1MSwxMCArMTEyNSwxMSBAQAogCiAJZHJ2LT5jcyA9IGttYWxsb2MobWlub3JzICogc2l6ZW9mICpkcnYtPmNzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRydi0+Y3MpCi0JCWdvdG8gb3V0MTsKKwkJZ290byBvdXQyOworCiAJZHJ2LT5mbGFncyA9IGttYWxsb2MobWlub3JzICogc2l6ZW9mICpkcnYtPmZsYWdzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRydi0+ZmxhZ3MpCi0JCWdvdG8gb3V0MjsKKwkJZ290byBvdXQzOwogCiAJZm9yIChpID0gMDsgaSA8IG1pbm9yczsgKytpKSB7CiAJCWRydi0+ZmxhZ3NbaV0gPSAwOwpAQCAtMTA3MSw2MSArMTE0NiwxNiBAQAogCiAJcmV0dXJuIGRydjsKIAotb3V0MjoKK291dDM6CiAJa2ZyZWUoZHJ2LT5jcyk7CitvdXQyOgorCW1vZHVsZV9wdXQob3duZXIpOwogb3V0MToKIAlrZnJlZShkcnYpOwotCW1vZHVsZV9wdXQob3duZXIpOwogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9pbml0ZHJpdmVyKTsKIAotc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKmFsbG9jX2NzKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaTsKLQlzdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqcmV0ID0gTlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgZHJ2LT5taW5vcnM7ICsraSkgewotCQlpZiAoIShkcnYtPmZsYWdzW2ldICYgVkFMSURfTUlOT1IpKSB7Ci0JCQlkcnYtPmZsYWdzW2ldID0gVkFMSURfTUlOT1I7Ci0JCQlyZXQgPSBkcnYtPmNzICsgaTsKLQkJfQotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfY3Moc3RydWN0IGNhcmRzdGF0ZSAqY3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOwotCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1ha2VfdmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOwotCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSB8PSBtYXNrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlX2ludmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOwotCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSAmPSB+bWFzazsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLX0KLQogLyogRm9yIGRyaXZlcnMgd2l0aG91dCBmaXhlZCBhc3NpZ25tZW50IGRldmljZTwtPmNhcmRzdGF0ZSAodXNiKSAqLwogc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9nZXR1bmFzc2lnbmVkY3Moc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYwppbmRleCBmZGNiODBiLi4xOGUwNWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3R1ZmYgdXNlZCBieSBhbGwgdmFyaWFudHMgb2YgdGhlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiwKKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzLAogICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LgogICoKQEAgLTExLDgyICsxMSw3OCBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBldi1sYXllci5jLHYgMS40LjIuMTggMjAwNi8wMi8wNCAxODoyODoxNiBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpbmNsdWRlICJnaWdhc2V0LmgiCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIGJpdCBtYXNrcyBmb3IgcGVuZGluZyBjb21tYW5kcyAqLwotI2RlZmluZSBQQ19JTklUICAgICAgIDB4MDA0Ci0jZGVmaW5lIFBDX0RMRTAgICAgICAgMHgwMDgKLSNkZWZpbmUgUENfRExFMSAgICAgICAweDAxMAotI2RlZmluZSBQQ19DSUQgICAgICAgIDB4MDgwCi0jZGVmaW5lIFBDX05PQ0lEICAgICAgMHgxMDAKLSNkZWZpbmUgUENfSFVQICAgICAgICAweDAwMgotI2RlZmluZSBQQ19ESUFMICAgICAgIDB4MDAxCi0jZGVmaW5lIFBDX0FDQ0VQVCAgICAgMHgwNDAKLSNkZWZpbmUgUENfU0hVVERPV04gICAweDAyMAotI2RlZmluZSBQQ19DSURNT0RFICAgIDB4MjAwCi0jZGVmaW5lIFBDX1VNTU9ERSAgICAgMHg0MDAKKyNkZWZpbmUgUENfRElBTAkJMHgwMDEKKyNkZWZpbmUgUENfSFVQCQkweDAwMgorI2RlZmluZSBQQ19JTklUCQkweDAwNAorI2RlZmluZSBQQ19ETEUwCQkweDAwOAorI2RlZmluZSBQQ19ETEUxCQkweDAxMAorI2RlZmluZSBQQ19TSFVURE9XTgkweDAyMAorI2RlZmluZSBQQ19BQ0NFUFQJMHgwNDAKKyNkZWZpbmUgUENfQ0lECQkweDA4MAorI2RlZmluZSBQQ19OT0NJRAkweDEwMAorI2RlZmluZSBQQ19DSURNT0RFCTB4MjAwCisjZGVmaW5lIFBDX1VNTU9ERQkweDQwMAogCiAvKiB0eXBlcyBvZiBtb2RlbSByZXNwb25zZXMgKi8KLSNkZWZpbmUgUlRfTk9USElORyAwCi0jZGVmaW5lIFJUX1pTQVUgICAgMQotI2RlZmluZSBSVF9SSU5HICAgIDIKLSNkZWZpbmUgUlRfTlVNQkVSICAzCi0jZGVmaW5lIFJUX1NUUklORyAgNAotI2RlZmluZSBSVF9IRVggICAgIDUKLSNkZWZpbmUgUlRfWkNBVSAgICA2CisjZGVmaW5lIFJUX05PVEhJTkcJMAorI2RlZmluZSBSVF9aU0FVCQkxCisjZGVmaW5lIFJUX1JJTkcJCTIKKyNkZWZpbmUgUlRfTlVNQkVSCTMKKyNkZWZpbmUgUlRfU1RSSU5HCTQKKyNkZWZpbmUgUlRfSEVYCQk1CisjZGVmaW5lIFJUX1pDQVUJCTYKIAogLyogUG9zc2libGUgQVNDSUkgcmVzcG9uc2VzICovCi0jZGVmaW5lIFJTUF9PSyAgICAgICAgICAgMAotLy8jZGVmaW5lIFJTUF9CVVNZICAgICAgIDEKLS8vI2RlZmluZSBSU1BfQ09OTkVDVCAgICAyCi0jZGVmaW5lIFJTUF9aR0NJICAgICAgICAgMwotI2RlZmluZSBSU1BfUklORyAgICAgICAgIDQKLSNkZWZpbmUgUlNQX1pBT0MgICAgICAgICA1Ci0jZGVmaW5lIFJTUF9aQ1NUUiAgICAgICAgNgotI2RlZmluZSBSU1BfWkNGR1QgICAgICAgIDcKLSNkZWZpbmUgUlNQX1pDRkcgICAgICAgICA4Ci0jZGVmaW5lIFJTUF9aQ0NSICAgICAgICAgOQotI2RlZmluZSBSU1BfRU1QVFkgICAgICAgIDEwCi0jZGVmaW5lIFJTUF9aTE9HICAgICAgICAgMTEKLSNkZWZpbmUgUlNQX1pDQVUgICAgICAgICAxMgotI2RlZmluZSBSU1BfWk1XSSAgICAgICAgIDEzCi0jZGVmaW5lIFJTUF9aQUJJTkZPICAgICAgMTQKLSNkZWZpbmUgUlNQX1pTTUxTVENIRyAgICAxNQotI2RlZmluZSBSU1BfVkFSICAgICAgICAgIDEwMAotI2RlZmluZSBSU1BfWlNBVSAgICAgICAgIChSU1BfVkFSICsgVkFSX1pTQVUpCi0jZGVmaW5lIFJTUF9aRExFICAgICAgICAgKFJTUF9WQVIgKyBWQVJfWkRMRSkKLSNkZWZpbmUgUlNQX1pWTFMgICAgICAgICAoUlNQX1ZBUiArIFZBUl9aVkxTKQotI2RlZmluZSBSU1BfWkNUUCAgICAgICAgIChSU1BfVkFSICsgVkFSX1pDVFApCi0jZGVmaW5lIFJTUF9TVFIgICAgICAgICAgKFJTUF9WQVIgKyBWQVJfTlVNKQotI2RlZmluZSBSU1BfTk1CUiAgICAgICAgIChSU1BfU1RSICsgU1RSX05NQlIpCi0jZGVmaW5lIFJTUF9aQ1BOICAgICAgICAgKFJTUF9TVFIgKyBTVFJfWkNQTikKLSNkZWZpbmUgUlNQX1pDT04gICAgICAgICAoUlNQX1NUUiArIFNUUl9aQ09OKQotI2RlZmluZSBSU1BfWkJDICAgICAgICAgIChSU1BfU1RSICsgU1RSX1pCQykKLSNkZWZpbmUgUlNQX1pITEMgICAgICAgICAoUlNQX1NUUiArIFNUUl9aSExDKQotI2RlZmluZSBSU1BfRVJST1IgICAgICAgLTEgICAgICAgLyogRVJST1IgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJTUF9XUk9OR19DSUQgICAtMiAgICAgICAvKiB1bmtub3duIGNpZCBpbiBjbWQgKi8KLS8vI2RlZmluZSBSU1BfRU1QVFkgICAgIC0zCi0jZGVmaW5lIFJTUF9VTktOT1dOICAgICAtNCAgICAgICAvKiB1bmtub3duIHJlc3BvbnNlICAgKi8KLSNkZWZpbmUgUlNQX0ZBSUwgICAgICAgIC01ICAgICAgIC8qIGludGVybmFsIGVycm9yICAgICAqLwotI2RlZmluZSBSU1BfSU5WQUwgICAgICAgLTYgICAgICAgLyogaW52YWxpZCByZXNwb25zZSAgICovCisjZGVmaW5lIFJTUF9PSwkJMAorLy8jZGVmaW5lIFJTUF9CVVNZCTEKKy8vI2RlZmluZSBSU1BfQ09OTkVDVAkyCisjZGVmaW5lIFJTUF9aR0NJCTMKKyNkZWZpbmUgUlNQX1JJTkcJNAorI2RlZmluZSBSU1BfWkFPQwk1CisjZGVmaW5lIFJTUF9aQ1NUUgk2CisjZGVmaW5lIFJTUF9aQ0ZHVAk3CisjZGVmaW5lIFJTUF9aQ0ZHCTgKKyNkZWZpbmUgUlNQX1pDQ1IJOQorI2RlZmluZSBSU1BfRU1QVFkJMTAKKyNkZWZpbmUgUlNQX1pMT0cJMTEKKyNkZWZpbmUgUlNQX1pDQVUJMTIKKyNkZWZpbmUgUlNQX1pNV0kJMTMKKyNkZWZpbmUgUlNQX1pBQklORk8JMTQKKyNkZWZpbmUgUlNQX1pTTUxTVENIRwkxNQorI2RlZmluZSBSU1BfVkFSCQkxMDAKKyNkZWZpbmUgUlNQX1pTQVUJKFJTUF9WQVIgKyBWQVJfWlNBVSkKKyNkZWZpbmUgUlNQX1pETEUJKFJTUF9WQVIgKyBWQVJfWkRMRSkKKyNkZWZpbmUgUlNQX1pWTFMJKFJTUF9WQVIgKyBWQVJfWlZMUykKKyNkZWZpbmUgUlNQX1pDVFAJKFJTUF9WQVIgKyBWQVJfWkNUUCkKKyNkZWZpbmUgUlNQX1NUUgkJKFJTUF9WQVIgKyBWQVJfTlVNKQorI2RlZmluZSBSU1BfTk1CUgkoUlNQX1NUUiArIFNUUl9OTUJSKQorI2RlZmluZSBSU1BfWkNQTgkoUlNQX1NUUiArIFNUUl9aQ1BOKQorI2RlZmluZSBSU1BfWkNPTgkoUlNQX1NUUiArIFNUUl9aQ09OKQorI2RlZmluZSBSU1BfWkJDCQkoUlNQX1NUUiArIFNUUl9aQkMpCisjZGVmaW5lIFJTUF9aSExDCShSU1BfU1RSICsgU1RSX1pITEMpCisjZGVmaW5lIFJTUF9FUlJPUgktMQkvKiBFUlJPUiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlNQX1dST05HX0NJRAktMgkvKiB1bmtub3duIGNpZCBpbiBjbWQgKi8KKy8vI2RlZmluZSBSU1BfRU1QVFkJLTMKKyNkZWZpbmUgUlNQX1VOS05PV04JLTQJLyogdW5rbm93biByZXNwb25zZSAgICovCisjZGVmaW5lIFJTUF9GQUlMCS01CS8qIGludGVybmFsIGVycm9yICAgICAqLworI2RlZmluZSBSU1BfSU5WQUwJLTYJLyogaW52YWxpZCByZXNwb25zZSAgICovCiAKLSNkZWZpbmUgUlNQX05PTkUgICAgICAgIC0xOQotI2RlZmluZSBSU1BfU1RSSU5HICAgICAgLTIwCi0jZGVmaW5lIFJTUF9OVUxMICAgICAgICAtMjEKLS8vI2RlZmluZSBSU1BfUkVUUllGQUlMIC0yMgotLy8jZGVmaW5lIFJTUF9SRVRSWSAgICAgLTIzCi0vLyNkZWZpbmUgUlNQX1NLSVAgICAgICAtMjQKLSNkZWZpbmUgUlNQX0lOSVQgICAgICAgIC0yNwotI2RlZmluZSBSU1BfQU5ZICAgICAgICAgLTI2Ci0jZGVmaW5lIFJTUF9MQVNUICAgICAgICAtMjgKLSNkZWZpbmUgUlNQX05PREVWICAgICAgIC05CisjZGVmaW5lIFJTUF9OT05FCS0xOQorI2RlZmluZSBSU1BfU1RSSU5HCS0yMAorI2RlZmluZSBSU1BfTlVMTAktMjEKKy8vI2RlZmluZSBSU1BfUkVUUllGQUlMCS0yMgorLy8jZGVmaW5lIFJTUF9SRVRSWQktMjMKKy8vI2RlZmluZSBSU1BfU0tJUAktMjQKKyNkZWZpbmUgUlNQX0lOSVQJLTI3CisjZGVmaW5lIFJTUF9BTlkJCS0yNgorI2RlZmluZSBSU1BfTEFTVAktMjgKKyNkZWZpbmUgUlNQX05PREVWCS05CiAKIC8qIGFjdGlvbnMgZm9yIHByb2Nlc3NfcmVzcG9uc2UgKi8KICNkZWZpbmUgQUNUX05PVEhJTkcJCTAKQEAgLTExMiw3ICsxMDgsNyBAQAogI2RlZmluZSBBQ1RfRElTQ09OTkVDVAkJMjAKICNkZWZpbmUgQUNUX0NPTk5FQ1QJCTIxCiAjZGVmaW5lIEFDVF9SRU1PVEVSRUpFQ1QJMjIKLSNkZWZpbmUgQUNUX0NPTk5USU1FT1VUICAgICAgICAgMjMKKyNkZWZpbmUgQUNUX0NPTk5USU1FT1VUCQkyMwogI2RlZmluZSBBQ1RfUkVNT1RFSFVQCQkyNAogI2RlZmluZSBBQ1RfQUJPUlRIVVAJCTI1CiAjZGVmaW5lIEFDVF9JQ0FMTAkJMjYKQEAgLTEyNyw0MCArMTIzLDQwIEBACiAjZGVmaW5lIEFDVF9FUlJPUgkJMzUKICNkZWZpbmUgQUNUX0FCT1JUQ0lECQkzNgogI2RlZmluZSBBQ1RfWkNBVQkJMzcKLSNkZWZpbmUgQUNUX05PVElGWV9CQ19ET1dOICAgICAgMzgKLSNkZWZpbmUgQUNUX05PVElGWV9CQ19VUCAgICAgICAgMzkKLSNkZWZpbmUgQUNUX0RJQUwgICAgICAgICAgICAgICAgNDAKLSNkZWZpbmUgQUNUX0FDQ0VQVCAgICAgICAgICAgICAgNDEKLSNkZWZpbmUgQUNUX1BST1RPX0wyICAgICAgICAgICAgNDIKLSNkZWZpbmUgQUNUX0hVUCAgICAgICAgICAgICAgICAgNDMKLSNkZWZpbmUgQUNUX0lGX0xPQ0sgICAgICAgICAgICAgNDQKLSNkZWZpbmUgQUNUX1NUQVJUICAgICAgICAgICAgICAgNDUKLSNkZWZpbmUgQUNUX1NUT1AgICAgICAgICAgICAgICAgNDYKLSNkZWZpbmUgQUNUX0ZBS0VETEUwICAgICAgICAgICAgNDcKLSNkZWZpbmUgQUNUX0ZBS0VIVVAgICAgICAgICAgICAgNDgKLSNkZWZpbmUgQUNUX0ZBS0VTRE9XTiAgICAgICAgICAgNDkKLSNkZWZpbmUgQUNUX1NIVVRET1dOICAgICAgICAgICAgNTAKLSNkZWZpbmUgQUNUX1BST0NfQ0lETU9ERSAgICAgICAgNTEKLSNkZWZpbmUgQUNUX1VNT0RFU0VUICAgICAgICAgICAgNTIKLSNkZWZpbmUgQUNUX0ZBSUxVTU9ERSAgICAgICAgICAgNTMKLSNkZWZpbmUgQUNUX0NNT0RFU0VUICAgICAgICAgICAgNTQKLSNkZWZpbmUgQUNUX0ZBSUxDTU9ERSAgICAgICAgICAgNTUKLSNkZWZpbmUgQUNUX0lGX1ZFUiAgICAgICAgICAgICAgNTYKKyNkZWZpbmUgQUNUX05PVElGWV9CQ19ET1dOCTM4CisjZGVmaW5lIEFDVF9OT1RJRllfQkNfVVAJMzkKKyNkZWZpbmUgQUNUX0RJQUwJCTQwCisjZGVmaW5lIEFDVF9BQ0NFUFQJCTQxCisjZGVmaW5lIEFDVF9QUk9UT19MMgkJNDIKKyNkZWZpbmUgQUNUX0hVUAkJCTQzCisjZGVmaW5lIEFDVF9JRl9MT0NLCQk0NAorI2RlZmluZSBBQ1RfU1RBUlQJCTQ1CisjZGVmaW5lIEFDVF9TVE9QCQk0NgorI2RlZmluZSBBQ1RfRkFLRURMRTAJCTQ3CisjZGVmaW5lIEFDVF9GQUtFSFVQCQk0OAorI2RlZmluZSBBQ1RfRkFLRVNET1dOCQk0OQorI2RlZmluZSBBQ1RfU0hVVERPV04JCTUwCisjZGVmaW5lIEFDVF9QUk9DX0NJRE1PREUJNTEKKyNkZWZpbmUgQUNUX1VNT0RFU0VUCQk1MgorI2RlZmluZSBBQ1RfRkFJTFVNT0RFCQk1MworI2RlZmluZSBBQ1RfQ01PREVTRVQJCTU0CisjZGVmaW5lIEFDVF9GQUlMQ01PREUJCTU1CisjZGVmaW5lIEFDVF9JRl9WRVIJCTU2CiAjZGVmaW5lIEFDVF9DTUQJCQkxMDAKIAogLyogYXQgY29tbWFuZCBzZXF1ZW5jZXMgKi8KLSNkZWZpbmUgU0VRX05PTkUgICAgICAwCi0jZGVmaW5lIFNFUV9JTklUICAgICAgMTAwCi0jZGVmaW5lIFNFUV9ETEUwICAgICAgMjAwCi0jZGVmaW5lIFNFUV9ETEUxICAgICAgMjUwCi0jZGVmaW5lIFNFUV9DSUQgICAgICAgMzAwCi0jZGVmaW5lIFNFUV9OT0NJRCAgICAgMzUwCi0jZGVmaW5lIFNFUV9IVVAgICAgICAgNDAwCi0jZGVmaW5lIFNFUV9ESUFMICAgICAgNjAwCi0jZGVmaW5lIFNFUV9BQ0NFUFQgICAgNzIwCi0jZGVmaW5lIFNFUV9TSFVURE9XTiAgNTAwCi0jZGVmaW5lIFNFUV9DSURNT0RFICAgMTAKLSNkZWZpbmUgU0VRX1VNTU9ERSAgICAxMQorI2RlZmluZSBTRVFfTk9ORQkwCisjZGVmaW5lIFNFUV9JTklUCTEwMAorI2RlZmluZSBTRVFfRExFMAkyMDAKKyNkZWZpbmUgU0VRX0RMRTEJMjUwCisjZGVmaW5lIFNFUV9DSUQJCTMwMAorI2RlZmluZSBTRVFfTk9DSUQJMzUwCisjZGVmaW5lIFNFUV9IVVAJCTQwMAorI2RlZmluZSBTRVFfRElBTAk2MDAKKyNkZWZpbmUgU0VRX0FDQ0VQVAk3MjAKKyNkZWZpbmUgU0VRX1NIVVRET1dOCTUwMAorI2RlZmluZSBTRVFfQ0lETU9ERQkxMAorI2RlZmluZSBTRVFfVU1NT0RFCTExCiAKIAogLy8gMTAwOiBpbml0LCAyMDA6IGRsZTAsIDI1MDpkbGUxLCAzMDA6IGdldCBjaWQgKGRpYWwpLCAzNTA6ICJodXAiIChubyBjaWQpLCA0MDA6IGh1cCwgNTAwOiByZXNldCwgNjAwOiBkaWFsLCA3MDA6IHJpbmcKQEAgLTE3NSw3ICsxNzEsNyBAQAogCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QUNUX1RJTUVPVVR9fSwKIAogCXtSU1BfSU5JVCwgICAgIC0xLCAtMSxTRVFfSU5JVCwgICAgICAgICAgIDEwMCwgSU5JVF9USU1FT1VULAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FDVF9USU1FT1VUfX0sICAgICAgICAgICAgICAgIC8qIHdhaXQgdW50aWwgZGV2aWNlIGlzIHJlYWR5ICovCisJCQkJCQkJICB7QUNUX1RJTUVPVVR9fSwgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCBkZXZpY2UgaXMgcmVhZHkgKi8KIAogCXtFVl9USU1FT1VULCAgMTAwLDEwMCwgLTEsICAgICAgICAgICAgICAgIDEwMSwgMywgezB9LCAgICAgICAgICAgICAiWlxyIn0sICAgICAgIC8qIGRldmljZSBpbiB0cmFuc3BhcmVudCBtb2RlPyB0cnkgdG8gaW5pdGlhbGl6ZSBpdC4gKi8KIAl7UlNQX09LLCAgICAgIDEwMSwxMDMsIC0xLCAgICAgICAgICAgICAgICAxMjAsIDUsIHtBQ1RfR0VUU1RSSU5HfSwgIitHTVJcciJ9LCAgICAvKiBnZXQgdmVyc2lvbiAqLwpAQCAtMTkwLDggKzE4Niw4IEBACiAJe1JTUF9FUlJPUiwgICAxMDgsMTA4LCAtMSwgICAgICAgICAgICAgICAgICAwLCAwLCB7QUNUX0ZBSUxJTklUfX0sCiAKIAl7RVZfVElNRU9VVCwgIDEwOCwxMDgsIC0xLCAgICAgICAgICAgICAgICAxMDUsIDIsIHtBQ1RfU0VURExFMCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1RfSFVQTU9ERU0sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNUX1RJTUVPVVR9fSwgICAgICAgICAgICAgICAgLyogc3RpbGwgdGltZW91dCA9PiBjb25uZWN0aW9uIGluIHVuaW1vZGVtIG1vZGU/ICovCisJCQkJCQkJICAgQUNUX0hVUE1PREVNLAorCQkJCQkJCSAgIEFDVF9USU1FT1VUfX0sICAgICAgICAgICAgICAgIC8qIHN0aWxsIHRpbWVvdXQgPT4gY29ubmVjdGlvbiBpbiB1bmltb2RlbSBtb2RlPyAqLwogCXtFVl9USU1FT1VULCAgMTA1LDEwNSwgLTEsICAgICAgICAgICAgICAgIDEwMywgNSwgezB9LCAgICAgICAgICAgICAiWlxyIn0sCiAKIAl7UlNQX0VSUk9SLCAgIDEwMiwxMDIsIC0xLCAgICAgICAgICAgICAgICAxMDcsIDUsIHswfSwgICAgICAgICAgICAgIl5HRVRQUkVcciJ9LCAvKiBFUlJPUiBvbiBBVFogPT4gbWF5YmUgaW4gY29uZmlnIG1vZGU/ICovCkBAIC0zNzcsNiArMzczLDkgQEAKIAogCXtFVl9USU1FT1VULCAgNzUwLDc1MCwgLTEsICAgICAgICAgICAgICAgICAgMCwgMCwge0FDVF9DT05OVElNRU9VVH19LAogCisJLyogQiBjaGFubmVsIGNsb3NlZCAoZ2VuZXJhbCBjYXNlKSAqLworCXtFVl9CQ19DTE9TRUQsIC0xLCAtMSwgLTEsICAgICAgICAgICAgICAgICAtMSwtMSwge0FDVF9OT1RJRllfQkNfRE9XTn19LCAvL0ZJWE1FCisKIAkvKiBtaXNjLiAqLwogCXtFVl9QUk9UT19MMiwgIC0xLCAtMSwgLTEsICAgICAgICAgICAgICAgICAtMSwtMSwge0FDVF9QUk9UT19MMn19LCAvL0ZJWE1FCiAKQEAgLTM5Myw3ICszOTIsNyBAQAogCiAKICNpZiAwCi1zdGF0aWMgc3RydWN0IHJlcGx5X3QgdGFiX25vY2lkW109IC8qIG5vIGRsZSBtb2RlICovIC8vRklYTUUgYWVuZGVydW5nZW4gdWViZXJuZWhtZW4KK3N0YXRpYyBzdHJ1Y3QgcmVwbHlfdCB0YWJfbm9jaWRbXT0gLyogbm8gZGxlIG1vZGUgKi8gLy9GSVhNRQogewogCS8qIHJlc3BfY29kZSwgbWluX0NvblN0YXRlLCBtYXhfQ29uU3RhdGUsIHBhcmFtZXRlciwgbmV3X0NvblN0YXRlLCB0aW1lb3V0LCBhY3Rpb24sIGNvbW1hbmQgKi8KIApAQCAtNDAxLDcgKzQwMCw3IEBACiAJe1JTUF9MQVNULDAsMCwwLDAsMCwwfQogfTsKIAotc3RhdGljIHN0cnVjdCByZXBseV90IHRhYl9jaWRbXSA9IC8qIG5vIGRsZSBtb2RlICovIC8vRklYTUUgYWVuZGVydW5nZW4gdWViZXJuZWhtZW4KK3N0YXRpYyBzdHJ1Y3QgcmVwbHlfdCB0YWJfY2lkW10gPSAvKiBubyBkbGUgbW9kZSAqLyAvL0ZJWE1FCiB7CiAJLyogcmVzcF9jb2RlLCBtaW5fQ29uU3RhdGUsIG1heF9Db25TdGF0ZSwgcGFyYW1ldGVyLCBuZXdfQ29uU3RhdGUsIHRpbWVvdXQsIGFjdGlvbiwgY29tbWFuZCAqLwogCkBAIC00MTIsMzAgKzQxMSwzMCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc3BfdHlwZV90IHJlc3BfdHlwZVtdPQogewotCS8qeyIiLCAgICAgICAgICBSU1BfRU1QVFksICBSVF9OT1RISU5HfSwqLwotCXsiT0siLCAgICAgICAgUlNQX09LLCAgICAgUlRfTk9USElOR30sCi0JeyJFUlJPUiIsICAgICBSU1BfRVJST1IsICBSVF9OT1RISU5HfSwKLQl7IlpTQVUiLCAgICAgIFJTUF9aU0FVLCAgIFJUX1pTQVV9LAotCXsiWkNBVSIsICAgICAgUlNQX1pDQVUsICAgUlRfWkNBVX0sCi0JeyJSSU5HIiwgICAgICBSU1BfUklORywgICBSVF9SSU5HfSwKLQl7IlpHQ0kiLCAgICAgIFJTUF9aR0NJLCAgIFJUX05VTUJFUn0sCi0JeyJaVkxTIiwgICAgICBSU1BfWlZMUywgICBSVF9OVU1CRVJ9LAotCXsiWkNUUCIsICAgICAgUlNQX1pDVFAsICAgUlRfTlVNQkVSfSwKLQl7IlpETEUiLCAgICAgIFJTUF9aRExFLCAgIFJUX05VTUJFUn0sCi0JeyJaQ0ZHVCIsICAgICBSU1BfWkNGR1QsICBSVF9OVU1CRVJ9LAotCXsiWkNDUiIsICAgICAgUlNQX1pDQ1IsICAgUlRfTlVNQkVSfSwKLQl7IlpNV0kiLCAgICAgIFJTUF9aTVdJLCAgIFJUX05VTUJFUn0sCi0JeyJaSExDIiwgICAgICBSU1BfWkhMQywgICBSVF9TVFJJTkd9LAotCXsiWkJDIiwgICAgICAgUlNQX1pCQywgICAgUlRfU1RSSU5HfSwKLQl7Ik5NQlIiLCAgICAgIFJTUF9OTUJSLCAgIFJUX1NUUklOR30sCi0JeyJaQ1BOIiwgICAgICBSU1BfWkNQTiwgICBSVF9TVFJJTkd9LAotCXsiWkNPTiIsICAgICAgUlNQX1pDT04sICAgUlRfU1RSSU5HfSwKLQl7IlpBT0MiLCAgICAgIFJTUF9aQU9DLCAgIFJUX1NUUklOR30sCi0JeyJaQ1NUUiIsICAgICBSU1BfWkNTVFIsICBSVF9TVFJJTkd9LAotCXsiWkNGRyIsICAgICAgUlNQX1pDRkcsICAgUlRfSEVYfSwKLQl7IlpMT0ciLCAgICAgIFJTUF9aTE9HLCAgIFJUX05PVEhJTkd9LAotCXsiWkFCSU5GTyIsICAgUlNQX1pBQklORk8sIFJUX05PVEhJTkd9LAotCXsiWlNNTFNUQ0hHIiwgUlNQX1pTTUxTVENIRywgUlRfTk9USElOR30sCisJLyp7IiIsCQlSU1BfRU1QVFksCVJUX05PVEhJTkd9LCovCisJeyJPSyIsCQlSU1BfT0ssCQlSVF9OT1RISU5HfSwKKwl7IkVSUk9SIiwJUlNQX0VSUk9SLAlSVF9OT1RISU5HfSwKKwl7IlpTQVUiLAlSU1BfWlNBVSwJUlRfWlNBVX0sCisJeyJaQ0FVIiwJUlNQX1pDQVUsCVJUX1pDQVV9LAorCXsiUklORyIsCVJTUF9SSU5HLAlSVF9SSU5HfSwKKwl7IlpHQ0kiLAlSU1BfWkdDSSwJUlRfTlVNQkVSfSwKKwl7IlpWTFMiLAlSU1BfWlZMUywJUlRfTlVNQkVSfSwKKwl7IlpDVFAiLAlSU1BfWkNUUCwJUlRfTlVNQkVSfSwKKwl7IlpETEUiLAlSU1BfWkRMRSwJUlRfTlVNQkVSfSwKKwl7IlpDRkdUIiwJUlNQX1pDRkdULAlSVF9OVU1CRVJ9LAorCXsiWkNDUiIsCVJTUF9aQ0NSLAlSVF9OVU1CRVJ9LAorCXsiWk1XSSIsCVJTUF9aTVdJLAlSVF9OVU1CRVJ9LAorCXsiWkhMQyIsCVJTUF9aSExDLAlSVF9TVFJJTkd9LAorCXsiWkJDIiwJCVJTUF9aQkMsCVJUX1NUUklOR30sCisJeyJOTUJSIiwJUlNQX05NQlIsCVJUX1NUUklOR30sCisJeyJaQ1BOIiwJUlNQX1pDUE4sCVJUX1NUUklOR30sCisJeyJaQ09OIiwJUlNQX1pDT04sCVJUX1NUUklOR30sCisJeyJaQU9DIiwJUlNQX1pBT0MsCVJUX1NUUklOR30sCisJeyJaQ1NUUiIsCVJTUF9aQ1NUUiwJUlRfU1RSSU5HfSwKKwl7IlpDRkciLAlSU1BfWkNGRywJUlRfSEVYfSwKKwl7IlpMT0ciLAlSU1BfWkxPRywJUlRfTk9USElOR30sCisJeyJaQUJJTkZPIiwJUlNQX1pBQklORk8sCVJUX05PVEhJTkd9LAorCXsiWlNNTFNUQ0hHIiwJUlNQX1pTTUxTVENIRywJUlRfTk9USElOR30sCiAJe05VTEwsMCwwfQogfTsKIApAQCAtNDQ2LDkgKzQ0NSw3IEBACiB7CiAJaW50IHYgPSAtMTsKIAotCUlGTlVMTFJFVFZBTChwLCAtMSk7Ci0KLQlkYmcoREVCVUdfVFJBTlNDTUQsICJzdHJpbmc6ICVzIiwgcCk7CisJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgInN0cmluZzogJXMiLCBwKTsKIAogCXdoaWxlICgqcCA+PSAnMCcgJiYgKnAgPD0gJzknKQogCQl2ID0gKCh2IDwgMCkgPyAwIDogKHYgKiAxMCkpICsgKGludCkgKCgqcCsrKSAtICcwJyk7CkBAIC00NjUsOSArNDYyLDcgQEAKIAlpbnQgdiA9IDA7CiAJaW50IGM7CiAKLQlJRk5VTExSRVRWQUwocCwgLTEpOwotCi0JZGJnKERFQlVHX1RSQU5TQ01ELCAic3RyaW5nOiAlcyIsIHApOworCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJzdHJpbmc6ICVzIiwgcCk7CiAKIAlpZiAoISpwKQogCQlyZXR1cm4gLTE7CkBAIC00OTAsMTQgKzQ4NSw2IEBACiAJcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXdfaW5kZXgoYXRvbWljX3QgKmluZGV4LCBpbnQgbWF4KQotewotCWlmIChhdG9taWNfcmVhZChpbmRleCkgPT0gbWF4KQkvL0ZJWE1FIHJhY2U/Ci0JCWF0b21pY19zZXQoaW5kZXgsIDApOwotCWVsc2UKLQkJYXRvbWljX2luYyhpbmRleCk7Ci19Ci0KIC8qIHJldHJpZXZlIENJRCBmcm9tIHBhcnNlZCByZXNwb25zZQogICogcmV0dXJucyAwIGlmIG5vIENJRCwgLTEgaWYgaW52YWxpZCBDSUQsIG9yIENJRCB2YWx1ZSAxLi42NTUzNQogICovCkBAIC01MzYsMTYgKzUyMywxNCBAQAogCWludCBjaWQ7CiAJaW50IHJhd3N0cmluZzsKIAotCUlGTlVMTFJFVChjcyk7Ci0KIAlsZW4gPSBjcy0+Y2J5dGVzOwogCWlmICghbGVuKSB7CiAJCS8qIGlnbm9yZSBhZGRpdGlvbmFsIExGcy9DUnMgKE0xMHggY29uZmlnIG1vZGUgb3IgY3gxMDApICovCi0JCWRiZyhERUJVR19NQ01ELCAic2tpcHBlZCBFT0wgWyUwMlhdIiwgY3MtPnJlc3BkYXRhW2xlbl0pOworCQlnaWdfZGJnKERFQlVHX01DTUQsICJza2lwcGVkIEVPTCBbJTAyWF0iLCBjcy0+cmVzcGRhdGFbbGVuXSk7CiAJCXJldHVybjsKIAl9CiAJY3MtPnJlc3BkYXRhW2xlbl0gPSAwOwotCWRiZyhERUJVR19UUkFOU0NNRCwgInJhdyBzdHJpbmc6ICclcyciLCBjcy0+cmVzcGRhdGEpOworCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJyYXcgc3RyaW5nOiAnJXMnIiwgY3MtPnJlc3BkYXRhKTsKIAlhcmd2WzBdID0gY3MtPnJlc3BkYXRhOwogCXBhcmFtcyA9IDE7CiAJaWYgKGNzLT5hdF9zdGF0ZS5nZXRzdHJpbmcpIHsKQEAgLTU2MSw3ICs1NDYsOCBAQAogCQkJY2FzZSAnLCc6CiAJCQljYXNlICc9JzoKIAkJCQlpZiAocGFyYW1zID4gTUFYX1JFQ19QQVJBTVMpIHsKLQkJCQkJd2FybigidG9vIG1hbnkgcGFyYW1ldGVycyBpbiByZXNwb25zZSIpOworCQkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgICAidG9vIG1hbnkgcGFyYW1ldGVycyBpbiByZXNwb25zZVxuIik7CiAJCQkJCS8qIG5lZWQgbGFzdCBwYXJhbWV0ZXIgKG1pZ2h0IGJlIENJRCkgKi8KIAkJCQkJcGFyYW1zLS07CiAJCQkJfQpAQCAtNTcyLDMzICs1NTgsMzMgQEAKIAkJY2lkID0gcGFyYW1zID4gMSA/IGNpZF9vZl9yZXNwb25zZShhcmd2W3BhcmFtcy0xXSkgOiAwOwogCQlpZiAoY2lkIDwgMCkgewogCQkJZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIFJTUF9JTlZBTCwKLQkJCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwpOworCQkJCQkgIE5VTEwsIDAsIE5VTEwpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJZm9yIChqID0gMTsgaiA8IHBhcmFtczsgKytqKQogCQkJYXJndltqXVstMV0gPSAwOwogCi0JCWRiZyhERUJVR19UUkFOU0NNRCwgIkNNRCByZWNlaXZlZDogJXMiLCBhcmd2WzBdKTsKKwkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIkNNRCByZWNlaXZlZDogJXMiLCBhcmd2WzBdKTsKIAkJaWYgKGNpZCkgewogCQkJLS1wYXJhbXM7Ci0JCQlkYmcoREVCVUdfVFJBTlNDTUQsICJDSUQ6ICVzIiwgYXJndltwYXJhbXNdKTsKKwkJCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJDSUQ6ICVzIiwgYXJndltwYXJhbXNdKTsKIAkJfQotCQlkYmcoREVCVUdfVFJBTlNDTUQsICJhdmFpbGFibGUgcGFyYW1zOiAlZCIsIHBhcmFtcyAtIDEpOworCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiYXZhaWxhYmxlIHBhcmFtczogJWQiLCBwYXJhbXMgLSAxKTsKIAkJZm9yIChqID0gMTsgaiA8IHBhcmFtczsgaisrKQotCQkJZGJnKERFQlVHX1RSQU5TQ01ELCAicGFyYW0gJWQ6ICVzIiwgaiwgYXJndltqXSk7CisJCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAicGFyYW0gJWQ6ICVzIiwgaiwgYXJndltqXSk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7Ci0JaGVhZCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfaGVhZCk7Ci0JdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJaGVhZCA9IGNzLT5ldl9oZWFkOworCXRhaWwgPSBjcy0+ZXZfdGFpbDsKIAogCWFib3J0ID0gMTsKIAljdXJhcmcgPSAwOwogCXdoaWxlIChjdXJhcmcgPCBwYXJhbXMpIHsKIAkJbmV4dCA9ICh0YWlsICsgMSkgJSBNQVhfRVZFTlRTOwogCQlpZiAodW5saWtlbHkobmV4dCA9PSBoZWFkKSkgewotCQkJZXJyKCJldmVudCBxdWV1ZSBmdWxsIik7CisJCQlkZXZfZXJyKGNzLT5kZXYsICJldmVudCBxdWV1ZSBmdWxsXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTYxOSw4ICs2MDUsOSBAQAogCiAJCQlpZiAoIXJ0LT5yZXNwb25zZSkgewogCQkJCWV2ZW50LT50eXBlID0gUlNQX1VOS05PV047Ci0JCQkJd2FybigidW5rbm93biBtb2RlbSByZXNwb25zZTogJXMiLAotCQkJCSAgICAgYXJndltjdXJhcmddKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgInVua25vd24gbW9kZW0gcmVzcG9uc2U6ICVzXG4iLAorCQkJCQkgYXJndltjdXJhcmddKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNjM2LDcgKzYyMyw4IEBACiAJCQlicmVhazsKIAkJY2FzZSBSVF9SSU5HOgogCQkJaWYgKCFjaWQpIHsKLQkJCQllcnIoInJlY2VpdmVkIFJJTkcgd2l0aG91dCBDSUQhIik7CisJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkicmVjZWl2ZWQgUklORyB3aXRob3V0IENJRCFcbiIpOwogCQkJCWV2ZW50LT50eXBlID0gUlNQX0lOVkFMOwogCQkJCWFib3J0ID0gMTsKIAkJCX0gZWxzZSB7CkBAIC02NjQsMjcgKzY1MiwyNSBAQAogCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSBaU0FVX0RJU0NPTk5FQ1RfUkVROwogCQkJZWxzZSB7CiAJCQkJZXZlbnQtPnBhcmFtZXRlciA9IFpTQVVfVU5LTk9XTjsKLQkJCQl3YXJuKCIlczogdW5rbm93biBwYXJhbWV0ZXIgJXMgYWZ0ZXIgWlNBVSIsCi0JCQkJICAgICBfX2Z1bmNfXywgYXJndltjdXJhcmddKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkiJXM6IHVua25vd24gcGFyYW1ldGVyICVzIGFmdGVyIFpTQVVcbiIsCisJCQkJCSBfX2Z1bmNfXywgYXJndltjdXJhcmddKTsKIAkJCX0KIAkJCSsrY3VyYXJnOwogCQkJYnJlYWs7CiAJCWNhc2UgUlRfU1RSSU5HOgogCQkJaWYgKGN1cmFyZyA8IHBhcmFtcykgewotCQkJCWxlbiA9IHN0cmxlbihhcmd2W2N1cmFyZ10pICsgMTsKLQkJCQlldmVudC0+cHRyID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwotCQkJCWlmIChldmVudC0+cHRyKQotCQkJCQltZW1jcHkoZXZlbnQtPnB0ciwgYXJndltjdXJhcmddLCBsZW4pOwotCQkJCWVsc2UKLQkJCQkJZXJyKCJubyBtZW1vcnkgZm9yIHN0cmluZyEiKTsKKwkJCQlldmVudC0+cHRyID0ga3N0cmR1cChhcmd2W2N1cmFyZ10sIEdGUF9BVE9NSUMpOworCQkJCWlmICghZXZlbnQtPnB0cikKKwkJCQkJZGV2X2Vycihjcy0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJKytjdXJhcmc7CiAJCQl9CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCWlmICghZXZlbnQtPnB0cikKLQkJCQlkYmcoREVCVUdfQ01ELCAic3RyaW5nPT1OVUxMIik7CisJCQkJZ2lnX2RiZyhERUJVR19DTUQsICJzdHJpbmc9PU5VTEwiKTsKIAkJCWVsc2UKLQkJCQlkYmcoREVCVUdfQ01ELAotCQkJCSAgICAic3RyaW5nPT0lcyIsIChjaGFyICopIGV2ZW50LT5wdHIpOworCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAic3RyaW5nPT0lcyIsCisJCQkJCShjaGFyICopIGV2ZW50LT5wdHIpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBSVF9aQ0FVOgpAQCAtNjk0LDcgKzY4MCw3IEBACiAJCQkJaiA9IGlzZG5fZ2V0aGV4KGFyZ3ZbY3VyYXJnICsgMV0pOwogCQkJCWlmIChpID49IDAgJiYgaSA8IDI1NiAmJiBqID49IDAgJiYgaiA8IDI1NikKIAkJCQkJZXZlbnQtPnBhcmFtZXRlciA9ICh1bnNpZ25lZCkgaSA8PCA4Ci0JCQkJCSAgICAgICAgICAgICAgICAgICB8IGo7CisJCQkJCQkJICAgfCBqOwogCQkJCWN1cmFyZyArPSAyOwogCQkJfSBlbHNlCiAJCQkJY3VyYXJnID0gcGFyYW1zIC0gMTsKQEAgLTcxMiw3ICs2OTgsNyBAQAogCQkJfSBlbHNlCiAJCQkJZXZlbnQtPnBhcmFtZXRlciA9IC0xOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCi0JCQlkYmcoREVCVUdfQ01ELCAicGFyYW1ldGVyPT0lZCIsIGV2ZW50LT5wYXJhbWV0ZXIpOworCQkJZ2lnX2RiZyhERUJVR19DTUQsICJwYXJhbWV0ZXI9PSVkIiwgZXZlbnQtPnBhcmFtZXRlcik7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQl9CkBAIC03MjQsMTIgKzcxMCwxMyBAQAogCQkJYnJlYWs7CiAJfQogCi0JYXRvbWljX3NldCgmY3MtPmV2X3RhaWwsIHRhaWwpOworCWNzLT5ldl90YWlsID0gdGFpbDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGN1cmFyZyAhPSBwYXJhbXMpCi0JCWRiZyhERUJVR19BTlksICJpbnZhbGlkIG51bWJlciBvZiBwcm9jZXNzZWQgcGFyYW1ldGVyczogJWQvJWQiLAotCQkgICAgY3VyYXJnLCBwYXJhbXMpOworCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCSJpbnZhbGlkIG51bWJlciBvZiBwcm9jZXNzZWQgcGFyYW1ldGVyczogJWQvJWQiLAorCQkJY3VyYXJnLCBwYXJhbXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9oYW5kbGVfbW9kZW1fcmVzcG9uc2UpOwogCkBAIC03MzksMjMgKzcyNiwxOSBAQAogc3RhdGljIHZvaWQgZGlzY29ubmVjdChzdHJ1Y3QgYXRfc3RhdGVfdCAqKmF0X3N0YXRlX3ApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKKwlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9ICgqYXRfc3RhdGVfcCktPmJjczsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9ICgqYXRfc3RhdGVfcCktPmNzOwogCi0JSUZOVUxMUkVUKGF0X3N0YXRlX3ApOwotCUlGTlVMTFJFVCgqYXRfc3RhdGVfcCk7Ci0JYmNzID0gKCphdF9zdGF0ZV9wKS0+YmNzOwotCWNzID0gKCphdF9zdGF0ZV9wKS0+Y3M7Ci0JSUZOVUxMUkVUKGNzKTsKLQotCW5ld19pbmRleCgmKCphdF9zdGF0ZV9wKS0+c2VxX2luZGV4LCBNQVhfU0VRX0lOREVYKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkrKygqYXRfc3RhdGVfcCktPnNlcV9pbmRleDsKIAogCS8qIHJldmVydCB0byBzZWxlY3RlZCBpZGxlIG1vZGUgKi8KLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y2lkbW9kZSkpIHsKKwlpZiAoIWNzLT5jaWRtb2RlKSB7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX1VNTU9ERTsKIAkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCi0JCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfVU1NT0RFIik7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoYmNzKSB7CiAJCS8qIEIgY2hhbm5lbCBhc3NpZ25lZDogaW52b2tlIGhhcmR3YXJlIHNwZWNpZmljIGhhbmRsZXIgKi8KQEAgLTc3Nyw3ICs3NjAsNyBAQAogICogVGhlIHN0cnVjdHVyZSBzaG91bGQgYmUgZnJlZWQgYnkgY2FsbGluZyBkaXNjb25uZWN0KCkgYWZ0ZXIgdXNlLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdF9zdGF0ZV90ICpnZXRfZnJlZV9jaGFubmVsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2lkKQorCQkJCQkJICBpbnQgY2lkKQogLyogY2lkczogPjA6IHNpZW1lbnMtY2lkCiAJICAwOiB3aXRob3V0IGNpZAogCSAtMTogbm8gY2lkIGFzc2lnbmVkIHlldApAQCAtODI2LDcgKzgwOSw3IEBACiBzdGF0aWMgdm9pZCBzY2hlZHVsZV9pbml0KHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgc3RhdGUpCiB7CiAJaWYgKGNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzICYgUENfSU5JVCkgewotCQlkYmcoREVCVUdfQ01ELCAibm90IHNjaGVkdWxpbmcgUENfSU5JVCBhZ2FpbiIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIm5vdCBzY2hlZHVsaW5nIFBDX0lOSVQgYWdhaW4iKTsKIAkJcmV0dXJuOwogCX0KIAlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBzdGF0ZSk7CkBAIC04MzQsNTIgKzgxNyw1NiBAQAogCWdpZ2FzZXRfYmxvY2tfY2hhbm5lbHMoY3MpOwogCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0lOSVQ7CiAJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwotCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0lOSVQiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSU5JVCIpOwogfQogCi0vKiBBZGQgIkFUIiB0byBhIGNvbW1hbmQsIGFkZCB0aGUgY2lkLCBkbGUgZW5jb2RlIGl0LCBzZW5kIHRoZSByZXN1bHQgdG8gdGhlIGhhcmR3YXJlLiAqLworLyogQWRkICJBVCIgdG8gYSBjb21tYW5kLCBhZGQgdGhlIGNpZCwgZGxlIGVuY29kZSBpdCwgc2VuZCB0aGUgcmVzdWx0IHRvIHRoZQorICAgaGFyZHdhcmUuICovCiBzdGF0aWMgdm9pZCBzZW5kX2NvbW1hbmQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGNvbnN0IGNoYXIgKmNtZCwgaW50IGNpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGxlLCBnZnBfdCBrbWFsbG9jZmxhZ3MpCisJCQkgaW50IGRsZSwgZ2ZwX3Qga21hbGxvY2ZsYWdzKQogewogCXNpemVfdCBjbWRsZW4sIGJ1ZmxlbjsKIAljaGFyICpjbWRwb3MsICpjbWRidWYsICpjbWR0YWlsOwogCiAJY21kbGVuID0gc3RybGVuKGNtZCk7CiAJYnVmbGVuID0gMTEgKyBjbWRsZW47CisJaWYgKHVubGlrZWx5KGJ1ZmxlbiA8PSBjbWRsZW4pKSB7CisJCWRldl9lcnIoY3MtPmRldiwgImludGVnZXIgb3ZlcmZsb3cgaW4gYnVmbGVuXG4iKTsKKwkJcmV0dXJuOworCX0KIAotCWlmIChsaWtlbHkoYnVmbGVuID4gY21kbGVuKSkgewotCQljbWRidWYgPSBrbWFsbG9jKGJ1Zmxlbiwga21hbGxvY2ZsYWdzKTsKLQkJaWYgKGxpa2VseShjbWRidWYgIT0gTlVMTCkpIHsKLQkJCWNtZHBvcyA9IGNtZGJ1ZiArIDk7Ci0JCQljbWR0YWlsID0gY21kcG9zICsgY21kbGVuOwotCQkJbWVtY3B5KGNtZHBvcywgY21kLCBjbWRsZW4pOworCWNtZGJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBrbWFsbG9jZmxhZ3MpOworCWlmICh1bmxpa2VseSghY21kYnVmKSkgeworCQlkZXZfZXJyKGNzLT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KIAotCQkJaWYgKGNpZCA+IDAgJiYgY2lkIDw9IDY1NTM1KSB7Ci0JCQkJZG8gewotCQkJCQkqLS1jbWRwb3MgPSAnMCcgKyBjaWQgJSAxMDsKLQkJCQkJY2lkIC89IDEwOwotCQkJCQkrK2NtZGxlbjsKLQkJCQl9IHdoaWxlIChjaWQpOwotCQkJfQorCWNtZHBvcyA9IGNtZGJ1ZiArIDk7CisJY21kdGFpbCA9IGNtZHBvcyArIGNtZGxlbjsKKwltZW1jcHkoY21kcG9zLCBjbWQsIGNtZGxlbik7CiAKLQkJCWNtZGxlbiArPSAyOwotCQkJKi0tY21kcG9zID0gJ1QnOwotCQkJKi0tY21kcG9zID0gJ0EnOworCWlmIChjaWQgPiAwICYmIGNpZCA8PSA2NTUzNSkgeworCQlkbyB7CisJCQkqLS1jbWRwb3MgPSAnMCcgKyBjaWQgJSAxMDsKKwkJCWNpZCAvPSAxMDsKKwkJCSsrY21kbGVuOworCQl9IHdoaWxlIChjaWQpOworCX0KIAotCQkJaWYgKGRsZSkgewotCQkJCWNtZGxlbiArPSA0OwotCQkJCSotLWNtZHBvcyA9ICcoJzsKLQkJCQkqLS1jbWRwb3MgPSAweDEwOwotCQkJCSpjbWR0YWlsKysgPSAweDEwOwotCQkJCSpjbWR0YWlsKysgPSAnKSc7Ci0JCQl9CisJY21kbGVuICs9IDI7CisJKi0tY21kcG9zID0gJ1QnOworCSotLWNtZHBvcyA9ICdBJzsKIAotCQkJY3MtPm9wcy0+d3JpdGVfY21kKGNzLCBjbWRwb3MsIGNtZGxlbiwgTlVMTCk7Ci0JCQlrZnJlZShjbWRidWYpOwotCQl9IGVsc2UKLQkJCWVycigibm8gbWVtb3J5IGZvciBjb21tYW5kIGJ1ZmZlciIpOwotCX0gZWxzZQotCQllcnIoIm92ZXJmbG93IGluIGJ1ZmxlbiIpOworCWlmIChkbGUpIHsKKwkJY21kbGVuICs9IDQ7CisJCSotLWNtZHBvcyA9ICcoJzsKKwkJKi0tY21kcG9zID0gMHgxMDsKKwkJKmNtZHRhaWwrKyA9IDB4MTA7CisJCSpjbWR0YWlsKysgPSAnKSc7CisJfQorCisJY3MtPm9wcy0+d3JpdGVfY21kKGNzLCBjbWRwb3MsIGNtZGxlbiwgTlVMTCk7CisJa2ZyZWUoY21kYnVmKTsKIH0KIAogc3RhdGljIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZV9mcm9tX2NpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCkKQEAgLTkxMCw5ICs4OTcsNiBAQAogCiBzdGF0aWMgdm9pZCBiY2hhbm5lbF9kb3duKHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewotCUlGTlVMTFJFVChiY3MpOwotCUlGTlVMTFJFVChiY3MtPmNzKTsKLQogCWlmIChiY3MtPmNoc3RhdGUgJiBDSFNfQl9VUCkgewogCQliY3MtPmNoc3RhdGUgJj0gfkNIU19CX1VQOwogCQlnaWdhc2V0X2k0bF9jaGFubmVsX2NtZChiY3MsIElTRE5fU1RBVF9CSFVQKTsKQEAgLTkzMCwxNiArOTE0LDE1IEBACiAKIHN0YXRpYyB2b2lkIGJjaGFubmVsX3VwKHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewotCUlGTlVMTFJFVChiY3MpOwotCiAJaWYgKCEoYmNzLT5jaHN0YXRlICYgQ0hTX0RfVVApKSB7Ci0JCW5vdGljZSgiJXM6IEQgY2hhbm5lbCBub3QgdXAiLCBfX2Z1bmNfXyk7CisJCWRldl9ub3RpY2UoYmNzLT5jcy0+ZGV2LCAiJXM6IEQgY2hhbm5lbCBub3QgdXBcbiIsIF9fZnVuY19fKTsKIAkJYmNzLT5jaHN0YXRlIHw9IENIU19EX1VQOwogCQlnaWdhc2V0X2k0bF9jaGFubmVsX2NtZChiY3MsIElTRE5fU1RBVF9EQ09OTik7CiAJfQogCiAJaWYgKGJjcy0+Y2hzdGF0ZSAmIENIU19CX1VQKSB7Ci0JCW5vdGljZSgiJXM6IEIgY2hhbm5lbCBhbHJlYWR5IHVwIiwgX19mdW5jX18pOworCQlkZXZfbm90aWNlKGJjcy0+Y3MtPmRldiwgIiVzOiBCIGNoYW5uZWwgYWxyZWFkeSB1cFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTQ3LDE3ICs5MzAsMjEgQEAKIAlnaWdhc2V0X2k0bF9jaGFubmVsX2NtZChiY3MsIElTRE5fU1RBVF9CQ09OTik7CiB9CiAKLXN0YXRpYyB2b2lkIHN0YXJ0X2RpYWwoc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCB2b2lkICpkYXRhLCBpbnQgc2VxX2luZGV4KQorc3RhdGljIHZvaWQgc3RhcnRfZGlhbChzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNlcV9pbmRleCkKIHsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IGF0X3N0YXRlLT5iY3M7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBhdF9zdGF0ZS0+Y3M7CiAJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYmNzLT5jaHN0YXRlIHw9IENIU19OT1RJRllfTEw7Ci0JLy9hdG9taWNfc2V0KCZiY3MtPnN0YXR1cywgQkNTX0lOSVQpOwogCi0JaWYgKGF0b21pY19yZWFkKCZhdF9zdGF0ZS0+c2VxX2luZGV4KSAhPSBzZXFfaW5kZXgpCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKGF0X3N0YXRlLT5zZXFfaW5kZXggIT0gc2VxX2luZGV4KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWdvdG8gZXJyb3I7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR2YWwgPSBnaWdhc2V0X2lzZG5fc2V0dXBfZGlhbChhdF9zdGF0ZSwgZGF0YSk7CiAJaWYgKHJldHZhbCAhPSAwKQpAQCAtOTY1LDIwICs5NTIsMTQgQEAKIAogCiAJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lEOwotCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRCIpOwotLy8jaWZkZWYgR0lHX01BWUlOSVRPTkRJQUwKLS8vCWlmIChhdG9taWNfcmVhZCgmY3MtPk1TdGF0ZSkgPT0gTVNfVU5LTk9XTikgewotLy8JCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0lOSVQ7Ci0vLwkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSU5JVCIpOwotLy8JfQotLy8jZW5kaWYKLQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKKwlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lEIik7CisJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwogCXJldHVybjsKIAogZXJyb3I6CiAJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfTk9DSUQ7Ci0JZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfTk9DSUQiKTsKLQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKKwlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfTk9DSUQiKTsKKwlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJcmV0dXJuOwogfQogCkBAIC05OTEsMTMgKzk3MiwxMyBAQAogCiAJaWYgKHJldHZhbCA9PSAwKSB7CiAJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0FDQ0VQVDsKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQUNDRVBUIik7Ci0JCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQUNDRVBUIik7CisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAl9IGVsc2UgewogCQkvL0ZJWE1FCiAJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0hVUDsKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSFVQIik7Ci0JCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSFVQIik7CisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAl9CiB9CiAKQEAgLTEwMDgsOSArOTg5LDEwIEBACiAJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpCiAJCXNjaGVkdWxlX2luaXQoY3MsIE1TX0lOSVQpOwogCisJY3MtPmlzZG5fdXAgPSAxOwogCWdpZ2FzZXRfaTRsX2NtZChjcywgSVNETl9TVEFUX1JVTik7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogbm90IGluIGxvY2tlZCBtb2RlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSAyOiBvbmx5IGFmdGVyIGluaXQgc2VxdWVuY2UKKwkJCQkJLy8gRklYTUU6IG5vdCBpbiBsb2NrZWQgbW9kZQorCQkJCQkvLyBGSVhNRSAyOiBvbmx5IGFmdGVyIGluaXQgc2VxdWVuY2UKIAogCWNzLT53YWl0aW5nID0gMDsKIAl3YWtlX3VwKCZjcy0+d2FpdHF1ZXVlKTsKQEAgLTEwMjMsNiArMTAwNSwxMiBAQAogCQlhdG9taWNfc2V0KCZjcy0+bW9kZSwgTV9VTktOT1dOKTsKIAl9CiAKKwkvKiBUZWxsIHRoZSBMTCB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IGF2YWlsYWJsZSAuLiAqLworCWlmIChjcy0+aXNkbl91cCkgeworCQljcy0+aXNkbl91cCA9IDA7CisJCWdpZ2FzZXRfaTRsX2NtZChjcywgSVNETl9TVEFUX1NUT1ApOworCX0KKwogCS8qIFRoZSByZXN0IGlzIGRvbmUgYnkgY2xlYW51cF9jcyAoKSBpbiB1c2VyIG1vZGUuICovCiAKIAljcy0+Y21kX3Jlc3VsdCA9IC1FTk9ERVY7CkBAIC0xMDM3LDE1ICsxMDI1LDIwIEBACiAJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSA9PSBNU19SRUFEWSkgewogCQlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19TSFVURE9XTik7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX1NIVVRET1dOOwotCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfU0hVVERPV04iKTsgLy9GSVhNRQotCQkvL2dpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOyAvL0ZJWE1FCisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1NIVVRET1dOIik7CiAJfSBlbHNlCiAJCWZpbmlzaF9zaHV0ZG93bihjcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3N0b3Aoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWNzLT5jb25uZWN0ZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisKIAlkb19zaHV0ZG93bihjcyk7CiB9CiAKQEAgLTEwNjksOSArMTA2MiwxMSBAQAogCQkJcmV0dXJuIDA7CiAKIAlpZiAoY2hhbm5lbCA8IDApCi0JCXdhcm4oIkNvdWxkIG5vdCBlbnRlciBjaWQgbW9kZS4gUmVpbml0IGRldmljZSBhbmQgdHJ5IGFnYWluLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkgICAgIkNvdWxkIG5vdCBlbnRlciBjaWQgbW9kZS4gUmVpbml0IGRldmljZSBhbmQgdHJ5IGFnYWluLlxuIik7CiAJZWxzZSB7Ci0JCXdhcm4oIkNvdWxkIG5vdCBnZXQgYSBjYWxsIGlkLiBSZWluaXQgZGV2aWNlIGFuZCB0cnkgYWdhaW4uIik7CisJCWRldl93YXJuKGNzLT5kZXYsCisJCSAgICAiQ291bGQgbm90IGdldCBhIGNhbGwgaWQuIFJlaW5pdCBkZXZpY2UgYW5kIHRyeSBhZ2Fpbi5cbiIpOwogCQljcy0+YmNzW2NoYW5uZWxdLmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lEOwogCX0KIAlzY2hlZHVsZV9pbml0KGNzLCBNU19JTklUKTsKQEAgLTEwNzksNyArMTA3NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYXRfc3RhdGVfaW52YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqdGVzdF9wdHIpCisJCQkgICAgc3RydWN0IGF0X3N0YXRlX3QgKnRlc3RfcHRyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhbm5lbDsKQEAgLTExMTYsNyArMTExMSw3IEBACiAJY2FzZSBJQ0FMTF9BQ0NFUFQ6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiaW50ZXJuYWwgZXJyb3I6IGRpc3Bvc2l0aW9uPSVkIiwgcmV0dmFsKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiaW50ZXJuYWwgZXJyb3I6IGRpc3Bvc2l0aW9uPSVkXG4iLCByZXR2YWwpOwogCQkvKiAtLXYtLSBmYWxsIHRocm91Z2ggLS12LS0gKi8KIAljYXNlIElDQUxMX0lHTk9SRToKIAljYXNlIElDQUxMX1JFSkVDVDoKQEAgLTExNjAsNyArMTE1NSw2IEBACiAJbW9kZSA9IGF0b21pY19yZWFkKCZjcy0+bW9kZSk7CiAJYXRvbWljX3NldCgmY3MtPm1zdGF0ZSwgTVNfTE9DS0VEKTsKIAlhdG9taWNfc2V0KCZjcy0+bW9kZSwgTV9VTktOT1dOKTsKLQkvL0ZJWE1FIHJlc2V0IGNhcmQgc3RhdGUgLyBhdCBzdGF0ZXMgLyBiY3Mgc3RhdGVzCiAKIAlyZXR1cm4gbW9kZTsKIH0KQEAgLTExNzMsOCArMTE2Nyw3IEBACiAJYXRvbWljX3NldCgmY3MtPm1zdGF0ZSwgTVNfVU5JTklUSUFMSVpFRCk7CiAJYXRvbWljX3NldCgmY3MtPm1vZGUsIE1fVU5LTk9XTik7CiAJZ2lnYXNldF9mcmVlX2NoYW5uZWxzKGNzKTsKLQkvL0ZJWE1FIHJlc2V0IGNhcmQgc3RhdGUgLyBhdCBzdGF0ZXMgLyBiY3Mgc3RhdGVzCi0JaWYgKGF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkKKwlpZiAoY3MtPmNvbm5lY3RlZCkKIAkJc2NoZWR1bGVfaW5pdChjcywgTVNfSU5JVCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEyMDMsMjEgKzExOTYsMjMgQEAKIAkJYXRfc3RhdGUtPndhaXRpbmcgPSAxOwogCQlicmVhazsKIAljYXNlIEFDVF9JTklUOgotCQkvL0ZJWE1FIHNldHVwIGV2ZXJ5dGhpbmcKIAkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJj0gflBDX0lOSVQ7CiAJCWNzLT5jdXJfYXRfc2VxID0gU0VRX05PTkU7CiAJCWF0b21pY19zZXQoJmNzLT5tb2RlLCBNX1VOSU1PREVNKTsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNpZG1vZGUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoIWNzLT5jaWRtb2RlKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQkJZ2lnYXNldF9mcmVlX2NoYW5uZWxzKGNzKTsKIAkJCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX1JFQURZKTsKIAkJCWJyZWFrOwogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRE1PREU7Ci0JCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQotCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfRkFJTElOSVQ6Ci0JCXdhcm4oIkNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSBkZXZpY2UuIik7CisJCWRldl93YXJuKGNzLT5kZXYsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLlxuIik7CiAJCWNzLT5kbGUgPSAwOwogCQlpbml0X2ZhaWxlZChjcywgTV9VTktOT1dOKTsKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKQEAgLTEyNzMsOCArMTI2OCw4IEBACiAJCS8qIGdldCBmcmVzaCBBVCBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIG5ldyBDSUQgKi8KIAkJYXRfc3RhdGUyID0gZ2V0X2ZyZWVfY2hhbm5lbChjcywgZXYtPnBhcmFtZXRlcik7CiAJCWlmICghYXRfc3RhdGUyKSB7Ci0JCQl3YXJuKCJSSU5HIGlnbm9yZWQ6ICIKLQkJCSAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsIHN0cnVjdHVyZSIpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCSJSSU5HIGlnbm9yZWQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsIHN0cnVjdHVyZVxuIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzAyLDcgKzEyOTcsNyBAQAogCQlhdF9zdGF0ZSA9ICpwX2F0X3N0YXRlOwogCQlicmVhazsKIAljYXNlIEFDVF9GQUlMU0RPV046Ci0JCXdhcm4oIkNvdWxkIG5vdCBzaHV0IGRvd24gdGhlIGRldmljZS4iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIkNvdWxkIG5vdCBzaHV0IGRvd24gdGhlIGRldmljZS5cbiIpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFDVF9GQUtFU0RPV046CiAJY2FzZSBBQ1RfU0RPV046CkBAIC0xMzU1LDcgKzEzNTAsNyBAQAogCQlicmVhazsKIAljYXNlIEFDVF9BQk9SVEhVUDoKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKLQkJd2FybigiQ291bGQgbm90IGhhbmcgdXAuIik7CisJCWRldl93YXJuKGNzLT5kZXYsICJDb3VsZCBub3QgaGFuZyB1cC5cbiIpOwogCQlhdF9zdGF0ZS0+Y2lkID0gLTE7CiAJCWlmIChiY3MgJiYgY3MtPm9uZWNoYW5uZWwpCiAJCQlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19ETEUwOwpAQCAtMTM2NywxNCArMTM2MiwxNSBAQAogCQlicmVhazsKIAljYXNlIEFDVF9GQUlMRExFMDoKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKLQkJd2FybigiQ291bGQgbm90IGxlYXZlIERMRSBtb2RlLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiQ291bGQgbm90IGxlYXZlIERMRSBtb2RlLlxuIik7CiAJCWF0X3N0YXRlMiA9ICZjcy0+YmNzW2NzLT5jdXJjaGFubmVsXS5hdF9zdGF0ZTsKIAkJZGlzY29ubmVjdCgmYXRfc3RhdGUyKTsKIAkJc2NoZWR1bGVfaW5pdChjcywgTVNfUkVDT1ZFUik7CiAJCWJyZWFrOwogCWNhc2UgQUNUX0ZBSUxETEUxOgogCQljcy0+Y3VyX2F0X3NlcSA9IFNFUV9OT05FOwotCQl3YXJuKCJDb3VsZCBub3QgZW50ZXIgRExFIG1vZGUuIFRyeSB0byBoYW5nIHVwLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJICJDb3VsZCBub3QgZW50ZXIgRExFIG1vZGUuIFRyeWluZyB0byBoYW5nIHVwLlxuIik7CiAJCWNoYW5uZWwgPSBjcy0+Y3VyY2hhbm5lbDsKIAkJY3MtPmJjc1tjaGFubmVsXS5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0hVUDsKIAkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwpAQCAtMTM5NSw3ICsxMzkxLDggQEAKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKIAkJY2hhbm5lbCA9IGNzLT5jdXJjaGFubmVsOwogCQlpZiAoIXJlaW5pdF9hbmRfcmV0cnkoY3MsIGNoYW5uZWwpKSB7Ci0JCQl3YXJuKCJDb3VsZCBub3QgZ2V0IGEgY2FsbCBpZC4gRGlhbGluZyBub3QgcG9zc2libGUiKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJICJDb3VsZCBub3QgZ2V0IGEgY2FsbCBJRC4gQ2Fubm90IGRpYWwuXG4iKTsKIAkJCWF0X3N0YXRlMiA9ICZjcy0+YmNzW2NoYW5uZWxdLmF0X3N0YXRlOwogCQkJZGlzY29ubmVjdCgmYXRfc3RhdGUyKTsKIAkJfQpAQCAtMTQyOCw3ICsxNDI1LDggQEAKIAkJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfSFVQOwogCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJCWJyZWFrOwotCWNhc2UgQUNUX0dFVFNUUklORzogLyogd2FybmluZzogUklORywgWkRMRSwgLi4uIGFyZSBub3QgaGFuZGxlZCBwcm9wZXJseSBhbnkgbW9yZSAqLworCWNhc2UgQUNUX0dFVFNUUklORzogLyogd2FybmluZzogUklORywgWkRMRSwgLi4uCisJCQkgICAgICAgYXJlIG5vdCBoYW5kbGVkIHByb3Blcmx5IGFueW1vcmUgKi8KIAkJYXRfc3RhdGUtPmdldHN0cmluZyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQUNUX1NFVFZFUjoKQEAgLTE0NjksMTYgKzE0NjcsMTYgQEAKIAljYXNlIEFDVF9HT1RWRVI6CiAJCWlmIChjcy0+Z290Znd2ZXIgPT0gMCkgewogCQkJY3MtPmdvdGZ3dmVyID0gMTsKLQkJCWRiZyhERUJVR19BTlksCi0JCQkgICAgImZpcm13YXJlIHZlcnNpb24gJTAyZC4lMDNkLiUwMmQuJTAyZCIsCi0JCQkgICAgY3MtPmZ3dmVyWzBdLCBjcy0+Znd2ZXJbMV0sCi0JCQkgICAgY3MtPmZ3dmVyWzJdLCBjcy0+Znd2ZXJbM10pOworCQkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkJImZpcm13YXJlIHZlcnNpb24gJTAyZC4lMDNkLiUwMmQuJTAyZCIsCisJCQkJY3MtPmZ3dmVyWzBdLCBjcy0+Znd2ZXJbMV0sCisJCQkJY3MtPmZ3dmVyWzJdLCBjcy0+Znd2ZXJbM10pOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBBQ1RfRkFJTFZFUjoKIAkJY3MtPmdvdGZ3dmVyID0gLTE7Ci0JCWVycigiY291bGQgbm90IHJlYWQgZmlybXdhcmUgdmVyc2lvbi4iKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IHJlYWQgZmlybXdhcmUgdmVyc2lvbi5cbiIpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCWNhc2UgQUNUX0VSUk9SOgpAQCAtMTQ5NiwxNiArMTQ5NCwxNiBAQAogCQlicmVhazsKICNlbmRpZgogCWNhc2UgQUNUX0RFQlVHOgotCQlkYmcoREVCVUdfQU5ZLCAiJXM6IHJlc3BfY29kZSAlZCBpbiBDb25TdGF0ZSAlZCIsCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IHJlc3BfY29kZSAlZCBpbiBDb25TdGF0ZSAlZCIsCiAJCQlfX2Z1bmNfXywgZXYtPnR5cGUsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgQUNUX1dBUk46Ci0JCXdhcm4oIiVzOiByZXNwX2NvZGUgJWQgaW4gQ29uU3RhdGUgJWQhIiwKLQkJCV9fZnVuY19fLCBldi0+dHlwZSwgYXRfc3RhdGUtPkNvblN0YXRlKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIiVzOiByZXNwX2NvZGUgJWQgaW4gQ29uU3RhdGUgJWQhXG4iLAorCQkJIF9fZnVuY19fLCBldi0+dHlwZSwgYXRfc3RhdGUtPkNvblN0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfWkNBVToKLQkJd2FybigiY2F1c2UgY29kZSAlMDR4IGluIGNvbm5lY3Rpb24gc3RhdGUgJWQuIiwKLQkJICAgICBldi0+cGFyYW1ldGVyLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiY2F1c2UgY29kZSAlMDR4IGluIGNvbm5lY3Rpb24gc3RhdGUgJWQuXG4iLAorCQkJIGV2LT5wYXJhbWV0ZXIsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CiAJCWJyZWFrOwogCiAJLyogZXZlbnRzIGZyb20gdGhlIExMICovCkBAIC0xNTE2LDE0ICsxNTE0LDE0IEBACiAJCXN0YXJ0X2FjY2VwdChhdF9zdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgQUNUX1BST1RPX0wyOgotCQlkYmcoREVCVUdfQ01ELAotCQkgICAgInNldCBwcm90b2NvbCB0byAldSIsICh1bnNpZ25lZCkgZXYtPnBhcmFtZXRlcik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2V0IHByb3RvY29sIHRvICV1IiwKKwkJCSh1bnNpZ25lZCkgZXYtPnBhcmFtZXRlcik7CiAJCWF0X3N0YXRlLT5iY3MtPnByb3RvMiA9IGV2LT5wYXJhbWV0ZXI7CiAJCWJyZWFrOwogCWNhc2UgQUNUX0hVUDoKIAkJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfSFVQOwotCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSFVQIik7CisJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0hVUCIpOwogCQlicmVhazsKIAogCS8qIGhvdHBsdWcgZXZlbnRzICovCkBAIC0xNTU1LDE3ICsxNTUzLDE5IEBACiAKIAkvKiBldmVudHMgZnJvbSB0aGUgcHJvYyBmaWxlIHN5c3RlbSAqLyAvLyBGSVhNRSB3aXRob3V0IEFDVF94eHh4PwogCWNhc2UgQUNUX1BST0NfQ0lETU9ERToKLQkJaWYgKGV2LT5wYXJhbWV0ZXIgIT0gYXRvbWljX3JlYWQoJmNzLT5jaWRtb2RlKSkgewotCQkJYXRvbWljX3NldCgmY3MtPmNpZG1vZGUsIGV2LT5wYXJhbWV0ZXIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGV2LT5wYXJhbWV0ZXIgIT0gY3MtPmNpZG1vZGUpIHsKKwkJCWNzLT5jaWRtb2RlID0gZXYtPnBhcmFtZXRlcjsKIAkJCWlmIChldi0+cGFyYW1ldGVyKSB7CiAJCQkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lETU9ERTsKLQkJCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CisJCQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKIAkJCX0gZWxzZSB7CiAJCQkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfVU1NT0RFOwotCQkJCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOworCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19VTU1PREUiKTsKIAkJCX0KIAkJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQljcy0+d2FpdGluZyA9IDA7CiAJCXdha2VfdXAoJmNzLT53YWl0cXVldWUpOwogCQlicmVhazsKQEAgLTE1OTAsNyArMTU5MCw3IEBACiAJCQkJKnBfcmVzcF9jb2RlID0gUlNQX05VTEw7CiAJCQl9CiAJCX0gZWxzZQotCQkJZXJyKCIlczogYWN0aW9uPT0lZCEiLCBfX2Z1bmNfXywgYWN0aW9uKTsKKwkJCWRldl9lcnIoY3MtPmRldiwgIiVzOiBhY3Rpb249PSVkIVxuIiwgX19mdW5jX18sIGFjdGlvbik7CiAJfQogfQogCkBAIC0xNjA5LDQ3ICsxNjA5LDQ2IEBACiAJaW50IGN1cmFjdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKGNzKTsKLQlJRk5VTExSRVQoZXYpOwotCiAJaWYgKGV2LT5jaWQgPj0gMCkgewogCQlhdF9zdGF0ZSA9IGF0X3N0YXRlX2Zyb21fY2lkKGNzLCBldi0+Y2lkKTsKIAkJaWYgKCFhdF9zdGF0ZSkgewogCQkJZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIFJTUF9XUk9OR19DSUQsCi0JCQkgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMKTsKKwkJCQkJICBOVUxMLCAwLCBOVUxMKTsKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7CiAJCWF0X3N0YXRlID0gZXYtPmF0X3N0YXRlOwogCQlpZiAoYXRfc3RhdGVfaW52YWxpZChjcywgYXRfc3RhdGUpKSB7Ci0JCQlkYmcoREVCVUdfQU5ZLAotCQkJICAgICJldmVudCBmb3IgaW52YWxpZCBhdF9zdGF0ZSAlcCIsIGF0X3N0YXRlKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiZXZlbnQgZm9yIGludmFsaWQgYXRfc3RhdGUgJXAiLAorCQkJCWF0X3N0YXRlKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAotCWRiZyhERUJVR19DTUQsCi0JICAgICJjb25uZWN0aW9uIHN0YXRlICVkLCBldmVudCAlZCIsIGF0X3N0YXRlLT5Db25TdGF0ZSwgZXYtPnR5cGUpOworCWdpZ19kYmcoREVCVUdfQ01ELCAiY29ubmVjdGlvbiBzdGF0ZSAlZCwgZXZlbnQgJWQiLAorCQlhdF9zdGF0ZS0+Q29uU3RhdGUsIGV2LT50eXBlKTsKIAogCWJjcyA9IGF0X3N0YXRlLT5iY3M7CiAJc2VuZGNpZCA9IGF0X3N0YXRlLT5jaWQ7CiAKIAkvKiBTZXR0aW5nIHRoZSBwb2ludGVyIHRvIHRoZSBkaWFsIGFycmF5ICovCiAJcmVwID0gYXRfc3RhdGUtPnJlcGx5c3RydWN0OwotCUlGTlVMTFJFVChyZXApOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKGV2LT50eXBlID09IEVWX1RJTUVPVVQpIHsKLQkJaWYgKGV2LT5wYXJhbWV0ZXIgIT0gYXRvbWljX3JlYWQoJmF0X3N0YXRlLT50aW1lcl9pbmRleCkKKwkJaWYgKGV2LT5wYXJhbWV0ZXIgIT0gYXRfc3RhdGUtPnRpbWVyX2luZGV4CiAJCSAgICB8fCAhYXRfc3RhdGUtPnRpbWVyX2FjdGl2ZSkgewogCQkJZXYtPnR5cGUgPSBSU1BfTk9ORTsgLyogb2xkIHRpbWVvdXQgKi8KLQkJCWRiZyhERUJVR19BTlksICJvbGQgdGltZW91dCIpOworCQkJZ2lnX2RiZyhERUJVR19BTlksICJvbGQgdGltZW91dCIpOwogCQl9IGVsc2UgaWYgKCFhdF9zdGF0ZS0+d2FpdGluZykKLQkJCWRiZyhERUJVR19BTlksICJ0aW1lb3V0IG9jY3VyZWQiKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAidGltZW91dCBvY2N1cnJlZCIpOwogCQllbHNlCi0JCQlkYmcoREVCVUdfQU5ZLCAic3RvcHBlZCB3YWl0aW5nIik7CisJCQlnaWdfZGJnKERFQlVHX0FOWSwgInN0b3BwZWQgd2FpdGluZyIpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCi0JLyogaWYgdGhlIHJlc3BvbnNlIGJlbG9uZ3MgdG8gYSB2YXJpYWJsZSBpbiBhdF9zdGF0ZS0+aW50X3ZhcltWQVJfWFhYWF0gb3IgYXRfc3RhdGUtPnN0cl92YXJbU1RSX1hYWFhdLCBzZXQgaXQgKi8KKwkvKiBpZiB0aGUgcmVzcG9uc2UgYmVsb25ncyB0byBhIHZhcmlhYmxlIGluIGF0X3N0YXRlLT5pbnRfdmFyW1ZBUl9YWFhYXQorCSAgIG9yIGF0X3N0YXRlLT5zdHJfdmFyW1NUUl9YWFhYXSwgc2V0IGl0ICovCiAJaWYgKGV2LT50eXBlID49IFJTUF9WQVIgJiYgZXYtPnR5cGUgPCBSU1BfVkFSICsgVkFSX05VTSkgewogCQlpbmRleCA9IGV2LT50eXBlIC0gUlNQX1ZBUjsKIAkJYXRfc3RhdGUtPmludF92YXJbaW5kZXhdID0gZXYtPnBhcmFtZXRlcjsKQEAgLTE2NTcsMjAgKzE2NTYsMjIgQEAKIAkJaW5kZXggPSBldi0+dHlwZSAtIFJTUF9TVFI7CiAJCWtmcmVlKGF0X3N0YXRlLT5zdHJfdmFyW2luZGV4XSk7CiAJCWF0X3N0YXRlLT5zdHJfdmFyW2luZGV4XSA9IGV2LT5wdHI7Ci0JCWV2LT5wdHIgPSBOVUxMOyAvKiBwcmV2ZW50IHByb2Nlc3NfZXZlbnRzKCkgZnJvbSBkZWFsbG9jYXRpbmcgcHRyICovCisJCWV2LT5wdHIgPSBOVUxMOyAvKiBwcmV2ZW50IHByb2Nlc3NfZXZlbnRzKCkgZnJvbQorCQkJCSAgIGRlYWxsb2NhdGluZyBwdHIgKi8KIAl9CiAKIAlpZiAoZXYtPnR5cGUgPT0gRVZfVElNRU9VVCB8fCBldi0+dHlwZSA9PSBSU1BfU1RSSU5HKQogCQlhdF9zdGF0ZS0+Z2V0c3RyaW5nID0gMDsKIAotCS8qIFNlYXJjaCByb3cgaW4gZGlhbCBhcnJheSB3aGljaCBtYXRjaGVzIG1vZGVtIHJlc3BvbnNlIGFuZCBjdXJyZW50IGNvbnN0YXRlICovCisJLyogU2VhcmNoIHJvdyBpbiBkaWFsIGFycmF5IHdoaWNoIG1hdGNoZXMgbW9kZW0gcmVzcG9uc2UgYW5kIGN1cnJlbnQKKwkgICBjb25zdGF0ZSAqLwogCWZvciAoOzsgcmVwKyspIHsKIAkJcmNvZGUgPSByZXAtPnJlc3BfY29kZTsKLQkJLyogZGJnIChERUJVR19BTlksICJyY29kZSAlZCIsIHJjb2RlKTsgKi8KIAkJaWYgKHJjb2RlID09IFJTUF9MQVNUKSB7CiAJCQkvKiBmb3VuZCBub3RoaW5nLi4uKi8KLQkJCXdhcm4oIiVzOiByY29kZT1SU1BfTEFTVDogcmVzcF9jb2RlICVkIGluIENvblN0YXRlICVkISIsCi0JCQkJX19mdW5jX18sIGV2LT50eXBlLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOworCQkJZGV2X3dhcm4oY3MtPmRldiwgIiVzOiByY29kZT1SU1BfTEFTVDogIgorCQkJCQkicmVzcF9jb2RlICVkIGluIENvblN0YXRlICVkIVxuIiwKKwkJCQkgX19mdW5jX18sIGV2LT50eXBlLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICgocmNvZGUgPT0gUlNQX0FOWSB8fCByY29kZSA9PSBldi0+dHlwZSkKQEAgLTE3MDYsMTQgKzE3MDcsMTQgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIFNlbmQgY29tbWFuZCB0byBtb2RlbSBpZiBub3QgTlVMTC4uLiAqLwogCQkJaWYgKHBfY29tbWFuZC8qcmVwLT5jb21tYW5kKi8pIHsKLQkJCQlpZiAoYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKQorCQkJCWlmIChjcy0+Y29ubmVjdGVkKQogCQkJCQlzZW5kX2NvbW1hbmQoY3MsIHBfY29tbWFuZCwKLQkJCQkJICAgICAgICAgICAgIHNlbmRjaWQsIGNzLT5kbGUsCi0JCQkJCSAgICAgICAgICAgICBHRlBfQVRPTUlDKTsKKwkJCQkJCSAgICAgc2VuZGNpZCwgY3MtPmRsZSwKKwkJCQkJCSAgICAgR0ZQX0FUT01JQyk7CiAJCQkJZWxzZQogCQkJCQlnaWdhc2V0X2FkZF9ldmVudChjcywgYXRfc3RhdGUsCi0JCQkJCSAgICAgICAgICAgICAgICAgIFJTUF9OT0RFViwKLQkJCQkJICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCk7CisJCQkJCQkJICBSU1BfTk9ERVYsCisJCQkJCQkJICBOVUxMLCAwLCBOVUxMKTsKIAkJCX0KIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CkBAIC0xNzIzLDggKzE3MjQsNyBAQAogCQkJfSBlbHNlIGlmIChyZXAtPnRpbWVvdXQgPiAwKSB7IC8qIG5ldyB0aW1lb3V0ICovCiAJCQkJYXRfc3RhdGUtPnRpbWVyX2V4cGlyZXMgPSByZXAtPnRpbWVvdXQgKiAxMDsKIAkJCQlhdF9zdGF0ZS0+dGltZXJfYWN0aXZlID0gMTsKLQkJCQluZXdfaW5kZXgoJmF0X3N0YXRlLT50aW1lcl9pbmRleCwKLQkJCQkgICAgICAgICAgTUFYX1RJTUVSX0lOREVYKTsKKwkJCQkrK2F0X3N0YXRlLT50aW1lcl9pbmRleDsKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCX0KQEAgLTE3NDQsMTcgKzE3NDQsMTYgQEAKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKIAlpbnQgaTsKIAlpbnQgc2VxdWVuY2U7Ci0KLQlJRk5VTExSRVQoY3MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMCk7CiAKIAlpZiAoY3MtPmN1cl9hdF9zZXEpIHsKLQkJZGJnKERFQlVHX0NNRCwgIm5vdCBzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzOiBidXN5Iik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAibm90IHNlYXJjaGluZyBzY2hlZHVsZWQgY29tbWFuZHM6IGJ1c3kiKTsKIAkJcmV0dXJuOwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzIik7CiAKIAlzZXF1ZW5jZSA9IFNFUV9OT05FOwogCkBAIC0xNzk1LDggKzE3OTQsOSBAQAogCX0KIAogCS8qIG9ubHkgc3dpdGNoIGJhY2sgdG8gdW5pbW9kZW0gbW9kZSwgaWYgbm8gY29tbWFuZHMgYXJlIHBlbmRpbmcgYW5kIG5vIGNoYW5uZWxzIGFyZSB1cCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWlmIChjcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyA9PSBQQ19VTU1PREUKLQkgICAgJiYgIWF0b21pY19yZWFkKCZjcy0+Y2lkbW9kZSkKKwkgICAgJiYgIWNzLT5jaWRtb2RlCiAJICAgICYmIGxpc3RfZW1wdHkoJmNzLT50ZW1wX2F0X3N0YXRlcykKIAkgICAgJiYgYXRvbWljX3JlYWQoJmNzLT5tb2RlKSA9PSBNX0NJRCkgewogCQlzZXF1ZW5jZSA9IFNFUV9VTU1PREU7CkBAIC0xODEwLDYgKzE4MTAsNyBAQAogCQkJfQogCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJj0gflBDX1VNTU9ERTsKIAlpZiAoc2VxdWVuY2UgIT0gU0VRX05PTkUpIHsKIAkJc2NoZWR1bGVfc2VxdWVuY2UoY3MsIGF0X3N0YXRlLCBzZXF1ZW5jZSk7CkBAIC0xODY1LDExICsxODY2LDcgQEAKIAlpZiAoY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJiBQQ19DSURNT0RFKSB7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzICY9IH5QQ19DSURNT0RFOwogCQlpZiAoYXRvbWljX3JlYWQoJmNzLT5tb2RlKSA9PSBNX1VOSU1PREVNKSB7Ci0jaWYgMAotCQkJY3MtPnJldHJ5X2NvdW50ID0gMjsKLSNlbHNlCiAJCQljcy0+cmV0cnlfY291bnQgPSAxOwotI2VuZGlmCiAJCQlzY2hlZHVsZV9zZXF1ZW5jZShjcywgJmNzLT5hdF9zdGF0ZSwgU0VRX0NJRE1PREUpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xODk3LDcgKzE4OTQsNyBAQAogCQkJc3dpdGNoIChhdG9taWNfcmVhZCgmY3MtPm1vZGUpKSB7CiAJCQljYXNlIE1fVU5JTU9ERU06CiAJCQkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lETU9ERTsKLQkJCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CisJCQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKIAkJCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJCQkJcmV0dXJuOwogI2lmZGVmIEdJR19NQVlJTklUT05ESUFMCkBAIC0xOTI2LDE4ICsxOTIzLDIxIEBACiAJaW50IGk7CiAJaW50IGNoZWNrX2ZsYWdzID0gMDsKIAlpbnQgd2FzX2J1c3k7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIG5vIGxvY2tpbmcgbmVlZGVkIChvbmx5IG9uZSByZWFkZXIpICovCi0JaGVhZCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfaGVhZCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CisJaGVhZCA9IGNzLT5ldl9oZWFkOwogCiAJZm9yIChpID0gMDsgaSA8IDIgKiBNQVhfRVZFTlRTOyArK2kpIHsKLQkJdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJCXRhaWwgPSBjcy0+ZXZfdGFpbDsKIAkJaWYgKHRhaWwgPT0gaGVhZCkgewogCQkJaWYgKCFjaGVja19mbGFncyAmJiAhYXRvbWljX3JlYWQoJmNzLT5jb21tYW5kc19wZW5kaW5nKSkKIAkJCQlicmVhazsKIAkJCWNoZWNrX2ZsYWdzID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAJCQlwcm9jZXNzX2NvbW1hbmRfZmxhZ3MoY3MpOwotCQkJdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKKwkJCXRhaWwgPSBjcy0+ZXZfdGFpbDsKIAkJCWlmICh0YWlsID09IGhlYWQpIHsKIAkJCQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29tbWFuZHNfcGVuZGluZykpCiAJCQkJCWJyZWFrOwpAQCAtMTk0NywxOCArMTk0NywyMyBAQAogCiAJCWV2ID0gY3MtPmV2ZW50cyArIGhlYWQ7CiAJCXdhc19idXN5ID0gY3MtPmN1cl9hdF9zZXEgIT0gU0VRX05PTkU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAJCXByb2Nlc3NfZXZlbnQoY3MsIGV2KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAJCWtmcmVlKGV2LT5wdHIpOwogCQlldi0+cHRyID0gTlVMTDsKIAkJaWYgKHdhc19idXN5ICYmIGNzLT5jdXJfYXRfc2VxID09IFNFUV9OT05FKQogCQkJY2hlY2tfZmxhZ3MgPSAxOwogCiAJCWhlYWQgPSAoaGVhZCArIDEpICUgTUFYX0VWRU5UUzsKLQkJYXRvbWljX3NldCgmY3MtPmV2X2hlYWQsIGhlYWQpOworCQljcy0+ZXZfaGVhZCA9IGhlYWQ7CiAJfQogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKKwogCWlmIChpID09IDIgKiBNQVhfRVZFTlRTKSB7Ci0JCWVycigiaW5maW5pdGUgbG9vcCBpbiBwcm9jZXNzX2V2ZW50czsgYWJvcnRpbmcuIik7CisJCWRldl9lcnIoY3MtPmRldiwKKwkJCSJpbmZpbml0ZSBsb29wIGluIHByb2Nlc3NfZXZlbnRzOyBhYm9ydGluZy5cbiIpOwogCX0KIH0KIApAQCAtMTk3MCwxMiArMTk3NSw5IEBACiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSBkYXRhOwogCi0JSUZOVUxMUkVUKGNzKTsKLQlJRk5VTExSRVQoY3MtPmluYnVmKTsKLQogCS8qIGhhbmRsZSBpbmNvbWluZyBkYXRhIG9uIGNvbnRyb2wvY29tbW9uIGNoYW5uZWwgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmNzLT5pbmJ1Zi0+aGVhZCkgIT0gYXRvbWljX3JlYWQoJmNzLT5pbmJ1Zi0+dGFpbCkpIHsKLQkJZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nIG5ldyBkYXRhIik7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgInByb2Nlc3NpbmcgbmV3IGRhdGEiKTsKIAkJY3MtPm9wcy0+aGFuZGxlX2lucHV0KGNzLT5pbmJ1Zik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmggYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKaW5kZXggNzI5ZWRjZC4uMjJiOTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaApAQCAtMSwxMSArMSwxNiBAQAotLyogU2llbWVucyBHaWdhc2V0IDMwN3ggZHJpdmVyCisvKgorICogU2llbWVucyBHaWdhc2V0IDMwN3ggZHJpdmVyCiAgKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGFsbCBjb25uZWN0aW9uIHZhcmlhbnRzCiAgKgotICogV3JpdHRlbiBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPgorICogV3JpdHRlbiBieSBTdGVmYW4gRWlsZXJzCiAgKiAgICAgICAgYW5kIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPgogICoKLSAqIFZlcnNpb246ICRJZDogZ2lnYXNldC5oLHYgMS45Ny40LjI2IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpZm5kZWYgR0lHQVNFVF9ICkBAIC0xNSw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG5pZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgpAQCAtMjcsMjEgKzMxLDIyIEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNkZWZpbmUgR0lHX1ZFUlNJT04gezAsNSwwLDB9CiAjZGVmaW5lIEdJR19DT01QQVQgIHswLDQsMCwwfQogCi0jZGVmaW5lIE1BWF9SRUNfUEFSQU1TIDEwICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heC4gbnVtYmVyIG9mIHBhcmFtcyBpbiByZXNwb25zZSBzdHJpbmcgKi8KLSNkZWZpbmUgTUFYX1JFU1BfU0laRSA1MTIgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4LiBzaXplIG9mIGEgcmVzcG9uc2Ugc3RyaW5nICovCi0jZGVmaW5lIEhXX0hEUl9MRU4gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlYWRlciBzaXplIHVzZWQgdG8gc3RvcmUgYWNrIGluZm8gKi8KKyNkZWZpbmUgTUFYX1JFQ19QQVJBTVMgMTAJLyogTWF4LiBudW1iZXIgb2YgcGFyYW1zIGluIHJlc3BvbnNlIHN0cmluZyAqLworI2RlZmluZSBNQVhfUkVTUF9TSVpFIDUxMgkvKiBNYXguIHNpemUgb2YgYSByZXNwb25zZSBzdHJpbmcgKi8KKyNkZWZpbmUgSFdfSERSX0xFTiAyCQkvKiBIZWFkZXIgc2l6ZSB1c2VkIHRvIHN0b3JlIGFjayBpbmZvICovCiAKLSNkZWZpbmUgTUFYX0VWRU5UUyA2NCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBldmVudCBxdWV1ZSAqLworI2RlZmluZSBNQVhfRVZFTlRTIDY0CQkvKiBzaXplIG9mIGV2ZW50IHF1ZXVlICovCiAKICNkZWZpbmUgUkJVRlNJWkUgODE5MgotI2RlZmluZSBTQlVGU0laRSA0MDk2CQkJCS8qIHNrX2J1ZmYgcGF5bG9hZCBzaXplICovCisjZGVmaW5lIFNCVUZTSVpFIDQwOTYJCS8qIHNrX2J1ZmYgcGF5bG9hZCBzaXplICovCiAKLSNkZWZpbmUgTUFYX0JVRl9TSVpFIChTQlVGU0laRSAtIDIpCQkvKiBNYXguIHNpemUgb2YgYSBkYXRhIHBhY2tldCBmcm9tIExMICovCi0jZGVmaW5lIFRSQU5TQlVGU0laRSA3NjgJCQkvKiBieXRlcyBwZXIgc2tiIGZvciB0cmFuc3BhcmVudCByZWNlaXZlICovCisjZGVmaW5lIFRSQU5TQlVGU0laRSA3NjgJLyogYnl0ZXMgcGVyIHNrYiBmb3IgdHJhbnNwYXJlbnQgcmVjZWl2ZSAqLworI2RlZmluZSBNQVhfQlVGX1NJWkUgKFNCVUZTSVpFIC0gMikJLyogTWF4LiBzaXplIG9mIGEgZGF0YSBwYWNrZXQgZnJvbSBMTCAqLwogCiAvKiBjb21waWxlIHRpbWUgb3B0aW9ucyAqLwogI2RlZmluZSBHSUdfTUFKT1IgMApAQCAtNTAsMTAgKzU1LDcgQEAKICNkZWZpbmUgR0lHX1JFVFJZQ0lECiAjZGVmaW5lIEdJR19YNzUKIAotI2RlZmluZSBNQVhfVElNRVJfSU5ERVggMTAwMAotI2RlZmluZSBNQVhfU0VRX0lOREVYICAgMTAwMAotCi0jZGVmaW5lIEdJR19USUNLIChIWiAvIDEwKQorI2RlZmluZSBHSUdfVElDSyAxMDAJCS8qIGluIG1pbGxpc2Vjb25kcyAqLwogCiAvKiB0aW1lb3V0IHZhbHVlcyAodW5pdDogMSBzZWMpICovCiAjZGVmaW5lIElOSVRfVElNRU9VVCAxCkBAIC02Nyw3NCArNjksODkgQEAKIAogI2RlZmluZSBNQVhBQ1QgMwogCi0jZGVmaW5lIElGTlVMTChhKSAgICAgICAgIGlmICh1bmxpa2VseSghKGEpKSkKLSNkZWZpbmUgSUZOVUxMUkVUKGEpICAgICAgaWYgKHVubGlrZWx5KCEoYSkpKSB7ZXJyKCIlcz09TlVMTCBhdCAlczolZCEiLCAjYSwgX19GSUxFX18sIF9fTElORV9fKTsgcmV0dXJuOyB9Ci0jZGVmaW5lIElGTlVMTFJFVFZBTChhLGIpIGlmICh1bmxpa2VseSghKGEpKSkge2VycigiJXM9PU5VTEwgYXQgJXM6JWQhIiwgI2EsIF9fRklMRV9fLCBfX0xJTkVfXyk7IHJldHVybiAoYik7IH0KLSNkZWZpbmUgSUZOVUxMQ09OVChhKSAgICAgaWYgKHVubGlrZWx5KCEoYSkpKSB7ZXJyKCIlcz09TlVMTCBhdCAlczolZCEiLCAjYSwgX19GSUxFX18sIF9fTElORV9fKTsgY29udGludWU7IH0KLSNkZWZpbmUgSUZOVUxMR09UTyhhLGIpICAgaWYgKHVubGlrZWx5KCEoYSkpKSB7ZXJyKCIlcz09TlVMTCBhdCAlczolZCEiLCAjYSwgX19GSUxFX18sIF9fTElORV9fKTsgZ290byBiOyB9Ci0KIGV4dGVybiBpbnQgZ2lnYXNldF9kZWJ1Z2xldmVsOwkvKiAibmVlZHMiIGNhc3QgdG8gKGVudW0gZGVidWdsZXZlbCkgKi8KIAotLyogYW55IGNvbWJpbmF0aW9uIG9mIHRoZXNlIGNhbiBiZSBnaXZlbiB3aXRoIHRoZSAnZGVidWc9JyBwYXJhbWV0ZXIgdG8gaW5zbW9kLCBlLmcuCi0gKiAnaW5zbW9kIHVzYl9naWdhc2V0Lm8gZGVidWc9MHgyYycgd2lsbCBzZXQgREVCVUdfT1BFTiwgREVCVUdfQ01EIGFuZCBERUJVR19JTlRSLiAqLwotZW51bSBkZWJ1Z2xldmVsIHsgLyogdXAgdG8gMjQgYml0cyAoYXRvbWljX3QpICovCisvKiBhbnkgY29tYmluYXRpb24gb2YgdGhlc2UgY2FuIGJlIGdpdmVuIHdpdGggdGhlICdkZWJ1Zz0nIHBhcmFtZXRlciB0byBpbnNtb2QsCisgKiBlLmcuICdpbnNtb2QgdXNiX2dpZ2FzZXQubyBkZWJ1Zz0weDJjJyB3aWxsIHNldCBERUJVR19PUEVOLCBERUJVR19DTUQgYW5kCisgKiBERUJVR19JTlRSLgorICovCitlbnVtIGRlYnVnbGV2ZWwgewogCURFQlVHX1JFRwkgID0gMHgwMDAyLCAvKiBzZXJpYWwgcG9ydCBJL08gcmVnaXN0ZXIgb3BlcmF0aW9ucyAqLwogCURFQlVHX09QRU4JICA9IDB4MDAwNCwgLyogb3Blbi9jbG9zZSBzZXJpYWwgcG9ydCAqLwogCURFQlVHX0lOVFIJICA9IDB4MDAwOCwgLyogaW50ZXJydXB0IHByb2Nlc3NpbmcgKi8KLQlERUJVR19JTlRSX0RVTVAgICA9IDB4MDAxMCwgLyogQWN0aXZhdGluZyBoZXhkdW1wIGRlYnVnIG91dHB1dCBvbiBpbnRlcnJ1cHQKLQkJCQkgICAgICByZXF1ZXN0cywgbm90IGF2YWlsYWJsZSBhcyBydW4tdGltZSBvcHRpb24gKi8KKwlERUJVR19JTlRSX0RVTVAJICA9IDB4MDAxMCwgLyogQWN0aXZhdGluZyBoZXhkdW1wIGRlYnVnIG91dHB1dCBvbgorCQkJCSAgICAgICBpbnRlcnJ1cHQgcmVxdWVzdHMsIG5vdCBhdmFpbGFibGUgYXMKKwkJCQkgICAgICAgcnVuLXRpbWUgb3B0aW9uICovCiAJREVCVUdfQ01ECSAgPSAweDAwMDIwLCAvKiBzZW50L3JlY2VpdmVkIExMIGNvbW1hbmRzICovCiAJREVCVUdfU1RSRUFNCSAgPSAweDAwMDQwLCAvKiBhcHBsaWNhdGlvbiBkYXRhIHN0cmVhbSBJL08gZXZlbnRzICovCiAJREVCVUdfU1RSRUFNX0RVTVAgPSAweDAwMDgwLCAvKiBhcHBsaWNhdGlvbiBkYXRhIHN0cmVhbSBjb250ZW50ICovCiAJREVCVUdfTExEQVRBCSAgPSAweDAwMTAwLCAvKiBzZW50L3JlY2VpdmVkIExMIGRhdGEgKi8KLQlERUJVR19JTlRSXzAJICA9IDB4MDAyMDAsIC8qIHNlcmlhbCBwb3J0IG91dHB1dCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyAqLworCURFQlVHX0lOVFJfMAkgID0gMHgwMDIwMCwgLyogc2VyaWFsIHBvcnQgaW50ZXJydXB0IHByb2Nlc3NpbmcgKi8KIAlERUJVR19EUklWRVIJICA9IDB4MDA0MDAsIC8qIGRyaXZlciBzdHJ1Y3R1cmUgKi8KIAlERUJVR19IRExDCSAgPSAweDAwODAwLCAvKiBNMTB4IEhETEMgcHJvY2Vzc2luZyAqLwogCURFQlVHX1dSSVRFCSAgPSAweDAxMDAwLCAvKiBNMTA1IGRhdGEgd3JpdGUgKi8KLQlERUJVR19UUkFOU0NNRCAgICA9IDB4MDIwMDAsIC8qQVQtQ09NTUFORFMrUkVTUE9OU0VTKi8KLQlERUJVR19NQ01EICAgICAgICA9IDB4MDQwMDAsIC8qQ09NTUFORFMgVEhBVCBBUkUgU0VOVCBWRVJZIE9GVEVOKi8KLQlERUJVR19JTklUCSAgPSAweDA4MDAwLCAvKiAoZGUpYWxsb2NhdGlvbitpbml0aWFsaXphdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMgKi8KKwlERUJVR19UUkFOU0NNRAkgID0gMHgwMjAwMCwgLyogQVQtQ09NTUFORFMrUkVTUE9OU0VTICovCisJREVCVUdfTUNNRAkgID0gMHgwNDAwMCwgLyogQ09NTUFORFMgVEhBVCBBUkUgU0VOVCBWRVJZIE9GVEVOICovCisJREVCVUdfSU5JVAkgID0gMHgwODAwMCwgLyogKGRlKWFsbG9jYXRpb24raW5pdGlhbGl6YXRpb24gb2YgZGF0YQorCQkJCQlzdHJ1Y3R1cmVzICovCiAJREVCVUdfTE9DSwkgID0gMHgxMDAwMCwgLyogc2VtYXBob3JlIG9wZXJhdGlvbnMgKi8KIAlERUJVR19PVVRQVVQJICA9IDB4MjAwMDAsIC8qIG91dHB1dCB0byBkZXZpY2UgKi8KLQlERUJVR19JU08gICAgICAgICA9IDB4NDAwMDAsIC8qIGlzb2Nocm9ub3VzIHRyYW5zZmVycyAqLworCURFQlVHX0lTTwkgID0gMHg0MDAwMCwgLyogaXNvY2hyb25vdXMgdHJhbnNmZXJzICovCiAJREVCVUdfSUYJICA9IDB4ODAwMDAsIC8qIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucyAqLwotCURFQlVHX1VTQlJFUQkgID0gMHgxMDAwMDAsIC8qIFVTQiBjb21tdW5pY2F0aW9uIChleGNlcHQgcGF5bG9hZCBkYXRhKSAqLwotCURFQlVHX0xPQ0tDTUQgICAgID0gMHgyMDAwMDAsIC8qIEFUIGNvbW1hbmRzIGFuZCByZXNwb25zZXMgd2hlbiBNU19MT0NLRUQgKi8KKwlERUJVR19VU0JSRVEJICA9IDB4MTAwMDAwLCAvKiBVU0IgY29tbXVuaWNhdGlvbiAoZXhjZXB0IHBheWxvYWQKKwkJCQkJIGRhdGEpICovCisJREVCVUdfTE9DS0NNRAkgID0gMHgyMDAwMDAsIC8qIEFUIGNvbW1hbmRzIGFuZCByZXNwb25zZXMgd2hlbgorCQkJCQkgTVNfTE9DS0VEICovCiAKLQlERUJVR19BTlkJICA9IDB4M2ZmZmZmLCAvKiBwcmludCBtZXNzYWdlIGlmIGFueSBvZiB0aGUgb3RoZXJzIGlzIGFjdGl2YXRlZCAqLworCURFQlVHX0FOWQkgID0gMHgzZmZmZmYsIC8qIHByaW50IG1lc3NhZ2UgaWYgYW55IG9mIHRoZSBvdGhlcnMgaXMKKwkJCQkJIGFjdGl2YXRlZCAqLwogfTsKIAotI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCi0jZGVmaW5lIERFQlVHX0RFRkFVTFQgKERFQlVHX0lOSVQgfCBERUJVR19UUkFOU0NNRCB8IERFQlVHX0NNRCB8IERFQlVHX1VTQlJFUSkKLS8vI2RlZmluZSBERUJVR19ERUZBVUxUIChERUJVR19MT0NLIHwgREVCVUdfSU5JVCB8IERFQlVHX1RSQU5TQ01EIHwgREVCVUdfQ01EIHwgREVCVUZfSUYgfCBERUJVR19EUklWRVIgfCBERUJVR19PVVRQVVQgfCBERUJVR19JTlRSKQotI2Vsc2UKLSNkZWZpbmUgREVCVUdfREVGQVVMVCAwCisvKiBtaXNzaW5nIGZyb20gbGludXgvZGV2aWNlLmggLi4uICovCisjaWZuZGVmIGRldl9ub3RpY2UKKyNkZWZpbmUgZGV2X25vdGljZShkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAorCWRldl9wcmludGsoS0VSTl9OT1RJQ0UgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCiAjZW5kaWYKIAotLyogcmVkZWZpbmUgc3lzbG9nIG1hY3JvcyB0byBwcmVwZW5kIG1vZHVsZSBuYW1lIGluc3RlYWQgb2YgZW50aXJlIHNvdXJjZSBwYXRoICovCi0vKiBUaGUgc3BhY2UgYmVmb3JlIHRoZSBjb21tYSBpbiAiLCAjIyIgaXMgbmVlZGVkIGJ5IGdjYyAyLjk1ICovCi0jdW5kZWYgaW5mbwotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICIlczogIiBmb3JtYXQgIlxuIiwgVEhJU19NT0RVTEUgPyBUSElTX01PRFVMRS0+bmFtZSA6ICJnaWdhc2V0X2h3IiAsICMjIGFyZykKLQotI3VuZGVmIG5vdGljZQotI2RlZmluZSBub3RpY2UoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX05PVElDRSAiJXM6ICIgZm9ybWF0ICJcbiIsIFRISVNfTU9EVUxFID8gVEhJU19NT0RVTEUtPm5hbWUgOiAiZ2lnYXNldF9odyIgLCAjIyBhcmcpCi0KLSN1bmRlZiB3YXJuCi0jZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZvcm1hdCAiXG4iLCBUSElTX01PRFVMRSA/IFRISVNfTU9EVUxFLT5uYW1lIDogImdpZ2FzZXRfaHciICwgIyMgYXJnKQotCisvKiBLZXJuZWwgbWVzc2FnZSBtYWNyb3MgZm9yIHNpdHVhdGlvbnMgd2hlcmUgZGV2X3ByaW50ayBhbmQgZnJpZW5kcyBjYW5ub3QgYmUKKyAqIHVzZWQgZm9yIGxhY2sgb2YgcmVsaWFibGUgYWNjZXNzIHRvIGEgZGV2aWNlIHN0cnVjdHVyZS4KKyAqIGxpbnV4L3VzYi5oIGFscmVhZHkgY29udGFpbnMgdGhlc2UgYnV0IGluIGFuIG9ic29sZXRlIGZvcm0gd2hpY2ggY2x1dHRlcnMKKyAqIHRoZSBsb2cgbmVlZGxlc3NseSwgYW5kIGFjY29yZGluZyB0byB0aGUgVVNCIG1haW50YWluZXIgdGhvc2Ugc2hvdWxkIGJlCisgKiByZW1vdmVkIHJhdGhlciB0aGFuIGZpeGVkIGFueXdheS4KKyAqLwogI3VuZGVmIGVycgotI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0ICJcbiIsIFRISVNfTU9EVUxFID8gVEhJU19NT0RVTEUtPm5hbWUgOiAiZ2lnYXNldF9odyIgLCAjIyBhcmcpCisjdW5kZWYgaW5mbworI3VuZGVmIHdhcm4KKyN1bmRlZiBub3RpY2UKIAotI3VuZGVmIGRiZworI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiAiIFwKKwlmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIFwKKwlmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRSAiOiAiIFwKKwlmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgbm90aWNlKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgS0JVSUxEX01PRE5BTUUgIjogIiBcCisJZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwotI2RlZmluZSBkYmcobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmICh1bmxpa2VseSgoKGVudW0gZGVidWdsZXZlbClnaWdhc2V0X2RlYnVnbGV2ZWwpICYgKGxldmVsKSkpIFwKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0ICJcbiIsIFRISVNfTU9EVUxFID8gVEhJU19NT0RVTEUtPm5hbWUgOiAiZ2lnYXNldF9odyIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGdpZ19kYmcobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmICh1bmxpa2VseSgoKGVudW0gZGVidWdsZXZlbClnaWdhc2V0X2RlYnVnbGV2ZWwpICYgKGxldmVsKSkpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6ICIgZm9ybWF0ICJcbiIsIFwKKwkJCSAgICAgICAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUdfREVGQVVMVCAoREVCVUdfVFJBTlNDTUQgfCBERUJVR19DTUQgfCBERUJVR19VU0JSRVEpCisKICNlbHNlCi0jZGVmaW5lIGRiZyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGdpZ19kYmcobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUdfREVGQVVMVCAwCisKICNlbmRpZgogCiB2b2lkIGdpZ2FzZXRfZGJnX2J1ZmZlcihlbnVtIGRlYnVnbGV2ZWwgbGV2ZWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGZyb21fdXNlcik7CisJCQlzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpOwogCiAvKiBjb25uZWN0aW9uIHN0YXRlICovCiAjZGVmaW5lIFpTQVVfTk9ORQkJCTAKQEAgLTE0OCwxMyArMTY1LDE0IEBACiAjZGVmaW5lIFpTQVVfVU5LTk9XTgkJCS0xCiAKIC8qIFVTQiBjb250cm9sIHRyYW5zZmVyIHJlcXVlc3RzICovCi0jZGVmaW5lIE9VVF9WRU5ET1JfUkVRCQkJKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKQotI2RlZmluZSBJTl9WRU5ET1JfUkVRCQkJKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQpCisjZGVmaW5lIE9VVF9WRU5ET1JfUkVRCShVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCkKKyNkZWZpbmUgSU5fVkVORE9SX1JFUQkoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCkKIAogLyogaW50LWluLWV2ZW50cyAzMDcwICovCiAjZGVmaW5lIEhEX0IxX0ZMT1dfQ09OVFJPTAkJMHg4MAogI2RlZmluZSBIRF9CMl9GTE9XX0NPTlRST0wJCTB4ODEKLSNkZWZpbmUgSERfUkVDRUlWRUFUREFUQV9BQ0sJCSgweDM1KQkJLy8gMzA3MAkJLy8gYXR0OiBIRF9SRUNFSVZFPj5BVDw8REFUQV9BQ0sKKyNkZWZpbmUgSERfUkVDRUlWRUFUREFUQV9BQ0sJCSgweDM1KQkJLy8gMzA3MAorCQkJCQkJLy8gYXR0OiBIRF9SRUNFSVZFPj5BVDw8REFUQV9BQ0sKICNkZWZpbmUgSERfUkVBRFlfU0VORF9BVERBVEEJCSgweDM2KQkJLy8gMzA3MAogI2RlZmluZSBIRF9PUEVOX0FUQ0hBTk5FTF9BQ0sJCSgweDM3KQkJLy8gMzA3MAogI2RlZmluZSBIRF9DTE9TRV9BVENIQU5ORUxfQUNLCQkoMHgzOCkJCS8vIDMwNzAKQEAgLTE4MSwxNyArMTk5LDE4IEBACiAjZGVmaW5lCUhEX0NMT1NFX0FUQ0hBTk5FTAkJKDB4MjkpCQkvLyAzMDcwCiAKIC8qIFVTQiBmcmFtZXMgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVyICovCi0jZGVmaW5lIEJBU19GUkFNRVRJTUUJMQkJLyogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGZyYW1lcyAqLwotI2RlZmluZSBCQVNfTlVNRlJBTUVTCTgJCS8qIG51bWJlciBvZiBmcmFtZXMgcGVyIFVSQiAqLwotI2RlZmluZSBCQVNfTUFYRlJBTUUJMTYJCS8qIGFsbG9jYXRlZCBieXRlcyBwZXIgZnJhbWUgKi8KLSNkZWZpbmUgQkFTX05PUk1GUkFNRQk4CQkvKiBzZW5kIHNpemUgd2l0aG91dCBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgQkFTX0hJR0hGUkFNRQkxMAkJLyogIiAgICAiICAgIHdpdGggcG9zaXRpdmUgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIEJBU19MT1dGUkFNRQk1CQkvKiAiICAgICIgICAgd2l0aCBuZWdhdGl2ZSBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgQkFTX0NPUlJGUkFNRVMJNAkJLyogZmxvdyBjb250cm9sIG11bHRpcGxpY2F0b3IgKi8KKyNkZWZpbmUgQkFTX0ZSQU1FVElNRQkxCS8qIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBmcmFtZXMgKi8KKyNkZWZpbmUgQkFTX05VTUZSQU1FUwk4CS8qIG51bWJlciBvZiBmcmFtZXMgcGVyIFVSQiAqLworI2RlZmluZSBCQVNfTUFYRlJBTUUJMTYJLyogYWxsb2NhdGVkIGJ5dGVzIHBlciBmcmFtZSAqLworI2RlZmluZSBCQVNfTk9STUZSQU1FCTgJLyogc2VuZCBzaXplIHdpdGhvdXQgZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJBU19ISUdIRlJBTUUJMTAJLyogIiAgICAiICAgIHdpdGggcG9zaXRpdmUgZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJBU19MT1dGUkFNRQk1CS8qICIgICAgIiAgICB3aXRoIG5lZ2F0aXZlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBCQVNfQ09SUkZSQU1FUwk0CS8qIGZsb3cgY29udHJvbCBtdWx0aXBsaWNhdG9yICovCiAKLSNkZWZpbmUgQkFTX0lOQlVGU0laRQkoQkFTX01BWEZSQU1FICogQkFTX05VTUZSQU1FUykgLyogc2l6ZSBvZiBpc29jaHJvbm91cyBpbnB1dCBidWZmZXIgcGVyIFVSQiAqLwotI2RlZmluZSBCQVNfT1VUQlVGU0laRQk0MDk2CQkvKiBzaXplIG9mIGNvbW1vbiBpc29jaHJvbm91cyBvdXRwdXQgYnVmZmVyICovCi0jZGVmaW5lIEJBU19PVVRCVUZQQUQJQkFTX01BWEZSQU1FCS8qIHNpemUgb2YgcGFkIGFyZWEgZm9yIGlzb2Nocm9ub3VzIG91dHB1dCBidWZmZXIgKi8KKyNkZWZpbmUgQkFTX0lOQlVGU0laRQkoQkFTX01BWEZSQU1FICogQkFTX05VTUZSQU1FUykKKwkJCQkJLyogc2l6ZSBvZiBpc29jIGluIGJ1ZiBwZXIgVVJCICovCisjZGVmaW5lIEJBU19PVVRCVUZTSVpFCTQwOTYJCS8qIHNpemUgb2YgY29tbW9uIGlzb2Mgb3V0IGJ1ZmZlciAqLworI2RlZmluZSBCQVNfT1VUQlVGUEFECUJBU19NQVhGUkFNRQkvKiBzaXplIG9mIHBhZCBhcmVhIGZvciBpc29jIG91dCBidWYgKi8KIAogI2RlZmluZSBCQVNfSU5VUkJTCTMKICNkZWZpbmUgQkFTX09VVFVSQlMJMwpAQCAtMjA3LDQwICsyMjYsNDAgQEAKICNkZWZpbmUgQVRfTlVNCQk3CiAKIC8qIHZhcmlhYmxlcyBpbiBzdHJ1Y3QgYXRfc3RhdGVfdCAqLwotI2RlZmluZSBWQVJfWlNBVSAgIDAKLSNkZWZpbmUgVkFSX1pETEUgICAxCi0jZGVmaW5lIFZBUl9aVkxTICAgMgotI2RlZmluZSBWQVJfWkNUUCAgIDMKLSNkZWZpbmUgVkFSX05VTSAgICA0CisjZGVmaW5lIFZBUl9aU0FVCTAKKyNkZWZpbmUgVkFSX1pETEUJMQorI2RlZmluZSBWQVJfWlZMUwkyCisjZGVmaW5lIFZBUl9aQ1RQCTMKKyNkZWZpbmUgVkFSX05VTQkJNAogCi0jZGVmaW5lIFNUUl9OTUJSICAgMAotI2RlZmluZSBTVFJfWkNQTiAgIDEKLSNkZWZpbmUgU1RSX1pDT04gICAyCi0jZGVmaW5lIFNUUl9aQkMgICAgMwotI2RlZmluZSBTVFJfWkhMQyAgIDQKLSNkZWZpbmUgU1RSX05VTSAgICA1CisjZGVmaW5lIFNUUl9OTUJSCTAKKyNkZWZpbmUgU1RSX1pDUE4JMQorI2RlZmluZSBTVFJfWkNPTgkyCisjZGVmaW5lIFNUUl9aQkMJCTMKKyNkZWZpbmUgU1RSX1pITEMJNAorI2RlZmluZSBTVFJfTlVNCQk1CiAKLSNkZWZpbmUgRVZfVElNRU9VVCAgICAgIC0xMDUKLSNkZWZpbmUgRVZfSUZfVkVSICAgICAgIC0xMDYKLSNkZWZpbmUgRVZfUFJPQ19DSURNT0RFIC0xMDcKLSNkZWZpbmUgRVZfU0hVVERPV04gICAgIC0xMDgKLSNkZWZpbmUgRVZfU1RBUlQgICAgICAgIC0xMTAKLSNkZWZpbmUgRVZfU1RPUCAgICAgICAgIC0xMTEKLSNkZWZpbmUgRVZfSUZfTE9DSyAgICAgIC0xMTIKLSNkZWZpbmUgRVZfUFJPVE9fTDIgICAgIC0xMTMKLSNkZWZpbmUgRVZfQUNDRVBUICAgICAgIC0xMTQKLSNkZWZpbmUgRVZfRElBTCAgICAgICAgIC0xMTUKLSNkZWZpbmUgRVZfSFVQICAgICAgICAgIC0xMTYKLSNkZWZpbmUgRVZfQkNfT1BFTiAgICAgIC0xMTcKLSNkZWZpbmUgRVZfQkNfQ0xPU0VEICAgIC0xMTgKKyNkZWZpbmUgRVZfVElNRU9VVAktMTA1CisjZGVmaW5lIEVWX0lGX1ZFUgktMTA2CisjZGVmaW5lIEVWX1BST0NfQ0lETU9ERQktMTA3CisjZGVmaW5lIEVWX1NIVVRET1dOCS0xMDgKKyNkZWZpbmUgRVZfU1RBUlQJLTExMAorI2RlZmluZSBFVl9TVE9QCQktMTExCisjZGVmaW5lIEVWX0lGX0xPQ0sJLTExMgorI2RlZmluZSBFVl9QUk9UT19MMgktMTEzCisjZGVmaW5lIEVWX0FDQ0VQVAktMTE0CisjZGVmaW5lIEVWX0RJQUwJCS0xMTUKKyNkZWZpbmUgRVZfSFVQCQktMTE2CisjZGVmaW5lIEVWX0JDX09QRU4JLTExNworI2RlZmluZSBFVl9CQ19DTE9TRUQJLTExOAogCiAvKiBpbnB1dCBzdGF0ZSAqLwotI2RlZmluZSBJTlNfY29tbWFuZCAgICAgMHgwMDAxCi0jZGVmaW5lIElOU19ETEVfY2hhciAgICAweDAwMDIKLSNkZWZpbmUgSU5TX2J5dGVfc3R1ZmYgIDB4MDAwNAotI2RlZmluZSBJTlNfaGF2ZV9kYXRhICAgMHgwMDA4Ci0jZGVmaW5lIElOU19za2lwX2ZyYW1lICAweDAwMTAKLSNkZWZpbmUgSU5TX0RMRV9jb21tYW5kIDB4MDAyMAorI2RlZmluZSBJTlNfY29tbWFuZAkweDAwMDEKKyNkZWZpbmUgSU5TX0RMRV9jaGFyCTB4MDAwMgorI2RlZmluZSBJTlNfYnl0ZV9zdHVmZgkweDAwMDQKKyNkZWZpbmUgSU5TX2hhdmVfZGF0YQkweDAwMDgKKyNkZWZpbmUgSU5TX3NraXBfZnJhbWUJMHgwMDEwCisjZGVmaW5lIElOU19ETEVfY29tbWFuZAkweDAwMjAKICNkZWZpbmUgSU5TX2ZsYWdfaHVudAkweDAwNDAKIAogLyogY2hhbm5lbCBzdGF0ZSAqLwpAQCAtMjQ4LDI3ICsyNjcsMjcgQEAKICNkZWZpbmUgQ0hTX0JfVVAJMHgwMgogI2RlZmluZSBDSFNfTk9USUZZX0xMCTB4MDQKIAotI2RlZmluZSBJQ0FMTF9SRUpFQ1QgIDAKLSNkZWZpbmUgSUNBTExfQUNDRVBUICAxCi0jZGVmaW5lIElDQUxMX0lHTk9SRSAgMgorI2RlZmluZSBJQ0FMTF9SRUpFQ1QJMAorI2RlZmluZSBJQ0FMTF9BQ0NFUFQJMQorI2RlZmluZSBJQ0FMTF9JR05PUkUJMgogCiAvKiBkZXZpY2Ugc3RhdGUgKi8KLSNkZWZpbmUgTVNfVU5JTklUSUFMSVpFRCAgICAgICAgMAotI2RlZmluZSBNU19JTklUICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIE1TX0xPQ0tFRCAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTVNfU0hVVERPV04gICAgICAgICAgICAgMwotI2RlZmluZSBNU19SRUNPVkVSICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1TX1JFQURZICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTVNfVU5JTklUSUFMSVpFRAkwCisjZGVmaW5lIE1TX0lOSVQJCQkxCisjZGVmaW5lIE1TX0xPQ0tFRAkJMgorI2RlZmluZSBNU19TSFVURE9XTgkJMworI2RlZmluZSBNU19SRUNPVkVSCQk0CisjZGVmaW5lIE1TX1JFQURZCQk1CiAKIC8qIG1vZGUgKi8KLSNkZWZpbmUgTV9VTktOT1dOICAgICAgIDAKLSNkZWZpbmUgTV9DT05GSUcgICAgICAgIDEKLSNkZWZpbmUgTV9VTklNT0RFTSAgICAgIDIKLSNkZWZpbmUgTV9DSUQgICAgICAgICAgIDMKKyNkZWZpbmUgTV9VTktOT1dOCTAKKyNkZWZpbmUgTV9DT05GSUcJMQorI2RlZmluZSBNX1VOSU1PREVNCTIKKyNkZWZpbmUgTV9DSUQJCTMKIAogLyogc3RhcnQgbW9kZSAqLwotI2RlZmluZSBTTV9MT0NLRUQgICAgICAgMAotI2RlZmluZSBTTV9JU0ROICAgICAgICAgMSAvKiBkZWZhdWx0ICovCisjZGVmaW5lIFNNX0xPQ0tFRAkwCisjZGVmaW5lIFNNX0lTRE4JCTEgLyogZGVmYXVsdCAqLwogCiBzdHJ1Y3QgZ2lnYXNldF9vcHM7CiBzdHJ1Y3QgZ2lnYXNldF9kcml2ZXI7CkBAIC0yODMsMjcgKzMwMiwyNiBAQAogc3RydWN0IGJhc19iY19zdGF0ZTsKIAogc3RydWN0IHJlcGx5X3QgewotCWludAlyZXNwX2NvZGU7ICAgICAgLyogUlNQX1hYWFggKi8KLQlpbnQJbWluX0NvblN0YXRlOyAgIC8qIDwwID0+IGlnbm9yZSAqLwotCWludAltYXhfQ29uU3RhdGU7ICAgLyogPDAgPT4gaWdub3JlICovCi0JaW50CXBhcmFtZXRlcjsgICAgICAvKiBlLmcuIFpTQVVfWFhYWCA8MDogaWdub3JlKi8KLQlpbnQJbmV3X0NvblN0YXRlOyAgIC8qIDwwID0+IGlnbm9yZSAqLwotCWludAl0aW1lb3V0OyAgICAgICAgLyogPjAgPT4gKkhaOyA8PTAgPT4gVE9VVF9YWFhYKi8KLQlpbnQJYWN0aW9uW01BWEFDVF07IC8qIEFDVF9YWFhYICovCi0JY2hhciAqY29tbWFuZDsgICAgICAgIC8qIE5VTEw9PW5vbmUgKi8KKwlpbnQJcmVzcF9jb2RlOwkvKiBSU1BfWFhYWCAqLworCWludAltaW5fQ29uU3RhdGU7CS8qIDwwID0+IGlnbm9yZSAqLworCWludAltYXhfQ29uU3RhdGU7CS8qIDwwID0+IGlnbm9yZSAqLworCWludAlwYXJhbWV0ZXI7CS8qIGUuZy4gWlNBVV9YWFhYIDwwOiBpZ25vcmUqLworCWludAluZXdfQ29uU3RhdGU7CS8qIDwwID0+IGlnbm9yZSAqLworCWludAl0aW1lb3V0OwkvKiA+MCA9PiAqSFo7IDw9MCA9PiBUT1VUX1hYWFgqLworCWludAlhY3Rpb25bTUFYQUNUXTsJLyogQUNUX1hYWFggKi8KKwljaGFyCSpjb21tYW5kOwkvKiBOVUxMPT1ub25lICovCiB9OwogCiBleHRlcm4gc3RydWN0IHJlcGx5X3QgZ2lnYXNldF90YWJfY2lkX20xMHhbXTsKIGV4dGVybiBzdHJ1Y3QgcmVwbHlfdCBnaWdhc2V0X3RhYl9ub2NpZF9tMTB4W107CiAKIHN0cnVjdCBpbmJ1Zl90IHsKLQl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqcmN2YnVmOyAgICAgICAgICAgICAgICAvKiB1c2ItZ2lnYXNldCByZWNlaXZlIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIJCSpyY3ZidWY7CS8qIHVzYi1naWdhc2V0IHJlY2VpdmUgYnVmZmVyICovCiAJc3RydWN0IGJjX3N0YXRlCQkqYmNzOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwotCWludCBpbnB1dHN0YXRlOwotCi0JYXRvbWljX3QgaGVhZCwgdGFpbDsKLQl1bnNpZ25lZCBjaGFyIGRhdGFbUkJVRlNJWkVdOworCXN0cnVjdCBjYXJkc3RhdGUJKmNzOworCWludAkJCWlucHV0c3RhdGU7CisJYXRvbWljX3QJCWhlYWQsIHRhaWw7CisJdW5zaWduZWQgY2hhcgkJZGF0YVtSQlVGU0laRV07CiB9OwogCiAvKiBpc29jaHJvbm91cyB3cml0ZSBidWZmZXIgc3RydWN0dXJlCkBAIC0zMTksMTYgKzMzNyw5IEBACiAgKiAgIGlmIHdyaXRlc2VtIDw9IDAsIGRhdGFbd3JpdGUuLnJlYWQtMV0gaXMgY3VycmVudGx5IGJlaW5nIHdyaXR0ZW4gdG8KICAqIC0gaWRsZSBjb250YWlucyB0aGUgYnl0ZSB2YWx1ZSB0byByZXBlYXQgd2hlbiB0aGUgZW5kIG9mIHZhbGlkIGRhdGEgaXMKICAqICAgcmVhY2hlZDsgaWYgbmV4dHJlYWQ9PXdyaXRlIChidWZmZXIgY29udGFpbnMgbm8gZGF0YSB0byBzZW5kKSwgZWl0aGVyIHRoZQotICogICBCQVNfT1VUQlVGUEFEIGJ5dGVzIGltbWVkaWF0ZWx5IGJlZm9yZSBkYXRhW3dyaXRlXSAoaWYgd3JpdGU+PUJBU19PVVRCVUZQQUQpCi0gKiAgIG9yIHRob3NlIG9mIHRoZSBwYWQgYXJlYSAoaWYgd3JpdGU8QkFTX09VVEJVRlBBRCkgYXJlIGFsc28gZmlsbGVkIHdpdGggdGhhdAotICogICB2YWx1ZQotICogLSBvcHRpb25hbGx5LCB0aGUgZm9sbG93aW5nIHN0YXRpc3RpY3Mgb24gdGhlIGJ1ZmZlcidzIHVzYWdlIGNhbiBiZSBjb2xsZWN0ZWQ6Ci0gKiAgIG1heGZpbGw6IG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9jY3VwaWVkCi0gKiAgIGlkbGVmaWxsczogbnVtYmVyIG9mIHRpbWVzIGEgZnJhbWUgb2YgaWRsZSBieXRlcyBpcyBwcmVwYXJlZAotICogICBlbXB0eWdldHM6IG51bWJlciBvZiB0aW1lcyB0aGUgYnVmZmVyIHdhcyBlbXB0eSB3aGVuIGEgZGF0YSBmcmFtZSB3YXMgcmVxdWVzdGVkCi0gKiAgIGJhY2t0b2JhY2s6IG51bWJlciBvZiB0aW1lcyB0d28gZGF0YSBwYWNrZXRzIHdlcmUgZW50ZXJlZCBpbnRvIHRoZSBidWZmZXIKLSAqICAgIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgaWRsZSBmbGFncwotICogICBuYWtlZGJhY2s6IHNldCBpZiBubyBpZGxlIGZsYWdzIGhhdmUgYmVlbiBpbnNlcnRlZCBzaW5jZSB0aGUgbGFzdCBkYXRhIHBhY2tldAorICogICBCQVNfT1VUQlVGUEFEIGJ5dGVzIGltbWVkaWF0ZWx5IGJlZm9yZSBkYXRhW3dyaXRlXSAoaWYKKyAqICAgd3JpdGU+PUJBU19PVVRCVUZQQUQpIG9yIHRob3NlIG9mIHRoZSBwYWQgYXJlYSAoaWYgd3JpdGU8QkFTX09VVEJVRlBBRCkKKyAqICAgYXJlIGFsc28gZmlsbGVkIHdpdGggdGhhdCB2YWx1ZQogICovCiBzdHJ1Y3QgaXNvd2J1Zl90IHsKIAlhdG9taWNfdAlyZWFkOwpAQCAtMzU4LDM0ICszNjksMjggQEAKICAqIGl0IGlzIGN1cnJlbnRseSBhc3NpZ25lZCBhIEIgY2hhbm5lbAogICovCiBzdHJ1Y3QgYXRfc3RhdGVfdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nOwotCWludCAgICAgICAgICAgICAgICAgICAgIGdldHN0cmluZzsKLQlhdG9taWNfdAkJdGltZXJfaW5kZXg7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWludAkJCXdhaXRpbmc7CisJaW50CQkJZ2V0c3RyaW5nOworCXVuc2lnbmVkCQl0aW1lcl9pbmRleDsKIAl1bnNpZ25lZCBsb25nCQl0aW1lcl9leHBpcmVzOwogCWludAkJCXRpbWVyX2FjdGl2ZTsKLQl1bnNpZ25lZCBpbnQJCUNvblN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXRlIG9mIGNvbm5lY3Rpb24gKi8KLQlzdHJ1Y3QgcmVwbHlfdCAgICAgICAgICAqcmVwbHlzdHJ1Y3Q7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgY2lkOwotCWludCAgICAgICAgICAgICAgICAgICAgIGludF92YXJbVkFSX05VTV07ICAgLyogc2VlIFZBUl9YWFhYICovCi0JY2hhciAgICAgICAgICAgICAgICAgICAgKnN0cl92YXJbU1RSX05VTV07ICAvKiBzZWUgU1RSX1hYWFggKi8KLQl1bnNpZ25lZCAgICAgICAgICAgICAgICBwZW5kaW5nX2NvbW1hbmRzOyAgIC8qIHNlZSBQQ19YWFhYICovCi0JYXRvbWljX3QgICAgICAgICAgICAgICAgc2VxX2luZGV4OworCXVuc2lnbmVkIGludAkJQ29uU3RhdGU7CS8qIFN0YXRlIG9mIGNvbm5lY3Rpb24gKi8KKwlzdHJ1Y3QgcmVwbHlfdAkJKnJlcGx5c3RydWN0OworCWludAkJCWNpZDsKKwlpbnQJCQlpbnRfdmFyW1ZBUl9OVU1dOwkvKiBzZWUgVkFSX1hYWFggKi8KKwljaGFyCQkJKnN0cl92YXJbU1RSX05VTV07CS8qIHNlZSBTVFJfWFhYWCAqLworCXVuc2lnbmVkCQlwZW5kaW5nX2NvbW1hbmRzOwkvKiBzZWUgUENfWFhYWCAqLworCXVuc2lnbmVkCQlzZXFfaW5kZXg7CiAKLQlzdHJ1Y3QgY2FyZHN0YXRlICAgICpjczsKLQlzdHJ1Y3QgYmNfc3RhdGUgICAgICAgICAqYmNzOworCXN0cnVjdCBjYXJkc3RhdGUJKmNzOworCXN0cnVjdCBiY19zdGF0ZQkJKmJjczsKIH07CiAKIHN0cnVjdCByZXNwX3R5cGVfdCB7CiAJdW5zaWduZWQgY2hhcgkqcmVzcG9uc2U7Ci0JaW50CQlyZXNwX2NvZGU7ICAgICAgICAgICAvKiBSU1BfWFhYWCAqLwotCWludAkJdHlwZTsgICAgICAgICAgICAgICAgLyogUlRfWFhYWCAqLwotfTsKLQotc3RydWN0IHByb3Rfc2tiIHsKLQlhdG9taWNfdAkJZW1wdHk7Ci0Jc3RydWN0IHNlbWFwaG9yZQkqc2VtOwotCXN0cnVjdCBza19idWZmCQkqc2tiOworCWludAkJcmVzcF9jb2RlOwkvKiBSU1BfWFhYWCAqLworCWludAkJdHlwZTsJCS8qIFJUX1hYWFggKi8KIH07CiAKIHN0cnVjdCBldmVudF90IHsKQEAgLTM5OCwyOSArNDAzLDI5IEBACiAKIC8qIFRoaXMgYnVmZmVyIGhvbGRzIGFsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlZCBCLUNoYW5uZWwgKi8KIHN0cnVjdCBiY19zdGF0ZSB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHRyYW5zZmVyIGJ1ZmZlciB0byBtb2RlbSAqLwotCXN0cnVjdCBza19idWZmX2hlYWQgc3F1ZXVlOwkgICAgICAgICAgICAgICAvKiBCLUNoYW5uZWwgc2VuZCBRdWV1ZSAqLworCXN0cnVjdCBza19idWZmICp0eF9za2I7CQkvKiBDdXJyZW50IHRyYW5zZmVyIGJ1ZmZlciB0byBtb2RlbSAqLworCXN0cnVjdCBza19idWZmX2hlYWQgc3F1ZXVlOwkvKiBCLUNoYW5uZWwgc2VuZCBRdWV1ZSAqLwogCiAJLyogVmFyaWFibGVzIGZvciBkZWJ1Z2dpbmcgLi4gKi8KLQlpbnQgY29ycnVwdGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBmb3IgY29ycnVwdGVkIHBhY2thZ2VzICovCi0JaW50IHRyYW5zX2Rvd247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50ZXIgb2YgcGFja2FnZXMgKGRvd25zdHJlYW0pICovCi0JaW50IHRyYW5zX3VwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50ZXIgb2YgcGFja2FnZXMgKHVwc3RyZWFtKSAqLworCWludCBjb3JydXB0ZWQ7CQkJLyogQ291bnRlciBmb3IgY29ycnVwdGVkIHBhY2thZ2VzICovCisJaW50IHRyYW5zX2Rvd247CQkJLyogQ291bnRlciBvZiBwYWNrYWdlcyAoZG93bnN0cmVhbSkgKi8KKwlpbnQgdHJhbnNfdXA7CQkJLyogQ291bnRlciBvZiBwYWNrYWdlcyAodXBzdHJlYW0pICovCiAKIAlzdHJ1Y3QgYXRfc3RhdGVfdCBhdF9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHJjdmJ5dGVzOwogCiAJX191MTYgZmNzOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGlucHV0c3RhdGU7IC8qIHNlZSBJTlNfWFhYWCAqLworCWludCBpbnB1dHN0YXRlOwkJCS8qIHNlZSBJTlNfWFhYWCAqLwogCiAJaW50IGNoYW5uZWw7CiAKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAotCXVuc2lnbmVkIGNoc3RhdGU7CQkJLyogYml0bWFwIChDSFNfKikgKi8KKwl1bnNpZ25lZCBjaHN0YXRlOwkJLyogYml0bWFwIChDSFNfKikgKi8KIAlpbnQgaWdub3JlOwotCXVuc2lnbmVkCXByb3RvMjsJCQkvKiBMYXllciAyIHByb3RvY29sIChJU0ROX1BST1RPX0wyXyopICovCi0JY2hhcgkJKmNvbW1hbmRzW0FUX05VTV07IC8qIHNlZSBBVF9YWFhYICovCisJdW5zaWduZWQgcHJvdG8yOwkJLyogTGF5ZXIgMiBwcm90b2NvbCAoSVNETl9QUk9UT19MMl8qKSAqLworCWNoYXIgKmNvbW1hbmRzW0FUX05VTV07CQkvKiBzZWUgQVRfWFhYWCAqLwogCiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAlpbnQgZW1wdHljb3VudDsKQEAgLTQyOCwzNyArNDMzLDM5IEBACiAJaW50IGJ1c3k7CiAJaW50IHVzZV9jb3VudDsKIAotCS8qIGhhcmR3YXJlIGRyaXZlcnMgKi8KKwkvKiBwcml2YXRlIGRhdGEgb2YgaGFyZHdhcmUgZHJpdmVycyAqLwogCXVuaW9uIHsKLQkJc3RydWN0IHNlcl9iY19zdGF0ZSAqc2VyOwkJIC8qIHByaXZhdGUgZGF0YSBvZiBzZXJpYWwgaGFyZHdhcmUgZHJpdmVyICovCi0JCXN0cnVjdCB1c2JfYmNfc3RhdGUgKnVzYjsJCSAvKiBwcml2YXRlIGRhdGEgb2YgdXNiIGhhcmR3YXJlIGRyaXZlciAqLwotCQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICpiYXM7CisJCXN0cnVjdCBzZXJfYmNfc3RhdGUgKnNlcjsJLyogc2VyaWFsIGhhcmR3YXJlIGRyaXZlciAqLworCQlzdHJ1Y3QgdXNiX2JjX3N0YXRlICp1c2I7CS8qIHVzYiBoYXJkd2FyZSBkcml2ZXIgKG0xMDUpICovCisJCXN0cnVjdCBiYXNfYmNfc3RhdGUgKmJhczsJLyogdXNiIGhhcmR3YXJlIGRyaXZlciAoYmFzZSkgKi8KIAl9IGh3OwogfTsKIAogc3RydWN0IGNhcmRzdGF0ZSB7CiAJc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcml2ZXI7CiAJdW5zaWduZWQgbWlub3JfaW5kZXg7CisJc3RydWN0IGRldmljZSAqZGV2OwogCiAJY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHM7CiAKIAkvKiBTdHVmZiB0byBoYW5kbGUgY29tbXVuaWNhdGlvbiAqLwotCS8vd2FpdF9xdWV1ZV9oZWFkX3QgaW5pdHdhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHF1ZXVlOwogCWludCB3YWl0aW5nOwotCWF0b21pY190IG1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWUgTV9YWFhYICovCi0JYXRvbWljX3QgbXN0YXRlOyAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHN0YXRlOiBzZWUgTVNfWFhYWCAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IGNoYW5nZWQgYnkgdGhlIGV2ZW50IGxheWVyICovCisJYXRvbWljX3QgbW9kZTsJCQkvKiBzZWUgTV9YWFhYICovCisJYXRvbWljX3QgbXN0YXRlOwkJLyogTW9kZW0gc3RhdGU6IHNlZSBNU19YWFhYICovCisJCQkJCS8qIG9ubHkgY2hhbmdlZCBieSB0aGUgZXZlbnQgbGF5ZXIgKi8KIAlpbnQgY21kX3Jlc3VsdDsKIAogCWludCBjaGFubmVsczsKLQlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsgICAgICAgICAgICAgICAgLyogQXJyYXkgb2Ygc3RydWN0IGJjX3N0YXRlICovCisJc3RydWN0IGJjX3N0YXRlICpiY3M7CQkvKiBBcnJheSBvZiBzdHJ1Y3QgYmNfc3RhdGUgKi8KIAotCWludCBvbmVjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgICAvKiBkYXRhIGFuZCBjb21tYW5kcyB0cmFuc21pdHRlZCBpbiBvbmUgc3RyZWFtIChNMTB4KSAqLworCWludCBvbmVjaGFubmVsOwkJCS8qIGRhdGEgYW5kIGNvbW1hbmRzIHRyYW5zbWl0dGVkIGluIG9uZQorCQkJCQkgICBzdHJlYW0gKE0xMHgpICovCiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGF0X3N0YXRlX3QgYXRfc3RhdGU7ICAgICAgICAgIC8qIGF0X3N0YXRlX3QgZm9yIGNpZCA9PSAwICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0ZW1wX2F0X3N0YXRlczsgICAgIC8qIGxpc3Qgb2YgdGVtcG9yYXJ5ICJzdHJ1Y3QgYXRfc3RhdGVfdCJzIHdpdGhvdXQgQiBjaGFubmVsICovCisJc3RydWN0IGF0X3N0YXRlX3QgYXRfc3RhdGU7CS8qIGF0X3N0YXRlX3QgZm9yIGNpZCA9PSAwICovCisJc3RydWN0IGxpc3RfaGVhZCB0ZW1wX2F0X3N0YXRlczsvKiBsaXN0IG9mIHRlbXBvcmFyeSAic3RydWN0CisJCQkJCSAgIGF0X3N0YXRlX3QicyB3aXRob3V0IEIgY2hhbm5lbCAqLwogCiAJc3RydWN0IGluYnVmX3QgKmluYnVmOwogCkBAIC00NzQsNTggKzQ4MSw2OSBAQAogCXVuc2lnbmVkIGZ3dmVyWzRdOwogCWludCBnb3Rmd3ZlcjsKIAotCWF0b21pY190IHJ1bm5pbmc7ICAgICAgICAgICAgICAgICAgICAvKiAhPTAgaWYgZXZlbnRzIGFyZSBoYW5kbGVkICovCi0JYXRvbWljX3QgY29ubmVjdGVkOyAgICAgICAgICAgICAgICAgIC8qICE9MCBpZiBoYXJkd2FyZSBpcyBjb25uZWN0ZWQgKi8KKwl1bnNpZ25lZCBydW5uaW5nOwkJLyogIT0wIGlmIGV2ZW50cyBhcmUgaGFuZGxlZCAqLworCXVuc2lnbmVkIGNvbm5lY3RlZDsJCS8qICE9MCBpZiBoYXJkd2FyZSBpcyBjb25uZWN0ZWQgKi8KKwl1bnNpZ25lZCBpc2RuX3VwOwkJLyogIT0wIGFmdGVyIElTRE5fU1RBVF9SVU4gKi8KIAotCWF0b21pY190IGNpZG1vZGU7CisJdW5zaWduZWQgY2lkbW9kZTsKIAotCWludCBteWlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIExMICovCisJaW50IG15aWQ7CQkJLyogaWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBMTCAqLwogCWlzZG5faWYgaWlmOwogCiAJc3RydWN0IHJlcGx5X3QgKnRhYm5vY2lkOwogCXN0cnVjdCByZXBseV90ICp0YWJjaWQ7CiAJaW50IGNzX2luaXQ7Ci0JaW50IGlnbm9yZWZyYW1lczsgICAgICAgICAgICAgICAgICAgIC8qIGZyYW1lcyB0byBpZ25vcmUgYWZ0ZXIgc2V0dGluZyB1cCB0aGUgQiBjaGFubmVsICovCi0Jc3RydWN0IHNlbWFwaG9yZSBzZW07ICAgICAgICAgICAgICAgIC8qIGxvY2tzIHRoaXMgc3RydWN0dXJlOiAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGNvbm5lY3RlZCBpcyBub3QgY2hhbmdlZCwgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBoYXJkd2FyZV91cCBpcyBub3QgY2hhbmdlZCwgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBNU3RhdGUgaXMgbm90IGNoYW5nZWQgdG8gb3IgZnJvbSBNU19MT0NLRUQgKi8KKwlpbnQgaWdub3JlZnJhbWVzOwkJLyogZnJhbWVzIHRvIGlnbm9yZSBhZnRlciBzZXR0aW5nIHVwIHRoZQorCQkJCQkgICBCIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CQkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZToKKwkJCQkJICogICBjb25uZWN0ZWQgaXMgbm90IGNoYW5nZWQsCisJCQkJCSAqICAgaGFyZHdhcmVfdXAgaXMgbm90IGNoYW5nZWQsCisJCQkJCSAqICAgTVN0YXRlIGlzIG5vdCBjaGFuZ2VkIHRvIG9yIGZyb20KKwkJCQkJICogICBNU19MT0NLRUQgKi8KIAogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCWludCByZXRyeV9jb3VudDsKLQlpbnQgZGxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIT0wIGlmIG1vZGVtIGNvbW1hbmRzL3Jlc3BvbnNlcyBhcmUgZGxlIGVuY29kZWQgKi8KLQlpbnQgY3VyX2F0X3NlcTsgICAgICAgICAgICAgICAgICAgICAgLyogc2VxdWVuY2Ugb2YgQVQgY29tbWFuZHMgYmVpbmcgcHJvY2Vzc2VkICovCi0JaW50IGN1cmNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwsIHRob3NlIGNvbW1hbmRzIGFyZSBtZWFudCBmb3IgKi8KLQlhdG9taWNfdCBjb21tYW5kc19wZW5kaW5nOyAgICAgICAgICAgLyogZmxhZyhzKSBpbiB4eHguY29tbWFuZHNfcGVuZGluZyBoYXZlIGJlZW4gc2V0ICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGV2ZW50X3Rhc2tsZXQ7IC8qIHRhc2tsZXQgZm9yIHNlcmlhbGl6aW5nIEFUIGNvbW1hbmRzLiBTY2hlZHVsZWQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAtPiBmb3IgbW9kZW0gcmVwb25zZXMgKGFuZCBpbmNvbW1pbmcgZGF0YSBmb3IgTTEweCkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAtPiBvbiB0aW1lb3V0Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgLT4gYWZ0ZXIgc2V0dGluZyBiaXRzIGluIHh4eC5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAoZS5nLiBjb21tYW5kIGZyb20gTEwpICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHdyaXRlX3Rhc2tsZXQ7IC8qIHRhc2tsZXQgZm9yIHNlcmlhbCBvdXRwdXQKLQkJCQkJICAgICAgKiAobm90IHVzZWQgaW4gYmFzZSBkcml2ZXIpICovCisJaW50IGRsZTsJCQkvKiAhPTAgaWYgbW9kZW0gY29tbWFuZHMvcmVzcG9uc2VzIGFyZQorCQkJCQkgICBkbGUgZW5jb2RlZCAqLworCWludCBjdXJfYXRfc2VxOwkJCS8qIHNlcXVlbmNlIG9mIEFUIGNvbW1hbmRzIGJlaW5nCisJCQkJCSAgIHByb2Nlc3NlZCAqLworCWludCBjdXJjaGFubmVsOwkJCS8qIGNoYW5uZWwgdGhvc2UgY29tbWFuZHMgYXJlIG1lYW50CisJCQkJCSAgIGZvciAqLworCWF0b21pY190IGNvbW1hbmRzX3BlbmRpbmc7CS8qIGZsYWcocykgaW4geHh4LmNvbW1hbmRzX3BlbmRpbmcgaGF2ZQorCQkJCQkgICBiZWVuIHNldCAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBldmVudF90YXNrbGV0OworCQkJCQkvKiB0YXNrbGV0IGZvciBzZXJpYWxpemluZyBBVCBjb21tYW5kcy4KKwkJCQkJICogU2NoZWR1bGVkCisJCQkJCSAqICAgLT4gZm9yIG1vZGVtIHJlcG9uc2VzIChhbmQKKwkJCQkJICogICAgICBpbmNvbWluZyBkYXRhIGZvciBNMTB4KQorCQkJCQkgKiAgIC0+IG9uIHRpbWVvdXQKKwkJCQkJICogICAtPiBhZnRlciBzZXR0aW5nIGJpdHMgaW4KKwkJCQkJICogICAgICB4eHguYXRfc3RhdGUucGVuZGluZ19jb21tYW5kCisJCQkJCSAqICAgICAgKGUuZy4gY29tbWFuZCBmcm9tIExMKSAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3cml0ZV90YXNrbGV0OworCQkJCQkvKiB0YXNrbGV0IGZvciBzZXJpYWwgb3V0cHV0CisJCQkJCSAqIChub3QgdXNlZCBpbiBiYXNlIGRyaXZlcikgKi8KIAogCS8qIGV2ZW50IHF1ZXVlICovCiAJc3RydWN0IGV2ZW50X3QgZXZlbnRzW01BWF9FVkVOVFNdOwotCWF0b21pY190IGV2X3RhaWwsIGV2X2hlYWQ7CisJdW5zaWduZWQgZXZfdGFpbCwgZXZfaGVhZDsKIAlzcGlubG9ja190IGV2X2xvY2s7CiAKIAkvKiBjdXJyZW50IG1vZGVtIHJlc3BvbnNlICovCiAJdW5zaWduZWQgY2hhciByZXNwZGF0YVtNQVhfUkVTUF9TSVpFXTsKIAl1bnNpZ25lZCBjYnl0ZXM7CiAKLQkvKiBoYXJkd2FyZSBkcml2ZXJzICovCisJLyogcHJpdmF0ZSBkYXRhIG9mIGhhcmR3YXJlIGRyaXZlcnMgKi8KIAl1bmlvbiB7Ci0JCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1c2I7IC8qIHByaXZhdGUgZGF0YSBvZiBVU0IgaGFyZHdhcmUgZHJpdmVyICovCi0JCXN0cnVjdCBzZXJfY2FyZHN0YXRlICpzZXI7IC8qIHByaXZhdGUgZGF0YSBvZiBzZXJpYWwgaGFyZHdhcmUgZHJpdmVyICovCi0JCXN0cnVjdCBiYXNfY2FyZHN0YXRlICpiYXM7IC8qIHByaXZhdGUgZGF0YSBvZiBiYXNlIGhhcmR3YXJlIGRyaXZlciAqLworCQlzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSAqdXNiOyAvKiBVU0IgaGFyZHdhcmUgZHJpdmVyIChtMTA1KSAqLworCQlzdHJ1Y3Qgc2VyX2NhcmRzdGF0ZSAqc2VyOyAvKiBzZXJpYWwgaGFyZHdhcmUgZHJpdmVyICovCisJCXN0cnVjdCBiYXNfY2FyZHN0YXRlICpiYXM7IC8qIFVTQiBoYXJkd2FyZSBkcml2ZXIgKGJhc2UpICovCiAJfSBodzsKIH07CiAKIHN0cnVjdCBnaWdhc2V0X2RyaXZlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2tzIG1pbm9yIHRhYmxlcyBhbmQgYmxvY2tlZCAqLwotCS8vc3RydWN0IHNlbWFwaG9yZSBzZW07ICAgICAgICAgICAgICAgIC8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3BpbmxvY2tfdCBsb2NrOwkJLyogbG9ja3MgbWlub3IgdGFibGVzIGFuZCBibG9ja2VkICovCiAJc3RydWN0IHR0eV9kcml2ZXIgKnR0eTsKIAl1bnNpZ25lZCBoYXZlX3R0eTsKIAl1bnNpZ25lZCBtaW5vcjsKQEAgLTU1MywzNyArNTcxLDQyIEBACiAJc3RydWN0IGlzb3dfdXJiY3R4X3QJaXNvb3V0dXJic1tCQVNfT1VUVVJCU107CiAJc3RydWN0IGlzb3dfdXJiY3R4X3QJKmlzb291dGRvbmUsICppc29vdXRmcmVlLCAqaXNvb3V0b3ZmbDsKIAlzdHJ1Y3QgaXNvd2J1Zl90CSppc29vdXRidWY7Ci0JdW5zaWduZWQgbnVtc3ViOwkJCS8qIHN1Ym1pdHRlZCBVUkIgY291bnRlciAoZm9yIGRpYWdub3N0aWMgbWVzc2FnZXMgb25seSkgKi8KKwl1bnNpZ25lZCBudW1zdWI7CQkvKiBzdWJtaXR0ZWQgVVJCIGNvdW50ZXIKKwkJCQkJICAgKGZvciBkaWFnbm9zdGljIG1lc3NhZ2VzIG9ubHkpICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXNlbnRfdGFza2xldDsKIAogCS8qIGlzb2Nocm9ub3VzIGlucHV0IHN0YXRlICovCiAJc3BpbmxvY2tfdCBpc29pbmxvY2s7CiAJc3RydWN0IHVyYiAqaXNvaW51cmJzW0JBU19JTlVSQlNdOwogCXVuc2lnbmVkIGNoYXIgaXNvaW5idWZbQkFTX0lOQlVGU0laRSAqIEJBU19JTlVSQlNdOwotCXN0cnVjdCB1cmIgKmlzb2luZG9uZTsJICAgICAgICAgICAgICAgIC8qIGNvbXBsZXRlZCBpc29jIHJlYWQgVVJCICovCi0JaW50IGxvc3RzdGF0dXM7CQkJCS8qIHN0YXR1cyBvZiBkcm9wcGVkIFVSQiAqLwotCXVuc2lnbmVkIGlzb2lubG9zdDsJCQkvKiBudW1iZXIgb2YgYnl0ZXMgbG9zdCAqLwotCS8qIHN0YXRlIG9mIGJpdCB1bnN0dWZmaW5nIGFsZ29yaXRobSAoaW4gYWRkaXRpb24gdG8gQkNfc3RhdGUuaW5wdXRzdGF0ZSkgKi8KLQl1bnNpZ25lZCBzZXFsZW47CQkJLyogbnVtYmVyIG9mICcxJyBiaXRzIG5vdCB5ZXQgdW5zdHVmZmVkICovCi0JdW5zaWduZWQgaW5ieXRlLCBpbmJpdHM7CQkvKiBjb2xsZWN0ZWQgYml0cyBmb3IgbmV4dCBieXRlICovCisJc3RydWN0IHVyYiAqaXNvaW5kb25lOwkJLyogY29tcGxldGVkIGlzb2MgcmVhZCBVUkIgKi8KKwlpbnQgbG9zdHN0YXR1czsJCQkvKiBzdGF0dXMgb2YgZHJvcHBlZCBVUkIgKi8KKwl1bnNpZ25lZCBpc29pbmxvc3Q7CQkvKiBudW1iZXIgb2YgYnl0ZXMgbG9zdCAqLworCS8qIHN0YXRlIG9mIGJpdCB1bnN0dWZmaW5nIGFsZ29yaXRobQorCSAgIChpbiBhZGRpdGlvbiB0byBCQ19zdGF0ZS5pbnB1dHN0YXRlKSAqLworCXVuc2lnbmVkIHNlcWxlbjsJCS8qIG51bWJlciBvZiAnMScgYml0cyBub3QgeWV0CisJCQkJCSAgIHVuc3R1ZmZlZCAqLworCXVuc2lnbmVkIGluYnl0ZSwgaW5iaXRzOwkvKiBjb2xsZWN0ZWQgYml0cyBmb3IgbmV4dCBieXRlICovCiAJLyogc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGdvb2RieXRlczsJCQkvKiBieXRlcyBjb3JyZWN0bHkgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBhbGlnbmVycnM7CQkJLyogZnJhbWVzIHdpdGggaW5jb21wbGV0ZSBieXRlIGF0IGVuZCAqLwotCXVuc2lnbmVkIGZjc2VycnM7CQkJLyogRkNTIGVycm9ycyAqLwotCXVuc2lnbmVkIGZyYW1lZXJyczsJCQkvKiBmcmFtaW5nIGVycm9ycyAqLwotCXVuc2lnbmVkIGdpYW50czsJCQkvKiBsb25nIGZyYW1lcyAqLwotCXVuc2lnbmVkIHJ1bnRzOwkJCQkvKiBzaG9ydCBmcmFtZXMgKi8KLQl1bnNpZ25lZCBhYm9ydHM7CQkJLyogSERMQyBhYm9ydHMgKi8KLQl1bnNpZ25lZCBzaGFyZWQwczsJCQkvKiAnMCcgYml0cyBzaGFyZWQgYmV0d2VlbiBmbGFncyAqLwotCXVuc2lnbmVkIHN0b2xlbjBzOwkJCS8qICcwJyBzdHVmZiBiaXRzIGFsc28gc2VydmluZyBhcyBsZWFkaW5nIGZsYWcgYml0cyAqLworCXVuc2lnbmVkIGdvb2RieXRlczsJCS8qIGJ5dGVzIGNvcnJlY3RseSByZWNlaXZlZCAqLworCXVuc2lnbmVkIGFsaWduZXJyczsJCS8qIGZyYW1lcyB3aXRoIGluY29tcGxldGUgYnl0ZSBhdCBlbmQgKi8KKwl1bnNpZ25lZCBmY3NlcnJzOwkJLyogRkNTIGVycm9ycyAqLworCXVuc2lnbmVkIGZyYW1lZXJyczsJCS8qIGZyYW1pbmcgZXJyb3JzICovCisJdW5zaWduZWQgZ2lhbnRzOwkJLyogbG9uZyBmcmFtZXMgKi8KKwl1bnNpZ25lZCBydW50czsJCQkvKiBzaG9ydCBmcmFtZXMgKi8KKwl1bnNpZ25lZCBhYm9ydHM7CQkvKiBIRExDIGFib3J0cyAqLworCXVuc2lnbmVkIHNoYXJlZDBzOwkJLyogJzAnIGJpdHMgc2hhcmVkIGJldHdlZW4gZmxhZ3MgKi8KKwl1bnNpZ25lZCBzdG9sZW4wczsJCS8qICcwJyBzdHVmZiBiaXRzIGFsc28gc2VydmluZyBhcworCQkJCQkgICBsZWFkaW5nIGZsYWcgYml0cyAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByY3ZkX3Rhc2tsZXQ7CiB9OwogCiBzdHJ1Y3QgZ2lnYXNldF9vcHMgewotCS8qIENhbGxlZCBmcm9tIGV2LWxheWVyLmMvaW50ZXJmYWNlLmMgZm9yIHNlbmRpbmcgQVQgY29tbWFuZHMgdG8gdGhlIGRldmljZSAqLworCS8qIENhbGxlZCBmcm9tIGV2LWxheWVyLmMvaW50ZXJmYWNlLmMgZm9yIHNlbmRpbmcgQVQgY29tbWFuZHMgdG8gdGhlCisJICAgZGV2aWNlICovCiAJaW50ICgqd3JpdGVfY21kKShzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLQkgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKLQkgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KTsKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCisJCQkgc3RydWN0IHRhc2tsZXRfc3RydWN0ICp3YWtlX3Rhc2tsZXQpOwogCiAJLyogQ2FsbGVkIGZyb20gaW50ZXJmYWNlLmMgZm9yIGFkZGl0aW9uYWwgZGV2aWNlIGNvbnRyb2wgKi8KIAlpbnQgKCp3cml0ZV9yb29tKShzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CkBAIC02MDQsNyArNjI3LDcgQEAKIAkvKiBDYWxsZWQgYnkgZ2lnYXNldF9mcmVlY3MoKSBmb3IgZnJlZWluZyBiY3MtPmh3Lnh4eCAqLwogCWludCAoKmZyZWViY3Nodykoc3RydWN0IGJjX3N0YXRlICpiY3MpOwogCi0JLyogQ2FsbGVkIGJ5IGdpZ2FzZXRfc3RvcCgpIG9yIGdpZ2FzZXRfYmNoYW5uZWxfZG93bigpIGZvciByZXNldHRpbmcgYmNzLT5ody54eHggKi8KKwkvKiBDYWxsZWQgYnkgZ2lnYXNldF9iY2hhbm5lbF9kb3duKCkgZm9yIHJlc2V0dGluZyBiY3MtPmh3Lnh4eCAqLwogCXZvaWQgKCpyZWluaXRiY3Nodykoc3RydWN0IGJjX3N0YXRlICpiY3MpOwogCiAJLyogQ2FsbGVkIGJ5IGdpZ2FzZXRfaW5pdGNzKCkgZm9yIHNldHRpbmcgdXAgY3MtPmh3Lnh4eCAqLwpAQCAtNjEzLDEzICs2MzYsMTAgQEAKIAkvKiBDYWxsZWQgYnkgZ2lnYXNldF9mcmVlY3MoKSBmb3IgZnJlZWluZyBjcy0+aHcueHh4ICovCiAJdm9pZCAoKmZyZWVjc2h3KShzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CiAKLQkvLy8qIENhbGxlZCBieSBnaWdhc2V0X3N0b3AoKSBmb3Iga2lsbGluZyBVUkJzLCBzaHV0dGluZyBkb3duIHRoZSBkZXZpY2UsIC4uLgotCS8vICAgaGFyZHdhcmV1cDogPT0wOiBkb24ndCB0cnkgdG8gc2h1dCBkb3duIHRoZSBkZXZpY2UsIGhhcmR3YXJlIGlzIHJlYWxseSBub3QgYWNjZXNzaWJsZQotCS8vCSAgICAgICAhPTA6IGhhcmR3YXJlIHN0aWxsIHVwICovCi0JLy92b2lkICgqc3RvcGh3KShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGhhcmR3YXJldXApOwotCi0JLyogQ2FsbGVkIGZyb20gY29tbW9uLmMvaW50ZXJmYWNlLmMgZm9yIGFkZGl0aW9uYWwgc2VyaWFsIHBvcnQgY29udHJvbCAqLwotCWludCAoKnNldF9tb2RlbV9jdHJsKShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgb2xkX3N0YXRlLCB1bnNpZ25lZCBuZXdfc3RhdGUpOworCS8qIENhbGxlZCBmcm9tIGNvbW1vbi5jL2ludGVyZmFjZS5jIGZvciBhZGRpdGlvbmFsIHNlcmlhbCBwb3J0CisJICAgY29udHJvbCAqLworCWludCAoKnNldF9tb2RlbV9jdHJsKShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgb2xkX3N0YXRlLAorCQkJICAgICAgdW5zaWduZWQgbmV3X3N0YXRlKTsKIAlpbnQgKCpiYXVkX3JhdGUpKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjZmxhZyk7CiAJaW50ICgqc2V0X2xpbmVfY3RybCkoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNmbGFnKTsKIApAQCAtNjM5LDcgKzY1OSw3IEBACiAgKiA8RExFX0ZMQUc+OiAgMHgxMAogICogPEVWRU5UPjogICAgICgoYS16KSogfCAoQS1aKSogfCAoMC0xMCkqKSsKICAqLwotI2RlZmluZSBETEVfRkxBRyAgICAgICAweDEwCisjZGVmaW5lIERMRV9GTEFHCTB4MTAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAgRnVuY3Rpb25zIGltcGxlbWVudGVkIGluIGFzeW5jZGF0YS5jCkBAIC02NjcsNyArNjg3LDggQEAKIAogLyogQ2FsbGVkIGZyb20gYmFzLWdpZ2FzZXQuYyB0byBwcm9jZXNzIGEgYmxvY2sgb2YgZGF0YQogICogcmVjZWl2ZWQgdGhyb3VnaCB0aGUgaXNvY2hyb25vdXMgY2hhbm5lbCAqLwotdm9pZCBnaWdhc2V0X2lzb2NfcmVjZWl2ZSh1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNvdW50LCBzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7Cit2b2lkIGdpZ2FzZXRfaXNvY19yZWNlaXZlKHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY291bnQsCisJCQkgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKIAogLyogQ2FsbGVkIGZyb20gYmFzLWdpZ2FzZXQuYyB0byBwdXQgYSBibG9jayBvZiBkYXRhCiAgKiBpbnRvIHRoZSBpc29jaHJvbm91cyBvdXRwdXQgYnVmZmVyICovCkBAIC03MDMsNyArNzI0LDcgQEAKIAlpc2RuX2N0cmwgcmVzcG9uc2U7CiAKIAkvKiBlcnJvciAtPiBMTCAqLwotCWRiZyhERUJVR19DTUQsICJzZW5kaW5nIEwxRVJSIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzZW5kaW5nIEwxRVJSIik7CiAJcmVzcG9uc2UuZHJpdmVyID0gYmNzLT5jcy0+bXlpZDsKIAlyZXNwb25zZS5jb21tYW5kID0gSVNETl9TVEFUX0wxRVJSOwogCXJlc3BvbnNlLmFyZyA9IGJjcy0+Y2hhbm5lbDsKQEAgLTcyNyw4ICs3NDgsOCBAQAogICovCiAKIC8qIGluaXRpYWxpemUgc3lzZnMgZm9yIGRldmljZSAqLwotdm9pZCBnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwotdm9pZCBnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwordm9pZCBnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKK3ZvaWQgZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogIEZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBjb21tb24uYy9naWdhc2V0LmgKQEAgLTczNiw3ICs3NTcsNyBAQAogCiB2b2lkIGdpZ2FzZXRfYmNzX3JlaW5pdChzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7CiB2b2lkIGdpZ2FzZXRfYXRfaW5pdChzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIHN0cnVjdCBiY19zdGF0ZSAqYmNzLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBjaWQpOworCQkgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2lkKTsKIGludCBnaWdhc2V0X2dldF9jaGFubmVsKHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKIHZvaWQgZ2lnYXNldF9mcmVlX2NoYW5uZWwoc3RydWN0IGJjX3N0YXRlICpiY3MpOwogaW50IGdpZ2FzZXRfZ2V0X2NoYW5uZWxzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKQEAgLTc0NSwxNiArNzY2LDE1IEBACiAKIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRyaXZlciBzdHJ1Y3R1cmUuICovCiBzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmdpZ2FzZXRfaW5pdGRyaXZlcih1bnNpZ25lZCBtaW5vciwgdW5zaWduZWQgbWlub3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2ZnNuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CisJCQkJCSAgY29uc3QgY2hhciAqcHJvY25hbWUsCisJCQkJCSAgY29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCQkJICBjb25zdCBjaGFyICpkZXZmc25hbWUsCisJCQkJCSAgY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHMsCisJCQkJCSAgc3RydWN0IG1vZHVsZSAqb3duZXIpOwogCiAvKiBEZWFsbG9jYXRlIGRyaXZlciBzdHJ1Y3R1cmUuICovCiB2b2lkIGdpZ2FzZXRfZnJlZWRyaXZlcihzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydik7CiB2b2lkIGdpZ2FzZXRfZGVidWdkcml2ZXJzKHZvaWQpOwotc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9nZXRfY3NfYnlfbWlub3IodW5zaWduZWQgbWlub3IpOwogc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9nZXRfY3NfYnlfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9nZXRfY3NfYnlfaWQoaW50IGlkKTsKIApAQCAtNzYzLDcgKzc4Myw4IEBACiB2b2lkIGdpZ2FzZXRfdW5hc3NpZ24oc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwogdm9pZCBnaWdhc2V0X2Jsb2NrZHJpdmVyKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KTsKIAotLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgY2FyZCBzdGF0ZS4gQ2FsbHMgaGFyZHdhcmUgZGVwZW5kZW50IGdpZ2FzZXRfaW5pdFtiXWNzKCkuICovCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBjYXJkIHN0YXRlLiBDYWxscyBoYXJkd2FyZSBkZXBlbmRlbnQKKyAgIGdpZ2FzZXRfaW5pdFtiXWNzKCkuICovCiBzdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2luaXRjcyhzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiwgaW50IGNoYW5uZWxzLAogCQkJCSBpbnQgb25lY2hhbm5lbCwgaW50IGlnbm9yZWZyYW1lcywKIAkJCQkgaW50IGNpZG1vZGUsIGNvbnN0IGNoYXIgKm1vZHVsZW5hbWUpOwpAQCAtNzg4LDggKzgwOSw4IEBACiAgKiBwdHIgbXVzdCBiZSBrbWFsbG9jKCllZCAoYW5kIG5vdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyKS4KICAqLwogc3RydWN0IGV2ZW50X3QgKmdpZ2FzZXRfYWRkX2V2ZW50KHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgaW50IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHRyLCBpbnQgcGFyYW1ldGVyLCB2b2lkICphcmcpOworCQkJCSAgc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBpbnQgdHlwZSwKKwkJCQkgIHZvaWQgKnB0ciwgaW50IHBhcmFtZXRlciwgdm9pZCAqYXJnKTsKIAogLyogQ2FsbGVkIG9uIENPTkZJRzEgY29tbWFuZCBmcm9tIGZyb250ZW5kLiAqLwogaW50IGdpZ2FzZXRfZW50ZXJjb25maWdtb2RlKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsgLy8wOiBzdWNjZXNzIDwwOiBlcnJvcmNvZGUKQEAgLTc5OSw3ICs4MjAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZjcy0+cnVubmluZykpCisJaWYgKGNzLT5ydW5uaW5nKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+ZXZlbnRfdGFza2xldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTgxMCw3ICs4MzEsNyBAQAogewogCWdpZ2FzZXRfYWRkX2V2ZW50KGJjcy0+Y3MsICZiY3MtPmF0X3N0YXRlLCBFVl9CQ19DTE9TRUQsIE5VTEwsIDAsIE5VTEwpOwogCi0JZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgQkNfQ0xPU0VEIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEJDX0NMT1NFRCIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoYmNzLT5jcyk7CiB9CiAKQEAgLTgyMCwzNiArODQxLDE5IEBACiB7CiAJZ2lnYXNldF9hZGRfZXZlbnQoYmNzLT5jcywgJmJjcy0+YXRfc3RhdGUsIEVWX0JDX09QRU4sIE5VTEwsIDAsIE5VTEwpOwogCi0JZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgQkNfT1BFTiIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBCQ19PUEVOIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChiY3MtPmNzKTsKIH0KIAogLyogaGFuZGxpbmcgcm91dGluZXMgZm9yIHNrX2J1ZmYgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKLS8qIHByaXZhdGUgdmVyc2lvbiBvZiBfX3NrYl9wdXQoKQotICogYXBwZW5kICdsZW4nIGJ5dGVzIHRvIHRoZSBjb250ZW50IG9mICdza2InLCBhbHJlYWR5IGtub3dpbmcgdGhhdCB0aGUKLSAqIGV4aXN0aW5nIGJ1ZmZlciBjYW4gYWNjb21vZGF0ZSB0aGVtCi0gKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIG5ldyBieXRlcyBzaG91bGQgYmUgY29waWVkIHRvCi0gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgYW55IGxvY2tzIHNvIGl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlCi0gKiBhcHByb3ByaWF0ZSBsb2NrcyBoZWxkIG9ubHkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqZ2lnYXNldF9za2JfcHV0X3F1aWNrKHN0cnVjdCBza19idWZmICpza2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQotewotCXVuc2lnbmVkIGNoYXIgKnRtcCA9IHNrYi0+dGFpbDsKLQkvKlNLQl9MSU5FQVJfQVNTRVJUKHNrYik7Ki8JCS8qIG5vdCBuZWVkZWQgaGVyZSAqLwotCXNrYi0+dGFpbCArPSBsZW47Ci0Jc2tiLT5sZW4gKz0gbGVuOwotCXJldHVybiB0bXA7Ci19Ci0KIC8qIHBhc3MgcmVjZWl2ZWQgc2tiIHRvIExMCiAgKiBXYXJuaW5nOiBza2IgbXVzdCBub3QgYmUgYWNjZXNzZWQgYW55bW9yZSEKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGdpZ2FzZXRfcmN2X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJjX3N0YXRlICpiY3MpCisJCQkJICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsCisJCQkJICAgc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CiAJY3MtPmlpZi5yY3ZjYWxsYl9za2IoY3MtPm15aWQsIGJjcy0+Y2hhbm5lbCwgc2tiKTsKIAliY3MtPnRyYW5zX2Rvd24rKzsKQEAgLTg1OSw4ICs4NjMsOCBAQAogICogV2FybmluZzogc2tiIG11c3Qgbm90IGJlIGFjY2Vzc2VkIGFueW1vcmUhCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBnaWdhc2V0X3Jjdl9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqcHJvY3NrYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKKwkJCQkgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLAorCQkJCSAgICAgc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CiAJaWYgKHByb2Nza2IpCiAJCWRldl9rZnJlZV9za2IocHJvY3NrYik7CkBAIC04NzcsNDYgKzg4MSw5IEBACiAvKiBiaXR3aXNlIGJ5dGUgaW52ZXJzaW9uIHRhYmxlICovCiBleHRlcm4gX191OCBnaWdhc2V0X2ludnRhYltdOwkvKiBpbiBjb21tb24uYyAqLwogCi0KIC8qIGFwcGVuZCByZWNlaXZlZCBieXRlcyB0byBpbmJ1ZiAqLwotc3RhdGljIGlubGluZSBpbnQgZ2lnYXNldF9maWxsX2luYnVmKHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYnl0ZXMpCi17Ci0JdW5zaWduZWQgbiwgaGVhZCwgdGFpbCwgYnl0ZXNsZWZ0OwotCi0JZGJnKERFQlVHX0lOVFIsICJyZWNlaXZlZCAldSBieXRlcyIsIG51bWJ5dGVzKTsKLQotCWlmICghbnVtYnl0ZXMpCi0JCXJldHVybiAwOwotCi0JYnl0ZXNsZWZ0ID0gbnVtYnl0ZXM7Ci0JdGFpbCA9IGF0b21pY19yZWFkKCZpbmJ1Zi0+dGFpbCk7Ci0JaGVhZCA9IGF0b21pY19yZWFkKCZpbmJ1Zi0+aGVhZCk7Ci0JZGJnKERFQlVHX0lOVFIsICJidWZmZXIgc3RhdGU6ICV1IC0+ICV1IiwgaGVhZCwgdGFpbCk7Ci0KLQl3aGlsZSAoYnl0ZXNsZWZ0KSB7Ci0JCWlmIChoZWFkID4gdGFpbCkKLQkJCW4gPSBoZWFkIC0gMSAtIHRhaWw7Ci0JCWVsc2UgaWYgKGhlYWQgPT0gMCkKLQkJCW4gPSAoUkJVRlNJWkUtMSkgLSB0YWlsOwotCQllbHNlCi0JCQluID0gUkJVRlNJWkUgLSB0YWlsOwotCQlpZiAoIW4pIHsKLQkJCWVycigiYnVmZmVyIG92ZXJmbG93ICgldSBieXRlcyBsb3N0KSIsIGJ5dGVzbGVmdCk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAobiA+IGJ5dGVzbGVmdCkKLQkJCW4gPSBieXRlc2xlZnQ7Ci0JCW1lbWNweShpbmJ1Zi0+ZGF0YSArIHRhaWwsIHNyYywgbik7Ci0JCWJ5dGVzbGVmdCAtPSBuOwotCQl0YWlsID0gKHRhaWwgKyBuKSAlIFJCVUZTSVpFOwotCQlzcmMgKz0gbjsKLQl9Ci0JZGJnKERFQlVHX0lOVFIsICJzZXR0aW5nIHRhaWwgdG8gJXUiLCB0YWlsKTsKLQlhdG9taWNfc2V0KCZpbmJ1Zi0+dGFpbCwgdGFpbCk7Ci0JcmV0dXJuIG51bWJ5dGVzICE9IGJ5dGVzbGVmdDsKLX0KK2ludCBnaWdhc2V0X2ZpbGxfaW5idWYoc3RydWN0IGluYnVmX3QgKmluYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBudW1ieXRlcyk7CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogIEZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBpbnRlcmZhY2UuYwpAQCAtOTI0LDcgKzg5MSw3IEBACiAKIC8qIGluaXRpYWxpemUgaW50ZXJmYWNlICovCiB2b2lkIGdpZ2FzZXRfaWZfaW5pdGRyaXZlcihzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqcHJvY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZuYW1lLCBjb25zdCBjaGFyICpkZXZmc25hbWUpOworCQkJICAgY29uc3QgY2hhciAqZGV2bmFtZSwgY29uc3QgY2hhciAqZGV2ZnNuYW1lKTsKIC8qIHJlbGVhc2UgaW50ZXJmYWNlICovCiB2b2lkIGdpZ2FzZXRfaWZfZnJlZWRyaXZlcihzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydik7CiAvKiBhZGQgbWlub3IgKi8KQEAgLTkzMyw2ICs5MDAsNiBAQAogdm9pZCBnaWdhc2V0X2lmX2ZyZWUoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwogLyogZGV2aWNlIHJlY2VpdmVkIGRhdGEgKi8KIHZvaWQgZ2lnYXNldF9pZl9yZWNlaXZlKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuKTsKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pNGwuYwppbmRleCA3MzFhNjc1Li4xNjU0ZmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pNGwuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pNGwuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiBTdHVmZiB1c2VkIGJ5IGFsbCB2YXJpYW50cyBvZiB0aGUgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMgKEVpbGVycy5TdGVmYW5AZXBvc3QuZGUpLAotICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIChoamxpcHBAd2ViLmRlKSwKLSAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCAodGlsbWFuQGltYXAuY2MpLgorICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LAorICogICAgICAgICAgICAgICAgICAgICAgIFRpbG1hbiBTY2htaWR0IDx0aWxtYW5AaW1hcC5jYz4uCiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMSwxNSArMTEsMTEgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogaTRsLmMsdiAxLjMuMi45IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgogCi0vKiA9PSBIYW5kbGluZyBvZiBJNEwgSU8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiA9PSBIYW5kbGluZyBvZiBJNEwgSU8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAvKiB3cml0ZWJ1Zl9mcm9tX0xMCiAgKiBjYWxsZWQgYnkgTEwgdG8gdHJhbnNtaXQgZGF0YSBvbiBhbiBvcGVuIGNoYW5uZWwKQEAgLTI5LDE0ICsyNSwxNiBAQAogICogcGFyYW1ldGVyczoKICAqCWRyaXZlcklECWRyaXZlciBJRCBhcyBhc3NpZ25lZCBieSBMTAogICoJY2hhbm5lbAkJY2hhbm5lbCBudW1iZXIKLSAqCWFjawkJaWYgIT0gMCBMTCB3YW50cyB0byBiZSBub3RpZmllZCBvbiBjb21wbGV0aW9uIHZpYSBzdGF0Y2FsbGIoSVNETl9TVEFUX0JTRU5UKQorICoJYWNrCQlpZiAhPSAwIExMIHdhbnRzIHRvIGJlIG5vdGlmaWVkIG9uIGNvbXBsZXRpb24gdmlhCisgKgkJCXN0YXRjYWxsYihJU0ROX1NUQVRfQlNFTlQpCiAgKglza2IJCXNrYiBjb250YWluaW5nIGRhdGEgdG8gc2VuZAogICogcmV0dXJuIHZhbHVlOgogICoJbnVtYmVyIG9mIGFjY2VwdGVkIGJ5dGVzCiAgKgkwIGlmIHRlbXBvcmFyaWx5IHVuYWJsZSB0byBhY2NlcHQgZGF0YSAob3V0IG9mIGJ1ZmZlciBzcGFjZSkKICAqCTwwIG9uIGVycm9yIChlZy4gLUVJTlZBTCkKICAqLwotc3RhdGljIGludCB3cml0ZWJ1Zl9mcm9tX0xMKGludCBkcml2ZXJJRCwgaW50IGNoYW5uZWwsIGludCBhY2ssIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IHdyaXRlYnVmX2Zyb21fTEwoaW50IGRyaXZlcklELCBpbnQgY2hhbm5lbCwgaW50IGFjaywKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwpAQCAtNTQsMjggKzUyLDI1IEBACiAJYmNzID0gJmNzLT5iY3NbY2hhbm5lbF07CiAJbGVuID0gc2tiLT5sZW47CiAKLQlkYmcoREVCVUdfTExEQVRBLAotCSAgICAiUmVjZWl2aW5nIGRhdGEgZnJvbSBMTCAoaWQ6ICVkLCBjaGFubmVsOiAlZCwgYWNrOiAlZCwgc2l6ZTogJWQpIiwKLQkgICAgZHJpdmVySUQsIGNoYW5uZWwsIGFjaywgbGVuKTsKKwlnaWdfZGJnKERFQlVHX0xMREFUQSwKKwkJIlJlY2VpdmluZyBkYXRhIGZyb20gTEwgKGlkOiAlZCwgY2g6ICVkLCBhY2s6ICVkLCBzejogJWQpIiwKKwkJZHJpdmVySUQsIGNoYW5uZWwsIGFjaywgbGVuKTsKIAogCWlmICghbGVuKSB7CiAJCWlmIChhY2spCi0JCQl3YXJuKCJub3QgQUNLaW5nIGVtcHR5IHBhY2tldCBmcm9tIExMIik7CisJCQlub3RpY2UoIiVzOiBub3QgQUNLaW5nIGVtcHR5IHBhY2tldCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChsZW4gPiBNQVhfQlVGX1NJWkUpIHsKLQkJZXJyKCIlczogcGFja2V0IHRvbyBsYXJnZSAoJWQgYnl0ZXMpIiwgX19mdW5jX18sIGNoYW5uZWwpOworCQllcnIoIiVzOiBwYWNrZXQgdG9vIGxhcmdlICglZCBieXRlcykiLCBfX2Z1bmNfXywgbGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpCi0JCXJldHVybiAtRU5PREVWOwotCiAJc2tibGVuID0gYWNrID8gbGVuIDogMDsKIAlza2ItPmhlYWRbMF0gPSBza2JsZW4gJiAweGZmOwogCXNrYi0+aGVhZFsxXSA9IHNrYmxlbiA+PiA4OwotCWRiZyhERUJVR19NQ01ELCAic2tiOiBsZW49JXUsIHNrYmxlbj0ldTogJTAyeCAlMDJ4IiwgbGVuLCBza2JsZW4sCi0JICAgICAodW5zaWduZWQpIHNrYi0+aGVhZFswXSwgKHVuc2lnbmVkKSBza2ItPmhlYWRbMV0pOworCWdpZ19kYmcoREVCVUdfTUNNRCwgInNrYjogbGVuPSV1LCBza2JsZW49JXU6ICUwMnggJTAyeCIsCisJCWxlbiwgc2tibGVuLCAodW5zaWduZWQpIHNrYi0+aGVhZFswXSwgKHVuc2lnbmVkKSBza2ItPmhlYWRbMV0pOwogCiAJLyogcGFzcyB0byBkZXZpY2Utc3BlY2lmaWMgbW9kdWxlICovCiAJcmV0dXJuIGNzLT5vcHMtPnNlbmRfc2tiKGJjcywgc2tiKTsKQEAgLTg5LDE0ICs4NCwxNCBAQAogCSsrYmNzLT50cmFuc191cDsKIAogCWlmIChza2ItPmxlbikKLQkJd2FybigiJXM6IHNrYi0+bGVuPT0lZCIsIF9fZnVuY19fLCBza2ItPmxlbik7CisJCWRldl93YXJuKGJjcy0+Y3MtPmRldiwgIiVzOiBza2ItPmxlbj09JWRcbiIsCisJCQkgX19mdW5jX18sIHNrYi0+bGVuKTsKIAogCWxlbiA9ICh1bnNpZ25lZCBjaGFyKSBza2ItPmhlYWRbMF0gfAogCSAgICAgICh1bnNpZ25lZCkgKHVuc2lnbmVkIGNoYXIpIHNrYi0+aGVhZFsxXSA8PCA4OwogCWlmIChsZW4pIHsKLQkJZGJnKERFQlVHX01DTUQsCi0JCSAgICAiQWNrbm93bGVkZ2Ugc2VuZGluZyB0byBMTCAoaWQ6ICVkLCBjaGFubmVsOiAlZCBzaXplOiAldSkiLAotCQkgICAgYmNzLT5jcy0+bXlpZCwgYmNzLT5jaGFubmVsLCBsZW4pOworCQlnaWdfZGJnKERFQlVHX01DTUQsICJBQ0tpbmcgdG8gTEwgKGlkOiAlZCwgY2g6ICVkLCBzejogJXUpIiwKKwkJCWJjcy0+Y3MtPm15aWQsIGJjcy0+Y2hhbm5lbCwgbGVuKTsKIAogCQlyZXNwb25zZS5kcml2ZXIgPSBiY3MtPmNzLT5teWlkOwogCQlyZXNwb25zZS5jb21tYW5kID0gSVNETl9TVEFUX0JTRU5UOwpAQCAtMTE5LDE1ICsxMTQsMTIgQEAKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKIAlpbnQgcmV0dmFsID0gMDsKIAlzdHJ1Y3Qgc2V0dXBfcGFybSAqc3A7CisJdW5zaWduZWQgcGFyYW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8vZGJnKERFQlVHX0FOWSwgIkdpZ2FzZXRfSFc6IFJlY2VpdmluZyBjb21tYW5kIik7CiAJZ2lnYXNldF9kZWJ1Z2RyaXZlcnMoKTsKIAotCS8qIFRlcm1pbmF0ZSB0aGlzIGNhbGwgaWYgbm8gZGV2aWNlIGlzIHByZXNlbnQuIEJ0IGlmIHRoZSBjb21tYW5kIGlzICJJU0ROX0NNRF9MT0NLIiBvcgotCSAqICJJU0ROX0NNRF9VTkxPQ0siIHRoZW4gZXhlY3V0ZSBpdCBkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBkZXZpY2UgaW5kZXBlbmRlbnQgIQotCSAqLwotCS8vRklYTUUgInJlbW92ZSB0ZXN0IGZvciAmY29ubmVjdGVkIgotCWlmICgoIWNzIHx8ICFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpKSB7CisJaWYgKCFjcykgewogCQl3YXJuKCJMTCB0cmllZCB0byBhY2Nlc3MgdW5rbm93biBkZXZpY2Ugd2l0aCBuci4gJWQiLAogCQkgICAgIGNudHJsLT5kcml2ZXIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEzNSwyOSArMTI3LDMwIEBACiAKIAlzd2l0Y2ggKGNudHJsLT5jb21tYW5kKSB7CiAJY2FzZSBJU0ROX0NNRF9JT0NUTDoKLQotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfSU9DVEwgKGRyaXZlcjolZCxhcmc6ICVsZCkiLAotCQkgICAgY250cmwtPmRyaXZlciwgY250cmwtPmFyZyk7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfSU9DVEwgKGRyaXZlcjogJWQsIGFyZzogJWxkKSIsCisJCQljbnRybC0+ZHJpdmVyLCBjbnRybC0+YXJnKTsKIAogCQl3YXJuKCJJU0ROX0NNRF9JT0NUTCBpcyBub3Qgc3VwcG9ydGVkLiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNhc2UgSVNETl9DTURfRElBTDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0RJQUwgKGRyaXZlcjogJWQsIGNoYW5uZWw6ICVsZCwgIgotCQkgICAgInBob25lOiAlcyxvd25tc246ICVzLCBzaTE6ICVkLCBzaTI6ICVkKSIsCi0JCSAgICBjbnRybC0+ZHJpdmVyLCBjbnRybC0+YXJnLAotCQkgICAgY250cmwtPnBhcm0uc2V0dXAucGhvbmUsIGNudHJsLT5wYXJtLnNldHVwLmVhem1zbiwKLQkJICAgIGNudHJsLT5wYXJtLnNldHVwLnNpMSwgY250cmwtPnBhcm0uc2V0dXAuc2kyKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkiSVNETl9DTURfRElBTCAoZHJpdmVyOiAlZCwgY2g6ICVsZCwgIgorCQkJInBob25lOiAlcywgb3dubXNuOiAlcywgc2kxOiAlZCwgc2kyOiAlZCkiLAorCQkJY250cmwtPmRyaXZlciwgY250cmwtPmFyZywKKwkJCWNudHJsLT5wYXJtLnNldHVwLnBob25lLCBjbnRybC0+cGFybS5zZXR1cC5lYXptc24sCisJCQljbnRybC0+cGFybS5zZXR1cC5zaTEsIGNudHJsLT5wYXJtLnNldHVwLnNpMik7CiAKIAkJaWYgKGNudHJsLT5hcmcgPj0gY3MtPmNoYW5uZWxzKSB7Ci0JCQllcnIoImludmFsaWQgY2hhbm5lbCAoJWQpIiwgKGludCkgY250cmwtPmFyZyk7CisJCQllcnIoIklTRE5fQ01EX0RJQUw6IGludmFsaWQgY2hhbm5lbCAoJWQpIiwKKwkJCSAgICAoaW50KSBjbnRybC0+YXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJYmNzID0gY3MtPmJjcyArIGNudHJsLT5hcmc7CiAKIAkJaWYgKCFnaWdhc2V0X2dldF9jaGFubmVsKGJjcykpIHsKLQkJCWVycigiY2hhbm5lbCBub3QgZnJlZSIpOworCQkJZXJyKCJJU0ROX0NNRF9ESUFMOiBjaGFubmVsIG5vdCBmcmVlIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKQEAgLTE2OSw0MiArMTYyLDQ2IEBACiAJCX0KIAkJKnNwID0gY250cmwtPnBhcm0uc2V0dXA7CiAKLQkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsIEVWX0RJQUwsIHNwLAotCQkJICAgICAgICAgICAgICAgYXRvbWljX3JlYWQoJmJjcy0+YXRfc3RhdGUuc2VxX2luZGV4KSwKLQkJCSAgICAgICAgICAgICAgIE5VTEwpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCQlwYXJhbSA9IGJjcy0+YXRfc3RhdGUuc2VxX2luZGV4OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCisJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZiY3MtPmF0X3N0YXRlLCBFVl9ESUFMLCBzcCwgcGFyYW0sCisJCQkJICAgICAgIE5VTEwpKSB7CiAJCQkvL0ZJWE1FIHdoYXQgc2hvdWxkIHdlIGRvPwogCQkJa2ZyZWUoc3ApOwogCQkJZ2lnYXNldF9mcmVlX2NoYW5uZWwoYmNzKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgRElBTCIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgRElBTCIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9BQ0NFUFREOiAvL0ZJWE1FCi0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9BQ0NFUFREIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUNDRVBURCIpOwogCiAJCWlmIChjbnRybC0+YXJnID49IGNzLT5jaGFubmVscykgewotCQkJZXJyKCJpbnZhbGlkIGNoYW5uZWwgKCVkKSIsIChpbnQpIGNudHJsLT5hcmcpOworCQkJZXJyKCJJU0ROX0NNRF9BQ0NFUFREOiBpbnZhbGlkIGNoYW5uZWwgKCVkKSIsCisJCQkgICAgKGludCkgY250cmwtPmFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YmNzW2NudHJsLT5hcmddLmF0X3N0YXRlLAotCQkJICAgICAgICAgICAgICAgRVZfQUNDRVBULCBOVUxMLCAwLCBOVUxMKSkgeworCQkJCSAgICAgICBFVl9BQ0NFUFQsIE5VTEwsIDAsIE5VTEwpKSB7CiAJCQkvL0ZJWE1FIHdoYXQgc2hvdWxkIHdlIGRvPwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBBQ0NFUFQiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEFDQ0VQVCIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0FDQ0VQVEI6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9BQ0NFUFRCIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUNDRVBUQiIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0hBTkdVUDoKLQkJZGJnKERFQlVHX0FOWSwKLQkJICAgICJJU0ROX0NNRF9IQU5HVVAgKGNoYW5uZWw6ICVkKSIsIChpbnQpIGNudHJsLT5hcmcpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0hBTkdVUCAoY2g6ICVkKSIsCisJCQkoaW50KSBjbnRybC0+YXJnKTsKIAogCQlpZiAoY250cmwtPmFyZyA+PSBjcy0+Y2hhbm5lbHMpIHsKIAkJCWVycigiSVNETl9DTURfSEFOR1VQOiBpbnZhbGlkIGNoYW5uZWwgKCV1KSIsCkBAIC0yMTMsNjYgKzIxMCw2OCBAQAogCQl9CiAKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5iY3NbY250cmwtPmFyZ10uYXRfc3RhdGUsCi0JCQkgICAgICAgICAgICAgICBFVl9IVVAsIE5VTEwsIDAsIE5VTEwpKSB7CisJCQkJICAgICAgIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCkpIHsKIAkJCS8vRklYTUUgd2hhdCBzaG91bGQgd2UgZG8/CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEhVUCIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSFVQIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJCWJyZWFrOwotCWNhc2UgSVNETl9DTURfQ0xSRUFaOiAgICAgICAgICAgICAgIC8qIERvIG5vdCBzaWduYWwgaW5jb21pbmcgc2lnbmFscyAqLyAvL0ZJWE1FCi0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9DTFJFQVoiKTsKKwljYXNlIElTRE5fQ01EX0NMUkVBWjogLyogRG8gbm90IHNpZ25hbCBpbmNvbWluZyBzaWduYWxzICovIC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9DTFJFQVoiKTsKIAkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9TRVRFQVo6ICAgICAgICAgICAgICAgLyogU2lnbmFsIGluY29taW5nIGNhbGxzIGZvciBnaXZlbiBNU04gKi8gLy9GSVhNRQotCQlkYmcoREVCVUdfQU5ZLAotCQkgICAgIklTRE5fQ01EX1NFVEVBWiAoaWQ6JWQsIGNoYW5uZWw6ICVsZCwgbnVtYmVyOiAlcykiLAotCQkgICAgY250cmwtPmRyaXZlciwgY250cmwtPmFyZywgY250cmwtPnBhcm0ubnVtKTsKKwljYXNlIElTRE5fQ01EX1NFVEVBWjogLyogU2lnbmFsIGluY29taW5nIGNhbGxzIGZvciBnaXZlbiBNU04gKi8gLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCSJJU0ROX0NNRF9TRVRFQVogKGlkOiAlZCwgY2g6ICVsZCwgbnVtYmVyOiAlcykiLAorCQkJY250cmwtPmRyaXZlciwgY250cmwtPmFyZywgY250cmwtPnBhcm0ubnVtKTsKIAkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9TRVRMMjogICAgICAgICAgICAgICAgLyogU2V0IEwyIHRvIGdpdmVuIHByb3RvY29sICovCi0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9TRVRMMiAoQ2hhbm5lbDogJWxkLCBQcm90bzogJWx4KSIsCi0JCSAgICAgY250cmwtPmFyZyAmIDB4ZmYsIChjbnRybC0+YXJnID4+IDgpKTsKKwljYXNlIElTRE5fQ01EX1NFVEwyOiAvKiBTZXQgTDIgdG8gZ2l2ZW4gcHJvdG9jb2wgKi8KKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9TRVRMMiAoY2g6ICVsZCwgcHJvdG86ICVseCkiLAorCQkJY250cmwtPmFyZyAmIDB4ZmYsIChjbnRybC0+YXJnID4+IDgpKTsKIAogCQlpZiAoKGNudHJsLT5hcmcgJiAweGZmKSA+PSBjcy0+Y2hhbm5lbHMpIHsKLQkJCWVycigiaW52YWxpZCBjaGFubmVsICgldSkiLAorCQkJZXJyKCJJU0ROX0NNRF9TRVRMMjogaW52YWxpZCBjaGFubmVsICgldSkiLAogCQkJICAgICh1bnNpZ25lZCkgY250cmwtPmFyZyAmIDB4ZmYpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmJjc1tjbnRybC0+YXJnICYgMHhmZl0uYXRfc3RhdGUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgRVZfUFJPVE9fTDIsIE5VTEwsIGNudHJsLT5hcmcgPj4gOCwKLQkJICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkgeworCQkJCSAgICAgICBFVl9QUk9UT19MMiwgTlVMTCwgY250cmwtPmFyZyA+PiA4LAorCQkJCSAgICAgICBOVUxMKSkgewogCQkJLy9GSVhNRSB3aGF0IHNob3VsZCB3ZSBkbz8KIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgUFJPVE9fTDIiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFBST1RPX0wyIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCQlicmVhazsKLQljYXNlIElTRE5fQ01EX1NFVEwzOiAgICAgICAgICAgICAgLyogU2V0IEwzIHRvIGdpdmVuIHByb3RvY29sICovCi0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9TRVRMMyAoQ2hhbm5lbDogJWxkLCBQcm90bzogJWx4KSIsCi0JCSAgICAgY250cmwtPmFyZyAmIDB4ZmYsIChjbnRybC0+YXJnID4+IDgpKTsKKwljYXNlIElTRE5fQ01EX1NFVEwzOiAvKiBTZXQgTDMgdG8gZ2l2ZW4gcHJvdG9jb2wgKi8KKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9TRVRMMyAoY2g6ICVsZCwgcHJvdG86ICVseCkiLAorCQkJY250cmwtPmFyZyAmIDB4ZmYsIChjbnRybC0+YXJnID4+IDgpKTsKIAogCQlpZiAoKGNudHJsLT5hcmcgJiAweGZmKSA+PSBjcy0+Y2hhbm5lbHMpIHsKLQkJCWVycigiaW52YWxpZCBjaGFubmVsICgldSkiLAorCQkJZXJyKCJJU0ROX0NNRF9TRVRMMzogaW52YWxpZCBjaGFubmVsICgldSkiLAogCQkJICAgICh1bnNpZ25lZCkgY250cmwtPmFyZyAmIDB4ZmYpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoY250cmwtPmFyZyA+PiA4ICE9IElTRE5fUFJPVE9fTDNfVFJBTlMpIHsKLQkJCWVycigiaW52YWxpZCBwcm90b2NvbCAlbHUiLCBjbnRybC0+YXJnID4+IDgpOworCQkJZXJyKCJJU0ROX0NNRF9TRVRMMzogaW52YWxpZCBwcm90b2NvbCAlbHUiLAorCQkJICAgIGNudHJsLT5hcmcgPj4gOCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfUFJPQ0VFRDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1BST0NFRUQiKTsgLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1BST0NFRUQiKTsgLy9GSVhNRQogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0FMRVJUOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUxFUlQiKTsgLy9GSVhNRQorCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FMRVJUIik7IC8vRklYTUUKIAkJaWYgKGNudHJsLT5hcmcgPj0gY3MtPmNoYW5uZWxzKSB7Ci0JCQllcnIoImludmFsaWQgY2hhbm5lbCAoJWQpIiwgKGludCkgY250cmwtPmFyZyk7CisJCQllcnIoIklTRE5fQ01EX0FMRVJUOiBpbnZhbGlkIGNoYW5uZWwgKCVkKSIsCisJCQkgICAgKGludCkgY250cmwtPmFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvL2JjcyA9IGNzLT5iY3MgKyBjbnRybC0+YXJnOwpAQCAtMjgwLDMyICsyNzksMzEgQEAKIAkJLy8gRklYTUUKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9SRURJUjoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1JFRElSIik7IC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9SRURJUiIpOyAvL0ZJWE1FCiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfUFJPVF9JTzoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1BST1RfSU8iKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9QUk9UX0lPIik7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfRkFYQ01EOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfRkFYQ01EIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfRkFYQ01EIik7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfR0VUTDI6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRMMiIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEwyIik7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfR0VUTDM6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRMMyIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEwzIik7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfR0VURUFaOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VURUFaIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VURUFaIik7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfU0VUU0lMOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUU0lMIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUU0lMIik7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfR0VUU0lMOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUU0lMIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUU0lMIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigidW5rbm93biBjb21tYW5kICVkIGZyb20gTEwiLAotCQkgICAgIGNudHJsLT5jb21tYW5kKTsKKwkJZXJyKCJ1bmtub3duIGNvbW1hbmQgJWQgZnJvbSBMTCIsIGNudHJsLT5jb21tYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNTAsNyArMzQ4LDggQEAKIAkJcHJvdG8gPSAyOyAvKiAwOiBCaXRzeW5jaHJvbiwgMTogSERMQywgMjogdm9pY2UgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJpbnZhbGlkIHByb3RvY29sOiAldSIsIGJjcy0+cHJvdG8yKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICIlczogaW52YWxpZCBMMiBwcm90b2NvbDogJXVcbiIsCisJCQlfX2Z1bmNfXywgYmNzLT5wcm90bzIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM3OCw3ICszNzcsNyBAQAogCQliY3MtPmNvbW1hbmRzW2ldID0gTlVMTDsKIAkJaWYgKGxlbmd0aFtpXSAmJgogCQkgICAgIShiY3MtPmNvbW1hbmRzW2ldID0ga21hbGxvYyhsZW5ndGhbaV0sIEdGUF9BVE9NSUMpKSkgewotCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CkBAIC0zOTYsMTAgKzM5NSwxNCBAQAogCX0KIAogCWlmIChiY3MtPmNvbW1hbmRzW0FUX01TTl0pCi0JCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfTVNOXSwgbGVuZ3RoW0FUX01TTl0sICJeU01TTj0lc1xyIiwgc3AtPmVhem1zbik7Ci0Jc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9CQyAgIF0sIGxlbmd0aFtBVF9CQyAgIF0sICJeU0JDPSVzXHIiLCBiYyk7Ci0Jc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9QUk9UT10sIGxlbmd0aFtBVF9QUk9UT10sICJeU0JQUj0ldVxyIiwgcHJvdG8pOwotCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfSVNPICBdLCBsZW5ndGhbQVRfSVNPICBdLCAiXlNJU089JXVcciIsICh1bnNpZ25lZCliY3MtPmNoYW5uZWwgKyAxKTsKKwkJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9NU05dLCBsZW5ndGhbQVRfTVNOXSwKKwkJCSAiXlNNU049JXNcciIsIHNwLT5lYXptc24pOworCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfQkMgICBdLCBsZW5ndGhbQVRfQkMgICBdLAorCQkgIl5TQkM9JXNcciIsIGJjKTsKKwlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX1BST1RPXSwgbGVuZ3RoW0FUX1BST1RPXSwKKwkJICJeU0JQUj0ldVxyIiwgcHJvdG8pOworCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfSVNPICBdLCBsZW5ndGhbQVRfSVNPICBdLAorCQkgIl5TSVNPPSV1XHIiLCAodW5zaWduZWQpYmNzLT5jaGFubmVsICsgMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQxOSw3ICs0MjIsOCBAQAogCQlwcm90byA9IDI7IC8qIDA6IEJpdHN5bmNocm9uLCAxOiBIRExDLCAyOiB2b2ljZSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoImludmFsaWQgcHJvdG9jb2w6ICV1IiwgYmNzLT5wcm90bzIpOworCQlkZXZfZXJyKGF0X3N0YXRlLT5jcy0+ZGV2LCAiJXM6IGludmFsaWQgcHJvdG9jb2w6ICV1XG4iLAorCQkJX19mdW5jX18sIGJjcy0+cHJvdG8yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00MzYsMTMgKzQ0MCwxNSBAQAogCQliY3MtPmNvbW1hbmRzW2ldID0gTlVMTDsKIAkJaWYgKGxlbmd0aFtpXSAmJgogCQkgICAgIShiY3MtPmNvbW1hbmRzW2ldID0ga21hbGxvYyhsZW5ndGhbaV0sIEdGUF9BVE9NSUMpKSkgewotCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQlkZXZfZXJyKGF0X3N0YXRlLT5jcy0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0KIAotCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfUFJPVE9dLCBsZW5ndGhbQVRfUFJPVE9dLCAiXlNCUFI9JXVcciIsIHByb3RvKTsKLQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0lTTyAgXSwgbGVuZ3RoW0FUX0lTTyAgXSwgIl5TSVNPPSV1XHIiLCAodW5zaWduZWQpIGJjcy0+Y2hhbm5lbCArIDEpOworCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfUFJPVE9dLCBsZW5ndGhbQVRfUFJPVE9dLAorCQkgIl5TQlBSPSV1XHIiLCBwcm90byk7CisJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9JU08gIF0sIGxlbmd0aFtBVF9JU08gIF0sCisJCSAiXlNJU089JXVcciIsICh1bnNpZ25lZCkgYmNzLT5jaGFubmVsICsgMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3Myw3ICs0NzksNyBAQAogCQlyZXNwb25zZS5wYXJtLnNldHVwLnNpMSA9IDE7CiAJCXJlc3BvbnNlLnBhcm0uc2V0dXAuc2kyID0gMjsKIAl9IGVsc2UgewotCQl3YXJuKCJSSU5HIGlnbm9yZWQgLSB1bnN1cHBvcnRlZCBCQyAlcyIsCisJCWRldl93YXJuKGNzLT5kZXYsICJSSU5HIGlnbm9yZWQgLSB1bnN1cHBvcnRlZCBCQyAlc1xuIiwKIAkJICAgICBhdF9zdGF0ZS0+c3RyX3ZhcltTVFJfWkJDXSk7CiAJCXJldHVybiBJQ0FMTF9JR05PUkU7CiAJfQpAQCAtNDkxLDE4ICs0OTcsMTcgQEAKIAkJcmVzcG9uc2UucGFybS5zZXR1cC5lYXptc25bMF0gPSAwOwogCiAJaWYgKCFiY3MpIHsKLQkJbm90aWNlKCJubyBjaGFubmVsIGZvciBpbmNvbWluZyBjYWxsIik7Ci0JCWRiZyhERUJVR19DTUQsICJTZW5kaW5nIElDQUxMVyIpOworCQlkZXZfbm90aWNlKGNzLT5kZXYsICJubyBjaGFubmVsIGZvciBpbmNvbWluZyBjYWxsXG4iKTsKIAkJcmVzcG9uc2UuY29tbWFuZCA9IElTRE5fU1RBVF9JQ0FMTFc7CiAJCXJlc3BvbnNlLmFyZyA9IDA7IC8vRklYTUUKIAl9IGVsc2UgewotCQlkYmcoREVCVUdfQ01ELCAiU2VuZGluZyBJQ0FMTCIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNlbmRpbmcgSUNBTEwiKTsKIAkJcmVzcG9uc2UuY29tbWFuZCA9IElTRE5fU1RBVF9JQ0FMTDsKIAkJcmVzcG9uc2UuYXJnID0gYmNzLT5jaGFubmVsOyAvL0ZJWE1FCiAJfQogCXJlc3BvbnNlLmRyaXZlciA9IGNzLT5teWlkOwogCXJldHZhbCA9IGNzLT5paWYuc3RhdGNhbGxiKCZyZXNwb25zZSk7Ci0JZGJnKERFQlVHX0NNRCwgIlJlc3BvbnNlOiAlZCIsIHJldHZhbCk7CisJZ2lnX2RiZyhERUJVR19DTUQsICJSZXNwb25zZTogJWQiLCByZXR2YWwpOwogCXN3aXRjaCAocmV0dmFsKSB7CiAJY2FzZSAwOgkvKiBubyB0YWtlcnMgKi8KIAkJcmV0dXJuIElDQUxMX0lHTk9SRTsKQEAgLTUxMiw3ICs1MTcsOCBAQAogCWNhc2UgMjoJLyogcmVqZWN0ICovCiAJCXJldHVybiBJQ0FMTF9SRUpFQ1Q7CiAJY2FzZSAzOgkvKiBpbmNvbXBsZXRlICovCi0JCXdhcm4oIkxMIHJlcXVlc3RlZCB1bnN1cHBvcnRlZCBmZWF0dXJlOiBJbmNvbXBsZXRlIE51bWJlciIpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkgICAgICAgIkxMIHJlcXVlc3RlZCB1bnN1cHBvcnRlZCBmZWF0dXJlOiBJbmNvbXBsZXRlIE51bWJlclxuIik7CiAJCXJldHVybiBJQ0FMTF9JR05PUkU7CiAJY2FzZSA0OgkvKiBwcm9jZWVkaW5nICovCiAJCS8qIEdpZ2FzZXQgd2lsbCBzZW5kIEFMRVJUSU5HIGFueXdheS4KQEAgLTUyMCwxMCArNTI2LDExIEBACiAJCSAqLwogCQlyZXR1cm4gSUNBTExfQUNDRVBUOwogCWNhc2UgNToJLyogZGVmbGVjdCAqLwotCQl3YXJuKCJMTCByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgZmVhdHVyZTogQ2FsbCBEZWZsZWN0aW9uIik7CisJCWRldl93YXJuKGNzLT5kZXYsCisJCQkgIkxMIHJlcXVlc3RlZCB1bnN1cHBvcnRlZCBmZWF0dXJlOiBDYWxsIERlZmxlY3Rpb25cbiIpOwogCQlyZXR1cm4gSUNBTExfSUdOT1JFOwogCWRlZmF1bHQ6Ci0JCWVycigiTEwgZXJyb3IgJWQgb24gSUNBTEwiLCByZXR2YWwpOworCQlkZXZfZXJyKGNzLT5kZXYsICJMTCBlcnJvciAlZCBvbiBJQ0FMTFxuIiwgcmV0dmFsKTsKIAkJcmV0dXJuIElDQUxMX0lHTk9SRTsKIAl9CiB9CkBAIC01MzMsNyArNTQwLDcgQEAKIHsKIAlpc2RuX2lmICppaWYgPSAmY3MtPmlpZjsKIAotCWRiZyhERUJVR19BTlksICJSZWdpc3RlciBkcml2ZXIgY2FwYWJpbGl0aWVzIHRvIExMIik7CisJZ2lnX2RiZyhERUJVR19BTlksICJSZWdpc3RlciBkcml2ZXIgY2FwYWJpbGl0aWVzIHRvIExMIik7CiAKIAkvL2lpZi0+aWRbc2l6ZW9mKGlpZi0+aWQpIC0gMV09MDsKIAkvL3N0cm5jcHkoaWlmLT5pZCwgaXNkbmlkLCBzaXplb2YoaWlmLT5pZCkgLSAxKTsKQEAgLTU0MiwyNiArNTQ5LDI2IEBACiAJCXJldHVybiAtRU5PTUVNOyAvL0ZJWE1FIEVJTlZBTC8uLi4/PwogCiAJaWlmLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWlpZi0+Y2hhbm5lbHMgPSBjcy0+Y2hhbm5lbHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSSBhbSBzdXBwb3J0aW5nIGp1c3Qgb25lIGNoYW5uZWwgKi8vKiBJIHdhcyBzdXBwb3J0aW5nLi4uKi8KKwlpaWYtPmNoYW5uZWxzID0gY3MtPmNoYW5uZWxzOwogCWlpZi0+bWF4YnVmc2l6ZSA9IE1BWF9CVUZfU0laRTsKLQlpaWYtPmZlYXR1cmVzID0gSVNETl9GRUFUVVJFX0wyX1RSQU5TIHwgICAvKiBPdXIgZGV2aWNlIGlzIHZlcnkgYWR2YW5jZWQsIHRoZXJlZm9yZSAqLworCWlpZi0+ZmVhdHVyZXMgPSBJU0ROX0ZFQVRVUkVfTDJfVFJBTlMgfAogCQlJU0ROX0ZFQVRVUkVfTDJfSERMQyB8CiAjaWZkZWYgR0lHX1g3NQogCQlJU0ROX0ZFQVRVUkVfTDJfWDc1SSB8CiAjZW5kaWYKIAkJSVNETl9GRUFUVVJFX0wzX1RSQU5TIHwKIAkJSVNETl9GRUFUVVJFX1BfRVVSTzsKLQlpaWYtPmhsX2hkcmxlbiA9IEhXX0hEUl9MRU47ICAgICAgICAgICAgICAvKiBBcmVhIGZvciBzdG9yaW5nIGFjayAqLworCWlpZi0+aGxfaGRybGVuID0gSFdfSERSX0xFTjsJCS8qIEFyZWEgZm9yIHN0b3JpbmcgYWNrICovCiAJaWlmLT5jb21tYW5kID0gY29tbWFuZF9mcm9tX0xMOwogCWlpZi0+d3JpdGVidWZfc2tiID0gd3JpdGVidWZfZnJvbV9MTDsKLQlpaWYtPndyaXRlY21kID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBzdXBwb3J0IGlzZG5jdHJsICovCi0JaWlmLT5yZWFkc3RhdCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3Qgc3VwcG9ydCBpc2RuY3RybCAqLwotCWlpZi0+cmN2Y2FsbGJfc2tiID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIFdpbGwgYmUgc2V0IGJ5IExMICovCi0JaWlmLT5zdGF0Y2FsbGIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgLyogV2lsbCBiZSBzZXQgYnkgTEwgKi8KKwlpaWYtPndyaXRlY21kID0gTlVMTDsJCQkvKiBEb24ndCBzdXBwb3J0IGlzZG5jdHJsICovCisJaWlmLT5yZWFkc3RhdCA9IE5VTEw7CQkJLyogRG9uJ3Qgc3VwcG9ydCBpc2RuY3RybCAqLworCWlpZi0+cmN2Y2FsbGJfc2tiID0gTlVMTDsJCS8qIFdpbGwgYmUgc2V0IGJ5IExMICovCisJaWlmLT5zdGF0Y2FsbGIgPSBOVUxMOwkJCS8qIFdpbGwgYmUgc2V0IGJ5IExMICovCiAKIAlpZiAoIXJlZ2lzdGVyX2lzZG4oaWlmKSkKIAkJcmV0dXJuIDA7CiAKLQljcy0+bXlpZCA9IGlpZi0+Y2hhbm5lbHM7ICAgICAgICAgICAgICAgICAvKiBTZXQgbXkgZGV2aWNlIGlkICovCisJY3MtPm15aWQgPSBpaWYtPmNoYW5uZWxzOwkJLyogU2V0IG15IGRldmljZSBpZCAqLwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYwppbmRleCAzYTgxZDljLi4wOGU0YzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYwpAQCAtOSw4ICs5LDYgQEAKICAqICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBpbnRlcmZhY2UuYyx2IDEuMTQuNC4xNSAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTI0LDcgKzIyLDcgQEAKIHsKIAlpbnQgY21kID0gKmFyZzsKIAotCWRiZyhERUJVR19JRiwgIiV1OiBpZl9sb2NrICglZCkiLCBjcy0+bWlub3JfaW5kZXgsIGNtZCk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiBpZl9sb2NrICglZCkiLCBjcy0+bWlub3JfaW5kZXgsIGNtZCk7CiAKIAlpZiAoY21kID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNSw3ICszMyw3IEBACiAJfQogCiAJaWYgKCFjbWQgJiYgYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpID09IE1TX0xPQ0tFRAotCSAgICAmJiBhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKKwkgICAgJiYgY3MtPmNvbm5lY3RlZCkgewogCQljcy0+b3BzLT5zZXRfbW9kZW1fY3RybChjcywgMCwgVElPQ01fRFRSfFRJT0NNX1JUUyk7CiAJCWNzLT5vcHMtPmJhdWRfcmF0ZShjcywgQjExNTIwMCk7CiAJCWNzLT5vcHMtPnNldF9saW5lX2N0cmwoY3MsIENTOCk7CkBAIC00NCwxMiArNDIsMTIgQEAKIAogCWNzLT53YWl0aW5nID0gMTsKIAlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBFVl9JRl9MT0NLLAotCQkgICAgICAgICAgICAgICBOVUxMLCBjbWQsIE5VTEwpKSB7CisJCQkgICAgICAgTlVMTCwgY21kLCBOVUxMKSkgewogCQljcy0+d2FpdGluZyA9IDA7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIElGX0xPQ0siKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSUZfTE9DSyIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJd2FpdF9ldmVudChjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpOwpAQCAtNjgsNyArNjYsNyBAQAogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjb21wYXRbNF0gPSBHSUdfQ09NUEFUOwogCXVuc2lnbmVkIGNtZCA9IGFyZ1swXTsKIAotCWRiZyhERUJVR19JRiwgIiV1OiBpZl92ZXJzaW9uICglZCkiLCBjcy0+bWlub3JfaW5kZXgsIGNtZCk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiBpZl92ZXJzaW9uICglZCkiLCBjcy0+bWlub3JfaW5kZXgsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgR0lHVkVSX0RSSVZFUjoKQEAgLTgwLDEyICs3OCwxMiBAQAogCWNhc2UgR0lHVkVSX0ZXQkFTRToKIAkJY3MtPndhaXRpbmcgPSAxOwogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBFVl9JRl9WRVIsCi0JCQkgICAgICAgICAgICAgICBOVUxMLCAwLCBhcmcpKSB7CisJCQkJICAgICAgIE5VTEwsIDAsIGFyZykpIHsKIAkJCWNzLT53YWl0aW5nID0gMDsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSUZfVkVSIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBJRl9WRVIiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAkJd2FpdF9ldmVudChjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpOwpAQCAtMTAxLDcgKzk5LDcgQEAKIAogc3RhdGljIGludCBpZl9jb25maWcoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCAqYXJnKQogewotCWRiZyhERUJVR19JRiwgIiV1OiBpZl9jb25maWcgKCVkKSIsIGNzLT5taW5vcl9pbmRleCwgKmFyZyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiBpZl9jb25maWcgKCVkKSIsIGNzLT5taW5vcl9pbmRleCwgKmFyZyk7CiAKIAlpZiAoKmFyZyAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwOSw2ICsxMDcsMTEgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmICghY3MtPmNvbm5lY3RlZCkgeworCQllcnIoIm5vdCBjb25uZWN0ZWQhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCSphcmcgPSAwOwogCXJldHVybiBnaWdhc2V0X2VudGVyY29uZmlnbW9kZShjcyk7CiB9CkBAIC0xMTksNyArMTIyLDcgQEAKIHN0YXRpYyBpbnQgIGlmX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIHZvaWQgaWZfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIGludCAgaWZfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCAgaWZfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyBpbnQgIGlmX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIGlmX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpAQCAtMTI3LDkgKzEzMCw5IEBACiBzdGF0aWMgdm9pZCBpZl9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKIHN0YXRpYyBpbnQgIGlmX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBpbnQgIGlmX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKKwkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CiBzdGF0aWMgaW50ICBpZl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKIAogc3RhdGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBpZl9vcHMgPSB7CiAJLm9wZW4gPQkJCWlmX29wZW4sCkBAIC0xNTMsOCArMTU2LDggQEAKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGJnKERFQlVHX0lGLCAiJWQrJWQ6ICVzKCkiLCB0dHktPmRyaXZlci0+bWlub3Jfc3RhcnQsIHR0eS0+aW5kZXgsCi0JICAgIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiVkKyVkOiAlcygpIiwKKwkJdHR5LT5kcml2ZXItPm1pbm9yX3N0YXJ0LCB0dHktPmluZGV4LCBfX2Z1bmNfXyk7CiAKIAl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKIApAQCAtMTYyLDcgKzE2NSw3IEBACiAJaWYgKCFjcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGNzOwogCkBAIC0xNzMsMTAgKzE3Niw5IEBACiAJCWNzLT50dHkgPSB0dHk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCXR0eS0+bG93X2xhdGVuY3kgPSAxOyAvL0ZJWE1FIHRlc3QKLQkJLy9GSVhNRQogCX0KIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NywzMCArMTg5LDI5IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWlmICghY3MtPm9wZW5fY291bnQpCi0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAllbHNlIHsKIAkJaWYgKCEtLWNzLT5vcGVuX2NvdW50KSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJCWNzLT50dHkgPSBOVUxMOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQkJCS8vRklYTUUKIAkJfQogCX0KIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgaWZfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJaW50IHJldHZhbCA9IC1FTk9ERVY7CkBAIC0yMjAsMTcgKzIyMSwxNyBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygweCV4KSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fLCBjbWQpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoMHgleCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fLCBjbWQpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgewogCQlyZXR2YWwgPSAwOwogCQlzd2l0Y2ggKGNtZCkgewpAQCAtMjUwLDM3ICsyNTEsNDAgQEAKIAkJCWJyZWFrOwogCQljYXNlIEdJR0FTRVRfQlJLQ0hBUlM6CiAJCQkvL0ZJWE1FIHRlc3QgaWYgTVNfTE9DS0VECi0JCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfSUYsICJHSUdBU0VUX0JSS0NIQVJTIiwKLQkJCSAgICAgICAgICAgICAgICAgICA2LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBhcmcsIDEpOwotCQkJaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJCQlkYmcoREVCVUdfQU5ZLCAiY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB1bnBsdWdnZWQgZGV2aWNlIik7CisJCQlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCQkgICAgImNhbid0IGNvbW11bmljYXRlIHdpdGggdW5wbHVnZ2VkIGRldmljZSIpOwogCQkJCXJldHZhbCA9IC1FTk9ERVY7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlyZXR2YWwgPSBjb3B5X2Zyb21fdXNlcigmYnVmLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICopIGFyZywgNikKLQkJCSAgICAgICAgID8gLUVGQVVMVCA6IDA7Ci0JCQlpZiAocmV0dmFsID49IDApCisJCQkJCShjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSBhcmcsIDYpCisJCQkJPyAtRUZBVUxUIDogMDsKKwkJCWlmIChyZXR2YWwgPj0gMCkgeworCQkJCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19JRiwgIkdJR0FTRVRfQlJLQ0hBUlMiLAorCQkJCQkJNiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYXJnKTsKIAkJCQlyZXR2YWwgPSBjcy0+b3BzLT5icmtjaGFycyhjcywgYnVmKTsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEdJR0FTRVRfVkVSU0lPTjoKLQkJCXJldHZhbCA9IGNvcHlfZnJvbV91c2VyKHZlcnNpb24sICh1bnNpZ25lZCBfX3VzZXIgKikgYXJnLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIHZlcnNpb24pID8gLUVGQVVMVCA6IDA7CisJCQlyZXR2YWwgPSBjb3B5X2Zyb21fdXNlcih2ZXJzaW9uLAorCQkJCQkodW5zaWduZWQgX191c2VyICopIGFyZywgc2l6ZW9mIHZlcnNpb24pCisJCQkJPyAtRUZBVUxUIDogMDsKIAkJCWlmIChyZXR2YWwgPj0gMCkKIAkJCQlyZXR2YWwgPSBpZl92ZXJzaW9uKGNzLCB2ZXJzaW9uKTsKIAkJCWlmIChyZXR2YWwgPj0gMCkKLQkJCQlyZXR2YWwgPSBjb3B5X3RvX3VzZXIoKHVuc2lnbmVkIF9fdXNlciAqKSBhcmcsIHZlcnNpb24sCi0JCQkJICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiB2ZXJzaW9uKQotCQkJCSAgICAgICAgID8gLUVGQVVMVCA6IDA7CisJCQkJcmV0dmFsID0gY29weV90b191c2VyKCh1bnNpZ25lZCBfX3VzZXIgKikgYXJnLAorCQkJCQkJICAgICAgdmVyc2lvbiwgc2l6ZW9mIHZlcnNpb24pCisJCQkJCT8gLUVGQVVMVCA6IDA7CiAJCQlicmVhazsKLQkgICAgICAgIGRlZmF1bHQ6Ci0JCQlkYmcoREVCVUdfQU5ZLCAiJXM6IGFyZyBub3Qgc3VwcG9ydGVkIC0gMHglMDR4IiwKLQkJCSAgICBfX0ZVTkNUSU9OX18sIGNtZCk7CisJCWRlZmF1bHQ6CisJCQlnaWdfZGJnKERFQlVHX0FOWSwgIiVzOiBhcmcgbm90IHN1cHBvcnRlZCAtIDB4JTA0eCIsCisJCQkJX19mdW5jX18sIGNtZCk7CiAJCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CiAJCX0KIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTI5MiwyNSArMjk2LDI1IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKIAkvLyBGSVhNRSByZWFkIGZyb20gZGV2aWNlPwogCXJldHZhbCA9IGNzLT5jb250cm9sX3N0YXRlICYgKFRJT0NNX1JUU3xUSU9DTV9EVFIpOwogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgaWZfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKKwkJICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAlpbnQgcmV0dmFsOwpAQCAtMzE4LDE4ICszMjIsMTggQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsCi0JICAgICIldTogJXMoMHgleCwgMHgleCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXywgc2V0LCBjbGVhcik7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygweCV4LCAweCV4KSIsCisJCWNzLT5taW5vcl9pbmRleCwgX19mdW5jX18sIHNldCwgY2xlYXIpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZGJnKERFQlVHX0FOWSwgImNhbid0IGNvbW11bmljYXRlIHdpdGggdW5wbHVnZ2VkIGRldmljZSIpOworCWlmICghY3MtPmNvbm5lY3RlZCkgeworCQlnaWdfZGJnKERFQlVHX0FOWSwgImNhbid0IGNvbW11bmljYXRlIHdpdGggdW5wbHVnZ2VkIGRldmljZSIpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCX0gZWxzZSB7CiAJCW1jID0gKGNzLT5jb250cm9sX3N0YXRlIHwgc2V0KSAmIH5jbGVhciAmIChUSU9DTV9SVFN8VElPQ01fRFRSKTsKQEAgLTMzNyw3ICszNDEsNyBAQAogCQljcy0+Y29udHJvbF9zdGF0ZSA9IG1jOwogCX0KIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMzQ5LDI5ICszNTMsMjkgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAogCWlmICghY3MtPm9wZW5fY291bnQpCi0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAllbHNlIGlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEKSB7CiAJCXdhcm4oImNhbid0IHdyaXRlIHRvIHVubG9ja2VkIGRldmljZSIpOwogCQlyZXR2YWwgPSAtRUJVU1k7Ci0JfSBlbHNlIGlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19BTlksICJjYW4ndCB3cml0ZSB0byB1bnBsdWdnZWQgZGV2aWNlIik7CisJfSBlbHNlIGlmICghY3MtPmNvbm5lY3RlZCkgeworCQlnaWdfZGJnKERFQlVHX0FOWSwgImNhbid0IHdyaXRlIHRvIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOyAvL0ZJWE1FCiAJfSBlbHNlIHsKIAkJcmV0dmFsID0gY3MtPm9wcy0+d3JpdGVfY21kKGNzLCBidWYsIGNvdW50LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNzLT5pZl93YWtlX3Rhc2tsZXQpOworCQkJCQkgICAgJmNzLT5pZl93YWtlX3Rhc2tsZXQpOwogCX0KIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMzgzLDI3ICszODcsMjcgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAogCWlmICghY3MtPm9wZW5fY291bnQpCi0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAllbHNlIGlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEKSB7CiAJCXdhcm4oImNhbid0IHdyaXRlIHRvIHVubG9ja2VkIGRldmljZSIpOwogCQlyZXR2YWwgPSAtRUJVU1k7IC8vRklYTUUKLQl9IGVsc2UgaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZGJnKERFQlVHX0FOWSwgImNhbid0IHdyaXRlIHRvIHVucGx1Z2dlZCBkZXZpY2UiKTsKKwl9IGVsc2UgaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY2FuJ3Qgd3JpdGUgdG8gdW5wbHVnZ2VkIGRldmljZSIpOwogCQlyZXR2YWwgPSAtRUJVU1k7IC8vRklYTUUKIAl9IGVsc2UKIAkJcmV0dmFsID0gY3MtPm9wcy0+d3JpdGVfcm9vbShjcyk7CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTQxNSwyNyArNDE5LDI3IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCkgewogCQl3YXJuKCJjYW4ndCB3cml0ZSB0byB1bmxvY2tlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOwotCX0gZWxzZSBpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY2FuJ3Qgd3JpdGUgdG8gdW5wbHVnZ2VkIGRldmljZSIpOworCX0gZWxzZSBpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjYW4ndCB3cml0ZSB0byB1bnBsdWdnZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FQlVTWTsgLy9GSVhNRQogCX0gZWxzZQogCQlyZXR2YWwgPSBjcy0+b3BzLT5jaGFyc19pbl9idWZmZXIoY3MpOwogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC00NDYsMjEgKzQ1MCwyMSBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWRvd24oJmNzLT5zZW0pOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSB7CiAJCS8vRklYTUUKIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBpZl91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC00NjksMjEgKzQ3MywyMSBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWRvd24oJmNzLT5zZW0pOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSB7CiAJCS8vRklYTUUKIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBpZl9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKQpAQCAtNDk2LDIxICs1MDAsMjEgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlkb3duKCZjcy0+c2VtKTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkgewotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19BTlksICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKKwlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC01MTgsOCArNTIyLDggQEAKIAlpZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19pZmxhZzsKIAljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAlvbGRfY2ZsYWcgPSBvbGQgPyBvbGQtPmNfY2ZsYWcgOiBjZmxhZzsgLy9GSVhNRT8KLQlkYmcoREVCVUdfSUYsICIldTogaWZsYWcgJXggY2ZsYWcgJXggb2xkICV4IiwgY3MtPm1pbm9yX2luZGV4LAotCSAgICBpZmxhZywgY2ZsYWcsIG9sZF9jZmxhZyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiBpZmxhZyAleCBjZmxhZyAleCBvbGQgJXgiLAorCQljcy0+bWlub3JfaW5kZXgsIGlmbGFnLCBjZmxhZywgb2xkX2NmbGFnKTsKIAogCS8qIGdldCBhIGxvY2FsIGNvcHkgb2YgdGhlIGN1cnJlbnQgcG9ydCBzZXR0aW5ncyAqLwogCWNvbnRyb2xfc3RhdGUgPSBjcy0+Y29udHJvbF9zdGF0ZTsKQEAgLTUzMSwxNCArNTM1LDE1IEBACiAJICogUHJlbWF0dXJlIG9wdGltaXphdGlvbiBpcyB0aGUgcm9vdCBvZiBhbGwgZXZpbC4KIAkgKi8KIAotICAgICAgICAvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLworCS8qIHJlYXNzZXJ0IERUUiBhbmQgKG1heWJlKSBSVFMgb24gdHJhbnNpdGlvbiBmcm9tIEIwICovCiAJaWYgKChvbGRfY2ZsYWcgJiBDQkFVRCkgPT0gQjApIHsKIAkJbmV3X3N0YXRlID0gY29udHJvbF9zdGF0ZSB8IFRJT0NNX0RUUjsKIAkJLyogZG9uJ3Qgc2V0IFJUUyBpZiB1c2luZyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KIAkJaWYgKCEob2xkX2NmbGFnICYgQ1JUU0NUUykpCiAJCQluZXdfc3RhdGUgfD0gVElPQ01fUlRTOwotCQlkYmcoREVCVUdfSUYsICIldTogZnJvbSBCMCAtIHNldCBEVFIlcyIsIGNzLT5taW5vcl9pbmRleCwKLQkJICAgIChuZXdfc3RhdGUgJiBUSU9DTV9SVFMpID8gIiBvbmx5IiA6ICIvUlRTIik7CisJCWdpZ19kYmcoREVCVUdfSUYsICIldTogZnJvbSBCMCAtIHNldCBEVFIlcyIsCisJCQljcy0+bWlub3JfaW5kZXgsCisJCQkobmV3X3N0YXRlICYgVElPQ01fUlRTKSA/ICIgb25seSIgOiAiL1JUUyIpOwogCQljcy0+b3BzLT5zZXRfbW9kZW1fY3RybChjcywgY29udHJvbF9zdGF0ZSwgbmV3X3N0YXRlKTsKIAkJY29udHJvbF9zdGF0ZSA9IG5ld19zdGF0ZTsKIAl9CkBAIC01NDcsNyArNTUyLDcgQEAKIAogCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjApIHsKIAkJLyogRHJvcCBSVFMgYW5kIERUUiAqLwotCQlkYmcoREVCVUdfSUYsICIldTogdG8gQjAgLSBkcm9wIERUUi9SVFMiLCBjcy0+bWlub3JfaW5kZXgpOworCQlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IHRvIEIwIC0gZHJvcCBEVFIvUlRTIiwgY3MtPm1pbm9yX2luZGV4KTsKIAkJbmV3X3N0YXRlID0gY29udHJvbF9zdGF0ZSAmIH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAkJY3MtPm9wcy0+c2V0X21vZGVtX2N0cmwoY3MsIGNvbnRyb2xfc3RhdGUsIG5ld19zdGF0ZSk7CiAJCWNvbnRyb2xfc3RhdGUgPSBuZXdfc3RhdGU7CkBAIC01NjcsMTUgKzU3MiwxNyBAQAogCSAqIEp1c3QgZG8gd2hhdCB3ZSBoYXZlIHNlZW4gd2l0aCBTbmlmZlVTQiBvbiBXaW45OC4KIAkgKi8KIAkvKiBEcm9wIERUUi9SVFMgaWYgbm8gZmxvdyBjb250cm9sIG90aGVyd2lzZSBhc3NlcnQgKi8KLQlkYmcoREVCVUdfSUYsICIldTogY29udHJvbF9zdGF0ZSAleCIsIGNzLT5taW5vcl9pbmRleCwgY29udHJvbF9zdGF0ZSk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiBjb250cm9sX3N0YXRlICV4IiwKKwkJY3MtPm1pbm9yX2luZGV4LCBjb250cm9sX3N0YXRlKTsKIAluZXdfc3RhdGUgPSBjb250cm9sX3N0YXRlOwogCWlmICgoaWZsYWcgJiBJWE9GRikgfHwgKGlmbGFnICYgSVhPTikgfHwgKGNmbGFnICYgQ1JUU0NUUykpCiAJCW5ld19zdGF0ZSB8PSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7CiAJZWxzZQogCQluZXdfc3RhdGUgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwogCWlmIChuZXdfc3RhdGUgIT0gY29udHJvbF9zdGF0ZSkgewotCQlkYmcoREVCVUdfSUYsICIldTogbmV3X3N0YXRlICV4IiwgY3MtPm1pbm9yX2luZGV4LCBuZXdfc3RhdGUpOwotCQlnaWdhc2V0X3NldF9tb2RlbV9jdHJsKGNzLCBjb250cm9sX3N0YXRlLCBuZXdfc3RhdGUpOyAvLyBGSVhNRTogbWN0X3UyMzIuYyBzZXRzIHRoZSBvbGQgc3RhdGUgaGVyZS4gaXMgdGhpcyBhIGJ1Zz8KKwkJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiBuZXdfc3RhdGUgJXgiLAorCQkJY3MtPm1pbm9yX2luZGV4LCBuZXdfc3RhdGUpOworCQlnaWdhc2V0X3NldF9tb2RlbV9jdHJsKGNzLCBjb250cm9sX3N0YXRlLCBuZXdfc3RhdGUpOwogCQljb250cm9sX3N0YXRlID0gbmV3X3N0YXRlOwogCX0KICNlbmRpZgpAQCAtNTg0LDcgKzU5MSw3IEBACiAJY3MtPmNvbnRyb2xfc3RhdGUgPSBjb250cm9sX3N0YXRlOwogCiBvdXQ6Ci0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIAogCkBAIC02MDAsNyArNjA3LDcgQEAKIAogCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgogCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgewotCQlkYmcoREVCVUdfSUYsICJ3cml0ZSB3YWtldXAgY2FsbCIpOworCQlnaWdfZGJnKERFQlVHX0lGLCAid3JpdGUgd2FrZXVwIGNhbGwiKTsKIAkJdHR5LT5sZGlzYy53cml0ZV93YWtldXAodHR5KTsKIAl9CiAKQEAgLTYzNSwxNCArNjQyLDE0IEBACiB9CiAKIHZvaWQgZ2lnYXNldF9pZl9yZWNlaXZlKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuKQorCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWlmICgodHR5ID0gY3MtPnR0eSkgPT0gTlVMTCkKLQkJZGJnKERFQlVHX0FOWSwgInJlY2VpdmUgb24gY2xvc2VkIGRldmljZSIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgInJlY2VpdmUgb24gY2xvc2VkIGRldmljZSIpOwogCWVsc2UgewogCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGxlbik7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBidWZmZXIsIGxlbik7CkBAIC02NTUsMTMgKzY2MiwxMyBAQAogLyogZ2lnYXNldF9pZl9pbml0ZHJpdmVyCiAgKiBJbml0aWFsaXplIHR0eSBpbnRlcmZhY2UuCiAgKiBwYXJhbWV0ZXJzOgotICogICAgICBkcnYgICAgICAgICAgICAgRHJpdmVyCi0gKiAgICAgIHByb2NuYW1lICAgICAgICBOYW1lIG9mIHRoZSBkcml2ZXIgKGUuZy4gZm9yIC9wcm9jL3R0eS9kcml2ZXJzKQotICogICAgICBkZXZuYW1lICAgICAgICAgTmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIChwcmVmaXggd2l0aG91dCBtaW5vciBudW1iZXIpCi0gKiAgICAgIGRldmZzbmFtZSAgICAgICBEZXZmcyBuYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgd2l0aG91dCAlZAorICoJZHJ2CQlEcml2ZXIKKyAqCXByb2NuYW1lCU5hbWUgb2YgdGhlIGRyaXZlciAoZS5nLiBmb3IgL3Byb2MvdHR5L2RyaXZlcnMpCisgKglkZXZuYW1lCQlOYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgKHByZWZpeCB3aXRob3V0IG1pbm9yIG51bWJlcikKKyAqCWRldmZzbmFtZQlEZXZmcyBuYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgd2l0aG91dCAlZAogICovCiB2b2lkIGdpZ2FzZXRfaWZfaW5pdGRyaXZlcihzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqcHJvY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZuYW1lLCBjb25zdCBjaGFyICpkZXZmc25hbWUpCisJCQkgICBjb25zdCBjaGFyICpkZXZuYW1lLCBjb25zdCBjaGFyICpkZXZmc25hbWUpCiB7CiAJdW5zaWduZWQgbWlub3JzID0gZHJ2LT5taW5vcnM7CiAJaW50IHJldDsKQEAgLTY5Niw3ICs3MDMsNyBAQAogCQl3YXJuKCJmYWlsZWQgdG8gcmVnaXN0ZXIgdHR5IGRyaXZlciAoZXJyb3IgJWQpIiwgcmV0KTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JZGJnKERFQlVHX0lGLCAidHR5IGRyaXZlciBpbml0aWFsaXplZCIpOworCWdpZ19kYmcoREVCVUdfSUYsICJ0dHkgZHJpdmVyIGluaXRpYWxpemVkIik7CiAJZHJ2LT5oYXZlX3R0eSA9IDE7CiAJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYwppbmRleCA1NzQ0ZWI5Li44NjY3ZGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMKQEAgLTEwLDEwICsxMCw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGlzb2NkYXRhLmMsdiAxLjIuMi41IDIwMDUvMTEvMTMgMjM6MDU6MTkgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtODcsMTQgKzgzLDE0IEBACiB7CiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZpd2ItPndyaXRlc2VtKSkgewogCQlhdG9taWNfaW5jKCZpd2ItPndyaXRlc2VtKTsKLQkJZGJnKERFQlVHX0lTTywKLQkJICAgICIlczogY291bGRuJ3QgYWNxdWlyZSBpc28gd3JpdGUgc2VtYXBob3JlIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBjb3VsZG4ndCBhY3F1aXJlIGlzbyB3cml0ZSBzZW1hcGhvcmUiLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKLQlkYmcoREVCVUdfSVNPLAotCSAgICAiJXM6IGFjcXVpcmVkIGlzbyB3cml0ZSBzZW1hcGhvcmUsIGRhdGFbd3JpdGVdPSUwMngsIG5iaXRzPSVkIiwKLQkgICAgX19mdW5jX18sIGl3Yi0+ZGF0YVthdG9taWNfcmVhZCgmaXdiLT53cml0ZSldLCBpd2ItPndiaXRzKTsKKwlnaWdfZGJnKERFQlVHX0lTTywKKwkJIiVzOiBhY3F1aXJlZCBpc28gd3JpdGUgc2VtYXBob3JlLCBkYXRhW3dyaXRlXT0lMDJ4LCBuYml0cz0lZCIsCisJCV9fZnVuY19fLCBpd2ItPmRhdGFbYXRvbWljX3JlYWQoJml3Yi0+d3JpdGUpXSwgaXdiLT53Yml0cyk7CiAjZW5kaWYKIAlyZXR1cm4gMTsKIH0KQEAgLTE0Nyw3ICsxNDMsNyBAQAogCS8qIHJlY292ZXIgdGhlIGlkbGUgZmxhZyBieXRlICovCiAJd3JpdGUgPSBhdG9taWNfcmVhZCgmaXdiLT53cml0ZSk7CiAJaXdiLT5pZGxlID0gaXdiLT5kYXRhW3dyaXRlXTsKLQlkYmcoREVCVUdfSVNPLCAiaWRsZSBmaWxsIGJ5dGUgJTAyeCIsIGl3Yi0+aWRsZSk7CisJZ2lnX2RiZyhERUJVR19JU08sICJpZGxlIGZpbGwgYnl0ZSAlMDJ4IiwgaXdiLT5pZGxlKTsKIAkvKiBtYXNrIGV4dHJhbmVvdXMgYml0cyBpbiBidWZmZXIgKi8KIAlpd2ItPmRhdGFbd3JpdGVdICY9ICgxIDw8IGl3Yi0+d2JpdHMpIC0gMTsKIH0KQEAgLTE2NiwxNSArMTYyLDE0IEBACiAJcmVhZCA9IGF0b21pY19yZWFkKCZpd2ItPm5leHRyZWFkKTsKIAl3cml0ZSA9IGF0b21pY19yZWFkKCZpd2ItPndyaXRlKTsKIAlpZiAobGlrZWx5KHJlYWQgPT0gd3JpdGUpKSB7Ci0JCS8vZGJnKERFQlVHX1NUUkVBTSwgIiVzOiBzZW5kIGJ1ZmZlciBlbXB0eSIsIF9fZnVuY19fKTsKIAkJLyogcmV0dXJuIGlkbGUgZnJhbWUgKi8KIAkJcmV0dXJuIHJlYWQgPCBCQVNfT1VUQlVGUEFEID8KLQkJICAgICAgICBCQVNfT1VUQlVGU0laRSA6IHJlYWQgLSBCQVNfT1VUQlVGUEFEOworCQkJQkFTX09VVEJVRlNJWkUgOiByZWFkIC0gQkFTX09VVEJVRlBBRDsKIAl9CiAKIAlsaW1pdCA9IHJlYWQgKyBzaXplOwotCWRiZyhERUJVR19TVFJFQU0sCi0JICAgICIlczogcmVhZD0lZCB3cml0ZT0lZCBsaW1pdD0lZCIsIF9fZnVuY19fLCByZWFkLCB3cml0ZSwgbGltaXQpOworCWdpZ19kYmcoREVCVUdfU1RSRUFNLCAiJXM6IHJlYWQ9JWQgd3JpdGU9JWQgbGltaXQ9JWQiLAorCQlfX2Z1bmNfXywgcmVhZCwgd3JpdGUsIGxpbWl0KTsKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCWlmICh1bmxpa2VseShzaXplIDwgMCB8fCBzaXplID4gQkFTX09VVEJVRlBBRCkpIHsKIAkJZXJyKCJpbnZhbGlkIHNpemUgJWQiLCBzaXplKTsKQEAgLTE5NiwxMSArMTkxLDEyIEBACiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCS8qIHdyaXRlIHBvc2l0aW9uIGNvdWxkIGhhdmUgY2hhbmdlZCAqLwogCQkJaWYgKGxpbWl0ID49ICh3cml0ZSA9IGF0b21pY19yZWFkKCZpd2ItPndyaXRlKSkpIHsKLQkJCQlwYnl0ZSA9IGl3Yi0+ZGF0YVt3cml0ZV07IC8qIHNhdmUgcGFydGlhbCBieXRlICovCisJCQkJcGJ5dGUgPSBpd2ItPmRhdGFbd3JpdGVdOyAvKiBzYXZlCisJCQkJCQkJICAgICBwYXJ0aWFsIGJ5dGUgKi8KIAkJCQlsaW1pdCA9IHdyaXRlICsgQkFTX09VVEJVRlBBRDsKLQkJCQlkYmcoREVCVUdfU1RSRUFNLAotCQkJCSAgICAiJXM6IGZpbGxpbmcgJWQtPiVkIHdpdGggJTAyeCIsCi0JCQkJICAgIF9fZnVuY19fLCB3cml0ZSwgbGltaXQsIGl3Yi0+aWRsZSk7CisJCQkJZ2lnX2RiZyhERUJVR19TVFJFQU0sCisJCQkJCSIlczogZmlsbGluZyAlZC0+JWQgd2l0aCAlMDJ4IiwKKwkJCQkJX19mdW5jX18sIHdyaXRlLCBsaW1pdCwgaXdiLT5pZGxlKTsKIAkJCQlpZiAod3JpdGUgKyBCQVNfT1VUQlVGUEFEIDwgQkFTX09VVEJVRlNJWkUpCiAJCQkJCW1lbXNldChpd2ItPmRhdGEgKyB3cml0ZSwgaXdiLT5pZGxlLAogCQkJCQkgICAgICAgQkFTX09VVEJVRlBBRCk7CkBAIC0yMTEsOSArMjA3LDExIEBACiAJCQkJCSAgICAgICAtIHdyaXRlKTsKIAkJCQkJbGltaXQgPSAwOwogCQkJCX0KLQkJCQlkYmcoREVCVUdfU1RSRUFNLCAiJXM6IHJlc3RvcmluZyAlMDJ4IGF0ICVkIiwKLQkJCQkgICAgX19mdW5jX18sIHBieXRlLCBsaW1pdCk7Ci0JCQkJaXdiLT5kYXRhW2xpbWl0XSA9IHBieXRlOyAvKiByZXN0b3JlIHBhcnRpYWwgYnl0ZSAqLworCQkJCWdpZ19kYmcoREVCVUdfU1RSRUFNLAorCQkJCQkiJXM6IHJlc3RvcmluZyAlMDJ4IGF0ICVkIiwKKwkJCQkJX19mdW5jX18sIHBieXRlLCBsaW1pdCk7CisJCQkJaXdiLT5kYXRhW2xpbWl0XSA9IHBieXRlOyAvKiByZXN0b3JlCisJCQkJCQkJICAgICBwYXJ0aWFsIGJ5dGUgKi8KIAkJCQlhdG9taWNfc2V0KCZpd2ItPndyaXRlLCBsaW1pdCk7CiAJCQl9CiAJCQlpc293YnVmX2RvbmV3cml0ZShpd2IpOwpAQCAtMjQyLDE5ICsyNDAsMTcgQEAKICAqIHdyaXRlIGhleCBieXRlcyB0byBzeXNsb2cgZm9yIGRlYnVnZ2luZwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9ieXRlcyhlbnVtIGRlYnVnbGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKnRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzLCBpbnQgY291bnQpCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcywgaW50IGNvdW50KQogewogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJdW5zaWduZWQgY2hhciBjOwogCXN0YXRpYyBjaGFyIGRiZ2xpbmVbMyAqIDMyICsgMV07CiAJc3RhdGljIGNvbnN0IGNoYXIgaGV4ZGlnaXRbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKIAlpbnQgaSA9IDA7Ci0JSUZOVUxMUkVUKHRhZyk7Ci0JSUZOVUxMUkVUKGJ5dGVzKTsKIAl3aGlsZSAoY291bnQtLSA+IDApIHsKIAkJaWYgKGkgPiBzaXplb2YoZGJnbGluZSkgLSA0KSB7CiAJCQlkYmdsaW5lW2ldID0gJ1wwJzsKLQkJCWRiZyhsZXZlbCwgIiVzOiVzIiwgdGFnLCBkYmdsaW5lKTsKKwkJCWdpZ19kYmcobGV2ZWwsICIlczolcyIsIHRhZywgZGJnbGluZSk7CiAJCQlpID0gMDsKIAkJfQogCQljID0gKmJ5dGVzKys7CkBAIC0yNjQsNyArMjYwLDcgQEAKIAkJZGJnbGluZVtpKytdID0gaGV4ZGlnaXRbYyAmIDB4MGZdOwogCX0KIAlkYmdsaW5lW2ldID0gJ1wwJzsKLQlkYmcobGV2ZWwsICIlczolcyIsIHRhZywgZGJnbGluZSk7CisJZ2lnX2RiZyhsZXZlbCwgIiVzOiVzIiwgdGFnLCBkYmdsaW5lKTsKICNlbmRpZgogfQogCkBAIC0zODAsNyArMzc2LDcgQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIGludCBoZGxjX2JpdHN0dWZmX2J5dGUoc3RydWN0IGlzb3didWZfdCAqaXdiLCB1bnNpZ25lZCBjaGFyIGNpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb25lcykKKwkJCQkgICAgIGludCBvbmVzKQogewogCXUxNiBzdHVmZjsKIAlpbnQgc2hpZnRpbmMsIG5ld29uZXM7CkBAIC00MjIsNyArNDE4LDcgQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIGludCBoZGxjX2J1aWxkZnJhbWUoc3RydWN0IGlzb3didWZfdCAqaXdiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgY291bnQpCisJCQkJICB1bnNpZ25lZCBjaGFyICppbiwgaW50IGNvdW50KQogewogCWludCBvbmVzOwogCXUxNiBmY3M7CkBAIC00MzEsOCArNDI3LDggQEAKIAogCWlmIChpc293YnVmX2ZyZWVieXRlcyhpd2IpIDwgY291bnQgKyBjb3VudCAvIDUgKyA2IHx8CiAJICAgICFpc293YnVmX3N0YXJ0d3JpdGUoaXdiKSkgewotCQlkYmcoREVCVUdfSVNPLCAiJXM6ICVkIGJ5dGVzIGZyZWUgLT4gLUVBR0FJTiIsCi0JCSAgICBfX2Z1bmNfXywgaXNvd2J1Zl9mcmVlYnl0ZXMoaXdiKSk7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6ICVkIGJ5dGVzIGZyZWUgLT4gLUVBR0FJTiIsCisJCQlfX2Z1bmNfXywgaXNvd2J1Zl9mcmVlYnl0ZXMoaXdiKSk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIApAQCAtNDg0LDExICs0ODAsMTEgQEAKIAogCWlmIChpc293YnVmX2ZyZWVieXRlcyhpd2IpIDwgY291bnQgfHwKIAkgICAgIWlzb3didWZfc3RhcnR3cml0ZShpd2IpKSB7Ci0JCWRiZyhERUJVR19JU08sICJjYW4ndCBwdXQgJWQgYnl0ZXMiLCBjb3VudCk7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiY2FuJ3QgcHV0ICVkIGJ5dGVzIiwgY291bnQpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQlkYmcoREVCVUdfU1RSRUFNLCAicHV0ICVkIGJ5dGVzIiwgY291bnQpOworCWdpZ19kYmcoREVCVUdfU1RSRUFNLCAicHV0ICVkIGJ5dGVzIiwgY291bnQpOwogCXdyaXRlID0gYXRvbWljX3JlYWQoJml3Yi0+d3JpdGUpOwogCWRvIHsKIAkJYyA9IGdpZ2FzZXRfaW52dGFiWyppbisrXTsKQEAgLTUwOCwxMSArNTA0LDEzIEBACiAJc3dpdGNoIChiY3MtPnByb3RvMikgewogCWNhc2UgSVNETl9QUk9UT19MMl9IRExDOgogCQlyZXN1bHQgPSBoZGxjX2J1aWxkZnJhbWUoYmNzLT5ody5iYXMtPmlzb291dGJ1ZiwgaW4sIGxlbik7Ci0JCWRiZyhERUJVR19JU08sICIlczogJWQgYnl0ZXMgSERMQyAtPiAlZCIsIF9fZnVuY19fLCBsZW4sIHJlc3VsdCk7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6ICVkIGJ5dGVzIEhETEMgLT4gJWQiLAorCQkJX19mdW5jX18sIGxlbiwgcmVzdWx0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoJCQkvKiBhc3N1bWUgdHJhbnNwYXJlbnQgKi8KIAkJcmVzdWx0ID0gdHJhbnNfYnVpbGRmcmFtZShiY3MtPmh3LmJhcy0+aXNvb3V0YnVmLCBpbiwgbGVuKTsKLQkJZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyB0cmFucyAtPiAlZCIsIF9fZnVuY19fLCBsZW4sIHJlc3VsdCk7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6ICVkIGJ5dGVzIHRyYW5zIC0+ICVkIiwKKwkJCV9fZnVuY19fLCBsZW4sIHJlc3VsdCk7CiAJfQogCXJldHVybiByZXN1bHQ7CiB9CkBAIC01MjgsMTMgKzUyNiwxMyBAQAogCQlyZXR1cm47CiAJfQogCWlmICh1bmxpa2VseShiY3MtPnNrYi0+bGVuID09IFNCVUZTSVpFKSkgewotCQl3YXJuKCJyZWNlaXZlZCBvdmVyc2l6ZWQgcGFja2V0IGRpc2NhcmRlZCIpOworCQlkZXZfd2FybihiY3MtPmNzLT5kZXYsICJyZWNlaXZlZCBvdmVyc2l6ZWQgcGFja2V0IGRpc2NhcmRlZFxuIik7CiAJCWJjcy0+aHcuYmFzLT5naWFudHMrKzsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYmNzLT5za2IpOwogCQliY3MtPnNrYiA9IE5VTEw7CiAJCXJldHVybjsKIAl9Ci0JKmdpZ2FzZXRfc2tiX3B1dF9xdWljayhiY3MtPnNrYiwgMSkgPSBjOworCSpfX3NrYl9wdXQoYmNzLT5za2IsIDEpID0gYzsKIH0KIAogLyogaGRsY19mbHVzaApAQCAtNTQ5LDcgKzU0Nyw3IEBACiAJCWlmICgoYmNzLT5za2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTikpICE9IE5VTEwpCiAJCQlza2JfcmVzZXJ2ZShiY3MtPnNrYiwgSFdfSERSX0xFTik7CiAJCWVsc2UKLQkJCWVycigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOworCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKIAl9CiAKIAkvKiByZXNldCBwYWNrZXQgc3RhdGUgKi8KQEAgLTU3MSwyMyArNTY5LDI1IEBACiAKIAlpZiAoKHByb2Nza2IgPSBiY3MtPnNrYikgPT0gTlVMTCkgewogCQkvKiBwcmV2aW91cyBlcnJvciAqLwotCQlkYmcoREVCVUdfSVNPLCAiJXM6IHNrYj1OVUxMIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBza2I9TlVMTCIsIF9fZnVuY19fKTsKIAkJZ2lnYXNldF9yY3ZfZXJyb3IoTlVMTCwgYmNzLT5jcywgYmNzKTsKIAl9IGVsc2UgaWYgKHByb2Nza2ItPmxlbiA8IDIpIHsKLQkJbm90aWNlKCJyZWNlaXZlZCBzaG9ydCBmcmFtZSAoJWQgb2N0ZXRzKSIsIHByb2Nza2ItPmxlbik7CisJCWRldl9ub3RpY2UoYmNzLT5jcy0+ZGV2LCAicmVjZWl2ZWQgc2hvcnQgZnJhbWUgKCVkIG9jdGV0cylcbiIsCisJCQkgICBwcm9jc2tiLT5sZW4pOwogCQliY3MtPmh3LmJhcy0+cnVudHMrKzsKIAkJZ2lnYXNldF9yY3ZfZXJyb3IocHJvY3NrYiwgYmNzLT5jcywgYmNzKTsKIAl9IGVsc2UgaWYgKGJjcy0+ZmNzICE9IFBQUF9HT09ERkNTKSB7Ci0JCW5vdGljZSgiZnJhbWUgY2hlY2sgZXJyb3IgKDB4JTA0eCkiLCBiY3MtPmZjcyk7CisJCWRldl9ub3RpY2UoYmNzLT5jcy0+ZGV2LCAiZnJhbWUgY2hlY2sgZXJyb3IgKDB4JTA0eClcbiIsCisJCQkgICBiY3MtPmZjcyk7CiAJCWJjcy0+aHcuYmFzLT5mY3NlcnJzKys7CiAJCWdpZ2FzZXRfcmN2X2Vycm9yKHByb2Nza2IsIGJjcy0+Y3MsIGJjcyk7CiAJfSBlbHNlIHsKIAkJcHJvY3NrYi0+bGVuIC09IDI7CQkvKiBzdWJ0cmFjdCBGQ1MgKi8KIAkJcHJvY3NrYi0+dGFpbCAtPSAyOwotCQlkYmcoREVCVUdfSVNPLAotCQkgICAgIiVzOiBnb29kIGZyYW1lICglZCBvY3RldHMpIiwgX19mdW5jX18sIHByb2Nza2ItPmxlbik7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IGdvb2QgZnJhbWUgKCVkIG9jdGV0cykiLAorCQkJX19mdW5jX18sIHByb2Nza2ItPmxlbik7CiAJCWR1bXBfYnl0ZXMoREVCVUdfU1RSRUFNLAotCQkgICAgICAgICAgICJyY3YgZGF0YSIsIHByb2Nza2ItPmRhdGEsIHByb2Nza2ItPmxlbik7CisJCQkgICAicmN2IGRhdGEiLCBwcm9jc2tiLT5kYXRhLCBwcm9jc2tiLT5sZW4pOwogCQliY3MtPmh3LmJhcy0+Z29vZGJ5dGVzICs9IHByb2Nza2ItPmxlbjsKIAkJZ2lnYXNldF9yY3Zfc2tiKHByb2Nza2IsIGJjcy0+Y3MsIGJjcyk7CiAJfQpAQCAtNTk1LDcgKzU5NSw3IEBACiAJaWYgKChiY3MtPnNrYiA9IGRldl9hbGxvY19za2IoU0JVRlNJWkUgKyBIV19IRFJfTEVOKSkgIT0gTlVMTCkKIAkJc2tiX3Jlc2VydmUoYmNzLT5za2IsIEhXX0hEUl9MRU4pOwogCWVsc2UKLQkJZXJyKCJjb3VsZCBub3QgYWxsb2NhdGUgc2tiIik7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJYmNzLT5mY3MgPSBQUFBfSU5JVEZDUzsKIH0KIApAQCAtNjEwLDE0ICs2MTAsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAotCW5vdGljZSgicmVjZWl2ZWQgcGFydGlhbCBieXRlICglZCBiaXRzKSIsIGluYml0cyk7CisJZGV2X25vdGljZShiY3MtPmNzLT5kZXYsICJyZWNlaXZlZCBwYXJ0aWFsIGJ5dGUgKCVkIGJpdHMpXG4iLCBpbmJpdHMpOwogCWJjcy0+aHcuYmFzLT5hbGlnbmVycnMrKzsKIAlnaWdhc2V0X3Jjdl9lcnJvcihiY3MtPnNrYiwgYmNzLT5jcywgYmNzKTsKIAogCWlmICgoYmNzLT5za2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTikpICE9IE5VTEwpCiAJCXNrYl9yZXNlcnZlKGJjcy0+c2tiLCBIV19IRFJfTEVOKTsKIAllbHNlCi0JCWVycigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCWJjcy0+ZmNzID0gUFBQX0lOSVRGQ1M7CiB9CiAKQEAgLTY1OSwxNiArNjU5LDEyIEBACiAgKgliY3MJcmVjZWl2aW5nIEIgY2hhbm5lbCBzdHJ1Y3R1cmUKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGhkbGNfdW5wYWNrKHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJjX3N0YXRlICpiY3MpCisJCQkgICAgICAgc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7Ci0Jc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOworCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYyA9IGJjcy0+aHcuYmFzOwogCWludCBpbnB1dHN0YXRlOwogCXVuc2lnbmVkIHNlcWxlbiwgaW5ieXRlLCBpbmJpdHM7CiAKLQlJRk5VTExSRVQoYmNzKTsKLQl1YmMgPSBiY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWJjKTsKLQogCS8qIGxvYWQgcHJldmlvdXMgc3RhdGU6CiAJICogaW5wdXRzdGF0ZSA9IHNldCBvZiBmbGFnIGJpdHM6CiAJICogLSBJTlNfZmxhZ19odW50OiBubyBjb21wbGV0ZSBvcGVuaW5nIGZsYWcgcmVjZWl2ZWQgc2luY2UgY29ubmVjdGlvbiBzZXR1cCBvciBsYXN0IGFib3J0CkBAIC04NTYsNyArODUyLDcgQEAKICAqCWJjcwlyZWNlaXZpbmcgQiBjaGFubmVsIHN0cnVjdHVyZQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNfcmVjZWl2ZSh1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJjX3N0YXRlICpiY3MpCisJCQkJIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGRvYnl0ZXM7CkBAIC04NzAsNyArODY2LDcgQEAKIAlpZiAodW5saWtlbHkoKHNrYiA9IGJjcy0+c2tiKSA9PSBOVUxMKSkgewogCQliY3MtPnNrYiA9IHNrYiA9IGRldl9hbGxvY19za2IoU0JVRlNJWkUgKyBIV19IRFJfTEVOKTsKIAkJaWYgKCFza2IpIHsKLQkJCWVycigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOworCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCQlza2JfcmVzZXJ2ZShza2IsIEhXX0hEUl9MRU4pOwpAQCAtODg4LDcgKzg4NCw4IEBACiAJCQlnaWdhc2V0X3Jjdl9za2Ioc2tiLCBiY3MtPmNzLCBiY3MpOwogCQkJYmNzLT5za2IgPSBza2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTik7CiAJCQlpZiAoIXNrYikgewotCQkJCWVycigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOworCQkJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LAorCQkJCQkiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJc2tiX3Jlc2VydmUoYmNzLT5za2IsIEhXX0hEUl9MRU4pOwpAQCAtOTIxLDggKzkxOCw4IEBACiAJCWNhc2UgJ1xyJzoKIAkJY2FzZSAnXG4nOgogCQkJLyogZW5kIG9mIGxpbmUgKi8KLQkJCWRiZyhERUJVR19UUkFOU0NNRCwgIiVzOiBFbmQgb2YgQ29tbWFuZCAoJWQgQnl0ZXMpIiwKLQkJCSAgICBfX2Z1bmNfXywgY2J5dGVzKTsKKwkJCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICIlczogRW5kIG9mIENvbW1hbmQgKCVkIEJ5dGVzKSIsCisJCQkJX19mdW5jX18sIGNieXRlcyk7CiAJCQljcy0+Y2J5dGVzID0gY2J5dGVzOwogCQkJZ2lnYXNldF9oYW5kbGVfbW9kZW1fcmVzcG9uc2UoY3MpOwogCQkJY2J5dGVzID0gMDsKQEAgLTkzMiw3ICs5MjksNyBAQAogCQkJaWYgKGNieXRlcyA8IE1BWF9SRVNQX1NJWkUgLSAxKQogCQkJCWNieXRlcysrOwogCQkJZWxzZQotCQkJCXdhcm4oInJlc3BvbnNlIHRvbyBsYXJnZSIpOworCQkJCWRldl93YXJuKGNzLT5kZXYsICJyZXNwb25zZSB0b28gbGFyZ2VcbiIpOwogCQl9CiAJfQogCkBAIC05NTEsMjcgKzk0OCwyNyBAQAogCiAJaGVhZCA9IGF0b21pY19yZWFkKCZpbmJ1Zi0+aGVhZCk7CiAJd2hpbGUgKGhlYWQgIT0gKHRhaWwgPSBhdG9taWNfcmVhZCgmaW5idWYtPnRhaWwpKSkgewotCQlkYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAiYnVmZmVyIHN0YXRlOiAldSAtPiAldSIsIGhlYWQsIHRhaWwpOwogCQlpZiAoaGVhZCA+IHRhaWwpCiAJCQl0YWlsID0gUkJVRlNJWkU7CiAJCXNyYyA9IGluYnVmLT5kYXRhICsgaGVhZDsKIAkJbnVtYnl0ZXMgPSB0YWlsIC0gaGVhZDsKLQkJZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOwogCiAJCWlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgPT0gTVNfTE9DS0VEKSB7CiAJCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfTE9DS0NNRCwgInJlY2VpdmVkIHJlc3BvbnNlIiwKLQkJCSAgICAgICAgICAgICAgICAgICBudW1ieXRlcywgc3JjLCAwKTsKKwkJCQkJICAgbnVtYnl0ZXMsIHNyYyk7CiAJCQlnaWdhc2V0X2lmX3JlY2VpdmUoaW5idWYtPmNzLCBzcmMsIG51bWJ5dGVzKTsKIAkJfSBlbHNlIHsKIAkJCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19DTUQsICJyZWNlaXZlZCByZXNwb25zZSIsCi0JCQkgICAgICAgICAgICAgICAgICAgbnVtYnl0ZXMsIHNyYywgMCk7CisJCQkJCSAgIG51bWJ5dGVzLCBzcmMpOwogCQkJY21kX2xvb3Aoc3JjLCBudW1ieXRlcywgaW5idWYpOwogCQl9CiAKIAkJaGVhZCArPSBudW1ieXRlczsKIAkJaWYgKGhlYWQgPT0gUkJVRlNJWkUpCiAJCQloZWFkID0gMDsKLQkJZGJnKERFQlVHX0lOVFIsICJzZXR0aW5nIGhlYWQgdG8gJXUiLCBoZWFkKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAic2V0dGluZyBoZWFkIHRvICV1IiwgaGVhZCk7CiAJCWF0b21pY19zZXQoJmluYnVmLT5oZWFkLCBoZWFkKTsKIAl9CiB9CkBAIC05OTIsMTggKzk4OSwyMiBAQAogICovCiBpbnQgZ2lnYXNldF9pc29jX3NlbmRfc2tiKHN0cnVjdCBiY19zdGF0ZSAqYmNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCBsZW47CisJaW50IGxlbiA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCAtRUZBVUxUKTsKLQlJRk5VTExSRVRWQUwoc2tiLCAtRUZBVUxUKTsKLQlsZW4gPSBza2ItPmxlbjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOworCWlmICghYmNzLT5jcy0+Y29ubmVjdGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJc2tiX3F1ZXVlX3RhaWwoJmJjcy0+c3F1ZXVlLCBza2IpOwotCWRiZyhERUJVR19JU08sCi0JICAgICIlczogc2tiIHF1ZXVlZCwgcWxlbj0lZCIsIF9fZnVuY19fLCBza2JfcXVldWVfbGVuKCZiY3MtPnNxdWV1ZSkpOworCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IHNrYiBxdWV1ZWQsIHFsZW49JWQiLAorCQlfX2Z1bmNfXywgc2tiX3F1ZXVlX2xlbigmYmNzLT5zcXVldWUpKTsKIAogCS8qIHRhc2tsZXQgc3VibWl0cyBVUkIgaWYgbmVjZXNzYXJ5ICovCiAJdGFza2xldF9zY2hlZHVsZSgmYmNzLT5ody5iYXMtPnNlbnRfdGFza2xldCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGxlbjsJLyogb2sgc28gZmFyICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9wcm9jLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9wcm9jLmMKaW5kZXggYzY5MTVmYS4uZDI2N2E2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Byb2MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTdHVmZiB1c2VkIGJ5IGFsbCB2YXJpYW50cyBvZiB0aGUgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+LAorICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LAogICogICAgICAgICAgICAgICAgICAgICAgIFRpbG1hbiBTY2htaWR0IDx0aWxtYW5AaW1hcC5jYz4uCiAgKgpAQCAtMTEsMjYgKzExLDI5IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IHByb2MuYyx2IDEuNS4yLjEzIDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfY2lkbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2NpZG1vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBhdG9taWNfcmVhZCgmY3MtPmNpZG1vZGUpKTsgLy8gRklYTUUgdXNlIHNjbnByaW50ZiBmb3IgMTM2MDcgYml0IGFyY2hpdGVjdHVyZXMgKGlmIFBBR0VfU0laRT09NDA5NikKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIGNzLT5jaWRtb2RlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2V0X2NpZG1vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzZXRfY2lkbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJbG9uZyBpbnQgdmFsdWU7CiAJY2hhciAqZW5kOwogCkBAIC00MSwyMyArNDQsMjMgQEAKIAlpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCiAJY3MtPndhaXRpbmcgPSAxOwogCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIEVWX1BST0NfQ0lETU9ERSwKLQkJICAgICAgICAgICAgICAgTlVMTCwgdmFsdWUsIE5VTEwpKSB7CisJCQkgICAgICAgTlVMTCwgdmFsdWUsIE5VTEwpKSB7CiAJCWNzLT53YWl0aW5nID0gMDsKLQkJdXAoJmNzLT5zZW0pOworCQltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFBST0NfQ0lETU9ERSIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBQUk9DX0NJRE1PREUiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC02NSwxNyArNjgsMTUgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihjaWRtb2RlLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfY2lkbW9kZSwgc2V0X2NpZG1vZGUpOwogCiAvKiBmcmVlIHN5c2ZzIGZvciBkZXZpY2UgKi8KLXZvaWQgZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQordm9pZCBnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCWRiZyhERUJVR19JTklULCAicmVtb3Zpbmcgc3lzZnMgZW50cmllcyIpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9jaWRtb2RlKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJyZW1vdmluZyBzeXNmcyBlbnRyaWVzIik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGNzLT5kZXYsICZkZXZfYXR0cl9jaWRtb2RlKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMpOwogCiAvKiBpbml0aWFsaXplIHN5c2ZzIGZvciBkZXZpY2UgKi8KLXZvaWQgZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQordm9pZCBnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBzeXNmcyIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9jaWRtb2RlKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIHN5c2ZzIik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKGNzLT5kZXYsICZkZXZfYXR0cl9jaWRtb2RlKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfaW5pdF9kZXZfc3lzZnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKaW5kZXggMzIzZmM3My4uZDg2YWI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFVTQiBkcml2ZXIgZm9yIEdpZ2FzZXQgMzA3eCBkaXJlY3RseSBvciB1c2luZyBNMTA1IERhdGEuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycwogICogICAgICAgICAgICAgICAgICAgYW5kIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPi4KICAqCiAgKiBUaGlzIGRyaXZlciB3YXMgZGVyaXZlZCBmcm9tIHRoZSBVU0Igc2tlbGV0b24gZHJpdmVyIGJ5CkBAIC0xMywxMCArMTMsNiBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiB1c2ItZ2lnYXNldC5jLHYgMS44NS40LjE4IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtMjksNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAKIC8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBTdGVmYW4gRWlsZXJzIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIERyaXZlciBmb3IgR2lnYXNldCAzMDd4IHVzaW5nIE0xMDUiCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC02MiwxMCArNTgsNiBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZ2lnYXNldF90YWJsZSk7CiAKLS8qIEdldCBhIG1pbm9yIHJhbmdlIGZvciB5b3VyIGRldmljZXMgZnJvbSB0aGUgdXNiIG1haW50YWluZXIgKi8KLSNkZWZpbmUgVVNCX1NLRUxfTUlOT1JfQkFTRQkyMDAKLQotCiAvKgogICogQ29udHJvbCByZXF1ZXN0cyAoZW1wdHkgZmllbGRzOiAwMCkKICAqCkBAIC0xMTQsNyArMTA2LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IGdpZ2FzZXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCBnaWdhc2V0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRyaXZlciA9IE5VTEw7CkBAIC0xMjIsMjkgKzExNCwyOSBAQAogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZ2lnYXNldF91c2JfZHJpdmVyID0gewotCS5uYW1lID0gICAgICAgICBHSUdBU0VUX01PRFVMRU5BTUUsCi0JLnByb2JlID0gICAgICAgIGdpZ2FzZXRfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSAgIGdpZ2FzZXRfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPSAgICAgZ2lnYXNldF90YWJsZSwKKwkubmFtZSA9CQlHSUdBU0VUX01PRFVMRU5BTUUsCisJLnByb2JlID0JZ2lnYXNldF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWdpZ2FzZXRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlnaWdhc2V0X3RhYmxlLAogfTsKIAogc3RydWN0IHVzYl9jYXJkc3RhdGUgewotCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICp1ZGV2OyAgICAgICAgICAgICAgICAgIC8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAgICAqaW50ZXJmYWNlOyAgICAgICAgICAgICAvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLwotCWF0b21pY190ICAgICAgICAgICAgICAgIGJ1c3k7ICAgICAgICAgICAgICAgICAgIC8qIGJ1bGsgb3V0cHV0IGluIHByb2dyZXNzICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CQkvKiB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwkvKiBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJYXRvbWljX3QJCWJ1c3k7CQkvKiBidWxrIG91dHB1dCBpbiBwcm9ncmVzcyAqLwogCi0JLyogT3V0cHV0IGJ1ZmZlciBmb3IgY29tbWFuZHMgKE0xMDU6IGFuZCBkYXRhKSovCi0JdW5zaWduZWQgY2hhciAgICAgICAgICAgKmJ1bGtfb3V0X2J1ZmZlcjsgICAgICAgLyogdGhlIGJ1ZmZlciB0byBzZW5kIGRhdGEgKi8KLQlpbnQgICAgICAgICAgICAgICAgICAgICBidWxrX291dF9zaXplOyAgICAgICAgICAvKiB0aGUgc2l6ZSBvZiB0aGUgc2VuZCBidWZmZXIgKi8KLQlfX3U4ICAgICAgICAgICAgICAgICAgICBidWxrX291dF9lbmRwb2ludEFkZHI7ICAvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBvdXQgZW5kcG9pbnQgKi8KLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqYnVsa19vdXRfdXJiOyAgICAgICAgICAvKiB0aGUgdXJiIHVzZWQgdG8gdHJhbnNtaXQgZGF0YSAqLworCS8qIE91dHB1dCBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyCQkqYnVsa19vdXRfYnVmZmVyOworCWludAkJCWJ1bGtfb3V0X3NpemU7CisJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcjsKKwlzdHJ1Y3QgdXJiCQkqYnVsa19vdXRfdXJiOwogCi0JLyogSW5wdXQgYnVmZmVyIGZvciBjb21tYW5kIHJlc3BvbnNlcyAoTTEwNTogYW5kIGRhdGEpKi8KLQlpbnQgICAgICAgICAgICAgICAgICAgICByY3ZidWZfc2l6ZTsgICAgICAgICAgICAvKiB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqcmVhZF91cmI7ICAgICAgICAgICAgICAvKiB0aGUgdXJiIHVzZWQgdG8gcmVjZWl2ZSBkYXRhICovCi0JX191OCAgICAgICAgICAgICAgICAgICAgaW50X2luX2VuZHBvaW50QWRkcjsgICAgLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwkvKiBJbnB1dCBidWZmZXIgKi8KKwlpbnQJCQlyY3ZidWZfc2l6ZTsKKwlzdHJ1Y3QgdXJiCQkqcmVhZF91cmI7CisJX191OAkJCWludF9pbl9lbmRwb2ludEFkZHI7CiAKLQljaGFyICAgICAgICAgICAgICAgICAgICBiY2hhcnNbNl07ICAgICAgICAgICAgICAvKiByZXEuIDB4MTkgKi8KKwljaGFyCQkJYmNoYXJzWzZdOwkJLyogZm9yIHJlcXVlc3QgMHgxOSAqLwogfTsKIAogc3RydWN0IHVzYl9iY19zdGF0ZSB7fTsKQEAgLTE1NywxOSArMTQ5LDIwIEBACiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfVU5ET0NSRVEKIC8qIFdBUk5JTkc6IEVYUEVSSU1FTlRBTCEgKi8KIHN0YXRpYyBpbnQgZ2lnYXNldF9zZXRfbW9kZW1fY3RybChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgb2xkX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld19zdGF0ZSkKKwkJCQkgIHVuc2lnbmVkIG5ld19zdGF0ZSkKIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNzLT5ody51c2ItPnVkZXY7CiAJdW5zaWduZWQgbWFzaywgdmFsOwogCWludCByOwogCiAJbWFzayA9IHRpb2NtX3RvX2dpZ2FzZXQob2xkX3N0YXRlIF4gbmV3X3N0YXRlKTsKIAl2YWwgPSB0aW9jbV90b19naWdhc2V0KG5ld19zdGF0ZSk7CiAKLQlkYmcoREVCVUdfVVNCUkVRLCAic2V0IGZsYWdzIDB4JTAyeCB3aXRoIG1hc2sgMHglMDJ4IiwgdmFsLCBtYXNrKTsKLQlyID0gdXNiX2NvbnRyb2xfbXNnKGNzLT5ody51c2ItPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUoY3MtPmh3LnVzYi0+dWRldiwgMCksIDcsIDB4NDEsCi0JICAgICAgICAgICAgICAgICAgICAodmFsICYgMHhmZikgfCAoKG1hc2sgJiAweGZmKSA8PCA4KSwgMCwKLQkgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIDIwMDAgLyp0aW1lb3V0Pz8qLyk7IC8vIGRvbid0IHVzZSB0aGlzIGluIGFuIGludGVycnVwdC9CSAorCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAic2V0IGZsYWdzIDB4JTAyeCB3aXRoIG1hc2sgMHglMDJ4IiwgdmFsLCBtYXNrKTsKKwkvLyBkb24ndCB1c2UgdGhpcyBpbiBhbiBpbnRlcnJ1cHQvQkgKKwlyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgNywgMHg0MSwKKwkJCSAgICAodmFsICYgMHhmZikgfCAoKG1hc2sgJiAweGZmKSA8PCA4KSwgMCwKKwkJCSAgICBOVUxMLCAwLCAyMDAwIC8qIHRpbWVvdXQ/ICovKTsKIAlpZiAociA8IDApCiAJCXJldHVybiByOwogCS8vLi4KQEAgLTE3OCwzMCArMTcxLDI5IEBACiAKIHN0YXRpYyBpbnQgc2V0X3ZhbHVlKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1OCByZXEsIHUxNiB2YWwpCiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjcy0+aHcudXNiLT51ZGV2OwogCWludCByLCByMjsKIAotCWRiZyhERUJVR19VU0JSRVEsICJyZXF1ZXN0ICUwMnggKCUwNHgpIiwgKHVuc2lnbmVkKXJlcSwgKHVuc2lnbmVkKXZhbCk7Ci0JciA9IHVzYl9jb250cm9sX21zZyhjcy0+aHcudXNiLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgdXNiX3NuZGN0cmxwaXBlKGNzLT5ody51c2ItPnVkZXYsIDApLCAweDEyLCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgMHhmIC8qPyovLCAwLAotCSAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgMjAwMCAvKj8qLyk7IC8qIG5vIGlkZWEsIHdoYXQgdGhpcyBkb2VzICovCisJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJyZXF1ZXN0ICUwMnggKCUwNHgpIiwKKwkJKHVuc2lnbmVkKXJlcSwgKHVuc2lnbmVkKXZhbCk7CisJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MTIsIDB4NDEsCisJCQkgICAgMHhmIC8qPyovLCAwLCBOVUxMLCAwLCAyMDAwIC8qPyovKTsKKwkJCSAgICAvKiBubyBpZGVhIHdoYXQgdGhpcyBkb2VzICovCiAJaWYgKHIgPCAwKSB7Ci0JCWVycigiZXJyb3IgJWQgb24gcmVxdWVzdCAweDEyIiwgLXIpOworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJlcnJvciAlZCBvbiByZXF1ZXN0IDB4MTJcbiIsIC1yKTsKIAkJcmV0dXJuIHI7CiAJfQogCi0JciA9IHVzYl9jb250cm9sX21zZyhjcy0+aHcudXNiLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgdXNiX3NuZGN0cmxwaXBlKGNzLT5ody51c2ItPnVkZXYsIDApLCByZXEsIDB4NDEsCi0JICAgICAgICAgICAgICAgICAgICB2YWwsIDAsCi0JICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAyMDAwIC8qPyovKTsKKwlyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgcmVxLCAweDQxLAorCQkJICAgIHZhbCwgMCwgTlVMTCwgMCwgMjAwMCAvKj8qLyk7CiAJaWYgKHIgPCAwKQotCQllcnIoImVycm9yICVkIG9uIHJlcXVlc3QgMHglMDJ4IiwgLXIsICh1bnNpZ25lZClyZXEpOworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJlcnJvciAlZCBvbiByZXF1ZXN0IDB4JTAyeFxuIiwKKwkJCS1yLCAodW5zaWduZWQpcmVxKTsKIAotCXIyID0gdXNiX2NvbnRyb2xfbXNnKGNzLT5ody51c2ItPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgdXNiX3NuZGN0cmxwaXBlKGNzLT5ody51c2ItPnVkZXYsIDApLCAweDE5LCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNzLT5ody51c2ItPmJjaGFycywgNiwgMjAwMCAvKj8qLyk7CisJcjIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDE5LCAweDQxLAorCQkJICAgICAwLCAwLCBjcy0+aHcudXNiLT5iY2hhcnMsIDYsIDIwMDAgLyo/Ki8pOwogCWlmIChyMiA8IDApCi0JCWVycigiZXJyb3IgJWQgb24gcmVxdWVzdCAweDE5IiwgLXIyKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiZXJyb3IgJWQgb24gcmVxdWVzdCAweDE5XG4iLCAtcjIpOwogCiAJcmV0dXJuIHIgPCAwID8gciA6IChyMiA8IDAgPyByMiA6IDApOwogfQpAQCAtMjI5LDggKzIyMSw4IEBACiAJY2FzZSBCMTE1MjAwOiByYXRlID0gIDExNTIwMDsgYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmF0ZSA9ICA5NjAwOwotCQllcnIoInVuc3VwcG9ydGVkIGJhdWRyYXRlIHJlcXVlc3QgMHgleCwiCi0JCSAgICAiIHVzaW5nIGRlZmF1bHQgb2YgQjk2MDAiLCBjZmxhZyk7CisJCWRldl9lcnIoY3MtPmRldiwgInVuc3VwcG9ydGVkIGJhdWRyYXRlIHJlcXVlc3QgMHgleCwiCisJCQkiIHVzaW5nIGRlZmF1bHQgb2YgQjk2MDBcbiIsIGNmbGFnKTsKIAl9CiAKIAl2YWwgPSAweDM4M2ZmZiAvIHJhdGUgKyAxOwpAQCAtMjU5LDcgKzI1MSw3IEBACiAJY2FzZSBDUzg6CiAJCXZhbCB8PSA4IDw8IDg7IGJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDgiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDhcbiIpOwogCQl2YWwgfD0gOCA8PCA4OwogCQlicmVhazsKIAl9CkBAIC0yNzcsNyArMjY5LDcgQEAKIAogI2Vsc2UKIHN0YXRpYyBpbnQgZ2lnYXNldF9zZXRfbW9kZW1fY3RybChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgb2xkX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld19zdGF0ZSkKKwkJCQkgIHVuc2lnbmVkIG5ld19zdGF0ZSkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTMwOSwxNSArMzAxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8vdm9pZCBzZW5kX2Fja190b19MTCh2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgd3JpdGVfbW9kZW0oc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwogc3RhdGljIGludCBzZW5kX2NiKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBzdHJ1Y3QgY21kYnVmX3QgKmNiKTsKIAogCi0vKiBIYW5kbGluZyBvZiBzZW5kIHF1ZXVlLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2tiIG9wZW5lZCwgcHV0IGRhdGEgdG8KLSAqIHRoZSB0cmFuc2ZlciBidWZmZXIgYnkgY2FsbGluZyAid3JpdGVfbW9kZW0iLiBPdGhlcndpc2UgdGFrZSBhIG5ldyBza2Igb3V0IG9mIHRoZSBxdWV1ZS4KLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIElTUiB2aWEgInRyYW5zbWl0X2NoYXJzIiAoVVNCOiBCLUNoYW5uZWwgQnVsayBjYWxsYmFjayBoYW5kbGVyCi0gKiB2aWEgaW1tZWRpYXRlIHRhc2sgcXVldWUpIG9yIGJ5IHdyaXRlYnVmX2Zyb21fTEwgaWYgdGhlIExMIHdhbnRzIHRvIHRyYW5zbWl0IGRhdGEuCisvKiBXcml0ZSB0YXNrbGV0IGhhbmRsZXI6IENvbnRpbnVlIHNlbmRpbmcgY3VycmVudCBza2IsIG9yIHNlbmQgY29tbWFuZCwgb3IKKyAqIHN0YXJ0IHNlbmRpbmcgYW4gc2tiIGZyb20gdGhlIHNlbmQgcXVldWUuCiAgKi8KIHN0YXRpYyB2b2lkIGdpZ2FzZXRfbW9kZW1fZmlsbCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC0zMjcsMTAgKzMxNiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGFnYWluOwogCi0JZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGwiKTsKKwlnaWdfZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGwiKTsKIAogCWlmIChhdG9taWNfcmVhZCgmY3MtPmh3LnVzYi0+YnVzeSkpIHsKLQkJZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGw6IGJ1c3kiKTsKKwkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsOiBidXN5Iik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM0MSwyNiArMzMwLDI3IEBACiAJCQljYiA9IGNzLT5jbWRidWY7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwogCQkJaWYgKGNiKSB7IC8qIGNvbW1hbmRzIHRvIHNlbmQ/ICovCi0JCQkJZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGw6IGNiIik7CisJCQkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsOiBjYiIpOwogCQkJCWlmIChzZW5kX2NiKGNzLCBjYikgPCAwKSB7Ci0JCQkJCWRiZyhERUJVR19PVVRQVVQsCi0JCQkJCSAgICAibW9kZW1fZmlsbDogc2VuZF9jYiBmYWlsZWQiKTsKLQkJCQkJYWdhaW4gPSAxOyAvKiBubyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCEgKi8KKwkJCQkJZ2lnX2RiZyhERUJVR19PVVRQVVQsCisJCQkJCQkibW9kZW1fZmlsbDogc2VuZF9jYiBmYWlsZWQiKTsKKwkJCQkJYWdhaW4gPSAxOyAvKiBubyBjYWxsYmFjayB3aWxsIGJlCisJCQkJCQkgICAgICBjYWxsZWQhICovCiAJCQkJfQogCQkJfSBlbHNlIHsgLyogc2ticyB0byBzZW5kPyAqLwogCQkJCWJjcy0+dHhfc2tiID0gc2tiX2RlcXVldWUoJmJjcy0+c3F1ZXVlKTsKIAkJCQlpZiAoYmNzLT50eF9za2IpCi0JCQkJCWRiZyhERUJVR19JTlRSLAotCQkJCQkgICAgIkRlcXVldWVkIHNrYiAoQWRyOiAlbHgpISIsCi0JCQkJCSAgICAodW5zaWduZWQgbG9uZykgYmNzLT50eF9za2IpOworCQkJCQlnaWdfZGJnKERFQlVHX0lOVFIsCisJCQkJCQkiRGVxdWV1ZWQgc2tiIChBZHI6ICVseCkhIiwKKwkJCQkJCSh1bnNpZ25lZCBsb25nKSBiY3MtPnR4X3NrYik7CiAJCQl9CiAJCX0KIAogCQlpZiAoYmNzLT50eF9za2IpIHsKLQkJCWRiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsOiB0eF9za2IiKTsKKwkJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogdHhfc2tiIik7CiAJCQlpZiAod3JpdGVfbW9kZW0oY3MpIDwgMCkgewotCQkJCWRiZyhERUJVR19PVVRQVVQsCi0JCQkJICAgICJtb2RlbV9maWxsOiB3cml0ZV9tb2RlbSBmYWlsZWQiKTsKKwkJCQlnaWdfZGJnKERFQlVHX09VVFBVVCwKKwkJCQkJIm1vZGVtX2ZpbGw6IHdyaXRlX21vZGVtIGZhaWxlZCIpOwogCQkJCS8vIEZJWE1FIHNob3VsZCB3ZSB0ZWxsIHRoZSBMTD8KIAkJCQlhZ2FpbiA9IDE7IC8qIG5vIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkISAqLwogCQkJfQpAQCAtMzcxLDg4ICszNjEsODUgQEAKIC8qKgogICoJZ2lnYXNldF9yZWFkX2ludF9jYWxsYmFjawogICoKLSAqICAgICAgSXQgaXMgY2FsbGVkIGlmIHRoZSBkYXRhIHdhcyByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UuIFRoaXMgaXMgYWxtb3N0IHNpbWlsaWFyIHRvCi0gKiAgICAgIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGluIHRoZSBzZXJpYWwgZGV2aWNlLgorICoJSXQgaXMgY2FsbGVkIGlmIHRoZSBkYXRhIHdhcyByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UuCiAgKi8KIHN0YXRpYyB2b2lkIGdpZ2FzZXRfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlzdHJ1Y3QgaW5idWZfdCAqaW5idWYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBpbmJ1Zi0+Y3M7CiAJaW50IHJlc3VibWl0ID0gMDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAl1bnNpZ25lZCBudW1ieXRlczsKIAl1bnNpZ25lZCBjaGFyICpzcmM7Ci0JLy91bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpbmJ1Zl90ICppbmJ1ZjsKLQotCUlGTlVMTFJFVCh1cmIpOwotCWluYnVmID0gKHN0cnVjdCBpbmJ1Zl90ICopIHVyYi0+Y29udGV4dDsKLQlJRk5VTExSRVQoaW5idWYpOwotCS8vc3Bpbl9sb2NrX2lycXNhdmUoJmluYnVmLT5sb2NrLCBmbGFncyk7Ci0JY3MgPSBpbmJ1Zi0+Y3M7Ci0JSUZOVUxMR09UTyhjcywgZXhpdCk7Ci0JSUZOVUxMR09UTyhjYXJkc3RhdGUsIGV4aXQpOwotCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZXJyKCIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOwotCQlnb3RvIGV4aXQ7Ci0JfQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXVyYi0+c3RhdHVzKSB7CisJCWlmICghY3MtPmNvbm5lY3RlZCkgeworCQkJZXJyKCIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCQlyZXR1cm47CisJCX0KKwogCQludW1ieXRlcyA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAogCQlpZiAobnVtYnl0ZXMpIHsKIAkJCXNyYyA9IGluYnVmLT5yY3ZidWY7CiAJCQlpZiAodW5saWtlbHkoKnNyYykpCi0JCQkJd2FybigiJXM6IFRoZXJlIHdhcyBubyBsZWFkaW5nIDAsIGJ1dCAweCUwMnghIiwKLQkJCQkgICAgIF9fZnVuY19fLCAodW5zaWduZWQpICpzcmMpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJICAgICIlczogVGhlcmUgd2FzIG5vIGxlYWRpbmcgMCwgYnV0IDB4JTAyeCFcbiIsCisJCQkJCSBfX2Z1bmNfXywgKHVuc2lnbmVkKSAqc3JjKTsKIAkJCSsrc3JjOyAvKiBza2lwIGxlYWRpbmcgMHgwMCAqLwogCQkJLS1udW1ieXRlczsKIAkJCWlmIChnaWdhc2V0X2ZpbGxfaW5idWYoaW5idWYsIHNyYywgbnVtYnl0ZXMpKSB7Ci0JCQkJZGJnKERFQlVHX0lOVFIsICIlcy0tPkJIIiwgX19mdW5jX18pOworCQkJCWdpZ19kYmcoREVCVUdfSU5UUiwgIiVzLS0+QkgiLCBfX2Z1bmNfXyk7CiAJCQkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChpbmJ1Zi0+Y3MpOwogCQkJfQogCQl9IGVsc2UKLQkJCWRiZyhERUJVR19JTlRSLCAiUmVjZWl2ZWQgemVybyBibG9jayBsZW5ndGgiKTsKKwkJCWdpZ19kYmcoREVCVUdfSU5UUiwgIlJlY2VpdmVkIHplcm8gYmxvY2sgbGVuZ3RoIik7CiAJCXJlc3VibWl0ID0gMTsKIAl9IGVsc2UgewogCQkvKiBUaGUgdXJiIG1pZ2h0IGhhdmUgYmVlbiBraWxsZWQuICovCi0JCWRiZyhERUJVR19BTlksICIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAotCQkgICAgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQpIC8qIG5vdCBraWxsZWQgKi8KKwkJZ2lnX2RiZyhERUJVR19BTlksICIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQpIHsgLyogbm90IGtpbGxlZCAqLworCQkJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCQkJZXJyKCIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCQkJcmV0dXJuOworCQkJfQogCQkJcmVzdWJtaXQgPSAxOworCQl9CiAJfQotZXhpdDoKLQkvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluYnVmLT5sb2NrLCBmbGFncyk7CisKIAlpZiAocmVzdWJtaXQpIHsKLQkJciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJciA9IGNzLT5jb25uZWN0ZWQgPyB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKSA6IC1FTk9ERVY7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWlmIChyKQotCQkJZXJyKCJlcnJvciAlZCB3aGVuIHJlc3VibWl0dGluZyB1cmIuIiwgLXIpOworCQkJZGV2X2Vycihjcy0+ZGV2LCAiZXJyb3IgJWQgd2hlbiByZXN1Ym1pdHRpbmcgdXJiLlxuIiwKKwkJCQktcik7CiAJfQogfQogCiAKLS8qIFRoaXMgY2FsbGJhY2sgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBkYXRhIHdhcyB0cmFuc21pdHRlZCB0byBhIEItQ2hhbm5lbC4KLSAqIFRoZXJlZm9yZSBpdCBoYXMgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc3RpbGwgZGF0YSB0byB0cmFuc21pdC4gVGhpcwotICogaGFwcGVucyBieSBjYWxsaW5nIG1vZGVtX2ZpbGwgdmlhIHRhc2sgcXVldWUuCi0gKgotICovCisvKiBUaGlzIGNhbGxiYWNrIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gZGF0YSB3YXMgdHJhbnNtaXR0ZWQgdG8gdGhlIGRldmljZS4gKi8KIHN0YXRpYyB2b2lkIGdpZ2FzZXRfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVQoY3MpOwotI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZXJyKCIlczpub3QgY29ubmVjdGVkIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCiAJaWYgKHVyYi0+c3RhdHVzKQotCQllcnIoImJ1bGsgdHJhbnNmZXIgZmFpbGVkIChzdGF0dXMgJWQpIiwgLXVyYi0+c3RhdHVzKTsgLyogVGhhdCdzIGFsbCB3ZSBjYW4gZG8uIENvbW11bmljYXRpb24gcHJvYmxlbXMKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgaGFuZGVsZWQgYnkgdGltZW91dHMgb3IgbmV0d29yayBwcm90b2NvbHMgKi8KKwkJZGV2X2Vycihjcy0+ZGV2LCAiYnVsayB0cmFuc2ZlciBmYWlsZWQgKHN0YXR1cyAlZClcbiIsCisJCQktdXJiLT5zdGF0dXMpOworCQkvKiBUaGF0J3MgYWxsIHdlIGNhbiBkby4gQ29tbXVuaWNhdGlvbiBwcm9ibGVtcworCQkgICBhcmUgaGFuZGxlZCBieSB0aW1lb3V0cyBvciBuZXR3b3JrIHByb3RvY29scy4gKi8KIAotCWF0b21pY19zZXQoJmNzLT5ody51c2ItPmJ1c3ksIDApOwotCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT53cml0ZV90YXNrbGV0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZXJyKCIlczogbm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQlhdG9taWNfc2V0KCZjcy0+aHcudXNiLT5idXN5LCAwKTsKKwkJdGFza2xldF9zY2hlZHVsZSgmY3MtPndyaXRlX3Rhc2tsZXQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHNlbmRfY2Ioc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHN0cnVjdCBjbWRidWZfdCAqY2IpCkBAIC00NjksOCArNDU2LDggQEAKIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5jbWRsb2NrLCBmbGFncyk7CiAJCQljcy0+Y21kYnl0ZXMgLT0gY3MtPmN1cmxlbjsKLQkJCWRiZyhERUJVR19PVVRQVVQsICJzZW5kX2NiOiBzZW50ICV1IGJ5dGVzLCAldSBsZWZ0IiwKLQkJCSAgICBjcy0+Y3VybGVuLCBjcy0+Y21kYnl0ZXMpOworCQkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJzZW5kX2NiOiBzZW50ICV1IGJ5dGVzLCAldSBsZWZ0IiwKKwkJCQljcy0+Y3VybGVuLCBjcy0+Y21kYnl0ZXMpOwogCQkJY3MtPmNtZGJ1ZiA9IGNiID0gY2ItPm5leHQ7CiAJCQlpZiAoY2IpIHsKIAkJCQljYi0+cHJldiA9IE5VTEw7CkBAIC00ODcsNTIgKzQ3NCw1MSBAQAogCQl9CiAJCWlmIChjYikgewogCQkJY291bnQgPSBtaW4oY2ItPmxlbiwgdWNzLT5idWxrX291dF9zaXplKTsKKwkJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAic2VuZF9jYjogc2VuZCAlZCBieXRlcyIsIGNvdW50KTsKKwogCQkJdXNiX2ZpbGxfYnVsa191cmIodWNzLT5idWxrX291dF91cmIsIHVjcy0+dWRldiwKLQkJCSAgICAgICAgICAgICAgICAgIHVzYl9zbmRidWxrcGlwZSh1Y3MtPnVkZXYsCi0JCQkgICAgICAgICAgICAgICAgICAgICB1Y3MtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmIDB4MGYpLAotCQkJICAgICAgICAgICAgICAgICAgY2ItPmJ1ZiArIGNiLT5vZmZzZXQsIGNvdW50LAotCQkJICAgICAgICAgICAgICAgICAgZ2lnYXNldF93cml0ZV9idWxrX2NhbGxiYWNrLCBjcyk7CisJCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKHVjcy0+dWRldiwKKwkJCQkJICAgICB1Y3MtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmIDB4MGYpLAorCQkJCQkgIGNiLT5idWYgKyBjYi0+b2Zmc2V0LCBjb3VudCwKKwkJCQkJICBnaWdhc2V0X3dyaXRlX2J1bGtfY2FsbGJhY2ssIGNzKTsKIAogCQkJY2ItPm9mZnNldCArPSBjb3VudDsKIAkJCWNiLT5sZW4gLT0gY291bnQ7CiAJCQlhdG9taWNfc2V0KCZ1Y3MtPmJ1c3ksIDEpOwotCQkJZGJnKERFQlVHX09VVFBVVCwgInNlbmRfY2I6IHNlbmQgJWQgYnl0ZXMiLCBjb3VudCk7CiAKLQkJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+YnVsa19vdXRfdXJiLCBTTEFCX0FUT01JQyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJCXN0YXR1cyA9IGNzLT5jb25uZWN0ZWQgPyB1c2Jfc3VibWl0X3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgU0xBQl9BVE9NSUMpIDogLUVOT0RFVjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisKIAkJCWlmIChzdGF0dXMpIHsKIAkJCQlhdG9taWNfc2V0KCZ1Y3MtPmJ1c3ksIDApOwotCQkJCWVycigiY291bGQgbm90IHN1Ym1pdCB1cmIgKGVycm9yICVkKS4iLAorCQkJCWVycigiY291bGQgbm90IHN1Ym1pdCB1cmIgKGVycm9yICVkKVxuIiwKIAkJCQkgICAgLXN0YXR1cyk7Ci0JCQkJY2ItPmxlbiA9IDA7IC8qIHNraXAgdXJiID0+IHJlbW92ZSBjYit3YWtldXAgaW4gbmV4dCBsb29wIGN5Y2xlICovCisJCQkJY2ItPmxlbiA9IDA7IC8qIHNraXAgdXJiID0+IHJlbW92ZSBjYit3YWtldXAKKwkJCQkJCWluIG5leHQgbG9vcCBjeWNsZSAqLwogCQkJfQogCQl9Ci0JfSB3aGlsZSAoY2IgJiYgc3RhdHVzKTsgLyogYmVpIEZlaGxlciBuYWVjaHN0ZXIgQmVmZWhsIC8vRklYTUU6IGlzdCBkYXMgT0s/ICovCisJfSB3aGlsZSAoY2IgJiYgc3RhdHVzKTsgLyogbmV4dCBjb21tYW5kIG9uIGVycm9yICovCiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKiBXcml0ZSBzdHJpbmcgaW50byB0cmFuc2J1ZiBhbmQgc2VuZCBpdCB0byBtb2RlbS4KLSAqLworLyogU2VuZCBjb21tYW5kIHRvIGRldmljZS4gKi8KIHN0YXRpYyBpbnQgZ2lnYXNldF93cml0ZV9jbWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgc3RydWN0IHRhc2tsZXRfc3RydWN0ICp3YWtlX3Rhc2tsZXQpCisJCQkgICAgIGludCBsZW4sIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KQogewogCXN0cnVjdCBjbWRidWZfdCAqY2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWdpZ2FzZXRfZGJnX2J1ZmZlcihhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEID8KLQkgICAgICAgICAgICAgICAgICAgICBERUJVR19UUkFOU0NNRCA6IERFQlVHX0xPQ0tDTUQsCi0JICAgICAgICAgICAgICAgICAgICJDTUQgVHJhbnNtaXQiLCBsZW4sIGJ1ZiwgMCk7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQllcnIoIiVzOiBub3QgY29ubmVjdGVkIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJCQkgICAgIERFQlVHX1RSQU5TQ01EIDogREVCVUdfTE9DS0NNRCwKKwkJCSAgICJDTUQgVHJhbnNtaXQiLCBsZW4sIGJ1Zik7CiAKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiAwOwogCiAJaWYgKCEoY2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kYnVmX3QpICsgbGVuLCBHRlBfQVRPTUlDKSkpIHsKLQkJZXJyKCIlczogb3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01NTQsNyArNTQwLDEwIEBACiAJY3MtPmxhc3RjbWRidWYgPSBjYjsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwogCi0JdGFza2xldF9zY2hlZHVsZSgmY3MtPndyaXRlX3Rhc2tsZXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWlmIChjcy0+Y29ubmVjdGVkKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+d3JpdGVfdGFza2xldCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC01NzgsMTEgKzU2NywxMiBAQAogc3RhdGljIGludCBnaWdhc2V0X2Jya2NoYXJzKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBjb25zdCB1bnNpZ25lZCBjaGFyIGJ1Zls2XSkKIHsKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9VTkRPQ1JFUQotCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19VU0JSRVEsICJicmtjaGFycyIsIDYsIGJ1ZiwgMCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjcy0+aHcudXNiLT51ZGV2OworCisJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX1VTQlJFUSwgImJya2NoYXJzIiwgNiwgYnVmKTsKIAltZW1jcHkoY3MtPmh3LnVzYi0+YmNoYXJzLCBidWYsIDYpOwotCXJldHVybiB1c2JfY29udHJvbF9tc2coY3MtPmh3LnVzYi0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShjcy0+aHcudXNiLT51ZGV2LCAwKSwgMHgxOSwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZidWYsIDYsIDIwMDApOworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDE5LCAweDQxLAorCQkJICAgICAgIDAsIDAsICZidWYsIDYsIDIwMDApOwogI2Vsc2UKIAlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgpAQCAtNjA0LDcgKzU5NCw2IEBACiAJaWYgKCFiY3MtPmh3LnVzYikKIAkJcmV0dXJuIDA7CiAKLQkvL2Jjcy0+aHcudXNiLT50cmFuc19mbGcgPSBSRUFEWV9UT19UUk5TTUlUOyAvKiBCLUNoYW5uZWwgcmVhZHkgdG8gdHJhbnNtaXQgKi8KIAlyZXR1cm4gMTsKIH0KIApAQCAtNjE0LDcgKzYwMyw2IEBACiAKIHN0YXRpYyB2b2lkIGdpZ2FzZXRfZnJlZWNzaHcoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JLy9GSVhNRQogCXRhc2tsZXRfa2lsbCgmY3MtPndyaXRlX3Rhc2tsZXQpOwogCWtmcmVlKGNzLT5ody51c2IpOwogfQpAQCAtNjM5LDMzICs2MjcsMjEgQEAKIAkvL3Vjcy0+dXJiX2NtZF9vdXQgPSBOVUxMOwogCXVjcy0+cmVhZF91cmIgPSBOVUxMOwogCXRhc2tsZXRfaW5pdCgmY3MtPndyaXRlX3Rhc2tsZXQsCi0JICAgICAgICAgICAgICZnaWdhc2V0X21vZGVtX2ZpbGwsICh1bnNpZ25lZCBsb25nKSBjcyk7CisJCSAgICAgJmdpZ2FzZXRfbW9kZW1fZmlsbCwgKHVuc2lnbmVkIGxvbmcpIGNzKTsKIAogCXJldHVybiAxOwogfQogCi0vKiBXcml0ZXMgdGhlIGRhdGEgb2YgdGhlIGN1cnJlbnQgb3BlbiBza2IgaW50byB0aGUgbW9kZW0uCi0gKiBXZSBoYXZlIHRvIHByb3RlY3QgYWdhaW5zdCBtdWx0aXBsZSBjYWxscyB1bnRpbCB0aGUKLSAqIGNhbGxiYWNrIGhhbmRsZXIgKCkgaXMgY2FsbGVkICwgZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2UKLSAqIGFyZSBqdXN0IGFsbG93ZWQgdG8gc2VuZCBkYXRhIG9uY2UgdG8gYW4gZW5kcG9pbnQuIFRoZXJlZm9yZQotICogd2UgdXNpbmcgInRyYW5zX2ZsZyIgdG8gc3luY2hvbml6ZSAuLi4KLSAqLworLyogU2VuZCBkYXRhIGZyb20gY3VycmVudCBza2IgdG8gdGhlIGRldmljZS4gKi8KIHN0YXRpYyBpbnQgd3JpdGVfbW9kZW0oc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAlpbnQgY291bnQ7CiAJc3RydWN0IGJjX3N0YXRlICpiY3MgPSAmY3MtPmJjc1swXTsgLyogb25seSBvbmUgY2hhbm5lbCAqLwogCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcudXNiOwotCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUVkFMKGJjcy0+dHhfc2tiLCAtRUlOVkFMKTsKLQotCWRiZyhERUJVR19XUklURSwgImxlbjogJWQuLi4iLCBiY3MtPnR4X3NrYi0+bGVuKTsKLQotCXJldCA9IC1FTk9ERVY7Ci0JSUZOVUxMR09UTyh1Y3MtPmJ1bGtfb3V0X2J1ZmZlciwgZXJyb3IpOwotCUlGTlVMTEdPVE8odWNzLT5idWxrX291dF91cmIsIGVycm9yKTsKLQlyZXQgPSAwOworCWdpZ19kYmcoREVCVUdfV1JJVEUsICJsZW46ICVkLi4uIiwgYmNzLT50eF9za2ItPmxlbik7CiAKIAlpZiAoIWJjcy0+dHhfc2tiLT5sZW4pIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYmNzLT50eF9za2IpOwpAQCAtNjc5LDQwICs2NTUsNDIgQEAKIAljb3VudCA9IG1pbihiY3MtPnR4X3NrYi0+bGVuLCAodW5zaWduZWQpIHVjcy0+YnVsa19vdXRfc2l6ZSk7CiAJbWVtY3B5KHVjcy0+YnVsa19vdXRfYnVmZmVyLCBiY3MtPnR4X3NrYi0+ZGF0YSwgY291bnQpOwogCXNrYl9wdWxsKGJjcy0+dHhfc2tiLCBjb3VudCk7Ci0KLQl1c2JfZmlsbF9idWxrX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgdWNzLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgIHVzYl9zbmRidWxrcGlwZSh1Y3MtPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjcy0+YnVsa19vdXRfZW5kcG9pbnRBZGRyICYgMHgwZiksCi0JICAgICAgICAgICAgICAgICAgdWNzLT5idWxrX291dF9idWZmZXIsIGNvdW50LAotCSAgICAgICAgICAgICAgICAgIGdpZ2FzZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgY3MpOwogCWF0b21pY19zZXQoJnVjcy0+YnVzeSwgMSk7Ci0JZGJnKERFQlVHX09VVFBVVCwgIndyaXRlX21vZGVtOiBzZW5kICVkIGJ5dGVzIiwgY291bnQpOworCWdpZ19kYmcoREVCVUdfT1VUUFVULCAid3JpdGVfbW9kZW06IHNlbmQgJWQgYnl0ZXMiLCBjb3VudCk7CiAKLQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgU0xBQl9BVE9NSUMpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWlmIChjcy0+Y29ubmVjdGVkKSB7CisJCXVzYl9maWxsX2J1bGtfdXJiKHVjcy0+YnVsa19vdXRfdXJiLCB1Y3MtPnVkZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUodWNzLT51ZGV2LAorCQkJCQkJICB1Y3MtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmIDB4MGYpLAorCQkJCSAgdWNzLT5idWxrX291dF9idWZmZXIsIGNvdW50LAorCQkJCSAgZ2lnYXNldF93cml0ZV9idWxrX2NhbGxiYWNrLCBjcyk7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+YnVsa19vdXRfdXJiLCBTTEFCX0FUT01JQyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwogCWlmIChyZXQpIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHVyYiAoZXJyb3IgJWQpLiIsIC1yZXQpOworCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgdXJiIChlcnJvciAlZClcbiIsIC1yZXQpOwogCQlhdG9taWNfc2V0KCZ1Y3MtPmJ1c3ksIDApOwogCX0KKwogCWlmICghYmNzLT50eF9za2ItPmxlbikgewogCQkvKiBza2Igc2VudCBjb21wbGV0ZWx5ICovCiAJCWdpZ2FzZXRfc2tiX3NlbnQoYmNzLCBiY3MtPnR4X3NrYik7IC8vRklYTUUgYWxzbywgd2hlbiByZXQ8MD8KIAotCQlkYmcoREVCVUdfSU5UUiwKLQkJICAgICJrZnJlZSBza2IgKEFkcjogJWx4KSEiLCAodW5zaWduZWQgbG9uZykgYmNzLT50eF9za2IpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJrZnJlZSBza2IgKEFkcjogJWx4KSEiLAorCQkJKHVuc2lnbmVkIGxvbmcpIGJjcy0+dHhfc2tiKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYmNzLT50eF9za2IpOwogCQliY3MtPnR4X3NrYiA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIHJldDsKLWVycm9yOgotCWRldl9rZnJlZV9za2JfYW55KGJjcy0+dHhfc2tiKTsKLQliY3MtPnR4X3NrYiA9IE5VTEw7Ci0JcmV0dXJuIHJldDsKLQogfQogCiBzdGF0aWMgaW50IGdpZ2FzZXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCWludCByZXR2YWw7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CkBAIC03MjAsMjIgKzY5OCwyMCBAQAogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RpZjsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IE5VTEw7CiAJc3RydWN0IHVzYl9jYXJkc3RhdGUgKnVjcyA9IE5VTEw7Ci0JLy9zdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZmFjZV9kZXNjOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0JLy9pc2RuX2N0cmwgY29tbWFuZDsKIAlpbnQgYnVmZmVyX3NpemU7CiAJaW50IGFsdDsKLQkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpbmZvKCIlczogQ2hlY2sgaWYgZGV2aWNlIG1hdGNoZXMgLi4gKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleCkiLAotCSAgICBfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJZ2lnX2RiZyhERUJVR19BTlksCisJCSIlczogQ2hlY2sgaWYgZGV2aWNlIG1hdGNoZXMgLi4gKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleCkiLAorCQlfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAKIAlyZXR2YWwgPSAtRU5PREVWOyAvL0ZJWE1FCiAKIAkvKiBTZWUgaWYgdGhlIGRldmljZSBvZmZlcmVkIHVzIG1hdGNoZXMgd2hhdCB3ZSBjYW4gYWNjZXB0ICovCi0JaWYgKChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yICAhPSBVU0JfTTEwNV9WRU5ET1JfSUQpKSB8fAotCSAgICAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgIT0gVVNCX00xMDVfUFJPRFVDVF9JRCkpKQorCWlmICgobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgICE9IFVTQl9NMTA1X1ZFTkRPUl9JRCkgfHwKKwkgICAgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfTTEwNV9QUk9EVUNUX0lEKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiB0aGlzIHN0YXJ0cyB0byBiZWNvbWUgYXNjaWkgYXJ0Li4uICovCkBAIC03NDQsNyArNzIwLDcgQEAKIAlpZm51bSA9IGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOyAvLyBGSVhNRSA/CiAKIAlpZiAoYWx0ICE9IDAgfHwgaWZudW0gIT0gMCkgewotCQl3YXJuKCJpZm51bSAlZCwgYWx0ICVkIiwgaWZudW0sIGFsdCk7CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJpZm51bSAlZCwgYWx0ICVkXG4iLCBpZm51bSwgYWx0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NTIsNDIgKzcyOCwyOSBAQAogCSAqCiAJICovCiAJaWYgKGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMjU1KSB7Ci0JCWluZm8oIiVzOiBEZXZpY2UgbWF0Y2hlZCwgYnV0IGlmYWNlX2Rlc2NbJWRdLT5iSW50ZXJmYWNlQ2xhc3M9PSVkICEiLAotCQkgICAgICAgX19mdW5jX18sIGlmbnVtLCBob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzKTsKKwkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJIiVzOiBEZXZpY2UgbWF0Y2hlZCBidXQgaWZhY2VfZGVzY1slZF0tPmJJbnRlcmZhY2VDbGFzcz09JWQhXG4iLAorCQkJIF9fZnVuY19fLCBpZm51bSwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIiVzOiBEZXZpY2UgbWF0Y2hlZCAuLi4gISIsIF9fZnVuY19fKTsKKwlkZXZfaW5mbygmdWRldi0+ZGV2LCAiJXM6IERldmljZSBtYXRjaGVkIC4uLiAhXG4iLCBfX2Z1bmNfXyk7CiAKIAljcyA9IGdpZ2FzZXRfZ2V0dW5hc3NpZ25lZGNzKGRyaXZlcik7CiAJaWYgKCFjcykgewotCQl3YXJuKCJObyBmcmVlIGNhcmRzdGF0ZSEiKTsKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIm5vIGZyZWUgY2FyZHN0YXRlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXVjcyA9IGNzLT5ody51c2I7CiAKLSNpZiAwCi0JaWYgKHVzYl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCB1ZGV2LT5jb25maWdbMF0uZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKSA8IDApIHsKLQkJd2Fybigic2V0X2NvbmZpZ3VyYXRpb24gZmFpbGVkIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCS8qIHNhdmUgb2ZmIGRldmljZSBzdHJ1Y3R1cmUgcHRycyBmb3IgbGF0ZXIgdXNlICovCisJdXNiX2dldF9kZXYodWRldik7CisJdWNzLT51ZGV2ID0gdWRldjsKKwl1Y3MtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwljcy0+ZGV2ID0gJmludGVyZmFjZS0+ZGV2OwogCi0KLQlpZiAodXNiX3NldF9pbnRlcmZhY2UodWRldiwgaWZudW0vKj09MCovLCBhbHQvKj09MCovKSA8IDApIHsKLQkJd2FybigidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkLCBkZXZpY2UgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQiLAotCQkgICAgIHVkZXYtPmRldm51bSwgaWZudW0sIGFsdCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotI2VuZGlmCi0KLQkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCi0JLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgKi8KLQkvKiBXZSB3aWxsIGdldCAyIGVuZHBvaW50czogT25lIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgKGJ1bGsgb3V0KSBhbmQgb25lIHRvCi0JICogcG9sbCBtZXNzYWdlcyBmcm9tIHRoZSBkZXZpY2UoaW50IGluKS4KLQkgKiBUaGVyZWZvcmUgd2Ugd2lsbCBoYXZlIGFuIGFsbW9zdCBzaW1pbGlhciBzaXR1YXRpb24gYXMgd2l0aCBvdXIgc2VyaWFsIHBvcnQgaGFuZGxlci4KLQkgKiBJZiBhbiBjb25uZWN0aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWQsIHdlIHdpbGwgaGF2ZSB0byBjcmVhdGUgZGF0YSBpbi9vdXQgcGlwZXMKLQkgKiBkeW5hbWljYWxseS4uLgotCSAqLworCS8qIHNhdmUgYWRkcmVzcyBvZiBjb250cm9sbGVyIHN0cnVjdHVyZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBjcyk7IC8vIGRldl9zZXRfZHJ2ZGF0YSgmaW50ZXJmYWNlLT5kZXYsIGNzKTsKIAogCWVuZHBvaW50ID0gJmhvc3RpZi0+ZW5kcG9pbnRbMF0uZGVzYzsKIApAQCAtNzk2LDE0ICs3NTksMTQgQEAKIAl1Y3MtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOwogCXVjcy0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1Y3MtPmJ1bGtfb3V0X2J1ZmZlcikgewotCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfb3V0X2J1ZmZlciIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXJcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXVjcy0+YnVsa19vdXRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBTTEFCX0tFUk5FTCk7CiAJaWYgKCF1Y3MtPmJ1bGtfb3V0X3VyYikgewotCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfb3V0X2J1ZmZlciIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF91cmJcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTgxMSwxMiArNzc0LDEwIEBACiAJZW5kcG9pbnQgPSAmaG9zdGlmLT5lbmRwb2ludFsxXS5kZXNjOwogCiAJYXRvbWljX3NldCgmdWNzLT5idXN5LCAwKTsKLQl1Y3MtPnVkZXYgPSB1ZGV2OwotCXVjcy0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwogCiAJdWNzLT5yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwogCWlmICghdWNzLT5yZWFkX3VyYikgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtODI1LDM4ICs3ODYsMzMgQEAKIAl1Y3MtPmludF9pbl9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAljcy0+aW5idWZbMF0ucmN2YnVmID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcy0+aW5idWZbMF0ucmN2YnVmKSB7Ci0JCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgcmN2YnVmIik7CisJCWRldl9lcnIoY3MtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIHJjdmJ1ZlxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQogCS8qIEZpbGwgdGhlIGludGVycnVwdCB1cmIgYW5kIHNlbmQgaXQgdG8gdGhlIGNvcmUgKi8KIAl1c2JfZmlsbF9pbnRfdXJiKHVjcy0+cmVhZF91cmIsIHVkZXYsCi0JICAgICAgICAgICAgICAgICB1c2JfcmN2aW50cGlwZSh1ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmKSwKLQkgICAgICAgICAgICAgICAgIGNzLT5pbmJ1ZlswXS5yY3ZidWYsIGJ1ZmZlcl9zaXplLAotCSAgICAgICAgICAgICAgICAgZ2lnYXNldF9yZWFkX2ludF9jYWxsYmFjaywKLQkgICAgICAgICAgICAgICAgIGNzLT5pbmJ1ZiArIDAsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsCisJCQkJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiksCisJCQkgY3MtPmluYnVmWzBdLnJjdmJ1ZiwgYnVmZmVyX3NpemUsCisJCQkgZ2lnYXNldF9yZWFkX2ludF9jYWxsYmFjaywKKwkJCSBjcy0+aW5idWYgKyAwLCBlbmRwb2ludC0+YkludGVydmFsKTsKIAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+cmVhZF91cmIsIFNMQUJfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiQ291bGQgbm90IHN1Ym1pdCBVUkIhIik7CisJCWRldl9lcnIoY3MtPmRldiwgIkNvdWxkIG5vdCBzdWJtaXQgVVJCIChlcnJvciAlZClcbiIsIC1yZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCS8qIHRlbGwgY29tbW9uIHBhcnQgdGhhdCB0aGUgZGV2aWNlIGlzIHJlYWR5ICovCiAJaWYgKHN0YXJ0bW9kZSA9PSBTTV9MT0NLRUQpCiAJCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX0xPQ0tFRCk7CisKIAlpZiAoIWdpZ2FzZXRfc3RhcnQoY3MpKSB7CiAJCXRhc2tsZXRfa2lsbCgmY3MtPndyaXRlX3Rhc2tsZXQpOwogCQlyZXR2YWwgPSAtRU5PREVWOyAvL0ZJWE1FCiAJCWdvdG8gZXJyb3I7CiAJfQotCi0JLyogc2F2ZSBhZGRyZXNzIG9mIGNvbnRyb2xsZXIgc3RydWN0dXJlICovCi0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGNzKTsKLQotCS8qIHNldCB1cCBkZXZpY2Ugc3lzZnMgKi8KLQlnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKGludGVyZmFjZSk7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgpAQCAtODY4LDQ4ICs4MjQsNDUgQEAKIAlrZnJlZShjcy0+aW5idWZbMF0ucmN2YnVmKTsKIAlpZiAodWNzLT5yZWFkX3VyYiAhPSBOVUxMKQogCQl1c2JfZnJlZV91cmIodWNzLT5yZWFkX3VyYik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCXVjcy0+cmVhZF91cmIgPSB1Y3MtPmJ1bGtfb3V0X3VyYiA9IE5VTEw7CiAJY3MtPmluYnVmWzBdLnJjdmJ1ZiA9IHVjcy0+YnVsa19vdXRfYnVmZmVyID0gTlVMTDsKKwl1c2JfcHV0X2Rldih1Y3MtPnVkZXYpOworCXVjcy0+dWRldiA9IE5VTEw7CisJdWNzLT5pbnRlcmZhY2UgPSBOVUxMOwogCWdpZ2FzZXRfdW5hc3NpZ24oY3MpOwogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qKgotICoJc2tlbF9kaXNjb25uZWN0Ci0gKi8KIHN0YXRpYyB2b2lkIGdpZ2FzZXRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1Y3M7CiAKIAljcyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQotCS8qIGNsZWFyIGRldmljZSBzeXNmcyAqLwotCWdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoaW50ZXJmYWNlKTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAl1Y3MgPSBjcy0+aHcudXNiOwogCXVzYl9raWxsX3VyYih1Y3MtPnJlYWRfdXJiKTsKLQkvL2luZm8oIkdpZ2FTZXQgVVNCIGRldmljZSAjJWQgd2lsbCBiZSBkaXNjb25uZWN0ZWQiLCBtaW5vcik7CiAKIAlnaWdhc2V0X3N0b3AoY3MpOwogCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCXRhc2tsZXRfa2lsbCgmY3MtPndyaXRlX3Rhc2tsZXQpOwogCi0JdXNiX2tpbGxfdXJiKHVjcy0+YnVsa19vdXRfdXJiKTsgIC8qIEZJWE1FOiBudXIsIHdlbm4gbm9ldGlnICovCi0JLy91c2Jfa2lsbF91cmIodWNzLT51cmJfY21kX291dCk7ICAvKiBGSVhNRTogbnVyLCB3ZW5uIG5vZXRpZyAqLworCXVzYl9raWxsX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYik7CS8qIEZJWE1FOiBvbmx5IGlmIGFjdGl2ZT8gKi8KIAogCWtmcmVlKHVjcy0+YnVsa19vdXRfYnVmZmVyKTsKIAlpZiAodWNzLT5idWxrX291dF91cmIgIT0gTlVMTCkKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+YnVsa19vdXRfdXJiKTsKLQkvL2lmKHVjcy0+dXJiX2NtZF9vdXQgIT0gTlVMTCkKLQkvLwl1c2JfZnJlZV91cmIodWNzLT51cmJfY21kX291dCk7CiAJa2ZyZWUoY3MtPmluYnVmWzBdLnJjdmJ1Zik7CiAJaWYgKHVjcy0+cmVhZF91cmIgIT0gTlVMTCkKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+cmVhZF91cmIpOwotCXVjcy0+cmVhZF91cmIgPSB1Y3MtPmJ1bGtfb3V0X3VyYi8qPXVjcy0+dXJiX2NtZF9vdXQqLz1OVUxMOworCXVjcy0+cmVhZF91cmIgPSB1Y3MtPmJ1bGtfb3V0X3VyYiA9IE5VTEw7CiAJY3MtPmluYnVmWzBdLnJjdmJ1ZiA9IHVjcy0+YnVsa19vdXRfYnVmZmVyID0gTlVMTDsKIAorCXVzYl9wdXRfZGV2KHVjcy0+dWRldik7CisJdWNzLT5pbnRlcmZhY2UgPSBOVUxMOworCXVjcy0+dWRldiA9IE5VTEw7CisJY3MtPmRldiA9IE5VTEw7CiAJZ2lnYXNldF91bmFzc2lnbihjcyk7CiB9CiAKQEAgLTk0Miw5ICs4OTUsOSBAQAogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZHJpdmVyIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KIAlpZiAoKGRyaXZlciA9IGdpZ2FzZXRfaW5pdGRyaXZlcihHSUdBU0VUX01JTk9SLCBHSUdBU0VUX01JTk9SUywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lHQVNFVF9NT0RVTEVOQU1FLCBHSUdBU0VUX0RFVk5BTUUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJR0FTRVRfREVWRlNOQU1FLCAmb3BzLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSElTX01PRFVMRSkpID09IE5VTEwpCisJCQkJICAgICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwgR0lHQVNFVF9ERVZOQU1FLAorCQkJCSAgICAgICBHSUdBU0VUX0RFVkZTTkFNRSwgJm9wcywKKwkJCQkgICAgICAgVEhJU19NT0RVTEUpKSA9PSBOVUxMKQogCQlnb3RvIGVycm9yOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KQEAgLTk4MSw4ICs5MzQsOCBAQAogc3RhdGljIHZvaWQgX19leGl0IHVzYl9naWdhc2V0X2V4aXQodm9pZCkKIHsKIAlnaWdhc2V0X2Jsb2NrZHJpdmVyKGRyaXZlcik7IC8qID0+IHByb2JlIHdpbGwgZmFpbAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogPT4gbm8gZ2lnYXNldF9zdGFydCBhbnkgbW9yZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJICAgICAgKiA9PiBubyBnaWdhc2V0X3N0YXJ0IGFueSBtb3JlCisJCQkJICAgICAgKi8KIAogCWdpZ2FzZXRfc2h1dGRvd24oY2FyZHN0YXRlKTsKIAkvKiBmcm9tIG5vdyBvbiwgbm8gaXNkbiBjYWxsYmFjayBzaG91bGQgYmUgcG9zc2libGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCmluZGV4IDJhMmIwM2YuLjdiYmZkODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwpAQCAtNTEsOCArNTEsOCBAQAogICAgaGFuZGxlci4KICovCiAKLXN0YXRpYyB2b2lkIGF2bWNzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIGF2bWNzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGF2bWNzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBhdm1jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogLyoKICAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQpAQCAtNjUsMTAgKzY1LDEwIEBACiAvKgogICAgQSBsaW5rZWQgbGlzdCBvZiAiaW5zdGFuY2VzIiBvZiB0aGUgc2tlbGV0b24gZGV2aWNlLiAgRWFjaCBhY3R1YWwKICAgIFBDTUNJQSBjYXJkIGNvcnJlc3BvbmRzIHRvIG9uZSBkZXZpY2UgaW5zdGFuY2UsIGFuZCBpcyBkZXNjcmliZWQKLSAgIGJ5IG9uZSBkZXZfbGlua190IHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KKyAgIGJ5IG9uZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCiAKICAgIFlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIGEgbGlua2VkIGxpc3QgZm9yIHRoaXMgLS0gZm9yIGV4YW1wbGUsIHRoZQotICAgbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2YgZGV2X2xpbmtfdCBwb2ludGVycywgd2hlcmUgbWlub3IKKyAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdCBwY21jaWFfZGV2aWNlIHBvaW50ZXJzLCB3aGVyZSBtaW5vcgogICAgZGV2aWNlIG51bWJlcnMgYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGluZGV4LgogKi8KIApAQCAtNzgsNyArNzgsNyBAQAogICAgZXhhbXBsZSwgZXRoZXJuZXQgY2FyZHMsIG1vZGVtcykuICBJbiBvdGhlciBjYXNlcywgdGhlcmUgbWF5IGJlCiAgICBtYW55IGFjdHVhbCBvciBsb2dpY2FsIGRldmljZXMgKFNDU0kgYWRhcHRlcnMsIG1lbW9yeSBjYXJkcyB3aXRoCiAgICBtdWx0aXBsZSBwYXJ0aXRpb25zKS4gIFRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZXMgbmVlZCB0byBiZSBrZXB0Ci0gICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIGRldl9saW5rX3QKKyAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAgIHN0cnVjdHVyZS4gIFdlIGFsbG9jYXRlIHRoZW0gaW4gdGhlIGNhcmQncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLAogICAgYmVjYXVzZSB0aGV5IGdlbmVyYWxseSBjYW4ndCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuCiAqLwpAQCAtOTksNTQgKzk5LDM4IEBACiAgICAgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBhdm1jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBhdm1jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsOwogCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLSAgICBsaW5rID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIWxpbmspCi0gICAgICAgIGdvdG8gZXJyOwotICAgIG1lbXNldChsaW5rLCAwLCBzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpKTsKLQogICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKyAgICBwX2Rldi0+aW8uTnVtUG9ydHMxID0gMTY7CisgICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisgICAgcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CiAKICAgICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKyAgICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKIAotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgICAKKyAgICBwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCiAgICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwotICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwotICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwotICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOworICAgIHBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CisgICAgcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworICAgIHBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKKyAgICBwX2Rldi0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwogICAgIGxvY2FsID0ga21hbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFsb2NhbCkKLSAgICAgICAgZ290byBlcnJfa2ZyZWU7CisgICAgICAgIGdvdG8gZXJyOwogICAgIG1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOwotICAgIGxpbmstPnByaXYgPSBsb2NhbDsKKyAgICBwX2Rldi0+cHJpdiA9IGxvY2FsOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKKyAgICByZXR1cm4gYXZtY3NfY29uZmlnKHBfZGV2KTsKIAotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIGF2bWNzX2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOwotCi0gZXJyX2tmcmVlOgotICAgIGtmcmVlKGxpbmspOwogIGVycjoKLSAgICByZXR1cm4gLUVJTlZBTDsKKyAgICByZXR1cm4gLUVOT01FTTsKIH0gLyogYXZtY3NfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTU4LDE1ICsxNDIsMTAgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF2bWNzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBhdm1jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQogCWF2bWNzX3JlbGVhc2UobGluayk7Ci0KLSAgICBrZnJlZShsaW5rLT5wcml2KTsKLSAgICBrZnJlZShsaW5rKTsKKwlrZnJlZShsaW5rLT5wcml2KTsKIH0gLyogYXZtY3NfZGV0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTc3LDcgKzE1Niw3IEBACiAgICAgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBnZXRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKIAkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKIHsKICAgICBpbnQgaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKTsKQEAgLTE4NSw3ICsxNjQsNyBAQAogICAgIHJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogfQogCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKIAkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKIHsKICAgICBpbnQgaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7CkBAIC0xOTMsNyArMTcyLDcgQEAKICAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBuZXh0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBuZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogCQkgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCBpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjAxLDkgKzE4MCw4IEBACiAgICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF2bWNzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBhdm1jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKQEAgLTIxMyw4ICsxOTEsNyBAQAogICAgIGNoYXIgZGV2bmFtZVsxMjhdOwogICAgIGludCBjYXJkdHlwZTsKICAgICBpbnQgKCphZGRjYXJkKSh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaXJxKTsKLSAgICAKLSAgICBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CisKICAgICBkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgLyoKQEAgLTIyMywyNSArMjAwLDIxIEBACiAgICAgKi8KICAgICBkbyB7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSk7CisJaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSBicmVhazsKIAl0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCWkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpOworCWkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSBicmVhazsKLQlpID0gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCWkgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIGJyZWFrOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogICAgIH0gd2hpbGUgKDApOwogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFBhcnNlVHVwbGUsIGkpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0JcmV0dXJuOworCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIGkpOworCXJldHVybiAtRU5PREVWOwogICAgIH0KLSAgICAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7CiAKICAgICBkbyB7CiAKQEAgLTI1Miw3ICsyMjUsNyBAQAogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7CiAKIAlkZXZuYW1lWzBdID0gMDsKLQlpZiggIWZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICYmIHBhcnNlLnZlcnNpb25fMS5ucyA+IDEgKSB7CisJaWYoICFmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgJiYgcGFyc2UudmVyc2lvbl8xLm5zID4gMSApIHsKIAkgICAgc3RybGNweShkZXZuYW1lLHBhcnNlLnZlcnNpb25fMS5zdHIgKyBwYXJzZS52ZXJzaW9uXzEub2ZzWzFdLCAKIAkJCXNpemVvZihkZXZuYW1lKSk7CiAJfQpAQCAtMjYzLDcgKzIzNiw3IEBACiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOyB0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CiAJdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCWkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewogCSAgICBpZiAoY2YtPmlvLm53aW4gPiAwKSB7CiAJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CkBAIC0yNzMsMzYgKzI0NiwzNiBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gImF2bV9jczogdGVzdGluZyBpL28gJSN4LSUjeFxuIiwKIAkJCWxpbmstPmlvLkJhc2VQb3J0MSwKIAkJICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxLTEpOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgZ290byBmb3VuZF9wb3J0OwogCSAgICB9Ci0JICAgIGkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCSAgICBpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJfQogCiBmb3VuZF9wb3J0OgogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCSAgICBicmVhazsKIAl9Ci0JCisKIAkvKgogCSAqIGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lCiAJICovCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOwotCSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOworCSAgICAvKiB1bmRvICovCisJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CiAJfQotCQorCiAJLyoKICAgICAgICAgICogY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0CiAJICAqLwotCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwotCSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CisJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CiAJfQogCkBAIC0zMzEsMTMgKzMwNCwxMiBAQAogCiAgICAgZGV2LT5ub2RlLm1ham9yID0gNjQ7CiAgICAgZGV2LT5ub2RlLm1pbm9yID0gMDsKLSAgICBsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOwotICAgIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisgICAgbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCiAgICAgLyogSWYgYW55IHN0ZXAgZmFpbGVkLCByZWxlYXNlIGFueSBwYXJ0aWFsbHkgY29uZmlndXJlZCBzdGF0ZSAqLwogICAgIGlmIChpICE9IDApIHsKIAlhdm1jc19yZWxlYXNlKGxpbmspOwotCXJldHVybjsKKwlyZXR1cm4gLUVOT0RFVjsKICAgICB9CiAKIApAQCAtMzUxLDkgKzMyMywxMCBAQAogICAgICAgICBwcmludGsoS0VSTl9FUlIgImF2bV9jczogZmFpbGVkIHRvIGFkZCBBVk0tJXMtQ29udHJvbGxlciBhdCBpL28gJSN4LCBpcnEgJWRcbiIsCiAJCWRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwogCWF2bWNzX3JlbGVhc2UobGluayk7Ci0JcmV0dXJuOworCXJldHVybiAtRU5PREVWOwogICAgIH0KICAgICBkZXYtPm5vZGUubWlub3IgPSBpOworICAgIHJldHVybiAwOwogCiB9IC8qIGF2bWNzX2NvbmZpZyAqLwogCkBAIC0zNjUsNTYgKzMzOCwxMiBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF2bWNzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGF2bWNzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgYjFwY21jaWFfZGVsY2FyZChsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7Ci0KLSAgICAvKiBVbmxpbmsgdGhlIGRldmljZSBjaGFpbiAqLwotICAgIGxpbmstPmRldiA9IE5VTEw7Ci0gICAgCi0gICAgLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJYjFwY21jaWFfZGVsY2FyZChsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfSAvKiBhdm1jc19yZWxlYXNlICovCiAKLXN0YXRpYyBpbnQgYXZtY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF2bWNzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgVGhlIGNhcmQgc3RhdHVzIGV2ZW50IGhhbmRsZXIuICBNb3N0bHksIHRoaXMgc2NoZWR1bGVzIG90aGVyCi0gICAgc3R1ZmYgdG8gcnVuIGFmdGVyIGFuIGV2ZW50IGlzIHJlY2VpdmVkLiAgQSBDQVJEX1JFTU9WQUwgZXZlbnQKLSAgICBhbHNvIHNldHMgc29tZSBmbGFncyB0byBkaXNjb3VyYWdlIHRoZSBuZXQgZHJpdmVycyBmcm9tIHRyeWluZwotICAgIHRvIHRhbGsgdG8gdGhlIGNhcmQgYW55IG1vcmUuCi0KLSAgICBXaGVuIGEgQ0FSRF9SRU1PVkFMIGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBpbW1lZGlhdGVseSBzZXQgYSBmbGFnCi0gICAgdG8gYmxvY2sgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZGV2aWNlLiAgQWxsIHRoZSBmdW5jdGlvbnMgdGhhdAotICAgIGFjdHVhbGx5IGFjY2VzcyB0aGUgZGV2aWNlIHNob3VsZCBjaGVjayB0aGlzIGZsYWcgdG8gbWFrZSBzdXJlCi0gICAgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudC4KLSAgICAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBhdm1jc19pZHNbXSA9IHsKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVZNIiwgIklTRE4tQ29udHJvbGxlciBCMSIsIDB4OTVkNDIwMDgsIDB4ODQ1ZGMzMzUpLApAQCAtNDI5LDExICszNTgsOSBAQAogCS5kcnYJPSB7CiAJCS5uYW1lCT0gImF2bV9jcyIsCiAJfSwKLQkucHJvYmUgPSBhdm1jc19hdHRhY2gsCisJLnByb2JlID0gYXZtY3NfcHJvYmUsCiAJLnJlbW92ZQk9IGF2bWNzX2RldGFjaCwKIAkuaWRfdGFibGUgPSBhdm1jc19pZHMsCi0JLnN1c3BlbmQ9IGF2bWNzX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGF2bWNzX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF2bWNzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKaW5kZXggOTY5ZGE0MC4uYWMyOGUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKQEAgLTY3LDggKzY3LDggQEAKICAgIGhhbmRsZXIuCiAqLwogCi1zdGF0aWMgdm9pZCBhdm1hMWNzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIGF2bWExY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgYXZtYTFjc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYXZtYTFjc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogLyoKICAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQpAQCAtODIsMTAgKzgyLDEwIEBACiAvKgogICAgQSBsaW5rZWQgbGlzdCBvZiAiaW5zdGFuY2VzIiBvZiB0aGUgc2tlbGV0b24gZGV2aWNlLiAgRWFjaCBhY3R1YWwKICAgIFBDTUNJQSBjYXJkIGNvcnJlc3BvbmRzIHRvIG9uZSBkZXZpY2UgaW5zdGFuY2UsIGFuZCBpcyBkZXNjcmliZWQKLSAgIGJ5IG9uZSBkZXZfbGlua190IHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KKyAgIGJ5IG9uZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCiAKICAgIFlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIGEgbGlua2VkIGxpc3QgZm9yIHRoaXMgLS0gZm9yIGV4YW1wbGUsIHRoZQotICAgbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2YgZGV2X2xpbmtfdCBwb2ludGVycywgd2hlcmUgbWlub3IKKyAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdCBwY21jaWFfZGV2aWNlIHBvaW50ZXJzLCB3aGVyZSBtaW5vcgogICAgZGV2aWNlIG51bWJlcnMgYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGluZGV4LgogKi8KIApAQCAtOTUsNyArOTUsNyBAQAogICAgZXhhbXBsZSwgZXRoZXJuZXQgY2FyZHMsIG1vZGVtcykuICBJbiBvdGhlciBjYXNlcywgdGhlcmUgbWF5IGJlCiAgICBtYW55IGFjdHVhbCBvciBsb2dpY2FsIGRldmljZXMgKFNDU0kgYWRhcHRlcnMsIG1lbW9yeSBjYXJkcyB3aXRoCiAgICBtdWx0aXBsZSBwYXJ0aXRpb25zKS4gIFRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZXMgbmVlZCB0byBiZSBrZXB0Ci0gICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIGRldl9saW5rX3QKKyAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAgIHN0cnVjdHVyZS4gIFdlIGFsbG9jYXRlIHRoZW0gaW4gdGhlIGNhcmQncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLAogICAgYmVjYXVzZSB0aGV5IGdlbmVyYWxseSBjYW4ndCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuCiAqLwpAQCAtMTE2LDU1ICsxMTYsNDAgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGF2bWExY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYXZtYTFjc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsOwogCiAgICAgREVCVUcoMCwgImF2bWExY3NfYXR0YWNoKClcbiIpOwogCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLSAgICBsaW5rID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIWxpbmspCi0JcmV0dXJuIC1FTk9NRU07Ci0gICAgbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOwotCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KICAgICBsb2NhbCA9IGttYWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwotICAgIGlmICghbG9jYWwpIHsKLQlrZnJlZShsaW5rKTsKKyAgICBpZiAoIWxvY2FsKQogCXJldHVybiAtRU5PTUVNOwotICAgIH0KKwogICAgIG1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOwotICAgIGxpbmstPnByaXYgPSBsb2NhbDsKKyAgICBwX2Rldi0+cHJpdiA9IGxvY2FsOwogCiAgICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nICovCi0gICAgbGluay0+aW8uTnVtUG9ydHMxID0gMTY7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSAxNjsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDU7CisgICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDE2OworICAgIHBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworICAgIHBfZGV2LT5pby5OdW1Qb3J0czIgPSAxNjsKKyAgICBwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisgICAgcF9kZXYtPmlvLklPQWRkckxpbmVzID0gNTsKIAogICAgIC8qIEludGVycnVwdCBzZXR1cCAqLwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CisgICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOwogCi0gICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworICAgIHBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAKICAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCi0gICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7Ci0gICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87Ci0gICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7Ci0gICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CisgICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKyAgICBwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisgICAgcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggPSAxOworICAgIHBfZGV2LT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBhdm1hMWNzX2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBhdm1hMWNzX2NvbmZpZyhwX2Rldik7CiB9IC8qIGF2bWExY3NfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTc2LDE3ICsxNjEsMTEgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF2bWExY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGF2bWExY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotCi0gICAgREVCVUcoMCwgImF2bWExY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKLQotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JICAgIGF2bWExY3NfcmVsZWFzZShsaW5rKTsKLQotICAgIGtmcmVlKGxpbmstPnByaXYpOwotICAgIGtmcmVlKGxpbmspOworCURFQlVHKDAsICJhdm1hMWNzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJYXZtYTFjc19yZWxlYXNlKGxpbmspOworCWtmcmVlKGxpbmstPnByaXYpOwogfSAvKiBhdm1hMWNzX2RldGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE5Nyw3ICsxNzYsNyBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBnZXRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAJCSAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7CkBAIC0yMDUsNyArMTg0LDcgQEAKICAgICByZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBmaXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAJCSAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjEzLDcgKzE5Miw3IEBACiAgICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKIAkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKIHsKICAgICBpbnQgaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKQEAgLTIyMSw5ICsyMDAsOCBAQAogICAgIHJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogfQogCi1zdGF0aWMgdm9pZCBhdm1hMWNzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBhdm1hMWNzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlOwogICAgIHR1cGxlX3QgdHVwbGU7CiAgICAgY2lzcGFyc2VfdCBwYXJzZTsKICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwpAQCAtMjMzLDggKzIxMSw3IEBACiAgICAgY2hhciBkZXZuYW1lWzEyOF07CiAgICAgSXNkbkNhcmRfdAlpY2FyZDsKICAgICBpbnQgYnVzeSA9IDA7Ci0gICAgCi0gICAgaGFuZGxlID0gbGluay0+aGFuZGxlOworCiAgICAgZGV2ID0gbGluay0+cHJpdjsKIAogICAgIERFQlVHKDAsICJhdm1hMWNzX2NvbmZpZygweCVwKVxuIiwgbGluayk7CkBAIC0yNDUsMjUgKzIyMiwyMSBAQAogICAgICovCiAgICAgZG8gewogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpOworCWkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKTsKKwlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0JaSA9IHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwlpID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSBicmVhazsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICB9IHdoaWxlICgwKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBQYXJzZVR1cGxlLCBpKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCXJldHVybjsKKwljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCBpKTsKKwlyZXR1cm4gLUVOT0RFVjsKICAgICB9Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwogCiAgICAgZG8gewogCkBAIC0yNzQsNyArMjQ3LDcgQEAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwogCiAJZGV2bmFtZVswXSA9IDA7Ci0JaWYoICFmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAmJiBwYXJzZS52ZXJzaW9uXzEubnMgPiAxICkgeworCWlmKCAhZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICYmIHBhcnNlLnZlcnNpb25fMS5ucyA+IDEgKSB7CiAJICAgIHN0cmxjcHkoZGV2bmFtZSxwYXJzZS52ZXJzaW9uXzEuc3RyICsgcGFyc2UudmVyc2lvbl8xLm9mc1sxXSwgCiAJCQlzaXplb2YoZGV2bmFtZSkpOwogCX0KQEAgLTI4NSw3ICsyNTgsNyBAQAogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCXdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKIAkgICAgaWYgKGNmLT5pby5ud2luID4gMCkgewogCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwpAQCAtMjk1LDM2ICsyNjgsMzYgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYXZtYTFfY3M6IHRlc3RpbmcgaS9vICUjeC0lI3hcbiIsCiAJCQlsaW5rLT5pby5CYXNlUG9ydDEsCiAJCQlsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7Ci0JCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQlpZiAoaSA9PSBDU19TVUNDRVNTKSBnb3RvIGZvdW5kX3BvcnQ7CiAJICAgIH0KLQkgICAgaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJICAgIGkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl9CiAKIGZvdW5kX3BvcnQ6CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJICAgIGJyZWFrOwogCX0KIAkKIAkvKgogCSAqIGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lCiAJICovCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOwotCSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOworCSAgICAvKiB1bmRvICovCisJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CiAJfQotCQorCiAJLyoKIAkgKiBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQKIAkgKi8KLQlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKLQkgICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOworCSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJICAgIGJyZWFrOwogCX0KIApAQCAtMzM2LDEzICszMDksMTIgQEAKICAgICBzdHJjcHkoZGV2LT5ub2RlLmRldl9uYW1lLCAiQTEiKTsKICAgICBkZXYtPm5vZGUubWFqb3IgPSA0NTsKICAgICBkZXYtPm5vZGUubWlub3IgPSAwOwotICAgIGxpbmstPmRldiA9ICZkZXYtPm5vZGU7Ci0gICAgCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CisKICAgICAvKiBJZiBhbnkgc3RlcCBmYWlsZWQsIHJlbGVhc2UgYW55IHBhcnRpYWxseSBjb25maWd1cmVkIHN0YXRlICovCiAgICAgaWYgKGkgIT0gMCkgewogCWF2bWExY3NfcmVsZWFzZShsaW5rKTsKLQlyZXR1cm47CisJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogCiAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJhdm1hMV9jczogY2hlY2tpbmcgYXQgaS9vICUjeCwgaXJxICVkXG4iLApAQCAtMzU3LDEwICszMjksMTEgQEAKICAgICBpZiAoaSA8IDApIHsKICAgICAJcHJpbnRrKEtFUk5fRVJSICJhdm1hMV9jczogZmFpbGVkIHRvIGluaXRpYWxpemUgQVZNIEExIFBDTUNJQSAlZCBhdCBpL28gJSN4XG4iLCBpLCBsaW5rLT5pby5CYXNlUG9ydDEpOwogCWF2bWExY3NfcmVsZWFzZShsaW5rKTsKLQlyZXR1cm47CisJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogICAgIGRldi0+bm9kZS5taW5vciA9IGk7CiAKKyAgICByZXR1cm4gMDsKIH0gLyogYXZtYTFjc19jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNzEsNDcgKzM0NCwxOCBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF2bWExY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgYXZtYTFjc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OwogCi0gICAgREVCVUcoMCwgImF2bWExY3NfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJREVCVUcoMCwgImF2bWExY3NfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKLSAgICAvKiBubyB1bnJlZ2lzdGVyIGZ1bmN0aW9uIHdpdGggaGlzYXggKi8KLSAgICBIaVNheF9jbG9zZWNhcmQobG9jYWwtPm5vZGUubWlub3IpOworCS8qIG5vdyB1bnJlZ2lzdGVyIGZ1bmN0aW9uIHdpdGggaGlzYXggKi8KKwlIaVNheF9jbG9zZWNhcmQobG9jYWwtPm5vZGUubWlub3IpOwogCi0gICAgLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLSAgICBsaW5rLT5kZXYgPSBOVUxMOwotICAgIAotICAgIC8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0gLyogYXZtYTFjc19yZWxlYXNlICovCiAKLXN0YXRpYyBpbnQgYXZtYTFjc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXZtYTFjc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQotCXJldHVybiAwOwotfQotCiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBhdm1hMWNzX2lkc1tdID0gewogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBVk0iLCAiSVNETiBBIiwgMHg5NWQ0MjAwOCwgMHhhZGM5ZDRiYiksCkBAIC00MjUsMTMgKzM2OSwxMSBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJhdm1hMV9jcyIsCiAJfSwKLQkucHJvYmUJCT0gYXZtYTFjc19hdHRhY2gsCisJLnByb2JlCQk9IGF2bWExY3NfcHJvYmUsCiAJLnJlbW92ZQkJPSBhdm1hMWNzX2RldGFjaCwKIAkuaWRfdGFibGUJPSBhdm1hMWNzX2lkcywKLQkuc3VzcGVuZAk9IGF2bWExY3Nfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGF2bWExY3NfcmVzdW1lLAogfTsKLSAKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXZtYTFfY3Modm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCmluZGV4IDA2MmZiOGYuLmUxOGU3NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYwpAQCAtOTQsOCArOTQsOCBAQAogICAgaGFuZGxlci4KICovCiAKLXN0YXRpYyB2b2lkIGVsc2FfY3NfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgZWxzYV9jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBlbHNhX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBlbHNhX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiAvKgogICAgVGhlIGF0dGFjaCgpIGFuZCBkZXRhY2goKSBlbnRyeSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGFuZCBkZXN0cm95CkBAIC0xMTEsNyArMTExLDcgQEAKICAgIGV4YW1wbGUsIGV0aGVybmV0IGNhcmRzLCBtb2RlbXMpLiAgSW4gb3RoZXIgY2FzZXMsIHRoZXJlIG1heSBiZQogICAgbWFueSBhY3R1YWwgb3IgbG9naWNhbCBkZXZpY2VzIChTQ1NJIGFkYXB0ZXJzLCBtZW1vcnkgY2FyZHMgd2l0aAogICAgbXVsdGlwbGUgcGFydGl0aW9ucykuICBUaGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUga2VwdAotICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBkZXZfbGlua190CisgICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIHN0cnVjdCBwY21jaWFfZGV2aWNlCiAgICBzdHJ1Y3R1cmUuICBXZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBjYXJkJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwKICAgIGJlY2F1c2UgdGhleSBnZW5lcmFsbHkgc2hvdWxkbid0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS4KICAgIEluIHRoaXMgY2FzZSwgd2UgYWxzbyBwcm92aWRlIGEgZmxhZyB0byBpbmRpY2F0ZSBpZiBhIGRldmljZSBpcwpAQCAtMTIxLDcgKzEyMSw3IEBACiAqLwogCiB0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgewotICAgIGRldl9saW5rX3QgICAgICAgICAgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdCAgICAgICAgICBub2RlOwogICAgIGludCAgICAgICAgICAgICAgICAgYnVzeTsKICAgICBpbnQJCQljYXJkbnI7CkBAIC0xMzksOSArMTM5LDggQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZWxzYV9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBlbHNhX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbDsKIAogICAgIERFQlVHKDAsICJlbHNhX2NzX2F0dGFjaCgpXG4iKTsKQEAgLTE1MCw4ICsxNDksMTEgQEAKICAgICBsb2NhbCA9IGttYWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogICAgIGlmICghbG9jYWwpIHJldHVybiAtRU5PTUVNOwogICAgIG1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOworCisgICAgbG9jYWwtPnBfZGV2ID0gbGluazsKKyAgICBsaW5rLT5wcml2ID0gbG9jYWw7CisKICAgICBsb2NhbC0+Y2FyZG5yID0gLTE7Ci0gICAgbGluayA9ICZsb2NhbC0+bGluazsgbGluay0+cHJpdiA9IGxvY2FsOwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKQEAgLTE3MCwxNiArMTcyLDkgQEAKICAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDM7CiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBlbHNhX2NzX2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBlbHNhX2NzX2NvbmZpZyhsaW5rKTsKIH0gLyogZWxzYV9jc19hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xOTEsMjAgKzE4NiwxNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgZWxzYV9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgZWxzYV9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0gICAgbG9jYWxfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKKwlsb2NhbF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0gICAgREVCVUcoMCwgImVsc2FfY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlERUJVRygwLCAiZWxzYV9jc19kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCSAgICBpbmZvLT5idXN5ID0gMTsKLQkgICAgZWxzYV9jc19yZWxlYXNlKGxpbmspOwotICAgIH0KKwlpbmZvLT5idXN5ID0gMTsKKwllbHNhX2NzX3JlbGVhc2UobGluayk7CiAKLSAgICBrZnJlZShpbmZvKTsKLQorCWtmcmVlKGluZm8pOwogfSAvKiBlbHNhX2NzX2RldGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIxNCw3ICsyMDUsNyBAQAogICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IGdldF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7CkBAIC0yMjIsNyArMjEzLDcgQEAKICAgICByZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBmaXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICBjaXNwYXJzZV90ICpwYXJzZSkKIHsKICAgICBpbnQgaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7CkBAIC0yMzAsNyArMjIxLDcgQEAKICAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBuZXh0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBuZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSk7CkBAIC0yMzgsOSArMjI5LDggQEAKICAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIHZvaWQgZWxzYV9jc19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgZWxzYV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgbG9jYWxfaW5mb190ICpkZXY7CkBAIC0yNTAsNyArMjQwLDYgQEAKICAgICBJc2RuQ2FyZF90IGljYXJkOwogCiAgICAgREVCVUcoMCwgImVsc2FfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKLSAgICBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgZGV2ID0gbGluay0+cHJpdjsKIAogICAgIC8qCkBAIC0yNjIsNyArMjUxLDcgQEAKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIGkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKyAgICBpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKICAgICAgICAgbGFzdF9mbiA9IFBhcnNlVHVwbGU7CiAJZ290byBjc19mYWlsZWQ7CkBAIC0yNzAsMzIgKzI1OSwyOSBAQAogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotICAgIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gICAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogICAgIHR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOyB0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAgICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewogICAgICAgICBpZiAoIChjZi0+aW8ubndpbiA+IDApICYmIGNmLT5pby53aW5bMF0uYmFzZSkgewogICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7CiAgICAgICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwogICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotICAgICAgICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKyAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgICAgICAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk3IG1vZGVsKVxuIik7CiAgICAgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKICAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gMHgyZjA7IGogPiAweDEwMDsgaiAtPSAweDEwKSB7CiAgICAgICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBqOwotICAgICAgICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKyAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgICAgICAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworICAgICAgICBpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAgICAgfQogCiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewpAQCAtMzAzLDE0ICsyODksMTQgQEAKIAlnb3RvIGNzX2ZhaWxlZDsKICAgICB9CiAKLSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CiAgICAgICAgIGxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7CiAJbGFzdF9mbiA9IFJlcXVlc3RJUlE7CiAgICAgICAgIGdvdG8gY3NfZmFpbGVkOwogICAgIH0KIAotICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CiAgICAgICBsYXN0X2ZuID0gUmVxdWVzdENvbmZpZ3VyYXRpb247CiAgICAgICBnb3RvIGNzX2ZhaWxlZDsKQEAgLTMyMSwxNCArMzA3LDExIEBACiAgICAgc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJlbHNhIik7CiAgICAgZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMHgwOwogCi0gICAgbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CiAKICAgICAvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKLSAgICAgICAgICAgZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4LAotICAgICAgICAgICBsaW5rLT5jb25mLlZjYy8xMCwgbGluay0+Y29uZi5WY2MlMTApOwotICAgIGlmIChsaW5rLT5jb25mLlZwcDEpCi0gICAgICAgIHByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcDEvMTAsIGxpbmstPmNvbmYuVnBwMSUxMCk7CisgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeDogIiwKKyAgICAgICAgICAgZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKICAgICBpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogICAgICAgICBwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKICAgICBpZiAobGluay0+aW8uTnVtUG9ydHMxKQpAQCAtMzM5LDggKzMyMiw2IEBACiAgICAgICAgICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOwogICAgIHByaW50aygiXG4iKTsKIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0KICAgICBpY2FyZC5wYXJhWzBdID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGljYXJkLnBhcmFbMV0gPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAgICAgaWNhcmQucHJvdG9jb2wgPSBwcm90b2NvbDsKQEAgLTM1NCwxMCArMzM1LDExIEBACiAgICAgfSBlbHNlCiAgICAgCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+Y2FyZG5yID0gaTsKIAotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGkpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGkpOwogICAgIGVsc2FfY3NfcmVsZWFzZShsaW5rKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogZWxzYV9jc19jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNjgsNyArMzUwLDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGVsc2FfY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgZWxzYV9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OwogCkBAIC0zODAsMzkgKzM2MiwyMyBAQAogCSAgICBIaVNheF9jbG9zZWNhcmQobG9jYWwtPmNhcmRucik7CiAJfQogICAgIH0KLSAgICAvKiBVbmxpbmsgdGhlIGRldmljZSBjaGFpbiAqLwotICAgIGxpbmstPmRldiA9IE5VTEw7CiAKLSAgICAvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0gICAgaWYgKGxpbmstPndpbikKLSAgICAgICAgcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKyAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9IC8qIGVsc2FfY3NfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50IGVsc2Ffc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGVsc2Ffc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKICAgICAgICAgZGV2LT5idXN5ID0gMTsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlbHNhX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGVsc2FfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwogICAgICAgICBkZXYtPmJ1c3kgPSAwOwogCiAJcmV0dXJuIDA7CkBAIC00MzAsNyArMzk2LDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiZWxzYV9jcyIsCiAJfSwKLQkucHJvYmUJCT0gZWxzYV9jc19hdHRhY2gsCisJLnByb2JlCQk9IGVsc2FfY3NfcHJvYmUsCiAJLnJlbW92ZQkJPSBlbHNhX2NzX2RldGFjaCwKIAkuaWRfdGFibGUJPSBlbHNhX2lkcywKIAkuc3VzcGVuZAk9IGVsc2Ffc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwppbmRleCA2ZjUyMTNhLi45YmIxOGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCkBAIC05NSw4ICs5NSw4IEBACiAgICBldmVudCBoYW5kbGVyLiAKICovCiAKLXN0YXRpYyB2b2lkIHNlZGxiYXVlcl9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBzZWRsYmF1ZXJfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgc2VkbGJhdWVyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBzZWRsYmF1ZXJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIC8qCiAgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKQEAgLTExOSw3ICsxMTksNyBAQAogICAgZXhhbXBsZSwgZXRoZXJuZXQgY2FyZHMsIG1vZGVtcykuICBJbiBvdGhlciBjYXNlcywgdGhlcmUgbWF5IGJlCiAgICBtYW55IGFjdHVhbCBvciBsb2dpY2FsIGRldmljZXMgKFNDU0kgYWRhcHRlcnMsIG1lbW9yeSBjYXJkcyB3aXRoCiAgICBtdWx0aXBsZSBwYXJ0aXRpb25zKS4gIFRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZXMgbmVlZCB0byBiZSBrZXB0Ci0gICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIGRldl9saW5rX3QKKyAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAgIHN0cnVjdHVyZS4gIFdlIGFsbG9jYXRlIHRoZW0gaW4gdGhlIGNhcmQncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLAogICAgYmVjYXVzZSB0aGV5IGdlbmVyYWxseSBzaG91bGRuJ3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LgogCkBAIC0xMzAsNyArMTMwLDcgQEAKICovCiAgICAKIHR5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7Ci0gICAgZGV2X2xpbmtfdAkJbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdAkJbm9kZTsKICAgICBpbnQJCQlzdG9wOwogICAgIGludAkJCWNhcmRucjsKQEAgLTE0OCwxMSArMTQ4LDEwIEBACiAgICAgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBzZWRsYmF1ZXJfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc2VkbGJhdWVyX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGxvY2FsX2luZm9fdCAqbG9jYWw7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKLSAgICAKKwogICAgIERFQlVHKDAsICJzZWRsYmF1ZXJfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KQEAgLTE2MCw4ICsxNTksMTAgQEAKICAgICBpZiAoIWxvY2FsKSByZXR1cm4gLUVOT01FTTsKICAgICBtZW1zZXQobG9jYWwsIDAsIHNpemVvZihsb2NhbF9pbmZvX3QpKTsKICAgICBsb2NhbC0+Y2FyZG5yID0gLTE7Ci0gICAgbGluayA9ICZsb2NhbC0+bGluazsgbGluay0+cHJpdiA9IGxvY2FsOwotICAgIAorCisgICAgbG9jYWwtPnBfZGV2ID0gbGluazsKKyAgICBsaW5rLT5wcml2ID0gbG9jYWw7CisKICAgICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKICAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CkBAIC0xODIsMTggKzE4MywxMCBAQAogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAzOwogCi0KICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgc2VkbGJhdWVyX2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBzZWRsYmF1ZXJfY29uZmlnKGxpbmspOwogfSAvKiBzZWRsYmF1ZXJfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjA1LDE5ICsxOTgsMTUgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHNlZGxiYXVlcl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgc2VkbGJhdWVyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKKwlERUJVRygwLCAic2VkbGJhdWVyX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICBERUJVRygwLCAic2VkbGJhdWVyX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+c3RvcCA9IDE7CisJc2VkbGJhdWVyX3JlbGVhc2UobGluayk7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JICAgICgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPnN0b3AgPSAxOwotCSAgICBzZWRsYmF1ZXJfcmVsZWFzZShsaW5rKTsKLSAgICB9Ci0KLSAgICAvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IGxvY2FsX2luZm9fdCBzdHJ1Y3QgKi8KLSAgICBrZnJlZShsaW5rLT5wcml2KTsKKwkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IGxvY2FsX2luZm9fdCBzdHJ1Y3QgKi8KKwlrZnJlZShsaW5rLT5wcml2KTsKIH0gLyogc2VkbGJhdWVyX2RldGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIzMCw5ICsyMTksOCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBzZWRsYmF1ZXJfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHNlZGxiYXVlcl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwpAQCAtMjU0LDE4ICsyNDIsMTMgQEAKICAgICB0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwogCi0gICAgLyogTG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KLSAgICBDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotICAgIGxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7CisgICAgQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25mKSk7CiAKICAgICAvKgogICAgICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKQEAgLTI4MCwxMiArMjYzLDEyIEBACiAgICAgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAgICAgKi8KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB3aGlsZSAoMSkgewogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OwogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0JaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKKwlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAorCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCiAJICAgIGdvdG8gbmV4dF9lbnRyeTsKIAogCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7CkBAIC0zMDksMTAgKzI5MiwxMCBAQAogCX0KIAkgICAgCiAJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkgICAgbGluay0+Y29uZi5WcHAgPQogCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwogCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkgICAgbGluay0+Y29uZi5WcHAgPQogCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwogCQogCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwpAQCAtMzM5LDEzICszMjIsMTMgQEAKIAkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CiAJICAgIH0KIAkgICAgLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkgICAgaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCSAgICBpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQlnb3RvIG5leHRfZW50cnk7CiAJfQogCiAJLyoKIAkgIE5vdyBzZXQgdXAgYSBjb21tb24gbWVtb3J5IHdpbmRvdywgaWYgbmVlZGVkLiAgVGhlcmUgaXMgcm9vbQotCSAgaW4gdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlIGZvciBvbmUgbWVtb3J5IHdpbmRvdyBoYW5kbGUsCisJICBpbiB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIGZvciBvbmUgbWVtb3J5IHdpbmRvdyBoYW5kbGUsCiAJICBidXQgaWYgdGhlIGJhc2UgYWRkcmVzc2VzIG5lZWQgdG8gYmUgc2F2ZWQsIG9yIGlmIG11bHRpcGxlCiAJICB3aW5kb3dzIGFyZSBuZWVkZWQsIHRoZSBpbmZvIHNob3VsZCBnbyBpbiB0aGUgcHJpdmF0ZSBkYXRhCiAJICBzdHJ1Y3R1cmUgZm9yIHRoaXMgZGV2aWNlLgpAQCAtMzY2LDcgKzM0OSw3IEBACiAgICAgICAgICAgICAgICAgcmVxLlNpemUgPSAweDEwMDA7CiAqLwogCSAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwotCSAgICBpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pICE9IDApCisJICAgIGlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pICE9IDApCiAJCWdvdG8gbmV4dF9lbnRyeTsKIAkgICAgbWFwLlBhZ2UgPSAwOyBtYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKIAkgICAgaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWFwKSAhPSAwKQpAQCAtMzc0LDI5ICszNTcsMjUgQEAKIAl9CiAJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwogCWJyZWFrOwotCQorCiAgICAgbmV4dF9lbnRyeToKLS8qIG5ldyBpbiBkdW1teS5jcyAyMDAxLzAxLzI4IE1OIAotICAgICAgICBpZiAobGluay0+aW8uTnVtUG9ydHMxKQotICAgICAgICAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0qLwotCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgICBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhCiAgICAgICAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCiAgICAgICAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KICAgICAqLwogICAgIGlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCi0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAJCiAgICAgLyoKICAgICAgICBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAogICAgICAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKICAgICAgICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgogICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKICAgICAvKgogICAgICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKQEAgLTQwNCwxNCArMzgzLDEzIEBACiAgICAgKi8KICAgICBzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgInNlZGxiYXVlciIpOwogICAgIGRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7Ci0gICAgbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CiAKICAgICAvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKLQkgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCi0JICAgbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKLSAgICBpZiAobGluay0+Y29uZi5WcHAxKQotCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcDEvMTAsIGxpbmstPmNvbmYuVnBwMSUxMCk7CisgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeDoiLAorCSAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisgICAgaWYgKGxpbmstPmNvbmYuVnBwKQorCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcC8xMCwgbGluay0+Y29uZi5WcHAlMTApOwogICAgIGlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKQEAgLTQyNCw4ICs0MDIsNiBAQAogCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCiAJICAgICAgIHJlcS5CYXNlK3JlcS5TaXplLTEpOwogICAgIHByaW50aygiXG4iKTsKLSAgICAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwogCiAgICAgaWNhcmQucGFyYVswXSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtNDM3LDE0ICs0MTMsMTYgQEAKICAgICAJcHJpbnRrKEtFUk5fRVJSICJzZWRsYmF1ZXJfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplIFNFRExCQVVFUiBQQ01DSUEgJWQgYXQgaS9vICUjeFxuIiwKICAgICAJCWxhc3RfcmV0LCBsaW5rLT5pby5CYXNlUG9ydDEpOwogICAgIAlzZWRsYmF1ZXJfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKICAgICB9IGVsc2UKICAgICAJKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5jYXJkbnIgPSBsYXN0X3JldDsKIAotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKICAgICBzZWRsYmF1ZXJfcmVsZWFzZShsaW5rKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIAogfSAvKiBzZWRsYmF1ZXJfY29uZmlnICovCiAKQEAgLTQ1Niw3ICs0MzQsNyBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHNlZGxiYXVlcl9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBzZWRsYmF1ZXJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKICAgICBERUJVRygwLCAic2VkbGJhdWVyX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwpAQCAtNDY3LDQ2ICs0NDUsMjMgQEAKIAkgICAgSGlTYXhfY2xvc2VjYXJkKGxvY2FsLT5jYXJkbnIpOwogCX0KICAgICB9Ci0gICAgLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLSAgICBsaW5rLT5kZXYgPSBOVUxMOwogCi0gICAgLyoKLSAgICAgIEluIGEgbm9ybWFsIGRyaXZlciwgYWRkaXRpb25hbCBjb2RlIG1heSBiZSBuZWVkZWQgdG8gcmVsZWFzZQotICAgICAgb3RoZXIga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuIAotICAgICovCi0gICAgCi0gICAgLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICAgIGlmIChsaW5rLT53aW4pCi0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIGlmIChsaW5rLT5pcnEuQXNzaWduZWRJUlEpCi0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfSAvKiBzZWRsYmF1ZXJfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50IHNlZGxiYXVlcl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc2VkbGJhdWVyX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CiAJZGV2LT5zdG9wID0gMTsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZWRsYmF1ZXJfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc2VkbGJhdWVyX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKIAlkZXYtPnN0b3AgPSAwOwogCiAJcmV0dXJuIDA7CkBAIC01MzAsNyArNDg1LDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAic2VkbGJhdWVyX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBzZWRsYmF1ZXJfYXR0YWNoLAorCS5wcm9iZQkJPSBzZWRsYmF1ZXJfcHJvYmUsCiAJLnJlbW92ZQkJPSBzZWRsYmF1ZXJfZGV0YWNoLAogCS5pZF90YWJsZQk9IHNlZGxiYXVlcl9pZHMsCiAJLnN1c3BlbmQJPSBzZWRsYmF1ZXJfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMKaW5kZXggNGU1YzE0Yy4uYWZjYzJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMKQEAgLTc1LDggKzc1LDggQEAKICAgIGhhbmRsZXIuCiAqLwogCi1zdGF0aWMgdm9pZCB0ZWxlc19jc19jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCB0ZWxlc19jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCB0ZWxlc19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgdGVsZXNfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIC8qCiAgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKQEAgLTg5LDEwICs4OSwxMCBAQAogLyoKICAgIEEgbGlua2VkIGxpc3Qgb2YgImluc3RhbmNlcyIgb2YgdGhlIHRlbGVzX2NzIGRldmljZS4gIEVhY2ggYWN0dWFsCiAgICBQQ01DSUEgY2FyZCBjb3JyZXNwb25kcyB0byBvbmUgZGV2aWNlIGluc3RhbmNlLCBhbmQgaXMgZGVzY3JpYmVkCi0gICBieSBvbmUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCisgICBieSBvbmUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgogCiAgICBZb3UgbWF5IG5vdCB3YW50IHRvIHVzZSBhIGxpbmtlZCBsaXN0IGZvciB0aGlzIC0tIGZvciBleGFtcGxlLCB0aGUKLSAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIGRldl9saW5rX3QgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCisgICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKICAgIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KICovCiAKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgZXhhbXBsZSwgZXRoZXJuZXQgY2FyZHMsIG1vZGVtcykuICBJbiBvdGhlciBjYXNlcywgdGhlcmUgbWF5IGJlCiAgICBtYW55IGFjdHVhbCBvciBsb2dpY2FsIGRldmljZXMgKFNDU0kgYWRhcHRlcnMsIG1lbW9yeSBjYXJkcyB3aXRoCiAgICBtdWx0aXBsZSBwYXJ0aXRpb25zKS4gIFRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZXMgbmVlZCB0byBiZSBrZXB0Ci0gICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIGRldl9saW5rX3QKKyAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAgIHN0cnVjdHVyZS4gIFdlIGFsbG9jYXRlIHRoZW0gaW4gdGhlIGNhcmQncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLAogICAgYmVjYXVzZSB0aGV5IGdlbmVyYWxseSBzaG91bGRuJ3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LgogICAgSW4gdGhpcyBjYXNlLCB3ZSBhbHNvIHByb3ZpZGUgYSBmbGFnIHRvIGluZGljYXRlIGlmIGEgZGV2aWNlIGlzCkBAIC0xMTIsNyArMTEyLDcgQEAKICovCiAKIHR5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7Ci0gICAgZGV2X2xpbmtfdCAgICAgICAgICBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90ICAgICAgICAgIG5vZGU7CiAgICAgaW50ICAgICAgICAgICAgICAgICBidXN5OwogICAgIGludAkJCWNhcmRucjsKQEAgLTEzMCw5ICsxMzAsOCBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCB0ZWxlc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB0ZWxlc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIGxvY2FsX2luZm9fdCAqbG9jYWw7CiAKICAgICBERUJVRygwLCAidGVsZXNfYXR0YWNoKClcbiIpOwpAQCAtMTQyLDcgKzE0MSw5IEBACiAgICAgaWYgKCFsb2NhbCkgcmV0dXJuIC1FTk9NRU07CiAgICAgbWVtc2V0KGxvY2FsLCAwLCBzaXplb2YobG9jYWxfaW5mb190KSk7CiAgICAgbG9jYWwtPmNhcmRuciA9IC0xOwotICAgIGxpbmsgPSAmbG9jYWwtPmxpbms7IGxpbmstPnByaXYgPSBsb2NhbDsKKworICAgIGxvY2FsLT5wX2RldiA9IGxpbms7CisgICAgbGluay0+cHJpdiA9IGxvY2FsOwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKQEAgLTE2MSwxNiArMTYyLDkgQEAKICAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDU7CiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICB0ZWxlc19jc19jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdGVsZXNfY3NfY29uZmlnKGxpbmspOwogfSAvKiB0ZWxlc19hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xODIsMjAgKzE3NiwxNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgdGVsZXNfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHRlbGVzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLSAgICBsb2NhbF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OworCWxvY2FsX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLSAgICBERUJVRygwLCAidGVsZXNfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlERUJVRygwLCAidGVsZXNfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkgICAgaW5mby0+YnVzeSA9IDE7Ci0JICAgIHRlbGVzX2NzX3JlbGVhc2UobGluayk7Ci0gICAgfQorCWluZm8tPmJ1c3kgPSAxOworCXRlbGVzX2NzX3JlbGVhc2UobGluayk7CiAKLSAgICBrZnJlZShpbmZvKTsKLQorCWtmcmVlKGluZm8pOwogfSAvKiB0ZWxlc19kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMDUsNyArMTk1LDcgQEAKICAgICBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCBnZXRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKICAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjEzLDcgKzIwMyw3IEBACiAgICAgcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjIxLDcgKzIxMSw3IEBACiAgICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKICAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCBpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjI5LDkgKzIxOSw4IEBACiAgICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlbGVzX2NzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCB0ZWxlc19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgbG9jYWxfaW5mb190ICpkZXY7CkBAIC0yNDEsNyArMjMwLDYgQEAKICAgICBJc2RuQ2FyZF90IGljYXJkOwogCiAgICAgREVCVUcoMCwgInRlbGVzX2NvbmZpZygweCVwKVxuIiwgbGluayk7Ci0gICAgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIGRldiA9IGxpbmstPnByaXY7CiAKICAgICAvKgpAQCAtMjUzLDcgKzI0MSw3IEBACiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICBpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CiAgICAgICAgIGxhc3RfZm4gPSBQYXJzZVR1cGxlOwogCWdvdG8gY3NfZmFpbGVkOwpAQCAtMjYxLDMyICsyNDksMjkgQEAKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIGkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKyAgICBpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogICAgIHdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKICAgICAgICAgaWYgKCAoY2YtPmlvLm53aW4gPiAwKSAmJiBjZi0+aW8ud2luWzBdLmJhc2UpIHsKICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIih0ZWxlc19jczogbG9va3MgbGlrZSB0aGUgOTYgbW9kZWwpXG4iKTsKICAgICAgICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CiAgICAgICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0gICAgICAgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworICAgICAgICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAgICAgICAgICAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIodGVsZXNfY3M6IGxvb2tzIGxpa2UgdGhlIDk3IG1vZGVsKVxuIik7CiAgICAgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKICAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gMHgyZjA7IGogPiAweDEwMDsgaiAtPSAweDEwKSB7CiAgICAgICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBqOwotICAgICAgICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKyAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgICAgICAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworICAgICAgICBpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAgICAgfQogCiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewpAQCAtMjk0LDE0ICsyNzksMTQgQEAKIAlnb3RvIGNzX2ZhaWxlZDsKICAgICB9CiAKLSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CiAgICAgICAgIGxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7CiAJbGFzdF9mbiA9IFJlcXVlc3RJUlE7CiAgICAgICAgIGdvdG8gY3NfZmFpbGVkOwogICAgIH0KIAotICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CiAgICAgICBsYXN0X2ZuID0gUmVxdWVzdENvbmZpZ3VyYXRpb247CiAgICAgICBnb3RvIGNzX2ZhaWxlZDsKQEAgLTMxMiwxNCArMjk3LDExIEBACiAgICAgc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJ0ZWxlcyIpOwogICAgIGRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDB4MDsKIAotICAgIGxpbmstPmRldiA9ICZkZXYtPm5vZGU7CisgICAgbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwogCiAgICAgLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6IFZjYyAlZC4lZCIsCi0gICAgICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCwKLSAgICAgICAgICAgbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKLSAgICBpZiAobGluay0+Y29uZi5WcHAxKQotICAgICAgICBwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOworICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6IiwKKyAgICAgICAgICAgZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKICAgICBpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogICAgICAgICBwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKICAgICBpZiAobGluay0+aW8uTnVtUG9ydHMxKQpAQCAtMzMwLDggKzMxMiw2IEBACiAgICAgICAgICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOwogICAgIHByaW50aygiXG4iKTsKIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0KICAgICBpY2FyZC5wYXJhWzBdID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGljYXJkLnBhcmFbMV0gPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAgICAgaWNhcmQucHJvdG9jb2wgPSBwcm90b2NvbDsKQEAgLTM0MiwxMyArMzIyLDE2IEBACiAgICAgCXByaW50ayhLRVJOX0VSUiAidGVsZXNfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplIFRlbGVzIFBDTUNJQSAlZCBhdCBpL28gJSN4XG4iLAogICAgIAkJaSwgbGluay0+aW8uQmFzZVBvcnQxKTsKICAgICAJdGVsZXNfY3NfcmVsZWFzZShsaW5rKTsKLSAgICB9IGVsc2UKLSAgICAJKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5jYXJkbnIgPSBpOworCXJldHVybiAtRU5PREVWOworICAgIH0KIAotICAgIHJldHVybjsKKyAgICAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmNhcmRuciA9IGk7CisgICAgcmV0dXJuIDA7CisKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGkpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGkpOwogICAgIHRlbGVzX2NzX3JlbGVhc2UobGluayk7CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIHRlbGVzX2NzX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM1OSw3ICszNDIsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgdGVsZXNfY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgdGVsZXNfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKIApAQCAtMzcxLDM5ICszNTQsMjMgQEAKIAkgICAgSGlTYXhfY2xvc2VjYXJkKGxvY2FsLT5jYXJkbnIpOwogCX0KICAgICB9Ci0gICAgLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLSAgICBsaW5rLT5kZXYgPSBOVUxMOwogCi0gICAgLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICAgIGlmIChsaW5rLT53aW4pCi0gICAgICAgIHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfSAvKiB0ZWxlc19jc19yZWxlYXNlICovCiAKLXN0YXRpYyBpbnQgdGVsZXNfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHRlbGVzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CiAgICAgICAgIGRldi0+YnVzeSA9IDE7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVsZXNfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgdGVsZXNfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwogICAgICAgICBkZXYtPmJ1c3kgPSAwOwogCiAJcmV0dXJuIDA7CkBAIC00MjEsNyArMzg4LDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAidGVsZXNfY3MiLAogCX0sCi0JLnByb2JlCQk9IHRlbGVzX2F0dGFjaCwKKwkucHJvYmUJCT0gdGVsZXNfcHJvYmUsCiAJLnJlbW92ZQkJPSB0ZWxlc19kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gdGVsZXNfaWRzLAogCS5zdXNwZW5kCT0gdGVsZXNfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwppbmRleCBhMDkyN2QxLi45MTg3NDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCkBAIC0xMDksNyArMTA5LDcgQEAKIHsKIAlzdHJ1Y3QgaXBwcF9zdHJ1Y3QgKmlzOwogCi0JaWYgKGxwLT5wcHBfc2xvdCA8IDAgfHwgbHAtPnBwcF9zbG90ID4gSVNETl9NQVhfQ0hBTk5FTFMpIHsKKwlpZiAobHAtPnBwcF9zbG90IDwgMCB8fCBscC0+cHBwX3Nsb3QgPj0gSVNETl9NQVhfQ0hBTk5FTFMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogcHBwX3Nsb3QoJWQpIG91dCBvZiByYW5nZVxuIiwKIAkJCV9fRlVOQ1RJT05fXywgbHAtPnBwcF9zbG90KTsKIAkJcmV0dXJuIDA7CkBAIC0xMjYsNyArMTI2LDcgQEAKIAlscC0+bmV0ZGV2LT5wYi0+cmVmX2N0LS07CiAJc3Bpbl91bmxvY2soJmxwLT5uZXRkZXYtPnBiLT5sb2NrKTsKICNlbmRpZiAvKiBDT05GSUdfSVNETl9NUFAgKi8KLQlpZiAobHAtPnBwcF9zbG90IDwgMCB8fCBscC0+cHBwX3Nsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCWlmIChscC0+cHBwX3Nsb3QgPCAwIHx8IGxwLT5wcHBfc2xvdCA+PSBJU0ROX01BWF9DSEFOTkVMUykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwcHBfc2xvdCglZCkgbm93IGludmFsaWRcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIGxwLT5wcHBfc2xvdCk7CiAJCXJldHVybiAwOwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJaW50IHNsb3Q7CiAJc3RydWN0IGlwcHBfc3RydWN0ICppczsKIAotCWlmIChtaW4gPCAwIHx8IG1pbiA+IElTRE5fTUFYX0NIQU5ORUxTKQorCWlmIChtaW4gPCAwIHx8IG1pbiA+PSBJU0ROX01BWF9DSEFOTkVMUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzbG90ID0gaXNkbl9wcHBfZ2V0X3Nsb3QoKTsKQEAgLTEwNDIsNyArMTA0Miw3IEBACiAgCWlmIChscC0+bWFzdGVyKSB7IC8vIEZJWE1FPwogCQltbHAgPSAoaXNkbl9uZXRfbG9jYWwgKikgbHAtPm1hc3Rlci0+cHJpdjsKICAJCXNsb3QgPSBtbHAtPnBwcF9zbG90OwotIAkJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworIAkJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPj0gSVNETl9NQVhfQ0hBTk5FTFMpIHsKICAJCQlwcmludGsoS0VSTl9FUlIgImlzZG5fcHBwX3B1c2hfaGlnaGVyOiBtYXN0ZXItPnBwcF9zbG90KCVkKVxuIiwKICAJCQkJbHAtPnBwcF9zbG90KTsKIAkJCWdvdG8gZHJvcF9wYWNrZXQ7CkBAIC0xMjY0LDcgKzEyNjQsNyBAQAogCS8qIHdlIGhhdmUgb3VyIGxwIGxvY2tlZCBmcm9tIG5vdyBvbiAqLwogCiAJc2xvdCA9IGxwLT5wcHBfc2xvdDsKLQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPj0gSVNETl9NQVhfQ0hBTk5FTFMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpc2RuX3BwcF94bWl0OiBscC0+cHBwX3Nsb3QoJWQpXG4iLAogCQkJbHAtPnBwcF9zbG90KTsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogICAgIAltcCA9IG5ldF9kZXYtPnBiOwogICAgICAgICBzdGF0cyA9ICZtcC0+c3RhdHM7CiAJc2xvdCA9IGxwLT5wcHBfc2xvdDsKLQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPj0gSVNETl9NQVhfQ0hBTk5FTFMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbHAtPnBwcF9zbG90KCVkKVxuIiwKIAkJCV9fRlVOQ1RJT05fXywgbHAtPnBwcF9zbG90KTsKIAkJc3RhdHMtPmZyYW1lX2Ryb3BzKys7CkBAIC0xNjQwLDcgKzE2NDAsNyBAQAogCWlzLT5sYXN0X2xpbmtfc2Vxbm8gPSBtaW5zZXEgPSBuZXdzZXE7CiAJZm9yIChscHEgPSBuZXRfZGV2LT5xdWV1ZTs7KSB7CiAJCXNsb3QgPSBscHEtPnBwcF9zbG90OwotCQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBscHEtPnBwcF9zbG90KCVkKVxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIGxwcS0+cHBwX3Nsb3QpOwogCQl9IGVsc2UgewpAQCAtMjY0OCw3ICsyNjQ4LDcgQEAKIAogCXByaW50ayhLRVJOX0RFQlVHICJSZWNlaXZlZCBDQ1AgZnJhbWUgZnJvbSBwZWVyIHNsb3QoJWQpXG4iLAogCQlscC0+cHBwX3Nsb3QpOwotCWlmIChscC0+cHBwX3Nsb3QgPCAwIHx8IGxwLT5wcHBfc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJaWYgKGxwLT5wcHBfc2xvdCA8IDAgfHwgbHAtPnBwcF9zbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGxwLT5wcHBfc2xvdCglZCkgb3V0IG9mIHJhbmdlXG4iLAogCQkJX19GVU5DVElPTl9fLCBscC0+cHBwX3Nsb3QpOwogCQlyZXR1cm47CkBAIC0yNjU4LDcgKzI2NTgsNyBAQAogCiAJaWYobHAtPm1hc3RlcikgewogCQlpbnQgc2xvdCA9ICgoaXNkbl9uZXRfbG9jYWwgKikgKGxwLT5tYXN0ZXItPnByaXYpKS0+cHBwX3Nsb3Q7Ci0JCWlmIChzbG90IDwgMCB8fCBzbG90ID4gSVNETl9NQVhfQ0hBTk5FTFMpIHsKKwkJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPj0gSVNETl9NQVhfQ0hBTk5FTFMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNsb3QoJWQpIG91dCBvZiByYW5nZVxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIHNsb3QpOwogCQkJcmV0dXJuOwpAQCAtMjg0NSw3ICsyODQ1LDcgQEAKIAogCWlmIChscC0+bWFzdGVyKSB7CiAJCXNsb3QgPSAoKGlzZG5fbmV0X2xvY2FsICopIChscC0+bWFzdGVyLT5wcml2KSktPnBwcF9zbG90OwotCQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzbG90KCVkKSBvdXQgb2YgcmFuZ2VcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBzbG90KTsKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwppbmRleCAzNTg1ZmIxLi4yYWM5MDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCkBAIC0yODgwLDcgKzI4ODAsNyBAQAogCQkJcFswXSsrOwogCQkJaSA9IDA7CiAJCQl3aGlsZSAoKnBbMF0gJiYgKHN0cmNocigiMDEyMzQ1Njc4OSwtKltdPzsiLCAqcFswXSkpICYmCi0JCQkgICAgICAgKGkgPCBJU0ROX0xNU05MRU4pKQorCQkJICAgICAgIChpIDwgSVNETl9MTVNOTEVOIC0gMSkpCiAJCQkJbS0+bG1zbltpKytdID0gKnBbMF0rKzsKIAkJCW0tPmxtc25baV0gPSAnXDAnOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vc2MvaW9jdGwuYyBiL2RyaXZlcnMvaXNkbi9zYy9pb2N0bC5jCmluZGV4IDk0YzlhZmIuLmY0ZjcxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9zYy9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaXNkbi9zYy9pb2N0bC5jCkBAIC00Niw3ICs0Niw4IEBACiAJCXByX2RlYnVnKCIlczogU0NJT0NSRVNFVDogaW9jdGwgcmVjZWl2ZWRcbiIsCiAJCQlzY19hZGFwdGVyW2NhcmRdLT5kZXZpY2VuYW1lKTsKIAkJc2NfYWRhcHRlcltjYXJkXS0+U3RhcnRPblJlc2V0ID0gMDsKLQkJcmV0dXJuIChyZXNldChjYXJkKSk7CisJCWtmcmVlKHJjdm1zZyk7CisJCXJldHVybiByZXNldChjYXJkKTsKIAl9CiAKIAljYXNlIFNDSU9DTE9BRDoKQEAgLTE4Myw3ICsxODQsNyBAQAogCQkJCXNjX2FkYXB0ZXJbY2FyZF0tPmRldmljZW5hbWUpOwogCiAJCXNwaWQgPSBrbWFsbG9jKFNDSU9DX1NQSURTSVpFLCBHRlBfS0VSTkVMKTsKLQkJaWYoIXNwaWQpIHsKKwkJaWYgKCFzcGlkKSB7CiAJCQlrZnJlZShyY3Ztc2cpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTE5NSwxMCArMTk2LDEwIEBACiAJCWlmICghc3RhdHVzKSB7CiAJCQlwcl9kZWJ1ZygiJXM6IFNDSU9DR0VUU1BJRDogY29tbWFuZCBzdWNjZXNzZnVsXG4iLAogCQkJCQlzY19hZGFwdGVyW2NhcmRdLT5kZXZpY2VuYW1lKTsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXByX2RlYnVnKCIlczogU0NJT0NHRVRTUElEOiBjb21tYW5kIGZhaWxlZCAoc3RhdHVzID0gJWQpXG4iLAogCQkJCXNjX2FkYXB0ZXJbY2FyZF0tPmRldmljZW5hbWUsIHN0YXR1cyk7CisJCQlrZnJlZShzcGlkKTsKIAkJCWtmcmVlKHJjdm1zZyk7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjUwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMCwwICsxLDkxIEBACisKK21lbnUgIkxFRCBkZXZpY2VzIgorCitjb25maWcgTkVXX0xFRFMKKwlib29sICJMRUQgU3VwcG9ydCIKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgTGludXggTEVEIHN1cHBvcnQuICBUaGlzIGFsbG93cyBjb250cm9sIG9mIHN1cHBvcnRlZAorCSAgTEVEcyBmcm9tIGJvdGggdXNlcnNwYWNlIGFuZCBvcHRpb25hbGx5LCBieSBrZXJuZWwgZXZlbnRzICh0cmlnZ2VycykuCisKKwkgIFRoaXMgaXMgbm90IHJlbGF0ZWQgdG8gc3RhbmRhcmQga2V5Ym9hcmQgTEVEcyB3aGljaCBhcmUgY29udHJvbGxlZAorCSAgdmlhIHRoZSBpbnB1dCBzeXN0ZW0uCisKK2NvbmZpZyBMRURTX0NMQVNTCisJdHJpc3RhdGUgIkxFRCBDbGFzcyBTdXBwb3J0IgorCWRlcGVuZHMgTkVXX0xFRFMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBsZWQgc3lzZnMgY2xhc3MgaW4gL3N5cy9jbGFzcy9sZWRzLiAgWW91J2xsCisJICBuZWVkIHRoaXMgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggTEVEcy4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbW1lbnQgIkxFRCBkcml2ZXJzIgorCitjb25maWcgTEVEU19DT1JHSQorCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgdGhlIFNoYXJwIFNMLUM3eDAgc2VyaWVzIgorCWRlcGVuZHMgTEVEU19DTEFTUyAmJiBQWEFfU0hBUlBfQzd4eAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExFRHMgb24gU2hhcnAgWmF1cnVzCisJICBTTC1DN3gwIHNlcmllcyAoQzcwMCwgQzc1MCwgQzc2MCwgQzg2MCkuCisKK2NvbmZpZyBMRURTX0xPQ09NTworCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgTG9jb21vIGRldmljZSIKKwlkZXBlbmRzIExFRFNfQ0xBU1MgJiYgU0hBUlBfTE9DT01PCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTEVEcyBvbiBTaGFycCBMb2NvbW8uCisJICBaYXVydXMgbW9kZWxzIFNMLTU1MDAgYW5kIFNMLTU2MDAuCisKK2NvbmZpZyBMRURTX1NQSVRaCisJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciB0aGUgU2hhcnAgU0wtQ3h4MDAgc2VyaWVzIgorCWRlcGVuZHMgTEVEU19DTEFTUyAmJiBQWEFfU0hBUlBfQ3h4MDAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBMRURzIG9uIFNoYXJwIFphdXJ1cworCSAgU0wtQ3h4MDAgc2VyaWVzIChDMTAwMCwgQzMwMDAsIEMzMTAwKS4KKworY29uZmlnIExFRFNfSVhQNFhYCisJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciBHUElPIGNvbm5lY3RlZCBMRURzIG9uIElYUDRYWCBwcm9jZXNzb3JzIgorCWRlcGVuZHMgTEVEU19DTEFTUyAmJiBBUkNIX0lYUDRYWAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExFRHMgY29ubmVjdGVkIHRvIEdQSU8KKwkgIG91dHB1dHMgb2YgdGhlIEludGVsIElYUDRYWCBwcm9jZXNzb3JzLiAgVG8gYmUgdXNlZnVsIHRoZQorCSAgcGFydGljdWxhciBib2FyZCBtdXN0IGhhdmUgTEVEcyBhbmQgdGhleSBtdXN0IGJlIGNvbm5lY3RlZAorCSAgdG8gdGhlIEdQSU8gbGluZXMuICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgTEVEU19UT1NBCisJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciB0aGUgU2hhcnAgU0wtNjAwMCBzZXJpZXMiCisJZGVwZW5kcyBMRURTX0NMQVNTICYmIFBYQV9TSEFSUFNMCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTEVEcyBvbiBTaGFycCBaYXVydXMKKwkgIFNMLTYwMDAgc2VyaWVzLgorCitjb25maWcgTEVEU19TM0MyNFhYCisJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciBTYW1zdW5nIFMzQzI0WFggR1BJTyBMRURzIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIExFRHMgY29ubmVjdGVkIHRvIEdQSU8gbGluZXMKKwkgIG9uIFNhbXN1bmcgUzNDMjRYWCBzZXJpZXMgQ1BVcywgc3VjaCBhcyB0aGUgUzNDMjQxMCBhbmQgUzNDMjQ0MC4KKworY29tbWVudCAiTEVEIFRyaWdnZXJzIgorCitjb25maWcgTEVEU19UUklHR0VSUworCWJvb2wgIkxFRCBUcmlnZ2VyIHN1cHBvcnQiCisJZGVwZW5kcyBORVdfTEVEUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdHJpZ2dlciBzdXBwb3J0IGZvciB0aGUgbGVkcyBjbGFzcy4KKwkgIFRoZXNlIHRyaWdnZXJzIGFsbG93IGtlcm5lbCBldmVudHMgdG8gZHJpdmUgdGhlIExFRHMgYW5kIGNhbgorCSAgYmUgY29uZmlndXJlZCB2aWEgc3lzZnMuIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBMRURTX1RSSUdHRVJfVElNRVIKKwl0cmlzdGF0ZSAiTEVEIFRpbWVyIFRyaWdnZXIiCisJZGVwZW5kcyBMRURTX1RSSUdHRVJTCisJaGVscAorCSAgVGhpcyBhbGxvd3MgTEVEcyB0byBiZSBjb250cm9sbGVkIGJ5IGEgcHJvZ3JhbW1hYmxlIHRpbWVyCisJICB2aWEgc3lzZnMuIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBMRURTX1RSSUdHRVJfSURFX0RJU0sKKwlib29sICJMRUQgSURFIERpc2sgVHJpZ2dlciIKKwlkZXBlbmRzIExFRFNfVFJJR0dFUlMgJiYgQkxLX0RFVl9JREVESVNLCisJaGVscAorCSAgVGhpcyBhbGxvd3MgTEVEcyB0byBiZSBjb250cm9sbGVkIGJ5IElERSBkaXNrIGFjdGl2aXR5LgorCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworZW5kbWVudQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmMDQyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE3IEBACisKKyMgTEVEIENvcmUKK29iai0kKENPTkZJR19ORVdfTEVEUykJCQkrPSBsZWQtY29yZS5vCitvYmotJChDT05GSUdfTEVEU19DTEFTUykJCSs9IGxlZC1jbGFzcy5vCitvYmotJChDT05GSUdfTEVEU19UUklHR0VSUykJCSs9IGxlZC10cmlnZ2Vycy5vCisKKyMgTEVEIFBsYXRmb3JtIERyaXZlcnMKK29iai0kKENPTkZJR19MRURTX0NPUkdJKQkJKz0gbGVkcy1jb3JnaS5vCitvYmotJChDT05GSUdfTEVEU19MT0NPTU8pCQkrPSBsZWRzLWxvY29tby5vCitvYmotJChDT05GSUdfTEVEU19TUElUWikJCSs9IGxlZHMtc3BpdHoubworb2JqLSQoQ09ORklHX0xFRFNfSVhQNFhYKQkJKz0gbGVkcy1peHA0eHgtZ3Bpby5vCitvYmotJChDT05GSUdfTEVEU19UT1NBKQkJCSs9IGxlZHMtdG9zYS5vCitvYmotJChDT05GSUdfTEVEU19TM0MyNFhYKQkJKz0gbGVkcy1zM2MyNHh4Lm8KKworIyBMRUQgVHJpZ2dlcnMKK29iai0kKENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIpCSs9IGxlZHRyaWctdGltZXIubworb2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSykJKz0gbGVkdHJpZy1pZGUtZGlzay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1ZDBlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIExFRCBDbGFzcyBDb3JlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEpvaG4gTGVueiA8bGVuekBjcy53aXNjLmVkdT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgImxlZHMuaCIKKworc3RhdGljIHN0cnVjdCBjbGFzcyAqbGVkc19jbGFzczsKKworc3RhdGljIHNzaXplX3QgbGVkX2JyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGNsYXNzX2dldF9kZXZkYXRhKGRldik7CisJc3NpemVfdCByZXQgPSAwOworCisJLyogbm8gbG9jayBuZWVkZWQgZm9yIHRoaXMgKi8KKwlzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBsZWRfY2Rldi0+YnJpZ2h0bmVzcyk7CisJcmV0ID0gc3RybGVuKGJ1ZikgKyAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgbGVkX2JyaWdodG5lc3Nfc3RvcmUoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBjbGFzc19nZXRfZGV2ZGF0YShkZXYpOworCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKKwljaGFyICphZnRlcjsKKwl1bnNpZ25lZCBsb25nIHN0YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmYWZ0ZXIsIDEwKTsKKwlzaXplX3QgY291bnQgPSBhZnRlciAtIGJ1ZjsKKworCWlmICgqYWZ0ZXIgJiYgaXNzcGFjZSgqYWZ0ZXIpKQorCQljb3VudCsrOworCisJaWYgKGNvdW50ID09IHNpemUpIHsKKwkJcmV0ID0gY291bnQ7CisJCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihicmlnaHRuZXNzLCAwNjQ0LCBsZWRfYnJpZ2h0bmVzc19zaG93LAorCQkJbGVkX2JyaWdodG5lc3Nfc3RvcmUpOworI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIodHJpZ2dlciwgMDY0NCwgbGVkX3RyaWdnZXJfc2hvdywgbGVkX3RyaWdnZXJfc3RvcmUpOworI2VuZGlmCisKKy8qKgorICogbGVkX2NsYXNzZGV2X3N1c3BlbmQgLSBzdXNwZW5kIGFuIGxlZF9jbGFzc2Rldi4KKyAqIEBsZWRfY2RldjogdGhlIGxlZF9jbGFzc2RldiB0byBzdXNwZW5kLgorICovCit2b2lkIGxlZF9jbGFzc2Rldl9zdXNwZW5kKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQoreworCWxlZF9jZGV2LT5mbGFncyB8PSBMRURfU1VTUEVOREVEOworCWxlZF9jZGV2LT5icmlnaHRuZXNzX3NldChsZWRfY2RldiwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsZWRfY2xhc3NkZXZfc3VzcGVuZCk7CisKKy8qKgorICogbGVkX2NsYXNzZGV2X3Jlc3VtZSAtIHJlc3VtZSBhbiBsZWRfY2xhc3NkZXYuCisgKiBAbGVkX2NkZXY6IHRoZSBsZWRfY2xhc3NkZXYgdG8gcmVzdW1lLgorICovCit2b2lkIGxlZF9jbGFzc2Rldl9yZXN1bWUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCit7CisJbGVkX2NkZXYtPmJyaWdodG5lc3Nfc2V0KGxlZF9jZGV2LCBsZWRfY2Rldi0+YnJpZ2h0bmVzcyk7CisJbGVkX2NkZXYtPmZsYWdzICY9IH5MRURfU1VTUEVOREVEOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGVkX2NsYXNzZGV2X3Jlc3VtZSk7CisKKy8qKgorICogbGVkX2NsYXNzZGV2X3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBuZXcgb2JqZWN0IG9mIGxlZF9jbGFzc2RldiBjbGFzcy4KKyAqIEBkZXY6IFRoZSBkZXZpY2UgdG8gcmVnaXN0ZXIuCisgKiBAbGVkX2NkZXY6IHRoZSBsZWRfY2xhc3NkZXYgc3RydWN0dXJlIGZvciB0aGlzIGRldmljZS4KKyAqLworaW50IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQoreworCWxlZF9jZGV2LT5jbGFzc19kZXYgPSBjbGFzc19kZXZpY2VfY3JlYXRlKGxlZHNfY2xhc3MsIE5VTEwsIDAsCisJCQkJCQlwYXJlbnQsICIlcyIsIGxlZF9jZGV2LT5uYW1lKTsKKwlpZiAodW5saWtlbHkoSVNfRVJSKGxlZF9jZGV2LT5jbGFzc19kZXYpKSkKKwkJcmV0dXJuIFBUUl9FUlIobGVkX2NkZXYtPmNsYXNzX2Rldik7CisKKwljbGFzc19zZXRfZGV2ZGF0YShsZWRfY2Rldi0+Y2xhc3NfZGV2LCBsZWRfY2Rldik7CisKKwkvKiByZWdpc3RlciB0aGUgYXR0cmlidXRlcyAqLworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShsZWRfY2Rldi0+Y2xhc3NfZGV2LAorCQkJCSZjbGFzc19kZXZpY2VfYXR0cl9icmlnaHRuZXNzKTsKKworCS8qIGFkZCB0byB0aGUgbGlzdCBvZiBsZWRzICovCisJd3JpdGVfbG9jaygmbGVkc19saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmxlZF9jZGV2LT5ub2RlLCAmbGVkc19saXN0KTsKKwl3cml0ZV91bmxvY2soJmxlZHNfbGlzdF9sb2NrKTsKKworI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCisJcndsb2NrX2luaXQoJmxlZF9jZGV2LT50cmlnZ2VyX2xvY2spOworCisJbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQobGVkX2NkZXYpOworCisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGxlZF9jZGV2LT5jbGFzc19kZXYsCisJCQkJJmNsYXNzX2RldmljZV9hdHRyX3RyaWdnZXIpOworI2VuZGlmCisKKwlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIGxlZCBkZXZpY2U6ICVzXG4iLAorCQkJbGVkX2NkZXYtPmNsYXNzX2Rldi0+Y2xhc3NfaWQpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsZWRfY2xhc3NkZXZfcmVnaXN0ZXIpOworCisvKioKKyAqIGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlcnMgYSBvYmplY3Qgb2YgbGVkX3Byb3BlcnRpZXMgY2xhc3MuCisgKiBAbGVkX2NkZXY6IHRoZSBsZWQgZGV2aWNlIHRvIHVucmVpZ2lzdGVyCisgKgorICogVW5yZWdpc3RlcnMgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdmlhIGxlZF9jbGFzc2Rldl9yZWdpc3RlciBvYmplY3QuCisgKi8KK3ZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCit7CisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGxlZF9jZGV2LT5jbGFzc19kZXYsCisJCQkJJmNsYXNzX2RldmljZV9hdHRyX2JyaWdodG5lc3MpOworI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGxlZF9jZGV2LT5jbGFzc19kZXYsCisJCQkJJmNsYXNzX2RldmljZV9hdHRyX3RyaWdnZXIpOworCXdyaXRlX2xvY2soJmxlZF9jZGV2LT50cmlnZ2VyX2xvY2spOworCWlmIChsZWRfY2Rldi0+dHJpZ2dlcikKKwkJbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTsKKwl3cml0ZV91bmxvY2soJmxlZF9jZGV2LT50cmlnZ2VyX2xvY2spOworI2VuZGlmCisKKwljbGFzc19kZXZpY2VfdW5yZWdpc3RlcihsZWRfY2Rldi0+Y2xhc3NfZGV2KTsKKworCXdyaXRlX2xvY2soJmxlZHNfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbCgmbGVkX2NkZXYtPm5vZGUpOworCXdyaXRlX3VubG9jaygmbGVkc19saXN0X2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIpOworCitzdGF0aWMgaW50IF9faW5pdCBsZWRzX2luaXQodm9pZCkKK3sKKwlsZWRzX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibGVkcyIpOworCWlmIChJU19FUlIobGVkc19jbGFzcykpCisJCXJldHVybiBQVFJfRVJSKGxlZHNfY2xhc3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbGVkc19leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveShsZWRzX2NsYXNzKTsKK30KKworc3Vic3lzX2luaXRjYWxsKGxlZHNfaW5pdCk7Cittb2R1bGVfZXhpdChsZWRzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKb2huIExlbnosIFJpY2hhcmQgUHVyZGllIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxFRCBDbGFzcyBJbnRlcmZhY2UiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY29yZS5jIGIvZHJpdmVycy9sZWRzL2xlZC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2NTQxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY29yZS5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBMRUQgQ2xhc3MgQ29yZQorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDYgT3BlbmVkaGFuZCBMdGQuCisgKgorICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgImxlZHMuaCIKKworcndsb2NrX3QgbGVkc19saXN0X2xvY2sgPSBSV19MT0NLX1VOTE9DS0VEOworTElTVF9IRUFEKGxlZHNfbGlzdCk7CisKK0VYUE9SVF9TWU1CT0xfR1BMKGxlZHNfbGlzdCk7CitFWFBPUlRfU1lNQk9MX0dQTChsZWRzX2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyY2Q4YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwpAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIExFRCBUcmlnZ2VycyBDb3JlCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiBPcGVuZWRoYW5kIEx0ZC4KKyAqCisgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSAibGVkcy5oIgorCisvKgorICogTmVzdHMgb3V0c2lkZSBsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrCisgKi8KK3N0YXRpYyByd2xvY2tfdCB0cmlnZ2Vyc19saXN0X2xvY2sgPSBSV19MT0NLX1VOTE9DS0VEOworc3RhdGljIExJU1RfSEVBRCh0cmlnZ2VyX2xpc3QpOworCitzc2l6ZV90IGxlZF90cmlnZ2VyX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gY2xhc3NfZ2V0X2RldmRhdGEoZGV2KTsKKwljaGFyIHRyaWdnZXJfbmFtZVtUUklHX05BTUVfTUFYXTsKKwlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7CisJc2l6ZV90IGxlbjsKKworCXRyaWdnZXJfbmFtZVtzaXplb2YodHJpZ2dlcl9uYW1lKSAtIDFdID0gJ1wwJzsKKwlzdHJuY3B5KHRyaWdnZXJfbmFtZSwgYnVmLCBzaXplb2YodHJpZ2dlcl9uYW1lKSAtIDEpOworCWxlbiA9IHN0cmxlbih0cmlnZ2VyX25hbWUpOworCisJaWYgKGxlbiAmJiB0cmlnZ2VyX25hbWVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJdHJpZ2dlcl9uYW1lW2xlbiAtIDFdID0gJ1wwJzsKKworCWlmICghc3RyY21wKHRyaWdnZXJfbmFtZSwgIm5vbmUiKSkgeworCQl3cml0ZV9sb2NrKCZsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrKTsKKwkJbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTsKKwkJd3JpdGVfdW5sb2NrKCZsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrKTsKKwkJcmV0dXJuIGNvdW50OworCX0KKworCXJlYWRfbG9jaygmdHJpZ2dlcnNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsICZ0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykgeworCQlpZiAoIXN0cmNtcCh0cmlnZ2VyX25hbWUsIHRyaWctPm5hbWUpKSB7CisJCQl3cml0ZV9sb2NrKCZsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrKTsKKwkJCWxlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgdHJpZyk7CisJCQl3cml0ZV91bmxvY2soJmxlZF9jZGV2LT50cmlnZ2VyX2xvY2spOworCisJCQlyZWFkX3VubG9jaygmdHJpZ2dlcnNfbGlzdF9sb2NrKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0KKwlyZWFkX3VubG9jaygmdHJpZ2dlcnNfbGlzdF9sb2NrKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCisKK3NzaXplX3QgbGVkX3RyaWdnZXJfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGNsYXNzX2dldF9kZXZkYXRhKGRldik7CisJc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnOworCWludCBsZW4gPSAwOworCisJcmVhZF9sb2NrKCZ0cmlnZ2Vyc19saXN0X2xvY2spOworCXJlYWRfbG9jaygmbGVkX2NkZXYtPnRyaWdnZXJfbG9jayk7CisKKwlpZiAoIWxlZF9jZGV2LT50cmlnZ2VyKQorCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiW25vbmVdICIpOworCWVsc2UKKwkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIm5vbmUgIik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsICZ0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykgeworCQlpZiAobGVkX2NkZXYtPnRyaWdnZXIgJiYgIXN0cmNtcChsZWRfY2Rldi0+dHJpZ2dlci0+bmFtZSwKKwkJCQkJCQl0cmlnLT5uYW1lKSkKKwkJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJbJXNdICIsIHRyaWctPm5hbWUpOworCQllbHNlCisJCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiJXMgIiwgdHJpZy0+bmFtZSk7CisJfQorCXJlYWRfdW5sb2NrKCZsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrKTsKKwlyZWFkX3VubG9jaygmdHJpZ2dlcnNfbGlzdF9sb2NrKTsKKworCWxlbiArPSBzcHJpbnRmKGxlbitidWYsICJcbiIpOworCXJldHVybiBsZW47Cit9CisKK3ZvaWQgbGVkX3RyaWdnZXJfZXZlbnQoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLAorCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCisJaWYgKCF0cmlnZ2VyKQorCQlyZXR1cm47CisKKwlyZWFkX2xvY2soJnRyaWdnZXItPmxlZGRldl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2goZW50cnksICZ0cmlnZ2VyLT5sZWRfY2RldnMpIHsKKwkJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CisKKwkJbGVkX2NkZXYgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgbGVkX2NsYXNzZGV2LCB0cmlnX2xpc3QpOworCQlsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIGJyaWdodG5lc3MpOworCX0KKwlyZWFkX3VubG9jaygmdHJpZ2dlci0+bGVkZGV2X2xpc3RfbG9jayk7Cit9CisKKy8qIENhbGxlciBtdXN0IGVuc3VyZSBsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrIGhlbGQgKi8KK3ZvaWQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFJlbW92ZSBhbnkgZXhpc3RpbmcgdHJpZ2dlciAqLworCWlmIChsZWRfY2Rldi0+dHJpZ2dlcikgeworCQl3cml0ZV9sb2NrX2lycXNhdmUoJmxlZF9jZGV2LT50cmlnZ2VyLT5sZWRkZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZGVsKCZsZWRfY2Rldi0+dHJpZ19saXN0KTsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmxlZF9jZGV2LT50cmlnZ2VyLT5sZWRkZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCWlmIChsZWRfY2Rldi0+dHJpZ2dlci0+ZGVhY3RpdmF0ZSkKKwkJCWxlZF9jZGV2LT50cmlnZ2VyLT5kZWFjdGl2YXRlKGxlZF9jZGV2KTsKKwl9CisJaWYgKHRyaWdnZXIpIHsKKwkJd3JpdGVfbG9ja19pcnFzYXZlKCZ0cmlnZ2VyLT5sZWRkZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJmxlZF9jZGV2LT50cmlnX2xpc3QsICZ0cmlnZ2VyLT5sZWRfY2RldnMpOworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmdHJpZ2dlci0+bGVkZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQlpZiAodHJpZ2dlci0+YWN0aXZhdGUpCisJCQl0cmlnZ2VyLT5hY3RpdmF0ZShsZWRfY2Rldik7CisJfQorCWxlZF9jZGV2LT50cmlnZ2VyID0gdHJpZ2dlcjsKK30KKwordm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7CisKKwlpZiAoIWxlZF9jZGV2LT5kZWZhdWx0X3RyaWdnZXIpCisJCXJldHVybjsKKworCXJlYWRfbG9jaygmdHJpZ2dlcnNfbGlzdF9sb2NrKTsKKwl3cml0ZV9sb2NrKCZsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsICZ0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykgeworCQlpZiAoIXN0cmNtcChsZWRfY2Rldi0+ZGVmYXVsdF90cmlnZ2VyLCB0cmlnLT5uYW1lKSkKKwkJCWxlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgdHJpZyk7CisJfQorCXdyaXRlX3VubG9jaygmbGVkX2NkZXYtPnRyaWdnZXJfbG9jayk7CisJcmVhZF91bmxvY2soJnRyaWdnZXJzX2xpc3RfbG9jayk7Cit9CisKK2ludCBsZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CisKKwlyd2xvY2tfaW5pdCgmdHJpZ2dlci0+bGVkZGV2X2xpc3RfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnRyaWdnZXItPmxlZF9jZGV2cyk7CisKKwkvKiBBZGQgdG8gdGhlIGxpc3Qgb2YgbGVkIHRyaWdnZXJzICovCisJd3JpdGVfbG9jaygmdHJpZ2dlcnNfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ0cmlnZ2VyLT5uZXh0X3RyaWcsICZ0cmlnZ2VyX2xpc3QpOworCXdyaXRlX3VubG9jaygmdHJpZ2dlcnNfbGlzdF9sb2NrKTsKKworCS8qIFJlZ2lzdGVyIHdpdGggYW55IExFRHMgdGhhdCBoYXZlIHRoaXMgYXMgYSBkZWZhdWx0IHRyaWdnZXIgKi8KKwlyZWFkX2xvY2soJmxlZHNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxlZF9jZGV2LCAmbGVkc19saXN0LCBub2RlKSB7CisJCXdyaXRlX2xvY2soJmxlZF9jZGV2LT50cmlnZ2VyX2xvY2spOworCQlpZiAoIWxlZF9jZGV2LT50cmlnZ2VyICYmIGxlZF9jZGV2LT5kZWZhdWx0X3RyaWdnZXIgJiYKKwkJCSAgICAhc3RyY21wKGxlZF9jZGV2LT5kZWZhdWx0X3RyaWdnZXIsIHRyaWdnZXItPm5hbWUpKQorCQkJbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnZ2VyKTsKKwkJd3JpdGVfdW5sb2NrKCZsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrKTsKKwl9CisJcmVhZF91bmxvY2soJmxlZHNfbGlzdF9sb2NrKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKip0cCkKK3sKKwlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXI7CisKKwl0cmlnZ2VyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxlZF90cmlnZ2VyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAodHJpZ2dlcikgeworCQl0cmlnZ2VyLT5uYW1lID0gbmFtZTsKKwkJbGVkX3RyaWdnZXJfcmVnaXN0ZXIodHJpZ2dlcik7CisJfQorCSp0cCA9IHRyaWdnZXI7Cit9CisKK3ZvaWQgbGVkX3RyaWdnZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CisKKwkvKiBSZW1vdmUgZnJvbSB0aGUgbGlzdCBvZiBsZWQgdHJpZ2dlcnMgKi8KKwl3cml0ZV9sb2NrKCZ0cmlnZ2Vyc19saXN0X2xvY2spOworCWxpc3RfZGVsKCZ0cmlnZ2VyLT5uZXh0X3RyaWcpOworCXdyaXRlX3VubG9jaygmdHJpZ2dlcnNfbGlzdF9sb2NrKTsKKworCS8qIFJlbW92ZSBhbnlvbmUgYWN0aXZlbHkgdXNpbmcgdGhpcyB0cmlnZ2VyICovCisJcmVhZF9sb2NrKCZsZWRzX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsZWRfY2RldiwgJmxlZHNfbGlzdCwgbm9kZSkgeworCQl3cml0ZV9sb2NrKCZsZWRfY2Rldi0+dHJpZ2dlcl9sb2NrKTsKKwkJaWYgKGxlZF9jZGV2LT50cmlnZ2VyID09IHRyaWdnZXIpCisJCQlsZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwpOworCQl3cml0ZV91bmxvY2soJmxlZF9jZGV2LT50cmlnZ2VyX2xvY2spOworCX0KKwlyZWFkX3VubG9jaygmbGVkc19saXN0X2xvY2spOworfQorCit2b2lkIGxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKHRyaWdnZXIpOworCWtmcmVlKHRyaWdnZXIpOworfQorCisvKiBVc2VkIGJ5IExFRCBDbGFzcyAqLworRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3Nob3cpOworRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc3RvcmUpOworCisvKiBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIpOworCisvKiBTaW1wbGUgTEVEIFRpZ2dlciBJbnRlcmZhY2UgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9ldmVudCk7CisKK01PRFVMRV9BVVRIT1IoIlJpY2hhcmQgUHVyZGllIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxFRCBUcmlnZ2VycyBDb3JlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jb3JnaS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY29yZ2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdkODRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY29yZ2kuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIExFRCBUcmlnZ2VycyBDb3JlCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiBPcGVuZWRoYW5kIEx0ZC4KKyAqCisgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29yZ2kuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CisKK3N0YXRpYyB2b2lkIGNvcmdpbGVkX2FtYmVyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlpZiAodmFsdWUpCisJCUdQU1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19MRURfT1JBTkdFKTsKKwllbHNlCisJCUdQQ1IwID0gR1BJT19iaXQoQ09SR0lfR1BJT19MRURfT1JBTkdFKTsKK30KKworc3RhdGljIHZvaWQgY29yZ2lsZWRfZ3JlZW5fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCWlmICh2YWx1ZSkKKwkJc2V0X3Njb29wX2dwaW8oJmNvcmdpc2Nvb3BfZGV2aWNlLmRldiwgQ09SR0lfU0NQX0xFRF9HUkVFTik7CisJZWxzZQorCQlyZXNldF9zY29vcF9ncGlvKCZjb3JnaXNjb29wX2RldmljZS5kZXYsIENPUkdJX1NDUF9MRURfR1JFRU4pOworfQorCitzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBjb3JnaV9hbWJlcl9sZWQgPSB7CisJLm5hbWUJCQk9ICJjb3JnaTphbWJlciIsCisJLmRlZmF1bHRfdHJpZ2dlcgk9ICJzaGFycHNsLWNoYXJnZSIsCisJLmJyaWdodG5lc3Nfc2V0CQk9IGNvcmdpbGVkX2FtYmVyX3NldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNvcmdpX2dyZWVuX2xlZCA9IHsKKwkubmFtZQkJCT0gImNvcmdpOmdyZWVuIiwKKwkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCisJLmJyaWdodG5lc3Nfc2V0CQk9IGNvcmdpbGVkX2dyZWVuX3NldCwKK307CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgY29yZ2lsZWRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUworCWlmIChjb3JnaV9hbWJlcl9sZWQudHJpZ2dlciAmJiBzdHJjbXAoY29yZ2lfYW1iZXJfbGVkLnRyaWdnZXItPm5hbWUsICJzaGFycHNsLWNoYXJnZSIpKQorI2VuZGlmCisJCWxlZF9jbGFzc2Rldl9zdXNwZW5kKCZjb3JnaV9hbWJlcl9sZWQpOworCWxlZF9jbGFzc2Rldl9zdXNwZW5kKCZjb3JnaV9ncmVlbl9sZWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcmdpbGVkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJbGVkX2NsYXNzZGV2X3Jlc3VtZSgmY29yZ2lfYW1iZXJfbGVkKTsKKwlsZWRfY2xhc3NkZXZfcmVzdW1lKCZjb3JnaV9ncmVlbl9sZWQpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgY29yZ2lsZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZjb3JnaV9hbWJlcl9sZWQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZjb3JnaV9ncmVlbl9sZWQpOworCWlmIChyZXQgPCAwKQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmY29yZ2lfYW1iZXJfbGVkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY29yZ2lsZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmNvcmdpX2FtYmVyX2xlZCk7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmNvcmdpX2dyZWVuX2xlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvcmdpbGVkX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gY29yZ2lsZWRfcHJvYmUsCisJLnJlbW92ZQkJPSBjb3JnaWxlZF9yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBjb3JnaWxlZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gY29yZ2lsZWRfcmVzdW1lLAorI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJjb3JnaS1sZWQiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaWxlZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY29yZ2lsZWRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNvcmdpbGVkX2V4aXQodm9pZCkKK3sKKyAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmdpbGVkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNvcmdpbGVkX2luaXQpOworbW9kdWxlX2V4aXQoY29yZ2lsZWRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb3JnaSBMRUQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1peHA0eHgtZ3Bpby5jIGIvZHJpdmVycy9sZWRzL2xlZHMtaXhwNHh4LWdwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGNlZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtaXhwNHh4LWdwaW8uYwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIElYUDRYWCBHUElPIGRyaXZlciBMRUQgZHJpdmVyCisgKgorICogQXV0aG9yOiBKb2huIEJvd2xlciA8amJvd2xlckBhY20ub3JnPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBKb2huIEJvd2xlcgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkKKyAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQKKyAqIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUKKyAqIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0CisgKiBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorICogcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCisgKiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyAqIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRgorICogQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorICogVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCitleHRlcm4gc3BpbmxvY2tfdCBncGlvX2xvY2s7CisKKy8qIFVwIHRvIDE2IGdwaW8gbGluZXMgYXJlIHBvc3NpYmxlLiAqLworI2RlZmluZSBHUElPX01BWCAxNgorc3RhdGljIHN0cnVjdCBpeHA0eHhncGlvbGVkX2RldmljZSB7CisJc3RydWN0IGxlZF9jbGFzc2RldiBhbmNlc3RvcjsKKwlpbnQgICAgICAgICAgICAgICBmbGFnczsKK30gaXhwNHh4Z3Bpb2xlZF9kZXZpY2VzW0dQSU9fTUFYXTsKKwordm9pZCBpeHA0eHhncGlvbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKnBsZWQsCisJCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaXhwNHh4Z3Bpb2xlZF9kZXZpY2UgKmNvbnN0IGl4cDR4eF9kZXYgPQorCQljb250YWluZXJfb2YocGxlZCwgc3RydWN0IGl4cDR4eGdwaW9sZWRfZGV2aWNlLCBhbmNlc3Rvcik7CisJY29uc3QgdTMyIGdwaW9fcGluID0gaXhwNHh4X2RldiAtIGl4cDR4eGdwaW9sZWRfZGV2aWNlczsKKworCWlmIChncGlvX3BpbiA8IEdQSU9fTUFYICYmIGl4cDR4eF9kZXYtPmFuY2VzdG9yLm5hbWUgIT0gMCkgeworCQkvKiBTZXQgb3IgY2xlYXIgdGhlICdncGlvX3BpbicgYml0IGFjY29yZGluZyB0byB0aGUgc3R5bGUKKwkJICogYW5kIHRoZSByZXF1aXJlZCBzZXR0aW5nICh2YWx1ZSA+IDAgPT0gb24pCisJCSAqLworCQljb25zdCBpbnQgZ3Bpb192YWx1ZSA9CisJCQkodmFsdWUgPiAwKSA9PSAoaXhwNHh4X2Rldi0+ZmxhZ3MgIT0gSVhQNFhYX0dQSU9fTE9XKSA/CisJCQkJSVhQNFhYX0dQSU9fSElHSCA6IElYUDRYWF9HUElPX0xPVzsKKworCQl7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQkJZ3Bpb19saW5lX3NldChncGlvX3BpbiwgZ3Bpb192YWx1ZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJfQorCX0KK30KKworLyogTEVEcyBhcmUgZGVzY3JpYmVkIGluIHJlc291cmNlcywgdGhlIGZvbGxvd2luZyBpdGVyYXRlcyBvdmVyIHRoZSB2YWxpZAorICogTEVEIHJlc291cmNlcy4KKyAqLworI2RlZmluZSBmb3JfYWxsX2xlZHMoaSwgcGRldikgXAorCWZvciAoaT0wOyBpPHBkZXYtPm51bV9yZXNvdXJjZXM7ICsraSkgXAorCQlpZiAocGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPCBHUElPX01BWCAmJiBcCisJCQlwZGV2LT5yZXNvdXJjZVtpXS5uYW1lICE9IDApCisKKy8qIFRoZSBmb2xsb3dpbmcgYXBwbGllcyAnb3BlcmF0aW9uJyB0byBlYWNoIExFRCBmcm9tIHRoZSBnaXZlbiBwbGF0Zm9ybSwKKyAqIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyAwIHRvIGFsbG93IHRhaWwgY2FsbCBlbGltaW5hdGlvbi4KKyAqLworc3RhdGljIGludCBhcHBseV90b19hbGxfbGVkcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXZvaWQgKCpvcGVyYXRpb24pKHN0cnVjdCBsZWRfY2xhc3NkZXYgKnBsZWQpKQoreworCWludCBpOworCisJZm9yX2FsbF9sZWRzKGksIHBkZXYpCisJCW9wZXJhdGlvbigmaXhwNHh4Z3Bpb2xlZF9kZXZpY2VzW3BkZXYtPnJlc291cmNlW2ldLnN0YXJ0XS5hbmNlc3Rvcik7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaXhwNHh4Z3Bpb2xlZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBhcHBseV90b19hbGxfbGVkcyhwZGV2LCBsZWRfY2xhc3NkZXZfc3VzcGVuZCk7Cit9CisKK3N0YXRpYyBpbnQgaXhwNHh4Z3Bpb2xlZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gYXBwbHlfdG9fYWxsX2xlZHMocGRldiwgbGVkX2NsYXNzZGV2X3Jlc3VtZSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaXhwNHh4Z3Bpb2xlZF9yZW1vdmVfb25lX2xlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpwbGVkKQoreworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKHBsZWQpOworCXBsZWQtPm5hbWUgPSAwOworfQorCitzdGF0aWMgaW50IGl4cDR4eGdwaW9sZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGFwcGx5X3RvX2FsbF9sZWRzKHBkZXYsIGl4cDR4eGdwaW9sZWRfcmVtb3ZlX29uZV9sZWQpOworfQorCitzdGF0aWMgaW50IGl4cDR4eGdwaW9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwkvKiBUaGUgYm9hcmQgbGV2ZWwgaGFzIHRvIHRlbGwgdGhlIGRyaXZlciB3aGVyZSB0aGUKKwkgKiBMRURzIGFyZSBjb25uZWN0ZWQgLSB0aGVyZSBpcyBubyB3YXkgdG8gZmluZCBvdXQKKwkgKiBlbGVjdHJpY2FsbHkuICBJdCBtdXN0IGFsc28gc2F5IHdoZXRoZXIgdGhlIEdQSU8KKwkgKiBsaW5lcyBhcmUgYWN0aXZlIGhpZ2ggb3IgYWN0aXZlIGxvdy4KKwkgKgorCSAqIFRvIGRvIHRoaXMgcmVhZCB0aGUgbnVtX3Jlc291cmNlcyAodGhlIG51bWJlciBvZgorCSAqIExFRHMpIGFuZCB0aGUgc3RydWN0IHJlc291cmNlICh0aGUgZGF0YSBmb3IgZWFjaAorCSAqIExFRCkuICBUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSByZXNvdXJjZSwgYW5kIGl0CisJICogaXNuJ3QgY29waWVkLgorCSAqLworCWludCBpOworCisJZm9yX2FsbF9sZWRzKGksIHBkZXYpIHsKKwkJY29uc3QgdTggZ3Bpb19waW4gPSBwZGV2LT5yZXNvdXJjZVtpXS5zdGFydDsKKwkJaW50ICAgICAgcmM7CisKKwkJaWYgKGl4cDR4eGdwaW9sZWRfZGV2aWNlc1tncGlvX3Bpbl0uYW5jZXN0b3IubmFtZSA9PSAwKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCQlncGlvX2xpbmVfY29uZmlnKGdwaW9fcGluLCBJWFA0WFhfR1BJT19PVVQpOworCQkJLyogVGhlIGNvbmZpZyBjYW4sIGFwcGFyZW50bHksIHJlc2V0IHRoZSBzdGF0ZSwKKwkJCSAqIEkgc3VzcGVjdCB0aGUgZ3BpbyBsaW5lIG1heSBiZSBhbiBpbnB1dCBhbmQKKwkJCSAqIHRoZSBjb25maWcgbWF5IGNhdXNlIHRoZSBsaW5lIHRvIGJlIGxhdGNoZWQsCisJCQkgKiBzbyB0aGUgc2V0dGluZyBkZXBlbmRzIG9uIGhvdyB0aGUgTEVEIGlzCisJCQkgKiBjb25uZWN0ZWQgdG8gdGhlIGxpbmUgKHdoaWNoIGFmZmVjdHMgaG93IGl0CisJCQkgKiBmbG9hdHMgaWYgbm90IGRyaXZlbikuCisJCQkgKi8KKwkJCWdwaW9fbGluZV9zZXQoZ3Bpb19waW4sIElYUDRYWF9HUElPX0hJR0gpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisKKwkJCWl4cDR4eGdwaW9sZWRfZGV2aWNlc1tncGlvX3Bpbl0uZmxhZ3MgPQorCQkJCXBkZXYtPnJlc291cmNlW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTOworCisJCQlpeHA0eHhncGlvbGVkX2RldmljZXNbZ3Bpb19waW5dLmFuY2VzdG9yLm5hbWUgPQorCQkJCXBkZXYtPnJlc291cmNlW2ldLm5hbWU7CisKKwkJCS8qIFRoaXMgaXMgaG93IGEgYm9hcmQgbWFudWZhY3R1cmVyIG1ha2VzIHRoZSBMRUQKKwkJCSAqIGNvbWUgb24gb24gcmVzZXQgLSB0aGUgR1BJTyBsaW5lIHdpbGwgYmUgaGlnaCwgc28KKwkJCSAqIG1ha2UgdGhlIExFRCBsaWdodCB3aGVuIHRoZSBsaW5lIGlzIGxvdy4uLgorCQkJICovCisJCQlpZiAoaXhwNHh4Z3Bpb2xlZF9kZXZpY2VzW2dwaW9fcGluXS5mbGFncyAhPSBJWFA0WFhfR1BJT19MT1cpCisJCQkJaXhwNHh4Z3Bpb2xlZF9kZXZpY2VzW2dwaW9fcGluXS5hbmNlc3Rvci5icmlnaHRuZXNzID0gMTAwOworCQkJZWxzZQorCQkJCWl4cDR4eGdwaW9sZWRfZGV2aWNlc1tncGlvX3Bpbl0uYW5jZXN0b3IuYnJpZ2h0bmVzcyA9IDA7CisKKwkJCWl4cDR4eGdwaW9sZWRfZGV2aWNlc1tncGlvX3Bpbl0uYW5jZXN0b3IuZmxhZ3MgPSAwOworCisJCQlpeHA0eHhncGlvbGVkX2RldmljZXNbZ3Bpb19waW5dLmFuY2VzdG9yLmJyaWdodG5lc3Nfc2V0ID0KKwkJCQlpeHA0eHhncGlvbGVkX2JyaWdodG5lc3Nfc2V0OworCisJCQlpeHA0eHhncGlvbGVkX2RldmljZXNbZ3Bpb19waW5dLmFuY2VzdG9yLmRlZmF1bHRfdHJpZ2dlciA9IDA7CisJCX0KKworCQlyYyA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LAorCQkJCSZpeHA0eHhncGlvbGVkX2RldmljZXNbZ3Bpb19waW5dLmFuY2VzdG9yKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJaXhwNHh4Z3Bpb2xlZF9kZXZpY2VzW2dwaW9fcGluXS5hbmNlc3Rvci5uYW1lID0gMDsKKwkJCWl4cDR4eGdwaW9sZWRfcmVtb3ZlKHBkZXYpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGl4cDR4eGdwaW9sZWRfZHJpdmVyID0geworCS5wcm9iZSAgID0gaXhwNHh4Z3Bpb2xlZF9wcm9iZSwKKwkucmVtb3ZlICA9IGl4cDR4eGdwaW9sZWRfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gaXhwNHh4Z3Bpb2xlZF9zdXNwZW5kLAorCS5yZXN1bWUgID0gaXhwNHh4Z3Bpb2xlZF9yZXN1bWUsCisjZW5kaWYKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUgPSAiSVhQNFhYLUdQSU8tTEVEIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXhwNHh4Z3Bpb2xlZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwNHh4Z3Bpb2xlZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXhwNHh4Z3Bpb2xlZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eGdwaW9sZWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaXhwNHh4Z3Bpb2xlZF9pbml0KTsKK21vZHVsZV9leGl0KGl4cDR4eGdwaW9sZWRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkpvaG4gQm93bGVyIDxqYm93bGVyQGFjbS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklYUDRYWCBHUElPIExFRCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1JVC9HUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWxvY29tby5jIGIvZHJpdmVycy9sZWRzL2xlZHMtbG9jb21vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5YTg2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxvY29tby5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL2xlZHMvbG9jb21vLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSm9obiBMZW56IDxsZW56QGNzLndpc2MuZWR1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvbG9jb21vLmg+CisKK3N0YXRpYyB2b2lkIGxvY29tb2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCQllbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlLCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBsb2NvbW9fZGV2ICpsb2NvbW9fZGV2ID0gTE9DT01PX0RFVihsZWRfY2Rldi0+Y2xhc3NfZGV2LT5kZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHZhbHVlKQorCQlsb2NvbW9fd3JpdGVsKExPQ09NT19MUFRfVE9GSCwgbG9jb21vX2Rldi0+bWFwYmFzZSArIG9mZnNldCk7CisJZWxzZQorCQlsb2NvbW9fd3JpdGVsKExPQ09NT19MUFRfVE9GTCwgbG9jb21vX2Rldi0+bWFwYmFzZSArIG9mZnNldCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBsb2NvbW9sZWRfYnJpZ2h0bmVzc19zZXQwKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJbG9jb21vbGVkX2JyaWdodG5lc3Nfc2V0KGxlZF9jZGV2LCB2YWx1ZSwgTE9DT01PX0xQVDApOworfQorCitzdGF0aWMgdm9pZCBsb2NvbW9sZWRfYnJpZ2h0bmVzc19zZXQxKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJbG9jb21vbGVkX2JyaWdodG5lc3Nfc2V0KGxlZF9jZGV2LCB2YWx1ZSwgTE9DT01PX0xQVDEpOworfQorCitzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBsb2NvbW9fbGVkMCA9IHsKKwkubmFtZQkJCT0gImxvY29tbzphbWJlciIsCisJLmJyaWdodG5lc3Nfc2V0CQk9IGxvY29tb2xlZF9icmlnaHRuZXNzX3NldDAsCit9OworCitzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBsb2NvbW9fbGVkMSA9IHsKKwkubmFtZQkJCT0gImxvY29tbzpncmVlbiIsCisJLmJyaWdodG5lc3Nfc2V0CQk9IGxvY29tb2xlZF9icmlnaHRuZXNzX3NldDEsCit9OworCitzdGF0aWMgaW50IGxvY29tb2xlZF9wcm9iZShzdHJ1Y3QgbG9jb21vX2RldiAqbGRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZsZGV2LT5kZXYsICZsb2NvbW9fbGVkMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmxkZXYtPmRldiwgJmxvY29tb19sZWQxKTsKKwlpZiAocmV0IDwgMCkKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxvY29tb19sZWQwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG9jb21vbGVkX3JlbW92ZShzdHJ1Y3QgbG9jb21vX2RldiAqZGV2KQoreworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2NvbW9fbGVkMCk7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxvY29tb19sZWQxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsb2NvbW9fZHJpdmVyIGxvY29tb2xlZF9kcml2ZXIgPSB7CisJLmRydiA9IHsKKwkJLm5hbWUgPSAibG9jb21vbGVkIgorCX0sCisJLmRldmlkCT0gTE9DT01PX0RFVklEX0xFRCwKKwkucHJvYmUJPSBsb2NvbW9sZWRfcHJvYmUsCisJLnJlbW92ZQk9IGxvY29tb2xlZF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsb2NvbW9sZWRfaW5pdCh2b2lkKQoreworCXJldHVybiBsb2NvbW9fZHJpdmVyX3JlZ2lzdGVyKCZsb2NvbW9sZWRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGxvY29tb2xlZF9pbml0KTsKKworTU9EVUxFX0FVVEhPUigiSm9obiBMZW56IDxsZW56QGNzLndpc2MuZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMb2NvbW8gTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGNmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qIGRyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYworICoKKyAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIC0gTEVEcyBHUElPIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbGVkcy1ncGlvLmg+CisKKy8qIG91ciBjb250ZXh0ICovCisKK3N0cnVjdCBzM2MyNHh4X2dwaW9fbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2CQkgY2RldjsKKwlzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEJKnBkYXRhOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqcGRldl90b19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqdG9fZ3BpbyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCwgY2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0eHhfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkICpsZWQgPSB0b19ncGlvKGxlZF9jZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgKnBkID0gbGVkLT5wZGF0YTsKKworCS8qIHRoZXJlIHdpbGwgYmUgYSBzb3J0IGRlbGF5IGJldHdlZW4gc2V0dGluZyB0aGUgb3V0cHV0IGFuZAorCSAqIGdvaW5nIGZyb20gb3V0cHV0IHRvIGlucHV0IHdoZW4gdXNpbmcgdHJpc3RhdGUuICovCisKKwlzM2MyNDEwX2dwaW9fc2V0cGluKHBkLT5ncGlvLCAodmFsdWUgPyAxIDogMCkgXgorCQkJICAgIChwZC0+ZmxhZ3MgJiBTM0MyNFhYX0xFREZfQUNUTE9XKSk7CisKKwlpZiAocGQtPmZsYWdzICYgUzNDMjRYWF9MRURGX1RSSVNUQVRFKQorCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBkLT5ncGlvLAorCQkJCSAgICB2YWx1ZSA/IFMzQzI0MTBfR1BJT19PVVRQVVQgOiBTM0MyNDEwX0dQSU9fSU5QVVQpOworCit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqbGVkID0gcGRldl90b19ncGlvKGRldik7CisKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2KTsKKwlrZnJlZShsZWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2MyNHh4X2xlZF9wbGF0ZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkICpsZWQ7CisJaW50IHJldDsKKworCWxlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxlZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGxlZCk7CisKKwlsZWQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBzM2MyNHh4X2xlZF9zZXQ7CisJbGVkLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHBkYXRhLT5kZWZfdHJpZ2dlcjsKKwlsZWQtPmNkZXYubmFtZSA9IHBkYXRhLT5uYW1lOworCisJbGVkLT5wZGF0YSA9IHBkYXRhOworCisJLyogbm8gcG9pbnQgaW4gaGF2aW5nIGEgcHVsbC11cCBpZiB3ZSBhcmUgYWx3YXlzIGRyaXZpbmcgKi8KKworCWlmIChwZGF0YS0+ZmxhZ3MgJiBTM0MyNFhYX0xFREZfVFJJU1RBVEUpIHsKKwkJczNjMjQxMF9ncGlvX3NldHBpbihwZGF0YS0+Z3BpbywgMCk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4ocGRhdGEtPmdwaW8sIFMzQzI0MTBfR1BJT19JTlBVVCk7CisJfSBlbHNlIHsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChwZGF0YS0+Z3BpbywgMCk7CisJCXMzYzI0MTBfZ3Bpb19zZXRwaW4ocGRhdGEtPmdwaW8sIDApOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBkYXRhLT5ncGlvLCBTM0MyNDEwX0dQSU9fT1VUUFVUKTsKKwl9CisKKwkvKiByZWdpc3RlciBvdXIgbmV3IGxlZCBkZXZpY2UgKi8KKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmZGV2LT5kZXYsICZsZWQtPmNkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibGVkX2NsYXNzZGV2X3JlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdF9lcnIxOworCX0KKworCXJldHVybiAwOworCisgZXhpdF9lcnIxOgorCWtmcmVlKGxlZCk7CisJcmV0dXJuIHJldDsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHMzYzI0eHhfbGVkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHMzYzI0eHhfZ3Bpb19sZWQgKmxlZCA9IHBkZXZfdG9fZ3BpbyhkZXYpOworCisJbGVkX2NsYXNzZGV2X3N1c3BlbmQoJmxlZC0+Y2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqbGVkID0gcGRldl90b19ncGlvKGRldik7CisKKwlsZWRfY2xhc3NkZXZfcmVzdW1lKCZsZWQtPmNkZXYpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgczNjMjR4eF9sZWRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0eHhfbGVkX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjR4eF9sZWRfZHJpdmVyID0geworCS5wcm9iZQkJPSBzM2MyNHh4X2xlZF9wcm9iZSwKKwkucmVtb3ZlCQk9IHMzYzI0eHhfbGVkX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHMzYzI0eHhfbGVkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNHh4X2xlZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9sZWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0eHhfbGVkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNHh4X2xlZF9leGl0KHZvaWQpCit7CisgCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNHh4X2xlZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzM2MyNHh4X2xlZF9pbml0KTsKK21vZHVsZV9leGl0KHMzYzI0eHhfbGVkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzI0WFggTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtc3BpdHouYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXNwaXR6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViYmVmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXNwaXR6LmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBMRUQgVHJpZ2dlcnMgQ29yZQorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDYgT3BlbmVkaGFuZCBMdGQuCisgKgorICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcGl0ei5oPgorCitzdGF0aWMgdm9pZCBzcGl0emxlZF9hbWJlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJaWYgKHZhbHVlKQorCQlzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTUElUWl9TQ1BfTEVEX09SQU5HRSk7CisJZWxzZQorCQlyZXNldF9zY29vcF9ncGlvKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNQSVRaX1NDUF9MRURfT1JBTkdFKTsKK30KKworc3RhdGljIHZvaWQgc3BpdHpsZWRfZ3JlZW5fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCWlmICh2YWx1ZSkKKwkJc2V0X3Njb29wX2dwaW8oJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwgU1BJVFpfU0NQX0xFRF9HUkVFTik7CisJZWxzZQorCQlyZXNldF9zY29vcF9ncGlvKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNQSVRaX1NDUF9MRURfR1JFRU4pOworfQorCitzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBzcGl0el9hbWJlcl9sZWQgPSB7CisJLm5hbWUJCQk9ICJzcGl0ejphbWJlciIsCisJLmRlZmF1bHRfdHJpZ2dlcgk9ICJzaGFycHNsLWNoYXJnZSIsCisJLmJyaWdodG5lc3Nfc2V0CQk9IHNwaXR6bGVkX2FtYmVyX3NldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHNwaXR6X2dyZWVuX2xlZCA9IHsKKwkubmFtZQkJCT0gInNwaXR6OmdyZWVuIiwKKwkuZGVmYXVsdF90cmlnZ2VyCT0gImlkZS1kaXNrIiwKKwkuYnJpZ2h0bmVzc19zZXQJCT0gc3BpdHpsZWRfZ3JlZW5fc2V0LAorfTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzcGl0emxlZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCisJaWYgKHNwaXR6X2FtYmVyX2xlZC50cmlnZ2VyICYmIHN0cmNtcChzcGl0el9hbWJlcl9sZWQudHJpZ2dlci0+bmFtZSwgInNoYXJwc2wtY2hhcmdlIikpCisjZW5kaWYKKwkJbGVkX2NsYXNzZGV2X3N1c3BlbmQoJnNwaXR6X2FtYmVyX2xlZCk7CisJbGVkX2NsYXNzZGV2X3N1c3BlbmQoJnNwaXR6X2dyZWVuX2xlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3BpdHpsZWRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlsZWRfY2xhc3NkZXZfcmVzdW1lKCZzcGl0el9hbWJlcl9sZWQpOworCWxlZF9jbGFzc2Rldl9yZXN1bWUoJnNwaXR6X2dyZWVuX2xlZCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzcGl0emxlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlpZiAobWFjaGluZV9pc19ha2l0YSgpKQorCQlzcGl0el9ncmVlbl9sZWQuZGVmYXVsdF90cmlnZ2VyID0gIm5hbmQtZGlzayI7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJnNwaXR6X2FtYmVyX2xlZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJnNwaXR6X2dyZWVuX2xlZCk7CisJaWYgKHJldCA8IDApCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZzcGl0el9hbWJlcl9sZWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzcGl0emxlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3Rlcigmc3BpdHpfYW1iZXJfbGVkKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3Rlcigmc3BpdHpfZ3JlZW5fbGVkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGl0emxlZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNwaXR6bGVkX3Byb2JlLAorCS5yZW1vdmUJCT0gc3BpdHpsZWRfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gc3BpdHpsZWRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNwaXR6bGVkX3Jlc3VtZSwKKyNlbmRpZgorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAic3BpdHotbGVkIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3BpdHpsZWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwaXR6bGVkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcGl0emxlZF9leGl0KHZvaWQpCit7CisgCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzcGl0emxlZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzcGl0emxlZF9pbml0KTsKK21vZHVsZV9leGl0KHNwaXR6bGVkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3BpdHogTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdG9zYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdG9zYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZThjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy10b3NhLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBMRUQgVHJpZ2dlcnMgQ29yZQorICoKKyAqIENvcHlyaWdodCAyMDA1IERpcmsgT3BmZXIKKyAqCisgKiBBdXRob3I6IERpcmsgT3BmZXIgPERpcmtAT3BmZXItT25saW5lLmRlPgorICoJYmFzZWQgb24gc3BpdHouYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3Rvc2EuaD4KKworc3RhdGljIHZvaWQgdG9zYWxlZF9hbWJlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlpZiAodmFsdWUpCisJCXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfamNfZGV2aWNlLmRldiwKKwkJCQlUT1NBX1NDT09QX0pDX0NIUkdfRVJSX0xFRCk7CisJZWxzZQorCQlyZXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfamNfZGV2aWNlLmRldiwKKwkJCQlUT1NBX1NDT09QX0pDX0NIUkdfRVJSX0xFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2FsZWRfZ3JlZW5fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJaWYgKHZhbHVlKQorCQlzZXRfc2Nvb3BfZ3BpbygmdG9zYXNjb29wX2pjX2RldmljZS5kZXYsCisJCQkJVE9TQV9TQ09PUF9KQ19OT1RFX0xFRCk7CisJZWxzZQorCQlyZXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfamNfZGV2aWNlLmRldiwKKwkJCQlUT1NBX1NDT09QX0pDX05PVEVfTEVEKTsKK30KKworc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgdG9zYV9hbWJlcl9sZWQgPSB7CisJLm5hbWUJCQk9ICJ0b3NhOmFtYmVyIiwKKwkuZGVmYXVsdF90cmlnZ2VyCT0gInNoYXJwc2wtY2hhcmdlIiwKKwkuYnJpZ2h0bmVzc19zZXQJCT0gdG9zYWxlZF9hbWJlcl9zZXQsCit9OworCitzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiB0b3NhX2dyZWVuX2xlZCA9IHsKKwkubmFtZQkJCT0gInRvc2E6Z3JlZW4iLAorCS5kZWZhdWx0X3RyaWdnZXIJPSAibmFuZC1kaXNrIiwKKwkuYnJpZ2h0bmVzc19zZXQJCT0gdG9zYWxlZF9ncmVlbl9zZXQsCit9OworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHRvc2FsZWRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUworCWlmICh0b3NhX2FtYmVyX2xlZC50cmlnZ2VyICYmIHN0cmNtcCh0b3NhX2FtYmVyX2xlZC50cmlnZ2VyLT5uYW1lLAorCQkJCQkJInNoYXJwc2wtY2hhcmdlIikpCisjZW5kaWYKKwkJbGVkX2NsYXNzZGV2X3N1c3BlbmQoJnRvc2FfYW1iZXJfbGVkKTsKKwlsZWRfY2xhc3NkZXZfc3VzcGVuZCgmdG9zYV9ncmVlbl9sZWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvc2FsZWRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlsZWRfY2xhc3NkZXZfcmVzdW1lKCZ0b3NhX2FtYmVyX2xlZCk7CisJbGVkX2NsYXNzZGV2X3Jlc3VtZSgmdG9zYV9ncmVlbl9sZWQpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgdG9zYWxlZF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgdG9zYWxlZF9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgdG9zYWxlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJnRvc2FfYW1iZXJfbGVkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmdG9zYV9ncmVlbl9sZWQpOworCWlmIChyZXQgPCAwKQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmdG9zYV9hbWJlcl9sZWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0b3NhbGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZ0b3NhX2FtYmVyX2xlZCk7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnRvc2FfZ3JlZW5fbGVkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0b3NhbGVkX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdG9zYWxlZF9wcm9iZSwKKwkucmVtb3ZlCQk9IHRvc2FsZWRfcmVtb3ZlLAorCS5zdXNwZW5kCT0gdG9zYWxlZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdG9zYWxlZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJ0b3NhLWxlZCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvc2FsZWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRvc2FsZWRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRvc2FsZWRfZXhpdCh2b2lkKQoreworIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdG9zYWxlZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0b3NhbGVkX2luaXQpOworbW9kdWxlX2V4aXQodG9zYWxlZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRGlyayBPcGZlciA8RGlya0BPcGZlci1PbmxpbmUuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRvc2EgTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMuaCBiL2RyaXZlcnMvbGVkcy9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxNWM0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIExFRCBDb3JlCisgKgorICogQ29weXJpZ2h0IDIwMDUgT3BlbmVkaGFuZCBMdGQuCisgKgorICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2lmbmRlZiBfX0xFRFNfSF9JTkNMVURFRAorI2RlZmluZSBfX0xFRFNfSF9JTkNMVURFRAorCisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF9icmlnaHRuZXNzKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCQllbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCWlmICh2YWx1ZSA+IExFRF9GVUxMKQorCQl2YWx1ZSA9IExFRF9GVUxMOworCWxlZF9jZGV2LT5icmlnaHRuZXNzID0gdmFsdWU7CisJaWYgKCEobGVkX2NkZXYtPmZsYWdzICYgTEVEX1NVU1BFTkRFRCkpCisJCWxlZF9jZGV2LT5icmlnaHRuZXNzX3NldChsZWRfY2RldiwgdmFsdWUpOworfQorCitleHRlcm4gcndsb2NrX3QgbGVkc19saXN0X2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsZWRzX2xpc3Q7CisKKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwordm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7Cit2b2lkIGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcik7CisjZWxzZQorI2RlZmluZSBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdCh4KSBkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBsZWRfdHJpZ2dlcl9zZXQoeCwgeSkgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCitzc2l6ZV90IGxlZF90cmlnZ2VyX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJc2l6ZV90IGNvdW50KTsKK3NzaXplX3QgbGVkX3RyaWdnZXJfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKmJ1Zik7CisKKyNlbmRpZgkvKiBfX0xFRFNfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHRyaWctaWRlLWRpc2suYyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWlkZS1kaXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2NTE4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWlkZS1kaXNrLmMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIExFRCBJREUtRGlzayBBY3Rpdml0eSBUcmlnZ2VyCisgKgorICogQ29weXJpZ2h0IDIwMDYgT3BlbmVkaGFuZCBMdGQuCisgKgorICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorCitzdGF0aWMgdm9pZCBsZWR0cmlnX2lkZV90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKTsKKworREVGSU5FX0xFRF9UUklHR0VSKGxlZHRyaWdfaWRlKTsKK3N0YXRpYyBERUZJTkVfVElNRVIobGVkdHJpZ19pZGVfdGltZXIsIGxlZHRyaWdfaWRlX3RpbWVyZnVuYywgMCwgMCk7CitzdGF0aWMgaW50IGlkZV9hY3Rpdml0eTsKK3N0YXRpYyBpbnQgaWRlX2xhc3RhY3Rpdml0eTsKKwordm9pZCBsZWR0cmlnX2lkZV9hY3Rpdml0eSh2b2lkKQoreworCWlkZV9hY3Rpdml0eSsrOworCWlmICghdGltZXJfcGVuZGluZygmbGVkdHJpZ19pZGVfdGltZXIpKQorCQltb2RfdGltZXIoJmxlZHRyaWdfaWRlX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCkpOworfQorRVhQT1JUX1NZTUJPTChsZWR0cmlnX2lkZV9hY3Rpdml0eSk7CisKK3N0YXRpYyB2b2lkIGxlZHRyaWdfaWRlX3RpbWVyZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaWYgKGlkZV9sYXN0YWN0aXZpdHkgIT0gaWRlX2FjdGl2aXR5KSB7CisJCWlkZV9sYXN0YWN0aXZpdHkgPSBpZGVfYWN0aXZpdHk7CisJCWxlZF90cmlnZ2VyX2V2ZW50KGxlZHRyaWdfaWRlLCBMRURfRlVMTCk7CisJICAgIAltb2RfdGltZXIoJmxlZHRyaWdfaWRlX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCkpOworCX0gZWxzZSB7CisJCWxlZF90cmlnZ2VyX2V2ZW50KGxlZHRyaWdfaWRlLCBMRURfT0ZGKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZHRyaWdfaWRlX2luaXQodm9pZCkKK3sKKwlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImlkZS1kaXNrIiwgJmxlZHRyaWdfaWRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxlZHRyaWdfaWRlX2V4aXQodm9pZCkKK3sKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShsZWR0cmlnX2lkZSk7Cit9CisKK21vZHVsZV9pbml0KGxlZHRyaWdfaWRlX2luaXQpOworbW9kdWxlX2V4aXQobGVkdHJpZ19pZGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMRUQgSURFIERpc2sgQWN0aXZpdHkgVHJpZ2dlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmMTQxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBMRUQgS2VybmVsIFRpbWVyIFRyaWdnZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2IE9wZW5lZGhhbmQgTHRkLgorICoKKyAqIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgImxlZHMuaCIKKworc3RydWN0IHRpbWVyX3RyaWdfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBkZWxheV9vbjsJCS8qIG1pbGxpc2Vjb25kcyBvbiAqLworCXVuc2lnbmVkIGxvbmcgZGVsYXlfb2ZmOwkvKiBtaWxsaXNlY29uZHMgb2ZmICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Cit9OworCitzdGF0aWMgdm9pZCBsZWRfdGltZXJfZnVuY3Rpb24odW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gKHN0cnVjdCBsZWRfY2xhc3NkZXYgKikgZGF0YTsKKwlzdHJ1Y3QgdGltZXJfdHJpZ19kYXRhICp0aW1lcl9kYXRhID0gbGVkX2NkZXYtPnRyaWdnZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGJyaWdodG5lc3MgPSBMRURfT0ZGOworCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSB0aW1lcl9kYXRhLT5kZWxheV9vZmY7CisKKwlpZiAoIXRpbWVyX2RhdGEtPmRlbGF5X29uIHx8ICF0aW1lcl9kYXRhLT5kZWxheV9vZmYpIHsKKwkJbGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghbGVkX2NkZXYtPmJyaWdodG5lc3MpIHsKKwkJYnJpZ2h0bmVzcyA9IExFRF9GVUxMOworCQlkZWxheSA9IHRpbWVyX2RhdGEtPmRlbGF5X29uOworCX0KKworCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgYnJpZ2h0bmVzcyk7CisKKwltb2RfdGltZXIoJnRpbWVyX2RhdGEtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworfQorCitzdGF0aWMgc3NpemVfdCBsZWRfZGVsYXlfb25fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGNsYXNzX2dldF9kZXZkYXRhKGRldik7CisJc3RydWN0IHRpbWVyX3RyaWdfZGF0YSAqdGltZXJfZGF0YSA9IGxlZF9jZGV2LT50cmlnZ2VyX2RhdGE7CisKKwlzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgdGltZXJfZGF0YS0+ZGVsYXlfb24pOworCisJcmV0dXJuIHN0cmxlbihidWYpICsgMTsKK30KKworc3RhdGljIHNzaXplX3QgbGVkX2RlbGF5X29uX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJCXNpemVfdCBzaXplKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gY2xhc3NfZ2V0X2RldmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdGltZXJfdHJpZ19kYXRhICp0aW1lcl9kYXRhID0gbGVkX2NkZXYtPnRyaWdnZXJfZGF0YTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwljaGFyICphZnRlcjsKKwl1bnNpZ25lZCBsb25nIHN0YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmYWZ0ZXIsIDEwKTsKKwlzaXplX3QgY291bnQgPSBhZnRlciAtIGJ1ZjsKKworCWlmICgqYWZ0ZXIgJiYgaXNzcGFjZSgqYWZ0ZXIpKQorCQljb3VudCsrOworCisJaWYgKGNvdW50ID09IHNpemUpIHsKKwkJdGltZXJfZGF0YS0+ZGVsYXlfb24gPSBzdGF0ZTsKKwkJbW9kX3RpbWVyKCZ0aW1lcl9kYXRhLT50aW1lciwgamlmZmllcyArIDEpOworCQlyZXQgPSBjb3VudDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBsZWRfZGVsYXlfb2ZmX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBjbGFzc19nZXRfZGV2ZGF0YShkZXYpOworCXN0cnVjdCB0aW1lcl90cmlnX2RhdGEgKnRpbWVyX2RhdGEgPSBsZWRfY2Rldi0+dHJpZ2dlcl9kYXRhOworCisJc3ByaW50ZihidWYsICIlbHVcbiIsIHRpbWVyX2RhdGEtPmRlbGF5X29mZik7CisKKwlyZXR1cm4gc3RybGVuKGJ1ZikgKyAxOworfQorCitzdGF0aWMgc3NpemVfdCBsZWRfZGVsYXlfb2ZmX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJCXNpemVfdCBzaXplKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gY2xhc3NfZ2V0X2RldmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdGltZXJfdHJpZ19kYXRhICp0aW1lcl9kYXRhID0gbGVkX2NkZXYtPnRyaWdnZXJfZGF0YTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwljaGFyICphZnRlcjsKKwl1bnNpZ25lZCBsb25nIHN0YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmYWZ0ZXIsIDEwKTsKKwlzaXplX3QgY291bnQgPSBhZnRlciAtIGJ1ZjsKKworCWlmICgqYWZ0ZXIgJiYgaXNzcGFjZSgqYWZ0ZXIpKQorCQljb3VudCsrOworCisJaWYgKGNvdW50ID09IHNpemUpIHsKKwkJdGltZXJfZGF0YS0+ZGVsYXlfb2ZmID0gc3RhdGU7CisJCW1vZF90aW1lcigmdGltZXJfZGF0YS0+dGltZXIsIGppZmZpZXMgKyAxKTsKKwkJcmV0ID0gY291bnQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGRlbGF5X29uLCAwNjQ0LCBsZWRfZGVsYXlfb25fc2hvdywKKwkJCWxlZF9kZWxheV9vbl9zdG9yZSk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZGVsYXlfb2ZmLCAwNjQ0LCBsZWRfZGVsYXlfb2ZmX3Nob3csCisJCQlsZWRfZGVsYXlfb2ZmX3N0b3JlKTsKKworc3RhdGljIHZvaWQgdGltZXJfdHJpZ19hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlzdHJ1Y3QgdGltZXJfdHJpZ19kYXRhICp0aW1lcl9kYXRhOworCisJdGltZXJfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW1lcl90cmlnX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRpbWVyX2RhdGEpCisJCXJldHVybjsKKworCWxlZF9jZGV2LT50cmlnZ2VyX2RhdGEgPSB0aW1lcl9kYXRhOworCisJaW5pdF90aW1lcigmdGltZXJfZGF0YS0+dGltZXIpOworCXRpbWVyX2RhdGEtPnRpbWVyLmZ1bmN0aW9uID0gbGVkX3RpbWVyX2Z1bmN0aW9uOworCXRpbWVyX2RhdGEtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgbGVkX2NkZXY7CisKKwljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUobGVkX2NkZXYtPmNsYXNzX2RldiwKKwkJCQkmY2xhc3NfZGV2aWNlX2F0dHJfZGVsYXlfb24pOworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShsZWRfY2Rldi0+Y2xhc3NfZGV2LAorCQkJCSZjbGFzc19kZXZpY2VfYXR0cl9kZWxheV9vZmYpOworfQorCitzdGF0aWMgdm9pZCB0aW1lcl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCit7CisJc3RydWN0IHRpbWVyX3RyaWdfZGF0YSAqdGltZXJfZGF0YSA9IGxlZF9jZGV2LT50cmlnZ2VyX2RhdGE7CisKKwlpZiAodGltZXJfZGF0YSkgeworCQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUobGVkX2NkZXYtPmNsYXNzX2RldiwKKwkJCQkJJmNsYXNzX2RldmljZV9hdHRyX2RlbGF5X29uKTsKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGxlZF9jZGV2LT5jbGFzc19kZXYsCisJCQkJCSZjbGFzc19kZXZpY2VfYXR0cl9kZWxheV9vZmYpOworCQlkZWxfdGltZXJfc3luYygmdGltZXJfZGF0YS0+dGltZXIpOworCQlrZnJlZSh0aW1lcl9kYXRhKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgdGltZXJfbGVkX3RyaWdnZXIgPSB7CisJLm5hbWUgICAgID0gInRpbWVyIiwKKwkuYWN0aXZhdGUgPSB0aW1lcl90cmlnX2FjdGl2YXRlLAorCS5kZWFjdGl2YXRlID0gdGltZXJfdHJpZ19kZWFjdGl2YXRlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGltZXJfdHJpZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCZ0aW1lcl9sZWRfdHJpZ2dlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0aW1lcl90cmlnX2V4aXQodm9pZCkKK3sKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKCZ0aW1lcl9sZWRfdHJpZ2dlcik7Cit9CisKK21vZHVsZV9pbml0KHRpbWVyX3RyaWdfaW5pdCk7Cittb2R1bGVfZXhpdCh0aW1lcl90cmlnX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVGltZXIgTEVEIHRyaWdnZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCA1ZWJmZDFkLi41MjgyZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC02MjcsOCArNjI3LDggQEAKIAlpZih0aGVybV90eXBlID09IEFEVDc0NjApCiAJCWRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IyX2Zhbl9zcGVlZCk7CiAKLSNpZm5kZWYgQ09ORklHX0kyQ19LRVlXRVNUCi0JcmVxdWVzdF9tb2R1bGUoImkyYy1rZXl3ZXN0Iik7CisjaWZuZGVmIENPTkZJR19JMkNfUE9XRVJNQUMKKwlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7CiAjZW5kaWYKIAogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9LY29uZmlnIGIvZHJpdmVycy9tZC9LY29uZmlnCmluZGV4IGZkMmFhZTEuLmFjMjVhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvS2NvbmZpZworKysgYi9kcml2ZXJzL21kL0tjb25maWcKQEAgLTEzOSwxMSArMTM5LDEyIEBACiAJICBpcyBvbmxpbmUuICBIb3dldmVyIGl0IGlzIHN0aWxsIEVYUEVSSU1FTlRBTCBjb2RlLiAgSXQgc2hvdWxkCiAJICB3b3JrLCBidXQgcGxlYXNlIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBiYWNrdXBzLgogCi0JICBZb3Ugd2lsbCBuZWVkIGEgdmVyc2lvbiBvZiBtZGFkbSBuZXdlciB0aGFuIDIuMy4xLiAgIER1cmluZyB0aGUKLQkgIGVhcmx5IHN0YWdlIG9mIHJlc2hhcGUgdGhlcmUgaXMgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YQotCSAgaXMgYmVpbmcgb3Zlci13cml0dGVuLiAgQSBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUKLQkgIGZvciByZWNvdmVyeS4gIFRoZSBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlCi0JICBjcml0aWNhbCBzZWN0aW9uIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KKwkgIFlvdSB3aWxsIG5lZWQgbWRhZG0gdmVyaW9uIDIuNC4xIG9yIGxhdGVyIHRvIHVzZSB0aGlzCisJICBmZWF0dXJlIHNhZmVseS4gIER1cmluZyB0aGUgZWFybHkgc3RhZ2Ugb2YgcmVzaGFwZSB0aGVyZSBpcworCSAgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YSBpcyBiZWluZyBvdmVyLXdyaXR0ZW4uICBBCisJICBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUgZm9yIHJlY292ZXJ5LiAgVGhlCisJICBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24KKwkgIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KIAogCSAgVGhlIG1kYWRtIHVzYWdlIGlzIGUuZy4KIAkgICAgICAgbWRhZG0gLS1ncm93IC9kZXYvbWQxIC0tcmFpZC1kaXNrcz02CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRhcmdldC5jIGIvZHJpdmVycy9tZC9kbS10YXJnZXQuYwppbmRleCBhZWNkOWUwLi42NGZkOGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhcmdldC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGFyZ2V0LmMKQEAgLTc4LDggKzc4LDcgQEAKIAlpZiAoLS10aS0+dXNlID09IDApCiAJCW1vZHVsZV9wdXQodGktPnR0Lm1vZHVsZSk7CiAKLQlpZiAodGktPnVzZSA8IDApCi0JCUJVRygpOworCUJVR19PTih0aS0+dXNlIDwgMCk7CiAJdXBfcmVhZCgmX2xvY2spOwogCiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDAzOWUwNzEuLmYxOWI4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTE2Myw5ICsxNjMsMTkgQEAKIHsKIAlhdG9taWNfaW5jKCZtZF9ldmVudF9jb3VudCk7CiAJd2FrZV91cCgmbWRfZXZlbnRfd2FpdGVycyk7CisJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfYWN0aW9uIik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZF9uZXdfZXZlbnQpOwogCisvKiBBbHRlcm5hdGUgdmVyc2lvbiB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHRzCisgKiB3aGVuIGNhbGxpbmcgc3lzZnNfbm90aWZ5IGlzbid0IG5lZWRlZC4KKyAqLwordm9pZCBtZF9uZXdfZXZlbnRfaW5pbnRyKG1kZGV2X3QgKm1kZGV2KQoreworCWF0b21pY19pbmMoJm1kX2V2ZW50X2NvdW50KTsKKwl3YWtlX3VwKCZtZF9ldmVudF93YWl0ZXJzKTsKK30KKwogLyoKICAqIEVuYWJsZXMgdG8gaXRlcmF0ZSBvdmVyIGFsbCBleGlzdGluZyBtZCBhcnJheXMKICAqIGFsbF9tZGRldnNfbG9jayBwcm90ZWN0cyB0aGlzIGxpc3QuCkBAIC0yMTUsMTMgKzIyNSwxMSBAQAogCQlyZXR1cm47CiAJaWYgKCFtZGRldi0+cmFpZF9kaXNrcyAmJiBsaXN0X2VtcHR5KCZtZGRldi0+ZGlza3MpKSB7CiAJCWxpc3RfZGVsKCZtZGRldi0+YWxsX21kZGV2cyk7Ci0JCS8qIHRoYXQgYmxvY2tzICovCisJCXNwaW5fdW5sb2NrKCZhbGxfbWRkZXZzX2xvY2spOwogCQlibGtfY2xlYW51cF9xdWV1ZShtZGRldi0+cXVldWUpOwotCQkvKiB0aGF0IGFsc28gYmxvY2tzICovCiAJCWtvYmplY3RfdW5yZWdpc3RlcigmbWRkZXYtPmtvYmopOwotCQkvKiByZXN1bHQgYmxvd3MuLi4gKi8KLQl9Ci0Jc3Bpbl91bmxvY2soJmFsbF9tZGRldnNfbG9jayk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrKCZhbGxfbWRkZXZzX2xvY2spOwogfQogCiBzdGF0aWMgbWRkZXZfdCAqIG1kZGV2X2ZpbmQoZGV2X3QgdW5pdCkKQEAgLTI4MCwxMSArMjg4LDYgQEAKIAlyZXR1cm4gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZtZGRldi0+cmVjb25maWdfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWRkZXZfbG9ja191bmludGVycnVwdGlibGUobWRkZXZfdCAqIG1kZGV2KQotewotCW11dGV4X2xvY2soJm1kZGV2LT5yZWNvbmZpZ19tdXRleCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG1kZGV2X3RyeWxvY2sobWRkZXZfdCAqIG1kZGV2KQogewogCXJldHVybiBtdXRleF90cnlsb2NrKCZtZGRldi0+cmVjb25maWdfbXV0ZXgpOwpAQCAtMjI1OCw3ICsyMjYxLDcgQEAKIAl9IGVsc2UgewogCQlpZiAoY21kX21hdGNoKHBhZ2UsICJjaGVjayIpKQogCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJm1kZGV2LT5yZWNvdmVyeSk7Ci0JCWVsc2UgaWYgKGNtZF9tYXRjaChwYWdlLCAicmVwYWlyIikpCisJCWVsc2UgaWYgKCFjbWRfbWF0Y2gocGFnZSwgInJlcGFpciIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJc2V0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KTsKQEAgLTI0NTksOSArMjQ2MiwxMSBAQAogCiAJaWYgKCFlbnRyeS0+c2hvdykKIAkJcmV0dXJuIC1FSU87Ci0JbWRkZXZfbG9jayhtZGRldik7Ci0JcnYgPSBlbnRyeS0+c2hvdyhtZGRldiwgcGFnZSk7Ci0JbWRkZXZfdW5sb2NrKG1kZGV2KTsKKwlydiA9IG1kZGV2X2xvY2sobWRkZXYpOworCWlmICghcnYpIHsKKwkJcnYgPSBlbnRyeS0+c2hvdyhtZGRldiwgcGFnZSk7CisJCW1kZGV2X3VubG9jayhtZGRldik7CisJfQogCXJldHVybiBydjsKIH0KIApAQCAtMjQ3NSw5ICsyNDgwLDExIEBACiAKIAlpZiAoIWVudHJ5LT5zdG9yZSkKIAkJcmV0dXJuIC1FSU87Ci0JbWRkZXZfbG9jayhtZGRldik7Ci0JcnYgPSBlbnRyeS0+c3RvcmUobWRkZXYsIHBhZ2UsIGxlbmd0aCk7Ci0JbWRkZXZfdW5sb2NrKG1kZGV2KTsKKwlydiA9IG1kZGV2X2xvY2sobWRkZXYpOworCWlmICghcnYpIHsKKwkJcnYgPSBlbnRyeS0+c3RvcmUobWRkZXYsIHBhZ2UsIGxlbmd0aCk7CisJCW1kZGV2X3VubG9jayhtZGRldik7CisJfQogCXJldHVybiBydjsKIH0KIApAQCAtNDE1MSw3ICs0MTU4LDcgQEAKIAlzZXRfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpOwogCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotCW1kX25ld19ldmVudChtZGRldik7CisJbWRfbmV3X2V2ZW50X2luaW50cihtZGRldik7CiB9CiAKIC8qIHNlcV9maWxlIGltcGxlbWVudGF0aW9uIC9wcm9jL21kc3RhdCAqLwpAQCAtNDM0Miw4ICs0MzQ5LDkgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKG1kZGV2X2xvY2sobWRkZXYpIT0wKSAKKwlpZiAobWRkZXZfbG9jayhtZGRldikgPCAwKQogCQlyZXR1cm4gLUVJTlRSOworCiAJaWYgKG1kZGV2LT5wZXJzIHx8IG1kZGV2LT5yYWlkX2Rpc2tzIHx8ICFsaXN0X2VtcHR5KCZtZGRldi0+ZGlza3MpKSB7CiAJCXNlcV9wcmludGYoc2VxLCAiJXMgOiAlc2FjdGl2ZSIsIG1kbmFtZShtZGRldiksCiAJCQkJCQltZGRldi0+cGVycyA/ICIiIDogImluIik7CkBAIC01MDI5LDggKzUwMzcsMTAgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IHN0b3BwaW5nIGFsbCBtZCBkZXZpY2VzLlxuIik7CiAKIAkJSVRFUkFURV9NRERFVihtZGRldix0bXApCi0JCQlpZiAobWRkZXZfdHJ5bG9jayhtZGRldikpCisJCQlpZiAobWRkZXZfdHJ5bG9jayhtZGRldikpIHsKIAkJCQlkb19tZF9zdG9wIChtZGRldiwgMSk7CisJCQkJbWRkZXZfdW5sb2NrKG1kZGV2KTsKKwkJCX0KIAkJLyoKIAkJICogY2VydGFpbiBtb3JlIGV4b3RpYyBTQ1NJIGRldmljZXMgYXJlIGtub3duIHRvIGJlCiAJCSAqIHZvbGF0aWxlIHdydCB0b28gZWFybHkgc3lzdGVtIHJlYm9vdHMuIFdoaWxlIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IDY3OGY0ZGIuLmNiOGM2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTMzMSwxMyArMzMxLDE0IEBACiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAlzaXplID0gY29uZi0+c3RyaXBfem9uZVtjdXJdLnNpemU7CiAKLQlmb3IgKGk9MDsgaTwgbmJfem9uZTsgaSsrKSB7Ci0JCWNvbmYtPmhhc2hfdGFibGVbaV0gPSBjb25mLT5zdHJpcF96b25lICsgY3VyOworCWNvbmYtPmhhc2hfdGFibGVbMF0gPSBjb25mLT5zdHJpcF96b25lICsgY3VyOworCWZvciAoaT0xOyBpPCBuYl96b25lOyBpKyspIHsKIAkJd2hpbGUgKHNpemUgPD0gY29uZi0+aGFzaF9zcGFjaW5nKSB7CiAJCQljdXIrKzsKIAkJCXNpemUgKz0gY29uZi0+c3RyaXBfem9uZVtjdXJdLnNpemU7CiAJCX0KIAkJc2l6ZSAtPSBjb25mLT5oYXNoX3NwYWNpbmc7CisJCWNvbmYtPmhhc2hfdGFibGVbaV0gPSBjb25mLT5zdHJpcF96b25lICsgY3VyOwogCX0KIAlpZiAoY29uZi0+cHJlc2hpZnQpIHsKIAkJY29uZi0+aGFzaF9zcGFjaW5nID4+PSBjb25mLT5wcmVzaGlmdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCAzY2IwODcyLi40MDcwZWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0zMTUsMTAgKzMxNSwxMSBAQAogCQlpZiAocjFfYmlvLT5iaW9zW21pcnJvcl0gPT0gYmlvKQogCQkJYnJlYWs7CiAKLQlpZiAoZXJyb3IgPT0gLUVOT1RTVVBQICYmIHRlc3RfYml0KFIxQklPX0JhcnJpZXIsICZyMV9iaW8tPnN0YXRlKSkgeworCWlmIChlcnJvciA9PSAtRU9QTk9UU1VQUCAmJiB0ZXN0X2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSkpIHsKIAkJc2V0X2JpdChCYXJyaWVyc05vdHN1cHAsICZjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldi0+ZmxhZ3MpOwogCQlzZXRfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpOwogCQlyMV9iaW8tPm1kZGV2LT5iYXJyaWVyc193b3JrID0gMDsKKwkJLyogRG9uJ3QgcmRldl9kZWNfcGVuZGluZyBpbiB0aGlzIGJyYW5jaCAtIGtlZXAgaXQgZm9yIHRoZSByZXRyeSAqLwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIHRoaXMgYnJhbmNoIGlzIG91ciAnb25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQnIGV2ZW50IGhhbmRsZXI6CkBAIC0zNjUsNiArMzY2LDcgQEAKIAkJCQl9CiAJCQl9CiAJCX0KKwkJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldiwgY29uZi0+bWRkZXYpOwogCX0KIAkvKgogCSAqCkBAIC0zNzQsMTEgKzM3Niw5IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnIxX2Jpby0+cmVtYWluaW5nKSkgewogCQlpZiAodGVzdF9iaXQoUjFCSU9fQmFycmllclJldHJ5LCAmcjFfYmlvLT5zdGF0ZSkpIHsKIAkJCXJlc2NoZWR1bGVfcmV0cnkocjFfYmlvKTsKLQkJCS8qIERvbid0IGRlY19wZW5kaW5nIHlldCwgd2Ugd2FudCB0byBob2xkCi0JCQkgKiB0aGUgcmVmZXJlbmNlIG92ZXIgdGhlIHJldHJ5Ci0JCQkgKi8KIAkJCWdvdG8gb3V0OwogCQl9CisJCS8qIGl0IHJlYWxseSBpcyB0aGUgZW5kIG9mIHRoaXMgcmVxdWVzdCAqLwogCQlpZiAodGVzdF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKSkgewogCQkJLyogZnJlZSBleHRyYSBjb3B5IG9mIHRoZSBkYXRhIHBhZ2VzICovCiAJCQlpbnQgaSA9IGJpby0+YmlfdmNudDsKQEAgLTM5Myw4ICszOTMsNiBAQAogCQltZF93cml0ZV9lbmQocjFfYmlvLT5tZGRldik7CiAJCXJhaWRfZW5kX2Jpb19pbyhyMV9iaW8pOwogCX0KLQotCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXYsIGNvbmYtPm1kZGV2KTsKICBvdXQ6CiAJaWYgKHRvX3B1dCkKIAkJYmlvX3B1dCh0b19wdXQpOwpAQCAtNzUzLDE4ICs3NTEsMjQgQEAKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKIAlpbnQgZG9fYmFycmllcnM7CiAKLQlpZiAodW5saWtlbHkoIW1kZGV2LT5iYXJyaWVyc193b3JrICYmIGJpb19iYXJyaWVyKGJpbykpKSB7Ci0JCWJpb19lbmRpbyhiaW8sIGJpby0+Ymlfc2l6ZSwgLUVPUE5PVFNVUFApOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAkvKgogCSAqIFJlZ2lzdGVyIHRoZSBuZXcgcmVxdWVzdCBhbmQgd2FpdCBpZiB0aGUgcmVjb25zdHJ1Y3Rpb24KIAkgKiB0aHJlYWQgaGFzIHB1dCB1cCBhIGJhciBmb3IgbmV3IHJlcXVlc3RzLgogCSAqIENvbnRpbnVlIGltbWVkaWF0ZWx5IGlmIG5vIHJlc3luYyBpcyBhY3RpdmUgY3VycmVudGx5LgorCSAqIFdlIHRlc3QgYmFycmllcnNfd29yayAqYWZ0ZXIqIG1kX3dyaXRlX3N0YXJ0IGFzIG1kX3dyaXRlX3N0YXJ0CisJICogbWF5IGNhdXNlIHRoZSBmaXJzdCBzdXBlcmJsb2NrIHdyaXRlLCBhbmQgdGhhdCB3aWxsIGNoZWNrIG91dAorCSAqIGlmIGJhcnJpZXJzIHdvcmsuCiAJICovCisKIAltZF93cml0ZV9zdGFydChtZGRldiwgYmlvKTsgLyogd2FpdCBvbiBzdXBlcmJsb2NrIHVwZGF0ZSBlYXJseSAqLwogCisJaWYgKHVubGlrZWx5KCFtZGRldi0+YmFycmllcnNfd29yayAmJiBiaW9fYmFycmllcihiaW8pKSkgeworCQlpZiAocncgPT0gV1JJVEUpCisJCQltZF93cml0ZV9lbmQobWRkZXYpOworCQliaW9fZW5kaW8oYmlvLCBiaW8tPmJpX3NpemUsIC1FT1BOT1RTVVBQKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJd2FpdF9iYXJyaWVyKGNvbmYpOwogCiAJZGlza19zdGF0X2luYyhtZGRldi0+Z2VuZGlzaywgaW9zW3J3XSk7CkBAIC0xMTM1LDggKzExMzksMTkgQEAKIAkJCW1pcnJvciA9IGk7CiAJCQlicmVhazsKIAkJfQotCWlmICghdXB0b2RhdGUpCisJaWYgKCF1cHRvZGF0ZSkgeworCQlpbnQgc3luY19ibG9ja3MgPSAwOworCQlzZWN0b3JfdCBzID0gcjFfYmlvLT5zZWN0b3I7CisJCWxvbmcgc2VjdG9yc190b19nbyA9IHIxX2Jpby0+c2VjdG9yczsKKwkJLyogbWFrZSBzdXJlIHRoZXNlIGJpdHMgZG9lc24ndCBnZXQgY2xlYXJlZC4gKi8KKwkJZG8geworCQkJYml0bWFwX2VuZF9zeW5jKG1kZGV2LT5iaXRtYXAsIHIxX2Jpby0+c2VjdG9yLAorCQkJCQkmc3luY19ibG9ja3MsIDEpOworCQkJcyArPSBzeW5jX2Jsb2NrczsKKwkJCXNlY3RvcnNfdG9fZ28gLT0gc3luY19ibG9ja3M7CisJCX0gd2hpbGUgKHNlY3RvcnNfdG9fZ28gPiAwKTsKIAkJbWRfZXJyb3IobWRkZXYsIGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2KTsKKwl9CiAKIAl1cGRhdGVfaGVhZF9wb3MobWlycm9yLCByMV9iaW8pOwogCkBAIC0xMzkzLDEwICsxNDA4LDExIEBACiAJCQl1bnBsdWcgPSAxOwogCQl9IGVsc2UgaWYgKHRlc3RfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpKSB7CiAJCQkvKiBzb21lIHJlcXVlc3RzIGluIHRoZSByMWJpbyB3ZXJlIEJJT19SV19CQVJSSUVSCi0JCQkgKiByZXF1ZXN0cyB3aGljaCBmYWlsZWQgd2l0aCAtRU5PVFNVUFAuICBIb2h1bW0uLgorCQkJICogcmVxdWVzdHMgd2hpY2ggZmFpbGVkIHdpdGggLUVPUE5PVFNVUFAuICBIb2h1bW0uLgogCQkJICogQmV0dGVyIHJlc3VibWl0IHdpdGhvdXQgdGhlIGJhcnJpZXIuCiAJCQkgKiBXZSBrbm93IHdoaWNoIGRldmljZXMgdG8gcmVzdWJtaXQgZm9yLCBiZWNhdXNlCiAJCQkgKiBhbGwgb3RoZXJzIGhhdmUgaGFkIHRoZWlyIGJpb3NbXSBlbnRyeSBjbGVhcmVkLgorCQkJICogV2UgYWxyZWFkeSBoYXZlIGEgbnJfcGVuZGluZyByZWZlcmVuY2Ugb24gdGhlc2UgcmRldnMuCiAJCQkgKi8KIAkJCWludCBpOwogCQkJY2xlYXJfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpOwpAQCAtMTU0Nyw4ICsxNTYzLDcgQEAKIAlpbnQgYnVmZnM7CiAKIAlidWZmcyA9IFJFU1lOQ19XSU5ET1cgLyBSRVNZTkNfQkxPQ0tfU0laRTsKLQlpZiAoY29uZi0+cjFidWZfcG9vbCkKLQkJQlVHKCk7CisJQlVHX09OKGNvbmYtPnIxYnVmX3Bvb2wpOwogCWNvbmYtPnIxYnVmX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZShidWZmcywgcjFidWZfcG9vbF9hbGxvYywgcjFidWZfcG9vbF9mcmVlLAogCQkJCQkgIGNvbmYtPnBvb2xpbmZvKTsKIAlpZiAoIWNvbmYtPnIxYnVmX3Bvb2wpCkBAIC0xNzIxLDggKzE3MzYsNyBAQAogCQkJICAgICFjb25mLT5mdWxsc3luYyAmJgogCQkJICAgICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKQogCQkJCWJyZWFrOwotCQkJaWYgKHN5bmNfYmxvY2tzIDwgKFBBR0VfU0laRT4+OSkpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oc3luY19ibG9ja3MgPCAoUEFHRV9TSVpFPj45KSk7CiAJCQlpZiAobGVuID4gKHN5bmNfYmxvY2tzPDw5KSkKIAkJCQlsZW4gPSBzeW5jX2Jsb2Nrczw8OTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggYWI5MGE2ZC4uMTQ0MDkzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYworKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC0xMTE3LDggKzExMTcsNyBAQAogCWZvciAoaT0wOyBpPGNvbmYtPmNvcGllczsgaSsrKQogCQlpZiAocjEwX2Jpby0+ZGV2c1tpXS5iaW8gPT0gYmlvKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gY29uZi0+Y29waWVzKQotCQlCVUcoKTsKKwlCVUdfT04oaSA9PSBjb25mLT5jb3BpZXMpOwogCXVwZGF0ZV9oZWFkX3BvcyhpLCByMTBfYmlvKTsKIAlkID0gcjEwX2Jpby0+ZGV2c1tpXS5kZXZudW07CiAKQEAgLTE0MDgsNDMgKzE0MDcsNTQgQEAKIAkJCQlpZiAocyA+IChQQUdFX1NJWkU+PjkpKQogCQkJCQlzID0gUEFHRV9TSVpFID4+IDk7CiAKKwkJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQkJZG8gewogCQkJCQlpbnQgZCA9IHIxMF9iaW8tPmRldnNbc2xdLmRldm51bTsKLQkJCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldjsKKwkJCQkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2RdLnJkZXYpOwogCQkJCQlpZiAocmRldiAmJgotCQkJCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSAmJgotCQkJCQkgICAgc3luY19wYWdlX2lvKHJkZXYtPmJkZXYsCi0JCQkJCQkJIHIxMF9iaW8tPmRldnNbc2xdLmFkZHIgKwotCQkJCQkJCSBzZWN0ICsgcmRldi0+ZGF0YV9vZmZzZXQsCi0JCQkJCQkJIHM8PDksCi0JCQkJCQkJIGNvbmYtPnRtcHBhZ2UsIFJFQUQpKQotCQkJCQkJc3VjY2VzcyA9IDE7Ci0JCQkJCWVsc2UgewotCQkJCQkJc2wrKzsKLQkJCQkJCWlmIChzbCA9PSBjb25mLT5jb3BpZXMpCi0JCQkJCQkJc2wgPSAwOworCQkJCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgeworCQkJCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CisJCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQkJCXN1Y2Nlc3MgPSBzeW5jX3BhZ2VfaW8ocmRldi0+YmRldiwKKwkJCQkJCQkJICAgICAgIHIxMF9iaW8tPmRldnNbc2xdLmFkZHIgKworCQkJCQkJCQkgICAgICAgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0LAorCQkJCQkJCQkgICAgICAgczw8OSwKKwkJCQkJCQkJICAgICAgIGNvbmYtPnRtcHBhZ2UsIFJFQUQpOworCQkJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBtZGRldik7CisJCQkJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQkJCQlpZiAoc3VjY2VzcykKKwkJCQkJCQlicmVhazsKIAkJCQkJfQorCQkJCQlzbCsrOworCQkJCQlpZiAoc2wgPT0gY29uZi0+Y29waWVzKQorCQkJCQkJc2wgPSAwOwogCQkJCX0gd2hpbGUgKCFzdWNjZXNzICYmIHNsICE9IHIxMF9iaW8tPnJlYWRfc2xvdCk7CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJCQlpZiAoc3VjY2VzcykgewogCQkJCQlpbnQgc3RhcnQgPSBzbDsKIAkJCQkJLyogd3JpdGUgaXQgYmFjayBhbmQgcmUtcmVhZCAqLworCQkJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQkJCXdoaWxlIChzbCAhPSByMTBfYmlvLT5yZWFkX3Nsb3QpIHsKIAkJCQkJCWludCBkOwogCQkJCQkJaWYgKHNsPT0wKQogCQkJCQkJCXNsID0gY29uZi0+Y29waWVzOwogCQkJCQkJc2wtLTsKIAkJCQkJCWQgPSByMTBfYmlvLT5kZXZzW3NsXS5kZXZudW07Ci0JCQkJCQlyZGV2ID0gY29uZi0+bWlycm9yc1tkXS5yZGV2OwotCQkJCQkJYXRvbWljX2FkZChzLCAmcmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7CisJCQkJCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZF0ucmRldik7CiAJCQkJCQlpZiAocmRldiAmJgogCQkJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKKwkJCQkJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKKwkJCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQkJCQlhdG9taWNfYWRkKHMsICZyZGV2LT5jb3JyZWN0ZWRfZXJyb3JzKTsKIAkJCQkJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYtPmJkZXYsCiAJCQkJCQkJCQkgcjEwX2Jpby0+ZGV2c1tzbF0uYWRkciArCiAJCQkJCQkJCQkgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0LAogCQkJCQkJCQkJIHM8PDksIGNvbmYtPnRtcHBhZ2UsIFdSSVRFKSA9PSAwKQogCQkJCQkJCQkvKiBXZWxsLCB0aGlzIGRldmljZSBpcyBkZWFkICovCiAJCQkJCQkJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKKwkJCQkJCQlyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTsKKwkJCQkJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJc2wgPSBzdGFydDsKQEAgLTE0NTQsMTcgKzE0NjQsMjIgQEAKIAkJCQkJCQlzbCA9IGNvbmYtPmNvcGllczsKIAkJCQkJCXNsLS07CiAJCQkJCQlkID0gcjEwX2Jpby0+ZGV2c1tzbF0uZGV2bnVtOwotCQkJCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldjsKKwkJCQkJCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkXS5yZGV2KTsKIAkJCQkJCWlmIChyZGV2ICYmCiAJCQkJCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgeworCQkJCQkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOworCQkJCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCQkJCWlmIChzeW5jX3BhZ2VfaW8ocmRldi0+YmRldiwKIAkJCQkJCQkJCSByMTBfYmlvLT5kZXZzW3NsXS5hZGRyICsKIAkJCQkJCQkJCSBzZWN0ICsgcmRldi0+ZGF0YV9vZmZzZXQsCiAJCQkJCQkJCQkgczw8OSwgY29uZi0+dG1wcGFnZSwgUkVBRCkgPT0gMCkKIAkJCQkJCQkJLyogV2VsbCwgdGhpcyBkZXZpY2UgaXMgZGVhZCAqLwogCQkJCQkJCQltZF9lcnJvcihtZGRldiwgcmRldik7CisJCQkJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBtZGRldik7CisJCQkJCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJCQkJfQogCQkJCQl9CisJCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIENhbm5vdCByZWFkIGZyb20gYW55d2hlcmUgLS0gYnllIGJ5ZSBhcnJheSAqLwogCQkJCQltZF9lcnJvcihtZGRldiwgY29uZi0+bWlycm9yc1tyMTBfYmlvLT5kZXZzW3IxMF9iaW8tPnJlYWRfc2xvdF0uZGV2bnVtXS5yZGV2KTsKQEAgLTE1MTgsOCArMTUzMyw3IEBACiAJaW50IGJ1ZmZzOwogCiAJYnVmZnMgPSBSRVNZTkNfV0lORE9XIC8gUkVTWU5DX0JMT0NLX1NJWkU7Ci0JaWYgKGNvbmYtPnIxMGJ1Zl9wb29sKQotCQlCVUcoKTsKKwlCVUdfT04oY29uZi0+cjEwYnVmX3Bvb2wpOwogCWNvbmYtPnIxMGJ1Zl9wb29sID0gbWVtcG9vbF9jcmVhdGUoYnVmZnMsIHIxMGJ1Zl9wb29sX2FsbG9jLCByMTBidWZfcG9vbF9mcmVlLCBjb25mKTsKIAlpZiAoIWNvbmYtPnIxMGJ1Zl9wb29sKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBkYWU3NDBhLi4zMTg0MzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC03MywxMCArNzMsOCBAQAogc3RhdGljIHZvaWQgX19yZWxlYXNlX3N0cmlwZShyYWlkNV9jb25mX3QgKmNvbmYsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNoLT5jb3VudCkpIHsKLQkJaWYgKCFsaXN0X2VtcHR5KCZzaC0+bHJ1KSkKLQkJCUJVRygpOwotCQlpZiAoYXRvbWljX3JlYWQoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKT09MCkKLQkJCUJVRygpOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnNoLT5scnUpKTsKKwkJQlVHX09OKGF0b21pY19yZWFkKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk9PTApOwogCQlpZiAodGVzdF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSkpIHsKIAkJCWlmICh0ZXN0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSkpCiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmRlbGF5ZWRfbGlzdCk7CkBAIC0xODQsMTAgKzE4Miw4IEBACiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgaTsKIAotCWlmIChhdG9taWNfcmVhZCgmc2gtPmNvdW50KSAhPSAwKQotCQlCVUcoKTsKLQlpZiAodGVzdF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSkpCi0JCUJVRygpOworCUJVR19PTihhdG9taWNfcmVhZCgmc2gtPmNvdW50KSAhPSAwKTsKKwlCVUdfT04odGVzdF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSkpOwogCQogCUNIRUNLX0RFVkxPQ0soKTsKIAlQUklOVEsoImluaXRfc3RyaXBlIGNhbGxlZCwgc3RyaXBlICVsbHVcbiIsIApAQCAtMjY5LDggKzI2NSw3IEBACiAJCQkJaW5pdF9zdHJpcGUoc2gsIHNlY3RvciwgcGRfaWR4LCBkaXNrcyk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoYXRvbWljX3JlYWQoJnNoLT5jb3VudCkpIHsKLQkJCQlpZiAoIWxpc3RfZW1wdHkoJnNoLT5scnUpKQotCQkJCQlCVUcoKTsKKwkJCSAgQlVHX09OKCFsaXN0X2VtcHR5KCZzaC0+bHJ1KSk7CiAJCQl9IGVsc2UgewogCQkJCWlmICghdGVzdF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSkpCiAJCQkJCWF0b21pY19pbmMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsKQEAgLTQ2NSw4ICs0NjAsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCWlmICghc2gpCiAJCXJldHVybiAwOwotCWlmIChhdG9taWNfcmVhZCgmc2gtPmNvdW50KSkKLQkJQlVHKCk7CisJQlVHX09OKGF0b21pY19yZWFkKCZzaC0+Y291bnQpKTsKIAlzaHJpbmtfYnVmZmVycyhzaCwgY29uZi0+cG9vbF9zaXplKTsKIAlrbWVtX2NhY2hlX2ZyZWUoY29uZi0+c2xhYl9jYWNoZSwgc2gpOwogCWF0b21pY19kZWMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsKQEAgLTg4Miw4ICs4NzYsNyBAQAogCXB0clswXSA9IHBhZ2VfYWRkcmVzcyhzaC0+ZGV2W3BkX2lkeF0ucGFnZSk7CiAJc3dpdGNoKG1ldGhvZCkgewogCWNhc2UgUkVBRF9NT0RJRllfV1JJVEU6Ci0JCWlmICghdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W3BkX2lkeF0uZmxhZ3MpKQotCQkJQlVHKCk7CisJCUJVR19PTighdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W3BkX2lkeF0uZmxhZ3MpKTsKIAkJZm9yIChpPWRpc2tzIDsgaS0tIDspIHsKIAkJCWlmIChpPT1wZF9pZHgpCiAJCQkJY29udGludWU7CkBAIC04OTYsNyArODg5LDcgQEAKIAkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFI1X092ZXJsYXAsICZzaC0+ZGV2W2ldLmZsYWdzKSkKIAkJCQkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7CiAKLQkJCQlpZiAoc2gtPmRldltpXS53cml0dGVuKSBCVUcoKTsKKwkJCQlCVUdfT04oc2gtPmRldltpXS53cml0dGVuKTsKIAkJCQlzaC0+ZGV2W2ldLndyaXR0ZW4gPSBjaG9zZW47CiAJCQkJY2hlY2tfeG9yKCk7CiAJCQl9CkBAIC05MTIsNyArOTA1LDcgQEAKIAkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFI1X092ZXJsYXAsICZzaC0+ZGV2W2ldLmZsYWdzKSkKIAkJCQkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7CiAKLQkJCQlpZiAoc2gtPmRldltpXS53cml0dGVuKSBCVUcoKTsKKwkJCQlCVUdfT04oc2gtPmRldltpXS53cml0dGVuKTsKIAkJCQlzaC0+ZGV2W2ldLndyaXR0ZW4gPSBjaG9zZW47CiAJCQl9CiAJCWJyZWFrOwpAQCAtOTk1LDggKzk4OCw3IEBACiAJaWYgKCpiaXAgJiYgKCpiaXApLT5iaV9zZWN0b3IgPCBiaS0+Ymlfc2VjdG9yICsgKChiaS0+Ymlfc2l6ZSk+PjkpKQogCQlnb3RvIG92ZXJsYXA7CiAKLQlpZiAoKmJpcCAmJiBiaS0+YmlfbmV4dCAmJiAoKmJpcCkgIT0gYmktPmJpX25leHQpCi0JCUJVRygpOworCUJVR19PTigqYmlwICYmIGJpLT5iaV9uZXh0ICYmICgqYmlwKSAhPSBiaS0+YmlfbmV4dCk7CiAJaWYgKCpiaXApCiAJCWJpLT5iaV9uZXh0ID0gKmJpcDsKIAkqYmlwID0gYmk7CkBAIC0xNDMwLDggKzE0MjIsNyBAQAogCQlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOwogCQlpZiAoZmFpbGVkID09IDApIHsKIAkJCWNoYXIgKnBhZ2VhOwotCQkJaWYgKHVwdG9kYXRlICE9IGRpc2tzKQotCQkJCUJVRygpOworCQkJQlVHX09OKHVwdG9kYXRlICE9IGRpc2tzKTsKIAkJCWNvbXB1dGVfcGFyaXR5KHNoLCBDSEVDS19QQVJJVFkpOwogCQkJdXB0b2RhdGUtLTsKIAkJCXBhZ2VhID0gcGFnZV9hZGRyZXNzKHNoLT5kZXZbc2gtPnBkX2lkeF0ucGFnZSk7CkBAIC0yMDk2LDggKzIwODcsNyBAQAogCiAJCWxpc3RfZGVsX2luaXQoZmlyc3QpOwogCQlhdG9taWNfaW5jKCZzaC0+Y291bnQpOwotCQlpZiAoYXRvbWljX3JlYWQoJnNoLT5jb3VudCkhPSAxKQotCQkJQlVHKCk7CisJCUJVR19PTihhdG9taWNfcmVhZCgmc2gtPmNvdW50KSE9IDEpOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJCiAJCWhhbmRsZWQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMgYi9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jCmluZGV4IDZkZjQ5MzAuLmJjNjkzNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNm1haW4uYwpAQCAtOTEsMTAgKzkxLDggQEAKIHN0YXRpYyB2b2lkIF9fcmVsZWFzZV9zdHJpcGUocmFpZDZfY29uZl90ICpjb25mLCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzaC0+Y291bnQpKSB7Ci0JCWlmICghbGlzdF9lbXB0eSgmc2gtPmxydSkpCi0JCQlCVUcoKTsKLQkJaWYgKGF0b21pY19yZWFkKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk9PTApCi0JCQlCVUcoKTsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZzaC0+bHJ1KSk7CisJCUJVR19PTihhdG9taWNfcmVhZCgmY29uZi0+YWN0aXZlX3N0cmlwZXMpPT0wKTsKIAkJaWYgKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKSB7CiAJCQlpZiAodGVzdF9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpKQogCQkJCWxpc3RfYWRkX3RhaWwoJnNoLT5scnUsICZjb25mLT5kZWxheWVkX2xpc3QpOwpAQCAtMjAyLDEwICsyMDAsOCBAQAogCXJhaWQ2X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gY29uZi0+cmFpZF9kaXNrcywgaTsKIAotCWlmIChhdG9taWNfcmVhZCgmc2gtPmNvdW50KSAhPSAwKQotCQlCVUcoKTsKLQlpZiAodGVzdF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSkpCi0JCUJVRygpOworCUJVR19PTihhdG9taWNfcmVhZCgmc2gtPmNvdW50KSAhPSAwKTsKKwlCVUdfT04odGVzdF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSkpOwogCiAJQ0hFQ0tfREVWTE9DSygpOwogCVBSSU5USygiaW5pdF9zdHJpcGUgY2FsbGVkLCBzdHJpcGUgJWxsdVxuIiwKQEAgLTI4NCwxMyArMjgwLDExIEBACiAJCQkJaW5pdF9zdHJpcGUoc2gsIHNlY3RvciwgcGRfaWR4KTsKIAkJfSBlbHNlIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmc2gtPmNvdW50KSkgewotCQkJCWlmICghbGlzdF9lbXB0eSgmc2gtPmxydSkpCi0JCQkJCUJVRygpOworCQkJCUJVR19PTighbGlzdF9lbXB0eSgmc2gtPmxydSkpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoIXRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKQogCQkJCQlhdG9taWNfaW5jKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7Ci0JCQkJaWYgKGxpc3RfZW1wdHkoJnNoLT5scnUpKQotCQkJCQlCVUcoKTsKKwkJCQlCVUdfT04obGlzdF9lbXB0eSgmc2gtPmxydSkpOwogCQkJCWxpc3RfZGVsX2luaXQoJnNoLT5scnUpOwogCQkJfQogCQl9CkBAIC0zNTMsOCArMzQ3LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlpZiAoIXNoKQogCQlyZXR1cm4gMDsKLQlpZiAoYXRvbWljX3JlYWQoJnNoLT5jb3VudCkpCi0JCUJVRygpOworCUJVR19PTihhdG9taWNfcmVhZCgmc2gtPmNvdW50KSk7CiAJc2hyaW5rX2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpOwogCWttZW1fY2FjaGVfZnJlZShjb25mLT5zbGFiX2NhY2hlLCBzaCk7CiAJYXRvbWljX2RlYygmY29uZi0+YWN0aXZlX3N0cmlwZXMpOwpAQCAtNzgwLDcgKzc3Myw3IEBACiAJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9PdmVybGFwLCAmc2gtPmRldltpXS5mbGFncykpCiAJCQkJCXdha2VfdXAoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwogCi0JCQkJaWYgKHNoLT5kZXZbaV0ud3JpdHRlbikgQlVHKCk7CisJCQkJQlVHX09OKHNoLT5kZXZbaV0ud3JpdHRlbik7CiAJCQkJc2gtPmRldltpXS53cml0dGVuID0gY2hvc2VuOwogCQkJfQogCQlicmVhazsKQEAgLTk3MCw4ICs5NjMsNyBAQAogCWlmICgqYmlwICYmICgqYmlwKS0+Ymlfc2VjdG9yIDwgYmktPmJpX3NlY3RvciArICgoYmktPmJpX3NpemUpPj45KSkKIAkJZ290byBvdmVybGFwOwogCi0JaWYgKCpiaXAgJiYgYmktPmJpX25leHQgJiYgKCpiaXApICE9IGJpLT5iaV9uZXh0KQotCQlCVUcoKTsKKwlCVUdfT04oKmJpcCAmJiBiaS0+YmlfbmV4dCAmJiAoKmJpcCkgIT0gYmktPmJpX25leHQpOwogCWlmICgqYmlwKQogCQliaS0+YmlfbmV4dCA9ICpiaXA7CiAJKmJpcCA9IGJpOwpAQCAtMTkwNiw4ICsxODk4LDcgQEAKIAogCQlsaXN0X2RlbF9pbml0KGZpcnN0KTsKIAkJYXRvbWljX2luYygmc2gtPmNvdW50KTsKLQkJaWYgKGF0b21pY19yZWFkKCZzaC0+Y291bnQpIT0gMSkKLQkJCUJVRygpOworCQlCVUdfT04oYXRvbWljX3JlYWQoJnNoLT5jb3VudCkhPSAxKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAKIAkJaGFuZGxlZCsrOwpAQCAtMjE1MSw2ICsyMTQyLDggQEAKIAl9CiAKIAkvKiBPaywgZXZlcnl0aGluZyBpcyBqdXN0IGZpbmUgbm93ICovCisJc3lzZnNfY3JlYXRlX2dyb3VwKCZtZGRldi0+a29iaiwgJnJhaWQ2X2F0dHJzX2dyb3VwKTsKKwogCW1kZGV2LT5hcnJheV9zaXplID0gIG1kZGV2LT5zaXplICogKG1kZGV2LT5yYWlkX2Rpc2tzIC0gMik7CiAKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQ2X3VucGx1Z19kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKaW5kZXggYmFhOWY1OC4uMzQ0ZDgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwpAQCAtOCwyMiArOCw1NCBAQAogCXRyaXN0YXRlICJWaWRlbyBGb3IgTGludXgiCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgYXVkaW8vdmlkZW8gY2FwdHVyZSBhbmQgb3ZlcmxheSBkZXZpY2VzIGFuZCBGTSByYWRpbwotCSAgY2FyZHMuIFRoZSBleGFjdCBjYXBhYmlsaXRpZXMgb2YgZWFjaCBkZXZpY2UgdmFyeS4gVXNlciB0b29scyBmb3IKLQkgIHRoaXMgYXJlIGF2YWlsYWJsZSBmcm9tCi0JICA8ZnRwOi8vZnRwLnVrLmxpbnV4Lm9yZy9wdWIvbGludXgvdmlkZW80bGludXgvPi4KKwkgIGNhcmRzLiBUaGUgZXhhY3QgY2FwYWJpbGl0aWVzIG9mIGVhY2ggZGV2aWNlIHZhcnkuCiAKIAkgIFRoaXMga2VybmVsIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZSBuZXcgVmlkZW8gZm9yIExpbnV4IFR3byBBUEksCiAJICAoVjRMMikgYXMgd2VsbCBhcyB0aGUgb3JpZ2luYWwgc3lzdGVtLiBEcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMKIAkgIG5lZWQgdG8gYmUgcmV3cml0dGVuIHRvIHVzZSBWNEwyLCBidXQgZHJpdmVycyBmb3IgcG9wdWxhciBjYXJkcwogCSAgYW5kIGFwcGxpY2F0aW9ucyBmb3IgbW9zdCB2aWRlbyBjYXB0dXJlIGZ1bmN0aW9ucyBhbHJlYWR5IGV4aXN0LgogCi0JICBEb2N1bWVudGF0aW9uIGZvciB0aGUgb3JpZ2luYWwgQVBJIGlzIGluY2x1ZGVkIGluIHRoZSBmaWxlCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4gIERvY3VtZW50YXRpb24gZm9yIFY0TDIgaXMKLQkgIGF2YWlsYWJsZSBvbiB0aGUgd2ViIGF0IDxodHRwOi8vYnl0ZXNleC5vcmcvdjRsLz4uCisJICBBZGRpdGlvbmFsIGluZm8gYW5kIGRvY3MgYXJlIGF2YWlsYWJsZSBvbiB0aGUgd2ViIGF0CisJICA8aHR0cDovL2xpbnV4dHYub3JnPgorCisJICBEb2N1bWVudGF0aW9uIGZvciBWNEwyIGlzIGFsc28gYXZhaWxhYmxlIG9uIHRoZSB3ZWIgYXQKKwkgIDxodHRwOi8vYnl0ZXNleC5vcmcvdjRsLz4uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpZGVvZGV2LgogCitjb25maWcgVklERU9fVjRMMQorCWJvb2xlYW4gIkVuYWJsZSBWaWRlbyBGb3IgTGludXggQVBJIDEgKERFUFJFQ0FURUQpIgorCWRlcGVuZHMgb24gVklERU9fREVWCisJc2VsZWN0IFZJREVPX1Y0TDFfQ09NUEFUCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgRW5hYmxlcyBhIGNvbXBhdGliaWxpdHkgQVBJIHVzZWQgYnkgbW9zdCBWNEwyIGRldmljZXMgdG8gYWxsb3cKKwkgIGl0cyB1c2FnZSB3aXRoIGxlZ2FjeSBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0cyBvbmx5IFY0TDEgYXBpLgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSBhcyB0byB3aGV0aGVyIHRoaXMgaXMgcmVxdWlyZWQsIGFuc3dlciBZLgorCitjb25maWcgVklERU9fVjRMMV9DT01QQVQKKwlib29sZWFuICJFbmFibGUgVmlkZW8gRm9yIExpbnV4IEFQSSAxIGNvbXBhdGlibGUgTGF5ZXIiCisJZGVwZW5kcyBvbiBWSURFT19ERVYKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBUaGlzIGFwaSB3ZXJlIGRldmVsb3BlZCB0byBiZSB1c2VkIGF0IEtlcm5lbCAyLjIgYW5kIDIuNCwgYnV0CisJICBsYWNrcyBzdXBwb3J0IGZvciBzZXZlcmFsIHZpZGVvIHN0YW5kYXJkcy4gVGhlcmUgYXJlIHNldmVyYWwKKwkgIGRyaXZlcnMgYXQga2VybmVsIHRoYXQgc3RpbGwgZGVwZW5kcyBvbiBpdC4KKworCSAgRG9jdW1lbnRhdGlvbiBmb3IgdGhlIG9yaWdpbmFsIEFQSSBpcyBpbmNsdWRlZCBpbiB0aGUgZmlsZQorCSAgPERvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBVc2VyIHRvb2xzIGZvciB0aGlzIGFyZSBhdmFpbGFibGUgZnJvbQorCSAgPGZ0cDovL2Z0cC51ay5saW51eC5vcmcvcHViL2xpbnV4L3ZpZGVvNGxpbnV4Lz4uCisKKwkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIFkuCisKK2NvbmZpZyBWSURFT19WNEwyCisJdHJpc3RhdGUKKwlkZWZhdWx0IHkKKwogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnIgpAQCAtNTEsMTggKzgzLDE3IEBACiAJdHJpc3RhdGUKIAogY29uZmlnIFVTQl9EQUJVU0IKLSAgICAgICAgdHJpc3RhdGUgIkRBQlVTQiBkcml2ZXIiCi0gICAgICAgIGRlcGVuZHMgb24gVVNCCi0gICAgICAgIC0tLWhlbHAtLS0KLSAgICAgICAgICBBIERpZ2l0YWwgQXVkaW8gQnJvYWRjYXN0aW5nIChEQUIpIFJlY2VpdmVyIGZvciBVU0IgYW5kIExpbnV4Ci0gICAgICAgICAgYnJvdWdodCB0byB5b3UgYnkgdGhlIERBQi1UZWFtCi0gICAgICAgICAgPGh0dHA6Ly93d3dib2RlLmNzLnR1bS5lZHUvUGFyL2FyY2gvZGFiLz4uICBUaGlzIGRyaXZlciBjYW4gYmUgdGFrZW4KLSAgICAgICAgICBhcyBhbiBleGFtcGxlIGZvciBVUkItYmFzZWQgYnVsaywgY29udHJvbCwgYW5kIGlzb2Nocm9ub3VzCi0gICAgICAgICAgdHJhbnNhY3Rpb25zLiBVUkIncyBhcmUgZXhwbGFpbmVkIGluCi0gICAgICAgICAgPERvY3VtZW50YXRpb24vdXNiL1VSQi50eHQ+LgorCXRyaXN0YXRlICJEQUJVU0IgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgQSBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKSBSZWNlaXZlciBmb3IgVVNCIGFuZCBMaW51eAorCSAgYnJvdWdodCB0byB5b3UgYnkgdGhlIERBQi1UZWFtCisJICA8aHR0cDovL3d3d2JvZGUuY3MudHVtLmVkdS9QYXIvYXJjaC9kYWIvPi4gIFRoaXMgZHJpdmVyIGNhbiBiZSB0YWtlbgorCSAgYXMgYW4gZXhhbXBsZSBmb3IgVVJCLWJhc2VkIGJ1bGssIGNvbnRyb2wsIGFuZCBpc29jaHJvbm91cworCSAgdHJhbnNhY3Rpb25zLiBVUkIncyBhcmUgZXhwbGFpbmVkIGluCisJICA8RG9jdW1lbnRhdGlvbi91c2IvVVJCLnR4dD4uCiAKLSAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLSAgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGFidXNiLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGFidXNiLgogCiBlbmRtZW51Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnCmluZGV4IDZhOTAxYTAuLjFhMDRkYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZwpAQCAtMSw5ICsxLDEwIEBACiBjb25maWcgVklERU9fU0FBNzE0NgogCXRyaXN0YXRlCi0Jc2VsZWN0IEkyQworCWRlcGVuZHMgb24gSTJDCiAKIGNvbmZpZyBWSURFT19TQUE3MTQ2X1ZWCiAJdHJpc3RhdGUKKwlzZWxlY3QgVklERU9fVjRMMgogCXNlbGVjdCBWSURFT19CVUYKIAlzZWxlY3QgVklERU9fVklERU9CVUYKIAlzZWxlY3QgVklERU9fU0FBNzE0NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggM2YwZWM2Yi4uYTk3YzhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC0yMiwyNiArMjIsMjYgQEAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvS2NvbmZpZyIKIAogY29tbWVudCAiU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWciCiAKIGNvbW1lbnQgIlN1cHBvcnRlZCBVU0IgQWRhcHRlcnMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBVU0IKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFVTQiAmJiBJMkMKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9LY29uZmlnIgogCiBjb21tZW50ICJTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycyIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIChQQ0kgfHwgVVNCKQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgKFBDSSB8fCBVU0IpICYmIEkyQwogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWciCiAKIGNvbW1lbnQgIlN1cHBvcnRlZCBCVDg3OCBBZGFwdGVycyIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnIgogCiBjb21tZW50ICJTdXBwb3J0ZWQgUGx1dG8yIEFkYXB0ZXJzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnIgogCiBjb21tZW50ICJTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZwppbmRleCAyOTYzNjA1Li5kN2YxZmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIERWQl9CMkMyX0ZMRVhDT1AKIAl0cmlzdGF0ZSAiVGVjaG5pc2F0L0IyQzIgRmxleENvcElJKGIpIGFuZCBGbGV4Q29wSUlJIGFkYXB0ZXJzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfTVQzNTIKIAlzZWxlY3QgRFZCX01UMzEyCkBAIC0xNiw3ICsxNiw3IEBACiAKIGNvbmZpZyBEVkJfQjJDMl9GTEVYQ09QX1BDSQogCXRyaXN0YXRlICJUZWNobmlzYXQvQjJDMiBBaXIvU2t5L0NhYmxlMlBDIFBDSSIKLQlkZXBlbmRzIG9uIERWQl9CMkMyX0ZMRVhDT1AgJiYgUENJCisJZGVwZW5kcyBvbiBEVkJfQjJDMl9GTEVYQ09QICYmIFBDSSAmJiBJMkMKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgQWlyL1NreS9DYWJsZVN0YXIyIFBDSSBjYXJkIChEVkIvQVRTQykgYnkgVGVjaG5pc2F0L0IyQzIuCiAKQEAgLTI0LDcgKzI0LDcgQEAKIAogY29uZmlnIERWQl9CMkMyX0ZMRVhDT1BfVVNCCiAJdHJpc3RhdGUgIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgVVNCIgotCWRlcGVuZHMgb24gRFZCX0IyQzJfRkxFWENPUCAmJiBVU0IKKwlkZXBlbmRzIG9uIERWQl9CMkMyX0ZMRVhDT1AgJiYgVVNCICYmIEkyQwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBBaXIvU2t5L0NhYmxlMlBDIFVTQjEuMSBib3ggKERWQi9BVFNDKSBieSBUZWNobmlzYXQvQjJDMiwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKaW5kZXggMjMzN2I0MS4uZjM5NDAwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCkBAIC0xLDEyICsxLDE0IEBACiBjb25maWcgRFZCX0JUOFhYCiAJdHJpc3RhdGUgIkJUOHh4IGJhc2VkIFBDSSBjYXJkcyIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBWSURFT19CVDg0OAorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQyAmJiBWSURFT19CVDg0OAogCXNlbGVjdCBEVkJfTVQzNTIKIAlzZWxlY3QgRFZCX1NQODg3WAogCXNlbGVjdCBEVkJfTlhUNjAwMAogCXNlbGVjdCBEVkJfQ1gyNDExMAogCXNlbGVjdCBEVkJfT1I1MTIxMQogCXNlbGVjdCBEVkJfTEdEVDMzMFgKKwlzZWxlY3QgRFZCX1pMMTAzNTMKKwlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUENJIGNhcmRzIGJhc2VkIG9uIHRoZSBCdDh4eCBQQ0kgYnJpZGdlLiBFeGFtcGxlcyBhcmUKIAkgIHRoZSBOZWJ1bGEgY2FyZHMsIHRoZSBQaW5uYWNsZSBQQ1RWIGNhcmRzLCB0aGUgVHdpbmhhbiBEU1QgY2FyZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCmluZGV4IGJhYTgyMjcuLmNjYzdiMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBidDg3OCBfX2luaXQgKmR2Yl9idDh4eF84NzhfbWF0Y2godW5zaWduZWQgaW50IGJ0dHZfbnIsIHN0cnVjdCBwY2lfZGV2KiBidHR2X3BjaV9kZXYpCitzdGF0aWMgc3RydWN0IGJ0ODc4IF9fZGV2aW5pdCAqZHZiX2J0OHh4Xzg3OF9tYXRjaCh1bnNpZ25lZCBpbnQgYnR0dl9uciwgc3RydWN0IHBjaV9kZXYqIGJ0dHZfcGNpX2RldikKIHsKIAl1bnNpZ25lZCBpbnQgY2FyZF9ucjsKIApAQCAtNzA5LDcgKzcwOSw3IEBACiAJCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgZHZiX2J0OHh4X2xvYWRfY2FyZChzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgKmNhcmQsIHUzMiB0eXBlKQorc3RhdGljIGludCBfX2RldmluaXQgZHZiX2J0OHh4X2xvYWRfY2FyZChzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgKmNhcmQsIHUzMiB0eXBlKQogewogCWludCByZXN1bHQ7CiAKQEAgLTc5NCw3ICs3OTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR2Yl9idDh4eF9wcm9iZShzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICpzdWIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkdmJfYnQ4eHhfcHJvYmUoc3RydWN0IGJ0dHZfc3ViX2RldmljZSAqc3ViKQogewogCXN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgcGNpX2RldiogYnR0dl9wY2lfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCmluZGV4IDcxYjU3NWQuLjkzMjVkMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKQEAgLTkwMiw3ICs5MDIsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmNpbmVyZ3l0Mi0+YWRhcHRlciwgRFJJVkVSX05BTUUsIFRISVNfTU9EVUxFKTsKKwlpZiAoKGVyciA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZjaW5lcmd5dDItPmFkYXB0ZXIsIERSSVZFUl9OQU1FLCBUSElTX01PRFVMRSkpIDwgMCkgeworCQlrZnJlZShjaW5lcmd5dDIpOworCQlyZXR1cm4gZXJyOworCX0KIAogCWNpbmVyZ3l0Mi0+ZGVtdXgucHJpdiA9IGNpbmVyZ3l0MjsKIAljaW5lcmd5dDItPmRlbXV4LmZpbHRlcm51bSA9IDI1NjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKaW5kZXggMDllOTZlOS4uMDQ1NzhkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKQEAgLTE0MSwxMiArMTQxLDE4IEBACiAJfQogCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JET05MWSkgewotCQl2b2lkICptZW0gPSB2bWFsbG9jKERWUl9CVUZGRVJfU0laRSk7CisJCXZvaWQgKm1lbTsKKwkJaWYgKCFkdmJkZXYtPnJlYWRlcnMpIHsKKwkJCW11dGV4X3VubG9jaygmZG14ZGV2LT5tdXRleCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCW1lbSA9IHZtYWxsb2MoRFZSX0JVRkZFUl9TSVpFKTsKIAkJaWYgKCFtZW0pIHsKIAkJCW11dGV4X3VubG9jaygmZG14ZGV2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkbXhkZXYtPmR2cl9idWZmZXIsIG1lbSwgRFZSX0JVRkZFUl9TSVpFKTsKKwkJZHZiZGV2LT5yZWFkZXJzLS07CiAJfQogCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkgewpAQCAtMTg0LDYgKzE5MCw3IEBACiAJCQkJCQlkbXhkZXYtPmR2cl9vcmlnX2ZlKTsKIAl9CiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JET05MWSkgeworCQlkdmJkZXYtPnJlYWRlcnMrKzsKIAkJaWYgKGRteGRldi0+ZHZyX2J1ZmZlci5kYXRhKSB7CiAJCQl2b2lkICptZW0gPSBkbXhkZXYtPmR2cl9idWZmZXIuZGF0YTsKIAkJCW1iKCk7CkBAIC0xMDI5LDggKzEwMzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGR2Yl9kZXZpY2UgZHZiZGV2X2R2ciA9IHsKIAkucHJpdiA9IE5VTEwsCi0JLnVzZXJzID0gMSwKLQkud3JpdGVycyA9IDEsCisJLnJlYWRlcnMgPSAxLAogCS5mb3BzID0gJmR2Yl9kdnJfZm9wcwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCAyYzNlYThmLi5hMDUxNzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMTA1LDYgKzEwNSw5IEBACiAJZmVfc3RhdHVzX3Qgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgdHVuZV9tb2RlX2ZsYWdzOwogCXVuc2lnbmVkIGludCBkZWxheTsKKwl1bnNpZ25lZCBpbnQgcmVpbml0aWFsaXNlOworCWludCB0b25lOworCWludCB2b2x0YWdlOwogCiAJLyogc3d6aWd6YWcgdmFsdWVzICovCiAJdW5zaWduZWQgaW50IHN0YXRlOwpAQCAtMTIxLDYgKzEyNCw3IEBACiAJdW5zaWduZWQgaW50IGNoZWNrX3dyYXBwZWQ7CiB9OwogCitzdGF0aWMgdm9pZCBkdmJfZnJvbnRlbmRfd2FrZXVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKIAogc3RhdGljIHZvaWQgZHZiX2Zyb250ZW5kX2FkZF9ldmVudChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3Qgc3RhdHVzKQogewpAQCAtMjEzLDYgKzIxNywxNSBAQAogCQlmZS0+b3BzLT5pbml0KGZlKTsKIH0KIAordm9pZCBkdmJfZnJvbnRlbmRfcmVpbml0aWFsaXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CisKKwlmZXByaXYtPnJlaW5pdGlhbGlzZSA9IDE7CisJZHZiX2Zyb250ZW5kX3dha2V1cChmZSk7Cit9CitFWFBPUlRfU1lNQk9MKGR2Yl9mcm9udGVuZF9yZWluaXRpYWxpc2UpOworCiBzdGF0aWMgdm9pZCBkdmJfZnJvbnRlbmRfc3d6aWd6YWdfdXBkYXRlX2RlbGF5KHN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2LCBpbnQgbG9ja2VkKQogewogCWludCBxMjsKQEAgLTUwNSw4ICs1MTgsOCBAQAogCWZlcHJpdi0+cXVhbGl0eSA9IDA7CiAJZmVwcml2LT5kZWxheSA9IDMqSFo7CiAJZmVwcml2LT5zdGF0dXMgPSAwOwotCWR2Yl9mcm9udGVuZF9pbml0KGZlKTsKIAlmZXByaXYtPndha2V1cCA9IDA7CisJZmVwcml2LT5yZWluaXRpYWxpc2UgPSAxOwogCiAJd2hpbGUgKDEpIHsKIAkJdXAoJmZlcHJpdi0+c2VtKTsJICAgIC8qIGlzIGxvY2tlZCB3aGVuIHdlIGVudGVyIHRoZSB0aHJlYWQuLi4gKi8KQEAgLTUyNCw2ICs1MzcsMTcgQEAKIAkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZmVwcml2LT5zZW0pKQogCQkJYnJlYWs7CiAKKwkJaWYgKGZlcHJpdi0+cmVpbml0aWFsaXNlKSB7CisJCQlkdmJfZnJvbnRlbmRfaW5pdChmZSk7CisJCQlpZiAoZmVwcml2LT50b25lICE9IC0xKSB7CisJCQkJZmUtPm9wcy0+c2V0X3RvbmUoZmUsIGZlcHJpdi0+dG9uZSk7CisJCQl9CisJCQlpZiAoZmVwcml2LT52b2x0YWdlICE9IC0xKSB7CisJCQkJZmUtPm9wcy0+c2V0X3ZvbHRhZ2UoZmUsIGZlcHJpdi0+dm9sdGFnZSk7CisJCQl9CisJCQlmZXByaXYtPnJlaW5pdGlhbGlzZSA9IDA7CisJCX0KKwogCQkvKiBkbyBhbiBpdGVyYXRpb24gb2YgdGhlIHR1bmluZyBsb29wICovCiAJCWlmIChmZS0+b3BzLT50dW5lKSB7CiAJCQkvKiBoYXZlIHdlIGJlZW4gYXNrZWQgdG8gcmV0dW5lPyAqLwpAQCAtNzcyLDYgKzc5Niw3IEBACiAJY2FzZSBGRV9TRVRfVE9ORToKIAkJaWYgKGZlLT5vcHMtPnNldF90b25lKSB7CiAJCQllcnIgPSBmZS0+b3BzLT5zZXRfdG9uZShmZSwgKGZlX3NlY190b25lX21vZGVfdCkgcGFyZyk7CisJCQlmZXByaXYtPnRvbmUgPSAoZmVfc2VjX3RvbmVfbW9kZV90KSBwYXJnOwogCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfRElTRVFDOwogCQkJZmVwcml2LT5zdGF0dXMgPSAwOwogCQl9CkBAIC03ODAsNiArODA1LDcgQEAKIAljYXNlIEZFX1NFVF9WT0xUQUdFOgogCQlpZiAoZmUtPm9wcy0+c2V0X3ZvbHRhZ2UpIHsKIAkJCWVyciA9IGZlLT5vcHMtPnNldF92b2x0YWdlKGZlLCAoZmVfc2VjX3ZvbHRhZ2VfdCkgcGFyZyk7CisJCQlmZXByaXYtPnZvbHRhZ2UgPSAoZmVfc2VjX3ZvbHRhZ2VfdCkgcGFyZzsKIAkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX0RJU0VRQzsKIAkJCWZlcHJpdi0+c3RhdHVzID0gMDsKIAkJfQpAQCAtOTc5LDYgKzEwMDUsOCBAQAogCiAJCS8qIG5vcm1hbCB0dW5lIG1vZGUgd2hlbiBvcGVuZWQgUi9XICovCiAJCWZlcHJpdi0+dHVuZV9tb2RlX2ZsYWdzICY9IH5GRV9UVU5FX01PREVfT05FU0hPVDsKKwkJZmVwcml2LT50b25lID0gLTE7CisJCWZlcHJpdi0+dm9sdGFnZSA9IC0xOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCmluZGV4IGQ1YWVlNWEuLjU5MjZhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCkBAIC0xMTIsNiArMTEyLDggQEAKIAogZXh0ZXJuIGludCBkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CiAKK2V4dGVybiB2b2lkIGR2Yl9mcm9udGVuZF9yZWluaXRpYWxpc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworCiBleHRlcm4gdm9pZCBkdmJfZnJvbnRlbmRfc2xlZXBfdW50aWwoc3RydWN0IHRpbWV2YWwgKndha2V0aW1lLCB1MzIgYWRkX3VzZWMpOwogZXh0ZXJuIHMzMiB0aW1ldmFsX3VzZWNfZGlmZihzdHJ1Y3QgdGltZXZhbCBsYXN0dGltZSwgc3RydWN0IHRpbWV2YWwgY3VydGltZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKaW5kZXggOTZmZTBlYy4uMzg1MjQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKQEAgLTIxOSw4ICsyMTksNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltdXRleF91bmxvY2soJmR2YmRldl9yZWdpc3Rlcl9sb2NrKTsKLQogCW1lbWNweShkdmJkZXYsIHRlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGR2Yl9kZXZpY2UpKTsKIAlkdmJkZXYtPnR5cGUgPSB0eXBlOwogCWR2YmRldi0+aWQgPSBpZDsKQEAgLTIzMSw2ICsyMjksOCBAQAogCiAJbGlzdF9hZGRfdGFpbCAoJmR2YmRldi0+bGlzdF9oZWFkLCAmYWRhcC0+ZGV2aWNlX2xpc3QpOwogCisJbXV0ZXhfdW5sb2NrKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CisKIAlkZXZmc19ta19jZGV2KE1LREVWKERWQl9NQUpPUiwgbnVtczJtaW5vcihhZGFwLT5udW0sIHR5cGUsIGlkKSksCiAJCQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsCiAJCQkiZHZiL2FkYXB0ZXIlZC8lcyVkIiwgYWRhcC0+bnVtLCBkbmFtZXNbdHlwZV0sIGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwppbmRleCBkM2RmMTIwLi5lMzg4ZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIERWQl9VU0IKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdmFyaW91cyBVU0IgRFZCIGRldmljZXMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBVU0IKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFVTQiAmJiBJMkMKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQnkgZW5hYmxpbmcgdGhpcyB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNob29zZSB0aGUgdmFyaW91cyBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCBhMTRlNzM3Li4xZjBkM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0xNTAsNiArMTUwLDE1IEBACiAJCXJldHVybiBjeHVzYl9jdHJsX21zZyhkLCBDTURfUE9XRVJfT0ZGLCAmYiwgMSwgTlVMTCwgMCk7CiB9CiAKK3N0YXRpYyBpbnQgY3h1c2JfYmx1ZWJpcmRfcG93ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3sKKwl1OCBiID0gMDsKKwlpZiAob25vZmYpCisJCXJldHVybiBjeHVzYl9jdHJsX21zZyhkLCBDTURfUE9XRVJfT04sICZiLCAxLCBOVUxMLCAwKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGN4dXNiX3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQogewogCXU4IGJ1ZlsyXSA9IHsgMHgwMywgMHgwMCB9OwpAQCAtMjMzLDYgKzI0Miw0NSBAQAogCXsgMHhmZSwgMHg0ZSwgS0VZX1BPV0VSIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGR2aWNvX3BvcnRhYmxlX3JjX2tleXNbXSA9IHsKKwl7IDB4ZmMsIDB4MDIsIEtFWV9TRVRVUCB9LCAgICAgICAvKiBQcm9maWxlICovCisJeyAweGZjLCAweDQzLCBLRVlfUE9XRVIyIH0sCisJeyAweGZjLCAweDA2LCBLRVlfRVBHIH0sCisJeyAweGZjLCAweDVhLCBLRVlfQkFDSyB9LAorCXsgMHhmYywgMHgwNSwgS0VZX01FTlUgfSwKKwl7IDB4ZmMsIDB4NDcsIEtFWV9JTkZPIH0sCisJeyAweGZjLCAweDAxLCBLRVlfVEFCIH0sCisJeyAweGZjLCAweDQyLCBLRVlfUFJFVklPVVNTT05HIH0sLyogUmVwbGF5ICovCisJeyAweGZjLCAweDQ5LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4ZmMsIDB4MDksIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweGZjLCAweDU0LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweGZjLCAweDBiLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4ZmMsIDB4MTYsIEtFWV9DQU1FUkEgfSwKKwl7IDB4ZmMsIDB4NDAsIEtFWV9UVU5FUiB9LAkvKiBBVFYvRFRWICovCisJeyAweGZjLCAweDQ1LCBLRVlfT1BFTiB9LAorCXsgMHhmYywgMHgxOSwgS0VZXzEgfSwKKwl7IDB4ZmMsIDB4MTgsIEtFWV8yIH0sCisJeyAweGZjLCAweDFiLCBLRVlfMyB9LAorCXsgMHhmYywgMHgxYSwgS0VZXzQgfSwKKwl7IDB4ZmMsIDB4NTgsIEtFWV81IH0sCisJeyAweGZjLCAweDU5LCBLRVlfNiB9LAorCXsgMHhmYywgMHgxNSwgS0VZXzcgfSwKKwl7IDB4ZmMsIDB4MTQsIEtFWV84IH0sCisJeyAweGZjLCAweDE3LCBLRVlfOSB9LAorCXsgMHhmYywgMHg0NCwgS0VZX0FOR0xFIH0sCS8qIEFzcGVjdCAqLworCXsgMHhmYywgMHg1NSwgS0VZXzAgfSwKKwl7IDB4ZmMsIDB4MDcsIEtFWV9aT09NIH0sCisJeyAweGZjLCAweDBhLCBLRVlfUkVXSU5EIH0sCisJeyAweGZjLCAweDA4LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweGZjLCAweDRiLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4ZmMsIDB4NWIsIEtFWV9NVVRFIH0sCisJeyAweGZjLCAweDA0LCBLRVlfU1RPUCB9LAorCXsgMHhmYywgMHg1NiwgS0VZX1JFQ09SRCB9LAorCXsgMHhmYywgMHg1NywgS0VZX1BPV0VSIH0sCisJeyAweGZjLCAweDQxLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBJTlBVVCAqLworCXsgMHhmYywgMHgwMCwgS0VZX1VOS05PV04gfSwgICAgLyogSEQgKi8KK307CisKIHN0YXRpYyBpbnQgY3h1c2JfZGVlMTYwMV9kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewogCXN0YXRpYyB1OCBjbG9ja19jb25maWcgW10gID0geyBDTE9DS19DVEwsICAweDM4LCAweDI4IH07CkBAIC01MDUsMTIgKzU1MywxNyBAQAogCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBjeHVzYl9zdGF0ZSksCiAKIAkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAotCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfcG93ZXJfY3RybCwKKwkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX2JsdWViaXJkX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9sZ2R0MzMwM19mcm9udGVuZF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9sZ2gwNjRmX3R1bmVyX2F0dGFjaCwKIAogCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAogCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJLnJjX2tleV9tYXAgICAgICAgPSBkdmljb19wb3J0YWJsZV9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkdmljb19wb3J0YWJsZV9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAorCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCiAJLnVyYiA9IHsKQEAgLTU0NSw3ICs1OTgsNyBAQAogCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBjeHVzYl9zdGF0ZSksCiAKIAkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAotCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfcG93ZXJfY3RybCwKKwkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX2JsdWViaXJkX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9kZWUxNjAxX2Zyb250ZW5kX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX2RlZTE2MDFfdHVuZXJfYXR0YWNoLAogCkBAIC01OTQsMTIgKzY0NywxNyBAQAogCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBjeHVzYl9zdGF0ZSksCiAKIAkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAotCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfcG93ZXJfY3RybCwKKwkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX2JsdWViaXJkX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9tdDM1Ml9mcm9udGVuZF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9sZ3oyMDFfdHVuZXJfYXR0YWNoLAogCiAJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCiAKKwkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKKwkucmNfa2V5X21hcCAgICAgICA9IGR2aWNvX3BvcnRhYmxlX3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGR2aWNvX3BvcnRhYmxlX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCisKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KIAkudXJiID0gewpAQCAtNjM0LDEyICs2OTIsMTcgQEAKIAkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgY3h1c2Jfc3RhdGUpLAogCiAJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKLQkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX3Bvd2VyX2N0cmwsCisJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsLAogCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfbXQzNTJfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gY3h1c2JfZHR0NzU3OV90dW5lcl9hdHRhY2gsCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZjeHVzYl9pMmNfYWxnbywKIAorCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCS5yY19rZXlfbWFwICAgICAgID0gZHZpY29fcG9ydGFibGVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZHZpY29fcG9ydGFibGVfcmNfa2V5cyksCisJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKKwogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCS51cmIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCmluZGV4IDEyZWJhZjguLjcwYWZjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCkBAIC05NCwxMiArOTQsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZHR0MjAwdV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgd3QyMjB1X3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyB3dDIyMHVfemwwMzUzX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgZHR0MjAwdV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlpZiAoZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZkdHQyMDB1X3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCB8fAotCQlkdmJfdXNiX2RldmljZV9pbml0KGludGYsJnd0MjIwdV9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpID09IDApCisJCWR2Yl91c2JfZGV2aWNlX2luaXQoaW50Ziwmd3QyMjB1X3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCB8fAorCQlkdmJfdXNiX2RldmljZV9pbml0KGludGYsJnd0MjIwdV96bDAzNTNfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtRU5PREVWOwpAQCAtMTEwLDYgKzExMiw4IEBACiAJeyBVU0JfREVWSUNFKFVTQl9WSURfV0lERVZJRVcsIFVTQl9QSURfRFRUMjAwVV9XQVJNKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX1dUMjIwVV9DT0xEKSAgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywgVVNCX1BJRF9XVDIyMFVfV0FSTSkgIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfV0lERVZJRVcsIFVTQl9QSURfV1QyMjBVX1pMMDM1M19DT0xEKSAgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywgVVNCX1BJRF9XVDIyMFVfWkwwMzUzX1dBUk0pICB9LAogCXsgMCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkdHQyMDB1X3VzYl90YWJsZSk7CkBAIC0xOTYsNiArMjAwLDQ3IEBACiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgd3QyMjB1X3psMDM1M19wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfTkVFRF9QSURfRklMVEVSSU5HLAorCS5waWRfZmlsdGVyX2NvdW50ID0gMTUsCisKKwkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKKwkuZmlybXdhcmUgPSAiZHZiLXVzYi13dDIyMHUtemwwMzUzLTAxLmZ3IiwKKworCS5wb3dlcl9jdHJsICAgICAgPSBkdHQyMDB1X3Bvd2VyX2N0cmwsCisJLnN0cmVhbWluZ19jdHJsICA9IGR0dDIwMHVfc3RyZWFtaW5nX2N0cmwsCisJLnBpZF9maWx0ZXIgICAgICA9IGR0dDIwMHVfcGlkX2ZpbHRlciwKKwkuZnJvbnRlbmRfYXR0YWNoID0gZHR0MjAwdV9mcm9udGVuZF9hdHRhY2gsCisKKwkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAorCS5yY19rZXlfbWFwICAgICAgPSBkdHQyMDB1X3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZHR0MjAwdV9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKKworCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCisKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJLnVyYiA9IHsKKwkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCisJCS5jb3VudCA9IDcsCisJCS5lbmRwb2ludCA9IDB4MDIsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJfQorCQl9CisJfSwKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeyAubmFtZSA9ICJXaWRlVmlldyBXVC0yMjBVIFBlblR5cGUgUmVjZWl2ZXIgKGJhc2VkIG9uIFpMMzUzKSIsCisJCSAgLmNvbGRfaWRzID0geyAmZHR0MjAwdV91c2JfdGFibGVbNF0sIE5VTEwgfSwKKwkJICAud2FybV9pZHMgPSB7ICZkdHQyMDB1X3VzYl90YWJsZVs1XSwgTlVMTCB9LAorCQl9LAorCQl7IE5VTEwgfSwKKwl9Cit9OworCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZHR0MjAwdV91c2JfZHJpdmVyID0gewogCS5uYW1lCQk9ICJkdmJfdXNiX2R0dDIwMHUiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDRhMWI5ZTc3Li5jYjIzOTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC04Myw2ICs4Myw4IEBACiAjZGVmaW5lIFVTQl9QSURfRFRUMjAwVV9XQVJNCQkJCTB4MDMwMQogI2RlZmluZSBVU0JfUElEX1dUMjIwVV9DT0xECQkJCQkweDAyMjIKICNkZWZpbmUgVVNCX1BJRF9XVDIyMFVfV0FSTQkJCQkJMHgwMjIxCisjZGVmaW5lIFVTQl9QSURfV1QyMjBVX1pMMDM1M19DT0xECQkJMHgwMjJhCisjZGVmaW5lIFVTQl9QSURfV1QyMjBVX1pMMDM1M19XQVJNCQkJMHgwMjJiCiAjZGVmaW5lIFVTQl9QSURfV0lOVFZfTk9WQV9UX1VTQjJfQ09MRAkJMHg5MzAwCiAjZGVmaW5lIFVTQl9QSURfV0lOVFZfTk9WQV9UX1VTQjJfV0FSTQkJMHg5MzAxCiAjZGVmaW5lIFVTQl9QSURfTkVCVUxBX0RJR0lUVgkJCQkweDAyMDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC1mZS5jCmluZGV4IGI2ZDk1ZTEuLjJhODlmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMngtZmUuYwpAQCAtMTQ3LDggKzE0Nyw5IEBACiAJY21kWzRdID0gKHNyID4+IDQpICAmIDB4ZmY7CiAJY21kWzVdID0gKHNyIDw8IDQpICAmIDB4ZjA7CiAKLQlkZWJfZmUoInNldHRpbmcgZnJvbnRlbmQgdG86ICV1IC0+ICV1ICgleCkgTE5CLWJhc2VkIEdIeiwgc3ltYm9scmF0ZTogJWQgLT4gJUx1ICglTHgpXG4iLAotCQkJZmVwLT5mcmVxdWVuY3ksZnJlcSxmcmVxLCBmZXAtPnUucXBzay5zeW1ib2xfcmF0ZSwgc3IsIHNyKTsKKwlkZWJfZmUoInNldHRpbmcgZnJvbnRlbmQgdG86ICV1IC0+ICV1ICgleCkgTE5CLWJhc2VkIEdIeiwgc3ltYm9scmF0ZTogJWQgLT4gJWx1ICglbHgpXG4iLAorCQkJZmVwLT5mcmVxdWVuY3ksZnJlcSxmcmVxLCBmZXAtPnUucXBzay5zeW1ib2xfcmF0ZSwKKwkJCSh1bnNpZ25lZCBsb25nKSBzciwgKHVuc2lnbmVkIGxvbmcpIHNyKTsKIAogLyoJaWYgKGZlcC0+aW52ZXJzaW9uID09IElOVkVSU0lPTl9PTikKIAkJY21kWzZdIHw9IDB4ODA7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDk0MjMzMTYuLjM3ZDVlMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC0xODEsNiArMTgxLDExIEBACiAJaGVscAogCSAgQW4gQVRTQyA4VlNCIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKKwkgIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kCisJICAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBvcjUxMjExIiB0bworCSAgZG93bmxvYWQgaXQsIGFuZCB0aGVuIGNvcHkgaXQgdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZQorCSAgb3IgL2xpYi9maXJtd2FyZSAoZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb2YgZmlybXdhcmUgaG90cGx1ZykuCisKIGNvbmZpZyBEVkJfT1I1MTEzMgogCXRyaXN0YXRlICJPcmVuIE9SNTExMzIgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQpAQCAtMTg5LDYgKzE5NCwxMyBAQAogCSAgQW4gQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50CiAJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKKwkgIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kcworCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgb3I1MTEzMl92c2IiIGFuZC9vcgorCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgb3I1MTEzMl9xYW0iIHRvCisJICBkb3dubG9hZCBmaXJtd2FyZXMgZm9yIDhWU0IgYW5kIFFBTTY0LzI1NiwgcmVzcGVjdGl2ZWx5LiBDb3B5IHRoZW0gdG8KKwkgIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZSAoZGVwZW5kaW5nIG9uCisJICBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgorCiBjb25maWcgRFZCX0JDTTM1MTAKIAl0cmlzdGF0ZSAiQnJvYWRjb20gQkNNMzUxMCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwppbmRleCBkNjYxYzZmLi42OTFkYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJjeDI0MTIzLmgiCiAKKyNkZWZpbmUgWFRBTCAxMDExMTAwMAorCitzdGF0aWMgaW50IGZvcmNlX2JhbmQ7CiBzdGF0aWMgaW50IGRlYnVnOwogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKIAlkbyB7IFwKQEAgLTUyLDYgKzU1LDcgQEAKIAl1MzIgVkdBYXJnOwogCXUzMiBiYW5kc2VsZWN0YXJnOwogCXUzMiBwbGxhcmc7CisJdTMyIEZJTFR1bmU7CiAKIAkvKiBUaGUgRGVtb2QvVHVuZXIgY2FuJ3QgZWFzaWx5IHByb3ZpZGUgdGhlc2UsIHdlIGNhY2hlIHRoZW0gKi8KIAl1MzIgY3VycmVudGZyZXE7CkBAIC02Myw0MyArNjcsMzMgQEAKIHsKIAl1MzIgc3ltYm9scmF0ZV9sb3c7CiAJdTMyIHN5bWJvbHJhdGVfaGlnaDsKLQl1MzIgVkNBc2xvcGU7Ci0JdTMyIFZDQW9mZnNldDsKLQl1MzIgVkdBMW9mZnNldDsKLQl1MzIgVkdBMm9mZnNldDsKIAl1MzIgVkNBcHJvZ2RhdGE7CiAJdTMyIFZHQXByb2dkYXRhOworCXUzMiBGSUxUdW5lOwogfSBjeDI0MTIzX0FHQ192YWxzW10gPQogewogCXsKIAkJLnN5bWJvbHJhdGVfbG93CQk9IDEwMDAwMDAsCiAJCS5zeW1ib2xyYXRlX2hpZ2gJPSA0OTk5OTk5LAotCQkuVkNBc2xvcGUJCT0gMHgwNywKLQkJLlZDQW9mZnNldAkJPSAweDBmLAotCQkuVkdBMW9mZnNldAkJPSAweDFmOCwKLQkJLlZHQTJvZmZzZXQJCT0gMHgxZjgsCi0JCS5WR0Fwcm9nZGF0YQkJPSAoMiA8PCAxOCkgfCAoMHgxZjggPDwgOSkgfCAweDFmOCwKLQkJLlZDQXByb2dkYXRhCQk9ICg0IDw8IDE4KSB8ICgweDA3IDw8IDkpIHwgMHgwNywKKwkJLyogdGhlIHNwZWNzIHJlY29tbWVuZCBvdGhlciB2YWx1ZXMgZm9yIFZHQSBvZmZzZXRzLAorCQkgICBidXQgdGVzdHMgc2hvdyB0aGV5IGFyZSB3cm9uZyAqLworCQkuVkdBcHJvZ2RhdGEJCT0gKDEgPDwgMTkpIHwgKDB4MTgwIDw8IDkpIHwgMHgxZTAsCisJCS5WQ0Fwcm9nZGF0YQkJPSAoMiA8PCAxOSkgfCAoMHgwNyA8PCA5KSB8IDB4MDcsCisJCS5GSUxUdW5lCQk9IDB4MjdmIC8qIDAuNDEgViAqLwogCX0sCiAJewogCQkuc3ltYm9scmF0ZV9sb3cJCT0gIDUwMDAwMDAsCiAJCS5zeW1ib2xyYXRlX2hpZ2gJPSAxNDk5OTk5OSwKLQkJLlZDQXNsb3BlCQk9IDB4MWYsCi0JCS5WQ0FvZmZzZXQJCT0gMHgxZiwKLQkJLlZHQTFvZmZzZXQJCT0gMHgxZTAsCi0JCS5WR0Eyb2Zmc2V0CQk9IDB4MTgwLAotCQkuVkdBcHJvZ2RhdGEJCT0gKDIgPDwgMTgpIHwgKDB4MTgwIDw8IDkpIHwgMHgxZTAsCi0JCS5WQ0Fwcm9nZGF0YQkJPSAoNCA8PCAxOCkgfCAoMHgwNyA8PCA5KSB8IDB4MWYsCisJCS5WR0Fwcm9nZGF0YQkJPSAoMSA8PCAxOSkgfCAoMHgxODAgPDwgOSkgfCAweDFlMCwKKwkJLlZDQXByb2dkYXRhCQk9ICgyIDw8IDE5KSB8ICgweDA3IDw8IDkpIHwgMHgxZiwKKwkJLkZJTFR1bmUJCT0gMHgzMTcgLyogMC45MCBWICovCiAJfSwKIAl7CiAJCS5zeW1ib2xyYXRlX2xvdwkJPSAxNTAwMDAwMCwKIAkJLnN5bWJvbHJhdGVfaGlnaAk9IDQ1MDAwMDAwLAotCQkuVkNBc2xvcGUJCT0gMHgzZiwKLQkJLlZDQW9mZnNldAkJPSAweDNmLAotCQkuVkdBMW9mZnNldAkJPSAweDE4MCwKLQkJLlZHQTJvZmZzZXQJCT0gMHgxMDAsCi0JCS5WR0Fwcm9nZGF0YQkJPSAoMiA8PCAxOCkgfCAoMHgxMDAgPDwgOSkgfCAweDE4MCwKLQkJLlZDQXByb2dkYXRhCQk9ICg0IDw8IDE4KSB8ICgweDA3IDw8IDkpIHwgMHgzZiwKKwkJLlZHQXByb2dkYXRhCQk9ICgxIDw8IDE5KSB8ICgweDEwMCA8PCA5KSB8IDB4MTgwLAorCQkuVkNBcHJvZ2RhdGEJCT0gKDIgPDwgMTkpIHwgKDB4MDcgPDwgOSkgfCAweDNmLAorCQkuRklMVHVuZQkJPSAweDE0NSAvKiAyLjcwIFYgKi8KIAl9LAogfTsKIApAQCAtMTEyLDkxICsxMDYsODAgQEAKIHsKIAl1MzIgZnJlcV9sb3c7CiAJdTMyIGZyZXFfaGlnaDsKLQl1MzIgYmFuZHNlbGVjdDsKIAl1MzIgVkNPZGl2aWRlcjsKLQl1MzIgVkNPbnVtYmVyOwogCXUzMiBwcm9nZGF0YTsKIH0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbXSA9CiB7CisJLyogYmFuZCAxICovCiAJewogCQkuZnJlcV9sb3cJPSA5NTAwMDAsCi0JCS5mcmVxX2hpZ2gJPSAxMDE4OTk5LAotCQkuYmFuZHNlbGVjdAk9IDB4NDAsCi0JCS5WQ09kaXZpZGVyCT0gNCwKLQkJLlZDT251bWJlcgk9IDcsCi0JCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgwIDw8IDkpIHwgMHg0MCwKLQl9LAotCXsKLQkJLmZyZXFfbG93CT0gMTAxOTAwMCwKIAkJLmZyZXFfaGlnaAk9IDEwNzQ5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHg4MCwKIAkJLlZDT2RpdmlkZXIJPSA0LAotCQkuVkNPbnVtYmVyCT0gOCwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDAgPDwgOSkgfCAweDgwLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMCA8PCA5KSB8IDB4NDAsCiAJfSwKKworCS8qIGJhbmQgMiAqLwogCXsKIAkJLmZyZXFfbG93CT0gMTA3NTAwMCwKLQkJLmZyZXFfaGlnaAk9IDEyMjc5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHgwMSwKLQkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gMSwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDAxLAorCQkuZnJlcV9oaWdoCT0gMTE3Nzk5OSwKKwkJLlZDT2RpdmlkZXIJPSA0LAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMCA8PCA5KSB8IDB4ODAsCiAJfSwKKworCS8qIGJhbmQgMyAqLwogCXsKLQkJLmZyZXFfbG93CT0gMTIyODAwMCwKLQkJLmZyZXFfaGlnaAk9IDEzNDk5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHgwMiwKKwkJLmZyZXFfbG93CT0gMTE3ODAwMCwKKwkJLmZyZXFfaGlnaAk9IDEyOTU5OTksCiAJCS5WQ09kaXZpZGVyCT0gMiwKLQkJLlZDT251bWJlcgk9IDIsCi0JCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgxIDw8IDkpIHwgMHgwMiwKKwkJLnByb2dkYXRhCT0gKDAgPDwgMTkpIHwgKDEgPDwgOSkgfCAweDAxLAogCX0sCisKKwkvKiBiYW5kIDQgKi8KIAl7Ci0JCS5mcmVxX2xvdwk9IDEzNTAwMDAsCi0JCS5mcmVxX2hpZ2gJPSAxNDgxOTk5LAotCQkuYmFuZHNlbGVjdAk9IDB4MDQsCisJCS5mcmVxX2xvdwk9IDEyOTYwMDAsCisJCS5mcmVxX2hpZ2gJPSAxNDMxOTk5LAogCQkuVkNPZGl2aWRlcgk9IDIsCi0JCS5WQ09udW1iZXIJPSAzLAotCQkucHJvZ2RhdGEJPSAoMCA8PCAxOCkgfCAoMSA8PCA5KSB8IDB4MDQsCisJCS5wcm9nZGF0YQk9ICgwIDw8IDE5KSB8ICgxIDw8IDkpIHwgMHgwMiwKIAl9LAorCisJLyogYmFuZCA1ICovCiAJewotCQkuZnJlcV9sb3cJPSAxNDgyMDAwLAotCQkuZnJlcV9oaWdoCT0gMTU5NTk5OSwKLQkJLmJhbmRzZWxlY3QJPSAweDA4LAorCQkuZnJlcV9sb3cJPSAxNDMyMDAwLAorCQkuZnJlcV9oaWdoCT0gMTU3NTk5OSwKIAkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gNCwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDA4LAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMSA8PCA5KSB8IDB4MDQsCiAJfSwKKworCS8qIGJhbmQgNiAqLwogCXsKLQkJLmZyZXFfbG93CT0gMTU5NjAwMCwKKwkJLmZyZXFfbG93CT0gMTU3NjAwMCwKIAkJLmZyZXFfaGlnaAk9IDE3MTc5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHgxMCwKIAkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gNSwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDEwLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMSA8PCA5KSB8IDB4MDgsCiAJfSwKKworCS8qIGJhbmQgNyAqLwogCXsKIAkJLmZyZXFfbG93CT0gMTcxODAwMCwKIAkJLmZyZXFfaGlnaAk9IDE4NTU5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHgyMCwKIAkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gNiwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDIwLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMSA8PCA5KSB8IDB4MTAsCiAJfSwKKworCS8qIGJhbmQgOCAqLwogCXsKIAkJLmZyZXFfbG93CT0gMTg1NjAwMCwKIAkJLmZyZXFfaGlnaAk9IDIwMzU5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHg0MCwKIAkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gNywKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDQwLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMSA8PCA5KSB8IDB4MjAsCiAJfSwKKworCS8qIGJhbmQgOSAqLwogCXsKIAkJLmZyZXFfbG93CT0gMjAzNjAwMCwKLQkJLmZyZXFfaGlnaAk9IDIxNDk5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHg4MCwKKwkJLmZyZXFfaGlnaAk9IDIxNTAwMDAsCiAJCS5WQ09kaXZpZGVyCT0gMiwKLQkJLlZDT251bWJlcgk9IDgsCi0JCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgxIDw8IDkpIHwgMHg4MCwKKwkJLnByb2dkYXRhCT0gKDAgPDwgMTkpIHwgKDEgPDwgOSkgfCAweDQwLAogCX0sCiB9OwogCkBAIC0yMDcsNDkgKzE5MCw0NCBAQAogewogCXsweDAwLCAweDAzfSwgLyogUmVzZXQgc3lzdGVtICovCiAJezB4MDAsIDB4MDB9LCAvKiBDbGVhciByZXNldCAqLwotCXsweDAxLCAweDNifSwgLyogQXBwbHkgc2Vuc2libGUgZGVmYXVsdHMsIGZyb20gYW4gaTJjIHNuaWZmZXIgKi8KLQl7MHgwMywgMHgwN30sCi0JezB4MDQsIDB4MTB9LAotCXsweDA1LCAweDA0fSwKLQl7MHgwNiwgMHgzMX0sCi0JezB4MGQsIDB4MDJ9LAotCXsweDBlLCAweDAzfSwKLQl7MHgwZiwgMHhmZX0sCi0JezB4MTAsIDB4MDF9LAotCXsweDE0LCAweDAxfSwKLQl7MHgxNSwgMHg5OH0sCi0JezB4MTYsIDB4MDB9LAotCXsweDE3LCAweDAxfSwKLQl7MHgxYiwgMHgwNX0sCi0JezB4MWMsIDB4ODB9LAotCXsweDFkLCAweDAwfSwKLQl7MHgxZSwgMHgwMH0sCi0JezB4MjAsIDB4NDF9LAotCXsweDIxLCAweDE1fSwKLQl7MHgyNywgMHgxNH0sCi0JezB4MjgsIDB4NDZ9LAotCXsweDI5LCAweDAwfSwKLQl7MHgyYSwgMHhiMH0sCi0JezB4MmIsIDB4NzN9LAotCXsweDJjLCAweDAwfSwKKwl7MHgwMywgMHgwN30sIC8qIFFQU0ssIERWQiwgQXV0byBBY3F1aXNpdGlvbiAoZGVmYXVsdCkgKi8KKwl7MHgwNCwgMHgxMH0sIC8qIE1QRUcgKi8KKwl7MHgwNSwgMHgwNH0sIC8qIE1QRUcgKi8KKwl7MHgwNiwgMHgzMX0sIC8qIE1QRUcgKGRlZmF1bHQpICovCisJezB4MGIsIDB4MDB9LCAvKiBGcmVxIHNlYXJjaCBzdGFydCBwb2ludCAoZGVmYXVsdCkgKi8KKwl7MHgwYywgMHgwMH0sIC8qIERlbW9kdWxhdG9yIHNhbXBsZSBnYWluIChkZWZhdWx0KSAqLworCXsweDBkLCAweDAyfSwgLyogRnJlcXVlbmN5IHNlYXJjaCByYW5nZSA9IEZzeW1ib2wgLyA0IChkZWZhdWx0KSAqLworCXsweDBlLCAweDAzfSwgLyogRGVmYXVsdCBub24taW52ZXJ0ZWQsIEZFQyAzLzQgKGRlZmF1bHQpICovCisJezB4MGYsIDB4ZmV9LCAvKiBGRUMgc2VhcmNoIG1hc2sgKGFsbCBzdXBwb3J0ZWQgY29kZXMpICovCisJezB4MTAsIDB4MDF9LCAvKiBEZWZhdWx0IHNlYXJjaCBpbnZlcnNpb24sIG5vIHJlcGVhdCAoZGVmYXVsdCkgKi8KKwl7MHgxNiwgMHgwMH0sIC8qIEVuYWJsZSByZWFkaW5nIG9mIGZyZXF1ZW5jeSAqLworCXsweDE3LCAweDAxfSwgLyogRW5hYmxlIEVzTk8gUmVhZHkgQ291bnRlciAqLworCXsweDFjLCAweDgwfSwgLyogRW5hYmxlIGVycm9yIGNvdW50ZXIgKi8KKwl7MHgyMCwgMHgwMH0sIC8qIFR1bmVyIGJ1cnN0IGNsb2NrIHJhdGUgPSA1MDBLSHogKi8KKwl7MHgyMSwgMHgxNX0sIC8qIFR1bmVyIGJ1cnN0IG1vZGUsIHdvcmQgbGVuZ3RoID0gMHgxNSAqLworCXsweDI4LCAweDAwfSwgLyogRW5hYmxlIEZJTFRFUlYgd2l0aCBwb3NpdGl2ZSBwb2wuLCBEaVNFcUMgMi54IG9mZiAqLworCXsweDI5LCAweDAwfSwgLyogRGlTRXFDIExOQl9EQyBvZmYgKi8KKwl7MHgyYSwgMHhiMH0sIC8qIERpU0VxQyBQYXJhbWV0ZXJzIChkZWZhdWx0KSAqLworCXsweDJiLCAweDczfSwgLyogRGlTRXFDIFRvbmUgRnJlcXVlbmN5IChkZWZhdWx0KSAqLworCXsweDJjLCAweDAwfSwgLyogRGlTRXFDIE1lc3NhZ2UgKDB4MmMgLSAweDMxKSAqLwogCXsweDJkLCAweDAwfSwKIAl7MHgyZSwgMHgwMH0sCiAJezB4MmYsIDB4MDB9LAogCXsweDMwLCAweDAwfSwKIAl7MHgzMSwgMHgwMH0sCi0JezB4MzIsIDB4OGN9LAotCXsweDMzLCAweDAwfSwKKwl7MHgzMiwgMHg4Y30sIC8qIERpU0VxQyBQYXJhbWV0ZXJzIChkZWZhdWx0KSAqLworCXsweDMzLCAweDAwfSwgLyogSW50ZXJydXB0cyBvZmYgKDB4MzMgLSAweDM0KSAqLwogCXsweDM0LCAweDAwfSwKLQl7MHgzNSwgMHgwM30sCi0JezB4MzYsIDB4MDJ9LAotCXsweDM3LCAweDNhfSwKLQl7MHgzYSwgMHgwMH0sCS8qIEVuYWJsZSBBR0MgYWNjdW11bGF0b3IgKi8KLQl7MHg0NCwgMHgwMH0sCi0JezB4NDUsIDB4MDB9LAotCXsweDQ2LCAweDA1fSwKLQl7MHg1NiwgMHg0MX0sCi0JezB4NTcsIDB4ZmZ9LAotCXsweDY3LCAweDgzfSwKKwl7MHgzNSwgMHgwM30sIC8qIERpU0VxQyBUb25lIEFtcGxpdHVkZSAoZGVmYXVsdCkgKi8KKwl7MHgzNiwgMHgwMn0sIC8qIERpU0VxQyBQYXJhbWV0ZXJzIChkZWZhdWx0KSAqLworCXsweDM3LCAweDNhfSwgLyogRGlTRXFDIFBhcmFtZXRlcnMgKGRlZmF1bHQpICovCisJezB4M2EsIDB4MDB9LCAvKiBFbmFibGUgQUdDIGFjY3VtdWxhdG9yIChmb3Igc2lnbmFsIHN0cmVuZ3RoKSAqLworCXsweDQ0LCAweDAwfSwgLyogQ29uc3RlbGxhdGlvbiAoZGVmYXVsdCkgKi8KKwl7MHg0NSwgMHgwMH0sIC8qIFN5bWJvbCBjb3VudCAoZGVmYXVsdCkgKi8KKwl7MHg0NiwgMHgwZH0sIC8qIFN5bWJvbCByYXRlIGVzdGltYXRvciBvbiAoZGVmYXVsdCkgKi8KKwl7MHg1NiwgMHg0MX0sIC8qIFZhcmlvdXMgKGRlZmF1bHQpICovCisJezB4NTcsIDB4ZmZ9LCAvKiBFcnJvciBDb3VudGVyIFdpbmRvdyAoZGVmYXVsdCkgKi8KKwl7MHg2NywgMHg4M30sIC8qIE5vbi1EQ0lJIHN5bWJvbCBjbG9jayAqLwogfTsKIAogc3RhdGljIGludCBjeDI0MTIzX3dyaXRlcmVnKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgaW50IHJlZywgaW50IGRhdGEpCkBAIC0yNTgsNiArMjM2LDEwIEBACiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CiAJaW50IGVycjsKIAorCWlmIChkZWJ1Zz4xKQorCQlwcmludGsoImN4MjQxMjM6ICVzOiAgd3JpdGUgcmVnIDB4JTAyeCwgdmFsdWUgMHglMDJ4XG4iLAorCQkJCQkJX19GVU5DVElPTl9fLHJlZywgZGF0YSk7CisKIAlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgewogCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgogCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX0ZVTkNUSU9OX18sIGVyciwgcmVnLCBkYXRhKTsKQEAgLTI3NCw2ICsyNTYsMTAgQEAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKIAlpbnQgZXJyOwogCisJaWYgKGRlYnVnPjEpCisJCXByaW50aygiY3gyNDEyMzogJXM6ICB3cml0ZWxuIGFkZHI9MHgwOCwgcmVnIDB4JTAyeCwgdmFsdWUgMHglMDJ4XG4iLAorCQkJCQkJX19GVU5DVElPTl9fLHJlZywgZGF0YSk7CisKIAlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgewogCQlwcmludGsoIiVzOiB3cml0ZWxuYnJlZyBlcnJvciAoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4LCIKIAkJCSAiIGRhdGEgPT0gMHglMDJ4KVxuIiwgX19GVU5DVElPTl9fLCBlcnIsIHJlZywgZGF0YSk7CkBAIC0zMDMsNiArMjg5LDkgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlpZiAoZGVidWc+MSkKKwkJcHJpbnRrKCJjeDI0MTIzOiByZWFkIHJlZyAweCUwMngsIHZhbHVlIDB4JTAyeFxuIixyZWcsIHJldCk7CisKIAlyZXR1cm4gYjFbMF07CiB9CiAKQEAgLTMxMywxNyArMzAyLDIzIEBACiAKIHN0YXRpYyBpbnQgY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQogeworCXU4IG5vbV9yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpOworCXU4IGF1dG9fcmVnID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDEwKTsKKwogCXN3aXRjaCAoaW52ZXJzaW9uKSB7CiAJY2FzZSBJTlZFUlNJT05fT0ZGOgotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpICYgMHg3Zik7Ci0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MTAsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxMCkgfCAweDgwKTsKKwkJZHByaW50aygiJXM6ICBpbnZlcnNpb24gb2ZmXG4iLF9fRlVOQ1RJT05fXyk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIG5vbV9yZWcgJiB+MHg4MCk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MTAsIGF1dG9fcmVnIHwgMHg4MCk7CiAJCWJyZWFrOwogCWNhc2UgSU5WRVJTSU9OX09OOgotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpIHwgMHg4MCk7Ci0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MTAsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxMCkgfCAweDgwKTsKKwkJZHByaW50aygiJXM6ICBpbnZlcnNpb24gb25cbiIsX19GVU5DVElPTl9fKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZSwgbm9tX3JlZyB8IDB4ODApOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDEwLCBhdXRvX3JlZyB8IDB4ODApOwogCQlicmVhazsKIAljYXNlIElOVkVSU0lPTl9BVVRPOgotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDEwLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MTApICYgMHg3Zik7CisJCWRwcmludGsoIiVzOiAgaW52ZXJzaW9uIGF1dG9cbiIsX19GVU5DVElPTl9fKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgxMCwgYXV0b19yZWcgJiB+MHg4MCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzM4LDkyICszMzMsMTkxIEBACiAKIAl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MWIpID4+IDc7CiAKLQlpZiAodmFsID09IDApCisJaWYgKHZhbCA9PSAwKSB7CisJCWRwcmludGsoIiVzOiAgcmVhZCBpbnZlcnNpb24gb2ZmXG4iLF9fRlVOQ1RJT05fXyk7CiAJCSppbnZlcnNpb24gPSBJTlZFUlNJT05fT0ZGOwotCWVsc2UKKwl9IGVsc2UgeworCQlkcHJpbnRrKCIlczogIHJlYWQgaW52ZXJzaW9uIG9uXG4iLF9fRlVOQ1RJT05fXyk7CiAJCSppbnZlcnNpb24gPSBJTlZFUlNJT05fT047CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3gyNDEyM19zZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfY29kZV9yYXRlX3QgZmVjKQogeworCXU4IG5vbV9yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpICYgfjB4MDc7CisKIAlpZiAoIChmZWMgPCBGRUNfTk9ORSkgfHwgKGZlYyA+IEZFQ19BVVRPKSApCiAJCWZlYyA9IEZFQ19BVVRPOwogCi0JLyogSGFyZHdhcmUgaGFzIDUvMTEgYW5kIDMvNSBidXQgYXJlIG5ldmVyIHVudXNlZCAqLwogCXN3aXRjaCAoZmVjKSB7Ci0JY2FzZSBGRUNfTk9ORToKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MDEpOwogCWNhc2UgRkVDXzFfMjoKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MDIpOworCQlkcHJpbnRrKCIlczogIHNldCBGRUMgdG8gMS8yXG4iLF9fRlVOQ1RJT05fXyk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIG5vbV9yZWcgfCAweDAxKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHgwMik7CisJCWJyZWFrOwogCWNhc2UgRkVDXzJfMzoKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MDQpOworCQlkcHJpbnRrKCIlczogIHNldCBGRUMgdG8gMi8zXG4iLF9fRlVOQ1RJT05fXyk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIG5vbV9yZWcgfCAweDAyKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHgwNCk7CisJCWJyZWFrOwogCWNhc2UgRkVDXzNfNDoKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MDgpOworCQlkcHJpbnRrKCIlczogIHNldCBGRUMgdG8gMy80XG4iLF9fRlVOQ1RJT05fXyk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIG5vbV9yZWcgfCAweDAzKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHgwOCk7CisJCWJyZWFrOworCWNhc2UgRkVDXzRfNToKKwkJZHByaW50aygiJXM6ICBzZXQgRkVDIHRvIDQvNVxuIixfX0ZVTkNUSU9OX18pOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBub21fcmVnIHwgMHgwNCk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MTApOworCQlicmVhazsKIAljYXNlIEZFQ181XzY6Ci0JCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDIwKTsKKwkJZHByaW50aygiJXM6ICBzZXQgRkVDIHRvIDUvNlxuIixfX0ZVTkNUSU9OX18pOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBub21fcmVnIHwgMHgwNSk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MjApOworCQlicmVhazsKKwljYXNlIEZFQ182Xzc6CisJCWRwcmludGsoIiVzOiAgc2V0IEZFQyB0byA2LzdcbiIsX19GVU5DVElPTl9fKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZSwgbm9tX3JlZyB8IDB4MDYpOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDQwKTsKKwkJYnJlYWs7CiAJY2FzZSBGRUNfN184OgotCQlyZXR1cm4gY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHg4MCk7CisJCWRwcmludGsoIiVzOiAgc2V0IEZFQyB0byA3LzhcbiIsX19GVU5DVElPTl9fKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZSwgbm9tX3JlZyB8IDB4MDcpOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDgwKTsKKwkJYnJlYWs7CiAJY2FzZSBGRUNfQVVUTzoKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4YWUpOworCQlkcHJpbnRrKCIlczogIHNldCBGRUMgdG8gYXV0b1xuIixfX0ZVTkNUSU9OX18pOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweGZlKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLX0KLQotc3RhdGljIGludCBjeDI0MTIzX2dldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9jb2RlX3JhdGVfdCAqZmVjKQotewotCWludCByZXQ7Ci0JdTggdmFsOwotCi0JcmV0ID0gY3gyNDEyM19yZWFkcmVnIChzdGF0ZSwgMHgxYik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JdmFsID0gcmV0ICYgMHgwNzsKLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgMToKLQkJKmZlYyA9IEZFQ18xXzI7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJKmZlYyA9IEZFQ18yXzM7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKmZlYyA9IEZFQ18zXzQ7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQkJKmZlYyA9IEZFQ180XzU7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJKmZlYyA9IEZFQ181XzY7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJKmZlYyA9IEZFQ183Xzg7Ci0JCWJyZWFrOwotCWNhc2UgMjoJLyogKmZlYyA9IEZFQ18zXzU7IGJyZWFrOyAqLwotCWNhc2UgMDoJLyogKmZlYyA9IEZFQ181XzExOyBicmVhazsgKi8KLQkJKmZlYyA9IEZFQ19BVVRPOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqZmVjID0gRkVDX05PTkU7IC8vIGNhbid0IGhhcHBlbgotCX0KIAogCXJldHVybiAwOwogfQogCi0vKiBmaXhtZTogU3ltYm9sIHJhdGVzIDwgM01TcHMgbWF5IG5vdCB3b3JrIGJlY2F1c2Ugb2YgcHJlY2lzaW9uIGxvc3MgKi8KK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfY29kZV9yYXRlX3QgKmZlYykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY3gyNDEyM19yZWFkcmVnIChzdGF0ZSwgMHgxYik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gcmV0ICYgMHgwNzsKKworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAxOgorCQkqZmVjID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqZmVjID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkqZmVjID0gRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqZmVjID0gRkVDXzRfNTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQkqZmVjID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQkqZmVjID0gRkVDXzZfNzsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQkqZmVjID0gRkVDXzdfODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlcmUncyBubyBsb2NrICovCisJCSpmZWMgPSBGRUNfTk9ORTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogQXBwcm94aW1hdGlvbiBvZiBjbG9zZXN0IGludGVnZXIgb2YgbG9nMihhL2IpLiBJdCBhY3R1YWxseSBnaXZlcyB0aGUKKyAgIGxvd2VzdCBpbnRlZ2VyIGkgc3VjaCB0aGF0IDJeaSA+PSByb3VuZChhL2IpICovCitzdGF0aWMgdTMyIGN4MjQxMjNfaW50X2xvZzIodTMyIGEsIHUzMiBiKQoreworCXUzMiBleHAsIG5lYXJlc3QgPSAwOworCXUzMiBkaXYgPSBhIC8gYjsKKwlpZihhICUgYiA+PSBiIC8gMikgKytkaXY7CisJaWYoZGl2IDwgKDEgPDwgMzEpKQorCXsKKwkJZm9yKGV4cCA9IDE7IGRpdiA+IGV4cDsgbmVhcmVzdCsrKQorCQkJZXhwICs9IGV4cDsKKwl9CisJcmV0dXJuIG5lYXJlc3Q7Cit9CisKIHN0YXRpYyBpbnQgY3gyNDEyM19zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIHUzMiBzcmF0ZSkKIHsKLQl1MzIgdmFsOworCXUzMiB0bXAsIHNhbXBsZV9yYXRlLCByYXRpbywgc2FtcGxlX2dhaW47CisJdTggcGxsX211bHQ7CiAKLQl2YWwgPSAoc3JhdGUgLyAxMTg1KSAqIDEwMDsKKwkvKiAgY2hlY2sgaWYgc3ltYm9sIHJhdGUgaXMgd2l0aGluIGxpbWl0cyAqLworCWlmICgoc3JhdGUgPiBzdGF0ZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KSB8fAorCSAgICAoc3JhdGUgPCBzdGF0ZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOzsKIAotCS8qIENvbXBlbnNhdGUgZm9yIHNjYWxpbmcgdXAsIGJ5IHJlbW92aW5nIDE3IHN5bWJvbHMgcGVyIDFNc3BzICovCi0JdmFsID0gdmFsIC0gKDE3ICogKHNyYXRlIC8gMTAwMDAwMCkpOworCS8qIGNob29zZSB0aGUgc2FtcGxpbmcgcmF0ZSBoaWdoIGVub3VnaCBmb3IgdGhlIHJlcXVpcmVkIG9wZXJhdGlvbiwKKwkgICB3aGlsZSBvcHRpbWl6aW5nIHRoZSBwb3dlciBjb25zdW1lZCBieSB0aGUgZGVtb2R1bGF0b3IgKi8KKwlpZiAoc3JhdGUgPCAoWFRBTCoyKS8yKQorCQlwbGxfbXVsdCA9IDI7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCozKS8yKQorCQlwbGxfbXVsdCA9IDM7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo0KS8yKQorCQlwbGxfbXVsdCA9IDQ7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo1KS8yKQorCQlwbGxfbXVsdCA9IDU7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo2KS8yKQorCQlwbGxfbXVsdCA9IDY7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo3KS8yKQorCQlwbGxfbXVsdCA9IDc7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo4KS8yKQorCQlwbGxfbXVsdCA9IDg7CisJZWxzZQorCQlwbGxfbXVsdCA9IDk7CiAKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA4LCAodmFsID4+IDE2KSAmIDB4ZmYgKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA5LCAodmFsID4+ICA4KSAmIDB4ZmYgKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBhLCAodmFsICAgICAgKSAmIDB4ZmYgKTsKKworCXNhbXBsZV9yYXRlID0gcGxsX211bHQgKiBYVEFMOworCisJLyoKKwkgICAgU1lTU3ltYm9sUmF0ZVsyMTowXSA9IChzcmF0ZSA8PCAyMykgLyBzYW1wbGVfcmF0ZQorCisJICAgIFdlIGhhdmUgdG8gdXNlIDMyIGJpdCB1bnNpZ25lZCBhcml0aG1ldGljIHdpdGhvdXQgcHJlY2lzaW9uIGxvc3MuCisJICAgIFRoZSBtYXhpbXVtIHNyYXRlIGlzIDQ1MDAwMDAwIG9yIDB4MDJBRUE1NDAuIFRoaXMgbnVtYmVyIGhhcworCSAgICBvbmx5IDYgY2xlYXIgYml0cyBvbiB0b3AsIGhlbmNlIHdlIGNhbiBzaGlmdCBpdCBsZWZ0IG9ubHkgNiBiaXRzCisJICAgIGF0IGEgdGltZS4gQm9ycm93ZWQgZnJvbSBjeDI0MTEwLmMKKwkqLworCisJdG1wID0gc3JhdGUgPDwgNjsKKwlyYXRpbyA9IHRtcCAvIHNhbXBsZV9yYXRlOworCisJdG1wID0gKHRtcCAlIHNhbXBsZV9yYXRlKSA8PCA2OworCXJhdGlvID0gKHJhdGlvIDw8IDYpICsgKHRtcCAvIHNhbXBsZV9yYXRlKTsKKworCXRtcCA9ICh0bXAgJSBzYW1wbGVfcmF0ZSkgPDwgNjsKKwlyYXRpbyA9IChyYXRpbyA8PCA2KSArICh0bXAgLyBzYW1wbGVfcmF0ZSk7CisKKwl0bXAgPSAodG1wICUgc2FtcGxlX3JhdGUpIDw8IDU7CisJcmF0aW8gPSAocmF0aW8gPDwgNSkgKyAodG1wIC8gc2FtcGxlX3JhdGUpOworCisKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAxLCBwbGxfbXVsdCAqIDYpOworCisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOCwgKHJhdGlvID4+IDE2KSAmIDB4M2YgKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA5LCAocmF0aW8gPj4gIDgpICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGEsIChyYXRpbyAgICAgICkgJiAweGZmICk7CisKKwkvKiBhbHNvIHNldCB0aGUgZGVtb2R1bGF0b3Igc2FtcGxlIGdhaW4gKi8KKwlzYW1wbGVfZ2FpbiA9IGN4MjQxMjNfaW50X2xvZzIoc2FtcGxlX3JhdGUsIHNyYXRlKTsKKwl0bXAgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGMpICYgfjB4ZTA7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwYywgdG1wIHwgc2FtcGxlX2dhaW4gPDwgNSk7CisKKwlkcHJpbnRrKCIlczogc3JhdGU9JWQsIHJhdGlvPTB4JTA4eCwgc2FtcGxlX3JhdGU9JWkgc2FtcGxlX2dhaW49JWRcbiIsIF9fRlVOQ1RJT05fXywgc3JhdGUsIHJhdGlvLCBzYW1wbGVfcmF0ZSwgc2FtcGxlX2dhaW4pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MzcsNiArNTMxLDkgQEAKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MzIgbmRpdiA9IDAsIGFkaXYgPSAwLCB2Y29fZGl2ID0gMDsKIAlpbnQgaSA9IDA7CisJaW50IHB1bXAgPSAyOworCWludCBiYW5kID0gMDsKKwlpbnQgbnVtX2JhbmRzID0gc2l6ZW9mKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzKSAvIHNpemVvZihjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXSk7CiAKIAkvKiBEZWZhdWx0cyBmb3IgbG93IGZyZXEsIGxvdyByYXRlICovCiAJc3RhdGUtPlZDQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbMF0uVkNBcHJvZ2RhdGE7CkBAIC00NDQsMzggKzU0MSw0OSBAQAogCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbMF0ucHJvZ2RhdGE7CiAJdmNvX2RpdiA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzWzBdLlZDT2RpdmlkZXI7CiAKLQkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbGVyYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSBhbmQgVkdBIHByb2dyYW1taW5nIGJpdHMgKi8KKwkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbCByYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSwgVkdBIGFuZCBGSUxUVU5FIHByb2dyYW1taW5nIGJpdHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN4MjQxMjNfQUdDX3ZhbHMpIC8gc2l6ZW9mKGN4MjQxMjNfQUdDX3ZhbHNbMF0pOyBpKyspCiAJewogCQlpZiAoKGN4MjQxMjNfQUdDX3ZhbHNbaV0uc3ltYm9scmF0ZV9sb3cgPD0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSAmJgotCQkJCShjeDI0MTIzX0FHQ192YWxzW2ldLnN5bWJvbHJhdGVfaGlnaCA+PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpICkgeworCQkgICAgKGN4MjQxMjNfQUdDX3ZhbHNbaV0uc3ltYm9scmF0ZV9oaWdoID49IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkgKSB7CiAJCQlzdGF0ZS0+VkNBYXJnID0gY3gyNDEyM19BR0NfdmFsc1tpXS5WQ0Fwcm9nZGF0YTsKIAkJCXN0YXRlLT5WR0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzW2ldLlZHQXByb2dkYXRhOworCQkJc3RhdGUtPkZJTFR1bmUgPSBjeDI0MTIzX0FHQ192YWxzW2ldLkZJTFR1bmU7CiAJCX0KIAl9CiAKLQkvKiBGb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeSwgZGV0ZXJtaW5lIHRoZSBiYW5kc2VsZWN0IHByb2dyYW1taW5nIGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzKSAvIHNpemVvZihjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXSk7IGkrKykKKwkvKiBkZXRlcm1pbmUgdGhlIGJhbmQgdG8gdXNlICovCisJaWYoZm9yY2VfYmFuZCA8IDEgfHwgZm9yY2VfYmFuZCA+IG51bV9iYW5kcykKIAl7Ci0JCWlmICgoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uZnJlcV9sb3cgPD0gcC0+ZnJlcXVlbmN5KSAmJgotCQkJCShjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXS5mcmVxX2hpZ2ggPj0gcC0+ZnJlcXVlbmN5KSApIHsKLQkJCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0ucHJvZ2RhdGE7Ci0JCQl2Y29fZGl2ID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uVkNPZGl2aWRlcjsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9iYW5kczsgaSsrKQorCQl7CisJCQlpZiAoKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2ldLmZyZXFfbG93IDw9IHAtPmZyZXF1ZW5jeSkgJiYKKwkJCSAgICAoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uZnJlcV9oaWdoID49IHAtPmZyZXF1ZW5jeSkgKQorCQkJCWJhbmQgPSBpOwogCQl9CiAJfQorCWVsc2UKKwkJYmFuZCA9IGZvcmNlX2JhbmQgLSAxOworCisJc3RhdGUtPmJhbmRzZWxlY3RhcmcgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5wcm9nZGF0YTsKKwl2Y29fZGl2ID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uVkNPZGl2aWRlcjsKKworCS8qIGRldGVybWluZSB0aGUgY2hhcmdlIHB1bXAgY3VycmVudCAqLworCWlmICggcC0+ZnJlcXVlbmN5IDwgKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLmZyZXFfbG93ICsgY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9oaWdoKS8yICkKKwkJcHVtcCA9IDB4MDE7CisJZWxzZQorCQlwdW1wID0gMHgwMjsKIAogCS8qIERldGVybWluZSB0aGUgTi9BIGRpdmlkZXJzIGZvciB0aGUgcmVxdWVzdGVkIGxiYW5kIGZyZXEgKGluIGtIeikuICovCi0JLyogTm90ZTogMTAxMTEgKGtIeikgaXMgdGhlIENyeXN0YWwgRnJlcSBhbmQgZGl2aWRlciBvZiAxMC4gKi8KLQluZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYpIC8gKDEwMTExIC8gMTApIC8gMikgLyAzMikgJiAweDFmZjsKLQlhZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYpIC8gKDEwMTExIC8gMTApIC8gMikgJSAzMikgJiAweDFmOworCS8qIE5vdGU6IHRoZSByZWZlcmVuY2UgZGl2aWRlciBSPTEwLCBmcmVxdWVuY3kgaXMgaW4gS0h6LCBYVEFMIGlzIGluIEh6ICovCisJbmRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpIC8gMzIpICYgMHgxZmY7CisJYWRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpICUgMzIpICYgMHgxZjsKIAogCWlmIChhZGl2ID09IDApCi0JCWFkaXYrKzsKKwkJbmRpdisrOwogCi0JLyogZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBsbCBmcmVxdWVuY3kgdmFsdWVzLiAqLwotCS8qIENvbW1hbmQgMTEsIHJlZmRpdiAxMSwgY3B1bXAgcG9sYXJpdHkgMSwgY3B1bXAgY3VycmVudCAzbUEgMTAuICovCi0Jc3RhdGUtPnBsbGFyZyA9ICgzIDw8IDE5KSB8ICgzIDw8IDE3KSB8ICgxIDw8IDE2KSB8ICgyIDw8IDE0KTsKLQlzdGF0ZS0+cGxsYXJnIHw9IChuZGl2IDw8IDUpIHwgYWRpdjsKKwkvKiBjb250cm9sIGJpdHMgMTEsIHJlZmRpdiAxMSwgY2hhcmdlIHB1bXAgcG9sYXJpdHkgMSwgY2hhcmdlIHB1bXAgY3VycmVudCwgbmRpdiwgYWRpdiAqLworCXN0YXRlLT5wbGxhcmcgPSAoMyA8PCAxOSkgfCAoMyA8PCAxNykgfCAoMSA8PCAxNikgfCAocHVtcCA8PCAxNCkgfCAobmRpdiA8PCA1KSB8IGFkaXY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4OSw2ICs1OTcsOCBAQAogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAorCWRwcmludGsoIiVzOiAgcGxsIHdyaXRlcmVnIGNhbGxlZCwgZGF0YT0weCUwOHhcbiIsX19GVU5DVElPTl9fLGRhdGEpOworCiAJLyogYWxpZ24gdGhlIDIxIGJ5dGVzIGludG8gdG8gYml0MjMgYm91bmRhcnkgKi8KIAlkYXRhID0gZGF0YSA8PCAzOwogCkBAIC01MzgsNiArNjQ4LDkgQEAKIHN0YXRpYyBpbnQgY3gyNDEyM19wbGxfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKworCWRwcmludGsoImZyZXF1ZW5jeT0laVxuIiwgcC0+ZnJlcXVlbmN5KTsKIAogCWlmIChjeDI0MTIzX3BsbF9jYWxjdWxhdGUoZmUsIHApICE9IDApIHsKIAkJcHJpbnRrKCIlczogY3gyNDEyM19wbGxfY2FsY3V0YXRlIGZhaWxlZFxuIixfX0ZVTkNUSU9OX18pOwpAQCAtNTUyLDYgKzY2NSwxNCBAQAogCWN4MjQxMjNfcGxsX3dyaXRlcmVnKGZlLCBwLCBzdGF0ZS0+YmFuZHNlbGVjdGFyZyk7CiAJY3gyNDEyM19wbGxfd3JpdGVyZWcoZmUsIHAsIHN0YXRlLT5wbGxhcmcpOwogCisJLyogc2V0IHRoZSBGSUxUVU5FIHZvbHRhZ2UgKi8KKwl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjgpICYgfjB4MzsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI3LCBzdGF0ZS0+RklMVHVuZSA+PiAyKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI4LCB2YWwgfCAoc3RhdGUtPkZJTFR1bmUgJiAweDMpKTsKKworCWRwcmludGsoIiVzOiAgcGxsIHR1bmUgVkNBPSVkLCBiYW5kPSVkLCBwbGw9JWRcbiIsX19GVU5DVElPTl9fLHN0YXRlLT5WQ0FhcmcsCisJCQlzdGF0ZS0+YmFuZHNlbGVjdGFyZyxzdGF0ZS0+cGxsYXJnKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01NjAsNiArNjgxLDggQEAKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaTsKIAorCWRwcmludGsoIiVzOiAgaW5pdCBmcm9udGVuZFxuIixfX0ZVTkNUSU9OX18pOworCiAJLyogQ29uZmlndXJlIHRoZSBkZW1vZCB0byBhIGdvb2Qgc2V0IG9mIGRlZmF1bHRzICovCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihjeDI0MTIzX3JlZ2RhdGEpIC8gc2l6ZW9mKGN4MjQxMjNfcmVnZGF0YVswXSk7IGkrKykKIAkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgY3gyNDEyM19yZWdkYXRhW2ldLnJlZywgY3gyNDEyM19yZWdkYXRhW2ldLmRhdGEpOwpAQCAtNTg3LDEwICs3MTAsMTMgQEAKIAogCQlzd2l0Y2ggKHZvbHRhZ2UpIHsKIAkJY2FzZSBTRUNfVk9MVEFHRV8xMzoKKwkJCWRwcmludGsoIiVzOiAgaXNsNjQyMSB2b2x0YWdlID0gMTNWXG4iLF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCB2YWwgJiAweDMyKTsgLyogViAxM3YgKi8KIAkJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJCWRwcmludGsoIiVzOiAgaXNsNjQyMSB2b2x0YWdlID0gMThWXG4iLF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCB2YWwgfCAweDA0KTsgLyogSCAxOHYgKi8KIAkJY2FzZSBTRUNfVk9MVEFHRV9PRkY6CisJCQlkcHJpbnRrKCIlczogIGlzbDU0MjEgdm9sdGFnZSBvZmZcbiIsX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBjeDI0MTIzX3dyaXRlbG5icmVnKHN0YXRlLCAweDAsIHZhbCAmIDB4MzApOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MjQsMTMgKzc1MCw5MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAotCQkJCSAgIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmNtZCkKKy8qIHdhaXQgZm9yIGRpc2VxYyBxdWV1ZSB0byBiZWNvbWUgcmVhZHkgKG9yIHRpbWVvdXQpICovCitzdGF0aWMgdm9pZCBjeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUpCiB7Ci0JLyogZml4bWU6IEltcGxlbWVudCBkaXNlcWMgKi8KLQlwcmludGsoIiVzOiBObyBzdXBwb3J0IHlldFxuIixfX0ZVTkNUSU9OX18pOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwMCk7CisJd2hpbGUgKCEoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDI5KSAmIDB4NDApKSB7CisJCWlmKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXByaW50aygiJXM6IGRpc2VxYyBxdWV1ZSBub3QgcmVhZHksIGNvbW1hbmQgbWF5IGJlIGxvc3QuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKwkJbXNsZWVwKDEwKTsKKwl9Cit9CiAKLQlyZXR1cm4gLUVOT1RTVVBQOworc3RhdGljIGludCBjeDI0MTIzX3NlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqY21kKQoreworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpLCB2YWw7CisKKwlkcHJpbnRrKCIlczpcbiIsX19GVU5DVElPTl9fKTsKKworCS8qIGNoZWNrIGlmIGNvbnRpbnVvdXMgdG9uZSBoYXMgYmVlbiBzdG9wcGVkICovCisJaWYgKHN0YXRlLT5jb25maWctPnVzZV9pc2w2NDIxKQorCQl2YWwgPSBjeDI0MTIzX3JlYWRsbmJyZWcoc3RhdGUsIDB4MDApICYgMHgxMDsKKwllbHNlCisJCXZhbCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyOSkgJiAweDEwOworCisKKwlpZiAodmFsKSB7CisJCXByaW50aygiJXM6IEVSUk9SOiBhdHRlbXB0IHRvIHNlbmQgZGlzZXFjIGNvbW1hbmQgYmVmb3JlIHRvbmUgaXMgb2ZmXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCS8qIHdhaXQgZm9yIGRpc2VxYyBxdWV1ZSByZWFkeSAqLworCWN4MjQxMjNfd2FpdF9mb3JfZGlzZXFjKHN0YXRlKTsKKworCS8qIHNlbGVjdCB0b25lIG1vZGUgKi8KKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDJhLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MmEpICYgMHhmOCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5tc2dfbGVuOyBpKyspCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MkMgKyBpLCBjbWQtPm1zZ1tpXSk7CisKKwl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwKSB8ICgoY21kLT5tc2dfbGVuLTMpICYgMykpOworCisJLyogd2FpdCBmb3IgZGlzZXFjIG1lc3NhZ2UgdG8gZmluaXNoIHNlbmRpbmcgKi8KKwljeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTIzX2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3sKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgdmFsOworCisJZHByaW50aygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogY2hlY2sgaWYgY29udGludW91cyB0b25lIGhhcyBiZWVuIHN0b3BlZCAqLworCWlmIChzdGF0ZS0+Y29uZmlnLT51c2VfaXNsNjQyMSkKKwkJdmFsID0gY3gyNDEyM19yZWFkbG5icmVnKHN0YXRlLCAweDAwKSAmIDB4MTA7CisJZWxzZQorCQl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpICYgMHgxMDsKKworCisJaWYgKHZhbCkgeworCQlwcmludGsoIiVzOiBFUlJPUjogYXR0ZW1wdCB0byBzZW5kIGRpc2VxYyBjb21tYW5kIGJlZm9yZSB0b25lIGlzIG9mZlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwljeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdGF0ZSk7CisKKwkvKiBzZWxlY3QgdG9uZSBtb2RlICovCisJdmFsID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDJhKSAmIDB4Zjg7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyYSwgdmFsIHwgMHgwNCk7CisKKwl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpOworCisJaWYgKGJ1cnN0ID09IFNFQ19NSU5JX0EpCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwIHwgMHgwMCkpOworCWVsc2UgaWYgKGJ1cnN0ID09IFNFQ19NSU5JX0IpCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwIHwgMHgwOCkpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdGF0ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDI0MTIzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQpAQCAtNjQyLDEzICs4NDgsMTUgQEAKIAogCSpzdGF0dXMgPSAwOwogCWlmIChsb2NrICYgMHgwMSkKLQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19TSUdOQUw7CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwlpZiAoc3luYyAmIDB4MDIpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CiAJaWYgKHN5bmMgJiAweDA0KQogCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOwogCWlmIChzeW5jICYgMHgwOCkKLQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKIAlpZiAoc3luYyAmIDB4ODApCi0JCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkMgfCBGRV9IQVNfTE9DSzsKKwkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKIAogCXJldHVybiAwOwogfQpAQCAtNjgxLDYgKzg4OSw4IEBACiAJZWxzZQogCQlzdGF0ZS0+c25yID0gMDsKIAorCWRwcmludGsoIiVzOiAgQkVSID0gJWQsIFMvTiBpbmRleCA9ICVkXG4iLF9fRlVOQ1RJT05fXyxzdGF0ZS0+bGFzdGJlciwgc3RhdGUtPnNucik7CisKIAkqYmVyID0gc3RhdGUtPmxhc3RiZXI7CiAKIAlyZXR1cm4gMDsKQEAgLTY5MSw2ICs5MDEsOCBAQAogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCSpzaWduYWxfc3RyZW5ndGggPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4M2IpIDw8IDg7IC8qIGxhcmdlciA9IGJldHRlciAqLwogCisJZHByaW50aygiJXM6ICBTaWduYWwgc3RyZW5ndGggPSAlZFxuIixfX0ZVTkNUSU9OX18sKnNpZ25hbF9zdHJlbmd0aCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjk5LDYgKzkxMSw4IEBACiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJKnNuciA9IHN0YXRlLT5zbnI7CiAKKwlkcHJpbnRrKCIlczogIHJlYWQgUy9OIGluZGV4ID0gJWRcbiIsX19GVU5DVElPTl9fLCpzbnIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcwNyw2ICs5MjEsOCBAQAogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCSp1Y2Jsb2NrcyA9IHN0YXRlLT5sYXN0YmVyOwogCisJZHByaW50aygiJXM6ICB1Y2Jsb2NrcyAoYmVyKSA9ICVkXG4iLF9fRlVOQ1RJT05fXywqdWNibG9ja3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxNCw2ICs5MzAsOCBAQAogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCisJZHByaW50aygiJXM6ICBzZXRfZnJvbnRlbmRcbiIsX19GVU5DVElPTl9fKTsKKwogCWlmIChzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKQogCQlzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKGZlLCAwKTsKIApAQCAtNzM3LDYgKzk1NSw4IEBACiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKKwlkcHJpbnRrKCIlczogIGdldF9mcm9udGVuZFxuIixfX0ZVTkNUSU9OX18pOworCiAJaWYgKGN4MjQxMjNfZ2V0X2ludmVyc2lvbihzdGF0ZSwgJnAtPmludmVyc2lvbikgIT0gMCkgewogCQlwcmludGsoIiVzOiBGYWlsZWQgdG8gZ2V0IGludmVyc2lvbiBzdGF0dXNcbiIsX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CkBAIC03NjMsOCArOTgzLDEwIEBACiAKIAkJc3dpdGNoICh0b25lKSB7CiAJCWNhc2UgU0VDX1RPTkVfT046CisJCQlkcHJpbnRrKCIlczogIGlzbDY0MjEgc2VjIHRvbmUgb25cbiIsX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBjeDI0MTIzX3dyaXRlbG5icmVnKHN0YXRlLCAweDAsIHZhbCB8IDB4MTApOwogCQljYXNlIFNFQ19UT05FX09GRjoKKwkJCWRwcmludGsoIiVzOiAgaXNsNjQyMSBzZWMgdG9uZSBvZmZcbiIsX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBjeDI0MTIzX3dyaXRlbG5icmVnKHN0YXRlLCAweDAsIHZhbCAmIDB4MmYpOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKCIlczogQ0FTRSByZWFjaGVkIGRlZmF1bHQgd2l0aCB0b25lPSVkXG4iLCBfX0ZVTkNUSU9OX18sIHRvbmUpOwpAQCAtODU1LDEyICsxMDc3LDEzIEBACiAJCS5mcmVxdWVuY3lfbWluID0gOTUwMDAwLAogCQkuZnJlcXVlbmN5X21heCA9IDIxNTAwMDAsCiAJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSAxMDExLCAvKiBrSHogZm9yIFFQU0sgZnJvbnRlbmRzICovCi0JCS5mcmVxdWVuY3lfdG9sZXJhbmNlID0gMjk1MDAsCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlID0gNTAwMCwKIAkJLnN5bWJvbF9yYXRlX21pbiA9IDEwMDAwMDAsCiAJCS5zeW1ib2xfcmF0ZV9tYXggPSA0NTAwMDAwMCwKIAkJLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfAogCQkJRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKLQkJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX0ZFQ180XzUgfCBGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfNl83IHwKKwkJCUZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKIAkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1JFQ09WRVIKIAl9LAogCkBAIC04NzUsMTIgKzEwOTgsMTYgQEAKIAkucmVhZF9zbnIgPSBjeDI0MTIzX3JlYWRfc25yLAogCS5yZWFkX3VjYmxvY2tzID0gY3gyNDEyM19yZWFkX3VjYmxvY2tzLAogCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gY3gyNDEyM19zZW5kX2Rpc2VxY19tc2csCisJLmRpc2VxY19zZW5kX2J1cnN0ID0gY3gyNDEyM19kaXNlcWNfc2VuZF9idXJzdCwKIAkuc2V0X3RvbmUgPSBjeDI0MTIzX3NldF90b25lLAogCS5zZXRfdm9sdGFnZSA9IGN4MjQxMjNfc2V0X3ZvbHRhZ2UsCiB9OwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOworCittb2R1bGVfcGFyYW0oZm9yY2VfYmFuZCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfYmFuZCwgIkZvcmNlIGEgc3BlY2lmaWMgYmFuZCBzZWxlY3QgKDEtOSwgZGVmYXVsdDpvZmYpLiIpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBGcm9udGVuZCBtb2R1bGUgZm9yIENvbmV4YW50IGN4MjQxMjMvY3gyNDEwOSBoYXJkd2FyZSIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCmluZGV4IGI2ZTJjMzguLjc5MTcwNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwpAQCAtMjM1LDggKzIzNSw4IEBACiAJLm1heCAgID0gODYzMDAwMDAwLAogCS5jb3VudCA9IDMsCiAJLmVudHJpZXMgPSB7Ci0JCXsgIDE2MDAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDAxIH0sCi0JCXsgIDQ1NTAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDAyIH0sCisJCXsgIDE2NTAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDAxIH0sCisJCXsgIDQ1MDAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDAyIH0sCiAJCXsgIDk5OTk5OTk5OSwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDA0IH0sCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCmluZGV4IDhlOGRmN2IuLmI4M2RhZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCkBAIC01Miw3ICs1Miw2IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIAogCS8qIHByaXZhdGUgZGVtb2QgZGF0YSAqLwotCXU4IGluaXRpYWxpc2VkOwogCWVudW0gdGRhMTAwNHhfZGVtb2QgZGVtb2RfdHlwZTsKIH07CiAKQEAgLTU5NCw5ICs1OTMsNiBAQAogCiAJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlpZiAoc3RhdGUtPmluaXRpYWxpc2VkKQotCQlyZXR1cm4gMDsKLQogCWlmICh0ZGExMDA0NV9md3VwbG9hZChmZSkpIHsKIAkJcHJpbnRrKCJ0ZGExMDA0eDogZmlybXdhcmUgdXBsb2FkIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtNjI2LDcgKzYyMiw2IEBACiAKIAl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCAweDFmLCAweDAxLCBzdGF0ZS0+Y29uZmlnLT5pbnZlcnRfb2Nsayk7CiAKLQlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC02MzUsOSArNjMwLDYgQEAKIAlzdHJ1Y3QgdGRhMTAwNHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlpZiAoc3RhdGUtPmluaXRpYWxpc2VkKQotCQlyZXR1cm4gMDsKLQogCWlmICh0ZGExMDA0Nl9md3VwbG9hZChmZSkpIHsKIAkJcHJpbnRrKCJ0ZGExMDA0eDogZmlybXdhcmUgdXBsb2FkIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTY5Nyw3ICs2ODksNiBAQAogCS8vIHRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIDB4NTAsIDB4ODAsIDB4ODApOyAgICAgICAgIC8vIGhhbmRsZSBvdXQgb2YgZ3VhcmQgZWNob2VzCiAJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgMHgzYSwgMHg4MCwgc3RhdGUtPmNvbmZpZy0+aW52ZXJ0X29jbGsgPDwgNyk7CiAKLQlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC0xMjA3LDcgKzExOTgsNiBAQAogCQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDEsIDEpOwogCQlicmVhazsKIAl9Ci0Jc3RhdGUtPmluaXRpYWxpc2VkID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTI3MSw3ICsxMjYxLDYgQEAKIAlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOwogCXN0YXRlLT5pMmMgPSBpMmM7CiAJbWVtY3B5KCZzdGF0ZS0+b3BzLCAmdGRhMTAwNDVfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKLQlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAwOwogCXN0YXRlLT5kZW1vZF90eXBlID0gVERBMTAwNFhfREVNT0RfVERBMTAwNDU7CiAKIAkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KQEAgLTEzMzAsNyArMTMxOSw2IEBACiAJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKIAlzdGF0ZS0+aTJjID0gaTJjOwogCW1lbWNweSgmc3RhdGUtPm9wcywgJnRkYTEwMDQ2X29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7Ci0Jc3RhdGUtPmluaXRpYWxpc2VkID0gMDsKIAlzdGF0ZS0+ZGVtb2RfdHlwZSA9IFREQTEwMDRYX0RFTU9EX1REQTEwMDQ2OwogCiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCmluZGV4IDg0ZjhmOWYuLjdkOGU2ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIERWQl9QTFVUTzIKIAl0cmlzdGF0ZSAiUGx1dG8yIGNhcmRzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCi0Jc2VsZWN0IEkyQworCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogCXNlbGVjdCBJMkNfQUxHT0JJVAogCXNlbGVjdCBEVkJfVERBMTAwNFgKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvTWFrZWZpbGUKaW5kZXggODZjYTg0Yi4uY2U2YTlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKLW9iai0kKENPTkZJR19EVkJfUExVVE8yKSA9IHBsdXRvMi5vCitvYmotJChDT05GSUdfRFZCX1BMVVRPMikgKz0gcGx1dG8yLm8KIAogRVhUUkFfQ0ZMQUdTID0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwppbmRleCA1YjJhYWRiLi5iNWFjN2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKQEAgLTEsOCArMSw3IEBACiBjb25maWcgRFZCX0FWNzExMAogCXRyaXN0YXRlICJBVjcxMTAgY2FyZHMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMQogCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgVklERU9fREVWCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKIAlzZWxlY3QgRFZCX1ZFUzE4MjAKIAlzZWxlY3QgRFZCX1ZFUzFYOTMKQEAgLTU5LDcgKzU4LDcgQEAKIAogY29uZmlnIERWQl9CVURHRVQKIAl0cmlzdGF0ZSAiQnVkZ2V0IGNhcmRzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgVklERU9fU0FBNzE0NgogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVkVTMVg5MwpAQCAtODAsNyArNzksNyBAQAogCiBjb25maWcgRFZCX0JVREdFVF9DSQogCXRyaXN0YXRlICJCdWRnZXQgY2FyZHMgd2l0aCBvbmJvYXJkIENJIGNvbm5lY3RvciIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQyAmJiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1NBQTcxNDYKIAlzZWxlY3QgRFZCX1NUVjAyOTcKIAlzZWxlY3QgRFZCX1NUVjAyOTkKQEAgLTEwMCw4ICs5OSw3IEBACiAKIGNvbmZpZyBEVkJfQlVER0VUX0FWCiAJdHJpc3RhdGUgIkJ1ZGdldCBjYXJkcyB3aXRoIGFuYWxvZyB2aWRlbyBpbnB1dHMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kKLQlzZWxlY3QgVklERU9fREVWCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVERBMTAwNFgKQEAgLTExOSw3ICsxMTcsNyBAQAogCiBjb25maWcgRFZCX0JVREdFVF9QQVRDSAogCXRyaXN0YXRlICJBVjcxMTAgY2FyZHMgd2l0aCBCdWRnZXQgUGF0Y2giCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBEVkJfQlVER0VUCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBEVkJfQlVER0VUICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgRFZCX0FWNzExMAogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVkVTMVg5MwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwppbmRleCA4NDBlZmVjLi5kMDI4MjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwpAQCAtODcsNiArODcsNyBAQAogc3RhdGljIGludCBidWRnZXRwYXRjaDsKIHN0YXRpYyBpbnQgd3NzX2NmZ180XzMgPSAweDQwMDg7CiBzdGF0aWMgaW50IHdzc19jZmdfMTZfOSA9IDB4MDAwNzsKK3N0YXRpYyBpbnQgdHZfc3RhbmRhcmQ7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXY3MTEwX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIGxldmVsIChiaXRtYXNrLCBkZWZhdWx0IDApIik7CkBAIC0xMDksNiArMTEwLDggQEAKIE1PRFVMRV9QQVJNX0RFU0Mod3NzX2NmZ180XzMsICJXU1MgNDozIC0gZGVmYXVsdCAweDQwMDggLSBiaXQgMTU6IGRpc2FibGUsIDE0OiBidXJzdCBtb2RlLCAxMy4uMDogd3NzIGRhdGEiKTsKIG1vZHVsZV9wYXJhbSh3c3NfY2ZnXzE2XzksIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdzc19jZmdfMTZfOSwgIldTUyAxNjo5IC0gZGVmYXVsdCAweDAwMDcgLSBiaXQgMTU6IGRpc2FibGUsIDE0OiBidXJzdCBtb2RlLCAxMy4uMDogd3NzIGRhdGEiKTsKK21vZHVsZV9wYXJhbSh0dl9zdGFuZGFyZCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModHZfc3RhbmRhcmQsICJUViBzdGFuZGFyZDogMCBQQUwgKGRlZmF1bHQpLCAxIE5UU0MiKTsKIAogc3RhdGljIHZvaWQgcmVzdGFydF9mZWVkcyhzdHJ1Y3QgYXY3MTEwICphdjcxMTApOwogCkBAIC0yMTIzLDcgKzIxMjYsNyBAQAogCQkJCQkJCXJlYWRfcHdtKGF2NzExMCkpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAwMDM6Ci0JCQkJLyogSGF1cGF1Z2UgRFZCLUMgMi4xIFZFUzE4MjAvQUxQUyBUREJFMiAqLworCQkJCS8qIEhhdXBwYXVnZSBEVkItQyAyLjEgVkVTMTgyMC9BTFBTIFREQkUyICovCiAJCQkJYXY3MTEwLT5mZSA9IHZlczE4MjBfYXR0YWNoKCZhbHBzX3RkYmUyX2NvbmZpZywgJmF2NzExMC0+aTJjX2FkYXAsCiAJCQkJCQkJcmVhZF9wd20oYXY3MTEwKSk7CiAJCQkJYnJlYWs7CkBAIC0yNTQzLDYgKzI1NDYsOSBAQAogCWF2NzExMC0+b3Nkd2luID0gMTsKIAltdXRleF9pbml0KCZhdjcxMTAtPm9zZF9tdXRleCk7CiAKKwkvKiBUViBzdGFuZGFyZCAqLworCWF2NzExMC0+dmlkbW9kZSA9IHR2X3N0YW5kYXJkID09IDEgPyBWSURFT19NT0RFX05UU0MgOiBWSURFT19NT0RFX1BBTDsKKwogCS8qIEFSTSAid2F0Y2hkb2ciICovCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYXY3MTEwLT5hcm1fd2FpdCk7CiAJYXY3MTEwLT5hcm1fdGhyZWFkID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKaW5kZXggNDAwZmFjZS4uMmVmZjA5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKQEAgLTE0NzksOCArMTQ3OSw2IEBACiAJdm9pZCAoKnBsYXlbXSkodTggKiwgaW50LCB2b2lkICopID0geyBwbGF5X2F1ZGlvX2NiLCBwbGF5X3ZpZGVvX2NiIH07CiAJaW50IGksIHJldDsKIAotCWF2NzExMC0+dmlkbW9kZSA9IFZJREVPX01PREVfUEFMOwotCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlzdHJ1Y3QgaXBhY2sgKmlwYWNrID0gYXY3MTEwLT5pcGFjayArIGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggOWRkNDc0NS4uOGE3Y2Q3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTYwLDExICs2MCwxMSBAQAogCXN0cnVjdCBkdmJfY2FfZW41MDIyMSBjYTsKIH07CiAKLS8qIEdQSU8gQ0kgQ29ubmVjdGlvbnM6Ci0gKiAwIC0gVmNjL1Jlc2V0IChSZXNldCBpcyBjb250cm9sbGVkIGJ5IGNhcGFjaXRvcikKLSAqIDEgLSBBdHRyaWJ1dGUgTWVtb3J5Ci0gKiAyIC0gQ2FyZCBFbmFibGUgKEFjdGl2ZSBMb3cpCi0gKiAzIC0gQ2FyZCBEZXRlY3QKKy8qIEdQSU8gQ29ubmVjdGlvbnM6CisgKiAwIC0gVmNjL1Jlc2V0IChSZXNldCBpcyBjb250cm9sbGVkIGJ5IGNhcGFjaXRvcikuIFJlc2V0cyB0aGUgZnJvbnRlbmQgKkFTIFdFTEwqIQorICogMSAtIENJIG1lbW9yeSBzZWxlY3QgMD0+SU8gbWVtb3J5LCAxPT5BdHRyaWJ1dGUgTWVtb3J5CisgKiAyIC0gQ0kgQ2FyZCBFbmFibGUgKEFjdGl2ZSBMb3cpCisgKiAzIC0gQ0kgQ2FyZCBEZXRlY3QKICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjE0LDYgKzIxNCw5IEBACiAJd2hpbGUgKC0tdGltZW91dCA+IDAgJiYgY2lpbnRmX3JlYWRfYXR0cmlidXRlX21lbShjYSwgc2xvdCwgMCkgIT0gMHgxZCkKIAkJbXNsZWVwKDEwMCk7CiAKKwkvKiByZWluaXRpYWxpc2UgdGhlIGZyb250ZW5kICovCisJZHZiX2Zyb250ZW5kX3JlaW5pdGlhbGlzZShidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQpOworCiAJaWYgKHRpbWVvdXQgPD0gMCkKIAl7CiAJCXByaW50ayhLRVJOX0VSUiAiYnVkZ2V0LWF2OiBjYW0gcmVzZXQgZmFpbGVkICh0aW1lb3V0KS5cbiIpOwpAQCAtMTE4Nyw4ICsxMTkwLDYgQEAKIAkJCQkJCVNBQTcxNDZfSFBTX1NZTkNfUE9SVF9BKTsKIAogCQlzYWE3MTEzX3NldGlucHV0KGJ1ZGdldF9hdiwgMCk7Ci0JfSBlbHNlIHsKLQkJY2lpbnRmX2luaXQoYnVkZ2V0X2F2KTsKIAl9CiAKIAkvKiBmaXhtZTogZmluZCBzb21lIHNhbmUgdmFsdWVzIGhlcmUuLi4gKi8KQEAgLTEyMDgsNiArMTIwOSwxMCBAQAogCWJ1ZGdldF9hdi0+YnVkZ2V0LmR2Yl9hZGFwdGVyLnByaXYgPSBidWRnZXRfYXY7CiAJZnJvbnRlbmRfaW5pdChidWRnZXRfYXYpOwogCisJaWYgKCFidWRnZXRfYXYtPmhhc19zYWE3MTEzKSB7CisJCWNpaW50Zl9pbml0KGJ1ZGdldF9hdik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggNWY5MTAzNi4uZTY0YTYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTcxLDYgKzcxLDcgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbXNwNDMwX2lycV90YXNrbGV0OwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBjaWludGZfaXJxX3Rhc2tsZXQ7CiAJaW50IHNsb3Rfc3RhdHVzOworCWludCBjaV9pcnE7CiAJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGNhOwogCWNoYXIgaXJfZGV2X25hbWVbNTBdOwogCXU4IHR1bmVyX3BsbF9hZGRyZXNzOyAvKiB1c2VkIGZvciBwaGlsaXBzX3RkbTEzMTZsIGNvbmZpZ3MgKi8KQEAgLTI3Niw4ICsyNzcsMTAgQEAKIAlpZiAoc2xvdCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8vIHRyaWdnZXIgb24gUklTSU5HIGVkZ2UgZHVyaW5nIHJlc2V0IHNvIHdlIGtub3cgd2hlbiBSRUFEWSBpcyByZS1hc3NlcnRlZAotCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDAsIFNBQTcxNDZfR1BJT19JUlFISSk7CisJaWYgKGJ1ZGdldF9jaS0+Y2lfaXJxKSB7CisJCS8vIHRyaWdnZXIgb24gUklTSU5HIGVkZ2UgZHVyaW5nIHJlc2V0IHNvIHdlIGtub3cgd2hlbiBSRUFEWSBpcyByZS1hc3NlcnRlZAorCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAwLCBTQUE3MTQ2X0dQSU9fSVJRSEkpOworCX0KIAlidWRnZXRfY2ktPnNsb3Rfc3RhdHVzID0gU0xPVFNUQVRVU19SRVNFVDsKIAl0dHBjaV9idWRnZXRfZGViaXdyaXRlKCZidWRnZXRfY2ktPmJ1ZGdldCwgREVCSUNJQ1RMLCBERUJJQUREUl9DSUNPTlRST0wsIDEsIDAsIDEsIDApOwogCW1zbGVlcCgxKTsKQEAgLTM3MCwxMSArMzczLDUwIEBACiAJfQogfQogCitzdGF0aWMgaW50IGNpaW50Zl9wb2xsX3Nsb3Rfc3RhdHVzKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90LCBpbnQgb3BlbikKK3sKKwlzdHJ1Y3QgYnVkZ2V0X2NpICpidWRnZXRfY2kgPSAoc3RydWN0IGJ1ZGdldF9jaSAqKSBjYS0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwkvLyBlbnN1cmUgd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzIElSUXMgZHVyaW5nIGluaXRpYWxpc2F0aW9uCisJaWYgKCFidWRnZXRfY2ktPmJ1ZGdldC5jaV9wcmVzZW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8vIHJlYWQgdGhlIENBTSBzdGF0dXMKKwlmbGFncyA9IHR0cGNpX2J1ZGdldF9kZWJpcmVhZCgmYnVkZ2V0X2NpLT5idWRnZXQsIERFQklDSUNUTCwgREVCSUFERFJfQ0lDT05UUk9MLCAxLCAxLCAwKTsKKwlpZiAoZmxhZ3MgJiBDSUNPTlRST0xfQ0FNREVURUNUKSB7CisJCS8vIG1hcmsgaXQgYXMgcHJlc2VudCBpZiBpdCB3YXNuJ3QgYmVmb3JlCisJCWlmIChidWRnZXRfY2ktPnNsb3Rfc3RhdHVzICYgU0xPVFNUQVRVU19OT05FKSB7CisJCQlidWRnZXRfY2ktPnNsb3Rfc3RhdHVzID0gU0xPVFNUQVRVU19QUkVTRU5UOworCQl9CisKKwkJLy8gZHVyaW5nIGEgUkVTRVQsIHdlIGNoZWNrIGlmIHdlIGNhbiByZWFkIGZyb20gSU8gbWVtb3J5IHRvIHNlZSB3aGVuIENBTSBpcyByZWFkeQorCQlpZiAoYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyAmIFNMT1RTVEFUVVNfUkVTRVQpIHsKKwkJCWlmIChjaWludGZfcmVhZF9hdHRyaWJ1dGVfbWVtKGNhLCBzbG90LCAwKSA9PSAweDFkKSB7CisJCQkJYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyA9IFNMT1RTVEFUVVNfUkVBRFk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlidWRnZXRfY2ktPnNsb3Rfc3RhdHVzID0gU0xPVFNUQVRVU19OT05FOworCX0KKworCWlmIChidWRnZXRfY2ktPnNsb3Rfc3RhdHVzICE9IFNMT1RTVEFUVVNfTk9ORSkgeworCQlpZiAoYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyAmIFNMT1RTVEFUVVNfUkVBRFkpIHsKKwkJCXJldHVybiBEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9QUkVTRU5UIHwgRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUkVBRFk7CisJCX0KKwkJcmV0dXJuIERWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1BSRVNFTlQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2lpbnRmX2luaXQoc3RydWN0IGJ1ZGdldF9jaSAqYnVkZ2V0X2NpKQogewogCXN0cnVjdCBzYWE3MTQ2X2RldiAqc2FhID0gYnVkZ2V0X2NpLT5idWRnZXQuZGV2OwogCWludCBmbGFnczsKIAlpbnQgcmVzdWx0OworCWludCBjaV92ZXJzaW9uOworCWludCBjYV9mbGFnczsKIAogCW1lbXNldCgmYnVkZ2V0X2NpLT5jYSwgMCwgc2l6ZW9mKHN0cnVjdCBkdmJfY2FfZW41MDIyMSkpOwogCkBAIC0zODIsMTYgKzQyNCwyOSBAQAogCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIHNhYTcxNDZfcmVhZChzYWEsIE1DMSkgfCAoMHg4MDAgPDwgMTYpIHwgMHg4MDApOwogCiAJLy8gdGVzdCBpZiBpdCBpcyB0aGVyZQotCWlmICgodHRwY2lfYnVkZ2V0X2RlYmlyZWFkKCZidWRnZXRfY2ktPmJ1ZGdldCwgREVCSUNJQ1RMLCBERUJJQUREUl9DSVZFUlNJT04sIDEsIDEsIDApICYgMHhhMCkgIT0gMHhhMCkgeworCWNpX3ZlcnNpb24gPSB0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJVkVSU0lPTiwgMSwgMSwgMCk7CisJaWYgKChjaV92ZXJzaW9uICYgMHhhMCkgIT0gMHhhMCkgewogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVycm9yOwogCX0KKwogCS8vIGRldGVybWluZSB3aGV0aGVyIGEgQ0FNIGlzIHByZXNlbnQgb3Igbm90CiAJZmxhZ3MgPSB0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJQ09OVFJPTCwgMSwgMSwgMCk7CiAJYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyA9IFNMT1RTVEFUVVNfTk9ORTsKIAlpZiAoZmxhZ3MgJiBDSUNPTlRST0xfQ0FNREVURUNUKQogCQlidWRnZXRfY2ktPnNsb3Rfc3RhdHVzID0gU0xPVFNUQVRVU19QUkVTRU5UOwogCisJLy8gdmVyc2lvbiAweGEyIG9mIHRoZSBDSSBmaXJtd2FyZSBkb2Vzbid0IGdlbmVyYXRlIGludGVycnVwdHMKKwlpZiAoY2lfdmVyc2lvbiA9PSAweGEyKSB7CisJCWNhX2ZsYWdzID0gMDsKKwkJYnVkZ2V0X2NpLT5jaV9pcnEgPSAwOworCX0gZWxzZSB7CisJCWNhX2ZsYWdzID0gRFZCX0NBX0VONTAyMjFfRkxBR19JUlFfQ0FNQ0hBTkdFIHwKKwkJCQlEVkJfQ0FfRU41MDIyMV9GTEFHX0lSUV9GUiB8CisJCQkJRFZCX0NBX0VONTAyMjFfRkxBR19JUlFfREE7CisJCWJ1ZGdldF9jaS0+Y2lfaXJxID0gMTsKKwl9CisKIAkvLyByZWdpc3RlciBDSSBpbnRlcmZhY2UKIAlidWRnZXRfY2ktPmNhLm93bmVyID0gVEhJU19NT0RVTEU7CiAJYnVkZ2V0X2NpLT5jYS5yZWFkX2F0dHJpYnV0ZV9tZW0gPSBjaWludGZfcmVhZF9hdHRyaWJ1dGVfbWVtOwpAQCAtNDAxLDIzICs0NTYsMjcgQEAKIAlidWRnZXRfY2ktPmNhLnNsb3RfcmVzZXQgPSBjaWludGZfc2xvdF9yZXNldDsKIAlidWRnZXRfY2ktPmNhLnNsb3Rfc2h1dGRvd24gPSBjaWludGZfc2xvdF9zaHV0ZG93bjsKIAlidWRnZXRfY2ktPmNhLnNsb3RfdHNfZW5hYmxlID0gY2lpbnRmX3Nsb3RfdHNfZW5hYmxlOworCWJ1ZGdldF9jaS0+Y2EucG9sbF9zbG90X3N0YXR1cyA9IGNpaW50Zl9wb2xsX3Nsb3Rfc3RhdHVzOwogCWJ1ZGdldF9jaS0+Y2EuZGF0YSA9IGJ1ZGdldF9jaTsKIAlpZiAoKHJlc3VsdCA9IGR2Yl9jYV9lbjUwMjIxX2luaXQoJmJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9hZGFwdGVyLAogCQkJCQkgICZidWRnZXRfY2ktPmNhLAotCQkJCQkgIERWQl9DQV9FTjUwMjIxX0ZMQUdfSVJRX0NBTUNIQU5HRSB8Ci0JCQkJCSAgRFZCX0NBX0VONTAyMjFfRkxBR19JUlFfRlIgfAotCQkJCQkgIERWQl9DQV9FTjUwMjIxX0ZMQUdfSVJRX0RBLCAxKSkgIT0gMCkgeworCQkJCQkgIGNhX2ZsYWdzLCAxKSkgIT0gMCkgewogCQlwcmludGsoImJ1ZGdldF9jaTogQ0kgaW50ZXJmYWNlIGRldGVjdGVkLCBidXQgaW5pdGlhbGlzYXRpb24gZmFpbGVkLlxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQorCiAJLy8gU2V0dXAgQ0kgc2xvdCBJUlEKLQl0YXNrbGV0X2luaXQoJmJ1ZGdldF9jaS0+Y2lpbnRmX2lycV90YXNrbGV0LCBjaWludGZfaW50ZXJydXB0LCAodW5zaWduZWQgbG9uZykgYnVkZ2V0X2NpKTsKLQlpZiAoYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyAhPSBTTE9UU1RBVFVTX05PTkUpIHsKLQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMCwgU0FBNzE0Nl9HUElPX0lSUUxPKTsKLQl9IGVsc2UgewotCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAwLCBTQUE3MTQ2X0dQSU9fSVJRSEkpOworCWlmIChidWRnZXRfY2ktPmNpX2lycSkgeworCQl0YXNrbGV0X2luaXQoJmJ1ZGdldF9jaS0+Y2lpbnRmX2lycV90YXNrbGV0LCBjaWludGZfaW50ZXJydXB0LCAodW5zaWduZWQgbG9uZykgYnVkZ2V0X2NpKTsKKwkJaWYgKGJ1ZGdldF9jaS0+c2xvdF9zdGF0dXMgIT0gU0xPVFNUQVRVU19OT05FKSB7CisJCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAwLCBTQUE3MTQ2X0dQSU9fSVJRTE8pOworCQl9IGVsc2UgeworCQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMCwgU0FBNzE0Nl9HUElPX0lSUUhJKTsKKwkJfQorCQlzYWE3MTQ2X3dyaXRlKHNhYSwgSUVSLCBzYWE3MTQ2X3JlYWQoc2FhLCBJRVIpIHwgTUFTS18wMyk7CiAJfQotCXNhYTcxNDZfd3JpdGUoc2FhLCBJRVIsIHNhYTcxNDZfcmVhZChzYWEsIElFUikgfCBNQVNLXzAzKTsKKworCS8vIGVuYWJsZSBpbnRlcmZhY2UKIAl0dHBjaV9idWRnZXRfZGViaXdyaXRlKCZidWRnZXRfY2ktPmJ1ZGdldCwgREVCSUNJQ1RMLCBERUJJQUREUl9DSUNPTlRST0wsIDEsCiAJCQkgICAgICAgQ0lDT05UUk9MX1JFU0VULCAxLCAwKTsKIApAQCAtNDI2LDEwICs0ODUsMTIgQEAKIAlidWRnZXRfY2ktPmJ1ZGdldC5jaV9wcmVzZW50ID0gMTsKIAogCS8vIGZvcmdlIGEgZmFrZSBDSSBJUlEgc28gdGhlIENBTSBzdGF0ZSBpcyBzZXR1cCBjb3JyZWN0bHkKLQlmbGFncyA9IERWQl9DQV9FTjUwMjIxX0NBTUNIQU5HRV9SRU1PVkVEOwotCWlmIChidWRnZXRfY2ktPnNsb3Rfc3RhdHVzICE9IFNMT1RTVEFUVVNfTk9ORSkKLQkJZmxhZ3MgPSBEVkJfQ0FfRU41MDIyMV9DQU1DSEFOR0VfSU5TRVJURUQ7Ci0JZHZiX2NhX2VuNTAyMjFfY2FtY2hhbmdlX2lycSgmYnVkZ2V0X2NpLT5jYSwgMCwgZmxhZ3MpOworCWlmIChidWRnZXRfY2ktPmNpX2lycSkgeworCQlmbGFncyA9IERWQl9DQV9FTjUwMjIxX0NBTUNIQU5HRV9SRU1PVkVEOworCQlpZiAoYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyAhPSBTTE9UU1RBVFVTX05PTkUpCisJCQlmbGFncyA9IERWQl9DQV9FTjUwMjIxX0NBTUNIQU5HRV9JTlNFUlRFRDsKKwkJZHZiX2NhX2VuNTAyMjFfY2FtY2hhbmdlX2lycSgmYnVkZ2V0X2NpLT5jYSwgMCwgZmxhZ3MpOworCX0KIAogCXJldHVybiAwOwogCkBAIC00NDMsOSArNTA0LDEzIEBACiAJc3RydWN0IHNhYTcxNDZfZGV2ICpzYWEgPSBidWRnZXRfY2ktPmJ1ZGdldC5kZXY7CiAKIAkvLyBkaXNhYmxlIENJIGludGVycnVwdHMKLQlzYWE3MTQ2X3dyaXRlKHNhYSwgSUVSLCBzYWE3MTQ2X3JlYWQoc2FhLCBJRVIpICYgfk1BU0tfMDMpOwotCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDAsIFNBQTcxNDZfR1BJT19JTlBVVCk7Ci0JdGFza2xldF9raWxsKCZidWRnZXRfY2ktPmNpaW50Zl9pcnFfdGFza2xldCk7CisJaWYgKGJ1ZGdldF9jaS0+Y2lfaXJxKSB7CisJCXNhYTcxNDZfd3JpdGUoc2FhLCBJRVIsIHNhYTcxNDZfcmVhZChzYWEsIElFUikgJiB+TUFTS18wMyk7CisJCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDAsIFNBQTcxNDZfR1BJT19JTlBVVCk7CisJCXRhc2tsZXRfa2lsbCgmYnVkZ2V0X2NpLT5jaWludGZfaXJxX3Rhc2tsZXQpOworCX0KKworCS8vIHJlc2V0IGludGVyZmFjZQogCXR0cGNpX2J1ZGdldF9kZWJpd3JpdGUoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJQ09OVFJPTCwgMSwgMCwgMSwgMCk7CiAJbXNsZWVwKDEpOwogCXR0cGNpX2J1ZGdldF9kZWJpd3JpdGUoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJQ09OVFJPTCwgMSwKQEAgLTQ3Myw3ICs1MzgsNyBAQAogCWlmICgqaXNyICYgTUFTS18xMCkKIAkJdHRwY2lfYnVkZ2V0X2lycTEwX2hhbmRsZXIoZGV2LCBpc3IpOwogCi0JaWYgKCgqaXNyICYgTUFTS18wMykgJiYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmNpX3ByZXNlbnQpKQorCWlmICgoKmlzciAmIE1BU0tfMDMpICYmIChidWRnZXRfY2ktPmJ1ZGdldC5jaV9wcmVzZW50KSAmJiAoYnVkZ2V0X2NpLT5jaV9pcnEpKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZidWRnZXRfY2ktPmNpaW50Zl9pcnFfdGFza2xldCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jCmluZGV4IDYzM2U2OGMuLmVhMjA2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYwpAQCAtMzksOSArMzksMjEgQEAKICNpbmNsdWRlICJidWRnZXQuaCIKICNpbmNsdWRlICJ0dHBjaS1lZXByb20uaCIKIAorI2RlZmluZSBUU19XSURUSAkJKDIgKiBUU19TSVpFKQorI2RlZmluZSBUU19XSURUSF9BQ1RJVlkJCVRTX1NJWkUKKyNkZWZpbmUgVFNfSEVJR0hUX01BU0sJCTB4ZjAwCisjZGVmaW5lIFRTX0hFSUdIVF9NQVNLX0FDVElWWQkweGMwMAorI2RlZmluZSBUU19NSU5fQlVGU0laRV9LCTE4OAorI2RlZmluZSBUU19NQVhfQlVGU0laRV9LCTE0MTAKKyNkZWZpbmUgVFNfTUFYX0JVRlNJWkVfS19BQ1RJVlkJNTY0CisjZGVmaW5lIEJVRkZFUl9XQVJOSU5HX1dBSVQJKDMwKkhaKQorCiBpbnQgYnVkZ2V0X2RlYnVnOworc3RhdGljIGludCBkbWFfYnVmZmVyX3NpemUgPSBUU19NSU5fQlVGU0laRV9LOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBidWRnZXRfZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYnVmc2l6ZSwgZG1hX2J1ZmZlcl9zaXplLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGJ1ZGdldCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYnVmc2l6ZSwgIkRNQSBidWZmZXIgc2l6ZSBpbiBLQiwgZGVmYXVsdDogMTg4LCBtaW46IDE4OCwgbWF4OiAxNDEwIChBY3Rpdnk6IDU2NCkiKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRUIGJ1ZGdldCAvIFdpblRWIE5vdmEKQEAgLTcwLDExICs4MiwxMCBAQAogCiAJc2FhNzE0Nl93cml0ZShkZXYsIE1DMSwgTUFTS18yMCk7CS8vIERNQTMgb2ZmCiAKLQltZW1zZXQoYnVkZ2V0LT5ncmFiYmluZywgMHgwMCwgVFNfSEVJR0hUICogVFNfV0lEVEgpOworCW1lbXNldChidWRnZXQtPmdyYWJiaW5nLCAweDAwLCBidWRnZXQtPmJ1ZmZlcl9zaXplKTsKIAogCXNhYTcxNDZfd3JpdGUoZGV2LCBQQ0lfQlRfVjEsIDB4MDAxYzAwMDAgfCAoc2FhNzE0Nl9yZWFkKGRldiwgUENJX0JUX1YxKSAmIH4weDAwMWYwMDAwKSk7CiAKLQlidWRnZXQtPnRzZiA9IDB4ZmY7CiAJYnVkZ2V0LT50dGJwID0gMDsKIAogCS8qCkBAIC0xMTUsMTYgKzEyNiwxMiBAQAogCiAJc2FhNzE0Nl93cml0ZShkZXYsIEJBU0VfT0REMywgMCk7CiAJc2FhNzE0Nl93cml0ZShkZXYsIEJBU0VfRVZFTjMsIDApOwotCXNhYTcxNDZfd3JpdGUoZGV2LCBQUk9UX0FERFIzLCBUU19XSURUSCAqIFRTX0hFSUdIVCk7CisJc2FhNzE0Nl93cml0ZShkZXYsIFBST1RfQUREUjMsIGJ1ZGdldC0+YnVmZmVyX3NpemUpOwogCXNhYTcxNDZfd3JpdGUoZGV2LCBCQVNFX1BBR0UzLCBidWRnZXQtPnB0LmRtYSB8IE1FMSB8IDB4OTApOwogCi0JaWYgKGJ1ZGdldC0+Y2FyZC0+dHlwZSA9PSBCVURHRVRfRlNfQUNUSVZZKSB7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBQSVRDSDMsIFRTX1dJRFRIIC8gMik7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBOVU1fTElORV9CWVRFMywgKChUU19IRUlHSFQgKiAyKSA8PCAxNikgfCAoVFNfV0lEVEggLyAyKSk7Ci0JfSBlbHNlIHsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIFBJVENIMywgVFNfV0lEVEgpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgTlVNX0xJTkVfQllURTMsIChUU19IRUlHSFQgPDwgMTYpIHwgVFNfV0lEVEgpOwotCX0KKwlzYWE3MTQ2X3dyaXRlKGRldiwgUElUQ0gzLCBidWRnZXQtPmJ1ZmZlcl93aWR0aCk7CisJc2FhNzE0Nl93cml0ZShkZXYsIE5VTV9MSU5FX0JZVEUzLAorCQkJKGJ1ZGdldC0+YnVmZmVyX2hlaWdodCA8PCAxNikgfCBidWRnZXQtPmJ1ZmZlcl93aWR0aCk7CiAKIAlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCAoTUFTS18wNCB8IE1BU0tfMjApKTsKIApAQCAtMTQxLDExICsxNDgsMTIgQEAKIAl1OCAqbWVtID0gKHU4ICopIChidWRnZXQtPmdyYWJiaW5nKTsKIAl1MzIgb2xkZG1hID0gYnVkZ2V0LT50dGJwOwogCXUzMiBuZXdkbWEgPSBzYWE3MTQ2X3JlYWQoYnVkZ2V0LT5kZXYsIFBDSV9WRFAzKTsKKwl1MzIgY291bnQ7CiAKIAkvKiBuZWFyZXN0IGxvd2VyIHBvc2l0aW9uIGRpdmlzaWJsZSBieSAxODggKi8KIAluZXdkbWEgLT0gbmV3ZG1hICUgMTg4OwogCi0JaWYgKG5ld2RtYSA+PSBUU19CVUZMRU4pCisJaWYgKG5ld2RtYSA+PSBidWRnZXQtPmJ1ZmZlcl9zaXplKQogCQlyZXR1cm47CiAKIAlidWRnZXQtPnR0YnAgPSBuZXdkbWE7CkBAIC0xNTQsMTEgKzE2MiwyNCBAQAogCQlyZXR1cm47CiAKIAlpZiAobmV3ZG1hID4gb2xkZG1hKSB7CS8qIG5vIHdyYXBhcm91bmQsIGR1bXAgb2xkZG1hLi5uZXdkbWEgKi8KLQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZidWRnZXQtPmRlbXV4LCBtZW0gKyBvbGRkbWEsIChuZXdkbWEgLSBvbGRkbWEpIC8gMTg4KTsKKwkJY291bnQgPSBuZXdkbWEgLSBvbGRkbWE7CisJCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmYnVkZ2V0LT5kZW11eCwgbWVtICsgb2xkZG1hLCBjb3VudCAvIDE4OCk7CiAJfSBlbHNlIHsJCS8qIHdyYXBhcm91bmQsIGR1bXAgb2xkZG1hLi5idWZsZW4gYW5kIDAuLm5ld2RtYSAqLwotCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmJ1ZGdldC0+ZGVtdXgsIG1lbSArIG9sZGRtYSwgKFRTX0JVRkxFTiAtIG9sZGRtYSkgLyAxODgpOworCQljb3VudCA9IGJ1ZGdldC0+YnVmZmVyX3NpemUgLSBvbGRkbWE7CisJCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmYnVkZ2V0LT5kZW11eCwgbWVtICsgb2xkZG1hLCBjb3VudCAvIDE4OCk7CisJCWNvdW50ICs9IG5ld2RtYTsKIAkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZidWRnZXQtPmRlbXV4LCBtZW0sIG5ld2RtYSAvIDE4OCk7CiAJfQorCisJaWYgKGNvdW50ID4gYnVkZ2V0LT5idWZmZXJfd2FybmluZ190aHJlc2hvbGQpCisJCWJ1ZGdldC0+YnVmZmVyX3dhcm5pbmdzKys7CisKKwlpZiAoYnVkZ2V0LT5idWZmZXJfd2FybmluZ3MgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBidWRnZXQtPmJ1ZmZlcl93YXJuaW5nX3RpbWUpKSB7CisJCXByaW50aygiJXMgJXM6IHVzZWQgJWQgdGltZXMgPjgwJSUgb2YgYnVmZmVyICgldSBieXRlcyBub3cpXG4iLAorCQkJYnVkZ2V0LT5kZXYtPm5hbWUsIF9fRlVOQ1RJT05fXywgYnVkZ2V0LT5idWZmZXJfd2FybmluZ3MsIGNvdW50KTsKKwkJYnVkZ2V0LT5idWZmZXJfd2FybmluZ190aW1lID0gamlmZmllcyArIEJVRkZFUl9XQVJOSU5HX1dBSVQ7CisJCWJ1ZGdldC0+YnVmZmVyX3dhcm5pbmdzID0gMDsKKwl9CiB9CiAKIApAQCAtMzQxLDkgKzM2MiwxMCBAQAogCQkgICAgICBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8sCiAJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewotCWludCBsZW5ndGggPSBUU19XSURUSCAqIFRTX0hFSUdIVDsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnVkZ2V0X2luZm8gKmJpID0gaW5mby0+ZXh0X3ByaXY7CisJaW50IG1heF9idWZzaXplOworCWludCBoZWlnaHRfbWFzazsKIAogCW1lbXNldChidWRnZXQsIDAsIHNpemVvZihzdHJ1Y3QgYnVkZ2V0KSk7CiAKQEAgLTM1Miw2ICszNzQsMzIgQEAKIAlidWRnZXQtPmNhcmQgPSBiaTsKIAlidWRnZXQtPmRldiA9IChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKikgZGV2OwogCisJaWYgKGJ1ZGdldC0+Y2FyZC0+dHlwZSA9PSBCVURHRVRfRlNfQUNUSVZZKSB7CisJCWJ1ZGdldC0+YnVmZmVyX3dpZHRoID0gVFNfV0lEVEhfQUNUSVZZOworCQltYXhfYnVmc2l6ZSA9IFRTX01BWF9CVUZTSVpFX0tfQUNUSVZZOworCQloZWlnaHRfbWFzayA9IFRTX0hFSUdIVF9NQVNLX0FDVElWWTsKKwl9IGVsc2UgeworCQlidWRnZXQtPmJ1ZmZlcl93aWR0aCA9IFRTX1dJRFRIOworCQltYXhfYnVmc2l6ZSA9IFRTX01BWF9CVUZTSVpFX0s7CisJCWhlaWdodF9tYXNrID0gVFNfSEVJR0hUX01BU0s7CisJfQorCisJaWYgKGRtYV9idWZmZXJfc2l6ZSA8IFRTX01JTl9CVUZTSVpFX0spCisJCWRtYV9idWZmZXJfc2l6ZSA9IFRTX01JTl9CVUZTSVpFX0s7CisJZWxzZSBpZiAoZG1hX2J1ZmZlcl9zaXplID4gbWF4X2J1ZnNpemUpCisJCWRtYV9idWZmZXJfc2l6ZSA9IG1heF9idWZzaXplOworCisJYnVkZ2V0LT5idWZmZXJfaGVpZ2h0ID0gZG1hX2J1ZmZlcl9zaXplICogMTAyNCAvIGJ1ZGdldC0+YnVmZmVyX3dpZHRoOworCWJ1ZGdldC0+YnVmZmVyX2hlaWdodCAmPSBoZWlnaHRfbWFzazsKKwlidWRnZXQtPmJ1ZmZlcl9zaXplID0gYnVkZ2V0LT5idWZmZXJfaGVpZ2h0ICogYnVkZ2V0LT5idWZmZXJfd2lkdGg7CisJYnVkZ2V0LT5idWZmZXJfd2FybmluZ190aHJlc2hvbGQgPSBidWRnZXQtPmJ1ZmZlcl9zaXplICogODAvMTAwOworCWJ1ZGdldC0+YnVmZmVyX3dhcm5pbmdzID0gMDsKKwlidWRnZXQtPmJ1ZmZlcl93YXJuaW5nX3RpbWUgPSBqaWZmaWVzOworCisJZHByaW50aygyLCAiJXM6IHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLAorCQlidWRnZXQtPmRldi0+bmFtZSwgYnVkZ2V0LT5idWZmZXJfd2lkdGgsIGJ1ZGdldC0+YnVmZmVyX2hlaWdodCk7CisJcHJpbnRrKCIlczogZG1hIGJ1ZmZlciBzaXplICV1XG4iLCBidWRnZXQtPmRldi0+bmFtZSwgYnVkZ2V0LT5idWZmZXJfc2l6ZSk7CisKIAlkdmJfcmVnaXN0ZXJfYWRhcHRlcigmYnVkZ2V0LT5kdmJfYWRhcHRlciwgYnVkZ2V0LT5jYXJkLT5uYW1lLCBvd25lcik7CiAKIAkvKiBzZXQgZGQxIHN0cmVhbSBhICYgYiAqLwpAQCAtMzkyLDcgKzQ0MCw3IEBACiAJdHRwY2lfZWVwcm9tX3BhcnNlX21hYygmYnVkZ2V0LT5pMmNfYWRhcCwgYnVkZ2V0LT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWMpOwogCiAJaWYgKE5VTEwgPT0KLQkgICAgKGJ1ZGdldC0+Z3JhYmJpbmcgPSBzYWE3MTQ2X3ZtYWxsb2NfYnVpbGRfcGd0YWJsZShkZXYtPnBjaSwgbGVuZ3RoLCAmYnVkZ2V0LT5wdCkpKSB7CisJICAgIChidWRnZXQtPmdyYWJiaW5nID0gc2FhNzE0Nl92bWFsbG9jX2J1aWxkX3BndGFibGUoZGV2LT5wY2ksIGJ1ZGdldC0+YnVmZmVyX3NpemUsICZidWRnZXQtPnB0KSkpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwppbmRleCA5ZmM5MTg1Li4xYjNhYWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwpAQCAtNTc3LDIwICs1NzcsNiBAQAogCXNhYTcxNDZfc2V0Z3BpbyhkZXYsIDMsIFNBQTcxNDZfR1BJT19PVVRMTyk7CiAJLy8gU2V0IFJQUzEgQWRkcmVzcyByZWdpc3RlciB0byBwb2ludCB0byBSUFMgY29kZSAgICAgICAgICAgICAgIChyMTA4IHA0MikKIAlzYWE3MTQ2X3dyaXRlKGRldiwgUlBTX0FERFIxLCBkZXYtPmRfcnBzMS5kbWFfaGFuZGxlKTsKLQkvLyBTZXQgU291cmNlIExpbmUgQ291bnRlciBUaHJlc2hvbGQsIHVzaW5nIEJSUyAgICAgICAgICAgICAgICAgKHJDQyBwNDMpCi0JLy8gSXQgZ2VuZXJhdGVzIEhTIGV2ZW50IGV2ZXJ5IFRTX0hFSUdIVCBsaW5lcwotCS8vIHRoaXMgaXMgcmVsYXRlZCB0byBUU19XSURUSCBzZXQgaW4gcmVnaXN0ZXIKLQkvLyBOVU1fTElORV9CWVRFMyBpbiBidWRnZXQtY29yZS5jLiBJZiBOVU1fTElORV9CWVRFCi0JLy8gbG93IDE2IGJpdHMgYXJlIHNldCB0byBUU19XSURUSCBieXRlcyAoVFNfV0lEVEg9MioxODgKLQkvLyx0aGVuIFJQU19USFJFU0gxCi0JLy8gc2hvdWxkIGJlIHNldCB0byB0cmlnZ2VyIGV2ZXJ5IFRTX0hFSUdIVCAoNTEyKSBsaW5lcy4KLQkvLwotCXNhYTcxNDZfd3JpdGUoZGV2LCBSUFNfVEhSRVNIMSwgKFRTX0hFSUdIVCoxKSB8IE1BU0tfMTIgKTsKLQotCS8vIHNhYTcxNDZfd3JpdGUoZGV2LCBSUFNfVEhSRVNIMCwgKChUU19IRUlHSFQvMik8PDE2KSB8TUFTS18yOHwgKFRTX0hFSUdIVC8yKSB8TUFTS18xMiApOwotCS8vIEVuYWJsZSBSUFMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAockZDIHAzMykKLQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMxLCAoTUFTS18xMyB8IE1BU0tfMjkpKTsKLQogCiAJaWYgKCEoYnVkZ2V0ID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBidWRnZXRfcGF0Y2gpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjAyLDYgKzU4OCwyMCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8vIFNldCBTb3VyY2UgTGluZSBDb3VudGVyIFRocmVzaG9sZCwgdXNpbmcgQlJTICAgICAgICAgICAgICAgICAockNDIHA0MykKKwkvLyBJdCBnZW5lcmF0ZXMgSFMgZXZlbnQgZXZlcnkgVFNfSEVJR0hUIGxpbmVzCisJLy8gdGhpcyBpcyByZWxhdGVkIHRvIFRTX1dJRFRIIHNldCBpbiByZWdpc3RlcgorCS8vIE5VTV9MSU5FX0JZVEUzIGluIGJ1ZGdldC1jb3JlLmMuIElmIE5VTV9MSU5FX0JZVEUKKwkvLyBsb3cgMTYgYml0cyBhcmUgc2V0IHRvIFRTX1dJRFRIIGJ5dGVzIChUU19XSURUSD0yKjE4OAorCS8vLHRoZW4gUlBTX1RIUkVTSDEKKwkvLyBzaG91bGQgYmUgc2V0IHRvIHRyaWdnZXIgZXZlcnkgVFNfSEVJR0hUICg1MTIpIGxpbmVzLgorCS8vCisJc2FhNzE0Nl93cml0ZShkZXYsIFJQU19USFJFU0gxLCBidWRnZXQtPmJ1ZmZlcl9oZWlnaHQgfCBNQVNLXzEyICk7CisKKwkvLyBzYWE3MTQ2X3dyaXRlKGRldiwgUlBTX1RIUkVTSDAsICgoVFNfSEVJR0hULzIpPDwxNikgfE1BU0tfMjh8IChUU19IRUlHSFQvMikgfE1BU0tfMTIgKTsKKwkvLyBFbmFibGUgUlBTMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJGQyBwMzMpCisJc2FhNzE0Nl93cml0ZShkZXYsIE1DMSwgKE1BU0tfMTMgfCBNQVNLXzI5KSk7CisKIAogCWRldi0+ZXh0X3ByaXYgPSBidWRnZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKaW5kZXggNGFjMGY0ZC4uZWNlYTNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKQEAgLTU4LDcgKzU4LDEzIEBACiAJaW50IGNpX3ByZXNlbnQ7CiAJaW50IHZpZGVvX3BvcnQ7CiAKLQl1OCB0c2Y7CisJdTMyIGJ1ZmZlcl93aWR0aDsKKwl1MzIgYnVmZmVyX2hlaWdodDsKKwl1MzIgYnVmZmVyX3NpemU7CisJdTMyIGJ1ZmZlcl93YXJuaW5nX3RocmVzaG9sZDsKKwl1MzIgYnVmZmVyX3dhcm5pbmdzOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3dhcm5pbmdfdGltZTsKKwogCXUzMiB0dGJwOwogCWludCBmZWVkaW5nOwogCkBAIC03OSwxMSArODUsNiBAQAogCS5leHRfcHJpdiA9ICZ4X3ZhciAjIyBfaW5mbywgXAogCS5leHQgPSAmYnVkZ2V0X2V4dGVuc2lvbiB9OwogCi0jZGVmaW5lIFRTX1dJRFRIICAoMzc2KQotI2RlZmluZSBUU19IRUlHSFQgKDUxMikKLSNkZWZpbmUgVFNfQlVGTEVOIChUU19XSURUSCpUU19IRUlHSFQpCi0jZGVmaW5lIFRTX01BWF9QQUNLRVRTIChUU19CVUZMRU4vVFNfU0laRSkKLQogI2RlZmluZSBCVURHRVRfVFQJCSAgIDAKICNkZWZpbmUgQlVER0VUX1RUX0hXX0RJU0VRQwkgICAxCiAjZGVmaW5lIEJVREdFVF9QQVRDSAkJICAgMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKaW5kZXggMjQ4ZmRjNy4uNmNlYWUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCkBAIC0xNTA3LDcgKzE1MDcsMTEgQEAKIAogCW11dGV4X3VubG9jaygmdHR1c2ItPnNlbWkyYyk7CiAKLQlkdmJfcmVnaXN0ZXJfYWRhcHRlcigmdHR1c2ItPmFkYXB0ZXIsICJUZWNobm90cmVuZC9IYXVwcGF1Z2UgTm92YS1VU0IiLCBUSElTX01PRFVMRSk7CisJaWYgKChyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmdHR1c2ItPmFkYXB0ZXIsICJUZWNobm90cmVuZC9IYXVwcGF1Z2UgTm92YS1VU0IiLCBUSElTX01PRFVMRSkpIDwgMCkgeworCQl0dHVzYl9mcmVlX2lzb191cmJzKHR0dXNiKTsKKwkJa2ZyZWUodHR1c2IpOworCQlyZXR1cm4gcmVzdWx0OworCX0KIAl0dHVzYi0+YWRhcHRlci5wcml2ID0gdHR1c2I7CiAKIAkvKiBpMmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCBkMzE4YmUzLi4zZmZmNzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC03LDcgKzcsNyBAQAogCiBjb25maWcgUkFESU9fQ0FERVQKIAl0cmlzdGF0ZSAiQURTIENhZGV0IEFNL0ZNIFR1bmVyIgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX0RFVgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBBTS9GTSByYWRpbyBjYXJkcywgYW5kIHRoZW4KIAkgIGZpbGwgaW4gdGhlIHBvcnQgYWRkcmVzcyBiZWxvdy4KQEAgLTI1LDcgKzI1LDcgQEAKIAogY29uZmlnIFJBRElPX1JUUkFDSwogCXRyaXN0YXRlICJBSU1TbGFiIFJhZGlvVHJhY2sgKGFrYSBSYWRpb1JldmVhbCkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgRk0gcmFkaW8gY2FyZHMsIGFuZCB0aGVuIGZpbGwKIAkgIGluIHRoZSBwb3J0IGFkZHJlc3MgYmVsb3cuCkBAIC01OSw3ICs1OSw3IEBACiAKIGNvbmZpZyBSQURJT19SVFJBQ0syCiAJdHJpc3RhdGUgIkFJTVNsYWIgUmFkaW9UcmFjayBJSSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX0RFVgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIHRoaXMgRk0gcmFkaW8gY2FyZCwgYW5kIHRoZW4gZmlsbCBpbiB0aGUKIAkgIHBvcnQgYWRkcmVzcyBiZWxvdy4KQEAgLTgyLDcgKzgyLDcgQEAKIAogY29uZmlnIFJBRElPX0FaVEVDSAogCXRyaXN0YXRlICJBenRlY2gvUGFja2FyZCBCZWxsIFJhZGlvIgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX0RFVgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcywgYW5kIHRoZW4gZmlsbAogCSAgaW4gdGhlIHBvcnQgYWRkcmVzcyBiZWxvdy4KQEAgLTEwNiw3ICsxMDYsNyBAQAogCiBjb25maWcgUkFESU9fR0VNVEVLCiAJdHJpc3RhdGUgIkdlbVRlayBSYWRpbyBDYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyBGTSByYWRpbyBjYXJkLCBhbmQgdGhlbiBmaWxsIGluIHRoZQogCSAgcG9ydCBhZGRyZXNzIGJlbG93LgpAQCAtMTMxLDcgKzEzMSw3IEBACiAKIGNvbmZpZyBSQURJT19HRU1URUtfUENJCiAJdHJpc3RhdGUgIkdlbVRlayBQQ0kgUmFkaW8gQ2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSQorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBQQ0kKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIHRoaXMgUENJIEZNIHJhZGlvIGNhcmQuCiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiBjb25maWcgUkFESU9fTUFYSVJBRElPCiAJdHJpc3RhdGUgIkd1aWxsZW1vdCBNQVhJIFJhZGlvIEZNIDIwMDAgcmFkaW8iCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIFBDSQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyByYWRpbyBjYXJkLiAgVGhpcyBjYXJkIG1heSBhbHNvIGJlCiAJICBmb3VuZCBhcyBHZW10ZWsgUENJIEZNLgpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIGNvbmZpZyBSQURJT19NQUVTVFJPCiAJdHJpc3RhdGUgIk1hZXN0cm8gb24gYm9hcmQgcmFkaW8iCi0JZGVwZW5kcyBvbiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIHRvIGRpcmVjdGx5IHN1cHBvcnQgdGhlIG9uLWJvYXJkIHJhZGlvIHR1bmVyIG9uIHRoZQogCSAgTWFlc3RybyAyIG9yIDJFIHNvdW5kIGNhcmQuCkBAIC0xNzUsNyArMTc1LDcgQEAKIAogY29uZmlnIFJBRElPX01JUk9QQ00yMAogCXRyaXN0YXRlICJtaXJvU09VTkQgUENNMjAgcmFkaW8iCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWICYmIFNPVU5EX0FDSV9NSVhFUgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEgJiYgU09VTkRfQUNJX01JWEVSCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGlzIEZNIHJhZGlvIGNhcmQuIFlvdSBhbHNvIG5lZWQgdG8gc2F5IFkKIAkgIHRvICJBQ0kgbWl4ZXIgKG1pcm9TT1VORCBQQ00xLXByby9QQ00xMi9QQ00yMCByYWRpbykiIChpbiAiU291bmQiKQpAQCAtMjA4LDcgKzIwOCw3IEBACiAKIGNvbmZpZyBSQURJT19TRjE2Rk1JCiAJdHJpc3RhdGUgIlNGMTZGTUkgUmFkaW8iCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIEZNIHJhZGlvIGNhcmRzLiAgSWYgeW91CiAJICBjb21waWxlIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsIGFuZCB5b3VyIGNhcmQgaXMgbm90IFBuUCBvbmUsIHlvdQpAQCAtMjI1LDcgKzIyNSw3IEBACiAKIGNvbmZpZyBSQURJT19TRjE2Rk1SMgogCXRyaXN0YXRlICJTRjE2Rk1SMiBSYWRpbyIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgRk0gcmFkaW8gY2FyZHMuCiAKQEAgLTIzOSw3ICsyMzksNyBAQAogCiBjb25maWcgUkFESU9fVEVSUkFURUMKIAl0cmlzdGF0ZSAiVGVycmFUZWMgQWN0aXZlUmFkaW8gSVNBIFN0YW5kYWxvbmUiCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyBGTSByYWRpbyBjYXJkLCBhbmQgdGhlbiBmaWxsIGluIHRoZQogCSAgcG9ydCBhZGRyZXNzIGJlbG93LiAoVE9ETykKQEAgLTI2OCw3ICsyNjgsNyBAQAogCiBjb25maWcgUkFESU9fVFJVU1QKIAl0cmlzdGF0ZSAiVHJ1c3QgRk0gcmFkaW8gY2FyZCIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFRydXN0IEZNIHJhZGlvIGNhcmRzLiBTYXkgWSBpZiB5b3UgaGF2ZQogCSAgc3VjaCBhIGNhcmQgYW5kIHdhbnQgdG8gdXNlIGl0IHVuZGVyIExpbnV4LgpAQCAtMjg2LDcgKzI4Niw3IEBACiAKIGNvbmZpZyBSQURJT19UWVBIT09OCiAJdHJpc3RhdGUgIlR5cGhvb24gUmFkaW8gKGEuay5hLiBFY29SYWRpbykiCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIEZNIHJhZGlvIGNhcmRzLCBhbmQgdGhlbiBmaWxsCiAJICBpbiB0aGUgcG9ydCBhZGRyZXNzIGFuZCB0aGUgZnJlcXVlbmN5IHVzZWQgZm9yIG11dGluZyBiZWxvdy4KQEAgLTMzMCw3ICszMzAsNyBAQAogCiBjb25maWcgUkFESU9fWk9MVFJJWAogCXRyaXN0YXRlICJab2x0cml4IFJhZGlvIgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX0RFVgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcywgYW5kIHRoZW4gZmlsbAogCSAgaW4gdGhlIHBvcnQgYWRkcmVzcyBiZWxvdy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCBmMzFhMTk4Li42YjQxOTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0yLDEwICsyLDEwIEBACiAjIE11bHRpbWVkaWEgVmlkZW8gZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiVmlkZW8gRm9yIExpbnV4IgorbWVudSAiVmlkZW8gQ2FwdHVyZSBBZGFwdGVycyIKIAlkZXBlbmRzIG9uIFZJREVPX0RFVgogCi1jb21tZW50ICJWaWRlbyBBZGFwdGVycyIKK2NvbW1lbnQgIlZpZGVvIENhcHR1cmUgQWRhcHRlcnMiCiAKIGNvbmZpZyBWSURFT19BRFZfREVCVUcKIAlib29sICJFbmFibGUgYWR2YW5jZWQgZGVidWcgZnVuY3Rpb25hbGl0eSIKQEAgLTE2LDExICsxNiwyMyBAQAogCSAgVjRMIGRldmljZXMuCiAJICBJbiBkb3VidCwgc2F5IE4uCiAKK2NvbmZpZyBWSURFT19WSVZJCisJdHJpc3RhdGUgIlZpcnR1YWwgVmlkZW8gRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiAhU1BBUkMzMiAmJiAhU1BBUkM2NAorCXNlbGVjdCBWSURFT19CVUYKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBFbmFibGVzIGEgdmlydHVhbCB2aWRlbyBkcml2ZXIuIFRoaXMgZGV2aWNlIHNob3dzIGEgY29sb3IgYmFyCisJICBhbmQgYSB0aW1lc3RhbXAsIGFzIGEgcmVhbCBkZXZpY2Ugd291bGQgZ2VuZXJhdGUgYnkgdXNpbmcgVjRMMgorCSAgYXBpLgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB0ZXN0IHZpZGVvIGFwcHMgb3IgZGVidWcgVjRMIGRldmljZXMuCisJICBJbiBkb3VidCwgc2F5IE4uCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIgogCiBjb25maWcgVklERU9fU0FBNjU4OAogCXRyaXN0YXRlICJTQUE2NTg4IFJhZGlvIENoaXAgUkRTIGRlY29kZXIgc3VwcG9ydCBvbiBCVDg0OCBjYXJkcyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgVklERU9fQlQ4NDgKKwlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19CVDg0OAogCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgIFJhZGlvIERhdGEgU3lzdGVtIChSRFMpIGRlY29kZXIuIFRoaXMgYWxsb3dzIHNlZWluZwpAQCAtMzIsNyArNDQsNyBAQAogCiBjb25maWcgVklERU9fUE1TCiAJdHJpc3RhdGUgIk1lZGlhdmlzaW9uIFBybyBNb3ZpZSBTdHVkaW8gVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIElTQQorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAloZWxwCiAJICBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgdGhpbmcuCiAKQEAgLTQxLDcgKzUzLDcgQEAKIAogY29uZmlnIFZJREVPX1BMQU5CCiAJdHJpc3RhdGUgIlBsYW5CIFZpZGVvLUluIG9uIFBvd2VyTWFjIgotCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgVklERU9fREVWICYmIEJST0tFTgorCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgVklERU9fVjRMMSAmJiBCUk9LRU4KIAloZWxwCiAJICBQbGFuQiBpcyB0aGUgVjRMIGRyaXZlciBmb3IgdGhlIFBvd2VyTWFjIDd4MDAvOHgwMCBzZXJpZXMgdmlkZW8KIAkgIGlucHV0IGhhcmR3YXJlLiBJZiB5b3Ugd2FudCB0byBleHBlcmltZW50IHdpdGggdGhpcywgc2F5IFkuCkBAIC01Miw3ICs2NCw3IEBACiAKIGNvbmZpZyBWSURFT19CV1FDQU0KIAl0cmlzdGF0ZSAiUXVpY2tjYW0gQlcgVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBBUlBPUlQKKwlkZXBlbmRzIG9uIFBBUlBPUlQgJiYgVklERU9fVjRMMQogCWhlbHAKIAkgIFNheSBZIGhhdmUgaWYgeW91IHRoZSBibGFjayBhbmQgd2hpdGUgdmVyc2lvbiBvZiB0aGUgUXVpY2tDYW0KIAkgIGNhbWVyYS4gU2VlIHRoZSBuZXh0IG9wdGlvbiBmb3IgdGhlIGNvbG9yIHZlcnNpb24uCkBAIC02Miw3ICs3NCw3IEBACiAKIGNvbmZpZyBWSURFT19DUUNBTQogCXRyaXN0YXRlICJRdWlja0NhbSBDb2xvdXIgVmlkZW8gRm9yIExpbnV4IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFZJREVPX0RFViAmJiBQQVJQT1JUCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgUEFSUE9SVCAmJiBWSURFT19WNEwxCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgY29sb3VyIHZlcnNpb24gb2YgdGhlCiAJICBDb25uZWN0aXggUXVpY2tDYW0uICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgY2FtZXJhcywgc2F5IFkgaGVyZSwKQEAgLTczLDcgKzg1LDcgQEAKIAogY29uZmlnIFZJREVPX1c5OTY2CiAJdHJpc3RhdGUgIlc5OTY2Q0YgV2ViY2FtIChGbHlDYW0gU3VwcmEgYW5kIG90aGVycykgVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gUEFSUE9SVF8xMjg0ICYmIFZJREVPX0RFViAmJiBQQVJQT1JUCisJZGVwZW5kcyBvbiBQQVJQT1JUXzEyODQgJiYgUEFSUE9SVCAmJiBWSURFT19WNEwxCiAJaGVscAogCSAgVmlkZW80bGludXggZHJpdmVyIGZvciBXaW5ib25kJ3Mgdzk5NjYgYmFzZWQgV2ViY2Ftcy4KIAkgIEN1cnJlbnRseSB0ZXN0ZWQgd2l0aCB0aGUgTGlmZVZpZXcgRmx5Q2FtIFN1cHJhLgpAQCAtODYsNyArOTgsNyBAQAogCiBjb25maWcgVklERU9fQ1BJQQogCXRyaXN0YXRlICJDUGlBIFZpZGVvIEZvciBMaW51eCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFVgorCWRlcGVuZHMgb24gVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgY2FtZXJhcyBiYXNlZCBvbiBWaXNpb24ncyBDUGlBCiAJICAoQ29sb3VyIFByb2Nlc3NvciBJbnRlcmZhY2UgQVNJQyksIHN1Y2ggYXMgdGhlIENyZWF0aXZlIExhYnMgVmlkZW8KQEAgLTEyMyw3ICsxMzUsNyBAQAogCiBjb25maWcgVklERU9fU0FBNTI0NkEKIAl0cmlzdGF0ZSAiU0FBNTI0NkEsIFNBQTUyODEgVGVsZXRleHQgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQworCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJMkMgYnVzIGJhc2VkIHRlbGV0ZXh0IHVzaW5nIHRoZSBTQUE1MjQ2QSBvciBTQUE1MjgxCiAJICBjaGlwLiBVc2VmdWwgb25seSBpZiB5b3UgbGl2ZSBpbiBFdXJvcGUuCkBAIC0xNTAsNyArMTYyLDcgQEAKIAogY29uZmlnIFZJREVPX1ZJTk8KIAl0cmlzdGF0ZSAiU0dJIFZpbm8gVmlkZW8gRm9yIExpbnV4IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBTR0lfSVAyMiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBTR0lfSVAyMiAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQogCXNlbGVjdCBJMkNfQUxHT19TR0kKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGJ1aWxkIGluIHN1cHBvcnQgZm9yIHRoZSBWaW5vIHZpZGVvIGlucHV0IHN5c3RlbSBmb3VuZApAQCAtMTU4LDcgKzE3MCw3IEBACiAKIGNvbmZpZyBWSURFT19TVFJBRElTCiAJdHJpc3RhdGUgIlN0cmFkaXMgNDoyOjIgTVBFRy0yIHZpZGVvIGRyaXZlciAgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgVklERU9fREVWICYmIFBDSQorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFBDSSAmJiBWSURFT19WNEwxICYmICFQUEM2NAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTdHJhZGlzIDQ6MjoyIE1QRUctMiB2aWRlbwogCSAgZHJpdmVyIGZvciBQQ0kuICBUaGVyZSBpcyBhIHByb2R1Y3QgcGFnZSBhdApAQCAtMTY2LDcgKzE3OCw3IEBACiAKIGNvbmZpZyBWSURFT19aT1JBTgogCXRyaXN0YXRlICJab3JhbiBaUjM2MDU3LzM2MDY3IFZpZGVvIEZvciBMaW51eCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDX0FMR09CSVQKKwlkZXBlbmRzIG9uIFBDSSAmJiBJMkNfQUxHT0JJVCAmJiBWSURFT19WNEwxICYmICFQUEM2NAogCWhlbHAKIAkgIFNheSBZIGZvciBzdXBwb3J0IGZvciBNSlBFRyBjYXB0dXJlIGNhcmRzIGJhc2VkIG9uIHRoZSBab3JhbgogCSAgMzYwNTcvMzYwNjcgUENJIGNvbnRyb2xsZXIgY2hpcHNldC4gVGhpcyBpbmNsdWRlcyB0aGUgSW9tZWdhCkBAIC0yMTQsNyArMjI2LDcgQEAKIAogY29uZmlnIFZJREVPX1pSMzYxMjAKIAl0cmlzdGF0ZSAiWm9yYW4gWlIzNjEyMC8zNjEyNSBWaWRlbyBGb3IgTGludXgiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBCUk9LRU4KKwlkZXBlbmRzIG9uIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMSAmJiBCUk9LRU4KIAloZWxwCiAJICBTdXBwb3J0IGZvciBaUjM2MTIwL1pSMzYxMjUgYmFzZWQgZnJhbWUgZ3JhYmJlci9vdmVybGF5IGJvYXJkcy4KIAkgIFRoaXMgaW5jbHVkZXMgdGhlIFZpY3RvciBJSSwgV2F2ZVdhdGNoZXIsIFZpZGVvIFdvbmRlciwgTWF4aS1UViwKQEAgLTIyNiw3ICsyMzgsNyBAQAogCiBjb25maWcgVklERU9fTUVZRQogCXRyaXN0YXRlICJTb255IFZhaW8gUGljdHVyZWJvb2sgTW90aW9uIEV5ZSBWaWRlbyBGb3IgTGludXgiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIFNPTllQSQorCWRlcGVuZHMgb24gUENJICYmIFNPTllQSSAmJiBWSURFT19WNEwxCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgTW90aW9uIEV5ZSBjYW1lcmEgZm91bmQKIAkgIGluIHRoZSBWYWlvIFBpY3R1cmVib29rIGxhcHRvcHMuIFBsZWFzZSByZWFkIHRoZSBtYXRlcmlhbCBpbgpAQCAtMjQyLDcgKzI1NCw3IEBACiAKIGNvbmZpZyBWSURFT19NWEIKIAl0cmlzdGF0ZSAiU2llbWVucy1OaXhkb3JmICdNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCciCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJLS0taGVscC0tLQpAQCAtMjU0LDggKzI2Niw5IEBACiAKIGNvbmZpZyBWSURFT19EUEMKIAl0cmlzdGF0ZSAiUGhpbGlwcy1TZW1pY29uZHVjdG9ycyAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkJyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKKwlzZWxlY3QgVklERU9fVjRMMgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uCiAJICBib2FyZCcgYnkgUGhpbGlwcy1TZW1pY29uZHVjdG9ycy4gSXQncyB0aGUgcmVmZXJlbmNlIGRlc2lnbgpAQCAtMjY4LDggKzI4MSw5IEBACiAKIGNvbmZpZyBWSURFT19IRVhJVU1fT1JJT04KIAl0cmlzdGF0ZSAiSGV4aXVtIEhWLVBDSTYgYW5kIE9yaW9uIGZyYW1lIGdyYWJiZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCisJc2VsZWN0IFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgSGV4aXVtIEhWLVBDSTYgYW5kCiAJICBPcmlvbiBmcmFtZSBncmFiYmVyIGNhcmRzIGJ5IEhleGl1bS4KQEAgLTI3OSw4ICsyOTMsOSBAQAogCiBjb25maWcgVklERU9fSEVYSVVNX0dFTUlOSQogCXRyaXN0YXRlICJIZXhpdW0gR2VtaW5pIGZyYW1lIGdyYWJiZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCisJc2VsZWN0IFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgSGV4aXVtIEdlbWluaSBmcmFtZQogCSAgZ3JhYmJlciBjYXJkIGJ5IEhleGl1bS4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgR2VtaW5pIER1YWwKQEAgLTI5MywxOCArMzA4LDE4IEBACiAKIGNvbmZpZyBWSURFT19PVkNBTUNISVAKIAl0cmlzdGF0ZSAiT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQworCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgT21uaVZpc2lvbiBPVjZ4eHggYW5kIE9WN3h4eCBzZXJpZXMgb2YgY2FtZXJhIGNoaXBzLgogCSAgVGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBvdjUxMSBhbmQgdzk5NjhjZiBVU0IKIAkgIGNhbWVyYSBkcml2ZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdmNhbWNoaXAKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdmNhbWNoaXAuCiAKIGNvbmZpZyBWSURFT19NMzJSX0FSCiAJdHJpc3RhdGUgIkFSIGRldmljZXMiCi0JZGVwZW5kcyBvbiBNMzJSCisJZGVwZW5kcyBvbiBNMzJSICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgUmVuZXNhcyBBUiAoQXJ0aWZpY2lhbCBSZXRpbmEpCiAJICBjYW1lcmEgbW9kdWxlLgpAQCAtMzE2LDYgKzMzMSwxMyBAQAogCSAgU2F5IFkgaGVyZSB0byB1c2UgdGhlIFJlbmVzYXMgTTY0Mjc4RS04MDAgY2FtZXJhIG1vZHVsZSwKIAkgIHdoaWNoIHN1cHBvcnRzIFZHQSg2NDB4NDgwIHBpeGNlbHMpIHNpemUgb2YgaW1hZ2VzLgogCisjCisjIEVuY29kZXIgLyBEZWNvZGVyIG1vZHVsZSBjb25maWd1cmF0aW9uCisjCisKK21lbnUgIkVuY29kZXJzIGFuZCBEZWNvZGVycyIKKwlkZXBlbmRzIG9uIFZJREVPX0RFVgorCiBjb25maWcgVklERU9fTVNQMzQwMAogCXRyaXN0YXRlICJNaWNyb25hcyBNU1AzNHh4IGF1ZGlvIGRlY29kZXJzIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwpAQCAtMzIzLDcgKzM0NSw3IEBACiAJICBTdXBwb3J0IGZvciB0aGUgTWljcm9uYXMgTVNQMzR4eCBzZXJpZXMgb2YgYXVkaW8gZGVjb2RlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1zcDM0MDAKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtc3AzNDAwLgogCiBjb25maWcgVklERU9fQ1M1M0wzMkEKIAl0cmlzdGF0ZSAiQ2lycnVzIExvZ2ljIENTNTNMMzJBIGF1ZGlvIEFEQyIKQEAgLTMzMywzNyArMzU1LDcyIEBACiAJICBzdGVyZW8gQS9EIGNvbnZlcnRlci4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3M1M2wzMmEKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjczUzbDMyYS4KIAogY29uZmlnIFZJREVPX1dNODc3NQotCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004Nzc1IGF1ZGlvIEFEQyIKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODc3NSBhdWRpbyBBREMgd2l0aCBpbnB1dCBtaXhlciIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg3NzUKLQkgIGhpZ2ggcGVyZm9ybWFuY2Ugc3RlcmVvIEEvRCBDb252ZXJ0ZXIuCisJICBTdXBwb3J0IGZvciB0aGUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODc3NSBoaWdoCisJICBwZXJmb3JtYW5jZSBzdGVyZW8gQS9EIENvbnZlcnRlciB3aXRoIGEgNCBjaGFubmVsIGlucHV0IG1peGVyLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3bTg3NzUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3bTg3NzUuCisKK2NvbmZpZyBWSURFT19XTTg3MzkKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODczOSBzdGVyZW8gYXVkaW8gQURDIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODczOQorCSAgc3RlcmVvIEEvRCBDb252ZXJ0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdtODczOS4KIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvS2NvbmZpZyIKIAogY29uZmlnIFZJREVPX1NBQTcxMVgKLQl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMy80LzUgdmlkZW8gZGVjb2RlcnMgKE9CU09MRVRFRCkiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycy4KKwkgIE9sZCBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEzLzQgdmlkZW8gZGVjb2RlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMTUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTE1LgogCiBjb25maWcgVklERU9fU0FBNzEyNwogCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMjcvOSBkaWdpdGFsIHZpZGVvIGVuY29kZXJzIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMjcvOSBkaWdpdGFsIHZpZGVvIGVuY29kZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTI3CisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzEyNy4KKworY29uZmlnIFZJREVPX1VQRDY0MDMxQQorCXRyaXN0YXRlICJORUMgRWxlY3Ryb25pY3MgdVBENjQwMzFBIEdob3N0IFJlZHVjdGlvbiIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgdVBENjQwMzFBIEdob3N0IFJlZHVjdGlvbgorCSAgdmlkZW8gY2hpcC4gSXQgaXMgbW9zdCBvZnRlbiBmb3VuZCBpbiBOVFNDIFRWIGNhcmRzIG1hZGUgZm9yCisJICBKYXBhbiBhbmQgaXMgdXNlZCB0byByZWR1Y2UgdGhlICdnaG9zdGluZycgZWZmZWN0IHRoYXQgY2FuCisJICBiZSBwcmVzZW50IGluIGFuYWxvZyBUViBicm9hZGNhc3RzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1cGQ2NDAzMWEuCisKK2NvbmZpZyBWSURFT19VUEQ2NDA4MworCXRyaXN0YXRlICJORUMgRWxlY3Ryb25pY3MgdVBENjQwODMgMy1EaW1lbnNpb25hbCBZL0Mgc2VwYXJhdGlvbiIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgdVBENjQwODMgMy1EaW1lbnNpb25hbCBZL0MKKwkgIHNlcGFyYXRpb24gdmlkZW8gY2hpcC4gSXQgaXMgdXNlZCB0byBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mCisJICB0aGUgY29sb3JzIG9mIGEgY29tcG9zaXRlIHNpZ25hbC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXBkNjQwODMuCisKK2VuZG1lbnUgIyBlbmNvZGVyIC8gZGVjb2RlciBjaGlwcwogCiAjCiAjIFVTQiBNdWx0aW1lZGlhIGRldmljZSBjb25maWd1cmF0aW9uCkBAIC0zNzQsMTU3ICs0MzEsNjIgQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnIgogCi1jb25maWcgVVNCX1ZJQ0FNCi0JdHJpc3RhdGUgIlVTQiAzY29tIEhvbWVDb25uZWN0IChha2EgdmljYW0pIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgM2NvbSBob21lY29ubmVjdCBjYW1lcmEgKHZpY2FtKS4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgotCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAotCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpY2FtLgotCiBjb25maWcgVVNCX0RTQlIKIAl0cmlzdGF0ZSAiRC1MaW5rIFVTQiBGTSByYWRpbyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgcmFkaW8gdG8geW91cgogCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gTm90ZSB0aGF0IHRoZSBhdWRpbyBpcyBub3QgZGlnaXRhbCwgYW5kCiAJICB5b3UgbXVzdCBjb25uZWN0IHRoZSBsaW5lIG91dCBjb25uZWN0b3IgdG8gYSBzb3VuZCBjYXJkIG9yIGEKIAkgIHNldCBvZiBzcGVha2Vycy4KIAotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gIFlvdSBtdXN0IGVuYWJsZQotCSAgKFkgb3IgTSBpbiBjb25maWcpIFZpZGVvIEZvciBMaW51eCAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpCi0JICB0byB1c2UgdGhpcyBkcml2ZXIuICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8KLQkgICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRzYnIxMDAuCiAKLWNvbmZpZyBVU0JfRVQ2MVgyNTEKLQl0cmlzdGF0ZSAiVVNCIEVUNjFYWzEyXTUxIFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIEV0b21zIEVUNjFYMTUxCi0JICBvciBFVDYxWDI1MSBQQyBDYW1lcmEgQ29udHJvbGxlcnMuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZyIKIAotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2V0NjF4MjUxLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb25zLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCi0JICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV0NjF4MjUxLgotCi1jb25maWcgVVNCX0lCTUNBTQotCXRyaXN0YXRlICJVU0IgSUJNIChYaXJsaW5rKSBDLWl0IENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIElCTSAiQy1JdCIgY2FtZXJhLCBhbHNvIGtub3duIGFzCi0JICAiWGlybGluayBQQyBDYW1lcmEiIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gIEZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiwgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0Pi4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gIFlvdSBtdXN0IGVuYWJsZQotCSAgKFkgb3IgTSBpbiBjb25maWcpIFZpZGVvIEZvciBMaW51eCAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpCi0JICB0byB1c2UgdGhpcyBkcml2ZXIuICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8KLQkgICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlibWNhbS4KLQotCSAgVGhpcyBjYW1lcmEgaGFzIHNldmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoCi0JICBjYW4gYmUgc3BlY2lmaWVkIHdoZW4geW91IGxvYWQgdGhlIG1vZHVsZS4gUmVhZAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dD4gdG8gbGVhcm4gbW9yZS4KLQotY29uZmlnIFVTQl9LT05JQ0FXQwotCXRyaXN0YXRlICJVU0IgS29uaWNhIFdlYmNhbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3Igd2ViY2FtcyBiYXNlZCBvbiBhIEtvbmljYQotCSAgY2hpcHNldC4gVGhpcyBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIEludGVsIFlDNzYgd2ViY2FtLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgWW91IG11c3QgZW5hYmxlCi0JICAoWSBvciBNIGluIGNvbmZpZykgVmlkZW8gRm9yIExpbnV4ICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykKLQkgIHRvIHVzZSB0aGlzIGRyaXZlci4gIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0bwotCSAgInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0Ci0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga29uaWNhd2MuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZyIKIAogY29uZmlnIFVTQl9PVjUxMQogCXRyaXN0YXRlICJVU0IgT1Y1MTEgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCi0JICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCi0JICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L292NTExLnR4dD4KKwkgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdjUxMS4KIAogY29uZmlnIFVTQl9TRTQwMQogCXRyaXN0YXRlICJVU0IgU0U0MDEgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9zZTQwMS50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgotCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAotCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zZTQwMS50eHQ+CisJICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2U0MDEuCiAKLWNvbmZpZyBVU0JfU045QzEwMgotCXRyaXN0YXRlICJVU0IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBTT05pWCBTTjlDMTAxLAotCSAgU045QzEwMiBvciBTTjlDMTAzIFBDIENhbWVyYSBDb250cm9sbGVycy4KLQotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiIHRvIHVzZSB0aGlzIGRyaXZlci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc245YzEwMi4KK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWciCiAKIGNvbmZpZyBVU0JfU1RWNjgwCiAJdHJpc3RhdGUgIlVTQiBTVFY2ODAgKFBlbmNhbSkgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKIAkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaW5jbHVkZXMgdGhlIFBlbmNhbSBsaW5lIG9mIGNhbWVyYXMuCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivc3R2NjgwLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGZvcgotCSAgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCi0JICAiVmlkZW8gRm9yIExpbnV4IiAodW5kZXIgTXVsdGltZWRpYSBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCi0JICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCi0JICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3N0djY4MC50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uCisJICBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3R2NjgwLgogCiBjb25maWcgVVNCX1c5OTY4Q0YKIAl0cmlzdGF0ZSAiVVNCIFc5OTZbODddQ0YgSlBFRyBEdWFsIE1vZGUgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIEkyQyAmJiBWSURFT19PVkNBTUNISVAKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxICYmIEkyQworCXNlbGVjdCBWSURFT19PVkNBTUNISVAKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gT1Y2ODEgb3IKIAkgIFdpbmJvbmQgVzk5NjdDRi9XOTk2OENGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcHMuCkBAIC01MzQsNjQgKzQ5NiwxNCBAQAogCSAgcmVzb2x1dGlvbnMgYW5kIGZyYW1lcmF0ZXMsIGJ1dCBjYW5ub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG9mZmljaWFsCiAJICBMaW51eCBrZXJuZWwgZm9yIHBlcmZvcm1hbmNlIHB1cnBvc2VzLgogCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9ucy4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IGFuZCB0aGUgSTJDIEFQSXMuIEl0IG5lZWRzIHRoZQotCSAgT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBzdXBwb3J0IGFzIHdlbGwuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiLCAiSTJDIFN1cHBvcnQiIGFuZCAiT21uaVZpc2lvbiBDYW1lcmEgQ2hpcAotCSAgc3VwcG9ydCIgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjhjZi50eHQ+IGZvciBtb3JlIGluZm8uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHc5OTY4Y2YuCiAKLWNvbmZpZyBVU0JfWkMwMzAxCi0JdHJpc3RhdGUgIlVTQiBaQzAzMDEgSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFpDMDMwMQotCSAgSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWciCiAKLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi96YzAzMDEudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiIHRvIHVzZSB0aGlzIGRyaXZlci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgemMwMzAxLgotCi1jb25maWcgVVNCX1BXQwotCXRyaXN0YXRlICJVU0IgUGhpbGlwcyBDYW1lcmFzIgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZXNlIFBoaWxpcHMgJiBPRU0KLQkgIHdlYmNhbXM6Ci0JICAgKiBQaGlsaXBzIFBDQTY0NSwgUENBNjQ2Ci0JICAgKiBQaGlsaXBzIFBDVkM2NzUsIFBDVkM2ODAsIFBDVkM2OTAKLQkgICAqIFBoaWxpcHMgUENWQzcyMC80MCwgUENWQzczMCwgUENWQzc0MCwgUENWQzc1MAotCSAgICogQXNrZXkgVkMwMTAKLQkgICAqIExvZ2l0ZWNoIFF1aWNrQ2FtIFBybyAzMDAwLCA0MDAwLCAnWm9vbScsICdOb3RlYm9vayBQcm8nCi0JICAgICBhbmQgJ09yYml0Jy8nU3BoZXJlJwotCSAgICogU2Ftc3VuZyBNUEMtQzEwLCBNUEMtQzMwCi0JICAgKiBDcmVhdGl2ZSBXZWJjYW0gNSwgUHJvIEV4Ci0JICAgKiBTT1RFQyBBZmluYSBFeWUKLQkgICAqIFZpc2lvbml0ZSBWQ1MtVUMzMDAsIFZDUy1VTTEwMAotCi0JICBUaGUgUENBNjM1LCBQQ1ZDNjY1IGFuZCBQQ1ZDNzIwLzIwIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCi0JICBhbmQgbmV2ZXIgd2lsbCBiZSwgYnV0IHRoZSA2NjUgYW5kIDcyMC8yMCBhcmUgc3VwcG9ydGVkIGJ5IG90aGVyCi0JICBkcml2ZXJzLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvcGhpbGlwcy50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZAotCSAgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KLQotCSAgVGhlIGJ1aWx0LWluIG1pY3JvcGhvbmUgaXMgZW5hYmxlZCBieSBzZWxlY3RpbmcgVVNCIEF1ZGlvIHN1cHBvcnQuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgotCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAotCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHB3Yy4KK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZyIKIAogZW5kbWVudSAjIFY0TCBVU0IgZGV2aWNlcwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCAxYzBlNzJlLi5lNWJmMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDExIEBACiAKIG1zcDM0MDAtb2Jqcwk6PQltc3AzNDAwLWRyaXZlci5vIG1zcDM0MDAta3RocmVhZHMubwogCi1vYmotJChDT05GSUdfVklERU9fREVWKSArPSB2aWRlb2Rldi5vIHY0bDItY29tbW9uLm8gdjRsMS1jb21wYXQubyBjb21wYXRfaW9jdGwzMi5vCitvYmotJChDT05GSUdfVklERU9fREVWKSArPSB2aWRlb2Rldi5vIHY0bDItY29tbW9uLm8gY29tcGF0X2lvY3RsMzIubworCitpZmVxICgkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkseSkKKyAgb2JqLSQoQ09ORklHX1ZJREVPX0RFVikgKz0gdjRsMS1jb21wYXQubworZW5kaWYKIAogb2JqLSQoQ09ORklHX1ZJREVPX0JUODQ4KSArPSBidDh4eC8KIG9iai0kKENPTkZJR19WSURFT19CVDg0OCkgKz0gdHZhdWRpby5vIHRkYTc0MzIubyB0ZGE5ODc1Lm8gaXIta2JkLWkyYy5vCkBAIC00NSw2ICs0OSw3IEBACiBvYmotJChDT05GSUdfVklERU9fTVNQMzQwMCkgKz0gbXNwMzQwMC5vCiBvYmotJChDT05GSUdfVklERU9fQ1M1M0wzMkEpICs9IGNzNTNsMzJhLm8KIG9iai0kKENPTkZJR19WSURFT19XTTg3NzUpICs9IHdtODc3NS5vCitvYmotJChDT05GSUdfVklERU9fV004NzM5KSArPSB3bTg3Mzkubwogb2JqLSQoQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCkgKz0gb3ZjYW1jaGlwLwogb2JqLSQoQ09ORklHX1ZJREVPX0NQSUEyKSArPSBjcGlhMi8KIG9iai0kKENPTkZJR19WSURFT19NWEIpICs9IHNhYTcxMTEubyB0ZGE5ODQwLm8gdGVhNjQxNWMubyB0ZWE2NDIwLm8gbXhiLm8KQEAgLTY0LDkgKzY5LDggQEAKIG9iai0kKENPTkZJR19WSURFT19DWDI1ODQwKSArPSBjeDI1ODQwLwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMVgpICs9IHNhYTcxMTUubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMjcpICs9IHNhYTcxMjcubwotCi1ldDYxeDI1MS1vYmpzICAgOj0gZXQ2MXgyNTFfY29yZS5vIGV0NjF4MjUxX3RhczUxMzBkMWIubwotemMwMzAxLW9ianMgICAgIDo9IHpjMDMwMV9jb3JlLm8gemMwMzAxX3BhczIwMmJjYi5vCitvYmotJChDT05GSUdfVklERU9fVVBENjQwMzFBKSArPSB1cGQ2NDAzMWEubworb2JqLSQoQ09ORklHX1ZJREVPX1VQRDY0MDgzKSArPSB1cGQ2NDA4My5vCiAKIG9iai0kKENPTkZJR19VU0JfREFCVVNCKSAgICAgICAgKz0gZGFidXNiLm8KIG9iai0kKENPTkZJR19VU0JfRFNCUikgICAgICAgICAgKz0gZHNicjEwMC5vCkBAIC04NCw0ICs4OCw4IEBACiBvYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IHVzYnZpZGVvLwogb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB1c2J2aWRlby8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorb2JqLSQoQ09ORklHX1ZJREVPX1ZJVkkpICs9IHZpdmkubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorZXh0cmEtY2ZsYWdzLSQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKSArPSAtRENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKaW5kZXggMDg1NDc3Yy4uMTUzZjZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19CVDg0OAogCXRyaXN0YXRlICJCVDg0OCBWaWRlbyBGb3IgTGludXgiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMgogCXNlbGVjdCBJMkNfQUxHT0JJVAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgVklERU9fQlRDWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvTWFrZWZpbGUKaW5kZXggOTQzNTBmMi4uYTA5NmEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L01ha2VmaWxlCkBAIC04LDUgKzgsNSBAQAogCiBvYmotJChDT05GSUdfVklERU9fQlQ4NDgpICs9IGJ0dHYubwogCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyYykvLi4KLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCmluZGV4IGYyMDlhNzQuLjJiNjRhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC0yOTkxLDEzICsyOTkxLDEzIEBACiAKIAlpZiAoVU5TRVQgIT0gYXVkaW9tdXhbMF0pIHsKIAkJZ3Bpb2JpdHMgPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJCWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb211eFtpXSA9IGF1ZGlvbXV4W2ldOwogCQkJZ3Bpb2JpdHMgfD0gYXVkaW9tdXhbaV07CiAJCX0KIAl9IGVsc2UgewogCQlncGlvYml0cyA9IGF1ZGlvYWxsOwotCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJCWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb211eFtpXSA9IGF1ZGlvYWxsOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDc0ZGVmOWMuLjQyM2U5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTk3MywxMiArOTczLDEyIEBACiAJCSAgIEZvciBub3cgdGhpcyBpcyBzdWZmaWNpZW50LiAqLwogCQlzd2l0Y2ggKGlucHV0KSB7CiAJCWNhc2UgVFZBVURJT19JTlBVVF9SQURJTzoKLQkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVF8yLCBNU1BfSU5fVFVORVJfMSwKLQkJCQkgICAgTVNQX0RTUF9PVVRfU0NBUlQsIE1TUF9EU1BfT1VUX1NDQVJUKTsKKwkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVDIsIE1TUF9JTl9UVU5FUjEsCisJCQkJICAgIE1TUF9EU1BfSU5fU0NBUlQsIE1TUF9EU1BfSU5fU0NBUlQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVFZBVURJT19JTlBVVF9FWFRFUk46Ci0JCQlyb3V0ZS5pbnB1dCA9IE1TUF9JTlBVVChNU1BfSU5fU0NBUlRfMSwgTVNQX0lOX1RVTkVSXzEsCi0JCQkJICAgIE1TUF9EU1BfT1VUX1NDQVJULCBNU1BfRFNQX09VVF9TQ0FSVCk7CisJCQlyb3V0ZS5pbnB1dCA9IE1TUF9JTlBVVChNU1BfSU5fU0NBUlQxLCBNU1BfSU5fVFVORVIxLAorCQkJCSAgICBNU1BfRFNQX0lOX1NDQVJULCBNU1BfRFNQX0lOX1NDQVJUKTsKIAkJCWJyZWFrOwogCQljYXNlIFRWQVVESU9fSU5QVVRfSU5URVJOOgogCQkJLyogWWVzLCB0aGlzIGlzIHRoZSBzYW1lIGlucHV0IGFzIGZvciBSQURJTy4gSSBkb3VidApAQCAtOTg2LDggKzk4Niw4IEBACiAJCQkgICBpbnB1dCBpcyB0aGUgQlRUVl9CT0FSRF9BVkVSTUVESUE5OC4gSSB3b25kZXIgaG93CiAJCQkgICB0aGF0IHdhcyB0ZXN0ZWQuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIHdob2xlIElOVEVSTgogCQkJICAgaW5wdXQgZG9lcyBub3Qgd29yay4gKi8KLQkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVF8yLCBNU1BfSU5fVFVORVJfMSwKLQkJCQkgICAgTVNQX0RTUF9PVVRfU0NBUlQsIE1TUF9EU1BfT1VUX1NDQVJUKTsKKwkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVDIsIE1TUF9JTl9UVU5FUjEsCisJCQkJICAgIE1TUF9EU1BfSU5fU0NBUlQsIE1TUF9EU1BfSU5fU0NBUlQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVFZBVURJT19JTlBVVF9UVU5FUjoKIAkJZGVmYXVsdDoKQEAgLTEwMjMsMTQgKzEwMjMsMTEgQEAKIHN0YXRpYyB2b2lkCiBpMmNfdmlkaW9jc2NoYW4oc3RydWN0IGJ0dHYgKmJ0dikKIHsKLQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBjOworCXY0bDJfc3RkX2lkIHN0ZCA9IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0udjRsMl9pZDsKIAotCW1lbXNldCgmYywwLHNpemVvZihjKSk7Ci0JYy5ub3JtICAgID0gYnR2LT50dm5vcm07Ci0JYy5jaGFubmVsID0gYnR2LT5pbnB1dDsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LFZJRElPQ1NDSEFOLCZjKTsKKwlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19TVEQsICZzdGQpOwogCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNKQotCQlidHR2X3RkYTk4ODBfc2V0bm9ybShidHYsYy5ub3JtKTsKKwkJYnR0dl90ZGE5ODgwX3NldG5vcm0oYnR2LGJ0di0+dHZub3JtKTsKIH0KIAogc3RhdGljIGludApAQCAtMTE4NCwxMSArMTE4MSwyNyBAQAogCQkJYnJlYWs7CiAJaWYgKGkgPT0gQlRUVl9DVExTKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSA+PSA0ICYmIGkgPD0gOCkgeworCWlmIChidHYtPmF1ZGlvX2hvb2sgJiYgaSA+PSA0ICYmIGkgPD0gOCkgewogCQltZW1zZXQoJnZhLDAsc2l6ZW9mKHZhKSk7Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ0dBVURJTywgJnZhKTsKLQkJaWYgKGJ0di0+YXVkaW9faG9vaykKLQkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDApOworCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwwKTsKKwkJc3dpdGNoIChjLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQljLT52YWx1ZSA9IChWSURFT19BVURJT19NVVRFICYgdmEuZmxhZ3MpID8gMSA6IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCQljLT52YWx1ZSA9IHZhLnZvbHVtZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCQljLT52YWx1ZSA9IHZhLmJhbGFuY2U7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCQkJYy0+dmFsdWUgPSB2YS5iYXNzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQkJYy0+dmFsdWUgPSB2YS50cmVibGU7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKIAl9CiAJc3dpdGNoIChjLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKQEAgLTEyMDUsMTkgKzEyMTgsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWMtPnZhbHVlID0gKFZJREVPX0FVRElPX01VVEUgJiB2YS5mbGFncykgPyAxIDogMDsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWMtPnZhbHVlID0gdmEudm9sdW1lOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWMtPnZhbHVlID0gdmEuYmFsYW5jZTsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQljLT52YWx1ZSA9IHZhLmJhc3M7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQljLT52YWx1ZSA9IHZhLnRyZWJsZTsKKwkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0dixWSURJT0NfR19DVFJMLGMpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfUFJJVkFURV9DSFJPTUFfQUdDOgpAQCAtMTI2OSwxMSArMTI3NCwzNSBAQAogCQkJYnJlYWs7CiAJaWYgKGkgPT0gQlRUVl9DVExTKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSA+PSA0ICYmIGkgPD0gOCkgeworCWlmIChidHYtPmF1ZGlvX2hvb2sgJiYgaSA+PSA0ICYmIGkgPD0gOCkgewogCQltZW1zZXQoJnZhLDAsc2l6ZW9mKHZhKSk7Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ0dBVURJTywgJnZhKTsKLQkJaWYgKGJ0di0+YXVkaW9faG9vaykKLQkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDApOworCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwwKTsKKwkJc3dpdGNoIChjLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQlpZiAoYy0+dmFsdWUpIHsKKwkJCQl2YS5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOworCQkJCWF1ZGlvX211dGUoYnR2LCAxKTsKKwkJCX0gZWxzZSB7CisJCQkJdmEuZmxhZ3MgJj0gflZJREVPX0FVRElPX01VVEU7CisJCQkJYXVkaW9fbXV0ZShidHYsIDApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCQl2YS52b2x1bWUgPSBjLT52YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCQl2YS5iYWxhbmNlID0gYy0+dmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCQkJdmEuYmFzcyA9IGMtPnZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQkJdmEudHJlYmxlID0gYy0+dmFsdWU7CisJCQlicmVhazsKKwkJfQorCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwxKTsKKwkJcmV0dXJuIDA7CiAJfQogCXN3aXRjaCAoYy0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CkBAIC0xMjg5LDI2ICsxMzE4LDEzIEBACiAJCWJ0ODQ4X3NhdChidHYsYy0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWlmIChjLT52YWx1ZSkgewotCQkJdmEuZmxhZ3MgfD0gVklERU9fQVVESU9fTVVURTsKLQkJCWF1ZGlvX211dGUoYnR2LCAxKTsKLQkJfSBlbHNlIHsKLQkJCXZhLmZsYWdzICY9IH5WSURFT19BVURJT19NVVRFOwotCQkJYXVkaW9fbXV0ZShidHYsIDApOwotCQl9Ci0JCWJyZWFrOwotCisJCWF1ZGlvX211dGUoYnR2LCBjLT52YWx1ZSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQl2YS52b2x1bWUgPSBjLT52YWx1ZTsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQl2YS5iYWxhbmNlID0gYy0+dmFsdWU7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJdmEuYmFzcyA9IGMtPnZhbHVlOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJdmEudHJlYmxlID0gYy0+dmFsdWU7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsVklESU9DX1NfQ1RSTCxjKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQ0hST01BX0FHQzoKQEAgLTEzNjQsMTEgKzEzODAsNiBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoaSA+PSA0ICYmIGkgPD0gOCkgewotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NTQVVESU8sICZ2YSk7Ci0JCWlmIChidHYtPmF1ZGlvX2hvb2spCi0JCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwxKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1OTEsMTIgKzE2MDIsMTYgQEAKIAl9CiAJY2FzZSBWSURJT0NTRlJFUToKIAl7Ci0JCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7CisJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSBmcmVxOworCisJCW1lbXNldCgmZnJlcSwgMCwgc2l6ZW9mKGZyZXEpKTsKKwkJZnJlcS5mcmVxdWVuY3kgPSAqKHVuc2lnbmVkIGxvbmcgKilhcmc7CiAJCW11dGV4X2xvY2soJmJ0di0+bG9jayk7Ci0JCWJ0di0+ZnJlcT0qZnJlcTsKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0dixWSURJT0NTRlJFUSxmcmVxKTsKKwkJZnJlcS50eXBlID0gYnR2LT5yYWRpb191c2VyID8gVjRMMl9UVU5FUl9SQURJTyA6IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQlidHYtPmZyZXEgPSAqKHVuc2lnbmVkIGxvbmcgKilhcmc7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsVklESU9DX1NfRlJFUVVFTkNZLCZmcmVxKTsKIAkJaWYgKGJ0di0+aGFzX21hdGNoYm94ICYmIGJ0di0+cmFkaW9fdXNlcikKLQkJCXRlYTU3NTdfc2V0X2ZyZXEoYnR2LCpmcmVxKTsKKwkJCXRlYTU3NTdfc2V0X2ZyZXEoYnR2LCoodW5zaWduZWQgbG9uZyAqKWFyZyk7CiAJCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTgyNywzMyArMTg0MiwyNiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCW11dGV4X2xvY2soJmJ0di0+bG9jayk7CiAJCW1lbXNldCh0LDAsc2l6ZW9mKCp0KSk7Ci0JCXN0cmNweSh0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOwotCQl0LT50eXBlICAgICAgID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNOwogCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0dfVFVORVIsIHQpOworCQlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07CisJCXQtPnR5cGUgICAgICAgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAkJaWYgKGJ0cmVhZChCVDg0OF9EU1RBVFVTKSZCVDg0OF9EU1RBVFVTX0hMT0MpCiAJCQl0LT5zaWduYWwgPSAweGZmZmY7Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB0dW5lcjsKIAotCQkJbWVtc2V0KCZ0dW5lciwgMCwgc2l6ZW9mICh0dW5lcikpOwotCQkJdHVuZXIucmFuZ2VoaWdoID0gMHhmZmZmZmZmZlVMOwotCQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DR1RVTkVSLCAmdHVuZXIpOwotCQkJdC0+cmFuZ2Vsb3cgPSB0dW5lci5yYW5nZWxvdzsKLQkJCXQtPnJhbmdlaGlnaCA9IHR1bmVyLnJhbmdlaGlnaDsKLQkJfQotCQl7CisJCWlmIChidHYtPmF1ZGlvX2hvb2spIHsKIAkJCS8qIEhtbW0gLi4uICovCiAJCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdmE7CiAJCQltZW1zZXQoJnZhLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2F1ZGlvKSk7Ci0JCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NHQVVESU8sICZ2YSk7Ci0JCQlpZiAoYnR2LT5hdWRpb19ob29rKQotCQkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDApOworCQkJYnR2LT5hdWRpb19ob29rKGJ0diwmdmEsMCk7CisJCQl0LT5hdWRtb2RlICAgID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAkJCWlmKHZhLm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pIHsKLQkJCQl0LT5hdWRtb2RlICAgICA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JCQkJdC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQkJdC0+YXVkbW9kZSAgICA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAkJCX0KLQkJCWlmKHZhLm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkgeworCQkJaWYodmEubW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKSB7CiAJCQkJdC0+YXVkbW9kZSAgICA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKIAkJCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEKIAkJCQkJfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKQEAgLTE4NzIsMTAgKzE4ODAsMTAgQEAKIAkJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKLQkJeworCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19UVU5FUiwgdCk7CisJCWlmIChidHYtPmF1ZGlvX2hvb2spIHsKIAkJCXN0cnVjdCB2aWRlb19hdWRpbyB2YTsKIAkJCW1lbXNldCgmdmEsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fYXVkaW8pKTsKLQkJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ0dBVURJTywgJnZhKTsKIAkJCWlmICh0LT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9NT05PKQogCQkJCXZhLm1vZGUgPSBWSURFT19TT1VORF9NT05POwogCQkJZWxzZSBpZiAodC0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPIHx8CkBAIC0xODg1LDkgKzE4OTMsNyBAQAogCQkJCXZhLm1vZGUgPSBWSURFT19TT1VORF9MQU5HMTsKIAkJCWVsc2UgaWYgKHQtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcyKQogCQkJCXZhLm1vZGUgPSBWSURFT19TT1VORF9MQU5HMjsKLQkJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ1NBVURJTywgJnZhKTsKLQkJCWlmIChidHYtPmF1ZGlvX2hvb2spCi0JCQkJYnR2LT5hdWRpb19ob29rKGJ0diwmdmEsMSk7CisJCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwxKTsKIAkJfQogCQltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJCXJldHVybiAwOwpAQCAtMTkxMiw3ICsxOTE4LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQltdXRleF9sb2NrKCZidHYtPmxvY2spOwogCQlidHYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsVklESU9DU0ZSRVEsJmJ0di0+ZnJlcSk7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsVklESU9DX1NfRlJFUVVFTkNZLGYpOwogCQlpZiAoYnR2LT5oYXNfbWF0Y2hib3ggJiYgYnR2LT5yYWRpb191c2VyKQogCQkJdGVhNTc1N19zZXRfZnJlcShidHYsYnR2LT5mcmVxKTsKIAkJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOwpAQCAtMTkyMCw3ICsxOTI2LDkgQEAKIAl9CiAJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKIAl7CisJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT1cbiIsIGJ0di0+Yy5uciwgYnR2LT5jLm5yKTsKIAkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6ID09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT09XG4iLCBidHYtPmMubnIsIGJ0di0+Yy5ucik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjg3MCwxMiArMjg3OCwxMCBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJKmMgPSBidHR2X2N0bHNbaV07Ci0JCWlmIChpID49IDQgJiYgaSA8PSA4KSB7CisJCWlmIChidHYtPmF1ZGlvX2hvb2sgJiYgaSA+PSA0ICYmIGkgPD0gOCkgewogCQkJc3RydWN0IHZpZGVvX2F1ZGlvIHZhOwogCQkJbWVtc2V0KCZ2YSwwLHNpemVvZih2YSkpOwotCQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DR0FVRElPLCAmdmEpOwotCQkJaWYgKGJ0di0+YXVkaW9faG9vaykKLQkJCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwwKTsKKwkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDApOwogCQkJc3dpdGNoIChidHR2X2N0bHNbaV0uaWQpIHsKIAkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCQkJCWlmICghKHZhLmZsYWdzICYgVklERU9fQVVESU9fVk9MVU1FKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jCmluZGV4IDE2MzIzYTUuLmFmY2ZlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJCSAgY29uc3Qgc3RydWN0IGJ0dHZfZm9ybWF0ICpmbXQsIHN0cnVjdCBidHR2X292ZXJsYXkgKm92LAogCQkgIGludCBza2lwX2V2ZW4sIGludCBza2lwX29kZCkKIHsKLQlpbnQgaW5zdHJ1Y3Rpb25zLHJjLGxpbmUsbWF4eSxzdGFydCxlbmQsc2tpcCxuc2tpcHM7CisJaW50IGR3b3JkcyxyYyxsaW5lLG1heHksc3RhcnQsZW5kLHNraXAsbnNraXBzOwogCXN0cnVjdCBidGN4X3NraXBsaXN0ICpza2lwczsKIAl1MzIgKnJwLHJpLHJhOwogCXUzMiBhZGRyOwpAQCAtMjQyLDEyICsyNDIsMTIgQEAKIAlpZiAoTlVMTCA9PSAoc2tpcHMgPSBrbWFsbG9jKHNpemVvZigqc2tpcHMpICogb3YtPm5jbGlwcyxHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogZXN0aW1hdGUgcmlzYyBtZW06IHdvcnN0IGNhc2UgaXMgKGNsaXArMSkgKiBsaW5lcyBpbnN0cnVjdGlvbnMKKwkvKiBlc3RpbWF0ZSByaXNjIG1lbTogd29yc3QgY2FzZSBpcyAoMS41KmNsaXArMSkgKiBsaW5lcyBpbnN0cnVjdGlvbnMKIAkgICArIHN5bmMgKyBqdW1wIChhbGwgMiBkd29yZHMpICovCi0JaW5zdHJ1Y3Rpb25zICA9IChvdi0+bmNsaXBzICsgMSkgKgotCQkoKHNraXBfZXZlbiB8fCBza2lwX29kZCkgPyBvdi0+dy5oZWlnaHQ+PjEgOiAgb3YtPncuaGVpZ2h0KTsKLQlpbnN0cnVjdGlvbnMgKz0gMjsKLQlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKGJ0di0+Yy5wY2kscmlzYyxpbnN0cnVjdGlvbnMqOCkpIDwgMCkgeworCWR3b3JkcyAgPSAoMyAqIG92LT5uY2xpcHMgKyAyKSAqCisJCSgoc2tpcF9ldmVuIHx8IHNraXBfb2RkKSA/IChvdi0+dy5oZWlnaHQrMSk+PjEgOiAgb3YtPncuaGVpZ2h0KTsKKwlkd29yZHMgKz0gNDsKKwlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKGJ0di0+Yy5wY2kscmlzYyxkd29yZHMqNCkpIDwgMCkgewogCQlrZnJlZShza2lwcyk7CiAJCXJldHVybiByYzsKIAl9CkBAIC0yNzYsOCArMjc2LDYgQEAKIAkJaWYgKGxpbmUgPiBtYXh5KQogCQkJYnRjeF9jYWxjX3NraXBzKGxpbmUsIG92LT53LndpZHRoLCAmbWF4eSwKIAkJCQkJc2tpcHMsICZuc2tpcHMsIG92LT5jbGlwcywgb3YtPm5jbGlwcyk7Ci0JCWVsc2UKLQkJCW5za2lwcyA9IDA7CiAKIAkJLyogd3JpdGUgb3V0IHJpc2MgY29kZSAqLwogCQlmb3IgKHN0YXJ0ID0gMCwgc2tpcCA9IDA7IHN0YXJ0IDwgb3YtPncud2lkdGg7IHN0YXJ0ID0gZW5kKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKaW5kZXggZTIwZmYyMy4uOGM5ZjBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJCS0gdHZub3JtLT52YmlzdGFydFswXTsKIAljb3VudDEgPSAoczY0KSBmLT5mbXQudmJpLnN0YXJ0WzFdICsgZi0+Zm10LnZiaS5jb3VudFsxXQogCQktIHR2bm9ybS0+dmJpc3RhcnRbMV07Ci0JY291bnQgID0gY2xhbXAgKG1heCAoY291bnQwLCBjb3VudDEpLCAxTEwsIChzNjQpIFZCSV9NQVhMSU5FUyk7CisJY291bnQgID0gY2xhbXAgKG1heCAoY291bnQwLCBjb3VudDEpLCAoczY0KSAxLCAoczY0KSBWQklfTUFYTElORVMpOwogCiAJZi0+Zm10LnZiaS5zdGFydFswXSA9IHR2bm9ybS0+dmJpc3RhcnRbMF07CiAJZi0+Zm10LnZiaS5zdGFydFsxXSA9IHR2bm9ybS0+dmJpc3RhcnRbMV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCmluZGV4IDIyMjdjNTYuLjg1ZDg0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCkBAIC02NCwxNCArNjQsMTMgQEAKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ2aWRlbyIpOwogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjb2xvcnNwYWNlX2NvbnYgPSAwOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbG9yc3BhY2VfY29udjsKIG1vZHVsZV9wYXJhbShjb2xvcnNwYWNlX2NvbnYsIHVzaG9ydCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNvbG9yc3BhY2VfY29udiwKLQkJICJcbjxuPiBDb2xvcnNwYWNlIGNvbnZlcnNpb246IgotCQkgIlxuMCA9IGRpc2FibGUiCi0JCSAiXG4xID0gZW5hYmxlIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAwIgotCQkgIlxuIik7CisgICAgICAgICAgICAgICAgICIgQ29sb3JzcGFjZSBjb252ZXJzaW9uOiIKKyAgICAgICAgICAgICAgICAgIlxuICAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSIKKyAgICAgICAgICAgICAgICAgIlxuICBEZWZhdWx0IHZhbHVlIGlzIDAiCisgICAgICAgICAgICAgICAgICk7CiAKICNkZWZpbmUgQUJPVVQgIlY0TC1Ecml2ZXIgZm9yIFZpc2lvbiBDUGlBIGJhc2VkIGNhbWVyYXMiCiAKQEAgLTQwNDIsNyArNDA0MSw3IEBACiAJICAgICAgICJhbGxvd2VkLCBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IG5vdy4gVXNlcnMgc2hvdWxkIGZpeCB0aGUgIgogCSAgICAgICAiYXBwbGljYXRpb25zIGluIGNhc2UgdGhleSBkb24ndCB3b3JrIHdpdGhvdXQgY29udmVyc2lvbiAiCiAJICAgICAgICJyZWVuYWJsZWQgYnkgc2V0dGluZyB0aGUgJ2NvbG9yc3BhY2VfY29udicgbW9kdWxlICIKLQkgICAgICAgInBhcmFtZXRlciB0byAxIik7CisJICAgICAgICJwYXJhbWV0ZXIgdG8gMVxuIik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXByb2NfY3BpYV9jcmVhdGUoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTIuaAppbmRleCA4Mzk0MjgzLi4xNzY0OTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMi5oCkBAIC00NTYsNyArNDU2LDcgQEAKIGludCBjcGlhMl9hbGxvY2F0ZV9idWZmZXJzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKIHZvaWQgY3BpYTJfZnJlZV9idWZmZXJzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKIGxvbmcgY3BpYTJfcmVhZChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwKLQkJY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbm9ibG9jayk7CisJCWNoYXIgX191c2VyICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQsIGludCBub2Jsb2NrKTsKIHVuc2lnbmVkIGludCBjcGlhMl9wb2xsKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLAogCQkJc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpOwogaW50IGNwaWEyX3JlbWFwX2J1ZmZlcihzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhX3BwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfcHAuYwppbmRleCAzMDIxZjIxLi4wYjAwZTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfcHAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfcHAuYwpAQCAtODczLDcgKzg3Myw3IEBACiAJCXBhcnBvcnRfbnJbcGFycG9ydF9wdHIrK10gPSBQUENQSUFfUEFSUE9SVF9OT05FOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBfX3NldHVwKCJjcGlhX3BwPSIsIGNwaWFfcHBfc2V0dXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlCmluZGV4IDMyYTg5NmMuLjZlODY2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvTWFrZWZpbGUKQEAgLTMsNCArMyw0IEBACiAKIG9iai0kKENPTkZJR19WSURFT19DWDI1ODQwKSArPSBjeDI1ODQwLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYwppbmRleCBhNDU0MGU4Li45YTRiODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKQEAgLTE5LDggKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KIAotI2luY2x1ZGUgImN4MjU4NDAuaCIKKyNpbmNsdWRlICJjeDI1ODQwLWNvcmUuaCIKIAogc3RhdGljIGludCBzZXRfYXVkY2xrX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGZyZXEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggYTY1YjNjYy4uYTk2MWJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtMzIsOCArMzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvY3gyNTg0MC5oPgogCi0jaW5jbHVkZSAiY3gyNTg0MC5oIgorI2luY2x1ZGUgImN4MjU4NDAtY29yZS5oIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkNvbmV4YW50IENYMjU4NDAgYXVkaW8vdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlVsZiBFa2x1bmQsIENocmlzIEtlbm5lZHksIEhhbnMgVmVya3VpbCwgVHlsZXIgVHJhZmZvcmQiKTsKQEAgLTY2OCw2ICs2NjksNyBAQAogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKIAogCXN3aXRjaCAoY21kKSB7CiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwpAQCAtNzQ5LDE5ICs3NTEsMjEgQEAKIAkJc3RhdGUtPnJhZGlvID0gMTsKIAkJYnJlYWs7CiAKLQljYXNlIFZJRElPQ19HX0lOUFVUOgotCQkqKGludCAqKWFyZyA9IHN0YXRlLT52aWRfaW5wdXQ7CisJY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKKwkJcm91dGUtPmlucHV0ID0gc3RhdGUtPnZpZF9pbnB1dDsKKwkJcm91dGUtPm91dHB1dCA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQkJcmV0dXJuIHNldF9pbnB1dChjbGllbnQsICooZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0ICopYXJnLCBzdGF0ZS0+YXVkX2lucHV0KTsKKwljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgorCQlyZXR1cm4gc2V0X2lucHV0KGNsaWVudCwgcm91dGUtPmlucHV0LCBzdGF0ZS0+YXVkX2lucHV0KTsKIAotCWNhc2UgVklESU9DX1NfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqaW5wdXQgPSBhcmc7CisJY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKKwkJcm91dGUtPmlucHV0ID0gc3RhdGUtPmF1ZF9pbnB1dDsKKwkJcm91dGUtPm91dHB1dCA9IDA7CisJCWJyZWFrOwogCi0JCXJldHVybiBzZXRfaW5wdXQoY2xpZW50LCBzdGF0ZS0+dmlkX2lucHV0LCBpbnB1dC0+aW5kZXgpOwotCX0KKwljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOgorCQlyZXR1cm4gc2V0X2lucHV0KGNsaWVudCwgc3RhdGUtPnZpZF9pbnB1dCwgcm91dGUtPmlucHV0KTsKIAogCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgogCQlpbnB1dF9jaGFuZ2UoY2xpZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCmluZGV4IGRkNzA2NjQuLjE3MzY5MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCkBAIC0xLDQgKzEsNCBAQAotLyogY3gyNTg0MCBBUEkgaGVhZGVyCisvKiBjeDI1ODQwIGludGVybmFsIEFQSSBoZWFkZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBDaHJpcyBLZW5uZWR5CiAgKgpAQCAtMTcsOCArMTcsOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NYMjU4NDBfSF8KLSNkZWZpbmUgX0NYMjU4NDBfSF8KKyNpZm5kZWYgX0NYMjU4NDBfQ09SRV9IXworI2RlZmluZSBfQ1gyNTg0MF9DT1JFX0hfCiAKIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpAQCAtMzIsNDYgKzMyLDYgQEAKICAgIHByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uLiAqLwogI2RlZmluZSBDWDI1ODQwX0NJRF9FTkFCTEVfUFZSMTUwX1dPUktBUk9VTkQgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSswKQogCi1lbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgewotCS8qIENvbXBvc2l0ZSB2aWRlbyBpbnB1dHMgSW4xLUluOCAqLwotCUNYMjU4NDBfQ09NUE9TSVRFMSA9IDEsCi0JQ1gyNTg0MF9DT01QT1NJVEUyLAotCUNYMjU4NDBfQ09NUE9TSVRFMywKLQlDWDI1ODQwX0NPTVBPU0lURTQsCi0JQ1gyNTg0MF9DT01QT1NJVEU1LAotCUNYMjU4NDBfQ09NUE9TSVRFNiwKLQlDWDI1ODQwX0NPTVBPU0lURTcsCi0JQ1gyNTg0MF9DT01QT1NJVEU4LAotCi0JLyogUy1WaWRlbyBpbnB1dHMgY29uc2lzdCBvZiBvbmUgbHVtYSBpbnB1dCAoSW4xLUluNCkgT1JlZCB3aXRoIG9uZQotCSAgIGNocm9tYSBpbnB1dCAoSW41LUluOCkgKi8KLQlDWDI1ODQwX1NWSURFT19MVU1BMSA9IDB4MTAsCi0JQ1gyNTg0MF9TVklERU9fTFVNQTIgPSAweDIwLAotCUNYMjU4NDBfU1ZJREVPX0xVTUEzID0gMHgzMCwKLQlDWDI1ODQwX1NWSURFT19MVU1BNCA9IDB4NDAsCi0JQ1gyNTg0MF9TVklERU9fQ0hST01BNCA9IDB4NDAwLAotCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTUgPSAweDUwMCwKLQlDWDI1ODQwX1NWSURFT19DSFJPTUE2ID0gMHg2MDAsCi0JQ1gyNTg0MF9TVklERU9fQ0hST01BNyA9IDB4NzAwLAotCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTggPSAweDgwMCwKLQotCS8qIFMtVmlkZW8gYWxpYXNlcyBmb3IgY29tbW9uIGx1bWEvY2hyb21hIGNvbWJpbmF0aW9ucyAqLwotCUNYMjU4NDBfU1ZJREVPMSA9IDB4NTEwLAotCUNYMjU4NDBfU1ZJREVPMiA9IDB4NjIwLAotCUNYMjU4NDBfU1ZJREVPMyA9IDB4NzMwLAotCUNYMjU4NDBfU1ZJREVPNCA9IDB4ODQwLAotfTsKLQotZW51bSBjeDI1ODQwX2F1ZGlvX2lucHV0IHsKLQkvKiBBdWRpbyBpbnB1dHM6IHNlcmlhbCBvciBJbjQtSW44ICovCi0JQ1gyNTg0MF9BVURJT19TRVJJQUwsCi0JQ1gyNTg0MF9BVURJTzQgPSA0LAotCUNYMjU4NDBfQVVESU81LAotCUNYMjU4NDBfQVVESU82LAotCUNYMjU4NDBfQVVESU83LAotCUNYMjU4NDBfQVVESU84LAotfTsKLQogc3RydWN0IGN4MjU4NDBfc3RhdGUgewogCWludCBwdnIxNTBfd29ya2Fyb3VuZDsKIAlpbnQgcmFkaW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtZmlybXdhcmUuYwppbmRleCBlMWE3ODIzLi4xOTU4ZDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWZpcm13YXJlLmMKQEAgLTIwLDM3ICsyMCwzMSBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9jeDI1ODQwLmg+CiAKLSNpbmNsdWRlICJjeDI1ODQwLmgiCisjaW5jbHVkZSAiY3gyNTg0MC1jb3JlLmgiCiAKICNkZWZpbmUgRldGSUxFICJ2NGwtY3gyNTg0MC5mdyIKLSNkZWZpbmUgRldTRU5EIDEwMjQKKworLyoKKyAqIE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4gLSBUaGUgRldTRU5EIHBhcmFtZXRlciBjb250cm9scyB0aGUKKyAqIHNpemUgb2YgdGhlIGZpcm13YXJlIGNodW5rcyBzZW50IGRvd24gdGhlIEkyQyBidXMgdG8gdGhlIGNoaXAuCisgKiBQcmV2aW91c2x5IHRoaXMgaGFkIGJlZW4gc2V0IHRvIDEwMjQgYnV0IHVuZm9ydHVuYXRlbHkgc29tZSBJMkMKKyAqIGltcGxlbWVudGF0aW9ucyBjYW4ndCB0cmFuc2ZlciBkYXRhIGluIHN1Y2ggYmlnIGd1bHBzLgorICogU3BlY2lmaWNhbGx5LCB0aGUgcHZydXNiMiBkcml2ZXIgaGFzIGEgaGFyZCBsaW1pdCBvZiBhcm91bmQgNjAKKyAqIGJ5dGVzLCBkdWUgdG8gdGhlIGVuY2Fwc3VsYXRpb24gdGhlcmUgb2YgSTJDIHRyYWZmaWMgaW50byBVU0IKKyAqIG1lc3NhZ2VzLiAgU28gd2UgaGF2ZSB0byBzaWduaWZpY2FudGx5IHJlZHVjZSB0aGlzIHBhcmFtZXRlci4KKyAqLworI2RlZmluZSBGV1NFTkQgNDgKIAogI2RlZmluZSBGV0RFVih4KSAmKCh4KS0+YWRhcHRlci0+ZGV2KQogCi1zdGF0aWMgaW50IGZhc3RmdyA9IDE7CiBzdGF0aWMgY2hhciAqZmlybXdhcmUgPSBGV0ZJTEU7CiAKLW1vZHVsZV9wYXJhbShmYXN0ZncsIGJvb2wsIDA0NDQpOwogbW9kdWxlX3BhcmFtKGZpcm13YXJlLCBjaGFycCwgMDQ0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0MoZmFzdGZ3LCAiTG9hZCBmaXJtd2FyZSBmYXN0IFswPTEwME1IeiAxPTMzM01IeiAoZGVmYXVsdCldIik7CiBNT0RVTEVfUEFSTV9ERVNDKGZpcm13YXJlLCAiRmlybXdhcmUgaW1hZ2UgW2RlZmF1bHQ6ICIgRldGSUxFICJdIik7CiAKLXN0YXRpYyB2b2lkIHNldF9pMmNfZGVsYXkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRlbGF5KQotewotCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqYWxnb2QgPSBjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YTsKLQotCS8qIFdlIGFyZW4ndCBndWFyYW50ZWVkIHRvIGJlIHVzaW5nIGFsZ29fYml0LAotCSAqIHNvIGF2b2lkIHRoZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UKLQkgKiBhbmQgZGlzYWJsZSB0aGUgJ2Zhc3QgZmlybXdhcmUgbG9hZCcgKi8KLQlpZiAoYWxnb2QpIHsKLQkJYWxnb2QtPnVkZWxheSA9IGRlbGF5OwotCX0gZWxzZSB7Ci0JCWZhc3RmdyA9IDA7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBzdGFydF9md19sb2FkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJLyogRExfQUREUl9MQj0wIERMX0FERFJfSEI9MCAqLwpAQCAtNjAsMTYgKzU0LDEwIEBACiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4ODAzLCAweDBiKTsKIAkvKiBBVVRPX0lOQ19ESVM9MSAqLwogCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDAwMCwgMHgyMCk7Ci0KLQlpZiAoZmFzdGZ3KQotCQlzZXRfaTJjX2RlbGF5KGNsaWVudCwgMyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuZF9md19sb2FkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaWYgKGZhc3RmdykKLQkJc2V0X2kyY19kZWxheShjbGllbnQsIDEwKTsKLQogCS8qIEFVVE9fSU5DX0RJUz0wICovCiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MDAwLCAweDAwKTsKIAkvKiBETF9FTkFCTEU9MCAqLwpAQCAtOTYsMzAgKzg0LDggQEAKIAlpbnQgc2VudDsKIAogCWlmICgoc2VudCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIHNpemUpKSA8IHNpemUpIHsKLQotCQlpZiAoZmFzdGZ3KSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgIjMzM01IeiBpMmMgZmlybXdhcmUgbG9hZCBmYWlsZWRcbiIpOwotCQkJZmFzdGZ3ID0gMDsKLQkJCXNldF9pMmNfZGVsYXkoY2xpZW50LCAxMCk7Ci0KLQkJCWlmIChzZW50ID4gMikgewotCQkJCXUxNiBkbF9hZGRyID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4MDEpIDw8IDg7Ci0JCQkJZGxfYWRkciB8PSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDgwMCk7Ci0JCQkJZGxfYWRkciAtPSBzZW50IC0gMjsKLQkJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4MDEsIGRsX2FkZHIgPj4gOCk7Ci0JCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4ODAwLCBkbF9hZGRyICYgMHhmZik7Ci0JCQl9Ci0KLQkJCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBkYXRhLCBzaXplKSA8IHNpemUpIHsKLQkJCQl2NGxfZXJyKGNsaWVudCwgIjEwME1IeiBpMmMgZmlybXdhcmUgbG9hZCBmYWlsZWRcbiIpOwotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgImZpcm13YXJlIGxvYWQgaTJjIGZhaWx1cmVcbiIpOwotCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCX0KLQorCQl2NGxfZXJyKGNsaWVudCwgImZpcm13YXJlIGxvYWQgaTJjIGZhaWx1cmVcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKaW5kZXggZTk2ZmQxZi4uNTdmZWNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKQEAgLTE5LDggKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KIAotI2luY2x1ZGUgImN4MjU4NDAuaCIKKyNpbmNsdWRlICJjeDI1ODQwLWNvcmUuaCIKIAogc3RhdGljIGludCBvZGRfcGFyaXR5KHU4IGMpCiB7CkBAIC0xNTEsNyArMTUyLDcgQEAKIAljYXNlIFZJRElPQ19HX0ZNVDoKIAl7CiAJCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewotCQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IsIDAsCS8qIDEgKi8KKwkJCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IsIDAsCS8qIDEgKi8KIAkJCTAsIFY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCS8qIDQgKi8KIAkJCVY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1LAkvKiA2ICovCiAJCQkwLCAwLCBWNEwyX1NMSUNFRF9WUFMsIDAsIDAsCS8qIDkgKi8KQEAgLTIzMSw3ICsyMzIsNyBAQAogCQlmb3IgKGkgPSA3OyBpIDw9IDIzOyBpKyspIHsKIAkJCWZvciAoeCA9IDA7IHggPD0gMTsgeCsrKSB7CiAJCQkJc3dpdGNoIChzdmJpLT5zZXJ2aWNlX2xpbmVzWzEteF1baV0pIHsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9COgorCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKIAkJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgpAQCAtMjgyLDcgKzI4Myw3IEBACiAKIAkJc3dpdGNoIChpZDIpIHsKIAkJY2FzZSAxOgotCQkJaWQyID0gVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0I7CisJCQlpZDIgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COwogCQkJYnJlYWs7CiAJCWNhc2UgNDoKIAkJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCmluZGV4IGZmMGY3MjMuLjYzMDI3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCkBAIC0xLDMgKzEsNyBAQAorY29uZmlnIFZJREVPX0NYODhfVlAzMDU0CisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmIERWQl9NVDM1MgorCiBjb25maWcgVklERU9fQ1g4OAogCXRyaXN0YXRlICJDb25leGFudCAyMzg4eCAoYnQ4Nzggc3VjY2Vzc29yKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMKQEAgLTI1LDcgKzI5LDcgQEAKIAogCSAgSXQgb25seSB3b3JrcyB3aXRoIGJvYXJkcyB3aXRoIGZ1bmN0aW9uIDAxIGVuYWJsZWQuCiAJICBUbyBjaGVjayBpZiB5b3VyIGJvYXJkIHN1cHBvcnRzLCB1c2UgbHNwY2kgLW4uCi0JICBJZiBzdXBwb3J0ZWQsIHlvdSBzaG91bGQgc2VlIDE0NzE6ODgwMSBvciAxNDcxOjg4MTEKKwkgIElmIHN1cHBvcnRlZCwgeW91IHNob3VsZCBzZWUgMTRmMTo4ODAxIG9yIDE0ZjE6ODgxMQogCSAgUENJIGRldmljZS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCkBAIC03MywxMCArNzcsMTEgQEAKIAkgIFRoaXMgYWRkcyBEVkItVCBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgTVQzNTIgZGVtb2R1bGF0b3IuCiAKLWNvbmZpZyBWSURFT19DWDg4X1ZQMzA1NAotCXRyaXN0YXRlICJWUC0zMDU0IFNlY29uZGFyeSBJMkMgQnVzIFN1cHBvcnQiCi0JZGVmYXVsdCBtCi0JZGVwZW5kcyBvbiBEVkJfTVQzNTIKK2NvbmZpZyBWSURFT19DWDg4X0RWQl9WUDMwNTQKKwlib29sICJWUC0zMDU0IFNlY29uZGFyeSBJMkMgQnVzIFN1cHBvcnQiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBWSURFT19DWDg4X0RWQl9NVDM1MgorCXNlbGVjdCBWSURFT19DWDg4X1ZQMzA1NAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBEVkItVCBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgTVQzNTIgZGVtb2R1bGF0b3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKaW5kZXggNjQ4MmI5YS4uMGRjZDA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQpAQCAtOCw5ICs4LDkgQEAKIG9iai0kKENPTkZJR19WSURFT19DWDg4X0FMU0EpICs9IGN4ODgtYWxzYS5vCiBvYmotJChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpICs9IGN4ODgtdnAzMDU0LWkyYy5vCiAKLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKIAogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX1ZJREVPX0JVRl9EVkIpICs9IC1ESEFWRV9WSURFT19CVUZfRFZCPTEKIGV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfQ1gyMjcwMikgICArPSAtREhBVkVfQ1gyMjcwMj0xCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKaW5kZXggZjlkODdiOC4uMzIwYjNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwpAQCAtNjE2LDcgKzYxNiw3IEBACiAgKiBPbmx5IGJvYXJkcyB3aXRoIGVlcHJvbSBhbmQgYnl0ZSAxIGF0IGVlcHJvbT0xIGhhdmUgaXQKICAqLwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4OF9hdWRpb19wY2lfdGJsW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4OF9hdWRpb19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7MHgxNGYxLDB4ODgwMSxQQ0lfQU5ZX0lELFBDSV9BTllfSUQsMCwwLDB9LAogCXsweDE0ZjEsMHg4ODExLFBDSV9BTllfSUQsUENJX0FOWV9JRCwwLDAsMH0sCiAJezAsIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IGM3MDQyY2YuLmY4MDE1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtNTY0LDcgKzU2NCw3IEBACiAJfSwKIAlbQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gInBjSERUViBIRDMwMDAgSERUViIsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RIT01TT05fRFRUNzYxMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEhPTVNPTl9EVFQ3NjFYLAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggMmMzZDlmMS4uZTEwOTJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtMTQ2LDkgKzE0NiwxMSBAQAogCQlmaWVsZHMrKzsKIAogCS8qIGVzdGltYXRlIHJpc2MgbWVtOiB3b3JzdCBjYXNlIGlzIG9uZSB3cml0ZSBwZXIgcGFnZSBib3JkZXIgKwotCSAgIG9uZSB3cml0ZSBwZXIgc2NhbiBsaW5lICsgc3luY3MgKyBqdW1wIChhbGwgMiBkd29yZHMpICovCi0JaW5zdHJ1Y3Rpb25zICA9IChicGwgKiBsaW5lcyAqIGZpZWxkcykgLyBQQUdFX1NJWkUgKyBsaW5lcyAqIGZpZWxkczsKLQlpbnN0cnVjdGlvbnMgKz0gMyArIDQ7CisJICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKyBzeW5jcyArIGp1bXAgKGFsbCAyIGR3b3JkcykuICBQYWRkaW5nCisJICAgY2FuIGNhdXNlIG5leHQgYnBsIHRvIHN0YXJ0IGNsb3NlIHRvIGEgcGFnZSBib3JkZXIuICBGaXJzdCBETUEKKwkgICByZWdpb24gbWF5IGJlIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgKi8KKwlpbnN0cnVjdGlvbnMgID0gZmllbGRzICogKDEgKyAoKGJwbCArIHBhZGRpbmcpICogbGluZXMpIC8gUEFHRV9TSVpFICsgbGluZXMpOworCWluc3RydWN0aW9ucyArPSAyOwogCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLHJpc2MsaW5zdHJ1Y3Rpb25zKjgpKSA8IDApCiAJCXJldHVybiByYzsKIApAQCAtMTc2LDkgKzE3OCwxMSBAQAogCWludCByYzsKIAogCS8qIGVzdGltYXRlIHJpc2MgbWVtOiB3b3JzdCBjYXNlIGlzIG9uZSB3cml0ZSBwZXIgcGFnZSBib3JkZXIgKwotCSAgIG9uZSB3cml0ZSBwZXIgc2NhbiBsaW5lICsgc3luY3MgKyBqdW1wIChhbGwgMiBkd29yZHMpICovCi0JaW5zdHJ1Y3Rpb25zICA9IChicGwgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lczsKLQlpbnN0cnVjdGlvbnMgKz0gMyArIDQ7CisJICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKyBzeW5jcyArIGp1bXAgKGFsbCAyIGR3b3JkcykuICBIZXJlCisJICAgdGhlcmUgaXMgbm8gcGFkZGluZyBhbmQgbm8gc3luYy4gIEZpcnN0IERNQSByZWdpb24gbWF5IGJlIHNtYWxsZXIKKwkgICB0aGFuIFBBR0VfU0laRSAqLworCWluc3RydWN0aW9ucyAgPSAxICsgKGJwbCAqIGxpbmVzKSAvIFBBR0VfU0laRSArIGxpbmVzOworCWluc3RydWN0aW9ucyArPSAxOwogCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLHJpc2MsaW5zdHJ1Y3Rpb25zKjgpKSA8IDApCiAJCXJldHVybiByYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBmMGVhOWI1Li4zNjE5YTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMzcyLDcgKzM3Miw3IEBACiBzdGF0aWMgc3RydWN0IG9yNTExMzJfY29uZmlnIHBjaGR0dl9oZDMwMDAgPSB7CiAJLmRlbW9kX2FkZHJlc3MgICAgPSAweDE1LAogCS5wbGxfYWRkcmVzcyAgICAgID0gMHg2MSwKLQkucGxsX2Rlc2MgICAgICAgICA9ICZkdmJfcGxsX3Rob21zb25fZHR0NzYxMCwKKwkucGxsX2Rlc2MgICAgICAgICA9ICZkdmJfcGxsX3Rob21zb25fZHR0NzYxeCwKIAkuc2V0X3RzX3BhcmFtcyAgICA9IG9yNTExMzJfc2V0X3RzX3BhcmFtLAogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggNzJhNDE3Yi4uNjk0ZDFkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC0zNSw4ICszNSwxMCBAQAogI2luY2x1ZGUgImN4ODguaCIKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAvKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNlbmRpZgogCiBNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKaW5kZXggNWE3OTNhZS4uZGZiMTViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZJREVPX0VNMjhYWAogCXRyaXN0YXRlICJFbXBpYSBFTTI4MDAvMjgyMC8yODQwIFVTQiB2aWRlbyBjYXB0dXJlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVVNCICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBVU0IgJiYgSTJDCiAJc2VsZWN0IFZJREVPX0JVRgogCXNlbGVjdCBWSURFT19UVU5FUgogCXNlbGVjdCBWSURFT19UVkVFUFJPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQppbmRleCBkYTQ1N2EwLi44MjZkMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKIAogb2JqLSQoQ09ORklHX1ZJREVPX0VNMjhYWCkgKz0gZW0yOHh4Lm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IGY2MmZkNzA2Yi4uM2JhMzQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTE1MSw4ICsxNTEsOCBAQAogCQl9LHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IDIsCi0JCQkuYW11eCAgICAgPSBNU1BfSU5QVVQoTVNQX0lOX1NDQVJUXzEsIE1TUF9JTl9UVU5FUl8xLAotCQkJCQlNU1BfRFNQX09VVF9TQ0FSVCwgTVNQX0RTUF9PVVRfU0NBUlQpLAorCQkJLmFtdXggICAgID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVDEsIE1TUF9JTl9UVU5FUjEsCisJCQkJCU1TUF9EU1BfSU5fU0NBUlQsIE1TUF9EU1BfSU5fU0NBUlQpLAogCQl9fSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfTVNJX1ZPWF9VU0JfMl0gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IGRmYmEzM2QuLmNmN2NkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJaWYgKGRldi0+aTJzX3NwZWVkKQogCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRLCAmZGV2LT5pMnNfc3BlZWQpOwogCQlyb3V0ZS5pbnB1dCA9IGRldi0+Y3RsX2FpbnB1dDsKLQkJcm91dGUub3V0cHV0ID0gTVNQX09VVFBVVChNU1BfT1VUX1NDQVJUMV9EQSk7CisJCXJvdXRlLm91dHB1dCA9IE1TUF9PVVRQVVQoTVNQX1NDX0lOX0RTUF9TQ0FSVDEpOwogCQkvKiBOb3RlOiB0aGlzIGlzIG1zcDM0MDAgc3BlY2lmaWMgKi8KIAkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKIAkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKQEAgLTExNDEsMjYgKzExNDEsMTYgQEAKIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCWludCBzdGF0dXMgPSAwOwogCiAJCWlmICgwICE9IHQtPmluZGV4KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwogCQlzdHJjcHkodC0+bmFtZSwgIlR1bmVyIik7Ci0JCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07Ci0JCXQtPnJhbmdlaGlnaCA9IDB4ZmZmZmZmZmZVTDsJLyogRklYTUU6IHNldCBjb3JyZWN0IHJhbmdlICovCi0vKgkJdC0+c2lnbmFsID0gMHhmZmZmOyovCi0vKgkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LFZJRElPQ19HX1RVTkVSLHQpOyovCi0JCS8qIE5vIHdheSB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoPyAqLwogCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfR0VUX1NUQVRVUywKLQkJCQkJJnN0YXR1cyk7CisJCS8qIGxldCBjbGllbnRzIGZpbGwgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGlzIHN0cnVjdCAqLworCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIGNtZCwgdCk7CiAJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQkJdC0+c2lnbmFsID0KLQkJCShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSAhPSAwID8gMHhmZmZmIDogMDsKLQogCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPX0dfVFVORVI6IHNpZ25hbD0leCwgYWZjPSV4XG4iLCB0LT5zaWduYWwsCiAJCQkJdC0+YWZjKTsKIAkJcmV0dXJuIDA7CkBAIC0xMTY4LDI2ICsxMTU4LDEzIEBACiAJY2FzZSBWSURJT0NfU19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCQlpbnQgc3RhdHVzID0gMDsKIAogCQlpZiAoMCAhPSB0LT5pbmRleCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7Ci0JCXN0cmNweSh0LT5uYW1lLCAiVHVuZXIiKTsKLQkJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STTsKLQkJdC0+cmFuZ2VoaWdoID0gMHhmZmZmZmZmZlVMOwkvKiBGSVhNRTogc2V0IGNvcnJlY3QgcmFuZ2UgKi8KLS8qCQl0LT5zaWduYWwgPSAweGZmZmY7ICovCi0JCS8qIE5vIHdheSB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoPyAqLwogCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfR0VUX1NUQVRVUywKLQkJCQkJJnN0YXR1cyk7CisJCS8qIGxldCBjbGllbnRzIGhhbmRsZSB0aGlzICovCisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgY21kLCB0KTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQl0LT5zaWduYWwgPQotCQkJKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpICE9IDAgPyAweGZmZmYgOiAwOwotCi0JCWVtMjh4eF92aWRlb2RiZygiVklESU9fU19UVU5FUjogc2lnbmFsPSV4LCBhZmM9JXhcbiIsCi0JCQkJdC0+c2lnbmFsLCB0LT5hZmMpOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CkBAIC0xNTk5LDggKzE1NzYsOCBAQAogCWVyckNvZGUgPSBlbTI4eHhfY29uZmlnKGRldik7CiAJaWYgKGVyckNvZGUpIHsKIAkJZW0yOHh4X2VycmRldigiZXJyb3IgY29uZmlndXJpbmcgZGV2aWNlXG4iKTsKLQkJa2ZyZWUoZGV2KTsKIAkJZW0yOHh4X2RldnVzZWQmPX4oMTw8ZGV2LT5kZXZubyk7CisJCWtmcmVlKGRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTYyNiw4ICsxNjAzLDggQEAKIAlkZXYtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoTlVMTCA9PSBkZXYtPnZkZXYpIHsKIAkJZW0yOHh4X2VycmRldigiY2Fubm90IGFsbG9jYXRlIHZpZGVvX2RldmljZS5cbiIpOwotCQlrZnJlZShkZXYpOwogCQllbTI4eHhfZGV2dXNlZCY9figxPDxkZXYtPmRldm5vKTsKKwkJa2ZyZWUoZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNjM1LDggKzE2MTIsOCBAQAogCWlmIChOVUxMID09IGRldi0+dmJpX2RldikgewogCQllbTI4eHhfZXJyZGV2KCJjYW5ub3QgYWxsb2NhdGUgdmlkZW9fZGV2aWNlLlxuIik7CiAJCWtmcmVlKGRldi0+dmRldik7Ci0JCWtmcmVlKGRldik7CiAJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PGRldi0+ZGV2bm8pOworCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE2NzMsOCArMTY1MCw4IEBACiAJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldik7Ci0JCWtmcmVlKGRldik7CiAJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PGRldi0+ZGV2bm8pOworCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTE2ODUsOCArMTY2Miw4IEBACiAJCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZiaV9kZXYpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOwotCQlrZnJlZShkZXYpOwogCQllbTI4eHhfZGV2dXNlZCY9figxPDxkZXYtPmRldm5vKTsKKwkJa2ZyZWUoZGV2KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKCJyZWdpc3RlcmVkIFZCSVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiZmY3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgVVNCX0VUNjFYMjUxCisJdHJpc3RhdGUgIlVTQiBFVDYxWFsxMl01MSBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDEKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gRXRvbXMgRVQ2MVgxNTEKKwkgIG9yIEVUNjFYMjUxIFBDIENhbWVyYSBDb250cm9sbGVycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvZXQ2MXgyNTEudHh0PiBmb3IgbW9yZSBpbmZvLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV0NjF4MjUxLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCA5NWJhY2Y0Li43ZTY2ZDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtNDExLDYgKzQxMSw5IEBACiAJY2FzZSBJMkNfSFdfQl9CVDg0ODoKIAkJcHJvYmUgPSBwcm9iZV9idHR2OwogCQlicmVhazsKKwljYXNlIEkyQ19IV19CX0NYMjM0MVg6CisJCXByb2JlID0gcHJvYmVfYnR0djsKKwkJYnJlYWs7CiAJY2FzZSBJMkNfSFdfU0FBNzEzNDoKIAkJcHJvYmUgPSBwcm9iZV9zYWE3MTM0OwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwppbmRleCBjNDBlOGJhLi5iODA2OTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC0yNzksMjAgKzI3OSw4IEBACiAJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTMsIHN0YXRlLT5hY2IpOwogCiAJLyogU2V0cyBJMlMgc3BlZWQgMCA9IDEuMDI0IE1icHMsIDEgPSAyLjA0OCBNYnBzICovCi0JbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4NDAsIHN0YXRlLT5pMnNfbW9kZSk7Ci19Ci0KLXZvaWQgbXNwX3NldF9tdXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJtdXRlIGF1ZGlvXG4iKTsKLQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDAwLCAwKTsKLQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA3LCAxKTsKLQlpZiAoc3RhdGUtPmhhc19zY2FydDJfb3V0X3ZvbHVtZSkKLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDA0MCwgMSk7Ci0JaWYgKHN0YXRlLT5oYXNfaGVhZHBob25lcykKLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwNiwgMCk7CisJaWYgKHN0YXRlLT5oYXNfaTJzX2NvbmYpCisJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDQwLCBzdGF0ZS0+aTJzX21vZGUpOwogfQogCiB2b2lkIG1zcF9zZXRfYXVkaW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTMwMCwxNyArMjg4LDE5IEBACiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgYmFsID0gMCwgYmFzcywgdHJlYmxlLCBsb3VkbmVzczsKIAlpbnQgdmFsID0gMDsKKwlpbnQgcmVhbGx5bXV0ZWQgPSBzdGF0ZS0+bXV0ZWQgfCBzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzczsKIAotCWlmICghc3RhdGUtPm11dGVkKQorCWlmICghcmVhbGx5bXV0ZWQpCiAJCXZhbCA9IChzdGF0ZS0+dm9sdW1lICogMHg3ZiAvIDY1NTM1KSA8PCA4OwogCi0JdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIm11dGU9JXMgdm9sdW1lPSVkXG4iLAotCQlzdGF0ZS0+bXV0ZWQgPyAib24iIDogIm9mZiIsIHN0YXRlLT52b2x1bWUpOworCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJtdXRlPSVzIHNjYW5uaW5nPSVzIHZvbHVtZT0lZFxuIiwKKwkJc3RhdGUtPm11dGVkID8gIm9uIiA6ICJvZmYiLCBzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzcyA/ICJ5ZXMiIDogIm5vIiwKKwkJc3RhdGUtPnZvbHVtZSk7CiAKIAltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDAwLCB2YWwpOwotCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDcsIHN0YXRlLT5tdXRlZCA/IDB4MSA6ICh2YWwgfCAweDEpKTsKKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA3LCByZWFsbHltdXRlZCA/IDB4MSA6ICh2YWwgfCAweDEpKTsKIAlpZiAoc3RhdGUtPmhhc19zY2FydDJfb3V0X3ZvbHVtZSkKLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDA0MCwgc3RhdGUtPm11dGVkID8gMHgxIDogKHZhbCB8IDB4MSkpOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDQwLCByZWFsbHltdXRlZCA/IDB4MSA6ICh2YWwgfCAweDEpKTsKIAlpZiAoc3RhdGUtPmhhc19oZWFkcGhvbmVzKQogCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA2LCB2YWwpOwogCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQpAQCAtMzQ2LDcgKzMzNiw2IEBACiAKIAlpZiAoTlVMTCA9PSBzdGF0ZS0+a3RocmVhZCkKIAkJcmV0dXJuOwotCW1zcF9zZXRfbXV0ZShjbGllbnQpOwogCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOwogCXN0YXRlLT5yZXN0YXJ0ID0gMTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0YXRlLT53cSk7CkBAIC0zNzQsMTkgKzM2MywxNSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBtc3BfbW9kZV92NGwyX3RvX3Y0bDEoaW50IHJ4c3ViY2hhbnMpCitzdGF0aWMgaW50IG1zcF9tb2RlX3Y0bDJfdG9fdjRsMShpbnQgcnhzdWJjaGFucywgaW50IGF1ZG1vZGUpCiB7Ci0JaW50IG1vZGUgPSAwOwotCi0JaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TVEVSRU8pCi0JCW1vZGUgfD0gVklERU9fU09VTkRfU1RFUkVPOwotCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpCi0JCW1vZGUgfD0gVklERU9fU09VTkRfTEFORzIgfCBWSURFT19TT1VORF9TVEVSRU87Ci0JaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9MQU5HMSkKLQkJbW9kZSB8PSBWSURFT19TT1VORF9MQU5HMSB8IFZJREVPX1NPVU5EX1NURVJFTzsKLQlpZiAobW9kZSA9PSAwKQotCQltb2RlIHw9IFZJREVPX1NPVU5EX01PTk87Ci0JcmV0dXJuIG1vZGU7CisJaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfTU9OTykKKwkJcmV0dXJuIFZJREVPX1NPVU5EX01PTk87CisJaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQorCQlyZXR1cm4gVklERU9fU09VTkRfU1RFUkVPOworCWlmIChhdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMikKKwkJcmV0dXJuIFZJREVPX1NPVU5EX0xBTkcyOworCXJldHVybiBWSURFT19TT1VORF9MQU5HMTsKIH0KIAogc3RhdGljIGludCBtc3BfbW9kZV92NGwxX3RvX3Y0bDIoaW50IG1vZGUpCkBAIC02MDUsNyArNTkwLDcgQEAKIAkJCWJyZWFrOwogCQlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkKIAkJCW1zcF9kZXRlY3Rfc3RlcmVvKGNsaWVudCk7Ci0JCXZhLT5tb2RlID0gbXNwX21vZGVfdjRsMl90b192NGwxKHN0YXRlLT5yeHN1YmNoYW5zKTsKKwkJdmEtPm1vZGUgPSBtc3BfbW9kZV92NGwyX3RvX3Y0bDEoc3RhdGUtPnJ4c3ViY2hhbnMsIHN0YXRlLT5hdWRtb2RlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02MjAsNyArNjA1LDggQEAKIAkJc3RhdGUtPnRyZWJsZSA9IHZhLT50cmVibGU7CiAJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKIAotCQlpZiAodmEtPm1vZGUgIT0gMCAmJiBzdGF0ZS0+cmFkaW8gPT0gMCkgeworCQlpZiAodmEtPm1vZGUgIT0gMCAmJiBzdGF0ZS0+cmFkaW8gPT0gMCAmJgorCQkgICAgc3RhdGUtPmF1ZG1vZGUgIT0gbXNwX21vZGVfdjRsMV90b192NGwyKHZhLT5tb2RlKSkgewogCQkJc3RhdGUtPmF1ZG1vZGUgPSBtc3BfbW9kZV92NGwxX3RvX3Y0bDIodmEtPm1vZGUpOwogCQkJbXNwX3NldF9hdWRtb2RlKGNsaWVudCk7CiAJCX0KQEAgLTY4NywyMSArNjczLDIzIEBACiAJCWludCBzY19pbiA9IHJ0LT5pbnB1dCAmIDB4NzsKIAkJaW50IHNjMV9vdXQgPSBydC0+b3V0cHV0ICYgMHhmOwogCQlpbnQgc2MyX291dCA9IChydC0+b3V0cHV0ID4+IDQpICYgMHhmOwotCQl1MTYgdmFsOworCQl1MTYgdmFsLCByZWc7CiAKKwkJaWYgKHN0YXRlLT5yb3V0aW5nLmlucHV0ID09IHJ0LT5pbnB1dCAmJgorCQkgICAgc3RhdGUtPnJvdXRpbmcub3V0cHV0ID09IHJ0LT5vdXRwdXQpCisJCQlicmVhazsKIAkJc3RhdGUtPnJvdXRpbmcgPSAqcnQ7Ci0JCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKSB7Ci0JCQl2YWwgPSBtc3BfcmVhZF9kZW0oY2xpZW50LCAweDMwKSAmIH4weDEwMDsKLQkJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDMwLCB2YWwgfCAodHVuZXIgPyAweDEwMCA6IDApKTsKLQkJfSBlbHNlIHsKLQkJCXZhbCA9IG1zcF9yZWFkX2RlbShjbGllbnQsIDB4YmIpICYgfjB4MTAwOwotCQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4YmIsIHZhbCB8ICh0dW5lciA/IDB4MTAwIDogMCkpOwotCQl9CiAJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzY19pbiwgMCk7CiAJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzYzFfb3V0LCAxKTsKIAkJbXNwX3NldF9zY2FydChjbGllbnQsIHNjMl9vdXQsIDIpOwogCQltc3Bfc2V0X2F1ZG1vZGUoY2xpZW50KTsKLQkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CisJCXJlZyA9IChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKSA/IDB4MzAgOiAweGJiOworCQl2YWwgPSBtc3BfcmVhZF9kZW0oY2xpZW50LCByZWcpOworCQlpZiAodHVuZXIgIT0gKCh2YWwgPj4gOCkgJiAxKSkgeworCQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIHJlZywgKHZhbCAmIH4weDEwMCkgfCAodHVuZXIgPDwgOCkpOworCQkJLyogd2FrZSB0aHJlYWQgd2hlbiBhIG5ldyB0dW5lciBpbnB1dCBpcyBjaG9zZW4gKi8KKwkJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOworCQl9CiAJCWJyZWFrOwogCX0KIApAQCAtNzE1LDcgKzcwMyw3IEBACiAJCQltc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOwogCQl2dC0+YXVkbW9kZSAgICA9IHN0YXRlLT5hdWRtb2RlOwogCQl2dC0+cnhzdWJjaGFucyA9IHN0YXRlLT5yeHN1YmNoYW5zOwotCQl2dC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CisJCXZ0LT5jYXBhYmlsaXR5IHw9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CiAJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOwogCQlicmVhazsKIAl9CkBAIC03MjYsNiArNzE0LDggQEAKIAogCQlpZiAoc3RhdGUtPnJhZGlvKSAgLyogVE9ETzogYWRkIG1vbm8vc3RlcmVvIHN1cHBvcnQgZm9yIHJhZGlvICovCiAJCQlicmVhazsKKwkJaWYgKHN0YXRlLT5hdWRtb2RlID09IHZ0LT5hdWRtb2RlKQorCQkJYnJlYWs7CiAJCXN0YXRlLT5hdWRtb2RlID0gdnQtPmF1ZG1vZGU7CiAJCS8qIG9ubHkgc2V0IGF1ZG1vZGUgKi8KIAkJbXNwX3NldF9hdWRtb2RlKGNsaWVudCk7CkBAIC04ODcsNyArODc3LDcgQEAKIAogCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOwogCXN0YXRlLT52NGwyX3N0ZCA9IFY0TDJfU1REX05UU0M7Ci0Jc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7CisJc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCXN0YXRlLT52b2x1bWUgPSA1ODg4MDsJLyogMGRiIGdhaW4gKi8KIAlzdGF0ZS0+YmFsYW5jZSA9IDMyNzY4OwkvKiAwZGIgZ2FpbiAqLwogCXN0YXRlLT5iYXNzID0gMzI3Njg7CkBAIC05MzEsMTMgKzkyMSwxNiBAQAogCXN0YXRlLT5oYXNfcmFkaW8gPSBtc3BfcmV2aXNpb24gPj0gJ0cnOwogCS8qIEhhcyBoZWFkcGhvbmVzIG91dHB1dDogbm90IGZvciBzdHJpcHBlZCBkb3duIHByb2R1Y3RzICovCiAJc3RhdGUtPmhhc19oZWFkcGhvbmVzID0gbXNwX3Byb2RfbG8gPCA1OworCS8qIEhhcyBzY2FydDIgaW5wdXQ6IG5vdCBpbiBzdHJpcHBlZCBkb3duIHByb2R1Y3RzIG9mIHRoZSAnMycgZmFtaWx5ICovCisJc3RhdGUtPmhhc19zY2FydDIgPSBtc3BfZmFtaWx5ID49IDQgfHwgbXNwX3Byb2RfbG8gPCA3OworCS8qIEhhcyBzY2FydDMgaW5wdXQ6IG5vdCBpbiBzdHJpcHBlZCBkb3duIHByb2R1Y3RzIG9mIHRoZSAnMycgZmFtaWx5ICovCisJc3RhdGUtPmhhc19zY2FydDMgPSBtc3BfZmFtaWx5ID49IDQgfHwgbXNwX3Byb2RfbG8gPCA1OwogCS8qIEhhcyBzY2FydDQgaW5wdXQ6IG5vdCBpbiBwcmUgRCByZXZpc2lvbnMsIG5vdCBpbiBzdHJpcHBlZCBEIHJldnMgKi8KIAlzdGF0ZS0+aGFzX3NjYXJ0NCA9IG1zcF9mYW1pbHkgPj0gNCB8fCAobXNwX3JldmlzaW9uID49ICdEJyAmJiBtc3BfcHJvZF9sbyA8IDUpOwotCS8qIEhhcyBzY2FydDIgYW5kIHNjYXJ0MyBpbnB1dHMgYW5kIHNjYXJ0MiBvdXRwdXQ6IG5vdCBpbiBzdHJpcHBlZAotCSAgIGRvd24gcHJvZHVjdHMgb2YgdGhlICczJyBmYW1pbHkgKi8KLQlzdGF0ZS0+aGFzX3NjYXJ0MjNfaW5fc2NhcnQyX291dCA9IG1zcF9mYW1pbHkgPj0gNCB8fCBtc3BfcHJvZF9sbyA8IDU7CisJLyogSGFzIHNjYXJ0MiBvdXRwdXQ6IG5vdCBpbiBzdHJpcHBlZCBkb3duIHByb2R1Y3RzIG9mIHRoZSAnMycgZmFtaWx5ICovCisJc3RhdGUtPmhhc19zY2FydDJfb3V0ID0gbXNwX2ZhbWlseSA+PSA0IHx8IG1zcF9wcm9kX2xvIDwgNTsKIAkvKiBIYXMgc2NhcnQyIGEgdm9sdW1lIGNvbnRyb2w/IE5vdCBpbiBwcmUtRCByZXZpc2lvbnMuICovCi0Jc3RhdGUtPmhhc19zY2FydDJfb3V0X3ZvbHVtZSA9IG1zcF9yZXZpc2lvbiA+ICdDJyAmJiBzdGF0ZS0+aGFzX3NjYXJ0MjNfaW5fc2NhcnQyX291dDsKKwlzdGF0ZS0+aGFzX3NjYXJ0Ml9vdXRfdm9sdW1lID0gbXNwX3JldmlzaW9uID4gJ0MnICYmIHN0YXRlLT5oYXNfc2NhcnQyX291dDsKIAkvKiBIYXMgYSBjb25maWd1cmFibGUgaTJzIG91dD8gKi8KIAlzdGF0ZS0+aGFzX2kyc19jb25mID0gbXNwX3JldmlzaW9uID49ICdHJyAmJiBtc3BfcHJvZF9sbyA8IDc7CiAJLyogSGFzIHN1Yndvb2ZlciBvdXRwdXQ6IG5vdCBpbiBwcmUtRCByZXZzIGFuZCBub3QgaW4gc3RyaXBwZWQgZG93biBwcm9kdWN0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5oCmluZGV4IDE5NDA3NDguLjRlNDUxMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmgKQEAgLTU0LDggKzU0LDEwIEBACiAJdTggaGFzX3JhZGlvOwogCXU4IGhhc19oZWFkcGhvbmVzOwogCXU4IGhhc19udHNjX2pwX2RfazM7CisJdTggaGFzX3NjYXJ0MjsKKwl1OCBoYXNfc2NhcnQzOwogCXU4IGhhc19zY2FydDQ7Ci0JdTggaGFzX3NjYXJ0MjNfaW5fc2NhcnQyX291dDsKKwl1OCBoYXNfc2NhcnQyX291dDsKIAl1OCBoYXNfc2NhcnQyX291dF92b2x1bWU7CiAJdTggaGFzX2kyc19jb25mOwogCXU4IGhhc19zdWJ3b29mZXI7CkBAIC04Myw2ICs4NSw3IEBACiAJaW50IHZvbHVtZSwgbXV0ZWQ7CiAJaW50IGJhbGFuY2UsIGxvdWRuZXNzOwogCWludCBiYXNzLCB0cmVibGU7CisJaW50IHNjYW5faW5fcHJvZ3Jlc3M7CiAKIAkvKiB0aHJlYWQgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAqa3RocmVhZDsKQEAgLTk4LDcgKzEwMSw2IEBACiBpbnQgbXNwX3JlYWRfZHNwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhZGRyKTsKIGludCBtc3BfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiB2b2lkIG1zcF9zZXRfc2NhcnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGluLCBpbnQgb3V0KTsKLXZvaWQgbXNwX3NldF9tdXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogdm9pZCBtc3Bfc2V0X2F1ZGlvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogaW50IG1zcF9zbGVlcChzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSwgaW50IHRpbWVvdXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCmluZGV4IGMzOTg0ZWEuLjYzM2ExMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBhLCBzcmMpOwogCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGIsIHNyYyk7CiAJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwYywgc3JjKTsKLQlpZiAoc3RhdGUtPmhhc19zY2FydDIzX2luX3NjYXJ0Ml9vdXQpCisJaWYgKHN0YXRlLT5oYXNfc2NhcnQyX291dCkKIAkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDA0MSwgc3JjKTsKIH0KIApAQCAtMjI4LDYgKzIyOCw3IEBACiAJY2hhciAqbW9kZXN0ciA9IChzdGF0ZS0+YXVkbW9kZSA+PSAwICYmIHN0YXRlLT5hdWRtb2RlIDwgNSkgPwogCQlzdHJtb2RlW3N0YXRlLT5hdWRtb2RlXSA6ICJ1bmtub3duIjsKIAlpbnQgc3JjID0gMDsJLyogY2hhbm5lbCBzb3VyY2U6IEZNL0FNLCBuaWNhbSBvciBTQ0FSVCAqLworCWludCBhdWRtb2RlID0gc3RhdGUtPmF1ZG1vZGU7CiAKIAlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkgewogCQkvKiB0aGlzIG1ldGhvZCB3b3VsZCBicmVhayBldmVyeXRoaW5nLCBsZXQncyBtYWtlIHN1cmUKQEAgLTIzOSwxMSArMjQwLDI5IEBACiAJCXJldHVybjsKIAl9CiAKKwkvKiBOb3RlOiBmb3IgdGhlIEMgYW5kIEQgcmV2cyBubyBOVFNDIHN0ZXJlbyArIFNBUCBpcyBwb3NzaWJsZSBhcworCSAgIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IFNBUC4gU28gdGhlIHJ4c3ViY2hhbnMgY29tYmluYXRpb24KKwkgICBvZiBTVEVSRU8gfCBMQU5HMiBkb2VzIG5vdCBvY2N1ci4gKi8KKworCS8qIHN3aXRjaCB0byBtb25vIGlmIG9ubHkgbW9ubyBpcyBhdmFpbGFibGUgKi8KKwlpZiAoc3RhdGUtPnJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfTU9OTykKKwkJYXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCS8qIGlmIGJpbGluZ3VhbCAqLworCWVsc2UgaWYgKHN0YXRlLT5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpIHsKKwkJLyogYW5kIG1vbm8gb3Igc3RlcmVvLCB0aGVuIGZhbGxiYWNrIHRvIGxhbmcxICovCisJCWlmIChhdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9NT05PIHx8CisJCSAgICBhdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pCisJCQlhdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOworCX0KKwkvKiBpZiBzdGVyZW8sIGFuZCBhdWRtb2RlIGlzIG5vdCBtb25vLCB0aGVuIHN3aXRjaCB0byBzdGVyZW8gKi8KKwllbHNlIGlmIChhdWRtb2RlICE9IFY0TDJfVFVORVJfTU9ERV9NT05PKQorCQlhdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwogCS8qIHN3aXRjaCBkZW1vZHVsYXRvciAqLwogCXN3aXRjaCAoc3RhdGUtPm1vZGUpIHsKIAljYXNlIE1TUF9NT0RFX0ZNX1RFUlJBOgogCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiRk0gc2V0X2F1ZG1vZGU6ICVzXG4iLCBtb2Rlc3RyKTsKLQkJc3dpdGNoIChzdGF0ZS0+YXVkbW9kZSkgeworCQlzd2l0Y2ggKGF1ZG1vZGUpIHsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgogCQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwZSwgMHgzMDAxKTsKIAkJCWJyZWFrOwpAQCAtMjU3LDcgKzI3Niw3IEBACiAJCWJyZWFrOwogCWNhc2UgTVNQX01PREVfRk1fU0FUOgogCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiU0FUIHNldF9hdWRtb2RlOiAlc1xuIiwgbW9kZXN0cik7Ci0JCXN3aXRjaCAoc3RhdGUtPmF1ZG1vZGUpIHsKKwkJc3dpdGNoIChhdWRtb2RlKSB7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CiAJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNSkpOwogCQkJYnJlYWs7CkBAIC0yOTYsNyArMzE1LDggQEAKIAl9CiAKIAkvKiBzd2l0Y2ggYXVkaW8gKi8KLQlzd2l0Y2ggKHN0YXRlLT5hdWRtb2RlKSB7CisJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInNldCBhdWRtb2RlICVkXG4iLCBhdWRtb2RlKTsKKwlzd2l0Y2ggKGF1ZG1vZGUpIHsKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CiAJCXNyYyB8PSAweDAwMjA7CkBAIC0zMTQsMTAgKzMzNCw2IEBACiAJCQlzcmMgPSAweDAwMzA7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQkvKiBzd2l0Y2ggdG8gc3RlcmVvIGZvciBzdGVyZW8gdHJhbnNtaXNzaW9uLCBvdGhlcndpc2UKLQkJICAga2VlcCBmaXJzdCBsYW5ndWFnZSAqLwotCQlpZiAoc3RhdGUtPnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TVEVSRU8pCi0JCQlzcmMgfD0gMHgwMDIwOwogCQlicmVhazsKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKIAkJc3JjIHw9IDB4MDAxMDsKQEAgLTM2Nyw3ICszODMsNyBAQAogCQlpZiAodmFsID4gMzI3NjcpCiAJCQl2YWwgLT0gNjU1MzY7CiAJCXY0bF9kYmcoMiwgbXNwX2RlYnVnLCBjbGllbnQsICJzdGVyZW8gZGV0ZWN0IHJlZ2lzdGVyOiAlZFxuIiwgdmFsKTsKLQkJaWYgKHZhbCA+IDQwOTYpIHsKKwkJaWYgKHZhbCA+IDgxOTIpIHsKIAkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJCX0gZWxzZSBpZiAodmFsIDwgLTQwOTYpIHsKIAkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwpAQCAtNDY0LDE5ICs0ODAsMjIgQEAKIAkJaWYgKHN0YXRlLT5yYWRpbyB8fCBNU1BfTU9ERV9FWFRFUk4gPT0gc3RhdGUtPm1vZGUpIHsKIAkJCS8qIG5vIGNhcnJpZXIgc2NhbiwganVzdCB1bm11dGUgKi8KIAkJCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJ0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7CisJCQlzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDA7CiAJCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIG11dGUgKi8KLQkJbXNwX3NldF9tdXRlKGNsaWVudCk7CisJCS8qIG11dGUgYXVkaW8gKi8KKwkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPSAxOworCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisKIAkJbXNwMzQwMGNfc2V0X21vZGUoY2xpZW50LCBNU1BfTU9ERV9BTV9ERVRFQ1QpOwogCQl2YWwxID0gdmFsMiA9IDA7CiAJCW1heDEgPSBtYXgyID0gLTE7CiAJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOwogCQlzdGF0ZS0+bmljYW1fb24gPSAwOwogCi0JCS8qIHNvbWUgdGltZSBmb3IgdGhlIHR1bmVyIHRvIHN5bmMgKi8KKwkJLyogd2FpdCBmb3IgdHVuZXIgdG8gc2V0dGxlIGRvd24gYWZ0ZXIgYSBjaGFubmVsIGNoYW5nZSAqLwogCQlpZiAobXNwX3NsZWVwKHN0YXRlLCAyMDApKQogCQkJZ290byByZXN0YXJ0OwogCkBAIC01NTIsNyArNTcxLDYgQEAKIAkJCQkvKiBCL0cgTklDQU0gKi8KIAkJCQlzdGF0ZS0+c2Vjb25kID0gbXNwMzQwMGNfY2Fycmllcl9kZXRlY3RfNTVbbWF4Ml0uY2RvOwogCQkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fTklDQU0xKTsKLQkJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKIAkJCQlzdGF0ZS0+bmljYW1fb24gPSAxOwogCQkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJfSBlbHNlIHsKQEAgLTU2Myw3ICs1ODEsNiBAQAogCQkJLyogUEFMIEkgTklDQU0gKi8KIAkJCXN0YXRlLT5zZWNvbmQgPSBNU1BfQ0FSUklFUig2LjU1Mik7CiAJCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX05JQ0FNMik7Ci0JCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKIAkJCXN0YXRlLT5uaWNhbV9vbiA9IDE7CiAJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCWJyZWFrOwpAQCAtNTc3LDEzICs1OTQsMTEgQEAKIAkJCQkvKiBMIE5JQ0FNIG9yIEFNLW1vbm8gKi8KIAkJCQlzdGF0ZS0+c2Vjb25kID0gbXNwMzQwMGNfY2Fycmllcl9kZXRlY3RfNjVbbWF4Ml0uY2RvOwogCQkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfQU1fTklDQU0pOwotCQkJCW1zcDM0MDBjX3NldF9jYXJyaWVyKGNsaWVudCwgc3RhdGUtPnNlY29uZCwgc3RhdGUtPm1haW4pOwogCQkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJfSBlbHNlIGlmIChtYXgyID09IDAgJiYgc3RhdGUtPmhhc19uaWNhbSkgewogCQkJCS8qIEQvSyBOSUNBTSAqLwogCQkJCXN0YXRlLT5zZWNvbmQgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF82NVttYXgyXS5jZG87CiAJCQkJbXNwMzQwMGNfc2V0X21vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9OSUNBTTEpOwotCQkJCW1zcDM0MDBjX3NldF9jYXJyaWVyKGNsaWVudCwgc3RhdGUtPnNlY29uZCwgc3RhdGUtPm1haW4pOwogCQkJCXN0YXRlLT5uaWNhbV9vbiA9IDE7CiAJCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CiAJCQl9IGVsc2UgewpAQCAtNTk1LDI1ICs2MTAsMjUgQEAKIAkJbm9fc2Vjb25kOgogCQkJc3RhdGUtPnNlY29uZCA9IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0X21haW5bbWF4MV0uY2RvOwogCQkJbXNwMzQwMGNfc2V0X21vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9URVJSQSk7Ci0JCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKLQkJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAkJCWJyZWFrOwogCQl9CisJCW1zcDM0MDBjX3NldF9jYXJyaWVyKGNsaWVudCwgc3RhdGUtPnNlY29uZCwgc3RhdGUtPm1haW4pOwogCiAJCS8qIHVubXV0ZSAqLwotCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisJCXN0YXRlLT5zY2FuX2luX3Byb2dyZXNzID0gMDsKIAkJbXNwMzQwMGNfc2V0X2F1ZG1vZGUoY2xpZW50KTsKKwkJbXNwX3NldF9hdWRpbyhjbGllbnQpOwogCiAJCWlmIChtc3BfZGVidWcpCiAJCQltc3AzNDAwY19wcmludF9tb2RlKGNsaWVudCk7CiAKIAkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlLCB0aGUgZmlyc3QgdGltZSBkb24ndCB3YWl0CiAJCSAgIHNvIGxvbmcgdG8gZ2V0IGEgcXVpY2sgc3RlcmVvL2JpbGluZ3VhbCByZXN1bHQgKi8KLQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwgMTAwMCkpCi0JCQlnb3RvIHJlc3RhcnQ7CisJCWNvdW50ID0gMzsKIAkJd2hpbGUgKHN0YXRlLT53YXRjaF9zdGVyZW8pIHsKLQkJCWlmIChtc3Bfc2xlZXAoc3RhdGUsIDUwMDApKQorCQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwgY291bnQgPyAxMDAwIDogNTAwMCkpCiAJCQkJZ290byByZXN0YXJ0OworCQkJaWYgKGNvdW50KSBjb3VudC0tOwogCQkJd2F0Y2hfc3RlcmVvKGNsaWVudCk7CiAJCX0KIAl9CkBAIC02MjYsNyArNjQxLDcgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YTsKIAlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCB2YWwsIGksIHN0ZDsKKwlpbnQgdmFsLCBpLCBzdGQsIGNvdW50OwogCiAJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIm1zcDM0MTAgZGFlbW9uIHN0YXJ0ZWRcbiIpOwogCkBAIC02NDQsMTYgKzY1OSwxNCBAQAogCQlpZiAoc3RhdGUtPm1vZGUgPT0gTVNQX01PREVfRVhURVJOKSB7CiAJCQkvKiBubyBjYXJyaWVyIHNjYW4gbmVlZGVkLCBqdXN0IHVubXV0ZSAqLwogCQkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInRocmVhZDogbm8gY2FycmllciBzY2FuXG4iKTsKKwkJCXN0YXRlLT5zY2FuX2luX3Byb2dyZXNzID0gMDsKIAkJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyogcHV0IGludG8gc2FuZSBzdGF0ZSAoYW5kIG11dGUpICovCi0JCW1zcF9yZXNldChjbGllbnQpOwotCi0JCS8qIHNvbWUgdGltZSBmb3IgdGhlIHR1bmVyIHRvIHN5bmMgKi8KLQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwyMDApKQotCQkJZ290byByZXN0YXJ0OworCQkvKiBtdXRlIGF1ZGlvICovCisJCXN0YXRlLT5zY2FuX2luX3Byb2dyZXNzID0gMTsKKwkJbXNwX3NldF9hdWRpbyhjbGllbnQpOwogCiAJCS8qIHN0YXJ0IGF1dG9kZXRlY3QuIE5vdGU6IGF1dG9kZXRlY3QgaXMgbm90IHN1cHBvcnRlZCBmb3IKIAkJICAgTlRTQy1NIGFuZCByYWRpbywgaGVuY2Ugd2UgZm9yY2UgdGhlIHN0YW5kYXJkIGluIHRob3NlIGNhc2VzLiAqLwpAQCAtNjY0LDYgKzY3NywxMCBAQAogCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMDsKIAkJc3RhdGUtPm5pY2FtX29uID0gMDsKIAorCQkvKiB3YWl0IGZvciB0dW5lciB0byBzZXR0bGUgZG93biBhZnRlciBhIGNoYW5uZWwgY2hhbmdlICovCisJCWlmIChtc3Bfc2xlZXAoc3RhdGUsIDIwMCkpCisJCQlnb3RvIHJlc3RhcnQ7CisKIAkJaWYgKG1zcF9kZWJ1ZykKIAkJCXY0bF9kYmcoMiwgbXNwX2RlYnVnLCBjbGllbnQsICJzZXR0aW5nIHN0YW5kYXJkOiAlcyAoMHglMDR4KVxuIiwKIAkJCSAgICAgICBtc3Bfc3RhbmRhcmRfc3RkX25hbWUoc3RkKSwgc3RkKTsKQEAgLTY5Myw2ICs3MTAsNyBAQAogCQlzdGF0ZS0+bWFpbiAgID0gbXNwX3N0ZGxpc3RbaV0ubWFpbjsKIAkJc3RhdGUtPnNlY29uZCA9IG1zcF9zdGRsaXN0W2ldLnNlY29uZDsKIAkJc3RhdGUtPnN0ZCA9IHZhbDsKKwkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCiAJCWlmIChtc3BfYW1zb3VuZCAmJiAhc3RhdGUtPnJhZGlvICYmIChzdGF0ZS0+djRsMl9zdGQgJiBWNEwyX1NURF9TRUNBTSkgJiYKIAkJCQkodmFsICE9IDB4MDAwOSkpIHsKQEAgLTcxNCwyMCArNzMyLDE3IEBACiAJCQllbHNlCiAJCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9GTV9OSUNBTTE7CiAJCQkvKiBqdXN0IHR1cm4gb24gc3RlcmVvICovCi0JCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAkJCXN0YXRlLT5uaWNhbV9vbiA9IDE7CiAJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDAwOToKIAkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfQU1fTklDQU07Ci0JCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJCQlzdGF0ZS0+bmljYW1fb24gPSAxOwogCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAweDAwMjA6IC8qIEJUU0MgKi8KIAkJCS8qIFRoZSBwcmUtJ0cnIG1vZGVscyBvbmx5IGhhdmUgQlRTQy1tb25vICovCiAJCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0JUU0M7Ci0JCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJCQlicmVhazsKIAkJY2FzZSAweDAwNDA6IC8qIEZNIHJhZGlvICovCiAJCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0ZNX1JBRElPOwpAQCAtNzM3LDE1ICs3NTIsMTIgQEAKIAkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fUkFESU8pOwogCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUigxMC43KSwKIAkJCQkJICAgIE1TUF9DQVJSSUVSKDEwLjcpKTsKLQkJCS8qIHNjYXJ0IHJvdXRpbmcgKHRoaXMgZG9lc24ndCBiZWxvbmcgaGVyZSBJIHRoaW5rKSAqLwotCQkJbXNwX3NldF9zY2FydChjbGllbnQsU0NBUlRfSU4yLDApOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMDAyOgogCQljYXNlIDB4MDAwMzoKIAkJY2FzZSAweDAwMDQ6CiAJCWNhc2UgMHgwMDA1OgogCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9GTV9URVJSQTsKLQkJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJYnJlYWs7CiAJCX0KQEAgLTc1OSwyMCArNzcxLDE5IEBACiAJCWlmIChzdGF0ZS0+aGFzX2kyc19jb25mKQogCQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4NDAsIHN0YXRlLT5pMnNfbW9kZSk7CiAKLQkJLyogdW5tdXRlLCByZXN0b3JlIG1pc2MgcmVnaXN0ZXJzICovCi0JCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKLQotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgxMywgc3RhdGUtPmFjYik7CisJCS8qIHVubXV0ZSAqLwogCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQpOworCQlzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDA7CisJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKIAogCQkvKiBtb25pdG9yIHR2IGF1ZGlvIG1vZGUsIHRoZSBmaXJzdCB0aW1lIGRvbid0IHdhaXQKIAkJICAgc28gbG9uZyB0byBnZXQgYSBxdWljayBzdGVyZW8vYmlsaW5ndWFsIHJlc3VsdCAqLwotCQlpZiAobXNwX3NsZWVwKHN0YXRlLCAxMDAwKSkKLQkJCWdvdG8gcmVzdGFydDsKKwkJY291bnQgPSAzOwogCQl3aGlsZSAoc3RhdGUtPndhdGNoX3N0ZXJlbykgewotCQkJd2F0Y2hfc3RlcmVvKGNsaWVudCk7Ci0JCQlpZiAobXNwX3NsZWVwKHN0YXRlLCA1MDAwKSkKKwkJCWlmIChtc3Bfc2xlZXAoc3RhdGUsIGNvdW50ID8gMTAwMCA6IDUwMDApKQogCQkJCWdvdG8gcmVzdGFydDsKKwkJCWlmIChjb3VudCkgY291bnQtLTsKKwkJCXdhdGNoX3N0ZXJlbyhjbGllbnQpOwogCQl9CiAJfQogCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJ0aHJlYWQ6IGV4aXRcbiIpOwpAQCAtODI5LDI3ICs4NDAsMjcgQEAKIAkJc291cmNlID0gMDsgLyogbW9ubyBvbmx5ICovCiAJCW1hdHJpeCA9IDB4MzA7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQlzb3VyY2UgPSAzOyAvKiBzdGVyZW8gb3IgQSAqLwotCQltYXRyaXggPSAweDAwOwotCQlicmVhazsKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKIAkJc291cmNlID0gNDsgLyogc3RlcmVvIG9yIEIgKi8KIAkJbWF0cml4ID0gMHgxMDsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgotCWRlZmF1bHQ6CiAJCXNvdXJjZSA9IDE7IC8qIHN0ZXJlbyBvciBBfEIgKi8KIAkJbWF0cml4ID0gMHgyMDsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCWRlZmF1bHQ6CisJCXNvdXJjZSA9IDM7IC8qIHN0ZXJlbyBvciBBICovCisJCW1hdHJpeCA9IDB4MDA7CisJCWJyZWFrOwogCX0KIAotCWlmIChpbiA9PSBNU1BfRFNQX09VVF9UVU5FUikKKwlpZiAoaW4gPT0gTVNQX0RTUF9JTl9UVU5FUikKIAkJc291cmNlID0gKHNvdXJjZSA8PCA4KSB8IDB4MjA7CiAJLyogdGhlIG1zcDM0eDJnIHB1dHMgdGhlIE1BSU5fQVZDLCBNQUlOIGFuZCBBVVggc291cmNlcyBpbiAxMiwgMTMsIDE0CiAJICAgaW5zdGVhZCBvZiAxMSwgMTIsIDEzLiBTbyB3ZSBhZGQgb25lIGZvciB0aGF0IG1zcCB2ZXJzaW9uLiAqLwotCWVsc2UgaWYgKGluID49IE1TUF9EU1BfT1VUX01BSU5fQVZDICYmIHN0YXRlLT5oYXNfZG9sYnlfcHJvX2xvZ2ljKQorCWVsc2UgaWYgKGluID49IE1TUF9EU1BfSU5fTUFJTl9BVkMgJiYgc3RhdGUtPmhhc19kb2xieV9wcm9fbG9naWMpCiAJCXNvdXJjZSA9ICgoaW4gKyAxKSA8PCA4KSB8IG1hdHJpeDsKIAllbHNlCiAJCXNvdXJjZSA9IChpbiA8PCA4KSB8IG1hdHJpeDsKQEAgLTg2OSw3ICs4ODAsNyBAQAogCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCAweDAwMGMsIChpbiA+PiA0KSAmIDB4Zik7CiAJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIDB4MDAwOSwgKGluID4+IDgpICYgMHhmKTsKIAltc3AzNHh4Z19zZXRfc291cmNlKGNsaWVudCwgMHgwMDBhLCAoaW4gPj4gMTIpICYgMHhmKTsKLQlpZiAoc3RhdGUtPmhhc19zY2FydDIzX2luX3NjYXJ0Ml9vdXQpCisJaWYgKHN0YXRlLT5oYXNfc2NhcnQyX291dCkKIAkJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIDB4MDA0MSwgKGluID4+IDE2KSAmIDB4Zik7CiAJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIDB4MDAwYiwgKGluID4+IDIwKSAmIDB4Zik7CiB9CkBAIC04ODcsMTAgKzg5OCw2IEBACiAKIAltc3BfcmVzZXQoY2xpZW50KTsKIAotCS8qIG1ha2Ugc3VyZSB0aGF0IGlucHV0L291dHB1dCBpcyBtdXRlZCAocGFyYW5vaWQgbW9kZSkgKi8KLQkvKiBBQ0IsIG11dGUgRFNQIGlucHV0LCBtdXRlIFNDQVJUIDEgKi8KLQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgxMywgMHgwZjIwKTsKLQogCWlmIChzdGF0ZS0+aGFzX2kyc19jb25mKQogCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHg0MCwgc3RhdGUtPmkyc19tb2RlKTsKIApAQCAtMTAyOCw3ICsxMDM1LDcgQEAKIAogCWlmIChzdGF0ZS0+c3RkID09IDB4MjApIHsKIAkgICAgICAgaWYgKChzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NBUCkgJiYKLQkJICAgKHN0YXRlLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8gfHwKKwkJICAgKHN0YXRlLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMiB8fAogCQkgICAgc3RhdGUtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcyKSkgewogCQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MjAsIDB4MjEpOwogCSAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjYmM5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKQEAgLTAsMCArMSwyOCBAQAorY29uZmlnIFVTQl9QV0MKKwl0cmlzdGF0ZSAiVVNCIFBoaWxpcHMgQ2FtZXJhcyIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxCisJLS0taGVscC0tLQorCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlc2UgUGhpbGlwcyAmIE9FTQorCSAgd2ViY2FtczoKKwkgICAqIFBoaWxpcHMgUENBNjQ1LCBQQ0E2NDYKKwkgICAqIFBoaWxpcHMgUENWQzY3NSwgUENWQzY4MCwgUENWQzY5MAorCSAgICogUGhpbGlwcyBQQ1ZDNzIwLzQwLCBQQ1ZDNzMwLCBQQ1ZDNzQwLCBQQ1ZDNzUwCisJICAgKiBBc2tleSBWQzAxMAorCSAgICogTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAsIDQwMDAsICdab29tJywgJ05vdGVib29rIFBybycKKwkgICAgIGFuZCAnT3JiaXQnLydTcGhlcmUnCisJICAgKiBTYW1zdW5nIE1QQy1DMTAsIE1QQy1DMzAKKwkgICAqIENyZWF0aXZlIFdlYmNhbSA1LCBQcm8gRXgKKwkgICAqIFNPVEVDIEFmaW5hIEV5ZQorCSAgICogVmlzaW9uaXRlIFZDUy1VQzMwMCwgVkNTLVVNMTAwCisKKwkgIFRoZSBQQ0E2MzUsIFBDVkM2NjUgYW5kIFBDVkM3MjAvMjAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKwkgIGFuZCBuZXZlciB3aWxsIGJlLCBidXQgdGhlIDY2NSBhbmQgNzIwLzIwIGFyZSBzdXBwb3J0ZWQgYnkgb3RoZXIKKwkgIGRyaXZlcnMuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9waGlsaXBzLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kCisJICBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorCisJICBUaGUgYnVpbHQtaW4gbWljcm9waG9uZSBpcyBlbmFibGVkIGJ5IHNlbGVjdGluZyBVU0IgQXVkaW8gc3VwcG9ydC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHdjLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9NYWtlZmlsZQppbmRleCA4MzI2Njg0Li4zM2Q2MDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9NYWtlZmlsZQpAQCAtMSwyMCArMSwzIEBACi1pZm5lcSAoJChLRVJORUxSRUxFQVNFKSwpCi0KIHB3Yy1vYmpzCTo9IHB3Yy1pZi5vIHB3Yy1taXNjLm8gcHdjLWN0cmwubyBwd2MtdW5jb21wcmVzcy5vIHB3Yy10aW1vbi5vIHB3Yy1raWFyYS5vCiAKIG9iai0kKENPTkZJR19VU0JfUFdDKSArPSBwd2MubwotCi1lbHNlCi0KLUtESVIgOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkCi1QV0QgOj0gJChzaGVsbCBwd2QpCi0KLWRlZmF1bHQ6Ci0JJChNQUtFKSAtQyAkKEtESVIpIFNVQkRJUlM9JChQV0QpIG1vZHVsZXMKLQotZW5kaWYKLQotY2xlYW46Ci0Jcm0gLWYgKi5bb2FzXSAuKi5mbGFncyAqLmtvIC4qLmNtZCAuKi5kIC4qLnRtcCAqLm1vZC5jCi0Jcm0gLXJmIC50bXBfdmVyc2lvbnMKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCBiMDUwMTUyLi5kY2VlYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvc2FhNzExNS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExMy9TQUE3MTE0L1NBQTcxMTUgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKQEAgLTUzLDcgKzU0LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCQkweDRhID4+MSwgMHg0OCA+PjEsCS8qIFNBQTcxMTMgKi8KKwkJMHg0YSA+PiAxLCAweDQ4ID4+IDEsCS8qIFNBQTcxMTMgKi8KIAkJMHg0MiA+PiAxLCAweDQwID4+IDEsCS8qIFNBQTcxMTQgYW5kIFNBQTcxMTUgKi8KIAkJSTJDX0NMSUVOVF9FTkQgfTsKIApAQCAtNzIyLDE2ICs3MjMsMTYgQEAKIAkxMDAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgIE5UU0MtSmFwYW4gKDMuNThNSHopCiAJKi8KIAlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMykgewotCQl1OCByZWcgPSAgc2FhNzExNV9yZWFkKGNsaWVudCwgMHgwZSkgJiAweDhmOworCQl1OCByZWcgPSBzYWE3MTE1X3JlYWQoY2xpZW50LCAweDBlKSAmIDB4OGY7CiAKIAkJaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTSkgewotCQkJcmVnfD0weDMwOworCQkJcmVnIHw9IDB4MzA7CiAJCX0gZWxzZSBpZiAoc3RkID09IFY0TDJfU1REX1BBTF9OKSB7Ci0JCQlyZWd8PTB4MjA7CisJCQlyZWcgfD0gMHgyMDsKIAkJfSBlbHNlIGlmIChzdGQgPT0gVjRMMl9TVERfUEFMXzYwKSB7Ci0JCQlyZWd8PTB4MTA7CisJCQlyZWcgfD0gMHgxMDsKIAkJfSBlbHNlIGlmIChzdGQgPT0gVjRMMl9TVERfTlRTQ19NX0pQKSB7Ci0JCQlyZWd8PTB4NDA7CisJCQlyZWcgfD0gMHg0MDsKIAkJfQogCQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHgwZSwgcmVnKTsKIAl9CkBAIC04MTEsNyArODEyLDcgQEAKIAl1OCBsY3JbMjRdOwogCWludCBpLCB4OwogCi0JLyogc2FhNzExMy83MTE0NCBkb2Vzbid0IHlldCBzdXBwb3J0IFZCSSAqLworCS8qIHNhYTcxMTMvNzExNCBkb2Vzbid0IHlldCBzdXBwb3J0IFZCSSAqLwogCWlmIChzdGF0ZS0+aWRlbnQgIT0gVjRMMl9JREVOVF9TQUE3MTE1KQogCQlyZXR1cm47CiAKQEAgLTg1MSw3ICs4NTIsNyBAQAogCQkJCQljYXNlIDA6CiAJCQkJCQlsY3JbaV0gfD0gMHhmIDw8ICg0ICogeCk7CiAJCQkJCQlicmVhazsKLQkJCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQjoKKwkJCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COgogCQkJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgpAQCAtODgwLDcgKzg4MSw3IEBACiBzdGF0aWMgaW50IHNhYTcxMTVfZ2V0X3Y0bGZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKIAlzdGF0aWMgdTE2IGxjcjJ2YmlbXSA9IHsKLQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IsIDAsCS8qIDEgKi8KKwkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfQiwgMCwJLyogMSAqLwogCQkwLCBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwJLyogNCAqLwogCQlWNEwyX1NMSUNFRF9XU1NfNjI1LCAwLAkJLyogNSAqLwogCQlWNEwyX1NMSUNFRF9WUFMsIDAsIDAsIDAsIDAsCS8qIDcgKi8KQEAgLTEwNDUsNyArMTA0Niw3IEBACiAJLyogZGVjb2RlIHBheWxvYWRzICovCiAJc3dpdGNoIChpZDIpIHsKIAljYXNlIDE6Ci0JCXZiaS0+dHlwZSA9IFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9COworCQl2YmktPnR5cGUgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COwogCQlicmVhazsKIAljYXNlIDQ6CiAJCWlmICghc2FhNzExNV9vZGRfcGFyaXR5KHBbMF0pIHx8ICFzYWE3MTE1X29kZF9wYXJpdHkocFsxXSkpCkBAIC0xMTgwLDYgKzExODEsNDYgQEAKIAkJc3RhdGUtPnJhZGlvID0gMTsKIAkJYnJlYWs7CiAKKwljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgorCXsKKwkJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisKKwkJcm91dGUtPmlucHV0ID0gc3RhdGUtPmlucHV0OworCQlyb3V0ZS0+b3V0cHV0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORzoKKwl7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOworCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IGlucHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQpOworCQkvKiBzYWE3MTEzIGRvZXMgbm90IGhhdmUgdGhlc2UgaW5wdXRzICovCisJCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzICYmCisJCSAgICAocm91dGUtPmlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNCB8fAorCQkgICAgIHJvdXRlLT5pbnB1dCA9PSBTQUE3MTE1X0NPTVBPU0lURTUpKSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocm91dGUtPmlucHV0ID4gU0FBNzExNV9TVklERU8zKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChzdGF0ZS0+aW5wdXQgPT0gcm91dGUtPmlucHV0KQorCQkJYnJlYWs7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vdyBzZXR0aW5nICVzIGlucHV0XG4iLAorCQkJKHJvdXRlLT5pbnB1dCA+PSBTQUE3MTE1X1NWSURFTzApID8gIlMtVmlkZW8iIDogIkNvbXBvc2l0ZSIpOworCQlzdGF0ZS0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7CisKKwkJLyogc2VsZWN0IG1vZGUgKi8KKwkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MDIsCisJCQkgICAgICAoc2FhNzExNV9yZWFkKGNsaWVudCwgMHgwMikgJiAweGYwKSB8CisJCQkgICAgICAgc3RhdGUtPmlucHV0KTsKKworCQkvKiBieXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgUy1WaWRlbyBtb2RlcyAqLworCQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHgwOSwKKwkJCSAgICAgIChzYWE3MTE1X3JlYWQoY2xpZW50LCAweDA5KSAmIDB4N2YpIHwKKwkJCSAgICAgICAoc3RhdGUtPmlucHV0ID49IFNBQTcxMTVfU1ZJREVPMCA/IDB4ODAgOiAweDApKTsKKwkJYnJlYWs7CisJfQorCiAJY2FzZSBWSURJT0NfR19JTlBVVDoKIAkJKihpbnQgKilhcmcgPSBzdGF0ZS0+aW5wdXQ7CiAJCWJyZWFrOwpAQCAtMTMyMSw3ICsxMzYyLDcgQEAKIAogCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAwLCA1KTsKIAljaGlwX2lkID0gc2FhNzExNV9yZWFkKGNsaWVudCwgMCkgJiAweDBmOwotCWlmIChjaGlwX2lkIDwzICYmIGNoaXBfaWQgPiA1KSB7CisJaWYgKGNoaXBfaWQgPCAzICYmIGNoaXBfaWQgPiA1KSB7CiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNhYTcxMTUgbm90IGZvdW5kXG4iKTsKIAkJa2ZyZWUoY2xpZW50KTsKIAkJcmV0dXJuIDA7CkBAIC0xMzYwLDcgKzE0MDEsNyBAQAogCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIndyaXRpbmcgaW5pdCB2YWx1ZXNcbiIpOwogCiAJLyogaW5pdCB0byA2MGh6LzQ4a2h6ICovCi0JaWYgKHN0YXRlLT5pZGVudD09VjRMMl9JREVOVF9TQUE3MTEzKQorCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzKQogCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTNfaW5pdF9hdXRvX2lucHV0KTsKIAllbHNlCiAJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9pbml0X2F1dG9faW5wdXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwppbmRleCA5OTJjNzE3Li5jMjcxZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvc2FhNzEyNy5oPgogCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKIHN0YXRpYyBpbnQgdGVzdF9pbWFnZSA9IDA7CkBAIC0xNDEsNiArMTQyLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSBzYWE3MTI5X2luaXRfY29uZmlnX2V4dHJhW10gPSB7CiAJeyBTQUE3MTI3X1JFR19PVVRQVVRfUE9SVF9DT05UUk9MLCAJCTB4MzggfSwKIAl7IFNBQTcxMjdfUkVHX1ZUUklHLCAJCQkJMHhmYSB9LAorCXsgMCwgMCB9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgc2FhNzEyN19pbml0X2NvbmZpZ19jb21tb25bXSA9IHsKQEAgLTIyMiwyMiArMjI0LDYgQEAKIAl7IDAsIDAgfQogfTsKIAotLyogRW51bWVyYXRpb24gZm9yIHRoZSBTdXBwb3J0ZWQgaW5wdXQgdHlwZXMgKi8KLWVudW0gc2FhNzEyN19pbnB1dF90eXBlIHsKLQlTQUE3MTI3X0lOUFVUX1RZUEVfTk9STUFMLAotCVNBQTcxMjdfSU5QVVRfVFlQRV9URVNUX0lNQUdFCi19OwotCi0vKiBFbnVtZXJhdGlvbiBmb3IgdGhlIFN1cHBvcnRlZCBPdXRwdXQgc2lnbmFsIHR5cGVzICovCi1lbnVtIHNhYTcxMjdfb3V0cHV0X3R5cGUgewotCVNBQTcxMjdfT1VUUFVUX1RZUEVfQk9USCwKLQlTQUE3MTI3X09VVFBVVF9UWVBFX0NPTVBPU0lURSwKLQlTQUE3MTI3X09VVFBVVF9UWVBFX1NWSURFTywKLQlTQUE3MTI3X09VVFBVVF9UWVBFX1JHQiwKLQlTQUE3MTI3X09VVFBVVF9UWVBFX1lVVl9DLAotCVNBQTcxMjdfT1VUUFVUX1RZUEVfWVVWX1YKLX07Ci0KIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTU2MSw3ICs1NDcsNyBAQAogewogCXN0cnVjdCBzYWE3MTI3X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCWludCAqaWFyZyA9IGFyZzsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWSURJT0NfU19TVEQ6CkBAIC01NzMsMTUgKzU1OSwyMyBAQAogCQkqKHY0bDJfc3RkX2lkICopYXJnID0gc3RhdGUtPnN0ZDsKIAkJYnJlYWs7CiAKLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCQlpZiAoc3RhdGUtPmlucHV0X3R5cGUgPT0gKmlhcmcpCi0JCQlicmVhazsKLQkJcmV0dXJuIHNhYTcxMjdfc2V0X2lucHV0X3R5cGUoY2xpZW50LCAqaWFyZyk7CisJY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKKwkJcm91dGUtPmlucHV0ID0gc3RhdGUtPmlucHV0X3R5cGU7CisJCXJvdXRlLT5vdXRwdXQgPSBzdGF0ZS0+b3V0cHV0X3R5cGU7CisJCWJyZWFrOwogCi0JY2FzZSBWSURJT0NfU19PVVRQVVQ6Ci0JCWlmIChzdGF0ZS0+b3V0cHV0X3R5cGUgPT0gKmlhcmcpCi0JCQlicmVhazsKLQkJcmV0dXJuIHNhYTcxMjdfc2V0X291dHB1dF90eXBlKGNsaWVudCwgKmlhcmcpOworCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6CisJeworCQlpbnQgcmMgPSAwOworCisJCWlmIChzdGF0ZS0+aW5wdXRfdHlwZSAhPSByb3V0ZS0+aW5wdXQpIHsKKwkJCXJjID0gc2FhNzEyN19zZXRfaW5wdXRfdHlwZShjbGllbnQsIHJvdXRlLT5pbnB1dCk7CisJCX0KKwkJaWYgKHJjID09IDAgJiYgc3RhdGUtPm91dHB1dF90eXBlICE9IHJvdXRlLT5vdXRwdXQpIHsKKwkJCXJjID0gc2FhNzEyN19zZXRfb3V0cHV0X3R5cGUoY2xpZW50LCByb3V0ZS0+b3V0cHV0KTsKKwkJfQorCQlyZXR1cm4gcmM7CisJfQogCiAJY2FzZSBWSURJT0NfU1RSRUFNT046CiAJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwppbmRleCA4NjY3MWE0Li5lMWMxODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwpAQCAtMzksNiArMzksNyBAQAogCXRyaXN0YXRlICJEVkIvQVRTQyBTdXBwb3J0IGZvciBzYWE3MTM0IGJhc2VkIFRWIGNhcmRzIgogCWRlcGVuZHMgb24gVklERU9fU0FBNzEzNCAmJiBEVkJfQ09SRQogCXNlbGVjdCBWSURFT19CVUZfRFZCCisJc2VsZWN0IEZXX0xPQURFUgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIgY2FyZHMgYmFzZWQgb24gdGhlCiAJICBQaGlsaXBzIHNhYTcxMzQgY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZQppbmRleCAxYmE5OTg0Li5iZTdiOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L01ha2VmaWxlCkBAIC0xMSw5ICsxMSw5IEBACiAKIG9iai0kKENPTkZJR19WSURFT19TQUE3MTM0X0RWQikgKz0gc2FhNzEzNC1kdmIubwogCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyYykvLi4KLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCiAKIGV4dHJhLWNmbGFncy0kKENPTkZJR19WSURFT19CVUZfRFZCKSArPSAtREhBVkVfVklERU9fQlVGX0RWQj0xCiBleHRyYS1jZmxhZ3MtJChDT05GSUdfRFZCX01UMzUyKSAgICAgKz0gLURIQVZFX01UMzUyPTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IGZkZDdmNDguLjg2ZWFlMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJW1NBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTV0gPSB7CiAJCS8qIExpZmVWaWV3IEZseVRWIFBsYXRpbnVtIEZNIChMUjIxNFdGKSAqLwogCQkvKiAiUGV0ZXIgTWlzc2VsIDxwZXRlci5taXNzZWxAb25saW5laG9tZS5kZT4gKi8KLQkJLm5hbWUgICAgICAgICAgID0gIkxpZmVWaWV3IEZseVRWIFBsYXRpbnVtIEZNIiwKKwkJLm5hbWUgICAgICAgICAgID0gIkxpZmVWaWV3IEZseVRWIFBsYXRpbnVtIEZNIC8gR29sZCIsCiAJCS5hdWRpb19jbG9jayAgICA9IDB4MDAyMDAwMDAsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCkBAIC0yNjYwLDcgKzI2NjAsNyBAQAogCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzID0ge3sKIAkJCS5uYW1lICAgPSBuYW1lX2NvbXAxLAotCQkJLnZtdXggICA9IDAsCisJCQkudm11eCAgID0gMSwKIAkJCS5hbXV4ICAgPSBMSU5FMSwKIAkJfSx7CiAJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCkBAIC0yNjcxLDcgKzI2NzEsNyBAQAogCVtTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDFdID0gewogCQkvKiBMaWZlVmlldyBGbHlEVkItVCAqLwogCQkvKiBHaWFtcGllcm8gR2lhbmNpcG9saSA8Z2lhbmNpQGxpYmVyby5pdD4gKi8KLQkJLm5hbWUgICAgICAgICAgID0gIkxpZmVWaWV3IEZseURWQi1UIiwKKwkJLm5hbWUgICAgICAgICAgID0gIkxpZmVWaWV3IEZseURWQi1UIC8gR2VuaXVzIFZpZGVvV29uZGVyIERWQi1UIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKQEAgLTI4MDgsNiArMjgwOCw0MCBAQAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX0ZMWURWQlRfSFlCUklEX0NBUkRCVVNdID0geworCQkubmFtZQkJPSAiTGlmZVZpZXcgRmx5RFZCLVQgSHlicmlkIENhcmRidXMiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMjAwMDAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMDYwMDAwMCwgLyogQml0IDIxIDA9UmFkaW8sIEJpdCAyMiAwPVRWICovCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDIwMDAwMCwJLyogR1BJTzIxPUhpZ2ggZm9yIFRWIGlucHV0ICovCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywJLyogUy1WaWRlbyBzaWduYWwgb24gUy1WaWRlbyBpbnB1dCAqLworCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCS8qIENvbXBvc2l0ZSBzaWduYWwgb24gUy1WaWRlbyBpbnB1dCAqLworCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCS8qIENvbXBvc2l0ZSBpbnB1dCAqLworCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gVFYsCisJCQkuZ3BpbyA9IDB4MDAwMDAwLAkvKiBHUElPMjE9TG93IGZvciBGTSByYWRpbyBhbnRlbm5hICovCisJCX0sCisJfSwKIH07CiAKIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTM0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzEzNF9ib2FyZHMpOwpAQCAtMzMzMyw2ICszMzY3LDMwIEBACiAJCS5zdWJkZXZpY2UgICAgPSAweDAwMDUsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMiwKIAl9LHsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAorCQkuc3VidmVuZG9yID0gMHgxNDg5LAorCQkuc3ViZGV2aWNlID0gMHgwMzAxLAorCQkuZHJpdmVyX2RhdGEgPSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDEsCisJfSx7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciA9IDB4NTE2OCwgLyogQW5pbWF0aW9uIFRlY2hub2xvZ2llcyAoTGlmZVZpZXcpICovCisJCS5zdWJkZXZpY2UgPSAweDAzMDQsCisJCS5kcml2ZXJfZGF0YSA9IFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTSwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHg1MTY4LAorCQkuc3ViZGV2aWNlICAgID0gMHgzMzA2LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDUxNjgsCisJCS5zdWJkZXZpY2UgICAgPSAweDM1MDIsICAvKiB3aGF0cyB0aGUgZGlmZmVyZW5jZSB0byAweDMzMDYgPyovCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfSFlCUklEX0NBUkRCVVMsCisJfSx7CiAJCS8qIC0tLSBib2FyZHMgd2l0aG91dCBlZXByb20gKyBzdWJzeXN0ZW0gSUQgLS0tICovCiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKQEAgLTM0NDYsNiArMzUwNCw3IEBACiAJCS8qIHBvd2VyLXVwIHR1bmVyIGNoaXAgKi8KIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIDB4MDAwNDAwMDAsIDB4MDAwNDAwMDApOwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgwMDA0MDAwMCwgMHgwMDAwMDAwMCk7CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV8zMDBJX0RWQlRfUEFMOgogCQkvKiB0aGlzIHR1cm5zIHRoZSByZW1vdGUgY29udHJvbCBjaGlwIG9mZiB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBpdCAqLwogCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUxLCAweDgwKTsKQEAgLTM0NjIsNiArMzUyMSw3IEBACiAJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMywgMHgwNik7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfRFVPX0NBUkRCVVNfUFRWMzMxOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTOgogCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUzLCAweDA4KTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMzLCAweDAwKTsKIAkJYnJlYWs7CkBAIC0zNjMzLDYgKzM2OTMsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfRFVPX0NBUkRCVVNfUFRWMzMxOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTOgogCQkvKiBtYWtlIHRoZSB0ZGExMDA0NiBmaW5kIGl0cyBlZXByb20gKi8KIAkJewogCQl1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4NjJ9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IGM5ODU3MWMuLmYwYzIxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgInNhYTcxMzQtcmVnLmgiCiAjaW5jbHVkZSAic2FhNzEzNC5oIgpAQCAtNTQ3LDYgKzU0OCw4IEBACiAJCWlmIChyZXBvcnQgJiBTQUE3MTM0X0lSUV9SRVBPUlRfR1BJTzE2KSB7CiAJCQlzd2l0Y2ggKGRldi0+aGFzX3JlbW90ZSkgewogCQkJCWNhc2UgU0FBNzEzNF9SRU1PVEVfR1BJTzoKKwkJCQkJaWYgKCFkZXYtPnJlbW90ZSkKKwkJCQkJCWJyZWFrOwogCQkJCQlpZiAgKGRldi0+cmVtb3RlLT5tYXNrX2tleWRvd24gJiAweDEwMDAwKSB7CiAJCQkJCQlzYWE3MTM0X2lucHV0X2lycShkZXYpOwogCQkJCQl9CkBAIC01NjMsNiArNTY2LDggQEAKIAkJaWYgKHJlcG9ydCAmIFNBQTcxMzRfSVJRX1JFUE9SVF9HUElPMTgpIHsKIAkJCXN3aXRjaCAoZGV2LT5oYXNfcmVtb3RlKSB7CiAJCQkJY2FzZSBTQUE3MTM0X1JFTU9URV9HUElPOgorCQkJCQlpZiAoIWRldi0+cmVtb3RlKQorCQkJCQkJYnJlYWs7CiAJCQkJCWlmICgoZGV2LT5yZW1vdGUtPm1hc2tfa2V5ZG93biAmIDB4NDAwMDApIHx8CiAJCQkJCSAgICAoZGV2LT5yZW1vdGUtPm1hc2tfa2V5dXAgJiAweDQwMDAwKSkgewogCQkJCQkJc2FhNzEzNF9pbnB1dF9pcnEoZGV2KTsKQEAgLTY3NSw3ICs2ODAsNyBAQAogCQlTQUE3MTM0X0lSUTJfSU5URV9QRSAgICAgIHwKIAkJU0FBNzEzNF9JUlEyX0lOVEVfQVI7CiAKLQlpZiAoZGV2LT5oYXNfcmVtb3RlID09IFNBQTcxMzRfUkVNT1RFX0dQSU8pIHsKKwlpZiAoZGV2LT5oYXNfcmVtb3RlID09IFNBQTcxMzRfUkVNT1RFX0dQSU8gJiYgZGV2LT5yZW1vdGUpIHsKIAkJaWYgKGRldi0+cmVtb3RlLT5tYXNrX2tleWRvd24gJiAweDEwMDAwKQogCQkJaXJxMl9tYXNrIHw9IFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xNjsKIAkJZWxzZSBpZiAoZGV2LT5yZW1vdGUtPm1hc2tfa2V5ZG93biAmIDB4NDAwMDApCkBAIC04NzAsNyArODc1LDcgQEAKIAkgICAgICAgcGNpX25hbWUocGNpX2RldiksIGRldi0+cGNpX3JldiwgcGNpX2Rldi0+aXJxLAogCSAgICAgICBkZXYtPnBjaV9sYXQscGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsMCkpOwogCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOwotCWlmICghcGNpX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwweGZmZmZmZmZmKSkgeworCWlmICghcGNpX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgRE1BXzMyQklUX01BU0spKSB7CiAJCXByaW50aygiJXM6IE9vcHM6IG5vIDMyYml0IFBDSSBETUEgPz8/XG4iLGRldi0+bmFtZSk7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IDg2Y2ZkYjguLjIyMmEzNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC0xMDY0LDYgKzEwNjQsMTAgQEAKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJnRldmlvbl9kdmJ0MjIwcmZfY29uZmlnLAogCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfSFlCUklEX0NBUkRCVVM6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZhZHNfdGVjaF9kdW9fY29uZmlnLAorCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBIQVZFX05YVDIwMFgKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0FWRVJUVkhEX0ExODA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwppbmRleCBhZWVmODBmLi5lNDE1NmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKQEAgLTMxLDggKzMxLDEwIEBACiAjaW5jbHVkZSAic2FhNzEzNC5oIgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIC8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCAzMWJhMjkzLi4zNTNhZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTIyMCw2ICsyMjAsNyBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTY5X0IgOTEKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2OV9CMSA5MgogI2RlZmluZSBTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMiAgICAgOTMKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTIDk0CiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgOAogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTUyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwpAQCAtMCwwICsxLDExIEBACitjb25maWcgVVNCX1NOOUMxMDIKKwl0cmlzdGF0ZSAiVVNCIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIFNPTmlYIFNOOUMxMDEsCisJICBTTjlDMTAyIG9yIFNOOUMxMDMgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zbjljMTAyLnR4dD4gZm9yIG1vcmUgaW5mby4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc245YzEwMi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggZGYxOTVjOS4uMTAxM2I0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogCX0KIAl0dW5lcl9pbmZvKCJUdW5lciBtb2RlOiAgICAgICVzXG4iLCBwKTsKIAl0dW5lcl9pbmZvKCJGcmVxdWVuY3k6ICAgICAgICVsdS4lMDJsdSBNSHpcbiIsIGZyZXEsIGZyZXFfZnJhY3Rpb24pOwotCXR1bmVyX2luZm8oIlN0YW5kYXJkOiAgICAgICAgMHglMDhsbHhcbiIsIHQtPnN0ZCk7CisJdHVuZXJfaW5mbygiU3RhbmRhcmQ6ICAgICAgICAweCUwOGx4XG4iLCAodW5zaWduZWQgbG9uZyl0LT5zdGQpOwogCWlmICh0LT5tb2RlICE9IFY0TDJfVFVORVJfUkFESU8pCiAJICAgICAgIHJldHVybjsKIAlpZiAodC0+aGFzX3NpZ25hbCkgewpAQCAtNTU4LDEwICs1NTgsMTAgQEAKIAogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfdjRsMihzdHJ1Y3QgdHVuZXIgKnQpCiB7Ci0JaWYgKHQtPnVzaW5nX3Y0bDIpIHsKLQkJdHVuZXJfZGJnICgiaWdub3JlIHY0bDEgY2FsbFxuIik7Ci0JCXJldHVybiBFSU5WQUw7Ci0JfQorCS8qIGJ0dHYgc3RpbGwgdXNlcyBib3RoIHY0bDEgYW5kIHY0bDIgY2FsbHMgdG8gdGhlIHR1bmVyICh2NGwyIGZvcgorCSAgIFRWLCB2NGwxIGZvciByYWRpbyksIHVudGlsIHRoYXQgaXMgZml4ZWQgdGhpcyBjb2RlIGlzIGRpc2FibGVkLgorCSAgIE90aGVyd2lzZSB0aGUgcmFkaW8gKHY0bDEpIHdvdWxkbid0IHR1bmUgYWZ0ZXIgdXNpbmcgdGhlIFRWICh2NGwyKQorCSAgIGZpcnN0LiAqLwogCXJldHVybiAwOwogfQogCkBAIC03NDQsNiArNzQ0LDggQEAKIAkJCXN3aXRjaF92NGwyKCk7CiAKIAkJCXR1bmVyLT50eXBlID0gdC0+bW9kZTsKKwkJCWlmICh0LT5tb2RlID09IFY0TDJfVFVORVJfQU5BTE9HX1RWKQorCQkJCXR1bmVyLT5jYXBhYmlsaXR5IHw9IFY0TDJfVFVORVJfQ0FQX05PUk07CiAJCQlpZiAodC0+bW9kZSAhPSBWNEwyX1RVTkVSX1JBRElPKSB7CiAJCQkJdHVuZXItPnJhbmdlbG93ID0gdHZfcmFuZ2VbMF0gKiAxNjsKIAkJCQl0dW5lci0+cmFuZ2VoaWdoID0gdHZfcmFuZ2VbMV0gKiAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYwppbmRleCA3MmUwZjAxLi5hMWFlMDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jCkBAIC04NzcsOCArODc3LDggQEAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9MR19URFZTX0gwNjJGIC0gSU5GSU5FT04gQVRTQyAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90dWE2MDM0X250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDhlLCAweDAxIH0sCi0JeyAxNiAqIDQ1NS4wMCAvKk1IeiovLCAweDhlLCAweDAyIH0sCisJeyAxNiAqIDE2NS4wMCAvKk1IeiovLCAweDhlLCAweDAxIH0sCisJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDhlLCAweDAyIH0sCiAJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDA0IH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCmluZGV4IDM1NmJmZjQuLmMyYjc1NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCkBAIC0xNzA2LDIxICsxNzA2LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JY2FzZSBWSURJT0NfU19BVURJTzoKLQl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICpzYXJnID0gYXJnOwotCi0JCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpIHx8IHNhcmctPmluZGV4ID49IDQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8qIFRoZXJlIGFyZSBmb3VyIGlucHV0czogdHVuZXIsIHJhZGlvLCBleHRlcm4gYW5kIGludGVybi4gKi8KLQkJY2hpcC0+aW5wdXQgPSBzYXJnLT5pbmRleDsKLQkJaWYgKGNoaXAtPm11dGVkKQotCQkJYnJlYWs7Ci0JCWNoaXBfd3JpdGVfbWFza2VkKGNoaXAsIGRlc2MtPmlucHV0cmVnLAotCQkJCWRlc2MtPmlucHV0bWFwW2NoaXAtPmlucHV0XSwgZGVzYy0+aW5wdXRtYXNrKTsKLQkJYnJlYWs7Ci0JfQotCiAJY2FzZSBWSURJT0NfU19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCBlMGQyZmY4Li5iNDYzZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkvKiAxMTAtMTE5ICovCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVGhvbXBzb24gRFRUNzUxMDUifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJDb25leGFudF9DWDI0MTA5In0sCi0JeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVENMIE0yNTIzXzVOX0UifSwKKwl7IFRVTkVSX1RDTF8yMDAyTiwgICAgICJUQ0wgTTI1MjNfNU5fRSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlRDTCBNMjUyM18zREJfRSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlBoaWxpcHMgODI3NUEifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJNaWNyb3R1bmUgTVQyMDYwIn0sCkBAIC03NTcsOSArNzU3LDkgQEAKIHN0YXRpYyBpbnQKIHR2ZWVwcm9tX2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaWYgKGFkYXB0ZXItPmlkICE9IEkyQ19IV19CX0JUODQ4KQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIHR2ZWVwcm9tX2RldGVjdF9jbGllbnQpOworCWlmIChhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCisJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgdHZlZXByb21fZGV0ZWN0X2NsaWVudCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKaW5kZXggNjlkMGZlMS4uZGFiNDk3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCS5kZWZhdWx0X3ZhbHVlID0gMTI4LAogCQkuZmxhZ3MgPSAwLAogCX0sIHsKIAkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCkBAIC02Miw3ICs2Miw3IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwID0gMHgxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCisJCS5kZWZhdWx0X3ZhbHVlID0gMTI4LAogCQkuZmxhZ3MgPSAwLAogCX0sIHsKIAkJIC5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCkBAIC03MSw3ICs3MSw3IEBACiAJCSAubWluaW11bSA9IDAsCiAJCSAubWF4aW11bSA9IDI1NSwKIAkJIC5zdGVwID0gMHgxLAotCQkgLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkgLmRlZmF1bHRfdmFsdWUgPSAxMjgsCiAJCSAuZmxhZ3MgPSAwLAogCX0sIHsKIAkJLmlkID0gVjRMMl9DSURfSFVFLApAQCAtODAsNyArODAsNyBAQAogCQkubWluaW11bSA9IC0xMjgsCiAJCS5tYXhpbXVtID0gMTI3LAogCQkuc3RlcCA9IDB4MSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCiAJCS5mbGFncyA9IDAsCiAJfQogfTsKQEAgLTUwMCwxNiArNTAwLDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX3ZiaV9yYW1fdmFsdWUgdmJpX3JhbV9kZWZhdWx0W10gPQogeworCS8qIEZJWE1FOiBDdXJyZW50IGFwaSBkb2Vzbid0IGhhbmRsZSBhbGwgVkJJIHR5cGVzLCB0aG9zZSBub3QKKwkgICB5ZXQgc3VwcG9ydGVkIGFyZSBwbGFjZWQgdW5kZXIgI2lmIDAgKi8KKyNpZiAwCiAJezB4MDEwLCAvKiBUZWxldGV4dCwgU0VDQU0sIFdTVCBTeXN0ZW0gQSAqLwogCQl7VjRMMl9TTElDRURfVEVMRVRFWFRfU0VDQU0sNiwyMywxfSwKIAkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmLCAweGU3LCAweDJlLCAweDIwLCAweDI2LAogCQkgIDB4ZTYsIDB4YjQsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAgfQogCX0sCisjZW5kaWYKIAl7MHgwMzAsIC8qIFRlbGV0ZXh0LCBQQUwsIFdTVCBTeXN0ZW0gQiAqLwotCQl7VjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IsNiwyMiwxfSwKKwkJe1Y0TDJfU0xJQ0VEX1RFTEVURVhUX0IsNiwyMiwxfSwKIAkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmLCAweDI3LCAweDJlLCAweDIwLCAweDJiLAogCQkgIDB4YTYsIDB4NzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAgfQogCX0sCisjaWYgMAogCXsweDA1MCwgLyogVGVsZXRleHQsIFBBTCwgV1NUIFN5c3RlbSBDICovCiAJCXtWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQyw2LDIyLDF9LAogCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4MmUsIDB4MjAsIDB4MjIsCkBAIC01MzUsNiArNTQwLDcgQEAKIAkJeyAweGFhLCAweDJhLCAweGZmLCAweDNmLCAweDA0LCAweDUxLCAweDZlLCAweDAyLAogCQkgIDB4YTYsIDB4N2IsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAgfQogCX0sCisjZW5kaWYKIAl7MHgwZjAsIC8qIENsb3NlZCBDYXB0aW9uLCBOVFNDICovCiAJCXtWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwyMSwyMSwxfSwKIAkJeyAweGFhLCAweDJhLCAweGZmLCAweDNmLCAweDA0LCAweDUxLCAweDZlLCAweDAyLApAQCAtNTQ1LDYgKzU1MSw3IEBACiAJCXsgMHg1YiwgMHg1NSwgMHhjNSwgMHhmZiwgMHgwMCwgMHg3MSwgMHg2ZSwgMHg0MiwKIAkJICAweGE2LCAweGNkLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAwIH0KIAl9LAorI2lmIDAKIAl7MHgxMzAsIC8qIFdpZGUgU2NyZWVuIFNpZ25hbCwgTlRTQyBDICovCiAJCXtWNEwyX1NMSUNFRF9XU1NfNTI1LDIwLDIwLDF9LAogCQl7IDB4MzgsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4NzEsIDB4NmUsIDB4NDMsCkBAIC01NjAsNiArNTY3LDcgQEAKIAkJeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDZkLCAweDQ5LAogCQkgIDB4NjksIDB4OTQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MDAgfQogCX0sCisjZW5kaWYKIAl7MHgxOTAsIC8qIFZpZGVvIFByb2dyYW0gU3lzdGVtIChWUFMpLCBQQUwgKi8KIAkJe1Y0TDJfU0xJQ0VEX1ZQUywxNiwxNiwwfSwKIAkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmLCAweGJhLCAweGNlLCAweDJiLCAweDBkLApAQCAtODUwLDcgKzg1OCw2IEBACiAKIAljYXNlIDA6CiAJY2FzZSBWSURJT0NfSU5UX1JFU0VUOgotCWNhc2UgREVDT0RFUl9JTklUOgogCQl0dnA1MTUwX3Jlc2V0KGMpOwogCQlicmVhazsKIAljYXNlIFZJRElPQ19TX1NURDoKQEAgLTk0OSw5OSArOTU2LDE1IEBACiAjZW5kaWYKIAogCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JY2FzZSBERUNPREVSX0RVTVA6CiAJCWR1bXBfcmVnKGMpOwogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgorCWNhc2UgVklESU9DX0dfVFVORVI6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKKwkJCWludCBzdGF0dXMgPSB0dnA1MTUwX3JlYWQoYywgMHg4OCk7CiAKLQkJCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8Ci0JCQkgICAgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJCSAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwKLQkJCSAgICBWSURFT19ERUNPREVSX0FVVE8gfCBWSURFT19ERUNPREVSX0NDSVI7Ci0JCQljYXAtPmlucHV0cyA9IDM7Ci0JCQljYXAtPm91dHB1dHMgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQkJewotCQkJaW50ICppYXJnID0gYXJnOwotCQkJaW50IHN0YXR1czsKLQkJCWludCByZXM9MDsKLQkJCXN0YXR1cyA9IHR2cDUxNTBfcmVhZChjLCAweDg4KTsKLQkJCWlmKHN0YXR1cyYweDA4KXsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0JCQl9Ci0JCQlpZihzdGF0dXMmMHgwNCAmJiBzdGF0dXMmMHgwMil7Ci0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7Ci0JCQl9Ci0JCQkqaWFyZz1yZXM7Ci0JCQlicmVhazsKLQkJfQotCi0JY2FzZSBERUNPREVSX1NFVF9HUElPOgotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfVkJJX0JZUEFTUzoKLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JCXsKLQkJCWludCAqaWFyZyA9IGFyZzsKLQotCQkJc3dpdGNoICgqaWFyZykgewotCi0JCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCQlicmVhazsKLQotCQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCQlicmVhazsKLQotCQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJCWJyZWFrOwotCi0JCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJfQotCQkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCQl7Ci0JCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gMykgewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwotCQkJdHZwNTE1MF9zZWxtdXgoYywgZGVjb2Rlci0+aW5wdXQpOwotCi0JCQlicmVhazsKLQkJfQotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgotCQl7Ci0JCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCQlpZiAoKmlhcmcgIT0gMCkgewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQkJewotCQkJaW50ICppYXJnID0gYXJnOwotCi0JCQlkZWNvZGVyLT5lbmFibGUgPSAoKmlhcmcgIT0gMCk7Ci0KLQkJCXR2cDUxNTBfc2VsbXV4KGMsIGRlY29kZXItPmlucHV0KTsKLQorCQkJdnQtPnNpZ25hbCA9ICgoc3RhdHVzICYgMHgwNCkgJiYgKHN0YXR1cyAmIDB4MDIpKSA/IDB4ZmZmZiA6IDB4MDsKIAkJCWJyZWFrOwogCQl9CiAJY2FzZSBWSURJT0NfUVVFUllDVFJMOgpAQCAtMTA4NywzNSArMTAxMCw2IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCi0JCQkJZGVjb2Rlci0+YnJpZ2h0ID0gcGljLT5icmlnaHRuZXNzOwotCQkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9CUklHSFRfQ1RMLAotCQkJCQkgICAgICBkZWNvZGVyLT5icmlnaHQgPj4gOCk7Ci0JCQl9Ci0JCQlpZiAoZGVjb2Rlci0+Y29udHJhc3QgIT0gcGljLT5jb250cmFzdCkgewotCQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCwKLQkJCQkJICAgICAgZGVjb2Rlci0+Y29udHJhc3QgPj4gOCk7Ci0JCQl9Ci0JCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLwotCQkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOwotCQkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCwKLQkJCQkJICAgICAgZGVjb2Rlci0+Y29udHJhc3QgPj4gOCk7Ci0JCQl9Ci0JCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQkJCWRlY29kZXItPmh1ZSA9IHBpYy0+aHVlOwotCQkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9IVUVfQ1RMLAotCQkJCQkgICAgICAoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDgpOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzUyMjAxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYwpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIHVwZDY0MDMxQSAtIE5FQyBFbGVjdHJvbmljcyBHaG9zdCBSZWR1Y3Rpb24gZm9yIE5UU0MgaW4gSmFwYW4KKyAqCisgKiAyMDAzIGJ5IFQuQWRhY2hpIDx0YWRhY2hpQHRhZGFjaGktbmV0LmNvbT4KKyAqIDIwMDMgYnkgVGFrZXJ1IEtPTU9SSVlBIDxrb21vcml5YUBwYWtlbi5vcmc+CisgKiAyMDA2IGJ5IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3VwZDY0MDMxYS5oPgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVhZCByZWdpc3RlcnMgZnVuY3Rpb25zIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKiBiaXQgbWFza3MgKi8KKyNkZWZpbmUgR1JfTU9ERV9NQVNLICAgICAgICAgICAgICAweGMwCisjZGVmaW5lIERJUkVDVF8zRFlDU19DT05ORUNUX01BU0sgMHhjMAorI2RlZmluZSBTWU5DX0NJUkNVSVRfTUFTSyAgICAgICAgIDB4YTAKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJ1UEQ2NDAzMUEgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJULiBBZGFjaGksIFRha2VydSBLT01PUklZQSwgSGFucyBWZXJrdWlsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyNCA+PiAxLCAweDI2ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CisKKworSTJDX0NMSUVOVF9JTlNNT0Q7CisKK2VudW0geworCVIwMCA9IDAsIFIwMSwgUjAyLCBSMDMsIFIwNCwKKwlSMDUsIFIwNiwgUjA3LCBSMDgsIFIwOSwKKwlSMEEsIFIwQiwgUjBDLCBSMEQsIFIwRSwgUjBGLAorCS8qIHVudXNlZCByZWdpc3RlcnMKKwkgUjEwLCBSMTEsIFIxMiwgUjEzLCBSMTQsCisJIFIxNSwgUjE2LCBSMTcsCisJICovCisJVE9UX1JFR1MKK307CisKK3N0cnVjdCB1cGQ2NDAzMWFfc3RhdGUgeworCXU4IHJlZ3NbVE9UX1JFR1NdOworCXU4IGdyX21vZGU7CisJdTggZGlyZWN0XzNkeWNzX2Nvbm5lY3Q7CisJdTggZXh0X2NvbXBfc3luYzsKKwl1OCBleHRfdmVydF9zeW5jOworfTsKKworc3RhdGljIHU4IHVwZDY0MDMxYV9pbml0W10gPSB7CisJMHgwMCwgMHhiOCwgMHg0OCwgMHhkMiwgMHhlNiwKKwkweDAzLCAweDEwLCAweDBiLCAweGFmLCAweDdmLAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4NWUsIDB4MDAsCisJMHhkMAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB1OCB1cGQ2NDAzMWFfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCit7CisJdTggYnVmWzJdOworCisJaWYgKHJlZyA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIDB4ZmY7CisJaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmLCAyKTsKKwlyZXR1cm4gYnVmW3JlZ107Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCB1cGQ2NDAzMWFfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWwpCit7CisJdTggYnVmWzJdOworCisJYnVmWzBdID0gcmVnOworCWJ1ZlsxXSA9IHZhbDsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ3cml0aW5nIHJlZyBhZGRyOiAlMDJYIHZhbDogJTAyWFxuIiwgcmVnLCB2YWwpOworCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpICE9IDIpCisJCXY0bF9lcnIoY2xpZW50LCAiSS9PIGVycm9yIHdyaXRlIDB4JTAyeC8weCUwMnhcbiIsIHJlZywgdmFsKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBpbnB1dCBjaGFuZ2VkIGR1ZSB0byBuZXcgaW5wdXQgb3IgY2hhbm5lbCBjaGFuZ2VkICovCitzdGF0aWMgdm9pZCB1cGQ2NDAzMWFfY2hhbmdlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHVwZDY0MDMxYV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1OCByZWcgPSBzdGF0ZS0+cmVnc1tSMDBdOworCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hhbmdlZCBpbnB1dCBvciBjaGFubmVsXG4iKTsKKwl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCBSMDAsIHJlZyB8IDB4MTApOworCXVwZDY0MDMxYV93cml0ZShjbGllbnQsIFIwMCwgcmVnICYgfjB4MTApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB1cGQ2NDAzMWFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHVwZDY0MDMxYV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJCXVwZDY0MDMxYV9jaGFuZ2UoY2xpZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgorCQlyb3V0ZS0+aW5wdXQgPSAoc3RhdGUtPmdyX21vZGUgPj4gNikgfAorCQkJKHN0YXRlLT5kaXJlY3RfM2R5Y3NfY29ubmVjdCA+PiA0KSB8CisJCQkoc3RhdGUtPmV4dF9jb21wX3N5bmMgPj4gMSkgfAorCQkJKHN0YXRlLT5leHRfdmVydF9zeW5jID4+IDIpOworCQlyb3V0ZS0+b3V0cHV0ID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgorCXsKKwkJdTggcjAwLCByMDUsIHIwODsKKworCQlzdGF0ZS0+Z3JfbW9kZSA9IChyb3V0ZS0+aW5wdXQgJiAzKSA8PCA2OworCQlzdGF0ZS0+ZGlyZWN0XzNkeWNzX2Nvbm5lY3QgPSAocm91dGUtPmlucHV0ICYgMHhjKSA8PCA0OworCQlzdGF0ZS0+ZXh0X2NvbXBfc3luYyA9IChyb3V0ZS0+aW5wdXQgJiBVUEQ2NDAzMUFfQ09NUE9TSVRFX0VYVEVSTkFMKSA8PCAxOworCQlzdGF0ZS0+ZXh0X3ZlcnRfc3luYyA9IChyb3V0ZS0+aW5wdXQgJiBVUEQ2NDAzMUFfVkVSVElDQUxfRVhURVJOQUwpIDw8IDI7CisJCXIwMCA9IChzdGF0ZS0+cmVnc1tSMDBdICYgfkdSX01PREVfTUFTSykgfCBzdGF0ZS0+Z3JfbW9kZTsKKwkJcjA1ID0gKHN0YXRlLT5yZWdzW1IwMF0gJiB+U1lOQ19DSVJDVUlUX01BU0spIHwKKwkJCXN0YXRlLT5leHRfY29tcF9zeW5jIHwgc3RhdGUtPmV4dF92ZXJ0X3N5bmM7CisJCXIwOCA9IChzdGF0ZS0+cmVnc1tSMDhdICYgfkRJUkVDVF8zRFlDU19DT05ORUNUX01BU0spIHwKKwkJCXN0YXRlLT5kaXJlY3RfM2R5Y3NfY29ubmVjdDsKKwkJdXBkNjQwMzFhX3dyaXRlKGNsaWVudCwgUjAwLCByMDApOworCQl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCBSMDUsIHIwNSk7CisJCXVwZDY0MDMxYV93cml0ZShjbGllbnQsIFIwOCwgcjA4KTsKKwkJdXBkNjQwMzFhX2NoYW5nZShjbGllbnQpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgorCQl2NGxfaW5mbyhjbGllbnQsICJTdGF0dXM6IFNBMDA9MHglMDJ4IFNBMDE9MHglMDJ4XG4iLAorCQkJdXBkNjQwMzFhX3JlYWQoY2xpZW50LCAwKSwgdXBkNjQwMzFhX3JlYWQoY2xpZW50LCAxKSk7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgorCXsKKwkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKKworCQlpZiAocmVnLT5pMmNfaWQgIT0gSTJDX0RSSVZFUklEX1VQRDY0MDMxQSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWctPnZhbCA9IHVwZDY0MDMxYV9yZWFkKGNsaWVudCwgcmVnLT5yZWcgJiAweGZmKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NfSU5UX1NfUkVHSVNURVI6CisJeworCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOworCQl1OCBhZGRyID0gcmVnLT5yZWcgJiAweGZmOworCQl1OCB2YWwgPSByZWctPnZhbCAmIDB4ZmY7CisKKwkJaWYgKHJlZy0+aTJjX2lkICE9IEkyQ19EUklWRVJJRF9VUEQ2NDAzMUEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJdXBkNjQwMzFhX3dyaXRlKGNsaWVudCwgYWRkciwgdmFsKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBpMmMgaW1wbGVtZW50YXRpb24gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXI7CisKK3N0YXRpYyBpbnQgdXBkNjQwMzFhX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB1cGQ2NDAzMWFfc3RhdGUgKnN0YXRlOworCWludCBpOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyOworCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAidVBENjQwMzFBIik7CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOworCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXBkNjQwMzFhX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKKwltZW1jcHkoc3RhdGUtPnJlZ3MsIHVwZDY0MDMxYV9pbml0LCBzaXplb2Yoc3RhdGUtPnJlZ3MpKTsKKwlzdGF0ZS0+Z3JfbW9kZSA9IFVQRDY0MDMxQV9HUl9PTiA8PCA2OworCXN0YXRlLT5kaXJlY3RfM2R5Y3NfY29ubmVjdCA9IFVQRDY0MDMxQV8zRFlDU19DT01QT1NJVEUgPDwgNDsKKwlzdGF0ZS0+ZXh0X2NvbXBfc3luYyA9IHN0YXRlLT5leHRfdmVydF9zeW5jID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgVE9UX1JFR1M7IGkrKykgeworCQl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCBpLCBzdGF0ZS0+cmVnc1tpXSk7CisJfQorCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZDY0MDMxYV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKKwkJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCB1cGQ2NDAzMWFfYXR0YWNoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGQ2NDAzMWFfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IGVycjsKKworCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidXBkNjQwMzFhIiwKKwl9LAorCS5pZCA9IEkyQ19EUklWRVJJRF9VUEQ2NDAzMUEsCisJLmF0dGFjaF9hZGFwdGVyID0gdXBkNjQwMzFhX3Byb2JlLAorCS5kZXRhY2hfY2xpZW50ICA9IHVwZDY0MDMxYV9kZXRhY2gsCisJLmNvbW1hbmQgPSB1cGQ2NDAzMWFfY29tbWFuZCwKK307CisKKworc3RhdGljIGludCBfX2luaXQgdXBkNjQwMzFhX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVwZDY0MDMxYV9leGl0X21vZHVsZSh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXBkNjQwMzFhX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHVwZDY0MDMxYV9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNhN2ZmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIHVwZDY0MDh4IC0gTkVDIEVsZWN0cm9uaWNzIDMtRGltZW5zaW9uYWwgWS9DIHNlcGFyYXRpb24gZHJpdmVyCisgKgorICogMjAwMyBieSBULkFkYWNoaSAodGFkYWNoaUB0YWRhY2hpLW5ldC5jb20pCisgKiAyMDAzIGJ5IFRha2VydSBLT01PUklZQSA8a29tb3JpeWFAcGFrZW4ub3JnPgorICogMjAwNiBieSBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3VwZDY0MDgzLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigidVBENjQwODMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJULiBBZGFjaGksIFRha2VydSBLT01PUklZQSwgSGFucyBWZXJrdWlsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4YjggPj4gMSwgMHhiYSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OworCisKK0kyQ19DTElFTlRfSU5TTU9EOworCitlbnVtIHsKKwlSMDAgPSAwLCBSMDEsIFIwMiwgUjAzLCBSMDQsCisJUjA1LCBSMDYsIFIwNywgUjA4LCBSMDksCisJUjBBLCBSMEIsIFIwQywgUjBELCBSMEUsIFIwRiwKKwlSMTAsIFIxMSwgUjEyLCBSMTMsIFIxNCwKKwlSMTUsIFIxNiwKKwlUT1RfUkVHUworfTsKKworc3RydWN0IHVwZDY0MDgzX3N0YXRlIHsKKwl1OCBtb2RlOworCXU4IGV4dF95X2FkYzsKKwl1OCByZWdzW1RPVF9SRUdTXTsKK307CisKKy8qIEluaXRpYWwgdmFsdWVzIHdoZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorICAgTkVDIHVwZDY0MDMxYSBnaG9zdCByZWR1Y3Rpb24gY2hpcC4gKi8KK3N0YXRpYyB1OCB1cGQ2NDA4M19pbml0W10gPSB7CisJMHgxZiwgMHgwMSwgMHhhMCwgMHgyZCwgMHgyOSwgIC8qIHdlIHVzZSBFWENTUz0wICovCisJMHgzNiwgMHhkZCwgMHgwNSwgMHg1NiwgMHg0OCwKKwkweDAwLCAweDNhLCAweGEwLCAweDA1LCAweDA4LAorCTB4NDQsIDB4NjAsIDB4MDgsIDB4NTIsIDB4ZjgsCisJMHg1MywgMHg2MCwgMHgxMAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIHVwZDY0MDgzX2xvZ19zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwl1OCBidWZbN107CisKKwlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIDcpOworCXY0bF9pbmZvKGNsaWVudCwgIlN0YXR1czogU0EwMD0lMDJ4IFNBMDE9JTAyeCBTQTAyPSUwMnggU0EwMz0lMDJ4ICIKKwkJICAgICAgIlNBMDQ9JTAyeCBTQTA1PSUwMnggU0EwNj0lMDJ4XG4iLAorCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwgYnVmWzVdLCBidWZbNl0pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgdXBkNjQwODNfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWwpCit7CisJdTggYnVmWzJdOworCisJYnVmWzBdID0gcmVnOworCWJ1ZlsxXSA9IHZhbDsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ3cml0aW5nIHJlZyBhZGRyOiAlMDJ4IHZhbDogJTAyeFxuIiwgcmVnLCB2YWwpOworCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpICE9IDIpCisJCXY0bF9lcnIoY2xpZW50LCAiSS9PIGVycm9yIHdyaXRlIDB4JTAyeC8weCUwMnhcbiIsIHJlZywgdmFsKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgdTggdXBkNjQwODNfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCit7CisJdTggYnVmWzddOworCisJaWYgKHJlZyA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIDB4ZmY7CisJaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmLCBzaXplb2YoYnVmKSk7CisJcmV0dXJuIGJ1ZltyZWddOworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHVwZDY0MDgzX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB1cGQ2NDA4M19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKKwkJcm91dGUtPmlucHV0ID0gKHN0YXRlLT5tb2RlID4+IDYpIHwgKHN0YXRlLT5leHRfeV9hZGMgPj4gMyk7CisJCXJvdXRlLT5vdXRwdXQgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6CisJeworCQl1OCByMDAsIHIwMjsKKworCQlpZiAocm91dGUtPmlucHV0ID4gNyB8fCAocm91dGUtPmlucHV0ICYgNikgPT0gNikKKwkJCXJldHVybiAtRUlOVkFMOworCQlzdGF0ZS0+bW9kZSA9IChyb3V0ZS0+aW5wdXQgJiAzKSA8PCA2OworCQlzdGF0ZS0+ZXh0X3lfYWRjID0gKHJvdXRlLT5pbnB1dCAmIFVQRDY0MDgzX0VYVF9ZX0FEQykgPDwgMzsKKwkJcjAwID0gKHN0YXRlLT5yZWdzW1IwMF0gJiB+KDMgPDwgNikpIHwgc3RhdGUtPm1vZGU7CisJCXIwMiA9IChzdGF0ZS0+cmVnc1tSMDJdICYgfigxIDw8IDUpKSB8IHN0YXRlLT5leHRfeV9hZGM7CisJCXVwZDY0MDgzX3dyaXRlKGNsaWVudCwgUjAwLCByMDApOworCQl1cGQ2NDA4M193cml0ZShjbGllbnQsIFIwMiwgcjAyKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKKwkJdXBkNjQwODNfbG9nX3N0YXR1cyhjbGllbnQpOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwljYXNlIFZJRElPQ19JTlRfR19SRUdJU1RFUjoKKwl7CisJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7CisKKwkJaWYgKHJlZy0+aTJjX2lkICE9IEkyQ19EUklWRVJJRF9VUEQ2NDA4MykKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWctPnZhbCA9IHVwZDY0MDgzX3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19JTlRfU19SRUdJU1RFUjoKKwl7CisJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7CisJCXU4IGFkZHIgPSByZWctPnJlZyAmIDB4ZmY7CisJCXU4IHZhbCA9IHJlZy0+dmFsICYgMHhmZjsKKworCQlpZiAocmVnLT5pMmNfaWQgIT0gSTJDX0RSSVZFUklEX1VQRDY0MDgzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJCXVwZDY0MDgzX3dyaXRlKGNsaWVudCwgYWRkciwgdmFsKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBpMmMgaW1wbGVtZW50YXRpb24gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXI7CisKK3N0YXRpYyBpbnQgdXBkNjQwODNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHVwZDY0MDgzX3N0YXRlICpzdGF0ZTsKKwlpbnQgaTsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbGllbnQtPmFkZHIgPSBhZGRyZXNzOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcjsKKwlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgInVQRDY0MDgzIik7CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOworCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXBkNjQwODNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOworCS8qIEluaXRpYWxseSBhc3N1bWUgdGhhdCBhIGdob3N0IHJlZHVjdGlvbiBjaGlwIGlzIHByZXNlbnQgKi8KKwlzdGF0ZS0+bW9kZSA9IDA7ICAvKiBZQ1MgbW9kZSAqLworCXN0YXRlLT5leHRfeV9hZGMgPSAoMSA8PCA1KTsKKwltZW1jcHkoc3RhdGUtPnJlZ3MsIHVwZDY0MDgzX2luaXQsIFRPVF9SRUdTKTsKKwlmb3IgKGkgPSAwOyBpIDwgVE9UX1JFR1M7IGkrKykgeworCQl1cGQ2NDA4M193cml0ZShjbGllbnQsIGksIHN0YXRlLT5yZWdzW2ldKTsKKwl9CisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZDY0MDgzX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQorCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIHVwZDY0MDgzX2F0dGFjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkNjQwODNfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IGVycjsKKworCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidXBkNjQwODMiLAorCX0sCisJLmlkID0gSTJDX0RSSVZFUklEX1VQRDY0MDgzLAorCS5hdHRhY2hfYWRhcHRlciA9IHVwZDY0MDgzX3Byb2JlLAorCS5kZXRhY2hfY2xpZW50ICA9IHVwZDY0MDgzX2RldGFjaCwKKwkuY29tbWFuZCA9IHVwZDY0MDgzX2NvbW1hbmQsCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IHVwZDY0MDgzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVwZDY0MDgzX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1cGQ2NDA4M19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdCh1cGQ2NDA4M19leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkyNjlhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZwpAQCAtMCwwICsxLDM4IEBACitjb25maWcgVklERU9fVVNCVklERU8KKwl0cmlzdGF0ZQorCitjb25maWcgVVNCX1ZJQ0FNCisJdHJpc3RhdGUgIlVTQiAzY29tIEhvbWVDb25uZWN0IChha2EgdmljYW0pIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgVklERU9fVVNCVklERU8KKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIDNjb20gaG9tZWNvbm5lY3QgY2FtZXJhICh2aWNhbSkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpY2FtLgorCitjb25maWcgVVNCX0lCTUNBTQorCXRyaXN0YXRlICJVU0IgSUJNIChYaXJsaW5rKSBDLWl0IENhbWVyYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDEKKwlzZWxlY3QgVklERU9fVVNCVklERU8KKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBJQk0gIkMtSXQiIGNhbWVyYSwgYWxzbyBrbm93biBhcworCSAgIlhpcmxpbmsgUEMgQ2FtZXJhIiB0byB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlibWNhbS4KKworCSAgVGhpcyBjYW1lcmEgaGFzIHNldmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoCisJICBjYW4gYmUgc3BlY2lmaWVkIHdoZW4geW91IGxvYWQgdGhlIG1vZHVsZS4gUmVhZAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9pYm1jYW0udHh0PiB0byBsZWFybiBtb3JlLgorCitjb25maWcgVVNCX0tPTklDQVdDCisJdHJpc3RhdGUgIlVTQiBLb25pY2EgV2ViY2FtIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCXNlbGVjdCBWSURFT19VU0JWSURFTworCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3Igd2ViY2FtcyBiYXNlZCBvbiBhIEtvbmljYQorCSAgY2hpcHNldC4gVGhpcyBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIEludGVsIFlDNzYgd2ViY2FtLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrb25pY2F3Yy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL01ha2VmaWxlCmluZGV4IGVkNDEwYTUuLmJiNTJlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai0kKENPTkZJR19VU0JfSUJNQ0FNKSAgICAgICAgKz0gaWJtY2FtLm8gdXNidmlkZW8ubyB1bHRyYWNhbS5vCi1vYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IGtvbmljYXdjLm8gdXNidmlkZW8ubwotb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB2aWNhbS5vIHVzYnZpZGVvLm8KLQorb2JqLSQoQ09ORklHX1ZJREVPX1VTQlZJREVPKSAgICArPSB1c2J2aWRlby5vCitvYmotJChDT05GSUdfVVNCX0lCTUNBTSkgICAgICAgICs9IGlibWNhbS5vIHVsdHJhY2FtLm8KK29iai0kKENPTkZJR19VU0JfS09OSUNBV0MpICAgICAgKz0ga29uaWNhd2Mubworb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB2aWNhbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggMTFhOTdmMy4uZDMzMGZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtMzE3LDYgKzMxNyw3IEBACiAJW19JT0NfTlIoVFVORVJfU0VUX1NUQU5EQlkpXSAgICAgICAgICAgPSAiVFVORVJfU0VUX1NUQU5EQlkiLAogCVtfSU9DX05SKFREQTk4ODdfU0VUX0NPTkZJRyldICAgICAgICAgID0gIlREQTk4ODdfU0VUX0NPTkZJRyIsCiAKKwlbX0lPQ19OUihWSURJT0NfSU5UX1NfVFVORVJfTU9ERSldICAgICA9ICJWSURJT0NfSU5UX1NfVFVORVJfTU9ERSIsCiAJW19JT0NfTlIoVklESU9DX0lOVF9TX1JFR0lTVEVSKV0gICAgICAgPSAiVklESU9DX0lOVF9TX1JFR0lTVEVSIiwKIAlbX0lPQ19OUihWSURJT0NfSU5UX0dfUkVHSVNURVIpXSAgICAgICA9ICJWSURJT0NfSU5UX0dfUkVHSVNURVIiLAogCVtfSU9DX05SKFZJRElPQ19JTlRfUkVTRVQpXSAgICAgICAgICAgID0gIlZJRElPQ19JTlRfUkVTRVQiLApAQCAtMzI1LDcgKzMyNiwxMiBAQAogCVtfSU9DX05SKFZJRElPQ19JTlRfU19WQklfREFUQSldICAgICAgID0gIlZJRElPQ19JTlRfU19WQklfREFUQSIsCiAJW19JT0NfTlIoVklESU9DX0lOVF9HX1ZCSV9EQVRBKV0gICAgICAgPSAiVklESU9DX0lOVF9HX1ZCSV9EQVRBIiwKIAlbX0lPQ19OUihWSURJT0NfSU5UX0dfQ0hJUF9JREVOVCldICAgICA9ICJWSURJT0NfSU5UX0dfQ0hJUF9JREVOVCIsCi0JW19JT0NfTlIoVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUSldICAgPSAiVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUSIKKwlbX0lPQ19OUihWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRKV0gICA9ICJWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX1NfU1RBTkRCWSldICAgICAgICA9ICJWSURJT0NfSU5UX1NfU1RBTkRCWSIsCisJW19JT0NfTlIoVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcpXSAgPSAiVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkciLAorCVtfSU9DX05SKFZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HKV0gID0gIlZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX1NfVklERU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX1NfVklERU9fUk9VVElORyIsCisJW19JT0NfTlIoVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkcpXSAgPSAiVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkciCiB9OwogI2RlZmluZSBWNEwyX0lOVF9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2ludF9pb2N0bHMpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCmluZGV4IGQyY2EwZjAuLmFjYzVlYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYwpAQCAtMzk5LDE5ICszOTksMjUgQEAKIGludCB2aWRlb2J1Zl9wY2lfZG1hX21hcChzdHJ1Y3QgcGNpX2RldiAqcGNpLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKIHsKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgcTsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHFvcHM7CiAKIAlxLmRldj1wY2k7Ci0JcS5vcHMtPnZiX21hcF9zZz0odmJfbWFwX3NnX3QgKilwY2lfdW5tYXBfc2c7CisJcW9wcy52Yl9tYXBfc2c9KHZiX21hcF9zZ190ICopcGNpX21hcF9zZzsKKwlxb3BzLnZiX3VubWFwX3NnPSh2Yl9tYXBfc2dfdCAqKXBjaV91bm1hcF9zZzsKKwlxLm9wcyA9ICZxb3BzOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9kbWFfdW5tYXAoJnEsZG1hKSk7CisJcmV0dXJuICh2aWRlb2J1Zl9kbWFfbWFwKCZxLGRtYSkpOwogfQogCiBpbnQgdmlkZW9idWZfcGNpX2RtYV91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGNpLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKIHsKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgcTsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHFvcHM7CiAKIAlxLmRldj1wY2k7Ci0JcS5vcHMtPnZiX21hcF9zZz0odmJfbWFwX3NnX3QgKilwY2lfdW5tYXBfc2c7CisJcW9wcy52Yl9tYXBfc2c9KHZiX21hcF9zZ190ICopcGNpX21hcF9zZzsKKwlxb3BzLnZiX3VubWFwX3NnPSh2Yl9tYXBfc2dfdCAqKXBjaV91bm1hcF9zZzsKKwlxLm9wcyA9ICZxb3BzOwogCiAJcmV0dXJuICh2aWRlb2J1Zl9kbWFfdW5tYXAoJnEsZG1hKSk7CiB9CkBAIC05MjMsNyArOTI5LDcgQEAKIAkJLyogbmVlZCB0byBjYXB0dXJlIGEgbmV3IGZyYW1lICovCiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCXEtPnJlYWRfYnVmID0gdmlkZW9idWZfYWxsb2MocS0+bXNpemUpOwotCQlkcHJpbnRrKDEsInZpZGVvIGFsbG9jPTB4JTA4eFxuIiwodW5zaWduZWQgaW50KSBxLT5yZWFkX2J1Zik7CisJCWRwcmludGsoMSwidmlkZW8gYWxsb2M9MHglcFxuIiwgcS0+cmVhZF9idWYpOwogCQlpZiAoTlVMTCA9PSBxLT5yZWFkX2J1ZikKIAkJCWdvdG8gZG9uZTsKIAkJcS0+cmVhZF9idWYtPm1lbW9yeSA9IFY0TDJfTUVNT1JZX1VTRVJQVFI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDVlODEzNDAuLjc3OWRiMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCkBAIC0yNiw2ICsyNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlby1idWYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliNTljMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiB3bTg3MzkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVC4gQWRhY2hpIDx0YWRhY2hpQHRhZGFjaGktbmV0LmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKiAtIENsZWFudXAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorCitNT0RVTEVfREVTQ1JJUFRJT04oIndtODczOSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlQuIEFkYWNoaSwgSGFucyBWZXJrdWlsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgzNCA+PiAxLCAweDM2ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CisKKworSTJDX0NMSUVOVF9JTlNNT0Q7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitlbnVtIHsKKwlSMCA9IDAsIFIxLAorCVI1ID0gNSwgUjYsIFI3LCBSOCwgUjksIFIxNSA9IDE1LAorCVRPVF9SRUdTCit9OworCitzdHJ1Y3Qgd204NzM5X3N0YXRlIHsKKwl1MzIgY2xvY2tfZnJlcTsKKwl1OCBtdXRlZDsKKwl1MTYgdm9sdW1lOworCXUxNiBiYWxhbmNlOworCXU4IHZvbF9sOyAJCS8qICsxMmRCIHRvIC0zNC41ZEIgMS41ZEIgc3RlcCAoNWJpdCkgZGVmOjBkQiAqLworCXU4IHZvbF9yOyAJCS8qICsxMmRCIHRvIC0zNC41ZEIgMS41ZEIgc3RlcCAoNWJpdCkgZGVmOjBkQiAqLworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgd204NzM5X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsIHUxNiB2YWwpCit7CisJaW50IGk7CisKKwlpZiAocmVnIDwgMCB8fCByZWcgPj0gVE9UX1JFR1MpIHsKKwkJdjRsX2VycihjbGllbnQsICJJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgcmVnKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIndyaXRlOiAlMDJ4ICUwMnhcbiIsIHJlZywgdmFsKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAocmVnIDw8IDEpIHwKKwkJCQkJKHZhbCA+PiA4KSwgdmFsICYgMHhmZikgPT0gMCkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJdjRsX2VycihjbGllbnQsICJJMkM6IGNhbm5vdCB3cml0ZSAlMDN4IHRvIHJlZ2lzdGVyIFIlZFxuIiwgdmFsLCByZWcpOworCXJldHVybiAtMTsKK30KKworLyogd3JpdGUgcmVncyB0byBzZXQgYXVkaW8gdm9sdW1lIGV0YyAqLworc3RhdGljIHZvaWQgd204NzM5X3NldF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTE2IG11dGUgPSBzdGF0ZS0+bXV0ZWQgPyAweDgwIDogMDsKKworCS8qIFZvbHVtZSBzZXR0aW5nOiBiaXRzIDAtNCwgMHgxZiA9IDEyIGRCLCAweDAwID0gLTM0LjUgZEIKKwkgKiBEZWZhdWx0IHNldHRpbmc6IDB4MTcgPSAwIGRCCisJICovCisJd204NzM5X3dyaXRlKGNsaWVudCwgUjAsIChzdGF0ZS0+dm9sX2wgJiAweDFmKSB8IG11dGUpOworCXdtODczOV93cml0ZShjbGllbnQsIFIxLCAoc3RhdGUtPnZvbF9yICYgMHgxZikgfCBtdXRlKTsKK30KKworc3RhdGljIGludCB3bTg3MzlfZ2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+bXV0ZWQ7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWN0cmwtPnZhbHVlID0gc3RhdGUtPnZvbHVtZTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCWN0cmwtPnZhbHVlID0gc3RhdGUtPmJhbGFuY2U7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODczOV9zZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdW5zaWduZWQgaW50IHdvcmtfbCwgd29ya19yOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJc3RhdGUtPm11dGVkID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXN0YXRlLT52b2x1bWUgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCXN0YXRlLT5iYWxhbmNlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbm9ybWFsaXplICggNjU1MzUgdG8gMCAtPiAzMSB0byAwICgxMmRCIHRvIC0zNC41ZEIpICkgKi8KKwl3b3JrX2wgPSAobWluKDY1NTM2IC0gc3RhdGUtPmJhbGFuY2UsIDMyNzY4KSAqIHN0YXRlLT52b2x1bWUpIC8gMzI3Njg7CisJd29ya19yID0gKG1pbihzdGF0ZS0+YmFsYW5jZSwgKHUxNikzMjc2OCkgKiBzdGF0ZS0+dm9sdW1lKSAvIDMyNzY4OworCisJc3RhdGUtPnZvbF9sID0gKGxvbmcpd29ya19sICogMzEgLyA2NTUzNTsKKwlzdGF0ZS0+dm9sX3IgPSAobG9uZyl3b3JrX3IgKiAzMSAvIDY1NTM1OworCisJLyogc2V0IGF1ZGlvIHZvbHVtZSBldGMuICovCisJd204NzM5X3NldF9hdWRpbyhjbGllbnQpOworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB3bTg3MzlfcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAorCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCisJCS5zdGVwICAgICAgICAgID0gNjU1MzUvMTAwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDU4ODgwLAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAorCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19CQUxBTkNFLAorCQkubmFtZSAgICAgICAgICA9ICJCYWxhbmNlIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAorCQkuc3RlcCAgICAgICAgICA9IDY1NTM1LzEwMCwKKwkJLmRlZmF1bHRfdmFsdWUgPSAzMjc2OCwKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfQorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgd204NzM5X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgorCXsKKwkJdTMyIGF1ZGlvZnJlcSA9ICoodTMyICopYXJnOworCisJCXN0YXRlLT5jbG9ja19mcmVxID0gYXVkaW9mcmVxOworCQl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSOSwgMHgwMDApOwkvKiBkZS1hY3RpdmF0ZSAqLworCQlzd2l0Y2ggKGF1ZGlvZnJlcSkgeworCQljYXNlIDQ0MTAwOgorCQkJd204NzM5X3dyaXRlKGNsaWVudCwgUjgsIDB4MDIwKTsgLyogMjU2ZnBzLCBmcz00NC4xayAgICAgKi8KKwkJCWJyZWFrOworCQljYXNlIDQ4MDAwOgorCQkJd204NzM5X3dyaXRlKGNsaWVudCwgUjgsIDB4MDAwKTsgLyogMjU2ZnBzLCBmcz00OGsgICAgICAgKi8KKwkJCWJyZWFrOworCQljYXNlIDMyMDAwOgorCQkJd204NzM5X3dyaXRlKGNsaWVudCwgUjgsIDB4MDE4KTsgLyogMjU2ZnBzLCBmcz0zMmsgICAgICAgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJd204NzM5X3dyaXRlKGNsaWVudCwgUjksIDB4MDAxKTsJLyogYWN0aXZhdGUgKi8KKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NfR19DVFJMOgorCQlyZXR1cm4gd204NzM5X2dldF9jdHJsKGNsaWVudCwgYXJnKTsKKworCWNhc2UgVklESU9DX1NfQ1RSTDoKKwkJcmV0dXJuIHdtODczOV9zZXRfY3RybChjbGllbnQsIGFyZyk7CisKKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzlfcWN0cmwpOyBpKyspCisJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSB3bTg3MzlfcWN0cmxbaV0uaWQpIHsKKwkJCQltZW1jcHkocWMsICZ3bTg3MzlfcWN0cmxbaV0sIHNpemVvZigqcWMpKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKKwkJdjRsX2luZm8oY2xpZW50LCAiRnJlcXVlbmN5OiAldSBIelxuIiwgc3RhdGUtPmNsb2NrX2ZyZXEpOworCQl2NGxfaW5mbyhjbGllbnQsICJWb2x1bWUgTDogICUwMnglc1xuIiwgc3RhdGUtPnZvbF9sICYgMHgxZiwKKwkJCQlzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOworCQl2NGxfaW5mbyhjbGllbnQsICJWb2x1bWUgUjogICUwMnglc1xuIiwgc3RhdGUtPnZvbF9yICYgMHgxZiwKKwkJCQlzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyOworCitzdGF0aWMgaW50IHdtODczOV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZTsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXI7CisJc25wcmludGYoY2xpZW50LT5uYW1lLCBzaXplb2YoY2xpZW50LT5uYW1lKSAtIDEsICJ3bTg3MzkiKTsKKworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CisKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3Mzlfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3RhdGUtPnZvbF9sID0gMHgxNzsgLyogMGRCICovCisJc3RhdGUtPnZvbF9yID0gMHgxNzsgLyogMGRCICovCisJc3RhdGUtPm11dGVkID0gMDsKKwlzdGF0ZS0+YmFsYW5jZSA9IDMyNzY4OworCS8qIG5vcm1hbGl6ZSAoMTJkQigzMSkgdG8gLTM0LjVkQigwKSBbMGRCKDIzKV0gLT4gNjU1MzUgdG8gMCkgKi8KKwlzdGF0ZS0+dm9sdW1lID0gKChsb25nKXN0YXRlLT52b2xfbCArIDEpICogNjU1MzUgLyAzMTsKKwlzdGF0ZS0+Y2xvY2tfZnJlcSA9IDQ4MDAwOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKKworCS8qIGluaXRpYWxpemUgd204NzM5ICovCisJd204NzM5X3dyaXRlKGNsaWVudCwgUjE1LCAweDAwKTsgLyogcmVzZXQgKi8KKwl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSNSwgMHgwMDApOyAvKiBmaWx0ZXIgc2V0dGluZywgaGlnaCBwYXRoLCBvZmZldCBjbGVhciAqLworCXdtODczOV93cml0ZShjbGllbnQsIFI2LCAweDAwMCk7IC8qIEFEQywgT1NDLCBQb3dlciBPZmYgbW9kZSBEaXNhYmxlICovCisJd204NzM5X3dyaXRlKGNsaWVudCwgUjcsIDB4MDQ5KTsgLyogRGlnaXRhbCBBdWRpbyBpbnRlcmZhY2UgZm9ybWF0ICovCisJCQkJCSAvKiBFbmFibGUgTWFzdGVyIG1vZGUgKi8KKwkJCQkJIC8qIDI0IGJpdCwgTVNCIGZpcnN0L2xlZnQganVzdGlmaWVkICovCisJd204NzM5X3dyaXRlKGNsaWVudCwgUjgsIDB4MDAwKTsgLyogc2FtcGxpbmcgY29udHJvbCAqLworCQkJCQkgLyogbm9ybWFsLCAyNTZmcywgNDhLSHogc2FtcGxpbmcgcmF0ZSAqLworCXdtODczOV93cml0ZShjbGllbnQsIFI5LCAweDAwMSk7IC8qIGFjdGl2YXRlICovCisJd204NzM5X3NldF9hdWRpbyhjbGllbnQpOyAJIC8qIHNldCB2b2x1bWUvbXV0ZSAqLworCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODczOV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKKwkJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCB3bTg3MzlfYXR0YWNoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3MzlfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IGVycjsKKworCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204NzM5IiwKKwl9LAorCS5pZCA9IEkyQ19EUklWRVJJRF9XTTg3MzksCisJLmF0dGFjaF9hZGFwdGVyID0gd204NzM5X3Byb2JlLAorCS5kZXRhY2hfY2xpZW50ICA9IHdtODczOV9kZXRhY2gsCisJLmNvbW1hbmQgPSB3bTg3MzlfY29tbWFuZCwKK307CisKKworc3RhdGljIGludCBfX2luaXQgd204NzM5X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdtODczOV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod204NzM5X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHdtODczOV9jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTU4MzNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZwpAQCAtMCwwICsxLDExIEBACitjb25maWcgVVNCX1pDMDMwMQorCXRyaXN0YXRlICJVU0IgWkMwMzAxIEltYWdlIFByb2Nlc3NvciBhbmQgQ29udHJvbCBDaGlwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgWkMwMzAxCisJICBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcC4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvemMwMzAxLnR4dD4gZm9yIG1vcmUgaW5mby4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgemMwMzAxLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCAyNjY0MTRjLi5hMzAwODQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtMTE4OSw3ICsxMTg5LDYgQEAKIAlpb2MtPmRpYWdQZW5kaW5nID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmaW9jLT5kaWFnTG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmlvYy0+ZmNfcmVzY2FuX3dvcmtfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmlvYy0+ZmNfcnBvcnRfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmlvYy0+aW5pdGlhbGl6aW5nX2hiYV9sb2NrKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGV2ZW50IGxvZ2dpbmcuCkBAIC0xNjA2LDYgKzE2MDUsMjEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50CittcHRfc2lnbmFsX3Jlc2V0KGludCBpbmRleCwgTVBUX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKQoreworCWlmICgoTXB0RHJpdmVyQ2xhc3NbaW5kZXhdID09IE1QVFNQSV9EUklWRVIgJiYKKwkgICAgIGlvYy0+YnVzX3R5cGUgIT0gU1BJKSB8fAorCSAgICAoTXB0RHJpdmVyQ2xhc3NbaW5kZXhdID09IE1QVEZDX0RSSVZFUiAmJgorCSAgICAgaW9jLT5idXNfdHlwZSAhPSBGQykgfHwKKwkgICAgKE1wdERyaXZlckNsYXNzW2luZGV4XSA9PSBNUFRTQVNfRFJJVkVSICYmCisJICAgICBpb2MtPmJ1c190eXBlICE9IFNBUykpCisJCS8qIG1ha2Ugc3VyZSB3ZSBvbmx5IGNhbGwgdGhlIHJlbGV2YW50IHJlc2V0IGhhbmRsZXIKKwkJICogZm9yIHRoZSBidXMgKi8KKwkJcmV0dXJuIDA7CisJcmV0dXJuIChNcHRSZXNldEhhbmRsZXJzW2luZGV4XSkoaW9jLCByZXNldF9waGFzZSk7Cit9CisKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCiAgKgltcHRfZG9faW9jX3JlY292ZXJ5IC0gSW5pdGlhbGl6ZSBvciByZWNvdmVyIE1QVCBhZGFwdGVyLgpAQCAtMTg4NiwxNCArMTkwMCwxNCBAQAogCQkJaWYgKChyZXQgPT0gMCkgJiYgTXB0UmVzZXRIYW5kbGVyc1tpaV0pIHsKIAkJCQlkcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJDYWxsaW5nIElPQyBwb3N0X3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAogCQkJCQkJaW9jLT5uYW1lLCBpaSkpOwotCQkJCXJjICs9ICgqKE1wdFJlc2V0SGFuZGxlcnNbaWldKSkoaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOworCQkJCXJjICs9IG1wdF9zaWduYWxfcmVzZXQoaWksIGlvYywgTVBUX0lPQ19QT1NUX1JFU0VUKTsKIAkJCQloYW5kbGVycysrOwogCQkJfQogCiAJCQlpZiAoYWx0X2lvY19yZWFkeSAmJiBNcHRSZXNldEhhbmRsZXJzW2lpXSkgewogCQkJCWRyc3ByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiQ2FsbGluZyBhbHQtJXMgcG9zdF9yZXNldCBoYW5kbGVyICMlZFxuIiwKIAkJCQkJCWlvYy0+bmFtZSwgaW9jLT5hbHRfaW9jLT5uYW1lLCBpaSkpOwotCQkJCXJjICs9ICgqKE1wdFJlc2V0SGFuZGxlcnNbaWldKSkoaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOworCQkJCXJjICs9IG1wdF9zaWduYWxfcmVzZXQoaWksIGlvYy0+YWx0X2lvYywgTVBUX0lPQ19QT1NUX1JFU0VUKTsKIAkJCQloYW5kbGVycysrOwogCQkJfQogCQl9CkBAIC0zMjY4LDExICszMjgyLDExIEBACiAJCQkJaWYgKE1wdFJlc2V0SGFuZGxlcnNbaWldKSB7CiAJCQkJCWRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkNhbGxpbmcgSU9DIHByZV9yZXNldCBoYW5kbGVyICMlZFxuIiwKIAkJCQkJCQlpb2MtPm5hbWUsIGlpKSk7Ci0JCQkJCXIgKz0gKCooTXB0UmVzZXRIYW5kbGVyc1tpaV0pKShpb2MsIE1QVF9JT0NfUFJFX1JFU0VUKTsKKwkJCQkJciArPSBtcHRfc2lnbmFsX3Jlc2V0KGlpLCBpb2MsIE1QVF9JT0NfUFJFX1JFU0VUKTsKIAkJCQkJaWYgKGlvYy0+YWx0X2lvYykgewogCQkJCQkJZHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiQ2FsbGluZyBhbHQtJXMgcHJlX3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAogCQkJCQkJCQlpb2MtPm5hbWUsIGlvYy0+YWx0X2lvYy0+bmFtZSwgaWkpKTsKLQkJCQkJCXIgKz0gKCooTXB0UmVzZXRIYW5kbGVyc1tpaV0pKShpb2MtPmFsdF9pb2MsIE1QVF9JT0NfUFJFX1JFU0VUKTsKKwkJCQkJCXIgKz0gbXB0X3NpZ25hbF9yZXNldChpaSwgaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1BSRV9SRVNFVCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC01NzA3LDExICs1NzIxLDExIEBACiAJCQlpZiAoTXB0UmVzZXRIYW5kbGVyc1tpaV0pIHsKIAkJCQlkdG1wcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkNhbGxpbmcgSU9DIHJlc2V0X3NldHVwIGhhbmRsZXIgIyVkXG4iLAogCQkJCQkJaW9jLT5uYW1lLCBpaSkpOwotCQkJCXIgKz0gKCooTXB0UmVzZXRIYW5kbGVyc1tpaV0pKShpb2MsIE1QVF9JT0NfU0VUVVBfUkVTRVQpOworCQkJCXIgKz0gbXB0X3NpZ25hbF9yZXNldChpaSwgaW9jLCBNUFRfSU9DX1NFVFVQX1JFU0VUKTsKIAkJCQlpZiAoaW9jLT5hbHRfaW9jKSB7CiAJCQkJCWR0bXByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiQ2FsbGluZyBhbHQtJXMgc2V0dXAgcmVzZXQgaGFuZGxlciAjJWRcbiIsCiAJCQkJCQkJaW9jLT5uYW1lLCBpb2MtPmFsdF9pb2MtPm5hbWUsIGlpKSk7Ci0JCQkJCXIgKz0gKCooTXB0UmVzZXRIYW5kbGVyc1tpaV0pKShpb2MtPmFsdF9pb2MsIE1QVF9JT0NfU0VUVVBfUkVTRVQpOworCQkJCQlyICs9IG1wdF9zaWduYWxfcmVzZXQoaWksIGlvYy0+YWx0X2lvYywgTVBUX0lPQ19TRVRVUF9SRVNFVCk7CiAJCQkJfQogCQkJfQogCQl9CkBAIC01NzM2LDExICs1NzUwLDEzIEBACiAJcmV0dXJuIHJjOwogfQogCisjIGRlZmluZSBFVkVOVF9ERVNDUl9TVFJfU1oJCTEwMAorCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiBzdGF0aWMgdm9pZAogRXZlbnREZXNjcmlwdGlvblN0cih1OCBldmVudCwgdTMyIGV2RGF0YTAsIGNoYXIgKmV2U3RyKQogewotCWNoYXIgKmRzOworCWNoYXIgKmRzID0gTlVMTDsKIAogCXN3aXRjaChldmVudCkgewogCWNhc2UgTVBJX0VWRU5UX05PTkU6CkBAIC01Nzc3LDkgKzU3OTMsOSBAQAogCQlpZiAoZXZEYXRhMCA9PSBNUElfRVZFTlRfTE9PUF9TVEFURV9DSEFOR0VfTElQKQogCQkJZHMgPSAiTG9vcCBTdGF0ZShMSVApIENoYW5nZSI7CiAJCWVsc2UgaWYgKGV2RGF0YTAgPT0gTVBJX0VWRU5UX0xPT1BfU1RBVEVfQ0hBTkdFX0xQRSkKLQkJCWRzID0gIkxvb3AgU3RhdGUoTFBFKSBDaGFuZ2UiOwkJCS8qID8/PyAqLworCQkJZHMgPSAiTG9vcCBTdGF0ZShMUEUpIENoYW5nZSI7CQkvKiA/Pz8gKi8KIAkJZWxzZQotCQkJZHMgPSAiTG9vcCBTdGF0ZShMUEIpIENoYW5nZSI7CQkJLyogPz8/ICovCisJCQlkcyA9ICJMb29wIFN0YXRlKExQQikgQ2hhbmdlIjsJCS8qID8/PyAqLwogCQlicmVhazsKIAljYXNlIE1QSV9FVkVOVF9MT0dPVVQ6CiAJCWRzID0gIkxvZ291dCI7CkBAIC01ODQxLDI3ICs1ODU3LDMyIEBACiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKIAl7Ci0JCWNoYXIgYnVmWzUwXTsKIAkJdTggaWQgPSAodTgpKGV2RGF0YTApOwogCQl1OCBSZWFzb25Db2RlID0gKHU4KShldkRhdGEwID4+IDE2KTsKIAkJc3dpdGNoIChSZWFzb25Db2RlKSB7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BRERFRDoKLQkJCXNwcmludGYoYnVmLCJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IEFkZGVkOiBpZD0lZCIsIGlkKTsKKwkJCXNucHJpbnRmKGV2U3RyLCBFVkVOVF9ERVNDUl9TVFJfU1osCisJCQkgICAgIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogQWRkZWQ6IGlkPSVkIiwgaWQpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19OT1RfUkVTUE9ORElORzoKLQkJCXNwcmludGYoYnVmLCJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IERlbGV0ZWQ6IGlkPSVkIiwgaWQpOworCQkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJCSAgICAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBEZWxldGVkOiBpZD0lZCIsIGlkKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQToKLQkJCXNwcmludGYoYnVmLCJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IFNNQVJUIERhdGE6IGlkPSVkIiwgaWQpOworCQkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJCSAgICAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBTTUFSVCBEYXRhOiBpZD0lZCIsCisJCQkgICAgaWQpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19OT19QRVJTSVNUX0FEREVEOgotCQkJc3ByaW50ZihidWYsIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogTm8gUGVyc2lzdGFuY3kgQWRkZWQ6IGlkPSVkIiwgaWQpOworCQkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJCSAgICAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBObyBQZXJzaXN0YW5jeSAiCisJCQkgICAgIkFkZGVkOiBpZD0lZCIsIGlkKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJc3ByaW50ZihidWYsIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogVW5rbm93bjogaWQ9JWQiLCBpZCk7Ci0JCWJyZWFrOworCQkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJCSAgICAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBVbmtub3duOiBpZD0lZCIsIGlkKTsKKwkJCWJyZWFrOwogCQl9Ci0JCWRzID0gYnVmOwogCQlicmVhazsKIAl9CiAJY2FzZSBNUElfRVZFTlRfT05fQlVTX1RJTUVSX0VYUElSRUQ6CkBAIC01ODc4LDQxICs1ODk5LDQ2IEBACiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX1NBU19QSFlfTElOS19TVEFUVVM6CiAJewotCQljaGFyIGJ1Zls1MF07CiAJCXU4IExpbmtSYXRlcyA9ICh1OCkoZXZEYXRhMCA+PiA4KTsKIAkJdTggUGh5TnVtYmVyID0gKHU4KShldkRhdGEwKTsKIAkJTGlua1JhdGVzID0gKExpbmtSYXRlcyAmIE1QSV9FVkVOVF9TQVNfUExTX0xSX0NVUlJFTlRfTUFTSykgPj4KIAkJCU1QSV9FVkVOVF9TQVNfUExTX0xSX0NVUlJFTlRfU0hJRlQ7CiAJCXN3aXRjaCAoTGlua1JhdGVzKSB7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19QTFNfTFJfUkFURV9VTktOT1dOOgotCQkJc3ByaW50ZihidWYsIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCiAJCQkgICAiIFJhdGUgVW5rbm93biIsUGh5TnVtYmVyKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSV9FVkVOVF9TQVNfUExTX0xSX1JBVEVfUEhZX0RJU0FCTEVEOgotCQkJc3ByaW50ZihidWYsIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCiAJCQkgICAiIFBoeSBEaXNhYmxlZCIsUGh5TnVtYmVyKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSV9FVkVOVF9TQVNfUExTX0xSX1JBVEVfRkFJTEVEX1NQRUVEX05FR09USUFUSU9OOgotCQkJc3ByaW50ZihidWYsIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCiAJCQkgICAiIEZhaWxlZCBTcGVlZCBOZWdvIixQaHlOdW1iZXIpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19QTFNfTFJfUkFURV9TQVRBX09PQl9DT01QTEVURToKLQkJCXNwcmludGYoYnVmLCJTQVMgUEhZIExpbmsgU3RhdHVzOiBQaHk9JWQ6IgorCQkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJCSAgICJTQVMgUEhZIExpbmsgU3RhdHVzOiBQaHk9JWQ6IgogCQkJICAgIiBTYXRhIE9PQiBDb21wbGV0ZWQiLFBoeU51bWJlcik7CiAJCQlicmVhazsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX1BMU19MUl9SQVRFXzFfNToKLQkJCXNwcmludGYoYnVmLCJTQVMgUEhZIExpbmsgU3RhdHVzOiBQaHk9JWQ6IgorCQkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJCSAgICJTQVMgUEhZIExpbmsgU3RhdHVzOiBQaHk9JWQ6IgogCQkJICAgIiBSYXRlIDEuNSBHYnBzIixQaHlOdW1iZXIpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19QTFNfTFJfUkFURV8zXzA6Ci0JCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKKwkJCXNucHJpbnRmKGV2U3RyLCBFVkVOVF9ERVNDUl9TVFJfU1osCisJCQkgICAiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKIAkJCSAgICIgUmF0ZSAzLjAgR3BicyIsUGh5TnVtYmVyKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJc3ByaW50ZihidWYsIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZCIsIFBoeU51bWJlcik7CisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZCIsIFBoeU51bWJlcik7CiAJCQlicmVhazsKIAkJfQotCQlkcyA9IGJ1ZjsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJX0VWRU5UX1NBU19ESVNDT1ZFUllfRVJST1I6CkBAIC01OTIxLDkgKzU5NDcsOCBAQAogCWNhc2UgTVBJX0VWRU5UX0lSX1JFU1lOQ19VUERBVEU6CiAJewogCQl1OCByZXN5bmNfY29tcGxldGUgPSAodTgpKGV2RGF0YTAgPj4gMTYpOwotCQljaGFyIGJ1Zls0MF07Ci0JCXNwcmludGYoYnVmLCJJUiBSZXN5bmMgVXBkYXRlOiBDb21wbGV0ZSA9ICVkOiIscmVzeW5jX2NvbXBsZXRlKTsKLQkJZHMgPSBidWY7CisJCXNucHJpbnRmKGV2U3RyLCBFVkVOVF9ERVNDUl9TVFJfU1osCisJCSAgICAiSVIgUmVzeW5jIFVwZGF0ZTogQ29tcGxldGUgPSAlZDoiLHJlc3luY19jb21wbGV0ZSk7CiAJCWJyZWFrOwogCX0KIAljYXNlIE1QSV9FVkVOVF9JUjI6CkBAIC01OTc2LDcgKzYwMDEsOCBAQAogCQlkcyA9ICJVbmtub3duIjsKIAkJYnJlYWs7CiAJfQotCXN0cmNweShldlN0cixkcyk7CisJaWYgKGRzKQorCQlzdHJuY3B5KGV2U3RyLCBkcywgRVZFTlRfREVTQ1JfU1RSX1NaKTsKIH0KIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtNTk5OCw3ICs2MDI0LDcgQEAKIAlpbnQgaWk7CiAJaW50IHIgPSAwOwogCWludCBoYW5kbGVycyA9IDA7Ci0JY2hhciBldlN0clsxMDBdOworCWNoYXIgZXZTdHJbRVZFTlRfREVTQ1JfU1RSX1NaXTsKIAl1OCBldmVudDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCmluZGV4IGJlN2U4NTAuLmY2NzNjY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCkBAIC03Niw4ICs3Niw4IEBACiAjZGVmaW5lIENPUFlSSUdIVAkiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgIiBNT0RVTEVBVVRIT1IKICNlbmRpZgogCi0jZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wMy4wOCIKLSNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjAzLjA4IgorI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDMuMDkiCisjZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wMy4wOSIKICNkZWZpbmUgV0hBVF9NQUdJQ19TVFJJTkcJCSJAIiAiKCIgIiMiICIpIgogCiAjZGVmaW5lIHNob3dfbXB0bW9kX3ZlcihzLHZlcikgIFwKQEAgLTQ4OSw3ICs0ODksNiBAQAogCiAjZGVmaW5lIE1QVF9SUE9SVF9JTkZPX0ZMQUdTX1JFR0lTVEVSRUQJMHgwMQkvKiBycG9ydCByZWdpc3RlcmVkICovCiAjZGVmaW5lIE1QVF9SUE9SVF9JTkZPX0ZMQUdTX01JU1NJTkcJMHgwMgkvKiBtaXNzaW5nIGZyb20gRGV2UGFnZTAgc2NhbiAqLwotI2RlZmluZSBNUFRfUlBPUlRfSU5GT19GTEFHU19NQVBQRURfVkRFViAweDA0CS8qIHRhcmdldCBtYXBwZWQgaW4gdmRldiAqLwogCiAvKgogICogZGF0YSBhbGxvY2F0ZWQgZm9yIGVhY2ggZmMgcnBvcnQgZGV2aWNlCkBAIC01MDEsNyArNTAwLDYgQEAKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAJRkNEZXZpY2VQYWdlMF90IHBnMDsKIAl1OAkJZmxhZ3M7Ci0JdTgJCXJlbWFwX25lZWRlZDsKIH07CiAKIC8qCkBAIC02MjgsMTEgKzYyNiwxMSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdAkgbXB0c2NzaWhfcGVyc2lzdFRhc2s7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCSBmY19ycG9ydHM7Ci0Jc3BpbmxvY2tfdAkJIGZjX3Jwb3J0X2xvY2s7IC8qIGxpc3QgYW5kIHJpIGZsYWdzICovCiAJc3BpbmxvY2tfdAkJIGZjX3Jlc2Nhbl93b3JrX2xvY2s7CiAJaW50CQkJIGZjX3Jlc2Nhbl93b3JrX2NvdW50OwogCXN0cnVjdCB3b3JrX3N0cnVjdAkgZmNfcmVzY2FuX3dvcms7Ci0KKwljaGFyCQkJIGZjX3Jlc2Nhbl93b3JrX3FfbmFtZVtLT0JKX05BTUVfTEVOXTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZmNfcmVzY2FuX3dvcmtfcTsKIH0gTVBUX0FEQVBURVI7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggYjM0M2YyYS4uODU2NDg3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtMzQxLDkgKzM0MSw2IEBACiAJcmlkLT5wb3J0X25hbWUgPSAoKHU2NClwZzAtPldXUE4uSGlnaCkgPDwgMzIgfCAodTY0KXBnMC0+V1dQTi5Mb3c7CiAJcmlkLT5wb3J0X2lkID0gICBwZzAtPlBvcnRJZGVudGlmaWVyOwogCXJpZC0+cm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047Ci0JcmlkLT5yb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7Ci0JaWYgKHBnMC0+UHJvdG9jb2wgJiBNUElfRkNfREVWSUNFX1BBR0UwX1BST1RfRkNQX0lOSVRJQVRPUikKLQkJcmlkLT5yb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9JTklUSUFUT1I7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1NSwxNSArMzUyLDE4IEBACiAJc3RydWN0IGZjX3Jwb3J0CQkqcnBvcnQ7CiAJc3RydWN0IG1wdGZjX3Jwb3J0X2luZm8JKnJpOwogCWludAkJCW5ld19yaSA9IDE7Ci0JdTY0CQkJcG47Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdTY0CQkJcG4sIG5uOwogCVZpcnRUYXJnZXQJCSp2dGFyZ2V0OworCXUzMgkJCXJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwogCiAJaWYgKG1wdGZjX2dlbmVyYXRlX3Jwb3J0X2lkcyhwZzAsICZycG9ydF9pZHMpIDwgMCkKIAkJcmV0dXJuOwogCisJcm9sZXMgfD0gRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUOworCWlmIChwZzAtPlByb3RvY29sICYgTVBJX0ZDX0RFVklDRV9QQUdFMF9QUk9UX0ZDUF9JTklUSUFUT1IpCisJCXJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX0lOSVRJQVRPUjsKKwogCS8qIHNjYW4gbGlzdCBsb29raW5nIGZvciBhIG1hdGNoICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZmNfcnBvcnRfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmksICZpb2MtPmZjX3Jwb3J0cywgbGlzdCkgewogCQlwbiA9ICh1NjQpcmktPnBnMC5XV1BOLkhpZ2ggPDwgMzIgfCAodTY0KXJpLT5wZzAuV1dQTi5Mb3c7CiAJCWlmIChwbiA9PSBycG9ydF9pZHMucG9ydF9uYW1lKSB7CS8qIG1hdGNoICovCkBAIC0zNzMsMTEgKzM3Myw5IEBACiAJCX0KIAl9CiAJaWYgKG5ld19yaSkgewkvKiBhbGxvY2F0ZSBvbmUgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5mY19ycG9ydF9sb2NrLCBmbGFncyk7CiAJCXJpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1wdGZjX3Jwb3J0X2luZm8pLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyaSkKIAkJCXJldHVybjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZmNfcnBvcnRfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZF90YWlsKCZyaS0+bGlzdCwgJmlvYy0+ZmNfcnBvcnRzKTsKIAl9CiAKQEAgLTM4NywxNCArMzg1LDExIEBACiAJLyogTVBUX1JQT1JUX0lORk9fRkxBR1NfUkVHSVNURVJFRCAtIHJwb3J0IG5vdCBwcmV2aW91c2x5IGRlbGV0ZWQgKi8KIAlpZiAoIShyaS0+ZmxhZ3MgJiBNUFRfUlBPUlRfSU5GT19GTEFHU19SRUdJU1RFUkVEKSkgewogCQlyaS0+ZmxhZ3MgfD0gTVBUX1JQT1JUX0lORk9fRkxBR1NfUkVHSVNURVJFRDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5mY19ycG9ydF9sb2NrLCBmbGFncyk7CiAJCXJwb3J0ID0gZmNfcmVtb3RlX3BvcnRfYWRkKGlvYy0+c2gsIGNoYW5uZWwsICZycG9ydF9pZHMpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19ycG9ydF9sb2NrLCBmbGFncyk7CiAJCWlmIChycG9ydCkgewogCQkJcmktPnJwb3J0ID0gcnBvcnQ7CiAJCQlpZiAobmV3X3JpKSAvKiBtYXkgaGF2ZSBiZWVuIHJlc2V0IGJ5IHVzZXIgKi8KIAkJCQlycG9ydC0+ZGV2X2xvc3NfdG1vID0gbXB0ZmNfZGV2X2xvc3NfdG1vOwotCQkJKigoc3RydWN0IG1wdGZjX3Jwb3J0X2luZm8gKiopcnBvcnQtPmRkX2RhdGEpID0gcmk7CiAJCQkvKgogCQkJICogaWYgYWxyZWFkeSBtYXBwZWQsIHJlbWFwIGhlcmUuICBJZiBub3QgbWFwcGVkLAogCQkJICogdGFyZ2V0X2FsbG9jIHdpbGwgYWxsb2NhdGUgdnRhcmdldCBhbmQgbWFwLApAQCAtNDA2LDE2ICs0MDEsMjEgQEAKIAkJCQkJdnRhcmdldC0+dGFyZ2V0X2lkID0gcGcwLT5DdXJyZW50VGFyZ2V0SUQ7CiAJCQkJCXZ0YXJnZXQtPmJ1c19pZCA9IHBnMC0+Q3VycmVudEJ1czsKIAkJCQl9Ci0JCQkJcmktPnJlbWFwX25lZWRlZCA9IDA7CiAJCQl9CisJCQkqKChzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqKilycG9ydC0+ZGRfZGF0YSkgPSByaTsKKwkJCS8qIHNjYW4gd2lsbCBiZSBzY2hlZHVsZWQgb25jZSBycG9ydCBiZWNvbWVzIGEgdGFyZ2V0ICovCisJCQlmY19yZW1vdGVfcG9ydF9yb2xlY2hnKHJwb3J0LHJvbGVzKTsKKworCQkJcG4gPSAodTY0KXJpLT5wZzAuV1dQTi5IaWdoIDw8IDMyIHwgKHU2NClyaS0+cGcwLldXUE4uTG93OworCQkJbm4gPSAodTY0KXJpLT5wZzAuV1dOTi5IaWdoIDw8IDMyIHwgKHU2NClyaS0+cGcwLldXTk4uTG93OwogCQkJZGZjcHJpbnRrICgoTVlJT0Nfc19JTkZPX0ZNVAogCQkJCSJtcHRmY19yZWdfZGV2LiVkOiAleCwgJWxseCAvICVsbHgsIHRpZCAlZCwgIgogCQkJCSJycG9ydCB0aWQgJWQsIHRtbyAlZFxuIiwKIAkJCQkJaW9jLT5uYW1lLAogCQkJCQlpb2MtPnNoLT5ob3N0X25vLAogCQkJCQlwZzAtPlBvcnRJZGVudGlmaWVyLAotCQkJCQlwZzAtPldXTk4sCi0JCQkJCXBnMC0+V1dQTiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylubiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwbiwKIAkJCQkJcGcwLT5DdXJyZW50VGFyZ2V0SUQsCiAJCQkJCXJpLT5ycG9ydC0+c2NzaV90YXJnZXRfaWQsCiAJCQkJCXJpLT5ycG9ydC0+ZGV2X2xvc3NfdG1vKSk7CkBAIC00MjUsOCArNDI1LDYgQEAKIAkJCXJpID0gTlVMTDsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZjX3Jwb3J0X2xvY2ssZmxhZ3MpOwotCiB9CiAKIC8qCkBAIC00NzYsNyArNDc0LDYgQEAKIAkJCXZ0YXJnZXQtPnRhcmdldF9pZCA9IHJpLT5wZzAuQ3VycmVudFRhcmdldElEOwogCQkJdnRhcmdldC0+YnVzX2lkID0gcmktPnBnMC5DdXJyZW50QnVzOwogCQkJcmktPnN0YXJnZXQgPSBzdGFyZ2V0OwotCQkJcmktPnJlbWFwX25lZWRlZCA9IDA7CiAJCQlyYyA9IDA7CiAJCX0KIAl9CkBAIC01MDIsMTAgKzQ5OSwxMCBAQAogCVZpcnREZXZpY2UJCSp2ZGV2OwogCXN0cnVjdCBzY3NpX3RhcmdldAkqc3RhcmdldDsKIAlzdHJ1Y3QgZmNfcnBvcnQJCSpycG9ydDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCi0JcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNkZXYpKTsKKwlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisJcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHN0YXJnZXQpOwogCiAJaWYgKCFycG9ydCB8fCBmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCkpCiAJCXJldHVybiAtRU5YSU87CkBAIC01MTksMTAgKzUxNiw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZoZC0+aW9jLT5mY19ycG9ydF9sb2NrLGZsYWdzKTsKIAogCXNkZXYtPmhvc3RkYXRhID0gdmRldjsKLQlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CiAJdnRhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOwogCiAJaWYgKHZ0YXJnZXQtPm51bV9sdW5zID09IDApIHsKQEAgLTUzNSwxNCArNTMwLDE2IEBACiAJdmRldi0+dnRhcmdldCA9IHZ0YXJnZXQ7CiAJdmRldi0+bHVuID0gc2Rldi0+bHVuOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGQtPmlvYy0+ZmNfcnBvcnRfbG9jayxmbGFncyk7Ci0KIAl2dGFyZ2V0LT5udW1fbHVucysrOwogCisKICNpZmRlZiBETVBUX0RFQlVHX0ZDCi0JIHsKKwl7CisJdTY0IG5uLCBwbjsKIAlzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqcmk7CiAJcmkgPSAqKChzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqKilycG9ydC0+ZGRfZGF0YSk7CisJcG4gPSAodTY0KXJpLT5wZzAuV1dQTi5IaWdoIDw8IDMyIHwgKHU2NClyaS0+cGcwLldXUE4uTG93OworCW5uID0gKHU2NClyaS0+cGcwLldXTk4uSGlnaCA8PCAzMiB8ICh1NjQpcmktPnBnMC5XV05OLkxvdzsKIAlkZmNwcmludGsgKChNWUlPQ19zX0lORk9fRk1UCiAJCSJtcHRmY19zbHZfYWxsb2MuJWQ6IG51bV9sdW5zICVkLCBzZGV2LmlkICVkLCAiCiAJICAgICAgICAiQ3VycmVudFRhcmdldElEICVkLCAleCAlbGx4ICVsbHhcbiIsCkBAIC01NTAsNyArNTQ3LDkgQEAKIAkJc2Rldi0+aG9zdC0+aG9zdF9ubywKIAkJdnRhcmdldC0+bnVtX2x1bnMsCiAJCXNkZXYtPmlkLCByaS0+cGcwLkN1cnJlbnRUYXJnZXRJRCwKLQkJcmktPnBnMC5Qb3J0SWRlbnRpZmllciwgcmktPnBnMC5XV1BOLCByaS0+cGcwLldXTk4pKTsKKwkJcmktPnBnMC5Qb3J0SWRlbnRpZmllciwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwbiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylubikpOwogCX0KICNlbmRpZgogCkBAIC01NzAsMTEgKzU2OSwzMSBAQAogCQlkb25lKFNDcG50KTsKIAkJcmV0dXJuIDA7CiAJfQotCXJpID0gKigoc3RydWN0IG1wdGZjX3Jwb3J0X2luZm8gKiopcnBvcnQtPmRkX2RhdGEpOwotCWlmICh1bmxpa2VseShyaS0+cmVtYXBfbmVlZGVkKSkKLQkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAKLQlyZXR1cm4gbXB0c2NzaWhfcWNtZChTQ3BudCxkb25lKTsKKwkvKiBkZF9kYXRhIGlzIG51bGwgdW50aWwgZmluaXNoZWQgYWRkaW5nIHRhcmdldCAqLworCXJpID0gKigoc3RydWN0IG1wdGZjX3Jwb3J0X2luZm8gKiopcnBvcnQtPmRkX2RhdGEpOworCWlmICh1bmxpa2VseSghcmkpKSB7CisJCWRmY3ByaW50ayAoKE1ZSU9DX3NfSU5GT19GTVQKKwkJCSJtcHRmY19xY21kLiVkOiAlZDolZCwgZGRfZGF0YSBpcyBudWxsLlxuIiwKKwkJCSgoTVBUX1NDU0lfSE9TVCAqKSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YSktPmlvYy0+bmFtZSwKKwkJCSgoTVBUX1NDU0lfSE9TVCAqKSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YSktPmlvYy0+c2gtPmhvc3Rfbm8sCisJCQlTQ3BudC0+ZGV2aWNlLT5pZCxTQ3BudC0+ZGV2aWNlLT5sdW4pKTsKKwkJU0NwbnQtPnJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWRvbmUoU0NwbnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwllcnIgPSBtcHRzY3NpaF9xY21kKFNDcG50LGRvbmUpOworI2lmZGVmIERNUFRfREVCVUdfRkMKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQlkZmNwcmludGsgKChNWUlPQ19zX0lORk9fRk1UCisJCQkibXB0ZmNfcWNtZC4lZDogJWQ6JWQsIG1wdHNjc2loX3FjbWQgcmV0dXJucyBub24temVyby5cbiIsCisJCQkoKE1QVF9TQ1NJX0hPU1QgKikgU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpLT5pb2MtPm5hbWUsCisJCQkoKE1QVF9TQ1NJX0hPU1QgKikgU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpLT5pb2MtPnNoLT5ob3N0X25vLAorCQkJU0NwbnQtPmRldmljZS0+aWQsU0NwbnQtPmRldmljZS0+bHVuKSk7CisJfQorI2VuZGlmCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTYxNSwxOCArNjM0LDE3IEBACiAJTVBUX0FEQVBURVIJCSppb2MgPSAoTVBUX0FEQVBURVIgKilhcmc7CiAJaW50CQkJaWk7CiAJaW50CQkJd29ya190b19kbzsKKwl1NjQJCQlwbjsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqcmk7CiAKIAlkbyB7CiAJCS8qIHN0YXJ0IGJ5IHRhZ2dpbmcgYWxsIHBvcnRzIGFzIG1pc3NpbmcgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZmNfcnBvcnRfbG9jayxmbGFncyk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmksICZpb2MtPmZjX3Jwb3J0cywgbGlzdCkgewogCQkJaWYgKHJpLT5mbGFncyAmIE1QVF9SUE9SVF9JTkZPX0ZMQUdTX1JFR0lTVEVSRUQpIHsKIAkJCQlyaS0+ZmxhZ3MgfD0gTVBUX1JQT1JUX0lORk9fRkxBR1NfTUlTU0lORzsKIAkJCX0KIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZjX3Jwb3J0X2xvY2ssZmxhZ3MpOwogCiAJCS8qCiAJCSAqIG5vdyByZXNjYW4gZGV2aWNlcyBrbm93biB0byBhZGFwdGVyLApAQCAtNjM5LDMzICs2NTcsMjQgQEAKIAkJfQogCiAJCS8qIGRlbGV0ZSBkZXZpY2VzIHN0aWxsIG1pc3NpbmcgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZmNfcnBvcnRfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJpLCAmaW9jLT5mY19ycG9ydHMsIGxpc3QpIHsKIAkJCS8qIGlmIG5ld2x5IG1pc3NpbmcsIGRlbGV0ZSBpdCAqLwotCQkJaWYgKChyaS0+ZmxhZ3MgJiAoTVBUX1JQT1JUX0lORk9fRkxBR1NfUkVHSVNURVJFRCB8Ci0JCQkJCSAgTVBUX1JQT1JUX0lORk9fRkxBR1NfTUlTU0lORykpCi0JCQkgID09IChNUFRfUlBPUlRfSU5GT19GTEFHU19SRUdJU1RFUkVEIHwKLQkJCSAgICAgIE1QVF9SUE9SVF9JTkZPX0ZMQUdTX01JU1NJTkcpKSB7CisJCQlpZiAocmktPmZsYWdzICYgTVBUX1JQT1JUX0lORk9fRkxBR1NfTUlTU0lORykgewogCiAJCQkJcmktPmZsYWdzICY9IH4oTVBUX1JQT1JUX0lORk9fRkxBR1NfUkVHSVNURVJFRHwKIAkJCQkJICAgICAgIE1QVF9SUE9SVF9JTkZPX0ZMQUdTX01JU1NJTkcpOwotCQkJCXJpLT5yZW1hcF9uZWVkZWQgPSAxOwotCQkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShyaS0+cnBvcnQpOwotCQkJCS8qCi0JCQkJICogcmVtb3RlIHBvcnQgbm90IHJlYWxseSBkZWxldGVkICdjYXVzZQotCQkJCSAqIGJpbmRpbmcgaXMgYnkgV1dQTiBhbmQgZHJpdmVyIG9ubHkKLQkJCQkgKiByZWdpc3RlcnMgRkNQX1RBUkdFVHMgYnV0IGNhbm5vdCB0cnVzdAotCQkJCSAqIGRhdGEgc3RydWN0dXJlcy4KLQkJCQkgKi8KKwkJCQlmY19yZW1vdGVfcG9ydF9kZWxldGUocmktPnJwb3J0KTsJLyogd29uJ3Qgc2xlZXAgKi8KIAkJCQlyaS0+cnBvcnQgPSBOVUxMOworCisJCQkJcG4gPSAodTY0KXJpLT5wZzAuV1dQTi5IaWdoIDw8IDMyIHwKKwkJCQkgICAgICh1NjQpcmktPnBnMC5XV1BOLkxvdzsKIAkJCQlkZmNwcmludGsgKChNWUlPQ19zX0lORk9fRk1UCiAJCQkJCSJtcHRmY19yZXNjYW4uJWQ6ICVsbHggZGVsZXRlZFxuIiwKIAkJCQkJaW9jLT5uYW1lLAogCQkJCQlpb2MtPnNoLT5ob3N0X25vLAotCQkJCQlyaS0+cGcwLldXUE4pKTsKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwbikpOwogCQkJfQogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZmNfcnBvcnRfbG9jayxmbGFncyk7CiAKIAkJLyoKIAkJICogYWxsb3cgbXVsdGlwbGUgcGFzc2VzIGFzIHRhcmdldCBzdGF0ZQpAQCAtODcwLDEwICs4NzksMjMgQEAKIAkJZ290byBvdXRfbXB0ZmNfcHJvYmU7CiAJfQogCi0JZm9yIChpaT0wOyBpaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaWkrKykgewotCQltcHRmY19pbml0X2hvc3RfYXR0cihpb2MsaWkpOwotCQltcHRmY19HZXRGY0RldlBhZ2UwKGlvYyxpaSxtcHRmY19yZWdpc3Rlcl9kZXYpOwotCX0KKwkvKiBpbml0aWFsaXplIHdvcmtxdWV1ZSAqLworCisJc25wcmludGYoaW9jLT5mY19yZXNjYW5fd29ya19xX25hbWUsIEtPQkpfTkFNRV9MRU4sICJtcHRmY193cV8lZCIsCisJCXNoLT5ob3N0X25vKTsKKwlpb2MtPmZjX3Jlc2Nhbl93b3JrX3EgPQorCQljcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShpb2MtPmZjX3Jlc2Nhbl93b3JrX3FfbmFtZSk7CisJaWYgKCFpb2MtPmZjX3Jlc2Nhbl93b3JrX3EpCisJCWdvdG8gb3V0X21wdGZjX3Byb2JlOworCisJLyoKKwkgKiBzY2FuIGZvciBycG9ydHMgLQorCSAqCWJ5IGRvaW5nIGl0IHZpYSB0aGUgd29ya3F1ZXVlLCBzb21lIGxvY2tpbmcgaXMgZWxpbWluYXRlZAorCSAqLworCisJaW9jLT5mY19yZXNjYW5fd29ya19jb3VudCA9IDE7CisJcXVldWVfd29yayhpb2MtPmZjX3Jlc2Nhbl93b3JrX3EsICZpb2MtPmZjX3Jlc2Nhbl93b3JrKTsKKwlmbHVzaF93b3JrcXVldWUoaW9jLT5mY19yZXNjYW5fd29ya19xKTsKIAogCXJldHVybiAwOwogCkBAIC05NDksOCArOTcxLDE4IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQKIG1wdGZjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlNUFRfQURBUFRFUiAqaW9jID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBtcHRmY19ycG9ydF9pbmZvICpwLCAqbjsKKwlNUFRfQURBUFRFUgkJKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbwkqcCwgKm47CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfcTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCS8qIGRlc3Ryb3kgd29ya3F1ZXVlICovCisJaWYgKCh3b3JrX3E9aW9jLT5mY19yZXNjYW5fd29ya19xKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7CisJCWlvYy0+ZmNfcmVzY2FuX3dvcmtfcSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZmNfcmVzY2FuX3dvcmtfbG9jaywgZmxhZ3MpOworCQlkZXN0cm95X3dvcmtxdWV1ZSh3b3JrX3EpOworCX0KIAogCWZjX3JlbW92ZV9ob3N0KGlvYy0+c2gpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCAwMTBkNGEzLi5hZjZlYzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTkxLDYgKzkxLDcgQEAKIAlNUFRTQVNfREVMX0RFVklDRSwKIAlNUFRTQVNfQUREX1JBSUQsCiAJTVBUU0FTX0RFTF9SQUlELAorCU1QVFNBU19JR05PUkVfRVZFTlQsCiB9OwogCiBzdHJ1Y3QgbXB0c2FzX2hvdHBsdWdfZXZlbnQgewpAQCAtMjk4LDYgKzI5OSwyNiBAQAogCXJldHVybiByYzsKIH0KIAorLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHNjc2kgZW5kIGRldmljZQorICovCitzdGF0aWMgaW5saW5lIGludAorbXB0c2FzX2lzX2VuZF9kZXZpY2Uoc3RydWN0IG1wdHNhc19kZXZpbmZvICogYXR0YWNoZWQpCit7CisJaWYgKChhdHRhY2hlZC0+aGFuZGxlKSAmJgorCSAgICAoYXR0YWNoZWQtPmRldmljZV9pbmZvICYKKwkgICAgTVBJX1NBU19ERVZJQ0VfSU5GT19FTkRfREVWSUNFKSAmJgorCSAgICAoKGF0dGFjaGVkLT5kZXZpY2VfaW5mbyAmCisJICAgIE1QSV9TQVNfREVWSUNFX0lORk9fU1NQX1RBUkdFVCkgfAorCSAgICAoYXR0YWNoZWQtPmRldmljZV9pbmZvICYKKwkgICAgTVBJX1NBU19ERVZJQ0VfSU5GT19TVFBfVEFSR0VUKSB8CisJICAgIChhdHRhY2hlZC0+ZGV2aWNlX2luZm8gJgorCSAgICBNUElfU0FTX0RFVklDRV9JTkZPX1NBVEFfREVWSUNFKSkpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIG1wdHNhc19zYXNfZW5jbG9zdXJlX3BnMChNUFRfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgbXB0c2FzX2VuY2xvc3VyZSAqZW5jbG9zdXJlLAogCQl1MzIgZm9ybSwgdTMyIGZvcm1fc3BlY2lmaWMpCkBAIC0zNjYsNyArMzg3LDE1IEBACiBzdGF0aWMgaW50CiBtcHRzYXNfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0ID0gc2Rldi0+aG9zdDsKKwlNUFRfU0NTSV9IT1NUCQkqaGQgPSAoTVBUX1NDU0lfSE9TVCAqKWhvc3QtPmhvc3RkYXRhOworCisJLyoKKwkgKiBSQUlEIHZvbHVtZXMgcGxhY2VkIGJleW9uZCB0aGUgbGFzdCBleHBlY3RlZCBwb3J0LgorCSAqIElnbm9yZSBzZW5kaW5nIHNhcyBtb2RlIHBhZ2VzIGluIHRoYXQgY2FzZS4uCisJICovCisJaWYgKHNkZXYtPmNoYW5uZWwgPCBoZC0+aW9jLT5udW1fcG9ydHMpCisJCXNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKHNkZXYpOwogCiAJcmV0dXJuIG1wdHNjc2loX3NsYXZlX2NvbmZpZ3VyZShzZGV2KTsKIH0KQEAgLTg2NCw3ICs4OTMsMTEgQEAKIAlTYXNEZXZpY2VQYWdlMF90ICpidWZmZXI7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwogCV9fbGU2NCBzYXNfYWRkcmVzczsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yPTA7CisKKwlpZiAoaW9jLT5zYXNfZGlzY292ZXJ5X3J1bnRpbWUgJiYKKwkJbXB0c2FzX2lzX2VuZF9kZXZpY2UoZGV2aWNlX2luZm8pKQorCQkJZ290byBvdXQ7CiAKIAloZHIuUGFnZVZlcnNpb24gPSBNUElfU0FTREVWSUNFMF9QQUdFVkVSU0lPTjsKIAloZHIuRXh0UGFnZUxlbmd0aCA9IDA7CkBAIC0xMDAxLDcgKzEwMzQsMTEgQEAKIAlDT05GSUdQQVJNUyBjZmc7CiAJU2FzRXhwYW5kZXJQYWdlMV90ICpidWZmZXI7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3I9MDsKKworCWlmIChpb2MtPnNhc19kaXNjb3ZlcnlfcnVudGltZSAmJgorCQltcHRzYXNfaXNfZW5kX2RldmljZSgmcGh5X2luZm8tPmF0dGFjaGVkKSkKKwkJCWdvdG8gb3V0OwogCiAJaGRyLlBhZ2VWZXJzaW9uID0gTVBJX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTjsKIAloZHIuRXh0UGFnZUxlbmd0aCA9IDA7CkBAIC0xMDYwLDI2ICsxMDk3LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLS8qCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBzY3NpIGVuZCBkZXZpY2UKLSAqLwotc3RhdGljIGlubGluZSBpbnQKLW1wdHNhc19pc19lbmRfZGV2aWNlKHN0cnVjdCBtcHRzYXNfZGV2aW5mbyAqIGF0dGFjaGVkKQotewotCWlmICgoYXR0YWNoZWQtPmhhbmRsZSkgJiYKLQkgICAgKGF0dGFjaGVkLT5kZXZpY2VfaW5mbyAmCi0JICAgIE1QSV9TQVNfREVWSUNFX0lORk9fRU5EX0RFVklDRSkgJiYKLQkgICAgKChhdHRhY2hlZC0+ZGV2aWNlX2luZm8gJgotCSAgICBNUElfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpIHwKLQkgICAgKGF0dGFjaGVkLT5kZXZpY2VfaW5mbyAmCi0JICAgIE1QSV9TQVNfREVWSUNFX0lORk9fU1RQX1RBUkdFVCkgfAotCSAgICAoYXR0YWNoZWQtPmRldmljZV9pbmZvICYKLQkgICAgTVBJX1NBU19ERVZJQ0VfSU5GT19TQVRBX0RFVklDRSkpKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZAogbXB0c2FzX3BhcnNlX2RldmljZV9pbmZvKHN0cnVjdCBzYXNfaWRlbnRpZnkgKmlkZW50aWZ5LAogCQlzdHJ1Y3QgbXB0c2FzX2RldmluZm8gKmRldmljZV9pbmZvKQpAQCAtMTcyOSw2ICsxNzQ2LDkgQEAKIAkJYnJlYWs7CiAJY2FzZSBNUFRTQVNfQUREX0RFVklDRToKIAorCQlpZiAoZXYtPnBoeXNfZGlza19udW1fdmFsaWQpCisJCQltcHRfZmluZEltVm9sdW1lcyhpb2MpOworCiAJCS8qCiAJCSAqIFJlZnJlc2ggc2FzIGRldmljZSBwZzAgZGF0YQogCQkgKi8KQEAgLTE4NjAsNiArMTg4MCw5IEBACiAJCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKIAkJbXB0X2ZpbmRJbVZvbHVtZXMoaW9jKTsKIAkJYnJlYWs7CisJY2FzZSBNUFRTQVNfSUdOT1JFX0VWRU5UOgorCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWtmcmVlKGV2KTsKQEAgLTE5MzIsNyArMTk1NSw4IEBACiAJCUVWRU5UX0RBVEFfUkFJRCAqcmFpZF9ldmVudF9kYXRhKQogewogCXN0cnVjdCBtcHRzYXNfaG90cGx1Z19ldmVudCAqZXY7Ci0JUkFJRF9WT0wwX1NUQVRVUyAqIHZvbHVtZVN0YXR1czsKKwlpbnQgc3RhdHVzID0gbGUzMl90b19jcHUocmFpZF9ldmVudF9kYXRhLT5TZXR0aW5nc1N0YXR1cyk7CisJaW50IHN0YXRlID0gKHN0YXR1cyA+PiA4KSAmIDB4ZmY7CiAKIAlpZiAoaW9jLT5idXNfdHlwZSAhPSBTQVMpCiAJCXJldHVybjsKQEAgLTE5NDcsNiArMTk3MSw3IEBACiAJSU5JVF9XT1JLKCZldi0+d29yaywgbXB0c2FzX2hvdHBsdWdfd29yaywgZXYpOwogCWV2LT5pb2MgPSBpb2M7CiAJZXYtPmlkID0gcmFpZF9ldmVudF9kYXRhLT5Wb2x1bWVJRDsKKwlldi0+ZXZlbnRfdHlwZSA9IE1QVFNBU19JR05PUkVfRVZFTlQ7CiAKIAlzd2l0Y2ggKHJhaWRfZXZlbnRfZGF0YS0+UmVhc29uQ29kZSkgewogCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfUEhZU0RJU0tfREVMRVRFRDoKQEAgLTE5NTgsNiArMTk4MywyNSBAQAogCQlldi0+cGh5c19kaXNrX251bSA9IHJhaWRfZXZlbnRfZGF0YS0+UGh5c0Rpc2tOdW07CiAJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0RFTF9ERVZJQ0U7CiAJCWJyZWFrOworCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfUEhZU0RJU0tfU1RBVFVTX0NIQU5HRUQ6CisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBNUElfUERfU1RBVEVfT05MSU5FOgorCQkJaW9jLT5yYWlkX2RhdGEuaXNSYWlkID0gMTsKKwkJCWV2LT5waHlzX2Rpc2tfbnVtX3ZhbGlkID0gMTsKKwkJCWV2LT5waHlzX2Rpc2tfbnVtID0gcmFpZF9ldmVudF9kYXRhLT5QaHlzRGlza051bTsKKwkJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0FERF9ERVZJQ0U7CisJCQlicmVhazsKKwkJY2FzZSBNUElfUERfU1RBVEVfTUlTU0lORzoKKwkJY2FzZSBNUElfUERfU1RBVEVfTk9UX0NPTVBBVElCTEU6CisJCWNhc2UgTVBJX1BEX1NUQVRFX09GRkxJTkVfQVRfSE9TVF9SRVFVRVNUOgorCQljYXNlIE1QSV9QRF9TVEFURV9GQUlMRURfQVRfSE9TVF9SRVFVRVNUOgorCQljYXNlIE1QSV9QRF9TVEFURV9PRkZMSU5FX0ZPUl9BTk9USEVSX1JFQVNPTjoKKwkJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0RFTF9ERVZJQ0U7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfVk9MVU1FX0RFTEVURUQ6CiAJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0RFTF9SQUlEOwogCQlicmVhazsKQEAgLTE5NjUsMTEgKzIwMDksMTggQEAKIAkJZXYtPmV2ZW50X3R5cGUgPSBNUFRTQVNfQUREX1JBSUQ7CiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfVk9MVU1FX1NUQVRVU19DSEFOR0VEOgotCQl2b2x1bWVTdGF0dXMgPSAoUkFJRF9WT0wwX1NUQVRVUyAqKSAmCi0JCSAgICByYWlkX2V2ZW50X2RhdGEtPlNldHRpbmdzU3RhdHVzOwotCQlldi0+ZXZlbnRfdHlwZSA9ICh2b2x1bWVTdGF0dXMtPlN0YXRlID09Ci0JCSAgICBNUElfUkFJRFZPTDBfU1RBVFVTX1NUQVRFX0ZBSUxFRCkgPwotCQkgICAgTVBUU0FTX0RFTF9SQUlEIDogTVBUU0FTX0FERF9SQUlEOworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgTVBJX1JBSURWT0wwX1NUQVRVU19TVEFURV9GQUlMRUQ6CisJCWNhc2UgTVBJX1JBSURWT0wwX1NUQVRVU19TVEFURV9NSVNTSU5HOgorCQkJZXYtPmV2ZW50X3R5cGUgPSBNUFRTQVNfREVMX1JBSUQ7CisJCQlicmVhazsKKwkJY2FzZSBNUElfUkFJRFZPTDBfU1RBVFVTX1NUQVRFX09QVElNQUw6CisJCWNhc2UgTVBJX1JBSURWT0wwX1NUQVRVU19TVEFURV9ERUdSQURFRDoKKwkJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0FERF9SQUlEOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwppbmRleCAzNzI5MDYyLi44NGZhMjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCkBAIC02MzIsNyArNjMyLDExIEBACiAKIAkJY2FzZSBNUElfSU9DU1RBVFVTX1NDU0lfREVWSUNFX05PVF9USEVSRToJLyogMHgwMDQzICovCiAJCQkvKiBTcG9vZiB0byBTQ1NJIFNlbGVjdGlvbiBUaW1lb3V0ISAqLwotCQkJc2MtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQkJaWYgKGlvYy0+YnVzX3R5cGUgIT0gRkMpCisJCQkJc2MtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQkJLyogZWxzZSBmaWJyZSwganVzdCBzdGFsbCB1bnRpbCByZXNjYW4gZXZlbnQgKi8KKwkJCWVsc2UKKwkJCQlzYy0+cmVzdWx0ID0gRElEX1JFUVVFVUUgPDwgMTY7CiAKIAkJCWlmIChoZC0+c2VsX3RpbWVvdXRbcFNjc2lSZXEtPlRhcmdldElEXSA8IDB4RkZGRikKIAkJCQloZC0+c2VsX3RpbWVvdXRbcFNjc2lSZXEtPlRhcmdldElEXSsrOwpAQCAtODc3LDcgKzg4MSw3IEBACiAJc3RydWN0IHNjc2lfY21uZCAqc2M7CiAKIAlkc3ByaW50aygoS0VSTl9JTkZPIE1ZTkFNICI6IHNlYXJjaF9ydW5uaW5nIHRhcmdldCAlZCBsdW4gJWQgbWF4ICVkXG4iLAotCQkJdmRldmljZS0+dGFyZ2V0X2lkLCB2ZGV2aWNlLT5sdW4sIG1heCkpOworCQkJdmRldmljZS0+dnRhcmdldC0+dGFyZ2V0X2lkLCB2ZGV2aWNlLT5sdW4sIG1heCkpOwogCiAJZm9yIChpaT0wOyBpaSA8IG1heDsgaWkrKykgewogCQlpZiAoKHNjID0gaGQtPlNjc2lMb29rdXBbaWldKSAhPSBOVUxMKSB7CkBAIC0xNjQ1LDcgKzE2NDksNiBAQAogbXB0c2NzaWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50KQogewogCU1QVF9TQ1NJX0hPU1QJKmhkOwotCU1QVF9BREFQVEVSCSppb2M7CiAJTVBUX0ZSQU1FX0hEUgkqbWY7CiAJdTMyCQkgY3R4MmFib3J0OwogCWludAkJIHNjcG50X2lkeDsKQEAgLTE2NjMsMTQgKzE2NjYsNiBAQAogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAotCWlvYyA9IGhkLT5pb2M7Ci0JaWYgKGhkLT5yZXNldFBlbmRpbmcpIHsKLQkJcmV0dXJuIEZBSUxFRDsKLQl9Ci0KLQlpZiAoaGQtPnRpbWVvdXRzIDwgLTEpCi0JCWhkLT50aW1lb3V0cysrOwotCiAJLyogRmluZCB0aGlzIGNvbW1hbmQKIAkgKi8KIAlpZiAoKHNjcG50X2lkeCA9IFNDUE5UX1RPX0xPT0tVUF9JRFgoU0NwbnQpKSA8IDApIHsKQEAgLTE2ODQsNiArMTY3OSwxMyBAQAogCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAKKwlpZiAoaGQtPnJlc2V0UGVuZGluZykgeworCQlyZXR1cm4gRkFJTEVEOworCX0KKworCWlmIChoZC0+dGltZW91dHMgPCAtMSkKKwkJaGQtPnRpbWVvdXRzKys7CisKIAlwcmludGsoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiBhdHRlbXB0aW5nIHRhc2sgYWJvcnQhIChzYz0lcClcbiIsCiAJICAgICAgIGhkLT5pb2MtPm5hbWUsIFNDcG50KTsKIAlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwpAQCAtMTcwMyw3ICsxNzA1LDcgQEAKIAl2ZGV2ID0gU0NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAJcmV0dmFsID0gbXB0c2NzaWhfVE1IYW5kbGVyKGhkLCBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0FCT1JUX1RBU0ssCiAJCXZkZXYtPnZ0YXJnZXQtPmJ1c19pZCwgdmRldi0+dnRhcmdldC0+dGFyZ2V0X2lkLCB2ZGV2LT5sdW4sCi0JCWN0eDJhYm9ydCwgbXB0c2NzaWhfZ2V0X3RtX3RpbWVvdXQoaW9jKSk7CisJCWN0eDJhYm9ydCwgbXB0c2NzaWhfZ2V0X3RtX3RpbWVvdXQoaGQtPmlvYykpOwogCiAJcHJpbnRrIChLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6IHRhc2sgYWJvcnQ6ICVzIChzYz0lcClcbiIsCiAJCWhkLT5pb2MtPm5hbWUsCkBAIC0yNTIxLDE1ICsyNTIzLDE1IEBACiAKIAkJLyogNy4gRkM6IFJlc2NhbiBmb3IgYmxvY2tlZCBycG9ydHMgd2hpY2ggbWlnaHQgaGF2ZSByZXR1cm5lZC4KIAkJICovCi0JCWVsc2UgaWYgKGlvYy0+YnVzX3R5cGUgPT0gRkMpIHsKLQkJCWludCB3b3JrX2NvdW50OwotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQorCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZmNfcmVzY2FuX3dvcmtfbG9jaywgZmxhZ3MpOwotCQkJd29ya19jb3VudCA9ICsraW9jLT5mY19yZXNjYW5fd29ya19jb3VudDsKKwkJCWlmIChpb2MtPmZjX3Jlc2Nhbl93b3JrX3EpIHsKKwkJCQlpZiAoaW9jLT5mY19yZXNjYW5fd29ya19jb3VudCsrID09IDApIHsKKwkJCQkJcXVldWVfd29yayhpb2MtPmZjX3Jlc2Nhbl93b3JrX3EsCisJCQkJCQkgICAmaW9jLT5mY19yZXNjYW5fd29yayk7CisJCQkJfQorCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7Ci0JCQlpZiAod29ya19jb3VudCA9PSAxKQotCQkJCXNjaGVkdWxlX3dvcmsoJmlvYy0+ZmNfcmVzY2FuX3dvcmspOwogCQl9CiAJCWR0bXByaW50aygoTVlJT0Nfc19XQVJOX0ZNVCAiUG9zdC1SZXNldCBjb21wbGV0ZS5cbiIsIGlvYy0+bmFtZSkpOwogCkBAIC0yNTQ0LDcgKzI1NDYsNiBAQAogewogCU1QVF9TQ1NJX0hPU1QgKmhkOwogCXU4IGV2ZW50ID0gbGUzMl90b19jcHUocEV2UmVwbHktPkV2ZW50KSAmIDB4RkY7Ci0JaW50IHdvcmtfY291bnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRldnR2ZXJib3NlcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJNUFQgZXZlbnQgKD0lMDJYaCkgcm91dGVkIHRvIFNDU0kgaG9zdCBkcml2ZXIhXG4iLApAQCAtMjU2OSwxMCArMjU3MCwxMyBAQAogCiAJY2FzZSBNUElfRVZFTlRfUkVTQ0FOOgkJCQkvKiAwNiAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7Ci0JCXdvcmtfY291bnQgPSArK2lvYy0+ZmNfcmVzY2FuX3dvcmtfY291bnQ7CisJCWlmIChpb2MtPmZjX3Jlc2Nhbl93b3JrX3EpIHsKKwkJCWlmIChpb2MtPmZjX3Jlc2Nhbl93b3JrX2NvdW50KysgPT0gMCkgeworCQkJCXF1ZXVlX3dvcmsoaW9jLT5mY19yZXNjYW5fd29ya19xLAorCQkJCQkgICAmaW9jLT5mY19yZXNjYW5fd29yayk7CisJCQl9CisJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7Ci0JCWlmICh3b3JrX2NvdW50ID09IDEpCi0JCQlzY2hlZHVsZV93b3JrKCZpb2MtPmZjX3Jlc2Nhbl93b3JrKTsKIAkJYnJlYWs7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCmluZGV4IDA5Yzc0NWIuLjMyMDFkZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYwpAQCAtNzgzLDYgKzc4Myw3MiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtcHRzcGlfcGNpX3RhYmxlKTsKIAorCisvKgorICogcmVuZWdvdGlhdGUgZm9yIGEgZ2l2ZW4gdGFyZ2V0CisgKi8KK3N0YXRpYyB2b2lkCittcHRzcGlfZHZfcmVuZWdvdGlhdGVfd29yayh2b2lkICpkYXRhKQoreworCXN0cnVjdCB3b3JrX3F1ZXVlX3dyYXBwZXIgKndxdyA9IChzdHJ1Y3Qgd29ya19xdWV1ZV93cmFwcGVyICopZGF0YTsKKwlzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkID0gd3F3LT5oZDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisKKwlrZnJlZSh3cXcpOworCisJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGhkLT5pb2MtPnNoKQorCQltcHRzcGlfZHZfZGV2aWNlKGhkLCBzZGV2KTsKK30KKworc3RhdGljIHZvaWQKK21wdHNwaV9kdl9yZW5lZ290aWF0ZShzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkKQoreworCXN0cnVjdCB3b3JrX3F1ZXVlX3dyYXBwZXIgKndxdyA9IGttYWxsb2Moc2l6ZW9mKCp3cXcpLCBHRlBfQVRPTUlDKTsKKworCWlmICghd3F3KQorCQlyZXR1cm47CisKKwlJTklUX1dPUksoJndxdy0+d29yaywgbXB0c3BpX2R2X3JlbmVnb3RpYXRlX3dvcmssIHdxdyk7CisJd3F3LT5oZCA9IGhkOworCisJc2NoZWR1bGVfd29yaygmd3F3LT53b3JrKTsKK30KKworLyoKKyAqIHNwaSBtb2R1bGUgcmVzZXQgaGFuZGxlcgorICovCitzdGF0aWMgaW50CittcHRzcGlfaW9jX3Jlc2V0KE1QVF9BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKK3sKKwlzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkID0gKHN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqKWlvYy0+c2gtPmhvc3RkYXRhOworCWludCByYzsKKworCXJjID0gbXB0c2NzaWhfaW9jX3Jlc2V0KGlvYywgcmVzZXRfcGhhc2UpOworCisJaWYgKHJlc2V0X3BoYXNlID09IE1QVF9JT0NfUE9TVF9SRVNFVCkKKwkJbXB0c3BpX2R2X3JlbmVnb3RpYXRlKGhkKTsKKworCXJldHVybiByYzsKK30KKworI2lmZGVmIENPTkZJR19QTQorLyoKKyAqIHNwaSBtb2R1bGUgcmVzdW1lIGhhbmRsZXIKKyAqLworc3RhdGljIGludAorbXB0c3BpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlNUFRfQURBUFRFUiAJKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkID0gKHN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqKWlvYy0+c2gtPmhvc3RkYXRhOworCWludCByYzsKKworCXJjID0gbXB0c2NzaWhfcmVzdW1lKHBkZXYpOworCW1wdHNwaV9kdl9yZW5lZ290aWF0ZShoZCk7CisKKwlyZXR1cm4gcmM7Cit9CisjZW5kaWYKKwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKQEAgLTEwMzIsNyArMTA5OCw3IEBACiAJLnNodXRkb3duCT0gbXB0c2NzaWhfc2h1dGRvd24sCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBtcHRzY3NpaF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gbXB0c2NzaWhfcmVzdW1lLAorCS5yZXN1bWUJCT0gbXB0c3BpX3Jlc3VtZSwKICNlbmRpZgogfTsKIApAQCAtMTA2MSw3ICsxMTI3LDcgQEAKIAkJICAiOiBSZWdpc3RlcmVkIGZvciBJT0MgZXZlbnQgbm90aWZpY2F0aW9uc1xuIikpOwogCX0KIAotCWlmIChtcHRfcmVzZXRfcmVnaXN0ZXIobXB0c3BpRG9uZUN0eCwgbXB0c2NzaWhfaW9jX3Jlc2V0KSA9PSAwKSB7CisJaWYgKG1wdF9yZXNldF9yZWdpc3RlcihtcHRzcGlEb25lQ3R4LCBtcHRzcGlfaW9jX3Jlc2V0KSA9PSAwKSB7CiAJCWRwcmludGsoKEtFUk5fSU5GTyBNWU5BTQogCQkgICI6IFJlZ2lzdGVyZWQgZm9yIElPQyByZXNldCBub3RpZmljYXRpb25zXG4iKSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCmluZGV4IDVlYTEzM2MuLjdiZDRkODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAl1MzIgbTsJCQkvKiBtZXNzYWdlIGlkICovCiAJc3RydWN0IGkyb19tZXNzYWdlICptc2c7CS8qIHBvaW50ZXIgdG8gdGhlIHJlcGx5IG1lc3NhZ2UgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIG5vZGUgaW4gZ2xvYmFsIHdhaXQgbGlzdCAqLworCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayBiZWZvcmUgbW9kaWZ5aW5nICovCiB9OwogCiAvKiBXb3JrIHN0cnVjdCBuZWVkZWQgdG8gaGFuZGxlIExDVCBOT1RJRlkgcmVwbGllcyAqLwpAQCAtODcsNiArODgsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCUlOSVRfTElTVF9IRUFEKCZ3YWl0LT5saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmd2FpdC0+bG9jayk7CiAKIAlyZXR1cm4gd2FpdDsKIH07CkBAIC0xMjUsNiArMTI3LDcgQEAKIAlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3cSk7CiAJc3RydWN0IGkyb19leGVjX3dhaXQgKndhaXQ7CiAJc3RhdGljIHUzMiB0Y250eHQgPSAweDgwMDAwMDAwOworCWxvbmcgZmxhZ3M7CiAJaW50IHJjID0gMDsKIAogCXdhaXQgPSBpMm9fZXhlY193YWl0X2FsbG9jKCk7CkBAIC0xNDYsMzMgKzE0OSwyOCBAQAogCXdhaXQtPnRjbnR4dCA9IHRjbnR4dCsrOwogCW1zZy0+dS5zLnRjbnR4dCA9IGNwdV90b19sZTMyKHdhaXQtPnRjbnR4dCk7CiAKKwl3YWl0LT53cSA9ICZ3cTsKKwkvKgorCSAqIHdlIGFkZCBlbGVtZW50cyB0byB0aGUgaGVhZCwgYmVjYXVzZSBpZiBhIGVudHJ5IGluIHRoZSBsaXN0IHdpbGwKKwkgKiBuZXZlciBiZSByZW1vdmVkLCB3ZSBoYXZlIHRvIGl0ZXJhdGUgb3ZlciBpdCBldmVyeSB0aW1lCisJICovCisJbGlzdF9hZGQoJndhaXQtPmxpc3QsICZpMm9fZXhlY193YWl0X2xpc3QpOworCiAJLyoKIAkgKiBQb3N0IHRoZSBtZXNzYWdlIHRvIHRoZSBjb250cm9sbGVyLiBBdCBzb21lIHBvaW50IGxhdGVyIGl0IHdpbGwKIAkgKiByZXR1cm4uIElmIHdlIHRpbWUgb3V0IGJlZm9yZSBpdCByZXR1cm5zIHRoZW4gY29tcGxldGUgd2lsbCBiZSB6ZXJvLgogCSAqLwogCWkyb19tc2dfcG9zdChjLCBtc2cpOwogCi0JaWYgKCF3YWl0LT5jb21wbGV0ZSkgewotCQl3YWl0LT53cSA9ICZ3cTsKLQkJLyoKLQkJICogd2UgYWRkIGVsZW1lbnRzIGFkZCB0aGUgaGVhZCwgYmVjYXVzZSBpZiBhIGVudHJ5IGluIHRoZSBsaXN0Ci0JCSAqIHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCwgd2UgaGF2ZSB0byBpdGVyYXRlIG92ZXIgaXQgZXZlcnkgdGltZQotCQkgKi8KLQkJbGlzdF9hZGQoJndhaXQtPmxpc3QsICZpMm9fZXhlY193YWl0X2xpc3QpOworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCB3YWl0LT5jb21wbGV0ZSwgdGltZW91dCAqIEhaKTsKIAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgd2FpdC0+Y29tcGxldGUsCi0JCQkJCQkgdGltZW91dCAqIEhaKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2FpdC0+bG9jaywgZmxhZ3MpOwogCi0JCXdhaXQtPndxID0gTlVMTDsKLQl9CisJd2FpdC0+d3EgPSBOVUxMOwogCi0JYmFycmllcigpOwotCi0JaWYgKHdhaXQtPmNvbXBsZXRlKSB7CisJaWYgKHdhaXQtPmNvbXBsZXRlKQogCQlyYyA9IGxlMzJfdG9fY3B1KHdhaXQtPm1zZy0+Ym9keVswXSkgPj4gMjQ7Ci0JCWkyb19mbHVzaF9yZXBseShjLCB3YWl0LT5tKTsKLQkJaTJvX2V4ZWNfd2FpdF9mcmVlKHdhaXQpOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCS8qCiAJCSAqIFdlIGNhbm5vdCByZW1vdmUgaXQgbm93LiBUaGlzIGlzIGltcG9ydGFudC4gV2hlbiBpdCBkb2VzCiAJCSAqIHRlcm1pbmF0ZSAod2hpY2ggaXQgbXVzdCBkbyBpZiB0aGUgY29udHJvbGxlciBoYXMgbm90CkBAIC0xODYsNiArMTg0LDEzIEBACiAJCXJjID0gLUVUSU1FRE9VVDsKIAl9CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YWl0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmMgIT0gLUVUSU1FRE9VVCkgeworCQlpMm9fZmx1c2hfcmVwbHkoYywgd2FpdC0+bSk7CisJCWkyb19leGVjX3dhaXRfZnJlZSh3YWl0KTsKKwl9CisKIAlyZXR1cm4gcmM7CiB9OwogCkBAIC0yMTMsNyArMjE4LDYgQEAKIHsKIAlzdHJ1Y3QgaTJvX2V4ZWNfd2FpdCAqd2FpdCwgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0YXRpYyBzcGlubG9ja190IGxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CiAJaW50IHJjID0gMTsKIAogCS8qCkBAIC0yMjMsMjMgKzIyNywyNCBAQAogCSAqIGFscmVhZHkgZXhwaXJlZC4gTm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoYXQgZXhjZXB0IGxvZyBpdCBmb3IKIAkgKiBkZWJ1ZyBwdXJwb3NlcywgaW5jcmVhc2UgdGltZW91dCwgYW5kIHJlY29tcGlsZS4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3YWl0LCB0bXAsICZpMm9fZXhlY193YWl0X2xpc3QsIGxpc3QpIHsKIAkJaWYgKHdhaXQtPnRjbnR4dCA9PSBjb250ZXh0KSB7Ci0JCQlsaXN0X2RlbCgmd2FpdC0+bGlzdCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2FpdC0+bG9jaywgZmxhZ3MpOwogCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7CisJCQlsaXN0X2RlbCgmd2FpdC0+bGlzdCk7CiAKIAkJCXdhaXQtPm0gPSBtOwogCQkJd2FpdC0+bXNnID0gbXNnOwogCQkJd2FpdC0+Y29tcGxldGUgPSAxOwogCi0JCQliYXJyaWVyKCk7Ci0KLQkJCWlmICh3YWl0LT53cSkgewotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSh3YWl0LT53cSk7CisJCQlpZiAod2FpdC0+d3EpCiAJCQkJcmMgPSAwOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKKwkJCQlyYyA9IC0xOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YWl0LT5sb2NrLCBmbGFncyk7CisKKwkJCWlmIChyYykgewogCQkJCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCQkJCWRldiA9ICZjLT5wZGV2LT5kZXY7CkBAIC0yNDgsMTUgKzI1MywxMyBAQAogCQkJCQkgYy0+bmFtZSk7CiAJCQkJaTJvX2RtYV9mcmVlKGRldiwgJndhaXQtPmRtYSk7CiAJCQkJaTJvX2V4ZWNfd2FpdF9mcmVlKHdhaXQpOwotCQkJCXJjID0gLTE7Ci0JCQl9CisJCQl9IGVsc2UKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUod2FpdC0+d3EpOwogCiAJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7Ci0KIAlvc21fd2FybigiJXM6IEJvZ3VzIHJlcGx5IGluIFBPU1QgV0FJVCAodHItY29udGV4dDogJTA4eCkhXG4iLCBjLT5uYW1lLAogCQkgY29udGV4dCk7CiAKQEAgLTMyMiwxNCArMzI1LDkgQEAKIHN0YXRpYyBpbnQgaTJvX2V4ZWNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpMm9fZGV2aWNlICppMm9fZGV2ID0gdG9faTJvX2RldmljZShkZXYpOwotCXN0cnVjdCBpMm9fY29udHJvbGxlciAqYyA9IGkyb19kZXYtPmlvcDsKIAogCWkyb19ldmVudF9yZWdpc3RlcihpMm9fZGV2LCAmaTJvX2V4ZWNfZHJpdmVyLCAwLCAweGZmZmZmZmZmKTsKIAotCWMtPmV4ZWMgPSBpMm9fZGV2OwotCi0JaTJvX2V4ZWNfbGN0X25vdGlmeShjLCBjLT5sY3QtPmNoYW5nZV9pbmQgKyAxKTsKLQogCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92ZW5kb3JfaWQpOwogCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wcm9kdWN0X2lkKTsKIApAQCAtNTIzLDYgKzUyMSw4IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBpMm9fbWVzc2FnZSAqbXNnOwogCisJZG93bigmYy0+bGN0X2xvY2spOworCiAJZGV2ID0gJmMtPnBkZXYtPmRldjsKIAogCWlmIChpMm9fZG1hX3JlYWxsb2MKQEAgLTU0NSw2ICs1NDUsOCBAQAogCiAJaTJvX21zZ19wb3N0KGMsIG1zZyk7CiAKKwl1cCgmYy0+bGN0X2xvY2spOworCiAJcmV0dXJuIDA7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYwppbmRleCA0OTIxNjc0Li5mZWJiZGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKQEAgLTgwNCw4ICs4MDQsNiBAQAogCiAJLyogQXNrIHRoZSBJT1AgdG8gc3dpdGNoIHRvIFJFU0VUIHN0YXRlICovCiAJaTJvX2lvcF9yZXNldChjKTsKLQotCXB1dF9kZXZpY2UoJmMtPmRldmljZSk7CiB9CiAKIC8qKgpAQCAtMTA1OSw3ICsxMDU3LDcgQEAKIAogCXNucHJpbnRmKHBvb2xuYW1lLCBzaXplb2YocG9vbG5hbWUpLCAiaTJvXyVzX21zZ19pbnBvb2wiLCBjLT5uYW1lKTsKIAlpZiAoaTJvX3Bvb2xfYWxsb2MKLQkgICAgKCZjLT5pbl9tc2csIHBvb2xuYW1lLCBJMk9fSU5CT1VORF9NU0dfRlJBTUVfU0laRSAqIDQsCisJICAgICgmYy0+aW5fbXNnLCBwb29sbmFtZSwgSTJPX0lOQk9VTkRfTVNHX0ZSQU1FX1NJWkUgKiA0ICsgc2l6ZW9mKHUzMiksCiAJICAgICBJMk9fTVNHX0lOUE9PTF9NSU4pKSB7CiAJCWtmcmVlKGMpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL0tjb25maWcgYi9kcml2ZXJzL21tYy9LY29uZmlnCmluZGV4IDNmNWQ3N2YuLjQ1YmNmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvS2NvbmZpZwpAQCAtNjAsNiArNjAsMTcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE1NQ19PTUFQCisJdHJpc3RhdGUgIlRJIE9NQVAgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9PTUFQICYmIE1NQworCXNlbGVjdCBUUFM2NTAxMCBpZiBNQUNIX09NQVBfSDIKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIFRJIE9NQVAgTXVsdGltZWRpYSBjYXJkIEludGVyZmFjZS4KKwkgIElmIHlvdSBoYXZlIGFuIE9NQVAgYm9hcmQgd2l0aCBhIE11bHRpbWVkaWEgQ2FyZCBzbG90LAorCSAgc2F5IFkgb3IgTSBoZXJlLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX1dCU0QKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODNMNTF4RCBTRC9NTUMgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1NQyAmJiBJU0FfRE1BX0FQSQpAQCAtNzMsMTEgKzg0LDI5IEBACiAKIGNvbmZpZyBNTUNfQVUxWAogCXRyaXN0YXRlICJBbGNoZW15IEFVMVhYMCBNTUMgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgTU1DCisJZGVwZW5kcyBvbiBNTUMgJiYgU09DX0FVMTIwMAogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgQU1EIEFsY2hlbXkoUikgTXVsdGltZWRpYSBjYXJkIGludGVyZmFjZS4KIAkgIElmIHlvdSBoYXZlIGEgQWxjaGVteSBwbGF0Zm9ybSB3aXRoIGEgTU1DIHNsb3QsIHNheSBZIG9yIE0gaGVyZS4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE1NQ19BVDkxUk05MjAwCisJdHJpc3RhdGUgIkFUOTFSTTkyMDAgU0QvTU1DIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAgJiYgTU1DCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHRoZSBBVDkxUk05MjAwIE1DSSBjb250cm9sbGVyLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgTU1DX0lNWAorCXRyaXN0YXRlICJNb3Rvcm9sYSBpLk1YIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfSU1YICYmIE1NQworCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyB0aGUgTW90b3JvbGEgaS5NWCBNdWx0aW1lZGlhIGNhcmQgSW50ZXJmYWNlLgorCSAgSWYgeW91IGhhdmUgYSBpLk1YIHBsYXRmb3JtIHdpdGggYSBNdWx0aW1lZGlhIENhcmQgc2xvdCwKKwkgIHNheSBZIG9yIE0gaGVyZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9NYWtlZmlsZQppbmRleCA3NjlkNTQ1Li5kMjk1N2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9NYWtlZmlsZQpAQCAtMTcsOCArMTcsMTUgQEAKICMKIG9iai0kKENPTkZJR19NTUNfQVJNTU1DSSkJKz0gbW1jaS5vCiBvYmotJChDT05GSUdfTU1DX1BYQSkJCSs9IHB4YW1jaS5vCitvYmotJChDT05GSUdfTU1DX0lNWCkJCSs9IGlteG1tYy5vCiBvYmotJChDT05GSUdfTU1DX1NESENJKQkJKz0gc2RoY2kubwogb2JqLSQoQ09ORklHX01NQ19XQlNEKQkJKz0gd2JzZC5vCiBvYmotJChDT05GSUdfTU1DX0FVMVgpCQkrPSBhdTF4bW1jLm8KK29iai0kKENPTkZJR19NTUNfT01BUCkJCSs9IG9tYXAubworb2JqLSQoQ09ORklHX01NQ19BVDkxUk05MjAwKQkrPSBhdDkxX21jaS5vCiAKIG1tY19jb3JlLXkgOj0gbW1jLm8gbW1jX3F1ZXVlLm8gbW1jX3N5c2ZzLm8KKworaWZlcSAoJChDT05GSUdfTU1DX0RFQlVHKSx5KQorRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9hdDkxX21jaS5jIGIvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGYwZWVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYwpAQCAtMCwwICsxLDk4NSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL21tYy9hdDkxX21jaS5jIC0gQVRNRUwgQVQ5MVJNOTIwMCBNQ0kgRHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBDb3VnYXIgQ3JlZWsgQ29tcHV0aW5nIERldmljZXMgTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBNYWxjb2xtIE5veWVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICAgVGhpcyBpcyB0aGUgQVQ5MVJNOTIwMCBNQ0kgZHJpdmVyIHRoYXQgaGFzIGJlZW4gdGVzdGVkIHdpdGggYm90aCBNTUMgY2FyZHMKKyAgIGFuZCBTRC1jYXJkcy4gIEJvYXJkcyB0aGF0IHN1cHBvcnQgd3JpdGUgcHJvdGVjdCBhcmUgbm93IHN1cHBvcnRlZC4KKyAgIFRoZSBDQ0FUOTFTQkMwMDEgYm9hcmQgZG9lcyBub3Qgc3VwcG9ydCBTRCBjYXJkcy4KKworICAgVGhlIHRocmVlIGVudHJ5IHBvaW50cyBhcmUgYXQ5MV9tY2lfcmVxdWVzdCwgYXQ5MV9tY2lfc2V0X2lvcworICAgYW5kIGF0OTFfbWNpX2dldF9yby4KKworICAgU0VUIElPUworICAgICBUaGlzIGNvbmZpZ3VyZXMgdGhlIGRldmljZSB0byBwdXQgaXQgaW50byB0aGUgY29ycmVjdCBtb2RlIGFuZCBjbG9jayBzcGVlZAorICAgICByZXF1aXJlZC4KKworICAgTUNJIFJFUVVFU1QKKyAgICAgTUNJIHJlcXVlc3QgcHJvY2Vzc2VzIHRoZSBjb21tYW5kcyBzZW50IGluIHRoZSBtbWNfcmVxdWVzdCBzdHJ1Y3R1cmUuIFRoaXMKKyAgICAgY2FuIGNvbnNpc3Qgb2YgYSBwcm9jZXNzaW5nIGNvbW1hbmQgYW5kIGEgc3RvcCBjb21tYW5kIGluIHRoZSBjYXNlIG9mCisgICAgIG11bHRpcGxlIGJsb2NrIHRyYW5zZmVycy4KKworICAgICBUaGVyZSBhcmUgdGhyZWUgbWFpbiB0eXBlcyBvZiByZXF1ZXN0LCBjb21tYW5kcywgcmVhZHMgYW5kIHdyaXRlcy4KKworICAgICBDb21tYW5kcyBhcmUgc3RyYWlnaHQgZm9yd2FyZC4gVGhlIGNvbW1hbmQgaXMgc3VibWl0dGVkIHRvIHRoZSBjb250cm9sbGVyIGFuZAorICAgICB0aGUgcmVxdWVzdCBmdW5jdGlvbiByZXR1cm5zLiBXaGVuIHRoZSBjb250cm9sbGVyIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgdG8gaW5kaWNhdGUKKyAgICAgdGhlIGNvbW1hbmQgaXMgZmluaXNoZWQsIHRoZSByZXNwb25zZSB0byB0aGUgY29tbWFuZCBhcmUgcmVhZCBhbmQgdGhlIG1tY19yZXF1ZXN0X2RvbmUKKyAgICAgZnVuY3Rpb24gY2FsbGVkIHRvIGVuZCB0aGUgcmVxdWVzdC4KKworICAgICBSZWFkcyBhbmQgd3JpdGVzIHdvcmsgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBub3JtYWwgY29tbWFuZHMgYnV0IGludm9sdmUgdGhlIFBEQyAoRE1BKQorICAgICBjb250cm9sbGVyIHRvIG1hbmFnZSB0aGUgdHJhbnNmZXJzLgorCisgICAgIEEgcmVhZCBpcyBkb25lIGZyb20gdGhlIGNvbnRyb2xsZXIgZGlyZWN0bHkgdG8gdGhlIHNjYXR0ZXJsaXN0IHBhc3NlZCBpbiBmcm9tIHRoZSByZXF1ZXN0LgorICAgICBEdWUgdG8gYSBidWcgaW4gdGhlIGNvbnRyb2xsZXIsIHdoZW4gYSByZWFkIGlzIGNvbXBsZXRlZCwgYWxsIHRoZSB3b3JkcyBhcmUgYnl0ZQorICAgICBzd2FwcGVkIGluIHRoZSBzY2F0dGVybGlzdCBidWZmZXJzLgorCisgICAgIFRoZSBzZXF1ZW5jZSBvZiByZWFkIGludGVycnVwdHMgaXM6IEVORFJYLCBSWEJVRkYsIENNRFJEWQorCisgICAgIEEgd3JpdGUgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGluIHRoYXQgdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSByZWFkIGZyb20gdGhlIHNjYXR0ZXJsaXN0CisgICAgIGludG8gYSBkbWEgbWVtb3J5IGJ1ZmZlciAodGhpcyBpcyBpbiBjYXNlIHRoZSBzb3VyY2UgYnVmZmVyIHNob3VsZCBiZSByZWFkIG9ubHkpLiBUaGUKKyAgICAgZW50aXJlIHdyaXRlIGJ1ZmZlciBpcyB0aGVuIGRvbmUgZnJvbSB0aGlzIHNpbmdsZSBkbWEgbWVtb3J5IGJ1ZmZlci4KKworICAgICBUaGUgc2VxdWVuY2Ugb2Ygd3JpdGUgaW50ZXJydXB0cyBpczogRU5EVFgsIFRYQlVGRSwgTk9UQlVTWSwgQ01EUkRZCisKKyAgIEdFVCBSTworICAgICBHZXRzIHRoZSBzdGF0dXMgb2YgdGhlIHdyaXRlIHByb3RlY3QgcGluLCBpZiBhdmFpbGFibGUuCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvcHJvdG9jb2wuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxcm05MjAwX21jaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFybTkyMDBfcGRjLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImF0OTFfbWNpIgorCisjdW5kZWYJU1VQUE9SVF80V0lSRQorCisjaWZkZWYgQ09ORklHX01NQ19ERUJVRworI2RlZmluZSBEQkcoZm10Li4uKQlcCisJcHJpbnRrKGZtdCkKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQuLi4pCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNsayAqbWNpX2NsazsKKworI2RlZmluZSBGTF9TRU5UX0NPTU1BTkQgKDEgPDwgMCkKKyNkZWZpbmUgRkxfU0VOVF9TVE9QICgxIDw8IDEpCisKKworCisvKgorICogUmVhZCBmcm9tIGEgTUNJIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ5MV9tY2lfcmVhZCh1bnNpZ25lZCBpbnQgcmVnKQoreworCXZvaWQgX19pb21lbSAqbWNpX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX01DSTsKKworCXJldHVybiBfX3Jhd19yZWFkbChtY2lfYmFzZSArIHJlZyk7Cit9CisKKy8qCisgKiBXcml0ZSB0byBhIE1DSSByZWdpc3Rlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0OTFfbWNpX3dyaXRlKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisgICAgICAgIHZvaWQgX19pb21lbSAqbWNpX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX01DSTsKKworICAgICAgICBfX3Jhd193cml0ZWwodmFsdWUsIG1jaV9iYXNlICsgcmVnKTsKK30KKworLyoKKyAqIExvdyBsZXZlbCB0eXBlIGZvciB0aGlzIGRyaXZlcgorICovCitzdHJ1Y3QgYXQ5MW1jaV9ob3N0Cit7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CisJc3RydWN0IG1tY19yZXF1ZXN0ICpyZXF1ZXN0OworCisJc3RydWN0IGF0OTFfbW1jX2RhdGEgKmJvYXJkOworCWludCBwcmVzZW50OworCisJLyoKKwkgKiBGbGFnIGluZGljYXRpbmcgd2hlbiB0aGUgY29tbWFuZCBoYXMgYmVlbiBzZW50LiBUaGlzIGlzIHVzZWQgdG8KKwkgKiB3b3JrIG91dCB3aGV0aGVyIG9yIG5vdCB0byBzZW5kIHRoZSBzdG9wCisJICovCisJdW5zaWduZWQgaW50IGZsYWdzOworCS8qIGZsYWcgZm9yIGN1cnJlbnQgYnVzIHNldHRpbmdzICovCisJdTMyIGJ1c19tb2RlOworCisJLyogRE1BIGJ1ZmZlciB1c2VkIGZvciB0cmFuc21pdHRpbmcgKi8KKwl1bnNpZ25lZCBpbnQqIGJ1ZmZlcjsKKwlkbWFfYWRkcl90IHBoeXNpY2FsX2FkZHJlc3M7CisJdW5zaWduZWQgaW50IHRvdGFsX2xlbmd0aDsKKworCS8qIExhdGVzdCBpbiB0aGUgc2NhdHRlcmxpc3QgdGhhdCBoYXMgYmVlbiBlbmFibGVkIGZvciB0cmFuc2ZlciwgYnV0IG5vdCBmcmVlZCAqLworCWludCBpbl91c2VfaW5kZXg7CisKKwkvKiBMYXRlc3QgaW4gdGhlIHNjYXR0ZXJsaXN0IHRoYXQgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdHJhbnNmZXIgKi8KKwlpbnQgdHJhbnNmZXJfaW5kZXg7Cit9OworCisvKgorICogQ29weSBmcm9tIHNnIHRvIGEgZG1hIGJsb2NrIC0gdXNlZCBmb3IgdHJhbnNmZXJzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDkxbWNpX3NnX3RvX2RtYShzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IGxlbiwgaSwgc2l6ZTsKKwl1bnNpZ25lZCAqZG1hYnVmID0gaG9zdC0+YnVmZmVyOworCisJc2l6ZSA9IGhvc3QtPnRvdGFsX2xlbmd0aDsKKwlsZW4gPSBkYXRhLT5zZ19sZW47CisKKwkvKgorCSAqIEp1c3QgbG9vcCB0aHJvdWdoIGFsbCBlbnRyaWVzLiBTaXplIG1pZ2h0IG5vdAorCSAqIGJlIHRoZSBlbnRpcmUgbGlzdCB0aG91Z2ggc28gbWFrZSBzdXJlIHRoYXQKKwkgKiB3ZSBkbyBub3QgdHJhbnNmZXIgdG9vIG11Y2guCisJICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJCWludCBhbW91bnQ7CisJCWludCBpbmRleDsKKwkJdW5zaWduZWQgaW50ICpzZ2J1ZmZlcjsKKworCQlzZyA9ICZkYXRhLT5zZ1tpXTsKKworCQlzZ2J1ZmZlciA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9CSU9fU1JDX0lSUSkgKyBzZy0+b2Zmc2V0OworCQlhbW91bnQgPSBtaW4oc2l6ZSwgc2ctPmxlbmd0aCk7CisJCXNpemUgLT0gYW1vdW50OworCQlhbW91bnQgLz0gNDsKKworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhbW91bnQ7IGluZGV4KyspCisJCQkqZG1hYnVmKysgPSBzd2FiMzIoc2didWZmZXJbaW5kZXhdKTsKKworCQlrdW5tYXBfYXRvbWljKHNnYnVmZmVyLCBLTV9CSU9fU1JDX0lSUSk7CisKKwkJaWYgKHNpemUgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IGEgcmVxdWVzdCB0byB0cmFuc2ZlcgorCSAqIG1vcmUgZGF0YSB0aGFuIGNhbiBmaXQgaW50byB0aGUgU0cgbGlzdC4KKwkgKi8KKwlCVUdfT04oc2l6ZSAhPSAwKTsKK30KKworLyoKKyAqIFByZXBhcmUgYSBkbWEgcmVhZAorICovCitzdGF0aWMgdm9pZCBhdDkxbWNpX3ByZV9kbWFfcmVhZChzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0KQoreworCWludCBpOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CisJc3RydWN0IG1tY19kYXRhICpkYXRhOworCisJREJHKCJwcmUgZG1hIHJlYWRcbiIpOworCisJY21kID0gaG9zdC0+Y21kOworCWlmICghY21kKSB7CisJCURCRygibm8gY29tbWFuZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkYXRhID0gY21kLT5kYXRhOworCWlmICghZGF0YSkgeworCQlEQkcoIm5vIGRhdGFcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkvKiBub3RoaW5nIGxlZnQgdG8gdHJhbnNmZXIgKi8KKwkJaWYgKGhvc3QtPnRyYW5zZmVyX2luZGV4ID49IGRhdGEtPnNnX2xlbikgeworCQkJREJHKCJOb3RoaW5nIGxlZnQgdG8gdHJhbnNmZXIgKGluZGV4ID0gJWQpXG4iLCBob3N0LT50cmFuc2Zlcl9pbmRleCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIG5lZWRzIGZpbGxpbmcgKi8KKwkJaWYgKGkgPT0gMCkgeworCQkJaWYgKGF0OTFfbWNpX3JlYWQoQVQ5MV9QRENfUkNSKSAhPSAwKSB7CisJCQkJREJHKCJUcmFuc2ZlciBhY3RpdmUgaW4gY3VycmVudFxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlpZiAoYXQ5MV9tY2lfcmVhZChBVDkxX1BEQ19STkNSKSAhPSAwKSB7CisJCQkJREJHKCJUcmFuc2ZlciBhY3RpdmUgaW4gbmV4dFxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQkvKiBTZXR1cCB0aGUgbmV4dCB0cmFuc2ZlciAqLworCQlEQkcoIlVzaW5nIHRyYW5zZmVyIGluZGV4ICVkXG4iLCBob3N0LT50cmFuc2Zlcl9pbmRleCk7CisKKwkJc2cgPSAmZGF0YS0+c2dbaG9zdC0+dHJhbnNmZXJfaW5kZXgrK107CisJCURCRygic2cgPSAlcFxuIiwgc2cpOworCisJCXNnLT5kbWFfYWRkcmVzcyA9IGRtYV9tYXBfcGFnZShOVUxMLCBzZy0+cGFnZSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKworCQlEQkcoImRtYSBhZGRyZXNzID0gJTA4WCwgbGVuZ3RoID0gJWRcbiIsIHNnLT5kbWFfYWRkcmVzcywgc2ctPmxlbmd0aCk7CisKKwkJaWYgKGkgPT0gMCkgeworCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUlBSLCBzZy0+ZG1hX2FkZHJlc3MpOworCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUkNSLCBzZy0+bGVuZ3RoIC8gNCk7CisJCX0KKwkJZWxzZSB7CisJCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19STlBSLCBzZy0+ZG1hX2FkZHJlc3MpOworCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUk5DUiwgc2ctPmxlbmd0aCAvIDQpOworCQl9CisJfQorCisJREJHKCJwcmUgZG1hIHJlYWQgZG9uZVxuIik7Cit9CisKKy8qCisgKiBIYW5kbGUgYWZ0ZXIgYSBkbWEgcmVhZAorICovCitzdGF0aWMgdm9pZCBhdDkxbWNpX3Bvc3RfZG1hX3JlYWQoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGE7CisKKwlEQkcoInBvc3QgZG1hIHJlYWRcbiIpOworCisJY21kID0gaG9zdC0+Y21kOworCWlmICghY21kKSB7CisJCURCRygibm8gY29tbWFuZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkYXRhID0gY21kLT5kYXRhOworCWlmICghZGF0YSkgeworCQlEQkcoIm5vIGRhdGFcbiIpOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKGhvc3QtPmluX3VzZV9pbmRleCA8IGhvc3QtPnRyYW5zZmVyX2luZGV4KSB7CisJCXVuc2lnbmVkIGludCAqYnVmZmVyOworCQlpbnQgaW5kZXg7CisJCWludCBsZW47CisKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCQlEQkcoImZpbmlzaGluZyBpbmRleCAlZFxuIiwgaG9zdC0+aW5fdXNlX2luZGV4KTsKKworCQlzZyA9ICZkYXRhLT5zZ1tob3N0LT5pbl91c2VfaW5kZXgrK107CisKKwkJREJHKCJVbm1hcHBpbmcgcGFnZSAlMDhYXG4iLCBzZy0+ZG1hX2FkZHJlc3MpOworCisJCWRtYV91bm1hcF9wYWdlKE5VTEwsIHNnLT5kbWFfYWRkcmVzcywgc2ctPmxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKworCQkvKiBTd2FwIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyICovCisJCWJ1ZmZlciA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9CSU9fU1JDX0lSUSkgKyBzZy0+b2Zmc2V0OworCQlEQkcoImJ1ZmZlciA9ICVwLCBsZW5ndGggPSAlZFxuIiwgYnVmZmVyLCBzZy0+bGVuZ3RoKTsKKworCQlkYXRhLT5ieXRlc194ZmVyZWQgKz0gc2ctPmxlbmd0aDsKKworCQlsZW4gPSBzZy0+bGVuZ3RoIC8gNDsKKworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW47IGluZGV4KyspIHsKKwkJCWJ1ZmZlcltpbmRleF0gPSBzd2FiMzIoYnVmZmVyW2luZGV4XSk7CisJCX0KKwkJa3VubWFwX2F0b21pYyhidWZmZXIsIEtNX0JJT19TUkNfSVJRKTsKKwkJZmx1c2hfZGNhY2hlX3BhZ2Uoc2ctPnBhZ2UpOworCX0KKworCS8qIElzIHRoZXJlIGFub3RoZXIgdHJhbnNmZXIgdG8gdHJpZ2dlcj8gKi8KKwlpZiAoaG9zdC0+dHJhbnNmZXJfaW5kZXggPCBkYXRhLT5zZ19sZW4pCisJCWF0OTFtY2lfcHJlX2RtYV9yZWFkKGhvc3QpOworCWVsc2UgeworCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRVIsIEFUOTFfTUNJX1JYQlVGRik7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1JYVERJUyB8IEFUOTFfUERDX1RYVERJUyk7CisJfQorCisJREJHKCJwb3N0IGRtYSByZWFkIGRvbmVcbiIpOworfQorCisvKgorICogSGFuZGxlIHRyYW5zbWl0dGVkIGRhdGEKKyAqLworc3RhdGljIHZvaWQgYXQ5MV9tY2lfaGFuZGxlX3RyYW5zbWl0dGVkKHN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CisJc3RydWN0IG1tY19kYXRhICpkYXRhOworCisJREJHKCJIYW5kbGluZyB0aGUgdHJhbnNtaXRcbiIpOworCisJLyogRGlzYWJsZSB0aGUgdHJhbnNmZXIgKi8KKwlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRESVMgfCBBVDkxX1BEQ19UWFRESVMpOworCisJLyogTm93IHdhaXQgZm9yIGNtZCByZWFkeSAqLworCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0lEUiwgQVQ5MV9NQ0lfVFhCVUZFKTsKKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRVIsIEFUOTFfTUNJX05PVEJVU1kpOworCisJY21kID0gaG9zdC0+Y21kOworCWlmICghY21kKSByZXR1cm47CisKKwlkYXRhID0gY21kLT5kYXRhOworCWlmICghZGF0YSkgcmV0dXJuOworCisJZGF0YS0+Ynl0ZXNfeGZlcmVkID0gaG9zdC0+dG90YWxfbGVuZ3RoOworfQorCisvKgorICogRW5hYmxlIHRoZSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIGF0OTFfbWNpX2VuYWJsZSh2b2lkKQoreworCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0NSLCBBVDkxX01DSV9NQ0lFTik7CisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfSURSLCAweEZGRkZGRkZGKTsKKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9EVE9SLCBBVDkxX01DSV9EVE9NVUxfMU0gfCBBVDkxX01DSV9EVE9DWUMpOworCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX01SLCAweDgzNEEpOworCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX1NEQ1IsIDB4MCk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIGF0OTFfbWNpX2Rpc2FibGUodm9pZCkKK3sKKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DUiwgQVQ5MV9NQ0lfTUNJRElTIHwgQVQ5MV9NQ0lfU1dSU1QpOworfQorCisvKgorICogU2VuZCBhIGNvbW1hbmQKKyAqIHJldHVybiB0aGUgaW50ZXJydXB0cyB0byBlbmFibGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBhdDkxX21jaV9zZW5kX2NvbW1hbmQoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCit7CisJdW5zaWduZWQgaW50IGNtZHIsIG1yOworCXVuc2lnbmVkIGludCBibG9ja19sZW5ndGg7CisJc3RydWN0IG1tY19kYXRhICpkYXRhID0gY21kLT5kYXRhOworCisJdW5zaWduZWQgaW50IGJsb2NrczsKKwl1bnNpZ25lZCBpbnQgaWVyID0gMDsKKworCWhvc3QtPmNtZCA9IGNtZDsKKworCS8qIE5vdCBzdXJlIGlmIHRoaXMgaXMgbmVlZGVkICovCisjaWYgMAorCWlmICgoYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TUikgJiBBVDkxX01DSV9SVE9FKSAmJiAoY21kLT5vcGNvZGUgPT0gMSkpIHsKKwkJREJHKCJDbGVhcmluZyB0aW1lb3V0XG4iKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQVJHUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0NNRFIsIEFUOTFfTUNJX09QRENNRCk7CisJCXdoaWxlICghKGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfU1IpICYgQVQ5MV9NQ0lfQ01EUkRZKSkgeworCQkJLyogc3BpbiAqLworCQkJREJHKCJDbGVhcmluZzogU1IgPSAlMDhYXG4iLCBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1NSKSk7CisJCX0KKwl9CisjZW5kaWYKKwljbWRyID0gY21kLT5vcGNvZGU7CisKKwlpZiAobW1jX3Jlc3BfdHlwZShjbWQpID09IE1NQ19SU1BfTk9ORSkKKwkJY21kciB8PSBBVDkxX01DSV9SU1BUWVBfTk9ORTsKKwllbHNlIHsKKwkJLyogaWYgYSByZXNwb25zZSBpcyBleHBlY3RlZCB0aGVuIGFsbG93IG1heGltdW0gcmVzcG9uc2UgbGF0YW5jeSAqLworCQljbWRyIHw9IEFUOTFfTUNJX01BWExBVDsKKwkJLyogc2V0IDEzNiBiaXQgcmVzcG9uc2UgZm9yIFIyLCA0OCBiaXQgcmVzcG9uc2Ugb3RoZXJ3aXNlICovCisJCWlmIChtbWNfcmVzcF90eXBlKGNtZCkgPT0gTU1DX1JTUF9SMikKKwkJCWNtZHIgfD0gQVQ5MV9NQ0lfUlNQVFlQXzEzNjsKKwkJZWxzZQorCQkJY21kciB8PSBBVDkxX01DSV9SU1BUWVBfNDg7CisJfQorCisJaWYgKGRhdGEpIHsKKwkJYmxvY2tfbGVuZ3RoID0gMSA8PCBkYXRhLT5ibGtzel9iaXRzOworCQlibG9ja3MgPSBkYXRhLT5ibG9ja3M7CisKKwkJLyogYWx3YXlzIHNldCBkYXRhIHN0YXJ0IC0gYWxzbyBzZXQgZGlyZWN0aW9uIGZsYWcgZm9yIHJlYWQgKi8KKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJCWNtZHIgfD0gKEFUOTFfTUNJX1RSRElSIHwgQVQ5MV9NQ0lfVFJDTURfU1RBUlQpOworCQllbHNlIGlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQkJY21kciB8PSBBVDkxX01DSV9UUkNNRF9TVEFSVDsKKworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9TVFJFQU0pCisJCQljbWRyIHw9IEFUOTFfTUNJX1RSVFlQX1NUUkVBTTsKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfTVVMVEkpCisJCQljbWRyIHw9IEFUOTFfTUNJX1RSVFlQX01VTFRJUExFOworCX0KKwllbHNlIHsKKwkJYmxvY2tfbGVuZ3RoID0gMDsKKwkJYmxvY2tzID0gMDsKKwl9CisKKwlpZiAoY21kLT5vcGNvZGUgPT0gTU1DX1NUT1BfVFJBTlNNSVNTSU9OKQorCQljbWRyIHw9IEFUOTFfTUNJX1RSQ01EX1NUT1A7CisKKwlpZiAoaG9zdC0+YnVzX21vZGUgPT0gTU1DX0JVU01PREVfT1BFTkRSQUlOKQorCQljbWRyIHw9IEFUOTFfTUNJX09QRENNRDsKKworCS8qCisJICogU2V0IHRoZSBhcmd1bWVudHMgYW5kIHNlbmQgdGhlIGNvbW1hbmQKKwkgKi8KKwlEQkcoIlNlbmRpbmcgY29tbWFuZCAlZCBhcyAlMDhYLCBhcmcgPSAlMDhYLCBibG9ja3MgPSAlZCwgbGVuZ3RoID0gJWQgKE1SID0gJTA4bFgpXG4iLAorCQljbWQtPm9wY29kZSwgY21kciwgY21kLT5hcmcsIGJsb2NrcywgYmxvY2tfbGVuZ3RoLCBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX01SKSk7CisKKwlpZiAoIWRhdGEpIHsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfVFhURElTIHwgQVQ5MV9QRENfUlhURElTKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUlBSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUkNSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUk5QUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JOQ1IsIDApOworCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19UUFIsIDApOworCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19UQ1IsIDApOworCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19UTlBSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVE5DUiwgMCk7CisKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQVJHUiwgY21kLT5hcmcpOworCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DTURSLCBjbWRyKTsKKwkJcmV0dXJuIEFUOTFfTUNJX0NNRFJEWTsKKwl9CisKKwltciA9IGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfTVIpICYgMHg3ZmZmOwkvKiB6ZXJvIGJsb2NrIGxlbmd0aCBhbmQgUERDIG1vZGUgKi8KKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9NUiwgbXIgfCAoYmxvY2tfbGVuZ3RoIDw8IDE2KSB8IEFUOTFfTUNJX1BEQ01PREUpOworCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBQREMgY29udHJvbGxlcgorCSAqLworCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1JYVERJUyB8IEFUOTFfUERDX1RYVERJUyk7CisKKwlpZiAoY21kciAmIEFUOTFfTUNJX1RSQ01EX1NUQVJUKSB7CisJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IDA7CisJCWhvc3QtPnRyYW5zZmVyX2luZGV4ID0gMDsKKwkJaG9zdC0+aW5fdXNlX2luZGV4ID0gMDsKKwkJaWYgKGNtZHIgJiBBVDkxX01DSV9UUkRJUikgeworCQkJLyoKKwkJCSAqIEhhbmRsZSBhIHJlYWQKKwkJCSAqLworCQkJaG9zdC0+YnVmZmVyID0gTlVMTDsKKwkJCWhvc3QtPnRvdGFsX2xlbmd0aCA9IDA7CisKKwkJCWF0OTFtY2lfcHJlX2RtYV9yZWFkKGhvc3QpOworCQkJaWVyID0gQVQ5MV9NQ0lfRU5EUlggLyogfCBBVDkxX01DSV9SWEJVRkYgKi87CisJCX0KKwkJZWxzZSB7CisJCQkvKgorCQkJICogSGFuZGxlIGEgd3JpdGUKKwkJCSAqLworCQkJaG9zdC0+dG90YWxfbGVuZ3RoID0gYmxvY2tfbGVuZ3RoICogYmxvY2tzOworCQkJaG9zdC0+YnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsCisJCQkJCQkgIGhvc3QtPnRvdGFsX2xlbmd0aCwKKwkJCQkJCSAgJmhvc3QtPnBoeXNpY2FsX2FkZHJlc3MsIEdGUF9LRVJORUwpOworCisJCQlhdDkxbWNpX3NnX3RvX2RtYShob3N0LCBkYXRhKTsKKworCQkJREJHKCJUcmFuc21pdHRpbmcgJWQgYnl0ZXNcbiIsIGhvc3QtPnRvdGFsX2xlbmd0aCk7CisKKwkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1RQUiwgaG9zdC0+cGh5c2ljYWxfYWRkcmVzcyk7CisJCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19UQ1IsIGhvc3QtPnRvdGFsX2xlbmd0aCAvIDQpOworCQkJaWVyID0gQVQ5MV9NQ0lfVFhCVUZFOworCQl9CisJfQorCisJLyoKKwkgKiBTZW5kIHRoZSBjb21tYW5kIGFuZCB0aGVuIGVuYWJsZSB0aGUgUERDIC0gbm90IHRoZSBvdGhlciB3YXkgcm91bmQgYXMKKwkgKiB0aGUgZGF0YSBzaGVldCBzYXlzCisJICovCisKKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9BUkdSLCBjbWQtPmFyZyk7CisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQ01EUiwgY21kcik7CisKKwlpZiAoY21kciAmIEFUOTFfTUNJX1RSQ01EX1NUQVJUKSB7CisJCWlmIChjbWRyICYgQVQ5MV9NQ0lfVFJESVIpCisJCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRFTik7CisJCWVsc2UKKwkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1RYVEVOKTsKKwl9CisJcmV0dXJuIGllcjsKK30KKworLyoKKyAqIFdhaXQgZm9yIGEgY29tbWFuZCB0byBjb21wbGV0ZQorICovCitzdGF0aWMgdm9pZCBhdDkxbWNpX3Byb2Nlc3NfY29tbWFuZChzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgaWVyOworCisJaWVyID0gYXQ5MV9tY2lfc2VuZF9jb21tYW5kKGhvc3QsIGNtZCk7CisKKwlEQkcoInNldHRpbmcgaWVyIHRvICUwOFhcbiIsIGllcik7CisKKwkvKiBTdG9wIG9uIGVycm9ycyBvciB0aGUgcmVxdWlyZWQgdmFsdWUgKi8KKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRVIsIDB4ZmZmZjAwMDAgfCBpZXIpOworfQorCisvKgorICogUHJvY2VzcyB0aGUgbmV4dCBzdGVwIGluIHRoZSByZXF1ZXN0CisgKi8KK3N0YXRpYyB2b2lkIGF0OTFtY2lfcHJvY2Vzc19uZXh0KHN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QpCit7CisJaWYgKCEoaG9zdC0+ZmxhZ3MgJiBGTF9TRU5UX0NPTU1BTkQpKSB7CisJCWhvc3QtPmZsYWdzIHw9IEZMX1NFTlRfQ09NTUFORDsKKwkJYXQ5MW1jaV9wcm9jZXNzX2NvbW1hbmQoaG9zdCwgaG9zdC0+cmVxdWVzdC0+Y21kKTsKKwl9CisJZWxzZSBpZiAoKCEoaG9zdC0+ZmxhZ3MgJiBGTF9TRU5UX1NUT1ApKSAmJiBob3N0LT5yZXF1ZXN0LT5zdG9wKSB7CisJCWhvc3QtPmZsYWdzIHw9IEZMX1NFTlRfU1RPUDsKKwkJYXQ5MW1jaV9wcm9jZXNzX2NvbW1hbmQoaG9zdCwgaG9zdC0+cmVxdWVzdC0+c3RvcCk7CisJfQorCWVsc2UKKwkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIGhvc3QtPnJlcXVlc3QpOworfQorCisvKgorICogSGFuZGxlIGEgY29tbWFuZCB0aGF0IGhhcyBiZWVuIGNvbXBsZXRlZAorICovCitzdGF0aWMgdm9pZCBhdDkxbWNpX2NvbXBsZXRlZF9jb21tYW5kKHN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBob3N0LT5jbWQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0lEUiwgMHhmZmZmZmZmZik7CisKKwljbWQtPnJlc3BbMF0gPSBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1JTUFIoMCkpOworCWNtZC0+cmVzcFsxXSA9IGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfUlNQUigxKSk7CisJY21kLT5yZXNwWzJdID0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9SU1BSKDIpKTsKKwljbWQtPnJlc3BbM10gPSBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1JTUFIoMykpOworCisJaWYgKGhvc3QtPmJ1ZmZlcikgeworCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBob3N0LT50b3RhbF9sZW5ndGgsIGhvc3QtPmJ1ZmZlciwgaG9zdC0+cGh5c2ljYWxfYWRkcmVzcyk7CisJCWhvc3QtPmJ1ZmZlciA9IE5VTEw7CisJfQorCisJc3RhdHVzID0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TUik7CisKKwlEQkcoIlN0YXR1cyA9ICUwOFggWyUwOFggJTA4WCAlMDhYICUwOFhdXG4iLAorCQkgc3RhdHVzLCBjbWQtPnJlc3BbMF0sIGNtZC0+cmVzcFsxXSwgY21kLT5yZXNwWzJdLCBjbWQtPnJlc3BbM10pOworCisJaWYgKHN0YXR1cyAmIChBVDkxX01DSV9SSU5ERSB8IEFUOTFfTUNJX1JESVJFIHwgQVQ5MV9NQ0lfUkNSQ0UgfAorCQkJQVQ5MV9NQ0lfUkVOREUgfCBBVDkxX01DSV9SVE9FIHwgQVQ5MV9NQ0lfRENSQ0UgfAorCQkJQVQ5MV9NQ0lfRFRPRSB8IEFUOTFfTUNJX09WUkUgfCBBVDkxX01DSV9VTlJFKSkgeworCQlpZiAoKHN0YXR1cyAmIEFUOTFfTUNJX1JDUkNFKSAmJgorCQkJKChjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9PUF9DT05EKSB8fCAoY21kLT5vcGNvZGUgPT0gU0RfQVBQX09QX0NPTkQpKSkgeworCQkJY21kLT5lcnJvciA9IE1NQ19FUlJfTk9ORTsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChzdGF0dXMgJiAoQVQ5MV9NQ0lfUlRPRSB8IEFUOTFfTUNJX0RUT0UpKQorCQkJCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX1RJTUVPVVQ7CisJCQllbHNlIGlmIChzdGF0dXMgJiAoQVQ5MV9NQ0lfUkNSQ0UgfCBBVDkxX01DSV9EQ1JDRSkpCisJCQkJY21kLT5lcnJvciA9IE1NQ19FUlJfQkFEQ1JDOworCQkJZWxzZSBpZiAoc3RhdHVzICYgKEFUOTFfTUNJX09WUkUgfCBBVDkxX01DSV9VTlJFKSkKKwkJCQljbWQtPmVycm9yID0gTU1DX0VSUl9GSUZPOworCQkJZWxzZQorCQkJCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX0ZBSUxFRDsKKworCQkJREJHKCJFcnJvciBkZXRlY3RlZCBhbmQgc2V0IHRvICVkIChjbWQgPSAlZCwgcmV0cmllcyA9ICVkKVxuIiwKKwkJCQkgY21kLT5lcnJvciwgY21kLT5vcGNvZGUsIGNtZC0+cmV0cmllcyk7CisJCX0KKwl9CisJZWxzZQorCQljbWQtPmVycm9yID0gTU1DX0VSUl9OT05FOworCisJYXQ5MW1jaV9wcm9jZXNzX25leHQoaG9zdCk7Cit9CisKKy8qCisgKiBIYW5kbGUgYW4gTU1DIHJlcXVlc3QKKyAqLworc3RhdGljIHZvaWQgYXQ5MV9tY2lfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaG9zdC0+cmVxdWVzdCA9IG1ycTsKKwlob3N0LT5mbGFncyA9IDA7CisKKwlhdDkxbWNpX3Byb2Nlc3NfbmV4dChob3N0KTsKK30KKworLyoKKyAqIFNldCB0aGUgSU9TCisgKi8KK3N0YXRpYyB2b2lkIGF0OTFfbWNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJaW50IGNsa2RpdjsKKwlzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBsb25nIGF0OTFfbWFzdGVyX2Nsb2NrID0gY2xrX2dldF9yYXRlKG1jaV9jbGspOworCisJaWYgKGhvc3QpCisJCWhvc3QtPmJ1c19tb2RlID0gaW9zLT5idXNfbW9kZTsKKwllbHNlCisJCXByaW50aygiTU1DOiBObyBob3N0IGZvciBidXNfbW9kZVxuIik7CisKKwlpZiAoaW9zLT5jbG9jayA9PSAwKSB7CisJCS8qIERpc2FibGUgdGhlIE1DSSBjb250cm9sbGVyICovCisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0NSLCBBVDkxX01DSV9NQ0lESVMpOworCQljbGtkaXYgPSAwOworCX0KKwllbHNlIHsKKwkJLyogRW5hYmxlIHRoZSBNQ0kgY29udHJvbGxlciAqLworCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DUiwgQVQ5MV9NQ0lfTUNJRU4pOworCisJCWlmICgoYXQ5MV9tYXN0ZXJfY2xvY2sgJSAoaW9zLT5jbG9jayAqIDIpKSA9PSAwKQorCQkJY2xrZGl2ID0gKChhdDkxX21hc3Rlcl9jbG9jayAvIGlvcy0+Y2xvY2spIC8gMikgLSAxOworCQllbHNlCisJCQljbGtkaXYgPSAoYXQ5MV9tYXN0ZXJfY2xvY2sgLyBpb3MtPmNsb2NrKSAvIDI7CisKKwkJREJHKCJjbGtkaXYgPSAlZC4gbWNjayA9ICVsZFxuIiwgY2xrZGl2LAorCQkJYXQ5MV9tYXN0ZXJfY2xvY2sgLyAoMiAqIChjbGtkaXYgKyAxKSkpOworCX0KKwlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80ICYmIGhvc3QtPmJvYXJkLT53aXJlNCkgeworCQlEQkcoIk1NQzogU2V0dGluZyBjb250cm9sbGVyIGJ1cyB3aWR0aCB0byA0XG4iKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfU0RDUiwgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TRENSKSB8IEFUOTFfTUNJX1NEQ0JVUyk7CisJfQorCWVsc2UgeworCQlEQkcoIk1NQzogU2V0dGluZyBjb250cm9sbGVyIGJ1cyB3aWR0aCB0byAxXG4iKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfU0RDUiwgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TRENSKSAmIH5BVDkxX01DSV9TRENCVVMpOworCX0KKworCS8qIFNldCB0aGUgY2xvY2sgZGl2aWRlciAqLworCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX01SLCAoYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9NUikgJiB+QVQ5MV9NQ0lfQ0xLRElWKSB8IGNsa2Rpdik7CisKKwkvKiBtYXliZSBzd2l0Y2ggcG93ZXIgdG8gdGhlIGNhcmQgKi8KKwlpZiAoaG9zdCAmJiBob3N0LT5ib2FyZC0+dmNjX3BpbikgeworCQlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgeworCQkJY2FzZSBNTUNfUE9XRVJfT0ZGOgorCQkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGhvc3QtPmJvYXJkLT52Y2NfcGluLCAwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTU1DX1BPV0VSX1VQOgorCQkJY2FzZSBNTUNfUE9XRVJfT046CisJCQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoaG9zdC0+Ym9hcmQtPnZjY19waW4sIDEpOworCQkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogSGFuZGxlIGFuIGludGVycnVwdAorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MV9tY2lfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0ID0gZGV2aWQ7CisJaW50IGNvbXBsZXRlZCA9IDA7CisKKwl1bnNpZ25lZCBpbnQgaW50X3N0YXR1czsKKworCWlmIChob3N0ID09IE5VTEwpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCWludF9zdGF0dXMgPSBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1NSKTsKKwlEQkcoIk1DSSBpcnE6IHN0YXR1cyA9ICUwOFgsICUwOGxYLCAlMDhsWFxuIiwgaW50X3N0YXR1cywgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9JTVIpLAorCQlpbnRfc3RhdHVzICYgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9JTVIpKTsKKworCWlmICgoaW50X3N0YXR1cyAmIGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfSU1SKSkgJiAweGZmZmYwMDAwKQorCQljb21wbGV0ZWQgPSAxOworCisJaW50X3N0YXR1cyAmPSBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX0lNUik7CisKKwlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1VOUkUpCisJCURCRygiTU1DOiBVbmRlcnJ1biBlcnJvclxuIik7CisJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9PVlJFKQorCQlEQkcoIk1NQzogT3ZlcnJ1biBlcnJvclxuIik7CisJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9EVE9FKQorCQlEQkcoIk1NQzogRGF0YSB0aW1lb3V0XG4iKTsKKwlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0RDUkNFKQorCQlEQkcoIk1NQzogQ1JDIGVycm9yIGluIGRhdGFcbiIpOworCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfUlRPRSkKKwkJREJHKCJNTUM6IFJlc3BvbnNlIHRpbWVvdXRcbiIpOworCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfUkVOREUpCisJCURCRygiTU1DOiBSZXNwb25zZSBlbmQgYml0IGVycm9yXG4iKTsKKwlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JDUkNFKQorCQlEQkcoIk1NQzogUmVzcG9uc2UgQ1JDIGVycm9yXG4iKTsKKwlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JESVJFKQorCQlEQkcoIk1NQzogUmVzcG9uc2UgZGlyZWN0aW9uIGVycm9yXG4iKTsKKwlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JJTkRFKQorCQlEQkcoIk1NQzogUmVzcG9uc2UgaW5kZXggZXJyb3JcbiIpOworCisJLyogT25seSBjb250aW51ZSBwcm9jZXNzaW5nIGlmIG5vIGVycm9ycyAqLworCWlmICghY29tcGxldGVkKSB7CisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfVFhCVUZFKSB7CisJCQlEQkcoIlRYIGJ1ZmZlciBlbXB0eVxuIik7CisJCQlhdDkxX21jaV9oYW5kbGVfdHJhbnNtaXR0ZWQoaG9zdCk7CisJCX0KKworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JYQlVGRikgeworCQkJREJHKCJSWCBidWZmZXIgZnVsbFxuIik7CisJCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRVIsIEFUOTFfTUNJX0NNRFJEWSk7CisJCX0KKworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0VORFRYKSB7CisJCQlEQkcoIlRyYW5zbWl0IGhhcyBlbmRlZFxuIik7CisJCX0KKworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0VORFJYKSB7CisJCQlEQkcoIlJlY2VpdmUgaGFzIGVuZGVkXG4iKTsKKwkJCWF0OTFtY2lfcG9zdF9kbWFfcmVhZChob3N0KTsKKwkJfQorCisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfTk9UQlVTWSkgeworCQkJREJHKCJDYXJkIGlzIHJlYWR5XG4iKTsKKwkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0lFUiwgQVQ5MV9NQ0lfQ01EUkRZKTsKKwkJfQorCisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfRFRJUCkgeworCQkJREJHKCJEYXRhIHRyYW5zZmVyIGluIHByb2dyZXNzXG4iKTsKKwkJfQorCisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfQkxLRSkgeworCQkJREJHKCJCbG9jayB0cmFuc2ZlciBoYXMgZW5kZWRcbiIpOworCQl9CisKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9UWFJEWSkgeworCQkJREJHKCJSZWFkeSB0byB0cmFuc21pdFxuIik7CisJCX0KKworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JYUkRZKSB7CisJCQlEQkcoIlJlYWR5IHRvIHJlY2VpdmVcbiIpOworCQl9CisKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9DTURSRFkpIHsKKwkJCURCRygiQ29tbWFuZCByZWFkeVxuIik7CisJCQljb21wbGV0ZWQgPSAxOworCQl9CisJfQorCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0lEUiwgaW50X3N0YXR1cyk7CisKKwlpZiAoY29tcGxldGVkKSB7CisJCURCRygiQ29tcGxldGVkIGNvbW1hbmRcbiIpOworCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRFIsIDB4ZmZmZmZmZmYpOworCQlhdDkxbWNpX2NvbXBsZXRlZF9jb21tYW5kKGhvc3QpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGF0OTFfbW1jX2RldF9pcnEoaW50IGlycSwgdm9pZCAqX2hvc3QsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QgPSBfaG9zdDsKKwlpbnQgcHJlc2VudCA9ICFhdDkxX2dldF9ncGlvX3ZhbHVlKGlycSk7CisKKwkvKgorCSAqIHdlIGV4cGVjdCB0aGlzIGlycSBvbiBib3RoIGluc2VydCBhbmQgcmVtb3ZlLAorCSAqIGFuZCB1c2UgYSBzaG9ydCBkZWxheSB0byBkZWJvdW5jZS4KKwkgKi8KKwlpZiAocHJlc2VudCAhPSBob3N0LT5wcmVzZW50KSB7CisJCWhvc3QtPnByZXNlbnQgPSBwcmVzZW50OworCQlEQkcoIiVzOiBjYXJkICVzXG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwKKwkJCXByZXNlbnQgPyAiaW5zZXJ0IiA6ICJyZW1vdmUiKTsKKwkJaWYgKCFwcmVzZW50KSB7CisJCQlEQkcoIioqKioqKiBSZXNldHRpbmcgU0QtY2FyZCBidXMgd2lkdGggKioqKioqXG4iKTsKKwkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX1NEQ1IsIDApOworCQl9CisJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgYXQ5MV9tY2lfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQoreworCWludCByZWFkX29ubHkgPSAwOworCXN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJaWYgKGhvc3QtPmJvYXJkLT53cF9waW4pIHsKKwkJcmVhZF9vbmx5ID0gYXQ5MV9nZXRfZ3Bpb192YWx1ZShob3N0LT5ib2FyZC0+d3BfcGluKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhcmQgaXMgJXNcbiIsIG1tY19ob3N0bmFtZShtbWMpLAorCQkJCShyZWFkX29ubHkgPyAicmVhZC1vbmx5IiA6ICJyZWFkLXdyaXRlIikgKTsKKwl9CisJZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBob3N0IGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyByZWFkLW9ubHkgIgorCQkJCSJzd2l0Y2guICBBc3N1bWluZyB3cml0ZS1lbmFibGUuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CisJfQorCXJldHVybiByZWFkX29ubHk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGF0OTFfbWNpX29wcyA9IHsKKwkucmVxdWVzdAk9IGF0OTFfbWNpX3JlcXVlc3QsCisJLnNldF9pb3MJPSBhdDkxX21jaV9zZXRfaW9zLAorCS5nZXRfcm8JCT0gYXQ5MV9tY2lfZ2V0X3JvLAorfTsKKworLyoKKyAqIFByb2JlIGZvciB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgYXQ5MV9tY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwlzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0OworCWludCByZXQ7CisKKwlEQkcoIlByb2JlIE1DSSBkZXZpY2VzXG4iKTsKKwlhdDkxX21jaV9kaXNhYmxlKCk7CisJYXQ5MV9tY2lfZW5hYmxlKCk7CisKKwltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IGF0OTFtY2lfaG9zdCksICZwZGV2LT5kZXYpOworCWlmICghbW1jKSB7CisJCURCRygiRmFpbGVkIHRvIGFsbG9jYXRlIG1tYyBob3N0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbW1jLT5vcHMgPSAmYXQ5MV9tY2lfb3BzOworCW1tYy0+Zl9taW4gPSAzNzUwMDA7CisJbW1jLT5mX21heCA9IDI1MDAwMDAwOworCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlob3N0LT5tbWMgPSBtbWM7CisJaG9zdC0+YnVmZmVyID0gTlVMTDsKKwlob3N0LT5idXNfbW9kZSA9IDA7CisJaG9zdC0+Ym9hcmQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoaG9zdC0+Ym9hcmQtPndpcmU0KSB7CisjaWZkZWYgU1VQUE9SVF80V0lSRQorCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOworI2Vsc2UKKwkJcHJpbnRrKCJNTUM6IDQgd2lyZSBidXMgbW9kZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIC0gdXNpbmcgMSB3aXJlXG4iKTsKKyNlbmRpZgorCX0KKworCS8qCisJICogR2V0IENsb2NrCisJICovCisJbWNpX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1jaV9jbGsiKTsKKwlpZiAoIW1jaV9jbGspIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBVDkxIE1NQzogbm8gY2xvY2sgZGVmaW5lZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJY2xrX2VuYWJsZShtY2lfY2xrKTsJCQkvKiBFbmFibGUgdGhlIHBlcmlwaGVyYWwgY2xvY2sgKi8KKworCS8qCisJICogQWxsb2NhdGUgdGhlIE1DSSBpbnRlcnJ1cHQKKwkgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShBVDkxX0lEX01DSSwgYXQ5MV9tY2lfaXJxLCBTQV9TSElSUSwgRFJJVkVSX05BTUUsIGhvc3QpOworCWlmIChyZXQpIHsKKwkJREJHKCJGYWlsZWQgdG8gcmVxdWVzdCBNQ0kgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOworCisJLyoKKwkgKiBBZGQgaG9zdCB0byBNTUMgbGF5ZXIKKwkgKi8KKwlpZiAoaG9zdC0+Ym9hcmQtPmRldF9waW4pCisJCWhvc3QtPnByZXNlbnQgPSAhYXQ5MV9nZXRfZ3Bpb192YWx1ZShob3N0LT5ib2FyZC0+ZGV0X3Bpbik7CisJZWxzZQorCQlob3N0LT5wcmVzZW50ID0gLTE7CisKKwltbWNfYWRkX2hvc3QobW1jKTsKKworCS8qCisJICogbW9uaXRvciBjYXJkIGluc2VydGlvbi9yZW1vdmFsIGlmIHdlIGNhbgorCSAqLworCWlmIChob3N0LT5ib2FyZC0+ZGV0X3BpbikgeworCQlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5ib2FyZC0+ZGV0X3BpbiwgYXQ5MV9tbWNfZGV0X2lycSwKKwkJCQlTQV9TQU1QTEVfUkFORE9NLCBEUklWRVJfTkFNRSwgaG9zdCk7CisJCWlmIChyZXQpCisJCQlEQkcoImNvdWxkbid0IGFsbG9jYXRlIE1NQyBkZXRlY3QgaXJxXG4iKTsKKwl9CisKKwlEQkcoS0VSTl9JTkZPICJBZGRlZCBNQ0kgZHJpdmVyXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVtb3ZlIGEgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgYXQ5MV9tY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0OworCisJaWYgKCFtbWMpCisJCXJldHVybiAtMTsKKworCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJaWYgKGhvc3QtPnByZXNlbnQgIT0gLTEpIHsKKwkJZnJlZV9pcnEoaG9zdC0+Ym9hcmQtPmRldF9waW4sIGhvc3QpOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZob3N0LT5tbWMtPmRldGVjdCk7CisJfQorCisJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CisJYXQ5MV9tY2lfZGlzYWJsZSgpOworCWZyZWVfaXJxKEFUOTFfSURfTUNJLCBob3N0KTsKKwltbWNfZnJlZV9ob3N0KG1tYyk7CisKKwljbGtfZGlzYWJsZShtY2lfY2xrKTsJCQkJLyogRGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBjbG9jayAqLworCWNsa19wdXQobWNpX2Nsayk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCURCRygiUmVtb3ZlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdDkxX21jaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQgPSAwOworCisJaWYgKG1tYykKKwkJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9tY2lfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtbWMpCisJCXJldCA9IG1tY19yZXN1bWVfaG9zdChtbWMpOworCisJcmV0dXJuIHJldDsKK30KKyNlbHNlCisjZGVmaW5lIGF0OTFfbWNpX3N1c3BlbmQJTlVMTAorI2RlZmluZSBhdDkxX21jaV9yZXN1bWUJCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDkxX21jaV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGF0OTFfbWNpX3Byb2JlLAorCS5yZW1vdmUJCT0gYXQ5MV9tY2lfcmVtb3ZlLAorCS5zdXNwZW5kCT0gYXQ5MV9tY2lfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0OTFfbWNpX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfbWNpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdDkxX21jaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXQ5MV9tY2lfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdDkxX21jaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhdDkxX21jaV9pbml0KTsKK21vZHVsZV9leGl0KGF0OTFfbWNpX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFUOTEgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk5pY2sgUmFuZGVsbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvYXUxeG1tYy5jIGIvZHJpdmVycy9tbWMvYXUxeG1tYy5jCmluZGV4IDg1ZTg5YzcuLjVkYzRiZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2F1MXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9hdTF4bW1jLmMKQEAgLTU2LDEyICs1NiwxMSBAQAogI2RlZmluZSBEUklWRVJfTkFNRSAiYXUxeHh4LW1tYyIKIAogLyogU2V0IHRoaXMgdG8gZW5hYmxlIHNwZWNpYWwgZGVidWdnaW5nIG1hY3JvcyAqLwotLyogI2RlZmluZSBNTUNfREVCVUcgKi8KIAotI2lmZGVmIE1NQ19ERUJVRwotI2RlZmluZSBERUJVRyhmbXQsIGlkeCwgYXJncy4uLikgcHJpbnRrKCJhdTF4eCglZCk6IERFQlVHOiAiIGZtdCwgaWR4LCAjI2FyZ3MpCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgaWR4LCBhcmdzLi4uKSBwcmludGsoImF1MXh4KCVkKTogREVCVUc6ICIgZm10LCBpZHgsICMjYXJncykKICNlbHNlCi0jZGVmaW5lIERFQlVHKGZtdCwgaWR4LCBhcmdzLi4uKQorI2RlZmluZSBEQkcoZm10LCBpZHgsIGFyZ3MuLi4pCiAjZW5kaWYKIAogY29uc3Qgc3RydWN0IHsKQEAgLTMxMSw3ICszMTAsNyBAQAogCQl9CiAJCWVsc2UKIAkJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9Ci0JCQkJKGRhdGEtPmJsb2NrcyAqICgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpKSAtCisJCQkJKGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6KSAtCiAJCQkJaG9zdC0+cGlvLmxlbjsKIAl9CiAKQEAgLTQyNCwxOCArNDIzLDE4IEBACiAJCQlicmVhazsKIAogCQlpZiAoc3RhdHVzICYgU0RfU1RBVFVTX1JDKSB7Ci0JCQlERUJVRygiUlggQ1JDIEVycm9yIFslZCArICVkXS5cbiIsIGhvc3QtPmlkLAorCQkJREJHKCJSWCBDUkMgRXJyb3IgWyVkICsgJWRdLlxuIiwgaG9zdC0+aWQsCiAJCQkJCWhvc3QtPnBpby5sZW4sIGNvdW50KTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKHN0YXR1cyAmIFNEX1NUQVRVU19STykgewotCQkJREVCVUcoIlJYIE92ZXJydW4gWyVkICsgJWRdXG4iLCBob3N0LT5pZCwKKwkJCURCRygiUlggT3ZlcnJ1biBbJWQgKyAlZF1cbiIsIGhvc3QtPmlkLAogCQkJCQlob3N0LT5waW8ubGVuLCBjb3VudCk7CiAJCQlicmVhazsKIAkJfQogCQllbHNlIGlmIChzdGF0dXMgJiBTRF9TVEFUVVNfUlUpIHsKLQkJCURFQlVHKCJSWCBVbmRlcnJ1biBbJWQgKyAlZF1cbiIsIGhvc3QtPmlkLAorCQkJREJHKCJSWCBVbmRlcnJ1biBbJWQgKyAlZF1cbiIsIGhvc3QtPmlkLAogCQkJCQlob3N0LT5waW8ubGVuLAljb3VudCk7CiAJCQlicmVhazsKIAkJfQpAQCAtNTc2LDcgKzU3NSw3IEBACiBhdTF4bW1jX3ByZXBhcmVfZGF0YShzdHJ1Y3QgYXUxeG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAKLQlpbnQgZGF0YWxlbiA9IGRhdGEtPmJsb2NrcyAqICgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpOworCWludCBkYXRhbGVuID0gZGF0YS0+YmxvY2tzICogZGF0YS0+Ymxrc3o7CiAKIAlpZiAoZG1hICE9IDApCiAJCWhvc3QtPmZsYWdzIHw9IEhPU1RfRl9ETUE7CkBAIC01OTcsNyArNTk2LDcgQEAKIAlpZiAoaG9zdC0+ZG1hLmxlbiA9PSAwKQogCQlyZXR1cm4gTU1DX0VSUl9USU1FT1VUOwogCi0JYXVfd3JpdGVsKCgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpIC0gMSwgSE9TVF9CTEtTSVpFKGhvc3QpKTsKKwlhdV93cml0ZWwoZGF0YS0+Ymxrc3ogLSAxLCBIT1NUX0JMS1NJWkUoaG9zdCkpOwogCiAJaWYgKGhvc3QtPmZsYWdzICYgSE9TVF9GX0RNQSkgewogCQlpbnQgaTsKQEAgLTcyMSwxMCArNzIwLDYgQEAKIHsKIAlzdHJ1Y3QgYXUxeG1tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCURFQlVHKCJzZXRfaW9zIChwb3dlcj0ldSwgY2xvY2s9JXVIeiwgdmRkPSV1LCBtb2RlPSV1KVxuIiwKLQkgICAgICBob3N0LT5pZCwgaW9zLT5wb3dlcl9tb2RlLCBpb3MtPmNsb2NrLCBpb3MtPnZkZCwKLQkgICAgICBpb3MtPmJ1c19tb2RlKTsKLQogCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikKIAkJYXUxeG1tY19zZXRfcG93ZXIoaG9zdCwgMCk7CiAJZWxzZSBpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PTikgewpAQCAtODEwLDcgKzgwNSw3IEBACiAJCQkJYXUxeG1tY19yZWNlaXZlX3Bpbyhob3N0KTsKIAkJfQogCQllbHNlIGlmIChzdGF0dXMgJiAweDIwM0ZCQzcwKSB7Ci0JCQlERUJVRygiVW5oYW5kbGVkIHN0YXR1cyAlOC44eFxuIiwgaG9zdC0+aWQsIHN0YXR1cyk7CisJCQlEQkcoIlVuaGFuZGxlZCBzdGF0dXMgJTguOHhcbiIsIGhvc3QtPmlkLCBzdGF0dXMpOwogCQkJaGFuZGxlZCA9IDA7CiAJCX0KIApAQCAtODM5LDcgKzgzNCw3IEBACiAKIAlpZiAoaG9zdC0+bXJxICE9IE5VTEwpIHsKIAkJdTMyIHN0YXR1cyA9IGF1X3JlYWRsKEhPU1RfU1RBVFVTKGhvc3QpKTsKLQkJREVCVUcoIlBFTkRJTkcgLSAlOC44eFxuIiwgaG9zdC0+aWQsIHN0YXR1cyk7CisJCURCRygiUEVORElORyAtICU4Ljh4XG4iLCBob3N0LT5pZCwgc3RhdHVzKTsKIAl9CiAKIAltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgQVUxWE1NQ19ERVRFQ1RfVElNRU9VVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9pbXhtbWMuYyBiL2RyaXZlcnMvbW1jL2lteG1tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZWIxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwpAQCAtMCwwICsxLDExMjggQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9tbWMvaW14bW1jLmMgLSBNb3Rvcm9sYSBpLk1YIE1NQ0kgZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4IDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IFBhdmVsIFBpc2EsIFBpS1JPTiA8cHBpc2FAcGlrcm9uLmNvbT4KKyAqCisgKiAgZGVyaXZlZCBmcm9tIHB4YW1jaS5jIGJ5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIDIwMDUtMDQtMTcgUGF2ZWwgUGlzYSA8cGlzYUBjbXAuZmVsay5jdnV0LmN6PgorICogICAgICAgICAgICAgQ2hhbmdlZCB0byBjb25mb3JtIHJlZGVzaWduZWQgaS5NWCBzY2F0dGVyIGdhdGhlciBETUEgaW50ZXJmYWNlCisgKgorICogIDIwMDUtMTEtMDQgUGF2ZWwgUGlzYSA8cGlzYUBjbXAuZmVsay5jdnV0LmN6PgorICogICAgICAgICAgICAgVXBkYXRlZCBmb3IgMi42LjE0IGtlcm5lbAorICoKKyAqICAyMDA1LTEyLTEzIEpheSBNb25rbWFuIDxqdG1Ac21vb3Roc21vb3RoaWUuY29tPgorICogICAgICAgICAgICAgRm91bmQgYW5kIGNvcnJlY3RlZCBwcm9ibGVtcyBpbiB0aGUgd3JpdGUgcGF0aAorICoKKyAqICAyMDA1LTEyLTMwIFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KKyAqICAgICAgICAgICAgIFRoZSBldmVudCBoYW5kbGluZyByZXdyaXR0ZW4gcmlnaHQgd2F5IGluIHNvZnRpcnEuCisgKiAgICAgICAgICAgICBBZGRlZCBtYW55IHVnbHkgaGFja3MgYW5kIGRlbGF5cyB0byBvdmVyY29tZSBTREhDCisgKiAgICAgICAgICAgICBkZWZpY2llbmNpZXMKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19NTUNfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbHNlCisjdW5kZWYgIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtZG1hLmg+CisKKyNpbmNsdWRlICJpbXhtbWMuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAiaW14LW1tYyIKKworI2RlZmluZSBJTVhNQ0lfSU5UX01BU0tfREVGQVVMVCAoSU5UX01BU0tfQlVGX1JFQURZIHwgSU5UX01BU0tfREFUQV9UUkFOIHwgXAorCSAgICAgICAgICAgICAgSU5UX01BU0tfV1JJVEVfT1BfRE9ORSB8IElOVF9NQVNLX0VORF9DTURfUkVTIHwgXAorCQkgICAgICBJTlRfTUFTS19BVVRPX0NBUkRfREVURUNUIHwgSU5UX01BU0tfREFUMF9FTiB8IElOVF9NQVNLX1NESU8pCisKK3N0cnVjdCBpbXhtY2lfaG9zdCB7CisJc3RydWN0IG1tY19ob3N0CQkqbW1jOworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHJlc291cmNlCQkqcmVzOworCWludAkJCWlycTsKKwlpbXhfZG1hY2hfdAkJZG1hOworCXVuc2lnbmVkIGludAkJY2xrcnQ7CisJdW5zaWduZWQgaW50CQljbWRhdDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJaW1hc2s7CisJdW5zaWduZWQgaW50CQlwb3dlcl9tb2RlOworCXVuc2lnbmVkIGludAkJcHJlc2VudDsKKwlzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJc3RydWN0IG1tY19yZXF1ZXN0CSpyZXE7CisJc3RydWN0IG1tY19jb21tYW5kCSpjbWQ7CisJc3RydWN0IG1tY19kYXRhCQkqZGF0YTsKKworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0YXNrbGV0OworCXVuc2lnbmVkIGludAkJc3RhdHVzX3JlZzsKKwl1bnNpZ25lZCBsb25nCQlwZW5kaW5nX2V2ZW50czsKKwkvKiBOZXh0IHRvIGZpZWxkcyBhcmUgdGhlcmUgZm9yIENQVSBkcml2ZW4gdHJhbnNmZXJzIHRvIG92ZXJjb21lIFNESEMgZGVmaWNpZW5jaWVzICovCisJdTE2CQkJKmRhdGFfcHRyOworCXVuc2lnbmVkIGludAkJZGF0YV9jbnQ7CisJYXRvbWljX3QJCXN0dWNrX3RpbWVvdXQ7CisKKwl1bnNpZ25lZCBpbnQJCWRtYV9uZW50czsKKwl1bnNpZ25lZCBpbnQJCWRtYV9zaXplOworCXVuc2lnbmVkIGludAkJZG1hX2RpcjsKKwlpbnQJCQlkbWFfYWxsb2NhdGVkOworCisJdW5zaWduZWQgY2hhcgkJYWN0dWFsX2J1c193aWR0aDsKK307CisKKyNkZWZpbmUgSU1YTUNJX1BFTkRfSVJRX2IJMAorI2RlZmluZSBJTVhNQ0lfUEVORF9ETUFfRU5EX2IJMQorI2RlZmluZSBJTVhNQ0lfUEVORF9ETUFfRVJSX2IJMgorI2RlZmluZSBJTVhNQ0lfUEVORF9XQUlUX1JFU1BfYgkzCisjZGVmaW5lIElNWE1DSV9QRU5EX0RNQV9EQVRBX2IJNAorI2RlZmluZSBJTVhNQ0lfUEVORF9DUFVfREFUQV9iCTUKKyNkZWZpbmUgSU1YTUNJX1BFTkRfQ0FSRF9YQ0hHX2IJNgorI2RlZmluZSBJTVhNQ0lfUEVORF9TRVRfSU5JVF9iCTcKKyNkZWZpbmUgSU1YTUNJX1BFTkRfU1RBUlRFRF9iCTgKKworI2RlZmluZSBJTVhNQ0lfUEVORF9JUlFfbQkoMSA8PCBJTVhNQ0lfUEVORF9JUlFfYikKKyNkZWZpbmUgSU1YTUNJX1BFTkRfRE1BX0VORF9tCSgxIDw8IElNWE1DSV9QRU5EX0RNQV9FTkRfYikKKyNkZWZpbmUgSU1YTUNJX1BFTkRfRE1BX0VSUl9tCSgxIDw8IElNWE1DSV9QRU5EX0RNQV9FUlJfYikKKyNkZWZpbmUgSU1YTUNJX1BFTkRfV0FJVF9SRVNQX20JKDEgPDwgSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IpCisjZGVmaW5lIElNWE1DSV9QRU5EX0RNQV9EQVRBX20JKDEgPDwgSU1YTUNJX1BFTkRfRE1BX0RBVEFfYikKKyNkZWZpbmUgSU1YTUNJX1BFTkRfQ1BVX0RBVEFfbQkoMSA8PCBJTVhNQ0lfUEVORF9DUFVfREFUQV9iKQorI2RlZmluZSBJTVhNQ0lfUEVORF9DQVJEX1hDSEdfbQkoMSA8PCBJTVhNQ0lfUEVORF9DQVJEX1hDSEdfYikKKyNkZWZpbmUgSU1YTUNJX1BFTkRfU0VUX0lOSVRfbQkoMSA8PCBJTVhNQ0lfUEVORF9TRVRfSU5JVF9iKQorI2RlZmluZSBJTVhNQ0lfUEVORF9TVEFSVEVEX20JKDEgPDwgSU1YTUNJX1BFTkRfU1RBUlRFRF9iKQorCitzdGF0aWMgdm9pZCBpbXhtY2lfc3RvcF9jbG9jayhzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QpCit7CisJaW50IGkgPSAwOworCU1NQ19TVFJfU1RQX0NMSyAmPSB+U1RSX1NUUF9DTEtfU1RBUlRfQ0xLOworCXdoaWxlKGkgPCAweDEwMDApIHsKKwkgICAgICAgIGlmKCEoaSAmIDB4N2YpKQorCQkJTU1DX1NUUl9TVFBfQ0xLIHw9IFNUUl9TVFBfQ0xLX1NUT1BfQ0xLOworCisJCWlmKCEoTU1DX1NUQVRVUyAmIFNUQVRVU19DQVJEX0JVU19DTEtfUlVOKSkgeworCQkJLyogQ2hlY2sgdHdpY2UgYmVmb3JlIGN1dCAqLworCQkJaWYoIShNTUNfU1RBVFVTICYgU1RBVFVTX0NBUkRfQlVTX0NMS19SVU4pKQorCQkJCXJldHVybjsKKwkJfQorCisJCWkrKzsKKwl9CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfc3RvcF9jbG9jayBibG9ja2VkLCBubyBsdWNrXG4iKTsKK30KKworc3RhdGljIGludCBpbXhtY2lfc3RhcnRfY2xvY2soc3RydWN0IGlteG1jaV9ob3N0ICpob3N0KQoreworCXVuc2lnbmVkIGludCB0cmlhbHMgPSAwOworCXVuc2lnbmVkIGludCBkZWxheV9saW1pdCA9IDEyODsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJTU1DX1NUUl9TVFBfQ0xLICY9IH5TVFJfU1RQX0NMS19TVE9QX0NMSzsKKworCWNsZWFyX2JpdChJTVhNQ0lfUEVORF9TVEFSVEVEX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisKKwkvKgorCSAqIENvbW1hbmQgc3RhcnQgb2YgdGhlIGNsb2NrLCB0aGlzIHVzdWFsbHkgc3VjY2VlZHMgaW4gbGVzcworCSAqIHRoZW4gNiBkZWxheSBsb29wcywgYnV0IGR1cmluZyBjYXJkIGRldGVjdGlvbiAobG93IGNsb2NrcmF0ZSkKKwkgKiBpdCB0YWtlcyB1cCB0byA1MDAwIGRlbGF5IGxvb3BzIGFuZCBzb21ldGltZXMgZmFpbHMgZm9yIHRoZSBmaXJzdCB0aW1lCisJICovCisJTU1DX1NUUl9TVFBfQ0xLIHw9IFNUUl9TVFBfQ0xLX1NUQVJUX0NMSzsKKworCWRvIHsKKwkJdW5zaWduZWQgaW50IGRlbGF5ID0gZGVsYXlfbGltaXQ7CisKKwkJd2hpbGUoZGVsYXktLSl7CisJCQlpZihNTUNfU1RBVFVTICYgU1RBVFVTX0NBUkRfQlVTX0NMS19SVU4pCisJCQkJLyogQ2hlY2sgdHdpY2UgYmVmb3JlIGN1dCAqLworCQkJCWlmKE1NQ19TVEFUVVMgJiBTVEFUVVNfQ0FSRF9CVVNfQ0xLX1JVTikKKwkJCQkJcmV0dXJuIDA7CisKKwkJCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX1NUQVJURURfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJLyoKKwkJICogRW5zdXJlLCB0aGF0IHJlcXVlc3QgaXMgbm90IGRvdWJsZWQgdW5kZXIgYWxsIHBvc3NpYmxlIGNpcmN1bXN0YW5jZXMuCisJCSAqIEl0IGlzIHBvc3NpYmxlLCB0aGF0IGNvY2sgcnVubmluZyBzdGF0ZSBpcyBtaXNzZWQsIGJlY2F1c2Ugc29tZSBvdGhlcgorCQkgKiBJUlEgb3Igc2NoZWR1bGUgZGVsYXlzIHRoaXMgZnVuY3Rpb24gZXhlY3V0aW9uIGFuZCB0aGUgY2xvY2tzIGhhcworCQkgKiBiZWVuIGFscmVhZHkgc3RvcHBlZCBieSBvdGhlciBtZWFucyAocmVzcG9uc2UgcHJvY2Vzc2luZywgU0RIQyBIVykKKwkJICovCisJCWlmKCF0ZXN0X2JpdChJTVhNQ0lfUEVORF9TVEFSVEVEX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQlNTUNfU1RSX1NUUF9DTEsgfD0gU1RSX1NUUF9DTEtfU1RBUlRfQ0xLOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwl9IHdoaWxlKCsrdHJpYWxzPDI1Nik7CisKKwlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteG1jaV9zdGFydF9jbG9jayBibG9ja2VkLCBubyBsdWNrXG4iKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgaW14bWNpX3NvZnRyZXNldCh2b2lkKQoreworCS8qIHJlc2V0IHNlcXVlbmNlICovCisJTU1DX1NUUl9TVFBfQ0xLID0gMHg4OworCU1NQ19TVFJfU1RQX0NMSyA9IDB4RDsKKwlNTUNfU1RSX1NUUF9DTEsgPSAweDU7CisJTU1DX1NUUl9TVFBfQ0xLID0gMHg1OworCU1NQ19TVFJfU1RQX0NMSyA9IDB4NTsKKwlNTUNfU1RSX1NUUF9DTEsgPSAweDU7CisJTU1DX1NUUl9TVFBfQ0xLID0gMHg1OworCU1NQ19TVFJfU1RQX0NMSyA9IDB4NTsKKwlNTUNfU1RSX1NUUF9DTEsgPSAweDU7CisJTU1DX1NUUl9TVFBfQ0xLID0gMHg1OworCisJTU1DX1JFU19UTyA9IDB4ZmY7CisJTU1DX0JMS19MRU4gPSA1MTI7CisJTU1DX05PQiA9IDE7Cit9CisKK3N0YXRpYyBpbnQgaW14bWNpX2J1c3lfd2FpdF9mb3Jfc3RhdHVzKHN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCwKKwkJCXVuc2lnbmVkIGludCAqcHN0YXQsIHVuc2lnbmVkIGludCBzdGF0X21hc2ssCisJCQlpbnQgdGltZW91dCwgY29uc3QgY2hhciAqd2hlcmUpCit7CisJaW50IGxvb3BzPTA7CisJd2hpbGUoISgqcHN0YXQgJiBzdGF0X21hc2spKSB7CisJCWxvb3BzKz0yOworCQlpZihsb29wcyA+PSB0aW1lb3V0KSB7CisJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImJ1c3kgd2FpdCB0aW1lb3V0IGluICVzLCBTVEFUVVMgPSAweCV4ICgweCV4KVxuIiwKKwkJCQl3aGVyZSwgKnBzdGF0LCBzdGF0X21hc2spOworCQkJcmV0dXJuIC0xOworCQl9CisJCXVkZWxheSgyKTsKKwkJKnBzdGF0IHw9IE1NQ19TVEFUVVM7CisJfQorCWlmKCFsb29wcykKKwkJcmV0dXJuIDA7CisKKwkvKiBUaGUgYnVzeS13YWl0IGlzIGV4cGVjdGVkIHRoZXJlIGZvciBjbG9jayA8OE1IeiBkdWUgdG8gU0RIQyBoYXJkd2FyZSBmbGF3cyAqLworCWlmKCEoc3RhdF9tYXNrICYgU1RBVFVTX0VORF9DTURfUkVTUCkgfHwgKGhvc3QtPm1tYy0+aW9zLmNsb2NrPj04MDAwMDAwKSkKKwkJZGV2X2luZm8obW1jX2Rldihob3N0LT5tbWMpLCAiYnVzeSB3YWl0IGZvciAlZCB1c2VjIGluICVzLCBTVEFUVVMgPSAweCV4ICgweCV4KVxuIiwKKwkJCWxvb3BzLCB3aGVyZSwgKnBzdGF0LCBzdGF0X21hc2spOworCXJldHVybiBsb29wczsKK30KKworc3RhdGljIHZvaWQgaW14bWNpX3NldHVwX2RhdGEoc3RydWN0IGlteG1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IG5vYiA9IGRhdGEtPmJsb2NrczsKKwl1bnNpZ25lZCBpbnQgYmxrc3ogPSAxIDw8IGRhdGEtPmJsa3N6X2JpdHM7CisJdW5zaWduZWQgaW50IGRhdGFzeiA9IG5vYiAqIGJsa3N6OworCWludCBpOworCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfU1RSRUFNKQorCQlub2IgPSAweGZmZmY7CisKKwlob3N0LT5kYXRhID0gZGF0YTsKKwlkYXRhLT5ieXRlc194ZmVyZWQgPSAwOworCisJTU1DX05PQiA9IG5vYjsKKwlNTUNfQkxLX0xFTiA9IGJsa3N6OworCisJLyoKKwkgKiBETUEgY2Fubm90IGJlIHVzZWQgZm9yIHNtYWxsIGJsb2NrIHNpemVzLCB3ZSBoYXZlIHRvIHVzZSBDUFUgZHJpdmVuIHRyYW5zZmVycyBvdGhlcndpc2UuCisJICogV2UgYXJlIGluIGJpZyB0cm91YmxlcyBmb3Igbm9uLTUxMiBieXRlIHRyYW5zZmVycyBhY2NvcmRpbmcgdG8gbm90ZSBpbiB0aGUgcGFyYWdyYXBoCisJICogMjAuNi43IG9mIFVzZXIgTWFudWFsIGFueXdheSwgYnV0IHdlIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFuc2ZlciBTQ1IgYXQgbGVhc3QuCisJICogVGhlIHNpdHVhdGlvbiBpcyBldmVuIG1vcmUgY29tcGxleCBpbiByZWFsaXR5LiBUaGUgU0RIQyBpbiBub3QgYWJsZSB0byBoYW5kbGUgd2xsCisJICogcGFydGlhbCBGSUZPIGZpbGxzIGFuZCByZWFkcy4gVGhlIGxlbmd0aCBoYXMgdG8gYmUgcm91bmRlZCB1cCB0byBidXJzdCBzaXplIG11bHRpcGxlLgorCSAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFNDUiByZWFkIGF0IGxlYXN0LgorCSAqLworCWlmIChkYXRhc3ogPCA2NCkgeworCQlob3N0LT5kbWFfc2l6ZSA9IGRhdGFzejsKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgeworCQkJaG9zdC0+ZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRTsKKworCQkJLyogSGFjayB0byBlbmFibGUgcmVhZCBTQ1IgKi8KKwkJCWlmKGRhdGFzeiA8IDE2KSB7CisJCQkJTU1DX05PQiA9IDE7CisJCQkJTU1DX0JMS19MRU4gPSAxNjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWhvc3QtPmRtYV9kaXIgPSBETUFfVE9fREVWSUNFOworCQl9CisKKwkJLyogQ29udmVydCBiYWNrIHRvIHZpcnR1YWwgYWRkcmVzcyAqLworCQlob3N0LT5kYXRhX3B0ciA9ICh1MTYqKShwYWdlX2FkZHJlc3MoZGF0YS0+c2ctPnBhZ2UpICsgZGF0YS0+c2ctPm9mZnNldCk7CisJCWhvc3QtPmRhdGFfY250ID0gMDsKKworCQljbGVhcl9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKwkJc2V0X2JpdChJTVhNQ0lfUEVORF9DUFVfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCisJCXJldHVybjsKKwl9CisKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CisJCWhvc3QtPmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7CisJCWhvc3QtPmRtYV9uZW50cyA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywKKwkJCQkJCWRhdGEtPnNnX2xlbiwgIGhvc3QtPmRtYV9kaXIpOworCisJCWlteF9kbWFfc2V0dXBfc2coaG9zdC0+ZG1hLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBkYXRhc3osCisJCQlob3N0LT5yZXMtPnN0YXJ0ICsgTU1DX0JVRkZFUl9BQ0NFU1NfT0ZTLCBETUFfTU9ERV9SRUFEKTsKKworCQkvKmlteF9kbWFfc2V0dXBfbWVtMmRldl9jY3IoaG9zdC0+ZG1hLCBETUFfTU9ERV9SRUFELCBJTVhfRE1BX1dJRFRIXzE2LCBDQ1JfUkVOKTsqLworCQlDQ1IoaG9zdC0+ZG1hKSA9IENDUl9ETU9EX0xJTkVBUiB8IENDUl9EU0laXzMyIHwgQ0NSX1NNT0RfRklGTyB8IENDUl9TU0laXzE2IHwgQ0NSX1JFTjsKKwl9IGVsc2UgeworCQlob3N0LT5kbWFfZGlyID0gRE1BX1RPX0RFVklDRTsKKworCQlob3N0LT5kbWFfbmVudHMgPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCisJCQkJCQlkYXRhLT5zZ19sZW4sICBob3N0LT5kbWFfZGlyKTsKKworCQlpbXhfZG1hX3NldHVwX3NnKGhvc3QtPmRtYSwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgZGF0YXN6LAorCQkJaG9zdC0+cmVzLT5zdGFydCArIE1NQ19CVUZGRVJfQUNDRVNTX09GUywgRE1BX01PREVfV1JJVEUpOworCisJCS8qaW14X2RtYV9zZXR1cF9tZW0yZGV2X2Njcihob3N0LT5kbWEsIERNQV9NT0RFX1dSSVRFLCBJTVhfRE1BX1dJRFRIXzE2LCBDQ1JfUkVOKTsqLworCQlDQ1IoaG9zdC0+ZG1hKSA9IENDUl9TTU9EX0xJTkVBUiB8IENDUl9TU0laXzMyIHwgQ0NSX0RNT0RfRklGTyB8IENDUl9EU0laXzE2IHwgQ0NSX1JFTjsKKwl9CisKKyNpZiAxCS8qIFRoaXMgY29kZSBpcyB0aGVyZSBvbmx5IGZvciBjb25zaXN0ZW5jeSBjaGVja2luZyBhbmQgY2FuIGJlIGRpc2FibGVkIGluIGZ1dHVyZSAqLworCWhvc3QtPmRtYV9zaXplID0gMDsKKwlmb3IoaT0wOyBpPGhvc3QtPmRtYV9uZW50czsgaSsrKQorCQlob3N0LT5kbWFfc2l6ZSs9ZGF0YS0+c2dbaV0ubGVuZ3RoOworCisJaWYgKGRhdGFzeiA+IGhvc3QtPmRtYV9zaXplKSB7CisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiaW14bWNpX3NldHVwX2RhdGEgZGF0YXN6IDB4JXggPiAweCV4IGRtX3NpemVcbiIsCisJCSAgICAgICBkYXRhc3osIGhvc3QtPmRtYV9zaXplKTsKKwl9CisjZW5kaWYKKworCWhvc3QtPmRtYV9zaXplID0gZGF0YXN6OworCisJd21iKCk7CisKKwlpZihob3N0LT5hY3R1YWxfYnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKKwkJQkxSKGhvc3QtPmRtYSkgPSAwOwkvKiBidXJzdCA2NCBieXRlIHJlYWQgLyA2NCBieXRlcyB3cml0ZSAqLworCWVsc2UKKwkJQkxSKGhvc3QtPmRtYSkgPSAxNjsJLyogYnVyc3QgMTYgYnl0ZSByZWFkIC8gMTYgYnl0ZXMgd3JpdGUgKi8KKworCVJTU1IoaG9zdC0+ZG1hKSA9IERNQV9SRVFfU0RIQzsKKworCXNldF9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKwljbGVhcl9iaXQoSU1YTUNJX1BFTkRfQ1BVX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKworCS8qIHN0YXJ0IERNQSBlbmdpbmUgZm9yIHJlYWQsIHdyaXRlIGlzIGRlbGF5ZWQgYWZ0ZXIgaW5pdGlhbCByZXNwb25zZSAqLworCWlmIChob3N0LT5kbWFfZGlyID09IERNQV9GUk9NX0RFVklDRSkgeworCQlpbXhfZG1hX2VuYWJsZShob3N0LT5kbWEpOworCX0KK30KKworc3RhdGljIHZvaWQgaW14bWNpX3N0YXJ0X2NtZChzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLCB1bnNpZ25lZCBpbnQgY21kYXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaW1hc2s7CisKKwlXQVJOX09OKGhvc3QtPmNtZCAhPSBOVUxMKTsKKwlob3N0LT5jbWQgPSBjbWQ7CisKKwkvKiBFbnN1cmUsIHRoYXQgY2xvY2sgYXJlIHN0b3BwZWQgZWxzZSBjb21tYW5kIHByb2dyYW1taW5nIGFuZCBzdGFydCBmYWlscyAqLworCWlteG1jaV9zdG9wX2Nsb2NrKGhvc3QpOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0JVU1kpCisJCWNtZGF0IHw9IENNRF9EQVRfQ09OVF9CVVNZOworCisJc3dpdGNoIChtbWNfcmVzcF90eXBlKGNtZCkpIHsKKwljYXNlIE1NQ19SU1BfUjE6IC8qIHNob3J0IENSQywgT1BDT0RFICovCisJY2FzZSBNTUNfUlNQX1IxQjovKiBzaG9ydCBDUkMsIE9QQ09ERSwgQlVTWSAqLworCQljbWRhdCB8PSBDTURfREFUX0NPTlRfUkVTUE9OU0VfRk9STUFUX1IxOworCQlicmVhazsKKwljYXNlIE1NQ19SU1BfUjI6IC8qIGxvbmcgMTM2IGJpdCArIENSQyAqLworCQljbWRhdCB8PSBDTURfREFUX0NPTlRfUkVTUE9OU0VfRk9STUFUX1IyOworCQlicmVhazsKKwljYXNlIE1NQ19SU1BfUjM6IC8qIHNob3J0ICovCisJCWNtZGF0IHw9IENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjM7CisJCWJyZWFrOworCWNhc2UgTU1DX1JTUF9SNjogLyogc2hvcnQgQ1JDICovCisJCWNtZGF0IHw9IENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmICggdGVzdF9hbmRfY2xlYXJfYml0KElNWE1DSV9QRU5EX1NFVF9JTklUX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykgKQorCQljbWRhdCB8PSBDTURfREFUX0NPTlRfSU5JVDsgLyogVGhpcyBjb21tYW5kIG5lZWRzIGluaXQgKi8KKworCWlmICggaG9zdC0+YWN0dWFsX2J1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQgKQorCQljbWRhdCB8PSBDTURfREFUX0NPTlRfQlVTX1dJRFRIXzQ7CisKKwlNTUNfQ01EID0gY21kLT5vcGNvZGU7CisJTU1DX0FSR0ggPSBjbWQtPmFyZyA+PiAxNjsKKwlNTUNfQVJHTCA9IGNtZC0+YXJnICYgMHhmZmZmOworCU1NQ19DTURfREFUX0NPTlQgPSBjbWRhdDsKKworCWF0b21pY19zZXQoJmhvc3QtPnN0dWNrX3RpbWVvdXQsIDApOworCXNldF9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisKKworCWltYXNrID0gSU1YTUNJX0lOVF9NQVNLX0RFRkFVTFQ7CisJaW1hc2sgJj0gfklOVF9NQVNLX0VORF9DTURfUkVTOworCWlmICggY21kYXQgJiBDTURfREFUX0NPTlRfREFUQV9FTkFCTEUgKSB7CisJCS8qaW1hc2sgJj0gfklOVF9NQVNLX0JVRl9SRUFEWTsqLworCQlpbWFzayAmPSB+SU5UX01BU0tfREFUQV9UUkFOOworCQlpZiAoIGNtZGF0ICYgQ01EX0RBVF9DT05UX1dSSVRFICkKKwkJCWltYXNrICY9IH5JTlRfTUFTS19XUklURV9PUF9ET05FOworCQlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9DUFVfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJaW1hc2sgJj0gfklOVF9NQVNLX0JVRl9SRUFEWTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWhvc3QtPmltYXNrID0gaW1hc2s7CisJTU1DX0lOVF9NQVNLID0gaG9zdC0+aW1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJDTUQlMDJkICgweCUwMngpIG1hc2sgc2V0IHRvIDB4JTA0eFxuIiwKKwkJY21kLT5vcGNvZGUsIGNtZC0+b3Bjb2RlLCBpbWFzayk7CisKKwlpbXhtY2lfc3RhcnRfY2xvY2soaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lkIGlteG1jaV9maW5pc2hfcmVxdWVzdChzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaG9zdC0+cGVuZGluZ19ldmVudHMgJj0gfihJTVhNQ0lfUEVORF9XQUlUX1JFU1BfbSB8IElNWE1DSV9QRU5EX0RNQV9FTkRfbSB8CisJCQlJTVhNQ0lfUEVORF9ETUFfREFUQV9tIHwgSU1YTUNJX1BFTkRfQ1BVX0RBVEFfbSk7CisKKwlob3N0LT5pbWFzayA9IElNWE1DSV9JTlRfTUFTS19ERUZBVUxUOworCU1NQ19JTlRfTUFTSyA9IGhvc3QtPmltYXNrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaG9zdC0+cmVxID0gTlVMTDsKKwlob3N0LT5jbWQgPSBOVUxMOworCWhvc3QtPmRhdGEgPSBOVUxMOworCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCByZXEpOworfQorCitzdGF0aWMgaW50IGlteG1jaV9maW5pc2hfZGF0YShzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBzdGF0KQoreworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CisJaW50IGRhdGFfZXJyb3I7CisKKwlpZih0ZXN0X2FuZF9jbGVhcl9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSl7CisJCWlteF9kbWFfZGlzYWJsZShob3N0LT5kbWEpOworCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgaG9zdC0+ZG1hX25lbnRzLAorCQkJICAgICBob3N0LT5kbWFfZGlyKTsKKwl9CisKKwlpZiAoIHN0YXQgJiBTVEFUVVNfRVJSX01BU0sgKSB7CisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAicmVxdWVzdCBmYWlsZWQuIHN0YXR1czogMHglMDh4XG4iLHN0YXQpOworCQlpZihzdGF0ICYgKFNUQVRVU19DUkNfUkVBRF9FUlIgfCBTVEFUVVNfQ1JDX1dSSVRFX0VSUikpCisJCQlkYXRhLT5lcnJvciA9IE1NQ19FUlJfQkFEQ1JDOworCQllbHNlIGlmKHN0YXQgJiBTVEFUVVNfVElNRV9PVVRfUkVBRCkKKwkJCWRhdGEtPmVycm9yID0gTU1DX0VSUl9USU1FT1VUOworCQllbHNlCisJCQlkYXRhLT5lcnJvciA9IE1NQ19FUlJfRkFJTEVEOworCX0gZWxzZSB7CisJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IGhvc3QtPmRtYV9zaXplOworCX0KKworCWRhdGFfZXJyb3IgPSBkYXRhLT5lcnJvcjsKKworCWhvc3QtPmRhdGEgPSBOVUxMOworCisJcmV0dXJuIGRhdGFfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgaW14bWNpX2NtZF9kb25lKHN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHN0YXQpCit7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBob3N0LT5jbWQ7CisJaW50IGk7CisJdTMyIGEsYixjOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CisKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIDA7CisKKwlob3N0LT5jbWQgPSBOVUxMOworCisJaWYgKHN0YXQgJiBTVEFUVVNfVElNRV9PVVRfUkVTUCkgeworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkNNRCBUSU1FT1VUXG4iKTsKKwkJY21kLT5lcnJvciA9IE1NQ19FUlJfVElNRU9VVDsKKwl9IGVsc2UgaWYgKHN0YXQgJiBTVEFUVVNfUkVTUF9DUkNfRVJSICYmIGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0NSQykgeworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImNtZCBjcmMgZXJyb3JcbiIpOworCQljbWQtPmVycm9yID0gTU1DX0VSUl9CQURDUkM7CisJfQorCisJaWYoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgeworCQlpZihjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQl1MzIgYSA9IE1NQ19SRVNfRklGTyAmIDB4ZmZmZjsKKwkJCQl1MzIgYiA9IE1NQ19SRVNfRklGTyAmIDB4ZmZmZjsKKwkJCQljbWQtPnJlc3BbaV0gPSBhPDwxNiB8IGI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhID0gTU1DX1JFU19GSUZPICYgMHhmZmZmOworCQkJYiA9IE1NQ19SRVNfRklGTyAmIDB4ZmZmZjsKKwkJCWMgPSBNTUNfUkVTX0ZJRk8gJiAweGZmZmY7CisJCQljbWQtPnJlc3BbMF0gPSBhPDwyNCB8IGI8PDggfCBjPj44OworCQl9CisJfQorCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJSRVNQIDB4JTA4eCwgMHglMDh4LCAweCUwOHgsIDB4JTA4eCwgZXJyb3IgJWRcbiIsCisJCWNtZC0+cmVzcFswXSwgY21kLT5yZXNwWzFdLCBjbWQtPnJlc3BbMl0sIGNtZC0+cmVzcFszXSwgY21kLT5lcnJvcik7CisKKwlpZiAoZGF0YSAmJiAoY21kLT5lcnJvciA9PSBNTUNfRVJSX05PTkUpICYmICEoc3RhdCAmIFNUQVRVU19FUlJfTUFTSykpIHsKKwkJaWYgKGhvc3QtPnJlcS0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgeworCisJCQkvKiBXYWl0IGZvciBGSUZPIHRvIGJlIGVtcHR5IGJlZm9yZSBzdGFydGluZyBETUEgd3JpdGUgKi8KKworCQkJc3RhdCA9IE1NQ19TVEFUVVM7CisJCQlpZihpbXhtY2lfYnVzeV93YWl0X2Zvcl9zdGF0dXMoaG9zdCwgJnN0YXQsCisJCQkJU1RBVFVTX0FQUExfQlVGRl9GRSwKKwkJCQk0MCwgImlteG1jaV9jbWRfZG9uZSBETUEgV1IiKSA8IDApIHsKKwkJCQljbWQtPmVycm9yID0gTU1DX0VSUl9GSUZPOworCQkJCWlteG1jaV9maW5pc2hfZGF0YShob3N0LCBzdGF0KTsKKwkJCQlpZihob3N0LT5yZXEpCisJCQkJCWlteG1jaV9maW5pc2hfcmVxdWVzdChob3N0LCBob3N0LT5yZXEpOworCQkJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgIlNUQVRVUyA9IDB4JTA0eFxuIiwKKwkJCQkgICAgICAgc3RhdCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX0RNQV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpIHsKKwkJCQlpbXhfZG1hX2VuYWJsZShob3N0LT5kbWEpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IG1tY19yZXF1ZXN0ICpyZXE7CisJCWlteG1jaV9zdG9wX2Nsb2NrKGhvc3QpOworCQlyZXEgPSBob3N0LT5yZXE7CisKKwkJaWYoZGF0YSkKKwkJCWlteG1jaV9maW5pc2hfZGF0YShob3N0LCBzdGF0KTsKKworCQlpZiggcmVxICkgeworCQkJaW14bWNpX2ZpbmlzaF9yZXF1ZXN0KGhvc3QsIHJlcSk7CisJCX0gZWxzZSB7CisJCQlkZXZfd2FybihtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfY21kX2RvbmU6IG5vIHJlcXVlc3QgdG8gZmluaXNoXG4iKTsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGlteG1jaV9kYXRhX2RvbmUoc3RydWN0IGlteG1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgc3RhdCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCWludCBkYXRhX2Vycm9yOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gMDsKKworCWRhdGFfZXJyb3IgPSBpbXhtY2lfZmluaXNoX2RhdGEoaG9zdCwgc3RhdCk7CisKKwlpZiAoaG9zdC0+cmVxLT5zdG9wKSB7CisJCWlteG1jaV9zdG9wX2Nsb2NrKGhvc3QpOworCQlpbXhtY2lfc3RhcnRfY21kKGhvc3QsIGhvc3QtPnJlcS0+c3RvcCwgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IG1tY19yZXF1ZXN0ICpyZXE7CisJCXJlcSA9IGhvc3QtPnJlcTsKKwkJaWYoIHJlcSApIHsKKwkJCWlteG1jaV9maW5pc2hfcmVxdWVzdChob3N0LCByZXEpOworCQl9IGVsc2UgeworCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiaW14bWNpX2RhdGFfZG9uZTogbm8gcmVxdWVzdCB0byBmaW5pc2hcbiIpOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaW14bWNpX2NwdV9kcml2ZW5fZGF0YShzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCAqcHN0YXQpCit7CisJaW50IGk7CisJaW50IGJ1cnN0X2xlbjsKKwlpbnQgZmx1c2hfbGVuOworCWludCB0cmFuc19kb25lID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdCA9ICpwc3RhdDsKKworCWlmKGhvc3QtPmFjdHVhbF9idXNfd2lkdGggIT0gTU1DX0JVU19XSURUSF80KQorCQlidXJzdF9sZW4gPSAxNjsKKwllbHNlCisJCWJ1cnN0X2xlbiA9IDY0OworCisJLyogVGhpcyBpcyB1bmZvcnR1bmF0ZWx5IHJlcXVpcmVkICovCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHJ1bm5pbmcgU1RBVFVTID0gMHgleFxuIiwKKwkJc3RhdCk7CisKKwlpZihob3N0LT5kbWFfZGlyID09IERNQV9GUk9NX0RFVklDRSkgeworCQlpbXhtY2lfYnVzeV93YWl0X2Zvcl9zdGF0dXMoaG9zdCwgJnN0YXQsCisJCQkJU1RBVFVTX0FQUExfQlVGRl9GRiB8IFNUQVRVU19EQVRBX1RSQU5TX0RPTkUsCisJCQkJMjAsICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHJlYWQiKTsKKworCQl3aGlsZSgoc3RhdCAmIChTVEFUVVNfQVBQTF9CVUZGX0ZGIHwgIFNUQVRVU19EQVRBX1RSQU5TX0RPTkUpKSAmJgorCQkgICAgICAoaG9zdC0+ZGF0YV9jbnQgPCBob3N0LT5kbWFfc2l6ZSkpIHsKKwkJCWlmKGJ1cnN0X2xlbiA+PSBob3N0LT5kbWFfc2l6ZSAtIGhvc3QtPmRhdGFfY250KSB7CisJCQkJZmx1c2hfbGVuID0gYnVyc3RfbGVuOworCQkJCWJ1cnN0X2xlbiA9IGhvc3QtPmRtYV9zaXplIC0gaG9zdC0+ZGF0YV9jbnQ7CisJCQkJZmx1c2hfbGVuIC09IGJ1cnN0X2xlbjsKKwkJCQlob3N0LT5kYXRhX2NudCA9IGhvc3QtPmRtYV9zaXplOworCQkJCXRyYW5zX2RvbmUgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlmbHVzaF9sZW4gPSAwOworCQkJCWhvc3QtPmRhdGFfY250ICs9IGJ1cnN0X2xlbjsKKwkJCX0KKworCQkJZm9yKGkgPSBidXJzdF9sZW47IGk+PTIgOyBpLT0yKSB7CisJCQkJKihob3N0LT5kYXRhX3B0cisrKSA9IE1NQ19CVUZGRVJfQUNDRVNTOworCQkJCXVkZWxheSgyMCk7CS8qIHJlcXVpcmVkIGZvciBjbG9ja3MgPCA4TUh6Ki8KKwkJCX0KKworCQkJaWYoaSA9PSAxKQorCQkJCSoodTgqKShob3N0LT5kYXRhX3B0cikgPSBNTUNfQlVGRkVSX0FDQ0VTUzsKKworCQkJc3RhdCA9IE1NQ19TVEFUVVM7CisKKwkJCS8qIEZsdXNoIGV4dHJhIGJ5dGVzIGZyb20gRklGTyAqLworCQkJd2hpbGUoZmx1c2hfbGVuICYmICEoc3RhdCAmIFNUQVRVU19EQVRBX1RSQU5TX0RPTkUpKXsKKwkJCQlpID0gTU1DX0JVRkZFUl9BQ0NFU1M7CisJCQkJc3RhdCA9IE1NQ19TVEFUVVM7CisJCQkJc3RhdCAmPSB+U1RBVFVTX0NSQ19SRUFEX0VSUjsgLyogU3R1cGlkIGJ1dCByZXF1aXJlZCB0aGVyZSAqLworCQkJfQorCisJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteG1jaV9jcHVfZHJpdmVuX2RhdGEgcmVhZCBidXJzdCAlZCBTVEFUVVMgPSAweCV4XG4iLAorCQkJCWJ1cnN0X2xlbiwgc3RhdCk7CisJCX0KKwl9IGVsc2UgeworCQlpbXhtY2lfYnVzeV93YWl0X2Zvcl9zdGF0dXMoaG9zdCwgJnN0YXQsCisJCQkJU1RBVFVTX0FQUExfQlVGRl9GRSwKKwkJCQkyMCwgImlteG1jaV9jcHVfZHJpdmVuX2RhdGEgd3JpdGUiKTsKKworCQl3aGlsZSgoc3RhdCAmIFNUQVRVU19BUFBMX0JVRkZfRkUpICYmCisJCSAgICAgIChob3N0LT5kYXRhX2NudCA8IGhvc3QtPmRtYV9zaXplKSkgeworCQkJaWYoYnVyc3RfbGVuID49IGhvc3QtPmRtYV9zaXplIC0gaG9zdC0+ZGF0YV9jbnQpIHsKKwkJCQlidXJzdF9sZW4gPSBob3N0LT5kbWFfc2l6ZSAtIGhvc3QtPmRhdGFfY250OworCQkJCWhvc3QtPmRhdGFfY250ID0gaG9zdC0+ZG1hX3NpemU7CisJCQkJdHJhbnNfZG9uZSA9IDE7CisJCQl9IGVsc2UgeworCQkJCWhvc3QtPmRhdGFfY250ICs9IGJ1cnN0X2xlbjsKKwkJCX0KKworCQkJZm9yKGkgPSBidXJzdF9sZW47IGk+MCA7IGktPTIpCisJCQkJTU1DX0JVRkZFUl9BQ0NFU1MgPSAqKGhvc3QtPmRhdGFfcHRyKyspOworCisJCQlzdGF0ID0gTU1DX1NUQVRVUzsKKworCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHdyaXRlIGJ1cnN0ICVkIFNUQVRVUyA9IDB4JXhcbiIsCisJCQkJYnVyc3RfbGVuLCBzdGF0KTsKKwkJfQorCX0KKworCSpwc3RhdCA9IHN0YXQ7CisKKwlyZXR1cm4gdHJhbnNfZG9uZTsKK30KKworc3RhdGljIHZvaWQgaW14bWNpX2RtYV9pcnEoaW50IGRtYSwgdm9pZCAqZGV2aWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCA9IGRldmlkOworCXVpbnQzMl90IHN0YXQgPSBNTUNfU1RBVFVTOworCisJYXRvbWljX3NldCgmaG9zdC0+c3R1Y2tfdGltZW91dCwgMCk7CisJaG9zdC0+c3RhdHVzX3JlZyA9IHN0YXQ7CisJc2V0X2JpdChJTVhNQ0lfUEVORF9ETUFfRU5EX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+dGFza2xldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbXhtY2lfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSBkZXZpZDsKKwl1aW50MzJfdCBzdGF0ID0gTU1DX1NUQVRVUzsKKwlpbnQgaGFuZGxlZCA9IDE7CisKKwlNTUNfSU5UX01BU0sgPSBob3N0LT5pbWFzayB8IElOVF9NQVNLX1NESU8gfCBJTlRfTUFTS19BVVRPX0NBUkRfREVURUNUOworCisJYXRvbWljX3NldCgmaG9zdC0+c3R1Y2tfdGltZW91dCwgMCk7CisJaG9zdC0+c3RhdHVzX3JlZyA9IHN0YXQ7CisJc2V0X2JpdChJTVhNQ0lfUEVORF9JUlFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKwlzZXRfYml0KElNWE1DSV9QRU5EX1NUQVJURURfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsKKworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOzsKK30KKworc3RhdGljIHZvaWQgaW14bWNpX3Rhc2tsZXRfZm5jKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSAoc3RydWN0IGlteG1jaV9ob3N0ICopZGF0YTsKKwl1MzIgc3RhdDsKKwl1bnNpZ25lZCBpbnQgZGF0YV9kaXJfbWFzayA9IDA7CS8qIFNUQVRVU19XUl9DUkNfRVJST1JfQ09ERV9NQVNLICovCisJaW50IHRpbWVvdXQgPSAwOworCisJaWYoYXRvbWljX3JlYWQoJmhvc3QtPnN0dWNrX3RpbWVvdXQpID4gNCkgeworCQljaGFyICp3aGF0OworCQl0aW1lb3V0ID0gMTsKKwkJc3RhdCA9IE1NQ19TVEFUVVM7CisJCWhvc3QtPnN0YXR1c19yZWcgPSBzdGF0OworCQlpZiAodGVzdF9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQlpZiAodGVzdF9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKKwkJCQl3aGF0ID0gIlJFU1ArRE1BIjsKKwkJCWVsc2UKKwkJCQl3aGF0ID0gIlJFU1AiOworCQllbHNlCisJCQlpZiAodGVzdF9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKKwkJCQlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9ETUFfRU5EX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQkJCXdoYXQgPSAiREFUQSI7CisJCQkJZWxzZQorCQkJCQl3aGF0ID0gIkRNQSI7CisJCQllbHNlCisJCQkJd2hhdCA9ICI/Pz8iOworCisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiJXMgVElNRU9VVCwgaGFyZHdhcmUgc3R1Y2tlZCBTVEFUVVMgPSAweCUwNHggSU1BU0sgPSAweCUwNHhcbiIsCisJCSAgICAgICB3aGF0LCBzdGF0LCBNTUNfSU5UX01BU0spOworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkNNRF9EQVRfQ09OVCA9IDB4JTA0eCwgTU1DX0JMS19MRU4gPSAweCUwNHgsIE1NQ19OT0IgPSAweCUwNHgsIERNQV9DQ1IgPSAweCUwOHhcbiIsCisJCSAgICAgICBNTUNfQ01EX0RBVF9DT05ULCBNTUNfQkxLX0xFTiwgTU1DX05PQiwgQ0NSKGhvc3QtPmRtYSkpOworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkNNRCVkLCBidXMgJWQtYml0LCBkbWFfc2l6ZSA9IDB4JXhcbiIsCisJCSAgICAgICBob3N0LT5jbWQ/aG9zdC0+Y21kLT5vcGNvZGU6MCwgMTw8aG9zdC0+YWN0dWFsX2J1c193aWR0aCwgaG9zdC0+ZG1hX3NpemUpOworCX0KKworCWlmKCFob3N0LT5wcmVzZW50IHx8IHRpbWVvdXQpCisJCWhvc3QtPnN0YXR1c19yZWcgPSBTVEFUVVNfVElNRV9PVVRfUkVTUCB8IFNUQVRVU19USU1FX09VVF9SRUFEIHwKKwkJCQkgICAgU1RBVFVTX0NSQ19SRUFEX0VSUiB8IFNUQVRVU19DUkNfV1JJVEVfRVJSOworCisJaWYodGVzdF9iaXQoSU1YTUNJX1BFTkRfSVJRX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykgfHwgdGltZW91dCkgeworCQljbGVhcl9iaXQoSU1YTUNJX1BFTkRfSVJRX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisKKwkJc3RhdCA9IE1NQ19TVEFUVVM7CisJCS8qCisJCSAqIFRoaXMgaXMgbm90IHJlcXVpcmVkIGluIHRoZW9yeSwgYnV0IHRoZXJlIGlzIGNoYW5jZSB0byBtaXNzIHNvbWUgZmxhZworCQkgKiB3aGljaCBjbGVhcnMgYXV0b21hdGljYWxseSBieSBtYXNrIHdyaXRlLCBGcmVlU2NhbGUgb3JpZ2luYWwgY29kZSBrZWVwcworCQkgKiBzdGF0IGZyb20gSVJRIHRpbWUgc28gZG8gSQorCQkgKi8KKwkJc3RhdCB8PSBob3N0LT5zdGF0dXNfcmVnOworCisJCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CisJCQlpbXhtY2lfYnVzeV93YWl0X2Zvcl9zdGF0dXMoaG9zdCwgJnN0YXQsCisJCQkJCVNUQVRVU19FTkRfQ01EX1JFU1AgfCBTVEFUVVNfRVJSX01BU0ssCisJCQkJCTIwLCAiaW14bWNpX3Rhc2tsZXRfZm5jIHJlc3AgKEVSUkFUVU0gIzQpIik7CisJCX0KKworCQlpZihzdGF0ICYgKFNUQVRVU19FTkRfQ01EX1JFU1AgfCBTVEFUVVNfRVJSX01BU0spKSB7CisJCQlpZih0ZXN0X2FuZF9jbGVhcl9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQkJaW14bWNpX2NtZF9kb25lKGhvc3QsIHN0YXQpOworCQkJaWYoaG9zdC0+ZGF0YSAmJiAoc3RhdCAmIFNUQVRVU19FUlJfTUFTSykpCisJCQkJaW14bWNpX2RhdGFfZG9uZShob3N0LCBzdGF0KTsKKwkJfQorCisJCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX0NQVV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpIHsKKwkJCXN0YXQgfD0gTU1DX1NUQVRVUzsKKwkJCWlmKGlteG1jaV9jcHVfZHJpdmVuX2RhdGEoaG9zdCwgJnN0YXQpKXsKKwkJCQlpZih0ZXN0X2FuZF9jbGVhcl9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQkJCWlteG1jaV9jbWRfZG9uZShob3N0LCBzdGF0KTsKKwkJCQlhdG9taWNfY2xlYXJfbWFzayhJTVhNQ0lfUEVORF9JUlFfbXxJTVhNQ0lfUEVORF9DUFVfREFUQV9tLAorCQkJCQkJCSZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCQkJaW14bWNpX2RhdGFfZG9uZShob3N0LCBzdGF0KTsKKwkJCX0KKwkJfQorCX0KKworCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX0RNQV9FTkRfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSAmJgorCSAgICF0ZXN0X2JpdChJTVhNQ0lfUEVORF9XQUlUX1JFU1BfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkgeworCisJCXN0YXQgPSBNTUNfU1RBVFVTOworCQkvKiBTYW1lIGFzIGFib3ZlICovCisJCXN0YXQgfD0gaG9zdC0+c3RhdHVzX3JlZzsKKworCQlpZihob3N0LT5kbWFfZGlyID09IERNQV9UT19ERVZJQ0UpIHsKKwkJCWRhdGFfZGlyX21hc2sgPSBTVEFUVVNfV1JJVEVfT1BfRE9ORTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFfZGlyX21hc2sgPSBTVEFUVVNfREFUQV9UUkFOU19ET05FOworCQl9CisKKwkJaWYoc3RhdCAmIGRhdGFfZGlyX21hc2spIHsKKwkJCWNsZWFyX2JpdChJTVhNQ0lfUEVORF9ETUFfRU5EX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCQlpbXhtY2lfZGF0YV9kb25lKGhvc3QsIHN0YXQpOworCQl9CisJfQorCisJaWYodGVzdF9hbmRfY2xlYXJfYml0KElNWE1DSV9QRU5EX0NBUkRfWENIR19iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CisKKwkJaWYoaG9zdC0+Y21kKQorCQkJaW14bWNpX2NtZF9kb25lKGhvc3QsIFNUQVRVU19USU1FX09VVF9SRVNQKTsKKworCQlpZihob3N0LT5kYXRhKQorCQkJaW14bWNpX2RhdGFfZG9uZShob3N0LCBTVEFUVVNfVElNRV9PVVRfUkVBRCB8CisJCQkJCSBTVEFUVVNfQ1JDX1JFQURfRVJSIHwgU1RBVFVTX0NSQ19XUklURV9FUlIpOworCisJCWlmKGhvc3QtPnJlcSkKKwkJCWlteG1jaV9maW5pc2hfcmVxdWVzdChob3N0LCBob3N0LT5yZXEpOworCisJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgbXNlY3NfdG9famlmZmllcygxMDApKTsKKworCX0KK30KKworc3RhdGljIHZvaWQgaW14bWNpX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgaW50IGNtZGF0OworCisJV0FSTl9PTihob3N0LT5yZXEgIT0gTlVMTCk7CisKKwlob3N0LT5yZXEgPSByZXE7CisKKwljbWRhdCA9IDA7CisKKwlpZiAocmVxLT5kYXRhKSB7CisJCWlteG1jaV9zZXR1cF9kYXRhKGhvc3QsIHJlcS0+ZGF0YSk7CisKKwkJY21kYXQgfD0gQ01EX0RBVF9DT05UX0RBVEFfRU5BQkxFOworCisJCWlmIChyZXEtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCQljbWRhdCB8PSBDTURfREFUX0NPTlRfV1JJVEU7CisKKwkJaWYgKHJlcS0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9TVFJFQU0pIHsKKwkJCWNtZGF0IHw9IENNRF9EQVRfQ09OVF9TVFJFQU1fQkxPQ0s7CisJCX0KKwl9CisKKwlpbXhtY2lfc3RhcnRfY21kKGhvc3QsIHJlcS0+Y21kLCBjbWRhdCk7Cit9CisKKyNkZWZpbmUgQ0xLX1JBVEUgMTkyMDAwMDAKKworc3RhdGljIHZvaWQgaW14bWNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJc3RydWN0IGlteG1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlpbnQgcHJlc2NhbGVyOworCisJaWYoIGlvcy0+YnVzX3dpZHRoPT1NTUNfQlVTX1dJRFRIXzQgKSB7CisJCWhvc3QtPmFjdHVhbF9idXNfd2lkdGggPSBNTUNfQlVTX1dJRFRIXzQ7CisJCWlteF9ncGlvX21vZGUoUEIxMV9QRl9TRF9EQVQzKTsKKwl9ZWxzZXsKKwkJaG9zdC0+YWN0dWFsX2J1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfMTsKKwkJaW14X2dwaW9fbW9kZShHUElPX1BPUlRCIHwgR1BJT19JTiB8IEdQSU9fUFVFTiB8IDExKTsKKwl9CisKKwlpZiAoIGhvc3QtPnBvd2VyX21vZGUgIT0gaW9zLT5wb3dlcl9tb2RlICkgeworCQlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgeworCQljYXNlIE1NQ19QT1dFUl9PRkY6CisgICAgICAgIAkJYnJlYWs7CisJCWNhc2UgTU1DX1BPV0VSX1VQOgorCQkJc2V0X2JpdChJTVhNQ0lfUEVORF9TRVRfSU5JVF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworICAgICAgICAJCWJyZWFrOworCQljYXNlIE1NQ19QT1dFUl9PTjoKKyAgICAgICAgCQlicmVhazsKKwkJfQorCQlob3N0LT5wb3dlcl9tb2RlID0gaW9zLT5wb3dlcl9tb2RlOworCX0KKworCWlmICggaW9zLT5jbG9jayApIHsKKwkJdW5zaWduZWQgaW50IGNsazsKKworCQkvKiBUaGUgcHJlc2NhbGVyIGlzIDUgZm9yIFBFUkNMSzIgZXF1YWwgdG8gOTZNSHoKKwkJICogdGhlbiA5Nk1IeiAvIDUgPSAxOS4yIE1IegorCQkgKi8KKwkJY2xrPWlteF9nZXRfcGVyY2xrMigpOworCQlwcmVzY2FsZXI9KGNsaysoQ0xLX1JBVEUqNykvOCkvQ0xLX1JBVEU7CisJCXN3aXRjaChwcmVzY2FsZXIpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CXByZXNjYWxlciA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAyOglwcmVzY2FsZXIgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMzoJcHJlc2NhbGVyID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDQ6CXByZXNjYWxlciA9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSA1OglwcmVzY2FsZXIgPSA1OworCQkJYnJlYWs7CisJCX0KKworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIlBFUkNMSzIgJWQgTUh6IC0+IHByZXNjYWxlciAlZFxuIiwKKwkJCWNsaywgcHJlc2NhbGVyKTsKKworCQlmb3IoY2xrPTA7IGNsazw4OyBjbGsrKykgeworCQkJaW50IHg7CisJCQl4ID0gQ0xLX1JBVEUgLyAoMTw8Y2xrKTsKKwkJCWlmKCB4IDw9IGlvcy0+Y2xvY2spCisJCQkJYnJlYWs7CisJCX0KKworCQlNTUNfU1RSX1NUUF9DTEsgfD0gU1RSX1NUUF9DTEtfRU5BQkxFOyAvKiBlbmFibGUgY29udHJvbGxlciAqLworCisJCWlteG1jaV9zdG9wX2Nsb2NrKGhvc3QpOworCQlNTUNfQ0xLX1JBVEUgPSAocHJlc2NhbGVyPDwzKSB8IGNsazsKKwkJLyoKKwkJICogVW5kZXIgbXkgdW5kZXJzdGFuZGluZywgY2xvY2sgc2hvdWxkIG5vdCBiZSBzdGFydGVkIHRoZXJlLCBiZWNhdXNlIGl0IHdvdWxkCisJCSAqIGluaXRpYXRlIFNESEMgc2VxdWVuY2VyIGFuZCBzZW5kIGxhc3Qgb3IgcmFuZG9tIGNvbW1hbmQgaW50byBjYXJkCisJCSAqLworCQkvKmlteG1jaV9zdGFydF9jbG9jayhob3N0KTsqLworCisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTU1DX0NMS19SQVRFOiAweCUwOHhcbiIsIE1NQ19DTEtfUkFURSk7CisJfSBlbHNlIHsKKwkJaW14bWNpX3N0b3BfY2xvY2soaG9zdCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyBpbXhtY2lfb3BzID0geworCS5yZXF1ZXN0CT0gaW14bWNpX3JlcXVlc3QsCisJLnNldF9pb3MJPSBpbXhtY2lfc2V0X2lvcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKnBsYXRmb3JtX2RldmljZV9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtYXNrLCBpbnQgbnIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fcmVzb3VyY2VzOyBpKyspCisJCWlmIChkZXYtPnJlc291cmNlW2ldLmZsYWdzID09IG1hc2sgJiYgbnItLSA9PSAwKQorCQkJcmV0dXJuICZkZXYtPnJlc291cmNlW2ldOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2RldmljZV9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgbnIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fcmVzb3VyY2VzOyBpKyspCisJCWlmIChkZXYtPnJlc291cmNlW2ldLmZsYWdzID09IElPUkVTT1VSQ0VfSVJRICYmIG5yLS0gPT0gMCkKKwkJCXJldHVybiBkZXYtPnJlc291cmNlW2ldLnN0YXJ0OworCXJldHVybiBOT19JUlE7Cit9CisKK3N0YXRpYyB2b2lkIGlteG1jaV9jaGVja19zdGF0dXModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgaW14bWNpX2hvc3QgKilkYXRhOworCisJaWYoIGhvc3QtPnBkYXRhLT5jYXJkX3ByZXNlbnQoKSAhPSBob3N0LT5wcmVzZW50ICkgeworCQlob3N0LT5wcmVzZW50IF49IDE7CisJCWRldl9pbmZvKG1tY19kZXYoaG9zdC0+bW1jKSwgImNhcmQgJXNcbiIsCisJCSAgICAgIGhvc3QtPnByZXNlbnQgPyAiaW5zZXJ0ZWQiIDogInJlbW92ZWQiKTsKKworCQlzZXRfYml0KElNWE1DSV9QRU5EX0NBUkRfWENIR19iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsKKwl9CisKKwlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9XQUlUX1JFU1BfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSB8fAorCSAgIHRlc3RfYml0KElNWE1DSV9QRU5EX0RNQV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpIHsKKwkJYXRvbWljX2luYygmaG9zdC0+c3R1Y2tfdGltZW91dCk7CisJCWlmKGF0b21pY19yZWFkKCZob3N0LT5zdHVja190aW1lb3V0KSA+IDQpCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsKKwl9IGVsc2UgeworCQlhdG9taWNfc2V0KCZob3N0LT5zdHVja190aW1lb3V0LCAwKTsKKworCX0KKworCW1vZF90aW1lcigmaG9zdC0+dGltZXIsIGppZmZpZXMgKyAoSFo+PjEpKTsKK30KKworc3RhdGljIGludCBpbXhtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgcmV0ID0gMCwgaXJxOworCisJcHJpbnRrKEtFUk5fSU5GTyAiaS5NWCBtbWMgZHJpdmVyXG4iKTsKKworCXIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycSA9IHBsYXRmb3JtX2RldmljZV9pcnEocGRldiwgMCk7CisJaWYgKCFyIHx8IGlycSA9PSBOT19JUlEpCisJCXJldHVybiAtRU5YSU87CisKKwlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCAweDEwMCwgIklNWE1DSSIpOworCWlmICghcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgaW14bWNpX2hvc3QpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1tYykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltbWMtPm9wcyA9ICZpbXhtY2lfb3BzOworCW1tYy0+Zl9taW4gPSAxNTAwMDA7CisJbW1jLT5mX21heCA9IENMS19SQVRFLzI7CisJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzOworCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CisKKwkvKiBNTUMgY29yZSB0cmFuc2ZlciBzaXplcyB0dW5hYmxlIHBhcmFtZXRlcnMgKi8KKwltbWMtPm1heF9od19zZWdzID0gNjQ7CisJbW1jLT5tYXhfcGh5c19zZWdzID0gNjQ7CisJbW1jLT5tYXhfc2VjdG9ycyA9IDY0OwkJLyogZGVmYXVsdCAxIDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gOSkgKi8KKwltbWMtPm1heF9zZWdfc2l6ZSA9IDY0KjUxMjsJLyogZGVmYXVsdCBQQUdFX0NBQ0hFX1NJWkUgKi8KKworCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCWhvc3QtPm1tYyA9IG1tYzsKKwlob3N0LT5kbWFfYWxsb2NhdGVkID0gMDsKKwlob3N0LT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOworCWhvc3QtPnJlcyA9IHI7CisJaG9zdC0+aXJxID0gaXJxOworCisJaW14X2dwaW9fbW9kZShQQjhfUEZfU0RfREFUMCk7CisJaW14X2dwaW9fbW9kZShQQjlfUEZfU0RfREFUMSk7CisJaW14X2dwaW9fbW9kZShQQjEwX1BGX1NEX0RBVDIpOworCS8qIENvbmZpZ3VyZWQgYXMgR1BJTyB3aXRoIHB1bGwtdXAgdG8gZW5zdXJlIHJpZ2h0IE1DQyBjYXJkIG1vZGUgKi8KKwkvKiBTd2l0Y2hlZCB0byBQQjExX1BGX1NEX0RBVDMgaWYgNCBiaXQgYnVzIGlzIGNvbmZpZ3VyZWQgKi8KKwlpbXhfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCBHUElPX0lOIHwgR1BJT19QVUVOIHwgMTEpOworCS8qIGlteF9ncGlvX21vZGUoUEIxMV9QRl9TRF9EQVQzKTsgKi8KKwlpbXhfZ3Bpb19tb2RlKFBCMTJfUEZfU0RfQ0xLKTsKKwlpbXhfZ3Bpb19tb2RlKFBCMTNfUEZfU0RfQ01EKTsKKworCWlteG1jaV9zb2Z0cmVzZXQoKTsKKworCWlmICggTU1DX1JFVl9OTyAhPSAweDM5MCApIHsKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJ3cm9uZyByZXYubm8uIDB4JTA4eC4gYWJvcnRpbmcuXG4iLAorCQkgICAgICAgIE1NQ19SRVZfTk8pOworCQlnb3RvIG91dDsKKwl9CisKKwlNTUNfUkVBRF9UTyA9IDB4MmRiNDsgLyogcmVjb21tZW5kZWQgaW4gZGF0YSBzaGVldCAqLworCisJaG9zdC0+aW1hc2sgPSBJTVhNQ0lfSU5UX01BU0tfREVGQVVMVDsKKwlNTUNfSU5UX01BU0sgPSBob3N0LT5pbWFzazsKKworCisJaWYoaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8oJmhvc3QtPmRtYSwgRFJJVkVSX05BTUUsIERNQV9QUklPX0xPVyk8MCl7CisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8gZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisJaG9zdC0+ZG1hX2FsbG9jYXRlZD0xOworCWlteF9kbWFfc2V0dXBfaGFuZGxlcnMoaG9zdC0+ZG1hLCBpbXhtY2lfZG1hX2lycSwgTlVMTCwgaG9zdCk7CisKKwl0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2tsZXQsIGlteG1jaV90YXNrbGV0X2ZuYywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisJaG9zdC0+c3RhdHVzX3JlZz0wOworCWhvc3QtPnBlbmRpbmdfZXZlbnRzPTA7CisKKwlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIGlteG1jaV9pcnEsIDAsIERSSVZFUl9OQU1FLCBob3N0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWhvc3QtPnByZXNlbnQgPSBob3N0LT5wZGF0YS0+Y2FyZF9wcmVzZW50KCk7CisJaW5pdF90aW1lcigmaG9zdC0+dGltZXIpOworCWhvc3QtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylob3N0OworCWhvc3QtPnRpbWVyLmZ1bmN0aW9uID0gaW14bWNpX2NoZWNrX3N0YXR1czsKKwlhZGRfdGltZXIoJmhvc3QtPnRpbWVyKTsKKwltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgKEhaPj4xKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOworCisJbW1jX2FkZF9ob3N0KG1tYyk7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChob3N0KSB7CisJCWlmKGhvc3QtPmRtYV9hbGxvY2F0ZWQpeworCQkJaW14X2RtYV9mcmVlKGhvc3QtPmRtYSk7CisJCQlob3N0LT5kbWFfYWxsb2NhdGVkPTA7CisJCX0KKwl9CisJaWYgKG1tYykKKwkJbW1jX2ZyZWVfaG9zdChtbWMpOworCXJlbGVhc2VfcmVzb3VyY2Uocik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbXhtY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWYgKG1tYykgeworCQlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJCXRhc2tsZXRfZGlzYWJsZSgmaG9zdC0+dGFza2xldCk7CisKKwkJZGVsX3RpbWVyX3N5bmMoJmhvc3QtPnRpbWVyKTsKKwkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CisKKwkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKKwkJaWYoaG9zdC0+ZG1hX2FsbG9jYXRlZCl7CisJCQlpbXhfZG1hX2ZyZWUoaG9zdC0+ZG1hKTsKKwkJCWhvc3QtPmRtYV9hbGxvY2F0ZWQ9MDsKKwkJfQorCisJCXRhc2tsZXRfa2lsbCgmaG9zdC0+dGFza2xldCk7CisKKwkJcmVsZWFzZV9yZXNvdXJjZShob3N0LT5yZXMpOworCisJCW1tY19mcmVlX2hvc3QobW1jKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaW14bWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSAwOworCisJaWYgKG1tYykKKwkJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW14bWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtbWMpIHsKKwkJaG9zdCA9IG1tY19wcml2KG1tYyk7CisJCWlmKGhvc3QpCisJCQlzZXRfYml0KElNWE1DSV9QRU5EX1NFVF9JTklUX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCXJldCA9IG1tY19yZXN1bWVfaG9zdChtbWMpOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZWxzZQorI2RlZmluZSBpbXhtY2lfc3VzcGVuZCAgTlVMTAorI2RlZmluZSBpbXhtY2lfcmVzdW1lICAgTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbXhtY2lfZHJpdmVyID0geworCS5wcm9iZQkJPSBpbXhtY2lfcHJvYmUsCisJLnJlbW92ZQkJPSBpbXhtY2lfcmVtb3ZlLAorCS5zdXNwZW5kCT0gaW14bWNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBpbXhtY2lfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSBEUklWRVJfTkFNRSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbXhtY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteG1jaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaW14bWNpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW14bWNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlteG1jaV9pbml0KTsKK21vZHVsZV9leGl0KGlteG1jaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJpLk1YIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9pbXhtbWMuaCBiL2RyaXZlcnMvbW1jL2lteG1tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MzM5ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9pbXhtbWMuaApAQCAtMCwwICsxLDY3IEBACisKKyMgZGVmaW5lIF9fUkVHMTYoeCkJKCooKHZvbGF0aWxlIHUxNiAqKUlPX0FERFJFU1MoeCkpKQorCisjZGVmaW5lIE1NQ19TVFJfU1RQX0NMSyAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDAwKQorI2RlZmluZSBNTUNfU1RBVFVTICAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgwNCkKKyNkZWZpbmUgTU1DX0NMS19SQVRFICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MDgpCisjZGVmaW5lIE1NQ19DTURfREFUX0NPTlQgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDBDKQorI2RlZmluZSBNTUNfUkVTX1RPICAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgxMCkKKyNkZWZpbmUgTU1DX1JFQURfVE8gICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MTQpCisjZGVmaW5lIE1NQ19CTEtfTEVOICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDE4KQorI2RlZmluZSBNTUNfTk9CICAgICAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgxQykKKyNkZWZpbmUgTU1DX1JFVl9OTyAgICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MjApCisjZGVmaW5lIE1NQ19JTlRfTUFTSyAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDI0KQorI2RlZmluZSBNTUNfQ01EICAgICAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgyOCkKKyNkZWZpbmUgTU1DX0FSR0ggICAgICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MkMpCisjZGVmaW5lIE1NQ19BUkdMICAgICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDMwKQorI2RlZmluZSBNTUNfUkVTX0ZJRk8gICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgzNCkKKyNkZWZpbmUgTU1DX0JVRkZFUl9BQ0NFU1MgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDM4KQorI2RlZmluZSBNTUNfQlVGRkVSX0FDQ0VTU19PRlMgMHgzOAorCisKKyNkZWZpbmUgU1RSX1NUUF9DTEtfRU5ESUFOICAgICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgU1RSX1NUUF9DTEtfUkVTRVQgICAgICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgU1RSX1NUUF9DTEtfRU5BQkxFICAgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgU1RSX1NUUF9DTEtfU1RBUlRfQ0xLICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgU1RSX1NUUF9DTEtfU1RPUF9DTEsgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgU1RBVFVTX0NBUkRfUFJFU0VOQ0UgICAgICAgICAgICAoMTw8MTUpCisjZGVmaW5lIFNUQVRVU19TRElPX0lOVF9BQ1RJVkUgICAgICAgICAgKDE8PDE0KQorI2RlZmluZSBTVEFUVVNfRU5EX0NNRF9SRVNQICAgICAgICAgICAgICgxPDwxMykKKyNkZWZpbmUgU1RBVFVTX1dSSVRFX09QX0RPTkUgICAgICAgICAgICAoMTw8MTIpCisjZGVmaW5lIFNUQVRVU19EQVRBX1RSQU5TX0RPTkUgICAgICAgICAgKDE8PDExKQorI2RlZmluZSBTVEFUVVNfV1JfQ1JDX0VSUk9SX0NPREVfTUFTSyAgICgzPDwxMCkKKyNkZWZpbmUgU1RBVFVTX0NBUkRfQlVTX0NMS19SVU4gICAgICAgICAoMTw8OCkKKyNkZWZpbmUgU1RBVFVTX0FQUExfQlVGRl9GRiAgICAgICAgICAgICAoMTw8NykKKyNkZWZpbmUgU1RBVFVTX0FQUExfQlVGRl9GRSAgICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgU1RBVFVTX1JFU1BfQ1JDX0VSUiAgICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgU1RBVFVTX0NSQ19SRUFEX0VSUiAgICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgU1RBVFVTX0NSQ19XUklURV9FUlIgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgU1RBVFVTX1RJTUVfT1VUX1JFU1AgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgU1RBVFVTX1RJTUVfT1VUX1JFQUQgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgU1RBVFVTX0VSUl9NQVNLICAgICAgICAgICAgICAgICAweDJmCisjZGVmaW5lIENMS19SQVRFX1BSRVNDQUxFUih4KSAgICAgICAgICAgKCh4KSAmIDB4NykKKyNkZWZpbmUgQ0xLX1JBVEVfQ0xLX1JBVEUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMykKKyNkZWZpbmUgQ01EX0RBVF9DT05UX0NNRF9SRVNQX0xPTkdfT0ZGICAoMTw8MTIpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9TVE9QX1JFQURXQUlUICAgICAgKDE8PDExKQorI2RlZmluZSBDTURfREFUX0NPTlRfU1RBUlRfUkVBRFdBSVQgICAgICgxPDwxMCkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX0JVU19XSURUSF8xICAgICAgICAoMDw8OCkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX0JVU19XSURUSF80ICAgICAgICAoMjw8OCkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX0lOSVQgICAgICAgICAgICAgICAoMTw8NykKKyNkZWZpbmUgQ01EX0RBVF9DT05UX0JVU1kgICAgICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1NUUkVBTV9CTE9DSyAgICAgICAoMTw8NSkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1dSSVRFICAgICAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX0RBVEFfRU5BQkxFICAgICAgICAoMTw8MykKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1JFU1BPTlNFX0ZPUk1BVF9SMSAoMSkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1JFU1BPTlNFX0ZPUk1BVF9SMiAoMikKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1JFU1BPTlNFX0ZPUk1BVF9SMyAoMykKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1JFU1BPTlNFX0ZPUk1BVF9SNCAoNCkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1JFU1BPTlNFX0ZPUk1BVF9SNSAoNSkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1JFU1BPTlNFX0ZPUk1BVF9SNiAoNikKKyNkZWZpbmUgSU5UX01BU0tfQVVUT19DQVJEX0RFVEVDVCAgICAgICAoMTw8NikKKyNkZWZpbmUgSU5UX01BU0tfREFUMF9FTiAgICAgICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgSU5UX01BU0tfU0RJTyAgICAgICAgICAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgSU5UX01BU0tfQlVGX1JFQURZICAgICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgSU5UX01BU0tfRU5EX0NNRF9SRVMgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgSU5UX01BU0tfV1JJVEVfT1BfRE9ORSAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgSU5UX01BU0tfREFUQV9UUkFOICAgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgSU5UX0FMTCAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tYy5jIGIvZHJpdmVycy9tbWMvbW1jLmMKaW5kZXggMTg4ODA2MC4uNjIwMWYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jLmMKQEAgLTI3LDEyICsyNyw2IEBACiAKICNpbmNsdWRlICJtbWMuaCIKIAotI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLSNkZWZpbmUgREJHKHguLi4pCXByaW50ayhLRVJOX0RFQlVHIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNkZWZpbmUgQ01EX1JFVFJJRVMJMwogCiAvKgpAQCAtNjUsMjAgKzU5LDIzIEBACiAKIAogLyoqCi0gKgltbWNfcmVxdWVzdF9kb25lIC0gZmluaXNoIHByb2Nlc3NpbmcgYW4gTU1DIGNvbW1hbmQKLSAqCUBob3N0OiBNTUMgaG9zdCB3aGljaCBjb21wbGV0ZWQgY29tbWFuZAotICoJQG1ycTogTU1DIHJlcXVlc3Qgd2hpY2ggY29tcGxldGVkCisgKgltbWNfcmVxdWVzdF9kb25lIC0gZmluaXNoIHByb2Nlc3NpbmcgYW4gTU1DIHJlcXVlc3QKKyAqCUBob3N0OiBNTUMgaG9zdCB3aGljaCBjb21wbGV0ZWQgcmVxdWVzdAorICoJQG1ycTogTU1DIHJlcXVlc3Qgd2hpY2ggcmVxdWVzdAogICoKICAqCU1NQyBkcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiB0aGV5IGhhdmUgY29tcGxldGVkCi0gKgl0aGVpciBwcm9jZXNzaW5nIG9mIGEgY29tbWFuZC4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlCi0gKglkYXRhIHBhcnQgb2YgdGhlIGNvbW1hbmQgaGFzIGNvbXBsZXRlZC4KKyAqCXRoZWlyIHByb2Nlc3Npbmcgb2YgYSByZXF1ZXN0LgogICovCiB2b2lkIG1tY19yZXF1ZXN0X2RvbmUoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKIHsKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IG1ycS0+Y21kOwotCWludCBlcnIgPSBtcnEtPmNtZC0+ZXJyb3I7Ci0JREJHKCJNTUM6IHJlcSBkb25lICglMDJ4KTogJWQ6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGNtZC0+b3Bjb2RlLAotCSAgICBlcnIsIGNtZC0+cmVzcFswXSwgY21kLT5yZXNwWzFdLCBjbWQtPnJlc3BbMl0sIGNtZC0+cmVzcFszXSk7CisJaW50IGVyciA9IGNtZC0+ZXJyb3I7CisKKwlwcl9kZWJ1ZygiJXM6IHJlcSBkb25lIChDTUQldSk6ICVkLyVkLyVkOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAorCQkgbW1jX2hvc3RuYW1lKGhvc3QpLCBjbWQtPm9wY29kZSwgZXJyLAorCQkgbXJxLT5kYXRhID8gbXJxLT5kYXRhLT5lcnJvciA6IDAsCisJCSBtcnEtPnN0b3AgPyBtcnEtPnN0b3AtPmVycm9yIDogMCwKKwkJIGNtZC0+cmVzcFswXSwgY21kLT5yZXNwWzFdLCBjbWQtPnJlc3BbMl0sIGNtZC0+cmVzcFszXSk7CiAKIAlpZiAoZXJyICYmIGNtZC0+cmV0cmllcykgewogCQljbWQtPnJldHJpZXMtLTsKQEAgLTEwMiw4ICs5OSw5IEBACiB2b2lkCiBtbWNfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQogewotCURCRygiTU1DOiBzdGFydGluZyBjbWQgJTAyeCBhcmcgJTA4eCBmbGFncyAlMDh4XG4iLAotCSAgICBtcnEtPmNtZC0+b3Bjb2RlLCBtcnEtPmNtZC0+YXJnLCBtcnEtPmNtZC0+ZmxhZ3MpOworCXByX2RlYnVnKCIlczogc3RhcnRpbmcgQ01EJXUgYXJnICUwOHggZmxhZ3MgJTA4eFxuIiwKKwkJIG1tY19ob3N0bmFtZShob3N0KSwgbXJxLT5jbWQtPm9wY29kZSwKKwkJIG1ycS0+Y21kLT5hcmcsIG1ycS0+Y21kLT5mbGFncyk7CiAKIAlXQVJOX09OKGhvc3QtPmNhcmRfYnVzeSA9PSBOVUxMKTsKIApAQCAtMzE3LDYgKzMxNSwxOCBAQAogCiBFWFBPUlRfU1lNQk9MKG1tY19yZWxlYXNlX2hvc3QpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfaW9zICppb3MgPSAmaG9zdC0+aW9zOworCisJcHJfZGVidWcoIiVzOiBjbG9jayAldUh6IGJ1c21vZGUgJXUgcG93ZXJtb2RlICV1IGNzICV1IFZkZCAldSB3aWR0aCAldVxuIiwKKwkJIG1tY19ob3N0bmFtZShob3N0KSwgaW9zLT5jbG9jaywgaW9zLT5idXNfbW9kZSwKKwkJIGlvcy0+cG93ZXJfbW9kZSwgaW9zLT5jaGlwX3NlbGVjdCwgaW9zLT52ZGQsCisJCSBpb3MtPmJ1c193aWR0aCk7CisJCisJaG9zdC0+b3BzLT5zZXRfaW9zKGhvc3QsIGlvcyk7Cit9CisKIHN0YXRpYyBpbnQgbW1jX3NlbGVjdF9jYXJkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jYXJkICpjYXJkKQogewogCWludCBlcnI7CkBAIC0zNjksNyArMzc5LDcgQEAKIAkJfQogCX0KIAotCWhvc3QtPm9wcy0+c2V0X2lvcyhob3N0LCAmaG9zdC0+aW9zKTsKKwltbWNfc2V0X2lvcyhob3N0KTsKIAogCXJldHVybiBNTUNfRVJSX05PTkU7CiB9CkBAIC00MjAsNyArNDMwLDcgQEAKIAkJb2NyID0gMyA8PCBiaXQ7CiAKIAkJaG9zdC0+aW9zLnZkZCA9IGJpdDsKLQkJaG9zdC0+b3BzLT5zZXRfaW9zKGhvc3QsICZob3N0LT5pb3MpOworCQltbWNfc2V0X2lvcyhob3N0KTsKIAl9IGVsc2UgewogCQlvY3IgPSAwOwogCX0KQEAgLTU1NCw2ICs1NjQsNyBAQAogCQljc2QtPnJlYWRfcGFydGlhbCA9IFVOU1RVRkZfQklUUyhyZXNwLCA3OSwgMSk7CiAJCWNzZC0+d3JpdGVfbWlzYWxpZ24gPSBVTlNUVUZGX0JJVFMocmVzcCwgNzgsIDEpOwogCQljc2QtPnJlYWRfbWlzYWxpZ24gPSBVTlNUVUZGX0JJVFMocmVzcCwgNzcsIDEpOworCQljc2QtPnIyd19mYWN0b3IgPSBVTlNUVUZGX0JJVFMocmVzcCwgMjYsIDMpOwogCQljc2QtPndyaXRlX2Jsa2JpdHMgPSBVTlNUVUZGX0JJVFMocmVzcCwgMjIsIDQpOwogCQljc2QtPndyaXRlX3BhcnRpYWwgPSBVTlNUVUZGX0JJVFMocmVzcCwgMjEsIDEpOwogCX0gZWxzZSB7CkBAIC01ODgsNiArNTk5LDcgQEAKIAkJY3NkLT5yZWFkX3BhcnRpYWwgPSBVTlNUVUZGX0JJVFMocmVzcCwgNzksIDEpOwogCQljc2QtPndyaXRlX21pc2FsaWduID0gVU5TVFVGRl9CSVRTKHJlc3AsIDc4LCAxKTsKIAkJY3NkLT5yZWFkX21pc2FsaWduID0gVU5TVFVGRl9CSVRTKHJlc3AsIDc3LCAxKTsKKwkJY3NkLT5yMndfZmFjdG9yID0gVU5TVFVGRl9CSVRTKHJlc3AsIDI2LCAzKTsKIAkJY3NkLT53cml0ZV9ibGtiaXRzID0gVU5TVFVGRl9CSVRTKHJlc3AsIDIyLCA0KTsKIAkJY3NkLT53cml0ZV9wYXJ0aWFsID0gVU5TVFVGRl9CSVRTKHJlc3AsIDIxLCAxKTsKIAl9CkBAIC02NzEsNyArNjgzLDcgQEAKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOwogCiAJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0hJR0g7Ci0JaG9zdC0+b3BzLT5zZXRfaW9zKGhvc3QsICZob3N0LT5pb3MpOworCW1tY19zZXRfaW9zKGhvc3QpOwogCiAJbW1jX2RlbGF5KDEpOwogCkBAIC02ODQsNyArNjk2LDcgQEAKIAltbWNfZGVsYXkoMSk7CiAKIAlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfRE9OVENBUkU7Ci0JaG9zdC0+b3BzLT5zZXRfaW9zKGhvc3QsICZob3N0LT5pb3MpOworCW1tY19zZXRfaW9zKGhvc3QpOwogCiAJbW1jX2RlbGF5KDEpOwogfQpAQCAtNzA5LDEzICs3MjEsMTMgQEAKIAlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfRE9OVENBUkU7CiAJaG9zdC0+aW9zLnBvd2VyX21vZGUgPSBNTUNfUE9XRVJfVVA7CiAJaG9zdC0+aW9zLmJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfMTsKLQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJbW1jX3NldF9pb3MoaG9zdCk7CiAKIAltbWNfZGVsYXkoMSk7CiAKIAlob3N0LT5pb3MuY2xvY2sgPSBob3N0LT5mX21pbjsKIAlob3N0LT5pb3MucG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9PTjsKLQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJbW1jX3NldF9pb3MoaG9zdCk7CiAKIAltbWNfZGVsYXkoMik7CiB9CkBAIC03MjgsNyArNzQwLDcgQEAKIAlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfRE9OVENBUkU7CiAJaG9zdC0+aW9zLnBvd2VyX21vZGUgPSBNTUNfUE9XRVJfT0ZGOwogCWhvc3QtPmlvcy5idXNfd2lkdGggPSBNTUNfQlVTX1dJRFRIXzE7Ci0JaG9zdC0+b3BzLT5zZXRfaW9zKGhvc3QsICZob3N0LT5pb3MpOworCW1tY19zZXRfaW9zKGhvc3QpOwogfQogCiBzdGF0aWMgaW50IG1tY19zZW5kX29wX2NvbmQoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyLCB1MzIgKnJvY3IpCkBAIC05MzksNiArOTUxLDcgQEAKIAkJZGF0YS50aW1lb3V0X25zID0gY2FyZC0+Y3NkLnRhY2NfbnMgKiAxMDsKIAkJZGF0YS50aW1lb3V0X2Nsa3MgPSBjYXJkLT5jc2QudGFjY19jbGtzICogMTA7CiAJCWRhdGEuYmxrc3pfYml0cyA9IDM7CisJCWRhdGEuYmxrc3ogPSAxIDw8IDM7CiAJCWRhdGEuYmxvY2tzID0gMTsKIAkJZGF0YS5mbGFncyA9IE1NQ19EQVRBX1JFQUQ7CiAJCWRhdGEuc2cgPSAmc2c7CkBAIC05NzYsOCArOTg5LDkgQEAKIAkJaWYgKCFtbWNfY2FyZF9kZWFkKGNhcmQpICYmIG1heF9kdHIgPiBjYXJkLT5jc2QubWF4X2R0cikKIAkJCW1heF9kdHIgPSBjYXJkLT5jc2QubWF4X2R0cjsKIAotCURCRygiTU1DOiBzZWxlY3RlZCAlZC4lMDNkTUh6IHRyYW5zZmVyIHJhdGVcbiIsCi0JICAgIG1heF9kdHIgLyAxMDAwMDAwLCAobWF4X2R0ciAvIDEwMDApICUgMTAwMCk7CisJcHJfZGVidWcoIiVzOiBzZWxlY3RlZCAlZC4lMDNkTUh6IHRyYW5zZmVyIHJhdGVcbiIsCisJCSBtbWNfaG9zdG5hbWUoaG9zdCksCisJCSBtYXhfZHRyIC8gMTAwMDAwMCwgKG1heF9kdHIgLyAxMDAwKSAlIDEwMDApOwogCiAJcmV0dXJuIG1heF9kdHI7CiB9CkBAIC0xMDUxLDcgKzEwNjUsNyBAQAogCX0gZWxzZSB7CiAJCWhvc3QtPmlvcy5idXNfbW9kZSA9IE1NQ19CVVNNT0RFX09QRU5EUkFJTjsKIAkJaG9zdC0+aW9zLmNsb2NrID0gaG9zdC0+Zl9taW47Ci0JCWhvc3QtPm9wcy0+c2V0X2lvcyhob3N0LCAmaG9zdC0+aW9zKTsKKwkJbW1jX3NldF9pb3MoaG9zdCk7CiAKIAkJLyoKIAkJICogV2Ugc2hvdWxkIHJlbWVtYmVyIHRoZSBPQ1IgbWFzayBmcm9tIHRoZSBleGlzdGluZwpAQCAtMTA4Nyw3ICsxMTAxLDcgQEAKIAkgKiBPaywgbm93IHN3aXRjaCB0byBwdXNoLXB1bGwgbW9kZS4KIAkgKi8KIAlob3N0LT5pb3MuYnVzX21vZGUgPSBNTUNfQlVTTU9ERV9QVVNIUFVMTDsKLQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJbW1jX3NldF9pb3MoaG9zdCk7CiAKIAltbWNfcmVhZF9jc2RzKGhvc3QpOwogCkBAIC0xMTMzLDcgKzExNDcsNyBAQAogCQkgKiBhdHRhY2hlZCBjYXJkcyBhbmQgdGhlIGhvc3Qgc3VwcG9ydC4KIAkJICovCiAJCWhvc3QtPmlvcy5jbG9jayA9IG1tY19jYWxjdWxhdGVfY2xvY2soaG9zdCk7Ci0JCWhvc3QtPm9wcy0+c2V0X2lvcyhob3N0LCAmaG9zdC0+aW9zKTsKKwkJbW1jX3NldF9pb3MoaG9zdCk7CiAJfQogCiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY19ibG9jay5jIGIvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKaW5kZXggOGViMmEyZS4uNTg3NDU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKQEAgLTE3NSw2ICsxNzUsNyBAQAogCQlicnEuZGF0YS50aW1lb3V0X25zID0gY2FyZC0+Y3NkLnRhY2NfbnMgKiAxMDsKIAkJYnJxLmRhdGEudGltZW91dF9jbGtzID0gY2FyZC0+Y3NkLnRhY2NfY2xrcyAqIDEwOwogCQlicnEuZGF0YS5ibGtzel9iaXRzID0gbWQtPmJsb2NrX2JpdHM7CisJCWJycS5kYXRhLmJsa3N6ID0gMSA8PCBtZC0+YmxvY2tfYml0czsKIAkJYnJxLmRhdGEuYmxvY2tzID0gcmVxLT5ucl9zZWN0b3JzID4+IChtZC0+YmxvY2tfYml0cyAtIDkpOwogCQlicnEuc3RvcC5vcGNvZGUgPSBNTUNfU1RPUF9UUkFOU01JU1NJT047CiAJCWJycS5zdG9wLmFyZyA9IDA7CkBAIC0xODcsNiArMTg4LDEyIEBACiAJCQlicnEuY21kLm9wY29kZSA9IE1NQ19XUklURV9CTE9DSzsKIAkJCWJycS5kYXRhLmZsYWdzIHw9IE1NQ19EQVRBX1dSSVRFOwogCQkJYnJxLmRhdGEuYmxvY2tzID0gMTsKKworCQkJLyoKKwkJCSAqIFNjYWxlIHVwIHRoZSB0aW1lb3V0IGJ5IHRoZSByMncgZmFjdG9yCisJCQkgKi8KKwkJCWJycS5kYXRhLnRpbWVvdXRfbnMgPDw9IGNhcmQtPmNzZC5yMndfZmFjdG9yOworCQkJYnJxLmRhdGEudGltZW91dF9jbGtzIDw8PSBjYXJkLT5jc2QucjJ3X2ZhY3RvcjsKIAkJfQogCiAJCWlmIChicnEuZGF0YS5ibG9ja3MgPiAxKSB7CkBAIC0zNDYsNyArMzUzLDcgQEAKIAkJCSAqLwogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHNlbGVjdCBibG9jayBzaXplIGZvciAiCiAJCQkJIndyaXRpbmcgKHJiJXUgd2IldSBycCV1IHdwJXUpXG4iLAotCQkJCW1kLT5kaXNrLT5kaXNrX25hbWUsCisJCQkJbW1jX2NhcmRfaWQoY2FyZCksCiAJCQkJMSA8PCBjYXJkLT5jc2QucmVhZF9ibGtiaXRzLAogCQkJCTEgPDwgY2FyZC0+Y3NkLndyaXRlX2Jsa2JpdHMsCiAJCQkJY2FyZC0+Y3NkLnJlYWRfcGFydGlhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY2kuYyBiL2RyaXZlcnMvbW1jL21tY2kuYwppbmRleCA5ZmVmMjlkLi5kYThlNGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jaS5jCkBAIC0zMywxMiArMzMsOCBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJtbWNpLXBsMTh4IgogCi0jaWZkZWYgQ09ORklHX01NQ19ERUJVRwogI2RlZmluZSBEQkcoaG9zdCxmbXQsYXJncy4uLikJXAogCXByX2RlYnVnKCIlczogJXM6ICIgZm10LCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgX19mdW5jX18gLCBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgREJHKGhvc3QsZm10LGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZtYXggPSA1MTU2MzM7CiAKQEAgLTQwNiw5ICs0MDIsNiBAQAogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXUzMiBjbGsgPSAwLCBwd3IgPSAwOwogCi0JREJHKGhvc3QsICJjbG9jayAldUh6IGJ1c21vZGUgJXUgcG93ZXJtb2RlICV1IFZkZCAldVxuIiwKLQkgICAgaW9zLT5jbG9jaywgaW9zLT5idXNfbW9kZSwgaW9zLT5wb3dlcl9tb2RlLCBpb3MtPnZkZCk7Ci0KIAlpZiAoaW9zLT5jbG9jaykgewogCQlpZiAoaW9zLT5jbG9jayA+PSBob3N0LT5tY2xrKSB7CiAJCQljbGsgPSBNQ0lfQ0xLX0JZUEFTUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL29tYXAuYyBiL2RyaXZlcnMvbW1jL29tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWNiM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvb21hcC5jCkBAIC0wLDAgKzEsMTIyNiBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL21lZGlhL21tYy9vbWFwLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gYW5kIEp1aGEgWXJq9mzkPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqICBNaXNjIGhhY2tzIGhlcmUgYW5kIHRoZXJlIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKiAgT3RoZXIgaGFja3MgKERNQSwgU0QsIGV0YykgYnkgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RwczY1MDEwLmg+CisKKyNpbmNsdWRlICJvbWFwLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm1tY2ktb21hcCIKKyNkZWZpbmUgUlNQX1RZUEUoeCkJKCh4KSAmIH4oTU1DX1JTUF9CVVNZfE1NQ19SU1BfT1BDT0RFKSkKKworLyogU3BlY2lmaWVzIGhvdyBvZnRlbiBpbiBtaWxsaXNlY3MgdG8gcG9sbCBmb3IgY2FyZCBzdGF0dXMgY2hhbmdlcworICogd2hlbiB0aGUgY292ZXIgc3dpdGNoIGlzIG9wZW4gKi8KKyNkZWZpbmUgT01BUF9NTUNfU1dJVENIX1BPTExfREVMQVkJNTAwCisKK3N0YXRpYyBpbnQgbW1jX29tYXBfZW5hYmxlX3BvbGwgPSAxOworCitzdHJ1Y3QgbW1jX29tYXBfaG9zdCB7CisJaW50CQkJaW5pdGlhbGl6ZWQ7CisJaW50CQkJc3VzcGVuZGVkOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqCW1ycTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKgljbWQ7CisJc3RydWN0IG1tY19kYXRhICoJZGF0YTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKgltbWM7CisJc3RydWN0IGRldmljZSAqCQlkZXY7CisJdW5zaWduZWQgY2hhcgkJaWQ7IC8qIDE2eHggY2hpcHMgaGF2ZSAyIE1NQyBibG9ja3MgKi8KKwlzdHJ1Y3QgY2xrICoJCWljbGs7CisJc3RydWN0IGNsayAqCQlmY2xrOworCXZvaWQgX19pb21lbQkJKmJhc2U7CisJaW50CQkJaXJxOworCXVuc2lnbmVkIGNoYXIJCWJ1c19tb2RlOworCXVuc2lnbmVkIGNoYXIJCWh3X2J1c19tb2RlOworCisJdW5zaWduZWQgaW50CQlzZ19sZW47CisJaW50CQkJc2dfaWR4OworCXUxNiAqCQkJYnVmZmVyOworCXUzMgkJCWJ1ZmZlcl9ieXRlc19sZWZ0OworCXUzMgkJCXRvdGFsX2J5dGVzX2xlZnQ7CisKKwl1bnNpZ25lZAkJdXNlX2RtYToxOworCXVuc2lnbmVkCQlicnNfcmVjZWl2ZWQ6MSwgZG1hX2RvbmU6MTsKKwl1bnNpZ25lZAkJZG1hX2lzX3JlYWQ6MTsKKwl1bnNpZ25lZAkJZG1hX2luX3VzZToxOworCWludAkJCWRtYV9jaDsKKwlzcGlubG9ja190CQlkbWFfbG9jazsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlkbWFfdGltZXI7CisJdW5zaWduZWQJCWRtYV9sZW47CisKKwlzaG9ydAkJCXBvd2VyX3BpbjsKKwlzaG9ydAkJCXdwX3BpbjsKKworCWludAkJCXN3aXRjaF9waW47CisJc3RydWN0IHdvcmtfc3RydWN0CXN3aXRjaF93b3JrOworCXN0cnVjdCB0aW1lcl9saXN0CXN3aXRjaF90aW1lcjsKKwlpbnQJCQlzd2l0Y2hfbGFzdF9zdGF0ZTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50CittbWNfb21hcF9jb3Zlcl9pc19vcGVuKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQoreworCWlmIChob3N0LT5zd2l0Y2hfcGluIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKGhvc3QtPnN3aXRjaF9waW4pOworfQorCitzdGF0aWMgc3NpemVfdAorbW1jX29tYXBfc2hvd19jb3Zlcl9zd2l0Y2goc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtbWNfb21hcF9jb3Zlcl9pc19vcGVuKGhvc3QpID8gIm9wZW4iIDoKKwkJCSJjbG9zZWQiKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGNvdmVyX3N3aXRjaCwgU19JUlVHTywgbW1jX29tYXBfc2hvd19jb3Zlcl9zd2l0Y2gsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorbW1jX29tYXBfc2hvd19lbmFibGVfcG9sbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgbW1jX29tYXBfZW5hYmxlX3BvbGwpOworfQorCitzdGF0aWMgc3NpemVfdAorbW1jX29tYXBfc3RvcmVfZW5hYmxlX3BvbGwoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJc2l6ZV90IHNpemUpCit7CisJaW50IGVuYWJsZV9wb2xsOworCisJaWYgKHNzY2FuZihidWYsICIlMTBkIiwgJmVuYWJsZV9wb2xsKSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbmFibGVfcG9sbCAhPSBtbWNfb21hcF9lbmFibGVfcG9sbCkgeworCQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJCW1tY19vbWFwX2VuYWJsZV9wb2xsID0gZW5hYmxlX3BvbGw7CisJCWlmIChlbmFibGVfcG9sbCAmJiBob3N0LT5zd2l0Y2hfcGluID49IDApCisJCQlzY2hlZHVsZV93b3JrKCZob3N0LT5zd2l0Y2hfd29yayk7CisJfQorCXJldHVybiBzaXplOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX3BvbGwsIDA2NjQsCisJCSAgIG1tY19vbWFwX3Nob3dfZW5hYmxlX3BvbGwsIG1tY19vbWFwX3N0b3JlX2VuYWJsZV9wb2xsKTsKKworc3RhdGljIHZvaWQKK21tY19vbWFwX3N0YXJ0X2NvbW1hbmQoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQoreworCXUzMiBjbWRyZWc7CisJdTMyIHJlc3B0eXBlOworCXUzMiBjbWR0eXBlOworCisJaG9zdC0+Y21kID0gY21kOworCisJcmVzcHR5cGUgPSAwOworCWNtZHR5cGUgPSAwOworCisJLyogT3VyIGhhcmR3YXJlIG5lZWRzIHRvIGtub3cgZXhhY3QgdHlwZSAqLworCXN3aXRjaCAoUlNQX1RZUEUobW1jX3Jlc3BfdHlwZShjbWQpKSkgeworCWNhc2UgUlNQX1RZUEUoTU1DX1JTUF9SMSk6CisJCS8qIHJlc3AgMSwgcmVzcCAxYiAqLworCQlyZXNwdHlwZSA9IDE7CisJCWJyZWFrOworCWNhc2UgUlNQX1RZUEUoTU1DX1JTUF9SMik6CisJCXJlc3B0eXBlID0gMjsKKwkJYnJlYWs7CisJY2FzZSBSU1BfVFlQRShNTUNfUlNQX1IzKToKKwkJcmVzcHR5cGUgPSAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAobW1jX2NtZF90eXBlKGNtZCkgPT0gTU1DX0NNRF9BRFRDKSB7CisJCWNtZHR5cGUgPSBPTUFQX01NQ19DTURUWVBFX0FEVEM7CisJfSBlbHNlIGlmIChtbWNfY21kX3R5cGUoY21kKSA9PSBNTUNfQ01EX0JDKSB7CisJCWNtZHR5cGUgPSBPTUFQX01NQ19DTURUWVBFX0JDOworCX0gZWxzZSBpZiAobW1jX2NtZF90eXBlKGNtZCkgPT0gTU1DX0NNRF9CQ1IpIHsKKwkJY21kdHlwZSA9IE9NQVBfTU1DX0NNRFRZUEVfQkNSOworCX0gZWxzZSB7CisJCWNtZHR5cGUgPSBPTUFQX01NQ19DTURUWVBFX0FDOworCX0KKworCWNtZHJlZyA9IGNtZC0+b3Bjb2RlIHwgKHJlc3B0eXBlIDw8IDgpIHwgKGNtZHR5cGUgPDwgMTIpOworCisJaWYgKGhvc3QtPmJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTikKKwkJY21kcmVnIHw9IDEgPDwgNjsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZKQorCQljbWRyZWcgfD0gMSA8PCAxMTsKKworCWlmIChob3N0LT5kYXRhICYmICEoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkpCisJCWNtZHJlZyB8PSAxIDw8IDE1OworCisJY2xrX2VuYWJsZShob3N0LT5mY2xrKTsKKworCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENUTywgMjAwKTsKKwlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBBUkdMLCBjbWQtPmFyZyAmIDB4ZmZmZik7CisJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQVJHSCwgY21kLT5hcmcgPj4gMTYpOworCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElFLAorCQkgICAgICAgT01BUF9NTUNfU1RBVF9BX0VNUFRZICAgIHwgT01BUF9NTUNfU1RBVF9BX0ZVTEwgICAgfAorCQkgICAgICAgT01BUF9NTUNfU1RBVF9DTURfQ1JDICAgIHwgT01BUF9NTUNfU1RBVF9DTURfVE9VVCAgfAorCQkgICAgICAgT01BUF9NTUNfU1RBVF9EQVRBX0NSQyAgIHwgT01BUF9NTUNfU1RBVF9EQVRBX1RPVVQgfAorCQkgICAgICAgT01BUF9NTUNfU1RBVF9FTkRfT0ZfQ01EIHwgT01BUF9NTUNfU1RBVF9DQVJEX0VSUiAgfAorCQkgICAgICAgT01BUF9NTUNfU1RBVF9FTkRfT0ZfREFUQSk7CisJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ01ELCBjbWRyZWcpOworfQorCitzdGF0aWMgdm9pZAorbW1jX29tYXBfeGZlcl9kb25lKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJaWYgKGhvc3QtPmRtYV9pbl91c2UpIHsKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RhdGFfZGlyOworCisJCUJVR19PTihob3N0LT5kbWFfY2ggPCAwKTsKKwkJaWYgKGRhdGEtPmVycm9yICE9IE1NQ19FUlJfTk9ORSkKKwkJCW9tYXBfc3RvcF9kbWEoaG9zdC0+ZG1hX2NoKTsKKwkJLyogUmVsZWFzZSBETUEgY2hhbm5lbCBsYXppbHkgKi8KKwkJbW9kX3RpbWVyKCZob3N0LT5kbWFfdGltZXIsIGppZmZpZXMgKyBIWik7CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQkJZG1hX2RhdGFfZGlyID0gRE1BX1RPX0RFVklDRTsKKwkJZWxzZQorCQkJZG1hX2RhdGFfZGlyID0gRE1BX0ZST01fREVWSUNFOworCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgaG9zdC0+c2dfbGVuLAorCQkJICAgICBkbWFfZGF0YV9kaXIpOworCX0KKwlob3N0LT5kYXRhID0gTlVMTDsKKwlob3N0LT5zZ19sZW4gPSAwOworCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCisJLyogTk9URTogIE1NQyBsYXllciB3aWxsIHNvbWV0aW1lcyBwb2xsLXdhaXQgQ01EMTMgbmV4dCwgaXNzdWluZworCSAqIGRvemVucyBvZiByZXF1ZXN0cyB1bnRpbCB0aGUgY2FyZCBmaW5pc2hlcyB3cml0aW5nIGRhdGEuCisJICogSXQnZCBiZSBjaGVhcGVyIHRvIGp1c3Qgd2FpdCB0aWxsIGFuIEVPRkIgaW50ZXJydXB0IGFycml2ZXMuLi4KKwkgKi8KKworCWlmICghZGF0YS0+c3RvcCkgeworCQlob3N0LT5tcnEgPSBOVUxMOworCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgZGF0YS0+bXJxKTsKKwkJcmV0dXJuOworCX0KKworCW1tY19vbWFwX3N0YXJ0X2NvbW1hbmQoaG9zdCwgZGF0YS0+c3RvcCk7Cit9CisKK3N0YXRpYyB2b2lkCittbWNfb21hcF9lbmRfb2ZfZGF0YShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGRvbmU7CisKKwlpZiAoIWhvc3QtPmRtYV9pbl91c2UpIHsKKwkJbW1jX29tYXBfeGZlcl9kb25lKGhvc3QsIGRhdGEpOworCQlyZXR1cm47CisJfQorCWRvbmUgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5kbWFfbG9jaywgZmxhZ3MpOworCWlmIChob3N0LT5kbWFfZG9uZSkKKwkJZG9uZSA9IDE7CisJZWxzZQorCQlob3N0LT5icnNfcmVjZWl2ZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmRtYV9sb2NrLCBmbGFncyk7CisJaWYgKGRvbmUpCisJCW1tY19vbWFwX3hmZXJfZG9uZShob3N0LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQKK21tY19vbWFwX2RtYV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSAoc3RydWN0IG1tY19vbWFwX2hvc3QgKikgZGF0YTsKKworCUJVR19PTihob3N0LT5kbWFfY2ggPCAwKTsKKwlvbWFwX2ZyZWVfZG1hKGhvc3QtPmRtYV9jaCk7CisJaG9zdC0+ZG1hX2NoID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkCittbWNfb21hcF9kbWFfZG9uZShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGRvbmU7CisKKwlkb25lID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+ZG1hX2xvY2ssIGZsYWdzKTsKKwlpZiAoaG9zdC0+YnJzX3JlY2VpdmVkKQorCQlkb25lID0gMTsKKwllbHNlCisJCWhvc3QtPmRtYV9kb25lID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5kbWFfbG9jaywgZmxhZ3MpOworCWlmIChkb25lKQorCQltbWNfb21hcF94ZmVyX2RvbmUoaG9zdCwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCittbWNfb21hcF9jbWRfZG9uZShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCit7CisJaG9zdC0+Y21kID0gTlVMTDsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CisJCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKKwkJCS8qIHJlc3BvbnNlIHR5cGUgMiAqLworCQkJY21kLT5yZXNwWzNdID0KKwkJCQlPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDApIHwKKwkJCQkoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1AxKSA8PCAxNik7CisJCQljbWQtPnJlc3BbMl0gPQorCQkJCU9NQVBfTU1DX1JFQUQoaG9zdC0+YmFzZSwgUlNQMikgfAorCQkJCShPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDMpIDw8IDE2KTsKKwkJCWNtZC0+cmVzcFsxXSA9CisJCQkJT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1A0KSB8CisJCQkJKE9NQVBfTU1DX1JFQUQoaG9zdC0+YmFzZSwgUlNQNSkgPDwgMTYpOworCQkJY21kLT5yZXNwWzBdID0KKwkJCQlPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDYpIHwKKwkJCQkoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1A3KSA8PCAxNik7CisJCX0gZWxzZSB7CisJCQkvKiByZXNwb25zZSB0eXBlcyAxLCAxYiwgMywgNCwgNSwgNiAqLworCQkJY21kLT5yZXNwWzBdID0KKwkJCQlPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDYpIHwKKwkJCQkoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1A3KSA8PCAxNik7CisJCX0KKwl9CisKKwlpZiAoaG9zdC0+ZGF0YSA9PSBOVUxMIHx8IGNtZC0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKSB7CisJCWhvc3QtPm1ycSA9IE5VTEw7CisJCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgY21kLT5tcnEpOworCX0KK30KKworLyogUElPIG9ubHkgKi8KK3N0YXRpYyB2b2lkCittbWNfb21hcF9zZ190b19idWYoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCXNnID0gaG9zdC0+ZGF0YS0+c2cgKyBob3N0LT5zZ19pZHg7CisJaG9zdC0+YnVmZmVyX2J5dGVzX2xlZnQgPSBzZy0+bGVuZ3RoOworCWhvc3QtPmJ1ZmZlciA9IHBhZ2VfYWRkcmVzcyhzZy0+cGFnZSkgKyBzZy0+b2Zmc2V0OworCWlmIChob3N0LT5idWZmZXJfYnl0ZXNfbGVmdCA+IGhvc3QtPnRvdGFsX2J5dGVzX2xlZnQpCisJCWhvc3QtPmJ1ZmZlcl9ieXRlc19sZWZ0ID0gaG9zdC0+dG90YWxfYnl0ZXNfbGVmdDsKK30KKworLyogUElPIG9ubHkgKi8KK3N0YXRpYyB2b2lkCittbWNfb21hcF94ZmVyX2RhdGEoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIGludCB3cml0ZSkKK3sKKwlpbnQgbjsKKwl2b2lkIF9faW9tZW0gKnJlZzsKKwl1MTYgKnA7CisKKwlpZiAoaG9zdC0+YnVmZmVyX2J5dGVzX2xlZnQgPT0gMCkgeworCQlob3N0LT5zZ19pZHgrKzsKKwkJQlVHX09OKGhvc3QtPnNnX2lkeCA9PSBob3N0LT5zZ19sZW4pOworCQltbWNfb21hcF9zZ190b19idWYoaG9zdCk7CisJfQorCW4gPSA2NDsKKwlpZiAobiA+IGhvc3QtPmJ1ZmZlcl9ieXRlc19sZWZ0KQorCQluID0gaG9zdC0+YnVmZmVyX2J5dGVzX2xlZnQ7CisJaG9zdC0+YnVmZmVyX2J5dGVzX2xlZnQgLT0gbjsKKwlob3N0LT50b3RhbF9ieXRlc19sZWZ0IC09IG47CisJaG9zdC0+ZGF0YS0+Ynl0ZXNfeGZlcmVkICs9IG47CisKKwlpZiAod3JpdGUpIHsKKwkJX19yYXdfd3JpdGVzdyhob3N0LT5iYXNlICsgT01BUF9NTUNfUkVHX0RBVEEsIGhvc3QtPmJ1ZmZlciwgbik7CisJfSBlbHNlIHsKKwkJX19yYXdfcmVhZHN3KGhvc3QtPmJhc2UgKyBPTUFQX01NQ19SRUdfREFUQSwgaG9zdC0+YnVmZmVyLCBuKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNfb21hcF9yZXBvcnRfaXJxKHUxNiBzdGF0dXMpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKm1tY19vbWFwX3N0YXR1c19iaXRzW10gPSB7CisJCSJFT0MiLCAiQ0QiLCAiQ0IiLCAiQlJTIiwgIkVPRkIiLCAiRFRPIiwgIkRDUkMiLCAiQ1RPIiwKKwkJIkNDUkMiLCAiQ1JXIiwgIkFGIiwgIkFFIiwgIk9DUkIiLCAiQ0lSUSIsICJDRVJSIgorCX07CisJaW50IGksIGMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW1jX29tYXBfc3RhdHVzX2JpdHMpOyBpKyspCisJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgeworCQkJaWYgKGMpCisJCQkJcHJpbnRrKCIgIik7CisJCQlwcmludGsoIiVzIiwgbW1jX29tYXBfc3RhdHVzX2JpdHNbaV0pOworCQkJYysrOworCQl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtbWNfb21hcF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqIGhvc3QgPSAoc3RydWN0IG1tY19vbWFwX2hvc3QgKilkZXZfaWQ7CisJdTE2IHN0YXR1czsKKwlpbnQgZW5kX2NvbW1hbmQ7CisJaW50IGVuZF90cmFuc2ZlcjsKKwlpbnQgdHJhbnNmZXJfZXJyb3I7CisKKwlpZiAoaG9zdC0+Y21kID09IE5VTEwgJiYgaG9zdC0+ZGF0YSA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IE9NQVBfTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1RBVCk7CisJCWRldl9pbmZvKG1tY19kZXYoaG9zdC0+bW1jKSwic3B1cmlvdXMgaXJxIDB4JTA0eFxuIiwgc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBTVEFULCBzdGF0dXMpOworCQkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIDApOworCQl9CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwllbmRfY29tbWFuZCA9IDA7CisJZW5kX3RyYW5zZmVyID0gMDsKKwl0cmFuc2Zlcl9lcnJvciA9IDA7CisKKwl3aGlsZSAoKHN0YXR1cyA9IE9NQVBfTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1RBVCkpICE9IDApIHsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwgc3RhdHVzKTsKKyNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTU1DIElSUSAlMDR4IChDTUQgJWQpOiAiLAorCQkJc3RhdHVzLCBob3N0LT5jbWQgIT0gTlVMTCA/IGhvc3QtPmNtZC0+b3Bjb2RlIDogLTEpOworCQltbWNfb21hcF9yZXBvcnRfaXJxKHN0YXR1cyk7CisJCXByaW50aygiXG4iKTsKKyNlbmRpZgorCQlpZiAoaG9zdC0+dG90YWxfYnl0ZXNfbGVmdCkgeworCQkJaWYgKChzdGF0dXMgJiBPTUFQX01NQ19TVEFUX0FfRlVMTCkgfHwKKwkJCSAgICAoc3RhdHVzICYgT01BUF9NTUNfU1RBVF9FTkRfT0ZfREFUQSkpCisJCQkJbW1jX29tYXBfeGZlcl9kYXRhKGhvc3QsIDApOworCQkJaWYgKHN0YXR1cyAmIE9NQVBfTU1DX1NUQVRfQV9FTVBUWSkKKwkJCQltbWNfb21hcF94ZmVyX2RhdGEoaG9zdCwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzICYgT01BUF9NTUNfU1RBVF9FTkRfT0ZfREFUQSkgeworCQkJZW5kX3RyYW5zZmVyID0gMTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBPTUFQX01NQ19TVEFUX0RBVEFfVE9VVCkgeworCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJkYXRhIHRpbWVvdXRcbiIpOworCQkJaWYgKGhvc3QtPmRhdGEpIHsKKwkJCQlob3N0LT5kYXRhLT5lcnJvciB8PSBNTUNfRVJSX1RJTUVPVVQ7CisJCQkJdHJhbnNmZXJfZXJyb3IgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKHN0YXR1cyAmIE9NQVBfTU1DX1NUQVRfREFUQV9DUkMpIHsKKwkJCWlmIChob3N0LT5kYXRhKSB7CisJCQkJaG9zdC0+ZGF0YS0+ZXJyb3IgfD0gTU1DX0VSUl9CQURDUkM7CisJCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkJCSAiZGF0YSBDUkMgZXJyb3IsIGJ5dGVzIGxlZnQgJWRcbiIsCisJCQkJCWhvc3QtPnRvdGFsX2J5dGVzX2xlZnQpOworCQkJCXRyYW5zZmVyX2Vycm9yID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJkYXRhIENSQyBlcnJvclxuIik7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHVzICYgT01BUF9NTUNfU1RBVF9DTURfVE9VVCkgeworCQkJLyogVGltZW91dHMgYXJlIHJvdXRpbmUgd2l0aCBzb21lIGNvbW1hbmRzICovCisJCQlpZiAoaG9zdC0+Y21kKSB7CisJCQkJaWYgKGhvc3QtPmNtZC0+b3Bjb2RlICE9IE1NQ19BTExfU0VORF9DSUQgJiYKKwkJCQkJCWhvc3QtPmNtZC0+b3Bjb2RlICE9CisJCQkJCQlNTUNfU0VORF9PUF9DT05EICYmCisJCQkJCQlob3N0LT5jbWQtPm9wY29kZSAhPQorCQkJCQkJTU1DX0FQUF9DTUQgJiYKKwkJCQkJCSFtbWNfb21hcF9jb3Zlcl9pc19vcGVuKGhvc3QpKQorCQkJCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkJCSJjb21tYW5kIHRpbWVvdXQsIENNRCAlZFxuIiwKKwkJCQkJCWhvc3QtPmNtZC0+b3Bjb2RlKTsKKwkJCQlob3N0LT5jbWQtPmVycm9yID0gTU1DX0VSUl9USU1FT1VUOworCQkJCWVuZF9jb21tYW5kID0gMTsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgJiBPTUFQX01NQ19TVEFUX0NNRF9DUkMpIHsKKwkJCWlmIChob3N0LT5jbWQpIHsKKwkJCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkJImNvbW1hbmQgQ1JDIGVycm9yIChDTUQlZCwgYXJnIDB4JTA4eClcbiIsCisJCQkJCWhvc3QtPmNtZC0+b3Bjb2RlLCBob3N0LT5jbWQtPmFyZyk7CisJCQkJaG9zdC0+Y21kLT5lcnJvciA9IE1NQ19FUlJfQkFEQ1JDOworCQkJCWVuZF9jb21tYW5kID0gMTsKKwkJCX0gZWxzZQorCQkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAorCQkJCQkiY29tbWFuZCBDUkMgZXJyb3Igd2l0aG91dCBjbWQ/XG4iKTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBPTUFQX01NQ19TVEFUX0NBUkRfRVJSKSB7CisJCQlpZiAoaG9zdC0+Y21kICYmIGhvc3QtPmNtZC0+b3Bjb2RlID09IE1NQ19TVE9QX1RSQU5TTUlTU0lPTikgeworCQkJCXUzMiByZXNwb25zZSA9IE9NQVBfTU1DX1JFQUQoaG9zdC0+YmFzZSwgUlNQNikKKwkJCQkJfCAoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1A3KSA8PCAxNik7CisJCQkJLyogU1RPUCBzb21ldGltZXMgc2V0cyBtdXN0LWlnbm9yZSBiaXRzICovCisJCQkJaWYgKCEocmVzcG9uc2UgJiAoUjFfQ0NfRVJST1IKKwkJCQkJCQkJfCBSMV9JTExFR0FMX0NPTU1BTkQKKwkJCQkJCQkJfCBSMV9DT01fQ1JDX0VSUk9SKSkpIHsKKwkJCQkJZW5kX2NvbW1hbmQgPSAxOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiY2FyZCBzdGF0dXMgZXJyb3IgKENNRCVkKVxuIiwKKwkJCQlob3N0LT5jbWQtPm9wY29kZSk7CisJCQlpZiAoaG9zdC0+Y21kKSB7CisJCQkJaG9zdC0+Y21kLT5lcnJvciA9IE1NQ19FUlJfRkFJTEVEOworCQkJCWVuZF9jb21tYW5kID0gMTsKKwkJCX0KKwkJCWlmIChob3N0LT5kYXRhKSB7CisJCQkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSBNTUNfRVJSX0ZBSUxFRDsKKwkJCQl0cmFuc2Zlcl9lcnJvciA9IDE7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBOT1RFOiBPbiAxNjEwIHRoZSBFTkRfT0ZfQ01EIG1heSBjb21lIHRvbyBlYXJseSB3aGVuCisJCSAqIHN0YXJ0aW5nIGEgd3JpdGUgCisJCSAqLworCQlpZiAoKHN0YXR1cyAmIE9NQVBfTU1DX1NUQVRfRU5EX09GX0NNRCkgJiYKKwkJICAgICghKHN0YXR1cyAmIE9NQVBfTU1DX1NUQVRfQV9FTVBUWSkpKSB7CisJCQllbmRfY29tbWFuZCA9IDE7CisJCX0KKwl9CisKKwlpZiAoZW5kX2NvbW1hbmQpIHsKKwkJbW1jX29tYXBfY21kX2RvbmUoaG9zdCwgaG9zdC0+Y21kKTsKKwl9CisJaWYgKHRyYW5zZmVyX2Vycm9yKQorCQltbWNfb21hcF94ZmVyX2RvbmUoaG9zdCwgaG9zdC0+ZGF0YSk7CisJZWxzZSBpZiAoZW5kX3RyYW5zZmVyKQorCQltbWNfb21hcF9lbmRfb2ZfZGF0YShob3N0LCBob3N0LT5kYXRhKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1tY19vbWFwX3N3aXRjaF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqKSBkZXZfaWQ7CisKKwlzY2hlZHVsZV93b3JrKCZob3N0LT5zd2l0Y2hfd29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19vbWFwX3N3aXRjaF90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqKSBhcmc7CisKKwlzY2hlZHVsZV93b3JrKCZob3N0LT5zd2l0Y2hfd29yayk7Cit9CisKKy8qIEZJWE1FOiBIYW5kbGUgY2FyZCBpbnNlcnRpb24gYW5kIHJlbW92YWwgcHJvcGVybHkuIE1heWJlIHVzZSBhIG1hc2sKKyAqIGZvciBNTUMgc3RhdGU/ICovCitzdGF0aWMgdm9pZCBtbWNfb21hcF9zd2l0Y2hfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhLCB1OCBtbWNfbWFzaykKK3sKK30KKworc3RhdGljIHZvaWQgbW1jX29tYXBfc3dpdGNoX2hhbmRsZXIodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqKSBkYXRhOworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZDsKKwlzdGF0aWMgaW50IGNvbXBsYWluZWQgPSAwOworCWludCBjYXJkcyA9IDAsIGNvdmVyX29wZW47CisKKwlpZiAoaG9zdC0+c3dpdGNoX3BpbiA9PSAtMSkKKwkJcmV0dXJuOworCWNvdmVyX29wZW4gPSBtbWNfb21hcF9jb3Zlcl9pc19vcGVuKGhvc3QpOworCWlmIChjb3Zlcl9vcGVuICE9IGhvc3QtPnN3aXRjaF9sYXN0X3N0YXRlKSB7CisJCWtvYmplY3RfdWV2ZW50KCZob3N0LT5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFKTsKKwkJaG9zdC0+c3dpdGNoX2xhc3Rfc3RhdGUgPSBjb3Zlcl9vcGVuOworCX0KKwltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIDApOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FyZCwgJmhvc3QtPm1tYy0+Y2FyZHMsIG5vZGUpIHsKKwkJaWYgKG1tY19jYXJkX3ByZXNlbnQoY2FyZCkpCisJCQljYXJkcysrOworCX0KKwlpZiAobW1jX29tYXBfY292ZXJfaXNfb3Blbihob3N0KSkgeworCQlpZiAoIWNvbXBsYWluZWQpIHsKKwkJCWRldl9pbmZvKG1tY19kZXYoaG9zdC0+bW1jKSwgImNvdmVyIGlzIG9wZW4iKTsKKwkJCWNvbXBsYWluZWQgPSAxOworCQl9CisJCWlmIChtbWNfb21hcF9lbmFibGVfcG9sbCkKKwkJCW1vZF90aW1lcigmaG9zdC0+c3dpdGNoX3RpbWVyLCBqaWZmaWVzICsKKwkJCQltc2Vjc190b19qaWZmaWVzKE9NQVBfTU1DX1NXSVRDSF9QT0xMX0RFTEFZKSk7CisJfSBlbHNlIHsKKwkJY29tcGxhaW5lZCA9IDA7CisJfQorfQorCisvKiBQcmVwYXJlIHRvIHRyYW5zZmVyIHRoZSBuZXh0IHNlZ21lbnQgb2YgYSBzY2F0dGVybGlzdCAqLworc3RhdGljIHZvaWQKK21tY19vbWFwX3ByZXBhcmVfZG1hKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJaW50IGRtYV9jaCA9IGhvc3QtPmRtYV9jaDsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkcjsKKwl1MTYgYnVmLCBmcmFtZTsKKwl1MzIgY291bnQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9ICZkYXRhLT5zZ1tob3N0LT5zZ19pZHhdOworCWludCBzcmNfcG9ydCA9IDA7CisJaW50IGRzdF9wb3J0ID0gMDsKKwlpbnQgc3luY19kZXYgPSAwOworCisJZGF0YV9hZGRyID0gaW9fdjJwKCh1MzIpIGhvc3QtPmJhc2UpICsgT01BUF9NTUNfUkVHX0RBVEE7CisJZnJhbWUgPSAxIDw8IGRhdGEtPmJsa3N6X2JpdHM7CisJY291bnQgPSBzZ19kbWFfbGVuKHNnKTsKKworCWlmICgoZGF0YS0+YmxvY2tzID09IDEpICYmIChjb3VudCA+ICgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpKSkKKwkJY291bnQgPSBmcmFtZTsKKworCWhvc3QtPmRtYV9sZW4gPSBjb3VudDsKKworCS8qIEZJRk8gaXMgMTZ4MiBieXRlcyBvbiAxNXh4LCBhbmQgMzJ4MiBieXRlcyBvbiAxNnh4IGFuZCAyNHh4LgorCSAqIFVzZSAxNiBvciAzMiB3b3JkIGZyYW1lcyB3aGVuIHRoZSBibG9ja3NpemUgaXMgYXQgbGVhc3QgdGhhdCBsYXJnZS4KKwkgKiBCbG9ja3NpemUgaXMgdXN1YWxseSA1MTIgYnl0ZXM7IGJ1dCBub3QgZm9yIHNvbWUgU0QgcmVhZHMuCisJICovCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpICYmIGZyYW1lID4gMzIpCisJCWZyYW1lID0gMzI7CisJZWxzZSBpZiAoZnJhbWUgPiA2NCkKKwkJZnJhbWUgPSA2NDsKKwljb3VudCAvPSBmcmFtZTsKKwlmcmFtZSA+Pj0gMTsKKworCWlmICghKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpKSB7CisJCWJ1ZiA9IDB4ODAwZiB8ICgoZnJhbWUgLSAxKSA8PCA4KTsKKworCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJCXNyY19wb3J0ID0gT01BUF9ETUFfUE9SVF9USVBCOworCQkJZHN0X3BvcnQgPSBPTUFQX0RNQV9QT1JUX0VNSUZGOworCQl9CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCXN5bmNfZGV2ID0gT01BUDI0WFhfRE1BX01NQzFfUlg7CisKKwkJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoZG1hX2NoLCBzcmNfcG9ydCwKKwkJCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCisJCQkJCWRhdGFfYWRkciwgMCwgMCk7CisJCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhkbWFfY2gsIGRzdF9wb3J0LAorCQkJCQkgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJCSBzZ19kbWFfYWRkcmVzcyhzZyksIDAsIDApOworCQlvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soZG1hX2NoLCAxKTsKKwkJb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShkbWFfY2gsIE9NQVBfRE1BX0RBVEFfQlVSU1RfNCk7CisJfSBlbHNlIHsKKwkJYnVmID0gMHgwZjgwIHwgKChmcmFtZSAtIDEpIDw8IDApOworCisJCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQkJc3JjX3BvcnQgPSBPTUFQX0RNQV9QT1JUX0VNSUZGOworCQkJZHN0X3BvcnQgPSBPTUFQX0RNQV9QT1JUX1RJUEI7CisJCX0KKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQkJc3luY19kZXYgPSBPTUFQMjRYWF9ETUFfTU1DMV9UWDsKKworCQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoZG1hX2NoLCBkc3RfcG9ydCwKKwkJCQkJIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAorCQkJCQkgZGF0YV9hZGRyLCAwLCAwKTsKKwkJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoZG1hX2NoLCBzcmNfcG9ydCwKKwkJCQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJCXNnX2RtYV9hZGRyZXNzKHNnKSwgMCwgMCk7CisJCW9tYXBfc2V0X2RtYV9zcmNfZGF0YV9wYWNrKGRtYV9jaCwgMSk7CisJCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShkbWFfY2gsIE9NQVBfRE1BX0RBVEFfQlVSU1RfNCk7CisJfQorCisJLyogTWF4IGxpbWl0IGZvciBETUEgZnJhbWUgY291bnQgaXMgMHhmZmZmICovCisJaWYgKHVubGlrZWx5KGNvdW50ID4gMHhmZmZmKSkKKwkJQlVHKCk7CisKKwlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBCVUYsIGJ1Zik7CisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhkbWFfY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTYsCisJCQkJICAgICBmcmFtZSwgY291bnQsIE9NQVBfRE1BX1NZTkNfRlJBTUUsCisJCQkJICAgICBzeW5jX2RldiwgMCk7Cit9CisKKy8qIEEgc2NhdHRlcmxpc3Qgc2VnbWVudCBjb21wbGV0ZWQgKi8KK3N0YXRpYyB2b2lkIG1tY19vbWFwX2RtYV9jYihpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gKHN0cnVjdCBtbWNfb21hcF9ob3N0ICopIGRhdGE7CisJc3RydWN0IG1tY19kYXRhICptbWNkYXQgPSBob3N0LT5kYXRhOworCisJaWYgKHVubGlrZWx5KGhvc3QtPmRtYV9jaCA8IDApKSB7CisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiRE1BIGNhbGxiYWNrIHdoaWxlIERNQSBub3QKKwkJCQllbmFibGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBGSVhNRTogV2UgcmVhbGx5IHNob3VsZCBkbyBzb21ldGhpbmcgdG8gX2hhbmRsZV8gdGhlIGVycm9ycyAqLworCWlmIChjaF9zdGF0dXMgJiBPTUFQX0RNQV9UT1VUX0lSUSkgeworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwiRE1BIHRpbWVvdXRcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChjaF9zdGF0dXMgJiBPTUFQX0RNQV9EUk9QX0lSUSkgeworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkRNQSBzeW5jIGVycm9yXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIShjaF9zdGF0dXMgJiBPTUFQX0RNQV9CTE9DS19JUlEpKSB7CisJCXJldHVybjsKKwl9CisJbW1jZGF0LT5ieXRlc194ZmVyZWQgKz0gaG9zdC0+ZG1hX2xlbjsKKwlob3N0LT5zZ19pZHgrKzsKKwlpZiAoaG9zdC0+c2dfaWR4IDwgaG9zdC0+c2dfbGVuKSB7CisJCW1tY19vbWFwX3ByZXBhcmVfZG1hKGhvc3QsIGhvc3QtPmRhdGEpOworCQlvbWFwX3N0YXJ0X2RtYShob3N0LT5kbWFfY2gpOworCX0gZWxzZQorCQltbWNfb21hcF9kbWFfZG9uZShob3N0LCBob3N0LT5kYXRhKTsKK30KKworc3RhdGljIGludCBtbWNfb21hcF9nZXRfZG1hX2NoYW5uZWwoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwljb25zdCBjaGFyICpkZXZfbmFtZTsKKwlpbnQgc3luY19kZXYsIGRtYV9jaCwgaXNfcmVhZCwgcjsKKworCWlzX3JlYWQgPSAhKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpOworCWRlbF90aW1lcl9zeW5jKCZob3N0LT5kbWFfdGltZXIpOworCWlmIChob3N0LT5kbWFfY2ggPj0gMCkgeworCQlpZiAoaXNfcmVhZCA9PSBob3N0LT5kbWFfaXNfcmVhZCkKKwkJCXJldHVybiAwOworCQlvbWFwX2ZyZWVfZG1hKGhvc3QtPmRtYV9jaCk7CisJCWhvc3QtPmRtYV9jaCA9IC0xOworCX0KKworCWlmIChpc19yZWFkKSB7CisJCWlmIChob3N0LT5pZCA9PSAxKSB7CisJCQlzeW5jX2RldiA9IE9NQVBfRE1BX01NQ19SWDsKKwkJCWRldl9uYW1lID0gIk1NQzEgcmVhZCI7CisJCX0gZWxzZSB7CisJCQlzeW5jX2RldiA9IE9NQVBfRE1BX01NQzJfUlg7CisJCQlkZXZfbmFtZSA9ICJNTUMyIHJlYWQiOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGhvc3QtPmlkID09IDEpIHsKKwkJCXN5bmNfZGV2ID0gT01BUF9ETUFfTU1DX1RYOworCQkJZGV2X25hbWUgPSAiTU1DMSB3cml0ZSI7CisJCX0gZWxzZSB7CisJCQlzeW5jX2RldiA9IE9NQVBfRE1BX01NQzJfVFg7CisJCQlkZXZfbmFtZSA9ICJNTUMyIHdyaXRlIjsKKwkJfQorCX0KKwlyID0gb21hcF9yZXF1ZXN0X2RtYShzeW5jX2RldiwgZGV2X25hbWUsIG1tY19vbWFwX2RtYV9jYiwKKwkJCSAgICAgaG9zdCwgJmRtYV9jaCk7CisJaWYgKHIgIT0gMCkgeworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIm9tYXBfcmVxdWVzdF9kbWEoKSBmYWlsZWQgd2l0aCAlZFxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlob3N0LT5kbWFfY2ggPSBkbWFfY2g7CisJaG9zdC0+ZG1hX2lzX3JlYWQgPSBpc19yZWFkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY21kX3RpbWVvdXQoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQoreworCXUxNiByZWc7CisKKwlyZWcgPSBPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFNESU8pOworCXJlZyAmPSB+KDEgPDwgNSk7CisJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgU0RJTywgcmVnKTsKKwkvKiBTZXQgbWF4aW11bSB0aW1lb3V0ICovCisJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ1RPLCAweGZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9kYXRhX3RpbWVvdXQoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQoreworCWludCB0aW1lb3V0OworCXUxNiByZWc7CisKKwkvKiBDb252ZXJ0IG5zIHRvIGNsb2NrIGN5Y2xlcyBieSBhc3N1bWluZyAyME1IeiBmcmVxdWVuY3kKKwkgKiAxIGN5Y2xlIGF0IDIwTUh6ID0gNTAwIG5zCisJICovCisJdGltZW91dCA9IHJlcS0+ZGF0YS0+dGltZW91dF9jbGtzICsgcmVxLT5kYXRhLT50aW1lb3V0X25zIC8gNTAwOworCisJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byB1c2UgdGltZW91dCBtdWx0aXBsaWVyIHJlZ2lzdGVyICovCisJcmVnID0gT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBTRElPKTsKKwlpZiAodGltZW91dCA+IDB4ZmZmZikgeworCQlyZWcgfD0gKDEgPDwgNSk7CisJCXRpbWVvdXQgLz0gMTAyNDsKKwl9IGVsc2UKKwkJcmVnICY9IH4oMSA8PCA1KTsKKwlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBTRElPLCByZWcpOworCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIERUTywgdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkCittbWNfb21hcF9wcmVwYXJlX2RhdGEoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IHJlcS0+ZGF0YTsKKwlpbnQgaSwgdXNlX2RtYSwgYmxvY2tfc2l6ZTsKKwl1bnNpZ25lZCBzZ19sZW47CisKKwlob3N0LT5kYXRhID0gZGF0YTsKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEJMRU4sIDApOworCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBOQkxLLCAwKTsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQlVGLCAwKTsKKwkJaG9zdC0+ZG1hX2luX3VzZSA9IDA7CisJCXNldF9jbWRfdGltZW91dChob3N0LCByZXEpOworCQlyZXR1cm47CisJfQorCisKKwlibG9ja19zaXplID0gMSA8PCBkYXRhLT5ibGtzel9iaXRzOworCisJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgTkJMSywgZGF0YS0+YmxvY2tzIC0gMSk7CisJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQkxFTiwgYmxvY2tfc2l6ZSAtIDEpOworCXNldF9kYXRhX3RpbWVvdXQoaG9zdCwgcmVxKTsKKworCS8qIGNvcGUgd2l0aCBjYWxsaW5nIGxheWVyIGNvbmZ1c2lvbjsgaXQgaXNzdWVzICJzaW5nbGUKKwkgKiBibG9jayIgd3JpdGVzIHVzaW5nIG11bHRpLWJsb2NrIHNjYXR0ZXJsaXN0cy4KKwkgKi8KKwlzZ19sZW4gPSAoZGF0YS0+YmxvY2tzID09IDEpID8gMSA6IGRhdGEtPnNnX2xlbjsKKworCS8qIE9ubHkgZG8gRE1BIGZvciBlbnRpcmUgYmxvY2tzICovCisJdXNlX2RtYSA9IGhvc3QtPnVzZV9kbWE7CisJaWYgKHVzZV9kbWEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrKSB7CisJCQlpZiAoKGRhdGEtPnNnW2ldLmxlbmd0aCAlIGJsb2NrX3NpemUpICE9IDApIHsKKwkJCQl1c2VfZG1hID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWhvc3QtPnNnX2lkeCA9IDA7CisJaWYgKHVzZV9kbWEpIHsKKwkJaWYgKG1tY19vbWFwX2dldF9kbWFfY2hhbm5lbChob3N0LCBkYXRhKSA9PSAwKSB7CisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGF0YV9kaXI7CisKKwkJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQkJCWRtYV9kYXRhX2RpciA9IERNQV9UT19ERVZJQ0U7CisJCQllbHNlCisJCQkJZG1hX2RhdGFfZGlyID0gRE1BX0ZST01fREVWSUNFOworCisJCQlob3N0LT5zZ19sZW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCisJCQkJCQlzZ19sZW4sIGRtYV9kYXRhX2Rpcik7CisJCQlob3N0LT50b3RhbF9ieXRlc19sZWZ0ID0gMDsKKwkJCW1tY19vbWFwX3ByZXBhcmVfZG1hKGhvc3QsIHJlcS0+ZGF0YSk7CisJCQlob3N0LT5icnNfcmVjZWl2ZWQgPSAwOworCQkJaG9zdC0+ZG1hX2RvbmUgPSAwOworCQkJaG9zdC0+ZG1hX2luX3VzZSA9IDE7CisJCX0gZWxzZQorCQkJdXNlX2RtYSA9IDA7CisJfQorCisJLyogUmV2ZXJ0IHRvIFBJTz8gKi8KKwlpZiAoIXVzZV9kbWEpIHsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQlVGLCAweDFmMWYpOworCQlob3N0LT50b3RhbF9ieXRlc19sZWZ0ID0gZGF0YS0+YmxvY2tzICogYmxvY2tfc2l6ZTsKKwkJaG9zdC0+c2dfbGVuID0gc2dfbGVuOworCQltbWNfb21hcF9zZ190b19idWYoaG9zdCk7CisJCWhvc3QtPmRtYV9pbl91c2UgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgbW1jX29tYXBfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJV0FSTl9PTihob3N0LT5tcnEgIT0gTlVMTCk7CisKKwlob3N0LT5tcnEgPSByZXE7CisKKwkvKiBvbmx5IHRvdWNoIGZpZm8gQUZURVIgdGhlIGNvbnRyb2xsZXIgcmVhZGllcyBpdCAqLworCW1tY19vbWFwX3ByZXBhcmVfZGF0YShob3N0LCByZXEpOworCW1tY19vbWFwX3N0YXJ0X2NvbW1hbmQoaG9zdCwgcmVxLT5jbWQpOworCWlmIChob3N0LT5kbWFfaW5fdXNlKQorCQlvbWFwX3N0YXJ0X2RtYShob3N0LT5kbWFfY2gpOworfQorCitzdGF0aWMgdm9pZCBpbm5vdmF0b3JfZnBnYV9zb2NrZXRfcG93ZXIoaW50IG9uKQoreworI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCisKKwlpZiAob24pIHsKKwkJZnBnYV93cml0ZShmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUikgfCAoMSA8PCAzKSwKKwkJICAgICBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwl9IGVsc2UgeworCQlmcGdhX3dyaXRlKGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKSAmIH4oMSA8PCAzKSwKKwkJICAgICBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIFR1cm4gdGhlIHNvY2tldCBwb3dlciBvbi9vZmYuIElubm92YXRvciB1c2VzIEZQR0EsIG1vc3QgYm9hcmRzCisgKiBwcm9iYWJseSB1c2UgR1BJTy4KKyAqLworc3RhdGljIHZvaWQgbW1jX29tYXBfcG93ZXIoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIGludCBvbikKK3sKKwlpZiAob24pIHsKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkKKwkJCWlubm92YXRvcl9mcGdhX3NvY2tldF9wb3dlcigxKTsKKwkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX2gyKCkpCisJCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzMsIEhJR0gpOworCQllbHNlIGlmIChtYWNoaW5lX2lzX29tYXBfaDMoKSkKKwkJCS8qIEdQSU8gNCBvZiBUUFM2NTAxMCBzZW5kcyBTRF9FTiBzaWduYWwgKi8KKwkJCXRwczY1MDEwX3NldF9ncGlvX291dF92YWx1ZShHUElPNCwgSElHSCk7CisJCWVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQl1MTYgcmVnID0gT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBDT04pOworCQkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCByZWcgfCAoMSA8PCAxMSkpOworCQl9IGVsc2UKKwkJCWlmIChob3N0LT5wb3dlcl9waW4gPj0gMCkKKwkJCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoaG9zdC0+cG93ZXJfcGluLCAxKTsKKwl9IGVsc2UgeworCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKQorCQkJaW5ub3ZhdG9yX2ZwZ2Ffc29ja2V0X3Bvd2VyKDApOworCQllbHNlIGlmIChtYWNoaW5lX2lzX29tYXBfaDIoKSkKKwkJCXRwczY1MDEwX3NldF9ncGlvX291dF92YWx1ZShHUElPMywgTE9XKTsKKwkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX2gzKCkpCisJCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzQsIExPVyk7CisJCWVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQl1MTYgcmVnID0gT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBDT04pOworCQkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCByZWcgJiB+KDEgPDwgMTEpKTsKKwkJfSBlbHNlCisJCQlpZiAoaG9zdC0+cG93ZXJfcGluID49IDApCisJCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGhvc3QtPnBvd2VyX3BpbiwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtbWNfb21hcF9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlpbnQgZHNvcjsKKwlpbnQgcmVhbGNsb2NrLCBpOworCisJcmVhbGNsb2NrID0gaW9zLT5jbG9jazsKKworCWlmIChpb3MtPmNsb2NrID09IDApCisJCWRzb3IgPSAwOworCWVsc2UgeworCQlpbnQgZnVuY19jbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShob3N0LT5mY2xrKTsKKworCQlkc29yID0gZnVuY19jbGtfcmF0ZSAvIHJlYWxjbG9jazsKKwkJaWYgKGRzb3IgPCAxKQorCQkJZHNvciA9IDE7CisKKwkJaWYgKGZ1bmNfY2xrX3JhdGUgLyBkc29yID4gcmVhbGNsb2NrKQorCQkJZHNvcisrOworCisJCWlmIChkc29yID4gMjUwKQorCQkJZHNvciA9IDI1MDsKKwkJZHNvcisrOworCisJCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCisJCQlkc29yIHw9IDEgPDwgMTU7CisJfQorCisJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKKwljYXNlIE1NQ19QT1dFUl9PRkY6CisJCW1tY19vbWFwX3Bvd2VyKGhvc3QsIDApOworCQlicmVhazsKKwljYXNlIE1NQ19QT1dFUl9VUDoKKwljYXNlIE1NQ19QT1dFUl9PTjoKKwkJbW1jX29tYXBfcG93ZXIoaG9zdCwgMSk7CisJCWRzb3IgfD0gMTw8MTE7CisJCWJyZWFrOworCX0KKworCWhvc3QtPmJ1c19tb2RlID0gaW9zLT5idXNfbW9kZTsKKwlob3N0LT5od19idXNfbW9kZSA9IGhvc3QtPmJ1c19tb2RlOworCisJY2xrX2VuYWJsZShob3N0LT5mY2xrKTsKKworCS8qIE9uIGluc2FuZWx5IGhpZ2ggYXJtX3BlciBmcmVxdWVuY2llcyBzb21ldGhpbmcgc29tZXRpbWVzCisJICogZ29lcyBzb21laG93IG91dCBvZiBzeW5jLCBhbmQgdGhlIFBPVyBiaXQgaXMgbm90IGJlaW5nIHNldCwKKwkgKiB3aGljaCByZXN1bHRzIGluIHRoZSB3aGlsZSBsb29wIGJlbG93IGdldHRpbmcgc3R1Y2suCisJICogV3JpdGluZyB0byB0aGUgQ09OIHJlZ2lzdGVyIHR3aWNlIHNlZW1zIHRvIGRvIHRoZSB0cmljay4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGRzb3IpOworCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKSB7CisJCS8qIFNlbmQgY2xvY2sgY3ljbGVzLCBwb2xsIGNvbXBsZXRpb24gKi8KKwkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIDApOworCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBTVEFULCAweGZmZmYpOworCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBDTUQsIDE8PDcpOworCQl3aGlsZSAoMCA9PSAoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBTVEFUKSAmIDEpKTsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwgMSk7CisJfQorCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworfQorCitzdGF0aWMgaW50IG1tY19vbWFwX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlyZXR1cm4gaG9zdC0+d3BfcGluICYmIG9tYXBfZ2V0X2dwaW9fZGF0YWluKGhvc3QtPndwX3Bpbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19vbWFwX29wcyA9IHsKKwkucmVxdWVzdAk9IG1tY19vbWFwX3JlcXVlc3QsCisJLnNldF9pb3MJPSBtbWNfb21hcF9zZXRfaW9zLAorCS5nZXRfcm8JCT0gbW1jX29tYXBfZ2V0X3JvLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbW1jX29tYXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfY29uZiAqbWluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJCisJaWYgKHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCkgfHwKKwkJCXBsYXRmb3JtX2dldF9pcnEocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1tY19vbWFwX3Byb2JlOiBpbnZhbGlkIHJlc291cmNlIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwkJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCisJCQkJcGRldi0+bmFtZSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtbWNfb21hcF9ob3N0KSwgJnBkZXYtPmRldik7CisJaWYgKCFtbWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaG9zdC0+bW1jID0gbW1jOworCisJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmRtYV9sb2NrKTsKKwlpbml0X3RpbWVyKCZob3N0LT5kbWFfdGltZXIpOworCWhvc3QtPmRtYV90aW1lci5mdW5jdGlvbiA9IG1tY19vbWFwX2RtYV90aW1lcjsKKwlob3N0LT5kbWFfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBob3N0OworCisJaG9zdC0+aWQgPSBwZGV2LT5pZDsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlob3N0LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jX2ljayIpOworCQlpZiAoSVNfRVJSKGhvc3QtPmljbGspKQorCQkJZ290byBvdXQ7CisJCWNsa19lbmFibGUoaG9zdC0+aWNsayk7CisJfQorCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJaG9zdC0+ZmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY19jayIpOworCWVsc2UKKwkJaG9zdC0+ZmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY19mY2siKTsKKworCWlmIChJU19FUlIoaG9zdC0+ZmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihob3N0LT5mY2xrKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUkVWSVNJVDoKKwkgKiBBbHNvLCB1c2UgbWluZm8tPmNvdmVyIHRvIGRlY2lkZSBob3cgdG8gbWFuYWdlCisJICogdGhlIGNhcmQgZGV0ZWN0IHNlbnNpbmcuCisJICovCisJaG9zdC0+cG93ZXJfcGluID0gbWluZm8tPnBvd2VyX3BpbjsKKwlob3N0LT5zd2l0Y2hfcGluID0gbWluZm8tPnN3aXRjaF9waW47CisJaG9zdC0+d3BfcGluID0gbWluZm8tPndwX3BpbjsKKwlob3N0LT51c2VfZG1hID0gMTsKKwlob3N0LT5kbWFfY2ggPSAtMTsKKworCWhvc3QtPmlycSA9IHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0OworCWhvc3QtPmJhc2UgPSBpb3JlbWFwKHBkZXYtPnJlcy5zdGFydCwgU1pfNEspOworCWlmICghaG9zdC0+YmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkgaWYgKG1pbmZvLT53aXJlNCkKKwkJIG1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CisKKwltbWMtPm9wcyA9ICZtbWNfb21hcF9vcHM7CisJbW1jLT5mX21pbiA9IDQwMDAwMDsKKwltbWMtPmZfbWF4ID0gMjQwMDAwMDA7CisJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQ7CisKKwkvKiBVc2Ugc2NhdHRlcmxpc3QgRE1BIHRvIHJlZHVjZSBwZXItdHJhbnNmZXIgY29zdHMuCisJICogTk9URSBtYXhfc2VnX3NpemUgYXNzdW1wdGlvbiB0aGF0IHNtYWxsIGJsb2NrcyBhcmVuJ3QKKwkgKiBub3JtYWxseSB1c2VkIChleGNlcHQgZS5nLiBmb3IgcmVhZGluZyBTRCByZWdpc3RlcnMpLgorCSAqLworCW1tYy0+bWF4X3BoeXNfc2VncyA9IDMyOworCW1tYy0+bWF4X2h3X3NlZ3MgPSAzMjsKKwltbWMtPm1heF9zZWN0b3JzID0gMjU2OyAvKiBOQkxLIG1heCAxMS1iaXRzLCBPTUFQIGFsc28gbGltaXRlZCBieSBETUEgKi8KKwltbWMtPm1heF9zZWdfc2l6ZSA9IG1tYy0+bWF4X3NlY3RvcnMgKiA1MTI7CisKKwlpZiAoaG9zdC0+cG93ZXJfcGluID49IDApIHsKKwkJaWYgKChyZXQgPSBvbWFwX3JlcXVlc3RfZ3Bpbyhob3N0LT5wb3dlcl9waW4pKSAhPSAwKSB7CisJCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIlVuYWJsZSB0byBnZXQgR1BJTworCQkJCQlwaW4gZm9yIE1NQyBwb3dlclxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihob3N0LT5wb3dlcl9waW4sIDApOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgbW1jX29tYXBfaXJxLCAwLCBEUklWRVJfTkFNRSwgaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlob3N0LT5kZXYgPSAmcGRldi0+ZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCisJbW1jX2FkZF9ob3N0KG1tYyk7CisKKwlpZiAoaG9zdC0+c3dpdGNoX3BpbiA+PSAwKSB7CisJCUlOSVRfV09SSygmaG9zdC0+c3dpdGNoX3dvcmssIG1tY19vbWFwX3N3aXRjaF9oYW5kbGVyLCBob3N0KTsKKwkJaW5pdF90aW1lcigmaG9zdC0+c3dpdGNoX3RpbWVyKTsKKwkJaG9zdC0+c3dpdGNoX3RpbWVyLmZ1bmN0aW9uID0gbW1jX29tYXBfc3dpdGNoX3RpbWVyOworCQlob3N0LT5zd2l0Y2hfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBob3N0OworCQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oaG9zdC0+c3dpdGNoX3BpbikgIT0gMCkgeworCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiVW5hYmxlIHRvIGdldCBHUElPIHBpbiBmb3IgTU1DIGNvdmVyIHN3aXRjaFxuIik7CisJCQlob3N0LT5zd2l0Y2hfcGluID0gLTE7CisJCQlnb3RvIG5vX3N3aXRjaDsKKwkJfQorCisJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGhvc3QtPnN3aXRjaF9waW4sIDEpOworCQlyZXQgPSByZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKGhvc3QtPnN3aXRjaF9waW4pLAorCQkJCSAgbW1jX29tYXBfc3dpdGNoX2lycSwgU0FfVFJJR0dFUl9SSVNJTkcsIERSSVZFUl9OQU1FLCBob3N0KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiVW5hYmxlIHRvIGdldCBJUlEgZm9yIE1NQyBjb3ZlciBzd2l0Y2hcbiIpOworCQkJb21hcF9mcmVlX2dwaW8oaG9zdC0+c3dpdGNoX3Bpbik7CisJCQlob3N0LT5zd2l0Y2hfcGluID0gLTE7CisJCQlnb3RvIG5vX3N3aXRjaDsKKwkJfQorCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvdmVyX3N3aXRjaCk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVfcG9sbCk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOworCQl9CisJCWlmIChyZXQpIHsKKwkJCWRldl93YW4obW1jX2Rldihob3N0LT5tbWMpLCAiVW5hYmxlIHRvIGNyZWF0ZSBzeXNmcyBhdHRyaWJ1dGVzXG4iKTsKKwkJCWZyZWVfaXJxKE9NQVBfR1BJT19JUlEoaG9zdC0+c3dpdGNoX3BpbiksIGhvc3QpOworCQkJb21hcF9mcmVlX2dwaW8oaG9zdC0+c3dpdGNoX3Bpbik7CisJCQlob3N0LT5zd2l0Y2hfcGluID0gLTE7CisJCQlnb3RvIG5vX3N3aXRjaDsKKwkJfQorCQlpZiAobW1jX29tYXBfZW5hYmxlX3BvbGwgJiYgbW1jX29tYXBfY292ZXJfaXNfb3Blbihob3N0KSkKKwkJCXNjaGVkdWxlX3dvcmsoJmhvc3QtPnN3aXRjaF93b3JrKTsKKwl9CisKK25vX3N3aXRjaDoKKwlyZXR1cm4gMDsKKworb3V0OgorCS8qIEZJWE1FOiBGcmVlIG90aGVyIHJlc291cmNlcyB0b28uICovCisJaWYgKGhvc3QpIHsKKwkJaWYgKGhvc3QtPmljbGsgJiYgIUlTX0VSUihob3N0LT5pY2xrKSkKKwkJCWNsa19wdXQoaG9zdC0+aWNsayk7CisJCWlmIChob3N0LT5mY2xrICYmICFJU19FUlIoaG9zdC0+ZmNsaykpCisJCQljbGtfcHV0KGhvc3QtPmZjbGspOworCQltbWNfZnJlZV9ob3N0KGhvc3QtPm1tYyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbW1jX29tYXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWYgKGhvc3QpIHsKKwkJbW1jX3JlbW92ZV9ob3N0KGhvc3QtPm1tYyk7CisJCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CisKKwkJaWYgKGhvc3QtPnBvd2VyX3BpbiA+PSAwKQorCQkJb21hcF9mcmVlX2dwaW8oaG9zdC0+cG93ZXJfcGluKTsKKwkJaWYgKGhvc3QtPnN3aXRjaF9waW4gPj0gMCkgeworCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVfcG9sbCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvdmVyX3N3aXRjaCk7CisJCQlmcmVlX2lycShPTUFQX0dQSU9fSVJRKGhvc3QtPnN3aXRjaF9waW4pLCBob3N0KTsKKwkJCW9tYXBfZnJlZV9ncGlvKGhvc3QtPnN3aXRjaF9waW4pOworCQkJaG9zdC0+c3dpdGNoX3BpbiA9IC0xOworCQkJZGVsX3RpbWVyX3N5bmMoJmhvc3QtPnN3aXRjaF90aW1lcik7CisJCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQl9CisJCWlmIChob3N0LT5pY2xrICYmICFJU19FUlIoaG9zdC0+aWNsaykpCisJCQljbGtfcHV0KGhvc3QtPmljbGspOworCQlpZiAoaG9zdC0+ZmNsayAmJiAhSVNfRVJSKGhvc3QtPmZjbGspKQorCQkJY2xrX3B1dChob3N0LT5mY2xrKTsKKwkJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOworCX0KKworCXJlbGVhc2VfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtbWNfb21hcF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaG9zdCAmJiBob3N0LT5zdXNwZW5kZWQpCisJCXJldHVybiAwOworCisJaWYgKGhvc3QpIHsKKwkJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChob3N0LT5tbWMsIG1lc2cpOworCQlpZiAocmV0ID09IDApCisJCQlob3N0LT5zdXNwZW5kZWQgPSAxOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1tY19vbWFwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaG9zdCAmJiAhaG9zdC0+c3VzcGVuZGVkKQorCQlyZXR1cm4gMDsKKworCWlmIChob3N0KSB7CisJCXJldCA9IG1tY19yZXN1bWVfaG9zdChob3N0LT5tbWMpOworCQlpZiAocmV0ID09IDApCisJCQlob3N0LT5zdXNwZW5kZWQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZWxzZQorI2RlZmluZSBtbWNfb21hcF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgbW1jX29tYXBfcmVzdW1lCQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbW1jX29tYXBfZHJpdmVyID0geworCS5wcm9iZQkJPSBtbWNfb21hcF9wcm9iZSwKKwkucmVtb3ZlCQk9IG1tY19vbWFwX3JlbW92ZSwKKwkuc3VzcGVuZAk9IG1tY19vbWFwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBtbWNfb21hcF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1tY19vbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtbWNfb21hcF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbW1jX29tYXBfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtbWNfb21hcF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtbWNfb21hcF9pbml0KTsKK21vZHVsZV9leGl0KG1tY19vbWFwX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk9NQVAgTXVsdGltZWRpYSBDYXJkIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKERSSVZFUl9OQU1FKTsKK01PRFVMRV9BVVRIT1IoIkp1aGEgWXJq9mzkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9vbWFwLmggYi9kcml2ZXJzL21tYy9vbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1NGQzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL29tYXAuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmCURSSVZFUlNfTUVESUFfTU1DX09NQVBfSAorI2RlZmluZQlEUklWRVJTX01FRElBX01NQ19PTUFQX0gKKworI2RlZmluZQlPTUFQX01NQ19SRUdfQ01ECTB4MDAKKyNkZWZpbmUJT01BUF9NTUNfUkVHX0FSR0wJMHgwNAorI2RlZmluZQlPTUFQX01NQ19SRUdfQVJHSAkweDA4CisjZGVmaW5lCU9NQVBfTU1DX1JFR19DT04JMHgwYworI2RlZmluZQlPTUFQX01NQ19SRUdfU1RBVAkweDEwCisjZGVmaW5lCU9NQVBfTU1DX1JFR19JRQkJMHgxNAorI2RlZmluZQlPTUFQX01NQ19SRUdfQ1RPCTB4MTgKKyNkZWZpbmUJT01BUF9NTUNfUkVHX0RUTwkweDFjCisjZGVmaW5lCU9NQVBfTU1DX1JFR19EQVRBCTB4MjAKKyNkZWZpbmUJT01BUF9NTUNfUkVHX0JMRU4JMHgyNAorI2RlZmluZQlPTUFQX01NQ19SRUdfTkJMSwkweDI4CisjZGVmaW5lCU9NQVBfTU1DX1JFR19CVUYJMHgyYworI2RlZmluZSBPTUFQX01NQ19SRUdfU0RJTwkweDM0CisjZGVmaW5lCU9NQVBfTU1DX1JFR19SRVYJMHgzYworI2RlZmluZQlPTUFQX01NQ19SRUdfUlNQMAkweDQwCisjZGVmaW5lCU9NQVBfTU1DX1JFR19SU1AxCTB4NDQKKyNkZWZpbmUJT01BUF9NTUNfUkVHX1JTUDIJMHg0OAorI2RlZmluZQlPTUFQX01NQ19SRUdfUlNQMwkweDRjCisjZGVmaW5lCU9NQVBfTU1DX1JFR19SU1A0CTB4NTAKKyNkZWZpbmUJT01BUF9NTUNfUkVHX1JTUDUJMHg1NAorI2RlZmluZQlPTUFQX01NQ19SRUdfUlNQNgkweDU4CisjZGVmaW5lCU9NQVBfTU1DX1JFR19SU1A3CTB4NWMKKyNkZWZpbmUJT01BUF9NTUNfUkVHX0lPU1IJMHg2MAorI2RlZmluZQlPTUFQX01NQ19SRUdfU1lTQwkweDY0CisjZGVmaW5lCU9NQVBfTU1DX1JFR19TWVNTCTB4NjgKKworI2RlZmluZQlPTUFQX01NQ19TVEFUX0NBUkRfRVJSCQkoMSA8PCAxNCkKKyNkZWZpbmUJT01BUF9NTUNfU1RBVF9DQVJEX0lSUQkJKDEgPDwgMTMpCisjZGVmaW5lCU9NQVBfTU1DX1NUQVRfT0NSX0JVU1kJCSgxIDw8IDEyKQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0FfRU1QVFkJCSgxIDw8IDExKQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0FfRlVMTAkJKDEgPDwgMTApCisjZGVmaW5lCU9NQVBfTU1DX1NUQVRfQ01EX0NSQwkJKDEgPDwgIDgpCisjZGVmaW5lCU9NQVBfTU1DX1NUQVRfQ01EX1RPVVQJCSgxIDw8ICA3KQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0RBVEFfQ1JDCQkoMSA8PCAgNikKKyNkZWZpbmUJT01BUF9NTUNfU1RBVF9EQVRBX1RPVVQJCSgxIDw8ICA1KQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0VORF9CVVNZCQkoMSA8PCAgNCkKKyNkZWZpbmUJT01BUF9NTUNfU1RBVF9FTkRfT0ZfREFUQQkoMSA8PCAgMykKKyNkZWZpbmUJT01BUF9NTUNfU1RBVF9DQVJEX0JVU1kJCSgxIDw8ICAyKQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0VORF9PRl9DTUQJKDEgPDwgIDApCisKKyNkZWZpbmUgT01BUF9NTUNfUkVBRChiYXNlLCByZWcpCV9fcmF3X3JlYWR3KChiYXNlKSArIE9NQVBfTU1DX1JFR18jI3JlZykKKyNkZWZpbmUgT01BUF9NTUNfV1JJVEUoYmFzZSwgcmVnLCB2YWwpCV9fcmF3X3dyaXRldygodmFsKSwgKGJhc2UpICsgT01BUF9NTUNfUkVHXyMjcmVnKQorCisvKgorICogQ29tbWFuZCB0eXBlcworICovCisjZGVmaW5lIE9NQVBfTU1DX0NNRFRZUEVfQkMJMAorI2RlZmluZSBPTUFQX01NQ19DTURUWVBFX0JDUgkxCisjZGVmaW5lIE9NQVBfTU1DX0NNRFRZUEVfQUMJMgorI2RlZmluZSBPTUFQX01NQ19DTURUWVBFX0FEVEMJMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3B4YW1jaS5jIGIvZHJpdmVycy9tbWMvcHhhbWNpLmMKaW5kZXggYzMyZmFkMS4uYjQ5MzY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvcHhhbWNpLmMKQEAgLTM3LDEyICszNyw2IEBACiAKICNpbmNsdWRlICJweGFtY2kuaCIKIAotI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLSNkZWZpbmUgREJHKHguLi4pCXByaW50ayhLRVJOX0RFQlVHIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNkZWZpbmUgRFJJVkVSX05BTUUJInB4YTJ4eC1tY2kiCiAKICNkZWZpbmUgTlJfU0cJMQpAQCAtNzEsMTEgKzY1LDYgQEAKIAl1bnNpZ25lZCBpbnQJCWRtYV9kaXI7CiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuc190b19jbG9ja3ModW5zaWduZWQgaW50IG5zKQotewotCXJldHVybiAobnMgKiAoQ0xPQ0tSQVRFIC8gMTAwMDAwMCkgKyA5OTkpIC8gMTAwMDsKLX0KLQogc3RhdGljIHZvaWQgcHhhbWNpX3N0b3BfY2xvY2soc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0KQogewogCWlmIChyZWFkbChob3N0LT5iYXNlICsgTU1DX1NUQVQpICYgU1RBVF9DTEtfRU4pIHsKQEAgLTExOSw2ICsxMDgsNyBAQAogc3RhdGljIHZvaWQgcHhhbWNpX3NldHVwX2RhdGEoc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJdW5zaWduZWQgaW50IG5vYiA9IGRhdGEtPmJsb2NrczsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2xrczsKIAl1bnNpZ25lZCBpbnQgdGltZW91dDsKIAl1MzIgZGNtZDsKIAlpbnQgaTsKQEAgLTEyOSw5ICsxMTksMTEgQEAKIAkJbm9iID0gMHhmZmZmOwogCiAJd3JpdGVsKG5vYiwgaG9zdC0+YmFzZSArIE1NQ19OT0IpOwotCXdyaXRlbCgxIDw8IGRhdGEtPmJsa3N6X2JpdHMsIGhvc3QtPmJhc2UgKyBNTUNfQkxLTEVOKTsKKwl3cml0ZWwoZGF0YS0+Ymxrc3osIGhvc3QtPmJhc2UgKyBNTUNfQkxLTEVOKTsKIAotCXRpbWVvdXQgPSBuc190b19jbG9ja3MoZGF0YS0+dGltZW91dF9ucykgKyBkYXRhLT50aW1lb3V0X2Nsa3M7CisJY2xrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpZGF0YS0+dGltZW91dF9ucyAqIENMT0NLUkFURTsKKwlkb19kaXYoY2xrcywgMTAwMDAwMDAwMFVMKTsKKwl0aW1lb3V0ID0gKHVuc2lnbmVkIGludCljbGtzICsgKGRhdGEtPnRpbWVvdXRfY2xrcyA8PCBob3N0LT5jbGtydCk7CiAJd3JpdGVsKCh0aW1lb3V0ICsgMjU1KSAvIDI1NiwgaG9zdC0+YmFzZSArIE1NQ19SRFRPKTsKIAogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKQEAgLTIwNiw3ICsxOTgsNiBAQAogCiBzdGF0aWMgdm9pZCBweGFtY2lfZmluaXNoX3JlcXVlc3Qoc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKIHsKLQlEQkcoIlBYQU1DSTogcmVxdWVzdCBkb25lXG4iKTsKIAlob3N0LT5tcnEgPSBOVUxMOwogCWhvc3QtPmNtZCA9IE5VTEw7CiAJaG9zdC0+ZGF0YSA9IE5VTEw7CkBAIC0yNTIsNyArMjQzLDcgQEAKIAkJCWlmICgoY21kLT5yZXNwWzBdICYgMHg4MDAwMDAwMCkgPT0gMCkKIAkJCQljbWQtPmVycm9yID0gTU1DX0VSUl9CQURDUkM7CiAJCX0gZWxzZSB7Ci0JCQlEQkcoImlnbm9yaW5nIENSQyBmcm9tIGNvbW1hbmQgJWQgLSAqcmlza3kqXG4iLGNtZC0+b3Bjb2RlKTsKKwkJCXByX2RlYnVnKCJpZ25vcmluZyBDUkMgZnJvbSBjb21tYW5kICVkIC0gKnJpc2t5KlxuIixjbWQtPm9wY29kZSk7CiAJCX0KICNlbHNlCiAJCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX0JBRENSQzsKQEAgLTI5MiwxNCArMjgzLDE0IEBACiAJICogZGF0YSBibG9ja3MgYXMgYmVpbmcgaW4gZXJyb3IuCiAJICovCiAJaWYgKGRhdGEtPmVycm9yID09IE1NQ19FUlJfTk9ORSkKLQkJZGF0YS0+Ynl0ZXNfeGZlcmVkID0gZGF0YS0+YmxvY2tzIDw8IGRhdGEtPmJsa3N6X2JpdHM7CisJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6OwogCWVsc2UKIAkJZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsKIAogCXB4YW1jaV9kaXNhYmxlX2lycShob3N0LCBEQVRBX1RSQU5fRE9ORSk7CiAKIAlob3N0LT5kYXRhID0gTlVMTDsKLQlpZiAoaG9zdC0+bXJxLT5zdG9wICYmIGRhdGEtPmVycm9yID09IE1NQ19FUlJfTk9ORSkgeworCWlmIChob3N0LT5tcnEtPnN0b3ApIHsKIAkJcHhhbWNpX3N0b3BfY2xvY2soaG9zdCk7CiAJCXB4YW1jaV9zdGFydF9jbWQoaG9zdCwgaG9zdC0+bXJxLT5zdG9wLCAwKTsKIAl9IGVsc2UgewpAQCAtMzE3LDEyICszMDgsMTAgQEAKIAogCWlyZWcgPSByZWFkbChob3N0LT5iYXNlICsgTU1DX0lfUkVHKTsKIAotCURCRygiUFhBTUNJOiBpcnEgJTA4eFxuIiwgaXJlZyk7Ci0KIAlpZiAoaXJlZykgewogCQl1bnNpZ25lZCBzdGF0ID0gcmVhZGwoaG9zdC0+YmFzZSArIE1NQ19TVEFUKTsKIAotCQlEQkcoIlBYQU1DSTogc3RhdCAlMDh4XG4iLCBzdGF0KTsKKwkJcHJfZGVidWcoIlBYQU1DSTogaXJxICUwOHggc3RhdCAlMDh4XG4iLCBpcmVnLCBzdGF0KTsKIAogCQlpZiAoaXJlZyAmIEVORF9DTURfUkVTKQogCQkJaGFuZGxlZCB8PSBweGFtY2lfY21kX2RvbmUoaG9zdCwgc3RhdCk7CkBAIC0zNzYsMTAgKzM2NSw2IEBACiB7CiAJc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCURCRygicHhhbWNpX3NldF9pb3M6IGNsb2NrICV1IHBvd2VyICV1IHZkZCAldS4lMDJ1XG4iLAotCSAgICBpb3MtPmNsb2NrLCBpb3MtPnBvd2VyX21vZGUsIGlvcy0+dmRkIC8gMTAwLAotCSAgICBpb3MtPnZkZCAlIDEwMCk7Ci0KIAlpZiAoaW9zLT5jbG9jaykgewogCQl1bnNpZ25lZCBpbnQgY2xrID0gQ0xPQ0tSQVRFIC8gaW9zLT5jbG9jazsKIAkJaWYgKENMT0NLUkFURSAvIGNsayA+IGlvcy0+Y2xvY2spCkBAIC00MDUsOCArMzkwLDggQEAKIAkJCWhvc3QtPmNtZGF0IHw9IENNREFUX0lOSVQ7CiAJfQogCi0JREJHKCJweGFtY2lfc2V0X2lvczogY2xrcnQgPSAleCBjbWRhdCA9ICV4XG4iLAotCSAgICBob3N0LT5jbGtydCwgaG9zdC0+Y21kYXQpOworCXByX2RlYnVnKCJQWEFNQ0k6IGNsa3J0ID0gJXggY21kYXQgPSAleFxuIiwKKwkJIGhvc3QtPmNsa3J0LCBob3N0LT5jbWRhdCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIHB4YW1jaV9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9zZGhjaS5jIGIvZHJpdmVycy9tbWMvc2RoY2kuYwppbmRleCA4YjgxMWQ5Li5iMDA1MzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL3NkaGNpLmMKQEAgLTMxLDEyICszMSw4IEBACiAKICNkZWZpbmUgQlVHTUFJTCAiPHNkaGNpLWRldmVsQGxpc3QuZHJ6ZXVzLmN4PiIKIAotI2lmZGVmIENPTkZJR19NTUNfREVCVUcKICNkZWZpbmUgREJHKGYsIHguLi4pIFwKLQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiIFslcygpXTogIiBmLCBfX2Z1bmNfXywjIyB4KQotI2Vsc2UKLSNkZWZpbmUgREJHKGYsIHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgorCXByX2RlYnVnKERSSVZFUl9OQU1FICIgWyVzKCldOiAiIGYsIF9fZnVuY19fLCMjIHgpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAkvKiBoYW5kbGUgYW55IFNEIGhvc3QgY29udHJvbGxlciAqLwpAQCAtNTc0LDEwICs1NzAsNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAotCURCRygiY2xvY2sgJXVIeiBidXNtb2RlICV1IHBvd2VybW9kZSAldSBjcyAldSBWZGQgJXUgd2lkdGggJXVcbiIsCi0JICAgICBpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLCBpb3MtPnBvd2VyX21vZGUsIGlvcy0+Y2hpcF9zZWxlY3QsCi0JICAgICBpb3MtPnZkZCwgaW9zLT5idXNfd2lkdGgpOwotCiAJLyoKIAkgKiBSZXNldCB0aGUgY2hpcCBvbiBlYWNoIHBvd2VyIG9mZi4KIAkgKiBTaG91bGQgY2xlYXIgb3V0IGFueSB3ZWlyZCBzdGF0ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy93YnNkLmMgYi9kcml2ZXJzL21tYy93YnNkLmMKaW5kZXggM2JlMzk3ZC4uODE2NzMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvd2JzZC5jCisrKyBiL2RyaXZlcnMvbW1jL3dic2QuYwpAQCAtNDQsMTUgKzQ0LDEwIEBACiAjZGVmaW5lIERSSVZFUl9OQU1FICJ3YnNkIgogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS41IgogCi0jaWZkZWYgQ09ORklHX01NQ19ERUJVRwogI2RlZmluZSBEQkcoeC4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICIgeCkKKwlwcl9kZWJ1ZyhEUklWRVJfTkFNRSAiOiAiIHgpCiAjZGVmaW5lIERCR0YoZiwgeC4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICIgWyVzKCldOiAiIGYsIF9fZnVuY19fICwgIyN4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgREJHRih4Li4uKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKKwlwcl9kZWJ1ZyhEUklWRVJfTkFNRSAiIFslcygpXTogIiBmLCBfX2Z1bmNfXyAsICMjeCkKIAogLyoKICAqIERldmljZSByZXNvdXJjZXMKQEAgLTY2NywxNCArNjYyLDE0IEBACiAJdW5zaWduZWQgbG9uZyBkbWFmbGFnczsKIAogCURCR0YoImJsa3N6ICUwNHggYmxrcyAlMDR4IGZsYWdzICUwOHhcbiIsCi0JCTEgPDwgZGF0YS0+Ymxrc3pfYml0cywgZGF0YS0+YmxvY2tzLCBkYXRhLT5mbGFncyk7CisJCWRhdGEtPmJsa3N6LCBkYXRhLT5ibG9ja3MsIGRhdGEtPmZsYWdzKTsKIAlEQkdGKCJ0c2FjICVkIG1zIG5zYWMgJWQgY2xrXG4iLAogCQlkYXRhLT50aW1lb3V0X25zIC8gMTAwMDAwMCwgZGF0YS0+dGltZW91dF9jbGtzKTsKIAogCS8qCiAJICogQ2FsY3VsYXRlIHNpemUuCiAJICovCi0JaG9zdC0+c2l6ZSA9IGRhdGEtPmJsb2NrcyA8PCBkYXRhLT5ibGtzel9iaXRzOworCWhvc3QtPnNpemUgPSBkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzejsKIAogCS8qCiAJICogQ2hlY2sgdGltZW91dCB2YWx1ZXMgZm9yIG92ZXJmbG93LgpAQCAtNzAxLDEyICs2OTYsMTIgQEAKIAkgKiBUd28gYnl0ZXMgYXJlIG5lZWRlZCBmb3IgZWFjaCBkYXRhIGxpbmUuCiAJICovCiAJaWYgKGhvc3QtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzEpIHsKLQkJYmxrc2l6ZSA9ICgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpICsgMjsKKwkJYmxrc2l6ZSA9IGRhdGEtPmJsa3N6ICsgMjsKIAogCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX1BCU01TQiwgKGJsa3NpemUgPj4gNCkgJiAweEYwKTsKIAkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9QQlNMU0IsIGJsa3NpemUgJiAweEZGKTsKIAl9IGVsc2UgaWYgKGhvc3QtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpIHsKLQkJYmxrc2l6ZSA9ICgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpICsgMiAqIDQ7CisJCWJsa3NpemUgPSBkYXRhLT5ibGtzeiArIDIgKiA0OwogCiAJCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUEJTTVNCLAogCQkJKChibGtzaXplID4+IDQpICYgMHhGMCkgfCBXQlNEX0RBVEFfV0lEVEgpOwpAQCAtOTM2LDEwICs5MzEsNiBAQAogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXU4IGNsaywgc2V0dXAsIHB3cjsKIAotCURCR0YoImNsb2NrICV1SHogYnVzbW9kZSAldSBwb3dlcm1vZGUgJXUgY3MgJXUgVmRkICV1IHdpZHRoICV1XG4iLAotCQlpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLCBpb3MtPnBvd2VyX21vZGUsIGlvcy0+Y2hpcF9zZWxlY3QsCi0JCWlvcy0+dmRkLCBpb3MtPmJ1c193aWR0aCk7Ci0KIAlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCmluZGV4IDBmNmJiMmUuLmE3ZWM1OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwpAQCAtMjAwLDI3ICsyMDAsNiBAQAogCSAgcHJvdmlkZXMgc3VwcG9ydCBmb3Igb25lIG9mIHRob3NlIGNvbW1hbmQgc2V0cywgdXNlZCBvbiBjaGlwcwogCSAgaW5jbHVkaW5nIHRoZSBBTUQgQW0yOUxWMzIwLgogCi1jb25maWcgTVREX0NGSV9BTURTVERfUkVUUlkKLQlpbnQgIlJldHJ5IGZhaWxlZCBjb21tYW5kcyAoZXJhc2UvcHJvZ3JhbSkiCi0JZGVwZW5kcyBvbiBNVERfQ0ZJX0FNRFNURAotCWRlZmF1bHQgIjAiCi0JaGVscAotCSAgU29tZSBjaGlwcywgd2hlbiBhdHRhY2hlZCB0byBhIHNoYXJlZCBidXMsIGRvbid0IHByb3Blcmx5IGZpbHRlcgotCSAgYnVzIHRyYWZmaWMgdGhhdCBpcyBkZXN0aW5lZCB0byBvdGhlciBkZXZpY2VzLiAgVGhpcyBicm9rZW4KLQkgIGJlaGF2aW9yIGNhdXNlcyBlcmFzZSBhbmQgcHJvZ3JhbSBzZXF1ZW5jZXMgdG8gYmUgYWJvcnRlZCB3aGVuCi0JICB0aGUgc2VxdWVuY2VzIGFyZSBtaXhlZCB3aXRoIHRyYWZmaWMgZm9yIG90aGVyIGRldmljZXMuCi0KLQkgIFNTVDQ5TEYwNDAgKGFuZCByZWxhdGVkKSBjaGlwcyBhcmUga25vdyB0byBiZSBicm9rZW4uCi0KLWNvbmZpZyBNVERfQ0ZJX0FNRFNURF9SRVRSWV9NQVgKLQlpbnQgIk1heCByZXRyaWVzIG9mIGZhaWxlZCBjb21tYW5kcyAoZXJhc2UvcHJvZ3JhbSkiCi0JZGVwZW5kcyBvbiBNVERfQ0ZJX0FNRFNURF9SRVRSWQotCWRlZmF1bHQgIjAiCi0JaGVscAotCSAgSWYgeW91IGhhdmUgYW4gU1NUNDlMRjA0MCAob3IgcmVsYXRlZCBjaGlwKSB0aGVuIHRoaXMgdmFsdWUgc2hvdWxkCi0JICBiZSBzZXQgdG8gYXQgbGVhc3QgMS4gIFRoaXMgY2FuIGFsc28gYmUgYWRqdXN0ZWQgYXQgZHJpdmVyIGxvYWQKLQkgIHRpbWUgd2l0aCB0aGUgcmV0cnlfY21kX21heCBtb2R1bGUgcGFyYW1ldGVyLgotCiBjb25maWcgTVREX0NGSV9TVEFBCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNUIChBZHZhbmNlZCBBcmNoaXRlY3R1cmUpIGZsYXNoIGNoaXBzIgogCWRlcGVuZHMgb24gTVREX0dFTl9QUk9CRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvYW1kX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYwppbmRleCBmZGI5MWI2Li41NzExNTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYwpAQCAtNjY0LDcgKzY2NCw3IEBACiAJcHJpbnRrKCIlczogUHJvYmluZyBmb3IgQU1EIGNvbXBhdGlibGUgZmxhc2guLi5cbiIsIG1hcC0+bmFtZSk7CiAKIAlpZiAoKHRhYmxlX3Bvc1swXSA9IHByb2JlX25ld19jaGlwKG10ZCwgMCwgTlVMTCwgJnRlbXAsIHRhYmxlLAotCQkJCQkgICBzaXplb2YodGFibGUpL3NpemVvZih0YWJsZVswXSkpKQorCQkJCQkgICBBUlJBWV9TSVpFKHRhYmxlKSkpCiAJICAgID09IC0xKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICIlczogRm91bmQgbm8gQU1EIGNvbXBhdGlibGUgZGV2aWNlIGF0IGxvY2F0aW9uIHplcm9cbiIsCkBAIC02OTYsNyArNjk2LDcgQEAKIAkgICAgIGJhc2UgKz0gKDEgPDwgdGVtcC5jaGlwc2hpZnQpKSB7CiAJICAgICAJaW50IG51bWNoaXBzID0gdGVtcC5udW1jaGlwczsKIAkJdGFibGVfcG9zW251bWNoaXBzXSA9IHByb2JlX25ld19jaGlwKG10ZCwgYmFzZSwgY2hpcHMsCi0JCQkmdGVtcCwgdGFibGUsIHNpemVvZih0YWJsZSkvc2l6ZW9mKHRhYmxlWzBdKSk7CisJCQkmdGVtcCwgdGFibGUsIEFSUkFZX1NJWkUodGFibGUpKTsKIAl9CiAKIAltdGQtPmVyYXNlcmVnaW9ucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8pICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCmluZGV4IGVkYjMwNmMuLjUxN2VhMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYwpAQCAtMzQsNiArMzQsNyBAQAogI2RlZmluZSBNQU5VRkFDVFVSRVJfTUFDUk9OSVgJMHgwMEMyCiAjZGVmaW5lIE1BTlVGQUNUVVJFUl9ORUMJMHgwMDEwCiAjZGVmaW5lIE1BTlVGQUNUVVJFUl9QTUMJMHgwMDlECisjZGVmaW5lIE1BTlVGQUNUVVJFUl9TSEFSUAkweDAwYjAKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX1NTVAkweDAwQkYKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX1NUCQkweDAwMjAKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX1RPU0hJQkEJMHgwMDk4CkBAIC0xMjQsNiArMTI1LDkgQEAKICNkZWZpbmUgUE00OUZMMDA0CTB4MDA2RQogI2RlZmluZSBQTTQ5RkwwMDgJMHgwMDZBCiAKKy8qIFNoYXJwICovCisjZGVmaW5lIExIMjhGNjQwQkYJMHgwMGIwCisKIC8qIFNUIC0gd3d3LnN0LmNvbSAqLwogI2RlZmluZSBNMjlXODAwRFQJMHgwMEQ3CiAjZGVmaW5lIE0yOVc4MDBEQgkweDAwNUIKQEAgLTEyNjcsNiArMTI3MSwxOSBAQAogCQkucmVnaW9ucwk9IHsKIAkJCUVSQVNFSU5GTyggMHgwMTAwMCwgMjU2ICkKIAkJfQorCX0sIHsKKwkJLm1mcl9pZAkJPSBNQU5VRkFDVFVSRVJfU0hBUlAsCisJCS5kZXZfaWQJCT0gTEgyOEY2NDBCRiwKKwkJLm5hbWUJCT0gIkxIMjhGNjQwQkYiLAorCQkudWFkZHIJCT0geworCQkJWzBdID0gTVREX1VBRERSX1VOTkVDRVNTQVJZLCAgICAvKiB4OCAqLworCQl9LAorCQkuRGV2U2l6ZQk9IFNJWkVfNE1pQiwKKwkJLkNtZFNldCAgICAgICAgID0gUF9JRF9JTlRFTF9TVEQsCisJCS5OdW1FcmFzZVJlZ2lvbnM9IDEsCisJCS5yZWdpb25zICAgICAgICA9IHsKKwkJCUVSQVNFSU5GTygweDQwMDAwLDE2KSwKKwkJfQogICAgICAgICB9LCB7CiAJCS5tZnJfaWQJCT0gTUFOVUZBQ1RVUkVSX1NTVCwKIAkJLmRldl9pZAkJPSBTU1QzOUxGNTEyLApAQCAtMjAzNSw3ICsyMDUyLDcgQEAKIAkJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKIAkJICAgICAgIlNlYXJjaCBmb3IgaWQ6KCUwMnggJTAyeCkgaW50ZXJsZWF2ZSglZCkgdHlwZSglZClcbiIsCiAJCQljZmktPm1mciwgY2ZpLT5pZCwgY2ZpX2ludGVybGVhdmUoY2ZpKSwgY2ZpLT5kZXZpY2VfdHlwZSk7Ci0JCWZvciAoaT0wOyBpPHNpemVvZihqZWRlY190YWJsZSkvc2l6ZW9mKGplZGVjX3RhYmxlWzBdKTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGplZGVjX3RhYmxlKTsgaSsrKSB7CiAJCQlpZiAoIGplZGVjX21hdGNoKCBiYXNlLCBtYXAsIGNmaSwgJmplZGVjX3RhYmxlW2ldICkgKSB7CiAJCQkJREVCVUcoIE1URF9ERUJVR19MRVZFTDMsCiAJCQkJICAgICAgICJNVEQgJXMoKTogbWF0Y2hlZCBkZXZpY2UgMHgleCwweCV4IHVubG9ja19hZGRyczogMHglLjR4IDB4JS40eFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL3NoYXJwLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jCmluZGV4IDM2ZjYxYTYuLjNjYzBiMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL3NoYXJwLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvc2hhcnAuYwpAQCAtNjQsNyArNjQsNyBAQAogCiAjdW5kZWYgQVVUT1VOTE9DSyAgLyogYXV0b21hdGljYWxseSB1bmxvY2tzIGJsb2NrcyBiZWZvcmUgZXJhc2luZyAqLwogCi1zdHJ1Y3QgbXRkX2luZm8gKnNoYXJwX3Byb2JlKHN0cnVjdCBtYXBfaW5mbyAqKTsKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnNoYXJwX3Byb2JlKHN0cnVjdCBtYXBfaW5mbyAqKTsKIAogc3RhdGljIGludCBzaGFycF9wcm9iZV9tYXAoc3RydWN0IG1hcF9pbmZvICptYXAsc3RydWN0IG10ZF9pbmZvICptdGQpOwogCkBAIC05Niw3ICs5Niw2IEBACiAJc3RydWN0IGZsY2hpcCBjaGlwc1sxXTsKIH07CiAKLXN0cnVjdCBtdGRfaW5mbyAqc2hhcnBfcHJvYmUoc3RydWN0IG1hcF9pbmZvICptYXApOwogc3RhdGljIHZvaWQgc2hhcnBfZGVzdHJveShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2NoaXBfZHJpdmVyIHNoYXJwX2NoaXBkcnYgPSB7CkBAIC0xMDcsNyArMTA2LDcgQEAKIH07CiAKIAotc3RydWN0IG10ZF9pbmZvICpzaGFycF9wcm9iZShzdHJ1Y3QgbWFwX2luZm8gKm1hcCkKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnNoYXJwX3Byb2JlKHN0cnVjdCBtYXBfaW5mbyAqbWFwKQogewogCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gTlVMTDsKIAlzdHJ1Y3Qgc2hhcnBfaW5mbyAqc2hhcnAgPSBOVUxMOwpAQCAtNTgxLDcgKzU4MCw3IEBACiAKIH0KIAotaW50IF9faW5pdCBzaGFycF9wcm9iZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzaGFycF9wcm9iZV9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKCJNVEQgU2hhcnAgY2hpcCBkcml2ZXIgPGRzQGxpbmVvLmNvbT5cbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jIGIvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYwppbmRleCA2YjhiYjJlLi5hN2E3YmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKQEAgLTQyLDcgKzQyLDggQEAKIAogCiAvKiBzcGVjaWFsIHNpemUgcmVmZXJyaW5nIHRvIGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlIGluIGEgcGFydGl0aW9uICovCi0jZGVmaW5lIFNJWkVfUkVNQUlOSU5HIDB4ZmZmZmZmZmYKKyNkZWZpbmUgU0laRV9SRU1BSU5JTkcgVUlOVF9NQVgKKyNkZWZpbmUgT0ZGU0VUX0NPTlRJTlVPVVMgVUlOVF9NQVgKIAogc3RydWN0IGNtZGxpbmVfbXRkX3BhcnRpdGlvbiB7CiAJc3RydWN0IGNtZGxpbmVfbXRkX3BhcnRpdGlvbiAqbmV4dDsKQEAgLTc1LDcgKzc2LDcgQEAKIHsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IE9GRlNFVF9DT05USU5VT1VTOwogCWNoYXIgKm5hbWU7CiAJaW50IG5hbWVfbGVuOwogCXVuc2lnbmVkIGNoYXIgKmV4dHJhX21lbTsKQEAgLTMxNCw3ICszMTUsNyBAQAogCQl7CiAJCQlmb3IoaSA9IDAsIG9mZnNldCA9IDA7IGkgPCBwYXJ0LT5udW1fcGFydHM7IGkrKykKIAkJCXsKLQkJCQlpZiAoIXBhcnQtPnBhcnRzW2ldLm9mZnNldCkKKwkJCQlpZiAocGFydC0+cGFydHNbaV0ub2Zmc2V0ID09IE9GRlNFVF9DT05USU5VT1VTKQogCQkJCSAgcGFydC0+cGFydHNbaV0ub2Zmc2V0ID0gb2Zmc2V0OwogCQkJCWVsc2UKIAkJCQkgIG9mZnNldCA9IHBhcnQtPnBhcnRzW2ldLm9mZnNldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCBkZDYyOGNiLi43ZmFjNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC0xMjksOCArMTI5LDggQEAKIAkgIGFsbG9jYXRpbmcgc3BhY2UgZnJvbSBMaW51eCdzIGF2YWlsYWJsZSBtZW1vcnkuIE90aGVyd2lzZSwgbGVhdmUKIAkgIHRoaXMgc2V0IHRvIHplcm8uIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB0byBsZWF2ZSB0aGlzIGFzIHplcm8uCiAKLWNvbmZpZyBNVERfQkxLTVRECi0JdHJpc3RhdGUgIk1URCBlbXVsYXRpb24gdXNpbmcgYmxvY2sgZGV2aWNlIgorY29uZmlnIE1URF9CTE9DSzJNVEQKKwl0cmlzdGF0ZSAiTVREIHVzaW5nIGJsb2NrIGRldmljZSIKIAlkZXBlbmRzIG9uIE1URAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyBhIGJsb2NrIGRldmljZSB0byBhcHBlYXIgYXMgYW4gTVRELiBJdCB3b3VsZApAQCAtMTQxLDE1ICsxNDEsNiBAQAogCSAgVGVzdGluZyBNVEQgdXNlcnMgKGVnIEpGRlMyKSBvbiBsYXJnZSBtZWRpYSBhbmQgbWVkaWEgdGhhdCBtaWdodAogCSAgYmUgcmVtb3ZlZCBkdXJpbmcgYSB3cml0ZSAodXNpbmcgdGhlIGZsb3BweSBkcml2ZSkuCiAKLWNvbmZpZyBNVERfQkxPQ0syTVRECi0JdHJpc3RhdGUgIk1URCB1c2luZyBibG9jayBkZXZpY2UgKHJld3JpdGUpIgotCWRlcGVuZHMgb24gTVREICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhdCBNVERfQkxLTVREIGFib3ZlLCBidXQKLQkgIGV4cGVyaWVuY2VkIHNvbWUgaW50ZXJmYWNlIGNoYW5nZXMgcGx1cyBzZXJpb3VzIHNwZWVkdXBzLiAgSW4KLQkgIHRoZSBsb25nIHRlcm0sIGl0IHNob3VsZCByZXBsYWNlIE1URF9CTEtNVEQuICBSaWdodCBub3csIHlvdQotCSAgc2hvdWxkbid0IGVudHJ1c3QgaW1wb3J0YW50IGRhdGEgdG8gaXQgeWV0LgotCiBjb21tZW50ICJEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMiCiAKIGNvbmZpZyBNVERfRE9DMjAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKaW5kZXggN2M1ZWQyMS4uYjY1NzM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCkBAIC0yMSw3ICsyMSw2IEBACiBvYmotJChDT05GSUdfTVREX01TMDJOVikJKz0gbXMwMi1udi5vCiBvYmotJChDT05GSUdfTVREX01URFJBTSkJKz0gbXRkcmFtLm8KIG9iai0kKENPTkZJR19NVERfTEFSVCkJCSs9IGxhcnQubwotb2JqLSQoQ09ORklHX01URF9CTEtNVEQpCSs9IGJsa210ZC5vCiBvYmotJChDT05GSUdfTVREX0JMT0NLMk1URCkJKz0gYmxvY2sybXRkLm8KIG9iai0kKENPTkZJR19NVERfREFUQUZMQVNIKQkrPSBtdGRfZGF0YWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfTTI1UDgwKQkrPSBtMjVwODAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibGttdGQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxrbXRkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Zjg2NGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibGttdGQuYworKysgL2Rldi9udWxsCkBAIC0xLDgyMCArMCwwIEBACi0vKgotICogJElkOiBibGttdGQuYyx2IDEuMjcgMjAwNS8xMS8wNyAxMToxNDoyNCBnbGVpeG5lciBFeHAgJAotICoKLSAqIGJsa210ZC5jIC0gdXNlIGEgYmxvY2sgZGV2aWNlIGFzIGEgZmFrZSBNVEQKLSAqCi0gKiBBdXRob3I6IFNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgU2ltb24gRXZhbnMKLSAqCi0gKiBMaWNlbmNlOiBHUEwKLSAqCi0gKiBIb3cgaXQgd29ya3M6Ci0gKglUaGUgZHJpdmVyIHVzZXMgcmF3L2lvIHRvIHJlYWQvd3JpdGUgdGhlIGRldmljZSBhbmQgdGhlIHBhZ2UKLSAqCWNhY2hlIHRvIGNhY2hlIGFjY2Vzcy4gV3JpdGVzIHVwZGF0ZSB0aGUgcGFnZSBjYWNoZSB3aXRoIHRoZQotICoJbmV3IGRhdGEgYW5kIG1hcmsgaXQgZGlydHkgYW5kIGFkZCB0aGUgcGFnZSBpbnRvIGEgQklPIHdoaWNoCi0gKglpcyB0aGVuIHdyaXR0ZW4gb3V0LgotICoKLSAqCUl0IGNhbiBiZSBsb2FkZWQgUmVhZC1Pbmx5IHRvIHByZXZlbnQgZXJhc2VzIGFuZCB3cml0ZXMgdG8gdGhlCi0gKgltZWRpdW0uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLQotCi0jZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICJibGttdGQ6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gImJsa210ZDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiYmxrbXRkOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSBjcml0KGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9DUklUICJibGttdGQ6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0KLQotLyogRGVmYXVsdCBlcmFzZSBzaXplIGluIEssIGFsd2F5cyBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgUEFHRV9TSVpFICovCi0jZGVmaW5lIENPTkZJR19NVERfQkxLREVWX0VSQVNFU0laRSAoMTI4IDw8IDEwKQkvKiAxMjhLaUIgKi8KLSNkZWZpbmUgVkVSU0lPTiAiJFJldmlzaW9uOiAxLjI3ICQiCi0KLS8qIEluZm8gZm9yIHRoZSBibG9jayBkZXZpY2UgKi8KLXN0cnVjdCBibGttdGRfZGV2IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmxrZGV2OwotCXN0cnVjdCBtdGRfaW5mbyBtdGRfaW5mbzsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHdyYnVmX211dGV4OwotfTsKLQotCi0vKiBTdGF0aWMgaW5mbyBhYm91dCB0aGUgTVRELCB1c2VkIGluIGNsZWFudXBfbW9kdWxlICovCi1zdGF0aWMgTElTVF9IRUFEKGJsa210ZF9kZXZpY2VfbGlzdCk7Ci0KLQotc3RhdGljIHZvaWQgYmxrbXRkX3N5bmMoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCi0jZGVmaW5lIE1BWF9ERVZJQ0VTIDQKLQotLyogTW9kdWxlIHBhcmFtZXRlcnMgcGFzc2VkIGJ5IGluc21vZC9tb2Rwcm9iZSAqLwotc3RhdGljIGNoYXIgKmRldmljZVtNQVhfREVWSUNFU107ICAgIC8qIHRoZSBibG9jayBkZXZpY2UgdG8gdXNlICovCi1zdGF0aWMgaW50IGVyYXNlc3pbTUFYX0RFVklDRVNdOyAgICAgLyogb3B0aW9uYWwgZGVmYXVsdCBlcmFzZSBzaXplICovCi1zdGF0aWMgaW50IHJvW01BWF9ERVZJQ0VTXTsgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCBvbmx5IGZsYWcgKi8KLXN0YXRpYyBpbnQgc3luYzsKLQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJTaW1vbiBFdmFucyA8c3BzZUBzZWNyZXQub3JnLnVrPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJFbXVsYXRlIGFuIE1URCB1c2luZyBhIGJsb2NrIGRldmljZSIpOwotbW9kdWxlX3BhcmFtX2FycmF5KGRldmljZSwgY2hhcnAsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZXZpY2UsICJibG9jayBkZXZpY2UgdG8gdXNlIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoZXJhc2VzeiwgaW50LCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZXJhc2VzeiwgIm9wdGlvbmFsIGVyYXNlIHNpemUgdG8gdXNlIGluIEtpQi4gZWcgND00S2lCLiIpOwotbW9kdWxlX3BhcmFtX2FycmF5KHJvLCBib29sLCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mocm8sICIxPVJlYWQgb25seSwgd3JpdGVzIGFuZCBlcmFzZXMgY2F1c2UgZXJyb3JzIik7Ci1tb2R1bGVfcGFyYW0oc3luYywgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHN5bmMsICIxPVN5bmNocm9ub3VzIHdyaXRlcyIpOwotCi0KLS8qIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgQklPIHJlYWRzICovCi1zdGF0aWMgaW50IGJpX3JlYWRfY29tcGxldGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQotewotCWlmIChiaW8tPmJpX3NpemUpCi0JCXJldHVybiAxOwotCi0JY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uKiliaW8tPmJpX3ByaXZhdGUpOwotCXJldHVybiAwOwotfQotCi0KLS8qIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgQklPIHdyaXRlcyAqLwotc3RhdGljIGludCBiaV93cml0ZV9jb21wbGV0ZShzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBieXRlc19kb25lLCBpbnQgZXJyb3IpCi17Ci0JY29uc3QgaW50IHVwdG9kYXRlID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7Ci0Jc3RydWN0IGJpb192ZWMgKmJ2ZWMgPSBiaW8tPmJpX2lvX3ZlYyArIGJpby0+YmlfdmNudCAtIDE7Ci0KLQlpZiAoYmlvLT5iaV9zaXplKQotCQlyZXR1cm4gMTsKLQotCWlmKCF1cHRvZGF0ZSkKLQkJZXJyKCJiaV93cml0ZV9jb21wbGV0ZTogbm90IHVwdG9kYXRlXG4iKTsKLQotCWRvIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidmVjLT5idl9wYWdlOwotCQlERUJVRygzLCAiQ2xlYW5pbmcgdXAgcGFnZSAlbGRcbiIsIHBhZ2UtPmluZGV4KTsKLQkJaWYgKC0tYnZlYyA+PSBiaW8tPmJpX2lvX3ZlYykKLQkJCXByZWZldGNodygmYnZlYy0+YnZfcGFnZS0+ZmxhZ3MpOwotCi0JCWlmICh1cHRvZGF0ZSkgewotCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQl9IGVsc2UgewotCQkJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCQlTZXRQYWdlRXJyb3IocGFnZSk7Ci0JCX0KLQkJY2xlYXJfcGFnZV9kaXJ0eShwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQl9IHdoaWxlIChidmVjID49IGJpby0+YmlfaW9fdmVjKTsKLQotCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiopYmlvLT5iaV9wcml2YXRlKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKiByZWFkIG9uZSBwYWdlIGZyb20gdGhlIGJsb2NrIGRldmljZSAqLwotc3RhdGljIGludCBibGttdGRfcmVhZHBhZ2Uoc3RydWN0IGJsa210ZF9kZXYgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0Jc3RydWN0IGJpbyAqYmlvOwotCXN0cnVjdCBjb21wbGV0aW9uIGV2ZW50OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JaWYoUGFnZVVwdG9kYXRlKHBhZ2UpKSB7Ci0JCURFQlVHKDIsICJibGttdGQ6IHJlYWRwYWdlIHBhZ2UgJWxkIGlzIGFscmVhZHkgdXB0byBkYXRlXG4iLCBwYWdlLT5pbmRleCk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKLQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKLQotCWJpbyA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCAxKTsKLQlpZihiaW8pIHsKLQkJaW5pdF9jb21wbGV0aW9uKCZldmVudCk7Ci0JCWJpby0+YmlfYmRldiA9IGRldi0+YmxrZGV2OwotCQliaW8tPmJpX3NlY3RvciA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX1NISUZULTkpOwotCQliaW8tPmJpX3ByaXZhdGUgPSAmZXZlbnQ7Ci0JCWJpby0+YmlfZW5kX2lvID0gYmlfcmVhZF9jb21wbGV0ZTsKLQkJaWYoYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgUEFHRV9TSVpFLCAwKSA9PSBQQUdFX1NJWkUpIHsKLQkJCXN1Ym1pdF9iaW8oUkVBRF9TWU5DLCBiaW8pOwotCQkJd2FpdF9mb3JfY29tcGxldGlvbigmZXZlbnQpOwotCQkJZXJyID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykgPyAwIDogLUVJTzsKLQkJCWJpb19wdXQoYmlvKTsKLQkJfQotCX0KLQotCWlmKGVycikKLQkJU2V0UGFnZUVycm9yKHBhZ2UpOwotCWVsc2UKLQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCXVubG9ja19wYWdlKHBhZ2UpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogd3JpdGUgb3V0IHRoZSBjdXJyZW50IEJJTyBhbmQgd2FpdCBmb3IgaXQgdG8gZmluaXNoICovCi1zdGF0aWMgaW50IGJsa210ZF93cml0ZV9vdXQoc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBjb21wbGV0aW9uIGV2ZW50OwotCWludCBlcnI7Ci0KLQlpZighYmlvLT5iaV92Y250KSB7Ci0JCWJpb19wdXQoYmlvKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaW5pdF9jb21wbGV0aW9uKCZldmVudCk7Ci0JYmlvLT5iaV9wcml2YXRlID0gJmV2ZW50OwotCWJpby0+YmlfZW5kX2lvID0gYmlfd3JpdGVfY29tcGxldGU7Ci0Jc3VibWl0X2JpbyhXUklURV9TWU5DLCBiaW8pOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV2ZW50KTsKLQlERUJVRygzLCAic3VibWl0X2JpbyBjb21wbGV0ZWQsIGJpX3ZjbnQgPSAlZFxuIiwgYmlvLT5iaV92Y250KTsKLQllcnIgPSB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKSA/IDAgOiAtRUlPOwotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qKgotICogYmxrbXRkX2FkZF9wYWdlIC0gYWRkIGEgcGFnZSB0byB0aGUgY3VycmVudCBCSU8KLSAqIEBiaW86IGJpbyB0byBhZGQgdG8gKE5VTEwgdG8gYWxsb2MgaW5pdGlhbCBiaW8pCi0gKiBAYmxrZGV2OiBibG9jayBkZXZpY2UKLSAqIEBwYWdlOiBwYWdlIHRvIGFkZAotICogQHBhZ2VjbnQ6IHBhZ2VzIGxlZnQgdG8gYWRkCi0gKgotICogQWRkcyBhIHBhZ2UgdG8gdGhlIGN1cnJlbnQgYmlvLCBhbGxvY2F0aW5nIGl0IGlmIG5lY2Vzc2FyeS4gSWYgaXQgY2Fubm90IGJlCi0gKiBhZGRlZCwgdGhlIGN1cnJlbnQgYmlvIGlzIHdyaXR0ZW4gb3V0IGFuZCBhIG5ldyBvbmUgaXMgYWxsb2NhdGVkLiBSZXR1cm5zCi0gKiB0aGUgbmV3IGJpbyB0byBhZGQgb3IgTlVMTCBvbiBlcnJvcgotICovCi1zdGF0aWMgc3RydWN0IGJpbyAqYmxrbXRkX2FkZF9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmxrZGV2LAotCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZWNudCkKLXsKLQotIHJldHJ5OgotCWlmKCFiaW8pIHsKLQkJYmlvID0gYmlvX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VjbnQpOwotCQlpZighYmlvKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWJpby0+Ymlfc2VjdG9yID0gcGFnZS0+aW5kZXggPDwgKFBBR0VfU0hJRlQtOSk7Ci0JCWJpby0+YmlfYmRldiA9IGJsa2RldjsKLQl9Ci0KLQlpZihiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBQQUdFX1NJWkUsIDApICE9IFBBR0VfU0laRSkgewotCQlibGttdGRfd3JpdGVfb3V0KGJpbyk7Ci0JCWJpbyA9IE5VTEw7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCXJldHVybiBiaW87Ci19Ci0KLQotLyoqCi0gKiB3cml0ZV9wYWdlcyAtIHdyaXRlIGJsb2NrIG9mIGRhdGEgdG8gZGV2aWNlIHZpYSB0aGUgcGFnZSBjYWNoZQotICogQGRldjogZGV2aWNlIHRvIHdyaXRlIHRvCi0gKiBAYnVmOiBkYXRhIHNvdXJjZSBvciBOVUxMIGlmIGVyYXNlIChvdXRwdXQgaXMgc2V0IHRvIDB4ZmYpCi0gKiBAdG86IG9mZnNldCBpbnRvIG91dHB1dCBkZXZpY2UKLSAqIEBsZW46IGFtb3VudCB0byBkYXRhIHRvIHdyaXRlCi0gKiBAcmV0bGVuOiBhbW91bnQgb2YgZGF0YSB3cml0dGVuCi0gKgotICogR3JhYiBwYWdlcyBmcm9tIHRoZSBwYWdlIGNhY2hlIGFuZCBmaWxsIHRoZW0gd2l0aCB0aGUgc291cmNlIGRhdGEuCi0gKiBOb24gcGFnZSBhbGlnbmVkIHN0YXJ0IGFuZCBlbmQgcmVzdWx0IGluIGEgcmVhZGluIG9mIHRoZSBwYWdlIGFuZAotICogcGFydCBvZiB0aGUgcGFnZSBiZWluZyBtb2RpZmllZC4gUGFnZXMgYXJlIGFkZGVkIHRvIHRoZSBiaW8gYW5kIHRoZW4gd3JpdHRlbgotICogb3V0LgotICovCi1zdGF0aWMgaW50IHdyaXRlX3BhZ2VzKHN0cnVjdCBibGttdGRfZGV2ICpkZXYsIGNvbnN0IHVfY2hhciAqYnVmLCBsb2ZmX3QgdG8sCi0JCSAgICBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbikKLXsKLQlpbnQgcGFnZW5yLCBvZmZzZXQ7Ci0Jc2l6ZV90IHN0YXJ0X2xlbiA9IDAsIGVuZF9sZW47Ci0JaW50IHBhZ2VjbnQgPSAwOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7Ci0Jc2l6ZV90IHRoaXNsZW4gPSAwOwotCi0JcGFnZW5yID0gdG8gPj4gUEFHRV9TSElGVDsKLQlvZmZzZXQgPSB0byAmIH5QQUdFX01BU0s7Ci0KLQlERUJVRygyLCAiYmxrbXRkOiB3cml0ZV9wYWdlczogYnVmID0gJXAgdG8gPSAlbGQgbGVuID0gJXpkIHBhZ2VuciA9ICVkIG9mZnNldCA9ICVkXG4iLAotCSAgICAgIGJ1ZiwgKGxvbmcpdG8sIGxlbiwgcGFnZW5yLCBvZmZzZXQpOwotCi0JLyogc2VlIGlmIHdlIGhhdmUgdG8gZG8gYSBwYXJ0aWFsIHdyaXRlIGF0IHRoZSBzdGFydCAqLwotCWlmKG9mZnNldCkgewotCQlzdGFydF9sZW4gPSAoKG9mZnNldCArIGxlbikgPiBQQUdFX1NJWkUpID8gUEFHRV9TSVpFIC0gb2Zmc2V0IDogbGVuOwotCQlsZW4gLT0gc3RhcnRfbGVuOwotCX0KLQotCS8qIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBvdGhlciB0d28gcmVnaW9ucyAqLwotCWVuZF9sZW4gPSBsZW4gJiB+UEFHRV9NQVNLOwotCWxlbiAtPSBlbmRfbGVuOwotCi0JaWYoc3RhcnRfbGVuKQotCQlwYWdlY250Kys7Ci0KLQlpZihsZW4pCi0JCXBhZ2VjbnQgKz0gbGVuID4+IFBBR0VfU0hJRlQ7Ci0KLQlpZihlbmRfbGVuKQotCQlwYWdlY250Kys7Ci0KLQlkb3duKCZkZXYtPndyYnVmX211dGV4KTsKLQotCURFQlVHKDMsICJibGttdGQ6IHdyaXRlOiBzdGFydF9sZW4gPSAlemQgbGVuID0gJXpkIGVuZF9sZW4gPSAlemQgcGFnZWNudCA9ICVkXG4iLAotCSAgICAgIHN0YXJ0X2xlbiwgbGVuLCBlbmRfbGVuLCBwYWdlY250KTsKLQotCWlmKHN0YXJ0X2xlbikgewotCQkvKiBkbyBwYXJ0aWFsIHN0YXJ0IHJlZ2lvbiAqLwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogZG9pbmcgcGFydGlhbCBzdGFydCwgcGFnZSA9ICVkIGxlbiA9ICV6ZCBvZmZzZXQgPSAlZFxuIiwKLQkJICAgICAgcGFnZW5yLCBzdGFydF9sZW4sIG9mZnNldCk7Ci0KLQkJQlVHX09OKCFidWYpOwotCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKGRldi0+YmxrZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nLCBwYWdlbnIsIChmaWxsZXJfdCAqKWJsa210ZF9yZWFkcGFnZSwgZGV2KTsKLQkJbG9ja19wYWdlKHBhZ2UpOwotCQlpZihQYWdlRGlydHkocGFnZSkpIHsKLQkJCWVycigidG8gPSAlbGxkIHN0YXJ0X2xlbiA9ICV6ZCBsZW4gPSAlemQgZW5kX2xlbiA9ICV6ZCBwYWdlbnIgPSAlZFxuIiwKLQkJCSAgICB0bywgc3RhcnRfbGVuLCBsZW4sIGVuZF9sZW4sIHBhZ2Vucik7Ci0JCQlCVUcoKTsKLQkJfQotCQltZW1jcHkocGFnZV9hZGRyZXNzKHBhZ2UpK29mZnNldCwgYnVmLCBzdGFydF9sZW4pOwotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQlidWYgKz0gc3RhcnRfbGVuOwotCQl0aGlzbGVuID0gc3RhcnRfbGVuOwotCQliaW8gPSBibGttdGRfYWRkX3BhZ2UoYmlvLCBkZXYtPmJsa2RldiwgcGFnZSwgcGFnZWNudCk7Ci0JCWlmKCFiaW8pIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQllcnIoImJpb19hZGRfcGFnZSBmYWlsZWRcbiIpOwotCQkJZ290byB3cml0ZV9lcnI7Ci0JCX0KLQkJcGFnZWNudC0tOwotCQlwYWdlbnIrKzsKLQl9Ci0KLQkvKiBOb3cgZG8gdGhlIG1haW4gbG9vcCB0byBhIHBhZ2UgYWxpZ25lZCwgbiBwYWdlIHNpemVkIG91dHB1dCAqLwotCWlmKGxlbikgewotCQlpbnQgcGFnZXNjID0gbGVuID4+IFBBR0VfU0hJRlQ7Ci0JCURFQlVHKDMsICJibGttdGQ6IHdyaXRlOiB3aG9sZSBwYWdlcyBzdGFydCA9ICVkLCBjb3VudCA9ICVkXG4iLAotCQkgICAgICBwYWdlbnIsIHBhZ2VzYyk7Ci0JCXdoaWxlKHBhZ2VzYykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkJCS8qIHNlZSBpZiBwYWdlIGlzIGluIHRoZSBwYWdlIGNhY2hlICovCi0JCQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogZ3JhYmJpbmcgcGFnZSAlZCBmcm9tIHBhZ2UgY2FjaGVcbiIsIHBhZ2Vucik7Ci0JCQlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKGRldi0+YmxrZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nLCBwYWdlbnIpOwotCQkJaWYoUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCQkJQlVHKCk7Ci0JCQl9Ci0JCQlpZighcGFnZSkgewotCQkJCXdhcm4oIndyaXRlOiBjYW5ub3QgZ3JhYiBjYWNoZSBwYWdlICVkIiwgcGFnZW5yKTsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gd3JpdGVfZXJyOwotCQkJfQotCQkJaWYoIWJ1ZikgewotCQkJCW1lbXNldChwYWdlX2FkZHJlc3MocGFnZSksIDB4ZmYsIFBBR0VfU0laRSk7Ci0JCQl9IGVsc2UgewotCQkJCW1lbWNweShwYWdlX2FkZHJlc3MocGFnZSksIGJ1ZiwgUEFHRV9TSVpFKTsKLQkJCQlidWYgKz0gUEFHRV9TSVpFOwotCQkJfQotCQkJYmlvID0gYmxrbXRkX2FkZF9wYWdlKGJpbywgZGV2LT5ibGtkZXYsIHBhZ2UsIHBhZ2VjbnQpOwotCQkJaWYoIWJpbykgewotCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJZXJyKCJiaW9fYWRkX3BhZ2UgZmFpbGVkXG4iKTsKLQkJCQlnb3RvIHdyaXRlX2VycjsKLQkJCX0KLQkJCXBhZ2VucisrOwotCQkJcGFnZWNudC0tOwotCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCQlwYWdlc2MtLTsKLQkJCXRoaXNsZW4gKz0gUEFHRV9TSVpFOwotCQl9Ci0JfQotCi0JaWYoZW5kX2xlbikgewotCQkvKiBkbyB0aGUgdGhpcmQgcmVnaW9uICovCi0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogZG9pbmcgcGFydGlhbCBlbmQsIHBhZ2UgPSAlZCBsZW4gPSAlemRcbiIsCi0JCSAgICAgIHBhZ2VuciwgZW5kX2xlbik7Ci0JCUJVR19PTighYnVmKTsKLQkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgcGFnZW5yLCAoZmlsbGVyX3QgKilibGttdGRfcmVhZHBhZ2UsIGRldik7Ci0JCWxvY2tfcGFnZShwYWdlKTsKLQkJaWYoUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCQllcnIoInRvID0gJWxsZCBzdGFydF9sZW4gPSAlemQgbGVuID0gJXpkIGVuZF9sZW4gPSAlemQgcGFnZW5yID0gJWRcbiIsCi0JCQkgICAgdG8sIHN0YXJ0X2xlbiwgbGVuLCBlbmRfbGVuLCBwYWdlbnIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhwYWdlKSwgYnVmLCBlbmRfbGVuKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IHdyaXRpbmcgb3V0IHBhcnRpYWwgZW5kXG4iKTsKLQkJdGhpc2xlbiArPSBlbmRfbGVuOwotCQliaW8gPSBibGttdGRfYWRkX3BhZ2UoYmlvLCBkZXYtPmJsa2RldiwgcGFnZSwgcGFnZWNudCk7Ci0JCWlmKCFiaW8pIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQllcnIoImJpb19hZGRfcGFnZSBmYWlsZWRcbiIpOwotCQkJZ290byB3cml0ZV9lcnI7Ci0JCX0KLQkJcGFnZW5yKys7Ci0JfQotCi0JREVCVUcoMywgImJsa210ZDogd3JpdGU6IGdvdCAlZCB2ZWN0b3JzIHRvIHdyaXRlXG4iLCBiaW8tPmJpX3ZjbnQpOwotIHdyaXRlX2VycjoKLQlpZihiaW8pCi0JCWJsa210ZF93cml0ZV9vdXQoYmlvKTsKLQotCURFQlVHKDIsICJibGttdGQ6IHdyaXRlOiBlbmQsIHJldGxlbiA9ICV6ZCwgZXJyID0gJWRcbiIsICpyZXRsZW4sIGVycik7Ci0JdXAoJmRldi0+d3JidWZfbXV0ZXgpOwotCi0JaWYocmV0bGVuKQotCQkqcmV0bGVuID0gdGhpc2xlbjsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIGVyYXNlIGEgc3BlY2lmaWVkIHBhcnQgb2YgdGhlIGRldmljZSAqLwotc3RhdGljIGludCBibGttdGRfZXJhc2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKLXsKLQlzdHJ1Y3QgYmxrbXRkX2RldiAqZGV2ID0gbXRkLT5wcml2OwotCXN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKmVpbmZvID0gbXRkLT5lcmFzZXJlZ2lvbnM7Ci0JaW50IG51bXJlZ2lvbnMgPSBtdGQtPm51bWVyYXNlcmVnaW9uczsKLQlzaXplX3QgZnJvbTsKLQl1X2xvbmcgbGVuOwotCWludCBlcnIgPSAtRUlPOwotCXNpemVfdCByZXRsZW47Ci0KLQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0lORzsKLQlmcm9tID0gaW5zdHItPmFkZHI7Ci0JbGVuID0gaW5zdHItPmxlbjsKLQotCS8qIGNoZWNrIGVyYXNlIHJlZ2lvbiBoYXMgdmFsaWQgc3RhcnQgYW5kIGxlbmd0aCAqLwotCURFQlVHKDIsICJibGttdGQ6IGVyYXNlOiBkZXYgPSBgJXMnIGZyb20gPSAweCV6eCBsZW4gPSAweCVseFxuIiwKLQkgICAgICBtdGQtPm5hbWUrOSwgZnJvbSwgbGVuKTsKLQl3aGlsZShudW1yZWdpb25zKSB7Ci0JCURFQlVHKDMsICJibGttdGQ6IGNoZWNraW5nIGVyYXNlIHJlZ2lvbiA9IDB4JTA4WCBzaXplID0gMHglWCBudW0gPSAweCV4XG4iLAotCQkgICAgICBlaW5mby0+b2Zmc2V0LCBlaW5mby0+ZXJhc2VzaXplLCBlaW5mby0+bnVtYmxvY2tzKTsKLQkJaWYoZnJvbSA+PSBlaW5mby0+b2Zmc2V0Ci0JCSAgICYmIGZyb20gPCBlaW5mby0+b2Zmc2V0ICsgKGVpbmZvLT5lcmFzZXNpemUgKiBlaW5mby0+bnVtYmxvY2tzKSkgewotCQkJaWYobGVuID09IGVpbmZvLT5lcmFzZXNpemUKLQkJCSAgICYmICggKGZyb20gLSBlaW5mby0+b2Zmc2V0KSAlIGVpbmZvLT5lcmFzZXNpemUgPT0gMCkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJbnVtcmVnaW9ucy0tOwotCQllaW5mbysrOwotCX0KLQotCWlmKCFudW1yZWdpb25zKSB7Ci0JCS8qIE5vdCBhIHZhbGlkIGVyYXNlIGJsb2NrICovCi0JCWVycigiZXJhc2U6IGludmFsaWQgZXJhc2UgcmVxdWVzdCAweCVsWCBAIDB4JTA4elgiLCBsZW4sIGZyb20pOwotCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOwotCQllcnIgPSAtRUlPOwotCX0KLQotCWlmKGluc3RyLT5zdGF0ZSAhPSBNVERfRVJBU0VfRkFJTEVEKSB7Ci0JCS8qIGRvIHRoZSBlcmFzZSAqLwotCQlERUJVRygzLCAiRG9pbmcgZXJhc2UgZnJvbSA9ICV6ZCBsZW4gPSAlbGRcbiIsIGZyb20sIGxlbik7Ci0JCWVyciA9IHdyaXRlX3BhZ2VzKGRldiwgTlVMTCwgZnJvbSwgbGVuLCAmcmV0bGVuKTsKLQkJaWYoZXJyIHx8IHJldGxlbiAhPSBsZW4pIHsKLQkJCWVycigiZXJhc2UgZmFpbGVkIGVyciA9ICVkIiwgZXJyKTsKLQkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7Ci0JCX0gZWxzZSB7Ci0JCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsKLQkJfQotCX0KLQotCURFQlVHKDMsICJibGttdGQ6IGVyYXNlOiBjaGVja2luZyBjYWxsYmFja1xuIik7Ci0JbXRkX2VyYXNlX2NhbGxiYWNrKGluc3RyKTsKLQlERUJVRygyLCAiYmxrbXRkOiBlcmFzZTogZmluaXNoZWQgKGVyciA9ICVkKVxuIiwgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIHJlYWQgYSByYW5nZSBvZiB0aGUgZGF0YSB2aWEgdGhlIHBhZ2UgY2FjaGUgKi8KLXN0YXRpYyBpbnQgYmxrbXRkX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkgICAgICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBibGttdGRfZGV2ICpkZXYgPSBtdGQtPnByaXY7Ci0JaW50IGVyciA9IDA7Ci0JaW50IG9mZnNldDsKLQlpbnQgcGFnZW5yLCBwYWdlczsKLQlzaXplX3QgdGhpc2xlbiA9IDA7Ci0KLQlERUJVRygyLCAiYmxrbXRkOiByZWFkOiBkZXYgPSBgJXMnIGZyb20gPSAlbGxkIGxlbiA9ICV6ZCBidWYgPSAlcFxuIiwKLQkgICAgICBtdGQtPm5hbWUrOSwgZnJvbSwgbGVuLCBidWYpOwotCi0JaWYoZnJvbSA+IG10ZC0+c2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYoZnJvbSArIGxlbiA+IG10ZC0+c2l6ZSkKLQkJbGVuID0gbXRkLT5zaXplIC0gZnJvbTsKLQotCXBhZ2VuciA9IGZyb20gPj4gUEFHRV9TSElGVDsKLQlvZmZzZXQgPSBmcm9tIC0gKHBhZ2VuciA8PCBQQUdFX1NISUZUKTsKLQotCXBhZ2VzID0gKG9mZnNldCtsZW4rUEFHRV9TSVpFLTEpID4+IFBBR0VfU0hJRlQ7Ci0JREVCVUcoMywgImJsa210ZDogcmVhZDogcGFnZW5yID0gJWQgb2Zmc2V0ID0gJWQsIHBhZ2VzID0gJWRcbiIsCi0JICAgICAgcGFnZW5yLCBvZmZzZXQsIHBhZ2VzKTsKLQotCXdoaWxlKHBhZ2VzKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQlpbnQgY3B5bGVuOwotCi0JCURFQlVHKDMsICJibGttdGQ6IHJlYWQ6IGxvb2tpbmcgZm9yIHBhZ2U6ICVkXG4iLCBwYWdlbnIpOwotCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKGRldi0+YmxrZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nLCBwYWdlbnIsIChmaWxsZXJfdCAqKWJsa210ZF9yZWFkcGFnZSwgZGV2KTsKLQkJaWYoSVNfRVJSKHBhZ2UpKSB7Ci0JCQllcnIgPSAtRUlPOwotCQkJZ290byByZWFkZXJyOwotCQl9Ci0KLQkJY3B5bGVuID0gKFBBR0VfU0laRSA+IGxlbikgPyBsZW4gOiBQQUdFX1NJWkU7Ci0JCWlmKG9mZnNldCtjcHlsZW4gPiBQQUdFX1NJWkUpCi0JCQljcHlsZW4gPSBQQUdFX1NJWkUtb2Zmc2V0OwotCi0JCW1lbWNweShidWYgKyB0aGlzbGVuLCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIGNweWxlbik7Ci0JCW9mZnNldCA9IDA7Ci0JCWxlbiAtPSBjcHlsZW47Ci0JCXRoaXNsZW4gKz0gY3B5bGVuOwotCQlwYWdlbnIrKzsKLQkJcGFnZXMtLTsKLQkJaWYoIVBhZ2VEaXJ0eShwYWdlKSkKLQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQl9Ci0KLSByZWFkZXJyOgotCWlmKHJldGxlbikKLQkJKnJldGxlbiA9IHRoaXNsZW47Ci0JREVCVUcoMiwgImJsa210ZDogZW5kIHJlYWQ6IHJldGxlbiA9ICV6ZCwgZXJyID0gJWRcbiIsIHRoaXNsZW4sIGVycik7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi0vKiB3cml0ZSBkYXRhIHRvIHRoZSB1bmRlcmx5aW5nIGRldmljZSAqLwotc3RhdGljIGludCBibGttdGRfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYmxrbXRkX2RldiAqZGV2ID0gbXRkLT5wcml2OwotCWludCBlcnI7Ci0KLQlpZighbGVuKQotCQlyZXR1cm4gMDsKLQotCURFQlVHKDIsICJibGttdGQ6IHdyaXRlOiBkZXYgPSBgJXMnIHRvID0gJWxsZCBsZW4gPSAlemQgYnVmID0gJXBcbiIsCi0JICAgICAgbXRkLT5uYW1lKzksIHRvLCBsZW4sIGJ1Zik7Ci0KLQlpZih0byA+PSBtdGQtPnNpemUpIHsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JaWYodG8gKyBsZW4gPiBtdGQtPnNpemUpIHsKLQkJbGVuID0gbXRkLT5zaXplIC0gdG87Ci0JfQotCi0JZXJyID0gd3JpdGVfcGFnZXMoZGV2LCBidWYsIHRvLCBsZW4sIHJldGxlbik7Ci0JaWYoZXJyID4gMCkKLQkJZXJyID0gMDsKLQlERUJVRygyLCAiYmxrbXRkOiB3cml0ZTogZW5kLCBlcnIgPSAlZFxuIiwgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIHN5bmMgdGhlIGRldmljZSAtIHdhaXQgdW50aWwgdGhlIHdyaXRlIHF1ZXVlIGlzIGVtcHR5ICovCi1zdGF0aWMgdm9pZCBibGttdGRfc3luYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQkvKiBDdXJyZW50bHkgYWxsIHdyaXRlcyBhcmUgc3luY2hyb25vdXMgKi8KLX0KLQotCi1zdGF0aWMgdm9pZCBmcmVlX2RldmljZShzdHJ1Y3QgYmxrbXRkX2RldiAqZGV2KQotewotCURFQlVHKDIsICJibGttdGQ6IGZyZWVfZGV2aWNlKCkgZGV2ID0gJXBcbiIsIGRldik7Ci0JaWYoZGV2KSB7Ci0JCWtmcmVlKGRldi0+bXRkX2luZm8uZXJhc2VyZWdpb25zKTsKLQkJa2ZyZWUoZGV2LT5tdGRfaW5mby5uYW1lKTsKLQkJaWYoZGV2LT5ibGtkZXYpIHsKLQkJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMoZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcpOwotCQkJY2xvc2VfYmRldl9leGNsKGRldi0+YmxrZGV2KTsKLQkJfQotCQlrZnJlZShkZXYpOwotCX0KLX0KLQotCi0vKiBGb3IgYSBnaXZlbiBzaXplIGFuZCBpbml0aWFsIGVyYXNlIHNpemUsIGNhbGN1bGF0ZSB0aGUgbnVtYmVyCi0gKiBhbmQgc2l6ZSBvZiBlYWNoIGVyYXNlIHJlZ2lvbi4gR29lcyByb3VuZCB0aGUgbG9vcCB0d2ljZSwKLSAqIG9uY2UgdG8gZmluZCBvdXQgaG93IG1hbnkgcmVnaW9ucywgdGhlbiBhbGxvY2F0ZXMgc3BhY2UsCi0gKiB0aGVuIHJvdW5kIHRoZSBsb29wIGFnYWluIHRvIGZpbGwgaXQgaW4uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvICpjYWxjX2VyYXNlX3JlZ2lvbnMoCi0Jc2l6ZV90IGVyYXNlX3NpemUsIHNpemVfdCB0b3RhbF9zaXplLCBpbnQgKnJlZ2lvbnMpCi17Ci0Jc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyAqaW5mbyA9IE5VTEw7Ci0KLQlERUJVRygyLCAiY2FsY19lcmFzZV9yZWdpb25zLCBlcyA9ICV6ZCBzaXplID0gJXpkIHJlZ2lvbnMgPSAlZFxuIiwKLQkgICAgICBlcmFzZV9zaXplLCB0b3RhbF9zaXplLCAqcmVnaW9ucyk7Ci0JLyogTWFrZSBhbnkgdXNlciBzcGVjaWZpZWQgZXJhc2VzaXplIGJlIGEgcG93ZXIgb2YgMgotCSAgIGFuZCBhdCBsZWFzdCBQQUdFX1NJWkUgKi8KLQlpZihlcmFzZV9zaXplKSB7Ci0JCWludCBlcyA9IGVyYXNlX3NpemU7Ci0JCWVyYXNlX3NpemUgPSAxOwotCQl3aGlsZShlcyAhPSAxKSB7Ci0JCQllcyA+Pj0gMTsKLQkJCWVyYXNlX3NpemUgPDw9IDE7Ci0JCX0KLQkJaWYoZXJhc2Vfc2l6ZSA8IFBBR0VfU0laRSkKLQkJCWVyYXNlX3NpemUgPSBQQUdFX1NJWkU7Ci0JfSBlbHNlIHsKLQkJZXJhc2Vfc2l6ZSA9IENPTkZJR19NVERfQkxLREVWX0VSQVNFU0laRTsKLQl9Ci0KLQkqcmVnaW9ucyA9IDA7Ci0KLQlkbyB7Ci0JCWludCB0b3Rfc2l6ZSA9IHRvdGFsX3NpemU7Ci0JCWludCBlcl9zaXplID0gZXJhc2Vfc2l6ZTsKLQkJaW50IGNvdW50ID0gMCwgb2Zmc2V0ID0gMCwgcmVnY250ID0gMDsKLQotCQl3aGlsZSh0b3Rfc2l6ZSkgewotCQkJY291bnQgPSB0b3Rfc2l6ZSAvIGVyX3NpemU7Ci0JCQlpZihjb3VudCkgewotCQkJCXRvdF9zaXplID0gdG90X3NpemUgJSBlcl9zaXplOwotCQkJCWlmKGluZm8pIHsKLQkJCQkJREVCVUcoMiwgImFkZGluZyB0byBlcmFzZSBpbmZvIG9mZj0lZCBlcj0lZCBjbnQ9JWRcbiIsCi0JCQkJCSAgICAgIG9mZnNldCwgZXJfc2l6ZSwgY291bnQpOwotCQkJCQkoaW5mbytyZWdjbnQpLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQkJCShpbmZvK3JlZ2NudCktPmVyYXNlc2l6ZSA9IGVyX3NpemU7Ci0JCQkJCShpbmZvK3JlZ2NudCktPm51bWJsb2NrcyA9IGNvdW50OwotCQkJCQkoKnJlZ2lvbnMpKys7Ci0JCQkJfQotCQkJCXJlZ2NudCsrOwotCQkJCW9mZnNldCArPSAoY291bnQgKiBlcl9zaXplKTsKLQkJCX0KLQkJCXdoaWxlKGVyX3NpemUgPiB0b3Rfc2l6ZSkKLQkJCQllcl9zaXplID4+PSAxOwotCQl9Ci0JCWlmKGluZm8gPT0gTlVMTCkgewotCQkJaW5mbyA9IGttYWxsb2MocmVnY250ICogc2l6ZW9mKHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8pLCBHRlBfS0VSTkVMKTsKLQkJCWlmKCFpbmZvKQotCQkJCWJyZWFrOwotCQl9Ci0JfSB3aGlsZSghKCpyZWdpb25zKSk7Ci0JREVCVUcoMiwgImNhbGNfZXJhc2VfcmVnaW9ucyBkb25lLCBlcyA9ICV6ZCBzaXplID0gJXpkIHJlZ2lvbnMgPSAlZFxuIiwKLQkgICAgICBlcmFzZV9zaXplLCB0b3RhbF9zaXplLCAqcmVnaW9ucyk7Ci0JcmV0dXJuIGluZm87Ci19Ci0KLQotZXh0ZXJuIGRldl90IF9faW5pdCBuYW1lX3RvX2Rldl90KGNvbnN0IGNoYXIgKmxpbmUpOwotCi1zdGF0aWMgc3RydWN0IGJsa210ZF9kZXYgKmFkZF9kZXZpY2UoY2hhciAqZGV2bmFtZSwgaW50IHJlYWRvbmx5LCBpbnQgZXJhc2Vfc2l6ZSkKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCWludCBtb2RlOwotCXN0cnVjdCBibGttdGRfZGV2ICpkZXY7Ci0KLQlpZighZGV2bmFtZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBHZXQgYSBoYW5kbGUgb24gdGhlIGRldmljZSAqLwotCi0KLSNpZmRlZiBNT0RVTEUKLQltb2RlID0gKHJlYWRvbmx5KSA/IE9fUkRPTkxZIDogT19SRFdSOwotCWJkZXYgPSBvcGVuX2JkZXZfZXhjbChkZXZuYW1lLCBtb2RlLCBOVUxMKTsKLSNlbHNlCi0JbW9kZSA9IChyZWFkb25seSkgPyBGTU9ERV9SRUFEIDogRk1PREVfV1JJVEU7Ci0JYmRldiA9IG9wZW5fYnlfZGV2bnVtKG5hbWVfdG9fZGV2X3QoZGV2bmFtZSksIG1vZGUpOwotI2VuZGlmCi0JaWYoSVNfRVJSKGJkZXYpKSB7Ci0JCWVycigiZXJyb3I6IGNhbm5vdCBvcGVuIGRldmljZSAlcyIsIGRldm5hbWUpOwotCQlERUJVRygyLCAiYmxrbXRkOiBvcGVuaW5nIGJkZXYgcmV0dXJuZWQgJWxkXG4iLCBQVFJfRVJSKGJkZXYpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JREVCVUcoMSwgImJsa210ZDogZm91bmQgYSBibG9jayBkZXZpY2UgbWFqb3IgPSAlZCwgbWlub3IgPSAlZFxuIiwKLQkgICAgICBNQUpPUihiZGV2LT5iZF9kZXYpLCBNSU5PUihiZGV2LT5iZF9kZXYpKTsKLQotCWlmKE1BSk9SKGJkZXYtPmJkX2RldikgPT0gTVREX0JMT0NLX01BSk9SKSB7Ci0JCWVycigiYXR0ZW1wdGluZyB0byB1c2UgYW4gTVREIGRldmljZSBhcyBhIGJsb2NrIGRldmljZSIpOwotCQlibGtkZXZfcHV0KGJkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxrbXRkX2RldiksIEdGUF9LRVJORUwpOwotCWlmKGRldiA9PSBOVUxMKSB7Ci0JCWJsa2Rldl9wdXQoYmRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgYmxrbXRkX2RldikpOwotCWRldi0+YmxrZGV2ID0gYmRldjsKLQlpZighcmVhZG9ubHkpIHsKLQkJaW5pdF9NVVRFWCgmZGV2LT53cmJ1Zl9tdXRleCk7Ci0JfQotCi0JZGV2LT5tdGRfaW5mby5zaXplID0gZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX3NpemUgJiBQQUdFX01BU0s7Ci0KLQkvKiBTZXR1cCB0aGUgTVREIHN0cnVjdHVyZSAqLwotCS8qIG1ha2UgdGhlIG5hbWUgY29udGFpbiB0aGUgYmxvY2sgZGV2aWNlIGluICovCi0JZGV2LT5tdGRfaW5mby5uYW1lID0ga21hbGxvYyhzaXplb2YoImJsa210ZDogIikgKyBzdHJsZW4oZGV2bmFtZSksIEdGUF9LRVJORUwpOwotCWlmKGRldi0+bXRkX2luZm8ubmFtZSA9PSBOVUxMKQotCQlnb3RvIGRldmluaXRfZXJyOwotCi0Jc3ByaW50ZihkZXYtPm10ZF9pbmZvLm5hbWUsICJibGttdGQ6ICVzIiwgZGV2bmFtZSk7Ci0JZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMgPSBjYWxjX2VyYXNlX3JlZ2lvbnMoZXJhc2Vfc2l6ZSwgZGV2LT5tdGRfaW5mby5zaXplLAotCQkJCQkJCSZkZXYtPm10ZF9pbmZvLm51bWVyYXNlcmVnaW9ucyk7Ci0JaWYoZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMgPT0gTlVMTCkKLQkJZ290byBkZXZpbml0X2VycjsKLQotCWRldi0+bXRkX2luZm8uZXJhc2VzaXplID0gZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMtPmVyYXNlc2l6ZTsKLQlERUJVRygxLCAiYmxrbXRkOiBpbml0OiBmb3VuZCAlZCBlcmFzZSByZWdpb25zXG4iLAotCSAgICAgIGRldi0+bXRkX2luZm8ubnVtZXJhc2VyZWdpb25zKTsKLQotCWlmKHJlYWRvbmx5KSB7Ci0JCWRldi0+bXRkX2luZm8udHlwZSA9IE1URF9ST007Ci0JCWRldi0+bXRkX2luZm8uZmxhZ3MgPSBNVERfQ0FQX1JPTTsKLQl9IGVsc2UgewotCQlkZXYtPm10ZF9pbmZvLnR5cGUgPSBNVERfUkFNOwotCQlkZXYtPm10ZF9pbmZvLmZsYWdzID0gTVREX0NBUF9SQU07Ci0JCWRldi0+bXRkX2luZm8uZXJhc2UgPSBibGttdGRfZXJhc2U7Ci0JCWRldi0+bXRkX2luZm8ud3JpdGUgPSBibGttdGRfd3JpdGU7Ci0JCWRldi0+bXRkX2luZm8ud3JpdGV2ID0gZGVmYXVsdF9tdGRfd3JpdGV2OwotCQlkZXYtPm10ZF9pbmZvLnN5bmMgPSBibGttdGRfc3luYzsKLQl9Ci0JZGV2LT5tdGRfaW5mby5yZWFkID0gYmxrbXRkX3JlYWQ7Ci0JZGV2LT5tdGRfaW5mby5yZWFkdiA9IGRlZmF1bHRfbXRkX3JlYWR2OwotCWRldi0+bXRkX2luZm8ucHJpdiA9IGRldjsKLQlkZXYtPm10ZF9pbmZvLm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlsaXN0X2FkZCgmZGV2LT5saXN0LCAmYmxrbXRkX2RldmljZV9saXN0KTsKLQlpZiAoYWRkX210ZF9kZXZpY2UoJmRldi0+bXRkX2luZm8pKSB7Ci0JCS8qIERldmljZSBkaWRudCBnZXQgYWRkZWQsIHNvIGZyZWUgdGhlIGVudHJ5ICovCi0JCWxpc3RfZGVsKCZkZXYtPmxpc3QpOwotCQlnb3RvIGRldmluaXRfZXJyOwotCX0gZWxzZSB7Ci0JCWluZm8oIm10ZCVkOiBbJXNdIGVyYXNlX3NpemUgPSAlZEtpQiAlcyIsCi0JCSAgICAgZGV2LT5tdGRfaW5mby5pbmRleCwgZGV2LT5tdGRfaW5mby5uYW1lICsgc3RybGVuKCJibGttdGQ6ICIpLAotCQkgICAgIGRldi0+bXRkX2luZm8uZXJhc2VzaXplID4+IDEwLAotCQkgICAgIHJlYWRvbmx5ID8gIihyZWFkLW9ubHkpIiA6ICIiKTsKLQl9Ci0KLQlyZXR1cm4gZGV2OwotCi0gZGV2aW5pdF9lcnI6Ci0JZnJlZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotCi0vKiBDbGVhbnVwIGFuZCBleGl0IC0gc3luYyB0aGUgZGV2aWNlIGFuZCBraWxsIG9mIHRoZSBrZXJuZWwgdGhyZWFkICovCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgY2xlYW51cF9ibGttdGQodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wMSwgKnRlbXAyOwotCi0JLyogUmVtb3ZlIHRoZSBNVEQgZGV2aWNlcyAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZSh0ZW1wMSwgdGVtcDIsICZibGttdGRfZGV2aWNlX2xpc3QpIHsKLQkJc3RydWN0IGJsa210ZF9kZXYgKmRldiA9IGxpc3RfZW50cnkodGVtcDEsIHN0cnVjdCBibGttdGRfZGV2LAotCQkJCQkJICAgIGxpc3QpOwotCQlibGttdGRfc3luYygmZGV2LT5tdGRfaW5mbyk7Ci0JCWRlbF9tdGRfZGV2aWNlKCZkZXYtPm10ZF9pbmZvKTsKLQkJaW5mbygibXRkJWQ6IFslc10gcmVtb3ZlZCIsIGRldi0+bXRkX2luZm8uaW5kZXgsCi0JCSAgICAgZGV2LT5tdGRfaW5mby5uYW1lICsgc3RybGVuKCJibGttdGQ6ICIpKTsKLQkJbGlzdF9kZWwoJmRldi0+bGlzdCk7Ci0JCWZyZWVfZGV2aWNlKGRldik7Ci0JfQotfQotCi0jaWZuZGVmIE1PRFVMRQotCi0vKiBIYW5kbGUga2VybmVsIGJvb3QgcGFyYW1zICovCi0KLQotc3RhdGljIGludCBfX2luaXQgcGFyYW1fYmxrbXRkX2RldmljZShjaGFyICpzdHIpCi17Ci0JaW50IGk7Ci0KLQlmb3IoaSA9IDA7IGkgPCBNQVhfREVWSUNFUzsgaSsrKSB7Ci0JCWRldmljZVtpXSA9IHN0cjsKLQkJREVCVUcoMiwgImJsa210ZDogZGV2aWNlIHNldHVwOiAlZCA9ICVzXG4iLCBpLCBkZXZpY2VbaV0pOwotCQlzdHJzZXAoJnN0ciwgIiwiKTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIGludCBfX2luaXQgcGFyYW1fYmxrbXRkX2VyYXNlc3ooY2hhciAqc3RyKQotewotCWludCBpOwotCWZvcihpID0gMDsgaSA8IE1BWF9ERVZJQ0VTOyBpKyspIHsKLQkJY2hhciAqdmFsID0gc3Ryc2VwKCZzdHIsICIsIik7Ci0JCWlmKHZhbCkKLQkJCWVyYXNlc3pbaV0gPSBzaW1wbGVfc3RydG91bCh2YWwsIE5VTEwsIDApOwotCQlERUJVRygyLCAiYmxrbXRkOiBlcmFzZXN6IHNldHVwOiAlZCA9ICVkXG4iLCBpLCBlcmFzZXN6W2ldKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9ibGttdGRfcm8oY2hhciAqc3RyKQotewotCWludCBpOwotCWZvcihpID0gMDsgaSA8IE1BWF9ERVZJQ0VTOyBpKyspIHsKLQkJY2hhciAqdmFsID0gc3Ryc2VwKCZzdHIsICIsIik7Ci0JCWlmKHZhbCkKLQkJCXJvW2ldID0gc2ltcGxlX3N0cnRvdWwodmFsLCBOVUxMLCAwKTsKLQkJREVCVUcoMiwgImJsa210ZDogcm8gc2V0dXA6ICVkID0gJWRcbiIsIGksIHJvW2ldKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9ibGttdGRfc3luYyhjaGFyICpzdHIpCi17Ci0JaWYoc3RyWzBdID09ICcxJykKLQkJc3luYyA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImJsa210ZF9kZXZpY2U9IiwgcGFyYW1fYmxrbXRkX2RldmljZSk7Ci1fX3NldHVwKCJibGttdGRfZXJhc2Vzej0iLCBwYXJhbV9ibGttdGRfZXJhc2Vzeik7Ci1fX3NldHVwKCJibGttdGRfcm89IiwgcGFyYW1fYmxrbXRkX3JvKTsKLV9fc2V0dXAoImJsa210ZF9zeW5jPSIsIHBhcmFtX2Jsa210ZF9zeW5jKTsKLQotI2VuZGlmCi0KLQotLyogU3RhcnR1cCAqLwotc3RhdGljIGludCBfX2luaXQgaW5pdF9ibGttdGQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWluZm8oInZlcnNpb24gIiBWRVJTSU9OKTsKLQkvKiBDaGVjayBhcmdzIC0gZGV2aWNlWzBdIGlzIHRoZSBiYXJlIG1pbmltdW0qLwotCWlmKCFkZXZpY2VbMF0pIHsKLQkJZXJyKCJlcnJvcjogbWlzc2luZyBgZGV2aWNlJyBuYW1lXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yKGkgPSAwOyBpIDwgTUFYX0RFVklDRVM7IGkrKykKLQkJYWRkX2RldmljZShkZXZpY2VbaV0sIHJvW2ldLCBlcmFzZXN6W2ldIDw8IDEwKTsKLQotCWlmKGxpc3RfZW1wdHkoJmJsa210ZF9kZXZpY2VfbGlzdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfYmxrbXRkKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfYmxrbXRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCmluZGV4IDdmZjQwM2IuLjQxNjBiODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIFZFUlNJT04gIiRSZXZpc2lvbjogMS4zMCAkIgogCkBAIC0zMSw3ICszMiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJsa2RldjsKIAlzdHJ1Y3QgbXRkX2luZm8gbXRkOwotCXN0cnVjdCBzZW1hcGhvcmUgd3JpdGVfbXV0ZXg7CisJc3RydWN0IG11dGV4IHdyaXRlX211dGV4OwogfTsKIAogCkBAIC0xMzQsOSArMTM1LDkgQEAKIAlpbnQgZXJyOwogCiAJaW5zdHItPnN0YXRlID0gTVREX0VSQVNJTkc7Ci0JZG93bigmZGV2LT53cml0ZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmZGV2LT53cml0ZV9tdXRleCk7CiAJZXJyID0gX2Jsb2NrMm10ZF9lcmFzZShkZXYsIGZyb20sIGxlbik7Ci0JdXAoJmRldi0+d3JpdGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZGV2LT53cml0ZV9tdXRleCk7CiAJaWYgKGVycikgewogCQlFUlJPUigiZXJhc2UgZmFpbGVkIGVyciA9ICVkIiwgZXJyKTsKIAkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKQEAgLTI0OSw5ICsyNTAsOSBAQAogCWlmICh0byArIGxlbiA+IG10ZC0+c2l6ZSkKIAkJbGVuID0gbXRkLT5zaXplIC0gdG87CiAKLQlkb3duKCZkZXYtPndyaXRlX211dGV4KTsKKwltdXRleF9sb2NrKCZkZXYtPndyaXRlX211dGV4KTsKIAllcnIgPSBfYmxvY2sybXRkX3dyaXRlKGRldiwgYnVmLCB0bywgbGVuLCByZXRsZW4pOwotCXVwKCZkZXYtPndyaXRlX211dGV4KTsKKwltdXRleF91bmxvY2soJmRldi0+d3JpdGVfbXV0ZXgpOwogCWlmIChlcnIgPiAwKQogCQllcnIgPSAwOwogCXJldHVybiBlcnI7CkBAIC0zMTAsNyArMzExLDcgQEAKIAkJZ290byBkZXZpbml0X2VycjsKIAl9CiAKLQlpbml0X01VVEVYKCZkZXYtPndyaXRlX211dGV4KTsKKwltdXRleF9pbml0KCZkZXYtPndyaXRlX211dGV4KTsKIAogCS8qIFNldHVwIHRoZSBNVEQgc3RydWN0dXJlICovCiAJLyogbWFrZSB0aGUgbmFtZSBjb250YWluIHRoZSBibG9jayBkZXZpY2UgaW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAwLmMKaW5kZXggZTQzNDVjZi4uMjNlN2E1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAwLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CkBAIC02MDUsNyArNjA2LDcgQEAKIAogCXRoaXMtPmN1cmZsb29yID0gLTE7CiAJdGhpcy0+Y3VyY2hpcCA9IC0xOwotCWluaXRfTVVURVgoJnRoaXMtPmxvY2spOworCW11dGV4X2luaXQoJnRoaXMtPmxvY2spOwogCiAJLyogSWRlbnQgYWxsIHRoZSBjaGlwcyBwcmVzZW50LiAqLwogCURvQ19TY2FuQ2hpcHModGhpcywgbWF4Y2hpcHMpOwpAQCAtNjQ1LDcgKzY0Niw3IEBACiAJaWYgKGZyb20gPj0gdGhpcy0+dG90bGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJnRoaXMtPmxvY2spOworCW11dGV4X2xvY2soJnRoaXMtPmxvY2spOwogCiAJKnJldGxlbiA9IDA7CiAJd2hpbGUgKGxlZnQpIHsKQEAgLTc3NCw3ICs3NzUsNyBAQAogCQlidWYgKz0gbGVuOwogCX0KIAotCXVwKCZ0aGlzLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnRoaXMtPmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTgwMyw3ICs4MDQsNyBAQAogCWlmICh0byA+PSB0aGlzLT50b3RsZW4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG93bigmdGhpcy0+bG9jayk7CisJbXV0ZXhfbG9jaygmdGhpcy0+bG9jayk7CiAKIAkqcmV0bGVuID0gMDsKIAl3aGlsZSAobGVmdCkgewpAQCAtODczLDcgKzg3NCw3IEBACiAJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBwcm9ncmFtbWluZyBmbGFzaFxuIik7CiAJCQkJLyogRXJyb3IgaW4gcHJvZ3JhbW1pbmcgKi8KIAkJCQkqcmV0bGVuID0gMDsKLQkJCQl1cCgmdGhpcy0+bG9jayk7CisJCQkJbXV0ZXhfdW5sb2NrKCZ0aGlzLT5sb2NrKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KIApAQCAtOTM1LDcgKzkzNiw3IEBACiAJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHByb2dyYW1taW5nIGZsYXNoXG4iKTsKIAkJCS8qIEVycm9yIGluIHByb2dyYW1taW5nICovCiAJCQkqcmV0bGVuID0gMDsKLQkJCXVwKCZ0aGlzLT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmdGhpcy0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCkBAIC05NTYsNyArOTU3LDcgQEAKIAogCQkJcmV0ID0gZG9jX3dyaXRlX29vYl9ub2xvY2sobXRkLCB0bywgOCwgJmR1bW15LCB4KTsKIAkJCWlmIChyZXQpIHsKLQkJCQl1cCgmdGhpcy0+bG9jayk7CisJCQkJbXV0ZXhfdW5sb2NrKCZ0aGlzLT5sb2NrKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQl9CkBAIC05NjYsNyArOTY3LDcgQEAKIAkJYnVmICs9IGxlbjsKIAl9CiAKLQl1cCgmdGhpcy0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0aGlzLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTc1LDEzICs5NzYsMTMgQEAKIAkJCSAgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKIHsKIAlzdGF0aWMgY2hhciBzdGF0aWNfYnVmWzUxMl07Ci0Jc3RhdGljIERFQ0xBUkVfTVVURVgod3JpdGV2X2J1Zl9zZW0pOworCXN0YXRpYyBERUZJTkVfTVVURVgod3JpdGV2X2J1Zl9tdXRleCk7CiAKIAlzaXplX3QgdG90cmV0bGVuID0gMDsKIAlzaXplX3QgdGhpc3ZlY29mcyA9IDA7CiAJaW50IHJldD0gMDsKIAotCWRvd24oJndyaXRldl9idWZfc2VtKTsKKwltdXRleF9sb2NrKCZ3cml0ZXZfYnVmX211dGV4KTsKIAogCXdoaWxlKGNvdW50KSB7CiAJCXNpemVfdCB0aGlzbGVuLCB0aGlzcmV0bGVuOwpAQCAtMTAyNCw3ICsxMDI1LDcgQEAKIAkJdG8gKz0gdGhpc2xlbjsKIAl9CiAKLQl1cCgmd3JpdGV2X2J1Zl9zZW0pOworCW11dGV4X3VubG9jaygmd3JpdGV2X2J1Zl9tdXRleCk7CiAJKnJldGxlbiA9IHRvdHJldGxlbjsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTAzNyw3ICsxMDM4LDcgQEAKIAlpbnQgbGVuMjU2ID0gMCwgcmV0OwogCXN0cnVjdCBOYW5kICpteWNoaXA7CiAKLQlkb3duKCZ0aGlzLT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0aGlzLT5sb2NrKTsKIAogCW15Y2hpcCA9ICZ0aGlzLT5jaGlwc1tvZnMgPj4gdGhpcy0+Y2hpcHNoaWZ0XTsKIApAQCAtMTA4Myw3ICsxMDg0LDcgQEAKIAogCXJldCA9IERvQ19XYWl0UmVhZHkodGhpcyk7CiAKLQl1cCgmdGhpcy0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0aGlzLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogCiB9CkBAIC0xMTk3LDEwICsxMTk4LDEwIEBACiAgCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwogIAlpbnQgcmV0OwogCi0gCWRvd24oJnRoaXMtPmxvY2spOworIAltdXRleF9sb2NrKCZ0aGlzLT5sb2NrKTsKICAJcmV0ID0gZG9jX3dyaXRlX29vYl9ub2xvY2sobXRkLCBvZnMsIGxlbiwgcmV0bGVuLCBidWYpOwogCi0gCXVwKCZ0aGlzLT5sb2NrKTsKKyAJbXV0ZXhfdW5sb2NrKCZ0aGlzLT5sb2NrKTsKICAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIxNCwxMCArMTIxNSwxMCBAQAogCXN0cnVjdCBOYW5kICpteWNoaXA7CiAJaW50IHN0YXR1czsKIAotIAlkb3duKCZ0aGlzLT5sb2NrKTsKKyAJbXV0ZXhfbG9jaygmdGhpcy0+bG9jayk7CiAKIAlpZiAob2ZzICYgKG10ZC0+ZXJhc2VzaXplLTEpIHx8IGxlbiAmIChtdGQtPmVyYXNlc2l6ZS0xKSkgewotCQl1cCgmdGhpcy0+bG9jayk7CisJCW11dGV4X3VubG9jaygmdGhpcy0+bG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTI2NSw3ICsxMjY2LDcgQEAKICBjYWxsYmFjazoKIAltdGRfZXJhc2VfY2FsbGJhY2soaW5zdHIpOwogCi0JdXAoJnRoaXMtPmxvY2spOworCW11dGV4X3VubG9jaygmdGhpcy0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbGFydC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKaW5kZXggMWU4NzZmYy4uMjliMGRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKQEAgLTU4MSw4ICs1ODEsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIE5CX09GKHgpIChzaXplb2YgKHgpIC8gc2l6ZW9mICh4WzBdKSkKLQogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyBtdGQ7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvIGVyYXNlX3JlZ2lvbnNbXSA9IHsKQEAgLTY0MCw3ICs2MzgsNyBAQAogICAgbXRkLmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKICAgIG10ZC5zaXplID0gRkxBU0hfQkxPQ0tTSVpFX1BBUkFNICogRkxBU0hfTlVNQkxPQ0tTXzE2bV9QQVJBTSArIEZMQVNIX0JMT0NLU0laRV9NQUlOICogRkxBU0hfTlVNQkxPQ0tTXzE2bV9NQUlOOwogICAgbXRkLmVyYXNlc2l6ZSA9IEZMQVNIX0JMT0NLU0laRV9NQUlOOwotICAgbXRkLm51bWVyYXNlcmVnaW9ucyA9IE5CX09GIChlcmFzZV9yZWdpb25zKTsKKyAgIG10ZC5udW1lcmFzZXJlZ2lvbnMgPSBBUlJBWV9TSVpFKGVyYXNlX3JlZ2lvbnMpOwogICAgbXRkLmVyYXNlcmVnaW9ucyA9IGVyYXNlX3JlZ2lvbnM7CiAgICBtdGQuZXJhc2UgPSBmbGFzaF9lcmFzZTsKICAgIG10ZC5yZWFkID0gZmxhc2hfcmVhZDsKQEAgLTY3MCw5ICs2NjgsOSBAQAogCQkJICAgcmVzdWx0LG10ZC5lcmFzZXJlZ2lvbnNbcmVzdWx0XS5udW1ibG9ja3MpOwogCiAjaWZkZWYgSEFWRV9QQVJUSVRJT05TCi0gICBwcmludGsgKCJcbnBhcnRpdGlvbnMgPSAlZFxuIixOQl9PRiAobGFydF9wYXJ0aXRpb25zKSk7CisgICBwcmludGsgKCJcbnBhcnRpdGlvbnMgPSAlZFxuIiwgQVJSQVlfU0laRShsYXJ0X3BhcnRpdGlvbnMpKTsKIAotICAgZm9yIChyZXN1bHQgPSAwOyByZXN1bHQgPCBOQl9PRiAobGFydF9wYXJ0aXRpb25zKTsgcmVzdWx0KyspCisgICBmb3IgKHJlc3VsdCA9IDA7IHJlc3VsdCA8IEFSUkFZX1NJWkUobGFydF9wYXJ0aXRpb25zKTsgcmVzdWx0KyspCiAJIHByaW50ayAoS0VSTl9ERUJVRwogCQkJICJcblxuIgogCQkJICJsYXJ0X3BhcnRpdGlvbnNbJWRdLm5hbWUgPSAlc1xuIgpAQCAtNjg3LDcgKzY4NSw3IEBACiAjaWZuZGVmIEhBVkVfUEFSVElUSU9OUwogICAgcmVzdWx0ID0gYWRkX210ZF9kZXZpY2UgKCZtdGQpOwogI2Vsc2UKLSAgIHJlc3VsdCA9IGFkZF9tdGRfcGFydGl0aW9ucyAoJm10ZCxsYXJ0X3BhcnRpdGlvbnMsTkJfT0YgKGxhcnRfcGFydGl0aW9ucykpOworICAgcmVzdWx0ID0gYWRkX210ZF9wYXJ0aXRpb25zICgmbXRkLGxhcnRfcGFydGl0aW9ucywgQVJSQVlfU0laRShsYXJ0X3BhcnRpdGlvbnMpKTsKICNlbmRpZgogCiAgICByZXR1cm4gKHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwppbmRleCBkNWYyNDA4Li4wNGU2NWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCXN0cnVjdCBtMjVwICpmbGFzaCA9IG10ZF90b19tMjVwKG10ZCk7CiAJdTMyIGFkZHIsbGVuOwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMiwgIiVzOiAlcyAlcyAweCUwOHgsIGxlbiAlemRcbiIsCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMiwgIiVzOiAlcyAlcyAweCUwOHgsIGxlbiAlZFxuIiwKIAkJCWZsYXNoLT5zcGktPmRldi5idXNfaWQsIF9fRlVOQ1RJT05fXywgImF0IiwKIAkJCSh1MzIpaW5zdHItPmFkZHIsIGluc3RyLT5sZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCmluZGV4IDBmZjJlNDMuLjQ4NWY2NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCkBAIC0zMDgsNyArMzA4LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IChzaXplb2YobXMwMm52X2FkZHJzKSAvIHNpemVvZigqbXMwMm52X2FkZHJzKSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtczAybnZfYWRkcnMpOyBpKyspCiAJCWlmICghbXMwMm52X2luaXRfb25lKG1zMDJudl9hZGRyc1tpXSA8PCBzdHJpZGUpKQogCQkJY291bnQrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMgYi9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYwppbmRleCA4YTU0NDg5Li5hM2I5MjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYwpAQCAtNDcsOSArNDcsNiBAQAogICovCiAjZGVmaW5lIE1BWF9MT09QUyAxMDAwMAogCi1leHRlcm4gdm9pZCBJTkZUTF9kdW1wdGFibGVzKHN0cnVjdCBJTkZUTHJlY29yZCAqaW5mdGwpOwotZXh0ZXJuIHZvaWQgSU5GVExfZHVtcFZVY2hhaW5zKHN0cnVjdCBJTkZUTHJlY29yZCAqaW5mdGwpOwotCiBzdGF0aWMgdm9pZCBpbmZ0bF9hZGRfbXRkKHN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzICp0ciwgc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJc3RydWN0IElORlRMcmVjb3JkICppbmZ0bDsKQEAgLTEzMiw3ICsxMjksNyBAQAogCQlyZXR1cm47CiAJfQogI2lmZGVmIFBTWUNIT19ERUJVRwotCXByaW50ayhLRVJOX0lORk8gIklORlRMOiBGb3VuZCBuZXcgbmZ0bCVjXG4iLCBuZnRsLT5tYmQuZGV2bnVtICsgJ2EnKTsKKwlwcmludGsoS0VSTl9JTkZPICJJTkZUTDogRm91bmQgbmV3IGluZnRsJWNcbiIsIGluZnRsLT5tYmQuZGV2bnVtICsgJ2EnKTsKICNlbmRpZgogCXJldHVybjsKIH0KQEAgLTg4NSw4ICs4ODIsNiBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIH07CiAKLWV4dGVybiBjaGFyIGluZnRsbW91bnRyZXZbXTsKLQogc3RhdGljIGludCBfX2luaXQgaW5pdF9pbmZ0bCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIklORlRMOiBpbmZ0bGNvcmUuYyAkUmV2aXNpb246IDEuMTkgJCwgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2FsY2hlbXktZmxhc2guYwppbmRleCBhNTc3OTFhLi5iOTMzYTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2FsY2hlbXktZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2FsY2hlbXktZmxhc2guYwpAQCAtMTI2LDggKzEyNiw2IEBACiAgICAgICAgIH0KIH07CiAKLSNkZWZpbmUgTkJfT0YoeCkgIChzaXplb2YoeCkvc2l6ZW9mKHhbMF0pKQotCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpteW10ZDsKIAogaW50IF9faW5pdCBhbGNoZW15X210ZF9pbml0KHZvaWQpCkBAIC0xNTQsNyArMTUyLDcgQEAKIAkgKiBTdGF0aWMgcGFydGl0aW9uIGRlZmluaXRpb24gc2VsZWN0aW9uCiAJICovCiAJcGFydHMgPSBhbGNoZW15X3BhcnRpdGlvbnM7Ci0JbmJfcGFydHMgPSBOQl9PRihhbGNoZW15X3BhcnRpdGlvbnMpOworCW5iX3BhcnRzID0gQVJSQVlfU0laRShhbGNoZW15X3BhcnRpdGlvbnMpOwogCWFsY2hlbXlfbWFwLnNpemUgPSB3aW5kb3dfc2l6ZTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMgYi9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMKaW5kZXggNmE4YzA0MS4uZmQwZjBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYwpAQCAtODYsNyArODYsNyBAQAogCX0KIH07CiAKLSNkZWZpbmUgUEFSVElUSU9OX0NPVU5UIChzaXplb2YoZmxhZ2FkbV9wYXJ0cykvc2l6ZW9mKHN0cnVjdCBtdGRfcGFydGl0aW9uKSkKKyNkZWZpbmUgUEFSVElUSU9OX0NPVU5UIEFSUkFZX1NJWkUoZmxhZ2FkbV9wYXJ0cykKIAogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZGJveDItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvZGJveDItZmxhc2guYwppbmRleCA0OWQ5MDU0Li42NTI4MTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9kYm94Mi1mbGFzaC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJfQogfTsKIAotI2RlZmluZSBOVU1fUEFSVElUSU9OUyAoc2l6ZW9mKHBhcnRpdGlvbl9pbmZvKSAvIHNpemVvZihwYXJ0aXRpb25faW5mb1swXSkpCisjZGVmaW5lIE5VTV9QQVJUSVRJT05TIEFSUkFZX1NJWkUocGFydGl0aW9uX2luZm8pCiAKICNkZWZpbmUgV0lORE9XX0FERFIgMHgxMDAwMDAwMAogI2RlZmluZSBXSU5ET1dfU0laRSAweDgwMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9kaWxuZXRwYy5jIGIvZHJpdmVycy9tdGQvbWFwcy9kaWxuZXRwYy5jCmluZGV4IGVmYjIyMTYuLmMyOTlkMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZGlsbmV0cGMuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2RpbG5ldHBjLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIE5VTV9QQVJUSVRJT05TIChzaXplb2YocGFydGl0aW9uX2luZm8pL3NpemVvZihwYXJ0aXRpb25faW5mb1swXSkpCisjZGVmaW5lIE5VTV9QQVJUSVRJT05TIEFSUkFZX1NJWkUocGFydGl0aW9uX2luZm8pCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKm15bXRkOwogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbG93bHZsX3BhcnRzW05VTV9QQVJUSVRJT05TXTsKQEAgLTM0NSw3ICszNDUsNyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIE5VTV9ISUdITFZMX1BBUlRJVElPTlMgKHNpemVvZihoaWdsdmxfcGFydGl0aW9uX2luZm8pL3NpemVvZihwYXJ0aXRpb25faW5mb1swXSkpCisjZGVmaW5lIE5VTV9ISUdITFZMX1BBUlRJVElPTlMgQVJSQVlfU0laRShoaWdsdmxfcGFydGl0aW9uX2luZm8pCiAKIAogc3RhdGljIGludCBkbnBfYWRucF9wcm9iZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9kbXYxODIuYyBiL2RyaXZlcnMvbXRkL21hcHMvZG12MTgyLmMKaW5kZXggYjk5M2FjMC4uMmJiM2MwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9kbXYxODIuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2RtdjE4Mi5jCkBAIC05OSw3ICs5OSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3N2bWUxODIodm9pZCkKIHsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydGl0aW9uczsKLQlpbnQgbnVtX3BhcnRzID0gc2l6ZW9mKHN2bWUxODJfcGFydGl0aW9ucykgLyBzaXplb2Yoc3RydWN0IG10ZF9wYXJ0aXRpb24pOworCWludCBudW1fcGFydHMgPSBBUlJBWV9TSVpFKHN2bWUxODJfcGFydGl0aW9ucyk7CiAKIAlwYXJ0aXRpb25zID0gc3ZtZTE4Ml9wYXJ0aXRpb25zOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2g3MjB4LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2g3MjB4LWZsYXNoLmMKaW5kZXggMzE5MDk0OC4uMDY2NzEwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9oNzIweC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaDcyMHgtZmxhc2guYwpAQCAtNTksNyArNTksNyBAQAogICAgICAgICB9CiB9OwogCi0jZGVmaW5lIE5VTV9QQVJUSVRJT05TICAoc2l6ZW9mKGg3MjB4X3BhcnRpdGlvbnMpL3NpemVvZihoNzIweF9wYXJ0aXRpb25zWzBdKSkKKyNkZWZpbmUgTlVNX1BBUlRJVElPTlMgQVJSQVlfU0laRShoNzIweF9wYXJ0aXRpb25zKQogCiBzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgIG5yX210ZF9wYXJ0czsKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbXRkX3BhcnRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9uZXRzYzUyMC5jIGIvZHJpdmVycy9tdGQvbWFwcy9uZXRzYzUyMC5jCmluZGV4IDMzMDYwYTMuLmVkMjE1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvbmV0c2M1MjAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL25ldHNjNTIwLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkgICAgLnNpemUgPSAweDgwMDAwCiAgICAgfSwKIH07Ci0jZGVmaW5lIE5VTV9QQVJUSVRJT05TIChzaXplb2YocGFydGl0aW9uX2luZm8pL3NpemVvZihwYXJ0aXRpb25faW5mb1swXSkpCisjZGVmaW5lIE5VTV9QQVJUSVRJT05TIEFSUkFZX1NJWkUocGFydGl0aW9uX2luZm8pCiAKICNkZWZpbmUgV0lORE9XX1NJWkUJMHgwMDEwMDAwMAogI2RlZmluZSBXSU5ET1dfQUREUgkweDAwMjAwMDAwCkBAIC04OCw3ICs4OCw3IEBACiAJLnBoeXMgPSBXSU5ET1dfQUREUiwKIH07CiAKLSNkZWZpbmUgTlVNX0ZMQVNIX0JBTktTCShzaXplb2YobmV0c2M1MjBfbWFwKS9zaXplb2Yoc3RydWN0IG1hcF9pbmZvKSkKKyNkZWZpbmUgTlVNX0ZMQVNIX0JBTktTCUFSUkFZX1NJWkUobmV0c2M1MjBfbWFwKQogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpteW10ZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYyBiL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVsLmMKaW5kZXggNjMyZWIyYS4uNTRhMzEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIAl9CiB9OwogCi0jZGVmaW5lIE5VTV9BTURfUEFSVElUSU9OUyBcCi0JKHNpemVvZihuZXR0ZWxfYW1kX3BhcnRpdGlvbnMpL3NpemVvZihuZXR0ZWxfYW1kX3BhcnRpdGlvbnNbMF0pKQorI2RlZmluZSBOVU1fQU1EX1BBUlRJVElPTlMgQVJSQVlfU0laRShuZXR0ZWxfYW1kX3BhcnRpdGlvbnMpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jIGIvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYwppbmRleCBjMjIzNTE0Li5hMjFmY2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMKQEAgLTU4LDggKzU4LDYgQEAKIAl9CiB9OwogCi0jZGVmaW5lIE5CX09GKHgpICAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKLQogaW50IF9faW5pdCBpbml0X29jb3RlYSh2b2lkKQogewogCXU4IGZwZ2EwX3JlZzsKQEAgLTk3LDcgKzk1LDcgQEAKIAlpZiAoZmxhc2gpIHsKIAkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgb2NvdGVhX3NtYWxsX3BhcnRpdGlvbnMsCi0JCQkJCU5CX09GKG9jb3RlYV9zbWFsbF9wYXJ0aXRpb25zKSk7CisJCQkJCUFSUkFZX1NJWkUob2NvdGVhX3NtYWxsX3BhcnRpdGlvbnMpKTsKIAl9IGVsc2UgewogCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTExOCw3ICsxMTYsNyBAQAogCWlmIChmbGFzaCkgewogCQlmbGFzaC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJYWRkX210ZF9wYXJ0aXRpb25zKGZsYXNoLCBvY290ZWFfbGFyZ2VfcGFydGl0aW9ucywKLQkJCQkJTkJfT0Yob2NvdGVhX2xhcmdlX3BhcnRpdGlvbnMpKTsKKwkJCQkJQVJSQVlfU0laRShvY290ZWFfbGFyZ2VfcGFydGl0aW9ucykpOwogCX0gZWxzZSB7CiAJCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwogCQlyZXR1cm4gLUVOWElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wY2kuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGNpLmMKaW5kZXggMjE4MjJjMi4uZDJhYjFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wY2kuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BjaS5jCkBAIC0zMzQsOSArMzM0LDYgQEAKIAlyZXR1cm4gMDsKIAogcmVsZWFzZToKLQlpZiAobXRkKQotCQltYXBfZGVzdHJveShtdGQpOwotCiAJaWYgKG1hcCkgewogCQltYXAtPmV4aXQoZGV2LCBtYXApOwogCQlrZnJlZShtYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKaW5kZXggZjk4OGM4MS4uZDI3ZjQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCkBAIC01NCw3ICs1NCw3IEBACiAjZGVmaW5lIE1BWF9QQ01DSUFfQUREUgkweDQwMDAwMDAKIAogc3RydWN0IHBjbWNpYW10ZF9kZXYgewotCWRldl9saW5rX3QJbGluazsJCS8qIFBDTUNJQSBsaW5rICovCisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3QJbm9kZTsJCS8qIGRldmljZSBub2RlICovCiAJY2FkZHJfdAkJd2luX2Jhc2U7CS8qIGlvcmVtYXBwZWQgYWRkcmVzcyBvZiBQQ01DSUEgd2luZG93ICovCiAJdW5zaWduZWQgaW50CXdpbl9zaXplOwkvKiBzaXplIG9mIHdpbmRvdyAqLwpAQCAtMTExLDggKzExMSw4IEBACiAJbWVtcmVxX3QgbXJxOwogCWludCByZXQ7CiAKLQlpZighKGRldi0+bGluay5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgewotCQlERUJVRygxLCAiZGV2aWNlIHJlbW92ZWQgc3RhdGUgPSAweCU0LjRYIiwgZGV2LT5saW5rLnN0YXRlKTsKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChkZXYtPnBfZGV2KSkgeworCQlERUJVRygxLCAiZGV2aWNlIHJlbW92ZWQiKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJICAgICAgZGV2LT5vZmZzZXQsIG1ycS5DYXJkT2Zmc2V0KTsKIAkJbXJxLlBhZ2UgPSAwOwogCQlpZiggKHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2Uod2luLCAmbXJxKSkgIT0gQ1NfU1VDQ0VTUykgewotCQkJY3NfZXJyb3IoZGV2LT5saW5rLmhhbmRsZSwgTWFwTWVtUGFnZSwgcmV0KTsKKwkJCWNzX2Vycm9yKGRldi0+cF9kZXYsIE1hcE1lbVBhZ2UsIHJldCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlkZXYtPm9mZnNldCA9IG1ycS5DYXJkT2Zmc2V0OwpAQCAtMjM4LDcgKzIzOCw3IEBACiAKIC8qIHJlYWQvd3JpdGV7OCwxNn0gY29weV97ZnJvbSx0b30gcm91dGluZXMgd2l0aCBkaXJlY3QgYWNjZXNzICovCiAKLSNkZWZpbmUgREVWX1JFTU9WRUQoeCkgICghKCoodV9pbnQgKil4LT5tYXBfcHJpdl8xICYgREVWX1BSRVNFTlQpKQorI2RlZmluZSBERVZfUkVNT1ZFRCh4KSAgKCEocGNtY2lhX2Rldl9wcmVzZW50KCgoc3RydWN0IHBjbWNpYW10ZF9kZXYgKiltYXAtPm1hcF9wcml2XzEpLT5wX2RldikpKQogCiBzdGF0aWMgbWFwX3dvcmQgcGNtY2lhX3JlYWQ4KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIG9mcykKIHsKQEAgLTMxOSw3ICszMTksNyBAQAogc3RhdGljIHZvaWQgcGNtY2lhbXRkX3NldF92cHAoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBvbikKIHsKIAlzdHJ1Y3QgcGNtY2lhbXRkX2RldiAqZGV2ID0gKHN0cnVjdCBwY21jaWFtdGRfZGV2ICopbWFwLT5tYXBfcHJpdl8xOwotCWRldl9saW5rX3QgKmxpbmsgPSAmZGV2LT5saW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gZGV2LT5wX2RldjsKIAltb2Rjb25mX3QgbW9kOwogCWludCByZXQ7CiAKQEAgLTMyOCw5ICszMjgsOSBAQAogCW1vZC5WcHAxID0gbW9kLlZwcDIgPSBvbiA/IGRldi0+dnBwIDogMDsKIAogCURFQlVHKDIsICJkZXYgPSAlcCBvbiA9ICVkIHZwcCA9ICVkXG4iLCBkZXYsIG9uLCBkZXYtPnZwcCk7Ci0JcmV0ID0gcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJm1vZCk7CisJcmV0ID0gcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKGxpbmssICZtb2QpOwogCWlmKHJldCAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgTW9kaWZ5Q29uZmlndXJhdGlvbiwgcmV0KTsKKwkJY3NfZXJyb3IobGluaywgTW9kaWZ5Q29uZmlndXJhdGlvbiwgcmV0KTsKIAl9CiB9CiAKQEAgLTM0MCw3ICszNDAsNyBAQAogICogc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgcGNtY2lhbXRkX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHBjbWNpYW10ZF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXYgPSBsaW5rLT5wcml2OwogCkBAIC0zNTMsMTIgKzM1MywxMSBAQAogCQl9CiAJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwogCX0KLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiAKLXN0YXRpYyB2b2lkIGNhcmRfc2V0dGluZ3Moc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiwgZGV2X2xpbmtfdCAqbGluaywgaW50ICpuZXdfbmFtZSkKK3N0YXRpYyB2b2lkIGNhcmRfc2V0dGluZ3Moc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiwgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCAqbmV3X25hbWUpCiB7CiAJaW50IHJjOwogCXR1cGxlX3QgdHVwbGU7CkBAIC0zNzEsMTYgKzM3MCwxNiBAQAogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7CiAKLQlyYyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUpOworCXJjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwogCXdoaWxlKHJjID09IENTX1NVQ0NFU1MpIHsKLQkJcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluay0+aGFuZGxlLCAmdHVwbGUpOworCQlyYyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCQlpZihyYyAhPSBDU19TVUNDRVNTKSB7Ci0JCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIEdldFR1cGxlRGF0YSwgcmMpOworCQkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCByYyk7CiAJCQlicmVhazsKIAkJfQotCQlyYyA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLT5oYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCQlpZihyYyAhPSBDU19TVUNDRVNTKSB7Ci0JCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFBhcnNlVHVwbGUsIHJjKTsKKwkJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIHJjKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQ1MSw3ICs0NTAsNyBAQAogCQkJREVCVUcoMiwgIlVua25vd24gdHVwbGUgY29kZSAlZCIsIHR1cGxlLlR1cGxlQ29kZSk7CiAJCX0KIAotCQlyYyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLT5oYW5kbGUsICZ0dXBsZSk7CisJCXJjID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAJfQogCWlmKCFkZXYtPnBjbWNpYV9tYXAuc2l6ZSkKIAkJZGV2LT5wY21jaWFfbWFwLnNpemUgPSBNQVhfUENNQ0lBX0FERFI7CkBAIC00ODgsNyArNDg3LDcgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgcGNtY2lhbXRkX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBwY21jaWFtdGRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXYgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gTlVMTDsKQEAgLTUwNCwxMyArNTAzLDEwIEBACiAKIAlERUJVRygzLCAibGluaz0weCVwIiwgbGluayk7CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KIAlERUJVRygyLCAiVmFsaWRhdGluZyBDSVMiKTsKLQlyZXQgPSBwY21jaWFfdmFsaWRhdGVfY2lzKGxpbmstPmhhbmRsZSwgJmNpc2luZm8pOworCXJldCA9IHBjbWNpYV92YWxpZGF0ZV9jaXMobGluaywgJmNpc2luZm8pOwogCWlmKHJldCAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgR2V0VHVwbGVEYXRhLCByZXQpOworCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJldCk7CiAJfSBlbHNlIHsKIAkJREVCVUcoMiwgIlZhbGlkYXRlQ0lTIGZvdW5kICVkIGNoYWlucyIsIGNpc2luZm8uQ2hhaW5zKTsKIAl9CkBAIC01MzgsNyArNTM0LDcgQEAKIAlyZXEuQXR0cmlidXRlcyB8PSAoZGV2LT5wY21jaWFfbWFwLmJhbmt3aWR0aCA9PSAxKSA/IFdJTl9EQVRBX1dJRFRIXzggOiBXSU5fREFUQV9XSURUSF8xNjsKIAlyZXEuQmFzZSA9IDA7CiAJcmVxLkFjY2Vzc1NwZWVkID0gbWVtX3NwZWVkOwotCWxpbmstPndpbiA9ICh3aW5kb3dfaGFuZGxlX3QpbGluay0+aGFuZGxlOworCWxpbmstPndpbiA9ICh3aW5kb3dfaGFuZGxlX3QpbGluazsKIAlyZXEuU2l6ZSA9IChmb3JjZV9zaXplKSA/IGZvcmNlX3NpemUgPDwgMjAgOiBNQVhfUENNQ0lBX0FERFI7CiAJZGV2LT53aW5fc2l6ZSA9IDA7CiAKQEAgLTU0Niw3ICs1NDIsNyBAQAogCQlpbnQgcmV0OwogCQlERUJVRygyLCAicmVxdWVzdGluZyB3aW5kb3cgd2l0aCBzaXplID0gJWRLaUIgbWVtc3BlZWQgPSAlZCIsCiAJCSAgICAgIHJlcS5TaXplID4+IDEwLCByZXEuQWNjZXNzU3BlZWQpOwotCQlyZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbik7CisJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7CiAJCURFQlVHKDIsICJyZXQgPSAlZCBkZXYtPndpbl9zaXplID0gJWQiLCByZXQsIGRldi0+d2luX3NpemUpOwogCQlpZihyZXQpIHsKIAkJCXJlcS5TaXplID4+PSAxOwpAQCAtNTYyLDE5ICs1NTgsMTkgQEAKIAlpZighZGV2LT53aW5fc2l6ZSkgewogCQllcnIoIkNhbnQgYWxsb2NhdGUgbWVtb3J5IHdpbmRvdyIpOwogCQlwY21jaWFtdGRfcmVsZWFzZShsaW5rKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJREVCVUcoMSwgIkFsbG9jYXRlZCBhIHdpbmRvdyBvZiAlZEtpQiIsIGRldi0+d2luX3NpemUgPj4gMTApOwogCiAJLyogR2V0IHdyaXRlIHByb3RlY3Qgc3RhdHVzICovCi0JQ1NfQ0hFQ0soR2V0U3RhdHVzLCBwY21jaWFfZ2V0X3N0YXR1cyhsaW5rLT5oYW5kbGUsICZzdGF0dXMpKTsKKwlDU19DSEVDSyhHZXRTdGF0dXMsIHBjbWNpYV9nZXRfc3RhdHVzKGxpbmssICZzdGF0dXMpKTsKIAlERUJVRygyLCAic3RhdHVzIHZhbHVlOiAweCV4IHdpbmRvdyBoYW5kbGUgPSAweCU4LjhseCIsCiAJICAgICAgc3RhdHVzLkNhcmRTdGF0ZSwgKHVuc2lnbmVkIGxvbmcpbGluay0+d2luKTsKIAlkZXYtPndpbl9iYXNlID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCWlmKCFkZXYtPndpbl9iYXNlKSB7CiAJCWVycigiaW9yZW1hcCglbHUsICV1KSBmYWlsZWQiLCByZXEuQmFzZSwgcmVxLlNpemUpOwogCQlwY21jaWFtdGRfcmVsZWFzZShsaW5rKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJREVCVUcoMSwgIm1hcHBlZCB3aW5kb3cgZGV2ID0gJXAgcmVxLmJhc2UgPSAweCVseCBiYXNlID0gJXAgc2l6ZSA9IDB4JXgiLAogCSAgICAgIGRldiwgcmVxLkJhc2UsIGRldi0+d2luX2Jhc2UsIHJlcS5TaXplKTsKQEAgLTU4NCwxNyArNTgwLDE0IEBACiAJZGV2LT5wY21jaWFfbWFwLm1hcF9wcml2XzIgPSAodW5zaWduZWQgbG9uZylsaW5rLT53aW47CiAKIAlERUJVRygyLCAiR2V0dGluZyBjb25maWd1cmF0aW9uIik7Ci0JQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmstPmhhbmRsZSwgJnQpKTsKKwlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJnQpKTsKIAlERUJVRygyLCAiVmNjID0gJWQgVnBwMSA9ICVkIFZwcDIgPSAlZCIsIHQuVmNjLCB0LlZwcDEsIHQuVnBwMik7CiAJZGV2LT52cHAgPSAodnBwKSA/IHZwcCA6IHQuVnBwMTsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOwotCWxpbmstPmNvbmYuVmNjID0gdC5WY2M7CiAJaWYoc2V0dnBwID09IDIpIHsKLQkJbGluay0+Y29uZi5WcHAxID0gZGV2LT52cHA7Ci0JCWxpbmstPmNvbmYuVnBwMiA9IGRldi0+dnBwOworCQlsaW5rLT5jb25mLlZwcCA9IGRldi0+dnBwOwogCX0gZWxzZSB7Ci0JCWxpbmstPmNvbmYuVnBwMSA9IDA7Ci0JCWxpbmstPmNvbmYuVnBwMiA9IDA7CisJCWxpbmstPmNvbmYuVnBwID0gMDsKIAl9CiAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZOwpAQCAtNjA2LDkgKzU5OSwxMCBAQAogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAwOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHQuUHJlc2VudDsKIAlERUJVRygyLCAiU2V0dGluZyBDb25maWd1cmF0aW9uIik7Ci0JcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKIAlpZihyZXQgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCByZXQpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcmV0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYobWVtX3R5cGUgPT0gMSkgewpAQCAtNjE2LDcgKzYxMCw3IEBACiAJfSBlbHNlIGlmKG1lbV90eXBlID09IDIpIHsKIAkJbXRkID0gZG9fbWFwX3Byb2JlKCJtYXBfcm9tIiwgJmRldi0+cGNtY2lhX21hcCk7CiAJfSBlbHNlIHsKLQkJZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHByb2JlcykgLyBzaXplb2YoY2hhciAqKTsgaSsrKSB7CisJCWZvcihpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvYmVzKTsgaSsrKSB7CiAJCQlERUJVRygxLCAiVHJ5aW5nICVzIiwgcHJvYmVzW2ldKTsKIAkJCW10ZCA9IGRvX21hcF9wcm9iZShwcm9iZXNbaV0sICZkZXYtPnBjbWNpYV9tYXApOwogCQkJaWYobXRkKQpAQCAtNjI5LDcgKzYyMyw3IEBACiAJaWYoIW10ZCkgewogCQlERUJVRygxLCAiQ2FudCBmaW5kIGFuIE1URCIpOwogCQlwY21jaWFtdGRfcmVsZWFzZShsaW5rKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlkZXYtPm10ZF9pbmZvID0gbXRkOwpAQCAtNjU0LDcgKzY0OCw2IEBACiAJICAgdXNlIHRoZSBmYXN0ZXIgbm9uLXJlbWFwcGluZyByZWFkL3dyaXRlIGZ1bmN0aW9ucyAqLwogCWlmKG10ZC0+c2l6ZSA8PSBkZXYtPndpbl9zaXplKSB7CiAJCURFQlVHKDEsICJVc2luZyBub24gcmVtYXBwaW5nIG1lbW9yeSBmdW5jdGlvbnMiKTsKLQkJZGV2LT5wY21jaWFfbWFwLm1hcF9wcml2XzEgPSAodW5zaWduZWQgbG9uZykmKGRldi0+bGluay5zdGF0ZSk7CiAJCWRldi0+cGNtY2lhX21hcC5tYXBfcHJpdl8yID0gKHVuc2lnbmVkIGxvbmcpZGV2LT53aW5fYmFzZTsKIAkJaWYgKGRldi0+cGNtY2lhX21hcC5iYW5rd2lkdGggPT0gMSkgewogCQkJZGV2LT5wY21jaWFfbWFwLnJlYWQgPSBwY21jaWFfcmVhZDg7CkBAIC02NzIsMTkgKzY2NSwxOCBAQAogCQlkZXYtPm10ZF9pbmZvID0gTlVMTDsKIAkJZXJyKCJDb3VsZG50IHJlZ2lzdGVyIE1URCBkZXZpY2UiKTsKIAkJcGNtY2lhbXRkX3JlbGVhc2UobGluayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXNucHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgc2l6ZW9mKGRldi0+bm9kZS5kZXZfbmFtZSksICJtdGQlZCIsIG10ZC0+aW5kZXgpOwogCWluZm8oIm10ZCVkOiAlcyIsIG10ZC0+aW5kZXgsIG10ZC0+bmFtZSk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOwotCXJldHVybjsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CisJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCWVycigiQ1MgRXJyb3IsIGV4aXRpbmciKTsKIAlwY21jaWFtdGRfcmVsZWFzZShsaW5rKTsKLQlyZXR1cm47CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIApAQCAtNzEzLDIxICs3MDUsMTggQEAKICAqIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KICAqLwogCi1zdGF0aWMgdm9pZCBwY21jaWFtdGRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHBjbWNpYW10ZF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CisJc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiA9IGxpbmstPnByaXY7CiAKIAlERUJVRygzLCAibGluaz0weCVwIiwgbGluayk7CiAKLQlpZihsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiA9IGxpbmstPnByaXY7Ci0JCWlmKGRldi0+bXRkX2luZm8pIHsKLQkJCWRlbF9tdGRfZGV2aWNlKGRldi0+bXRkX2luZm8pOwotCQkJaW5mbygibXRkJWQ6IFJlbW92ZWQiLCBkZXYtPm10ZF9pbmZvLT5pbmRleCk7Ci0JCX0KLQotCQlwY21jaWFtdGRfcmVsZWFzZShsaW5rKTsKKwlpZihkZXYtPm10ZF9pbmZvKSB7CisJCWRlbF9tdGRfZGV2aWNlKGRldi0+bXRkX2luZm8pOworCQlpbmZvKCJtdGQlZDogUmVtb3ZlZCIsIGRldi0+bXRkX2luZm8tPmluZGV4KTsKIAl9CisKKwlwY21jaWFtdGRfcmVsZWFzZShsaW5rKTsKIH0KIAogCkBAIC03MzYsMTAgKzcyNSw5IEBACiAgKiB3aXRoIENhcmQgU2VydmljZXMuCiAgKi8KIAotc3RhdGljIGludCBwY21jaWFtdGRfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgcGNtY2lhbXRkX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXY7Ci0JZGV2X2xpbmtfdCAqbGluazsKIAogCS8qIENyZWF0ZSBuZXcgbWVtb3J5IGNhcmQgZGV2aWNlICovCiAJZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwpAQCAtNzQ3LDIwICs3MzUsMTMgQEAKIAlERUJVRygxLCAiZGV2PTB4JXAiLCBkZXYpOwogCiAJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYpKTsKLQlsaW5rID0gJmRldi0+bGluazsKKwlkZXYtPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gZGV2OwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZOwogCi0JbGluay0+bmV4dCA9IE5VTEw7Ci0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXBjbWNpYW10ZF9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGNtY2lhbXRkX2NvbmZpZyhsaW5rKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHBjbWNpYW10ZF9pZHNbXSA9IHsKQEAgLTc5NCw3ICs3NzUsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJwY21jaWFtdGQiCiAJfSwKLQkucHJvYmUJCT0gcGNtY2lhbXRkX2F0dGFjaCwKKwkucHJvYmUJCT0gcGNtY2lhbXRkX3Byb2JlLAogCS5yZW1vdmUJCT0gcGNtY2lhbXRkX2RldGFjaCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlCT0gcGNtY2lhbXRkX2lkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcmVkd29vZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKaW5kZXggNWI3NmVkOC4uNTBiMTQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKQEAgLTEyMSw4ICsxMjEsNyBAQAogfTsKIAogCi0jZGVmaW5lIE5VTV9SRURXT09EX0ZMQVNIX1BBUlRJVElPTlMgXAotCShzaXplb2YocmVkd29vZF9mbGFzaF9wYXJ0aXRpb25zKS9zaXplb2YocmVkd29vZF9mbGFzaF9wYXJ0aXRpb25zWzBdKSkKKyNkZWZpbmUgTlVNX1JFRFdPT0RfRkxBU0hfUEFSVElUSU9OUyBBUlJBWV9TSVpFKHJlZHdvb2RfZmxhc2hfcGFydGl0aW9ucykKIAogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqcmVkd29vZF9tdGQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2JjODI0MC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYmM4MjQwLmMKaW5kZXggMjI1Y2RkOS4uMzUwMjg2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYmM4MjQwLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zYmM4MjQwLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAl9CiB9OwogCi0jZGVmaW5lIE5VTV9GTEFTSF9CQU5LUwkoc2l6ZW9mKHNiYzgyNDBfbWFwKSAvIHNpemVvZihzdHJ1Y3QgbWFwX2luZm8pKQorI2RlZmluZSBOVU1fRkxBU0hfQkFOS1MJQVJSQVlfU0laRShzYmM4MjQwX21hcCkKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyB0aGUgcGFydGl0aW9uIGxheW91dCBvZiBTQkM4MjQwIGJvYXJkcy4KQEAgLTEyNSw4ICsxMjUsNiBAQAogCX0KIH07CiAKLSNkZWZpbmUgTkJfT0YoeCkgKHNpemVvZiAoeCkgLyBzaXplb2YgKHhbMF0pKQotCiAvKiB0cml2aWFsIHN0cnVjdCB0byBkZXNjcmliZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gKi8KIHN0cnVjdCBtdGRfcGFydF9kZWYKIHsKQEAgLTE5MCwxMCArMTg4LDEwIEBACiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJc2JjODI0MF9wYXJ0X2JhbmtzWzBdLm10ZF9wYXJ0ICAgPSBzYmM4MjQwX3Vib290X3BhcnRpdGlvbnM7CiAJc2JjODI0MF9wYXJ0X2JhbmtzWzBdLnR5cGUgICAgICAgPSAic3RhdGljIGltYWdlIjsKLQlzYmM4MjQwX3BhcnRfYmFua3NbMF0ubnVtcyAgICAgICA9IE5CX09GKHNiYzgyNDBfdWJvb3RfcGFydGl0aW9ucyk7CisJc2JjODI0MF9wYXJ0X2JhbmtzWzBdLm51bXMgICAgICAgPSBBUlJBWV9TSVpFKHNiYzgyNDBfdWJvb3RfcGFydGl0aW9ucyk7CiAJc2JjODI0MF9wYXJ0X2JhbmtzWzFdLm10ZF9wYXJ0ICAgPSBzYmM4MjQwX2ZzX3BhcnRpdGlvbnM7CiAJc2JjODI0MF9wYXJ0X2JhbmtzWzFdLnR5cGUgICAgICAgPSAic3RhdGljIGZpbGUgc3lzdGVtIjsKLQlzYmM4MjQwX3BhcnRfYmFua3NbMV0ubnVtcyAgICAgICA9IE5CX09GKHNiYzgyNDBfZnNfcGFydGl0aW9ucyk7CisJc2JjODI0MF9wYXJ0X2JhbmtzWzFdLm51bXMgICAgICAgPSBBUlJBWV9TSVpFKHNiYzgyNDBfZnNfcGFydGl0aW9ucyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZMQVNIX0JBTktTOyBpKyspIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jCmluZGV4IGVkOTJhZmEuLmU4YzEzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2M1MjBjZHAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIE5VTV9GTEFTSF9CQU5LUwkoc2l6ZW9mKHNjNTIwY2RwX21hcCkvc2l6ZW9mKHN0cnVjdCBtYXBfaW5mbykpCisjZGVmaW5lIE5VTV9GTEFTSF9CQU5LUwlBUlJBWV9TSVpFKHNjNTIwY2RwX21hcCkKIAogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGRbTlVNX0ZMQVNIX0JBTktTXTsKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKm1lcmdlZF9tdGQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NjeDIwMF9kb2NmbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zY3gyMDBfZG9jZmxhc2guYwppbmRleCAyYzkxZGZmLi4yOGI4YTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3NjeDIwMF9kb2NmbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2N4MjAwX2RvY2ZsYXNoLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAkJLnNpemUgICA9IDB4ODAwMDAKIAl9LAogfTsKLSNkZWZpbmUgTlVNX1BBUlRJVElPTlMgKHNpemVvZihwYXJ0aXRpb25faW5mbykvc2l6ZW9mKHBhcnRpdGlvbl9pbmZvWzBdKSkKKyNkZWZpbmUgTlVNX1BBUlRJVElPTlMgQVJSQVlfU0laRShwYXJ0aXRpb25faW5mbykKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2hhcnBzbC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zaGFycHNsLWZsYXNoLmMKaW5kZXggOTk5ZjRiYi4uMTJmZTUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zaGFycHNsLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zaGFycHNsLWZsYXNoLmMKQEAgLTQ5LDggKzQ5LDYgQEAKIAl9CiB9OwogCi0jZGVmaW5lIE5CX09GKHgpICAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKLQogaW50IF9faW5pdCBpbml0X3NoYXJwc2wodm9pZCkKIHsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CkBAIC05Miw3ICs5MCw3IEBACiAJfQogCiAJcGFydHMgPSBzaGFycHNsX3BhcnRpdGlvbnM7Ci0JbmJfcGFydHMgPSBOQl9PRihzaGFycHNsX3BhcnRpdGlvbnMpOworCW5iX3BhcnRzID0gQVJSQVlfU0laRShzaGFycHNsX3BhcnRpdGlvbnMpOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJVc2luZyAlcyBwYXJ0aXNpb24gZGVmaW5pdGlvblxuIiwgcGFydF90eXBlKTsKIAlhZGRfbXRkX3BhcnRpdGlvbnMobXltdGQsIHBhcnRzLCBuYl9wYXJ0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3RzNTUwMF9mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy90czU1MDBfZmxhc2guYwppbmRleCA0YjM3MmJjLi5hNzQyMmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3RzNTUwMF9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdHM1NTAwX2ZsYXNoLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAl9CiB9OwogCi0jZGVmaW5lIE5VTV9QQVJUSVRJT05TIChzaXplb2YodHM1NTAwX3BhcnRpdGlvbnMpL3NpemVvZihzdHJ1Y3QgbXRkX3BhcnRpdGlvbikpCisjZGVmaW5lIE5VTV9QQVJUSVRJT05TIEFSUkFZX1NJWkUodHM1NTAwX3BhcnRpdGlvbnMpCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKm15bXRkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3VjbGludXguYyBiL2RyaXZlcnMvbXRkL21hcHMvdWNsaW51eC5jCmluZGV4IDc5ZDkyODAuLmY3MjY0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvdWNsaW51eC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdWNsaW51eC5jCkBAIC0zNyw3ICszNyw3IEBACiAJeyAubmFtZSA9ICJST01mcyIgfQogfTsKIAotI2RlZmluZQlOVU1fUEFSVElUSU9OUwkoc2l6ZW9mKHVjbGludXhfcm9tZnMpIC8gc2l6ZW9mKHVjbGludXhfcm9tZnNbMF0pKQorI2RlZmluZQlOVU1fUEFSVElUSU9OUwlBUlJBWV9TSVpFKHVjbGludXhfcm9tZnMpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3ZtYXgzMDEuYyBiL2RyaXZlcnMvbXRkL21hcHMvdm1heDMwMS5jCmluZGV4IGUwMDYzOTQuLmIzZTQ4NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvdm1heDMwMS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdm1heDMwMS5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAkJfQogCX0KIAotCWlmICghdm1heF9tdGRbMV0gJiYgIXZtYXhfbXRkWzJdKSB7CisJaWYgKCF2bWF4X210ZFswXSAmJiAhdm1heF9tdGRbMV0pIHsKIAkJaW91bm1hcCgodm9pZCAqKWlvbWFwYWRyKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwppbmRleCA4NDBkZDY2Li40NThkM2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKQEAgLTE5LDEyICsxOSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogc3RhdGljIExJU1RfSEVBRChibGt0cmFuc19tYWpvcnMpOwogCi1leHRlcm4gc3RydWN0IHNlbWFwaG9yZSBtdGRfdGFibGVfbXV0ZXg7CitleHRlcm4gc3RydWN0IG11dGV4IG10ZF90YWJsZV9tdXRleDsKIGV4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKm10ZF90YWJsZVtdOwogCiBzdHJ1Y3QgbXRkX2Jsa2NvcmVfcHJpdiB7CkBAIC0xMjIsOSArMTIyLDkgQEAKIAogCQlzcGluX3VubG9ja19pcnEocnEtPnF1ZXVlX2xvY2spOwogCi0JCWRvd24oJmRldi0+c2VtKTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAkJcmVzID0gZG9fYmxrdHJhbnNfcmVxdWVzdCh0ciwgZGV2LCByZXEpOwotCQl1cCgmZGV2LT5zZW0pOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAkJc3Bpbl9sb2NrX2lycShycS0+cXVldWVfbG9jayk7CiAKQEAgLTIzNSw4ICsyMzUsOCBAQAogCWludCBsYXN0X2Rldm51bSA9IC0xOwogCXN0cnVjdCBnZW5kaXNrICpnZDsKIAotCWlmICghZG93bl90cnlsb2NrKCZtdGRfdGFibGVfbXV0ZXgpKSB7Ci0JCXVwKCZtdGRfdGFibGVfbXV0ZXgpOworCWlmICghIW11dGV4X3RyeWxvY2soJm10ZF90YWJsZV9tdXRleCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCQlCVUcoKTsKIAl9CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWluaXRfTVVURVgoJm5ldy0+c2VtKTsKKwltdXRleF9pbml0KCZuZXctPmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgJnRyLT5kZXZzKTsKICBhZGRlZDoKIAlpZiAoIXRyLT53cml0ZXNlY3QpCkBAIC0zMTMsOCArMzEzLDggQEAKIAogaW50IGRlbF9tdGRfYmxrdHJhbnNfZGV2KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpvbGQpCiB7Ci0JaWYgKCFkb3duX3RyeWxvY2soJm10ZF90YWJsZV9tdXRleCkpIHsKLQkJdXAoJm10ZF90YWJsZV9tdXRleCk7CisJaWYgKCEhbXV0ZXhfdHJ5bG9jaygmbXRkX3RhYmxlX211dGV4KSkgeworCQltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CiAJCUJVRygpOwogCX0KIApAQCAtMzc4LDE0ICszNzgsMTQgQEAKIAogCW1lbXNldCh0ci0+YmxrY29yZV9wcml2LCAwLCBzaXplb2YoKnRyLT5ibGtjb3JlX3ByaXYpKTsKIAotCWRvd24oJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAogCXJldCA9IHJlZ2lzdGVyX2Jsa2Rldih0ci0+bWFqb3IsIHRyLT5uYW1lKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byByZWdpc3RlciAlcyBibG9jayBkZXZpY2Ugb24gbWFqb3IgJWQ6ICVkXG4iLAogCQkgICAgICAgdHItPm5hbWUsIHRyLT5tYWpvciwgcmV0KTsKIAkJa2ZyZWUodHItPmJsa2NvcmVfcHJpdik7Ci0JCXVwKCZtdGRfdGFibGVfbXV0ZXgpOworCQltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJfQogCXNwaW5fbG9ja19pbml0KCZ0ci0+YmxrY29yZV9wcml2LT5xdWV1ZV9sb2NrKTsKQEAgLTM5Niw3ICszOTYsNyBAQAogCWlmICghdHItPmJsa2NvcmVfcHJpdi0+cnEpIHsKIAkJdW5yZWdpc3Rlcl9ibGtkZXYodHItPm1ham9yLCB0ci0+bmFtZSk7CiAJCWtmcmVlKHRyLT5ibGtjb3JlX3ByaXYpOwotCQl1cCgmbXRkX3RhYmxlX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQwNyw3ICs0MDcsNyBAQAogCQlibGtfY2xlYW51cF9xdWV1ZSh0ci0+YmxrY29yZV9wcml2LT5ycSk7CiAJCXVucmVnaXN0ZXJfYmxrZGV2KHRyLT5tYWpvciwgdHItPm5hbWUpOwogCQlrZnJlZSh0ci0+YmxrY29yZV9wcml2KTsKLQkJdXAoJm10ZF90YWJsZV9tdXRleCk7CisJCW11dGV4X3VubG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTQxOSw3ICs0MTksNyBAQAogCQkJdHItPmFkZF9tdGQodHIsIG10ZF90YWJsZVtpXSk7CiAJfQogCi0JdXAoJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MjgsNyArNDI4LDcgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0aGlzLCAqbmV4dDsKIAotCWRvd24oJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAogCS8qIENsZWFuIHVwIHRoZSBrZXJuZWwgdGhyZWFkICovCiAJdHItPmJsa2NvcmVfcHJpdi0+ZXhpdGluZyA9IDE7CkBAIC00NDYsNyArNDQ2LDcgQEAKIAlibGtfY2xlYW51cF9xdWV1ZSh0ci0+YmxrY29yZV9wcml2LT5ycSk7CiAJdW5yZWdpc3Rlcl9ibGtkZXYodHItPm1ham9yLCB0ci0+bmFtZSk7CiAKLQl1cCgmbXRkX3RhYmxlX211dGV4KTsKKwltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CiAKIAlrZnJlZSh0ci0+YmxrY29yZV9wcml2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkYmxvY2suYyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKaW5kZXggZTg0NzU2Ni4uMmNlZjI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkYmxvY2suYworKysgYi9kcml2ZXJzL210ZC9tdGRibG9jay5jCkBAIC0xOSwxMSArMTksMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvYmxrdHJhbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkYmxrX2RldiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CiAJaW50IGNvdW50OwotCXN0cnVjdCBzZW1hcGhvcmUgY2FjaGVfc2VtOworCXN0cnVjdCBtdXRleCBjYWNoZV9tdXRleDsKIAl1bnNpZ25lZCBjaGFyICpjYWNoZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgY2FjaGVfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBjYWNoZV9zaXplOwpAQCAtMjg0LDcgKzI4Niw3IEBACiAJbXRkYmxrLT5jb3VudCA9IDE7CiAJbXRkYmxrLT5tdGQgPSBtdGQ7CiAKLQlpbml0X01VVEVYICgmbXRkYmxrLT5jYWNoZV9zZW0pOworCW11dGV4X2luaXQoJm10ZGJsay0+Y2FjaGVfbXV0ZXgpOwogCW10ZGJsay0+Y2FjaGVfc3RhdGUgPSBTVEFURV9FTVBUWTsKIAlpZiAoKG10ZGJsay0+bXRkLT5mbGFncyAmIE1URF9DQVBfUkFNKSAhPSBNVERfQ0FQX1JBTSAmJgogCSAgICBtdGRibGstPm10ZC0+ZXJhc2VzaXplKSB7CkBAIC0zMDYsOSArMzA4LDkgQEAKIAogICAgCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICJtdGRibG9ja19yZWxlYXNlXG4iKTsKIAotCWRvd24oJm10ZGJsay0+Y2FjaGVfc2VtKTsKKwltdXRleF9sb2NrKCZtdGRibGstPmNhY2hlX211dGV4KTsKIAl3cml0ZV9jYWNoZWRfZGF0YShtdGRibGspOwotCXVwKCZtdGRibGstPmNhY2hlX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZtdGRibGstPmNhY2hlX211dGV4KTsKIAogCWlmICghLS1tdGRibGstPmNvdW50KSB7CiAJCS8qIEl0IHdhcyB0aGUgbGFzdCB1c2FnZS4gRnJlZSB0aGUgZGV2aWNlICovCkBAIC0zMjcsOSArMzI5LDkgQEAKIHsKIAlzdHJ1Y3QgbXRkYmxrX2RldiAqbXRkYmxrID0gbXRkYmxrc1tkZXYtPmRldm51bV07CiAKLQlkb3duKCZtdGRibGstPmNhY2hlX3NlbSk7CisJbXV0ZXhfbG9jaygmbXRkYmxrLT5jYWNoZV9tdXRleCk7CiAJd3JpdGVfY2FjaGVkX2RhdGEobXRkYmxrKTsKLQl1cCgmbXRkYmxrLT5jYWNoZV9zZW0pOworCW11dGV4X3VubG9jaygmbXRkYmxrLT5jYWNoZV9tdXRleCk7CiAKIAlpZiAobXRkYmxrLT5tdGQtPnN5bmMpCiAJCW10ZGJsay0+bXRkLT5zeW5jKG10ZGJsay0+bXRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYyBiL2RyaXZlcnMvbXRkL210ZGNvcmUuYwppbmRleCBkYWRlMDJhLi45OTA1ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCkBAIC0xOSwxNSArMTksMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KIAogLyogVGhlc2UgYXJlIGV4cG9ydGVkIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YgbXRkX2Jsa2RldnMuYy4gWW91CiAgICBzaG91bGQgbm90IHVzZSB0aGVtIGZvciBfYW55dGhpbmdfIGVsc2UgKi8KLURFQ0xBUkVfTVVURVgobXRkX3RhYmxlX211dGV4KTsKK0RFRklORV9NVVRFWChtdGRfdGFibGVfbXV0ZXgpOwogc3RydWN0IG10ZF9pbmZvICptdGRfdGFibGVbTUFYX01URF9ERVZJQ0VTXTsKIAogRVhQT1JUX1NZTUJPTF9HUEwobXRkX3RhYmxlX211dGV4KTsKQEAgLTQ5LDcgKzQ3LDcgQEAKIHsKIAlpbnQgaTsKIAotCWRvd24oJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAogCWZvciAoaT0wOyBpIDwgTUFYX01URF9ERVZJQ0VTOyBpKyspCiAJCWlmICghbXRkX3RhYmxlW2ldKSB7CkBAIC02Nyw3ICs2NSw3IEBACiAJCQkJbm90LT5hZGQobXRkKTsKIAkJCX0KIAotCQkJdXAoJm10ZF90YWJsZV9tdXRleCk7CisJCQltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CiAJCQkvKiBXZSBfa25vd18gd2UgYXJlbid0IGJlaW5nIHJlbW92ZWQsIGJlY2F1c2UKIAkJCSAgIG91ciBjYWxsZXIgaXMgc3RpbGwgaG9sZGluZyB1cyBoZXJlLiBTbyBub25lCiAJCQkgICBvZiB0aGlzIHRyeV8gbm9uc2Vuc2UsIGFuZCBubyBiaXRjaGluZyBhYm91dCBpdApAQCAtNzYsNyArNzQsNyBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAotCXVwKCZtdGRfdGFibGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtOTQsNyArOTIsNyBAQAogewogCWludCByZXQ7CiAKLQlkb3duKCZtdGRfdGFibGVfbXV0ZXgpOworCW11dGV4X2xvY2soJm10ZF90YWJsZV9tdXRleCk7CiAKIAlpZiAobXRkX3RhYmxlW210ZC0+aW5kZXhdICE9IG10ZCkgewogCQlyZXQgPSAtRU5PREVWOwpAQCAtMTE4LDcgKzExNiw3IEBACiAJCXJldCA9IDA7CiAJfQogCi0JdXAoJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzNSw3ICsxMzMsNyBAQAogewogCWludCBpOwogCi0JZG93bigmbXRkX3RhYmxlX211dGV4KTsKKwltdXRleF9sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCiAJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJm10ZF9ub3RpZmllcnMpOwogCkBAIC0xNDUsNyArMTQzLDcgQEAKIAkJaWYgKG10ZF90YWJsZVtpXSkKIAkJCW5ldy0+YWRkKG10ZF90YWJsZVtpXSk7CiAKLQl1cCgmbXRkX3RhYmxlX211dGV4KTsKKwltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CiB9CiAKIC8qKgpAQCAtMTYyLDcgKzE2MCw3IEBACiB7CiAJaW50IGk7CiAKLQlkb3duKCZtdGRfdGFibGVfbXV0ZXgpOworCW11dGV4X2xvY2soJm10ZF90YWJsZV9tdXRleCk7CiAKIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIApAQCAtMTcxLDcgKzE2OSw3IEBACiAJCQlvbGQtPnJlbW92ZShtdGRfdGFibGVbaV0pOwogCiAJbGlzdF9kZWwoJm9sZC0+bGlzdCk7Ci0JdXAoJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTMsNyArMTkxLDcgQEAKIAlzdHJ1Y3QgbXRkX2luZm8gKnJldCA9IE5VTEw7CiAJaW50IGk7CiAKLQlkb3duKCZtdGRfdGFibGVfbXV0ZXgpOworCW11dGV4X2xvY2soJm10ZF90YWJsZV9tdXRleCk7CiAKIAlpZiAobnVtID09IC0xKSB7CiAJCWZvciAoaT0wOyBpPCBNQVhfTVREX0RFVklDRVM7IGkrKykKQEAgLTIxMSw3ICsyMDksNyBAQAogCWlmIChyZXQpCiAJCXJldC0+dXNlY291bnQrKzsKIAotCXVwKCZtdGRfdGFibGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMTksOSArMjE3LDkgQEAKIHsKIAlpbnQgYzsKIAotCWRvd24oJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAljID0gLS1tdGQtPnVzZWNvdW50OwotCXVwKCZtdGRfdGFibGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAlCVUdfT04oYyA8IDApOwogCiAJbW9kdWxlX3B1dChtdGQtPm93bmVyKTsKQEAgLTI5NiwxMCArMjk0LDExIEBACiBFWFBPUlRfU1lNQk9MKGRlZmF1bHRfbXRkX3dyaXRldik7CiBFWFBPUlRfU1lNQk9MKGRlZmF1bHRfbXRkX3JlYWR2KTsKIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogU3VwcG9ydCBmb3IgL3Byb2MvbXRkICovCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19tdGQ7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG10ZF9wcm9jX2luZm8gKGNoYXIgKmJ1ZiwgaW50IGkpCkBAIC0zMTksNyArMzE4LDcgQEAKIAlpbnQgbGVuLCBsLCBpOwogICAgICAgICBvZmZfdCAgIGJlZ2luID0gMDsKIAotCWRvd24oJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAogCWxlbiA9IHNwcmludGYocGFnZSwgImRldjogICAgc2l6ZSAgIGVyYXNlc2l6ZSAgbmFtZVxuIik7CiAgICAgICAgIGZvciAoaT0wOyBpPCBNQVhfTVREX0RFVklDRVM7IGkrKykgewpAQCAtMzM3LDM4ICszMzYsMzQgQEAKICAgICAgICAgKmVvZiA9IDE7CiAKIGRvbmU6Ci0JdXAoJm10ZF90YWJsZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogICAgICAgICBpZiAob2ZmID49IGxlbitiZWdpbikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgKnN0YXJ0ID0gcGFnZSArIChvZmYtYmVnaW4pOwogICAgICAgICByZXR1cm4gKChjb3VudCA8IGJlZ2luK2xlbi1vZmYpID8gY291bnQgOiBiZWdpbitsZW4tb2ZmKTsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogSW5pdCBjb2RlICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfbXRkKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKIAlpZiAoKHByb2NfbXRkID0gY3JlYXRlX3Byb2NfZW50cnkoICJtdGQiLCAwLCBOVUxMICkpKQogCQlwcm9jX210ZC0+cmVhZF9wcm9jID0gbXRkX3JlYWRfcHJvYzsKLSNlbmRpZgogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9tdGQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwogICAgICAgICBpZiAocHJvY19tdGQpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KCAibXRkIiwgTlVMTCk7Ci0jZW5kaWYKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9tdGQpOwogbW9kdWxlX2V4aXQoY2xlYW51cF9tdGQpOwogCisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggMWZjNGMxMy4uY2ZlMjg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtMTc4LDE3ICsxNzgsMTYgQEAKIAkgIEV2ZW4gaWYgeW91IGxlYXZlIHRoaXMgZGlzYWJsZWQsIHlvdSBjYW4gZW5hYmxlIEJCVCB3cml0ZXMgYXQgbW9kdWxlCiAJICBsb2FkIHRpbWUgKGFzc3VtaW5nIHlvdSBidWlsZCBkaXNrb25jaGlwIGFzIGEgbW9kdWxlKSB3aXRoIHRoZSBtb2R1bGUKIAkgIHBhcmFtZXRlciAiaW5mdGxfYmJ0X3dyaXRlPTEiLgotCSAgCi0gY29uZmlnIE1URF9OQU5EX1NIQVJQU0wKLSAJYm9vbCAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBTaGFycCBTTCBTZXJpZXMgKEM3eHggKyBvdGhlcnMpIgotIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIEFSQ0hfUFhBCi0gCi0gY29uZmlnIE1URF9OQU5EX05BTkRTSU0KLSAJYm9vbCAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBTaW11bGF0b3IiCi0gCWRlcGVuZHMgb24gTVREX05BTkQgJiYgTVREX1BBUlRJVElPTlMKIAorY29uZmlnIE1URF9OQU5EX1NIQVJQU0wKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBTaGFycCBTTCBTZXJpZXMgKEM3eHggKyBvdGhlcnMpIgorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgQVJDSF9QWEEKKworY29uZmlnIE1URF9OQU5EX05BTkRTSU0KKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBTaW11bGF0b3IiCisJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBNVERfUEFSVElUSU9OUwogCWhlbHAKIAkgIFRoZSBzaW11bGF0b3IgbWF5IHNpbXVsYXRlIHZlcmlvdXMgTkFORCBmbGFzaCBjaGlwcyBmb3IgdGhlCiAJICBNVEQgbmFuZCBsYXllci4KLSAKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCmluZGV4IDIwMWUxMzYuLmJkZTM1NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKQEAgLTU1LDggKzU1LDYgQEAKICAJCS5zaXplIAk9ICAgIE1URFBBUlRfU0laX0ZVTEwKIAl9CiB9OwotI2RlZmluZSBOQl9PRih4KSAgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCi0KIAogLyoqCiAgKiBhdV9yZWFkX2J5dGUgLSAgcmVhZCBvbmUgYnl0ZSBmcm9tIHRoZSBjaGlwCkBAIC00NjIsNyArNDYwLDcgQEAKIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCWFkZF9tdGRfcGFydGl0aW9ucyhhdTE1NTBfbXRkLCBwYXJ0aXRpb25faW5mbywgTkJfT0YocGFydGl0aW9uX2luZm8pKTsKKwlhZGRfbXRkX3BhcnRpdGlvbnMoYXUxNTUwX210ZCwgcGFydGl0aW9uX2luZm8sIEFSUkFZX1NJWkUocGFydGl0aW9uX2luZm8pKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCA1ZDIyMjQ2Li45NWU5NmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCkBAIC01MTUsNiArNTE2LDggQEAKIAlyZXR1cm4gbmFuZF9pc2JhZF9iYnQgKG10ZCwgb2ZzLCBhbGxvd2JidCk7CiB9CiAKK0RFRklORV9MRURfVFJJR0dFUihuYW5kX2xlZF90cmlnZ2VyKTsKKwogLyoKICAqIFdhaXQgZm9yIHRoZSByZWFkeSBwaW4sIGFmdGVyIGEgY29tbWFuZAogICogVGhlIHRpbWVvdXQgaXMgY2F0Y2hlZCBsYXRlci4KQEAgLTUyNCwxMiArNTI3LDE0IEBACiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAl1bnNpZ25lZCBsb25nCXRpbWVvID0gamlmZmllcyArIDI7CiAKKwlsZWRfdHJpZ2dlcl9ldmVudChuYW5kX2xlZF90cmlnZ2VyLCBMRURfRlVMTCk7CiAJLyogd2FpdCB1bnRpbCBjb21tYW5kIGlzIHByb2Nlc3NlZCBvciB0aW1lb3V0IG9jY3VyZXMgKi8KIAlkbyB7CiAJCWlmICh0aGlzLT5kZXZfcmVhZHkobXRkKSkKLQkJCXJldHVybjsKKwkJCWJyZWFrOwogCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiAJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW8pKTsKKwlsZWRfdHJpZ2dlcl9ldmVudChuYW5kX2xlZF90cmlnZ2VyLCBMRURfT0ZGKTsKIH0KIAogLyoqCkBAIC04MTcsNiArODIyLDggQEAKIAllbHNlCiAJCSB0aW1lbyArPSAoSFogKiAyMCkgLyAxMDAwOwogCisJbGVkX3RyaWdnZXJfZXZlbnQobmFuZF9sZWRfdHJpZ2dlciwgTEVEX0ZVTEwpOworCiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KIAluZGVsYXkgKDEwMCk7CkBAIC04NDAsNiArODQ3LDggQEAKIAkJfQogCQljb25kX3Jlc2NoZWQoKTsKIAl9CisJbGVkX3RyaWdnZXJfZXZlbnQobmFuZF9sZWRfdHJpZ2dlciwgTEVEX09GRik7CisKIAlzdGF0dXMgPSAoaW50KSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMjcyNCw2ICsyNzMzLDIxIEBACiBFWFBPUlRfU1lNQk9MX0dQTCAobmFuZF9zY2FuKTsKIEVYUE9SVF9TWU1CT0xfR1BMIChuYW5kX3JlbGVhc2UpOwogCisKK3N0YXRpYyBpbnQgX19pbml0IG5hbmRfYmFzZV9pbml0KHZvaWQpCit7CisJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJuYW5kLWRpc2siLCAmbmFuZF9sZWRfdHJpZ2dlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuYW5kX2Jhc2VfZXhpdCh2b2lkKQoreworCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKG5hbmRfbGVkX3RyaWdnZXIpOworfQorCittb2R1bGVfaW5pdChuYW5kX2Jhc2VfaW5pdCk7Cittb2R1bGVfZXhpdChuYW5kX2Jhc2VfZXhpdCk7CisKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiBNT0RVTEVfQVVUSE9SICgiU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIkdlbmVyaWMgTkFORCBmbGFzaCBkcml2ZXIgY29kZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcmVkYm9vdC5jIGIvZHJpdmVycy9tdGQvcmVkYm9vdC5jCmluZGV4IDg4MTVjOGQuLmMwNzdkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3JlZGJvb3QuYworKysgYi9kcml2ZXJzL210ZC9yZWRib290LmMKQEAgLTg1LDEwICs4NSw2IEBACiAKIAludW1zbG90cyA9IChtYXN0ZXItPmVyYXNlc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZmlzX2ltYWdlX2Rlc2MpKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtc2xvdHM7IGkrKykgewotCQlpZiAoYnVmW2ldLm5hbWVbMF0gPT0gMHhmZikgewotCQkJaSA9IG51bXNsb3RzOwotCQkJYnJlYWs7Ci0JCX0KIAkJaWYgKCFtZW1jbXAoYnVmW2ldLm5hbWUsICJGSVMgZGlyZWN0b3J5IiwgMTQpKSB7CiAJCQkvKiBUaGlzIGlzIGFwcGFyZW50bHkgdGhlIEZJUyBkaXJlY3RvcnkgZW50cnkgZm9yIHRoZQogCQkJICogRklTIGRpcmVjdG9yeSBpdHNlbGYuICBUaGUgRklTIGRpcmVjdG9yeSBzaXplIGlzCkBAIC0xMjgsNyArMTI0LDcgQEAKIAkJc3RydWN0IGZpc19saXN0ICpuZXdfZmwsICoqcHJldjsKIAogCQlpZiAoYnVmW2ldLm5hbWVbMF0gPT0gMHhmZikKLQkJCWJyZWFrOworCQkJY29udGludWU7CiAJCWlmICghcmVkYm9vdF9jaGVja3N1bSgmYnVmW2ldKSkKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCA3MGY2Mzg5Li4yNzRiMDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzU5eC5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKQEAgLTc4OCw3ICs3ODgsNyBAQAogCWludCBvcHRpb25zOwkJCQkJCS8qIFVzZXItc2V0dGFibGUgbWlzYy4gZHJpdmVyIG9wdGlvbnMuICovCiAJdW5zaWduZWQgaW50IG1lZGlhX292ZXJyaWRlOjQsIAkJLyogUGFzc2VkLWluIG1lZGlhIHR5cGUuICovCiAJCWRlZmF1bHRfbWVkaWE6NCwJCQkJLyogUmVhZCBmcm9tIHRoZSBFRVBST00vV24zX0NvbmZpZy4gKi8KLQkJZnVsbF9kdXBsZXg6MSwgZm9yY2VfZmQ6MSwgYXV0b3NlbGVjdDoxLAorCQlmdWxsX2R1cGxleDoxLCBhdXRvc2VsZWN0OjEsCiAJCWJ1c19tYXN0ZXI6MSwJCQkJCS8qIFZvcnRleCBjYW4gb25seSBkbyBhIGZyYWdtZW50IGJ1cy1tLiAqLwogCQlmdWxsX2J1c19tYXN0ZXJfdHg6MSwgZnVsbF9idXNfbWFzdGVyX3J4OjIsIC8qIEJvb21lcmFuZyAgKi8KIAkJZmxvd19jdHJsOjEsCQkJCQkvKiBVc2UgODAyLjN4IGZsb3cgY29udHJvbCAoUEFVU0Ugb25seSkgKi8KQEAgLTE2MzMsMTIgKzE2MzMsNiBAQAogCQkJKCh2cC0+ZnVsbF9kdXBsZXggJiYgdnAtPmZsb3dfY3RybCAmJiB2cC0+cGFydG5lcl9mbG93X2N0cmwpID8KIAkJCQkJMHgxMDAgOiAwKSwKIAkJCWlvYWRkciArIFduM19NQUNfQ3RybCk7Ci0KLQlpc3N1ZV9hbmRfd2FpdChkZXYsIFR4UmVzZXQpOwotCS8qCi0JICogRG9uJ3QgcmVzZXQgdGhlIFBIWSAtIHRoYXQgdXBzZXRzIGF1dG9uZWdvdGlhdGlvbiBkdXJpbmcgREhDUCBvcGVyYXRpb25zLgotCSAqLwotCWlzc3VlX2FuZF93YWl0KGRldiwgUnhSZXNldHwweDA0KTsKIH0KIAogc3RhdGljIHZvaWQgdm9ydGV4X2NoZWNrX21lZGlhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpbml0KQpAQCAtMTY2Myw3ICsxNjU3LDcgQEAKIAlzdHJ1Y3Qgdm9ydGV4X3ByaXZhdGUgKnZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHZwLT5pb2FkZHI7CiAJdW5zaWduZWQgaW50IGNvbmZpZzsKLQlpbnQgaTsKKwlpbnQgaSwgbWlpX3JlZzEsIG1paV9yZWc1OwogCiAJaWYgKFZPUlRFWF9QQ0kodnApKSB7CiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUoVk9SVEVYX1BDSSh2cCksIFBDSV9EMCk7CS8qIEdvIGFjdGl2ZSAqLwpAQCAtMTcyMywxNCArMTcxNywyMyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4X3VwKCk6IHdyaXRpbmcgMHgleCB0byBJbnRlcm5hbENvbmZpZ1xuIiwgY29uZmlnKTsKIAlpb3dyaXRlMzIoY29uZmlnLCBpb2FkZHIgKyBXbjNfQ29uZmlnKTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJaWYgKGRldi0+aWZfcG9ydCA9PSBYQ1ZSX01JSSB8fCBkZXYtPmlmX3BvcnQgPT0gWENWUl9OV0FZKSB7CiAJCUVMM1dJTkRPVyg0KTsKKwkJbWlpX3JlZzEgPSBtZGlvX3JlYWQoZGV2LCB2cC0+cGh5c1swXSwgTUlJX0JNU1IpOworCQltaWlfcmVnNSA9IG1kaW9fcmVhZChkZXYsIHZwLT5waHlzWzBdLCBNSUlfTFBBKTsKKwkJdnAtPnBhcnRuZXJfZmxvd19jdHJsID0gKChtaWlfcmVnNSAmIDB4MDQwMCkgIT0gMCk7CisKIAkJdm9ydGV4X2NoZWNrX21lZGlhKGRldiwgMSk7CiAJfQogCWVsc2UKIAkJdm9ydGV4X3NldF9kdXBsZXgoZGV2KTsKIAorCWlzc3VlX2FuZF93YWl0KGRldiwgVHhSZXNldCk7CisJLyoKKwkgKiBEb24ndCByZXNldCB0aGUgUEhZIC0gdGhhdCB1cHNldHMgYXV0b25lZ290aWF0aW9uIGR1cmluZyBESENQIG9wZXJhdGlvbnMuCisJICovCisJaXNzdWVfYW5kX3dhaXQoZGV2LCBSeFJlc2V0fDB4MDQpOworCiAKIAlpb3dyaXRlMTYoU2V0U3RhdHVzRW5iIHwgMHgwMCwgaW9hZGRyICsgRUwzX0NNRCk7CiAKQEAgLTIwODMsMTYgKzIwODYsMTQgQEAKIAkJfQogCQlpZiAodHhfc3RhdHVzICYgMHgxNCkgIHZwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQlpZiAodHhfc3RhdHVzICYgMHgzOCkgIHZwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlpZiAodHhfc3RhdHVzICYgMHgwOCkgIHZwLT54c3RhdHMudHhfbWF4X2NvbGxpc2lvbnMrKzsKIAkJaW93cml0ZTgoMCwgaW9hZGRyICsgVHhTdGF0dXMpOwogCQlpZiAodHhfc3RhdHVzICYgMHgzMCkgewkJCS8qIHR4SmFiYmVyIG9yIHR4VW5kZXJydW4gKi8KIAkJCWRvX3R4X3Jlc2V0ID0gMTsKLQkJfSBlbHNlIGlmICh0eF9zdGF0dXMgJiAweDA4KSB7CS8qIG1heENvbGxpc2lvbnMgKi8KLQkJCXZwLT54c3RhdHMudHhfbWF4X2NvbGxpc2lvbnMrKzsKLQkJCWlmICh2cC0+ZHJ2X2ZsYWdzICYgTUFYX0NPTExJU0lPTl9SRVNFVCkgewotCQkJCWRvX3R4X3Jlc2V0ID0gMTsKLQkJCQlyZXNldF9tYXNrID0gMHgwMTA4OwkJLyogUmVzZXQgaW50ZXJmYWNlIGxvZ2ljLCBidXQgbm90IGRvd25sb2FkIGxvZ2ljICovCi0JCQl9Ci0JCX0gZWxzZSB7CQkJCQkJLyogTWVyZWx5IHJlLWVuYWJsZSB0aGUgdHJhbnNtaXR0ZXIuICovCisJCX0gZWxzZSBpZiAoKHR4X3N0YXR1cyAmIDB4MDgpICYmICh2cC0+ZHJ2X2ZsYWdzICYgTUFYX0NPTExJU0lPTl9SRVNFVCkpICB7CS8qIG1heENvbGxpc2lvbnMgKi8KKwkJCWRvX3R4X3Jlc2V0ID0gMTsKKwkJCXJlc2V0X21hc2sgPSAweDAxMDg7CQkvKiBSZXNldCBpbnRlcmZhY2UgbG9naWMsIGJ1dCBub3QgZG93bmxvYWQgbG9naWMgKi8KKwkJfSBlbHNlIHsJCQkJLyogTWVyZWx5IHJlLWVuYWJsZSB0aGUgdHJhbnNtaXR0ZXIuICovCiAJCQlpb3dyaXRlMTYoVHhFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCBjZTk5ODQ1Li4wNjZlMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtNTM5LDggKzUzOSw3IEBACiAJCXVuc2lnbmVkIGJ1ZmxlbjsKIAogCQlza2IgPSBjcC0+cnhfc2tiW3J4X3RhaWxdLnNrYjsKLQkJaWYgKCFza2IpCi0JCQlCVUcoKTsKKwkJQlVHX09OKCFza2IpOwogCiAJCWRlc2MgPSAmY3AtPnJ4X3JpbmdbcnhfdGFpbF07CiAJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGRlc2MtPm9wdHMxKTsKQEAgLTcyMyw4ICs3MjIsNyBAQAogCQkJYnJlYWs7CiAKIAkJc2tiID0gY3AtPnR4X3NrYlt0eF90YWlsXS5za2I7Ci0JCWlmICghc2tiKQotCQkJQlVHKCk7CisJCUJVR19PTighc2tiKTsKIAogCQlwY2lfdW5tYXBfc2luZ2xlKGNwLT5wZGV2LCBjcC0+dHhfc2tiW3R4X3RhaWxdLm1hcHBpbmcsCiAJCQkJIGNwLT50eF9za2JbdHhfdGFpbF0ubGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTE1NTAsOCArMTU0OCw3IEBACiAJdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShuaWNfc3RhdHMtPnR4X2Fib3J0KTsKIAl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KG5pY19zdGF0cy0+dHhfdW5kZXJydW4pOwogCXRtcF9zdGF0c1tpKytdID0gY3AtPmNwX3N0YXRzLnJ4X2ZyYWdzOwotCWlmIChpICE9IENQX05VTV9TVEFUUykKLQkJQlVHKCk7CisJQlVHX09OKGkgIT0gQ1BfTlVNX1NUQVRTKTsKIAogCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3AtPnBkZXYsIHNpemVvZigqbmljX3N0YXRzKSwgbmljX3N0YXRzLCBkbWEpOwogfQpAQCAtMTg1Niw4ICsxODUzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBjcF9wcml2YXRlICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoIWRldikKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaW91bm1hcChjcC0+cmVncyk7CiAJaWYgKGNwLT53b2xfZW5hYmxlZCkgcGNpX3NldF9wb3dlcl9zdGF0ZSAocGRldiwgUENJX0QwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGUyMGI4NDkuLmJkYWFhZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMjMxMywxMyArMjMxMywxMSBAQAogCiBlbmRtZW51CiAKLWlmICFVTUwKIHNvdXJjZSAiZHJpdmVycy9uZXQvdG9rZW5yaW5nL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL25ldC9wY21jaWEvS2NvbmZpZyIKLWVuZGlmCiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2FuL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYwppbmRleCA2NGUyY2FmLi5mYWJjMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCkBAIC03NjUsOCArNzY1LDcgQEAKIAlCVUdNU0coRF9EVVJJTkcsICJpbiBhcmNuZXRfaW50ZXJydXB0XG4iKTsKIAkKIAlscCA9IGRldi0+cHJpdjsKLQlpZiAoIWxwKQotCQlCVUcoKTsKKwlCVUdfT04oIWxwKTsKIAkJCiAJc3Bpbl9sb2NrKCZscC0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb205MHh4LmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tOTB4eC5jCmluZGV4IDQzMTUwYjIuLjBkNDU1NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb205MHh4LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTkweHguYwpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlpZiAoIWlvICYmICFpcnEgJiYgIXNobWVtICYmICEqZGV2aWNlICYmIGNvbTkweHhfc2tpcF9wcm9iZSkKIAkJcmV0dXJuOwogCi0Jc2htZW1zID0ga3phbGxvYygoKDB4MTAwMDAtMHhhMDAwMCkgLyAweDgwMCkgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJc2htZW1zID0ga3phbGxvYygoKDB4MTAwMDAwLTB4YTAwMDApIC8gMHg4MDApICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAogCQkJIEdGUF9LRVJORUwpOwogCWlmICghc2htZW1zKQogCQlyZXR1cm47Ci0JaW9tZW0gPSBremFsbG9jKCgoMHgxMDAwMC0weGEwMDAwKSAvIDB4ODAwKSAqIHNpemVvZih2b2lkIF9faW9tZW0gKiksCisJaW9tZW0gPSBremFsbG9jKCgoMHgxMDAwMDAtMHhhMDAwMCkgLyAweDgwMCkgKiBzaXplb2Yodm9pZCBfX2lvbWVtICopLAogCQkJIEdGUF9LRVJORUwpOwogCWlmICghaW9tZW0pIHsKIAkJa2ZyZWUoc2htZW1zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCAxMzYzMDgzLi4xNGRiYWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTIwNzAsMjMgKzIwNzEsNiBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotCi1zdGF0aWMgdW5zaWduZWQgY29uc3QgZXRoZXJuZXRfcG9seW5vbWlhbCA9IDB4MDRjMTFkYjdVOwotc3RhdGljIGlubGluZSB1MzIgZXRoZXJfY3JjKGludCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCi17Ci0gICAgaW50IGNyYyA9IC0xOwotCi0gICAgd2hpbGUoLS1sZW5ndGggPj0gMCkgewotCQl1bnNpZ25lZCBjaGFyIGN1cnJlbnRfb2N0ZXQgPSAqZGF0YSsrOwotCQlpbnQgYml0OwotCQlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrLCBjdXJyZW50X29jdGV0ID4+PSAxKQotCQkJY3JjID0gKGNyYyA8PCAxKSBeCi0JCQkJKChjcmMgPCAwKSBeIChjdXJyZW50X29jdGV0ICYgMSkgPyAKLQkJCQkgZXRoZXJuZXRfcG9seW5vbWlhbCA6IDApOwotICAgIH0KLSAgICByZXR1cm4gY3JjOwotfQotCiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IDE1MDMyZjIuLmQ4MjMzZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2I0NC5jCisrKyBiL2RyaXZlcnMvbmV0L2I0NC5jCkBAIC0yLDYgKzIsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCiAgKiBGaXhlZCBieSBQZWtrYSBQaWV0aWthaW5lbiAocHBAZWUub3VsdS5maSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KICAqCiAgKiBEaXN0cmlidXRlIHVuZGVyIEdQTC4KICAqLwpAQCAtMjgsOCArMjksOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImI0NCIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC45NyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJOb3YgMzAsIDIwMDUiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS4wMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJBcHIgNywgMjAwNiIKIAogI2RlZmluZSBCNDRfREVGX01TR19FTkFCTEUJICBcCiAJKE5FVElGX01TR19EUlYJCXwgXApAQCAtMTM2LDcgKzEzNyw3IEBACiAJcmV0dXJuIHJlYWRsKGJwLT5yZWdzICsgcmVnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJ3MzIoY29uc3Qgc3RydWN0IGI0NCAqYnAsIAorc3RhdGljIGlubGluZSB2b2lkIGJ3MzIoY29uc3Qgc3RydWN0IGI0NCAqYnAsCiAJCQl1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJd3JpdGVsKHZhbCwgYnAtPnJlZ3MgKyByZWcpOwpAQCAtMjg2LDEzICsyODcsMTMgQEAKIAl2YWwgfD0gKCh1MzIpIGRhdGFbNF0pIDw8ICA4OwogCXZhbCB8PSAoKHUzMikgZGF0YVs1XSkgPDwgIDA7CiAJYnczMihicCwgQjQ0X0NBTV9EQVRBX0xPLCB2YWwpOwotCXZhbCA9IChDQU1fREFUQV9ISV9WQUxJRCB8IAorCXZhbCA9IChDQU1fREFUQV9ISV9WQUxJRCB8CiAJICAgICAgICgoKHUzMikgZGF0YVswXSkgPDwgOCkgfAogCSAgICAgICAoKCh1MzIpIGRhdGFbMV0pIDw8IDApKTsKIAlidzMyKGJwLCBCNDRfQ0FNX0RBVEFfSEksIHZhbCk7CiAJYnczMihicCwgQjQ0X0NBTV9DVFJMLCAoQ0FNX0NUUkxfV1JJVEUgfAogCQkJICAgIChpbmRleCA8PCBDQU1fQ1RSTF9JTkRFWF9TSElGVCkpKTsKLQliNDRfd2FpdF9iaXQoYnAsIEI0NF9DQU1fQ1RSTCwgQ0FNX0NUUkxfQlVTWSwgMTAwLCAxKTsJCisJYjQ0X3dhaXRfYml0KGJwLCBCNDRfQ0FNX0NUUkwsIENBTV9DVFJMX0JVU1ksIDEwMCwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2I0NF9kaXNhYmxlX2ludHMoc3RydWN0IGI0NCAqYnApCkBAIC00MTAsMjUgKzQxMSwxOCBAQAogCiBzdGF0aWMgdm9pZCBiNDRfc2V0X2Zsb3dfY3RybChzdHJ1Y3QgYjQ0ICpicCwgdTMyIGxvY2FsLCB1MzIgcmVtb3RlKQogewotCXUzMiBwYXVzZV9lbmFiID0gYnAtPmZsYWdzICYgKEI0NF9GTEFHX1RYX1BBVVNFIHwKLQkJCQkgICAgICBCNDRfRkxBR19SWF9QQVVTRSk7CisJdTMyIHBhdXNlX2VuYWIgPSAwOwogCi0JaWYgKGxvY2FsICYgQURWRVJUSVNFX1BBVVNFX0NBUCkgewotCQlpZiAobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkgewotCQkJaWYgKHJlbW90ZSAmIExQQV9QQVVTRV9DQVApCi0JCQkJcGF1c2VfZW5hYiB8PSAoQjQ0X0ZMQUdfVFhfUEFVU0UgfAotCQkJCQkgICAgICAgQjQ0X0ZMQUdfUlhfUEFVU0UpOwotCQkJZWxzZSBpZiAocmVtb3RlICYgTFBBX1BBVVNFX0FTWU0pCi0JCQkJcGF1c2VfZW5hYiB8PSBCNDRfRkxBR19SWF9QQVVTRTsKLQkJfSBlbHNlIHsKLQkJCWlmIChyZW1vdGUgJiBMUEFfUEFVU0VfQ0FQKQotCQkJCXBhdXNlX2VuYWIgfD0gKEI0NF9GTEFHX1RYX1BBVVNFIHwKLQkJCQkJICAgICAgIEI0NF9GTEFHX1JYX1BBVVNFKTsKLQkJfQotCX0gZWxzZSBpZiAobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkgewotCQlpZiAoKHJlbW90ZSAmIExQQV9QQVVTRV9DQVApICYmCi0JCSAgICAocmVtb3RlICYgTFBBX1BBVVNFX0FTWU0pKQotCQkJcGF1c2VfZW5hYiB8PSBCNDRfRkxBR19UWF9QQVVTRTsKKwkvKiBUaGUgZHJpdmVyIHN1cHBvcnRzIG9ubHkgcnggcGF1c2UgYnkgZGVmYXVsdCBiZWNhdXNlCisJICAgdGhlIGI0NCBtYWMgdHggcGF1c2UgbWVjaGFuaXNtIGdlbmVyYXRlcyBleGNlc3NpdmUKKwkgICBwYXVzZSBmcmFtZXMuCisJICAgVXNlIGV0aHRvb2wgdG8gdHVybiBvbiBiNDQgdHggcGF1c2UgaWYgbmVjZXNzYXJ5LgorCSAqLworCWlmICgobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQ0FQKSAmJgorCSAgICAobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkpeworCQlpZiAoKHJlbW90ZSAmIExQQV9QQVVTRV9BU1lNKSAmJgorCQkgICAgIShyZW1vdGUgJiBMUEFfUEFVU0VfQ0FQKSkKKwkJCXBhdXNlX2VuYWIgfD0gQjQ0X0ZMQUdfUlhfUEFVU0U7CiAJfQogCiAJX19iNDRfc2V0X2Zsb3dfY3RybChicCwgcGF1c2VfZW5hYik7CkBAIC02MDgsOCArNjAyLDcgQEAKIAkJc3RydWN0IHJpbmdfaW5mbyAqcnAgPSAmYnAtPnR4X2J1ZmZlcnNbY29uc107CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBycC0+c2tiOwogCi0JCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHNrYiA9PSBOVUxMKTsKIAogCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LAogCQkJCSBwY2lfdW5tYXBfYWRkcihycCwgbWFwcGluZyksCkBAIC02NTcsOSArNjUwLDExIEBACiAKIAkvKiBIYXJkd2FyZSBidWcgd29yay1hcm91bmQsIHRoZSBjaGlwIGlzIHVuYWJsZSB0byBkbyBQQ0kgRE1BCiAJICAgdG8vZnJvbSBhbnl0aGluZyBhYm92ZSAxR0IgOi0oICovCi0JaWYgKG1hcHBpbmcgKyBSWF9QS1RfQlVGX1NaID4gQjQ0X0RNQV9NQVNLKSB7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8CisJCW1hcHBpbmcgKyBSWF9QS1RfQlVGX1NaID4gQjQ0X0RNQV9NQVNLKSB7CiAJCS8qIFNpZ2guLi4gKi8KLQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgUlhfUEtUX0JVRl9TWixQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpKQorCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgUlhfUEtUX0JVRl9TWixQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlza2IgPSBfX2Rldl9hbGxvY19za2IoUlhfUEtUX0JVRl9TWixHRlBfRE1BKTsKIAkJaWYgKHNrYiA9PSBOVUxMKQpAQCAtNjY3LDggKzY2MiwxMCBAQAogCQltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwKIAkJCQkJIFJYX1BLVF9CVUZfU1osCiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlpZiAobWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBCNDRfRE1BX01BU0spIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcHBpbmcsIFJYX1BLVF9CVUZfU1osUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8CisJCQltYXBwaW5nICsgUlhfUEtUX0JVRl9TWiA+IEI0NF9ETUFfTUFTSykgeworCQkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLCBSWF9QS1RfQlVGX1NaLFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTk3NCw5ICs5NzEsMTAgQEAKIAl9CiAKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAobWFwcGluZyArIGxlbiA+IEI0NF9ETUFfTUFTSykgeworCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gQjQ0X0RNQV9NQVNLKSB7CiAJCS8qIENoaXAgY2FuJ3QgaGFuZGxlIERNQSB0by9mcm9tID4xR0IsIHVzZSBib3VuY2UgYnVmZmVyICovCi0JCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcHBpbmcsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCWlmICghZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykpCisJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJCWJvdW5jZV9za2IgPSBfX2Rldl9hbGxvY19za2IoVFhfUEtUX0JVRl9TWiwKIAkJCQkJICAgICBHRlBfQVRPTUlDfEdGUF9ETUEpOwpAQCAtOTg1LDggKzk4Myw5IEBACiAKIAkJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBib3VuY2Vfc2tiLT5kYXRhLAogCQkJCQkgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaWYgKG1hcHBpbmcgKyBsZW4gPiBCNDRfRE1BX01BU0spIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcHBpbmcsCisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gQjQ0X0RNQV9NQVNLKSB7CisJCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpKQorCQkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcHBpbmcsCiAJCQkJCSBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoYm91bmNlX3NrYik7CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0xMDY0LDcgKzEwNjMsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xMjEwLDcgKzEyMDksOCBAQAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UQUJMRV9CWVRFUywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CiAKLQkJaWYgKHJ4X3JpbmdfZG1hICsgc2l6ZSA+IEI0NF9ETUFfTUFTSykgeworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IocnhfcmluZ19kbWEpIHx8CisJCQlyeF9yaW5nX2RtYSArIHNpemUgPiBCNDRfRE1BX01BU0spIHsKIAkJCWtmcmVlKHJ4X3JpbmcpOwogCQkJZ290byBvdXRfZXJyOwogCQl9CkBAIC0xMjM2LDcgKzEyMzYsOCBAQAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UQUJMRV9CWVRFUywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAotCQlpZiAodHhfcmluZ19kbWEgKyBzaXplID4gQjQ0X0RNQV9NQVNLKSB7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcih0eF9yaW5nX2RtYSkgfHwKKwkJCXR4X3JpbmdfZG1hICsgc2l6ZSA+IEI0NF9ETUFfTUFTSykgewogCQkJa2ZyZWUodHhfcmluZyk7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KQEAgLTEzODIsNyArMTM4Myw3IEBACiAJYnczMihicCwgQjQ0X0RNQVJYX0FERFIsIGJwLT5yeF9yaW5nX2RtYSArIGJwLT5kbWFfb2Zmc2V0KTsKIAogCWJ3MzIoYnAsIEI0NF9ETUFSWF9QVFIsIGJwLT5yeF9wZW5kaW5nKTsKLQlicC0+cnhfcHJvZCA9IGJwLT5yeF9wZW5kaW5nOwkKKwlicC0+cnhfcHJvZCA9IGJwLT5yeF9wZW5kaW5nOwogCiAJYnczMihicCwgQjQ0X01JQl9DVFJMLCBNSUJfQ1RSTF9DTFJfT05fUkVBRCk7CiAKQEAgLTE1NTQsOSArMTU1NSw5IEBACiAJCQl2YWwgfD0gUlhDT05GSUdfQUxMTVVMVEk7CiAJCWVsc2UKIAkJCWkgPSBfX2I0NF9sb2FkX21jYXN0KGJwLCBkZXYpOwotCQkKKwogCQlmb3IgKDsgaSA8IDY0OyBpKyspIHsKLQkJCV9fYjQ0X2NhbV93cml0ZShicCwgemVybywgaSk7CQkJCisJCQlfX2I0NF9jYW1fd3JpdGUoYnAsIHplcm8sIGkpOwogCQl9CiAJCWJ3MzIoYnAsIEI0NF9SWENPTkZJRywgdmFsKTsKICAgICAgICAgCXZhbCA9IGJyMzIoYnAsIEI0NF9DQU1fQ1RSTCk7CkBAIC0xNzM4LDcgKzE3MzksNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xNzgzLDcgKzE3ODQsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xODk5LDcgKzE5MDAsNyBAQAogCWJwLT5jb3JlX3VuaXQgPSBzc2JfY29yZV91bml0KGJwKTsKIAlicC0+ZG1hX29mZnNldCA9IFNCX1BDSV9ETUE7CiAKLQkvKiBYWFggLSByZWFsbHkgcmVxdWlyZWQ/IAorCS8qIFhYWCAtIHJlYWxseSByZXF1aXJlZD8KIAkgICBicC0+ZmxhZ3MgfD0gQjQ0X0ZMQUdfQlVHR1lfVFhQVFI7CiAgICAgICAgICAqLwogb3V0OgpAQCAtMTk0Nyw3ICsxOTQ4LDcgQEAKIAkJICAgICAgICJhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQotCQorCiAJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsICh1NjQpIEI0NF9ETUFfTUFTSyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sICIKQEAgLTIwNDIsOSArMjA0Myw5IEBACiAKIAlwY2lfc2F2ZV9zdGF0ZShicC0+cGRldik7CiAKLQkvKiBDaGlwIHJlc2V0IHByb3ZpZGVzIHBvd2VyIHRvIHRoZSBiNDQgTUFDICYgUENJIGNvcmVzLCB3aGljaCAKKwkvKiBDaGlwIHJlc2V0IHByb3ZpZGVzIHBvd2VyIHRvIHRoZSBiNDQgTUFDICYgUENJIGNvcmVzLCB3aGljaAogCSAqIGlzIG5lY2Vzc2FyeSBmb3IgTUFDIHJlZ2lzdGVyIGFjY2Vzcy4KLQkgKi8gCisJICovCiAJYjQ0X2NoaXBfcmVzZXQoYnApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJyb2FkY29tIDQ0MDAgMTAvMTAwQmFzZVQgRXRoZXJuZXQgIiwgZGV2LT5uYW1lKTsKQEAgLTIwOTIsMTAgKzIwOTMsMTAgQEAKIAogCWRlbF90aW1lcl9zeW5jKCZicC0+dGltZXIpOwogCi0Jc3Bpbl9sb2NrX2lycSgmYnAtPmxvY2spOyAKKwlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CiAKIAliNDRfaGFsdChicCk7Ci0JbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7IAorCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOwogCW5ldGlmX2RldmljZV9kZXRhY2goYnAtPmRldik7CiAJYjQ0X2ZyZWVfcmluZ3MoYnApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggMjY3MWRhMi4uNTQxNjFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTUsMTUgKzU1LDE1IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40LjM5IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hcmNoIDIyLCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNC40MCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXkgMjIsIDIwMDYiCiAKICNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQogCiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCiAjZGVmaW5lIFRYX1RJTUVPVVQgICg1KkhaKQogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBHaWdhYml0IEV0aGVybmV0IERyaXZlciAiIERSVl9NT0RVTEVfTkFNRSAiIHYiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBDaGFuIDxtY2hhbkBicm9hZGNvbS5jb20+Iik7CkBAIC0yOTQ1LDcgKzI5NDUsNyBAQAogCQlpbnQgYnVmX3NpemUpCiB7CiAJdTMyIHdyaXR0ZW4sIG9mZnNldDMyLCBsZW4zMjsKLQl1OCAqYnVmLCBzdGFydFs0XSwgZW5kWzRdOworCXU4ICpidWYsIHN0YXJ0WzRdLCBlbmRbNF0sICpmbGFzaF9idWZmZXIgPSBOVUxMOwogCWludCByYyA9IDA7CiAJaW50IGFsaWduX3N0YXJ0LCBhbGlnbl9lbmQ7CiAKQEAgLTI5ODUsMTIgKzI5ODUsMTkgQEAKIAkJbWVtY3B5KGJ1ZiArIGFsaWduX3N0YXJ0LCBkYXRhX2J1ZiwgYnVmX3NpemUpOwogCX0KIAorCWlmIChicC0+Zmxhc2hfaW5mby0+YnVmZmVyZWQgPT0gMCkgeworCQlmbGFzaF9idWZmZXIgPSBrbWFsbG9jKDI2NCwgR0ZQX0tFUk5FTCk7CisJCWlmIChmbGFzaF9idWZmZXIgPT0gTlVMTCkgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBudnJhbV93cml0ZV9lbmQ7CisJCX0KKwl9CisKIAl3cml0dGVuID0gMDsKIAl3aGlsZSAoKHdyaXR0ZW4gPCBsZW4zMikgJiYgKHJjID09IDApKSB7CiAJCXUzMiBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgZGF0YV9zdGFydCwgZGF0YV9lbmQ7CiAJCXUzMiBhZGRyLCBjbWRfZmxhZ3M7CiAJCWludCBpOwotCQl1OCBmbGFzaF9idWZmZXJbMjY0XTsKIAogCSAgICAgICAgLyogRmluZCB0aGUgcGFnZV9zdGFydCBhZGRyICovCiAJCXBhZ2Vfc3RhcnQgPSBvZmZzZXQzMiArIHdyaXR0ZW47CkBAIC0zMDYxLDcgKzMwNjgsNyBAQAogCQl9CiAKIAkJLyogTG9vcCB0byB3cml0ZSB0aGUgbmV3IGRhdGEgZnJvbSBkYXRhX3N0YXJ0IHRvIGRhdGFfZW5kICovCi0JCWZvciAoYWRkciA9IGRhdGFfc3RhcnQ7IGFkZHIgPCBkYXRhX2VuZDsgYWRkciArPSA0LCBpKyspIHsKKwkJZm9yIChhZGRyID0gZGF0YV9zdGFydDsgYWRkciA8IGRhdGFfZW5kOyBhZGRyICs9IDQsIGkgKz0gNCkgewogCQkJaWYgKChhZGRyID09IHBhZ2VfZW5kIC0gNCkgfHwKIAkJCQkoKGJwLT5mbGFzaF9pbmZvLT5idWZmZXJlZCkgJiYKIAkJCQkgKGFkZHIgPT0gZGF0YV9lbmQgLSA0KSkpIHsKQEAgLTMxMDksNiArMzExNiw5IEBACiAJfQogCiBudnJhbV93cml0ZV9lbmQ6CisJaWYgKGJwLT5mbGFzaF9pbmZvLT5idWZmZXJlZCA9PSAwKQorCQlrZnJlZShmbGFzaF9idWZmZXIpOworCiAJaWYgKGFsaWduX3N0YXJ0IHx8IGFsaWduX2VuZCkKIAkJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2hlbHNpby9NYWtlZmlsZQppbmRleCA5MWU5Mjc4Li41NGM3OGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIG9iai0kKENPTkZJR19DSEVMU0lPX1QxKSArPSBjeGdiLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChUT1BESVIpL2RyaXZlcnMvbmV0L2NoZWxzaW8gJChERUJVR19GTEFHUykKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbmV0L2NoZWxzaW8gJChERUJVR19GTEFHUykKIAogCiBjeGdiLW9ianMgOj0gY3hnYjIubyBlc3BpLm8gcG0zMzkzLm8gc2dlLm8gc3Vici5vIG12ODh4MjAxeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCAzMGZmOGVhLi40MzkxYmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTEwOTMsOCArMTA5Myw3IEBACiAJCWlmIChsaWtlbHkoZS0+RGF0YVZhbGlkKSkgewogCQkJc3RydWN0IGZyZWVsUSAqZmwgPSAmc2dlLT5mcmVlbFFbZS0+RnJlZWxpc3RRaWRdOwogCi0JCQlpZiAodW5saWtlbHkoIWUtPlNvcCB8fCAhZS0+RW9wKSkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighZS0+U29wIHx8ICFlLT5Fb3ApOwogCQkJaWYgKHVubGlrZWx5KGUtPk9mZmxvYWQpKQogCQkJCXVuZXhwZWN0ZWRfb2ZmbG9hZChhZGFwdGVyLCBmbCk7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbDJrLmMgYi9kcml2ZXJzL25ldC9kbDJrLmMKaW5kZXggMWYzNjI3NC4uMDM4NDQ3ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUgRFJWX1ZFUlNJT04JInYxLjE3YiIKICNkZWZpbmUgRFJWX1JFTERBVEUJIjIwMDYvMDMvMTAiCiAjaW5jbHVkZSAiZGwyay5oIgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KICAgICAgIEtFUk5fSU5GTyBEUlZfTkFNRSAiICIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICJcbiI7CQpAQCAtNzY1LDcgKzc2Niw3IEBACiAJCQlicmVhazsKIAkJc2tiID0gbnAtPnR4X3NrYnVmZltlbnRyeV07CiAJCXBjaV91bm1hcF9zaW5nbGUgKG5wLT5wZGV2LAotCQkJCSAgbnAtPnR4X3JpbmdbZW50cnldLmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJICBucC0+dHhfcmluZ1tlbnRyeV0uZnJhZ2luZm8gJiBETUFfNDhCSVRfTUFTSywKIAkJCQkgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJaWYgKGlycSkKIAkJCWRldl9rZnJlZV9za2JfaXJxIChza2IpOwpAQCAtODkzLDcgKzg5NCw3IEBACiAJCQkvKiBTbWFsbCBza2J1ZmZzIGZvciBzaG9ydCBwYWNrZXRzICovCiAJCQlpZiAocGt0X2xlbiA+IGNvcHlfdGhyZXNoKSB7CiAJCQkJcGNpX3VubWFwX3NpbmdsZSAobnAtPnBkZXYsCi0JCQkJCQkgIGRlc2MtPmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJCQkgIGRlc2MtPmZyYWdpbmZvICYgRE1BXzQ4QklUX01BU0ssCiAJCQkJCQkgIG5wLT5yeF9idWZfc3osCiAJCQkJCQkgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiX3B1dCAoc2tiID0gbnAtPnJ4X3NrYnVmZltlbnRyeV0sIHBrdF9sZW4pOwpAQCAtOTAxLDcgKzkwMiw3IEBACiAJCQl9IGVsc2UgaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiIChwa3RfbGVuICsgMikpICE9IE5VTEwpIHsKIAkJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobnAtPnBkZXYsCiAJCQkJICAJCQkgICAgZGVzYy0+ZnJhZ2luZm8gJiAKLQkJCQkJCQkgICAgCTB4ZmZmZmZmZmZmZmZmLAorCQkJCQkJCSAgICAJRE1BXzQ4QklUX01BU0ssCiAJCQkJCQkJICAgIG5wLT5yeF9idWZfc3osCiAJCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiLT5kZXYgPSBkZXY7CkBAIC05MTMsNyArOTE0LDcgQEAKIAkJCQlza2JfcHV0IChza2IsIHBrdF9sZW4pOwogCQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShucC0+cGRldiwKIAkJCQkgIAkJCSAgICAgICBkZXNjLT5mcmFnaW5mbyAmCi0JCQkJCQkJICAgICAgIAkgMHhmZmZmZmZmZmZmZmYsCisJCQkJCQkJICAgICAgIAkgRE1BXzQ4QklUX01BU0ssCiAJCQkJCQkJICAgICAgIG5wLT5yeF9idWZfc3osCiAJCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQl9CkBAIC0xODAwLDcgKzE4MDEsNyBAQAogCQlza2IgPSBucC0+cnhfc2tidWZmW2ldOwogCQlpZiAoc2tiKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wZGV2LCAKLQkJCQkJIG5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJCSBucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyAmIERNQV80OEJJVF9NQVNLLAogCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiIChza2IpOwogCQkJbnAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CkBAIC0xODEwLDcgKzE4MTEsNyBAQAogCQlza2IgPSBucC0+dHhfc2tidWZmW2ldOwogCQlpZiAoc2tiKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wZGV2LCAKLQkJCQkJIG5wLT50eF9yaW5nW2ldLmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJCSBucC0+dHhfcmluZ1tpXS5mcmFnaW5mbyAmIERNQV80OEJJVF9NQVNLLAogCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJCW5wLT50eF9za2J1ZmZbaV0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IGVjY2NjYTMuLmQxYzcwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTg3MCwxMyArODcwLDE2IEBACiAJKmRhdGEgPSAwOwogCiAJLyogSG9vayB1cCB0ZXN0IGludGVycnVwdCBoYW5kbGVyIGp1c3QgZm9yIHRoaXMgdGVzdCAqLwotIAlpZiAoIXJlcXVlc3RfaXJxKGlycSwgJmUxMDAwX3Rlc3RfaW50ciwgMCwgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSB7CisJaWYgKCFyZXF1ZXN0X2lycShpcnEsICZlMTAwMF90ZXN0X2ludHIsIFNBX1BST0JFSVJRLCBuZXRkZXYtPm5hbWUsCisJICAgICAgICAgICAgICAgICBuZXRkZXYpKSB7CiAgCQlzaGFyZWRfaW50ID0gRkFMU0U7CiAgCX0gZWxzZSBpZiAocmVxdWVzdF9pcnEoaXJxLCAmZTEwMDBfdGVzdF9pbnRyLCBTQV9TSElSUSwKIAkJCSAgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2KSl7CiAJCSpkYXRhID0gMTsKIAkJcmV0dXJuIC0xOwogCX0KKwlEUFJJTlRLKFBST0JFLElORk8sICJ0ZXN0aW5nICVzIGludGVycnVwdFxuIiwKKwkgICAgICAgIChzaGFyZWRfaW50ID8gInNoYXJlZCIgOiAidW5zaGFyZWQiKSk7CiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgMHhGRkZGRkZGRik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggNDljZDA5Ni4uOTdlNzFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjIwLDYgKzIyMCw3IEBACiBzdGF0aWMgaW50IGUxMDAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBzdGF0aWMgaW50IGUxMDAwX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAjZW5kaWYKK3N0YXRpYyB2b2lkIGUxMDAwX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAvKiBmb3IgbmV0ZHVtcCAvIG5ldCBjb25zb2xlICovCkBAIC0yMzUsOCArMjM2LDkgQEAKIAkvKiBQb3dlciBNYW5hZ21lbnQgSG9va3MgKi8KICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCAgPSBlMTAwMF9zdXNwZW5kLAotCS5yZXN1bWUgICA9IGUxMDAwX3Jlc3VtZQorCS5yZXN1bWUgICA9IGUxMDAwX3Jlc3VtZSwKICNlbmRpZgorCS5zaHV0ZG93biA9IGUxMDAwX3NodXRkb3duCiB9OwogCiBNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiwgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPiIpOwpAQCAtMzMwOCw4ICszMzEwLDcgQEAKIAogCXdoaWxlIChwb2xsX2RldiAhPSAmYWRhcHRlci0+cG9sbGluZ19uZXRkZXZbaV0pIHsKIAkJaSsrOwotCQlpZiAodW5saWtlbHkoaSA9PSBhZGFwdGVyLT5udW1fcnhfcXVldWVzKSkKLQkJCUJVRygpOworCQlCVUdfT04oaSA9PSBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKIAl9CiAKIAlpZiAobGlrZWx5KGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPT0gMSkpIHsKQEAgLTM1MTgsNyArMzUxOSw3IEBACiAJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CiAKIAl3aGlsZSAocnhfZGVzYy0+c3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfREQpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHRfc2tiOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1OCBzdGF0dXM7CiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAkJaWYgKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKQEAgLTM1MzYsOCArMzUzNyw2IEBACiAJCXByZWZldGNoKG5leHRfcnhkKTsKIAogCQluZXh0X2J1ZmZlciA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKLQkJbmV4dF9za2IgPSBuZXh0X2J1ZmZlci0+c2tiOwotCQlwcmVmZXRjaChuZXh0X3NrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CiAKIAkJY2xlYW5lZCA9IFRSVUU7CiAJCWNsZWFuZWRfY291bnQrKzsKQEAgLTM2NjcsNyArMzY2Niw3IEBACiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKIAlzdHJ1Y3QgZTEwMDBfcHNfcGFnZSAqcHNfcGFnZTsKIAlzdHJ1Y3QgZTEwMDBfcHNfcGFnZV9kbWEgKnBzX3BhZ2VfZG1hOwotCXN0cnVjdCBza19idWZmICpza2IsICpuZXh0X3NrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBpLCBqOwogCXVpbnQzMl90IGxlbmd0aCwgc3RhdGVycjsKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CkBAIC0zNjk2LDggKzM2OTUsNiBAQAogCQlwcmVmZXRjaChuZXh0X3J4ZCk7CiAKIAkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07Ci0JCW5leHRfc2tiID0gbmV4dF9idWZmZXItPnNrYjsKLQkJcHJlZmV0Y2gobmV4dF9za2ItPmRhdGEgLSBORVRfSVBfQUxJR04pOwogCiAJCWNsZWFuZWQgPSBUUlVFOwogCQljbGVhbmVkX2NvdW50Kys7CkBAIC0zNzY5LDYgKzM3NjYsNyBAQAogCQkJcHNfcGFnZS0+cHNfcGFnZVtqXSA9IE5VTEw7CiAJCQlza2ItPmxlbiArPSBsZW5ndGg7CiAJCQlza2ItPmRhdGFfbGVuICs9IGxlbmd0aDsKKwkJCXNrYi0+dHJ1ZXNpemUgKz0gbGVuZ3RoOwogCQl9CiAKIGNvcHlkb25lOgpAQCAtNDYxMSw2ICs0NjA5LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKKworc3RhdGljIHZvaWQgZTEwMDBfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJZTEwMDBfc3VzcGVuZChwZGV2LCBQTVNHX1NVU1BFTkQpOworfQorCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qCiAgKiBQb2xsaW5nICdpbnRlcnJ1cHQnIC0gdXNlZCBieSB0aGluZ3MgbGlrZSBuZXRjb25zb2xlIHRvIHNlbmQgc2ticwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXFsLmMgYi9kcml2ZXJzL25ldC9lcWwuYwppbmRleCBhYTE1NjkxLi44MTU0MzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcWwuYworKysgYi9kcml2ZXJzL25ldC9lcWwuYwpAQCAtMjAzLDggKzIwMyw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbWVtYmVyIHRvIHR1cm4gb2ZmIFZhbi1KYWNvYnNvbiBjb21wcmVzc2lvbiBvbiAiCiAJICAgICAgICJ5b3VyIHNsYXZlIGRldmljZXMuXG4iLCBkZXYtPm5hbWUpOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZlcWwtPnF1ZXVlLmFsbF9zbGF2ZXMpKQotCQlCVUcoKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmVxbC0+cXVldWUuYWxsX3NsYXZlcykpOwogCiAJZXFsLT5taW5fc2xhdmVzID0gMTsKIAllcWwtPm1heF9zbGF2ZXMgPSBFUUxfREVGQVVMVF9NQVhfU0xBVkVTOyAvKiA0IHVzdWFsbHkuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggNzYyN2E3NS4uZmViNWIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTEwNSw2ICsxMDUsOCBAQAogICoJMC41MDogMjAgSmFuIDIwMDY6IEFkZCA4MDIxcHEgdGFnZ2luZyBzdXBwb3J0LgogICoJMC41MTogMjAgSmFuIDIwMDY6IEFkZCA2NGJpdCBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZvciByaW5ncy4KICAqCTAuNTI6IDIwIEphbiAyMDA2OiBBZGQgTVNJL01TSVggc3VwcG9ydC4KKyAqCTAuNTM6IDE5IE1hciAyMDA2OiBGaXggaW5pdCBmcm9tIGxvdyBwb3dlciBtb2RlIGFuZCBhZGQgaHcgcmVzZXQuCisgKgkwLjU0OiAyMSBNYXIgMjAwNjogRml4IHNwaW4gbG9ja3MgZm9yIG11bHRpIGlycXMgYW5kIGNsZWFudXAuCiAgKgogICogS25vd24gYnVnczoKICAqIFdlIHN1c3BlY3QgdGhhdCBvbiBzb21lIGhhcmR3YXJlIG5vIFRYIGRvbmUgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkLgpAQCAtMTE2LDcgKzExOCw3IEBACiAgKiBERVZfTkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdlbmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUgbmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC41MiIKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjU0IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2MCw2ICsxNjIsNyBAQAogI2RlZmluZSBERVZfSEFTX1ZMQU4gICAgICAgICAgICAweDAwMjAgIC8qIGRldmljZSBzdXBwb3J0cyB2bGFuIHRhZ2dpbmcgYW5kIHN0cmlwaW5nICovCiAjZGVmaW5lIERFVl9IQVNfTVNJICAgICAgICAgICAgIDB4MDA0MCAgLyogZGV2aWNlIHN1cHBvcnRzIE1TSSAqLwogI2RlZmluZSBERVZfSEFTX01TSV9YICAgICAgICAgICAweDAwODAgIC8qIGRldmljZSBzdXBwb3J0cyBNU0ktWCAqLworI2RlZmluZSBERVZfSEFTX1BPV0VSX0NOVFJMICAgICAweDAxMDAgIC8qIGRldmljZSBzdXBwb3J0cyBwb3dlciBzYXZpbmdzICovCiAKIGVudW0gewogCU52UmVnSXJxU3RhdHVzID0gMHgwMDAsCkBAIC0yMDMsNiArMjA2LDggQEAKICNkZWZpbmUgTlZSRUdfTUlTQzFfSEQJCTB4MDIKICNkZWZpbmUgTlZSRUdfTUlTQzFfRk9SQ0UJMHgzYjBmM2MKIAorCU52UmVnTWFjUmVzZXQgPSAweDNjLAorI2RlZmluZSBOVlJFR19NQUNfUkVTRVRfQVNTRVJUCTB4MEYzCiAJTnZSZWdUcmFuc21pdHRlckNvbnRyb2wgPSAweDA4NCwKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9TVEFSVAkweDAxCiAJTnZSZWdUcmFuc21pdHRlclN0YXR1cyA9IDB4MDg4LApAQCAtMzI2LDYgKzMzMSwxMCBAQAogCU52UmVnTVNJWE1hcDAgPSAweDNlMCwKIAlOdlJlZ01TSVhNYXAxID0gMHgzZTQsCiAJTnZSZWdNU0lYSXJxU3RhdHVzID0gMHgzZjAsCisKKwlOdlJlZ1Bvd2VyU3RhdGUyID0gMHg2MDAsCisjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEUyX1BPV0VSVVBfTUFTSwkJMHgwRjExCisjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEUyX1BPV0VSVVBfUkVWX0EzCTB4MDAwMQogfTsKIAogLyogQmlnIGVuZGlhbjogc2hvdWxkIHdvcmssIGJ1dCBpcyB1bnRlc3RlZCAqLwpAQCAtNDE0LDcgKzQyMyw4IEBACiAjZGVmaW5lIE5WX1JYM19WTEFOX1RBR19NQVNLCSgweDAwMDBGRkZGKQogCiAvKiBNaXNjZWxhbmVvdXMgaGFyZHdhcmUgcmVsYXRlZCBkZWZpbmVzOiAqLwotI2RlZmluZSBOVl9QQ0lfUkVHU1oJCTB4MjcwCisjZGVmaW5lIE5WX1BDSV9SRUdTWl9WRVIxICAgICAgCTB4MjcwCisjZGVmaW5lIE5WX1BDSV9SRUdTWl9WRVIyICAgICAgCTB4NjA0CiAKIC8qIHZhcmlvdXMgdGltZW91dCBkZWxheXM6IGFsbCBpbiB1c2VjICovCiAjZGVmaW5lIE5WX1RYUlhfUkVTRVRfREVMQVkJNApAQCAtNDMxLDYgKzQ0MSw3IEBACiAjZGVmaW5lIE5WX01JSUJVU1lfREVMQVkJNTAKICNkZWZpbmUgTlZfTUlJUEhZX0RFTEFZCTEwCiAjZGVmaW5lIE5WX01JSVBIWV9ERUxBWU1BWAkxMDAwMAorI2RlZmluZSBOVl9NQUNfUkVTRVRfREVMQVkJNjQKIAogI2RlZmluZSBOVl9XQUtFVVBQQVRURVJOUwk1CiAjZGVmaW5lIE5WX1dBS0VVUE1BU0tFTlRSSUVTCTQKQEAgLTU1Miw2ICs1NjMsOCBAQAogCXUzMiBkZXNjX3ZlcjsKIAl1MzIgdHhyeGN0bF9iaXRzOwogCXUzMiB2bGFuY3RsX2JpdHM7CisJdTMyIGRyaXZlcl9kYXRhOworCXUzMiByZWdpc3Rlcl9zaXplOwogCiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCkBAIC02OTgsNiArNzExLDcyIEBACiAJfQogfQogCitzdGF0aWMgaW50IHVzaW5nX211bHRpX2lycXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKKwkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYKKwkgICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykgPT0gMHgxKSkpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG52X2VuYWJsZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IpOworCQllbHNlCisJCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwl9IGVsc2UgeworCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CisJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yKTsKKwkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IpOworCX0KK30KKworc3RhdGljIHZvaWQgbnZfZGlzYWJsZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCX0gZWxzZSB7CisJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CisJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CisJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CisJfQorfQorCisvKiBJbiBNU0lYIG1vZGUsIGEgd3JpdGUgdG8gaXJxbWFzayBiZWhhdmVzIGFzIFhPUiAqLworc3RhdGljIHZvaWQgbnZfZW5hYmxlX2h3X2ludGVycnVwdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIG1hc2spCit7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKworCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKK30KKworc3RhdGljIHZvaWQgbnZfZGlzYWJsZV9od19pbnRlcnJ1cHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBtYXNrKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCisJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB7CisJCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9IGVsc2UgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9FTkFCTEVEKQorCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSUlycU1hc2spOworCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJfQorfQorCiAjZGVmaW5lIE1JSV9SRUFECSgtMSkKIC8qIG1paV9ydzogcmVhZC93cml0ZSBhIHJlZ2lzdGVyIG9uIHRoZSBQSFkuCiAgKgpAQCAtOTE5LDYgKzk5OCwyNCBAQAogCXBjaV9wdXNoKGJhc2UpOwogfQogCitzdGF0aWMgdm9pZCBudl9tYWNfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisKKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9tYWNfcmVzZXRcbiIsIGRldi0+bmFtZSk7CisJd3JpdGVsKE5WUkVHX1RYUlhDVExfQklUMiB8IE5WUkVHX1RYUlhDVExfUkVTRVQgfCBucC0+dHhyeGN0bF9iaXRzLCBiYXNlICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJcGNpX3B1c2goYmFzZSk7CisJd3JpdGVsKE5WUkVHX01BQ19SRVNFVF9BU1NFUlQsIGJhc2UgKyBOdlJlZ01hY1Jlc2V0KTsKKwlwY2lfcHVzaChiYXNlKTsKKwl1ZGVsYXkoTlZfTUFDX1JFU0VUX0RFTEFZKTsKKwl3cml0ZWwoMCwgYmFzZSArIE52UmVnTWFjUmVzZXQpOworCXBjaV9wdXNoKGJhc2UpOworCXVkZWxheShOVl9NQUNfUkVTRVRfREVMQVkpOworCXdyaXRlbChOVlJFR19UWFJYQ1RMX0JJVDIgfCBucC0+dHhyeGN0bF9iaXRzLCBiYXNlICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJcGNpX3B1c2goYmFzZSk7Cit9CisKIC8qCiAgKiBudl9nZXRfc3RhdHM6IGRldi0+Z2V0X3N0YXRzIGZ1bmN0aW9uCiAgKiBHZXQgbGF0ZXN0IHN0YXRzIHZhbHVlIGZyb20gdGhlIG5pYy4KQEAgLTk4OSwyNCArMTA4NiwyNSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0KLQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKLQkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCi0JICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09IDB4MSkpKSB7Ci0JCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CiAJfQogCWlmIChudl9hbGxvY19yeChkZXYpKSB7Ci0JCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCWlmICghbnAtPmluX3NodXRkb3duKQogCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKLQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJfQotCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB8fAotCSAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSAmJiAKLQkgICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykgPT0gMHgxKSkpIHsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJaWYgKCF1c2luZ19tdWx0aV9pcnFzKGRldikpIHsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQorCQkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKKwkJZWxzZQorCQkJZW5hYmxlX2lycShkZXYtPmlycSk7CiAJfSBlbHNlIHsKIAkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IpOwogCX0KQEAgLTEzMzEsNyArMTQyOSw3IEBACiAJCQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylucC0+cmluZ19hZGRyLAogCQkJCW5wLT5uZXh0X3R4LCBucC0+bmljX3R4KTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER1bXBpbmcgdHggcmVnaXN0ZXJzXG4iLCBkZXYtPm5hbWUpOwotCQlmb3IgKGk9MDtpPDB4NDAwO2krPSAzMikgeworCQlmb3IgKGk9MDtpPD1ucC0+cmVnaXN0ZXJfc2l6ZTtpKz0gMzIpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiUzeDogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAogCQkJCQlpLAogCQkJCQlyZWFkbChiYXNlICsgaSArIDApLCByZWFkbChiYXNlICsgaSArIDQpLApAQCAtMTYzOCwxNSArMTczNiw3IEBACiAJCSAqIGd1ZXNzZWQsIHRoZXJlIGlzIHByb2JhYmx5IGEgc2ltcGxlciBhcHByb2FjaC4KIAkJICogQ2hhbmdpbmcgdGhlIE1UVSBpcyBhIHJhcmUgZXZlbnQsIGl0IHNob3VsZG4ndCBtYXR0ZXIuCiAJCSAqLwotCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKLQkJICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpICYmIAotCQkgICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykgPT0gMHgxKSkpIHsKLQkJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKLQkJfSBlbHNlIHsKLQkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7Ci0JCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IpOwotCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yKTsKLQkJfQorCQludl9kaXNhYmxlX2lycShkZXYpOwogCQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCS8qIHN0b3AgZW5naW5lcyAqLwpAQCAtMTY3OSwxNSArMTc2OSw3IEBACiAJCW52X3N0YXJ0X3R4KGRldik7CiAJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7Ci0JCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB8fAotCQkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCi0JCSAgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSA9PSAweDEpKSkgewotCQkJZW5hYmxlX2lycShkZXYtPmlycSk7Ci0JCX0gZWxzZSB7Ci0JCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7Ci0JCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7Ci0JCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7Ci0JCX0KKwkJbnZfZW5hYmxlX2lycShkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIwNzgsMTYgKzIxNjAsMTYgQEAKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQogCQkJYnJlYWs7CiAKLQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJbnZfdHhfZG9uZShkZXYpOwotCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCiAJCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1RYX0VSUikpIHsKIAkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIGV2ZW50cyAweCV4LiBQcm9iYWJseSBUWCBmYWlsLlxuIiwKIAkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKIAkJfQogCQlpZiAoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwogCQkJd3JpdGVsKE5WUkVHX0lSUV9UWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCQkJcGNpX3B1c2goYmFzZSk7CkBAIC0yMDk3LDcgKzIxNzksNyBAQAogCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKIAkJCX0KIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfdHguXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjEyNywxNCArMjIwOSwxNCBAQAogCQkKIAkJbnZfcnhfcHJvY2VzcyhkZXYpOwogCQlpZiAobnZfYWxsb2NfcngoZGV2KSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKIAkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQl9CiAJCQogCQlpZiAoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwogCQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCQkJcGNpX3B1c2goYmFzZSk7CkBAIC0yMTQ0LDcgKzIyMjYsNyBAQAogCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKIAkJCX0KIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfcnguXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjE3MywxNCArMjI1NSwxNCBAQAogCQkJYnJlYWs7CiAJCQogCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnZfbGlua19pcnEoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJfQogCQlpZiAobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnZfbGlua2NoYW5nZShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7CiAJCX0KIAkJaWYgKGV2ZW50cyAmIChOVlJFR19JUlFfVU5LTk9XTikpIHsKQEAgLTIxODgsNyArMjI3MCw3IEBACiAJCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7CiAJCX0KIAkJaWYgKGkgPiBtYXhfaW50ZXJydXB0X3dvcmspIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KIAkJCXdyaXRlbChOVlJFR19JUlFfT1RIRVIsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCQkJcGNpX3B1c2goYmFzZSk7CkBAIC0yMTk4LDcgKzIyODAsNyBAQAogCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKIAkJCX0KIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfb3RoZXIuXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjIyMSwxMCArMjMwMywxMSBAQAogCSAqIG52X25pY19pcnEgYmVjYXVzZSB0aGF0IG1heSBkZWNpZGUgdG8gZG8gb3RoZXJ3aXNlCiAJICovCiAKLQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKLQkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCi0JICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09IDB4MSkpKSB7Ci0JCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCQltYXNrID0gbnAtPmlycW1hc2s7CiAJfSBlbHNlIHsKIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfUlhfQUxMKSB7CkBAIC0yMjQ3LDExICsyMzMwLDEyIEBACiAJd3JpdGVsKG1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCXBjaV9wdXNoKGJhc2UpOwogCi0JaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpIHx8IAotCSAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSAmJiAKLQkgICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykgPT0gMHgxKSkpIHsKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgewogCQludl9uaWNfaXJxKChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBOVUxMKTsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKKwkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7CisJCWVsc2UKKwkJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX1JYX0FMTCkgewogCQkJbnZfbmljX2lycV9yeCgoaW50KSAwLCAodm9pZCAqKSBkYXRhLCAoc3RydWN0IHB0X3JlZ3MgKikgTlVMTCk7CkBAIC0yNDg4LDExICsyNTcyLDExIEBACiB9CiAKICNkZWZpbmUgRk9SQ0VERVRIX1JFR1NfVkVSCTEKLSNkZWZpbmUgRk9SQ0VERVRIX1JFR1NfU0laRQkweDQwMCAvKiAyNTYgMzItYml0IHJlZ2lzdGVycyAqLwogCiBzdGF0aWMgaW50IG52X2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBGT1JDRURFVEhfUkVHU19TSVpFOworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIG5wLT5yZWdpc3Rlcl9zaXplOwogfQogCiBzdGF0aWMgdm9pZCBudl9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpidWYpCkBAIC0yNTA0LDcgKzI1ODgsNyBAQAogCiAJcmVncy0+dmVyc2lvbiA9IEZPUkNFREVUSF9SRUdTX1ZFUjsKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7Ci0JZm9yIChpPTA7aTxGT1JDRURFVEhfUkVHU19TSVpFL3NpemVvZih1MzIpO2krKykKKwlmb3IgKGkgPSAwO2kgPD0gbnAtPnJlZ2lzdGVyX3NpemUvc2l6ZW9mKHUzMik7IGkrKykKIAkJcmJ1ZltpXSA9IHJlYWRsKGJhc2UgKyBpKnNpemVvZih1MzIpKTsKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIH0KQEAgLTI1MzEsNiArMjYxNSwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBORVRJRl9GX1RTTworc3RhdGljIGludCBudl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKSkKKwkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3RzbyhkZXYsIHZhbHVlKTsKKwllbHNlCisJCXJldHVybiB2YWx1ZSA/IC1FT1BOT1RTVVBQIDogMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBudl9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLApAQCAtMjU0Miw2ICsyNjM4LDEwIEBACiAJLmdldF9yZWdzID0gbnZfZ2V0X3JlZ3MsCiAJLm53YXlfcmVzZXQgPSBudl9ud2F5X3Jlc2V0LAogCS5nZXRfcGVybV9hZGRyID0gZXRodG9vbF9vcF9nZXRfcGVybV9hZGRyLAorI2lmZGVmIE5FVElGX0ZfVFNPCisJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gPSBudl9zZXRfdHNvCisjZW5kaWYKIH07CiAKIHN0YXRpYyB2b2lkIG52X3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKQEAgLTI1OTgsNiArMjY5OCwxMTMgQEAKIAl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnTVNJWE1hcDEpIHwgbXNpeG1hcCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOwogfQogCitzdGF0aWMgaW50IG52X3JlcXVlc3RfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJaW50IHJldCA9IDE7CisJaW50IGk7CisKKwlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIHsKKwkJZm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKSB7CisJCQlucC0+bXNpX3hfZW50cnlbaV0uZW50cnkgPSBpOworCQl9CisJCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5wLT5wY2lfZGV2LCBucC0+bXNpX3hfZW50cnksIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSkpID09IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKKwkJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUKSB7CisJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHJ4IGhhbmRsaW5nICovCisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7CisJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOworCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCQkJCQlnb3RvIG91dF9lcnI7CisJCQkJfQorCQkJCS8qIFJlcXVlc3QgaXJxIGZvciB0eCBoYW5kbGluZyAqLworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsICZudl9uaWNfaXJxX3R4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHR4ICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZnJlZV9yeDsKKwkJCQl9CisJCQkJLyogUmVxdWVzdCBpcnEgZm9yIGxpbmsgYW5kIHRpbWVyIGhhbmRsaW5nICovCisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3RoZXIsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgbGluayAlZFxuIiwgcmV0KTsKKwkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJCQkJCWdvdG8gb3V0X2ZyZWVfdHg7CisJCQkJfQorCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdmVjdG9yICovCisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKKwkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfUlgsIE5WUkVHX0lSUV9SWF9BTEwpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfVFgsIE5WUkVHX0lSUV9UWF9BTEwpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfT1RIRVIsIE5WUkVHX0lSUV9PVEhFUik7CisJCQl9IGVsc2UgeworCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBhbGwgaW50ZXJydXB0cyAqLworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZXJyOworCQkJCX0KKworCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHZlY3RvciAwICovCisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKKwkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworCQkJfQorCQl9CisJfQorCWlmIChyZXQgIT0gMCAmJiBucC0+bXNpX2ZsYWdzICYgTlZfTVNJX0NBUEFCTEUpIHsKKwkJaWYgKChyZXQgPSBwY2lfZW5hYmxlX21zaShucC0+cGNpX2RldikpID09IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0VOQUJMRUQ7CisJCQlpZiAocmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOworCQkJCXBjaV9kaXNhYmxlX21zaShucC0+cGNpX2Rldik7CisJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX0VOQUJMRUQ7CisJCQkJZ290byBvdXRfZXJyOworCQkJfQorCisJCQkvKiBtYXAgaW50ZXJydXB0cyB0byB2ZWN0b3IgMCAqLworCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSU1hcDApOworCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSU1hcDEpOworCQkJLyogZW5hYmxlIG1zaSB2ZWN0b3IgMCAqLworCQkJd3JpdGVsKE5WUkVHX01TSV9WRUNUT1JfMF9FTkFCTEVELCBiYXNlICsgTnZSZWdNU0lJcnFNYXNrKTsKKwkJfQorCX0KKwlpZiAocmV0ICE9IDApIHsKKwkJaWYgKHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApCisJCQlnb3RvIG91dF9lcnI7CisJfQorCisJcmV0dXJuIDA7CitvdXRfZnJlZV90eDoKKwlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsIGRldik7CitvdXRfZnJlZV9yeDoKKwlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsIGRldik7CitvdXRfZXJyOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBudl9mcmVlX2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwlpbnQgaTsKKworCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgeworCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKKwkJCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsIGRldik7CisJCX0KKwkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJZnJlZV9pcnEobnAtPnBjaV9kZXYtPmlycSwgZGV2KTsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfRU5BQkxFRCkgeworCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKKwkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IG52X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjYwOCw2ICsyODE1LDggQEAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIm52X29wZW46IGJlZ2luXG4iKTsKIAogCS8qIDEpIGVyYXNlIHByZXZpb3VzIG1pc2NvbmZpZ3VyYXRpb24gKi8KKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QT1dFUl9DTlRSTCkKKwkJbnZfbWFjX3Jlc2V0KGRldik7CiAJLyogNC4xLTE6IHN0b3AgYWRhcHRlcjogaWdub3JlZCwgNC4zIHNlZW1zIHRvIGJlIG92ZXJraWxsICovCiAJd3JpdGVsKE5WUkVHX01DQVNUQUREUkFfRk9SQ0UsIGJhc2UgKyBOdlJlZ011bHRpY2FzdEFkZHJBKTsKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnTXVsdGljYXN0QWRkckIpOwpAQCAtMjY4OCw4NiArMjg5NywxOCBAQAogCXVkZWxheSgxMCk7CiAJd3JpdGVsKHJlYWRsKGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUpIHwgTlZSRUdfUE9XRVJTVEFURV9WQUxJRCwgYmFzZSArIE52UmVnUG93ZXJTdGF0ZSk7CiAKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJbnZfZGlzYWJsZV9od19pbnRlcnJ1cHRzKGRldiwgbnAtPmlycW1hc2spOwogCXBjaV9wdXNoKGJhc2UpOwogCXdyaXRlbChOVlJFR19NSUlTVEFUX01BU0syLCBiYXNlICsgTnZSZWdNSUlTdGF0dXMpOwogCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CiAJcGNpX3B1c2goYmFzZSk7CiAKLQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIHsKLQkJZm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKSB7Ci0JCQlucC0+bXNpX3hfZW50cnlbaV0uZW50cnkgPSBpOwotCQl9Ci0JCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5wLT5wY2lfZGV2LCBucC0+bXNpX3hfZW50cnksIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSkpID09IDApIHsKLQkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKLQkJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUKSB7Ci0JCQkJLyogUmVxdWVzdCBpcnEgZm9yIHJ4IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7Ci0JCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwotCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwotCQkJCQlnb3RvIG91dF9kcmFpbjsKLQkJCQl9Ci0JCQkJLyogUmVxdWVzdCBpcnEgZm9yIHR4IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3RvciwgJm52X25pY19pcnFfdHgsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgdHggJWRcbiIsIHJldCk7Ci0JCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwotCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwotCQkJCQlnb3RvIG91dF9kcmFpbjsKLQkJCQl9Ci0JCQkJLyogUmVxdWVzdCBpcnEgZm9yIGxpbmsgYW5kIHRpbWVyIGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3RoZXIsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgbGluayAlZFxuIiwgcmV0KTsKLQkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7Ci0JCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7Ci0JCQkJCWdvdG8gb3V0X2RyYWluOwotCQkJCX0KLQotCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdmVjdG9yICovCi0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOwotCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfUlgsIE5WUkVHX0lSUV9SWF9BTEwpOwotCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfVFgsIE5WUkVHX0lSUV9UWF9BTEwpOwotCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfT1RIRVIsIE5WUkVHX0lSUV9PVEhFUik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBhbGwgaW50ZXJydXB0cyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOwotCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKLQkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKLQkJCQkJZ290byBvdXRfZHJhaW47Ci0JCQkJfQotCi0JCQkJLyogbWFwIGludGVycnVwdHMgdG8gdmVjdG9yIDAgKi8KLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDApOwotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKHJldCAhPSAwICYmIG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfQ0FQQUJMRSkgewotCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpKG5wLT5wY2lfZGV2KSkgPT0gMCkgewotCQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfRU5BQkxFRDsKLQkJCWlmIChyZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKLQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKLQkJCQlnb3RvIG91dF9kcmFpbjsKLQkJCX0KLQotCQkJLyogbWFwIGludGVycnVwdHMgdG8gdmVjdG9yIDAgKi8KLQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAwKTsKLQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAxKTsKLQkJCS8qIGVuYWJsZSBtc2kgdmVjdG9yIDAgKi8KLQkJCXdyaXRlbChOVlJFR19NU0lfVkVDVE9SXzBfRU5BQkxFRCwgYmFzZSArIE52UmVnTVNJSXJxTWFzayk7Ci0JCX0KLQl9Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKQotCQkJZ290byBvdXRfZHJhaW47CisJaWYgKG52X3JlcXVlc3RfaXJxKGRldikpIHsKKwkJZ290byBvdXRfZHJhaW47CiAJfQogCiAJLyogYXNrIGZvciBpbnRlcnJ1cHRzICovCi0Jd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwludl9lbmFibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKIAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAl3cml0ZWwoTlZSRUdfTUNBU1RBRERSQV9GT1JDRSwgYmFzZSArIE52UmVnTXVsdGljYXN0QWRkckEpOwpAQCAtMjgxMSw3ICsyOTUyLDYgQEAKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2U7Ci0JaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJbnAtPmluX3NodXRkb3duID0gMTsKQEAgLTI4MjksMzEgKzI5NjksMTMgQEAKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljIG9yIHdlIHdpbGwgbG9jayB1cCAqLwogCWJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB7Ci0JCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JfSBlbHNlIHsKLQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfRU5BQkxFRCkKLQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lJcnFNYXNrKTsKLQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCX0KKwludl9kaXNhYmxlX2h3X2ludGVycnVwdHMoZGV2LCBucC0+aXJxbWFzayk7CiAJcGNpX3B1c2goYmFzZSk7CiAJZHByaW50ayhLRVJOX0lORk8gIiVzOiBJcnFtYXNrIGlzIHplcm8gYWdhaW5cbiIsIGRldi0+bmFtZSk7CiAKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAotCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgewotCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKLQkJCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsIGRldik7Ci0JCX0KLQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7Ci0JCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7Ci0JfSBlbHNlIHsKLQkJZnJlZV9pcnEobnAtPnBjaV9kZXYtPmlycSwgZGV2KTsKLQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfRU5BQkxFRCkgewotCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKLQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOwotCQl9Ci0JfQorCW52X2ZyZWVfaXJxKGRldik7CiAKIAlkcmFpbl9yaW5nKGRldik7CiAKQEAgLTI4NzgsNiArMzAwMCw3IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXU4IF9faW9tZW0gKmJhc2U7CiAJaW50IGVyciwgaTsKKwl1MzIgcG93ZXJzdGF0ZTsKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZmVfcHJpdikpOwogCWVyciA9IC1FTk9NRU07CkBAIC0yOTEwLDYgKzMwMzMsMTEgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZGlzYWJsZTsKIAorCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiAoREVWX0hBU19WTEFOfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTCkpCisJCW5wLT5yZWdpc3Rlcl9zaXplID0gTlZfUENJX1JFR1NaX1ZFUjI7CisJZWxzZQorCQlucC0+cmVnaXN0ZXJfc2l6ZSA9IE5WX1BDSV9SRUdTWl9WRVIxOworCiAJZXJyID0gLUVJTlZBTDsKIAlhZGRyID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKQEAgLTI5MTgsNyArMzA0Niw3IEBACiAJCQkJcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCBpKSwKIAkJCQlwY2lfcmVzb3VyY2VfZmxhZ3MocGNpX2RldiwgaSkpOwogCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBjaV9kZXYsIGkpICYgSU9SRVNPVVJDRV9NRU0gJiYKLQkJCQlwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIGkpID49IE5WX1BDSV9SRUdTWikgeworCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgaSkgPj0gbnAtPnJlZ2lzdGVyX3NpemUpIHsKIAkJCWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgaSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMjkyOSwyNCArMzA1NywyNSBAQAogCQlnb3RvIG91dF9yZWxyZWc7CiAJfQogCisJLyogY29weSBvZiBkcml2ZXIgZGF0YSAqLworCW5wLT5kcml2ZXJfZGF0YSA9IGlkLT5kcml2ZXJfZGF0YTsKKwogCS8qIGhhbmRsZSBkaWZmZXJlbnQgZGVzY3JpcHRvciB2ZXJzaW9ucyAqLwogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0hJR0hfRE1BKSB7CiAJCS8qIHBhY2tldCBmb3JtYXQgMzogc3VwcG9ydHMgNDAtYml0IGFkZHJlc3NpbmcgKi8KIAkJbnAtPmRlc2NfdmVyID0gREVTQ19WRVJfMzsKKwkJbnAtPnR4cnhjdGxfYml0cyA9IE5WUkVHX1RYUlhDVExfREVTQ18zOwogCQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCBETUFfMzlCSVRfTUFTSykpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogNjQtYml0IERNQSBmYWlsZWQsIHVzaW5nIDMyLWJpdCBhZGRyZXNzaW5nIGZvciBkZXZpY2UgJXMuXG4iLAogCQkJCQlwY2lfbmFtZShwY2lfZGV2KSk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaV9kZXYsIDB4MDAwMDAwN2ZmZmZmZmZmZlVMTCkpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IDY0LWJpdCBETUEgKGNvbnNpc3RlbnQpIGZhaWxlZCBmb3IgZGV2aWNlICVzLlxuIiwKLQkJCQkJcGNpX25hbWUocGNpX2RldikpOwotCQkJCWdvdG8gb3V0X3JlbHJlZzsKLQkJCX0gZWxzZSB7Ci0JCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiB1c2luZyBISUdIRE1BXG4iKTsKLQkJCX0KKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiB1c2luZyBISUdIRE1BXG4iKTsKIAkJfQotCQlucC0+dHhyeGN0bF9iaXRzID0gTlZSRUdfVFhSWENUTF9ERVNDXzM7CisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpX2RldiwgMHgwMDAwMDA3ZmZmZmZmZmZmVUxMKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiA2NC1iaXQgRE1BIChjb25zaXN0ZW50KSBmYWlsZWQgZm9yIGRldmljZSAlcy5cbiIsCisJCQkgICAgICAgcGNpX25hbWUocGNpX2RldikpOworCQl9CiAJfSBlbHNlIGlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0xBUkdFREVTQykgewogCQkvKiBwYWNrZXQgZm9ybWF0IDI6IHN1cHBvcnRzIGp1bWJvIGZyYW1lcyAqLwogCQlucC0+ZGVzY192ZXIgPSBERVNDX1ZFUl8yOwpAQCAtMjk4Niw3ICszMTE1LDcgQEAKIAl9CiAKIAllcnIgPSAtRU5PTUVNOwotCW5wLT5iYXNlID0gaW9yZW1hcChhZGRyLCBOVl9QQ0lfUkVHU1opOworCW5wLT5iYXNlID0gaW9yZW1hcChhZGRyLCBucC0+cmVnaXN0ZXJfc2l6ZSk7CiAJaWYgKCFucC0+YmFzZSkKIAkJZ290byBvdXRfcmVscmVnOwogCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpbnAtPmJhc2U7CkBAIC0zMDYyLDYgKzMxOTEsMjAgQEAKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnV2FrZVVwRmxhZ3MpOwogCW5wLT53b2xlbmFibGVkID0gMDsKIAorCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BPV0VSX0NOVFJMKSB7CisJCXU4IHJldmlzaW9uX2lkOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXZpc2lvbl9pZCk7CisKKwkJLyogdGFrZSBwaHkgYW5kIG5pYyBvdXQgb2YgbG93IHBvd2VyIG1vZGUgKi8KKwkJcG93ZXJzdGF0ZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUyKTsKKwkJcG93ZXJzdGF0ZSAmPSB+TlZSRUdfUE9XRVJTVEFURTJfUE9XRVJVUF9NQVNLOworCQlpZiAoKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEyIHx8CisJCSAgICAgaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMpICYmCisJCSAgICByZXZpc2lvbl9pZCA+PSAweEEzKQorCQkJcG93ZXJzdGF0ZSB8PSBOVlJFR19QT1dFUlNUQVRFMl9QT1dFUlVQX1JFVl9BMzsKKwkJd3JpdGVsKHBvd2Vyc3RhdGUsIGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUyKTsKKwl9CisKIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEpIHsKIAkJbnAtPnR4X2ZsYWdzID0gTlZfVFhfVkFMSUQ7CiAJfSBlbHNlIHsKQEAgLTMyMjMsMTkgKzMzNjYsMTkgQEAKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTIpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTCwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTCwKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkwsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMLAogCX0sCiAJezAsfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggNzcxZTI1ZC4uMjE4ZDMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMjEwLDcgKzIxMCw4IEBACiAJCWdvdG8gcmVnc19mYWlsOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cnhsb2NrKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKQEAgLTUxNSwxMSArNTE2LDEzIEBACiAJcGh5X3N0b3AocHJpdi0+cGh5ZGV2KTsKIAogCS8qIExvY2sgaXQgZG93biAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmcHJpdi0+cnhsb2NrKTsKIAogCWdmYXJfaGFsdChkZXYpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZwcml2LT5yeGxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJLyogRnJlZSB0aGUgSVJRcyAqLwogCWlmIChwcml2LT5laW5mby0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSKSB7CkBAIC02MDUsMTQgKzYwOCwxNSBAQAogCXRlbXB2YWwgfD0gRE1BQ1RSTF9JTklUX1NFVFRJTkdTOwogCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmRtYWN0cmwsIHRlbXB2YWwpOwogCi0JLyogQ2xlYXIgVEhMVCwgc28gdGhhdCB0aGUgRE1BIHN0YXJ0cyBwb2xsaW5nIG5vdyAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPnRzdGF0LCBUU1RBVF9DTEVBUl9USEFMVCk7Ci0KIAkvKiBNYWtlIHN1cmUgd2UgYXJlbid0IHN0b3BwZWQgKi8KIAl0ZW1wdmFsID0gZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5kbWFjdHJsKTsKIAl0ZW1wdmFsICY9IH4oRE1BQ1RSTF9HUlMgfCBETUFDVFJMX0dUUyk7CiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+ZG1hY3RybCwgdGVtcHZhbCk7CiAKKwkvKiBDbGVhciBUSExUL1JITFQsIHNvIHRoYXQgdGhlIERNQSBzdGFydHMgcG9sbGluZyBub3cgKi8KKwlnZmFyX3dyaXRlKCZyZWdzLT50c3RhdCwgVFNUQVRfQ0xFQVJfVEhBTFQpOworCWdmYXJfd3JpdGUoJnJlZ3MtPnJzdGF0LCBSU1RBVF9DTEVBUl9SSEFMVCk7CisKIAkvKiBVbm1hc2sgdGhlIGludGVycnVwdHMgd2UgbG9vayBmb3IgKi8KIAlnZmFyX3dyaXRlKCZyZWdzLT5pbWFzaywgSU1BU0tfREVGQVVMVCk7CiB9CkBAIC05MjgsMTIgKzkzMiwxMyBAQAogCXN0cnVjdCB0eGZjYiAqZmNiID0gTlVMTDsKIAlzdHJ1Y3QgdHhiZDggKnR4YmRwOwogCXUxNiBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFVwZGF0ZSB0cmFuc21pdCBzdGF0cyAqLwogCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJLyogTG9jayBwcml2IG5vdyAqLwotCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCS8qIFBvaW50IGF0IHRoZSBmaXJzdCBmcmVlIHR4IGRlc2NyaXB0b3IgKi8KIAl0eGJkcCA9IHByaXYtPmN1cl90eDsKQEAgLTEwMDQsNyArMTAwOSw3IEBACiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+dHN0YXQsIFRTVEFUX0NMRUFSX1RIQUxUKTsKIAogCS8qIFVubG9jayBwcml2ICovCi0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA0OSw3ICsxMDU0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wdmFsOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7CiAKIAlwcml2LT52bGdycCA9IGdycDsKIApAQCAtMTA3Niw3ICsxMDgxLDcgQEAKIAkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+cmN0cmwsIHRlbXB2YWwpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC0xMDg1LDEyICsxMDkwLDEyIEBACiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCiAJaWYgKHByaXYtPnZsZ3JwKQogCQlwcml2LT52bGdycC0+dmxhbl9kZXZpY2VzW3ZpZF0gPSBOVUxMOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogfQogCiAKQEAgLTExNzksNyArMTE4NCw3IEBACiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBJRVZFTlRfVFhfTUFTSyk7CiAKIAkvKiBMb2NrIHByaXYgKi8KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCXNwaW5fbG9jaygmcHJpdi0+dHhsb2NrKTsKIAliZHAgPSBwcml2LT5kaXJ0eV90eDsKIAl3aGlsZSAoKGJkcC0+c3RhdHVzICYgVFhCRF9SRUFEWSkgPT0gMCkgewogCQkvKiBJZiBkaXJ0eV90eCBhbmQgY3VyX3R4IGFyZSB0aGUgc2FtZSwgdGhlbiBlaXRoZXIgdGhlICovCkBAIC0xMjI0LDcgKzEyMjksNyBAQAogCWVsc2UKIAkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+dHhpYywgMCk7CiAKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJc3Bpbl91bmxvY2soJnByaXYtPnR4bG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMzA1LDkgKzEzMTAsMTAgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQogI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIAl1MzIgdGVtcHZhbDsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyBmbGFnczsKICNlbmRpZgogCiAJLyogQ2xlYXIgSUVWRU5ULCBzbyByeCBpbnRlcnJ1cHQgaXNuJ3QgY2FsbGVkIGFnYWluCkBAIC0xMzMwLDcgKzEzMzYsNyBAQAogCX0KICNlbHNlCiAKLQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAlnZmFyX2NsZWFuX3J4X3JpbmcoZGV2LCBwcml2LT5yeF9yaW5nX3NpemUpOwogCiAJLyogSWYgd2UgYXJlIGNvYWxlc2NpbmcgaW50ZXJydXB0cywgdXBkYXRlIHRoZSB0aW1lciAqLwpAQCAtMTM0MSw3ICsxMzQ3LDcgQEAKIAllbHNlCiAJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJ4aWMsIDApOwogCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogI2VuZGlmCiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xNDkwLDEzICsxNDk2LDYgQEAKIAkvKiBVcGRhdGUgdGhlIGN1cnJlbnQgcnhiZCBwb2ludGVyIHRvIGJlIHRoZSBuZXh0IG9uZSAqLwogCXByaXYtPmN1cl9yeCA9IGJkcDsKIAotCS8qIElmIG5vIHBhY2tldHMgaGF2ZSBhcnJpdmVkIHNpbmNlIHRoZQotCSAqIGxhc3Qgb25lIHdlIHByb2Nlc3NlZCwgY2xlYXIgdGhlIElFVkVOVCBSWCBhbmQKLQkgKiBCU1kgYml0cyBzbyB0aGF0IGFub3RoZXIgaW50ZXJydXB0IHdvbid0IGJlCi0JICogZ2VuZXJhdGVkIHdoZW4gd2Ugc2V0IElNQVNLICovCi0JaWYgKGJkcC0+c3RhdHVzICYgUlhCRF9FTVBUWSkKLQkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBJRVZFTlRfUlhfTUFTSyk7Ci0KIAlyZXR1cm4gaG93bWFueTsKIH0KIApAQCAtMTUxNiw3ICsxNTE1LDcgQEAKIAlyeF93b3JrX2xpbWl0IC09IGhvd21hbnk7CiAJKmJ1ZGdldCAtPSBob3dtYW55OwogCi0JaWYgKHJ4X3dvcmtfbGltaXQgPj0gMCkgeworCWlmIChyeF93b3JrX2xpbWl0ID4gMCkgewogCQluZXRpZl9yeF9jb21wbGV0ZShkZXYpOwogCiAJCS8qIENsZWFyIHRoZSBoYWx0IGJpdCBpbiBSU1RBVCAqLwpAQCAtMTUzMyw3ICsxNTMyLDggQEAKIAkJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJ4aWMsIDApOwogCX0KIAotCXJldHVybiAocnhfd29ya19saW1pdCA8IDApID8gMSA6IDA7CisJLyogUmV0dXJuIDEgaWYgdGhlcmUncyBtb3JlIHdvcmsgdG8gZG8gKi8KKwlyZXR1cm4gKHJ4X3dvcmtfbGltaXQgPiAwKSA/IDAgOiAxOwogfQogI2VuZGlmCiAKQEAgLTE2MjksNyArMTYyOSw3IEBACiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtPnBoeWRldjsKIAlpbnQgbmV3X3N0YXRlID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCWlmIChwaHlkZXYtPmxpbmspIHsKIAkJdTMyIHRlbXB2YWwgPSBnZmFyX3JlYWQoJnJlZ3MtPm1hY2NmZzIpOwogCQl1MzIgZWNudHJsID0gZ2Zhcl9yZWFkKCZyZWdzLT5lY250cmwpOwpAQCAtMTY5NCw3ICsxNjk0LDcgQEAKIAlpZiAobmV3X3N0YXRlICYmIG5ldGlmX21zZ19saW5rKHByaXYpKQogCQlwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiB9CiAKIC8qIFVwZGF0ZSB0aGUgaGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgY3VycmVudCBsaXN0IG9mIG11bHRpY2FzdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGQzN2Q1NDAuLjEyN2M5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTY1Niw0MyArNjU2LDYyIEBACiAgKiB0aGUgYnVmZmVyIGRlc2NyaXB0b3IgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIGNvbmRpdGlvbi4KICAqLwogc3RydWN0IGdmYXJfcHJpdmF0ZSB7Ci0JLyogcG9pbnRlcnMgdG8gYXJyYXlzIG9mIHNrYnVmZnMgZm9yIHR4IGFuZCByeCAqLworCS8qIEZpZWxkcyBjb250cm9sbGVkIGJ5IFRYIGxvY2sgKi8KKwlzcGlubG9ja190IHR4bG9jazsKKworCS8qIFBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIHNrYnVmZnMgKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqKiB0eF9za2J1ZmY7Ci0Jc3RydWN0IHNrX2J1ZmYgKiogcnhfc2tidWZmOwogCi0JLyogaW5kaWNlcyBwb2ludGluZyB0byB0aGUgbmV4dCBmcmVlIHNiayBpbiBza2IgYXJyYXlzICovCisJLyogbmV4dCBmcmVlIHNrYiBpbiB0aGUgYXJyYXkgKi8KIAl1MTYgc2tiX2N1cnR4OwotCXUxNiBza2JfY3Vycng7CiAKLQkvKiBpbmRleCBvZiB0aGUgZmlyc3Qgc2tiIHdoaWNoIGhhc24ndCBiZWVuIHRyYW5zbWl0dGVkCi0JICogeWV0LiAqLworCS8qIEZpcnN0IHNrYiBpbiBsaW5lIHRvIGJlIHRyYW5zbWl0dGVkICovCiAJdTE2IHNrYl9kaXJ0eXR4OwogCiAJLyogQ29uZmlndXJhdGlvbiBpbmZvIGZvciB0aGUgY29hbGVzY2luZyBmZWF0dXJlcyAqLwogCXVuc2lnbmVkIGNoYXIgdHhjb2FsZXNjaW5nOwogCXVuc2lnbmVkIHNob3J0IHR4Y291bnQ7CiAJdW5zaWduZWQgc2hvcnQgdHh0aW1lOworCisJLyogQnVmZmVyIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgdHhiZDggKnR4X2JkX2Jhc2U7CS8qIEZpcnN0IHR4IGJ1ZmZlciBkZXNjcmlwdG9yICovCisJc3RydWN0IHR4YmQ4ICpjdXJfdHg7CSAgICAgICAgLyogTmV4dCBmcmVlIHJpbmcgZW50cnkgKi8KKwlzdHJ1Y3QgdHhiZDggKmRpcnR5X3R4OwkJLyogRmlyc3QgYnVmZmVyIGluIGxpbmUKKwkJCQkJICAgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwl1bnNpZ25lZCBpbnQgdHhfcmluZ19zaXplOworCisJLyogUlggTG9ja2VkIGZpZWxkcyAqLworCXNwaW5sb2NrX3Qgcnhsb2NrOworCisJLyogc2tiIGFycmF5IGFuZCBpbmRleCAqLworCXN0cnVjdCBza19idWZmICoqIHJ4X3NrYnVmZjsKKwl1MTYgc2tiX2N1cnJ4OworCisJLyogUlggQ29hbGVzY2luZyB2YWx1ZXMgKi8KIAl1bnNpZ25lZCBjaGFyIHJ4Y29hbGVzY2luZzsKIAl1bnNpZ25lZCBzaG9ydCByeGNvdW50OwogCXVuc2lnbmVkIHNob3J0IHJ4dGltZTsKIAotCS8qIEdGQVIgYWRkcmVzc2VzICovCi0Jc3RydWN0IHJ4YmQ4ICpyeF9iZF9iYXNlOwkvKiBCYXNlIGFkZHJlc3NlcyBvZiBSeCBhbmQgVHggQnVmZmVycyAqLwotCXN0cnVjdCB0eGJkOCAqdHhfYmRfYmFzZTsKKwlzdHJ1Y3QgcnhiZDggKnJ4X2JkX2Jhc2U7CS8qIEZpcnN0IFJ4IGJ1ZmZlcnMgKi8KIAlzdHJ1Y3QgcnhiZDggKmN1cl9yeDsgICAgICAgICAgIC8qIE5leHQgZnJlZSByeCByaW5nIGVudHJ5ICovCi0Jc3RydWN0IHR4YmQ4ICpjdXJfdHg7CSAgICAgICAgLyogTmV4dCBmcmVlIHJpbmcgZW50cnkgKi8KLQlzdHJ1Y3QgdHhiZDggKmRpcnR5X3R4OwkJLyogVGhlIFJpbmcgZW50cnkgdG8gYmUgZnJlZWQuICovCi0Jc3RydWN0IGdmYXIgX19pb21lbSAqcmVnczsJLyogUG9pbnRlciB0byB0aGUgR0ZBUiBtZW1vcnkgbWFwcGVkIFJlZ2lzdGVycyAqLwotCXUzMiBfX2lvbWVtICpoYXNoX3JlZ3NbMTZdOwotCWludCBoYXNoX3dpZHRoOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOyAvKiBsaW51eCBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgZ2Zhcl9leHRyYV9zdGF0cyBleHRyYV9zdGF0czsKLQlzcGlubG9ja190IGxvY2s7CisKKwkvKiBSWCBwYXJhbWV0ZXJzICovCisJdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcnhfYnVmZmVyX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX2luZGV4OwotCXVuc2lnbmVkIGludCB0eF9yaW5nX3NpemU7Ci0JdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2l6ZTsKKworCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKKworCS8qIFVucHJvdGVjdGVkIGZpZWxkcyAqLworCS8qIFBvaW50ZXIgdG8gdGhlIEdGQVIgbWVtb3J5IG1hcHBlZCBSZWdpc3RlcnMgKi8KKwlzdHJ1Y3QgZ2ZhciBfX2lvbWVtICpyZWdzOworCisJLyogSGFzaCByZWdpc3RlcnMgYW5kIHRoZWlyIHdpZHRoICovCisJdTMyIF9faW9tZW0gKmhhc2hfcmVnc1sxNl07CisJaW50IGhhc2hfd2lkdGg7CisKKwkvKiBnbG9iYWwgcGFyYW1ldGVycyAqLwogCXVuc2lnbmVkIGludCBmaWZvX3RocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgZmlmb19zdGFydmU7CiAJdW5zaWduZWQgaW50IGZpZm9fc3RhcnZlX29mZjsKQEAgLTcwMiwxMyArNzIxLDE1IEBACiAJCWV4dGVuZGVkX2hhc2g6MSwKIAkJYmRfc3Rhc2hfZW46MTsKIAl1bnNpZ25lZCBzaG9ydCBwYWRkaW5nOwotCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKLQkvKiBJbmZvIHN0cnVjdHVyZSBpbml0aWFsaXplZCBieSBib2FyZCBzZXR1cCBjb2RlICovCisKIAl1bnNpZ25lZCBpbnQgaW50ZXJydXB0VHJhbnNtaXQ7CiAJdW5zaWduZWQgaW50IGludGVycnVwdFJlY2VpdmU7CiAJdW5zaWduZWQgaW50IGludGVycnVwdEVycm9yOworCisJLyogaW5mbyBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgYnkgcGxhdGZvcm0gY29kZSAqLwogCXN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKmVpbmZvOwogCisJLyogUEhZIHN0dWZmICovCiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsKIAlpbnQgb2xkc3BlZWQ7CkBAIC03MTYsNiArNzM3LDEwIEBACiAJaW50IG9sZGxpbms7CiAKIAl1aW50MzJfdCBtc2dfZW5hYmxlOworCisJLyogTmV0d29yayBTdGF0aXN0aWNzICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJc3RydWN0IGdmYXJfZXh0cmFfc3RhdHMgZXh0cmFfc3RhdHM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHUzMiBnZmFyX3JlYWQodm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKaW5kZXggNWRlN2IyZS4uZDY5Njk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKQEAgLTQ1NSwxMCArNDU1LDE0IEBACiAKIAkJLyogSGFsdCBUWCBhbmQgUlgsIGFuZCBwcm9jZXNzIHRoZSBmcmFtZXMgd2hpY2gKIAkJICogaGF2ZSBhbHJlYWR5IGJlZW4gcmVjZWl2ZWQgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2soJnByaXYtPnJ4bG9jayk7CisKIAkJZ2Zhcl9oYWx0KGRldik7CiAJCWdmYXJfY2xlYW5fcnhfcmluZyhkZXYsIHByaXYtPnJ4X3Jpbmdfc2l6ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlzcGluX3VubG9jaygmcHJpdi0+cnhsb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiAKIAkJLyogTm93IHdlIHRha2UgZG93biB0aGUgcmluZ3MgdG8gcmVidWlsZCB0aGVtICovCiAJCXN0b3BfZ2ZhcihkZXYpOwpAQCAtNDg4LDEwICs0OTIsMTQgQEAKIAogCQkvKiBIYWx0IFRYIGFuZCBSWCwgYW5kIHByb2Nlc3MgdGhlIGZyYW1lcyB3aGljaAogCQkgKiBoYXZlIGFscmVhZHkgYmVlbiByZWNlaXZlZCAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CisJCXNwaW5fbG9jaygmcHJpdi0+cnhsb2NrKTsKKwogCQlnZmFyX2hhbHQoZGV2KTsKIAkJZ2Zhcl9jbGVhbl9yeF9yaW5nKGRldiwgcHJpdi0+cnhfcmluZ19zaXplKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJCXNwaW5fdW5sb2NrKCZwcml2LT5yeGxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCQkvKiBOb3cgd2UgdGFrZSBkb3duIHRoZSByaW5ncyB0byByZWJ1aWxkIHRoZW0gKi8KIAkJc3RvcF9nZmFyKGRldik7CkBAIC01MjMsNyArNTMxLDcgQEAKIAlpZiAoIShwcml2LT5laW5mby0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiAJZ2Zhcl9oYWx0KGRldik7CiAKIAlpZiAoZGF0YSkKQEAgLTUzMiw3ICs1NDAsNyBAQAogCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQX0NTVU07CiAKIAlnZmFyX3N0YXJ0KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKaW5kZXggNTFlZjE4MS4uYTZkNWM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYwpAQCAtODIsNyArODIsNyBAQAogCWVsc2UKIAkJcmV0dXJuIGNvdW50OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7CiAKIAkvKiBTZXQgdGhlIG5ldyBzdGFzaGluZyB2YWx1ZSAqLwogCXByaXYtPmJkX3N0YXNoX2VuID0gbmV3X3NldHRpbmc7CkBAIC05Niw3ICs5Niw3IEBACiAKIAlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5hdHRyLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTExOCw3ICsxMTgsNyBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAlpZiAobGVuZ3RoID4gcHJpdi0+cnhfYnVmZmVyX3NpemUpCiAJCXJldHVybiBjb3VudDsKIApAQCAtMTQyLDcgKzE0Miw3IEBACiAKIAlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5hdHRyLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTE2Niw3ICsxNjYsNyBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAlpZiAoaW5kZXggPiBwcml2LT5yeF9zdGFzaF9zaXplKQogCQlyZXR1cm4gY291bnQ7CiAKQEAgLTE4MCw3ICsxODAsNyBAQAogCXRlbXAgfD0gQVRUUkVMSV9FSShpbmRleCk7CiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+YXR0cmVsaSwgZmxhZ3MpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjA1LDcgKzIwNSw3IEBACiAJaWYgKGxlbmd0aCA+IEdGQVJfTUFYX0ZJRk9fVEhSRVNIT0xEKQogCQlyZXR1cm4gY291bnQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCXByaXYtPmZpZm9fdGhyZXNob2xkID0gbGVuZ3RoOwogCkBAIC0yMTQsNyArMjE0LDcgQEAKIAl0ZW1wIHw9IGxlbmd0aDsKIAlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5maWZvX3R4X3RociwgdGVtcCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yNDAsNyArMjQwLDcgQEAKIAlpZiAobnVtID4gR0ZBUl9NQVhfRklGT19TVEFSVkUpCiAJCXJldHVybiBjb3VudDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+Zmlmb19zdGFydmUgPSBudW07CiAKQEAgLTI0OSw3ICsyNDksNyBAQAogCXRlbXAgfD0gbnVtOwogCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmZpZm9fdHhfc3RhcnZlLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTI3NCw3ICsyNzQsNyBAQAogCWlmIChudW0gPiBHRkFSX01BWF9GSUZPX1NUQVJWRV9PRkYpCiAJCXJldHVybiBjb3VudDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+Zmlmb19zdGFydmVfb2ZmID0gbnVtOwogCkBAIC0yODMsNyArMjgzLDcgQEAKIAl0ZW1wIHw9IG51bTsKIAlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5maWZvX3R4X3N0YXJ2ZV9zaHV0b2ZmLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKaW5kZXggNzlhOGZiYy4uMGQ1ZmNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKQEAgLTU4Miw3ICs1ODIsNiBAQAogCQlJTklUX1dPUksoJnByaXYtPnJ4X3dvcmssIHJ4X2JoLCBwcml2KTsKIAkJZGV2LT5wcml2ID0gcHJpdjsKIAkJc3ByaW50ZihkZXYtPm5hbWUsICJkbWFzY2MlaSIsIDIgKiBuICsgaSk7Ci0JCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAkJZGV2LT5iYXNlX2FkZHIgPSBjYXJkX2Jhc2U7CiAJCWRldi0+aXJxID0gaXJxOwogCQlkZXYtPm9wZW4gPSBzY2Nfb3BlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKaW5kZXggNmFjZTBlOS4uNTkyNzc4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKQEAgLTE1NTAsNyArMTU1MCw2IEBACiAKIHN0YXRpYyB2b2lkIHNjY19uZXRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICAgPSAxNjsJLyogc2hvdWxkIGJlIGVub3VnaC4uLiAqLwogCiAJZGV2LT5vcGVuICAgICAgICAgICAgPSBzY2NfbmV0X29wZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCmluZGV4IGZlMjI0NzkuLmI0OTg4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCkBAIC0xMDk4LDcgKzEwOTgsNiBAQAogCiAJZGV2LT5iYXNlX2FkZHIgPSB5cC0+aW9iYXNlOwogCWRldi0+aXJxID0geXAtPmlycTsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAKIAlkZXYtPm9wZW4gPSB5YW1fb3BlbjsKIAlkZXYtPnN0b3AgPSB5YW1fY2xvc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeWRyYS5oIGIvZHJpdmVycy9uZXQvaHlkcmEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0MTQxNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9oeWRyYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCSRMaW51eDogaHlkcmEuaCx2IDEuMCAxOTk0LzEwLzI2IDAyOjAzOjQ3IGNnZCBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk0IFRpbW8gUm9zc2kKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSAgVGltbyBSb3NzaQotICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogVGhlIEh5ZHJhIFN5c3RlbXMgY2FyZCB1c2VzIHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yCi0gKiA4MzkwIE5JQyAoTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlcikgY2hpcCwgbG9jYXRlZAotICogYXQgY2FyZCBiYXNlIGFkZHJlc3MgKyAweGZmZTEuIE5JQyByZWdpc3RlcnMgYXJlIGFjY2Vzc2libGUKLSAqIG9ubHkgYXQgb2RkIGJ5dGUgYWRkcmVzc2VzLCBzbyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBtdXN0Ci0gKiBiZSBtdWx0aXBsaWVkIGJ5IHR3by4KLSAqCi0gKiBDYXJkIGFkZHJlc3MgUFJPTSBpcyBsb2NhdGVkIGF0IGNhcmQgYmFzZSArIDB4ZmZjMCAoZXZlbiBieXRlIGFkZHJlc3NlcykKLSAqCi0gKiBSQU0gc3RhcnRzIGF0IHRoZSBjYXJkIGJhc2UgYWRkcmVzcywgYW5kIGlzIDE2SyBvciA2NEsuCi0gKiBUaGUgY3VycmVudCBBbWlnYSBOZXRCU0QgaHlkcmEgZHJpdmVyIGlzIGhhcmR3aXJlZCBmb3IgMTZLLgotICogSXQgc2VlbXMgdGhhdCB0aGUgUkFNIHNob3VsZCBiZSBhY2Nlc3NlZCBhcyB3b3JkcyBvciBsb25nd29yZHMgb25seS4KLSAqCi0gKi8KLQotLyogYWRhcHRlZCBmb3IgTGludXggYnkgVG9waSBLYW5lcnZhIDAzLzI5Lzk1Ci0gICB3aXRoIG9yaWdpbmFsIGF1dGhvcidzIHBlcm1pc3Npb24gICAgICAgICAgKi8KLQotI2RlZmluZSBIWURSQV9OSUNfQkFTRSAweGZmZTEKLQotLyogUGFnZTAgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgTklDX0NSICAgICAwICAgICAgIC8qIENvbW1hbmQgcmVnaXN0ZXIgICAqLwotI2RlZmluZSBOSUNfUFNUQVJUICgxKjIpICAgLyogUGFnZSBzdGFydCAod3JpdGUpICovCi0jZGVmaW5lIE5JQ19QU1RPUCAgKDIqMikgICAvKiBQYWdlIHN0b3AgKHdyaXRlKSAgKi8KLSNkZWZpbmUgTklDX0JORFJZICAoMyoyKSAgIC8qIEJvdW5kYXJ5IHBvaW50ZXIgICAqLwotI2RlZmluZSBOSUNfVFNSICAgICg0KjIpICAgLyogVHJhbnNtaXQgc3RhdHVzIChyZWFkKSAqLwotI2RlZmluZSBOSUNfVFBTUiAgICg0KjIpICAgLyogVHJhbnNtaXQgcGFnZSBzdGFydCAod3JpdGUpICovCi0jZGVmaW5lIE5JQ19OQ1IgICAgKDUqMikgICAvKiBOdW1iZXIgb2YgY29sbGlzaW9ucywgcmVhZCAgKi8KLSNkZWZpbmUgTklDX1RCQ1IwICAoNSoyKSAgIC8qIFRyYW5zbWl0IGJ5dGUgY291bnQgbG93ICh3cml0ZSkgICovCi0jZGVmaW5lIE5JQ19GSUZPICAgKDYqMikgICAvKiBGSUZPIHJlZy4gKHJlYWQpICAgKi8KLSNkZWZpbmUgTklDX1RCQ1IxICAoNioyKSAgIC8qIFRyYW5zbWl0IGJ5dGUgY291bnQgaGlnaCAod3JpdGUpICovCi0jZGVmaW5lIE5JQ19JU1IgICAgKDcqMikgICAvKiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIE5JQ19SQkNSMCAgKDB4YSoyKSAvKiBSZW1vdGUgYnl0ZSBjb3VudCBsb3cgKHdyaXRlKSAgKi8KLSNkZWZpbmUgTklDX1JCQ1IxICAoMHhiKjIpIC8qIFJlbW90ZSBieXRlIGNvdW50IGhpZ2ggKHdyaXRlKSAqLwotI2RlZmluZSBOSUNfUlNSICAgICgweGMqMikgLyogUmVjZWl2ZSBzdGF0dXMgKHJlYWQpICAqLwotI2RlZmluZSBOSUNfUkNSICAgICgweGMqMikgLyogUmVjZWl2ZSBjb25maWcgKHdyaXRlKSAqLwotI2RlZmluZSBOSUNfQ05UUjAgICgweGQqMikgLyogRnJhbWUgYWxpZ25tZW50IGVycm9yIGNvdW50IChyZWFkKSAqLwotI2RlZmluZSBOSUNfVENSICAgICgweGQqMikgLyogVHJhbnNtaXQgY29uZmlnICh3cml0ZSkgICovCi0jZGVmaW5lIE5JQ19DTlRSMSAgKDB4ZSoyKSAvKiBDUkMgZXJyb3IgY291bnRlciAocmVhZCkgKi8KLSNkZWZpbmUgTklDX0RDUiAgICAoMHhlKjIpIC8qIERhdGEgY29uZmlnICh3cml0ZSkgKi8KLSNkZWZpbmUgTklDX0NOVFIyICAoMHhmKjIpIC8qIG1pc3NlZCBwYWNrZXQgY291bnRlciAocmVhZCkgKi8KLSNkZWZpbmUgTklDX0lNUiAgICAoMHhmKjIpIC8qIEludGVycnVwdCBtYXNrIHJlZy4gKHdyaXRlKSAgKi8KLQotLyogUGFnZTEgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgTklDX1BBUjAgICAoMSoyKSAgIC8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KLSNkZWZpbmUgTklDX1BBUjEgICAoMioyKQotI2RlZmluZSBOSUNfUEFSMiAgICgzKjIpCi0jZGVmaW5lIE5JQ19QQVIzICAgKDQqMikKLSNkZWZpbmUgTklDX1BBUjQgICAoNSoyKQotI2RlZmluZSBOSUNfUEFSNSAgICg2KjIpCi0jZGVmaW5lIE5JQ19DVVJSICAgKDcqMikgICAvKiBDdXJyZW50IFJYIHJpbmctYnVmZmVyIHBhZ2UgKi8KLSNkZWZpbmUgTklDX01BUjAgICAoOCoyKSAgIC8qIE11bHRpY2FzdCBhZGRyZXNzICovCi0jZGVmaW5lIE5JQ19NQVIxICAgKDkqMikKLSNkZWZpbmUgTklDX01BUjIgICAoMHhhKjIpCi0jZGVmaW5lIE5JQ19NQVIzICAgKDB4YioyKQotI2RlZmluZSBOSUNfTUFSNCAgICgweGMqMikKLSNkZWZpbmUgTklDX01BUjUgICAoMHhkKjIpCi0jZGVmaW5lIE5JQ19NQVI2ICAgKDB4ZSoyKQotI2RlZmluZSBOSUNfTUFSNyAgICgweGYqMikKLQotLyogQ29tbWFuZCByZWdpc3RlciBkZWZpbml0aW9ucyAqLwotCi0jZGVmaW5lIENSX1NUT1AgICAweDAxIC8qIFN0b3AgLS0gc29mdHdhcmUgcmVzZXQgY29tbWFuZCAqLwotI2RlZmluZSBDUl9TVEFSVCAgMHgwMiAvKiBTdGFydCAqLwotI2RlZmluZSBDUl9UWFAgICAweDA0IC8qIFRyYW5zbWl0IHBhY2tldCAqLwotCi0jZGVmaW5lIENSX1JEMCAgICAweDA4IC8qIFJlbW90ZSBETUEgY21kICovCi0jZGVmaW5lIENSX1JEMSAgICAweDEwCi0jZGVmaW5lIENSX1JEMiAgICAweDIwCi0KLSNkZWZpbmUgQ1JfTk9ETUEgIENSX1JEMgotCi0jZGVmaW5lIENSX1BTMCAgICAweDQwIC8qIFBhZ2Ugc2VsZWN0ICovCi0jZGVmaW5lIENSX1BTMSAgICAweDgwCi0KLSNkZWZpbmUgQ1JfUEFHRTAgIDAKLSNkZWZpbmUgQ1JfUEFHRTEgIENSX1BTMAotI2RlZmluZSBDUl9QQUdFMiAgQ1JfUFMxCi0KLS8qIEludGVycnVwdCBzdGF0dXMgcmVnLiBkZWZpbml0aW9ucyAqLwotCi0jZGVmaW5lIElTUl9QUlggICAweDAxIC8qIFBhY2tldCByZWNlaXZlZCB3aXRob3V0IGVycm9ycyAqLwotI2RlZmluZSBJU1JfUFRYICAgMHgwMiAvKiBQYWNrZXQgdHJhbnNtaXR0ZWQgd2l0aG91dCBlcnJvcnMgKi8KLSNkZWZpbmUgSVNSX1JYRSAgIDB4MDQgLyogUmVjZWl2ZSBlcnJvciAgKi8KLSNkZWZpbmUgSVNSX1RYRSAgIDB4MDggLyogVHJhbnNtaXQgZXJyb3IgKi8KLSNkZWZpbmUgSVNSX09WVyAgIDB4MTAgLyogUmluZyBidWZmZXIgb3ZlcnJ1biAqLwotI2RlZmluZSBJU1JfQ05UICAgMHgyMCAvKiBDb3VudGVyIG92ZXJmbG93ICAgICovCi0jZGVmaW5lIElTUl9SREMgICAweDQwIC8qIFJlbW90ZSBETUEgY29tcGlsZSAqLwotI2RlZmluZSBJU1JfUlNUICAgMHg4MCAvKiBSZXNldCBzdGF0dXMgICAgICAqLwotCi0vKiBEYXRhIGNvbmZpZyByZWcuIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgRENSX1dUUyAgIDB4MDEgLyogV29yZCB0cmFuc2ZlciBzZWxlY3QgICovCi0jZGVmaW5lIERDUl9CT1MgICAweDAyIC8qIEJ5dGUgb3JkZXIgc2VsZWN0ICAgICAqLwotI2RlZmluZSBEQ1JfTEFTICAgMHgwNCAvKiBMb25nIGFkZHJlc3Mgc2VsZWN0ICAgKi8KLSNkZWZpbmUgRENSX0xTICAgIDB4MDggLyogTG9vcGJhY2sgc2VsZWN0ICAgICAgICovCi0jZGVmaW5lIERDUl9BUiAgICAweDEwIC8qIEF1dG8taW5pdCByZW1vdGUgICAgICAqLwotI2RlZmluZSBEQ1JfRlQwICAgMHgyMCAvKiBGSUZPIHRocmVzaG9sZCBzZWxlY3QgKi8KLSNkZWZpbmUgRENSX0ZUMSAgIDB4NDAKLQotLyogVHJhbnNtaXQgY29uZmlnIHJlZy4gZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBUQ1JfQ1JDICAweDAxIC8qIEluaGliaXQgQ1JDICovCi0jZGVmaW5lIFRDUl9MQjAgIDB4MDIgLyogTG9vcGJhY2sgY29udHJvbCAqLwotI2RlZmluZSBUQ1JfTEIxICAweDA0Ci0jZGVmaW5lIFRDUl9BVEQgIDB4MDggLyogQXV0byB0cmFuc21pdCBkaXNhYmxlICovCi0jZGVmaW5lIFRDUl9PRlNUIDB4MTAgLyogQ29sbGlzaW9uIG9mZnNldCBlbmFibGUgKi8KLQotLyogVHJhbnNtaXQgc3RhdHVzIHJlZy4gZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBUU1JfUFRYICAweDAxIC8qIFBhY2tldCB0cmFuc21pdHRlZCAqLwotI2RlZmluZSBUU1JfQ09MICAweDA0IC8qIFRyYW5zbWl0IGNvbGxpZGVkICovCi0jZGVmaW5lIFRTUl9BQlQgIDB4MDggLyogVHJhbnNtaXQgYWJvcnRlZCAqLwotI2RlZmluZSBUU1JfQ1JTICAweDEwIC8qIENhcnJpZXIgc2Vuc2UgbG9zdCAqLwotI2RlZmluZSBUU1JfRlUgICAweDIwIC8qIEZJRk8gdW5kZXJydW4gKi8KLSNkZWZpbmUgVFNSX0NESCAgMHg0MCAvKiBDRCBIZWFydGJlYXQgKi8KLSNkZWZpbmUgVFNSX09XQyAgMHg4MCAvKiBPdXQgb2YgV2luZG93IENvbGxpc2lvbiAqLwotCi0vKiBSZWNlaXZlciBjb25maWcgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBSQ1JfU0VQICAweDAxIC8qIFNhdmUgZXJyb3JlZCBwYWNrZXRzICovCi0jZGVmaW5lIFJDUl9BUiAgIDB4MDIgLyogQWNjZXB0IHJ1bnQgcGFja2V0cyAqLwotI2RlZmluZSBSQ1JfQUIgICAweDA0IC8qIEFjY2VwdCBicm9hZGNhc3QgKi8KLSNkZWZpbmUgUkNSX0FNICAgMHgwOCAvKiBBY2NlcHQgbXVsdGljYXN0ICovCi0jZGVmaW5lIFJDUl9QUk8gIDB4MTAgLyogUHJvbWlzY3VvdXMgbW9kZSAqLwotI2RlZmluZSBSQ1JfTU9OICAweDIwIC8qIE1vbml0b3IgbW9kZSAqLwotCi0vKiBSZWNlaXZlciBzdGF0dXMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBSU1JfUFJYICAweDAxIC8qIFBhY2tldCByZWNlaXZlZCB3aXRob3V0IGVycm9yICovCi0jZGVmaW5lIFJTUl9DUkMgIDB4MDIgLyogQ1JDIGVycm9yICovCi0jZGVmaW5lIFJTUl9GQUUgIDB4MDQgLyogRnJhbWUgYWxpZ25tZW50IGVycm9yICovCi0jZGVmaW5lIFJTUl9GTyAgIDB4MDggLyogRklGTyBvdmVycnVuICovCi0jZGVmaW5lIFJTUl9NUEEgIDB4MTAgLyogTWlzc2VkIHBhY2tldCAqLwotI2RlZmluZSBSU1JfUEhZICAweDIwIC8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KLSNkZWZpbmUgUlNSX0RJUyAgMHg0MCAvKiBSZWNlaXZlZCBkaXNhYmxlZCAqLwotI2RlZmluZSBSU1JfREZSICAweDgwIC8qIERlZmVycmluZyAoamFiYmVyKSAqLwotCi0vKiBIeWRyYSBTeXN0ZW0gY2FyZCBhZGRyZXNzIFBST00gb2Zmc2V0ICovCi0KLSNkZWZpbmUgSFlEUkFfQUREUlBST00gMHhmZmMwCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGNlYjk4ZmQuLjUyZDAxMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCiAJCWxwYXJfcmMgPSBoX2FkZF9sb2dpY2FsX2xhbl9idWZmZXIoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLCBkZXNjLmRlc2MpOwogCQkgICAgCi0JCWlmKGxwYXJfcmMgIT0gSF9TdWNjZXNzKSB7CisJCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTKSB7CiAJCQlwb29sLT5mcmVlX21hcFtmcmVlX2luZGV4XSA9IGluZGV4OwogCQkJcG9vbC0+c2tidWZmW2luZGV4XSA9IE5VTEw7CiAJCQlwb29sLT5jb25zdW1lcl9pbmRleC0tOwpAQCAtMzczLDcgKzM3Myw3IEBACiAKIAlscGFyX3JjID0gaF9hZGRfbG9naWNhbF9sYW5fYnVmZmVyKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywgZGVzYy5kZXNjKTsKIAkJICAgIAotCWlmKGxwYXJfcmMgIT0gSF9TdWNjZXNzKSB7CisJaWYobHBhcl9yYyAhPSBIX1NVQ0NFU1MpIHsKIAkJaWJtdmV0aF9kZWJ1Z19wcmludGsoImhfYWRkX2xvZ2ljYWxfbGFuX2J1ZmZlciBmYWlsZWQgZHVyaW5nIHJlY3ljbGUgcmM9JWxkIiwgbHBhcl9yYyk7CiAJCWlibXZldGhfcmVtb3ZlX2J1ZmZlcl9mcm9tX3Bvb2woYWRhcHRlciwgYWRhcHRlci0+cnhfcXVldWUucXVldWVfYWRkclthZGFwdGVyLT5yeF9xdWV1ZS5pbmRleF0uY29ycmVsYXRvcik7CiAJfQpAQCAtNTExLDcgKzUxMSw3IEBACiAJCQkJCSBhZGFwdGVyLT5maWx0ZXJfbGlzdF9kbWEsCiAJCQkJCSBtYWNfYWRkcmVzcyk7CiAKLQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykgeworCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTKSB7CiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJoX3JlZ2lzdGVyX2xvZ2ljYWxfbGFuIGZhaWxlZCB3aXRoICVsZFxuIiwgbHBhcl9yYyk7CiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJidWZmZXIgVENFOjB4JWx4IGZpbHRlciBUQ0U6MHglbHggcnhxIGRlc2M6MHglbHggTUFDOjB4JWx4XG4iLAogCQkJCSAgICAgYWRhcHRlci0+YnVmZmVyX2xpc3RfZG1hLApAQCAtNTI3LDcgKzUyNyw3IEBACiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJ1bmFibGUgdG8gcmVxdWVzdCBpcnEgMHgleCwgcmMgJWRcbiIsIG5ldGRldi0+aXJxLCByYyk7CiAJCWRvIHsKIAkJCXJjID0gaF9mcmVlX2xvZ2ljYWxfbGFuKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcyk7Ci0JCX0gd2hpbGUgKEhfaXNMb25nQnVzeShyYykgfHwgKHJjID09IEhfQnVzeSkpOworCQl9IHdoaWxlIChIX0lTX0xPTkdfQlVTWShyYykgfHwgKHJjID09IEhfQlVTWSkpOwogCiAJCWlibXZldGhfY2xlYW51cChhZGFwdGVyKTsKIAkJcmV0dXJuIHJjOwpAQCAtNTU2LDkgKzU1Niw5IEBACiAKIAlkbyB7CiAJCWxwYXJfcmMgPSBoX2ZyZWVfbG9naWNhbF9sYW4oYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzKTsKLQl9IHdoaWxlIChIX2lzTG9uZ0J1c3kobHBhcl9yYykgfHwgKGxwYXJfcmMgPT0gSF9CdXN5KSk7CisJfSB3aGlsZSAoSF9JU19MT05HX0JVU1kobHBhcl9yYykgfHwgKGxwYXJfcmMgPT0gSF9CVVNZKSk7CiAKLQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykKKwlpZihscGFyX3JjICE9IEhfU1VDQ0VTUykKIAl7CiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJoX2ZyZWVfbG9naWNhbF9sYW4gZmFpbGVkIHdpdGggJWx4LCBjb250aW51aW5nIHdpdGggY2xvc2VcbiIsCiAJCQkJICAgICBscGFyX3JjKTsKQEAgLTY5Myw5ICs2OTMsOSBAQAogCQkJCQkgICAgIGRlc2NbNF0uZGVzYywKIAkJCQkJICAgICBkZXNjWzVdLmRlc2MsCiAJCQkJCSAgICAgY29ycmVsYXRvcik7Ci0JfSB3aGlsZSAoKGxwYXJfcmMgPT0gSF9CdXN5KSAmJiAocmV0cnlfY291bnQtLSkpOworCX0gd2hpbGUgKChscGFyX3JjID09IEhfQlVTWSkgJiYgKHJldHJ5X2NvdW50LS0pKTsKICAgICAKLQlpZihscGFyX3JjICE9IEhfU3VjY2VzcyAmJiBscGFyX3JjICE9IEhfRHJvcHBlZCkgeworCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTICYmIGxwYXJfcmMgIT0gSF9EUk9QUEVEKSB7CiAJCWludCBpOwogCQlpYm12ZXRoX2Vycm9yX3ByaW50aygidHg6IGhfc2VuZF9sb2dpY2FsX2xhbiBmYWlsZWQgd2l0aCByYz0lbGRcbiIsIGxwYXJfcmMpOwogCQlmb3IoaSA9IDA7IGkgPCA2OyBpKyspIHsKQEAgLTc4NiwxNCArNzg2LDE0IEBACiAJLyogd2UgdGhpbmsgd2UgYXJlIGRvbmUgLSByZWVuYWJsZSBpbnRlcnJ1cHRzLCB0aGVuIGNoZWNrIG9uY2UgbW9yZSB0byBtYWtlIHN1cmUgd2UgYXJlIGRvbmUgKi8KIAlscGFyX3JjID0gaF92aW9fc2lnbmFsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywgVklPX0lSUV9FTkFCTEUpOwogCi0JaWJtdmV0aF9hc3NlcnQobHBhcl9yYyA9PSBIX1N1Y2Nlc3MpOworCWlibXZldGhfYXNzZXJ0KGxwYXJfcmMgPT0gSF9TVUNDRVNTKTsKIAogCW5ldGlmX3J4X2NvbXBsZXRlKG5ldGRldik7CiAKIAlpZihpYm12ZXRoX3J4cV9wZW5kaW5nX2J1ZmZlcihhZGFwdGVyKSAmJiBuZXRpZl9yeF9yZXNjaGVkdWxlKG5ldGRldiwgZnJhbWVzX3Byb2Nlc3NlZCkpCiAJewogCQlscGFyX3JjID0gaF92aW9fc2lnbmFsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywgVklPX0lSUV9ESVNBQkxFKTsKLQkJaWJtdmV0aF9hc3NlcnQobHBhcl9yYyA9PSBIX1N1Y2Nlc3MpOworCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU1VDQ0VTUyk7CiAJCW1vcmVfd29yayA9IDE7CiAJCWdvdG8gcmVzdGFydF9wb2xsOwogCX0KQEAgLTgxMyw3ICs4MTMsNyBAQAogCiAJaWYobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZXRkZXYpKSB7CiAJCWxwYXJfcmMgPSBoX3Zpb19zaWduYWwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLCBWSU9fSVJRX0RJU0FCTEUpOwotCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU3VjY2Vzcyk7CisJCWlibXZldGhfYXNzZXJ0KGxwYXJfcmMgPT0gSF9TVUNDRVNTKTsKIAkJX19uZXRpZl9yeF9zY2hlZHVsZShuZXRkZXYpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC04MzUsNyArODM1LDcgQEAKIAkJCQkJICAgSWJtVmV0aE1jYXN0RW5hYmxlUmVjdiB8CiAJCQkJCSAgIElibVZldGhNY2FzdERpc2FibGVGaWx0ZXJpbmcsCiAJCQkJCSAgIDApOwotCQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykgeworCQlpZihscGFyX3JjICE9IEhfU1VDQ0VTUykgewogCQkJaWJtdmV0aF9lcnJvcl9wcmludGsoImhfbXVsdGljYXN0X2N0cmwgcmM9JWxkIHdoZW4gZW50ZXJpbmcgcHJvbWlzYyBtb2RlXG4iLCBscGFyX3JjKTsKIAkJfQogCX0gZWxzZSB7CkBAIC04NDcsNyArODQ3LDcgQEAKIAkJCQkJICAgSWJtVmV0aE1jYXN0RGlzYWJsZUZpbHRlcmluZyB8CiAJCQkJCSAgIElibVZldGhNY2FzdENsZWFyRmlsdGVyVGFibGUsCiAJCQkJCSAgIDApOwotCQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykgeworCQlpZihscGFyX3JjICE9IEhfU1VDQ0VTUykgewogCQkJaWJtdmV0aF9lcnJvcl9wcmludGsoImhfbXVsdGljYXN0X2N0cmwgcmM9JWxkIHdoZW4gYXR0ZW1wdGluZyB0byBjbGVhciBmaWx0ZXIgdGFibGVcbiIsIGxwYXJfcmMpOwogCQl9CiAJCS8qIGFkZCB0aGUgYWRkcmVzc2VzIHRvIHRoZSBmaWx0ZXIgdGFibGUgKi8KQEAgLTg1OCw3ICs4NTgsNyBAQAogCQkJbHBhcl9yYyA9IGhfbXVsdGljYXN0X2N0cmwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCQkJICAgSWJtVmV0aE1jYXN0QWRkRmlsdGVyLAogCQkJCQkJICAgbWNhc3RfYWRkcik7Ci0JCQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykgeworCQkJaWYobHBhcl9yYyAhPSBIX1NVQ0NFU1MpIHsKIAkJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygiaF9tdWx0aWNhc3RfY3RybCByYz0lbGQgd2hlbiBhZGRpbmcgYW4gZW50cnkgdG8gdGhlIGZpbHRlciB0YWJsZVxuIiwgbHBhcl9yYyk7CiAJCQl9CiAJCX0KQEAgLTg2Nyw3ICs4NjcsNyBAQAogCQlscGFyX3JjID0gaF9tdWx0aWNhc3RfY3RybChhZGFwdGVyLT52ZGV2LT51bml0X2FkZHJlc3MsCiAJCQkJCSAgIElibVZldGhNY2FzdEVuYWJsZUZpbHRlcmluZywKIAkJCQkJICAgMCk7Ci0JCWlmKGxwYXJfcmMgIT0gSF9TdWNjZXNzKSB7CisJCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTKSB7CiAJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygiaF9tdWx0aWNhc3RfY3RybCByYz0lbGQgd2hlbiBlbmFibGluZyBmaWx0ZXJpbmdcbiIsIGxwYXJfcmMpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCmluZGV4IDVlNmQwMDcuLmNmZjg1OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKQEAgLTMzLDcgKzMzLDcgQEAKIAogY29uZmlnIEVTSV9ET05HTEUKIAl0cmlzdGF0ZSAiRVNJIEpldEV5ZSBQQyBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgRXh0ZW5kZWQgU3lzdGVtcwogCSAgSmV0RXllIFBDIGRvbmdsZS4gIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBFU0kKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogY29uZmlnIEFDVElTWVNfRE9OR0xFCiAJdHJpc3RhdGUgIkFDVGlTWVMgSVItMjIwTCBhbmQgSVIyMjBMKyBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgQUNUaVNZUyBJUi0yMjBMIGFuZAogCSAgSVIyMjBMKyBkb25nbGVzLiAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlCkBAIC01NSw3ICs1NSw3IEBACiAKIGNvbmZpZyBURUtSQU1fRE9OR0xFCiAJdHJpc3RhdGUgIlRla3JhbSBJck1hdGUgMjEwQiBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgVGVrcmFtIElyTWF0ZSAyMTBCCiAJICBkb25nbGUuICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgVGVrcmFtIGRvbmdsZQpAQCAtNjYsNyArNjYsNyBAQAogCiBjb25maWcgVE9JTTMyMzJfRE9OR0xFCiAJdHJpc3RhdGUgIlRPSU0zMjMyIElyRGEgZG9uZ2xlIgotCWRlcGVuZHMgb24gRE9OR0xFICYmIElSREEKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIFZpc2hheS9UZW1pYwogCSAgVE9JTTMyMzIgYW5kIFRPSU00MjMyIGJhc2VkIGRvbmdsZXMuCkBAIC03NCw3ICs3NCw3IEBACiAKIGNvbmZpZyBMSVRFTElOS19ET05HTEUKIAl0cmlzdGF0ZSAiUGFyYWxsYXggTGl0ZUxpbmsgZG9uZ2xlIgotCWRlcGVuZHMgb24gRE9OR0xFICYmIElSREEKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIFBhcmFsbGF4IExpdGVsaW5rCiAJICBkb25nbGUuICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgVGhlIFBhcmFsbGF4CkBAIC04NSw3ICs4NSw3IEBACiAKIGNvbmZpZyBNQTYwMF9ET05HTEUKIAl0cmlzdGF0ZSAiTW9iaWxlIEFjdGlvbiBNQTYwMCBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBNb2JpbGUgQWN0aW9uIE1BNjAwCiAJICBkb25nbGUuICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgTUE2MDAgZG9uZ2xlCkBAIC05OCw3ICs5OCw3IEBACiAKIGNvbmZpZyBHSVJCSUxfRE9OR0xFCiAJdHJpc3RhdGUgIkdyZWVud2ljaCBHSXJCSUwgZG9uZ2xlIgotCWRlcGVuZHMgb24gRE9OR0xFICYmIElSREEgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJUlRUWV9TSVIgJiYgRE9OR0xFICYmIElSREEgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgR3JlZW53aWNoIEdJckJJTAogCSAgZG9uZ2xlLiAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KQEAgLTEwOSw3ICsxMDksNyBAQAogCiBjb25maWcgTUNQMjEyMF9ET05HTEUKIAl0cmlzdGF0ZSAiTWljcm9jaGlwIE1DUDIxMjAiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgTUNQMjEyMAogCSAgZG9uZ2xlLiAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KQEAgLTEyMyw3ICsxMjMsNyBAQAogCiBjb25maWcgT0xEX0JFTEtJTl9ET05HTEUKIAl0cmlzdGF0ZSAiT2xkIEJlbGtpbiBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBBZGFwdGVjIEFpcnBvcnQgMTAwMAogCSAgYW5kIDIwMDAgZG9uZ2xlcy4gIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZQpAQCAtMTMyLDcgKzEzMiw3IEBACiAKIGNvbmZpZyBBQ1QyMDBMX0RPTkdMRQogCXRyaXN0YXRlICJBQ1RpU1lTIElSLTIwMEwgZG9uZ2xlIgotCWRlcGVuZHMgb24gRE9OR0xFICYmIElSREEgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJUlRUWV9TSVIgJiYgRE9OR0xFICYmIElSREEgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgQUNUaVNZUyBJUi0yMDBMCiAJICBkb25nbGUuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXJkYS9NYWtlZmlsZQppbmRleCAyN2FiNzVmLi5jMWNlMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUKQEAgLTQ2LDQgKzQ2LDQgQEAKIG9iai0kKENPTkZJR19UT0lNMzIzMl9ET05HTEUpCSs9IHRvaW0zMjMyLXNpci5vCiAKICMgVGhlIFNJUiBoZWxwZXIgbW9kdWxlCi1zaXItZGV2LW9ianMgOj0gc2lyX2Rldi5vIHNpcl9kb25nbGUubyBzaXJfa3RocmVhZC5vCitzaXItZGV2LW9ianMgOj0gc2lyX2Rldi5vIHNpcl9kb25nbGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IDZlMmVjNTYuLmNkODc1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGaWxlbmFtZTogICAgICBpcmRhLXVzYi5jCi0gKiBWZXJzaW9uOiAgICAgICAwLjliCisgKiBWZXJzaW9uOiAgICAgICAwLjEwCiAgKiBEZXNjcmlwdGlvbjogICBJckRBLVVTQiBEcml2ZXIKICAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbCAKICAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+CkBAIC05LDYgKzksOSBAQAogICoJQ29weXJpZ2h0IChDKSAyMDAwLCBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CiAgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMSwgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4KICAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAxLCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNCwgU2lnbWFUZWwsIEluYy4gPGlycXVhbGl0eUBzaWdtYXRlbC5jb20+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNSwgTWlsYW4gQmVubyA8YmVub0Bwb2JveC5zaz4KKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDA2LCBOaWNrIEZlZGNoaWsgPG5pY2tAZmVkY2hpay5vcmcudWE+CiAgKiAgICAgICAgICAKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjEsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSAiaXJkYS11c2IuaCIKIApAQCAtNzgsOCArODIsMTIgQEAKIAl7IFVTQl9ERVZJQ0UoMHg1MGYsIDB4MTgwKSwgLmRyaXZlcl9pbmZvID0gSVVDX1NQRUVEX0JVRyB8IElVQ19OT19XSU5ET1cgfSwKIAkvKiBFeHRlbmRlZCBTeXN0ZW1zLCBJbmMuLCAgWFROREFjY2VzcyBJckRBIFVTQiAoRVNJLTk2ODUpICovCiAJeyBVU0JfREVWSUNFKDB4OGU5LCAweDEwMCksIC5kcml2ZXJfaW5mbyA9IElVQ19TUEVFRF9CVUcgfCBJVUNfTk9fV0lORE9XIH0sCisJLyogU2lnbWFUZWwgU1RJUjQyMTAvNDIyMC80MTE2IFVTQiBJckRBIChWRklSKSBCcmlkZ2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDIxMCksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSXzQyMTAgfCBJVUNfU1BFRURfQlVHIH0sCisJeyBVU0JfREVWSUNFKDB4NjZmLCAweDQyMjApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUl80MjEwIHwgSVVDX1NQRUVEX0JVRyB9LAorCXsgVVNCX0RFVklDRSgweDY2ZiwgMHg0MTE2KSwgLmRyaXZlcl9pbmZvID0gSVVDX1NUSVJfNDIxMCB8IElVQ19TUEVFRF9CVUcgfSwKIAl7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKLQkgICAgICAgICAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAogCSAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BUFBfU1BFQywKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfQ0xBU1NfSVJEQSwKIAkgIC5kcml2ZXJfaW5mbyA9IElVQ19ERUZBVUxULCB9LApAQCAtOTksNiArMTA3LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgdm9pZCBpcmRhX3VzYl9pbml0X3FvcyhzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYpIDsKIHN0YXRpYyBzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICppcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2Moc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogc3RhdGljIHZvaWQgaXJkYV91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiBzdGF0aWMgdm9pZCBpcmRhX3VzYl9jaGFuZ2Vfc3BlZWRfeGJvZnMoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKTsKQEAgLTE0MSw3ICsxNTAsMjQgQEAKIAkJCQkgIF9fdTggKmhlYWRlciwKIAkJCQkgIGludAlmb3JjZSkKIHsKLQkvKiBTZXQgdGhlIG5lZ290aWF0ZWQgbGluayBzcGVlZCAqLworCS8qIEhlcmUgd2UgY2hlY2sgaWYgd2UgaGF2ZSBhbiBTVElSNDIxeCBjaGlwLAorCSAqIGFuZCBpZiBlaXRoZXIgc3BlZWQgb3IgeGJvZnMgKG9yIGJvdGgpIG5lZWRzCisJICogdG8gYmUgY2hhbmdlZC4KKwkgKi8KKwlpZiAoc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgJiYKKwkgICAgKChzZWxmLT5uZXdfc3BlZWQgIT0gLTEpIHx8IChzZWxmLT5uZXdfeGJvZnMgIT0gLTEpKSkgeworCisJCS8qIFdpdGggU1RJUjQyMXgsIHNwZWVkIGFuZCB4Qk9GcyBtdXN0IGJlIHNldCBhdCB0aGUgc2FtZQorCQkgKiB0aW1lLCBldmVuIGlmIG9ubHkgb25lIG9mIHRoZW0gY2hhbmdlcy4KKwkJICovCisJCWlmIChzZWxmLT5uZXdfc3BlZWQgPT0gLTEpCisJCQlzZWxmLT5uZXdfc3BlZWQgPSBzZWxmLT5zcGVlZCA7CisKKwkJaWYgKHNlbGYtPm5ld194Ym9mcyA9PSAtMSkKKwkJCXNlbGYtPm5ld194Ym9mcyA9IHNlbGYtPnhib2ZzIDsKKwl9CisKKwkvKiBTZXQgdGhlIGxpbmsgc3BlZWQgKi8KIAlpZiAoc2VsZi0+bmV3X3NwZWVkICE9IC0xKSB7CiAJCS8qIEh1bS4uLiBVZ2x5IGhhY2sgOi0oCiAJCSAqIFNvbWUgZGV2aWNlIGFyZSBub3QgY29tcGxpYW50IHdpdGggdGhlIHNwZWMgYW5kIGNoYW5nZQpAQCAtMTkxLDcgKzIxNywxMSBAQAogCQkgICAgICAgICpoZWFkZXIgPSBTUEVFRF80MDAwMDAwOwogCQkJc2VsZi0+bmV3X3hib2ZzID0gMDsKIAkJCWJyZWFrOwotCQl9CisJCWNhc2UgMTYwMDAwMDA6CisJCQkqaGVhZGVyID0gU1BFRURfMTYwMDAwMDA7CisgIAkJCXNlbGYtPm5ld194Ym9mcyA9IDA7CisgIAkJCWJyZWFrOworICAJCX0KIAl9IGVsc2UKIAkJLyogTm8gY2hhbmdlICovCiAJCSpoZWFkZXIgPSAwOwpAQCAtMjM1LDYgKzI2NSwzMiBAQAogCX0KIH0KIAorLyoKKyogICBjYWxjdWxhdGUgdHVybmFyb3VuZCB0aW1lIGZvciBTaWdtYVRlbCBoZWFkZXIKKyovCitzdGF0aWMgX191OCBnZXRfdHVybmFyb3VuZF90aW1lKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHR1cm5hcm91bmRfdGltZSA9IGlyZGFfZ2V0X210dChza2IpOworCisJaWYgKCB0dXJuYXJvdW5kX3RpbWUgPT0gMCApCisJCXJldHVybiAwOworCWVsc2UgaWYgKCB0dXJuYXJvdW5kX3RpbWUgPD0gMTAgKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDUwICkKKwkJcmV0dXJuIDI7CisJZWxzZSBpZiAoIHR1cm5hcm91bmRfdGltZSA8PSAxMDAgKQorCQlyZXR1cm4gMzsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDUwMCApCisJCXJldHVybiA0OworCWVsc2UgaWYgKCB0dXJuYXJvdW5kX3RpbWUgPD0gMTAwMCApCisJCXJldHVybiA1OworCWVsc2UgaWYgKCB0dXJuYXJvdW5kX3RpbWUgPD0gNTAwMCApCisJCXJldHVybiA2OworCWVsc2UKKwkJcmV0dXJuIDc7Cit9CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFNlbmQgYSBjb21tYW5kIHRvIGNoYW5nZSB0aGUgc3BlZWQgb2YgdGhlIGRvbmdsZQpAQCAtMjYyLDEyICszMTgsMTggQEAKIAkvKiBTZXQgdGhlIG5ldyBzcGVlZCBhbmQgeGJvZnMgaW4gdGhpcyBmYWtlIGZyYW1lICovCiAJaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIGZyYW1lLCAxKTsKIAorCWlmICggc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgKSB7CisJCWlmIChmcmFtZVswXSA9PSAwKSByZXR1cm4gOyAvLyBkbyBub3RoaW5nIGlmIG5vIGNoYW5nZQorCQlmcmFtZVsxXSA9IDA7IC8vIG90aGVyIHBhcmFtZXRlcnMgZG9uJ3QgY2hhbmdlIGhlcmUKKwkJZnJhbWVbMl0gPSAwOworCX0KKwogCS8qIFN1Ym1pdCB0aGUgMCBsZW5ndGggSXJEQSBmcmFtZSB0byB0cmlnZ2VyIG5ldyBzcGVlZCBzZXR0aW5ncyAqLwogICAgICAgICB1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlbGYtPnVzYmRldiwKIAkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHNlbGYtPnVzYmRldiwgc2VsZi0+YnVsa19vdXRfZXApLAogICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLCBJUkRBX1VTQl9TUEVFRF9NVFUsCiAgICAgICAgICAgICAgICAgICAgICAgc3BlZWRfYnVsa19jYWxsYmFjaywgc2VsZik7Ci0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gVVNCX0lSREFfSEVBREVSOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNlbGYtPmhlYWRlcl9sZW5ndGg7CiAJdXJiLT50cmFuc2Zlcl9mbGFncyA9IDA7CiAKIAkvKiBJcnEgZGlzYWJsZWQgLT4gR0ZQX0FUT01JQyAqLwpAQCAtMzgzLDE2ICs0NDUsMzUgQEAKIAkgKiBhbGxvY2F0aW9uIHdpbGwgYmUgZG9uZSBsb3dlciBpbiBza2JfcHVzaCgpLgogCSAqIEFsc28sIHdlIGRvbid0IHVzZSBkaXJlY3RseSBza2JfY293KCksIGJlY2F1c2UgaXQgcmVxdWlyZQogCSAqIGhlYWRyb29tID49IDE2LCB3aGljaCBmb3JjZSB1bm5lY2Vzc2FyeSBjb3BpZXMgLSBKZWFuIElJICovCi0JaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgVVNCX0lSREFfSEVBREVSKSB7CisJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgc2VsZi0+aGVhZGVyX2xlbmd0aCkgewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBJbnN1ZmljaWVudCBza2IgaGVhZHJvb20uXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlpZiAoc2tiX2Nvdyhza2IsIFVTQl9JUkRBX0hFQURFUikpIHsKKwkJaWYgKHNrYl9jb3coc2tiLCBzZWxmLT5oZWFkZXJfbGVuZ3RoKSkgewogCQkJSVJEQV9XQVJOSU5HKCIlcygpLCBmYWlsZWQgc2tiX2NvdygpICEhIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCX0KIAogCS8qIENoYW5nZSBzZXR0aW5nIGZvciBuZXh0IGZyYW1lICovCi0JaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIHNrYl9wdXNoKHNrYiwgVVNCX0lSREFfSEVBREVSKSwgMCk7CisKKwlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkgeworCQlfX3U4IHR1cm5hcm91bmRfdGltZTsKKwkJX191OCogZnJhbWU7CisJCXR1cm5hcm91bmRfdGltZSA9IGdldF90dXJuYXJvdW5kX3RpbWUoIHNrYiApOworCQlmcmFtZT0gc2tiX3B1c2goc2tiLCBzZWxmLT5oZWFkZXJfbGVuZ3RoKTsKKwkJaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIGZyYW1lLCAwKTsKKwkJZnJhbWVbMl0gPSB0dXJuYXJvdW5kX3RpbWU7CisJCWlmICgoc2tiLT5sZW4gIT0gMCkgJiYKKwkJICAgICgoc2tiLT5sZW4gJSAxMjgpID09IDApICYmCisJCSAgICAoKHNrYi0+bGVuICUgNTEyKSAhPSAwKSkgeworCQkJLyogYWRkIGV4dHJhIGJ5dGUgZm9yIHNwZWNpYWwgU2lnbWFUZWwgZmVhdHVyZSAqLworCQkJZnJhbWVbMV0gPSAxOworCQkJc2tiX3B1dChza2IsIDEpOworCQl9IGVsc2UgeworCQkJZnJhbWVbMV0gPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIHNrYl9wdXNoKHNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCksIDApOworCX0KIAogCS8qIEZJWE1FOiBNYWtlIG1hY3JvIG91dCBvZiB0aGlzIG9uZSAqLwogCSgoc3RydWN0IGlyZGFfc2tiX2NiICopc2tiLT5jYiktPmNvbnRleHQgPSBzZWxmOwpAQCAtNzk1LDcgKzg3Niw3IEBACiAJfQogCQogCS8qIENoZWNrIGZvciBlbXB0eSBmcmFtZXMgKi8KLQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IFVTQl9JUkRBX0hFQURFUikgeworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPD0gc2VsZi0+aGVhZGVyX2xlbmd0aCkgewogCQlJUkRBX1dBUk5JTkcoIiVzKCksIGVtcHR5IGZyYW1lIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTgxNiw3ICs4OTcsMTEgQEAKIAlkb2NvcHkgPSAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgSVJEQV9SWF9DT1BZX1RIUkVTSE9MRCk7CiAKIAkvKiBBbGxvY2F0ZSBhIG5ldyBza2IgKi8KLQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKGRvY29weSA/IHVyYi0+YWN0dWFsX2xlbmd0aCA6IElSREFfU0tCX01BWF9NVFUpOworCWlmICggc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgKQorCQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKGRvY29weSA/IHVyYi0+YWN0dWFsX2xlbmd0aCA6IElSREFfU0tCX01BWF9NVFUgKyBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIpOworCWVsc2UKKwkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOiBJUkRBX1NLQl9NQVhfTVRVKTsKKwogCWlmICghbmV3c2tiKSAgewogCQlzZWxmLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCS8qIFdlIGNvdWxkIGRlbGl2ZXIgdGhlIGN1cnJlbnQgc2tiLCBidXQgdGhpcyB3b3VsZCBzdGFsbApAQCAtODQ1LDcgKzkzMCw3IEBACiAKIAkvKiBTZXQgcHJvcGVyIGxlbmd0aCBvbiBza2IgJiByZW1vdmUgVVNCLUlyREEgaGVhZGVyICovCiAJc2tiX3B1dChkYXRhc2tiLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCXNrYl9wdWxsKGRhdGFza2IsIFVTQl9JUkRBX0hFQURFUik7CisJc2tiX3B1bGwoZGF0YXNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCk7CiAKIAkvKiBBc2sgdGhlIG5ldHdvcmtpbmcgbGF5ZXIgdG8gcXVldWUgdGhlIHBhY2tldCBmb3IgdGhlIElyREEgc3RhY2sgKi8KIAlkYXRhc2tiLT5kZXYgPSBzZWxmLT5uZXRkZXY7CkBAIC05MzcsNiArMTAyMiwxOTEgQEAKIAlyZXR1cm4gMDsgLyogRm9yIG5vdyAqLwogfQogCisKKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVJTSU9OX1NUUiAgICAgICAiUHJvZHVjdCBWZXJzaW9uOiAiCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0NPTVBPTkVOVF9WRVJTSU9OX1NUUiAgICAgIkNvbXBvbmVudCBWZXJzaW9uOiAiCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0RBVEFfVEFHX1NUUiAgICAgICAgICAgICAgIlNUTVAiCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0ZJTEVfVkVSU0lPTl9NQVhfT0ZGU0VUICAgNTEyICAgICAvKiB2ZXJzaW9uIGluZm8gaXMgYmVmb3JlIGhlcmUgKi8KKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUICAgICA1MTIgICAgIC8qIHBhdGNoIGltYWdlIHN0YXJ0cyBiZWZvcmUgaGVyZSAqLworI2RlZmluZSBTVElSNDIxWF9QQVRDSF9GSUxFX0VORF9PRl9IRUFERVJfVEFHICAgIDB4MUEgICAgLyogbWFya3MgZW5kIG9mIHBhdGNoIGZpbGUgaGVhZGVyIChQQyBET1MgdGV4dCBmaWxlIEVPRiBjaGFyYWN0ZXIpICovCisKKy8qCisgKiBLbm93biBmaXJtd2FyZSBwYXRjaGVzIGZvciBTVElSNDIxeCBkb25nbGVzCisgKi8KK3N0YXRpYyBjaGFyICogc3RpcjQyMXhfcGF0Y2hlc1tdID0geworCSI0MjEwMTAwMS5zYiIsCisJIjQyMTAxMDAyLnNiIiwKK307CisKK3N0YXRpYyBpbnQgc3RpcjQyMXhfZ2V0X3BhdGNoX3ZlcnNpb24odW5zaWduZWQgY2hhciAqIHBhdGNoLCBjb25zdCB1bnNpZ25lZCBsb25nIHBhdGNoX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB2ZXJzaW9uX21ham9yLCB2ZXJzaW9uX21pbm9yLCB2ZXJzaW9uX2J1aWxkOworCXVuc2lnbmVkIGNoYXIgKiB2ZXJzaW9uX3N0YXJ0OworCWludCB2ZXJzaW9uX2ZvdW5kID0gMDsKKworCWZvciAodmVyc2lvbl9vZmZzZXQgPSAwOworCSAgICAgdmVyc2lvbl9vZmZzZXQgPCBTVElSNDIxWF9QQVRDSF9GSUxFX0VORF9PRl9IRUFERVJfVEFHOworCSAgICAgdmVyc2lvbl9vZmZzZXQrKykgeworCQlpZiAoIW1lbWNtcChwYXRjaCArIHZlcnNpb25fb2Zmc2V0LAorCQkJICAgIFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIsCisJCQkgICAgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIpIC0gMSkpIHsKKwkJCQkgICAgdmVyc2lvbl9mb3VuZCA9IDE7CisJCQkJICAgIHZlcnNpb25fc3RhcnQgPSBwYXRjaCArCisJCQkJCSAgICB2ZXJzaW9uX29mZnNldCArCisJCQkJCSAgICBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVJTSU9OX1NUUikgLSAxOworCQkJCSAgICBicmVhazsKKwkJfQorCX0KKworCS8qIFdlIGNvdWxkbid0IGZpbmQgYSBwcm9kdWN0IHZlcnNpb24gb24gdGhpcyBwYXRjaCAqLworCWlmICghdmVyc2lvbl9mb3VuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBMZXQncyBjaGVjayBpZiB0aGUgcHJvZHVjdCB2ZXJzaW9uIGlzIGRvdHRlZCAqLworCWlmICh2ZXJzaW9uX3N0YXJ0WzNdICE9ICcuJyB8fAorCSAgICB2ZXJzaW9uX3N0YXJ0WzddICE9ICcuJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ZXJzaW9uX21ham9yID0gc2ltcGxlX3N0cnRvdWwodmVyc2lvbl9zdGFydCwgTlVMTCwgMTApOworCXZlcnNpb25fbWlub3IgPSBzaW1wbGVfc3RydG91bCh2ZXJzaW9uX3N0YXJ0ICsgNCwgTlVMTCwgMTApOworCXZlcnNpb25fYnVpbGQgPSBzaW1wbGVfc3RydG91bCh2ZXJzaW9uX3N0YXJ0ICsgOCwgTlVMTCwgMTApOworCisJSVJEQV9ERUJVRygyLCAiJXMoKSwgTWFqb3I6ICVsZCBNaW5vcjogJWxkIEJ1aWxkOiAlbGRcbiIsCisJCSAgIF9fRlVOQ1RJT05fXywKKwkJICAgdmVyc2lvbl9tYWpvciwgdmVyc2lvbl9taW5vciwgdmVyc2lvbl9idWlsZCk7CisKKwlyZXR1cm4gKCgodmVyc2lvbl9tYWpvcikgPDwgMTIpICsKKwkJKCh2ZXJzaW9uX21pbm9yKSA8PCA4KSArCisJCSgodmVyc2lvbl9idWlsZCAvIDEwKSA8PCA0KSArCisJCSh2ZXJzaW9uX2J1aWxkICUgMTApKTsKKworfQorCisKK3N0YXRpYyBpbnQgc3RpcjQyMXhfdXBsb2FkX3BhdGNoIChzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYsCisJCQkJICB1bnNpZ25lZCBjaGFyICogcGF0Y2gsCisJCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgcGF0Y2hfbGVuKQoreworICAgIGludCByZXR2YWwgPSAwOworICAgIGludCBhY3R1YWxfbGVuOworICAgIHVuc2lnbmVkIGludCBpID0gMCwgZG93bmxvYWRfYW1vdW50ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICogcGF0Y2hfY2h1bms7CisKKyAgICBJUkRBX0RFQlVHICgyLCAiJXMoKSwgVXBsb2FkaW5nIFNUSVI0MjF4IFBhdGNoXG4iLCBfX0ZVTkNUSU9OX18pOworCisgICAgcGF0Y2hfY2h1bmsgPSBremFsbG9jKFNUSVI0MjFYX01BWF9QQVRDSF9ET1dOTE9BRF9TSVpFLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAocGF0Y2hfY2h1bmsgPT0gTlVMTCkKKwkgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAvKiBicmVhayB1cCBwYXRjaCBpbnRvIDEwMjMtYnl0ZSBzZWN0aW9ucyAqLworICAgIGZvciAoaSA9IDA7IHJldHZhbCA+PSAwICYmIGkgPCBwYXRjaF9sZW47IGkgKz0gZG93bmxvYWRfYW1vdW50KSB7CisJICAgIGRvd25sb2FkX2Ftb3VudCA9IHBhdGNoX2xlbiAtIGk7CisJICAgIGlmIChkb3dubG9hZF9hbW91bnQgPiBTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRSkKKwkJICAgIGRvd25sb2FkX2Ftb3VudCA9IFNUSVI0MjFYX01BWF9QQVRDSF9ET1dOTE9BRF9TSVpFOworCisJICAgIC8qIGRvd25sb2FkIHRoZSBwYXRjaCBzZWN0aW9uICovCisJICAgIG1lbWNweShwYXRjaF9jaHVuaywgcGF0Y2ggKyBpLCBkb3dubG9hZF9hbW91bnQpOworCisJICAgIHJldHZhbCA9IHVzYl9idWxrX21zZyAoc2VsZi0+dXNiZGV2LAorCQkJCSAgIHVzYl9zbmRidWxrcGlwZSAoc2VsZi0+dXNiZGV2LAorCQkJCQkJICAgIHNlbGYtPmJ1bGtfb3V0X2VwKSwKKwkJCQkgICBwYXRjaF9jaHVuaywgZG93bmxvYWRfYW1vdW50LAorCQkJCSAgICZhY3R1YWxfbGVuLCBtc2Vjc190b19qaWZmaWVzICg1MDApKTsKKwkgICAgSVJEQV9ERUJVRyAoMiwgIiVzKCksIFNlbnQgJXUgYnl0ZXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJCWFjdHVhbF9sZW4pOworCSAgICBpZiAocmV0dmFsID09IDApCisJCSAgICBtZGVsYXkoMTApOworICAgIH0KKworICAgIGtmcmVlKHBhdGNoX2NodW5rKTsKKworICAgIGlmIChpICE9IHBhdGNoX2xlbikgeworCSAgICBJUkRBX0VSUk9SICgiJXMoKSwgUHVzaGVkICVkIGJ5dGVzICghPSBwYXRjaF9sZW4gKCVkKSlcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGksIHBhdGNoX2xlbik7CisJICAgIHJldHZhbCA9IC1FSU87CisgICAgfQorCisgICAgaWYgKHJldHZhbCA8IDApCisJICAgIC8qIHRvZG8gLSBtYXJrIGRldmljZSBhcyBub3QgcmVhZHkgKi8KKwkgICAgSVJEQV9FUlJPUiAoIiVzKCksIFNUSVI0MjF4IHBhdGNoIHVwbG9hZCBmYWlsZWQgKCVkKVxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIGludCBzdGlyNDIxeF9wYXRjaF9kZXZpY2Uoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKQoreworCXVuc2lnbmVkIGludCBpLCBwYXRjaF9mb3VuZCA9IDAsIGRhdGFfZm91bmQgPSAwLCBkYXRhX29mZnNldDsKKwlpbnQgcGF0Y2hfdmVyc2lvbiwgcmV0ID0gMDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RpcjQyMXhfcGF0Y2hlcyk7IGkrKykgeworCQlpZihyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgc3RpcjQyMXhfcGF0Y2hlc1tpXSwgJnNlbGYtPnVzYmRldi0+ZGV2KSAhPSAwKSB7CisJCQlJUkRBX0VSUk9SKCAiJXMoKSwgUGF0Y2ggJXMgaXMgbm90IGF2YWlsYWJsZVxuIiwgX19GVU5DVElPTl9fLCBzdGlyNDIxeF9wYXRjaGVzW2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKyAgICAgICAgICAgICAgICAvKiBXZSBmb3VuZCBhIHBhdGNoIGZyb20gdXNlcnNwYWNlICovCisJCXBhdGNoX3ZlcnNpb24gPSBzdGlyNDIxeF9nZXRfcGF0Y2hfdmVyc2lvbiAoZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKKworCQlpZiAocGF0Y2hfdmVyc2lvbiA8IDApIHsKKwkJCS8qIENvdWxkbid0IGZldGNoIGEgdmVyc2lvbiwgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBmaWxlICovCisJCQlJUkRBX0VSUk9SKCIlcygpLCB2ZXJzaW9uIHBhcnNpbmcgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0ID0gcGF0Y2hfdmVyc2lvbjsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocGF0Y2hfdmVyc2lvbiAhPSBzZWxmLT51c2JkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSB7CisJCQkvKiBQYXRjaCB2ZXJzaW9uIGFuZCBkZXZpY2UgZG9uJ3QgbWF0Y2ggKi8KKwkJCUlSREFfRVJST1IgKCIlcygpLCB3cm9uZyBwYXRjaCB2ZXJzaW9uICglZCA8LT4gJWQpXG4iLAorCQkJCSAgICBfX0ZVTkNUSU9OX18sCisJCQkJICAgIHBhdGNoX3ZlcnNpb24sIHNlbGYtPnVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBJZiB3ZSdyZSBoZXJlLCB3ZSd2ZSBmb3VuZCBhIGNvcnJlY3QgcGF0Y2ggKi8KKwkJcGF0Y2hfZm91bmQgPSAxOworCQlicmVhazsKKworCX0KKworCS8qIFdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBmaXJtd2FyZSwgbGV0J3MgbGVhdmUgKi8KKwlpZiAoIXBhdGNoX2ZvdW5kKQorCQlyZXR1cm4gcmV0OworCisJLyogVGhlIGFjdHVhbCBpbWFnZSBzdGFydHMgYWZ0ZXIgdGhlICJTVE1QIiBrZXl3b3JkICovCisJZm9yIChkYXRhX29mZnNldCA9IDA7IGRhdGFfb2Zmc2V0IDwgU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUOyBkYXRhX29mZnNldCsrKSB7CisJCWlmICghbWVtY21wKGZ3X2VudHJ5LT5kYXRhICsgZGF0YV9vZmZzZXQsCisJCQkgICAgU1RJUjQyMVhfUEFUQ0hfREFUQV9UQUdfU1RSLAorCQkJICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpKSkgeworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZm91bmQgcGF0Y2ggZGF0YSBmb3IgU1RJUjQyMXggYXQgb2Zmc2V0ICVkXG4iLAorCQkJCSAgIF9fRlVOQ1RJT05fXywgZGF0YV9vZmZzZXQpOworCQkJZGF0YV9mb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFdlIGNvdWxkbid0IGZpbmQgIlNUTVAiIGZyb20gdGhlIGhlYWRlciAqLworCWlmICghZGF0YV9mb3VuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBMZXQncyB1cGxvYWQgdGhlIHBhdGNoIHRvIHRoZSB0YXJnZXQgKi8KKwlyZXQgPSBzdGlyNDIxeF91cGxvYWRfcGF0Y2goc2VsZiwKKwkJCQkgICAgJmZ3X2VudHJ5LT5kYXRhW2RhdGFfb2Zmc2V0ICsgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVCldLAorCQkJCSAgICBmd19lbnRyeS0+c2l6ZSAtIChkYXRhX29mZnNldCArIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpKSk7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKworCXJldHVybiByZXQ7CisKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKiBJUkRBIERFVklDRSBDQUxMQkFDS1MgKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBNYWluIGNhbGxzIGZyb20gdGhlIElyREEvTmV0d29yayBzdWJzeXN0ZW0uCkBAIC05NzIsNiArMTI0MiwxMSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYoc2VsZi0+bmVlZHNwYXRjaCkgeworCQlJUkRBX1dBUk5JTkcoIiVzKCksIGRldmljZSBuZWVkcyBwYXRjaFxuIiwgX19GVU5DVElPTl9fKSA7CisJCXJldHVybiAtRUlPIDsKKwl9CisKIAkvKiBJbml0aWFsaXNlIGRlZmF1bHQgc3BlZWQgYW5kIHhib2ZzIHZhbHVlCiAJICogKElyTEFQIHdpbGwgY2hhbmdlIHRoYXQgc29vbikgKi8KIAlzZWxmLT5zcGVlZCA9IC0xOwpAQCAtMTA1MCw3ICsxMzI1LDcgQEAKIAlkZWxfdGltZXIoJnNlbGYtPnJ4X2RlZmVyX3RpbWVyKTsKIAogCS8qIERlYWxsb2NhdGUgYWxsIHRoZSBSeCBwYXRoIGJ1ZmZlcnMgKFVSQnMgYW5kIHNrYikgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBzZWxmLT5tYXhfcnhfdXJiOyBpKyspIHsKIAkJc3RydWN0IHVyYiAqdXJiID0gc2VsZi0+cnhfdXJiW2ldOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi0+Y29udGV4dDsKIAkJLyogQ2FuY2VsIHRoZSByZWNlaXZlIGNvbW1hbmQgKi8KQEAgLTE0MjYsOCArMTcwMSwyMiBAQAogCXNwaW5fbG9ja19pbml0KCZzZWxmLT5sb2NrKTsKIAlpbml0X3RpbWVyKCZzZWxmLT5yeF9kZWZlcl90aW1lcik7CiAKKwlzZWxmLT5jYXBhYmlsaXR5ID0gaWQtPmRyaXZlcl9pbmZvOworCXNlbGYtPm5lZWRzcGF0Y2ggPSAoKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwKSAhPSAwKSA7CisKIAkvKiBDcmVhdGUgYWxsIG9mIHRoZSBuZWVkZWQgdXJicyAqLwotCWZvciAoaSA9IDA7IGkgPCBJVV9NQVhfUlhfVVJCUzsgaSsrKSB7CisJaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwKSB7CisJCXNlbGYtPm1heF9yeF91cmIgPSBJVV9TSUdNQVRFTF9NQVhfUlhfVVJCUzsKKwkJc2VsZi0+aGVhZGVyX2xlbmd0aCA9IFVTQl9JUkRBX1NJR01BVEVMX0hFQURFUjsKKwl9IGVsc2UgeworCQlzZWxmLT5tYXhfcnhfdXJiID0gSVVfTUFYX1JYX1VSQlM7CisJCXNlbGYtPmhlYWRlcl9sZW5ndGggPSBVU0JfSVJEQV9IRUFERVI7CisJfQorCisJc2VsZi0+cnhfdXJiID0ga3phbGxvYyhzZWxmLT5tYXhfcnhfdXJiICogc2l6ZW9mKHN0cnVjdCB1cmIgKiksCisJCQkJR0ZQX0tFUk5FTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bWF4X3J4X3VyYjsgaSsrKSB7CiAJCXNlbGYtPnJ4X3VyYltpXSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2VsZi0+cnhfdXJiW2ldKSB7CiAJCQlnb3RvIGVycl9vdXRfMTsKQEAgLTE0NzksMTcgKzE3NjgsMjggQEAKIAkJZ290byBlcnJfb3V0XzM7CiAJfQogCisJc2VsZi0+dXNiZGV2ID0gZGV2OworCiAJLyogRmluZCBJckRBIGNsYXNzIGRlc2NyaXB0b3IgKi8KIAlpcmRhX2Rlc2MgPSBpcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2MoaW50Zik7CiAJcmV0ID0gLUVOT0RFVjsKIAlpZiAoaXJkYV9kZXNjID09IE5VTEwpCiAJCWdvdG8gZXJyX291dF8zOwogCisJaWYgKHNlbGYtPm5lZWRzcGF0Y2gpIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnIChzZWxmLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZSAoc2VsZi0+dXNiZGV2LCAwKSwKKwkJCQkgICAgICAgMHgwMiwgMHg0MCwgMCwgMCwgTlVMTCwgMCwgNTAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCUlSREFfREVCVUcgKDAsICJ1c2JfY29udHJvbF9tc2cgZmFpbGVkICVkXG4iLCByZXQpOworCQkJZ290byBlcnJfb3V0XzM7CisJCX0gZWxzZSB7CisJCQltZGVsYXkoMTApOworCQl9CisJfQorCiAJc2VsZi0+aXJkYV9kZXNjID0gIGlyZGFfZGVzYzsKIAlzZWxmLT5wcmVzZW50ID0gMTsKIAlzZWxmLT5uZXRvcGVuID0gMDsKLQlzZWxmLT5jYXBhYmlsaXR5ID0gaWQtPmRyaXZlcl9pbmZvOwotCXNlbGYtPnVzYmRldiA9IGRldjsKIAlzZWxmLT51c2JpbnRmID0gaW50ZjsKIAogCS8qIEFsbG9jYXRlIHRoZSBidWZmZXIgZm9yIHNwZWVkIGNoYW5nZXMgKi8KQEAgLTE1MDgsOCArMTgwOCwzMiBAQAogCiAJSVJEQV9NRVNTQUdFKCJJckRBOiBSZWdpc3RlcmVkIGRldmljZSAlc1xuIiwgbmV0LT5uYW1lKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHNlbGYpOworCisJaWYgKHNlbGYtPm5lZWRzcGF0Y2gpIHsKKwkJLyogTm93IHdlIGZldGNoIGFuZCB1cGxvYWQgdGhlIGZpcm13YXJlIHBhdGNoICovCisJCXJldCA9IHN0aXI0MjF4X3BhdGNoX2RldmljZShzZWxmKTsKKwkJc2VsZi0+bmVlZHNwYXRjaCA9IChyZXQgPCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50aygicGF0Y2hfZGV2aWNlIGZhaWxlZFxuIik7CisJCQlnb3RvIGVycl9vdXRfNTsKKwkJfQorCisJCS8qIHJlcGxhY2UgSXJEQSBjbGFzcyBkZXNjcmlwdG9yIHdpdGggd2hhdCBwYXRjaGVkIGRldmljZSBpcyBub3cgcmVwb3J0aW5nICovCisJCWlyZGFfZGVzYyA9IGlyZGFfdXNiX2ZpbmRfY2xhc3NfZGVzYyAoc2VsZi0+dXNiaW50Zik7CisJCWlmIChpcmRhX2Rlc2MgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX291dF81OworCQl9CisJCWlmIChzZWxmLT5pcmRhX2Rlc2MpCisJCQlrZnJlZSAoc2VsZi0+aXJkYV9kZXNjKTsKKwkJc2VsZi0+aXJkYV9kZXNjID0gaXJkYV9kZXNjOworCQlpcmRhX3VzYl9pbml0X3FvcyhzZWxmKTsKKwl9CisKIAlyZXR1cm4gMDsKIAorZXJyX291dF81OgorCXVucmVnaXN0ZXJfbmV0ZGV2KHNlbGYtPm5ldGRldik7CiBlcnJfb3V0XzQ6CiAJa2ZyZWUoc2VsZi0+c3BlZWRfYnVmZik7CiBlcnJfb3V0XzM6CkBAIC0xNTE4LDcgKzE4NDIsNyBAQAogZXJyX291dF8yOgogCXVzYl9mcmVlX3VyYihzZWxmLT50eF91cmIpOwogZXJyX291dF8xOgotCWZvciAoaSA9IDA7IGkgPCBJVV9NQVhfUlhfVVJCUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHNlbGYtPm1heF9yeF91cmI7IGkrKykgewogCQlpZiAoc2VsZi0+cnhfdXJiW2ldKQogCQkJdXNiX2ZyZWVfdXJiKHNlbGYtPnJ4X3VyYltpXSk7CiAJfQpAQCAtMTU3MSw3ICsxODk1LDcgQEAKIAkJLypuZXRpZl9kZXZpY2VfZGV0YWNoKHNlbGYtPm5ldGRldik7Ki8KIAkJbmV0aWZfc3RvcF9xdWV1ZShzZWxmLT5uZXRkZXYpOwogCQkvKiBTdG9wIGFsbCB0aGUgcmVjZWl2ZSBVUkJzLiBNdXN0IGJlIHN5bmNocm9ub3VzLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IHNlbGYtPm1heF9yeF91cmI7IGkrKykKIAkJCXVzYl9raWxsX3VyYihzZWxmLT5yeF91cmJbaV0pOwogCQkvKiBDYW5jZWwgVHggYW5kIHNwZWVkIFVSQi4KIAkJICogTWFrZSBzdXJlIGl0J3Mgc3luY2hyb25vdXMgdG8gYXZvaWQgcmFjZXMuICovCkBAIC0xNTg2LDggKzE5MTAsOSBAQAogCXNlbGYtPnVzYmludGYgPSBOVUxMOwogCiAJLyogQ2xlYW4gdXAgb3VyIHVyYnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bWF4X3J4X3VyYjsgaSsrKQogCQl1c2JfZnJlZV91cmIoc2VsZi0+cnhfdXJiW2ldKTsKKwlrZnJlZShzZWxmLT5yeF91cmIpOwogCS8qIENsZWFuIHVwIFR4IGFuZCBzcGVlZCBVUkIgKi8KIAl1c2JfZnJlZV91cmIoc2VsZi0+dHhfdXJiKTsKIAl1c2JfZnJlZV91cmIoc2VsZi0+c3BlZWRfdXJiKTsKQEAgLTE2NDgsNiArMTk3Myw2IEBACiAgKi8KIG1vZHVsZV9wYXJhbShxb3NfbXR0X2JpdHMsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHFvc19tdHRfYml0cywgIk1pbmltdW0gVHVybiBUaW1lIik7Ci1NT0RVTEVfQVVUSE9SKCJSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+LCBEYWcgQnJhdHRsaSA8ZGFnQGJyYXR0bGkubmV0PiBhbmQgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJckRBLVVTQiBEb25nbGUgRHJpdmVyIik7IAorTU9EVUxFX0FVVEhPUigiUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PiwgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4sIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4gYW5kIE5pY2sgRmVkY2hpayA8bmlja0BmZWRjaGlrLm9yZy51YT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSXJEQS1VU0IgRG9uZ2xlIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCmluZGV4IDQwMjZhZjQuLmQ4MzNkYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGaWxlbmFtZTogICAgICBpcmRhLXVzYi5oCi0gKiBWZXJzaW9uOiAgICAgICAwLjliCisgKiBWZXJzaW9uOiAgICAgICAwLjEwCiAgKiBEZXNjcmlwdGlvbjogICBJckRBLVVTQiBEcml2ZXIKICAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbCAKICAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+CkBAIC05LDYgKzksOSBAQAogICoJQ29weXJpZ2h0IChDKSAyMDAxLCBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CiAgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMCwgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4KICAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAxLCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNCwgU2lnbWFUZWwsIEluYy4gPGlycXVhbGl0eUBzaWdtYXRlbC5jb20+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNSwgTWlsYW4gQmVubyA8YmVub0Bwb2JveC5zaz4KKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDA2LCBOaWNrIEZFZGNoaWsgPG5pY2tAZmVkY2hpay5vcmcudWE+CiAgKiAgICAgICAgICAKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzEsNiArMzQsOSBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPiAgICAgIC8qIHN0cnVjdCBpcmxhcF9jYiAqLwogCisjZGVmaW5lIFBBVENIX0ZJTEVfU0laRV9NQVggICAgIDY1NTM2CisjZGVmaW5lIFBBVENIX0ZJTEVfU0laRV9NSU4gICAgIDgwCisKICNkZWZpbmUgUlhfQ09QWV9USFJFU0hPTEQgMjAwCiAjZGVmaW5lIElSREFfVVNCX01BWF9NVFUgMjA1MQogI2RlZmluZSBJUkRBX1VTQl9TUEVFRF9NVFUgNjQJCS8qIFdlaXJkLCBidXQgd29yayBsaWtlIHRoaXMgKi8KQEAgLTc5LDE1ICs4NSwxNiBAQAogLyogSW5ib3VuZCBoZWFkZXIgKi8KICNkZWZpbmUgTUVESUFfQlVTWSAgICAweDgwCiAKLSNkZWZpbmUgU1BFRURfMjQwMCAgICAweDAxCi0jZGVmaW5lIFNQRUVEXzk2MDAgICAgMHgwMgotI2RlZmluZSBTUEVFRF8xOTIwMCAgIDB4MDMKLSNkZWZpbmUgU1BFRURfMzg0MDAgICAweDA0Ci0jZGVmaW5lIFNQRUVEXzU3NjAwICAgMHgwNQotI2RlZmluZSBTUEVFRF8xMTUyMDAgIDB4MDYKLSNkZWZpbmUgU1BFRURfNTc2MDAwICAweDA3Ci0jZGVmaW5lIFNQRUVEXzExNTIwMDAgMHgwOAotI2RlZmluZSBTUEVFRF80MDAwMDAwIDB4MDkKKyNkZWZpbmUgU1BFRURfMjQwMCAgICAgMHgwMQorI2RlZmluZSBTUEVFRF85NjAwICAgICAweDAyCisjZGVmaW5lIFNQRUVEXzE5MjAwICAgIDB4MDMKKyNkZWZpbmUgU1BFRURfMzg0MDAgICAgMHgwNAorI2RlZmluZSBTUEVFRF81NzYwMCAgICAweDA1CisjZGVmaW5lIFNQRUVEXzExNTIwMCAgIDB4MDYKKyNkZWZpbmUgU1BFRURfNTc2MDAwICAgMHgwNworI2RlZmluZSBTUEVFRF8xMTUyMDAwICAweDA4CisjZGVmaW5lIFNQRUVEXzQwMDAwMDAgIDB4MDkKKyNkZWZpbmUgU1BFRURfMTYwMDAwMDAgMHgwYQogCiAvKiBCYXNpYyBjYXBhYmlsaXRpZXMgKi8KICNkZWZpbmUgSVVDX0RFRkFVTFQJMHgwMAkvKiBCYXNpYyBkZXZpY2UgY29tcGxpYW50IHdpdGggMS4wIHNwZWMgKi8KQEAgLTEwMCwxMSArMTA3LDE0IEBACiAjZGVmaW5lIElVQ19TTUFMTF9QS1QJMHgxMAkvKiBEZXZpY2UgZG9lc24ndCBiZWhhdmUgd2l0aCBiaWcgUnggcGFja2V0cyAqLwogI2RlZmluZSBJVUNfTUFYX1dJTkRPVwkweDIwCS8qIERldmljZSB1bmRlcmVzdGltYXRlIHRoZSBSeCB3aW5kb3cgKi8KICNkZWZpbmUgSVVDX01BWF9YQk9GUwkweDQwCS8qIERldmljZSBuZWVkIG1vcmUgeGJvZnMgdGhhbiBhZHZlcnRpc2VkICovCisjZGVmaW5lIElVQ19TVElSXzQyMTAJMHg4MAkvKiBTaWdtYVRlbCA0MjEwLzQyMjAvNDExNiBWRklSICovCiAKIC8qIFVTQiBjbGFzcyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBVU0JfSVJEQV9IRUFERVIgICAweDAxCi0jZGVmaW5lIFVTQl9DTEFTU19JUkRBICAgIDB4MDIgLyogVVNCX0NMQVNTX0FQUF9TUEVDIHN1YmNsYXNzICovIAotI2RlZmluZSBVU0JfRFRfSVJEQSAgICAgICAweDIxCisjZGVmaW5lIFVTQl9JUkRBX0hFQURFUiAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgVVNCX0NMQVNTX0lSREEgICAgICAgICAgICAgMHgwMiAvKiBVU0JfQ0xBU1NfQVBQX1NQRUMgc3ViY2xhc3MgKi8KKyNkZWZpbmUgVVNCX0RUX0lSREEgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIgICAweDAzCisjZGVmaW5lIElVX1NJR01BVEVMX01BWF9SWF9VUkJTICAgIChJVV9NQVhfQUNUSVZFX1JYX1VSQlMgKyBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIpCiAKIHN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgewogCV9fdTggIGJMZW5ndGg7CkBAIC0xMjMsNiArMTMzLDcgQEAKICAqICg2LjIuNSwgVVNCLUlyREEgY2xhc3Mgc3BlYyAxLjApICovCiAKICNkZWZpbmUgSVVfUkVRX0dFVF9DTEFTU19ERVNDCTB4MDYKKyNkZWZpbmUgU1RJUjQyMVhfTUFYX1BBVENIX0RPV05MT0FEX1NJWkUgMTAyMwogCiBzdHJ1Y3QgaXJkYV91c2JfY2IgewogCXN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgKmlyZGFfZGVzYzsKQEAgLTEzNiw3ICsxNDcsOCBAQAogCV9fdTE2IGJ1bGtfb3V0X210dTsJCS8qIE1heCBUeCBwYWNrZXQgc2l6ZSBpbiBieXRlcyAqLwogCV9fdTggIGJ1bGtfaW50X2VwOwkJLyogSW50ZXJydXB0IEVuZHBvaW50IGFzc2lnbm1lbnRzICovCiAKLQlzdHJ1Y3QgdXJiICpyeF91cmJbSVVfTUFYX1JYX1VSQlNdOwkvKiBVUkJzIHVzZWQgdG8gcmVjZWl2ZSBkYXRhIGZyYW1lcyAqLworCV9fdTggIG1heF9yeF91cmI7CisJc3RydWN0IHVyYiAqKnJ4X3VyYjsJICAgICAgICAvKiBVUkJzIHVzZWQgdG8gcmVjZWl2ZSBkYXRhIGZyYW1lcyAqLwogCXN0cnVjdCB1cmIgKmlkbGVfcnhfdXJiOwkvKiBQb2ludGVyIHRvIGlkbGUgVVJCIGluIFJ4IHBhdGggKi8KIAlzdHJ1Y3QgdXJiICp0eF91cmI7CQkvKiBVUkIgdXNlZCB0byBzZW5kIGRhdGEgZnJhbWVzICovCiAJc3RydWN0IHVyYiAqc3BlZWRfdXJiOwkJLyogVVJCIHVzZWQgdG8gc2VuZCBzcGVlZCBjb21tYW5kcyAqLwpAQCAtMTU3LDYgKzE2OSw5IEBACiAJX191MzIgc3BlZWQ7CQkJLyogQ3VycmVudCBzcGVlZCAqLwogCV9fczMyIG5ld19zcGVlZDsJCS8qIHNwZWVkIHdlIG5lZWQgdG8gc2V0ICovCiAKKwlfX3U4IGhlYWRlcl9sZW5ndGg7ICAgICAgICAgICAgIC8qIFVTQi1JckRBIGZyYW1lIGhlYWRlciBzaXplICovCisJaW50IG5lZWRzcGF0Y2g7ICAgICAgICAJCS8qIGRldmljZSBuZWVkcyBmaXJtd2FyZSBwYXRjaCAqLworCiAJc3RydWN0IHRpbWVyX2xpc3QgcnhfZGVmZXJfdGltZXI7CS8qIFdhaXQgZm9yIFJ4IGVycm9yIHRvIGNsZWFyICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwppbmRleCA2M2QzOGZiLi5mNTMwNjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKQEAgLTY5NSw4ICs2OTUsNyBAQAogCQkvKgogCQkgKiBXZSBtdXN0IG5vdCBiZSB0cmFuc21pdHRpbmcuLi4KIAkJICovCi0JCWlmIChzaS0+dHhza2IpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHNpLT50eHNrYik7CiAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Npci1kZXYuaCBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyLWRldi5oCmluZGV4IGY2OWZiNGMuLjlmYTI5NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyLWRldi5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyLWRldi5oCkBAIC0xNSwyMyArMTUsMTQgQEAKICNkZWZpbmUgSVJEQV9TSVJfSAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4JCS8vIGlvYnVmZl90CiAKLS8qIEZJWE1FOiB1bmlmeSBpcmRhX3JlcXVlc3Qgd2l0aCBzaXJfZnNtISAqLwotCi1zdHJ1Y3QgaXJkYV9yZXF1ZXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxoX3JlcXVlc3Q7Ci0JdW5zaWduZWQgbG9uZyBwZW5kaW5nOwotCXZvaWQgKCpmdW5jKSh2b2lkICopOwotCXZvaWQgKmRhdGE7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci19OwotCiBzdHJ1Y3Qgc2lyX2ZzbSB7CiAJc3RydWN0IHNlbWFwaG9yZQlzZW07Ci0Jc3RydWN0IGlyZGFfcmVxdWVzdAlycTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICB3b3JrOwogCXVuc2lnbmVkCQlzdGF0ZSwgc3Vic3RhdGU7CiAJaW50CQkJcGFyYW07CiAJaW50CQkJcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwppbmRleCBlYTdjOTQ2Li4zYjU4NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwpAQCAtMjMsNiArMjMsMjk4IEBACiAKICNpbmNsdWRlICJzaXItZGV2LmgiCiAKKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppcmRhX3Npcl93cTsKKworLyogU1RBVEUgTUFDSElORSAqLworCisvKiBzdWJzdGF0ZSBoYW5kbGVyIG9mIHRoZSBjb25maWctZnNtIHRvIGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgd2Ugd2FudAorICogdG8gd2FpdCBmb3IgdHJhbnNtaXQgY29tcGxldGlvbiBiZWZvcmUgY2hhbmdpbmcgdGhlIHBvcnQgY29uZmlndXJhdGlvbgorICovCisKK3N0YXRpYyBpbnQgc2lyZGV2X3R4X2NvbXBsZXRlX2ZzbShzdHJ1Y3Qgc2lyX2RldiAqZGV2KQoreworCXN0cnVjdCBzaXJfZnNtICpmc20gPSAmZGV2LT5mc207CisJdW5zaWduZWQgbmV4dF9zdGF0ZSwgZGVsYXk7CisJdW5zaWduZWQgYnl0ZXNfbGVmdDsKKworCWRvIHsKKwkJbmV4dF9zdGF0ZSA9IGZzbS0+c3Vic3RhdGU7CS8qIGRlZmF1bHQ6IHN0YXkgaW4gY3VycmVudCBzdWJzdGF0ZSAqLworCQlkZWxheSA9IDA7CisKKwkJc3dpdGNoKGZzbS0+c3Vic3RhdGUpIHsKKworCQljYXNlIFNJUkRFVl9TVEFURV9XQUlUX1hNSVQ6CisJCQlpZiAoZGV2LT5kcnYtPmNoYXJzX2luX2J1ZmZlcikKKwkJCQlieXRlc19sZWZ0ID0gZGV2LT5kcnYtPmNoYXJzX2luX2J1ZmZlcihkZXYpOworCQkJZWxzZQorCQkJCWJ5dGVzX2xlZnQgPSAwOworCQkJaWYgKCFieXRlc19sZWZ0KSB7CisJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9XQUlUX1VOVElMX1NFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChkZXYtPnNwZWVkID4gMTE1MjAwKQorCQkJCWRlbGF5ID0gKGJ5dGVzX2xlZnQqOCoxMDAwMCkgLyAoZGV2LT5zcGVlZC8xMDApOworCQkJZWxzZSBpZiAoZGV2LT5zcGVlZCA+IDApCisJCQkJZGVsYXkgPSAoYnl0ZXNfbGVmdCoxMCoxMDAwMCkgLyAoZGV2LT5zcGVlZC8xMDApOworCQkJZWxzZQorCQkJCWRlbGF5ID0gMDsKKwkJCS8qIGV4cGVjdGVkIGRlbGF5ICh1c2VjKSB1bnRpbCByZW1haW5pbmcgYnl0ZXMgYXJlIHNlbnQgKi8KKwkJCWlmIChkZWxheSA8IDEwMCkgeworCQkJCXVkZWxheShkZWxheSk7CisJCQkJZGVsYXkgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogc2xlZXAgc29tZSBsb25nZXIgZGVsYXkgKG1zZWMpICovCisJCQlkZWxheSA9IChkZWxheSs5OTkpIC8gMTAwMDsKKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX1dBSVRfVU5USUxfU0VOVDoKKwkJCS8qIGJsb2NrIHVudGlsIHVuZGVybGF5aW5nIGhhcmR3YXJlIGJ1ZmZlciBhcmUgZW1wdHkgKi8KKwkJCWlmIChkZXYtPmRydi0+d2FpdF91bnRpbF9zZW50KQorCQkJCWRldi0+ZHJ2LT53YWl0X3VudGlsX3NlbnQoZGV2KTsKKwkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfVFhfRE9ORTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX1RYX0RPTkU6CisJCQlyZXR1cm4gMDsKKworCQlkZWZhdWx0OgorCQkJSVJEQV9FUlJPUigiJXMgLSB1bmRlZmluZWQgc3RhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlmc20tPnN1YnN0YXRlID0gbmV4dF9zdGF0ZTsKKwl9IHdoaWxlIChkZWxheSA9PSAwKTsKKwlyZXR1cm4gZGVsYXk7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBzaXJkZXZfY29uZmlnX2ZzbQorICoKKyAqIFN0YXRlIG1hY2hpbmUgdG8gaGFuZGxlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkZXZpY2UgKGFuZCBhdHRhY2hlZCBkb25nbGUsIGlmIGFueSkuCisgKiBUaGlzIGhhbmRsZXIgaXMgc2NoZWR1bGVkIGZvciBleGVjdXRpb24gaW4ga0lyREFkIGNvbnRleHQsIHNvIHdlIGNhbiBzbGVlcC4KKyAqIGhvd2V2ZXIsIGtJckRBZCBpcyBzaGFyZWQgYnkgYWxsIHNpcl9kZXYgZGV2aWNlcyBzbyB3ZSBiZXR0ZXIgZG9uJ3Qgc2xlZXAgdGhlcmUgdG9vCisgKiBsb25nLiBJbnN0ZWFkLCBmb3IgbG9uZ2VyIGRlbGF5cyB3ZSBzdGFydCBhIHRpbWVyIHRvIHJlc2NoZWR1bGUgdXMgbGF0ZXIuCisgKiBPbiBlbnRyeSwgZnNtLT5zZW0gaXMgYWx3YXlzIGxvY2tlZCBhbmQgdGhlIG5ldGRldiB4bWl0IHF1ZXVlIHN0b3BwZWQuCisgKiBCb3RoIG11c3QgYmUgdW5sb2NrZWQvcmVzdGFydGVkIG9uIGNvbXBsZXRpb24gLSBidXQgb25seSBvbiBmaW5hbCBleGl0LgorICovCisKK3N0YXRpYyB2b2lkIHNpcmRldl9jb25maWdfZnNtKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNpcl9kZXYgKmRldiA9IGRhdGE7CisJc3RydWN0IHNpcl9mc20gKmZzbSA9ICZkZXYtPmZzbTsKKwlpbnQgbmV4dF9zdGF0ZTsKKwlpbnQgcmV0ID0gLTE7CisJdW5zaWduZWQgZGVsYXk7CisKKwlJUkRBX0RFQlVHKDIsICIlcygpLCA8JWxkPlxuIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzKTsKKworCWRvIHsKKwkJSVJEQV9ERUJVRygzLCAiJXMgLSBzdGF0ZT0weCUwNHggLyBzdWJzdGF0ZT0weCUwNHhcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGZzbS0+c3RhdGUsIGZzbS0+c3Vic3RhdGUpOworCisJCW5leHRfc3RhdGUgPSBmc20tPnN0YXRlOworCQlkZWxheSA9IDA7CisKKwkJc3dpdGNoKGZzbS0+c3RhdGUpIHsKKworCQljYXNlIFNJUkRFVl9TVEFURV9ET05HTEVfT1BFTjoKKwkJCWlmIChkZXYtPmRvbmdsZV9kcnYgIT0gTlVMTCkgeworCQkJCXJldCA9IHNpcmRldl9wdXRfZG9uZ2xlKGRldik7CisJCQkJaWYgKHJldCkgeworCQkJCQlmc20tPnJlc3VsdCA9IC1FSU5WQUw7CisJCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogSW5pdGlhbGl6ZSBkb25nbGUgKi8KKwkJCXJldCA9IHNpcmRldl9nZXRfZG9uZ2xlKGRldiwgZnNtLT5wYXJhbSk7CisJCQlpZiAocmV0KSB7CisJCQkJZnNtLT5yZXN1bHQgPSByZXQ7CisJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogRG9uZ2xlcyBhcmUgcG93ZXJlZCB0aHJvdWdoIHRoZSBtb2RlbSBjb250cm9sIGxpbmVzIHdoaWNoCisJCQkgKiB3ZXJlIGp1c3Qgc2V0IGR1cmluZyBvcGVuLiBCZWZvcmUgcmVzZXR0aW5nLCBsZXQncyB3YWl0IGZvcgorCQkJICogdGhlIHBvd2VyIHRvIHN0YWJpbGl6ZS4gVGhpcyBpcyB3aGF0IHNvbWUgZG9uZ2xlIGRyaXZlcnMgZGlkCisJCQkgKiBpbiBvcGVuIGJlZm9yZSwgd2hpbGUgb3RoZXJzIGRpZG4ndCAtIHNob3VsZCBiZSBzYWZlIGFueXdheS4KKwkJCSAqLworCisJCQlkZWxheSA9IDUwOworCQkJZnNtLT5zdWJzdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ7CisJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9SRVNFVDsKKworCQkJZnNtLT5wYXJhbSA9IDk2MDA7CisKKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX0RPTkdMRV9DTE9TRToKKwkJCS8qIHNob3VsZG4ndCB3ZSBqdXN0IHRyZWF0IHRoaXMgYXMgc3VjY2Vzcz0/ICovCisJCQlpZiAoZGV2LT5kb25nbGVfZHJ2ID09IE5VTEwpIHsKKwkJCQlmc20tPnJlc3VsdCA9IC1FSU5WQUw7CisJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcmV0ID0gc2lyZGV2X3B1dF9kb25nbGUoZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlmc20tPnJlc3VsdCA9IHJldDsKKwkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0VSUk9SOworCQkJCWJyZWFrOworCQkJfQorCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05FOworCQkJYnJlYWs7CisKKwkJY2FzZSBTSVJERVZfU1RBVEVfU0VUX0RUUl9SVFM6CisJCQlyZXQgPSBzaXJkZXZfc2V0X2R0cl9ydHMoZGV2LAorCQkJCShmc20tPnBhcmFtJjB4MDIpID8gVFJVRSA6IEZBTFNFLAorCQkJCShmc20tPnBhcmFtJjB4MDEpID8gVFJVRSA6IEZBTFNFKTsKKwkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9ORTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX1NFVF9TUEVFRDoKKwkJCWZzbS0+c3Vic3RhdGUgPSBTSVJERVZfU1RBVEVfV0FJVF9YTUlUOworCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfQ0hFQ0s7CisJCQlicmVhazsKKworCQljYXNlIFNJUkRFVl9TVEFURV9ET05HTEVfQ0hFQ0s6CisJCQlyZXQgPSBzaXJkZXZfdHhfY29tcGxldGVfZnNtKGRldik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWZzbS0+cmVzdWx0ID0gcmV0OworCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKGRlbGF5PXJldCkgIT0gMCkKKwkJCQlicmVhazsKKworCQkJaWYgKGRldi0+ZG9uZ2xlX2RydikgeworCQkJCWZzbS0+c3Vic3RhdGUgPSBTSVJERVZfU1RBVEVfRE9OR0xFX1JFU0VUOworCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9OR0xFX1JFU0VUOworCQkJfQorCQkJZWxzZSB7CisJCQkJZGV2LT5zcGVlZCA9IGZzbS0+cGFyYW07CisJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9QT1JUX1NQRUVEOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTSVJERVZfU1RBVEVfRE9OR0xFX1JFU0VUOgorCQkJaWYgKGRldi0+ZG9uZ2xlX2Rydi0+cmVzZXQpIHsKKwkJCQlyZXQgPSBkZXYtPmRvbmdsZV9kcnYtPnJlc2V0KGRldik7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJZnNtLT5yZXN1bHQgPSByZXQ7CisJCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCQlyZXQgPSAwOworCQkJaWYgKChkZWxheT1yZXQpID09IDApIHsKKwkJCQkvKiBzZXQgc2VyaWFsIHBvcnQgYWNjb3JkaW5nIHRvIGRvbmdsZSBkZWZhdWx0IHNwZWVkICovCisJCQkJaWYgKGRldi0+ZHJ2LT5zZXRfc3BlZWQpCisJCQkJCWRldi0+ZHJ2LT5zZXRfc3BlZWQoZGV2LCBkZXYtPnNwZWVkKTsKKwkJCQlmc20tPnN1YnN0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDsKKwkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDoKKwkJCWlmIChkZXYtPmRvbmdsZV9kcnYtPnJlc2V0KSB7CisJCQkJcmV0ID0gZGV2LT5kb25nbGVfZHJ2LT5zZXRfc3BlZWQoZGV2LCBmc20tPnBhcmFtKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQlmc20tPnJlc3VsdCA9IHJldDsKKwkJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJCXJldCA9IDA7CisJCQlpZiAoKGRlbGF5PXJldCkgPT0gMCkKKwkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX1BPUlRfU1BFRUQ7CisJCQlicmVhazsKKworCQljYXNlIFNJUkRFVl9TVEFURV9QT1JUX1NQRUVEOgorCQkJLyogRmluYWxseSB3ZSBhcmUgcmVhZHkgdG8gY2hhbmdlIHRoZSBzZXJpYWwgcG9ydCBzcGVlZCAqLworCQkJaWYgKGRldi0+ZHJ2LT5zZXRfc3BlZWQpCisJCQkJZGV2LT5kcnYtPnNldF9zcGVlZChkZXYsIGRldi0+c3BlZWQpOworCQkJZGV2LT5uZXdfc3BlZWQgPSAwOworCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05FOworCQkJYnJlYWs7CisKKwkJY2FzZSBTSVJERVZfU1RBVEVfRE9ORToKKwkJCS8qIFNpZ25hbCBuZXR3b3JrIGxheWVyIHNvIGl0IGNhbiBzZW5kIG1vcmUgZnJhbWVzICovCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldi0+bmV0ZGV2KTsKKwkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfQ09NUExFVEU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJSVJEQV9FUlJPUigiJXMgLSB1bmRlZmluZWQgc3RhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlmc20tPnJlc3VsdCA9IC1FSU5WQUw7CisJCQkvKiBmYWxsIHRocnUgKi8KKworCQljYXNlIFNJUkRFVl9TVEFURV9FUlJPUjoKKwkJCUlSREFfRVJST1IoIiVzIC0gZXJyb3I6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGZzbS0+cmVzdWx0KTsKKworI2lmIDAJLyogZG9uJ3QgZW5hYmxlIHRoaXMgYmVmb3JlIHdlIGhhdmUgbmV0ZGV2LT50eF90aW1lb3V0IHRvIHJlY292ZXIgKi8KKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2LT5uZXRkZXYpOworI2Vsc2UKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2LT5uZXRkZXYpOworI2VuZGlmCisJCQkvKiBmYWxsIHRocnUgKi8KKworCQljYXNlIFNJUkRFVl9TVEFURV9DT01QTEVURToKKwkJCS8qIGNvbmZpZyBjaGFuZ2UgZmluaXNoZWQsIHNvIHdlIGFyZSBub3QgYnVzeSBhbnkgbG9uZ2VyICovCisJCQlzaXJkZXZfZW5hYmxlX3J4KGRldik7CisJCQl1cCgmZnNtLT5zZW0pOworCQkJcmV0dXJuOworCQl9CisJCWZzbS0+c3RhdGUgPSBuZXh0X3N0YXRlOworCX0gd2hpbGUoIWRlbGF5KTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhpcmRhX3Npcl93cSwgJmZzbS0+d29yaywgbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworfQorCisvKiBzY2hlZHVsZSBzb21lIGRldmljZSBjb25maWd1cmF0aW9uIHRhc2sgZm9yIGV4ZWN1dGlvbiBieSBrSXJEQWQKKyAqIG9uIGJlaGFsZiBvZiB0aGUgYWJvdmUgc3RhdGUgbWFjaGluZS4KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIG9yIGludGVycnVwdC90YXNrbGV0IGNvbnRleHQuCisgKi8KKworaW50IHNpcmRldl9zY2hlZHVsZV9yZXF1ZXN0KHN0cnVjdCBzaXJfZGV2ICpkZXYsIGludCBpbml0aWFsX3N0YXRlLCB1bnNpZ25lZCBwYXJhbSkKK3sKKwlzdHJ1Y3Qgc2lyX2ZzbSAqZnNtID0gJmRldi0+ZnNtOworCisJSVJEQV9ERUJVRygyLCAiJXMgLSBzdGF0ZT0weCUwNHggLyBwYXJhbT0ldVxuIiwgX19GVU5DVElPTl9fLCBpbml0aWFsX3N0YXRlLCBwYXJhbSk7CisKKwlpZiAoZG93bl90cnlsb2NrKCZmc20tPnNlbSkpIHsKKwkJaWYgKGluX2ludGVycnVwdCgpICB8fCAgaW5fYXRvbWljKCkgIHx8ICBpcnFzX2Rpc2FibGVkKCkpIHsKKwkJCUlSREFfREVCVUcoMSwgIiVzKCksIHN0YXRlIG1hY2hpbmUgYnVzeSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVXT1VMREJMT0NLOworCQl9IGVsc2UKKwkJCWRvd24oJmZzbS0+c2VtKTsKKwl9CisKKwlpZiAoZnNtLT5zdGF0ZSA9PSBTSVJERVZfU1RBVEVfREVBRCkgeworCQkvKiByYWNlIHdpdGggc2lyZGV2X2Nsb3NlIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJSVJEQV9FUlJPUigiJXMoKSwgaW5zdGFuY2Ugc3RhbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJdXAoJmZzbS0+c2VtKTsKKwkJcmV0dXJuIC1FU1RBTEU7CQkvKiBvciBiZXR0ZXIgRVBJUEU/ICovCisJfQorCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYtPm5ldGRldik7CisJYXRvbWljX3NldCgmZGV2LT5lbmFibGVfcngsIDApOworCisJZnNtLT5zdGF0ZSA9IGluaXRpYWxfc3RhdGU7CisJZnNtLT5wYXJhbSA9IHBhcmFtOworCWZzbS0+cmVzdWx0ID0gMDsKKworCUlOSVRfV09SSygmZnNtLT53b3JrLCBzaXJkZXZfY29uZmlnX2ZzbSwgZGV2KTsKKwlxdWV1ZV93b3JrKGlyZGFfc2lyX3dxLCAmZnNtLT53b3JrKTsKKwlyZXR1cm4gMDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB2b2lkIHNpcmRldl9lbmFibGVfcngoc3RydWN0IHNpcl9kZXYgKmRldikKQEAgLTYxOSwxMCArOTExLDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT50eF9sb2NrKTsKIAlpbml0X01VVEVYKCZkZXYtPmZzbS5zZW0pOwogCi0JSU5JVF9MSVNUX0hFQUQoJmRldi0+ZnNtLnJxLmxoX3JlcXVlc3QpOwotCWRldi0+ZnNtLnJxLnBlbmRpbmcgPSAwOwotCWluaXRfdGltZXIoJmRldi0+ZnNtLnJxLnRpbWVyKTsKLQogCWRldi0+ZHJ2ID0gZHJ2OwogCWRldi0+bmV0ZGV2ID0gbmRldjsKIApAQCAtNjgyLDMgKzk3MCwyMiBAQAogfQogRVhQT1JUX1NZTUJPTChzaXJkZXZfcHV0X2luc3RhbmNlKTsKIAorc3RhdGljIGludCBfX2luaXQgc2lyX3dxX2luaXQodm9pZCkKK3sKKwlpcmRhX3Npcl93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJpcmRhX3Npcl93cSIpOworCWlmICghaXJkYV9zaXJfd3EpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2lyX3dxX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShpcmRhX3Npcl93cSk7Cit9CisKK21vZHVsZV9pbml0KHNpcl93cV9pbml0KTsKK21vZHVsZV9leGl0KHNpcl93cV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFydGluIERpZWhsIDxpbmZvQG1kaWVobC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSXJEQSBTSVIgY29yZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfa3RocmVhZC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zaXJfa3RocmVhZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzkwNGQ2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2t0aHJlYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDUwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJc2lyX2t0aHJlYWQuYzoJCWRlZGljYXRlZCB0aHJlYWQgdG8gcHJvY2VzcyBzY2hlZHVsZWQKLSAqCQkJCXNpciBkZXZpY2Ugc2V0dXAgcmVxdWVzdHMKLSAqCi0gKglDb3B5cmlnaHQgKGMpIDIwMDIgTWFydGluIERpZWhsCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAotICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCi0gKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgIAotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgotCi0jaW5jbHVkZSAic2lyLWRldi5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBrSXJEQWQga2VybmVsIHRocmVhZCBhbmQgY29uZmlnIHN0YXRlIG1hY2hpbmUKLSAqCi0gKi8KLQotc3RydWN0IGlyZGFfcmVxdWVzdF9xdWV1ZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCByZXF1ZXN0X2xpc3Q7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXRhc2tfdCAqdGhyZWFkOwotCXN0cnVjdCBjb21wbGV0aW9uIGV4aXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qga2ljaywgZG9uZTsKLQlhdG9taWNfdCBudW1fcGVuZGluZzsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJkYV9yZXF1ZXN0X3F1ZXVlIGlyZGFfcnFfcXVldWU7Ci0KLXN0YXRpYyBpbnQgaXJkYV9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBpcmRhX3JlcXVlc3QgKnJxKQotewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJnJxLT5wZW5kaW5nKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJkYV9ycV9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJnJxLT5saF9yZXF1ZXN0LCAmaXJkYV9ycV9xdWV1ZS5yZXF1ZXN0X2xpc3QpOwotCQl3YWtlX3VwKCZpcmRhX3JxX3F1ZXVlLmtpY2spOwotCQlhdG9taWNfaW5jKCZpcmRhX3JxX3F1ZXVlLm51bV9wZW5kaW5nKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJkYV9ycV9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IDE7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyZGFfcmVxdWVzdF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGlyZGFfcmVxdWVzdCAqcnEgPSAoc3RydWN0IGlyZGFfcmVxdWVzdCAqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJkYV9ycV9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcnEtPmxoX3JlcXVlc3QsICZpcmRhX3JxX3F1ZXVlLnJlcXVlc3RfbGlzdCk7Ci0Jd2FrZV91cCgmaXJkYV9ycV9xdWV1ZS5raWNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcmRhX3JxX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBpcmRhX3F1ZXVlX2RlbGF5ZWRfcmVxdWVzdChzdHJ1Y3QgaXJkYV9yZXF1ZXN0ICpycSwgdW5zaWduZWQgbG9uZyBkZWxheSkKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSAmcnEtPnRpbWVyOwotCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZycS0+cGVuZGluZykpIHsKLQkJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgZGVsYXk7Ci0JCXRpbWVyLT5mdW5jdGlvbiA9IGlyZGFfcmVxdWVzdF90aW1lcjsKLQkJdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZylycTsKLQkJYXRvbWljX2luYygmaXJkYV9ycV9xdWV1ZS5udW1fcGVuZGluZyk7Ci0JCWFkZF90aW1lcih0aW1lcik7Ci0JCXJldCA9IDE7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1bl9pcmRhX3F1ZXVlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKnRtcDsKLQlzdHJ1Y3QgaXJkYV9yZXF1ZXN0ICpycTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpcmRhX3JxX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJmlyZGFfcnFfcXVldWUucmVxdWVzdF9saXN0KSB7Ci0JCXJxID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGlyZGFfcmVxdWVzdCwgbGhfcmVxdWVzdCk7Ci0JCWxpc3RfZGVsX2luaXQoZW50cnkpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcmRhX3JxX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQotCQljbGVhcl9iaXQoMCwgJnJxLT5wZW5kaW5nKTsKLQkJcnEtPmZ1bmMocnEtPmRhdGEpOwotCi0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpcmRhX3JxX3F1ZXVlLm51bV9wZW5kaW5nKSkKLQkJCXdha2VfdXAoJmlyZGFfcnFfcXVldWUuZG9uZSk7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlyZGFfcnFfcXVldWUubG9jaywgZmxhZ3MpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcmRhX3JxX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLX0JCQotCi1zdGF0aWMgaW50IGlyZGFfdGhyZWFkKHZvaWQgKnN0YXJ0dXApCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlkYWVtb25pemUoImtJckRBZCIpOwotCi0JaXJkYV9ycV9xdWV1ZS50aHJlYWQgPSBjdXJyZW50OwotCi0JY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopc3RhcnR1cCk7Ci0KLQl3aGlsZSAoaXJkYV9ycV9xdWV1ZS50aHJlYWQgIT0gTlVMTCkgewotCi0JCS8qIFdlIHVzZSBUQVNLX0lOVEVSUlVQVElCTEUsIHJhdGhlciB0aGFuCi0JCSAqIFRBU0tfVU5JTlRFUlJVUFRJQkxFLiAgQW5kcmV3IE1vcnRvbiBtYWRlIHRoaXMKLQkJICogY2hhbmdlIDsgaGUgdG9sZCBtZSB0aGF0IGl0IGlzIHNhZmUsIGJlY2F1c2UgInNpZ25hbAotCQkgKiBibG9ja2luZyBpcyBub3cgaGFuZGxlZCBpbiBkYWVtb25pemUoKSIsIGhlIGFkZGVkCi0JCSAqIHRoYXQgdGhlIHByb2JsZW0gaXMgdGhhdCAidW5pbnRlcnJ1cHRpYmxlIHNsZWVwCi0JCSAqIGNvbnRyaWJ1dGVzIHRvIGxvYWQgYXZlcmFnZSIsIG1ha2luZyB1c2VyIHdvcnJ5LgotCQkgKiBKZWFuIElJICovCi0JCXNldF90YXNrX3N0YXRlKGN1cnJlbnQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWFkZF93YWl0X3F1ZXVlKCZpcmRhX3JxX3F1ZXVlLmtpY2ssICZ3YWl0KTsKLQkJaWYgKGxpc3RfZW1wdHkoJmlyZGFfcnFfcXVldWUucmVxdWVzdF9saXN0KSkKLQkJCXNjaGVkdWxlKCk7Ci0JCWVsc2UKLQkJCV9fc2V0X3Rhc2tfc3RhdGUoY3VycmVudCwgVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJmlyZGFfcnFfcXVldWUua2ljaywgJndhaXQpOwotCi0JCS8qIG1ha2Ugc3dzdXNwIGhhcHB5IHdpdGggb3VyIHRocmVhZCAqLwotCQl0cnlfdG9fZnJlZXplKCk7Ci0KLQkJcnVuX2lyZGFfcXVldWUoKTsKLQl9Ci0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMzUpCi0JcmVwYXJlbnRfdG9faW5pdCgpOwotI2VuZGlmCi0JY29tcGxldGVfYW5kX2V4aXQoJmlyZGFfcnFfcXVldWUuZXhpdCwgMCk7Ci0JLyogbmV2ZXIgcmVhY2hlZCAqLwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGZsdXNoX2lyZGFfcXVldWUodm9pZCkKLXsKLQlpZiAoYXRvbWljX3JlYWQoJmlyZGFfcnFfcXVldWUubnVtX3BlbmRpbmcpKSB7Ci0KLQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZpcmRhX3JxX3F1ZXVlLnJlcXVlc3RfbGlzdCkpCi0JCQlydW5faXJkYV9xdWV1ZSgpOwotCi0JCXNldF90YXNrX3N0YXRlKGN1cnJlbnQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJYWRkX3dhaXRfcXVldWUoJmlyZGFfcnFfcXVldWUuZG9uZSwgJndhaXQpOwotCQlpZiAoYXRvbWljX3JlYWQoJmlyZGFfcnFfcXVldWUubnVtX3BlbmRpbmcpKQotCQkJc2NoZWR1bGUoKTsKLQkJZWxzZQotCQkJX19zZXRfdGFza19zdGF0ZShjdXJyZW50LCBUQVNLX1JVTk5JTkcpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSgmaXJkYV9ycV9xdWV1ZS5kb25lLCAmd2FpdCk7Ci0JfQotfQotCi0vKiBzdWJzdGF0ZSBoYW5kbGVyIG9mIHRoZSBjb25maWctZnNtIHRvIGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgd2Ugd2FudAotICogdG8gd2FpdCBmb3IgdHJhbnNtaXQgY29tcGxldGlvbiBiZWZvcmUgY2hhbmdpbmcgdGhlIHBvcnQgY29uZmlndXJhdGlvbgotICovCi0KLXN0YXRpYyBpbnQgaXJkYV90eF9jb21wbGV0ZV9mc20oc3RydWN0IHNpcl9kZXYgKmRldikKLXsKLQlzdHJ1Y3Qgc2lyX2ZzbSAqZnNtID0gJmRldi0+ZnNtOwotCXVuc2lnbmVkIG5leHRfc3RhdGUsIGRlbGF5OwotCXVuc2lnbmVkIGJ5dGVzX2xlZnQ7Ci0KLQlkbyB7Ci0JCW5leHRfc3RhdGUgPSBmc20tPnN1YnN0YXRlOwkvKiBkZWZhdWx0OiBzdGF5IGluIGN1cnJlbnQgc3Vic3RhdGUgKi8KLQkJZGVsYXkgPSAwOwotCi0JCXN3aXRjaChmc20tPnN1YnN0YXRlKSB7Ci0KLQkJY2FzZSBTSVJERVZfU1RBVEVfV0FJVF9YTUlUOgotCQkJaWYgKGRldi0+ZHJ2LT5jaGFyc19pbl9idWZmZXIpCi0JCQkJYnl0ZXNfbGVmdCA9IGRldi0+ZHJ2LT5jaGFyc19pbl9idWZmZXIoZGV2KTsKLQkJCWVsc2UKLQkJCQlieXRlc19sZWZ0ID0gMDsKLQkJCWlmICghYnl0ZXNfbGVmdCkgewotCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfV0FJVF9VTlRJTF9TRU5UOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAoZGV2LT5zcGVlZCA+IDExNTIwMCkKLQkJCQlkZWxheSA9IChieXRlc19sZWZ0KjgqMTAwMDApIC8gKGRldi0+c3BlZWQvMTAwKTsKLQkJCWVsc2UgaWYgKGRldi0+c3BlZWQgPiAwKQotCQkJCWRlbGF5ID0gKGJ5dGVzX2xlZnQqMTAqMTAwMDApIC8gKGRldi0+c3BlZWQvMTAwKTsKLQkJCWVsc2UKLQkJCQlkZWxheSA9IDA7Ci0JCQkvKiBleHBlY3RlZCBkZWxheSAodXNlYykgdW50aWwgcmVtYWluaW5nIGJ5dGVzIGFyZSBzZW50ICovCi0JCQlpZiAoZGVsYXkgPCAxMDApIHsKLQkJCQl1ZGVsYXkoZGVsYXkpOwotCQkJCWRlbGF5ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIHNsZWVwIHNvbWUgbG9uZ2VyIGRlbGF5IChtc2VjKSAqLwotCQkJZGVsYXkgPSAoZGVsYXkrOTk5KSAvIDEwMDA7Ci0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9XQUlUX1VOVElMX1NFTlQ6Ci0JCQkvKiBibG9jayB1bnRpbCB1bmRlcmxheWluZyBoYXJkd2FyZSBidWZmZXIgYXJlIGVtcHR5ICovCi0JCQlpZiAoZGV2LT5kcnYtPndhaXRfdW50aWxfc2VudCkKLQkJCQlkZXYtPmRydi0+d2FpdF91bnRpbF9zZW50KGRldik7Ci0JCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX1RYX0RPTkU7Ci0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9UWF9ET05FOgotCQkJcmV0dXJuIDA7Ci0KLQkJZGVmYXVsdDoKLQkJCUlSREFfRVJST1IoIiVzIC0gdW5kZWZpbmVkIHN0YXRlXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZnNtLT5zdWJzdGF0ZSA9IG5leHRfc3RhdGU7Ci0JfSB3aGlsZSAoZGVsYXkgPT0gMCk7Ci0JcmV0dXJuIGRlbGF5OwotfQotCi0vKgotICogRnVuY3Rpb24gaXJkYV9jb25maWdfZnNtCi0gKgotICogU3RhdGUgbWFjaGluZSB0byBoYW5kbGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZSAoYW5kIGF0dGFjaGVkIGRvbmdsZSwgaWYgYW55KS4KLSAqIFRoaXMgaGFuZGxlciBpcyBzY2hlZHVsZWQgZm9yIGV4ZWN1dGlvbiBpbiBrSXJEQWQgY29udGV4dCwgc28gd2UgY2FuIHNsZWVwLgotICogaG93ZXZlciwga0lyREFkIGlzIHNoYXJlZCBieSBhbGwgc2lyX2RldiBkZXZpY2VzIHNvIHdlIGJldHRlciBkb24ndCBzbGVlcCB0aGVyZSB0b28KLSAqIGxvbmcuIEluc3RlYWQsIGZvciBsb25nZXIgZGVsYXlzIHdlIHN0YXJ0IGEgdGltZXIgdG8gcmVzY2hlZHVsZSB1cyBsYXRlci4KLSAqIE9uIGVudHJ5LCBmc20tPnNlbSBpcyBhbHdheXMgbG9ja2VkIGFuZCB0aGUgbmV0ZGV2IHhtaXQgcXVldWUgc3RvcHBlZC4KLSAqIEJvdGggbXVzdCBiZSB1bmxvY2tlZC9yZXN0YXJ0ZWQgb24gY29tcGxldGlvbiAtIGJ1dCBvbmx5IG9uIGZpbmFsIGV4aXQuCi0gKi8KLQotc3RhdGljIHZvaWQgaXJkYV9jb25maWdfZnNtKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHNpcl9kZXYgKmRldiA9IGRhdGE7Ci0Jc3RydWN0IHNpcl9mc20gKmZzbSA9ICZkZXYtPmZzbTsKLQlpbnQgbmV4dF9zdGF0ZTsKLQlpbnQgcmV0ID0gLTE7Ci0JdW5zaWduZWQgZGVsYXk7Ci0KLQlJUkRBX0RFQlVHKDIsICIlcygpLCA8JWxkPlxuIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzKTsgCi0KLQlkbyB7Ci0JCUlSREFfREVCVUcoMywgIiVzIC0gc3RhdGU9MHglMDR4IC8gc3Vic3RhdGU9MHglMDR4XG4iLAotCQkJX19GVU5DVElPTl9fLCBmc20tPnN0YXRlLCBmc20tPnN1YnN0YXRlKTsKLQotCQluZXh0X3N0YXRlID0gZnNtLT5zdGF0ZTsKLQkJZGVsYXkgPSAwOwotCi0JCXN3aXRjaChmc20tPnN0YXRlKSB7Ci0KLQkJY2FzZSBTSVJERVZfU1RBVEVfRE9OR0xFX09QRU46Ci0JCQlpZiAoZGV2LT5kb25nbGVfZHJ2ICE9IE5VTEwpIHsKLQkJCQlyZXQgPSBzaXJkZXZfcHV0X2RvbmdsZShkZXYpOwotCQkJCWlmIChyZXQpIHsKLQkJCQkJZnNtLT5yZXN1bHQgPSAtRUlOVkFMOwotCQkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0VSUk9SOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIEluaXRpYWxpemUgZG9uZ2xlICovCi0JCQlyZXQgPSBzaXJkZXZfZ2V0X2RvbmdsZShkZXYsIGZzbS0+cGFyYW0pOwotCQkJaWYgKHJldCkgewotCQkJCWZzbS0+cmVzdWx0ID0gcmV0OwotCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIERvbmdsZXMgYXJlIHBvd2VyZWQgdGhyb3VnaCB0aGUgbW9kZW0gY29udHJvbCBsaW5lcyB3aGljaAotCQkJICogd2VyZSBqdXN0IHNldCBkdXJpbmcgb3Blbi4gQmVmb3JlIHJlc2V0dGluZywgbGV0J3Mgd2FpdCBmb3IKLQkJCSAqIHRoZSBwb3dlciB0byBzdGFiaWxpemUuIFRoaXMgaXMgd2hhdCBzb21lIGRvbmdsZSBkcml2ZXJzIGRpZAotCQkJICogaW4gb3BlbiBiZWZvcmUsIHdoaWxlIG90aGVycyBkaWRuJ3QgLSBzaG91bGQgYmUgc2FmZSBhbnl3YXkuCi0JCQkgKi8KLQotCQkJZGVsYXkgPSA1MDsKLQkJCWZzbS0+c3Vic3RhdGUgPSBTSVJERVZfU1RBVEVfRE9OR0xFX1JFU0VUOwotCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ7Ci0KLQkJCWZzbS0+cGFyYW0gPSA5NjAwOwotCi0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9ET05HTEVfQ0xPU0U6Ci0JCQkvKiBzaG91bGRuJ3Qgd2UganVzdCB0cmVhdCB0aGlzIGFzIHN1Y2Nlc3M9PyAqLwotCQkJaWYgKGRldi0+ZG9uZ2xlX2RydiA9PSBOVUxMKSB7Ci0JCQkJZnNtLT5yZXN1bHQgPSAtRUlOVkFMOwotCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXJldCA9IHNpcmRldl9wdXRfZG9uZ2xlKGRldik7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJZnNtLT5yZXN1bHQgPSByZXQ7Ci0JCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9ORTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0lSREVWX1NUQVRFX1NFVF9EVFJfUlRTOgotCQkJcmV0ID0gc2lyZGV2X3NldF9kdHJfcnRzKGRldiwKLQkJCQkoZnNtLT5wYXJhbSYweDAyKSA/IFRSVUUgOiBGQUxTRSwKLQkJCQkoZnNtLT5wYXJhbSYweDAxKSA/IFRSVUUgOiBGQUxTRSk7Ci0JCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0RPTkU7Ci0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9TRVRfU1BFRUQ6Ci0JCQlmc20tPnN1YnN0YXRlID0gU0lSREVWX1NUQVRFX1dBSVRfWE1JVDsKLQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9OR0xFX0NIRUNLOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTSVJERVZfU1RBVEVfRE9OR0xFX0NIRUNLOgotCQkJcmV0ID0gaXJkYV90eF9jb21wbGV0ZV9mc20oZGV2KTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJZnNtLT5yZXN1bHQgPSByZXQ7Ci0JCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICgoZGVsYXk9cmV0KSAhPSAwKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoZGV2LT5kb25nbGVfZHJ2KSB7Ci0JCQkJZnNtLT5zdWJzdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ7Ci0JCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlkZXYtPnNwZWVkID0gZnNtLT5wYXJhbTsKLQkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX1BPUlRfU1BFRUQ7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ6Ci0JCQlpZiAoZGV2LT5kb25nbGVfZHJ2LT5yZXNldCkgewotCQkJCXJldCA9IGRldi0+ZG9uZ2xlX2Rydi0+cmVzZXQoZGV2KTsJCi0JCQkJaWYgKHJldCA8IDApIHsKLQkJCQkJZnNtLT5yZXN1bHQgPSByZXQ7Ci0JCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCQlyZXQgPSAwOwotCQkJaWYgKChkZWxheT1yZXQpID09IDApIHsKLQkJCQkvKiBzZXQgc2VyaWFsIHBvcnQgYWNjb3JkaW5nIHRvIGRvbmdsZSBkZWZhdWx0IHNwZWVkICovCi0JCQkJaWYgKGRldi0+ZHJ2LT5zZXRfc3BlZWQpCi0JCQkJCWRldi0+ZHJ2LT5zZXRfc3BlZWQoZGV2LCBkZXYtPnNwZWVkKTsKLQkJCQlmc20tPnN1YnN0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDsKLQkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDoJCQkJCi0JCQlpZiAoZGV2LT5kb25nbGVfZHJ2LT5yZXNldCkgewotCQkJCXJldCA9IGRldi0+ZG9uZ2xlX2Rydi0+c2V0X3NwZWVkKGRldiwgZnNtLT5wYXJhbSk7Ci0JCQkJaWYgKHJldCA8IDApIHsKLQkJCQkJZnNtLT5yZXN1bHQgPSByZXQ7Ci0JCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCQlyZXQgPSAwOwotCQkJaWYgKChkZWxheT1yZXQpID09IDApCi0JCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9QT1JUX1NQRUVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTSVJERVZfU1RBVEVfUE9SVF9TUEVFRDoKLQkJCS8qIEZpbmFsbHkgd2UgYXJlIHJlYWR5IHRvIGNoYW5nZSB0aGUgc2VyaWFsIHBvcnQgc3BlZWQgKi8KLQkJCWlmIChkZXYtPmRydi0+c2V0X3NwZWVkKQotCQkJCWRldi0+ZHJ2LT5zZXRfc3BlZWQoZGV2LCBkZXYtPnNwZWVkKTsKLQkJCWRldi0+bmV3X3NwZWVkID0gMDsKLQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9ORTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0lSREVWX1NUQVRFX0RPTkU6Ci0JCQkvKiBTaWduYWwgbmV0d29yayBsYXllciBzbyBpdCBjYW4gc2VuZCBtb3JlIGZyYW1lcyAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYtPm5ldGRldik7Ci0JCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0NPTVBMRVRFOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCUlSREFfRVJST1IoIiVzIC0gdW5kZWZpbmVkIHN0YXRlXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJZnNtLT5yZXN1bHQgPSAtRUlOVkFMOwotCQkJLyogZmFsbCB0aHJ1ICovCi0KLQkJY2FzZSBTSVJERVZfU1RBVEVfRVJST1I6Ci0JCQlJUkRBX0VSUk9SKCIlcyAtIGVycm9yOiAlZFxuIiwgX19GVU5DVElPTl9fLCBmc20tPnJlc3VsdCk7Ci0KLSNpZiAwCS8qIGRvbid0IGVuYWJsZSB0aGlzIGJlZm9yZSB3ZSBoYXZlIG5ldGRldi0+dHhfdGltZW91dCB0byByZWNvdmVyICovCi0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldi0+bmV0ZGV2KTsKLSNlbHNlCi0JCQluZXRpZl93YWtlX3F1ZXVlKGRldi0+bmV0ZGV2KTsKLSNlbmRpZgotCQkJLyogZmFsbCB0aHJ1ICovCi0KLQkJY2FzZSBTSVJERVZfU1RBVEVfQ09NUExFVEU6Ci0JCQkvKiBjb25maWcgY2hhbmdlIGZpbmlzaGVkLCBzbyB3ZSBhcmUgbm90IGJ1c3kgYW55IGxvbmdlciAqLwotCQkJc2lyZGV2X2VuYWJsZV9yeChkZXYpOwotCQkJdXAoJmZzbS0+c2VtKTsKLQkJCXJldHVybjsKLQkJfQotCQlmc20tPnN0YXRlID0gbmV4dF9zdGF0ZTsKLQl9IHdoaWxlKCFkZWxheSk7Ci0KLQlpcmRhX3F1ZXVlX2RlbGF5ZWRfcmVxdWVzdCgmZnNtLT5ycSwgbXNlY3NfdG9famlmZmllcyhkZWxheSkpOwotfQotCi0vKiBzY2hlZHVsZSBzb21lIGRldmljZSBjb25maWd1cmF0aW9uIHRhc2sgZm9yIGV4ZWN1dGlvbiBieSBrSXJEQWQKLSAqIG9uIGJlaGFsZiBvZiB0aGUgYWJvdmUgc3RhdGUgbWFjaGluZS4KLSAqIGNhbiBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIG9yIGludGVycnVwdC90YXNrbGV0IGNvbnRleHQuCi0gKi8KLQotaW50IHNpcmRldl9zY2hlZHVsZV9yZXF1ZXN0KHN0cnVjdCBzaXJfZGV2ICpkZXYsIGludCBpbml0aWFsX3N0YXRlLCB1bnNpZ25lZCBwYXJhbSkKLXsKLQlzdHJ1Y3Qgc2lyX2ZzbSAqZnNtID0gJmRldi0+ZnNtOwotCWludCB4bWl0X3dhc19kb3duOwotCi0JSVJEQV9ERUJVRygyLCAiJXMgLSBzdGF0ZT0weCUwNHggLyBwYXJhbT0ldVxuIiwgX19GVU5DVElPTl9fLCBpbml0aWFsX3N0YXRlLCBwYXJhbSk7Ci0KLQlpZiAoZG93bl90cnlsb2NrKCZmc20tPnNlbSkpIHsKLQkJaWYgKGluX2ludGVycnVwdCgpICB8fCAgaW5fYXRvbWljKCkgIHx8ICBpcnFzX2Rpc2FibGVkKCkpIHsKLQkJCUlSREFfREVCVUcoMSwgIiVzKCksIHN0YXRlIG1hY2hpbmUgYnVzeSFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCQl9IGVsc2UKLQkJCWRvd24oJmZzbS0+c2VtKTsKLQl9Ci0KLQlpZiAoZnNtLT5zdGF0ZSA9PSBTSVJERVZfU1RBVEVfREVBRCkgewotCQkvKiByYWNlIHdpdGggc2lyZGV2X2Nsb3NlIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQkJSVJEQV9FUlJPUigiJXMoKSwgaW5zdGFuY2Ugc3RhbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJdXAoJmZzbS0+c2VtKTsKLQkJcmV0dXJuIC1FU1RBTEU7CQkvKiBvciBiZXR0ZXIgRVBJUEU/ICovCi0JfQotCi0JeG1pdF93YXNfZG93biA9IG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2LT5uZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUoZGV2LT5uZXRkZXYpOwotCWF0b21pY19zZXQoJmRldi0+ZW5hYmxlX3J4LCAwKTsKLQotCWZzbS0+c3RhdGUgPSBpbml0aWFsX3N0YXRlOwotCWZzbS0+cGFyYW0gPSBwYXJhbTsKLQlmc20tPnJlc3VsdCA9IDA7Ci0KLQlJTklUX0xJU1RfSEVBRCgmZnNtLT5ycS5saF9yZXF1ZXN0KTsKLQlmc20tPnJxLnBlbmRpbmcgPSAwOwotCWZzbS0+cnEuZnVuYyA9IGlyZGFfY29uZmlnX2ZzbTsKLQlmc20tPnJxLmRhdGEgPSBkZXY7Ci0KLQlpZiAoIWlyZGFfcXVldWVfcmVxdWVzdCgmZnNtLT5ycSkpIHsJLyogcmV0dXJucyAwIG9uIGVycm9yISAqLwotCQlhdG9taWNfc2V0KCZkZXYtPmVuYWJsZV9yeCwgMSk7Ci0JCWlmICgheG1pdF93YXNfZG93bikKLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2LT5uZXRkZXYpOwkJCi0JCXVwKCZmc20tPnNlbSk7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaXJkYV90aHJlYWRfY3JlYXRlKHZvaWQpCi17Ci0Jc3RydWN0IGNvbXBsZXRpb24gc3RhcnR1cDsKLQlpbnQgcGlkOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmlyZGFfcnFfcXVldWUubG9jayk7Ci0JaXJkYV9ycV9xdWV1ZS50aHJlYWQgPSBOVUxMOwotCUlOSVRfTElTVF9IRUFEKCZpcmRhX3JxX3F1ZXVlLnJlcXVlc3RfbGlzdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmaXJkYV9ycV9xdWV1ZS5raWNrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpcmRhX3JxX3F1ZXVlLmRvbmUpOwotCWF0b21pY19zZXQoJmlyZGFfcnFfcXVldWUubnVtX3BlbmRpbmcsIDApOwotCi0JaW5pdF9jb21wbGV0aW9uKCZzdGFydHVwKTsKLQlwaWQgPSBrZXJuZWxfdGhyZWFkKGlyZGFfdGhyZWFkLCAmc3RhcnR1cCwgQ0xPTkVfRlN8Q0xPTkVfRklMRVMpOwotCWlmIChwaWQgPD0gMCkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JZWxzZQotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZzdGFydHVwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXJkYV90aHJlYWRfam9pbih2b2lkKQotewotCWlmIChpcmRhX3JxX3F1ZXVlLnRocmVhZCkgewotCQlmbHVzaF9pcmRhX3F1ZXVlKCk7Ci0JCWluaXRfY29tcGxldGlvbigmaXJkYV9ycV9xdWV1ZS5leGl0KTsKLQkJaXJkYV9ycV9xdWV1ZS50aHJlYWQgPSBOVUxMOwotCQl3YWtlX3VwKCZpcmRhX3JxX3F1ZXVlLmtpY2spOwkJCi0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlyZGFfcnFfcXVldWUuZXhpdCk7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChpcmRhX3RocmVhZF9jcmVhdGUpOwotbW9kdWxlX2V4aXQoaXJkYV90aHJlYWRfam9pbik7Ci0KLU1PRFVMRV9BVVRIT1IoIk1hcnRpbiBEaWVobCA8aW5mb0BtZGllaGwuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIklyREEgU0lSIGNvcmUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCBlYzk0ZWNkLi5hNDY3NDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtMTEsNiArMTEsNyBAQAogICogICAgIENvcHlyaWdodCAoYykgMjAwMiAgICAgIERhbmllbGUgUGVyaQogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAyICAgICAgSmVhbiBUb3VycmlsaGVzCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDA2ICAgICAgTGludXMgV2FsbGVpagogICoKICAqCiAgKiBCYXNlZCBvbiBzbWMtaXJjYy5jOgpAQCAtNTMsNiArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC02MSw2ICs2Myw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaWZkZWYgQ09ORklHX1BDSQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQvaXJkYS93cmFwcGVyLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpAQCAtMTAwLDYgKzEwNSwyMiBAQAogCiAvKiBUeXBlcyAqLwogCisjaWZkZWYgQ09ORklHX1BDSQorc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiB7CisJdW5zaWduZWQgc2hvcnQgdmVuZG9yOyAvKiBQQ0kgdmVuZG9yIElEICovCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlOyAvKiBQQ0kgdmVuZG9yIElEICovCisJdW5zaWduZWQgc2hvcnQgc3VidmVuZG9yOyAvKiBQQ0kgc3Vic3lzdGVtIHZlbmRvciBJRCAqLworCXVuc2lnbmVkIHNob3J0IHN1YmRldmljZTsgLyogUENJIHN5YnN5c3RlbSBkZXZpY2UgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzaXJfaW87IC8qIEkvTyBwb3J0IGZvciBTSVIgKi8KKwl1bnNpZ25lZCBzaG9ydCBmaXJfaW87IC8qIEkvTyBwb3J0IGZvciBGSVIgKi8KKwl1bnNpZ25lZCBjaGFyICBmaXJfaXJxOyAvKiBGSVIgSVJRICovCisJdW5zaWduZWQgY2hhciAgZmlyX2RtYTsgLyogRklSIERNQSAqLworCXVuc2lnbmVkIHNob3J0IGNmZ19iYXNlOyAvKiBJL08gcG9ydCBmb3IgY2hpcCBjb25maWd1cmF0aW9uICovCisJaW50ICgqcHJlY29uZmlndXJlKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsgLyogUHJlY29uZmlnIGZ1bmN0aW9uICovCisJY29uc3QgY2hhciAqbmFtZTsJLyogbmFtZSBzaG93biBhcyBpbmZvICovCit9OworI2VuZGlmCisKIHN0cnVjdCBzbXNjX3RyYW5zY2VpdmVyIHsKIAljaGFyICpuYW1lOwogCXZvaWQgKCpzZXRfZm9yX3NwZWVkKShpbnQgZmlyX2Jhc2UsIHUzMiBzcGVlZCk7CkBAIC0yMDIsNiArMjIzLDE4IEBACiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fcGFnZWQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKIHN0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19mZGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOwogc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX2xwYyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSk7CisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIHZvaWQgX19pbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCk7CitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19maXIsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19zaXIsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2RtYSwKKwkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIGlyY2NfaXJxKTsKKyNlbmRpZgogCiAvKiBUcmFuc2NlaXZlcnMgc3BlY2lmaWMgZnVuY3Rpb25zICovCiAKQEAgLTMyNiw2ICszNTksMTYgQEAKICAgICAgICAgICAgICAgIGlvYmFzZSArIElSQ0NfTUFTVEVSKTsKIH0KIAorI2lmZGVmCUNPTkZJR19QTlAKKy8qIFBOUCBob3RwbHVnIHN1cHBvcnQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbXNjX2lyY2NfcG5wX3RhYmxlW10gPSB7CisJeyAuaWQgPSAiU01DZjAxMCIsIC5kcml2ZXJfZGF0YSA9IDAgfSwKKwkvKiBhbmQgcHJlc3VtYWJseSBvdGhlcnMgKi8KKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc21zY19pcmNjX3BucF90YWJsZSk7CisjZW5kaWYKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTM1Myw2ICszOTYsMTMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKyNpZmRlZiBDT05GSUdfUENJCisJaWYgKHNtc2NfaXJjY19wcmVjb25maWd1cmVfc3Vic3lzdGVtcyhpcmNjX2NmZywgaXJjY19maXIsIGlyY2Nfc2lyLCBpcmNjX2RtYSwgaXJjY19pcnEpIDwgMCkgeworCQkvKiBJZ25vcmUgZXJyb3JzIGZyb20gcHJlY29uZmlndXJhdGlvbiAqLworCQlJUkRBX0VSUk9SKCIlcywgUHJlY29uZmlndXJhdGlvbiBmYWlsZWQgIVxuIiwgZHJpdmVyX25hbWUpOworCX0KKyNlbmRpZgorCiAJZGV2X2NvdW50ID0gMDsKIAogCWlmIChpcmNjX2ZpciA+IDAgJiYgaXJjY19zaXIgPiAwKSB7CkBAIC0yMDMzLDcgKzIwODMsOCBAQAogCiAvKiBQUk9CSU5HCiAgKgotICoKKyAqIFJFVklTSVQgd2UgY2FuIGJlIHRvbGQgYWJvdXQgdGhlIGRldmljZSBieSBQTlAsIGFuZCBzaG91bGQgdXNlIHRoYXQgaW5mbworICogaW5zdGVhZCBvZiBwcm9iaW5nIGhhcmR3YXJlIGFuZCBjcmVhdGluZyBhIHBsYXRmb3JtX2RldmljZSAuLi4KICAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfbG9va19mb3JfY2hpcHModm9pZCkKQEAgLTIyODUsNiArMjMzNiw0OTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogTG9vayBmb3Igc29tZSBzcGVjaWZpYyBzdWJzeXN0ZW0gc2V0dXBzIHRoYXQgbmVlZAorICogcHJlLWNvbmZpZ3VyYXRpb24gbm90IHByb3Blcmx5IGRvbmUgYnkgdGhlIEJJT1MgKGVzcGVjaWFsbHkgbGFwdG9wcykKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBpbiBwYXJ0IG9uIHNtY2luaXQuYywgdG9zaDE4MDAtc21jaW5pdC5jCisgKiBhbmQgdG9zaDI0NTAtc21jaW5pdC5jLiBUaGUgdGFibGUgbGlzdHMgdGhlIGRldmljZSBlbnRyaWVzCisgKiBmb3IgSVNBIGJyaWRnZXMgd2l0aCBhbiBMUEMgKExvdyBQaW4gQ291bnQpIGNvbnRyb2xsZXIgd2hpY2gKKyAqIGhhbmRsZXMgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgU01TQyBkZXZpY2UuIEFmdGVyIHRoZSBMUEMKKyAqIGNvbnRyb2xsZXIgaXMgaW5pdGlhbGl6ZWQgdGhyb3VnaCBQQ0ksIHRoZSBTTVNDIGRldmljZSBpcyBpbml0aWFsaXplZAorICogdGhyb3VnaCBhIGRlZGljYXRlZCBwb3J0IGluIHRoZSBJU0EgcG9ydC1tYXBwZWQgSS9PIGFyZWEsIHRoaXMgbGF0dGVyCisgKiBhcmVhIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBTTVNDIGRldmljZSB3aXRoIGRlZmF1bHQKKyAqIFNJUiBhbmQgRklSIEkvTyBwb3J0cywgRE1BIGFuZCBJUlEuIERpZmZlcmVudCB2ZW5kb3JzIGhhdmUKKyAqIHVzZWQgZGlmZmVyZW50IHNldHMgb2YgcGFyYW1ldGVycyBhbmQgZGlmZmVyZW50IGNvbnRyb2wgcG9ydAorICogYWRkcmVzc2VzIG1ha2luZyBhIHN1YnN5c3RlbSBkZXZpY2UgdGFibGUgbmVjZXNzYXJ5LgorICovCisjaWZkZWYgQ09ORklHX1BDSQorI2RlZmluZSBQQ0lJRF9WRU5ET1JfSU5URUwgMHg4MDg2CisjZGVmaW5lIFBDSUlEX1ZFTkRPUl9BTEkgMHgxMGI5CitzdGF0aWMgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnNbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkJLnZlbmRvciA9IFBDSUlEX1ZFTkRPUl9JTlRFTCwgLyogSW50ZWwgODI4MDFEQk0gTFBDIGJyaWRnZSAqLworCQkuZGV2aWNlID0gMHgyNGNjLAorCQkuc3VidmVuZG9yID0gMHgxMDNjLAorCQkuc3ViZGV2aWNlID0gMHgwODhjLAorCQkvKiBRdWl0ZSBjZXJ0YWluIHRoZXNlIGFyZSB0aGUgc2FtZSBmb3IgbmM4MDAwIGFzIGZvciBuYzYwMDAgKi8KKwkJLnNpcl9pbyA9IDB4MDJmOCwKKwkJLmZpcl9pbyA9IDB4MDEzMCwKKwkJLmZpcl9pcnEgPSAweDA1LAorCQkuZmlyX2RtYSA9IDB4MDMsCisJCS5jZmdfYmFzZSA9IDB4MDA0ZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxLAorCQkubmFtZSA9ICJIUCBuYzgwMDAiLAorCX0sCisJeworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCisJCS5kZXZpY2UgPSAweDI0Y2MsCisJCS5zdWJ2ZW5kb3IgPSAweDEwM2MsCisJCS5zdWJkZXZpY2UgPSAweDA4OTAsCisJCS5zaXJfaW8gPSAweDAyZjgsCisJCS5maXJfaW8gPSAweDAxMzAsCisJCS5maXJfaXJxID0gMHgwNSwKKwkJLmZpcl9kbWEgPSAweDAzLAorCQkuY2ZnX2Jhc2UgPSAweDAwNGUsCisJCS5wcmVjb25maWd1cmUgPSBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMSwKKwkJLm5hbWUgPSAiSFAgbmM2MDAwIiwKKwl9LAorCXsKKwkJLyogSW50ZWwgODI4MDFEQi9EQkwgKElDSDQvSUNINC1MKSBMUEMgSW50ZXJmYWNlIEJyaWRnZSAqLworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLAorCQkuZGV2aWNlID0gMHgyNGMwLAorCQkuc3VidmVuZG9yID0gMHgxMTc5LAorCQkuc3ViZGV2aWNlID0gMHhmZmZmLCAvKiAweGZmZmYgaXMgImFueSIgKi8KKwkJLnNpcl9pbyA9IDB4MDNmOCwKKwkJLmZpcl9pbyA9IDB4MDEzMCwKKwkJLmZpcl9pcnEgPSAweDA3LAorCQkuZmlyX2RtYSA9IDB4MDEsCisJCS5jZmdfYmFzZSA9IDB4MDAyZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxLAorCQkubmFtZSA9ICJUb3NoaWJhIGxhcHRvcCB3aXRoIEludGVsIDgyODAxREIvREJMIExQQyBicmlkZ2UiLAorCX0sCisJeworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMUNBTSBJU0EgYnJpZGdlICovCisJCS5kZXZpY2UgPSAweDI0OGMsCisJCS5zdWJ2ZW5kb3IgPSAweDExNzksCisJCS5zdWJkZXZpY2UgPSAweGZmZmYsIC8qIDB4ZmZmZiBpcyAiYW55IiAqLworCQkuc2lyX2lvID0gMHgwM2Y4LAorCQkuZmlyX2lvID0gMHgwMTMwLAorCQkuZmlyX2lycSA9IDB4MDMsCisJCS5maXJfZG1hID0gMHgwMywKKwkJLmNmZ19iYXNlID0gMHgwMDJlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIlRvc2hpYmEgbGFwdG9wIHdpdGggSW50ZWwgODI4MDFDQU0gSVNBIGJyaWRnZSIsCisJfSwKKwl7CisJCS8qIDgyODAxREJNIChJQ0g0LU0pIExQQyBJbnRlcmZhY2UgQnJpZGdlICovCisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsCisJCS5kZXZpY2UgPSAweDI0Y2MsCisJCS5zdWJ2ZW5kb3IgPSAweDExNzksCisJCS5zdWJkZXZpY2UgPSAweGZmZmYsIC8qIDB4ZmZmZiBpcyAiYW55IiAqLworCQkuc2lyX2lvID0gMHgwM2Y4LAorCQkuZmlyX2lvID0gMHgwMTMwLAorCQkuZmlyX2lycSA9IDB4MDMsCisJCS5maXJfZG1hID0gMHgwMywKKwkJLmNmZ19iYXNlID0gMHgwMDJlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIlRvc2hpYmEgbGFwdG9wIHdpdGggSW50ZWwgODI4MURCTSBMUEMgYnJpZGdlIiwKKwl9LAorCXsKKwkJLyogQUxpIE0xNTMzL00xNTM1IFBDSSB0byBJU0EgQnJpZGdlIFtBbGFkZGluIElWL1YvVitdICovCisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfQUxJLAorCQkuZGV2aWNlID0gMHgxNTMzLAorCQkuc3VidmVuZG9yID0gMHgxMTc5LAorCQkuc3ViZGV2aWNlID0gMHhmZmZmLCAvKiAweGZmZmYgaXMgImFueSIgKi8KKwkJLnNpcl9pbyA9IDB4MDJlOCwKKwkJLmZpcl9pbyA9IDB4MDJmOCwKKwkJLmZpcl9pcnEgPSAweDA3LAorCQkuZmlyX2RtYSA9IDB4MDMsCisJCS5jZmdfYmFzZSA9IDB4MDAyZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaSwKKwkJLm5hbWUgPSAiVG9zaGliYSBsYXB0b3Agd2l0aCBBTGkgSVNBIGJyaWRnZSIsCisJfSwKKwl7IH0gLy8gVGVybWluYXRvcgorfTsKKworCisvKgorICogVGhpcyBzZXRzIHVwIHRoZSBiYXNpYyBTTVNDIHBhcmFtZXRlcnMKKyAqIChGSVIgcG9ydCwgU0lSIHBvcnQsIEZJUiBETUEsIEZJUiBJUlEpCisgKiB0aHJvdWdoIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gcG9ydC4KKyAqLworc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3QKKwkJCQkJIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgorCQkJCQkgKmNvbmYpCit7CisJdW5zaWduZWQgc2hvcnQgaW9iYXNlID0gY29uZi0+Y2ZnX2Jhc2U7CisJdW5zaWduZWQgY2hhciB0bXBieXRlOworCisJb3V0YihMUEM0N04yMjdfQ0ZHQUNDRVNTS0VZLCBpb2Jhc2UpOyAvLyBlbnRlciBjb25maWd1cmF0aW9uIHN0YXRlCisJb3V0YihTTVNDU0lPRkxBVF9ERVZJQ0VJRF9SRUcsIGlvYmFzZSk7IC8vIHNldCBmb3IgZGV2aWNlIElECisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKzEpOyAvLyBSZWFkIGRldmljZSBJRAorCUlSREFfREVCVUcoMCwKKwkJICAgIkRldGVjdGVkIENoaXAgaWQ6IDB4JTAyeCwgc2V0dGluZyB1cCByZWdpc3RlcnMuLi5cbiIsCisJCSAgIHRtcGJ5dGUpOworCisJLyogRGlzYWJsZSBVQVJUMSBhbmQgc2V0IHVwIFNJUiBJL08gcG9ydCAqLworCW91dGIoMHgyNCwgaW9iYXNlKTsgIC8vIHNlbGVjdCBDUjI0IC0gVUFSVDEgYmFzZSBhZGRyCisJb3V0YigweDAwLCBpb2Jhc2UgKyAxKTsgLy8gZGlzYWJsZSBVQVJUMQorCW91dGIoU01TQ1NJT0ZMQVRfVUFSVDJCQVNFQUREUl9SRUcsIGlvYmFzZSk7ICAvLyBzZWxlY3QgQ1IyNSAtIFVBUlQyIGJhc2UgYWRkcgorCW91dGIoIChjb25mLT5zaXJfaW8gPj4gMiksIGlvYmFzZSArIDEpOyAvLyBiaXRzIDItOSBvZiAweDNmOAorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJaWYgKHRtcGJ5dGUgIT0gKGNvbmYtPnNpcl9pbyA+PiAyKSApIHsKKwkJSVJEQV9XQVJOSU5HKCJFUlJPUjogY291bGQgbm90IGNvbmZpZ3VyZSBTSVIgaW9wb3J0LlxuIik7CisJCUlSREFfV0FSTklORygiVHJ5IHRvIHN1cHBseSBpcmNjX2NmZyBhcmd1bWVudC5cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIFNldCB1cCBGSVIgSVJRIGNoYW5uZWwgZm9yIFVBUlQyICovCisJb3V0YihTTVNDU0lPRkxBVF9VQVJUSVJRU0VMRUNUX1JFRywgaW9iYXNlKTsgLy8gc2VsZWN0IENSMjggLSBVQVJUMSwyIElSUSBzZWxlY3QKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCXRtcGJ5dGUgJj0gU01TQ1NJT0ZMQVRfVUFSVDFJUlFTRUxFQ1RfTUFTSzsgLy8gRG8gbm90IHRvdWNoIHRoZSBVQVJUMSBwb3J0aW9uCisJdG1wYnl0ZSB8PSAoY29uZi0+ZmlyX2lycSAmIFNNU0NTSU9GTEFUX1VBUlQySVJRU0VMRUNUX01BU0spOworCW91dGIodG1wYnl0ZSwgaW9iYXNlICsgMSk7CisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKSAmIFNNU0NTSU9GTEFUX1VBUlQySVJRU0VMRUNUX01BU0s7CisJaWYgKHRtcGJ5dGUgIT0gY29uZi0+ZmlyX2lycSkgeworCQlJUkRBX1dBUk5JTkcoIkVSUk9SOiBjb3VsZCBub3QgY29uZmlndXJlIEZJUiBJUlEgY2hhbm5lbC5cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIFNldCB1cCBGSVIgSS9PIHBvcnQgKi8KKwlvdXRiKFNNU0NTSU9GTEFUX0ZJUkJBU0VBRERSX1JFRywgaW9iYXNlKTsgIC8vIENSMkIgLSBTQ0UgKEZJUikgYmFzZSBhZGRyCisJb3V0YigoY29uZi0+ZmlyX2lvID4+IDMpLCBpb2Jhc2UgKyAxKTsKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCWlmICh0bXBieXRlICE9IChjb25mLT5maXJfaW8gPj4gMykgKSB7CisJCUlSREFfV0FSTklORygiRVJST1I6IGNvdWxkIG5vdCBjb25maWd1cmUgRklSIEkvTyBwb3J0LlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogU2V0IHVwIEZJUiBETUEgY2hhbm5lbCAqLworCW91dGIoU01TQ1NJT0ZMQVRfRklSRE1BU0VMRUNUX1JFRywgaW9iYXNlKTsgIC8vIENSMkMgLSBTQ0UgKEZJUikgRE1BIHNlbGVjdAorCW91dGIoKGNvbmYtPmZpcl9kbWEgJiBMUEM0N04yMjdfRklSRE1BU0VMRUNUX01BU0spLCBpb2Jhc2UgKyAxKTsgLy8gRE1BCisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKSAmIExQQzQ3TjIyN19GSVJETUFTRUxFQ1RfTUFTSzsKKwlpZiAodG1wYnl0ZSAhPSAoY29uZi0+ZmlyX2RtYSAmIExQQzQ3TjIyN19GSVJETUFTRUxFQ1RfTUFTSykpIHsKKwkJSVJEQV9XQVJOSU5HKCJFUlJPUjogY291bGQgbm90IGNvbmZpZ3VyZSBGSVIgRE1BIGNoYW5uZWwuXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlvdXRiKFNNU0NTSU9GTEFUX1VBUlRNT0RFMENfUkVHLCBpb2Jhc2UpOyAgLy8gQ1IwQyAtIFVBUlQgbW9kZQorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJdG1wYnl0ZSAmPSB+U01TQ1NJT0ZMQVRfVUFSVDJNT0RFX01BU0sgfAorCQlTTVNDU0lPRkxBVF9VQVJUMk1PREVfVkFMX0lSREE7CisJb3V0Yih0bXBieXRlLCBpb2Jhc2UgKyAxKTsgLy8gZW5hYmxlIElyREEgKEhQU0lSKSBtb2RlLCBoaWdoIHNwZWVkCisKKwlvdXRiKExQQzQ3TjIyN19BUE1CT09URFJJVkVfUkVHLCBpb2Jhc2UpOyAgLy8gQ1IwNyAtIEF1dG8gUHdyIE1ndC9ib290IGRyaXZlIHNlbAorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJb3V0Yih0bXBieXRlIHwgTFBDNDdOMjI3X1VBUlQyQVVUT1BXUkRPV05fTUFTSywgaW9iYXNlICsgMSk7IC8vIGVuYWJsZSBVQVJUMiBhdXRvcG93ZXIgZG93bgorCisJLyogVGhpcyBvbmUgd2FzIG5vdCBwYXJ0IG9mIHRvc2gxODAwICovCisJb3V0YigweDBhLCBpb2Jhc2UpOyAgLy8gQ1IwYSAtIGVjcCBmaWZvIC8gaXIgbXV4CisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwlvdXRiKHRtcGJ5dGUgfCAweDQwLCBpb2Jhc2UgKyAxKTsgLy8gc2VuZCBhY3RpdmUgZGV2aWNlIHRvIGlyIHBvcnQKKworCW91dGIoTFBDNDdOMjI3X1VBUlQxMlBPV0VSX1JFRywgaW9iYXNlKTsgIC8vIENSMDIgLSBVQVJUIDEsMiBwb3dlcgorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJb3V0Yih0bXBieXRlIHwgTFBDNDdOMjI3X1VBUlQyUE9XRVJET1dOX01BU0ssIGlvYmFzZSArIDEpOyAvLyBVQVJUMiBwb3dlciB1cCBtb2RlLCBVQVJUMSBwb3dlciBkb3duCisKKwlvdXRiKExQQzQ3TjIyN19GRENQT1dFUlZBTElEQ09ORl9SRUcsIGlvYmFzZSk7ICAvLyBDUjAwIC0gRkRDIFBvd2VyL3ZhbGlkIGNvbmZpZyBjeWNsZQorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJb3V0Yih0bXBieXRlIHwgTFBDNDdOMjI3X1ZBTElEX01BU0ssIGlvYmFzZSArIDEpOyAvLyB2YWxpZCBjb25maWcgY3ljbGUgZG9uZQorCisJb3V0YihMUEM0N04yMjdfQ0ZHRVhJVEtFWSwgaW9iYXNlKTsgIC8vIEV4aXQgY29uZmlndXJhdGlvbgorCisJcmV0dXJuIDA7Cit9CisKKy8qIDgyODAxQ0FNIGdlbmVyaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFZJRCAweDAwCisjZGVmaW5lIERJRCAweDAyCisjZGVmaW5lIFBJUlFfQV9EX1JPVVQgMHg2MAorI2RlZmluZSBTSVJRX0NOVEwgMHg2NAorI2RlZmluZSBQSVJRX0VfSF9ST1VUIDB4NjgKKyNkZWZpbmUgUENJX0RNQV9DIDB4OTAKKy8qIExQQy1zcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ09NX0RFQyAweGUwCisjZGVmaW5lIEdFTjFfREVDIDB4ZTQKKyNkZWZpbmUgTFBDX0VOIDB4ZTYKKyNkZWZpbmUgR0VOMl9ERUMgMHhlYworLyoKKyAqIFNldHMgdXAgdGhlIEkvTyByYW5nZSB1c2luZyB0aGUgODI4MDFDQU0gSVNBIGJyaWRnZSwgODI4MDFEQk0gTFBDIGJyaWRnZQorICogb3IgSW50ZWwgODI4MDFEQi9EQkwgKElDSDQvSUNINC1MKSBMUEMgSW50ZXJmYWNlIEJyaWRnZS4KKyAqIFRoZXkgYWxsIHdvcmsgdGhlIHNhbWUgd2F5IQorICovCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIHN0cnVjdAorCQkJCQkgICAgIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgorCQkJCQkgICAgICpjb25mKQoreworCXVuc2lnbmVkIHNob3J0IHRtcHdvcmQ7CisJdW5zaWduZWQgY2hhciB0bXBieXRlOworCisJSVJEQV9NRVNTQUdFKCJTZXR0aW5nIHVwIEludGVsIDgyODAxIGNvbnRyb2xsZXIgYW5kIFNNU0MgZGV2aWNlXG4iKTsKKwkvKgorCSAqIFNlbGVjdCB0aGUgcmFuZ2UgZm9yIHRoZSBDT01BIENPTSBwb3J0IChTSVIpCisJICogUmVnaXN0ZXIgQ09NX0RFQzoKKwkgKiBCaXQgNzogcmVzZXJ2ZWQKKwkgKiBCaXQgNi00LCBDT01CIGRlY29kZSByYW5nZQorCSAqIEJpdCAzOiByZXNlcnZlZAorCSAqIEJpdCAyLTAsIENPTUEgZGVjb2RlIHJhbmdlCisJICoKKwkgKiBEZWNvZGUgcmFuZ2VzOgorCSAqICAgMDAwID0gMHgzZjgtMHgzZmYgKENPTTEpCisJICogICAwMDEgPSAweDJmOC0weDJmZiAoQ09NMikKKwkgKiAgIDAxMCA9IDB4MjIwLTB4MjI3CisJICogICAwMTEgPSAweDIyOC0weDIyZgorCSAqICAgMTAwID0gMHgyMzgtMHgyM2YKKwkgKiAgIDEwMSA9IDB4MmU4LTB4MmVmIChDT000KQorCSAqICAgMTEwID0gMHgzMzgtMHgzM2YKKwkgKiAgIDExMSA9IDB4M2U4LTB4M2VmIChDT00zKQorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgQ09NX0RFQywgJnRtcGJ5dGUpOworCXRtcGJ5dGUgJj0gMHhmODsgLyogbWFzayBDT01BIGJpdHMgKi8KKwlzd2l0Y2goY29uZi0+c2lyX2lvKSB7CisJY2FzZSAweDNmODoKKwkJdG1wYnl0ZSB8PSAweDAwOworCQlicmVhazsKKwljYXNlIDB4MmY4OgorCQl0bXBieXRlIHw9IDB4MDE7CisJCWJyZWFrOworCWNhc2UgMHgyMjA6CisJCXRtcGJ5dGUgfD0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSAweDIyODoKKwkJdG1wYnl0ZSB8PSAweDAzOworCQlicmVhazsKKwljYXNlIDB4MjM4OgorCQl0bXBieXRlIHw9IDB4MDQ7CisJCWJyZWFrOworCWNhc2UgMHgyZTg6CisJCXRtcGJ5dGUgfD0gMHgwNTsKKwkJYnJlYWs7CisJY2FzZSAweDMzODoKKwkJdG1wYnl0ZSB8PSAweDA2OworCQlicmVhazsKKwljYXNlIDB4M2U4OgorCQl0bXBieXRlIHw9IDB4MDc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcGJ5dGUgfD0gMHgwMTsgLyogQ09NMiBkZWZhdWx0ICovCisJfQorCUlSREFfREVCVUcoMSwgIkNPTV9ERUMgKHdyaXRlKTogMHglMDJ4XG4iLCB0bXBieXRlKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBDT01fREVDLCB0bXBieXRlKTsKKworCS8qIEVuYWJsZSBMb3cgUGluIENvdW50IGludGVyZmFjZSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgTFBDX0VOLCAmdG1wd29yZCk7CisJLyogVGhlc2Ugc2VlbSB0byBiZSBzZXQgdXAgYXQgYWxsIHRpbWVzLAorCSAqIGp1c3QgbWFrZSBzdXJlIGl0IGlzIHByb3Blcmx5IHNldC4KKwkgKi8KKwlzd2l0Y2goY29uZi0+Y2ZnX2Jhc2UpIHsKKwljYXNlIDB4MDRlOgorCQl0bXB3b3JkIHw9IDB4MjAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAyZToKKwkJdG1wd29yZCB8PSAweDEwMDA7CisJCWJyZWFrOworCWNhc2UgMHgwNjI6CisJCXRtcHdvcmQgfD0gMHgwODAwOworCQlicmVhazsKKwljYXNlIDB4MDYwOgorCQl0bXB3b3JkIHw9IDB4MDQwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVJEQV9XQVJOSU5HKCJVbmNvbW1vbiBJL08gYmFzZSBhZGRyZXNzOiAweCUwNHhcbiIsCisJCQkgICAgIGNvbmYtPmNmZ19iYXNlKTsKKwkJYnJlYWs7CisJfQorCXRtcHdvcmQgJj0gMHhmZmZkOyAvKiBkaXNhYmxlIExQQyBDT01CICovCisJdG1wd29yZCB8PSAweDAwMDE7IC8qIHNldCBiaXQgMCA6IGVuYWJsZSBMUEMgQ09NQSBhZGRyIHJhbmdlIChHRU4yKSAqLworCUlSREFfREVCVUcoMSwgIkxQQ19FTiAod3JpdGUpOiAweCUwNHhcbiIsIHRtcHdvcmQpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIExQQ19FTiwgdG1wd29yZCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBMUEMgRE1BIGNoYW5uZWwKKwkgKiBQQ0lfRE1BX0MgYml0czoKKwkgKiBCaXQgMTUtMTQ6IERNQSBjaGFubmVsIDcgc2VsZWN0CisJICogQml0IDEzLTEyOiBETUEgY2hhbm5lbCA2IHNlbGVjdAorCSAqIEJpdCAxMS0xMDogRE1BIGNoYW5uZWwgNSBzZWxlY3QKKwkgKiBCaXQgOS04OiAgIFJlc2VydmVkCisJICogQml0IDctNjogICBETUEgY2hhbm5lbCAzIHNlbGVjdAorCSAqIEJpdCA1LTQ6ICAgRE1BIGNoYW5uZWwgMiBzZWxlY3QKKwkgKiBCaXQgMy0yOiAgIERNQSBjaGFubmVsIDEgc2VsZWN0CisJICogQml0IDEtMDogICBETUEgY2hhbm5lbCAwIHNlbGVjdAorCSAqICAwMCA9IFJlc2VydmVkIHZhbHVlCisJICogIDAxID0gUEMvUENJIERNQQorCSAqICAxMCA9IFJlc2VydmVkIHZhbHVlCisJICogIDExID0gTFBDIEkvRiBETUEKKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9ETUFfQywgJnRtcHdvcmQpOworCXN3aXRjaChjb25mLT5maXJfZG1hKSB7CisJY2FzZSAweDA3OgorCQl0bXB3b3JkIHw9IDB4YzAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDA2OgorCQl0bXB3b3JkIHw9IDB4MzAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDA1OgorCQl0bXB3b3JkIHw9IDB4MGMwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAzOgorCQl0bXB3b3JkIHw9IDB4MDBjMDsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCQl0bXB3b3JkIHw9IDB4MDAzMDsKKwkJYnJlYWs7CisJY2FzZSAweDAxOgorCQl0bXB3b3JkIHw9IDB4MDAwYzsKKwkJYnJlYWs7CisJY2FzZSAweDAwOgorCQl0bXB3b3JkIHw9IDB4MDAwMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7IC8qIGRvIG5vdCBjaGFuZ2Ugc2V0dGluZ3MgKi8KKwl9CisJSVJEQV9ERUJVRygxLCAiUENJX0RNQV9DICh3cml0ZSk6IDB4JTA0eFxuIiwgdG1wd29yZCk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0RNQV9DLCB0bXB3b3JkKTsKKworCS8qCisJICogR0VOMl9ERUMgYml0czoKKwkgKiBCaXQgMTUtNDogR2VuZXJpYyBJL08gcmFuZ2UKKwkgKiBCaXQgMy0xOiByZXNlcnZlZCAocmVhZCBhcyAwKQorCSAqIEJpdCAwOiBlbmFibGUgR0VOMiByYW5nZSBvbiBMUEMgSS9GCisJICovCisJdG1wd29yZCA9IGNvbmYtPmZpcl9pbyAmIDB4ZmZmODsKKwl0bXB3b3JkIHw9IDB4MDAwMTsKKwlJUkRBX0RFQlVHKDEsICJHRU4yX0RFQyAod3JpdGUpOiAweCUwNHhcbiIsIHRtcHdvcmQpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIEdFTjJfREVDLCB0bXB3b3JkKTsKKworCS8qIFByZS1jb25maWd1cmUgY2hpcCAqLworCXJldHVybiBwcmVjb25maWd1cmVfc21zY19jaGlwKGNvbmYpOworfQorCisvKgorICogUHJlLWNvbmZpZ3VyZSBhIGNlcnRhaW4gcG9ydCBvbiB0aGUgQUxpIDE1MzMgYnJpZGdlLgorICogVGhpcyBpcyBiYXNlZCBvbiByZXZlcnNlLWVuZ2luZWVyaW5nIHNpbmNlIEFMaSBkb2VzIG5vdAorICogcHJvdmlkZSBhbnkgZGF0YSBzaGVldCBmb3IgdGhlIDE1MzMgY2hpcC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKwkvKiBUaGVzZSBiaXRzIG9idmlvdXNseSBjb250cm9sIHRoZSBkaWZmZXJlbnQgcG9ydHMgKi8KKwl1bnNpZ25lZCBjaGFyIG1hc2s7CisJdW5zaWduZWQgY2hhciB0bXBieXRlOworCisJc3dpdGNoKHBvcnQpIHsKKwljYXNlIDB4MDEzMDoKKwljYXNlIDB4MDE3ODoKKwkJcmVnID0gMHhiMDsKKwkJbWFzayA9IDB4ODA7CisJCWJyZWFrOworCWNhc2UgMHgwM2Y4OgorCQlyZWcgPSAweGI0OworCQltYXNrID0gMHg4MDsKKwkJYnJlYWs7CisJY2FzZSAweDAyZjg6CisJCXJlZyA9IDB4YjQ7CisJCW1hc2sgPSAweDMwOworCQlicmVhazsKKwljYXNlIDB4MDJlODoKKwkJcmVnID0gMHhiNDsKKwkJbWFzayA9IDB4MDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlSREFfRVJST1IoIkZhaWxlZCB0byBjb25maWd1cmUgdW5zdXBwb3J0ZWQgcG9ydCBvbiBBTGkgMTUzMyBicmlkZ2U6IDB4JTA0eFxuIiwgcG9ydCk7CisJCXJldHVybjsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHJlZywgJnRtcGJ5dGUpOworCS8qIFR1cm4gb24gdGhlIHJpZ2h0IGJpdHMgKi8KKwl0bXBieXRlIHw9IG1hc2s7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcmVnLCB0bXBieXRlKTsKKwlJUkRBX01FU1NBR0UoIkFjdGl2YXRlZCBBTGkgMTUzMyBJU0EgYnJpZGdlIHBvcnQgMHglMDR4LlxuIiwgcG9ydCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgc3RydWN0CisJCQkJCSAgIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgorCQkJCQkgICAqY29uZikKK3sKKwkvKiBDb25maWd1cmUgdGhlIHR3byBwb3J0cyBvbiB0aGUgQUxpIDE1MzMgKi8KKwlwcmVjb25maWd1cmVfYWxpX3BvcnQoZGV2LCBjb25mLT5zaXJfaW8pOworCXByZWNvbmZpZ3VyZV9hbGlfcG9ydChkZXYsIGNvbmYtPmZpcl9pbyk7CisKKwkvKiBQcmUtY29uZmlndXJlIGNoaXAgKi8KKwlyZXR1cm4gcHJlY29uZmlndXJlX3Ntc2NfY2hpcChjb25mKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2NfZmlyLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2Nfc2lyLAorCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgaXJjY19kbWEsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2lycSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBzaG9ydCBzc192ZW5kb3IgPSAweDAwMDA7CisJdW5zaWduZWQgc2hvcnQgc3NfZGV2aWNlID0gMHgwMDAwOworCWludCByZXQgPSAwOworCisJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KTsKKworCXdoaWxlIChkZXYgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mOworCisJCS8qCisJCSAqIENhY2hlIHRoZSBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZToKKwkJICogc29tZSBtYW51ZmFjdHVyZXJzIGZhaWwgdG8gc2V0IHRoaXMgZm9yIGFsbCBjb21wb25lbnRzLAorCQkgKiBzbyB3ZSBzYXZlIGl0IGluIGNhc2UgdGhlcmUgaXMganVzdCAweDAwMDAgMHgwMDAwIG9uIHRoZQorCQkgKiBkZXZpY2Ugd2Ugd2FudCB0byBjaGVjay4KKwkJICovCisJCWlmIChkZXYtPnN1YnN5c3RlbV92ZW5kb3IgIT0gMHgwMDAwVSkgeworCQkJc3NfdmVuZG9yID0gZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOworCQkJc3NfZGV2aWNlID0gZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCQl9CisJCWNvbmYgPSBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnM7CisJCWZvciggOyBjb25mLT5zdWJ2ZW5kb3I7IGNvbmYrKykgeworCQkJaWYoY29uZi0+dmVuZG9yID09IGRldi0+dmVuZG9yICYmCisJCQkgICBjb25mLT5kZXZpY2UgPT0gZGV2LT5kZXZpY2UgJiYKKwkJCSAgIGNvbmYtPnN1YnZlbmRvciA9PSBzc192ZW5kb3IgJiYKKwkJCSAgIC8qIFNvbWV0aW1lcyB0aGVzZSBhcmUgY2FjaGVkIHZhbHVlcyAqLworCQkJICAgKGNvbmYtPnN1YmRldmljZSA9PSBzc19kZXZpY2UgfHwKKwkJCSAgICBjb25mLT5zdWJkZXZpY2UgPT0gMHhmZmZmKSkgeworCQkJCXN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24KKwkJCQkJdG1wY29uZjsKKworCQkJCW1lbWNweSgmdG1wY29uZiwgY29uZiwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24pKTsKKworCQkJCS8qCisJCQkJICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzIHdpdGggYW55dGhpbmcKKwkJCQkgKiBwYXNzZWQgaW4gYXMgcGFyYW1ldGVyCisJCQkJICovCisJCQkJaWYgKGlyY2NfY2ZnICE9IDApCisJCQkJCXRtcGNvbmYuY2ZnX2Jhc2UgPSBpcmNjX2NmZzsKKwkJCQlpZiAoaXJjY19maXIgIT0gMCkKKwkJCQkJdG1wY29uZi5maXJfaW8gPSBpcmNjX2ZpcjsKKwkJCQlpZiAoaXJjY19zaXIgIT0gMCkKKwkJCQkJdG1wY29uZi5zaXJfaW8gPSBpcmNjX3NpcjsKKwkJCQlpZiAoaXJjY19kbWEgIT0gMHhmZikKKwkJCQkJdG1wY29uZi5maXJfZG1hID0gaXJjY19kbWE7CisJCQkJaWYgKGlyY2NfaXJxICE9IDB4ZmYpCisJCQkJCXRtcGNvbmYuZmlyX2lycSA9IGlyY2NfaXJxOworCisJCQkJSVJEQV9NRVNTQUdFKCJEZXRlY3RlZCB1bmNvbmZpZ3VyZWQgJXMgU01TQyBJckRBIGNoaXAsIHByZS1jb25maWd1cmluZyBkZXZpY2UuXG4iLCBjb25mLT5uYW1lKTsKKwkJCQlpZiAoY29uZi0+cHJlY29uZmlndXJlKQorCQkJCQlyZXQgPSBjb25mLT5wcmVjb25maWd1cmUoZGV2LCAmdG1wY29uZik7CisJCQkJZWxzZQorCQkJCQlyZXQgPSAtRU5PREVWOworCQkJfQorCQl9CisJCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvLyBDT05GSUdfUENJCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBUcmFuc2NlaXZlcnMgc3BlY2lmaWMgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCBmOWY3N2U0Li5jZmQ2N2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTM1NywxOCArMzU3LDIwIEBACiAJaWYoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkKIAkJcmV0dXJuIGVycjsKIAotCWlmKCEoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7CisJaWYoIShlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgJiYKKwkgICAhKGVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7CiAJCXBjaV91c2luZ19kYWMgPSAxOwogCX0gZWxzZSB7Ci0JCWlmKChlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpIHsKKwkJaWYoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB8fAorCQkgICAoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpIHsKIAkJCUlYR0JfRVJSKCJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXG4iKTsKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycl9kbWFfbWFzazsKIAkJfQogCQlwY2lfdXNpbmdfZGFjID0gMDsKIAl9CiAKIAlpZigoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBpeGdiX2RyaXZlcl9uYW1lKSkpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX3JlcXVlc3RfcmVnaW9uczsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCkBAIC01MDIsNiArNTA0LDkgQEAKIAlmcmVlX25ldGRldihuZXRkZXYpOwogZXJyX2FsbG9jX2V0aGVyZGV2OgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfcmVxdWVzdF9yZWdpb25zOgorZXJyX2RtYV9tYXNrOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCmluZGV4IDZmN2RjZTguLmI2N2Y1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCkBAIC0xNDksNiArMTQ5LDggQEAKIAkJaW50IHN0YXR1czsKIAogCQlkZXYgPSBuZHNbaV07CisJCWlmIChkZXYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwogCiAJCXN0YXR1cyA9IHBtMzM4Nl9pc19saW5rX3VwKGkpOwogCQlpZiAoc3RhdHVzICYmICFuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKQEAgLTE5MSw2ICsxOTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBlbnAyNjExX2luaXRfbW9kdWxlKHZvaWQpCiB7IAorCWludCBwb3J0czsKIAlpbnQgaTsKIAogCWlmICghbWFjaGluZV9pc19lbnAyNjExKCkpCkBAIC0xOTksNyArMjAyLDggQEAKIAljYWxlYl9yZXNldCgpOwogCXBtMzM4Nl9yZXNldCgpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCXBvcnRzID0gcG0zMzg2X3BvcnRfY291bnQoKTsKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgewogCQluZHNbaV0gPSBpeHBkZXZfYWxsb2MoaSwgc2l6ZW9mKHN0cnVjdCBlbnAyNjExX2l4cGRldl9wcml2KSk7CiAJCWlmIChuZHNbaV0gPT0gTlVMTCkgewogCQkJd2hpbGUgKC0taSA+PSAwKQpAQCAtMjE1LDkgKzIxOSwxMCBAQAogCiAJaXhwMjQwMF9tc2ZfaW5pdCgmZW5wMjYxMV9tc2ZfcGFyYW1ldGVycyk7CiAKLQlpZiAoaXhwZGV2X2luaXQoMywgbmRzLCBlbnAyNjExX3NldF9wb3J0X2FkbWluX3N0YXR1cykpIHsKLQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJCWZyZWVfbmV0ZGV2KG5kc1tpXSk7CisJaWYgKGl4cGRldl9pbml0KHBvcnRzLCBuZHMsIGVucDI2MTFfc2V0X3BvcnRfYWRtaW5fc3RhdHVzKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykKKwkJCWlmIChuZHNbaV0pCisJCQkJZnJlZV9uZXRkZXYobmRzW2ldKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9wbTMzODYuYwppbmRleCA1YzdhYjc1Li41MjI0NjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvcG0zMzg2LmMKQEAgLTg2LDQwICs4Niw1MyBAQAogCXBtMzM4Nl9yZWdfd3JpdGUocG9ydCA+PiAxLCByZWcsIHZhbHVlKTsKIH0KIAoraW50IHBtMzM4Nl9zZWNvbmRhcnlfcHJlc2VudCh2b2lkKQoreworCXJldHVybiBwbTMzODZfcmVnX3JlYWQoMSwgMCkgPT0gMHgzMzg2OworfQogCiB2b2lkIHBtMzM4Nl9yZXNldCh2b2lkKQogewogCXU4IG1hY1szXVs2XTsKKwlpbnQgc2Vjb25kYXJ5OworCisJc2Vjb25kYXJ5ID0gcG0zMzg2X3NlY29uZGFyeV9wcmVzZW50KCk7CiAKIAkvKiBTYXZlIHByb2dyYW1tZWQgTUFDIGFkZHJlc3Nlcy4gICovCiAJcG0zMzg2X2dldF9tYWMoMCwgbWFjWzBdKTsKIAlwbTMzODZfZ2V0X21hYygxLCBtYWNbMV0pOwotCXBtMzM4Nl9nZXRfbWFjKDIsIG1hY1syXSk7CisJaWYgKHNlY29uZGFyeSkKKwkJcG0zMzg2X2dldF9tYWMoMiwgbWFjWzJdKTsKIAogCS8qIEFzc2VydCBhbmFsb2cgYW5kIGRpZ2l0YWwgcmVzZXQuICAqLwogCXBtMzM4Nl9yZWdfd3JpdGUoMCwgMHgwMDIsIDB4MDA2MCk7Ci0JcG0zMzg2X3JlZ193cml0ZSgxLCAweDAwMiwgMHgwMDYwKTsKKwlpZiAoc2Vjb25kYXJ5KQorCQlwbTMzODZfcmVnX3dyaXRlKDEsIDB4MDAyLCAweDAwNjApOwogCW1kZWxheSgxKTsKIAogCS8qIERlYXNzZXJ0IGFuYWxvZyByZXNldC4gICovCiAJcG0zMzg2X3JlZ193cml0ZSgwLCAweDAwMiwgMHgwMDYyKTsKLQlwbTMzODZfcmVnX3dyaXRlKDEsIDB4MDAyLCAweDAwNjIpOworCWlmIChzZWNvbmRhcnkpCisJCXBtMzM4Nl9yZWdfd3JpdGUoMSwgMHgwMDIsIDB4MDA2Mik7CiAJbWRlbGF5KDEwKTsKIAogCS8qIERlYXNzZXJ0IGRpZ2l0YWwgcmVzZXQuICAqLwogCXBtMzM4Nl9yZWdfd3JpdGUoMCwgMHgwMDIsIDB4MDA2Myk7Ci0JcG0zMzg2X3JlZ193cml0ZSgxLCAweDAwMiwgMHgwMDYzKTsKKwlpZiAoc2Vjb25kYXJ5KQorCQlwbTMzODZfcmVnX3dyaXRlKDEsIDB4MDAyLCAweDAwNjMpOwogCW1kZWxheSgxMCk7CiAKIAkvKiBSZXN0b3JlIHByb2dyYW1tZWQgTUFDIGFkZHJlc3Nlcy4gICovCiAJcG0zMzg2X3NldF9tYWMoMCwgbWFjWzBdKTsKIAlwbTMzODZfc2V0X21hYygxLCBtYWNbMV0pOwotCXBtMzM4Nl9zZXRfbWFjKDIsIG1hY1syXSk7CisJaWYgKHNlY29uZGFyeSkKKwkJcG0zMzg2X3NldF9tYWMoMiwgbWFjWzJdKTsKIAogCS8qIERpc2FibGUgY2FycmllciBvbiBhbGwgcG9ydHMuICAqLwogCXBtMzM4Nl9zZXRfY2FycmllcigwLCAwKTsKIAlwbTMzODZfc2V0X2NhcnJpZXIoMSwgMCk7Ci0JcG0zMzg2X3NldF9jYXJyaWVyKDIsIDApOworCWlmIChzZWNvbmRhcnkpCisJCXBtMzM4Nl9zZXRfY2FycmllcigyLCAwKTsKIH0KIAogc3RhdGljIHUxNiBzd2FwaCh1MTYgeCkKQEAgLTEyNyw2ICsxNDAsMTEgQEAKIAlyZXR1cm4gKCh4IDw8IDgpIHwgKHggPj4gOCkpICYgMHhmZmZmOwogfQogCitpbnQgcG0zMzg2X3BvcnRfY291bnQodm9pZCkKK3sKKwlyZXR1cm4gMiArIHBtMzM4Nl9zZWNvbmRhcnlfcHJlc2VudCgpOworfQorCiB2b2lkIHBtMzM4Nl9pbml0X3BvcnQoaW50IHBvcnQpCiB7CiAJaW50IHBtID0gcG9ydCA+PiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9wbTMzODYuaCBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvcG0zMzg2LmgKaW5kZXggZmU5MmJiMC4uY2M0MTgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhwMjAwMC9wbTMzODYuaAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIF9fUE0zMzg2X0gKIAogdm9pZCBwbTMzODZfcmVzZXQodm9pZCk7CitpbnQgcG0zMzg2X3BvcnRfY291bnQodm9pZCk7CiB2b2lkIHBtMzM4Nl9pbml0X3BvcnQoaW50IHBvcnQpOwogdm9pZCBwbTMzODZfZ2V0X21hYyhpbnQgcG9ydCwgdTggKm1hYyk7CiB2b2lkIHBtMzM4Nl9zZXRfbWFjKGludCBwb3J0LCB1OCAqbWFjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDlmMjY2MTMuLjQxMWY0ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMjgxLDEwICsyODEsMTYgQEAKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybjsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwogCWV0aF9wb3J0X3Jlc2V0KG1wLT5wb3J0X251bSk7CiAJZXRoX3BvcnRfc3RhcnQoZGV2KTsKLQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisKKwlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50ID49IE1BWF9ERVNDU19QRVJfU0tCKQorCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKIC8qKgpAQCAtNTUyLDkgKzU1OCw5IEBACiAjZWxzZQogCWlmIChldGhfaW50X2NhdXNlICYgRVRIX0lOVF9DQVVTRV9SWCkKIAkJbXY2NDN4eF9ldGhfcmVjZWl2ZV9xdWV1ZShkZXYsIElOVF9NQVgpOworI2VuZGlmCiAJaWYgKGV0aF9pbnRfY2F1c2VfZXh0ICYgRVRIX0lOVF9DQVVTRV9UWCkKIAkJbXY2NDN4eF9ldGhfZnJlZV9jb21wbGV0ZWRfdHhfZGVzY3MoZGV2KTsKLSNlbmRpZgogCiAJLyoKIAkgKiBJZiBubyByZWFsIGludGVycnVwdCBvY2N1cmVkLCBleGl0LgpAQCAtMTE4Niw3ICsxMTkyLDEyIEBACiAKIAlCVUdfT04obmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKTsKIAlCVUdfT04oc2tiID09IE5VTEwpOwotCUJVR19PTihtcC0+dHhfcmluZ19zaXplIC0gbXAtPnR4X2Rlc2NfY291bnQgPCBNQVhfREVTQ1NfUEVSX1NLQik7CisKKwlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50IDwgTUFYX0RFU0NTX1BFUl9TS0IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdHJhbnNtaXQgd2l0aCBxdWV1ZSBmdWxsXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiAxOworCX0KIAogCWlmIChoYXNfdGlueV91bmFsaWduZWRfZnJhZ3Moc2tiKSkgewogCQlpZiAoKHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSkgewpAQCAtMTQwOCw2ICsxNDE5LDggQEAKIAltdjY0M3h4X2V0aF91cGRhdGVfcHNjcihkZXYsICZjbWQpOwogCW12NjQzeHhfc2V0X3NldHRpbmdzKGRldiwgJmNtZCk7CiAKKwlTRVRfTU9EVUxFX09XTkVSKGRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCA3ODI2YWZiLi45MDYyNzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC0yMzgsNyArMjM4LDcgQEAKICNkZWZpbmUgTkFUU0VNSV9SWF9MSU1JVAkyMDQ2CS8qIG1heGltdW0gc3VwcG9ydGVkIGJ5IGhhcmR3YXJlICovCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAgIEtFUk5fSU5GTyBEUlZfTkFNRSAiIGRwODM4MXggZHJpdmVyLCB2ZXJzaW9uICIKICAgICAgIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIlxuIgogICBLRVJOX0lORk8gIiAgb3JpZ2luYWxseSBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUuYyBiL2RyaXZlcnMvbmV0L25lLmMKaW5kZXggMDhiMjE4Yy4uYjMyNzY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUuYworKysgYi9kcml2ZXJzL25ldC9uZS5jCkBAIC0xMzksOCArMTM5LDkgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkpCiAjICBkZWZpbmUgRENSX1ZBTCAweDRiCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QTEFUX09BS1MzMlIpCi0jICBkZWZpbmUgRENSX1ZBTCAweDQ4CisjZWxpZiBkZWZpbmVkKENPTkZJR19QTEFUX09BS1MzMlIpICB8fCBcCisgICBkZWZpbmVkKENPTkZJR19UT1NISUJBX1JCVFg0OTI3KSB8fCBkZWZpbmVkKENPTkZJR19UT1NISUJBX1JCVFg0OTM4KQorIyAgZGVmaW5lIERDUl9WQUwgMHg0OAkJLyogOC1iaXQgbW9kZSAqLwogI2Vsc2UKICMgIGRlZmluZSBEQ1JfVkFMIDB4NDkKICNlbmRpZgpAQCAtMjI2LDcgKzIyNyw3IEBACiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIAogI2lmZGVmIENPTkZJR19UT1NISUJBX1JCVFg0OTM4Ci0JZGV2LT5iYXNlX2FkZHIgPSAweDA3ZjIwMjgwOworCWRldi0+YmFzZV9hZGRyID0gUkJUWDQ5MzhfUlRMXzgwMTlfQkFTRTsKIAlkZXYtPmlycSA9IFJCVFg0OTM4X1JUTF84MDE5X0lSUTsKICNlbmRpZgogCWVyciA9IGRvX25lX3Byb2JlKGRldik7CkBAIC0zOTYsMTAgKzM5NywyMiBAQAogCQkvKiBXZSBtdXN0IHNldCB0aGUgODM5MCBmb3Igd29yZCBtb2RlLiAqLwogCQlvdXRiX3AoRENSX1ZBTCwgaW9hZGRyICsgRU4wX0RDRkcpOwogCQlzdGFydF9wYWdlID0gTkVTTV9TVEFSVF9QRzsKLQkJc3RvcF9wYWdlID0gTkVTTV9TVE9QX1BHOworCisJCS8qCisJCSAqIFJlYWx0ZWsgUlRMODAxOUFTIGRhdGFzaGVldCBzYXlzIHRoYXQgdGhlIFBTVE9QIHJlZ2lzdGVyCisJCSAqIHNob3VsZG4ndCBleGNlZWQgMHg2MCBpbiA4LWJpdCBtb2RlLgorCQkgKiBUaGlzIGNoaXAgY2FuIGJlIGlkZW50aWZpZWQgYnkgcmVhZGluZyB0aGUgc2lnbmF0dXJlIGZyb20KKwkJICogdGhlICByZW1vdGUgYnl0ZSBjb3VudCByZWdpc3RlcnMgKG90aGVyd2lzZSB3cml0ZS1vbmx5KS4uLgorCQkgKi8KKwkJaWYgKChEQ1JfVkFMICYgMHgwMSkgPT0gMCAmJgkJLyogOC1iaXQgbW9kZSAqLworCQkgICAgaW5iKGlvYWRkciArIEVOMF9SQ05UTE8pID09IDB4NTAgJiYKKwkJICAgIGluYihpb2FkZHIgKyBFTjBfUkNOVEhJKSA9PSAweDcwKQorCQkJc3RvcF9wYWdlID0gMHg2MDsKKwkJZWxzZQorCQkJc3RvcF9wYWdlID0gTkVTTV9TVE9QX1BHOwogCX0gZWxzZSB7CiAJCXN0YXJ0X3BhZ2UgPSBORTFTTV9TVEFSVF9QRzsKLQkJc3RvcF9wYWdlID0gTkUxU01fU1RPUF9QRzsKKwkJc3RvcF9wYWdlICA9IE5FMVNNX1NUT1BfUEc7CiAJfQogCiAjaWYgIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfT0FLUzMyUikKQEAgLTUwOSwxNSArNTIyLDkgQEAKIAllaV9zdGF0dXMubmFtZSA9IG5hbWU7CiAJZWlfc3RhdHVzLnR4X3N0YXJ0X3BhZ2UgPSBzdGFydF9wYWdlOwogCWVpX3N0YXR1cy5zdG9wX3BhZ2UgPSBzdG9wX3BhZ2U7Ci0jaWYgZGVmaW5lZChDT05GSUdfVE9TSElCQV9SQlRYNDkyNykgfHwgZGVmaW5lZChDT05GSUdfVE9TSElCQV9SQlRYNDkzOCkKLQl3b3JkbGVuZ3RoID0gMTsKLSNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BMQVRfT0FLUzMyUgotCWVpX3N0YXR1cy53b3JkMTYgPSAwOwotI2Vsc2UKLQllaV9zdGF0dXMud29yZDE2ID0gKHdvcmRsZW5ndGggPT0gMik7Ci0jZW5kaWYKKwkvKiBVc2UgMTYtYml0IG1vZGUgb25seSBpZiB0aGlzIHdhc24ndCBvdmVycmlkZGVuIGJ5IERDUl9WQUwgKi8KKwllaV9zdGF0dXMud29yZDE2ID0gKHdvcmRsZW5ndGggPT0gMiAmJiAoRENSX1ZBTCAmIDB4MDEpKTsKIAogCWVpX3N0YXR1cy5yeF9zdGFydF9wYWdlID0gc3RhcnRfcGFnZSArIFRYX1BBR0VTOwogI2lmZGVmIFBBQ0tFVEJVRl9NRU1TSVpFCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCBkMTE4MjFkLi5jZWQ5ZmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTY0NSw5ICs2NDUsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlpZiAoIWRldikKLQkJQlVHKCk7Ci0KKwlCVUdfT04oIWRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTkVfSU9fRVhURU5UKTsKIAlmcmVlX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IGVkZDFiNTMuLmJmNThkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTg3LDYgKzg3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGUgPSB7CisJLm5hbWUgPSAibmV0Y29uIiwKIAkuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9QUklOVEJVRkZFUiwKIAkud3JpdGUgPSB3cml0ZV9tc2cKIH07CkBAIC05NCw3ICs5NSw3IEBACiBzdGF0aWMgaW50IG9wdGlvbl9zZXR1cChjaGFyICpvcHQpCiB7CiAJY29uZmlndXJlZCA9ICFuZXRwb2xsX3BhcnNlX29wdGlvbnMoJm5wLCBvcHQpOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBfX3NldHVwKCJuZXRjb25zb2xlPSIsIG9wdGlvbl9zZXR1cCk7CkBAIC0xMDYsNyArMTA3LDcgQEAKIAogCWlmKCFjb25maWd1cmVkKSB7CiAJCXByaW50aygibmV0Y29uc29sZTogbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOwogCX0KIAogCWlmKG5ldHBvbGxfc2V0dXAoJm5wKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCA4ZTliMWE1Li43MDZhZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC01NjgsOCArNTY4LDcgQEAKICNlbmRpZgogCiAJc2cgPSBkZXYtPnJ4X2luZm8uZGVzY3MgKyAobmV4dF9lbXB0eSAqIERFU0NfU0laRSk7Ci0JaWYgKHVubGlrZWx5KE5VTEwgIT0gZGV2LT5yeF9pbmZvLnNrYnNbbmV4dF9lbXB0eV0pKQotCQlCVUcoKTsKKwlCVUdfT04oTlVMTCAhPSBkZXYtPnJ4X2luZm8uc2tic1tuZXh0X2VtcHR5XSk7CiAJZGV2LT5yeF9pbmZvLnNrYnNbbmV4dF9lbXB0eV0gPSBza2I7CiAKIAlkZXYtPnJ4X2luZm8ubmV4dF9lbXB0eSA9IChuZXh0X2VtcHR5ICsgMSkgJSBOUl9SWF9ERVNDOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCBjZTkwYmVjLi5mYWI5MzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAjZGVmaW5lIE1FRElBX1RQCTB4MDBDMAkvKiBFbmFibGUgbGluayBiZWF0IGFuZCBqYWJiZXIgZm9yIDEwYmFzZVQuICovCiAKIHN0cnVjdCBlbDNfcHJpdmF0ZSB7Ci0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdTE2IGFkdmVydGlzaW5nLCBwYXJ0bmVyOwkJLyogTldheSBtZWRpYSBhZHZlcnRpc2VtZW50ICovCkBAIC0yMjUsOCArMjI1LDggQEAKIAogLyogSW5kZXggb2YgZnVuY3Rpb25zLiAqLwogCi1zdGF0aWMgdm9pZCB0YzU3NF9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCB0YzU3NF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCB0YzU3NF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgdGM1NzRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB2b2lkIG1kaW9fc3luYyhraW9fYWRkcl90IGlvYWRkciwgaW50IGJpdHMpOwogc3RhdGljIGludCBtZGlvX3JlYWQoa2lvX2FkZHJfdCBpb2FkZHIsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbik7CkBAIC0yNTYsMTAgKzI1Niw5IEBACiAJd2l0aCBDYXJkIFNlcnZpY2VzLgogKi8KIAotc3RhdGljIGludCB0YzU3NF9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB0YzU3NF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwOwotCWRldl9saW5rX3QgKmxpbms7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCURFQlVHKDAsICIzYzU3NF9hdHRhY2goKVxuIik7CkBAIC0yNjksOCArMjY4LDggQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWxpbmsgPSAmbHAtPmxpbms7CiAJbGluay0+cHJpdiA9IGRldjsKKwlscC0+cF9kZXYgPSBsaW5rOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxwLT53aW5kb3dfbG9jayk7CiAJbGluay0+aW8uTnVtUG9ydHMxID0gMzI7CkBAIC0yODAsNyArMjc5LDYgQEAKIAlsaW5rLT5pcnEuSGFuZGxlciA9ICZlbDNfaW50ZXJydXB0OwogCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0JbGluay0+Y29uZi5WY2MgPSA1MDsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTI5OCwxMyArMjk2LDcgQEAKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKICNlbmRpZgogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXRjNTc0X2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiB0YzU3NF9jb25maWcobGluayk7CiB9IC8qIHRjNTc0X2F0dGFjaCAqLwogCiAvKgpAQCAtMzE2LDE4ICszMDgsMTYgQEAKIAogKi8KIAotc3RhdGljIHZvaWQgdGM1NzRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHRjNTc0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICIzYzU3NF9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0JaWYgKGxpbmstPmRldikKKwlpZiAobGluay0+ZGV2X25vZGUpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQl0YzU3NF9yZWxlYXNlKGxpbmspOworCXRjNTc0X3JlbGVhc2UobGluayk7CiAKIAlmcmVlX25ldGRldihkZXYpOwogfSAvKiB0YzU3NF9kZXRhY2ggKi8KQEAgLTM0Myw5ICszMzMsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcmFtX3NwbGl0W10gPSB7IjU6MyIsICIzOjEiLCAiMToxIiwgIjM6NSJ9OwogCi1zdGF0aWMgdm9pZCB0YzU3NF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgdGM1NzRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdHVwbGVfdCB0dXBsZTsKQEAgLTM2MywzMCArMzUyLDI3IEBACiAKIAl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KIAlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwogCWZvciAoaSA9IGogPSAwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewogCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7Ci0JCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQlpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKIAl9CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogCWRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtMzk3LDggKzM4Myw4IEBACiAJICAgdGhlIGhhcmR3YXJlIGFkZHJlc3MuICBUaGUgZnV0dXJlIHByb2R1Y3RzIG1heSBpbmNsdWRlIGEgbW9kZW0gY2hpcAogCSAgIGFuZCBwdXQgdGhlIGFkZHJlc3MgaW4gdGhlIENJUy4gKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSAweDg4OwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSB7Ci0JCXBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSk7CisJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSB7CisJCXBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogCQkJcGh5c19hZGRyW2ldID0gaHRvbnMoYnVmW2ldKTsKIAl9IGVsc2UgewpAQCAtNDEyLDkgKzM5OCw5IEBACiAJCX0KIAl9CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUyAmJgotCQlwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MgJiYKLQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKKwlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MgJiYKKwkJcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUyAmJgorCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKIAkJY2FyZG5hbWUgPSBwYXJzZS52ZXJzaW9uXzEuc3RyICsgcGFyc2UudmVyc2lvbl8xLm9mc1sxXTsKIAl9IGVsc2UKIAkJY2FyZG5hbWUgPSAiM0NvbSAzYzU3NCI7CkBAIC00NzMsMTMgKzQ1OSwxMiBAQAogCQl9CiAJfQogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlsaW5rLT5kZXYgPSAmbHAtPm5vZGU7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihoYW5kbGUpKTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZscC0+bm9kZTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiM2M1NzRfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0JCWxpbmstPmRldiA9IE5VTEw7CisJCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC00OTMsMTMgKzQ3OCwxMyBAQAogCQkgICA4IDw8IGNvbmZpZy51LnJhbV9zaXplLCByYW1fc3BsaXRbY29uZmlnLnUucmFtX3NwbGl0XSwKIAkJICAgY29uZmlnLnUuYXV0b3NlbGVjdCA/ICJhdXRvc2VsZWN0ICIgOiAiIik7CiAKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJdGM1NzRfcmVsZWFzZShsaW5rKTsKLQlyZXR1cm47CisJcmV0dXJuIC1FTk9ERVY7CiAKIH0gLyogdGM1NzRfY29uZmlnICovCiAKQEAgLTUwOSw0NCArNDk0LDI4IEBACiAJc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCiAqLwogCi1zdGF0aWMgdm9pZCB0YzU3NF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCB0YzU3NF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURFQlVHKDAsICIzYzU3NF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgdGM1NzRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHRjNTc0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQorCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YzU3NF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB0YzU3NF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZiAobGluay0+b3BlbikgewotCQkJdGM1NzRfcmVzZXQoZGV2KTsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCXRjNTc0X3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc1Nyw5ICs3MjYsOSBAQAogc3RhdGljIGludCBlbDNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKLQlpZiAoIURFVl9PSyhsaW5rKSkKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJCiAJbGluay0+b3BlbisrOwpAQCAtMTIwMywxMSArMTE3MiwxMSBAQAogewogCWtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JZGV2X2xpbmtfdCAqbGluayA9ICZscC0+bGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5wX2RldjsKIAogCURFQlVHKDIsICIlczogc2h1dHRpbmcgZG93biBldGhlcmNhcmQuXG4iLCBkZXYtPm5hbWUpOwogCQotCWlmIChERVZfT0sobGluaykpIHsKKwlpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJLyogVHVybiBvZmYgc3RhdGlzdGljcyBBU0FQLiAgV2UgdXBkYXRlIGxwLT5zdGF0cyBiZWxvdy4gKi8KQEAgLTEyNDYsNyArMTIxNSw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gIjNjNTc0X2NzIiwKIAl9LAotCS5wcm9iZQkJPSB0YzU3NF9hdHRhY2gsCisJLnByb2JlCQk9IHRjNTc0X3Byb2JlLAogCS5yZW1vdmUJCT0gdGM1NzRfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHRjNTc0X2lkcywKIAkuc3VzcGVuZAk9IHRjNTc0X3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDNkYmE1MDguLjg3NWEwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKICNkZWZpbmUgVFhfVElNRU9VVAkoKDQwMCpIWikvMTAwMCkKIAogc3RydWN0IGVsM19wcml2YXRlIHsKLSAgICBkZXZfbGlua190CQlsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90IAkJbm9kZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgICAvKiBGb3IgdHJhbnNjZWl2ZXIgbW9uaXRvcmluZyAqLwpAQCAtMTQyLDggKzE0Miw4IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCB0YzU4OV9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCB0YzU4OV9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCB0YzU4OV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgdGM1ODlfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB1MTYgcmVhZF9lZXByb20oa2lvX2FkZHJfdCBpb2FkZHIsIGludCBpbmRleCk7CiBzdGF0aWMgdm9pZCB0YzU4OV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTE3MCwxMCArMTcwLDkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgdGM1ODlfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgdGM1ODlfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IGVsM19wcml2YXRlICpscDsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKICAgICBERUJVRygwLCAiM2M1ODlfYXR0YWNoKClcbiIpOwpAQCAtMTgzLDggKzE4Miw4IEBACiAgICAgaWYgKCFkZXYpCiAJIHJldHVybiAtRU5PTUVNOwogICAgIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBsaW5rID0gJmxwLT5saW5rOwogICAgIGxpbmstPnByaXYgPSBkZXY7CisgICAgbHAtPnBfZGV2ID0gbGluazsKIAogICAgIHNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CiAgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMTY7CkBAIC0xOTQsNyArMTkzLDYgQEAKICAgICBsaW5rLT5pcnEuSGFuZGxlciA9ICZlbDNfaW50ZXJydXB0OwogICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTIxMywxMyArMjExLDcgQEAKICNlbmRpZgogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIHRjNTg5X2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiB0YzU4OV9jb25maWcobGluayk7CiB9IC8qIHRjNTg5X2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIzMSwxOCArMjIzLDE2IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCB0YzU4OV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgdGM1ODlfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgREVCVUcoMCwgIjNjNTg5X2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpZiAobGluay0+ZGV2KQorICAgIGlmIChsaW5rLT5kZXZfbm9kZSkKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQl0YzU4OV9yZWxlYXNlKGxpbmspOworICAgIHRjNTg5X3JlbGVhc2UobGluayk7CiAKICAgICBmcmVlX25ldGRldihkZXYpOwogfSAvKiB0YzU4OV9kZXRhY2ggKi8KQEAgLTI1OCw5ICsyNDgsOCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCB0YzU4OV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgdGM1ODlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdHVwbGVfdCB0dXBsZTsKQEAgLTI3NSw0MyArMjY0LDQwIEBACiAgICAgcGh5c19hZGRyID0gKHUxNiAqKWRldi0+ZGV2X2FkZHI7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogICAgIAogICAgIC8qIElzIHRoaXMgYSAzYzU2Mj8gKi8KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwotICAgIGlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgJiYKLQkocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSkgeworICAgIGlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpICYmCisJKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpKSB7CiAJaWYgKGxlMTZfdG9fY3B1KGJ1ZlswXSkgIT0gTUFORklEXzNDT00pCiAJICAgIHByaW50ayhLRVJOX0lORk8gIjNjNTg5X2NzOiBobW1tLCBpcyB0aGlzIHJlYWxseSBhICIKIAkJICAgIjNDb20gY2FyZD8/XG4iKTsKIAltdWx0aSA9IChsZTE2X3RvX2NwdShidWZbMV0pID09IFBST0RJRF8zQ09NXzNDNTYyKTsKICAgICB9Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwogCiAgICAgLyogRm9yIHRoZSAzYzU2MiwgdGhlIGJhc2UgYWRkcmVzcyBtdXN0IGJlIHh4MDAteHg3ZiAqLwogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMTY7CiAgICAgZm9yIChpID0gaiA9IDA7IGogPCAweDQwMDsgaiArPSAweDEwKSB7CiAJaWYgKG11bHRpICYmIChqICYgMHg4MCkpIGNvbnRpbnVlOwogCWxpbmstPmlvLkJhc2VQb3J0MSA9IGogXiAweDMwMDsKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwogICAgIH0KICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCQogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtMzIxLDggKzMwNyw4IEBACiAgICAgLyogVGhlIDNjNTg5IGhhcyBhbiBleHRyYSBFRVBST00gZm9yIGNvbmZpZ3VyYXRpb24gaW5mbywgaW5jbHVkaW5nCiAgICAgICAgdGhlIGhhcmR3YXJlIGFkZHJlc3MuICBUaGUgM2M1NjIgcHV0cyB0aGUgYWRkcmVzcyBpbiB0aGUgQ0lTLiAqLwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IDB4ODg7Ci0gICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpIHsKLQlwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpOworICAgIGlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgeworCXBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJICAgIHBoeXNfYWRkcltpXSA9IGh0b25zKGJ1ZltpXSk7CiAgICAgfSBlbHNlIHsKQEAgLTM0NiwxMyArMzMyLDEyIEBACiAgICAgZWxzZQogCXByaW50ayhLRVJOX0VSUiAiM2M1ODlfY3M6IGludmFsaWQgaWZfcG9ydCByZXF1ZXN0ZWRcbiIpOwogICAgIAotICAgIGxpbmstPmRldiA9ICZscC0+bm9kZTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmbHAtPm5vZGU7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCXByaW50ayhLRVJOX0VSUiAiM2M1ODlfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0JbGluay0+ZGV2ID0gTlVMTDsKKwlsaW5rLT5kZXZfbm9kZSA9IE5VTEw7CiAJZ290byBmYWlsZWQ7CiAgICAgfQogCkBAIC0zNjYsMTQgKzM1MSwxMyBAQAogICAgIHByaW50ayhLRVJOX0lORk8gIiAgJWRLIEZJRk8gc3BsaXQgJXMgUng6VHgsICVzIHhjdnJcbiIsCiAJICAgKGZpZm8gJiA3KSA/IDMyIDogOCwgcmFtX3NwbGl0WyhmaWZvID4+IDE2KSAmIDNdLAogCSAgIGlmX25hbWVzW2Rldi0+aWZfcG9ydF0pOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICB0YzU4OV9yZWxlYXNlKGxpbmspOwotICAgIHJldHVybjsKLSAgICAKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogdGM1ODlfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzg0LDQ0ICszNjgsMjggQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCB0YzU4OV9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCB0YzU4OV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIERFQlVHKDAsICIzYzU4OV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLSAgICAKLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCB0YzU4OV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgdGM1ODlfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pCi0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9CisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRjNTg5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHRjNTg5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQl0YzU4OV9yZXNldChkZXYpOwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9CisgCWlmIChsaW5rLT5vcGVuKSB7CisJCXRjNTg5X3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU4Nyw5ICs1NTUsOSBAQAogc3RhdGljIGludCBlbDNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAgICAgCi0gICAgaWYgKCFERVZfT0sobGluaykpCisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJcmV0dXJuIC1FTk9ERVY7CiAKICAgICBsaW5rLT5vcGVuKys7CkBAIC04NDgsOSArODE2LDkgQEAKIHsKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKLSAgICBpZiAoREVWX09LKGxpbmspKSB7CisgICAgaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogICAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAl1cGRhdGVfc3RhdHMoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwpAQCAtOTUwLDExICs5MTgsMTEgQEAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAgICAga2lvX2FkZHJfdCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgICB1MTYgb3B0cyA9IFNldFJ4RmlsdGVyIHwgUnhTdGF0aW9uIHwgUnhCcm9hZGNhc3Q7CiAKLSAgICBpZiAoIShERVZfT0sobGluaykpKSByZXR1cm47CisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHJldHVybjsKICAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCW9wdHMgfD0gUnhNdWx0aWNhc3QgfCBSeFByb207CiAgICAgZWxzZSBpZiAoZGV2LT5tY19jb3VudCB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpCkBAIC05NjUsMTIgKzkzMywxMiBAQAogc3RhdGljIGludCBlbDNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmxwLT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgCiAgICAgREVCVUcoMSwgIiVzOiBzaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7CiAKLSAgICBpZiAoREVWX09LKGxpbmspKSB7CisgICAgaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogCS8qIFR1cm4gb2ZmIHN0YXRpc3RpY3MgQVNBUC4gIFdlIHVwZGF0ZSBscC0+c3RhdHMgYmVsb3cuICovCiAJb3V0dyhTdGF0c0Rpc2FibGUsIGlvYWRkciArIEVMM19DTUQpOwogCQpAQCAtMTAyMCw3ICs5ODgsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICIzYzU4OV9jcyIsCiAJfSwKLQkucHJvYmUJCT0gdGM1ODlfYXR0YWNoLAorCS5wcm9iZQkJPSB0YzU4OV9wcm9iZSwKIAkucmVtb3ZlCQk9IHRjNTg5X2RldGFjaCwKICAgICAgICAgLmlkX3RhYmxlICAgICAgID0gdGM1ODlfaWRzLAogCS5zdXNwZW5kCT0gdGM1ODlfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKaW5kZXggMWNjOTRiMi4uMmVhNjZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKQEAgLTg2LDggKzg2LDggQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF4bmV0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIGF4bmV0X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGF4bmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBheG5ldF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyBpbnQgYXhuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXhuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwpAQCAtMTE3LDcgKzExNyw3IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogdHlwZWRlZiBzdHJ1Y3QgYXhuZXRfZGV2X3QgewotICAgIGRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3QJCW5vZGU7CiAgICAgY2FkZHJfdAkJYmFzZTsKICAgICBzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZzsKQEAgLTE0MiwxMCArMTQyLDkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgYXhuZXRfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYXhuZXRfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgYXhuZXRfZGV2X3QgKmluZm87Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAgICAgREVCVUcoMCwgImF4bmV0X2F0dGFjaCgpXG4iKTsKQEAgLTE1Nyw3ICsxNTYsNyBAQAogCXJldHVybiAtRU5PTUVNOwogCiAgICAgaW5mbyA9IFBSSVYoZGV2KTsKLSAgICBsaW5rID0gJmluZm8tPmxpbms7CisgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBkZXY7CiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CiAgICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwpAQCAtMTY5LDEzICsxNjgsNyBAQAogICAgIGRldi0+ZG9faW9jdGwgPSAmYXhuZXRfaW9jdGw7CiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgYXhuZXRfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGF4bmV0X2NvbmZpZyhsaW5rKTsKIH0gLyogYXhuZXRfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTg3LDE4ICsxODAsMTYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF4bmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBheG5ldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKICAgICBERUJVRygwLCAiYXhuZXRfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5kZXYpCisgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCWF4bmV0X3JlbGVhc2UobGluayk7CisgICAgYXhuZXRfcmVsZWFzZShsaW5rKTsKIAogICAgIGZyZWVfbmV0ZGV2KGRldik7CiB9IC8qIGF4bmV0X2RldGFjaCAqLwpAQCAtMjA5LDcgKzIwMCw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGdldF9wcm9tKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGdldF9wcm9tKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0yNjMsNyArMjU0LDcgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGludCB0cnlfaW9fcG9ydChkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCB0cnlfaW9fcG9ydChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpbnQgaiwgcmV0OwogICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEgPT0gMzIpIHsKQEAgLTI4NCwyNSArMjc1LDIzIEBACiAJZm9yIChqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKIAkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwogCSAgICBsaW5rLT5pby5CYXNlUG9ydDIgPSAoaiBeIDB4MzAwKSArIDB4MTA7Ci0JICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkgICAgaWYgKHJldCA9PSBDU19TVUNDRVNTKSByZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gcmV0OwogICAgIH0gZWxzZSB7Ci0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGF4bmV0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBheG5ldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBheG5ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgaW50IGksIGosIGxhc3RfcmV0LCBsYXN0X2ZuOwogICAgIHVfc2hvcnQgYnVmWzY0XTsKLSAgICBjb25maWdfaW5mb190IGNvbmY7CiAKICAgICBERUJVRygwLCAiYXhuZXRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIApAQCAtMzExLDI5ICszMDAsMjIgQEAKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgLyogZG9uJ3QgdHJ1c3QgdGhlIENJUyBvbiB0aGlzOyBMaW5rc3lzIGdvdCBpdCB3cm9uZyAqLwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IDB4NjM7CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KLSAgICAvKiBMb29rIHVwIGN1cnJlbnQgVmNjICovCi0gICAgQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOwotCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgd2hpbGUgKGxhc3RfcmV0ID09IENTX1NVQ0NFU1MpIHsKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwogCWNpc3RwbF9pb190ICppbyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeS5pbyk7CiAJCi0JaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCB8fAorCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCB8fAogCQljZmctPmluZGV4ID09IDAgfHwgY2ZnLT5pby5ud2luID09IDApCiAJICAgIGdvdG8gbmV4dF9lbnRyeTsKIAkKQEAgLTM1NSwyMSArMzM3LDIxIEBACiAJICAgIGlmIChsYXN0X3JldCA9PSBDU19TVUNDRVNTKSBicmVhazsKIAl9CiAgICAgbmV4dF9lbnRyeToKLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSk7CisJbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKTsKICAgICB9CiAgICAgaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKLQljc19lcnJvcihoYW5kbGUsIFJlcXVlc3RJTywgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgbGFzdF9yZXQpOwogCWdvdG8gZmFpbGVkOwogICAgIH0KIAotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShoYW5kbGUsICZsaW5rLT5pcnEpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogICAgIAogICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czIgPT0gOCkgewogCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CiAgICAgfQogICAgIAotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCkBAIC00MDYsNyArMzg4LDcgQEAKICAgICAgICBCaXQgMiBvZiBDQ1NSIGlzIGFjdGl2ZSBsb3cuICovIAogICAgIGlmIChpID09IDMyKSB7CiAJY29uZl9yZWdfdCByZWcgPSB7IDAsIENTX1dSSVRFLCBDSVNSRUdfQ0NTUiwgMHgwNCB9OwotIAlwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKyAJcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJICAgIGogPSBtZGlvX3JlYWQoZGV2LT5iYXNlX2FkZHIgKyBBWE5FVF9NSUlfRUVQLCBpLCAxKTsKIAkgICAgaWYgKChqICE9IDApICYmIChqICE9IDB4ZmZmZikpIGJyZWFrOwpAQCAtNDE0LDEzICszOTYsMTIgQEAKICAgICB9CiAKICAgICBpbmZvLT5waHlfaWQgPSAoaSA8IDMyKSA/IGkgOiAtMTsKLSAgICBsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKKyAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAogICAgIGlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJheG5ldF9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKLQlsaW5rLT5kZXYgPSBOVUxMOworCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTQzNiwxNCArNDE3LDEzIEBACiAgICAgfSBlbHNlIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgIiAgTm8gTUlJIHRyYW5zY2VpdmVycyBmb3VuZCFcbiIpOwogICAgIH0KLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgYXhuZXRfcmVsZWFzZShsaW5rKTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogYXhuZXRfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDU0LDQ1ICs0MzQsMjkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF4bmV0X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGF4bmV0X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgREVCVUcoMCwgImF4bmV0X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwotCi0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCBheG5ldF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYXhuZXRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pCi0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9CisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF4bmV0X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGF4bmV0X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQlheG5ldF9yZXNldF84MzkwKGRldik7Ci0JCQlBWDg4MTkwX2luaXQoZGV2LCAxKTsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCWF4bmV0X3Jlc2V0XzgzOTAoZGV2KTsKKwkJQVg4ODE5MF9pbml0KGRldiwgMSk7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU2MiwxMSArNTI2LDExIEBACiBzdGF0aWMgaW50IGF4bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBheG5ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmluZm8tPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBpbmZvLT5wX2RldjsKICAgICAKICAgICBERUJVRygyLCAiYXhuZXRfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAotICAgIGlmICghREVWX09LKGxpbmspKQorICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCXJldHVybiAtRU5PREVWOwogCiAgICAgbGluay0+b3BlbisrOwpAQCAtNTg4LDcgKzU1Miw3IEBACiBzdGF0aWMgaW50IGF4bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgYXhuZXRfZGV2X3QgKmluZm8gPSBQUklWKGRldik7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9ICZpbmZvLT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gaW5mby0+cF9kZXY7CiAKICAgICBERUJVRygyLCAiYXhuZXRfY2xvc2UoJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKQEAgLTgzMyw3ICs3OTcsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJheG5ldF9jcyIsCiAJfSwKLQkucHJvYmUJCT0gYXhuZXRfYXR0YWNoLAorCS5wcm9iZQkJPSBheG5ldF9wcm9iZSwKIAkucmVtb3ZlCQk9IGF4bmV0X2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBheG5ldF9pZHMsCiAJLnN1c3BlbmQJPSBheG5ldF9zdXNwZW5kLApAQCAtMTU5Niw3ICsxNTYwLDcgQEAKIAogc3RhdGljIHZvaWQgZWlfcnhfb3ZlcnJ1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWF4bmV0X2Rldl90ICppbmZvID0gKGF4bmV0X2Rldl90ICopZGV2OworCWF4bmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwogCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogCXVuc2lnbmVkIGNoYXIgd2FzX3R4aW5nLCBtdXN0X3Jlc2VuZCA9IDA7CiAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTcyNywxNyArMTY5MSw2IEBACiAJCW1lbXNldChlaV9sb2NhbC0+bWNmaWx0ZXIsIDB4RkYsIDgpOwogCX0KIAotCS8qIAotCSAqIERQODM5MCBtYW51YWxzIGRvbid0IHNwZWNpZnkgYW55IG1hZ2ljIHNlcXVlbmNlIGZvciBhbHRlcmluZwotCSAqIHRoZSBtdWx0aWNhc3QgcmVncyBvbiBhbiBhbHJlYWR5IHJ1bm5pbmcgY2FyZC4gVG8gYmUgc2FmZSwgd2UKLQkgKiBlbnN1cmUgbXVsdGljYXN0IG1vZGUgaXMgb2ZmIHByaW9yIHRvIGxvYWRpbmcgdXAgdGhlIG5ldyBoYXNoCi0JICogdGFibGUuIElmIHRoaXMgcHJvdmVzIHRvIGJlIG5vdCBlbm91Z2gsIHdlIGNhbiBhbHdheXMgcmVzb3J0Ci0JICogdG8gc3RvcHBpbmcgdGhlIE5JQywgbG9hZGluZyB0aGUgdGFibGUgYW5kIHRoZW4gcmVzdGFydGluZy4KLQkgKi8KLQkgCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJb3V0Yl9wKEU4MzkwX1JYQ09ORklHLCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwotCiAJb3V0Yl9wKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEsIGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpOwogCWZvcihpID0gMDsgaSA8IDg7IGkrKykgCiAJewpAQCAtMTc1MSw2ICsxNzA0LDggQEAKICAgCQlvdXRiX3AoRTgzOTBfUlhDT05GSUcgfCAweDQ4LCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwogICAJZWxzZQogICAJCW91dGJfcChFODM5MF9SWENPTkZJRyB8IDB4NDAsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7CisKKwlvdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RBUlQsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9jb20yMDAyMF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKaW5kZXggMjgyN2E0OC4uNDQxZGU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKQEAgLTExOCw4ICsxMTgsOCBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgY29tMjAwMjBfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgY29tMjAwMjBfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgY29tMjAwMjBfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGNvbTIwMDIwX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiBzdGF0aWMgdm9pZCBjb20yMDAyMF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIApAQCAtMTM4LDkgKzEzOCw4IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGNvbTIwMDIwX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGNvbTIwMDIwX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIGNvbTIwMDIwX2Rldl90ICppbmZvOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgc3RydWN0IGFyY25ldF9sb2NhbCAqbHA7CkBAIC0xNDgsMTAgKzE0Nyw2IEBACiAgICAgREVCVUcoMCwgImNvbTIwMDIwX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIENyZWF0ZSBuZXcgbmV0d29yayBkZXZpY2UgKi8KLSAgICBsaW5rID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIWxpbmspCi0JcmV0dXJuIC1FTk9NRU07Ci0KICAgICBpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbTIwMDIwX2Rldl90KSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFpbmZvKQogCWdvdG8gZmFpbF9hbGxvY19pbmZvOwpAQCAtMTYxLDcgKzE1Niw2IEBACiAJZ290byBmYWlsX2FsbG9jX2RldjsKIAogICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGNvbTIwMDIwX2Rldl90KSk7Ci0gICAgbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOwogICAgIGxwID0gZGV2LT5wcml2OwogICAgIGxwLT50aW1lb3V0ID0gdGltZW91dDsKICAgICBscC0+YmFja3BsYW5lID0gYmFja3BsYW5lOwpAQCAtMTcyLDI4ICsxNjYsMjMgQEAKICAgICAvKiBmaWxsIGluIG91ciBtb2R1bGUgcGFyYW1ldGVycyBhcyBkZWZhdWx0cyAqLwogICAgIGRldi0+ZGV2X2FkZHJbMF0gPSBub2RlOwogCi0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKLSAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLSAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKKyAgICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgICBwX2Rldi0+aW8uTnVtUG9ydHMxID0gMTY7CisgICAgcF9kZXYtPmlvLklPQWRkckxpbmVzID0gMTY7CisgICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworICAgIHBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisgICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKyAgICBwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisgICAgcF9kZXYtPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0gICAgbGluay0+aXJxLkluc3RhbmNlID0gaW5mby0+ZGV2ID0gZGV2OwotICAgIGxpbmstPnByaXYgPSBpbmZvOworICAgIHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBpbmZvLT5kZXYgPSBkZXY7CisgICAgcF9kZXYtPnByaXYgPSBpbmZvOwogCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQ7Ci0gICAgY29tMjAwMjBfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbTIwMDIwX2NvbmZpZyhwX2Rldik7CiAKIGZhaWxfYWxsb2NfZGV2OgogICAgIGtmcmVlKGluZm8pOwogZmFpbF9hbGxvY19pbmZvOgotICAgIGtmcmVlKGxpbmspOwogICAgIHJldHVybiAtRU5PTUVNOwogfSAvKiBjb20yMDAyMF9hdHRhY2ggKi8KIApAQCAtMjA2LDkgKzE5NSw4IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBjb20yMDAyMF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgY29tMjAwMjBfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogICAgIHN0cnVjdCBjb20yMDAyMF9kZXZfdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKIApAQCAtMjE2LDcgKzIwNCw3IEBACiAKICAgICBERUJVRygwLCAiY29tMjAwMjBfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5kZXYpIHsKKyAgICBpZiAobGluay0+ZGV2X25vZGUpIHsKIAlERUJVRygxLCJ1bnJlZ2lzdGVyLi4uXG4iKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC0yMjksOCArMjE3LDcgQEAKIAkgICAgZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAgICAgfQogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLSAgICAgICAgY29tMjAwMjBfcmVsZWFzZShsaW5rKTsKKyAgICBjb20yMDAyMF9yZWxlYXNlKGxpbmspOwogCiAgICAgLyogVW5saW5rIGRldmljZSBzdHJ1Y3R1cmUsIGZyZWUgYml0cyAqLwogICAgIERFQlVHKDEsInVubGlua2luZy4uLlxuIik7CkBAIC0yNDUsOCArMjMyLDYgQEAKIAlERUJVRygxLCJrZnJlZTIuLi5cbiIpOwogCWtmcmVlKGluZm8pOwogICAgIH0KLSAgICBERUJVRygxLCJrZnJlZTMuLi5cbiIpOwotICAgIGtmcmVlKGxpbmspOwogCiB9IC8qIGNvbTIwMDIwX2RldGFjaCAqLwogCkBAIC0yNjEsMTAgKzI0Niw5IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIGNvbTIwMDIwX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBjb20yMDAyMF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IGFyY25ldF9sb2NhbCAqbHA7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgY29tMjAwMjBfZGV2X3QgKmluZm87CkBAIC0yNzMsNyArMjU3LDYgQEAKICAgICB1X2NoYXIgYnVmWzY0XTsKICAgICBpbnQgaW9hZGRyOwogCi0gICAgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIGluZm8gPSBsaW5rLT5wcml2OwogICAgIGRldiA9IGluZm8tPmRldjsKIApAQCAtMjg2LDE0ICsyNjksMTEgQEAKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICBERUJVRygxLCJhcmNuZXQ6IGJhc2Vwb3J0MSBpcyAlWGhcbiIsIGxpbmstPmlvLkJhc2VQb3J0MSk7CiAgICAgaSA9ICFDU19TVUNDRVNTOwogICAgIGlmICghbGluay0+aW8uQmFzZVBvcnQxKQpAQCAtMzAxLDEzICsyODEsMTMgQEAKIAlmb3IgKGlvYWRkciA9IDB4MTAwOyBpb2FkZHIgPCAweDQwMDsgaW9hZGRyICs9IDB4MTApCiAJewogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7Ci0JICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKQogCQlicmVhazsKIAl9CiAgICAgfQogICAgIGVsc2UKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgIAogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpCiAgICAgewpAQCAtMzIxLDcgKzMwMSw3IEBACiAgICAgREVCVUcoMSwiYXJjbmV0OiByZXF1ZXN0IElSUSAlZCAoJVhoLyVYaClcbiIsCiAJICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLAogCSAgIGxpbmstPmlycS5JUlFJbmZvMSwgbGluay0+aXJxLklSUUluZm8yKTsKLSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKQogICAgIHsKIAlERUJVRygxLCJhcmNuZXQ6IHJlcXVlc3RJUlEgZmFpbGVkIHRvdGFsbHkhXG4iKTsKQEAgLTMzMCw3ICszMTAsNyBAQAogCiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAKLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogICAgIGlmIChjb20yMDAyMF9jaGVjayhkZXYpKQogICAgIHsKQEAgLTM0MiwxNSArMzIyLDE0IEBACiAgICAgbHAtPmNhcmRfbmFtZSA9ICJQQ01DSUEgQ09NMjAwMjAiOwogICAgIGxwLT5jYXJkX2ZsYWdzID0gQVJDX0NBTl8xME1CSVQ7IC8qIHByZXRlbmQgYWxsIG9mIHRoZW0gY2FuIDEwTWJpdCAqLwogCi0gICAgbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgICBpID0gY29tMjAwMjBfZm91bmQoZGV2LCAwKTsJLyogY2FsbHMgcmVnaXN0ZXJfbmV0ZGV2ICovCiAgICAgCiAgICAgaWYgKGkgIT0gMCkgewogCURFQlVHKDEsS0VSTl9OT1RJQ0UgImNvbTIwMDIwX2NzOiBjb20yMDAyMF9mb3VuZCgpIGZhaWxlZFxuIik7Ci0JbGluay0+ZGV2ID0gTlVMTDsKKwlsaW5rLT5kZXZfbm9kZSA9IE5VTEw7CiAJZ290byBmYWlsZWQ7CiAgICAgfQogCkBAIC0zNTgsMTMgKzMzNywxNCBAQAogCiAgICAgREVCVUcoMSxLRVJOX0lORk8gIiVzOiBwb3J0ICUjM2x4LCBpcnEgJWRcbiIsCiAgICAgICAgICAgIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgREVCVUcoMSwiY29tMjAwMjBfY29uZmlnIGZhaWxlZC4uLlxuIik7CiAgICAgY29tMjAwMjBfcmVsZWFzZShsaW5rKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogY29tMjAwMjBfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzc1LDUyICszNTUsMzMgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGNvbTIwMDIwX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGNvbTIwMDIwX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0KLSAgICBERUJVRygxLCJyZWxlYXNlLi4uXG4iKTsKLQotICAgIERFQlVHKDAsICJjb20yMDAyMF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLSAgICBsaW5rLT5zdGF0ZSAmPSB+KERFVl9DT05GSUcgfCBERVZfUkVMRUFTRV9QRU5ESU5HKTsKKwlERUJVRygwLCAiY29tMjAwMjBfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCi1zdGF0aWMgaW50IGNvbTIwMDIwX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBjb20yMDAyMF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWNvbTIwMDIwX2Rldl90ICppbmZvID0gbGluay0+cHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0gICAgICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJfQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgICAgIH0KKwlpZiAobGluay0+b3BlbikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29tMjAwMjBfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgY29tMjAwMjBfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWNvbTIwMDIwX2Rldl90ICppbmZvID0gbGluay0+cHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotICAgICAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JCQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IGRldi0+cHJpdjsKLQkJCUFSQ1JFU0VUOwotCQl9Ci0gICAgICAgIH0KKwlpZiAobGluay0+b3BlbikgeworCQlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gZGV2LT5wcml2OworCQlBUkNSRVNFVDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQzNiw3ICszOTcsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJjb20yMDAyMF9jcyIsCiAJfSwKLQkucHJvYmUJCT0gY29tMjAwMjBfYXR0YWNoLAorCS5wcm9iZQkJPSBjb20yMDAyMF9wcm9iZSwKIAkucmVtb3ZlCQk9IGNvbTIwMDIwX2RldGFjaCwKIAkuaWRfdGFibGUJPSBjb20yMDAyMF9pZHMsCiAJLnN1c3BlbmQJPSBjb20yMDAyMF9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggYjdhYzE0Yi4uMDliMTE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCkBAIC04NCwxMCArODQsMTAgQEAKIC8qCiAgICAgUENNQ0lBIGV2ZW50IGhhbmRsZXJzCiAgKi8KLXN0YXRpYyB2b2lkIGZtdmoxOHhfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIGludCBmbXZqMTh4X2dldF9od2luZm8oZGV2X2xpbmtfdCAqbGluaywgdV9jaGFyICpub2RlX2lkKTsKLXN0YXRpYyBpbnQgZm12ajE4eF9zZXR1cF9tZmMoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBmbXZqMTh4X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGZtdmoxOHhfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgZm12ajE4eF9nZXRfaHdpbmZvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCB1X2NoYXIgKm5vZGVfaWQpOworc3RhdGljIGludCBmbXZqMTh4X3NldHVwX21mYyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBmbXZqMTh4X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIHZvaWQgZm12ajE4eF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIAogLyoKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgIGRyaXZlciBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZQogKi8KIHR5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7Ci0gICAgZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90IG5vZGU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAgICAgbG9uZyBvcGVuX3RpbWU7CkBAIC0yMjgsMTAgKzIyOCw5IEBACiAjZGVmaW5lIEJBTktfMVUgICAgICAgICAgICAgIDB4MjQgLyogYmFuayAxIChDT05GSUdfMSkgKi8KICNkZWZpbmUgQkFOS18yVSAgICAgICAgICAgICAgMHgyOCAvKiBiYW5rIDIgKENPTkZJR18xKSAqLwogCi1zdGF0aWMgaW50IGZtdmoxOHhfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgZm12ajE4eF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwOwotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogICAgIERFQlVHKDAsICJmbXZqMTh4X2F0dGFjaCgpXG4iKTsKQEAgLTI0MSw4ICsyNDAsOCBAQAogICAgIGlmICghZGV2KQogCXJldHVybiAtRU5PTUVNOwogICAgIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBsaW5rID0gJmxwLT5saW5rOwogICAgIGxpbmstPnByaXYgPSBkZXY7CisgICAgbHAtPnBfZGV2ID0gbGluazsKIAogICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwogICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDMyOwpAQCAtMjU3LDcgKzI1Niw2IEBACiAKICAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKICAgICAvKiBUaGUgRk1WSjE4eCBzcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwpAQCAtMjc0LDI5ICsyNzIsMjEgQEAKICNlbmRpZgogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIGZtdmoxOHhfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZtdmoxOHhfY29uZmlnKGxpbmspOwogfSAvKiBmbXZqMTh4X2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgZm12ajE4eF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgZm12ajE4eF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKICAgICBERUJVRygwLCAiZm12ajE4eF9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgaWYgKGxpbmstPmRldikKKyAgICBpZiAobGluay0+ZGV2X25vZGUpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JZm12ajE4eF9yZWxlYXNlKGxpbmspOworICAgIGZtdmoxOHhfcmVsZWFzZShsaW5rKTsKIAogICAgIGZyZWVfbmV0ZGV2KGRldik7CiB9IC8qIGZtdmoxOHhfZGV0YWNoICovCkBAIC0zMDYsNyArMjk2LDcgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGludCBtZmNfdHJ5X2lvX3BvcnQoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgbWZjX3RyeV9pb19wb3J0KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGludCBpLCByZXQ7CiAgICAgc3RhdGljIGNvbnN0IGtpb19hZGRyX3Qgc2VyaWFsX2Jhc2VbNV0gPSB7IDB4M2Y4LCAweDJmOCwgMHgzZTgsIDB4MmU4LCAweDAgfTsKQEAgLTMxOCwxMyArMzA4LDEzIEBACiAJICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDA7CiAJICAgIHByaW50ayhLRVJOX05PVElDRSAiZm12ajE4eF9jczogb3V0IG9mIHJlc291cmNlIGZvciBzZXJpYWxcbiIpOwogCX0KLQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAlpZiAocmV0ID09IENTX1NVQ0NFU1MpIHJldHVybiByZXQ7CiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdW5nZXJtYW5uX3RyeV9pb19wb3J0KGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHVuZ2VybWFubl90cnlfaW9fcG9ydChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpbnQgcmV0OwogICAgIGtpb19hZGRyX3QgaW9hZGRyOwpAQCAtMzM0LDcgKzMyNCw3IEBACiAgICAgKi8KICAgICBmb3IgKGlvYWRkciA9IDB4MzAwOyBpb2FkZHIgPCAweDNlMDsgaW9hZGRyICs9IDB4MjApIHsKIAlsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7Ci0JcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJaWYgKHJldCA9PSBDU19TVUNDRVNTKSB7CiAJICAgIC8qIGNhbGN1bGF0ZSBDb25maWdJbmRleCB2YWx1ZSAqLwogCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gCkBAIC0zNDUsOSArMzM1LDggQEAKICAgICByZXR1cm4gcmV0OwkvKiBSZXF1ZXN0SU8gZmFpbGVkICovCiB9CiAKLXN0YXRpYyB2b2lkIGZtdmoxOHhfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGZtdmoxOHhfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdHVwbGVfdCB0dXBsZTsKQEAgLTM2Niw0MiArMzU1LDM0IEBACiAgICAgICAgcmVnaXN0ZXJzLgogICAgICovCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB0dXBsZS5UdXBsZURhdGEgPSAodV9jaGFyICopYnVmOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7IAogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9GVU5DRTsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpIHsKIAkvKiBZZXMsIEkgaGF2ZSBDSVNUUExfRlVOQ0UuIExldCdzIGNoZWNrIENJU1RQTF9NQU5GSUQgKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykKLQkgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKKwlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpCisJICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogCWVsc2UKIAkgICAgYnVmWzBdID0gMHhmZmZmOwogCXN3aXRjaCAobGUxNl90b19jcHUoYnVmWzBdKSkgewogCWNhc2UgTUFORklEX1RESzoKIAkgICAgY2FyZHR5cGUgPSBUREs7Ci0JICAgIGlmIChsZTE2X3RvX2NwdShidWZbMV0pID09IFBST0RJRF9UREtfQ0YwMTApIHsKLQkJY3Nfc3RhdHVzX3Qgc3RhdHVzOwotCQlwY21jaWFfZ2V0X3N0YXR1cyhoYW5kbGUsICZzdGF0dXMpOwotCQlpZiAoc3RhdHVzLkNhcmRTdGF0ZSAmIENTX0VWRU5UXzNWQ0FSRCkKLQkJICAgIGxpbmstPmNvbmYuVmNjID0gMzM7IC8qIGluc2VydGVkIGluIDMuM1Ygc2xvdCAqLwotCSAgICB9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGJ1ZlsxXSkgPT0gUFJPRElEX1RES19HTjM0MTAKKwkgICAgaWYgKGxlMTZfdG9fY3B1KGJ1ZlsxXSkgPT0gUFJPRElEX1RES19HTjM0MTAKIAkJCXx8IGxlMTZfdG9fY3B1KGJ1ZlsxXSkgPT0gUFJPRElEX1RES19OUDk2MTAKIAkJCXx8IGxlMTZfdG9fY3B1KGJ1ZlsxXSkgPT0gUFJPRElEX1RES19NTjMyMDApIHsKIAkJLyogTXVsdGlGdW5jdGlvbiBDYXJkICovCkBAIC00MjksOCArNDEwLDggQEAKICAgICB9IGVsc2UgewogCS8qIG9sZCB0eXBlIGNhcmQgKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSA9PSBDU19TVUNDRVNTKQotCSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOworCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykKKwkgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CiAJZWxzZQogCSAgICBidWZbMF0gPSAweGZmZmY7CiAJc3dpdGNoIChsZTE2X3RvX2NwdShidWZbMF0pKSB7CkBAIC00NjEsMTAgKzQ0MiwxMCBAQAogCXJldCA9IHVuZ2VybWFubl90cnlfaW9fcG9ydChsaW5rKTsKIAlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIGdvdG8gY3NfZmFpbGVkOwogICAgIH0gZWxzZSB7IAotCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pKTsKKwlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwogICAgIH0KLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKICAgICBkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKIApAQCAtNDkzLDE3ICs0NzQsMTcgQEAKICAgICBjYXNlIENPTlRFQzoKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogCWlmIChjYXJkdHlwZSA9PSBNQkgxMDMwNCkgewogCSAgICAvKiBNQkgxMDMwNCdzIENJU19GVU5DRSBpcyBjb3JydXB0ZWQgKi8KIAkgICAgbm9kZV9pZCA9ICYodHVwbGUuVHVwbGVEYXRhWzVdKTsKIAkgICAgY2FyZF9uYW1lID0gIkZNVi1KMTgyIjsKIAl9IGVsc2UgewogCSAgICB3aGlsZSAodHVwbGUuVHVwbGVEYXRhWzBdICE9IENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCApIHsKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKLQkJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKKwkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CisJCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogCSAgICB9CiAJICAgIG5vZGVfaWQgPSAmKHR1cGxlLlR1cGxlRGF0YVsyXSk7CiAJICAgIGlmKCBjYXJkdHlwZSA9PSBUREsgKSB7CkBAIC01NDUsMTMgKzUyNiwxMiBAQAogICAgIH0KIAogICAgIGxwLT5jYXJkdHlwZSA9IGNhcmR0eXBlOwotICAgIGxpbmstPmRldiA9ICZscC0+bm9kZTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmbHAtPm5vZGU7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCXByaW50ayhLRVJOX05PVElDRSAiZm12ajE4eF9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKLQlsaW5rLT5kZXYgPSBOVUxMOworCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTU2NCwxOSArNTQ0LDE4IEBACiAgICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAlwcmludGsoIiUwMlglcyIsIGRldi0+ZGV2X2FkZHJbaV0sICgoaTw1KSA/ICI6IiA6ICJcbiIpKTsKIAotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKICAgICAKIGNzX2ZhaWxlZDoKICAgICAvKiBBbGwgQ2FyZCBTZXJ2aWNlcyBlcnJvcnMgZW5kIHVwIGhlcmUgKi8KLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgZm12ajE4eF9yZWxlYXNlKGxpbmspOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0KKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogZm12ajE4eF9jb25maWcgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGZtdmoxOHhfZ2V0X2h3aW5mbyhkZXZfbGlua190ICpsaW5rLCB1X2NoYXIgKm5vZGVfaWQpCitzdGF0aWMgaW50IGZtdmoxOHhfZ2V0X2h3aW5mbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgdV9jaGFyICpub2RlX2lkKQogewogICAgIHdpbl9yZXFfdCByZXE7CiAgICAgbWVtcmVxX3QgbWVtOwpAQCAtNTg3LDkgKzU2Niw5IEBACiAgICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84fFdJTl9NRU1PUllfVFlQRV9BTXxXSU5fRU5BQkxFOwogICAgIHJlcS5CYXNlID0gMDsgcmVxLlNpemUgPSAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7Ci0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0V2luZG93LCBpKTsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCBpKTsKIAlyZXR1cm4gLTE7CiAgICAgfQogCkBAIC02MjMsMTMgKzYwMiwxMyBAQAogICAgIGlvdW5tYXAoYmFzZSk7CiAgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwogICAgIGlmIChqICE9IENTX1NVQ0NFU1MpCi0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZWxlYXNlV2luZG93LCBqKTsKKwljc19lcnJvcihsaW5rLCBSZWxlYXNlV2luZG93LCBqKTsKICAgICByZXR1cm4gKGkgIT0gMHgyMDApID8gMCA6IC0xOwogCiB9IC8qIGZtdmoxOHhfZ2V0X2h3aW5mbyAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZm12ajE4eF9zZXR1cF9tZmMoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgZm12ajE4eF9zZXR1cF9tZmMoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgd2luX3JlcV90IHJlcTsKICAgICBtZW1yZXFfdCBtZW07CkBAIC02NDIsOSArNjIxLDkgQEAKICAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzh8V0lOX01FTU9SWV9UWVBFX0FNfFdJTl9FTkFCTEU7CiAgICAgcmVxLkJhc2UgPSAwOyByZXEuU2l6ZSA9IDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gMDsKLSAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pOwogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RXaW5kb3csIGkpOworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RXaW5kb3csIGkpOwogCXJldHVybiAtMTsKICAgICB9CiAKQEAgLTY2Niw1NCArNjQ1LDM1IEBACiAgICAgaW91bm1hcChiYXNlKTsKICAgICBqID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7CiAgICAgaWYgKGogIT0gQ1NfU1VDQ0VTUykKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlbGVhc2VXaW5kb3csIGopOworCWNzX2Vycm9yKGxpbmssIFJlbGVhc2VXaW5kb3csIGopOwogICAgIHJldHVybiAwOwogCiB9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgZm12ajE4eF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBmbXZqMTh4X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0KLSAgICBERUJVRygwLCAiZm12ajE4eF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQotICAgIC8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLSAgICBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCURFQlVHKDAsICJmbXZqMTh4X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCBmbXZqMTh4X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBmbXZqMTh4X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQotCisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZtdmoxOHhfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgZm12ajE4eF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZiAobGluay0+b3BlbikgewotCQkJZmpuX3Jlc2V0KGRldik7Ci0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCX0KKwlpZiAobGluay0+b3BlbikgeworCQlmam5fcmVzZXQoZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzUxLDcgKzcxMSw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gImZtdmoxOHhfY3MiLAogCX0sCi0JLnByb2JlCQk9IGZtdmoxOHhfYXR0YWNoLAorCS5wcm9iZQkJPSBmbXZqMTh4X3Byb2JlLAogCS5yZW1vdmUJCT0gZm12ajE4eF9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gZm12ajE4eF9pZHMsCiAJLnN1c3BlbmQJPSBmbXZqMTh4X3N1c3BlbmQsCkBAIC0xMTQ4LDExICsxMTA4LDExIEBACiBzdGF0aWMgaW50IGZqbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKICAgICBERUJVRyg0LCAiZmpuX29wZW4oJyVzJykuXG4iLCBkZXYtPm5hbWUpOwogCi0gICAgaWYgKCFERVZfT0sobGluaykpCisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgCiAgICAgbGluay0+b3BlbisrOwpAQCAtMTE3Myw3ICsxMTMzLDcgQEAKIHN0YXRpYyBpbnQgZmpuX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAgICAga2lvX2FkZHJfdCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAogICAgIERFQlVHKDQsICJmam5fY2xvc2UoJyVzJykuXG4iLCBkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYwppbmRleCBiOWM3ZTM5Li5iOGZlNzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYwpAQCAtMTA1LDE1ICsxMDUsMTUgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGlibXRyX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgaWJtdHJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIGlibXRyX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfaW50IG1taW9iYXNlKTsKLXN0YXRpYyB2b2lkIGlibXRyX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgdm9pZCBpYm10cl9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIGlibXRyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogdHlwZWRlZiBzdHJ1Y3QgaWJtdHJfZGV2X3QgewotICAgIGRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIHN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAgICAgZGV2X25vZGVfdCAgICAgICAgICBub2RlOwogICAgIHdpbmRvd19oYW5kbGVfdCAgICAgc3JhbV93aW5faGFuZGxlOwpAQCAtMTM4LDEyICsxMzgsMTEgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgaWJtdHJfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgaWJtdHJfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGlibXRyX2Rldl90ICppbmZvOwotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLSAgICAKKwogICAgIERFQlVHKDAsICJpYm10cl9hdHRhY2goKVxuIik7CiAKICAgICAvKiBDcmVhdGUgbmV3IHRva2VuLXJpbmcgZGV2aWNlICovCkBAIC0xNTYsNyArMTU1LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKICAgICB9CiAKLSAgICBsaW5rID0gJmluZm8tPmxpbms7CisgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBpbmZvOwogICAgIGluZm8tPnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTY3LDIxICsxNjYsMTQgQEAKICAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+aXJxLkhhbmRsZXIgPSAmdG9rX2ludGVycnVwdDsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAogICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGluZm8tPmRldiA9IGRldjsKLSAgICAKKwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UOwotICAgIGlibXRyX2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBpYm10cl9jb25maWcobGluayk7CiB9IC8qIGlibXRyX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE5MywyMyArMTg1LDIyIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBpYm10cl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgaWJtdHJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogICAgIHN0cnVjdCBpYm10cl9kZXZfdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKIAogICAgIERFQlVHKDAsICJpYm10cl9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgaWYgKGxpbmstPmRldikKKyAgICBpZiAobGluay0+ZGV2X25vZGUpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogICAgIHsKIAlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlkZWxfdGltZXJfc3luYygmKHRpLT50cl90aW1lcikpOwogICAgIH0KLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotICAgICAgICBpYm10cl9yZWxlYXNlKGxpbmspOworCisgICAgaWJtdHJfcmVsZWFzZShsaW5rKTsKIAogICAgIGZyZWVfbmV0ZGV2KGRldik7CiAgICAga2ZyZWUoaW5mbyk7CkBAIC0yMjYsOSArMjE3LDggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgaWJtdHJfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGlibXRyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIGlibXRyX2Rldl90ICppbmZvID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OwogICAgIHN0cnVjdCB0b2tfaW5mbyAqdGkgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjQ2LDI5ICsyMzYsMjUgQEAKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7Ci0KLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHg2MTsKIAogICAgIC8qIERldGVybWluZSBpZiB0aGlzIGlzIFBSSU1BUlkgb3IgQUxURVJOQVRFLiAqLwogCiAgICAgLyogVHJ5IFBSSU1BUlkgY2FyZCBhdCAweEEyMC0weEEyMyAqLwogICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IDB4QTIwOwotICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCS8qIENvdWxkbid0IGdldCAweEEyMC0weEEyMy4gIFRyeSBBTFRFUk5BVEUgYXQgMHhBMjQtMHhBMjcuICovCiAJbGluay0+aW8uQmFzZVBvcnQxID0gMHhBMjQ7Ci0JQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykpOworCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CiAgICAgfQogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgICAgdGktPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICB0aS0+Z2xvYmFsX2ludF9lbmFibGU9R0xPQkFMX0lOVF9FTkFCTEUrKChkZXYtPmlycT09OSkgPyAyIDogZGV2LT5pcnEpOwpAQCAtMjc5LDcgKzI2NSw3IEBACiAgICAgcmVxLkJhc2UgPSAwOyAKICAgICByZXEuU2l6ZSA9IDB4MjAwMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSAyNTA7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKIAogICAgIG1lbS5DYXJkT2Zmc2V0ID0gbW1pb2Jhc2U7CiAgICAgbWVtLlBhZ2UgPSAwOwpAQCAtMjkyLDcgKzI3OCw3IEBACiAgICAgcmVxLkJhc2UgPSAwOwogICAgIHJlcS5TaXplID0gc3JhbXNpemUgKiAxMDI0OwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDI1MDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmluZm8tPnNyYW1fd2luX2hhbmRsZSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmluZm8tPnNyYW1fd2luX2hhbmRsZSkpOwogCiAgICAgbWVtLkNhcmRPZmZzZXQgPSBzcmFtYmFzZTsKICAgICBtZW0uUGFnZSA9IDA7CkBAIC0zMDIsMjEgKzI4OCwyMCBAQAogICAgIHRpLT5zcmFtX3ZpcnQgPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAgICAgdGktPnNyYW1fcGh5cyA9IHJlcS5CYXNlOwogCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKICAgICAvKiAgU2V0IHVwIHRoZSBUb2tlbi1SaW5nIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBhbmQKICAgICAgICAgdHVybiBvbiB0aGUgY2FyZC4gIENoZWNrIHRoZSAiTG9jYWwgQXJlYSBOZXR3b3JrIENyZWRpdCBDYXJkCiAgICAgICAgIEFkYXB0ZXJzIFRlY2huaWNhbCBSZWZlcmVuY2UiICBTQzMwLTM1ODUgZm9yIHRoaXMgaW5mby4gICovCiAgICAgaWJtdHJfaHdfc2V0dXAoZGV2LCBtbWlvYmFzZSk7CiAKLSAgICBsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKKyAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAogICAgIGkgPSBpYm10cl9wcm9iZV9jYXJkKGRldik7CiAgICAgaWYgKGkgIT0gMCkgewogCXByaW50ayhLRVJOX05PVElDRSAiaWJtdHJfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0JbGluay0+ZGV2ID0gTlVMTDsKKwlsaW5rLT5kZXZfbm9kZSA9IE5VTEw7CiAJZ290byBmYWlsZWQ7CiAgICAgfQogCkBAIC0zMzAsMTIgKzMxNSwxMyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBUUl9BTEVOOyBpKyspCiAgICAgICAgIHByaW50aygiJTAyWCIsIGRldi0+ZGV2X2FkZHJbaV0pOwogICAgIHByaW50aygiXG4iKTsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgaWJtdHJfcmVsZWFzZShsaW5rKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogaWJtdHJfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzQ2LDU2ICszMzIsNDEgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGlibXRyX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGlibXRyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgaWJtdHJfZGV2X3QgKmluZm8gPSBsaW5rLT5wcml2OwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7Ci0KLSAgICBERUJVRygwLCAiaWJtdHJfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7Ci0KLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIGlmIChsaW5rLT53aW4pIHsKLQlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpb3VubWFwKHRpLT5tbWlvKTsKLQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLQlwY21jaWFfcmVsZWFzZV93aW5kb3coaW5mby0+c3JhbV93aW5faGFuZGxlKTsKLSAgICB9Ci0KLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLX0KLQotc3RhdGljIGludCBpYm10cl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlpYm10cl9kZXZfdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotICAgICAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgICAgIH0KKwlERUJVRygwLCAiaWJtdHJfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisKKwlpZiAobGluay0+d2luKSB7CisJCXN0cnVjdCB0b2tfaW5mbyAqdGkgPSBuZXRkZXZfcHJpdihkZXYpOworCQlpb3VubWFwKHRpLT5tbWlvKTsKKwkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGluZm8tPnNyYW1fd2luX2hhbmRsZSk7CisJfQorCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKK30KKworc3RhdGljIGludCBpYm10cl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWlibXRyX2Rldl90ICppbmZvID0gbGluay0+cHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OworCisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlibXRyX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGlibXRyX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlpYm10cl9kZXZfdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLSAgICAgICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZiAobGluay0+b3BlbikgewotCQkJaWJtdHJfcHJvYmUoZGV2KTsJLyogcmVhbGx5PyAqLwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9Ci0gICAgICAgIH0KKwlpZiAobGluay0+b3BlbikgeworCQlpYm10cl9wcm9iZShkZXYpOwkvKiByZWFsbHk/ICovCisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwppbmRleCA3ODcxNzZjLi5hOGY2YmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIH0gbWFjZV9zdGF0aXN0aWNzOwogCiB0eXBlZGVmIHN0cnVjdCBfbWFjZV9wcml2YXRlIHsKLSAgICBkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3Qgbm9kZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBsaW51eF9zdGF0czsgLyogTGludXggc3RhdGlzdGljcyBjb3VudGVycyAqLwogICAgIG1hY2Vfc3RhdGlzdGljcyBtYWNlX3N0YXRzOyAvKiBNQUNFIGNoaXAgc3RhdGlzdGljcyBjb3VudGVycyAqLwpAQCAtNDE3LDggKzQxNyw4IEBACiBGdW5jdGlvbiBQcm90b3R5cGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB2b2lkIG5tY2xhbl9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBubWNsYW5fcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgbm1jbGFuX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBubWNsYW5fcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB2b2lkIG5tY2xhbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbWFjZV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwpAQCAtNDQzLDEwICs0NDMsOSBAQAogCVNlcnZpY2VzLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IG5tY2xhbl9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBubWNsYW5fcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgbWFjZV9wcml2YXRlICpscDsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKICAgICBERUJVRygwLCAibm1jbGFuX2F0dGFjaCgpXG4iKTsKQEAgLTQ1Nyw3ICs0NTYsNyBAQAogICAgIGlmICghZGV2KQogCSAgICByZXR1cm4gLUVOT01FTTsKICAgICBscCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgbGluayA9ICZscC0+bGluazsKKyAgICBscC0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBkZXY7CiAgICAgCiAgICAgc3Bpbl9sb2NrX2luaXQoJmxwLT5iYW5rX2xvY2spOwpAQCAtNDY5LDcgKzQ2OCw2IEBACiAgICAgbGluay0+aXJxLkhhbmRsZXIgPSAmbWFjZV9pbnRlcnJ1cHQ7CiAgICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwpAQCAtNDg5LDEzICs0ODcsNyBAQAogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogI2VuZGlmCiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgbm1jbGFuX2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBubWNsYW5fY29uZmlnKGxpbmspOwogfSAvKiBubWNsYW5fYXR0YWNoICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUwNiwxOCArNDk4LDE2IEBACiAJd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBubWNsYW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIG5tY2xhbl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKICAgICBERUJVRygwLCAibm1jbGFuX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpZiAobGluay0+ZGV2KQorICAgIGlmIChsaW5rLT5kZXZfbm9kZSkKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQlubWNsYW5fcmVsZWFzZShsaW5rKTsKKyAgICBubWNsYW5fcmVsZWFzZShsaW5rKTsKIAogICAgIGZyZWVfbmV0ZGV2KGRldik7CiB9IC8qIG5tY2xhbl9kZXRhY2ggKi8KQEAgLTY2MSw5ICs2NTEsOCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiAgIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIG5tY2xhbl9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgbm1jbGFuX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgIG1hY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICB0dXBsZV90IHR1cGxlOwpAQCAtNjc5LDE3ICs2NjgsMTQgQEAKICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKyAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCi0gIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KLSAgQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsICZsaW5rLT5pbykpOwotICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEoaGFuZGxlLCAmbGluay0+aXJxKSk7Ci0gIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKTsKKyAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKyAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCkBAIC03MDAsOCArNjg2LDggQEAKICAgdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7CisgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogICBtZW1jcHkoZGV2LT5kZXZfYWRkciwgdHVwbGUuVHVwbGVEYXRhLCBFVEhFUl9BRERSX0xFTik7CiAKICAgLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gYnkgcmVhZGluZyB0aGUgTUFDRSBJRC4gKi8KQEAgLTcxNiw4ICs3MDIsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIm5tY2xhbl9jczogbWFjZSBpZCBub3QgZm91bmQ6ICV4ICV4IHNob3VsZCIKIAkgICAgICIgYmUgMHg0MCAweD85XG4iLCBzaWdbMF0sIHNpZ1sxXSk7Ci0gICAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgICAgcmV0dXJuOworICAgICAgcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogICB9CiAKQEAgLTczMCwxNCArNzE1LDEzIEBACiAgIGVsc2UKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIm5tY2xhbl9jczogaW52YWxpZCBpZl9wb3J0IHJlcXVlc3RlZFxuIik7CiAKLSAgbGluay0+ZGV2ID0gJmxwLT5ub2RlOwotICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICBsaW5rLT5kZXZfbm9kZSA9ICZscC0+bm9kZTsKKyAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgaSA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogICBpZiAoaSAhPSAwKSB7CiAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJubWNsYW5fY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0gICAgbGluay0+ZGV2ID0gTlVMTDsKKyAgICBsaW5rLT5kZXZfbm9kZSA9IE5VTEw7CiAgICAgZ290byBmYWlsZWQ7CiAgIH0KIApAQCAtNzQ3LDE0ICs3MzEsMTMgQEAKIAkgZGV2LT5uYW1lLCBkZXYtPmJhc2VfYWRkciwgZGV2LT5pcnEsIGlmX25hbWVzW2Rldi0+aWZfcG9ydF0pOwogICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogICAgICAgcHJpbnRrKCIlMDJYJXMiLCBkZXYtPmRldl9hZGRyW2ldLCAoKGk8NSkgPyAiOiIgOiAiXG4iKSk7Ci0gIHJldHVybjsKKyAgcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6Ci0gICAgbm1jbGFuX3JlbGVhc2UobGluayk7Ci0gICAgcmV0dXJuOwotCisJbm1jbGFuX3JlbGVhc2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9IC8qIG5tY2xhbl9jb25maWcgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzYzLDQ2ICs3NDYsMjkgQEAKIAluZXQgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlCiAJaXMgc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgdm9pZCBubWNsYW5fcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgbm1jbGFuX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0KLSAgREVCVUcoMCwgIm5tY2xhbl9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQotICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLSAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJREVCVUcoMCwgIm5tY2xhbl9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgbm1jbGFuX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBubWNsYW5fc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pCi0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9Ci0KKwlpZiAobGluay0+b3BlbikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbm1jbGFuX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IG5tY2xhbl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZiAobGluay0+b3BlbikgewotCQkJbm1jbGFuX3Jlc2V0KGRldik7Ci0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCX0KKwlpZiAobGluay0+b3BlbikgeworCQlubWNsYW5fcmVzZXQoZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtODE4LDcgKzc4NCw3IEBACiAgIG1hY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAjaWYgUkVTRVRfWElMSU5YCi0gIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gJmxwLT5saW5rOwogICBjb25mX3JlZ190IHJlZzsKICAgdV9sb25nIE9yaWdDb3JWYWx1ZTsgCiAKQEAgLTgyNyw3ICs3OTMsNyBAQAogICByZWcuQWN0aW9uID0gQ1NfUkVBRDsKICAgcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAgIHJlZy5WYWx1ZSA9IDA7Ci0gIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLT5oYW5kbGUsICZyZWcpOworICBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CiAgIE9yaWdDb3JWYWx1ZSA9IHJlZy5WYWx1ZTsKIAogICAvKiBSZXNldCBYaWxpbnggKi8KQEAgLTgzNiwxMiArODAyLDEyIEBACiAgIERFQlVHKDEsICJubWNsYW5fcmVzZXQ6IE9yaWdDb3JWYWx1ZT0weCVsWCwgcmVzZXR0aW5nLi4uXG4iLAogCU9yaWdDb3JWYWx1ZSk7CiAgIHJlZy5WYWx1ZSA9IENPUl9TT0ZUX1JFU0VUOwotICBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKyAgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogICAvKiBOZWVkIHRvIHdhaXQgZm9yIDIwIG1zIGZvciBQQ01DSUEgdG8gZmluaXNoIHJlc2V0LiAqLwogCiAgIC8qIFJlc3RvcmUgb3JpZ2luYWwgQ09SIGNvbmZpZ3VyYXRpb24gaW5kZXggKi8KICAgcmVnLlZhbHVlID0gQ09SX0xFVkVMX1JFUSB8IChPcmlnQ29yVmFsdWUgJiBDT1JfQ09ORklHX01BU0spOwotICBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKyAgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogICAvKiBYaWxpbnggaXMgbm93IGNvbXBsZXRlbHkgcmVzZXQgYWxvbmcgd2l0aCB0aGUgTUFDRSBjaGlwLiAqLwogICBscC0+dHhfZnJlZV9mcmFtZXM9QU0yMTUwX01BWF9UWF9GUkFNRVM7CiAKQEAgLTg4NSw5ICs4NTEsOSBAQAogewogICBraW9fYWRkcl90IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICBtYWNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgZGV2X2xpbmtfdCAqbGluayA9ICZscC0+bGluazsKKyAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKLSAgaWYgKCFERVZfT0sobGluaykpCisgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogICAgIHJldHVybiAtRU5PREVWOwogCiAgIGxpbmstPm9wZW4rKzsKQEAgLTkwOCw3ICs4NzQsNyBAQAogewogICBraW9fYWRkcl90IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICBtYWNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgZGV2X2xpbmtfdCAqbGluayA9ICZscC0+bGluazsKKyAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKICAgREVCVUcoMiwgIiVzOiBzaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7CiAKQEAgLTk2MywxMiArOTI5LDEyIEBACiBzdGF0aWMgdm9pZCBtYWNlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgbWFjZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogCiAgIHByaW50ayhLRVJOX05PVElDRSAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCAtLSAiLCBkZXYtPm5hbWUpOwogI2lmIFJFU0VUX09OX1RJTUVPVVQKICAgcHJpbnRrKCJyZXNldHRpbmcgY2FyZFxuIik7Ci0gIHBjbWNpYV9yZXNldF9jYXJkKGxpbmstPmhhbmRsZSwgTlVMTCk7CisgIHBjbWNpYV9yZXNldF9jYXJkKGxpbmssIE5VTEwpOwogI2Vsc2UgLyogI2lmIFJFU0VUX09OX1RJTUVPVVQgKi8KICAgcHJpbnRrKCJOT1QgcmVzZXR0aW5nIGNhcmRcbiIpOwogI2VuZGlmIC8qICNpZiBSRVNFVF9PTl9USU1FT1VUICovCkBAIC0xMjM4LDcgKzEyMDQsNyBAQAogCiAJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAlscC0+bGludXhfc3RhdHMucnhfcGFja2V0cysrOwotCWxwLT5saW51eF9zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlscC0+bGludXhfc3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAlvdXRiKDB4RkYsIGlvYWRkciArIEFNMjE1MF9SQ1ZfTkVYVCk7IC8qIHNraXAgdG8gbmV4dCBmcmFtZSAqLwogCWNvbnRpbnVlOwogICAgICAgfSBlbHNlIHsKQEAgLTE2MzUsNyArMTYwMSw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gIm5tY2xhbl9jcyIsCiAJfSwKLQkucHJvYmUJCT0gbm1jbGFuX2F0dGFjaCwKKwkucHJvYmUJCT0gbm1jbGFuX3Byb2JlLAogCS5yZW1vdmUJCT0gbm1jbGFuX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBubWNsYW5faWRzLAogCS5zdXNwZW5kCT0gbm1jbGFuX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCmluZGV4IGI0NmU1ZjcuLmQwOTBkZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCkBAIC0xMDMsOCArMTAzLDggQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdm9pZCBtaWlfcGh5X3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgcGNuZXRfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgcGNuZXRfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIHBjbmV0X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIGludCBwY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBwY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZWlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CkBAIC0xMTMsOSArMTEzLDkgQEAKIHN0YXRpYyB2b2lkIGVpX3dhdGNoZG9nKHVfbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcGNuZXRfcmVzZXRfODM5MChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2V0X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7Ci1zdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhkZXZfbGlua190ICpsaW5rLCBpbnQgc3RhcnRfcGcsCitzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLAogCQkJICAgICAgaW50IHN0b3BfcGcsIGludCBjbV9vZmZzZXQpOwotc3RhdGljIGludCBzZXR1cF9kbWFfY29uZmlnKGRldl9saW5rX3QgKmxpbmssIGludCBzdGFydF9wZywKK3N0YXRpYyBpbnQgc2V0dXBfZG1hX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLAogCQkJICAgIGludCBzdG9wX3BnKTsKIAogc3RhdGljIHZvaWQgcGNuZXRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CkBAIC0yMTQsNyArMjE0LDcgQEAKIHN0YXRpYyBod19pbmZvX3QgZGwxMDAyMl9pbmZvID0geyAwLCAwLCAwLCAwLCBJU19ETDEwMDIyfEhBU19NSUkgfTsKIAogdHlwZWRlZiBzdHJ1Y3QgcGNuZXRfZGV2X3QgewotICAgIGRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3QJCW5vZGU7CiAgICAgdV9pbnQJCWZsYWdzOwogICAgIHZvaWQJCV9faW9tZW0gKmJhc2U7CkBAIC0yNDAsMTAgKzI0MCw5IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHBjbmV0X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgcGNuZXRfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgcGNuZXRfZGV2X3QgKmluZm87Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAgICAgREVCVUcoMCwgInBjbmV0X2F0dGFjaCgpXG4iKTsKQEAgLTI1Miw3ICsyNTEsNyBAQAogICAgIGRldiA9IF9fYWxsb2NfZWlfbmV0ZGV2KHNpemVvZihwY25ldF9kZXZfdCkpOwogICAgIGlmICghZGV2KSByZXR1cm4gLUVOT01FTTsKICAgICBpbmZvID0gUFJJVihkZXYpOwotICAgIGxpbmsgPSAmaW5mby0+bGluazsKKyAgICBpbmZvLT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGRldjsKIAogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwpAQCAtMjY1LDEzICsyNjQsNyBAQAogICAgIGRldi0+c3RvcCA9ICZwY25ldF9jbG9zZTsKICAgICBkZXYtPnNldF9jb25maWcgPSAmc2V0X2NvbmZpZzsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBwY25ldF9jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcGNuZXRfY29uZmlnKGxpbmspOwogfSAvKiBwY25ldF9hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yODMsMTggKzI3NiwxNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgcGNuZXRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHBjbmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICJwY25ldF9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0JaWYgKGxpbmstPmRldikKKwlpZiAobGluay0+ZGV2X25vZGUpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY25ldF9yZWxlYXNlKGxpbmspOworCXBjbmV0X3JlbGVhc2UobGluayk7CiAKIAlmcmVlX25ldGRldihkZXYpOwogfSAvKiBwY25ldF9kZXRhY2ggKi8KQEAgLTMwNiw3ICsyOTcsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGh3X2luZm9fdCAqZ2V0X2h3aW5mbyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGh3X2luZm9fdCAqZ2V0X2h3aW5mbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICB3aW5fcmVxX3QgcmVxOwpAQCAtMzE4LDkgKzMwOSw5IEBACiAgICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84fFdJTl9NRU1PUllfVFlQRV9BTXxXSU5fRU5BQkxFOwogICAgIHJlcS5CYXNlID0gMDsgcmVxLlNpemUgPSAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7Ci0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0V2luZG93LCBpKTsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCBpKTsKIAlyZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTM0Myw3ICszMzQsNyBAQAogICAgIGlvdW5tYXAodmlydCk7CiAgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwogICAgIGlmIChqICE9IENTX1NVQ0NFU1MpCi0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZWxlYXNlV2luZG93LCBqKTsKKwljc19lcnJvcihsaW5rLCBSZWxlYXNlV2luZG93LCBqKTsKICAgICByZXR1cm4gKGkgPCBOUl9JTkZPKSA/IGh3X2luZm8raSA6IE5VTEw7CiB9IC8qIGdldF9od2luZm8gKi8KIApAQCAtMzU1LDcgKzM0Niw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaHdfaW5mb190ICpnZXRfcHJvbShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGh3X2luZm9fdCAqZ2V0X3Byb20oc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAga2lvX2FkZHJfdCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTQwOSw3ICs0MDAsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGh3X2luZm9fdCAqZ2V0X2RsMTAwMTkoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBod19pbmZvX3QgKmdldF9kbDEwMDE5KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGludCBpOwpAQCAtNDMxLDcgKzQyMiw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaHdfaW5mb190ICpnZXRfYXg4ODE5MChkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGh3X2luZm9fdCAqZ2V0X2F4ODgxOTAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAga2lvX2FkZHJfdCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTQ2NCw3ICs0NTUsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGh3X2luZm9fdCAqZ2V0X2h3aXJlZChkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGh3X2luZm9fdCAqZ2V0X2h3aXJlZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBpbnQgaTsKQEAgLTQ5MSw3ICs0ODIsNyBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW50IHRyeV9pb19wb3J0KGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHRyeV9pb19wb3J0KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGludCBqLCByZXQ7CiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSA9PSAzMikgewpAQCAtNTEyLDE4ICs1MDMsMTcgQEAKIAlmb3IgKGogPSAwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7CiAJICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IChqIF4gMHgzMDApICsgMHgxMDsKLQkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCSAgICBpZiAocmV0ID09IENTX1NVQ0NFU1MpIHJldHVybiByZXQ7CiAJfQogCXJldHVybiByZXQ7CiAgICAgfSBlbHNlIHsKLQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcGNuZXRfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHBjbmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwogICAgIHR1cGxlX3QgdHVwbGU7CkBAIC01MzEsNyArNTIxLDYgQEAKICAgICBpbnQgaSwgbGFzdF9yZXQsIGxhc3RfZm4sIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQ7CiAgICAgaW50IG1hbmZpZCA9IDAsIHByb2RpZCA9IDAsIGhhc19zaG1lbSA9IDA7CiAgICAgdV9zaG9ydCBidWZbNjRdOwotICAgIGNvbmZpZ19pbmZvX3QgY29uZjsKICAgICBod19pbmZvX3QgKmh3X2luZm87CiAKICAgICBERUJVRygwLCAicGNuZXRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKQEAgLTU0MSwzNiArNTMwLDI5IEBACiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotICAgIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gICAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQotICAgIC8qIExvb2sgdXAgY3VycmVudCBWY2MgKi8KLSAgICBDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotICAgIGxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7Ci0KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwotICAgIGlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgJiYKLSAJKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykpIHsKKyAgICBpZiAoKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSAmJgorIAkocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykpIHsKIAltYW5maWQgPSBsZTE2X3RvX2NwdShidWZbMF0pOwogCXByb2RpZCA9IGxlMTZfdG9fY3B1KGJ1ZlsxXSk7CiAgICAgfQogICAgIAogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogICAgIHdoaWxlIChsYXN0X3JldCA9PSBDU19TVUNDRVNTKSB7CiAJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKIAljaXN0cGxfaW9fdCAqaW8gPSAmKHBhcnNlLmNmdGFibGVfZW50cnkuaW8pOwogCQotCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDAgfHwKLQkJCXBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSAwIHx8CisJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKKwkJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCB8fAogCQkJY2ZnLT5pbmRleCA9PSAwIHx8IGNmZy0+aW8ubndpbiA9PSAwKQogCQlnb3RvIG5leHRfZW50cnk7CiAJCkBAIC01OTQsMTQgKzU3NiwxNCBAQAogCSAgICBpZiAobGFzdF9yZXQgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAJfQogICAgIG5leHRfZW50cnk6Ci0JbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpOworCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAgICAgfQogICAgIGlmIChsYXN0X3JldCAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IoaGFuZGxlLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEoaGFuZGxlLCAmbGluay0+aXJxKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKICAgICAKICAgICBpZiAobGluay0+aW8uTnVtUG9ydHMyID09IDgpIHsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKQEAgLTYxMSw3ICs1OTMsNyBAQAogCShwcm9kaWQgPT0gUFJPRElEX0lCTV9IT01FX0FORF9BV0FZKSkKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4IHw9IDB4MTA7CiAgICAgCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCAmbGluay0+Y29uZikpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAgICAgaWYgKGluZm8tPmZsYWdzICYgSEFTX01JU0NfUkVHKSB7CkBAIC02NzksOSArNjYxLDggQEAKIAkgICAgaW5mby0+ZXRoX3BoeSA9IDA7CiAgICAgfQogCi0gICAgbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogICAgIGRldi0+cG9sbF9jb250cm9sbGVyID0gZWlfcG9sbDsKQEAgLTY4OSw3ICs2NzAsNyBAQAogCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgInBjbmV0X2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwotCWxpbmstPmRldiA9IE5VTEw7CisJbGluay0+ZGV2X25vZGUgPSBOVUxMOwogCWdvdG8gZmFpbGVkOwogICAgIH0KIApAQCAtNzEyLDE0ICs2OTMsMTMgQEAKICAgICBwcmludGsoIiBod19hZGRyICIpOwogICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJcHJpbnRrKCIlMDJYJXMiLCBkZXYtPmRldl9hZGRyW2ldLCAoKGk8NSkgPyAiOiIgOiAiXG4iKSk7Ci0gICAgcmV0dXJuOworICAgIHJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogICAgIHBjbmV0X3JlbGVhc2UobGluayk7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIHBjbmV0X2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTczMCwyMSArNzEwLDE2IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBwY25ldF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBwY25ldF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihsaW5rLT5wcml2KTsKKwlwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYobGluay0+cHJpdik7CiAKLSAgICBERUJVRygwLCAicGNuZXRfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJREVCVUcoMCwgInBjbmV0X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0gICAgaWYgKGluZm8tPmZsYWdzICYgVVNFX1NITUVNKSB7Ci0JaW91bm1hcChpbmZvLT5iYXNlKTsKLQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLSAgICB9Ci0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBVU0VfU0hNRU0pCisJCWlvdW5tYXAoaW5mby0+YmFzZSk7CiAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzU2LDM0ICs3MzEsMjQgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgcGNuZXRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHBjbmV0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQorCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwY25ldF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBwY25ldF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZiAobGluay0+b3BlbikgewotCQkJcGNuZXRfcmVzZXRfODM5MChkZXYpOwotCQkJTlM4MzkwX2luaXQoZGV2LCAxKTsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCXBjbmV0X3Jlc2V0XzgzOTAoZGV2KTsKKwkJTlM4MzkwX2luaXQoZGV2LCAxKTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTAyMywxMSArOTg4LDExIEBACiBzdGF0aWMgaW50IHBjbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmluZm8tPmxpbms7Ci0gICAgCisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBpbmZvLT5wX2RldjsKKwogICAgIERFQlVHKDIsICJwY25ldF9vcGVuKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCi0gICAgaWYgKCFERVZfT0sobGluaykpCisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJcmV0dXJuIC1FTk9ERVY7CiAKICAgICBsaW5rLT5vcGVuKys7CkBAIC0xMDUxLDcgKzEwMTYsNyBAQAogc3RhdGljIGludCBwY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmaW5mby0+bGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGluZm8tPnBfZGV2OwogCiAgICAgREVCVUcoMiwgInBjbmV0X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCkBAIC0xNDI5LDcgKzEzOTQsNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBzZXR1cF9kbWFfY29uZmlnKGRldl9saW5rX3QgKmxpbmssIGludCBzdGFydF9wZywKK3N0YXRpYyBpbnQgc2V0dXBfZG1hX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLAogCQkJICAgIGludCBzdG9wX3BnKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwpAQCAtMTUzMiw3ICsxNDk3LDcgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KGRldl9saW5rX3QgKmxpbmssIGludCBzdGFydF9wZywKK3N0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsCiAJCQkgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldCkKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKQEAgLTE1NTQsNyArMTUxOSw3IEBACiAgICAgcmVxLkF0dHJpYnV0ZXMgfD0gV0lOX1VTRV9XQUlUOwogICAgIHJlcS5CYXNlID0gMDsgcmVxLlNpemUgPSB3aW5kb3dfc2l6ZTsKICAgICByZXEuQWNjZXNzU3BlZWQgPSBtZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKIAogICAgIG1lbS5DYXJkT2Zmc2V0ID0gKHN0YXJ0X3BnIDw8IDgpICsgY21fb2Zmc2V0OwogICAgIG9mZnNldCA9IG1lbS5DYXJkT2Zmc2V0ICUgd2luZG93X3NpemU7CkBAIC0xNTk1LDcgKzE1NjAsNyBAQAogICAgIHJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogICAgIHJldHVybiAxOwogfQpAQCAtMTY3NCw2ICsxNjM5LDcgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ09OVEVDIiwgIkMtTkVUKFBDKUMtMTBMIiwgMHgyMWNhYjU1MiwgMHhmNmY5MDcyMiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYSIsICJGRXRoZXIgUENDLVRYRiIsIDB4MGEyMTUwMWEsIDB4YTUxNTY0YTIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJjb3JlZ2EgRXRoZXJJSSBQQ0MtVCIsIDB4NTI2MTQ0MGYsIDB4ZmE5ZDg1YmQpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJjb3JlZ2EgRXRoZXJJSSBQQ0MtVEQiLCAweDUyNjE0NDBmLCAweGM0OWJkNzNkKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ29yZWdhIEsuSy4iLCAiY29yZWdhIEV0aGVySUkgUENDLVREIiwgMHhkNGZkY2JkOCwgMHhjNDliZDczZCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYSBLLksuIiwgImNvcmVnYSBFdGhlciBQQ0MtVCIsIDB4NTI2MTQ0MGYsIDB4NjcwNWZjYWEpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJjb3JlZ2EgRmFzdEV0aGVyIFBDQy1UWCIsIDB4NTI2MTQ0MGYsIDB4NDg1ZTg1ZDkpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCA4ODM5YzRmLi5lNzRiZjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzY29kZS5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTAzLDcgKzEwNCw3IEBACiAjZGVmaW5lIE1FTU9SWV9XQUlUX1RJTUUgICAgICAgCTgKIAogc3RydWN0IHNtY19wcml2YXRlIHsKLSAgICBkZXZfbGlua190CQkJbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgc3BpbmxvY2tfdAkJCWxvY2s7CiAgICAgdV9zaG9ydAkJCW1hbmZpZDsKICAgICB1X3Nob3J0CQkJY2FyZGlkOwpAQCAtMjc4LDggKzI3OSw4IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgc21jOTFjOTJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci1zdGF0aWMgdm9pZCBzbWM5MWM5Ml9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBzbWM5MWM5Ml9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBzbWM5MWM5Ml9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgc21jOTFjOTJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyBpbnQgc21jX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNtY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTMwOCwxMCArMzA5LDkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgc21jOTFjOTJfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc21jOTFjOTJfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IHNtY19wcml2YXRlICpzbWM7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAgICAgREVCVUcoMCwgInNtYzkxYzkyX2F0dGFjaCgpXG4iKTsKQEAgLTMyMSw3ICszMjEsNyBAQAogICAgIGlmICghZGV2KQogCXJldHVybiAtRU5PTUVNOwogICAgIHNtYyA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgbGluayA9ICZzbWMtPmxpbms7CisgICAgc21jLT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGRldjsKIAogICAgIHNwaW5fbG9ja19pbml0KCZzbWMtPmxvY2spOwpAQCAtMzMzLDcgKzMzMyw2IEBACiAgICAgbGluay0+aXJxLkhhbmRsZXIgPSAmc21jX2ludGVycnVwdDsKICAgICBsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKICAgICAvKiBUaGUgU01DOTFjOTItc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KQEAgLTM1NywxMyArMzU2LDcgQEAKICAgICBzbWMtPm1paV9pZi5waHlfaWRfbWFzayA9IDB4MWY7CiAgICAgc21jLT5taWlfaWYucmVnX251bV9tYXNrID0gMHgxZjsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBzbWM5MWM5Ml9jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc21jOTFjOTJfY29uZmlnKGxpbmspOwogfSAvKiBzbWM5MWM5Ml9hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNzUsMTggKzM2OCwxNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgc21jOTFjOTJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHNtYzkxYzkyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAogICAgIERFQlVHKDAsICJzbWM5MWM5Ml9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgaWYgKGxpbmstPmRldikKKyAgICBpZiAobGluay0+ZGV2X25vZGUpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0Jc21jOTFjOTJfcmVsZWFzZShsaW5rKTsKKyAgICBzbWM5MWM5Ml9yZWxlYXNlKGxpbmspOwogCiAgICAgZnJlZV9uZXRkZXYoZGV2KTsKIH0gLyogc21jOTFjOTJfZGV0YWNoICovCkBAIC00MTQsNyArNDA1LDcgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogCQljaXNwYXJzZV90ICpwYXJzZSkKIHsKIAlpbnQgaTsKQEAgLTQyNSw3ICs0MTYsNyBAQAogCXJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogfQogCi1zdGF0aWMgaW50IG5leHRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAJCWNpc3BhcnNlX3QgKnBhcnNlKQogewogCWludCBpOwpAQCAtNDQ3LDcgKzQzOCw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IG1oel8zMjg4X3Bvd2VyKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IG1oel8zMjg4X3Bvd2VyKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ2OSw3ICs0NjAsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1oel9tZmNfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IG1oel9tZmNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTUwNCw3ICs0OTUsNyBAQAogICAgIHR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7CiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogCi0gICAgaSA9IGZpcnN0X3R1cGxlKGxpbmstPmhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKyAgICBpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKICAgICAvKiBUaGUgTWVnYWhlcnR6IGNvbWJvIGNhcmRzIGhhdmUgbW9kZW0tbGlrZSBDSVMgZW50cmllcywgc28KICAgICAgICB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgdHJ5IGEgYnVuY2ggb2YgcG9ydCBjb21iaW5hdGlvbnMuICovCiAgICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewpAQCAtNTEzLDExICs1MDQsMTEgQEAKIAlmb3IgKGsgPSAwOyBrIDwgMHg0MDA7IGsgKz0gMHgxMCkgewogCSAgICBpZiAoayAmIDB4ODApIGNvbnRpbnVlOwogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBrIF4gMHgzMDA7Ci0JICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKIAl9CiAJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0JaSA9IG5leHRfdHVwbGUobGluay0+aGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAgICAgfQogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpCiAJZ290byBmcmVlX2NmZ19tZW07CkBAIC01MjcsNyArNTE4LDcgQEAKICAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzh8V0lOX01FTU9SWV9UWVBFX0FNfFdJTl9FTkFCTEU7CiAgICAgcmVxLkJhc2UgPSByZXEuU2l6ZSA9IDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gMDsKLSAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pOwogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpCiAJZ290byBmcmVlX2NmZ19tZW07CiAgICAgc21jLT5iYXNlID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwpAQCAtNTQ2LDkgKzUzNyw4IEBACiAgICAgcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgbWh6X3NldHVwKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IG1oel9zZXR1cChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfY2ZnX21lbSAqY2ZnX21lbTsKICAgICB0dXBsZV90ICp0dXBsZTsKQEAgLTU3MSwxMyArNTYxLDEzIEBACiAgICAgLyogUmVhZCB0aGUgc3RhdGlvbiBhZGRyZXNzIGZyb20gdGhlIENJUy4gIEl0IGlzIHN0b3JlZCBhcyB0aGUgbGFzdAogICAgICAgIChmb3VydGgpIHN0cmluZyBpbiB0aGUgVmVyc2lvbiAxIFZlcnNpb24vSUQgdHVwbGUuICovCiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0gICAgaWYgKGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgIT0gQ1NfU1VDQ0VTUykgewogCXJjID0gLTE7CiAJZ290byBmcmVlX2NmZ19tZW07CiAgICAgfQogICAgIC8qIFVnaCAtLSB0aGUgRU0xMTQ0IGNhcmQgaGFzIHR3byBWRVJTXzEgdHVwbGVzIT8hICovCi0gICAgaWYgKG5leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpCi0JZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworICAgIGlmIChuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgIT0gQ1NfU1VDQ0VTUykKKwlmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIGlmIChwYXJzZS0+dmVyc2lvbl8xLm5zID4gMykgewogCXN0YXRpb25fYWRkciA9IHBhcnNlLT52ZXJzaW9uXzEuc3RyICsgcGFyc2UtPnZlcnNpb25fMS5vZnNbM107CiAJaWYgKGN2dF9hc2NpaV9hZGRyZXNzKGRldiwgc3RhdGlvbl9hZGRyKSA9PSAwKSB7CkBAIC01ODgsMTEgKzU3OCwxMSBAQAogCiAgICAgLyogQW5vdGhlciBwb3NzaWJpbGl0eTogZm9yIHRoZSBFTTMyODgsIGluIGEgc3BlY2lhbCB0dXBsZSAqLwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSAweDgxOwotICAgIGlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykgewogCXJjID0gLTE7CiAJZ290byBmcmVlX2NmZ19tZW07CiAgICAgfQotICAgIGlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgdHVwbGUpICE9IENTX1NVQ0NFU1MpIHsKIAlyYyA9IC0xOwogCWdvdG8gZnJlZV9jZmdfbWVtOwogICAgIH0KQEAgLTYxNiw3ICs2MDYsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgbW90X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgbW90X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CkBAIC02MzcsNyArNjI3LDcgQEAKICAgICBtZGVsYXkoMTAwKTsKIH0KIAotc3RhdGljIGludCBtb3Rfc2V0dXAoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgbW90X3NldHVwKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC02NzEsNyArNjYxLDcgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgc21jX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBzbWNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfY2ZnX21lbSAqY2ZnX21lbTsKQEAgLTY5NiwxNiArNjg2LDE2IEBACiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogCiAgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMTY7Ci0gICAgaSA9IGZpcnN0X3R1cGxlKGxpbmstPmhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKyAgICBpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKICAgICB3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgewogCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKIAl9Ci0JaSA9IG5leHRfdHVwbGUobGluay0+aGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAgICAgfQogICAgIGlmIChpID09IENTX1NVQ0NFU1MpCiAJZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CkBAIC03MTQsOSArNzA0LDggQEAKICAgICByZXR1cm4gaTsKIH0KIAotc3RhdGljIGludCBzbWNfc2V0dXAoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgc21jX3NldHVwKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IHNtY19jZmdfbWVtICpjZmdfbWVtOwogICAgIHR1cGxlX3QgKnR1cGxlOwpAQCAtNzM5LDExICs3MjgsMTEgQEAKIAogICAgIC8qIENoZWNrIGZvciBhIExBTiBmdW5jdGlvbiBleHRlbnNpb24gdHVwbGUgKi8KICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwotICAgIGkgPSBmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAgICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewogCWlmIChwYXJzZS0+ZnVuY2UudHlwZSA9PSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQpCiAJICAgIGJyZWFrOwotCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIH0KICAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSB7CiAJbm9kZV9pZCA9IChjaXN0cGxfbGFuX25vZGVfaWRfdCAqKXBhcnNlLT5mdW5jZS5kYXRhOwpAQCAtNzU2LDcgKzc0NSw3IEBACiAgICAgfQogICAgIC8qIFRyeSB0aGUgdGhpcmQgc3RyaW5nIGluIHRoZSBWZXJzaW9uIDEgVmVyc2lvbi9JRCB0dXBsZS4gKi8KICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKLSAgICBpZiAoZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSAhPSBDU19TVUNDRVNTKSB7CiAJcmMgPSAtMTsKIAlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9CkBAIC03NzQsNyArNzYzLDcgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgb3NpX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBvc2lfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0YXRpYyBjb25zdCBraW9fYWRkcl90IGNvbVs0XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTggfTsKQEAgLTc5NCwyMiArNzgzLDIxIEBACiAKICAgICBmb3IgKGkgPSBqID0gMDsgaiA8IDQ7IGorKykgewogCWxpbmstPmlvLkJhc2VQb3J0MiA9IGNvbVtqXTsKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwogICAgIH0KICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CiAJLyogRmFsbGJhY2s6IHR1cm4gb2ZmIGhhcmQgZGVjb2RlICovCiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4MDM7CiAJbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgIH0KICAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MSArIDB4MTA7CiAgICAgcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgb3NpX3NldHVwKGRldl9saW5rX3QgKmxpbmssIHVfc2hvcnQgbWFuZmlkLCB1X3Nob3J0IGNhcmRpZCkKK3N0YXRpYyBpbnQgb3NpX3NldHVwKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCB1X3Nob3J0IG1hbmZpZCwgdV9zaG9ydCBjYXJkaWQpCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX2NmZ19tZW0gKmNmZ19tZW07CiAgICAgdHVwbGVfdCAqdHVwbGU7CkBAIC04MzAsMTIgKzgxOCwxMiBAQAogCiAgICAgLyogUmVhZCB0aGUgc3RhdGlvbiBhZGRyZXNzIGZyb20gdHVwbGUgMHg5MCwgc3VidHVwbGUgMHgwNCAqLwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSAweDkwOwotICAgIGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOworICAgIGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssIHR1cGxlKTsKICAgICB3aGlsZSAoaSA9PSBDU19TVUNDRVNTKSB7Ci0JaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKTsKKwlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssIHR1cGxlKTsKIAlpZiAoKGkgIT0gQ1NfU1VDQ0VTUykgfHwgKGJ1ZlswXSA9PSAweDA0KSkKIAkgICAgYnJlYWs7Ci0JaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKKwlpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssIHR1cGxlKTsKICAgICB9CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCXJjID0gLTE7CkBAIC04NjgsNTYgKzg1Niw0NiBAQAogICAgcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHNtYzkxYzkyX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBzbWM5MWM5Ml9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAobGluay0+b3BlbikKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCX0KKwlpZiAobGluay0+b3BlbikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21jOTFjOTJfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc21jOTFjOTJfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmICgoc21jLT5tYW5maWQgPT0gTUFORklEX01FR0FIRVJUWikgJiYKLQkJICAgIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfTUVHQUhFUlRaX0VNMzI4OCkpCi0JCQltaHpfMzI4OF9wb3dlcihsaW5rKTsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJaWYgKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NT1RPUk9MQSkKLQkJCW1vdF9jb25maWcobGluayk7Ci0JCWlmICgoc21jLT5tYW5maWQgPT0gTUFORklEX09TSVRFQ0gpICYmCi0JCSAgICAoc21jLT5jYXJkaWQgIT0gUFJPRElEX09TSVRFQ0hfU0VWRU4pKSB7Ci0JCQkvKiBQb3dlciB1cCB0aGUgY2FyZCBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KLQkJCXNldF9iaXRzKDB4MDMwMCwgZGV2LT5iYXNlX2FkZHItMHgxMCtPU0lURUNIX0FVSV9QV1IpOwotCQkJc2V0X2JpdHMoMHgwMzAwLCBkZXYtPmJhc2VfYWRkci0weDEwK09TSVRFQ0hfUkVTRVRfSVNSKTsKKwlpZiAoKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NRUdBSEVSVFopICYmCisJICAgIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfTUVHQUhFUlRaX0VNMzI4OCkpCisJCW1oel8zMjg4X3Bvd2VyKGxpbmspOworCWlmIChzbWMtPm1hbmZpZCA9PSBNQU5GSURfTU9UT1JPTEEpCisJCW1vdF9jb25maWcobGluayk7CisJaWYgKChzbWMtPm1hbmZpZCA9PSBNQU5GSURfT1NJVEVDSCkgJiYKKwkgICAgKHNtYy0+Y2FyZGlkICE9IFBST0RJRF9PU0lURUNIX1NFVkVOKSkgeworCQkvKiBQb3dlciB1cCB0aGUgY2FyZCBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KKwkJc2V0X2JpdHMoMHgwMzAwLCBkZXYtPmJhc2VfYWRkci0weDEwK09TSVRFQ0hfQVVJX1BXUik7CisJCXNldF9iaXRzKDB4MDMwMCwgZGV2LT5iYXNlX2FkZHItMHgxMCtPU0lURUNIX1JFU0VUX0lTUik7CisJfQorCWlmICgoKHNtYy0+bWFuZmlkID09IE1BTkZJRF9PU0lURUNIKSAmJgorCSAgICAgKHNtYy0+Y2FyZGlkID09IFBST0RJRF9PU0lURUNIX1NFVkVOKSkgfHwKKwkgICAgKChzbWMtPm1hbmZpZCA9PSBNQU5GSURfUFNJT04pICYmCisJICAgICAoc21jLT5jYXJkaWQgPT0gUFJPRElEX1BTSU9OX05FVDEwMCkpKSB7CisJCS8qIERvd25sb2FkIHRoZSBTZXZlbiBvZiBEaWFtb25kcyBmaXJtd2FyZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKF9fWGlsaW54N09EKTsgaSsrKSB7CisJCQlvdXRiKF9fWGlsaW54N09EW2ldLCBsaW5rLT5pby5CYXNlUG9ydDErMik7CisJCQl1ZGVsYXkoNTApOwogCQl9Ci0JCWlmICgoKHNtYy0+bWFuZmlkID09IE1BTkZJRF9PU0lURUNIKSAmJgotCQkgICAgIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfT1NJVEVDSF9TRVZFTikpIHx8Ci0JCSAgICAoKHNtYy0+bWFuZmlkID09IE1BTkZJRF9QU0lPTikgJiYKLQkJICAgICAoc21jLT5jYXJkaWQgPT0gUFJPRElEX1BTSU9OX05FVDEwMCkpKSB7Ci0JCQkvKiBEb3dubG9hZCB0aGUgU2V2ZW4gb2YgRGlhbW9uZHMgZmlybXdhcmUgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoX19YaWxpbng3T0QpOyBpKyspIHsKLQkJCQlvdXRiKF9fWGlsaW54N09EW2ldLCBsaW5rLT5pby5CYXNlUG9ydDErMik7Ci0JCQkJdWRlbGF5KDUwKTsKLQkJCX0KLQkJfQotCQlpZiAobGluay0+b3BlbikgewotCQkJc21jX3Jlc2V0KGRldik7Ci0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCX0KKwl9CisJaWYgKGxpbmstPm9wZW4pIHsKKwkJc21jX3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTkzMSw3ICs5MDksNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBjaGVja19zaWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgY2hlY2tfc2lnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC05NjQsMTMgKzk0MiwxNSBAQAogICAgIH0KIAogICAgIGlmICh3aWR0aCkgewotCXByaW50ayhLRVJOX0lORk8gInNtYzkxYzkyX2NzOiB1c2luZyA4LWJpdCBJTyB3aW5kb3cuXG4iKTsKLQlzbWM5MWM5Ml9zdXNwZW5kKGxpbmstPmhhbmRsZSk7Ci0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCXNtYzkxYzkyX3Jlc3VtZShsaW5rLT5oYW5kbGUpOwotCXJldHVybiBjaGVja19zaWcobGluayk7CisJICAgIG1vZGNvbmZfdCBtb2QgPSB7CisJCSAgICAuQXR0cmlidXRlcyA9IENPTkZfSU9fQ0hBTkdFX1dJRFRILAorCSAgICB9OworCSAgICBwcmludGsoS0VSTl9JTkZPICJzbWM5MWM5Ml9jczogdXNpbmcgOC1iaXQgSU8gd2luZG93LlxuIik7CisKKwkgICAgc21jOTFjOTJfc3VzcGVuZChsaW5rKTsKKwkgICAgcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKGxpbmssICZtb2QpOworCSAgICBzbWM5MWM5Ml9yZXN1bWUobGluayk7CisJICAgIHJldHVybiBjaGVja19zaWcobGluayk7CiAgICAgfQogICAgIHJldHVybiAtRU5PREVWOwogfQpAQCAtOTg0LDExICs5NjQsMTAgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjZGVmaW5lIENTX0VYSVRfVEVTVChyZXQsIHN2YywgbGFiZWwpIFwKLWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeyBjc19lcnJvcihsaW5rLT5oYW5kbGUsIHN2YywgcmV0KTsgZ290byBsYWJlbDsgfQoraWYgKHJldCAhPSBDU19TVUNDRVNTKSB7IGNzX2Vycm9yKGxpbmssIHN2YywgcmV0KTsgZ290byBsYWJlbDsgfQogCi1zdGF0aWMgdm9pZCBzbWM5MWM5Ml9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgc21jOTFjOTJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHN0cnVjdCBzbWNfY2ZnX21lbSAqY2ZnX21lbTsKQEAgLTEwMTUsMjEgKzk5NCwxOCBAQAogICAgIHR1cGxlLT5UdXBsZURhdGFNYXggPSA2NDsKIAogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotICAgIGkgPSBmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAgICAgQ1NfRVhJVF9URVNUKGksIFBhcnNlVHVwbGUsIGNvbmZpZ19mYWlsZWQpOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLT5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS0+Y29uZmlnLnJtYXNrWzBdOwogCiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7CiAgICAgdHVwbGUtPkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwotICAgIGlmIChmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKIAlzbWMtPm1hbmZpZCA9IHBhcnNlLT5tYW5maWQubWFuZjsKIAlzbWMtPmNhcmRpZCA9IHBhcnNlLT5tYW5maWQuY2FyZDsKICAgICB9CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICBpZiAoKHNtYy0+bWFuZmlkID09IE1BTkZJRF9PU0lURUNIKSAmJgogCShzbWMtPmNhcmRpZCAhPSBQUk9ESURfT1NJVEVDSF9TRVZFTikpIHsKIAlpID0gb3NpX2NvbmZpZyhsaW5rKTsKQEAgLTEwNDMsOSArMTAxOSw5IEBACiAgICAgfQogICAgIENTX0VYSVRfVEVTVChpLCBSZXF1ZXN0SU8sIGNvbmZpZ19mYWlsZWQpOwogCi0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAgICAgQ1NfRVhJVF9URVNUKGksIFJlcXVlc3RJUlEsIGNvbmZpZ19mYWlsZWQpOwotICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKICAgICBDU19FWElUX1RFU1QoaSwgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGNvbmZpZ19mYWlsZWQpOwogCiAgICAgaWYgKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NT1RPUk9MQSkKQEAgLTExMjQsMTMgKzExMDAsMTIgQEAKIAlTTUNfU0VMRUNUX0JBTksoMCk7CiAgICAgfQogCi0gICAgbGluay0+ZGV2ID0gJnNtYy0+bm9kZTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmc21jLT5ub2RlOworICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9FUlIgInNtYzkxYzkyX2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwotCWxpbmstPmRldiA9IE5VTEw7CisJbGluay0+ZGV2X25vZGUgPSBOVUxMOwogCWdvdG8gY29uZmlnX3VuZG87CiAgICAgfQogCkBAIC0xMTYwLDE1ICsxMTM1LDE0IEBACiAJfQogICAgIH0KICAgICBrZnJlZShjZmdfbWVtKTsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGNvbmZpZ191bmRvOgogICAgIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiBjb25maWdfZmFpbGVkOgkJCS8qIENTX0VYSVRfVEVTVCgpIGNhbGxzIGp1bXAgdG8gaGVyZS4uLiAqLwogICAgIHNtYzkxYzkyX3JlbGVhc2UobGluayk7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKICAgICBrZnJlZShjZmdfbWVtKTsKLQorICAgIHJldHVybiAtRU5PREVWOwogfSAvKiBzbWM5MWM5Ml9jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMTc5LDIyICsxMTUzLDE1IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBzbWM5MWM5Ml9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBzbWM5MWM5Ml9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCi0gICAgREVCVUcoMCwgInNtYzkxYzkyX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwotCi0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLSAgICBpZiAobGluay0+d2luKSB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0Jc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwotCWlvdW5tYXAoc21jLT5iYXNlKTsKLQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLSAgICB9Ci0KLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlERUJVRygwLCAic21jOTFjOTJfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJaWYgKGxpbmstPndpbikgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwkJc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOworCQlpb3VubWFwKHNtYy0+YmFzZSk7CisJfQorCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMjgzLDcgKzEyNTAsNyBAQAogc3RhdGljIGludCBzbWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJnNtYy0+bGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IHNtYy0+cF9kZXY7CiAKICNpZmRlZiBQQ01DSUFfREVCVUcKICAgICBERUJVRygwLCAiJXM6IHNtY19vcGVuKCVwKSwgSUQvV2luZG93ICU0LjR4LlxuIiwKQEAgLTEyOTIsNyArMTI1OSw3IEBACiAjZW5kaWYKIAogICAgIC8qIENoZWNrIHRoYXQgdGhlIFBDTUNJQSBjYXJkIGlzIHN0aWxsIGhlcmUuICovCi0gICAgaWYgKCFERVZfT0sobGluaykpCisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgLyogUGh5c2ljYWwgZGV2aWNlIHByZXNlbnQgc2lnbmF0dXJlLiAqLwogICAgIGlmIChjaGVja19zaWcobGluaykgPCAwKSB7CkBAIC0xMzIwLDcgKzEyODcsNyBAQAogc3RhdGljIGludCBzbWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9ICZzbWMtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBzbWMtPnBfZGV2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKICAgICBERUJVRygwLCAiJXM6IHNtY19jbG9zZSgpLCBzdGF0dXMgJTQuNHguXG4iLApAQCAtMjMxMSw3ICsyMjc4LDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAic21jOTFjOTJfY3MiLAogCX0sCi0JLnByb2JlCQk9IHNtYzkxYzkyX2F0dGFjaCwKKwkucHJvYmUJCT0gc21jOTFjOTJfcHJvYmUsCiAJLnJlbW92ZQkJPSBzbWM5MWM5Ml9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gc21jOTFjOTJfaWRzLAogCS5zdXNwZW5kCT0gc21jOTFjOTJfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCmluZGV4IGVlZDQ5NjguLjcxZjQ1MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwpAQCAtMjg5LDkgKzI4OSw5IEBACiAgKiBhbmQgZWplY3Rpb24gZXZlbnRzLiAgVGhleSBhcmUgaW52b2tlZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLgogICovCiAKLXN0YXRpYyBpbnQgaGFzX2NlMl9zdHJpbmcoZGV2X2xpbmtfdCAqIGxpbmspOwotc3RhdGljIHZvaWQgeGlyYzJwc19jb25maWcoZGV2X2xpbmtfdCAqIGxpbmspOwotc3RhdGljIHZvaWQgeGlyYzJwc19yZWxlYXNlKGRldl9saW5rX3QgKiBsaW5rKTsKK3N0YXRpYyBpbnQgaGFzX2NlMl9zdHJpbmcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKTsKK3N0YXRpYyBpbnQgeGlyYzJwc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKTsKK3N0YXRpYyB2b2lkIHhpcmMycHNfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspOwogCiAvKioqKioqKioqKioqKioqKgogICogVGhlIGF0dGFjaCgpIGFuZCBkZXRhY2goKSBlbnRyeSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGFuZCBkZXN0cm95CkBAIC0zMTMsMTAgKzMxMywxMCBAQAogLyoqKioqKioqKioqKioqKioKICAqIEEgbGlua2VkIGxpc3Qgb2YgImluc3RhbmNlcyIgb2YgdGhlIGRldmljZS4gIEVhY2ggYWN0dWFsCiAgKiBQQ01DSUEgY2FyZCBjb3JyZXNwb25kcyB0byBvbmUgZGV2aWNlIGluc3RhbmNlLCBhbmQgaXMgZGVzY3JpYmVkCi0gKiBieSBvbmUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCisgKiBieSBvbmUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgogICoKICAqIFlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIGEgbGlua2VkIGxpc3QgZm9yIHRoaXMgLS0gZm9yIGV4YW1wbGUsIHRoZQotICogbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2YgZGV2X2xpbmtfdCBwb2ludGVycywgd2hlcmUgbWlub3IKKyAqIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdCBwY21jaWFfZGV2aWNlIHBvaW50ZXJzLCB3aGVyZSBtaW5vcgogICogZGV2aWNlIG51bWJlcnMgYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGluZGV4LgogICovCiAKQEAgLTMyNiwxMyArMzI2LDEzIEBACiAgKiBleGFtcGxlLCBldGhlcm5ldCBjYXJkcywgbW9kZW1zKS4gIEluIG90aGVyIGNhc2VzLCB0aGVyZSBtYXkgYmUKICAqIG1hbnkgYWN0dWFsIG9yIGxvZ2ljYWwgZGV2aWNlcyAoU0NTSSBhZGFwdGVycywgbWVtb3J5IGNhcmRzIHdpdGgKICAqIG11bHRpcGxlIHBhcnRpdGlvbnMpLiAgVGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlcyBuZWVkIHRvIGJlIGtlcHQKLSAqIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgZGV2X2xpbmtfdAorICogaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBzdHJ1Y3QgcGNtY2lhX2RldmljZQogICogc3RydWN0dXJlLiAgV2UgYWxsb2NhdGUgdGhlbSBpbiB0aGUgY2FyZCdzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsCiAgKiBiZWNhdXNlIHRoZXkgZ2VuZXJhbGx5IGNhbid0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS4KICAqLwogCiB0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgewotICAgIGRldl9saW5rX3QgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdCBub2RlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgIGludCBjYXJkX3R5cGU7CkBAIC0zNTUsNyArMzU1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZG9fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X2FkZHJlc3NlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc2V0X2NhcmRfdHlwZShkZXZfbGlua190ICpsaW5rLCBjb25zdCB2b2lkICpzKTsKK3N0YXRpYyBpbnQgc2V0X2NhcmRfdHlwZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgY29uc3Qgdm9pZCAqcyk7CiBzdGF0aWMgaW50IGRvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7CiBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGRvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwpAQCAtMzY4LDcgKzM2OCw3IEBACiAKIC8qPT09PT09PT09PT09PT09IEhlbHBlciBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50Ci1maXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaW50IGVycjsKIApAQCAtMzc5LDcgKzM3OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLW5leHRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaW50IGVycjsKIApAQCAtNTUzLDkgKzU1Myw4IEBACiAgKi8KIAogc3RhdGljIGludAoteGlyYzJwc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQoreGlyYzJwc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbDsKIApAQCAtNTY2LDEyICs1NjUsMTEgQEAKICAgICBpZiAoIWRldikKIAkgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxpbmsgPSAmbG9jYWwtPmxpbms7CisgICAgbG9jYWwtPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gZGV2OwogCiAgICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwpAQCAtNTkzLDEzICs1OTEsNyBAQAogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogI2VuZGlmCiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgeGlyYzJwc19jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4geGlyYzJwc19jb25maWcobGluayk7CiB9IC8qIHhpcmMycHNfYXR0YWNoICovCiAKIC8qKioqKioqKioqKioqKioqCkBAIC02MTAsMTggKzYwMiwxNiBAQAogICovCiAKIHN0YXRpYyB2b2lkCi14aXJjMnBzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCit4aXJjMnBzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAogICAgIERFQlVHKDAsICJkZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgaWYgKGxpbmstPmRldikKKyAgICBpZiAobGluay0+ZGV2X25vZGUpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JeGlyYzJwc19yZWxlYXNlKGxpbmspOworICAgIHhpcmMycHNfcmVsZWFzZShsaW5rKTsKIAogICAgIGZyZWVfbmV0ZGV2KGRldik7CiB9IC8qIHhpcmMycHNfZGV0YWNoICovCkBAIC02NDUsNyArNjM1LDcgQEAKICAqCiAgKi8KIHN0YXRpYyBpbnQKLXNldF9jYXJkX3R5cGUoZGV2X2xpbmtfdCAqbGluaywgY29uc3Qgdm9pZCAqcykKK3NldF9jYXJkX3R5cGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGNvbnN0IHZvaWQgKnMpCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MTQsOSArNzA0LDggQEAKICAqIFJldHVybnM6IHRydWUgaWYgdGhpcyBpcyBhIENFMgogICovCiBzdGF0aWMgaW50Ci1oYXNfY2UyX3N0cmluZyhkZXZfbGlua190ICogbGluaykKK2hhc19jZTJfc3RyaW5nKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHR1cGxlX3QgdHVwbGU7CiAgICAgY2lzcGFyc2VfdCBwYXJzZTsKICAgICB1X2NoYXIgYnVmWzI1Nl07CkBAIC03MjYsNyArNzE1LDcgQEAKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSAyNTQ7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0gICAgaWYgKCFmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAmJiBwYXJzZS52ZXJzaW9uXzEubnMgPiAyKSB7CisgICAgaWYgKCFmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgJiYgcGFyc2UudmVyc2lvbl8xLm5zID4gMikgewogCWlmIChzdHJzdHIocGFyc2UudmVyc2lvbl8xLnN0ciArIHBhcnNlLnZlcnNpb25fMS5vZnNbMl0sICJDRTIiKSkKIAkgICAgcmV0dXJuIDE7CiAgICAgfQpAQCAtNzM4LDEwICs3MjcsOSBAQAogICogaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCiAgKiBldGhlcm5ldCBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiAgKi8KLXN0YXRpYyB2b2lkCi14aXJjMnBzX2NvbmZpZyhkZXZfbGlua190ICogbGluaykKK3N0YXRpYyBpbnQKK3hpcmMycHNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGxvY2FsX2luZm9fdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHR1cGxlX3QgdHVwbGU7CkBAIC03NjcsNyArNzU1LDcgQEAKIAogICAgIC8qIElzIHRoaXMgYSB2YWxpZAljYXJkICovCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKLSAgICBpZiAoKGVycj1maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSkpIHsKKyAgICBpZiAoKGVycj1maXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpKSB7CiAJcHJpbnRrKEtOT1RfWElSQyAibWFuZmlkIG5vdCBmb3VuZCBpbiBDSVNcbiIpOwogCWdvdG8gZmFpbHVyZTsKICAgICB9CkBAIC04MDMsMTUgKzc5MSwxNSBAQAogCiAgICAgLyogZ2V0IGNvbmZpZ3VyYXRpb24gc3R1ZmYgKi8KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotICAgIGlmICgoZXJyPWZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKSkKKyAgICBpZiAoKGVycj1maXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpKQogCWdvdG8gY2lzX2Vycm9yOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9ICAgIHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAogICAgIC8qIGdldCB0aGUgZXRoZXJuZXQgYWRkcmVzcyBmcm9tIHRoZSBDSVMgKi8KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7Ci0gICAgZm9yIChlcnIgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsgIWVycjsKLQkJCSAgICAgZXJyID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSkgeworICAgIGZvciAoZXJyID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOyAhZXJyOworCQkJICAgICBlcnIgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkgewogCS8qIE9uY2UgSSBzYXcgdHdvIENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCBlbnRyaWVzOgogCSAqIHRoZSBmaXJzdCBvbmUgd2l0aCBhIGxlbmd0aCBvZiB6ZXJvIHRoZSBzZWNvbmQgY29ycmVjdCAtCiAJICogc28gSSBza2lwIGFsbCBlbnRyaWVzIHdpdGggbGVuZ3RoIDAgKi8KQEAgLTgyMSw4ICs4MDksOCBAQAogICAgIH0KICAgICBpZiAoZXJyKSB7IC8qIG5vdCBmb3VuZDogdHJ5IHRvIGdldCB0aGUgbm9kZS1pZCBmcm9tIHR1cGxlIDB4ODkgKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSAweDg5OyAgLyogZGF0YSBsYXlvdXQgbG9va3MgbGlrZSB0dXBsZSAweDIyICovCi0JaWYgKChlcnIgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSkgPT0gMCAmJgotCQkoZXJyID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSkgPT0gMCkgeworCWlmICgoZXJyID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSA9PSAwICYmCisJCShlcnIgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkgPT0gMCkgewogCSAgICBpZiAodHVwbGUuVHVwbGVEYXRhTGVuID09IDggJiYgKmJ1ZiA9PSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQpCiAJCW1lbWNweSgmcGFyc2UsIGJ1ZiwgOCk7CiAJICAgIGVsc2UKQEAgLTgzMSw4ICs4MTksOCBAQAogICAgIH0KICAgICBpZiAoZXJyKSB7IC8qIGFub3RoZXIgdHJ5CShKYW1lcyBMZWhtZXIncyBDRTIgdmVyc2lvbiA0LjEpKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7Ci0JZm9yIChlcnIgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsgIWVycjsKLQkJCQkgZXJyID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSkgeworCWZvciAoZXJyID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOyAhZXJyOworCQkJCSBlcnIgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkgewogCSAgICBpZiAocGFyc2UuZnVuY2UudHlwZSA9PSAweDAyICYmIHBhcnNlLmZ1bmNlLmRhdGFbMF0gPT0gMQogCQkmJiBwYXJzZS5mdW5jZS5kYXRhWzFdID09IDYgJiYgdHVwbGUuVHVwbGVEYXRhTGVuID09IDEzKSB7CiAJCWJ1ZlsxXSA9IDQ7CkBAIC04NTMsOSArODQxLDYgQEAKICAgICBmb3IgKGk9MDsgaSA8IDY7IGkrKykKIAlkZXYtPmRldl9hZGRyW2ldID0gbm9kZV9pZC0+aWRbaV07CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9MTA7CiAgICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfSEFORExFX1BSRVNFTlQ7CkBAIC04NzUsMTQgKzg2MCwxNCBAQAogCSAgICAgKiBFdGhlcm5ldCBwb3J0ICovCiAJICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE2OyAvKiBubyBNYWtvIHN0dWZmIGFueW1vcmUgKi8KIAkgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JICAgIGZvciAoZXJyID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7ICFlcnI7Ci0JCQkJIGVyciA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpIHsKKwkgICAgZm9yIChlcnIgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7ICFlcnI7CisJCQkJIGVyciA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKSB7CiAJCWlmIChjZi0+aW8ubndpbiA+IDAgICYmICAoY2YtPmlvLndpblswXS5iYXNlICYgMHhmKSA9PSA4KSB7CiAJCSAgICBmb3IgKGlvYWRkciA9IDB4MzAwOyBpb2FkZHIgPCAweDQwMDsgaW9hZGRyICs9IDB4MTApIHsKIAkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXggOwogCQkJbGluay0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOwogCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW9hZGRyOwotCQkJaWYgKCEoZXJyPXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSkpCisJCQlpZiAoIShlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkpCiAJCQkgICAgZ290byBwb3J0X2ZvdW5kOwogCQkgICAgfQogCQl9CkBAIC04OTYsMTUgKzg4MSwxNSBAQAogCSAgICAgKi8KIAkgICAgZm9yIChwYXNzPTA7IHBhc3MgPCAyOyBwYXNzKyspIHsKIAkJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JCWZvciAoZXJyID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7ICFlcnI7Ci0JCQkJICAgICBlcnIgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKXsKKwkJZm9yIChlcnIgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7ICFlcnI7CisJCQkJICAgICBlcnIgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSl7CiAJCSAgICBpZiAoY2YtPmlvLm53aW4gPiAwICAmJiAgKGNmLT5pby53aW5bMF0uYmFzZSAmIDB4ZikgPT0gOCl7CiAJCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4IDsKIAkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMF0uYmFzZTsKIAkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGxpbmstPmlvLkJhc2VQb3J0MgogCQkJCSAgICArIChwYXNzID8gKGNmLT5pbmRleCAmIDB4MjAgPyAtMjQ6OCkKIAkJCQkJICAgIDogKGNmLT5pbmRleCAmIDB4MjAgPyAgIDg6LTI0KSk7Ci0JCQlpZiAoIShlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pKSkKKwkJCWlmICghKGVycj1wY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKSkKIAkJCSAgICBnb3RvIHBvcnRfZm91bmQ7CiAJCSAgICB9CiAJCX0KQEAgLTkxOSwxMiArOTA0LDEyIEBACiAJbGluay0+aW8uTnVtUG9ydHMxID0gMTY7CiAJZm9yIChpb2FkZHIgPSAweDMwMDsgaW9hZGRyIDwgMHg0MDA7IGlvYWRkciArPSAweDEwKSB7CiAJICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKLQkgICAgaWYgKCEoZXJyPXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSkpCisJICAgIGlmICghKGVycj1wY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKSkKIAkJZ290byBwb3J0X2ZvdW5kOwogCX0KIAlsaW5rLT5pby5CYXNlUG9ydDEgPSAwOyAvKiBsZXQgQ1MgZGVjaWRlICovCi0JaWYgKChlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pKSkgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgZXJyKTsKKwlpZiAoKGVycj1wY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKSkgeworCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGVycik7CiAJICAgIGdvdG8gY29uZmlnX2Vycm9yOwogCX0KICAgICB9CkBAIC05MzYsOCArOTIxLDggQEAKICAgICAgKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuCU5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CiAgICAgICogYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgogICAgICAqLwotICAgIGlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKSkgewotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElSUSwgZXJyKTsKKyAgICBpZiAoKGVycj1wY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpKSB7CisJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgZXJyKTsKIAlnb3RvIGNvbmZpZ19lcnJvcjsKICAgICB9CiAKQEAgLTk0NSw4ICs5MzAsOCBAQAogICAgICAqIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCiAgICAgICogdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcuCiAgICAgICovCi0gICAgaWYgKChlcnI9cGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSkpIHsKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBlcnIpOworICAgIGlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSkgeworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBlcnIpOwogCWdvdG8gY29uZmlnX2Vycm9yOwogICAgIH0KIApAQCAtOTYzLDE1ICs5NDgsMTUgQEAKIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IENJU1JFR19JT0JBU0VfMDsKIAlyZWcuVmFsdWUgPSBsaW5rLT5pby5CYXNlUG9ydDIgJiAweGZmOwotCWlmICgoZXJyID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZykpKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBlcnIpOworCWlmICgoZXJyID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpKSkgeworCSAgICBjc19lcnJvcihsaW5rLCBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGVycik7CiAJICAgIGdvdG8gY29uZmlnX2Vycm9yOwogCX0KIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IENJU1JFR19JT0JBU0VfMTsKIAlyZWcuVmFsdWUgPSAobGluay0+aW8uQmFzZVBvcnQyID4+IDgpICYgMHhmZjsKLQlpZiAoKGVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLT5oYW5kbGUsICZyZWcpKSkgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgZXJyKTsKKwlpZiAoKGVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSkpIHsKKwkgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBlcnIpOwogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKIAl9CiAKQEAgLTk4MiwxNSArOTY3LDE1IEBACiAJcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84fFdJTl9NRU1PUllfVFlQRV9BTXxXSU5fRU5BQkxFOwogCXJlcS5CYXNlID0gcmVxLlNpemUgPSAwOwogCXJlcS5BY2Nlc3NTcGVlZCA9IDA7Ci0JaWYgKChlcnIgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbikpKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdFdpbmRvdywgZXJyKTsKKwlpZiAoKGVyciA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpKSB7CisJICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RXaW5kb3csIGVycik7CiAJICAgIGdvdG8gY29uZmlnX2Vycm9yOwogCX0KIAlsb2NhbC0+ZGluZ29fY2NyID0gaW9yZW1hcChyZXEuQmFzZSwweDEwMDApICsgMHgwODAwOwogCW1lbS5DYXJkT2Zmc2V0ID0gMHgwOwogCW1lbS5QYWdlID0gMDsKIAlpZiAoKGVyciA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKSkpIHsKLQkgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBNYXBNZW1QYWdlLCBlcnIpOworCSAgICBjc19lcnJvcihsaW5rLCBNYXBNZW1QYWdlLCBlcnIpOwogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKIAl9CiAKQEAgLTEwNTAsMTMgKzEwMzUsMTIgQEAKICAgICBpZiAobG9jYWwtPmRpbmdvKQogCWRvX3Jlc2V0KGRldiwgMSk7IC8qIGEga2x1ZGdlIHRvIG1ha2UgdGhlIGNlbTU2IHdvcmsgKi8KIAotICAgIGxpbmstPmRldiA9ICZsb2NhbC0+bm9kZTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmbG9jYWwtPm5vZGU7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgICBpZiAoKGVycj1yZWdpc3Rlcl9uZXRkZXYoZGV2KSkpIHsKIAlwcmludGsoS05PVF9YSVJDICJyZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwotCWxpbmstPmRldiA9IE5VTEw7CisJbGluay0+ZGV2X25vZGUgPSBOVUxMOwogCWdvdG8gY29uZmlnX2Vycm9yOwogICAgIH0KIApAQCAtMTA2OSwxNyArMTA1MywxNiBAQAogCXByaW50aygiJWMlMDJYIiwgaT8nOic6JyAnLCBkZXYtPmRldl9hZGRyW2ldKTsKICAgICBwcmludGsoIlxuIik7CiAKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKICAgY29uZmlnX2Vycm9yOgotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CiAgICAgeGlyYzJwc19yZWxlYXNlKGxpbmspOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gLUVOT0RFVjsKIAogICBjaXNfZXJyb3I6CiAgICAgcHJpbnRrKEtOT1RfWElSQyAidW5hYmxlIHRvIHBhcnNlIENJU1xuIik7CiAgIGZhaWx1cmU6Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogeGlyYzJwc19jb25maWcgKi8KIAogLyoqKioqKioqKioqKioqKioKQEAgLTEwODgsNTcgKzEwNzEsNDEgQEAKICAqIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgogICovCiBzdGF0aWMgdm9pZAoteGlyYzJwc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCit4aXJjMnBzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CisJREVCVUcoMCwgInJlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0gICAgREVCVUcoMCwgInJlbGVhc2UoMHglcClcbiIsIGxpbmspOwotCi0gICAgaWYgKGxpbmstPndpbikgewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCWlmIChsb2NhbC0+ZGluZ28pCi0JICAgIGlvdW5tYXAobG9jYWwtPmRpbmdvX2NjciAtIDB4MDgwMCk7Ci0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgfQotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7Ci0KKwlpZiAobGluay0+d2luKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OworCQlsb2NhbF9pbmZvX3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaWYgKGxvY2FsLT5kaW5nbykKKwkJCWlvdW5tYXAobG9jYWwtPmRpbmdvX2NjciAtIDB4MDgwMCk7CisJfQorCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0gLyogeGlyYzJwc19yZWxlYXNlICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAKLXN0YXRpYyBpbnQgeGlyYzJwc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgeGlyYzJwc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAobGluay0+b3BlbikgewotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQkJZG9fcG93ZXJkb3duKGRldik7Ci0JCX0KLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOworCWlmIChsaW5rLT5vcGVuKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwkJZG9fcG93ZXJkb3duKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgeGlyYzJwc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB4aXJjMnBzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQlkb19yZXNldChkZXYsMSk7Ci0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCX0KKwlpZiAobGluay0+b3BlbikgeworCQlkb19yZXNldChkZXYsMSk7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE1NTIsMTMgKzE1MTksMTMgQEAKIGRvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmxwLT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogCiAgICAgREVCVUcoMCwgImRvX29wZW4oJXApXG4iLCBkZXYpOwogCiAgICAgLyogQ2hlY2sgdGhhdCB0aGUgUENNQ0lBIGNhcmQgaXMgc3RpbGwgaGVyZS4gKi8KICAgICAvKiBQaHlzaWNhbCBkZXZpY2UgcHJlc2VudCBzaWduYXR1cmUuICovCi0gICAgaWYgKCFERVZfT0sobGluaykpCisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJcmV0dXJuIC1FTk9ERVY7CiAKICAgICAvKiBva2F5ICovCkBAIC0xODgyLDcgKzE4NDksNyBAQAogewogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9ICZscC0+bGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5wX2RldjsKIAogICAgIERFQlVHKDAsICJkb19zdG9wKCVwKVxuIiwgZGV2KTsKIApAQCAtMTkzNSw3ICsxOTAyLDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAieGlyYzJwc19jcyIsCiAJfSwKLQkucHJvYmUJCT0geGlyYzJwc19hdHRhY2gsCisJLnByb2JlCQk9IHhpcmMycHNfcHJvYmUsCiAJLnJlbW92ZQkJPSB4aXJjMnBzX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSB4aXJjMnBzX2lkcywKIAkuc3VzcGVuZAk9IHhpcmMycHNfc3VzcGVuZCwKQEAgLTE5NzMsNyArMTk0MCw3IEBACiAJTUFZQkVfU0VUKGxvY2t1cF9oYWNrLCA2KTsKICN1bmRlZiAgTUFZQkVfU0VUCiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgieGlyYzJwc19jcz0iLCBzZXR1cF94aXJjMnBzX2NzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCAwN2MzMWYxLi5mYzA4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0xNzc0LDggKzE3NzQsNiBAQAogCQlscC0+cnhfZG1hX2FkZHJbaV0gPSAwOwogCX0KIAotCXBjbmV0MzJfZnJlZV9yaW5nKGRldik7Ci0KIAkvKgogCSAqIFN3aXRjaCBiYWNrIHRvIDE2Yml0IG1vZGUgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBkdW1iCiAJICogRE9TIHBhY2tldCBkcml2ZXIgYWZ0ZXIgYSB3YXJtIHJlYm9vdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwppbmRleCA0NTk0NDNiLi4xYjIzNmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtNjAsOCArNjAsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspIHsKIAkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAotCQlpZiAoYnVzLT5waHlfbWFzayAmICgxIDw8IGkpKQorCQlpZiAoYnVzLT5waHlfbWFzayAmICgxIDw8IGkpKSB7CisJCQlidXMtPnBoeV9tYXBbaV0gPSBOVUxMOwogCQkJY29udGludWU7CisJCX0KIAogCQlwaHlkZXYgPSBnZXRfcGh5X2RldmljZShidXMsIGkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwb2UuYwppbmRleCA0NzVkYzkzLi4wZDEwMWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKQEAgLTg2MSw2ICs4NjEsOSBAQAogCQkgKiBnaXZlIGRldl9xdWV1ZV94bWl0IHNvbWV0aGluZyBpdCBjYW4gZnJlZS4KIAkJICovCiAJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKworCQlpZiAoc2tiMiA9PSBOVUxMKQorCQkJZ290byBhYm9ydDsKIAl9CiAKIAlwaCA9IChzdHJ1Y3QgcHBwb2VfaGRyICopIHNrYl9wdXNoKHNrYjIsIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IGI4MjE5MWQuLmY1YTNiZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0xMjcsNiArMTI3LDcgQEAKIH0gbWlpX2NoaXBfdGFibGVbXSA9IHsKIAl7ICJTaVMgOTAwIEludGVybmFsIE1JSSBQSFkiLCAJCTB4MDAxZCwgMHg4MDAwLCBMQU4gfSwKIAl7ICJTaVMgNzAxNCBQaHlzaWNhbCBMYXllciBTb2x1dGlvbiIsIAkweDAwMTYsIDB4ZjgzMCwgTEFOIH0sCisJeyAiU2lTIDkwMCBvbiBGb3hjb25uIDY2MSA3TUkiLCAgICAgICAgIDB4MDE0MywgMHhCQzcwLCBMQU4gfSwKIAl7ICJBbHRpbWF0YSBBQzEwMUxGIFBIWSIsICAgICAgICAgICAgICAgMHgwMDIyLCAweDU1MjAsIExBTiB9LAogCXsgIkFETSA3MDAxIExBTiBQSFkiLAkJCTB4MDAyZSwgMHhjYzYwLCBMQU4gfSwKIAl7ICJBTUQgNzlDOTAxIDEwQkFTRS1UIFBIWSIsICAJCTB4MDAwMCwgMHg2QjcwLCBMQU4gfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAzNWRiZjA1Li41Y2E1YTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC03OCw2ICs3OCw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUX0dFKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9ZVSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgUENJX0RFVklDRV9JRF9ETElOS19ER0U1MTBUKSwgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YjAxKSB9LAkvKiBER0UtNTMwVCAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDMyMCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDUwMDUpIH0sIC8qIEJlbGtpbiAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NORVQsIFBDSV9ERVZJQ0VfSURfQ05FVF9HSUdBQ0FSRCkgfSwKQEAgLTQwMCw3ICs0MDEsNyBAQAogCWludCBlcnI7CiAKIAlpZiAocC0+cnhfcGVuZGluZyA9PSAwIHx8IHAtPnJ4X3BlbmRpbmcgPiBNQVhfUlhfUklOR19TSVpFIHx8Ci0JICAgIHAtPnR4X3BlbmRpbmcgPT0gMCB8fCBwLT50eF9wZW5kaW5nID4gTUFYX1RYX1JJTkdfU0laRSkKKwkgICAgcC0+dHhfcGVuZGluZyA8IE1BWF9TS0JfRlJBR1MrMSB8fCBwLT50eF9wZW5kaW5nID4gTUFYX1RYX1JJTkdfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlza2dlLT5yeF9yaW5nLmNvdW50ID0gcC0+cnhfcGVuZGluZzsKQEAgLTI3MTUsOCArMjcxNiw3IEBACiAJCWlmIChjb250cm9sICYgQk1VX09XTikKIAkJCWJyZWFrOwogCi0JCXNrYiA9IHNrZ2VfcnhfZ2V0KHNrZ2UsIGUsIGNvbnRyb2wsIHJkLT5zdGF0dXMsCi0JCQkJICBsZTE2X3RvX2NwdShyZC0+Y3N1bTIpKTsKKwkJc2tiID0gc2tnZV9yeF9nZXQoc2tnZSwgZSwgY29udHJvbCwgcmQtPnN0YXR1cywgcmQtPmNzdW0yKTsKIAkJaWYgKGxpa2VseShza2IpKSB7CiAJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCA2OGY5YzIwLi45N2ZlOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAic2t5Mi5oIgogCiAjZGVmaW5lIERSVl9OQU1FCQkic2t5MiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS40IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiICIKIAogLyoKQEAgLTc5LDYgKzc5LDggQEAKICNkZWZpbmUgTkFQSV9XRUlHSFQJCTY0CiAjZGVmaW5lIFBIWV9SRVRSSUVTCQkxMDAwCiAKKyNkZWZpbmUgUklOR19ORVhUKHgscykJKCgoeCkrMSkgJiAoKHMpLTEpKQorCiBzdGF0aWMgY29uc3QgdTMyIGRlZmF1bHRfbXNnID0KICAgICBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTksKICAgICB8IE5FVElGX01TR19USU1FUiB8IE5FVElGX01TR19UWF9FUlIgfCBORVRJRl9NU0dfUlhfRVJSCkBAIC05NiwxMSArOTgsMTQgQEAKIG1vZHVsZV9wYXJhbShkaXNhYmxlX21zaSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9tc2ksICJEaXNhYmxlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0IChNU0kpIik7CiAKK3N0YXRpYyBpbnQgaWRsZV90aW1lb3V0ID0gMTAwOworbW9kdWxlX3BhcmFtKGlkbGVfdGltZW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaWRsZV90aW1lb3V0LCAiSWRsZSB0aW1lb3V0IHdvcmthcm91bmQgZm9yIGxvc3QgaW50ZXJydXB0cyAobXMpIik7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBza3kyX2lkX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgMHg5MDAwKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIDB4OUUwMCkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YjAwKSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RMSU5LLCAweDRiMDEpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssIDB4NGIwMCkgfSwJLyogREdFLTU2MFQgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNDApIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzQxKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM0MikgfSwKQEAgLTEyNCw2ICsxMjksNyBAQAogLyogQXZvaWQgY29uZGl0aW9uYWxzIGJ5IHVzaW5nIGFycmF5ICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgdHhxYWRkcltdID0geyBRX1hBMSwgUV9YQTIgfTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCByeHFhZGRyW10gPSB7IFFfUjEsIFFfUjIgfTsKK3N0YXRpYyBjb25zdCB1MzIgcG9ydGlycV9tc2tbXSA9IHsgWTJfSVNfUE9SVF8xLCBZMl9JU19QT1JUXzIgfTsKIAogLyogVGhpcyBkcml2ZXIgc3VwcG9ydHMgeXVrb24yIGNoaXBzZXQgb25seSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnl1a29uMl9uYW1lW10gPSB7CkBAIC0xODEsMTIgKzE4NywxMSBAQAogCXJldHVybiB2OwogfQogCi1zdGF0aWMgaW50IHNreTJfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBza3kyX2h3ICpodywgcGNpX3Bvd2VyX3Qgc3RhdGUpCitzdGF0aWMgdm9pZCBza3kyX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHBjaV9wb3dlcl90IHN0YXRlKQogewogCXUxNiBwb3dlcl9jb250cm9sOwogCXUzMiByZWcxOwogCWludCB2YXV4OwotCWludCByZXQgPSAwOwogCiAJcHJfZGVidWcoInNreTJfc2V0X3Bvd2VyX3N0YXRlICVkXG4iLCBzdGF0ZSk7CiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7CkBAIC0yMzAsNiArMjM1LDcgQEAKIAkJfQogCiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpIHsKKwkJCXNreTJfd3JpdGUxNihodywgQjBfQ1RTVCwgWTJfSFdfV09MX09OKTsKIAkJCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9ERVZfUkVHMywgMCk7CiAJCQlyZWcxID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzQpOwogCQkJcmVnMSAmPSBQX0FTUE1fQ09OVFJPTF9NU0s7CkBAIC0yNjgsMTIgKzI3NCwxMCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmtub3duIHBvd2VyIHN0YXRlICVkXG4iLCBzdGF0ZSk7Ci0JCXJldCA9IC0xOwogCX0KIAogCXNreTJfcGNpX3dyaXRlMTYoaHcsIGh3LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgcG93ZXJfY29udHJvbCk7CiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfcGh5X3Jlc2V0KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKQEAgLTMwMCw3ICszMDQsOCBAQAogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihody0+ZGV2W3BvcnRdKTsKIAl1MTYgY3RybCwgY3QxMDAwLCBhZHYsIHBnLCBsZWRjdHJsLCBsZWRvdmVyOwogCi0JaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYgaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9YTCkgeworCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCisJICAgICEoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCB8fCBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpKSB7CiAJCXUxNiBlY3RybCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQ1RSTCk7CiAKIAkJZWN0cmwgJj0gfihQSFlfTV9FQ19NX0RTQ19NU0sgfCBQSFlfTV9FQ19TX0RTQ19NU0sgfApAQCAtMzI4LDcgKzMzMyw3IEBACiAJCQljdHJsIHw9IFBIWV9NX1BDX01ESV9YTU9ERShQSFlfTV9QQ19FTkFfQVVUTyk7CiAKIAkJCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCi0JCQkgICAgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCkgeworCQkJICAgIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMIHx8IGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkpIHsKIAkJCQljdHJsICY9IH5QSFlfTV9QQ19EU0NfTVNLOwogCQkJCWN0cmwgfD0gUEhZX01fUENfRFNDKDIpIHwgUEhZX01fUENfRE9XTl9TX0VOQTsKIAkJCX0KQEAgLTQ0NCwxMCArNDQ5LDExIEBACiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMyk7CiAKIAkJLyogc2V0IExFRCBGdW5jdGlvbiBDb250cm9sIHJlZ2lzdGVyICovCi0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIChQSFlfTV9MRURDX0xPU19DVFJMKDEpIHwJLyogTElOSy9BQ1QgKi8KLQkJCQkJCQkgICBQSFlfTV9MRURDX0lOSVRfQ1RSTCg3KSB8CS8qIDEwIE1icHMgKi8KLQkJCQkJCQkgICBQSFlfTV9MRURDX1NUQTFfQ1RSTCg3KSB8CS8qIDEwMCBNYnBzICovCi0JCQkJCQkJICAgUEhZX01fTEVEQ19TVEEwX0NUUkwoNykpKTsJLyogMTAwMCBNYnBzICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsCisJCQkgICAgIChQSFlfTV9MRURDX0xPU19DVFJMKDEpIHwJLyogTElOSy9BQ1QgKi8KKwkJCSAgICAgIFBIWV9NX0xFRENfSU5JVF9DVFJMKDcpIHwJLyogMTAgTWJwcyAqLworCQkJICAgICAgUEhZX01fTEVEQ19TVEExX0NUUkwoNykgfAkvKiAxMDAgTWJwcyAqLworCQkJICAgICAgUEhZX01fTEVEQ19TVEEwX0NUUkwoNykpKTsJLyogMTAwMCBNYnBzICovCiAKIAkJLyogc2V0IFBvbGFyaXR5IENvbnRyb2wgcmVnaXN0ZXIgKi8KIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfU1RBVCwKQEAgLTQ2MSw2ICs0NjcsMjUgQEAKIAkJLyogcmVzdG9yZSBwYWdlIHJlZ2lzdGVyICovCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgcGcpOwogCQlicmVhazsKKwljYXNlIENISVBfSURfWVVLT05fRUNfVToKKwkJcGcgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUik7CisKKwkJLyogc2VsZWN0IHBhZ2UgMyB0byBhY2Nlc3MgTEVEIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAzKTsKKworCQkvKiBzZXQgTEVEIEZ1bmN0aW9uIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwKKwkJCSAgICAgKFBIWV9NX0xFRENfTE9TX0NUUkwoMSkgfAkvKiBMSU5LL0FDVCAqLworCQkJICAgICAgUEhZX01fTEVEQ19JTklUX0NUUkwoOCkgfAkvKiAxMCBNYnBzICovCisJCQkgICAgICBQSFlfTV9MRURDX1NUQTFfQ1RSTCg3KSB8CS8qIDEwMCBNYnBzICovCisJCQkgICAgICBQSFlfTV9MRURDX1NUQTBfQ1RSTCg3KSkpOy8qIDEwMDAgTWJwcyAqLworCisJCS8qIHNldCBCbGluayBSYXRlIGluIExFRCBUaW1lciBDb250cm9sIFJlZ2lzdGVyICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfSU5UX01BU0ssCisJCQkgICAgIGxlZGN0cmwgfCBQSFlfTV9MRURfQkxJTktfUlQoQkxJTktfODRNUykpOworCQkvKiByZXN0b3JlIHBhZ2UgcmVnaXN0ZXIgKi8KKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCBwZyk7CisJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJLyogc2V0IFR4IExFRCAoTEVEX1RYKSB0byBibGluayBtb2RlIG9uIFJ4IE9SIFR4IGFjdGl2aXR5ICovCkBAIC00NjksMTkgKzQ5NCwyMSBAQAogCQlsZWRvdmVyIHw9IFBIWV9NX0xFRF9NT19SWChNT19MRURfT0ZGKTsKIAl9CiAKLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VICYmIGh3LT5jaGlwX3JldiA+PSAyKSB7CisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSAmJiBody0+Y2hpcF9yZXYgPT0gQ0hJUF9SRVZfWVVfRUNfQTEpIHsKIAkJLyogYXBwbHkgZml4ZXMgaW4gUEhZIEFGRSAqLwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDIyLCAyNTUpOworCQlwZyA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSKTsKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAyNTUpOworCiAJCS8qIGluY3JlYXNlIGRpZmZlcmVudGlhbCBzaWduYWwgYW1wbGl0dWRlIGluIDEwQkFTRS1UICovCi0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjQsIDB4YWE5OSk7Ci0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjMsIDB4MjAxMSk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMHgxOCwgMHhhYTk5KTsKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCAweDE3LCAweDIwMTEpOwogCiAJCS8qIGZpeCBmb3IgSUVFRSBBL0IgU3ltbWV0cnkgZmFpbHVyZSBpbiAxMDAwQkFTRS1UICovCi0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjQsIDB4YTIwNCk7Ci0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjMsIDB4MjAwMik7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMHgxOCwgMHhhMjA0KTsKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCAweDE3LCAweDIwMDIpOwogCiAJCS8qIHNldCBwYWdlIHJlZ2lzdGVyIHRvIDAgKi8KLQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCAyMiwgMCk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgcGcpOwogCX0gZWxzZSB7CiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfTEVEX0NUUkwsIGxlZGN0cmwpOwogCkBAIC01NTUsNiArNTgyLDExIEBACiAKIAkJaWYgKHNreTItPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCXJlZyB8PSBHTV9HUENSX0RVUF9GVUxMOworCisJCS8qIHR1cm4gb2ZmIHBhdXNlIGluIDEwLzEwMG1icHMgaGFsZiBkdXBsZXggKi8KKwkJZWxzZSBpZiAoc2t5Mi0+c3BlZWQgIT0gU1BFRURfMTAwMCAmJgorCQkJIGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT05fRUNfVSkKKwkJCXNreTItPnR4X3BhdXNlID0gc2t5Mi0+cnhfcGF1c2UgPSAwOwogCX0gZWxzZQogCQlyZWcgPSBHTV9HUENSX1NQRUVEXzEwMDAgfCBHTV9HUENSX1NQRUVEXzEwMCB8IEdNX0dQQ1JfRFVQX0ZVTEw7CiAKQEAgLTU3OSw4ICs2MTEsOCBAQAogCXJlZyA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1BIWV9BRERSKTsKIAlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fUEhZX0FERFIsIHJlZyB8IEdNX1BBUl9NSUJfQ0xSKTsKIAotCWZvciAoaSA9IDA7IGkgPCBHTV9NSUJfQ05UX1NJWkU7IGkrKykKLQkJZ21hX3JlYWQxNihodywgcG9ydCwgR01fTUlCX0NOVF9CQVNFICsgOCAqIGkpOworCWZvciAoaSA9IEdNX01JQl9DTlRfQkFTRTsgaSA8PSBHTV9NSUJfQ05UX0VORDsgaSArPSA0KQorCQlnbWFfcmVhZDE2KGh3LCBwb3J0LCBpKTsKIAlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fUEhZX0FERFIsIHJlZyk7CiAKIAkvKiB0cmFuc21pdCBjb250cm9sICovCkBAIC03MjEsNyArNzUzLDcgQEAKIHsKIAlzdHJ1Y3Qgc2t5Ml90eF9sZSAqbGUgPSBza3kyLT50eF9sZSArIHNreTItPnR4X3Byb2Q7CiAKLQlza3kyLT50eF9wcm9kID0gKHNreTItPnR4X3Byb2QgKyAxKSAlIFRYX1JJTkdfU0laRTsKKwlza3kyLT50eF9wcm9kID0gUklOR19ORVhUKHNreTItPnR4X3Byb2QsIFRYX1JJTkdfU0laRSk7CiAJcmV0dXJuIGxlOwogfQogCkBAIC03MzcsNyArNzY5LDcgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNreTJfcnhfbGUgKnNreTJfbmV4dF9yeChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQogewogCXN0cnVjdCBza3kyX3J4X2xlICpsZSA9IHNreTItPnJ4X2xlICsgc2t5Mi0+cnhfcHV0OwotCXNreTItPnJ4X3B1dCA9IChza3kyLT5yeF9wdXQgKyAxKSAlIFJYX0xFX1NJWkU7CisJc2t5Mi0+cnhfcHV0ID0gUklOR19ORVhUKHNreTItPnJ4X3B1dCwgUlhfTEVfU0laRSk7CiAJcmV0dXJuIGxlOwogfQogCkBAIC05MjcsOCArOTU5LDcgQEAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZSArIFJYX1NLQl9BTElHTiwgZ2ZwX21hc2spOwogCWlmIChsaWtlbHkoc2tiKSkgewogCQl1bnNpZ25lZCBsb25nIHAJPSAodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhOwotCQlza2JfcmVzZXJ2ZShza2IsCi0JCQkoKHAgKyBSWF9TS0JfQUxJR04gLSAxKSAmIH4oUlhfU0tCX0FMSUdOIC0gMSkpIC0gcCk7CisJCXNrYl9yZXNlcnZlKHNrYiwgQUxJR04ocCwgUlhfU0tCX0FMSUdOKSAtIHApOwogCX0KIAogCXJldHVybiBza2I7CkBAIC05NDUsNiArOTc2LDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAl1bnNpZ25lZCByeHEgPSByeHFhZGRyW3NreTItPnBvcnRdOwogCWludCBpOworCXVuc2lnbmVkIHRocmVzaDsKIAogCXNreTItPnJ4X3B1dCA9IHNreTItPnJ4X25leHQgPSAwOwogCXNreTJfcXNldChodywgcnhxKTsKQEAgLTk2OSw5ICsxMDAxLDIxIEBACiAJCXNreTJfcnhfYWRkKHNreTIsIHJlLT5tYXBhZGRyKTsKIAl9CiAKLSAJLyogVHJ1bmNhdGUgb3ZlcnNpemUgZnJhbWVzICovCi0gCXNreTJfd3JpdGUxNihodywgU0tfUkVHKHNreTItPnBvcnQsIFJYX0dNRl9UUl9USFIpLCBza3kyLT5yeF9idWZzaXplIC0gOCk7Ci0gCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHNreTItPnBvcnQsIFJYX0dNRl9DVFJMX1QpLCBSWF9UUlVOQ19PTik7CisKKwkvKgorCSAqIFRoZSByZWNlaXZlciBoYW5ncyBpZiBpdCByZWNlaXZlcyBmcmFtZXMgbGFyZ2VyIHRoYW4gdGhlCisJICogcGFja2V0IGJ1ZmZlci4gQXMgYSB3b3JrYXJvdW5kLCB0cnVuY2F0ZSBvdmVyc2l6ZSBmcmFtZXMsIGJ1dAorCSAqIHRoZSByZWdpc3RlciBpcyBsaW1pdGVkIHRvIDkgYml0cywgc28gaWYgeW91IGRvIGZyYW1lcyA+IDIwNTIKKwkgKiB5b3UgYmV0dGVyIGdldCB0aGUgTVRVIHJpZ2h0IQorCSAqLworCXRocmVzaCA9IChza3kyLT5yeF9idWZzaXplIC0gOCkgLyBzaXplb2YodTMyKTsKKwlpZiAodGhyZXNoID4gMHgxZmYpCisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHNreTItPnBvcnQsIFJYX0dNRl9DVFJMX1QpLCBSWF9UUlVOQ19PRkYpOworCWVsc2UgeworCQlza3kyX3dyaXRlMTYoaHcsIFNLX1JFRyhza3kyLT5wb3J0LCBSWF9HTUZfVFJfVEhSKSwgdGhyZXNoKTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcoc2t5Mi0+cG9ydCwgUlhfR01GX0NUUkxfVCksIFJYX1RSVU5DX09OKTsKKwl9CisKIAogCS8qIFRlbGwgY2hpcCBhYm91dCBhdmFpbGFibGUgYnVmZmVycyAqLwogCXNreTJfd3JpdGUxNihodywgWTJfUUFERFIocnhxLCBQUkVGX1VOSVRfUFVUX0lEWCksIHNreTItPnJ4X3B1dCk7CkBAIC05ODgsNyArMTAzMiwyNSBAQAogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwogCXUzMiByYW1zaXplLCByeHNwYWNlLCBpbWFzazsKLQlpbnQgZXJyID0gLUVOT01FTTsKKwlpbnQgY2FwLCBlcnIgPSAtRU5PTUVNOworCXN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcmRldiA9IGh3LT5kZXZbc2t5Mi0+cG9ydF4xXTsKKworCS8qCisgCSAqIE9uIGR1YWwgcG9ydCBQQ0ktWCBjYXJkLCB0aGVyZSBpcyBhbiBwcm9ibGVtIHdoZXJlIHN0YXR1cworCSAqIGNhbiBiZSByZWNlaXZlZCBvdXQgb2Ygb3JkZXIgZHVlIHRvIHNwbGl0IHRyYW5zYWN0aW9ucworCSAqLworCWlmIChvdGhlcmRldiAmJiBuZXRpZl9ydW5uaW5nKG90aGVyZGV2KSAmJgorIAkgICAgKGNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaHctPnBkZXYsIFBDSV9DQVBfSURfUENJWCkpKSB7CisgCQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpvc2t5MiA9IG5ldGRldl9wcml2KG90aGVyZGV2KTsKKyAJCXUxNiBjbWQ7CisKKyAJCWNtZCA9IHNreTJfcGNpX3JlYWQxNihodywgY2FwICsgUENJX1hfQ01EKTsKKyAJCWNtZCAmPSB+UENJX1hfQ01EX01BWF9TUExJVDsKKyAJCXNreTJfcGNpX3dyaXRlMTYoaHcsIGNhcCArIFBDSV9YX0NNRCwgY21kKTsKKworIAkJc2t5Mi0+cnhfY3N1bSA9IDA7CisgCQlvc2t5Mi0+cnhfY3N1bSA9IDA7CisgCX0KIAogCWlmIChuZXRpZl9tc2dfaWZ1cChza3kyKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBlbmFibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CkBAIC0xMDUzLDcgKzExMTUsNyBAQAogCiAJLyogRW5hYmxlIGludGVycnVwdHMgZnJvbSBwaHkvbWFjIGZvciBwb3J0ICovCiAJaW1hc2sgPSBza3kyX3JlYWQzMihodywgQjBfSU1TSyk7Ci0JaW1hc2sgfD0gKHBvcnQgPT0gMCkgPyBZMl9JU19QT1JUXzEgOiBZMl9JU19QT1JUXzI7CisJaW1hc2sgfD0gcG9ydGlycV9tc2tbcG9ydF07CiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBpbWFzayk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwODEsNyArMTE0Myw3IEBACiAvKiBNb2R1bGFyIHN1YnRyYWN0aW9uIGluIHJpbmcgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHR4X2Rpc3QodW5zaWduZWQgdGFpbCwgdW5zaWduZWQgaGVhZCkKIHsKLQlyZXR1cm4gKGhlYWQgLSB0YWlsKSAlIFRYX1JJTkdfU0laRTsKKwlyZXR1cm4gKGhlYWQgLSB0YWlsKSAmIChUWF9SSU5HX1NJWkUgLSAxKTsKIH0KIAogLyogTnVtYmVyIG9mIGxpc3QgZWxlbWVudHMgYXZhaWxhYmxlIGZvciBuZXh0IHR4ICovCkBAIC0xMjU4LDcgKzEzMjAsNyBAQAogCQlsZS0+b3Bjb2RlID0gT1BfQlVGRkVSIHwgSFdfT1dORVI7CiAKIAkJZnJlID0gc2t5Mi0+dHhfcmluZwotCQkgICAgKyAoKHJlIC0gc2t5Mi0+dHhfcmluZykgKyBpICsgMSkgJSBUWF9SSU5HX1NJWkU7CisJCSAgICArIFJJTkdfTkVYVCgocmUgLSBza3kyLT50eF9yaW5nKSArIGksIFRYX1JJTkdfU0laRSk7CiAJCXBjaV91bm1hcF9hZGRyX3NldChmcmUsIG1hcGFkZHIsIG1hcHBpbmcpOwogCX0KIApAQCAtMTMxOCw3ICsxMzgwLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CiAJCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpmcmU7Ci0JCQlmcmUgPSBza3kyLT50eF9yaW5nICsgKHB1dCArIGkgKyAxKSAlIFRYX1JJTkdfU0laRTsKKwkJCWZyZSA9IHNreTItPnR4X3JpbmcgKyBSSU5HX05FWFQocHV0ICsgaSwgVFhfUklOR19TSVpFKTsKIAkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGZyZSwgbWFwYWRkciksCiAJCQkJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSwKIAkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CkBAIC0xNDA0LDcgKzE0NjYsNyBAQAogCiAJLyogRGlzYWJsZSBwb3J0IElSUSAqLwogCWltYXNrID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOwotCWltYXNrICY9IH4oc2t5Mi0+cG9ydCA9PSAwKSA/IFkyX0lTX1BPUlRfMSA6IFkyX0lTX1BPUlRfMjsKKwlpbWFzayAmPSB+cG9ydGlycV9tc2tbcG9ydF07CiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBpbWFzayk7CiAKIAkvKiB0dXJuIG9mZiBMRUQncyAqLwpAQCAtMTUwMSwxNyArMTU2MywyNiBAQAogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgTE5LX0xFRF9SRUcpLAogCQkgICAgTElOS0xFRF9PTiB8IExJTktMRURfQkxJTktfT0ZGIHwgTElOS0xFRF9MSU5LU1lOQ19PRkYpOwogCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwpIHsKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCB8fCBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpIHsKIAkJdTE2IHBnID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIpOworCQl1MTYgbGVkID0gUEhZX01fTEVEQ19MT1NfQ1RSTCgxKTsJLyogbGluayBhY3RpdmUgKi8KKworCQlzd2l0Y2goc2t5Mi0+c3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJCWxlZCB8PSBQSFlfTV9MRURDX0lOSVRfQ1RSTCg3KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMTAwOgorCQkJbGVkIHw9IFBIWV9NX0xFRENfU1RBMV9DVFJMKDcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8xMDAwOgorCQkJbGVkIHw9IFBIWV9NX0xFRENfU1RBMF9DVFJMKDcpOworCQkJYnJlYWs7CisJCX0KIAogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIDMpOwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCBQSFlfTV9MRURDX0xPU19DVFJMKDEpIHwJLyogTElOSy9BQ1QgKi8KLQkJCSAgICAgUEhZX01fTEVEQ19JTklUX0NUUkwoc2t5Mi0+c3BlZWQgPT0KLQkJCQkJCSAgU1BFRURfMTAgPyA3IDogMCkgfAotCQkJICAgICBQSFlfTV9MRURDX1NUQTFfQ1RSTChza3kyLT5zcGVlZCA9PQotCQkJCQkJICBTUEVFRF8xMDAgPyA3IDogMCkgfAotCQkJICAgICBQSFlfTV9MRURDX1NUQTBfQ1RSTChza3kyLT5zcGVlZCA9PQotCQkJCQkJICBTUEVFRF8xMDAwID8gNyA6IDApKTsKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgbGVkKTsKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCBwZyk7CiAJfQogCkBAIC0xNTg2LDcgKzE2NTcsNyBAQAogCXNreTItPnNwZWVkID0gc2t5Ml9waHlfc3BlZWQoaHcsIGF1eCk7CiAKIAkvKiBQYXVzZSBiaXRzIGFyZSBvZmZzZXQgKDkuLjgpICovCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwpCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgfHwgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKQogCQlhdXggPj49IDY7CiAKIAlza3kyLT5yeF9wYXVzZSA9IChhdXggJiBQSFlfTV9QU19SWF9QX0VOKSAhPSAwOwpAQCAtMTY4OCwxMyArMTc1OSwxMiBAQAogfQogCiAKLSNkZWZpbmUgcm91bmR1cCh4LCB5KSAgICgoKCh4KSsoKHkpLTEpKS8oeSkpKih5KSkKIC8qIFdhbnQgcmVjZWl2ZSBidWZmZXIgc2l6ZSB0byBiZSBtdWx0aXBsZSBvZiA2NCBiaXRzCiAgKiBhbmQgaW5jbCByb29tIGZvciB2bGFuIGFuZCB0cnVuY2F0aW9uCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2t5Ml9idWZfc2l6ZShpbnQgbXR1KQogewotCXJldHVybiByb3VuZHVwKG10dSArIEVUSF9ITEVOICsgVkxBTl9ITEVOLCA4KSArIDg7CisJcmV0dXJuIEFMSUdOKG10dSArIEVUSF9ITEVOICsgVkxBTl9ITEVOLCA4KSArIDg7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQpAQCAtMTg1OSwzOSArMTkyOSwzOCBAQAogCX0KIH0KIAorLyogSXMgc3RhdHVzIHJpbmcgZW1wdHkgb3IgaXMgdGhlcmUgbW9yZSB0byBkbz8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNreTJfbW9yZV93b3JrKGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodykKK3sKKwlyZXR1cm4gKGh3LT5zdF9pZHggIT0gc2t5Ml9yZWFkMTYoaHcsIFNUQVRfUFVUX0lEWCkpOworfQorCiAvKiBQcm9jZXNzIHN0YXR1cyByZXNwb25zZSByaW5nICovCiBzdGF0aWMgaW50IHNreTJfc3RhdHVzX2ludHIoc3RydWN0IHNreTJfaHcgKmh3LCBpbnQgdG9fZG8pCiB7CiAJaW50IHdvcmtfZG9uZSA9IDA7CisJdTE2IGh3aWR4ID0gc2t5Ml9yZWFkMTYoaHcsIFNUQVRfUFVUX0lEWCk7CiAKIAlybWIoKTsKIAotCWZvcig7OykgeworCXdoaWxlIChody0+c3RfaWR4ICE9IGh3aWR4KSB7CiAJCXN0cnVjdCBza3kyX3N0YXR1c19sZSAqbGUgID0gaHctPnN0X2xlICsgaHctPnN0X2lkeDsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAkJc3RydWN0IHNreTJfcG9ydCAqc2t5MjsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJdTMyIHN0YXR1czsKIAkJdTE2IGxlbmd0aDsKLQkJdTggIGxpbmssIG9wY29kZTsKIAotCQlvcGNvZGUgPSBsZS0+b3Bjb2RlOwotCQlpZiAoIW9wY29kZSkKLQkJCWJyZWFrOwotCQlvcGNvZGUgJj0gfkhXX09XTkVSOworCQlody0+c3RfaWR4ID0gUklOR19ORVhUKGh3LT5zdF9pZHgsIFNUQVRVU19SSU5HX1NJWkUpOwogCi0JCWh3LT5zdF9pZHggPSAoaHctPnN0X2lkeCArIDEpICUgU1RBVFVTX1JJTkdfU0laRTsKLQkJbGUtPm9wY29kZSA9IDA7Ci0KLQkJbGluayA9IGxlLT5saW5rOwotCQlCVUdfT04obGluayA+PSAyKTsKLQkJZGV2ID0gaHctPmRldltsaW5rXTsKKwkJQlVHX09OKGxlLT5saW5rID49IDIpOworCQlkZXYgPSBody0+ZGV2W2xlLT5saW5rXTsKIAogCQlza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJbGVuZ3RoID0gbGUtPmxlbmd0aDsKIAkJc3RhdHVzID0gbGUtPnN0YXR1czsKIAotCQlzd2l0Y2ggKG9wY29kZSkgeworCQlzd2l0Y2ggKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKIAkJY2FzZSBPUF9SWFNUQVQ6CiAJCQlza2IgPSBza3kyX3JlY2VpdmUoc2t5MiwgbGVuZ3RoLCBzdGF0dXMpOwogCQkJaWYgKCFza2IpCkBAIC0xOTMxLDcgKzIwMDAsOCBAQAogCiAJCWNhc2UgT1BfVFhJTkRFWExFOgogCQkJLyogVFggaW5kZXggcmVwb3J0cyBzdGF0dXMgZm9yIGJvdGggcG9ydHMgKi8KLQkJCXNreTJfdHhfZG9uZShody0+ZGV2WzBdLCBzdGF0dXMgJiAweGZmZmYpOworCQkJQlVJTERfQlVHX09OKFRYX1JJTkdfU0laRSA+IDB4MTAwMCk7CisJCQlza3kyX3R4X2RvbmUoaHctPmRldlswXSwgc3RhdHVzICYgMHhmZmYpOwogCQkJaWYgKGh3LT5kZXZbMV0pCiAJCQkJc2t5Ml90eF9kb25lKGh3LT5kZXZbMV0sCiAJCQkJICAgICAoKHN0YXR1cyA+PiAyNCkgJiAweGZmKQpAQCAtMTk0MSw4ICsyMDExLDggQEAKIAkJZGVmYXVsdDoKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCQkgICAgICAgInVua25vd24gc3RhdHVzIG9wY29kZSAweCV4XG4iLCBvcGNvZGUpOwotCQkJYnJlYWs7CisJCQkJICAgICAgICJ1bmtub3duIHN0YXR1cyBvcGNvZGUgMHgleFxuIiwgbGUtPm9wY29kZSk7CisJCQlnb3RvIGV4aXRfbG9vcDsKIAkJfQogCX0KIApAQCAtMjA4OCw2ICsyMTU4LDI4IEBACiAJfQogfQogCisvKiBJZiBpZGxlIHRoZW4gZm9yY2UgYSBmYWtlIHNvZnQgTkFQSSBwb2xsIG9uY2UgYSBzZWNvbmQKKyAqIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIHNoYXJpbmcgYW4gZWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2t5Ml9pZGxlX3N0YXJ0KHN0cnVjdCBza3kyX2h3ICpodykKK3sKKwlpZiAoaWRsZV90aW1lb3V0ID4gMCkKKwkJbW9kX3RpbWVyKCZody0+aWRsZV90aW1lciwKKwkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaWRsZV90aW1lb3V0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNreTJfaWRsZSh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSAoc3RydWN0IHNreTJfaHcgKikgYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2WzBdOworCisJaWYgKF9fbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKQorCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldik7CisKKwltb2RfdGltZXIoJmh3LT5pZGxlX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpZGxlX3RpbWVvdXQpKTsKK30KKworCiBzdGF0aWMgaW50IHNreTJfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2MCwgaW50ICpidWRnZXQpCiB7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gKChzdHJ1Y3Qgc2t5Ml9wb3J0ICopIG5ldGRldl9wcml2KGRldjApKS0+aHc7CkBAIC0yMDk1LDQ5ICsyMTg3LDQ5IEBACiAJaW50IHdvcmtfZG9uZSA9IDA7CiAJdTMyIHN0YXR1cyA9IHNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9FSVNSKTsKIAotCWlmICh1bmxpa2VseShzdGF0dXMgJiB+WTJfSVNfU1RBVF9CTVUpKSB7Ci0JCWlmIChzdGF0dXMgJiBZMl9JU19IV19FUlIpCi0JCQlza3kyX2h3X2ludHIoaHcpOworCWlmICghfnN0YXR1cykKKwkJZ290byBvdXQ7CiAKLQkJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9QSFkxKQotCQkJc2t5Ml9waHlfaW50cihodywgMCk7CisJaWYgKHN0YXR1cyAmIFkyX0lTX0hXX0VSUikKKwkJc2t5Ml9od19pbnRyKGh3KTsKIAotCQlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX1BIWTIpCi0JCQlza3kyX3BoeV9pbnRyKGh3LCAxKTsKKwlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX1BIWTEpCisJCXNreTJfcGh5X2ludHIoaHcsIDApOwogCi0JCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfTUFDMSkKLQkJCXNreTJfbWFjX2ludHIoaHcsIDApOworCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfUEhZMikKKwkJc2t5Ml9waHlfaW50cihodywgMSk7CiAKLQkJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9NQUMyKQotCQkJc2t5Ml9tYWNfaW50cihodywgMSk7CisJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9NQUMxKQorCQlza3kyX21hY19pbnRyKGh3LCAwKTsKIAotCQlpZiAoc3RhdHVzICYgWTJfSVNfQ0hLX1JYMSkKLQkJCXNreTJfZGVzY3JpcHRvcl9lcnJvcihodywgMCwgInJlY2VpdmUiLCBZMl9JU19DSEtfUlgxKTsKKwlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX01BQzIpCisJCXNreTJfbWFjX2ludHIoaHcsIDEpOwogCi0JCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfUlgyKQotCQkJc2t5Ml9kZXNjcmlwdG9yX2Vycm9yKGh3LCAxLCAicmVjZWl2ZSIsIFkyX0lTX0NIS19SWDIpOworCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfUlgxKQorCQlza3kyX2Rlc2NyaXB0b3JfZXJyb3IoaHcsIDAsICJyZWNlaXZlIiwgWTJfSVNfQ0hLX1JYMSk7CiAKLQkJaWYgKHN0YXR1cyAmIFkyX0lTX0NIS19UWEExKQotCQkJc2t5Ml9kZXNjcmlwdG9yX2Vycm9yKGh3LCAwLCAidHJhbnNtaXQiLCBZMl9JU19DSEtfVFhBMSk7CisJaWYgKHN0YXR1cyAmIFkyX0lTX0NIS19SWDIpCisJCXNreTJfZGVzY3JpcHRvcl9lcnJvcihodywgMSwgInJlY2VpdmUiLCBZMl9JU19DSEtfUlgyKTsKIAotCQlpZiAoc3RhdHVzICYgWTJfSVNfQ0hLX1RYQTIpCi0JCQlza3kyX2Rlc2NyaXB0b3JfZXJyb3IoaHcsIDEsICJ0cmFuc21pdCIsIFkyX0lTX0NIS19UWEEyKTsKLQl9CisJaWYgKHN0YXR1cyAmIFkyX0lTX0NIS19UWEExKQorCQlza3kyX2Rlc2NyaXB0b3JfZXJyb3IoaHcsIDAsICJ0cmFuc21pdCIsIFkyX0lTX0NIS19UWEExKTsKIAotCWlmIChzdGF0dXMgJiBZMl9JU19TVEFUX0JNVSkgewotCQl3b3JrX2RvbmUgPSBza3kyX3N0YXR1c19pbnRyKGh3LCB3b3JrX2xpbWl0KTsKLQkJKmJ1ZGdldCAtPSB3b3JrX2RvbmU7Ci0JCWRldjAtPnF1b3RhIC09IHdvcmtfZG9uZTsKKwlpZiAoc3RhdHVzICYgWTJfSVNfQ0hLX1RYQTIpCisJCXNreTJfZGVzY3JpcHRvcl9lcnJvcihodywgMSwgInRyYW5zbWl0IiwgWTJfSVNfQ0hLX1RYQTIpOwogCi0JCWlmICh3b3JrX2RvbmUgPj0gd29ya19saW1pdCkKLQkJCXJldHVybiAxOworCXdvcmtfZG9uZSA9IHNreTJfc3RhdHVzX2ludHIoaHcsIHdvcmtfbGltaXQpOworCSpidWRnZXQgLT0gd29ya19kb25lOworCWRldjAtPnF1b3RhIC09IHdvcmtfZG9uZTsKIAorCWlmIChzdGF0dXMgJiBZMl9JU19TVEFUX0JNVSkKIAkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX0NUUkwsIFNDX1NUQVRfQ0xSX0lSUSk7Ci0JfQogCisJaWYgKHNreTJfbW9yZV93b3JrKGh3KSkKKwkJcmV0dXJuIDE7CitvdXQ6CiAJbmV0aWZfcnhfY29tcGxldGUoZGV2MCk7CiAKLQlzdGF0dXMgPSBza3kyX3JlYWQzMihodywgQjBfWTJfU1BfTElTUik7CisJc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTU1LDggKzIyNDcsNiBAQAogCXByZWZldGNoKCZody0+c3RfbGVbaHctPnN0X2lkeF0pOwogCWlmIChsaWtlbHkoX19uZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldjApKSkKIAkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYwKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiaXJxIHJhY2UgZGV0ZWN0ZWRcbiIpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjE5NSw3ICsyMjg1LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IHNreTJfcmVzZXQoc3RydWN0IHNreTJfaHcgKmh3KQorc3RhdGljIGludCBfX2RldmluaXQgc2t5Ml9yZXNldChzdHJ1Y3Qgc2t5Ml9odyAqaHcpCiB7CiAJdTE2IHN0YXR1czsKIAl1OCB0OCwgcG1kX3R5cGU7CkBAIC0yMjIwLDEzICsyMzEwLDYgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCS8qIFRoaXMgY2hpcCBpcyBuZXcgYW5kIG5vdCB0ZXN0ZWQgeWV0ICovCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkgewotCQlwcl9pbmZvKFBGWCAiJXM6IGlzIGEgdmVyc2lvbiBvZiBZdWtvbiAyIGNoaXBzZXQgdGhhdCBoYXMgbm90IGJlZW4gdGVzdGVkIHlldC5cbiIsCi0JCQlwY2lfbmFtZShody0+cGRldikpOwotCQlwcl9pbmZvKCJQbGVhc2UgcmVwb3J0IHN1Y2Nlc3MvZmFpbHVyZSB0byBtYWludGFpbmVyIDxzaGVtbWluZ2VyQG9zZGwub3JnPlxuIik7Ci0JfQotCiAJLyogZGlzYWJsZSBBU0YgKi8KIAlpZiAoaHctPmNoaXBfaWQgPD0gQ0hJUF9JRF9ZVUtPTl9FQykgewogCQlza3kyX3dyaXRlOChodywgQjI4X1kyX0FTRl9TVEFUX0NNRCwgWTJfQVNGX1JFU0VUKTsKQEAgLTMwMzAsMTIgKzMxMTMsNyBAQAogCXNreTItPmR1cGxleCA9IC0xOwogCXNreTItPnNwZWVkID0gLTE7CiAJc2t5Mi0+YWR2ZXJ0aXNpbmcgPSBza3kyX3N1cHBvcnRlZF9tb2Rlcyhodyk7Ci0KLQkvKiBSZWNlaXZlIGNoZWNrc3VtIGRpc2FibGVkIGZvciBZdWtvbiBYTAotCSAqIGJlY2F1c2Ugb2Ygb2JzZXJ2ZWQgcHJvYmxlbXMgd2l0aCBpbmNvcnJlY3QKLQkgKiB2YWx1ZXMgd2hlbiBtdWx0aXBsZSBwYWNrZXRzIGFyZSByZWNlaXZlZCBpbiBvbmUgaW50ZXJydXB0Ci0JICovCi0Jc2t5Mi0+cnhfY3N1bSA9IChody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX1hMKTsKKwlza3kyLT5yeF9jc3VtID0gMTsKIAogCXNwaW5fbG9ja19pbml0KCZza3kyLT5waHlfbG9jayk7CiAJc2t5Mi0+dHhfcGVuZGluZyA9IFRYX0RFRl9QRU5ESU5HOwpAQCAtMzI3OCw2ICszMzU2LDkgQEAKIAogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfQkFTRSk7CiAKKwlzZXR1cF90aW1lcigmaHctPmlkbGVfdGltZXIsIHNreTJfaWRsZSwgKHVuc2lnbmVkIGxvbmcpIGh3KTsKKwlza3kyX2lkbGVfc3RhcnQoaHcpOworCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKIAogCXJldHVybiAwOwpAQCAtMzMxMywxMyArMzM5NCwxNyBAQAogCWlmICghaHcpCiAJCXJldHVybjsKIAorCWRlbF90aW1lcl9zeW5jKCZody0+aWRsZV90aW1lcik7CisKKwlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOworCXN5bmNocm9uaXplX2lycShody0+cGRldi0+aXJxKTsKKwogCWRldjAgPSBody0+ZGV2WzBdOwogCWRldjEgPSBody0+ZGV2WzFdOwogCWlmIChkZXYxKQogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYxKTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYwKTsKIAotCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CiAJc2t5Ml9zZXRfcG93ZXJfc3RhdGUoaHcsIFBDSV9EM2hvdCk7CiAJc2t5Ml93cml0ZTE2KGh3LCBCMF9ZMkxFRCwgTEVEX1NUQVRfT0ZGKTsKIAlza3kyX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfUlNUX1NFVCk7CkBAIC0zMzQ1LDggKzM0MzAsMTQgQEAKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGk7CisJcGNpX3Bvd2VyX3QgcHN0YXRlID0gcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJaWYgKCEocHN0YXRlID09IFBDSV9EM2hvdCB8fCBwc3RhdGUgPT0gUENJX0QzY29sZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGVsX3RpbWVyX3N5bmMoJmh3LT5pZGxlX3RpbWVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltpXTsKIAogCQlpZiAoZGV2KSB7CkBAIC0zMzU4LDcgKzM0NDksMTAgQEAKIAkJfQogCX0KIAotCXJldHVybiBza3kyX3NldF9wb3dlcl9zdGF0ZShodywgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJc2t5Ml9zZXRfcG93ZXJfc3RhdGUoaHcsIHBzdGF0ZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0zMzY4LDE1ICszNDYyLDE1IEBACiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKLQllcnIgPSBza3kyX3NldF9wb3dlcl9zdGF0ZShodywgUENJX0QwKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwlza3kyX3NldF9wb3dlcl9zdGF0ZShodywgUENJX0QwKTsKIAogCWVyciA9IHNreTJfcmVzZXQoaHcpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfQkFTRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07CiAJCWlmIChkZXYgJiYgbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CkBAIC0zMzg1LDEwICszNDc5LDEyIEBACiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNvdWxkIG5vdCB1cDogJWRcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKIAkJCQlkZXZfY2xvc2UoZGV2KTsKLQkJCQlicmVhazsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQogCX0KKworCXNreTJfaWRsZV9zdGFydChodyk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuaCBiL2RyaXZlcnMvbmV0L3NreTIuaAppbmRleCA2MjUzMmI0Li44YTBiYzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmgKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5oCkBAIC0yMTQsNiArMjE0LDggQEAKIGVudW0gewogCVkyX1ZNQUlOX0FWQUlMCT0gMTw8MTcsLyogVk1BSU4gYXZhaWxhYmxlIChZVUtPTi0yIG9ubHkpICovCiAJWTJfVkFVWF9BVkFJTAk9IDE8PDE2LC8qIFZBVVggYXZhaWxhYmxlIChZVUtPTi0yIG9ubHkpICovCisJWTJfSFdfV09MX09OCT0gMTw8MTUsLyogSFcgV09MIE9uICAoWXVrb24tRUMgVWx0cmEgQTEgb25seSkgKi8KKwlZMl9IV19XT0xfT0ZGCT0gMTw8MTQsLyogSFcgV09MIE9uICAoWXVrb24tRUMgVWx0cmEgQTEgb25seSkgKi8KIAlZMl9BU0ZfRU5BQkxFCT0gMTw8MTMsLyogQVNGIFVuaXQgRW5hYmxlIChZVUtPTi0yIG9ubHkpICovCiAJWTJfQVNGX0RJU0FCTEUJPSAxPDwxMiwvKiBBU0YgVW5pdCBEaXNhYmxlIChZVUtPTi0yIG9ubHkpICovCiAJWTJfQ0xLX1JVTl9FTkEJPSAxPDwxMSwvKiBDTEtfUlVOIEVuYWJsZSAgKFlVS09OLTIgb25seSkgKi8KQEAgLTM3OCw2ICszODAsOSBAQAogCUNISVBfUkVWX1lVX0VDX0ExICAgID0gMCwgIC8qIENoaXAgUmV2LiBmb3IgWXVrb24tRUMgQTEvQTAgKi8KIAlDSElQX1JFVl9ZVV9FQ19BMiAgICA9IDEsICAvKiBDaGlwIFJldi4gZm9yIFl1a29uLUVDIEEyICovCiAJQ0hJUF9SRVZfWVVfRUNfQTMgICAgPSAyLCAgLyogQ2hpcCBSZXYuIGZvciBZdWtvbi1FQyBBMyAqLworCisJQ0hJUF9SRVZfWVVfRUNfVV9BMCAgPSAwLAorCUNISVBfUkVWX1lVX0VDX1VfQTEgID0gMSwKIH07CiAKIC8qCUIyX1kyX0NMS19HQVRFCSA4IGJpdAlDbG9jayBHYXRpbmcgKFl1a29uLTIgb25seSkgKi8KQEAgLTEzNzUsNyArMTM4MCw3IEBACiAJR01fUEhZX0FERFIJPSAweDAwODgsCS8qIDE2IGJpdCByL3cJR1BIWSBBZGRyZXNzIFJlZ2lzdGVyICovCiAvKiBNSUIgQ291bnRlcnMgKi8KIAlHTV9NSUJfQ05UX0JBU0UJPSAweDAxMDAsCS8qIEJhc2UgQWRkcmVzcyBvZiBNSUIgQ291bnRlcnMgKi8KLQlHTV9NSUJfQ05UX1NJWkUJPSAyNTYsCisJR01fTUlCX0NOVF9FTkQJPSAweDAyNUMsCS8qIExhc3QgTUlCIGNvdW50ZXIgKi8KIH07CiAKIApAQCAtMTg4MCw2ICsxODg1LDggQEAKIAlzdHJ1Y3Qgc2t5Ml9zdGF0dXNfbGUgKnN0X2xlOwogCXUzMgkJICAgICBzdF9pZHg7CiAJZG1hX2FkZHJfdCAgIAkgICAgIHN0X2RtYTsKKworCXN0cnVjdCB0aW1lcl9saXN0ICAgIGlkbGVfdGltZXI7CiAJaW50CQkgICAgIG1zaV9kZXRlY3RlZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICBtc2lfd2FpdDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggNDNmNWU4Ni4uMzk0MzM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMTY1Miw2ICsxNjUyLDggQEAKIAkJeyBTUElERVJfTkVUX0dGVFJFU1RSVCwgU1BJREVSX05FVF9SRVNUQVJUX1ZBTFVFIH0sCiAKIAkJeyBTUElERVJfTkVUX0dNUldPTENUUkwsIDAgfSwKKwkJeyBTUElERVJfTkVUX0dURVNUTUQsIDB4MTAwMDAwMDAgfSwKKwkJeyBTUElERVJfTkVUX0dUVFFNU0ssIDB4MDA0MDAwNDAgfSwKIAkJeyBTUElERVJfTkVUX0dURVNUTUQsIDAgfSwKIAogCQl7IFNQSURFUl9ORVRfR01BQ0lOVEVOLCAwIH0sCkBAIC0xNzkyLDE1ICsxNzk0LDcgQEAKIAlpZiAocGh5LT5kZWYtPm9wcy0+c2V0dXBfZm9yY2VkKQogCQlwaHktPmRlZi0+b3BzLT5zZXR1cF9mb3JjZWQocGh5LCBTUEVFRF8xMDAwLCBEVVBMRVhfRlVMTCk7CiAKLQkvKiB0aGUgZm9sbG93aW5nIHR3byB3cml0ZXMgY291bGQgYmUgbW92ZWQgdG8gc3VuZ2VtX3BoeS5jICovCi0JLyogZW5hYmxlIGZpYmVyIG1vZGUgKi8KLQlzcGlkZXJfbmV0X3dyaXRlX3BoeShjYXJkLT5uZXRkZXYsIDEsIE1JSV9OQ09ORklHLCAweDkwMjApOwotCS8qIExFRHMgYWN0aXZlIGluIGJvdGggbW9kZXMsIGF1dG9zZW5zZSBwcmlvID0gZmliZXIgKi8KLQlzcGlkZXJfbmV0X3dyaXRlX3BoeShjYXJkLT5uZXRkZXYsIDEsIE1JSV9OQ09ORklHLCAweDk0NWYpOwotCi0JLyogc3dpdGNoIG9mZiBmaWJyZSBhdXRvbmVnICovCi0Jc3BpZGVyX25ldF93cml0ZV9waHkoY2FyZC0+bmV0ZGV2LCAxLCBNSUlfTkNPTkZJRywgMHhmYzAxKTsKLQlzcGlkZXJfbmV0X3dyaXRlX3BoeShjYXJkLT5uZXRkZXYsIDEsIDB4MGIsIDB4MDAwNCk7CisJcGh5LT5kZWYtPm9wcy0+ZW5hYmxlX2ZpYmVyKHBoeSk7CiAKIAlwaHktPmRlZi0+b3BzLT5yZWFkX2xpbmsocGh5KTsKIAlwcl9pbmZvKCJGb3VuZCAlcyB3aXRoICVpIE1icHMsICVzLWR1cGxleC5cbiIsIHBoeS0+ZGVmLT5uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oCmluZGV4IDU5MjJiNTIuLjNiOGQ5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaAorKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmgKQEAgLTEyMCw2ICsxMjAsOCBAQAogI2RlZmluZSBTUElERVJfTkVUX0dNUlVBRklMblIJCTB4MDAwMDA1MDAKICNkZWZpbmUgU1BJREVSX05FVF9HTVJVQTBGSUwxNVIJCTB4MDAwMDA1NzgKIAorI2RlZmluZSBTUElERVJfTkVUX0dUVFFNU0sJCTB4MDAwMDA5MzQKKwogLyogUlggRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLCBhbGwgMHgwMDAwMGEuLiBhcmUgZm9yIERNQSBjb250cm9sbGVyIEEsCiAgKiAweDAwMDAwYi4uIGZvciBETUEgY29udHJvbGxlciBCLCBldGMuICovCiAjZGVmaW5lIFNQSURFUl9ORVRfR0RBRENIQQkJMHgwMDAwMGEwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKaW5kZXggMzViMTgwNS4uOWI3ODA1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYworKysgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogS0VSTl9JTkZPICJzdGFyZmlyZS5jOnYxLjAzIDcvMjYvMjAwMCAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgogS0VSTl9JTkZPICIgKHVub2ZmaWNpYWwgMi4yLzIuNCBrZXJuZWwgcG9ydCwgdmVyc2lvbiAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CiAKQEAgLTIxMjIsOCArMjEyMiw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghZGV2KQotCQlCVUcoKTsKKwlCVUdfT04oIWRldik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKaW5kZXggY2IwYWJhOS4uYjJkZGQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmNtNTQxMV9zdXNwZW5kKHN0cnVjdCBtaWlfcGh5KiBwaHkpCitzdGF0aWMgaW50IGdlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgbWlpX3BoeSogcGh5KQogewogCXBoeV93cml0ZShwaHksIE1JSV9CTUNSLCBCTUNSX1BET1dOKTsKIApAQCAtMzI5LDYgKzMyOSwzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJjbTU0MjFfZW5hYmxlX2ZpYmVyKHN0cnVjdCBtaWlfcGh5KiBwaHkpCit7CisJLyogZW5hYmxlIGZpYmVyIG1vZGUgKi8KKwlwaHlfd3JpdGUocGh5LCBNSUlfTkNPTkZJRywgMHg5MDIwKTsKKwkvKiBMRURzIGFjdGl2ZSBpbiBib3RoIG1vZGVzLCBhdXRvc2Vuc2UgcHJpbyA9IGZpYmVyICovCisJcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4OTQ1Zik7CisKKwkvKiBzd2l0Y2ggb2ZmIGZpYnJlIGF1dG9uZWcgKi8KKwlwaHlfd3JpdGUocGh5LCBNSUlfTkNPTkZJRywgMHhmYzAxKTsKKwlwaHlfd3JpdGUocGh5LCAweDBiLCAweDAwMDQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtNTQ2MV9lbmFibGVfZmliZXIoc3RydWN0IG1paV9waHkqIHBoeSkKK3sKKyAgICAgICAgcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4ZmMwYyk7CisgICAgICAgIHBoeV93cml0ZShwaHksIE1JSV9CTUNSLCAweDQxNDApOworICAgICAgICBwaHlfd3JpdGUocGh5LCBNSUlfTkNPTkZJRywgMHhmYzBiKTsKKwlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgMHgwMTQwKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJjbTU0eHhfc2V0dXBfYW5lZyhzdHJ1Y3QgbWlpX3BoeSAqcGh5LCB1MzIgYWR2ZXJ0aXNlKQogewogCXUxNiBjdGwsIGFkdjsKQEAgLTczOCw3ICs3NjIsNyBAQAogLyogQnJvYWRjb20gQkNNIDU0MTEgKi8KIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgYmNtNTQxMV9waHlfb3BzID0gewogCS5pbml0CQk9IGJjbTU0MTFfaW5pdCwKLQkuc3VzcGVuZAk9IGJjbTU0MTFfc3VzcGVuZCwKKwkuc3VzcGVuZAk9IGdlbmVyaWNfc3VzcGVuZCwKIAkuc2V0dXBfYW5lZwk9IGJjbTU0eHhfc2V0dXBfYW5lZywKIAkuc2V0dXBfZm9yY2VkCT0gYmNtNTR4eF9zZXR1cF9mb3JjZWQsCiAJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCkBAIC03NTcsMTEgKzc4MSwxMiBAQAogLyogQnJvYWRjb20gQkNNIDU0MjEgKi8KIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgYmNtNTQyMV9waHlfb3BzID0gewogCS5pbml0CQk9IGJjbTU0MjFfaW5pdCwKLQkuc3VzcGVuZAk9IGJjbTU0MTFfc3VzcGVuZCwKKwkuc3VzcGVuZAk9IGdlbmVyaWNfc3VzcGVuZCwKIAkuc2V0dXBfYW5lZwk9IGJjbTU0eHhfc2V0dXBfYW5lZywKIAkuc2V0dXBfZm9yY2VkCT0gYmNtNTR4eF9zZXR1cF9mb3JjZWQsCiAJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCiAJLnJlYWRfbGluawk9IGJjbTU0eHhfcmVhZF9saW5rLAorCS5lbmFibGVfZmliZXIgICA9IGJjbTU0MjFfZW5hYmxlX2ZpYmVyLAogfTsKIAogc3RhdGljIHN0cnVjdCBtaWlfcGh5X2RlZiBiY201NDIxX3BoeV9kZWYgPSB7CkBAIC03NzYsNyArODAxLDcgQEAKIC8qIEJyb2FkY29tIEJDTSA1NDIxIGJ1aWx0LWluIEsyICovCiBzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGJjbTU0MjFrMl9waHlfb3BzID0gewogCS5pbml0CQk9IGJjbTU0MjFfaW5pdCwKLQkuc3VzcGVuZAk9IGJjbTU0MTFfc3VzcGVuZCwKKwkuc3VzcGVuZAk9IGdlbmVyaWNfc3VzcGVuZCwKIAkuc2V0dXBfYW5lZwk9IGJjbTU0eHhfc2V0dXBfYW5lZywKIAkuc2V0dXBfZm9yY2VkCT0gYmNtNTR4eF9zZXR1cF9mb3JjZWQsCiAJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCkBAIC03OTIsMTAgKzgxNywyOSBAQAogCS5vcHMJCT0gJmJjbTU0MjFrMl9waHlfb3BzCiB9OwogCitzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGJjbTU0NjFfcGh5X29wcyA9IHsKKwkuaW5pdAkJPSBiY201NDIxX2luaXQsCisJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCisJLnNldHVwX2FuZWcJPSBiY201NHh4X3NldHVwX2FuZWcsCisJLnNldHVwX2ZvcmNlZAk9IGJjbTU0eHhfc2V0dXBfZm9yY2VkLAorCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLAorCS5yZWFkX2xpbmsJPSBiY201NHh4X3JlYWRfbGluaywKKwkuZW5hYmxlX2ZpYmVyICAgPSBiY201NDYxX2VuYWJsZV9maWJlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgYmNtNTQ2MV9waHlfZGVmID0geworCS5waHlfaWQJCT0gMHgwMDIwNjBjMCwKKwkucGh5X2lkX21hc2sJPSAweGZmZmZmZmYwLAorCS5uYW1lCQk9ICJCQ001NDYxIiwKKwkuZmVhdHVyZXMJPSBNSUlfR0JJVF9GRUFUVVJFUywKKwkubWFnaWNfYW5lZwk9IDEsCisJLm9wcwkJPSAmYmNtNTQ2MV9waHlfb3BzCit9OworCiAvKiBCcm9hZGNvbSBCQ00gNTQ2MiBidWlsdC1pbiBWZXN0YSAqLwogc3RhdGljIHN0cnVjdCBtaWlfcGh5X29wcyBiY201NDYyVl9waHlfb3BzID0gewogCS5pbml0CQk9IGJjbTU0MjFfaW5pdCwKLQkuc3VzcGVuZAk9IGJjbTU0MTFfc3VzcGVuZCwKKwkuc3VzcGVuZAk9IGdlbmVyaWNfc3VzcGVuZCwKIAkuc2V0dXBfYW5lZwk9IGJjbTU0eHhfc2V0dXBfYW5lZywKIAkuc2V0dXBfZm9yY2VkCT0gYmNtNTR4eF9zZXR1cF9mb3JjZWQsCiAJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCkBAIC04MTYsNiArODYwLDcgQEAKICAqIHdvdWxkIGJlIHVzZWZ1bCBoZXJlKSAtLUJlbkguCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgbWFydmVsbF9waHlfb3BzID0geworCS5zdXNwZW5kCT0gZ2VuZXJpY19zdXNwZW5kLAogCS5zZXR1cF9hbmVnCT0gbWFydmVsbF9zZXR1cF9hbmVnLAogCS5zZXR1cF9mb3JjZWQJPSBtYXJ2ZWxsX3NldHVwX2ZvcmNlZCwKIAkucG9sbF9saW5rCT0gZ2VubWlpX3BvbGxfbGluaywKQEAgLTg1Niw2ICs5MDEsNyBAQAogCSZiY201NDExX3BoeV9kZWYsCiAJJmJjbTU0MjFfcGh5X2RlZiwKIAkmYmNtNTQyMWsyX3BoeV9kZWYsCisJJmJjbTU0NjFfcGh5X2RlZiwKIAkmYmNtNTQ2MlZfcGh5X2RlZiwKIAkmbWFydmVsbF9waHlfZGVmLAogCSZnZW5taWlfcGh5X2RlZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuaCBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuaAppbmRleCA0MzA1NDQ0Li42OWUxMjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5oCkBAIC0xMiw2ICsxMiw3IEBACiAJaW50CQkoKnNldHVwX2ZvcmNlZCkoc3RydWN0IG1paV9waHkgKnBoeSwgaW50IHNwZWVkLCBpbnQgZmQpOwogCWludAkJKCpwb2xsX2xpbmspKHN0cnVjdCBtaWlfcGh5ICpwaHkpOwogCWludAkJKCpyZWFkX2xpbmspKHN0cnVjdCBtaWlfcGh5ICpwaHkpOworCWludAkJKCplbmFibGVfZmliZXIpKHN0cnVjdCBtaWlfcGh5ICpwaHkpOwogfTsKIAogLyogU3RydWN0dXJlIHVzZWQgdG8gc3RhdGljYWxseSBkZWZpbmUgYW4gbWlpL2dpaSBiYXNlZCBQSFkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggOTY0YzA5Ni4uODYyYzIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTY5LDggKzY5LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNTUiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWFyIDI3LCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNTkiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSnVuZSA4LCAyMDA2IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTQ5NywxOCArNDk3LDE4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+aW5kaXJlY3RfbG9jaywgZmxhZ3MpOwotCWlmICh0cC0+d3JpdGUzMiAhPSB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzIpIHsKLQkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKLQkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0RBVEEsIHZhbCk7Ci0KLQkJLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KLQkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgMCk7Ci0JfSBlbHNlIHsKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRykgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0RBVEEsIHZhbCk7CiAKIAkJLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKKwl9IGVsc2UgeworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCBvZmYpOworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKKworCQkvKiBBbHdheXMgbGVhdmUgdGhpcyBhcyB6ZXJvLiAqLworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKIH0KQEAgLTUxOCwxOCArNTE4LDE4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+aW5kaXJlY3RfbG9jaywgZmxhZ3MpOwotCWlmICh0cC0+d3JpdGUzMiAhPSB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzIpIHsKLQkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKLQkJKnZhbCA9IHRyMzIoVEczUENJX01FTV9XSU5fREFUQSk7Ci0KLQkJLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KLQkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgMCk7Ci0JfSBlbHNlIHsKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRykgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKIAogCQkvKiBBbHdheXMgbGVhdmUgdGhpcyBhcyB6ZXJvLiAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIDApOworCX0gZWxzZSB7CisJCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CisJCSp2YWwgPSB0cjMyKFRHM1BDSV9NRU1fV0lOX0RBVEEpOworCisJCS8qIEFsd2F5cyBsZWF2ZSB0aGlzIGFzIHplcm8uICovCisJCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIDApOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+aW5kaXJlY3RfbG9jaywgZmxhZ3MpOwogfQpAQCAtOTc0LDYgKzk3NCw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdGczX2xpbmtfcmVwb3J0KHN0cnVjdCB0ZzMgKik7CisKIC8qIFRoaXMgd2lsbCByZXNldCB0aGUgdGlnb24zIFBIWSBpZiB0aGVyZSBpcyBubyB2YWxpZAogICogbGluayB1bmxlc3MgdGhlIEZPUkNFIGFyZ3VtZW50IGlzIG5vbi16ZXJvLgogICovCkBAIC05ODcsNiArOTg5LDExIEBACiAJaWYgKGVyciAhPSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCisJaWYgKG5ldGlmX3J1bm5pbmcodHAtPmRldikgJiYgbmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSkgeworCQluZXRpZl9jYXJyaWVyX29mZih0cC0+ZGV2KTsKKwkJdGczX2xpbmtfcmVwb3J0KHRwKTsKKwl9CisKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDMgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUpIHsKQEAgLTEwMjMsNiArMTAzMCwxMiBAQAogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIDB4MTRlMik7CiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwNDAwKTsKIAl9CisJZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfSklUVEVSX0JVRykgeworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHgwMDBhKTsKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDAxMGIpOworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDQwMCk7CisJfQogCS8qIFNldCBFeHRlbmRlZCBwYWNrZXQgbGVuZ3RoIGJpdCAoYml0IDE0KSBvbiBhbGwgY2hpcHMgdGhhdCAqLwogCS8qIHN1cHBvcnQganVtYm8gZnJhbWVzICovCiAJaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDAxKSB7CkBAIC0yOTY2LDkgKzI5NzksNyBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmktPnNrYjsKIAkJaW50IGk7CiAKLQkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkKLQkJCUJVRygpOwotCisJCUJVR19PTihza2IgPT0gTlVMTCk7CiAJCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsCiAJCQkJIHBjaV91bm1hcF9hZGRyKHJpLCBtYXBwaW5nKSwKIAkJCQkgc2tiX2hlYWRsZW4oc2tiKSwKQEAgLTI5NzksMTIgKzI5OTAsMTAgQEAKIAkJc3dfaWR4ID0gTkVYVF9UWChzd19pZHgpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKLQkJCWlmICh1bmxpa2VseShzd19pZHggPT0gaHdfaWR4KSkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTihzd19pZHggPT0gaHdfaWR4KTsKIAogCQkJcmkgPSAmdHAtPnR4X2J1ZmZlcnNbc3dfaWR4XTsKLQkJCWlmICh1bmxpa2VseShyaS0+c2tiICE9IE5VTEwpKQotCQkJCUJVRygpOworCQkJQlVHX09OKHJpLT5za2IgIT0gTlVMTCk7CiAKIAkJCXBjaV91bm1hcF9wYWdlKHRwLT5wZGV2LAogCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcihyaSwgbWFwcGluZyksCkBAIC0zNTM1LDcgKzM1NDQsNyBAQAogCXJldHVybiBJUlFfUkVUVkFMKDApOwogfQogCi1zdGF0aWMgaW50IHRnM19pbml0X2h3KHN0cnVjdCB0ZzMgKik7CitzdGF0aWMgaW50IHRnM19pbml0X2h3KHN0cnVjdCB0ZzMgKiwgaW50KTsKIHN0YXRpYyBpbnQgdGczX2hhbHQoc3RydWN0IHRnMyAqLCBpbnQsIGludCk7CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtMzU3MSw3ICszNTgwLDcgQEAKIAl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUkVTVEFSVF9USU1FUjsKIAogCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAwKTsKLQl0ZzNfaW5pdF9odyh0cCk7CisJdGczX2luaXRfaHcodHAsIDEpOwogCiAJdGczX25ldGlmX3N0YXJ0KHRwKTsKIApAQCAtNDA0Niw3ICs0MDU1LDcgQEAKIAogCXRnM19zZXRfbXR1KGRldiwgdHAsIG5ld19tdHUpOwogCi0JdGczX2luaXRfaHcodHApOworCXRnM19pbml0X2h3KHRwLCAwKTsKIAogCXRnM19uZXRpZl9zdGFydCh0cCk7CiAKQEAgLTQ0NzYsOSArNDQ4NSw4IEBACiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIHZvaWQgdGczX3dyaXRlX3NpZ19wcmVfcmVzZXQoc3RydWN0IHRnMyAqdHAsIGludCBraW5kKQogewotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpKQotCQl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YLAotCQkJICAgICAgTklDX1NSQU1fRklSTVdBUkVfTUJPWF9NQUdJQzEpOworCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1gsCisJCSAgICAgIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1hfTUFHSUMxKTsKIAogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FTRl9ORVdfSEFORFNIQUtFKSB7CiAJCXN3aXRjaCAoa2luZCkgewpAQCAtNDU1OSwxMyArNDU2NywxMiBAQAogCXZvaWQgKCp3cml0ZV9vcCkoc3RydWN0IHRnMyAqLCB1MzIsIHUzMik7CiAJaW50IGk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSkgewotCQl0ZzNfbnZyYW1fbG9jayh0cCk7Ci0JCS8qIE5vIG1hdGNoaW5nIHRnM19udnJhbV91bmxvY2soKSBhZnRlciB0aGlzIGJlY2F1c2UKLQkJICogY2hpcCByZXNldCBiZWxvdyB3aWxsIHVuZG8gdGhlIG52cmFtIGxvY2suCi0JCSAqLwotCQl0cC0+bnZyYW1fbG9ja19jbnQgPSAwOwotCX0KKwl0ZzNfbnZyYW1fbG9jayh0cCk7CisKKwkvKiBObyBtYXRjaGluZyB0ZzNfbnZyYW1fdW5sb2NrKCkgYWZ0ZXIgdGhpcyBiZWNhdXNlCisJICogY2hpcCByZXNldCBiZWxvdyB3aWxsIHVuZG8gdGhlIG52cmFtIGxvY2suCisJICovCisJdHAtPm52cmFtX2xvY2tfY250ID0gMDsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MiB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fApAQCAtNDcxOCwyMCArNDcyNSwyNSBAQAogCQl0dzMyX2YoTUFDX01PREUsIDApOwogCXVkZWxheSg0MCk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSkgewotCQkvKiBXYWl0IGZvciBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0byBjb21wbGV0ZS4gKi8KLQkJZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7Ci0JCQl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1gsICZ2YWwpOwotCQkJaWYgKHZhbCA9PSB+TklDX1NSQU1fRklSTVdBUkVfTUJPWF9NQUdJQzEpCi0JCQkJYnJlYWs7Ci0JCQl1ZGVsYXkoMTApOwotCQl9Ci0JCWlmIChpID49IDEwMDAwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidGczX3Jlc2V0X2h3IHRpbWVkIG91dCBmb3IgJXMsICIKLQkJCSAgICAgICAiZmlybXdhcmUgd2lsbCBub3QgcmVzdGFydCBtYWdpYz0lMDh4XG4iLAotCQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIHZhbCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCS8qIFdhaXQgZm9yIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIHRvIGNvbXBsZXRlLiAqLworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworCQl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1gsICZ2YWwpOworCQlpZiAodmFsID09IH5OSUNfU1JBTV9GSVJNV0FSRV9NQk9YX01BR0lDMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKworCS8qIENoaXAgbWlnaHQgbm90IGJlIGZpdHRlZCB3aXRoIGZpcm1hcmUuICBTb21lIFN1biBvbmJvYXJkCisJICogcGFydHMgYXJlIGNvbmZpZ3VyZWQgbGlrZSB0aGF0LiAgU28gZG9uJ3Qgc2lnbmFsIHRoZSB0aW1lb3V0CisJICogb2YgdGhlIGFib3ZlIGxvb3AgYXMgYW4gZXJyb3IsIGJ1dCBkbyByZXBvcnQgdGhlIGxhY2sgb2YKKwkgKiBydW5uaW5nIGZpcm13YXJlIG9uY2UuCisJICovCisJaWYgKGkgPj0gMTAwMDAwICYmCisJICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRCkpIHsKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfTk9fRldBUkVfUkVQT1JURUQ7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBObyBmaXJtd2FyZSBydW5uaW5nLlxuIiwKKwkJICAgICAgIHRwLT5kZXYtPm5hbWUpOwogCX0KIAogCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykgJiYKQEAgLTQ5MzUsOSArNDk0Nyw4IEBACiB7CiAJaW50IGk7CiAKLQlpZiAob2Zmc2V0ID09IFRYX0NQVV9CQVNFICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCi0JCUJVRygpOworCUJVR19PTihvZmZzZXQgPT0gVFhfQ1BVX0JBU0UgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSk7CiAKIAlpZiAob2Zmc2V0ID09IFJYX0NQVV9CQVNFKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CkBAIC01NzI0LDkgKzU3MzUsMjMgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKLQlfX3RnM19zZXRfbWFjX2FkZHIodHApOwotCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB7CisJCS8qIFJlc2V0IGNoaXAgc28gdGhhdCBBU0YgY2FuIHJlLWluaXQgYW55IE1BQyBhZGRyZXNzZXMgaXQKKwkJICogbmVlZHMuCisJCSAqLworCQl0ZzNfbmV0aWZfc3RvcCh0cCk7CisJCXRnM19mdWxsX2xvY2sodHAsIDEpOworCisJCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKKwkJdGczX2luaXRfaHcodHAsIDApOworCisJCXRnM19uZXRpZl9zdGFydCh0cCk7CisJCXRnM19mdWxsX3VubG9jayh0cCk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CisJCV9fdGczX3NldF9tYWNfYWRkcih0cCk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC01Nzc2LDcgKzU4MDEsNyBAQAogfQogCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIGludCB0ZzNfcmVzZXRfaHcoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgaW50IHRnM19yZXNldF9odyhzdHJ1Y3QgdGczICp0cCwgaW50IHJlc2V0X3BoeSkKIHsKIAl1MzIgdmFsLCByZG1hY19tb2RlOwogCWludCBpLCBlcnIsIGxpbWl0OwpAQCAtNTc5MSw3ICs1ODE2LDcgQEAKIAkJdGczX2Fib3J0X2h3KHRwLCAxKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKQorCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSAmJiByZXNldF9waHkpCiAJCXRnM19waHlfcmVzZXQodHApOwogCiAJZXJyID0gdGczX2NoaXBfcmVzZXQodHApOwpAQCAtNTg0MCwxMCArNTg2NSwxNCBAQAogCQkJICBHUkNfTU9ERV9OT19UWF9QSERSX0NTVU0gfAogCQkJICBHUkNfTU9ERV9OT19SWF9QSERSX0NTVU0pOwogCXRwLT5ncmNfbW9kZSB8PSBHUkNfTU9ERV9IT1NUX1NFTkRCRFM7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OT19UWF9QU0VVRE9fQ1NVTSkKLQkJdHAtPmdyY19tb2RlIHw9IEdSQ19NT0RFX05PX1RYX1BIRFJfQ1NVTTsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05PX1JYX1BTRVVET19DU1VNKQotCQl0cC0+Z3JjX21vZGUgfD0gR1JDX01PREVfTk9fUlhfUEhEUl9DU1VNOworCisJLyogUHNldWRvLWhlYWRlciBjaGVja3N1bSBpcyBkb25lIGJ5IGhhcmR3YXJlIGxvZ2ljIGFuZCBub3QKKwkgKiB0aGUgb2ZmbG9hZCBwcm9jZXNzZXJzLCBzbyBtYWtlIHRoZSBjaGlwIGRvIHRoZSBwc2V1ZG8tCisJICogaGVhZGVyIGNoZWNrc3VtcyBvbiByZWNlaXZlLiAgRm9yIHRyYW5zbWl0IGl0IGlzIG1vcmUKKwkgKiBjb252ZW5pZW50IHRvIGRvIHRoZSBwc2V1ZG8taGVhZGVyIGNoZWNrc3VtIGluIHNvZnR3YXJlCisJICogYXMgTGludXggZG9lcyB0aGF0IG9uIHRyYW5zbWl0IGZvciB1cyBpbiBhbGwgY2FzZXMuCisJICovCisJdHAtPmdyY19tb2RlIHw9IEdSQ19NT0RFX05PX1RYX1BIRFJfQ1NVTTsKIAogCXR3MzIoR1JDX01PREUsCiAJICAgICB0cC0+Z3JjX21vZGUgfApAQCAtNjMyOCw3ICs2MzU3LDcgQEAKIAkJdHczMihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsKTsKIAl9CiAKLQllcnIgPSB0ZzNfc2V0dXBfcGh5KHRwLCAxKTsKKwllcnIgPSB0ZzNfc2V0dXBfcGh5KHRwLCByZXNldF9waHkpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTY0MDEsNyArNjQzMCw3IEBACiAvKiBDYWxsZWQgYXQgZGV2aWNlIG9wZW4gdGltZSB0byBnZXQgdGhlIGNoaXAgcmVhZHkgZm9yCiAgKiBwYWNrZXQgcHJvY2Vzc2luZy4gIEludm9rZWQgd2l0aCB0cC0+bG9jayBoZWxkLgogICovCi1zdGF0aWMgaW50IHRnM19pbml0X2h3KHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIGludCB0ZzNfaW5pdF9odyhzdHJ1Y3QgdGczICp0cCwgaW50IHJlc2V0X3BoeSkKIHsKIAlpbnQgZXJyOwogCkBAIC02NDE0LDcgKzY0NDMsNyBAQAogCiAJdHczMihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIDApOwogCi0JZXJyID0gdGczX3Jlc2V0X2h3KHRwKTsKKwllcnIgPSB0ZzNfcmVzZXRfaHcodHAsIHJlc2V0X3BoeSk7CiAKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtNjQ2Miw2ICs2NDkxLDEwIEBACiAJVEczX1NUQVRfQUREMzIoJnNwLT5yeF9mcmFtZV90b29fbG9uZ19lcnJvcnMsIE1BQ19SWF9TVEFUU19GUkFNRV9UT09fTE9ORyk7CiAJVEczX1NUQVRfQUREMzIoJnNwLT5yeF9qYWJiZXJzLCBNQUNfUlhfU1RBVFNfSkFCQkVSUyk7CiAJVEczX1NUQVRfQUREMzIoJnNwLT5yeF91bmRlcnNpemVfcGFja2V0cywgTUFDX1JYX1NUQVRTX1VOREVSU0laRSk7CisKKwlURzNfU1RBVF9BREQzMigmc3AtPnJ4YmRzX2VtcHR5LCBSQ1ZMUENfTk9fUkNWX0JEX0NOVCk7CisJVEczX1NUQVRfQUREMzIoJnNwLT5yeF9kaXNjYXJkcywgUkNWTFBDX0lOX0RJU0NBUkRTX0NOVCk7CisJVEczX1NUQVRfQUREMzIoJnNwLT5yeF9lcnJvcnMsIFJDVkxQQ19JTl9FUlJPUlNfQ05UKTsKIH0KIAogc3RhdGljIHZvaWQgdGczX3RpbWVyKHVuc2lnbmVkIGxvbmcgX19vcGFxdWUpCkBAIC02Njg0LDcgKzY3MTcsNyBAQAogCXRnM19mdWxsX2xvY2sodHAsIDEpOwogCiAJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwotCWVyciA9IHRnM19pbml0X2h3KHRwKTsKKwllcnIgPSB0ZzNfaW5pdF9odyh0cCwgMSk7CiAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogCkBAIC02NzQ5LDcgKzY3ODIsNyBAQAogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKLQllcnIgPSB0ZzNfaW5pdF9odyh0cCk7CisJZXJyID0gdGczX2luaXRfaHcodHAsIDEpOwogCWlmIChlcnIpIHsKIAkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwogCQl0ZzNfZnJlZV9yaW5ncyh0cCk7CkBAIC03NjI3LDIxICs3NjYwLDIzIEBACiAJCWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfAogCQkJCSAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpKQorCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpIHsKIAkJY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKIAkJCQkgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKIAkJCQkgIFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAogCQkJCSAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CiAJCQkJICBTVVBQT1JURURfTUlJKTsKLQllbHNlCisJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJfSBlbHNlIHsKIAkJY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0ZJQlJFOworCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCX0KICAgCiAJY21kLT5hZHZlcnRpc2luZyA9IHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZzsKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCWNtZC0+c3BlZWQgPSB0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkOwogCQljbWQtPmR1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4OwogCX0KLQljbWQtPnBvcnQgPSAwOwogCWNtZC0+cGh5X2FkZHJlc3MgPSBQSFlfQUREUjsKIAljbWQtPnRyYW5zY2VpdmVyID0gMDsKIAljbWQtPmF1dG9uZWcgPSB0cC0+bGlua19jb25maWcuYXV0b25lZzsKQEAgLTc4NDAsNyArNzg3NSw3IEBACiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKLQkJdGczX2luaXRfaHcodHApOworCQl0ZzNfaW5pdF9odyh0cCwgMSk7CiAJCXRnM19uZXRpZl9zdGFydCh0cCk7CiAJfQogCkBAIC03ODg1LDcgKzc5MjAsNyBAQAogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7Ci0JCXRnM19pbml0X2h3KHRwKTsKKwkJdGczX2luaXRfaHcodHAsIDEpOwogCQl0ZzNfbmV0aWZfc3RhcnQodHApOwogCX0KIApAQCAtODA0Niw5ICs4MDgxLDEzIEBACiAJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCiAJCQljc3VtOCArPSBidWY4W2ldOwogCi0JCWlmIChjc3VtOCA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCXJldHVybiAtRUlPOworCQlpZiAoY3N1bTggPT0gMCkgeworCQkJZXJyID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogQm9vdHN0cmFwIGNoZWNrc3VtIGF0IG9mZnNldCAweDEwICovCkBAIC04NDI0LDYgKzg0NjMsOSBAQAogCiAJdHhfbGVuID0gMTUxNDsKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHR4X2xlbik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCiAJdHhfZGF0YSA9IHNrYl9wdXQoc2tiLCB0eF9sZW4pOwogCW1lbWNweSh0eF9kYXRhLCB0cC0+ZGV2LT5kZXZfYWRkciwgNik7CiAJbWVtc2V0KHR4X2RhdGEgKyA2LCAweDAsIDgpOwpAQCAtODUxOSw3ICs4NTYxLDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcodHAtPmRldikpCiAJCXJldHVybiBURzNfTE9PUEJBQ0tfRkFJTEVEOwogCi0JdGczX3Jlc2V0X2h3KHRwKTsKKwl0ZzNfcmVzZXRfaHcodHAsIDEpOwogCiAJaWYgKHRnM19ydW5fbG9vcGJhY2sodHAsIFRHM19NQUNfTE9PUEJBQ0spKQogCQllcnIgfD0gVEczX01BQ19MT09QQkFDS19GQUlMRUQ7CkBAIC04NTkzLDcgKzg2MzUsNyBAQAogCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfSU5JVF9DT01QTEVURTsKLQkJCXRnM19pbml0X2h3KHRwKTsKKwkJCXRnM19pbml0X2h3KHRwLCAxKTsKIAkJCXRnM19uZXRpZl9zdGFydCh0cCk7CiAJCX0KIApAQCAtOTAzNiw5ICs5MDc4LDYgQEAKIHsKIAlpbnQgajsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKQotCQlyZXR1cm47Ci0KIAl0dzMyX2YoR1JDX0VFUFJPTV9BRERSLAogCSAgICAgKEVFUFJPTV9BRERSX0ZTTV9SRVNFVCB8CiAJICAgICAgKEVFUFJPTV9ERUZBVUxUX0NMT0NLX1BFUklPRCA8PApAQCAtOTE3MSwxMSArOTIxMCw2IEBACiB7CiAJaW50IHJldDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkF0dGVtcHQgdG8gZG8gbnZyYW1fcmVhZCBvbiBTdW4gNTcwWFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpCiAJCXJldHVybiB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20odHAsIG9mZnNldCwgdmFsKTsKIApAQCAtOTM3NCw3ICs5NDA4LDcgQEAKIAogCSAgICAgICAgaWYgKChwYWdlX29mZiA9PSAwKSB8fCAoaSA9PSAwKSkKIAkJCW52cmFtX2NtZCB8PSBOVlJBTV9DTURfRklSU1Q7Ci0JCWVsc2UgaWYgKHBhZ2Vfb2ZmID09ICh0cC0+bnZyYW1fcGFnZXNpemUgLSA0KSkKKwkJaWYgKHBhZ2Vfb2ZmID09ICh0cC0+bnZyYW1fcGFnZXNpemUgLSA0KSkKIAkJCW52cmFtX2NtZCB8PSBOVlJBTV9DTURfTEFTVDsKIAogCQlpZiAoaSA9PSAobGVuIC0gNCkpCkBAIC05NDA4LDExICs5NDQyLDYgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQXR0ZW1wdCB0byBkbyBudnJhbV93cml0ZSBvbiBTdW4gNTcwWFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1QpIHsKIAkJdHczMl9mKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwgJgogCQkgICAgICAgfkdSQ19MQ0xDVFJMX0dQSU9fT1VUUFVUMSk7CkBAIC05NTM5LDEyICs5NTY4LDE5IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01JU0NfSE9TVF9DVFJMLAogCQkJICAgICAgIHRwLT5taXNjX2hvc3RfY3RybCk7CiAKKwkvKiBUaGUgbWVtb3J5IGFyYml0ZXIgaGFzIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgZm9yIFNSQU0gYWNjZXNzZXMKKwkgKiB0byBzdWNjZWVkLiAgTm9ybWFsbHkgb24gcG93ZXJ1cCB0aGUgdGczIGNoaXAgZmlybXdhcmUgd2lsbCBtYWtlCisJICogc3VyZSBpdCBpcyBlbmFibGVkLCBidXQgb3RoZXIgZW50aXRpZXMgc3VjaCBhcyBzeXN0ZW0gbmV0Ym9vdAorCSAqIGNvZGUgbWlnaHQgZGlzYWJsZSBpdC4KKwkgKi8KKwl2YWwgPSB0cjMyKE1FTUFSQl9NT0RFKTsKKwl0dzMyKE1FTUFSQl9NT0RFLCB2YWwgfCBNRU1BUkJfTU9ERV9FTkFCTEUpOworCiAJdHAtPnBoeV9pZCA9IFBIWV9JRF9JTlZBTElEOwogCXRwLT5sZWRfY3RybCA9IExFRF9DVFJMX01PREVfUEhZXzE7CiAKLQkvKiBEbyBub3QgZXZlbiB0cnkgcG9raW5nIGFyb3VuZCBpbiBoZXJlIG9uIFN1biBwYXJ0cy4gICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpCi0JCXJldHVybjsKKwkvKiBBc3N1bWUgYW4gb25ib2FyZCBkZXZpY2UgYnkgZGVmYXVsdC4gICovCisJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKIAogCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9TSUcsICZ2YWwpOwogCWlmICh2YWwgPT0gTklDX1NSQU1fREFUQV9TSUdfTUFHSUMpIHsKQEAgLTk2NDIsMTAgKzk2NzgsMTAgQEAKIAkJICAgIHRwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfREVMTCkKIAkJCXRwLT5sZWRfY3RybCA9IExFRF9DVFJMX01PREVfUEhZXzI7CiAKLQkJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMCkgJiYKLQkJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMSkgJiYKLQkJICAgIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfRUVQUk9NX1dQKSkKKwkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19FRVBST01fV1ApCiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UOworCQllbHNlCisJCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKIAogCQlpZiAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0FTRl9FTkFCTEUpIHsKIAkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfRU5BQkxFX0FTRjsKQEAgLTk3OTQsMTYgKzk4MzAsOCBAQAogCWludCBpOwogCXUzMiBtYWdpYzsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSB7Ci0JCS8qIFN1biBkZWNpZGVkIG5vdCB0byBwdXQgdGhlIG5lY2Vzc2FyeSBiaXRzIGluIHRoZQotCQkgKiBOVlJBTSBvZiB0aGVpciBvbmJvYXJkIHRnMyBwYXJ0cyA6KAotCQkgKi8KLQkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIlN1biA1NzBYIik7Ci0JCXJldHVybjsKLQl9Ci0KIAlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMHgwLCAmbWFnaWMpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0X25vdF9mb3VuZDsKIAogCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkgKz0gNCkgewpAQCAtOTgzNCw2ICs5ODYyLDkgQEAKIAkJCQkJYnJlYWs7CiAJCQkJbXNsZWVwKDEpOwogCQkJfQorCQkJaWYgKCEodG1wMTYgJiAweDgwMDApKQorCQkJCWdvdG8gb3V0X25vdF9mb3VuZDsKKwogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCB2cGRfY2FwICsgUENJX1ZQRF9EQVRBLAogCQkJCQkgICAgICAmdG1wKTsKIAkJCXRtcCA9IGNwdV90b19sZTMyKHRtcCk7CkBAIC05OTI1LDM3ICs5OTU2LDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfU1BBUkM2NAotc3RhdGljIGludCBfX2RldmluaXQgdGczX2lzX3N1bl81NzBYKHN0cnVjdCB0ZzMgKnRwKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBkZXY7Ci0Jc3RydWN0IHBjaWRldl9jb29raWUgKnBjcCA9IHBkZXYtPnN5c2RhdGE7Ci0KLQlpZiAocGNwICE9IE5VTEwpIHsKLQkJaW50IG5vZGUgPSBwY3AtPnByb21fbm9kZTsKLQkJdTMyIHZlbmlkOwotCQlpbnQgZXJyOwotCi0JCWVyciA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgInN1YnN5c3RlbS12ZW5kb3ItaWQiLAotCQkJCSAgICAgICAoY2hhciAqKSAmdmVuaWQsIHNpemVvZih2ZW5pZCkpOwotCQlpZiAoZXJyID09IDAgfHwgZXJyID09IC0xKQotCQkJcmV0dXJuIDA7Ci0JCWlmICh2ZW5pZCA9PSBQQ0lfVkVORE9SX0lEX1NVTikKLQkJCXJldHVybiAxOwotCi0JCS8qIFRHMyBjaGlwcyBvbmJvYXJkIHRoZSBTdW5CbGFkZS0yNTAwIGRvbid0IGhhdmUgdGhlCi0JCSAqIHN1YnN5c3RlbS12ZW5kb3ItaWQgc2V0IHRvIFBDSV9WRU5ET1JfSURfU1VOIGJ1dCB0aGV5Ci0JCSAqIGFyZSBkaXN0aW5ndWlzaGFibGUgZnJvbSBub24tU3VuIHZhcmlhbnRzIGJ5IGJlaW5nCi0JCSAqIG5hbWVkICJuZXR3b3JrIiBieSB0aGUgZmlybXdhcmUuICBOb24tU3VuIGNhcmRzIHdpbGwKLQkJICogc2hvdyB1cCBhcyBiZWluZyBuYW1lZCAiZXRoZXJuZXQiLgotCQkgKi8KLQkJaWYgKCFzdHJjbXAocGNwLT5wcm9tX25hbWUsICJuZXR3b3JrIikpCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCBfX2RldmluaXQgdGczX2dldF9pbnZhcmlhbnRzKHN0cnVjdCB0ZzMgKnRwKQogewogCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB3cml0ZV9yZW9yZGVyX2NoaXBzZXRzW10gPSB7CkBAIC05OTcyLDExICs5OTcyLDYgQEAKIAl1MTYgcGNpX2NtZDsKIAlpbnQgZXJyOwogCi0jaWZkZWYgQ09ORklHX1NQQVJDNjQKLQlpZiAodGczX2lzX3N1bl81NzBYKHRwKSkKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfU1VOXzU3MFg7Ci0jZW5kaWYKLQogCS8qIEZvcmNlIG1lbW9yeSB3cml0ZSBpbnZhbGlkYXRlIG9mZi4gIElmIHdlIGxlYXZlIGl0IG9uLAogCSAqIHRoZW4gb24gNTcwMF9CWCBjaGlwcyB3ZSBoYXZlIHRvIGVuYWJsZSBhIHdvcmthcm91bmQuCiAJICogVGhlIHdvcmthcm91bmQgaXMgdG8gc2V0IHRoZSBURzNQQ0lfRE1BX1JXX0NUUkwgYm91bmRhcnkKQEAgLTEwMjY5LDYgKzEwMjY0LDEyIEBACiAJCXBjaV93cml0ZV9jb25maWdfd29yZCh0cC0+cGRldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOwogCX0KIAorCWlmICh0cC0+d3JpdGUzMiA9PSB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzIgfHwKKwkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSAmJgorCSAgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwIHx8CisJICAgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDEpKSkKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19TUkFNX1VTRV9DT05GSUc7CisKIAkvKiBHZXQgZWVwcm9tIGh3IGNvbmZpZyBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCiAJICogSW4gcGFydGljdWxhciwgdGhlIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UIGZsYWcgbXVzdCBiZQogCSAqIGRldGVybWluZWQgYmVmb3JlIGNhbGxpbmcgdGczX3NldF9wb3dlcl9zdGF0ZSgpIHNvIHRoYXQKQEAgLTEwMzExLDE1ICsxMDMxMiw2IEBACiAJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAwX0IwKQogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVM7CiAKLQkvKiBQc2V1ZG8taGVhZGVyIGNoZWNrc3VtIGlzIGRvbmUgYnkgaGFyZHdhcmUgbG9naWMgYW5kIG5vdAotCSAqIHRoZSBvZmZsb2FkIHByb2Nlc3NlcnMsIHNvIG1ha2UgdGhlIGNoaXAgZG8gdGhlIHBzZXVkby0KLQkgKiBoZWFkZXIgY2hlY2tzdW1zIG9uIHJlY2VpdmUuICBGb3IgdHJhbnNtaXQgaXQgaXMgbW9yZQotCSAqIGNvbnZlbmllbnQgdG8gZG8gdGhlIHBzZXVkby1oZWFkZXIgY2hlY2tzdW0gaW4gc29mdHdhcmUKLQkgKiBhcyBMaW51eCBkb2VzIHRoYXQgb24gdHJhbnNtaXQgZm9yIHVzIGluIGFsbCBjYXNlcy4KLQkgKi8KLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05PX1RYX1BTRVVET19DU1VNOwotCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX05PX1JYX1BTRVVET19DU1VNOwotCiAJLyogRGVyaXZlIGluaXRpYWwganVtYm8gbW9kZSBmcm9tIE1UVSBhc3NpZ25lZCBpbgogCSAqIGV0aGVyX3NldHVwKCkgdmlhIHRoZSBhbGxvY19ldGhlcmRldigpIGNhbGwKIAkgKi8KQEAgLTEwMzUxLDEwICsxMDM0MywxMyBAQAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNF9BMCkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZXzU3MDRfQTBfQlVHOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgJiYKLQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzU1KSAmJgotCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODcpKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfQkVSX0JVRzsKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8CisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NykKKwkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9KSVRURVJfQlVHOworCQllbHNlCisJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfQkVSX0JVRzsKKwl9CiAKIAl0cC0+Y29hbGVzY2VfbW9kZSA9IDA7CiAJaWYgKEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3MDBfQVggJiYKQEAgLTEwNTUzLDggKzEwNTQ4LDcgQEAKICNlbmRpZgogCiAJbWFjX29mZnNldCA9IDB4N2M7Ci0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCAmJgotCSAgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMRzJfU1VOXzU3MFgpKSB8fAorCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpIHx8CiAJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CiAJCWlmICh0cjMyKFRHM1BDSV9EVUFMX01BQ19DVFJMKSAmIERVQUxfTUFDX0NUUkxfSUQpCiAJCQltYWNfb2Zmc2V0ID0gMHhjYzsKQEAgLTEwNTgxLDggKzEwNTc1LDcgQEAKIAl9CiAJaWYgKCFhZGRyX29rKSB7CiAJCS8qIE5leHQsIHRyeSBOVlJBTS4gKi8KLQkJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEcyX1NVTl81NzBYKSAmJgotCQkgICAgIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgorCQlpZiAoIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgogCQkgICAgIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgNCwgJmxvKSkgewogCQkJZGV2LT5kZXZfYWRkclswXSA9ICgoaGkgPj4gMTYpICYgMHhmZik7CiAJCQlkZXYtPmRldl9hZGRyWzFdID0gKChoaSA+PiAyNCkgJiAweGZmKTsKQEAgLTExNTY3LDcgKzExNTYwLDcgQEAKIAkJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19JTklUX0NPTVBMRVRFOwotCQl0ZzNfaW5pdF9odyh0cCk7CisJCXRnM19pbml0X2h3KHRwLCAxKTsKIAogCQl0cC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0cC0+dGltZXJfb2Zmc2V0OwogCQlhZGRfdGltZXIoJnRwLT50aW1lcik7CkBAIC0xMTYwMSw3ICsxMTU5NCw3IEBACiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0lOSVRfQ09NUExFVEU7Ci0JdGczX2luaXRfaHcodHApOworCXRnM19pbml0X2h3KHRwLCAxKTsKIAogCXRwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHRwLT50aW1lcl9vZmZzZXQ7CiAJYWRkX3RpbWVyKCZ0cC0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmggYi9kcml2ZXJzL25ldC90ZzMuaAppbmRleCBjNDNjYzMyLi5mZjBmYWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtMjE3MSw4ICsyMTcxLDcgQEAKICNkZWZpbmUgVEczX0ZMQUdfUENJWF9NT0RFCQkweDAwMDIwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1BDSV9ISUdIX1NQRUVECQkweDAwMDQwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1BDSV8zMkJJVAkJMHgwMDA4MDAwMAotI2RlZmluZSBURzNfRkxBR19OT19UWF9QU0VVRE9fQ1NVTQkweDAwMTAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX05PX1JYX1BTRVVET19DU1VNCTB4MDAyMDAwMDAKKyNkZWZpbmUgVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHCTB4MDAxMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfU0VSREVTX1dPTF9DQVAJCTB4MDA0MDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUJMHgwMDgwMDAwMAogI2RlZmluZSBURzNfRkxBR18xMF8xMDBfT05MWQkJMHgwMTAwMDAwMApAQCAtMjE4NSw3ICsyMTg0LDcgQEAKICNkZWZpbmUgVEczX0ZMQUdfSU5JVF9DT01QTEVURQkJMHg4MDAwMDAwMAogCXUzMgkJCQl0ZzNfZmxhZ3MyOwogI2RlZmluZSBURzNfRkxHMl9SRVNUQVJUX1RJTUVSCQkweDAwMDAwMDAxCi0jZGVmaW5lIFRHM19GTEcyX1NVTl81NzBYCQkweDAwMDAwMDAyCisvKgkJCQkJMHgwMDAwMDAwMiBhdmFpbGFibGUgKi8KICNkZWZpbmUgVEczX0ZMRzJfTk9fRVRIX1dJUkVfU1BFRUQJMHgwMDAwMDAwNAogI2RlZmluZSBURzNfRkxHMl9JU181Nzg4CQkweDAwMDAwMDA4CiAjZGVmaW5lIFRHM19GTEcyX01BWF9SWFBFTkRfNjQJCTB4MDAwMDAwMTAKQEAgLTIyMTYsNiArMjIxNSw4IEBACiAjZGVmaW5lIFRHM19GTEcyX0hXX1RTT18yCQkweDA4MDAwMDAwCiAjZGVmaW5lIFRHM19GTEcyX0hXX1RTTwkJCShURzNfRkxHMl9IV19UU09fMSB8IFRHM19GTEcyX0hXX1RTT18yKQogI2RlZmluZSBURzNfRkxHMl8xU0hPVF9NU0kJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVEczX0ZMRzJfUEhZX0pJVFRFUl9CVUcJCTB4MjAwMDAwMDAKKyNkZWZpbmUgVEczX0ZMRzJfTk9fRldBUkVfUkVQT1JURUQJMHg0MDAwMDAwMAogCiAJdTMyCQkJCXNwbGl0X21vZGVfbWF4X3JlcXM7CiAjZGVmaW5lIFNQTElUX01PREVfNTcwNF9NQVhfUkVRCQkzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9LY29uZmlnCmluZGV4IGU0Y2ZjODAuLjk5YzRjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogCiBtZW51ICJUb2tlbiBSaW5nIGRldmljZXMiCi0JZGVwZW5kcyBvbiBORVRERVZJQ0VTCisJZGVwZW5kcyBvbiBORVRERVZJQ0VTICYmICFVTUwKIAogIyBTbyBmYXIsIHdlIG9ubHkgaGF2ZSBQQ0ksIElTQSwgYW5kIE1DQSB0b2tlbiByaW5nIGRldmljZXMKIGNvbmZpZyBUUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwppbmRleCA5MzQ1ZTY4Li42NDlkOGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwpAQCAtNDM4LDggKzQzOCw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAkKLQlpZiAoIWRldikKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHItMHgxMCwgQUJZU1NfSU9fRVhURU5UKTsKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCmluZGV4IDNhMjVkMTkuLjE5ZTZmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwpAQCAtNzM1LDggKzczNSw3IEBACiAJc3RydWN0IG5ldF9sb2NhbCAqdHA7CiAgICAgICAgIHN0cnVjdCBjYXJkX2luZm8gKmNhcmQ7CiAKLQlpZiAoIWRldikKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYpOwogCiAJdHAgPSBkZXYtPnByaXY7CiAJY2FyZCA9IHRwLT50bXNwcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKaW5kZXggYmEwNWRlZC4uMTM2YTcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCkBAIC04NTAsNyArODUwLDcgQEAKIAkJCWJyZWFrOwogCQlza2ItPmRldiA9IGRldjsJCQkvKiBNYXJrIGFzIGJlaW5nIHVzZWQgYnkgdGhpcyBkZXZpY2UuICovCiAJCW5wLT5yeF9hZGRyW2ldID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsc2tiLT5kYXRhLAotCQkJCQlza2ItPmxlbixQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQlucC0+cnhfYnVmX3N6LFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJbnAtPnJ4X3JpbmdbaV0uYnVmZmVyMSA9IG5wLT5yeF9hZGRyW2ldOwogCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBEZXNjT3duOwpAQCAtMTMxNiw3ICsxMzE2LDcgQEAKIAkJCXNrYi0+ZGV2ID0gZGV2OwkJCS8qIE1hcmsgYXMgYmVpbmcgdXNlZCBieSB0aGlzIGRldmljZS4gKi8KIAkJCW5wLT5yeF9hZGRyW2VudHJ5XSA9IHBjaV9tYXBfc2luZ2xlKG5wLT5wY2lfZGV2LAogCQkJCQkJCXNrYi0+ZGF0YSwKLQkJCQkJCQlza2ItPmxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJCQlucC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJbnAtPnJ4X3JpbmdbZW50cnldLmJ1ZmZlcjEgPSBucC0+cnhfYWRkcltlbnRyeV07CiAJCX0KIAkJd21iKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggYzFjZTg3YS4uZDkyNThkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAjaW5jbHVkZSAidHlwaG9vbi5oIgogI2luY2x1ZGUgInR5cGhvb24tZmlybXdhcmUuaCIKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogICAgICJ0eXBob29uLmM6IHZlcnNpb24gIiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIERpbGxvdyA8ZGF2ZUB0aGVkaWxsb3dzLm9yZz4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggYTliMjE1MC4uZmRjMjEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTEyOSw2ICsxMjksNyBAQAogCS0gTWFzc2l2ZSBjbGVhbi11cAogCS0gUmV3cml0ZSBQSFksIG1lZGlhIGhhbmRsaW5nIChyZW1vdmUgb3B0aW9ucywgZnVsbF9kdXBsZXgsIGJhY2tvZmYpCiAJLSBGaXggVHggZW5naW5lIHJhY2UgZm9yIGdvb2QKKwktIENyYWlnIEJyaW5kOiBaZXJvIHBhZGRlZCBhbGlnbmVkIGJ1ZmZlcnMgZm9yIHNob3J0IHBhY2tldHMuCiAKICovCiAKQEAgLTQ2OSw3ICs0NzAsNyBAQAogCXN0cnVjdCBza19idWZmICp0eF9za2J1ZmZbVFhfUklOR19TSVpFXTsKIAlkbWFfYWRkcl90IHR4X3NrYnVmZl9kbWFbVFhfUklOR19TSVpFXTsKIAotCS8qIFR4IGJvdW5jZSBidWZmZXJzICovCisJLyogVHggYm91bmNlIGJ1ZmZlcnMgKFJoaW5lLUkgb25seSkgKi8KIAl1bnNpZ25lZCBjaGFyICp0eF9idWZbVFhfUklOR19TSVpFXTsKIAl1bnNpZ25lZCBjaGFyICp0eF9idWZzOwogCWRtYV9hZGRyX3QgdHhfYnVmc19kbWE7CkBAIC00OTAsOCArNDkxLDYgQEAKIAl1OCB0eF90aHJlc2gsIHJ4X3RocmVzaDsKIAogCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaWY7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hlY2tfbWVkaWFfdGFzazsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiB9OwogCkBAIC00OTksOCArNDk4LDYgQEAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsdWUpOwogc3RhdGljIGludCAgcmhpbmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJoaW5lX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCByaGluZV90eF90aW1lb3V0X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCByaGluZV9jaGVja19tZWRpYV90YXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgcmhpbmVfc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcmhpbmVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIHZvaWQgcmhpbmVfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC04NTUsMTIgKzg1Miw2IEBACiAJaWYgKHJwLT5xdWlya3MgJiBycVJoaW5lSSkKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHfE5FVElGX0ZfSFdfQ1NVTTsKIAotCUlOSVRfV09SSygmcnAtPnR4X3RpbWVvdXRfdGFzaywKLQkJICAodm9pZCAoKikodm9pZCAqKSlyaGluZV90eF90aW1lb3V0X3Rhc2ssIGRldik7Ci0KLQlJTklUX1dPUksoJnJwLT5jaGVja19tZWRpYV90YXNrLAotCQkgICh2b2lkICgqKSh2b2lkICopKXJoaW5lX2NoZWNrX21lZGlhX3Rhc2ssIGRldik7Ci0KIAkvKiBkZXYtPm5hbWUgbm90IGRlZmluZWQgYmVmb3JlIHJlZ2lzdGVyX25ldGRldigpISAqLwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKQpAQCAtMTA0Myw3ICsxMDM0LDggQEAKIAkJcnAtPnR4X3JpbmdbaV0uZGVzY19sZW5ndGggPSBjcHVfdG9fbGUzMihUWERFU0MpOwogCQluZXh0ICs9IHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CiAJCXJwLT50eF9yaW5nW2ldLm5leHRfZGVzYyA9IGNwdV90b19sZTMyKG5leHQpOwotCQlycC0+dHhfYnVmW2ldID0gJnJwLT50eF9idWZzW2kgKiBQS1RfQlVGX1NaXTsKKwkJaWYgKHJwLT5xdWlya3MgJiBycVJoaW5lSSkKKwkJCXJwLT50eF9idWZbaV0gPSAmcnAtPnR4X2J1ZnNbaSAqIFBLVF9CVUZfU1pdOwogCX0KIAlycC0+dHhfcmluZ1tpLTFdLm5leHRfZGVzYyA9IGNwdV90b19sZTMyKHJwLT50eF9yaW5nX2RtYSk7CiAKQEAgLTEwOTEsNyArMTA4Myw3IEBACiB9CiAKIC8qIENhbGxlZCBhZnRlciBzdGF0dXMgb2YgZm9yY2VfbWVkaWEgcG9zc2libHkgY2hhbmdlZCAqLwotdm9pZCByaGluZV9zZXRfY2FycmllcihzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSkKK3N0YXRpYyB2b2lkIHJoaW5lX3NldF9jYXJyaWVyKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpKQogewogCWlmIChtaWktPmZvcmNlX21lZGlhKSB7CiAJCS8qIGF1dG9uZWcgaXMgb2ZmOiBMaW5rIGlzIGFsd2F5cyBhc3N1bWVkIHRvIGJlIHVwICovCkBAIC0xMTA2LDExICsxMDk4LDYgQEAKIAkJICAgICAgIG5ldGlmX2NhcnJpZXJfb2sobWlpLT5kZXYpKTsKIH0KIAotc3RhdGljIHZvaWQgcmhpbmVfY2hlY2tfbWVkaWFfdGFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJoaW5lX2NoZWNrX21lZGlhKGRldiwgMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTExNjQsOCArMTE1MSw4IEBACiAJaWYgKHF1aXJrcyAmIHJxUmhpbmVJKSB7CiAJCWlvd3JpdGU4KDB4MDEsIGlvYWRkciArIE1JSVJlZ0FkZHIpOwkvLyBNSUlfQk1TUgogCi0JCS8qIERvIG5vdCBjYWxsIGZyb20gSVNSISAqLwotCQltc2xlZXAoMSk7CisJCS8qIENhbiBiZSBjYWxsZWQgZnJvbSBJU1IuIEV2aWwuICovCisJCW1kZWxheSgxKTsKIAogCQkvKiAweDgwIG11c3QgYmUgc2V0IGltbWVkaWF0ZWx5IGJlZm9yZSB0dXJuaW5nIGl0IG9mZiAqLwogCQlpb3dyaXRlOCgweDgwLCBpb2FkZHIgKyBNSUlDbWQpOwpAQCAtMTI1NSwxNiArMTI0Miw2IEBACiBzdGF0aWMgdm9pZCByaGluZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qCi0JICogTW92ZSBidWxrIG9mIHdvcmsgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dAotCSAqLwotCXNjaGVkdWxlX3dvcmsoJnJwLT50eF90aW1lb3V0X3Rhc2spOwotfQotCi1zdGF0aWMgdm9pZCByaGluZV90eF90aW1lb3V0X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTQuNHgsIFBIWSBzdGF0dXMgIgpAQCAtMTMyNSw3ICsxMzAyLDEyIEBACiAJCQlycC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIDA7CiAJCX0KKworCQkvKiBQYWRkaW5nIGlzIG5vdCBjb3BpZWQgYW5kIHNvIG11c3QgYmUgcmVkb25lLiAqLwogCQlza2JfY29weV9hbmRfY3N1bV9kZXYoc2tiLCBycC0+dHhfYnVmW2VudHJ5XSk7CisJCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKQorCQkJbWVtc2V0KHJwLT50eF9idWZbZW50cnldICsgc2tiLT5sZW4sIDAsCisJCQkgICAgICAgRVRIX1pMRU4gLSBza2ItPmxlbik7CiAJCXJwLT50eF9za2J1ZmZfZG1hW2VudHJ5XSA9IDA7CiAJCXJwLT50eF9yaW5nW2VudHJ5XS5hZGRyID0gY3B1X3RvX2xlMzIocnAtPnR4X2J1ZnNfZG1hICsKIAkJCQkJCSAgICAgIChycC0+dHhfYnVmW2VudHJ5XSAtCkBAIC0xNjcwLDcgKzE2NTIsNyBAQAogCXNwaW5fbG9jaygmcnAtPmxvY2spOwogCiAJaWYgKGludHJfc3RhdHVzICYgSW50ckxpbmtDaGFuZ2UpCi0JCXNjaGVkdWxlX3dvcmsoJnJwLT5jaGVja19tZWRpYV90YXNrKTsKKwkJcmhpbmVfY2hlY2tfbWVkaWEoZGV2LCAwKTsKIAlpZiAoaW50cl9zdGF0dXMgJiBJbnRyU3RhdHNNYXgpIHsKIAkJcnAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gaW9yZWFkMTYoaW9hZGRyICsgUnhDUkNFcnJzKTsKIAkJcnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW9yZWFkMTYoaW9hZGRyICsgUnhNaXNzZWQpOwpAQCAtMTkyMCw5ICsxOTAyLDYgQEAKIAlzcGluX3VubG9ja19pcnEoJnJwLT5sb2NrKTsKIAogCWZyZWVfaXJxKHJwLT5wZGV2LT5pcnEsIGRldik7Ci0KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJZnJlZV9yYnVmcyhkZXYpOwogCWZyZWVfdGJ1ZnMoZGV2KTsKIAlmcmVlX3JpbmcoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKaW5kZXggODgzY2Y3ZC4uYjUzMjhiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKQEAgLTQxMCwxMDMgKzQxMCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBWRU5ET1JfU0FOR09NQQotCXRyaXN0YXRlICJTYW5nb21hIFdBTlBJUEUodG0pIG11bHRpcHJvdG9jb2wgY2FyZHMiCi0JZGVwZW5kcyBvbiBXQU5fUk9VVEVSX0RSSVZFUlMgJiYgV0FOX1JPVVRFUiAmJiAoUENJIHx8IElTQSkgJiYgQlJPS0VOCi0JLS0taGVscC0tLQotCSAgRHJpdmVyIGZvciBTNTE0LVBDSS9JU0EgU3luY2hyb25vdXMgRGF0YSBMaW5rIEFkYXB0ZXJzIChTRExBKS4KLQotCSAgV0FOUElQRSBmcm9tIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4gPGh0dHA6Ly93d3cuc2FuZ29tYS5jb20vPgotCSAgaXMgYSBmYW1pbHkgb2YgaW50ZWxsaWdlbnQgbXVsdGlwcm90b2NvbCBXQU4gYWRhcHRlcnMgd2l0aCBkYXRhCi0JICB0cmFuc2ZlciByYXRlcyB1cCB0byA0TWJwcy4gQ2FyZHMgc3VwcG9ydDoKLQotCSAgLSBYLjI1LCBGcmFtZSBSZWxheSwgUFBQLCBDaXNjbyBIRExDIHByb3RvY29scy4KLQotCSAgLSBBUEkgZm9yIHByb3RvY29scyBsaWtlIEhETEMgKExBUEIpLCBIRExDIFN0cmVhbWluZywgWC4yNSwKLQkgIEZyYW1lIFJlbGF5IGFuZCBCaVN5bmMuCi0KLQkgIC0gRXRoZXJuZXQgQnJpZGdpbmcgb3ZlciBGcmFtZSBSZWxheSBwcm90b2NvbC4KLQotCSAgLSBNVUxUSUxJTksgUFBQCi0KLQkgIC0gQXN5bmMgUFBQIChNb2RlbSBEaWFsdXApCi0KLQkgIFRoZSBuZXh0IHF1ZXN0aW9ucyB3aWxsIGFzayB5b3UgYWJvdXQgdGhlIHByb3RvY29scyB5b3Ugd2FudAotCSAgdGhlIGRyaXZlciB0byBzdXBwb3J0LgotCi0JICBJZiB5b3UgaGF2ZSBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXJkcywgc2F5IE0gdG8gdGhpcyBvcHRpb247Ci0JICBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQ+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3YW5waXBlLgotCi1jb25maWcgV0FOUElQRV9DSERMQwotCWJvb2wgIldBTlBJUEUgQ2lzY28gSERMQyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQktLS1oZWxwLS0tCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGEgbGVhc2VkIGxpbmUgdXNpbmcgdGhlIENpc2NvIEhETEMuCi0KLQkgIC0gU3VwcG9ydHMgRHVhbCBQb3J0IENpc2NvIEhETEMgb24gdGhlIFM1MTQtUENJL1M1MDgtSVNBIGNhcmRzCi0JICB3aGljaCBhbGxvd3MgdXNlciB0byBidWlsZCBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIEhETEMgc3RyZWFtaW5nIEFQSS4KLQotCSAgLSBDSERMQyBTdHJlYW1pbmcgTVVMVElMSU5LIFBQUCB0aGF0IGNhbiBiaW5kIG11bHRpcGxlIFdBTlBJUEUgVDEKLQkgIGNhcmRzIGludG8gYSBzaW5nbGUgbG9naWNhbCBjaGFubmVsLgotCi0JICBTYXkgWSBhbmQgdGhlIENpc2NvIEhETEMgc3VwcG9ydCwgSERMQyBzdHJlYW1pbmcgQVBJIGFuZAotCSAgTVVMVElMSU5LIFBQUCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIuCi0KLWNvbmZpZyBXQU5QSVBFX0ZSCi0JYm9vbCAiV0FOUElQRSBGcmFtZSBSZWxheSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQloZWxwCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGEgRnJhbWUgUmVsYXkgbmV0d29yaywgb3IgdXNlIEZyYW1lIFJlbGF5Ci0JICBBUEkgdG8gZGV2ZWxvcCBjdXN0b20gYXBwbGljYXRpb25zLgotCi0JICBDb250YWlucyB0aGUgRXRoZXJuZXQgQnJpZGdpbmcgb3ZlciBGcmFtZSBSZWxheSBmZWF0dXJlLCB3aGVyZQotCSAgYSBXQU5QSVBFIGZyYW1lIHJlbGF5IGxpbmsgY2FuIGJlIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgTGludXgKLQkgIGtlcm5lbCBicmlkZ2UuIFRoZSBGcmFtZSBSZWxheSBvcHRpb24gaXMgc3VwcG9ydGVkIG9uIFM1MTQtUENJCi0JICBhbmQgUzUwOC1JU0EgY2FyZHMuCi0KLQkgIFNheSBZIGFuZCB0aGUgRnJhbWUgUmVsYXkgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIuCi0KLWNvbmZpZyBXQU5QSVBFX1gyNQotCWJvb2wgIldBTlBJUEUgWC4yNSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQloZWxwCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGFuIFguMjUgbmV0d29yay4KLQotCSAgSW5jbHVkZXMgdGhlIFguMjUgQVBJIHN1cHBvcnQgZm9yIGN1c3RvbSBhcHBsaWNhdGlvbnMgb3ZlciB0aGUKLQkgIFguMjUgcHJvdG9jb2wuIFRoZSBYLjI1IG9wdGlvbiBpcyBzdXBwb3J0ZWQgb24gUzUxNC1QQ0kgYW5kCi0JICBTNTA4LUlTQSBjYXJkcy4KLQotCSAgU2F5IFkgYW5kIHRoZSBYLjI1IHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZHJpdmVyLgotCi1jb25maWcgV0FOUElQRV9QUFAKLQlib29sICJXQU5QSVBFIFBQUCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQloZWxwCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGEgbGVhc2VkIGxpbmUgdXNpbmcgUG9pbnQtdG8tUG9pbnQKLQkgIFByb3RvY29sIChQUFApLgotCi0JICBUaGUgUFBQIG9wdGlvbiBpcyBzdXBwb3J0ZWQgb24gUzUxNC1QQ0kvUzUwOC1JU0EgY2FyZHMuCi0KLQkgIFNheSBZIGFuZCB0aGUgUFBQIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZHJpdmVyLgotCi1jb25maWcgV0FOUElQRV9NVUxUUFBQCi0JYm9vbCAiV0FOUElQRSBNdWx0aS1Qb3J0IFBQUCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQloZWxwCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGEgbGVhc2VkIGxpbmUgdXNpbmcgUG9pbnQtdG8tUG9pbnQKLQkgIFByb3RvY29sIChQUFApLgotCi0JICBVc2VzIGluLWtlcm5lbCBTeW5jUFBQIHByb3RvY29sIG92ZXIgdGhlIFNhbmdvbWEgSERMQyBTdHJlYW1pbmcKLQkgIGFkYXB0ZXIuIEluIHRoaXMgY2FzZSBlYWNoIFNhbmdvbWEgYWRhcHRlciBwb3J0IGNhbiBzdXBwb3J0IGFuCi0JICBpbmRlcGVuZGVudCBQUFAgY29ubmVjdGlvbi4gRm9yIGV4YW1wbGUsIGEgc2luZ2xlIFF1YWQtUG9ydCBQQ0kKLQkgIGFkYXB0ZXIgY2FuIHN1cHBvcnQgdXAgdG8gZm91ciBpbmRlcGVuZGVudCBQUFAgbGlua3MuIFRoZSBQUFAKLQkgIG9wdGlvbiBpcyBzdXBwb3J0ZWQgb24gUzUxNC1QQ0kvUzUwOC1JU0EgY2FyZHMuCi0KLQkgIFNheSBZIGFuZCB0aGUgTXVsdGktUG9ydCBQUFAgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIuCi0KIGNvbmZpZyBDWUNMQURFU19TWU5DCiAJdHJpc3RhdGUgIkN5Y2xvbSAyWCh0bSkgY2FyZHMgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBXQU5fUk9VVEVSX0RSSVZFUlMgJiYgKFBDSSB8fCBJU0EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93YW4vTWFrZWZpbGUKaW5kZXggY2U2YzU2Yi4uODIzYzZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9NYWtlZmlsZQpAQCAtNSwxNCArNSw2IEBACiAjIFJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLgogIwogCi13YW5waXBlLXkJCQk6PSBzZGxhbWFpbi5vIHNkbGFfZnQxLm8KLXdhbnBpcGUtJChDT05GSUdfV0FOUElQRV9YMjUpCSs9IHNkbGFfeDI1Lm8KLXdhbnBpcGUtJChDT05GSUdfV0FOUElQRV9GUikJKz0gc2RsYV9mci5vCi13YW5waXBlLSQoQ09ORklHX1dBTlBJUEVfQ0hETEMpCSs9IHNkbGFfY2hkbGMubwotd2FucGlwZS0kKENPTkZJR19XQU5QSVBFX1BQUCkJKz0gc2RsYV9wcHAubwotd2FucGlwZS0kKENPTkZJR19XQU5QSVBFX01VTFRQUFApICs9IHdhbnBpcGVfbXVsdHBwcC5vCi13YW5waXBlLW9ianMJCQk6PSAkKHdhbnBpcGUteSkKLQogY3ljbG9teC15ICAgICAgICAgICAgICAgICAgICAgICA6PSBjeWN4X21haW4ubwogY3ljbG9teC0kKENPTkZJR19DWUNMT01YX1gyNSkJKz0gY3ljeF94MjUubwogY3ljbG9teC1vYmpzCQkJOj0gJChjeWNsb214LXkpICAKQEAgLTQzLDExICszNSw2IEBACiAKIG9iai0kKENPTkZJR19ETENJKQkJKz0gZGxjaS5vIAogb2JqLSQoQ09ORklHX1NETEEpCQkrPSBzZGxhLm8KLWlmZXEgKCQoQ09ORklHX1dBTlBJUEVfTVVMVFBQUCkseSkKLSAgb2JqLSQoQ09ORklHX1ZFTkRPUl9TQU5HT01BKSArPSBzZGxhZHJ2Lm8gd2FucGlwZS5vIHN5bmNwcHAubwkKLWVsc2UKLSAgb2JqLSQoQ09ORklHX1ZFTkRPUl9TQU5HT01BKSArPSBzZGxhZHJ2Lm8gd2FucGlwZS5vCi1lbmRpZgogb2JqLSQoQ09ORklHX0NZQ0xBREVTX1NZTkMpCSs9IGN5Y3hfZHJ2Lm8gY3ljbG9teC5vCiBvYmotJChDT05GSUdfTEFQQkVUSEVSKQkJKz0gbGFwYmV0aGVyLm8KIG9iai0kKENPTkZJR19TQk5JKQkJKz0gc2JuaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYV9jaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL3NkbGFfY2hkbGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk2ZDI5Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYV9jaGRsYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYV9jaGRsYy5jCVdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIExpbmsgRHJpdmVyLiBDaXNjbyBIRExDIG1vZHVsZS4KLSoKLSogQXV0aG9yczogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoJCUdpZGVvbiBIYWNrICAKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRmViIDI4LCAyMDAxICBOZW5hZCBDb3JiaWMJVXBkYXRlZCBpZl90eF90aW1lb3V0KCkgcm91dGluZSBmb3IgCi0qIAkJCQkyLjQuWCBrZXJuZWxzLgotKiBKYW4gMjUsIDIwMDEgIE5lbmFkIENvcmJpYwlBZGRlZCBhIFRUWSBTeW5jIHNlcmlhbCBkcml2ZXIgb3ZlciB0aGUKLSogCQkJCUhETEMgc3RyZWFtaW5nIHByb3RvY29sCi0qIAkJCQlBZGRlZCBhIFRUWSBBc3luYyBzZXJpYWwgZHJpdmVyIG92ZXIgdGhlCi0qIAkJCQlBc3luYyBwcm90b2NvbC4KLSogRGVjIDE1LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgVXBkYXRlZCBmb3IgMi40LlggS2VybmVsIHN1cHBvcnQKLSogTm92IDEzLCAyMDAwICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgdHJ1ZSBpbnRlcmZhY2UgdHlwZSBlbmNvZGluZyBvcHRpb24uCi0qIAkJCQlUY3BkdW1wIGRvZXNuJ3Qgc3VwcG9ydCBDSERMQyBpbnRlZmFjZQotKiAJCQkJdHlwZXMsIHRvIGZpeCB0aGlzICJ0cnVlIHR5cGUiIG9wdGlvbiB3aWxsIHNldAotKiAJCQkJdGhlIGludGVyZmFjZSB0eXBlIHRvIFJBVyBJUCBtb2RlLgotKiBOb3YgMDcsIDIwMDAgIE5lbmFkIENvcmJpYwlBZGRlZCBzZWN1cml0eSBmZWF0dXJlcyBmb3IgVURQIGRlYnVnZ2luZzoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVueSBhbGwgYW5kIHNwZWNpZnkgYWxsb3dlZCByZXF1ZXN0cy4KLSogSnVuIDIwLCAyMDAwICBOZW5hZCBDb3JiaWMJRml4ZWQgdGhlIEFQSSBJUCBFUlJPUiBidWcuIENhdXNlZCBieSB0aGUgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdCB1cGRhdGUuCi0qIE1heSAwOSwgMjAwMAlOZW5hZCBDb3JiaWMJT3B0aW9uIHRvIGJyaW5nIGRvd24gYW4gaW50ZXJmYWNlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwb24gZGlzY29ubmVjdC4KLSogTWFyIDIzLCAyMDAwICBOZW5hZCBDb3JiaWMJSW1wcm92ZWQgdGFzayBxdWV1ZSwgYmggaGFuZGxpbmcuCi0qIE1hciAxNiwgMjAwMAlOZW5hZCBDb3JiaWMJRml4ZWQgdGhlIFNMQVJQIER5bmFtaWMgSVAgYWRkcmVzc2luZy4KLSogTWFyIDA2LCAyMDAwICBOZW5hZCBDb3JiaWMJQnVnIEZpeDogY29ycnVwdGVkIG1ib3ggcmVjb3ZlcnkuCi0qIEZlYiAxMCwgMjAwMCAgR2lkZW9uIEhhY2sgICAgIEFkZGVkIEFTWU5DIHN1cHBvcnQuCi0qIEZlYiAwOSwgMjAwMCAgTmVuYWQgQ29yYmljICAgIEZpeGVkIHR3byBzaHV0ZG93biBidWdzIGluIHVwZGF0ZSgpIGFuZAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9zdGF0cygpIGZ1bmN0aW9ucy4KLSogSmFuIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgRml4ZWQgYSBzdGFydHVwIHdhbnBpcGUgc3RhdGUgcmFjaW5nLCAgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiBiZXR3ZWVuIGlmX29wZW4gYW5kIGlzci4gCi0qIEphbiAxMCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIG5ldyBzb2NrZXQgQVBJIHN1cHBvcnQuCi0qIERldiAxNSwgMTk5OSAgTmVuYWQgQ29yYmljICAgIEZpeGVkIHVwIGhlYWRlciBmaWxlcyBmb3IgMi4wLlgga2VybmVscwotKiBOb3YgMjAsIDE5OTkgIE5lbmFkIENvcmJpYyAJRml4ZWQgemVybyBsZW5ndGggQVBJIGJ1Zy4KLSogU2VwIDMwLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgRml4ZWQgZHluYW1pYyBJUCBhbmQgcm91dGUgc2V0dXAuCi0qIFNlcCAyMywgMTk5OSAgTmVuYWQgQ29yYmljICAgIEFkZGVkIFNNUCBzdXBwb3J0LCBmaXhlZCB0cmFjaW5nIAotKiBTZXAgMTMsIDE5OTkgIE5lbmFkIENvcmJpYwlTcGxpdCB1cCBQb3J0IDAgYW5kIDEgaW50byBzZXBhcmF0ZSBkZXZpY2VzLgotKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKiBPY3QgMzAsIDE5OTgJSmFzcHJlZXQgU2luZ2gJQWRkZWQgU3VwcG9ydCBmb3IgQ0hETEMgQVBJIChIRExDIFNUUkVBTUlORykuCi0qIE9jdCAyOCwgMTk5OAlKYXNwcmVldCBTaW5naAlBZGRlZCBTdXBwb3J0IGZvciBEdWFsIFBvcnQgQ0hETEMuCi0qIEF1ZyAwNywgMTk5OAlEYXZpZCBGb25nCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnBpcGUuaD4JLyogV0FOUElQRSBjb21tb24gdXNlciBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEXyogZGVmaW5lcyAqLwotCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4JCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2NoZGxjLmg+CQkvKiBDSERMQyBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2FzeS5oPiAgICAgICAgICAgCS8qIENIRExDIChhc3luYykgQVBJIGRlZmluaXRpb25zICovCi0KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlX2NvbW1vbi5oPiAgICAvKiBTb2NrZXQgRHJpdmVyIGNvbW1vbiBhcmVhICovCi0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZS5oPgkJCi0KLS8qIFRUWSBJbmNsdWRlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0KLQotLyoqKioqKiBEZWZpbmVzICYgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHJlYXNvbnMgZm9yIGVuYWJsaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgb24gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VEUCAgIAkJMHgwMQotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFCQkweDAyCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9DT05GSUcJCTB4MTAKLQotI2RlZmluZSBNQVhfSVBfRVJST1JTCTEwCi0KLSNkZWZpbmUgVFRZX0NIRExDX01BWF9NVFUJMjAwMAotI2RlZmluZQlDSERMQ19ERkxUX0RBVEFfTEVOCTE1MDAJCS8qIGRlZmF1bHQgTVRVICovCi0jZGVmaW5lIENIRExDX0hEUl9MRU4JCTEKLQotI2RlZmluZSBDSERMQ19BUEkgMHgwMQotCi0jZGVmaW5lIFBPUlQoeCkgICAoeCA9PSAwID8gIlBSSU1BUlkiIDogIlNFQ09OREFSWSIgKQotI2RlZmluZSBNQVhfQkhfQlVGRgkxMAotCi0vLyNkZWZpbmUgUFJJTlRfREVCVUcKLSNpZmRlZiBQUklOVF9ERUJVRwotI2RlZmluZSBkYmdfcHJpbnRrKGZvcm1hdCwgYS4uLikgcHJpbnRrKGZvcm1hdCwgIyMgYSkKLSNlbHNlCi0jZGVmaW5lIGRiZ19wcmludGsoZm9ybWF0LCBhLi4uKQotI2VuZGlmICAKLQotLyoqKioqKkRhdGEgU3RydWN0dXJlcyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyBwbGFjZWQgaW4gdGhlIHByaXZhdGUgZGF0YSBhcmVhIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgotICogVGhlIGNhcmQgc3RydWN0dXJlIHVzZWQgdG8gb2NjdXB5IHRoZSBwcml2YXRlIGFyZWEgYnV0IG5vdyB0aGUgZm9sbG93aW5nIAotICogc3RydWN0dXJlIHdpbGwgaW5jb3Jwb3JhdGUgdGhlIGNhcmQgc3RydWN0dXJlIGFsb25nIHdpdGggQ0hETEMgc3BlY2lmaWMgZGF0YQotICovCi0KLXR5cGVkZWYgc3RydWN0IGNoZGxjX3ByaXZhdGVfYXJlYQotewotCXdhbnBpcGVfY29tbW9uX3QgY29tbW9uOwotCXNkbGFfdAkJKmNhcmQ7Ci0JaW50IAkJVHJhY2luZ0VuYWJsZWQ7CQkvKiBGb3IgZW5hYmxpbmcgVHJhY2luZyAqLwotCXVuc2lnbmVkIGxvbmcgCWN1cnJfdHJhY2VfYWRkcjsJLyogVXNlZCBmb3IgVHJhY2luZyAqLwotCXVuc2lnbmVkIGxvbmcgCXN0YXJ0X3RyYWNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyAJZW5kX3RyYWNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyAJYmFzZV9hZGRyX3RyYWNlX2J1ZmZlcjsKLQl1bnNpZ25lZCBsb25nIAllbmRfYWRkcl90cmFjZV9idWZmZXI7Ci0JdW5zaWduZWQgc2hvcnQgCW51bWJlcl90cmFjZV9lbGVtZW50czsKLQl1bnNpZ25lZCAgCWF2YWlsYWJsZV9idWZmZXJfc3BhY2U7Ci0JdW5zaWduZWQgbG9uZyAJcm91dGVyX3N0YXJ0X3RpbWU7Ci0JdW5zaWduZWQgY2hhciAJcm91dGVfc3RhdHVzOwotCXVuc2lnbmVkIGNoYXIgCXJvdXRlX3JlbW92ZWQ7Ci0JdW5zaWduZWQgbG9uZyAJdGlja19jb3VudGVyOwkJLyogRm9yIDVzIHRpbWVvdXQgY291bnRlciAqLwotCXVuc2lnbmVkIGxvbmcgCXJvdXRlcl91cF90aW1lOwotICAgICAgICB1MzIgICAgICAgICAgICAgSVBfYWRkcmVzczsJCS8qIElQIGFkZHJlc3NpbmcgKi8KLSAgICAgICAgdTMyICAgICAgICAgICAgIElQX25ldG1hc2s7Ci0JdTMyCQlpcF9sb2NhbDsKLQl1MzIJCWlwX3JlbW90ZTsKLQl1MzIgCQlpcF9sb2NhbF90bXA7Ci0JdTMyCQlpcF9yZW1vdGVfdG1wOwotCXU4CQlpcF9lcnJvcjsKLQl1OAkJY29uZmlnX2NoZGxjOwotCXU4IAkJY29uZmlnX2NoZGxjX3RpbWVvdXQ7Ci0JdW5zaWduZWQgY2hhciAgbWM7CQkJLyogTXVsaXRjYXN0IHN1cHBvcnQgb24vb2ZmICovCi0JdW5zaWduZWQgc2hvcnQgdWRwX3BrdF9sZ3RoOwkJLyogdWRwIHBhY2tldCBwcm9jZXNzaW5nICovCi0JY2hhciB1ZHBfcGt0X3NyYzsKLQljaGFyIHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotCXVuc2lnbmVkIHNob3J0IHRpbWVyX2ludF9lbmFibGVkOwotCWNoYXIgdXBkYXRlX2NvbW1zX3N0YXRzOwkJLyogdXBkYXRpbmcgY29tbXMgc3RhdHMgKi8KLQotCWJoX2RhdGFfdCAqYmhfaGVhZDsJICAJICAvKiBDaXJjdWxhciBidWZmZXIgZm9yIGNoZGxjX2JoICovCi0JdW5zaWduZWQgbG9uZyAgdHFfd29ya2luZzsKLQl2b2xhdGlsZSBpbnQgIGJoX3dyaXRlOwotCXZvbGF0aWxlIGludCAgYmhfcmVhZDsKLQlhdG9taWNfdCAgYmhfYnVmZl91c2VkOwotCQotCXVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlX2Rvd247Ci0KLQkvKiBQb2xsaW5nIHdvcmsgcXVldWUgZW50cnkuIEVhY2ggaW50ZXJmYWNlCi0gICAgICAgICAqIGhhcyBpdHMgb3duIHdvcmsgcXVldWUgZW50cnksIHdoaWNoIGlzIHVzZWQKLSAgICAgICAgICogdG8gZGVmZXIgZXZlbnRzIGZyb20gdGhlIGludGVycnVwdCAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBwb2xsX3dvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgcG9sbF9kZWxheV90aW1lcjsKLQotCXU4IGdhdGV3YXk7Ci0JdTggdHJ1ZV9pZl9lbmNvZGluZzsKLQkvL0ZJWE1FOiBhZGQgZHJpdmVyIHN0YXRzIGFzIHBlciBmcmFtZSByZWxheSEKLQotfSBjaGRsY19wcml2YXRlX2FyZWFfdDsKLQotLyogUm91dGUgU3RhdHVzIG9wdGlvbnMgKi8KLSNkZWZpbmUgTk9fUk9VVEUJMHgwMAotI2RlZmluZSBBRERfUk9VVEUJMHgwMQotI2RlZmluZSBST1VURV9BRERFRAkweDAyCi0jZGVmaW5lIFJFTU9WRV9ST1VURQkweDAzCi0KLQotLyogdmFyaWFibGUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIEZUMSBtb25pdG9yIHN0YXR1cyAqLwotc3RhdGljIGludCByQ291bnQgPSAwOwotCi0vKiB2YXJpYWJsZSBmb3IgdHJhY2tpbmcgaG93IG1hbnkgaW50ZXJmYWNlcyB0byBvcGVuIGZvciBXQU5QSVBFIG9uIHRoZQotICAgdHdvIHBvcnRzICovCi0KLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlIGNhbGxlZCBieSB0aGUgV0FOIHJvdXRlciBtb2R1bGUuICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KTsKLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKTsKLQotLyogTmV0d29yayBkZXZpY2UgaW50ZXJmYWNlICovCi1zdGF0aWMgaW50IGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIGludCBpZl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLCB2b2lkKiBkYWRkciwgdm9pZCogc2FkZHIsCi0JCSAgICAgdW5zaWduZWQgbGVuKTsKLQotc3RhdGljIGludCBpZl9yZWJ1aWxkX2hkciAoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIGlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotICAKLXN0YXRpYyBpbnQgaWZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLQotLyogQ0hETEMgRmlybXdhcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBjaGRsY19jb25maWd1cmUgCShzZGxhX3QqIGNhcmQsIHZvaWQqIGRhdGEpOwotc3RhdGljIGludCBjaGRsY19jb21tX2VuYWJsZSAJKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IGNoZGxjX3JlYWRfdmVyc2lvbiAJKHNkbGFfdCogY2FyZCwgY2hhciogc3RyKTsKLXN0YXRpYyBpbnQgY2hkbGNfc2V0X2ludHJfbW9kZSAJKHNkbGFfdCogY2FyZCwgdW5zaWduZWQgbW9kZSk7Ci1zdGF0aWMgaW50IGNoZGxjX3NlbmQgKHNkbGFfdCogY2FyZCwgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF9jb21tX2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF9vcF9zdGF0cyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfZXJyb3IgKHNkbGFfdCAqY2FyZCwgaW50IGVyciwgQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1iKTsKLQotCi1zdGF0aWMgaW50IGNoZGxjX2Rpc2FibGVfY29tbV9zaHV0ZG93biAoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgQ0hETEMgRnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNldF9jaGRsY19jb25maWcgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCBpbml0X2NoZGxjX3R4X3J4X2J1ZmYoIHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHByb2Nlc3NfY2hkbGNfZXhjZXB0aW9uKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCB1cGRhdGVfY29tbXNfc3RhdHMoc2RsYV90KiBjYXJkLAotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKTsKLXN0YXRpYyBpbnQgY29uZmlndXJlX2lwIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB1bmNvbmZpZ3VyZV9pcCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHByb2Nlc3Nfcm91dGUoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIHBvcnRfc2V0X3N0YXRlIChzZGxhX3QgKmNhcmQsIGludCk7Ci1zdGF0aWMgaW50IGNvbmZpZ19jaGRsYyAoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90ICpjYXJkKTsKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9jaGRsY19wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgY2hkbGNfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGNoZGxjX3BvbGxfZGVsYXkgKHVuc2lnbmVkIGxvbmcgZGV2X3B0cik7Ci0KLQotLyogTWlzY2VsbGFuZW91cyBhc3luY2hyb25vdXMgaW50ZXJmYWNlIEZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBzZXRfYXN5X2NvbmZpZyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgYXN5X2NvbW1fZW5hYmxlIChzZGxhX3QqIGNhcmQpOwotCi0vKiBJbnRlcnJ1cHQgaGFuZGxlcnMgKi8KLXN0YXRpYyB2b2lkIHdwY19pc3IgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgdGltZXJfaW50cihzZGxhX3QgKik7Ci0KLS8qIEJvdHRvbSBoYWxmIGhhbmRsZXJzICovCi1zdGF0aWMgdm9pZCBjaGRsY193b3JrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBjaGRsY193b3JrX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGJoX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IGNoa19iY2FzdF9tY2FzdF9hZGRyKHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKTsKLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IgLCBzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKTsKLXN0YXRpYyBpbnQgcHJvY2Vzc191ZHBfbWdtdF9wa3Qoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCAgCi0JCQkJY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSk7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqLCBpbnQpOwotc3RhdGljIHZvaWQgczUwOF9sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCBzNTA4X3VubG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotCi0KLXN0YXRpYyBpbnQgIEludHJfdGVzdF9jb3VudGVyOwotCi0vKiBUVFkgR2xvYmFsIERlZmluaXRpb25zICovCi0KLSNkZWZpbmUgTlJfUE9SVFMgNAotI2RlZmluZSBXQU5fVFRZX01BSk9SIDIyNgotI2RlZmluZSBXQU5fVFRZX01JTk9SIDAKLQotI2RlZmluZSBXQU5fQ0FSRChwb3J0KSAodHR5X2NhcmRfbWFwW3BvcnRdKQotI2RlZmluZSBNSU5fUE9SVCAwCi0jZGVmaW5lIE1BWF9QT1JUIE5SX1BPUlRTLTEgCi0KLSNkZWZpbmUgQ1JDX0xFTkdUSCAyCi0KLXN0YXRpYyBpbnQgd2FucGlwZV90dHlfaW5pdChzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfcmVjZWl2ZShzZGxhX3QgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV90cmlnZ2VyX3BvbGwoc2RsYV90ICpjYXJkKTsKLQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyIHNlcmlhbF9kcml2ZXI7Ci1zdGF0aWMgaW50IHR0eV9pbml0X2NudD0wOwotCi1zdGF0aWMgc3RydWN0IHNlcmlhbF9zdGF0ZSByc190YWJsZVtOUl9QT1JUU107Ci0KLXN0YXRpYyBjaGFyIHR0eV9kcml2ZXJfbW9kZT1XQU5PUFRfVFRZX1NZTkM7Ci0KLXN0YXRpYyBjaGFyICpvcHRfZGVjb2RlW10gPSB7Ik5PTkUiLCJDUlRTQ1RTIiwiWE9OWE9GRi1SWCIsCi0JICAJICAgICAgICAgICAgICJDUlRTQ1RTIFhPTlhPRkYtUlgiLCJYT05YT0ZGLVRYIiwKLQkJICAgICAgICAgICAgICJDUlRTQ1RTIFhPTlhPRkYtVFgiLCJDUlRTQ1RTIFhPTlhPRkYifTsKLXN0YXRpYyBjaGFyICpwX2RlY29kZVtdID0geyJOT05FIiwiT0REIiwiRVZFTiJ9OwotCi1zdGF0aWMgdm9pZCogdHR5X2NhcmRfbWFwW05SX1BPUlRTXSA9IHtOVUxMLE5VTEwsTlVMTCxOVUxMfTsKLQotCi0vKioqKioqIFB1YmxpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBXQU5QSVBFIG1vZHVsZSBkdXJpbmcgc2V0dXAuICBBdCB0aGlzCi0gKiBwb2ludCBhZGFwdGVyIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYW5kIGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgbyByZWFkIGZpcm13YXJlIHZlcnNpb24gKHRvIG1ha2Ugc3VyZSBpdCdzIGFsaXZlKQotICogIG8gY29uZmlndXJlIGFkYXB0ZXIKLSAqICBvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSBhZGFwdGVyIGRhdGEgc3BhY2UuCi0gKgotICogUmV0dXJuOgkwCW8uay4KLSAqCQk8IDAJZmFpbHVyZS4KLSAqLwotaW50IHdwY19pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpCi17Ci0JdW5zaWduZWQgY2hhciBwb3J0X251bTsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgbWF4X3Blcm1pdHRlZF9iYXVkID0gMDsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFnczsKLQotCXVuaW9uCi0JCXsKLQkJY2hhciBzdHJbODBdOwotCQl9IHU7Ci0Jdm9sYXRpbGUgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYjE7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gSUQgKi8KLQlpZiAoY29uZi0+Y29uZmlnX2lkICE9IFdBTkNPTkZJR19DSERMQykgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBjb25maWd1cmF0aW9uIElEICV1IVxuIiwKLQkJCQkgIGNhcmQtPmRldm5hbWUsIGNvbmYtPmNvbmZpZ19pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEZpbmQgb3V0IHdoaWNoIFBvcnQgdG8gdXNlICovCi0JaWYgKChjb25mLT5jb21tX3BvcnQgPT0gV0FOT1BUX1BSSSkgfHwgKGNvbmYtPmNvbW1fcG9ydCA9PSBXQU5PUFRfU0VDKSl7Ci0JCWlmIChjYXJkLT5uZXh0KXsKLQotCQkJaWYgKGNvbmYtPmNvbW1fcG9ydCAhPSBjYXJkLT5uZXh0LT51LmMuY29tbV9wb3J0KXsKLQkJCQljYXJkLT51LmMuY29tbV9wb3J0ID0gY29uZi0+Y29tbV9wb3J0OwotCQkJfWVsc2V7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SIC0gJXMgcG9ydCB1c2VkIVxuIiwKLSAgICAgICAgCQkgICAgICAgIAljYXJkLT53YW5kZXYubmFtZSwgUE9SVChjb25mLT5jb21tX3BvcnQpKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfWVsc2V7Ci0JCQljYXJkLT51LmMuY29tbV9wb3J0ID0gY29uZi0+Y29tbV9wb3J0OwotCQl9Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiAtIEludmFsaWQgUG9ydCBTZWxlY3RlZCFcbiIsCi0gICAgICAgICAgICAgICAgCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCi0KLQkvKiBJbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyAqLwotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQotCQlpZiAoY2FyZC0+dS5jLmNvbW1fcG9ydCA9PSBXQU5PUFRfUFJJKXsJCi0JCQljYXJkLT5tYm94ICA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2U7Ci0JCX1lbHNlewotCQkJY2FyZC0+bWJveCAgPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlICsgCi0JCQkJU0VDX0JBU0VfQUREUl9NQl9TVFJVQ1QgLSBQUklfQkFTRV9BRERSX01CX1NUUlVDVDsKLQkJfQkKLQl9ZWxzZXsgCi0JCS8qIGZvciBhIFM1MTQgYWRhcHRlciwgc2V0IGEgcG9pbnRlciB0byB0aGUgYWN0dWFsIG1haWxib3ggaW4gdGhlICovCi0JCS8qIGFsbG9jYXRlZCB2aXJ0dWFsIG1lbW9yeSBhcmVhICovCi0JCWlmIChjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9QUkkpewotCQkJY2FyZC0+bWJveCA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2UgKyBQUklfQkFTRV9BRERSX01CX1NUUlVDVDsKLQkJfWVsc2V7Ci0JCQljYXJkLT5tYm94ID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZSArIFNFQ19CQVNFX0FERFJfTUJfU1RSVUNUOwotCQl9CQotCX0KLQotCW1iID0gbWIxID0gY2FyZC0+bWJveDsKLQotCWlmICghY2FyZC0+Y29uZmlndXJlZCl7Ci0KLQkJLyogVGhlIGJvYXJkIHdpbGwgcGxhY2UgYW4gJ0knIGluIHRoZSByZXR1cm4gY29kZSB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzCi0JICAgCXJlYWR5IHRvIGFjY2VwdCBjb21tYW5kcy4gIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGNvbXBsZXRlZCBpbiBsZXNzCi0gICAgICAgICAgIAl0aGFuIDEgc2Vjb25kLiAqLwotCi0JCXRpbWVvdXQgPSBqaWZmaWVzOwotCQl3aGlsZSAobWItPnJldHVybl9jb2RlICE9ICdJJykJLyogV2FpdCAxcyBmb3IgYm9hcmQgdG8gaW5pdGlhbGl6ZSAqLwotCQkJaWYgKChqaWZmaWVzIC0gdGltZW91dCkgPiAxKkhaKSBicmVhazsKLQotCQlpZiAobWItPnJldHVybl9jb2RlICE9ICdJJykgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogSW5pdGlhbGl6YXRpb24gbm90IGNvbXBsZXRlZCBieSBhZGFwdGVyXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSByZXByZXNlbnRhdGl2ZS5cbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQkvKiBSZWFkIGZpcm13YXJlIHZlcnNpb24uICBOb3RlIHRoYXQgd2hlbiBhZGFwdGVyIGluaXRpYWxpemVzLCBpdAotCSAqIGNsZWFycyB0aGUgbWFpbGJveCwgc28gaXQgbWF5IGFwcGVhciB0aGF0IHRoZSBmaXJzdCBjb21tYW5kIHdhcwotCSAqIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSB3aGVuIGluIGZhY3QgaXQgd2FzIG1lcmVseSBlcmFzZWQuIFRvIHdvcmsKLQkgKiBhcm91bmQgdGhpcywgd2UgZXhlY3V0ZSB0aGUgZmlyc3QgY29tbWFuZCB0d2ljZS4KLQkgKi8KLQotCWlmIChjaGRsY19yZWFkX3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIENpc2NvIEhETEMgZmlybXdhcmUgdiVzXG4iLAotCQljYXJkLT5kZXZuYW1lLCB1LnN0cik7IAotCi0JY2FyZC0+aXNyCQkJPSAmd3BjX2lzcjsKLQljYXJkLT5wb2xsCQkJPSBOVUxMOwotCWNhcmQtPmV4ZWMJCQk9IE5VTEw7Ci0JY2FyZC0+d2FuZGV2LnVwZGF0ZQkJPSAmdXBkYXRlOwotIAljYXJkLT53YW5kZXYubmV3X2lmCQk9ICZuZXdfaWY7Ci0JY2FyZC0+d2FuZGV2LmRlbF9pZgkJPSBOVUxMOwotCWNhcmQtPndhbmRldi51ZHBfcG9ydCAgIAk9IGNvbmYtPnVkcF9wb3J0OwotCWNhcmQtPmRpc2FibGVfY29tbQkJPSAmZGlzYWJsZV9jb21tOwotCWNhcmQtPndhbmRldi5uZXdfaWZfY250ID0gMDsKLQotCS8qIHJlc2V0IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlICd1cGRhdGUoKScgcHJvYyBoYXMgYmVlbiBjYWxsZWQgKi8KLQljYXJkLT51LmMudXBkYXRlX2NhbGxfY291bnQgPSAwOwotCQotCWNhcmQtPndhbmRldi50dGwgPSBjb25mLT50dGw7Ci0JY2FyZC0+d2FuZGV2LmludGVyZmFjZSA9IGNvbmYtPmludGVyZmFjZTsgCi0KLQlpZiAoKGNhcmQtPnUuYy5jb21tX3BvcnQgPT0gV0FOT1BUX1NFQyAmJiBjb25mLT5pbnRlcmZhY2UgPT0gV0FOT1BUX1YzNSkmJgotCSAgICBjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiAtIFYzNSBJbnRlcmZhY2Ugbm90IHN1cHBvcnRlZCBvbiBTNTA4ICVzIHBvcnQgXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgUE9SVChjYXJkLT51LmMuY29tbV9wb3J0KSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWNhcmQtPndhbmRldi5jbG9ja2luZyA9IGNvbmYtPmNsb2NraW5nOwotCi0JcG9ydF9udW0gPSBjYXJkLT51LmMuY29tbV9wb3J0OwotCi0JLyogaW4gQVBJIG1vZGUsIHdlIGNhbiBjb25maWd1cmUgZm9yICJyZWNlaXZlIG9ubHkiIGJ1ZmZlcmluZyAqLwotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCWNhcmQtPnUuYy5yZWNlaXZlX29ubHkgPSBjb25mLT5yZWNlaXZlX29ubHk7Ci0JCWlmKGNvbmYtPnJlY2VpdmVfb25seSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogQ29uZmlndXJlZCBmb3IgJ3JlY2VpdmUgb25seScgbW9kZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQl9Ci0KLQkvKiBTZXR1cCBQb3J0IEJwcyAqLwotCi0JaWYoY2FyZC0+d2FuZGV2LmNsb2NraW5nKSB7Ci0JCWlmKChwb3J0X251bSA9PSBXQU5PUFRfUFJJKSB8fCBjYXJkLT51LmMucmVjZWl2ZV9vbmx5KSB7Ci0JCQkvKiBGb3IgUHJpbWFyeSBQb3J0IDAgKi8KLSAgICAgICAgICAgICAgIAkJbWF4X3Blcm1pdHRlZF9iYXVkID0KLQkJCQkoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8KLQkJCQlQUklfTUFYX0JBVURfUkFURV9TNTE0IDogCi0JCQkJUFJJX01BWF9CQVVEX1JBVEVfUzUwODsKLQotCQl9ZWxzZSBpZihwb3J0X251bSA9PSBXQU5PUFRfU0VDKSB7Ci0JCQkvKiBGb3IgU2Vjb25kYXJ5IFBvcnQgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3Blcm1pdHRlZF9iYXVkID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDX01BWF9CQVVEX1JBVEVfUzUxNCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ19NQVhfQkFVRF9SQVRFX1M1MDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gIAotCQkJaWYoY29uZi0+YnBzID4gbWF4X3Blcm1pdHRlZF9iYXVkKSB7Ci0JCQkJY29uZi0+YnBzID0gbWF4X3Blcm1pdHRlZF9iYXVkOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCYXVkIHRvbyBoaWdoIVxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotIAkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQmF1ZCByYXRlIHNldCB0byAlbHUgYnBzXG4iLCAKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUsIG1heF9wZXJtaXR0ZWRfYmF1ZCk7Ci0JCQl9Ci0JCQljYXJkLT53YW5kZXYuYnBzID0gY29uZi0+YnBzOwotCX1lbHNlewotICAgICAgICAJY2FyZC0+d2FuZGV2LmJwcyA9IDA7Ci0gIAl9Ci0KLQkvKiBTZXR1cCB0aGUgUG9ydCBNVFUgKi8KLQlpZigocG9ydF9udW0gPT0gV0FOT1BUX1BSSSkgfHwgY2FyZC0+dS5jLnJlY2VpdmVfb25seSkgewotCi0JCS8qIEZvciBQcmltYXJ5IFBvcnQgMCAqLwotCQljYXJkLT53YW5kZXYubXR1ID0KLQkJCShjb25mLT5tdHUgPj0gTUlOX0xHVEhfQ0hETENfREFUQV9DRkcpID8KLQkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+bXR1LCBQUklfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUUpIDoKLQkJCUNIRExDX0RGTFRfREFUQV9MRU47Ci0JfSBlbHNlIGlmKHBvcnRfbnVtID09IFdBTk9QVF9TRUMpIHsgCi0JCS8qIEZvciBTZWNvbmRhcnkgUG9ydCAxICovCi0JCWNhcmQtPndhbmRldi5tdHUgPQotCQkJKGNvbmYtPm10dSA+PSBNSU5fTEdUSF9DSERMQ19EQVRBX0NGRykgPwotCQkJbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5tdHUsIFNFQ19NQVhfTk9fREFUQV9CWVRFU19JTl9GUkFNRSkgOgotCQkJQ0hETENfREZMVF9EQVRBX0xFTjsKLQl9Ci0KLQkvKiBTZXQgdXAgdGhlIGludGVycnVwdCBzdGF0dXMgYXJlYSAqLwotCS8qIFJlYWQgdGhlIENIRExDIENvbmZpZ3VyYXRpb24gYW5kIG9idGFpbjogCi0JICoJUHRyIHRvIHNoYXJlZCBtZW1vcnkgaW5mb3Igc3RydWN0Ci0gICAgICAgICAqIFVzZSB0aGlzIHBvaW50ZXIgdG8gY2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiBjYXJkLT51LmMuZmxhZ3MgIQotIAkgKi8KLQltYjEtPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iMS0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIxKSA/IG1iMS0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotICAgICAgICAgICAgICAgIGlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotICAgICAgICAgICAgICAgIAllbmFibGVfaXJxKGNhcmQtPmh3LmlycSk7Ci0KLQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYjEpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCl7Ci0gICAgICAgICAgICAgICAJY2FyZC0+dS5jLmZsYWdzID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAJCSgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWIxLT5kYXRhKS0+Ci0JCQlwdHJfc2hhcmVkX21lbV9pbmZvX3N0cnVjdCkpOwotICAgICAgICB9ZWxzZXsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMuZmxhZ3MgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWIxLT5kYXRhKS0+Ci0JCQlwdHJfc2hhcmVkX21lbV9pbmZvX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCX0KLQotCWZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCQotCS8qIFRoaXMgaXMgZm9yIHRoZSBwb3J0cyBsaW5rIHN0YXRlICovCi0JY2FyZC0+d2FuZGV2LnN0YXRlID0gV0FOX0RVQUxQT1JUOwotCWNhcmQtPnUuYy5zdGF0ZSA9IFdBTl9ESVNDT05ORUNURUQ7Ci0KLQotCWlmICghY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayl7CQotCQlpbnQgZXJyOwotCi0JCS8qIFBlcmZvcm0gaW50ZXJydXB0IHRlc3RpbmcgKi8KLQkJZXJyID0gaW50cl90ZXN0KGNhcmQpOwotCi0JCWlmKGVyciB8fCAoSW50cl90ZXN0X2NvdW50ZXIgPCBNQVhfSU5UUl9URVNUX0NPVU5URVIpKSB7IAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVycnVwdCB0ZXN0IGZhaWxlZCAoJWkpXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBJbnRyX3Rlc3RfY291bnRlcik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUGxlYXNlIGNob29zZSBhbm90aGVyIGludGVycnVwdFxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVycnVwdCB0ZXN0IHBhc3NlZCAoJWkpXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLCBJbnRyX3Rlc3RfY291bnRlcik7Ci0JCWNhcmQtPmNvbmZpZ3VyZWQgPSAxOwotCX0KLQotCWlmICgoY2FyZC0+dHR5X29wdD1jb25mLT50dHkpID09IFdBTk9QVF9ZRVMpewotCQlpbnQgZXJyOwotCQljYXJkLT50dHlfbWlub3IgPSBjb25mLT50dHlfbWlub3I7Ci0KLQkJLyogT24gQVNZTkMgY29ubmVjdGlvbnMgaW50ZXJuYWwgY2xvY2tpbmcgCi0JCSAqIGlzIG1hbmRhdG9yeSAqLwotCQlpZiAoKGNhcmQtPnUuYy5hc3luY19tb2RlID0gY29uZi0+dHR5X21vZGUpKXsKLQkJCWNhcmQtPndhbmRldi5jbG9ja2luZyA9IDE7Ci0JCX0KLQkJZXJyPXdhbnBpcGVfdHR5X2luaXQoY2FyZCk7Ci0JCWlmIChlcnIpewotCQkJcmV0dXJuIGVycjsKLQkJfQotCX1lbHNlewotCQotCi0JCWlmIChjaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsIEFQUF9JTlRfT05fVElNRVIpKXsKLQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogIgotCQkJCSJGYWlsZWQgdG8gc2V0IGludGVycnVwdCB0cmlnZ2VycyFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTzsJCi0gICAgICAgIAl9Ci0JCi0JCS8qIE1hc2sgdGhlIFRpbWVyIGludGVycnVwdCAqLwotCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uICY9IAotCQkJfkFQUF9JTlRfT05fVElNRVI7Ci0JfQotCi0JLyogSWYgd2UgYXJlIHVzaW5nIENIRExDIGluIGJhY2t1cCBtb2RlLCB0aGlzIGZsYWcgd2lsbAotCSAqIGluZGljYXRlIG5vdCB0byBsb29rIGZvciBJUCBhZGRyZXNzZXMgaW4gY29uZmlnX2NoZGxjKCkqLwotCWNhcmQtPnUuYy5iYWNrdXAgPSBjb25mLT5iYWNrdXA7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKiBXQU4gRGV2aWNlIERyaXZlciBFbnRyeSBQb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgZGV2aWNlIHN0YXR1cyAmIHN0YXRpc3RpY3MKLSAqIFRoaXMgcHJvY2VkdXJlIGlzIGNhbGxlZCB3aGVuIHVwZGF0aW5nIHRoZSBQUk9DIGZpbGUgc3lzdGVtIGFuZCByZXR1cm5zCi0gKiB2YXJpb3VzIGNvbW11bmljYXRpb25zIHN0YXRpc3RpY3MuIFRoZXNlIHN0YXRpc3RpY3MgYXJlIGFjY3VtdWxhdGVkIGZyb20gMyAKLSAqIGRpZmZlcmVudCBsb2NhdGlvbnM6Ci0gKiAJMSkgVGhlICdpZl9zdGF0cycgcmVjb3JkZWQgZm9yIHRoZSBkZXZpY2UuCi0gKiAJMikgQ29tbXVuaWNhdGlvbiBlcnJvciBzdGF0aXN0aWNzIG9uIHRoZSBhZGFwdGVyLgotICogICAgICAzKSBDSERMQyBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIG9uIHRoZSBhZGFwdGVyLgotICogVGhlIGJvYXJkIGxldmVsIHN0YXRpc3RpY3MgYXJlIHJlYWQgZHVyaW5nIGEgdGltZXIgaW50ZXJydXB0LiBOb3RlIHRoYXQgd2UgCi0gKiByZWFkIHRoZSBlcnJvciBhbmQgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyBkdXJpbmcgY29uc2VjaXRpdmUgdGltZXIgdGlja3Mgc28KLSAqIGFzIHRvIG1pbmltaXplIHRoZSB0aW1lIHRoYXQgd2UgYXJlIGluc2lkZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCi0gKgotICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLSAJc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLSAgICAgICAgdm9sYXRpbGUgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYTsKLSAgICAgICAgU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JLyogc2FuaXR5IGNoZWNrcyAqLwotCWlmKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCi0JaWYod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIG1vcmUgc2FuaXR5IGNoZWNrcyAqLwotICAgICAgICBpZighY2FyZC0+dS5jLmZsYWdzKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotCi0JaWYodGVzdF9iaXQoUEVSSV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FQUdBSU47Ci0KLQlpZigoZGV2PWNhcmQtPndhbmRldi5kZXYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYoKGNoZGxjX3ByaXZfYXJlYT1kZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0gICAgICAJZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0gICAgICAgCWlmKGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzKXsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCQkJCi0JLyogd2Ugd2lsbCBuZWVkIDIgdGltZXIgaW50ZXJydXB0cyB0byBjb21wbGV0ZSB0aGUgKi8KLQkvKiByZWFkaW5nIG9mIHRoZSBzdGF0aXN0aWNzICovCi0JY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPSAyOwotICAgICAgIAlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uIHw9IEFQUF9JTlRfT05fVElNRVI7Ci0JY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCA9IFRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0gIAotCS8qIHdhaXQgYSBtYXhpbXVtIG9mIDEgc2Vjb25kIGZvciB0aGUgc3RhdGlzdGljcyB0byBiZSB1cGRhdGVkICovIAotICAgICAgICB0aW1lb3V0ID0gamlmZmllczsKLSAgICAgICAgZm9yKDs7KSB7Ci0JCWlmKGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID09IDApCi0JCQlicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoKGppZmZpZXMgLSB0aW1lb3V0KSA+ICgxICogSFopKXsKLSAgICAJCQljaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDA7Ci0gCQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPQotCQkJCX5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOyAKLSAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotICAgICAgICB9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCi0gKiBoYW5kbGVkLgotICogbyBwYXJzZSBtZWRpYS0gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIHRoYXQgYSBuZXcgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZAotICogbyBhbGxvY2F0ZSByZXNvdXJjZXMsIGlmIG5lY2Vzc2FyeQotICogbyBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0YXJhdGlvbi4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhOwotCi0KLQlwcmludGsoS0VSTl9JTkZPICIlczogQ29uZmlndXJpbmcgSW50ZXJmYWNlOiAlc1xuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNvbmYtPm5hbWUpOwotIAotCWlmICgoY29uZi0+bmFtZVswXSA9PSAnXDAnKSB8fCAoc3RybGVuKGNvbmYtPm5hbWUpID4gV0FOX0lGTkFNRV9TWikpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgaW50ZXJmYWNlIG5hbWUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkJCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCi0JY2hkbGNfcHJpdl9hcmVhID0ga21hbGxvYyhzaXplb2YoY2hkbGNfcHJpdmF0ZV9hcmVhX3QpLCBHRlBfS0VSTkVMKTsKLQkKLQlpZihjaGRsY19wcml2X2FyZWEgPT0gTlVMTCkgCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtc2V0KGNoZGxjX3ByaXZfYXJlYSwgMCwgc2l6ZW9mKGNoZGxjX3ByaXZhdGVfYXJlYV90KSk7Ci0KLQljaGRsY19wcml2X2FyZWEtPmNhcmQgPSBjYXJkOyAKLQljaGRsY19wcml2X2FyZWEtPmNvbW1vbi5zayA9IE5VTEw7Ci0JY2hkbGNfcHJpdl9hcmVhLT5jb21tb24uZnVuYyA9IE5VTEw7CQotCi0JLyogaW5pdGlhbGl6ZSBkYXRhICovCi0Jc3RyY3B5KGNhcmQtPnUuYy5pZl9uYW1lLCBjb25mLT5uYW1lKTsKLQotCWlmKGNhcmQtPndhbmRldi5uZXdfaWZfY250ID4gMCkgewotICAgICAgICAgICAgICAgIGtmcmVlKGNoZGxjX3ByaXZfYXJlYSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQotCWNhcmQtPndhbmRldi5uZXdfaWZfY250Kys7Ci0KLQljaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkID0gMDsKLQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IE5PX1JPVVRFOwotCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfcmVtb3ZlZCA9IDA7Ci0KLQljYXJkLT51LmMuYXN5bmNfbW9kZSA9IGNvbmYtPmFzeW5jX21vZGU7Ci0JCi0JLyogc2V0dXAgZm9yIGFzeW5jaHJvbm91cyBtb2RlICovCi0JaWYoY29uZi0+YXN5bmNfbW9kZSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29uZmlndXJpbmcgZm9yIGFzeW5jaHJvbm91cyBtb2RlXG4iLAotCQkJd2FuZGV2LT5uYW1lKTsKLQotCQlpZihjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9QUkkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6QXN5bmNocm9ub3VzIG1vZGUgb24gc2Vjb25kYXJ5IHBvcnQgb25seVxuIiwKLQkJCQkJd2FuZGV2LT5uYW1lKTsKLQkJCWtmcmVlKGNoZGxjX3ByaXZfYXJlYSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JICAgICAgIAlpZihzdHJjbXAoY29uZi0+dXNlZGJ5LCAiV0FOUElQRSIpID09IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBSdW5uaW5nIGluIFdBTklQRSBBc3luYyBNb2RlXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQl3YW5kZXYtPm5hbWUpOwotCQkJY2FyZC0+dS5jLnVzZWRieSA9IFdBTlBJUEU7Ci0JCX1lbHNlewotCQkJY2FyZC0+dS5jLnVzZWRieSA9IEFQSTsKLQkJfQotCi0JCWlmKCFjYXJkLT53YW5kZXYuY2xvY2tpbmcpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IEFzeW5jaC4gY2xvY2tpbmcgbXVzdCBiZSAnSW50ZXJuYWwnXG4iLAotCQkJCXdhbmRldi0+bmFtZSk7Ci0JCQlrZnJlZShjaGRsY19wcml2X2FyZWEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZigoY2FyZC0+d2FuZGV2LmJwcyA8IE1JTl9BU1lfQkFVRF9SQVRFKSB8fAotCQkJKGNhcmQtPndhbmRldi5icHMgPiBNQVhfQVNZX0JBVURfUkFURSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZWxlY3RlZCBiYXVkIHJhdGUgaXMgaW52YWxpZC5cbiIsCi0JCQkJd2FuZGV2LT5uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIk11c3QgYmUgYmV0d2VlbiAldSBhbmQgJXUgYnBzLlxuIiwKLQkJCQlNSU5fQVNZX0JBVURfUkFURSwgTUFYX0FTWV9CQVVEX1JBVEUpOwotCQkJa2ZyZWUoY2hkbGNfcHJpdl9hcmVhKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJY2FyZC0+dS5jLmFwaV9vcHRpb25zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoY29uZi0+YXN5X2RhdGFfdHJhbnMgPT0gV0FOT1BUX1lFUykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+dS5jLmFwaV9vcHRpb25zIHw9IEFTWV9SWF9EQVRBX1RSQU5TUEFSRU5UOwotICAgICAgICAgICAgICAgIH0KLQkJCi0JCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zID0gMDsKLQkJaWYgKGNvbmYtPnJ0c19oc19mb3JfcmVjZWl2ZSA9PSBXQU5PUFRfWUVTKSB7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBBU1lfUlRTX0hTX0ZPUl9SWDsKLQkgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29uZi0+eG9uX3hvZmZfaHNfZm9yX3JlY2VpdmUgPT0gV0FOT1BUX1lFUykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnMgfD0gQVNZX1hPTl9YT0ZGX0hTX0ZPUl9SWDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmYtPnhvbl94b2ZmX2hzX2Zvcl90cmFuc21pdCA9PSBXQU5PUFRfWUVTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBBU1lfWE9OX1hPRkZfSFNfRk9SX1RYOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29uZi0+ZGNkX2hzX2Zvcl90cmFuc21pdCA9PSBXQU5PUFRfWUVTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBBU1lfRENEX0hTX0ZPUl9UWDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmYtPmN0c19oc19mb3JfdHJhbnNtaXQgPT0gV0FOT1BUX1lFUykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnMgfD0gQVNZX0NUU19IU19GT1JfVFg7Ci0gICAgICAgICAgICAgICAgfQotCi0JCWNhcmQtPnUuYy50eF9iaXRzX3Blcl9jaGFyID0gY29uZi0+dHhfYml0c19wZXJfY2hhcjsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhfYml0c19wZXJfY2hhciA9IGNvbmYtPnJ4X2JpdHNfcGVyX2NoYXI7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnN0b3BfYml0cyA9IGNvbmYtPnN0b3BfYml0czsKLQkJY2FyZC0+dS5jLnBhcml0eSA9IGNvbmYtPnBhcml0eTsKLQkJY2FyZC0+dS5jLmJyZWFrX3RpbWVyID0gY29uZi0+YnJlYWtfdGltZXI7Ci0JCWNhcmQtPnUuYy5pbnRlcl9jaGFyX3RpbWVyID0gY29uZi0+aW50ZXJfY2hhcl90aW1lcjsKLQkJY2FyZC0+dS5jLnJ4X2NvbXBsZXRlX2xlbmd0aCA9IGNvbmYtPnJ4X2NvbXBsZXRlX2xlbmd0aDsKLQkJY2FyZC0+dS5jLnhvbl9jaGFyID0gY29uZi0+eG9uX2NoYXI7Ci0KLQl9IGVsc2UgewkvKiBzZXR1cCBmb3Igc3luY2hyb25vdXMgbW9kZSAqLwotCi0JCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zID0gMDsKLQkJaWYgKGNvbmYtPmlnbm9yZV9kY2QgPT0gV0FOT1BUX1lFUyl7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBJR05PUkVfRENEX0ZPUl9MSU5LX1NUQVQ7Ci0JCX0KLQkJaWYgKGNvbmYtPmlnbm9yZV9jdHMgPT0gV0FOT1BUX1lFUyl7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBJR05PUkVfQ1RTX0ZPUl9MSU5LX1NUQVQ7Ci0JCX0KLQotCQlpZiAoY29uZi0+aWdub3JlX2tlZXBhbGl2ZSA9PSBXQU5PUFRfWUVTKSB7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PQotCQkJCUlHTk9SRV9LUEFMVl9GT1JfTElOS19TVEFUOwotCQkJY2FyZC0+dS5jLmtwYWx2X3R4ICA9IE1JTl9UeF9LUEFMVl9USU1FUjsgCi0JCQljYXJkLT51LmMua3BhbHZfcnggID0gTUlOX1J4X0tQQUxWX1RJTUVSOyAKLQkJCWNhcmQtPnUuYy5rcGFsdl9lcnIgPSBNSU5fS1BBTFZfRVJSX1RPTDsgCi0KLQkJfSBlbHNlIHsgICAvKiBEbyBub3QgaWdub3JlIGtlZXBhbGl2ZXMgKi8KLQkJCWNhcmQtPnUuYy5rcGFsdl90eCA9Ci0JCQkJKChjb25mLT5rZWVwYWxpdmVfdHhfdG1yIC0gTUlOX1R4X0tQQUxWX1RJTUVSKQotCQkJCT49IDApID8KLQkgICAJCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPmtlZXBhbGl2ZV90eF90bXIsTUFYX1R4X0tQQUxWX1RJTUVSKSA6Ci0JCQkJREVGQVVMVF9UeF9LUEFMVl9USU1FUjsKLQotCQkJY2FyZC0+dS5jLmtwYWx2X3J4ID0KLQkJICAgCQkoKGNvbmYtPmtlZXBhbGl2ZV9yeF90bXIgLSBNSU5fUnhfS1BBTFZfVElNRVIpCi0JCQkJPj0gMCkgPwotCSAgIAkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+a2VlcGFsaXZlX3J4X3RtcixNQVhfUnhfS1BBTFZfVElNRVIpIDoKLQkJCQlERUZBVUxUX1J4X0tQQUxWX1RJTUVSOwotCi0JCQljYXJkLT51LmMua3BhbHZfZXJyID0KLQkJICAgCQkoKGNvbmYtPmtlZXBhbGl2ZV9lcnJfbWFyZ2luLU1JTl9LUEFMVl9FUlJfVE9MKQotCQkJCT49IDApID8KLQkgICAJCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPmtlZXBhbGl2ZV9lcnJfbWFyZ2luLAotCQkJCU1BWF9LUEFMVl9FUlJfVE9MKSA6IAotCSAgIAkJCURFRkFVTFRfS1BBTFZfRVJSX1RPTDsKLQkJfQotCi0JCS8qIFNldHVwIHNsYXJwIHRpbWVyIHRvIGNvbnRyb2wgZGVsYXkgYmV0d2VlbiBzbGFycHMgKi8KLQkJY2FyZC0+dS5jLnNsYXJwX3RpbWVyID0gCi0JCQkoKGNvbmYtPnNsYXJwX3RpbWVyIC0gTUlOX1NMQVJQX1JFUV9USU1FUikgPj0gMCkgPwotCQkJbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5zbGFycF90aW1lciwgTUFYX1NMQVJQX1JFUV9USU1FUikgOgotCQkJREVGQVVMVF9TTEFSUF9SRVFfVElNRVI7Ci0KLQkJaWYgKGNvbmYtPmhkbGNfc3RyZWFtaW5nID09IFdBTk9QVF9ZRVMpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbmFibGluZyBIRExDIFNUUkVBTUlORyBNb2RlXG4iLAotCQkJCXdhbmRldi0+bmFtZSk7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyA9IEhETENfU1RSRUFNSU5HX01PREU7Ci0JCX0KLQotCQlpZiAoKGNoZGxjX3ByaXZfYXJlYS0+dHJ1ZV9pZl9lbmNvZGluZyA9IGNvbmYtPnRydWVfaWZfZW5jb2RpbmcpID09IFdBTk9QVF9ZRVMpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IEVuYWJsaW5nLCB0cnVlIGludGVyZmFjZSB0eXBlIGVuY29kaW5nLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQkKLSAgICAgICAgCS8qIFNldHVwIHdhbnBpcGUgYXMgYSByb3V0ZXIgKFdBTlBJUEUpIG9yIGFzIGFuIEFQSSAqLwotCQlpZiggc3RyY21wKGNvbmYtPnVzZWRieSwgIldBTlBJUEUiKSA9PSAwKSB7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIFdBTlBJUEUgbW9kZSFcbiIsCi0JCQkJd2FuZGV2LT5uYW1lKTsKLQkJCWNhcmQtPnUuYy51c2VkYnkgPSBXQU5QSVBFOwotCi0JCQkvKiBPcHRpb24gdG8gYnJpbmcgZG93biB0aGUgaW50ZXJmYWNlIHdoZW4gCi0gICAgICAgIAkJICogdGhlIGxpbmsgZ29lcyBkb3duICovCi0JCQlpZiAoY29uZi0+aWZfZG93bil7Ci0JCQkJc2V0X2JpdChEWU5fT1BUX09OLCZjaGRsY19wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSAiJXM6IER5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZW5hYmxlZFxuIiwKLQkJCQkgICBjYXJkLT5kZXZuYW1lKTsKLQkJCX0gCi0KLQkJfSBlbHNlIGlmKCBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQVBJIikgPT0gMCkgewotCQkJY2FyZC0+dS5jLnVzZWRieSA9IEFQSTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIEFQSSBtb2RlICFcbiIsCi0JCQkJd2FuZGV2LT5uYW1lKTsKLQkJfQotCX0KLQotCS8qIFRlbGxzIHVzIHRoYXQgaWYgdGhpcyBpbnRlcmZhY2UgaXMgYQotICAgICAgICAgKiBnYXRld2F5IG9yIG5vdCAqLwotCWlmICgoY2hkbGNfcHJpdl9hcmVhLT5nYXRld2F5ID0gY29uZi0+Z2F0ZXdheSkgPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgaXMgc2V0IGFzIGEgZ2F0ZXdheS5cbiIsCi0JCQljYXJkLT5kZXZuYW1lLGNhcmQtPnUuYy5pZl9uYW1lKTsKLQl9Ci0KLQkvKiBHZXQgTXVsdGljYXN0IEluZm9ybWF0aW9uICovCi0JY2hkbGNfcHJpdl9hcmVhLT5tYyA9IGNvbmYtPm1jOwotCi0JLyogcHJlcGFyZSBuZXR3b3JrIGRldmljZSBkYXRhIHNwYWNlIGZvciByZWdpc3RyYXRpb24gKi8KLQlzdHJjcHkoZGV2LT5uYW1lLGNhcmQtPnUuYy5pZl9uYW1lKTsKLQotCWRldi0+aW5pdCA9ICZpZl9pbml0OwotCWRldi0+cHJpdiA9IGNoZGxjX3ByaXZfYXJlYTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHBvbGxpbmcgd29yayByb3V0aW5lICovCi0JSU5JVF9XT1JLKCZjaGRsY19wcml2X2FyZWEtPnBvbGxfd29yaywgKHZvaWQqKSh2b2lkKiljaGRsY19wb2xsLCBkZXYpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgcG9sbGluZyBkZWxheSB0aW1lciAqLwotCWluaXRfdGltZXIoJmNoZGxjX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lcik7Ci0JY2hkbGNfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7Ci0JY2hkbGNfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLmZ1bmN0aW9uID0gY2hkbGNfcG9sbF9kZWxheTsKLQkKLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKiBOZXR3b3JrIERldmljZSBJbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBMaW51eCBuZXR3b3JrIGludGVyZmFjZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9ubHkgb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UsIGR1cmluZyBMaW51eCBuZXR3b3JrCi0gKiBpbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiAgUmV0dXJuaW5nIGFueXRoaW5nIGJ1dCB6ZXJvIHdpbGwgZmFpbCBpbnRlcmZhY2UKLSAqIHJlZ2lzdHJhdGlvbi4KLSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0KLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9ICZpZl9vcGVuOwotCWRldi0+c3RvcAkJPSAmaWZfY2xvc2U7Ci0JZGV2LT5oYXJkX2hlYWRlcgk9ICZpZl9oZWFkZXI7Ci0JZGV2LT5yZWJ1aWxkX2hlYWRlcgk9ICZpZl9yZWJ1aWxkX2hkcjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9ICZpZl9zZW5kOwotCWRldi0+Z2V0X3N0YXRzCQk9ICZpZl9zdGF0czsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gJmlmX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbwk9IFRYX1RJTUVPVVQ7Ci0JCi0JLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCi0JZGV2LT5mbGFncwkJfD0gSUZGX1BPSU5UT1BPSU5UOwotCWRldi0+ZmxhZ3MJCXw9IElGRl9OT0FSUDsKLQotCS8qIEVuYWJsZSBNdWxpdGNhc3RpbmcgaWYgdXNlciBzZWxlY3RlZCAqLwotCWlmIChjaGRsY19wcml2X2FyZWEtPm1jID09IFdBTk9QVF9ZRVMpewotCQlkZXYtPmZsYWdzIAl8PSBJRkZfTVVMVElDQVNUOwotCX0KLQkKLQlpZiAoY2hkbGNfcHJpdl9hcmVhLT50cnVlX2lmX2VuY29kaW5nKXsKLQkJZGV2LT50eXBlCT0gQVJQSFJEX0hETEM7IC8qIFRoaXMgYnJlYWtzIHRoZSB0Y3BkdW1wICovCi0JfWVsc2V7Ci0JCWRldi0+dHlwZQk9IEFSUEhSRF9QUFA7Ci0JfQotCQotCWRldi0+bXR1CQk9IGNhcmQtPndhbmRldi5tdHU7Ci0JLyogZm9yIEFQSSB1c2FnZSwgYWRkIHRoZSBBUEkgaGVhZGVyIHNpemUgdG8gdGhlIHJlcXVlc3RlZCBNVFUgc2l6ZSAqLwotCWlmKGNhcmQtPnUuYy51c2VkYnkgPT0gQVBJKSB7Ci0JCWRldi0+bXR1ICs9IHNpemVvZihhcGlfdHhfaGRyX3QpOwotCX0KLSAKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IENIRExDX0hEUl9MRU47Ci0KLQkvKiBJbml0aWFsaXplIGhhcmR3YXJlIHBhcmFtZXRlcnMgKi8KLQlkZXYtPmlycQk9IHdhbmRldi0+aXJxOwotCWRldi0+ZG1hCT0gd2FuZGV2LT5kbWE7Ci0JZGV2LT5iYXNlX2FkZHIJPSB3YW5kZXYtPmlvcG9ydDsKLQlkZXYtPm1lbV9zdGFydAk9IHdhbmRldi0+bWFkZHI7Ci0JZGV2LT5tZW1fZW5kCT0gd2FuZGV2LT5tYWRkciArIHdhbmRldi0+bXNpemUgLSAxOwotCi0JLyogU2V0IHRyYW5zbWl0IGJ1ZmZlciBxdWV1ZSBsZW5ndGggCi0JICogSWYgdG9vIGxvdyBwYWNrZXRzIHdpbGwgbm90IGJlIHJldHJhbnNtaXR0ZWQgCi0gICAgICAgICAqIGJ5IHN0YWNrLgotCSAqLwotICAgICAgICBkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0gICAKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBlbmFibGUgY29tbXVuaWNhdGlvbnMgYW5kIGludGVycnVwdHMuCi0gKiBvIHByZXZlbnQgbW9kdWxlIGZyb20gdW5sb2FkaW5nIGJ5IGluY3JlbWVudGluZyB1c2UgY291bnQKLSAqCi0gKiBSZXR1cm4gMCBpZiBPLmsuIG9yIGVycm5vLgotICovCi1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlpbnQgZXJyID0gMDsKLQotCS8qIE9ubHkgb25lIG9wZW4gcGVyIGludGVyZmFjZSBpcyBhbGxvd2VkICovCi0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgd29yayBxdWV1ZSBlbnRyeSAqLwotCWNoZGxjX3ByaXZfYXJlYS0+dHFfd29ya2luZz0wOwotCi0JSU5JVF9XT1JLKCZjaGRsY19wcml2X2FyZWEtPmNvbW1vbi53YW5waXBlX3dvcmssCi0JCQkodm9pZCAqKSh2b2lkICopY2hkbGNfd29yaywgZGV2KTsKLQotCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIEJIIGNpcmN1bGFyIGJ1ZmZlciAqLwotCS8qIEFkZCAxIHRvIE1BWF9CSF9CVUZGIHNvIHdlIGRvbid0IGhhdmUgdGVzdCB3aXRoIChNQVhfQkhfQlVGRi0xKSAqLwotCWNoZGxjX3ByaXZfYXJlYS0+YmhfaGVhZCA9IGttYWxsb2MoKHNpemVvZihiaF9kYXRhX3QpKihNQVhfQkhfQlVGRisxKSksR0ZQX0FUT01JQyk7Ci0JbWVtc2V0KGNoZGxjX3ByaXZfYXJlYS0+YmhfaGVhZCwwLChzaXplb2YoYmhfZGF0YV90KSooTUFYX0JIX0JVRkYrMSkpKTsKLQlhdG9taWNfc2V0KCZjaGRsY19wcml2X2FyZWEtPmJoX2J1ZmZfdXNlZCwgMCk7Ci0gCi0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0JY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZXJfc3RhcnRfdGltZSA9IHR2LnR2X3NlYzsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0KLQkvKiBUVFkgaXMgY29uZmlndXJlZCBkdXJpbmcgd2FucGlwZV9zZXRfdGVybWlvcwotCSAqIGNhbGwsIG5vdCBoZXJlICovCi0JaWYgKGNhcmQtPnR0eV9vcHQpCi0JCXJldHVybiBlcnI7Ci0JCi0Jc2V0X2JpdCgwLCZjaGRsY19wcml2X2FyZWEtPmNvbmZpZ19jaGRsYyk7Ci0JY2hkbGNfcHJpdl9hcmVhLT5jb25maWdfY2hkbGNfdGltZW91dD1qaWZmaWVzOwotCi0JLyogU3RhcnQgdGhlIENIRExDIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgMXNlYyBkZWxheS4KLQkgKiBUaGlzIHdpbGwgZ2l2ZSB0aGUgaW50ZXJmYWNlIGluaXRpbGl6YXRpb24gdGltZQotCSAqIHRvIGZpbmlzaCBpdHMgY29uZmlndXJhdGlvbiAqLwotCW1vZF90aW1lcigmY2hkbGNfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLCBqaWZmaWVzICsgSFopOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xvc2UgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGxhc3QgY2xvc2UsIHRoZW4gZGlzYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcmVzZXQgZmxhZ3MuCi0gKi8KLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQotCWlmIChjaGRsY19wcml2X2FyZWEtPmJoX2hlYWQpewotCQlpbnQgaTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkKLQkJZm9yIChpPTA7IGk8KE1BWF9CSF9CVUZGKzEpOyBpKyspewotCQkJc2tiID0gKChiaF9kYXRhX3QgKikmY2hkbGNfcHJpdl9hcmVhLT5iaF9oZWFkW2ldKS0+c2tiOwotCQkJaWYgKHNrYiAhPSBOVUxMKXsKLSAgICAgICAgICAgICAgICAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQl9Ci0JCX0KLQkJa2ZyZWUoY2hkbGNfcHJpdl9hcmVhLT5iaF9oZWFkKTsKLQkJY2hkbGNfcHJpdl9hcmVhLT5iaF9oZWFkPU5VTEw7Ci0JfQotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXdhbnBpcGVfY2xvc2UoY2FyZCk7Ci0JZGVsX3RpbWVyKCZjaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2NvbW0gKHNkbGFfdCAqY2FyZCkKLXsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQkKLQlpZiAoY2FyZC0+dS5jLmNvbW1fZW5hYmxlZCl7Ci0JCWNoZGxjX2Rpc2FibGVfY29tbV9zaHV0ZG93biAoY2FyZCk7Ci0JfWVsc2V7Ci0JCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwkKLQl9Ci0KLQlpZiAoIXR0eV9pbml0X2NudCkKLQkJcmV0dXJuOwotCi0JaWYgKGNhcmQtPnR0eV9vcHQpewotCQlzdHJ1Y3Qgc2VyaWFsX3N0YXRlICogc3RhdGU7Ci0JCWlmICghKC0tdHR5X2luaXRfY250KSl7Ci0JCQlpbnQgZTE7Ci0JCQlzZXJpYWxfZHJpdmVyLnJlZmNvdW50PTA7Ci0JCQkKLQkJCWlmICgoZTEgPSB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF9kcml2ZXIpKSkKLQkJCQlwcmludGsoIlNFUklBTDogZmFpbGVkIHRvIHVucmVnaXN0ZXIgc2VyaWFsIGRyaXZlciAoJWQpXG4iLAotCQkJCSAgICAgICBlMSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5yZWdpc3RlcmluZyBUVFkgRHJpdmVyLCBNYWpvciAlaVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxXQU5fVFRZX01BSk9SKTsKLQkJfQotCQljYXJkLT50dHk9TlVMTDsKLQkJdHR5X2NhcmRfbWFwW2NhcmQtPnR0eV9taW5vcl09TlVMTDsKLQkJc3RhdGUgPSAmcnNfdGFibGVbY2FyZC0+dHR5X21pbm9yXTsKLQkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7Ci0JfQotCXJldHVybjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEJ1aWxkIG1lZGlhIGhlYWRlci4KLSAqCi0gKiBUaGUgdHJpY2sgaGVyZSBpcyB0byBwdXQgcGFja2V0IHR5cGUgKEV0aGVydHlwZSkgaW50byAncHJvdG9jb2wnIGZpZWxkIG9mCi0gKiB0aGUgc29ja2V0IGJ1ZmZlciwgc28gdGhhdCB3ZSBkb24ndCBmb3JnZXQgaXQuICBJZiBwYWNrZXQgdHlwZSBpcyBub3QKLSAqIHN1cHBvcnRlZCwgc2V0IHNrYi0+cHJvdG9jb2wgdG8gMCBhbmQgZGlzY2FyZCBwYWNrZXQgbGF0ZXIuCi0gKgotICogUmV0dXJuOgltZWRpYSBoZWFkZXIgbGVuZ3RoLgotICovCi1zdGF0aWMgaW50IGlmX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIHZvaWQqIGRhZGRyLCB2b2lkKiBzYWRkciwKLQkJICAgICB1bnNpZ25lZCBsZW4pCi17Ci0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKHR5cGUpOwotCi0JcmV0dXJuIENIRExDX0hEUl9MRU47Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgdHJhbnNtaXQgdGltZW91dCBldmVudCBmcm9tIG5ldGlmIHdhdGNoZG9nCi0gKi8KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICAJY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQkKLQkvKiBJZiBvdXIgZGV2aWNlIHN0YXlzIGJ1c3kgZm9yIGF0IGxlYXN0IDUgc2Vjb25kcyB0aGVuIHdlIHdpbGwKLQkgKiBraWNrIHN0YXJ0IHRoZSBkZXZpY2UgYnkgbWFraW5nIGRldi0+dGJ1c3kgPSAwLiAgV2UgZXhwZWN0Ci0JICogdGhhdCBvdXIgZGV2aWNlIG5ldmVyIHN0YXlzIGJ1c3kgbW9yZSB0aGFuIDUgc2Vjb25kcy4gU28gdGhpcyAgICAgICAgICAgICAgICAgCi0JICogaXMgb25seSB1c2VkIGFzIGEgbGFzdCByZXNvcnQuCi0JICovCi0KLQkrK2NhcmQtPndhbmRldi5zdGF0cy5jb2xsaXNpb25zOwotCi0JcHJpbnRrIChLRVJOX0lORk8gIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQgb24gJXNcbiIsIGNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZS1idWlsZCBtZWRpYSBoZWFkZXIuCi0gKgotICogUmV0dXJuOgkxCXBoeXNpY2FsIGFkZHJlc3MgcmVzb2x2ZWQuCi0gKgkJMAlwaHlzaWNhbCBhZGRyZXNzIG5vdCByZXNvbHZlZAotICovCi1zdGF0aWMgaW50IGlmX3JlYnVpbGRfaGRyIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAxOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBhIHBhY2tldCBvbiBhIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBzZXQgdGJ1c3kgZmxhZyAobWFya3Mgc3RhcnQgb2YgdGhlIHRyYW5zbWlzc2lvbikgdG8gYmxvY2sgYSB0aW1lci1iYXNlZAotICogICB0cmFuc21pdCBmcm9tIG92ZXJsYXBwaW5nLgotICogbyBjaGVjayBsaW5rIHN0YXRlLiBJZiBsaW5rIGlzIG5vdCB1cCwgdGhlbiBkcm9wIHRoZSBwYWNrZXQuCi0gKiBvIGV4ZWN1dGUgYWRhcHRlciBzZW5kIGNvbW1hbmQuCi0gKiBvIGZyZWUgc29ja2V0IGJ1ZmZlcgotICoKLSAqIFJldHVybjoJMAljb21wbGV0ZSAoc29ja2V0IGJ1ZmZlciBtdXN0IGJlIGZyZWVkKQotICoJCW5vbi0wCXBhY2tldCBtYXkgYmUgcmUtdHJhbnNtaXR0ZWQgKHRidXN5IG11c3QgYmUgc2V0KQotICoKLSAqIE5vdGVzOgotICogMS4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBlaXRoZXIgYnkgdGhlIHByb3RvY29sIHN0YWNrIG9yIGJ5IHRoZSAibmV0Ci0gKiAgICBib3R0b20gaGFsZiIgKHdpdGggaW50ZXJydXB0cyBlbmFibGVkKS4KLSAqIDIuIFNldHRpbmcgdGJ1c3kgZmxhZyB3aWxsIGluaGliaXQgZnVydGhlciB0cmFuc21pdCByZXF1ZXN0cyBmcm9tIHRoZQotICogICAgcHJvdG9jb2wgc3RhY2sgYW5kIGNhbiBiZSB1c2VkIGZvciBmbG93IGNvbnRyb2wgd2l0aCBwcm90b2NvbCBsYXllci4KLSAqLwotc3RhdGljIGludCBpZl9zZW5kKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JSU5URVJSVVBUX0lORk9STUFUSU9OX1NUUlVDVCAqY2hkbGNfaW50ID0gJmZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3Q7Ci0JaW50IHVkcF90eXBlID0gMDsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlpbnQgZXJyPTA7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCi0JaWYgKHNrYiA9PSBOVUxMKXsKLQkJLyogSWYgd2UgZ2V0IGhlcmUsIHNvbWUgaGlnaGVyIGxheWVyIHRoaW5rcyB3ZSd2ZSBtaXNzZWQgYW4KLQkJICogdHgtZG9uZSBpbnRlcnJ1cHQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJmYWNlICVzIGdvdCBraWNrZWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotICAgCWlmIChudG9ocyhza2ItPnByb3RvY29sKSAhPSBodG9ucyhQVkNfUFJPVCkpewotCi0JCS8qIGNoZWNrIHRoZSB1ZHAgcGFja2V0IHR5cGUgKi8KLQkJCi0JCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKHNrYiwgY2FyZCk7Ci0KLQkJaWYgKHVkcF90eXBlID09IFVEUF9DUElQRV9UWVBFKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0b3JlX3VkcF9tZ210X3BrdChVRFBfUEtUX0ZSTV9TVEFDSywgY2FyZCwgc2tiLCBkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGxjX3ByaXZfYXJlYSkpewotCSAgICAgICAgICAgICAgICAJY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PQotCQkJCQlBUFBfSU5UX09OX1RJTUVSOwotCQkJfQotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogY2hlY2sgdG8gc2VlIGlmIHRoZSBzb3VyY2UgSVAgYWRkcmVzcyBpcyBhIGJyb2FkY2FzdCBvciAqLwotCQkvKiBtdWx0aWNhc3QgSVAgYWRkcmVzcyAqLwotICAgICAgICAgICAgICAgIGlmKGNoa19iY2FzdF9tY2FzdF9hZGRyKGNhcmQsIGRldiwgc2tiKSl7Ci0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotICAgICAgICB9Ci0KLQkvKiBMb2NrIHRoZSA1MDggQ2FyZDogU01QIGlzIHN1cHBvcnRlZCAqLwotICAgICAgCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJczUwOF9sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JfSAKLQotICAgIAlpZih0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCBpbiBpZl9zZW5kOiAlbHhcbiIsCi0JCQkJCWNhcmQtPndhbmRldi5uYW1lLGNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0gICAgICAgICAgICAgICAgKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJZ290byBpZl9zZW5kX2V4aXRfY3JpdDsKLQl9Ci0KLQlpZihjYXJkLT51LmMuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0gICAgICAgCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkKLQl9ZWxzZSBpZighc2tiLT5wcm90b2NvbCl7Ci0gICAgICAgIAkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9lcnJvcnM7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQotCX1lbHNlIHsKLQkJdm9pZCogZGF0YSA9IHNrYi0+ZGF0YTsKLQkJdW5zaWduZWQgbGVuID0gc2tiLT5sZW47Ci0JCXVuc2lnbmVkIGNoYXIgYXR0cjsKLQotCQkvKiBJZiBpdCdzIGFuIEFQSSBwYWNrZXQgcHVsbCBvZmYgdGhlIEFQSQotCQkgKiBoZWFkZXIuIEFsc28gY2hlY2sgdGhhdCB0aGUgcGFja2V0IHNpemUKLQkJICogaXMgbGFyZ2VyIHRoYW4gdGhlIEFQSSBoZWFkZXIKLQkgICAgICAgICAqLwotCQlpZiAoY2FyZC0+dS5jLnVzZWRieSA9PSBBUEkpewotCQkJYXBpX3R4X2hkcl90KiBhcGlfdHhfaGRyOwotCi0JCQkvKiBkaXNjYXJkIHRoZSBmcmFtZSBpZiB3ZSBhcmUgY29uZmlndXJlZCBmb3IgKi8KLQkJCS8qICdyZWNlaXZlIG9ubHknIG1vZGUgb3IgaWYgdGhlcmUgaXMgbm8gZGF0YSAqLwotCQkJaWYgKGNhcmQtPnUuYy5yZWNlaXZlX29ubHkgfHwKLQkJCQkobGVuIDw9IHNpemVvZihhcGlfdHhfaGRyX3QpKSkgewotCQkJCQotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCQlnb3RvIGlmX3NlbmRfZXhpdF9jcml0OwotCQkJfQotCQkJCQotCQkJYXBpX3R4X2hkciA9IChhcGlfdHhfaGRyX3QgKilkYXRhOwotCQkJYXR0ciA9IGFwaV90eF9oZHItPmF0dHI7Ci0JCQlkYXRhICs9IHNpemVvZihhcGlfdHhfaGRyX3QpOwotCQkJbGVuIC09IHNpemVvZihhcGlfdHhfaGRyX3QpOwotCQl9Ci0KLQkJaWYoY2hkbGNfc2VuZChjYXJkLCBkYXRhLCBsZW4pKSB7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCX1lbHNlewotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPndhbmRldi5zdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQkKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQkKLQkJIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJfQkKLQl9Ci0KLWlmX3NlbmRfZXhpdF9jcml0OgotCQotCWlmICghKGVycj1uZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpKSB7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0JCWNoZGxjX3ByaXZfYXJlYS0+dGlja19jb3VudGVyID0gamlmZmllczsKLQkJY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RYX0ZSQU1FOwotCX0KLQotCWNsZWFyX2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCXM1MDhfdW5sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JfQotCQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaGVjayB0byBzZWUgaWYgdGhlIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZCBjb250YWlucyBhIGJyb2FkY2FzdCBvcgotICogbXVsdGljYXN0IHNvdXJjZSBJUCBhZGRyZXNzLgotICovCi0KLXN0YXRpYyBpbnQgY2hrX2JjYXN0X21jYXN0X2FkZHIoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJCXN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdTMyIHNyY19pcF9hZGRyOwotICAgICAgICB1MzIgYnJvYWRjYXN0X2lwX2FkZHIgPSAwOwotICAgICAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0KLSAgICAgICAgLyogcmVhZCB0aGUgSVAgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgb3V0Z29pbmcgcGFja2V0ICovCi0gICAgICAgIHNyY19pcF9hZGRyID0gKih1MzIgKikoc2tiLT5kYXRhICsgMTIpOwotCi0JLyogcmVhZCB0aGUgSVAgYnJvYWRjYXN0IGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UgKi8KLSAgICAgICAgaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0gICAgICAgIGlmKGluX2RldiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhPSBpbl9kZXYtPmlmYV9saXN0OwotICAgICAgICAgICAgICAgIGlmKGlmYSAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0X2lwX2FkZHIgPSBpZmEtPmlmYV9icm9hZGNhc3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAKLSAgICAgICAgLyogY2hlY2sgaWYgdGhlIElQIFNvdXJjZSBBZGRyZXNzIGlzIGEgQnJvYWRjYXN0IGFkZHJlc3MgKi8KLSAgICAgICAgaWYoKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSAmJiAoc3JjX2lwX2FkZHIgPT0gYnJvYWRjYXN0X2lwX2FkZHIpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJyb2FkY2FzdCBTb3VyY2UgQWRkcmVzcyBzaWxlbnRseSBkaXNjYXJkZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0gCi0KLSAgICAgICAgLyogY2hlY2sgaWYgdGhlIElQIFNvdXJjZSBBZGRyZXNzIGlzIGEgTXVsdGljYXN0IGFkZHJlc3MgKi8KLSAgICAgICAgaWYoKG50b2hsKHNyY19pcF9hZGRyKSA+PSAweEUwMDAwMDAxKSAmJgotCQkobnRvaGwoc3JjX2lwX2FkZHIpIDw9IDB4RkZGRkZGRkUpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE11bHRpY2FzdCBTb3VyY2UgQWRkcmVzcyBzaWxlbnRseSBkaXNjYXJkZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlcGx5IHRvIFVEUCBNYW5hZ2VtZW50IHN5c3RlbS4KLSAqIFJldHVybiBsZW5ndGggb2YgcmVwbHkuCi0gKi8KLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKQotewotCi0JdW5zaWduZWQgc2hvcnQgbGVuLCB1ZHBfbGVuZ3RoLCB0ZW1wLCBpcF9sZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBpcF90ZW1wOwotCWludCBldmVuX2JvdW5kID0gMDsKLSAgCWNoZGxjX3VkcF9wa3RfdCAqY191ZHBfcGt0ID0gKGNoZGxjX3VkcF9wa3RfdCAqKWRhdGE7Ci0JIAotCS8qIFNldCBsZW5ndGggb2YgcGFja2V0ICovCi0JbGVuID0gc2l6ZW9mKGlwX3BrdF90KSsgCi0JICAgICAgc2l6ZW9mKHVkcF9wa3RfdCkrCi0JICAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JICAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICBzaXplb2YodHJhY2VfaW5mb190KSsgCi0JICAgICAgbWJveF9sZW47Ci0KLQkvKiBmaWxsIGluIFVEUCByZXBseSAqLwotCWNfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID0gVURQTUdNVF9SRVBMWTsKLSAgIAotCS8qIGZpbGwgaW4gVURQIGxlbmd0aCAqLwotCXVkcF9sZW5ndGggPSBzaXplb2YodWRwX3BrdF90KSsgCi0JCSAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JCSAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICAgICAgICAgc2l6ZW9mKHRyYWNlX2luZm9fdCkrCi0JCSAgICAgbWJveF9sZW47IAotCi0gCS8qIHB1dCBpdCBvbiBhbiBldmVuIGJvdW5kYXJ5ICovCi0JaWYgKCB1ZHBfbGVuZ3RoICYgMHgwMDAxICkgewotCQl1ZHBfbGVuZ3RoICs9IDE7Ci0JCWxlbiArPSAxOwotCQlldmVuX2JvdW5kID0gMTsKLQl9ICAKLQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfbGVuZ3RoID0gdGVtcDsKLQkJIAotCS8qIHN3YXAgVURQIHBvcnRzICovCi0JdGVtcCA9IGNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQ7Ci0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9zcmNfcG9ydCA9IAotCQkJY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydDsgCi0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9IHRlbXA7Ci0KLQkvKiBhZGQgVURQIHBzZXVkbyBoZWFkZXIgKi8KLQl0ZW1wID0gMHgxMTAwOwotCSooKHVuc2lnbmVkIHNob3J0ICopKGNfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKSkgPSB0ZW1wOwkKLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKShjX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCsyKSkgPSB0ZW1wOwotCi0JCSAKLQkvKiBjYWxjdWxhdGUgVURQIGNoZWNrc3VtICovCi0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IDA7Ci0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IGNhbGNfY2hlY2tzdW0oJmRhdGFbVURQX09GRlNFVF0sdWRwX2xlbmd0aCtVRFBfT0ZGU0VUKTsKLQotCS8qIGZpbGwgaW4gSVAgbGVuZ3RoICovCi0JaXBfbGVuZ3RoID0gbGVuOwotCXRlbXAgPSAoaXBfbGVuZ3RoPDw4KXwoaXBfbGVuZ3RoPj44KTsKLQljX3VkcF9wa3QtPmlwX3BrdC50b3RhbF9sZW5ndGggPSB0ZW1wOwotICAKLQkvKiBzd2FwIElQIGFkZHJlc3NlcyAqLwotCWlwX3RlbXAgPSBjX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzczsKLQljX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzcyA9IGNfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzOwotCWNfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzID0gaXBfdGVtcDsKLQotCS8qIGZpbGwgaW4gSVAgY2hlY2tzdW0gKi8KLQljX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSAwOwotCWNfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IGNhbGNfY2hlY2tzdW0oZGF0YSxzaXplb2YoaXBfcGt0X3QpKTsKLQotCXJldHVybiBsZW47Ci0KLX0gLyogcmVwbHlfdWRwICovCi0KLXVuc2lnbmVkIHNob3J0IGNhbGNfY2hlY2tzdW0gKGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0JdW5zaWduZWQgc2hvcnQgdGVtcDsgCi0JdW5zaWduZWQgbG9uZyBzdW09MDsKLQlpbnQgaTsKLQotCWZvciggaSA9IDA7IGkgPGxlbjsgaSs9MiApIHsKLQkJbWVtY3B5KCZ0ZW1wLCZkYXRhW2ldLDIpOwotCQlzdW0gKz0gKHVuc2lnbmVkIGxvbmcpdGVtcDsKLQl9Ci0KLQl3aGlsZSAoc3VtID4+IDE2ICkgewotCQlzdW0gPSAoc3VtICYgMHhmZmZmVUwpICsgKHN1bSA+PiAxNik7Ci0JfQotCi0JdGVtcCA9ICh1bnNpZ25lZCBzaG9ydClzdW07Ci0JdGVtcCA9IH50ZW1wOwotCi0JaWYoIHRlbXAgPT0gMCApIAotCQl0ZW1wID0gMHhmZmZmOwotCi0JcmV0dXJuIHRlbXA7CQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgotICogUmV0dXJuIGEgcG9pbnRlciB0byBzdHJ1Y3QgZW5ldF9zdGF0aXN0aWNzLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIGlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0Jc2RsYV90ICpteV9jYXJkOwotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWE7Ci0KLQlpZiAoKGNoZGxjX3ByaXZfYXJlYT1kZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JbXlfY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlyZXR1cm4gJm15X2NhcmQtPndhbmRldi5zdGF0czsgCi19Ci0KLQotLyoqKioqKiBDaXNjbyBIRExDIEZpcm13YXJlIEludGVyZmFjZSBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIGZpcm13YXJlIGNvZGUgdmVyc2lvbi4KLSAqCVB1dCBjb2RlIHZlcnNpb24gYXMgQVNDSUkgc3RyaW5nIGluIHN0ci4gCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cikKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBsZW47Ci0JY2hhciBlcnI7Ci0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT0RFX1ZFUlNJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JaWYoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCX0KLQllbHNlIGlmIChzdHIpIHsgIC8qIGlzIG5vdCBudWxsICovCi0JCWxlbiA9IG1iLT5idWZmZXJfbGVuZ3RoOwotCQltZW1jcHkoc3RyLCBtYi0+ZGF0YSwgbGVuKTsKLQkJc3RyW2xlbl0gPSAnXDAnOwotCX0KLQlyZXR1cm4gKGVycik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDb25maWd1cmUgQ0hETEMgZmlybXdhcmUuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfY29uZmlndXJlIChzZGxhX3QqIGNhcmQsIHZvaWQqIGRhdGEpCi17Ci0JaW50IGVycjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWFpbGJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGRhdGFfbGVuZ3RoID0gc2l6ZW9mKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUKTsKLQkKLQltYWlsYm94LT5idWZmZXJfbGVuZ3RoID0gZGF0YV9sZW5ndGg7ICAKLQltZW1jcHkobWFpbGJveC0+ZGF0YSwgZGF0YSwgZGF0YV9sZW5ndGgpOwotCW1haWxib3gtPmNvbW1hbmQgPSBTRVRfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWFpbGJveCkgPyBtYWlsYm94LT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQotCWlmIChlcnIgIT0gQ09NTUFORF9PSykgY2hkbGNfZXJyb3IgKGNhcmQsIGVyciwgbWFpbGJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IGludGVycnVwdCBtb2RlIC0tIEhETEMgVmVyc2lvbi4KLSAqLwotCi1zdGF0aWMgaW50IGNoZGxjX3NldF9pbnRyX21vZGUgKHNkbGFfdCogY2FyZCwgdW5zaWduZWQgbW9kZSkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCUNIRExDX0lOVF9UUklHR0VSU19TVFJVQ1QqIGludF9kYXRhID0KLQkJIChDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUICopbWItPmRhdGE7Ci0JaW50IGVycjsKLQotCWludF9kYXRhLT5DSERMQ19pbnRlcnJ1cHRfdHJpZ2dlcnMgCT0gbW9kZTsKLQlpbnRfZGF0YS0+SVJRCQkJCT0gY2FyZC0+aHcuaXJxOwotCWludF9kYXRhLT5pbnRlcnJ1cHRfdGltZXIgICAgICAgICAgICAgICA9IDE7Ci0gICAKLQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUKTsKLQltYi0+Y29tbWFuZCA9IFNFVF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykKLQkJY2hkbGNfZXJyb3IgKGNhcmQsIGVyciwgbWIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duCi0gKgotICogU2h1dGRvd24oKSBkaXNhYmxlcyB0aGUgY29tbXVuaWNhdGlvbnMuIFdlIG11c3QKLSAqIGhhdmUgYSBzcGFyYXRlIGZ1bmN0aW9ucywgYmVjYXVzZSB3ZSBtdXN0IG5vdAotICogY2FsbCBjaGRsY19lcnJvcigpIGhhbmRlciBzaW5jZSB0aGUgcHJpdmF0ZQotICogYXJlYSBoYXMgYWxyZWFkeSBiZWVuIHJlcGxhY2VkICovCi0KLXN0YXRpYyBpbnQgY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duIChzZGxhX3QgKmNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUKiBpbnRfZGF0YSA9Ci0JCSAoQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCAqKW1iLT5kYXRhOwotCWludCBlcnI7Ci0KLQkvKiBEaXNhYmxlIEludGVycnV0cHMgKi8KLQlpbnRfZGF0YS0+Q0hETENfaW50ZXJydXB0X3RyaWdnZXJzIAk9IDA7Ci0JaW50X2RhdGEtPklSUQkJCQk9IGNhcmQtPmh3LmlycTsKLQlpbnRfZGF0YS0+aW50ZXJydXB0X3RpbWVyICAgICAgICAgICAgICAgPSAxOwotICAgCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCk7Ci0JbWItPmNvbW1hbmQgPSBTRVRfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCS8qIERpc2FibGUgQ29tbXVuaWNhdGlvbnMgKi8KLQotCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSkgewotCQltYi0+Y29tbWFuZCA9IERJU0FCTEVfQVNZX0NPTU1VTklDQVRJT05TOwotCX1lbHNlewotCQltYi0+Y29tbWFuZCA9IERJU0FCTEVfQ0hETENfQ09NTVVOSUNBVElPTlM7Ci0JfQotCQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCi0JY2FyZC0+dS5jLmNvbW1fZW5hYmxlZCA9IDA7Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGNvbW11bmljYXRpb25zLgotICovCi0KLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9lbmFibGUgKHNkbGFfdCogY2FyZCkKLXsKLQlpbnQgZXJyOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0KLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBFTkFCTEVfQ0hETENfQ09NTVVOSUNBVElPTlM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykKLQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0JZWxzZQotCQljYXJkLT51LmMuY29tbV9lbmFibGVkID0gMTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgY29tbXVuaWNhdGlvbiBlcnJvciBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfY29tbV9lcnJfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotICAgICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1iLT5jb21tYW5kID0gUkVBRF9DT01NU19FUlJPUl9TVEFUUzsKLSAgICAgICAgZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotICAgICAgICBpZiAoZXJyICE9IENPTU1BTkRfT0spCi0gICAgICAgICAgICAgICAgY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotICAgICAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBDSERMQyBvcGVyYXRpb25hbCBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfb3Bfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotICAgICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUzsKLSAgICAgICAgZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotICAgICAgICBpZiAoZXJyICE9IENPTU1BTkRfT0spCi0gICAgICAgICAgICAgICAgY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotICAgICAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGNvbW11bmljYXRpb25zIGVycm9yIGFuZCBnZW5lcmFsIHBhY2tldCBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZV9jb21tc19zdGF0cyhzZGxhX3QqIGNhcmQsCi0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSkKLXsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLSAgCUNPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVCogZXJyX3N0YXRzOwotICAgICAgICBDSERMQ19PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1QgKm9wX3N0YXRzOwotCi0JLyogb24gdGhlIGZpcnN0IHRpbWVyIGludGVycnVwdCwgcmVhZCB0aGUgY29tbXMgZXJyb3Igc3RhdGlzdGljcyAqLwotCWlmKGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID09IDIpIHsKLQkJaWYoY2hkbGNfcmVhZF9jb21tX2Vycl9zdGF0cyhjYXJkKSkKLQkJCXJldHVybiAxOwotCQllcnJfc3RhdHMgPSAoQ09NTVNfRVJST1JfU1RBVFNfU1RSVUNUICopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9vdmVyX2Vycm9ycyA9IAotCQkJCWVycl9zdGF0cy0+Unhfb3ZlcnJ1bl9lcnJfY291bnQ7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9jcmNfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5DUkNfZXJyX2NvdW50OwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZnJhbWVfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9hYm9ydF9jb3VudDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9kaXNfcHJpX2JmcnNfZnVsbF9jb3VudDsgCi0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0KLQkJCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZmlmb19lcnJvcnM7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9Ci0JCQkJZXJyX3N0YXRzLT5zZWNfVHhfYWJvcnRfY291bnQ7Ci0JfQotCi0gICAgICAgIC8qIG9uIHRoZSBzZWNvbmQgdGltZXIgaW50ZXJydXB0LCByZWFkIHRoZSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0JZWxzZSB7Ci0gICAgICAgIAlpZihjaGRsY19yZWFkX29wX3N0YXRzKGNhcmQpKQotICAgICAgICAgICAgICAgIAlyZXR1cm4gMTsKLQkJb3Bfc3RhdHMgPSAoQ0hETENfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUICopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0KLQkJCShvcF9zdGF0cy0+UnhfRGF0YV9kaXNjYXJkX3Nob3J0X2NvdW50ICsKLQkJCW9wX3N0YXRzLT5SeF9EYXRhX2Rpc2NhcmRfbG9uZ19jb3VudCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBwYWNrZXQuCi0gKglSZXR1cm46CTAgLSBvLmsuCi0gKgkJMSAtIG5vIHRyYW5zbWl0IGJ1ZmZlcnMgYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfc2VuZCAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4pCi17Ci0JQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICp0eGJ1ZiA9IGNhcmQtPnUuYy50eGJ1ZjsKLQotCWlmICh0eGJ1Zi0+b3BwX2ZsYWcpCi0JCXJldHVybiAxOwotCQotCXNkbGFfcG9rZSgmY2FyZC0+aHcsIHR4YnVmLT5wdHJfZGF0YV9iZnIsIGRhdGEsIGxlbik7Ci0KLQl0eGJ1Zi0+ZnJhbWVfbGVuZ3RoID0gbGVuOwotCXR4YnVmLT5vcHBfZmxhZyA9IDE7CQkvKiBzdGFydCB0cmFuc21pc3Npb24gKi8KLQkKLQkvKiBVcGRhdGUgdHJhbnNtaXQgYnVmZmVyIGNvbnRyb2wgZmllbGRzICovCi0JY2FyZC0+dS5jLnR4YnVmID0gKyt0eGJ1ZjsKLQkKLQlpZiAoKHZvaWQqKXR4YnVmID4gY2FyZC0+dS5jLnR4YnVmX2xhc3QpCi0JCWNhcmQtPnUuYy50eGJ1ZiA9IGNhcmQtPnUuYy50eGJ1Zl9iYXNlOwotCQotCXJldHVybiAwOwotfQotCi0vKioqKioqIEZpcm13YXJlIEVycm9yIEhhbmRsZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaXJtd2FyZSBlcnJvciBoYW5kbGVyLgotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZlciBmaXJtd2FyZSBjb21tYW5kIHJldHVybnMgbm9uLXplcm8KLSAqCXJldHVybiBjb2RlLgotICoKLSAqIFJldHVybiB6ZXJvIGlmIHByZXZpb3VzIGNvbW1hbmQgaGFzIHRvIGJlIGNhbmNlbGxlZC4KLSAqLwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpCi17Ci0JdW5zaWduZWQgY21kID0gbWItPmNvbW1hbmQ7Ci0KLQlzd2l0Y2ggKGVycikgewotCi0JY2FzZSBDTURfVElNRU9VVDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjbWQpOwotCQlicmVhazsKLQotCWNhc2UgUzUxNF9CT1RIX1BPUlRTX1NBTUVfQ0xLX01PREU6Ci0JCWlmKGNtZCA9PSBTRVRfQ0hETENfQ09ORklHVVJBVElPTikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICIlczogQ29uZmlndXJlIGJvdGggcG9ydHMgZm9yIHRoZSBzYW1lIGNsb2NrIHNvdXJjZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCwgZXJyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioqKioqKioqKiBCb3R0b20gSGFsZiBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTk9URTogVGhlcmUgaXMgbm8gQVBJLCBCSCBzdXBwb3J0IGZvciBLZXJuZWxzIGxvd2VyIHRoYW4gMi4yLlguCi0gKiAgICAgICBETyBOT1QgSU5TRVJUIEFOWSBDT0RFIEhFUkUsIE5PVElDRSBUSEUgCi0gKiAgICAgICBQUkVQUk9DRVNTT1IgU1RBVEVNRU5UIEFCT1ZFLCBVTkxFU1MgWU9VIEtOT1cgV0hBVCBZT1UgQVJFCi0gKiAgICAgICBET0lORyAqLwotCi1zdGF0aWMgdm9pZCBjaGRsY193b3JrKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSA9PSAwKXsKLQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJcmV0dXJuOwotCX0KLQotCXdoaWxlIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSl7Ci0KLQkJc2tiICA9ICgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+YmhfcmVhZF0pLT5za2I7Ci0KLQkJaWYgKHNrYiAhPSBOVUxMKXsKLQotCQkJaWYgKGNoYW4tPmNvbW1vbi5zayA9PSBOVUxMIHx8IGNoYW4tPmNvbW1vbi5mdW5jID09IE5VTEwpewotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCQljaGRsY193b3JrX2NsZWFudXAoZGV2KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKGNoYW4tPmNvbW1vbi5mdW5jKHNrYixkZXYsY2hhbi0+Y29tbW9uLnNrKSAhPSAwKXsKLQkJCQkvKiBTb2NrIGZ1bGwgY2Fubm90IHNlbmQsIHF1ZXVlIHVzIGZvciBhbm90aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRyeSAqLwotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5yZWNlaXZlX2Jsb2NrLDEpOwotCQkJCXJldHVybjsKLQkJCX1lbHNlewotCQkJCWNoZGxjX3dvcmtfY2xlYW51cChkZXYpOwotCQkJfQotCQl9ZWxzZXsKLQkJCWNoZGxjX3dvcmtfY2xlYW51cChkZXYpOwotCQl9Ci0JfQkKLQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGNoZGxjX3dvcmtfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGFuID0gZGV2LT5wcml2OwotCi0JKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF9yZWFkXSktPnNrYiA9IE5VTEw7Ci0KLQlpZiAoY2hhbi0+YmhfcmVhZCA9PSBNQVhfQkhfQlVGRil7Ci0JCWNoYW4tPmJoX3JlYWQ9MDsKLQl9ZWxzZXsKLQkJKytjaGFuLT5iaF9yZWFkOwkKLQl9Ci0KLQlhdG9taWNfZGVjKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludCBiaF9lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JLyogQ2hlY2sgZm9yIGZ1bGwgKi8KLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IChNQVhfQkhfQlVGRisxKSl7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAxOyAKLQl9Ci0KLQkoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3dyaXRlXSktPnNrYiA9IHNrYjsKLQotCWlmIChjaGFuLT5iaF93cml0ZSA9PSBNQVhfQkhfQlVGRil7Ci0JCWNoYW4tPmJoX3dyaXRlPTA7Ci0JfWVsc2V7Ci0JCSsrY2hhbi0+Ymhfd3JpdGU7Ci0JfQotCi0JYXRvbWljX2luYygmY2hhbi0+YmhfYnVmZl91c2VkKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBFTkQgT0YgQVBJIEJIIFN1cHBvcnQgKi8KLQotCi0vKioqKioqIEludGVycnVwdCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCi0gKi8KLXN0YXRpYyB2b2lkIHdwY19pc3IgKHNkbGFfdCogY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QqIGZsYWdzID0gTlVMTDsKLQlpbnQgaTsKLQlzZGxhX3QgKm15X2NhcmQ7Ci0KLQotCS8qIENoZWNrIGZvciB3aGljaCBwb3J0IHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gZ2VuZXJhdGVkCi0JICogU2luY2UgU2Vjb25kYXJ5IFBvcnQgaXMgcGlnZ3liYWNraW5nIG9uIHRoZSBQcmltYXJ5Ci0gICAgICAgICAqIHRoZSBjaGVjayBtdXN0IGJlIGRvbmUgaGVyZS4gCi0JICovCi0KLQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlpZiAoIWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpewotCQkvKiBDaGVjayBmb3IgYSBzZWNvbmQgcG9ydCAocGlnZ3liYWNraW5nKSAqLwotCQlpZiAoKG15X2NhcmQgPSBjYXJkLT5uZXh0KSl7Ci0JCQlmbGFncyA9IG15X2NhcmQtPnUuYy5mbGFnczsKLQkJCWlmIChmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlKXsKLQkJCQljYXJkID0gbXlfY2FyZDsKLQkJCQljYXJkLT5pc3IoY2FyZCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCi0JZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JY2FyZC0+aW5faXNyID0gMTsKLQlkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCQotCS8qIElmIHdlIGdldCBhbiBpbnRlcnJ1cHQgd2l0aCBubyBuZXR3b3JrIGRldmljZSwgc3RvcCB0aGUgaW50ZXJydXB0cwotCSAqIGFuZCBpc3N1ZSBhbiBlcnJvciAqLwotCWlmICghY2FyZC0+dHR5X29wdCAmJiAhZGV2ICYmIAotCSAgICBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlICE9IAotCSAgICAJQ09NTUFORF9DT01QTEVURV9BUFBfSU5UX1BFTkQpewotCi0JCWdvdG8gaXNyX2RvbmU7Ci0JfQotCQotCS8qIGlmIGNyaXRpY2FsIGR1ZSB0byBwZXJpcGhlcmFsIG9wZXJhdGlvbnMKLQkgKiBpZS4gdXBkYXRlKCkgb3IgZ2V0c3RhdHMoKSB0aGVuIHJlc2V0IHRoZSBpbnRlcnJ1cHQgYW5kCi0JICogd2FpdCBmb3IgdGhlIGJvYXJkIHRvIHJldHJpZ2dlci4KLQkgKi8KLQlpZih0ZXN0X2JpdChQRVJJX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJJU1IgQ1JJVCBUTyBQRVJJXG4iKTsKLQkJZ290byBpc3JfZG9uZTsKLQl9Ci0KLQkvKiBPbiBhIDUwOCBDYXJkLCBpZiBjcml0aWNhbCBkdWUgdG8gaWZfc2VuZCAKLSAgICAgICAgICogTWFqb3IgRXJyb3IgISEhICovCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpIHsKLQkJaWYodGVzdF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCB3aGlsZSBpbiBJU1I6ICVseFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkJY2FyZC0+aW5faXNyID0gMDsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUgPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0Jc3dpdGNoKGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpIHsKLQotCWNhc2UgUlhfQVBQX0lOVF9QRU5EOgkvKiAweDAxOiByZWNlaXZlIGludGVycnVwdCAqLwotCQlyeF9pbnRyKGNhcmQpOwotCQlicmVhazsKLQotCWNhc2UgVFhfQVBQX0lOVF9QRU5EOgkvKiAweDAyOiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPQotCQkJIH5BUFBfSU5UX09OX1RYX0ZSQU1FOwotCi0JCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJCXdhbnBpcGVfdHR5X3RyaWdnZXJfcG9sbChjYXJkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGRldiAmJiBuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpewotCQkJaWYgKGNhcmQtPnUuYy51c2VkYnkgPT0gQVBJKXsKLQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJCXdha2V1cF9za19iaChkZXYpOwotCQkJfWVsc2V7Ci0JCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORDovKiAweDA0OiBjbWQgY3BsdCAqLwotCQkrKyBJbnRyX3Rlc3RfY291bnRlcjsKLQkJYnJlYWs7Ci0KLQljYXNlIENIRExDX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EOgkvKiAweDIwICovCi0JCXByb2Nlc3NfY2hkbGNfZXhjZXB0aW9uKGNhcmQpOwotCQlicmVhazsKLQotCWNhc2UgR0xPQkFMX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EOgotCQlwcm9jZXNzX2dsb2JhbF9leGNlcHRpb24oY2FyZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBUSU1FUl9BUFBfSU5UX1BFTkQ6Ci0JCXRpbWVyX2ludHIoY2FyZCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNwdXJpb3VzIGludGVycnVwdCAweCUwMlghXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsCi0JCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ29kZSBuYW1lOiAiKTsKLQkJZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLQkJCXByaW50ayhLRVJOX0lORk8gIiVjIiwKLQkJCQlmbGFncy0+Z2xvYmFsX2luZm9fc3RydWN0LmNvZGVuYW1lW2ldKTsgCi0JCXByaW50ayhLRVJOX0lORk8gIlxuQ29kZSB2ZXJzaW9uOiAiKTsKLQkgCWZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0JCQlwcmludGsoS0VSTl9JTkZPICIlYyIsIAotCQkJCWZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZXZlcnNpb25baV0pOyAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsJCi0JCWJyZWFrOwotCX0KLQotaXNyX2RvbmU6Ci0KLQljYXJkLT5pbl9pc3IgPSAwOwotCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUgPSAwOwotCXJldHVybjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWNlaXZlIGludGVycnVwdCBoYW5kbGVyLgotICovCi1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhOwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCUNIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVCAqcnhidWYgPSBjYXJkLT51LmMucnhtYjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxlbjsKLQl1bnNpZ25lZCBhZGRyID0gcnhidWYtPnB0cl9kYXRhX2JmcjsKLQl2b2lkICpidWY7Ci0JaW50IGksdWRwX3R5cGU7Ci0KLQlpZiAocnhidWYtPm9wcF9mbGFnICE9IDB4MDEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogY29ycnVwdGVkIFJ4IGJ1ZmZlciBAIDB4JVgsIGZsYWcgPSAweCUwMlghXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsICh1bnNpZ25lZClyeGJ1ZiwgcnhidWYtPm9wcF9mbGFnKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJDb2RlIG5hbWU6ICIpOwotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZW5hbWVbaV0pOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIlxuQ29kZSB2ZXJzaW9uOiAiKTsKLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCA0OyBpICsrKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy0+Z2xvYmFsX2luZm9fc3RydWN0LmNvZGV2ZXJzaW9uW2ldKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0KLQkJLyogQnVnIEZpeDogTWFyIDYgMjAwMAotICAgICAgICAgICAgICAgICAqIElmIHdlIGdldCBhIGNvcnJ1cHRlZCBtYWlsYm94LCBpdCBtZWFzbiB0aGF0IGRyaXZlciAKLSAgICAgICAgICAgICAgICAgKiBpcyBvdXQgb2Ygc3luYyB3aXRoIHRoZSBmaXJtd2FyZS4gVGhlcmUgaXMgbm8gcmVjb3ZlcnkuCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZG9uJ3QgdHVybiBvZmYgYWxsIGludGVycnVwdHMgZm9yIHRoaXMgY2FyZAotICAgICAgICAgICAgICAgICAqIHRoZSBtYWNoaW5lIHdpbGwgY3Jhc2guIAotICAgICAgICAgICAgICAgICAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgcm91dGVyIGZhaWx1cmUgLi4uISEhXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXMgIVxuIik7Ci0JCWNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwwKTsJCi0JCXJldHVybjsKLQl9Ci0KLQlsZW4gID0gcnhidWYtPmZyYW1lX2xlbmd0aDsKLQotCWlmIChjYXJkLT50dHlfb3B0KXsKLQotCQlpZiAocnhidWYtPmVycm9yX2ZsYWcpewkKLQkJCWdvdG8gcnhfZXhpdDsKLQkJfQotCi0JCWlmIChsZW4gPD0gQ1JDX0xFTkdUSCl7Ci0JCQlnb3RvIHJ4X2V4aXQ7Ci0JCX0KLQkJCi0JCWlmICghY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQkJbGVuIC09IENSQ19MRU5HVEg7Ci0JCX0KLQotCQl3YW5waXBlX3R0eV9yZWNlaXZlKGNhcmQsYWRkcixsZW4pOwotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCi0JZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQotCWlmICghZGV2KXsKLQkJZ290byByeF9leGl0OwotCX0KLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlnb3RvIHJ4X2V4aXQ7Ci0KLQljaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0KLQkKLQkvKiBBbGxvY2F0ZSBzb2NrZXQgYnVmZmVyICovCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwotCi0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBzb2NrZXQgYnVmZmVycyBhdmFpbGFibGUhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZ290byByeF9leGl0OwotCX0KLQotCS8qIENvcHkgZGF0YSB0byB0aGUgc29ja2V0IGJ1ZmZlciAqLwotCWlmKChhZGRyICsgbGVuKSA+IGNhcmQtPnUuYy5yeF90b3AgKyAxKSB7Ci0JCXVuc2lnbmVkIHRtcCA9IGNhcmQtPnUuYy5yeF90b3AgLSBhZGRyICsgMTsKLQkJYnVmID0gc2tiX3B1dChza2IsIHRtcCk7Ci0JCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGJ1ZiwgdG1wKTsKLQkJYWRkciA9IGNhcmQtPnUuYy5yeF9iYXNlOwotCQlsZW4gLT0gdG1wOwotCX0KLQkJCi0JYnVmID0gc2tiX3B1dChza2IsIGxlbik7Ci0Jc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgYnVmLCBsZW4pOwotCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLQotCWNhcmQtPndhbmRldi5zdGF0cy5yeF9wYWNrZXRzICsrOwotCWNhcmQtPndhbmRldi5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZSggc2tiLCBjYXJkICk7Ci0KLQlpZih1ZHBfdHlwZSA9PSBVRFBfQ1BJUEVfVFlQRSkgewotCQlpZihzdG9yZV91ZHBfbWdtdF9wa3QoVURQX1BLVF9GUk1fTkVUV09SSywKLSAgIAkJCQkgICAgICBjYXJkLCBza2IsIGRldiwgY2hkbGNfcHJpdl9hcmVhKSkgewotICAgICAJCSAgICAgICAgZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC4KLQkJCQkJCWludGVycnVwdF9wZXJtaXNzaW9uIHw9IAotCQkJCQkJCUFQUF9JTlRfT05fVElNRVI7IAotCQl9Ci0JfSBlbHNlIGlmKGNhcmQtPnUuYy51c2VkYnkgPT0gQVBJKSB7Ci0KLQkJYXBpX3J4X2hkcl90KiBhcGlfcnhfaGRyOwotICAgICAgIAkJc2tiX3B1c2goc2tiLCBzaXplb2YoYXBpX3J4X2hkcl90KSk7Ci0gICAgICAgICAgICAgICAgYXBpX3J4X2hkciA9IChhcGlfcnhfaGRyX3QqKSZza2ItPmRhdGFbMHgwMF07Ci0JCWFwaV9yeF9oZHItPmVycm9yX2ZsYWcgPSByeGJ1Zi0+ZXJyb3JfZmxhZzsKLSAgICAgCQlhcGlfcnhfaGRyLT50aW1lX3N0YW1wID0gcnhidWYtPnRpbWVfc3RhbXA7Ci0KLSAgICAgICAgICAgICAgICBza2ItPnByb3RvY29sID0gaHRvbnMoUFZDX1BST1QpOwotICAgICAJCXNrYi0+bWFjLnJhdyAgPSBza2ItPmRhdGE7Ci0JCXNrYi0+ZGV2ICAgICAgPSBkZXY7Ci0gICAgICAgICAgICAgICAJc2tiLT5wa3RfdHlwZSA9IFdBTl9QQUNLRVRfREFUQTsKLQotCQliaF9lbnF1ZXVlKGRldiwgc2tiKTsKLQotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwmY2hkbGNfcHJpdl9hcmVhLT50cV93b3JraW5nKSkKLQkJCXdhbnBpcGVfcXVldWVfd29yaygmY2hkbGNfcHJpdl9hcmVhLT5jb21tb24ud2FucGlwZV93b3JrKTsKLQl9ZWxzZXsKLQkJLyogRklYTUU6IHdlIHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlIHJlY2VpdmVkIHBhY2tldCBpcyBhIAotICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWNhc3QgcGFja2V0IHNvIHRoYXQgd2UgY2FuIGluY3JlbWVudCB0aGUgbXVsdGljYXN0IAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKysgY2hkbGNfcHJpdl9hcmVhLT5pZl9zdGF0cy5tdWx0aWNhc3Q7Ci0JCSovCi0gICAgICAgICAgICAgICAJLyogUGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgKi8KLQkKLSAgICAgICAgICAgICAgICBza2ItPmRldiA9IGRldjsKLSAgICAgICAgICAgICAgICBza2ItPm1hYy5yYXcgID0gc2tiLT5kYXRhOwotICAgICAgICAgICAgICAgIG5ldGlmX3J4KHNrYik7Ci0gICAgICAgICAgICAgICAgZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQl9Ci0KLXJ4X2V4aXQ6Ci0JLyogUmVsZWFzZSBidWZmZXIgZWxlbWVudCBhbmQgY2FsY3VsYXRlIGEgcG9pbnRlciB0byB0aGUgbmV4dCBvbmUgKi8KLQlyeGJ1Zi0+b3BwX2ZsYWcgPSAweDAwOwotCWNhcmQtPnUuYy5yeG1iID0gKysgcnhidWY7Ci0JaWYoKHZvaWQqKXJ4YnVmID4gY2FyZC0+dS5jLnJ4YnVmX2xhc3QpewotCQljYXJkLT51LmMucnhtYiA9IGNhcmQtPnUuYy5yeGJ1Zl9iYXNlOwotCX0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUaW1lciBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqIFRoZSB0aW1lciBpbnRlcnJ1cHQgaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOgotICogICAgMSkgUHJvY2Vzc2luZyB1ZHAgY2FsbHMgZnJvbSAnY3BpcGVtb24nLgotICogICAgMikgUmVhZGluZyBib2FyZC1sZXZlbCBzdGF0aXN0aWNzIGZvciB1cGRhdGluZyB0aGUgcHJvYyBmaWxlIHN5c3RlbS4KLSAqLwotdm9pZCB0aW1lcl9pbnRyKHNkbGFfdCAqY2FyZCkKLXsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLSAgICAgICAgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSA9IE5VTEw7Ci0gICAgICAgIFNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QqIGZsYWdzID0gTlVMTDsKLQotICAgICAgICBpZiAoKGRldiA9IGNhcmQtPndhbmRldi5kZXYpPT1OVUxMKXsKLQkJZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0gICAgICAgICAgICAgICAgZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPQotICAgICAgICAgICAgICAgICAgICAgICAgfkFQUF9JTlRfT05fVElNRVI7Ci0JCXJldHVybjsKLQl9Ci0JCi0gICAgICAgIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotCWlmIChjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRykgewotCQlpZiAoIWNvbmZpZ19jaGRsYyhjYXJkKSl7Ci0JCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCQl9Ci0JfQotCi0JLyogcHJvY2VzcyBhIHVkcCBjYWxsIGlmIHBlbmRpbmcgKi8KLSAgICAgICAJaWYoY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VRFApIHsKLSAgICAgICAgICAgICAgIAlwcm9jZXNzX3VkcF9tZ210X3BrdChjYXJkLCBkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoZGxjX3ByaXZfYXJlYSk7Ci0JCWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VRFA7Ci0gICAgICAgIH0KLQotCS8qIHJlYWQgdGhlIGNvbW11bmljYXRpb25zIHN0YXRpc3RpY3MgaWYgcmVxdWlyZWQgKi8KLQlpZihjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VQREFURSkgewotCQl1cGRhdGVfY29tbXNfc3RhdHMoY2FyZCwgY2hkbGNfcHJpdl9hcmVhKTsKLSAgICAgICAgICAgICAgICBpZighKC0tIGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzKSkgewotCQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSAKLQkJCQl+VE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLQkJfQotICAgICAgICB9Ci0KLQkvKiBvbmx5IGRpc2FibGUgdGhlIHRpbWVyIGludGVycnVwdCBpZiB0aGVyZSBhcmUgbm8gdWRwIG9yIHN0YXRpc3RpYyAqLwotCS8qIHVwZGF0ZXMgcGVuZGluZyAqLwotICAgICAgICBpZighY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCkgewotICAgICAgICAgICAgICAgIGZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotICAgICAgICAgICAgICAgIGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0KLSAgICAgICAgICAgICAgICAgICAgICAgIH5BUFBfSU5UX09OX1RJTUVSOwotICAgICAgICB9Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIE1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zCi0JLSBzZXRfY2hkbGNfY29uZmlnKCkgdXNlZCB0byBzZXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoZSBib2FyZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGludCBzZXRfY2hkbGNfY29uZmlnKHNkbGFfdCogY2FyZCkKLXsKLQlDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCBjZmc7Ci0KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUKSk7Ci0KLQlpZihjYXJkLT53YW5kZXYuY2xvY2tpbmcpewotCQljZmcuYmF1ZF9yYXRlID0gY2FyZC0+d2FuZGV2LmJwczsKLQl9Ci0JCQotCWNmZy5saW5lX2NvbmZpZ19vcHRpb25zID0gKGNhcmQtPndhbmRldi5pbnRlcmZhY2UgPT0gV0FOT1BUX1JTMjMyKSA/Ci0JCUlOVEVSRkFDRV9MRVZFTF9SUzIzMiA6IElOVEVSRkFDRV9MRVZFTF9WMzU7Ci0KLQljZmcubW9kZW1fY29uZmlnX29wdGlvbnMJPSAwOwotCWNmZy5tb2RlbV9zdGF0dXNfdGltZXIJCT0gMTAwOwotCi0JY2ZnLkNIRExDX3Byb3RvY29sX29wdGlvbnMJPSBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9uczsKLQotCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJY2ZnLkNIRExDX0FQSV9vcHRpb25zCT0gRElTQ0FSRF9SWF9FUlJPUl9GUkFNRVM7Ci0JfQotCQotCWNmZy5wZXJjZW50X2RhdGFfYnVmZmVyX2Zvcl9UeCAgPSAoY2FyZC0+dS5jLnJlY2VpdmVfb25seSkgPyAwIDogNTA7Ci0JY2ZnLkNIRExDX3N0YXRpc3RpY3Nfb3B0aW9ucwk9IChDSERMQ19UWF9EQVRBX0JZVEVfQ09VTlRfU1RBVCB8Ci0JCUNIRExDX1JYX0RBVEFfQllURV9DT1VOVF9TVEFUKTsKLQkKLQlpZiAoY2FyZC0+dHR5X29wdCl7Ci0JCWNhcmQtPndhbmRldi5tdHUgPSBUVFlfQ0hETENfTUFYX01UVTsKLQl9Ci0JY2ZnLm1heF9DSERMQ19kYXRhX2ZpZWxkX2xlbmd0aAk9IGNhcmQtPndhbmRldi5tdHU7Ci0JY2ZnLnRyYW5zbWl0X2tlZXBhbGl2ZV90aW1lcgk9IGNhcmQtPnUuYy5rcGFsdl90eDsKLQljZmcucmVjZWl2ZV9rZWVwYWxpdmVfdGltZXIJPSBjYXJkLT51LmMua3BhbHZfcng7Ci0JY2ZnLmtlZXBhbGl2ZV9lcnJvcl90b2xlcmFuY2UJPSBjYXJkLT51LmMua3BhbHZfZXJyOwotCWNmZy5TTEFSUF9yZXF1ZXN0X3RpbWVyCQk9IGNhcmQtPnUuYy5zbGFycF90aW1lcjsKLQotCWlmIChjZmcuU0xBUlBfcmVxdWVzdF90aW1lcikgewotCQljZmcuSVBfYWRkcmVzcwkJPSAwOwotCQljZmcuSVBfbmV0bWFzawkJPSAwOwotCQkKLQl9ZWxzZSBpZiAoY2FyZC0+d2FuZGV2LmRldil7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCQkKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBkZXYtPmlwX3B0cjsKLQotCQlpZihpbl9kZXYgIT0gTlVMTCkgewotCQkJc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsKLQotCQkJaWYgKGlmYSAhPSBOVUxMICkgewotCQkJCWNmZy5JUF9hZGRyZXNzCT0gbnRvaGwoaWZhLT5pZmFfbG9jYWwpOwotCQkJCWNmZy5JUF9uZXRtYXNrCT0gbnRvaGwoaWZhLT5pZmFfbWFzayk7IAotCQkJCWNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyA9IG50b2hsKGlmYS0+aWZhX2xvY2FsKTsKLQkJCQljaGRsY19wcml2X2FyZWEtPklQX25ldG1hc2sgPSBudG9obChpZmEtPmlmYV9tYXNrKTsgCi0JCQl9Ci0JCX0KLQotCQkvKiBGSVhNRTogV2UgbXVzdCByZS10aGluayB0aGlzIG1lc3NhZ2UgaW4gbmV4dCByZWxlYXNlCi0JCWlmKChjZmcuSVBfYWRkcmVzcyAmIDB4MDAwMDAwRkYpID4gMikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiXG4iKTsKLQkgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiICBXQVJOSU5HOiVzIGNvbmZpZ3VyZWQgd2l0aCBhblxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgaW52YWxpZCBsb2NhbCBJUCBhZGRyZXNzLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIgIFNsYXJwIHByYWdtYXRpY3Mgd2lsbCBmYWlsLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIgIElQIGFkZHJlc3Mgc2hvdWxkIGJlIG9mIHRoZVxuIik7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIgIGZvcm1hdCBBLkIuQy4xIG9yIEEuQi5DLjIuXG4iKTsKLQkJfQotCQkqLwkJCi0JfQotCQotCXJldHVybiBjaGRsY19jb25maWd1cmUoY2FyZCwgJmNmZyk7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgc2V0X2FzeV9jb25maWcoKSB1c2VkIHRvIHNldCBhc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoZSBib2FyZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGludCBzZXRfYXN5X2NvbmZpZyhzZGxhX3QqIGNhcmQpCi17Ci0KLSAgICAgICAgQVNZX0NPTkZJR1VSQVRJT05fU1RSVUNUIGNmZzsKLSAJQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1haWxib3ggPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKEFTWV9DT05GSUdVUkFUSU9OX1NUUlVDVCkpOwotCi0JaWYoY2FyZC0+d2FuZGV2LmNsb2NraW5nKQotCQljZmcuYmF1ZF9yYXRlID0gY2FyZC0+d2FuZGV2LmJwczsKLQotCWNmZy5saW5lX2NvbmZpZ19vcHRpb25zID0gKGNhcmQtPndhbmRldi5pbnRlcmZhY2UgPT0gV0FOT1BUX1JTMjMyKSA/Ci0JCUlOVEVSRkFDRV9MRVZFTF9SUzIzMiA6IElOVEVSRkFDRV9MRVZFTF9WMzU7Ci0KLQljZmcubW9kZW1fY29uZmlnX29wdGlvbnMJPSAwOwotCWNmZy5hc3lfQVBJX29wdGlvbnMgCQk9IGNhcmQtPnUuYy5hcGlfb3B0aW9uczsKLQljZmcuYXN5X3Byb3RvY29sX29wdGlvbnMJPSBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9uczsKLQljZmcuVHhfYml0c19wZXJfY2hhcgkJPSBjYXJkLT51LmMudHhfYml0c19wZXJfY2hhcjsKLQljZmcuUnhfYml0c19wZXJfY2hhcgkJPSBjYXJkLT51LmMucnhfYml0c19wZXJfY2hhcjsKLQljZmcuc3RvcF9iaXRzCQkJPSBjYXJkLT51LmMuc3RvcF9iaXRzOwotCWNmZy5wYXJpdHkJCQk9IGNhcmQtPnUuYy5wYXJpdHk7Ci0JY2ZnLmJyZWFrX3RpbWVyCQkJPSBjYXJkLT51LmMuYnJlYWtfdGltZXI7Ci0JY2ZnLmFzeV9SeF9pbnRlcl9jaGFyX3RpbWVyCT0gY2FyZC0+dS5jLmludGVyX2NoYXJfdGltZXI7IAotCWNmZy5hc3lfUnhfY29tcGxldGVfbGVuZ3RoCT0gY2FyZC0+dS5jLnJ4X2NvbXBsZXRlX2xlbmd0aDsgCi0JY2ZnLlhPTl9jaGFyCQkJPSBjYXJkLT51LmMueG9uX2NoYXI7Ci0JY2ZnLlhPRkZfY2hhcgkJCT0gY2FyZC0+dS5jLnhvZmZfY2hhcjsKLQljZmcuYXN5X3N0YXRpc3RpY3Nfb3B0aW9ucwk9IChDSERMQ19UWF9EQVRBX0JZVEVfQ09VTlRfU1RBVCB8Ci0JCUNIRExDX1JYX0RBVEFfQllURV9DT1VOVF9TVEFUKTsKLQotCW1haWxib3gtPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoQVNZX0NPTkZJR1VSQVRJT05fU1RSVUNUKTsKLQltZW1jcHkobWFpbGJveC0+ZGF0YSwgJmNmZywgbWFpbGJveC0+YnVmZmVyX2xlbmd0aCk7Ci0JbWFpbGJveC0+Y29tbWFuZCA9IFNFVF9BU1lfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWFpbGJveCkgPyBtYWlsYm94LT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykgCi0JCWNoZGxjX2Vycm9yIChjYXJkLCBlcnIsIG1haWxib3gpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGFzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9ucy4KLSAqLwotCi1zdGF0aWMgaW50IGFzeV9jb21tX2VuYWJsZSAoc2RsYV90KiBjYXJkKQotewotCi0JaW50IGVycjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gRU5BQkxFX0FTWV9DT01NVU5JQ0FUSU9OUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDT01NQU5EX09LICYmIGNhcmQtPndhbmRldi5kZXYpCi0JCWNoZGxjX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCQotCWlmICghZXJyKQotCQljYXJkLT51LmMuY29tbV9lbmFibGVkID0gMTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBnbG9iYWwgZXhjZXB0aW9uIGNvbmRpdGlvbgotICovCi1zdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltYm94LT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYm94LT5jb21tYW5kID0gUkVBRF9HTE9CQUxfRVhDRVBUSU9OX0NPTkRJVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JaWYoZXJyICE9IENNRF9USU1FT1VUICl7Ci0JCi0JCXN3aXRjaChtYm94LT5yZXR1cm5fY29kZSkgewotICAgICAgICAgCi0JICAgICAgCWNhc2UgRVhDRVBfTU9ERU1fU1RBVFVTX0NIQU5HRToKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1vZGVtIHN0YXR1cyBjaGFuZ2VcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQkJCXN3aXRjaChtYm94LT5kYXRhWzBdICYgKERDRF9ISUdIIHwgQ1RTX0hJR0gpKSB7Ci0JCQkJY2FzZSAoRENEX0hJR0gpOgotCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogRENEIGhpZ2gsIENUUyBsb3dcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgKENUU19ISUdIKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRENEIGxvdywgQ1RTIGhpZ2hcbiIsY2FyZC0+ZGV2bmFtZSk7IAotCQkJCQlicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoKERDRF9ISUdIIHwgQ1RTX0hJR0gpKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRENEIGhpZ2gsIENUUyBoaWdoXG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDRCBsb3csIENUUyBsb3dcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRVhDRVBfVFJDX0RJU0FCTEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmUgdHJhY2UgZGlzYWJsZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotCQljYXNlIEVYQ0VQX0lSUV9USU1FT1VUOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElSUSB0aW1lb3V0IG9jY3VycmVkXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOyAKLQkJCWJyZWFrOwotCi0JCWNhc2UgMHgxNzoKLQkJCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJCQlpZiAoY2FyZC0+dHR5ICYmIGNhcmQtPnR0eV9vcGVuKXsgCi0JCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJCQkiJXM6IE1vZGVtIEhhbmd1cCBFeGNlcHRpb246IEhhbmdpbmcgVXAhXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJCXR0eV9oYW5ndXAoY2FyZC0+dHR5KTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIElmIFRUWSBpcyBub3QgdXNlZCBqdXN0IGRyb3AgdGhyb3VnaHQgKi8KLQkJCQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogR2xvYmFsIGV4Y2VwdGlvbiAleFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYm94LT5yZXR1cm5fY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBjaGRsYyBleGNlcHRpb24gY29uZGl0aW9uCi0gKi8KLXN0YXRpYyBpbnQgcHJvY2Vzc19jaGRsY19leGNlcHRpb24oc2RsYV90ICpjYXJkKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfRVhDRVBUSU9OX0NPTkRJVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYoZXJyICE9IENNRF9USU1FT1VUKSB7Ci0JCi0JCXN3aXRjaCAoZXJyKSB7Ci0KLQkJY2FzZSBFWENFUF9MSU5LX0FDVElWRToKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNURUQpOwotCQkJdHJpZ2dlcl9jaGRsY19wb2xsKGNhcmQtPndhbmRldi5kZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9MSU5LX0lOQUNUSVZFX01PREVNOgotCQkJcG9ydF9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQl1bmNvbmZpZ3VyZV9pcChjYXJkKTsKLQkJCXRyaWdnZXJfY2hkbGNfcG9sbChjYXJkLT53YW5kZXYuZGV2KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRVhDRVBfTElOS19JTkFDVElWRV9LUEFMVjoKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEtlZXBhbGl2ZSB0aW1lciBleHBpcmVkLlxuIiwKLQkJCQkgCQljYXJkLT5kZXZuYW1lKTsKLQkJCXVuY29uZmlndXJlX2lwKGNhcmQpOwotCQkJdHJpZ2dlcl9jaGRsY19wb2xsKGNhcmQtPndhbmRldi5kZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9JUF9BRERSRVNTX0RJU0NPVkVSRUQ6Ci0JCQlpZiAoY29uZmlndXJlX2lwKGNhcmQpKSAKLQkJCQlyZXR1cm4gLTE7Ci0JCQlicmVhazsKLQotCQljYXNlIEVYQ0VQX0xPT1BCQUNLX0NPTkRJVElPTjoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMb29wYmFjayBDb25kaXRpb24gRGV0ZWN0ZWQuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIE5PX0NIRExDX0VYQ0VQX0NPTkRfVE9fUkVQT1JUOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIGV4Y2VwdGlvbnMgcmVwb3J0ZWQuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29uZmlndXJlIElQIGZyb20gU0xBUlAgbmVnb3RpYXRpb24KLSAqIFRoaXMgYWRkcyBkeW5hbWljIHJvdXRlcyB3aGVuIFNMQVJQIGhhcyBwcm92aWRlZCB2YWxpZCBhZGRyZXNzZXMKLSAqLwotCi1zdGF0aWMgaW50IGNvbmZpZ3VyZV9pcCAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhOwotICAgICAgICBjaGFyIGVycjsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gMDsKLQotCWNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQkKLQkKLSAgICAgICAgLyogc2V0IHRvIGRpc2NvdmVyICovCi0gICAgICAgIGlmKGNhcmQtPnUuYy5zbGFycF90aW1lciAhPSAweDAwKSB7Ci0JCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JCUNIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICpjZmc7Ci0KLSAgICAgCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOwotCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCi0JCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQljZmcgPSAoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YTsKLSAgICAgICAgICAgICAgICBjaGRsY19wcml2X2FyZWEtPklQX2FkZHJlc3MgPSBjZmctPklQX2FkZHJlc3M7Ci0gICAgICAgICAgICAgICAgY2hkbGNfcHJpdl9hcmVhLT5JUF9uZXRtYXNrID0gY2ZnLT5JUF9uZXRtYXNrOwotCi0JCS8qIFNldCBmbGFnIHRvIGFkZCByb3V0ZSAqLwotCQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IEFERF9ST1VURTsKLQotCQkvKiBUaGUgaWRlYSBoZXJlIGlzIHRvIGFkZCB0aGUgcm91dGUgaW4gdGhlIHBvbGwgcm91dGluZS4KLQkgICAJVGhpcyB3YXksIHdlIGFyZW4ndCBpbiBpbnRlcnJ1cHQgY29udGV4dCB3aGVuIGFkZGluZyByb3V0ZXMgKi8KLQkJdHJpZ2dlcl9jaGRsY19wb2xsKGRldik7Ci0gICAgICAgIH0KLQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVW4tQ29uZmlndXJlIElQIG5lZ290aWF0ZWQgYnkgU0xBUlAKLSAqIFRoaXMgcmVtb3ZlcyBkeW5hbWljIHJvdXRlcyB3aGVuIHRoZSBsaW5rIGJlY29tZXMgaW5hY3RpdmUuCi0gKi8KLQotc3RhdGljIGludCB1bmNvbmZpZ3VyZV9pcCAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWE7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIDA7Ci0KLQljaGRsY19wcml2X2FyZWE9IGRldi0+cHJpdjsKLQkKLQlpZiAoY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMgPT0gUk9VVEVfQURERUQpIHsKLQotCQkvKiBOb3RlOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIAotICAgICAgICAgICAgICAgICAqIHBvcnQgc3RhdGUgaGFzIGJlZW4gRElTQ09OTkVDVEVELiAgVGhpcyBzdGF0ZQotICAgICAgICAgICAgICAgICAqIGNoYW5nZSB3aWxsIHRyaWdnZXIgYSBwb2xsX2Rpc2Nvbm5lY3RlZCAKLSAgICAgICAgICAgICAgICAgKiBmdW5jdGlvbiwgdGhhdCB3aWxsIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4gCi0JCSAqLwotCQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IFJFTU9WRV9ST1VURTsKLQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSb3V0aW5lIHRvIGFkZC9yZW1vdmUgcm91dGVzIAotICogQ2FsbGVkIGxpa2UgYSBwb2xsaW5nIHJvdXRpbmUgd2hlbiBSb3V0ZXMgYXJlIGZsYWdnZWQgdG8gYmUgYWRkZWQvcmVtb3ZlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3JvdXRlIChzZGxhX3QgKmNhcmQpCi17Ci0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotICAgICAgICB1bnNpZ25lZCBjaGFyIHBvcnRfbnVtOwotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gTlVMTDsKLQl1MzIgbG9jYWxfSVBfYWRkciA9IDA7Ci0JdTMyIHJlbW90ZV9JUF9hZGRyID0gMDsKLQl1MzIgSVBfbmV0bWFzaywgSVBfYWRkcjsKLSAgICAgICAgaW50IGVyciA9IDA7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCW1tX3NlZ21lbnRfdCBmczsKLQlzdHJ1Y3QgaWZyZXEgaWZfaW5mbzsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICppZl9kYXRhMSwgKmlmX2RhdGEyOwotCQotICAgICAgICBjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0gICAgICAgIHBvcnRfbnVtID0gY2FyZC0+dS5jLmNvbW1fcG9ydDsKLQotCS8qIEJ1ZyBGaXggTWFyIDE2IDIwMDAKLQkgKiBBTkQgdGhlIElQIGFkZHJlc3MgdG8gdGhlIE1hc2sgYmVmb3JlIGNoZWNraW5nCi0gICAgICAgICAqIHRoZSBsYXN0IHR3byBiaXRzLiAqLwotCi0JaWYoKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID09IEFERF9ST1VURSkgJiYKLQkJKChjaGRsY19wcml2X2FyZWEtPklQX2FkZHJlc3MgJiB+Y2hkbGNfcHJpdl9hcmVhLT5JUF9uZXRtYXNrKSA+IDIpKSB7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER5bmFtaWMgcm91dGUgZmFpbHVyZS5cbiIsY2FyZC0+ZGV2bmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZihjYXJkLT51LmMuc2xhcnBfdGltZXIpIHsKLQkJCXUzMiBhZGRyX25ldCA9IGh0b25sKGNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyk7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCYWQgSVAgYWRkcmVzcyAldS4ldS4ldS4ldSByZWNlaXZlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLAotCQkJICAgICAgIE5JUFFVQUQoYWRkcl9uZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBmcm9tIHJlbW90ZSBzdGF0aW9uLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQotICAgICAgICAgICAgICAgIH1lbHNleyAKLQkJCXUzMiBhZGRyX25ldCA9IGh0b25sKGNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBCYWQgSVAgYWRkcmVzcyAldS4ldS4ldS4ldSBpc3N1ZWRcbiIsCi0JCQkgICAgICAgY2FyZC0+ZGV2bmFtZSwKLQkJCSAgICAgICBOSVBRVUFEKGFkZHJfbmV0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdG8gcmVtb3RlIHN0YXRpb24uIExvY2FsXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElQIGFkZHJlc3MgbXVzdCBiZSBBLkIuQy4xXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9yIEEuQi5DLjIuXG4iLGNhcmQtPmRldm5hbWUpOwotCQl9Ci0KLQkJLyogcmVtb3ZlIHRoZSByb3V0ZSBkdWUgdG8gdGhlIElQIGFkZHJlc3MgZXJyb3IgY29uZGl0aW9uICovCi0JCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID0gUkVNT1ZFX1JPVVRFOwotCQllcnIgPSAxOwotICAgCX0KLQotCS8qIElmIHdlIGFyZSByZW1vdmluZyBhIHJvdXRlIHdpdGggYmFkIElQIGFkZHJlc3NpbmcsIHRoZW4gdXNlIHRoZSAqLwotCS8qIGxvY2FsbHkgY29uZmlndXJlZCBJUCBhZGRyZXNzZXMgKi8KLSAgICAgICAgaWYoKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID09IFJFTU9WRV9ST1VURSkgJiYgZXJyKSB7Ci0KLSAJICAgICAgICAvKiBkbyBub3QgcmVtb3ZlIGEgYmFkIHJvdXRlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkICovCi0gICAgICAgIAlpZihjaGRsY19wcml2X2FyZWEtPnJvdXRlX3JlbW92ZWQpIHsKLQkgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAJfQotCi0gICAgICAgICAgICAgICAgaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0KLSAgICAgICAgICAgICAgICBpZihpbl9kZXYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZmEgIT0gTlVMTCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfSVBfYWRkciA9IGlmYS0+aWZhX2xvY2FsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUF9uZXRtYXNrICA9IGlmYS0+aWZhX21hc2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCX1lbHNleyAKLSAgICAgICAJCS8qIEFjY29yZGluZyB0byBDaXNjbyBIRExDLCBpZiB0aGUgcG9pbnQtdG8tcG9pbnQgYWRkcmVzcyBpcwotCQkgICBBLkIuQy4xLCB0aGVuIHdlIGFyZSB0aGUgb3Bwb3NpdGUgKEEuQi5DLjIpLCBhbmQgdmljZS12ZXJzYS4KLQkJKi8KLQkJSVBfbmV0bWFzayA9IG50b2hsKGNoZGxjX3ByaXZfYXJlYS0+SVBfbmV0bWFzayk7Ci0JICAgICAgICByZW1vdGVfSVBfYWRkciA9IG50b2hsKGNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyk7Ci0JCi0KLQkJLyogSWYgTmV0bWFzayBpcyAyNTUuMjU1LjI1NS4yNTUgdGhlIGxvY2FsIGFkZHJlc3MKLSAgICAgICAgICAgICAgICAgKiBjYWxjdWxhdGlvbiB3aWxsIGZhaWwuIERlZmF1bHQgaXQgYmFjayB0byAyNTUuMjU1LjI1NS4wICovCi0JCWlmIChJUF9uZXRtYXNrID09IDB4ZmZmZmZmZmYpCi0JCQlJUF9uZXRtYXNrICY9IDB4MDBmZmZmZmY7Ci0KLQkJLyogQnVnIEZpeCBNYXIgMTYgMjAwMAotCQkgKiBBTkQgdGhlIFJlbW90ZSBJUCBhZGRyZXNzIHdpdGggSVAgbmV0bWFzaywgaW5zdGVhZAotICAgICAgICAgICAgICAgICAqIG9mIHN0YXRpYyBuZXRtYXNrIG9mIDI1NS4yNTUuMjU1LjAgKi8KLSAgICAgICAgCWxvY2FsX0lQX2FkZHIgPSAocmVtb3RlX0lQX2FkZHIgJiBJUF9uZXRtYXNrKSArCi0gICAgICAgICAgICAgICAgCSh+cmVtb3RlX0lQX2FkZHIgJiBudG9obCgweDAwMDMpKTsKLQotCSAgICAgICAgaWYoIWNhcmQtPnUuYy5zbGFycF90aW1lcikgewotCQkJSVBfYWRkciA9IGxvY2FsX0lQX2FkZHI7Ci0JCQlsb2NhbF9JUF9hZGRyID0gcmVtb3RlX0lQX2FkZHI7Ci0JCQlyZW1vdGVfSVBfYWRkciA9IElQX2FkZHI7Ci0gICAgICAgCQl9Ci0JfQotCi0gICAgICAgIGZzID0gZ2V0X2ZzKCk7ICAgICAgICAgICAgICAgICAgLyogU2F2ZSBmaWxlIHN5c3RlbSAgKi8KLSAgICAgICAgc2V0X2ZzKGdldF9kcygpKTsgICAgICAgICAgICAgICAvKiBHZXQgdXNlciBzcGFjZSBibG9jayAqLwotCi0gICAgICAgIC8qIFNldHVwIGEgc3RydWN0dXJlIGZvciBhZGRpbmcvcmVtb3Zpbmcgcm91dGVzICovCi0gICAgICAgIG1lbXNldCgmaWZfaW5mbywgMCwgc2l6ZW9mKGlmX2luZm8pKTsKLSAgICAgICAgc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0KLQlzd2l0Y2ggKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzKSB7Ci0KLQljYXNlIEFERF9ST1VURToKLQotCQlpZighY2FyZC0+dS5jLnNsYXJwX3RpbWVyKSB7Ci0JCQlpZl9kYXRhMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJCWlmX2RhdGEyLT5zaW5fYWRkci5zX2FkZHIgPSByZW1vdGVfSVBfYWRkcjsKLQkJCWlmX2RhdGEyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJCWVyciA9IGRldmluZXRfaW9jdGwoU0lPQ1NJRkRTVEFERFIsICZpZl9pbmZvKTsKLQkJfSBlbHNlIHsgCi0JCQlpZl9kYXRhMSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfYWRkcjsKLQkJCWlmX2RhdGExLT5zaW5fYWRkci5zX2FkZHIgPSBsb2NhbF9JUF9hZGRyOwotCQkJaWZfZGF0YTEtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJaWYoIShlcnIgPSBkZXZpbmV0X2lvY3RsKFNJT0NTSUZBRERSLCAmaWZfaW5mbykpKXsKLQkJCQlpZl9kYXRhMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJCQlpZl9kYXRhMi0+c2luX2FkZHIuc19hZGRyID0gcmVtb3RlX0lQX2FkZHI7Ci0JCQkJaWZfZGF0YTItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJCWVyciA9IGRldmluZXRfaW9jdGwoU0lPQ1NJRkRTVEFERFIsICZpZl9pbmZvKTsKLQkJCX0KLQkJfQotCi0gICAgICAgICAgICAgICBpZihlcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBZGQgcm91dGUgJXUuJXUuJXUuJXUgZmFpbGVkICglZClcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIE5JUFFVQUQocmVtb3RlX0lQX2FkZHIpLCBlcnIpOwotCQl9IGVsc2UgewotCQkJKChjaGRsY19wcml2YXRlX2FyZWFfdCAqKWRldi0+cHJpdiktPnJvdXRlX3N0YXR1cyA9IFJPVVRFX0FEREVEOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER5bmFtaWMgcm91dGUgYWRkZWQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgIExvY2FsIElQIGFkZHIgOiAldS4ldS4ldS4ldVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGxvY2FsX0lQX2FkZHIpKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgICBSZW1vdGUgSVAgYWRkcjogJXUuJXUuJXUuJXVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChyZW1vdGVfSVBfYWRkcikpOwotCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9yZW1vdmVkID0gMDsKLQkJfQotCQlicmVhazsKLQotCi0JY2FzZSBSRU1PVkVfUk9VVEU6Ci0JCi0JCS8qIENoYW5nZSB0aGUgbG9jYWwgaXAgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlIHRvIDAuCi0JCSAqIFRoaXMgd2lsbCBhbHNvIGRlbGV0ZSB0aGUgZGVzdGluYXRpb24gcm91dGUuCi0JCSAqLwotCQlpZighY2FyZC0+dS5jLnNsYXJwX3RpbWVyKSB7Ci0JCQlpZl9kYXRhMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJCWlmX2RhdGEyLT5zaW5fYWRkci5zX2FkZHIgPSAwOwotCQkJaWZfZGF0YTItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJZXJyID0gZGV2aW5ldF9pb2N0bChTSU9DU0lGRFNUQUREUiwgJmlmX2luZm8pOwotCQl9IGVsc2UgewotCQkJaWZfZGF0YTEgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmX2luZm8uaWZyX2FkZHI7Ci0JCQlpZl9kYXRhMS0+c2luX2FkZHIuc19hZGRyID0gMDsKLQkJCWlmX2RhdGExLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJCWVyciA9IGRldmluZXRfaW9jdGwoU0lPQ1NJRkFERFIsJmlmX2luZm8pOwotCQkKLQkJfQotCQlpZihlcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IFJlbW92ZSByb3V0ZSAldS4ldS4ldS4ldSBmYWlsZWQsIChlcnIgJWQpXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKHJlbW90ZV9JUF9hZGRyKSwKLQkJCQkJZXJyKTsKLQkJfSBlbHNlIHsKLQkJCSgoY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKilkZXYtPnByaXYpLT5yb3V0ZV9zdGF0dXMgPQotCQkJCU5PX1JPVVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER5bmFtaWMgcm91dGUgcmVtb3ZlZDogJXUuJXUuJXUuJXVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChsb2NhbF9JUF9hZGRyKSk7IAotCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9yZW1vdmVkID0gMTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLSAgICAgICAgc2V0X2ZzKGZzKTsgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGZpbGUgc3lzdGVtICovCi0KLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTdG9yZSBhIFVEUCBtYW5hZ2VtZW50IHBhY2tldCBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KLSAqLwotCi1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJICAgICAgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSkKLXsKLQlpbnQgdWRwX3BrdF9zdG9yZWQgPSAwOwotCi0JaWYoIWNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoICYmCi0JICAoc2tiLT5sZW4gPD0gTUFYX0xHVEhfVURQX01HTlRfUEtUKSkgewotICAgICAgICAJY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2xndGggPSBza2ItPmxlbjsKLQkJY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9IHVkcF9wa3Rfc3JjOwotICAgICAgIAkJbWVtY3B5KGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCA9IFRNUl9JTlRfRU5BQkxFRF9VRFA7Ci0JCXVkcF9wa3Rfc3RvcmVkID0gMTsKLQl9Ci0KLQlpZih1ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9TVEFDSyl7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9Ci0JCQotCXJldHVybih1ZHBfcGt0X3N0b3JlZCk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBVRFAgbWFuYWdlbWVudCBwYWNrZXQuCi0gKi8KLQotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSApIAotewotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgZnJhbWVzLCBsZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCwgcmVhbF9sZW47Ci0JdW5zaWduZWQgbG9uZyBkYXRhX3B0cjsKLQl1bnNpZ25lZCBkYXRhX2xlbmd0aDsKLQlpbnQgdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIgPSBjYXJkLT5tYm94OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCWNoZGxjX3VkcF9wa3RfdCAqY2hkbGNfdWRwX3BrdDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlpbnQgZXJyOwotCWNoYXIgdXRfY2hhcjsKLQotCWNoZGxjX3VkcF9wa3QgPSAoY2hkbGNfdWRwX3BrdF90ICopIGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhOwotCi0JaWYoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKXsKLQotCQkvKiBPbmx5IHRoZXNlIGNvbW1hbmRzIGFyZSBzdXBwb3J0IGZvciByZW1vdGUgZGVidWdnaW5nLgotCQkgKiBBbGwgb3RoZXJzIGFyZSBub3QgKi8KLQkJc3dpdGNoKGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKSB7Ci0KLQkJCWNhc2UgUkVBRF9HTE9CQUxfU1RBVElTVElDUzoKLQkJCWNhc2UgUkVBRF9NT0RFTV9TVEFUVVM6ICAKLQkJCWNhc2UgUkVBRF9DSERMQ19MSU5LX1NUQVRVUzoKLQkJCWNhc2UgQ1BJUEVfUk9VVEVSX1VQX1RJTUU6Ci0JCQljYXNlIFJFQURfQ09NTVNfRVJST1JfU1RBVFM6Ci0JCQljYXNlIFJFQURfQ0hETENfT1BFUkFUSU9OQUxfU1RBVFM6Ci0KLQkJCS8qIFRoZXNlIHR3byBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgZm9yCi0JCQkgKiBlYWNoIHJlcXVlc3QgKi8KLQkJCWNhc2UgUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOgotCQkJY2FzZSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTjoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAwOwotCQkJCWJyZWFrOwotCQl9IAotCX0KLQkKLSAgCWlmKCF1ZHBfbWdtdF9yZXFfdmFsaWQpIHsKLQotCQkvKiBzZXQgbGVuZ3RoIHRvIDAgKi8KLQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmJ1ZmZlcl9sZW5ndGggPSAwOwotCi0gICAgCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gMHhDRDsKLQotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsJCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBXYXJuaW5nLCBJbGxlZ2FsIFVEUCBjb21tYW5kIGF0dGVtcHRlZCBmcm9tIG5ldHdvcms6ICV4XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxjaGRsY191ZHBfcGt0LT5jYmxvY2suY29tbWFuZCk7Ci0JCX0KLQotICAgCX0gZWxzZSB7Ci0JICAgCXVuc2lnbmVkIGxvbmcgdHJhY2Vfc3RhdHVzX2NmZ19hZGRyID0gMDsKLQkJVFJBQ0VfU1RBVFVTX0VMX0NGR19TVFJVQ1QgdHJhY2VfY2ZnX3N0cnVjdDsKLQkJVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUIHRyYWNlX2VsZW1lbnRfc3RydWN0OwotCi0JCXN3aXRjaChjaGRsY191ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotCi0JCWNhc2UgQ1BJUEVfRU5BQkxFX1RSQUNJTkc6Ci0JCSAgICAgaWYgKCFjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkKSB7Ci0KLQkJCS8qIE9QRVJBVEVfREFUQUxJTkVfTU9OSVRPUiAqLwotCi0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QpOwotCQkJbWItPmNvbW1hbmQgPSBTRVRfVFJBQ0VfQ09ORklHVVJBVElPTjsKLQotICAgIAkJCSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCQl0cmFjZV9jb25maWcgPSBUUkFDRV9BQ1RJVkU7Ci0JCQkvKiBUcmFjZSBkZWxheSBtb2RlIGlzIG5vdCB1c2VkIGJlY2F1c2UgaXQgc2xvd3MKLQkJCSAgIGRvd24gdHJhbnNmZXIgYW5kIHJlc3VsdHMgaW4gYSBzdGFuZG9mZiBzaXR1YXRpb24KLQkJCSAgIHdoZW4gdGhlcmUgaXMgYSBsb3Qgb2YgZGF0YSAqLwotCi0JCQkvKiBDb25maWd1cmUgdGhlIFRyYWNlIGJhc2VkIG9uIHVzZXIgaW5wdXRzICovCi0JCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+dHJhY2VfY29uZmlnIHw9IAotCQkJCQljaGRsY191ZHBfcGt0LT5kYXRhWzBdOwotCi0JCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0JCQkgICB0cmFjZV9kZWFjdGl2YXRpb25fdGltZXIgPSA0MDAwOwotCi0KLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkJCWlmIChlcnIgIT0gQ09NTUFORF9PSykgewotCQkJCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQkJCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gZXJyOwotCQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJCQlicmVhazsKLQkgICAgCQl9IAotCi0JCQkvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhY2UgZWxlbWVudCBsaXN0ICovCi0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQltYi0+Y29tbWFuZCA9IFJFQURfVFJBQ0VfQ09ORklHVVJBVElPTjsKLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCQkJaWYgKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCQkJCWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IGVycjsKLQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQkJYnJlYWs7Ci0JICAgIAkJfSAJCi0KLQkgICAJCXRyYWNlX3N0YXR1c19jZmdfYWRkciA9KChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKikKLQkJCQltYi0+ZGF0YSkgLT4gcHRyX3RyYWNlX3N0YXRfZWxfY2ZnX3N0cnVjdDsKLQotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgdHJhY2Vfc3RhdHVzX2NmZ19hZGRyLAotCQkJCSAmdHJhY2VfY2ZnX3N0cnVjdCwgc2l6ZW9mKHRyYWNlX2NmZ19zdHJ1Y3QpKTsKLQkJICAgIAotCQkJY2hkbGNfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyID0gdHJhY2VfY2ZnX3N0cnVjdC4KLQkJCQliYXNlX2FkZHJfdHJhY2Vfc3RhdHVzX2VsZW1lbnRzOwotCi0JCQljaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50cyA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0Lm51bWJlcl90cmFjZV9zdGF0dXNfZWxlbWVudHM7Ci0KLQkJCWNoZGxjX3ByaXZfYXJlYS0+ZW5kX3RyYWNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykKLQkJCQkJKChUUkFDRV9TVEFUVVNfRUxFTUVOVF9TVFJVQ1QgKikKLQkJCQkJIGNoZGxjX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkciArIAotCQkJCQkgKGNoZGxjX3ByaXZfYXJlYS0+bnVtYmVyX3RyYWNlX2VsZW1lbnRzIC0gMSkpOwotCi0JCQljaGRsY19wcml2X2FyZWEtPmJhc2VfYWRkcl90cmFjZV9idWZmZXIgPSAKLQkJCQkJdHJhY2VfY2ZnX3N0cnVjdC5iYXNlX2FkZHJfdHJhY2VfYnVmZmVyOwotCi0JCQljaGRsY19wcml2X2FyZWEtPmVuZF9hZGRyX3RyYWNlX2J1ZmZlciA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0LmVuZF9hZGRyX3RyYWNlX2J1ZmZlcjsKLQotCQkgICAgCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID0gCi0JCQkJCXRyYWNlX2NmZ19zdHJ1Y3QubmV4dF90cmFjZV9lbGVtZW50X3RvX3VzZTsKLQotCSAgICAJCWNoZGxjX3ByaXZfYXJlYS0+YXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSA9IDIwMDAgLSAKLQkJCQkJCQkJICBzaXplb2YoaXBfcGt0X3QpIC0KLQkJCQkJCQkJICBzaXplb2YodWRwX3BrdF90KSAtCi0JCQkJCQkJICAgICAgCSAgc2l6ZW9mKHdwX21nbXRfdCkgLQotCQkJCQkJCQkgIHNpemVvZihjYmxvY2tfdCkgLQotCQkJCQkJCSAgICAgICAgICBzaXplb2YodHJhY2VfaW5mb190KTsJCi0JICAgICAgIAkgICAgIH0KLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkgICAgICAgCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCA9IDE7Ci0JICAgICAgIAkgICAgIGJyZWFrOwotCSAgIAotCi0JCWNhc2UgQ1BJUEVfRElTQUJMRV9UUkFDSU5HOgotCQkgICAgIGlmIChjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkKSB7Ci0KLQkJCS8qIE9QRVJBVEVfREFUQUxJTkVfTU9OSVRPUiAqLwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUKTsKLQkJCW1iLT5jb21tYW5kID0gU0VUX1RSQUNFX0NPTkZJR1VSQVRJT047Ci0gICAgCQkJKChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJCXRyYWNlX2NvbmZpZyA9IFRSQUNFX0lOQUNUSVZFOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQkgICAgIH0JCQotCi0JCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCSAgICAgY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCSAgICAgYnJlYWs7Ci0JICAgCi0KLQkJY2FzZSBDUElQRV9HRVRfVFJBQ0VfSU5GTzoKLQotCQkgICAgIGlmICghY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCkgewotCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gMTsKLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJCWJyZWFrOwotCQkgICAgIH0KLQotICAJCSAgICAgY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMDsKLQkJICAgICBidWZmZXJfbGVuZ3RoID0gMDsJLyogb2Zmc2V0IG9mIHBhY2tldCBhbHJlYWR5IG9jY3VwaWVkICovCi0KLQkJICAgICBmb3IgKGZyYW1lcz0wOyBmcmFtZXMgPCBjaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50czsgZnJhbWVzKyspewotCi0JCQl0cmFjZV9wa3RfdCAqdHJhY2VfcGt0ID0gKHRyYWNlX3BrdF90ICopCi0JCQkJJmNoZGxjX3VkcF9wa3QtPmRhdGFbYnVmZmVyX2xlbmd0aF07Ci0KLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyLAotCQkJICAgCSAgKHVuc2lnbmVkIGNoYXIgKikmdHJhY2VfZWxlbWVudF9zdHJ1Y3QsCi0JCQkgICAJICBzaXplb2YoVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUKSk7Ci0KLSAgICAgCQkJaWYgKHRyYWNlX2VsZW1lbnRfc3RydWN0Lm9wcF9mbGFnID09IDB4MDApIHsKLQkJCSAJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIGdldCBwb2ludGVyIHRvIHJlYWwgZGF0YSAqLwotCQkJZGF0YV9wdHIgPSB0cmFjZV9lbGVtZW50X3N0cnVjdC5wdHJfZGF0YV9iZnI7Ci0KLQkJCS8qIFNlZSBpZiB0aGVyZSBpcyBhY3R1YWwgZGF0YSBvbiB0aGUgdHJhY2UgYnVmZmVyICovCi0JCQlpZiAoZGF0YV9wdHIpewotCQkJCWRhdGFfbGVuZ3RoID0gdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfbGVuZ3RoOwotCQkJfWVsc2V7Ci0JCQkJZGF0YV9sZW5ndGggPSAwOwotCQkJCWNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDE7Ci0JCQl9Ci0JCi0gICAJCQlpZiggKGNoZGxjX3ByaXZfYXJlYS0+YXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpCi0JCQkJPCAoIHNpemVvZih0cmFjZV9wa3RfdCkgKyBkYXRhX2xlbmd0aCkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRpY2F0ZSB0aGVyZSBhcmUgbW9yZSBmcmFtZXMgb24gYm9hcmQgJiBleGl0ICovCi0JCQkJY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0JCQl0cmFjZV9wa3QtPnN0YXR1cyA9IHRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX3R5cGU7Ci0KLQkJCXRyYWNlX3BrdC0+dGltZV9zdGFtcCA9Ci0JCQkJdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfdGltZV9zdGFtcDsKLQotCQkJdHJhY2VfcGt0LT5yZWFsX2xlbmd0aCA9Ci0JCQkJdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfbGVuZ3RoOwotCi0JCQkvKiBzZWUgaWYgd2UgY2FuIGZpdCB0aGUgZnJhbWUgaW50byB0aGUgdXNlciBidWZmZXIgKi8KLQkJCXJlYWxfbGVuID0gdHJhY2VfcGt0LT5yZWFsX2xlbmd0aDsKLQotCQkJaWYgKGRhdGFfcHRyID09IDApIHsKLQkJCSAgICAgCXRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9IDB4MDA7Ci0JCQl9IGVsc2UgewotCQkJCXVuc2lnbmVkIHRtcCA9IDA7Ci0KLQkJCQkvKiBnZXQgdGhlIGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIKLQkJCQkgICAgbXVzdCBjaGVjayBmb3IgZW5kIG9mIGJ1ZmZlciAqLwotCQkJICAgICAgICB0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPSAweDAxOwotCi0JCQkJaWYgKChkYXRhX3B0ciArIHJlYWxfbGVuKSA+Ci0JCQkJCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5lbmRfYWRkcl90cmFjZV9idWZmZXIgKyAxKXsKLQotCQkJCSAgICAJdG1wID0gY2hkbGNfcHJpdl9hcmVhLT5lbmRfYWRkcl90cmFjZV9idWZmZXIgLSBkYXRhX3B0ciArIDE7Ci0JCQkJICAgIAlzZGxhX3BlZWsoJmNhcmQtPmh3LCBkYXRhX3B0ciwKLQkJCQkJICAgICAgIAkgIHRyYWNlX3BrdC0+ZGF0YSx0bXApOwotCQkJCSAgICAJZGF0YV9wdHIgPSBjaGRsY19wcml2X2FyZWEtPmJhc2VfYWRkcl90cmFjZV9idWZmZXI7Ci0JCQkJfQotCQotCQkgICAgICAgIAlzZGxhX3BlZWsoJmNhcmQtPmh3LCBkYXRhX3B0ciwKLQkJCQkJICAmdHJhY2VfcGt0LT5kYXRhW3RtcF0sIHJlYWxfbGVuIC0gdG1wKTsKLQkJCX0JCi0KLQkJCS8qIHplcm8gdGhlIG9wcCBmbGFnIHRvIHNob3cgd2UgZ290IHRoZSBmcmFtZSAqLwotCQkJdXRfY2hhciA9IDB4MDA7Ci0JCQlzZGxhX3Bva2UoJmNhcmQtPmh3LCBjaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwgJnV0X2NoYXIsIDEpOwotCi0gICAgICAgCQkJLyogbm93IG1vdmUgb250byB0aGUgbmV4dCBmcmFtZSAqLwotICAgICAgIAkJCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyICs9IHNpemVvZihUUkFDRV9TVEFUVVNfRUxFTUVOVF9TVFJVQ1QpOwotCi0gICAgICAgCQkJLyogY2hlY2sgaWYgd2Ugd2VudCBvdmVyIHRoZSBsYXN0IGFkZHJlc3MgKi8KLQkJCWlmICggY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPiBjaGRsY19wcml2X2FyZWEtPmVuZF90cmFjZV9hZGRyICkgewotCQkJCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID0gY2hkbGNfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyOwotICAgICAgIAkJCX0KLQotICAgICAgICAgICAgCQlpZih0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPT0gMHgwMSkgewotCQkJCWJ1ZmZlcl9sZW5ndGggKz0gcmVhbF9sZW4gLSAxOwotCQkJfQotCSAKLQkgICAgICAgCSAgICAJLyogZm9yIHRoZSBoZWFkZXIgKi8KLQkgICAgICAgICAgICAJYnVmZmVyX2xlbmd0aCArPSBzaXplb2YodHJhY2VfcGt0X3QpOwotCi0JCSAgICAgfSAgLyogRm9yIExvb3AgKi8KLQotCQkgICAgIGlmIChmcmFtZXMgPT0gY2hkbGNfcHJpdl9hcmVhLT5udW1iZXJfdHJhY2VfZWxlbWVudHMpewotCQkJY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMTsKLQkgICAgICAgICAgICAgfQotIAkJICAgICBjaGRsY191ZHBfcGt0LT50cmFjZV9pbmZvLm51bV9mcmFtZXMgPSBmcmFtZXM7Ci0JCSAKLSAgICAJCSAgICAgbWItPmJ1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoOwotCQkgICAgIGNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsgCi0JCSAKLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOyAKLQkJICAgICAKLQkJICAgICBicmVhazsKLQotCi0JCWNhc2UgQ1BJUEVfRlQxX1JFQURfU1RBVFVTOgotCQkJKCh1bnNpZ25lZCBjaGFyICopY2hkbGNfdWRwX3BrdC0+ZGF0YSApWzBdID0KLQkJCQlmbGFncy0+RlQxX2luZm9fc3RydWN0LnBhcmFsbGVsX3BvcnRfQV9pbnB1dDsKLQotCQkJKCh1bnNpZ25lZCBjaGFyICopY2hkbGNfdWRwX3BrdC0+ZGF0YSApWzFdID0KLQkJCQlmbGFncy0+RlQxX2luZm9fc3RydWN0LnBhcmFsbGVsX3BvcnRfQl9pbnB1dDsKLQkJCQkKLQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCQljaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aCA9IDI7Ci0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IDI7Ci0JCQlicmVhazsKLQotCQljYXNlIENQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJZG9fZ2V0dGltZW9mZGF5KCAmdHYgKTsKLQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3VwX3RpbWUgPSB0di50dl9zZWMgLSAKLQkJCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZXJfc3RhcnRfdGltZTsKLQkJCSoodW5zaWduZWQgbG9uZyAqKSZjaGRsY191ZHBfcGt0LT5kYXRhID0gCi0JCQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3VwX3RpbWU7CQotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YodW5zaWduZWQgbG9uZyk7Ci0JCQljaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aCA9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCQlicmVhazsKLQotICAgCQljYXNlIEZUMV9NT05JVE9SX1NUQVRVU19DVFJMOgotCQkJLyogRW5hYmxlIEZUMSBNT05JVE9SIFNUQVRVUyAqLwotCSAgICAgICAgCWlmICgoY2hkbGNfdWRwX3BrdC0+ZGF0YVswXSAmIEVOQUJMRV9SRUFEX0ZUMV9TVEFUVVMpIHx8ICAKLQkJCQkoY2hkbGNfdWRwX3BrdC0+ZGF0YVswXSAmIEVOQUJMRV9SRUFEX0ZUMV9PUF9TVEFUUykpIHsKLQkJCQotCQkJICAgICAJaWYoIHJDb3VudCsrICE9IDAgKSB7Ci0JCQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay4KLQkJCQkJcmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDE7Ci0JCSAgCQkJYnJlYWs7Ci0JCSAgICAJICAgICAJfQotCSAgICAgIAkJfQotCi0JICAgICAgCQkvKiBEaXNhYmxlIEZUMSBNT05JVE9SIFNUQVRVUyAqLwotCSAgICAgIAkJaWYoIGNoZGxjX3VkcF9wa3QtPmRhdGFbMF0gPT0gMCkgewotCi0JICAgICAgCSAgIAkgICAgIAlpZiggLS1yQ291bnQgIT0gMCkgewotCQkgIAkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay4KLQkJCQkJcmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDE7Ci0JCSAgCQkJYnJlYWs7Ci0JICAgCSAgICAJICAgICAJfSAKLQkgICAgICAJCX0gCQotCQkJZ290byBkZmx0XzE7Ci0KLQkJZGVmYXVsdDoKLWRmbHRfMToKLQkJCS8qIGl0J3MgYSBib2FyZCBjb21tYW5kICovCi0JCQltYi0+Y29tbWFuZCA9IGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kOwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBjaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aDsKLQkJCWlmIChtYi0+YnVmZmVyX2xlbmd0aCkgewotCQkJCW1lbWNweSgmbWItPmRhdGEsICh1bnNpZ25lZCBjaGFyICopIGNoZGxjX3VkcF9wa3QtPgotCQkJCQkJCWRhdGEsIG1iLT5idWZmZXJfbGVuZ3RoKTsKLQkgICAgICAJCX0gCi0JCQkvKiBydW4gdGhlIGNvbW1hbmQgb24gdGhlIGJvYXJkICovCi0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCSAgICAgICAgIAltZW1jcHkoJmNoZGxjX3VkcF9wa3QtPmNibG9jaywgbWIsIHNpemVvZihjYmxvY2tfdCkpOyAKLQkJCQotCQkJaWYgKG1iLT5idWZmZXJfbGVuZ3RoKSB7Ci0JICAgICAgICAgCQltZW1jcHkoJmNoZGxjX3VkcF9wa3QtPmRhdGEsICZtYi0+ZGF0YSwgCi0JCQkJCQkJCW1iLT5idWZmZXJfbGVuZ3RoKTsgCi0JICAgICAgCQl9Ci0KLQkJfSAvKiBlbmQgb2Ygc3dpdGNoICovCi0gICAgIAl9IC8qIGVuZCBvZiBlbHNlICovCi0KLSAgICAgCS8qIEZpbGwgVURQIFRUTCAqLwotCWNoZGxjX3VkcF9wa3QtPmlwX3BrdC50dGwgPSBjYXJkLT53YW5kZXYudHRsOyAKLQotICAgICAJbGVuID0gcmVwbHlfdWRwKGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBtYi0+YnVmZmVyX2xlbmd0aCk7Ci0JCi0KLSAgICAgCWlmKGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSyl7Ci0KLQkJLyogTXVzdCBjaGVjayBpZiB3ZSBpbnRlcnJ1cHRlZCBpZl9zZW5kKCkgcm91dGluZS4gVGhlCi0JCSAqIHR4IGJ1ZmZlcnMgbWlnaHQgYmUgdXNlZC4gSWYgc28gZHJvcCB0aGUgcGFja2V0ICovCi0JICAgCWlmICghdGVzdF9iaXQoU0VORF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQotCQkJaWYoIWNoZGxjX3NlbmQoY2FyZCwgY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIGxlbikpIHsKLQkJCQkrKyBjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLQkJCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYnl0ZXMgKz0gbGVuOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsJCi0JCi0JCS8qIFBhc3MgaXQgdXAgdGhlIHN0YWNrCi0gICAgCQkgICBBbGxvY2F0ZSBzb2NrZXQgYnVmZmVyICovCi0JCWlmICgobmV3X3NrYiA9IGRldl9hbGxvY19za2IobGVuKSkgIT0gTlVMTCkgewotCQkJLyogY29weSBkYXRhIGludG8gbmV3X3NrYiAqLwotCi0gCSAgICAJCWJ1ZiA9IHNrYl9wdXQobmV3X3NrYiwgbGVuKTsKLSAgCSAgICAJCW1lbWNweShidWYsIGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBsZW4pOwotCi0gICAgICAgICAgICAJCS8qIERlY2Fwc3VsYXRlIHBrdCBhbmQgcGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgKi8KLQkgICAgCQluZXdfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLSAgICAgICAgICAgIAkJbmV3X3NrYi0+ZGV2ID0gZGV2OwotCSAgICAJCW5ld19za2ItPm1hYy5yYXcgID0gbmV3X3NrYi0+ZGF0YTsKLQkKLQkJCW5ldGlmX3J4KG5ld19za2IpOwotCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJfSBlbHNlIHsKLQkgICAgCQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotICAJCX0KLSAgICAJfQotIAotCWNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gMDsKLSAJCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBSZWNlaXZlIGFuZCBUcmFuc21pdCBCdWZmZXJzLgotICovCi0KLXN0YXRpYyB2b2lkIGluaXRfY2hkbGNfdHhfcnhfYnVmZiggc2RsYV90KiBjYXJkKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JQ0hETENfVFhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKnR4X2NvbmZpZzsKLQlDSERMQ19SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqcnhfY29uZmlnOwotCWNoYXIgZXJyOwotCQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotCQlpZiAoY2FyZC0+d2FuZGV2LmRldil7Ci0JCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCXR4X2NvbmZpZyA9IChDSERMQ19UWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX0NIRExDX1R4X3N0YXRfZWxfY2ZnX3N0cnVjdCkpOwotICAgICAgICAJcnhfY29uZmlnID0gKENIRExDX1JYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgICgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWItPmRhdGEpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfQ0hETENfUnhfc3RhdF9lbF9jZmdfc3RydWN0KSk7Ci0KLSAgICAgICAJCS8qIFNldHVwIEhlYWQgYW5kIFRhaWxzIGZvciBidWZmZXJzICovCi0gICAgICAgIAljYXJkLT51LmMudHhidWZfYmFzZSA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHR4X2NvbmZpZy0+YmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyk7Ci0gICAgICAgIAljYXJkLT51LmMudHhidWZfbGFzdCA9IAotCQkoQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICopICAKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWZfYmFzZSArCi0JCSh0eF9jb25maWctPm51bWJlcl9UeF9zdGF0dXNfZWxlbWVudHMgLSAxKTsKLQotICAgICAgICAJY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICByeF9jb25maWctPmJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMpOwotICAgICAgICAJY2FyZC0+dS5jLnJ4YnVmX2xhc3QgPQotCQkoQ0hETENfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUICopCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgKwotCQkocnhfY29uZmlnLT5udW1iZXJfUnhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0KLSAJCS8qIFNldCB1cCBuZXh0IHBvaW50ZXIgdG8gYmUgdXNlZCAqLwotICAgICAgICAJY2FyZC0+dS5jLnR4YnVmID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgdHhfY29uZmlnLT5uZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSk7Ci0gICAgICAgIAljYXJkLT51LmMucnhtYiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHJ4X2NvbmZpZy0+bmV4dF9SeF9zdGF0dXNfZWxlbWVudF90b191c2UpOwotCX0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHhfY29uZmlnID0gKENIRExDX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJcHRyX0NIRExDX1R4X3N0YXRfZWxfY2ZnX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCi0gICAgICAgICAgICAgICAgcnhfY29uZmlnID0gKENIRExDX1JYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCi0gICAgICAgICAgICAgICAgLyogU2V0dXAgSGVhZCBhbmQgVGFpbHMgZm9yIGJ1ZmZlcnMgKi8KLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWZfYmFzZSA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkodHhfY29uZmlnLT5iYXNlX2FkZHJfVHhfc3RhdHVzX2VsZW1lbnRzICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmX2xhc3QgPQotCQkoQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICopY2FyZC0+dS5jLnR4YnVmX2Jhc2UKLQkJKyAodHhfY29uZmlnLT5udW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHJ4X2NvbmZpZy0+YmFzZV9hZGRyX1J4X3N0YXR1c19lbGVtZW50cyAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeGJ1Zl9sYXN0ID0gCi0JCShDSERMQ19EQVRBX1JYX1NUQVRVU19FTF9TVFJVQ1QgKiljYXJkLT51LmMucnhidWZfYmFzZQotCQkrIChyeF9jb25maWctPm51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgLSAxKTsKLQotICAgICAgICAgICAgICAgICAvKiBTZXQgdXAgbmV4dCBwb2ludGVyIHRvIGJlIHVzZWQgKi8KLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWYgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHR4X2NvbmZpZy0+bmV4dF9UeF9zdGF0dXNfZWxlbWVudF90b191c2UgJSBTRExBX1dJTkRPV1NJWkUpKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhtYiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkocnhfY29uZmlnLT5uZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogU2V0dXAgQWN0dWFsIEJ1ZmZlciBTdGFydCBhbmQgZW5kIGFkZHJlc3NlcyAqLwotICAgICAgICBjYXJkLT51LmMucnhfYmFzZSA9IHJ4X2NvbmZpZy0+YmFzZV9hZGRyX1J4X2J1ZmZlcjsKLSAgICAgICAgY2FyZC0+dS5jLnJ4X3RvcCAgPSByeF9jb25maWctPmVuZF9hZGRyX1J4X2J1ZmZlcjsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQZXJmb3JtIEludGVycnVwdCBUZXN0IGJ5IHJ1bm5pbmcgUkVBRF9DSERMQ19DT0RFX1ZFUlNJT04gY29tbWFuZCBNQVhfSU5UUgotICogX1RFU1RfQ09VTlRFUiB0aW1lcy4KLSAqLwotc3RhdGljIGludCBpbnRyX3Rlc3QoIHNkbGFfdCogY2FyZCkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnIsaTsKLQotCUludHJfdGVzdF9jb3VudGVyID0gMDsKLQkKLQllcnIgPSBjaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsIEFQUF9JTlRfT05fQ09NTUFORF9DT01QTEVURSk7Ci0KLQlpZiAoZXJyID09IENNRF9PSykgeyAKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUjsgaSArKykgewkKLQkJCW1iLT5idWZmZXJfbGVuZ3RoICA9IDA7Ci0JCQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ERV9WRVJTSU9OOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQkJaWYgKGVyciAhPSBDTURfT0spIAotCQkJCWNoZGxjX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCQl9Ci0JfQotCWVsc2UgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgMCk7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBVRFAgY2FsbCBpdCBpcy4gQ1BJUEVBQiA/Ci0gKi8KLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCogY2FyZCkKLXsKLQkgY2hkbGNfdWRwX3BrdF90ICpjaGRsY191ZHBfcGt0ID0gKGNoZGxjX3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsKLQotI2lmZGVmIF9XQU5fVURQX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlNJRyAlcyA9ICVzXG5cCi0JCQkJICBVUFAgJXggPSAleFxuXAotCQkJCSAgUFJUICV4ID0gJXhcblwKLQkJCQkgIFJFUSAlaSA9ICVpXG5cCi0JCQkJICAzNiB0aCA9ICV4IDM3dGggPSAleFxuIiwKLQkJCQkgIGNoZGxjX3VkcF9wa3QtPndwX21nbXQuc2lnbmF0dXJlLAotCQkJCSAgVURQTUdNVF9TSUdOQVRVUkUsCi0JCQkJICBjaGRsY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCwKLQkJCQkgIG50b2hzKGNhcmQtPndhbmRldi51ZHBfcG9ydCksCi0JCQkJICBjaGRsY191ZHBfcGt0LT5pcF9wa3QucHJvdG9jb2wsCi0JCQkJICBVRFBNR01UX1VEUF9QUk9UT0NPTCwKLQkJCQkgIGNoZGxjX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSwKLQkJCQkgIFVEUE1HTVRfUkVRVUVTVCwKLQkJCQkgIHNrYi0+ZGF0YVszNl0sIHNrYi0+ZGF0YVszN10pOwotI2VuZGlmCQotCQkKLQlpZiAoIXN0cm5jbXAoY2hkbGNfdWRwX3BrdC0+d3BfbWdtdC5zaWduYXR1cmUsVURQTUdNVF9TSUdOQVRVUkUsOCkgJiYKLQkgICAoY2hkbGNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPT0gbnRvaHMoY2FyZC0+d2FuZGV2LnVkcF9wb3J0KSkgJiYKLQkgICAoY2hkbGNfdWRwX3BrdC0+aXBfcGt0LnByb3RvY29sID09IFVEUE1HTVRfVURQX1BST1RPQ09MKSAmJgotCSAgIChjaGRsY191ZHBfcGt0LT53cF9tZ210LnJlcXVlc3RfcmVwbHkgPT0gVURQTUdNVF9SRVFVRVNUKSkgewotCi0JCXJldHVybiBVRFBfQ1BJUEVfVFlQRTsKLQotCX1lbHNleyAKLQkJcmV0dXJuIFVEUF9JTlZBTElEX1RZUEU7Ci0JfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBQT1JUIHN0YXRlLgotICovCi1zdGF0aWMgdm9pZCBwb3J0X3NldF9zdGF0ZSAoc2RsYV90ICpjYXJkLCBpbnQgc3RhdGUpCi17Ci0gICAgICAgIGlmIChjYXJkLT51LmMuc3RhdGUgIT0gc3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdBTl9DT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiJXM6IExpbmsgY29ubmVjdGVkIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgCWJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBXQU5fQ09OTkVDVElORzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICIlczogTGluayBjb25uZWN0aW5nLi4uXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrIChLRVJOX0lORk8gIiVzOiBMaW5rIGRpc2Nvbm5lY3RlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FyZC0+d2FuZGV2LnN0YXRlID0gY2FyZC0+dS5jLnN0YXRlID0gc3RhdGU7Ci0JCWlmIChjYXJkLT53YW5kZXYuZGV2KXsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCQkJY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQkJCWNoZGxjX3ByaXZfYXJlYS0+Y29tbW9uLnN0YXRlID0gc3RhdGU7Ci0JCX0KLSAgICAgICAgfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY29uZmlnX2NoZGxjCi0gKgotICoJQ29uZmlndXJlIHRoZSBjaGRsYyBwcm90b2NvbCBhbmQgZW5hYmxlIGNvbW11bmljYXRpb25zLgkJCi0gKgotICogICAJVGhlIGlmX29wZW4oKSBmdW5jdGlvbiBiaW5kcyB0aGlzIGZ1bmN0aW9uIHRvIHRoZSBwb2xsIHJvdXRpbmUuCi0gKiAgICAgIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1biBldmVyeSB0aW1lIHRoZSBjaGRsYyBpbnRlcmZhY2UKLSAqICAgICAgaXMgYnJvdWdodCB1cC4gV2UgY2Fubm90IHJ1biB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGlmX29wZW4gCi0gKiAgICAgIGJlY2F1c2UgaWZfb3BlbiBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgcmVtb3RlIElQIGFkZHJlc3MuCi0gKiAgICAgIAotICoJSWYgdGhlIGNvbW11bmljYXRpb25zIGFyZSBub3QgZW5hYmxlZCwgcHJvY2VlZCB0byBjb25maWd1cmUKLSAqICAgICAgdGhlIGNhcmQgYW5kIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4KLSAqCi0gKiAgICAgIElmIHRoZSBjb21tdW5pY2F0aW9ucyBhcmUgZW5hYmxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgaW50ZXJmYWNlCi0gKiAgICAgIHdhcyBzaHV0ZG93biBieSBldGhlciB0aGUgdXNlciBvciBkcml2ZXIuIEluIHRoaXMgY2FzZSwgd2UgCi0gKiAgICAgIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgbm90IGNoYW5nZWQuICBJZgotICogICAgICB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgY2hhbmdlZCwgd2UgaGF2ZSB0byByZWNvbmZpZ3VyZSB0aGUgZmlybXdhcmUKLSAqICAgICAgYW5kIHVwZGF0ZSB0aGUgY2hhbmdlZCBJUCBhZGRyZXNzZXMuICBPdGhlcndpc2UsIGp1c3QgZXhpdC4KLSAqCi0gKi8KLQotc3RhdGljIGludCBjb25maWdfY2hkbGMgKHNkbGFfdCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCi0JaWYgKGNhcmQtPnUuYy5jb21tX2VuYWJsZWQpewotCi0JCS8qIEp1biAyMC4gMjAwMDogTkMKLQkJICogSVAgYWRkcmVzc2VzIGFyZSBub3QgdXNlZCBpbiB0aGUgQVBJIG1vZGUgKi8KLQkJCi0JCWlmICgoY2hkbGNfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXAgIT0gY2hkbGNfcHJpdl9hcmVhLT5pcF9sb2NhbCB8fAotCQkgICAgIGNoZGxjX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcCAhPSBjaGRsY19wcml2X2FyZWEtPmlwX3JlbW90ZSkgJiYgCi0JCSAgICAgY2FyZC0+dS5jLnVzZWRieSA9PSBXQU5QSVBFKSB7Ci0JCQkKLQkJCS8qIFRoZSBJUCBhZGRlcnNzZXMgaGF2ZSBjaGFuZ2VkLCB3ZSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzdG9wIHRoZSBjb21tdW5pY2F0aW9ucyBhbmQgcmVjb25maWd1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBjYXJkLiBSZWFzb246IHRoZSBmaXJtd2FyZSBtdXN0IGtub3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3Nlcy4gKi8KLQkJCWRpc2FibGVfY29tbShjYXJkKTsKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IElQIGFkZHJlc3NlcyBjaGFuZ2VkIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogUmVzdGFydGluZyBjb21tdW5pY2F0aW9ucyAuLi5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9ZWxzZXsgCi0JCQkvKiBJUCBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lIGFuZCB0aGUgbGluayBpcyB1cCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGhlcmUuIFRoZXJlZm9yZSwgZXhpdCAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQljaGRsY19wcml2X2FyZWEtPmlwX2xvY2FsID0gY2hkbGNfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXA7Ci0JY2hkbGNfcHJpdl9hcmVhLT5pcF9yZW1vdGUgPSBjaGRsY19wcml2X2FyZWEtPmlwX3JlbW90ZV90bXA7Ci0KLQotCS8qIFNldHVwIHRoZSBCb2FyZCBmb3IgYXN5bmNocm9ub3VzIG1vZGUgKi8KLQlpZiAoY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQkKLQkJaWYgKHNldF9hc3lfY29uZmlnKGNhcmQpKSB7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCBDSERMQyBBc3luYyBjb25maWd1cmF0aW9uIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfWVsc2V7Ci0JCS8qIFNldHVwIHRoZSBCb2FyZCBmb3IgQ0hETEMgKi8KLQkJaWYgKHNldF9jaGRsY19jb25maWcoY2FyZCkpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogRmFpbGVkIENIRExDIGNvbmZpZ3VyYXRpb24hXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgaW50ZXJydXB0IG1vZGUgYW5kIG1hc2sgKi8KLSAgICAgICAgaWYgKGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9SWF9GUkFNRSB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fVFhfRlJBTUUgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9DSERMQ19FWENFUF9DT05EIHwgQVBQX0lOVF9PTl9USU1FUikpewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBzZXQgaW50ZXJydXB0IHRyaWdnZXJzIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDA7CQotICAgICAgICB9Ci0JCi0KLQkvKiBNYXNrIHRoZSBUcmFuc21pdCBhbmQgVGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPSAKLQkJfihBUFBfSU5UX09OX1RYX0ZSQU1FIHwgQVBQX0lOVF9PTl9USU1FUik7Ci0KLQkvKiBJbiBUVFkgbW9kZSwgcmVjZWl2ZSBpbnRlcnJ1cHQgd2lsbCBiZSBlbmFibGVkIGR1cmluZwotCSAqIHdhbnBpcGVfdHR5X29wZW4oKSBvcGVyYXRpb24gKi8KLQlpZiAoY2FyZC0+dHR5X29wdCl7Ci0JCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0gfkFQUF9JTlRfT05fUlhfRlJBTUU7Ci0JfQotCi0JLyogRW5hYmxlIGNvbW11bmljYXRpb25zICovCi0gCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCWlmIChhc3lfY29tbV9lbmFibGUoY2FyZCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgYXN5bmMgY29tbW51bmljYXRpb24hXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwotCQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQkJcmV0dXJuIDA7Ci0JCX0KLSAgICAgICAgfWVsc2V7IAotCQlpZiAoY2hkbGNfY29tbV9lbmFibGUoY2FyZCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgY2hkbGMgY29tbXVuaWNhdGlvbnMhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwotCQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBJbml0aWFsaXplIFJ4L1R4IGJ1ZmZlciBjb250cm9sIGZpZWxkcyAqLwotCWluaXRfY2hkbGNfdHhfcnhfYnVmZihjYXJkKTsKLQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVElORyk7Ci0JcmV0dXJuIDA7IAotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjaGRsY19wb2xsCi0gKgkKLSAqIFJhdGlvbmFsZToKLSAqIAlXZSBjYW5ub3QgbWFuaXB1bGF0ZSB0aGUgcm91dGluZyB0YWJsZXMsIG9yCi0gKiAgICAgIGlwIGFkZHJlc3NlcyB3aXRoaW5nIHRoZSBpbnRlcnJ1cHQuIFRoZXJlZm9yZQotICogICAgICB3ZSBtdXN0IHBlcmZvcm0gc3VjaCBhY3RvbnMgb3V0c2lkZSBhbiBpbnRlcnJ1cHQgCi0gKiAgICAgIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogRGVzY3JpcHRpb246CQotICoJQ0hETEMgcG9sbGluZyByb3V0aW5lLCByZXNwb25zaWJsZSBmb3IgCi0gKiAgICAgCXNodXR0aW5nIGRvd24gaW50ZXJmYWNlcyB1cG9uIGRpc2Nvbm5lY3QKLSAqICAgICAJYW5kIGFkZGluZy9yZW1vdmluZyByb3V0ZXMuIAotICogICAgICAKLSAqIFVzYWdlOiAgICAgICAgCi0gKiAJVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBDSERMQyAgCi0gKiAJaW50ZXJmYWNlIHRocm91Z2ggYSB0cV9zY2hlZHVsZSBib3R0b20gaGFsZi4KLSAqICAgICAgCi0gKiAgICAgIHRyaWdnZXJfY2hkbGNfcG9sbCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8ga2ljawotICogICAgICB0aGUgY2hsZGNfcG9sbCByb3V0aW5lLiAgCi0gKi8KLQotc3RhdGljIHZvaWQgY2hkbGNfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWE7Ci0Jc2RsYV90ICpjYXJkOwotCXU4IGNoZWNrX2dhdGV3YXk9MDsJCi0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCogZmxhZ3M7Ci0KLQkKLQlpZiAoIWRldiB8fCAoY2hkbGNfcHJpdl9hcmVhPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQkKLQkvKiAoUmUpQ29uZmlndXJhaXRvbiBpcyBpbiBwcm9ncmVzcywgc3RvcCB3aGF0IHlvdSBhcmUgCi0JICogZG9pbmcgYW5kIGdldCBvdXQgKi8KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmV0dXJuOwotCX0KLQkKLQkvKiBpZl9vcGVuKCkgZnVuY3Rpb24gaGFzIHRyaWdnZXJlZCB0aGUgcG9sbGluZyByb3V0aW5lCi0JICogdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIElQIGFkZHJlc3Nlcy4gIE9uY2UgdGhlCi0JICogYWRkcmVzc2VzIGFyZSBmb3VuZCwgdHJpZ2dlciB0aGUgY2hkbGMgY29uZmlndXJhdGlvbiAqLwotCWlmICh0ZXN0X2JpdCgwLCZjaGRsY19wcml2X2FyZWEtPmNvbmZpZ19jaGRsYykpewotCi0JCWNoZGxjX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wICA9IGdldF9pcF9hZGRyZXNzKGRldixXQU5fTE9DQUxfSVApOwotCQljaGRsY19wcml2X2FyZWEtPmlwX3JlbW90ZV90bXAgPSBnZXRfaXBfYWRkcmVzcyhkZXYsV0FOX1BPSU5UT1BPSU5UX0lQKTsKLQkKLQkgICAgICAgLyogSnVuIDIwLiAyMDAwIEJ1ZyBGaXgKLQkgCSogT25seSBwZXJmb3JtIHRoaXMgY2hlY2sgaW4gV0FOUElQRSBtb2RlLCBzaW5jZQotCSAJKiBJUCBhZGRyZXNzZXMgYXJlIG5vdCB1c2VkIGluIHRoZSBBUEkgbW9kZS4gKi8KLQkKLQkJaWYgKGNoZGxjX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wID09IGNoZGxjX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcCAmJiAKLQkJICAgIGNhcmQtPnUuYy5zbGFycF90aW1lciA9PSAweDAwICYmIAotCQkgICAgIWNhcmQtPnUuYy5iYWNrdXAgJiYgCi0JCSAgICBjYXJkLT51LmMudXNlZGJ5ID09IFdBTlBJUEUpewotCi0JCQlpZiAoKytjaGRsY19wcml2X2FyZWEtPmlwX2Vycm9yID4gTUFYX0lQX0VSUk9SUyl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4lczogLS0tIFdBUk5JTkcgLS0tXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFRoZSBsb2NhbCBJUCBhZGRyZXNzIGlzIHRoZSBzYW1lIGFzIHRoZVxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBQb2ludC10by1Qb2ludCBJUCBhZGRyZXNzLlxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAtLS0gV0FSTklORyAtLS1cblxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfWVsc2V7Ci0JCQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCQljaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMrSFo7Ci0JCQkJYWRkX3RpbWVyKCZjaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCWNsZWFyX2JpdCgwLCZjaGRsY19wcml2X2FyZWEtPmNvbmZpZ19jaGRsYyk7Ci0JCWNsZWFyX2JpdChQT0xMX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQotCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9DT05GSUc7Ci0JCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gfD0gQVBQX0lOVF9PTl9USU1FUjsKLQkJcmV0dXJuOwotCX0KLQkvKiBEeW5hbWljIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiwgYXMgd2VsbCBhcyBkeW5hbWljCi0JICogcm91dGluZy4gICovCi0JCi0Jc3dpdGNoIChjYXJkLT51LmMuc3RhdGUpewotCi0JY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotCi0JCS8qIElmIHRoZSBkeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGlzIG9uLCBhbmQgaW50ZXJmYWNlIAotCQkgKiBpcyB1cCwgdGhlbiBicmluZyBkb3duIHRoZSBuZXRvd3JrIGludGVyZmFjZSAqLwotCQkKLQkJaWYgKHRlc3RfYml0KERZTl9PUFRfT04sJmNoZGxjX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmIAotCQkgICAgIXRlc3RfYml0KERFVl9ET1dOLCAgJmNoZGxjX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCQkKLQkJICAgIGNhcmQtPndhbmRldi5kZXYtPmZsYWdzICYgSUZGX1VQKXsJCi0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgZG93bi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT53YW5kZXYuZGV2LT5uYW1lKTsKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoY2FyZC0+d2FuZGV2LmRldiwoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MmfklGRl9VUCkpOwotCQkJc2V0X2JpdChERVZfRE9XTiwmY2hkbGNfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bik7Ci0JCQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IE5PX1JPVVRFOwotCi0JCX1lbHNlewotCQkJLyogV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbG9jYWwgSVAgYWRkcmVzcyBpcwotICAgICAgICAgICAgICAgCSAgCSAqIHplcm8uIElmIGl0IGlzLCB3ZSBzaG91bGRuJ3QgdHJ5IHRvIHJlbW92ZSBpdC4KLSAgICAgICAgICAgICAgICAgCSAqLwotCi0JCQlpZiAoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MgJiBJRkZfVVAgJiYgCi0JCSAgICAJICAgIGdldF9pcF9hZGRyZXNzKGNhcmQtPndhbmRldi5kZXYsV0FOX0xPQ0FMX0lQKSAmJiAKLQkJICAgIAkgICAgY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMgIT0gTk9fUk9VVEUgJiYKLQkJCSAgICBjYXJkLT51LmMuc2xhcnBfdGltZXIpewotCi0JCQkJcHJvY2Vzc19yb3V0ZShjYXJkKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQotCQkvKiBJbiBTTVAgbWFjaGluZSB0aGlzIGNvZGUgY2FuIGV4ZWN1dGUgYmVmb3JlIHRoZSBpbnRlcmZhY2UKLQkJICogY29tZXMgdXAuICBJbiB0aGlzIGNhc2UsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90Ci0JCSAqIHRyeSB0byBicmluZyB1cCB0aGUgaW50ZXJmYWNlIGJlZm9yZSBkZXZfb3BlbigpIGlzIGZpbmlzaGVkICovCi0KLQotCQkvKiBERVZfRE9XTiB3aWxsIGJlIHNldCBvbmx5IHdoZW4gd2UgYnJpbmcgZG93biB0aGUgaW50ZXJmYWNlCi0JCSAqIGZvciB0aGUgdmVyeSBmaXJzdCB0aW1lLiBUaGlzIHdheSB3ZSBrbm93IHRoYXQgaXQgd2FzIHVzCi0JCSAqIHRoYXQgYnJvdWdodCB0aGUgaW50ZXJmYWNlIGRvd24gKi8KLQkJCi0JCWlmICh0ZXN0X2JpdChEWU5fT1BUX09OLCZjaGRsY19wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKSAmJgotCQkgICAgdGVzdF9iaXQoREVWX0RPV04sICAmY2hkbGNfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bikgJiYKLQkJICAgICEoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MgJiBJRkZfVVApKXsKLQkJCQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyB1cC5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT53YW5kZXYuZGV2LT5uYW1lKTsKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoY2FyZC0+d2FuZGV2LmRldiwoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3N8SUZGX1VQKSk7Ci0JCQljbGVhcl9iaXQoREVWX0RPV04sJmNoZGxjX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID09IEFERF9ST1VURSAmJiAKLQkJICAgIGNhcmQtPnUuYy5zbGFycF90aW1lcil7IAotCi0JCQlwcm9jZXNzX3JvdXRlKGNhcmQpOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKGNoZGxjX3ByaXZfYXJlYS0+Z2F0ZXdheSAmJiBjaGVja19nYXRld2F5KQotCQkJYWRkX2dhdGV3YXkoY2FyZCxkZXYpOwotCi0JCWJyZWFrOwotCX0JCi0KLQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHJpZ2dlcl9jaGRsY19wb2xsCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAJQWRkIGEgY2hkbGNfcG9sbCgpIHdvcmsgZW50cnkgaW50byB0aGUga2V2ZW50ZCB3b3JrIHF1ZXVlCi0gKiAgICAgIGZvciBhIHNwZWNpZmljIGRsY2kvaW50ZXJmYWNlLiAgVGhpcyB3aWxsIGtpY2sKLSAqICAgICAgdGhlIGZyX3BvbGwoKSByb3V0aW5lIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogVXNhZ2U6Ci0gKiAJSW50ZXJydXB0cyB1c2UgdGhpcyB0byBkZWZlciBhIHRha3MgdG8gCi0gKiAgICAgIGEgcG9sbGluZyByb3V0aW5lLgotICoKLSAqLwkKLXN0YXRpYyB2b2lkIHRyaWdnZXJfY2hkbGNfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWE7Ci0Jc2RsYV90ICpjYXJkOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQkKLQlpZiAoKGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdik9PU5VTEwpCi0JCXJldHVybjsKLQotCWNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0JCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcmV0dXJuOwotCX0KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcmV0dXJuOyAKLQl9Ci0Jc2NoZWR1bGVfd29yaygmY2hkbGNfcHJpdl9hcmVhLT5wb2xsX3dvcmspOwotfQotCi0KLXN0YXRpYyB2b2lkIGNoZGxjX3BvbGxfZGVsYXkgKHVuc2lnbmVkIGxvbmcgZGV2X3B0cikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X3B0cjsKLQl0cmlnZ2VyX2NoZGxjX3BvbGwoZGV2KTsKLX0KLQotCi12b2lkIHM1MDhfbG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLSAgICAgICAgaWYgKGNhcmQtPm5leHQpewotICAgICAgICAJc3Bpbl9sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JfQotfQotCi12b2lkIHM1MDhfdW5sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLSAgICAgICAgaWYgKGNhcmQtPm5leHQpewotICAgICAgICAJc3Bpbl91bmxvY2soJmNhcmQtPm5leHQtPndhbmRldi5sb2NrKTsKLSAgICAgICAgfQotICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci19Ci0KLS8vKioqKioqKioqKiogVFRZIFNFQ1RJT04gKioqKioqKioqKioqKioqKgotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV90cmlnZ2VyX3R4X2lycShzZGxhX3QgKmNhcmQpCi17Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JSU5URVJSVVBUX0lORk9STUFUSU9OX1NUUlVDVCAqY2hkbGNfaW50ID0gJmZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3Q7Ci0JY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RYX0ZSQU1FOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV90cmlnZ2VyX3BvbGwoc2RsYV90ICpjYXJkKQotewotCXNjaGVkdWxlX3dvcmsoJmNhcmQtPnR0eV93b3JrKTsKLX0KLQotc3RhdGljIHZvaWQgdHR5X3BvbGxfd29yayAodm9pZCogZGF0YSkKLXsKLQlzZGxhX3QgKmNhcmQgPSAoc2RsYV90KilkYXRhOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0KLQlpZiAoKHR0eT1jYXJkLT50dHkpPT1OVUxMKQotCQlyZXR1cm47Ci0JCi0JdHR5X3dha2V1cCh0dHkpOwotI2lmIGRlZmluZWQoU0VSSUFMX0hBVkVfUE9MTF9XQUlUKQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5wb2xsX3dhaXQpOwotI2VuZGlmCQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQotewotCXNkbGFfdCAqY2FyZDsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQkKLQlpZiAoIXR0eSB8fCAhdHR5LT5kcml2ZXJfZGF0YSl7Ci0JCXJldHVybjsKLQl9Ci0JCi0JY2FyZCA9IChzZGxhX3QqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JCi0JaWYgKCFjYXJkKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogQ2xvc2luZyBUVFkgRHJpdmVyIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCi0JLyogU2FuaXR5IENoZWNrICovCi0JaWYgKCFjYXJkLT50dHlfb3BlbikKLQkJcmV0dXJuOwotCQotCXdhbnBpcGVfY2xvc2UoY2FyZCk7Ci0JaWYgKC0tY2FyZC0+dHR5X29wZW4gPT0gMCl7Ci0KLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7CQotCQljYXJkLT50dHk9TlVMTDsKLQkJY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duKGNhcmQpOwotCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCi0JCWtmcmVlKGNhcmQtPnR0eV9idWYpOwotCQljYXJkLT50dHlfYnVmID0gTlVMTDsJCQkKLQkJa2ZyZWUoY2FyZC0+dHR5X3J4KTsKLQkJY2FyZC0+dHR5X3J4ID0gTlVMTDsKLQl9Ci0JcmV0dXJuOwotfQotc3RhdGljIGludCB3YW5waXBlX3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKLXsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlzZGxhX3QgKmNhcmQ7Ci0JCi0JaWYgKCF0dHkpewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JCi0JaWYgKCF0dHktPmRyaXZlcl9kYXRhKXsKLQkJaW50IHBvcnQ7Ci0JCXBvcnQgPSB0dHktPmluZGV4OwotCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+PSBOUl9QT1JUUykpIAotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQotCQl0dHktPmRyaXZlcl9kYXRhID0gV0FOX0NBUkQocG9ydCk7Ci0JCWlmICghdHR5LT5kcml2ZXJfZGF0YSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCWNhcmQgPSAoc2RsYV90Kil0dHktPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKXsKLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7CQotCQljYXJkLT50dHk9TlVMTDsKLQkJdW5sb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE9wZW5pbmcgVFRZIERyaXZlciFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQotCWlmIChjYXJkLT50dHlfb3BlbiA9PSAwKXsKLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7CQotCQljYXJkLT50dHk9dHR5OwotCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCi0JCWlmICghY2FyZC0+dHR5X2J1Zil7Ci0JCQljYXJkLT50dHlfYnVmID0ga21hbGxvYyhUVFlfQ0hETENfTUFYX01UVSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWNhcmQtPnR0eV9idWYpewotCQkJCWNhcmQtPnR0eV9idWY9TlVMTDsKLQkJCQljYXJkLT50dHk9TlVMTDsKLQkJCQlyZXR1cm4gLUVOT01FTTsJCi0JCQl9Ci0JCX0KLQotCQlpZiAoIWNhcmQtPnR0eV9yeCl7Ci0JCQljYXJkLT50dHlfcnggPSBrbWFsbG9jKFRUWV9DSERMQ19NQVhfTVRVLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghY2FyZC0+dHR5X3J4KXsKLQkJCQkvKiBGcmVlIHRoZSBidWZmZXIgYWJvdmUgKi8KLQkJCQlrZnJlZShjYXJkLT50dHlfYnVmKTsKLQkJCQljYXJkLT50dHlfYnVmPU5VTEw7Ci0JCQkJY2FyZC0+dHR5PU5VTEw7Ci0JCQkJcmV0dXJuIC1FTk9NRU07CQotCQkJfQotCQl9Ci0JfQotCi0JKytjYXJkLT50dHlfb3BlbjsKLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2FucGlwZV90dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQotewotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzPTA7Ci0Jc2RsYV90ICpjYXJkPU5VTEw7Ci0KLQlpZiAoIXR0eSl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICJOTyBUVFkgaW4gV3JpdGVcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQljYXJkID0gKHNkbGFfdCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JCQkKLQlpZiAoIWNhcmQpewotCQlkYmdfcHJpbnRrKEtFUk5fSU5GTyAiTm8gQ2FyZCBpbiBUVFkgV3JpdGVcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CQotCi0JaWYgKGNvdW50ID4gY2FyZC0+d2FuZGV2Lm10dSl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICJGcmFtZSB0b28gYmlnIGluIFdyaXRlICVpIE1heDogJWlcbiIsCi0JCQkJY291bnQsY2FyZC0+d2FuZGV2Lm10dSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkKLQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlICE9IFdBTl9DT05ORUNURUQpewotCQlkYmdfcHJpbnRrKEtFUk5fSU5GTyAiQ2FyZCBub3QgY29ubmVjdGVkIGluIFRUWSBXcml0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIExvY2sgdGhlIDUwOCBDYXJkOiBTTVAgaXMgc3VwcG9ydGVkICovCi0gICAgICAJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlzNTA4X2xvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9IAotCQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgaW4gVFRZIFdyaXRlXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkKLQkJLyogTG9jayB0aGUgNTA4IENhcmQ6IFNNUCBpcyBzdXBwb3J0ZWQgKi8KLQkJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQkKLQkJcmV0dXJuIC1FSU5WQUw7IAotCX0KLQkKLSAJaWYgKGNoZGxjX3NlbmQoY2FyZCwodm9pZCopYnVmLGNvdW50KSl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHNlbmQsIHJldHJ5IGxhdGVyOiBrZXJuZWwhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQljbGVhcl9iaXQoU0VORF9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQotCQl3YW5waXBlX3R0eV90cmlnZ2VyX3R4X2lycShjYXJkKTsKLQkJCi0JCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotCQkJczUwOF91bmxvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWRiZ19wcmludGsoS0VSTl9JTkZPICIlczogUGFja2V0IHNlbnQgT0s6ICVpXG4iLGNhcmQtPmRldm5hbWUsY291bnQpOwotCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9yZWNlaXZlKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgYWRkciwgdW5zaWduZWQgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBvZmZzZXQ9MDsKLQl1bnNpZ25lZCBvbGVuPWxlbjsKLQljaGFyIGZwPTA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlpbnQgaTsKLQlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKLQkKLQlpZiAoIWNhcmQtPnR0eV9vcGVuKXsKLQkJZGJnX3ByaW50ayhLRVJOX0lORk8gIiVzOiBUVFkgbm90IG9wZW4gZHVyaW5nIHJlY2VpdmVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0JCi0JaWYgKCh0dHk9Y2FyZC0+dHR5KSA9PSBOVUxMKXsKLQkJZGJnX3ByaW50ayhLRVJOX0lORk8gIiVzOiBObyBUVFkgb24gcmVjZWl2ZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQkKLQlpZiAoIXR0eS0+ZHJpdmVyX2RhdGEpewotCQlkYmdfcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIERyaXZlciBEYXRhLCBvciBGbGlwIG9uIHJlY2VpdmVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0JCi0KLQlpZiAoY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQlpZiAoKHR0eS0+ZmxpcC5jb3VudCtsZW4pID49IFRUWV9GTElQQlVGX1NJWkUpewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJIiVzOiBSZWNlaXZlZCBwYWNrZXQgc2l6ZSB0b28gYmlnOiAlaSBieXRlcywgTWF4OiAlaSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsbGVuLFRUWV9GTElQQlVGX1NJWkUpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0KLQkJCi0JCWlmKChhZGRyICsgbGVuKSA+IGNhcmQtPnUuYy5yeF90b3AgKyAxKSB7Ci0JCQlvZmZzZXQgPSBjYXJkLT51LmMucnhfdG9wIC0gYWRkciArIDE7Ci0JCQkKLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIG9mZnNldCk7Ci0JCQkKLQkJCWFkZHIgPSBjYXJkLT51LmMucnhfYmFzZTsKLQkJCWxlbiAtPSBvZmZzZXQ7Ci0JCQkKLQkJCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIrPW9mZnNldDsKLQkJCXR0eS0+ZmxpcC5jb3VudCs9b2Zmc2V0OwotCQkJZm9yIChpPTA7aTxvZmZzZXQ7aSsrKXsKLQkJCQkqdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciA9IDA7Ci0JCQkJdHR5LT5mbGlwLmZsYWdfYnVmX3B0cisrOwotCQkJfQotCQl9Ci0JCQotCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBhZGRyLCB0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBsZW4pOwotCQkJCi0JCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIrPWxlbjsKLQkJY2FyZC0+dHR5LT5mbGlwLmNvdW50Kz1sZW47Ci0JCWZvciAoaT0wO2k8bGVuO2krKyl7Ci0JCQkqdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciA9IDA7Ci0JCQl0dHktPmZsaXAuZmxhZ19idWZfcHRyKys7Ci0JCX0KLQotCQl0dHktPmxvd19sYXRlbmN5PTE7Ci0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JfWVsc2V7Ci0JCWlmICghY2FyZC0+dHR5X3J4KXsJCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogUmVjZWl2ZSBzeW5jIGJ1ZmZlciBub3QgYXZhaWxhYmxlIVxuIiwKLQkJCQkgY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQkKLQkJaWYgKGxlbiA+IFRUWV9DSERMQ19NQVhfTVRVKXsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpewotCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBSZWNlaXZlZCBwYWNrZXQgc2l6ZSB0b28gYmlnOiAlaSBieXRlcywgTWF4OiAlaSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsbGVuLFRUWV9GTElQQlVGX1NJWkUpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0KLQkJCi0JCWlmKChhZGRyICsgbGVuKSA+IGNhcmQtPnUuYy5yeF90b3AgKyAxKSB7Ci0JCQlvZmZzZXQgPSBjYXJkLT51LmMucnhfdG9wIC0gYWRkciArIDE7Ci0JCQkKLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGNhcmQtPnR0eV9yeCwgb2Zmc2V0KTsKLQkJCQotCQkJYWRkciA9IGNhcmQtPnUuYy5yeF9iYXNlOwotCQkJbGVuIC09IG9mZnNldDsKLQkJfQotCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBhZGRyLCBjYXJkLT50dHlfcngrb2Zmc2V0LCBsZW4pOwotCQlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKLQkJaWYgKGxkKSB7Ci0JCQlpZiAobGQtPnJlY2VpdmVfYnVmKQotCQkJCWxkLT5yZWNlaXZlX2J1Zih0dHksY2FyZC0+dHR5X3J4LCZmcCxvbGVuKTsKLQkJCXR0eV9sZGlzY19kZXJlZihsZCk7Ci0JCX1lbHNlewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJIiVzOiBOTyBUVFkgU3luYyBsaW5lIGRpc2NpcGxpbmUhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJfQotCX0KLQotCWRiZ19wcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgRGF0YSAlaVxuIixjYXJkLT5kZXZuYW1lLG9sZW4pOwotCXJldHVybjsKLX0KLQotI2lmIDAKLXN0YXRpYyBpbnQgd2FucGlwZV90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAotCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBjb25maWdfdHR5IChzZGxhX3QgKmNhcmQpCi17Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0KLQkvKiBTZXR1cCB0aGUgQm9hcmQgZm9yIGFzeW5jaHJvbm91cyBtb2RlICovCi0JaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKXsKLQkJCi0JCWlmIChzZXRfYXN5X2NvbmZpZyhjYXJkKSkgewotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBGYWlsZWQgQ0hETEMgQXN5bmMgY29uZmlndXJhdGlvbiFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX1lbHNlewotCQkvKiBTZXR1cCB0aGUgQm9hcmQgZm9yIENIRExDICovCi0JCWlmIChzZXRfY2hkbGNfY29uZmlnKGNhcmQpKSB7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCBDSERMQyBjb25maWd1cmF0aW9uIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JLyogU2V0IGludGVycnVwdCBtb2RlIGFuZCBtYXNrICovCi0gICAgICAgIGlmIChjaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsIEFQUF9JTlRfT05fUlhfRlJBTUUgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9HTE9CQUxfRVhDRVBfQ09ORCB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX1RYX0ZSQU1FIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fQ0hETENfRVhDRVBfQ09ORCB8IEFQUF9JTlRfT05fVElNRVIpKXsKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gc2V0IGludGVycnVwdCB0cmlnZ2VycyFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwkKLSAgICAgICAgfQotCQotCi0JLyogTWFzayB0aGUgVHJhbnNtaXQgYW5kIFRpbWVyIGludGVycnVwdCAqLwotCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0gCi0JCX4oQVBQX0lOVF9PTl9UWF9GUkFNRSB8IEFQUF9JTlRfT05fVElNRVIpOwotCi0JCi0JLyogRW5hYmxlIGNvbW11bmljYXRpb25zICovCi0gCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCWlmIChhc3lfY29tbV9lbmFibGUoY2FyZCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgYXN5bmMgY29tbW51bmljYXRpb24hXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwotCQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLSAgICAgICAgfWVsc2V7IAotCQlpZiAoY2hkbGNfY29tbV9lbmFibGUoY2FyZCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgY2hkbGMgY29tbXVuaWNhdGlvbnMhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwotCQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQkvKiBJbml0aWFsaXplIFJ4L1R4IGJ1ZmZlciBjb250cm9sIGZpZWxkcyAqLwotCWluaXRfY2hkbGNfdHhfcnhfYnVmZihjYXJkKTsKLQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVElORyk7Ci0JcmV0dXJuIDA7IAotfQotCi0KLXN0YXRpYyBpbnQgY2hhbmdlX3NwZWVkKHNkbGFfdCAqY2FyZCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCi17Ci0JaW50CWJhdWQsIHJldD0wOwotCXVuc2lnbmVkIGNmbGFnOyAKLQlpbnQJZGJpdHMsc2JpdHMscGFyaXR5LGhhbmRzaGFraW5nOwotCi0JY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0KLQkvKiBUaGVyZSBpcyBhbHdheXMgb25lIHN0b3AgYml0ICovCi0Jc2JpdHM9V0FOT1BUX09ORTsKLQkKLQkvKiBQYXJpdHkgaXMgZGVmYXVsdGVkIHRvIE5PTkUgKi8KLQlwYXJpdHkgPSBXQU5PUFRfTk9ORTsKLQotCWhhbmRzaGFraW5nPTA7Ci0JCi0JLyogYnl0ZSBzaXplIGFuZCBwYXJpdHkgKi8KLQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKLQkgICAgICBjYXNlIENTNTogZGJpdHMgPSA1OyBicmVhazsKLQkgICAgICBjYXNlIENTNjogZGJpdHMgPSA2OyBicmVhazsKLQkgICAgICBjYXNlIENTNzogZGJpdHMgPSA3OyBicmVhazsKLQkgICAgICBjYXNlIENTODogZGJpdHMgPSA4OyBicmVhazsKLQkgICAgICAvKiBOZXZlciBoYXBwZW5zLCBidXQgR0NDIGlzIHRvbyBkdW1iIHRvIGZpZ3VyZSBpdCBvdXQgKi8KLQkgICAgICBkZWZhdWx0OiAgZGJpdHMgPSA4OyBicmVhazsKLQl9Ci0JCi0JLyogT25lIG1vcmUgc3RvcCBiaXQgc2hvdWxkIGJlIHN1cHBvcnRlZCwgdGh1cyBpbmNyZW1lbnQKLQkgKiB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyBNYXg9MiAqLwotCWlmIChjZmxhZyAmIENTVE9QQikgewotCQlzYml0cyA9IFdBTk9QVF9UV087Ci0JfQotCWlmIChjZmxhZyAmIFBBUkVOQikgewotCQlwYXJpdHkgPSBXQU5PUFRfRVZFTjsKLQl9Ci0JaWYgKGNmbGFnICYgUEFST0REKXsKLQkJcGFyaXR5ID0gV0FOT1BUX09ERDsKLQl9Ci0KLQkvKiBEZXRlcm1pbmUgZGl2aXNvciBiYXNlZCBvbiBiYXVkIHJhdGUgKi8KLQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKLQotCWlmICghYmF1ZCkKLQkJYmF1ZCA9IDk2MDA7CS8qIEIwIHRyYW5zaXRpb24gaGFuZGxlZCBpbiByc19zZXRfdGVybWlvcyAqLwotCi0JaWYgKGNmbGFnICYgQ1JUU0NUUykgewotCQloYW5kc2hha2luZ3w9QVNZX1JUU19IU19GT1JfUlg7Ci0JfQotCQotCWlmIChJX0lHTlBBUih0dHkpKQotCQlwYXJpdHkgPSBXQU5PUFRfTk9ORTsKLQotCWlmIChJX0lYT0ZGKHR0eSkpewotCQloYW5kc2hha2luZ3w9QVNZX1hPTl9YT0ZGX0hTX0ZPUl9SWDsKLQkJaGFuZHNoYWtpbmd8PUFTWV9YT05fWE9GRl9IU19GT1JfVFg7Ci0JfQotCi0JaWYgKElfSVhPTih0dHkpKXsKLQkJaGFuZHNoYWtpbmd8PUFTWV9YT05fWE9GRl9IU19GT1JfUlg7Ci0JCWhhbmRzaGFraW5nfD1BU1lfWE9OX1hPRkZfSFNfRk9SX1RYOwotCX0KLQotCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCWlmIChjYXJkLT53YW5kZXYuYnBzICE9IGJhdWQpCi0JCQlyZXQ9MTsKLQkJY2FyZC0+d2FuZGV2LmJwcyA9IGJhdWQ7Ci0JfQotCi0JaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKXsKLQkJaWYgKGNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zICE9IGhhbmRzaGFraW5nKQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zID0gaGFuZHNoYWtpbmc7Ci0KLQkJaWYgKGNhcmQtPnUuYy50eF9iaXRzX3Blcl9jaGFyICE9IGRiaXRzKQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy50eF9iaXRzX3Blcl9jaGFyID0gZGJpdHM7Ci0KLQkJaWYgKGNhcmQtPnUuYy5yeF9iaXRzX3Blcl9jaGFyICE9IGRiaXRzKQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy5yeF9iaXRzX3Blcl9jaGFyID0gZGJpdHM7Ci0JCQotCQlpZiAoY2FyZC0+dS5jLnN0b3BfYml0cyAhPSBzYml0cykKLQkJCXJldD0xOwotCQljYXJkLT51LmMuc3RvcF9iaXRzID0gc2JpdHM7Ci0KLQkJaWYgKGNhcmQtPnUuYy5wYXJpdHkgIT0gcGFyaXR5KQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy5wYXJpdHkgPSBwYXJpdHk7CQotCi0JCWNhcmQtPnUuYy5icmVha190aW1lciA9IDUwOwotCQljYXJkLT51LmMuaW50ZXJfY2hhcl90aW1lciA9IDEwOwotCQljYXJkLT51LmMucnhfY29tcGxldGVfbGVuZ3RoID0gMTAwOwotCQljYXJkLT51LmMueG9uX2NoYXIgPSAweEZFOwotCX1lbHNlewotCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyA9IEhETENfU1RSRUFNSU5HX01PREU7Ci0JfQotCQotCXJldHVybiByZXQ7Ci19Ci0KLQkKLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKLXsKLQlzZGxhX3QgKmNhcmQ7Ci0JaW50IGVycj0xOwotCi0JaWYgKCF0dHkpewotCQlyZXR1cm47Ci0JfQotCi0JY2FyZCA9IChzZGxhX3QgKil0dHktPmRyaXZlcl9kYXRhOwotCQkJCi0JaWYgKCFjYXJkKQotCQlyZXR1cm47Ci0KLQlpZiAoY2hhbmdlX3NwZWVkKGNhcmQsIHR0eSwgb2xkX3Rlcm1pb3MpIHx8ICFjYXJkLT51LmMuY29tbV9lbmFibGVkKXsKLQkJdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0JCQotCQlpZiAoY2FyZC0+dS5jLmNvbW1fZW5hYmxlZCl7Ci0JCQlsb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJCWNoZGxjX2Rpc2FibGVfY29tbV9zaHV0ZG93bihjYXJkKTsKLQkJCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0JCX0KLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0JCWVyciA9IGNvbmZpZ190dHkoY2FyZCk7Ci0JCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0JCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVFRZIEFzeW5jIENvbmZpZ3VyYXRpb246XG4iCi0JCQkJICIgICBCYXVkICAgICAgICA9JWlcbiIKLQkJCQkgIiAgIEhhbmRzaGFraW5nID0lc1xuIgotCQkJCSAiICAgVHggRGJpdHMgICAgPSVpXG4iCi0JCQkJICIgICBSeCBEYml0cyAgICA9JWlcbiIKLQkJCQkgIiAgIFBhcml0eSAgICAgID0lc1xuIgotCQkJCSAiICAgU3RvcCBCaXRzICAgPSVpXG4iLAotCQkJCSBjYXJkLT5kZXZuYW1lLAotCQkJCSBjYXJkLT53YW5kZXYuYnBzLAotCQkJCSBvcHRfZGVjb2RlW2NhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zXSwKLQkJCQkgY2FyZC0+dS5jLnR4X2JpdHNfcGVyX2NoYXIsCi0JCQkJIGNhcmQtPnUuYy5yeF9iaXRzX3Blcl9jaGFyLAotCQkJCSBwX2RlY29kZVtjYXJkLT51LmMucGFyaXR5XSAsCi0JCQkJIGNhcmQtPnUuYy5zdG9wX2JpdHMpOwotCQl9ZWxzZXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUVFkgU3luYyBDb25maWd1cmF0aW9uOlxuIgotCQkJCSAiICAgQmF1ZCAgICAgICAgPSVpXG4iCi0JCQkJICIgICBQcm90b2NvbCAgICA9SERMQ19TVFJFQU1JTkdcbiIsCi0JCQkJIGNhcmQtPmRldm5hbWUsY2FyZC0+d2FuZGV2LmJwcyk7Ci0JCX0KLQkJaWYgKCFlcnIpewotCQkJcG9ydF9zZXRfc3RhdGUoY2FyZCxXQU5fQ09OTkVDVEVEKTsKLQkJfWVsc2V7Ci0JCQlwb3J0X3NldF9zdGF0ZShjYXJkLFdBTl9ESVNDT05ORUNURUQpOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKLXsKLQlzZGxhX3QgKmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M9MDsKLQotCWlmICghdHR5KXsKLQkJcmV0dXJuOwotCX0KLQkKLQljYXJkID0gKHNkbGFfdCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JCQkKLQlpZiAoIWNhcmQpCi0JCXJldHVybjsKLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCkKLQkJcmV0dXJuOwotCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCXM1MDhfbG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkKLQkJd2FucGlwZV90dHlfdHJpZ2dlcl90eF9pcnEoY2FyZCk7Ci0KLQkJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNoZGxjX3NlbmQoY2FyZCwodm9pZCopJmNoLDEpKXsKLQkJd2FucGlwZV90dHlfdHJpZ2dlcl90eF9pcnEoY2FyZCk7Ci0JCWRiZ19wcmludGsoIiVzOiBGYWlsZWQgdG8gVFggY2hhciFcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCQotCWRiZ19wcmludGsoIiVzOiBDaGFyIFRYIE9LXG4iLGNhcmQtPmRldm5hbWUpOwotCQotCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWlmICghdHR5KQotCQlyZXR1cm47Ci0JCi0jaWYgZGVmaW5lZChTRVJJQUxfSEFWRV9QT0xMX1dBSVQpCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnBvbGxfd2FpdCk7Ci0jZW5kaWYKLQl0dHlfd2FrZXVwKHR0eSk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBoaWdoLXByaW9yaXR5IFhPTi9YT0ZGIGNoYXJhY3RlciB0bwotICogdGhlIGRldmljZQotICovCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9zZW5kX3hjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCi17Ci0JcmV0dXJuOwotfQotCi0KLXN0YXRpYyBpbnQgd2FucGlwZV90dHlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCB3YW5waXBlX3R0eV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0Jc2RsYV90ICpjYXJkOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVFRZIFdyaXRlIFJvb21cbiIpOwotCQotCWlmICghdHR5KXsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FyZCA9IChzZGxhX3QgKil0dHktPmRyaXZlcl9kYXRhOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlICE9IFdBTl9DT05ORUNURUQpCi0JCXJldHVybiAwOwotCQotCXJldHVybiBTRUNfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUU7Ci19Ci0KLQotc3RhdGljIGludCBzZXRfbW9kZW1fc3RhdHVzKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgY2hhciBkYXRhKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1iLT5idWZmZXJfbGVuZ3RoPTE7Ci0JbWItPmNvbW1hbmQ9U0VUX01PREVNX1NUQVRVUzsKLQltYi0+ZGF0YVswXT1kYXRhOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyICE9IENPTU1BTkRfT0spIAotCQljaGRsY19lcnJvciAoY2FyZCwgZXJyLCBtYik7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0Jc2RsYV90ICpjYXJkOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVFRZIEhhbmd1cCFcbiIpOwotCQotCWlmICghdHR5KXsKLQkJcmV0dXJuOwotCX0KLQotCWNhcmQgPSAoc2RsYV90ICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybjsKLQotCWxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCXNldF9tb2RlbV9zdGF0dXMoY2FyZCwwKTsKLQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQotewotCXJldHVybjsKLX0KLQotaW50IHdhbnBpcGVfdHR5X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGUgc2VyaWFsIGRyaXZlciBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gY29kZSEKLSAqLwotaW50IHdhbnBpcGVfdHR5X2luaXQoc2RsYV90ICpjYXJkKQotewotCXN0cnVjdCBzZXJpYWxfc3RhdGUgKiBzdGF0ZTsKLQkKLQkvKiBJbml0aWFsaXplIHRoZSB0dHlfZHJpdmVyIHN0cnVjdHVyZSAqLwotCi0JaWYgKGNhcmQtPnR0eV9taW5vciA8IDAgfHwgY2FyZC0+dHR5X21pbm9yID4gTlJfUE9SVFMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogSWxsZWdhbCBNaW5vciBUVFkgbnVtYmVyICgwLTQpOiAlaVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGNhcmQtPnR0eV9taW5vcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChXQU5fQ0FSRChjYXJkLT50dHlfbWlub3IpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRUWSBNaW5vciAlaSwgYWxyZWFkeSBpbiB1c2VcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT50dHlfbWlub3IpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmICh0dHlfaW5pdF9jbnQ9PTApewotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRUWSAlcyBEcml2ZXIgSW5pdDogTWFqb3IgJWksIE1pbm9yIFJhbmdlICVpLSVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsCi0JCQkJY2FyZC0+dS5jLmFzeW5jX21vZGUgPyAiQVNZTkMiIDogIlNZTkMiLAotCQkJCVdBTl9UVFlfTUFKT1IsTUlOX1BPUlQsTUFYX1BPUlQpOwotCQkKLQkJdHR5X2RyaXZlcl9tb2RlID0gY2FyZC0+dS5jLmFzeW5jX21vZGU7Ci0JCQotCQltZW1zZXQoJnNlcmlhbF9kcml2ZXIsIDAsIHNpemVvZihzdHJ1Y3QgdHR5X2RyaXZlcikpOwotCQlzZXJpYWxfZHJpdmVyLm1hZ2ljID0gVFRZX0RSSVZFUl9NQUdJQzsKLQkJc2VyaWFsX2RyaXZlci5vd25lciA9IFRISVNfTU9EVUxFOwotCQlzZXJpYWxfZHJpdmVyLmRyaXZlcl9uYW1lID0gIndhbnBpcGVfdHR5IjsgCi0JCXNlcmlhbF9kcml2ZXIubmFtZSA9ICJ0dHlXIjsKLQkJc2VyaWFsX2RyaXZlci5tYWpvciA9IFdBTl9UVFlfTUFKT1I7Ci0JCXNlcmlhbF9kcml2ZXIubWlub3Jfc3RhcnQgPSBXQU5fVFRZX01JTk9SOwotCQlzZXJpYWxfZHJpdmVyLm51bSA9IE5SX1BPUlRTOyAKLQkJc2VyaWFsX2RyaXZlci50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKLQkJc2VyaWFsX2RyaXZlci5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwotCQkKLQkJc2VyaWFsX2RyaXZlci5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JCXNlcmlhbF9kcml2ZXIuaW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQotCQkJQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCQlzZXJpYWxfZHJpdmVyLmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKLQkJCi0JCXNlcmlhbF9kcml2ZXIucmVmY291bnQgPSAxOwkvKiAhQCFAXiNeJiEhICovCi0KLQkJc2VyaWFsX2RyaXZlci5vcGVuID0gd2FucGlwZV90dHlfb3BlbjsKLQkJc2VyaWFsX2RyaXZlci5jbG9zZSA9IHdhbnBpcGVfdHR5X2Nsb3NlOwotCQlzZXJpYWxfZHJpdmVyLndyaXRlID0gd2FucGlwZV90dHlfd3JpdGU7Ci0JCQotCQlzZXJpYWxfZHJpdmVyLnB1dF9jaGFyID0gd2FucGlwZV90dHlfcHV0X2NoYXI7Ci0JCXNlcmlhbF9kcml2ZXIuZmx1c2hfY2hhcnMgPSB3YW5waXBlX3R0eV9mbHVzaF9jaGFyczsKLQkJc2VyaWFsX2RyaXZlci53cml0ZV9yb29tID0gd2FucGlwZV90dHlfd3JpdGVfcm9vbTsKLQkJc2VyaWFsX2RyaXZlci5jaGFyc19pbl9idWZmZXIgPSB3YW5waXBlX3R0eV9jaGFyc19pbl9idWZmZXI7Ci0JCXNlcmlhbF9kcml2ZXIuZmx1c2hfYnVmZmVyID0gd2FucGlwZV90dHlfZmx1c2hfYnVmZmVyOwotCQkvL3NlcmlhbF9kcml2ZXIuaW9jdGwgPSB3YW5waXBlX3R0eV9pb2N0bDsKLQkJc2VyaWFsX2RyaXZlci50aHJvdHRsZSA9IHdhbnBpcGVfdHR5X3Rocm90dGxlOwotCQlzZXJpYWxfZHJpdmVyLnVudGhyb3R0bGUgPSB3YW5waXBlX3R0eV91bnRocm90dGxlOwotCQlzZXJpYWxfZHJpdmVyLnNlbmRfeGNoYXIgPSB3YW5waXBlX3R0eV9zZW5kX3hjaGFyOwotCQlzZXJpYWxfZHJpdmVyLnNldF90ZXJtaW9zID0gd2FucGlwZV90dHlfc2V0X3Rlcm1pb3M7Ci0JCXNlcmlhbF9kcml2ZXIuc3RvcCA9IHdhbnBpcGVfdHR5X3N0b3A7Ci0JCXNlcmlhbF9kcml2ZXIuc3RhcnQgPSB3YW5waXBlX3R0eV9zdGFydDsKLQkJc2VyaWFsX2RyaXZlci5oYW5ndXAgPSB3YW5waXBlX3R0eV9oYW5ndXA7Ci0JCXNlcmlhbF9kcml2ZXIuYnJlYWtfY3RsID0gd2FucGlwZV90dHlfYnJlYWs7Ci0JCXNlcmlhbF9kcml2ZXIud2FpdF91bnRpbF9zZW50ID0gd2FucGlwZV90dHlfd2FpdF91bnRpbF9zZW50OwotCQlzZXJpYWxfZHJpdmVyLnJlYWRfcHJvYyA9IHdhbnBpcGVfdHR5X3JlYWRfcHJvYzsKLQkJCi0JCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfZHJpdmVyKSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHJlZ2lzdGVyIHNlcmlhbCBkcml2ZXIhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCX0KLQotCi0JLyogVGhlIHN1YnNlcXVlbnQgcG9ydHMgbXVzdCBjb21wbHkgdG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqLwotCWlmICh0dHlfZHJpdmVyX21vZGUgIT0gY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRXJyb3I6IFRUWSBEcml2ZXIgb3BlcmF0aW9uIG1vZGUgbWlzbWF0Y2ghXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhlIFRUWSBkcml2ZXIgaXMgY29uZmlndXJlZCBmb3IgJXMhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIHR0eV9kcml2ZXJfbW9kZSA/ICJBU1lOQyIgOiAiU1lOQyIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCi0JdHR5X2luaXRfY250Kys7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEluaXRpYWxpemluZyBUVFkgJXMgRHJpdmVyIE1pbm9yICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwKLQkJCXR0eV9kcml2ZXJfbW9kZSA/ICJBU1lOQyIgOiAiU1lOQyIsCi0JCQljYXJkLT50dHlfbWlub3IpOwotCQotCXR0eV9jYXJkX21hcFtjYXJkLT50dHlfbWlub3JdID0gY2FyZDsKLQlzdGF0ZSA9ICZyc190YWJsZVtjYXJkLT50dHlfbWlub3JdOwotCQotCXN0YXRlLT5tYWdpYyA9IFNTVEFURV9NQUdJQzsKLQlzdGF0ZS0+bGluZSA9IDA7Ci0Jc3RhdGUtPnR5cGUgPSBQT1JUX1VOS05PV047Ci0Jc3RhdGUtPmN1c3RvbV9kaXZpc29yID0gMDsKLQlzdGF0ZS0+Y2xvc2VfZGVsYXkgPSA1KkhaLzEwOwotCXN0YXRlLT5jbG9zaW5nX3dhaXQgPSAzMCpIWjsKLQlzdGF0ZS0+aWNvdW50LmN0cyA9IHN0YXRlLT5pY291bnQuZHNyID0gCi0JCXN0YXRlLT5pY291bnQucm5nID0gc3RhdGUtPmljb3VudC5kY2QgPSAwOwotCXN0YXRlLT5pY291bnQucnggPSBzdGF0ZS0+aWNvdW50LnR4ID0gMDsKLQlzdGF0ZS0+aWNvdW50LmZyYW1lID0gc3RhdGUtPmljb3VudC5wYXJpdHkgPSAwOwotCXN0YXRlLT5pY291bnQub3ZlcnJ1biA9IHN0YXRlLT5pY291bnQuYnJrID0gMDsKLQlzdGF0ZS0+aXJxID0gY2FyZC0+d2FuZGV2LmlycTsgCi0KLQlJTklUX1dPUksoJmNhcmQtPnR0eV93b3JrLCB0dHlfcG9sbF93b3JrLCAodm9pZCopY2FyZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKioqKioqIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfZnIuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2ZyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMWNlOWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfZnIuYworKysgL2Rldi9udWxsCkBAIC0xLDUwNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfZnIuYwlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4gRnJhbWUgcmVsYXkgbW9kdWxlLgotKgotKiBBdXRob3Iocyk6CU5lbmFkIENvcmJpYyAgPG5jb3JiaWNAc2FuZ29tYS5jb20+Ci0qCQlHaWRlb24gSGFjawotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBOb3YgMjMsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBvIEFkZGVkIHN1cHBvcnQgZm9yIDIuNC5YIGtlcm5lbHMKLSogTm92IDE1LCAyMDAwICBEYXZpZCBSb2thdmFyZyAgCi0qICAgICAgICAgICAgICAgTmVuYWQgQ29yYmljCW8gQWRkZWQgZnJhbWUgcmVsYXkgYnJpZGdpbmcgc3VwcG9ydC4KLSogCQkJCSAgT3JpZ2luYWwgY29kZSBmcm9tIE1hcmsgV2VsbHMgYW5kIEtyaXN0aWFuIEhvZmZtYW5uIGhhcwotKiAJCQkJICBiZWVuIGludGVncmF0ZWQgaW50byB0aGUgZnJhbWUgcmVsYXkgZHJpdmVyLgotKiBOb3YgMTMsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBvIEFkZGVkIHRydWUgaW50ZXJmYWNlIHR5cGUgZW5jb2Rpbmcgb3B0aW9uLgotKiAJCQkJICBUY3BkdW1wIGRvZXNuJ3Qgc3VwcG9ydCBGcmFtZSBSZWxheSBpbnRlZmFjZQotKiAJCQkJICB0eXBlcywgdG8gZml4IHRoaXMgdHJ1ZSB0eXBlIG9wdGlvbiB3aWxsIHNldAotKiAJCQkJICB0aGUgaW50ZXJmYWNlIHR5cGUgdG8gUkFXIElQIG1vZGUuCi0qIE5vdiAwNywgMjAwMCAgTmVuYWQgQ29yYmljCW8gQWRkZWQgc2VjdXJpdHkgZmVhdHVyZXMgZm9yIFVEUCBkZWJ1Z2dpbmc6Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVueSBhbGwgYW5kIHNwZWNpZnkgYWxsb3dlZCByZXF1ZXN0cy4KLSogTm92IDA2LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBXYW5waXBlIGludGVyZmFjZXMgY29uZm9ybSB0byByYXcgcGFja2V0IGludGVyZmFjZXMuICAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCB0aGUgaWZfaGVhZGVyIGludG8gdGhlIGlmX3NlbmQoKSByb3V0aW5lLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpZl9oZWFkZXIoKSB3YXMgYnJlYWtpbmcgdGhlIGxpYnBjYXAgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC4gaS5lLiBzdXBwb3J0IGZvciB0Y3BkdW1wLCBldGhlcmVhbCAuLi4KLSogT2N0IDEyLiAyMDAwICBOZW5hZCBDb3JiaWMgICAgbyBBZGRlZCBlcnJvciBtZXNzYWdlIGluIGZyX2NvbmZpZ3VyZQotKiBKdWwgMzEsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEZpeGVkIHRoZSBSb3V0ZXIgVVAgVGltZS4KLSogQXByIDI4LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCB0aGUgb3B0aW9uIHRvIHNodXRkb3duIGFuIGludGVyZmFjZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGNoYW5uZWwgZ2V0cyBkaXNjb25uZWN0ZWQuCi0qIEFwciAyOCwgMjAwMCAgTmVuYWQgQ29yYmljIAlvIEFkZGVkIE0uR3JhbnRzIHBhdGNoOiBkaXNhbGxvdyBkdXBsaWNhdGUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2Ugc2V0dXBzLiAKLSogQXByIDI1LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCBNLkdyYW50cyBwYXRjaDogZHluYW1pY2FsbHkgYWRkL3JlbW92ZSAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZGxjaXMvaW50ZXJmYWNlcy4KLSogTWFyIDIzLCAyMDAwICBOZW5hZCBDb3JiaWMgCW8gSW1wcm92ZWQgdGFzayBxdWV1ZSwgYmggaGFuZGxpbmcuCi0qIE1hciAxNiwgMjAwMAlOZW5hZCBDb3JiaWMJbyBBZGRlZCBJbnZlcnNlIEFSUCBzdXBwb3J0Ci0qIE1hciAxMywgMjAwMCAgTmVuYWQgQ29yYmljCW8gQWRkZWQgbmV3IHNvY2tldCBBUEkgc3VwcG9ydC4KLSogTWFyIDA2LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBCdWcgRml4OiBjb3JydXB0ZWQgbWJveCByZWNvdmVyeS4KLSogRmViIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgbyBGaXhlZCB1cCBGVDEgVURQIGRlYnVnZ2luZyBwcm9ibGVtLgotKiBEZXYgMTUsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIEZpeGVkIHVwIGhlYWRlciBmaWxlcyBmb3IgMi4wLlgga2VybmVscwotKgotKiBOb3YgMDgsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIENvbWJpbmVkIGFsbCBkZWJ1ZyBVRFAgY2FsbHMgaW50byBvbmUgZnVuY3Rpb24KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBSZW1vdmVkIHRoZSBBUlAgc3VwcG9ydC4gVGhpcyBoYXMgdG8gYmUgZG9uZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBuZXh0IHZlcnNpb24uCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gT25seSBhIE5vZGUgY2FuIGltcGxlbWVudCBOTyBzaWduYWxsaW5nLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemUgRExDSSBkdXJpbmcgaWZfb3BlbigpIGlmIE5PIAotKgkJCQkgIHNpZ25hbGxpbmcuCi0qCQkJCW8gVG9vayBvdXQgSVBYIHN1cHBvcnQsIGltcGxlbWVudCBpbiBuZXh0Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbgotKiBTZXAgMjksIDE5OTkgIE5lbmFkIENvcmJpYwlvIEFkZGVkIFNNUCBzdXBwb3J0IGFuZCBjaGFuZ2VkIHRoZSB1cGRhdGUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0byB1c2UgdGltZXIgaW50ZXJydXB0LgotKgkJCQlvIEZpeGVkIHRoZSBDSVIgYnVnOiAgU2V0IHRoZSB2YWx1ZSBvZiBCQwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIENJUiB3aGVuIHRoZSBDSVIgaXMgZW5hYmxlZC4KLSogIAkJCQlvIFVwZGF0ZWQgY29tbWVudHMsIHN0YXRpc3RpY3MgYW5kIHRyYWNpbmcuCi0qIEp1biAwMiwgMTk5OQlHaWRlb24gSGFjawlvIFVwZGF0ZWQgZm9yIFM1MTQgc3VwcG9ydC4KLSogU2VwIDE4LCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gVXBkYXRlZCBmb3IgMi4yLlgga2VybmVscy4KLSogSnVsIDMxLCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gUmVtb3ZlZCB3cGZfcG9sbCByb3V0aW5lLiAgVGhlIGNoYW5uZWwvRExDSSAKLSoJCQkJICBzdGF0dXMgaXMgcmVjZWl2ZWQgdGhyb3VnaCBhbiBldmVudCBpbnRlcnJ1cHQuCi0qIEp1bCAwOCwgMTk5OAlEYXZpZCBGb25nCW8gQWRkZWQgaW52ZXJzZSBBUlAgc3VwcG9ydC4KLSogTWFyIDI2LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gUmV0dXJuaW5nIHJldHVybiBjb2RlcyBmb3IgZmFpbGVkIFVEUCBjbWRzLgotKiBKYW4gMjgsIDE5OTcJSmFzcHJlZXQgU2luZ2ggIG8gSW1wcm92ZWQgaGFuZGxpbmcgb2YgaW5hY3RpdmUgRExDSXMuCi0qIERlYyAzMCwgMTk5NwlKYXNwcmVldCBTaW5naAlvIFJlcGxhY2VkIGRldl90aW50KCkgd2l0aCBtYXJrX2JoKE5FVF9CSCkKLSogRGVjIDE2LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gSW1wbGVtZW50ZWQgTXVsdGlwbGUgSVBYIHN1cHBvcnQuCi0qIE5vdiAyNiwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEltcHJvdmVkIGxvYWQgc2hhcmluZyB3aXRoIG11bHRpcGxlIGJvYXJkcwotKgkJCQlvIEFkZGVkIENsaSgpIHRvIHByb3RlY3QgZW5hYmxpbmcgb2YgaW50ZXJydXB0cwotKgkJCQkgIHdoaWxlIHBvbGxpbmcgaXMgY2FsbGVkLgotKiBOb3YgMjQsIDE5OTcJSmFzcHJlZXQgU2luZ2gJbyBBZGRlZCBjb3VudGVycyB0byBhdm9pZCBlbmFibGluZyBvZiBpbnRlcnJ1cHRzCi0qCQkJCSAgd2hlbiB0aGV5IGhhdmUgYmVlbiBkaXNhYmxlZCBieSBhbm90aGVyCi0qCQkJCSAgaW50ZXJmYWNlIG9yIHJvdXRpbmUgKGVnLiB3cGZfcG9sbCkuCi0qIE5vdiAwNiwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIElOVFJfVEVTVF9NT0RFIHRvIGF2b2lkIHBvbGxpbmcJCi0qCQkJCSAgcm91dGluZSBkaXNhYmxlIGludGVycnVwdHMgZHVyaW5nIGludGVycnVwdAotKgkJCQkgIHRlc3RpbmcuCi0qIE9jdCAyMCwgMTk5NyAgSmFzcHJlZXQgU2luZ2ggIG8gQWRkZWQgaG9va3MgaW4gZm9yIFJvdXRlciBVUCB0aW1lLgotKiBPY3QgMTYsIDE5OTcgIEphc3ByZWV0IFNpbmdoICBvIFRoZSBjcml0aWNhbCBmbGFnIGlzIHVzZWQgdG8gbWFpbnRhaW4gZmxvdwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgYnkgYXZvaWRpbmcgUkFDRSBjb25kaXRpb25zLiAgVGhlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKSBhcmUgdGFrZW4gb3V0LgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmcl9jaGFubmVsIHN0cnVjdHVyZSBpcyBhcHBlbmRlZCBmb3IgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyIFN0YXRpc3RpY3MuCi0qIE9jdCAxNSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgICBvIHVwZGF0ZWQgaWZfc2VuZCgpIGFuZCByZWNlaXZlIGZvciBJUFgKLSogQXVnIDI5LCAxOTk3ICBGYXJoYW4gVGhhd2FyICAgIG8gUmVtb3ZlZCBtb3N0IG9mIHRoZSBjbGkoKSBhbmQgc3RpKCkKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gQWJzdHJhY3RlZCB0aGUgVURQIG1hbmFnZW1lbnQgc3R1ZmYKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gTm93IHVzZSB0YnVzeSBhbmQgY3JpdGljYWwgbW9yZSBpbnRlbGxpZ2VudGx5Ci0qIEp1bCAyMSwgMTk5NyAgSmFzcHJlZXQgU2luZ2gJIG8gQ2FuIGNvbmZpZ3VyZSBUMzkxLCBUMzkyLCBOMzkxLCBOMzkyICYgTjM5MwotKgkJCQkgICB0aHJvdWdoIHJvdXRlci5jb25mLgotKgkJCQkgbyBQcm90ZWN0ZWQgY2FsbHMgdG8gc2RsYV9wZWVrKCkgYnkgYWREaW5nIAotKgkJCQkgICBzYXZlX2ZsYWdzKCksIGNsaSgpIGFuZCByZXN0b3JlX2ZsYWdzKCkuCi0qCQkJCSBvIEFkZGVkIGVycm9yIG1lc3NhZ2UgZm9yIEluYWN0aXZlIERMQ0lzIGluCi0qCQkJCSAgIGZyX2V2ZW50KCkgYW5kIHVwZGF0ZV9jaGFuX3N0YXRlKCkuCi0qCQkJCSBvIEZpeGVkIGZyZWVpbmcgdXAgb2YgYnVmZmVycyB1c2luZyBrZnJlZSgpIAotKgkJCSAgICAgICAgICAgd2hlbiBwYWNrZXRzIGFyZSByZWNlaXZlZC4KLSogSnVsIDA3LCAxOTk3CUphc3ByZWV0IFNpbmdoCSBvIEFkZGVkIGNvbmZpZ3VyYWJsZSBUVEwgZm9yIFVEUCBwYWNrZXRzIAotKgkJCQkgbyBBZGRlZCBhYmlsaXR5IHRvIGRpc2NhcmQgbXVsdGljYXN0IGFuZCAKLSoJCQkJICAgYnJvYWRjYXN0IHNvdXJjZSBhZGRyZXNzZWQgcGFja2V0cwotKiBKdW4gMjcsIDE5OTcJSmFzcHJlZXQgU2luZ2gJIG8gQWRkZWQgRlQxIG1vbml0b3IgY2FwYWJpbGl0aWVzIAotKgkJCQkgICBOZXcgY2FzZSAoMHg0NCkgc3RhdGVtZW50IGluIGlmX3NlbmQgcm91dGluZSAKLSoJCQkJICAgQWRkZWQgYSBnbG9iYWwgdmFyaWFibGUgckNvdW50IHRvIGtlZXAgdHJhY2sKLSoJCQkgCSAgIG9mIEZUMSBzdGF0dXMgZW5hYmxlZCBvbiB0aGUgYm9hcmQuCi0qIE1heSAyOSwgMTk5NwlKYXNwcmVldCBTaW5naAkgbyBGaXhlZCBtYWpvciBGbG93IENvbnRyb2wgUHJvYmxlbQotKgkJCQkgICBXaXRoIG11bHRpcGxlIGJvYXJkcyBhIHByb2JsZW0gd2FzIHNlZW4gd2hlcmUKLSoJCQkJICAgdGhlIHNlY29uZCBib2FyZCBhbHdheXMgc3RvcHBlZCB0cmFuc21pdHRpbmcKLSoJCQkJICAgcGFja2V0IGFmdGVyIHJ1bm5pbmcgZm9yIGEgd2hpbGUuIFRoZSBjb2RlCi0qCQkJCSAgIGdvdCBpbnRvIGEgc3RhZ2Ugd2hlcmUgdGhlIGludGVycnVwdHMgd2VyZQotKgkJCQkgICBkaXNhYmxlZCBhbmQgZGV2LT50YnVzeSB3YXMgc2V0IHRvIDEuCi0qICAgICAgICAgICAgICAgICAgCQkgICBUaGlzIGNhdXNlZCB0aGUgSWZfc2VuZCgpIHJvdXRpbmUgdG8gZ2V0IGludG8KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlmIGNsYXVzZSBmb3IgaXQoMCxkZXYtPnRidXN5KSAKLSoJCQkJICAgZm9yZXZlci4KLSoJCQkJICAgVGhlIGNvZGUgZ290IGludG8gdGhpcyBzdGFnZSBkdWUgdG8gYW4gCi0qCQkJCSAgIGludGVycnVwdCBvY2N1cnJpbmcgd2l0aGluIHRoZSBpZiBjbGF1c2UgZm9yIAotKgkJCQkgICBzZXRfYml0KDAsZGV2LT50YnVzeSkuICBTaW5jZSBhbiBpbnRlcnJ1cHQgCi0qCQkJCSAgIGRpc2FibGVzIGZ1cmh0ZXIgdHJhbnNtaXQgaW50ZXJydXB0IGFuZCAKLSogCQkJCSAgIG1ha2VzIGRldi0+dGJ1c3kgPSAwLCB0aGlzIGVmZmVjdCB3YXMgdW5kb25lIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBtYWtpbmcgZGV2LT50YnVzeSA9IDEgaW4gdGhlIGlmIGNsYXVzZS4KLSoJCQkJICAgVGhlIEZpeCBjaGVja3MgdG8gc2VlIGlmIFRyYW5zbWl0IGludGVycnVwdHMKLSoJCQkJICAgYXJlIGRpc2FibGVkIHRoZW4gZG8gbm90IG1ha2UgZGV2LT50YnVzeSA9IDEKLSogCSAgIAkJCSAgIEludHJvZHVjZWQgYSBnbG9iYWwgdmFyaWFibGU6IGludF9vY2N1ciBhbmQKLSoJCQkJICAgYWRkZWQgdHhfaW50X2VuYWJsZWQgaW4gdGhlIHdhbl9kZXZpY2UgCi0qCQkJCSAgIHN0cnVjdHVyZS4JCi0qIE1heSAyMSwgMTk5NyAgSmFzcHJlZXQgU2luZ2ggICBvIEZpeGVkIFVEUCBNYW5hZ2VtZW50IGZvciBtdWx0aXBsZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2FyZHMuCi0qCi0qIEFwciAyNSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgICBvIGFkZGVkIFVEUCBNYW5hZ2VtZW50IHN0dWZmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGZpeGVkIGJ1ZyBpbiBpZl9zZW5kKCkgYW5kIHR4X2ludHIoKSB0bwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCBhbmQgd2FrZXVwIGFsbCBkZXZpY2VzCi0qIE1hciAxMSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgIFZlcnNpb24gMy4xLjEKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZml4ZWQgKCsxKSBidWcgaW4gZnI1MDhfcnhfaW50cigpCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGNoYW5nZWQgaWZfc2VuZCgpIHRvIHJldHVybiAwIGlmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbmRldi5jcml0aWNhbCgpIGlzIHRydWUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZnJlZSBzb2NrZXQgYnVmZmVyIGluIGlmX3NlbmQoKSBpZgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgMCAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gYWRkZWQgdHhfaW50cigpIHJvdXRpbmUKLSogSmFuIDMwLCAxOTk3CUdlbmUgS296aW4JVmVyc2lvbiAzLjEuMAotKgkJCQkgbyBpbXBsZW1lbnRlZCBleGVjKCkgZW50cnkgcG9pbnQKLSoJCQkJIG8gZml4ZWQgYSBidWcgY2F1c2luZyBkcml2ZXIgY29uZmlndXJlZCBhcwotKgkJCQkgICBhIEZSIHN3aXRjaCB0byBiZSBzdHVjayBpbiBXQU5fCi0qCQkJCSAgIG1vZGUKLSogSmFuIDAyLCAxOTk3CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfKiBkZWZpbmVzICovCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgkvKiBodG9ucygpLCBldGMuICovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBmb3IgaW5iKCksIG91dGIoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4JIAkvKiBmb3IgZG9fZ2V0dGltZW9mZGF5ICovCQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpIG1hY3JvICovCi0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlX2NvbW1vbi5oPgkvKiBXYW5waXBlIFNvY2tldCAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGUuaD4JCi0KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2ZyLmg+CQkvKiBmcmFtZSByZWxheSBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMgKi8KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+ICAgICAgICAgIAkvKiBEeW5hbWljIFJvdXRlIENyZWF0aW9uICovCi0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4JCS8qIGV0aF90eXBlX3RyYW5zKCkgdXNlZCBmb3IgYnJpZGdpbmcgKi8KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLQotLyoqKioqKiBEZWZpbmVzICYgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUJTUFYX0NNRF9SRVRSWQkxMAkJLyogbWF4IG51bWJlciBvZiBmaXJtd2FyZSByZXRyaWVzICovCi0KLSNkZWZpbmUJRlJfSEVBREVSX0xFTgk4CQkvKiBtYXggZW5jYXBzdWxhdGlvbiBoZWFkZXIgc2l6ZSAqLwotI2RlZmluZQlGUl9DSEFOTkVMX01UVQkxNTAwCQkvKiB1bmZyYWdtZW50ZWQgbG9naWNhbCBjaGFubmVsIE1UVSAqLwotCi0vKiBRLjkyMiBmcmFtZSB0eXBlcyAqLwotI2RlZmluZQlROTIyX1VJCQkweDAzCQkvKiBVbm51bWJlcmVkIEluZm8gZnJhbWUgKi8KLSNkZWZpbmUJUTkyMl9YSUQJMHhBRgkJCi0KLS8qIERMQ0kgY29uZmlndXJlZCBvciBub3QgKi8KLSNkZWZpbmUgRExDSV9OT1RfQ09ORklHVVJFRAkweDAwCi0jZGVmaW5lIERMQ0lfQ09ORklHX1BFTkRJTkcJMHgwMQotI2RlZmluZSBETENJX0NPTkZJR1VSRUQJCTB4MDIKLQotLyogQ0lSIGVuYWJsZWQgb3Igbm90ICovCi0jZGVmaW5lIENJUl9FTkFCTEVECTB4MDAKLSNkZWZpbmUgQ0lSX0RJU0FCTEVECTB4MDEKLQotI2RlZmluZSBGUkFNRV9SRUxBWV9BUEkgMQotI2RlZmluZSBNQVhfQkhfQlVGRgkxMAotCi0vKiBGb3IgaGFuZGxlX0lQWFdBTigpICovCi0jZGVmaW5lIENWSGV4VG9Bc2NpaShiKSAoKCh1bnNpZ25lZCBjaGFyKShiKSA+ICh1bnNpZ25lZCBjaGFyKTkpID8gKCh1bnNpZ25lZCBjaGFyKSdBJyArICgodW5zaWduZWQgY2hhcikoYikgLSAodW5zaWduZWQgY2hhcikxMCkpIDogKCh1bnNpZ25lZCBjaGFyKScwJyArICh1bnNpZ25lZCBjaGFyKShiKSkpCi0gCi0vKioqKioqIERhdGEgU3RydWN0dXJlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBpcyBhbiBleHRlbnRpb24gb2YgdGhlICdzdHJ1Y3QgZGV2aWNlJyB3ZSBjcmVhdGUgZm9yIGVhY2ggbmV0d29yawotICogaW50ZXJmYWNlIHRvIGtlZXAgdGhlIHJlc3Qgb2YgY2hhbm5lbC1zcGVjaWZpYyBkYXRhLgotICovCi10eXBlZGVmIHN0cnVjdCBmcl9jaGFubmVsCi17Ci0Jd2FucGlwZV9jb21tb25fdCBjb21tb247Ci0JY2hhciBuYW1lW1dBTl9JRk5BTUVfU1orMV07CS8qIGludGVyZmFjZSBuYW1lLCBBU0NJSVogKi8KLQl1bnNpZ25lZCBkbGNpX2NvbmZpZ3VyZWQgIDsJLyogY2hlY2sgd2hldGhlciBjb25maWd1cmVkIG9yIG5vdCAqLwotCXVuc2lnbmVkIGNpcl9zdGF0dXM7CQkvKiBjaGVjayB3aGV0aGVyIENJUiBlbmFibGVkIG9yIG5vdCAqLwotCXVuc2lnbmVkIGRsY2k7CQkJLyogbG9naWNhbCBjaGFubmVsIG51bWJlciAqLwotCXVuc2lnbmVkIGNpcjsJCQkvKiBjb21taXR0ZWQgaW5mb3JtYXRpb24gcmF0ZSAqLwotCXVuc2lnbmVkIGJjOwkJCS8qIGNvbW1pdHRlZCBidXJzdCBzaXplICovCi0JdW5zaWduZWQgYmU7CQkJLyogZXhjZXNzIGJ1cnN0IHNpemUgKi8KLQl1bnNpZ25lZCBtYzsJCQkvKiBtdWx0aWNhc3Qgc3VwcG9ydCBvbiBvciBvZmYgKi8KLQl1bnNpZ25lZCB0eF9pbnRfc3RhdHVzOwkJLyogVHJhbnNtaXQgSW50ZXJydXB0IFN0YXR1cyAqLwkKLQl1bnNpZ25lZCBzaG9ydCBwa3RfbGVuZ3RoOwkvKiBQYWNrZXQgTGVuZ3RoICovCi0JdW5zaWduZWQgbG9uZyByb3V0ZXJfc3RhcnRfdGltZTsvKiBSb3V0ZXIgc3RhcnQgdGltZSBpbiBzZWNvbmRzICovCi0JdW5zaWduZWQgbG9uZyB0aWNrX2NvdW50ZXI7CS8qIGNvdW50ZXIgZm9yIHRyYW5zbWl0IHRpbWUgb3V0ICovCi0JY2hhciBkZXZfcGVuZGluZ19kZXZ0aW50OwkvKiBpbnRlcmZhY2UgcGVuZGluZyBkZXZfdGludCgpICovCi0Jdm9pZCAqZGxjaV9pbnRfaW50ZXJmYWNlOwkvKiBwb2ludGVyIHRvIHRoZSBETENJIEludGVyZmFjZSAqLyAKLQl1bnNpZ25lZCBsb25nIElCX2FkZHI7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIEludGVyZmFjZSBCeXRlICovCi0JdW5zaWduZWQgbG9uZyBzdGF0ZV90aWNrOwkvKiB0aW1lIG9mIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSAqLwotCXVuc2lnbmVkIGNoYXIgZW5hYmxlX0lQWDsJLyogRW5hYmxlL0Rpc2FibGUgdGhlIHVzZSBvZiBJUFggKi8KLQl1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyOwkvKiBJbnRlcm5hbCBOZXR3b3JrIE51bWJlciBmb3IgSVBYKi8KLQlzZGxhX3QgKmNhcmQ7CQkJLyogLT4gb3duZXIgKi8KLQl1bnNpZ25lZCByb3V0ZV9mbGFnOwkJLyogQWRkL1JlbSBkZXN0IGFkZHIgaW4gcm91dGUgdGFibGVzICovCi0JdW5zaWduZWQgaW5hcnA7CQkJLyogSW52ZXJzZSBBcnAgUmVxdWVzdCBzdGF0dXMgKi8gCi0JbG9uZyBpbmFycF9yZWFkeTsJCS8qIFJlYWR5IHRvIHNlbmQgcmVxdWVzdHMgKi8KLQlpbnQgaW5hcnBfaW50ZXJ2YWw7CQkvKiBUaW1lIGJldHdlZW4gSW5BcnAgUmVxdWVzdHMgKi8KLQl1bnNpZ25lZCBsb25nIGluYXJwX3RpY2s7CS8qIEluQXJwIGppZmZpZXMgdGljayBjb3VudGVyICovCi0JbG9uZyBpbnRlcmZhY2VfZG93bjsJCS8qIEJyaW5nIGludGVyZmFjZSBkb3duIG9uIGRpc2Nvbm5lY3QgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBpZnN0YXRzOwkvKiBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwotCWlmX3NlbmRfc3RhdF90IGRydnN0YXRzX2lmX3NlbmQ7Ci0gICAgICAgIHJ4X2ludHJfc3RhdF90IGRydnN0YXRzX3J4X2ludHI7Ci0gICAgICAgIHBpcGVfbWdtdF9zdGF0X3QgZHJ2c3RhdHNfZ2VuOwotCXVuc2lnbmVkIGxvbmcgcm91dGVyX3VwX3RpbWU7Ci0KLQl1bnNpZ25lZCBzaG9ydCB0cmFuc21pdF9sZW5ndGg7Ci0Jc3RydWN0IHNrX2J1ZmYgKmRlbGF5X3NrYjsKLQotCWJoX2RhdGFfdCAqYmhfaGVhZDsJICAJICAvKiBDaXJjdWxhciBidWZmZXIgZm9yIGNoZGxjX2JoICovCi0JdW5zaWduZWQgbG9uZyAgdHFfd29ya2luZzsKLQl2b2xhdGlsZSBpbnQgIGJoX3dyaXRlOwotCXZvbGF0aWxlIGludCAgYmhfcmVhZDsKLQlhdG9taWNfdCAgYmhfYnVmZl91c2VkOwotCi0JLyogUG9sbGluZyB0YXNrIHF1ZXVlLiBFYWNoIGludGVyZmFjZQotICAgICAgICAgKiBoYXMgaXRzIG93biB0YXNrIHF1ZXVlLCB3aGljaCBpcyB1c2VkCi0gICAgICAgICAqIHRvIGRlZmVyIGV2ZW50cyBmcm9tIHRoZSBpbnRlcnJ1cHQgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJfcG9sbF93b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0IGZyX2FycF90aW1lcjsKLQotCXUzMiBpcF9sb2NhbDsKLQl1MzIgaXBfcmVtb3RlOwotCWxvbmcgY29uZmlnX2RsY2k7Ci0JbG9uZyB1bmNvbmZpZ19kbGNpOwotCi0JLyogV2hldGhlciB0aGlzIGludGVyZmFjZSBzaG91bGQgYmUgc2V0dXAgYXMgYSBnYXRld2F5LgotCSAqIFVzZWQgYnkgZHluYW1pYyByb3V0ZSBzZXR1cCBjb2RlICovCi0JdTggIGdhdGV3YXk7Ci0KLQkvKiBUcnVlIGludGVyZmFjZSB0eXBlICovCi0JdTggdHJ1ZV9pZl9lbmNvZGluZzsKLQl1OCBmcl9oZWFkZXJbRlJfSEVBREVSX0xFTl07Ci0JY2hhciBmcl9oZWFkZXJfbGVuOwotCi19IGZyX2NoYW5uZWxfdDsKLQotLyogUm91dGUgRmxhZyBvcHRpb25zICovCi0jZGVmaW5lIE5PX1JPVVRFCTB4MDAKLSNkZWZpbmUgQUREX1JPVVRFIAkweDAxCi0jZGVmaW5lIFJPVVRFX0FEREVECTB4MDIKLSNkZWZpbmUgUkVNT1ZFX1JPVVRFIAkweDAzCi0jZGVmaW5lIEFSUF9SRVEJCTB4MDQKLQotLyogaW5hcnAgb3B0aW9ucyAqLwotI2RlZmluZSBJTkFSUF9OT05FCQkweDAwCi0jZGVmaW5lIElOQVJQX1JFUVVFU1QJCTB4MDEKLSNkZWZpbmUgSU5BUlBfQ09ORklHVVJFRAkweDAyCi0KLS8qIHJlYXNvbnMgZm9yIGVuYWJsaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgb24gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VEUCAgIAkweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUgCTB4MDIKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX0FSUAkweDA0Ci0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEVfU1RBVEUgCTB4MDgKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRwkweDEwCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRwkweDIwCi0KLQotdHlwZWRlZiBzdHJ1Y3QgZGxjaV9zdGF0dXMKLXsKLQl1bnNpZ25lZCBzaG9ydCBkbGNpCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIHN0YXRlCVBBQ0tFRDsKLX0gZGxjaV9zdGF0dXNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgZGxjaV9JQl9tYXBwaW5nCi17Ci0JdW5zaWduZWQgc2hvcnQgZGxjaQkJUEFDS0VEOwotCXVuc2lnbmVkIGxvbmcgIGFkZHJfdmFsdWUJUEFDS0VEOwotfSBkbGNpX0lCX21hcHBpbmdfdDsKLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgRExDSSBsaXN0IFR4IGludGVycnVwdCBtb2RlLiAgSXQgaXMgdXNlZCB0bwotICAgZW5hYmxlIGludGVycnVwdCBiaXQgYW5kIHNldCB0aGUgcGFja2V0IGxlbmd0aCBmb3IgdHJhbnNtaXNzaW9uCi0gKi8KLXR5cGVkZWYgc3RydWN0IGZyX2RsY2lfaW50ZXJmYWNlIAotewotCXVuc2lnbmVkIGNoYXIgZ2VuX2ludGVycnVwdAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgcGFja2V0X2xlbmd0aAlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciByZXNlcnZlZAkJUEFDS0VEOwotfSBmcl9kbGNpX2ludGVyZmFjZV90OyAKLQotLyogdmFyaWFibGUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIEZUMSBtb25pdG9yIHN0YXR1cyAqLwotc3RhdGljIGludCByQ291bnQgPSAwOwotCi1leHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotCi0vKiB2YXJpYWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBudW1iZXIgb2YgaW50ZXJydXB0cyBnZW5lcmF0ZWQgZHVyaW5nIAotICogaW50ZXJydXB0IHRlc3Qgcm91dGluZSAKLSAqLwotc3RhdGljIGludCBJbnRyX3Rlc3RfY291bnRlcjsKLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFdBTiBsaW5rIGRyaXZlciBlbnRyeSBwb2ludHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIFdBTiByb3V0ZXIgbW9kdWxlLiAqLwotc3RhdGljIGludCB1cGRhdGUoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldik7Ci1zdGF0aWMgaW50IG5ld19pZihzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgIHdhbmlmX2NvbmZfdCAqY29uZik7Ci1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90ICpjYXJkKTsKLQotLyogV0FOUElQRS1zcGVjaWZpYyBlbnRyeSBwb2ludHMgKi8KLXN0YXRpYyBpbnQgd3BmX2V4ZWMoc3RydWN0IHNkbGEgKmNhcmQsIHZvaWQgKnVfY21kLCB2b2lkICp1X2RhdGEpOwotCi0vKiBOZXR3b3JrIGRldmljZSBpbnRlcmZhY2UgKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmICpza2IpOwotCi1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGNoa19iY2FzdF9tY2FzdF9hZGRyKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKiBJbnRlcnJ1cHQgaGFuZGxlcnMgKi8KLXN0YXRpYyB2b2lkIGZyX2lzcihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgcnhfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgdHhfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgdGltZXJfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgc3B1cl9pbnRyKHNkbGFfdCAqY2FyZCk7Ci0KLS8qIEZyYW1lIHJlbGF5IGZpcm13YXJlIGludGVyZmFjZSBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgZnJfcmVhZF92ZXJzaW9uKHNkbGFfdCAqY2FyZCwgY2hhciAqc3RyKTsKLXN0YXRpYyBpbnQgZnJfY29uZmlndXJlKHNkbGFfdCAqY2FyZCwgZnJfY29uZl90ICpjb25mKTsKLXN0YXRpYyBpbnQgZnJfZGxjaV9jb25maWd1cmUoc2RsYV90ICpjYXJkLCBmcl9kbGNfY29uZl90ICpjb25mLCB1bnNpZ25lZCBkbGNpKTsKLXN0YXRpYyBpbnQgZnJfaW5pdF9kbGNpIChzZGxhX3QgKmNhcmQsIGZyX2NoYW5uZWxfdCAqY2hhbik7Ci1zdGF0aWMgaW50IGZyX3NldF9pbnRyX21vZGUgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbW9kZSwgdW5zaWduZWQgbXR1LCB1bnNpZ25lZCBzaG9ydCB0aW1lb3V0KTsKLXN0YXRpYyBpbnQgZnJfY29tbV9lbmFibGUoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGZyX2NvbW1fZGlzYWJsZShzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBmcl9nZXRfZXJyX3N0YXRzKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IGZyX2dldF9zdGF0cyhzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBmcl9hZGRfZGxjaShzZGxhX3QgKmNhcmQsIGludCBkbGNpKTsKLXN0YXRpYyBpbnQgZnJfYWN0aXZhdGVfZGxjaShzZGxhX3QgKmNhcmQsIGludCBkbGNpKTsKLXN0YXRpYyBpbnQgZnJfZGVsZXRlX2RsY2kgKHNkbGFfdCogY2FyZCwgaW50IGRsY2kpOwotc3RhdGljIGludCBmcl9pc3N1ZV9pc2Yoc2RsYV90ICpjYXJkLCBpbnQgaXNmKTsKLXN0YXRpYyBpbnQgZnJfc2VuZChzZGxhX3QgKmNhcmQsIGludCBkbGNpLCB1bnNpZ25lZCBjaGFyIGF0dHIsIGludCBsZW4sCi0Jdm9pZCAqYnVmKTsKLXN0YXRpYyBpbnQgZnJfc2VuZF9kYXRhX2hlYWRlcihzZGxhX3QgKmNhcmQsIGludCBkbGNpLCB1bnNpZ25lZCBjaGFyIGF0dHIsIGludCBsZW4sCi0Jdm9pZCAqYnVmLHVuc2lnbmVkIGNoYXIgaGRyX2xlbik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGZyX3NlbmRfaGRyKHNkbGFfdCAqY2FyZCwgaW50IGRsY2ksIHVuc2lnbmVkIGludCBvZmZzZXQpOwotCi1zdGF0aWMgaW50IGNoZWNrX2RsY2lfY29uZmlnIChzZGxhX3QgKmNhcmQsIGZyX2NoYW5uZWxfdCAqY2hhbik7Ci1zdGF0aWMgdm9pZCBpbml0aWFsaXplX3J4X3R4X2J1ZmZlcnMgKHNkbGFfdCAqY2FyZCk7Ci0KLQotLyogRmlybXdhcmUgYXN5bmNocm9ub3VzIGV2ZW50IGhhbmRsZXJzICovCi1zdGF0aWMgaW50IGZyX2V2ZW50KHNkbGFfdCAqY2FyZCwgaW50IGV2ZW50LCBmcl9tYm94X3QgKm1ib3gpOwotc3RhdGljIGludCBmcl9tb2RlbV9mYWlsdXJlKHNkbGFfdCAqY2FyZCwgZnJfbWJveF90ICptYm94KTsKLXN0YXRpYyBpbnQgZnJfZGxjaV9jaGFuZ2Uoc2RsYV90ICpjYXJkLCBmcl9tYm94X3QgKm1ib3gpOwotCi0vKiBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCB1cGRhdGVfY2hhbl9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHNldF9jaGFuX3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGF0ZSk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmZpbmRfY2hhbm5lbChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGRsY2kpOwotc3RhdGljIGludCBpc190eF9yZWFkeShzZGxhX3QgKmNhcmQsIGZyX2NoYW5uZWxfdCAqY2hhbik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRlY190b191aW50KHVuc2lnbmVkIGNoYXIgKnN0ciwgaW50IGxlbik7Ci1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IG1ib3hfbGVuICk7Ci0KLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQgKTsKLXN0YXRpYyB2b2lkIGluaXRfY2hhbl9zdGF0aXN0aWNzKCBmcl9jaGFubmVsX3QqIGNoYW4gKTsKLXN0YXRpYyB2b2lkIGluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIHNkbGFfdCogY2FyZCApOwotc3RhdGljIHZvaWQgcmVhZF9ETENJX0lCX21hcHBpbmcoIHNkbGFfdCogY2FyZCwgZnJfY2hhbm5lbF90KiBjaGFuICk7Ci1zdGF0aWMgaW50IHNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0cnVjdCBuZXRfZGV2aWNlICptb3ZlX2Rldl90b19uZXh0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGNoZWNrX3R4X3N0YXR1cyhzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKiBGcmFtZSBSZWxheSBTb2NrZXQgQVBJICovCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2ZyX2JoIChmcl9jaGFubmVsX3QgKik7Ci1zdGF0aWMgdm9pZCBmcl9iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZnJfYmhfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYmhfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZnJfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLS8vc3RhdGljIHZvaWQgYWRkX2dhdGV3YXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyB2b2lkIHRyaWdnZXJfdW5jb25maWdfZnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCB1bmNvbmZpZ19mciAoc2RsYV90ICopOwotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2NvbmZpZ19mciAoc2RsYV90ICopOwotc3RhdGljIHZvaWQgY29uZmlnX2ZyIChzZGxhX3QgKik7Ci0KLQotLyogSW52ZXJzZSBBUlAgYW5kIER5bmFtaWMgcm91dGluZyBmdW5jdGlvbnMgKi8KLWludCBwcm9jZXNzX0FSUChhcnBoZHJfMTQ5MF90ICpBcnBQYWNrZXQsIHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgaXNfYXJwKHZvaWQgKmJ1Zik7Ci1pbnQgc2VuZF9pbmFycF9yZXF1ZXN0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyB2b2lkIHRyaWdnZXJfZnJfYXJwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZnJfYXJwICh1bnNpZ25lZCBsb25nIGRhdGEpOwotCi0KLS8qIFVkcCBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCAqY2FyZCApOwotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoaW50IHVkcF90eXBlLCBjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBkbGNpKTsKLQotLyogSVBYIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsCi0JdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlciwgdW5zaWduZWQgY2hhciBpbmNvbWluZyk7Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX0lQWFdBTih1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCBjaGFyICpkZXZuYW1lLAotCXVuc2lnbmVkIGNoYXIgZW5hYmxlX0lQWCwgdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcik7Ci0KLS8qIExvY2sgRnVuY3Rpb25zOiBTTVAgc3VwcG9ydGVkICovCi12b2lkIAlzNTA4X3M1MTRfdW5sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLXZvaWQgCXM1MDhfczUxNF9sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqLCBpbnQpOwotc3RhdGljIGludCBzZXR1cF9mcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIGNoYXIgb3BfbW9kZSk7Ci0KLQotLyoqKioqKiBQdWJsaWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRnJhbWUgcmVsYXkgcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBtYWluIFdBTlBJUEUgbW9kdWxlIGR1cmluZyBzZXR1cC4gIEF0IHRoaXMKLSAqIHBvaW50IGFkYXB0ZXIgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCBhbmQgZmlybXdhcmUgaXMgcnVubmluZy4KLSAqICBvIHJlYWQgZmlybXdhcmUgdmVyc2lvbiAodG8gbWFrZSBzdXJlIGl0J3MgYWxpdmUpCi0gKiAgbyBjb25maWd1cmUgYWRhcHRlcgotICogIG8gaW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgb2YgdGhlIGFkYXB0ZXIgZGF0YSBzcGFjZS4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlLgotICovCi1pbnQgd3BmX2luaXQoc2RsYV90ICpjYXJkLCB3YW5kZXZfY29uZl90ICpjb25mKQotewotCi0JaW50IGVycjsKLQlmcjUwOF9mbGFnc190KiBmbGFnczsKLQotCXVuaW9uCi0JewotCQljaGFyIHN0cls4MF07Ci0JCWZyX2NvbmZfdCBjZmc7Ci0JfSB1OwotCi0JZnJfYnVmX2luZm9fdCogYnVmX2luZm87Ci0JaW50IGk7Ci0KLQotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBJRCAqLwotCWlmIChjb25mLT5jb25maWdfaWQgIT0gV0FOQ09ORklHX0ZSKSB7Ci0JCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBjb25maWd1cmF0aW9uIElEICV1IVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNvbmYtPmNvbmZpZ19pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCQotCX0KLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIGFkYXB0ZXIgZGF0YSBzcGFjZSAqLwotCXN3aXRjaCAoY2FyZC0+aHcuZndpZCkgewotCQotCQljYXNlIFNGSURfRlI1MDg6Ci0JCQljYXJkLT5tYm94ICA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIAotCQkJCQlGUjUwOF9NQk9YX09GRlMpOwotCQkJY2FyZC0+ZmxhZ3MgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyAKLQkJCQkJRlI1MDhfRkxBR19PRkZTKTsKLQkJCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCQkJY2FyZC0+bWJveCArPSBGUl9NQl9WRUNUT1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmZsYWdzICs9IEZSX01CX1ZFQ1RPUjsKLQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmlzciA9ICZmcl9pc3I7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCS8qIFJlYWQgZmlybXdhcmUgdmVyc2lvbi4gIE5vdGUgdGhhdCB3aGVuIGFkYXB0ZXIgaW5pdGlhbGl6ZXMsIGl0Ci0JICogY2xlYXJzIHRoZSBtYWlsYm94LCBzbyBpdCBtYXkgYXBwZWFyIHRoYXQgdGhlIGZpcnN0IGNvbW1hbmQgd2FzCi0JICogZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IHdoZW4gaW4gZmFjdCBpdCB3YXMgbWVyZWx5IGVyYXNlZC4gVG8gd29yawotCSAqIGFyb3VuZCB0aGlzLCB3ZSBleGVjdXRlIHRoZSBmaXJzdCBjb21tYW5kIHR3aWNlLgotCSAqLwotCi0JaWYgKGZyX3JlYWRfdmVyc2lvbihjYXJkLCBOVUxMKSB8fCBmcl9yZWFkX3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBydW5uaW5nIGZyYW1lIHJlbGF5IGZpcm13YXJlIHYlc1xuIiwKLQkJY2FyZC0+ZGV2bmFtZSwgdS5zdHIpOwotCi0JLyogQWRqdXN0IGNvbmZpZ3VyYXRpb24gKi8KLQljb25mLT5tdHUgKz0gRlJfSEVBREVSX0xFTjsKLQljb25mLT5tdHUgPSAoY29uZi0+bXR1ID49IE1JTl9MR1RIX0ZSX0RBVEFfQ0ZHKSA/Ci0JCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPm10dSwgRlJfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUUpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIEZSX0NIQU5ORUxfTVRVICsgRlJfSEVBREVSX0xFTjsKLSAgICAgCi0JY29uZi0+YnBzID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5icHMsIDIwNDgwMDApOwotCi0JLyogSW5pdGlhbHplIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBzZW50IHRvIHRoZSBib2FyZCB0byB6ZXJvICovCi0JbWVtc2V0KCZ1LmNmZywgMCwgc2l6ZW9mKHUuY2ZnKSk7Ci0KLQltZW1zZXQoY2FyZC0+dS5mLmRsY2lfdG9fZGV2X21hcCwgMCwgc2l6ZW9mKGNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXApKTsKLSAJCi0JLyogQ29uZmlndXJlIGFkYXB0ZXIgZmlybXdhcmUgKi8KLQotCXUuY2ZnLm10dQk9IGNvbmYtPm10dTsKLQl1LmNmZy5rYnBzCT0gY29uZi0+YnBzIC8gMTAwMDsKLQotICAgIAl1LmNmZy5jaXJfZndkID0gdS5jZmcuY2lyX2J3ZCA9IDE2OwotICAgICAgICB1LmNmZy5iY19md2QgID0gdS5jZmcuYmNfYndkID0gMTY7Ci0JCi0JdS5jZmcub3B0aW9ucwk9IDB4MDAwMDsKLQlwcmludGsoS0VSTl9JTkZPICIlczogR2xvYmFsIENJUiBlbmFibGVkIGJ5IERlZmF1bHRcbiIsIGNhcmQtPmRldm5hbWUpOwotCQotCXN3aXRjaCAoY29uZi0+dS5mci5zaWduYWxsaW5nKSB7Ci0KLQkJY2FzZSBXQU5PUFRfRlJfQU5TSToKLQkJCXUuY2ZnLm9wdGlvbnMgPSAweDAwMDA7IAotCQkJYnJlYWs7CQkKLQkKLQkJY2FzZSBXQU5PUFRfRlJfUTkzMzoJCi0JCQl1LmNmZy5vcHRpb25zIHw9IDB4MDIwMDsgCi0JCQlicmVhazsKLQkKLQkJY2FzZSBXQU5PUFRfRlJfTE1JOgkKLQkJCXUuY2ZnLm9wdGlvbnMgfD0gMHgwNDAwOyAKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0FOT1BUX05POgotCQkJdS5jZmcub3B0aW9ucyB8PSAweDA4MDA7IAotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSWxsZWdhbCBTaWduYWxsaW5nIG9wdGlvblxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0KLQljYXJkLT53YW5kZXYuc2lnbmFsbGluZyA9IGNvbmYtPnUuZnIuc2lnbmFsbGluZzsKLQotCWlmIChjb25mLT5zdGF0aW9uID09IFdBTk9QVF9DUEUpIHsKLQotCi0JCWlmIChjb25mLT51LmZyLnNpZ25hbGxpbmcgPT0gV0FOT1BUX05PKXsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBFUlJPUiAtIEZvciBOTyBzaWduYWxsaW5nLCBzdGF0aW9uIG11c3QgYmUgc2V0IHRvIE5vZGUhIiwKLQkJCQkgCSBjYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJdS5jZmcuc3RhdGlvbiA9IDA7Ci0JCXUuY2ZnLm9wdGlvbnMgfD0gMHg4MDAwOwkvKiBhdXRvIGNvbmZpZyBETENJICovCi0JCWNhcmQtPnUuZi5kbGNpX251bSAgPSAwOwotCQotCX0gZWxzZSB7Ci0KLQkJdS5jZmcuc3RhdGlvbiA9IDE7CS8qIHN3aXRjaCBlbXVsYXRpb24gbW9kZSAqLwotCi0JCS8qIEZvciBzd2l0Y2ggZW11bGF0aW9uIHdlIGhhdmUgdG8gY3JlYXRlIGEgbGlzdCBvZiBkbGNpKHMpCi0JCSAqIHRoYXQgd2lsbCBiZSBzZW50IHRvIGJlIGdsb2JhbCBTRVRfRExDSV9DT05GSUdVUkFUSU9OIAotCQkgKiBjb21tYW5kIGluIGZyX2NvbmZpZ3VyZSgpIHJvdXRpbmUuIAotCQkgKi8KLQotCQljYXJkLT51LmYuZGxjaV9udW0gID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUuZnIuZGxjaV9udW0sIDEpLCAxMDApOwotCQotCQlmb3IgKCBpID0gMDsgaSA8IGNhcmQtPnUuZi5kbGNpX251bTsgaSsrKSB7Ci0KLQkJCWNhcmQtPnUuZi5ub2RlX2RsY2lbaV0gPSAodW5zaWduZWQgc2hvcnQpIAotCQkJCWNvbmYtPnUuZnIuZGxjaVtpXSA/IGNvbmYtPnUuZnIuZGxjaVtpXSA6IDE2OwotCQotCQl9Ci0JfQotCi0JaWYgKGNvbmYtPmNsb2NraW5nID09IFdBTk9QVF9JTlRFUk5BTCkKLQkJdS5jZmcucG9ydCB8PSAweDAwMDE7Ci0KLQlpZiAoY29uZi0+aW50ZXJmYWNlID09IFdBTk9QVF9SUzIzMikKLQkJdS5jZmcucG9ydCB8PSAweDAwMDI7Ci0KLQlpZiAoY29uZi0+dS5mci50MzkxKQotCQl1LmNmZy50MzkxID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LmZyLnQzOTEsIDMwKTsKLQllbHNlCi0JCXUuY2ZnLnQzOTEgPSA1OwotCi0JaWYgKGNvbmYtPnUuZnIudDM5MikKLQkJdS5jZmcudDM5MiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS5mci50MzkyLCAzMCk7Ci0JZWxzZQotCQl1LmNmZy50MzkyID0gMTU7Ci0KLQlpZiAoY29uZi0+dS5mci5uMzkxKQotCQl1LmNmZy5uMzkxID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LmZyLm4zOTEsIDI1NSk7Ci0JZWxzZQotCQl1LmNmZy5uMzkxID0gMjsKLQotCWlmIChjb25mLT51LmZyLm4zOTIpCi0JCXUuY2ZnLm4zOTIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUuZnIubjM5MiwgMTApOwotCWVsc2UKLQkJdS5jZmcubjM5MiA9IDM7CQotCi0JaWYgKGNvbmYtPnUuZnIubjM5MykKLQkJdS5jZmcubjM5MyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS5mci5uMzkzLCAxMCk7Ci0JZWxzZQotCQl1LmNmZy5uMzkzID0gNDsKLQotCWlmIChmcl9jb25maWd1cmUoY2FyZCwgJnUuY2ZnKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkKLSAgICAgICAgICAgICAgICBidWZfaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIEZSX01CX1ZFQ1RPUiArCi0JCQlGUjUwOF9SWEJDX09GRlMpOwotCi0gICAgICAgICAgICAgICAgY2FyZC0+cnhtYiA9ICh2b2lkKikoYnVmX2luZm8tPnJzZV9uZXh0ICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT51LmYucnhtYl9iYXNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsgY2FyZC0+aHcuZHBtYmFzZSk7IAotCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5mLnJ4bWJfbGFzdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopKGJ1Zl9pbmZvLT5yc2VfYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAoYnVmX2luZm8tPnJzZV9udW0gLSAxKSAqIHNpemVvZihmcl9yeF9idWZfY3RsX3QpICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmh3LmRwbWJhc2UpOwotCX1lbHNlewkKLQkJYnVmX2luZm8gPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBGUjUwOF9SWEJDX09GRlMpOwotCi0JCWNhcmQtPnJ4bWIgPSAodm9pZCopKGJ1Zl9pbmZvLT5yc2VfbmV4dCAtCi0JCQlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQkJCi0JCWNhcmQtPnUuZi5yeG1iX2Jhc2UgPQotCQkJKHZvaWQqKShidWZfaW5mby0+cnNlX2Jhc2UgLQotCQkJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JCQotCQljYXJkLT51LmYucnhtYl9sYXN0ID0KLQkJCSh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsKLQkJCShidWZfaW5mby0+cnNlX251bSAtIDEpICogc2l6ZW9mKGZyX3J4X2J1Zl9jdGxfdCkgLQotCQkJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JfQotCi0JY2FyZC0+dS5mLnJ4X2Jhc2UgPSBidWZfaW5mby0+YnVmX2Jhc2U7Ci0JY2FyZC0+dS5mLnJ4X3RvcCAgPSBidWZfaW5mby0+YnVmX3RvcDsKLQotCWNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcgPSAwOwotCi0JY2FyZC0+d2FuZGV2Lm10dQk9IGNvbmYtPm10dTsKLQljYXJkLT53YW5kZXYuYnBzCT0gY29uZi0+YnBzOwotCWNhcmQtPndhbmRldi5pbnRlcmZhY2UJPSBjb25mLT5pbnRlcmZhY2U7Ci0JY2FyZC0+d2FuZGV2LmNsb2NraW5nCT0gY29uZi0+Y2xvY2tpbmc7Ci0JY2FyZC0+d2FuZGV2LnN0YXRpb24JPSBjb25mLT5zdGF0aW9uOwotCWNhcmQtPnBvbGwJCT0gTlVMTDsgCi0JY2FyZC0+ZXhlYwkJPSAmd3BmX2V4ZWM7Ci0JY2FyZC0+d2FuZGV2LnVwZGF0ZQk9ICZ1cGRhdGU7Ci0JY2FyZC0+d2FuZGV2Lm5ld19pZgk9ICZuZXdfaWY7Ci0JY2FyZC0+d2FuZGV2LmRlbF9pZgk9ICZkZWxfaWY7Ci0JY2FyZC0+d2FuZGV2LnN0YXRlCT0gV0FOX0RJU0NPTk5FQ1RFRDsKLQljYXJkLT53YW5kZXYudHRsCT0gY29uZi0+dHRsOwotICAgICAgICBjYXJkLT53YW5kZXYudWRwX3BvcnQgCT0gY29uZi0+dWRwX3BvcnQ7ICAgICAgIAotCWNhcmQtPmRpc2FibGVfY29tbQk9ICZkaXNhYmxlX2NvbW07CQotCWNhcmQtPnUuZi5hcnBfZGV2IAk9IE5VTEw7Ci0KLQkvKiBJbnRpYWxpemUgZ2xvYmFsIHN0YXRpc3RpY3MgZm9yIGEgY2FyZCAqLwotCWluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIGNhcmQgKTsKLQotICAgICAgICBjYXJkLT5UcmFjaW5nRW5hYmxlZCAgICAgICAgICA9IDA7Ci0KLQkvKiBJbnRlcnJ1cHQgVGVzdCAqLwotCUludHJfdGVzdF9jb3VudGVyID0gMDsKLQljYXJkLT5pbnRyX21vZGUgPSBJTlRSX1RFU1RfTU9ERTsKLQllcnIgPSBpbnRyX3Rlc3QoIGNhcmQgKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbmQgb2YgSW50ZXJydXB0IFRlc3QgcmM9MHgleCAgY291bnQ9JWlcbiIsCi0JCQljYXJkLT5kZXZuYW1lLGVycixJbnRyX3Rlc3RfY291bnRlcik7IAotCQotCWlmIChlcnIgfHwgKEludHJfdGVzdF9jb3VudGVyIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnRlcnJ1cHQgVGVzdCBGYWlsZWQsIENvdW50ZXI6ICVpXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJQbGVhc2UgY2hvb3NlIGFub3RoZXIgaW50ZXJydXB0XG4iKTsKLQkJZXJyID0gLUVJTzsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJydXB0IFRlc3QgUGFzc2VkLCBDb3VudGVyOiAlaVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQotCi0JLyogQXByIDI4IDIwMDAuIE5lbmFkIENvcmJpYwotCSAqIEVuYWJsZSBjb21tbnVuaWNhdGlvbnMgaGVyZSwgbm90IGluIGlmX29wZW4gb3IgbmV3X2lmLCBzaW5jZQotICAgICAgICAgKiBpbnRlcmZhY2VzIGNvbWUgZG93biB3aGVuIHRoZSBsaW5rIGlzIGRpc2Nvbm5lY3RlZC4gCi0gICAgICAgICAqLwotCSAKLQkvKiBJZiB5b3UgZW5hYmxlIGNvbW1zIGFuZCB0aGVuIHNldCBpbnRzLCB5b3UgZ2V0IGEgVHggaW50IGFzIHlvdQotCSAqIHBlcmZvcm0gdGhlIFNFVF9JTlRfVFJJR0dFUlMgY29tbWFuZC4gU28sIHdlIG9ubHkgc2V0IGludAotCSAqIHRyaWdnZXJzIGFuZCB0aGVuIGFkanVzdCB0aGUgaW50ZXJydXB0IG1hc2sgKHRvIGRpc2FibGUgVHggaW50cykKLQkgKiBiZWZvcmUgZW5hYmxpbmcgY29tbXMuIAotCSAqLwkKLSAgICAgICAgaWYgKGZyX3NldF9pbnRyX21vZGUoY2FyZCwgKEZSX0lOVFJfUlhSRFkgfCBGUl9JTlRSX1RYUkRZIHwKLQkJRlJfSU5UUl9ETEMgfCBGUl9JTlRSX1RJTUVSIHwgRlJfSU5UUl9UWF9NVUxUX0RMQ0lzKSAsCi0JCWNhcmQtPndhbmRldi5tdHUsIDApKSB7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWZsYWdzLT5pbWFzayAmPSB+KEZSX0lOVFJfVFhSRFkgfCBGUl9JTlRSX1RJTUVSKTsKLSAKLQlpZiAoZnJfY29tbV9lbmFibGUoY2FyZCkpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQkKLQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVEVEKTsKLQlzcGluX2xvY2tfaW5pdCgmY2FyZC0+dS5mLmlmX3NlbmRfbG9jayk7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQotICAgICAgICByZXR1cm4gMDsKLX0KLQotLyoqKioqKiogV0FOIERldmljZSBEcml2ZXIgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGRldmljZSBzdGF0dXMgJiBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KQotewotCXZvbGF0aWxlIHNkbGFfdCogY2FyZDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JZnI1MDhfZmxhZ3NfdCogZmxhZ3M7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0JZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCi0JY2FyZC0+dS5mLnVwZGF0ZV9jb21tc19zdGF0cyA9IDE7Ci0JY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JZmxhZ3MtPmltYXNrIHw9IEZSX0lOVFJfVElNRVI7Ci0gICAgICAgCXRpbWVvdXQgPSBqaWZmaWVzOwotICAgICAgIAlmb3IoOzspIHsKLQkJaWYoY2FyZC0+dS5mLnVwZGF0ZV9jb21tc19zdGF0cyA9PSAwKQotCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCArIDEgKiBIWikpewotICAgIAkJCWNhcmQtPnUuZi51cGRhdGVfY29tbXNfc3RhdHMgPSAwOwotIAkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0gICAgICAgIH0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCi0gKiBoYW5kbGVkLgotICogbyBwYXJzZSBtZWRpYS0gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIHRoYXQgYSBuZXcgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZAotICogbyBhbGxvY2F0ZSByZXNvdXJjZXMsIGlmIG5lY2Vzc2FyeQotICogbyBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0YXJhdGlvbi4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQlmcl9jaGFubmVsX3QqIGNoYW47Ci0JaW50IGRsY2kgPSAwOwotCWludCBlcnIgPSAwOwotCi0JCi0JaWYgKChjb25mLT5uYW1lWzBdID09ICdcMCcpIHx8IChzdHJsZW4oY29uZi0+bmFtZSkgPiBXQU5fSUZOQU1FX1NaKSkgewotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgaW50ZXJmYWNlIG5hbWUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLwotCWNoYW4gPSBrbWFsbG9jKHNpemVvZihmcl9jaGFubmVsX3QpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChjaGFuID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtc2V0KGNoYW4sIDAsIHNpemVvZihmcl9jaGFubmVsX3QpKTsKLQlzdHJjcHkoY2hhbi0+bmFtZSwgY29uZi0+bmFtZSk7Ci0JY2hhbi0+Y2FyZCA9IGNhcmQ7Ci0KLQkvKiB2ZXJpZnkgbWVkaWEgYWRkcmVzcyAqLwotCWlmIChpc2RpZ2l0KGNvbmYtPmFkZHJbMF0pKSB7Ci0KLQkJZGxjaSA9IGRlY190b191aW50KGNvbmYtPmFkZHIsIDApOwotCi0JCWlmIChkbGNpICYmIChkbGNpIDw9IEhJR0hFU1RfVkFMSURfRExDSSkpIHsKLQkJCi0JCQljaGFuLT5kbGNpID0gZGxjaTsKLQkJCi0JCX0gZWxzZSB7Ci0JCQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJIiVzOiBJbnZhbGlkIERMQ0kgJXUgb24gaW50ZXJmYWNlICVzIVxuIiwKLQkJCQl3YW5kZXYtPm5hbWUsIGRsY2ksIGNoYW4tPm5hbWUpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJfQotCi0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXM6IEludmFsaWQgbWVkaWEgYWRkcmVzcyBvbiBpbnRlcmZhY2UgJXMhXG4iLAotCQkJd2FuZGV2LT5uYW1lLCBjaGFuLT5uYW1lKTsKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGNoYW4tPnRydWVfaWZfZW5jb2RpbmcgPSBjb25mLT50cnVlX2lmX2VuY29kaW5nKSA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogRW5hYmxpbmcsIHRydWUgaW50ZXJmYWNlIHR5cGUgZW5jb2RpbmcuXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCQotCi0KLSAgICAvKiBTZXR1cCB3YW5waXBlIGFzIGEgcm91dGVyIChXQU5QSVBFKSBldmVuIGlmIGl0IGlzCi0JICogYSBicmlkZ2VkIERMQ0ksIG9yIGFzIGFuIEFQSSAKLQkgKi8KLSAgICAgICAgaWYgKHN0cmNtcChjb25mLT51c2VkYnksICJXQU5QSVBFIikgID09IDAgIHx8IAotCSAgICBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQlJJREdFIikgICA9PSAwICB8fAotCSAgICBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQlJJREdFX04iKSA9PSAwKXsKLQkJCi0JCWlmKHN0cmNtcChjb25mLT51c2VkYnksICJXQU5QSVBFIikgPT0gMCl7Ci0JCQljaGFuLT5jb21tb24udXNlZGJ5ID0gV0FOUElQRTsKLQkJCQotCSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBpbiBXQU5QSVBFIG1vZGUuXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkKLQkJfWVsc2UgaWYoc3RyY21wKGNvbmYtPnVzZWRieSwgIkJSSURHRSIpID09IDApewotCQkJCi0JCQljaGFuLT5jb21tb24udXNlZGJ5ID0gQlJJREdFOwotCQkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBpbiBXQU5QSVBFIChCUklER0UpIG1vZGUuXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX1lbHNlIGlmKCBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQlJJREdFX04iKSA9PSAwICl7Ci0JCQkKLQkJCWNoYW4tPmNvbW1vbi51c2VkYnkgPSBCUklER0VfTk9ERTsKLQkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBpbiBXQU5QSVBFIChCUklER0VfTk9ERSkgbW9kZS5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCi0JCWlmICghZXJyKXsKLQkJCS8qIER5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgotCQkJICogT24gZGlzY29ubmVjdCwgaWYgdGhlIG9wdGlvbnMgaXMgc2VsZWN0ZWQsCi0JCQkgKiB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgYnJvdWdodCBkb3duICovCi0JCQlpZiAoY29uZi0+aWZfZG93biA9PSBXQU5PUFRfWUVTKXsgCi0JCQkJc2V0X2JpdChEWU5fT1BUX09OLCZjaGFuLT5pbnRlcmZhY2VfZG93bik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkgICAgIiVzOiBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGVuYWJsZWQuXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJfQotCi0gICAgICAgIH0gZWxzZSBpZihzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQVBJIikgPT0gMCl7Ci0KLSAgICAgICAgICAgICAgICBjaGFuLT5jb21tb24udXNlZGJ5ID0gQVBJOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIEFQSSBtb2RlLlxuIiwKLQkJCXdhbmRldi0+bmFtZSk7Ci0gICAgICAgIH0KLQotCWlmIChlcnIpIHsKLQkJCi0JCWtmcmVlKGNoYW4pOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIHBsYWNlIGNpcixiZSxiYyBhbmQgb3RoZXIgY2hhbm5lbCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpbnRvIHRoZQotCSAqIGNoYW4gc3RydWN0dXJlIAotICAgICAgICAgKi8KLQlpZiAoY29uZi0+Y2lyKSB7Ci0KLQkJY2hhbi0+Y2lyID0gbWF4X3QodW5zaWduZWQgaW50LCAxLAotCQkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+Y2lyLCA1MTIpKTsKLQkJY2hhbi0+Y2lyX3N0YXR1cyA9IENJUl9FTkFCTEVEOyAKLQotCQkKLQkJLyogSWYgQ0lSIGlzIGVuYWJsZWQsIGZvcmNlIEJDIHRvIGVxdWFsIENJUgotICAgICAgICAgICAgICAgICAqIHRoaXMgc29sdmVzIG51bWJlciBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgaWYgQ0lSIGlzIAotICAgICAgICAgICAgICAgICAqIHNldCBhbmQgQkMgaXMgbm90IAotCQkgKi8KLQkJY2hhbi0+YmMgPSBjaGFuLT5jaXI7Ci0KLQkJaWYgKGNvbmYtPmJlKXsKLQkJCWNoYW4tPmJlID0gbWF4X3QodW5zaWduZWQgaW50LAotCQkJCSAgICAgICAwLCBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPmJlLCA1MTEpKTsKLQkJfWVsc2V7CQotCQkJY29uZi0+YmUgPSAwOwotCQl9Ci0KLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBDSVIgZW5hYmxlZCBmb3IgRExDSSAlaSBcbiIsCi0JCQkJd2FuZGV2LT5uYW1lLGNoYW4tPmRsY2kpOwotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6ICAgICBDSVIgPSAlaSA7IEJDID0gJWkgOyBCRSA9ICVpXG4iLAotCQkJCXdhbmRldi0+bmFtZSxjaGFuLT5jaXIsY2hhbi0+YmMsY2hhbi0+YmUpOwotCi0KLQl9ZWxzZXsKLQkJY2hhbi0+Y2lyX3N0YXR1cyA9IENJUl9ESVNBQkxFRDsKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBDSVIgZGlzYWJsZWQgZm9yIERMQ0kgJWlcbiIsCi0JCQkJd2FuZGV2LT5uYW1lLGNoYW4tPmRsY2kpOwotCX0KLQotCWNoYW4tPm1jID0gY29uZi0+bWM7Ci0KLQlpZiAoY29uZi0+aW5hcnAgPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnZlcnNlIEFSUCBTdXBwb3J0IEVuYWJsZWRcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCWNoYW4tPmluYXJwID0gY29uZi0+aW5hcnAgPyBJTkFSUF9SRVFVRVNUIDogSU5BUlBfTk9ORTsKLQkJY2hhbi0+aW5hcnBfaW50ZXJ2YWwgPSBjb25mLT5pbmFycF9pbnRlcnZhbCA/IGNvbmYtPmluYXJwX2ludGVydmFsIDogMTA7Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnZlcnNlIEFSUCBTdXBwb3J0IERpc2FibGVkXG4iLGNhcmQtPmRldm5hbWUpOwotCQljaGFuLT5pbmFycCA9IElOQVJQX05PTkU7Ci0JCWNoYW4tPmluYXJwX2ludGVydmFsID0gMTA7Ci0JfQotCi0KLQljaGFuLT5kbGNpX2NvbmZpZ3VyZWQgPSBETENJX05PVF9DT05GSUdVUkVEOwkKLQotCi0JLypGSVhNRTogSVBYIGRpc2FibGVkIGluIHRoaXMgV0FOUElQRSB2ZXJzaW9uICovCi0JaWYgKGNvbmYtPmVuYWJsZV9JUFggPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiAtIFRoaXMgdmVyc2lvbiBvZiBXQU5QSVBFIGRvZXNuJ3Qgc3VwcG9ydCBJUFhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWtmcmVlKGNoYW4pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9ZWxzZXsKLQkJY2hhbi0+ZW5hYmxlX0lQWCA9IFdBTk9QVF9OTzsKLQl9CQotCi0JaWYgKGNvbmYtPm5ldHdvcmtfbnVtYmVyKXsKLQkJY2hhbi0+bmV0d29ya19udW1iZXIgPSBjb25mLT5uZXR3b3JrX251bWJlcjsKLQl9ZWxzZXsKLQkJY2hhbi0+bmV0d29ya19udW1iZXIgPSAweERFQURCRUVGOwotCX0KLQotCWNoYW4tPnJvdXRlX2ZsYWcgPSBOT19ST1VURTsKLQkKLQlpbml0X2NoYW5fc3RhdGlzdGljcyhjaGFuKTsKLQotCWNoYW4tPnRyYW5zbWl0X2xlbmd0aCA9IDA7Ci0KLQkvKiBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIGRhdGEgc3BhY2UgZm9yIHJlZ2lzdHJhdGlvbiAqLwotCXN0cmNweShkZXYtPm5hbWUsY2hhbi0+bmFtZSk7Ci0JCi0JZGV2LT5pbml0ID0gJmlmX2luaXQ7Ci0JZGV2LT5wcml2ID0gY2hhbjsKLQotCS8qIEluaXRpYWxpemUgRlIgUG9sbGluZyBUYXNrIFF1ZXVlCi0gICAgICAgICAqIFdlIG5lZWQgYSBwb2xsIHJvdXRpbmUgZm9yIGVhY2ggbmV0d29yawotICAgICAgICAgKiBpbnRlcmZhY2UuIAotICAgICAgICAgKi8KLQlJTklUX1dPUksoJmNoYW4tPmZyX3BvbGxfd29yaywgKHZvaWQgKilmcl9wb2xsLCBkZXYpOwotCi0JaW5pdF90aW1lcigmY2hhbi0+ZnJfYXJwX3RpbWVyKTsKLQljaGFuLT5mcl9hcnBfdGltZXIuZGF0YT0odW5zaWduZWQgbG9uZylkZXY7Ci0JY2hhbi0+ZnJfYXJwX3RpbWVyLmZ1bmN0aW9uID0gZnJfYXJwOwotCi0Jd2FuZGV2LT5uZXdfaWZfY250Kys7Ci0KLQkvKiBUZWxscyB1cyB0aGF0IGlmIHRoaXMgaW50ZXJmYWNlIGlzIGEKLSAgICAgICAgICogZ2F0ZXdheSBvciBub3QgKi8KLQlpZiAoKGNoYW4tPmdhdGV3YXkgPSBjb25mLT5nYXRld2F5KSA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyBpcyBzZXQgYXMgYSBnYXRld2F5LlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQl9Ci0KLQkvKiBNLiBHcmFudCBQYXRjaCBBcHIgMjggMjAwMCAKLSAgICAgICAgICogRGlzYWxsb3cgZHVwbGljYXRlIGRsY2kgY29uZmlndXJhdGlvbnMuICovCi0JaWYgKGNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXBbY2hhbi0+ZGxjaV0gIT0gTlVMTCkgewotCQlrZnJlZShjaGFuKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQkvKiBDb25maWd1cmUgdGhpcyBkbGNpIGF0IGEgbGF0ZXIgZGF0ZSwgd2hlbgotICAgICAgICAgKiB0aGUgaW50ZXJmYWNlIGNvbWVzIHVwLiBpLmUuIHdoZW4gaWZfb3BlbigpIAotICAgICAgICAgKiBleGVjdXRlcyAqLwotCXNldF9iaXQoMCwmY2hhbi0+Y29uZmlnX2RsY2kpOwotCQotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZWxldGUgbG9naWNhbCBjaGFubmVsLgotICovCi1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFncz0wOwotCi0JLyogVGhpcyBpbnRlcmZhY2UgaXMgZGVhZCwgbWFrZSBzdXJlIHRoZSAKLQkgKiBBUlAgdGltZXIgaXMgc3RvcHBlZCAqLwotCWRlbF90aW1lcigmY2hhbi0+ZnJfYXJwX3RpbWVyKTsKLQkKLQkvKiBJZiB3ZSBhcmUgYSBOT0RFLCB3ZSBtdXN0IHVuY29uZmlndXJlIHRoaXMgRExDSQotCSAqIFRyaWdnZXIgYW4gdW5jb25maWd1cmUgY29tbWFuZCB0aGF0IHdpbGwKLQkgKiBiZSBleGVjdXRlZCBpbiB0aW1lciBpbnRlcnJ1cHQuIFdlIG11c3Qgd2FpdAotCSAqIGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZS4gKi8KLQl0cmlnZ2VyX3VuY29uZmlnX2ZyKGRldik7Ci0KLQlsb2NrX2FkYXB0ZXJfaXJxKCZ3YW5kZXYtPmxvY2ssICZzbXBfZmxhZ3MpOwotCXdhbmRldi0+bmV3X2lmX2NudC0tOwotCXVubG9ja19hZGFwdGVyX2lycSgmd2FuZGV2LT5sb2NrLCAmc21wX2ZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBkaXNhYmxlX2NvbW0KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCURpc2FibGUgY29tbXVuaWNhdGlvbnMuCi0gKiAJVGhpcyBjb2RlIHJ1bnMgaW4gc2h1dGRvd24gKHNkbGFtYWluLmMpCi0gKiAgICAgIHVuZGVyIGNyaXRpY2FsIGZsYWcuIFRoZXJlZm9yZSBpdCBpcyBub3QKLSAqICAgICAgbmVjZXNzYXJ5IHRvIHNldCBhIGNyaXRpY2FsIGZsYWcgaGVyZSAKLSAqCi0gKiBVc2FnZToKLSAqIAlDb21tbnVuaWNhdGlvbnMgYXJlIGRpc2FibGVkIG9ubHkgb24gYSBjYXJkCi0gKiAgICAgIHNodXRkb3duLgotICovCi0KLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90ICpjYXJkKQotewotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEaXNhYmxpbmcgQ29tbXVuaWNhdGlvbnMhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JZnJfY29tbV9kaXNhYmxlKGNhcmQpOwotfQotCi0vKioqKioqIFdBTlBJUEUtc3BlY2lmaWMgZW50cnkgcG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFeGVjdXRlIGFkYXB0ZXIgaW50ZXJmYWNlIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyBpbnQgd3BmX2V4ZWMgKHN0cnVjdCBzZGxhKiBjYXJkLCB2b2lkKiB1X2NtZCwgdm9pZCogdV9kYXRhKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyLCBsZW47Ci0JZnJfY21kX3QgY21kOwotCi0JaWYoY29weV9mcm9tX3VzZXIoKHZvaWQqKSZjbWQsIHVfY21kLCBzaXplb2YoY21kKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCQotCS8qIGV4ZWN1dGUgY29tbWFuZCAqLwotCWRvCi0JewotCQltZW1jcHkoJm1ib3gtPmNtZCwgJmNtZCwgc2l6ZW9mKGNtZCkpOwotCQkKLQkJaWYgKGNtZC5sZW5ndGgpewotCQkJaWYoIGNvcHlfZnJvbV91c2VyKCh2b2lkKikmbWJveC0+ZGF0YSwgdV9kYXRhLCBjbWQubGVuZ3RoKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQkKLQkJaWYgKHNkbGFfZXhlYyhtYm94KSkKLQkJCWVyciA9IG1ib3gtPmNtZC5yZXN1bHQ7Ci0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCS8qIHJldHVybiByZXN1bHQgKi8KLQlpZiAoY29weV90b191c2VyKHVfY21kLCAodm9pZCopJm1ib3gtPmNtZCwgc2l6ZW9mKGZyX2NtZF90KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JbGVuID0gbWJveC0+Y21kLmxlbmd0aDsKLQotCWlmIChsZW4gJiYgdV9kYXRhICYmICFjb3B5X3RvX3VzZXIodV9kYXRhLCAodm9pZCopJm1ib3gtPmRhdGEsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi0vKioqKioqIE5ldHdvcmsgRGV2aWNlIEludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIExpbnV4IG5ldHdvcmsgaW50ZXJmYWNlLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgb25seSBvbmNlIGZvciBlYWNoIGludGVyZmFjZSwgZHVyaW5nIExpbnV4IG5ldHdvcmsKLSAqIGludGVyZmFjZSByZWdpc3RyYXRpb24uICBSZXR1cm5pbmcgYW55dGhpbmcgYnV0IHplcm8gd2lsbCBmYWlsIGludGVyZmFjZQotICogcmVnaXN0cmF0aW9uLgotICovCi1zdGF0aWMgaW50IGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQlzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKLQotCS8qIEluaXRpYWxpemUgZGV2aWNlIGRyaXZlciBlbnRyeSBwb2ludHMgKi8KLQlkZXYtPm9wZW4JCT0gJmlmX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZpZl9jbG9zZTsKLQlkZXYtPmhhcmRfaGVhZGVyCT0gTlVMTDsKLQlkZXYtPnJlYnVpbGRfaGVhZGVyCT0gJmlmX3JlYnVpbGRfaGRyOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gJmlmX3NlbmQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gJmlmX3N0YXRzOwotCWRldi0+dHhfdGltZW91dAkJPSAmaWZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvCT0gVFhfVElNRU9VVDsKLQkKLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFIHx8IGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQotCQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQkJaWYgKGNoYW4tPnRydWVfaWZfZW5jb2RpbmcpewotCQkJZGV2LT50eXBlIAkJPSBBUlBIUkRfRExDSTsgIC8qIFRoaXMgYnJlYWtzIHRjcGR1bXAgKi8KLQkJfWVsc2V7Ci0JCQlkZXYtPnR5cGUJCT0gQVJQSFJEX1BQUDsgCS8qIEFSUCBoL3cgdHlwZSAqLwotCQl9Ci0JCQotCQlkZXYtPmZsYWdzCQl8PSBJRkZfUE9JTlRPUE9JTlQ7Ci0JCWRldi0+ZmxhZ3MJCXw9IElGRl9OT0FSUDsKLQotCQkvKiBFbmFibGUgTXVsdGljYXN0IGFkZHJlc3NpbmcgKi8KLQkJaWYgKGNoYW4tPm1jID09IFdBTk9QVF9ZRVMpewotCQkJZGV2LT5mbGFncyAJfD0gSUZGX01VTFRJQ0FTVDsKLQkJfQotCi0JCWRldi0+bXR1CQk9IHdhbmRldi0+bXR1IC0gRlJfSEVBREVSX0xFTjsKLQkJLyogRm9yIGFuIEFQSSwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIHN0YWNrIHdpbGwgcGFzcwotCQkgICB0byB0aGUgZHJpdmVyIGlzIChkZXYtPm10dSArIGRldi0+aGFyZF9oZWFkZXJfbGVuKS4gU28sIGFkanVzdCB0aGUKLQkJICAgbXR1IHNvIHRoYXQgYSBmcmFtZSBvZiBtYXhpbXVtIHNpemUgY2FuIGJlIHRyYW5zbWl0dGVkIGJ5IHRoZSBBUEkuIAotCQkqLwotCQlpZihjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkgewotCQkJZGV2LT5tdHUgKz0gKHNpemVvZihhcGlfdHhfaGRyX3QpIC0gRlJfSEVBREVSX0xFTik7Ci0JCX0KLQkJCi0JCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gRlJfSEVBREVSX0xFTjsvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0JCWRldi0+YWRkcl9sZW4JCT0gMjsgCQkvKiBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLwotCQkqKHVuc2lnbmVkIHNob3J0KilkZXYtPmRldl9hZGRyID0gaHRvbnMoY2hhbi0+ZGxjaSk7Ci0KLQkJLyogU2V0IHRyYW5zbWl0IGJ1ZmZlciBxdWV1ZSBsZW5ndGggKi8KLSAgICAgICAgCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOwotCi0JfWVsc2V7Ci0KLQkJLyogU2V0dXAgdGhlIGludGVyZmFjZSBmb3IgQnJpZGdpbmcgKi8KLQkJaW50IGh3X2FkZHI9MDsKLQkJZXRoZXJfc2V0dXAoZGV2KTsKLQkJCi0JCS8qIFVzZSBhIHJhbmRvbSBudW1iZXIgdG8gZ2VuZXJhdGUgdGhlIE1BQyBhZGRyZXNzICovCi0JCW1lbWNweShkZXYtPmRldl9hZGRyLCAiXHhGRVx4RkNceDAwXHgwMFx4MDBceDAwIiwgNik7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJmh3X2FkZHIsIHNpemVvZihod19hZGRyKSk7Ci0JCSooaW50ICopKGRldi0+ZGV2X2FkZHIgKyAyKSArPSBod19hZGRyOwotCX0KLQkJCi0JLyogSW5pdGlhbGl6ZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIChqdXN0IGZvciByZWZlcmVuY2UpICovCi0JZGV2LT5pcnEJPSB3YW5kZXYtPmlycTsKLQlkZXYtPmRtYQk9IHdhbmRldi0+ZG1hOwotCWRldi0+YmFzZV9hZGRyCT0gd2FuZGV2LT5pb3BvcnQ7Ci0JZGV2LT5tZW1fc3RhcnQJPSB3YW5kZXYtPm1hZGRyOwotCWRldi0+bWVtX2VuZAk9IHdhbmRldi0+bWFkZHIgKyB3YW5kZXYtPm1zaXplIC0gMTsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBvcGVuLCB0aGVuIGVuYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcHJldmVudCBtb2R1bGUgZnJvbSB1bmxvYWRpbmcgYnkgaW5jcmVtZW50aW5nIHVzZSBjb3VudAotICoKLSAqIFJldHVybiAwIGlmIE8uay4gb3IgZXJybm8uCi0gKi8KLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQkKLQkvKiBJbml0aWFsaXplIHRoZSB0YXNrIHF1ZXVlICovCi0JY2hhbi0+dHFfd29ya2luZz0wOwotCi0JSU5JVF9XT1JLKCZjaGFuLT5jb21tb24ud2FucGlwZV93b3JrLCAodm9pZCAqKWZyX2JoLCBkZXYpOwotCi0JLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgQkggY2lyY3VsYXIgYnVmZmVyICovCi0JY2hhbi0+YmhfaGVhZCA9IGttYWxsb2MoKHNpemVvZihiaF9kYXRhX3QpKk1BWF9CSF9CVUZGKSxHRlBfQVRPTUlDKTsKLQltZW1zZXQoY2hhbi0+YmhfaGVhZCwwLChzaXplb2YoYmhfZGF0YV90KSpNQVhfQkhfQlVGRikpOwotCWF0b21pY19zZXQoJmNoYW4tPmJoX2J1ZmZfdXNlZCwgMCk7Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0Jd2FucGlwZV9vcGVuKGNhcmQpOwotCWRvX2dldHRpbWVvZmRheSggJnR2ICk7Ci0JY2hhbi0+cm91dGVyX3N0YXJ0X3RpbWUgPSB0di50dl9zZWM7Ci0JCi0JaWYgKHRlc3RfYml0KDAsJmNoYW4tPmNvbmZpZ19kbGNpKSl7Ci0JCXRyaWdnZXJfY29uZmlnX2ZyIChjYXJkKTsKLQl9ZWxzZSBpZiAoY2hhbi0+aW5hcnAgPT0gSU5BUlBfUkVRVUVTVCl7Ci0JCXRyaWdnZXJfZnJfYXJwKGRldik7Ci0JfQotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xvc2UgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGxhc3Qgb3BlbiwgdGhlbiBkaXNhYmxlIGNvbW11bmljYXRpb25zIGFuZCBpbnRlcnJ1cHRzLgotICogbyByZXNldCBmbGFncy4KLSAqLwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCi0JaWYgKGNoYW4tPmluYXJwID09IElOQVJQX0NPTkZJR1VSRUQpIHsKLQkJY2hhbi0+aW5hcnAgPSBJTkFSUF9SRVFVRVNUOwotCX0KLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQl3YW5waXBlX2Nsb3NlKGNhcmQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmUtYnVpbGQgbWVkaWEgaGVhZGVyLgotICoKLSAqIFJldHVybjoJMQlwaHlzaWNhbCBhZGRyZXNzIHJlc29sdmVkLgotICoJCTAJcGh5c2ljYWwgYWRkcmVzcyBub3QgcmVzb2x2ZWQKLSAqLwotc3RhdGljIGludCBpZl9yZWJ1aWxkX2hkciAoc3RydWN0IHNrX2J1ZmYqIHNrYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogcmVidWlsZF9oZWFkZXIoKSBjYWxsZWQgZm9yIGludGVyZmFjZSAlcyFcbiIsCi0JCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSGFuZGxlIHRyYW5zbWl0IHRpbWVvdXQgZXZlbnQgZnJvbSBuZXRpZiB3YXRjaGRvZwotICovCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0JLyogSWYgb3VyIGRldmljZSBzdGF5cyBidXN5IGZvciBhdCBsZWFzdCA1IHNlY29uZHMgdGhlbiB3ZSB3aWxsCi0JICoga2ljayBzdGFydCB0aGUgZGV2aWNlIGJ5IG1ha2luZyBkZXYtPnRidXN5ID0gMC4gIFdlIGV4cGVjdAotCSAqIHRoYXQgb3VyIGRldmljZSBuZXZlciBzdGF5cyBidXN5IG1vcmUgdGhhbiA1IHNlY29uZHMuIFNvIHRoaXMgICAgICAgICAgICAgICAgIAotCSAqIGlzIG9ubHkgdXNlZCBhcyBhIGxhc3QgcmVzb3J0LgotCSAqLwotCi0JY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX3RidXN5Kys7Ci0JKytjaGFuLT5pZnN0YXRzLmNvbGxpc2lvbnM7Ci0KLQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCBvbiAlc1xuIiwgCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF90YnVzeV90aW1lb3V0Kys7Ci0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBhIHBhY2tldCBvbiBhIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBzZXQgdGJ1c3kgZmxhZyAobWFya3Mgc3RhcnQgb2YgdGhlIHRyYW5zbWlzc2lvbikgdG8gYmxvY2sgYSB0aW1lci1iYXNlZAotICogICB0cmFuc21pdCBmcm9tIG92ZXJsYXBwaW5nLgotICogbyBzZXQgY3JpdGljYWwgZmxhZyB3aGVuIGFjY2Vzc2luZyBib2FyZC4KLSAqIG8gY2hlY2sgbGluayBzdGF0ZS4gSWYgbGluayBpcyBub3QgdXAsIHRoZW4gZHJvcCB0aGUgcGFja2V0LgotICogbyBjaGVjayBjaGFubmVsIHN0YXR1cy4gSWYgaXQncyBkb3duIHRoZW4gaW5pdGlhdGUgYSBjYWxsLgotICogbyBwYXNzIGEgcGFja2V0IHRvIGNvcnJlc3BvbmRpbmcgV0FOIGRldmljZS4KLSAqIG8gZnJlZSBzb2NrZXQgYnVmZmVyCi0gKgotICogUmV0dXJuOgkwCWNvbXBsZXRlIChzb2NrZXQgYnVmZmVyIG11c3QgYmUgZnJlZWQpCi0gKgkJbm9uLTAJcGFja2V0IG1heSBiZSByZS10cmFuc21pdHRlZCAodGJ1c3kgbXVzdCBiZSBzZXQpCi0gKgotICogTm90ZXM6Ci0gKiAxLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGVpdGhlciBieSB0aGUgcHJvdG9jb2wgc3RhY2sgb3IgYnkgdGhlICJuZXQKLSAqICAgIGJvdHRvbSBoYWxmIiAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpLgotICogCi0gKiAyLiBVc2luZyBuZXRpZl9zdGFydF9xdWV1ZSgpIGFuZCBuZXRpZl9zdG9wX3F1ZXVlKCkKLSAqICAgIHdpbGwgaW5oaWJpdCBmdXJ0aGVyIHRyYW5zbWl0IHJlcXVlc3RzIGZyb20gdGhlIHByb3RvY29sIHN0YWNrIAotICogICAgYW5kIGNhbiBiZSB1c2VkIGZvciBmbG93IGNvbnRyb2wgd2l0aCBwcm90b2NvbCBsYXllci4KLSAqLwotc3RhdGljIGludCBpZl9zZW5kKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0gICAgCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLSAgICAJc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLSAgICAgICAgaW50IGVycjsKLSAgICAJdW5zaWduZWQgY2hhciAqc2VuZHBhY2tldDsKLSAgICAJZnI1MDhfZmxhZ3NfdCogYWRwdHJfZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQlpbnQgdWRwX3R5cGU7Ci0JbG9uZyBkZWxheV90eF9xdWV1ZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzPTA7Ci0JdW5zaWduZWQgY2hhciBhdHRyID0gMDsKLQotCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF9lbnRyeSsrOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQotICAgICAgICBpZiAoc2tiID09IE5VTEwpIHsgICAgICAgICAgICAgCi0JCS8qIGlmIHdlIGdldCBoZXJlLCBzb21lIGhpZ2hlciBsYXllciB0aGlua3Mgd2UndmUgbWlzc2VkIGFuCi0JCSAqIHR4LWRvbmUgaW50ZXJydXB0LgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVyZmFjZSAlcyBnb3Qga2lja2VkIVxuIiwgCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfc2tiX251bGwgKys7Ci0KLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBJZiBhIHBlcmlwaGVyYWwgdGFzayBpcyBydW5uaW5nIGp1c3QgZHJvcCBwYWNrZXRzICovCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwgJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIGluIGlmX3NlbmQoKTogUGVyaXBoZXJhbCBydW5uaW5nIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFdlIG11c3Qgc2V0IHRoZSAndGJ1c3knIGZsYWcgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcGFja2V0IHF1ZXVlZCBmb3IKLQkgICB0cmFuc21pc3Npb24gaW4gdGhlIHRyYW5zbWl0IGludGVycnVwdCBoYW5kbGVyLiBIb3dldmVyLCB3ZSBtdXN0Ci0JICAgZW5zdXJlIHRoYXQgdGhlIHRyYW5zbWl0IGludGVycnVwdCBkb2VzIG5vdCByZXNldCB0aGUgJ3RidXN5JyBmbGFnCi0JICAganVzdCBiZWZvcmUgd2Ugc2V0IGl0LCBhcyB0aGlzIHdpbGwgcmVzdWx0IGluIGEgInRyYW5zbWl0IHRpbWVvdXQiLgotCSovCi0Jc2V0X2JpdChTRU5EX1RYSVJRX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLSAgICAgICAgaWYoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJY2hhbi0+dGlja19jb3VudGVyID0gamlmZmllczsKLSAJCWNsZWFyX2JpdChTRU5EX1RYSVJRX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmV0dXJuIDE7Ci0JfQotICAgICAgIAljbGVhcl9iaXQoU0VORF9UWElSUV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0gCi0JLyogTW92ZSB0aGUgaWZfaGVhZGVyKCkgY29kZSB0byBoZXJlLiBCeSBpbnNlcnRpbmcgZnJhbWUKLQkgKiByZWxheSBoZWFkZXIgaW4gaWZfaGVhZGVyKCkgd2Ugd291bGQgYnJlYWsgdGhlCi0JICogdGNwZHVtcCBhbmQgb3RoZXIgcGFja2V0IHNuaWZmZXJzICovCi0JY2hhbi0+ZnJfaGVhZGVyX2xlbiA9IHNldHVwX2ZyX2hlYWRlcihza2IsZGV2LGNoYW4tPmNvbW1vbi51c2VkYnkpOwotCWlmIChjaGFuLT5mcl9oZWFkZXJfbGVuIDwgMCApewotCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzZW5kcGFja2V0ID0gc2tiLT5kYXRhOwotCi0JdWRwX3R5cGUgPSB1ZHBfcGt0X3R5cGUoc2tiLCBjYXJkKTsKLQotICAgICAgICBpZih1ZHBfdHlwZSAhPSBVRFBfSU5WQUxJRF9UWVBFKSB7Ci0JCWlmKHN0b3JlX3VkcF9tZ210X3BrdCh1ZHBfdHlwZSwgVURQX1BLVF9GUk1fU1RBQ0ssIGNhcmQsIHNrYiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4tPmRsY2kpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHB0cl9mbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9USU1FUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ZHBfdHlwZSA9PSBVRFBfRlBJUEVfVFlQRSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4tPmRydnN0YXRzX2lmX3NlbmQuCi0JCQkJCWlmX3NlbmRfUElQRV9yZXF1ZXN0ICsrOwotCQkJfQotICAgICAgICAgICAgICAgIH0KLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLy9GSVhNRTogY2FuIHdlIGRvIGJldHRlciB0aGFuIHNlbmRwYWNrZXRbMl0/Ci0gIAlpZiAoKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSkgJiYgKHNlbmRwYWNrZXRbMl0gPT0gMHg0NSkpIHsKLQkJCi0gICAgICAgICAgICAgICAJLyogY2hlY2sgdG8gc2VlIGlmIHRoZSBzb3VyY2UgSVAgYWRkcmVzcyBpcyBhIGJyb2FkY2FzdCBvciAqLwotICAgICAgICAgICAgICAgIC8qIG11bHRpY2FzdCBJUCBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAgaWYoY2hrX2JjYXN0X21jYXN0X2FkZHIoY2FyZCwgZGV2LCBza2IpKXsKLSAgICAgICAgICAgIAkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotICAgICAgICAgICAgICAgIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JCi0JLyogTG9jayB0aGUgUzUxNC9TNTA4IGNhcmQ6IFNNUCBTdXBwb3J0ZWQgKi8KLSAgICAJczUwOF9zNTE0X2xvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQotCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfY3JpdGljYWxfbm9uX0lTUiArKzsKLQkJY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkICsrOwotCQlwcmludGsoS0VSTl9JTkZPICIlcyBDcml0aWNhbCBpbiBJRl9TRU5EOiBpZl9zZW5kKCkgYWxyZWFkeSBydW5uaW5nIVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWdvdG8gaWZfc2VuZF9zdGFydF9hbmRfZXhpdDsKLQl9Ci0JCi0JLyogQVBJIHBhY2tldCBjaGVjazogbWluaW11bSBwYWNrZXQgc2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAKLQkgKiAxNiBieXRlIEFQSSBoZWFkZXIgKi8KLQlpZigoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpICYmIChza2ItPmxlbiA8PSBzaXplb2YoYXBpX3R4X2hkcl90KSkpIHsKLQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JICAgIAotCQkKLQkJZ290byBpZl9zZW5kX3N0YXJ0X2FuZF9leGl0OwotCi0gCX1lbHNlewotCQkvKiBEdXJpbmcgQVBJIHRyYW5zbWlzc2lvbiwgZ2V0IHJpZCBvZiB0aGUgQVBJIGhlYWRlciAqLwotCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpIHsKLQkJCWFwaV90eF9oZHJfdCogYXBpX3R4X2hkcjsKLQkJCWFwaV90eF9oZHIgPSAoYXBpX3R4X2hkcl90Kikmc2tiLT5kYXRhWzB4MDBdOwotCQkJYXR0ciA9IGFwaV90eF9oZHItPmF0dHI7Ci0JCQlza2JfcHVsbChza2Isc2l6ZW9mKGFwaV90eF9oZHJfdCkpOwotCQl9Ci0JfQotCi0JaWYgKGNhcmQtPndhbmRldi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKSB7Ci0JCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF93YW5fZGlzY29ubmVjdGVkICsrOwotCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLSAgICAgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCi0JfSBlbHNlIGlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCkgewotCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfZGxjaV9kaXNjb25uZWN0ZWQgKys7Ci0KLQkJLyogVXBkYXRlIHRoZSBETENJIHN0YXRlIGluIHRpbWVyIGludGVycnVwdCAqLwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VQREFURV9TVEFURTsJCi0JCWFkcHRyX2ZsYWdzLT5pbWFzayB8PSBGUl9JTlRSX1RJTUVSOwotCi0gICAgICAgIAkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLSAgICAgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQotCX0gZWxzZSBpZiAoIWlzX3R4X3JlYWR5KGNhcmQsIGNoYW4pKSB7Ci0JCS8qIE5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCBzdG9yZSBmb3IgZGVsYXllZCB0cmFuc21pdCAqLwotCQlpZiAoIXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KGRldiwgc2tiKSl7Ci0JCQlzZXRfYml0KDEsJmRlbGF5X3R4X3F1ZXVlZCk7Ci0JCX0KLQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX25vX2JmcnMrKzsKLQkJCi0JfSBlbHNlIGlmICghc2tiLT5wcm90b2NvbCkgewotCQkvKiBObyBwcm90b2NvbHMgZHJvcCBwYWNrZXQgKi8KLQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX3Byb3RvY29sX2Vycm9yICsrOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9lcnJvcnM7Ci0JCi0JfSBlbHNlIGlmICh0ZXN0X2JpdChBUlBfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCS8qIFdlIGFyZSB0cnlpbmcgdG8gc2VuZCBhbiBBUlAgUGFja2V0LCBibG9jayBJUCBkYXRhIHVudGlsCi0JCSAqIEFSUCBpcyBzZW50ICovCi0JCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotICAgICAgICAJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCi0JfSBlbHNlIHsKLQkJLy9GSVhNRTogSVBYIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgRnJhbWUgUmVsYXkgPwotCQlpZigoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKSAmJgotCQkgCXNlbmRwYWNrZXRbMV0gPT0gMHgwMCAmJgotCQkgICAgCXNlbmRwYWNrZXRbMl0gPT0gMHg4MCAmJgotCQkgICAgCXNlbmRwYWNrZXRbNl0gPT0gMHg4MSAmJgotCQkgICAgCXNlbmRwYWNrZXRbN10gPT0gMHgzNykgewotCQkJCi0JCQlpZiggY2hhbi0+ZW5hYmxlX0lQWCApIHsKLQkJCQlzd2l0Y2hfbmV0X251bWJlcnMoc2VuZHBhY2tldCwgCi0JCQkJCQljaGFuLT5uZXR3b3JrX251bWJlciwgMCk7Ci0JCQl9IGVsc2UgewotCQkJCS8vRklYTUU6IFRha2UgdGhpcyBvdXQgd2hlbiBJUFggaXMgZml4ZWQgCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFdBUk5JTkc6IFVuc3VwcG9ydGVkIElQWCBkYXRhIGluIHNlbmQsIHBhY2tldCBkcm9wcGVkXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJCQotCQl9ZWxzZXsKLSAgICAgICAgCQllcnIgPSBmcl9zZW5kX2RhdGFfaGVhZGVyKGNhcmQsIGNoYW4tPmRsY2ksIGF0dHIsIHNrYi0+bGVuLCBza2ItPmRhdGEsIGNoYW4tPmZyX2hlYWRlcl9sZW4pOwotCQkJaWYgKGVycikgewotCQkJCXN3aXRjaChlcnIpIHsKLQkJCQljYXNlIEZSUkVTX0NJUl9PVkVSRkxPVzoKLQkJCQljYXNlIEZSUkVTX0JVRkZFUl9PVkVSRkxPVzoKLSAgICAgICAgICAgICAgICAJCQlpZiAoIXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KGRldiwgc2tiKSl7Ci0JCQkJCQlzZXRfYml0KDEsJmRlbGF5X3R4X3F1ZXVlZCk7Ci0JCQkJCX0KLSAgICAgICAgICAgCQkJCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuCi0JCQkJCQlpZl9zZW5kX2FkcHRyX2JmcnNfZnVsbCArKzsKLQkJCQkJYnJlYWs7Ci0JCQkJCQotCQkJCWNhc2UgRlJSRVNfVE9PX0xPTkc6Ci0JCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJCSIlczogRXJyb3I6IEZyYW1lIHRvbyBsb25nLCB0cmFuc21pc3Npb24gZmFpbGVkICVpXG4iLAotCQkJCQkJIGNhcmQtPmRldm5hbWUsICh1bnNpZ25lZCBpbnQpc2tiLT5sZW4pOwotCQkJCQl9Ci0JCQkJCS8qIERyb3AgZG93biB0byBkZWZhdWx0ICovCi0JCQkJZGVmYXVsdDoKLQkJCQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC4KLQkJCQkJCWlmX3NlbmRfZGxjaV9kaXNjb25uZWN0ZWQgKys7Ci0gICAgICAgIAkJCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLSAgICAgICAgCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC4KLQkJCQkJaWZfc2VuZF9iZnJfcGFzc2VkX3RvX2FkcHRyKys7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnR4X3BhY2tldHM7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLQkJCQkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQkJfQotCQl9Ci0JfQotCi1pZl9zZW5kX3N0YXJ0X2FuZF9leGl0OgotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkKLQkvKiBJZiB3ZSBxdWV1ZWQgdGhlIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uLCB3ZSBtdXN0IG5vdAotCSAqIGRlYWxsb2NhdGUgaXQuIFRoZSBwYWNrZXQgaXMgdW5saW5rZWQgZnJvbSB0aGUgSVAgc3RhY2sKLQkgKiBub3QgY29waWVkLiBUaGVyZWZvcmUsIHdlIG11c3Qga2VlcCB0aGUgb3JpZ2luYWwgcGFja2V0ICovCi0JaWYgKCF0ZXN0X2JpdCgxLCZkZWxheV90eF9xdWV1ZWQpKSB7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9ZWxzZXsKLQkJYWRwdHJfZmxhZ3MtPmltYXNrIHw9IEZSX0lOVFJfVFhSRFk7Ci0JCWNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcgKys7Ci0JfQotCi0gICAgICAgIGNsZWFyX2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQotCXM1MDhfczUxNF91bmxvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXR1cCBzbyB0aGF0IGEgZnJhbWUgY2FuIGJlIHRyYW5zbWl0dGVkIG9uIHRoZSBvY2N1cnJlbmNlIG9mIGEgdHJhbnNtaXQKLSAqIGludGVycnVwdC4KLSAqLwotc3RhdGljIGludCBzZXR1cF9mb3JfZGVsYXllZF90cmFuc21pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0gICAgICAgIGZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLSAgICAgICAgc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLSAgICAgICAgZnJfZGxjaV9pbnRlcmZhY2VfdCogZGxjaV9pbnRlcmZhY2U7Ci0JaW50IGxlbiA9IHNrYi0+bGVuOwotCi0JLyogQ2hlY2sgdGhhdCB0aGUgZGxjaSBpcyBwcm9wZXJseSBjb25maWd1cmVkLAotICAgICAgICAgKiBiZWZvcmUgdXNpbmcgdHggaW50ZXJydXB0ICovCi0JaWYgKCFjaGFuLT5kbGNpX2ludF9pbnRlcmZhY2UpewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsgCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogRVJST1Igb24gRExDSSAlaTogTm90IGNvbmZpZ3VyZWQgcHJvcGVybHkgIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXNcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQkJCi0JZGxjaV9pbnRlcmZhY2UgPSBjaGFuLT5kbGNpX2ludF9pbnRlcmZhY2U7Ci0KLSAgICAgICAgaWYoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJpZyBtZXNzIGluIHNldHVwX2Zvcl9kZWwuLi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotCWlmKGxlbiA+IEZSX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FKSB7Ci0JCS8vRklYTUU6IGluY3JlbWVudCBzb21lIHN0YXRpc3RpYyAqLwotCQlyZXR1cm4gMTsKLQl9Ci0KLSAgICAgICAgY2hhbi0+dHJhbnNtaXRfbGVuZ3RoID0gbGVuOwotCWNoYW4tPmRlbGF5X3NrYiA9IHNrYjsKLSAgICAgICAgCi0gICAgICAgIGRsY2lfaW50ZXJmYWNlLT5nZW5faW50ZXJydXB0IHw9IEZSX0lOVFJfVFhSRFk7Ci0gICAgICAgIGRsY2lfaW50ZXJmYWNlLT5wYWNrZXRfbGVuZ3RoID0gbGVuOwotCi0JLyogVHVybiBvbiBUWCBpbnRlcnJ1cHQgYXQgdGhlIGVuZCBvZiBpZl9zZW5kICovCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaGVjayB0byBzZWUgaWYgdGhlIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZCBjb250YWlucyBhIGJyb2FkY2FzdCBvcgotICogbXVsdGljYXN0IHNvdXJjZSBJUCBhZGRyZXNzLgotICogUmV0dXJuIDAgaWYgbm90IGJyb2FkY2FzdC9tdWx0aWNhc3QgYWRkcmVzcywgb3RoZXJ3aXNlIHJldHVybiAxLgotICovCi0KLXN0YXRpYyBpbnQgY2hrX2JjYXN0X21jYXN0X2FkZHIoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotICAgICAgICB1MzIgc3JjX2lwX2FkZHI7Ci0gICAgICAgIHUzMiBicm9hZGNhc3RfaXBfYWRkciA9IDA7Ci0gICAgICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLSAgICAgICAgZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotIAotICAgICAgICAvKiByZWFkIHRoZSBJUCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBvdXRnb2luZyBwYWNrZXQgKi8KLSAgICAgICAgc3JjX2lwX2FkZHIgPSAqKHUzMiAqKShza2ItPmRhdGEgKyAxNCk7Ci0KLSAgICAgICAgLyogcmVhZCB0aGUgSVAgYnJvYWRjYXN0IGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UgKi8KLSAgICAgICAgaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0gICAgICAgIGlmKGluX2RldiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhPSBpbl9kZXYtPmlmYV9saXN0OwotICAgICAgICAgICAgICAgIGlmKGlmYSAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0X2lwX2FkZHIgPSBpZmEtPmlmYV9icm9hZGNhc3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjaGVjayBpZiB0aGUgSVAgU291cmNlIEFkZHJlc3MgaXMgYSBCcm9hZGNhc3QgYWRkcmVzcyAqLwotICAgICAgICBpZigoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpICYmIChzcmNfaXBfYWRkciA9PSBicm9hZGNhc3RfaXBfYWRkcikpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXM6IEJyb2FkY2FzdCBTb3VyY2UgQWRkcmVzcyBzaWxlbnRseSBkaXNjYXJkZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGNoZWNrIGlmIHRoZSBJUCBTb3VyY2UgQWRkcmVzcyBpcyBhIE11bHRpY2FzdCBhZGRyZXNzICovCi0gICAgICAgIGlmKChjaGFuLT5tYyA9PSBXQU5PUFRfTk8pICYmIChudG9obChzcmNfaXBfYWRkcikgPj0gMHhFMDAwMDAwMSkgJiYKLSAgICAgICAgICAgICAgICAobnRvaGwoc3JjX2lwX2FkZHIpIDw9IDB4RkZGRkZGRkUpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBNdWx0aWNhc3QgU291cmNlIEFkZHJlc3Mgc2lsZW50bHkgZGlzY2FyZGVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZXBseSB0byBVRFAgTWFuYWdlbWVudCBzeXN0ZW0uCi0gKiBSZXR1cm4gbm90aGluZy4KLSAqLwotc3RhdGljIGludCByZXBseV91ZHAoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYm94X2xlbiApIAotewotCXVuc2lnbmVkIHNob3J0IGxlbiwgdWRwX2xlbmd0aCwgdGVtcCwgaXBfbGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgaXBfdGVtcDsKLQlpbnQgZXZlbl9ib3VuZCA9IDA7Ci0KLSAgCi0JZnJfdWRwX3BrdF90ICpmcl91ZHBfcGt0ID0gKGZyX3VkcF9wa3RfdCAqKWRhdGE7IAotCi0JLyogU2V0IGxlbmd0aCBvZiBwYWNrZXQgKi8KLQlsZW4gPSAvL3NpemVvZihmcl9lbmNhcF9oZHJfdCkrCi0JICAgICAgc2l6ZW9mKGlwX3BrdF90KSsgCi0JICAgICAgc2l6ZW9mKHVkcF9wa3RfdCkrCi0JICAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JICAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICBtYm94X2xlbjsKLSAKLQotCS8qIGZpbGwgaW4gVURQIHJlcGx5ICovCi0JZnJfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID0gVURQTUdNVF9SRVBMWTsKLSAgCi0JLyogZmlsbCBpbiBVRFAgbGVuZ3RoICovCi0JdWRwX2xlbmd0aCA9IHNpemVvZih1ZHBfcGt0X3QpKyAKLQkJICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkJICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCQkgICAgIG1ib3hfbGVuOyAKLQotCi0JLyogcHV0IGl0IG9uIGFuIGV2ZW4gYm91bmRhcnkgKi8KLQlpZiAoIHVkcF9sZW5ndGggJiAweDAwMDEgKSB7Ci0JCXVkcF9sZW5ndGggKz0gMTsKLQkJbGVuICs9IDE7Ci0JCWV2ZW5fYm91bmQgPSAxOwotCX0KLQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX2xlbmd0aCA9IHRlbXA7Ci0JIAotCS8qIHN3YXAgVURQIHBvcnRzICovCi0JdGVtcCA9IGZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0OwotCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0ID0gCi0JCQlmcl91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydDsgCi0JZnJfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPSB0ZW1wOwotCi0KLQotCS8qIGFkZCBVRFAgcHNldWRvIGhlYWRlciAqLwotCXRlbXAgPSAweDExMDA7Ci0JKigodW5zaWduZWQgc2hvcnQgKikKLQkJKGZyX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCkpID0gdGVtcDsJCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JKigodW5zaWduZWQgc2hvcnQgKikKLQkJKGZyX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCsyKSkgPSB0ZW1wOwotCQkgCi0JLyogY2FsY3VsYXRlIFVEUCBjaGVja3N1bSAqLwotCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gMDsKLQotCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gCi0JCWNhbGNfY2hlY2tzdW0oJmRhdGFbVURQX09GRlNFVC8qK3NpemVvZihmcl9lbmNhcF9oZHJfdCkqL10sCi0JCQkgICAgICB1ZHBfbGVuZ3RoK1VEUF9PRkZTRVQpOwotCi0JLyogZmlsbCBpbiBJUCBsZW5ndGggKi8KLQlpcF9sZW5ndGggPSB1ZHBfbGVuZ3RoICsgc2l6ZW9mKGlwX3BrdF90KTsKLQl0ZW1wID0gKGlwX2xlbmd0aDw8OCl8KGlwX2xlbmd0aD4+OCk7Ci0JZnJfdWRwX3BrdC0+aXBfcGt0LnRvdGFsX2xlbmd0aCA9IHRlbXA7Ci0gIAotCS8qIHN3YXAgSVAgYWRkcmVzc2VzICovCi0JaXBfdGVtcCA9IGZyX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzczsKLQlmcl91ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3MgPSAKLQkJCQlmcl91ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3M7Ci0JZnJfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzID0gaXBfdGVtcDsKLQotCQkgCi0JLyogZmlsbCBpbiBJUCBjaGVja3N1bSAqLwotCWZyX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSAwOwotCWZyX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSAKLQkJY2FsY19jaGVja3N1bSgmZGF0YVsvKnNpemVvZihmcl9lbmNhcF9oZHJfdCkqLzBdLAotCQkgICAgICAJICAgICAgc2l6ZW9mKGlwX3BrdF90KSk7Ci0KLQlyZXR1cm4gbGVuOwotfSAvKiByZXBseV91ZHAgKi8KLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wOyAKLQl1bnNpZ25lZCBsb25nIHN1bT0wOwotCWludCBpOwotCi0JZm9yKCBpID0gMDsgaSA8bGVuOyBpKz0yICkgewotCQltZW1jcHkoJnRlbXAsJmRhdGFbaV0sMik7Ci0JCXN1bSArPSAodW5zaWduZWQgbG9uZyl0ZW1wOwotCX0KLQotCXdoaWxlIChzdW0gPj4gMTYgKSB7Ci0JCXN1bSA9IChzdW0gJiAweGZmZmZVTCkgKyAoc3VtID4+IDE2KTsKLQl9Ci0KLQl0ZW1wID0gKHVuc2lnbmVkIHNob3J0KXN1bTsKLQl0ZW1wID0gfnRlbXA7Ci0KLQlpZiggdGVtcCA9PSAwICkgCi0JCXRlbXAgPSAweGZmZmY7Ci0KLQlyZXR1cm4gdGVtcDsJCi19Ci0KLS8qCi0gICBJZiBpbmNvbWluZyBpcyAwIChvdXRnb2luZyktIGlmIHRoZSBuZXQgbnVtYmVycyBpcyBvdXJzIG1ha2UgaXQgMAotICAgaWYgaW5jb21pbmcgaXMgMSAtIGlmIHRoZSBuZXQgbnVtYmVyIGlzIDAgbWFrZSBpdCBvdXJzIAotCi0qLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIsIHVuc2lnbmVkIGNoYXIgaW5jb21pbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBwbmV0d29ya19udW1iZXI7Ci0KLQlwbmV0d29ya19udW1iZXIgPSAodW5zaWduZWQgbG9uZykoKHNlbmRwYWNrZXRbMTRdIDw8IDI0KSArIAotCQkJICAoc2VuZHBhY2tldFsxNV0gPDwgMTYpICsgKHNlbmRwYWNrZXRbMTZdIDw8IDgpICsgCi0JCQkgIHNlbmRwYWNrZXRbMTddKTsKLQotCWlmICghaW5jb21pbmcpIHsKLQkJLyogSWYgdGhlIGRlc3RpbmF0aW9uIG5ldHdvcmsgbnVtYmVyIGlzIG91cnMsIG1ha2UgaXQgMCAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IG5ldHdvcmtfbnVtYmVyKSB7Ci0JCQlzZW5kcGFja2V0WzE0XSA9IHNlbmRwYWNrZXRbMTVdID0gc2VuZHBhY2tldFsxNl0gPSAKLQkJCQkJIHNlbmRwYWNrZXRbMTddID0gMHgwMDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIElmIHRoZSBpbmNvbWluZyBuZXR3b3JrIGlzIDAsIG1ha2UgaXQgb3VycyAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IDApIHsKLQkJCXNlbmRwYWNrZXRbMTRdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbMTVdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMEZGMDAwMCkgPj4gMTYpOwotCQkJc2VuZHBhY2tldFsxNl0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDBGRjAwKSA+PiA4KTsKLQkJCXNlbmRwYWNrZXRbMTddID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLQotCi0JcG5ldHdvcmtfbnVtYmVyID0gKHVuc2lnbmVkIGxvbmcpKChzZW5kcGFja2V0WzI2XSA8PCAyNCkgKyAKLQkJCSAgKHNlbmRwYWNrZXRbMjddIDw8IDE2KSArIChzZW5kcGFja2V0WzI4XSA8PCA4KSArIAotCQkJICBzZW5kcGFja2V0WzI5XSk7Ci0KLQlpZiggIWluY29taW5nICkgewotCQkvKiBJZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgb3VycywgbWFrZSBpdCAwICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gbmV0d29ya19udW1iZXIpIHsKLQkJCXNlbmRwYWNrZXRbMjZdID0gc2VuZHBhY2tldFsyN10gPSBzZW5kcGFja2V0WzI4XSA9IAotCQkJCQkgc2VuZHBhY2tldFsyOV0gPSAweDAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlIHNvdXJjZSBuZXR3b3JrIGlzIDAsIG1ha2UgaXQgb3VycyAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IDAgKSB7Ci0JCQlzZW5kcGFja2V0WzI2XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzI3XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJCXNlbmRwYWNrZXRbMjhdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzI5XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwMDBGRik7Ci0JCX0KLQl9Ci19IC8qIHN3aXRjaF9uZXRfbnVtYmVycyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdldCBldGhlcm5ldC1zdHlsZSBpbnRlcmZhY2Ugc3RhdGlzdGljcy4KLSAqIFJldHVybiBhIHBvaW50ZXIgdG8gc3RydWN0IGVuZXRfc3RhdGlzdGljcy4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQkKLQlpZihjaGFuID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuICZjaGFuLT5pZnN0YXRzOwotfQotCi0vKioqKioqIEludGVycnVwdCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBmcl9pc3I6CVM1MDggZnJhbWUgcmVsYXkgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUZyYW1lIHJlbGF5IG1haW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGUuIFRoaXMKLSAqICAgICAgZnVuY3Rpb24gY2hlY2sgdGhlIGludGVycnVwdCB0eXBlIGFuZCB0YWtlcwotICogICAgICB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBmcl9pc3IgKHNkbGFfdCogY2FyZCkKLXsKLQlmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotCWNoYXIgKnB0ciA9ICZmbGFncy0+aWZsYWc7Ci0JaW50IGksZXJyOwotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0KLQkvKiBUaGlzIGZsYWcgcHJldmVudHMgbmVzdGluZyBvZiBpbnRlcnJ1cHRzLiAgU2VlIHNkbGFfaXNyKCkgcm91dGluZQotICAgICAgICAgKiBpbiBzZGxhbWFpbi5jLiAgKi8KLQljYXJkLT5pbl9pc3IgPSAxOwotCQotCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfZW50cnk7Ci0KLQotCS8qIEFsbCBwZXJpcGhlcmFsIChjb25maWd1cmFpdG9uLCByZS1jb25maWd1cmF0aW9uKSBldmVudHMKLQkgKiB0YWtlIHByZXNpZGVuY2Ugb3ZlciB0aGUgSVNSLiAgVGh1cywgcmV0cmlnZ2VyICovCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfYWxyZWFkeV9jcml0aWNhbDsKLQkJZ290byBmcl9pc3JfZXhpdDsKLQl9Ci0JCi0gICAgICAgIGlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KSB7Ci0JCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIHdoaWxlIGluIElTUjogSWYgU2VuZCBSdW5uaW5nIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0JCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX2FscmVhZHlfY3JpdGljYWw7Ci0JCQlnb3RvIGZyX2lzcl9leGl0OwotCQl9Ci0JfQotCi0Jc3dpdGNoIChmbGFncy0+aWZsYWcpIHsKLQotICAgICAgICAgICAgICAgIGNhc2UgRlJfSU5UUl9SWFJEWTogIC8qIHJlY2VpdmUgaW50ZXJydXB0ICovCi0JICAgIAkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9yeDsKLSAgICAgICAgICAJCXJ4X2ludHIoY2FyZCk7Ci0gICAgICAgICAgICAJCWJyZWFrOwotCi0KLSAgICAgICAgICAgICAgICBjYXNlIEZSX0lOVFJfVFhSRFk6ICAvKiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkgICAgCQkrKyBjYXJkLT5zdGF0aXN0aWNzLmlzcl90eDsgCi0JCQl0eF9pbnRyKGNhcmQpOyAKLSAgICAgICAgICAgIAkJYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEZSX0lOVFJfUkVBRFk6ICAJCi0JICAgIAkJSW50cl90ZXN0X2NvdW50ZXIrKzsKLQkJCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfaW50cl90ZXN0OwotCSAgICAJCWJyZWFrOwkKLQotICAgICAgICAgICAgICAgIGNhc2UgRlJfSU5UUl9ETEM6IC8qIEV2ZW50IGludGVycnVwdCBvY2N1cnJlZCAqLwotCQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX1NUQVRVUzsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkJaWYgKGVycikKLQkJCQlmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpOwotCQkJYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEZSX0lOVFJfVElNRVI6ICAvKiBUaW1lciBpbnRlcnJ1cHQgKi8KLQkJCXRpbWVyX2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQkKLQkJZGVmYXVsdDoKLQkgICAgCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX3NwdXJpb3VzOwotICAgICAgICAgICAgCQlzcHVyX2ludHIoY2FyZCk7Ci0JICAgIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVycnVwdCBUeXBlIDB4JTAyWCFcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIGZsYWdzLT5pZmxhZyk7Ci0JICAgIAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElEIEJ5dGVzID0gIixjYXJkLT5kZXZuYW1lKTsKLSAJICAgIAkJZm9yKGkgPSAwOyBpIDwgODsgaSArKykKLQkJCQlwcmludGsoS0VSTl9JTkZPICIweCUwMlggIiwgKihwdHIgKyAweDI4ICsgaSkpOwotCSAgIAkgCXByaW50ayhLRVJOX0lORk8gIlxuIik7CQotICAgICAgICAgICAgCi0JCQlicmVhazsKLSAgICAJfQotCi1mcl9pc3JfZXhpdDoKLQkKLQljYXJkLT5pbl9pc3IgPSAwOwotCWZsYWdzLT5pZmxhZyA9IDA7Ci0JcmV0dXJuOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogcnhfaW50cglSZWNlaXZlIGludGVycnVwdCBoYW5kbGVyLgotICoKLSAqIERlc2NyaXB0aW9uCi0gKiAJVXBvbiByZWNlaXZlaW5nIGFuIGludGVycnVwdDogCi0gKgkxLiBDaGVjayB0aGF0IHRoZSBmaXJtd2FyZSBpcyBpbiBzeW5jIHdpdGggCi0gKiAgICAgCSAgIHRoZSBkcml2ZXIuIAotICogICAgICAyLiBGaW5kIGFuIGFwcHJvcHJpYXRlIG5ldHdvcmsgaW50ZXJmYWNlCi0gKiAgICAgICAgIGJhc2VkIG9uIHRoZSByZWNlaXZlZCBkbGNpIG51bWJlci4KLSAqCTMuIENoZWNrIHRoYXQgdGhlIG5ldG93cmsgaW50ZXJmYWNlIGV4aXN0cwotICogICAgICAgICBhbmQgdGhhdCBpdCdzIHNldHVwIHByb3Blcmx5LgotICoJNC4gQ29weSB0aGUgZGF0YSBpbnRvIGFuIHNrYiBidWZmZXIuCi0gKgk1LiBDaGVjayB0aGUgcGFja2V0IHR5cGUgYW5kIHRha2UKLSAqICAgICAgICAgYXBwcm9wcmlhdGUgYWN0b246IFVQRCwgQVBJLCBBUlAgb3IgRGF0YS4KLSAqLwotCi1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0JZnJfcnhfYnVmX2N0bF90KiBmcmJ1ZiA9IGNhcmQtPnJ4bWI7Ci0JZnI1MDhfZmxhZ3NfdCogZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQlmcl9jaGFubmVsX3QqIGNoYW47Ci0JY2hhciAqcHRyID0gJmZsYWdzLT5pZmxhZzsKLQlzdHJ1Y3Qgc2tfYnVmZiogc2tiOwotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0Jdm9pZCogYnVmOwotCXVuc2lnbmVkIGRsY2ksIGxlbiwgb2ZmcywgbGVuX2luY2xfaGRyOwotCWludCBpLCB1ZHBfdHlwZTsJCi0KLQotCS8qIENoZWNrIHRoYXQgZmlybXdhcmUgYnVmZmVycyBhcmUgaW4gc3luYyAqLwotCWlmIChmcmJ1Zi0+ZmxhZyAhPSAweDAxKSB7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogY29ycnVwdGVkIFJ4IGJ1ZmZlciBAIDB4JVgsIGZsYWcgPSAweCUwMlghXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsICh1bnNpZ25lZClmcmJ1ZiwgZnJidWYtPmZsYWcpOwotICAgICAgCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJRCBCeXRlcyA9ICIsY2FyZC0+ZGV2bmFtZSk7Ci0gCQlmb3IoaSA9IDA7IGkgPCA4OyBpICsrKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiMHglMDJYICIsICoocHRyICsgMHgyOCArIGkpKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQkKLQkJKytjYXJkLT5zdGF0aXN0aWNzLnJ4X2ludHJfY29ycnVwdF9yeF9iZnI7Ci0KLQkJLyogQnVnIEZpeDogTWFyIDYgMjAwMAotICAgICAgICAgICAgICAgICAqIElmIHdlIGdldCBhIGNvcnJ1cHRlZCBtYWlsYm94LCBpdCBtZWFucyB0aGF0IGRyaXZlciAKLSAgICAgICAgICAgICAgICAgKiBpcyBvdXQgb2Ygc3luYyB3aXRoIHRoZSBmaXJtd2FyZS4gVGhlcmUgaXMgbm8gcmVjb3ZlcnkuCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZG9uJ3QgdHVybiBvZmYgYWxsIGludGVycnVwdHMgZm9yIHRoaXMgY2FyZAotICAgICAgICAgICAgICAgICAqIHRoZSBtYWNoaW5lIHdpbGwgY3Jhc2guIAotICAgICAgICAgICAgICAgICAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgcm91dGVyIGZhaWx1cmUgLi4uISEhXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXMgIVxuIik7Ci0JCWZyX3NldF9pbnRyX21vZGUoY2FyZCwgMCwgMCwgMCk7CQotCQlyZXR1cm47Ci0JfQotCi0JbGVuICA9IGZyYnVmLT5sZW5ndGg7Ci0JZGxjaSA9IGZyYnVmLT5kbGNpOwotCW9mZnMgPSBmcmJ1Zi0+b2Zmc2V0OwotCi0JLyogRmluZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgZm9yIHRoaXMgcGFja2V0ICovCi0JZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsIGRsY2kpOwotICAgCi0KLQkvKiBDaGVjayB0aGF0IHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBhY3RpdmUgYW5kCi0gICAgICAgICAqIHByb3Blcmx5IHNldHVwICovCi0JaWYgKGRldiA9PSBOVUxMKSB7Ci0gICAJCWlmKCBuZXRfcmF0ZWxpbWl0KCkpIHsgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgZGF0YSBvbiB1bmNvbmZpZ3VyZWQgRExDSSAlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lLCBkbGNpKTsKLQkJfQotCQkrK2NhcmQtPnN0YXRpc3RpY3MucnhfaW50cl9vbl9vcnBoYW5lZF9ETENJOyAKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZ290byByeF9kb25lOwotCX0KLQotCWlmICgoY2hhbiA9IGRldi0+cHJpdikgPT0gTlVMTCl7Ci0JCWlmKCBuZXRfcmF0ZWxpbWl0KCkpIHsgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgZGF0YSBvbiB1bmNvbmZpZ3VyZWQgRExDSSAlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lLCBkbGNpKTsKLQkJfQotCQkrK2NhcmQtPnN0YXRpc3RpY3MucnhfaW50cl9vbl9vcnBoYW5lZF9ETENJOyAKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZ290byByeF9kb25lOwotCX0KLQotCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsgCi0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAoc2tiID09IE5VTEwpKXsKLQotCQkrK2NoYW4tPmlmc3RhdHMucnhfZHJvcHBlZDsKLQkKLQkJaWYoc2tiID09IE5VTEwpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsgCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJIiVzOiBubyBzb2NrZXQgYnVmZmVycyBhdmFpbGFibGUhXG4iLCAKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfQotCQkJY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX25vX3NvY2tldCArKzsKLQkJfSAKLQotCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSl7Ci0JCQljaGFuLT5kcnZzdGF0c19yeF9pbnRyLgotCQkJCXJ4X2ludHJfZGV2X25vdF9zdGFydGVkICsrOwotCQkJaWYgKHNrYil7Ci0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCX0KLQkJfQotCQlnb3RvIHJ4X2RvbmU7Ci0JfQotCi0JLyogQ29weSBkYXRhIGZyb20gdGhlIGJvYXJkIGludG8gdGhlIHNvY2tldCBidWZmZXIgKi8KLQlpZiAoKG9mZnMgKyBsZW4pID4gY2FyZC0+dS5mLnJ4X3RvcCArIDEpIHsKLQkJdW5zaWduZWQgdG1wID0gY2FyZC0+dS5mLnJ4X3RvcCAtIG9mZnMgKyAxOwotCi0JCWJ1ZiA9IHNrYl9wdXQoc2tiLCB0bXApOwotCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBvZmZzLCBidWYsIHRtcCk7Ci0JCW9mZnMgPSBjYXJkLT51LmYucnhfYmFzZTsKLQkJbGVuIC09IHRtcDsKLQl9Ci0KLQlidWYgPSBza2JfcHV0KHNrYiwgbGVuKTsKLQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBvZmZzLCBidWYsIGxlbik7Ci0KLQotCS8qIFdlIGdvdCB0aGUgcGFja2V0IGZyb20gdGhlIGJhcmQuIAotICAgICAgICAgKiBDaGVjayB0aGUgcGFja2V0IHR5cGUgYW5kIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uICovCi0KLQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZSggc2tiLCBjYXJkICk7Ci0KLQlpZih1ZHBfdHlwZSAhPSBVRFBfSU5WQUxJRF9UWVBFKSB7Ci0KLQkJLyogVURQIERlYnVnIHBhY2tldCByZWNlaXZlZCwgc3RvcmUgdGhlCi0JCSAqIHBhY2tldCBhbmQgaGFuZGxlIGl0IGluIHRpbWVyIGludGVycnVwdCAqLwotCi0JCXNrYl9wdWxsKHNrYiwgMSk7IAotCQlpZiAod2Fucm91dGVyX3R5cGVfdHJhbnMoc2tiLCBkZXYpKXsgCi0JCQlpZihzdG9yZV91ZHBfbWdtdF9wa3QodWRwX3R5cGUsVURQX1BLVF9GUk1fTkVUV09SSyxjYXJkLHNrYixkbGNpKSl7Ci0KLQkJCQlmbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9USU1FUjsKLQotCQkJCWlmICh1ZHBfdHlwZSA9PSBVRFBfRlBJUEVfVFlQRSl7Ci0JCQkJCSsrY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX1BJUEVfcmVxdWVzdDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX1lbHNlIGlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkgewotCi0JCS8qIFdlIGFyZSBpbiBBUEkgbW9kZS4gCi0gICAgICAgICAgICAgICAgICogQWRkIGFuIEFQSSBoZWFkZXIgdG8gdGhlIFJBVyBwYWNrZXQKLSAgICAgICAgICAgICAgICAgKiBhbmQgcXVldWUgaXQgaW50byBhIGNpcmN1bGFyIGJ1ZmZlci4KLSAgICAgICAgICAgICAgICAgKiBUaGVuIGtpY2sgdGhlIGZyX2JoKCkgYm90dG9tIGhhbGYgaGFuZGxlciAqLwotCi0JCWFwaV9yeF9oZHJfdCogYXBpX3J4X2hkcjsKLQkJY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2sgKys7Ci0JCWNoYW4tPmlmc3RhdHMucnhfcGFja2V0cyArKzsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHMgKys7Ci0KLQkJY2hhbi0+aWZzdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0JCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKGFwaV9yeF9oZHJfdCkpOwotCQlhcGlfcnhfaGRyID0gKGFwaV9yeF9oZHJfdCopJnNrYi0+ZGF0YVsweDAwXTsKLQkJYXBpX3J4X2hkci0+YXR0ciA9IGZyYnVmLT5hdHRyOwotCQlhcGlfcnhfaGRyLT50aW1lX3N0YW1wID0gZnJidWYtPnRtc3RhbXA7Ci0KLQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLQkJc2tiLT5tYWMucmF3ICA9IHNrYi0+ZGF0YTsKLQkJc2tiLT5kZXYgICAgICA9IGRldjsKLQkJc2tiLT5wa3RfdHlwZSA9IFdBTl9QQUNLRVRfREFUQTsKLQotCQliaF9lbnF1ZXVlKGRldiwgc2tiKTsKLQotCQl0cmlnZ2VyX2ZyX2JoKGNoYW4pOwotCi0JfWVsc2UgaWYgKGhhbmRsZV9JUFhXQU4oc2tiLT5kYXRhLGNoYW4tPm5hbWUsY2hhbi0+ZW5hYmxlX0lQWCwgY2hhbi0+bmV0d29ya19udW1iZXIpKXsKLQotCQkvL0ZJWE1FOiBGcmFtZSBSZWxheSBJUFggaXMgbm90IHN1cHBvcnRlZCwgWWV0ICEKLQkJLy9pZiAoY2hhbi0+ZW5hYmxlX0lQWCkgewotCQkvLwlmcl9zZW5kKGNhcmQsIGRsY2ksIDAsIHNrYi0+bGVuLHNrYi0+ZGF0YSk7Ci0JCS8vfQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCi0JfSBlbHNlIGlmIChpc19hcnAoc2tiLT5kYXRhKSkgewotCi0JCS8qIEFSUCBzdXBwb3J0IGVuYWJsZWQgTWFyIDE2IDIwMDAgCi0JCSAqIFByb2Nlc3MgaW5jb21pbmcgQVJQIHJlcGx5L3JlcXVlc3QsIHNldHVwCi0JCSAqIGR5bmFtaWMgcm91dGVzLiAqLyAKLQotCQlpZiAocHJvY2Vzc19BUlAoKGFycGhkcl8xNDkwX3QgKilza2ItPmRhdGEsIGNhcmQsIGRldikpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpeyAgCi0JCQkJcHJpbnRrIChLRVJOX0lORk8gCi0JCQkJICAgIiVzOiBFcnJvciBwcm9jZXNzaW5nIEFSUCBQYWNrZXQuXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JCX0KLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQotCX0gZWxzZSBpZiAoc2tiLT5kYXRhWzBdICE9IDB4MDMpIHsKLQotCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7IAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vbiBJRVRGIHBhY2tldCBkaXNjYXJkZWQuXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCi0JfSBlbHNlIHsKLQotCQlsZW5faW5jbF9oZHIgPSBza2ItPmxlbjsKLQkJLyogRGVjYXBzdWxhdGUgcGFja2V0IGFuZCBwYXNzIGl0IHVwIHRoZQotCQkgICBwcm90b2NvbCBzdGFjayAqLwotCQlza2ItPmRldiA9IGRldjsKLQkJCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEJSSURHRSB8fCBjaGFuLT5jb21tb24udXNlZGJ5ID09IEJSSURHRV9OT0RFKXsKLQkJCi0JCQkvKiBNYWtlIHN1cmUgaXQncyBhbiBFdGhlcm5ldCBmcmFtZSwgb3RoZXJ3aXNlIGRyb3AgaXQgKi8KLQkJCWlmICghbWVtY21wKHNrYi0+ZGF0YSwgIlx4MDNceDAwXHg4MFx4MDBceDgwXHhDMlx4MDBceDA3IiwgOCkpIHsKLQkJCQlza2JfcHVsbChza2IsIDgpOwotCQkJCXNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7Ci0JCQl9ZWxzZXsKLQkJCQkrK2NoYW4tPmRydnN0YXRzX3J4X2ludHIucnhfaW50cl9iZnJfbm90X3Bhc3NlZF90b19zdGFjazsKLQkJCQkrK2NoYW4tPmlmc3RhdHMucnhfZXJyb3JzOwotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Vycm9yczsKLQkJCQlnb3RvIHJ4X2RvbmU7Ci0JCQl9Ci0JCX1lbHNlewotCQkKLQkJCS8qIHJlbW92ZSBoYXJkd2FyZSBoZWFkZXIgKi8KLQkJCWJ1ZiA9IHNrYl9wdWxsKHNrYiwgMSk7IAotCQkJCi0JCQlpZiAoIXdhbnJvdXRlcl90eXBlX3RyYW5zKHNrYiwgZGV2KSkgewotCQkJCQotCQkJCS8qIGNhbid0IGRlY2Fwc3VsYXRlIHBhY2tldCAqLwotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQkJCQkrK2NoYW4tPmRydnN0YXRzX3J4X2ludHIucnhfaW50cl9iZnJfbm90X3Bhc3NlZF90b19zdGFjazsKLQkJCQkrK2NoYW4tPmlmc3RhdHMucnhfZXJyb3JzOwotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Vycm9yczsKLQkJCQlnb3RvIHJ4X2RvbmU7CQotCQkJfQotCQkJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotCQl9IAotCQkKLQotCQkvKiBTZW5kIGEgcGFja2V0IHVwIHRoZSBJUCBzdGFjayAqLwotCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCW5ldGlmX3J4KHNrYik7Ci0JCSsrY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7Ci0JCSsrY2hhbi0+aWZzdGF0cy5yeF9wYWNrZXRzOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9wYWNrZXRzOwotCi0JCWNoYW4tPmlmc3RhdHMucnhfYnl0ZXMgKz0gbGVuX2luY2xfaGRyOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfYnl0ZXMgKz0gbGVuX2luY2xfaGRyOwotCX0KLQotcnhfZG9uZToKLQotICAgICAgIAkvKiBSZWxlYXNlIGJ1ZmZlciBlbGVtZW50IGFuZCBjYWxjdWxhdGUgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9uZSAqLyAKLSAgICAgICAJZnJidWYtPmZsYWcgPSAwOwotCWNhcmQtPnJ4bWIgPSArK2ZyYnVmOwotCWlmICgodm9pZCopZnJidWYgPiBjYXJkLT51LmYucnhtYl9sYXN0KQotCQljYXJkLT5yeG1iID0gY2FyZC0+dS5mLnJ4bWJfYmFzZTsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHhfaW50cjoJVHJhbnNtaXQgaW50ZXJydXB0IGhhbmRsZXIuCi0gKgotICogUmF0aW9uYWxlOgotICogICAgICBJZiB0aGUgYm9hcmQgaXMgYnVzeSB0cmFuc21pdHRpbmcsIGlmX3NlbmQoKSB3aWxsCi0gKiAgICAgIGJ1ZmZlcnMgYSBzaW5nbGUgcGFja2V0IGFuZCB0dXJuIG9uCi0gKiAgICAgIHRoZSB0eCBpbnRlcnJ1cHQuIFR4IGludGVycnVwdCB3aWxsIGJlIGNhbGxlZAotICogICAgICBieSB0aGUgYm9hcmQsIG9uY2UgdGhlIGZpcm13YXJlIGNhbiBzZW5kIG1vcmUKLSAqICAgICAgZGF0YS4gVGh1cywgbm8gcG9sbGluZyBpcyByZXF1aXJlZC4JIAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVHggaW50ZXJydXB0IGlzIGNhbGxlZCBmb3IgZWFjaCAKLSAqICAgICAgY29uZmlndXJlZCBkbGNpIGNoYW5uZWwuIFRodXM6IAotICogCTEuIE9idGFpbiB0aGUgbmV0b3dyayBpbnRlcmZhY2UgYmFzZWQgb24gdGhlCi0gKiAgICAgICAgIGRsY2kgbnVtYmVyLgotICogICAgICAyLiBDaGVjayB0aGF0IG5ldHdvcmsgaW50ZXJmYWNlIGlzIHVwIGFuZAotICogICAgICAgICBwcm9wZXJseSBzZXR1cC4KLSAqIAkzLiBDaGVjayBmb3IgYSBidWZmZXJlZCBwYWNrZXQuCi0gKiAgICAgIDQuIFRyYW5zbWl0IHRoZSBwYWNrZXQuCi0gKgk1LiBJZiB3ZSBhcmUgaW4gV0FOUElQRSBtb2RlLCBtYXJrIHRoZSAKLSAqICAgICAgICAgTkVUX0JIIGhhbmRsZXIuIAotICogICAgICA2LiBJZiB3ZSBhcmUgaW4gQVBJIG1vZGUsIGtpY2sKLSAqICAgICAgICAgdGhlIEFGX1dBTlBJUEUgc29ja2V0IGZvciBtb3JlIGRhdGEuIAotICoJICAgCi0gKi8KLXN0YXRpYyB2b2lkIHR4X2ludHIoc2RsYV90ICpjYXJkKQotewotICAgICAgICBmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotICAgICAgICBmcl90eF9idWZfY3RsX3QqIGJjdGw7Ci0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0gICAgICAgIGZyX2NoYW5uZWxfdCogY2hhbjsKLQotICAgICAgICBpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCl7Ci0gICAgICAgICAgICAgICAgYmN0bCA9ICh2b2lkKikoZmxhZ3MtPnRzZV9vZmZzICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0gICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgIGJjdGwgPSAodm9pZCopKGZsYWdzLT50c2Vfb2ZmcyAtIEZSX01CX1ZFQ1RPUiArCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5ody5kcG1iYXNlKTsKLQl9Ci0KLSAgICAgICAgLyogRmluZCB0aGUgc3RydWN0dXJlIGFuZCBtYWtlIGl0IHVuYnVzeSAqLwotICAgICAgICBkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCwgZmxhZ3MtPmRsY2kpOwotCWlmIChkZXYgPT0gTlVMTCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIk5PIERFViBJTiBUWCBJbnRlcnJ1cHRcbiIpOwkKLQkJZ290byBlbmRfb2ZfdHhfaW50cjsKLQl9Ci0KLSAgICAgICAgaWYgKChjaGFuID0gZGV2LT5wcml2KSA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTk8gQ0hBTiBJTiBUWCBJbnRlcnJ1cHRcbiIpOwkKLQkJZ290byBlbmRfb2ZfdHhfaW50cjsKLQl9Ci0KLSAgICAgICAgaWYoIWNoYW4tPnRyYW5zbWl0X2xlbmd0aCB8fCAhY2hhbi0+ZGVsYXlfc2tiKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHR4IGludCBlcnJvciAtIHRyYW5zbWl0IGxlbmd0aCB6ZXJvXG4iLAotCQkJCWNhcmQtPndhbmRldi5uYW1lKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVuZF9vZl90eF9pbnRyOwotICAgICAgICB9Ci0KLQkvKiBJZiB0aGUgJ2lmX3NlbmQoKScgcHJvY2VkdXJlIGlzIGN1cnJlbnRseSBjaGVja2luZyB0aGUgJ3RidXN5JwotCSAgIHN0YXR1cywgdGhlbiB3ZSBjYW5ub3QgdHJhbnNtaXQuIEluc3RlYWQsIHdlIGNvbmZpZ3VyZSB0aGUgbWljcm9jb2RlCi0JICAgc28gYXMgdG8gcmUtaXNzdWUgdGhpcyB0cmFuc21pdCBpbnRlcnJ1cHQgYXQgYSBsYXRlciBzdGFnZS4gCi0JKi8KLQlpZiAodGVzdF9iaXQoU0VORF9UWElSUV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQotCQlmcl9kbGNpX2ludGVyZmFjZV90KiBkbGNpX2ludGVyZmFjZSA9IGNoYW4tPmRsY2lfaW50X2ludGVyZmFjZTsKLQkJYmN0bC0+ZmxhZyA9IDB4QTA7Ci0JCWRsY2lfaW50ZXJmYWNlLT5nZW5faW50ZXJydXB0IHw9IEZSX0lOVFJfVFhSRFk7Ci0JCXJldHVybjsKLQotIAl9ZWxzZXsKLSAgICAgICAgCWJjdGwtPmRsY2kgPSBmbGFncy0+ZGxjaTsKLQkgICAgICAgIGJjdGwtPmxlbmd0aCA9IGNoYW4tPnRyYW5zbWl0X2xlbmd0aCtjaGFuLT5mcl9oZWFkZXJfbGVuOwotICAgICAgICAJc2RsYV9wb2tlKCZjYXJkLT5odywgCi0JCSAgICAgICAgICBmcl9zZW5kX2hkcihjYXJkLGJjdGwtPmRsY2ksYmN0bC0+b2Zmc2V0KSwgCi0JCQkgIGNoYW4tPmRlbGF5X3NrYi0+ZGF0YSwKLSAJICAgICAgICAgICAgICAJICBjaGFuLT5kZWxheV9za2ItPmxlbik7Ci0JICAgICAgICBiY3RsLT5mbGFnID0gMHhDMDsKLQotCQkrK2NoYW4tPmlmc3RhdHMudHhfcGFja2V0czsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLQkJY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBjaGFuLT50cmFuc21pdF9sZW5ndGg7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9ieXRlcyArPSBjaGFuLT50cmFuc21pdF9sZW5ndGg7Ci0KLQkJLyogV2UgbXVzdCBmcmVlIGFuIHNrIGJ1ZmZlciwgd2hpY2ggd2UgdXNlZAotCQkgKiBmb3IgZGVsYXllZCB0cmFuc21pc3Npb247IE90aGVyd2lzZSwgdGhlIHNvY2sKLQkJICogd2lsbCBydW4gb3V0IG9mIG1lbW9yeSAqLwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KGNoYW4tPmRlbGF5X3NrYik7Ci0KLQkJY2hhbi0+ZGVsYXlfc2tiID0gTlVMTDsJCQkJCi0gICAgICAgIAljaGFuLT50cmFuc21pdF9sZW5ndGggPSAwOwotCi0JCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpewotCQkJLyogSWYgdXNpbmcgQVBJLCB0aGFuIHdha2V1cCBzb2NrZXQgQkggaGFuZGxlciAqLwotCQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJCXdha2V1cF9za19iaChkZXYpOwotCQkJfWVsc2V7Ci0JCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJfQotCQl9Ci0JfQotCi1lbmRfb2ZfdHhfaW50cjoKLQotIAkvKiBpZiBhbnkgb3RoZXIgaW50ZXJmYWNlcyBoYXZlIHRyYW5zbWl0IGludGVycnVwdHMgcGVuZGluZywgCi0JICogZG8gbm90IGRpc2FibGUgdGhlIGdsb2JhbCB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQlpZighKC0tIGNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcpKQotICAgICAgIAkgICAgICAgIGZsYWdzLT5pbWFzayAmPSB+RlJfSU5UUl9UWFJEWTsKLQotCi19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0aW1lcl9pbnRyOglUaW1lciBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCi0gKiBSYXRpb25hbGU6Ci0gKglBbGwgY29tbWFucyBtdXN0IGJlIGV4ZWN1dGVkIHdpdGhpbiB0aGUgdGltZXIKLSAqICAgICAgaW50ZXJydXB0IHNpbmNlIG5vIHR3byBjb21tYW5kcyBzaG91bGQgZXhlY3V0ZQotICogICAgICBhdCB0aGUgc2FtZSB0aW1lLgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhlIHRpbWVyIGludGVycnVwdCBpcyB1c2VkIHRvOgotICogICAgCTEuIFByb2Nlc3NpbmcgdWRwIGNhbGxzIGZyb20gJ2ZwaXBlbW9uJy4KLSAqICAgIAkyLiBQcm9jZXNzaW5nIHVwZGF0ZSBjYWxscyBmcm9tIC9wcm9jIGZpbGUgc3lzdGVtCi0gKiAgIAkzLiBSZWFkaW5nIGJvYXJkLWxldmVsIHN0YXRpc3RpY3MgZm9yIAotICogICAgICAgICB1cGRhdGluZyB0aGUgcHJvYyBmaWxlIHN5c3RlbS4KLSAqICAgIAk0LiBTZW5kaW5nIGludmVyc2UgQVJQIHJlcXVlc3QgcGFja2V0cy4KLSAqCTUuIENvbmZpZ3VyZSBhIGRsY2kvY2hhbm5lbC4KLSAqCTYuIFVuY29uZmlndXJlIGEgZGxjaS9jaGFubmVsLiAoTm9kZSBvbmx5KQotICovCi0KLXN0YXRpYyB2b2lkIHRpbWVyX2ludHIoc2RsYV90ICpjYXJkKQotewotCWZyNTA4X2ZsYWdzX3QqIGZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkvKiBVRFAgRGVidWdpbmc6IGZwaXBlbW9uIGNhbGwgKi8KLSAgICAgICAgaWYgKGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VRFApIHsKLQkJaWYoY2FyZC0+dS5mLnVkcF90eXBlID09IFVEUF9GUElQRV9UWVBFKSB7Ci0gICAgICAgICAgICAgICAgICAgIAlpZihwcm9jZXNzX3VkcF9tZ210X3BrdChjYXJkKSkgewotCQkgICAgICAgICAgICAgICAgY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9Ci0JCQkJCX5UTVJfSU5UX0VOQUJMRURfVURQOwotCQkJfQotCQl9Ci0gICAgICAgIH0KLQotCS8qIC9wcm9jIHVwZGF0ZSBjYWxsIDogdHJpZ2dlcmVkIGZyb20gdXBkYXRlKCkgKi8KLQlpZiAoY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VQREFURSkgewotCQlmcl9nZXRfZXJyX3N0YXRzKGNhcmQpOwotCQlmcl9nZXRfc3RhdHMoY2FyZCk7Ci0JCWNhcmQtPnUuZi51cGRhdGVfY29tbXNfc3RhdHMgPSAwOwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JfQotCi0JLyogVXBkYXRlIHRoZSBjaGFubmVsIHN0YXRlIGNhbGwuICBUaGlzIGlzIGNhbGwgaXMKLSAgICAgICAgICogdHJpZ2dlcmVkIGJ5IGlmX3NlbmQoKSBmdW5jdGlvbiAqLwotCWlmIChjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVVBEQVRFX1NUQVRFKXsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQkJaWYgKGNhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEKXsKLQkJCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCQkJICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKXsKLQkJCQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7CQotCQkJCWlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCQkJCXVwZGF0ZV9jaGFuX3N0YXRlKGRldik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VQREFURV9TVEFURTsKLQl9Ci0KLQkvKiBjb25maWd1cmUgYSBkbGNpL2NoYW5uZWwgKi8KLQlpZiAoY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRyl7Ci0JCWNvbmZpZ19mcihjYXJkKTsKLQkJY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCX0KLQotCS8qIHVuY29uZmlndXJlIGEgZGxjaS9jaGFubmVsICovCi0JaWYgKGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRyl7Ci0JCXVuY29uZmlnX2ZyKGNhcmQpOwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRzsKLQl9Ci0KLQkKLQkvKiBUcmFuc21pdCBBUlAgcGFja2V0cyAqLwotCWlmIChjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQVJQKXsKLQkJaW50IGk9MDsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQotCQlpZiAoY2FyZC0+dS5mLmFycF9kZXYgPT0gTlVMTCkKLQkJCWNhcmQtPnUuZi5hcnBfZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQotCQlkZXYgPSBjYXJkLT51LmYuYXJwX2RldjsKLQotCQlmb3IgKDs7KXsgCi0KLQkJCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQotCQkJLyogSWYgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IGRvd24gY2FuY2VsIHNlbmRpbmcgSW4tQVJQcyAqLwotCQkJaWYgKCEoZGV2LT5mbGFncyZJRkZfVVApKXsKLQkJCQljbGVhcl9iaXQoMCwmY2hhbi0+aW5hcnBfcmVhZHkpOwkKLQkJCX0KLQotCQkJaWYgKHRlc3RfYml0KDAsJmNoYW4tPmluYXJwX3JlYWR5KSl7Ci0KLQkJCQlpZiAoY2hlY2tfdHhfc3RhdHVzKGNhcmQsZGV2KSl7Ci0JCQkJCXNldF9iaXQoQVJQX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWlmICghc2VuZF9pbmFycF9yZXF1ZXN0KGNhcmQsZGV2KSl7Ci0JCQkJCXRyaWdnZXJfZnJfYXJwKGRldik7Ci0JCQkJCWNoYW4tPmluYXJwX3RpY2sgPSBqaWZmaWVzOwotCQkJCX0KLQotCQkJCWNsZWFyX2JpdCgwLCZjaGFuLT5pbmFycF9yZWFkeSk7Ci0JCQkJZGV2ID0gbW92ZV9kZXZfdG9fbmV4dChjYXJkLGRldik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQotCQkJaWYgKCsraSA9PSBjYXJkLT53YW5kZXYubmV3X2lmX2NudCl7Ci0JCQkJY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfQVJQOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWNhcmQtPnUuZi5hcnBfZGV2ID0gZGV2OwotCX0KLQotICAgICAgICBpZighY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkKQotICAgICAgICAgICAgICAgIGZsYWdzLT5pbWFzayAmPSB+RlJfSU5UUl9USU1FUjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHNwdXJfaW50cjoJU3B1cmlvdXMgaW50ZXJydXB0IGhhbmRsZXIuCi0gKiAKLSAqIERlc2NyaXB0aW9uOgotICogIAlXZSBkb24ndCBrbm93IHRoaXMgaW50ZXJydXB0LgotICogICAgICBQcmludCBhIHdhcm5pbmcuCi0gKi8KLQotc3RhdGljIHZvaWQgc3B1cl9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0JaWYgKG5ldF9yYXRlbGltaXQoKSl7IAotCQlwcmludGsoS0VSTl9JTkZPICIlczogc3B1cmlvdXMgaW50ZXJydXB0IVxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JfQotfQotCi0KLS8vRklYTUU6IEZpeCB0aGUgSVBYIGluIG5leHQgdmVyc2lvbgotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICBSZXR1cm4gMCBmb3Igbm9uLUlQWFdBTiBwYWNrZXQKLSAqICAgICAgICAgMSBmb3IgSVBYV0FOIHBhY2tldCBvciBJUFggaXMgbm90IGVuYWJsZWQhCi0gKiAgRklYTUU6IFVzZSBhIElQWCBzdHJ1Y3R1cmUgaGVyZSBub3Qgb2Zmc2V0cwotICovCi1zdGF0aWMgaW50IGhhbmRsZV9JUFhXQU4odW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwgCi0JCQkgY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBlbmFibGVfSVBYLCAKLQkJCSB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyKQotewotCWludCBpOwotCi0JaWYoIHNlbmRwYWNrZXRbMV0gPT0gMHgwMCAmJiBzZW5kcGFja2V0WzJdID09IDB4ODAgJiYKLQkgICAgc2VuZHBhY2tldFs2XSA9PSAweDgxICYmIHNlbmRwYWNrZXRbN10gPT0gMHgzNykgeyAKLQotCQkvKiBJdCdzIGFuIElQWCBwYWNrZXQgKi8KLQkJaWYgKCFlbmFibGVfSVBYKXsKLQkJCS8qIFJldHVybiAxIHNvIHdlIGRvbid0IHBhc3MgaXQgdXAgdGhlIHN0YWNrLiAqLwotCQkJLy9GSVhNRTogVGFrZSB0aGlzIG91dCB3aGVuIElQWCBpcyBmaXhlZAotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7IAotCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCSIlczogV0FSTklORzogVW5zdXBwb3J0ZWQgSVBYIHBhY2tldCByZWNlaXZlZCBhbmQgZHJvcHBlZFxuIiwKLQkJCQkJZGV2bmFtZSk7Ci0JCQl9Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEl0J3Mgbm90IElQWCBzbyByZXR1cm4gYW5kIHBhc3MgaXQgdXAgdGhlIHN0YWNrLiAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiggc2VuZHBhY2tldFsyNF0gPT0gMHg5MCAmJiBzZW5kcGFja2V0WzI1XSA9PSAweDA0KXsKLQkJLyogSXQncyBJUFhXQU4gKi8KLQotCQlpZiggc2VuZHBhY2tldFsxMF0gPT0gMHgwMiAmJiBzZW5kcGFja2V0WzQyXSA9PSAweDAwKXsKLQotCQkJLyogSXQncyBhIHRpbWVyIHJlcXVlc3QgcGFja2V0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgSVBYV0FOIFRpbWVyIFJlcXVlc3QgcGFja2V0XG4iLAotCQkJCQlkZXZuYW1lKTsKLQotCQkJLyogR28gdGhyb3VnaCB0aGUgcm91dGluZyBvcHRpb25zIGFuZCBhbnN3ZXIgbm8gdG8gZXZlcnkKLQkJCSAqIG9wdGlvbiBleGNlcHQgVW5udW1iZXJlZCBSSVAvU0FQCi0JCQkgKi8KLQkJCWZvcihpID0gNDk7IHNlbmRwYWNrZXRbaV0gPT0gMHgwMDsgaSArPSA1KXsKLQkJCQkvKiAweDAyIGlzIHRoZSBvcHRpb24gZm9yIFVubnVtYmVyZWQgUklQL1NBUCAqLwotCQkJCWlmKCBzZW5kcGFja2V0W2kgKyA0XSAhPSAweDAyKXsKLQkJCQkJc2VuZHBhY2tldFtpICsgMV0gPSAwOwotCQkJCX0KLQkJCX0KLQotCQkJLyogU2tpcCBvdmVyIHRoZSBleHRlbmRlZCBOb2RlIElEIG9wdGlvbiAqLwotCQkJaWYoIHNlbmRwYWNrZXRbaV0gPT0gMHgwNCApewotCQkJCWkgKz0gODsKLQkJCX0KLQotCQkJLyogV2UgYWxzbyB3YW50IHRvIHR1cm4gb2ZmIGFsbCBoZWFkZXIgY29tcHJlc3Npb24gb3B0LgotCQkJICovCi0JCQlmb3IoOyBzZW5kcGFja2V0W2ldID09IDB4ODAgOyl7Ci0JCQkJc2VuZHBhY2tldFtpICsgMV0gPSAwOwotCQkJCWkgKz0gKHNlbmRwYWNrZXRbaSArIDJdIDw8IDgpICsgKHNlbmRwYWNrZXRbaSArIDNdKSArIDQ7Ci0JCQl9Ci0KLQkJCS8qIFNldCB0aGUgcGFja2V0IHR5cGUgdG8gdGltZXIgcmVzcG9uc2UgKi8KLQkJCXNlbmRwYWNrZXRbNDJdID0gMHgwMTsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNlbmRpbmcgSVBYV0FOIFRpbWVyIFJlc3BvbnNlXG4iLAotCQkJCQlkZXZuYW1lKTsKLQotCQl9IGVsc2UgaWYoIHNlbmRwYWNrZXRbNDJdID09IDB4MDIgKXsKLQotCQkJLyogVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiByZXF1ZXN0IHBhY2tldCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFJlY2VpdmVkIElQWFdBTiBJbmZvcm1hdGlvbiBSZXF1ZXN0IHBhY2tldFxuIiwKLQkJCQkJCWRldm5hbWUpOwotCi0JCQkvKiBTZXQgdGhlIHBhY2tldCB0eXBlIHRvIGluZm9ybWF0aW9uIHJlc3BvbnNlICovCi0JCQlzZW5kcGFja2V0WzQyXSA9IDB4MDM7Ci0KLQkJCS8qIFNldCB0aGUgcm91dGVyIG5hbWUgKi8KLQkJCXNlbmRwYWNrZXRbNTldID0gJ0YnOwotCQkJc2VuZHBhY2tldFs2MF0gPSAnUCc7Ci0JCQlzZW5kcGFja2V0WzYxXSA9ICdJJzsKLQkJCXNlbmRwYWNrZXRbNjJdID0gJ1AnOwotCQkJc2VuZHBhY2tldFs2M10gPSAnRSc7Ci0JCQlzZW5kcGFja2V0WzY0XSA9ICctJzsKLQkJCXNlbmRwYWNrZXRbNjVdID0gQ1ZIZXhUb0FzY2lpKG5ldHdvcmtfbnVtYmVyID4+IDI4KTsKLQkJCXNlbmRwYWNrZXRbNjZdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MEYwMDAwMDApPj4gMjQpOwotCQkJc2VuZHBhY2tldFs2N10gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMEYwMDAwMCk+PiAyMCk7Ci0JCQlzZW5kcGFja2V0WzY4XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMEYwMDAwKT4+IDE2KTsKLQkJCXNlbmRwYWNrZXRbNjldID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEYwMDApPj4gMTIpOwotCQkJc2VuZHBhY2tldFs3MF0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMEYwMCk+PiA4KTsKLQkJCXNlbmRwYWNrZXRbNzFdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRjApPj4gNCk7Ci0JCQlzZW5kcGFja2V0WzcyXSA9IENWSGV4VG9Bc2NpaShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwMEYpOwotCQkJZm9yKGkgPSA3MzsgaSA8IDEwNzsgaSs9IDEpCi0JCQl7Ci0JCQkJc2VuZHBhY2tldFtpXSA9IDA7Ci0JCQl9Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZW5kaW5nIElQWFdBTiBJbmZvcm1hdGlvbiBSZXNwb25zZSBwYWNrZXRcbiIsCi0JCQkJCWRldm5hbWUpOwotCQl9IGVsc2UgewotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5rbm93biBJUFhXQU4gcGFja2V0IVxuIixkZXZuYW1lKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogU2V0IHRoZSBXTm9kZUlEIHRvIG91ciBuZXR3b3JrIGFkZHJlc3MgKi8KLQkJc2VuZHBhY2tldFs0M10gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQlzZW5kcGFja2V0WzQ0XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCXNlbmRwYWNrZXRbNDVdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEZGMDApID4+IDgpOwotCQlzZW5kcGFja2V0WzQ2XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRkYpOwotCi0JCXJldHVybiAxOwotCX0KLQotCS8qIElmIHdlIGdldCBoZXJlLCBpdCdzIGFuIElQWC1kYXRhIHBhY2tldCBzbyBpdCdsbCBnZXQgcGFzc2VkIHVwIHRoZSAKLQkgKiBzdGFjay4KLQkgKiBzd2l0Y2ggdGhlIG5ldHdvcmsgbnVtYmVycyAKLQkgKi8KLQlzd2l0Y2hfbmV0X251bWJlcnMoc2VuZHBhY2tldCwgbmV0d29ya19udW1iZXIgLDEpOwotCXJldHVybiAwOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBwcm9jZXNzX3JvdXRlCi0gKiAKLSAqIFJhdGlvbmFsZToKLSAqCUlmIHRoZSBpbnRlcmZhY2UgZ29lcyBkb3duLCBvciB3ZSByZWNlaXZlIGFuIEFSUCByZXF1ZXN0LAotICogICAgICB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXAgYWRkcmVzc2VzLgotICogCVRoaXMgY2Fubm90IGJlIGRvbmUgd2l0aGluIHRoZSBpbnRlcnJ1cHQuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKgotICogCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgYXMgYSBwb2xsaW5nIHJvdXRpbmUgdG8gZHluYW1pY2FsbHkgCi0gKglhZGQvZGVsZXRlIHJvdXRlcyBuZWdvdGlhdGVkIGJ5IGludmVyc2UgQVJQLiAgSXQgaXMgaW4gdGhpcyAKLSAqICAgIAkidGFzayIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHJvdXRlcyB0byBiZSBhZGRlZCB3aGlsZSBpbiAKLSAqICAgICAgaW50ZXJydXB0IGNvbnRleHQuCi0gKgotICogVXNhZ2U6Ci0gKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBmcl9wb2xsKCkgcG9sbGluZyBmdW50aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIHByb2Nlc3Nfcm91dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQotCXN0cnVjdCBpZnJlcSBpZl9pbmZvOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqaWZfZGF0YTsKLQltbV9zZWdtZW50X3QgZnMgPSBnZXRfZnMoKTsKLQl1MzIgaXBfdG1wOwotCWludCBlcnI7Ci0KLQotCXN3aXRjaChjaGFuLT5yb3V0ZV9mbGFnKXsKLQotCWNhc2UgQUREX1JPVVRFOgotCQkJCQotCQkvKiBTZXQgcmVtb3RlIGFkZHJlc3NlcyAqLwotCQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0JCXN0cmNweShpZl9pbmZvLmlmcl9uYW1lLCBkZXYtPm5hbWUpOwotCi0JCXNldF9mcyhnZXRfZHMoKSk7ICAgICAvKiBnZXQgdXNlciBzcGFjZSBibG9jayAqLyAKLQkJCi0JCWlmX2RhdGEgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmX2luZm8uaWZyX2RzdGFkZHI7Ci0JCWlmX2RhdGEtPnNpbl9hZGRyLnNfYWRkciA9IGNoYW4tPmlwX3JlbW90ZTsKLQkJaWZfZGF0YS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZEU1RBRERSLCAmaWZfaW5mbyApOwotCi0JCXNldF9mcyhmcyk7ICAgICAgICAgICAvKiByZXN0b3JlIG9sZCBibG9jayAqLwotCi0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBSb3V0ZSBBZGQgZmFpbGVkLiAgRXJyb3I6ICVkXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSxlcnIpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFkZHJlc3M6ICV1LiV1LiV1LiV1XG4iLAotCQkJCWNoYW4tPm5hbWUsIE5JUFFVQUQoY2hhbi0+aXBfcmVtb3RlKSk7Ci0KLQkJfWVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJvdXRlIEFkZGVkIFN1Y2Nlc3NmdWxseTogJXUuJXUuJXUuJXVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxOSVBRVUFEKGNoYW4tPmlwX3JlbW90ZSkpOwotCQkJY2hhbi0+cm91dGVfZmxhZyA9IFJPVVRFX0FEREVEOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBSRU1PVkVfUk9VVEU6Ci0KLQkJLyogU2V0IHJlbW90ZSBhZGRyZXNzZXMgKi8KLQkJbWVtc2V0KCZpZl9pbmZvLCAwLCBzaXplb2YoaWZfaW5mbykpOwotCQlzdHJjcHkoaWZfaW5mby5pZnJfbmFtZSwgZGV2LT5uYW1lKTsKLQotCQlpcF90bXAgPSBnZXRfaXBfYWRkcmVzcyhkZXYsV0FOX1BPSU5UT1BPSU5UX0lQKTsJCi0KLQkJc2V0X2ZzKGdldF9kcygpKTsgICAgIC8qIGdldCB1c2VyIHNwYWNlIGJsb2NrICovIAotCQkKLQkJaWZfZGF0YSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJaWZfZGF0YS0+c2luX2FkZHIuc19hZGRyID0gMDsKLQkJaWZfZGF0YS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZEU1RBRERSLCAmaWZfaW5mbyApOwotCi0JCXNldF9mcyhmcyk7ICAgIAotCQkKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IERlbGV0aW5nIG9mIHJvdXRlIGZhaWxlZC4gIEVycm9yOiAlZFxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUsZXJyKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBZGRyZXNzOiAldS4ldS4ldS4ldVxuIiwKLQkJCQlkZXYtPm5hbWUsTklQUVVBRChjaGFuLT5pcF9yZW1vdGUpICk7Ci0KLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSb3V0ZSBSZW1vdmVkIFN1Y2Vzc2Z1bHk6ICV1LiV1LiV1LiV1XG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLE5JUFFVQUQoaXBfdG1wKSk7Ci0JCQljaGFuLT5yb3V0ZV9mbGFnID0gTk9fUk9VVEU7Ci0JCX0KLQkJYnJlYWs7Ci0KLQl9IC8qIENhc2UgU3RhdGVtZW50ICovCi0KLX0KLQotCi0KLS8qKioqKiogRnJhbWUgUmVsYXkgRmlybXdhcmUtU3BlY2lmaWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgZmlybXdhcmUgY29kZSB2ZXJzaW9uLgotICogbyBmaWxsIHN0cmluZyBzdHIgd2l0aCBmaXJtd2FyZSB2ZXJzaW9uIGluZm8uIAotICovCi1zdGF0aWMgaW50IGZyX3JlYWRfdmVyc2lvbiAoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX0NPREVfVkVSU0lPTjsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlpZiAoIWVyciAmJiBzdHIpIHsKLQkJaW50IGxlbiA9IG1ib3gtPmNtZC5sZW5ndGg7Ci0JCW1lbWNweShzdHIsIG1ib3gtPmRhdGEsIGxlbik7Ci0JICAgICAgICBzdHJbbGVuXSA9ICdcMCc7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IGdsb2JhbCBjb25maWd1cmF0aW9uLgotICovCi1zdGF0aWMgaW50IGZyX2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCBmcl9jb25mX3QgKmNvbmYpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBkbGNpX251bSA9IGNhcmQtPnUuZi5kbGNpX251bTsKLQlpbnQgZXJyLCBpOwotCi0JZG8KLQl7Ci0JCW1lbWNweShtYm94LT5kYXRhLCBjb25mLCBzaXplb2YoZnJfY29uZl90KSk7Ci0KLQkJaWYgKGRsY2lfbnVtKSBmb3IgKGkgPSAwOyBpIDwgZGxjaV9udW07ICsraSkKLQkJCSgoZnJfY29uZl90KiltYm94LT5kYXRhKS0+ZGxjaVtpXSA9IAotCQkJCQljYXJkLT51LmYubm9kZV9kbGNpW2ldOyAKLQkJCi0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX0NPTkZJRzsKLQkJbWJveC0+Y21kLmxlbmd0aCA9Ci0JCQlzaXplb2YoZnJfY29uZl90KSArIGRsY2lfbnVtICogc2l6ZW9mKHNob3J0KTsKLQotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCi0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0KLQkvKk5DIE9jdCAxMiAyMDAwICovCi0JaWYgKGVyciAhPSBDTURfT0spewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGcmFtZSBSZWxheSBDb25maWd1cmF0aW9uIEZhaWxlZDogcmM9MHgleFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGVycik7Ci0JfQotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IERMQ0kgY29uZmlndXJhdGlvbi4KLSAqLwotc3RhdGljIGludCBmcl9kbGNpX2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCBmcl9kbGNfY29uZl90ICpjb25mLCB1bnNpZ25lZCBkbGNpKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbWNweShtYm94LT5kYXRhLCBjb25mLCBzaXplb2YoZnJfZGxjX2NvbmZfdCkpOwotCQltYm94LT5jbWQuZGxjaSA9ICh1bnNpZ25lZCBzaG9ydCkgZGxjaTsgCi0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX0NPTkZJRzsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IHNpemVvZihmcl9kbGNfY29uZl90KTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgaW50ZXJydXB0IG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZnJfc2V0X2ludHJfbW9kZSAoc2RsYV90KiBjYXJkLCB1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCBtdHUsCi0JdW5zaWduZWQgc2hvcnQgdGltZW91dCkKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWZyNTA4X2ludHJfY3RsX3QqIGljdGwgPSAodm9pZCopbWJveC0+ZGF0YTsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KGljdGwsIDAsIHNpemVvZihmcjUwOF9pbnRyX2N0bF90KSk7Ci0JCWljdGwtPm1vZGUgICA9IG1vZGU7Ci0JCWljdGwtPnR4X2xlbiA9IG10dTsKLQkJaWN0bC0+aXJxICAgID0gY2FyZC0+aHcuaXJxOwotCi0JCS8qIGluZGljYXRlIHRpbWVvdXQgb24gdGltZXIgKi8KLQkJaWYgKG1vZGUgJiAweDIwKSBpY3RsLT50aW1lb3V0ID0gdGltZW91dDsgCi0KLQkJbWJveC0+Y21kLmxlbmd0aCA9IHNpemVvZihmcjUwOF9pbnRyX2N0bF90KTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfSU5UUl9NT0RFOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEVuYWJsZSBjb21tdW5pY2F0aW9ucy4KLSAqLwotc3RhdGljIGludCBmcl9jb21tX2VuYWJsZSAoc2RsYV90KiBjYXJkKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfQ09NTV9FTkFCTEU7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBmcl9jb21tX2Rpc2FibGUgCi0gKgotICogV2FybmluZzogVGhpcyBmdW5jdGluIGlzIGNhbGxlZCBieSB0aGUgc2h1dGRvd24oKSBwcm9jZWR1cmUuIEl0IGlzIHZvaWQKLSAqICAgICAgICAgIHNpbmNlIGRldi0+cHJpdiBhcmUgaGFzIGFscmVhZHkgYmVlbiBkZWFsbG9jYXRlZCBhbmQgbm8KLSAqICAgICAgICAgIGVycm9yIGNoZWNraW5nIGlzIHBvc3NpYmxlIHVzaW5nIGZyX2V2ZW50KCkgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGZyX2NvbW1fZGlzYWJsZSAoc2RsYV90KiBjYXJkKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8gewotCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX01PREVNX1NUQVRVUzsKLQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQltYm94LT5kYXRhWzBdID0gMDsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0pOwotCQotCXJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQkKLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9DT01NX0RJU0FCTEU7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0pOwotCi0JcmV0dXJuOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZXQgY29tbXVuaWNhdGlvbnMgZXJyb3Igc3RhdGlzdGljcy4gCi0gKi8KLXN0YXRpYyBpbnQgZnJfZ2V0X2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX0VSUk9SX1NUQVRTOwotCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJbWJveC0+Y21kLmRsY2kgPSAwOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0KLQlpZiAoIWVycikgewotCQlmcl9jb21tX3N0YXRfdCogc3RhdHMgPSAodm9pZCopbWJveC0+ZGF0YTsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X292ZXJfZXJyb3JzICAgID0gc3RhdHMtPnJ4X292ZXJydW5zOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfY3JjX2Vycm9ycyAgICAgPSBzdGF0cy0+cnhfYmFkX2NyYzsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgID0gc3RhdHMtPnJ4X2Fib3J0czsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgID0gc3RhdHMtPnJ4X3Rvb19sb25nOwotCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSBzdGF0cy0+dHhfYWJvcnRzOwotCQotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IHN0YXRpc3RpY3MuIAotICovCi1zdGF0aWMgaW50IGZyX2dldF9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX1NUQVRJU1RJQ1M7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQltYm94LT5jbWQuZGxjaSA9IDA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCWlmICghZXJyKSB7Ci0JCWZyX2xpbmtfc3RhdF90KiBzdGF0cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZnJhbWVfZXJyb3JzID0gc3RhdHMtPnJ4X2JhZF9mb3JtYXQ7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkID0KLQkJCXN0YXRzLT5yeF9kcm9wcGVkICsgc3RhdHMtPnJ4X2Ryb3BwZWQyOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQWRkIERMQ0kocykgKEFjY2VzcyBOb2RlIG9ubHkhKS4KLSAqIFRoaXMgcm91dGluZSB3aWxsIHBlcmZvcm0gdGhlIEFERF9ETENJcyBjb21tYW5kIGZvciB0aGUgc3BlY2lmaWVkIERMQ0kuCi0gKi8KLXN0YXRpYyBpbnQgZnJfYWRkX2RsY2kgKHNkbGFfdCogY2FyZCwgaW50IGRsY2kpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJdW5zaWduZWQgc2hvcnQqIGRsY2lfbGlzdCA9ICh2b2lkKiltYm94LT5kYXRhOwotCi0JCW1ib3gtPmNtZC5sZW5ndGggID0gc2l6ZW9mKHNob3J0KTsKLQkJZGxjaV9saXN0WzBdID0gZGxjaTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9BRERfRExDSTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCi0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBBY3RpdmF0ZSBETENJKHMpIChBY2Nlc3MgTm9kZSBvbmx5ISkuIAotICogVGhpcyByb3V0aW5lIHdpbGwgcGVyZm9ybSB0aGUgQUNUSVZBVEVfRExDSXMgY29tbWFuZCB3aXRoIGEgRExDSSBudW1iZXIuIAotICovCi1zdGF0aWMgaW50IGZyX2FjdGl2YXRlX2RsY2kgKHNkbGFfdCogY2FyZCwgaW50IGRsY2kpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJdW5zaWduZWQgc2hvcnQqIGRsY2lfbGlzdCA9ICh2b2lkKiltYm94LT5kYXRhOwotCi0JCW1ib3gtPmNtZC5sZW5ndGggID0gc2l6ZW9mKHNob3J0KTsKLQkJZGxjaV9saXN0WzBdID0gZGxjaTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9BQ1RJVkFURV9ETENJOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERlbGV0ZSBETENJKHMpIChBY2Nlc3MgTm9kZSBvbmx5ISkuIAotICogVGhpcyByb3V0aW5lIHdpbGwgcGVyZm9ybSB0aGUgREVMRVRFX0RMQ0lzIGNvbW1hbmQgd2l0aCBhIERMQ0kgbnVtYmVyLiAKLSAqLwotc3RhdGljIGludCBmcl9kZWxldGVfZGxjaSAoc2RsYV90KiBjYXJkLCBpbnQgZGxjaSkKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQl1bnNpZ25lZCBzaG9ydCogZGxjaV9saXN0ID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0KLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBzaXplb2Yoc2hvcnQpOwotCQlkbGNpX2xpc3RbMF0gPSBkbGNpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX0RFTEVURV9ETENJOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJc3N1ZSBpbi1jaGFubmVsIHNpZ25hbGxpbmcgZnJhbWUuIAotICovCi1zdGF0aWMgaW50IGZyX2lzc3VlX2lzZiAoc2RsYV90KiBjYXJkLCBpbnQgaXNmKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1ib3gtPmRhdGFbMF0gPSBpc2Y7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gMTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9JU1NVRV9JU19GUkFNRTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBmcl9zZW5kX2hkciAoc2RsYV90KmNhcmQsIGludCBkbGNpLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCxkbGNpKTsJCi0JZnJfY2hhbm5lbF90ICpjaGFuOwotCi0JaWYgKCFkZXYgfHwgIShjaGFuPWRldi0+cHJpdikpCi0JCXJldHVybiBvZmZzZXQ7Ci0JCi0JaWYgKGNoYW4tPmZyX2hlYWRlcl9sZW4pewotCQlzZGxhX3Bva2UoJmNhcmQtPmh3LCBvZmZzZXQsIGNoYW4tPmZyX2hlYWRlciwgY2hhbi0+ZnJfaGVhZGVyX2xlbik7Ci0JfQotCQotCXJldHVybiBvZmZzZXQrY2hhbi0+ZnJfaGVhZGVyX2xlbjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIGEgZnJhbWUgb24gYSBzZWxlY3RlZCBETENJLiAgCi0gKi8KLXN0YXRpYyBpbnQgZnJfc2VuZF9kYXRhX2hlYWRlciAoc2RsYV90KiBjYXJkLCBpbnQgZGxjaSwgdW5zaWduZWQgY2hhciBhdHRyLCBpbnQgbGVuLAotCXZvaWQgKmJ1ZiwgdW5zaWduZWQgY2hhciBoZHJfbGVuKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3ggKyAweDgwMDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmRsY2kgICAgPSBkbGNpOwotCQltYm94LT5jbWQuYXR0ciAgICA9IGF0dHI7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gbGVuK2hkcl9sZW47Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfV1JJVEU7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCWlmICghZXJyKSB7Ci0JCWZyX3R4X2J1Zl9jdGxfdCogZnJidWY7Ci0gCi0gICAgICAgICAgICAgICAJaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpCi0JCQlmcmJ1ZiA9ICh2b2lkKikoKih1bnNpZ25lZCBsb25nKiltYm94LT5kYXRhICsKLSAgICAgICAgICAgICAgICAgICAgICAgIAljYXJkLT5ody5kcG1iYXNlKTsKLQkJZWxzZQotCQkJZnJidWYgPSAodm9pZCopKCoodW5zaWduZWQgbG9uZyopbWJveC0+ZGF0YSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0KLQkJc2RsYV9wb2tlKCZjYXJkLT5odywgZnJfc2VuZF9oZHIoY2FyZCxkbGNpLGZyYnVmLT5vZmZzZXQpLCBidWYsIGxlbik7Ci0JCWZyYnVmLT5mbGFnID0gMHgwMTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGZyX3NlbmQgKHNkbGFfdCogY2FyZCwgaW50IGRsY2ksIHVuc2lnbmVkIGNoYXIgYXR0ciwgaW50IGxlbiwKLQl2b2lkICpidWYpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveCArIDB4ODAwOwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltYm94LT5jbWQuZGxjaSAgICA9IGRsY2k7Ci0JCW1ib3gtPmNtZC5hdHRyICAgID0gYXR0cjsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBsZW47Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfV1JJVEU7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCWlmICghZXJyKSB7Ci0JCWZyX3R4X2J1Zl9jdGxfdCogZnJidWY7Ci0gCi0gICAgICAgICAgICAgICAJaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpCi0JCQlmcmJ1ZiA9ICh2b2lkKikoKih1bnNpZ25lZCBsb25nKiltYm94LT5kYXRhICsKLSAgICAgICAgICAgICAgICAgICAgICAgIAljYXJkLT5ody5kcG1iYXNlKTsKLQkJZWxzZQotCQkJZnJidWYgPSAodm9pZCopKCoodW5zaWduZWQgbG9uZyopbWJveC0+ZGF0YSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0KLQkJc2RsYV9wb2tlKCZjYXJkLT5odywgZnJidWYtPm9mZnNldCwgYnVmLCBsZW4pOwotCQlmcmJ1Zi0+ZmxhZyA9IDB4MDE7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKioqKioqIEZpcm13YXJlIEFzeW5jaHJvbm91cyBFdmVudCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNYWluIGFzeW5jcm9ub3VzIGV2ZW50L2Vycm9yIGhhbmRsZXIuCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGZpcm13YXJlIGNvbW1hbmQgcmV0dXJucyBub24temVybwotICoJcmV0dXJuIGNvZGUuCi0gKgotICogUmV0dXJuIHplcm8gaWYgcHJldmlvdXMgY29tbWFuZCBoYXMgdG8gYmUgY2FuY2VsbGVkLgotICovCi1zdGF0aWMgaW50IGZyX2V2ZW50IChzZGxhX3QgKmNhcmQsIGludCBldmVudCwgZnJfbWJveF90KiBtYm94KQotewotCWZyNTA4X2ZsYWdzX3QqIGZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JY2hhciAqcHRyID0gJmZsYWdzLT5pZmxhZzsKLQlpbnQgaTsKLQotCXN3aXRjaCAoZXZlbnQpIHsKLQotCQljYXNlIEZSUkVTX01PREVNX0ZBSUxVUkU6Ci0JCQlyZXR1cm4gZnJfbW9kZW1fZmFpbHVyZShjYXJkLCBtYm94KTsKLQotCQljYXNlIEZSUkVTX0NIQU5ORUxfRE9XTjogewotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQotCQkJLyogUmVtb3ZlIGFsbCByb3V0ZXMgZnJvbSBhc3NvY2lhdGVkIERMQ0kncyAqLwotCQkJZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JCQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpIHsKLQkJCQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JCQkJaWYgKGNoYW4tPnJvdXRlX2ZsYWcgPT0gUk9VVEVfQURERUQpIHsKLQkJCQkJY2hhbi0+cm91dGVfZmxhZyA9IFJFTU9WRV9ST1VURTsKLQkJCQl9Ci0KLQkJCQlpZiAoY2hhbi0+aW5hcnAgPT0gSU5BUlBfQ09ORklHVVJFRCkgewotCQkJCQljaGFuLT5pbmFycCA9IElOQVJQX1JFUVVFU1Q7Ci0JCQkJfQotCi0JCQkJLyogSWYgdGhlIGxpbmsgYmVjb21lcyBkaXNjb25uZWN0ZWQgdGhlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWxsIGNoYW5uZWxzIHdpbGwgYmUgZGlzY29ubmVjdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCQkJCXNldF9jaGFuX3N0YXRlKGRldixXQU5fRElTQ09OTkVDVEVEKTsKLQkJCX0KLQkJCQkKLQkJCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJcmV0dXJuIDE7Ci0JCQl9Ci0KLQkJY2FzZSBGUlJFU19DSEFOTkVMX1VQOiB7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCi0JCQkvKiBGSVhNRTogT25seSBzdGFydHVwIGRldmljZXMgdGhhdCBhcmUgb24gdGhlIGxpc3QgKi8KLQkJCQotCQkJZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JCQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpIHsKLQkJCQkKLQkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsV0FOX0NPTk5FQ1RFRCk7Ci0JCQl9Ci0KLQkJCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNURUQpOwotCQkJcmV0dXJuIDE7Ci0JCQl9Ci0KLQkJY2FzZSBGUlJFU19ETENJX0NIQU5HRToKLQkJCXJldHVybiBmcl9kbGNpX2NoYW5nZShjYXJkLCBtYm94KTsKLQotCQljYXNlIEZSUkVTX0RMQ0lfTUlTTUFUQ0g6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRExDSSBsaXN0IG1pc21hdGNoIVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gMTsKLQotCQljYXNlIENNRF9USU1FT1VUOgotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY29tbWFuZCAweCUwMlggdGltZWQgb3V0IVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYm94LT5jbWQuY29tbWFuZCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSUQgQnl0ZXMgPSAiLGNhcmQtPmRldm5hbWUpOwotIAkgICAgCQlmb3IoaSA9IDA7IGkgPCA4OyBpICsrKQotCQkJCXByaW50ayhLRVJOX0lORk8gIjB4JTAyWCAiLCAqKHB0ciArIDB4MTggKyBpKSk7Ci0JICAgCSAJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsJCi0gICAgICAgICAgICAKLQkJCWJyZWFrOwotCi0JCWNhc2UgRlJSRVNfRExDSV9JTkFDVElWRToKLQkJCWJyZWFrOwotIAotCQljYXNlIEZSUkVTX0NJUl9PVkVSRkxPVzoKLQkJCWJyZWFrOwotCQkJCi0JCWNhc2UgRlJSRVNfQlVGRkVSX09WRVJGTE9XOgotCQkJYnJlYWs7IAotCQkJCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIgotCQkJCSwgY2FyZC0+ZGV2bmFtZSwgbWJveC0+Y21kLmNvbW1hbmQsIGV2ZW50KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgbW9kZW0gZXJyb3IuCi0gKgotICogUmV0dXJuIHplcm8gaWYgcHJldmlvdXMgY29tbWFuZCBoYXMgdG8gYmUgY2FuY2VsbGVkLgotICovCi1zdGF0aWMgaW50IGZyX21vZGVtX2ZhaWx1cmUgKHNkbGFfdCAqY2FyZCwgZnJfbWJveF90KiBtYm94KQotewotCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHlzaWNhbCBsaW5rIGRvd24hIChtb2RlbSBlcnJvciAweCUwMlgpXG4iLAotCQljYXJkLT5kZXZuYW1lLCBtYm94LT5kYXRhWzBdKTsKLQotCXN3aXRjaCAobWJveC0+Y21kLmNvbW1hbmQpewotCQljYXNlIEZSX1dSSVRFOgotCQotCQljYXNlIEZSX1JFQUQ6Ci0JCQlyZXR1cm4gMDsKLQl9Ci0JCi0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSGFuZGxlIERMQ0kgc3RhdHVzIGNoYW5nZS4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgZnJfZGxjaV9jaGFuZ2UgKHNkbGFfdCAqY2FyZCwgZnJfbWJveF90KiBtYm94KQotewotCWRsY2lfc3RhdHVzX3QqIHN0YXR1cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCWludCBjbnQgPSBtYm94LT5jbWQubGVuZ3RoIC8gc2l6ZW9mKGRsY2lfc3RhdHVzX3QpOwotCWZyX2NoYW5uZWxfdCAqY2hhbjsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2MjsKLQkKLQotCWZvciAoOyBjbnQ7IC0tY250LCArK3N0YXR1cykgewotCi0JCXVuc2lnbmVkIHNob3J0IGRsY2k9IHN0YXR1cy0+ZGxjaTsKLQkJc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBkbGNpKTsKLQkJCi0JCWlmIChkZXYgPT0gTlVMTCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogQ1BFIGNvbnRhaW5zIHVuY29uZmlndXJlZCBETENJPSAlZFxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgZGxjaSk7IAkKLQotICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiB1bmNvbmZpZ3VyZWQgRExDSSAlZCByZXBvcnRlZCBieSBuZXR3b3JrXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY2FyZC0+ZGV2bmFtZSwgZGxjaSk7Ci0gCi0JCX1lbHNlewotCQkJaWYgKHN0YXR1cy0+c3RhdGUgPT0gRlJfTElOS19JTk9QRVIpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSIlczogRExDSSAldSBpcyBpbmFjdGl2ZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIGRsY2kpOwotCi0JCQkJaWYgKGRldiAmJiBuZXRpZl9ydW5uaW5nKGRldikpCi0JCQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQl9Ci0JCi0JCQlpZiAoc3RhdHVzLT5zdGF0ZSAmIEZSX0RMQ0lfREVMRVRFRCkgewotCi0JCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkiJXM6IERMQ0kgJXUgaGFzIGJlZW4gZGVsZXRlZCFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIGRsY2kpOwotCi0JCQkJaWYgKGRldiAmJiBuZXRpZl9ydW5uaW5nKGRldikpewotCi0JCQkJCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQotCQkJCQlpZiAoY2hhbi0+cm91dGVfZmxhZyA9PSBST1VURV9BRERFRCkgewotCQkJCQkJY2hhbi0+cm91dGVfZmxhZyA9IFJFTU9WRV9ST1VURTsKLQkJCQkJCS8qIFRoZSBzdGF0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgZnIgcG9sbGluZyByb3V0aW5lICovCi0JCQkJCX0KLQotCQkJCQlpZiAoY2hhbi0+aW5hcnAgPT0gSU5BUlBfQ09ORklHVVJFRCkgewotCQkJCQkJY2hhbi0+aW5hcnAgPSBJTkFSUF9SRVFVRVNUOwotCQkJCQl9Ci0KLQkJCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVEVEKTsKLQkJCQl9Ci0KLQkJCX0gZWxzZSBpZiAoc3RhdHVzLT5zdGF0ZSAmIEZSX0RMQ0lfQUNUSVZFKSB7Ci0KLQkJCQljaGFuID0gZGV2LT5wcml2OwotCQkJCi0JCQkJLyogVGhpcyBmbGFnIGlzIHVzZWQgZm9yIGNvbmZpZ3VyaW5nIHNwZWNpZmljIAotCQkJCSAgIERMQ0kocykgd2hlbiB0aGV5IGJlY29tZSBhY3RpdmUuCi0JCQkgCSovIAotCQkJCWNoYW4tPmRsY2lfY29uZmlndXJlZCA9IERMQ0lfQ09ORklHX1BFTkRJTkc7Ci0JCi0JCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fQ09OTkVDVEVEKTsKLQkJCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JZm9yIChkZXYyID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2MjsKLQkgICAgIGRldjIgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYyLT5wcml2KSl7Ci0JCQotCQljaGFuID0gZGV2Mi0+cHJpdjsKLQkKLQkJaWYgKGNoYW4tPmRsY2lfY29uZmlndXJlZCA9PSBETENJX0NPTkZJR19QRU5ESU5HKSB7Ci0JCQlpZiAoZnJfaW5pdF9kbGNpKGNhcmQsIGNoYW4pKXsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQotCi0JfQotCXJldHVybiAxOwotfQotCi0KLXN0YXRpYyBpbnQgZnJfaW5pdF9kbGNpIChzZGxhX3QgKmNhcmQsIGZyX2NoYW5uZWxfdCAqY2hhbikKLXsKLQlmcl9kbGNfY29uZl90IGNmZzsKLQkKLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOwotCi0JaWYgKCBjaGFuLT5jaXJfc3RhdHVzID09IENJUl9ESVNBQkxFRCkgewotCi0JCWNmZy5jaXJfZndkID0gY2ZnLmNpcl9id2QgID0gMTY7Ci0JCWNmZy5iY19md2QgPSBjZmcuYmNfYndkID0gMTY7Ci0JCWNmZy5jb25mX2ZsYWdzID0gMHgwMDAxOwkKLQotCX1lbHNlIGlmIChjaGFuLT5jaXJfc3RhdHVzID09IENJUl9FTkFCTEVEKSB7Ci0JCi0JCWNmZy5jaXJfZndkID0gY2ZnLmNpcl9id2QgPSBjaGFuLT5jaXI7Ci0JCWNmZy5iY19md2QgID0gY2ZnLmJjX2J3ZCAgPSBjaGFuLT5iYzsKLQkJY2ZnLmJlX2Z3ZCAgPSBjZmcuYmVfYndkICA9IGNoYW4tPmJlOwotCQljZmcuY29uZl9mbGFncyA9IDB4MDAwMDsKLQl9Ci0JCi0JaWYgKGZyX2RsY2lfY29uZmlndXJlKCBjYXJkLCAmY2ZnICwgY2hhbi0+ZGxjaSkpewotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBETENJIENvbmZpZ3VyZSBmYWlsZWQgZm9yICVkXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIGNoYW4tPmRsY2kpOwotCQlyZXR1cm4gMTsJCi0JfQotCQotCWNoYW4tPmRsY2lfY29uZmlndXJlZCA9IERMQ0lfQ09ORklHVVJFRDsKLQotCS8qIFJlYWQgdGhlIGludGVyZmFjZSBieXRlIG1hcHBpbmcgaW50byB0aGUgY2hhbm5lbCAKLQkgKiBzdHJ1Y3R1cmUuCi0JICovCi0JcmVhZF9ETENJX0lCX21hcHBpbmcoIGNhcmQsIGNoYW4gKTsKLQotCXJldHVybiAwOwotfQotLyoqKioqKiogTWlzY2VsbGFuZW91cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGNoYW5uZWwgc3RhdGUuIAotICovCi1zdGF0aWMgaW50IHVwZGF0ZV9jaGFuX3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9MSVNUX0FDVElWRV9ETENJOwotCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JaWYgKCFlcnIpIHsKLQkJCi0JCXVuc2lnbmVkIHNob3J0KiBsaXN0ID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0JCWludCBjbnQgPSBtYm94LT5jbWQubGVuZ3RoIC8gc2l6ZW9mKHNob3J0KTsKLQkJCi0JCWVycj0xOwotCQkKLQkJZm9yICg7IGNudDsgLS1jbnQsICsrbGlzdCkgewotCi0JCQlpZiAoKmxpc3QgPT0gY2hhbi0+ZGxjaSkgewotIAkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCi0KLQkJCQkvKiBNYXkgMjMgMjAwMC4gTkMKLQkJCQkgKiBXaGVuIGEgZGxjaSBpcyBhZGRlZCBvciByZXN0YXJ0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBkbGNpX2ludF9pbnRlcmZhY2UgcG9pbnRlciBtdXN0Ci0JCQkJICogYmUgcmVpbml0aWFsaXplZC4gICovCi0JCQkJaWYgKCFjaGFuLT5kbGNpX2ludF9pbnRlcmZhY2UpewotCQkJCQllcnI9ZnJfaW5pdF9kbGNpIChjYXJkLGNoYW4pOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IGNoYW5uZWwgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkIHNldF9jaGFuX3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIGludCBzdGF0ZSkKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQotCWlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gc3RhdGUpIHsKLQotCQlzd2l0Y2ggKHN0YXRlKSB7Ci0KLQkJCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSIlczogSW50ZXJmYWNlICVzOiBETENJICVkIGNvbm5lY3RlZFxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBjaGFuLT5kbGNpKTsKLQotCQkJCS8qIElmIHRoZSBpbnRlcmZhY2Ugd2FzIHByZXZpb3Vsc3kgZG93biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnJpbmcgaXQgdXAsIHNpbmNlIHRoZSBjaGFubmVsIGlzIGFjdGl2ZSAqLwotCi0JCQkJdHJpZ2dlcl9mcl9wb2xsIChkZXYpOwotCQkJCXRyaWdnZXJfZnJfYXJwICAoZGV2KTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBXQU5fQ09OTkVDVElORzoKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSAgICAgICIlczogSW50ZXJmYWNlICVzOiBETENJICVkIGNvbm5lY3RpbmdcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQkJCQlwcmludGsgKEtFUk5fSU5GTyAKLQkJCQkgICAgIiVzOiBJbnRlcmZhY2UgJXM6IERMQ0kgJWQgZGlzY29ubmVjdGVkIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBjaGFuLT5kbGNpKTsKLQkJCQotCQkJCS8qIElmIHRoZSBpbnRlcmZhY2UgaXMgdXAsIGJyaW5nIGl0IGRvd24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpbmNlIHRoZSBjaGFubmVsIGlzIG5vdyBkaXNjb25uZWN0ZWQgKi8KLQkJCQl0cmlnZ2VyX2ZyX3BvbGwgKGRldik7Ci0JCQkJYnJlYWs7Ci0JCX0KLQotCQljaGFuLT5jb21tb24uc3RhdGUgPSBzdGF0ZTsKLQl9Ci0KLQljaGFuLT5zdGF0ZV90aWNrID0gamlmZmllczsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaW5kIG5ldHdvcmsgZGV2aWNlIGJ5IGl0cyBjaGFubmVsIG51bWJlci4KLSAqCi0gKiBXZSBuZWVkIHRoaXMgY3JpdGljYWwgZmxhZyBiZWNhdXNlIHdlIGNoYW5nZQotICogdGhlIGRsY2lfdG9fZGV2X21hcCBvdXRzaWRlIHRoZSBpbnRlcnJ1cHQuCi0gKgotICogTk9URTogZGVsX2lmKCkgZnVuY3Rpb25zIHVwZGF0ZXMgdGhpcyBhcnJheSwgaXQgdXNlcwotICogICAgICAgdGhlIHNwaW4gbG9ja3MgdG8gYXZvaWQgY29ycnVwdGlvbi4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlKiBmaW5kX2NoYW5uZWwoc2RsYV90KiBjYXJkLCB1bnNpZ25lZCBkbGNpKQotewotCWlmKGRsY2kgPiBISUdIRVNUX1ZBTElEX0RMQ0kpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuKGNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXBbZGxjaV0pOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENoZWNrIHRvIHNlZSBpZiBhIGZyYW1lIGNhbiBiZSBzZW50LiBJZiBubyB0cmFuc21pdCBidWZmZXJzIGF2YWlsYWJsZSwKLSAqIGVuYWJsZSB0cmFuc21pdCBpbnRlcnJ1cHRzLgotICoKLSAqIFJldHVybjoJMSAtIFR4IGJ1ZmZlcihzKSBhdmFpbGFibGUKLSAqCQkwIC0gbm8gYnVmZmVycyBhdmFpbGFibGUKLSAqLwotc3RhdGljIGludCBpc190eF9yZWFkeSAoc2RsYV90KiBjYXJkLCBmcl9jaGFubmVsX3QqIGNoYW4pCi17Ci0JdW5zaWduZWQgY2hhciBzYjsKLQotICAgICAgICBpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkKLQkJcmV0dXJuIDE7Ci0KLQlzYiA9IGluYihjYXJkLT5ody5wb3J0KTsKLQlpZiAoc2IgJiAweDAyKSAKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb252ZXJ0IGRlY2ltYWwgc3RyaW5nIHRvIHVuc2lnbmVkIGludGVnZXIuCi0gKiBJZiBsZW4gIT0gMCB0aGVuIG9ubHkgJ2xlbicgY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGFyZSBjb252ZXJ0ZWQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVjX3RvX3VpbnQgKHVuc2lnbmVkIGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCB2YWw7Ci0KLQlpZiAoIWxlbikgCi0JCWxlbiA9IHN0cmxlbihzdHIpOwotCi0JZm9yICh2YWwgPSAwOyBsZW4gJiYgaXNkaWdpdCgqc3RyKTsgKytzdHIsIC0tbGVuKQotCQl2YWwgPSAodmFsICogMTApICsgKCpzdHIgLSAodW5zaWduZWQpJzAnKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTdG9yZSBhIFVEUCBtYW5hZ2VtZW50IHBhY2tldCBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KLSAqLwotCi1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChpbnQgdWRwX3R5cGUsIGNoYXIgdWRwX3BrdF9zcmMsIHNkbGFfdCogY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRsY2kpCi17Ci0gICAgICAgIGludCB1ZHBfcGt0X3N0b3JlZCA9IDA7Ci0JCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBkbGNpKTsKLQlmcl9jaGFubmVsX3QgKmNoYW47Ci0JCi0JaWYgKCFkZXYgfHwgIShjaGFuPWRldi0+cHJpdikpCi0JCXJldHVybiAxOwotCQotICAgICAgICBpZighY2FyZC0+dS5mLnVkcF9wa3RfbGd0aCAmJiAoc2tiLT5sZW4gPD0gTUFYX0xHVEhfVURQX01HTlRfUEtUKSl7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5mLnVkcF9wa3RfbGd0aCA9IHNrYi0+bGVuICsgY2hhbi0+ZnJfaGVhZGVyX2xlbjsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudWRwX3R5cGUgPSB1ZHBfdHlwZTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudWRwX3BrdF9zcmMgPSB1ZHBfcGt0X3NyYzsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudWRwX2RsY2kgPSBkbGNpOwotICAgICAgICAgICAgICAgIG1lbWNweShjYXJkLT51LmYudWRwX3BrdF9kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VEUDsKLSAgICAgICAgICAgICAgICB1ZHBfcGt0X3N0b3JlZCA9IDE7Ci0KLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiRVJST1I6IFVEUCBwYWNrZXQgbm90IHN0b3JlZCBmb3IgRExDSSAlZFxuIiwgCi0JCQkJCQkJZGxjaSk7Ci0JfQotCi0gICAgICAgIGlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX1NUQUNLKXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX1lbHNlewotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfQotCQkKLSAgICAgICAgcmV0dXJuKHVkcF9wa3Rfc3RvcmVkKTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBVRFAgY2FsbCBvZiB0eXBlIEZQSVBFOE5ECi0gKi8KLXN0YXRpYyBpbnQgcHJvY2Vzc191ZHBfbWdtdF9wa3Qoc2RsYV90KiBjYXJkKQotewotCi0JaW50IGNfcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBjaGFyIGZyYW1lczsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIHNob3J0IGJ1ZmZlcl9sZW5ndGg7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWludCB1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICBmcl9jaGFubmVsX3QqIGNoYW47Ci0gICAgICAgIGZyX3VkcF9wa3RfdCAqZnJfdWRwX3BrdDsKLQl1bnNpZ25lZCBzaG9ydCBudW1fdHJjX2VsczsKLQlmcl90cmNfZWxfdCogcHRyX3RyY19lbDsKLQlmcl90cmNfZWxfdCB0cmNfZWw7Ci0JZnBpcGVtb25fdHJjX3QqIGZwaXBlbW9uX3RyYzsKLQotCWNoYXIgdWRwX3BrdF9zcmMgPSBjYXJkLT51LmYudWRwX3BrdF9zcmM7IAotCWludCBkbGNpID0gY2FyZC0+dS5mLnVkcF9kbGNpOwotCi0JLyogRmluZCBuZXR3b3JrIGludGVyZmFjZSBmb3IgdGhpcyBwYWNrZXQgKi8KLQlkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCwgZGxjaSk7Ci0JaWYgKCFkZXYpewotCQljYXJkLT51LmYudWRwX3BrdF9sZ3RoID0gMDsKLQkJcmV0dXJuIDE7Ci0JfQotICAgICAgICBpZiAoKGNoYW4gPSBkZXYtPnByaXYpID09IE5VTEwpewotCQljYXJkLT51LmYudWRwX3BrdF9sZ3RoID0gMDsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogSWYgdGhlIFVEUCBwYWNrZXQgaXMgZnJvbSB0aGUgbmV0d29yaywgd2UgYXJlIGdvaW5nIHRvIGhhdmUgdG8gCi0JICAgdHJhbnNtaXQgYSByZXNwb25zZS4gQmVmb3JlIGRvaW5nIHNvLCB3ZSBtdXN0IGNoZWNrIHRvIHNlZSB0aGF0Ci0JICAgd2UgYXJlIG5vdCBjdXJyZW50bHkgdHJhbnNtaXR0aW5nIGEgZnJhbWUgKGluICdpZl9zZW5kKCknKSBhbmQKLQkgICB0aGF0IHdlIGFyZSBub3QgYWxyZWFkeSBpbiBhICdkZWxheWVkIHRyYW5zbWl0JyBzdGF0ZS4KLQkqLwotCWlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQkJaWYgKGNoZWNrX3R4X3N0YXR1cyhjYXJkLGRldikpewotCQkJY2FyZC0+dS5mLnVkcF9wa3RfbGd0aCA9IDA7Ci0JCQlyZXR1cm4gMTsKLQkJfQotICAgICAgICB9Ci0KLSAgICAgICAgZnJfdWRwX3BrdCA9IChmcl91ZHBfcGt0X3QgKiljYXJkLT51LmYudWRwX3BrdF9kYXRhOwotCi0JaWYodWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSykgewotCQotCQlzd2l0Y2goZnJfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpIHsKLQotCQkJY2FzZSBGUl9SRUFEX01PREVNX1NUQVRVUzoKLQkJCWNhc2UgRlJfUkVBRF9TVEFUVVM6Ci0JCQljYXNlIEZQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJY2FzZSBGUl9SRUFEX0VSUk9SX1NUQVRTOgotCQkJY2FzZSBGUElQRV9EUklWRVJfU1RBVF9HRU46Ci0JCQljYXNlIEZSX1JFQURfU1RBVElTVElDUzoKLQkJCWNhc2UgRlJfUkVBRF9BRERfRExDX1NUQVRTOgotCQkJY2FzZSBGUl9SRUFEX0NPTkZJRzoKLQkJCWNhc2UgRlJfUkVBRF9DT0RFX1ZFUlNJT046Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMDsKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWlmKCF1ZHBfbWdtdF9yZXFfdmFsaWQpIHsKLQkJLyogc2V0IGxlbmd0aCB0byAwICovCi0JCWZyX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSAwOwotCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDB4Q0Q7IAotCQkKLQkJY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfZGlyZWN0aW9uX2VyciArKzsKLQotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsJCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBXYXJuaW5nLCBJbGxlZ2FsIFVEUCBjb21tYW5kIGF0dGVtcHRlZCBmcm9tIG5ldHdvcms6ICV4XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxmcl91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCk7Ci0JCX0KLQkJCi0JfSBlbHNlIHsgICAKLSAgICAgICAgICAgCi0JCXN3aXRjaChmcl91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotCi0JCWNhc2UgRlBJUEVfRU5BQkxFX1RSQUNJTkc6Ci0JCQlpZighY2FyZC0+VHJhY2luZ0VuYWJsZWQpIHsKLQkJCQlkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgIAkJCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX1RSQUNFX0NPTkZJRzsKLSAgICAgICAgICAgICAgICAgICAgICAgCQkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAJCQltYm94LT5jbWQuZGxjaSA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgCQkJbWJveC0+ZGF0YVswXSA9IGZyX3VkcF9wa3QtPmRhdGFbMF0gfCAKLQkJCQkJCVJFU0VUX1RSQzsKLSAgICAgICAgICAgICAgICAgICAgCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gCi0JCQkJCSAgICAgCQltYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0gICAgICAgICAgICAgICAgICAgICAgIAkJfSB3aGlsZSAoZXJyICYmIGNfcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsCi0JCQkJCSBtYm94KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIAlpZihlcnIpIHsKLQkJCQkJY2FyZC0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkJCQkvKiBzZXQgdGhlIHJldHVybiBjb2RlICovCi0JCQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPQotICAJCQkJCQltYm94LT5jbWQucmVzdWx0OwotCQkJCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgTk9fVFJDX0VMRU1FTlRTX09GRiwKLQkJCQkJCSZudW1fdHJjX2VscywgMik7Ci0JCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgQkFTRV9UUkNfRUxFTUVOVFNfT0ZGLAotCQkJCQkJJmNhcmQtPnUuZi50cmNfZWxfYmFzZSwgNCk7Ci0JCQkJY2FyZC0+dS5mLmN1cnJfdHJjX2VsID0gY2FyZC0+dS5mLnRyY19lbF9iYXNlOwotICAgICAgICAgICAgIAkJCWNhcmQtPnUuZi50cmNfZWxfbGFzdCA9IGNhcmQtPnUuZi5jdXJyX3RyY19lbCArCi0JCQkJCQkJKChudW1fdHJjX2VscyAtIDEpICogCi0JCQkJCQkJc2l6ZW9mKGZyX3RyY19lbF90KSk7Ci0gICAKLQkJCQkvKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gdHJhY2UgZGF0YSBhcmVhIGluICovCi0JCQkJLyogdGhlIFVEUCBwYWNrZXQgKi8KLQkJCQljYXJkLT51LmYudHJjX2Jmcl9zcGFjZT0oTUFYX0xHVEhfVURQX01HTlRfUEtUIC0KLQkJCQkJLy9zaXplb2YoZnJfZW5jYXBfaGRyX3QpIC0KLQkJCQkJc2l6ZW9mKGlwX3BrdF90KSAtCi0JCQkJCXNpemVvZih1ZHBfcGt0X3QpIC0KLQkJCQkJc2l6ZW9mKHdwX21nbXRfdCkgLQotCQkJCQlzaXplb2YoY2Jsb2NrX3QpKTsKLQotCQkJCS8qIHNldCByZXR1cm4gY29kZSAqLwotCQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJCi0JCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgCS8qIHNldCByZXR1cm4gY29kZSB0byBsaW5lIHRyYWNlIGFscmVhZHkgCi0JCQkJICAgZW5hYmxlZCAqLwotCQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAxOwotICAgICAgICAgICAgICAgICAgICAJfQotCi0JCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCWNhcmQtPlRyYWNpbmdFbmFibGVkID0gMTsKLQkJCWJyZWFrOwotCi0KLSAgICAgICAgICAgICAgICBjYXNlIEZQSVBFX0RJU0FCTEVfVFJBQ0lORzoKLQkJCWlmKGNhcmQtPlRyYWNpbmdFbmFibGVkKSB7Ci0JCQkKLQkJCQlkbyB7Ci0JCQkJCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX1RSQUNFX0NPTkZJRzsKLQkJCQkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0JCQkJCW1ib3gtPmNtZC5kbGNpID0gMHgwMDsKLQkJCQkJbWJveC0+ZGF0YVswXSA9IH5BQ1RJVkFURV9UUkM7Ci0JCQkJCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IAotCQkJCQkJCW1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkJCQl9IHdoaWxlIChlcnIgJiYgY19yZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotICAgICAgICAgICAgICAgICAgICAJfQotCi0gICAgICAgICAgICAgICAgICAgIAkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQlicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRlBJUEVfR0VUX1RSQUNFX0lORk86Ci0KLQkJICAgICAgICAvKiBMaW5lIHRyYWNlIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gdGhlIDUwMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWNhcmQtPlRyYWNpbmdFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZXR1cm4gY29kZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcl91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0JCQlwdHJfdHJjX2VsID0gKHZvaWQgKiljYXJkLT51LmYuY3Vycl90cmNfZWw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSA9IDB4MDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihmcmFtZXMgPSAwOyBmcmFtZXMgPCBNQVhfRlJNU19UUkFDRUQ7IGZyYW1lcyArKykgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGFfcGVlaygmY2FyZC0+aHcsICh1bnNpZ25lZCBsb25nKXB0cl90cmNfZWwsCi0JCQkJCSAgKHZvaWQgKikmdHJjX2VsLmZsYWcsCi0JCQkJCSAgc2l6ZW9mKGZyX3RyY19lbF90KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyY19lbC5mbGFnID09IDB4MDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKChjYXJkLT51LmYudHJjX2Jmcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCBzaXplb2YoZnBpcGVtb25fdHJjX2hkcl90KSkgeyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcl91ZHBfcGt0LT5kYXRhWzB4MDBdIHw9IE1PUkVfVFJDX0RBVEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotCQkJCWZwaXBlbW9uX3RyYyA9IAotCQkJCQkoZnBpcGVtb25fdHJjX3QgKikmZnJfdWRwX3BrdC0+ZGF0YVtidWZmZXJfbGVuZ3RoXTsgCi0JCQkJZnBpcGVtb25fdHJjLT5mcGlwZW1vbl90cmNfaGRyLnN0YXR1cyA9Ci0JCQkJCXRyY19lbC5hdHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIudG1zdGFtcCA9Ci0JCQkJCXRyY19lbC50bXN0YW1wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIubGVuZ3RoID0gCi0JCQkJCXRyY19lbC5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXRyY19lbC5vZmZzZXQgfHwgIXRyY19lbC5sZW5ndGgpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIuZGF0YV9wYXNzZWQgPSAweDAwOwotCi0gCQkJCX1lbHNlIGlmKCh0cmNfZWwubGVuZ3RoICsgc2l6ZW9mKGZwaXBlbW9uX3RyY19oZHJfdCkgKyAxKSA+Ci0JCQkJCShjYXJkLT51LmYudHJjX2Jmcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpKXsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwaXBlbW9uX3RyYy0+ZnBpcGVtb25fdHJjX2hkci5kYXRhX3Bhc3NlZCA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSB8PSBNT1JFX1RSQ19EQVRBOwotIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBpcGVtb25fdHJjLT5mcGlwZW1vbl90cmNfaGRyLmRhdGFfcGFzc2VkID0gMHgwMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxhX3BlZWsoJmNhcmQtPmh3LCB0cmNfZWwub2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJICBmcGlwZW1vbl90cmMtPmRhdGEsCi0JCQkJCQkgIHRyY19lbC5sZW5ndGgpOwotCQkJCX0JCQkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmNfZWwuZmxhZyA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGFfcG9rZSgmY2FyZC0+aHcsICh1bnNpZ25lZCBsb25nKXB0cl90cmNfZWwsCi0JCQkJCSAgJnRyY19lbC5mbGFnLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCQlwdHJfdHJjX2VsICsrOwotCQkJCWlmKCh2b2lkICopcHRyX3RyY19lbCA+IGNhcmQtPnUuZi50cmNfZWxfbGFzdCkKLQkJCQkJcHRyX3RyY19lbCA9ICh2b2lkKiljYXJkLT51LmYudHJjX2VsX2Jhc2U7Ci0KLQkJCQlidWZmZXJfbGVuZ3RoICs9IHNpemVvZihmcGlwZW1vbl90cmNfaGRyX3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZihmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIuZGF0YV9wYXNzZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWJ1ZmZlcl9sZW5ndGggKz0gdHJjX2VsLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJfQotCi0JCQkJaWYoZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSAmIE1PUkVfVFJDX0RBVEEpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIAotCQkJaWYoZnJhbWVzID09IE1BWF9GUk1TX1RSQUNFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgCWZyX3VkcF9wa3QtPmRhdGFbMHgwMF0gfD0gTU9SRV9UUkNfREFUQTsKLQkJCX0KLSAgICAgICAgICAgICAKLQkJCWNhcmQtPnUuZi5jdXJyX3RyY19lbCA9ICh2b2lkICopcHRyX3RyY19lbDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHBhc3NlZCAqLwotCQkJZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSB8PQotCQkJCSgoZnJhbWVzIDw8IDEpICYgKE1BWF9GUk1TX1RSQUNFRCA8PCAxKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCB0aGUgZGF0YSBsZW5ndGggYW5kIHJldHVybiBjb2RlICovCi0JCQlmcl91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gbWJveC0+Y21kLmxlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcl91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBGUElQRV9GVDFfUkVBRF9TVEFUVVM6Ci0JCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCAweEYwMjAsCi0JCQkJJmZyX3VkcF9wa3QtPmRhdGFbMHgwMF0gLCAyKTsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBtYm94LT5jbWQubGVuZ3RoID0gMjsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGUElQRV9GTFVTSF9EUklWRVJfU1RBVFM6Ci0JCQlpbml0X2NoYW5fc3RhdGlzdGljcyhjaGFuKTsKLQkJCWluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoY2FyZCk7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCWJyZWFrOwotCQkKLQkJY2FzZSBGUElQRV9ST1VURVJfVVBfVElNRToKLQkJCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCQkJY2hhbi0+cm91dGVyX3VwX3RpbWUgPSB0di50dl9zZWMgLSAKLQkJCQkJCWNoYW4tPnJvdXRlcl9zdGFydF90aW1lOwotICAgIAkgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopJmZyX3VkcF9wa3QtPmRhdGEgPQotICAgIAkJCQljaGFuLT5yb3V0ZXJfdXBfdGltZTsJCi0JCQltYm94LT5jbWQubGVuZ3RoID0gZnJfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IDQ7Ci0JCQlmcl91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRlBJUEVfRFJJVkVSX1NUQVRfSUZTRU5EOgotCQkJbWVtY3B5KGZyX3VkcF9wa3QtPmRhdGEsCi0JCQkJJmNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF9lbnRyeSwKLQkJCQlzaXplb2YoaWZfc2VuZF9zdGF0X3QpKTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBmcl91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID1zaXplb2YoaWZfc2VuZF9zdGF0X3QpOwkKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0JCi0JCWNhc2UgRlBJUEVfRFJJVkVSX1NUQVRfSU5UUjoKLQotCQkJbWVtY3B5KGZyX3VkcF9wa3QtPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYXJkLT5zdGF0aXN0aWNzLmlzcl9lbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmZnJfdWRwX3BrdC0+ZGF0YVtzaXplb2YoZ2xvYmFsX3N0YXRzX3QpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4tPmRydnN0YXRzX3J4X2ludHIucnhfaW50cl9ub19zb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyeF9pbnRyX3N0YXRfdCkpOwotCi0JCQltYm94LT5jbWQubGVuZ3RoID0gZnJfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IAotCQkJCQlzaXplb2YoZ2xvYmFsX3N0YXRzX3QpICsKLQkJCQkJc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGUElQRV9EUklWRVJfU1RBVF9HRU46Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoZnJfdWRwX3BrdC0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4tPmRydnN0YXRzX2dlbi5VRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGlwZV9tZ210X3N0YXRfdCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmZyX3VkcF9wa3QtPmRhdGFbc2l6ZW9mKHBpcGVfbWdtdF9zdGF0X3QpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FyZC0+c3RhdGlzdGljcywgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1ib3gtPmNtZC5sZW5ndGggPSBmcl91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQotCQljYXNlIEZSX0ZUMV9TVEFUVVNfQ1RSTDoKLQkJCWlmKGZyX3VkcF9wa3QtPmRhdGFbMF0gPT0gMSkgewotCQkJCWlmKHJDb3VudCsrICE9IDAgKXsKLQkJCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQkJCW1ib3gtPmNtZC5sZW5ndGggPSAxOwotCQkJCQlicmVhazsKLQkJCQl9IAotCQkJfQotICAgICAgICAgICAKLQkJCS8qIERpc2FibGUgRlQxIE1PTklUT1IgU1RBVFVTICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihmcl91ZHBfcGt0LT5kYXRhWzBdID09IDApIHsKLQkJCQlpZiggLS1yQ291bnQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfSAKLQkJCX0gIAotCQkJZ290byB1ZHBfbWdtdF9kZmx0OwotCi0JCQkKLQkJZGVmYXVsdDoKLXVkcF9tZ210X2RmbHQ6Ci0gCQkJZG8gewotCQkJCW1lbWNweSgmbWJveC0+Y21kLAotCQkJCQkmZnJfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQsCi0JCQkJCXNpemVvZihmcl9jbWRfdCkpOwotCQkJCWlmKG1ib3gtPmNtZC5sZW5ndGgpIHsKLQkJCQkJbWVtY3B5KCZtYm94LT5kYXRhLAotCQkJCQkJKGNoYXIgKilmcl91ZHBfcGt0LT5kYXRhLAotCQkJCQkJbWJveC0+Y21kLmxlbmd0aCk7Ci0JCQkJfQotIAkJCQkKLQkJCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogCi0JCQkJCUNNRF9USU1FT1VUOwotCQkJfSB3aGlsZSAoZXJyICYmIGNfcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCQkJaWYoIWVycikKLQkJCQljaGFuLT5kcnZzdGF0c19nZW4uCi0JCQkJCVVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF9PSyArKzsKLQkJCWVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbi0+ZHJ2c3RhdHNfZ2VuLgotCQkJCQlVRFBfUElQRV9tZ210X2FkcHRyX2NtbmRfdGltZW91dCArKzsKLQotICAgICAgIAkgICAgICAgICAgICAgICAgLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCQkJbWVtY3B5KCZmcl91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCwKLQkJCQkmbWJveC0+Y21kLCBzaXplb2YoZnJfY21kX3QpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAJaWYobWJveC0+Y21kLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAltZW1jcHkoJmZyX3VkcF9wa3QtPmRhdGEsCi0JCQkJCSZtYm94LT5kYXRhLCBtYm94LT5jbWQubGVuZ3RoKTsKLQkJCX0KLQkJfSAKLSAgICAgICAgfQotICAgCi0gICAgICAgIC8qIEZpbGwgVURQIFRUTCAqLwotICAgICAgICBmcl91ZHBfcGt0LT5pcF9wa3QudHRsID0gY2FyZC0+d2FuZGV2LnR0bDsKLSAgICAgICAgbGVuID0gcmVwbHlfdWRwKGNhcmQtPnUuZi51ZHBfcGt0X2RhdGEsIG1ib3gtPmNtZC5sZW5ndGgpOwotCi0gICAgICAgIGlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQotCQljaGFuLT5mcl9oZWFkZXJfbGVuPTI7Ci0JCWNoYW4tPmZyX2hlYWRlclswXT1ROTIyX1VJOwotCQljaGFuLT5mcl9oZWFkZXJbMV09TkxQSURfSVA7Ci0JCQkKLQkJZXJyID0gZnJfc2VuZF9kYXRhX2hlYWRlcihjYXJkLCBkbGNpLCAwLCBsZW4sIAotCQkJY2FyZC0+dS5mLnVkcF9wa3RfZGF0YSxjaGFuLT5mcl9oZWFkZXJfbGVuKTsKLQkJaWYgKGVycil7IAotCQkJY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9wYXNzZWQgKys7Ci0JCX1lbHNlewotCQkJY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9mYWlsZWQgKys7Ci0JCX0KLQkJCi0JfSBlbHNlIHsKLQkJLyogQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCQlpZigobmV3X3NrYiA9IGRldl9hbGxvY19za2IobGVuKSkgIT0gTlVMTCkgewotCi0JCQkvKiBjb3B5IGRhdGEgaW50byBuZXdfc2tiICovCi0JCQlidWYgPSBza2JfcHV0KG5ld19za2IsIGxlbik7Ci0JCQltZW1jcHkoYnVmLCBjYXJkLT51LmYudWRwX3BrdF9kYXRhLCBsZW4pOwotICAgICAgICAKLQkJCWNoYW4tPmRydnN0YXRzX2dlbi4KLQkJCQlVRFBfUElQRV9tZ210X3Bhc3NlZF90b19zdGFjayArKzsKLQkJCW5ld19za2ItPmRldiA9IGRldjsKLQkJCW5ld19za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwotCQkJbmV3X3NrYi0+bWFjLnJhdyA9IG5ld19za2ItPmRhdGE7Ci0JCQluZXRpZl9yeChuZXdfc2tiKTsKLSAgICAgICAgICAgIAkKLQkJfSBlbHNlIHsKLQkJCWNoYW4tPmRydnN0YXRzX2dlbi5VRFBfUElQRV9tZ210X25vX3NvY2tldCArKzsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IFVEUCBtZ210IGNtbmQsIG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAJfQotICAgICAgICB9Ci0KLQljYXJkLT51LmYudWRwX3BrdF9sZ3RoID0gMDsKLQotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBJbnZlcnNlIEFSUCBSZXF1ZXN0Ci0gKi8KLQotaW50IHNlbmRfaW5hcnBfcmVxdWVzdChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycj0wOwotCi0JYXJwaGRyXzE0OTBfdCAqQXJwUGFja2V0OwotCWFycGhkcl9mcl90ICphcnBoZHI7Ci0JZnJfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQotCWluX2RldiA9IGRldi0+aXBfcHRyOwotCi0JaWYoaW5fZGV2ICE9IE5VTEwgKSB7CQotCi0JCUFycFBhY2tldCA9IGttYWxsb2Moc2l6ZW9mKGFycGhkcl8xNDkwX3QpICsgc2l6ZW9mKGFycGhkcl9mcl90KSwgR0ZQX0FUT01JQyk7Ci0JCS8qIFNOQVAgSGVhZGVyIGluZGljYXRpbmcgQVJQICovCi0JCUFycFBhY2tldC0+Y29udHJvbAk9IDB4MDM7Ci0JCUFycFBhY2tldC0+cGFkCQk9IDB4MDA7Ci0JCUFycFBhY2tldC0+TkxQSUQJPSAweDgwOwotCQlBcnBQYWNrZXQtPk9VSVswXQk9IDA7Ci0JCUFycFBhY2tldC0+T1VJWzFdCT0gMDsKLQkJQXJwUGFja2V0LT5PVUlbMl0JPSAwOwotCQlBcnBQYWNrZXQtPlBJRAkJPSAweDA2MDg7Ci0KLQkJYXJwaGRyID0gKGFycGhkcl9mcl90ICopKEFycFBhY2tldCArIDEpOyAvLyBHbyB0byBBUlAgUGFja2V0Ci0KLQkJLyogSW5BUlAgcmVxdWVzdCAqLwkJCi0JCWFycGhkci0+YXJfaHJkID0gMHgwRjAwOwkvKiBGcmFtZSBSZWxheSBIVyB0eXBlICovCi0JCWFycGhkci0+YXJfcHJvID0gMHgwMDA4OwkvKiBJUCBQcm90b2NvbAkgICAgICAgKi8KLQkJYXJwaGRyLT5hcl9obG4gPSAyOwkJLyogSFcgYWRkciBsZW5ndGggICAgICAqLwotCQlhcnBoZHItPmFyX3BsbiA9IDQ7CQkvKiBJUCBhZGRyIGxlbmd0aCAgICAgICovCi0JCWFycGhkci0+YXJfb3AgPSBodG9ucygweDA4KTsJLyogSW5BUlAgUmVxdWVzdCAgICAgICAqLwotCQlhcnBoZHItPmFyX3NoYSA9IDA7IAkJLyogc3JjIEhXIERMQ0kgLSBEb2Vzbid0IG1hdHRlciAqLwotCQlpZihpbl9kZXYtPmlmYV9saXN0ICE9IE5VTEwpCi0JCQlhcnBoZHItPmFyX3NpcCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsgIC8qIExvY2FsIEFkZHJlc3MgICAgICAgKi9lbHNlCi0JCQlhcnBoZHItPmFyX3NpcCA9IDA7Ci0JCWFycGhkci0+YXJfdGhhID0gMDsgCQkvKiBkc3QgSFcgRExDSSAtIERvZXNuJ3QgbWF0dGVyICovCi0JCWFycGhkci0+YXJfdGlwID0gMDsJCS8qIFJlbW90ZSBBZGRyZXNzIC0tIHdoYXQgd2Ugd2FudCAqLwotCi0JCWVyciA9IGZyX3NlbmQoY2FyZCwgY2hhbi0+ZGxjaSwgMCwgc2l6ZW9mKGFycGhkcl8xNDkwX3QpICsgc2l6ZW9mKGFycGhkcl9mcl90KSwKLQkJICAgCQkJKHZvaWQgKilBcnBQYWNrZXQpOwotCi0JCWlmICghZXJyKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIlxuJXM6IFNlbmRpbmcgSW5BUlAgcmVxdWVzdCBvbiBETENJICVkLlxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCQljbGVhcl9iaXQoQVJQX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCX0KLQotCQlrZnJlZShBcnBQYWNrZXQpOwotCX1lbHNlewotCQlwcmludGsoS0VSTl9JTkZPICIlczogSU5BUlAgRVJST1I6ICVzIGRvZXNuJ3QgaGF2ZSBhIGxvY2FsIElQIGFkZHJlc3MhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0JCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaGVjayBwYWNrZXQgZm9yIEFSUCBUeXBlCi0gKi8KLQotaW50IGlzX2FycCh2b2lkICpidWYpCi17Ci0JYXJwaGRyXzE0OTBfdCAqYXJwaGRyID0gKGFycGhkcl8xNDkwX3QgKilidWY7Ci0JCi0JaWYgKGFycGhkci0+cGFkICAgPT0gMHgwMCAgJiYKLQkgICAgYXJwaGRyLT5OTFBJRCA9PSAweDgwICAmJgotCSAgICBhcnBoZHItPlBJRCAgID09IDB4MDYwOCkgCi0JCXJldHVybiAxOwotCWVsc2UgcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIEFSUCBQYWNrZXQgVHlwZQotICovCi0KLWludCBwcm9jZXNzX0FSUChhcnBoZHJfMTQ5MF90ICpBcnBQYWNrZXQsIHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQotCi0JYXJwaGRyX2ZyX3QgKmFycGhkciA9IChhcnBoZHJfZnJfdCAqKShBcnBQYWNrZXQgKyAxKTsgLyogU2tpcCBoZWFkZXIgKi8KLQlmcl9yeF9idWZfY3RsX3QqIGZyYnVmID0gY2FyZC0+cnhtYjsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0JZnJfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwkJCi0JCi0JLyogQmVmb3JlIHdlIHRyYW5zbWl0IEFSUCBwYWNrZXQsIHdlIG11c3QgY2hlY2sgCi0JICogdG8gc2VlIHRoYXQgd2UgYXJlIG5vdCBjdXJyZW50bHkgdHJhbnNtaXR0aW5nIGEgCi0JICogZnJhbWUgKGluICdpZl9zZW5kKCknKSBhbmQgdGhhdCB3ZSBhcmUgbm90IAotCSAqIGFscmVhZHkgaW4gYSAnZGVsYXllZCB0cmFuc21pdCcgc3RhdGUuICovCi0JaWYgKGNoZWNrX3R4X3N0YXR1cyhjYXJkLGRldikpewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsgCQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERpc2FibGluZyBjb21taW5pY2F0aW9uIHRvIHByb2Nlc3MgQVJQXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQlzZXRfYml0KEFSUF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpbl9kZXYgPSBkZXYtPmlwX3B0cjsKLQotCS8qIENoZWNrIHRoYXQgSVAgYWRkcmVzc2VzIGV4aXN0IGZvciBvdXIgbmV0d29yayBhZGRyZXNzICovCi0JaWYgKGluX2RldiA9PSBOVUxMIHx8IGluX2Rldi0+aWZhX2xpc3QgPT0gTlVMTCkgCi0JCXJldHVybiAtMTsKLQotCXN3aXRjaCAobnRvaHMoYXJwaGRyLT5hcl9vcCkpIHsKLQotCWNhc2UgMHgwODogIC8vIEludmVyc2UgQVJQIHJlcXVlc3QgIC0tIFNlbmQgUmVwbHksIGFkZCByb3V0ZS4KLQkJCQotCQkvKiBDaGVjayBmb3IgdmFsaWQgQWRkcmVzcyAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjdmQgUHRQIGFkZHIgLUluQXJwIFJlcTogJXUuJXUuJXUuJXVcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChhcnBoZHItPmFyX3NpcCkpOwotCi0KLQkJLyogQ2hlY2sgdGhhdCB0aGUgbmV0d29yayBhZGRyZXNzIGlzIHRoZSBzYW1lIGFzIG91cnMsIG9ubHkKLSAgICAgICAgICAgICAgICAgKiBpZiB0aGUgbmV0b3dyayBtYXNrIGlzIG5vdCAyNTUuMjU1LjI1NS4yNTUuIE90aGVyd2lzZQotICAgICAgICAgICAgICAgICAqIHRoaXMgY2hlY2sgd291bGQgbm90IG1ha2Ugc2Vuc2UgKi8KLQotCQlpZiAoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX21hc2sgIT0gMHhGRkZGRkZGRiAmJiAKLQkJICAgIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAmIGFycGhkci0+YXJfc2lwKSAhPSAKLQkJICAgIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAmIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCkpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IEludmFsaWQgUHRQIGFkZHJlc3MuICV1LiV1LiV1LiV1ICBJbkFSUCBpZ25vcmVkLlxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUsTklQUVVBRChhcnBoZHItPmFyX3NpcCkpOwotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbWFzayAldS4ldS4ldS4ldVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzaykpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb2NhbCAldS4ldS4ldS4ldVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSxOSVBRVUFEKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCkpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJaWYgKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCA9PSBhcnBoZHItPmFyX3NpcCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogTG9jYWwgYWRkciA9IFB0UCBhZGRyLiAgSW5BUlAgaWdub3JlZC5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQotCQlhcnBoZHItPmFyX29wID0gaHRvbnMoMHgwOSk7CS8qIEluQVJQIFJlcGx5ICovCi0KLQkJLyogU2V0IGFkZHJlc3NlcyAqLwotCQlhcnBoZHItPmFyX3RpcCA9IGFycGhkci0+YXJfc2lwOwotCQlhcnBoZHItPmFyX3NpcCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKLQotCQljaGFuLT5pcF9sb2NhbCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKLQkJY2hhbi0+aXBfcmVtb3RlID0gYXJwaGRyLT5hcl9zaXA7Ci0KLQkJZnJfc2VuZChjYXJkLCBmcmJ1Zi0+ZGxjaSwgMCwgZnJidWYtPmxlbmd0aCwgKHZvaWQgKilBcnBQYWNrZXQpOwotCi0JCWlmICh0ZXN0X2JpdChBUlBfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsgCQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBUlAgUHJvY2Vzc2VkIEVuYWJsaW5nIENvbW11bmljYXRpb24hXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJfQotCQljbGVhcl9iaXQoQVJQX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQotCQljaGFuLT5pcF9sb2NhbCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKLQkJY2hhbi0+aXBfcmVtb3RlID0gYXJwaGRyLT5hcl9zaXA7Ci0KLQkJLyogQWRkIFJvdXRlIEZsYWcgKi8KLQkJLyogVGhlIHJvdXRlIHdpbGwgYmUgYWRkZWQgaW4gdGhlIHBvbGxpbmcgcm91dGluZSBzbwotCQkgICB0aGF0IGl0IGlzIG5vdCBpbnRlcnJ1cHQgY29udGV4dC4gKi8KLQotCQljaGFuLT5yb3V0ZV9mbGFnID0gQUREX1JPVVRFOwotCQl0cmlnZ2VyX2ZyX3BvbGwgKGRldik7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIDB4MDk6ICAvLyBJbnZlcnNlIEFSUCByZXBseQotCi0JCS8qIENoZWNrIGZvciB2YWxpZCBBZGRyZXNzICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2ZCBQdFAgYWRkciAldS4ldS4ldS4ldSAtSW5BcnAgUmVwbHlcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIE5JUFFVQUQoYXJwaGRyLT5hcl9zaXApKTsKLQotCi0JCS8qIENvbXBhcmUgbmV0d29yayBhZGRyZXNzZXMsIG9ubHkgaWYgbmV0d29yayBtYXNrCi0gICAgICAgICAgICAgICAgICogaXMgbm90IDI1NS4yNTUuMjU1LjI1NSAgSXQgd291bGQgbm90IG1ha2Ugc2Vuc2UKLSAgICAgICAgICAgICAgICAgKiB0byBwZXJmb3JtIHRoaXMgdGVzdCBpZiB0aGUgbWFzayB3YXMgYWxsIDEncyAqLwotCi0JCWlmIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAhPSAweGZmZmZmZmZmICYmCi0JCSAgICAoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX21hc2sgJiBhcnBoZHItPmFyX3NpcCkgIT0gCi0JCQkoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX21hc2sgJiBpbl9kZXYtPmlmYV9saXN0LT5pZmFfbG9jYWwpKSB7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnZhbGlkIFB0UCBhZGRyZXNzLiAgSW5BUlAgaWdub3JlZC5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSByZWNlaXZlZCBJUCBhZGRyZXNzIGlzIG5vdAotICAgICAgICAgICAgICAgICAqIHRoZSBzYW1lIGFzIG91ciBvd24gbG9jYWwgYWRkcmVzcyAqLwotCQlpZiAoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsID09IGFycGhkci0+YXJfc2lwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTG9jYWwgYWRkciA9IFB0UCBhZGRyLiAgSW5BUlAgaWdub3JlZC5cbiIsIAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC0xOwotCQl9CQkJCi0KLQkJY2hhbi0+aXBfbG9jYWwgID0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsOwotCQljaGFuLT5pcF9yZW1vdGUgPSBhcnBoZHItPmFyX3NpcDsKLQotCQkvKiBBZGQgUm91dGUgRmxhZyAqLwotCQkvKiBUaGUgcm91dGUgd2lsbCBiZSBhZGRlZCBpbiB0aGUgcG9sbGluZyByb3V0aW5lIHNvCi0JCSAgIHRoYXQgaXQgaXMgbm90IGludGVycnVwdCBjb250ZXh0LiAqLwotCi0JCWNoYW4tPnJvdXRlX2ZsYWcgPSBBRERfUk9VVEU7Ci0JCWNoYW4tPmluYXJwID0gSU5BUlBfQ09ORklHVVJFRDsKLQkJdHJpZ2dlcl9mcl9wb2xsKGRldik7Ci0JCQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsgLy8gQVJQJ3MgYW5kIFJBUlAncyAtLSBTaG91bGRuJ3QgaGFwcGVuLgotCX0KLQotCXJldHVybiAwOwkKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHJpZ2dlcl9mcl9hcnAKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIAlBZGQgYW4gZnJfYXJwKCkgdGFzayBpbnRvIGEgYXJwCi0gKiAgICAgIHRpbWVyIGhhbmRsZXIgZm9yIGEgc3BlY2lmaWMgZGxjaS9pbnRlcmZhY2UuICAKLSAqICAgICAgVGhpcyB3aWxsIGtpY2sgdGhlIGZyX2FycCgpIHJvdXRpbmUgCi0gKiAgICAgIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuIAotICoKLSAqIFVzYWdlOgotICogCVRoaXMgdGltZXIgaXMgdXNlZCB0byBzZW5kIEFSUCByZXF1ZXN0cyBhdAotICogICAgICBjZXJ0YWluIHRpbWUgaW50ZXJ2YWxzLiAKLSAqIAlDYWxsZWQgYnkgYW4gaW50ZXJydXB0IHRvIHJlcXVlc3QgYW4gYWN0aW9uCi0gKiAgICAgIGF0IGEgbGF0ZXIgZGF0ZS4KLSAqLwkKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9hcnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0KLQltb2RfdGltZXIoJmNoYW4tPmZyX2FycF90aW1lciwgamlmZmllcyArIGNoYW4tPmluYXJwX2ludGVydmFsICogSFopOwotCXJldHVybjsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBBUlAgUmVxdWVzdCBBY3Rpb24KLSAqCi0gKglUaGlzIGZ1bmNpdG9uIGlzIGNhbGxlZCBieSB0aW1lciBpbnRlcnJ1cHQgdG8gc2VuZCBhbiBhcnAgcmVxdWVzdAotICogICAgICB0byB0aGUgcmVtb3RlIGVuZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBmcl9hcnAgKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKLQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0Jdm9sYXRpbGUgc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQlmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotCi0JLyogU2VuZCBBUlAgcGFja2V0cyBmb3IgYWxsIGRldnMnIHVudGlsCi0gICAgICAgICAqIEFSUCBzdGF0ZSBjaGFuZ2VzIHRvIENPTkZJR1VSRUQgKi8KLQotCWlmIChjaGFuLT5pbmFycCA9PSBJTkFSUF9SRVFVRVNUICYmCi0JICAgIGNoYW4tPmNvbW1vbi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEICYmIAotCSAgICBjYXJkLT53YW5kZXYuc3RhdGUgPT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCXNldF9iaXQoMCwmY2hhbi0+aW5hcnBfcmVhZHkpOwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX0FSUDsKLQkJZmxhZ3MtPmltYXNrIHw9IEZSX0lOVFJfVElNRVI7CQotCX0KLSAKLQlyZXR1cm47Ci19Ci0JCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQZXJmb3JtIHRoZSBJbnRlcnJ1cHQgVGVzdCBieSBydW5uaW5nIHRoZSBSRUFEX0NPREVfVkVSU0lPTiBjb21tYW5kIE1BWF9JTlRSXwotICogVEVTVF9DT1VOVEVSIHRpbWVzLgotICovCi1zdGF0aWMgaW50IGludHJfdGVzdCggc2RsYV90KiBjYXJkICkKLXsKLQlmcl9tYm94X3QqIG1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyLGk7Ci0KLSAgICAgICAgZXJyID0gZnJfc2V0X2ludHJfbW9kZShjYXJkLCBGUl9JTlRSX1JFQURZLCBjYXJkLT53YW5kZXYubXR1LCAwICk7Ci0JCi0JaWYgKGVyciA9PSBDTURfT0spIHsKLQotCQlmb3IgKCBpID0gMDsgaSA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUjsgaSsrICkgewotIAkJCS8qIFJ1biBjb21tYW5kIFJFQURfQ09ERV9WRVJTSU9OICovCi0JCQltYi0+Y21kLmxlbmd0aCAgPSAwOwotCQkJbWItPmNtZC5jb21tYW5kID0gRlJfUkVBRF9DT0RFX1ZFUlNJT047Ci0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkJCWlmIChlcnIgIT0gQ01EX09LKSAKLQkJCQlmcl9ldmVudChjYXJkLCBlcnIsIG1iKTsKLQkJfQotCQotCX0gZWxzZSB7Ci0JCXJldHVybiBlcnI7CQotCX0KLQotCWVyciA9IGZyX3NldF9pbnRyX21vZGUoIGNhcmQsIDAsIGNhcmQtPndhbmRldi5tdHUsIDAgKTsKLQotCWlmKCBlcnIgIT0gQ01EX09LICkgCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgVURQIGNhbGwgaXQgaXMuIEZQSVBFOE5EID8KLSAqLwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCogY2FyZCApCi17Ci0JZnJfdWRwX3BrdF90ICpmcl91ZHBfcGt0ID0gKGZyX3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsKLQotCS8qIFF1aWNrIEhBQ0sgKi8KLQkKLQkKLSAgICAgICAgaWYoKGZyX3VkcF9wa3QtPmlwX3BrdC5wcm90b2NvbCA9PSBVRFBNR01UX1VEUF9QUk9UT0NPTCkgJiYKLQkJKGZyX3VkcF9wa3QtPmlwX3BrdC52ZXJfaW5ldF9oZHJfbGVuZ3RoID09IDB4NDUpICYmCi0JCShmcl91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9PSAKLQkJbnRvaHMoY2FyZC0+d2FuZGV2LnVkcF9wb3J0KSkgJiYKLQkJKGZyX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9PSAKLQkJVURQTUdNVF9SRVFVRVNUKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cm5jbXAoZnJfdWRwX3BrdC0+d3BfbWdtdC5zaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEUE1HTVRfRlBJUEVfU0lHTkFUVVJFLCA4KSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVRFBfRlBJUEVfVFlQRTsKLQkJCX0KLQl9Ci0gICAgICAgIHJldHVybiBVRFBfSU5WQUxJRF9UWVBFOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplcyB0aGUgU3RhdGlzdGljcyB2YWx1ZXMgaW4gdGhlIGZyX2NoYW5uZWwgc3RydWN0dXJlLgotICovCi12b2lkIGluaXRfY2hhbl9zdGF0aXN0aWNzKCBmcl9jaGFubmVsX3QqIGNoYW4pCi17Ci0gICAgICAgIG1lbXNldCgmY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX2VudHJ5LCAwLAotCQlzaXplb2YoaWZfc2VuZF9zdGF0X3QpKTsKLSAgICAgICAgbWVtc2V0KCZjaGFuLT5kcnZzdGF0c19yeF9pbnRyLnJ4X2ludHJfbm9fc29ja2V0LCAwLAotICAgICAgICAgICAgICAgIHNpemVvZihyeF9pbnRyX3N0YXRfdCkpOwotICAgICAgICBtZW1zZXQoJmNoYW4tPmRydnN0YXRzX2dlbi5VRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyLCAwLAotICAgICAgICAgICAgICAgIHNpemVvZihwaXBlX21nbXRfc3RhdF90KSk7Ci19Ci0JCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZXMgdGhlIFN0YXRpc3RpY3MgdmFsdWVzIGluIHRoZSBTZGxhX3Qgc3RydWN0dXJlLgotICovCi12b2lkIGluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIHNkbGFfdCogY2FyZCApCi17Ci0JLyogSW50aWFsaXplIGdsb2JhbCBzdGF0aXN0aWNzIGZvciBhIGNhcmQgKi8KLSAgICAgICAgbWVtc2V0KCZjYXJkLT5zdGF0aXN0aWNzLmlzcl9lbnRyeSwgMCwgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlYWRfRExDSV9JQl9tYXBwaW5nKCBzZGxhX3QqIGNhcmQsIGZyX2NoYW5uZWxfdCogY2hhbiApCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwkKLQlkbGNpX0lCX21hcHBpbmdfdCogcmVzdWx0OyAKLQlpbnQgZXJyLCBjb3VudGVyLCBmb3VuZDsJCi0KLQlkbyB7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfUkVBRF9ETENJX0lCX01BUFBJTkc7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwkKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JaWYoIG1ib3gtPmNtZC5yZXN1bHQgIT0gMCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWFkIERMQ0kgSUIgTWFwcGluZyBmYWlsZWRcbiIsIAotCQkJY2hhbi0+bmFtZSk7Ci0JfQotCi0JY291bnRlciA9IG1ib3gtPmNtZC5sZW5ndGggLyBzaXplb2YoZGxjaV9JQl9tYXBwaW5nX3QpOwotCXJlc3VsdCA9ICh2b2lkICopbWJveC0+ZGF0YTsKLQkKLQlmb3VuZCA9IDA7Ci0JZm9yICg7IGNvdW50ZXI7IC0tY291bnRlciwgKytyZXN1bHQpIHsKLQkJaWYgKCByZXN1bHQtPmRsY2kgPT0gY2hhbi0+ZGxjaSApIHsKLQkJCWNoYW4tPklCX2FkZHIgPSByZXN1bHQtPmFkZHJfdmFsdWU7Ci0JCQlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCl7Ci0JICAgICAgICAgICAgIAkJY2hhbi0+ZGxjaV9pbnRfaW50ZXJmYWNlID0KLQkJCQkJKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJCQkJY2hhbi0+SUJfYWRkcik7Ci0gICAgICAgCQkJfWVsc2V7IAotCQkJCWNoYW4tPmRsY2lfaW50X2ludGVyZmFjZSA9IAotCQkJCQkodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyAKLQkJCQkJKGNoYW4tPklCX2FkZHIgJiAweDAwMDAxRkZGKSk7Ci0KLQkJCX0KLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwkKLQkJfSAKLQl9Ci0JaWYgKCFmb3VuZCkKLQkJcHJpbnRrKCBLRVJOX0lORk8gIiVzOiBETENJICVkIG5vdCBmb3VuZCBieSBJQiBNQVBQSU5HIGNtZFxuIiwgCi0JCWNhcmQtPmRldm5hbWUsIGNoYW4tPmRsY2kpOwotfQotCi0KLQotdm9pZCBzNTA4X3M1MTRfbG9jayhzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLQlpZiAoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci0JfWVsc2V7Ci0JCXNwaW5fbG9jaygmY2FyZC0+dS5mLmlmX3NlbmRfbG9jayk7Ci0JfQotCXJldHVybjsKLX0KLQotCi12b2lkIHM1MDhfczUxNF91bmxvY2soc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0JaWYgKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY2FyZC0+d2FuZGV2LmxvY2ssICpzbXBfZmxhZ3MpOwotCX1lbHNlewotCQlzcGluX3VubG9jaygmY2FyZC0+dS5mLmlmX3NlbmRfbG9jayk7Ci0JfQotCXJldHVybjsKLX0KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgUkVDRUlWRSBJTlRFUlJVUFQ6IEJPVFRPTSBIQUxGIEhBTkRMRVJTIAotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGJoX2VucXVldWUKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUluc2VydCBhIHJlY2VpdmVkIHBhY2tldCBpbnRvIGEgY2lyY3VsYXIKLSAqICAgICAgcnggcXVldWUuICBUaGlzIHBhY2tldCB3aWxsIGJlIHBpY2tlZCB1cCAKLSAqICAgICAgYnkgZnJfYmgoKSBhbmQgc2VudCB1cCB0aGUgc3RhY2sgdG8gdGhlCi0gKiAgICAgIHVzZXIuCi0gKiAgICAgICAJCi0gKiBVc2FnZTogCi0gKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSByeCBpbnRlcnJ1cHQsCi0gKiAgICAgIGluIEFQSSBtb2RlLgotICoKLSAqLwotCi1zdGF0aWMgaW50IGJoX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQkvKiBDaGVjayBmb3IgZnVsbCAqLwotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0KLQlpZiAoYXRvbWljX3JlYWQoJmNoYW4tPmJoX2J1ZmZfdXNlZCkgPT0gTUFYX0JIX0JVRkYpewotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm4gMTsgCi0JfQotCi0JKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF93cml0ZV0pLT5za2IgPSBza2I7Ci0KLQlpZiAoY2hhbi0+Ymhfd3JpdGUgPT0gKE1BWF9CSF9CVUZGLTEpKXsKLQkJY2hhbi0+Ymhfd3JpdGU9MDsKLQl9ZWxzZXsKLQkJKytjaGFuLT5iaF93cml0ZTsKLQl9Ci0KLQlhdG9taWNfaW5jKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHJpZ2dlcl9mcl9iaAotICoKLSAqIERlc2NyaXB0aW9uOgotICogCUtpY2sgdGhlIGZyX2JoKCkgaGFuZGxlcgotICoKLSAqIFVzYWdlOgotICoJcnggaW50ZXJydXB0IGNhbGxzIHRoaXMgZnVuY3Rpb24gZHVyaW5nCi0gKiAgICAgIHRoZSBBUEkgbW9kZS4gCi0gKi8KLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9iaCAoZnJfY2hhbm5lbF90ICpjaGFuKQotewotCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCZjaGFuLT50cV93b3JraW5nKSl7Ci0JCXdhbnBpcGVfcXVldWVfd29yaygmY2hhbi0+Y29tbW9uLndhbnBpcGVfd29yayk7Ci0JfQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGZyX2JoCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglGcmFtZSByZWxheSByZWNlaXZlIEJIIGhhbmRsZXIuIAotICoJRGVxdWV1ZSBkYXRhIGZyb20gdGhlIEJIIGNpcmN1bGFyIAotICoJYnVmZmVyIGFuZCBwYXNzIGl0IHVwIHRoZSBBUEkgc29jay4KLSAqICAgICAgIAkKLSAqIFJhdGlvbmFsZTogCi0gKglUaGlzIGZ1Y3Rpb24gaXMgdXNlZCB0byBvZmZsb2FkIHRoZSAKLSAqCXJ4X2ludGVycnVwdCBkdXJpbmcgQVBJIG9wZXJhdGlvbiBtb2RlLiAgCi0gKglUaGUgZnJfYmgoKSBmdW5jdGlvbiBleGVjdXRlcyBmb3IgZWFjaCAKLSAqCWRsY2kvaW50ZXJmYWNlLiAgCi0gKiAKLSAqICAgICAgT25jZSByZWNlaXZlIGludGVycnVwdCBjb3BpZXMgZGF0YSBmcm9tIHRoZQotICogICAgICBjYXJkIGludG8gYW4gc2tiIGJ1ZmZlciwgdGhlIHNrYiBidWZmZXIKLSAqICAJaXMgYXBwZW5kZWQgdG8gYSBjaXJjdWxhciBCSCBidWZmZXIuCi0gKiAgCVRoZW4gdGhlIGludGVycnVwdCBraWNrcyBmcl9iaCgpIHRvIGZpbmlzaCB0aGUKLSAqICAgICAgam9iIGF0IGEgbGF0ZXIgdGltZSAobm90IHdpdGhpbiB0aGUgaW50ZXJydXB0KS4KLSAqICAgICAgIAotICogVXNhZ2U6Ci0gKiAJSW50ZXJydXB0cyB1c2UgdGhpcyB0byBkZWZlciBhIHRhc2sgdG8gCi0gKiAgICAgIGEgcG9sbGluZyByb3V0aW5lLgotICoKLSAqLwkKLQotc3RhdGljIHZvaWQgZnJfYmgoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSA9PSAwKXsKLQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJcmV0dXJuOwotCX0KLQotCXdoaWxlIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSl7Ci0KLQkJaWYgKGNoYW4tPmNvbW1vbi5zayA9PSBOVUxMIHx8IGNoYW4tPmNvbW1vbi5mdW5jID09IE5VTEwpewotCQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCXNrYiAgPSAoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3JlYWRdKS0+c2tiOwotCi0JCWlmIChza2IgIT0gTlVMTCl7Ci0KLQkJCWlmIChjaGFuLT5jb21tb24uc2sgPT0gTlVMTCB8fCBjaGFuLT5jb21tb24uZnVuYyA9PSBOVUxMKXsKLQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkJCSsrY2hhbi0+aWZzdGF0cy5yeF9kcm9wcGVkOwotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJZnJfYmhfY2xlYW51cChkZXYpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoY2hhbi0+Y29tbW9uLmZ1bmMoc2tiLGRldixjaGFuLT5jb21tb24uc2spICE9IDApewotCQkJCS8qIFNvY2sgZnVsbCBjYW5ub3Qgc2VuZCwgcXVldWUgdXMgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFub3RoZXIgdHJ5ICovCi0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLnJlY2VpdmVfYmxvY2ssMSk7Ci0JCQkJcmV0dXJuOwotCQkJfWVsc2V7Ci0JCQkJZnJfYmhfY2xlYW51cChkZXYpOwotCQkJfQotCQl9ZWxzZXsKLQkJCWZyX2JoX2NsZWFudXAoZGV2KTsKLQkJfQotCX0JCi0JY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBmcl9iaF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCi0JKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF9yZWFkXSktPnNrYiA9IE5VTEw7Ci0KLQlpZiAoY2hhbi0+YmhfcmVhZCA9PSAoTUFYX0JIX0JVRkYtMSkpewotCQljaGFuLT5iaF9yZWFkPTA7Ci0JfWVsc2V7Ci0JCSsrY2hhbi0+YmhfcmVhZDsJCi0JfQotCi0JYXRvbWljX2RlYygmY2hhbi0+YmhfYnVmZl91c2VkKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgIFBPTEwgQkggSEFORExFUlMgQU5EIEtJQ0sgUk9VVElORVMgCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX2ZyX3BvbGwKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIAlBZGQgYSBmcl9wb2xsKCkgdGFzayBpbnRvIGEgdHFfc2NoZWR1bGVyIGJoIGhhbmRsZXIKLSAqICAgICAgZm9yIGEgc3BlY2lmaWMgZGxjaS9pbnRlcmZhY2UuICBUaGlzIHdpbGwga2ljawotICogICAgICB0aGUgZnJfcG9sbCgpIHJvdXRpbmUgYXQgYSBsYXRlciB0aW1lLiAKLSAqCi0gKiBVc2FnZToKLSAqIAlJbnRlcnJ1cHRzIHVzZSB0aGlzIHRvIGRlZmVyIGEgdGFrcyB0byAKLSAqICAgICAgYSBwb2xsaW5nIHJvdXRpbmUuCi0gKgotICovCQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNjaGVkdWxlX3dvcmsoJmNoYW4tPmZyX3BvbGxfd29yayk7Ci0JcmV0dXJuOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBmcl9wb2xsCi0gKgkKLSAqIFJhdGlvbmFsZToKLSAqIAlXZSBjYW5ub3QgbWFuaXB1bGF0ZSB0aGUgcm91dGluZyB0YWJsZXMsIG9yCi0gKiAgICAgIGlwIGFkZHJlc3NlcyB3aXRoaW5nIHRoZSBpbnRlcnJ1cHQuIFRoZXJlZm9yZQotICogICAgICB3ZSBtdXN0IHBlcmZvcm0gc3VjaCBhY3RvbnMgb3V0c2lkZSBhbiBpbnRlcnJ1cHQgCi0gKiAgICAgIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogRGVzY3JpcHRpb246CQotICoJRnJhbWUgcmVsYXkgcG9sbGluZyByb3V0aW5lLCByZXNwb25zaWJsZSBmb3IgCi0gKiAgICAgCXNodXR0aW5nIGRvd24gaW50ZXJmYWNlcyB1cG9uIGRpc2Nvbm5lY3QKLSAqICAgICAJYW5kIGFkZGluZy9yZW1vdmluZyByb3V0ZXMuIAotICogICAgICAKLSAqIFVzYWdlOiAgICAgICAgCi0gKiAJVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBmcmFtZSByZWxheQotICogCWRsY2kvaW50ZXJmYWNlIHRocm91Z2ggYSB0cV9zY2hlZHVsZSBib3R0b20gaGFsZi4KLSAqICAgICAgCi0gKiAgICAgIHRyaWdnZXJfZnJfcG9sbCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8ga2ljawotICogICAgICB0aGUgZnJfcG9sbCByb3V0aW5lLiAgCi0gKi8KLQotc3RhdGljIHZvaWQgZnJfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCi0JZnJfY2hhbm5lbF90KiBjaGFuOwotCXNkbGFfdCAqY2FyZDsKLQl1OCBjaGVja19nYXRld2F5PTA7Ci0KLQlpZiAoIWRldiB8fCAoY2hhbiA9IGRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JCi0JLyogKFJlKUNvbmZpZ3VyYWl0b24gaXMgaW4gcHJvZ3Jlc3MsIHN0b3Agd2hhdCB5b3UgYXJlIAotCSAqIGRvaW5nIGFuZCBnZXQgb3V0ICovCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGNoYW4tPmNvbW1vbi5zdGF0ZSl7Ci0KLQljYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0KLQkJaWYgKHRlc3RfYml0KERZTl9PUFRfT04sJmNoYW4tPmludGVyZmFjZV9kb3duKSAmJgotCQkgICAgIXRlc3RfYml0KERFVl9ET1dOLCAmY2hhbi0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICBkZXYtPmZsYWdzJklGRl9VUCl7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgaXMgRG93bi5cbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoZGV2LGRldi0+ZmxhZ3MmfklGRl9VUCk7Ci0JCQlzZXRfYml0KERFVl9ET1dOLCAmY2hhbi0+aW50ZXJmYWNlX2Rvd24pOwotCQkJY2hhbi0+cm91dGVfZmxhZyA9IE5PX1JPVVRFOwotCQkJCi0JCX1lbHNlewotCQkJaWYgKGNoYW4tPmluYXJwICE9IElOQVJQX05PTkUpCi0JCQkJcHJvY2Vzc19yb3V0ZShkZXYpOwkKLQkJfQotCQlicmVhazsKLQotCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQotCQlpZiAodGVzdF9iaXQoRFlOX09QVF9PTiwmY2hhbi0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICB0ZXN0X2JpdChERVZfRE9XTiwgJmNoYW4tPmludGVyZmFjZV9kb3duKSAmJgotCQkgICAgIShkZXYtPmZsYWdzJklGRl9VUCkpewotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJmYWNlICVzIGlzIFVwLlxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQotCQkJY2hhbmdlX2Rldl9mbGFncyhkZXYsZGV2LT5mbGFnc3xJRkZfVVApOwotCQkJY2xlYXJfYml0KERFVl9ET1dOLCAmY2hhbi0+aW50ZXJmYWNlX2Rvd24pOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKGNoYW4tPmluYXJwICE9IElOQVJQX05PTkUpewotCQkJcHJvY2Vzc19yb3V0ZShkZXYpOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKGNoYW4tPmdhdGV3YXkgJiYgY2hlY2tfZ2F0ZXdheSkKLQkJCWFkZF9nYXRld2F5KGNhcmQsZGV2KTsKLQotCQlicmVhazsKLQotCX0KLQotCXJldHVybjsJCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGNoZWNrX3R4X3N0YXR1cwotICoKLSAqIFJhdGlvbmFsZToKLSAqCVdlIGNhbm5vdCB0cmFuc21pdCBmcm9tIGFuIGludGVycnVwdCB3aGlsZQotICogICAgICB0aGUgaWZfc2VuZCBpcyB0cmFuc21pdHRpbmcgZGF0YS4gIFRoZXJlZm9yZSwKLSAqICAgICAgd2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSB0eCBidWZmZXJzIGFyZQotICogICAgICBiZWdpbiB1c2VkLCBiZWZvcmUgd2UgdHJhbnNtaXQgZnJvbSBhbgotICogICAgICBpbnRlcnJ1cHQuCQotICogCi0gKiBEZXNjcmlwdGlvbjoJCi0gKglDaGVja3Mgd2hldGhlciBpdCdzIHNhZmUgdG8gdXNlIHRoZSB0cmFuc21pdCAKLSAqICAgICAgYnVmZmVycy4gCi0gKgotICogVXNhZ2U6Ci0gKiAJQVJQIGFuZCBVRFAgaGFuZGxpbmcgcm91dGluZXMgdXNlIHRoaXMgZnVuY3Rpb24KLSAqICAgICAgYmVjYXVzZSwgdGhleSBuZWVkIHRvIHRyYW5zbWl0IGRhdGEgZHVyaW5nCi0gKiAgICAgIGFuIGludGVycnVwdC4KLSAqLwotCi1zdGF0aWMgaW50IGNoZWNrX3R4X3N0YXR1cyhzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0KLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpewotCQlpZiAodGVzdF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkgfHwKLQkJCXRlc3RfYml0KFNFTkRfVFhJUlFfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgfHwgKGNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcpKQotICAgICAJCXJldHVybiAxOyAKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogbW92ZV9kZXZfdG9fbmV4dAotICogIAotICogRGVzY3JpcHRpb246Ci0gKglNb3ZlIHRoZSBkZXYgcG9pbnRlciB0byB0aGUgbmV4dCBsb2NhdGlvbiBpbiB0aGUKLSAqICAgICAgbGluayBsaXN0LiAgQ2hlY2sgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIAotICogICAgICBsaXN0LCBpZiBzbyBzdGFydCBmcm9tIHRoZSBiZWdpbmluZy4KLSAqCi0gKiBVc2FnZToKLSAqIAlUaW1lciBpbnRlcnJ1cHQgdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIGVmZmljaWVudGx5Ci0gKiAgICAgIHN0ZXAgdGhyb3VnaCB0aGUgZGV2aWNlcyB0aGF0IG5lZWQgdG8gc2VuZCBBUlAgZGF0YS4KLSAqCi0gKi8KLQotc3RydWN0IG5ldF9kZXZpY2UgKm1vdmVfZGV2X3RvX25leHQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWlmIChjYXJkLT53YW5kZXYubmV3X2lmX2NudCAhPSAxKXsKLQkJaWYgKCEqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKQotCQkJcmV0dXJuIGNhcmQtPndhbmRldi5kZXY7Ci0JCWVsc2UKLQkJCXJldHVybiAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpOwotCX0KLQlyZXR1cm4gZGV2OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX2NvbmZpZ19mcgotICoKLSAqIFJhdGlvbmFsZToKLSAqCUFsbCBjb21tYW5kcyBtdXN0IGJlIHBlcmZvcm1lZCBpbnNpZGUgb2YgYSAgCi0gKiAgICAgIGludGVycnVwdC4gICAKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUtpY2sgdGhlIGNvbmZpZ19mcigpIHJvdXRpbmUgdGhyb3VnaHQgdGhlCi0gKiAgICAgIHRpbWVyIGludGVycnVwdC4KLSAqLwotCi0KLXN0YXRpYyB2b2lkIHRyaWdnZXJfY29uZmlnX2ZyIChzZGxhX3QgKmNhcmQpCi17Ci0JZnI1MDhfZmxhZ3NfdCogZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCWNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCWZsYWdzLT5pbWFzayB8PSBGUl9JTlRSX1RJTUVSOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGNvbmZpZ19mcgotICoKLSAqIFJhdGlvbmFsZToKLSAqIAlBbGwgY29tbWFuZHMgbXVzdCBiZSBwZXJmb3JtZWQgaW5zaWRlIG9mIGEgIAotICogICAgICBpbnRlcnJ1cHQuICAKLSAmCi0gKiBEZXNjcmlwdGlvbjoJCi0gKiAJQ29uZmlndXJlIGEgRExDSS4gVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZAotICogICAgICBieSBhIHRpbWVyX2ludGVycnVwdC4gIFRoZSBpZl9vcGVuKCkgZnVuY3Rpb24KLSAqICAgICAgdHJpZ2dlcnMgaXQuCi0gKgotICogVXNhZ2U6Ci0gKgluZXdfaWYoKSBjb2xsZWN0cyBhbGwgZGF0YSBuZWNlc3NhcnkgdG8KLSAqICAgICAgY29uZmlndXJlIHRoZSBETENJLiBJdCBzZXRzIHRoZSBjaGFuLT5kbGNpX3JlYWR5IAotICogICAgICBiaXQuICBXaGVuIHRoZSBpZl9vcGVuKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQKLSAqICAgICAgaXQgY2hlY2tzIHRoaXMgYml0LCBhbmQgaWYgaXRzIHNldCBpdCB0cmlnZ2VycwotICogICAgICB0aGUgdGltZXIgaW50ZXJydXB0IHRvIGV4ZWN1dGUgdGhlIGNvbmZpZ19mcigpCi0gKiAgICAgIGZ1bmN0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIGNvbmZpZ19mciAoc2RsYV90ICpjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JZnJfY2hhbm5lbF90ICpjaGFuOwotCi0JZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKSB7Ci0JCi0JCWlmICgoY2hhbj1kZXYtPnByaXYpID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJCi0JCWlmICghdGVzdF9iaXQoMCwmY2hhbi0+Y29uZmlnX2RsY2kpKQotCQkJY29udGludWU7Ci0KLQkJY2xlYXJfYml0KDAsJmNoYW4tPmNvbmZpZ19kbGNpKTsKLQotCQkvKiBJZiBzaWduYWxsaW5nIGlzIHNldCB0byBOTywgdGhlbiBzZXR1cCAKLSAgICAgICAgCSAqIERMQ0kgYWRkcmVzc2VzIHJpZ2h0IGF3YXkuICBEb24ndCBoYXZlIHRvIHdhaXQgZm9yCi0JCSAqIGxpbmsgdG8gY29ubmVjdC4gCi0JCSAqLwotCQlpZiAoY2FyZC0+d2FuZGV2LnNpZ25hbGxpbmcgPT0gV0FOT1BUX05PKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTaWduYWxsaW5nIHNldCB0byBOTzogTWFwcGluZyBETENJJ3NcbiIsCi0JCQkJCWNhcmQtPndhbmRldi5uYW1lKTsKLQkJCWlmIChmcl9pbml0X2RsY2koY2FyZCxjaGFuKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SOiBGYWlsZWQgdG8gY29uZmlndXJlIERMQ0kgJWkgIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJaWYgKGNhcmQtPndhbmRldi5zdGF0aW9uID09IFdBTk9QVF9DUEUpIHsKLQkKLQkJCXVwZGF0ZV9jaGFuX3N0YXRlKGRldik7CQotCQkJCi0JCQkvKiBDUEU6IGlzc3VlIGZ1bGwgc3RhdHVzIGVucXVpcnkgKi8KLQkJCWZyX2lzc3VlX2lzZihjYXJkLCBGUl9JU0ZfRlNFKTsKLQotCQl9IGVsc2UgewkKLQkJCS8qIEZSIHN3aXRjaDogYWN0aXZhdGUgRExDSShzKSAqLwotCQotCQkJLyogRm9yIFN3aXRjaCBlbXVsYXRpb24gd2UgaGF2ZSB0byBBREQgYW5kIEFDVElWQVRFCi0JCQkgKiB0aGUgRExDSShzKSB0aGF0IHdlcmUgY29uZmlndXJlZCB3aXRoIHRoZSBTRVRfRExDSV8KLQkJCSAqIENPTkZJR1VSQVRJT04gY29tbWFuZC4gQWRkIGFuZCBBY3RpdmF0ZSB3aWxsIGZhaWwgaWYKLQkJCSAqIERMQ0kgc3BlY2lmaWVkIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlzdC4KLQkJCSAqCi0JCQkgKiBBbHNvIElmX29wZW4gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLiBCdXQKLQkJCSAqIGl0IGRvZXMgbm90IGdldCBpbiBoZXJlIGZvciBhbGwgdGhlIGludGVyZmFjZS4gU28KLQkJIAkgKiB3ZSBoYXZlIHRvIHBhc3MgdGhlIGVudGlyZSBsaXN0IG9mIERMQ0kocykgdG8gYWRkIAotCQkJICogYWN0aXZhdGUgcm91dGluZXMuICAKLQkJCSAqLyAKLQkJCQotCQkJaWYgKCFjaGVja19kbGNpX2NvbmZpZyAoY2FyZCwgY2hhbikpewotCQkJCWZyX2FkZF9kbGNpKGNhcmQsIGNoYW4tPmRsY2kpOwotCQkJCWZyX2FjdGl2YXRlX2RsY2koY2FyZCwgY2hhbi0+ZGxjaSk7Ci0JCQl9Ci0JCX0KLQotCQljYXJkLT51LmYuZGxjaV90b19kZXZfbWFwW2NoYW4tPmRsY2ldID0gZGV2OwotCX0KLQlyZXR1cm47Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY29uZmlnX2ZyCi0gKgotICogUmF0aW9uYWxlOgotICoJQWxsIGNvbW1hbmRzIG11c3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGFuIGludGVycnVwdC4KLSAqIAotICogRGVzY3JpcHRpb246CQotICoJVHJpZ2dlciB1bmNvZmlnX2ZyKCkgZnVuY3Rpb24gdGhyb3VnaCAKLSAqICAgICAgdGhlIHRpbWVyIGludGVycnVwdC4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgdHJpZ2dlcl91bmNvbmZpZ19mcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQl2b2xhdGlsZSBzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotCWludCByZXNldF9jcml0aWNhbD0wOwotCQotCWlmICh0ZXN0X2JpdChQRVJJX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJY2xlYXJfYml0KFBFUklfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCXJlc2V0X2NyaXRpY2FsPTE7Ci0JfQotCQkKLQkvKiBydW4gdW5jb25maWdfZGxjaSgpIGZ1bmN0aW9uIAotICAgICAgICAgKiB0aHJvdWdodCB0aGUgdGltZXIgaW50ZXJydXB0ICovCi0Jc2V0X2JpdCgwLCh2b2lkKikmY2hhbi0+dW5jb25maWdfZGxjaSk7Ci0JY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRzsKLQlmbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9USU1FUjsKLQotCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0JdGltZW91dCA9IGppZmZpZXM7Ci0gICAgIAlmb3IoOzspIHsKLQotCQlpZighKGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRykpCi0JCQlicmVhazsKLQotICAgICAgICAgICAgIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0ICsgMSAqIEhaKSl7Ci0gICAgCQkJY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfVU5DT05GSUc7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGRlbGV0ZSBETENJICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsY2hhbi0+ZGxjaSk7Ci0gCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocmVzZXRfY3JpdGljYWwpewotCQlzZXRfYml0KFBFUklfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB1bmNvbmZpZ19mcgotICoKLSAqIFJhdGlvbmFsZToKLSAqCUFsbCBjb21tYW5kcyBtdXN0IGJlIGV4ZWN1dGVkIGR1cmluZyBhbiBpbnRlcnJ1cHQuCi0gKiAKLSAqIERlc2NyaXB0aW9uOgkKLSAqCVJlbW92ZSB0aGUgZGxjaSBmcm9tIGZpcm13YXJlLgotICoJVGhpcyBmdW5jaXRvbiBpcyB1c2VkIGluIE5PREUgc2h1dGRvd24uCi0gKi8KLQotc3RhdGljIHZvaWQgdW5jb25maWdfZnIgKHNkbGFfdCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWZyX2NoYW5uZWxfdCAqY2hhbjsKLQotCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSl7Ci0JCi0JCWlmICgoY2hhbj1kZXYtPnByaXYpID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJCi0JCWlmICghdGVzdF9iaXQoMCwmY2hhbi0+dW5jb25maWdfZGxjaSkpCi0JCQljb250aW51ZTsKLQotCQljbGVhcl9iaXQoMCwmY2hhbi0+dW5jb25maWdfZGxjaSk7Ci0KLQkJaWYgKGNhcmQtPndhbmRldi5zdGF0aW9uID09IFdBTk9QVF9OT0RFKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmNvbmZpZ3VyaW5nIERMQ0kgJWlcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsY2hhbi0+ZGxjaSk7Ci0JCQlmcl9kZWxldGVfZGxjaShjYXJkLGNoYW4tPmRsY2kpOwotCQl9Ci0JCWNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXBbY2hhbi0+ZGxjaV0gPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBzZXR1cF9mcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCSAgIGNoYXIgb3BfbW9kZSkKLXsKLQlmcl9jaGFubmVsX3QgKmNoYW49ZGV2LT5wcml2OwotCi0JaWYgKG9wX21vZGUgPT0gV0FOUElQRSkgewotCQljaGFuLT5mcl9oZWFkZXJbMF09UTkyMl9VSTsKLQkJCi0JCXN3aXRjaCAoaHRvbnMoc2tiLT5wcm90b2NvbCkpewotCQljYXNlIEVUSF9QX0lQOgotCQkJY2hhbi0+ZnJfaGVhZGVyWzFdPU5MUElEX0lQOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQkJCi0JCXJldHVybiAyOwotCX0KLQotCS8qIElmIHdlIGFyZSBpbiBicmlkZ2luZyBtb2RlLCB3ZSBtdXN0IGFwcGx5Ci0JICogYW4gRXRoZXJuZXQgaGVhZGVyCi0JICovCi0JaWYgKG9wX21vZGUgPT0gQlJJREdFIHx8IG9wX21vZGUgPT0gQlJJREdFX05PREUpIHsKLQkJLyogRW5jYXBzdWxhdGUgdGhlIHBhY2tldCBhcyBhIGJyaWRnZWQgRXRoZXJuZXQgZnJhbWUuICovCi0jaWZkZWYgREVCVUcKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuY2Fwc3VsYXRpbmcgc2tiIGZvciBmcmFtZSByZWxheVxuIiwgCi0JCQlkZXYtPm5hbWUpOwotI2VuZGlmCi0JCWNoYW4tPmZyX2hlYWRlclswXSA9IDB4MDM7Ci0JCWNoYW4tPmZyX2hlYWRlclsxXSA9IDB4MDA7Ci0JCWNoYW4tPmZyX2hlYWRlclsyXSA9IDB4ODA7Ci0JCWNoYW4tPmZyX2hlYWRlclszXSA9IDB4MDA7Ci0JCWNoYW4tPmZyX2hlYWRlcls0XSA9IDB4ODA7Ci0JCWNoYW4tPmZyX2hlYWRlcls1XSA9IDB4QzI7Ci0JCWNoYW4tPmZyX2hlYWRlcls2XSA9IDB4MDA7Ci0JCWNoYW4tPmZyX2hlYWRlcls3XSA9IDB4MDc7Ci0KLQkJLyogWXVjay4gKi8KLQkJc2tiLT5wcm90b2NvbCA9IEVUSF9QXzgwMl8zOwotCQlyZXR1cm4gODsKLQl9Ci0JCQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfZGxjaV9jb25maWcgKHNkbGFfdCAqY2FyZCwgZnJfY2hhbm5lbF90ICpjaGFuKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycj0wOwotCWZyX2NvbmZfdCAqY29uZj1OVUxMOwotCXVuc2lnbmVkIHNob3J0IGRsY2lfbnVtID0gY2hhbi0+ZGxjaTsKLQlpbnQgZGxjaV9vZmZzZXQ9MDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKLQkKLQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1JFQURfQ09ORklHOwotCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCW1ib3gtPmNtZC5kbGNpID0gZGxjaV9udW07IAkKLQotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkKLQlpZiAoZXJyID09IENNRF9PSyl7Ci0JCXJldHVybiAwOwotCX0KLQotCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCSAgICAgZGV2PSooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpCi0JCXNldF9jaGFuX3N0YXRlKGRldixXQU5fRElTQ09OTkVDVEVEKTsKLQkKLQlwcmludGsoS0VSTl9JTkZPICJETENJICVpIE5vdCBjb25maWd1cmVkLCBjb25maWd1cmluZ1xuIixkbGNpX251bSk7Ci0JCi0JbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9DT01NX0RJU0FCTEU7Ci0JbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ01EX09LKXsKLQkJZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KTsKLQkJcmV0dXJuIDI7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsZWQgQ29tbXVuaWNhdGlvbnMgXG4iKTsKLQkKLQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1JFQURfQ09ORklHOwotCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCW1ib3gtPmNtZC5kbGNpID0gMDsgCQotCi0JZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQotCWlmIChlcnIgIT0gQ01EX09LKXsKLQkJZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KTsKLQkJcmV0dXJuIDI7Ci0JfQotCQotCWNvbmYgPSAoZnJfY29uZl90ICopbWJveC0+ZGF0YTsKLQotCWRsY2lfb2Zmc2V0PTA7Ci0JZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKSB7Ci0JCWZyX2NoYW5uZWxfdCAqY2hhbl90bXAgPSBkZXYtPnByaXY7Ci0JCWNvbmYtPmRsY2lbZGxjaV9vZmZzZXRdID0gY2hhbl90bXAtPmRsY2k7CQkKLQkJZGxjaV9vZmZzZXQrKzsKLQl9Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiR290IEZyIGNvbmZpZ3VyYXRpb24gQnVmZmVyIExlbmd0aCBpcyAleCBEbGNpICVpIERsY2kgT2ZmICVpXG4iLAotCQltYm94LT5jbWQubGVuZ3RoLAotCQltYm94LT5jbWQubGVuZ3RoID4gMHgyMCA/IGNvbmYtPmRsY2lbMF0gOiAtMSwgCi0JCWRsY2lfb2Zmc2V0ICk7Ci0JCi0JbWJveC0+Y21kLmxlbmd0aCA9IDB4MjAgKyBkbGNpX29mZnNldCoyOwotCi0JbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfQ09ORklHOwotCW1ib3gtPmNtZC5kbGNpID0gMDsgCi0KLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSyl7Ci0JCWZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCk7Ci0JCXJldHVybiAyOwotCX0KLQotCWluaXRpYWxpemVfcnhfdHhfYnVmZmVycyAoY2FyZCk7Ci0KLQkKLQlwcmludGsoS0VSTl9JTkZPICJDb25maWd1cmFpdG9uIFN1Y2NlZGVkIGZvciBuZXcgRExDSSAlaVxuIixkbGNpX251bSk7Ci0KLQlpZiAoZnJfY29tbV9lbmFibGUgKGNhcmQpKXsKLQkJcmV0dXJuIDI7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgQ29tbXVuaWNhdGlvbnMgXG4iKTsKLQotCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkgewotCQlmcl9jaGFubmVsX3QgKmNoYW5fdG1wID0gZGV2LT5wcml2OwotCQlmcl9pbml0X2RsY2koY2FyZCxjaGFuX3RtcCk7Ci0JCWZyX2FkZF9kbGNpKGNhcmQsIGNoYW5fdG1wLT5kbGNpKTsKLQkJZnJfYWN0aXZhdGVfZGxjaShjYXJkLCBjaGFuX3RtcC0+ZGxjaSk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRU5EIE9GIENPTkZJR1VSQUlUT04gJWlcbiIsZGxjaV9udW0pOwotCQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplX3J4X3R4X2J1ZmZlcnMgKHNkbGFfdCAqY2FyZCkKLXsKLQlmcl9idWZfaW5mb190KiBidWZfaW5mbzsKLQkKLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkKLSAgICAgICAgICAgICAgICBidWZfaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIEZSX01CX1ZFQ1RPUiArCi0JCQlGUjUwOF9SWEJDX09GRlMpOwotCi0gICAgICAgICAgICAgICAgY2FyZC0+cnhtYiA9ICh2b2lkKikoYnVmX2luZm8tPnJzZV9uZXh0ICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT51LmYucnhtYl9iYXNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsgY2FyZC0+aHcuZHBtYmFzZSk7IAotCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5mLnJ4bWJfbGFzdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopKGJ1Zl9pbmZvLT5yc2VfYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAoYnVmX2luZm8tPnJzZV9udW0gLSAxKSAqIHNpemVvZihmcl9yeF9idWZfY3RsX3QpICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmh3LmRwbWJhc2UpOwotCX1lbHNlewkKLQkJYnVmX2luZm8gPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBGUjUwOF9SWEJDX09GRlMpOwotCi0JCWNhcmQtPnJ4bWIgPSAodm9pZCopKGJ1Zl9pbmZvLT5yc2VfbmV4dCAtCi0JCQlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQkJCi0JCWNhcmQtPnUuZi5yeG1iX2Jhc2UgPQotCQkJKHZvaWQqKShidWZfaW5mby0+cnNlX2Jhc2UgLQotCQkJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JCQotCQljYXJkLT51LmYucnhtYl9sYXN0ID0KLQkJCSh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsKLQkJCShidWZfaW5mby0+cnNlX251bSAtIDEpICogc2l6ZW9mKGZyX3J4X2J1Zl9jdGxfdCkgLQotCQkJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JfQotCi0JY2FyZC0+dS5mLnJ4X2Jhc2UgPSBidWZfaW5mby0+YnVmX2Jhc2U7Ci0JY2FyZC0+dS5mLnJ4X3RvcCAgPSBidWZfaW5mby0+YnVmX3RvcDsKLQotCWNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcgPSAwOwotCi0JcmV0dXJuOwotfQotCi0JCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoqKioqKiBFbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYV9mdDEuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2Z0MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDY1MjhhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2Z0MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhX2NoZGxjLmMJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuIENpc2NvIEhETEMgbW9kdWxlLgotKgotKiBBdXRob3JzOiAJTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgotKgkJR2lkZW9uIEhhY2sgIAotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTE5OTkgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBTZXAgMzAsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBGaXhlZCBkeW5hbWljIElQIGFuZCByb3V0ZSBzZXR1cC4KLSogU2VwIDIzLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgU01QIHN1cHBvcnQsIGZpeGVkIHRyYWNpbmcgCi0qIFNlcCAxMywgMTk5OSAgTmVuYWQgQ29yYmljCVNwbGl0IHVwIFBvcnQgMCBhbmQgMSBpbnRvIHNlcGFyYXRlIGRldmljZXMuCi0qIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTNTE0IGFkYXB0ZXIuCi0qIE9jdCAzMCwgMTk5OAlKYXNwcmVldCBTaW5naAlBZGRlZCBTdXBwb3J0IGZvciBDSERMQyBBUEkgKEhETEMgU1RSRUFNSU5HKS4KLSogT2N0IDI4LCAxOTk4CUphc3ByZWV0IFNpbmdoCUFkZGVkIFN1cHBvcnQgZm9yIER1YWwgUG9ydCBDSERMQy4KLSogQXVnIDA3LCAxOTk4CURhdmlkIEZvbmcJSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CQkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnBpcGUuaD4JLyogV0FOUElQRSBjb21tb24gdXNlciBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEXyogZGVmaW5lcyAqLwotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpIG1hY3JvICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4JCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2NoZGxjLmg+CQkvKiBDSERMQyBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMgKi8KLQotLyoqKioqKiBEZWZpbmVzICYgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHJlYXNvbnMgZm9yIGVuYWJsaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgb24gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VEUCAgIAkweDAwMDEKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VQREFURQkweDAwMDIKLSAKLSNkZWZpbmUJQ0hETENfREZMVF9EQVRBX0xFTgkxNTAwCQkvKiBkZWZhdWx0IE1UVSAqLwotI2RlZmluZSBDSERMQ19IRFJfTEVOCQkxCi0KLSNkZWZpbmUgSUZGX1BPSU5UVE9QT0lOVCAweDEwCi0KLSNkZWZpbmUgV0FOUElQRSAweDAwCi0jZGVmaW5lIEFQSQkweDAxCi0jZGVmaW5lIENIRExDX0FQSSAweDAxCi0KLSNkZWZpbmUgUE9SVCh4KSAgICh4ID09IDAgPyAiUFJJTUFSWSIgOiAiU0VDT05EQVJZIiApCi0KLSAKLS8qKioqKipEYXRhIFN0cnVjdHVyZXMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGluIHRoZSBwcml2YXRlIGRhdGEgYXJlYSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KLSAqIFRoZSBjYXJkIHN0cnVjdHVyZSB1c2VkIHRvIG9jY3VweSB0aGUgcHJpdmF0ZSBhcmVhIGJ1dCBub3cgdGhlIGZvbGxvd2luZyAKLSAqIHN0cnVjdHVyZSB3aWxsIGluY29ycG9yYXRlIHRoZSBjYXJkIHN0cnVjdHVyZSBhbG9uZyB3aXRoIENIRExDIHNwZWNpZmljIGRhdGEKLSAqLwotCi10eXBlZGVmIHN0cnVjdCBjaGRsY19wcml2YXRlX2FyZWEKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmU7Ci0Jc2RsYV90CQkqY2FyZDsKLQlpbnQgCQlUcmFjaW5nRW5hYmxlZDsJCS8qIEZvciBlbmFibGluZyBUcmFjaW5nICovCi0JdW5zaWduZWQgbG9uZyAJY3Vycl90cmFjZV9hZGRyOwkvKiBVc2VkIGZvciBUcmFjaW5nICovCi0JdW5zaWduZWQgbG9uZyAJc3RhcnRfdHJhY2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIAllbmRfdHJhY2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIAliYXNlX2FkZHJfdHJhY2VfYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgCWVuZF9hZGRyX3RyYWNlX2J1ZmZlcjsKLQl1bnNpZ25lZCBzaG9ydCAJbnVtYmVyX3RyYWNlX2VsZW1lbnRzOwotCXVuc2lnbmVkICAJYXZhaWxhYmxlX2J1ZmZlcl9zcGFjZTsKLQl1bnNpZ25lZCBsb25nIAlyb3V0ZXJfc3RhcnRfdGltZTsKLQl1bnNpZ25lZCBjaGFyIAlyb3V0ZV9zdGF0dXM7Ci0JdW5zaWduZWQgY2hhciAJcm91dGVfcmVtb3ZlZDsKLQl1bnNpZ25lZCBsb25nIAl0aWNrX2NvdW50ZXI7CQkvKiBGb3IgNXMgdGltZW91dCBjb3VudGVyICovCi0JdW5zaWduZWQgbG9uZyAJcm91dGVyX3VwX3RpbWU7Ci0gICAgICAgIHUzMiAgICAgICAgICAgICBJUF9hZGRyZXNzOwkJLyogSVAgYWRkcmVzc2luZyAqLwotICAgICAgICB1MzIgICAgICAgICAgICAgSVBfbmV0bWFzazsKLQl1bnNpZ25lZCBjaGFyICBtYzsJCQkvKiBNdWxpdGNhc3Qgc3VwcG9ydCBvbi9vZmYgKi8KLQl1bnNpZ25lZCBzaG9ydCB1ZHBfcGt0X2xndGg7CQkvKiB1ZHAgcGFja2V0IHByb2Nlc3NpbmcgKi8KLQljaGFyIHVkcF9wa3Rfc3JjOwotCWNoYXIgdWRwX3BrdF9kYXRhW01BWF9MR1RIX1VEUF9NR05UX1BLVF07Ci0JdW5zaWduZWQgc2hvcnQgdGltZXJfaW50X2VuYWJsZWQ7Ci0JY2hhciB1cGRhdGVfY29tbXNfc3RhdHM7CQkvKiB1cGRhdGluZyBjb21tcyBzdGF0cyAqLwotCS8vRklYTUU6IGFkZCBkcml2ZXIgc3RhdHMgYXMgcGVyIGZyYW1lIHJlbGF5IQotCi19IGNoZGxjX3ByaXZhdGVfYXJlYV90OwotCi0vKiBSb3V0ZSBTdGF0dXMgb3B0aW9ucyAqLwotI2RlZmluZSBOT19ST1VURQkweDAwCi0jZGVmaW5lIEFERF9ST1VURQkweDAxCi0jZGVmaW5lIFJPVVRFX0FEREVECTB4MDIKLSNkZWZpbmUgUkVNT1ZFX1JPVVRFCTB4MDMKLQotCi0vKioqKioqIEZ1bmN0aW9uIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFdBTiBsaW5rIGRyaXZlciBlbnRyeSBwb2ludHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIFdBTiByb3V0ZXIgbW9kdWxlLiAqLwotc3RhdGljIGludCB3cGZ0MV9leGVjIChzdHJ1Y3Qgc2RsYSAqY2FyZCwgdm9pZCAqdV9jbWQsIHZvaWQgKnVfZGF0YSk7Ci1zdGF0aWMgaW50IGNoZGxjX3JlYWRfdmVyc2lvbiAoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpOwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpOwotCi0vKioqKioqIFB1YmxpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBXQU5QSVBFIG1vZHVsZSBkdXJpbmcgc2V0dXAuICBBdCB0aGlzCi0gKiBwb2ludCBhZGFwdGVyIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYW5kIGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgbyByZWFkIGZpcm13YXJlIHZlcnNpb24gKHRvIG1ha2Ugc3VyZSBpdCdzIGFsaXZlKQotICogIG8gY29uZmlndXJlIGFkYXB0ZXIKLSAqICBvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSBhZGFwdGVyIGRhdGEgc3BhY2UuCi0gKgotICogUmV0dXJuOgkwCW8uay4KLSAqCQk8IDAJZmFpbHVyZS4KLSAqLwotaW50IHdwZnQxX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZikKLXsKLQl1bnNpZ25lZCBjaGFyIHBvcnRfbnVtOwotCWludCBlcnI7Ci0KLQl1bmlvbgotCQl7Ci0JCWNoYXIgc3RyWzgwXTsKLQkJfSB1OwotCXZvbGF0aWxlIENIRExDX01BSUxCT1hfU1RSVUNUKiBtYjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIxOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIElEICovCi0JaWYgKGNvbmYtPmNvbmZpZ19pZCAhPSBXQU5DT05GSUdfQ0hETEMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgY29uZmlndXJhdGlvbiBJRCAldSFcbiIsCi0JCQkJICBjYXJkLT5kZXZuYW1lLCBjb25mLT5jb25maWdfaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBVc2UgcHJpbWFyeSBwb3J0ICovCi0JY2FyZC0+dS5jLmNvbW1fcG9ydCA9IDA7Ci0JCi0KLQkvKiBJbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyAqLwotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJY2FyZC0+bWJveCAgPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlOwotCX1lbHNleyAKLQkJY2FyZC0+bWJveCA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2UgKyBQUklfQkFTRV9BRERSX01CX1NUUlVDVDsKLQl9Ci0KLQltYiA9IG1iMSA9IGNhcmQtPm1ib3g7Ci0KLQlpZiAoIWNhcmQtPmNvbmZpZ3VyZWQpewotCi0JCS8qIFRoZSBib2FyZCB3aWxsIHBsYWNlIGFuICdJJyBpbiB0aGUgcmV0dXJuIGNvZGUgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcwotCSAgIAlyZWFkeSB0byBhY2NlcHQgY29tbWFuZHMuICBXZSBleHBlY3QgdGhpcyB0byBiZSBjb21wbGV0ZWQgaW4gbGVzcwotICAgICAgICAgICAJdGhhbiAxIHNlY29uZC4gKi8KLQotCQl0aW1lb3V0ID0gamlmZmllczsKLQkJd2hpbGUgKG1iLT5yZXR1cm5fY29kZSAhPSAnSScpCS8qIFdhaXQgMXMgZm9yIGJvYXJkIHRvIGluaXRpYWxpemUgKi8KLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQgKyAxKkhaKSkgYnJlYWs7Ci0KLQkJaWYgKG1iLT5yZXR1cm5fY29kZSAhPSAnSScpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IEluaXRpYWxpemF0aW9uIG5vdCBjb21wbGV0ZWQgYnkgYWRhcHRlclxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlBsZWFzZSBjb250YWN0IFNhbmdvbWEgcmVwcmVzZW50YXRpdmUuXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JLyogUmVhZCBmaXJtd2FyZSB2ZXJzaW9uLiAgTm90ZSB0aGF0IHdoZW4gYWRhcHRlciBpbml0aWFsaXplcywgaXQKLQkgKiBjbGVhcnMgdGhlIG1haWxib3gsIHNvIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgZmlyc3QgY29tbWFuZCB3YXMKLQkgKiBleGVjdXRlZCBzdWNjZXNzZnVsbHkgd2hlbiBpbiBmYWN0IGl0IHdhcyBtZXJlbHkgZXJhc2VkLiBUbyB3b3JrCi0JICogYXJvdW5kIHRoaXMsIHdlIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbW1hbmQgdHdpY2UuCi0JICovCi0KLQlpZiAoY2hkbGNfcmVhZF92ZXJzaW9uKGNhcmQsIHUuc3RyKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBGVDEgQ29uZmlndXJhdGlvbiBmaXJtd2FyZSB2JXNcbiIsCi0JCWNhcmQtPmRldm5hbWUsIHUuc3RyKTsgCi0KLQljYXJkLT5pc3IJCQk9IE5VTEw7Ci0JY2FyZC0+cG9sbAkJCT0gTlVMTDsKLQljYXJkLT5leGVjCQkJPSAmd3BmdDFfZXhlYzsKLQljYXJkLT53YW5kZXYudXBkYXRlCQk9IE5VTEw7Ci0gCWNhcmQtPndhbmRldi5uZXdfaWYJCT0gTlVMTDsKLQljYXJkLT53YW5kZXYuZGVsX2lmCQk9IE5VTEw7Ci0JY2FyZC0+d2FuZGV2LnN0YXRlCQk9IFdBTl9EVUFMUE9SVDsKLQljYXJkLT53YW5kZXYudWRwX3BvcnQgICAJPSBjb25mLT51ZHBfcG9ydDsKLQotCWNhcmQtPndhbmRldi5uZXdfaWZfY250ID0gMDsKLQotCS8qIFRoaXMgaXMgZm9yIHRoZSBwb3J0cyBsaW5rIHN0YXRlICovCi0JY2FyZC0+dS5jLnN0YXRlID0gV0FOX0RJU0NPTk5FQ1RFRDsKLQkKLQkvKiByZXNldCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSAndXBkYXRlKCknIHByb2MgaGFzIGJlZW4gY2FsbGVkICovCi0JY2FyZC0+dS5jLnVwZGF0ZV9jYWxsX2NvdW50ID0gMDsKLQkKLQljYXJkLT53YW5kZXYudHRsID0gMHg3RjsKLQljYXJkLT53YW5kZXYuaW50ZXJmYWNlID0gMDsgCi0KLQljYXJkLT53YW5kZXYuY2xvY2tpbmcgPSAwOwotCi0JcG9ydF9udW0gPSBjYXJkLT51LmMuY29tbV9wb3J0OwotCi0JLyogU2V0dXAgUG9ydCBCcHMgKi8KLQotICAgICAgIAljYXJkLT53YW5kZXYuYnBzID0gMDsKLQotCWNhcmQtPndhbmRldi5tdHUgPSBNSU5fTEdUSF9DSERMQ19EQVRBX0NGRzsKLQotCS8qIFNldCB1cCB0aGUgaW50ZXJydXB0IHN0YXR1cyBhcmVhICovCi0JLyogUmVhZCB0aGUgQ0hETEMgQ29uZmlndXJhdGlvbiBhbmQgb2J0YWluOiAKLQkgKglQdHIgdG8gc2hhcmVkIG1lbW9yeSBpbmZvciBzdHJ1Y3QKLSAgICAgICAgICogVXNlIHRoaXMgcG9pbnRlciB0byBjYWxjdWxhdGUgdGhlIHZhbHVlIG9mIGNhcmQtPnUuYy5mbGFncyAhCi0gCSAqLwotCW1iMS0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWIxLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYjEpID8gbWIxLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCWNoZGxjX2Vycm9yKGNhcmQsIGVyciwgbWIxKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpewotICAgICAgICAgICAgICAgCWNhcmQtPnUuYy5mbGFncyA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgCQkoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iMS0+ZGF0YSktPgotCQkJcHRyX3NoYXJlZF9tZW1faW5mb19zdHJ1Y3QpKTsKLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLmZsYWdzID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iMS0+ZGF0YSktPgotCQkJcHRyX3NoYXJlZF9tZW1faW5mb19zdHJ1Y3QgJSBTRExBX1dJTkRPV1NJWkUpKTsKLQl9Ci0KLQljYXJkLT53YW5kZXYuc3RhdGUgPSBXQU5fRlQxX1JFQURZOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBGVDEgQ29uZmlnIFJlYWR5ICFcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3cGZ0MV9leGVjKHNkbGFfdCAqY2FyZCwgdm9pZCAqdV9jbWQsIHZvaWQgKnVfZGF0YSkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGxlbjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCopJm1ib3gtPmNvbW1hbmQsIHVfY21kLCBzaXplb2YoZnQxX2V4ZWNfY21kX3QpKSl7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWxlbiA9IG1ib3gtPmJ1ZmZlcl9sZW5ndGg7Ci0KLQlpZiAobGVuKSB7Ci0JCWlmKCBjb3B5X2Zyb21fdXNlcigodm9pZCopJm1ib3gtPmRhdGEsIHVfZGF0YSwgbGVuKSl7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQotCS8qIGV4ZWN1dGUgY29tbWFuZCAqLwotCWlmICghc2RsYV9leGVjKG1ib3gpKXsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JLyogcmV0dXJuIHJlc3VsdCAqLwotCWlmKCBjb3B5X3RvX3VzZXIodV9jbWQsICh2b2lkKikmbWJveC0+Y29tbWFuZCwgc2l6ZW9mKGZ0MV9leGVjX2NtZF90KSkpewotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlsZW4gPSBtYm94LT5idWZmZXJfbGVuZ3RoOwotCi0JaWYgKGxlbiAmJiB1X2RhdGEgJiYgY29weV90b191c2VyKHVfZGF0YSwgKHZvaWQqKSZtYm94LT5kYXRhLCBsZW4pKXsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIGZpcm13YXJlIGNvZGUgdmVyc2lvbi4KLSAqCVB1dCBjb2RlIHZlcnNpb24gYXMgQVNDSUkgc3RyaW5nIGluIHN0ci4gCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cikKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBsZW47Ci0JY2hhciBlcnI7Ci0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT0RFX1ZFUlNJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JaWYoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCX0KLQllbHNlIGlmIChzdHIpIHsgIC8qIGlzIG5vdCBudWxsICovCi0JCWxlbiA9IG1iLT5idWZmZXJfbGVuZ3RoOwotCQltZW1jcHkoc3RyLCBtYi0+ZGF0YSwgbGVuKTsKLQkJc3RyW2xlbl0gPSAnXDAnOwotCX0KLQlyZXR1cm4gKGVycik7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmlybXdhcmUgZXJyb3IgaGFuZGxlci4KLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbmV2ZXIgZmlybXdhcmUgY29tbWFuZCByZXR1cm5zIG5vbi16ZXJvCi0gKglyZXR1cm4gY29kZS4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfZXJyb3IgKHNkbGFfdCAqY2FyZCwgaW50IGVyciwgQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1iKQotewotCXVuc2lnbmVkIGNtZCA9IG1iLT5jb21tYW5kOwotCi0Jc3dpdGNoIChlcnIpIHsKLQotCWNhc2UgQ01EX1RJTUVPVVQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjbWQpOwotCQlicmVhazsKLQotCWNhc2UgUzUxNF9CT1RIX1BPUlRTX1NBTUVfQ0xLX01PREU6Ci0JCWlmKGNtZCA9PSBTRVRfQ0hETENfQ09ORklHVVJBVElPTikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICIlczogQ29uZmlndXJlIGJvdGggcG9ydHMgZm9yIHRoZSBzYW1lIGNsb2NrIHNvdXJjZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCwgZXJyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYV9wcHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRiNDg5Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYV9wcHAuYworKysgL2Rldi9udWxsCkBAIC0xLDM0MzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfcHBwLmMJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuIFBQUCBtb2R1bGUuCi0qCi0qIEF1dGhvcjogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRmViIDI4LCAyMDAxICBOZW5hZCBDb3JiaWMJbyBVcGRhdGVkIGlmX3R4X3RpbWVvdXQoKSByb3V0aW5lIGZvciAKLSogCQkJCSAgMi40Llgga2VybmVscy4KLSogTm92IDI5LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCB0aGUgMi40Lngga2VybmVsIHN1cHBvcnQ6Ci0qIAkJCQkgIGdldF9pcF9hZGRyZXNzKCkgZnVuY3Rpb24gaGFzIG1vdmVkCi0qIAkJCQkgIGludG8gdGhlIHBwcF9wb2xsKCkgcm91dGluZS4gSXQgY2Fubm90Ci0qIAkJCQkgIGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4KLSogTm92IDA3LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCBzZWN1cml0eSBmZWF0dXJlcyBmb3IgVURQIGRlYnVnZ2luZzoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW55IGFsbCBhbmQgc3BlY2lmeSBhbGxvd2VkIHJlcXVlc3RzLgotKiBNYXkgMDIsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEFkZGVkIHRoZSBkeW5hbWljIGludGVyZmFjZSBzaHV0ZG93bgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4gV2hlbiB0aGUgbGluayBnb2VzIGRvd24sIHRoZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsgaW50ZXJmYWNlIElGRl9VUCBmbGFnIGlzIHJlc2V0LgotKiBNYXIgMDYsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEJ1ZyBGaXg6IGNvcnJ1cHRlZCBtYm94IHJlY292ZXJ5LgotKiBGZWIgMjUsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBvIEZpeGVkIHRoZSBGVDEgVURQIGRlYnVnZ2VyIHByb2JsZW0uCi0qIEZlYiAwOSwgMjAwMCAgTmVuYWQgQ29yaWJjICAgIG8gU2h1dGRvd24gYnVnIGZpeC4gdXBkYXRlKCkgd2FzIGNhbGxlZAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggTlVMTCBkZXYgcG9pbnRlcjogbm8gY2hlY2suCi0qIEphbiAyNCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIG8gRGlzYWJsZWQgdXNlIG9mIENNRCBjb21wbGV0ZSBpbnRlci4KLSogRGV2IDE1LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgbyBGaXhlZCB1cCBoZWFkZXIgZmlsZXMgZm9yIDIuMC5YIGtlcm5lbHMKLSogT2N0IDI1LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgbyBTdXBwb3J0IGZvciAyLjAuWCBrZXJuZWxzCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZWQgZHluYW1pYyByb3V0ZSBwcm9jZXNzaW5nIGludG8gCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwb2xsaW5nIHJvdXRpbmUuCi0qIE9jdCAwNywgMTk5OSAgTmVuYWQgQ29yYmljICAgIG8gU3VwcG9ydCBmb3IgUzUxNCBQQ0kgY2FyZC4gIAotKiAgICAgICAgICAgICAgIEdpZGVvbiBIYWNrICAgICBvIFVQRCBhbmQgVXBkYXRlcyBleGVjdXRlZCB1c2luZyB0aW1lciBpbnRlcnJ1cHQKLSogU2VwIDEwLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgbyBGaXhlZCB1cCB0aGUgL3Byb2Mgc3RhdGlzdGljcwotKiBKdWwgMjAsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIFJlbW92ZSB0aGUgcG9sbGluZyByb3V0aW5lcyBhbmQgdXNlIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgaW5zdGVhZC4KLSogU2VwIDE3LCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gVXBkYXRlcyBmb3IgMi4yLlggS2VybmVscy4KLSogQXVnIDEzLCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gSW1wcm92ZWQgTGluZSBUcmFjaW5nLgotKiBKdW4gMjIsIDE5OTgJRGF2aWQgRm9uZwlvIEFkZGVkIHJlbW90ZSBJUCBhZGRyZXNzIGFzc2lnbm1lbnQKLSogTWFyIDE1LCAxOTk4CUFsYW4gQ294CW8gMi4xLjh4IGJhc2ljIHBvcnQuCi0qIEFwciAxNiwgMTk5OAlKYXNwcmVldCBTaW5naAlvIHVzaW5nIGh0b25zKCkgZm9yIHRoZSBJUFggcHJvdG9jb2wuCi0qIERlYyAwOSwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIFBBUCBhbmQgQ0hBUC4KLSoJCQkJbyBJbXBsZW1lbnRlZCBuZXcgcm91dGluZXMgbGlrZSAKLSoJCQkJICBwcHBfc2V0X2luYm5kX2F1dGgoKSwgcHBwX3NldF9vdXRibmRfYXV0aCgpLAotKgkJCQkgIHRva2VuaXplKCkgYW5kIHN0cnN0cmlwKCkuCi0qIE5vdiAyNywgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIHByb3RlY3Rpb24gYWdhaW5zdCBlbmFibGluZyBvZiBpcnFzIAotKgkJCQkgIHdoaWxlIHRoZXkgaGF2ZSBiZWVuIGRpc2FibGVkLgotKiBOb3YgMjQsIDE5OTcgIEphc3ByZWV0IFNpbmdoICBvIEZpeGVkIGFub3RoZXIgUkFDRSBjb25kaXRpb24gY2F1c2VkIGJ5Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsaW5nIGFuZCBlbmFibGluZyBvZiBpcnFzLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIEFkZGVkIG5ldyBjb3VudGVycyBmb3Igc3RhdHMgb24gZGlzYWJsZS9lbmFibGUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlFzLgotKiBOb3YgMTAsIDE5OTcJSmFzcHJlZXQgU2luZ2gJbyBJbml0aWFsaXplZCAnc2tiLT5tYWMucmF3JyB0byAnc2tiLT5kYXRhJwotKgkJCQkgIGJlZm9yZSBldmVyeSBuZXRpZl9yeCgpLgotKgkJCQlvIEZyZWUgdXAgdGhlIGRldmljZSBzdHJ1Y3R1cmUgaW4gZGVsX2lmKCkuCi0qIE5vdiAwNywgMTk5NwlKYXNwcmVldCBTaW5naAlvIENoYW5nZWQgdGhlIGRlbGF5IHRvIHplcm8gZm9yIExpbmUgdHJhY2luZwotKgkJCQkgIGNvbW1hbmQuCi0qIE9jdCAyMCwgMTk5NyAJSmFzcHJlZXQgU2luZ2gJbyBBZGRlZCBob29rcyBpbiBmb3IgUm91dGVyIFVQIHRpbWUuCi0qIE9jdCAxNiwgMTk5NwlKYXNwcmVldCBTaW5naCAgbyBUaGUgY3JpdGljYWwgZmxhZyBpcyB1c2VkIHRvIG1haW50YWluIGZsb3cKLSoJCQkJICBjb250cm9sIGJ5IGF2b2lkaW5nIFJBQ0UgY29uZGl0aW9ucy4gIFRoZSAKLSoJCQkJICBjbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpIGFyZSB0YWtlbiBvdXQuCi0qCQkJCSAgQSBuZXcgc3RydWN0dXJlLCAicHBwX3ByaXZhdGVfYXJlYSIsIGlzIGFkZGVkIAotKgkJCQkgIHRvIHByb3ZpZGUgRHJpdmVyIFN0YXRpc3RpY3MuICAgCi0qIEp1bCAyMSwgMTk5NyAJSmFzcHJlZXQgU2luZ2gJbyBQcm90ZWN0ZWQgY2FsbHMgdG8gc2RsYV9wZWVrKCkgYnkgYWRkaW5nIAotKgkJCQkgIHNhdmVfZmxhZ3MoKSwgY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKS4KLSogSnVsIDA3LCAxOTk3CUphc3ByZWV0IFNpbmdoICBvIEFkZGVkIGNvbmZpZ3VyYWJsZSBUVEwgZm9yIFVEUCBwYWNrZXRzCi0qCQkJCW8gQWRkZWQgYWJpbGl0eSB0byBkaXNjYXJkIG11bGl0Y2FzdCBhbmQKLSoJCQkJICBicm9hY2FzdCBzb3VyY2UgYWRkcmVzc2VkIHBhY2tldHMuCi0qIEp1biAyNywgMTk5NyAJSmFzcHJlZXQgU2luZ2gJbyBBZGRlZCBGVDEgbW9uaXRvciBjYXBhYmlsaXRpZXMKLSoJCQkJICBOZXcgY2FzZSAoMHgyNSkgc3RhdGVtZW50IGluIGlmX3NlbmQgcm91dGluZS4KLSoJCQkJICBBZGRlZCBhIGdsb2JhbCB2YXJpYWJsZSByQ291bnQgdG8ga2VlcCB0cmFjawotKgkJCQkgIG9mIEZUMSBzdGF0dXMgZW5hYmxlZCBvbiB0aGUgYm9hcmQuCi0qIE1heSAyMiwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIGNoYW5nZSBpbiB0aGUgUFBQX1NFVF9DT05GSUcgY29tbWFuZCBmb3IKLSoJCQkJNTA4IGNhcmQgdG8gcmVmbGVjdCBjaGFuZ2VzIGluIHRoZSBuZXcgCi0qCQkJCXBwcDUwOC5zZm0gZm9yIHN1cHBvcnRpbmc6Y29udGlub3VzIHRyYW5zbWlzc2lvbgotKgkJCQlvZiBDb25maWd1cmUtUmVxdWVzdCBwYWNrZXRzIHdpdGhvdXQgcmVjZWl2aW5nIGEKLSoJCQkJcmVwbHkgCQkJCQotKgkJCQlPUi1lZCAweDMwMCB0byBjb25mX2ZsYWdzIAotKgkJCSAgICAgICAgbyBDaGFuZ2VkIGNvbm5lY3RfdG1vdXQgZnJvbSA5MDAgdG8gMAotKiBNYXkgMjEsIDE5OTcJSmFzcHJlZXQgU2luZ2ggIG8gRml4ZWQgVURQIE1hbmFnZW1lbnQgZm9yIG11bHRpcGxlIGJvYXJkcwotKiBBcHIgMjUsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICAgbyBhZGRlZCBVRFAgTWFuYWdlbWVudCBzdHVmZgotKiBNYXIgMTEsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICBWZXJzaW9uIDMuMS4xCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGZpeGVkICgrMSkgYnVnIGluIHJ4X2ludHIoKQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBjaGFuZ2VkIGlmX3NlbmQoKSB0byByZXR1cm4gMCBpZgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW5kZXYuY3JpdGljYWwoKSBpcyB0cnVlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGZyZWUgc29ja2V0IGJ1ZmZlciBpbiBpZl9zZW5kKCkgaWYKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIDAgCi0qIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKLSoJCQkJIG8gaW1wbGVtZW50ZWQgZXhlYygpIGVudHJ5IHBvaW50Ci0qIEphbiAwNiwgMTk5NwlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnBpcGUuaD4JLyogV0FOUElQRSBjb21tb24gdXNlciBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEXyogZGVmaW5lcyAqLwotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogaHRvbnMoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpIG1hY3JvICovCi0KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxsaW51eC9zZGxhX3BwcC5oPgkJLyogUFBQIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFzZm0uaD4JCS8qIFM1MTQgVHlwZSBEZWZpbml0aW9uICovCi0vKioqKioqIERlZmluZXMgJiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlQUFBfREZMVF9NVFUJMTUwMAkJLyogZGVmYXVsdCBNVFUgKi8KLSNkZWZpbmUJUFBQX01BWF9NVFUJNDAwMAkJLyogbWF4aW11bSBNVFUgKi8KLSNkZWZpbmUgUFBQX0hEUl9MRU4JMQotCi0jZGVmaW5lIE1BWF9JUF9FUlJPUlMgMTAwIAotCi0jZGVmaW5lCUNPTk5FQ1RfVElNRU9VVAkoOTAqSFopCQkvKiBsaW5rIGNvbm5lY3Rpb24gdGltZW91dCAqLwotI2RlZmluZQlIT0xEX0RPV05fVElNRQkoNSpIWikJCS8qIGxpbmsgaG9sZCBkb3duIHRpbWUgOiBDaGFuZ2VkIGZyb20gMzAgdG8gNSAqLwotCi0vKiBGb3IgaGFuZGxlX0lQWFdBTigpICovCi0jZGVmaW5lIENWSGV4VG9Bc2NpaShiKSAoKCh1bnNpZ25lZCBjaGFyKShiKSA+ICh1bnNpZ25lZCBjaGFyKTkpID8gKCh1bnNpZ25lZCBjaGFyKSdBJyArICgodW5zaWduZWQgY2hhcikoYikgLSAodW5zaWduZWQgY2hhcikxMCkpIDogKCh1bnNpZ25lZCBjaGFyKScwJyArICh1bnNpZ25lZCBjaGFyKShiKSkpCi0KLS8qIE1hY3JvIGZvciBlbmFibGluZy9kaXNhYmxpbmcgZGVidWdnaW5nIGNvbW1lbnRzICovCi0vLyNkZWZpbmUgTkVYX0RFQlVHCi0jaWZkZWYgTkVYX0RFQlVHCi0jZGVmaW5lIE5FWF9QUklOVEsoZm9ybWF0LCBhLi4uKSBwcmludGsoZm9ybWF0LCAjIyBhKQotI2Vsc2UKLSNkZWZpbmUgTkVYX1BSSU5USyhmb3JtYXQsIGEuLi4pCi0jZW5kaWYgLyogTkVYX0RFQlVHICovIAotCi0jZGVmaW5lIERDRChhKSAgICggYSAmIDB4MDggPyAiSElHSCIgOiAiTE9XIiApCi0jZGVmaW5lIENUUyhhKSAgICggYSAmIDB4MjAgPyAiSElHSCIgOiAiTE9XIiApCi0jZGVmaW5lIExDUChhKSAgICggYSA9PSAweDA5ID8gIk9QRU4iIDogIkNMT1NFRCIgKQotI2RlZmluZSBJUChhKSAgICAoIGEgPT0gMHgwOSA/ICJFTkFCTEVEIiA6ICJESVNBQkxFRCIgKQotCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUgIAkweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQJMHgwMgotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVURQCQkweDA0Ci0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9DT05GSUcJCTB4MjAKLQotLyogU2V0IENvbmZpZ3VyYXRvbiBDb21tYW5kIERlZmluaXRpb25zICovCi0jZGVmaW5lIFBFUkNFTlRfVFhfQlVGRgkJCTYwCi0jZGVmaW5lIFRJTUVfQkVUV0VFTl9DT05GX1JFUSAgCQkzMAotI2RlZmluZSBUSU1FX0JFVFdFRU5fUEFQX0NIQVBfUkVRCTMwCi0jZGVmaW5lIFdBSVRfUEFQX0NIQVBfV0lUSE9VVF9SRVBMWSAgICAgMzAwCi0jZGVmaW5lIFdBSVRfQUZURVJfRENEX0NUU19MT1cgICAgICAgICAgNQotI2RlZmluZSBUSU1FX0RDRF9DVFNfTE9XX0FGVEVSX0xOS19ET1dOIDEwCi0jZGVmaW5lIFdBSVRfRENEX0hJR0hfQUZURVJfRU5BQkxFX0NPTU0gOTAwCi0jZGVmaW5lIE1BWF9DT05GX1JFUV9XSVRIT1VUX1JFUExZICAgICAgMTAKLSNkZWZpbmUgTUFYX1RFUk1fUkVRX1dJVEhPVVRfUkVQTFkgICAgICAyCi0jZGVmaW5lIE5VTV9DT05GX05BS19XSVRIT1VUX1JFUExZICAgICAgNQotI2RlZmluZSBOVU1fQVVUSF9SRVFfV0lUSE9VVF9SRVBMWSAgICAgIDEwCi0KLSNkZWZpbmUgRU5EX09GRlNFVCAweDFGMAotCi0KLS8qKioqKipEYXRhIFN0cnVjdHVyZXMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGluIHRoZSBwcml2YXRlIGRhdGEgYXJlYSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KLSAqIFRoZSBjYXJkIHN0cnVjdHVyZSB1c2VkIHRvIG9jY3VweSB0aGUgcHJpdmF0ZSBhcmVhIGJ1dCBub3cgdGhlIGZvbGxvd2luZyAKLSAqIHN0cnVjdHVyZSB3aWxsIGluY29ycG9yYXRlIHRoZSBjYXJkIHN0cnVjdHVyZSBhbG9uZyB3aXRoIFBQUCBzcGVjaWZpYyBkYXRhCi0gKi8KLSAgCi10eXBlZGVmIHN0cnVjdCBwcHBfcHJpdmF0ZV9hcmVhCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlOwotCXNkbGFfdCogY2FyZDsJCi0JdW5zaWduZWQgbG9uZyByb3V0ZXJfc3RhcnRfdGltZTsJLypyb3V0ZXIgc3RhcnQgdGltZSBpbiBzZWMgKi8KLQl1bnNpZ25lZCBsb25nIHRpY2tfY291bnRlcjsJCS8qdXNlZCBmb3IgNSBzZWNvbmQgY291bnRlciovCi0JdW5zaWduZWQgbWM7CQkJCS8qbXVsdGljYXN0IHN1cHBvcnQgb24gb3Igb2ZmKi8KLQl1bnNpZ25lZCBjaGFyIGVuYWJsZV9JUFg7Ci0JdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcjsKLQl1bnNpZ25lZCBjaGFyIHBhcDsKLQl1bnNpZ25lZCBjaGFyIGNoYXA7Ci0JdW5zaWduZWQgY2hhciBzeXNuYW1lWzMxXTsJCS8qIHN5c3RlbSBuYW1lIGZvciBpbi1ibmQgYXV0aCovCi0JdW5zaWduZWQgY2hhciB1c2VyaWRbNTExXTsJCS8qIGxpc3Qgb2YgdXNlciBpZHMgKi8KLQl1bnNpZ25lZCBjaGFyIHBhc3N3ZFs1MTFdOwkJLyogbGlzdCBvZiBwYXNzd29yZHMgKi8KLQl1bnNpZ25lZCBwcm90b2NvbDsJCQkvKiBTS0IgUHJvdG9jb2wgKi8KLQl1MzIgaXBfbG9jYWw7CQkJCS8qIExvY2FsIElQIEFkZHJlc3MgKi8KLQl1MzIgaXBfcmVtb3RlOwkJCQkvKiByZW1vdGUgSVAgQWRkcmVzcyAqLwotCi0JdTMyIGlwX2xvY2FsX3RtcDsKLQl1MzIgaXBfcmVtb3RlX3RtcDsKLQkKLQl1bnNpZ25lZCBjaGFyIHRpbWVyX2ludF9lbmFibGVkOwkvKiBXaG8gZW5hYmxlZCB0aGUgdGltZXIgaW50ZXIqLwotCXVuc2lnbmVkIGNoYXIgdXBkYXRlX2NvbW1zX3N0YXRzOwkvKiBVc2VkIGJ5IHVwZGF0ZSBmdW5jdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgY3Vycl90cmFjZV9hZGRyOwkJLyogVHJhY2UgaW5mb3JtYXRpb24gKi8KLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3RyYWNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBlbmRfdHJhY2VfYWRkcjsKLQotCXVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlX2Rvd247CQkvKiBCcmluZCBkb3duIGludGVyZmFjZSB3aGVuIGNoYW5uZWwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2VzIGRvd24gKi8KLQl1bnNpZ25lZCBsb25nIGNvbmZpZ193YWl0X3RpbWVvdXQ7CS8qIEFmdGVyIGlmX29wZW4oKSBpZiBpbiBkeW5hbWljIGlmIG1vZGUsCi0JCQkJCQkgICB3YWl0IGEgZmV3IHNlY29uZHMgYmVmb3JlIGNvbmZpZ3VyaW5nICovCi0JCi0JdW5zaWduZWQgc2hvcnQgdWRwX3BrdF9sZ3RoOwotCWNoYXIgIHVkcF9wa3Rfc3JjOwotICAgICAgCWNoYXIgIHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotCi0JLyogUFBQIHNwZWNpZmljIHN0YXRpc3RpY3MgKi8KLQotCWlmX3NlbmRfc3RhdF90IGlmX3NlbmRfc3RhdDsKLQlyeF9pbnRyX3N0YXRfdCByeF9pbnRyX3N0YXQ7Ci0JcGlwZV9tZ210X3N0YXRfdCBwaXBlX21nbXRfc3RhdDsKLQotCXVuc2lnbmVkIGxvbmcgcm91dGVyX3VwX3RpbWU7IAotCi0JLyogUG9sbGluZyB3b3JrIHF1ZXVlIGVudHJ5LiBFYWNoIGludGVyZmFjZQotICAgICAgICAgKiBoYXMgaXRzIG93biB3b3JrIHF1ZXVlIGVudHJ5LCB3aGljaCBpcyB1c2VkCi0gICAgICAgICAqIHRvIGRlZmVyIGV2ZW50cyBmcm9tIHRoZSBpbnRlcnJ1cHQgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcG9sbF93b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0IHBvbGxfZGVsYXlfdGltZXI7Ci0KLQl1OCBnYXRld2F5OwotCXU4IGNvbmZpZ19wcHA7Ci0JdTggaXBfZXJyb3I7Ci0JCi19cHBwX3ByaXZhdGVfYXJlYV90OwotCi0vKiB2YXJpYWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBlbmFibGluZy9kaXNhYmxpbmcgRlQxIG1vbml0b3Igc3RhdHVzICovCi1zdGF0aWMgaW50IHJDb3VudCA9IDA7Ci0KLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBXQU4gbGluayBkcml2ZXIgZW50cnkgcG9pbnRzLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IHRoZSBXQU4gcm91dGVyIG1vZHVsZS4gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYpOwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICB3YW5pZl9jb25mX3QgKmNvbmYpOwotc3RhdGljIGludCBkZWxfaWYoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qIFdBTlBJUEUtc3BlY2lmaWMgZW50cnkgcG9pbnRzICovCi1zdGF0aWMgaW50IHdwcF9leGVjIChzdHJ1Y3Qgc2RsYSAqY2FyZCwgdm9pZCAqdV9jbWQsIHZvaWQgKnVfZGF0YSk7Ci0KLS8qIE5ldHdvcmsgZGV2aWNlIGludGVyZmFjZSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaWZfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwgCi0JCSAgICAgdm9pZCAqZGFkZHIsIHZvaWQgKnNhZGRyLCB1bnNpZ25lZCBsZW4pOwotCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi1zdGF0aWMgaW50IGlmX3JlYnVpbGRfaGRyKHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaWZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCi0vKiBQUFAgZmlybXdhcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBwcHBfcmVhZF92ZXJzaW9uKHNkbGFfdCAqY2FyZCwgY2hhciAqc3RyKTsKLXN0YXRpYyBpbnQgcHBwX3NldF9vdXRibmRfYXV0aChzZGxhX3QgKmNhcmQsIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSk7Ci1zdGF0aWMgaW50IHBwcF9zZXRfaW5ibmRfYXV0aChzZGxhX3QgKmNhcmQsIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSk7Ci1zdGF0aWMgaW50IHBwcF9jb25maWd1cmUoc2RsYV90ICpjYXJkLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgcHBwX3NldF9pbnRyX21vZGUoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBjaGFyIG1vZGUpOwotc3RhdGljIGludCBwcHBfY29tbV9lbmFibGUoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyBpbnQgcHBwX2NvbW1fZGlzYWJsZShzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBwcHBfY29tbV9kaXNhYmxlX3NodXRkb3duKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHBwcF9nZXRfZXJyX3N0YXRzKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHBwcF9zZW5kKHNkbGFfdCAqY2FyZCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBwcm90byk7Ci1zdGF0aWMgaW50IHBwcF9lcnJvcihzZGxhX3QgKmNhcmQsIGludCBlcnIsIHBwcF9tYm94X3QgKm1iKTsKLQotc3RhdGljIHZvaWQgd3BwX2lzcihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgcnhfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgZXZlbnRfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgdGltZXJfaW50cihzZGxhX3QgKmNhcmQpOwotCi0vKiBCYWNrZ3JvdW5kIHBvbGxpbmcgcm91dGluZXMgKi8KLXN0YXRpYyB2b2lkIHByb2Nlc3Nfcm91dGUoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIHJldHJpZ2dlcl9jb21tKHNkbGFfdCAqY2FyZCk7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHJlYWRfaW5mbyggc2RsYV90ICpjYXJkICk7Ci1zdGF0aWMgaW50IHJlYWRfY29ubmVjdGlvbl9pbmZvIChzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgcmVtb3ZlX3JvdXRlKCBzZGxhX3QgKmNhcmQgKTsKLXN0YXRpYyBpbnQgY29uZmlnNTA4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBzaG93X2Rpc2NfY2F1c2Uoc2RsYV90ICogY2FyZCwgdW5zaWduZWQgY2F1c2UpOwotc3RhdGljIGludCByZXBseV91ZHAoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYm94X2xlbiApOwotc3RhdGljIHZvaWQgcHJvY2Vzc191ZHBfbWdtdF9wa3Qoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKLQkJCQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEpOwotc3RhdGljIHZvaWQgaW5pdF9wcHBfdHhfcnhfYnVmZiggc2RsYV90ICpjYXJkICk7Ci1zdGF0aWMgaW50IGludHJfdGVzdCggc2RsYV90ICpjYXJkICk7Ci1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKnNrYiAsIHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBpbml0X3BwcF9wcml2X3N0cnVjdCggcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhKTsKLXN0YXRpYyB2b2lkIGluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIHNkbGFfdCAqY2FyZCApOwotc3RhdGljIGludCB0b2tlbml6ZShjaGFyICpzdHIsIGNoYXIgKip0b2tlbnMpOwotc3RhdGljIGNoYXIqIHN0cnN0cmlwKGNoYXIgKnN0ciwgY2hhciAqcyk7Ci1zdGF0aWMgaW50IGNoa19iY2FzdF9tY2FzdF9hZGRyKHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotc3RhdGljIGludCBjb25maWdfcHBwIChzZGxhX3QgKik7Ci1zdGF0aWMgdm9pZCBwcHBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHRyaWdnZXJfcHBwX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBwcHBfcG9sbF9kZWxheSAodW5zaWduZWQgbG9uZyBkZXZfcHRyKTsKLQotCi1zdGF0aWMgaW50IFJlYWRfY29ubmVjdGlvbl9pbmZvOwotc3RhdGljIGludCBJbnRyX3Rlc3RfY291bnRlcjsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhdmFpbGFibGVfYnVmZmVyX3NwYWNlOwotCi0KLS8qIElQWCBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIHN3aXRjaF9uZXRfbnVtYmVycyh1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCAKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGluY29taW5nKTsKLXN0YXRpYyBpbnQgaGFuZGxlX0lQWFdBTih1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCBjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGVuYWJsZV9QWCwgCi0JCQkgdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlciwgdW5zaWduZWQgc2hvcnQgcHJvdG8pOwotCi0vKiBMb2NrIEZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgczUwOF9sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCBzNTA4X3VubG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotCi1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcF9wcml2YXRlX2FyZWFfdCogcHBwX3ByaXZfYXJlYSApOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGNhbGNfY2hlY2tzdW0gKGNoYXIgKmRhdGEsIGludCBsZW4pOwotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tIChzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBkZXRlY3RfYW5kX2ZpeF90eF9idWcgKHNkbGFfdCAqY2FyZCk7Ci0KLS8qKioqKiogUHVibGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFBQUCBwcm90b2NvbCBpbml0aWFsaXphdGlvbiByb3V0aW5lLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIG1haW4gV0FOUElQRSBtb2R1bGUgZHVyaW5nIHNldHVwLiAgQXQgdGhpcwotICogcG9pbnQgYWRhcHRlciBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGFuZCBmaXJtd2FyZSBpcyBydW5uaW5nLgotICogIG8gcmVhZCBmaXJtd2FyZSB2ZXJzaW9uICh0byBtYWtlIHN1cmUgaXQncyBhbGl2ZSkKLSAqICBvIGNvbmZpZ3VyZSBhZGFwdGVyCi0gKiAgbyBpbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyBvZiB0aGUgYWRhcHRlciBkYXRhIHNwYWNlLgotICoKLSAqIFJldHVybjoJMAlvLmsuCi0gKgkJPCAwCWZhaWx1cmUuCi0gKi8KLWludCB3cHBfaW5pdChzZGxhX3QgKmNhcmQsIHdhbmRldl9jb25mX3QgKmNvbmYpCi17Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzOwotCXVuaW9uCi0JewotCQljaGFyIHN0cls4MF07Ci0JfSB1OwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gSUQgKi8KLQlpZiAoY29uZi0+Y29uZmlnX2lkICE9IFdBTkNPTkZJR19QUFApIHsKLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gSUQgJXUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY29uZi0+Y29uZmlnX2lkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl9Ci0KLQkvKiBJbml0aWFsaXplIG1pc2NlbGxhbmVvdXMgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyBvbiB0aGUgYWRhcHRlciAqLwotCXN3aXRjaCAoY2FyZC0+aHcudHlwZSkgewotCi0JCWNhc2UgU0RMQV9TNTA4OgotCQkJY2FyZC0+bWJveCA9KHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgUFBQNTA4X01CX09GRlMpOwotCQkJY2FyZC0+ZmxhZ3M9KHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgUFBQNTA4X0ZMR19PRkZTKTsKLQkJCWJyZWFrOwotCQkKLQkJY2FzZSBTRExBX1M1MTQ6Ci0JCQljYXJkLT5tYm94ID0odm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBQUFA1MTRfTUJfT0ZGUyk7Ci0JCQljYXJkLT5mbGFncz0odm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBQUFA1MTRfRkxHX09GRlMpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JfQotCWZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkvKiBSZWFkIGZpcm13YXJlIHZlcnNpb24uICBOb3RlIHRoYXQgd2hlbiBhZGFwdGVyIGluaXRpYWxpemVzLCBpdAotCSAqIGNsZWFycyB0aGUgbWFpbGJveCwgc28gaXQgbWF5IGFwcGVhciB0aGF0IHRoZSBmaXJzdCBjb21tYW5kIHdhcwotCSAqIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSB3aGVuIGluIGZhY3QgaXQgd2FzIG1lcmVseSBlcmFzZWQuIFRvIHdvcmsKLQkgKiBhcm91bmQgdGhpcywgd2UgZXhlY3V0ZSB0aGUgZmlyc3QgY29tbWFuZCB0d2ljZS4KLQkgKi8KLQlpZiAocHBwX3JlYWRfdmVyc2lvbihjYXJkLCBOVUxMKSB8fCBwcHBfcmVhZF92ZXJzaW9uKGNhcmQsIHUuc3RyKSkKLQkJcmV0dXJuIC1FSU87Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJ1bm5pbmcgUFBQIGZpcm13YXJlIHYlc1xuIixjYXJkLT5kZXZuYW1lLCB1LnN0cik7IAotCS8qIEFkanVzdCBjb25maWd1cmF0aW9uIGFuZCBzZXQgZGVmYXVsdHMgKi8KLQljYXJkLT53YW5kZXYubXR1ID0gKGNvbmYtPm10dSkgPwotCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPm10dSwgUFBQX01BWF9NVFUpIDogUFBQX0RGTFRfTVRVOwotCi0JY2FyZC0+d2FuZGV2LmJwcwk9IGNvbmYtPmJwczsKLQljYXJkLT53YW5kZXYuaW50ZXJmYWNlCT0gY29uZi0+aW50ZXJmYWNlOwotCWNhcmQtPndhbmRldi5jbG9ja2luZwk9IGNvbmYtPmNsb2NraW5nOwotCWNhcmQtPndhbmRldi5zdGF0aW9uCT0gY29uZi0+c3RhdGlvbjsKLQljYXJkLT5pc3IJCT0gJndwcF9pc3I7Ci0JY2FyZC0+cG9sbAkJPSBOVUxMOyAKLQljYXJkLT5leGVjCQk9ICZ3cHBfZXhlYzsKLQljYXJkLT53YW5kZXYudXBkYXRlCT0gJnVwZGF0ZTsKLQljYXJkLT53YW5kZXYubmV3X2lmCT0gJm5ld19pZjsKLQljYXJkLT53YW5kZXYuZGVsX2lmCT0gJmRlbF9pZjsKLSAgICAgICAgY2FyZC0+d2FuZGV2LnVkcF9wb3J0ICAgPSBjb25mLT51ZHBfcG9ydDsKLQljYXJkLT53YW5kZXYudHRsCT0gY29uZi0+dHRsOwotCWNhcmQtPndhbmRldi5zdGF0ZSAgICAgID0gV0FOX0RJU0NPTk5FQ1RFRDsKLQljYXJkLT5kaXNhYmxlX2NvbW0JPSAmZGlzYWJsZV9jb21tOwotCWNhcmQtPmlycV9kaXNfaWZfc2VuZF9jb3VudCA9IDA7Ci0gICAgICAgIGNhcmQtPmlycV9kaXNfcG9sbF9jb3VudCA9IDA7Ci0JY2FyZC0+dS5wLmF1dGhlbnRpY2F0b3IgPSBjb25mLT51LnBwcC5hdXRoZW50aWNhdG9yOwotCWNhcmQtPnUucC5pcF9tb2RlIAk9IGNvbmYtPnUucHBwLmlwX21vZGUgPwotCQkJCSBjb25mLT51LnBwcC5pcF9tb2RlIDogV0FOT1BUX1BQUF9TVEFUSUM7Ci0gICAgICAgIGNhcmQtPlRyYWNpbmdFbmFibGVkICAgID0gMDsKLQlSZWFkX2Nvbm5lY3Rpb25faW5mbyAgICA9IDE7Ci0KLQkvKiBpbml0aWFsaXplIGdsb2JhbCBzdGF0aXN0aWNzICovCi0JaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggY2FyZCApOwotCi0KLQotCWlmICghY2FyZC0+Y29uZmlndXJlZCl7Ci0JCWludCBlcnI7Ci0KLQkJSW50cl90ZXN0X2NvdW50ZXIgPSAwOwotCQllcnIgPSBpbnRyX3Rlc3QoY2FyZCk7Ci0KLQkJaWYoZXJyIHx8IChJbnRyX3Rlc3RfY291bnRlciA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUikpIHsKLQkJCXByaW50aygiJXM6IEludGVycnVwdCBUZXN0IEZhaWxlZCwgQ291bnRlcjogJWlcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJCXByaW50ayggIiVzOiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgaW50ZXJydXB0XG4iLGNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcnJ1cHQgVGVzdCBQYXNzZWQsIENvdW50ZXI6ICVpXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJY2FyZC0+Y29uZmlndXJlZCA9IDE7Ci0JfQotCi0JcHBwX3NldF9pbnRyX21vZGUoY2FyZCwgUFBQX0lOVFJfVElNRVIpOyAKLQotCS8qIFR1cm4gb2ZmIHRoZSB0cmFuc21pdCBhbmQgdGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmltYXNrICY9IH5QUFBfSU5UUl9USU1FUjsKLQotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiogV0FOIERldmljZSBEcml2ZXIgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGRldmljZSBzdGF0dXMgJiBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2KQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLSAJc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLSAgICAgICAgdm9sYXRpbGUgcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhOwotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkKLQlpZiAod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQkKLQkvKiBTaHV0ZG93biBidWcgZml4LiBUaGlzIGZ1bmN0aW9uIGNhbiBiZQotICAgICAgICAgKiBjYWxsZWQgd2l0aCBOVUxMIGRldiBwb2ludGVyIGR1cmluZwotICAgICAgICAgKiBzaHV0ZG93biAKLQkgKi8KLQlpZiAoKGRldj1jYXJkLT53YW5kZXYuZGV2KSA9PSBOVUxMKXsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKChwcHBfcHJpdl9hcmVhPWRldi0+cHJpdikgPT0gTlVMTCl7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQkKLQlwcHBfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPSAyOwotCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JZmxhZ3MtPmltYXNrIHw9IFBQUF9JTlRSX1RJTUVSOwkKLQkKLQkvKiB3YWl0IGEgbWF4aW11bSBvZiAxIHNlY29uZCBmb3IgdGhlIHN0YXRpc3RpY3MgdG8gYmUgdXBkYXRlZCAqLyAKLSAgICAgICAgdGltZW91dCA9IGppZmZpZXM7Ci0gICAgICAgIGZvcig7OykgewotCQlpZihwcHBfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPT0gMCl7Ci0JCQlicmVhazsKLQkJfQotICAgICAgICAgICAgICAgIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQgKyAxICogSFopKXsKLSAgICAJCQlwcHBfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPSAwOwotIAkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9Ci0JCQkJflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7IAotIAkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0gICAgICAgIH0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCi0gKiBoYW5kbGVkLgotICogbyBwYXJzZSBtZWRpYS0gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIHRoYXQgYSBuZXcgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZAotICogbyBhbGxvY2F0ZSByZXNvdXJjZXMsIGlmIG5lY2Vzc2FyeQotICogbyBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0YXJhdGlvbi4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgd2FuaWZfY29uZl90ICpjb25mKQotewotCXNkbGFfdCAqY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWE7Ci0KLQlpZiAod2FuZGV2LT5uZGV2KQotCQlyZXR1cm4gLUVFWElTVDsKLQkKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25maWd1cmluZyBJbnRlcmZhY2U6ICVzXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY29uZi0+bmFtZSk7Ci0KLQlpZiAoKGNvbmYtPm5hbWVbMF0gPT0gJ1wwJykgfHwgKHN0cmxlbihjb25mLT5uYW1lKSA+IFdBTl9JRk5BTUVfU1opKSB7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgaW50ZXJmYWNlIG5hbWUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCi0JfQotCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCi0JcHBwX3ByaXZfYXJlYSA9IGttYWxsb2Moc2l6ZW9mKHBwcF9wcml2YXRlX2FyZWFfdCksIEdGUF9LRVJORUwpOwotCQotCWlmKCBwcHBfcHJpdl9hcmVhID09IE5VTEwgKQotCQlyZXR1cm4JLUVOT01FTTsKLQkKLQltZW1zZXQocHBwX3ByaXZfYXJlYSwgMCwgc2l6ZW9mKHBwcF9wcml2YXRlX2FyZWFfdCkpOwotCQotCXBwcF9wcml2X2FyZWEtPmNhcmQgPSBjYXJkOyAKLQkKLQkvKiBpbml0aWFsaXplIGRhdGEgKi8KLQlzdHJjcHkoY2FyZC0+dS5wLmlmX25hbWUsIGNvbmYtPm5hbWUpOwotCi0JLyogaW5pdGlhbGl6ZSBkYXRhIGluIHBwcF9wcml2YXRlX2FyZWEgc3RydWN0dXJlICovCi0JCi0JaW5pdF9wcHBfcHJpdl9zdHJ1Y3QoIHBwcF9wcml2X2FyZWEgKTsKLQotCXBwcF9wcml2X2FyZWEtPm1jID0gY29uZi0+bWM7Ci0JcHBwX3ByaXZfYXJlYS0+cGFwID0gY29uZi0+cGFwOwotCXBwcF9wcml2X2FyZWEtPmNoYXAgPSBjb25mLT5jaGFwOwotCi0JLyogT3B0aW9uIHRvIGJyaW5nIGRvd24gdGhlIGludGVyZmFjZSB3aGVuIAotICAgICAgICAgKiB0aGUgbGluayBnb2VzIGRvd24gKi8KLQlpZiAoY29uZi0+aWZfZG93bil7Ci0JCXNldF9iaXQoRFlOX09QVF9PTiwmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pOwotCQlwcmludGsoIiVzOiBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGVuYWJsZWRcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQl9IAotCi0JLyogSWYgbm8gdXNlciBpZHMgYXJlIHNwZWNpZmllZCAqLwotCWlmKCFzdHJsZW4oY29uZi0+dXNlcmlkKSAmJiAocHBwX3ByaXZfYXJlYS0+cGFwfHxwcHBfcHJpdl9hcmVhLT5jaGFwKSl7Ci0JCWtmcmVlKHBwcF9wcml2X2FyZWEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBJZiBubyBwYXNzd29yZHMgYXJlIHNwZWNpZmllZCAqLwotCWlmKCFzdHJsZW4oY29uZi0+cGFzc3dkKSAmJiAocHBwX3ByaXZfYXJlYS0+cGFwfHxwcHBfcHJpdl9hcmVhLT5jaGFwKSl7Ci0JCWtmcmVlKHBwcF9wcml2X2FyZWEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZihzdHJsZW4oY29uZi0+c3lzbmFtZSkgPiAzMSl7Ci0JCWtmcmVlKHBwcF9wcml2X2FyZWEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBJZiBubyBzeXN0ZW0gbmFtZSBpcyBzcGVjaWZpZWQgKi8KLQlpZighc3RybGVuKGNvbmYtPnN5c25hbWUpICYmIChjYXJkLT51LnAuYXV0aGVudGljYXRvcikpewotCQlrZnJlZShwcHBfcHJpdl9hcmVhKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogY29weSB0aGUgZGF0YSBpbnRvIHRoZSBwcHAgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KLQltZW1jcHkocHBwX3ByaXZfYXJlYS0+dXNlcmlkLCBjb25mLT51c2VyaWQsIHN0cmxlbihjb25mLT51c2VyaWQpKTsKLQltZW1jcHkocHBwX3ByaXZfYXJlYS0+cGFzc3dkLCBjb25mLT5wYXNzd2QsIHN0cmxlbihjb25mLT5wYXNzd2QpKTsKLQltZW1jcHkocHBwX3ByaXZfYXJlYS0+c3lzbmFtZSwgY29uZi0+c3lzbmFtZSwgc3RybGVuKGNvbmYtPnN5c25hbWUpKTsKLQotCQotCXBwcF9wcml2X2FyZWEtPmVuYWJsZV9JUFggPSBjb25mLT5lbmFibGVfSVBYOwotCWlmIChjb25mLT5uZXR3b3JrX251bWJlcil7Ci0JCXBwcF9wcml2X2FyZWEtPm5ldHdvcmtfbnVtYmVyID0gY29uZi0+bmV0d29ya19udW1iZXI7Ci0JfWVsc2V7Ci0JCXBwcF9wcml2X2FyZWEtPm5ldHdvcmtfbnVtYmVyID0gMHhERUFEQkVFRjsKLQl9Ci0KLQkvKiBUZWxscyB1cyB0aGF0IGlmIHRoaXMgaW50ZXJmYWNlIGlzIGEKLSAgICAgICAgICogZ2F0ZXdheSBvciBub3QgKi8KLQlpZiAoKHBwcF9wcml2X2FyZWEtPmdhdGV3YXkgPSBjb25mLT5nYXRld2F5KSA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyBpcyBzZXQgYXMgYSBnYXRld2F5LlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsY2FyZC0+dS5wLmlmX25hbWUpOwotCX0KLQotCS8qIHByZXBhcmUgbmV0d29yayBkZXZpY2UgZGF0YSBzcGFjZSBmb3IgcmVnaXN0cmF0aW9uICovCi0gCXN0cmNweShkZXYtPm5hbWUsY2FyZC0+dS5wLmlmX25hbWUpOwotCQotCWRldi0+aW5pdCA9ICZpZl9pbml0OwotCWRldi0+cHJpdiA9IHBwcF9wcml2X2FyZWE7Ci0JZGV2LT5tdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGRldi0+bXR1LCBjYXJkLT53YW5kZXYubXR1KTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHBvbGxpbmcgd29yayByb3V0aW5lICovCi0JSU5JVF9XT1JLKCZwcHBfcHJpdl9hcmVhLT5wb2xsX3dvcmssICh2b2lkKikodm9pZCopcHBwX3BvbGwsIGRldik7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBwb2xsaW5nIGRlbGF5IHRpbWVyICovCi0JaW5pdF90aW1lcigmcHBwX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lcik7Ci0JcHBwX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwotCXBwcF9wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIuZnVuY3Rpb24gPSBwcHBfcG9sbF9kZWxheTsKLQkKLQkKLQkvKiBTaW5jZSB3ZSBzdGFydCB3aXRoIGR1bW15IElQIGFkZHJlc3NlcyB3ZSBjYW4gc2F5Ci0JICogdGhhdCByb3V0ZSBleGlzdHMgKi8KLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGVsZXRlIGxvZ2ljYWwgY2hhbm5lbC4KLSAqLwotc3RhdGljIGludCBkZWxfaWYoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tIChzZGxhX3QgKmNhcmQpCi17Ci0JcHBwX2NvbW1fZGlzYWJsZV9zaHV0ZG93bihjYXJkKTsKLQlyZXR1cm47Ci19Ci0KLS8qKioqKiogV0FOUElQRS1zcGVjaWZpYyBlbnRyeSBwb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEV4ZWN1dGUgYWRhcHRlciBpbnRlcmZhY2UgY29tbWFuZC4KLSAqLwotCi0vL0ZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0aGlzID8/Pz8KLXN0YXRpYyBpbnQgd3BwX2V4ZWMoc3RydWN0IHNkbGEgKmNhcmQsIHZvaWQgKnVfY21kLCB2b2lkICp1X2RhdGEpCi17Ci0JcHBwX21ib3hfdCAqbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGxlbjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCopJm1ib3gtPmNtZCwgdV9jbWQsIHNpemVvZihwcHBfY21kX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlsZW4gPSBtYm94LT5jbWQubGVuZ3RoOwotCi0JaWYgKGxlbikgewotCi0JCWlmKCBjb3B5X2Zyb21fdXNlcigodm9pZCopJm1ib3gtPmRhdGEsIHVfZGF0YSwgbGVuKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JfQotCi0JLyogZXhlY3V0ZSBjb21tYW5kICovCi0JaWYgKCFzZGxhX2V4ZWMobWJveCkpCi0JCXJldHVybiAtRUlPOwotCi0JLyogcmV0dXJuIHJlc3VsdCAqLwotCWlmKCBjb3B5X3RvX3VzZXIodV9jbWQsICh2b2lkKikmbWJveC0+Y21kLCBzaXplb2YocHBwX2NtZF90KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWxlbiA9IG1ib3gtPmNtZC5sZW5ndGg7Ci0KLQlpZiAobGVuICYmIHVfZGF0YSAmJiBjb3B5X3RvX3VzZXIodV9kYXRhLCAodm9pZCopJm1ib3gtPmRhdGEsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKiogTmV0d29yayBEZXZpY2UgSW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgTGludXggbmV0d29yayBpbnRlcmZhY2UuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLCBkdXJpbmcgTGludXggbmV0d29yawotICogaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbi4gIFJldHVybmluZyBhbnl0aGluZyBidXQgemVybyB3aWxsIGZhaWwgaW50ZXJmYWNlCi0gKiByZWdpc3RyYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCXN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYgPSAmY2FyZC0+d2FuZGV2OwotCi0JLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwotCWRldi0+b3BlbgkJPSAmaWZfb3BlbjsKLQlkZXYtPnN0b3AJCT0gJmlmX2Nsb3NlOwotCWRldi0+aGFyZF9oZWFkZXIJPSAmaWZfaGVhZGVyOwotCWRldi0+cmVidWlsZF9oZWFkZXIJPSAmaWZfcmVidWlsZF9oZHI7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSAmaWZfc2VuZDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmaWZfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0CQk9ICZpZl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwotCi0JLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCi0JZGV2LT50eXBlCQk9IEFSUEhSRF9QUFA7CS8qIEFSUCBoL3cgdHlwZSAqLwotCWRldi0+ZmxhZ3MJCXw9IElGRl9QT0lOVE9QT0lOVDsKLQlkZXYtPmZsYWdzCQl8PSBJRkZfTk9BUlA7Ci0KLQkvKiBFbmFibGUgTXVsaXRjYXN0aW5nIGlmIHNwZWNpZmllZCBieSB1c2VyKi8KLQlpZiAocHBwX3ByaXZfYXJlYS0+bWMgPT0gV0FOT1BUX1lFUyl7Ci0JCWRldi0+ZmxhZ3MJfD0gSUZGX01VTFRJQ0FTVDsKLQl9Ci0KLQlkZXYtPm10dQkJPSB3YW5kZXYtPm10dTsKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IFBQUF9IRFJfTEVOOwkvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0KLQkvKiBJbml0aWFsaXplIGhhcmR3YXJlIHBhcmFtZXRlcnMgKGp1c3QgZm9yIHJlZmVyZW5jZSkgKi8KLQlkZXYtPmlycQkJPSB3YW5kZXYtPmlycTsKLQlkZXYtPmRtYQkJPSB3YW5kZXYtPmRtYTsKLQlkZXYtPmJhc2VfYWRkcgkJPSB3YW5kZXYtPmlvcG9ydDsKLQlkZXYtPm1lbV9zdGFydAkJPSB3YW5kZXYtPm1hZGRyOwotCWRldi0+bWVtX2VuZAkJPSB3YW5kZXYtPm1hZGRyICsgd2FuZGV2LT5tc2l6ZSAtIDE7Ci0KLSAgICAgICAgLyogU2V0IHRyYW5zbWl0IGJ1ZmZlciBxdWV1ZSBsZW5ndGggKi8KLSAgICAgICAgZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0JU0VUX01PRFVMRV9PV05FUihkZXYpOwotICAgCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogT3BlbiBuZXR3b3JrIGludGVyZmFjZS4KLSAqIG8gZW5hYmxlIGNvbW11bmljYXRpb25zIGFuZCBpbnRlcnJ1cHRzLgotICogbyBwcmV2ZW50IG1vZHVsZSBmcm9tIHVubG9hZGluZyBieSBpbmNyZW1lbnRpbmcgdXNlIGNvdW50Ci0gKgotICogUmV0dXJuIDAgaWYgTy5rLiBvciBlcnJuby4KLSAqLwotc3RhdGljIGludCBpZl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IHBwcF9wcml2X2FyZWEtPmNhcmQ7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JLy91bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQotCWRvX2dldHRpbWVvZmRheSggJnR2ICk7Ci0JcHBwX3ByaXZfYXJlYS0+cm91dGVyX3N0YXJ0X3RpbWUgPSB0di50dl9zZWM7Ci0KLQkvKiBXZSBjYW5ub3QgY29uZmlndXJlIHRoZSBjYXJkIGhlcmUgYmVjYXVzZSB3ZSBkb24ndAotCSAqIGhhdmUgYWNjZXNzIHRvIHRoZSBpbnRlcmZhY2UgSVAgYWRkcmVzc2VzLgotICAgICAgICAgKiBPbmNlIHRoZSBpbnRlcmZhY2UgaW5pdGlsaXphdGlvbiBpcyBjb21wbGV0ZSwgd2Ugd2lsbCBiZQotICAgICAgICAgKiBhYmxlIHRvIGFjY2VzcyB0aGUgSVAgYWRkcmVzc2VzLiAgVGhlcmVmb3JlLAotICAgICAgICAgKiBjb25maWd1cmUgdGhlIHBwcCBsaW5rIGluIHRoZSBwb2xsIHJvdXRpbmUgKi8KLQlzZXRfYml0KDAsJnBwcF9wcml2X2FyZWEtPmNvbmZpZ19wcHApOwotCXBwcF9wcml2X2FyZWEtPmNvbmZpZ193YWl0X3RpbWVvdXQ9amlmZmllczsKLQotCS8qIFN0YXJ0IHRoZSBQUFAgY29uZmlndXJhdGlvbiBhZnRlciAxc2VjIGRlbGF5LgotCSAqIFRoaXMgd2lsbCBnaXZlIHRoZSBpbnRlcmZhY2UgaW5pdGlsaXphdGlvbiB0aW1lCi0JICogdG8gZmluaXNoIGl0cyBjb25maWd1cmF0aW9uICovCi0JbW9kX3RpbWVyKCZwcHBfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLCBqaWZmaWVzICsgSFopOwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENsb3NlIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBpZiB0aGlzIGlzIHRoZSBsYXN0IG9wZW4sIHRoZW4gZGlzYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcmVzZXQgZmxhZ3MuCi0gKi8KLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gcHBwX3ByaXZfYXJlYS0+Y2FyZDsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQl3YW5waXBlX2Nsb3NlKGNhcmQpOwotCi0JZGVsX3RpbWVyICgmcHBwX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQnVpbGQgbWVkaWEgaGVhZGVyLgotICoKLSAqIFRoZSB0cmljayBoZXJlIGlzIHRvIHB1dCBwYWNrZXQgdHlwZSAoRXRoZXJ0eXBlKSBpbnRvICdwcm90b2NvbCcgZmllbGQgb2YKLSAqIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGF0IHdlIGRvbid0IGZvcmdldCBpdC4gIElmIHBhY2tldCB0eXBlIGlzIG5vdAotICogc3VwcG9ydGVkLCBzZXQgc2tiLT5wcm90b2NvbCB0byAwIGFuZCBkaXNjYXJkIHBhY2tldCBsYXRlci4KLSAqCi0gKiBSZXR1cm46CW1lZGlhIGhlYWRlciBsZW5ndGguCi0gKi8KLXN0YXRpYyBpbnQgaWZfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JdW5zaWduZWQgc2hvcnQgdHlwZSwgdm9pZCAqZGFkZHIsIHZvaWQgKnNhZGRyLCB1bnNpZ25lZCBsZW4pCi17Ci0Jc3dpdGNoICh0eXBlKQotCXsKLQkJY2FzZSBFVEhfUF9JUDoKLQkJY2FzZSBFVEhfUF9JUFg6Ci0JCQlza2ItPnByb3RvY29sID0gaHRvbnModHlwZSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJc2tiLT5wcm90b2NvbCA9IDA7Ci0JfQotCi0JcmV0dXJuIFBQUF9IRFJfTEVOOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlLWJ1aWxkIG1lZGlhIGhlYWRlci4KLSAqCi0gKiBSZXR1cm46CTEJcGh5c2ljYWwgYWRkcmVzcyByZXNvbHZlZC4KLSAqCQkwCXBoeXNpY2FsIGFkZHJlc3Mgbm90IHJlc29sdmVkCi0gKi8KLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlYnVpbGRfaGVhZGVyKCkgY2FsbGVkIGZvciBpbnRlcmZhY2UgJXMhXG4iLAotCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEhhbmRsZSB0cmFuc21pdCB0aW1lb3V0IGV2ZW50IGZyb20gbmV0aWYgd2F0Y2hkb2cKLSAqLwotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIAlwcHBfcHJpdmF0ZV9hcmVhX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQkKLQkvKiBJZiBvdXIgZGV2aWNlIHN0YXlzIGJ1c3kgZm9yIGF0IGxlYXN0IDUgc2Vjb25kcyB0aGVuIHdlIHdpbGwKLQkgKiBraWNrIHN0YXJ0IHRoZSBkZXZpY2UgYnkgbWFraW5nIGRldi0+dGJ1c3kgPSAwLiAgV2UgZXhwZWN0Ci0JICogdGhhdCBvdXIgZGV2aWNlIG5ldmVyIHN0YXlzIGJ1c3kgbW9yZSB0aGFuIDUgc2Vjb25kcy4gU28gdGhpcyAgICAgICAgICAgICAgICAgCi0JICogaXMgb25seSB1c2VkIGFzIGEgbGFzdCByZXNvcnQuCi0JICovCi0KLQkrKyBjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF90YnVzeTsKLQkrK2NhcmQtPndhbmRldi5zdGF0cy5jb2xsaXNpb25zOwotCi0JcHJpbnRrIChLRVJOX0lORk8gIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQgb24gJXNcbiIsIGNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3RidXN5X3RpbWVvdXQ7Ci0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBhIHBhY2tldCBvbiBhIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBzZXQgdGJ1c3kgZmxhZyAobWFya3Mgc3RhcnQgb2YgdGhlIHRyYW5zbWlzc2lvbikgdG8gYmxvY2sgYSB0aW1lci1iYXNlZAotICogICB0cmFuc21pdCBmcm9tIG92ZXJsYXBwaW5nLgotICogbyBjaGVjayBsaW5rIHN0YXRlLiBJZiBsaW5rIGlzIG5vdCB1cCwgdGhlbiBkcm9wIHRoZSBwYWNrZXQuCi0gKiBvIGV4ZWN1dGUgYWRhcHRlciBzZW5kIGNvbW1hbmQuCi0gKiBvIGZyZWUgc29ja2V0IGJ1ZmZlcgotICoKLSAqIFJldHVybjoJMAljb21wbGV0ZSAoc29ja2V0IGJ1ZmZlciBtdXN0IGJlIGZyZWVkKQotICoJCW5vbi0wCXBhY2tldCBtYXkgYmUgcmUtdHJhbnNtaXR0ZWQgKHRidXN5IG11c3QgYmUgc2V0KQotICoKLSAqIE5vdGVzOgotICogMS4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBlaXRoZXIgYnkgdGhlIHByb3RvY29sIHN0YWNrIG9yIGJ5IHRoZSAibmV0Ci0gKiAgICBib3R0b20gaGFsZiIgKHdpdGggaW50ZXJydXB0cyBlbmFibGVkKS4KLSAqIDIuIFNldHRpbmcgdGJ1c3kgZmxhZyB3aWxsIGluaGliaXQgZnVydGhlciB0cmFuc21pdCByZXF1ZXN0cyBmcm9tIHRoZQotICogICAgcHJvdG9jb2wgc3RhY2sgYW5kIGNhbiBiZSB1c2VkIGZvciBmbG93IGNvbnRyb2wgd2l0aCBwcm90b2NvbCBsYXllci4KLSAqLwotc3RhdGljIGludCBpZl9zZW5kIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCXVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQ7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JaW50IHVkcF90eXBlOwotCWludCBlcnI9MDsKLQkKLQkrK3BwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2VudHJ5OwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQotCWlmIChza2IgPT0gTlVMTCkgewotCi0JCS8qIElmIHdlIGdldCBoZXJlLCBzb21lIGhpZ2hlciBsYXllciB0aGlua3Mgd2UndmUgbWlzc2VkIGFuCi0JCSAqIHR4LWRvbmUgaW50ZXJydXB0LgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVyZmFjZSAlcyBnb3Qga2lja2VkIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JCQotCQkrK3BwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3NrYl9udWxsOwotCQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCXNlbmRwYWNrZXQgPSBza2ItPmRhdGE7Ci0KLQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZSggc2tiLCBjYXJkICk7Ci0KLQotCWlmICh1ZHBfdHlwZSA9PSBVRFBfUFRQSVBFX1RZUEUpewotCQlpZihzdG9yZV91ZHBfbWdtdF9wa3QoVURQX1BLVF9GUk1fU1RBQ0ssIGNhcmQsIHNrYiwgZGV2LAotICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgIHBwcF9wcml2X2FyZWEpKXsKLQkgICAgICAgICAgICAgICAJZmxhZ3MtPmltYXNrIHw9IFBQUF9JTlRSX1RJTUVSOwotCQl9Ci0JCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfUElQRV9yZXF1ZXN0OwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBDaGVjayBmb3IgYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgYWRkcmVzc2VzIAotCSAqIElmIGZvdW5kLCBkcm9wIChkZWFsbG9jYXRlKSBhIHBhY2tldCBhbmQgcmV0dXJuLgotCSAqLwotCWlmKGNoa19iY2FzdF9tY2FzdF9hZGRyKGNhcmQsIGRldiwgc2tiKSl7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCi0gCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJczUwOF9sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JfQotCi0gICAgCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIGluIGlmX3NlbmQ6ICVseFxuIiwKLQkJCQljYXJkLT53YW5kZXYubmFtZSxjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJKytwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9jcml0aWNhbF9ub25fSVNSOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlnb3RvIGlmX3NlbmRfZXhpdF9jcml0OwotCX0KLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCkgewotCi0JCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfd2FuX2Rpc2Nvbm5lY3RlZDsKLSAgICAgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQotICAgICAJfSBlbHNlIGlmICghc2tiLT5wcm90b2NvbCkgewotCQkrK3BwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3Byb3RvY29sX2Vycm9yOwotICAgICAgICAJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZXJyb3JzOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkKLQl9IGVsc2UgewotCi0JCS8qSWYgaXQncyBJUFggY2hhbmdlIHRoZSBuZXR3b3JrIG51bWJlcnMgdG8gMCBpZiB0aGV5J3JlIG91cnMuKi8KLQkJaWYoIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBYKSApIHsKLQkJCWlmKHBwcF9wcml2X2FyZWEtPmVuYWJsZV9JUFgpIHsKLQkJCQlzd2l0Y2hfbmV0X251bWJlcnMoIHNrYi0+ZGF0YSwgCi0JCQkJCXBwcF9wcml2X2FyZWEtPm5ldHdvcmtfbnVtYmVyLCAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJCWdvdG8gaWZfc2VuZF9leGl0X2NyaXQ7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocHBwX3NlbmQoY2FyZCwgc2tiLT5kYXRhLCBza2ItPmxlbiwgc2tiLT5wcm90b2NvbCkpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfYWRwdHJfYmZyc19mdWxsOwotCQkJKytwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF90eF9pbnRfZW5hYmxlZDsKLQkJfSBlbHNlIHsKLQkJCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfYmZyX3Bhc3NlZF90b19hZHB0cjsKLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X3BhY2tldHM7Ci0JCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCX0KLSAgICAJfQotCQotaWZfc2VuZF9leGl0X2NyaXQ6Ci0JCi0JaWYgKCEoZXJyPW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkpewotICAgICAgCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX1lbHNlewotCQlwcHBfcHJpdl9hcmVhLT50aWNrX2NvdW50ZXIgPSBqaWZmaWVzOwotCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVFhSRFk7CS8qIHVubWFzayBUeCBpbnRlcnJ1cHRzICovCi0JfQotCQotCWNsZWFyX2JpdChTRU5EX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewkKLQkJczUwOF91bmxvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFN0b3JlIGEgVURQIG1hbmFnZW1lbnQgcGFja2V0IGZvciBsYXRlciBwcm9jZXNzaW5nLgotICovCi0KLXN0YXRpYyBpbnQgc3RvcmVfdWRwX21nbXRfcGt0KGNoYXIgdWRwX3BrdF9zcmMsIHNkbGFfdCogY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBwX3ByaXZhdGVfYXJlYV90KiBwcHBfcHJpdl9hcmVhICkKLXsKLQlpbnQgdWRwX3BrdF9zdG9yZWQgPSAwOwotCi0JaWYoIXBwcF9wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCAmJiAoc2tiLT5sZW48PU1BWF9MR1RIX1VEUF9NR05UX1BLVCkpewotICAgICAgICAJcHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gc2tiLT5sZW47Ci0JCXBwcF9wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID0gdWRwX3BrdF9zcmM7Ci0gICAgICAgCQltZW1jcHkocHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VEUDsKLQkJcHBwX3ByaXZfYXJlYS0+cHJvdG9jb2wgPSBza2ItPnByb3RvY29sOwotCQl1ZHBfcGt0X3N0b3JlZCA9IDE7Ci0JfWVsc2V7Ci0JCWlmIChza2ItPmxlbiA+IE1BWF9MR1RIX1VEUF9NR05UX1BLVCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUElQRU1PTiBVRFAgcmVxdWVzdCB0b28gbG9uZyA6ICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIHNrYi0+bGVuKTsKLQkJfWVsc2V7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUElQRU1PTiBVUEQgcmVxdWVzdCBhbHJlYWR5IHBlbmRpbmdcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQkJcHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gMDsKLQl9Ci0KLQlpZih1ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9TVEFDSyl7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9Ci0KLQlyZXR1cm4odWRwX3BrdF9zdG9yZWQpOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZXBseSB0byBVRFAgTWFuYWdlbWVudCBzeXN0ZW0uCi0gKiBSZXR1cm4gbGVuZ3RoIG9mIHJlcGx5LgotICovCi1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IG1ib3hfbGVuICkgCi17Ci0JdW5zaWduZWQgc2hvcnQgbGVuLCB1ZHBfbGVuZ3RoLCB0ZW1wLCBpcF9sZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBpcF90ZW1wOwotCWludCBldmVuX2JvdW5kID0gMDsKLQlwcHBfdWRwX3BrdF90ICpwX3VkcF9wa3QgPSAocHBwX3VkcF9wa3RfdCAqKWRhdGE7Ci0gCi0JLyogU2V0IGxlbmd0aCBvZiBwYWNrZXQgKi8KLQlsZW4gPSBzaXplb2YoaXBfcGt0X3QpKyAKLQkgICAgICBzaXplb2YodWRwX3BrdF90KSsKLQkgICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkgICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCSAgICAgIG1ib3hfbGVuOwotCi0JLyogZmlsbCBpbiBVRFAgcmVwbHkgKi8KLSAgCXBfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID0gVURQTUdNVF9SRVBMWTsgCi0KLQkvKiBmaWxsIGluIFVEUCBsZW5ndGggKi8KLQl1ZHBfbGVuZ3RoID0gc2l6ZW9mKHVkcF9wa3RfdCkrIAotCQkgICAgIHNpemVvZih3cF9tZ210X3QpKwotCQkgICAgIHNpemVvZihjYmxvY2tfdCkrCi0JCSAgICAgbWJveF9sZW47IAotICAKLSAKLQkvKiBwdXQgaXQgb24gYW4gZXZlbiBib3VuZGFyeSAqLwotCWlmICggdWRwX2xlbmd0aCAmIDB4MDAwMSApIHsKLQkJdWRwX2xlbmd0aCArPSAxOwotCQlsZW4gKz0gMTsKLQkJZXZlbl9ib3VuZD0xOwotCX0gCi0JCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JcF91ZHBfcGt0LT51ZHBfcGt0LnVkcF9sZW5ndGggPSB0ZW1wOwkJCi0KLSAKLQkvKiBzd2FwIFVEUCBwb3J0cyAqLwotCXRlbXAgPSBwX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0OwotCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQgPSAKLQkJCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQ7IAotCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPSB0ZW1wOwotCi0KLQkvKiBhZGQgVURQIHBzZXVkbyBoZWFkZXIgKi8KLQl0ZW1wID0gMHgxMTAwOwotCSooKHVuc2lnbmVkIHNob3J0ICopKHBfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKSkgPSB0ZW1wOwotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCSooKHVuc2lnbmVkIHNob3J0ICopKHBfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKzIpKSA9IHRlbXA7Ci0gCi0JLyogY2FsY3VsYXRlIFVEUCBjaGVja3N1bSAqLwotCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAwOwotCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAKLQkJY2FsY19jaGVja3N1bSgmZGF0YVtVRFBfT0ZGU0VUXSx1ZHBfbGVuZ3RoK1VEUF9PRkZTRVQpOwotCi0JLyogZmlsbCBpbiBJUCBsZW5ndGggKi8KLQlpcF9sZW5ndGggPSB1ZHBfbGVuZ3RoICsgc2l6ZW9mKGlwX3BrdF90KTsKLQl0ZW1wID0gKGlwX2xlbmd0aDw8OCl8KGlwX2xlbmd0aD4+OCk7Ci0gIAlwX3VkcF9wa3QtPmlwX3BrdC50b3RhbF9sZW5ndGggPSB0ZW1wOwotIAotCS8qIHN3YXAgSVAgYWRkcmVzc2VzICovCi0JaXBfdGVtcCA9IHBfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzOwotCXBfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzID0gcF91ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3M7Ci0JcF91ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3MgPSBpcF90ZW1wOwotCi0JLyogZmlsbCBpbiBJUCBjaGVja3N1bSAqLwotCXBfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IDA7Ci0JcF91ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gY2FsY19jaGVja3N1bShkYXRhLHNpemVvZihpcF9wa3RfdCkpOwotCi0JcmV0dXJuIGxlbjsKLQotfSAvKiByZXBseV91ZHAgKi8KLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wOyAKLQl1bnNpZ25lZCBsb25nIHN1bT0wOwotCWludCBpOwotCi0JZm9yKCBpID0gMDsgaSA8bGVuOyBpKz0yICkgewotCQltZW1jcHkoJnRlbXAsJmRhdGFbaV0sMik7Ci0JCXN1bSArPSAodW5zaWduZWQgbG9uZyl0ZW1wOwotCX0KLQotCXdoaWxlIChzdW0gPj4gMTYgKSB7Ci0JCXN1bSA9IChzdW0gJiAweGZmZmZVTCkgKyAoc3VtID4+IDE2KTsKLQl9Ci0KLQl0ZW1wID0gKHVuc2lnbmVkIHNob3J0KXN1bTsKLQl0ZW1wID0gfnRlbXA7Ci0KLQlpZiggdGVtcCA9PSAwICkgCi0JCXRlbXAgPSAweGZmZmY7Ci0KLQlyZXR1cm4gdGVtcDsJCi19Ci0KLS8qCi0gICBJZiBpbmNvbWluZyBpcyAwIChvdXRnb2luZyktIGlmIHRoZSBuZXQgbnVtYmVycyBpcyBvdXJzIG1ha2UgaXQgMAotICAgaWYgaW5jb21pbmcgaXMgMSAtIGlmIHRoZSBuZXQgbnVtYmVyIGlzIDAgbWFrZSBpdCBvdXJzIAotCi0qLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIsIHVuc2lnbmVkIGNoYXIgaW5jb21pbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBwbmV0d29ya19udW1iZXI7Ci0KLQlwbmV0d29ya19udW1iZXIgPSAodW5zaWduZWQgbG9uZykoKHNlbmRwYWNrZXRbNl0gPDwgMjQpICsgCi0JCQkgIChzZW5kcGFja2V0WzddIDw8IDE2KSArIChzZW5kcGFja2V0WzhdIDw8IDgpICsgCi0JCQkgIHNlbmRwYWNrZXRbOV0pOwotCi0JaWYgKCFpbmNvbWluZykgewotCQkvL0lmIHRoZSBkZXN0aW5hdGlvbiBuZXR3b3JrIG51bWJlciBpcyBvdXJzLCBtYWtlIGl0IDAKLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSBuZXR3b3JrX251bWJlcikgewotCQkJc2VuZHBhY2tldFs2XSA9IHNlbmRwYWNrZXRbN10gPSBzZW5kcGFja2V0WzhdID0gCi0JCQkJCSBzZW5kcGFja2V0WzldID0gMHgwMDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8vSWYgdGhlIGluY29taW5nIG5ldHdvcmsgaXMgMCwgbWFrZSBpdCBvdXJzCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gMCkgewotCQkJc2VuZHBhY2tldFs2XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzddID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMEZGMDAwMCkgPj4gMTYpOwotCQkJc2VuZHBhY2tldFs4XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDAwMEZGMDApID4+IDgpOwotCQkJc2VuZHBhY2tldFs5XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwMDBGRik7Ci0JCX0KLQl9Ci0KLQotCXBuZXR3b3JrX251bWJlciA9ICh1bnNpZ25lZCBsb25nKSgoc2VuZHBhY2tldFsxOF0gPDwgMjQpICsgCi0JCQkgIChzZW5kcGFja2V0WzE5XSA8PCAxNikgKyAoc2VuZHBhY2tldFsyMF0gPDwgOCkgKyAKLQkJCSAgc2VuZHBhY2tldFsyMV0pOwotCi0JaWYoICFpbmNvbWluZyApIHsKLQkJLy9JZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgb3VycywgbWFrZSBpdCAwCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gbmV0d29ya19udW1iZXIpIHsKLQkJCXNlbmRwYWNrZXRbMThdID0gc2VuZHBhY2tldFsxOV0gPSBzZW5kcGFja2V0WzIwXSA9IAotCQkJCQkgc2VuZHBhY2tldFsyMV0gPSAweDAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJLy9JZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgMCwgbWFrZSBpdCBvdXJzCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gMCApIHsKLQkJCXNlbmRwYWNrZXRbMThdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbMTldID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMEZGMDAwMCkgPj4gMTYpOwotCQkJc2VuZHBhY2tldFsyMF0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDBGRjAwKSA+PiA4KTsKLQkJCXNlbmRwYWNrZXRbMjFdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLX0gLyogc3dpdGNoX25ldF9udW1iZXJzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgotICogUmV0dXJuIGEgcG9pbnRlciB0byBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cy4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCi0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZDsKLQkKLQlpZiggcHBwX3ByaXZfYXJlYSA9PSBOVUxMICkKLQkJcmV0dXJuIE5VTEw7Ci0KLQljYXJkID0gcHBwX3ByaXZfYXJlYS0+Y2FyZDsKLQlyZXR1cm4gJmNhcmQtPndhbmRldi5zdGF0czsKLX0KLQotLyoqKioqKiBQUFAgRmlybXdhcmUgSW50ZXJmYWNlIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBmaXJtd2FyZSBjb2RlIHZlcnNpb24uCi0gKglQdXQgY29kZSB2ZXJzaW9uIGFzIEFTQ0lJIHN0cmluZyBpbiBzdHIuIAotICovCi1zdGF0aWMgaW50IHBwcF9yZWFkX3ZlcnNpb24oc2RsYV90ICpjYXJkLCBjaGFyICpzdHIpCi17Ci0JcHBwX21ib3hfdCAqbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfUkVBRF9DT0RFX1ZFUlNJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykKLSAKLQkJcHBwX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCi0JZWxzZSBpZiAoc3RyKSB7Ci0KLQkJaW50IGxlbiA9IG1iLT5jbWQubGVuZ3RoOwotCi0JCW1lbWNweShzdHIsIG1iLT5kYXRhLCBsZW4pOwotCQlzdHJbbGVuXSA9ICdcMCc7Ci0KLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBPdXQtQm91bmQgQXV0aGVudGljYXRpb24uCi0qLwotc3RhdGljIGludCBwcHBfc2V0X291dGJuZF9hdXRoIChzZGxhX3QgKmNhcmQsIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCW1lbXNldCgmbWItPmRhdGEsIDAsIChzdHJsZW4ocHBwX3ByaXZfYXJlYS0+dXNlcmlkKSArIAotCQkJCQlzdHJsZW4ocHBwX3ByaXZfYXJlYS0+cGFzc3dkKSArIDIgKSApOwotCW1lbWNweShtYi0+ZGF0YSwgcHBwX3ByaXZfYXJlYS0+dXNlcmlkLCBzdHJsZW4ocHBwX3ByaXZfYXJlYS0+dXNlcmlkKSk7Ci0JbWVtY3B5KChtYi0+ZGF0YSArIHN0cmxlbihwcHBfcHJpdl9hcmVhLT51c2VyaWQpICsgMSksIAotCQlwcHBfcHJpdl9hcmVhLT5wYXNzd2QsIHN0cmxlbihwcHBfcHJpdl9hcmVhLT5wYXNzd2QpKTsJCi0JCi0JbWItPmNtZC5sZW5ndGggID0gc3RybGVuKHBwcF9wcml2X2FyZWEtPnVzZXJpZCkgKyAKLQkJCQkJc3RybGVuKHBwcF9wcml2X2FyZWEtPnBhc3N3ZCkgKyAyIDsKLQkKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfU0VUX09VVEJPVU5EX0FVVEg7Ci0KLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWlmIChlcnIgIT0gQ01EX09LKQotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IEluLUJvdW5kIEF1dGhlbnRpY2F0aW9uLgotKi8KLXN0YXRpYyBpbnQgcHBwX3NldF9pbmJuZF9hdXRoIChzZGxhX3QgKmNhcmQsIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVyciwgaTsKLQljaGFyKiB1c2VyX3Rva2Vuc1szMl07Ci0JY2hhciogcGFzc190b2tlbnNbMzJdOwotCWludCB1c2VyaWRzLCBwYXNzd2RzOwotCWludCBhZGRfcHRyOwotCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWVtc2V0KCZtYi0+ZGF0YSwgMCwgMTAwOCk7Ci0JbWVtY3B5KG1iLT5kYXRhLCBwcHBfcHJpdl9hcmVhLT5zeXNuYW1lLCAKLQkJCQkJCXN0cmxlbihwcHBfcHJpdl9hcmVhLT5zeXNuYW1lKSk7Ci0JCi0JLyogUGFyc2UgdGhlIHVzZXJpZCBzdHJpbmcgYW5kIHRoZSBwYXNzd29yZCBzdHJpbmcgYW5kIGJ1aWxkIGEgc3RyaW5nCi0JICAgdG8gY29weSBpdCB0byB0aGUgZGF0YSBhcmVhIG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZS4gICBUaGUgc3RyaW5nCi0JICAgd2lsbCBsb29rIGxpa2UgIlNZU19OQU1FPE5VTEw+VVNFUjE8TlVMTD5QQVNTMTxOVUxMPlVTRVIyPE5VTEw+UEFTUzIKLQkgICAuLi4uPE5VTEw+ICIgCi0JICovCi0JdXNlcmlkcyA9IHRva2VuaXplKCBwcHBfcHJpdl9hcmVhLT51c2VyaWQsIHVzZXJfdG9rZW5zKTsKLQlwYXNzd2RzID0gdG9rZW5pemUoIHBwcF9wcml2X2FyZWEtPnBhc3N3ZCwgcGFzc190b2tlbnMpOwotCQotCWlmICh1c2VyaWRzICE9IHBhc3N3ZHMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogTnVtYmVyIG9mIHBhc3N3b3JkcyBkb2VzIG5vdCBlcXVhbCB0aGUgbnVtYmVyIG9mIHVzZXIgaWRzXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDE7CQotCX0KLQotCWFkZF9wdHIgPSBzdHJsZW4ocHBwX3ByaXZfYXJlYS0+c3lzbmFtZSkgKyAxOwotCWZvciAoaT0wOyBpPHVzZXJpZHM7IGkrKyl7Ci0JCW1lbWNweSgobWItPmRhdGEgKyBhZGRfcHRyKSwgdXNlcl90b2tlbnNbaV0sIAotCQkJCQkJCXN0cmxlbih1c2VyX3Rva2Vuc1tpXSkpOwotCQltZW1jcHkoKG1iLT5kYXRhICsgYWRkX3B0ciArIHN0cmxlbih1c2VyX3Rva2Vuc1tpXSkgKyAxKSwgCi0JCQkJCXBhc3NfdG9rZW5zW2ldLCBzdHJsZW4ocGFzc190b2tlbnNbaV0pKTsKLQkJYWRkX3B0ciA9IGFkZF9wdHIgKyBzdHJsZW4odXNlcl90b2tlbnNbaV0pICsgMSArIAotCQkJCQkJc3RybGVuKHBhc3NfdG9rZW5zW2ldKSArIDE7Ci0JfQotCi0JbWItPmNtZC5sZW5ndGggID0gYWRkX3B0ciArIDE7Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX1NFVF9JTkJPVU5EX0FVVEg7Ci0KLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWlmIChlcnIgIT0gQ01EX09LKQotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9rZW5pemUgc3RyaW5nLgotICogICAgICBQYXJzZSBhIHN0cmluZyBvZiB0aGUgZm9sbG93aW5nIHN5bnRheDoKLSAqICAgICAgICAgICAgICA8YXJnMT4sPGFyZzI+LC4uLgotICogICAgICBhbmQgZmlsbCBhcnJheSBvZiB0b2tlbnMgd2l0aCBwb2ludGVycyB0byBzdHJpbmcgZWxlbWVudHMuCi0gKgotICovCi1zdGF0aWMgaW50IHRva2VuaXplIChjaGFyICpzdHIsIGNoYXIgKip0b2tlbnMpCi17Ci0gICAgICAgIGludCBjbnQgPSAwOwotCi0gICAgICAgIHRva2Vuc1swXSA9IHN0cnNlcCgmc3RyLCAiLyIpOwotICAgICAgICB3aGlsZSAodG9rZW5zW2NudF0gJiYgKGNudCA8IDMyIC0gMSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICB0b2tlbnNbY250XSA9IHN0cnN0cmlwKHRva2Vuc1tjbnRdLCAiIFx0Iik7Ci0gICAgICAgICAgICAgICAgdG9rZW5zWysrY250XSA9IHN0cnNlcCgmc3RyLCAiLyIpOwotICAgICAgICB9Ci0JcmV0dXJuIGNudDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgb2ZmIHRoZSBzdHJpbmcgc3RyLgotICovCi1zdGF0aWMgY2hhciogc3Ryc3RyaXAgKGNoYXIgKnN0ciwgY2hhciogcykKLXsKLSAgICAgICAgY2hhciAqZW9zID0gc3RyICsgc3RybGVuKHN0cik7ICAgICAgICAgIC8qIC0+IGVuZCBvZiBzdHJpbmcgKi8KLQotICAgICAgICB3aGlsZSAoKnN0ciAmJiBzdHJjaHIocywgKnN0cikpCi0gICAgICAgICAgICAgICAgKytzdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHJpcCBsZWFkaW5nIHNwYWNlcyAqLwotICAgICAgICA7Ci0gICAgICAgIHdoaWxlICgoZW9zID4gc3RyKSAmJiBzdHJjaHIocywgKihlb3MgLSAxKSkpCi0gICAgICAgICAgICAgICAgLS1lb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KLSAgICAgICAgOwotICAgICAgICAqZW9zID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHN0cjsKLX0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29uZmlndXJlIFBQUCBmaXJtd2FyZS4KLSAqLwotc3RhdGljIGludCBwcHBfY29uZmlndXJlKHNkbGFfdCAqY2FyZCwgdm9pZCAqZGF0YSkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGRhdGFfbGVuID0gc2l6ZW9mKHBwcDUwOF9jb25mX3QpOyAKLQlpbnQgZXJyOwotCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWVtY3B5KG1iLT5kYXRhLCBkYXRhLCBkYXRhX2xlbik7Ci0JbWItPmNtZC5sZW5ndGggID0gZGF0YV9sZW47Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX1NFVF9DT05GSUc7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBpbnRlcnJ1cHQgbW9kZS4KLSAqLwotc3RhdGljIGludCBwcHBfc2V0X2ludHJfbW9kZShzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGNoYXIgbW9kZSkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0gICAgICAgIHBwcF9pbnRyX2luZm9fdCAqcHBwX2ludHJfZGF0YSA9IChwcHBfaW50cl9pbmZvX3QgKikgJm1iLT5kYXRhWzBdOwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQlwcHBfaW50cl9kYXRhLT5pX2VuYWJsZSA9IG1vZGU7Ci0KLQlwcHBfaW50cl9kYXRhLT5pcnEgPSBjYXJkLT5ody5pcnE7Ci0JbWItPmNtZC5sZW5ndGggPSAyOwotCi0gICAgICAgLyogSWYgdGltZXIgaGFzIGJlZW4gZW5hYmxlZCwgc2V0IHRoZSB0aW1lciBkZWxheSB0byAxc2VjICovCi0gICAgICAgaWYgKG1vZGUgJiAweDgwKXsKLSAgICAgICAJCXBwcF9pbnRyX2RhdGEtPnRpbWVyX2xlbiA9IDI1MDsgLy81Oy8vMTAwOyAvLzI1MDsKLSAgICAgICAgICAgICAgICBtYi0+Y21kLmxlbmd0aCA9IDQ7Ci0gICAgICAgIH0KLQkKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfU0VUX0lOVFJfRkxBR1M7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCi0JaWYgKGVyciAhPSBDTURfT0spIAotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0gCQkKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGNvbW11bmljYXRpb25zLgotICovCi1zdGF0aWMgaW50IHBwcF9jb21tX2VuYWJsZShzZGxhX3QgKmNhcmQpCi17Ci0JcHBwX21ib3hfdCAqbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfQ09NTV9FTkFCTEU7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCi0JaWYgKGVyciAhPSBDTURfT0spIAotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0JZWxzZQkKLQkJY2FyZC0+dS5wLmNvbW1fZW5hYmxlZCA9IDE7CQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEaXNhYmxlIGNvbW11bmljYXRpb25zLgotICovCi1zdGF0aWMgaW50IHBwcF9jb21tX2Rpc2FibGUoc2RsYV90ICpjYXJkKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX0NPTU1fRElTQUJMRTsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyICE9IENNRF9PSykgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQllbHNlCi0JCWNhcmQtPnUucC5jb21tX2VuYWJsZWQgPSAwOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwcHBfY29tbV9kaXNhYmxlX3NodXRkb3duKHNkbGFfdCAqY2FyZCkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JcHBwX2ludHJfaW5mb190ICpwcHBfaW50cl9kYXRhOwotCWludCBlcnI7Ci0KLQlpZiAoIW1iKXsKLQkJcmV0dXJuIDE7Ci0JfQotCQotCXBwcF9pbnRyX2RhdGEgPSAocHBwX2ludHJfaW5mb190ICopICZtYi0+ZGF0YVswXTsKLQkKLQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JcHBwX2ludHJfZGF0YS0+aV9lbmFibGUgPSAwOwotCi0JcHBwX2ludHJfZGF0YS0+aXJxID0gY2FyZC0+aHcuaXJxOwotCW1iLT5jbWQubGVuZ3RoID0gMjsKLQotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9TRVRfSU5UUl9GTEFHUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCS8qIERpc2FibGUgY29tbXVuaWNhdGlub25zICovCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX0NPTU1fRElTQUJMRTsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWNhcmQtPnUucC5jb21tX2VuYWJsZWQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdldCBjb21tdW5pY2F0aW9ucyBlcnJvciBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHBwcF9nZXRfZXJyX3N0YXRzKHNkbGFfdCAqY2FyZCkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9SRUFEX0VSUk9SX1NUQVRTOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQotCWlmIChlcnIgPT0gQ01EX09LKSB7Ci0JCQotCQlwcHBfZXJyX3N0YXRzX3QqIHN0YXRzID0gKHZvaWQqKW1iLT5kYXRhOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfb3Zlcl9lcnJvcnMgICAgPSBzdGF0cy0+cnhfb3ZlcnJ1bjsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2NyY19lcnJvcnMgICAgID0gc3RhdHMtPnJ4X2JhZF9jcmM7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICA9IHN0YXRzLT5yeF9hYm9ydDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgID0gc3RhdHMtPnJ4X2xvc3Q7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9IHN0YXRzLT50eF9hYm9ydDsKLQkKLQl9IGVsc2UgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNlbmQgcGFja2V0LgotICoJUmV0dXJuOgkwIC0gby5rLgotICoJCTEgLSBubyB0cmFuc21pdCBidWZmZXJzIGF2YWlsYWJsZQotICovCi1zdGF0aWMgaW50IHBwcF9zZW5kIChzZGxhX3QgKmNhcmQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgcHJvdG8pCi17Ci0JcHBwX2J1Zl9jdGxfdCAqdHhidWYgPSBjYXJkLT51LnAudHhidWY7Ci0KLQlpZiAodHhidWYtPmZsYWcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0JCi0Jc2RsYV9wb2tlKCZjYXJkLT5odywgdHhidWYtPmJ1Zi5wdHIsIGRhdGEsIGxlbik7Ci0KLQl0eGJ1Zi0+bGVuZ3RoID0gbGVuOwkJLyogZnJhbWUgbGVuZ3RoICovCi0JCi0JaWYgKHByb3RvID09IGh0b25zKEVUSF9QX0lQWCkpCi0JCXR4YnVmLT5wcm90byA9IDB4MDE7CS8qIHByb3RvY29sIElEICovCi0JZWxzZQotCQl0eGJ1Zi0+cHJvdG8gPSAweDAwOwkvKiBwcm90b2NvbCBJRCAqLwotCQotCXR4YnVmLT5mbGFnID0gMTsJCS8qIHN0YXJ0IHRyYW5zbWlzc2lvbiAqLwotCi0JLyogVXBkYXRlIHRyYW5zbWl0IGJ1ZmZlciBjb250cm9sIGZpZWxkcyAqLwotCWNhcmQtPnUucC50eGJ1ZiA9ICsrdHhidWY7Ci0KLQlpZiAoKHZvaWQqKXR4YnVmID4gY2FyZC0+dS5wLnR4YnVmX2xhc3QpCi0JCWNhcmQtPnUucC50eGJ1ZiA9IGNhcmQtPnUucC50eGJ1Zl9iYXNlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKiogRmlybXdhcmUgRXJyb3IgSGFuZGxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpcm13YXJlIGVycm9yIGhhbmRsZXIuCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGZpcm13YXJlIGNvbW1hbmQgcmV0dXJucyBub24temVybwotICoJcmV0dXJuIGNvZGUuCi0gKgotICogUmV0dXJuIHplcm8gaWYgcHJldmlvdXMgY29tbWFuZCBoYXMgdG8gYmUgY2FuY2VsbGVkLgotICovCi1zdGF0aWMgaW50IHBwcF9lcnJvcihzZGxhX3QgKmNhcmQsIGludCBlcnIsIHBwcF9tYm94X3QgKm1iKQotewotCXVuc2lnbmVkIGNtZCA9IG1iLT5jbWQuY29tbWFuZDsKLQotCXN3aXRjaCAoZXJyKSB7Ci0KLQkJY2FzZSBDTURfVElNRU9VVDoKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY21kKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIgotCQkJCSwgY2FyZC0+ZGV2bmFtZSwgY21kLCBlcnIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioqKioqIEludGVycnVwdCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQUFAgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KLSAqLwotc3RhdGljIHZvaWQgd3BwX2lzciAoc2RsYV90ICpjYXJkKQotewotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCWNoYXIgKnB0ciA9ICZmbGFncy0+aWZsYWc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JaW50IGk7Ci0KLQljYXJkLT5pbl9pc3IgPSAxOwotCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfZW50cnk7Ci0KLQlpZiAoIWRldiAmJiBmbGFncy0+aWZsYWcgIT0gUFBQX0lOVFJfQ01EKXsKLQkJY2FyZC0+aW5faXNyID0gMDsKLQkJZmxhZ3MtPmlmbGFnID0gMDsKLQkJcmV0dXJuOwotCX0KLQkKLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJY2FyZC0+aW5faXNyID0gMDsKLQkJZmxhZ3MtPmlmbGFnID0gMDsKLQkJcmV0dXJuOwotCX0KLQkKLQkKLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCQkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9hbHJlYWR5X2NyaXRpY2FsOwotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBDcml0aWNhbCB3aGlsZSBpbiBJU1IhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWNhcmQtPmluX2lzciA9IDA7Ci0JCQlmbGFncy0+aWZsYWcgPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0Jc3dpdGNoIChmbGFncy0+aWZsYWcpIHsKLQotCQljYXNlIFBQUF9JTlRSX1JYUkRZOgkvKiByZWNlaXZlIGludGVycnVwdCAgMHgwMSAgKGJpdCAwKSovCi0JCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX3J4OwotCQkJcnhfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfVFhSRFk6CS8qIHRyYW5zbWl0IGludGVycnVwdCAgMHgwMiAoYml0IDEpKi8KLQkJCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfdHg7Ci0JCQlmbGFncy0+aW1hc2sgJj0gflBQUF9JTlRSX1RYUkRZOwotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQUFBfSU5UUl9DTUQ6ICAgICAgLyogaW50ZXJmYWNlIGNvbW1hbmQgY29tcGxldGVkICovCi0JCQkrK0ludHJfdGVzdF9jb3VudGVyOwotCQkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9pbnRyX3Rlc3Q7Ci0JCQlicmVhazsKLQotCQljYXNlIFBQUF9JTlRSX01PREVNOiAgICAvKiBtb2RlbSBzdGF0dXMgY2hhbmdlIChEQ0QsIENUUykgMHgwNCAoYml0IDIpKi8KLQkJY2FzZSBQUFBfSU5UUl9ESVNDOiAgCS8qIERhdGEgbGluayBkaXNjb25uZWN0ZWQgMHgxMCAgKGJpdCA0KSovCQotCQljYXNlIFBQUF9JTlRSX09QRU46ICAgCS8qIERhdGEgbGluayBvcGVuIDB4MjAgIChiaXQgNSkqLwotCQljYXNlIFBQUF9JTlRSX0RST1BfRFRSOgkvKiBEVFIgZHJvcCB0aW1lb3V0IGV4cGlyZWQgIDB4NDAgYml0IDYgKi8KLQkJCWV2ZW50X2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQkKLQkJY2FzZSBQUFBfSU5UUl9USU1FUjoKLQkJCXRpbWVyX2ludHIoY2FyZCk7Ci0JCQlicmVhazsJIAotCi0JCWRlZmF1bHQ6CS8qIHVuZXhwZWN0ZWQgaW50ZXJydXB0ICovCi0JCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX3NwdXJpb3VzOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNwdXJpb3VzIGludGVycnVwdCAweCUwMlghXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLCBmbGFncy0+aWZsYWcpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElEIEJ5dGVzID0gIixjYXJkLT5kZXZuYW1lKTsKLQkgCQlmb3IoaSA9IDA7IGkgPCA4OyBpICsrKQotCQkJCXByaW50ayhLRVJOX0lORk8gIjB4JTAyWCAiLCAqKHB0ciArIDB4MjggKyBpKSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwkKLQl9Ci0JCi0JY2FyZC0+aW5faXNyID0gMDsKLQlmbGFncy0+aWZsYWcgPSAwOwotCXJldHVybjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWNlaXZlIGludGVycnVwdCBoYW5kbGVyLgotICovCi1zdGF0aWMgdm9pZCByeF9pbnRyKHNkbGFfdCAqY2FyZCkKLXsKLQlwcHBfYnVmX2N0bF90ICpyeGJ1ZiA9IGNhcmQtPnJ4bWI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgbGVuOwotCXZvaWQgKmJ1ZjsKLQlpbnQgaTsKLSAgICAgICAgcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0gICAgICAgIGNoYXIgKnB0ciA9ICZmbGFncy0+aWZsYWc7Ci0JaW50IHVkcF90eXBlOwotCQotCi0JaWYgKHJ4YnVmLT5mbGFnICE9IDB4MDEpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBjb3JydXB0ZWQgUnggYnVmZmVyIEAgMHglWCwgZmxhZyA9IDB4JTAyWCFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgKHVuc2lnbmVkKXJ4YnVmLCByeGJ1Zi0+ZmxhZyk7Ci0JCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJRCBCeXRlcyA9ICIsY2FyZC0+ZGV2bmFtZSk7Ci0JIAkKLQkJZm9yKGkgPSAwOyBpIDwgODsgaSArKykKLQkJCXByaW50ayhLRVJOX0lORk8gIjB4JTAyWCAiLCAqKHB0ciArIDB4MjggKyBpKSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlxuIik7CQotCQkKLQkJKytjYXJkLT5zdGF0aXN0aWNzLnJ4X2ludHJfY29ycnVwdF9yeF9iZnI7Ci0KLQotCQkvKiBCdWcgRml4OiBNYXIgNiAyMDAwCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZ2V0IGEgY29ycnVwdGVkIG1haWxib3gsIGl0IG1lYW5zIHRoYXQgZHJpdmVyIAotICAgICAgICAgICAgICAgICAqIGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGZpcm13YXJlLiBUaGVyZSBpcyBubyByZWNvdmVyeS4KLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBkb24ndCB0dXJuIG9mZiBhbGwgaW50ZXJydXB0cyBmb3IgdGhpcyBjYXJkCi0gICAgICAgICAgICAgICAgICogdGhlIG1hY2hpbmUgd2lsbCBjcmFzaC4gCi0gICAgICAgICAgICAgICAgICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCByb3V0ZXIgZmFpbHVyZSAuLi4hISFcbiIsIGNhcmQtPmRldm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICJQbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyAhXG4iKTsKLQkJcHBwX3NldF9pbnRyX21vZGUoY2FyZCwwKTsKLQkJcmV0dXJuOwotCX0KLSAgICAgIAotCWlmIChkZXYgJiYgbmV0aWZfcnVubmluZyhkZXYpICYmIGRldi0+cHJpdil7Ci0JCi0JCWxlbiAgPSByeGJ1Zi0+bGVuZ3RoOwotCQlwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCi0JCS8qIEFsbG9jYXRlIHNvY2tldCBidWZmZXIgKi8KLQkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwotCi0JCWlmIChza2IgIT0gTlVMTCkgewotCQkKLQkJCS8qIENvcHkgZGF0YSB0byB0aGUgc29ja2V0IGJ1ZmZlciAqLwotCQkJdW5zaWduZWQgYWRkciA9IHJ4YnVmLT5idWYucHRyOwotCi0JCQlpZiAoKGFkZHIgKyBsZW4pID4gY2FyZC0+dS5wLnJ4X3RvcCArIDEpIHsKLQkJCQotCQkJCXVuc2lnbmVkIHRtcCA9IGNhcmQtPnUucC5yeF90b3AgLSBhZGRyICsgMTsKLQkJCQlidWYgPSBza2JfcHV0KHNrYiwgdG1wKTsKLQkJCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBhZGRyLCBidWYsIHRtcCk7Ci0JCQkJYWRkciA9IGNhcmQtPnUucC5yeF9iYXNlOwotCQkJCWxlbiAtPSB0bXA7Ci0JCQl9Ci0JCQlidWYgPSBza2JfcHV0KHNrYiwgbGVuKTsKLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGJ1ZiwgbGVuKTsKLQotCQkJLyogRGVjYXBzdWxhdGUgcGFja2V0ICovCi0gICAgICAgIAkJc3dpdGNoIChyeGJ1Zi0+cHJvdG8pIHsKLQkKLQkJCQljYXNlIDB4MDA6Ci0JCQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAweDAxOgotCQkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBYKTsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKCBza2IsIGNhcmQgKTsKLQotCQkJaWYgKHVkcF90eXBlID09IFVEUF9QVFBJUEVfVFlQRSl7Ci0KLQkJCQkvKiBIYW5kbGUgYSBVRFAgUmVxdWVzdCBpbiBUaW1lciBJbnRlcnJ1cHQgKi8KLQkJCQlpZihzdG9yZV91ZHBfbWdtdF9wa3QoVURQX1BLVF9GUk1fTkVUV09SSywgY2FyZCwgc2tiLCBkZXYsCi0gICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgCQkJcHBwX3ByaXZfYXJlYSkpewotCSAgICAgICAgICAgICAgIAkJCWZsYWdzLT5pbWFzayB8PSBQUFBfSU5UUl9USU1FUjsKLQkJCQl9Ci0JCQkJKytwcHBfcHJpdl9hcmVhLT5yeF9pbnRyX3N0YXQucnhfaW50cl9QSVBFX3JlcXVlc3Q7Ci0KLQotCQkJfSBlbHNlIGlmIChoYW5kbGVfSVBYV0FOKHNrYi0+ZGF0YSxjYXJkLT5kZXZuYW1lLCAKLQkJCQkJCSBwcHBfcHJpdl9hcmVhLT5lbmFibGVfSVBYLCAKLQkJCQkJCSBwcHBfcHJpdl9hcmVhLT5uZXR3b3JrX251bWJlciwgCi0JCQkJCQkgc2tiLT5wcm90b2NvbCkpIHsKLQkJCQotCQkJCS8qIEhhbmRsZSBhbiBJUFhXQU4gcGFja2V0ICovCi0JCQkJaWYoIHBwcF9wcml2X2FyZWEtPmVuYWJsZV9JUFgpIHsKLQkJCQkJCi0JCQkJCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGFscmVhZHkgc2VuZGluZyAqLwotCQkJCQlpZiAoIXRlc3RfYml0KFNFTkRfQ1JJVCwgJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkJCQkgCXBwcF9zZW5kKGNhcmQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIGh0b25zKEVUSF9QX0lQWCkpOwotCQkJCQl9Ci0JCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQkJCQl9IGVsc2UgewotCQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogUGFzcyBkYXRhIHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLwotCSAgICAJCQlza2ItPmRldiA9IGRldjsKLQkJCQlza2ItPm1hYy5yYXcgID0gc2tiLT5kYXRhOwotCi0JCQkgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHM7Ci0JCQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkgICAgCQkrK3BwcF9wcml2X2FyZWEtPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7CQotCQkJCW5ldGlmX3J4KHNrYik7Ci0JCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCX0KLQotCQl9IGVsc2UgewotCQotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfQotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJCSsrcHBwX3ByaXZfYXJlYS0+cnhfaW50cl9zdGF0LnJ4X2ludHJfbm9fc29ja2V0OwotCQl9Ci0KLQl9IGVsc2UgewotCQkrK2NhcmQtPnN0YXRpc3RpY3MucnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7Ci0JfQotCi0JLyogUmVsZWFzZSBidWZmZXIgZWxlbWVudCBhbmQgY2FsY3VsYXRlIGEgcG9pbnRlciB0byB0aGUgbmV4dCBvbmUgKi8KLQlyeGJ1Zi0+ZmxhZyA9IDB4MDA7Ci0JY2FyZC0+cnhtYiA9ICsrcnhidWY7Ci0JaWYgKCh2b2lkKilyeGJ1ZiA+IGNhcmQtPnUucC5yeGJ1Zl9sYXN0KQotCQljYXJkLT5yeG1iID0gY2FyZC0+dS5wLnJ4YnVmX2Jhc2U7Ci19Ci0KLQotdm9pZCBldmVudF9pbnRyIChzZGxhX3QgKmNhcmQpCi17Ci0KLSAJc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0gICAgICAgIHBwcF9wcml2YXRlX2FyZWFfdCogcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQl2b2xhdGlsZSBwcHBfZmxhZ3NfdCAqZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCXN3aXRjaCAoZmxhZ3MtPmlmbGFnKXsKLQotCQljYXNlIFBQUF9JTlRSX01PREVNOiAgICAvKiBtb2RlbSBzdGF0dXMgY2hhbmdlIChEQ0QsIENUUykgMHgwNCAgKGJpdCAyKSovCi0KLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpewotCQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogTW9kZW0gc3RhdHVzOiBEQ0Q9JXMgQ1RTPSVzXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBEQ0QoZmxhZ3MtPm1zdGF0dXMpLCBDVFMoZmxhZ3MtPm1zdGF0dXMpKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfRElTQzogIAkvKiBEYXRhIGxpbmsgZGlzY29ubmVjdGVkIDB4MTAgIChiaXQgNCkqLwkKLQotCQkJTkVYX1BSSU5USyAoS0VSTl9JTkZPICJEYXRhIGxpbmsgZGlzY29ubmVjdGVkIGludHIgQ2F1c2UgJVhcbiIsCi0JCQkJCSAgICAgICBmbGFncy0+ZGlzY19jYXVzZSk7Ci0KLQkJCWlmIChmbGFncy0+ZGlzY19jYXVzZSAmCi0JCQkJKFBQUF9MT0NBTF9URVJNSU5BVElPTiB8IFBQUF9EQ0RfQ1RTX0RST1AgfAotCQkJCVBQUF9SRU1PVEVfVEVSTUlOQVRJT04pKSB7Ci0KLQkJCQlpZiAoY2FyZC0+dS5wLmlwX21vZGUgPT0gV0FOT1BUX1BQUF9QRUVSKSB7IAotCQkJCQlzZXRfYml0KDAsJlJlYWRfY29ubmVjdGlvbl9pbmZvKTsKLQkJCQl9Ci0JCQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQkJCQlzaG93X2Rpc2NfY2F1c2UoY2FyZCwgZmxhZ3MtPmRpc2NfY2F1c2UpOwotCQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQ7Ci0JCQkJZmxhZ3MtPmltYXNrIHw9IFBQUF9JTlRSX1RJTUVSOwotCQkJCXRyaWdnZXJfcHBwX3BvbGwoZGV2KTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfT1BFTjogICAJLyogRGF0YSBsaW5rIG9wZW4gMHgyMCAgKGJpdCA1KSovCi0KLQkJCU5FWF9QUklOVEsgKEtFUk5fSU5GTyAiJXM6IFBQUCBMaW5rIE9wZW4sIExDUD0lcyBJUD0lc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxMQ1AoZmxhZ3MtPmxjcF9zdGF0ZSksCi0JCQkJCUlQKGZsYWdzLT5pcF9zdGF0ZSkpOwotCi0JCQlpZiAoZmxhZ3MtPmxjcF9zdGF0ZSA9PSAweDA5ICYmIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzLT5pcF9zdGF0ZSA9PSAweDA5IHx8IGZsYWdzLT5pcHhfc3RhdGUgPT0gMHgwOSkpewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHBvbGxpbmcgdGltZXIgYW5kIHNldCB0aGUgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gV0FOX0NPTk5ORUNURUQgKi8KLQotCi0JCQkJLyogQlVHIEZJWDogV2hlbiB0aGUgcHJvdG9jb2wgcmVzdGFydHMsIGR1cmluZyBoZWF2eSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdHJhZmZpYywgYm9hcmQgdHggYnVmZmVycyBhbmQgZHJpdmVyIHR4IGJ1ZmZlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2FuIGdvIG91dCBvZiBzeW5jLiAgVGhpcyBjaGVja3MgdGhlIGNvbmRpdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbmQgaWYgdGhlIHR4IGJ1ZmZlcnMgYXJlIG91dCBvZiBzeW5jLCB0aGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3RvY29scyBhcmUgcmVzdGFydGVkLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSSBkb24ndCBrbm93IHdoeSB0aGUgYm9hcmQgdHggYnVmZmVyIGlzIG91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiBzeW5jLiBJdCBjb3VsZCBiZSB0aGF0IGEgcGFja2V0cyBpcyB0eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aGlsZSB0aGUgbGluayBpcyBkb3duLCBidXQgdGhhdCBpcyBub3QgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHBvc3NpYmxlLiBUaGUgb3RoZXIgcG9zc2libGlsaXR5IGlzIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpcm13YXJlIGRvZXNuJ3QgcmVpbml0aWFsaXplIHByb3Blcmx5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGSVhNRTogQSBiZXR0ZXIgZml4IHNob3VsZCBiZSBmb3VuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotCQkJCWlmIChkZXRlY3RfYW5kX2ZpeF90eF9idWcoY2FyZCkpewotCi0JCQkJCXBwcF9jb21tX2Rpc2FibGUoY2FyZCk7Ci0KLQkJCQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQkJCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gCi0JCQkJCQlUTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UOwotCQkJCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7Ci0JCQkJCWJyZWFrOwkKLQkJCQl9Ci0KLQkJCQljYXJkLT5zdGF0ZV90aWNrID0gamlmZmllczsKLQkJCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVEVEKTsKLQotCQkJCU5FWF9QUklOVEsoS0VSTl9JTkZPICJDT046IEwgVHg6ICVseCAgQiBUeDogJWx4IHx8IEwgUnggJWx4IEIgUnggJWx4XG4iLAotCQkJCQkodW5zaWduZWQgbG9uZyljYXJkLT51LnAudHhidWYsICpjYXJkLT51LnAudHhidWZfbmV4dCwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpY2FyZC0+cnhtYiwgKmNhcmQtPnUucC5yeGJ1Zl9uZXh0KTsKLQotCQkJCS8qIFRlbGwgdGltZXIgaW50ZXJydXB0IHRoYXQgUFBQIGV2ZW50IG9jY3VycmVkICovCi0JCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1BQUF9FVkVOVDsKLQkJCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7Ci0KLQkJCQkvKiBJZiB3ZSBhcmUgaW4gUEVFUiBtb2RlLCB3ZSBtdXN0IGZpcnN0IG9idGFpbiB0aGUKLQkJCQkgKiBJUCBpbmZvcm1hdGlvbiBhbmQgdGhlbiBnbyBpbnRvIHRoZSBwb2xsIHJvdXRpbmUgKi8KLQkJCQlpZiAoY2FyZC0+dS5wLmlwX21vZGUgIT0gV0FOT1BUX1BQUF9QRUVSKXsJCi0JCQkJCXRyaWdnZXJfcHBwX3BvbGwoZGV2KTsKLQkJCQl9Ci0JCQl9Ci0gICAgICAgICAgICAgICAgICAgCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfRFJPUF9EVFI6CQkvKiBEVFIgZHJvcCB0aW1lb3V0IGV4cGlyZWQgIDB4NDAgYml0IDYgKi8KLQotCQkJTkVYX1BSSU5USyhLRVJOX0lORk8gIkRUUiBEcm9wIFRpbWVvdXQgSW50ZXJycnVwdCBcbiIpOyAKLQotCQkJaWYgKGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUikgeyAKLQkJCQlzZXRfYml0KDAsJlJlYWRfY29ubmVjdGlvbl9pbmZvKTsKLQkJCX0KLQkJCi0JCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQotCQkJc2hvd19kaXNjX2NhdXNlKGNhcmQsIGZsYWdzLT5kaXNjX2NhdXNlKTsKLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQ7Ci0JCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7Ci0JCQl0cmlnZ2VyX3BwcF9wb2xsKGRldik7Ci0JCQlicmVhazsKLQkJCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRXJyb3IsIEludmFsaWQgUFBQIEV2ZW50XG4iLGNhcmQtPmRldm5hbWUpOwotCX0KLX0KLQotCi0KLS8qIFRJTUVSIElOVEVSUlVQVCAqLwotCi12b2lkIHRpbWVyX2ludHIgKHNkbGFfdCAqY2FyZCkKLXsKLQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLSAgICAgICAgcHBwX3ByaXZhdGVfYXJlYV90KiBwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCi0KLQlpZiAocHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQ09ORklHKXsKLQkJaWYgKCFjb25maWdfcHBwKGNhcmQpKXsKLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IAotCQkJCQl+VE1SX0lOVF9FTkFCTEVEX0NPTkZJRzsJCi0JCX0KLQl9Ci0KLQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLwotCWlmIChwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUpewotCQlwcHBfZ2V0X2Vycl9zdGF0cyhjYXJkKTsKLSAgICAgICAgICAgICAgICBpZighKC0tcHBwX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzKSl7Ci0JCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSAKLQkJCQl+VE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLQkJfQotCX0KLQotCS8qIFBQSVBFTU9OIFVEUCByZXF1ZXN0ICovCi0KLQlpZiAocHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVURQKXsKLQkJcHJvY2Vzc191ZHBfbWdtdF9wa3QoY2FyZCxkZXYsIHBwcF9wcml2X2FyZWEpOwotCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VEUDsKLQl9Ci0KLQkvKiBQUFAgRXZlbnQgKi8KLQlpZiAocHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UKXsKLQotCQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlID09IFdBTl9ESVNDT05ORUNURUQpewotCQkJcmV0cmlnZ2VyX2NvbW0oY2FyZCk7Ci0JCX0KLQotCQkvKiBJZiB0aGUgc3RhdGUgaXMgQ09OTkVDVElORywgaXQgbWVhbnMgdGhhdCBjb21tdW5pY2F0aW5zIHdlcmUKLQkgCSAqIGVuYWJsZWQuIFdoZW4gdGhlIHJlbW90ZSBzaWRlIGVuYWJsZXMgaXRzIGNvbW1pbmljYXRpb24gd2UKLQkgCSAqIHNob3VsZCBnZXQgYW4gaW50ZXJydXB0IFBQUF9JTlRSX09QRU4sIHRodXMgdHVybiBvZmYgcG9sbGluZyAKLQkJICovCi0KLQkJZWxzZSBpZiAoY2FyZC0+d2FuZGV2LnN0YXRlID09IFdBTl9DT05ORUNUSU5HKXsKLQkJCS8qIFR1cm4gb2ZmIHRoZSB0aW1lciBpbnRlcnJ1cHQgKi8KLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UOwotCQl9Ci0KLQkJLyogSWYgc3RhdGUgaXMgY29ubmVjdGVkIGFuZCB3ZSBhcmUgaW4gUEVFUiBtb2RlIAotCSAJICogcG9sbCBmb3IgYW4gSVAgYWRkcmVzcyB3aGljaCB3aWxsIGJlIHByb3ZpZGVkIGJ5IHJlbW90ZSBlbmQuCi0JIAkgKi8KLQkJZWxzZSBpZiAoKGNhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEICYmIAotCQkgIAkgIGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUikgJiYgCi0JCSAgCSAgdGVzdF9iaXQoMCwmUmVhZF9jb25uZWN0aW9uX2luZm8pKXsKLQotCQkJY2FyZC0+c3RhdGVfdGljayA9IGppZmZpZXM7Ci0JCQlpZiAocmVhZF9jb25uZWN0aW9uX2luZm8gKGNhcmQpKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHJlYWQgUEVFUiBJUCBBZGRyZXNzZXNcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfWVsc2V7Ci0JCQkJY2xlYXJfYml0KDAsJlJlYWRfY29ubmVjdGlvbl9pbmZvKTsKLQkJCQlzZXRfYml0KDEsJlJlYWRfY29ubmVjdGlvbl9pbmZvKTsKLQkJCQl0cmlnZ2VyX3BwcF9wb2xsKGRldik7Ci0JCQl9Ci0JCX1lbHNlewotCQkJLy9GSVhNRSBQdXQgdGhlIGNvbW1lbnQgYmFjayBpbnQKLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UOwotCQl9Ci0KLQl9LyogRW5kIG9mIFBQUF9FVkVOVCAqLwotCi0KLQkvKiBPbmx5IGRpc2FibGUgdGhlIHRpbWVyIGludGVycnVwdCBpZiB0aGVyZSBhcmUgbm8gdWRwLCBzdGF0aXN0aWMgKi8KLQkvKiB1cGRhdGVzIG9yIGV2ZW50cyBwZW5kaW5nICovCi0gICAgICAgIGlmKCFwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCkgewotICAgICAgICAgICAgICAgIGZsYWdzLT5pbWFzayAmPSB+UFBQX0lOVFJfVElNRVI7Ci0gICAgICAgIH0KLX0KLQotCi1zdGF0aWMgaW50IGhhbmRsZV9JUFhXQU4odW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwgY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBlbmFibGVfSVBYLCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCB1bnNpZ25lZCBzaG9ydCBwcm90bykKLXsKLQlpbnQgaTsKLQotCWlmKCBwcm90byA9PSBodG9ucyhFVEhfUF9JUFgpICkgewotCQkvL0l0J3MgYW4gSVBYIHBhY2tldAotCQlpZighZW5hYmxlX0lQWCkgewotCQkJLy9SZXR1cm4gMSBzbyB3ZSBkb24ndCBwYXNzIGl0IHVwIHRoZSBzdGFjay4KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLy9JdCdzIG5vdCBJUFggc28gcGFzcyBpdCB1cCB0aGUgc3RhY2suCi0JCXJldHVybiAwOwotCX0KLQotCWlmKCBzZW5kcGFja2V0WzE2XSA9PSAweDkwICYmCi0JICAgIHNlbmRwYWNrZXRbMTddID09IDB4MDQpCi0JewotCQkvL0l0J3MgSVBYV0FOCi0KLQkJaWYoIHNlbmRwYWNrZXRbMl0gPT0gMHgwMiAmJgotCQkgICAgc2VuZHBhY2tldFszNF0gPT0gMHgwMCkKLQkJewotCQkJLy9JdCdzIGEgdGltZXIgcmVxdWVzdCBwYWNrZXQKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBJUFhXQU4gVGltZXIgUmVxdWVzdCBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0KLQkJCS8vR28gdGhyb3VnaCB0aGUgcm91dGluZyBvcHRpb25zIGFuZCBhbnN3ZXIgbm8gdG8gZXZlcnkKLQkJCS8vb3B0aW9uIGV4Y2VwdCBVbm51bWJlcmVkIFJJUC9TQVAKLQkJCWZvcihpID0gNDE7IHNlbmRwYWNrZXRbaV0gPT0gMHgwMDsgaSArPSA1KQotCQkJewotCQkJCS8vMHgwMiBpcyB0aGUgb3B0aW9uIGZvciBVbm51bWJlcmVkIFJJUC9TQVAKLQkJCQlpZiggc2VuZHBhY2tldFtpICsgNF0gIT0gMHgwMikKLQkJCQl7Ci0JCQkJCXNlbmRwYWNrZXRbaSArIDFdID0gMDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vU2tpcCBvdmVyIHRoZSBleHRlbmRlZCBOb2RlIElEIG9wdGlvbgotCQkJaWYoIHNlbmRwYWNrZXRbaV0gPT0gMHgwNCApCi0JCQl7Ci0JCQkJaSArPSA4OwotCQkJfQotCi0JCQkvL1dlIGFsc28gd2FudCB0byB0dXJuIG9mZiBhbGwgaGVhZGVyIGNvbXByZXNzaW9uIG9wdC4KLQkJCWZvcig7IHNlbmRwYWNrZXRbaV0gPT0gMHg4MCA7KQotCQkJewotCQkJCXNlbmRwYWNrZXRbaSArIDFdID0gMDsKLQkJCQlpICs9IChzZW5kcGFja2V0W2kgKyAyXSA8PCA4KSArIChzZW5kcGFja2V0W2kgKyAzXSkgKyA0OwotCQkJfQotCi0JCQkvL1NldCB0aGUgcGFja2V0IHR5cGUgdG8gdGltZXIgcmVzcG9uc2UKLQkJCXNlbmRwYWNrZXRbMzRdID0gMHgwMTsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNlbmRpbmcgSVBYV0FOIFRpbWVyIFJlc3BvbnNlXG4iLGRldm5hbWUpOwotCQl9Ci0JCWVsc2UgaWYoIHNlbmRwYWNrZXRbMzRdID09IDB4MDIgKQotCQl7Ci0JCQkvL1RoaXMgaXMgYW4gaW5mb3JtYXRpb24gcmVxdWVzdCBwYWNrZXQKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBJUFhXQU4gSW5mb3JtYXRpb24gUmVxdWVzdCBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0KLQkJCS8vU2V0IHRoZSBwYWNrZXQgdHlwZSB0byBpbmZvcm1hdGlvbiByZXNwb25zZQotCQkJc2VuZHBhY2tldFszNF0gPSAweDAzOwotCi0JCQkvL1NldCB0aGUgcm91dGVyIG5hbWUKLQkJCXNlbmRwYWNrZXRbNTFdID0gJ1AnOwotCQkJc2VuZHBhY2tldFs1Ml0gPSAnVCc7Ci0JCQlzZW5kcGFja2V0WzUzXSA9ICdQJzsKLQkJCXNlbmRwYWNrZXRbNTRdID0gJ0knOwotCQkJc2VuZHBhY2tldFs1NV0gPSAnUCc7Ci0JCQlzZW5kcGFja2V0WzU2XSA9ICdFJzsKLQkJCXNlbmRwYWNrZXRbNTddID0gJy0nOwotCQkJc2VuZHBhY2tldFs1OF0gPSBDVkhleFRvQXNjaWkobmV0d29ya19udW1iZXIgPj4gMjgpOwotCQkJc2VuZHBhY2tldFs1OV0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwRjAwMDAwMCk+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzYwXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwRjAwMDAwKT4+IDIwKTsKLQkJCXNlbmRwYWNrZXRbNjFdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwRjAwMDApPj4gMTYpOwotCQkJc2VuZHBhY2tldFs2Ml0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwRjAwMCk+PiAxMik7Ci0JCQlzZW5kcGFja2V0WzYzXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDAwRjAwKT4+IDgpOwotCQkJc2VuZHBhY2tldFs2NF0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDBGMCk+PiA0KTsKLQkJCXNlbmRwYWNrZXRbNjVdID0gQ1ZIZXhUb0FzY2lpKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDAwRik7Ci0JCQlmb3IoaSA9IDY2OyBpIDwgOTk7IGkrPSAxKQotCQkJewotCQkJCXNlbmRwYWNrZXRbaV0gPSAwOwotCQkJfQotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU2VuZGluZyBJUFhXQU4gSW5mb3JtYXRpb24gUmVzcG9uc2UgcGFja2V0XG4iLGRldm5hbWUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVua25vd24gSVBYV0FOIHBhY2tldCFcbiIsZGV2bmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8vU2V0IHRoZSBXTm9kZUlEIHRvIG91ciBuZXR3b3JrIGFkZHJlc3MKLQkJc2VuZHBhY2tldFszNV0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQlzZW5kcGFja2V0WzM2XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCXNlbmRwYWNrZXRbMzddID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEZGMDApID4+IDgpOwotCQlzZW5kcGFja2V0WzM4XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRkYpOwotCi0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8vSWYgd2UgZ2V0IGhlcmUgaXQncyBhbiBJUFgtZGF0YSBwYWNrZXQsIHNvIGl0J2xsIGdldCBwYXNzZWQgdXAgdGhlIHN0YWNrLgotCi0JCS8vc3dpdGNoIHRoZSBuZXR3b3JrIG51bWJlcnMKLQkJc3dpdGNoX25ldF9udW1iZXJzKHNlbmRwYWNrZXQsIG5ldHdvcmtfbnVtYmVyLCAxKTsJCi0JCXJldHVybiAwOwotCX0KLX0KLQotLyoqKioqKiBCYWNrZ3JvdW5kIFBvbGxpbmcgUm91dGluZXMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEFsbCBwb2xsaW5nIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCBieSB0aGUgVElNRVIgaW50ZXJydXB0IGluIHRoZSB3cHBfaXNyIAotICogcm91dGluZS4gIAotICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTW9uaXRvciBhY3RpdmUgbGluayBwaGFzZS4KLSAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc19yb3V0ZSAoc2RsYV90ICpjYXJkKQotewotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQkKLQlpZiAoKGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUikgJiYKLQkgICAgKGZsYWdzLT5pcF9zdGF0ZSA9PSAweDA5KSl7IAotCi0JCS8qIFdlIGdldCBpcF9sb2NhbCBmcm9tIHRoZSBmaXJtd2FyZSBpbiBQRUVSIG1vZGUuCi0JICAgICAgICAgKiBUaGVyZWZvcmUsIGlmIGlwX2xvY2FsIGlzIDAsIHdlIGZhaWxlZCB0byBvYnRhaW4KLSAgICAgICAgIAkgKiB0aGUgcmVtb3RlIElQIGFkZHJlc3MuICovCi0JCWlmIChwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbCA9PSAwKSAKLQkJCXJldHVybjsKLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUENQIFN0YXRlIE9wZW5lZC5cbiIsIGNhcmQtPmRldm5hbWUpOwotCQlpZiAocmVhZF9pbmZvKCBjYXJkICkpIHsKLSAgIAkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBBbiBlcnJvciBvY2N1cnJlZCBpbiBJUCBhc3NpZ25tZW50LlxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBkZXYtPmlwX3B0cjsKLQkJCWlmIChpbl9kZXYgIT0gTlVMTCApIHsKLQkJCQlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OwotCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFzc2lnbmVkIExjbC4gQWRkcjogJXUuJXUuJXUuJXVcbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGlmYS0+aWZhX2xvY2FsKSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFzc2lnbmVkIFJtdC4gQWRkcjogJXUuJXUuJXUuJXVcbiIsIAotCQkJCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChpZmEtPmlmYV9hZGRyZXNzKSk7Ci0JCQl9ZWxzZXsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogRXJyb3I6IEZhaWxlZCB0byBhZGQgYSByb3V0ZSBmb3IgUFBQIGludGVyZmFjZSAlc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwkKLQkJCX0KLQkJfQotCX0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNb25pdG9yIHBoeXNpY2FsIGxpbmsgZGlzY29ubmVjdGVkIHBoYXNlLgotICogIG8gaWYgaW50ZXJmYWNlIGlzIHVwIGFuZCB0aGUgaG9sZC1kb3duIHRpbWVvdXQgaGFzIGV4cGlyZWQsIHRoZW4gcmV0cnkKLSAqICAgIGNvbm5lY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIHJldHJpZ2dlcl9jb21tKHNkbGFfdCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQotCWlmIChkZXYgJiYgKChqaWZmaWVzIC0gY2FyZC0+c3RhdGVfdGljaykgPiBIT0xEX0RPV05fVElNRSkpIHsKLQotCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVElORyk7Ci0KLQkJaWYocHBwX2NvbW1fZW5hYmxlKGNhcmQpID09IENNRF9PSyl7Ci0JCQlpbml0X3BwcF90eF9yeF9idWZmKCBjYXJkICk7Ci0JCX0JICAgICAgICAgCi0JfQotfQotCi0vKioqKioqIE1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb25maWd1cmUgUzUwOCBhZGFwdGVyLgotICovCi1zdGF0aWMgaW50IGNvbmZpZzUwOChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzZGxhX3QgKmNhcmQpCi17Ci0JcHBwNTA4X2NvbmZfdCBjZmc7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCi0JLyogUHJlcGFyZSBQUFAgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKHBwcDUwOF9jb25mX3QpKTsKLQotCWlmIChjYXJkLT53YW5kZXYuY2xvY2tpbmcpCi0JCWNmZy5saW5lX3NwZWVkID0gY2FyZC0+d2FuZGV2LmJwczsKLQotCWlmIChjYXJkLT53YW5kZXYuaW50ZXJmYWNlID09IFdBTk9QVF9SUzIzMikKLQkJY2ZnLmNvbmZfZmxhZ3MgfD0gSU5URVJGQUNFX0xFVkVMX1JTMjMyOwotCi0KLSAgICAgICAgY2ZnLmNvbmZfZmxhZ3MgCXw9IERPTlRfVEVSTUlOQVRFX0xOS19NQVhfQ09ORklHOyAvKnNlbmQgQ29uZmlndXJlLVJlcXVlc3QgcGFja2V0cyBmb3JldmVyKi8KLQljZmcudHhidWZfcGVyY2VudAk9IFBFUkNFTlRfVFhfQlVGRjsJLyogJSBvZiBUeCBidWZzICovCi0JY2ZnLm10dV9sb2NhbAkJPSBjYXJkLT53YW5kZXYubXR1OwotCWNmZy5tdHVfcmVtb3RlCQk9IGNhcmQtPndhbmRldi5tdHU7ICAgICAgICAgICAgICAgICAgLyogICAgRGVmYXVsdCAgICovCi0JY2ZnLnJlc3RhcnRfdG1yCQk9IFRJTUVfQkVUV0VFTl9DT05GX1JFUTsgIAkgICAgIC8qICAgIDMwID0gM3NlYyAqLwotCWNmZy5hdXRoX3JzcnRfdG1yCT0gVElNRV9CRVRXRUVOX1BBUF9DSEFQX1JFUTsgICAgICAgICAvKiAgICAzMCA9IDNzZWMgKi8KLQljZmcuYXV0aF93YWl0X3Rtcgk9IFdBSVRfUEFQX0NIQVBfV0lUSE9VVF9SRVBMWTsgICAgICAgLyogICAzMDAgPSAzMHMgICovCi0JY2ZnLm1kbV9mYWlsX3Rtcgk9IFdBSVRfQUZURVJfRENEX0NUU19MT1c7ICAgICAgICAgICAgLyogICAgIDUgPSAwLjVzICovCi0JY2ZnLmR0cl9kcm9wX3Rtcgk9IFRJTUVfRENEX0NUU19MT1dfQUZURVJfTE5LX0RPV047ICAgLyogICAgMTAgPSAxcyAgICovCi0JY2ZnLmNvbm5lY3RfdG1vdXQJPSBXQUlUX0RDRF9ISUdIX0FGVEVSX0VOQUJMRV9DT01NOyAgIC8qICAgOTAwID0gOTBzICAqLwotCWNmZy5jb25mX3JldHJ5CQk9IE1BWF9DT05GX1JFUV9XSVRIT1VUX1JFUExZOyAgICAgICAgLyogICAgMTAgPSAxcyAgICovCi0JY2ZnLnRlcm1fcmV0cnkJCT0gTUFYX1RFUk1fUkVRX1dJVEhPVVRfUkVQTFk7CSAgICAgLyogICAgIDIgdGltZXMgICovCi0JY2ZnLmZhaWxfcmV0cnkJCT0gTlVNX0NPTkZfTkFLX1dJVEhPVVRfUkVQTFk7ICAgICAgICAvKiAgICAgNSB0aW1lcyAgKi8KLQljZmcuYXV0aF9yZXRyeQkJPSBOVU1fQVVUSF9SRVFfV0lUSE9VVF9SRVBMWTsgICAgICAgIC8qICAgICAxMCB0aW1lcyAqLyAgIAotCi0KLQlpZiggIWNhcmQtPnUucC5hdXRoZW50aWNhdG9yICkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRGV2aWNlIGlzIG5vdCBjb25maWd1cmVkIGFzIGFuIGF1dGhlbnRpY2F0b3JcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQljZmcuYXV0aF9vcHRpb25zID0gTk9fQVVUSEVOVElDQVRJT047Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBEZXZpY2UgaXMgY29uZmlndXJlZCBhcyBhbiBhdXRoZW50aWNhdG9yXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJY2ZnLmF1dGhfb3B0aW9ucyA9IElOQk9VTkRfQVVUSDsKLQl9Ci0KLQlpZiggcHBwX3ByaXZfYXJlYS0+cGFwID09IFdBTk9QVF9ZRVMpewotCQljZmcuYXV0aF9vcHRpb25zIHw9UEFQX0FVVEg7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXAgZW5hYmxlZFxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCWlmKCBwcHBfcHJpdl9hcmVhLT5jaGFwID09IFdBTk9QVF9ZRVMpewotCQljZmcuYXV0aF9vcHRpb25zIHw9IENIQVBfQVVUSDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENoYXAgZW5hYmxlZFxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCi0KLQlpZiAocHBwX3ByaXZfYXJlYS0+ZW5hYmxlX0lQWCA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVuYWJsaW5nIElQWCBQcm90b2NvbFxuIixjYXJkLT5kZXZuYW1lKTsKLQkJY2ZnLmlweF9vcHRpb25zCQk9IEVOQUJMRV9JUFggfCBST1VUSU5HX1BST1RfREVGQVVMVDsKLQl9ZWxzZXsKLQkJY2ZnLmlweF9vcHRpb25zIAk9IERJU0FCTEVfSVBYOwotCX0KLQotCXN3aXRjaCAoY2FyZC0+dS5wLmlwX21vZGUpIHsKLQkKLQkJY2FzZSBXQU5PUFRfUFBQX1NUQVRJQzoKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBQUCBJUCBNb2RlOiBTVEFUSUNcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQljZmcuaXBfb3B0aW9ucwkJPSBMX0FORF9SX0lQX05PX0FTU0lHIHwgCi0JCQkJCQkJICAgIEVOQUJMRV9JUDsKLQkJCWNmZy5pcF9sb2NhbAkJPSBpbl9kZXYtPmlmYV9saXN0LT5pZmFfbG9jYWw7Ci0JCQljZmcuaXBfcmVtb3RlCQk9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzOwotCQkJLyogRGVidWdnaW5nIGNvZGUgdXNlZCB0byBjaGVjayB0aGF0IElQIGFkZHJlc3NlcwotICAgICAgICAgICAgICAgICAgICAgICAgICogb2J0YWluZWQgZnJvbSB0aGUga2VybmVsIGFyZSBjb3JyZWN0ICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIE5FWF9QUklOVEsoS0VSTl9JTkZPICJMb2NhbCAldS4ldS4ldS4ldSBSZW1vdGUgJXUuJXUuJXUuJXUgTmFtZSAlc1xuIiwKLQkJCQkJTklQUVVBRChpcF9sb2NhbCksTklQUVVBRChpcF9yZW1vdGUpLCBkZXYtPm5hbWUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXQU5PUFRfUFBQX0hPU1Q6Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQUFAgSVAgTW9kZTogSE9TVFxuIixjYXJkLT5kZXZuYW1lKTsKLQkJCWNmZy5pcF9vcHRpb25zCQk9IExfSVBfTE9DQUxfQVNTSUcgfAotCQkJCQkJICBSX0lQX0xPQ0FMX0FTU0lHIHwgCi0JCQkJCQkgIEVOQUJMRV9JUDsKLQkJCWNmZy5pcF9sb2NhbAkJPSBpbl9kZXYtPmlmYV9saXN0LT5pZmFfbG9jYWw7Ci0JCQljZmcuaXBfcmVtb3RlCQk9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzOwotCQkJLyogRGVidWdnaW5nIGNvZGUgdXNlZCB0byBjaGVjayB0aGF0IElQIGFkZHJlc3NlcwotICAgICAgICAgICAgICAgICAgICAgICAgICogb2J0YWluZWQgZnJvbSB0aGUga2VybmVsIGFyZSBjb3JyZWN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBORVhfUFJJTlRLIChLRVJOX0lORk8gIkxvY2FsICV1LiV1LiV1LiV1IFJlbW90ZSAldS4ldS4ldS4ldSBOYW1lICVzXG4iLAotCQkJCQlOSVBRVUFEKGlwX2xvY2FsKSxOSVBRVUFEKGlwX3JlbW90ZSksIGRldi0+bmFtZSk7Ci0JCQkKLQkJCWJyZWFrOwotCQotCQljYXNlIFdBTk9QVF9QUFBfUEVFUjoKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBQUCBJUCBNb2RlOiBQRUVSXG4iLGNhcmQtPmRldm5hbWUpOwotCQkJY2ZnLmlwX29wdGlvbnMJCT0gTF9JUF9SRU1PVEVfQVNTSUcgfCAKLQkJCQkJCSAgUl9JUF9SRU1PVEVfQVNTSUcgfCAKLQkJCQkJCQkgIEVOQUJMRV9JUDsKLQkJCWNmZy5pcF9sb2NhbAkJPSAweDAwOwotCQkJY2ZnLmlwX3JlbW90ZQkJPSAweDAwOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUjogVW5zdXBwb3J0ZWQgUFBQIE1vZGUgU2VsZWN0ZWRcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgICAgICBQUFAgSVAgTW9kZXM6IFNUQVRJQywgUEVFUiBvciBIT1NUXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsJCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gcHBwX2NvbmZpZ3VyZShjYXJkLCAmY2ZnKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTaG93IGRpc2Nvbm5lY3Rpb24gY2F1c2UuCi0gKi8KLXN0YXRpYyB2b2lkIHNob3dfZGlzY19jYXVzZShzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGNhdXNlKQotewotCWlmIChjYXVzZSAmIDB4MDgwMikgCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdGVybWluYXRlZCBieSBwZWVyXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUpOwotCi0JZWxzZSBpZiAoY2F1c2UgJiAweDAwMDQpIAotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHRlcm1pbmF0ZWQgYnkgdXNlclxuIiwgCi0JCQljYXJkLT5kZXZuYW1lKTsKLQotCWVsc2UgaWYgKGNhdXNlICYgMHgwMDA4KSAKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogYXV0aGVudGljYXRpb24gZmFpbGVkXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQkKLQllbHNlIGlmIChjYXVzZSAmIDB4MDAxMCkgCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogYXV0aGVudGljYXRpb24gcHJvdG9jb2wgbmVnb3RpYXRpb24gZmFpbGVkXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUpOwotCi0JZWxzZSBpZiAoY2F1c2UgJiAweDAwMjApIAotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkiJXM6IHBlZXIncyByZXF1ZXN0IGZvciBhdXRoZW50aWNhdGlvbiByZWplY3RlZFxuIiwKLQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDA0MCkgCi0JCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNUlUgb3B0aW9uIHJlamVjdGVkIGJ5IHBlZXJcbiIsIAotCQljYXJkLT5kZXZuYW1lKTsKLQotCWVsc2UgaWYgKGNhdXNlICYgMHgwMDgwKSAKLQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBlZXIncyBNUlUgd2FzIHRvbyBzbWFsbFxuIiwgCi0JCWNhcmQtPmRldm5hbWUpOwotCi0JZWxzZSBpZiAoY2F1c2UgJiAweDAxMDApIAotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgdG8gbmVnb3RpYXRlIHBlZXIncyBMQ1Agb3B0aW9uc1xuIiwKLQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDIwMCkgCi0JCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIG5lZ290aWF0ZSBwZWVyJ3MgSVBDUCBvcHRpb25zXG4iCi0JCSwgY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDQwMCkgCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogZmFpbGVkIHRvIG5lZ290aWF0ZSBwZWVyJ3MgSVBYQ1Agb3B0aW9uc1xuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIFVEUCBjYWxsIG9mIHR5cGUgUFRQSVBFQUIuCi0gKi8KLXN0YXRpYyB2b2lkIHByb2Nlc3NfdWRwX21nbXRfcGt0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCi0JCQkJIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSApIAotewotCXVuc2lnbmVkIGNoYXIgYnVmMls1XTsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0JdW5zaWduZWQgaW50IGZyYW1lcywgbGVuOwotCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwotCXVuc2lnbmVkIHNob3J0IGRhdGFfbGVuZ3RoLCBidWZmZXJfbGVuZ3RoLCByZWFsX2xlbjsKLQl1bnNpZ25lZCBsb25nIGRhdGFfcHRyOwotCWludCB1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCXBwcF9tYm94X3QgKm1ib3ggPSBjYXJkLT5tYm94OwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWludCBlcnI7Ci0JcHBwX3VkcF9wa3RfdCAqcHBwX3VkcF9wa3QgPSAocHBwX3VkcF9wa3RfdCopJnBwcF9wcml2X2FyZWEtPnVkcF9wa3RfZGF0YTsKLQotCW1lbWNweSgmYnVmMiwgJmNhcmQtPndhbmRldi51ZHBfcG9ydCwgMiApOwotCi0KLQlpZihwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKSB7Ci0KLQkJc3dpdGNoKHBwcF91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotCi0JCQljYXNlIFBQSVBFX0dFVF9JQkFfREFUQToKLQkJCWNhc2UgUFBQX1JFQURfQ09ORklHOgotCQkJY2FzZSBQUFBfR0VUX0NPTk5FQ1RJT05fSU5GTzoKLQkJCWNhc2UgUFBJUEVfUk9VVEVSX1VQX1RJTUU6Ci0JCQljYXNlIFBQUF9SRUFEX1NUQVRJU1RJQ1M6Ci0JCQljYXNlIFBQUF9SRUFEX0VSUk9SX1NUQVRTOgotCQkJY2FzZSBQUFBfUkVBRF9QQUNLRVRfU1RBVFM6Ci0JCQljYXNlIFBQUF9SRUFEX0xDUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfSVBDUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfSVBYQ1BfU1RBVFM6Ci0JCQljYXNlIFBQUF9SRUFEX1BBUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfQ0hBUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfQ09ERV9WRVJTSU9OOgotCQkJCXVkcF9tZ210X3JlcV92YWxpZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQkgICAKLQkJCWRlZmF1bHQ6Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMDsKLQkJCQlicmVhazsKLQkJfSAKLQl9Ci0JCi0gIAlpZighdWRwX21nbXRfcmVxX3ZhbGlkKSB7Ci0JICAgIAotCQkvKiBzZXQgbGVuZ3RoIHRvIDAgKi8KLSAgICAJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gMHgwMDsKLQotICAgIAkJLyogc2V0IHJldHVybiBjb2RlICovCi0gICAgCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDB4Q0Q7IAotCQkrK3BwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfZGlyZWN0aW9uX2VycjsKLQkKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7CQotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogV2FybmluZywgSWxsZWdhbCBVRFAgY29tbWFuZCBhdHRlbXB0ZWQgZnJvbSBuZXR3b3JrOiAleFxuIiwKLQkJCWNhcmQtPmRldm5hbWUscHBwX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKTsKLQkJfQotICAgCX0gZWxzZSB7Ci0JCS8qIEluaXRpYWxpemUgdGhlIHRyYWNlIGVsZW1lbnQgKi8KLQkJdHJhY2VfZWxlbWVudF90IHRyYWNlX2VsZW1lbnQ7CQkgICAgCi0KLQkJc3dpdGNoIChwcHBfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpewotCi0JCS8qIFBQSVBFX0VOQUJMRV9UUkFDSU5HICovCi0gICAgCQljYXNlIFBQSVBFX0VOQUJMRV9UUkFDSU5HOgotCQkJaWYgKCFjYXJkLT5UcmFjaW5nRW5hYmxlZCkgewotICAgIAkJCQotCQkJCS8qIE9QRVJBVEVfREFUQUxJTkVfTU9OSVRPUiAqLwotICAgIAkJCQltYm94LT5jbWQuY29tbWFuZCA9IFBQUF9EQVRBTElORV9NT05JVE9SOwotICAgIAkJCQltYm94LT5jbWQubGVuZ3RoID0gMHgwMTsKLSAgICAJCQkJbWJveC0+ZGF0YVswXSA9IHBwcF91ZHBfcGt0LT5kYXRhWzBdOwotCSAgICAJCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyAKLQkJCQkJbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCSAgIAotCQkJCWlmIChlcnIgIT0gQ01EX09LKSB7IAotCSAgICAgICAgCQkJCi0JCQkJCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1ib3gpOwotCSAgICAgICAgCQkJY2FyZC0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCSAgICAgICAgCQkKLQkJCQkJLyogc2V0IHRoZSByZXR1cm4gY29kZSAqLwotCi0JCSAgICAgICAgCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IG1ib3gtPmNtZC5yZXN1bHQ7Ci0JICAgICAgICAJCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkgICAgICAgIAkJCWJyZWFrOwotCSAgICAJCQl9IAotCi0JCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgMHhDMDAwLCAmYnVmMiwgMik7Ci0JCSAgICAKLQkJCQlwcHBfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPSAwOwotCQkgICAgCQltZW1jcHkoJnBwcF9wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwgJmJ1ZjIsIDIpOwotCQkgICAgCQlwcHBfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyID0gCi0JCQkJCQlwcHBfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHI7Ci0JCQkJcHBwX3ByaXZfYXJlYS0+ZW5kX3RyYWNlX2FkZHIgPSAKLQkJCQkJcHBwX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkciArIEVORF9PRkZTRVQ7Ci0JCSAgICAJCi0JCQkJLyogTUFYX1NFTkRfQlVGRkVSX1NJWkUgLSAyOCAoSVAgaGVhZGVyKSAKLQkJCQkgICAtIDMyIChwcGlwZW1vbiBDQkxPQ0spICovCi0JCSAgICAJCWF2YWlsYWJsZV9idWZmZXJfc3BhY2UgPSBNQVhfTEdUSF9VRFBfTUdOVF9QS1QgLSAKLQkJCQkJCQkgc2l6ZW9mKGlwX3BrdF90KS0KLQkJCQkJCQkgc2l6ZW9mKHVkcF9wa3RfdCktCi0JCQkJCQkJIHNpemVvZih3cF9tZ210X3QpLQotCQkJCQkJCSBzaXplb2YoY2Jsb2NrX3QpOwotCSAgICAgICAJICAJfQotCSAgICAgICAJICAJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCSAgICAgICAJICAJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JICAgICAgIAkgIAljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDE7Ci0JICAgICAgIAkgIAlicmVhazsKLQkgICAKLQkJLyogUFBJUEVfRElTQUJMRV9UUkFDSU5HICovCi0JCWNhc2UgUFBJUEVfRElTQUJMRV9UUkFDSU5HOgotCSAgICAgIAkJCi0JCQlpZihjYXJkLT5UcmFjaW5nRW5hYmxlZCkgewotCQkgICAJCi0JCQkJLyogT1BFUkFURV9EQVRBTElORV9NT05JVE9SICovCi0JCSAgICAJCW1ib3gtPmNtZC5jb21tYW5kID0gMHgzMzsKLQkJICAgIAkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0JCSAgICAJCW1ib3gtPmRhdGFbMF0gPSAweDAwOwotCQkgICAgCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyAKLQkJCQkJbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCSAgICAgICAJICAKLQkJCX0gCi0JCQotCQkJLypzZXQgcmV0dXJuIGNvZGUqLwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQlicmVhazsKLQkgICAKLQkJLyogUFBJUEVfR0VUX1RSQUNFX0lORk8gKi8KLQkJY2FzZSBQUElQRV9HRVRfVFJBQ0VfSU5GTzoKLQotCQkJaWYoIWNhcmQtPlRyYWNpbmdFbmFibGVkKSB7Ci0JCQkJLyogc2V0IHJldHVybiBjb2RlICovCi0JICAgIAkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMTsKLQkgICAgCQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCQl9CQkgICAgCi0KLQkJCWJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJCi0JCQkvKiBmcmFtZXMgPCA2Miwgd2hlcmUgNjIgaXMgdGhlIG51bWJlciBvZiB0cmFjZQotCQkJICAgaW5mb3JtYXRpb24gZWxlbWVudHMuICBUaGVyZSBpcyBpbiB0b3RhbCA0OTYKLQkJCSAgIGJ5dGVzIG9mIHNwYWNlIGFuZCBlYWNoIHRyYWNlIGluZm9ybWF0aW9uCi0JCQkgICBlbGVtZW50IGlzIDggYnl0ZXMuIAotCQkJICovCi0JCQlmb3IgKCBmcmFtZXM9MDsgZnJhbWVzPDYyOyBmcmFtZXMrKykgewotCQotCQkJCXRyYWNlX3BrdF90ICp0cmFjZV9wa3QgPSAodHJhY2VfcGt0X3QgKikKLQkJCQkJJnBwcF91ZHBfcGt0LT5kYXRhW2J1ZmZlcl9sZW5ndGhdOwotCQotCQkJCS8qIFJlYWQgdGhlIHdob2xlIHRyYWNlIHBhY2tldCAqLwotCQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIHBwcF9wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwgCi0JCQkJCSAgJnRyYWNlX2VsZW1lbnQsIHNpemVvZih0cmFjZV9lbGVtZW50X3QpKTsKLQkKLQkJCQkvKiBubyBkYXRhIG9uIGJvYXJkIHNvIGV4aXQgKi8KLQkJCQlpZiggdHJhY2VfZWxlbWVudC5vcHBfZmxhZyA9PSAweDAwICkgCi0JCQkJCWJyZWFrOwotCSAgICAgIAotCQkJCWRhdGFfcHRyID0gdHJhY2VfZWxlbWVudC50cmFjZV9kYXRhX3B0cjsKLQotCQkJCS8qIFNlZSBpZiB0aGVyZSBpcyBhY3R1YWwgZGF0YSBvbiB0aGUgdHJhY2UgYnVmZmVyICovCi0JCQkJaWYgKGRhdGFfcHRyKXsKLQkJCQkJZGF0YV9sZW5ndGggPSB0cmFjZV9lbGVtZW50LnRyYWNlX2xlbmd0aDsKLQkJCQl9ZWxzZXsKLQkJCQkJZGF0YV9sZW5ndGggPSAwOwotCQkJCQlwcHBfdWRwX3BrdC0+ZGF0YVswXSB8PSAweDAyOwotCQkJCX0KLQotCQkJCS8vRklYTUU6IERvIHdlIG5lZWQgdGhpcyBjaGVjawotCQkJCWlmICgoYXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpIAotCQkJCSAgICAgPCAoc2l6ZW9mKHRyYWNlX2VsZW1lbnRfdCkrMSkpewotCQkJCQkKLQkJCQkJLyppbmRpY2F0ZSB3ZSBoYXZlIG1vcmUgZnJhbWVzIAotCQkJCQkgKiBvbiBib2FyZCBhbmQgZXhpdCAKLQkJCQkJICovCi0JCQkJCXBwcF91ZHBfcGt0LT5kYXRhWzBdIHw9IDB4MDI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQkKLQkJCQl0cmFjZV9wa3QtPnN0YXR1cyA9IHRyYWNlX2VsZW1lbnQudHJhY2VfdHlwZTsKLQkJCQl0cmFjZV9wa3QtPnRpbWVfc3RhbXAgPSB0cmFjZV9lbGVtZW50LnRyYWNlX3RpbWVfc3RhbXA7Ci0JCQkJdHJhY2VfcGt0LT5yZWFsX2xlbmd0aCA9IHRyYWNlX2VsZW1lbnQudHJhY2VfbGVuZ3RoOwotCi0JCQkJcmVhbF9sZW4gPSB0cmFjZV9lbGVtZW50LnRyYWNlX2xlbmd0aDsJCi0JCQkJCi0JCQkJaWYoZGF0YV9wdHIgPT0gMCl7Ci0JCQkJCXRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9IDB4MDA7Ci0JCQkJfWVsc2V7Ci0JCQkJCS8qIHdlIGNhbiB0YWtlIGl0IG5leHQgdGltZSAqLwotCQkJCQlpZiAoKGF2YWlsYWJsZV9idWZmZXJfc3BhY2UgLSBidWZmZXJfbGVuZ3RoKTwKLQkJCQkJCShyZWFsX2xlbiArIHNpemVvZih0cmFjZV9wa3RfdCkpKXsKLQkJCQkJCi0JCQkJCQlwcHBfdWRwX3BrdC0+ZGF0YVswXSB8PSAweDAyOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0gCi0JCQkJCXRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9IDB4MDE7Ci0JCQkJCi0JCQkJCS8qIGdldCB0aGUgZGF0YSAqLwotCQkJCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBkYXRhX3B0ciwgCi0JCQkJCQkgICZ0cmFjZV9wa3QtPmRhdGEsCi0JCQkJCQkgIHJlYWxfbGVuKTsKLQkJCQl9CQotCQkJCS8qIHplcm8gdGhlIG9wcCBmbGFnIHRvIAotCQkJCSAgIHNob3cgd2UgZ290IHRoZSBmcmFtZSAqLwotCQkJCWJ1ZjJbMF0gPSAweDAwOwotCQkJCXNkbGFfcG9rZSgmY2FyZC0+aHcsIHBwcF9wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwKLQkJCQkJICAmYnVmMiwgMSk7Ci0KLQkJCQkvKiBub3cgbW92ZSBvbnRvIHRoZSBuZXh0IAotCQkJCSAgIGZyYW1lICovCi0JCQkJcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyICs9IDg7Ci0KLQkJCQkvKiBjaGVjayBpZiB3ZSBwYXNzZWQgdGhlIGxhc3QgYWRkcmVzcyAqLwotCQkJCWlmICggcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID49IAotCQkJCQlwcHBfcHJpdl9hcmVhLT5lbmRfdHJhY2VfYWRkcil7Ci0KLQkJCQkJcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID0gCi0JCQkJCQlwcHBfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyOwotCQkJCX0KLSAKLQkJCQkvKiB1cGRhdGUgYnVmZmVyIGxlbmd0aCBhbmQgbWFrZSBzdXJlIGl0cyBldmVuICovIAotCi0JCQkJaWYgKCB0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPT0gMHgwMSApIHsKLQkJCQkJYnVmZmVyX2xlbmd0aCArPSByZWFsX2xlbiAtIDE7Ci0JCQkJfQotIAotCQkJCS8qIGZvciB0aGUgaGVhZGVyICovCi0JCQkJYnVmZmVyX2xlbmd0aCArPSA4OwotCi0JCQkJaWYoIGJ1ZmZlcl9sZW5ndGggJiAweDAwMDEgKQotCQkJCQlidWZmZXJfbGVuZ3RoICs9IDE7Ci0JCQl9Ci0KLQkJCS8qIG9rIG5vdyBzZXQgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgcGFzc2VkCi0JCQkgICBpbiB0aGUgaGlnaCA1IGJpdHMgKi8KLQkJCXBwcF91ZHBfcGt0LT5kYXRhWzBdIHw9IChmcmFtZXMgPDwgMik7Ci0JIAotCQkJLyogc2V0IHRoZSBkYXRhIGxlbmd0aCAqLwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Ci0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Ci0JIAotCQkJLyogc2V0IHJldHVybiBjb2RlICovCi0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JICAgICAgCSAgCWJyZWFrOwotCi0gICAJCS8qIFBQSVBFX0dFVF9JQkFfREFUQSAqLwotCQljYXNlIFBQSVBFX0dFVF9JQkFfREFUQToKLQkgICAgICAgIAotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDB4MDk7Ci0JCQotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgMHhGMDAzLCAmcHBwX3VkcF9wa3QtPmRhdGEsIAotCQkJCQltYm94LT5jbWQubGVuZ3RoKTsKLQkgICAgICAgIAotCQkJLyogc2V0IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKi8KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gMHgwOTsKLQotCQkJLyogc2V0IHJldHVybiBjb2RlICovCi0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDB4MDA7Ci0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQlicmVhazsKLQotCQkvKiBQUElQRV9GVDFfUkVBRF9TVEFUVVMgKi8KLQkJY2FzZSBQUElQRV9GVDFfUkVBRF9TVEFUVVM6Ci0JCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCAweEYwMjAsICZwcHBfdWRwX3BrdC0+ZGF0YVswXSwgMik7Ci0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IG1ib3gtPmNtZC5sZW5ndGggPSAyOwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0JCQotCQljYXNlIFBQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUzogICAKLQkJCWluaXRfcHBwX3ByaXZfc3RydWN0KCBwcHBfcHJpdl9hcmVhICk7Ci0JCQlpbml0X2dsb2JhbF9zdGF0aXN0aWNzKCBjYXJkICk7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCWJyZWFrOwotCi0JCQotCQljYXNlIFBQSVBFX1JPVVRFUl9VUF9USU1FOgotCi0JCQlkb19nZXR0aW1lb2ZkYXkoICZ0diApOwotCQkJcHBwX3ByaXZfYXJlYS0+cm91dGVyX3VwX3RpbWUgPSB0di50dl9zZWMgLSAKLQkJCQkJcHBwX3ByaXZfYXJlYS0+cm91dGVyX3N0YXJ0X3RpbWU7Ci0JCQkqKHVuc2lnbmVkIGxvbmcgKikmcHBwX3VkcF9wa3QtPmRhdGEgPSBwcHBfcHJpdl9hcmVhLT5yb3V0ZXJfdXBfdGltZTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSA0OwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0KLQkJCQkvKiBQUElQRV9EUklWRVJfU1RBVElTVElDUyAqLyAgIAotCQljYXNlIFBQSVBFX0RSSVZFUl9TVEFUX0lGU0VORDoKLQkJCW1lbWNweSgmcHBwX3VkcF9wa3QtPmRhdGEsICZwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQsIAotCQkJCXNpemVvZihpZl9zZW5kX3N0YXRfdCkpOwotCi0KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGlmX3NlbmRfc3RhdF90KTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBzaXplb2YoaWZfc2VuZF9zdGF0X3QpOwkKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBJUEVfRFJJVkVSX1NUQVRfSU5UUjoKLQkJCW1lbWNweSgmcHBwX3VkcF9wa3QtPmRhdGEsICZjYXJkLT5zdGF0aXN0aWNzLCAKLQkJCQlzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLQotCQkJbWVtY3B5KCZwcHBfdWRwX3BrdC0+ZGF0YStzaXplb2YoZ2xvYmFsX3N0YXRzX3QpLAotCQkJCSZwcHBfcHJpdl9hcmVhLT5yeF9pbnRyX3N0YXQsCi0JCQkJc2l6ZW9mKHJ4X2ludHJfc3RhdF90KSk7Ci0KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSsKLQkJCQkJCSAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBwcHBfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBJUEVfRFJJVkVSX1NUQVRfR0VOOgotCQkJbWVtY3B5KCAmcHBwX3VkcF9wa3QtPmRhdGEsCi0JCQkJJnBwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LAotCQkJCXNpemVvZihwaXBlX21nbXRfc3RhdF90KSk7Ci0KLQkJCW1lbWNweSgmcHBwX3VkcF9wa3QtPmRhdGErc2l6ZW9mKHBpcGVfbWdtdF9zdGF0X3QpLCAKLQkJCSAgICAgICAmY2FyZC0+c3RhdGlzdGljcywgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci0KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSsKLQkJCQkJCSAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBwcHBfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aDsKLQkJCWJyZWFrOwotCi0KLQkJLyogRlQxIE1PTklUT1IgU1RBVFVTICovCi0gICAJCWNhc2UgRlQxX01PTklUT1JfU1RBVFVTX0NUUkw6Ci0JCi0JCQkvKiBFbmFibGUgRlQxIE1PTklUT1IgU1RBVFVTICovCi0JICAgICAgICAJaWYoIHBwcF91ZHBfcGt0LT5kYXRhWzBdID09IDEpIHsKLQkJCQotCQkJCWlmKCByQ291bnQrKyAhPSAwICkgewotCQkgICAgICAgIAkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCSAgICAgICAgICAJCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJICAJCQlicmVhazsKLQkJICAgIAkJfQkKLQkgICAgICAJCX0KLQotCSAgICAgIAkJLyogRGlzYWJsZSBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkgICAgICAJCWlmKCBwcHBfdWRwX3BrdC0+ZGF0YVswXSA9PSAwKSB7Ci0KLQkgICAgICAJICAgCQlpZiggLS1yQ291bnQgIT0gMCkgewotCQkgIAkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJICAJCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJICAJCQlicmVhazsKLQkgICAJICAgIAkJfSAKLQkgICAgICAJCX0gCQotCQkJZ290byB1ZHBfZGZsdF9jbWQ7Ci0JCQkKLQkJLyogV0FSTklORzogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGZpeGVkLgotCQkgKiBUaGUgRlQxIFN0YXR1cyBDdHJsIGRvZXNuJ3QgaGF2ZSBhIGJyZWFrCi0gICAgICAgICAgICAgICAgICogc3RhdG1lbnQuICBUaHVzLCBubyBjb2RlIG11c3QgYmUgaW5zZXJ0ZWQKLSAgICAgICAgICAgICAgICAgKiBIRVJFOiBiZXR3ZWVuIGRlZmF1bHQgYW5kIGFib3ZlIGNhc2Ugc3RhdGVtZW50ICovCi0KLQkJZGVmYXVsdDoKLXVkcF9kZmx0X2NtZDoKLQkgICAgICAgIAotCQkJLyogaXQncyBhIGJvYXJkIGNvbW1hbmQgKi8KLQkJCW1ib3gtPmNtZC5jb21tYW5kID0gcHBwX3VkcF9wa3QtPmNibG9jay5jb21tYW5kOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IHBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoOwotIAotCQkJaWYobWJveC0+Y21kLmxlbmd0aCkgewotCQkJCW1lbWNweSgmbWJveC0+ZGF0YSwodW5zaWduZWQgY2hhciAqKXBwcF91ZHBfcGt0LT5kYXRhLAotCQkJCSAgICAgICBtYm94LT5jbWQubGVuZ3RoKTsKLQkgICAgICAJCX0gCi0JICAgICAgICAgIAotCQkJLyogcnVuIHRoZSBjb21tYW5kIG9uIHRoZSBib2FyZCAqLwotCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkKLQkJCWlmIChlcnIgIT0gQ01EX09LKSB7Ci0JCQotCQkgICAgCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYm94KTsKLQkJICAgIAkJKytwcHBfcHJpdl9hcmVhLT5waXBlX21nbXRfc3RhdC4KLQkJCQkJIFVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF90aW1lb3V0OwotCQkJCWJyZWFrOwotCQkJfQotCSAgICAgICAgICAKLQkJICAJKytwcHBfcHJpdl9hcmVhLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X2FkcHRyX2NtbmRfT0s7Ci0JCQotCQkJLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCQkJbWVtY3B5KCZwcHBfdWRwX3BrdC0+Y2Jsb2NrLG1ib3gsIHNpemVvZihjYmxvY2tfdCkpOwotCSAgICAgICAgICAKLQkJCWlmKG1ib3gtPmNtZC5sZW5ndGgpIHsKLQkJCQltZW1jcHkoJnBwcF91ZHBfcGt0LT5kYXRhLCZtYm94LT5kYXRhLG1ib3gtPmNtZC5sZW5ndGgpOwotCQkJfSAKLQotCQl9IC8qIGVuZCBvZiBzd2l0Y2ggKi8KLSAgICAgCX0gLyogZW5kIG9mIGVsc2UgKi8KLQotICAgICAJLyogRmlsbCBVRFAgVFRMICovCi0gICAgIAlwcHBfdWRwX3BrdC0+aXBfcGt0LnR0bCA9IGNhcmQtPndhbmRldi50dGw7IAotICAgICAJbGVuID0gcmVwbHlfdWRwKHBwcF9wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSwgbWJveC0+Y21kLmxlbmd0aCk7Ci0KLSAgICAgCWlmIChwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKSB7Ci0KLQkJLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgYWxyZWFkeSBzZW5kaW5nICovCi0JCWlmICghdGVzdF9iaXQoU0VORF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJCSsrcHBwX3ByaXZfYXJlYS0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9wYXNzZWRfdG9fYWRwdHI7Ci0JCQlwcHBfc2VuZChjYXJkLHBwcF9wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSxsZW4scHBwX3ByaXZfYXJlYS0+cHJvdG9jb2wpOwotCQl9Ci0KLQl9IGVsc2UgewkKLQkKLQkJLyogUGFzcyBpdCB1cCB0aGUgc3RhY2sKLSAgICAJCSAgIEFsbG9jYXRlIHNvY2tldCBidWZmZXIgKi8KLQkJaWYgKChuZXdfc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pKSAhPSBOVUxMKSB7Ci0JICAgIAkKLQkJCS8qIGNvcHkgZGF0YSBpbnRvIG5ld19za2IgKi8KLQotICAJICAgIAkJYnVmID0gc2tiX3B1dChuZXdfc2tiLCBsZW4pOwotICAJICAgIAkJbWVtY3B5KGJ1ZixwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIGxlbik7Ci0KLQkgICAgCQkrK3BwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfcGFzc2VkX3RvX3N0YWNrOwotCQkJCi0gICAgICAgICAgICAJCS8qIERlY2Fwc3VsYXRlIHBhY2tldCBhbmQgcGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgCi0JCQkgICBzdGFjayAqLwotCSAgICAJCW5ld19za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwotICAgICAgICAgICAgCQluZXdfc2tiLT5kZXYgPSBkZXY7Ci0JICAgIAkJbmV3X3NrYi0+bWFjLnJhdyAgPSBuZXdfc2tiLT5kYXRhOwotCQkJbmV0aWZfcngobmV3X3NrYik7Ci0JCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkKLQkJfSBlbHNlIHsKLQkgICAgCQotCQkJKytwcHBfcHJpdl9hcmVhLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X25vX3NvY2tldDsKLQkJCXByaW50ayhLRVJOX0lORk8gIm5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIpOwotICAJCX0KLSAgICAJfQkKLQotCXBwcF9wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCA9IDA7Ci0JCi0JcmV0dXJuOyAKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbCB0aGUgcHBwX3ByaXZhdGVfYXJlYSBzdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfcHBwX3ByaXZfc3RydWN0KCBwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgKQotewotCi0JbWVtc2V0KCZwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQsIDAsIHNpemVvZihpZl9zZW5kX3N0YXRfdCkpOwotCW1lbXNldCgmcHBwX3ByaXZfYXJlYS0+cnhfaW50cl9zdGF0LCAwLCBzaXplb2YocnhfaW50cl9zdGF0X3QpKTsKLQltZW1zZXQoJnBwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LCAwLCBzaXplb2YocGlwZV9tZ210X3N0YXRfdCkpOwkKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIEdsb2JhbCBTdGF0aXN0aWNzCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIHNkbGFfdCAqY2FyZCApCi17Ci0JbWVtc2V0KCZjYXJkLT5zdGF0aXN0aWNzLCAwLCBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIFJlY2VpdmUgYW5kIFRyYW5zbWl0IEJ1ZmZlcnMuCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfcHBwX3R4X3J4X2J1ZmYoIHNkbGFfdCAqY2FyZCApCi17Ci0JcHBwNTA4X2J1Zl9pbmZvX3QqIGluZm87Ci0KLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkJCi0JCWluZm8gPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBQUFA1MTRfQlVGX09GRlMpOwotCi0gICAgICAgCQljYXJkLT51LnAudHhidWZfYmFzZSA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCQlpbmZvLT50eGJfcHRyKTsKLQotICAgICAgICAgICAgICAgIGNhcmQtPnUucC50eGJ1Zl9sYXN0ID0gKHBwcF9idWZfY3RsX3QqKWNhcmQtPnUucC50eGJ1Zl9iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbmZvLT50eGJfbnVtIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT51LnAucnhidWZfYmFzZSA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5yeGJfcHRyKTsKLQotICAgICAgICAgICAgICAgIGNhcmQtPnUucC5yeGJ1Zl9sYXN0ID0gKHBwcF9idWZfY3RsX3QqKWNhcmQtPnUucC5yeGJ1Zl9iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbmZvLT5yeGJfbnVtIC0gMSk7Ci0KLQl9IGVsc2UgewotCQkKLQkJaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIFBQUDUwOF9CVUZfT0ZGUyk7Ci0KLQkJY2FyZC0+dS5wLnR4YnVmX2Jhc2UgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKGluZm8tPnR4Yl9wdHIgLSBQUFA1MDhfTUJfVkVDVCkpOwotCi0JCWNhcmQtPnUucC50eGJ1Zl9sYXN0ID0gKHBwcF9idWZfY3RsX3QqKWNhcmQtPnUucC50eGJ1Zl9iYXNlICsKLQkJCShpbmZvLT50eGJfbnVtIC0gMSk7Ci0KLQkJY2FyZC0+dS5wLnJ4YnVmX2Jhc2UgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKGluZm8tPnJ4Yl9wdHIgLSBQUFA1MDhfTUJfVkVDVCkpOwotCi0JCWNhcmQtPnUucC5yeGJ1Zl9sYXN0ID0gKHBwcF9idWZfY3RsX3QqKWNhcmQtPnUucC5yeGJ1Zl9iYXNlICsKLQkJCShpbmZvLT5yeGJfbnVtIC0gMSk7Ci0JfQotCi0JY2FyZC0+dS5wLnR4YnVmX25leHQgPSAodW5zaWduZWQgbG9uZyopJmluZm8tPnR4Yl9ueHQ7IAotCWNhcmQtPnUucC5yeGJ1Zl9uZXh0ID0gKHVuc2lnbmVkIGxvbmcqKSZpbmZvLT5yeGIxX3B0cjsKLQotCWNhcmQtPnUucC5yeF9iYXNlID0gaW5mby0+cnhiX2Jhc2U7Ci0gICAgICAgIGNhcmQtPnUucC5yeF90b3AgID0gaW5mby0+cnhiX2VuZDsKLSAgICAgIAotCWNhcmQtPnUucC50eGJ1ZiA9IGNhcmQtPnUucC50eGJ1Zl9iYXNlOwotCWNhcmQtPnJ4bWIgPSBjYXJkLT51LnAucnhidWZfYmFzZTsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIENvbm5lY3Rpb24gSW5mb3JtYXRpb24gKGllIGZvciBSZW1vdGUgSVAgYWRkcmVzcyBhc3NnaW5tZW50KS4KLSAqIENhbGxlZCB3aGVuIHBwcCBpbnRlcmZhY2UgY29ubmVjdGVkLgotICovCi1zdGF0aWMgaW50IHJlYWRfaW5mbyggc2RsYV90ICpjYXJkICkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0JaW50IGVycjsKLQotCXN0cnVjdCBpZnJlcSBpZl9pbmZvOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqaWZfZGF0YTEsICppZl9kYXRhMjsKLQltbV9zZWdtZW50X3QgZnM7Ci0KLQkvKiBTZXQgTG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKi8KLQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0Jc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0KLQotCWZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsgICAgIC8qIGdldCB1c2VyIHNwYWNlIGJsb2NrICovIAotCi0JLyogQ2hhbmdlIHRoZSBsb2NhbCBhbmQgcmVtb3RlIGlwIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS4KLQkgKiBUaGlzIHdpbGwgYWxzbyBhZGQgaW4gdGhlIGRlc3RpbmF0aW9uIHJvdXRlLgotCSAqLwkKLQlpZl9kYXRhMSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfYWRkcjsKLQlpZl9kYXRhMS0+c2luX2FkZHIuc19hZGRyID0gcHBwX3ByaXZfYXJlYS0+aXBfbG9jYWw7Ci0JaWZfZGF0YTEtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZBRERSLCAmaWZfaW5mbyApOwotCWlmX2RhdGEyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9kc3RhZGRyOwotCWlmX2RhdGEyLT5zaW5fYWRkci5zX2FkZHIgPSBwcHBfcHJpdl9hcmVhLT5pcF9yZW1vdGU7Ci0JaWZfZGF0YTItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZEU1RBRERSLCAmaWZfaW5mbyApOwotCi0Jc2V0X2ZzKGZzKTsgICAgICAgICAgIC8qIHJlc3RvcmUgb2xkIGJsb2NrICovCi0JCi0JaWYgKGVycikgewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEFkZGluZyBvZiByb3V0ZSBmYWlsZWQ6ICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxlcnIpOwotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6CUxvY2FsIDogJXUuJXUuJXUuJXVcbiIsCi0JCQljYXJkLT5kZXZuYW1lLE5JUFFVQUQocHBwX3ByaXZfYXJlYS0+aXBfbG9jYWwpKTsKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOglSZW1vdGU6ICV1LiV1LiV1LiV1XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxOSVBRVUFEKHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZSkpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZW1vdmUgRHluYW1pYyBSb3V0ZS4KLSAqIENhbGxlZCB3aGVuIHBwcCBpbnRlcmZhY2UgZGlzY29ubmVjdGVkLgotICovCi0KLXN0YXRpYyB2b2lkIHJlbW92ZV9yb3V0ZSggc2RsYV90ICpjYXJkICkKLXsKLQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWxvbmcgaXBfYWRkcjsKLQlpbnQgZXJyOwotCi0gICAgICAgIG1tX3NlZ21lbnRfdCBmczsKLQlzdHJ1Y3QgaWZyZXEgaWZfaW5mbzsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmlmX2RhdGExOwotICAgICAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBkZXYtPmlwX3B0cjsKLSAgICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsJCi0KLQlpcF9hZGRyID0gaWZhLT5pZmFfbG9jYWw7Ci0KLQkvKiBTZXQgTG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKi8KLQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0Jc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0KLQlmcyA9IGdldF9mcygpOwotICAgICAgIAlzZXRfZnMoZ2V0X2RzKCkpOyAgICAgLyogZ2V0IHVzZXIgc3BhY2UgYmxvY2sgKi8gCi0KLQkvKiBDaGFuZ2UgdGhlIGxvY2FsIGlwIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZSB0byAwLgotCSAqIFRoaXMgd2lsbCBhbHNvIGRlbGV0ZSB0aGUgZGVzdGluYXRpb24gcm91dGUuCi0JICovCQotCWlmX2RhdGExID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9hZGRyOwotCWlmX2RhdGExLT5zaW5fYWRkci5zX2FkZHIgPSAwOwotCWlmX2RhdGExLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQllcnIgPSBkZXZpbmV0X2lvY3RsKCBTSU9DU0lGQUREUiwgJmlmX2luZm8gKTsKLQotICAgICAgICBzZXRfZnMoZnMpOyAgICAgICAgICAgLyogcmVzdG9yZSBvbGQgYmxvY2sgKi8KLQotCQotCWlmIChlcnIpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBEZWxldGluZyBkeW5hbWljIHJvdXRlIGZhaWxlZCAlZCFcbiIsCi0JCQkgY2FyZC0+ZGV2bmFtZSwgZXJyKTsKLQkJcmV0dXJuOwotCX1lbHNlewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFBQUCBEZWxldGluZyBkeW5hbWljIHJvdXRlICV1LiV1LiV1LiV1IHN1Y2Nlc3NmdWx5XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChpcF9hZGRyKSk7Ci0JfQotCXJldHVybjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUGVyZm9ybSB0aGUgSW50ZXJydXB0IFRlc3QgYnkgcnVubmluZyB0aGUgUkVBRF9DT0RFX1ZFUlNJT04gY29tbWFuZCBNQVhfSU5UUgotICogX1RFU1RfQ09VTlRFUiB0aW1lcy4KLSAqLwotc3RhdGljIGludCBpbnRyX3Rlc3QoIHNkbGFfdCAqY2FyZCApCi17Ci0JcHBwX21ib3hfdCAqbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnIsaTsKLQotCWVyciA9IHBwcF9zZXRfaW50cl9tb2RlKCBjYXJkLCAweDA4ICk7Ci0JCi0JaWYgKGVyciA9PSBDTURfT0spIHsgCi0JCQotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSOyBpICsrKSB7CQotCQkJLyogUnVuIGNvbW1hbmQgUkVBRF9DT0RFX1ZFUlNJT04gKi8KLQkJCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCQkJbWItPmNtZC5sZW5ndGggID0gMDsKLQkJCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9SRUFEX0NPREVfVkVSU0lPTjsKLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkJaWYgKGVyciAhPSBDTURfT0spIAotCQkJCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQkJfQotCX0KLQllbHNlIHJldHVybiBlcnI7Ci0KLQllcnIgPSBwcHBfc2V0X2ludHJfbW9kZSggY2FyZCwgMCApOwotCWlmIChlcnIgIT0gQ01EX09LKSAKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBVRFAgY2FsbCBpdCBpcy4gRFJWU1RBVFMgb3IgUFRQSVBFQUIgPwotICovCi1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2RsYV90ICpjYXJkICkKLXsKLQl1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0OwotCXVuc2lnbmVkIGNoYXIgYnVmMls1XTsgCi0JcHBwX3VkcF9wa3RfdCAqcHBwX3VkcF9wa3QgPSAocHBwX3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsgCi0JCi0Jc2VuZHBhY2tldCA9IHNrYi0+ZGF0YTsKLQltZW1jcHkoJmJ1ZjIsICZjYXJkLT53YW5kZXYudWRwX3BvcnQsIDIpOwotCQotCWlmKCAJcHBwX3VkcF9wa3QtPmlwX3BrdC52ZXJfaW5ldF9oZHJfbGVuZ3RoICA9PSAweDQ1ICYmICAgICAgICAvKiBJUCBwYWNrZXQgKi8gCi0JCXNlbmRwYWNrZXRbOV0gID09IDB4MTEgJiYgICAgICAgIC8qIFVEUCBwYWNrZXQgKi8KLQkJc2VuZHBhY2tldFsyMl0gPT0gYnVmMlsxXSAmJiAgICAgLyogVURQIFBvcnQgKi8KLQkJc2VuZHBhY2tldFsyM10gPT0gYnVmMlswXSAmJgotCQlzZW5kcGFja2V0WzM2XSA9PSAweDAxICkgewotCQotCQlpZiAoICAgIHNlbmRwYWNrZXRbMjhdID09IDB4NTAgJiYgICAgLyogUFRQSVBFQUI6IFNpZ25hdHVyZSAqLyAKLQkJCXNlbmRwYWNrZXRbMjldID09IDB4NTQgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzBdID09IDB4NTAgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzFdID09IDB4NDkgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzJdID09IDB4NTAgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzNdID09IDB4NDUgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzRdID09IDB4NDEgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzVdID09IDB4NDIgKXsgCi0KLQkJCXJldHVybiBVRFBfUFRQSVBFX1RZUEU7Ci0JCi0JCX0gZWxzZSBpZihzZW5kcGFja2V0WzI4XSA9PSAweDQ0ICYmICAvKiBEUlZTVEFUUzogU2lnbmF0dXJlICovCi0JCQlzZW5kcGFja2V0WzI5XSA9PSAweDUyICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzMwXSA9PSAweDU2ICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzMxXSA9PSAweDUzICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzMyXSA9PSAweDU0ICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzMzXSA9PSAweDQxICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzM0XSA9PSAweDU0ICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzM1XSA9PSAweDUzICl7Ci0JCi0JCQlyZXR1cm4gVURQX0RSVlNUQVRTX1RZUEU7Ci0KLQkJfSBlbHNlCi0JCQlyZXR1cm4gVURQX0lOVkFMSURfVFlQRTsKLQotCX0gZWxzZQotCQlyZXR1cm4gVURQX0lOVkFMSURfVFlQRTsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkIGNvbnRhaW5zIGEgYnJvYWRjYXN0IG9yCi0gKiBtdWx0aWNhc3Qgc291cmNlIElQIGFkZHJlc3MuCi0gKi8KLQotc3RhdGljIGludCBjaGtfYmNhc3RfbWNhc3RfYWRkcihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQl1MzIgc3JjX2lwX2FkZHI7Ci0gICAgICAgIHUzMiBicm9hZGNhc3RfaXBfYWRkciA9IDA7Ci0gICAgICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQotICAgICAgICAvKiByZWFkIHRoZSBJUCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBvdXRnb2luZyBwYWNrZXQgKi8KLSAgICAgICAgc3JjX2lwX2FkZHIgPSAqKHUzMiAqKShza2ItPmRhdGEgKyAxMik7Ci0KLQkvKiByZWFkIHRoZSBJUCBicm9hZGNhc3QgYWRkcmVzcyBmb3IgdGhlIGRldmljZSAqLwotICAgICAgICBpbl9kZXYgPSBkZXYtPmlwX3B0cjsKLSAgICAgICAgaWYoaW5fZGV2ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5faWZhZGRyICppZmE9IGluX2Rldi0+aWZhX2xpc3Q7Ci0gICAgICAgICAgICAgICAgaWYoaWZhICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RfaXBfYWRkciA9IGlmYS0+aWZhX2Jyb2FkY2FzdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotIAotICAgICAgICAvKiBjaGVjayBpZiB0aGUgSVAgU291cmNlIEFkZHJlc3MgaXMgYSBCcm9hZGNhc3QgYWRkcmVzcyAqLwotICAgICAgICBpZigoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpICYmIChzcmNfaXBfYWRkciA9PSBicm9hZGNhc3RfaXBfYWRkcikpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQnJvYWRjYXN0IFNvdXJjZSBBZGRyZXNzIHNpbGVudGx5IGRpc2NhcmRlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfSAKLQotICAgICAgICAvKiBjaGVjayBpZiB0aGUgSVAgU291cmNlIEFkZHJlc3MgaXMgYSBNdWx0aWNhc3QgYWRkcmVzcyAqLwotICAgICAgICBpZigobnRvaGwoc3JjX2lwX2FkZHIpID49IDB4RTAwMDAwMDEpICYmCi0JCShudG9obChzcmNfaXBfYWRkcikgPD0gMHhGRkZGRkZGRSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTXVsdGljYXN0IFNvdXJjZSBBZGRyZXNzIHNpbGVudGx5IGRpc2NhcmRlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotfQotCi12b2lkIHM1MDhfbG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLQotdm9pZCBzNTA4X3VubG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLQotc3RhdGljIGludCByZWFkX2Nvbm5lY3Rpb25faW5mbyAoc2RsYV90ICpjYXJkKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0JcHBwNTA4X2Nvbm5lY3RfaW5mb190ICpwcHA1MDhfY29ubmVjdF9pbmZvOwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltYi0+Y21kLmxlbmd0aCAgPSAwOwotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9HRVRfQ09OTkVDVElPTl9JTkZPOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCi0JaWYgKGVyciAhPSBDTURfT0spIHsgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQkJcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlID0gMDsKLQkJcHBwX3ByaXZfYXJlYS0+aXBfbG9jYWwgPSAwOwotCX0KLQllbHNlIHsKLQkJcHBwNTA4X2Nvbm5lY3RfaW5mbyA9IChwcHA1MDhfY29ubmVjdF9pbmZvX3QgKiltYi0+ZGF0YTsKLQkJcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlID0gcHBwNTA4X2Nvbm5lY3RfaW5mby0+aXBfcmVtb3RlOwotCQlwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbCA9IHBwcDUwOF9jb25uZWN0X2luZm8tPmlwX2xvY2FsOwotCi0JCU5FWF9QUklOVEsoS0VSTl9JTkZPICJSRUFEIENPTk5FQ1RJT04gR09UIElQIEFERFJFU1MgJXgsICV4XG4iLAotCQkJCXBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZSwKLQkJCQlwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjb25maWdfcHBwCi0gKgotICoJQ29uZmlndXJlIHRoZSBwcHAgcHJvdG9jb2wgYW5kIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4JCQotICoKLSAqICAgCVRoZSBpZl9vcGVuIGZ1bmN0aW9uIGJpbmRzIHRoaXMgZnVuY3Rpb24gdG8gdGhlIHBvbGwgcm91dGluZS4KLSAqICAgICAgVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuIGV2ZXJ5IHRpbWUgdGhlIHBwcCBpbnRlcmZhY2UKLSAqICAgICAgaXMgYnJvdWdodCB1cC4gIAotICogICAgICAKLSAqCUlmIHRoZSBjb21tdW5pY2F0aW9ucyBhcmUgbm90IGVuYWJsZWQsIHByb2NlZWQgdG8gY29uZmlndXJlCi0gKiAgICAgIHRoZSBjYXJkIGFuZCBlbmFibGUgY29tbXVuaWNhdGlvbnMuCi0gKgotICogICAgICBJZiB0aGUgY29tbXVuaWNhdGlvbnMgYXJlIGVuYWJsZWQsIGl0IG1lYW5zIHRoYXQgdGhlIGludGVyZmFjZQotICogICAgICB3YXMgc2h1dGRvd24gYnkgZXRoZXIgdGhlIHVzZXIgb3IgZHJpdmVyLiBJbiB0aGlzIGNhc2UsIHdlIAotICogICAgICBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIElQIGFkZHJlc3NlcyBoYXZlIG5vdCBjaGFuZ2VkLiAgSWYKLSAqICAgICAgdGhlIElQIGFkZHJlc3NlcyBjaGFuZ2VkLCB3ZSBoYXZlIHRvIHJlY29uZmlndXJlIHRoZSBmaXJtd2FyZQotICogICAgICBhbmQgdXBkYXRlIHRoZSBjaGFuZ2VkIElQIGFkZHJlc3Nlcy4gIE90aGVyd2lzZSwganVzdCBleGl0LgotICovCi1zdGF0aWMgaW50IGNvbmZpZ19wcHAgKHNkbGFfdCAqY2FyZCkKLXsKLQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotCWlmIChjYXJkLT51LnAuY29tbV9lbmFibGVkKXsKLQotCQlpZiAocHBwX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wICE9IHBwcF9wcml2X2FyZWEtPmlwX2xvY2FsIHx8Ci0JCSAgICBwcHBfcHJpdl9hcmVhLT5pcF9yZW1vdGVfdG1wICE9IHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZSl7Ci0JCQkKLQkJCS8qIFRoZSBJUCBhZGRlcnNzZXMgaGF2ZSBjaGFuZ2VkLCB3ZSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzdG9wIHRoZSBjb21tdW5pY2F0aW9ucyBhbmQgcmVjb25maWd1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBjYXJkLiBSZWFzb246IHRoZSBmaXJtd2FyZSBtdXN0IGtub3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3Nlcy4gKi8KLQkJCWRpc2FibGVfY29tbShjYXJkKTsKLQkJCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IElQIGFkZHJlc3NlcyBjaGFuZ2VkIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzdGFydGluZyBjb21tdW5pY2F0aW9ucyAuLi5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9ZWxzZXsgCi0JCQkvKiBJUCBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lIGFuZCB0aGUgbGluayBpcyB1cCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGhlcmUuIFRoZXJlZm9yZSwgZXhpdCAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBSZWNvcmQgdGhlIG5ldyBJUCBhZGRyZXNlcyAqLwotCXBwcF9wcml2X2FyZWEtPmlwX2xvY2FsID0gcHBwX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wOwotCXBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZSA9IHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZV90bXA7Ci0KLQlpZiAoY29uZmlnNTA4KGRldiwgY2FyZCkpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGNvbmZpZ3VyZSBQUFAgZGV2aWNlXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChwcHBfc2V0X2ludHJfbW9kZShjYXJkLCBQUFBfSU5UUl9SWFJEWXwKLQkJCSAgICAJCVBQUF9JTlRSX1RYUkRZfAotCQkJCSAgICAJUFBQX0lOVFJfTU9ERU18Ci0JCQkJICAgIAlQUFBfSU5UUl9ESVNDIHwKLQkJCQkgICAgCVBQUF9JTlRSX09QRU4gfAotCQkJCSAgICAJUFBQX0lOVFJfRFJPUF9EVFIgfAotCQkJCQlQUFBfSU5UUl9USU1FUikpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGNvbmZpZ3VyZSBib2FyZCBpbnRlcnJ1cHRzICFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotICAgICAgICAvKiBUdXJuIG9mZiB0aGUgdHJhbnNtaXQgYW5kIHRpbWVyIGludGVycnVwdCAqLwotCWZsYWdzLT5pbWFzayAmPSB+KFBQUF9JTlRSX1RYUkRZIHwgUFBQX0lOVFJfVElNRVIpIDsKLQotCi0JLyogSWYgeW91IGFyZSBub3QgdGhlIGF1dGhlbnRpY2F0b3IgYW5kIGFueSBvbmUgb2YgdGhlIHByb3RvY29sIGlzIAotCSAqIGVuYWJsZWQgdGhlbiB3ZSBjYWxsIHRoZSBzZXRfb3V0X2JvdW5kX2F1dGhlbnRpY2F0aW9uLgotCSAqLwotCWlmICggIWNhcmQtPnUucC5hdXRoZW50aWNhdG9yICAmJiAocHBwX3ByaXZfYXJlYS0+cGFwIHx8IHBwcF9wcml2X2FyZWEtPmNoYXApKSB7Ci0JCWlmICggcHBwX3NldF9vdXRibmRfYXV0aChjYXJkLCBwcHBfcHJpdl9hcmVhKSApewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE91dGJvdW5kIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCAhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IAotCQotCS8qIElmIHlvdSBhcmUgdGhlIGF1dGhlbnRpY2F0b3IgYW5kIGFueSBvbmUgb2YgdGhlIHByb3RvY29sIGlzIGVuYWJsZWQKLQkgKiB0aGVuIHdlIGNhbGwgdGhlIHNldF9pbl9ib3VuZF9hdXRoZW50aWNhdGlvbi4KLQkgKi8KLQlpZiAoY2FyZC0+dS5wLmF1dGhlbnRpY2F0b3IgJiYgKHBwcF9wcml2X2FyZWEtPnBhcCB8fCBwcHBfcHJpdl9hcmVhLT5jaGFwKSl7Ci0JCWlmIChwcHBfc2V0X2luYm5kX2F1dGgoY2FyZCwgcHBwX3ByaXZfYXJlYSkpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEluYm91bmQgYXV0aGVudGljYXRpb24gZmFpbGVkICFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7CQotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBJZiB3ZSBmYWlsIHRvIGVuYWJsZSBjb21tdW5pY2F0aW9ucyBoZXJlIGl0J3MgT0ssCi0JICogc2luY2UgdGhlIERUUiB0aW1lciB3aWxsIGNhdXNlIGEgZGlzY29ubmVjdGVkLCB3aGljaAotCSAqIHdpbGwgcmV0cmlnZ2VyIGNvbW11bmljYXRpb24gaW4gdGltZXJfaW50cigpICovCi0JaWYgKHBwcF9jb21tX2VuYWJsZShjYXJkKSA9PSBDTURfT0spIHsKLQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0NPTk5FQ1RJTkcpOwotCQlpbml0X3BwcF90eF9yeF9idWZmKGNhcmQpOwotCX0KLQotCXJldHVybiAwOyAKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHBwcF9wb2xsCi0gKgkKLSAqIFJhdGlvbmFsZToKLSAqIAlXZSBjYW5ub3QgbWFuaXB1bGF0ZSB0aGUgcm91dGluZyB0YWJsZXMsIG9yCi0gKiAgICAgIGlwIGFkZHJlc3NlcyB3aXRoaW5nIHRoZSBpbnRlcnJ1cHQuIFRoZXJlZm9yZQotICogICAgICB3ZSBtdXN0IHBlcmZvcm0gc3VjaCBhY3RvbnMgb3V0c2lkZSBhbiBpbnRlcnJ1cHQgCi0gKiAgICAgIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogRGVzY3JpcHRpb246CQotICoJUFBQIHBvbGxpbmcgcm91dGluZSwgcmVzcG9uc2libGUgZm9yIAotICogICAgIAlzaHV0dGluZyBkb3duIGludGVyZmFjZXMgdXBvbiBkaXNjb25uZWN0Ci0gKiAgICAgCWFuZCBhZGRpbmcvcmVtb3Zpbmcgcm91dGVzLiAKLSAqICAgICAgCi0gKiBVc2FnZTogICAgICAgIAotICogCVRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggcHBwICAKLSAqIAlpbnRlcmZhY2UgdGhyb3VnaCBhIHRxX3NjaGVkdWxlIGJvdHRvbSBoYWxmLgotICogICAgICAKLSAqICAgICAgdHJpZ2dlcl9wcHBfcG9sbCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8ga2ljawotICogICAgICB0aGUgcHBwX3BvbGwgcm91dGluZS4gIAotICovCi1zdGF0aWMgdm9pZCBwcHBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYTsgCQotCXNkbGFfdCAqY2FyZDsKLQl1OCBjaGVja19nYXRld2F5PTA7Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzOwotCi0JaWYgKCFkZXYgfHwgKHBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybjsKLQotCWNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCWZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkvKiBTaHV0ZG93biBpcyBpbiBwcm9ncmVzcywgc3RvcCB3aGF0IHlvdSBhcmUgCi0JICogZG9pbmcgYW5kIGdldCBvdXQgKi8KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGlmX29wZW4oKSBmdW5jdGlvbiBoYXMgdHJpZ2dlcmVkIHRoZSBwb2xsaW5nIHJvdXRpbmUKLQkgKiB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyZWQgSVAgYWRkcmVzc2VzLiAgT25jZSB0aGUKLQkgKiBhZGRyZXNzZXMgYXJlIGZvdW5kLCB0cmlnZ2VyIHRoZSBjaGRsYyBjb25maWd1cmF0aW9uICovCi0JaWYgKHRlc3RfYml0KDAsJnBwcF9wcml2X2FyZWEtPmNvbmZpZ19wcHApKXsKLQotCQlwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXAgID0gZ2V0X2lwX2FkZHJlc3MoZGV2LFdBTl9MT0NBTF9JUCk7Ci0JCXBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZV90bXAgPSBnZXRfaXBfYWRkcmVzcyhkZXYsV0FOX1BPSU5UT1BPSU5UX0lQKTsKLQotCQlpZiAocHBwX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wID09IHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZV90bXAgJiYgCi0JICAgICAgICAgICAgY2FyZC0+dS5wLmlwX21vZGUgPT0gV0FOT1BUX1BQUF9IT1NUKXsKLQkJCQotCQkJaWYgKCsrcHBwX3ByaXZfYXJlYS0+aXBfZXJyb3IgPiBNQVhfSVBfRVJST1JTKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJcbiVzOiAtLS0gV0FSTklORyAtLS1cbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhlIGxvY2FsIElQIGFkZHJlc3MgaXMgdGhlIHNhbWUgYXMgdGhlXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBvaW50LXRvLVBvaW50IElQIGFkZHJlc3MuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IC0tLSBXQVJOSU5HIC0tLVxuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9ZWxzZXsKLQkJCQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkJCXBwcF9wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMrSFo7Ci0JCQkJYWRkX3RpbWVyKCZwcHBfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7CQotCQlwcHBfcHJpdl9hcmVhLT5pcF9lcnJvcj0wOwkKLQkJCi0JCWNsZWFyX2JpdCgwLCZwcHBfcHJpdl9hcmVhLT5jb25maWdfcHBwKTsKLQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIER5bmFtaWMgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLCBhcyB3ZWxsIGFzIGR5bmFtaWMKLQkgKiByb3V0aW5nLiAgKi8KLQkKLQlzd2l0Y2ggKGNhcmQtPndhbmRldi5zdGF0ZSkgewotCQotCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQotCQkvKiBJZiB0aGUgZHluYW1pYyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBpcyBvbiwgYW5kIGludGVyZmFjZSAKLQkJICogaXMgdXAsIHRoZW4gYnJpbmcgZG93biB0aGUgbmV0b3dyayBpbnRlcmZhY2UgKi8KLQotCQlpZiAodGVzdF9iaXQoRFlOX09QVF9PTiwmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICAhdGVzdF9iaXQoREVWX0RPV04sJnBwcF9wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKQkmJgkKLQkJICAgIGNhcmQtPndhbmRldi5kZXYtPmZsYWdzICYgSUZGX1VQKXsJCi0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgZG93bi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT53YW5kZXYuZGV2LT5uYW1lKTsKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoY2FyZC0+d2FuZGV2LmRldiwKLQkJCQkJKGNhcmQtPndhbmRldi5kZXYtPmZsYWdzJn5JRkZfVVApKTsKLQkJCXNldF9iaXQoREVWX0RPV04sJnBwcF9wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKTsKLQkJfWVsc2V7Ci0JCQkvKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsb2NhbCBJUCBhZGRyZXNzIGlzCi0gICAgICAgICAgICAgICAJICAgCSAqIHplcm8uIElmIGl0IGlzLCB3ZSBzaG91bGRuJ3QgdHJ5IHRvIHJlbW92ZSBpdC4KLSAgICAgICAgICAgICAgICAgCSAqIEZvciBzb21lIHJlYXNvbiB0aGUga2VybmVsIGNyYXNoZXMgYmFkbHkgaWYgCi0gICAgICAgICAgICAgICAgIAkgKiB3ZSB0cnkgdG8gcmVtb3ZlIHRoZSByb3V0ZSB0d2ljZSAqLwotCi0JCQlpZiAoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MgJiBJRkZfVVAgJiYgCi0JCSAgICAJICAgIGdldF9pcF9hZGRyZXNzKGNhcmQtPndhbmRldi5kZXYsV0FOX0xPQ0FMX0lQKSAmJgotCQkgICAgCSAgICBjYXJkLT51LnAuaXBfbW9kZSA9PSBXQU5PUFRfUFBQX1BFRVIpewotCi0JCQkJcmVtb3ZlX3JvdXRlKGNhcmQpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBXQU5fQ09OTkVDVEVEOgotCQkKLQkJLyogSW4gU01QIG1hY2hpbmUgdGhpcyBjb2RlIGNhbiBleGVjdXRlIGJlZm9yZSB0aGUgaW50ZXJmYWNlCi0JCSAqIGNvbWVzIHVwLiAgSW4gdGhpcyBjYXNlLCB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdAotCQkgKiB0cnkgdG8gYnJpbmcgdXAgdGhlIGludGVyZmFjZSBiZWZvcmUgZGV2X29wZW4oKSBpcyBmaW5pc2hlZCAqLwotCi0KLQkJLyogREVWX0RPV04gd2lsbCBiZSBzZXQgb25seSB3aGVuIHdlIGJyaW5nIGRvd24gdGhlIGludGVyZmFjZQotCQkgKiBmb3IgdGhlIHZlcnkgZmlyc3QgdGltZS4gVGhpcyB3YXkgd2Uga25vdyB0aGF0IGl0IHdhcyB1cwotCQkgKiB0aGF0IGJyb3VnaHQgdGhlIGludGVyZmFjZSBkb3duICovCi0JCQotCQlpZiAodGVzdF9iaXQoRFlOX09QVF9PTiwmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCi0JICAgICAgICAgICAgdGVzdF9iaXQoREVWX0RPV04sICAmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCi0gCQkgICAgIShjYXJkLT53YW5kZXYuZGV2LT5mbGFncyAmIElGRl9VUCkpewotCQkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJmYWNlICVzIHVwLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGNhcmQtPndhbmRldi5kZXYtPm5hbWUpOwotCQkJCi0JCQljaGFuZ2VfZGV2X2ZsYWdzKGNhcmQtPndhbmRldi5kZXYsKGNhcmQtPndhbmRldi5kZXYtPmZsYWdzfElGRl9VUCkpOwotCQkJY2xlYXJfYml0KERFVl9ET1dOLCZwcHBfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bik7Ci0JCQljaGVja19nYXRld2F5PTE7Ci0JCX0KLQotCQlpZiAoKGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUikgJiYgCi0JCSAgICB0ZXN0X2JpdCgxLCZSZWFkX2Nvbm5lY3Rpb25faW5mbykpIHsgCi0JCQkKLQkJCXByb2Nlc3Nfcm91dGUoY2FyZCk7Ci0JCQljbGVhcl9iaXQoMSwmUmVhZF9jb25uZWN0aW9uX2luZm8pOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKHBwcF9wcml2X2FyZWEtPmdhdGV3YXkgJiYgY2hlY2tfZ2F0ZXdheSkKLQkJCWFkZF9nYXRld2F5KGNhcmQsZGV2KTsKLQotCQlicmVhazsKLQl9Ci0JY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQlyZXR1cm47Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX3BwcF9wb2xsCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAJQWRkIGEgcHBwX3BvbGwoKSB0YXNrIGludG8gYSB0cV9zY2hlZHVsZXIgYmggaGFuZGxlcgotICogICAgICBmb3IgYSBzcGVjaWZpYyBpbnRlcmZhY2UuICBUaGlzIHdpbGwga2ljawotICogICAgICB0aGUgcHBwX3BvbGwoKSByb3V0aW5lIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogVXNhZ2U6Ci0gKiAJSW50ZXJydXB0cyB1c2UgdGhpcyB0byBkZWZlciBhIHRha3MgdG8gCi0gKiAgICAgIGEgcG9sbGluZyByb3V0aW5lLgotICoKLSAqLwkKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9wcHBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYTsKLQlpZiAoKHBwcF9wcml2X2FyZWE9ZGV2LT5wcml2KSAhPSBOVUxMKXsgCQotCQkKLQkJc2RsYV90ICpjYXJkID0gcHBwX3ByaXZfYXJlYS0+Y2FyZDsKLQotCQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJCXJldHVybjsKLQkJfQotCi0JCXNjaGVkdWxlX3dvcmsoJnBwcF9wcml2X2FyZWEtPnBvbGxfd29yayk7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgcHBwX3BvbGxfZGVsYXkgKHVuc2lnbmVkIGxvbmcgZGV2X3B0cikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X3B0cjsKLQl0cmlnZ2VyX3BwcF9wb2xsKGRldik7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBkZXRlY3RfYW5kX2ZpeF90eF9idWcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU9uIGNvbm5lY3QsIGlmIHRoZSBib2FyZCB0eCBidWZmZXIgcHRyIGlzIG5vdCB0aGUgc2FtZQotICogICAgICBhcyB0aGUgZHJpdmVyIHR4IGJ1ZmZlciBwdHIsIHdlIGZvdW5kIGEgZmlybXdhcmUgYnVnLgotICogICAgICBSZXBvcnQgdGhlIGJ1ZyB0byB0aGUgYWJvdmUgbGF5ZXIuICBUbyBmaXggdGhlCi0gKiAgICAgIGVycm9yIHJlc3RhcnQgY29tbXVuaWNhdGlvbnMgYWdhaW4uCi0gKgotICogVXNhZ2U6Ci0gKgotICovCQotCi1zdGF0aWMgaW50IGRldGVjdF9hbmRfZml4X3R4X2J1ZyAoc2RsYV90ICpjYXJkKQotewotCWlmICgoKHVuc2lnbmVkIGxvbmcpY2FyZC0+dS5wLnR4YnVmX2Jhc2UmMHhGRkYpICE9ICgoKmNhcmQtPnUucC50eGJ1Zl9uZXh0KSYweEZGRikpewotCQlORVhfUFJJTlRLKEtFUk5fSU5GTyAiTWFqb3IgRXJyb3IsIEZpeCB0aGUgYnVnXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qKioqKiogRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYV94MjUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmODQ2ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYV94MjUuYworKysgL2Rldi9udWxsCkBAIC0xLDU0OTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfeDI1LmMJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuICBYLjI1IG1vZHVsZS4KLSoKLSogQXV0aG9yOglOZW5hZCBDb3JiaWMJPG5jb3JiaWNAc2FuZ29tYS5jb20+Ci0qCi0qIENvcHlyaWdodDoJKGMpIDE5OTUtMjAwMSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIEFwciAwMywgMjAwMSAgTmVuYWQgQ29yYmljCSBvIEZpeGVkIHRoZSByeF9za2I9TlVMTCBidWcgaW4geDI1IGluIHJ4X2ludHIoKS4KLSogRGVjIDI2LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gQWRkZWQgYSBuZXcgcG9sbGluZyByb3V0aW5lLCB0aGF0IHVzZXMKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBrZXJuZWwgdGltZXIgKG1vcmUgZWZmaWNpZW50KS4KLSogRGVjIDI1LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gVXBkYXRlZCBmb3IgMi40Llgga2VybmVsCi0qIEp1bCAyNiwgMjAwMCAgTmVuYWQgQ29yYmljCSBvIEluY3JlYXNlZCB0aGUgbG9jYWwgcGFja2V0IGJ1ZmZlcmluZwotKiAJCQkJICAgZm9yIEFQSSB0byA0MDk2K2hlYWRlcl9zaXplLiAKLSogSnVsIDE3LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gRml4ZWQgdGhlIHgyNSBzdGFydHVwIGJ1Zy4gRW5hYmxlIAotKiAJCQkJICAgY29tbXVuaWNhdGlvbnMgb25seSBhZnRlciBhbGwgaW50ZXJmYWNlcwotKiAJCQkJICAgY29tZSB1cC4gIEhJR0ggU1ZDL1BWQyBpcyB1c2VkIHRvIGNhbGN1bGF0ZQotKiAJCQkJICAgdGhlIG51bWJlciBvZiBjaGFubmVscy4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHByb3RvY29sIG9ubHkgYWZ0ZXIgYWxsIGludGVyZmFjZXMKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGVuYWJsZWQuCi0qIEp1bCAxMCwgMjAwMAlOZW5hZCBDb3JiaWMJIG8gRml4ZWQgdGhlIE1fQklUIGJ1Zy4gCi0qIEFwciAyNSwgMjAwMCAgTmVuYWQgQ29yYmljCSBvIFBhc3MgTW9kZW0gbWVzc2FnZXMgdG8gdGhlIEFQSS4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBpZGxlIHRpbWVvdXQgaW4gWDI1IEFQSS4KLSogQXByIDE0LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gRml4ZWQ6IExhcmdlIExDTiBudW1iZXIgc3VwcG9ydC4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBMQ04gbnVtYmVyIGlzIDQwOTUuCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIFgyNSBjaGFubmVscyBpcyAyNTUuCi0qIEFwciAwNiwgMjAwMCAgTmVuYWQgQ29yYmljCSBvIEFkZGVkIFNNUCBTdXBwb3J0LgotKiBNYXIgMjksIDIwMDAgIE5lbmFkIENvcmJpYwkgbyBBZGRlZCBzdXBwb3J0IGZvciBTNTE0IFBDSSBDYXJkCi0qIE1hciAyMywgMjAwMCAgTmVuYWQgQ29yYmljCSBvIEltcHJvdmVkIHRhc2sgcXVldWUsIEJIIGhhbmRsaW5nLgotKiBNYXIgMTQsIDIwMDAgIE5lbmFkIENvcmJpYyAgCSBvIFVwZGF0ZWQgUHJvdG9jb2wgVmlvbGF0aW9uIGhhbmRsaW5nCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRpbmVzLiAgQnVnIEZpeC4KLSogTWFyIDEwLCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gQnVnIEZpeDogY29ycnVwdGVkIG1ib3ggcmVjb3ZlcnkuCi0qIE1hciAwOSwgMjAwMCAgTmVuYWQgQ29yYmljICAgICBvIEZpeGVkIHRoZSBhdXRvIEhETEMgYnVnLgotKiBNYXIgMDgsIDIwMDAJTmVuYWQgQ29yYmljICAgICBvIEZpeGVkIExBUEIgSERMQyBzdGFydHVwIHByb2JsZW1zLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbiBtdXN0IGJyaW5nIHRoZSBsaW5rIHVwIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdHgvcngsIGFuZCBicmluZyB0aGUgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsgZG93biBvbiBjbG9zZSgpLgotKiBNYXIgMDYsIDIwMDAJTmVuYWQgQ29yYmljCSBvIEFkZGVkIGFuIG9wdGlvbiBmb3IgbG9nZ2luZyBjYWxsIHNldHVwIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4gCi0qIEZlYiAyOSwgMjAwMCAgTmVuYWQgQ29yYmljIAkgbyBBZGRlZCBzdXBwb3J0IGZvciBMQVBCIEhETEMgQVBJCi0qIEZlYiAyNSwgMjAwMCAgTmVuYWQgQ29yYmljICAgICBvIEZpeGVkIHRoZSBtb2RlbSBmYWlsdXJlIGhhbmRsaW5nLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBNb2RlbSBPT0IgbWVzc2FnZSB3aWxsIGJlIHBhc3NlZCAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHVzZXIuCi0qIEZlYiAyMSwgMjAwMCAgTmVuYWQgQ29yYmljIAkgbyBBZGRlZCBYcGlwZW1vbiBEZWJ1ZyBTdXBwb3J0Ci0qIERlYyAzMCwgMTk5OSAJTmVuYWQgQ29yYmljCSBvIFNvY2tldCBiYXNlZCBYMjVBUEkgCi0qIFNlcCAxNywgMTk5OAlKYXNwcmVldCBTaW5naAkgbyBVcGRhdGVzIGZvciAyLjIuWCAga2VybmVsCi0qIE1hciAxNSwgMTk5OAlBbGFuIENveAkgbyAyLjEueCBwb3J0aW5nCi0qIERlYyAxOSwgMTk5NwlKYXNwcmVldCBTaW5naAkgbyBBZGRlZCBtdWx0aS1jaGFubmVsIElQWCBzdXBwb3J0Ci0qIE5vdiAyNywgMTk5NwlKYXNwcmVldCBTaW5naAkgbyBBZGRlZCBwcm90ZWN0aW9uIGFnYWluc3QgZW5hYmxpbmcgb2YgaXJxcwotKgkJCQkgICB3aGVuIHRoZXkgYXJlIGRpc2FibGVkLgotKiBOb3YgMTcsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICAgbyBBZGRlZCBJUFggc3VwcG9ydAotKgkJCQkgbyBDaGFuZ2VkIGlmX3NlbmQoKSB0byBub3cgYnVmZmVyIHBhY2tldHMgd2hlbgotKgkJCQkgICB0aGUgYm9hcmQgaXMgYnVzeQotKgkJCQkgbyBSZW1vdmVkIHF1ZXVlaW5nIG9mIHBhY2tldHMgdmlhIHRoZSBwb2xsaW5nCi0qCQkJCSAgIHJvdXRpbmcKLSoJCQkJIG8gQ2hhbmdlZCBpZl9zZW5kKCkgY3JpdGljYWwgZmxhZ3MgdG8gcHJvcGVybHkKLSoJCQkJICAgaGFuZGxlIHJhY2UgY29uZGl0aW9ucwotKiBOb3YgMDYsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICAgbyBBZGRlZCBzdXBwb3J0IGZvciBTVkMgdGltZW91dHMKLSoJCQkJIG8gQ2hhbmdlZCBQVkMgZW5jYXBzdWxhdGlvbiB0byBFVEhfUF9JUAotKiBKdWwgMjEsIDE5OTcgIEphc3ByZWV0IFNpbmdoCSBvIEZpeGVkIGZyZWVpbmcgdXAgb2YgYnVmZmVycyB1c2luZyBrZnJlZSgpCi0qCQkJCSAgIHdoZW4gcGFja2V0cyBhcmUgcmVjZWl2ZWQuCi0qIE1hciAxMSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgIFZlcnNpb24gMy4xLjEKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gYWRkZWQgc3VwcG9ydCBmb3IgVjM1Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGNoYW5nZWQgaWZfc2VuZCgpIHRvIHJldHVybiAwIGlmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbmRldi5jcml0aWNhbCgpIGlzIHRydWUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZnJlZSBzb2NrZXQgYnVmZmVyIGluIGlmX3NlbmQoKSBpZgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgMAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBhZGRlZCBzdXBwb3J0IGZvciBzaW5nbGUgJ0AnIGFkZHJlc3MgdG8KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0IGFsbCBpbmNvbWluZyBjYWxscwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBmaXhlZCBidWcgaW4gc2V0X2NoYW5fc3RhdGUoKSB0byBkaXNjb25uZWN0Ci0qIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKLSoJCQkJIG8gaW1wbGVtZW50ZWQgZXhlYygpIGVudHJ5IHBvaW50Ci0qIEphbiAwNywgMTk5NwlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUluY2x1ZGVzIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JLyoga21hbGxvYygpLCBrZnJlZSgpICovCi0jaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CS8qIFdBTiByb3V0ZXIgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5waXBlLmg+CS8qIFdBTlBJUEUgY29tbW9uIHVzZXIgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgbWFjcm8gKi8KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogRXhwZXJpbWVudGFsIGRlbGF5ICovCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC9zZGxhX3gyNS5oPgkvKiBYLjI1IGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZS5oPgotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJRGVmaW5lcyAmIE1hY3JvcyAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLSNkZWZpbmUJQ01EX09LCQkwCQkvKiBub3JtYWwgZmlybXdhcmUgcmV0dXJuIGNvZGUgKi8KLSNkZWZpbmUJQ01EX1RJTUVPVVQJMHhGRgkJLyogZmlybXdhcmUgY29tbWFuZCB0aW1lZCBvdXQgKi8KLSNkZWZpbmUJTUFYX0NNRF9SRVRSWQkxMAkJLyogbWF4IG51bWJlciBvZiBmaXJtd2FyZSByZXRyaWVzICovCi0KLSNkZWZpbmUJWDI1X0NIQU5fTVRVCTQwOTYJCS8qIHVuZnJhZ21lbnRlZCBsb2dpY2FsIGNoYW5uZWwgTVRVICovCi0jZGVmaW5lCVgyNV9IUkRIRFJfU1oJNwkJLyogbWF4IGVuY2Fwc3VsYXRpb24gaGVhZGVyIHNpemUgKi8KLSNkZWZpbmUJWDI1X0NPTkNUX1RNT1VUCSg5MCpIWikJCS8qIGxpbmsgY29ubmVjdGlvbiB0aW1lb3V0ICovCi0jZGVmaW5lCVgyNV9SRUNPTl9UTU9VVAkoMTAqSFopCQkvKiBsaW5rIGNvbm5lY3Rpb24gdGltZW91dCAqLwotI2RlZmluZQlDT05ORUNUX1RJTUVPVVQJKDkwKkhaKQkJLyogbGluayBjb25uZWN0aW9uIHRpbWVvdXQgKi8KLSNkZWZpbmUJSE9MRF9ET1dOX1RJTUUJKDMwKkhaKQkJLyogbGluayBob2xkIGRvd24gdGltZSAqLwotI2RlZmluZSBNQVhfQkhfQlVGRgkxMAotI2RlZmluZSBNX0JJVAkJMHgwMQkKLQotLy8jZGVmaW5lIFBSSU5UX0RFQlVHIDEKLSNpZmRlZiBQUklOVF9ERUJVRwotI2RlZmluZSBEQkdfUFJJTlRLKGZvcm1hdCwgYS4uLikgcHJpbnRrKGZvcm1hdCwgIyMgYSkKLSNlbHNlCi0jZGVmaW5lIERCR19QUklOVEsoZm9ybWF0LCBhLi4uKQotI2VuZGlmICAKLQotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfUE9MTF9BQ1RJVkUgICAgICAweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT04gIDB4MDIKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1BPTExfQ09OTkVDVF9PRkYgMHgwNAotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfUE9MTF9ESVNDT05ORUNUICAweDA4Ci0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQwkgMHgxMAotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFCQkgMHgyMAotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVURQX1BLVAkJIDB4NDAKLQotI2RlZmluZSBNQVhfWDI1X0FERFJfU0laRQkxNgotI2RlZmluZSBNQVhfWDI1X0RBVEFfU0laRSAJMTI5Ci0jZGVmaW5lIE1BWF9YMjVfRkFDTF9TSVpFCTExMAotCi0jZGVmaW5lIFRSWV9DTURfQUdBSU4JMgotI2RlZmluZSBERUxBWV9SRVNVTFQgICAgMQotI2RlZmluZSBSRVRVUk5fUkVTVUxUICAgMAotCi0jZGVmaW5lIERDRCh4KSAoeCAmIDB4MDMgPyAiSElHSCIgOiAiTE9XIikKLSNkZWZpbmUgQ1RTKHgpICh4ICYgMHgwNSA/ICJISUdIIiA6ICJMT1ciKQotCi0KLS8qIERyaXZlciB3aWxsIG5vdCB3cml0ZSBsb2cgbWVzc2FnZXMgYWJvdXQgCi0gKiBtb2RlbSBzdGF0dXMgaWYgZGVmaW5lZC4qLwotI2RlZmluZSBNT0RFTV9OT1RfTE9HIDEKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICogCUZvciBJUFhXQU4gCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNkZWZpbmUgQ1ZIZXhUb0FzY2lpKGIpICgoKHVuc2lnbmVkIGNoYXIpKGIpID4gKHVuc2lnbmVkIGNoYXIpOSkgPyAoKHVuc2lnbmVkIGNoYXIpJ0EnICsgKCh1bnNpZ25lZCBjaGFyKShiKSAtICh1bnNpZ25lZCBjaGFyKTEwKSkgOiAoKHVuc2lnbmVkIGNoYXIpJzAnICsgKHVuc2lnbmVkIGNoYXIpKGIpKSkKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgICAgICBNRU1PUlkgREVCVUdHSU5HIEZVTkNUSU9OCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2RlZmluZSBLTUVNX1NBRkVUWVpPTkUgOAotCi1zdGF0aWMgdm9pZCAqIGRiZ19rbWFsbG9jKHVuc2lnbmVkIGludCBzaXplLCBpbnQgcHJpbywgaW50IGxpbmUpIHsKLQlpbnQgaSA9IDA7Ci0Jdm9pZCAqIHYgPSBrbWFsbG9jKHNpemUrc2l6ZW9mKHVuc2lnbmVkIGludCkrMipLTUVNX1NBRkVUWVpPTkUqOCxwcmlvKTsKLQljaGFyICogYzEgPSB2OwkKLQljMSArPSBzaXplb2YodW5zaWduZWQgaW50KTsKLQkqKCh1bnNpZ25lZCBpbnQgKil2KSA9IHNpemU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJYzFbMF0gPSAnRCc7IGMxWzFdID0gJ0UnOyBjMVsyXSA9ICdBJzsgYzFbM10gPSAnRCc7Ci0JCWMxWzRdID0gJ0InOyBjMVs1XSA9ICdFJzsgYzFbNl0gPSAnRSc7IGMxWzddID0gJ0YnOwotCQljMSArPSA4OwotCX0KLQljMSArPSBzaXplOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQljMVswXSA9ICdNJzsgYzFbMV0gPSAnVSc7IGMxWzJdID0gJ04nOyBjMVszXSA9ICdHJzsKLQkJYzFbNF0gPSAnVyc7IGMxWzVdID0gJ0EnOyBjMVs2XSA9ICdMJzsgYzFbN10gPSAnTCc7Ci0JCWMxICs9IDg7Ci0JfQotCXYgPSAoKGNoYXIgKil2KSArIHNpemVvZih1bnNpZ25lZCBpbnQpICsgS01FTV9TQUZFVFlaT05FKjg7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibGluZSAlZCAga21hbGxvYyglZCwlZCkgPSAlcFxuIixsaW5lLHNpemUscHJpbyx2KTsKLQlyZXR1cm4gdjsKLX0KLXN0YXRpYyB2b2lkIGRiZ19rZnJlZSh2b2lkICogdiwgaW50IGxpbmUpIHsKLQl1bnNpZ25lZCBpbnQgKiBzcCA9ICh1bnNpZ25lZCBpbnQgKikoKChjaGFyICopdikgLSAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKyBLTUVNX1NBRkVUWVpPTkUqOCkpOwotCXVuc2lnbmVkIGludCBzaXplID0gKnNwOwotCWNoYXIgKiBjMSA9ICgoY2hhciAqKXYpIC0gS01FTV9TQUZFVFlaT05FKjg7Ci0JaW50IGkgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQlpZiAoICAgYzFbMF0gIT0gJ0QnIHx8IGMxWzFdICE9ICdFJyB8fCBjMVsyXSAhPSAnQScgfHwgYzFbM10gIT0gJ0QnCi0JCSAgICB8fCBjMVs0XSAhPSAnQicgfHwgYzFbNV0gIT0gJ0UnIHx8IGMxWzZdICE9ICdFJyB8fCBjMVs3XSAhPSAnRicpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImttYWxsb2NlZCBibG9jayBhdCAlcCBoYXMgYmVlbiBjb3JydXB0ZWQgKHVuZGVycnVuKSFcbiIsdik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIgJTR4OiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4XG4iLCBpKjgsCi0JCQkgICAgICAgICAgICAgICAgYzFbMF0sYzFbMV0sYzFbMl0sYzFbM10sYzFbNF0sYzFbNV0sYzFbNl0sYzFbN10gKTsKLQkJfQotCQljMSArPSA4OwotCX0KLQljMSArPSBzaXplOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQlpZiAoICAgYzFbMF0gIT0gJ00nIHx8IGMxWzFdICE9ICdVJyB8fCBjMVsyXSAhPSAnTicgfHwgYzFbM10gIT0gJ0cnCi0JCSAgICB8fCBjMVs0XSAhPSAnVycgfHwgYzFbNV0gIT0gJ0EnIHx8IGMxWzZdICE9ICdMJyB8fCBjMVs3XSAhPSAnTCcKLQkJICAgKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJrbWFsbG9jZWQgYmxvY2sgYXQgJXAgaGFzIGJlZW4gY29ycnVwdGVkIChvdmVycnVuKTpcbiIsdik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIgJTR4OiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4XG4iLCBpKjgsCi0JCQkgICAgICAgICAgICAgICAgYzFbMF0sYzFbMV0sYzFbMl0sYzFbM10sYzFbNF0sYzFbNV0sYzFbNl0sYzFbN10gKTsKLQkJfQotCQljMSArPSA4OwotCX0KLQlwcmludGsoS0VSTl9JTkZPICJsaW5lICVkICBrZnJlZSglcClcbiIsbGluZSx2KTsKLQl2ID0gKChjaGFyICopdikgLSAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKyBLTUVNX1NBRkVUWVpPTkUqOCk7Ci0Ja2ZyZWUodik7Ci19Ci0KLSNkZWZpbmUga21hbGxvYyh4LHkpIGRiZ19rbWFsbG9jKHgseSxfX0xJTkVfXykKLSNkZWZpbmUga2ZyZWUoeCkgZGJnX2tmcmVlKHgsX19MSU5FX18pCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlEYXRhIFN0cnVjdHVyZXMgCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOiAJeDI1X2NoYW5uZWwKLSAqCi0gKiBQdXJwb3NlOglUbyBob2xkIHByaXZhdGUgaW5mb3JtYXRvbiBmb3IgZWFjaCAgCi0gKiAgICAgICAgICAgICAgbG9naWNhbCBjaGFubmVsLgotICoJCQotICogUmF0aW9uYWxlOiAgCVBlci1jaGFubmVsIGRlYnVnZ2luZyBpcyBwb3NzaWJsZSBpZiBlYWNoIAotICogICAgICAgICAgICAgIGNoYW5uZWwgaGFzIGl0cyBvd24gcHJpdmF0ZSBhcmVhLgotICoJCi0gKiBBc3N1bXB0aW9uczoKLSAqCi0gKiBEZXNjcmlwdGlvbjoJVGhpcyBpcyBhbiBleHRlbnRpb24gb2YgdGhlIHN0cnVjdCBuZXRfZGV2aWNlCi0gKiAgICAgICAgICAgICAgd2UgY3JlYXRlIGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlIHRvIGtlZXAgCi0gKiAgICAgICAgICAgICAgdGhlIHJlc3Qgb2YgWC4yNSBjaGFubmVsLXNwZWNpZmljIGRhdGEuIAotICoKLSAqIENvbnN0cnVjdDoJVHlwZWRlZgotICovCi10eXBlZGVmIHN0cnVjdCB4MjVfY2hhbm5lbAotewotCXdhbnBpcGVfY29tbW9uX3QgY29tbW9uOwkvKiBjb21tb24gYXJlYSBmb3IgeDI1YXBpIGFuZCBzb2NrZXQgKi8KLQljaGFyIG5hbWVbV0FOX0lGTkFNRV9TWisxXTsJLyogaW50ZXJmYWNlIG5hbWUsIEFTQ0lJWiAqLwotCWNoYXIgYWRkcltXQU5fQUREUkVTU19TWisxXTsJLyogbWVkaWEgYWRkcmVzcywgQVNDSUlaICovCi0JdW5zaWduZWQgdHhfcGt0X3NpemU7Ci0JdW5zaWduZWQgc2hvcnQgcHJvdG9jb2w7CS8qIGV0aGVydHlwZSwgMCAtIG11bHRpcGxleGVkICovCi0JY2hhciBkcm9wX3NlcXVlbmNlOwkJLyogbWFyayBzZXF1ZW5jZSBmb3IgZHJvcHBpbmcgKi8KLQl1bnNpZ25lZCBsb25nIHN0YXRlX3RpY2s7CS8qIHRpbWUgb2YgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlICovCi0JdW5zaWduZWQgaWRsZV90aW1lb3V0OwkJLyogc2VjLCBiZWZvcmUgZGlzY29ubmVjdGluZyAqLwotCXVuc2lnbmVkIGxvbmcgaV90aW1lb3V0X3NvZmFyOyAgLyogIyBvZiBzZWMncyB3ZSd2ZSBiZWVuIGlkbGUgKi8KLQl1bnNpZ25lZCBob2xkX3RpbWVvdXQ7CQkvKiBzZWMsIGJlZm9yZSByZS1jb25uZWN0aW5nICovCi0JdW5zaWduZWQgbG9uZyB0aWNrX2NvdW50ZXI7CS8qIGNvdW50ZXIgZm9yIHRyYW5zbWl0IHRpbWUgb3V0ICovCi0JY2hhciBkZXZ0aW50OwkJCS8qIFdlYXRoZXIgd2Ugc2hvdWxkIGRldl90aW50KCkgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiogcnhfc2tiOwkJLyogcmVjZWl2ZSBzb2NrZXQgYnVmZmVyICovCi0Jc3RydWN0IHNrX2J1ZmYqIHR4X3NrYjsJCS8qIHRyYW5zbWl0IHNvY2tldCBidWZmZXIgKi8KLQotCWJoX2RhdGFfdCAqYmhfaGVhZDsJICAJICAvKiBDaXJjdWxhciBidWZmZXIgZm9yIHgyNWFwaV9iaCAqLwotCXVuc2lnbmVkIGxvbmcgIHRxX3dvcmtpbmc7Ci0Jdm9sYXRpbGUgaW50ICBiaF93cml0ZTsKLQl2b2xhdGlsZSBpbnQgIGJoX3JlYWQ7Ci0JYXRvbWljX3QgIGJoX2J1ZmZfdXNlZDsKLQotCXNkbGFfdCogY2FyZDsJCQkvKiAtPiBvd25lciAqLwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CQkvKiAtPiBib3VuZCBkZXZjZSAqLwotCi0JaW50IGNoX2lkeDsKLQl1bnNpZ25lZCBjaGFyIGVuYWJsZV9JUFg7Ci0JdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBpZnN0YXRzOwkvKiBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIHNob3J0IHRyYW5zbWl0X2xlbmd0aDsKLQl1bnNpZ25lZCBzaG9ydCB0eF9vZmZzZXQ7Ci0JY2hhciB0cmFuc21pdF9idWZmZXJbWDI1X0NIQU5fTVRVK3NpemVvZih4MjVhcGlfaGRyX3QpXTsKLQotCWlmX3NlbmRfc3RhdF90ICAgaWZfc2VuZF9zdGF0OwotICAgICAgICByeF9pbnRyX3N0YXRfdCAgIHJ4X2ludHJfc3RhdDsKLSAgICAgICAgcGlwZV9tZ210X3N0YXRfdCBwaXBlX21nbXRfc3RhdDsgICAgCi0KLQl1bnNpZ25lZCBsb25nIHJvdXRlcl9zdGFydF90aW1lOyAvKiBSb3V0ZXIgc3RhcnQgdGltZSBpbiBzZWNvbmRzICovCi0JdW5zaWduZWQgbG9uZyByb3V0ZXJfdXBfdGltZTsKLQkKLX0geDI1X2NoYW5uZWxfdDsKLQotLyogRklYTUUgVGFrZSB0aGlzIG91dCAqLwotCi0jaWZkZWYgTkVYX09MRF9DQUxMX0lORk8KLXR5cGVkZWYgc3RydWN0IHgyNV9jYWxsX2luZm8KLXsKLQljaGFyIGRlc3RbMTddOwkJCVBBQ0tFRDsvKiBBU0NJSVogZGVzdGluYXRpb24gYWRkcmVzcyAqLwotCWNoYXIgc3JjWzE3XTsJCQlQQUNLRUQ7LyogQVNDSUlaIHNvdXJjZSBhZGRyZXNzICovCi0JY2hhciBudXNlcjsJCQlQQUNLRUQ7LyogbnVtYmVyIG9mIHVzZXIgZGF0YSBieXRlcyAqLwotCXVuc2lnbmVkIGNoYXIgdXNlclsxMjddOwlQQUNLRUQ7LyogdXNlciBkYXRhICovCi0JY2hhciBuZmFjaWw7CQkJUEFDS0VEOy8qIG51bWJlciBvZiBmYWNpbGl0aWVzICovCi0Jc3RydWN0Ci0JewotCQl1bnNpZ25lZCBjaGFyIGNvZGU7ICAgICBQQUNLRUQ7Ci0JCXVuc2lnbmVkIGNoYXIgcGFybTsgICAgIFBBQ0tFRDsKLQl9IGZhY2lsWzY0XTsJCQkgICAgICAgIC8qIGZhY2lsaXRpZXMgKi8KLX0geDI1X2NhbGxfaW5mb190OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IHgyNV9jYWxsX2luZm8KLXsKLQljaGFyIGRlc3RbTUFYX1gyNV9BRERSX1NJWkVdCQlQQUNLRUQ7LyogQVNDSUlaIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQljaGFyIHNyY1tNQVhfWDI1X0FERFJfU0laRV0JCVBBQ0tFRDsvKiBBU0NJSVogc291cmNlIGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBjaGFyIG51c2VyCQkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgdXNlcltNQVhfWDI1X0RBVEFfU0laRV0JUEFDS0VEOy8qIHVzZXIgZGF0YSAqLwotCXVuc2lnbmVkIGNoYXIgbmZhY2lsCQkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgZmFjaWxbTUFYX1gyNV9GQUNMX1NJWkVdCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBsY24gICAgICAgICAgICAgCQlQQUNLRUQ7Ci19IHgyNV9jYWxsX2luZm9fdDsKLSNlbmRpZgotCi0KLSAgCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKglQcml2YXRlIEZ1bmN0aW9uIFByb3RvdHlwZXMKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlIAotICogY2FsbGVkIGJ5IHRoZSBXQU4gcm91dGVyIG1vZHVsZS4KLSAqLwotc3RhdGljIGludCB1cGRhdGUoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldik7Ci1zdGF0aWMgaW50IG5ld19pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkgIHdhbmlmX2NvbmZfdCogY29uZik7Ci1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbV9zaHV0ZG93bihzZGxhX3QgKmNhcmQpOwotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICoJV0FOUElQRS1zcGVjaWZpYyBlbnRyeSBwb2ludHMgCi0gKi8KLXN0YXRpYyBpbnQgd3B4X2V4ZWMgKHN0cnVjdCBzZGxhKiBjYXJkLCB2b2lkKiB1X2NtZCwgdm9pZCogdV9kYXRhKTsKLXN0YXRpYyB2b2lkIHgyNWFwaV9iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgeDI1YXBpX2JoX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGJoX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqIAlOZXR3b3JrIGRldmljZSBpbnRlcmZhY2UgCi0gKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCXVuc2lnbmVkIHNob3J0IHR5cGUsIHZvaWQqIGRhZGRyLCB2b2lkKiBzYWRkciwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmKiBza2IpOwotc3RhdGljIGludCBpZl9zZW5kKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLQotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqIAlJbnRlcnJ1cHQgaGFuZGxlcnMgCi0gKi8KLXN0YXRpYyB2b2lkIHdweF9pc3IJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHJ4X2ludHIJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHR4X2ludHIJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHN0YXR1c19pbnRyCShzZGxhX3QgKik7Ci1zdGF0aWMgdm9pZCBldmVudF9pbnRyCShzZGxhX3QgKik7Ci1zdGF0aWMgdm9pZCBzcHVyX2ludHIJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHRpbWVyX2ludHIgIChzZGxhX3QgKik7Ci0KLXN0YXRpYyBpbnQgdHhfaW50cl9zZW5kKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm1vdmVfZGV2X3RvX25leHQoc2RsYV90ICpjYXJkLAotCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqCUJhY2tncm91bmQgcG9sbGluZyByb3V0aW5lcyAKLSAqLwotc3RhdGljIHZvaWQgd3B4X3BvbGwgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCBwb2xsX2Rpc2Nvbm5lY3RlZCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHBvbGxfY29ubmVjdGluZyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHBvbGxfYWN0aXZlIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgdHJpZ2dlcl94MjVfcG9sbChzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgeDI1X3RpbWVyX3JvdXRpbmUodW5zaWduZWQgbG9uZyBkYXRhKTsKLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gKglYLjI1IGZpcm13YXJlIGludGVyZmFjZSBmdW5jdGlvbnMgCi0gKi8KLXN0YXRpYyBpbnQgeDI1X2dldF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cik7Ci1zdGF0aWMgaW50IHgyNV9jb25maWd1cmUgKHNkbGFfdCogY2FyZCwgVFgyNUNvbmZpZyogY29uZik7Ci1zdGF0aWMgaW50IGhkbGNfY29uZmlndXJlIChzZGxhX3QqIGNhcmQsIFRYMjVDb25maWcqIGNvbmYpOwotc3RhdGljIGludCBzZXRfaGRsY19sZXZlbCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgeDI1X2dldF9lcnJfc3RhdHMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9nZXRfc3RhdHMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9zZXRfaW50cl9tb2RlIChzZGxhX3QqIGNhcmQsIGludCBtb2RlKTsKLXN0YXRpYyBpbnQgeDI1X2Nsb3NlX2hkbGMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9vcGVuX2hkbGMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9zZXR1cF9oZGxjIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB4MjVfc2V0X2R0ciAoc2RsYV90KiBjYXJkLCBpbnQgZHRyKTsKLXN0YXRpYyBpbnQgeDI1X2dldF9jaGFuX2NvbmYgKHNkbGFfdCogY2FyZCwgeDI1X2NoYW5uZWxfdCogY2hhbik7Ci1zdGF0aWMgaW50IHgyNV9wbGFjZV9jYWxsIChzZGxhX3QqIGNhcmQsIHgyNV9jaGFubmVsX3QqIGNoYW4pOwotc3RhdGljIGludCB4MjVfYWNjZXB0X2NhbGwgKHNkbGFfdCogY2FyZCwgaW50IGxjbiwgaW50IHFkbSk7Ci1zdGF0aWMgaW50IHgyNV9jbGVhcl9jYWxsIChzZGxhX3QqIGNhcmQsIGludCBsY24sIGludCBjYXVzZSwgaW50IGRpYWduKTsKLXN0YXRpYyBpbnQgeDI1X3NlbmQgKHNkbGFfdCogY2FyZCwgaW50IGxjbiwgaW50IHFkbSwgaW50IGxlbiwgdm9pZCogYnVmKTsKLXN0YXRpYyBpbnQgeDI1X2ZldGNoX2V2ZW50cyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgeDI1X2Vycm9yIChzZGxhX3QqIGNhcmQsIGludCBlcnIsIGludCBjbWQsIGludCBsY24pOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAotICoJWC4yNSBhc3luY2hyb25vdXMgZXZlbnQgaGFuZGxlcnMgCi0gKi8KLXN0YXRpYyBpbnQgaW5jb21pbmdfY2FsbCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpOwotc3RhdGljIGludCBjYWxsX2FjY2VwdGVkIChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYik7Ci1zdGF0aWMgaW50IGNhbGxfY2xlYXJlZCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpOwotc3RhdGljIGludCB0aW1lb3V0X2V2ZW50IChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYik7Ci1zdGF0aWMgaW50IHJlc3RhcnRfZXZlbnQgKHNkbGFfdCogY2FyZCwgaW50IGNtZCwgaW50IGxjbiwgVFgyNU1ib3gqIG1iKTsKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAotICoJTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgCi0gKi8KLXN0YXRpYyBpbnQgY29ubmVjdCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgZGlzY29ubmVjdCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSogZ2V0X2Rldl9ieV9sY24oc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwKLQkJCQkJIHVuc2lnbmVkIGxjbik7Ci1zdGF0aWMgaW50IGNoYW5fY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgY2hhbl9kaXNjKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIHZvaWQgc2V0X2NoYW5fc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgaW50IHN0YXRlKTsKLXN0YXRpYyBpbnQgY2hhbl9zZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQqIGJ1ZmYsIHVuc2lnbmVkIGRhdGFfbGVuLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgdHhfaW50cik7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBicHNfdG9fc3BlZWRfY29kZSAodW5zaWduZWQgbG9uZyBicHMpOwotc3RhdGljIHVuc2lnbmVkIGludCBkZWNfdG9fdWludCAodW5zaWduZWQgY2hhciogc3RyLCBpbnQgbGVuKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGV4X3RvX3VpbnQgKHVuc2lnbmVkIGNoYXIqLCBpbnQpOwotc3RhdGljIHZvaWQgcGFyc2VfY2FsbF9pbmZvICh1bnNpZ25lZCBjaGFyKiwgeDI1X2NhbGxfaW5mb190Kik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmZpbmRfY2hhbm5lbChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxjbik7Ci1zdGF0aWMgdm9pZCBiaW5kX2xjbl90b19kZXYoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsY24pOwotc3RhdGljIHZvaWQgc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsZW4pOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gKiAgICAgIFgyNSBBUEkgRnVuY3Rpb25zIAotICovCi1zdGF0aWMgaW50IHdhbnBpcGVfcHVsbF9kYXRhX2luX3NrYihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBza19idWZmICoqKTsKLXN0YXRpYyB2b2lkIHRpbWVyX2ludHJfZXhlYyhzZGxhX3QgKiwgdW5zaWduZWQgY2hhcik7Ci1zdGF0aWMgaW50IGV4ZWN1dGVfZGVsYXllZF9jbWQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIG1ib3hfY21kX3QgKnVzcl9jbWQsIGNoYXIgYmFkX2NtZCk7Ci1zdGF0aWMgaW50IGFwaV9pbmNvbWluZ19jYWxsIChzZGxhX3QqLCBUWDI1TWJveCAqLCBpbnQpOwotc3RhdGljIGludCBhbGxvY19hbmRfaW5pdF9za2JfYnVmIChzZGxhX3QgKixzdHJ1Y3Qgc2tfYnVmZiAqKiwgaW50KTsKLXN0YXRpYyB2b2lkIHNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgVFgyNU1ib3gqIG1ib3gpOwotc3RhdGljIGludCBjbGVhcl9jb25maXJtX2V2ZW50IChzZGxhX3QgKiwgVFgyNU1ib3gqKTsKLXN0YXRpYyB2b2lkIHNlbmRfb29iX21zZyAoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBUWDI1TWJveCAqbWJveCk7Ci1zdGF0aWMgaW50IHRpbWVyX2ludHJfY21kX2V4ZWMoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGFwaV9vb2JfZXZlbnQgKHNkbGFfdCAqY2FyZCxUWDI1TWJveCAqbWJveCk7Ci1zdGF0aWMgaW50IGNoZWNrX2JhZF9jb21tYW5kKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGNoYW5uZWxfZGlzY29ubmVjdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgaGRsY19saW5rX2Rvd24gKHNkbGFfdCopOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICBYUElQRU1PTiBGdW5jdGlvbnMKLSAqLwotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QgKik7Ci1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKiwgc2RsYV90Kik7Ci1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQpOyAKLXN0YXRpYyB2b2lkIGluaXRfeDI1X2NoYW5uZWxfc3RydWN0KCB4MjVfY2hhbm5lbF90ICopOwotc3RhdGljIHZvaWQgaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggc2RsYV90ICopOwotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoaW50IHVkcF90eXBlLCBjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QgKmNhcmQsCi0JCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxjbik7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqLCBpbnQpOwotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICoJSVBYIGZ1bmN0aW9ucyAKLSAqLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7Ci1zdGF0aWMgaW50IGhhbmRsZV9JUFhXQU4odW5zaWduZWQgY2hhciAqLCBjaGFyICosIHVuc2lnbmVkIGNoYXIgLCAKLQkJCSB1bnNpZ25lZCBsb25nICwgdW5zaWduZWQgc2hvcnQgKTsKLQotZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLQotc3RhdGljIHZvaWQgUzUwOF9TNTE0X2xvY2soc2RsYV90ICosIHVuc2lnbmVkIGxvbmcgKik7Ci1zdGF0aWMgdm9pZCBTNTA4X1M1MTRfdW5sb2NrKHNkbGFfdCAqLCB1bnNpZ25lZCBsb25nICopOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gKiAJR2xvYmFsIFZhcmlhYmxlcyAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKglQdWJsaWMgRnVuY3Rpb25zIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB3cHhfaW5pdDoJWC4yNSBQcm90b2NvbCBJbml0aWFsaXphdGlvbiByb3V0aW5lLgotICoKLSAqIFB1cnBvc2U6CVRvIGluaXRpYWxpemUgdGhlIHByb3RvY29sL2Zpcm13YXJlLgotICogCi0gKiBSYXRpb25hbGU6CVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHNldHVwKCkgZnVuY3Rpb24sIGluCi0gKiAgICAgICAgICAgICAgc2RsYW1haW4uYywgdG8gZHluYW1pY2FsbHkgc2V0dXAgdGhlIHgyNSBwcm90b2NvbC4KLSAqCQlUaGlzIGlzIHRoZSBmaXJzdCBwcm90b2NvbCBzcGVjaWZpYyBmdW5jdGlvbiwgd2hpY2gKLSAqICAgICAgICAgICAgICBleGVjdXRlcyBvbmNlIG9uIHN0YXJ0dXAuCi0gKiAgICAgICAgICAgICAgICAKLSAqIERlc2NyaXB0aW9uOglUaGlzIHByb2NlZHVyZSBpbml0aWFsaXplcyB0aGUgeDI1IGZpcm13YXJlIGFuZAotICogICAgCQlzZXRzIHVwIHRoZSBtYWlsYm94LCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXIKLSAqICAgICAgICAgICAgICBwb2ludGVycy4gSXQgYWxzbyBpbml0aWFsaXplcyBhbGwgZGVidWdnaW5nIHN0cnVjdHVyZXMKLSAqICAgICAgICAgICAgICBhbmQgc2V0cyB1cCB0aGUgWDI1IGVudmlyb25tZW50LgotICoKLSAqCQlTZXRzIHVwIGhhcmR3YXJlIG9wdGlvbnMgZGVmaW5lZCBieSB1c2VyIGluIFt3YW5waXBlI10gCi0gKgkJc2VjdGlvbiBvZiB3YW5waXBlIy5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZS4gCi0gKgotICogCQlBdCB0aGlzIHBvaW50IGFkYXB0ZXIgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCAKLSAqICAgICAgCWFuZCBYLjI1IGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgCQlvIHJlYWQgZmlybXdhcmUgdmVyc2lvbiAodG8gbWFrZSBzdXJlIGl0J3MgYWxpdmUpCi0gKiAgCQlvIGNvbmZpZ3VyZSBhZGFwdGVyCi0gKiAgCQlvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSAKLSAqICAgICAgICAgICAgICAgIGFkYXB0ZXIgZGF0YSBzcGFjZS4KLSAqCi0gKiBDYWxsZWQgYnk6CXNldHVwKCkgZnVuY3Rpb24gaW4gc2RsYW1haW4uYwotICoKLSAqIEFzc3VtcHRpb25zOglOb25lCi0gKgotICogV2FybmluZ3M6CU5vbmUKLSAqCi0gKiBSZXR1cm46IAkwCW8uay4KLSAqCSAJPCAwCWZhaWx1cmUuCi0gKi8KLQotaW50IHdweF9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpCi17Ci0JdW5pb257Ci0JCWNoYXIgc3RyWzgwXTsKLQkJVFgyNUNvbmZpZyBjZmc7Ci0JfSB1OwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gSUQgKi8KLQlpZiAoY29uZi0+Y29uZmlnX2lkICE9IFdBTkNPTkZJR19YMjUpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBjb25maWd1cmF0aW9uIElEICV1IVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNvbmYtPmNvbmZpZ19pZCkKLQkJOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyAqLwotCWNhcmQtPm1ib3ggID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgWDI1X01CT1hfT0ZGUyk7Ci0JY2FyZC0+cnhtYiAgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBYMjVfUlhNQk9YX09GRlMpOwotCWNhcmQtPmZsYWdzID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgWDI1X1NUQVRVU19PRkZTKTsKLQotCS8qIEluaXRpYWxpemUgZm9yIFM1MTQgQ2FyZCAqLwotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCWNhcmQtPm1ib3ggKz0gWDI1X01CX1ZFQ1RPUjsKLQkJY2FyZC0+ZmxhZ3MgKz0gWDI1X01CX1ZFQ1RPUjsKLQkJY2FyZC0+cnhtYiArPSBYMjVfTUJfVkVDVE9SOwotCX0KLQotCi0JLyogUmVhZCBmaXJtd2FyZSB2ZXJzaW9uLiAgTm90ZSB0aGF0IHdoZW4gYWRhcHRlciBpbml0aWFsaXplcywgaXQKLQkgKiBjbGVhcnMgdGhlIG1haWxib3gsIHNvIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgZmlyc3QgY29tbWFuZCB3YXMKLQkgKiBleGVjdXRlZCBzdWNjZXNzZnVsbHkgd2hlbiBpbiBmYWN0IGl0IHdhcyBtZXJlbHkgZXJhc2VkLiBUbyB3b3JrCi0JICogYXJvdW5kIHRoaXMsIHdlIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbW1hbmQgdHdpY2UuCi0JICovCi0JaWYgKHgyNV9nZXRfdmVyc2lvbihjYXJkLCBOVUxMKSB8fCB4MjVfZ2V0X3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQotCi0JLyogWDI1IGZpcm13YXJlIGNhbiBydW4gZXRoZXIgaW4gWDI1IG9yIExBUEIgSERMQyBtb2RlLgotICAgICAgICAgKiBDaGVjayB0aGUgdXNlciBkZWZpbmVkIG9wdGlvbiBhbmQgY29uZmlndXJlIGFjY29yZGluZ2x5ICovCi0JaWYgKGNvbmYtPnUueDI1LkxBUEJfaGRsY19vbmx5ID09IFdBTk9QVF9ZRVMpewotCQlpZiAoc2V0X2hkbGNfbGV2ZWwoY2FyZCkgIT0gQ01EX09LKXsKLQkJCXJldHVybiAtRUlPOwkKLQkJfWVsc2V7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcnVubmluZyBMQVBfQiBIRExDIGZpcm13YXJlIHYlc1xuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCB1LnN0cik7Ci0JCX0KLQkJY2FyZC0+dS54LkxBUEJfaGRsYyA9IDE7Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBydW5uaW5nIFguMjUgZmlybXdhcmUgdiVzXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIHUuc3RyKTsKLQkJY2FyZC0+dS54LkxBUEJfaGRsYyA9IDA7Ci0JfQotCi0JLyogQ29uZmlndXJlIGFkYXB0ZXIuIEhlcmUgd2Ugc2V0IHJlc29uYWJsZSBkZWZhdWx0cywgdGhlbiBwYXJzZQotCSAqIGRldmljZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBhbmQgc2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KLQkgKiBNb3N0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdmVyaWZpZWQgYW5kIGNvcnJlY3RlZCAoaWYKLQkgKiBuZWNlc3NhcnkpIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gdGhlIGFkYXB0ZXIgdG8gZG8gc28uCi0JICovCi0JbWVtc2V0KCZ1LmNmZywgMCwgc2l6ZW9mKHUuY2ZnKSk7Ci0JdS5jZmcudDEJCT0gMzsKLQl1LmNmZy5uMgkJPSAxMDsKLQl1LmNmZy5hdXRvSGRsYwkJPSAxOwkJLyogYXV0b21hdGljIEhETEMgY29ubmVjdGlvbiAqLwotCXUuY2ZnLmhkbGNXaW5kb3cJPSA3OwotCXUuY2ZnLnBrdFdpbmRvdwkJPSAyOwotCXUuY2ZnLnN0YXRpb24JCT0gMTsJCS8qIERURSAqLwotCXUuY2ZnLm9wdGlvbnMJCT0gMHgwMDkwOwkvKiBkaXNhYmxlIEQtYml0IHByYWdtYXRpY3MgKi8KLQl1LmNmZy5jY2l0dENvbXBhdAk9IDE5ODg7Ci0JdS5jZmcudDEwdDIwCQk9IDMwOwotCXUuY2ZnLnQxMXQyMQkJPSAzMDsKLQl1LmNmZy50MTJ0MjIJCT0gMzA7Ci0JdS5jZmcudDEzdDIzCQk9IDMwOwotCXUuY2ZnLnQxNnQyNgkJPSAzMDsKLQl1LmNmZy50MjgJCT0gMzA7Ci0JdS5jZmcucjEwcjIwCQk9IDU7Ci0JdS5jZmcucjEycjIyCQk9IDU7Ci0JdS5jZmcucjEzcjIzCQk9IDU7Ci0JdS5jZmcucmVzcG9uc2VPcHQJPSAxOwkJLyogUlIncyBhZnRlciBldmVyeSBwYWNrZXQgKi8KLQotCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJdS5jZmcuaGRsY01UVSA9IDEwMjc7Ci0JfQotCi0JaWYgKGNvbmYtPnUueDI1LngyNV9jb25mX29wdCl7Ci0JCXUuY2ZnLm9wdGlvbnMgPSBjb25mLT51LngyNS54MjVfY29uZl9vcHQ7Ci0JfQotCi0JaWYgKGNvbmYtPmNsb2NraW5nICE9IFdBTk9QVF9FWFRFUk5BTCkKLQkJdS5jZmcuYmF1ZFJhdGUgPSBicHNfdG9fc3BlZWRfY29kZShjb25mLT5icHMpOwotCi0JaWYgKGNvbmYtPnN0YXRpb24gIT0gV0FOT1BUX0RURSl7Ci0JCXUuY2ZnLnN0YXRpb24gPSAwOwkJLyogRENFIG1vZGUgKi8KLQl9Ci0KLSAgICAgICAgaWYgKGNvbmYtPmludGVyZmFjZSAhPSBXQU5PUFRfUlMyMzIgKXsKLQkgICAgICAgIHUuY2ZnLmhkbGNPcHRpb25zIHw9IDB4ODA7ICAgICAgLyogVjM1IG1vZGUgKi8KLQl9IAotCi0JLyogYWRqdXN0IE1UVSAqLwotCWlmICghY29uZi0+bXR1IHx8IChjb25mLT5tdHUgPj0gMTAyNCkpCi0JCWNhcmQtPndhbmRldi5tdHUgPSAxMDI0OwotCWVsc2UgaWYgKGNvbmYtPm10dSA+PSA1MTIpCi0JCWNhcmQtPndhbmRldi5tdHUgPSA1MTI7Ci0JZWxzZSBpZiAoY29uZi0+bXR1ID49IDI1NikKLQkJY2FyZC0+d2FuZGV2Lm10dSA9IDI1NjsKLQllbHNlIGlmIChjb25mLT5tdHUgPj0gMTI4KQotCQljYXJkLT53YW5kZXYubXR1ID0gMTI4OwotCWVsc2UgCi0JCWNhcmQtPndhbmRldi5tdHUgPSA2NDsKLQotCXUuY2ZnLmRlZlBrdFNpemUgPSB1LmNmZy5wa3RNVFUgPSBjYXJkLT53YW5kZXYubXR1OwotCi0JaWYgKGNvbmYtPnUueDI1LmhpX3B2Yyl7Ci0JCWNhcmQtPnUueC5oaV9wdmMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LmhpX3B2YywgTUFYX0xDTl9OVU0pOwotCQljYXJkLT51LngubG9fcHZjID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5sb19wdmMsIGNhcmQtPnUueC5oaV9wdmMpOwotCX0KLQotCWlmIChjb25mLT51LngyNS5oaV9zdmMpewotCQljYXJkLT51LnguaGlfc3ZjID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5oaV9zdmMsIE1BWF9MQ05fTlVNKTsKLQkJY2FyZC0+dS54LmxvX3N2YyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUubG9fc3ZjLCBjYXJkLT51LnguaGlfc3ZjKTsKLQl9Ci0KLQkvKiBGaWd1cmUgb3V0IHRoZSB0b3RhbCBudW1iZXIgb2YgY2hhbm5lbHMgdG8gY29uZmlndXJlICovCi0JY2FyZC0+dS54Lm51bV9vZl9jaCA9IDA7Ci0JaWYgKGNhcmQtPnUueC5oaV9zdmMgIT0gMCl7Ci0JCWNhcmQtPnUueC5udW1fb2ZfY2ggPSAoY2FyZC0+dS54LmhpX3N2YyAtIGNhcmQtPnUueC5sb19zdmMpICsgMTsKLQl9Ci0JaWYgKGNhcmQtPnUueC5oaV9wdmMgIT0gMCl7Ci0JCWNhcmQtPnUueC5udW1fb2ZfY2ggKz0gKGNhcmQtPnUueC5oaV9wdmMgLSBjYXJkLT51LngubG9fcHZjKSArIDE7Ci0JfQotCi0JaWYgKGNhcmQtPnUueC5udW1fb2ZfY2ggPT0gMCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiwgTWluaW11bSBudW1iZXIgb2YgUFZDL1NWQyBjaGFubmVscyBpcyAxICFcbiIKLQkJCQkgIiVzOiBQbGVhc2Ugc2V0IHRoZSBMb3dlc3QvSGlnaGVzdCBQVkMvU1ZDIHZhbHVlcyAhXG4iLAotCQkJCSBjYXJkLT5kZXZuYW1lLGNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gLUVDSFJORzsKLQl9Ci0JCi0JdS5jZmcubG9QVkMgPSBjYXJkLT51LngubG9fcHZjOwotCXUuY2ZnLmhpUFZDID0gY2FyZC0+dS54LmhpX3B2YzsKLQl1LmNmZy5sb1R3b1dheVNWQyA9IGNhcmQtPnUueC5sb19zdmM7Ci0JdS5jZmcuaGlUd29XYXlTVkMgPSBjYXJkLT51LnguaGlfc3ZjOwotCi0JaWYgKGNvbmYtPnUueDI1LmhkbGNfd2luZG93KQotCQl1LmNmZy5oZGxjV2luZG93ID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5oZGxjX3dpbmRvdywgNyk7Ci0JaWYgKGNvbmYtPnUueDI1LnBrdF93aW5kb3cpCi0JCXUuY2ZnLnBrdFdpbmRvdyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUucGt0X3dpbmRvdywgNyk7Ci0KLQlpZiAoY29uZi0+dS54MjUudDEpCi0JCXUuY2ZnLnQxID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50MSwgMzApOwotCWlmIChjb25mLT51LngyNS50MikKLQkJdS5jZmcudDIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQyLCAyOSk7Ci0JaWYgKGNvbmYtPnUueDI1LnQ0KQotCQl1LmNmZy50NCA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDQsIDI0MCk7Ci0JaWYgKGNvbmYtPnUueDI1Lm4yKQotCQl1LmNmZy5uMiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUubjIsIDMwKTsKLQotCWlmIChjb25mLT51LngyNS50MTBfdDIwKQotCQl1LmNmZy50MTB0MjAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQxMF90MjAsMjU1KTsKLQlpZiAoY29uZi0+dS54MjUudDExX3QyMSkKLQkJdS5jZmcudDExdDIxID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50MTFfdDIxLDI1NSk7Ci0JaWYgKGNvbmYtPnUueDI1LnQxMl90MjIpCi0JCXUuY2ZnLnQxMnQyMiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDEyX3QyMiwyNTUpOwotCWlmIChjb25mLT51LngyNS50MTNfdDIzKQkKLQkJdS5jZmcudDEzdDIzID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50MTNfdDIzLDI1NSk7Ci0JaWYgKGNvbmYtPnUueDI1LnQxNl90MjYpCi0JCXUuY2ZnLnQxNnQyNiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDE2X3QyNiwgMjU1KTsKLQlpZiAoY29uZi0+dS54MjUudDI4KQotCQl1LmNmZy50MjggPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQyOCwgMjU1KTsKLQotCWlmIChjb25mLT51LngyNS5yMTBfcjIwKQotCQl1LmNmZy5yMTByMjAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnIxMF9yMjAsMjUwKTsKLQlpZiAoY29uZi0+dS54MjUucjEyX3IyMikKLQkJdS5jZmcucjEycjIyID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5yMTJfcjIyLDI1MCk7Ci0JaWYgKGNvbmYtPnUueDI1LnIxM19yMjMpCi0JCXUuY2ZnLnIxM3IyMyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUucjEzX3IyMywyNTApOwotCi0KLQlpZiAoY29uZi0+dS54MjUuY2NpdHRfY29tcGF0KQotCQl1LmNmZy5jY2l0dENvbXBhdCA9IGNvbmYtPnUueDI1LmNjaXR0X2NvbXBhdDsKLQotCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLwotCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJaWYgKGhkbGNfY29uZmlndXJlKGNhcmQsICZ1LmNmZykgIT0gQ01EX09LKQotCQkJcmV0dXJuIC1FSU87Ci0JfWVsc2V7Ci0JCWlmICh4MjVfY29uZmlndXJlKGNhcmQsICZ1LmNmZykgIT0gQ01EX09LKQotCQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKCh4MjVfY2xvc2VfaGRsYyhjYXJkKSAhPSBDTURfT0spIHx8CQkvKiBjbG9zZSBIRExDIGxpbmsgKi8KLQkgICAgKHgyNV9zZXRfZHRyKGNhcmQsIDApICE9IENNRF9PSykpCQkvKiBkcm9wIERUUiAqLwotCQlyZXR1cm4gLUVJTzsKLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIGFkYXB0ZXIgZGF0YSBzcGFjZSAqLwotCWNhcmQtPndhbmRldi5icHMJPSBjb25mLT5icHM7Ci0JY2FyZC0+d2FuZGV2LmludGVyZmFjZQk9IGNvbmYtPmludGVyZmFjZTsKLQljYXJkLT53YW5kZXYuY2xvY2tpbmcJPSBjb25mLT5jbG9ja2luZzsKLQljYXJkLT53YW5kZXYuc3RhdGlvbgk9IGNvbmYtPnN0YXRpb247Ci0JY2FyZC0+aXNyCQk9ICZ3cHhfaXNyOwotCWNhcmQtPnBvbGwJCT0gTlVMTDsgLy8md3B4X3BvbGw7Ci0JY2FyZC0+ZGlzYWJsZV9jb21tCT0gJmRpc2FibGVfY29tbTsKLQljYXJkLT5leGVjCQk9ICZ3cHhfZXhlYzsKLQljYXJkLT53YW5kZXYudXBkYXRlCT0gJnVwZGF0ZTsKLQljYXJkLT53YW5kZXYubmV3X2lmCT0gJm5ld19pZjsKLQljYXJkLT53YW5kZXYuZGVsX2lmCT0gJmRlbF9pZjsKLQotCS8qIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gY2Fubm90IGV4aXQgd2l0aCBhbiBlcnJvcgotCSAqICAgICAgICAgIGFmdGVyIHRoZSBjaGFuZ2Ugb2Ygc3RhdGUgKi8KLQljYXJkLT53YW5kZXYuc3RhdGUJPSBXQU5fRElTQ09OTkVDVEVEOwotCQotCWNhcmQtPndhbmRldi5lbmFibGVfdHhfaW50ID0gMDsKLQljYXJkLT5pcnFfZGlzX2lmX3NlbmRfY291bnQgPSAwOwotICAgICAgICBjYXJkLT5pcnFfZGlzX3BvbGxfY291bnQgPSAwOwotCWNhcmQtPnUueC50eF9kZXYgPSBOVUxMOwotCWNhcmQtPnUueC5ub19kZXYgPSAwOwotCi0KLQkvKiBDb25maWd1cmUgZm9yIFM1MTQgUENJIENhcmQgKi8KLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkJY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyA9IAotCQkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikKLQkJCQkoY2FyZC0+aHcuZHBtYmFzZSArIFgyNV9NQl9WRUNUT1IrIFgyNV9NSVNDX0hETENfQklUUyk7Ci0JfWVsc2V7Ci0JCWNhcmQtPnUueC5oZGxjX2J1Zl9zdGF0dXMgPSAKLQkJCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGNhcmQtPmh3LmRwbWJhc2UgKyBYMjVfTUlTQ19IRExDX0JJVFMpOyAKLQl9Ci0KLQljYXJkLT51LngucG9sbF9kZXZpY2U9TlVMTDsKLQljYXJkLT53YW5kZXYudWRwX3BvcnQgPSBjb25mLT51ZHBfcG9ydDsKLQotCS8qIEVuYWJsZSBvciBkaXNhYmxlIGNhbGwgc2V0dXAgbG9nZ2luZyAqLwotCWlmIChjb25mLT51LngyNS5sb2dnaW5nID09IFdBTk9QVF9ZRVMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRW5hYmxpbmcgQ2FsbCBMb2dnaW5nLlxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQljYXJkLT51LngubG9nZ2luZyA9IDE7Ci0JfWVsc2V7CQotCQljYXJkLT51LngubG9nZ2luZyA9IDA7Ci0JfQotCi0JLyogRW5hYmxlIG9yIGRpc2FibGUgbW9kZW0gc3RhdHVzIHJlcG9ydGluZyAqLwotCWlmIChjb25mLT51LngyNS5vb2Jfb25fbW9kZW0gPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbmFibGluZyBPT0Igb24gTW9kZW0gY2hhbmdlLlxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQljYXJkLT51Lngub29iX29uX21vZGVtID0gMTsKLQl9ZWxzZXsKLQkJY2FyZC0+dS54Lm9vYl9vbl9tb2RlbSA9IDA7Ci0JfQotCQotCWluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoY2FyZCk7CQotCi0JSU5JVF9XT1JLKCZjYXJkLT51LngueDI1X3BvbGxfd29yaywgKHZvaWQgKil3cHhfcG9sbCwgY2FyZCk7Ci0KLQlpbml0X3RpbWVyKCZjYXJkLT51LngueDI1X3RpbWVyKTsKLQljYXJkLT51LngueDI1X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljYXJkOwotCWNhcmQtPnUueC54MjVfdGltZXIuZnVuY3Rpb24gPSB4MjVfdGltZXJfcm91dGluZTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCVdBTiBEZXZpY2UgRHJpdmVyIEVudHJ5IFBvaW50cyAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJdXBkYXRlKCksICBVcGRhdGUgZGV2aWNlIHN0YXR1cyAmIHN0YXRpc3RpY3MuCi0gKgotICogUHVycG9zZToJVG8gcHJvdmlkZSBkZWJ1Z2dpbmcgYW5kIHN0YXRpdGljYWwKLSAqICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0byB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0uCi0gKiAgICAgICAgICAgICAgL3Byb2MvbmV0L3dhbnJvdXRlci93YW5waXBlIwotICogICAgICAgICAgICAgIAkKLSAqIFJhdGlvbmFsZToJVGhlIC9wcm9jIGZpbGUgc3lzdGVtIGlzIHVzZWQgdG8gY29sbGVjdAotICogICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBrZXJuZWwgYW5kIGRyaXZlcnMuCi0gKiAgICAgICAgICAgICAgVXNpbmcgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIHRoZSB1c2VyCi0gKiAgICAgICAgICAgICAgY2FuIHNlZSBleGFjdGx5IHdoYXQgdGhlIHNhbmdvbWEgZHJpdmVycyBhcmUKLSAqICAgICAgICAgICAgICBkb2luZy4gQW5kIGluIHdoYXQgc3RhdGUgdGhleSBhcmUgaW4uIAotICogICAgICAgICAgICAgICAgCi0gKiBEZXNjcmlwdGlvbjogQ29sbGVjdCBhbGwgZHJpdmVyIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uCi0gKiAgICAgICAgICAgICAgYW5kIHBhc3MgaXQgdG8gdGhlIHRvcCBsYXl3ZXIuIAotICoJCQotICoJCVNpbmNlIHdlIGhhdmUgdG8gZXhlY3V0ZSBhIGRlYnVnZ2luZyBjb21tYW5kLCAKLSAqICAgICAgICAgICAgICB0byBvYnRhaW4gZmlybXdhcmUgc3RhdGl0aWNzLCB3ZSB0cmlnZ2VyIGEgCi0gKiAgICAgICAgICAgICAgVVBEQVRFIGZ1bmN0aW9uIHdpdGhpbiB0aGUgdGltZXIgaW50ZXJydHVwLgotICogICAgICAgICAgICAgIFdlIHdhaXQgdW50aWwgdGhlIHRpbWVyIHVwZGF0ZSBpcyBjb21wbGV0ZS4KLSAqICAgICAgICAgICAgICBPbmNlIGNvbXBsZXRlIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgcmV0dXJuCi0gKiAgICAgICAgICAgICAgY29kZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwuCi0gKiAgICAgICAgICAgICAgCi0gKiBDYWxsZWQgYnk6CWRldmljZV9zdGF0KCkgaW4gd2FubWFpbi5jCi0gKgotICogQXNzdW1wdGlvbnM6CQotICoKLSAqIFdhcm5pbmdzOglUaGlzIGZ1bmN0aW9uIHdpbGwgZGVncmFkZSB0aGUgcGVyZm9ybWFuY2UKLSAqICAgICAgICAgICAgICBvZiB0aGUgcm91dGVyLCBzaW5jZSBpdCB1c2VzIHRoZSBtYWlsYm94LiAKLSAqCi0gKiBSZXR1cm46IAkwIAlPSwotICogCQk8MAlGYWlsZWQgKG9yIGJ1c3kpLgotICovCi0KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpCi17Ci0Jdm9sYXRpbGUgc2RsYV90KiBjYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmd2FuZGV2LT5jcml0aWNhbCkpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JaWYgKCF3YW5kZXYtPmRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JCi0JY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQlzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotCXN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9USU1FUjsKLQl0aW1lb3V0ID0gamlmZmllczsJCi0KLQlmb3IgKDs7KXsKLQkJaWYgKCEoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VQREFURSkpewkKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQgKyAxKkhaKSl7Ci0JCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE5hbWU6CW5ld19pZgotICoKLSAqIFB1cnBvc2U6CVRvIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHJlc291cmNlcyBmb3IgYSAKLSAqICAgICAgICAgICAgICBuZXcgbG9naWNhbCBjaGFubmVsLiAgCi0gKiAKLSAqIFJhdGlvbmFsZToJQSBuZXcgY2hhbm5lbCBjYW4gYmUgYWRkZWQgZHluYW1pY2FsbHkgdmlhCi0gKiAgICAgICAgICAgICAgaW9jdGwgY2FsbC4KLSAqICAgICAgICAgICAgICAgIAotICogRGVzY3JpcHRpb246CUFsbG9jYXRlIGEgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSwgeDI1X2NoYW5uZWxfdC4KLSAqCQlQYXJzZSB0aGUgdXNlciBpbnRlcmZhY2Ugb3B0aW9ucyBmcm9tIHdhbnBpcGUjLmNvbmYgCi0gKgkJY29uZmlndXJhdGlvbiBmaWxlLiAKLSAqCQlCaW5kIHRoZSBwcml2YXRlIGFyZSBpbnRvIHRoZSBuZXR3b3JrIGRldmljZSBwcml2YXRlCi0gKiAgICAgICAgICAgICAgYXJlYSBwb2ludGVyIChkZXYtPnByaXYpLgotICoJCVByZXBhcmUgdGhlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0cmF0aW9uLgotICoKLSAqIENhbGxlZCBieToJUk9VVEVSX0lGTkVXIElvY3RsIGNhbGwsIGZyb20gd2Fucm91dGVyX2lvY3RsKCkgCi0gKiAgICAgICAgICAgICAgKHdhbm1haW4uYykKLSAqCi0gKiBBc3N1bXB0aW9uczogTm9uZQotICoKLSAqIFdhcm5pbmdzOglOb25lCi0gKgotICogUmV0dXJuOiAJMCAJT2sKLSAqCQk8MCAJRmFpbGVkIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQl4MjVfY2hhbm5lbF90KiBjaGFuOwotCWludCBlcnIgPSAwOwotCi0JaWYgKChjb25mLT5uYW1lWzBdID09ICdcMCcpIHx8IChzdHJsZW4oY29uZi0+bmFtZSkgPiBXQU5fSUZOQU1FX1NaKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGludGVyZmFjZSBuYW1lIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZihjYXJkLT53YW5kZXYubmV3X2lmX2NudCsrID4gMCAmJiBjYXJkLT51LnguTEFQQl9oZGxjKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvcjogUnVubmluZyBMQVBCIEhETEMgTW9kZSAhXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IE1heGltdW0gbnVtYmVyIG9mIG5ldHdvcmsgaW50ZXJmYWNlcyBtdXN0IGJlIG9uZSAhXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQotCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLwotCWNoYW4gPSBrbWFsbG9jKHNpemVvZih4MjVfY2hhbm5lbF90KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGNoYW4gPT0gTlVMTCl7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQkKLQltZW1zZXQoY2hhbiwgMCwgc2l6ZW9mKHgyNV9jaGFubmVsX3QpKTsKLQotCS8qIEJ1ZyBGaXg6IFNlZyBFcnIgb24gUFZDIHN0YXJ0dXAKLQkgKiBJdCBtdXN0IGJlIGhlcmUgc2luY2UgYmluZF9sY25fdG9fZGV2IGV4cGVjdHMgCi0JICogaXQgYmVsbG93ICovCi0JZGV2LT5wcml2ID0gY2hhbjsKLQkKLQlzdHJjcHkoY2hhbi0+bmFtZSwgY29uZi0+bmFtZSk7Ci0JY2hhbi0+Y2FyZCA9IGNhcmQ7Ci0JY2hhbi0+ZGV2ID0gZGV2OwotCWNoYW4tPmNvbW1vbi5zayA9IE5VTEw7Ci0JY2hhbi0+Y29tbW9uLmZ1bmMgPSBOVUxMOwotCWNoYW4tPmNvbW1vbi5yd19iaW5kID0gMDsKLQljaGFuLT50eF9za2IgPSBjaGFuLT5yeF9za2IgPSBOVUxMOwotCi0JLyogdmVyaWZ5IG1lZGlhIGFkZHJlc3MgKi8KLQlpZiAoY29uZi0+YWRkclswXSA9PSAnQCcpewkJLyogU1ZDICovCi0JCWNoYW4tPmNvbW1vbi5zdmMgPSAxOwotCQlzdHJuY3B5KGNoYW4tPmFkZHIsICZjb25mLT5hZGRyWzFdLCBXQU5fQUREUkVTU19TWik7Ci0KLQkJLyogU2V0IGNoYW5uZWwgdGltZW91dHMgKGRlZmF1bHQgaWYgbm90IHNwZWNpZmllZCkgKi8KLQkJY2hhbi0+aWRsZV90aW1lb3V0ID0gKGNvbmYtPmlkbGVfdGltZW91dCkgPyAKLQkJCQkJY29uZi0+aWRsZV90aW1lb3V0IDogOTA7Ci0JCWNoYW4tPmhvbGRfdGltZW91dCA9IChjb25mLT5ob2xkX3RpbWVvdXQpID8gCi0JCQkJCWNvbmYtPmhvbGRfdGltZW91dCA6IDEwOwotCi0JfWVsc2UgaWYgKGlzZGlnaXQoY29uZi0+YWRkclswXSkpewkvKiBQVkMgKi8KLQkJaW50IGxjbiA9IGRlY190b191aW50KGNvbmYtPmFkZHIsIDApOwotCi0JCWlmICgobGNuID49IGNhcmQtPnUueC5sb19wdmMpICYmIChsY24gPD0gY2FyZC0+dS54LmhpX3B2YykpewotCQkJYmluZF9sY25fdG9fZGV2IChjYXJkLCBkZXYsIGxjbik7Ci0JCX1lbHNlewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJIiVzOiBQVkMgJXUgaXMgb3V0IG9mIHJhbmdlIG9uIGludGVyZmFjZSAlcyFcbiIsCi0JCQkJd2FuZGV2LT5uYW1lLCBsY24sIGNoYW4tPm5hbWUpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJfQotCX1lbHNlewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSIlczogaW52YWxpZCBtZWRpYSBhZGRyZXNzIG9uIGludGVyZmFjZSAlcyFcbiIsCi0JCQl3YW5kZXYtPm5hbWUsIGNoYW4tPm5hbWUpOwotCQllcnIgPSAtRUlOVkFMOwotCX0KLQotCWlmKHN0cmNtcChjb25mLT51c2VkYnksICJXQU5QSVBFIikgPT0gMCl7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ1bm5pbmcgaW4gV0FOUElQRSBtb2RlICVzXG4iLAotCQkJd2FuZGV2LT5uYW1lLCBjaGFuLT5uYW1lKTsKLSAgICAgICAgICAgICAgICBjaGFuLT5jb21tb24udXNlZGJ5ID0gV0FOUElQRTsKLQkJY2hhbi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0KLSAgICAgICAgfWVsc2UgaWYoc3RyY21wKGNvbmYtPnVzZWRieSwgIkFQSSIpID09IDApewotCQljaGFuLT5jb21tb24udXNlZGJ5ID0gQVBJOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIEFQSSBtb2RlICVzXG4iLAotCQkJd2FuZGV2LT5uYW1lLCBjaGFuLT5uYW1lKTsKLQkJY2hhbi0+cHJvdG9jb2wgPSBodG9ucyhYMjVfUFJPVCk7Ci0JfQotCi0KLQlpZiAoZXJyKXsKLQkJa2ZyZWUoY2hhbik7Ci0JCWRldi0+cHJpdiA9IE5VTEw7Ci0JCXJldHVybiBlcnI7Ci0JfQotCQotCWNoYW4tPmVuYWJsZV9JUFggPSBjb25mLT5lbmFibGVfSVBYOwotCQotCWlmIChjaGFuLT5lbmFibGVfSVBYKQotCQljaGFuLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQWCk7Ci0JCi0JaWYgKGNvbmYtPm5ldHdvcmtfbnVtYmVyKQotCQljaGFuLT5uZXR3b3JrX251bWJlciA9IGNvbmYtPm5ldHdvcmtfbnVtYmVyOwotCWVsc2UKLQkJY2hhbi0+bmV0d29ya19udW1iZXIgPSAweERFQURCRUVGOwotCi0JLyogcHJlcGFyZSBuZXR3b3JrIGRldmljZSBkYXRhIHNwYWNlIGZvciByZWdpc3RyYXRpb24gKi8KLQlzdHJjcHkoZGV2LT5uYW1lLGNoYW4tPm5hbWUpOwotCi0JZGV2LT5pbml0ID0gJmlmX2luaXQ7Ci0KLQlpbml0X3gyNV9jaGFubmVsX3N0cnVjdChjaGFuKTsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE5hbWU6CWRlbF9pZigpLCAgUmVtb3ZlIGEgbG9naWNhbCBjaGFubmVsLgkgCi0gKgotICogUHVycG9zZToJVG8gZHluYW1pY2FsbHkgcmVtb3ZlIGEgbG9naWNhbCBjaGFubmVsLgotICogCi0gKiBSYXRpb25hbGU6CUVhY2ggbG9naWNhbCBjaGFubmVsIHNob3VsZCBiZSBkeW5hbWljYWxseQotICogICAgICAgICAgICAgIHJlbW92YWJsZS4gVGhpcyBmdW5jdGluIGlzIGNhbGxlZCBieSBhbiAKLSAqICAgICAgICAgICAgICBJT0NUTF9JRkRFTCBpb2N0bCBjYWxsIG9yIHNodXRkb3duKCkuIAotICogICAgICAgICAgICAgICAgCi0gKiBEZXNjcmlwdGlvbjogRG8gbm90aGluZy4KLSAqCi0gKiBDYWxsZWQgYnk6CUlPQ1RMX0lGREVMIDogd2Fucm91dGVyX2lvY3RsKCkgZnJvbSB3YW5tYWluLmMKLSAqICAgICAgICAgICAgICBzaHV0ZG93bigpIGZyb20gc2RsYW1haW4uYwotICoKLSAqIEFzc3VtcHRpb25zOiAKLSAqCi0gKiBXYXJuaW5nczoKLSAqCi0gKiBSZXR1cm46IAkwIE9rLiBWb2lkIGZ1bmN0aW9uLgotICovCi0KLS8vRklYTUUgRGVsIElGIFNob3VsZCBiZSB0YWtlbiBvdXQgbm93LgotCi1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOgl3cHhfZXhlYwotICoKLSAqIERlc2NyaXB0aW9uOglFeGVjdXRlIGFkYXB0ZXIgaW50ZXJmYWNlIGNvbW1hbmQuCi0gKiAJCVRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBkaXNzYWJsZWQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB3cHhfZXhlYyAoc3RydWN0IHNkbGEqIGNhcmQsIHZvaWQqIHVfY21kLCB2b2lkKiB1X2RhdGEpCi17Ci0gICAgICAgIHJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJZGlzYWJsZV9jb21tCQotICoKLSAqIERlc2NyaXB0aW9uOglEaXNhYmxlIGNvbW11bmljYXRpb25zIGR1cmluZyBzaHV0ZG93bi4KLSAqICAgICAgICAgICAgICBEb250IGNoZWNrIHJldHVybiBjb2RlIGJlY2F1c2UgdGhlcmUgaXMgCi0gKiAgICAgICAgICAgICAgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQuICAKLSAqCi0gKiBXYXJuaW5nOglEZXYgYW5kIHByaXZhdGUgYXJlYXMgYXJlIGdvbmUgYXQgdGhpcyBwb2ludC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2NvbW0oc2RsYV90KiBjYXJkKQotewotCWRpc2FibGVfY29tbV9zaHV0ZG93bihjYXJkKTsKLQlkZWxfdGltZXIoJmNhcmQtPnUueC54MjVfdGltZXIpOwotCXJldHVybjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoJTmV0d29yayBEZXZpY2UgSW50ZXJmYWNlIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJaWZfaW5pdCgpLCAgIE5ldG93cmsgSW50ZXJmYWNlIEluaXRpYWxpemF0aW9uIAkgCi0gKgotICogUHVycG9zZToJVG8gaW5pdGlhbGl6ZSBhIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUuCi0gKiAKLSAqIFJhdGlvbmFsZToJRHVyaW5nIG5ldHdvcmsgaW50ZXJmYWNlIHN0YXJ0dXAsIHRoZSBpZl9pbml0Ci0gKiAgICAgICAgICAgICAgaXMgY2FsbGVkIGJ5IHRoZSBrZXJuZWwgdG8gaW5pdGlhbGl6ZSB0aGUKLSAqICAgICAgICAgICAgICBuZXRvd3JrIGRldmljZSBzdHJ1Y3R1cmUuICBUaHVzIGEgZHJpdmVyCi0gKiAgICAgICAgICAgICAgY2FuIGN1c3RvbXplIGEgbmV0d29yayBkZXZpY2UuIAotICogICAgICAgICAgICAgICAgCi0gKiBEZXNjcmlwdGlvbjoJSW5pdGlhbGl6ZSB0aGUgbmV0b3dyayBkZXZpY2UgY2FsbCBiYWNrCi0gKiAgICAgICAgICAgICAgcm91dGluZXMuICBUaGlzIGlzIHdoZXJlIHdlIHRlbGwgdGhlIGtlcm5lbAotICogICAgICAgICAgICAgIHdoaWNoIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGl0IHdhbnRzIHRvIHNlbmQKLSAqICAgICAgICAgICAgICB2aWEgb3VyIGludGVyZmFjZS4gCi0gKgkJRnVydGhlcm1vcmUsIHdlIGluaXRpYWxpemUgdGhlIGRldmljZSBmbGFncywgCi0gKiAgICAgICAgICAgICAgTVRVIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBib2FyZC4KLSAqCi0gKiBDYWxsZWQgYnk6CUtlcm5lbCAoL3Vzci9zcmMvbGludXgvbmV0L2NvcmUvZGV2LmMpCi0gKiAJCShkZXYtPmluaXQoKSkKLSAqCi0gKiBBc3N1bXB0aW9uczogTm9uZQotICoJCi0gKiBXYXJuaW5nczoJTm9uZQotICoKLSAqIFJldHVybjogCTAgCU9rIDogVm9pZCBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCXN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYgPSAmY2FyZC0+d2FuZGV2OwotCi0JLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwotCWRldi0+b3BlbgkJPSAmaWZfb3BlbjsKLQlkZXYtPnN0b3AJCT0gJmlmX2Nsb3NlOwotCWRldi0+aGFyZF9oZWFkZXIJPSAmaWZfaGVhZGVyOwotCWRldi0+cmVidWlsZF9oZWFkZXIJPSAmaWZfcmVidWlsZF9oZHI7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSAmaWZfc2VuZDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmaWZfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0CQk9ICZpZl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwotCi0JLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCi0JZGV2LT50eXBlCQk9IEFSUEhSRF9QUFA7CQkvKiBBUlAgaC93IHR5cGUgKi8KLQlkZXYtPmZsYWdzCQl8PSBJRkZfUE9JTlRPUE9JTlQ7Ci0JZGV2LT5mbGFncwkJfD0gSUZGX05PQVJQOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJZGV2LT5tdHUJPSBYMjVfQ0hBTl9NVFUrc2l6ZW9mKHgyNWFwaV9oZHJfdCk7Ci0JfWVsc2V7Ci0JCWRldi0+bXR1CT0gY2FyZC0+d2FuZGV2Lm10dTsgCQotCX0KLQkKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IFgyNV9IUkRIRFJfU1o7IC8qIG1lZGlhIGhlYWRlciBsZW5ndGggKi8KLQlkZXYtPmFkZHJfbGVuCQk9IDI7CQkvKiBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLwotCQotCWlmICghY2hhbi0+Y29tbW9uLnN2Yyl7Ci0JCSoodW5zaWduZWQgc2hvcnQqKWRldi0+ZGV2X2FkZHIgPSBodG9ucyhjaGFuLT5jb21tb24ubGNuKTsKLQl9Ci0JCi0JLyogSW5pdGlhbGl6ZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIChqdXN0IGZvciByZWZlcmVuY2UpICovCi0JZGV2LT5pcnEJPSB3YW5kZXYtPmlycTsKLQlkZXYtPmRtYQk9IHdhbmRldi0+ZG1hOwotCWRldi0+YmFzZV9hZGRyCT0gd2FuZGV2LT5pb3BvcnQ7Ci0JZGV2LT5tZW1fc3RhcnQJPSAodW5zaWduZWQgbG9uZyl3YW5kZXYtPm1hZGRyOwotCWRldi0+bWVtX2VuZAk9IHdhbmRldi0+bWFkZHIgKyB3YW5kZXYtPm1zaXplIC0gMTsKLQotICAgICAgICAvKiBTZXQgdHJhbnNtaXQgYnVmZmVyIHF1ZXVlIGxlbmd0aCAqLwotICAgICAgICBkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0KLQkvKiBGSVhNRSBXaHkgYXJlIHdlIGRvaW5nIHRoaXMgKi8KLQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJaWZfb3BlbigpLCAgIE9wZW4vQnJpbmcgdXAgdGhlIE5ldG93cmsgSW50ZXJmYWNlIAotICoKLSAqIFB1cnBvc2U6CVRvIGJyaW5nIHVwIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiAKLSAqIFJhdGlvbmFsZToJCi0gKiAgICAgICAgICAgICAgICAKLSAqIERlc2NyaXB0aW9uOglPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogCQlvIHByZXZlbnQgbW9kdWxlIGZyb20gdW5sb2FkaW5nIGJ5IGluY3JlbWVudGluZyB1c2UgY291bnQKLSAqIAkJbyBpZiBsaW5rIGlzIGRpc2Nvbm5lY3RlZCB0aGVuIGluaXRpYXRlIGNvbm5lY3Rpb24KLSAqCi0gKiBDYWxsZWQgYnk6CUtlcm5lbCAoL3Vzci9zcmMvbGludXgvbmV0L2NvcmUvZGV2LmMpCi0gKiAJCShkZXYtPm9wZW4oKSkKLSAqCi0gKiBBc3N1bXB0aW9uczogTm9uZQotICoJCi0gKiBXYXJuaW5nczoJTm9uZQotICoKLSAqIFJldHVybjogCTAgCU9rCi0gKiAJCTwwIAlGYWlsdXJlOiBJbnRlcmZhY2Ugd2lsbCBub3QgY29tZSB1cC4KLSAqLwotCi1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0JCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWNoYW4tPnRxX3dvcmtpbmcgPSAwOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgd29ya3F1ZXVlICovCi0JSU5JVF9XT1JLKCZjaGFuLT5jb21tb24ud2FucGlwZV93b3JrLCAodm9pZCAqKXgyNWFwaV9iaCwgZGV2KTsKLQotCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIEJIIGNpcmN1bGFyIGJ1ZmZlciAqLwotCS8qIEFkZCAxIHRvIE1BWF9CSF9CVUZGIHNvIHdlIGRvbid0IGhhdmUgdGVzdCB3aXRoIChNQVhfQkhfQlVGRi0xKSAqLwotCWNoYW4tPmJoX2hlYWQgPSBrbWFsbG9jKChzaXplb2YoYmhfZGF0YV90KSooTUFYX0JIX0JVRkYrMSkpLEdGUF9BVE9NSUMpOwotCi0JaWYgKGNoYW4tPmJoX2hlYWQgPT0gTlVMTCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAhIEJIX0JVRkZFUlMgIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQotCQlyZXR1cm4gLUVOT0JVRlM7Ci0JfQotCW1lbXNldChjaGFuLT5iaF9oZWFkLDAsKHNpemVvZihiaF9kYXRhX3QpKihNQVhfQkhfQlVGRisxKSkpOwotCWF0b21pY19zZXQoJmNoYW4tPmJoX2J1ZmZfdXNlZCwgMCk7Ci0KLQkvKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBpbnRlcmZhY2VzICovCi0JKytjYXJkLT51Lngubm9fZGV2OwotCQotCXdhbnBpcGVfb3BlbihjYXJkKTsKLQotCS8qIExBUEIgcHJvdG9jb2wgb25seSB1c2VzIG9uZSBpbnRlcmZhY2UsIHRodXMKLQkgKiBzdGFydCB0aGUgcHJvdG9jb2wgYWZ0ZXIgaXQgY29tZXMgdXAuICovCi0JaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQlpZiAoY2FyZC0+b3Blbl9jbnQgPT0gMSl7Ci0JCQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQkJCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQkJeDI1X3NldF9pbnRyX21vZGUoY2FyZCwgSU5UUl9PTl9USU1FUik7IAotCQkJc3RhdHVzLT5pbWFzayAmPSB+SU5UUl9PTl9USU1FUjsKLQkJCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCX0KLQl9ZWxzZXsKLQkJLyogWDI1IGNhbiBoYXZlIG11bHRpcGxlIGludGVyZmFjZXMgdGh1cywgc3RhcnQgdGhlIAotCQkgKiBwcm90b2NvbCBvbmNlIGFsbCBpbnRlcmZhY2VzIGFyZSB1cCAqLwotCi0JCS8vRklYTUU6IFRoZXJlIGlzIGEgYnVnIGhlcmUuIElmIGludGVyZmFjZSBpcwotCQkvL2Jyb3VnaHQgZG93biBhbmQgdXAsIGl0IHdpbGwgdHJ5IHRvIGVuYWJsZSBjb21tLgotCQlpZiAoY2FyZC0+b3Blbl9jbnQgPT0gY2FyZC0+dS54Lm51bV9vZl9jaCl7Ci0KLQkJCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQkJY29ubmVjdChjYXJkKTsKLQkJCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0KLQkJCW1vZF90aW1lcigmY2FyZC0+dS54LngyNV90aW1lciwgamlmZmllcyArIEhaKTsKLQkJfQotCX0KLQkvKiBEZXZpY2UgaXMgbm90IHVwIHVudGlsIHRoZSB3ZSBhcmUgaW4gY29ubmVjdGVkIHN0YXRlICovCi0JZG9fZ2V0dGltZW9mZGF5KCAmdHYgKTsKLQljaGFuLT5yb3V0ZXJfc3RhcnRfdGltZSA9IHR2LnR2X3NlYzsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOglpZl9jbG9zZSgpLCAgIENsb3NlL0JyaW5nIGRvd24gdGhlIE5ldG93cmsgSW50ZXJmYWNlIAotICoKLSAqIFB1cnBvc2U6CVRvIGJyaW5nIGRvd24gYSBuZXR3b3JrIGludGVyZmFjZS4KLSAqIAotICogUmF0aW9uYWxlOgkKLSAqICAgICAgICAgICAgICAgIAotICogRGVzY3JpcHRpb246CUNsb3NlIG5ldHdvcmsgaW50ZXJmYWNlLgotICogCQlvIGRlY3JlbWVudCB1c2UgbW9kdWxlIHVzZSBjb3VudAotICoKLSAqIENhbGxlZCBieToJS2VybmVsICgvdXNyL3NyYy9saW51eC9uZXQvY29yZS9kZXYuYykKLSAqIAkJKGRldi0+Y2xvc2UoKSkKLSAqCQlpZmNvbmZpZyA8bmFtZT4gZG93bjogd2lsbCB0cmlnZ2VyIHRoZSBrZXJuZWwKLSAqICAgICAgICAgICAgICB3aGljaCB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBBc3N1bXB0aW9uczogTm9uZQotICoJCi0gKiBXYXJuaW5nczoJTm9uZQotICoKLSAqIFJldHVybjogCTAgCU9rCi0gKiAJCTwwIAlGYWlsdXJlOiBJbnRlcmZhY2Ugd2lsbCBub3QgZXhpdCBwcm9wZXJseS4KLSAqLwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQkKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQlpZiAoKGNoYW4tPmNvbW1vbi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEKSB8fCAKLQkgICAgKGNoYW4tPmNvbW1vbi5zdGF0ZSA9PSBXQU5fQ09OTkVDVElORykpewotCQlTNTA4X1M1MTRfbG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQkJY2hhbl9kaXNjKGRldik7Ci0JCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JfQotCi0Jd2FucGlwZV9jbG9zZShjYXJkKTsKLQotCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCWlmIChjaGFuLT5iaF9oZWFkKXsKLQkJaW50IGk7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCi0JCWZvciAoaT0wOyBpPChNQVhfQkhfQlVGRisxKTsgaSsrKXsKLQkJCXNrYiA9ICgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbaV0pLT5za2I7Ci0JCQlpZiAoc2tiICE9IE5VTEwpewotICAgICAgICAgICAgICAgIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCX0KLQkJfQotCQlrZnJlZShjaGFuLT5iaF9oZWFkKTsKLQkJY2hhbi0+YmhfaGVhZD1OVUxMOwotCX0KLQlTNTA4X1M1MTRfdW5sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCi0JLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBjbG9zZSwgZGlzY29ubmVjdCBwaHlzaWNhbCBsaW5rICovCi0JaWYgKCFjYXJkLT5vcGVuX2NudCl7Ci0JCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQlkaXNjb25uZWN0KGNhcmQpOwotCQl4MjVfc2V0X2ludHJfbW9kZShjYXJkLCAwKTsKLQkJUzUwOF9TNTE0X3VubG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQl9Ci0JCi0JLyogRGVjcmVtZW50IHRoZSBudW1iZXIgb2YgaW50ZXJmYWNlcyAqLwotCS0tY2FyZC0+dS54Lm5vX2RldjsKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJQnVpbGQgbWVkaWEgaGVhZGVyLgotICogCW8gZW5jYXBzdWxhdGUgcGFja2V0IGFjY29yZGluZyB0byBlbmNhcHN1bGF0aW9uIHR5cGUuCi0gKgotICogCVRoZSB0cmljayBoZXJlIGlzIHRvIHB1dCBwYWNrZXQgdHlwZSAoRXRoZXJ0eXBlKSBpbnRvICdwcm90b2NvbCcgCi0gKiAgICAgIGZpZWxkIG9mIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGF0IHdlIGRvbid0IGZvcmdldCBpdC4gIAotICogICAgICBJZiBlbmNhcHN1bGF0aW9uIGZhaWxzLCBzZXQgc2tiLT5wcm90b2NvbCB0byAwIGFuZCBkaXNjYXJkIAotICogICAgICBwYWNrZXQgbGF0ZXIuCi0gKgotICogCVJldHVybjoJCW1lZGlhIGhlYWRlciBsZW5ndGguCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGlmX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIHZvaWQqIGRhZGRyLCB2b2lkKiBzYWRkciwKLQkJICAgICB1bnNpZ25lZCBsZW4pCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlpbnQgaGRyX2xlbiA9IGRldi0+aGFyZF9oZWFkZXJfbGVuOwotCQotCXNrYi0+cHJvdG9jb2wgPSBodG9ucyh0eXBlKTsKLQlpZiAoIWNoYW4tPnByb3RvY29sKXsKLQkJaGRyX2xlbiA9IHdhbnJvdXRlcl9lbmNhcHN1bGF0ZShza2IsIGRldiwgdHlwZSk7Ci0JCWlmIChoZHJfbGVuIDwgMCl7Ci0JCQloZHJfbGVuID0gMDsKLQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucygwKTsKLQkJfQotCX0KLQlyZXR1cm4gaGRyX2xlbjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlSZS1idWlsZCBtZWRpYSBoZWFkZXIuCi0gKgotICogCVJldHVybjoJCTEJcGh5c2ljYWwgYWRkcmVzcyByZXNvbHZlZC4KLSAqCQkJMAlwaHlzaWNhbCBhZGRyZXNzIG5vdCByZXNvbHZlZAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmKiBza2IpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OyAKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogcmVidWlsZF9oZWFkZXIoKSBjYWxsZWQgZm9yIGludGVyZmFjZSAlcyFcbiIsCi0JCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgdHJhbnNtaXQgdGltZW91dCBldmVudCBmcm9tIG5ldGlmIHdhdGNoZG9nCi0gKi8KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICAJeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0JLyogSWYgb3VyIGRldmljZSBzdGF5cyBidXN5IGZvciBhdCBsZWFzdCA1IHNlY29uZHMgdGhlbiB3ZSB3aWxsCi0JICoga2ljayBzdGFydCB0aGUgZGV2aWNlIGJ5IG1ha2luZyBkZXYtPnRidXN5ID0gMC4gIFdlIGV4cGVjdAotCSAqIHRoYXQgb3VyIGRldmljZSBuZXZlciBzdGF5cyBidXN5IG1vcmUgdGhhbiA1IHNlY29uZHMuIFNvIHRoaXMgICAgICAgICAgICAgICAgIAotCSAqIGlzIG9ubHkgdXNlZCBhcyBhIGxhc3QgcmVzb3J0LgotCSAqLwotCi0JKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF90YnVzeV90aW1lb3V0OwotCXByaW50ayAoS0VSTl9JTkZPICIlczogVHJhbnNtaXQgdGltZWQgb3V0IG9uICVzXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlTZW5kIGEgcGFja2V0IG9uIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiAJbyBzZXQgdGJ1c3kgZmxhZyAobWFya3Mgc3RhcnQgb2YgdGhlIHRyYW5zbWlzc2lvbikuCi0gKiAJbyBjaGVjayBsaW5rIHN0YXRlLiBJZiBsaW5rIGlzIG5vdCB1cCwgdGhlbiBkcm9wIHRoZSBwYWNrZXQuCi0gKiAJbyBjaGVjayBjaGFubmVsIHN0YXR1cy4gSWYgaXQncyBkb3duIHRoZW4gaW5pdGlhdGUgYSBjYWxsLgotICogCW8gcGFzcyBhIHBhY2tldCB0byBjb3JyZXNwb25kaW5nIFdBTiBkZXZpY2UuCi0gKiAJbyBmcmVlIHNvY2tldCBidWZmZXIKLSAqCi0gKiAJUmV0dXJuOgkwCWNvbXBsZXRlIChzb2NrZXQgYnVmZmVyIG11c3QgYmUgZnJlZWQpCi0gKgkJbm9uLTAJcGFja2V0IG1heSBiZSByZS10cmFuc21pdHRlZCAodGJ1c3kgbXVzdCBiZSBzZXQpCi0gKgotICogCU5vdGVzOgotICogCTEuIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZWl0aGVyIGJ5IHRoZSBwcm90b2NvbCBzdGFjayBvciBieSB0aGUgIm5ldAotICogICAgCWJvdHRvbSBoYWxmIiAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpLgotICogCTIuIFNldHRpbmcgdGJ1c3kgZmxhZyB3aWxsIGluaGliaXQgZnVydGhlciB0cmFuc21pdCByZXF1ZXN0cyBmcm9tIHRoZQotICogICAgCXByb3RvY29sIHN0YWNrIGFuZCBjYW4gYmUgdXNlZCBmb3IgZmxvdyBjb250cm9sIHdpdGggcHJvdG9jb2wgbGF5ZXIuCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0JaW50IHVkcF90eXBlOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzPTA7Ci0KLQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2VudHJ5OwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogTm8gbmVlZCB0byBjaGVjayBmcmFtZSBsZW5ndGgsIHNpbmNlIHNvY2tldCBjb2RlCi0gICAgICAgICAqIHdpbGwgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIHVzICovCi0KLQljaGFuLT50aWNrX2NvdW50ZXIgPSBqaWZmaWVzOwotCQotCS8qIENyaXRpY2FsIHJlZ2lvbiBzdGFydHMgaGVyZSAqLwotCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSGl0IGNyaXRpY2FsIGluIGlmX3NlbmQoKSEgJWx4XG4iLGNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCWdvdG8gaWZfc2VuZF9jcml0X2V4aXQ7Ci0JfQotCQotCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKHNrYiwgY2FyZCk7Ci0KLSAgICAgICAgaWYodWRwX3R5cGUgIT0gVURQX0lOVkFMSURfVFlQRSkgewotCi0gICAgICAgICAgICAgICAgaWYoc3RvcmVfdWRwX21nbXRfcGt0KHVkcF90eXBlLCBVRFBfUEtUX0ZSTV9TVEFDSywgY2FyZCwgZGV2LCBza2IsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuLT5jb21tb24ubGNuKSkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVElNRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWRwX3R5cGUgPT0gVURQX1hQSVBFX1RZUEUpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9QSVBFX3JlcXVlc3QrKzsKLQkJCX0KLSAgICAgICAgICAgICAgIAl9Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQlTNTA4X1M1MTRfdW5sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKXsKLQkJLy9GSVhNRTogVGhpcyBjaGVjayBkb2Vzbid0IG1ha2Ugc2Vuc2UgYW55IG1vcmUKLQkJaWYgKGNoYW4tPmNvbW1vbi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKXsKLQkJCWNoYW4tPnRyYW5zbWl0X2xlbmd0aD0wOwotCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRyaXZlcl9idXN5LDApOwotCQl9ZWxzZXsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCSsrY2FyZC0+dS54LnR4X2ludGVycnVwdHNfcGVuZGluZzsKLQkJICAgICAgICBzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVFhfRlJBTUU7Ci0JCQljbGVhcl9iaXQoU0VORF9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3dhbl9kaXNjb25uZWN0ZWQ7CQotCQkKLQl9ZWxzZSBpZiAoIGNoYW4tPnByb3RvY29sICYmIChjaGFuLT5wcm90b2NvbCAhPSBza2ItPnByb3RvY29sKSl7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlczogdW5zdXBwb3J0ZWQgRXRoZXJ0eXBlIDB4JTA0WCBvbiBpbnRlcmZhY2UgJXMhXG4iLAotCQkJY2hhbi0+bmFtZSwgaHRvbnMoc2tiLT5wcm90b2NvbCksIGRldi0+bmFtZSk7Ci0JCQotCQlwcmludGsoS0VSTl9JTkZPICJQUk9UTyAlWG4iLCBodG9ucyhjaGFuLT5wcm90b2NvbCkpOwotCQkrK2NoYW4tPmlmc3RhdHMudHhfZXJyb3JzOwotCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9wcm90b2NvbF9lcnJvcjsKLQkJCi0JfWVsc2Ugc3dpdGNoIChjaGFuLT5jb21tb24uc3RhdGUpewotCi0JCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQkJCS8qIFRyeSB0byBlc3RhYmxpc2ggY29ubmVjdGlvbi4gSWYgc3VjY2VkZWQsIHRoZW4gc3RhcnQKLQkJCSAqIHRyYW5zbWlzc2lvbiwgZWxzZSBkcm9wIGEgcGFja2V0LgotCQkJICovCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9ZWxzZXsKLQkJCQlpZiAoY2hhbl9jb25uZWN0KGRldikgIT0gMCl7Ci0JCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQlpZiggc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFgpKSB7Ci0JCQkJaWYoY2hhbi0+ZW5hYmxlX0lQWCkgewotCQkJCQlzd2l0Y2hfbmV0X251bWJlcnMoIHNrYi0+ZGF0YSwgCi0JCQkJCQljaGFuLT5uZXR3b3JrX251bWJlciwgMCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfcHJvdG9jb2xfZXJyb3I7Ci0JCQkJCWdvdG8gaWZfc2VuZF9jcml0X2V4aXQ7Ci0JCQkJfQotCQkJfQotCQkJLyogV2UgbmV2ZXIgZHJvcCBoZXJlLCBpZiBjYW5ub3Qgc2VuZCB0aGFuLCBjb3B5Ci0JICAgICAgICAgICAgICAgICAqIGEgcGFja2V0IGludG8gYSB0cmFuc21pdCBidWZmZXIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkJCWNoYW5fc2VuZChkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIDApOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwkKLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQlicmVhazsKLQl9Ci0KLQotaWZfc2VuZF9jcml0X2V4aXQ6Ci0JCi0gICAgICAgCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0dXAgc28gdGhhdCBhIGZyYW1lIGNhbiBiZSB0cmFuc21pdHRlZCBvbiB0aGUgb2NjdXJyZW5jZSBvZiBhIHRyYW5zbWl0Ci0gKiBpbnRlcnJ1cHQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHZvaWQqIGJ1ZiwKLQkJCQkgICAgICAgdW5zaWduZWQgbGVuKQotewotICAgICAgICB4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotICAgICAgICBzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9hZHB0cl9iZnJzX2Z1bGw7Ci0KLSAgICAgICAgaWYoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVycm9yLCB0cmFuc21pdCBsZW5ndGggc2V0IGluIGRlbGF5ZWQgdHJhbnNtaXQhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJaWYgKGxlbiA+IFgyNV9DSEFOX01UVStzaXplb2YoeDI1YXBpX2hkcl90KSkgewotCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7CQotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMZW5ndGggaXMgdG9vIGJpZyBmb3IgZGVsYXllZCB0cmFuc21pdFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybjsKLQkJfQotCX1lbHNlewotCQlpZiAobGVuID4gWDI1X01BWF9EQVRBKSB7Ci0JCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsJCi0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExlbmd0aCBpcyB0b28gYmlnIGZvciBkZWxheWVkIHRyYW5zbWl0XG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0gICAgICAgIGNoYW4tPnRyYW5zbWl0X2xlbmd0aCA9IGxlbjsKLQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uZHJpdmVyX2J1c3ksMSk7Ci0gICAgICAgIG1lbWNweShjaGFuLT50cmFuc21pdF9idWZmZXIsIGJ1ZiwgbGVuKTsKLQotCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfdHhfaW50X2VuYWJsZWQ7Ci0KLQkvKiBFbmFibGUgVHJhbnNtaXQgSW50ZXJydXB0ICovCi0JKytjYXJkLT51LngudHhfaW50ZXJydXB0c19wZW5kaW5nOwotICAgICAgICBzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVFhfRlJBTUU7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIG5ldF9kZXZpY2Vfc3RhdHMKLSAqCi0gKiAJR2V0IGV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgotICogCVJldHVybiBhIHBvaW50ZXIgdG8gc3RydWN0IGVuZXRfc3RhdGlzdGljcy4KLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCi0JaWYoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiAmY2hhbi0+aWZzdGF0czsKLX0KLQotCi0vKgotICoJSW50ZXJydXB0IEhhbmRsZXJzIAotICovCi0KLS8qCi0gKiBYLjI1IEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUuCi0gKi8KLQotc3RhdGljIHZvaWQgd3B4X2lzciAoc2RsYV90KiBjYXJkKQotewotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JY2FyZC0+aW5faXNyID0gMTsKLQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX2VudHJ5OwotCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQljYXJkLT5pbl9pc3I9MDsKLQkJc3RhdHVzLT5pZmxhZ3MgPSAwOwotCQlyZXR1cm47Ci0JfQotCQotCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0KLSAJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3cHhfaXNyOiB3YW5kZXYuY3JpdGljYWwgc2V0IHRvIDB4JTAybHgsIGludCB0eXBlID0gMHglMDJ4XG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIGNhcmQtPndhbmRldi5jcml0aWNhbCwgc3RhdHVzLT5pZmxhZ3MpOwotCQljYXJkLT5pbl9pc3IgPSAwOwotCQlzdGF0dXMtPmlmbGFncyA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBGb3IgYWxsIGludGVycnVwdHMgc2V0IHRoZSBjcml0aWNhbCBmbGFnIHRvIENSSVRJQ0FMX1JYX0lOVFIuCi0gICAgICAgICAqIElmIHRoZSBpZl9zZW5kIHJvdXRpbmUgaXMgY2FsbGVkIHdpdGggdGhpcyBmbGFnIHNldCBpdCB3aWxsIHNldAotICAgICAgICAgKiB0aGUgZW5hYmxlIHRyYW5zbWl0IGZsYWcgdG8gMS4gKGZvciBhIGRlbGF5ZWQgaW50ZXJydXB0KQotICAgICAgICAgKi8KLQlzd2l0Y2ggKHN0YXR1cy0+aWZsYWdzKXsKLQotCQljYXNlIFJYX0lOVFJfUEVORElORzoJCS8qIHJlY2VpdmUgaW50ZXJydXB0ICovCi0JCQlyeF9pbnRyKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBUWF9JTlRSX1BFTkRJTkc6CQkvKiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkJCXR4X2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIE1PREVNX0lOVFJfUEVORElORzoJLyogbW9kZW0gc3RhdHVzIGludGVycnVwdCAqLwotCQkJc3RhdHVzX2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFgyNV9BU1lfVFJBTlNfSU5UUl9QRU5ESU5HOgkvKiBuZXR3b3JrIGV2ZW50IGludGVycnVwdCAqLwotCQkJZXZlbnRfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVElNRVJfSU5UUl9QRU5ESU5HOgotCQkJdGltZXJfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6CQkvKiB1bndhbnRlZCBpbnRlcnJ1cHQgKi8KLQkJCXNwdXJfaW50cihjYXJkKTsKLQl9Ci0KLQljYXJkLT5pbl9pc3IgPSAwOwotCXN0YXR1cy0+aWZsYWdzID0gMDsJLyogY2xlYXIgaW50ZXJydXB0IGNvbmRpdGlvbiAqLwotfQotCi0vKgotICogCVJlY2VpdmUgaW50ZXJydXB0IGhhbmRsZXIuCi0gKiAJVGhpcyByb3V0aW5lIGhhbmRsZXMgZnJhZ21lbnRlZCBJUCBwYWNrZXRzIHVzaW5nIE0tYml0IGFjY29yZGluZyB0byB0aGUKLSAqIAlSRkMxMzU2LgotICogCW8gbWFwIGxpZ2ljYWwgY2hhbm5lbCBudW1iZXIgdG8gbmV0d29yayBpbnRlcmZhY2UuCi0gKiAJbyBhbGxvY2F0ZSBzb2NrZXQgYnVmZmVyIG9yIGFwcGVuZCByZWNlaXZlZCBwYWNrZXQgdG8gdGhlIGV4aXN0aW5nIG9uZS4KLSAqIAlvIGlmIE0tYml0IGlzIHJlc2V0IChpLmUuIGl0J3MgdGhlIGxhc3QgcGFja2V0IGluIGEgc2VxdWVuY2UpIHRoZW4gCi0gKiAgIAlkZWNhcHN1bGF0ZSBwYWNrZXQgYW5kIHBhc3Mgc29ja2V0IGJ1ZmZlciB0byB0aGUgcHJvdG9jb2wgc3RhY2suCi0gKgotICogCU5vdGVzOgotICogCTEuIFdoZW4gYWxsb2NhdGluZyBhIHNvY2tldCBidWZmZXIsIGlmIE0tYml0IGlzIHNldCB0aGVuIG1vcmUgZGF0YSBpcwotICogICAgCWNvbWluZyBhbmQgd2UgaGF2ZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHRoZSBtYXhpbXVtIElQIHBhY2tldCBzaXplCi0gKiAgICAJZXhwZWN0ZWQgb24gdGhpcyBjaGFubmVsLgotICogCTIuIElmIHNvbWV0aGluZyBnb2VzIHdyb25nIGFuZCBYLjI1IHBhY2tldCBoYXMgdG8gYmUgZHJvcHBlZCAoZS5nLiBubwotICogICAgCXNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSkgdGhlIHdob2xlIHBhY2tldCBzZXF1ZW5jZSBtdXN0IGJlIGRpc2NhcmRlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIHJ4bWIgPSBjYXJkLT5yeG1iOwotCXVuc2lnbmVkIGxjbiA9IHJ4bWItPmNtZC5sY247Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGZpbmRfY2hhbm5lbChjYXJkLGxjbik7Ci0JeDI1X2NoYW5uZWxfdCogY2hhbjsKLQlzdHJ1Y3Qgc2tfYnVmZiogc2tiPU5VTEw7Ci0KLQlpZiAoZGV2ID09IE5VTEwpewotCQkvKiBJbnZhbGlkIGNoYW5uZWwsIGRpc2NhcmQgcGFja2V0ICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWNlaXZpbmcgb24gb3JwaGFuZWQgTENOICVkIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGxjbik7Ci0JCXJldHVybjsKLQl9Ci0KLQljaGFuID0gZGV2LT5wcml2OwotCWNoYW4tPmlfdGltZW91dF9zb2ZhciA9IGppZmZpZXM7Ci0KLQotCS8qIENvcHkgdGhlIGRhdGEgZnJvbSB0aGUgYm9hcmQsIGludG8gYW4KLSAgICAgICAgICogc2tiIGJ1ZmZlciAKLQkgKi8KLQlpZiAod2FucGlwZV9wdWxsX2RhdGFfaW5fc2tiKGNhcmQsZGV2LCZza2IpKXsKLQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCSsrY2hhbi0+cnhfaW50cl9zdGF0LnJ4X2ludHJfbm9fc29ja2V0OwotCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsJCS8qIHRpbWVzdGFtcCAqLwotCi0KLQkvKiAtLS0tLS0tLS0tLS0gQVBJIC0tLS0tLS0tLS0tLS0tLS0qLwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQotCQlpZiAoYmhfZW5xdWV1ZShkZXYsIHNrYikpewotCQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkJKytjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9iZnJfbm90X3Bhc3NlZF90b19zdGFjazsKLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlyZXR1cm47Ci0JCX0JCQotCi0JCSsrY2hhbi0+aWZzdGF0cy5yeF9wYWNrZXRzOwotCQljaGFuLT5pZnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkKLQotCQljaGFuLT5yeF9za2IgPSBOVUxMOwotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpKXsKLQkJCXdhbnBpcGVfcXVldWVfd29yaygmY2hhbi0+Y29tbW9uLndhbnBpcGVfd29yayk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCi0JLyogLS0tLS0tLS0tLS0tLSBXQU5QSVBFIC0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCQotCS8qIHNldCByeF9za2IgdG8gTlVMTCBzbyB3ZSB3b24ndCBhY2Nlc3MgaXQgbGF0ZXIgd2hlbiBrZXJuZWwgYWxyZWFkeSBvd25zIGl0ICovCi0JY2hhbi0+cnhfc2tiPU5VTEw7Ci0JCi0JLyogRGVjYXBzdWxhdGUgcGFja2V0LCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIXNrYi0+cHJvdG9jb2wgJiYgIXdhbnJvdXRlcl90eXBlX3RyYW5zKHNrYiwgZGV2KSl7Ci0JCS8qIGNhbid0IGRlY2Fwc3VsYXRlIHBhY2tldCAqLwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCSsrY2hhbi0+aWZzdGF0cy5yeF9lcnJvcnM7Ci0JCSsrY2hhbi0+aWZzdGF0cy5yeF9kcm9wcGVkOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCi0JfWVsc2V7Ci0JCWlmKCBoYW5kbGVfSVBYV0FOKHNrYi0+ZGF0YSwgY2hhbi0+bmFtZSwgCi0JCQkJICBjaGFuLT5lbmFibGVfSVBYLCBjaGFuLT5uZXR3b3JrX251bWJlciwgCi0JCQkJICBza2ItPnByb3RvY29sKSl7Ci0KLQkJCWlmKCBjaGFuLT5lbmFibGVfSVBYICl7Ci0JCQkJaWYoY2hhbl9zZW5kKGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwwKSl7Ci0JCQkJCWNoYW4tPnR4X3NrYiA9IHNrYjsKLQkJCQl9ZWxzZXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQkJCX0KLQkJCX1lbHNlewotCQkJCS8qIGluY3JlbWVudCBJUFggcGFja2V0IGRyb3BwZWQgc3RhdGlzdGljICovCi0JCQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkJKytjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9iZnJfbm90X3Bhc3NlZF90b19zdGFjazsKLQkJCX0KLQkJfWVsc2V7Ci0JCQlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7Ci0JCQljaGFuLT5pZnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkJKytjaGFuLT5pZnN0YXRzLnJ4X3BhY2tldHM7Ci0JCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7Ci0JCQluZXRpZl9yeChza2IpOwotCQl9Ci0JfQotCQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgaW50IHdhbnBpcGVfcHVsbF9kYXRhX2luX3NrYihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBza19idWZmICoqc2tiKQotewotCXZvaWQgKmJ1ZnB0cjsKLQlUWDI1TWJveCogcnhtYiA9IGNhcmQtPnJ4bWI7Ci0JdW5zaWduZWQgbGVuID0gcnhtYi0+Y21kLmxlbmd0aDsJLyogcGFja2V0IGxlbmd0aCAqLwotCXVuc2lnbmVkIHFkbSA9IHJ4bWItPmNtZC5xZG07CQkvKiBRLEQgYW5kIE0gYml0cyAqLwotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSAqc2tiOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSl7Ci0JCWlmIChjaGFuLT5kcm9wX3NlcXVlbmNlKXsKLQkJCWlmICghKHFkbSAmIDB4MDEpKXsgCi0JCQkJY2hhbi0+ZHJvcF9zZXF1ZW5jZSA9IDA7Ci0JCQl9Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQluZXdfc2tiID0gY2hhbi0+cnhfc2tiOwotCX1lbHNlewotCQkvKiBBZGQgb24gdGhlIEFQSSBoZWFkZXIgdG8gdGhlIHJlY2VpdmVkCi0gICAgICAgICAgICAgICAgICogZGF0YSAKLQkJICovCi0JCWxlbiArPSBzaXplb2YoeDI1YXBpX2hkcl90KTsKLQl9Ci0KLQlpZiAobmV3X3NrYiA9PSBOVUxMKXsKLQkJaW50IGJ1ZnNpemU7Ci0KLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSl7Ci0JCQlidWZzaXplID0gKHFkbSAmIDB4MDEpID8gZGV2LT5tdHUgOiBsZW47Ci0JCX1lbHNlewotCQkJYnVmc2l6ZSA9IGxlbjsKLQkJfQotCi0JCS8qIEFsbG9jYXRlIG5ldyBzb2NrZXQgYnVmZmVyICovCi0JCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGJ1ZnNpemUgKyBkZXYtPmhhcmRfaGVhZGVyX2xlbik7Ci0JCWlmIChuZXdfc2tiID09IE5VTEwpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQljaGFuLT5kcm9wX3NlcXVlbmNlID0gMTsJLyogc2V0IGZsYWcgKi8KLQkJCSsrY2hhbi0+aWZzdGF0cy5yeF9kcm9wcGVkOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlpZiAoc2tiX3RhaWxyb29tKG5ld19za2IpIDwgbGVuKXsKLQkJLyogTm8gcm9vbSBmb3IgdGhlIHBhY2tldC4gQ2FsbCBvZmYgdGhlIHdob2xlIHRoaW5nISAqLwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOwotCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKXsKLQkJCWNoYW4tPnJ4X3NrYiA9IE5VTEw7Ci0JCQlpZiAocWRtICYgMHgwMSl7IAotCQkJCWNoYW4tPmRyb3Bfc2VxdWVuY2UgPSAxOwotCQkJfQotCQl9Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVuZXhwZWN0ZWRseSBsb25nIHBhY2tldCBzZXF1ZW5jZSAiCi0JCQkib24gaW50ZXJmYWNlICVzIVxuIiwgY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQkJKytjaGFuLT5pZnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM7Ci0JCXJldHVybiAxOwotCX0KLQotCWJ1ZnB0ciA9IHNrYl9wdXQobmV3X3NrYixsZW4pOwotCi0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkvKiBGaWxsIGluIHRoZSB4MjVhcGkgaGVhZGVyIAotCQkgKi8KLQkJeDI1YXBpX3QgKiBhcGlfZGF0YSA9ICh4MjVhcGlfdCopYnVmcHRyOwotCQlhcGlfZGF0YS0+aGRyLnFkbSA9IHJ4bWItPmNtZC5xZG07Ci0JCWFwaV9kYXRhLT5oZHIuY2F1c2UgPSByeG1iLT5jbWQuY2F1c2U7Ci0JCWFwaV9kYXRhLT5oZHIuZGlhZ24gPSByeG1iLT5jbWQuZGlhZ247Ci0JCWFwaV9kYXRhLT5oZHIubGVuZ3RoID0gcnhtYi0+Y21kLmxlbmd0aDsKLQkJbWVtY3B5KGFwaV9kYXRhLT5kYXRhLCByeG1iLT5kYXRhLCByeG1iLT5jbWQubGVuZ3RoKTsKLQl9ZWxzZXsKLQkJbWVtY3B5KGJ1ZnB0ciwgcnhtYi0+ZGF0YSwgbGVuKTsKLQl9Ci0KLQluZXdfc2tiLT5kZXYgPSBkZXY7Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQluZXdfc2tiLT5tYWMucmF3ID0gbmV3X3NrYi0+ZGF0YTsKLQkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhYMjVfUFJPVCk7Ci0JCW5ld19za2ItPnBrdF90eXBlID0gV0FOX1BBQ0tFVF9EQVRBOwotCX1lbHNlewotCQluZXdfc2tiLT5wcm90b2NvbCA9IGNoYW4tPnByb3RvY29sOwotCQljaGFuLT5yeF9za2IgPSBuZXdfc2tiOwotCX0KLQotCS8qIElmIHFkbSBiaXQgaXMgc2V0LCBtb3JlIGRhdGEgaXMgY29taW5nIAotICAgICAgICAgKiB0aHVzLCBleGl0IGFuZCB3YWl0IGZvciBtb3JlIGRhdGEgYmVmb3JlCi0gICAgICAgICAqIHNlbmRpbmcgdGhlIHBhY2tldCB1cC4gKFVzZWQgYnkgcm91dGVyIG9ubHkpIAotCSAqLwotCWlmICgocWRtICYgMHgwMSkgJiYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSkpIAotCQlyZXR1cm4gMTsJCi0KLQkqc2tiID0gbmV3X3NrYjsgCi0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHR4X2ludHIKLSAqICAKLSAqIAlUcmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCUZvciBlYWNoIGRldiwgY2hlY2sgdGhhdCB0aGVyZSBpcyBzb21ldGhpbmcgdG8gc2VuZC4KLSAqCUlmIGRhdGEgYXZhaWxhYmxlLCB0cmFuc21pdC4gCQotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgdHhfaW50ciAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciBtb3JlX3RvX3R4PTA7Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbj1OVUxMOwotCWludCBpPTA7CQotCi0JaWYgKGNhcmQtPnUueC50eF9kZXYgPT0gTlVMTCl7Ci0JCWNhcmQtPnUueC50eF9kZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCX0KLQotCWRldiA9IGNhcmQtPnUueC50eF9kZXY7Ci0KLQlmb3IgKDs7KXsKLQotCQljaGFuID0gZGV2LT5wcml2OwotCQlpZiAoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKXsKLQkJCS8qIERldmljZSB3YXMgc2V0IHRvIHRyYW5zbWl0LCBjaGVjayBpZiB0aGUgVFgKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZSAKLQkJCSAqLwkJCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9DT05ORUNURUQpewotCQkJCWNoYW4tPnRyYW5zbWl0X2xlbmd0aCA9IDA7Ci0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRyaXZlcl9idXN5LDApOwotCQkJCWNoYW4tPnR4X29mZnNldD0wOwotCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpewotCQkJCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkJCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCQkJCXdha2V1cF9za19iaChkZXYpOwotCQkJCQl9ZWxzZXsKLQkJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQkJfQotCQkJCX0KLQkJCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJCQlicmVhazsKLQkJCX0JCQkJCi0KLQkJCWlmICgoc3RhdHVzLT5jZmxhZ3NbY2hhbi0+Y2hfaWR4XSAmIDB4NDAgfHwgY2FyZC0+dS54LkxBUEJfaGRsYykgJiYgCi0JCQkgICAgICgqY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyAmIDB4NDApICl7Ci0JCQkJLyogVHggYnVmZmVyIGF2YWlsYWJsZSwgd2UgY2FuIHNlbmQgKi8KLQkJCQkKLQkJCQlpZiAodHhfaW50cl9zZW5kKGNhcmQsIGRldikpewotCQkJCQltb3JlX3RvX3R4PTE7Ci0JCQkJfQotCi0JCQkJLyogSWYgbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2UgcHJlc2VudCwgbW92ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGV2aWNlIHBvaW50ZXIgdG8gdGhlIG5leHQgaW50ZXJmYWNlLCBzbyBvbiB0aGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG5leHQgVFggaW50ZXJydXB0IHdlIHdpbGwgdHJ5IHNlbmRpbmcgZnJvbSBpdC4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCQkJCWRldiA9IG1vdmVfZGV2X3RvX25leHQoY2FyZCxkZXYpOwotCQkJCWJyZWFrOwotCQkJfWVsc2V7Ci0JCQkJLyogVHggYnVmZmVycyBub3QgYXZhaWxhYmxlLCBidXQgZGV2aWNlIHNldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgVFggaW50ZXJydXB0LiAgU2V0IG1vcmVfdG9fdHggYW5kIHRyeSAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIHRyYW5zbWl0IGZvciBvdGhlciBkZXZpY2VzLgotCQkJCSAqLwotCQkJCW1vcmVfdG9fdHg9MTsKLQkJCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJCX0KLQotCQl9ZWxzZXsKLQkJCS8qIFRoaXMgZGV2aWNlIHdhcyBub3Qgc2V0IHRvIHRyYW5zbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICogZ28gdG8gbmV4dCAKLQkJCSAqLwotCQkJZGV2ID0gbW92ZV9kZXZfdG9fbmV4dChjYXJkLGRldik7Ci0JCX0JCi0KLQkJaWYgKCsraSA9PSBjYXJkLT51Lngubm9fZGV2KXsKLQkJCWlmICghbW9yZV90b190eCl7Ci0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiBOb3RoaW5nIHRvIFNlbmQgaW4gVFggSU5UUlxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JfSAvL0VuZCBvZiBGT1IKLQotCWNhcmQtPnUueC50eF9kZXYgPSBkZXY7Ci0JCi0JaWYgKCFtb3JlX3RvX3R4KXsKLQkJLyogaWYgYW55IG90aGVyIGludGVyZmFjZXMgaGF2ZSB0cmFuc21pdCBpbnRlcnJ1cHRzIHBlbmRpbmcsICovCi0JCS8qIGRvIG5vdCBkaXNhYmxlIHRoZSBnbG9iYWwgdHJhbnNtaXQgaW50ZXJydXB0ICovCi0JCWlmICghKC0tY2FyZC0+dS54LnR4X2ludGVycnVwdHNfcGVuZGluZykpewotCQkJc3RhdHVzLT5pbWFzayAmPSB+SU5UUl9PTl9UWF9GUkFNRTsKLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBtb3ZlX2Rldl90b19uZXh0Ci0gKiAgCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLXN0cnVjdCBuZXRfZGV2aWNlICptb3ZlX2Rldl90b19uZXh0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpZiAoY2FyZC0+dS54Lm5vX2RldiAhPSAxKXsKLQkJaWYgKCEqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKQotCQkJcmV0dXJuIGNhcmQtPndhbmRldi5kZXY7Ci0JCWVsc2UKLQkJCXJldHVybiAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpOwotCX0KLQlyZXR1cm4gZGV2OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogIHR4X2ludHJfc2VuZAotICogIAotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB0eF9pbnRyX3NlbmQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7IAotCi0JaWYgKGNoYW5fc2VuZCAoZGV2LGNoYW4tPnRyYW5zbWl0X2J1ZmZlcixjaGFuLT50cmFuc21pdF9sZW5ndGgsMSkpewotCQkgCi0gICAgICAgICAgICAgICAgLyogUGFja2V0IHdhcyBzcGxpdCB1cCBkdWUgdG8gaXRzIHNpemUsIGRvIG5vdCBkaXNhYmxlCi0gICAgICAgICAgICAgICAgICogdHhfaW50ciAKLSAgICAgICAgICAgICAgICAgKi8KLQkJcmV0dXJuIDE7Ci0JfQotCi0JY2hhbi0+dHJhbnNtaXRfbGVuZ3RoPTA7Ci0JYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRyaXZlcl9idXN5LDApOwotCWNoYW4tPnR4X29mZnNldD0wOwotCi0JLyogSWYgd2UgYXJlIGluIEFQSSBtb2RlLCB3YWtldXAgdGhlIAotICAgICAgICAgKiBzb2NrIEJIIGhhbmRsZXIsIG5vdCB0aGUgTkVUX0JIICovCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSl7Ci0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJd2FrZXVwX3NrX2JoKGRldik7Ci0JCX1lbHNlewotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0aW1lcl9pbnRyCi0gKiAgCi0gKiAJVGltZXIgaW50ZXJydXB0IGhhbmRsZXIuCi0gKglDaGVjayB3aG8gY2FsbGVkIHRoZSB0aW1lciBpbnRlcnJ1cHQgYW5kIHBlcmZvcm0KLSAqICAgICAgYWN0aW9uIGFjY29yZGluZ2x5LgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgdGltZXJfaW50ciAoc2RsYV90ICpjYXJkKQotewotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQyl7Ci0KLQkJaWYgKHRpbWVyX2ludHJfY21kX2V4ZWMoY2FyZCkgPT0gMCl7Ci0JCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0KLQkJCQl+VE1SX0lOVF9FTkFCTEVEX0NNRF9FWEVDOwotCQl9Ci0KLQl9ZWxzZSAgaWYoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VEUF9QS1QpIHsKLQotCQlpZiAoKCpjYXJkLT51LnguaGRsY19idWZfc3RhdHVzICYgMHg0MCkgJiYgCi0JCSAgICBjYXJkLT51LngudWRwX3R5cGUgPT0gVURQX1hQSVBFX1RZUEUpewotCi0gICAgICAgICAgICAgICAgICAgIAlpZihwcm9jZXNzX3VkcF9tZ210X3BrdChjYXJkKSkgewotCQkgICAgICAgICAgICAgICAgY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IAotCQkJCQl+VE1SX0lOVF9FTkFCTEVEX1VEUF9QS1Q7Ci0JCQl9Ci0JCX0KLQotCX1lbHNlIGlmIChjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfUE9MTF9BQ1RJVkUpIHsKLQotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+dS54LnBvbGxfZGV2aWNlOwotCQl4MjVfY2hhbm5lbF90ICpjaGFuID0gTlVMTDsKLQotCQlpZiAoIWRldil7Ci0JCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9QT0xMX0FDVElWRTsKLQkJCXJldHVybjsKLQkJfQotCQljaGFuID0gZGV2LT5wcml2OwotCi0JCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IENsb3NpbmcgZG93biBJZGxlIGxpbmsgJXMgb24gTENOICVkXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLGNoYW4tPm5hbWUsY2hhbi0+Y29tbW9uLmxjbik7IAotCQljaGFuLT5pX3RpbWVvdXRfc29mYXIgPSBqaWZmaWVzOwotCQljaGFuX2Rpc2MoZGV2KTsJCi0gICAgICAgICAJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUE9MTF9BQ1RJVkU7Ci0JCWNhcmQtPnUueC5wb2xsX2RldmljZT1OVUxMOwotCi0JfWVsc2UgaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT04pIHsKLQotCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVEVEKTsKLQkJaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsV0FOX0NPTk5FQ1RFRCk7Ci0JCQlzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChjYXJkLGRldixjYXJkLT5tYm94KTsJCi0JCX0KLQotCQkvKiAweDhGIGVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCQl4MjVfc2V0X2ludHJfbW9kZShjYXJkLCBJTlRSX09OX1JYX0ZSQU1FfAkKLQkJCQkJSU5UUl9PTl9UWF9GUkFNRXwKLQkJCQkJSU5UUl9PTl9NT0RFTV9TVEFUVVNfQ0hBTkdFfAotCQkJCQkvL0lOVFJfT05fQ09NTUFORF9DT01QTEVURXwKLQkJCQkJWDI1X0FTWV9UUkFOU19JTlRSX1BFTkRJTkcgfAotCQkJCQlJTlRSX09OX1RJTUVSIHwKLQkJCQkJRElSRUNUX1JYX0lOVFJfVVNBR0UKLQkJCQkpOyAKLQotCQlzdGF0dXMtPmltYXNrICY9IH5JTlRSX09OX1RYX0ZSQU1FOwkvKiBtYXNrIFR4IGludGVycnVwdHMgKi8KLQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUE9MTF9DT05ORUNUX09OOwotCi0JfWVsc2UgaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT0ZGKSB7Ci0KLQkJLy9wcmludGsoS0VSTl9JTkZPICJQb2xsIGNvbm5lY3QsIFR1cm5pbmcgT0ZGXG4iKTsKLQkJZGlzY29ubmVjdChjYXJkKTsKLQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUE9MTF9DT05ORUNUX09GRjsKLQotCX1lbHNlIGlmIChjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfUE9MTF9ESVNDT05ORUNUKSB7Ci0KLQkJLy9wcmludGsoS0VSTl9JTkZPICJQT2xsIGRpc2Nvbm5lY3QsIHRyeWluZyB0byBjb25uZWN0XG4iKTsKLQkJY29ubmVjdChjYXJkKTsKLQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUE9MTF9ESVNDT05ORUNUOwotCi0JfWVsc2UgaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUpewotCi0JCWlmICgqY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyAmIDB4NDApewotCQkJeDI1X2dldF9lcnJfc3RhdHMoY2FyZCk7Ci0JCQl4MjVfZ2V0X3N0YXRzKGNhcmQpOwotCQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotCQl9Ci0JfQotCi0JaWYoIWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCl7Ci0JCS8vcHJpbnRrKEtFUk5fSU5GTyAiVHVybmluZyBUaW1lciBPZmYgXG4iKTsKLSAgICAgICAgICAgICAgICBzdGF0dXMtPmltYXNrICY9IH5JTlRSX09OX1RJTUVSOwkKLQl9Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlNb2RlbSBzdGF0dXMgaW50ZXJydXB0IGhhbmRsZXIuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgc3RhdHVzX2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQotCS8qIEFkZGVkIHRvIGF2b2lkIE1vZGVtIHN0YXR1cyBtZXNzYWdlIGZsb29kaW5nICovCi0Jc3RhdGljIFRYMjVNb2RlbVN0YXR1cyBsYXN0X3N0YXQ7Ci0KLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JVFgyNU1vZGVtU3RhdHVzICptb2RlbV9zdGF0dXM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9SRUFEX01PREVNX1NUQVRVUzsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycil7IAotCQl4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfUkVBRF9NT0RFTV9TVEFUVVMsIDApOwotCX1lbHNlewotCQotCQltb2RlbV9zdGF0dXMgPSAoVFgyNU1vZGVtU3RhdHVzKiltYm94LT5kYXRhOwkKLQkKLSAgICAgICAgICAgCS8qIENoZWNrIGlmIHRoZSBsYXN0IHN0YXR1cyB3YXMgdGhlIHNhbWUKLSAgICAgICAgICAgCSAqIGlmIGl0IHdhcywgZG8gTk9UIHByaW50IG1lc3NhZ2UgYWdhaW4gKi8KLQkKLQkJaWYgKGxhc3Rfc3RhdC5zdGF0dXMgIT0gbW9kZW1fc3RhdHVzLT5zdGF0dXMpewotCi0JICAgICAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNb2RlbSBTdGF0dXMgQ2hhbmdlOiBEQ0Q9JXMsIENUUz0lc1xuIiwKLQkJCQljYXJkLT5kZXZuYW1lLERDRChtb2RlbV9zdGF0dXMtPnN0YXR1cyksQ1RTKG1vZGVtX3N0YXR1cy0+c3RhdHVzKSk7Ci0KLQkJCWxhc3Rfc3RhdC5zdGF0dXMgPSBtb2RlbV9zdGF0dXMtPnN0YXR1czsKLQkJCi0JCQlpZiAoY2FyZC0+dS54Lm9vYl9vbl9tb2RlbSl7Ci0KLQkJCQltYm94LT5jbWQucGt0VHlwZSA9IG1ib3gtPmNtZC5jb21tYW5kOwotCQkJCW1ib3gtPmNtZC5yZXN1bHQgPSAweDA4OwotCi0JCQkJLyogU2VuZCBhIE9PQiB0byBhbGwgY29ubmVjdGVkIHNvY2tldHMgKi8KLQkJCQlmb3IgKGRldiA9IGNhcmQtPndhbmRldi5kZXY7IGRldjsKLQkJCQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlKiopZGV2LT5wcml2KSkgewotCQkJCQljaGFuPWRldi0+cHJpdjsKLQkJCQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJCQkJCXNlbmRfb29iX21zZyhjYXJkLGRldixtYm94KTsJCQkJCi0JCQkJCX0KLQkJCQl9Ci0KLQkJCQkvKiBUaGUgbW9kZW0gT09CIG1lc3NhZ2Ugd2lsbCBwcm9iYWJseSBraWxsIHRoZQotCQkJCSAqIHRoZSBsaW5rLiBJZiB3ZSBkb24ndCBjbGVhciB0aGUgZmxhZyBoZXJlLAotCQkJCSAqIGEgZGVhZGxvY2sgY291bGQgb2NjdXIgKi8gCi0JCQkJaWYgKGF0b21pY19yZWFkKCZjYXJkLT51LnguY29tbWFuZF9idXN5KSl7Ci0JCQkJCWF0b21pY19zZXQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3ksMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX1NUQVRVUzsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycil7IAotCQl4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSERMQ19MSU5LX1NUQVRVUywgMCk7Ci0JfQotCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlOZXR3b3JrIGV2ZW50IGludGVycnVwdCBoYW5kbGVyLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIGV2ZW50X2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQl4MjVfZmV0Y2hfZXZlbnRzKGNhcmQpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJU3B1cmlvdXMgaW50ZXJydXB0IGhhbmRsZXIuCi0gKiAJbyBwcmludCBhIHdhcm5pbmcKLSAqIAlvCSAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBzcHVyX2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPICIlczogc3B1cmlvdXMgaW50ZXJydXB0IVxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci19Ci0KLQotLyoKLSAqCUJhY2tncm91bmQgUG9sbGluZyBSb3V0aW5lcyAgCi0gKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCU1haW4gcG9sbGluZyByb3V0aW5lLgotICogCVRoaXMgcm91dGluZSBpcyByZXBlYXRlZGx5IGNhbGxlZCBieSB0aGUgV0FOUElQRSAndGhyZWFkJyB0byBhbGxvdyBmb3IKLSAqIAl0aW1lLWRlcGVuZGVudCBob3VzZWtlZXBpbmcgd29yay4KLSAqCi0gKiAJTm90ZXM6Ci0gKiAJMS4gVGhpcyByb3V0aW5lIG1heSBiZSBjYWxsZWQgb24gaW50ZXJydXB0IGNvbnRleHQgd2l0aCBhbGwgaW50ZXJydXB0cwotICogICAgCWVuYWJsZWQuIEJld2FyZSEKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCB3cHhfcG9sbCAoc2RsYV90ICpjYXJkKQotewotCWlmICghY2FyZC0+d2FuZGV2LmRldil7Ci0JCWdvdG8gd3B4X3BvbGxfZXhpdDsKLQl9Ci0KLQlpZiAoY2FyZC0+b3Blbl9jbnQgIT0gY2FyZC0+dS54Lm51bV9vZl9jaCl7Ci0JCWdvdG8gd3B4X3BvbGxfZXhpdDsKLQl9Ci0JCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCWdvdG8gd3B4X3BvbGxfZXhpdDsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU0VORF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJZ290byB3cHhfcG9sbF9leGl0OwotCX0KLQotCXN3aXRjaChjYXJkLT53YW5kZXYuc3RhdGUpewotCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQlwb2xsX2FjdGl2ZShjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0FOX0NPTk5FQ1RJTkc6Ci0JCQlwb2xsX2Nvbm5lY3RpbmcoY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0JCQlwb2xsX2Rpc2Nvbm5lY3RlZChjYXJkKTsKLQkJCWJyZWFrOwotCX0KLQotd3B4X3BvbGxfZXhpdDoKLQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgdHJpZ2dlcl94MjVfcG9sbChzZGxhX3QgKmNhcmQpCi17Ci0Jc2NoZWR1bGVfd29yaygmY2FyZC0+dS54LngyNV9wb2xsX3dvcmspOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJSGFuZGxlIHBoeXNpY2FsIGxpbmsgZXN0YWJsaXNobWVudCBwaGFzZS4KLSAqIAlvIGlmIGNvbm5lY3Rpb24gdGltZWQgb3V0LCBkaXNjb25uZWN0IHRoZSBsaW5rLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgcG9sbF9jb25uZWN0aW5nIChzZGxhX3QqIGNhcmQpCi17Ci0Jdm9sYXRpbGUgVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQlpZiAoc3RhdHVzLT5nZmxhZ3MgJiBYMjVfSERMQ19BQk0pewotCi0JCXRpbWVyX2ludHJfZXhlYyAoY2FyZCwgVE1SX0lOVF9FTkFCTEVEX1BPTExfQ09OTkVDVF9PTik7Ci0KLQl9ZWxzZSBpZiAoKGppZmZpZXMgLSBjYXJkLT5zdGF0ZV90aWNrKSA+IENPTk5FQ1RfVElNRU9VVCl7Ci0KLQkJdGltZXJfaW50cl9leGVjIChjYXJkLCBUTVJfSU5UX0VOQUJMRURfUE9MTF9DT05ORUNUX09GRik7Ci0KLQl9Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlIYW5kbGUgcGh5c2ljYWwgbGluayBkaXNjb25uZWN0ZWQgcGhhc2UuCi0gKiAJbyBpZiBob2xkLWRvd24gdGltZW91dCBoYXMgZXhwaXJlZCBhbmQgdGhlcmUgYXJlIG9wZW4gaW50ZXJmYWNlcywgCi0gKgljb25uZWN0IGxpbmsuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBwb2xsX2Rpc2Nvbm5lY3RlZCAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IAotCXgyNV9jaGFubmVsX3QgKmNoYW47Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQlpZiAoIWNhcmQtPnUueC5MQVBCX2hkbGMgJiYgY2FyZC0+b3Blbl9jbnQgJiYgCi0JICAgICgoamlmZmllcyAtIGNhcmQtPnN0YXRlX3RpY2spID4gSE9MRF9ET1dOX1RJTUUpKXsKLQkJdGltZXJfaW50cl9leGVjKGNhcmQsIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0RJU0NPTk5FQ1QpOwotCX0KLQotCi0JaWYgKChkZXY9Y2FyZC0+d2FuZGV2LmRldikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKChjaGFuPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJICYmIAotCSAgICBhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpICYmIAotCSAgICBjYXJkLT51LnguTEFQQl9oZGxjKXsKLQotCQlpZiAoIShjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUMpKSAKLQkJCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUM7Ci0KLQkJaWYgKCEoc3RhdHVzLT5pbWFzayAmIElOVFJfT05fVElNRVIpKQotCQkJc3RhdHVzLT5pbWFzayB8PSBJTlRSX09OX1RJTUVSOwotCX0JCi0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUhhbmRsZSBhY3RpdmUgbGluayBwaGFzZS4KLSAqIAlvIGZldGNoIFguMjUgYXN5bmNocm9ub3VzIGV2ZW50cy4KLSAqIAlvIGtpY2sgb2ZmIHRyYW5zbWlzc2lvbiBvbiBhbGwgaW50ZXJmYWNlcy4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHBvbGxfYWN0aXZlIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSl7Ci0JCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0KLQkJLyogSWYgU1ZDIGhhcyBiZWVuIGlkbGUgbG9uZyBlbm91Z2gsIGNsb3NlIHZpcnR1YWwgY2lyY3VpdCAqLwotCQlpZiAoIGNoYW4tPmNvbW1vbi5zdmMgJiYgCi0JCSAgICAgY2hhbi0+Y29tbW9uLnN0YXRlID09IFdBTl9DT05ORUNURUQgJiYKLQkJICAgICBjaGFuLT5jb21tb24udXNlZGJ5ID09IFdBTlBJUEUgKXsKLQkJCi0JCQlpZiggKGppZmZpZXMgLSBjaGFuLT5pX3RpbWVvdXRfc29mYXIpIC8gSFogPiBjaGFuLT5pZGxlX3RpbWVvdXQgKXsKLQkJCQkvKiBDbG9zZSBzdmMgKi8KLQkJCQljYXJkLT51LngucG9sbF9kZXZpY2U9ZGV2OwotCQkJCXRpbWVyX2ludHJfZXhlYwkoY2FyZCwgVE1SX0lOVF9FTkFCTEVEX1BPTExfQUNUSVZFKTsKLQkJCX0KLQkJfQotCi0jaWZkZWYgUFJJTlRfREVCVUcKLQkJY2hhbi0+aWZzdGF0cy50eF9jb21wcmVzc2VkID0gYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5jb21tYW5kKTsKLQkJY2hhbi0+aWZzdGF0cy50eF9lcnJvcnMgPSBjaGFuLT5jb21tb24uc3RhdGU7Ci0JCWNoYW4tPmlmc3RhdHMucnhfZmlmb19lcnJvcnMgPSBhdG9taWNfcmVhZCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSk7Ci0JCSsrY2hhbi0+aWZzdGF0cy50eF9ieXRlczsKLQotCQljaGFuLT5pZnN0YXRzLnJ4X2ZpZm9fZXJyb3JzPWF0b21pY19yZWFkKCZjaGFuLT5jb21tb24uZGlzY29ubmVjdCk7Ci0JCWNoYW4tPmlmc3RhdHMubXVsdGljYXN0PWF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCQljaGFuLT5pZnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM9KmNhcmQtPnUueC5oZGxjX2J1Zl9zdGF0dXM7Ci0jZW5kaWYJCi0KLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJICYmIAotCQkgICAgYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5jb21tYW5kKSAmJiAKLQkgICAgICAgICAgICAhY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0KLQkJCWlmICghKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQykpIAotCQkJCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUM7Ci0KLQkJCWlmICghKHN0YXR1cy0+aW1hc2sgJiBJTlRSX09OX1RJTUVSKSkKLQkJCQlzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVElNRVI7Ci0JCX0JCi0KLQkJaWYgKChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkgJiYgCi0JCSAgICAgYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5kaXNjb25uZWN0KSl7Ci0KLQkJCWlmIChjaGFuLT5jb21tb24uc3RhdGUgPT0gV0FOX0RJU0NPTk5FQ1RFRCl7Ci0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRpc2Nvbm5lY3QsMCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uY29tbWFuZCxYMjVfQ0xFQVJfQ0FMTCk7Ci0JCQlpZiAoIShjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUMpKSAKLQkJCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX0NNRF9FWEVDOwotCi0JCQlpZiAoIShzdGF0dXMtPmltYXNrICYgSU5UUl9PTl9USU1FUikpCi0JCQkJc3RhdHVzLT5pbWFzayB8PSBJTlRSX09OX1RJTUVSOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyX2V4ZWMoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBjaGFyIFRZUEUpCi17Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0JY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkIHw9IFRZUEU7Ci0JaWYgKCEoc3RhdHVzLT5pbWFzayAmIElOVFJfT05fVElNRVIpKQotCQlzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVElNRVI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAqIFNETEEgRmlybXdhcmUtU3BlY2lmaWMgRnVuY3Rpb25zIAotICoKLSAqICBBbG1vc3QgYWxsIFguMjUgY29tbWFuZHMgY2FuIHVuZXhwZXRlZGx5IGZhaWwgZHVlIHRvIHNvIGNhbGxlZCAnWC4yNQotICogIGFzeW5jaHJvbm91cyBldmVudHMnIHN1Y2ggYXMgcmVzdGFydCwgaW50ZXJydXB0LCBpbmNvbWluZyBjYWxsIHJlcXVlc3QsCi0gKiAgY2FsbCBjbGVhciByZXF1ZXN0LCBldGMuICBUaGV5IGNhbid0IGJlIGlnbm9yZWQgYW5kIGhhdmUgdG8gYmUgZGVsdCB3aXRoCi0gKiAgaW1tZWRpYXRlbHkuICBUbyB0YWNrbGUgd2l0aCB0aGlzIHByb2JsZW0gd2UgZXhlY3V0ZSBlYWNoIGludGVyZmFjZSAKLSAqICBjb21tYW5kIGluIGEgbG9vcCB1bnRpbCBnb29kIHJldHVybiBjb2RlIGlzIHJlY2VpdmVkIG9yIG1heGltdW0gbnVtYmVyIAotICogIG9mIHJldHJpZXMgaXMgcmVhY2hlZC4gIEVhY2ggaW50ZXJmYWNlIGNvbW1hbmQgcmV0dXJucyBub24temVybyByZXR1cm4gCi0gKiAgY29kZSwgYW4gYXN5bmNocm9ub3VzIGV2ZW50L2Vycm9yIGhhbmRsZXIgeDI1X2Vycm9yKCkgaXMgY2FsbGVkLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlSZWFkIFguMjUgZmlybXdhcmUgdmVyc2lvbi4KLSAqCQlQdXQgY29kZSB2ZXJzaW9uIGFzIEFTQ0lJIHN0cmluZyBpbiBzdHIuIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfZ2V0X3ZlcnNpb24gKHNkbGFfdCogY2FyZCwgY2hhciogc3RyKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfUkVBRF9DT0RFX1ZFUlNJT047Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJgotCQkgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X1JFQURfQ09ERV9WRVJTSU9OLCAwKSk7Ci0KLQlpZiAoIWVyciAmJiBzdHIpCi0JewotCQlpbnQgbGVuID0gbWJveC0+Y21kLmxlbmd0aDsKLQotCQltZW1jcHkoc3RyLCBtYm94LT5kYXRhLCBsZW4pOwotCQlzdHJbbGVuXSA9ICdcMCc7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlDb25maWd1cmUgYWRhcHRlci4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1X2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCBUWDI1Q29uZmlnKiBjb25mKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWVtY3B5KG1ib3gtPmRhdGEsICh2b2lkKiljb25mLCBzaXplb2YoVFgyNUNvbmZpZykpOwotCQltYm94LT5jbWQubGVuZ3RoICA9IHNpemVvZihUWDI1Q29uZmlnKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfU0VUX0NPTkZJR1VSQVRJT047Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfU0VUX0NPTkZJR1VSQVRJT04sIDApKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJQ29uZmlndXJlIGFkYXB0ZXIgZm9yIEhETEMgb25seS4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgaGRsY19jb25maWd1cmUgKHNkbGFfdCogY2FyZCwgVFgyNUNvbmZpZyogY29uZikKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkb3sKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1lbWNweShtYm94LT5kYXRhLCAodm9pZCopY29uZiwgc2l6ZW9mKFRYMjVDb25maWcpKTsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBzaXplb2YoVFgyNUNvbmZpZyk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X0hETENfU0VUX0NPTkZJRzsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9TRVRfQ09ORklHVVJBVElPTiwgMCkpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzZXRfaGRsY19sZXZlbCAoc2RsYV90KiBjYXJkKQotewotCi0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG97Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFNFVF9QUk9UT0NPTF9MRVZFTDsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0JCW1ib3gtPmRhdGFbMF0gPSBIRExDX0xFVkVMOyAvL3wgRE9fSERMQ19MRVZFTF9FUlJPUl9DSEVDS0lORzsgCQotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgU0VUX1BST1RPQ09MX0xFVkVMLCAwKSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGNvbW11bmljYXRpb25zIGVycm9yIHN0YXRpc3RpY3MuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfZ2V0X2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19SRUFEX0NPTU1fRVJSOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0hETENfUkVBRF9DT01NX0VSUiwgMCkpOwotCQotCWlmICghZXJyKQotCXsKLQkJVEhkbGNDb21tRXJyKiBzdGF0cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCi0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9vdmVyX2Vycm9ycyAgICA9IHN0YXRzLT5yeE92ZXJydW47Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9jcmNfZXJyb3JzICAgICA9IHN0YXRzLT5yeEJhZENyYzsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgID0gc3RhdHMtPnJ4QWJvcnRlZDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gc3RhdHMtPnR4QWJvcnRlZDsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUdldCBwcm90b2NvbCBzdGF0aXN0aWNzLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfZ2V0X3N0YXRzIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9SRUFEX1NUQVRJU1RJQ1M7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfUkVBRF9TVEFUSVNUSUNTLCAwKSkgOwotCQotCWlmICghZXJyKQotCXsKLQkJVFgyNVN0YXRzKiBzdGF0cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCi0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9wYWNrZXRzID0gc3RhdHMtPnJ4RGF0YTsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X3BhY2tldHMgPSBzdGF0cy0+dHhEYXRhOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJQ2xvc2UgSERMQyBsaW5rLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfY2xvc2VfaGRsYyAoc2RsYV90KiBjYXJkKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX0NMT1NFOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0hETENfTElOS19DTE9TRSwgMCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCU9wZW4gSERMQyBsaW5rLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfb3Blbl9oZGxjIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9IRExDX0xJTktfT1BFTjsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9IRExDX0xJTktfT1BFTiwgMCkpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldHVwIEhETEMgbGluay4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCB4MjVfc2V0dXBfaGRsYyAoc2RsYV90KiBjYXJkKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX1NFVFVQOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0hETENfTElOS19TRVRVUCwgMCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCAocmFpc2UvZHJvcCkgRFRSLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfc2V0X2R0ciAoc2RsYV90KiBjYXJkLCBpbnQgZHRyKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+ZGF0YVswXSA9IDA7Ci0JCW1ib3gtPmRhdGFbMl0gPSAwOwotCQltYm94LT5kYXRhWzFdID0gZHRyID8gMHgwMiA6IDB4MDE7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gMzsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfU0VUX0dMT0JBTF9WQVJTOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X1NFVF9HTE9CQUxfVkFSUywgMCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlTZXQgaW50ZXJydXB0IG1vZGUuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9zZXRfaW50cl9tb2RlIChzZGxhX3QqIGNhcmQsIGludCBtb2RlKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+ZGF0YVswXSA9IG1vZGU7Ci0JCWlmIChjYXJkLT5ody5md2lkID09IFNGSURfWDI1XzUwOCl7Ci0JCQltYm94LT5kYXRhWzFdID0gY2FyZC0+aHcuaXJxOwotCQkJbWJveC0+ZGF0YVsyXSA9IDI7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gMzsKLQkJfWVsc2UgewotCQkgCW1ib3gtPmNtZC5sZW5ndGggID0gMTsKLQkJfQotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9TRVRfSU5URVJSVVBUX01PREU7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfU0VUX0lOVEVSUlVQVF9NT0RFLCAwKSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVJlYWQgWC4yNSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9nZXRfY2hhbl9jb25mIChzZGxhX3QqIGNhcmQsIHgyNV9jaGFubmVsX3QqIGNoYW4pCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgbGNuID0gY2hhbi0+Y29tbW9uLmxjbjsKLQlpbnQgZXJyOwotCi0JZG97Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQubGNuICAgICA9IGxjbjsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfUkVBRF9DSEFOTkVMX0NPTkZJRzsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9SRUFEX0NIQU5ORUxfQ09ORklHLCBsY24pKTsKLQotCWlmICghZXJyKQotCXsKLQkJVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkJLyogY2FsY3VsYXRlIGFuIG9mZnNldCBpbnRvIHRoZSBhcnJheSBvZiBzdGF0dXMgYnl0ZXMgKi8KLQkJaWYgKGNhcmQtPnUueC5oaV9zdmMgPD0gWDI1X01BWF9DSEFOKXsgCi0KLQkJCWNoYW4tPmNoX2lkeCA9IGxjbiAtIDE7Ci0KLQkJfWVsc2V7Ci0JCQlpbnQgb2Zmc2V0OwotCi0JCQkvKiBGSVg6IEFwciAxNCAyMDAwIDogTmVuYWQgQ29yYmljCi0JCQkgKiBUaGUgZGF0YSBmaWVsZCB3YXMgYmVpbmcgY29tcGFyZWQgdG8gMHgxRiB1c2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICogJyYmJyBpbnN0ZWFkIG9mICcmJy4gCi0JCQkgKiBUaGlzIGNhdXNlZCBYMjVBUEkgdG8gZmFpbCBmb3IgTENOcyBncmVhdGVyIHRoYW4gMjU1LgotCQkJICovCi0JCQlzd2l0Y2ggKG1ib3gtPmRhdGFbMF0gJiAweDFGKQotCQkJewotCQkJCWNhc2UgMHgwMTogCi0JCQkJCW9mZnNldCA9IHN0YXR1cy0+cHZjX21hcDsgYnJlYWs7Ci0JCQkJY2FzZSAweDAzOiAKLQkJCQkJb2Zmc2V0ID0gc3RhdHVzLT5pY2NfbWFwOyBicmVhazsKLQkJCQljYXNlIDB4MDc6IAotCQkJCQlvZmZzZXQgPSBzdGF0dXMtPnR3Y19tYXA7IGJyZWFrOwotCQkJCWNhc2UgMHgwQjogCi0JCQkJCW9mZnNldCA9IHN0YXR1cy0+b2djX21hcDsgYnJlYWs7Ci0JCQkJZGVmYXVsdDogCi0JCQkJCW9mZnNldCA9IDA7Ci0JCQl9Ci0JCQljaGFuLT5jaF9pZHggPSBsY24gLSAxIC0gb2Zmc2V0OwotCQl9Ci0KLQkJLyogZ2V0IGFjdHVhbCB0cmFuc21pdCBwYWNrZXQgc2l6ZSBvbiB0aGlzIGNoYW5uZWwgKi8KLQkJc3dpdGNoKG1ib3gtPmRhdGFbMV0gJiAweDM4KQotCQl7Ci0JCQljYXNlIDB4MDA6IAotCQkJCWNoYW4tPnR4X3BrdF9zaXplID0gMTY7IAotCQkJCWJyZWFrOwotCQkJY2FzZSAweDA4OiAKLQkJCQljaGFuLT50eF9wa3Rfc2l6ZSA9IDMyOyAKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgxMDogCi0JCQkJY2hhbi0+dHhfcGt0X3NpemUgPSA2NDsgCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MTg6IAotCQkJCWNoYW4tPnR4X3BrdF9zaXplID0gMTI4OyAKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgyMDogCi0JCQkJY2hhbi0+dHhfcGt0X3NpemUgPSAyNTY7IAotCQkJCWJyZWFrOwotCQkJY2FzZSAweDI4OiAKLQkJCQljaGFuLT50eF9wa3Rfc2l6ZSA9IDUxMjsgCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MzA6IAotCQkJCWNoYW4tPnR4X3BrdF9zaXplID0gMTAyNDsgCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGNhcmQtPnUueC5sb2dnaW5nKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgcGFja2V0IHNpemUgb24gTENOICVkIGlzICVkLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBsY24sIGNoYW4tPnR4X3BrdF9zaXplKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVBsYWNlIFguMjUgY2FsbC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9wbGFjZV9jYWxsIChzZGxhX3QqIGNhcmQsIHgyNV9jaGFubmVsX3QqIGNoYW4pCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCWNoYXIgc3RyWzY0XTsKLQotCi0JaWYgKGNoYW4tPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSl7Ci0JCXNwcmludGYoc3RyLCAiLWQlcyAtdUNDIiwgY2hhbi0+YWRkcik7Ci0JCi0JfWVsc2UgaWYgKGNoYW4tPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQWCkpewotCQlzcHJpbnRmKHN0ciwgIi1kJXMgLXU4MDAwMDAwMDgxMzciLCBjaGFuLT5hZGRyKTsKLQkKLQl9Ci0JCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQlzdHJjcHkobWJveC0+ZGF0YSwgc3RyKTsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBzdHJsZW4oc3RyKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfUExBQ0VfQ0FMTDsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9QTEFDRV9DQUxMLCAwKSk7Ci0KLQlpZiAoIWVycil7Ci0JCWJpbmRfbGNuX3RvX2RldiAoY2FyZCwgY2hhbi0+ZGV2LCBtYm94LT5jbWQubGNuKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUFjY2VwdCBYLjI1IGNhbGwuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfYWNjZXB0X2NhbGwgKHNkbGFfdCogY2FyZCwgaW50IGxjbiwgaW50IHFkbSkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5sY24gICAgID0gbGNuOwotCQltYm94LT5jbWQucWRtICAgICA9IHFkbTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfQUNDRVBUX0NBTEw7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfQUNDRVBUX0NBTEwsIGxjbikpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlDbGVhciBYLjI1IGNhbGwuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfY2xlYXJfY2FsbCAoc2RsYV90KiBjYXJkLCBpbnQgbGNuLCBpbnQgY2F1c2UsIGludCBkaWFnbikKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5sY24gICAgID0gbGNuOwotCQltYm94LT5jbWQuY2F1c2UgICA9IGNhdXNlOwotCQltYm94LT5jbWQuZGlhZ24gICA9IGRpYWduOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9DTEVBUl9DQUxMOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0NMRUFSX0NBTEwsIGxjbikpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlTZW5kIFguMjUgZGF0YSBwYWNrZXQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfc2VuZCAoc2RsYV90KiBjYXJkLCBpbnQgbGNuLCBpbnQgcWRtLCBpbnQgbGVuLCB2b2lkKiBidWYpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGNoYXIgY21kOwotCQkKLQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYykKLQkJY21kID0gWDI1X0hETENfV1JJVEU7Ci0JZWxzZQotCQljbWQgPSBYMjVfV1JJVEU7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1lbWNweShtYm94LT5kYXRhLCBidWYsIGxlbik7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gbGVuOwotCQltYm94LT5jbWQubGNuICAgICA9IGxjbjsKLQotCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0JCQltYm94LT5jbWQucGYgPSBxZG07Ci0JCX1lbHNlewkJCQotCQkJbWJveC0+Y21kLnFkbSA9IHFkbTsKLQkJfQotCi0JCW1ib3gtPmNtZC5jb21tYW5kID0gY21kOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgY21kICwgbGNuKSk7Ci0KLQotCS8qIElmIGJ1ZmZlcnMgYXJlIGJ1c3kgdGhlIHJldHVybiBjb2RlIGZvciBMQVBCIEhETEMgaXMKLSAgICAgICAgICogMS4gVGhlIGFib3ZlIGZ1bmN0aW9ucyBhcmUgbG9va2luZyBmb3IgcmV0dXJuIGNvZGUKLSAgICAgICAgICogb2YgWDI1UkVTX05PVF9SRUFEWSBpZiBidXN5LiAqLwotCi0JaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMgJiYgZXJyID09IDEpewotCQllcnIgPSBYMjVSRVNfTk9UX1JFQURZOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlGZXRjaCBYLjI1IGFzeW5jaHJvbm91cyBldmVudHMuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9mZXRjaF9ldmVudHMgKHNkbGFfdCogY2FyZCkKLXsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoc3RhdHVzLT5nZmxhZ3MgJiAweDIwKQotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X0lTX0RBVEFfQVZBSUxBQkxFOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0gCQlpZiAoZXJyKSB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSVNfREFUQV9BVkFJTEFCTEUsIDApOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJWC4yNSBhc3luY2hyb25vdXMgZXZlbnQvZXJyb3IgaGFuZGxlci4KLSAqCQlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGVhY2ggdGltZSBpbnRlcmZhY2UgY29tbWFuZCByZXR1cm5zIAotICoJCW5vbi16ZXJvIHJldHVybiBjb2RlIHRvIGhhbmRsZSBYLjI1IGFzeW5jaHJvbm91cyBldmVudHMgYW5kIAotICoJCWNvbW1vbiBlcnJvcnMuIFJldHVybiBub24temVybyB0byByZXBlYXQgY29tbWFuZCBvciB6ZXJvIHRvIAotICoJCWNhbmNlbCBpdC4KLSAqCi0gKiAJTm90ZXM6Ci0gKiAJMS4gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5LCBhcyBoYW5kbGluZyBzb21lIG9mIHRoZQotICogICAgCWFzeW5jaHJvbm91cyBldmVudHMgKGUuZy4gY2FsbCByZXF1ZXN0KSByZXF1aXJlcyBleGVjdXRpb24gb2YgdGhlCi0gKiAgICAJaW50ZXJmYWNlIGNvbW1hbmQocykgdGhhdCwgaW4gdHVybiwgbWF5IGFsc28gcmV0dXJuIGFzeW5jaHJvbm91cwotICogICAgCWV2ZW50cy4gIFRvIGF2b2lkIHJlLWVudHJhbmN5IHByb2JsZW1zIHdlIGNvcHkgbWFpbGJveCB0byBkeW5hbWljYWxseQotICogICAgCWFsbG9jYXRlZCBtZW1vcnkgYmVmb3JlIHByb2Nlc3NpbmcgZXZlbnRzLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1X2Vycm9yIChzZGxhX3QqIGNhcmQsIGludCBlcnIsIGludCBjbWQsIGludCBsY24pCi17Ci0JaW50IHJldHJ5ID0gMTsKLQl1bnNpZ25lZCBkbGVuID0gKChUWDI1TWJveCopY2FyZC0+bWJveCktPmNtZC5sZW5ndGg7Ci0JVFgyNU1ib3gqIG1iOwotCi0JbWIgPSBrbWFsbG9jKHNpemVvZihUWDI1TWJveCkgKyBkbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAobWIgPT0gTlVMTCkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHgyNV9lcnJvcigpIG91dCBvZiBtZW1vcnkhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQltZW1jcHkobWIsIGNhcmQtPm1ib3gsIHNpemVvZihUWDI1TWJveCkgKyBkbGVuKTsKLQlzd2l0Y2ggKGVycil7Ci0KLQljYXNlIFgyNVJFU19BU1lOQ19QQUNLRVQ6CS8qIFguMjUgYXN5bmNocm9ub3VzIHBhY2tldCB3YXMgcmVjZWl2ZWQgKi8KLQotCQltYi0+ZGF0YVtkbGVuXSA9ICdcMCc7Ci0KLQkJc3dpdGNoIChtYi0+Y21kLnBrdFR5cGUgJiAweDdGKXsKLQotCQljYXNlIEFTRV9DQUxMX1JRU1Q6CQkvKiBpbmNvbWluZyBjYWxsICovCi0JCQlyZXRyeSA9IGluY29taW5nX2NhbGwoY2FyZCwgY21kLCBsY24sIG1iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVNFX0NBTExfQUNDRVBURUQ6CQkvKiBjb25uZWN0ZWQgKi8KLQkJCXJldHJ5ID0gY2FsbF9hY2NlcHRlZChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBU0VfQ0xFQVJfUlFTVDoJCS8qIGNhbGwgY2xlYXIgcmVxdWVzdCAqLwotCQkJcmV0cnkgPSBjYWxsX2NsZWFyZWQoY2FyZCwgY21kLCBsY24sIG1iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVNFX1JFU0VUX1JRU1Q6CQkvKiByZXNldCByZXF1ZXN0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogWC4yNSByZXNldCByZXF1ZXN0IG9uIExDTiAlZCEgIgotCQkJCSJDYXVzZToweCUwMlggRGlhZ246MHglMDJYXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIG1iLT5jbWQubGNuLCBtYi0+Y21kLmNhdXNlLAotCQkJCW1iLT5jbWQuZGlhZ24pOwotCQkJYXBpX29vYl9ldmVudCAoY2FyZCxtYik7Ci0JCQlicmVhazsKLQotCQljYXNlIEFTRV9SRVNUQVJUX1JRU1Q6CQkvKiByZXN0YXJ0IHJlcXVlc3QgKi8KLQkJCXJldHJ5ID0gcmVzdGFydF9ldmVudChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBU0VfQ0xFQVJfQ09ORlJNOgotCQkJaWYgKGNsZWFyX2NvbmZpcm1fZXZlbnQgKGNhcmQsbWIpKQotCQkJCWJyZWFrOwotCi0JCQkvKiBJIHVzZSB0aGUgZ290byBzdGF0ZW1lbnQgaGVyZSBzbyBpZiAKLQkgICAgICAgICAgICAgICAgICogc29tZWJvZHkgaW5zZXJ0cyBjb2RlIGJldHdlZW4gdGhlCi0gICAgICAgIAkgICAgICAgICAqIGNhc2UgYW5kIGRlZmF1bHQsIHdlIHdpbGwgbm90IGhhdmUKLSAgICAgICAgICAgICAgICAJICogZ2hvc3QgcHJvYmxlbXMgKi8KLQotCQkJZ290byBkZmx0XzE7Ci0KLQkJZGVmYXVsdDoKLWRmbHRfMToKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IGV2ZW50IDB4JTAyWCBvbiBMQ04gJWQhICIKLQkJCQkiQ2F1c2U6MHglMDJYIERpYWduOjB4JTAyWFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYi0+Y21kLnBrdFR5cGUsCi0JCQkJbWItPmNtZC5sY24sIG1iLT5jbWQuY2F1c2UsIG1iLT5jbWQuZGlhZ24pOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBYMjVSRVNfUFJPVE9fVklPTEFUSU9OOgkvKiBYLjI1IHByb3RvY29sIHZpb2xhdGlvbiBpbmRpY2F0aW9uICovCi0KLQkJLyogQnVnIEZpeDogTWFyIDE0IDIwMDAKLSAgICAgICAgICAgICAgICAgKiBUaGUgUHJvdG9jb2wgdmlvbGF0aW9uIGVycm9yIGNvbmRpdGlvbnMgd2VyZSAgCi0gICAgICAgICAgICAgICAgICogbm90IGhhbmRsZWQgcHJldmlvdXNseSAqLwotCi0JCXN3aXRjaCAobWItPmNtZC5wa3RUeXBlICYgMHg3Ril7Ci0KLQkJY2FzZSBQVkVfQ0xFQVJfUlFTVDoJLyogQ2xlYXIgcmVxdWVzdCAqLwkJCi0JCQlyZXRyeSA9IGNhbGxfY2xlYXJlZChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7CQotCi0JCWNhc2UgUFZFX1JFU0VUX1JRU1Q6CS8qIFJlc2V0IHJlcXVlc3QgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IHJlc2V0IHJlcXVlc3Qgb24gTENOICVkISAiCi0JCQkJIkNhdXNlOjB4JTAyWCBEaWFnbjoweCUwMlhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgbWItPmNtZC5sY24sIG1iLT5jbWQuY2F1c2UsCi0JCQkJbWItPmNtZC5kaWFnbik7Ci0JCQlhcGlfb29iX2V2ZW50IChjYXJkLG1iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFZFX1JFU1RBUlRfUlFTVDoJLyogUmVzdGFydCByZXF1ZXN0ICovCi0JCQlyZXRyeSA9IHJlc3RhcnRfZXZlbnQoY2FyZCwgY21kLCBsY24sIG1iKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQgOgotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogWC4yNSBwcm90b2NvbCB2aW9sYXRpb24gb24gTENOICVkISAiCi0JCQkJIlBhY2tldDoweCUwMlggQ2F1c2U6MHglMDJYIERpYWduOjB4JTAyWFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYi0+Y21kLmxjbiwKLQkJCQltYi0+Y21kLnBrdFR5cGUgJiAweDdGLCBtYi0+Y21kLmNhdXNlLCBtYi0+Y21kLmRpYWduKTsKLQkJCWFwaV9vb2JfZXZlbnQoY2FyZCxtYik7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIDB4NDI6CS8qIFguMjUgdGltZW91dCAqLwotCQlyZXRyeSA9IHRpbWVvdXRfZXZlbnQoY2FyZCwgY21kLCBsY24sIG1iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4NDM6CS8qIFguMjUgcmV0cnkgbGltaXQgZXhjZWVkZWQgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBleGNlZWRlZCBYLjI1IHJldHJ5IGxpbWl0IG9uIExDTiAlZCEgIgotCQkJIlBhY2tldDoweCUwMlggRGlhZ246MHglMDJYXG4iLCBjYXJkLT5kZXZuYW1lLAotCQkJbWItPmNtZC5sY24sIG1iLT5jbWQucGt0VHlwZSwgbWItPmNtZC5kaWFnbikKLQkJOwotCQlicmVhazsKLQotCWNhc2UgMHgwODoJLyogbW9kZW0gZmFpbHVyZSAqLwotI2lmbmRlZiBNT0RFTV9OT1RfTE9HCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBtb2RlbSBmYWlsdXJlIVxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0jZW5kaWYgLyogTU9ERU1fTk9UX0xPRyAqLwotCQlhcGlfb29iX2V2ZW50KGNhcmQsbWIpOwotCQlicmVhazsKLQotCWNhc2UgMHgwOToJLyogTjIgcmV0cnkgbGltaXQgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGV4Y2VlZGVkIEhETEMgcmV0cnkgbGltaXQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWFwaV9vb2JfZXZlbnQoY2FyZCxtYik7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDA2OgkvKiB1bm51bWJlcmVkIGZyYW1lIHdhcyByZWNlaXZlZCB3aGlsZSBpbiBBQk0gKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmVkIFVubnVtYmVyZWQgZnJhbWUgMHglMDJYIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIG1iLT5kYXRhWzBdKTsKLQkJYXBpX29vYl9ldmVudChjYXJkLG1iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENNRF9USU1FT1VUOgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb21tYW5kIDB4JTAyWCB0aW1lZCBvdXQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY21kKQotCQk7Ci0JCXJldHJ5ID0gMDsJLyogYWJvcnQgY29tbWFuZCAqLwotCQlicmVhazsKLQotCWNhc2UgWDI1UkVTX05PVF9SRUFEWToKLQkJcmV0cnkgPSAxOwotCQlicmVhazsKLQotCWNhc2UgMHgwMToKLQkJaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpCi0JCQlicmVhazsKLQotCQlpZiAobWItPmNtZC5jb21tYW5kID09IDB4MTYpCi0JCQlicmVhazsKLQkJLyogSSB1c2UgdGhlIGdvdG8gc3RhdGVtZW50IGhlcmUgc28gaWYgCi0gICAgICAgICAgICAgICAgICogc29tZWJvZHkgaW5zZXJ0cyBjb2RlIGJldHdlZW4gdGhlCi0gICAgICAgICAgICAgICAgICogY2FzZSBhbmQgZGVmYXVsdCwgd2Ugd2lsbCBub3QgaGF2ZQotICAgICAgICAgICAgICAgICAqIGdob3N0IHByb2JsZW1zICovCi0JCWdvdG8gZGZsdF8yOwotCi0JZGVmYXVsdDoKLWRmbHRfMjoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvbW1hbmQgMHglMDJYIHJldHVybmVkIDB4JTAyWCEgTGNuICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY21kLCBlcnIsIG1iLT5jbWQubGNuKQotCQk7Ci0JCXJldHJ5ID0gMDsJLyogYWJvcnQgY29tbWFuZCAqLwotCX0KLQlrZnJlZShtYik7Ci0JcmV0dXJuIHJldHJ5OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICoJWC4yNSBBc3luY2hyb25vdXMgRXZlbnQgSGFuZGxlcnMKLSAqIAlUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgeDI1X2Vycm9yKCkgYW5kIHNob3VsZCByZXR1cm4gMCwgaWYKLSAqIAl0aGUgY29tbWFuZCByZXN1bHRpbmcgaW4gdGhlIGFzeW5jaHJvbm91cyBldmVudCBtdXN0IGJlIGFib3J0ZWQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqSGFuZGxlIFguMjUgaW5jb21pbmcgY2FsbCByZXF1ZXN0LgotICoJUkZDIDEzNTYgZXN0YWJsaXNoZXMgdGhlIGZvbGxvd2luZyBydWxlczoKLSAqCTEuIFRoZSBmaXJzdCBvY3RldCBpbiB0aGUgQ2FsbCBVc2VyIERhdGEgKENVRCkgZmllbGQgb2YgdGhlIGNhbGwKLSAqICAgICAJICAgcmVxdWVzdCBwYWNrZXQgY29udGFpbnMgTkxQSUQgaWRlbnRpZnlpbmcgcHJvdG9jb2wgZW5jYXBzdWxhdGlvbgotICogCTIuIENhbGxzIE1VU1QgTk9UIGJlIGFjY2VwdGVkIHVubGVzcyByb3V0ZXIgc3VwcG9ydHMgcmVxdWVzdGVkCi0gKiAgIAkgICBwcm90b2NvbCBlbmNhcHN1bGF0aW9uLgotICoJMy4gQSBkaWFnbm9zdGljIGNvZGUgMjQ5IGRlZmluZWQgYnkgSVNPL0lFQyA4MjA4IG1heSBiZSB1c2VkIAotICoJICAgd2hlbiBjbGVhcmluZyBhIGNhbGwgYmVjYXVzZSBwcm90b2NvbCBlbmNhcHN1bGF0aW9uIGlzIG5vdCAKLSAqCSAgIHN1cHBvcnRlZC4KLSAqCTQuIElmIGFuIGluY29taW5nIGNhbGwgaXMgcmVjZWl2ZWQgd2hpbGUgYSBjYWxsIHJlcXVlc3QgaXMgCi0gKgkgICBwZW5kaW5nIChpLmUuIGNhbGwgY29sbGlzaW9uIGhhcyBvY2N1cnJlZCksIHRoZSBpbmNvbWluZyBjYWxsIAotICoJICAgc2hhbGwgYmUgcmVqZWN0ZWQgYW5kIGNhbGwgcmVxdWVzdCBzaGFsbCBiZSByZXRyaWVkLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgaW5jb21pbmdfY2FsbCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpCi17Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0JaW50IG5ld19sY24gPSBtYi0+Y21kLmxjbjsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gZ2V0X2Rldl9ieV9sY24od2FuZGV2LCBuZXdfbGNuKTsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gTlVMTDsKLQlpbnQgYWNjZXB0ID0gMDsJCS8qIHNldCB0byAnMScgaWYgby5rLiB0byBhY2NlcHQgY2FsbCAqLwotCXVuc2lnbmVkIGludCB1c2VyX2RhdGE7Ci0JeDI1X2NhbGxfaW5mb190KiBpbmZvOwotCQotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBjYWxsIGNvbGxpc2lvbiAqLwotCWlmIChkZXYgIT0gTlVMTCkKLQl7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlczogWC4yNSBpbmNvbWluZyBjYWxsIGNvbGxpc2lvbiBvbiBMQ04gJWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgbmV3X2xjbik7Ci0KLQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIE1ha2Ugc3VyZSBEIGJpdCBpcyBub3Qgc2V0IGluIGNhbGwgcmVxdWVzdCAqLwotLy9GSVhNRTogVEhJUyBJUyBOT1QgVFVSRSAhISEhIFRBS0UgSVQgT1VUCi0vLwlpZiAobWItPmNtZC5xZG0gJiAweDAyKQotLy8JewotLy8JCXByaW50ayhLRVJOX0lORk8KLS8vCQkJIiVzOiBYLjI1IGluY29taW5nIGNhbGwgb24gTENOICVkIHdpdGggRC1iaXQgc2V0IVxuIiwKLS8vCQkJY2FyZC0+ZGV2bmFtZSwgbmV3X2xjbik7Ci0vLwotLy8JCXgyNV9jbGVhcl9jYWxsKGNhcmQsIG5ld19sY24sIDAsIDApOwotLy8JCXJldHVybiAxOwotLy8JfQotCi0JLyogUGFyc2UgY2FsbCByZXF1ZXN0IGRhdGEgKi8KLQlpbmZvID0ga21hbGxvYyhzaXplb2YoeDI1X2NhbGxfaW5mb190KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGluZm8gPT0gTlVMTCkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzOiBub3QgZW5vdWdoIG1lbW9yeSB0byBwYXJzZSBYLjI1IGluY29taW5nIGNhbGwgIgotCQkJIm9uIExDTiAlZCFcbiIsIGNhcmQtPmRldm5hbWUsIG5ld19sY24pOwotCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJcmV0dXJuIDE7Ci0JfQotIAotCXBhcnNlX2NhbGxfaW5mbyhtYi0+ZGF0YSwgaW5mbyk7Ci0KLQlpZiAoY2FyZC0+dS54LmxvZ2dpbmcpCi0JCXByaW50ayhLRVJOX0lORk8gIlxuJXM6IFguMjUgaW5jb21pbmcgY2FsbCBvbiBMQ04gJWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgbmV3X2xjbik7Ci0KLQkvKiBDb252ZXIgdGhlIGZpcnN0IHR3byBBU0NJSSBjaGFyYWN0ZXJzIGludG8gYW4KLSAgICAgICAgICogaW50ZXJnZXIuIFVzZWQgdG8gY2hlY2sgdGhlIGluY29taW5nIHByb3RvY29sIAotICAgICAgICAgKi8KLQl1c2VyX2RhdGEgPSBoZXhfdG9fdWludChpbmZvLT51c2VyLDIpOwotCi0JLyogRmluZCBhdmFpbGFibGUgY2hhbm5lbCAqLwotCWZvciAoZGV2ID0gd2FuZGV2LT5kZXY7IGRldjsgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkgewotCQljaGFuID0gZGV2LT5wcml2OwotCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghY2hhbi0+Y29tbW9uLnN2YyB8fCAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9ESVNDT05ORUNURUQpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHVzZXJfZGF0YSA9PSBOTFBJRF9JUCAmJiBjaGFuLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiSVAgcGFja2V0IGJ1dCBjb25maWd1cmVkIGZvciBJUFggOiAleCwgJXhcbiIsCi0JCQkJICAgICAgIGh0b25zKGNoYW4tPnByb3RvY29sKSwgaW5mby0+dXNlclswXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQotCQlpZiAodXNlcl9kYXRhID09IE5MUElEX1NOQVAgJiYgY2hhbi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBYKSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJJUFggcGFja2V0IGJ1dCBjb25maWd1cmVkIGZvciBJUDogJXhcbiIsCi0JCQkJICAgICAgIGh0b25zKGNoYW4tPnByb3RvY29sKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc3RyY21wKGluZm8tPnNyYywgY2hhbi0+YWRkcikgPT0gMCkKLQkJCWJyZWFrOwotCi0JICAgICAgICAvKiBJZiBqdXN0IGFuICdAJyBpcyBzcGVjaWZpZWQsIGFjY2VwdCBhbGwgaW5jb21pbmcgY2FsbHMgKi8KLQkgICAgICAgIGlmIChzdHJjbXAoY2hhbi0+YWRkciwgIiIpID09IDApCi0JICAgICAgICAgICAgICAgIGJyZWFrOwotCX0KLQotCWlmIChkZXYgPT0gTlVMTCl7Ci0KLQkJLyogSWYgdGhlIGNhbGwgaXMgbm90IGZvciBhbnkgV0FOUElQRSBpbnRlcmZhY2VzCi0gICAgICAgICAgICAgICAgICogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIEFQSSBsaXN0ZW5pbmcgcXVldWUKLSAgICAgICAgICAgICAgICAgKiB3YWl0aW5nIGZvciBkYXRhLiBJZiB0aGVyZSBpcyBzZW5kIHRoZSBwYWNrZXQKLSAgICAgICAgICAgICAgICAgKiB1cCB0aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgICovCi0JCWlmIChjYXJkLT5zayAhPSBOVUxMICYmIGNhcmQtPmZ1bmMgIT0gTlVMTCl7Ci0JCQlpZiAoYXBpX2luY29taW5nX2NhbGwoY2FyZCxtYixuZXdfbGNuKSl7Ci0JCQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0JCQl9Ci0JCQlhY2NlcHQgPSAwOwotCQl9ZWxzZXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBjaGFubmVscyBhdmFpbGFibGUhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCi0JCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJfQotCi0JfWVsc2UgaWYgKGluZm8tPm51c2VyID09IDApewotCi0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlczogbm8gdXNlciBkYXRhIGluIGluY29taW5nIGNhbGwgb24gTENOICVkIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIG5ld19sY24pCi0JCTsKLQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0KLQl9ZWxzZSBzd2l0Y2ggKGluZm8tPnVzZXJbMF0pewotCi0JCWNhc2UgMDoJCS8qIG11bHRpcGxleGVkICovCi0JCQljaGFuLT5wcm90b2NvbCA9IGh0b25zKDApOwotCQkJYWNjZXB0ID0gMTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTkxQSURfSVA6CS8qIElQIGRhdGFncmFtcyAqLwotCQkJYWNjZXB0ID0gMTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTkxQSURfU05BUDogLyogSVBYIGRhdGFncmFtcyAqLwotCQkJYWNjZXB0ID0gMTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiB1bnN1cHBvcnRlZCBOTFBJRCAweCUwMlggaW4gaW5jb21pbmcgY2FsbCAiCi0JCQkJIm9uIExDTiAlZCFcbiIsIGNhcmQtPmRldm5hbWUsIGluZm8tPnVzZXJbMF0sIG5ld19sY24pOwotCQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMjQ5KTsKLQl9Ci0JCi0JaWYgKGFjY2VwdCAmJiAoeDI1X2FjY2VwdF9jYWxsKGNhcmQsIG5ld19sY24sIDApID09IENNRF9PSykpewotCi0JCWJpbmRfbGNuX3RvX2RldiAoY2FyZCwgY2hhbi0+ZGV2LCBuZXdfbGNuKTsKLQkJCi0JCWlmICh4MjVfZ2V0X2NoYW5fY29uZihjYXJkLCBjaGFuKSA9PSBDTURfT0spCi0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCQllbHNlIAotCQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0JfQotCWtmcmVlKGluZm8pOwotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJSGFuZGxlIGFjY2VwdGVkIGNhbGwuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBjYWxsX2FjY2VwdGVkIChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYikKLXsKLQl1bnNpZ25lZCBuZXdfbGNuID0gbWItPmNtZC5sY247Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBuZXdfbGNuKTsKLQl4MjVfY2hhbm5lbF90KiBjaGFuOwotCi0JaWYgKGRldiA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBjbGVhcmluZyBvcnBoYW5lZCBjb25uZWN0aW9uIG9uIExDTiAlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuKTsKLQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChjYXJkLT51LngubG9nZ2luZykJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IGNhbGwgYWNjZXB0ZWQgb24gRGV2ICVzIGFuZCBMQ04gJWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBuZXdfbGNuKTsKLQotCS8qIEdldCBjaGFubmVsIGNvbmZpZ3VyYXRpb24gYW5kIG5vdGlmeSByb3V0ZXIgKi8KLQljaGFuID0gZGV2LT5wcml2OwotCWlmICh4MjVfZ2V0X2NoYW5fY29uZihjYXJkLCBjaGFuKSAhPSBDTURfT0spCi0JewotCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0Jc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fQ09OTkVDVEVEKTsKLQotCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LG1iKTsKLQkJYmluZF9sY25fdG9fZGV2IChjYXJkLCBkZXYsIG5ld19sY24pOwotCX0KLQotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJSGFuZGxlIGNsZWFyZWQgY2FsbC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGNhbGxfY2xlYXJlZCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpCi17Ci0JdW5zaWduZWQgbmV3X2xjbiA9IG1iLT5jbWQubGNuOwotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCwgbmV3X2xjbik7Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbjsKLQl1bnNpZ25lZCBjaGFyIG9sZF9zdGF0ZTsKLQotCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IGNsZWFyIHJlcXVlc3Qgb24gTENOICVkISBDYXVzZToweCUwMlggIgotCQkiRGlhZ246MHglMDJYXG4iLAotCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuLCBtYi0+Y21kLmNhdXNlLCBtYi0+Y21kLmRpYWduKTsKLQl9Ci0KLQlpZiAoZGV2ID09IE5VTEwpeyAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgY2xlYXIgcmVxdWVzdCA6IE5vIGRldmljZSBmb3IgY2xlYXJcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWNoYW49ZGV2LT5wcml2OwotCi0Jb2xkX3N0YXRlID0gY2hhbi0+Y29tbW9uLnN0YXRlOwotCi0Jc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVEVEKTsKLQotCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0KLQkJc3dpdGNoIChvbGRfc3RhdGUpewotCQkKLQkJY2FzZSBXQU5fQ09OTkVDVElORzoKLQkJCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LG1iKTsKLQkJCWJyZWFrOwotCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQlzZW5kX29vYl9tc2coY2FyZCxkZXYsbWIpOwkJCQkKLQkJCWJyZWFrOwotCQl9Ci0JfQotCQotCXJldHVybiAoKGNtZCA9PSBYMjVfV1JJVEUpICYmIChsY24gPT0gbmV3X2xjbikpID8gMCA6IDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlIYW5kbGUgWC4yNSByZXN0YXJ0IGV2ZW50LgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgcmVzdGFydF9ldmVudCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpCi17Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCXVuc2lnbmVkIGNoYXIgb2xkX3N0YXRlOwotCi0JcHJpbnRrKEtFUk5fSU5GTwotCQkiJXM6IFguMjUgcmVzdGFydCByZXF1ZXN0ISBDYXVzZToweCUwMlggRGlhZ246MHglMDJYXG4iLAotCQljYXJkLT5kZXZuYW1lLCBtYi0+Y21kLmNhdXNlLCBtYi0+Y21kLmRpYWduKTsKLQotCS8qIGRvd24gYWxsIGxvZ2ljYWwgY2hhbm5lbHMgKi8KLQlmb3IgKGRldiA9IHdhbmRldi0+ZGV2OyBkZXY7IGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpIHsKLQkJY2hhbj1kZXYtPnByaXY7Ci0JCW9sZF9zdGF0ZSA9IGNoYW4tPmNvbW1vbi5zdGF0ZTsKLQotCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCQlzd2l0Y2ggKG9sZF9zdGF0ZSl7Ci0JCQotCQkJY2FzZSBXQU5fQ09OTkVDVElORzoKLQkJCQlzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChjYXJkLGRldixtYik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQkJc2VuZF9vb2JfbXNnKGNhcmQsZGV2LG1iKTsJCQkJCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChjbWQgPT0gWDI1X1dSSVRFKSA/IDAgOiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgdGltZW91dCBldmVudC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHRpbWVvdXRfZXZlbnQgKHNkbGFfdCogY2FyZCwgaW50IGNtZCwgaW50IGxjbiwgVFgyNU1ib3gqIG1iKQotewotCXVuc2lnbmVkIG5ld19sY24gPSBtYi0+Y21kLmxjbjsKLQotCWlmIChtYi0+Y21kLnBrdFR5cGUgPT0gMHgwNSkJLyogY2FsbCByZXF1ZXN0IHRpbWUgb3V0ICovCi0JewotCQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsbmV3X2xjbik7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgY2FsbCB0aW1lZCB0aW1lb3V0IG9uIExDTiAlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuKTsKLQotCQlpZiAoZGV2KXsKLQkJCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkJCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LGNhcmQtPm1ib3gpOwotCQkJfQotCQl9Ci0JfWVsc2V7IAotCQlwcmludGsoS0VSTl9JTkZPICIlczogWC4yNSBwYWNrZXQgMHglMDJYIHRpbWVvdXQgb24gTENOICVkIVxuIiwKLQkJY2FyZC0+ZGV2bmFtZSwgbWItPmNtZC5wa3RUeXBlLCBuZXdfbGNuKTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qIAotICoJTWlzY2VsbGFuZW91cyAKLSAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJRXN0YWJsaXNoIHBoeXNpY2FsIGNvbm5lY3Rpb24uCi0gKiAJbyBvcGVuIEhETEMgYW5kIHJhaXNlIERUUgotICoKLSAqIAlSZXR1cm46CQkwCWNvbm5lY3Rpb24gZXN0YWJsaXNoZWQKLSAqCQkJMQljb25uZWN0aW9uIGlzIGluIHByb2dyZXNzCi0gKgkJCTwwCWVycm9yCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGNvbm5lY3QgKHNkbGFfdCogY2FyZCkKLXsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCWlmICh4MjVfb3Blbl9oZGxjKGNhcmQpIHx8IHgyNV9zZXR1cF9oZGxjKGNhcmQpKQotCQlyZXR1cm4gLUVJTzsKLQotCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNUSU5HKTsKLQotCXgyNV9zZXRfaW50cl9tb2RlKGNhcmQsIElOVFJfT05fVElNRVIpOyAKLQlzdGF0dXMtPmltYXNrICY9IH5JTlRSX09OX1RJTUVSOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiAJVGVhciBkb3duIHBoeXNpY2FsIGNvbm5lY3Rpb24uCi0gKiAJbyBjbG9zZSBIRExDIGxpbmsKLSAqIAlvIGRyb3AgRFRSCi0gKgotICogCVJldHVybjoJCTAKLSAqCQkJPDAJZXJyb3IKLSAqLwotCi1zdGF0aWMgaW50IGRpc2Nvbm5lY3QgKHNkbGFfdCogY2FyZCkKLXsKLQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQl4MjVfc2V0X2ludHJfbW9kZShjYXJkLCBJTlRSX09OX1RJTUVSKTsJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0IGV4Y2VwdCB0aW1lciAqLwotCXgyNV9jbG9zZV9oZGxjKGNhcmQpOwkJCS8qIGNsb3NlIEhETEMgbGluayAqLwotCXgyNV9zZXRfZHRyKGNhcmQsIDApOwkJCS8qIGRyb3AgRFRSICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBGaW5kIG5ldHdvcmsgZGV2aWNlIGJ5IGl0cyBjaGFubmVsIG51bWJlci4KLSAqLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UqIGdldF9kZXZfYnlfbGNuKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsCi0JCQkJCSB1bnNpZ25lZCBsY24pCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLQotCWZvciAoZGV2ID0gd2FuZGV2LT5kZXY7IGRldjsgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkKLQkJaWYgKCgoeDI1X2NoYW5uZWxfdCopZGV2LT5wcml2KS0+Y29tbW9uLmxjbiA9PSBsY24pIAotCQkJYnJlYWs7Ci0JcmV0dXJuIGRldjsKLX0KLQotLyoKLSAqIAlJbml0aWF0ZSBjb25uZWN0aW9uIG9uIHRoZSBsb2dpY2FsIGNoYW5uZWwuCi0gKiAJbyBmb3IgUFZDIHdlIGp1c3QgZ2V0IGNoYW5uZWwgY29uZmlndXJhdGlvbgotICogCW8gZm9yIFNWQ3MgcGxhY2UgYW4gWC4yNSBjYWxsCi0gKgotICogCVJldHVybjoJCTAJY29ubmVjdGVkCi0gKgkJCT4wCWNvbm5lY3Rpb24gaW4gcHJvZ3Jlc3MKLSAqCQkJPDAJZmFpbHVyZQotICovCi0KLXN0YXRpYyBpbnQgY2hhbl9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCi0JaWYgKGNoYW4tPmNvbW1vbi5zdmMgJiYgY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKXsKLQkJaWYgKCFjaGFuLT5hZGRyWzBdKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBEZXN0aW5hdGlvbiBBZGRyZXNzXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwkvKiBubyBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBsYWNpbmcgWC4yNSBjYWxsIHRvICVzIC4uLlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNoYW4tPmFkZHIpOwotCi0JCWlmICh4MjVfcGxhY2VfY2FsbChjYXJkLCBjaGFuKSAhPSBDTURfT0spCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNUSU5HKTsKLQkJcmV0dXJuIDE7Ci0JfWVsc2V7Ci0JCWlmICh4MjVfZ2V0X2NoYW5fY29uZihjYXJkLCBjaGFuKSAhPSBDTURfT0spCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIAlEaXNjb25uZWN0IGxvZ2ljYWwgY2hhbm5lbC4KLSAqIAlvIGlmIFNWQyB0aGVuIGNsZWFyIFguMjUgY2FsbAotICovCi0KLXN0YXRpYyBpbnQgY2hhbl9kaXNjKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQotCWlmIChjaGFuLT5jb21tb24uc3ZjKXsgCi0JCXgyNV9jbGVhcl9jYWxsKGNoYW4tPmNhcmQsIGNoYW4tPmNvbW1vbi5sY24sIDAsIDApOwotCi0JCS8qIEZvciBBUEkgd2UgZGlzY29ubmVjdCBvbiBjbGVhcgotICAgICAgICAgICAgICAgICAqIGNvbmZpcm1hdGlvbi4gCi0gICAgICAgICAgICAgICAgICovCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkKLQkJCXJldHVybiAwOwotCX0KLQotCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAJU2V0IGxvZ2ljYWwgY2hhbm5lbCBzdGF0ZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBzZXRfY2hhbl9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBpbnQgc3RhdGUpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzYXZlX2ZsYWdzKGZsYWdzKTsKLQljbGkoKTsKLQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IHN0YXRlKQotCXsKLQkJc3dpdGNoIChzdGF0ZSkKLQkJewotCQkJY2FzZSBXQU5fQ09OTkVDVEVEOgotCQkJCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCQkJIiVzOiBpbnRlcmZhY2UgJXMgY29ubmVjdGVkLCBsY24gJWkgIVxuIiwgCi0JCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsY2hhbi0+Y29tbW9uLmxjbik7Ci0JCQkJfQotCQkJCSoodW5zaWduZWQgc2hvcnQqKWRldi0+ZGV2X2FkZHIgPSBodG9ucyhjaGFuLT5jb21tb24ubGNuKTsKLQkJCQljaGFuLT5pX3RpbWVvdXRfc29mYXIgPSBqaWZmaWVzOwotCi0JCQkJLyogTEFQQiBpcyBQVkMgQmFzZWQgKi8KLQkJCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYykKLQkJCQkJY2hhbi0+Y29tbW9uLnN2Yz0wOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCQkJIiVzOiBpbnRlcmZhY2UgJXMgY29ubmVjdGluZywgbGNuICVpIC4uLlxuIiwgCi0JCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsIGNoYW4tPmNvbW1vbi5sY24pOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotCQkJCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCQkJIiVzOiBpbnRlcmZhY2UgJXMgZGlzY29ubmVjdGVkLCBsY24gJWkgIVxuIiwgCi0JCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsY2hhbi0+Y29tbW9uLmxjbik7Ci0JCQkJfQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5kaXNjb25uZWN0LDApOwotCQkJCQotCQkJCWlmIChjaGFuLT5jb21tb24uc3ZjKSB7Ci0JCQkJCSoodW5zaWduZWQgc2hvcnQqKWRldi0+ZGV2X2FkZHIgPSAwOwotCQkJCQljYXJkLT51Lnguc3ZjX3RvX2Rldl9tYXBbKGNoYW4tPmNvbW1vbi5sY24lWDI1X01BWF9DSEFOKV09TlVMTDsKLQkJICAgICAgICAgICAgICAgIAljaGFuLT5jb21tb24ubGNuID0gMDsKLQkJCQl9Ci0KLQkJCQlpZiAoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKXsKLQkJCQkJY2hhbi0+dHJhbnNtaXRfbGVuZ3RoPTA7Ci0JCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5kcml2ZXJfYnVzeSwwKTsKLQkJCQkJY2hhbi0+dHhfb2Zmc2V0PTA7Ci0JCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpewotCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIFdBTl9ESVNDT05ORUNUSU5HOgotCQkJCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCQkiXG4lczogaW50ZXJmYWNlICVzIGRpc2Nvbm5lY3RpbmcsIGxjbiAlaSAuLi5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsY2hhbi0+Y29tbW9uLmxjbik7Ci0JCQkJfQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5kaXNjb25uZWN0LDApOwotCQkJCWJyZWFrOwotCQl9Ci0JCWNoYW4tPmNvbW1vbi5zdGF0ZSA9IHN0YXRlOwotCX0KLQljaGFuLT5zdGF0ZV90aWNrID0gamlmZmllczsKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLX0KLQotLyoKLSAqIAlTZW5kIHBhY2tldCBvbiBhIGxvZ2ljYWwgY2hhbm5lbC4KLSAqCQlXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0eF9za2IgZmllbGQgb2YgdGhlIGNoYW5uZWwgZGF0YSAKLSAqCQlzcGFjZSBwb2ludHMgdG8gdGhlIHRyYW5zbWl0IHNvY2tldCBidWZmZXIuICBXaGVuIHRyYW5zbWlzc2lvbiAKLSAqCQlpcyBjb21wbGV0ZSwgcmVsZWFzZSBzb2NrZXQgYnVmZmVyIGFuZCByZXNldCAndGJ1c3knIGZsYWcuCi0gKgotICogCVJldHVybjoJCTAJLSB0cmFuc21pc3Npb24gY29tcGxldGUKLSAqCQkJMQktIGJ1c3kKLSAqCi0gKiAJTm90ZXM6Ci0gKiAJMS4gSWYgcGFja2V0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gTVRVIGZvciB0aGlzIGNoYW5uZWwsIHdlJ2xsIGZyYWdtZW50Ci0gKiAgICAJdGhlIHBhY2tldCBpbnRvICdjb21wbGV0ZSBzZXF1ZW5jZScgdXNpbmcgTS1iaXQuCi0gKiAJMi4gV2hlbiB0cmFuc21pc3Npb24gaXMgY29tcGxldGUsIGFuIGV2ZW50IG5vdGlmaWNhdGlvbiBzaG91bGQgYmUgaXNzdWVkCi0gKiAgICAJdG8gdGhlIHJvdXRlci4KLSAqLwotCi1zdGF0aWMgaW50IGNoYW5fc2VuZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB2b2lkKiBidWZmLCB1bnNpZ25lZCBkYXRhX2xlbiwKLQkJICAgICB1bnNpZ25lZCBjaGFyIHR4X2ludHIpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCXVuc2lnbmVkIGxlbj0wLCBxZG09MCwgcmVzPTAsIG9yaWdfbGVuID0gMDsKLQl2b2lkICpkYXRhOwotCi0JLyogQ2hlY2sgdG8gc2VlIGlmIGNoYW5uZWwgaXMgcmVhZHkgKi8KLQlpZiAoKCEoc3RhdHVzLT5jZmxhZ3NbY2hhbi0+Y2hfaWR4XSAmIDB4NDApICYmICFjYXJkLT51LnguTEFQQl9oZGxjKSAgfHwgCi0gICAgICAgICAgICAgISgqY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyAmIDB4NDApKXsgCi0gICAgICAgICAgICAKLQkJaWYgKCF0eF9pbnRyKXsKLQkJCXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0IChkZXYsIGJ1ZmYsIGRhdGFfbGVuKTsKLQkJCXJldHVybiAwOwotCQl9ZWxzZXsKLQkJCS8qIEJ5IHJldHVybmluZyAwIHRvIHR4X2ludHIgdGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgKi8KLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiwgVHggaW50ciBjb3VsZCBub3Qgc2VuZCwgZHJvcHBpbmcgJXM6XG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7Ci0JCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2Jmcl9ub3RfcGFzc2VkX3RvX2FkcHRyOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkvKiBSZW1vdmUgdGhlIEFQSSBIZWFkZXIgKi8KLQkJeDI1YXBpX2hkcl90ICphcGlfZGF0YSA9ICh4MjVhcGlfaGRyX3QgKilidWZmOwotCi0JCS8qIFNldCB0aGUgcWRtIGJpdHMgZnJvbSB0aGUgcGFja2V0IGhlYWRlciAKLSAgICAgICAgICAgICAgICAgKiBVc2VyIGhhcyB0aGUgb3B0aW9uIHRvIHNldCB0aGUgcWRtIGJpdHMKLSAgICAgICAgICAgICAgICAgKi8KLQkJcWRtID0gYXBpX2RhdGEtPnFkbTsKLQotCQlvcmlnX2xlbiA9IGxlbiA9IGRhdGFfbGVuIC0gc2l6ZW9mKHgyNWFwaV9oZHJfdCk7Ci0JCWRhdGEgPSAodW5zaWduZWQgY2hhciopYnVmZiArIHNpemVvZih4MjVhcGlfaGRyX3QpOwotCX1lbHNlewotCQlkYXRhID0gYnVmZjsKLQkJb3JpZ19sZW4gPSBsZW4gPSBkYXRhX2xlbjsKLQl9CQotCi0JaWYgKHR4X2ludHIpewotCQkvKiBXZSBhcmUgaW4gdHhfaW50ciwgbWludXMgdGhlIHR4X29mZnNldCBmcm9tIAotICAgICAgICAgICAgICAgICAqIHRoZSB0b3RhbCBsZW5ndGguIFRoZSB0eF9vZmZzZXQgcGFydCBvZiB0aGUKLQkJICogZGF0YSBoYXMgYWxyZWFkeSBiZWVuIHNlbnQuIEFsc28sIG1vdmUgdGhlIAotCQkgKiBkYXRhIHBvaW50ZXIgdG8gcHJvcGVyIG9mZnNldCBsb2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgKi8KLQkJbGVuIC09IGNoYW4tPnR4X29mZnNldDsKLQkJZGF0YSA9ICh1bnNpZ25lZCBjaGFyKilkYXRhICsgY2hhbi0+dHhfb2Zmc2V0OwotCX0KLQkJCi0JLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIE1UVQotICAgICAgICAgKiBJZiBZRVM6IEN1dCB0aGUgbGVuIHRvIE1UVSBhbmQgc2V0IHRoZSBNIGJpdCAKLSAgICAgICAgICovCi0JaWYgKGxlbiA+IGNoYW4tPnR4X3BrdF9zaXplICYmICFjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJbGVuID0gY2hhbi0+dHhfcGt0X3NpemU7Ci0JCXFkbSB8PSBNX0JJVDsJCQotCX0gCi0KLQotCS8qIFBhc3Mgb25seSBmaXJzdCB0aHJlZSBiaXRzIG9mIHRoZSBxZG0gYnl0ZSB0byB0aGUgc2VuZAotICAgICAgICAgKiByb3V0aW5lLiBJbiBjYXNlIHVzZXIgc2V0cyBhbnkgb3RoZXIgYml0IHdoaWNoIG1pZ2h0Ci0gICAgICAgICAqIGNhdXNlIGVycm9ycy4gCi0gICAgICAgICAqLwotCi0Jc3dpdGNoKHgyNV9zZW5kKGNhcmQsIGNoYW4tPmNvbW1vbi5sY24sIChxZG0mMHgwNyksIGxlbiwgZGF0YSkpewotCQljYXNlIDB4MDA6CS8qIHN1Y2Nlc3MgKi8KLQkJCWNoYW4tPmlfdGltZW91dF9zb2ZhciA9IGppZmZpZXM7Ci0KLQkJCWRldi0+dHJhbnNfc3RhcnQ9amlmZmllczsKLQkJCQotCQkJaWYgKChxZG0gJiBNX0JJVCkgJiYgIWNhcmQtPnUueC5MQVBCX2hkbGMpewotCQkJCWlmICghdHhfaW50cil7Ci0JCQkJCS8qIFRoZSBNIGJpdCB3YXMgc2V0LCB3aGljaCBtZWFucyB0aGF0IHBhcnQgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcGFja2V0IGhhcyBiZWVuIHNlbnQuIENvcHkgdGhlIHBhY2tldCBpbnRvIGEgYnVmZmVyCi0JCQkJICAgICAgICAgKiBhbmQgc2V0IHRoZSBvZmZzZXQgdG8gbGVuLCBzbyBvbiBuZXh0IHR4X2ludGVyIAotCQkJCQkgKiB0aGUgcGFja2V0IHdpbGwgYmUgc2VudCB1c2luZyB0aGUgYmVsb3cgb2Zmc2V0LgotCQkJCQkgKi8KLQkJCQkJY2hhbi0+dHhfb2Zmc2V0ICs9IGxlbjsKLQotCQkJCQkrK2NoYW4tPmlmc3RhdHMudHhfcGFja2V0czsKLQkJCQkJY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQkJCQotCQkJCQlpZiAoY2hhbi0+dHhfb2Zmc2V0IDwgb3JpZ19sZW4pewotCQkJCQkJc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQgKGRldiwgYnVmZiwgZGF0YV9sZW4pOwotCQkJCQl9Ci0JCQkJCXJlcz0wOwotCQkJCX1lbHNlewotCQkJCQkvKiBXZSBhcmUgYWxyZWFkeSBpbiB0eF9pbnRlciwgdGh1cyBkYXRhIGlzIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbiB0aGUgYnVmZmVyLiBVcGRhdGUgdGhlIG9mZnNldCBhbmQgd2FpdCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBuZXh0IHR4X2ludHIuIFdlIGFkZCBvbiB0byB0aGUgb2Zmc2V0LCBzaW5jZSBkYXRhIGNhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIFggbnVtYmVyIG9mIHRpbWVzIGxhcmdlciB0aGFuIG1heCBkYXRhIHNpemUuCi0JCQkJCSAqLwotCQkJCQkrK2NoYW4tPmlmc3RhdHMudHhfcGFja2V0czsKLQkJCQkJY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQkJCQotCQkJCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2Jmcl9wYXNzZWRfdG9fYWRwdHI7Ci0JCQkJCWNoYW4tPnR4X29mZnNldCArPSBsZW47Ci0KLQkJCQkJLyogVGhlIHVzZXIgY2FuIHNldCB0aGUgcWRtIGJpdCBhcyB3ZWxsLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElmIHRoZSBlbnRpcmUgcGFja2V0IHdhcyBzZW50IGFuZCBxZG0gaXMgc3RpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzZXQsIHRoYW4gaXQncyB0aGUgdXNlciB3aG8gaGFzIHNldCB0aGUgTSBiaXQuIEluIHRoYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2FzZSBpbmRpY2F0ZSB0aGF0IHRoZSBwYWNrZXQgd2FzIHNlbmQgYnkgcmV0dXJuaW5nIAotCQkJCQkgKiAwIGFuZCB3YWl0IGZvciBhIG5ldyBwYWNrZXQuIE90aGVyd2lzZSwgd2FpdCBmb3IgbmV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHR4IGludGVycnVwdCB0byBzZW5kIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KLQotCQkJCQlpZiAoY2hhbi0+dHhfb2Zmc2V0IDwgb3JpZ19sZW4pewotCQkJCQkJcmVzPTE7Ci0JCQkJCX1lbHNlewkKLQkJCQkJCXJlcz0wOwotCQkJCQl9Ci0JCQkJfQotCQkJfWVsc2V7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnR4X3BhY2tldHM7Ci0JCQkJY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQkJKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9iZnJfcGFzc2VkX3RvX2FkcHRyOwotCQkJCXJlcz0wOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDMzOgkvKiBUeCBidXN5ICovCi0JCQlpZiAodHhfaW50cil7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFR4X2ludHI6IEJpZyBFcnJvciBkcm9wcGluZyBwYWNrZXQgJXNcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2Jmcl9ub3RfcGFzc2VkX3RvX2FkcHRyOwotCQkJCXJlcz0wOwotCQkJfWVsc2V7Ci0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gCi0JCQkJCSIlczogU2VuZDogQmlnIEVycm9yIHNob3VsZCBoYXZlIHR4OiBzdG9ycmluZyAlc1xuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkJCQlzZXR1cF9mb3JfZGVsYXllZF90cmFuc21pdCAoZGV2LCBidWZmLCBkYXRhX2xlbik7CQotCQkJCXJlcz0xOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoJLyogZmFpbHVyZSAqLwotCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Vycm9yczsKLQkJCWlmICh0eF9pbnRyKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVHhfaW50cjogRmFpbHVyZSB0byBzZW5kLCBkcm9wcGluZyAlc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9iZnJfbm90X3Bhc3NlZF90b19hZHB0cjsKLQkJCQlyZXM9MDsKLQkJCX1lbHNlewotCQkJCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogU2VuZDogRmFpbHVyZSB0byBzZW5kICEhISwgc3RvcmluZyAlc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwkJCQotCQkJCXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0IChkZXYsIGJ1ZmYsIGRhdGFfbGVuKTsKLQkJCQlyZXM9MTsKLQkJCX0KLQkJCWJyZWFrOwkKLQl9Ci0JcmV0dXJuIHJlczsKLX0KLQotCi0vKgotICogCVBhcnNlIFguMjUgY2FsbCByZXF1ZXN0IGRhdGEgYW5kIGZpbGwgeDI1X2NhbGxfaW5mb190IHN0cnVjdHVyZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBwYXJzZV9jYWxsX2luZm8gKHVuc2lnbmVkIGNoYXIqIHN0ciwgeDI1X2NhbGxfaW5mb190KiBpbmZvKQotewotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoeDI1X2NhbGxfaW5mb190KSk7Ci0JZm9yICg7ICpzdHI7ICsrc3RyKQotCXsKLQkJaW50IGk7Ci0JCXVuc2lnbmVkIGNoYXIgY2g7Ci0KLQkJaWYgKCpzdHIgPT0gJy0nKSBzd2l0Y2ggKHN0clsxXSkgewotCi0JCQkvKiBUYWtlIG1pbnVzIDIgb2ZmIHRoZSBtYXhpbXVtIHNpemUgc28gdGhhdCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGxhc3QgYnl0ZSBpcyAwLiBUaGlzIHdheSB3ZSBjYW4gdXNlIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICogbWFuaXB1bGF0b24gZnVuY3Rpb25zIG9uIGNhbGwgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCQkJY2FzZSAnZCc6CS8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQkJCQlmb3IgKGkgPSAwOyBpIDwgKE1BWF9YMjVfQUREUl9TSVpFLTIpOyArK2kpewotCQkJCQljaCA9IHN0clsyK2ldOwotCQkJCQlpZiAoaXNzcGFjZShjaCkpIGJyZWFrOwotCQkJCQlpbmZvLT5kZXN0W2ldID0gY2g7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlICdzJzoJLyogc291cmNlIGFkZHJlc3MgKi8KLQkJCQlmb3IgKGkgPSAwOyBpIDwgKE1BWF9YMjVfQUREUl9TSVpFLTIpOyArK2kpewotCQkJCQljaCA9IHN0clsyK2ldOwotCQkJCQlpZiAoaXNzcGFjZShjaCkpIGJyZWFrOwotCQkJCQlpbmZvLT5zcmNbaV0gPSBjaDsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgJ3UnOgkvKiB1c2VyIGRhdGEgKi8KLQkJCQlmb3IgKGkgPSAwOyBpIDwgKE1BWF9YMjVfREFUQV9TSVpFLTIpOyArK2kpewotCQkJCQljaCA9IHN0clsyK2ldOwotCQkJCQlpZiAoaXNzcGFjZShjaCkpIGJyZWFrOwotCQkJCQlpbmZvLT51c2VyW2ldID0gY2g7IAotCQkJCX0KLQkJCQlpbmZvLT5udXNlciA9IGk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgJ2YnOgkvKiBmYWNpbGl0aWVzICovCi0JCQkJZm9yIChpID0gMDsgaSA8IChNQVhfWDI1X0ZBQ0xfU0laRS0yKTsgKytpKXsKLQkJCQkJY2ggPSBzdHJbMitpXTsKLQkJCQkJaWYgKGlzc3BhY2UoY2gpKSBicmVhazsKLQkJCQkJaW5mby0+ZmFjaWxbaV0gPSBjaDsKLQkJCQl9Ci0JCQkJaW5mby0+bmZhY2lsID0gaTsKLQkJCQlicmVhazsKLQkJfQotCX0KLX0KLQotLyoKLSAqIAlDb252ZXJ0IGxpbmUgc3BlZWQgaW4gYnBzIHRvIGEgbnVtYmVyIHVzZWQgYnkgUzUwMiBjb2RlLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJwc190b19zcGVlZF9jb2RlICh1bnNpZ25lZCBsb25nIGJwcykKLXsKLQl1bnNpZ25lZCBjaGFyCW51bWJlcjsKLQotCWlmIChicHMgPD0gMTIwMCkgICAgICAgIG51bWJlciA9IDB4MDE7Ci0JZWxzZSBpZiAoYnBzIDw9IDI0MDApICAgbnVtYmVyID0gMHgwMjsKLQllbHNlIGlmIChicHMgPD0gNDgwMCkgICBudW1iZXIgPSAweDAzOwotCWVsc2UgaWYgKGJwcyA8PSA5NjAwKSAgIG51bWJlciA9IDB4MDQ7Ci0JZWxzZSBpZiAoYnBzIDw9IDE5MjAwKSAgbnVtYmVyID0gMHgwNTsKLQllbHNlIGlmIChicHMgPD0gMzg0MDApICBudW1iZXIgPSAweDA2OwotCWVsc2UgaWYgKGJwcyA8PSA0NTAwMCkgIG51bWJlciA9IDB4MDc7Ci0JZWxzZSBpZiAoYnBzIDw9IDU2MDAwKSAgbnVtYmVyID0gMHgwODsKLQllbHNlIGlmIChicHMgPD0gNjQwMDApICBudW1iZXIgPSAweDA5OwotCWVsc2UgaWYgKGJwcyA8PSA3NDAwMCkgIG51bWJlciA9IDB4MEE7Ci0JZWxzZSBpZiAoYnBzIDw9IDExMjAwMCkgbnVtYmVyID0gMHgwQjsKLQllbHNlIGlmIChicHMgPD0gMTI4MDAwKSBudW1iZXIgPSAweDBDOwotCWVsc2UgbnVtYmVyID0gMHgwRDsKLQotCXJldHVybiBudW1iZXI7Ci19Ci0KLS8qCi0gKiAJQ29udmVydCBkZWNpbWFsIHN0cmluZyB0byB1bnNpZ25lZCBpbnRlZ2VyLgotICogCUlmIGxlbiAhPSAwIHRoZW4gb25seSAnbGVuJyBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcgYXJlIGNvbnZlcnRlZC4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlY190b191aW50ICh1bnNpZ25lZCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0JdW5zaWduZWQgdmFsOwotCi0JaWYgKCFsZW4pIAotCQlsZW4gPSBzdHJsZW4oc3RyKTsKLQotCWZvciAodmFsID0gMDsgbGVuICYmIGlzZGlnaXQoKnN0cik7ICsrc3RyLCAtLWxlbikKLQkJdmFsID0gKHZhbCAqIDEwKSArICgqc3RyIC0gKHVuc2lnbmVkKScwJyk7Ci0JCi0JcmV0dXJuIHZhbDsKLX0KLQotLyoKLSAqIAlDb252ZXJ0IGhleCBzdHJpbmcgdG8gdW5zaWduZWQgaW50ZWdlci4KLSAqIAlJZiBsZW4gIT0gMCB0aGVuIG9ubHkgJ2xlbicgY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGFyZSBjb25mZXJ0ZWQuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBoZXhfdG9fdWludCAodW5zaWduZWQgY2hhciogc3RyLCBpbnQgbGVuKQotewotCXVuc2lnbmVkIHZhbCwgY2g7Ci0KLQlpZiAoIWxlbikgCi0JCWxlbiA9IHN0cmxlbihzdHIpOwotCi0JZm9yICh2YWwgPSAwOyBsZW47ICsrc3RyLCAtLWxlbikKLQl7Ci0JCWNoID0gKnN0cjsKLQkJaWYgKGlzZGlnaXQoY2gpKQotCQkJdmFsID0gKHZhbCA8PCA0KSArIChjaCAtICh1bnNpZ25lZCknMCcpOwotCQllbHNlIGlmIChpc3hkaWdpdChjaCkpCi0JCQl2YWwgPSAodmFsIDw8IDQpICsgKChjaCAmIDB4REYpIC0gKHVuc2lnbmVkKSdBJyArIDEwKTsKLQkJZWxzZSBicmVhazsKLQl9Ci0JcmV0dXJuIHZhbDsKLX0KLQotCi1zdGF0aWMgaW50IGhhbmRsZV9JUFhXQU4odW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwgY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBlbmFibGVfSVBYLCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCB1bnNpZ25lZCBzaG9ydCBwcm90bykKLXsKLQlpbnQgaTsKLQotCWlmKCBwcm90byA9PSBFVEhfUF9JUFgpIHsKLQkJLyogSXQncyBhbiBJUFggcGFja2V0ICovCi0JCWlmKCFlbmFibGVfSVBYKSB7Ci0JCQkvKiBSZXR1cm4gMSBzbyB3ZSBkb24ndCBwYXNzIGl0IHVwIHRoZSBzdGFjay4gKi8KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSXQncyBub3QgSVBYIHNvIHBhc3MgaXQgdXAgdGhlIHN0YWNrLiovIAotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiggc2VuZHBhY2tldFsxNl0gPT0gMHg5MCAmJgotCSAgICBzZW5kcGFja2V0WzE3XSA9PSAweDA0KQotCXsKLQkJLyogSXQncyBJUFhXQU4gICovCi0KLQkJaWYoIHNlbmRwYWNrZXRbMl0gPT0gMHgwMiAmJgotCQkgICAgc2VuZHBhY2tldFszNF0gPT0gMHgwMCkKLQkJewotCQkJLyogSXQncyBhIHRpbWVyIHJlcXVlc3QgcGFja2V0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgSVBYV0FOIFRpbWVyIFJlcXVlc3QgcGFja2V0XG4iLGRldm5hbWUpOwotCi0JCQkvKiBHbyB0aHJvdWdoIHRoZSByb3V0aW5nIG9wdGlvbnMgYW5kIGFuc3dlciBubyB0byBldmVyeQotCQkJICogb3B0aW9uIGV4Y2VwdCBVbm51bWJlcmVkIFJJUC9TQVAKLQkJCSAqLwotCQkJZm9yKGkgPSA0MTsgc2VuZHBhY2tldFtpXSA9PSAweDAwOyBpICs9IDUpCi0JCQl7Ci0JCQkJLyogMHgwMiBpcyB0aGUgb3B0aW9uIGZvciBVbm51bWJlcmVkIFJJUC9TQVAgKi8KLQkJCQlpZiggc2VuZHBhY2tldFtpICsgNF0gIT0gMHgwMikKLQkJCQl7Ci0JCQkJCXNlbmRwYWNrZXRbaSArIDFdID0gMDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIFNraXAgb3ZlciB0aGUgZXh0ZW5kZWQgTm9kZSBJRCBvcHRpb24gKi8KLQkJCWlmKCBzZW5kcGFja2V0W2ldID09IDB4MDQgKQotCQkJewotCQkJCWkgKz0gODsKLQkJCX0KLQotCQkJLyogV2UgYWxzbyB3YW50IHRvIHR1cm4gb2ZmIGFsbCBoZWFkZXIgY29tcHJlc3Npb24gb3B0LiAJCQkgKi8gCi0JCQlmb3IoOyBzZW5kcGFja2V0W2ldID09IDB4ODAgOykKLQkJCXsKLQkJCQlzZW5kcGFja2V0W2kgKyAxXSA9IDA7Ci0JCQkJaSArPSAoc2VuZHBhY2tldFtpICsgMl0gPDwgOCkgKyAoc2VuZHBhY2tldFtpICsgM10pICsgNDsKLQkJCX0KLQotCQkJLyogU2V0IHRoZSBwYWNrZXQgdHlwZSB0byB0aW1lciByZXNwb25zZSAqLwotCQkJc2VuZHBhY2tldFszNF0gPSAweDAxOwotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU2VuZGluZyBJUFhXQU4gVGltZXIgUmVzcG9uc2VcbiIsZGV2bmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiggc2VuZHBhY2tldFszNF0gPT0gMHgwMiApCi0JCXsKLQkJCS8qIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gcmVxdWVzdCBwYWNrZXQgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBJUFhXQU4gSW5mb3JtYXRpb24gUmVxdWVzdCBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0KLQkJCS8qIFNldCB0aGUgcGFja2V0IHR5cGUgdG8gaW5mb3JtYXRpb24gcmVzcG9uc2UgKi8KLQkJCXNlbmRwYWNrZXRbMzRdID0gMHgwMzsKLQotCQkJLyogU2V0IHRoZSByb3V0ZXIgbmFtZSAqLwotCQkJc2VuZHBhY2tldFs1MV0gPSAnWCc7Ci0JCQlzZW5kcGFja2V0WzUyXSA9ICdUJzsKLQkJCXNlbmRwYWNrZXRbNTNdID0gJ1AnOwotCQkJc2VuZHBhY2tldFs1NF0gPSAnSSc7Ci0JCQlzZW5kcGFja2V0WzU1XSA9ICdQJzsKLQkJCXNlbmRwYWNrZXRbNTZdID0gJ0UnOwotCQkJc2VuZHBhY2tldFs1N10gPSAnLSc7Ci0JCQlzZW5kcGFja2V0WzU4XSA9IENWSGV4VG9Bc2NpaShuZXR3b3JrX251bWJlciA+PiAyOCk7Ci0JCQlzZW5kcGFja2V0WzU5XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDBGMDAwMDAwKT4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbNjBdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDBGMDAwMDApPj4gMjApOwotCQkJc2VuZHBhY2tldFs2MV0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDBGMDAwMCk+PiAxNik7Ci0JCQlzZW5kcGFja2V0WzYyXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDBGMDAwKT4+IDEyKTsKLQkJCXNlbmRwYWNrZXRbNjNdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMDBGMDApPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzY0XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDAwMEYwKT4+IDQpOwotCQkJc2VuZHBhY2tldFs2NV0gPSBDVkhleFRvQXNjaWkobmV0d29ya19udW1iZXIgJiAweDAwMDAwMDBGKTsKLQkJCWZvcihpID0gNjY7IGkgPCA5OTsgaSs9IDEpCi0JCQl7Ci0JCQkJc2VuZHBhY2tldFtpXSA9IDA7Ci0JCQl9Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZW5kaW5nIElQWFdBTiBJbmZvcm1hdGlvbiBSZXNwb25zZSBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5rbm93biBJUFhXQU4gcGFja2V0IVxuIixkZXZuYW1lKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogU2V0IHRoZSBXTm9kZUlEIHRvIG91ciBuZXR3b3JrIGFkZHJlc3MgKi8KLQkJc2VuZHBhY2tldFszNV0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQlzZW5kcGFja2V0WzM2XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCXNlbmRwYWNrZXRbMzddID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEZGMDApID4+IDgpOwotCQlzZW5kcGFja2V0WzM4XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRkYpOwotCi0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8qSWYgd2UgZ2V0IGhlcmUgaXQncyBhbiBJUFgtZGF0YSBwYWNrZXQsIHNvIGl0J2xsIGdldCBwYXNzZWQgdXAgdGhlIHN0YWNrLgotCQkgKi8KLQkJLyogc3dpdGNoIHRoZSBuZXR3b3JrIG51bWJlcnMgKi8KLQkJc3dpdGNoX25ldF9udW1iZXJzKHNlbmRwYWNrZXQsIG5ldHdvcmtfbnVtYmVyLCAxKTsJCi0JCXJldHVybiAwOwotCX0KLX0KLQotLyoKLSAqICAJSWYgaW5jb21pbmcgaXMgMCAob3V0Z29pbmcpLSBpZiB0aGUgbmV0IG51bWJlcnMgaXMgb3VycyBtYWtlIGl0IDAKLSAqICAJaWYgaW5jb21pbmcgaXMgMSAtIGlmIHRoZSBuZXQgbnVtYmVyIGlzIDAgbWFrZSBpdCBvdXJzIAotICovCi0KLXN0YXRpYyB2b2lkIHN3aXRjaF9uZXRfbnVtYmVycyh1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCB1bnNpZ25lZCBjaGFyIGluY29taW5nKQotewotCXVuc2lnbmVkIGxvbmcgcG5ldHdvcmtfbnVtYmVyOwotCi0JcG5ldHdvcmtfbnVtYmVyID0gKHVuc2lnbmVkIGxvbmcpKChzZW5kcGFja2V0WzZdIDw8IDI0KSArIAotCQkJICAoc2VuZHBhY2tldFs3XSA8PCAxNikgKyAoc2VuZHBhY2tldFs4XSA8PCA4KSArIAotCQkJICBzZW5kcGFja2V0WzldKTsKLQkKLQotCWlmICghaW5jb21pbmcpIHsKLQkJLypJZiB0aGUgZGVzdGluYXRpb24gbmV0d29yayBudW1iZXIgaXMgb3VycywgbWFrZSBpdCAwICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gbmV0d29ya19udW1iZXIpIHsKLQkJCXNlbmRwYWNrZXRbNl0gPSBzZW5kcGFja2V0WzddID0gc2VuZHBhY2tldFs4XSA9IAotCQkJCQkgc2VuZHBhY2tldFs5XSA9IDB4MDA7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJZiB0aGUgaW5jb21pbmcgbmV0d29yayBpcyAwLCBtYWtlIGl0IG91cnMgKi8KLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSAwKSB7Ci0JCQlzZW5kcGFja2V0WzZdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbN10gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCQlzZW5kcGFja2V0WzhdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzldID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLQotCi0JcG5ldHdvcmtfbnVtYmVyID0gKHVuc2lnbmVkIGxvbmcpKChzZW5kcGFja2V0WzE4XSA8PCAyNCkgKyAKLQkJCSAgKHNlbmRwYWNrZXRbMTldIDw8IDE2KSArIChzZW5kcGFja2V0WzIwXSA8PCA4KSArIAotCQkJICBzZW5kcGFja2V0WzIxXSk7Ci0JCi0JCi0JaWYoICFpbmNvbWluZyApIHsKLQkJLyogSWYgdGhlIHNvdXJjZSBuZXR3b3JrIGlzIG91cnMsIG1ha2UgaXQgMCAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IG5ldHdvcmtfbnVtYmVyKSB7Ci0JCQlzZW5kcGFja2V0WzE4XSA9IHNlbmRwYWNrZXRbMTldID0gc2VuZHBhY2tldFsyMF0gPSAKLQkJCQkgc2VuZHBhY2tldFsyMV0gPSAweDAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlIHNvdXJjZSBuZXR3b3JrIGlzIDAsIG1ha2UgaXQgb3VycyAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IDAgKSB7Ci0JCQlzZW5kcGFja2V0WzE4XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzE5XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJCXNlbmRwYWNrZXRbMjBdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzIxXSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwMDBGRik7Ci0JCX0KLQl9Ci19IC8qIHN3aXRjaF9uZXRfbnVtYmVycyAqLwotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqIFgyNUFQSSBTUEVDSUZJQyBGVU5DVElPTlMgKioqKioqKioqKioqKioqKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogIGZpbmRfY2hhbm5lbAotICoKLSAqCU1hbmFnZXMgdGhlIGxjbiB0byBkZXZpY2UgbWFwLiBJdCBpbmNyZWFzZXMgcGVyZm9ybWFuY2UKLSAqICAgICAgYmVjYXVzZSBpdCBlbGltaW5hdGVzIHRoZSBuZWVkIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBsaW5rICAKLSAqICAgICAgbGlzdCBmb3IgYSBkZXZpY2Ugd2hpY2ggaXMgYm91bmRlZCB0byBhIHNwZWNpZmljIGxjbi4KLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLQotc3RydWN0IG5ldF9kZXZpY2UgKmZpbmRfY2hhbm5lbChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxjbikKLXsKLQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0KLQkJcmV0dXJuIGNhcmQtPndhbmRldi5kZXY7Ci0KLQl9ZWxzZXsKLQkJLyogV2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBpbmNvbWluZyBsY24KLSAgICAgICAgICAgICAgICAgKiBpcyBhIFBWQyBvciBhbiBTVkMgY2hhbm5lbC4gQnV0IHdlIGRvIGtub3cgdGhhdAotICAgICAgICAgICAgICAgICAqIHRoZSBsY24gY2Fubm90IGJlIGZvciBib3RoIHRoZSBQVkMgYW5kIHRoZSBTVkMKLSAgICAgICAgICAgICAgICAgKiBjaGFubmVsLgotCi0JCSAqIElmIHRoZSBsY24gbnVtYmVyIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMjU1LCAKLSAgICAgICAgICAgICAgICAgKiB0YWtlIHRoZSBtb2R1bG8gMjU1IG9mIHRoYXQgbnVtYmVyLiBXZSBvbmx5IGhhdmUKLSAgICAgICAgICAgICAgICAgKiAyNTUgbG9jYXRpb25zLCB0aHVzIGhpZ2hlciBudW1iZXJzIG11c3QgYmUgbWFwcGVkCi0gICAgICAgICAgICAgICAgICogdG8gYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNDUuIAotCi0JCSAqIFdlIG11c3Qgc2VwYXJhdGUgcHZjJ3MgYW5kIHN2YydzIHNpbmNlIHR3byBkb24ndAotICAgICAgICAgICAgICAgICAqIGhhdmUgdG8gYmUgY29udGlndW91cy4gIE1lYW5pbmcgcHZjJ3MgY2FuIHN0YXJ0Ci0gICAgICAgICAgICAgICAgICogZnJvbSAxIHRvIDEwIGFuZCBzdmMncyBjYW4gc3RhcnQgZnJvbSAyNTYgdG8gMjY2LgotICAgICAgICAgICAgICAgICAqIEJ1dCAyNTYlMjU1IGlzIDEsIGkuZS4gQ09ORkxJQ1QuCi0JCSAqLwotCi0KLQkJLyogSGlnaGVzdCBMQ04gbnVtYmVyIG11c3QgYmUgbGVzcyBvciBlcXVhbCB0byA0MDk2ICovCi0JCWlmICgobGNuIDw9IE1BWF9MQ05fTlVNKSAmJiAobGNuID4gMCkpewotCi0JCQlpZiAobGNuIDwgWDI1X01BWF9DSEFOKXsKLQkJCQlpZiAoY2FyZC0+dS54LnN2Y190b19kZXZfbWFwW2xjbl0pCi0JCQkJCXJldHVybiBjYXJkLT51Lnguc3ZjX3RvX2Rldl9tYXBbbGNuXTsKLQotCQkJCWlmIChjYXJkLT51LngucHZjX3RvX2Rldl9tYXBbbGNuXSkKLQkJCQkJcmV0dXJuIGNhcmQtPnUueC5wdmNfdG9fZGV2X21hcFtsY25dOwotCQkJCi0JCQl9ZWxzZXsKLQkJCQlpbnQgbmV3X2xjbiA9IGxjbiVYMjVfTUFYX0NIQU47Ci0JCQkJaWYgKGNhcmQtPnUueC5zdmNfdG9fZGV2X21hcFtuZXdfbGNuXSkKLQkJCQkJcmV0dXJuIGNhcmQtPnUueC5zdmNfdG9fZGV2X21hcFtuZXdfbGNuXTsKLQotCQkJCWlmIChjYXJkLT51LngucHZjX3RvX2Rldl9tYXBbbmV3X2xjbl0pCi0JCQkJCXJldHVybiBjYXJkLT51LngucHZjX3RvX2Rldl9tYXBbbmV3X2xjbl07Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotCi12b2lkIGJpbmRfbGNuX3RvX2RldihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxjbikKLXsKLQl4MjVfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCi0JLyogTW9kdWxvIHRoZSBsY24gbnVtYmVyIGJ5IFgyNV9NQVhfQ0hBTiAoMjU1KQotCSAqIGJlY2F1c2UgdGhlIGxjbiBudW1iZXIgY2FuIGJlIGdyZWF0ZXIgdGhhbiAyNTUgCi0gICAgICAgICAqCi0JICogV2UgbmVlZCB0byBzcGxpdCBzdmMgYW5kIHB2YyBzaW5jZSB0aGV5IGRvbid0IGhhdmUKLSAgICAgICAgICogdG8gYmUgY29udGlnb3VzLiAKLQkgKi8KLQotCWlmIChjaGFuLT5jb21tb24uc3ZjKXsKLQkJY2FyZC0+dS54LnN2Y190b19kZXZfbWFwWyhsY24gJSBYMjVfTUFYX0NIQU4pXSA9IGRldjsKLQl9ZWxzZXsKLQkJY2FyZC0+dS54LnB2Y190b19kZXZfbWFwWyhsY24gJSBYMjVfTUFYX0NIQU4pXSA9IGRldjsKLQl9Ci0JY2hhbi0+Y29tbW9uLmxjbiA9IGxjbjsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB4MjVhcGlfYmggCi0gKgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCB4MjVhcGlfYmgoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSA9PSAwKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJIIEJ1ZmZlciBFbXB0eSBpbiBCSFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJcmV0dXJuOwotCX0KLQotCXdoaWxlIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSl7Ci0KLQkJLyogSWYgdGhlIHNvY2sgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgdW5saW5raW5nIHRoZQotCQkgKiBkcml2ZXIgZnJvbSB0aGUgc29ja2V0LCB3ZSBtdXN0IGdldCBvdXQuIAotCQkgKiBUaGlzIG5ldmVyIGhhcHBlbmRzIGJ1dCBpcyBhIHNhbml0eSBjaGVjay4gKi8KLQkJaWYgKHRlc3RfYml0KDAsJmNoYW4tPmNvbW1vbi5jb21tb25fY3JpdGljYWwpKXsKLQkJCWNsZWFyX2JpdCgwLCAmY2hhbi0+dHFfd29ya2luZyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCS8qIElmIExBUEIgSERMQywgZG8gbm90IGRyb3AgcGFja2V0cyBpZiBzb2NrZXQgaXMKLSAgICAgICAgICAgICAgICAgKiBub3QgY29ubmVjdGVkLiAgTGV0IHRoZSBidWZmZXIgZmlsbCB1cCBhbmQKLSAgICAgICAgICAgICAgICAgKiB0dXJuIG9mZiByeCBpbnRlcnJ1cHQgKi8KLQkJaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQkJaWYgKGNoYW4tPmNvbW1vbi5zayA9PSBOVUxMIHx8IGNoYW4tPmNvbW1vbi5mdW5jID09IE5VTEwpewotCQkJCWNsZWFyX2JpdCgwLCAmY2hhbi0+dHFfd29ya2luZyk7CQkJCi0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJc2tiICA9ICgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+YmhfcmVhZF0pLT5za2I7Ci0KLQkJaWYgKHNrYiA9PSBOVUxMKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCSCBTa2IgZW1wdHkgZm9yIHJlYWQgJWlcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsY2hhbi0+YmhfcmVhZCk7Ci0JCX1lbHNlewotCQkJCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnNrID09IE5VTEwgfHwgY2hhbi0+Y29tbW9uLmZ1bmMgPT0gTlVMTCl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJIOiBTb2NrZXQgZGlzY29ubmVjdGVkLCBkcm9wcGluZ1xuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJeDI1YXBpX2JoX2NsZWFudXAoZGV2KTsKLQkJCQkrK2NoYW4tPmlmc3RhdHMucnhfZHJvcHBlZDsKLQkJCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0KLQkJCWlmIChjaGFuLT5jb21tb24uZnVuYyhza2IsZGV2LGNoYW4tPmNvbW1vbi5zaykgIT0gMCl7Ci0JCQkJLyogU29jayBmdWxsIGNhbm5vdCBzZW5kLCBxdWV1ZSB1cyBmb3IgYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0cnkgCi0JCQkJICovCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJIOiAhISEgUGFja2V0IGZhaWxlZCB0byBzZW5kICEhISEhIFxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5yZWNlaXZlX2Jsb2NrLDEpOwotCQkJCXJldHVybjsKLQkJCX1lbHNlewotCQkJCXgyNWFwaV9iaF9jbGVhbnVwKGRldik7Ci0JCQkJKytjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9iZnJfcGFzc2VkX3RvX3N0YWNrOwotCQkJfQotCQl9Ci0JfQkKLQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCi0JcmV0dXJuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogeDI1YXBpX2JoX2NsZWFudXAgCi0gKgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNWFwaV9iaF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0KLQkoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3JlYWRdKS0+c2tiID0gTlVMTDsKLQotCWlmIChjaGFuLT5iaF9yZWFkID09IE1BWF9CSF9CVUZGKXsKLQkJY2hhbi0+YmhfcmVhZD0wOwotCX1lbHNlewotCQkrK2NoYW4tPmJoX3JlYWQ7CQotCX0KLQotCS8qIElmIHRoZSBSZWNlaXZlIGludGVycnVwdCB3YXMgb2ZmLCBpdCBtZWFucwotICAgICAgICAgKiB0aGF0IHdlIGZpbGxlZCB1cCBvdXIgY2lyY3VsYXIgYnVmZmVyLiBDaGVjayAgICAKLSAgICAgICAgICogdGhhdCB3ZSBoYXZlIHNwYWNlIGluIHRoZSBidWZmZXIuIElmIHNvIAotICAgICAgICAgKiB0dXJuIHRoZSBSWCBpbnRlcnJ1cHQgYmFjayBvbi4gCi0JICovCi0JaWYgKCEoc3RhdHVzLT5pbWFzayAmIElOVFJfT05fUlhfRlJBTUUpKXsKLQkJaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpIDwgKE1BWF9CSF9CVUZGKzEpKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCSDogVHVybmluZyBvbiB0aGUgaW50ZXJydXB0XG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9SWF9GUkFNRTsKLQkJfQotCX0JCi0KLQlhdG9taWNfZGVjKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBiaF9lbnF1ZXVlIAotICoKLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBiaF9lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IChNQVhfQkhfQlVGRisxKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBCb3R0b20gaGFsZiBidWZmZXIgRlVMTFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDE7IAotCX0KLQotCSgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+Ymhfd3JpdGVdKS0+c2tiID0gc2tiOwotCi0JaWYgKGNoYW4tPmJoX3dyaXRlID09IE1BWF9CSF9CVUZGKXsKLQkJY2hhbi0+Ymhfd3JpdGU9MDsKLQl9ZWxzZXsKLQkJKytjaGFuLT5iaF93cml0ZTsKLQl9Ci0KLQlhdG9taWNfaW5jKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IChNQVhfQkhfQlVGRisxKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBCdWZmZXIgaXMgbm93IGZ1bGwsIFR1cm5pbmcgb2ZmIFJYIEludHJcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXN0YXR1cy0+aW1hc2sgJj0gfklOVFJfT05fUlhfRlJBTUU7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHRpbWVyX2ludHJfY21kX2V4ZWMKLSAqICAKLSAqCUNhbGxlZCBieSB0aW1lciBpbnRlcnJ1cHQgdG8gZXhlY3V0ZSBhIGNvbW1hbmQKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB0aW1lcl9pbnRyX2NtZF9leGVjIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl1bnNpZ25lZCBjaGFyIG1vcmVfdG9fZXhlYz0wOwotCXZvbGF0aWxlIHgyNV9jaGFubmVsX3QgKmNoYW49TlVMTDsKLQlpbnQgaT0wLGJhZF9jbWQ9MCxlcnI9MDsJCi0KLQlpZiAoY2FyZC0+dS54LmNtZF9kZXYgPT0gTlVMTCl7Ci0JCWNhcmQtPnUueC5jbWRfZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQl9Ci0KLQlkZXYgPSBjYXJkLT51LnguY21kX2RldjsKLQotCWZvciAoOzspewotCi0JCWNoYW4gPSBkZXYtPnByaXY7Ci0JCQotCQlpZiAoYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5jb21tYW5kKSl7IAotCi0JCQliYWRfY21kID0gY2hlY2tfYmFkX2NvbW1hbmQoY2FyZCxkZXYpOwotCi0JCQlpZiAoKCFjaGFuLT5jb21tb24ubWJveCB8fCBhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmRpc2Nvbm5lY3QpKSAmJiAKLQkJCSAgICAgIWJhZF9jbWQpewotCi0JCQkJLyogU29ja2V0IGhhcyBkaWVkIG9yIGV4aXRlZCwgV2UgbXVzdCBicmluZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2hhbm5lbCBkb3duIGJlZm9yZSBhbnlib2R5IGVsc2UgdHJpZXMgdG8gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZSBpdCAqLwotCQkJCWVyciA9IGNoYW5uZWxfZGlzY29ubmVjdChjYXJkLGRldik7Ci0JCQl9ZWxzZXsKLQkJCSAgICAgICAgZXJyID0gZXhlY3V0ZV9kZWxheWVkX2NtZChjYXJkLCBkZXYsCi0JCQkJCQkJIChtYm94X2NtZF90KiljaGFuLT5jb21tb24ubWJveCwKLQkJCQkJCQkgIGJhZF9jbWQpOwotCQkJfQotCi0JCQlzd2l0Y2ggKGVycil7Ci0KLQkJCWNhc2UgUkVUVVJOX1JFU1VMVDoKLQotCQkJCS8qIFJldHVybiB0aGUgcmVzdWx0IHRvIHRoZSBzb2NrZXQgd2l0aG91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkZWxheS4gTk9fV0FJVCBDb21tYW5kICovCQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCQkJCWlmIChhdG9taWNfcmVhZCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSkpCi0JCQkJCWF0b21pY19zZXQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3ksMCk7Ci0KLQkJCQlzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChjYXJkLGRldixjYXJkLT5tYm94KTsKLQotCQkJCW1vcmVfdG9fZXhlYz0wOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERUxBWV9SRVNVTFQ6Ci0JCQotCQkJCS8qIFdhaXQgZm9yIHRoZSByZW1vdGUgdG8gcmVzcG9uZCwgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNlbmRpbmcgdGhlIHJlc3VsdCB1cCB0byB0aGUgc29ja2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBXQUlUIGNvbW1hbmQgKi8KLQkJCQlpZiAoYXRvbWljX3JlYWQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3kpKQotCQkJCQlhdG9taWNfc2V0KCZjYXJkLT51LnguY29tbWFuZF9idXN5LDApOwotCQkJCQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCQkJCW1vcmVfdG9fZXhlYz0wOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQotCQkJCS8qIElmIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzb21lIHJlYXNvbiAoaS5lIHJldHVybiBjb2RlIDB4MzMgYnVzeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2V0IHRoZSBtb3JlX3RvX2V4ZWMgYml0IHdoaWNoIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW5kaWNhdGUgdGhhdCB0aGlzIGNvbW1hbmQgbXVzdCBiZSBleGVjdHVlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhZ2FpbiBkdXJpbmcgbmV4dCB0aW1lciBpbnRlcnJ1cHQgCi0JCQkJICovCi0JCQkJbW9yZV90b19leGVjPTE7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZjYXJkLT51LnguY29tbWFuZF9idXN5KSA9PSAwKQotCQkJCQlhdG9taWNfc2V0KCZjYXJkLT51LnguY29tbWFuZF9idXN5LDEpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQliYWRfY21kPTA7Ci0KLQkJCS8qIElmIGZsYWdzIGlzIHNldCwgdGhlcmUgYXJlIG5vIGhkbGMgYnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRodXMsIHdhaXQgZm9yIHRoZSBuZXh0IHBhc3MgYW5kIHRyeSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNhbWUgY29tbWFuZCBhZ2Fpbi4gT3RoZXJ3aXNlLCBzdGFydCBzZWFyY2hpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZSBuZXh0IHBhc3MuIAotCQkJICovCi0JCQlpZiAoIW1vcmVfdG9fZXhlYyl7Ci0JCQkJZGV2ID0gbW92ZV9kZXZfdG9fbmV4dChjYXJkLGRldik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfWVsc2V7Ci0JCQkvKiBUaGlzIGRldmljZSBoYXMgbm90aGluZyB0byBleGVjdXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICogZ28gdG8gbmV4dC4gCi0JCQkgKi8KLQkJCWlmIChhdG9taWNfcmVhZCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSkpCi0JCQkJCWF0b21pY19zZXQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3ksMCk7Ci0JCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJfQkKLQotCQlpZiAoKytpID09IGNhcmQtPnUueC5ub19kZXYpewotCQkJaWYgKCFtb3JlX3RvX2V4ZWMpewotCQkJCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogTm90aGluZyB0byBleGVjdXRlIGluIFRpbWVyXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlpZiAoYXRvbWljX3JlYWQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3kpKXsKLQkJCQkJYXRvbWljX3NldCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSwwKTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JfSAvL0VuZCBvZiBGT1IKLQotCWNhcmQtPnUueC5jbWRfZGV2ID0gZGV2OwotCQotCWlmIChtb3JlX3RvX2V4ZWMpewotCQkvKiBJZiBtb3JlIGNvbW1hbmRzIGFyZSBwZW5kaW5nLCBkbyBub3QgdHVybiBvZmYgdGltZXIgCi0gICAgICAgICAgICAgICAgICogaW50ZXJydXB0ICovCi0JCXJldHVybiAxOwotCX1lbHNlewotCQkvKiBObyBtb3JlIGNvbW1hbmRzLCB0dXJuIG9mZiB0aW1lciBpbnRlcnJ1cHQgKi8KLQkJcmV0dXJuIDA7Ci0JfQkKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGV4ZWN1dGVfZGVsYXllZF9jbWQgCi0gKgotICoJRXhlY3V0ZSBhbiBBUEkgY29tbWFuZCB3aGljaCB3YXMgcGFzc2VkIGRvd24gZnJvbSB0aGUKLSAqICAgICAgc29jay4gIFNvY2sgaXMgdmVyeSBsaW1pdGVkIGluIHdoaWNoIGNvbW1hbmRzIGl0IGNhbgotICogICAgICBleGVjdXRlLiAgV2FpdCBhbmQgTm8gV2FpdCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLiAgCi0gKiAgICAgIFBsYWNlIENhbGwsIENsZWFyIENhbGwgYW5kIFJlc2V0IHdhaXQgY29tbWFuZHMsIHdoZXJlCi0gKiAgICAgIEFjY2VwdCBDYWxsIGlzIGEgbm9fd2FpdCBjb21tYW5kLgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBleGVjdXRlX2RlbGF5ZWRfY21kKHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBtYm94X2NtZF90ICp1c3JfY21kLCBjaGFyIGJhZF9jbWQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQlpbnQgZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQotCWlmICghKCpjYXJkLT51LnguaGRsY19idWZfc3RhdHVzICYgMHg0MCkgJiYgIWJhZF9jbWQpewotCQlyZXR1cm4gVFJZX0NNRF9BR0FJTjsKLQl9Ci0KLQkvKiBUaGlzIHdheSBhIGNvbW1hbmQgaXMgZ3VhcmFudGVlZCB0byBiZSBleGVjdXRlZCBmb3IKLSAgICAgICAgICogYSBzcGVjaWZpYyBsY24sIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBib3VuZCB0by4gKi8KLQl1c3JfY21kLT5jbWQubGNuID0gY2hhbi0+Y29tbW9uLmxjbjsKLQkKLQotCS8qIElmIGNoYW5uZWwgaXMgcHZjLCBpbnN0ZWFkIG9mIHBsYWNlIGNhbGwKLSAgICAgICAgICogcnVuIHgyNV9jaGFubmVsIGNvbmZpZ3VyYXRpb24uIElmIHJ1bm5pbmcgTEFQQiBIRExDCi0gICAgICAgICAqIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4gCi0gICAgICAgICAqLwotCWlmICgoIWNoYW4tPmNvbW1vbi5zdmMpICYmICh1c3JfY21kLT5jbWQuY29tbWFuZCA9PSBYMjVfUExBQ0VfQ0FMTCkpewotCi0JCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJCURCR19QUklOVEsoS0VSTl9JTkZPICJMQVBCOiBDb25uZWN0aW5nXG4iKTsKLQkJCWNvbm5lY3QoY2FyZCk7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsV0FOX0NPTk5FQ1RJTkcpOwotCQkJcmV0dXJuIERFTEFZX1JFU1VMVDsKLQkJfWVsc2V7Ci0JCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiJXM6IFBWQyBpcyBDT05ORUNUSU5HXG4iLGNhcmQtPmRldm5hbWUpOwotCQkJaWYgKHgyNV9nZXRfY2hhbl9jb25mKGNhcmQsIGNoYW4pID09IENNRF9PSyl7Ci0JCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fQ09OTkVDVEVEKTsKLQkJCX1lbHNleyAKLQkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJfQotCQkJcmV0dXJuIFJFVFVSTl9SRVNVTFQ7Ci0JCX0KLQl9Ci0KLQkvKiBDb3B5IHRoZSBzb2NrZXQgbWJveCBjb21tYW5kIG9udG8gdGhlIGJvYXJkICovCi0KLQltZW1jcHkoJm1ib3gtPmNtZCwgJnVzcl9jbWQtPmNtZCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQlpZiAodXNyX2NtZC0+Y21kLmxlbmd0aCl7Ci0JCW1lbWNweShtYm94LT5kYXRhLCB1c3JfY21kLT5kYXRhLCB1c3JfY21kLT5jbWQubGVuZ3RoKTsKLQl9Ci0KLQkvKiBDaGVjayBpZiBjb21tYW5kIGlzIGJhZC4gV2UgbmVlZCB0byBjb3B5IHRoZSBjbWQgaW50bwotICAgICAgICAgKiB0aGUgYnVmZmVyIHJlZ2FyZGxlc3Mgc2luY2Ugd2UgcmV0dXJuIHRoZSwgbWJveCB0bwotICAgICAgICAgKiB0aGUgdXNlciAqLwotCWlmIChiYWRfY21kKXsKLQkJbWJveC0+Y21kLnJlc3VsdD0weDAxOwotCQlyZXR1cm4gUkVUVVJOX1JFU1VMVDsKLQl9Ci0KLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSyAmJiBlcnIgIT0gWDI1UkVTX05PVF9SRUFEWSkKLQkJeDI1X2Vycm9yKGNhcmQsIGVyciwgdXNyX2NtZC0+Y21kLmNvbW1hbmQsIHVzcl9jbWQtPmNtZC5sY24pOwotCi0JaWYgKG1ib3gtPmNtZC5yZXN1bHQgPT0gWDI1UkVTX05PVF9SRUFEWSl7Ci0JCXJldHVybiBUUllfQ01EX0FHQUlOOwotCX0KLQotCXN3aXRjaCAobWJveC0+Y21kLmNvbW1hbmQpewotCi0JY2FzZSBYMjVfUExBQ0VfQ0FMTDoKLQkJCi0JCXN3aXRjaCAobWJveC0+Y21kLnJlc3VsdCl7Ci0KLQkJY2FzZSBDTURfT0s6Ci0KLQkJCS8qIENoZWNrIGlmIFBsYWNlIGNhbGwgaXMgYSB3YWl0IGNvbW1hbmQgb3IgYSAKLSAgICAgICAgICAgICAgIAkgIAkgKiBubyB3YWl0IGNvbW1hbmQgKi8KLQkJCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpICYgMHg4MCkKLSAJCQkJZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQkJCWVsc2UKLQkJCQlkZWxheT1ERUxBWV9SRVNVTFQ7Ci0JCQotCi0JCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiXG4lczogUExBQ0UgQ0FMTCBCaW5kaW5nIGRldiAlcyB0byBsY24gJWlcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lLCBtYm94LT5jbWQubGNuKTsKLQkJCi0JCQliaW5kX2xjbl90b19kZXYgKGNhcmQsIGRldiwgbWJveC0+Y21kLmxjbik7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNUSU5HKTsKLQkJCWJyZWFrOwotCi0KLQkJZGVmYXVsdDoKLQkJCWRlbGF5PVJFVFVSTl9SRVNVTFQ7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFgyNV9BQ0NFUFRfQ0FMTDogCi0JCQotCQlzd2l0Y2ggKG1ib3gtPmNtZC5yZXN1bHQpewotCi0JCWNhc2UgQ01EX09LOgotCi0JCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiXG4lczogQUNDRVBUIEJpbmRpbmcgZGV2ICVzIHRvIGxjbiAlaVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSxtYm94LT5jbWQubGNuKTsKLQotCQkJYmluZF9sY25fdG9fZGV2IChjYXJkLCBkZXYsIG1ib3gtPmNtZC5sY24pOwotCi0JCQlpZiAoeDI1X2dldF9jaGFuX2NvbmYoY2FyZCwgY2hhbikgPT0gQ01EX09LKXsKLQotCQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0NPTk5FQ1RFRCk7Ci0JCQkJZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQotCQkJfWVsc2V7IAotCQkJCWlmICh4MjVfY2xlYXJfY2FsbChjYXJkLCB1c3JfY21kLT5jbWQubGNuLCAwLCAwKSA9PSBDTURfT0spewotCQkJCQkvKiBpZiBjbGVhciBpcyBzdWNjZXNzZnVsLCB3YWl0IGZvciBjbGVhciBjb25maXJtIAotCQkJCQkgKi8gCi0JCQkJCWRlbGF5PURFTEFZX1JFU1VMVDsKLQkJCQl9ZWxzZXsKLQkJCQkJLyogRG8gbm90IGNoYW5nZSB0aGUgc3RhdGUgaGVyZS4gSWYgd2UgZmFpbCAKLQkJCQkJICogdGhlIGFjY2VwdCB0aGUgcmV0dXJuIGNvZGUgaXMgc2VuZCB1cCAKLQkJCQkJICp0aGUgc3RhY2ssIHdoaWNoIHdpbGwgZXRoZXIgcmV0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAJICogb3IgY2xlYXIgdGhlIGNhbGwgCi0JCQkJCSAqLwotCQkJCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAKLQkJCQkJCSIlczogQUNDRVBUOiBTVEFURSBNQVkgQkUgQ1VSUlVQVEVEIDIgISEhISFcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQkJZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQotCi0JCWNhc2UgWDI1UkVTX0FTWU5DX1BBQ0tFVDoKLQkJCWRlbGF5PVRSWV9DTURfQUdBSU47Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OiAKLQkJCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogQUNDRVBUIEZBSUxFRFxuIixjYXJkLT5kZXZuYW1lKTsKLQkJCWlmICh4MjVfY2xlYXJfY2FsbChjYXJkLCB1c3JfY21kLT5jbWQubGNuLCAwLCAwKSA9PSBDTURfT0spewotCQkJCWRlbGF5PURFTEFZX1JFU1VMVDsKLQkJCX1lbHNlewotCQkJCS8qIERvIG5vdCBjaGFuZ2UgdGhlIHN0YXRlIGhlcmUuIElmIHdlIGZhaWwgdGhlIGFjY2VwdC4gVGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJldHVybiBjb2RlIGlzIHNlbmQgdXAgdGhlIHN0YWNrLCB3aGljaCB3aWxsIGV0aGVyIHJldHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9yIGNsZWFyIHRoZSBjYWxsICovCi0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gCi0JCQkJCSIlczogQUNDRVBUOiBTVEFURSBNQVkgQkUgQ09SUlVQVEVEIDEgISEhISFcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlkZWxheT1SRVRVUk5fUkVTVUxUOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBYMjVfQ0xFQVJfQ0FMTDoKLQotCQlzd2l0Y2ggKG1ib3gtPmNtZC5yZXN1bHQpewotCi0JCWNhc2UgQ01EX09LOgotCQkJREJHX1BSSU5USyhLRVJOX0lORk8gCi0JCQkJCSJDQUxMIENMRUFSIE9LOiBEZXYgJXMgTWJveCBMY24gJWkgIENoYW4gTGNuICVpXG4iLAotCQkJCQlkZXYtPm5hbWUsbWJveC0+Y21kLmxjbixjaGFuLT5jb21tb24ubGNuKTsKLQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RJTkcpOwotCQkJZGVsYXkgPSBERUxBWV9SRVNVTFQ7Ci0JCQlicmVhazsKLQotCQljYXNlIFgyNVJFU19DSEFOTkVMX0lOX1VTRToKLQkJY2FzZSBYMjVSRVNfQVNZTkNfUEFDS0VUOgotCQkJZGVsYXkgPSBUUllfQ01EX0FHQUlOOwotCQkJYnJlYWs7Ci0JCQkKLQkJY2FzZSBYMjVSRVNfTElOS19OT1RfSU5fQUJNOgotCQljYXNlIFgyNVJFU19JTlZBTF9MQ046Ci0JCWNhc2UgWDI1UkVTX0lOVkFMX1NUQVRFOgotCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVEVEKTsKLQkJCWRlbGF5ID0gUkVUVVJOX1JFU1VMVDsKLQkJCWJyZWFrOwotCQkKLQkJZGVmYXVsdDoKLQkJCS8qIElmIGNvbW1hbmQgZGlkIG5vdCBleGVjdXRlIGJlY2F1c2Ugb2YgdXNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICogZmF1bHQsIGRvIG5vdCBjaGFuZ2UgdGhlIHN0YXRlLiBUaGlzIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ25hbCB0aGUgc29ja2V0IHRoYXQgY2xlYXIgY29tbWFuZCBmYWlsZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBVc2VyIGNhbiByZXRyeSBvciBjbG9zZSB0aGUgc29ja2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgICogV2hlbiBzb2NrZXQgZ2V0cyBraWxsZWQsIGl0IHdpbGwgc2V0IHRoZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGNoYW4tPmRpc2Nvbm5lY3Qgd2hpY2ggd2lsbCBzaWduYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGRyaXZlciB0byBjbGVhciB0aGUgY2FsbCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENsZWFyIENvbW1hbmQgRmFpbGVkLCBSYyAleFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLG1ib3gtPmNtZC5jb21tYW5kKTsgCi0JCQlkZWxheSA9IFJFVFVSTl9SRVNVTFQ7Ci0JCX0KLQkJYnJlYWs7Ci0JfQkKLQotCXJldHVybiBkZWxheTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGFwaV9pbmNvbWluZ19jYWxsIAotICoKLSAqCVBhc3MgYW4gaW5jb21pbmcgY2FsbCByZXF1ZXN0IHVwIHRoZSBsaXN0ZW5pbmcKLSAqICAgICAgc29jay4gIElmIHRoZSBBUEkgc29jayBpcyBub3QgbGlzdGVuaW5nIHJlamVjdCB0aGUKLSAqICAgICAgY2FsbC4KLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgYXBpX2luY29taW5nX2NhbGwgKHNkbGFfdCogY2FyZCwgVFgyNU1ib3ggKm1ib3gsIGludCBsY24pCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbGVuID0gc2l6ZW9mKFRYMjVDbWQpK21ib3gtPmNtZC5sZW5ndGg7Ci0KLQlpZiAoYWxsb2NfYW5kX2luaXRfc2tiX2J1ZihjYXJkLCAmc2tiLCBsZW4pKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFQSSBpbmNvbWluZyBjYWxsLCBubyBtZW1vcnlcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCW1lbWNweShza2JfcHV0KHNrYixsZW4pLCZtYm94LT5jbWQsbGVuKTsKLQotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKLQlza2ItPnByb3RvY29sID0gaHRvbnMoWDI1X1BST1QpOwotCXNrYi0+cGt0X3R5cGUgPSBXQU5fUEFDS0VUX0FTWU5DOwotCi0JaWYgKGNhcmQtPmZ1bmMoc2tiLGNhcmQtPnNrKSA8IDApewotCQlwcmludGsoS0VSTl9JTkZPICIlczogTUFKT1IgRVJST1I6IEZhaWxlZCB0byBzZW5kIHVwIHBsYWNlIGNhbGwgXG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogc2VuZF9kZWxheWVkX2NtZF9yZXN1bHQKLSAqCi0gKglXYWl0IGNvbW1hbmRzIGxpa2UgUExFQUNFIENBTEwgb3IgQ0xFQVIgQ0FMTCBtdXN0IHdhaXQKLSAqICAgICAgdW50aWwgdGhlIHJlc3VsdCBhcnJpdmVzLiBUaGlzIGZ1bmN0aW9uIHBhc3NlcwotICogICAgICB0aGUgcmVzdWx0IHRvIGEgd2FpdGluZyBzb2NrLiAKLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCBzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIFRYMjVNYm94KiBtYm94KQotewotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JbWJveF9jbWRfdCAqdXNyX2NtZCA9IChtYm94X2NtZF90ICopY2hhbi0+Y29tbW9uLm1ib3g7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbGVuPXNpemVvZih1bnNpZ25lZCBjaGFyKTsKLQotCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCi0JLyogSWYgdGhlIHNvY2sgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgdW5saW5raW5nIHRoZQotCSAqIGRyaXZlciBmcm9tIHRoZSBzb2NrZXQsIHdlIG11c3QgZ2V0IG91dC4gCi0JICogVGhpcyBuZXZlciBoYXBwZW5kcyBidXQgaXMgYSBzYW5pdHkgY2hlY2suICovCi0JaWYgKHRlc3RfYml0KDAsJmNoYW4tPmNvbW1vbi5jb21tb25fY3JpdGljYWwpKXsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghdXNyX2NtZCB8fCAhY2hhbi0+Y29tbW9uLnNrIHx8ICFjaGFuLT5jb21tb24uZnVuYyl7Ci0JCURCR19QUklOVEsoS0VSTl9JTkZPICJEZWxheSByZXN1bHQ6IFNvY2sgbm90IGJvdW5kZWQgc2s6ICV1LCBmdW5jOiAldSwgbWJveDogJXVcbiIsCi0JCQkodW5zaWduZWQgaW50KWNoYW4tPmNvbW1vbi5zaywKLQkJCSh1bnNpZ25lZCBpbnQpY2hhbi0+Y29tbW9uLmZ1bmMsCi0JCQkodW5zaWduZWQgaW50KXVzcl9jbWQpOyAKLQkJcmV0dXJuOwotCX0KLQotCW1lbWNweSgmdXNyX2NtZC0+Y21kLCAmbWJveC0+Y21kLCBzaXplb2YoVFgyNUNtZCkpOyAKLQlpZiAobWJveC0+Y21kLmxlbmd0aCA+IDApewotCQltZW1jcHkodXNyX2NtZC0+ZGF0YSwgbWJveC0+ZGF0YSwgbWJveC0+Y21kLmxlbmd0aCk7Ci0JfQotCi0JaWYgKGFsbG9jX2FuZF9pbml0X3NrYl9idWYoY2FyZCwmc2tiLGxlbikpewotCQlwcmludGsoS0VSTl9JTkZPICJEZWxheSByZXN1bHQ6IE5vIHNvY2sgYnVmZmVyc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoc2tiX3B1dChza2IsbGVuKSwmbWJveC0+Y21kLmNvbW1hbmQsbGVuKTsKLQkKLQlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7Ci0Jc2tiLT5wa3RfdHlwZSA9IFdBTl9QQUNLRVRfQ01EOwotCQkJCi0JY2hhbi0+Y29tbW9uLmZ1bmMoc2tiLGRldixjaGFuLT5jb21tb24uc2spOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY2xlYXJfY29uZmlybV9ldmVudAotICoKLSAqIAlQYXNzIHRoZSBjbGVhciBjb25maXJtYXRpb24gZXZlbnQgdXAgdGhlIHNvY2suIFRoZQotICogICAgICBBUEkgd2lsbCBkaXNjb25uZWN0IG9ubHkgYWZ0ZXIgdGhlIGNsZWFyIGNvbmZpcm1hdGlvbgotICogICAgICBoYXMgYmVlbiByZWNlaXZlZC4gCi0gKgotICogICAgICBEZXBlbmRpbmcgb24gdGhlIHN0YXRlLCBjbGVhciBjb25maXJtYXRpb24gY291bGQgCi0gKiAgICAgIGJlIGFuIE9PQiBldmVudCwgb3IgYSByZXN1bHQgb2YgYW4gQVBJIGNvbW1hbmQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgY2xlYXJfY29uZmlybV9ldmVudCAoc2RsYV90ICpjYXJkLCBUWDI1TWJveCogbWIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCXVuc2lnbmVkIGNoYXIgb2xkX3N0YXRlOwkKLQotCWRldiA9IGZpbmRfY2hhbm5lbChjYXJkLG1iLT5jbWQubGNuKTsKLQlpZiAoIWRldil7Ci0JCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogKioqIEdPVCBDTEVBUiBCVVQgTk8gREVWICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsbWItPmNtZC5sY24pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljaGFuPWRldi0+cHJpdjsKLQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiJXM6IEdPVCBDTEVBUiBDT05GSVJNICVzOiAgTWJveCBsY24gJWkgIENoYW4gbGNuICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBtYi0+Y21kLmxjbiwgY2hhbi0+Y29tbW9uLmxjbik7Ci0KLQkvKiBJZiBub3QgQVBJIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0LiAKLQkgKiBJZiBBUEksIHNlbmQgdGhlIHJlc3VsdCB0byBhIHdhaXRpbmcKLSAgICAgICAgICogc29ja2V0LgotCSAqLwotCQotCW9sZF9zdGF0ZSA9IGNoYW4tPmNvbW1vbi5zdGF0ZTsKLQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJc3dpdGNoIChvbGRfc3RhdGUpIHsKLQotCQljYXNlIFdBTl9ESVNDT05ORUNUSU5HOgotCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJc2VuZF9kZWxheWVkX2NtZF9yZXN1bHQoY2FyZCxkZXYsbWIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQkJCXNlbmRfb29iX21zZyhjYXJkLGRldixtYik7Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHNlbmRfb29iX21zZwotICoKLSAqICAgIENvbnN0cnVjdCBhbiBORU0gTWVzc2FnZSBhbmQgcGFzcyBpdCB1cCB0aGUgY29ubmVjdGVkCi0gKiAgICBzb2NrLiBJZiB0aGUgc29jayBpcyBub3QgYm91bmRlZCBkaXNjYXJkIHRoZSBORU0uCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBzZW5kX29vYl9tc2coc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBUWDI1TWJveCAqbWJveCkKLXsKLQl4MjVfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCW1ib3hfY21kX3QgKnVzcl9jbWQgPSAobWJveF9jbWRfdCAqKWNoYW4tPmNvbW1vbi5tYm94OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGxlbj1zaXplb2YoeDI1YXBpX2hkcl90KSttYm94LT5jbWQubGVuZ3RoOwotCXgyNWFwaV90ICphcGlfaGRyOwotCi0JLyogSWYgdGhlIHNvY2sgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgdW5saW5raW5nIHRoZQotCSAqIGRyaXZlciBmcm9tIHRoZSBzb2NrZXQsIHdlIG11c3QgZ2V0IG91dC4gCi0JICogVGhpcyBuZXZlciBoYXBwZW5kcyBidXQgaXMgYSBzYW5pdHkgY2hlY2suICovCi0JaWYgKHRlc3RfYml0KDAsJmNoYW4tPmNvbW1vbi5jb21tb25fY3JpdGljYWwpKXsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghdXNyX2NtZCB8fCAhY2hhbi0+Y29tbW9uLnNrIHx8ICFjaGFuLT5jb21tb24uZnVuYyl7Ci0JCURCR19QUklOVEsoS0VSTl9JTkZPICJPT0IgTVNHOiBTb2NrIG5vdCBib3VuZGVkXG4iKTsgCi0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoJnVzcl9jbWQtPmNtZCwgJm1ib3gtPmNtZCwgc2l6ZW9mKFRYMjVDbWQpKTsgCi0JaWYgKG1ib3gtPmNtZC5sZW5ndGggPiAwKXsKLQkJbWVtY3B5KHVzcl9jbWQtPmRhdGEsIG1ib3gtPmRhdGEsIG1ib3gtPmNtZC5sZW5ndGgpOwotCX0KLQotCWlmIChhbGxvY19hbmRfaW5pdF9za2JfYnVmKGNhcmQsJnNrYixsZW4pKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE9PQiBNU0c6IE5vIHNvY2sgYnVmZmVyc1xuIixjYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCWFwaV9oZHIgPSAoeDI1YXBpX3QqKXNrYl9wdXQoc2tiLGxlbik7IAotCWFwaV9oZHItPmhkci5wa3RUeXBlID0gbWJveC0+Y21kLnBrdFR5cGUgJiAweDdGOwotCWFwaV9oZHItPmhkci5xZG0gICAgID0gbWJveC0+Y21kLnFkbTsKLQlhcGlfaGRyLT5oZHIuY2F1c2UgICA9IG1ib3gtPmNtZC5jYXVzZTsKLQlhcGlfaGRyLT5oZHIuZGlhZ24gICA9IG1ib3gtPmNtZC5kaWFnbjsKLQlhcGlfaGRyLT5oZHIubGVuZ3RoICA9IG1ib3gtPmNtZC5sZW5ndGg7Ci0JYXBpX2hkci0+aGRyLnJlc3VsdCAgPSBtYm94LT5jbWQucmVzdWx0OwotCWFwaV9oZHItPmhkci5sY24gICAgID0gbWJveC0+Y21kLmxjbjsKLQotCWlmIChtYm94LT5jbWQubGVuZ3RoID4gMCl7Ci0JCW1lbWNweShhcGlfaGRyLT5kYXRhLG1ib3gtPmRhdGEsbWJveC0+Y21kLmxlbmd0aCk7Ci0JfQotCQotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKLQlza2ItPnBrdF90eXBlID0gV0FOX1BBQ0tFVF9FUlI7Ci0JCQkKLQlpZiAoY2hhbi0+Y29tbW9uLmZ1bmMoc2tiLGRldixjaGFuLT5jb21tb24uc2spIDwgMCl7Ci0JCWlmIChiaF9lbnF1ZXVlKGRldixza2IpKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcm9wcGluZyBPT0IgTVNHXG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQl9Ci0JfQotCi0JREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiBPT0IgTVNHIE9LLCAlcywgbGNuICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBtYm94LT5jbWQubGNuKTsKLX0JCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgYWxsb2NfYW5kX2luaXRfc2tiX2J1ZiAKLSAqCi0gKglBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBza2IgYnVmZmVyLiAKLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgYWxsb2NfYW5kX2luaXRfc2tiX2J1ZiAoc2RsYV90ICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9ICpza2I7Ci0KLQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyBYMjVfSFJESERSX1NaKTsKLQlpZiAobmV3X3NrYiA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHNrYl90YWlscm9vbShuZXdfc2tiKSA8IGxlbil7Ci0JCS8qIE5vIHJvb20gZm9yIHRoZSBwYWNrZXQuIENhbGwgb2ZmIHRoZSB3aG9sZSB0aGluZyEgKi8KLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpc3RlbjogdW5leHBlY3RlZGx5IGxvbmcgcGFja2V0IHNlcXVlbmNlXG4iCi0JCQksY2FyZC0+ZGV2bmFtZSk7Ci0JCSpza2IgPSBOVUxMOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkqc2tiID0gbmV3X3NrYjsKLQlyZXR1cm4gMDsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogIGFwaV9vb2JfZXZlbnQgCi0gKgotICoJU2VuZCBhbiBPT0IgZXZlbnQgdXAgdG8gdGhlIHNvY2sgCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBhcGlfb29iX2V2ZW50IChzZGxhX3QgKmNhcmQsVFgyNU1ib3ggKm1ib3gpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBtYm94LT5jbWQubGNuKTsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQotCWNoYW49ZGV2LT5wcml2OwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKQotCQlzZW5kX29vYl9tc2coY2FyZCxkZXYsbWJveCk7Ci0JCi19Ci0KLQotCi0KLXN0YXRpYyBpbnQgY2hhbm5lbF9kaXNjb25uZWN0KHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQotCWludCBlcnI7Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQotCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogVElNRVI6ICVzLCBEZXZpY2UgZG93biBkaXNjb25uZWN0aW5nXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQotCWlmIChjaGFuLT5jb21tb24uc3ZjKXsKLQkJZXJyID0geDI1X2NsZWFyX2NhbGwoY2FyZCxjaGFuLT5jb21tb24ubGNuLDAsMCk7Ci0JfWVsc2V7Ci0JCS8qIElmIGNoYW5uZWwgaXMgUFZDIG9yIExBUEIgSERMQywgdGhlcmUgaXMgbm8gY2FsbAotICAgICAgICAgICAgICAgICAqIHRvIGJlIGNsZWFyZWQsIHRodXMgZHJvcCBkb3duIHRvIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICogYXJlYSAKLQkgICAgICAgICAqLwotCQllcnIgPSAxOwotCX0KLQotCXN3aXRjaCAoZXJyKXsKLQkKLQkJY2FzZSBYMjVSRVNfQ0hBTk5FTF9JTl9VU0U6CQotCQljYXNlIFgyNVJFU19OT1RfUkVBRFk6Ci0JCQllcnIgPSBUUllfQ01EX0FHQUlOOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ01EX09LOgotCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIkNBTEwgQ0xFQVIgT0s6IERldiAlcyBDaGFuIExjbiAlaVxuIiwKLQkJCQkJCWRldi0+bmFtZSxjaGFuLT5jb21tb24ubGNuKTsKLQotCQkJc2V0X2NoYW5fc3RhdGUoZGV2LFdBTl9ESVNDT05ORUNUSU5HKTsKLQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCQkJZXJyID0gREVMQVlfUkVTVUxUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBJZiBMQVBCIEhETEMgcHJvdG9jb2wsIGJyaW5nIHRoZSB3aG9sZSBsaW5rIGRvd24KLSAgICAgICAgICAgICAgICAgICAgICAgICAqIG9uY2UgdGhlIGFwcGxpY2F0aW9uIHRlcm1pbmF0ZXMgCi0JCQkgKi8KLQotCQkJc2V0X2NoYW5fc3RhdGUoZGV2LFdBTl9ESVNDT05ORUNURUQpOwotCi0JCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIkxBUEI6IERpc2Nvbm5lY3RpbmcgTGlua1xuIik7Ci0JCQkJaGRsY19saW5rX2Rvd24gKGNhcmQpOwotCQkJfQotCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQsMCk7Ci0JCQllcnIgPSBSRVRVUk5fUkVTVUxUOwotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgaGRsY19saW5rX2Rvd24gKHNkbGFfdCAqY2FyZCkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gNTsKLQlpbnQgZXJyPTA7Ci0KLQlkbyB7Ci0JCW1lbXNldChtYm94LDAsc2l6ZW9mKFRYMjVNYm94KSk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X0hETENfTElOS19ESVNDOwotCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJbWJveC0+ZGF0YVswXT0wOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSERMQ19MSU5LX0RJU0MsIDApKTsKLQotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBIZGxjIExpbmsgRG93biBGYWlsZWQgJXhcbiIsY2FyZC0+ZGV2bmFtZSxlcnIpOwotCi0JZGlzY29ubmVjdCAoY2FyZCk7Ci0JCi19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfYmFkX2NvbW1hbmQoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JaW50IGJhZF9jbWQgPSAwOwotCi0Jc3dpdGNoIChhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpJjB4N0YpewotCi0JCWNhc2UgWDI1X1BMQUNFX0NBTEw6Ci0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9ESVNDT05ORUNURUQpCi0JCQkJYmFkX2NtZD0xOwotCQkJYnJlYWs7Ci0JCWNhc2UgWDI1X0NMRUFSX0NBTEw6Ci0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlID09IFdBTl9ESVNDT05ORUNURUQpCi0JCQkJYmFkX2NtZD0xOwotCQkJYnJlYWs7Ci0JCWNhc2UgWDI1X0FDQ0VQVF9DQUxMOgotCQkJaWYgKGNoYW4tPmNvbW1vbi5zdGF0ZSAhPSBXQU5fQ09OTkVDVElORykKLQkJCQliYWRfY21kPTE7Ci0JCQlicmVhazsKLQkJY2FzZSBYMjVfUkVTRVQ6Ci0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9DT05ORUNURUQpCi0JCQkJYmFkX2NtZD0xOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQliYWRfY21kPTE7Ci0JCQlicmVhazsKLQl9Ci0KLQlpZiAoYmFkX2NtZCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnZhbGlkIFN0YXRlLCBCQUQgQ29tbWFuZCAleCwgZGV2ICVzLCBsY24gJWksIHN0ICVpXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5jb21tYW5kKSxkZXYtPm5hbWUsIAotCQkJY2hhbi0+Y29tbW9uLmxjbiwgY2hhbi0+Y29tbW9uLnN0YXRlKTsKLQl9Ci0KLQlyZXR1cm4gYmFkX2NtZDsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogWFBJUEVNT04gRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBVRFAgY2FsbCBvZiB0eXBlIFhQSVBFCi0gKi8KLQotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QgKmNhcmQpCi17Ci0JaW50ICAgICAgICAgICAgY19yZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JdW5zaWduZWQgaW50ICAgbGVuOwotCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwotCVRYMjVNYm94ICAgICAgICptYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgICAgICAgICAgICBlcnI7Ci0JaW50ICAgICAgICAgICAgdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotICAgICAgICB4MjVfY2hhbm5lbF90ICAqY2hhbjsKLQl1bnNpZ25lZCBzaG9ydCBsY247Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JCi0KLQl4MjVfdWRwX3BrdF90ICp4MjVfdWRwX3BrdDsKLQl4MjVfdWRwX3BrdCA9ICh4MjVfdWRwX3BrdF90ICopY2FyZC0+dS54LnVkcF9wa3RfZGF0YTsKLQotCWRldiA9IGNhcmQtPnUueC51ZHBfZGV2OwotCWNoYW4gPSBkZXYtPnByaXY7Ci0JbGNuID0gY2hhbi0+Y29tbW9uLmxjbjsKLQotCXN3aXRjaCh4MjVfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpIHsKLSAgICAgICAgICAgIAotCQkvKiBYUElQRV9FTkFCTEVfVFJBQ0UgKi8KLQkJY2FzZSBYUElQRV9FTkFCTEVfVFJBQ0lORzoKLQotCQkvKiBYUElQRV9HRVRfVFJBQ0VfSU5GTyAqLwotCQljYXNlIFhQSVBFX0dFVF9UUkFDRV9JTkZPOgotIAotCQkvKiBTRVQgRlQxIE1PREUgKi8KLQkJY2FzZSBYUElQRV9TRVRfRlQxX01PREU6Ci0gICAgICAgICAgIAotCQkJaWYoY2FyZC0+dS54LnVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLSAgICAgICAgICAgICAgICAgICAgCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfZGlyZWN0aW9uX2VycjsKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCS8qIFhQSVBFX0ZUMV9SRUFEX1NUQVRVUyAqLwotCQljYXNlIFhQSVBFX0ZUMV9SRUFEX1NUQVRVUzoKLQotCQkvKiBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkJY2FzZSBYUElQRV9GVDFfU1RBVFVTX0NUUkw6Ci0JCQlpZihjYXJkLT5ody5md2lkICE9ICBTRklEX1gyNV81MDgpIHsKLQkJCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfYWRwdHJfdHlwZV9lcnI7Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotICAgICAgIAl9Ci0KLQlpZighdWRwX21nbXRfcmVxX3ZhbGlkKSB7Ci0gICAgICAgICAgIAkvKiBzZXQgbGVuZ3RoIHRvIDAgKi8KLQkJeDI1X3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSAwOwotCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJeDI1X3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAoY2FyZC0+aHcuZndpZCAhPSBTRklEX1gyNV81MDgpID8gMHgxRiA6IDB4Q0Q7Ci0JCQotCX0gZWxzZSB7ICAgCi0gICAgICAgIAotCQlzd2l0Y2ggKHgyNV91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotICAgIAotCQotCQljYXNlIFhQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUzoKLQkJCWluaXRfeDI1X2NoYW5uZWxfc3RydWN0KGNoYW4pOwotCQkJaW5pdF9nbG9iYWxfc3RhdGlzdGljcyhjYXJkKTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQkJYnJlYWs7Ci0KLQotCQljYXNlIFhQSVBFX0RSSVZFUl9TVEFUX0lGU0VORDoKLQkJCW1lbWNweSh4MjVfdWRwX3BrdC0+ZGF0YSwgJmNoYW4tPmlmX3NlbmRfc3RhdCwgc2l6ZW9mKGlmX3NlbmRfc3RhdF90KSk7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gc2l6ZW9mKGlmX3NlbmRfc3RhdF90KTsKLQkJCXgyNV91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gIG1ib3gtPmNtZC5sZW5ndGg7CQotCQkJYnJlYWs7Ci0JCi0JCWNhc2UgWFBJUEVfRFJJVkVSX1NUQVRfSU5UUjoKLQkJCW1lbWNweSgmeDI1X3VkcF9wa3QtPmRhdGFbMF0sICZjYXJkLT5zdGF0aXN0aWNzLCBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmeDI1X3VkcF9wa3QtPmRhdGFbc2l6ZW9mKGdsb2JhbF9zdGF0c190KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFuLT5yeF9pbnRyX3N0YXQsIHNpemVvZihyeF9pbnRyX3N0YXRfdCkpOwotCQkJCi0JCQltYm94LT5jbWQubGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSArCi0JCQkJCXNpemVvZihyeF9pbnRyX3N0YXRfdCk7Ci0JCQl4MjVfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9ICBtYm94LT5jbWQubGVuZ3RoOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBYUElQRV9EUklWRVJfU1RBVF9HRU46Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoeDI1X3VkcF9wa3QtPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFuLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGlwZV9tZ210X3N0YXRfdCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJngyNV91ZHBfcGt0LT5kYXRhW3NpemVvZihwaXBlX21nbXRfc3RhdF90KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcmQtPnN0YXRpc3RpY3MsIHNpemVvZihnbG9iYWxfc3RhdHNfdCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB4MjVfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MjVfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IHNpemVvZihnbG9iYWxfc3RhdHNfdCkrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyeF9pbnRyX3N0YXRfdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYm94LT5jbWQubGVuZ3RoID0geDI1X3VkcF9wa3QtPmNibG9jay5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotCQljYXNlIFhQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0JCQljaGFuLT5yb3V0ZXJfdXBfdGltZSA9IHR2LnR2X3NlYyAtIGNoYW4tPnJvdXRlcl9zdGFydF90aW1lOwotICAgIAkgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopJngyNV91ZHBfcGt0LT5kYXRhID0gY2hhbi0+cm91dGVyX3VwX3RpbWU7CQotCQkJeDI1X3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBtYm94LT5jbWQubGVuZ3RoID0gNDsKLQkJCXgyNV91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCWJyZWFrOwotCQotCQlkZWZhdWx0IDoKLQotCQkJZG8gewotCQkJCW1lbWNweSgmbWJveC0+Y21kLCAmeDI1X3VkcF9wa3QtPmNibG9jay5jb21tYW5kLCBzaXplb2YoVFgyNUNtZCkpOwotCQkJCWlmKG1ib3gtPmNtZC5sZW5ndGgpeyAKLQkJCQkJbWVtY3B5KCZtYm94LT5kYXRhLCAKLQkJCQkJICAgICAgIChjaGFyICopeDI1X3VkcF9wa3QtPmRhdGEsIAotCQkJCQkgICAgICAgbWJveC0+Y21kLmxlbmd0aCk7Ci0JCQkJfQkKLQkJCi0JCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkJfSB3aGlsZSAoZXJyICYmIGNfcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBtYm94LT5jbWQuY29tbWFuZCwgMCkpOwotCi0KLQkJCWlmICggZXJyID09IENNRF9PSyB8fCAKLQkJCSAgICAoZXJyID09IDEgJiYgCi0JCQkgICAgIChtYm94LT5jbWQuY29tbWFuZCA9PSAweDA2IHx8IAotCQkJICAgICAgbWJveC0+Y21kLmNvbW1hbmQgPT0gMHgxNikgICkgKXsKLQotCQkJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9hZHB0cl9jbW5kX09LOwotCQkJfSBlbHNlIHsKLQkJCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF90aW1lb3V0OwotCQkJfQotCi0JCQkgIC8qIGNvcHkgdGhlIHJlc3VsdCBiYWNrIHRvIG91ciBidWZmZXIgKi8KLQkJCW1lbWNweSgmeDI1X3VkcF9wa3QtPmNibG9jay5jb21tYW5kLCAmbWJveC0+Y21kLCBzaXplb2YoVFgyNUNtZCkpOwotCi0gICAgICAJICAgICAgICAgCWlmKG1ib3gtPmNtZC5sZW5ndGgpIHsKLSAgICAgICAgCSAgICAgICAgICAgICAgIG1lbWNweSgmeDI1X3VkcF9wa3QtPmRhdGEsICZtYm94LT5kYXRhLCBtYm94LT5jbWQubGVuZ3RoKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCX0gLy9zd2l0Y2gKLQotICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8qIEZpbGwgVURQIFRUTCAqLwotCi0JeDI1X3VkcF9wa3QtPmlwX3BrdC50dGwgPSBjYXJkLT53YW5kZXYudHRsOwotICAgICAgICBsZW4gPSByZXBseV91ZHAoY2FyZC0+dS54LnVkcF9wa3RfZGF0YSwgbWJveC0+Y21kLmxlbmd0aCk7Ci0KLQotICAgICAgICBpZihjYXJkLT51LngudWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSykgewotCQkKLQkJZXJyID0geDI1X3NlbmQoY2FyZCwgbGNuLCAwLCBsZW4sIGNhcmQtPnUueC51ZHBfcGt0X2RhdGEpOwotCQlpZiAoIWVycikgCi0JCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9wYXNzZWQ7Ci0JCWVsc2UKLQkJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9hZHB0cl9zZW5kX2ZhaWxlZDsKLQkKLQl9IGVsc2UgewotCi0JCS8qIEFsbG9jYXRlIHNvY2tldCBidWZmZXIgKi8KLQkJaWYoKG5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGxlbikpICE9IE5VTEwpIHsKLQkJCXZvaWQgKmJ1ZjsKLQotCQkJLyogY29weSBkYXRhIGludG8gbmV3X3NrYiAqLwotCQkJYnVmID0gc2tiX3B1dChuZXdfc2tiLCBsZW4pOwotCQkJbWVtY3B5KGJ1ZiwgY2FyZC0+dS54LnVkcF9wa3RfZGF0YSwgbGVuKTsKLSAgICAgICAgCi0JCQkvKiBEZWNhcHN1bGF0ZSBwYWNrZXQgYW5kIHBhc3MgaXQgdXAgdGhlIHByb3RvY29sIAotCQkJICAgc3RhY2sgKi8KLQkJCW5ld19za2ItPmRldiA9IGRldjsKLQkKLQkJCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkKLSAgICAgICAgICAgICAgICAgICAgICAgIAluZXdfc2tiLT5wcm90b2NvbCA9IGh0b25zKFgyNV9QUk9UKTsKLQkJCWVsc2UgCi0JCQkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0JCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2tiLT5tYWMucmF3ID0gbmV3X3NrYi0+ZGF0YTsKLQotCQkJbmV0aWZfcngobmV3X3NrYik7Ci0JCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfcGFzc2VkX3RvX3N0YWNrOwotICAgICAgICAgICAgCQotCQl9IGVsc2UgewotCQkJKytjaGFuLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X25vX3NvY2tldDsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IFVEUCBtZ210IGNtbmQsIG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAJfQotICAgICAgICB9Ci0KLQljYXJkLT51LngudWRwX3BrdF9sZ3RoID0gMDsKLQotCXJldHVybiAxOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIFVEUCBjYWxsIGl0IGlzLiBEUlZTVEFUUyBvciBYUElQRThORCA/Ci0gKi8KLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzZGxhX3QqIGNhcmQgKQotewotCXgyNV91ZHBfcGt0X3QgKngyNV91ZHBfcGt0ID0gKHgyNV91ZHBfcGt0X3QgKilza2ItPmRhdGE7Ci0KLSAgICAgICAgaWYoKHgyNV91ZHBfcGt0LT5pcF9wa3QucHJvdG9jb2wgPT0gVURQTUdNVF9VRFBfUFJPVE9DT0wpICYmCi0JCSh4MjVfdWRwX3BrdC0+aXBfcGt0LnZlcl9pbmV0X2hkcl9sZW5ndGggPT0gMHg0NSkgJiYKLQkJKHgyNV91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9PSBudG9ocyhjYXJkLT53YW5kZXYudWRwX3BvcnQpKSAmJgotCQkoeDI1X3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9PSBVRFBNR01UX1JFUVVFU1QpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFzdHJuY21wKHgyNV91ZHBfcGt0LT53cF9tZ210LnNpZ25hdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURQTUdNVF9YUElQRV9TSUdOQVRVUkUsIDgpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVEUF9YUElQRV9UWVBFOwotCQkJfWVsc2V7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVEUCBQYWNrZXQsIEZhaWxlZCBTaWduYXR1cmUgIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JfQotCi0gICAgICAgIHJldHVybiBVRFBfSU5WQUxJRF9UWVBFOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVwbHkgdG8gVURQIE1hbmFnZW1lbnQgc3lzdGVtLgotICogUmV0dXJuIG5vdGhpbmcuCi0gKi8KLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKSAKLXsKLQl1bnNpZ25lZCBzaG9ydCBsZW4sIHVkcF9sZW5ndGgsIHRlbXAsIGlwX2xlbmd0aDsKLQl1bnNpZ25lZCBsb25nIGlwX3RlbXA7Ci0JaW50IGV2ZW5fYm91bmQgPSAwOwotCi0gIAotCXgyNV91ZHBfcGt0X3QgKngyNV91ZHBfcGt0ID0gKHgyNV91ZHBfcGt0X3QgKilkYXRhOyAKLQotCS8qIFNldCBsZW5ndGggb2YgcGFja2V0ICovCi0JbGVuID0gc2l6ZW9mKGlwX3BrdF90KSsgCi0JICAgICAgc2l6ZW9mKHVkcF9wa3RfdCkrCi0JICAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JICAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICBtYm94X2xlbjsKLSAKLQotCS8qIGZpbGwgaW4gVURQIHJlcGx5ICovCi0JeDI1X3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9IFVEUE1HTVRfUkVQTFk7Ci0gIAotCS8qIGZpbGwgaW4gVURQIGxlbmd0aCAqLwotCXVkcF9sZW5ndGggPSBzaXplb2YodWRwX3BrdF90KSsgCi0JCSAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JCSAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkJICAgICBtYm94X2xlbjsgCi0KLQotCS8qIHB1dCBpdCBvbiBhbiBldmVuIGJvdW5kYXJ5ICovCi0JaWYgKCB1ZHBfbGVuZ3RoICYgMHgwMDAxICkgewotCQl1ZHBfbGVuZ3RoICs9IDE7Ci0JCWxlbiArPSAxOwotCQlldmVuX2JvdW5kID0gMTsKLQl9Ci0KLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQl4MjVfdWRwX3BrdC0+dWRwX3BrdC51ZHBfbGVuZ3RoID0gdGVtcDsKLQkgCi0JLyogc3dhcCBVRFAgcG9ydHMgKi8KLQl0ZW1wID0geDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0OwotCXgyNV91ZHBfcGt0LT51ZHBfcGt0LnVkcF9zcmNfcG9ydCA9IAotCQkJeDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0OyAKLQl4MjVfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPSB0ZW1wOwotCi0KLQotCS8qIGFkZCBVRFAgcHNldWRvIGhlYWRlciAqLwotCXRlbXAgPSAweDExMDA7Ci0JKigodW5zaWduZWQgc2hvcnQgKikKLQkJKHgyNV91ZHBfcGt0LT5kYXRhK21ib3hfbGVuK2V2ZW5fYm91bmQpKSA9IHRlbXA7CQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCSooKHVuc2lnbmVkIHNob3J0ICopCi0JCSh4MjVfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKzIpKSA9IHRlbXA7Ci0JCSAKLQkvKiBjYWxjdWxhdGUgVURQIGNoZWNrc3VtICovCi0JeDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gMDsKLQotCXgyNV91ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IAotCQljYWxjX2NoZWNrc3VtKCZkYXRhW1VEUF9PRkZTRVRdLCB1ZHBfbGVuZ3RoK1VEUF9PRkZTRVQpOwotCi0JLyogZmlsbCBpbiBJUCBsZW5ndGggKi8KLQlpcF9sZW5ndGggPSBsZW47Ci0JdGVtcCA9IChpcF9sZW5ndGg8PDgpfChpcF9sZW5ndGg+PjgpOwotCXgyNV91ZHBfcGt0LT5pcF9wa3QudG90YWxfbGVuZ3RoID0gdGVtcDsKLSAgCi0JLyogc3dhcCBJUCBhZGRyZXNzZXMgKi8KLQlpcF90ZW1wID0geDI1X3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzczsKLQl4MjVfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzID0gCi0JCQkJeDI1X3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzczsKLQl4MjVfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzID0gaXBfdGVtcDsKLQotCQkgCi0JLyogZmlsbCBpbiBJUCBjaGVja3N1bSAqLwotCXgyNV91ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gMDsKLQl4MjVfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IGNhbGNfY2hlY2tzdW0oZGF0YSwgc2l6ZW9mKGlwX3BrdF90KSk7Ci0KLQlyZXR1cm4gbGVuOwotfSAvKiByZXBseV91ZHAgKi8KLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wOyAKLQl1bnNpZ25lZCBsb25nIHN1bT0wOwotCWludCBpOwotCi0JZm9yKCBpID0gMDsgaSA8bGVuOyBpKz0yICkgewotCQltZW1jcHkoJnRlbXAsJmRhdGFbaV0sMik7Ci0JCXN1bSArPSAodW5zaWduZWQgbG9uZyl0ZW1wOwotCX0KLQotCXdoaWxlIChzdW0gPj4gMTYgKSB7Ci0JCXN1bSA9IChzdW0gJiAweGZmZmZVTCkgKyAoc3VtID4+IDE2KTsKLQl9Ci0KLQl0ZW1wID0gKHVuc2lnbmVkIHNob3J0KXN1bTsKLQl0ZW1wID0gfnRlbXA7Ci0KLQlpZiggdGVtcCA9PSAwICkgCi0JCXRlbXAgPSAweGZmZmY7Ci0KLQlyZXR1cm4gdGVtcDsJCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFN0b3JlIGEgVURQIG1hbmFnZW1lbnQgcGFja2V0IGZvciBsYXRlciBwcm9jZXNzaW5nLgotICovCi0KLXN0YXRpYyBpbnQgc3RvcmVfdWRwX21nbXRfcGt0KGludCB1ZHBfdHlwZSwgY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgIGludCBsY24pCi17Ci0gICAgICAgIGludCB1ZHBfcGt0X3N0b3JlZCA9IDA7Ci0KLSAgICAgICAgaWYoIWNhcmQtPnUueC51ZHBfcGt0X2xndGggJiYgKHNrYi0+bGVuIDw9IE1BWF9MR1RIX1VEUF9NR05UX1BLVCkpewotICAgICAgICAgICAgICAgIGNhcmQtPnUueC51ZHBfcGt0X2xndGggPSBza2ItPmxlbjsKLSAgICAgICAgICAgICAgICBjYXJkLT51LngudWRwX3R5cGUgPSB1ZHBfdHlwZTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LngudWRwX3BrdF9zcmMgPSB1ZHBfcGt0X3NyYzsKLSAgICAgICAgICAgICAgICBjYXJkLT51LngudWRwX2xjbiA9IGxjbjsKLQkJY2FyZC0+dS54LnVkcF9kZXYgPSBkZXY7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGNhcmQtPnUueC51ZHBfcGt0X2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotICAgICAgICAgICAgICAgIGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfVURQX1BLVDsKLSAgICAgICAgICAgICAgICB1ZHBfcGt0X3N0b3JlZCA9IDE7Ci0KLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SOiBVRFAgcGFja2V0IG5vdCBzdG9yZWQgZm9yIExDTiAlZFxuIiwgCi0JCQkJCQkJY2FyZC0+ZGV2bmFtZSxsY24pOwotCX0KLQotICAgICAgICBpZih1ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9TVEFDSyl7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9ZWxzZXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX0KLQotICAgICAgICByZXR1cm4odWRwX3BrdF9zdG9yZWQpOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbCB0aGUgcHBwX3ByaXZhdGVfYXJlYSBzdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfeDI1X2NoYW5uZWxfc3RydWN0KCB4MjVfY2hhbm5lbF90ICpjaGFuICkKLXsKLQltZW1zZXQoJmNoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2VudHJ5LDAsc2l6ZW9mKGlmX3NlbmRfc3RhdF90KSk7Ci0JbWVtc2V0KCZjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9ub19zb2NrZXQsMCxzaXplb2YocnhfaW50cl9zdGF0X3QpKTsKLQltZW1zZXQoJmNoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfa21hbGxvY19lcnIsMCxzaXplb2YocGlwZV9tZ210X3N0YXRfdCkpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgR2xvYmFsIFN0YXRpc3RpY3MKLSAqLwotc3RhdGljIHZvaWQgaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggc2RsYV90ICpjYXJkICkKLXsKLQltZW1zZXQoJmNhcmQtPnN0YXRpc3RpY3MuaXNyX2VudHJ5LDAsc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNNUCBTdXBwb3J0Ci0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIFM1MDhfUzUxNF9sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQotewotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci19Ci1zdGF0aWMgdm9pZCBTNTA4X1M1MTRfdW5sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQotewotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHgyNV90aW1lcl9yb3V0aW5lCi0gKgotICogCUEgbW9yZSBlZmZpY2llbnQgcG9sbGluZyByb3V0aW5lLiAgRWFjaCBoYWxmIGEgc2Vjb25kCi0gKiAJcXVldWUgYSBwb2xsaW5nIHRhc2suIFdlIHdhbnQgdG8gZG8gdGhlIHBvbGxpbmcgaW4gYSAKLSAqIAl0YXNrIG5vdCB0aW1lciwgYmVjYXVzZSB0aW1lciBydW5zIGluIGludGVycnVwdCB0aW1lLgotICoKLSAqIAlGSVhNRSBQb2xsaW5nIHNob3VsZCBiZSByZXRoaW5rZWQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgeDI1X3RpbWVyX3JvdXRpbmUodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXNkbGFfdCAqY2FyZCA9IChzZGxhX3QqKWRhdGE7Ci0KLQlpZiAoIWNhcmQtPndhbmRldi5kZXYpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RvcHBpbmcgdGhlIFgyNSBQb2xsIFRpbWVyOiBObyBEZXYuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNhcmQtPm9wZW5fY250ICE9IGNhcmQtPnUueC5udW1fb2ZfY2gpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RvcHBpbmcgdGhlIFgyNSBQb2xsIFRpbWVyOiBJbnRlcmZhY2UgZG93bi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0b3BwaW5nIHRoZSBYMjUgUG9sbCBUaW1lcjogU2h1dHRpbmcgZG93bi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0JCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCXRyaWdnZXJfeDI1X3BvbGwoY2FyZCk7Ci0JfQotCQotCWNhcmQtPnUueC54MjVfdGltZXIuZXhwaXJlcz1qaWZmaWVzKyhIWj4+MSk7Ci0JYWRkX3RpbWVyKCZjYXJkLT51LngueDI1X3RpbWVyKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgZGlzYWJsZV9jb21tX3NodXRkb3duKHNkbGFfdCAqY2FyZCkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCS8qIFR1cm4gb2YgaW50ZXJydXRwcyAqLwotCW1ib3gtPmRhdGFbMF0gPSAwOwotCWlmIChjYXJkLT5ody5md2lkID09IFNGSURfWDI1XzUwOCl7Ci0JCW1ib3gtPmRhdGFbMV0gPSBjYXJkLT5ody5pcnE7Ci0JCW1ib3gtPmRhdGFbMl0gPSAyOwotCQltYm94LT5jbWQubGVuZ3RoID0gMzsKLQl9ZWxzZSB7Ci0JIAltYm94LT5jbWQubGVuZ3RoICA9IDE7Ci0JfQotCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X1NFVF9JTlRFUlJVUFRfTU9ERTsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSU5URVJSVVBUIE9GRiBGQUlFRCAleFxuIixlcnIpOwotCi0JLyogQnJpbmcgZG93biBIRExDICovCi0JbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX0NMT1NFOwotCW1ib3gtPmNtZC5sZW5ndGggID0gMDsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTElOSyBDTE9TRUQgRkFJTEVEICV4XG4iLGVycik7Ci0KLQotCS8qIEJyaW5kIGRvd24gRFRSICovCi0JbWJveC0+ZGF0YVswXSA9IDA7Ci0JbWJveC0+ZGF0YVsyXSA9IDA7Ci0JbWJveC0+ZGF0YVsxXSA9IDB4MDE7Ci0JbWJveC0+Y21kLmxlbmd0aCAgPSAzOwotCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X1NFVF9HTE9CQUxfVkFSUzsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRFRSIERPV04gRkFJTEVEICV4XG4iLGVycik7Ci0KLX0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKioqKioqIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhZHJ2LmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYWRydi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzJjMGY4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhZHJ2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhZHJ2LmMJU0RMQSBTdXBwb3J0IE1vZHVsZS4gIE1haW4gbW9kdWxlLgotKgotKgkJVGhpcyBtb2R1bGUgaXMgYSBsaWJyYXJ5IG9mIGNvbW1vbiBoYXJkd2FyZS1zcGVjaWZpYyBmdW5jdGlvbnMKLSoJCXVzZWQgYnkgYWxsIFNhbmdvbWEgZHJpdmVycy4KLSoKLSogQXV0aG9yOglHaWRlb24gSGFjawkKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogTWFyIDIwLCAyMDAxICBOZW5hZCBDb3JiaWMJQWRkZWQgdGhlIGF1dG9fcGNpX2NmZyBmaWxlZCwgdG8gc3VwcG9ydAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUENJU0xPVCAjMC4gCi0qIEFwciAwNCwgMjAwMCAgTmVuYWQgQ29yYmljCUZpeGVkIHRoZSBhdXRvIG1lbW9yeSBkZXRlY3Rpb24gY29kZS4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1lbW9yeSB0ZXN0IGF0IGFkZHJlc3MgMHhDODAwMC4KLSogTWFyIDA5LCAyMDAwICBOZW5hZCBDb3JiaWMgCUFkZGVkIEdpZGVvbidzIEJ1ZyBGaXg6IGNsZWFyIHBjaQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgZmxhZ3Mgb24gaW5pdGlhbCBsb2FkLgotKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKgkJCQlVcGRhdGVzIGZvciBMaW51eCAyLjIuWCBrZXJuZWxzLgkKLSogU2VwIDE3LCAxOTk4CUphc3ByZWV0IFNpbmdoCVVwZGF0ZXMgZm9yIGxpbnV4IDIuMi5YIGtlcm5lbHMKLSogRGVjIDIwLCAxOTk2CUdlbmUgS296aW4JVmVyc2lvbiAzLjAuMC4gQ29tcGxldGUgb3ZlcmhhdWwuCi0qIEp1bCAxMiwgMTk5NglHZW5lIEtvemluCUNoYW5nZXMgZm9yIExpbnV4IDIuMCBjb21wYXRpYmlsaXR5LgotKiBKdW4gMTIsIDE5OTYJR2VuZSBLb3ppbiAJQWRkZWQgc3VwcG9ydCBmb3IgUzUwMyBjYXJkLgotKiBBcHIgMzAsIDE5OTYJR2VuZSBLb3ppbglTRExBIGhhcmR3YXJlIGludGVycnVwdCBpcyBhY2tub3dsZWRnZWQgYmVmb3JlCi0qCQkJCWNhbGxpbmcgcHJvdG9jb2xzcGVjaWZpYyBJU1IuCi0qCQkJCVJlZ2lzdGVyIEkvTyBwb3J0cyB3aXRoIExpbnV4IGtlcm5lbC4KLSoJCQkJTWlzY2VsbGFuZW91cyBidWcgZml4ZXMuCi0qIERlYyAyMCwgMTk5NQlHZW5lIEtvemluCUZpeGVkIGEgYnVnIGluIGludGVycnVwdCByb3V0aW5lLgotKiBPY3QgMTQsIDE5OTUJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBOb3RlczoKLSAqIC0tLS0tLQotICogMS4gVGhpcyBjb2RlIGlzIG1lbnQgdG8gYmUgc3lzdGVtLWluZGVwZW5kZW50IChhcyBtdWNoIGFzIHBvc3NpYmxlKS4gIFRvCi0gKiAgICBhY2hpdmUgdGhpcywgdmFyaW91cyBtYWNyb3MgYXJlIHVzZWQgdG8gaGlkZSBzeXN0ZW0tc3BlY2lmaWMgaW50ZXJmYWNlcy4KLSAqICAgIFRvIGNvbXBpbGUgdGhpcyBjb2RlLCBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgbXVzdCBiZSBkZWZpbmVkOgotICoKLSAqCVBsYXRmb3JtCURlZmluZQotICoJLS0tLS0tLS0JLS0tLS0tCi0gKglMaW51eAkJX0xJTlVYXwotICoJU0NPIFVuaXgJX1NDT19VTklYXwotICoKLSAqIDIuIFN1cHBvcnRlZCBhZGFwdGVyIHR5cGVzOgotICoKLSAqCVM1MDJBCi0gKglFUzUwMkEgKFM1MDJFKQotICoJUzUwMwotICoJUzUwNwotICoJUzUwOCAoUzUwOSkKLSAqCi0gKiAzLiBTNTAyQSBOb3RlczoKLSAqCi0gKglUaGVyZSBpcyBubyBzZXBhcmF0ZSBEUE0gd2luZG93IGVuYWJsZS9kaXNhYmxlIGNvbnRyb2wgaW4gUzUwMkEuICBJdAotICoJb3BlbnMgaW1tZWRpYXRlbHkgYWZ0ZXIgYSB3aW5kb3cgbnVtYmVyIGl0IHdyaXR0ZW4gdG8gdGhlIEhNQ1IKLSAqCXJlZ2lzdGVyLiAgVG8gY2xvc2UgdGhlIHdpbmRvdywgSE1DUiBoYXMgdG8gYmUgd3JpdHRlbiBhIHZhbHVlCi0gKgk/Pz8/MTExMWIgKGUuZy4gMHgwRiBvciAweEZGKS4KLSAqCi0gKglTNTAyQSBEUE0gd2luZG93IGNhbm5vdCBiZSBsb2NhdGVkIGF0IG9mZnNldCBFMDAwIChlLmcuIDB4QUUwMDApLgotICoKLSAqCVRoZXJlIHNob3VsZCBiZSBhIGRlbGF5IG9mID8/PyBiZWZvcmUgcmVhZGluZyBiYWNrIFM1MDJBIHN0YXR1cwotICoJcmVnaXN0ZXIuCi0gKgotICogNC4gUzUwMkUgTm90ZXM6Ci0gKgotICoJUzUwMkUgaGFzIGEgaC93IGJ1ZzogYWx0aG91Z2ggZGVmYXVsdCBJUlEgbGluZSBzdGF0ZSBpcyBISUdILCBlbmFibGluZwotICoJaW50ZXJydXB0cyBieSBzZXR0aW5nIGJpdCAxIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyIChCQVNFKSB0byAnMScKLSAqCWNhdXNlcyBpdCB0byBnbyBMT1chIFRoZXJlZm9yZSwgZGlzYWJsaW5nIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGF0Ci0gKgliaXQgdG8gJzAnIGNhdXNlcyBsb3ctdG8taGlnaCB0cmFuc2l0aW9uIG9uIElSUSBsaW5lIChnaG9zdHkKLSAqCWludGVycnVwdCkuIFRoZSBzYW1lIG9jY3VycyB3aGVuIGRpc2FibGluZyBDUFUgYnkgcmVzZXR0aW5nIGJpdCAwIG9mCi0gKglDUFUgY29udHJvbCByZWdpc3RlciAoQkFTRSszKSAtIHNlZSB0aGUgbmV4dCBub3RlLgotICoKLSAqCVM1MDJFIENQVSBhbmQgRFBNIGNvbnRyb2wgaXMgbGltaXRlZDoKLSAqCi0gKglvIENQVSBjYW5ub3QgYmUgc3RvcHBlZCBpbmRlcGVuZGVudGx5LiBSZXNldHRpbmcgYml0IDAgb2YgdGhlIENQVWkKLSAqCSAgY29udHJvbCByZWdpc3RlciAoQkFTRSszKSBzaHV0cyB0aGUgYm9hcmQgZG93biBlbnRpcmVseSwgaW5jbHVkaW5nCi0gKgkgIERQTTsKLSAqCi0gKglvIERQTSBhY2Nlc3MgY2Fubm90IGJlIGNvbnRyb2xsZWQgZHluYW1pY2FsbHkuIE9uZXMgQ1BVIGlzIHN0YXJ0ZWQsCi0gKgkgIGJpdCAxIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyIChCQVNFKSBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIElSUSwKLSAqCSAgc28gdGhhdCBhY2Nlc3MgdG8gc2hhcmVkIG1lbW9yeSBjYW5ub3QgYmUgZGlzYWJsZWQgd2hpbGUgQ1BVIGlzCi0gKgkgIHJ1bm5pbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlfTElOVVhfCi0KLSNpZglkZWZpbmVkKF9MSU5VWF8pCS8qKioqKiogTGludXggKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSwgYW5kIG90aGVyIHVzZWZ1bCBzdHVmZiAqLwotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBvZmZzZXRvZigpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogcmV0dXJuIGNvZGVzICovCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBzdXBwb3J0IGZvciBsb2FkYWJsZSBtb2R1bGVzICovCi0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiBmb3IgamlmZmllcywgSFosIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhZHJ2Lmg+CS8qIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFzZm0uaD4JLyogU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+CS8qIFNETEEgUENJIGhhcmR3YXJlIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBQQ0kgZGVmaW5lcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIGluYigpLCBvdXRiKCksIGV0Yy4gKi8KLQotI2RlZmluZSBfSU5CKHBvcnQpCQkoaW5iKHBvcnQpKQotI2RlZmluZSBfT1VUQihwb3J0LCBieXRlKQkob3V0YigoYnl0ZSksKHBvcnQpKSkKLSNkZWZpbmUJU1lTVEVNX1RJQ0sJCWppZmZpZXMKLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotCi0jZWxpZglkZWZpbmVkKF9TQ09fVU5JWF8pCS8qKioqKiogU0NPIFVuaXggKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmCSFkZWZpbmVkKElOS0VSTkVMKQotI2Vycm9yCVRoaXMgY29kZSBNVVNUIGJlIGNvbXBpbGVkIGluIGtlcm5lbCBtb2RlIQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NkbGFkcnYuaD4JLyogQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8c3lzL3NkbGFzZm0uaD4JLyogU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxzeXMvaW5saW5lLmg+CQkvKiBmb3IgaW5iKCksIG91dGIoKSwgZXRjLiAqLwotI2RlZmluZSBfSU5CKHBvcnQpCQkoaW5iKHBvcnQpKQotI2RlZmluZSBfT1VUQihwb3J0LCBieXRlKQkob3V0YigocG9ydCksKGJ5dGUpKSkKLSNkZWZpbmUJU1lTVEVNX1RJQ0sJCWxib2x0Ci0KLSNlbHNlCi0jZXJyb3IJVW5rbm93biBzeXN0ZW0gdHlwZSEKLSNlbmRpZgotCi0jZGVmaW5lCU1PRF9WRVJTSU9OCTMKLSNkZWZpbmUJTU9EX1JFTEVBU0UJMAotCi0jZGVmaW5lCVNETEFfSU9ERUxBWQkxMDAJLyogSS9PIFJkL1dyIGRlbGF5LCAxMCB3b3JrcyBmb3IgNDg2RFgyLTY2ICovCi0jZGVmaW5lCUVYRUNfREVMQVkJMjAJLyogc2hhcmVkIG1lbW9yeSBhY2Nlc3MgZGVsYXksIG1rcyAqLwotI2RlZmluZQlFWEVDX1RJTUVPVVQJKEhaKjIpCS8qIGNvbW1hbmQgdGltZW91dCwgaW4gdGlja3MgKi8KLQotLyogSS9PIHBvcnQgYWRkcmVzcyByYW5nZSAqLwotI2RlZmluZSBTNTAyQV9JT1JBTkdFCTMKLSNkZWZpbmUgUzUwMkVfSU9SQU5HRQk0Ci0jZGVmaW5lIFM1MDNfSU9SQU5HRQkzCi0jZGVmaW5lIFM1MDdfSU9SQU5HRQk0Ci0jZGVmaW5lIFM1MDhfSU9SQU5HRQk0Ci0KLS8qIE1heGltdW0gYW1vdW50IG9mIG1lbW9yeSAqLwotI2RlZmluZSBTNTAyX01BWE1FTQkweDEwMDAwTAotI2RlZmluZSBTNTAzX01BWE1FTQkweDEwMDAwTAotI2RlZmluZSBTNTA3X01BWE1FTQkweDQwMDAwTAotI2RlZmluZSBTNTA4X01BWE1FTQkweDQwMDAwTAotCi0vKiBNaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkgKi8KLSNkZWZpbmUgUzUwMl9NSU5NRU0JMHg4MDAwTAotI2RlZmluZSBTNTAzX01JTk1FTQkweDgwMDBMCi0jZGVmaW5lIFM1MDdfTUlOTUVNCTB4MjAwMDBMCi0jZGVmaW5lIFM1MDhfTUlOTUVNCTB4MjAwMDBMCi0jZGVmaW5lIE5PX1BPUlQgICAgICAgICAtMQotCi0KLQotCi0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBIYXJkd2FyZS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgc2RsYV9kZXRlY3QJKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IHNkbGFfYXV0b2RwbQkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgc2RsYV9zZXRkcG0JKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IHNkbGFfbG9hZAkoc2RsYWh3X3QqIGh3LCBzZm1fdCogc2ZtLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIGludCBzZGxhX2luaXQJKHNkbGFod190KiBodyk7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZGxhX21lbXRlc3QgKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IHNkbGFfYm9vdGNmZwkoc2RsYWh3X3QqIGh3LCBzZm1faW5mb190KiBzZm1pbmZvKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1ha2VfY29uZmlnX2J5dGUgKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IHNkbGFfc3RhcnQJKHNkbGFod190KiBodywgdW5zaWduZWQgYWRkcik7Ci0KLXN0YXRpYyBpbnQgaW5pdF9zNTAyYQkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgaW5pdF9zNTAyZQkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgaW5pdF9zNTAzCShzZGxhaHdfdCogaHcpOwotc3RhdGljIGludCBpbml0X3M1MDcJKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IGluaXRfczUwOAkoc2RsYWh3X3QqIGh3KTsKLSAgICAgICAgICAgIAotc3RhdGljIGludCBkZXRlY3RfczUwMmEJKGludCBwb3J0KTsKLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDJlCShpbnQgcG9ydCk7Ci1zdGF0aWMgaW50IGRldGVjdF9zNTAzCShpbnQgcG9ydCk7Ci1zdGF0aWMgaW50IGRldGVjdF9zNTA3CShpbnQgcG9ydCk7Ci1zdGF0aWMgaW50IGRldGVjdF9zNTA4CShpbnQgcG9ydCk7Ci1zdGF0aWMgaW50IGRldGVjdF9zNTE0ICAoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgZmluZF9zNTE0X2FkYXB0ZXIoc2RsYWh3X3QqIGh3LCBjaGFyIGZpbmRfZmlyc3RfUzUxNF9jYXJkKTsKLQotLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIHBlZWtfYnlfNCAodW5zaWduZWQgbG9uZyBzcmMsIHZvaWQqIGJ1ZiwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyB2b2lkIHBva2VfYnlfNCAodW5zaWduZWQgbG9uZyBkZXN0LCB2b2lkKiBidWYsIHVuc2lnbmVkIGxlbik7Ci1zdGF0aWMgaW50IGNhbGlicmF0ZV9kZWxheSAoaW50IG1rcyk7Ci1zdGF0aWMgaW50IGdldF9vcHRpb25faW5kZXggKHVuc2lnbmVkKiBvcHRsaXN0LCB1bnNpZ25lZCBvcHR2YWwpOwotc3RhdGljIHVuc2lnbmVkIGNoZWNrX21lbXJlZ2lvbiAodm9pZCogcHRyLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIHVuc2lnbmVkCXRlc3RfbWVtcmVnaW9uICh2b2lkKiBwdHIsIHVuc2lnbmVkIGxlbik7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2hlY2tzdW0gKHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyBpbnQgaW5pdF9wY2lfc2xvdChzZGxhaHdfdCAqKTsKLQotc3RhdGljIGludCBwY2lfcHJvYmUoc2RsYWh3X3QgKmh3KTsKLQotLyoqKioqKiBHbG9iYWwgRGF0YSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBOb3RlOiBBbGwgZGF0YSBtdXN0IGJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQhISEKLSAqLwotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2RsYWRydl9wY2lfdGJsW10gPSB7Ci0JeyBWM19WRU5ET1JfSUQsIFYzX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKLQl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzZGxhZHJ2X3BjaV90YmwpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIGNoYXIgbW9kbmFtZVtdCT0gInNkbGFkcnYiOwotc3RhdGljIGNoYXIgZnVsbG5hbWVbXQk9ICJTRExBIFN1cHBvcnQgTW9kdWxlIjsKLXN0YXRpYyBjaGFyIGNvcHlyaWdodFtdCT0gIihjKSAxOTk1LTE5OTkgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiI7Ci1zdGF0aWMgdW5zaWduZWQJZXhlY19pZGxlOwotCi0vKiBIYXJkd2FyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCi0gKiBUaGVzZSBhcmUgYXJyYXlzIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c2VkIGJ5IHZlcmlmaWNhdGlvbiByb3V0aW5lcy4KLSAqIFRoZSBmaXJzdCBlbGVtZW50IG9mIGVhY2ggYXJyYXkgaXMgaXRzIHNpemUgKGkuZS4gbnVtYmVyIG9mIG9wdGlvbnMpLgotICovCi1zdGF0aWMgdW5zaWduZWQJczUwMl9wb3J0X29wdGlvbnNbXSA9Ci0JeyA0LCAweDI1MCwgMHgzMDAsIDB4MzUwLCAweDM2MCB9Ci07Ci1zdGF0aWMgdW5zaWduZWQJczUwM19wb3J0X29wdGlvbnNbXSA9Ci0JeyA4LCAweDI1MCwgMHgyNTQsIDB4MzAwLCAweDMwNCwgMHgzNTAsIDB4MzU0LCAweDM2MCwgMHgzNjQgfQotOwotc3RhdGljIHVuc2lnbmVkCXM1MDhfcG9ydF9vcHRpb25zW10gPQotCXsgOCwgMHgyNTAsIDB4MjcwLCAweDI4MCwgMHgzMDAsIDB4MzUwLCAweDM2MCwgMHgzODAsIDB4MzkwIH0KLTsKLQotc3RhdGljIHVuc2lnbmVkIHM1MDJhX2lycV9vcHRpb25zW10gPSB7IDAgfTsKLXN0YXRpYyB1bnNpZ25lZCBzNTAyZV9pcnFfb3B0aW9uc1tdID0geyA0LCAyLCAzLCA1LCA3IH07Ci1zdGF0aWMgdW5zaWduZWQgczUwM19pcnFfb3B0aW9uc1tdICA9IHsgNSwgMiwgMywgNCwgNSwgNyB9Owotc3RhdGljIHVuc2lnbmVkIHM1MDhfaXJxX29wdGlvbnNbXSAgPSB7IDgsIDMsIDQsIDUsIDcsIDEwLCAxMSwgMTIsIDE1IH07Ci0KLXN0YXRpYyB1bnNpZ25lZCBzNTAyYV9kcG1iYXNlX29wdGlvbnNbXSA9Ci17Ci0JMjgsCi0JMHhBMDAwMCwgMHhBMjAwMCwgMHhBNDAwMCwgMHhBNjAwMCwgMHhBODAwMCwgMHhBQTAwMCwgMHhBQzAwMCwKLQkweEMwMDAwLCAweEMyMDAwLCAweEM0MDAwLCAweEM2MDAwLCAweEM4MDAwLCAweENBMDAwLCAweENDMDAwLAotCTB4RDAwMDAsIDB4RDIwMDAsIDB4RDQwMDAsIDB4RDYwMDAsIDB4RDgwMDAsIDB4REEwMDAsIDB4REMwMDAsCi0JMHhFMDAwMCwgMHhFMjAwMCwgMHhFNDAwMCwgMHhFNjAwMCwgMHhFODAwMCwgMHhFQTAwMCwgMHhFQzAwMCwKLX07Ci1zdGF0aWMgdW5zaWduZWQgczUwN19kcG1iYXNlX29wdGlvbnNbXSA9Ci17Ci0JMzIsCi0JMHhBMDAwMCwgMHhBMjAwMCwgMHhBNDAwMCwgMHhBNjAwMCwgMHhBODAwMCwgMHhBQTAwMCwgMHhBQzAwMCwgMHhBRTAwMCwKLQkweEIwMDAwLCAweEIyMDAwLCAweEI0MDAwLCAweEI2MDAwLCAweEI4MDAwLCAweEJBMDAwLCAweEJDMDAwLCAweEJFMDAwLAotCTB4QzAwMDAsIDB4QzIwMDAsIDB4QzQwMDAsIDB4QzYwMDAsIDB4QzgwMDAsIDB4Q0EwMDAsIDB4Q0MwMDAsIDB4Q0UwMDAsCi0JMHhFMDAwMCwgMHhFMjAwMCwgMHhFNDAwMCwgMHhFNjAwMCwgMHhFODAwMCwgMHhFQTAwMCwgMHhFQzAwMCwgMHhFRTAwMCwKLX07Ci1zdGF0aWMgdW5zaWduZWQgczUwOF9kcG1iYXNlX29wdGlvbnNbXSA9CS8qIGluY2wuIFM1MDJFIGFuZCBTNTAzICovCi17Ci0JMzIsCi0JMHhBMDAwMCwgMHhBMjAwMCwgMHhBNDAwMCwgMHhBNjAwMCwgMHhBODAwMCwgMHhBQTAwMCwgMHhBQzAwMCwgMHhBRTAwMCwKLQkweEMwMDAwLCAweEMyMDAwLCAweEM0MDAwLCAweEM2MDAwLCAweEM4MDAwLCAweENBMDAwLCAweENDMDAwLCAweENFMDAwLAotCTB4RDAwMDAsIDB4RDIwMDAsIDB4RDQwMDAsIDB4RDYwMDAsIDB4RDgwMDAsIDB4REEwMDAsIDB4REMwMDAsIDB4REUwMDAsCi0JMHhFMDAwMCwgMHhFMjAwMCwgMHhFNDAwMCwgMHhFNjAwMCwgMHhFODAwMCwgMHhFQTAwMCwgMHhFQzAwMCwgMHhFRTAwMCwKLX07Ci0KLS8qCi1zdGF0aWMgdW5zaWduZWQJczUwMl9kcG1zaXplX29wdGlvbnNbXSA9IHsgMiwgMHgyMDAwLCAweDEwMDAwIH07Ci1zdGF0aWMgdW5zaWduZWQJczUwN19kcG1zaXplX29wdGlvbnNbXSA9IHsgMiwgMHgyMDAwLCAweDQwMDAgfTsKLXN0YXRpYyB1bnNpZ25lZAlzNTA4X2RwbXNpemVfb3B0aW9uc1tdID0geyAxLCAweDIwMDAgfTsKLSovCi0KLXN0YXRpYyB1bnNpZ25lZAlzNTAyYV9wY2xrX29wdGlvbnNbXSA9IHsgMiwgMzYwMCwgNzIwMCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDJlX3BjbGtfb3B0aW9uc1tdID0geyA1LCAzNjAwLCA1MDAwLCA3MjAwLCA4MDAwLCAxMDAwMCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDNfcGNsa19vcHRpb25zW10gID0geyAzLCA3MjAwLCA4MDAwLCAxMDAwMCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDdfcGNsa19vcHRpb25zW10gID0geyAxLCAxMjI4OCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDhfcGNsa19vcHRpb25zW10gID0geyAxLCAxNjAwMCB9OwotCi0vKiBIb3N0IG1lbW9yeSBjb250cm9sIHJlZ2lzdGVyIG1hc2tzICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzNTAyYV9obWNyW10gPQotewotCTB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsCS8qIEEwMDAwIC0gQUMwMDAgKi8KLQkweDIwLCAweDIyLCAweDI0LCAweDI2LCAweDI4LCAweDJBLCAweDJDLAkvKiBDMDAwMCAtIENDMDAwICovCi0JMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywJLyogRDAwMDAgLSBEQzAwMCAqLwotCTB4MzAsIDB4MzIsIDB4MzQsIDB4MzYsIDB4MzgsIDB4M0EsIDB4M0MsCS8qIEUwMDAwIC0gRUMwMDAgKi8KLX07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBzNTAyZV9obWNyW10gPQotewotCTB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUsCS8qIEEwMDAwIC0gQUUwMDAgKi8KLQkweDIwLCAweDIyLCAweDI0LCAweDI2LCAweDI4LCAweDJBLCAweDJDLCAweDJFLAkvKiBDMDAwMCAtIENFMDAwICovCi0JMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwJLyogRDAwMDAgLSBERTAwMCAqLwotCTB4MzAsIDB4MzIsIDB4MzQsIDB4MzYsIDB4MzgsIDB4M0EsIDB4M0MsIDB4M0UsCS8qIEUwMDAwIC0gRUUwMDAgKi8KLX07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBzNTA3X2htY3JbXSA9Ci17Ci0JMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwJLyogQTAwMDAgLSBBRTAwMCAqLwotCTB4NDAsIDB4NDIsIDB4NDQsIDB4NDYsIDB4NDgsIDB4NEEsIDB4NEMsIDB4NEUsCS8qIEIwMDAwIC0gQkUwMDAgKi8KLQkweDgwLCAweDgyLCAweDg0LCAweDg2LCAweDg4LCAweDhBLCAweDhDLCAweDhFLAkvKiBDMDAwMCAtIENFMDAwICovCi0JMHhDMCwgMHhDMiwgMHhDNCwgMHhDNiwgMHhDOCwgMHhDQSwgMHhDQywgMHhDRSwJLyogRTAwMDAgLSBFRTAwMCAqLwotfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHM1MDhfaG1jcltdID0KLXsKLQkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAkvKiBBMDAwMCAtIEFFMDAwICovCi0JMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywJLyogQzAwMDAgLSBDRTAwMCAqLwotCTB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCS8qIEQwMDAwIC0gREUwMDAgKi8KLQkweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGLAkvKiBFMDAwMCAtIEVFMDAwICovCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzNTA3X2lycW1hc2tbXSA9Ci17Ci0JMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg4MCwgMHhBMCwgMHhDMCwgMHhFMAotfTsKLQotc3RhdGljIGludCBwY2lfc2xvdF9hcltNQVhfUzUxNF9DQVJEU107Ci0KLS8qKioqKioqIEtlcm5lbCBMb2FkYWJsZSBNb2R1bGUgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE1vZHVsZSAnaW5zZXJ0JyBlbnRyeSBwb2ludC4KLSAqIG8gcHJpbnQgYW5ub3VuY2VtZW50Ci0gKiBvIGluaXRpYWxpemUgc3RhdGljIGRhdGEKLSAqIG8gY2FsaWJyYXRlIFNETEEgc2hhcmVkIG1lbW9yeSBhY2Nlc3MgZGVsYXkuCi0gKgotICogUmV0dXJuOgkwCU9rCi0gKgkJPCAwCWVycm9yLgotICogQ29udGV4dDoJcHJvY2VzcwotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IHNkbGFkcnZfaW5pdCh2b2lkKQotewotCWludCBpPTA7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlcyB2JXUuJXUgJXNcbiIsCi0JCWZ1bGxuYW1lLCBNT0RfVkVSU0lPTiwgTU9EX1JFTEVBU0UsIGNvcHlyaWdodCk7Ci0JZXhlY19pZGxlID0gY2FsaWJyYXRlX2RlbGF5KEVYRUNfREVMQVkpOwotI2lmZGVmIFdBTkRFQlVHCQotCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhlY19pZGxlID0gJWRcbiIsIG1vZG5hbWUsIGV4ZWNfaWRsZSk7Ci0jZW5kaWYJCi0KLQkvKiBJbml0aWFsaXplIHRoZSBQQ0kgQ2FyZCBhcnJheSwgd2hpY2gKLSAgICAgICAgICogd2lsbCBzdG9yZSBmbGFncywgdXNlZCB0byBtYXJrIAotICAgICAgICAgKiBjYXJkIGluaXRpYWxpemF0aW9uIHN0YXRlICovCi0JZm9yIChpPTA7IGk8TUFYX1M1MTRfQ0FSRFM7IGkrKykKLQkJcGNpX3Nsb3RfYXJbaV0gPSAweEZGOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTW9kdWxlICdyZW1vdmUnIGVudHJ5IHBvaW50LgotICogbyByZWxlYXNlIGFsbCByZW1haW5pbmcgc3lzdGVtIHJlc291cmNlcwotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2RsYWRydl9jbGVhbnVwKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KHNkbGFkcnZfaW5pdCk7Ci1tb2R1bGVfZXhpdChzZGxhZHJ2X2NsZWFudXApOwotCi0vKioqKioqKiBLZXJuZWwgQVBJcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgdXAgYWRhcHRlci4KLSAqIG8gZGV0ZWN0IGFkYXB0ZXIgdHlwZQotICogbyB2ZXJpZnkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBvcHRpb25zCi0gKiBvIGNoZWNrIGZvciBoYXJkd2FyZSBjb25mbGljdHMKLSAqIG8gc2V0IHVwIGFkYXB0ZXIgc2hhcmVkIG1lbW9yeQotICogbyB0ZXN0IGFkYXB0ZXIgbWVtb3J5Ci0gKiBvIGxvYWQgZmlybXdhcmUKLSAqIFJldHVybjoJMAlvay4KLSAqCQk8IDAJZXJyb3IKLSAqLwotCi1FWFBPUlRfU1lNQk9MKHNkbGFfc2V0dXApOwotCi1pbnQgc2RsYV9zZXR1cCAoc2RsYWh3X3QqIGh3LCB2b2lkKiBzZm0sIHVuc2lnbmVkIGxlbikKLXsKLQl1bnNpZ25lZCogaXJxX29wdAk9IE5VTEw7CS8qIElSUSBvcHRpb25zICovCi0JdW5zaWduZWQqIGRwbWJhc2Vfb3B0CT0gTlVMTDsJLyogRFBNIHdpbmRvdyBiYXNlIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCogcGNsa19vcHQJPSBOVUxMOwkvKiBDUFUgY2xvY2sgcmF0ZSBvcHRpb25zICovCi0JaW50IGVycj0wOwotCi0JaWYgKHNkbGFfZGV0ZWN0KGh3KSkgewotICAgICAgICAgICAgICAgIGlmKGh3LT50eXBlICE9IFNETEFfUzUxNCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBubyBTRExBIGNhcmQgZm91bmQgYXQgcG9ydCAweCVYXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgaHctPnBvcnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZihody0+dHlwZSAhPSBTRExBX1M1MTQpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgUyUwNHUgY2FyZCBhdCBwb3J0IDB4JVguXG4iLAotICAgICAgICAgICAgICAgIG1vZG5hbWUsIGh3LT50eXBlLCBody0+cG9ydCk7Ci0KLSAgICAgICAgICAgICAgICBody0+ZHBtc2l6ZSA9IFNETEFfV0lORE9XU0laRTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGh3LT50eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTRExBX1M1MDJBOgotICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlvX3JhbmdlICAgID0gUzUwMkFfSU9SQU5HRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlycV9vcHQgICAgICAgICA9IHM1MDJhX2lycV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgZHBtYmFzZV9vcHQgICAgID0gczUwMmFfZHBtYmFzZV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgcGNsa19vcHQgICAgICAgID0gczUwMmFfcGNsa19vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNETEFfUzUwMkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTAyRV9JT1JBTkdFOwotICAgICAgICAgICAgICAgICAgICAgICAgaXJxX29wdCAgICAgICAgID0gczUwMmVfaXJxX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcG1iYXNlX29wdCAgICAgPSBzNTA4X2RwbWJhc2Vfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjbGtfb3B0ICAgICAgICA9IHM1MDJlX3BjbGtfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTRExBX1M1MDM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTAzX0lPUkFOR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcnFfb3B0ICAgICAgICAgPSBzNTAzX2lycV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgZHBtYmFzZV9vcHQgICAgID0gczUwOF9kcG1iYXNlX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2xrX29wdCAgICAgICAgPSBzNTAzX3BjbGtfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTRExBX1M1MDc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTA3X0lPUkFOR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcnFfb3B0ICAgICAgICAgPSBzNTA4X2lycV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgZHBtYmFzZV9vcHQgICAgID0gczUwN19kcG1iYXNlX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2xrX29wdCAgICAgICAgPSBzNTA3X3BjbGtfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTRExBX1M1MDg6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTA4X0lPUkFOR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcnFfb3B0ICAgICAgICAgPSBzNTA4X2lycV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgZHBtYmFzZV9vcHQgICAgID0gczUwOF9kcG1iYXNlX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2xrX29wdCAgICAgICAgPSBzNTA4X3BjbGtfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIFZlcmlmeSBJUlEgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0gICAgICAgICAgICAgICAgaWYgKCFnZXRfb3B0aW9uX2luZGV4KGlycV9vcHQsIGh3LT5pcnEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogSVJRICVkIGlzIGludmFsaWQhXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgCW1vZG5hbWUsIGh3LT5pcnEpOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0gCi0KLSAgICAgICAgICAgICAgICAvKiBWZXJpZnkgQ1BVIGNsb2NrIHJhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0gICAgICAgICAgICAgICAgaWYgKGh3LT5wY2xrID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBody0+cGNsayA9IHBjbGtfb3B0WzFdOyAgLyogdXNlIGRlZmF1bHQgKi8KLSAgICAgICAgCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWdldF9vcHRpb25faW5kZXgocGNsa19vcHQsIGh3LT5wY2xrKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENQVSBjbG9jayAldSBpcyBpbnZhbGlkIVxuIiwKLQkJCQltb2RuYW1lLCBody0+cGNsayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBhc3N1bWluZyBDUFUgY2xvY2sgcmF0ZSBvZiAldSBrSHouXG4iLAotCQkJbW9kbmFtZSwgaHctPnBjbGspOwotCi0gICAgICAgICAgICAgICAgLyogU2V0dXAgYWRhcHRlciBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBhbmQgdGVzdCBtZW1vcnkgKi8KLSAgICAgICAgICAgICAgICBpZiAoaHctPmRwbWJhc2UgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gc2RsYV9hdXRvZHBtKGh3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogY2FuJ3QgZmluZCBhdmFpbGFibGUgbWVtb3J5IHJlZ2lvbiFcbiIsCi0JCQkJCW1vZG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICghZ2V0X29wdGlvbl9pbmRleChkcG1iYXNlX29wdCwKLQkJCXZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiBtZW1vcnkgYWRkcmVzcyAweCVsWCBpcyBpbnZhbGlkIVxuIiwKLQkJCQltb2RuYW1lLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzZGxhX3NldGRwbShodykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8KLQkJCSIlczogOEsgbWVtb3J5IHJlZ2lvbiBhdCAweCVsWCBpcyBub3QgYXZhaWxhYmxlIVxuIiwKLQkJCQltb2RuYW1lLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBpcyBzZXQgYXQgMHglbFguXG4iLAotCQkJCW1vZG5hbWUsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotCi0KLQkJLyogSWYgd2UgZmluZCBtZW1vcnkgaW4gMHhFKioqKiBNZW1vcnkgcmVnaW9uLCAKLSAgICAgICAgICAgICAgICAgKiB3YXJuIHRoZSB1c2VyIHRvIGRpc2FibGUgdGhlIFNIQURPVyBSQU0uICAKLSAgICAgICAgICAgICAgICAgKiBTaW5jZSBtZW1vcnkgY29ycnVwdGlvbiBjYW4gb2NjdXIgaWYgU0hBRE9XIGlzCi0gICAgICAgICAgICAgICAgICogZW5hYmxlZC4gVGhpcyBjYW4gY2F1c2VzIHJhbmRvbSBjcmFzaGVzICEgKi8KLQkJaWYgKHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkgPj0gMHhFMDAwMCl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJcbiVzOiAhISEhISEhISAgV0FSTklORyAhISEhISEhIVxuIixtb2RuYW1lKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBXQU5QSVBFIGlzIHVzaW5nIDB4JWxYIG1lbW9yeSByZWdpb24gISEhXG4iLAotCQkJCQkJbW9kbmFtZSwgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgICBQbGVhc2UgZGlzYWJsZSB0aGUgU0hBRE9XIFJBTSwgb3RoZXJ3aXNlXG4iKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgIHlvdXIgc3lzdGVtIG1pZ2h0IGNyYXNoIHJhbmRvbWx5IGZyb20gdGltZSB0byB0aW1lICFcbiIpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICEhISEhISEhICBXQVJOSU5HICEhISEhISEhXG5cbiIsbW9kbmFtZSk7Ci0JCX0KLSAgICAgICAgfQotCi0JZWxzZSB7Ci0JCWh3LT5tZW1vcnkgPSB0ZXN0X21lbXJlZ2lvbigodm9pZCopaHctPmRwbWJhc2UsIAotCQkJTUFYX1NJWkVPRl9TNTE0X01FTU9SWSk7Ci0JCWlmKGh3LT5tZW1vcnkgPCAoMjU2ICogMTAyNCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IGVycm9yIGluIHRlc3RpbmcgUzUxNCBtZW1vcnkgKDB4JWxYKVxuIiwKLQkJCQltb2RuYW1lLCBody0+bWVtb3J5KTsKLQkJCXNkbGFfZG93bihodyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLSAgICAKLQlwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgJWx1SyBieXRlcyBvZiBvbi1ib2FyZCBtZW1vcnlcbiIsCi0JCW1vZG5hbWUsIGh3LT5tZW1vcnkgLyAxMDI0KTsKLQotCS8qIExvYWQgZmlybXdhcmUuIElmIGxvYWRlciBmYWlscyB0aGVuIHNodXQgZG93biBhZGFwdGVyICovCi0JZXJyID0gc2RsYV9sb2FkKGh3LCBzZm0sIGxlbik7Ci0JaWYgKGVycikgc2RsYV9kb3duKGh3KTsJCS8qIHNodXRkb3duIGFkYXB0ZXIgKi8KLQotCXJldHVybiBlcnI7Ci19IAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNodXQgZG93biBTRExBOiBkaXNhYmxlIHNoYXJlZCBtZW1vcnkgYWNjZXNzIGFuZCBpbnRlcnJ1cHRzLCBzdG9wIENQVSwgZXRjLgotICovCi0KLUVYUE9SVF9TWU1CT0woc2RsYV9kb3duKTsKLQotaW50IHNkbGFfZG93biAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgaTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBDUFVfbm87Ci0gICAgICAgIHUzMiBpbnRfY29uZmlnLCBpbnRfc3RhdHVzOwotCi0gICAgICAgIGlmKCFwb3J0ICYmIChody0+dHlwZSAhPSBTRExBX1M1MTQpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyQToKLQkJX09VVEIocG9ydCwgMHgwOCk7CQkvKiBoYWx0IENQVSAqLwotCQlfT1VUQihwb3J0LCAweDA4KTsKLQkJX09VVEIocG9ydCwgMHgwOCk7Ci0JCWh3LT5yZWdzWzBdID0gMHgwODsKLQkJX09VVEIocG9ydCArIDEsIDB4RkYpOwkJLyogY2xvc2UgbWVtb3J5IHdpbmRvdyAqLwotCQlody0+cmVnc1sxXSA9IDB4RkY7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCQlfT1VUQihwb3J0ICsgMywgMCk7CQkvKiBzdG9wIENQVSAqLwotCQlfT1VUQihwb3J0LCAwKTsJCQkvKiByZXNldCBib2FyZCAqLwotCQlmb3IgKGkgPSAwOyBpIDwgUzUwMkVfSU9SQU5HRTsgKytpKQotCQkJaHctPnJlZ3NbaV0gPSAwCi0JCTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQljYXNlIFNETEFfUzUwNzoKLQljYXNlIFNETEFfUzUwODoKLQkJX09VVEIocG9ydCwgMCk7CQkJLyogcmVzZXQgYm9hcmQgbG9naWMgKi8KLQkJaHctPnJlZ3NbMF0gPSAwOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTE0OgotCQkvKiBoYWx0IHRoZSBhZGFwdGVyICovCi0gICAgICAgICAgICAgICAgKihjaGFyICopaHctPnZlY3RvciA9IFM1MTRfQ1BVX0hBTFQ7Ci0gICAgICAgIAlDUFVfbm8gPSBody0+UzUxNF9jcHVfbm9bMF07Ci0KLQkJLyogZGlzYWJsZSB0aGUgUENJIElSUSBhbmQgZGlzYWJsZSBtZW1vcnkgYWNjZXNzICovCi0gICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wY2lfZGV2LCBQQ0lfSU5UX0NPTkZJRywgJmludF9jb25maWcpOwotCSAgICAgICAgaW50X2NvbmZpZyAmPSAoQ1BVX25vID09IFM1MTRfQ1BVX0EpID8gflBDSV9ESVNBQkxFX0lSUV9DUFVfQSA6CX5QQ0lfRElTQUJMRV9JUlFfQ1BVX0I7Ci0gICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChody0+cGNpX2RldiwgUENJX0lOVF9DT05GSUcsIGludF9jb25maWcpOwotCQlyZWFkX1M1MTRfaW50X3N0YXQoaHcsICZpbnRfc3RhdHVzKTsKLQkJUzUxNF9pbnRhY2soaHcsIGludF9zdGF0dXMpOwotCQlpZihDUFVfbm8gPT0gUzUxNF9DUFVfQSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoaHctPnBjaV9kZXYsIFBDSV9NQVAwX0RXT1JELAotCQkJCVBDSV9DUFVfQV9NRU1fRElTQUJMRSk7Ci0JCWVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoaHctPnBjaV9kZXYsIFBDSV9NQVAxX0RXT1JELAotCQkJCVBDSV9DUFVfQl9NRU1fRElTQUJMRSk7Ci0KLQkJLyogZnJlZSB1cCB0aGUgYWxsb2NhdGVkIHZpcnR1YWwgbWVtb3J5ICovCi0gCQlpb3VubWFwKCh2b2lkICopaHctPmRwbWJhc2UpOwotICAgICAgICAJaW91bm1hcCgodm9pZCAqKWh3LT52ZWN0b3IpOwotIAkJYnJlYWs7Ci0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNYXAgc2hhcmVkIG1lbW9yeSB3aW5kb3cgaW50byBTRExBIGFkZHJlc3Mgc3BhY2UuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChzZGxhX21hcG1lbSk7Ci0KLWludCBzZGxhX21hcG1lbSAoc2RsYWh3X3QqIGh3LCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCXJlZ2lzdGVyIGludCB0bXA7Ci0KLQlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JY2FzZSBTRExBX1M1MDJBOgotCWNhc2UgU0RMQV9TNTAyRToKLQkJaWYgKGFkZHIgPCBTNTAyX01BWE1FTSkJeyAvKiB2ZXJpZnkgcGFyYW1ldGVyICovCi0JCQl0bXAgPSBhZGRyID4+IDEzOwkvKiBjb252ZXJ0IHRvIHJlZ2lzdGVyIG1hc2sgKi8KLQkJCV9PVVRCKHBvcnQgKyAyLCB0bXApOwotCQkJaHctPnJlZ3NbMl0gPSB0bXA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQkJaWYgKGFkZHIgPCBTNTAzX01BWE1FTSkJeyAvKiB2ZXJpZnkgcGFyYW1ldGVyICovCi0JCQl0bXAgPSAoaHctPnJlZ3NbMF0gJiAweDhGKSB8ICgoYWRkciA+PiA5KSAmIDB4NzApOwotCQkJX09VVEIocG9ydCwgdG1wKTsKLQkJCWh3LT5yZWdzWzBdID0gdG1wOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDc6Ci0JCWlmIChhZGRyIDwgUzUwN19NQVhNRU0pIHsKLQkJCWlmICghKF9JTkIocG9ydCkgJiAweDAyKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCXRtcCA9IGFkZHIgPj4gMTM7CS8qIGNvbnZlcnQgdG8gcmVnaXN0ZXIgbWFzayAqLwotCQkJX09VVEIocG9ydCArIDIsIHRtcCk7Ci0JCQlody0+cmVnc1syXSA9IHRtcDsKLQkJfQotCQllbHNlIHJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA4OgotCQlpZiAoYWRkciA8IFM1MDhfTUFYTUVNKSB7Ci0JCQl0bXAgPSBhZGRyID4+IDEzOwkvKiBjb252ZXJ0IHRvIHJlZ2lzdGVyIG1hc2sgKi8KLQkJCV9PVVRCKHBvcnQgKyAyLCB0bXApOwotCQkJaHctPnJlZ3NbMl0gPSB0bXA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUxNDoKLQkJcmV0dXJuIDA7Ci0KLSAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWh3LT52ZWN0b3IgPSBhZGRyICYgMHhGRkZGRTAwMEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uLgotICovCi0KLXN0YXRpYyBpbnQgc2RsYV9pbnRlbiAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyRToKLQkJLyogTm90ZSB0aGFyIGludGVycnVwdCBjb250cm9sIG9wZXJhdGlvbnMgb24gUzUwMkUgYXJlIGFsbG93ZWQKLQkJICogb25seSBpZiBDUFUgaXMgZW5hYmxlZCAoYml0IDAgb2Ygc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCkuCi0JCSAqLwotCQlpZiAoX0lOQihwb3J0KSAmIDB4MDEpIHsKLQkJCV9PVVRCKHBvcnQsIDB4MDIpOwkvKiBiaXQxID0gMSwgYml0MiA9IDAgKi8KLQkJCV9PVVRCKHBvcnQsIDB4MDYpOwkvKiBiaXQxID0gMSwgYml0MiA9IDEgKi8KLQkJCWh3LT5yZWdzWzBdID0gMHgwNjsKLQkJfQotCQllbHNlIHJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAzOgotCQl0bXAgPSBody0+cmVnc1swXSB8IDB4MDQ7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCQlpZiAoIShfSU5CKHBvcnQpICYgMHgwMikpCQkvKiB2ZXJpZnkgKi8KLQkJCXJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA4OgotCQl0bXAgPSBody0+cmVnc1swXSB8IDB4MTA7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCQlpZiAoIShfSU5CKHBvcnQgKyAxKSAmIDB4MTApKQkJLyogdmVyaWZ5ICovCi0JCQlyZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkE6Ci0JY2FzZSBTRExBX1M1MDc6Ci0JCWJyZWFrOwotCi0gICAgICAgIGNhc2UgU0RMQV9TNTE0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGlzYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbi4KLSAqLwotCi0jaWYgMAotaW50IHNkbGFfaW50ZGUgKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JaW50IHRtcCwgaTsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkU6Ci0JCS8qIE5vdGVzOgotCQkgKiAgMSkgaW50ZXJydXB0IGNvbnRyb2wgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBvbmx5IGlmIENQVSBpcwotCQkgKiAgICAgZW5hYmxlZCAoYml0IDAgb2Ygc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCkuCi0JCSAqICAyKSBkaXNhYmxpbmcgaW50ZXJydXB0cyB1c2luZyBiaXQgMSBvZiBjb250cm9sIHJlZ2lzdGVyCi0JCSAqICAgICBjYXVzZXMgSVJRIGxpbmUgZ28gaGlnaCwgdGhlcmVmb3JlIHdlIGFyZSBnb2luZyB0byB1c2UKLQkJICogICAgIDB4MDQgaW5zdGVhZDogbG93ZXIgaXQgdG8gaW5oaWJpdCBpbnRlcnJ1cHRzIHRvIFBDLgotCQkgKi8KLQkJaWYgKF9JTkIocG9ydCkgJiAweDAxKSB7Ci0JCQlfT1VUQihwb3J0LCBody0+cmVnc1swXSAmIH4weDA0KTsKLQkJCWh3LT5yZWdzWzBdICY9IH4weDA0OwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDM6Ci0JCXRtcCA9IGh3LT5yZWdzWzBdICYgfjB4MDQ7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQkJaWYgKF9JTkIocG9ydCkgJiAweDAyKQkJCS8qIHZlcmlmeSAqLwotCQkJcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDg6Ci0JCXRtcCA9IGh3LT5yZWdzWzBdICYgfjB4MTA7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQkJaWYgKF9JTkIocG9ydCkgJiAweDEwKQkJCS8qIHZlcmlmeSAqLwotCQkJcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJBOgotCWNhc2UgU0RMQV9TNTA3OgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQWNrbm93bGVkZ2UgU0RMQSBoYXJkd2FyZSBpbnRlcnJ1cHQuCi0gKi8KLQotc3RhdGljIGludCBzZGxhX2ludGFjayAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyRToKLQkJLyogVG8gYWNrbm9sZWRnZSBoYXJkd2FyZSBpbnRlcnJ1cHQgd2UgaGF2ZSB0byB0b2dnbGUgYml0IDMgb2YKLQkJICogY29udHJvbCByZWdpc3RlcjogXF8vCi0JCSAqIE5vdGUgdGhhdCBpbnRlcnJ1cHQgY29udHJvbCBvcGVyYXRpb25zIG9uIFM1MDJFIGFyZSBhbGxvd2VkCi0JCSAqIG9ubHkgaWYgQ1BVIGlzIGVuYWJsZWQgKGJpdCAxIG9mIHN0YXR1cyByZWdpc3RlciBpcyBzZXQpLgotCQkgKi8KLQkJaWYgKF9JTkIocG9ydCkgJiAweDAxKSB7Ci0JCQl0bXAgPSBody0+cmVnc1swXSAmIH4weDA0OwotCQkJX09VVEIocG9ydCwgdG1wKTsKLQkJCXRtcCB8PSAweDA0OwotCQkJX09VVEIocG9ydCwgdG1wKTsKLQkJCWh3LT5yZWdzWzBdID0gdG1wOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDM6Ci0JCWlmIChfSU5CKHBvcnQpICYgMHgwNCkgewotCQkJdG1wID0gaHctPnJlZ3NbMF0gJiB+MHgwODsKLQkJCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCQl0bXAgfD0gMHgwODsKLQkJCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCQlody0+cmVnc1swXSA9IHRtcDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAyQToKLQljYXNlIFNETEFfUzUwNzoKLQljYXNlIFNETEFfUzUwODoKLQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEFja25vd2xlZGdlIFM1MTQgaGFyZHdhcmUgaW50ZXJydXB0LgotICovCi0KLUVYUE9SVF9TWU1CT0woUzUxNF9pbnRhY2spOwotCi12b2lkIFM1MTRfaW50YWNrIChzZGxhaHdfdCogaHcsIHUzMiBpbnRfc3RhdHVzKQotewotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3LT5wY2lfZGV2LCBQQ0lfSU5UX1NUQVRVUywgaW50X3N0YXR1cyk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIHRoZSBTNTE0IGhhcmR3YXJlIGludGVycnVwdCBzdGF0dXMuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChyZWFkX1M1MTRfaW50X3N0YXQpOwotCi12b2lkIHJlYWRfUzUxNF9pbnRfc3RhdCAoc2RsYWh3X3QqIGh3LCB1MzIqIGludF9zdGF0dXMpCi17Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wY2lfZGV2LCBQQ0lfSU5UX1NUQVRVUywgaW50X3N0YXR1cyk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gYWRhcHRlcidzIENQVS4KLSAqLwotCi0jaWYgMAotaW50IHNkbGFfaW50ciAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6Ci0JCWlmICghKF9JTkIocG9ydCkgJiAweDQwKSkgewotCQkJX09VVEIocG9ydCwgMHgxMCk7CQkvKiBpc3N1ZSBOTUkgdG8gQ1BVICovCi0JCQlody0+cmVnc1swXSA9IDB4MTA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwNzoKLQkJaWYgKChfSU5CKHBvcnQpICYgMHgwNikgPT0gMHgwNikgewotCQkJX09VVEIocG9ydCArIDMsIDApOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDg6Ci0JCWlmIChfSU5CKHBvcnQgKyAxKSAmIDB4MDIpIHsKLQkJCV9PVVRCKHBvcnQsIDB4MDgpOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCWNhc2UgU0RMQV9TNTAzOgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRXhlY3V0ZSBBZGFwdGVyIENvbW1hbmQuCi0gKiBvIFNldCBleGVjIGZsYWcuCi0gKiBvIEJ1c3ktd2FpdCB1bnRpbCBmbGFnIGlzIHJlc2V0LgotICogbyBSZXR1cm4gbnVtYmVyIG9mIGxvb3BzIG1hZGUsIG9yIDAgaWYgY29tbWFuZCB0aW1lZCBvdXQuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChzZGxhX2V4ZWMpOwotCi1pbnQgc2RsYV9leGVjICh2b2lkKiBvcGZsYWcpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciogZmxhZyA9IG9wZmxhZzsKLQl1bnNpZ25lZCBsb25nIHRzdG9wOwotCWludCBubG9vcHM7Ci0KLQlpZihyZWFkYihmbGFnKSAhPSAweDAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJXQU5QSVBFOiBvcHAgZmxhZyBzZXQgb24gZW50cnkgdG8gc2RsYV9leGVjXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCQotCXdyaXRlYigweDAxLCBmbGFnKTsKLQotCXRzdG9wID0gU1lTVEVNX1RJQ0sgKyBFWEVDX1RJTUVPVVQ7Ci0KLQlmb3IgKG5sb29wcyA9IDE7IChyZWFkYihmbGFnKSA9PSAweDAxKTsgKysgbmxvb3BzKSB7Ci0JCXVuc2lnbmVkIGRlbGF5ID0gZXhlY19pZGxlOwotCQl3aGlsZSAoLS0gZGVsYXkpOwkJCS8qIGRlbGF5ICovCi0JCWlmIChTWVNURU1fVElDSyA+IHRzdG9wKSByZXR1cm4gMDsJLyogdGltZSBpcyB1cCEgKi8KLQl9Ci0JcmV0dXJuIG5sb29wczsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIGFic29sdXRlIGFkYXB0ZXIgbWVtb3J5LgotICogVHJhbnNmZXIgZGF0YSBmcm9tIGFkYXB0ZXIncyBtZW1vcnkgdG8gZGF0YSBidWZmZXIuCi0gKgotICogTm90ZToKLSAqIENhcmUgc2hvdWxkIGJlIHRha2VuIHdoZW4gY3Jvc3NpbmcgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgYm91bmRhcnkuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhdG9taWMsIHNvIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0IGlmCi0gKiBpbnRlcnJ1cHQgcm91dGluZXMgYXJlIGFjY2Vzc2luZyBhZGFwdGVyIHNoYXJlZCBtZW1vcnkuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChzZGxhX3BlZWspOwotCi1pbnQgc2RsYV9wZWVrIChzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCogYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0KLQlpZiAoYWRkciArIGxlbiA+IGh3LT5tZW1vcnkpCS8qIHZlcmlmeSBhcmd1bWVudHMgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICAgICAgaWYoaHctPnR5cGUgPT0gU0RMQV9TNTE0KSB7CS8qIGNvcHkgZGF0YSBmb3IgdGhlIFM1MTQgYWRhcHRlciAqLwotICAgICAgICAgICAgICAgIHBlZWtfYnlfNCAoKHVuc2lnbmVkIGxvbmcpaHctPmRwbWJhc2UgKyBhZGRyLCBidWYsIGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0JfQotCi0gICAgICAgIGVsc2UgewkJCQkvKiBjb3B5IGRhdGEgZm9yIHRoZSBTNTA4IGFkYXB0ZXIgKi8KLQkgICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkdmVjID0gaHctPnZlY3RvcjsKLSAgICAgICAgCXVuc2lnbmVkIHdpbnNpemUgPSBody0+ZHBtc2l6ZTsKLQkgICAgICAgIHVuc2lnbmVkIGN1cnBvcywgY3VybGVuOyAgIC8qIGN1cnJlbnQgb2Zmc2V0IGFuZCBibG9jayBzaXplICovCi0gICAgICAgIAl1bnNpZ25lZCBsb25nIGN1cnZlYzsgICAgICAvKiBjdXJyZW50IERQTSB3aW5kb3cgdmVjdG9yICovCi0JICAgICAgICBpbnQgZXJyID0gMDsKLQotICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgIWVycikgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VycG9zID0gYWRkciAlIHdpbnNpemU7ICAvKiBjdXJyZW50IHdpbmRvdyBvZmZzZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlYyA9IGFkZHIgLSBjdXJwb3M7ICAgLyogY3VycmVudCB3aW5kb3cgdmVjdG9yICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsZW4gPSAobGVuID4gKHdpbnNpemUgLSBjdXJwb3MpKSA/Ci0JCQkJKHdpbnNpemUgLSBjdXJwb3MpIDogbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2NhdGUgd2luZG93IGFuZCBjb3B5IGJsb2NrIG9mIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHNkbGFfbWFwbWVtKGh3LCBjdXJ2ZWMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGVla19ieV80ICgodW5zaWduZWQgbG9uZylody0+ZHBtYmFzZSArIGN1cnBvcywgYnVmLAotCQkJCWN1cmxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyICAgICAgICs9IGN1cmxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiAgICAgICAgID0gKGNoYXIqKWJ1ZiArIGN1cmxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAgICAgICAgLT0gY3VybGVuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgRFBNIHdpbmRvdyBwb3NpdGlvbiAqLwotICAgICAgICAgICAgICAgIHNkbGFfbWFwbWVtKGh3LCBvbGR2ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgZGF0YSBmcm9tIGFkYXB0ZXIncyBtZW1vcnkgdG8gYSBkYXRhIGJ1ZmZlciBpbiA0LWJ5dGUgY2h1bmtzLgotICogTm90ZSB0aGF0IHdlIGVuc3VyZSB0aGF0IHRoZSBTRExBIG1lbW9yeSBhZGRyZXNzIGlzIG9uIGEgNC1ieXRlIGJvdW5kYXJ5Ci0gKiBiZWZvcmUgd2UgYmVnaW4gbW92aW5nIHRoZSBkYXRhIGluIDQtYnl0ZSBjaHVua3MuCi0qLwotCi1zdGF0aWMgdm9pZCBwZWVrX2J5XzQgKHVuc2lnbmVkIGxvbmcgc3JjLCB2b2lkKiBidWYsIHVuc2lnbmVkIGxlbikKLXsKLQotICAgICAgICAvKiBieXRlIGNvcHkgZGF0YSB1bnRpbCB3ZSBnZXQgdG8gYSA0LWJ5dGUgYm91bmRhcnkgKi8KLSAgICAgICAgd2hpbGUgKGxlbiAmJiAoc3JjICYgMHgwMykpIHsKLSAgICAgICAgICAgICAgICAqKGNoYXIgKilidWYgKysgPSByZWFkYihzcmMgKyspOwotICAgICAgICAgICAgICAgIGxlbiAtLTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGNvcHkgZGF0YSBpbiA0LWJ5dGUgY2h1bmtzICovCi0gICAgICAgIHdoaWxlIChsZW4gPj0gNCkgewotICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKWJ1ZiA9IHJlYWRsKHNyYyk7Ci0gICAgICAgICAgICAgICAgYnVmICs9IDQ7Ci0gICAgICAgICAgICAgICAgc3JjICs9IDQ7Ci0gICAgICAgICAgICAgICAgbGVuIC09IDQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBieXRlIGNvcHkgYW55IHJlbWFpbmluZyBkYXRhICovCi0gICAgICAgIHdoaWxlIChsZW4pIHsKLSAgICAgICAgICAgICAgICAqKGNoYXIgKilidWYgKysgPSByZWFkYihzcmMgKyspOwotICAgICAgICAgICAgICAgIGxlbiAtLTsKLSAgICAgICAgfQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogV3JpdGUgQWJzb2x1dGUgQWRhcHRlciBNZW1vcnkuCi0gKiBUcmFuc2ZlciBkYXRhIGZyb20gZGF0YSBidWZmZXIgdG8gYWRhcHRlcidzIG1lbW9yeS4KLSAqCi0gKiBOb3RlOgotICogQ2FyZSBzaG91bGQgYmUgdGFrZW4gd2hlbiBjcm9zc2luZyBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBib3VuZGFyeS4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGF0b21pYywgc28gY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHQgaWYKLSAqIGludGVycnVwdCByb3V0aW5lcyBhcmUgYWNjZXNzaW5nIGFkYXB0ZXIgc2hhcmVkIG1lbW9yeS4KLSAqLwotCi1FWFBPUlRfU1lNQk9MKHNkbGFfcG9rZSk7Ci0gCi1pbnQgc2RsYV9wb2tlIChzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCogYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0KLQlpZiAoYWRkciArIGxlbiA+IGh3LT5tZW1vcnkpCS8qIHZlcmlmeSBhcmd1bWVudHMgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAKLSAgICAgICAgaWYoaHctPnR5cGUgPT0gU0RMQV9TNTE0KSB7CS8qIGNvcHkgZGF0YSBmb3IgdGhlIFM1MTQgYWRhcHRlciAqLwotICAgICAgICAgICAgICAgIHBva2VfYnlfNCAoKHVuc2lnbmVkIGxvbmcpaHctPmRwbWJhc2UgKyBhZGRyLCBidWYsIGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0JfQotCQotCWVsc2UgewkJCQkvKiBjb3B5IGRhdGEgZm9yIHRoZSBTNTA4IGFkYXB0ZXIgKi8KLSAgICAJCXVuc2lnbmVkIGxvbmcgb2xkdmVjID0gaHctPnZlY3RvcjsKLQkgICAgICAgIHVuc2lnbmVkIHdpbnNpemUgPSBody0+ZHBtc2l6ZTsKLSAgICAgICAgCXVuc2lnbmVkIGN1cnBvcywgY3VybGVuOyAgICAgLyogY3VycmVudCBvZmZzZXQgYW5kIGJsb2NrIHNpemUgKi8KLSAgICAgICAgCXVuc2lnbmVkIGxvbmcgY3VydmVjOyAgICAgICAgLyogY3VycmVudCBEUE0gd2luZG93IHZlY3RvciAqLwotICAgICAgICAJaW50IGVyciA9IDA7Ci0KLQkJd2hpbGUgKGxlbiAmJiAhZXJyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJwb3MgPSBhZGRyICUgd2luc2l6ZTsgICAgLyogY3VycmVudCB3aW5kb3cgb2Zmc2V0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZWMgPSBhZGRyIC0gY3VycG9zOyAgICAgLyogY3VycmVudCB3aW5kb3cgdmVjdG9yICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsZW4gPSAobGVuID4gKHdpbnNpemUgLSBjdXJwb3MpKSA/Ci0JCQkJKHdpbnNpemUgLSBjdXJwb3MpIDogbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2NhdGUgd2luZG93IGFuZCBjb3B5IGJsb2NrIG9mIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNkbGFfbWFwbWVtKGh3LCBjdXJ2ZWMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcG9rZV9ieV80ICgodW5zaWduZWQgbG9uZylody0+ZHBtYmFzZSArIGN1cnBvcywgYnVmLAotCQkJCWN1cmxlbik7Ci0JICAgICAgICAgICAgICAgIGFkZHIgICAgICAgKz0gY3VybGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgYnVmICAgICAgICAgPSAoY2hhciopYnVmICsgY3VybGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVuICAgICAgICAtPSBjdXJsZW47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogUmVzdG9yZSBEUE0gd2luZG93IHBvc2l0aW9uICovCi0gICAgICAgICAgICAgICAgc2RsYV9tYXBtZW0oaHcsIG9sZHZlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogV3JpdGUgZnJvbSBhIGRhdGEgYnVmZmVyIHRvIGFkYXB0ZXIncyBtZW1vcnkgaW4gNC1ieXRlIGNodW5rcy4KLSAqIE5vdGUgdGhhdCB3ZSBlbnN1cmUgdGhhdCB0aGUgU0RMQSBtZW1vcnkgYWRkcmVzcyBpcyBvbiBhIDQtYnl0ZSBib3VuZGFyeQotICogYmVmb3JlIHdlIGJlZ2luIG1vdmluZyB0aGUgZGF0YSBpbiA0LWJ5dGUgY2h1bmtzLgotKi8KLQotc3RhdGljIHZvaWQgcG9rZV9ieV80ICh1bnNpZ25lZCBsb25nIGRlc3QsIHZvaWQqIGJ1ZiwgdW5zaWduZWQgbGVuKQotewotCi0gICAgICAgIC8qIGJ5dGUgY29weSBkYXRhIHVudGlsIHdlIGdldCB0byBhIDQtYnl0ZSBib3VuZGFyeSAqLwotICAgICAgICB3aGlsZSAobGVuICYmIChkZXN0ICYgMHgwMykpIHsKLSAgICAgICAgICAgICAgICB3cml0ZWIgKCooY2hhciAqKWJ1ZiArKywgZGVzdCArKyk7Ci0gICAgICAgICAgICAgICAgbGVuIC0tOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogY29weSBkYXRhIGluIDQtYnl0ZSBjaHVua3MgKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgd3JpdGVsICgqKHVuc2lnbmVkIGxvbmcgKilidWYsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QgKz0gNDsKLSAgICAgICAgICAgICAgICBidWYgKz0gNDsKLSAgICAgICAgICAgICAgICBsZW4gLT0gNDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGJ5dGUgY29weSBhbnkgcmVtYWluaW5nIGRhdGEgKi8KLSAgICAgICAgd2hpbGUgKGxlbikgewotICAgICAgICAgICAgICAgIHdyaXRlYiAoKihjaGFyICopYnVmICsrICwgZGVzdCArKyk7Ci0gICAgICAgICAgICAgICAgbGVuIC0tOwotICAgICAgICB9Ci19Ci0KLQotI2lmZGVmCURPTlRfQ09NUElQTEVfVEhJUwotI2VuZGlmCS8qIERPTlRfQ09NUElQTEVfVEhJUyAqLwotCi0vKioqKioqIEhhcmR3YXJlLVNwZWNpZmljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgYWRhcHRlciB0eXBlLgotICogbyBpZiBhZGFwdGVyIHR5cGUgaXMgc3BlY2lmaWVkIHRoZW4gY2FsbCBkZXRlY3Rpb24gcm91dGluZSBmb3IgdGhhdCBhZGFwdGVyCi0gKiAgIHR5cGUuICBPdGhlcndpc2UgY2FsbCBkZXRlY3Rpb24gcm91dGluZXMgZm9yIGV2ZXJ5IGFkYXB0ZXIgdHlwZXMgdW50aWwKLSAqICAgYWRhcHRlciBpcyBkZXRlY3RlZC4KLSAqCi0gKiBOb3RlczoKLSAqIDEpIERldGVjdGlvbiB0ZXN0cyBhcmUgZGVzdHJ1Y3RpdmUhIEFkYXB0ZXIgd2lsbCBiZSBsZWZ0IGluIHNodXRkb3duIHN0YXRlCi0gKiAgICBhZnRlciB0aGUgdGVzdC4KLSAqLwotc3RhdGljIGludCBzZGxhX2RldGVjdCAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghcG9ydCAmJiAoaHctPnR5cGUgIT0gU0RMQV9TNTE0KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICAJc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyQToKLQkJaWYgKCFkZXRlY3RfczUwMmEocG9ydCkpIGVyciA9IC1FTk9ERVY7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCQlpZiAoIWRldGVjdF9zNTAyZShwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQkJaWYgKCFkZXRlY3RfczUwMyhwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwNzoKLQkJaWYgKCFkZXRlY3RfczUwNyhwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwODoKLQkJaWYgKCFkZXRlY3RfczUwOChwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUxNDoKLSAgICAgICAgICAgICAgICBpZiAoIWRldGVjdF9zNTE0KGh3KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlpZiAoZGV0ZWN0X3M1MDJhKHBvcnQpKQotCQkJaHctPnR5cGUgPSBTRExBX1M1MDJBOwotCQllbHNlIGlmIChkZXRlY3RfczUwMmUocG9ydCkpCi0JCQlody0+dHlwZSA9IFNETEFfUzUwMkU7Ci0JCWVsc2UgaWYgKGRldGVjdF9zNTAzKHBvcnQpKQotCQkJaHctPnR5cGUgPSBTRExBX1M1MDM7Ci0JCWVsc2UgaWYgKGRldGVjdF9zNTA3KHBvcnQpKQotCQkJaHctPnR5cGUgPSBTRExBX1M1MDc7Ci0JCWVsc2UgaWYgKGRldGVjdF9zNTA4KHBvcnQpKQotCQkJaHctPnR5cGUgPSBTRExBX1M1MDg7Ci0JCWVsc2UgZXJyID0gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBBdXRvc2VsZWN0IG1lbW9yeSByZWdpb24uIAotICogbyB0cnkgYWxsIGF2YWlsYWJsZSBETVAgYWRkcmVzcyBvcHRpb25zIGZyb20gdGhlIHRvcCBkb3duIHVudGlsIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9hdXRvZHBtIChzZGxhaHdfdCogaHcpCi17Ci0JaW50IGksIGVyciA9IC1FSU5WQUw7Ci0JdW5zaWduZWQqIG9wdDsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6Ci0JCW9wdCA9IHM1MDJhX2RwbWJhc2Vfb3B0aW9uczsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkU6Ci0JY2FzZSBTRExBX1M1MDM6Ci0JY2FzZSBTRExBX1M1MDg6Ci0JCW9wdCA9IHM1MDhfZHBtYmFzZV9vcHRpb25zOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA3OgotCQlvcHQgPSBzNTA3X2RwbWJhc2Vfb3B0aW9uczsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBTdGFydCB0ZXN0aW5nIGZyb20gOHRoIHBvc2l0aW9uLCBhZGRyZXNzCi0gICAgICAgICAqIDB4QzgwMDAgZnJvbSB0aGUgNTA4IGFkZHJlc3MgdGFibGUuIAotICAgICAgICAgKiBXZSBkb24ndCB3YW50IHRvIHRlc3QgQSoqKiogYWRkcmVzc2VzLCBzaW5jZQotICAgICAgICAgKiB0aGV5IGFyZSB1c3VhbGx5IHVzZWQgZm9yIFZpZGVvICovCi0JZm9yIChpID0gODsgaSA8PSBvcHRbMF0gJiYgZXJyOyBpKyspIHsKLQkJaHctPmRwbWJhc2UgPSBwaHlzX3RvX3ZpcnQob3B0W2ldKTsKLQkJZXJyID0gc2RsYV9zZXRkcG0oaHcpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCB1cCBhZGFwdGVyIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93LiAKLSAqIG8gc2h1dCBkb3duIGFkYXB0ZXIKLSAqIG8gbWFrZSBzdXJlIHRoYXQgbm8gcGh5c2ljYWwgbWVtb3J5IGV4aXN0cyBpbiB0aGlzIHJlZ2lvbiwgaS5lIGVudGlyZQotICogICByZWdpb24gcmVhZHMgMHhGRiBhbmQgaXMgbm90IHdyaXRhYmxlIHdoZW4gYWRhcHRlciBpcyBzaHV0IGRvd24uCi0gKiBvIGluaXRpYWxpemUgYWRhcHRlciBoYXJkd2FyZQotICogbyBtYWtlIHN1cmUgdGhhdCByZWdpb24gaXMgdXNhYmxlIHdpdGggU0RMQSBjYXJkLCBpLmUuIHdlIGNhbiB3cml0ZSB0byBpdAotICogICB3aGVuIGFkYXB0ZXIgaXMgY29uZmlndXJlZC4KLSAqLwotc3RhdGljIGludCBzZGxhX3NldGRwbSAoc2RsYWh3X3QqIGh3KQotewotCWludCBlcnI7Ci0KLQkvKiBTaHV0IGRvd24gY2FyZCBhbmQgdmVyaWZ5IG1lbW9yeSByZWdpb24gKi8KLQlzZGxhX2Rvd24oaHcpOwotCWlmIChjaGVja19tZW1yZWdpb24oaHctPmRwbWJhc2UsIGh3LT5kcG1zaXplKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBJbml0aWFsaXplIGFkYXB0ZXIgYW5kIHRlc3Qgb24tYm9hcmQgbWVtb3J5IHNlZ21lbnQgYnkgc2VnbWVudC4KLQkgKiBJZiBtZW1vcnkgc2l6ZSBhcHBlYXJzIHRvIGJlIGxlc3MgdGhhbiBzaGFyZWQgbWVtb3J5IHdpbmRvdyBzaXplLAotCSAqIGFzc3VtZSB0aGF0IG1lbW9yeSByZWdpb24gaXMgdW51c2FibGUuCi0JICovCi0JZXJyID0gc2RsYV9pbml0KGh3KTsKLQlpZiAoZXJyKSByZXR1cm4gZXJyOwotCi0JaWYgKHNkbGFfbWVtdGVzdChodykgPCBody0+ZHBtc2l6ZSkgewkvKiBsZXNzIHRoYW4gd2luZG93IHNpemUgKi8KLQkJc2RsYV9kb3duKGh3KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXNkbGFfbWFwbWVtKGh3LCAwTCk7CS8qIHNldCB3aW5kb3cgdmVjdG9yIGF0IGJvdHRvbSAqLwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIExvYWQgYWRhcHRlciBmcm9tIHRoZSBtZW1vcnkgaW1hZ2Ugb2YgdGhlIFNETEEgZmlybXdhcmUgbW9kdWxlLiAKLSAqIG8gdmVyaWZ5IGZpcm13YXJlIGludGVncml0eSBhbmQgY29tcGF0aWJpbGl0eQotICogbyBzdGFydCBhZGFwdGVyIHVwCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9sb2FkIChzZGxhaHdfdCogaHcsIHNmbV90KiBzZm0sIHVuc2lnbmVkIGxlbikKLXsKLQotCWludCBpOwotCi0JLyogVmVyaWZ5IGZpcm13YXJlIHNpZ25hdHVyZSAqLwotCWlmIChzdHJjbXAoc2ZtLT5zaWduYXR1cmUsIFNGTV9TSUdOQVRVUkUpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBub3QgU0RMQSBmaXJtd2FyZSFcbiIsCi0JCQltb2RuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVmVyaWZ5IGZpcm13YXJlIG1vZHVsZSBmb3JtYXQgdmVyc2lvbiAqLwotCWlmIChzZm0tPnZlcnNpb24gIT0gU0ZNX1ZFUlNJT04pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBmaXJtd2FyZSBmb3JtYXQgJXUgcmVqZWN0ZWQhIEV4cGVjdGluZyAldS5cbiIsCi0JCQltb2RuYW1lLCBzZm0tPnZlcnNpb24sIFNGTV9WRVJTSU9OKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVmVyaWZ5IGZpcm13YXJlIG1vZHVsZSBsZW5ndGggYW5kIGNoZWNrc3VtICovCi0JaWYgKChsZW4gLSBvZmZzZXRvZihzZm1fdCwgaW1hZ2UpICE9IHNmbS0+aW5mby5jb2Rlc2l6ZSkgfHwKLQkJKGNoZWNrc3VtKCh2b2lkKikmc2ZtLT5pbmZvLAotCQlzaXplb2Yoc2ZtX2luZm9fdCkgKyBzZm0tPmluZm8uY29kZXNpemUpICE9IHNmbS0+Y2hlY2tzdW0pKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmaXJtd2FyZSBjb3JydXB0ZWQhXG4iLCBtb2RuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQW5ub3VuY2UgKi8KLQlwcmludGsoS0VSTl9JTkZPICIlczogbG9hZGluZyAlcyAoSUQ9JXUpLi4uXG4iLCBtb2RuYW1lLAotCQkoc2ZtLT5kZXNjclswXSAhPSAnXDAnKSA/IHNmbS0+ZGVzY3IgOiAidW5rbm93biBmaXJtd2FyZSIsCi0JCXNmbS0+aW5mby5jb2RlaWQpOwotCi0JaWYoaHctPnR5cGUgPT0gU0RMQV9TNTE0KQotCQlwcmludGsoS0VSTl9JTkZPICIlczogbG9hZGluZyBTNTE0IGFkYXB0ZXIsIENQVSAlY1xuIiwKLQkJCW1vZG5hbWUsIGh3LT5TNTE0X2NwdV9ub1swXSk7Ci0KLQkvKiBTY2FuIHRocm91Z2ggdGhlIGxpc3Qgb2YgY29tcGF0aWJsZSBhZGFwdGVycyBhbmQgbWFrZSBzdXJlIG91cgotCSAqIGFkYXB0ZXIgdHlwZSBpcyBsaXN0ZWQuCi0JICovCi0JZm9yIChpID0gMDsKLQkgICAgIChpIDwgU0ZNX01BWF9TRExBKSAmJiAoc2ZtLT5pbmZvLmFkYXB0ZXJbaV0gIT0gaHctPnR5cGUpOwotCSAgICAgKytpKTsKLQkKLQlpZiAoaSA9PSBTRk1fTUFYX1NETEEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZpcm13YXJlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggUyV1IVxuIiwKLQkJCW1vZG5hbWUsIGh3LT50eXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIG9uLWJvYXJkIG1lbW9yeSAqLwotCWlmIChody0+bWVtb3J5IDwgc2ZtLT5pbmZvLm1lbXNpemUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBmaXJtd2FyZSBuZWVkcyAlbHUgYnl0ZXMgb2Ygb24tYm9hcmQgbWVtb3J5IVxuIiwKLQkJCW1vZG5hbWUsIHNmbS0+aW5mby5tZW1zaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogTW92ZSBjb2RlIG9udG8gYWRhcHRlciAqLwotCWlmIChzZGxhX3Bva2UoaHcsIHNmbS0+aW5mby5jb2Rlb2Zmcywgc2ZtLT5pbWFnZSwgc2ZtLT5pbmZvLmNvZGVzaXplKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIGxvYWQgY29kZSBzZWdtZW50IVxuIiwKLQkJCW1vZG5hbWUpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBQcmVwYXJlIGJvb3QtdGltZSBjb25maWd1cmF0aW9uIGRhdGEgYW5kIGtpY2stb2ZmIENQVSAqLwotCXNkbGFfYm9vdGNmZyhodywgJnNmbS0+aW5mbyk7Ci0JaWYgKHNkbGFfc3RhcnQoaHcsIHNmbS0+aW5mby5zdGFydG9mZnMpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBEYW1uLi4uIEFkYXB0ZXIgd29uJ3Qgc3RhcnQhXG4iLAotCQkJbW9kbmFtZSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIHBvc2l0aW9uIERQTSB3aW5kb3cgb3ZlciB0aGUgbWFpbGJveCBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KLSAgICAgICAgaWYgKHNkbGFfbWFwbWVtKGh3LCBzZm0tPmluZm8ud2lub2ZmcykgfHwgc2RsYV9pbnRlbihodykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGFkYXB0ZXIgaGFyZHdhcmUgZmFpbHVyZSFcbiIsCi0JCQltb2RuYW1lKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWh3LT5md2lkID0gc2ZtLT5pbmZvLmNvZGVpZDsJCS8qIHNldCBmaXJtd2FyZSBJRCAqLwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgU0RMQSBoYXJkd2FyZTogc2V0dXAgbWVtb3J5IHdpbmRvdywgSVJRLCBldGMuCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9pbml0IChzZGxhaHdfdCogaHcpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9NQVhJT1JBTkdFOyArK2kpCi0JCWh3LT5yZWdzW2ldID0gMDsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6IHJldHVybiBpbml0X3M1MDJhKGh3KTsKLQljYXNlIFNETEFfUzUwMkU6IHJldHVybiBpbml0X3M1MDJlKGh3KTsKLQljYXNlIFNETEFfUzUwMzogIHJldHVybiBpbml0X3M1MDMoaHcpOwotCWNhc2UgU0RMQV9TNTA3OiAgcmV0dXJuIGluaXRfczUwNyhodyk7Ci0JY2FzZSBTRExBX1M1MDg6ICByZXR1cm4gaW5pdF9zNTA4KGh3KTsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGVzdCBhZGFwdGVyIG9uLWJvYXJkIG1lbW9yeS4KLSAqIG8gc2xpZGUgRFBNIHdpbmRvdyBmcm9tIHRoZSBib3R0b20gdXAgYW5kIHRlc3QgYWRhcHRlciBtZW1vcnkgc2VnbWVudCBieQotICogICBzZWdtZW50LgotICogUmV0dXJuIGFkYXB0ZXIgbWVtb3J5IHNpemUuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNkbGFfbWVtdGVzdCAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKLQl1bnNpZ25lZCB3aW5zaXplOwotCi0JZm9yIChtZW1zaXplID0gMCwgd2luc2l6ZSA9IGh3LT5kcG1zaXplOwotCSAgICAgIXNkbGFfbWFwbWVtKGh3LCBtZW1zaXplKSAmJgotCQkodGVzdF9tZW1yZWdpb24oaHctPmRwbWJhc2UsIHdpbnNpemUpID09IHdpbnNpemUpCi0JICAgICA7Ci0JICAgICBtZW1zaXplICs9IHdpbnNpemUpCi0JOwotCWh3LT5tZW1vcnkgPSBtZW1zaXplOwotCXJldHVybiBtZW1zaXplOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByZXBhcmUgYm9vdC10aW1lIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gZGF0YS4KLSAqIG8gcG9zaXRpb24gRFBNIHdpbmRvdwotICogbyBpbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZGF0YSBhcmVhCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9ib290Y2ZnIChzZGxhaHdfdCogaHcsIHNmbV9pbmZvX3QqIHNmbWluZm8pCi17Ci0JdW5zaWduZWQgY2hhciogZGF0YTsKLQotCWlmICghc2ZtaW5mby0+ZGF0YXNpemUpIHJldHVybiAwOwkvKiBub3RoaW5nIHRvIGRvICovCi0KLQlpZiAoc2RsYV9tYXBtZW0oaHcsIHNmbWluZm8tPmRhdGFvZmZzKSAhPSAwKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmKGh3LT50eXBlID09IFNETEFfUzUxNCkKLSAgICAgICAgICAgICAgICBkYXRhID0gKHZvaWQqKShody0+ZHBtYmFzZSArIHNmbWluZm8tPmRhdGFvZmZzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRhdGEgPSAodm9pZCopKCh1OCAqKWh3LT5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIChzZm1pbmZvLT5kYXRhb2ZmcyAtIGh3LT52ZWN0b3IpKTsKLQotCW1lbXNldF9pbyAoZGF0YSwgMCwgc2ZtaW5mby0+ZGF0YXNpemUpOwotCi0Jd3JpdGViIChtYWtlX2NvbmZpZ19ieXRlKGh3KSwgJmRhdGFbMHgwMF0pOwotCi0Jc3dpdGNoIChzZm1pbmZvLT5jb2RlaWQpIHsKLQljYXNlIFNGSURfWDI1XzUwMjoKLQljYXNlIFNGSURfWDI1XzUwODoKLSAgICAgICAgICAgICAgICB3cml0ZWIgKDMsICZkYXRhWzB4MDFdKTsgICAgICAgIC8qIFQxIHRpbWVyICovCi0gICAgICAgICAgICAgICAgd3JpdGViICgxMCwgJmRhdGFbMHgwM10pOyAgICAgICAvKiBOMiAqLwotICAgICAgICAgICAgICAgIHdyaXRlYiAoNywgJmRhdGFbMHgwNl0pOyAgICAgICAgLyogSERMQyB3aW5kb3cgc2l6ZSAqLwotICAgICAgICAgICAgICAgIHdyaXRlYiAoMSwgJmRhdGFbMHgwQl0pOyAgICAgICAgLyogRFRFICovCi0gICAgICAgICAgICAgICAgd3JpdGViICgyLCAmZGF0YVsweDBDXSk7ICAgICAgICAvKiBYLjI1IHBhY2tldCB3aW5kb3cgc2l6ZSAqLwotICAgICAgICAgICAgICAgIHdyaXRldyAoMTI4LCAmZGF0YVsweDBEXSk7CS8qIGRlZmF1bHQgWC4yNSBkYXRhIHNpemUgKi8KLSAgICAgICAgICAgICAgICB3cml0ZXcgKDEyOCwgJmRhdGFbMHgwRl0pOwkvKiBtYXhpbXVtIFguMjUgZGF0YSBzaXplICovCi0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcmVwYXJlIGNvbmZpZ3VyYXRpb24gYnl0ZSBpZGVudGlmeWluZyBhZGFwdGVyIHR5cGUgYW5kIENQVSBjbG9jayByYXRlLgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBtYWtlX2NvbmZpZ19ieXRlIChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgY2hhciBieXRlID0gMDsKLQotCXN3aXRjaCAoaHctPnBjbGspIHsKLQkJY2FzZSA1MDAwOiAgYnl0ZSA9IDB4MDE7IGJyZWFrOwotCQljYXNlIDcyMDA6ICBieXRlID0gMHgwMjsgYnJlYWs7Ci0JCWNhc2UgODAwMDogIGJ5dGUgPSAweDAzOyBicmVhazsKLQkJY2FzZSAxMDAwMDogYnl0ZSA9IDB4MDQ7IGJyZWFrOwotCQljYXNlIDE2MDAwOiBieXRlID0gMHgwNTsgYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCQljYXNlIFNETEFfUzUwMkU6IGJ5dGUgfD0gMHg4MDsgYnJlYWs7Ci0JCWNhc2UgU0RMQV9TNTAzOiAgYnl0ZSB8PSAweDQwOyBicmVhazsKLQl9Ci0JcmV0dXJuIGJ5dGU7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU3RhcnQgYWRhcHRlcidzIENQVS4KLSAqIG8gY2FsY3VsYXRlIGEgcG9pbnRlciB0byBhZGFwdGVyJ3MgY29sZCBib290IGVudHJ5IHBvaW50Ci0gKiBvIHBvc2l0aW9uIERQTSB3aW5kb3cKLSAqIG8gcGxhY2UgYm9vdCBpbnN0cnVjdGlvbiAoanAgYWRkcikgYXQgY29sZCBib290IGVudHJ5IHBvaW50Ci0gKiBvIHN0YXJ0IENQVQotICovCi1zdGF0aWMgaW50IHNkbGFfc3RhcnQgKHNkbGFod190KiBodywgdW5zaWduZWQgYWRkcikKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JdW5zaWduZWQgY2hhciAqYm9vdHA7Ci0JaW50IGVyciwgdG1wLCBpOwotCi0JaWYgKCFwb3J0ICYmIChody0+dHlwZSAhPSBTRExBX1M1MTQpKSByZXR1cm4gLUVGQVVMVDsKLQotIAlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JY2FzZSBTRExBX1M1MDJBOgotCQlib290cCA9IGh3LT5kcG1iYXNlOwotCQlib290cCArPSAweDY2OwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAyRToKLQljYXNlIFNETEFfUzUwMzoKLQljYXNlIFNETEFfUzUwNzoKLQljYXNlIFNETEFfUzUwODoKLQljYXNlIFNETEFfUzUxNDoKLQkJYm9vdHAgPSBody0+ZHBtYmFzZTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQllcnIgPSBzZGxhX21hcG1lbShodywgMCk7Ci0JaWYgKGVycikgcmV0dXJuIGVycjsKLQotICAgICAgCXdyaXRlYiAoMHhDMywgYm9vdHApOyAgIC8qIFo4MDogJ2pwJyBvcGNvZGUgKi8KLQlib290cCArKzsKLQl3cml0ZXcgKGFkZHIsIGJvb3RwKTsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6Ci0JCV9PVVRCKHBvcnQsIDB4MTApOwkJLyogaXNzdWUgTk1JIHRvIENQVSAqLwotCQlody0+cmVnc1swXSA9IDB4MTA7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCQlfT1VUQihwb3J0ICsgMywgMHgwMSk7CQkvKiBzdGFydCBDUFUgKi8KLQkJaHctPnJlZ3NbM10gPSAweDAxOwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwotCQlpZiAoX0lOQihwb3J0KSAmIDB4MDEpIHsJLyogdmVyaWZ5ICovCi0JCQkvKgotCQkJICogRW5hYmxpbmcgQ1BVIGNoYW5nZXMgZnVuY3Rpb25hbGl0eSBvZiB0aGUKLQkJCSAqIGNvbnRyb2wgcmVnaXN0ZXIsIHNvIHdlIGhhdmUgdG8gcmVzZXQgaXRzCi0JCQkgKiBtaXJyb3IuCi0JCQkgKi8KLQkJCV9PVVRCKHBvcnQsIDApOwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JCQlody0+cmVnc1swXSA9IDA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQkJdG1wID0gaHctPnJlZ3NbMF0gfCAweDA5OwkvKiBzZXQgYml0cyAwIGFuZCAzICovCi0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwotCQlpZiAoIShfSU5CKHBvcnQpICYgMHgwMSkpCS8qIHZlcmlmeSAqLwotCQkJcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDc6Ci0JCXRtcCA9IGh3LT5yZWdzWzBdIHwgMHgwMjsKLQkJX09VVEIocG9ydCwgdG1wKTsKLQkJaHctPnJlZ3NbMF0gPSB0bXA7CQkvKiB1cGRhdGUgbWlycm9yICovCi0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7Ci0JCWlmICghKF9JTkIocG9ydCkgJiAweDA0KSkJLyogdmVyaWZ5ICovCi0JCQlyZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwODoKLQkJdG1wID0gaHctPnJlZ3NbMF0gfCAweDAyOwotCQlfT1VUQihwb3J0LCB0bXApOwotCQlody0+cmVnc1swXSA9IHRtcDsJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwotCQlpZiAoIShfSU5CKHBvcnQgKyAxKSAmIDB4MDIpKQkvKiB2ZXJpZnkgKi8KLQkJCXJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTE0OgotCQl3cml0ZWIgKFM1MTRfQ1BVX1NUQVJULCBody0+dmVjdG9yKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBTNTAyQSBhZGFwdGVyLgotICovCi1zdGF0aWMgaW50IGluaXRfczUwMmEgKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JaW50IHRtcCwgaTsKLQotCWlmICghZGV0ZWN0X3M1MDJhKHBvcnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWh3LT5yZWdzWzBdID0gMHgwODsKLQlody0+cmVnc1sxXSA9IDB4RkY7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0JaSA9IGdldF9vcHRpb25faW5kZXgoczUwMmFfZHBtYmFzZV9vcHRpb25zLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLQlpZiAoaSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRtcCA9IHM1MDJhX2htY3JbaSAtIDFdOwotCXN3aXRjaCAoaHctPmRwbXNpemUpIHsKLQljYXNlIDB4MjAwMDoKLQkJdG1wIHw9IDB4MDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDEwMDAwTDoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBTZXR1cCBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyAodGhpcyBhbHNvIGVuYWJsZXMgbWVtb3J5IGFjY2VzcykgKi8KLQlfT1VUQihwb3J0ICsgMSwgdG1wKTsKLQlody0+cmVnc1sxXSA9IHRtcDsKLQlody0+cmVnc1swXSA9IDB4MDg7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBTNTAyRSBhZGFwdGVyLgotICovCi1zdGF0aWMgaW50IGluaXRfczUwMmUgKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JaW50IHRtcCwgaTsKLQotCWlmICghZGV0ZWN0X3M1MDJlKHBvcnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQlpID0gZ2V0X29wdGlvbl9pbmRleChzNTA4X2RwbWJhc2Vfb3B0aW9ucywgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0JaWYgKGkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0bXAgPSBzNTAyZV9obWNyW2kgLSAxXTsKLQlzd2l0Y2ggKGh3LT5kcG1zaXplKSB7Ci0JY2FzZSAweDIwMDA6Ci0JCXRtcCB8PSAweDAxOwotCQlicmVhazsKLQotCWNhc2UgMHgxMDAwMEw6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogU2V0dXAgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgKi8KLQlfT1VUQihwb3J0ICsgMSwgdG1wKTsKLQlody0+cmVnc1sxXSA9IHRtcDsKLQotCS8qIEVuYWJsZSBtZW1vcnkgYWNjZXNzICovCi0JX09VVEIocG9ydCwgMHgwMik7Ci0JaHctPnJlZ3NbMF0gPSAweDAyOwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JcmV0dXJuIChfSU5CKHBvcnQpICYgMHgwMikgPyAwIDogLUVJTzsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIFM1MDMgYWRhcHRlci4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgaW50IGluaXRfczUwMyAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0JaWYgKCFkZXRlY3RfczUwMyhwb3J0KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0JaSA9IGdldF9vcHRpb25faW5kZXgoczUwOF9kcG1iYXNlX29wdGlvbnMsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotCWlmIChpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdG1wID0gczUwMmVfaG1jcltpIC0gMV07Ci0Jc3dpdGNoIChody0+ZHBtc2l6ZSkgewotCWNhc2UgMHgyMDAwOgotCQl0bXAgfD0gMHgwMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4MTAwMDBMOgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFNldHVwIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93ICovCi0JX09VVEIocG9ydCArIDEsIHRtcCk7Ci0JaHctPnJlZ3NbMV0gPSB0bXA7Ci0KLQkvKiBFbmFibGUgbWVtb3J5IGFjY2VzcyAqLwotCV9PVVRCKHBvcnQsIDB4MDIpOwotCWh3LT5yZWdzWzBdID0gMHgwMjsJLyogdXBkYXRlIG1pcnJvciAqLwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgUzUwNyBhZGFwdGVyLgotICovCi1zdGF0aWMgaW50IGluaXRfczUwNyAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0JaWYgKCFkZXRlY3RfczUwNyhwb3J0KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0JaSA9IGdldF9vcHRpb25faW5kZXgoczUwN19kcG1iYXNlX29wdGlvbnMsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotCWlmIChpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdG1wID0gczUwN19obWNyW2kgLSAxXTsKLQlzd2l0Y2ggKGh3LT5kcG1zaXplKSB7Ci0JY2FzZSAweDIwMDA6Ci0JCXRtcCB8PSAweDAxOwotCQlicmVhazsKLQotCWNhc2UgMHgxMDAwMEw6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogRW5hYmxlIGFkYXB0ZXIncyBsb2dpYyAqLwotCV9PVVRCKHBvcnQsIDB4MDEpOwotCWh3LT5yZWdzWzBdID0gMHgwMTsKLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmICghKF9JTkIocG9ydCkgJiAweDIwKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKiBTZXR1cCBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyAqLwotCV9PVVRCKHBvcnQgKyAxLCB0bXApOwotCWh3LT5yZWdzWzFdID0gdG1wOwotCi0JLyogRW5hYmxlIG1lbW9yeSBhY2Nlc3MgKi8KLQl0bXAgPSBody0+cmVnc1swXSB8IDB4MDQ7Ci0JaWYgKGh3LT5pcnEpIHsKLQkJaSA9IGdldF9vcHRpb25faW5kZXgoczUwOF9pcnFfb3B0aW9ucywgaHctPmlycSk7Ci0JCWlmIChpKSB0bXAgfD0gczUwN19pcnFtYXNrW2kgLSAxXTsKLQl9Ci0JX09VVEIocG9ydCwgdG1wKTsKLQlody0+cmVnc1swXSA9IHRtcDsJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCXJldHVybiAoX0lOQihwb3J0KSAmIDB4MDgpID8gMCA6IC1FSU87Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBTNTA4IGFkYXB0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9zNTA4IChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCWludCB0bXAsIGk7Ci0KLQlpZiAoIWRldGVjdF9zNTA4KHBvcnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQlpID0gZ2V0X29wdGlvbl9pbmRleChzNTA4X2RwbWJhc2Vfb3B0aW9ucywgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0JaWYgKGkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBTZXR1cCBtZW1vcnkgY29uZmlndXJhdGlvbiAqLwotCXRtcCA9IHM1MDhfaG1jcltpIC0gMV07Ci0JX09VVEIocG9ydCArIDEsIHRtcCk7Ci0JaHctPnJlZ3NbMV0gPSB0bXA7Ci0KLQkvKiBFbmFibGUgbWVtb3J5IGFjY2VzcyAqLwotCV9PVVRCKHBvcnQsIDB4MDQpOwotCWh3LT5yZWdzWzBdID0gMHgwNDsJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCXJldHVybiAoX0lOQihwb3J0ICsgMSkgJiAweDA0KSA/IDAgOiAtRUlPOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVjdCBTNTAyQSBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIGRldGVjdCBTNTAyQSBhZGFwdGVyOgotICoJMS4gQWxsIHJlZ2lzdGVycyBvdGhlciB0aGFuIHN0YXR1cyAoQkFTRSkgc2hvdWxkIHJlYWQgMHhGRgotICoJMi4gQWZ0ZXIgd3JpdGluZyAwMDAwMTAwMGIgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZAotICoJICAgcmVhZCAwMTAwMDAwMGIuCi0gKgkzLiBBZnRlciB3cml0aW5nIDAgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCBzdGlsbAotICoJICAgcmVhZCAgMDEwMDAwMDBiLgotICoJNC4gQWZ0ZXIgd3JpdGluZyAwMDAwMDEwMGIgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZAotICoJICAgcmVhZCAwMTAwMDEwMGIuCi0gKglSZXR1cm4gMSBpZiBkZXRlY3RlZCBvLmsuIG9yIDAgaWYgZmFpbGVkLgotICoJTm90ZToJVGhpcyB0ZXN0IGlzIGRlc3RydWN0aXZlISBBZGFwdGVyIHdpbGwgYmUgbGVmdCBpbiBzaHV0ZG93bgotICoJCXN0YXRlIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IGRldGVjdF9zNTAyYSAoaW50IHBvcnQpCi17Ci0JaW50IGksIGo7Ci0KLQlpZiAoIWdldF9vcHRpb25faW5kZXgoczUwMl9wb3J0X29wdGlvbnMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQkKLQlmb3IgKGogPSAxOyBqIDwgU0RMQV9NQVhJT1JBTkdFOyArK2opIHsKLQkJaWYgKF9JTkIocG9ydCArIGopICE9IDB4RkYpCi0JCQlyZXR1cm4gMDsKLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQl9Ci0KLQlfT1VUQihwb3J0LCAweDA4KTsJCQkvKiBoYWx0IENQVSAqLwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JaWYgKF9JTkIocG9ydCkgIT0gMHg0MCkKLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwMCk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoX0lOQihwb3J0KSAhPSAweDQwKQotCQlyZXR1cm4gMDsKLQlfT1VUQihwb3J0LCAweDA0KTsKLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4NDQpCi0JCXJldHVybiAwOwotCi0JLyogUmVzZXQgYWRhcHRlciAqLwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCV9PVVRCKHBvcnQgKyAxLCAweEZGKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgUzUwMkUgYWRhcHRlci4KLSAqCUZvbGxvd2luZyB0ZXN0cyBhcmUgdXNlZCB0byB2ZXJpZnkgYWRhcHRlciBwcmVzZW5jZToKLSAqCTEuIEFsbCByZWdpc3RlcnMgb3RoZXIgdGhhbiBzdGF0dXMgKEJBU0UpIHNob3VsZCByZWFkIDB4RkYuCi0gKgkyLiBBZnRlciB3cml0aW5nIDAgdG8gQ1BVIGNvbnRyb2wgcmVnaXN0ZXIgKEJBU0UrMyksIHN0YXR1cyByZWdpc3RlcgotICoJICAgKEJBU0UpIHNob3VsZCByZWFkIDExMTExMDAwYi4KLSAqCTMuIEFmdGVyIHdyaXRpbmcgMDAwMDAxMDBiIHRvIHBvcnQgQkFTRSAoc2V0IGJpdCAyKSwgc3RhdHVzIHJlZ2lzdGVyCi0gKgkgICAoQkFTRSkgc2hvdWxkIHJlYWQgMTExMTExMDBiLgotICoJUmV0dXJuIDEgaWYgZGV0ZWN0ZWQgby5rLiBvciAwIGlmIGZhaWxlZC4KLSAqCU5vdGU6CVRoaXMgdGVzdCBpcyBkZXN0cnVjdGl2ZSEgQWRhcHRlciB3aWxsIGJlIGxlZnQgaW4gc2h1dGRvd24KLSAqCQlzdGF0ZSBhZnRlciB0aGUgdGVzdC4KLSAqLwotc3RhdGljIGludCBkZXRlY3RfczUwMmUgKGludCBwb3J0KQotewotCWludCBpLCBqOwotCi0JaWYgKCFnZXRfb3B0aW9uX2luZGV4KHM1MDJfcG9ydF9vcHRpb25zLCBwb3J0KSkKLQkJcmV0dXJuIDA7Ci0JZm9yIChqID0gMTsgaiA8IFNETEFfTUFYSU9SQU5HRTsgKytqKSB7Ci0JCWlmIChfSU5CKHBvcnQgKyBqKSAhPSAweEZGKQotCQkJcmV0dXJuIDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JfQotCi0JX09VVEIocG9ydCArIDMsIDApOwkJCS8qIENQVSBjb250cm9sIHJlZy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4RjgpCQkJLyogcmVhZCBzdGF0dXMgKi8KLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwNCk7CQkJLyogc2V0IGJpdCAyICovCi0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoX0lOQihwb3J0KSAhPSAweEZDKQkJCS8qIHZlcmlmeSAqLwotCQlyZXR1cm4gMDsKLQotCS8qIFJlc2V0IGFkYXB0ZXIgKi8KLQlfT1VUQihwb3J0LCAwKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgczUwMyBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIHZlcmlmeSBhZGFwdGVyIHByZXNlbmNlOgotICoJMS4gQWxsIHJlZ2lzdGVycyBvdGhlciB0aGFuIHN0YXR1cyAoQkFTRSkgc2hvdWxkIHJlYWQgMHhGRi4KLSAqCTIuIEFmdGVyIHdyaXRpbmcgMCB0byBjb250cm9sIHJlZ2lzdGVyIChCQVNFKSwgc3RhdHVzIHJlZ2lzdGVyIChCQVNFKQotICoJICAgc2hvdWxkIHJlYWQgMTExMTAwMDBiLgotICoJMy4gQWZ0ZXIgd3JpdGluZyAwMDAwMDEwMGIgKHNldCBiaXQgMikgdG8gY29udHJvbCByZWdpc3RlciAoQkFTRSksCi0gKgkgICBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkIHJlYWQgMTExMTAwMTBiLgotICoJUmV0dXJuIDEgaWYgZGV0ZWN0ZWQgby5rLiBvciAwIGlmIGZhaWxlZC4KLSAqCU5vdGU6CVRoaXMgdGVzdCBpcyBkZXN0cnVjdGl2ZSEgQWRhcHRlciB3aWxsIGJlIGxlZnQgaW4gc2h1dGRvd24KLSAqCQlzdGF0ZSBhZnRlciB0aGUgdGVzdC4KLSAqLwotc3RhdGljIGludCBkZXRlY3RfczUwMyAoaW50IHBvcnQpCi17Ci0JaW50IGksIGo7Ci0KLQlpZiAoIWdldF9vcHRpb25faW5kZXgoczUwM19wb3J0X29wdGlvbnMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQlmb3IgKGogPSAxOyBqIDwgU0RMQV9NQVhJT1JBTkdFOyArK2opIHsKLQkJaWYgKF9JTkIocG9ydCArIGopICE9IDB4RkYpCi0JCQlyZXR1cm4gMDsKLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQl9Ci0KLQlfT1VUQihwb3J0LCAwKTsJCQkJLyogcmVzZXQgY29udHJvbCByZWcuKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4RjApCQkJLyogcmVhZCBzdGF0dXMgKi8KLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwNCk7CQkJLyogc2V0IGJpdCAyICovCi0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoX0lOQihwb3J0KSAhPSAweEYyKQkJCS8qIHZlcmlmeSAqLwotCQlyZXR1cm4gMDsKLQotCS8qIFJlc2V0IGFkYXB0ZXIgKi8KLQlfT1VUQihwb3J0LCAwKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgczUwNyBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIGRldGVjdCBzNTA3IGFkYXB0ZXI6Ci0gKgkxLiBBbGwgcG9ydHMgc2hvdWxkIHJlYWQgdGhlIHNhbWUgdmFsdWUuCi0gKgkyLiBBZnRlciB3cml0aW5nIDB4MDAgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCByZWFkCi0gKgkgICA/MDExMDAwP2IuCi0gKgkzLiBBZnRlciB3cml0aW5nIDB4MDEgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCByZWFkCi0gKgkgICA/MDExMDAxP2IuCi0gKglSZXR1cm4gMSBpZiBkZXRlY3RlZCBvLmsuIG9yIDAgaWYgZmFpbGVkLgotICoJTm90ZToJVGhpcyB0ZXN0IGlzIGRlc3RydWN0aXZlISBBZGFwdGVyIHdpbGwgYmUgbGVmdCBpbiBzaHV0ZG93bgotICoJCXN0YXRlIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IGRldGVjdF9zNTA3IChpbnQgcG9ydCkKLXsKLQlpbnQgdG1wLCBpLCBqOwotCi0JaWYgKCFnZXRfb3B0aW9uX2luZGV4KHM1MDhfcG9ydF9vcHRpb25zLCBwb3J0KSkKLQkJcmV0dXJuIDA7Ci0JdG1wID0gX0lOQihwb3J0KTsKLQlmb3IgKGogPSAxOyBqIDwgUzUwN19JT1JBTkdFOyArK2opIHsKLQkJaWYgKF9JTkIocG9ydCArIGopICE9IHRtcCkKLQkJCXJldHVybiAwOwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCX0KLQotCV9PVVRCKHBvcnQsIDB4MDApOwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JaWYgKChfSU5CKHBvcnQpICYgMHg3RSkgIT0gMHgzMCkKLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwMSk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoKF9JTkIocG9ydCkgJiAweDdFKSAhPSAweDMyKQotCQlyZXR1cm4gMDsKLQotCS8qIFJlc2V0IGFkYXB0ZXIgKi8KLQlfT1VUQihwb3J0LCAweDAwKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgczUwOCBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIGRldGVjdCBzNTA4IGFkYXB0ZXI6Ci0gKgkxLiBBZnRlciB3cml0aW5nIDB4MDAgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCByZWFkCi0gKgkgICA/PzAwMDAwMGIuCi0gKgkyLiBBZnRlciB3cml0aW5nIDB4MTAgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCByZWFkCi0gKgkgICA/PzAxMDAwMGIKLSAqCVJldHVybiAxIGlmIGRldGVjdGVkIG8uay4gb3IgMCBpZiBmYWlsZWQuCi0gKglOb3RlOglUaGlzIHRlc3QgaXMgZGVzdHJ1Y3RpdmUhIEFkYXB0ZXIgd2lsbCBiZSBsZWZ0IGluIHNodXRkb3duCi0gKgkJc3RhdGUgYWZ0ZXIgdGhlIHRlc3QuCi0gKi8KLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDggKGludCBwb3J0KQotewotCWludCBpOwotCi0JaWYgKCFnZXRfb3B0aW9uX2luZGV4KHM1MDhfcG9ydF9vcHRpb25zLCBwb3J0KSkKLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwMCk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoKF9JTkIocG9ydCArIDEpICYgMHgzRikgIT0gMHgwMCkKLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgxMCk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoKF9JTkIocG9ydCArIDEpICYgMHgzRikgIT0gMHgxMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBSZXNldCBhZGFwdGVyICovCi0JX09VVEIocG9ydCwgMHgwMCk7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZWN0IHM1MTQgUENJIGFkYXB0ZXIuCi0gKiAgICAgIFJldHVybiAxIGlmIGRldGVjdGVkIG8uay4gb3IgMCBpZiBmYWlsZWQuCi0gKiAgICAgIE5vdGU6ICAgVGhpcyB0ZXN0IGlzIGRlc3RydWN0aXZlISBBZGFwdGVyIHdpbGwgYmUgbGVmdCBpbiBzaHV0ZG93bgotICogICAgICAgICAgICAgIHN0YXRlIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IGRldGVjdF9zNTE0IChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgY2hhciBDUFVfbm8sIHNsb3Rfbm8sIGF1dG9fc2xvdF9jZmc7Ci0JaW50IG51bWJlcl9TNTE0X2NhcmRzID0gMDsKLQl1MzIgUzUxNF9tZW1fYmFzZV9hZGRyID0gMDsKLQl1MzIgdXRfdTMyOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCi0KLSNpZm5kZWYgQ09ORklHX1BDSQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTGludXggbm90IGNvbXBpbGVkIGZvciBQQ0kgdXNhZ2UhXG4iLCBtb2RuYW1lKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKLQotCS8qCi0JVGhlICdzZXR1cCgpJyBwcm9jZWR1cmUgaW4gJ3NkbGFtYWluLmMnIHBhc3NlcyB0aGUgQ1BVIG51bWJlciBhbmQgdGhlCi0Jc2xvdCBudW1iZXIgZGVmaW5lZCBpbiAncm91dGVyLmNvbmYnIHZpYSB0aGUgJ3BvcnQnIGRlZmluaXRpb24uCi0JKi8KLQlDUFVfbm8gPSBody0+UzUxNF9jcHVfbm9bMF07Ci0Jc2xvdF9ubyA9IGh3LT5TNTE0X3Nsb3Rfbm87Ci0JYXV0b19zbG90X2NmZyA9IGh3LT5hdXRvX3BjaV9jZmc7Ci0KLQlpZiAoYXV0b19zbG90X2NmZyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBzcmNoLi4uIFM1MTQgY2FyZCwgQ1BVICVjLCBTbG90PUF1dG9cbiIsCi0JCW1vZG5hbWUsIENQVV9ubyk7Ci0KLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNyY2guLi4gUzUxNCBjYXJkLCBDUFUgJWMsIFNsb3QgIyVkXG4iLAotCQltb2RuYW1lLCBDUFVfbm8sIHNsb3Rfbm8pOwotCX0KLQkKLQkvKiBjaGVjayB0byBzZWUgdGhhdCBDUFUgQSBvciBCIGhhcyBiZWVuIHNlbGVjdGVkIGluICdyb3V0ZXIuY29uZicgKi8KLQlzd2l0Y2goQ1BVX25vKSB7Ci0JCWNhc2UgUzUxNF9DUFVfQToKLQkJY2FzZSBTNTE0X0NQVV9COgotCQkJYnJlYWs7Ci0JCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUzUxNCBDUFUgZGVmaW5pdGlvbiBpbnZhbGlkLlxuIiwgCi0JCQkJbW9kbmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJNdXN0IGJlICdBJyBvciAnQidcbiIpOwotCQkJcmV0dXJuIDA7Ci0JfQotCi0JbnVtYmVyX1M1MTRfY2FyZHMgPSBmaW5kX3M1MTRfYWRhcHRlcihodywgMCk7Ci0JaWYoIW51bWJlcl9TNTE0X2NhcmRzKQotCQlyZXR1cm4gMDsKLQotCS8qIHdlIGFyZSB1c2luZyBhIHNpbmdsZSBTNTE0IGFkYXB0ZXIgd2l0aCBhIHNsb3Qgb2YgMCBzbyByZS1yZWFkIHRoZSAqLwkKLQkvKiBsb2NhdGlvbiBvZiB0aGlzIGFkYXB0ZXIgKi8KLQlpZigobnVtYmVyX1M1MTRfY2FyZHMgPT0gMSkgJiYgYXV0b19zbG90X2NmZykgewkKLSAgICAgICAgCW51bWJlcl9TNTE0X2NhcmRzID0gZmluZF9zNTE0X2FkYXB0ZXIoaHcsIDEpOwotCQlpZighbnVtYmVyX1M1MTRfY2FyZHMpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciBmaW5kaW5nIFBDSSBjYXJkXG4iLAotCQkJCW1vZG5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlwY2lfZGV2ID0gaHctPnBjaV9kZXY7Ci0JLyogcmVhZCB0aGUgcGh5c2ljYWwgbWVtb3J5IGJhc2UgYWRkcmVzcyAqLwotCVM1MTRfbWVtX2Jhc2VfYWRkciA9IChDUFVfbm8gPT0gUzUxNF9DUFVfQSkgPyAKLQkJKHBjaV9kZXYtPnJlc291cmNlWzFdLnN0YXJ0KSA6Ci0JCShwY2lfZGV2LT5yZXNvdXJjZVsyXS5zdGFydCk7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFM1MTQgUENJIG1lbW9yeSBhdCAweCVYXG4iLAotCQltb2RuYW1lLCBTNTE0X21lbV9iYXNlX2FkZHIpOwotCWlmKCFTNTE0X21lbV9iYXNlX2FkZHIpIHsKLQkJaWYoQ1BVX25vID09IFM1MTRfQ1BVX0IpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ1BVICNCIG5vdCBwcmVzZW50IG9uIHRoZSBjYXJkXG4iLCAJCQkJbW9kbmFtZSk7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBQQ0kgbWVtb3J5IGFsbG9jYXRlZCB0byBjYXJkXG4iLAkJCQltb2RuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogZW5hYmxlIHRoZSBQQ0kgbWVtb3J5ICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsIAotCQkoQ1BVX25vID09IFM1MTRfQ1BVX0EpID8gUENJX01BUDBfRFdPUkQgOiBQQ0lfTUFQMV9EV09SRCwKLQkJJnV0X3UzMik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfZGV2LAotCQkoQ1BVX25vID09IFM1MTRfQ1BVX0EpID8gUENJX01BUDBfRFdPUkQgOiBQQ0lfTUFQMV9EV09SRCwKLQkJKHV0X3UzMiB8IFBDSV9NRU1PUllfRU5BQkxFKSk7Ci0KLQkvKiBjaGVjayB0aGUgSVJRIGFsbG9jYXRlZCBhbmQgZW5hYmxlIElSUSB1c2FnZSAqLwotCWlmKCEoaHctPmlycSA9IHBjaV9kZXYtPmlycSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElSUSBub3QgYWxsb2NhdGVkIHRvIFM1MTQgYWRhcHRlclxuIiwKLQkJCW1vZG5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCX0KLQotCS8qIEJVRyBGSVggOiBNYXIgNiAyMDAwCi0gCSAqIE9uIGEgaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSBjYXJkLCB3ZSBtdXN0IGNoZWNrCi0gICAgICAgICAqIGFuZCBjbGVhciBQQ0kgaW50ZXJydXB0IGJpdHMsIGR1ZSB0byBhIHJlc2V0Ci0gICAgICAgICAqIHByb2JsZW0gb24gc29tZSBvdGhlciBib2FyZHMuICBpLmUuIEFuIGludGVycnVwdAotICAgICAgICAgKiBtaWdodCBiZSBwZW5kaW5nLCBldmVuIGFmdGVyIHN5c3RlbSBib290dXAsIAotICAgICAgICAgKiBpbiB3aGljaCBjYXNlLCB3aGVuIHN0YXJ0aW5nIHdhbnJvdXRlciB0aGUgbWFjaGluZQotICAgICAgICAgKiB3b3VsZCBjcmFzaC4gCi0JICovCi0JaWYgKGluaXRfcGNpX3Nsb3QoaHcpKQotCQlyZXR1cm4gMDsKLQotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwgUENJX0lOVF9DT05GSUcsICZ1dF91MzIpOwotICAgICAgICB1dF91MzIgfD0gKENQVV9ubyA9PSBTNTE0X0NQVV9BKSA/Ci0gICAgICAgICAgICAgICAgUENJX0VOQUJMRV9JUlFfQ1BVX0EgOiBQQ0lfRU5BQkxFX0lSUV9DUFVfQjsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfZGV2LCBQQ0lfSU5UX0NPTkZJRywgdXRfdTMyKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUlEgJWQgYWxsb2NhdGVkIHRvIHRoZSBTNTE0IGNhcmRcbiIsCi0JCW1vZG5hbWUsIGh3LT5pcnEpOwotCi0JLyogbWFwIHRoZSBwaHlzaWNhbCBQQ0kgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5ICovCi0JaHctPmRwbWJhc2UgPSBpb3JlbWFwKCh1bnNpZ25lZCBsb25nKVM1MTRfbWVtX2Jhc2VfYWRkciwKLQkJKHVuc2lnbmVkIGxvbmcpTUFYX1NJWkVPRl9TNTE0X01FTU9SWSk7Ci0gICAgCS8qIG1hcCB0aGUgcGh5c2ljYWwgY29udHJvbCByZWdpc3RlciBtZW1vcnkgdG8gdmlydHVhbCBtZW1vcnkgKi8KLQlody0+dmVjdG9yID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcCgKLQkJKHVuc2lnbmVkIGxvbmcpKFM1MTRfbWVtX2Jhc2VfYWRkciArIFM1MTRfQ1RSTF9SRUdfQllURSksCi0JCSh1bnNpZ25lZCBsb25nKTE2KTsKLSAgICAgCi0gICAgICAgIGlmKCFody0+ZHBtYmFzZSB8fCAhaHctPnZlY3RvcikgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogUENJIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iLAotCQkJbW9kbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0JfQotCi0JLyogaGFsdCB0aGUgYWRhcHRlciAqLwotCXdyaXRlYiAoUzUxNF9DUFVfSEFMVCwgaHctPnZlY3Rvcik7CQotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmluZCB0aGUgUzUxNCBQQ0kgYWRhcHRlciBpbiB0aGUgUENJIGJ1cy4KLSAqICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgUzUxNCBhZGFwdGVycyBmb3VuZCAoMCBpZiBubyBhZGFwdGVyIGZvdW5kKS4KLSAqLwotc3RhdGljIGludCBmaW5kX3M1MTRfYWRhcHRlcihzZGxhaHdfdCogaHcsIGNoYXIgZmluZF9maXJzdF9TNTE0X2NhcmQpCi17Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgc2xvdF9ubzsKLSAgICAgICAgaW50IG51bWJlcl9TNTE0X2NhcmRzID0gMDsKLQljaGFyIFM1MTRfZm91bmRfaW5fc2xvdCA9IDA7Ci0gICAgICAgIHUxNiBQQ0lfc3Vic3lzX3ZlbmRvcjsKLQotICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7Ci0gCi0gICAgICAgc2xvdF9ubyA9IGh3LT5TNTE0X3Nsb3Rfbm87Ci0gIAotCXdoaWxlICgocGNpX2RldiA9IHBjaV9maW5kX2RldmljZShWM19WRU5ET1JfSUQsIFYzX0RFVklDRV9JRCwgcGNpX2RldikpCi0gICAgICAgIAkhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgCi0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9TVUJTWVNfVkVORE9SX1dPUkQsCi0gICAgICAgICAgICAgICAgICAgICAgICAmUENJX3N1YnN5c192ZW5kb3IpOwotICAgICAgICAgICAgICAgIAotCQlpZihQQ0lfc3Vic3lzX3ZlbmRvciAhPSBTQU5HT01BX1NVQlNZU19WRU5ET1IpCi0gICAgICAgICAgICAgICAgCWNvbnRpbnVlOwotICAgICAgICAJCi0JCWh3LT5wY2lfZGV2ID0gcGNpX2RldjsKLQkJCi0JCWlmKGZpbmRfZmlyc3RfUzUxNF9jYXJkKQotCQkJcmV0dXJuKDEpOwotCQkKLSAgICAgICAgICAgICAgICBudW1iZXJfUzUxNF9jYXJkcyArKzsKLSAgICAgICAgICAgICAgICAKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBTNTE0IGNhcmQgZm91bmQsIHNsb3QgIyVkIChkZXZmbiAweCVYKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsICgocGNpX2Rldi0+ZGV2Zm4gPj4gMykgJiBQQ0lfREVWX1NMT1RfTUFTSyksCi0JCQlwY2lfZGV2LT5kZXZmbik7Ci0JCQotCQlpZiAoaHctPmF1dG9fcGNpX2NmZyl7Ci0JCQlody0+UzUxNF9zbG90X25vID0gKChwY2lfZGV2LT5kZXZmbiA+PiAzKSAmIFBDSV9ERVZfU0xPVF9NQVNLKTsKLQkJCXNsb3Rfbm8gPSBody0+UzUxNF9zbG90X25vOwotCQkJCi0JCX1lbHNlIGlmICgoKHBjaV9kZXYtPmRldmZuID4+IDMpICYgUENJX0RFVl9TTE9UX01BU0spID09IHNsb3Rfbm8pewotICAgICAgICAgICAgICAgICAgICAgICAgUzUxNF9mb3VuZF9pbl9zbG90ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0JLyogaWYgbm8gUzUxNCBhZGFwdGVyIGhhcyBiZWVuIGZvdW5kLCB0aGVuIGV4aXQgKi8KLSAgICAgICAgaWYgKCFudW1iZXJfUzUxNF9jYXJkcykgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciwgbm8gUzUxNCBhZGFwdGVycyBmb3VuZFxuIiwgbW9kbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgLyogaWYgbW9yZSB0aGFuIG9uZSBTNTE0IGNhcmQgaGFzIGJlZW4gZm91bmQsIHRoZW4gdGhlIHVzZXIgbXVzdCBoYXZlICovICAgICAgICAvKiBkZWZpbmVkIGEgc2xvdCBudW1iZXIgc28gdGhhdCB0aGUgY29ycmVjdCBhZGFwdGVyIGlzIHVzZWQgKi8KLSAgICAgICAgZWxzZSBpZiAoKG51bWJlcl9TNTE0X2NhcmRzID4gMSkgJiYgaHctPmF1dG9fcGNpX2NmZykgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciwgUENJIFNsb3QgYXV0b2RldGVjdCBGYWlsZWQhIFxuIgotCQkJCSAiJXM6ICAgICAgICBNb3JlIHRoYW4gb25lIFM1MTQgYWRhcHRlciBmb3VuZC5cbiIKLQkJCQkgIiVzOiAgICAgICAgRGlzYWJsZSB0aGUgQXV0b2RldGVjdCBmZWF0dXJlIGFuZCBzdXBwbHlcbiIKLQkJCQkgIiVzOiAgICAgICAgdGhlIFBDSVNMT1QgbnVtYmVycyBmb3IgZWFjaCBjYXJkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsbW9kbmFtZSxtb2RuYW1lLG1vZG5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIC8qIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSBzbG90IG51bWJlciBhbmQgdGhlIFM1MTQgYWRhcHRlciBoYXMgKi8KLSAgICAgICAgLyogbm90IGJlZW4gZm91bmQgaW4gdGhhdCBzbG90LCB0aGVuIGV4aXQgKi8KLSAgICAgICAgZWxzZSBpZiAoIWh3LT5hdXRvX3BjaV9jZmcgJiYgIVM1MTRfZm91bmRfaW5fc2xvdCkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8KLQkJCSIlczogRXJyb3IsIFM1MTQgY2FyZCBub3QgZm91bmQgaW4gc3BlY2lmaWVkIHNsb3QgIyVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgc2xvdF9ubyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotCXJldHVybiAobnVtYmVyX1M1MTRfY2FyZHMpOwotfQotCi0KLQotLyoqKioqKiogTWlzY2VsbGFuZW91cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2FsaWJyYXRlIFNETEEgbWVtb3J5IGFjY2VzcyBkZWxheS4KLSAqIENvdW50IG51bWJlciBvZiBpZGxlIGxvb3BzIG1hZGUgd2l0aGluIDEgc2Vjb25kIGFuZCB0aGVuIGNhbGN1bGF0ZSB0aGUKLSAqIG51bWJlciBvZiBsb29wcyB0aGF0IHNob3VsZCBiZSBtYWRlIHRvIGFjaGl2ZSBkZXNpcmVkIGRlbGF5LgotICovCi1zdGF0aWMgaW50IGNhbGlicmF0ZV9kZWxheSAoaW50IG1rcykKLXsKLQl1bnNpZ25lZCBpbnQgZGVsYXk7Ci0JdW5zaWduZWQgbG9uZyBzdG9wOwotCi0JZm9yIChkZWxheSA9IDAsIHN0b3AgPSBTWVNURU1fVElDSyArIEhaOyBTWVNURU1fVElDSyA8IHN0b3A7ICsrZGVsYXkpOwotCXJldHVybiAoZGVsYXkvKDEwMDAwMDBML21rcykgKyAxKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZXQgb3B0aW9uJ3MgaW5kZXggaW50byB0aGUgb3B0aW9ucyBsaXN0LgotICoJUmV0dXJuIG9wdGlvbidzIGluZGV4ICgxIC4uIE4pIG9yIHplcm8gaWYgb3B0aW9uIGlzIGludmFsaWQuCi0gKi8KLXN0YXRpYyBpbnQgZ2V0X29wdGlvbl9pbmRleCAodW5zaWduZWQqIG9wdGxpc3QsIHVuc2lnbmVkIG9wdHZhbCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDE7IGkgPD0gb3B0bGlzdFswXTsgKytpKQotCQlpZiAoIG9wdGxpc3RbaV0gPT0gb3B0dmFsKQotCQkJcmV0dXJuIGk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2hlY2sgbWVtb3J5IHJlZ2lvbiB0byBzZWUgaWYgaXQncyBhdmFpbGFibGUuIAotICogUmV0dXJuOgkwCW9rLgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hlY2tfbWVtcmVnaW9uICh2b2lkKiBwdHIsIHVuc2lnbmVkIGxlbikKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKiBwID0gcHRyOwotCi0gICAgICAgIGZvciAoOyBsZW4gJiYgKHJlYWRiIChwKSA9PSAweEZGKTsgLS1sZW4sICsrcCkgewotICAgICAgICAgICAgICAgIHdyaXRlYiAoMCwgcCk7ICAgICAgICAgIC8qIGF0dGVtcHQgdG8gd3JpdGUgMCAqLwotICAgICAgICAgICAgICAgIGlmIChyZWFkYihwKSAhPSAweEZGKSB7IC8qIHN0aWxsIGhhcyB0byByZWFkIDB4RkYgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlYiAoMHhGRiwgcCk7LyogcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIG5vdCBnb29kICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRlc3QgbWVtb3J5IHJlZ2lvbi4KLSAqIFJldHVybjoJc2l6ZSBvZiB0aGUgcmVnaW9uIHRoYXQgcGFzc2VkIHRoZSB0ZXN0LgotICogTm90ZToJUmVnaW9uIHNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiAyICEKLSAqLwotc3RhdGljIHVuc2lnbmVkIHRlc3RfbWVtcmVnaW9uICh2b2lkKiBwdHIsIHVuc2lnbmVkIGxlbikKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCogd19wdHI7Ci0JdW5zaWduZWQgbGVuX3cgPSBsZW4gPj4gMTsJLyogcmVnaW9uIGxlbiBpbiB3b3JkcyAqLwotCXVuc2lnbmVkIGk7Ci0KLSAgICAgICAgZm9yIChpID0gMCwgd19wdHIgPSBwdHI7IGkgPCBsZW5fdzsgKytpLCArK3dfcHRyKQotICAgICAgICAgICAgICAgIHdyaXRldyAoMHhBQTU1LCB3X3B0cik7Ci0gICAgICAgIAotCWZvciAoaSA9IDAsIHdfcHRyID0gcHRyOyBpIDwgbGVuX3c7ICsraSwgKyt3X3B0cikKLSAgICAgICAgICAgICAgICBpZiAocmVhZHcgKHdfcHRyKSAhPSAweEFBNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbl93ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICBmb3IgKGkgPSAwLCB3X3B0ciA9IHB0cjsgaSA8IGxlbl93OyArK2ksICsrd19wdHIpCi0gICAgICAgICAgICAgICAgd3JpdGV3ICgweDU1QUEsIHdfcHRyKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaSA9IDAsIHdfcHRyID0gcHRyOyBpIDwgbGVuX3c7ICsraSwgKyt3X3B0cikKLSAgICAgICAgICAgICAgICBpZiAocmVhZHcod19wdHIpICE9IDB4NTVBQSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGVuX3cgPSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChpID0gMCwgd19wdHIgPSBwdHI7IGkgPCBsZW5fdzsgKytpLCArK3dfcHRyKQotCQl3cml0ZXcgKDAsIHdfcHRyKTsKLQotICAgICAgICByZXR1cm4gbGVuX3cgPDwgMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDYWxjdWxhdGUgMTYtYml0IENSQyB1c2luZyBDQ0lUVCBwb2x5bm9taWFsLgotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2hlY2tzdW0gKHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgbGVuKQotewotCXVuc2lnbmVkIHNob3J0IGNyYyA9IDA7Ci0JdW5zaWduZWQgbWFzaywgZmxhZzsKLQotCWZvciAoOyBsZW47IC0tbGVuLCArK2J1ZikgewotCQlmb3IgKG1hc2sgPSAweDgwOyBtYXNrOyBtYXNrID4+PSAxKSB7Ci0JCQlmbGFnID0gKGNyYyAmIDB4ODAwMCk7Ci0JCQljcmMgPDw9IDE7Ci0JCQljcmMgfD0gKCgqYnVmICYgbWFzaykgPyAxIDogMCk7Ci0JCQlpZiAoZmxhZykgY3JjIF49IDB4MTAyMTsKLQkJfQotCX0KLQlyZXR1cm4gY3JjOwotfQotCi1zdGF0aWMgaW50IGluaXRfcGNpX3Nsb3Qoc2RsYWh3X3QgKmh3KQotewotCi0JdTMyIGludF9zdGF0dXM7Ci0JaW50IHZvbGF0aWxlIGZvdW5kPTA7Ci0JaW50IGk9MDsKLQotCS8qIENoZWNrIGlmIHRoaXMgaXMgYSB2ZXJ5IGZpcnN0IGxvYWQgZm9yIGEgc3BlY2lmaWMKLSAgICAgICAgICogcGNpIGNhcmQuIElmIGl0IGlzLCBjbGVhciB0aGUgaW50ZXJycHV0IGJpdHMsIGFuZAotICAgICAgICAgKiBzZXQgdGhlIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoaXMgY2FyZCB3YXMgaW5pdGlhbGl6ZWQuCi0JICovCi0JCi0JZm9yIChpPTA7IChpPE1BWF9TNTE0X0NBUkRTKSAmJiAhZm91bmQ7IGkrKyl7Ci0JCWlmIChwY2lfc2xvdF9hcltpXSA9PSBody0+UzUxNF9zbG90X25vKXsKLQkJCWZvdW5kPTE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocGNpX3Nsb3RfYXJbaV0gPT0gMHhGRil7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpewotCQlyZWFkX1M1MTRfaW50X3N0YXQoaHcsJmludF9zdGF0dXMpOwotCQlTNTE0X2ludGFjayhodyxpbnRfc3RhdHVzKTsKLQkJaWYgKGkgPT0gTUFYX1M1MTRfQ0FSRFMpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIEVycm9yICEhIVxuIixtb2RuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBOdW1iZXIgb2YgU2FuZ29tYSBQQ0kgY2FyZHMgZXhjZWVkZWQgbWF4aW11bSBsaW1pdC5cbiIsCi0JCQkJCW1vZG5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXNcbiIpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcGNpX3Nsb3RfYXJbaV0gPSBody0+UzUxNF9zbG90X25vOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2lfcHJvYmUoc2RsYWh3X3QgKmh3KQotewotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgc2xvdF9ubzsKLSAgICAgICAgaW50IG51bWJlcl9TNTE0X2NhcmRzID0gMDsKLSAgICAgICAgdTE2IFBDSV9zdWJzeXNfdmVuZG9yOwotCXUxNiBQQ0lfY2FyZF90eXBlOwotCi0gICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gTlVMTDsKLSAKLSAgICAgICBzbG90X25vID0gMDsKLSAgCi0Jd2hpbGUgKChwY2lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFYzX1ZFTkRPUl9JRCwgVjNfREVWSUNFX0lELCBwY2lfZGV2KSkKLSAgICAgICAgCSE9IE5VTEwpIHsKLQkJCi0gICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpX2RldiwgUENJX1NVQlNZU19WRU5ET1JfV09SRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZQQ0lfc3Vic3lzX3ZlbmRvcik7Ci0JCQotICAgICAgICAgICAgICAgIGlmKFBDSV9zdWJzeXNfdmVuZG9yICE9IFNBTkdPTUFfU1VCU1lTX1ZFTkRPUikKLSAgICAgICAgICAgICAgICAJY29udGludWU7Ci0KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpX2RldiwgUENJX0NBUkRfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZQQ0lfY2FyZF90eXBlKTsKLQkKLQkJYnVzID0gcGNpX2Rldi0+YnVzOwotCQkKLQkJLyogQSBkdWFsIGNwdSBjYXJkIGNhbiBzdXBwb3J0IHVwIHRvIDQgcGh5c2ljYWwgY29ubmVjdGlvbnMsCi0JCSAqIHdoZXJlIGEgc2luZ2xlIGNwdSBjYXJkIGNhbiBzdXBwb3J0IHVwIHRvIDIgcGh5c2ljYWwKLQkJICogY29ubmVjdGlvbnMuICBUaGUgRlQxIGNhcmQgY2FuIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSAKLQkJICogY29ubmVjdGlvbiwgaG93ZXZlciB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIFNpbmdsZQotCQkgKiBDUFUgY2FyZCBhbmQgYW4gRlQxIGNhcmQuICovCi0JCWlmIChQQ0lfY2FyZF90eXBlID09IFM1MTRfRFVBTF9DUFUpewotICAgICAgICAgICAgICAgIAludW1iZXJfUzUxNF9jYXJkcyArPSA0OwotCQkJIHByaW50ayhLRVJOX0lORk8KLQkJCQkid2FucGlwZTogUzUxNC1QQ0kgY2FyZCBmb3VuZCwgY3B1KHMpIDIsIGJ1cyAjJWQsIHNsb3QgIyVkLCBpcnEgIyVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgCWJ1cy0+bnVtYmVyLCgocGNpX2Rldi0+ZGV2Zm4gPj4gMykgJiBQQ0lfREVWX1NMT1RfTUFTSyksCi0JCQkJcGNpX2Rldi0+aXJxKTsKLQkJfWVsc2V7Ci0JCQludW1iZXJfUzUxNF9jYXJkcyArPSAyOwotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJ3YW5waXBlOiBTNTE0LVBDSSBjYXJkIGZvdW5kLCBjcHUocykgMSwgYnVzICMlZCwgc2xvdCAjJWQsIGlycSAjJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAJYnVzLT5udW1iZXIsKChwY2lfZGV2LT5kZXZmbiA+PiAzKSAmIFBDSV9ERVZfU0xPVF9NQVNLKSwKLQkJCQlwY2lfZGV2LT5pcnEpOwotCQl9Ci0gICAgICAgIH0KLQotCXJldHVybiBudW1iZXJfUzUxNF9jYXJkczsKLQotfQotCi0KLQotRVhQT1JUX1NZTUJPTCh3YW5waXBlX2h3X3Byb2JlKTsKLQotdW5zaWduZWQgd2FucGlwZV9od19wcm9iZSh2b2lkKQotewotCXNkbGFod190IGh3OwotCXVuc2lnbmVkKiBvcHQgPSBzNTA4X3BvcnRfb3B0aW9uczsgCi0JdW5zaWduZWQgY2FyZG5vPTA7Ci0JaW50IGk7Ci0JCi0JbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7Ci0JCi0JZm9yIChpID0gMTsgaSA8PSBvcHRbMF07IGkrKykgewotCQlpZiAoZGV0ZWN0X3M1MDgob3B0W2ldKSl7Ci0JCQkvKiBTNTA4IGNhcmQgY2FuIHN1cHBvcnQgdXAgdG8gdHdvIHBoeXNpY2FsIGxpbmtzICovCi0JCQljYXJkbm8rPTI7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJ3YW5waXBlOiBTNTA4LUlTQSBjYXJkIGZvdW5kLCBwb3J0IDB4JXhcbiIsb3B0W2ldKTsKLQkJfQotCX0KLQotICAgICAgI2lmZGVmIENPTkZJR19QQ0kKLQlody5TNTE0X3Nsb3Rfbm8gPSAwOwotCWNhcmRubyArPSBwY2lfcHJvYmUoJmh3KTsKLSAgICAgICNlbHNlCi0JcHJpbnRrKEtFUk5fSU5GTyAid2FucGlwZTogV2FybmluZywgS2VybmVsIG5vdCBjb21waWxlZCBmb3IgUENJIHN1cHBvcnQhXG4iKTsKLQlwcmludGsoS0VSTl9JTkZPICJ3YW5waXBlOiBQQ0kgSGFyZHdhcmUgUHJvYmUgRmFpbGVkIVxuIik7Ci0gICAgICAjZW5kaWYKLQotCXJldHVybiBjYXJkbm87Ci19Ci0KLS8qKioqKiogRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFtYWluLmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYW1haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E4YjIyYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYW1haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEzNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYW1haW4uYwlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4gIE1haW4gbW9kdWxlLgotKgotKiBBdXRob3I6CU5lbmFkIENvcmJpYwk8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoJCUdpZGVvbiBIYWNrCQotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBEZWMgMjIsIDIwMDAgIE5lbmFkIENvcmJpYwlVcGRhdGVkIGZvciAyLjQuWCBrZXJuZWxzLgotKiAJCQkJUmVtb3ZlZCB0aGUgcG9sbGluZyByb3V0aW5lLgotKiBOb3YgMTMsIDIwMDAgIE5lbmFkIENvcmJpYwlBZGRlZCBodyBwcm9iaW5nIG9uIG1vZHVsZSBsb2FkIGFuZCBkeW5hbWljCi0qIAkJCQlkZXZpY2UgYWxsb2NhdGlvbi4gCi0qIE5vdiA3LCAgMjAwMCAgTmVuYWQgQ29yYmljCUZpeGVkIHRoZSBNdWx0aS1Qb3J0IFBQUCBmb3Iga2VybmVscwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjIuMTYgYW5kIGFib3ZlLgotKiBBdWcgMiwgIDIwMDAgIE5lbmFkIENvcmJpYwlCbG9jayB0aGUgTXVsdGktUG9ydCBQUFAgZnJvbSBydW5uaW5nIG9uCi0qICAJCQkgICAgICAgIGtlcm5lbHMgMi4yLjE2IG9yIGdyZWF0ZXIuICBUaGUgU3luY1BQUCAKLSogIAkJCSAgICAgICAgaGFzIGNoYW5nZWQuCi0qIEp1bCAyNSwgMjAwMCAgTmVuYWQgQ29yYmljCVVwZGF0ZWQgdGhlIFBpZ2dpYmFjayBzdXBwb3J0IGZvciBNdWx0UFBQUC4KLSogSnVsIDEzLCAyMDAwCU5lbmFkIENvcmJpYwlBZGRlZCBNdWx0aS1QUFAgc3VwcG9ydC4KLSogRmViIDAyLCAyMDAwICBOZW5hZCBDb3JiaWMgICAgRml4ZWQgdXAgcGlnZ3liYWNrIHByb2JpbmcgYW5kIHNlbGVjdGlvbi4KLSogU2VwIDIzLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgc3VwcG9ydCBmb3IgU01QCi0qIFNlcCAxMywgMTk5OSAgTmVuYWQgQ29yYmljCUVhY2ggcG9ydCBpcyB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgZGV2aWNlLgotKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKgkJCQlVcGRhdGVzIGZvciBMaW51eCAyLjIuWCBrZXJuZWxzLgotKiBTZXAgMTcsIDE5OTgJSmFzcHJlZXQgU2luZ2gJVXBkYXRlZCBmb3IgMi4xLjEyMSsga2VybmVsCi0qIE5vdiAyOCwgMTk5NwlKYXNwcmVldCBTaW5naAlDaGFuZ2VkIERSVl9SRUxFQVNFIHRvIDEKLSogTm92IDEwLCAxOTk3CUphc3ByZWV0IFNpbmdoCUNoYW5nZWQgc3RpKCkgdG8gcmVzdG9yZV9mbGFncygpOwotKiBOb3YgMDYsIDE5OTcgCUphc3ByZWV0IFNpbmdoCUNoYW5nZWQgRFJWX1ZFUlNJT04gdG8gNCBhbmQgRFJWX1JFTEVBU0UgdG8gMAotKiBPY3QgMjAsIDE5OTcgCUphc3ByZWV0IFNpbmdoCU1vZGlmaWVkIHNkbGFfaXNyIHJvdXRpbmUgc28gdGhhdCBjYXJkLT5pbl9pc3IKLSoJCQkJYXNzaWdubWVudHMgYXJlIHRha2VuIG91dCBhbmQgcGxhY2VkIGluIHRoZQotKgkJCQlzZGxhX3BwcC5jLCBzZGxhX2ZyLmMgYW5kIHNkbGFfeDI1LmMgaXNyCi0qCQkJCXJvdXRpbmVzLiBUb29rIG91dCAnd2FuZGV2LT50eF9pbnRfZW5hYmxlZCcgYW5kCi0qCQkJCXJlcGxhY2VkIGl0IHdpdGggJ3dhbmRldi0+ZW5hYmxlX3R4X2ludCcuIAotKiBNYXkgMjksIDE5OTcJSmFzcHJlZXQgU2luZ2gJRmxvdyBDb250cm9sIFByb2JsZW0KLSoJCQkJYWRkZWQgIndhbmRldi0+dHhfaW50X2VuYWJsZWQ9MSIgbGluZSBpbiB0aGUKLSoJCQkJaW5pdCBtb2R1bGUuIFRoaXMgbGluZSBpbml0aWFsaXplcyB0aGUgZmxhZyBmb3IgCi0qCQkJCXByZXZlbnRpbmcgSW50ZXJydXB0IGRpc2FibGVkIHdpdGggZGV2aWNlIHNldCB0bwotKgkJCQlidXN5Ci0qIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKLSoJCQkJIG8gYWRkZWQgVURQIG1hbmFnZW1lbnQgc3R1ZmYKLSogSmFuIDAyLCAxOTk3CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogT1MgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JLyoga21hbGxvYygpLCBrZnJlZSgpICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIHN1cHBvcnQgZm9yIGxvYWRhYmxlIG1vZHVsZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24oKSwgcmVsZWFzZV9yZWdpb24oKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogcGh5c190b192aXJ0KCkgKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZV9jb21tb24uaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGtlcm5lbCA8LT4gdXNlciBjb3B5ICovCi0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLSAKLSNkZWZpbmUgS01FTV9TQUZFVFlaT05FIDgKLQotCi0jaWZuZGVmIENPTkZJR19XQU5QSVBFX0ZSCi0gICNkZWZpbmUgd3BmX2luaXQoYSxiKSAoLUVQUk9UT05PU1VQUE9SVCkgCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfV0FOUElQRV9DSERMQwotICNkZWZpbmUgd3BjX2luaXQoYSxiKSAoLUVQUk9UT05PU1VQUE9SVCkgCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfV0FOUElQRV9YMjUKLSAjZGVmaW5lIHdweF9pbml0KGEsYikgKC1FUFJPVE9OT1NVUFBPUlQpIAotI2VuZGlmCi0gCi0jaWZuZGVmIENPTkZJR19XQU5QSVBFX1BQUAotICNkZWZpbmUgd3BwX2luaXQoYSxiKSAoLUVQUk9UT05PU1VQUE9SVCkgCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfV0FOUElQRV9NVUxUUFBQIAotICNkZWZpbmUgd3NwcHBfaW5pdChhLGIpICgtRVBST1RPTk9TVVBQT1JUKSAKLSNlbmRpZgotIAotIAotLyoqKioqKioqKioqRk9SIERFQlVHR0lORyBQVVJQT1NFUyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotc3RhdGljIHZvaWQgKiBkYmdfa21hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IHByaW8sIGludCBsaW5lKSB7Ci0JaW50IGkgPSAwOwotCXZvaWQgKiB2ID0ga21hbGxvYyhzaXplK3NpemVvZih1bnNpZ25lZCBpbnQpKzIqS01FTV9TQUZFVFlaT05FKjgscHJpbyk7Ci0JY2hhciAqIGMxID0gdjsJCi0JYzEgKz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0JKigodW5zaWduZWQgaW50ICopdikgPSBzaXplOwotCi0JZm9yIChpID0gMDsgaSA8IEtNRU1fU0FGRVRZWk9ORTsgaSsrKSB7Ci0JCWMxWzBdID0gJ0QnOyBjMVsxXSA9ICdFJzsgYzFbMl0gPSAnQSc7IGMxWzNdID0gJ0QnOwotCQljMVs0XSA9ICdCJzsgYzFbNV0gPSAnRSc7IGMxWzZdID0gJ0UnOyBjMVs3XSA9ICdGJzsKLQkJYzEgKz0gODsKLQl9Ci0JYzEgKz0gc2l6ZTsKLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJYzFbMF0gPSAnTSc7IGMxWzFdID0gJ1UnOyBjMVsyXSA9ICdOJzsgYzFbM10gPSAnRyc7Ci0JCWMxWzRdID0gJ1cnOyBjMVs1XSA9ICdBJzsgYzFbNl0gPSAnTCc7IGMxWzddID0gJ0wnOwotCQljMSArPSA4OwotCX0KLQl2ID0gKChjaGFyICopdikgKyBzaXplb2YodW5zaWduZWQgaW50KSArIEtNRU1fU0FGRVRZWk9ORSo4OwotCXByaW50ayhLRVJOX0lORk8gImxpbmUgJWQgIGttYWxsb2MoJWQsJWQpID0gJXBcbiIsbGluZSxzaXplLHByaW8sdik7Ci0JcmV0dXJuIHY7Ci19Ci1zdGF0aWMgdm9pZCBkYmdfa2ZyZWUodm9pZCAqIHYsIGludCBsaW5lKSB7Ci0JdW5zaWduZWQgaW50ICogc3AgPSAodW5zaWduZWQgaW50ICopKCgoY2hhciAqKXYpIC0gKHNpemVvZih1bnNpZ25lZCBpbnQpICsgS01FTV9TQUZFVFlaT05FKjgpKTsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9ICpzcDsKLQljaGFyICogYzEgPSAoKGNoYXIgKil2KSAtIEtNRU1fU0FGRVRZWk9ORSo4OwotCWludCBpID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJaWYgKCAgIGMxWzBdICE9ICdEJyB8fCBjMVsxXSAhPSAnRScgfHwgYzFbMl0gIT0gJ0EnIHx8IGMxWzNdICE9ICdEJwotCQkgICAgfHwgYzFbNF0gIT0gJ0InIHx8IGMxWzVdICE9ICdFJyB8fCBjMVs2XSAhPSAnRScgfHwgYzFbN10gIT0gJ0YnKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJrbWFsbG9jZWQgYmxvY2sgYXQgJXAgaGFzIGJlZW4gY29ycnVwdGVkICh1bmRlcnJ1bikhXG4iLHYpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiICU0eDogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeFxuIiwgaSo4LAotCQkJICAgICAgICAgICAgICAgIGMxWzBdLGMxWzFdLGMxWzJdLGMxWzNdLGMxWzRdLGMxWzVdLGMxWzZdLGMxWzddICk7Ci0JCX0KLQkJYzEgKz0gODsKLQl9Ci0JYzEgKz0gc2l6ZTsKLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJaWYgKCAgIGMxWzBdICE9ICdNJyB8fCBjMVsxXSAhPSAnVScgfHwgYzFbMl0gIT0gJ04nIHx8IGMxWzNdICE9ICdHJwotCQkgICAgfHwgYzFbNF0gIT0gJ1cnIHx8IGMxWzVdICE9ICdBJyB8fCBjMVs2XSAhPSAnTCcgfHwgYzFbN10gIT0gJ0wnCi0JCSAgICkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAia21hbGxvY2VkIGJsb2NrIGF0ICVwIGhhcyBiZWVuIGNvcnJ1cHRlZCAob3ZlcnJ1bik6XG4iLHYpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiICU0eDogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeFxuIiwgaSo4LAotCQkJICAgICAgICAgICAgICAgIGMxWzBdLGMxWzFdLGMxWzJdLGMxWzNdLGMxWzRdLGMxWzVdLGMxWzZdLGMxWzddICk7Ci0JCX0KLQkJYzEgKz0gODsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAibGluZSAlZCAga2ZyZWUoJXApXG4iLGxpbmUsdik7Ci0JdiA9ICgoY2hhciAqKXYpIC0gKHNpemVvZih1bnNpZ25lZCBpbnQpICsgS01FTV9TQUZFVFlaT05FKjgpOwotCWtmcmVlKHYpOwotfQotCi0jZGVmaW5lIGttYWxsb2MoeCx5KSBkYmdfa21hbGxvYyh4LHksX19MSU5FX18pCi0jZGVmaW5lIGtmcmVlKHgpIGRiZ19rZnJlZSh4LF9fTElORV9fKQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLQotLyoqKioqKiBEZWZpbmVzICYgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZglfREVCVUdfCi0jZGVmaW5lCVNUQVRJQwotI2Vsc2UKLSNkZWZpbmUJU1RBVElDCQlzdGF0aWMKLSNlbmRpZgotCi0jZGVmaW5lCURSVl9WRVJTSU9OCTUJCS8qIHZlcnNpb24gbnVtYmVyICovCi0jZGVmaW5lCURSVl9SRUxFQVNFCTAJCS8qIHJlbGVhc2UgKG1pbm9yIHZlcnNpb24pIG51bWJlciAqLwotI2RlZmluZQlNQVhfQ0FSRFMJMTYJCS8qIG1heCBudW1iZXIgb2YgYWRhcHRlcnMgKi8KLQotI2lmbmRlZglDT05GSUdfV0FOUElQRV9DQVJEUwkJLyogY29uZmlndXJhYmxlIG9wdGlvbiAqLwotI2RlZmluZQlDT05GSUdfV0FOUElQRV9DQVJEUyAxCi0jZW5kaWYKLQotI2RlZmluZQlDTURfT0sJCTAJCS8qIG5vcm1hbCBmaXJtd2FyZSByZXR1cm4gY29kZSAqLwotI2RlZmluZQlDTURfVElNRU9VVAkweEZGCQkvKiBmaXJtd2FyZSBjb21tYW5kIHRpbWVkIG91dCAqLwotI2RlZmluZQlNQVhfQ01EX1JFVFJZCTEwCQkvKiBtYXggbnVtYmVyIG9mIGZpcm13YXJlIHJldHJpZXMgKi8KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1leHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotIAotLyogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwotc3RhdGljIGludCBzZXR1cChzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCB3YW5kZXZfY29uZl90KiBjb25mKTsKLXN0YXRpYyBpbnQgc2h1dGRvd24oc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldik7Ci1zdGF0aWMgaW50IGlvY3RsKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCi0vKiBJT0NUTCBoYW5kbGVycyAqLwotc3RhdGljIGludCBpb2N0bF9kdW1wCShzZGxhX3QqIGNhcmQsIHNkbGFfZHVtcF90KiB1X2R1bXApOwotc3RhdGljIGludCBpb2N0bF9leGVjCShzZGxhX3QqIGNhcmQsIHNkbGFfZXhlY190KiB1X2V4ZWMsIGludCk7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi1TVEFUSUMgaXJxcmV0dXJuX3Qgc2RsYV9pc3IJKGludCBpcnEsIHZvaWQqIGRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotc3RhdGljIHZvaWQgcmVsZWFzZV9odyAgKHNkbGFfdCAqY2FyZCk7Ci0KLXN0YXRpYyBpbnQgY2hlY2tfczUwOF9jb25mbGljdHMgKHNkbGFfdCogY2FyZCx3YW5kZXZfY29uZl90KiBjb25mLCBpbnQqKTsKLXN0YXRpYyBpbnQgY2hlY2tfczUxNF9jb25mbGljdHMgKHNkbGFfdCogY2FyZCx3YW5kZXZfY29uZl90KiBjb25mLCBpbnQqKTsKLQotCi0vKioqKioqIEdsb2JhbCBEYXRhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE5vdGU6IEFsbCBkYXRhIG11c3QgYmUgZXhwbGljaXRseSBpbml0aWFsaXplZCEhIQotICovCi0KLS8qIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIGNoYXIgZHJ2bmFtZVtdCT0gIndhbnBpcGUiOwotc3RhdGljIGNoYXIgZnVsbG5hbWVbXQk9ICJXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIERyaXZlciI7Ci1zdGF0aWMgY2hhciBjb3B5cmlnaHRbXQk9ICIoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4iOwotc3RhdGljIGludCBuY2FyZHM7IAotc3RhdGljIHNkbGFfdCogY2FyZF9hcnJheTsJCS8qIGFkYXB0ZXIgZGF0YSBzcGFjZSAqLwotCi0vKiBXYW5waXBlJ3Mgb3duIHdvcmtxdWV1ZSwgdXNlZCBmb3IgYWxsIEFQSSdzLgotICogQWxsIHByb3RvY29sIHNwZWNpZmljIHRhc2tzIHdpbGwgYmUgaW5zZXJ0ZWQKLSAqIGludG8gdGhlICJ3YW5waXBlX3dxIiB3b3JrcXVldWUuIAotCi0gKiBUaGUga2VybmVsIHdvcmtxdWV1ZSBtZWNoYW5pc20gd2lsbCBleGVjdXRlCi0gKiBhbGwgcGVuZGluZyB0YXNrcyBpbiB0aGUgIndhbnBpcGVfd3EiIHdvcmtxdWV1ZS4KLSAqLwotCi1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd2FucGlwZV93cTsKLURFQ0xBUkVfV09SSyh3YW5waXBlX3dvcmssIE5VTEwsIE5VTEwpOwotCi1zdGF0aWMgaW50IHdhbnBpcGVfYmhfY3JpdGljYWw7Ci0KLS8qKioqKioqIEtlcm5lbCBMb2FkYWJsZSBNb2R1bGUgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE1vZHVsZSAnaW5zZXJ0JyBlbnRyeSBwb2ludC4KLSAqIG8gcHJpbnQgYW5ub3VuY2VtZW50Ci0gKiBvIGFsbG9jYXRlIGFkYXB0ZXIgZGF0YSBzcGFjZQotICogbyBpbml0aWFsaXplIHN0YXRpYyBkYXRhCi0gKiBvIHJlZ2lzdGVyIGFsbCBjYXJkcyB3aXRoIFdBTiByb3V0ZXIKLSAqIG8gY2FsaWJyYXRlIFNETEEgc2hhcmVkIG1lbW9yeSBhY2Nlc3MgZGVsYXkuCi0gKgotICogUmV0dXJuOgkwCU9rCi0gKgkJPCAwCWVycm9yLgotICogQ29udGV4dDoJcHJvY2VzcwotICovCi0gCi1zdGF0aWMgaW50IF9faW5pdCB3YW5waXBlX2luaXQodm9pZCkKLXsKLQlpbnQgY250LCBlcnIgPSAwOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgdiV1LiV1ICVzXG4iLAotCQlmdWxsbmFtZSwgRFJWX1ZFUlNJT04sIERSVl9SRUxFQVNFLCBjb3B5cmlnaHQpOwotCi0Jd2FucGlwZV93cSA9IGNyZWF0ZV93b3JrcXVldWUoIndhbnBpcGVfd3EiKTsKLQlpZiAoIXdhbnBpcGVfd3EpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogUHJvYmUgZm9yIHdhbnBpcGUgY2FyZHMgYW5kIHJldHVybiB0aGUgbnVtYmVyIGZvdW5kICovCi0JcHJpbnRrKEtFUk5fSU5GTyAid2FucGlwZTogUHJvYmluZyBmb3IgV0FOUElQRSBoYXJkd2FyZS5cbiIpOwotCW5jYXJkcyA9IHdhbnBpcGVfaHdfcHJvYmUoKTsKLQlpZiAobmNhcmRzKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAid2FucGlwZTogQWxsb2NhdGluZyBtYXhpbXVtICVpIGRldmljZXM6IHdhbnBpcGUlaSAtIHdhbnBpcGUlaS5cbiIsbmNhcmRzLDEsbmNhcmRzKTsKLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAid2FucGlwZTogTm8gUzUxNC9TNTA4IGNhcmRzIGZvdW5kLCB1bmxvYWRpbmcgbW9kdWxlcyFcbiIpOwotCQlkZXN0cm95X3dvcmtxdWV1ZSh3YW5waXBlX3dxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCQotCS8qIFZlcmlmeSBudW1iZXIgb2YgY2FyZHMgYW5kIGFsbG9jYXRlIGFkYXB0ZXIgZGF0YSBzcGFjZSAqLwotCWNhcmRfYXJyYXkgPSBrbWFsbG9jKHNpemVvZihzZGxhX3QpICogbmNhcmRzLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2FyZF9hcnJheSA9PSBOVUxMKSB7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKHdhbnBpcGVfd3EpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoY2FyZF9hcnJheSwgMCwgc2l6ZW9mKHNkbGFfdCkgKiBuY2FyZHMpOwotCi0JLyogUmVnaXN0ZXIgYWRhcHRlcnMgd2l0aCBXQU4gcm91dGVyICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBuY2FyZHM7ICsrIGNudCkgewotCQlzZGxhX3QqIGNhcmQgPSAmY2FyZF9hcnJheVtjbnRdOwotCQlzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKLQotCQljYXJkLT5uZXh0ID0gTlVMTDsKLQkJc3ByaW50ZihjYXJkLT5kZXZuYW1lLCAiJXMlZCIsIGRydm5hbWUsIGNudCArIDEpOwotCQl3YW5kZXYtPm1hZ2ljICAgID0gUk9VVEVSX01BR0lDOwotCQl3YW5kZXYtPm5hbWUgICAgID0gY2FyZC0+ZGV2bmFtZTsKLQkJd2FuZGV2LT5wcml2YXRlICA9IGNhcmQ7Ci0JCXdhbmRldi0+ZW5hYmxlX3R4X2ludCA9IDA7Ci0JCXdhbmRldi0+c2V0dXAgICAgPSAmc2V0dXA7Ci0JCXdhbmRldi0+c2h1dGRvd24gPSAmc2h1dGRvd247Ci0JCXdhbmRldi0+aW9jdGwgICAgPSAmaW9jdGw7Ci0JCWVyciA9IHJlZ2lzdGVyX3dhbl9kZXZpY2Uod2FuZGV2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogJXMgcmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoIGVycm9yICVkIVxuIiwKLQkJCQlkcnZuYW1lLCBjYXJkLT5kZXZuYW1lLCBlcnIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGNudCl7Ci0JCW5jYXJkcyA9IGNudDsJLyogYWRqdXN0IGFjdHVhbCBudW1iZXIgb2YgY2FyZHMgKi8KLQl9ZWxzZSB7Ci0JCWtmcmVlKGNhcmRfYXJyYXkpOwotCQlkZXN0cm95X3dvcmtxdWV1ZSh3YW5waXBlX3dxKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSU4gSW5pdCBNb2R1bGU6IE5PIENhcmRzIHJlZ2lzdGVyZWRcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTW9kdWxlICdyZW1vdmUnIGVudHJ5IHBvaW50LgotICogbyB1bnJlZ2lzdGVyIGFsbCBhZGFwdGVycyBmcm9tIHRoZSBXQU4gcm91dGVyCi0gKiBvIHJlbGVhc2UgYWxsIHJlbWFpbmluZyBzeXN0ZW0gcmVzb3VyY2VzCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCB3YW5waXBlX2NsZWFudXAodm9pZCkKLXsKLQlpbnQgaTsKLQotCWlmICghbmNhcmRzKQotCQlyZXR1cm47Ci0JCQotCWZvciAoaSA9IDA7IGkgPCBuY2FyZHM7ICsraSkgewotCQlzZGxhX3QqIGNhcmQgPSAmY2FyZF9hcnJheVtpXTsKLQkJdW5yZWdpc3Rlcl93YW5fZGV2aWNlKGNhcmQtPmRldm5hbWUpOwotCX0KLQlkZXN0cm95X3dvcmtxdWV1ZSh3YW5waXBlX3dxKTsKLQlrZnJlZShjYXJkX2FycmF5KTsKLQotCXByaW50ayhLRVJOX0lORk8gIlxud2FucGlwZTogV0FOUElQRSBNb2R1bGVzIFVubG9hZGVkLlxuIik7Ci19Ci0KLW1vZHVsZV9pbml0KHdhbnBpcGVfaW5pdCk7Ci1tb2R1bGVfZXhpdCh3YW5waXBlX2NsZWFudXApOwotCi0vKioqKioqKiBXQU4gRGV2aWNlIERyaXZlciBFbnRyeSBQb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXR1cC9jb25maWd1cmUgV0FOIGxpbmsgZHJpdmVyLgotICogbyBjaGVjayBhZGFwdGVyIHN0YXRlCi0gKiBvIG1ha2Ugc3VyZSBmaXJtd2FyZSBpcyBwcmVzZW50IGluIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIEkvTyBwb3J0IGFuZCBJUlEgYXJlIHNwZWNpZmllZAotICogbyBtYWtlIHN1cmUgSS9PIHJlZ2lvbiBpcyBhdmFpbGFibGUKLSAqIG8gYWxsb2NhdGUgaW50ZXJydXB0IHZlY3RvcgotICogbyBzZXR1cCBTRExBIGhhcmR3YXJlCi0gKiBvIGNhbGwgYXBwcm9wcmlhdGUgcm91dGluZSB0byBwZXJmb3JtIHByb3RvY29sLXNwZWNpZmljIGluaXRpYWxpemF0aW9uCi0gKiBvIG1hcmsgSS9PIHJlZ2lvbiBhcyB1c2VkCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGl2ZSBjYXJkLCB0aGVuIHNjaGVkdWxlIGJhY2tncm91bmQgdGFzawotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gcm91dGVyIGhhbmRsZXMgUk9VVEVSX1NFVFVQIElPQ1RMLiBUaGUKLSAqIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGlzIGluIGtlcm5lbCBtZW1vcnkgKGluY2x1ZGluZyBleHRlbmRlZCBkYXRhLCBpZgotICogYW55KS4KLSAqLwotIAotc3RhdGljIGludCBzZXR1cChzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCB3YW5kZXZfY29uZl90KiBjb25mKQotewotCXNkbGFfdCogY2FyZDsKLQlpbnQgZXJyID0gMDsKLQlpbnQgaXJxPTA7Ci0KLQkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSB8fCAoY29uZiA9PSBOVUxMKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gCi0JCSAgICAgICIlczogRmFpbGVkIFNkbGFtYWluIFNldHVwIHdhbmRldiAldSwgY2FyZCAldSwgY29uZiAldSAhXG4iLAotCQkgICAgICB3YW5kZXYtPm5hbWUsCi0JCSAgICAgICh1bnNpZ25lZCBpbnQpd2FuZGV2LCh1bnNpZ25lZCBpbnQpd2FuZGV2LT5wcml2YXRlLAotCQkgICAgICAodW5zaWduZWQgaW50KWNvbmYpOyAKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0YXJ0aW5nIFdBTiBTZXR1cFxuIiwgd2FuZGV2LT5uYW1lKTsKLQotCWNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0JaWYgKHdhbmRldi0+c3RhdGUgIT0gV0FOX1VOQ09ORklHVVJFRCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgc2RsYW1haW4gc2V0dXAsIGJ1c3khXG4iLAotCQkJd2FuZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FQlVTWTsJCS8qIGFscmVhZHkgY29uZmlndXJlZCAqLwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIlxuUHJvY2Vzc2luZyBXQU4gZGV2aWNlICVzLi4uXG4iLCB3YW5kZXYtPm5hbWUpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgY291bnRlcnMgZm9yIGVhY2ggd2FuZGV2IAotCSAqIFVzZWQgZm9yIGNvdW50aW5nIG51bWJlciBvZiB0aW1lcyBuZXdfaWYgYW5kIAotICAgICAgICAgKiBkZWxfaWYgZ2V0IGNhbGxlZC4KLQkgKi8KLQl3YW5kZXYtPmRlbF9pZl9jbnQgPSAwOwotCXdhbmRldi0+bmV3X2lmX2NudCA9IDA7Ci0Jd2FuZGV2LT5jb25maWdfaWQgID0gY29uZi0+Y29uZmlnX2lkOwotCi0JaWYgKCFjb25mLT5kYXRhX3NpemUgfHwgKGNvbmYtPmRhdGEgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBmaXJtd2FyZSBub3QgZm91bmQgaW4gY29uZmlndXJhdGlvbiBkYXRhIVxuIiwKLQkJCXdhbmRldi0+bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIENoZWNrIGZvciByZXNvdXJjZSBjb25mbGljdHMgYW5kIHNldHVwIHRoZQotCSAqIGNhcmQgZm9yIHBpZ2dpYmFja2luZyBpZiBuZWNlc3NhcnkgKi8KLQlpZighY29uZi0+UzUxNF9DUFVfbm9bMF0pIHsKLQkJaWYgKChlcnI9Y2hlY2tfczUwOF9jb25mbGljdHMoY2FyZCxjb25mLCZpcnEpKSAhPSAwKXsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9ZWxzZSB7Ci0JCWlmICgoZXJyPWNoZWNrX3M1MTRfY29uZmxpY3RzKGNhcmQsY29uZiwmaXJxKSkgIT0gMCl7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogSWYgdGhlIGN1cnJlbnQgY2FyZCBoYXMgYWxyZWFkeSBiZWVuIGNvbmZpZ3VyZWQKLSAgICAgICAgICogb3IgaXQncyBhIHBpZ2d5YmFjayBjYXJkLCBkbyBub3QgdHJ5IHRvIGFsbG9jYXRlCi0gICAgICAgICAqIHJlc291cmNlcy4KLQkgKi8KLQlpZiAoIWNhcmQtPndhbmRldi5waWdneWJhY2sgJiYgIWNhcmQtPmNvbmZpZ3VyZWQpewotCi0JCS8qIENvbmZpZ3VyZSBoYXJkd2FyZSwgbG9hZCBmaXJtd2FyZSwgZXRjLiAqLwotCQltZW1zZXQoJmNhcmQtPmh3LCAwLCBzaXplb2Yoc2RsYWh3X3QpKTsKLQotCQkvKiBmb3IgYW4gUzUxNCBhZGFwdGVyLCBwYXNzIHRoZSBDUFUgbnVtYmVyIGFuZCB0aGUgc2xvdCBudW1iZXIgcmVhZCAqLwotCQkvKiBmcm9tICdyb3V0ZXIuY29uZicgdG8gdGhlICdzZGxhX3NldHVwKCknIGZ1bmN0aW9uIHZpYSB0aGUgJ3BvcnQnICovCi0JCS8qIHBhcmFtZXRlciAqLwotCQlpZiAoY29uZi0+UzUxNF9DUFVfbm9bMF0pewotCi0JCQljYXJkLT5ody5TNTE0X2NwdV9ub1swXSA9IGNvbmYtPlM1MTRfQ1BVX25vWzBdOwotCQkJY2FyZC0+aHcuUzUxNF9zbG90X25vID0gY29uZi0+UENJX3Nsb3Rfbm87Ci0JCQljYXJkLT5ody5hdXRvX3BjaV9jZmcgPSBjb25mLT5hdXRvX3BjaV9jZmc7Ci0KLQkJCWlmIChjYXJkLT5ody5hdXRvX3BjaV9jZmcgPT0gV0FOT1BUX1lFUyl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgQ1BVIHRvICVjIGFuZCBTbG90IHRvIEF1dG9cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+aHcuUzUxNF9jcHVfbm9bMF0pOwotCQkJfWVsc2V7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgQ1BVIHRvICVjIGFuZCBTbG90IHRvICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIGNhcmQtPmh3LlM1MTRfY3B1X25vWzBdLCBjYXJkLT5ody5TNTE0X3Nsb3Rfbm8pOwotCQkJfQotCi0JCX1lbHNlewotCQkJLyogNTA4IENhcmQgaW8gcG9ydCBhbmQgaXJxIGluaXRpYWxpemF0aW9uICovCi0JCQljYXJkLT5ody5wb3J0ID0gY29uZi0+aW9wb3J0OwotCQkJY2FyZC0+aHcuaXJxID0gKGNvbmYtPmlycSA9PSA5KSA/IDIgOiBjb25mLT5pcnE7Ci0JCX0KLQotCi0JCS8qIENvbXB1dGUgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgY2FyZCBpbiBrZXJuZWwgc3BhY2UgKi8KLQkJaWYoY29uZi0+bWFkZHIpewotCQkJY2FyZC0+aHcuZHBtYmFzZSA9IHBoeXNfdG9fdmlydChjb25mLT5tYWRkcik7Ci0JCX1lbHNlewkKLQkJCWNhcmQtPmh3LmRwbWJhc2UgPSAodm9pZCAqKWNvbmYtPm1hZGRyOwotCQl9Ci0JCQkKLQkJY2FyZC0+aHcuZHBtc2l6ZSA9IFNETEFfV0lORE9XU0laRTsKLQkJCi0JCS8qIHNldCB0aGUgYWRhcHRlciB0eXBlIGlmIHVzaW5nIGFuIFM1MTQgYWRhcHRlciAqLwotCQljYXJkLT5ody50eXBlID0gKGNvbmYtPlM1MTRfQ1BVX25vWzBdKSA/IFNETEFfUzUxNCA6IGNvbmYtPmh3X29wdFswXTsgCi0JCWNhcmQtPmh3LnBjbGsgPSBjb25mLT5od19vcHRbMV07Ci0KLQkJZXJyID0gc2RsYV9zZXR1cCgmY2FyZC0+aHcsIGNvbmYtPmRhdGEsIGNvbmYtPmRhdGFfc2l6ZSk7Ci0JCWlmIChlcnIpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEhhcmR3YXJlIHNldHVwIEZhaWxlZCAlaVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JICAgICAgICBpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCkKLQkJCWlycSA9IChjb25mLT5pcnEgPT0gMikgPyA5IDogY29uZi0+aXJxOyAvKiBJUlEyIC0+IElSUTkgKi8KLQkJZWxzZQotCQkJaXJxID0gY2FyZC0+aHcuaXJxOwotCi0JCS8qIHJlcXVlc3QgYW4gaW50ZXJydXB0IHZlY3RvciAtIG5vdGUgdGhhdCBpbnRlcnJ1cHRzIG1heSBiZSBzaGFyZWQgKi8KLQkJLyogd2hlbiB1c2luZyB0aGUgUzUxNCBQQ0kgYWRhcHRlciAqLwotCQkKLSAgICAgICAJCWlmKHJlcXVlc3RfaXJxKGlycSwgc2RsYV9pc3IsIAotCQkgICAgICAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8gU0FfU0hJUlEgOiAwLCAKLQkJICAgICAgIHdhbmRldi0+bmFtZSwgY2FyZCkpewotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ2FuJ3QgcmVzZXJ2ZSBJUlEgJWQhXG4iLCB3YW5kZXYtPm5hbWUsIGlycSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDYXJkIENvbmZpZ3VyZWQgJWx1IG9yIFBpZ2d5YmFja2luZyAlaSFcbiIsCi0JCQl3YW5kZXYtPm5hbWUsY2FyZC0+Y29uZmlndXJlZCxjYXJkLT53YW5kZXYucGlnZ3liYWNrKTsKLQl9IAotCi0KLQlpZiAoIWNhcmQtPmNvbmZpZ3VyZWQpewotCi0JCS8qIEluaXRpYWxpemUgdGhlIFNwaW4gbG9jayAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIGZvciBTTVBcbiIsd2FuZGV2LT5uYW1lKTsKLQotCQkvKiBQaWdneWJhY2sgc3BpbiBsb2NrIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsCi0JCSAqIGluIGNoZWNrX3M1MTQvczUwOF9jb25mbGljdHMoKSAqLwotCQlpZiAoIWNhcmQtPndhbmRldi5waWdneWJhY2spewotCQkJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPndhbmRldi5sb2NrKTsKLQkJfQotCQkKLQkJLyogSW50aWFsaXplIFdBTiBkZXZpY2UgZGF0YSBzcGFjZSAqLwotCQl3YW5kZXYtPmlycSAgICAgICA9IGlycTsKLQkJd2FuZGV2LT5kbWEgICAgICAgPSAwOwotCQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7IAotCQkJd2FuZGV2LT5pb3BvcnQgPSBjYXJkLT5ody5wb3J0OwotCQl9ZWxzZXsKLQkJCXdhbmRldi0+UzUxNF9jcHVfbm9bMF0gPSBjYXJkLT5ody5TNTE0X2NwdV9ub1swXTsKLQkJCXdhbmRldi0+UzUxNF9zbG90X25vID0gY2FyZC0+aHcuUzUxNF9zbG90X25vOwotCQl9Ci0JCXdhbmRldi0+bWFkZHIgICAgID0gKHVuc2lnbmVkIGxvbmcpY2FyZC0+aHcuZHBtYmFzZTsKLQkJd2FuZGV2LT5tc2l6ZSAgICAgPSBjYXJkLT5ody5kcG1zaXplOwotCQl3YW5kZXYtPmh3X29wdFswXSA9IGNhcmQtPmh3LnR5cGU7Ci0JCXdhbmRldi0+aHdfb3B0WzFdID0gY2FyZC0+aHcucGNsazsKLQkJd2FuZGV2LT5od19vcHRbMl0gPSBjYXJkLT5ody5tZW1vcnk7Ci0JCXdhbmRldi0+aHdfb3B0WzNdID0gY2FyZC0+aHcuZndpZDsKLQl9Ci0KLQkvKiBQcm90b2NvbC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLwotCXN3aXRjaCAoY2FyZC0+aHcuZndpZCkgewotCi0JY2FzZSBTRklEX1gyNV81MDI6Ci0JY2FzZSBTRklEX1gyNV81MDg6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdGFydGluZyBYLjI1IFByb3RvY29sIEluaXQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQllcnIgPSB3cHhfaW5pdChjYXJkLCBjb25mKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRklEX0ZSNTAyOgotCWNhc2UgU0ZJRF9GUjUwODoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0YXJ0aW5nIEZyYW1lIFJlbGF5IFByb3RvY29sIEluaXQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQllcnIgPSB3cGZfaW5pdChjYXJkLCBjb25mKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRklEX1BQUDUwMjoKLQljYXNlIFNGSURfUFBQNTA4OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgUFBQIFByb3RvY29sIEluaXQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQllcnIgPSB3cHBfaW5pdChjYXJkLCBjb25mKTsKLQkJYnJlYWs7Ci0JCQotCWNhc2UgU0ZJRF9DSERMQzUwODoKLQljYXNlIFNGSURfQ0hETEM1MTQ6Ci0JCWlmIChjb25mLT5mdDEpewkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgRlQxIENTVS9EU1UgQ29uZmlnIERyaXZlci5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQllcnIgPSB3cGZ0MV9pbml0KGNhcmQsIGNvbmYpOwotCQkJYnJlYWs7Ci0JCQkKLQkJfWVsc2UgaWYgKGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgTXVsdGktUG9ydCBQUFAgUHJvdG9jb2wgSW5pdC5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJZXJyID0gd3NwcHBfaW5pdChjYXJkLGNvbmYpOwotCQkJYnJlYWs7Ci0KLQkJfWVsc2V7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgQ0hETEMgUHJvdG9jb2wgSW5pdC5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJZXJyID0gd3BjX2luaXQoY2FyZCwgY29uZik7Ci0JCQlicmVhazsKLQkJfQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciwgRmlybXdhcmUgaXMgbm90IHN1cHBvcnRlZCAlWCAlWCFcbiIsCi0JCQl3YW5kZXYtPm5hbWUsY2FyZC0+aHcuZndpZCxTRklEX0NIRExDNTA4KTsKLQkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKLQl9Ci0KLQlpZiAoZXJyICE9IDApewotCQlpZiAoZXJyID09IC1FUFJPVE9OT1NVUFBPUlQpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IEVycm9yLCBQcm90b2NvbCBzZWxlY3RlZCBoYXMgbm90IGJlZW4gY29tcGlsZWQhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiAgICAgICAgUmUtY29uZmlndXJlIHRoZSBrZXJuZWwgYW5kIHJlLWJ1aWxkIHRoZSBtb2R1bGVzIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQkJCi0JCXJlbGVhc2VfaHcoY2FyZCk7Ci0JCXdhbmRldi0+c3RhdGUgPSBXQU5fVU5DT05GSUdVUkVEOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCi0gIAkvKiBSZXNlcnZlIEkvTyByZWdpb24gYW5kIHNjaGVkdWxlIGJhY2tncm91bmQgdGFzayAqLwotICAgICAgICBpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCAmJiAhY2FyZC0+d2FuZGV2LnBpZ2d5YmFjaykKLQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjYXJkLT5ody5wb3J0LCBjYXJkLT5ody5pb19yYW5nZSwgCi0JCQkJd2FuZGV2LT5uYW1lKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicG9ydCAweCUwNHggYnVzeVxuIiwgY2FyZC0+aHcucG9ydCk7Ci0JCQlyZWxlYXNlX2h3KGNhcmQpOwotCQkJd2FuZGV2LT5zdGF0ZSA9IFdBTl9VTkNPTkZJR1VSRUQ7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCSAgfQotCi0JLyogT25seSB1c2UgdGhlIHBvbGxpbmcgcm91dGluZSBmb3IgdGhlIFgyNSBwcm90b2NvbCAqLwotCQotCWNhcmQtPndhbmRldi5jcml0aWNhbD0wOwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAqIGNvbmZpZ3VyZV9zNTA4X2NhcmQKLSAqIAotICogRm9yIGEgUzUwOCBhZGFwdGVyLCBjaGVjayBmb3IgYSBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGVycm9yIGluIHRoYXQKLSAqIHdlIGFyZSBsb2FkaW5nIGFuIGFkYXB0ZXIgaW4gdGhlIHNhbWUgSU8gcG9ydCBhcyBhIHByZXZpb3VzbHkgbG9hZGVkIFM1MDgKLSAqIGNhcmQuCi0gKi8gCi0KLXN0YXRpYyBpbnQgY2hlY2tfczUwOF9jb25mbGljdHMgKHNkbGFfdCogY2FyZCx3YW5kZXZfY29uZl90KiBjb25mLCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlpbnQgaTsKLQkKLQlpZiAoY29uZi0+aW9wb3J0IDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkiJXM6IGNhbid0IGNvbmZpZ3VyZSB3aXRob3V0IEkvTyBwb3J0IGFkZHJlc3MhXG4iLAotCQljYXJkLT53YW5kZXYubmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjb25mLT5pcnEgPD0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgY29uZmlndXJlIHdpdGhvdXQgSVJRIVxuIiwKLQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoMCwmY2FyZC0+Y29uZmlndXJlZCkpCi0JCXJldHVybiAwOwotCi0KLQkvKiBDaGVjayBmb3IgYWxyZWFkeSBsb2FkZWQgY2FyZCB3aXRoIHRoZSBzYW1lIElPIHBvcnQgYW5kIElSUSAKLQkgKiBJZiBmb3VuZCwgY29weSBpdHMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBhbmQgdXNlIGl0cwotCSAqIHJlc291cmNlcyAoaS5lLiBwaWdneWJhY2tpbmcpCi0JICovCi0JCi0JZm9yIChpID0gMDsgaSA8IG5jYXJkczsgaSsrKSB7Ci0JCXNkbGFfdCAqbnh0X2NhcmQgPSAmY2FyZF9hcnJheVtpXTsKLQotCQkvKiBTa2lwIHRoZSBjdXJyZW50IGNhcmQgcHRyICovCi0JCWlmIChueHRfY2FyZCA9PSBjYXJkKQkKLQkJCWNvbnRpbnVlOwotCi0KLQkJLyogRmluZCBhIGNhcmQgdGhhdCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgd2l0aCB0aGUKLQkJICogc2FtZSBJTyBQb3J0ICovCi0JCWlmICgobnh0X2NhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTA4KSAmJgotCQkgICAgKG54dF9jYXJkLT5ody5wb3J0ID09IGNvbmYtPmlvcG9ydCkgJiYgCi0JCSAgICAobnh0X2NhcmQtPm5leHQgPT0gTlVMTCkpewotCQkJCi0JCQkvKiBXZSBmb3VuZCBhIGNhcmQgdGhlIGNhcmQgdGhhdCBoYXMgc2FtZSBjb25maWd1cmF0aW9uCi0JCQkgKiBhcyB1cy4gVGhpcyBtZWFucywgdGhhdCB3ZSBtdXN0IHNldHVwIHRoaXMgY2FyZCBpbiAKLQkJCSAqIHBpZ2dpYmFja2luZyBtb2RlLiBIb3dldmVyLCBvbmx5IENIRExDIGFuZCBNUFBQIHByb3RvY29sCi0JCQkgKiBzdXBwb3J0IHRoaXMgc2V0dXAgKi8KLQkJCi0JCQlpZiAoKGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfQ0hETEMgfHwgCi0JCQkgICAgIGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCkgJiYKLQkJCSAgICAobnh0X2NhcmQtPndhbmRldi5jb25maWdfaWQgPT0gV0FOQ09ORklHX0NIRExDIHx8IAotCQkJICAgICBueHRfY2FyZC0+d2FuZGV2LmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCkpeyAKLQkJCQkKLQkJCQkqaXJxID0gbnh0X2NhcmQtPmh3LmlycTsKLQkJCQltZW1jcHkoJmNhcmQtPmh3LCAmbnh0X2NhcmQtPmh3LCBzaXplb2Yoc2RsYWh3X3QpKTsKLQkJCQotCQkJCS8qIFRoZSBtYXN0ZXIgY291bGQgYWxyZWFkeSBiZSBydW5uaW5nLCB3ZSBtdXN0Ci0JCQkJICogc2V0IHRoaXMgYXMgYSBjcml0aWNhbCBhcmVhICovCi0JCQkJbG9ja19hZGFwdGVyX2lycSgmbnh0X2NhcmQtPndhbmRldi5sb2NrLCAmc21wX2ZsYWdzKTsKLQotCQkJCW54dF9jYXJkLT5uZXh0ID0gY2FyZDsKLQkJCQljYXJkLT5uZXh0ID0gbnh0X2NhcmQ7Ci0KLQkJCQljYXJkLT53YW5kZXYucGlnZ3liYWNrID0gV0FOT1BUX1lFUzsKLQotCQkJCS8qIFdlIG11c3QgaW5pdGlhbGlzZSB0aGUgcGlnZ2liYWNrIHNwaW4gbG9jayBoZXJlCi0JCQkJICogc2luY2UgaXNyIHdpbGwgdHJ5IHRvIGxvY2sgY2FyZC0+bmV4dCBpZiBpdAotCQkJCSAqIGV4aXN0cyAqLwotCQkJCXNwaW5fbG9ja19pbml0KCZjYXJkLT53YW5kZXYubG9jayk7Ci0JCQkJCi0JCQkJdW5sb2NrX2FkYXB0ZXJfaXJxKCZueHRfY2FyZC0+d2FuZGV2LmxvY2ssICZzbXBfZmxhZ3MpOwotCQkJCWJyZWFrOwotCQkJfWVsc2V7Ci0JCQkJLyogVHJ5aW5nIHRvIHJ1biBwaWdnaWJhY2tpbmcgd2l0aCBhIHdyb25nIHByb3RvY29sICovCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SOiBSZXNvdXJjZSBidXN5LCBpb3BvcnQ6IDB4JXhcbiIKLQkJCQkJCSAiJXM6ICAgICAgICBUaGlzIHByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydFxuIgotCQkJCQkJICIlczogICAgICAgIG11bHRpLXBvcnQgb3BlcmF0aW9uIVxuIiwKLQkJCQkJCSBjYXJkLT5kZXZuYW1lLG54dF9jYXJkLT5ody5wb3J0LAotCQkJCQkJIGNhcmQtPmRldm5hbWUsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0KLQkvKiBNYWtlIHN1cmUgSS9PIHBvcnQgcmVnaW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHdlIGFyZSB0aGUKLQkgKiBtYXN0ZXIgZGV2aWNlLiAgSWYgd2UgYXJlIHJ1bm5pbmcgaW4gcGlnZ3liYWNraW5nIG1vZGUsIAotCSAqIHdlIHdpbGwgdXNlIHRoZSByZXNvdXJjZXMgb2YgdGhlIG1hc3RlciBjYXJkLiAqLwotCWlmICghY2FyZC0+d2FuZGV2LnBpZ2d5YmFjaykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJyID0KLQkJCXJlcXVlc3RfcmVnaW9uKGNvbmYtPmlvcG9ydCwgU0RMQV9NQVhJT1JBTkdFLCAic2RsYW1haW4iKTsKLQkJcmVsZWFzZV9yZWdpb24oY29uZi0+aW9wb3J0LCBTRExBX01BWElPUkFOR0UpOwotCi0JCWlmICghcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IEkvTyByZWdpb24gMHglWCAtIDB4JVggaXMgaW4gdXNlIVxuIiwKLQkJCQljYXJkLT53YW5kZXYubmFtZSwgY29uZi0+aW9wb3J0LAotCQkJCWNvbmYtPmlvcG9ydCArIFNETEFfTUFYSU9SQU5HRSAtIDEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKiBjb25maWd1cmVfczUxNF9jYXJkCi0gKiAKLSAqIEZvciBhIFM1MTQgYWRhcHRlciwgY2hlY2sgZm9yIGEgcG9zc2libGUgY29uZmlndXJhdGlvbiBlcnJvciBpbiB0aGF0Ci0gKiB3ZSBhcmUgbG9hZGluZyBhbiBhZGFwdGVyIGluIHRoZSBzYW1lIHNsb3QgYXMgYSBwcmV2aW91c2x5IGxvYWRlZCBTNTE0Ci0gKiBjYXJkLgotICovIAotCi0KLXN0YXRpYyBpbnQgY2hlY2tfczUxNF9jb25mbGljdHMoc2RsYV90KiBjYXJkLHdhbmRldl9jb25mX3QqIGNvbmYsIGludCAqaXJxKQotewotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCWludCBpOwotCQotCWlmICh0ZXN0X2JpdCgwLCZjYXJkLT5jb25maWd1cmVkKSkKLQkJcmV0dXJuIDA7Ci0KLQkKLQkvKiBDaGVjayBmb3IgYWxyZWFkeSBsb2FkZWQgY2FyZCB3aXRoIHRoZSBzYW1lIElPIHBvcnQgYW5kIElSUSAKLQkgKiBJZiBmb3VuZCwgY29weSBpdHMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBhbmQgdXNlIGl0cwotCSAqIHJlc291cmNlcyAoaS5lLiBwaWdneWJhY2tpbmcpCi0JICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbmNhcmRzOyBpICsrKSB7Ci0JCi0JCXNkbGFfdCogbnh0X2NhcmQgPSAmY2FyZF9hcnJheVtpXTsKLQkJaWYobnh0X2NhcmQgPT0gY2FyZCkKLQkJCWNvbnRpbnVlOwotCQkKLQkJaWYoKG54dF9jYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgJiYKLQkJICAgKG54dF9jYXJkLT5ody5TNTE0X3Nsb3Rfbm8gPT0gY29uZi0+UENJX3Nsb3Rfbm8pICYmCi0JCSAgIChueHRfY2FyZC0+aHcuUzUxNF9jcHVfbm9bMF0gPT0gY29uZi0+UzUxNF9DUFVfbm9bMF0pJiYKLQkJICAgKG54dF9jYXJkLT5uZXh0ID09IE5VTEwpKXsKLQotCi0JCQlpZiAoKGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfQ0hETEMgfHwgCi0JCQkgICAgIGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCkgJiYKLQkJCSAgICAobnh0X2NhcmQtPndhbmRldi5jb25maWdfaWQgPT0gV0FOQ09ORklHX0NIRExDIHx8IAotCQkJICAgICBueHRfY2FyZC0+d2FuZGV2LmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCkpeyAKLQkJCQkKLQkJCQkqaXJxID0gbnh0X2NhcmQtPmh3LmlycTsKLQkJCQltZW1jcHkoJmNhcmQtPmh3LCAmbnh0X2NhcmQtPmh3LCBzaXplb2Yoc2RsYWh3X3QpKTsKLQkKLQkJCQkvKiBUaGUgbWFzdGVyIGNvdWxkIGFscmVhZHkgYmUgcnVubmluZywgd2UgbXVzdAotCQkJCSAqIHNldCB0aGlzIGFzIGEgY3JpdGljYWwgYXJlYSAqLwotCQkJCWxvY2tfYWRhcHRlcl9pcnEoJm54dF9jYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJCQlueHRfY2FyZC0+bmV4dCA9IGNhcmQ7Ci0JCQkJY2FyZC0+bmV4dCA9IG54dF9jYXJkOwotCi0JCQkJY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayA9IFdBTk9QVF9ZRVM7Ci0KLQkJCQkvKiBXZSBtdXN0IGluaXRpYWxpc2UgdGhlIHBpZ2dpYmFjayBzcGluIGxvY2sgaGVyZQotCQkJCSAqIHNpbmNlIGlzciB3aWxsIHRyeSB0byBsb2NrIGNhcmQtPm5leHQgaWYgaXQKLQkJCQkgKiBleGlzdHMgKi8KLQkJCQlzcGluX2xvY2tfaW5pdCgmY2FyZC0+d2FuZGV2LmxvY2spOwotCi0JCQkJdW5sb2NrX2FkYXB0ZXJfaXJxKCZueHRfY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0KLQkJCX1lbHNlewotCQkJCS8qIFRyeWluZyB0byBydW4gcGlnZ2liYWNraW5nIHdpdGggYSB3cm9uZyBwcm90b2NvbCAqLwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUjogUmVzb3VyY2UgYnVzeTogQ1BVICVjIFBDSVNMT1QgJWlcbiIKLQkJCQkJCSAiJXM6ICAgICAgICBUaGlzIHByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydFxuIgotCQkJCQkJICIlczogICAgICAgIG11bHRpLXBvcnQgb3BlcmF0aW9uIVxuIiwKLQkJCQkJCSBjYXJkLT5kZXZuYW1lLAotCQkJCQkJIGNvbmYtPlM1MTRfQ1BVX25vWzBdLGNvbmYtPlBDSV9zbG90X25vLAotCQkJCQkJIGNhcmQtPmRldm5hbWUsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2h1dCBkb3duIFdBTiBsaW5rIGRyaXZlci4gCi0gKiBvIHNodXQgZG93biBhZGFwdGVyIGhhcmR3YXJlCi0gKiBvIHJlbGVhc2Ugc3lzdGVtIHJlc291cmNlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gZGV2aWNlIGlzIGJlaW5nIHVucmVnaXN0ZXJlZCBvcgotICogd2hlbiBpdCBoYW5kbGVzIFJPVVRFUl9ET1dOIElPQ1RMLgotICovCi1zdGF0aWMgaW50IHNodXRkb3duKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpCi17Ci0Jc2RsYV90ICpjYXJkOwotCWludCBlcnI9MDsKLQkKLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSl7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQkJCi0JaWYgKHdhbmRldi0+c3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCl7Ci0JCXJldHVybiAwOwotCX0KLQotCWNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0KLQlpZiAoY2FyZC0+dHR5X29wdCl7Ci0JCWlmIChjYXJkLT50dHlfb3Blbil7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogU2h1dGRvd24gRmFpbGVkOiBUVFkgaXMgc3RpbGwgb3BlblxuIiwKLQkJCQkgIGNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCX0KLQkKLQl3YW5kZXYtPnN0YXRlID0gV0FOX1VOQ09ORklHVVJFRDsKLQotCXNldF9iaXQoUEVSSV9DUklULCh2b2lkKikmd2FuZGV2LT5jcml0aWNhbCk7Ci0JCi0JLyogSW4gY2FzZSBvZiBwaWdnaWJhY2tpbmcsIG1ha2Ugc3VyZSB0aGF0IAotICAgICAgICAgKiB3ZSBuZXZlciB0cnkgdG8gc2h1dGRvd24gYm90aCBkZXZpY2VzIGF0IHRoZSBzYW1lCi0gICAgICAgICAqIHRpbWUsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gb25lIGFub3RoZXIgKi8KLQkKLQlpZiAoY2FyZC0+ZGlzYWJsZV9jb21tKXsKLQkJY2FyZC0+ZGlzYWJsZV9jb21tKGNhcmQpOwotCX0KLQotCS8qIFJlbGVhc2UgUmVzb3VyY2VzICovCi0JcmVsZWFzZV9odyhjYXJkKTsKLQotICAgICAgICAvKiBvbmx5IGZyZWUgdGhlIGFsbG9jYXRlZCBJL08gcmFuZ2UgaWYgbm90IGFuIFM1MTQgYWRhcHRlciAqLwotCWlmICh3YW5kZXYtPmh3X29wdFswXSAhPSBTRExBX1M1MTQgJiYgIWNhcmQtPmNvbmZpZ3VyZWQpewotICAgICAgICAgICAgICAJcmVsZWFzZV9yZWdpb24oY2FyZC0+aHcucG9ydCwgY2FyZC0+aHcuaW9fcmFuZ2UpOwotCX0KLQotCWlmICghY2FyZC0+Y29uZmlndXJlZCl7Ci0JCW1lbXNldCgmY2FyZC0+aHcsIDAsIHNpemVvZihzZGxhaHdfdCkpOwotCSAgICAgIAlpZiAoY2FyZC0+bmV4dCl7Ci0JCQltZW1zZXQoJmNhcmQtPm5leHQtPmh3LCAwLCBzaXplb2Yoc2RsYWh3X3QpKTsKLQkJfQotCX0KLQkKLQotCWNsZWFyX2JpdChQRVJJX0NSSVQsKHZvaWQqKSZ3YW5kZXYtPmNyaXRpY2FsKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX2h3IChzZGxhX3QgKmNhcmQpCi17Ci0Jc2RsYV90ICpueHRfY2FyZDsKLQotCQotCS8qIENoZWNrIGlmIG5leHQgZGV2aWNlIGV4aXN0cyAqLwotCWlmIChjYXJkLT5uZXh0KXsKLQkJbnh0X2NhcmQgPSBjYXJkLT5uZXh0OwotCQkvKiBJZiBuZXh0IGRldmljZSBpcyBkb3duIHRoZW4gcmVsZWFzZSByZXNvdXJjZXMgKi8KLQkJaWYgKG54dF9jYXJkLT53YW5kZXYuc3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCl7Ci0JCQlpZiAoY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayl7Ci0JCQkJLyogSWYgdGhpcyBkZXZpY2UgaXMgcGlnZ3liYWNrIHRoZW4gdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGluZm9ybWF0aW9uIG9mIHRoZSBtYXN0ZXIgZGV2aWNlIAotCQkJCSAqLwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQaWdneWJhY2sgc2h1dHRpbmcgZG93blxuIixjYXJkLT5kZXZuYW1lKTsKLQkJCQlzZGxhX2Rvd24oJmNhcmQtPm5leHQtPmh3KTsKLSAgICAgICAJCQkJZnJlZV9pcnEoY2FyZC0+d2FuZGV2LmlycSwgY2FyZC0+bmV4dCk7Ci0JCQkJY2FyZC0+Y29uZmlndXJlZCA9IDA7Ci0JCQkJY2FyZC0+bmV4dC0+Y29uZmlndXJlZCA9IDA7Ci0JCQkJY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayA9IDA7Ci0JCQl9ZWxzZXsKLQkJCQkvKiBNYXN0ZXIgZGV2aWNlIHNodXR0aW5nIGRvd24gKi8KLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogTWFzdGVyIHNodXR0aW5nIGRvd25cbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJc2RsYV9kb3duKCZjYXJkLT5odyk7Ci0JCQkJZnJlZV9pcnEoY2FyZC0+d2FuZGV2LmlycSwgY2FyZCk7Ci0JCQkJY2FyZC0+Y29uZmlndXJlZCA9IDA7Ci0JCQkJY2FyZC0+bmV4dC0+Y29uZmlndXJlZCA9IDA7Ci0JCQl9Ci0JCX1lbHNlewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERldmljZSBzdGlsbCBydW5uaW5nICVpXG4iLAotCQkJCW54dF9jYXJkLT5kZXZuYW1lLG54dF9jYXJkLT53YW5kZXYuc3RhdGUpOwotCi0JCQljYXJkLT5jb25maWd1cmVkID0gMTsKLQkJfQotCX1lbHNlewotCQlwcmludGsoS0VSTl9JTkZPICIlczogTWFzdGVyIHNodXR0aW5nIGRvd25cbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCXNkbGFfZG93bigmY2FyZC0+aHcpOwotICAgICAgIAkJZnJlZV9pcnEoY2FyZC0+d2FuZGV2LmlycSwgY2FyZCk7Ci0JCWNhcmQtPmNvbmZpZ3VyZWQgPSAwOwotCX0KLQlyZXR1cm47Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEcml2ZXIgSS9PIGNvbnRyb2wuIAotICogbyB2ZXJpZnkgYXJndW1lbnRzCi0gKiBvIHBlcmZvcm0gcmVxdWVzdGVkIGFjdGlvbgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gcm91dGVyIGhhbmRsZXMgb25lIG9mIHRoZSByZXNlcnZlZCB1c2VyCi0gKiBJT0NUTHMuICBOb3RlIHRoYXQgJ2FyZycgc3RpbCBwb2ludHMgdG8gdXNlciBhZGRyZXNzIHNwYWNlLgotICovCi1zdGF0aWMgaW50IGlvY3RsKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc2RsYV90KiBjYXJkOwotCWludCBlcnI7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHdhbmRldi0+c3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljYXJkID0gd2FuZGV2LT5wcml2YXRlOwotCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlkaXNhYmxlX2lycShjYXJkLT5ody5pcnEpOwotCX0KLQotCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmd2FuZGV2LT5jcml0aWNhbCkpIHsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBXQU5QSVBFX0RVTVA6Ci0JCWVyciA9IGlvY3RsX2R1bXAod2FuZGV2LT5wcml2YXRlLCAodm9pZCopYXJnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFdBTlBJUEVfRVhFQzoKLQkJZXJyID0gaW9jdGxfZXhlYyh3YW5kZXYtPnByaXZhdGUsICh2b2lkKilhcmcsIGNtZCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotIAotCXJldHVybiBlcnI7Ci19Ci0KLS8qKioqKiogRHJpdmVyIElPQ1RMIEhhbmRsZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIER1bXAgYWRhcHRlciBtZW1vcnkgdG8gdXNlciBidWZmZXIuCi0gKiBvIHZlcmlmeSByZXF1ZXN0IHN0cnVjdHVyZQotICogbyBjb3B5IHJlcXVlc3Qgc3RydWN0dXJlIHRvIGtlcm5lbCBkYXRhIHNwYWNlCi0gKiBvIHZlcmlmeSBsZW5ndGgvb2Zmc2V0Ci0gKiBvIHZlcmlmeSB1c2VyIGJ1ZmZlcgotICogbyBjb3B5IGFkYXB0ZXIgbWVtb3J5IGltYWdlIHRvIHVzZXIgYnVmZmVyCi0gKgotICogTm90ZTogd2hlbiBkdW1waW5nIG1lbW9yeSwgdGhpcyByb3V0aW5lIHN3aXRjaGVzIGN1cmVudCBkdWFsLXBvcnQgbWVtb3J5Ci0gKgkgdmVjdG9yLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gYXZvaWQgcmFjaW5nIGNvbmRpdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGxfZHVtcCAoc2RsYV90KiBjYXJkLCBzZGxhX2R1bXBfdCogdV9kdW1wKQotewotCXNkbGFfZHVtcF90IGR1bXA7Ci0JdW5zaWduZWQgd2luc2l6ZTsKLQl1bnNpZ25lZCBsb25nIG9sZHZlYzsJLyogRFBNIHdpbmRvdyB2ZWN0b3IgKi8KLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlpbnQgZXJyID0gMDsKLQotCWlmKGNvcHlfZnJvbV91c2VyKCh2b2lkKikmZHVtcCwgKHZvaWQqKXVfZHVtcCwgc2l6ZW9mKHNkbGFfZHVtcF90KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCQkKLQlpZiAoKGR1bXAubWFnaWMgIT0gV0FOUElQRV9NQUdJQykgfHwKLQkgICAgKGR1bXAub2Zmc2V0ICsgZHVtcC5sZW5ndGggPiBjYXJkLT5ody5tZW1vcnkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkKLQl3aW5zaXplID0gY2FyZC0+aHcuZHBtc2l6ZTsKLQotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KSB7Ci0KLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssICZzbXBfZmxhZ3MpOwotCQkKLSAgICAgICAgICAgICAgICBvbGR2ZWMgPSBjYXJkLT5ody52ZWN0b3I7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGR1bXAubGVuZ3RoKSB7Ci0JCQkvKiBjdXJyZW50IG9mZnNldCAqLwkJCQkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IGR1bXAub2Zmc2V0ICUgd2luc2l6ZTsKLQkJCS8qIGN1cnJlbnQgdmVjdG9yICovCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZlYyA9IGR1bXAub2Zmc2V0IC0gcG9zOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuID0gKGR1bXAubGVuZ3RoID4gKHdpbnNpemUgLSBwb3MpKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAJKHdpbnNpemUgLSBwb3MpIDogZHVtcC5sZW5ndGg7Ci0JCQkvKiByZWxvY2F0ZSB3aW5kb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZGxhX21hcG1lbSgmY2FyZC0+aHcsIHZlYykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAtRUlPOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkJCQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKCh2b2lkICopZHVtcC5wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OCAqKWNhcmQtPmh3LmRwbWJhc2UgKyBwb3MsIGxlbikpeyAKLQkJCQkKLQkJCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCAmc21wX2ZsYWdzKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcC5sZW5ndGggICAgIC09IGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAub2Zmc2V0ICAgICArPSBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wLnB0ciAgICAgICAgID0gKGNoYXIqKWR1bXAucHRyICsgbGVuOwotICAgICAgICAgICAgICAgIH0KLQkJCi0gICAgICAgICAgICAgICAgc2RsYV9tYXBtZW0oJmNhcmQtPmh3LCBvbGR2ZWMpOy8qIHJlc3RvcmUgRFBNIHdpbmRvdyBwb3NpdGlvbiAqLwotCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCAmc21wX2ZsYWdzKTsKLSAgICAgICAgCi0JfWVsc2UgewotCi0gICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoKHZvaWQgKilkdW1wLnB0ciwKLQkJCSAgICAgICAodTggKiljYXJkLT5ody5kcG1iYXNlICsgZHVtcC5vZmZzZXQsIGR1bXAubGVuZ3RoKSl7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRXhlY3V0ZSBhZGFwdGVyIGZpcm13YXJlIGNvbW1hbmQuCi0gKiBvIHZlcmlmeSByZXF1ZXN0IHN0cnVjdHVyZQotICogbyBjb3B5IHJlcXVlc3Qgc3RydWN0dXJlIHRvIGtlcm5lbCBkYXRhIHNwYWNlCi0gKiBvIGNhbGwgcHJvdG9jb2wtc3BlY2lmaWMgJ2V4ZWMnIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGxfZXhlYyAoc2RsYV90KiBjYXJkLCBzZGxhX2V4ZWNfdCogdV9leGVjLCBpbnQgY21kKQotewotCXNkbGFfZXhlY190IGV4ZWM7Ci0JaW50IGVycj0wOwotCi0JaWYgKGNhcmQtPmV4ZWMgPT0gTlVMTCAmJiBjbWQgPT0gV0FOUElQRV9FWEVDKXsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYoY29weV9mcm9tX3VzZXIoKHZvaWQqKSZleGVjLCAodm9pZCopdV9leGVjLCBzaXplb2Yoc2RsYV9leGVjX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoKGV4ZWMubWFnaWMgIT0gV0FOUElQRV9NQUdJQykgfHwgKGV4ZWMuY21kID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgV0FOUElQRV9FWEVDOgkKLQkJCWVyciA9IGNhcmQtPmV4ZWMoY2FyZCwgZXhlYy5jbWQsIGV4ZWMuZGF0YSk7Ci0JCQlicmVhazsKLQl9CQotCXJldHVybiBlcnI7Ci19Ci0KLS8qKioqKioqIE1pc2NlbGxhbmVvdXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNETEEgSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZS4KLSAqIG8gYWNrbm93bGVkZ2UgU0RMQSBoYXJkd2FyZSBpbnRlcnJ1cHQuCi0gKiBvIGNhbGwgcHJvdG9jb2wtc3BlY2lmaWMgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSwgaWYgYW55LgotICovCi1TVEFUSUMgaXJxcmV0dXJuX3Qgc2RsYV9pc3IgKGludCBpcnEsIHZvaWQqIGRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0jZGVmaW5lCWNhcmQJKChzZGxhX3QqKWRldl9pZCkKLQotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7CS8qIGhhbmRsZSBpbnRlcnJydXB0IG9uIFM1MTQgKi8KLSAgICAgICAgICAgICAgICB1MzIgaW50X3N0YXR1czsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIENQVV9ubyA9IGNhcmQtPmh3LlM1MTRfY3B1X25vWzBdOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2FyZF9mb3VuZF9mb3JfSVJROwotCQl1OCBJUlFfY291bnQgPSAwOwotCi0JCWZvcig7OykgewotCi0JCQlyZWFkX1M1MTRfaW50X3N0YXQoJmNhcmQtPmh3LCAmaW50X3N0YXR1cyk7Ci0KLQkJCS8qIGNoZWNrIGlmIHRoZSBpbnRlcnJ1cHQgaXMgZm9yIHRoaXMgZGV2aWNlICovCi0gCQkJaWYoISgodW5zaWduZWQgY2hhcilpbnRfc3RhdHVzICYKLQkJCQkoSVJRX0NQVV9BIHwgSVJRX0NQVV9CKSkpCi0gICAgICAgICAgICAgICAgCSAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotCi0JCQkvKiBpZiB0aGUgSVJRIGlzIGZvciBib3RoIENQVXMgb24gdGhlIHNhbWUgYWRhcHRlciwgKi8KLQkJCS8qIHRoZW4gYWx0ZXIgdGhlIGludGVycnVwdCBzdGF0dXMgc28gYXMgdG8gaGFuZGxlICovCi0JCQkvKiBvbmUgQ1BVIGF0IGEgdGltZSAqLwotCQkJaWYoKCh1bnNpZ25lZCBjaGFyKWludF9zdGF0dXMgJiAoSVJRX0NQVV9BIHwgSVJRX0NQVV9CKSkKLQkJCQk9PSAoSVJRX0NQVV9BIHwgSVJRX0NQVV9CKSkgewotCQkJCWludF9zdGF0dXMgJj0gKENQVV9ubyA9PSBTNTE0X0NQVV9BKSA/Ci0JCQkJCX5JUlFfQ1BVX0IgOiB+SVJRX0NQVV9BOwotCQkJfQotIAotCQkJY2FyZF9mb3VuZF9mb3JfSVJRID0gMDsKLQotCSAgICAgICAgICAgICAJLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIENQVSBudW1iZXIgZm9yIHRoaXMgZGV2aWNlICovCi0JCQkvKiBjb3JyZXNwb25kcyB0byB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWFkICovCi0gICAgICAgICAgICAgICAgCXN3aXRjaCAoQ1BVX25vKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJY2FzZSBTNTE0X0NQVV9BOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaWYoKHVuc2lnbmVkIGNoYXIpaW50X3N0YXR1cyAmCi0JCQkJCQlJUlFfQ1BVX0EpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZF9mb3VuZF9mb3JfSVJRID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFM1MTRfQ1BVX0I6Ci0gICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBpZigodW5zaWduZWQgY2hhcilpbnRfc3RhdHVzICYKLQkJCQkJCUlSUV9DUFVfQikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkX2ZvdW5kX2Zvcl9JUlEgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAJfQotCi0JCQkvKiBleGl0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgZm9yIGFub3RoZXIgQ1BVIG9uIHRoZSAqLwotCQkJLyogc2FtZSBJUlEgKi8KLQkJCWlmKCFjYXJkX2ZvdW5kX2Zvcl9JUlEpCi0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCi0gICAgICAgCSAJCWlmICghY2FyZCB8fCAKLQkJCSAgIChjYXJkLT53YW5kZXYuc3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCAmJiAhY2FyZC0+Y29uZmlndXJlZCkpewotCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCQkiUmVjZWl2ZWQgSVJRICVkIGZvciBDUFUgIyVjXG4iLAotCQkJCQkJaXJxLCBDUFVfbm8pOwotCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCQkiSVJRIGZvciB1bmNvbmZpZ3VyZWQgYWRhcHRlclxuIik7Ci0JCQkJCVM1MTRfaW50YWNrKCZjYXJkLT5odywgaW50X3N0YXR1cyk7Ci0JCQkJCXJldHVybiBJUlFfSEFORExFRDsKLSAgICAgICAJCQl9Ci0KLQkgICAgICAgIAlpZiAoY2FyZC0+aW5faXNyKSB7Ci0gICAgICAgIAkgICAgICAgCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSIlczogaW50ZXJydXB0IHJlLWVudHJhbmN5IG9uIElSUSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+d2FuZGV2LmlycSk7Ci0JCQkJUzUxNF9pbnRhY2soJmNhcmQtPmh3LCBpbnRfc3RhdHVzKTsKLSAJCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotICAgICAgIAkJCX0KLQotCQkJc3Bpbl9sb2NrKCZjYXJkLT53YW5kZXYubG9jayk7Ci0JCQlpZiAoY2FyZC0+bmV4dCl7Ci0JCQkJc3Bpbl9sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JCQl9Ci0JCQkJCi0JICAgICAgICAgICAgICAgCVM1MTRfaW50YWNrKCZjYXJkLT5odywgaW50X3N0YXR1cyk7Ci0gICAgICAgCQkJaWYgKGNhcmQtPmlzcikKLQkJCQljYXJkLT5pc3IoY2FyZCk7Ci0KLQkJCWlmIChjYXJkLT5uZXh0KXsKLQkJCQlzcGluX3VubG9jaygmY2FyZC0+bmV4dC0+d2FuZGV2LmxvY2spOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJmNhcmQtPndhbmRldi5sb2NrKTsKLQotCQkJLyogaGFuZGxlIGEgbWF4aW11bSBvZiB0d28gaW50ZXJydXB0cyAob25lIGZvciBlYWNoICovCi0JCQkvKiBDUFUgb24gdGhlIGFkYXB0ZXIpIGJlZm9yZSByZXR1cm5pbmcgKi8gIAotCQkJaWYoKCsrIElSUV9jb3VudCkgPT0gMikKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCX0KLQl9Ci0KLQllbHNlIHsJCQkvKiBoYW5kbGUgaW50ZXJydXB0IG9uIFM1MDggYWRhcHRlciAqLwotCi0JCWlmICghY2FyZCB8fCAoKGNhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKSAmJiAhY2FyZC0+Y29uZmlndXJlZCkpCi0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLQkJaWYgKGNhcmQtPmluX2lzcikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogaW50ZXJydXB0IHJlLWVudHJhbmN5IG9uIElSUSAlZCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+d2FuZGV2LmlycSk7Ci0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCX0KLQotCQlzcGluX2xvY2soJmNhcmQtPndhbmRldi5sb2NrKTsKLQkJaWYgKGNhcmQtPm5leHQpewotCQkJc3Bpbl9sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JCX0KLQkKLQkJc2RsYV9pbnRhY2soJmNhcmQtPmh3KTsKLQkJaWYgKGNhcmQtPmlzcikKLQkJCWNhcmQtPmlzcihjYXJkKTsKLQkJCi0JCWlmIChjYXJkLT5uZXh0KXsKLQkJCXNwaW5fdW5sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmNhcmQtPndhbmRldi5sb2NrKTsKLQotCX0KLSAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotI3VuZGVmCWNhcmQKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBwcm90b2NvbC1zcGVjaWZpYyBtb2R1bGVzIHdoZW4gbmV0d29yawotICogaW50ZXJmYWNlIGlzIGJlaW5nIG9wZW4uICBUaGUgb25seSByZWFzb24gd2UgbmVlZCB0aGlzLCBpcyBiZWNhdXNlIHdlCi0gKiBoYXZlIHRvIGNhbGwgTU9EX0lOQ19VU0VfQ09VTlQsIGJ1dCBjYW5ub3QgaW5jbHVkZSAnbW9kdWxlLmgnIHdoZXJlIGl0J3MKLSAqIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UgaW50byB0aGUgc2FtZSBrZXJuZWwgbW9kdWxlLgotICovCi12b2lkIHdhbnBpcGVfb3BlbiAoc2RsYV90KiBjYXJkKQotewotCSsrY2FyZC0+b3Blbl9jbnQ7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgbW9kdWxlcyB3aGVuIG5ldHdvcmsKLSAqIGludGVyZmFjZSBpcyBiZWluZyBjbG9zZWQuICBUaGUgb25seSByZWFzb24gd2UgbmVlZCB0aGlzLCBpcyBiZWNhdXNlIHdlCi0gKiBoYXZlIHRvIGNhbGwgTU9EX0RFQ19VU0VfQ09VTlQsIGJ1dCBjYW5ub3QgaW5jbHVkZSAnbW9kdWxlLmgnIHdoZXJlIGl0J3MKLSAqIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UgaW50byB0aGUgc2FtZSBrZXJuZWwgbW9kdWxlLgotICovCi12b2lkIHdhbnBpcGVfY2xvc2UgKHNkbGFfdCogY2FyZCkKLXsKLQktLWNhcmQtPm9wZW5fY250OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBXQU4gZGV2aWNlIHN0YXRlLgotICovCi12b2lkIHdhbnBpcGVfc2V0X3N0YXRlIChzZGxhX3QqIGNhcmQsIGludCBzdGF0ZSkKLXsKLQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlICE9IHN0YXRlKSB7Ci0JCXN3aXRjaCAoc3RhdGUpIHsKLQkJY2FzZSBXQU5fQ09OTkVDVEVEOgotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBsaW5rIGNvbm5lY3RlZCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBsaW5rIGNvbm5lY3RpbmcuLi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IGxpbmsgZGlzY29ubmVjdGVkIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhcmQtPndhbmRldi5zdGF0ZSA9IHN0YXRlOwotCX0KLQljYXJkLT5zdGF0ZV90aWNrID0gamlmZmllczsKLX0KLQotc2RsYV90ICogd2FucGlwZV9maW5kX2NhcmQgKGNoYXIgKm5hbWUpCi17Ci0JaW50IGNudDsKLQlmb3IgKGNudCA9IDA7IGNudCA8IG5jYXJkczsgKysgY250KSB7Ci0JCXNkbGFfdCogY2FyZCA9ICZjYXJkX2FycmF5W2NudF07Ci0JCWlmICghc3RyY21wKGNhcmQtPmRldm5hbWUsbmFtZSkpCi0JCQlyZXR1cm4gY2FyZDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXNkbGFfdCAqIHdhbnBpcGVfZmluZF9jYXJkX251bSAoaW50IG51bSkKLXsKLQlpZiAobnVtIDwgMSB8fCBudW0gPiBuY2FyZHMpCi0JCXJldHVybiBOVUxMOwkKLQludW0tLTsKLQlyZXR1cm4gJmNhcmRfYXJyYXlbbnVtXTsKLX0KLQotLyoKLSAqIEB3b3JrX3BvaW50ZXI6CXdvcmtfc3RydWN0IHRvIGJlIGRvbmU7Ci0gKiAJCQlzaG91bGQgYWxyZWFkeSBoYXZlIFBSRVBBUkVfV09SSygpIG9yCi0gKiAJCQkgIElOSVRfV09SSygpIGRvbmUgb24gaXQgYnkgY2FsbGVyOwotICovCi12b2lkIHdhbnBpcGVfcXVldWVfd29yayAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3BvaW50ZXIpCi17Ci0JaWYgKHRlc3RfYW5kX3NldF9iaXQoMSwgKHZvaWQqKSZ3YW5waXBlX2JoX2NyaXRpY2FsKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1JJVElDQUwgSU4gUVVFVUlORyBXT1JLXG4iKTsKLQotCXF1ZXVlX3dvcmsod2FucGlwZV93cSwgd29ya19wb2ludGVyKTsKLQljbGVhcl9iaXQoMSwodm9pZCopJndhbnBpcGVfYmhfY3JpdGljYWwpOwotfQotCi12b2lkIHdha2V1cF9za19iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXdhbnBpcGVfY29tbW9uX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0KLQlpZiAodGVzdF9iaXQoMCwmY2hhbi0+Y29tbW9uX2NyaXRpY2FsKSkKLQkJcmV0dXJuOwotCQotCWlmIChjaGFuLT5zayAmJiBjaGFuLT50eF90aW1lcil7Ci0JCWNoYW4tPnR4X3RpbWVyLT5leHBpcmVzPWppZmZpZXMrMTsKLQkJYWRkX3RpbWVyKGNoYW4tPnR4X3RpbWVyKTsKLQl9Ci19Ci0KLWludCBjaGFuZ2VfZGV2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGZsYWdzKQotewotCXN0cnVjdCBpZnJlcSBpZl9pbmZvOwotCW1tX3NlZ21lbnRfdCBmcyA9IGdldF9mcygpOwotCWludCBlcnI7Ci0KLQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0Jc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0JaWZfaW5mby5pZnJfZmxhZ3MgPSBmbGFnczsJCi0KLQlzZXRfZnMoZ2V0X2RzKCkpOyAgICAgLyogZ2V0IHVzZXIgc3BhY2UgYmxvY2sgKi8gCi0JZXJyID0gZGV2aW5ldF9pb2N0bChTSU9DU0lGRkxBR1MsICZpZl9pbmZvKTsKLQlzZXRfZnMoZnMpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotdW5zaWduZWQgbG9uZyBnZXRfaXBfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb3B0aW9uKQotewotCQotCXN0cnVjdCBpbl9pZmFkZHIgKmlmYWRkcjsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KSkgPT0gTlVMTCl7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICgoaWZhZGRyID0gaW5fZGV2LT5pZmFfbGlzdCk9PSBOVUxMICl7Ci0JCWdvdG8gb3V0OwotCX0KLQkKLQlzd2l0Y2ggKG9wdGlvbil7Ci0KLQljYXNlIFdBTl9MT0NBTF9JUDoKLQkJYWRkciA9IGlmYWRkci0+aWZhX2xvY2FsOwotCQlicmVhazsKLQkKLQljYXNlIFdBTl9QT0lOVE9QT0lOVF9JUDoKLQkJYWRkciA9IGlmYWRkci0+aWZhX2FkZHJlc3M7Ci0JCWJyZWFrOwkKLQotCWNhc2UgV0FOX05FVE1BU0tfSVA6Ci0JCWFkZHIgPSBpZmFkZHItPmlmYV9tYXNrOwotCQlicmVhazsKLQotCWNhc2UgV0FOX0JST0FEQ0FTVF9JUDoKLQkJYWRkciA9IGlmYWRkci0+aWZhX2Jyb2FkY2FzdDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIGFkZHI7Ci19CQotCi12b2lkIGFkZF9nYXRld2F5KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQltbV9zZWdtZW50X3Qgb2xkZnM7Ci0Jc3RydWN0IHJ0ZW50cnkgcm91dGU7Ci0JaW50IHJlczsKLQotCW1lbXNldCgoY2hhciopJnJvdXRlLDAsc2l6ZW9mKHN0cnVjdCBydGVudHJ5KSk7Ci0KLQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKQotCQkmKHJvdXRlLnJ0X2RzdCkpLT5zaW5fYWRkci5zX2FkZHIgPSAwOwotCSgoc3RydWN0IHNvY2thZGRyX2luICopCi0JCSYocm91dGUucnRfZHN0KSktPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCi0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKLQkJJihyb3V0ZS5ydF9nZW5tYXNrKSktPnNpbl9hZGRyLnNfYWRkciA9IDA7Ci0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgCi0JCSYocm91dGUucnRfZ2VubWFzaykpIC0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0KLQotCXJvdXRlLnJ0X2ZsYWdzID0gMDsgIAotCXJvdXRlLnJ0X2RldiA9IGRldi0+bmFtZTsKLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsKLQlyZXMgPSBpcF9ydF9pb2N0bChTSU9DQUREUlQsJnJvdXRlKTsKLQlzZXRfZnMob2xkZnMpOwotCi0JaWYgKHJlcyA9PSAwKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEdhdGV3YXkgYWRkZWQgZm9yICVzXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCX0KLQotCXJldHVybjsKLX0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKioqKioqIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vd2FucGlwZV9tdWx0cHBwLmMgYi9kcml2ZXJzL25ldC93YW4vd2FucGlwZV9tdWx0cHBwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMmExMTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3dhbnBpcGVfbXVsdHBwcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogd2FucGlwZV9tdWx0cHBwLmMgTXVsdGktUG9ydCBQUFAgZHJpdmVyIG1vZHVsZS4KLSoKLSogQXV0aG9yczogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRGVjIDE1IDIwMDAgICBVcGRhdGVkIGZvciAyLjQuWCBrZXJuZWwKLSogTm92IDE1IDIwMDAgICBGaXhlZCB0aGUgU3luY1BQUCBzdXBwb3J0IGZvciBrZXJuZWxzIDIuMi4xNiBhbmQgaGlnaGVyLgotKiAgIAkJVGhlIHBwcHN0cnVjdCBoYXMgY2hhbmdlZC4KLSogSnVsIDEzIDIwMDAJVXNpbmcgdGhlIGtlcm5lbCBTeW5jcHBwIG1vZHVsZSBvbiB0b3Agb2YgUkFXIFdhbnBpcGUgQ0hETEMKLSogIAkJbW9kdWxlLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfKiBkZWZpbmVzICovCi0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgbWFjcm8gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4JCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2NoZGxjLmg+CQkvKiBDSERMQyBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2FzeS5oPiAgICAgICAgICAgCS8qIENIRExDIChhc3luYykgQVBJIGRlZmluaXRpb25zICovCi0KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlX2NvbW1vbi5oPiAgICAvKiBTb2NrZXQgRHJpdmVyIGNvbW1vbiBhcmVhICovCi0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZS5oPgkJCi0KLQotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8bmV0L3N5bmNwcHAuaD4KLQotCi0vKioqKioqIERlZmluZXMgJiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmCV9ERUJVR18KLSNkZWZpbmUJU1RBVElDCi0jZWxzZQotI2RlZmluZQlTVEFUSUMJCXN0YXRpYwotI2VuZGlmCi0KLS8qIHJlYXNvbnMgZm9yIGVuYWJsaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgb24gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VEUCAgIAkweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUJMHgwMgotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfQ09ORklHICAweDA0Ci0gCi0jZGVmaW5lCUNIRExDX0RGTFRfREFUQV9MRU4JMTUwMAkJLyogZGVmYXVsdCBNVFUgKi8KLSNkZWZpbmUgQ0hETENfSERSX0xFTgkJMQotCi0jZGVmaW5lIElGRl9QT0lOVFRPUE9JTlQgMHgxMAotCi0jZGVmaW5lIENIRExDX0FQSSAweDAxCi0KLSNkZWZpbmUgUE9SVCh4KSAgICh4ID09IDAgPyAiUFJJTUFSWSIgOiAiU0VDT05EQVJZIiApCi0jZGVmaW5lIE1BWF9CSF9CVUZGCTEwCi0KLSNkZWZpbmUgQ1JDX0xFTkdUSCAJMiAKLSNkZWZpbmUgUFBQX0hFQURFUl9MRU4gCTQKLSAKLS8qKioqKipEYXRhIFN0cnVjdHVyZXMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGluIHRoZSBwcml2YXRlIGRhdGEgYXJlYSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KLSAqIFRoZSBjYXJkIHN0cnVjdHVyZSB1c2VkIHRvIG9jY3VweSB0aGUgcHJpdmF0ZSBhcmVhIGJ1dCBub3cgdGhlIGZvbGxvd2luZyAKLSAqIHN0cnVjdHVyZSB3aWxsIGluY29ycG9yYXRlIHRoZSBjYXJkIHN0cnVjdHVyZSBhbG9uZyB3aXRoIENIRExDIHNwZWNpZmljIGRhdGEKLSAqLwotCi10eXBlZGVmIHN0cnVjdCBjaGRsY19wcml2YXRlX2FyZWEKLXsKLQl2b2lkICppZl9wdHI7CQkJCS8qIEdlbmVyYWwgUG9pbnRlciB1c2VkIGJ5IFNQUFAgKi8KLQl3YW5waXBlX2NvbW1vbl90IGNvbW1vbjsKLQlzZGxhX3QJCSpjYXJkOwotCWludCAJCVRyYWNpbmdFbmFibGVkOwkJLyogRm9yIGVuYWJsaW5nIFRyYWNpbmcgKi8KLQl1bnNpZ25lZCBsb25nIAljdXJyX3RyYWNlX2FkZHI7CS8qIFVzZWQgZm9yIFRyYWNpbmcgKi8KLQl1bnNpZ25lZCBsb25nIAlzdGFydF90cmFjZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgCWVuZF90cmFjZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgCWJhc2VfYWRkcl90cmFjZV9idWZmZXI7Ci0JdW5zaWduZWQgbG9uZyAJZW5kX2FkZHJfdHJhY2VfYnVmZmVyOwotCXVuc2lnbmVkIHNob3J0IAludW1iZXJfdHJhY2VfZWxlbWVudHM7Ci0JdW5zaWduZWQgIAlhdmFpbGFibGVfYnVmZmVyX3NwYWNlOwotCXVuc2lnbmVkIGxvbmcgCXJvdXRlcl9zdGFydF90aW1lOwotCXVuc2lnbmVkIGNoYXIgCXJvdXRlX3N0YXR1czsKLQl1bnNpZ25lZCBjaGFyIAlyb3V0ZV9yZW1vdmVkOwotCXVuc2lnbmVkIGxvbmcgCXRpY2tfY291bnRlcjsJCS8qIEZvciA1cyB0aW1lb3V0IGNvdW50ZXIgKi8KLQl1bnNpZ25lZCBsb25nIAlyb3V0ZXJfdXBfdGltZTsKLSAgICAgICAgdTMyICAgICAgICAgICAgIElQX2FkZHJlc3M7CQkvKiBJUCBhZGRyZXNzaW5nICovCi0gICAgICAgIHUzMiAgICAgICAgICAgICBJUF9uZXRtYXNrOwotCXVuc2lnbmVkIGNoYXIgIG1jOwkJCS8qIE11bGl0Y2FzdCBzdXBwb3J0IG9uL29mZiAqLwotCXVuc2lnbmVkIHNob3J0IHVkcF9wa3RfbGd0aDsJCS8qIHVkcCBwYWNrZXQgcHJvY2Vzc2luZyAqLwotCWNoYXIgdWRwX3BrdF9zcmM7Ci0JY2hhciB1ZHBfcGt0X2RhdGFbTUFYX0xHVEhfVURQX01HTlRfUEtUXTsKLQl1bnNpZ25lZCBzaG9ydCB0aW1lcl9pbnRfZW5hYmxlZDsKLQljaGFyIHVwZGF0ZV9jb21tc19zdGF0czsJCS8qIHVwZGF0aW5nIGNvbW1zIHN0YXRzICovCi0KLQkvL0ZJWE1FOiBhZGQgZHJpdmVyIHN0YXRzIGFzIHBlciBmcmFtZSByZWxheSEKLQotfSBjaGRsY19wcml2YXRlX2FyZWFfdDsKLQotLyogUm91dGUgU3RhdHVzIG9wdGlvbnMgKi8KLSNkZWZpbmUgTk9fUk9VVEUJMHgwMAotI2RlZmluZSBBRERfUk9VVEUJMHgwMQotI2RlZmluZSBST1VURV9BRERFRAkweDAyCi0jZGVmaW5lIFJFTU9WRV9ST1VURQkweDAzCi0KLQotLyogdmFyaWFibGUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIEZUMSBtb25pdG9yIHN0YXR1cyAqLwotc3RhdGljIGludCByQ291bnQgPSAwOwotCi0vKiB2YXJpYWJsZSBmb3IgdHJhY2tpbmcgaG93IG1hbnkgaW50ZXJmYWNlcyB0byBvcGVuIGZvciBXQU5QSVBFIG9uIHRoZQotICAgdHdvIHBvcnRzICovCi0KLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlIGNhbGxlZCBieSB0aGUgV0FOIHJvdXRlciBtb2R1bGUuICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KTsKLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKTsKLXN0YXRpYyBpbnQgZGVsX2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotCi0vKiBOZXR3b3JrIGRldmljZSBpbnRlcmZhY2UgKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIGlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKiBDSERMQyBGaXJtd2FyZSBpbnRlcmZhY2UgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IGNoZGxjX2NvbmZpZ3VyZSAJKHNkbGFfdCogY2FyZCwgdm9pZCogZGF0YSk7Ci1zdGF0aWMgaW50IGNoZGxjX2NvbW1fZW5hYmxlIAkoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9kaXNhYmxlIAkoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIAkoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpOwotc3RhdGljIGludCBjaGRsY19zZXRfaW50cl9tb2RlIAkoc2RsYV90KiBjYXJkLCB1bnNpZ25lZCBtb2RlKTsKLXN0YXRpYyBpbnQgY2hkbGNfc2VuZCAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIGludCBjaGRsY19yZWFkX2NvbW1fZXJyX3N0YXRzIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBjaGRsY19yZWFkX29wX3N0YXRzIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBjb25maWdfY2hkbGMgKHNkbGFfdCAqY2FyZCk7Ci0KLQotLyogTWlzY2VsbGFuZW91cyBDSERMQyBGdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgc2V0X2NoZGxjX2NvbmZpZyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIGluaXRfY2hkbGNfdHhfcnhfYnVmZihzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpOwotc3RhdGljIGludCBwcm9jZXNzX2NoZGxjX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBwcm9jZXNzX2dsb2JhbF9leGNlcHRpb24oc2RsYV90ICpjYXJkKTsKLXN0YXRpYyBpbnQgdXBkYXRlX2NvbW1zX3N0YXRzKHNkbGFfdCogY2FyZCwKLSAgICAgICAgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSk7Ci1zdGF0aWMgdm9pZCBwb3J0X3NldF9zdGF0ZSAoc2RsYV90ICpjYXJkLCBpbnQpOwotCi0vKiBJbnRlcnJ1cHQgaGFuZGxlcnMgKi8KLXN0YXRpYyB2b2lkIHdzcHBwX2lzciAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHJ4X2ludHIgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyKHNkbGFfdCAqKTsKLQotLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKTsKLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IgLCBzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCSAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEpOwotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsICAKLQkJCQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICosIGludCk7Ci1zdGF0aWMgdm9pZCBzNTA4X2xvY2sgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLXN0YXRpYyB2b2lkIHM1MDhfdW5sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCBzZW5kX3BwcF90ZXJtX3JlcXVlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLQotc3RhdGljIGludCAgSW50cl90ZXN0X2NvdW50ZXI7Ci0vKioqKioqIFB1YmxpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBXQU5QSVBFIG1vZHVsZSBkdXJpbmcgc2V0dXAuICBBdCB0aGlzCi0gKiBwb2ludCBhZGFwdGVyIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYW5kIGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgbyByZWFkIGZpcm13YXJlIHZlcnNpb24gKHRvIG1ha2Ugc3VyZSBpdCdzIGFsaXZlKQotICogIG8gY29uZmlndXJlIGFkYXB0ZXIKLSAqICBvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSBhZGFwdGVyIGRhdGEgc3BhY2UuCi0gKgotICogUmV0dXJuOgkwCW8uay4KLSAqCQk8IDAJZmFpbHVyZS4KLSAqLwotaW50IHdzcHBwX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZikKLXsKLQl1bnNpZ25lZCBjaGFyIHBvcnRfbnVtOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcGVybWl0dGVkX2JhdWQgPSAwOwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzOwotCi0JdW5pb24KLQkJewotCQljaGFyIHN0cls4MF07Ci0JCX0gdTsKLQl2b2xhdGlsZSBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWI7Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iMTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBJRCAqLwotCWlmIChjb25mLT5jb25maWdfaWQgIT0gV0FOQ09ORklHX01QUFApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgY29uZmlndXJhdGlvbiBJRCAldSFcbiIsCi0JCQkJICBjYXJkLT5kZXZuYW1lLCBjb25mLT5jb25maWdfaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBGaW5kIG91dCB3aGljaCBQb3J0IHRvIHVzZSAqLwotCWlmICgoY29uZi0+Y29tbV9wb3J0ID09IFdBTk9QVF9QUkkpIHx8IChjb25mLT5jb21tX3BvcnQgPT0gV0FOT1BUX1NFQykpewotCQlpZiAoY2FyZC0+bmV4dCl7Ci0KLQkJCWlmIChjb25mLT5jb21tX3BvcnQgIT0gY2FyZC0+bmV4dC0+dS5jLmNvbW1fcG9ydCl7Ci0JCQkJY2FyZC0+dS5jLmNvbW1fcG9ydCA9IGNvbmYtPmNvbW1fcG9ydDsKLQkJCX1lbHNlewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVSUk9SIC0gJXMgcG9ydCB1c2VkIVxuIiwKLSAgICAgICAgCQkgICAgICAgIAljYXJkLT53YW5kZXYubmFtZSwgUE9SVChjb25mLT5jb21tX3BvcnQpKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfWVsc2V7Ci0JCQljYXJkLT51LmMuY29tbV9wb3J0ID0gY29uZi0+Y29tbV9wb3J0OwotCQl9Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVSUk9SIC0gSW52YWxpZCBQb3J0IFNlbGVjdGVkIVxuIiwKLSAgICAgICAgICAgICAgICAJCQljYXJkLT53YW5kZXYubmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkKLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzICovCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCi0JCWlmIChjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9QUkkpewkKLQkJCWNhcmQtPm1ib3ggID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZTsKLQkJfWVsc2V7Ci0JCQljYXJkLT5tYm94ICA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2UgKyAKLQkJCQlTRUNfQkFTRV9BRERSX01CX1NUUlVDVCAtIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUOwotCQl9CQotCX1lbHNleyAKLQkJLyogZm9yIGEgUzUxNCBhZGFwdGVyLCBzZXQgYSBwb2ludGVyIHRvIHRoZSBhY3R1YWwgbWFpbGJveCBpbiB0aGUgKi8KLQkJLyogYWxsb2NhdGVkIHZpcnR1YWwgbWVtb3J5IGFyZWEgKi8KLQkJaWYgKGNhcmQtPnUuYy5jb21tX3BvcnQgPT0gV0FOT1BUX1BSSSl7Ci0JCQljYXJkLT5tYm94ID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZSArIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUOwotCQl9ZWxzZXsKLQkJCWNhcmQtPm1ib3ggPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlICsgU0VDX0JBU0VfQUREUl9NQl9TVFJVQ1Q7Ci0JCX0JCi0JfQotCi0JbWIgPSBtYjEgPSBjYXJkLT5tYm94OwotCi0JaWYgKCFjYXJkLT5jb25maWd1cmVkKXsKLQotCQkvKiBUaGUgYm9hcmQgd2lsbCBwbGFjZSBhbiAnSScgaW4gdGhlIHJldHVybiBjb2RlIHRvIGluZGljYXRlIHRoYXQgaXQgaXMKLQkgICAJcmVhZHkgdG8gYWNjZXB0IGNvbW1hbmRzLiAgV2UgZXhwZWN0IHRoaXMgdG8gYmUgY29tcGxldGVkIGluIGxlc3MKLSAgICAgICAgICAgCXRoYW4gMSBzZWNvbmQuICovCi0KLQkJdGltZW91dCA9IGppZmZpZXMgKyAxICogSFo7Ci0JCXdoaWxlIChtYi0+cmV0dXJuX2NvZGUgIT0gJ0knKQkvKiBXYWl0IDFzIGZvciBib2FyZCB0byBpbml0aWFsaXplICovCi0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgYnJlYWs7Ci0KLQkJaWYgKG1iLT5yZXR1cm5fY29kZSAhPSAnSScpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IEluaXRpYWxpemF0aW9uIG5vdCBjb21wbGV0ZWQgYnkgYWRhcHRlclxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlBsZWFzZSBjb250YWN0IFNhbmdvbWEgcmVwcmVzZW50YXRpdmUuXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JLyogUmVhZCBmaXJtd2FyZSB2ZXJzaW9uLiAgTm90ZSB0aGF0IHdoZW4gYWRhcHRlciBpbml0aWFsaXplcywgaXQKLQkgKiBjbGVhcnMgdGhlIG1haWxib3gsIHNvIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgZmlyc3QgY29tbWFuZCB3YXMKLQkgKiBleGVjdXRlZCBzdWNjZXNzZnVsbHkgd2hlbiBpbiBmYWN0IGl0IHdhcyBtZXJlbHkgZXJhc2VkLiBUbyB3b3JrCi0JICogYXJvdW5kIHRoaXMsIHdlIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbW1hbmQgdHdpY2UuCi0JICovCi0KLQlpZiAoY2hkbGNfcmVhZF92ZXJzaW9uKGNhcmQsIHUuc3RyKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBSYXcgQ0hETEMgZmlybXdhcmUgdiVzXG4iIAotCQkJICIlczogZm9yIE11bHRpLVBvcnQgUFBQIHByb3RvY29sLlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsdS5zdHIsY2FyZC0+ZGV2bmFtZSk7IAotCi0JY2FyZC0+aXNyCQkJPSAmd3NwcHBfaXNyOwotCWNhcmQtPnBvbGwJCQk9IE5VTEw7Ci0JY2FyZC0+ZXhlYwkJCT0gTlVMTDsKLQljYXJkLT53YW5kZXYudXBkYXRlCQk9ICZ1cGRhdGU7Ci0gCWNhcmQtPndhbmRldi5uZXdfaWYJCT0gJm5ld19pZjsKLQljYXJkLT53YW5kZXYuZGVsX2lmCQk9ICZkZWxfaWY7Ci0JY2FyZC0+d2FuZGV2LnVkcF9wb3J0ICAgCT0gY29uZi0+dWRwX3BvcnQ7Ci0KLQljYXJkLT53YW5kZXYubmV3X2lmX2NudCA9IDA7Ci0KLQkvKiByZXNldCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSAndXBkYXRlKCknIHByb2MgaGFzIGJlZW4gY2FsbGVkICovCi0JY2FyZC0+dS5jLnVwZGF0ZV9jYWxsX2NvdW50ID0gMDsKLQkKLQljYXJkLT53YW5kZXYudHRsID0gY29uZi0+dHRsOwotCWNhcmQtPndhbmRldi5pbnRlcmZhY2UgPSBjb25mLT5pbnRlcmZhY2U7IAotCi0JaWYgKChjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9TRUMgJiYgY29uZi0+aW50ZXJmYWNlID09IFdBTk9QVF9WMzUpJiYKLQkgICAgY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRVJST1IgLSBWMzUgSW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWQgb24gUzUwOCAlcyBwb3J0IFxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIFBPUlQoY2FyZC0+dS5jLmNvbW1fcG9ydCkpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQotCWNhcmQtPndhbmRldi5jbG9ja2luZyA9IGNvbmYtPmNsb2NraW5nOwotCi0JcG9ydF9udW0gPSBjYXJkLT51LmMuY29tbV9wb3J0OwotCi0JLyogU2V0dXAgUG9ydCBCcHMgKi8KLQotCWlmKGNhcmQtPndhbmRldi5jbG9ja2luZykgewotCQlpZigocG9ydF9udW0gPT0gV0FOT1BUX1BSSSkgfHwgY2FyZC0+dS5jLnJlY2VpdmVfb25seSkgewotCQkJLyogRm9yIFByaW1hcnkgUG9ydCAwICovCi0gICAgICAgICAgICAgICAJCW1heF9wZXJtaXR0ZWRfYmF1ZCA9Ci0JCQkJKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSA/Ci0JCQkJUFJJX01BWF9CQVVEX1JBVEVfUzUxNCA6IAotCQkJCVBSSV9NQVhfQkFVRF9SQVRFX1M1MDg7Ci0JCX0KLQkJZWxzZSBpZihwb3J0X251bSA9PSBXQU5PUFRfU0VDKSB7Ci0JCQkvKiBGb3IgU2Vjb25kYXJ5IFBvcnQgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3Blcm1pdHRlZF9iYXVkID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDX01BWF9CQVVEX1JBVEVfUzUxNCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ19NQVhfQkFVRF9SQVRFX1M1MDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gIAotCQkJaWYoY29uZi0+YnBzID4gbWF4X3Blcm1pdHRlZF9iYXVkKSB7Ci0JCQkJY29uZi0+YnBzID0gbWF4X3Blcm1pdHRlZF9iYXVkOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCYXVkIHRvbyBoaWdoIVxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotIAkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQmF1ZCByYXRlIHNldCB0byAlbHUgYnBzXG4iLCAKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUsIG1heF9wZXJtaXR0ZWRfYmF1ZCk7Ci0JCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJY2FyZC0+d2FuZGV2LmJwcyA9IGNvbmYtPmJwczsKLQl9ZWxzZXsKLSAgICAgICAgCWNhcmQtPndhbmRldi5icHMgPSAwOwotICAJfQotCi0JLyogU2V0dXAgdGhlIFBvcnQgTVRVICovCi0JaWYoKHBvcnRfbnVtID09IFdBTk9QVF9QUkkpIHx8IGNhcmQtPnUuYy5yZWNlaXZlX29ubHkpIHsKLQotCQkvKiBGb3IgUHJpbWFyeSBQb3J0IDAgKi8KLQkJY2FyZC0+d2FuZGV2Lm10dSA9Ci0JCQkoY29uZi0+bXR1ID49IE1JTl9MR1RIX0NIRExDX0RBVEFfQ0ZHKSA/Ci0JCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPm10dSwgUFJJX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FKSA6Ci0JCQlDSERMQ19ERkxUX0RBVEFfTEVOOwotCX0gZWxzZSBpZihwb3J0X251bSA9PSBXQU5PUFRfU0VDKSB7IAotCQkvKiBGb3IgU2Vjb25kYXJ5IFBvcnQgMSAqLwotCQljYXJkLT53YW5kZXYubXR1ID0KLQkJCShjb25mLT5tdHUgPj0gTUlOX0xHVEhfQ0hETENfREFUQV9DRkcpID8KLQkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+bXR1LCBTRUNfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUUpIDoKLQkJCUNIRExDX0RGTFRfREFUQV9MRU47Ci0JfQotCi0JLyogQWRkIG9uIGEgUFBQIEhlYWRlciAqLwotCWNhcmQtPndhbmRldi5tdHUgKz0gUFBQX0hFQURFUl9MRU47Ci0KLQkvKiBTZXQgdXAgdGhlIGludGVycnVwdCBzdGF0dXMgYXJlYSAqLwotCS8qIFJlYWQgdGhlIENIRExDIENvbmZpZ3VyYXRpb24gYW5kIG9idGFpbjogCi0JICoJUHRyIHRvIHNoYXJlZCBtZW1vcnkgaW5mb3Igc3RydWN0Ci0gICAgICAgICAqIFVzZSB0aGlzIHBvaW50ZXIgdG8gY2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiBjYXJkLT51LmMuZmxhZ3MgIQotIAkgKi8KLQltYjEtPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iMS0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIxKSA/IG1iMS0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotCQljbGVhcl9iaXQoMSwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCi0gICAgICAgICAgICAgICAgaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0gICAgICAgICAgICAgICAgCWVuYWJsZV9pcnEoY2FyZC0+aHcuaXJxKTsKLQotCQljaGRsY19lcnJvcihjYXJkLCBlcnIsIG1iMSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KXsKLSAgICAgICAgICAgICAgIAljYXJkLT51LmMuZmxhZ3MgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgIAkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYjEtPmRhdGEpLT4KLQkJCXB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0KSk7Ci0gICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5mbGFncyA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgICAgICAgICAgKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYjEtPmRhdGEpLT4KLQkJCXB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0ICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0JfQotCQotCWZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCQotCS8qIFRoaXMgaXMgZm9yIHRoZSBwb3J0cyBsaW5rIHN0YXRlICovCi0JY2FyZC0+d2FuZGV2LnN0YXRlID0gV0FOX0RVQUxQT1JUOwotCWNhcmQtPnUuYy5zdGF0ZSA9IFdBTl9ESVNDT05ORUNURUQ7Ci0KLQotCWlmICghY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayl7Ci0JCWVyciA9IGludHJfdGVzdChjYXJkKTsKLQotCQlpZihlcnIgfHwgKEludHJfdGVzdF9jb3VudGVyIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSKSkgeyAKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludGVycnVwdCB0ZXN0IGZhaWxlZCAoJWkpXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBJbnRyX3Rlc3RfY291bnRlcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgaW50ZXJydXB0XG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAgLUVJTzsKLQkJfQotCQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcnJ1cHQgdGVzdCBwYXNzZWQgKCVpKVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgSW50cl90ZXN0X2NvdW50ZXIpOwotCX0KLQotCi0JaWYgKGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9USU1FUikpewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBzZXQgaW50ZXJydXB0IHRyaWdnZXJzIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIC1FSU87CQotICAgICAgICB9Ci0JCi0JLyogTWFzayB0aGUgVGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPSAKLQkJfkFQUF9JTlRfT05fVElNRVI7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqIFdBTiBEZXZpY2UgRHJpdmVyIEVudHJ5IFBvaW50cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSBkZXZpY2Ugc3RhdHVzICYgc3RhdGlzdGljcwotICogVGhpcyBwcm9jZWR1cmUgaXMgY2FsbGVkIHdoZW4gdXBkYXRpbmcgdGhlIFBST0MgZmlsZSBzeXN0ZW0gYW5kIHJldHVybnMKLSAqIHZhcmlvdXMgY29tbXVuaWNhdGlvbnMgc3RhdGlzdGljcy4gVGhlc2Ugc3RhdGlzdGljcyBhcmUgYWNjdW11bGF0ZWQgZnJvbSAzIAotICogZGlmZmVyZW50IGxvY2F0aW9uczoKLSAqIAkxKSBUaGUgJ2lmX3N0YXRzJyByZWNvcmRlZCBmb3IgdGhlIGRldmljZS4KLSAqIAkyKSBDb21tdW5pY2F0aW9uIGVycm9yIHN0YXRpc3RpY3Mgb24gdGhlIGFkYXB0ZXIuCi0gKiAgICAgIDMpIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgb24gdGhlIGFkYXB0ZXIuCi0gKiBUaGUgYm9hcmQgbGV2ZWwgc3RhdGlzdGljcyBhcmUgcmVhZCBkdXJpbmcgYSB0aW1lciBpbnRlcnJ1cHQuIE5vdGUgdGhhdCB3ZSAKLSAqIHJlYWQgdGhlIGVycm9yIGFuZCBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIGR1cmluZyBjb25zZWNpdGl2ZSB0aW1lciB0aWNrcyBzbwotICogYXMgdG8gbWluaW1pemUgdGhlIHRpbWUgdGhhdCB3ZSBhcmUgaW5zaWRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpCi17Ci0Jc2RsYV90KiBjYXJkID0gd2FuZGV2LT5wcml2YXRlOwotIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICB2b2xhdGlsZSBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhOwotICAgICAgICBTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFnczsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkKLQlpZih3YW5kZXYtPnN0YXRlID09IFdBTl9VTkNPTkZJR1VSRUQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogbW9yZSBzYW5pdHkgY2hlY2tzICovCi0gICAgICAgIGlmKCFjYXJkLT51LmMuZmxhZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZigoZGV2PWNhcmQtPndhbmRldi5kZXYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYoKGNoZGxjX3ByaXZfYXJlYT1kZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0gICAgICAJZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0KLSAgICAgICAJaWYoY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMpewotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JCQkKLQkvKiB3ZSB3aWxsIG5lZWQgMiB0aW1lciBpbnRlcnJ1cHRzIHRvIGNvbXBsZXRlIHRoZSAqLwotCS8qIHJlYWRpbmcgb2YgdGhlIHN0YXRpc3RpY3MgKi8KLQljaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDI7Ci0gICAgICAgCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gfD0gQVBQX0lOVF9PTl9USU1FUjsKLQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkID0gVE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLSAgCi0JLyogd2FpdCBhIG1heGltdW0gb2YgMSBzZWNvbmQgZm9yIHRoZSBzdGF0aXN0aWNzIHRvIGJlIHVwZGF0ZWQgKi8gCi0gICAgICAgIHRpbWVvdXQgPSBqaWZmaWVzICsgMSAqIEhaOwotICAgICAgICBmb3IoOzspIHsKLQkJaWYoY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPT0gMCkKLQkJCWJyZWFrOwotICAgICAgICAgICAgICAgIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKXsKLSAgICAJCQljaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDA7Ci0gCQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPQotCQkJCX5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOyAKLSAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotICAgICAgICB9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCi0gKiBoYW5kbGVkLgotICogbyBwYXJzZSBtZWRpYS0gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIHRoYXQgYSBuZXcgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZAotICogbyBhbGxvY2F0ZSByZXNvdXJjZXMsIGlmIG5lY2Vzc2FyeQotICogbyBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0YXJhdGlvbi4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBwZGV2LAotCQkgIHdhbmlmX2NvbmZfdCogY29uZikKLXsKLQotCXN0cnVjdCBwcHBfZGV2aWNlICpwcHBkZXYgPSAoc3RydWN0IHBwcF9kZXZpY2UgKilwZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotCXN0cnVjdCBzcHBwICpzcDsKLQlzZGxhX3QqIGNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYTsKLQkKLQlpZiAoKGNvbmYtPm5hbWVbMF0gPT0gJ1wwJykgfHwgKHN0cmxlbihjb25mLT5uYW1lKSA+IFdBTl9JRk5BTUVfU1opKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGludGVyZmFjZSBuYW1lIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCQotCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLwotCWNoZGxjX3ByaXZfYXJlYSA9IGttYWxsb2Moc2l6ZW9mKGNoZGxjX3ByaXZhdGVfYXJlYV90KSwgR0ZQX0tFUk5FTCk7Ci0JCi0JaWYoY2hkbGNfcHJpdl9hcmVhID09IE5VTEwpIAotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbXNldChjaGRsY19wcml2X2FyZWEsIDAsIHNpemVvZihjaGRsY19wcml2YXRlX2FyZWFfdCkpOwotCi0JY2hkbGNfcHJpdl9hcmVhLT5jYXJkID0gY2FyZDsgCi0KLQkvKiBpbml0aWFsaXplIGRhdGEgKi8KLQlzdHJjcHkoY2FyZC0+dS5jLmlmX25hbWUsIGNvbmYtPm5hbWUpOwotCi0JaWYoY2FyZC0+d2FuZGV2Lm5ld19pZl9jbnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAga2ZyZWUoY2hkbGNfcHJpdl9hcmVhKTsKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQotCi0JY2FyZC0+d2FuZGV2Lm5ld19pZl9jbnQrKzsKLQotCWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCi0JLy9XZSBkb24ndCBuZWVkIHRoaXMgYW55IG1vcmUKLQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IE5PX1JPVVRFOwotCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfcmVtb3ZlZCA9IDA7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogRmlybXdhcmUgcnVubmluZyBpbiBIRExDIFNUUkVBTUlORyBNb2RlXG4iLAotCQl3YW5kZXYtPm5hbWUpOwotCQotCS8qIFNldHVwIHdhbnBpcGUgYXMgYSByb3V0ZXIgKFdBTlBJUEUpIG9yIGFzIGFuIEFQSSAqLwotCWlmKCBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiV0FOUElQRSIpID09IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciBydW5uaW5nIGluIFdBTlBJUEUgbW9kZSFcbiIsCi0JCQl3YW5kZXYtPm5hbWUpOwotCQljYXJkLT51LmMudXNlZGJ5ID0gV0FOUElQRTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBBUEkgTW9kZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBTeW5jUFBQIVxuIiwKLQkJCXdhbmRldi0+bmFtZSk7Ci0JCWtmcmVlKGNoZGxjX3ByaXZfYXJlYSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEdldCBNdWx0aWNhc3QgSW5mb3JtYXRpb24gKi8KLQljaGRsY19wcml2X2FyZWEtPm1jID0gY29uZi0+bWM7Ci0KLQotCWNoZGxjX3ByaXZfYXJlYS0+aWZfcHRyID0gcHBwZGV2OwotCi0JLyogcHJlcGFyZSBuZXR3b3JrIGRldmljZSBkYXRhIHNwYWNlIGZvciByZWdpc3RyYXRpb24gKi8KLQotCXN0cmNweShkZXYtPm5hbWUsY2FyZC0+dS5jLmlmX25hbWUpOwotCi0JLyogQXR0YWNoIFBQUCBwcm90b2NvbCBsYXllciB0byBwcHBkZXYKLQkgKiBUaGUgc3BwcF9hdHRhY2goKSB3aWxsIGluaXRpbGl6ZSB0aGUgZGV2IHN0cnVjdHVyZQotICAgICAgICAgKiBhbmQgc2V0dXAgcHBwIGxheWVyIHByb3RvY29scy4KLSAgICAgICAgICogQWxsIHdlIGhhdmUgdG8gZG8gaXMgdG8gYmluZCBpbjoKLSAgICAgICAgICogICAgICAgIGlmX29wZW4oKSwgaWZfY2xvc2UoKSwgaWZfc2VuZCgpIGFuZCBnZXRfc3RhdHMoKSBmdW5jdGlvbnMuCi0gICAgICAgICAqLwotCXNwcHBfYXR0YWNoKHBwcGRldik7Ci0JZGV2ID0gcHBwZGV2LT5kZXY7Ci0Jc3AgPSAmcHBwZGV2LT5zcHBwOwotCQotCS8qIEVuYWJsZSBQUFAgRGVidWdnaW5nICovCi0JLy8gRklYTUUgRml4IHRoaXMgdXAgc29tZWhvdwotCS8vc3AtPnBwX2ZsYWdzIHw9IFBQX0RFQlVHOyAJCi0Jc3AtPnBwX2ZsYWdzICY9IH5QUF9DSVNDTzsKLQotCWRldi0+aW5pdCA9ICZpZl9pbml0OwotCWRldi0+cHJpdiA9IGNoZGxjX3ByaXZfYXJlYTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZWxldGUgbG9naWNhbCBjaGFubmVsLgotICovCi1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hkbGNfcHJpdl9hcmVhLT5jYXJkOwotCXVuc2lnbmVkIGxvbmcgc21wX2xvY2s7Ci0JCi0JLyogRGV0YWNoIHRoZSBQUFAgbGF5ZXIgKi8KLQlwcmludGsoS0VSTl9JTkZPICIlczogRGV0YWNoaW5nIFN5bmNQUFAgTW9kdWxlIGZyb20gJXNcbiIsCi0JCQl3YW5kZXYtPm5hbWUsZGV2LT5uYW1lKTsKLQotCWxvY2tfYWRhcHRlcl9pcnEoJndhbmRldi0+bG9jaywmc21wX2xvY2spOwotCi0Jc3BwcF9kZXRhY2goZGV2KTsKLQljaGRsY19wcml2X2FyZWEtPmlmX3B0cj1OVUxMOwotCQotCWNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgMCk7Ci0JaWYgKGNhcmQtPnUuYy5jb21tX2VuYWJsZWQpCi0JCWNoZGxjX2NvbW1fZGlzYWJsZShjYXJkKTsKLQl1bmxvY2tfYWRhcHRlcl9pcnEoJndhbmRldi0+bG9jaywmc21wX2xvY2spOwotCQotCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKiBOZXR3b3JrIERldmljZSBJbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBMaW51eCBuZXR3b3JrIGludGVyZmFjZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9ubHkgb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UsIGR1cmluZyBMaW51eCBuZXR3b3JrCi0gKiBpbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiAgUmV0dXJuaW5nIGFueXRoaW5nIGJ1dCB6ZXJvIHdpbGwgZmFpbCBpbnRlcmZhY2UKLSAqIHJlZ2lzdHJhdGlvbi4KLSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0JCi0JLyogTk9URTogTW9zdCBvZiB0aGUgZGV2IGluaXRpYWxpemF0aW9uIHdhcwotICAgICAgICAgKiAgICAgICBkb25lIGluIHNwcHBfYXR0YWNoKCksIGNhbGxlZCBieSBuZXdfaWYoKSAKLSAgICAgICAgICogICAgICAgZnVuY3Rpb24uIEFsbCB3ZSBoYXZlIHRvIGRvIGhlcmUgaXMKLSAgICAgICAgICogICAgICAgdG8gbGluayBmb3VyIG1ham9yIHJvdXRpbmVzIGJlbG93LiAKLSAgICAgICAgICovCi0KLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9ICZpZl9vcGVuOwotCWRldi0+c3RvcAkJPSAmaWZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSAmaWZfc2VuZDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmaWZfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0CQk9ICZpZl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwotCi0KLQkvKiBJbml0aWFsaXplIGhhcmR3YXJlIHBhcmFtZXRlcnMgKi8KLQlkZXYtPmlycQk9IHdhbmRldi0+aXJxOwotCWRldi0+ZG1hCT0gd2FuZGV2LT5kbWE7Ci0JZGV2LT5iYXNlX2FkZHIJPSB3YW5kZXYtPmlvcG9ydDsKLQlkZXYtPm1lbV9zdGFydAk9IHdhbmRldi0+bWFkZHI7Ci0JZGV2LT5tZW1fZW5kCT0gd2FuZGV2LT5tYWRkciArIHdhbmRldi0+bXNpemUgLSAxOwotCi0JLyogU2V0IHRyYW5zbWl0IGJ1ZmZlciBxdWV1ZSBsZW5ndGggCi0gICAgICAgICAqIElmIHdlIG92ZXIgZmlsbCB0aGlzIHF1ZXVlIHRoZSBwYWNrZXRzIHdpbGwKLSAgICAgICAgICogYmUgZHJvcGVkIGJ5IHRoZSBrZXJuZWwuCi0gICAgICAgICAqIHNwcHBfYXR0YWNoKCkgc2V0cyB0aGlzIHRvIDEwLCBidXQKLSAgICAgICAgICogMTAwIHdpbGwgZ2l2ZSB1cyBtb3JlIHJvb20gYXQgbG93IHNwZWVkcy4KLQkgKi8KLSAgICAgICAgZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0gICAKLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEhhbmRsZSB0cmFuc21pdCB0aW1lb3V0IGV2ZW50IGZyb20gbmV0aWYgd2F0Y2hkb2cKLSAqLwotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIAljaGRsY19wcml2YXRlX2FyZWFfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCQotCS8qIElmIG91ciBkZXZpY2Ugc3RheXMgYnVzeSBmb3IgYXQgbGVhc3QgNSBzZWNvbmRzIHRoZW4gd2Ugd2lsbAotCSAqIGtpY2sgc3RhcnQgdGhlIGRldmljZSBieSBtYWtpbmcgZGV2LT50YnVzeSA9IDAuICBXZSBleHBlY3QKLQkgKiB0aGF0IG91ciBkZXZpY2UgbmV2ZXIgc3RheXMgYnVzeSBtb3JlIHRoYW4gNSBzZWNvbmRzLiBTbyB0aGlzICAgICAgICAgICAgICAgICAKLQkgKiBpcyBvbmx5IHVzZWQgYXMgYSBsYXN0IHJlc29ydC4KLQkgKi8KLQotCSsrY2FyZC0+d2FuZGV2LnN0YXRzLmNvbGxpc2lvbnM7Ci0KLQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCBvbiAlc1xuIiwgY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCW5ldGlmX3dha2VfcXVldWUgKGRldik7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBlbmFibGUgY29tbXVuaWNhdGlvbnMgYW5kIGludGVycnVwdHMuCi0gKiBvIHByZXZlbnQgbW9kdWxlIGZyb20gdW5sb2FkaW5nIGJ5IGluY3JlbWVudGluZyB1c2UgY291bnQKLSAqCi0gKiBSZXR1cm4gMCBpZiBPLmsuIG9yIGVycm5vLgotICovCi1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQotCS8qIE9ubHkgb25lIG9wZW4gcGVyIGludGVyZmFjZSBpcyBhbGxvd2VkICovCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFN0YXJ0IFBQUCBMYXllciAqLwotCWlmIChzcHBwX29wZW4oZGV2KSl7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3N0YXJ0X3RpbWUgPSB0di50dl9zZWM7Ci0gCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkKLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0KLQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9DT05GSUc7Ci0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RJTUVSOwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENsb3NlIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBpZiB0aGlzIGlzIHRoZSBsYXN0IGNsb3NlLCB0aGVuIGRpc2FibGUgY29tbXVuaWNhdGlvbnMgYW5kIGludGVycnVwdHMuCi0gKiBvIHJlc2V0IGZsYWdzLgotICovCi1zdGF0aWMgaW50IGlmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0KLQkvKiBTdG9wIHRoZSBQUFAgTGF5ZXIgKi8KLQlzcHBwX2Nsb3NlKGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0Jd2FucGlwZV9jbG9zZShjYXJkKTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIGEgcGFja2V0IG9uIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIHNldCB0YnVzeSBmbGFnIChtYXJrcyBzdGFydCBvZiB0aGUgdHJhbnNtaXNzaW9uKSB0byBibG9jayBhIHRpbWVyLWJhc2VkCi0gKiAgIHRyYW5zbWl0IGZyb20gb3ZlcmxhcHBpbmcuCi0gKiBvIGNoZWNrIGxpbmsgc3RhdGUuIElmIGxpbmsgaXMgbm90IHVwLCB0aGVuIGRyb3AgdGhlIHBhY2tldC4KLSAqIG8gZXhlY3V0ZSBhZGFwdGVyIHNlbmQgY29tbWFuZC4KLSAqIG8gZnJlZSBzb2NrZXQgYnVmZmVyCi0gKgotICogUmV0dXJuOgkwCWNvbXBsZXRlIChzb2NrZXQgYnVmZmVyIG11c3QgYmUgZnJlZWQpCi0gKgkJbm9uLTAJcGFja2V0IG1heSBiZSByZS10cmFuc21pdHRlZCAodGJ1c3kgbXVzdCBiZSBzZXQpCi0gKgotICogTm90ZXM6Ci0gKiAxLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGVpdGhlciBieSB0aGUgcHJvdG9jb2wgc3RhY2sgb3IgYnkgdGhlICJuZXQKLSAqICAgIGJvdHRvbSBoYWxmIiAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpLgotICogMi4gU2V0dGluZyB0YnVzeSBmbGFnIHdpbGwgaW5oaWJpdCBmdXJ0aGVyIHRyYW5zbWl0IHJlcXVlc3RzIGZyb20gdGhlCi0gKiAgICBwcm90b2NvbCBzdGFjayBhbmQgY2FuIGJlIHVzZWQgZm9yIGZsb3cgY29udHJvbCB3aXRoIHByb3RvY29sIGxheWVyLgotICovCi1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUICpjaGRsY19pbnQgPSAmZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdDsKLQlpbnQgdWRwX3R5cGUgPSAwOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCWludCBlcnI9MDsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCQotCWlmIChza2IgPT0gTlVMTCl7Ci0JCS8qIElmIHdlIGdldCBoZXJlLCBzb21lIGhpZ2hlciBsYXllciB0aGlua3Mgd2UndmUgbWlzc2VkIGFuCi0JCSAqIHR4LWRvbmUgaW50ZXJydXB0LgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIE5VTEwgc2tiIGJ1ZmZlciEgaW50ZXJmYWNlICVzIGdvdCBraWNrZWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotICAgCWlmIChudG9ocyhza2ItPnByb3RvY29sKSAhPSBodG9ucyhQVkNfUFJPVCkpewotCQkvKiBjaGVjayB0aGUgdWRwIHBhY2tldCB0eXBlICovCi0JCQotCQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZShza2IsIGNhcmQpOwotCQlpZiAodWRwX3R5cGUgPT0gVURQX0NQSVBFX1RZUEUpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RvcmVfdWRwX21nbXRfcGt0KFVEUF9QS1RfRlJNX1NUQUNLLCBjYXJkLCBza2IsIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkbGNfcHJpdl9hcmVhKSl7Ci0JCQkJY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PQotCQkJCQlBUFBfSU5UX09OX1RJTUVSOwotCQkJfQotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0gICAgICAgIH0KLQotCS8qIExvY2sgdGhlIDUwOCBDYXJkOiBTTVAgaXMgc3VwcG9ydGVkICovCi0gICAgICAJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlzNTA4X2xvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9IAotCi0gICAgCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIGluIGlmX3NlbmQ6ICVseFxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUsY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLSAgICAgICAgICAgICAgICArK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlnb3RvIGlmX3NlbmRfY3JpdF9leGl0OwotCX0KLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCWdvdG8gaWZfc2VuZF9jcml0X2V4aXQ7Ci0JfQotCQotCWlmIChjaGRsY19zZW5kKGNhcmQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pKXsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JfWVsc2V7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X3BhY2tldHM7Ci0gICAgICAgCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCX0JCi0KLWlmX3NlbmRfY3JpdF9leGl0OgotCWlmICghKGVycj1uZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpKXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX1lbHNlewotCQljaGRsY19wcml2X2FyZWEtPnRpY2tfY291bnRlciA9IGppZmZpZXM7Ci0JCWNoZGxjX2ludC0+aW50ZXJydXB0X3Blcm1pc3Npb24gfD0gQVBQX0lOVF9PTl9UWF9GUkFNRTsKLQl9Ci0KLQljbGVhcl9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZXBseSB0byBVRFAgTWFuYWdlbWVudCBzeXN0ZW0uCi0gKiBSZXR1cm4gbGVuZ3RoIG9mIHJlcGx5LgotICovCi1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IG1ib3hfbGVuICkKLXsKLQotCXVuc2lnbmVkIHNob3J0IGxlbiwgdWRwX2xlbmd0aCwgdGVtcCwgaXBfbGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgaXBfdGVtcDsKLQlpbnQgZXZlbl9ib3VuZCA9IDA7Ci0gIAljaGRsY191ZHBfcGt0X3QgKmNfdWRwX3BrdCA9IChjaGRsY191ZHBfcGt0X3QgKilkYXRhOwotCSAKLQkvKiBTZXQgbGVuZ3RoIG9mIHBhY2tldCAqLwotCWxlbiA9IHNpemVvZihpcF9wa3RfdCkrIAotCSAgICAgIHNpemVvZih1ZHBfcGt0X3QpKwotCSAgICAgIHNpemVvZih3cF9tZ210X3QpKwotCSAgICAgIHNpemVvZihjYmxvY2tfdCkrCi0JICAgICAgc2l6ZW9mKHRyYWNlX2luZm9fdCkrIAotCSAgICAgIG1ib3hfbGVuOwotCi0JLyogZmlsbCBpbiBVRFAgcmVwbHkgKi8KLQljX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9IFVEUE1HTVRfUkVQTFk7Ci0gICAKLQkvKiBmaWxsIGluIFVEUCBsZW5ndGggKi8KLQl1ZHBfbGVuZ3RoID0gc2l6ZW9mKHVkcF9wa3RfdCkrIAotCQkgICAgIHNpemVvZih3cF9tZ210X3QpKwotCQkgICAgIHNpemVvZihjYmxvY2tfdCkrCi0JICAgICAgICAgICAgIHNpemVvZih0cmFjZV9pbmZvX3QpKwotCQkgICAgIG1ib3hfbGVuOyAKLQotIAkvKiBwdXQgaXQgb24gYW4gZXZlbiBib3VuZGFyeSAqLwotCWlmICggdWRwX2xlbmd0aCAmIDB4MDAwMSApIHsKLQkJdWRwX2xlbmd0aCArPSAxOwotCQlsZW4gKz0gMTsKLQkJZXZlbl9ib3VuZCA9IDE7Ci0JfSAgCi0KLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQljX3VkcF9wa3QtPnVkcF9wa3QudWRwX2xlbmd0aCA9IHRlbXA7Ci0JCSAKLQkvKiBzd2FwIFVEUCBwb3J0cyAqLwotCXRlbXAgPSBjX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0OwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQgPSAKLQkJCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQ7IAotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPSB0ZW1wOwotCi0JLyogYWRkIFVEUCBwc2V1ZG8gaGVhZGVyICovCi0JdGVtcCA9IDB4MTEwMDsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKShjX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCkpID0gdGVtcDsJCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JKigodW5zaWduZWQgc2hvcnQgKikoY191ZHBfcGt0LT5kYXRhK21ib3hfbGVuK2V2ZW5fYm91bmQrMikpID0gdGVtcDsKLQotCQkgCi0JLyogY2FsY3VsYXRlIFVEUCBjaGVja3N1bSAqLwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAwOwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSBjYWxjX2NoZWNrc3VtKCZkYXRhW1VEUF9PRkZTRVRdLHVkcF9sZW5ndGgrVURQX09GRlNFVCk7Ci0KLQkvKiBmaWxsIGluIElQIGxlbmd0aCAqLwotCWlwX2xlbmd0aCA9IGxlbjsKLQl0ZW1wID0gKGlwX2xlbmd0aDw8OCl8KGlwX2xlbmd0aD4+OCk7Ci0JY191ZHBfcGt0LT5pcF9wa3QudG90YWxfbGVuZ3RoID0gdGVtcDsKLSAgCi0JLyogc3dhcCBJUCBhZGRyZXNzZXMgKi8KLQlpcF90ZW1wID0gY191ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3M7Ci0JY191ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3MgPSBjX3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzczsKLQljX3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzcyA9IGlwX3RlbXA7Ci0KLQkvKiBmaWxsIGluIElQIGNoZWNrc3VtICovCi0JY191ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gMDsKLQljX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSBjYWxjX2NoZWNrc3VtKGRhdGEsc2l6ZW9mKGlwX3BrdF90KSk7Ci0KLQlyZXR1cm4gbGVuOwotCi19IC8qIHJlcGx5X3VkcCAqLwotCi11bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICpkYXRhLCBpbnQgbGVuKQotewotCXVuc2lnbmVkIHNob3J0IHRlbXA7IAotCXVuc2lnbmVkIGxvbmcgc3VtPTA7Ci0JaW50IGk7Ci0KLQlmb3IoIGkgPSAwOyBpIDxsZW47IGkrPTIgKSB7Ci0JCW1lbWNweSgmdGVtcCwmZGF0YVtpXSwyKTsKLQkJc3VtICs9ICh1bnNpZ25lZCBsb25nKXRlbXA7Ci0JfQotCi0Jd2hpbGUgKHN1bSA+PiAxNiApIHsKLQkJc3VtID0gKHN1bSAmIDB4ZmZmZlVMKSArIChzdW0gPj4gMTYpOwotCX0KLQotCXRlbXAgPSAodW5zaWduZWQgc2hvcnQpc3VtOwotCXRlbXAgPSB+dGVtcDsKLQotCWlmKCB0ZW1wID09IDAgKSAKLQkJdGVtcCA9IDB4ZmZmZjsKLQotCXJldHVybiB0ZW1wOwkKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdldCBldGhlcm5ldC1zdHlsZSBpbnRlcmZhY2Ugc3RhdGlzdGljcy4KLSAqIFJldHVybiBhIHBvaW50ZXIgdG8gc3RydWN0IGVuZXRfc3RhdGlzdGljcy4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiBpZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXNkbGFfdCAqbXlfY2FyZDsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhOwotCi0JLyogU2h1dGRvd24gYnVnIGZpeC4gSW4gZGVsX2lmKCkgd2Uga2lsbAotICAgICAgICAgKiBkZXYtPnByaXYgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiwgZ2V0cwotICAgICAgICAgKiBjYWxsZWQgYWZ0ZXIgZGVsX2lmKCksIHRodXMgY2hlY2sKLSAgICAgICAgICogaWYgcG9pbnRlciBoYXMgYmVlbiBkZWxldGVkICovCi0JaWYgKChjaGRsY19wcml2X2FyZWE9ZGV2LT5wcml2KSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCW15X2NhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0JcmV0dXJuICZteV9jYXJkLT53YW5kZXYuc3RhdHM7IAotfQotCi0KLS8qKioqKiogQ2lzY28gSERMQyBGaXJtd2FyZSBJbnRlcmZhY2UgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBmaXJtd2FyZSBjb2RlIHZlcnNpb24uCi0gKglQdXQgY29kZSB2ZXJzaW9uIGFzIEFTQ0lJIHN0cmluZyBpbiBzdHIuIAotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfdmVyc2lvbiAoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlpbnQgbGVuOwotCWNoYXIgZXJyOwotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ERV9WRVJTSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQl9Ci0JZWxzZSBpZiAoc3RyKSB7ICAvKiBpcyBub3QgbnVsbCAqLwotCQlsZW4gPSBtYi0+YnVmZmVyX2xlbmd0aDsKLQkJbWVtY3B5KHN0ciwgbWItPmRhdGEsIGxlbik7Ci0JCXN0cltsZW5dID0gJ1wwJzsKLQl9Ci0JcmV0dXJuIChlcnIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ29uZmlndXJlIENIRExDIGZpcm13YXJlLgotICovCi1zdGF0aWMgaW50IGNoZGxjX2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhKQotewotCWludCBlcnI7Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1haWxib3ggPSBjYXJkLT5tYm94OwotCWludCBkYXRhX2xlbmd0aCA9IHNpemVvZihDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCk7Ci0JCi0JbWFpbGJveC0+YnVmZmVyX2xlbmd0aCA9IGRhdGFfbGVuZ3RoOyAgCi0JbWVtY3B5KG1haWxib3gtPmRhdGEsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKLQltYWlsYm94LT5jb21tYW5kID0gU0VUX0NIRExDX0NPTkZJR1VSQVRJT047Ci0JZXJyID0gc2RsYV9leGVjKG1haWxib3gpID8gbWFpbGJveC0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkKLQlpZiAoZXJyICE9IENPTU1BTkRfT0spIGNoZGxjX2Vycm9yIChjYXJkLCBlcnIsIG1haWxib3gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBpbnRlcnJ1cHQgbW9kZSAtLSBIRExDIFZlcnNpb24uCi0gKi8KLQotc3RhdGljIGludCBjaGRsY19zZXRfaW50cl9tb2RlIChzZGxhX3QqIGNhcmQsIHVuc2lnbmVkIG1vZGUpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUKiBpbnRfZGF0YSA9Ci0JCSAoQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCAqKW1iLT5kYXRhOwotCWludCBlcnI7Ci0KLQlpbnRfZGF0YS0+Q0hETENfaW50ZXJydXB0X3RyaWdnZXJzIAk9IG1vZGU7Ci0JaW50X2RhdGEtPklSUQkJCQk9IGNhcmQtPmh3LmlycTsKLQlpbnRfZGF0YS0+aW50ZXJydXB0X3RpbWVyICAgICAgICAgICAgICAgPSAxOwotICAgCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCk7Ci0JbWItPmNvbW1hbmQgPSBTRVRfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyICE9IENPTU1BTkRfT0spCi0JCWNoZGxjX2Vycm9yIChjYXJkLCBlcnIsIG1iKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGNvbW11bmljYXRpb25zLgotICovCi0KLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9lbmFibGUgKHNkbGFfdCogY2FyZCkKLXsKLQlpbnQgZXJyOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0KLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBFTkFCTEVfQ0hETENfQ09NTVVOSUNBVElPTlM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykKLQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0JZWxzZQotCQljYXJkLT51LmMuY29tbV9lbmFibGVkPTE7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERpc2FibGUgY29tbXVuaWNhdGlvbnMgYW5kIERyb3AgdGhlIE1vZGVtIGxpbmVzIChEQ0QgYW5kIFJUUykuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9kaXNhYmxlIChzZGxhX3QqIGNhcmQpCi17Ci0JaW50IGVycjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gRElTQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDT01NQU5EX09LKQotCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgY29tbXVuaWNhdGlvbiBlcnJvciBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfY29tbV9lcnJfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotICAgICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1iLT5jb21tYW5kID0gUkVBRF9DT01NU19FUlJPUl9TVEFUUzsKLSAgICAgICAgZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotICAgICAgICBpZiAoZXJyICE9IENPTU1BTkRfT0spCi0gICAgICAgICAgICAgICAgY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotICAgICAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBDSERMQyBvcGVyYXRpb25hbCBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfb3Bfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotICAgICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUzsKLSAgICAgICAgZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotICAgICAgICBpZiAoZXJyICE9IENPTU1BTkRfT0spCi0gICAgICAgICAgICAgICAgY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotICAgICAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGNvbW11bmljYXRpb25zIGVycm9yIGFuZCBnZW5lcmFsIHBhY2tldCBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZV9jb21tc19zdGF0cyhzZGxhX3QqIGNhcmQsCi0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSkKLXsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLSAgCUNPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVCogZXJyX3N0YXRzOwotICAgICAgICBDSERMQ19PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1QgKm9wX3N0YXRzOwotCi0JLyogb24gdGhlIGZpcnN0IHRpbWVyIGludGVycnVwdCwgcmVhZCB0aGUgY29tbXMgZXJyb3Igc3RhdGlzdGljcyAqLwotCWlmKGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID09IDIpIHsKLQkJaWYoY2hkbGNfcmVhZF9jb21tX2Vycl9zdGF0cyhjYXJkKSkKLQkJCXJldHVybiAxOwotCQllcnJfc3RhdHMgPSAoQ09NTVNfRVJST1JfU1RBVFNfU1RSVUNUICopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9vdmVyX2Vycm9ycyA9IAotCQkJCWVycl9zdGF0cy0+Unhfb3ZlcnJ1bl9lcnJfY291bnQ7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9jcmNfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5DUkNfZXJyX2NvdW50OwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZnJhbWVfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9hYm9ydF9jb3VudDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9kaXNfcHJpX2JmcnNfZnVsbF9jb3VudDsgCi0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0KLQkJCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZmlmb19lcnJvcnM7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9Ci0JCQkJZXJyX3N0YXRzLT5zZWNfVHhfYWJvcnRfY291bnQ7Ci0JfQotCi0gICAgICAgIC8qIG9uIHRoZSBzZWNvbmQgdGltZXIgaW50ZXJydXB0LCByZWFkIHRoZSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0JZWxzZSB7Ci0gICAgICAgIAlpZihjaGRsY19yZWFkX29wX3N0YXRzKGNhcmQpKQotICAgICAgICAgICAgICAgIAlyZXR1cm4gMTsKLQkJb3Bfc3RhdHMgPSAoQ0hETENfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUICopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0KLQkJCShvcF9zdGF0cy0+UnhfRGF0YV9kaXNjYXJkX3Nob3J0X2NvdW50ICsKLQkJCW9wX3N0YXRzLT5SeF9EYXRhX2Rpc2NhcmRfbG9uZ19jb3VudCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBwYWNrZXQuCi0gKglSZXR1cm46CTAgLSBvLmsuCi0gKgkJMSAtIG5vIHRyYW5zbWl0IGJ1ZmZlcnMgYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfc2VuZCAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4pCi17Ci0JQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICp0eGJ1ZiA9IGNhcmQtPnUuYy50eGJ1ZjsKLQotCWlmICh0eGJ1Zi0+b3BwX2ZsYWcpCi0JCXJldHVybiAxOwotCQotCXNkbGFfcG9rZSgmY2FyZC0+aHcsIHR4YnVmLT5wdHJfZGF0YV9iZnIsIGRhdGEsIGxlbik7Ci0KLQl0eGJ1Zi0+ZnJhbWVfbGVuZ3RoID0gbGVuOwotCXR4YnVmLT5vcHBfZmxhZyA9IDE7CQkvKiBzdGFydCB0cmFuc21pc3Npb24gKi8KLQkKLQkvKiBVcGRhdGUgdHJhbnNtaXQgYnVmZmVyIGNvbnRyb2wgZmllbGRzICovCi0JY2FyZC0+dS5jLnR4YnVmID0gKyt0eGJ1ZjsKLQotCWlmICgodm9pZCopdHhidWYgPiBjYXJkLT51LmMudHhidWZfbGFzdCkKLQkJY2FyZC0+dS5jLnR4YnVmID0gY2FyZC0+dS5jLnR4YnVmX2Jhc2U7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiBGaXJtd2FyZSBFcnJvciBIYW5kbGVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmlybXdhcmUgZXJyb3IgaGFuZGxlci4KLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbmV2ZXIgZmlybXdhcmUgY29tbWFuZCByZXR1cm5zIG5vbi16ZXJvCi0gKglyZXR1cm4gY29kZS4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfZXJyb3IgKHNkbGFfdCAqY2FyZCwgaW50IGVyciwgQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1iKQotewotCXVuc2lnbmVkIGNtZCA9IG1iLT5jb21tYW5kOwotCi0Jc3dpdGNoIChlcnIpIHsKLQotCWNhc2UgQ01EX1RJTUVPVVQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjbWQpOwotCQlicmVhazsKLQotCWNhc2UgUzUxNF9CT1RIX1BPUlRTX1NBTUVfQ0xLX01PREU6Ci0JCWlmKGNtZCA9PSBTRVRfQ0hETENfQ09ORklHVVJBVElPTikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICIlczogQ29uZmlndXJlIGJvdGggcG9ydHMgZm9yIHRoZSBzYW1lIGNsb2NrIHNvdXJjZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCwgZXJyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiBJbnRlcnJ1cHQgSGFuZGxlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2lzY28gSERMQyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgotICovCi1TVEFUSUMgdm9pZCB3c3BwcF9pc3IgKHNkbGFfdCogY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QqIGZsYWdzID0gTlVMTDsKLQlpbnQgaTsKLQlzZGxhX3QgKm15X2NhcmQ7Ci0KLQotCS8qIENoZWNrIGZvciB3aGljaCBwb3J0IHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gZ2VuZXJhdGVkCi0JICogU2luY2UgU2Vjb25kYXJ5IFBvcnQgaXMgcGlnZ3liYWNraW5nIG9uIHRoZSBQcmltYXJ5Ci0gICAgICAgICAqIHRoZSBjaGVjayBtdXN0IGJlIGRvbmUgaGVyZS4gCi0JICovCi0KLQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlpZiAoIWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpewotCQkvKiBDaGVjayBmb3IgYSBzZWNvbmQgcG9ydCAocGlnZ3liYWNraW5nKSAqLwotCQlpZigobXlfY2FyZCA9IGNhcmQtPm5leHQpKXsKLQkJCWZsYWdzID0gbXlfY2FyZC0+dS5jLmZsYWdzOwotCQkJaWYgKGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpewotCQkJCWNhcmQgPSBteV9jYXJkOwotCQkJCWNhcmQtPmlzcihjYXJkKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWNhcmQtPmluX2lzciA9IDE7Ci0JZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JCQotCS8qIElmIHdlIGdldCBhbiBpbnRlcnJ1cHQgd2l0aCBubyBuZXR3b3JrIGRldmljZSwgc3RvcCB0aGUgaW50ZXJydXB0cwotCSAqIGFuZCBpc3N1ZSBhbiBlcnJvciAqLwotCWlmICgoIWRldiB8fCAhZGV2LT5wcml2KSAmJiBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlICE9IAotCSAgICAJQ09NTUFORF9DT01QTEVURV9BUFBfSU5UX1BFTkQpewotCQlnb3RvIGlzcl9kb25lOwotCX0KLQotCQotCS8qIGlmIGNyaXRpY2FsIGR1ZSB0byBwZXJpcGhlcmFsIG9wZXJhdGlvbnMKLQkgKiBpZS4gdXBkYXRlKCkgb3IgZ2V0c3RhdHMoKSB0aGVuIHJlc2V0IHRoZSBpbnRlcnJ1cHQgYW5kCi0JICogd2FpdCBmb3IgdGhlIGJvYXJkIHRvIHJldHJpZ2dlci4KLQkgKi8KLQlpZih0ZXN0X2JpdChQRVJJX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LgotCQkJCQlpbnRlcnJ1cHRfdHlwZSA9IDA7Ci0JCWdvdG8gaXNyX2RvbmU7Ci0JfQotCi0KLQkvKiBPbiBhIDUwOCBDYXJkLCBpZiBjcml0aWNhbCBkdWUgdG8gaWZfc2VuZCAKLSAgICAgICAgICogTWFqb3IgRXJyb3IgISEhCi0JICovCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpIHsKLQkJaWYodGVzdF9iaXQoMCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgd2hpbGUgaW4gSVNSOiAlbHhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCWdvdG8gaXNyX2RvbmU7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2goZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSkgewotCi0JCWNhc2UgUlhfQVBQX0lOVF9QRU5EOgkvKiAweDAxOiByZWNlaXZlIGludGVycnVwdCAqLwotCQkJcnhfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVFhfQVBQX0lOVF9QRU5EOgkvKiAweDAyOiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0KLQkJCQkgfkFQUF9JTlRfT05fVFhfRlJBTUU7Ci0KLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQ09NTUFORF9DT01QTEVURV9BUFBfSU5UX1BFTkQ6LyogMHgwNDogY21kIGNwbHQgKi8KLQkJCSsrIEludHJfdGVzdF9jb3VudGVyOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDSERMQ19FWENFUF9DT05EX0FQUF9JTlRfUEVORDoJLyogMHgyMCAqLwotCQkJcHJvY2Vzc19jaGRsY19leGNlcHRpb24oY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIEdMT0JBTF9FWENFUF9DT05EX0FQUF9JTlRfUEVORDoKLQkJCXByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVElNRVJfQVBQX0lOVF9QRU5EOgotCQkJdGltZXJfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogc3B1cmlvdXMgaW50ZXJydXB0IDB4JTAyWCFcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsCi0JCQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJDb2RlIG5hbWU6ICIpOwotCQkJZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlYyIsCi0JCQkJCWZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZW5hbWVbaV0pOyAKLQkJCXByaW50ayhLRVJOX0lORk8gIlxuQ29kZSB2ZXJzaW9uOiAiKTsKLQkJCWZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJWMiLCAKLQkJCQkJZmxhZ3MtPmdsb2JhbF9pbmZvX3N0cnVjdC5jb2RldmVyc2lvbltpXSk7IAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsJCi0JCQlicmVhazsKLQl9Ci0KLWlzcl9kb25lOgotCWNhcmQtPmluX2lzciA9IDA7Ci0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSA9IDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVjZWl2ZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqLwotc3RhdGljIHZvaWQgcnhfaW50ciAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYTsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlDSERMQ19EQVRBX1JYX1NUQVRVU19FTF9TVFJVQ1QgKnJ4YnVmID0gY2FyZC0+dS5jLnJ4bWI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsZW47Ci0JdW5zaWduZWQgYWRkciA9IHJ4YnVmLT5wdHJfZGF0YV9iZnI7Ci0Jdm9pZCAqYnVmOwotCWludCBpLHVkcF90eXBlOwotCQotCWlmIChyeGJ1Zi0+b3BwX2ZsYWcgIT0gMHgwMSkgewotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBjb3JydXB0ZWQgUnggYnVmZmVyIEAgMHglWCwgZmxhZyA9IDB4JTAyWCFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgKHVuc2lnbmVkKXJ4YnVmLCByeGJ1Zi0+b3BwX2ZsYWcpOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkNvZGUgbmFtZTogIik7Ci0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MtPmdsb2JhbF9pbmZvX3N0cnVjdC5jb2RlbmFtZVtpXSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiXG5Db2RlIHZlcnNpb246ICIpOwotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZXZlcnNpb25baV0pOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQotCQkvKiBCdWcgRml4OiBNYXIgNiAyMDAwCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZ2V0IGEgY29ycnVwdGVkIG1haWxib3gsIGl0IG1lYXNuIHRoYXQgZHJpdmVyIAotICAgICAgICAgICAgICAgICAqIGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGZpcm13YXJlLiBUaGVyZSBpcyBubyByZWNvdmVyeS4KLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBkb24ndCB0dXJuIG9mZiBhbGwgaW50ZXJydXB0cyBmb3IgdGhpcyBjYXJkCi0gICAgICAgICAgICAgICAgICogdGhlIG1hY2hpbmUgd2lsbCBjcmFzaC4gCi0gICAgICAgICAgICAgICAgICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCByb3V0ZXIgZmFpbHVyZSAuLi4hISFcbiIsIGNhcmQtPmRldm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICJQbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyAhXG4iKTsKLQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwkKLQkJcmV0dXJuOwotCX0KLQotCWRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0KLQlpZiAoIWRldil7IAotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKXsKLQkJZ290byByeF9leGl0OwotCX0KLQotCWNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotCWlmIChyeGJ1Zi0+ZXJyb3JfZmxhZyl7CQotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCS8qIFRha2Ugb2ZmIHR3byBDUkMgYnl0ZXMgKi8KLQotCWlmIChyeGJ1Zi0+ZnJhbWVfbGVuZ3RoIDwgNyB8fCByeGJ1Zi0+ZnJhbWVfbGVuZ3RoID4gMTUwNiApewotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQkKLQotCWxlbiA9IHJ4YnVmLT5mcmFtZV9sZW5ndGggLSBDUkNfTEVOR1RIOwotCi0JLyogQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsKLQotCWlmIChza2IgPT0gTlVMTCkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBzb2NrZXQgYnVmZmVycyBhdmFpbGFibGUhXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZ290byByeF9leGl0OwotCX0KLQotCS8qIENvcHkgZGF0YSB0byB0aGUgc29ja2V0IGJ1ZmZlciAqLwotCWlmKChhZGRyICsgbGVuKSA+IGNhcmQtPnUuYy5yeF90b3AgKyAxKSB7Ci0JCXVuc2lnbmVkIHRtcCA9IGNhcmQtPnUuYy5yeF90b3AgLSBhZGRyICsgMTsKLQkJYnVmID0gc2tiX3B1dChza2IsIHRtcCk7Ci0JCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGJ1ZiwgdG1wKTsKLQkJYWRkciA9IGNhcmQtPnUuYy5yeF9iYXNlOwotCQlsZW4gLT0gdG1wOwotCX0KLQkJCi0JYnVmID0gc2tiX3B1dChza2IsIGxlbik7Ci0Jc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgYnVmLCBsZW4pOwotCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1dBTl9QUFApOwotCi0JY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHMgKys7Ci0JY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKCBza2IsIGNhcmQgKTsKLQotCWlmKHVkcF90eXBlID09IFVEUF9DUElQRV9UWVBFKSB7Ci0JCWlmKHN0b3JlX3VkcF9tZ210X3BrdChVRFBfUEtUX0ZSTV9ORVRXT1JLLAotICAgCQkJCSAgICAgIGNhcmQsIHNrYiwgZGV2LCBjaGRsY19wcml2X2FyZWEpKSB7Ci0gICAgIAkJICAgICAgICBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LgotCQkJCQkJaW50ZXJydXB0X3Blcm1pc3Npb24gfD0gCi0JCQkJCQkJQVBQX0lOVF9PTl9USU1FUjsgCi0JCX0KLQl9ZWxzZXsKLSAgICAgICAgICAgICAgIAkvKiBQYXNzIGl0IHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLwotICAgICAgICAgICAgICAgIHNrYi0+ZGV2ID0gZGV2OwotICAgICAgICAgICAgICAgIHNrYi0+bWFjLnJhdyAgPSBza2ItPmRhdGE7Ci0gICAgICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKLSAgICAgICAgICAgICAgICBkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCX0KLQotcnhfZXhpdDoKLQkvKiBSZWxlYXNlIGJ1ZmZlciBlbGVtZW50IGFuZCBjYWxjdWxhdGUgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9uZSAqLwotCXJ4YnVmLT5vcHBfZmxhZyA9IDB4MDA7Ci0JY2FyZC0+dS5jLnJ4bWIgPSArKyByeGJ1ZjsKLQlpZigodm9pZCopcnhidWYgPiBjYXJkLT51LmMucnhidWZfbGFzdCl7Ci0JCWNhcmQtPnUuYy5yeG1iID0gY2FyZC0+dS5jLnJ4YnVmX2Jhc2U7Ci0JfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRpbWVyIGludGVycnVwdCBoYW5kbGVyLgotICogVGhlIHRpbWVyIGludGVycnVwdCBpcyB1c2VkIGZvciB0d28gcHVycG9zZXM6Ci0gKiAgICAxKSBQcm9jZXNzaW5nIHVkcCBjYWxscyBmcm9tICdjcGlwZW1vbicuCi0gKiAgICAyKSBSZWFkaW5nIGJvYXJkLWxldmVsIHN0YXRpc3RpY3MgZm9yIHVwZGF0aW5nIHRoZSBwcm9jIGZpbGUgc3lzdGVtLgotICovCi12b2lkIHRpbWVyX2ludHIoc2RsYV90ICpjYXJkKQotewotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gTlVMTDsKLSAgICAgICAgU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCogZmxhZ3MgPSBOVUxMOwotCi0gICAgICAgIGRldiA9IGNhcmQtPndhbmRldi5kZXY7IAotICAgICAgICBjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0KLQlpZiAoY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DT05GSUcpIHsKLQkJaWYgKCFjb25maWdfY2hkbGMoY2FyZCkpewotCQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX0NPTkZJRzsKLQkJfQotCX0KLQkKLQkvKiBwcm9jZXNzIGEgdWRwIGNhbGwgaWYgcGVuZGluZyAqLwotICAgICAgIAlpZihjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VEUCkgewotICAgICAgICAgICAgICAgCXByb2Nlc3NfdWRwX21nbXRfcGt0KGNhcmQsIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hkbGNfcHJpdl9hcmVhKTsKLQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VEUDsKLSAgICAgICAgfQotCQotCi0JLyogcmVhZCB0aGUgY29tbXVuaWNhdGlvbnMgc3RhdGlzdGljcyBpZiByZXF1aXJlZCAqLwotCWlmKGNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVVBEQVRFKSB7Ci0JCXVwZGF0ZV9jb21tc19zdGF0cyhjYXJkLCBjaGRsY19wcml2X2FyZWEpOwotICAgICAgICAgICAgICAgIGlmKCEoLS0gY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMpKSB7Ci0JCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IAotCQkJCX5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotCQl9Ci0gICAgICAgIH0KLQotCS8qIG9ubHkgZGlzYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0IGlmIHRoZXJlIGFyZSBubyB1ZHAgb3Igc3RhdGlzdGljICovCi0JLyogdXBkYXRlcyBwZW5kaW5nICovCi0gICAgICAgIGlmKCFjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0gICAgICAgICAgICAgICAgZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPQotICAgICAgICAgICAgICAgICAgICAgICAgfkFQUF9JTlRfT05fVElNRVI7Ci0gICAgICAgIH0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgTWlzY2VsbGFuZW91cyBGdW5jdGlvbnMKLQktIHNldF9jaGRsY19jb25maWcoKSB1c2VkIHRvIHNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhlIGJvYXJkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW50IHNldF9jaGRsY19jb25maWcoc2RsYV90KiBjYXJkKQotewotCi0JQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgY2ZnOwotCi0JbWVtc2V0KCZjZmcsIDAsIHNpemVvZihDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCkpOwotCi0JaWYoY2FyZC0+d2FuZGV2LmNsb2NraW5nKQotCQljZmcuYmF1ZF9yYXRlID0gY2FyZC0+d2FuZGV2LmJwczsKLQotCWNmZy5saW5lX2NvbmZpZ19vcHRpb25zID0gKGNhcmQtPndhbmRldi5pbnRlcmZhY2UgPT0gV0FOT1BUX1JTMjMyKSA/Ci0JCUlOVEVSRkFDRV9MRVZFTF9SUzIzMiA6IElOVEVSRkFDRV9MRVZFTF9WMzU7Ci0KLQljZmcubW9kZW1fY29uZmlnX29wdGlvbnMJPSAwOwotCS8vQVBJIE9QVElPTlMKLQljZmcuQ0hETENfQVBJX29wdGlvbnMJCT0gRElTQ0FSRF9SWF9FUlJPUl9GUkFNRVM7Ci0JY2ZnLm1vZGVtX3N0YXR1c190aW1lcgkJPSAxMDA7Ci0JY2ZnLkNIRExDX3Byb3RvY29sX29wdGlvbnMJPSBIRExDX1NUUkVBTUlOR19NT0RFOwotCWNmZy5wZXJjZW50X2RhdGFfYnVmZmVyX2Zvcl9UeCAgPSA1MDsKLQljZmcuQ0hETENfc3RhdGlzdGljc19vcHRpb25zCT0gKENIRExDX1RYX0RBVEFfQllURV9DT1VOVF9TVEFUIHwKLQkJQ0hETENfUlhfREFUQV9CWVRFX0NPVU5UX1NUQVQpOwotCWNmZy5tYXhfQ0hETENfZGF0YV9maWVsZF9sZW5ndGgJPSBjYXJkLT53YW5kZXYubXR1OwotCi0JY2ZnLnRyYW5zbWl0X2tlZXBhbGl2ZV90aW1lcgk9IDA7Ci0JY2ZnLnJlY2VpdmVfa2VlcGFsaXZlX3RpbWVyCT0gMDsKLQljZmcua2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZQk9IDA7Ci0JY2ZnLlNMQVJQX3JlcXVlc3RfdGltZXIJCT0gMDsKLQotCWNmZy5JUF9hZGRyZXNzCQk9IDA7Ci0JY2ZnLklQX25ldG1hc2sJCT0gMDsKLQkKLQlyZXR1cm4gY2hkbGNfY29uZmlndXJlKGNhcmQsICZjZmcpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByb2Nlc3MgZ2xvYmFsIGV4Y2VwdGlvbiBjb25kaXRpb24KLSAqLwotc3RhdGljIGludCBwcm9jZXNzX2dsb2JhbF9leGNlcHRpb24oc2RsYV90ICpjYXJkKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JbWJveC0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWJveC0+Y29tbWFuZCA9IFJFQURfR0xPQkFMX0VYQ0VQVElPTl9DT05ESVRJT047Ci0JZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCWlmKGVyciAhPSBDTURfVElNRU9VVCApewotCQotCQlzd2l0Y2gobWJveC0+cmV0dXJuX2NvZGUpIHsKLSAgICAgICAgIAotCSAgICAgIAljYXNlIEVYQ0VQX01PREVNX1NUQVRVU19DSEFOR0U6Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNb2RlbSBzdGF0dXMgY2hhbmdlXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCi0JCQlzd2l0Y2gobWJveC0+ZGF0YVswXSAmIChEQ0RfSElHSCB8IENUU19ISUdIKSkgewotCQkJCWNhc2UgKERDRF9ISUdIKToKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDRCBoaWdoLCBDVFMgbG93XG4iLGNhcmQtPmRldm5hbWUpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIChDVFNfSElHSCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDRCBsb3csIENUUyBoaWdoXG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgoRENEX0hJR0ggfCBDVFNfSElHSCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBEQ0QgaGlnaCwgQ1RTIGhpZ2hcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRENEIGxvdywgQ1RTIGxvd1xuIixjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJCX0KLQotCQkJaWYgKCEobWJveC0+ZGF0YVswXSAmIERDRF9ISUdIKSB8fCAhKG1ib3gtPmRhdGFbMF0gJiBEQ0RfSElHSCkpewotCQkJCS8vcHJpbnRrKEtFUk5fSU5GTyAiU2VuZGluZyBURVJNIFJlcXVlc3QgTWFudWFsbHkgIVxuIik7Ci0JCQkJc2VuZF9wcHBfdGVybV9yZXF1ZXN0KGNhcmQtPndhbmRldi5kZXYpOwotCQkJfQkKLQkJCWJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBFWENFUF9UUkNfRElTQUJMRUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTGluZSB0cmFjZSBkaXNhYmxlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0JCWNhc2UgRVhDRVBfSVJRX1RJTUVPVVQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSVJRIHRpbWVvdXQgb2NjdXJyZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7IAotCQkJYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEdsb2JhbCBleGNlcHRpb24gJXhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgbWJveC0+cmV0dXJuX2NvZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByb2Nlc3MgY2hkbGMgZXhjZXB0aW9uIGNvbmRpdGlvbgotICovCi1zdGF0aWMgaW50IHByb2Nlc3NfY2hkbGNfZXhjZXB0aW9uKHNkbGFfdCAqY2FyZCkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBSRUFEX0NIRExDX0VYQ0VQVElPTl9DT05ESVRJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmKGVyciAhPSBDTURfVElNRU9VVCkgewotCQotCQlzd2l0Y2ggKGVycikgewotCi0JCWNhc2UgRVhDRVBfTElOS19BQ1RJVkU6Ci0JCQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVEVEKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRVhDRVBfTElOS19JTkFDVElWRV9NT0RFTToKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9MT09QQkFDS19DT05ESVRJT046Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTG9vcGJhY2sgQ29uZGl0aW9uIERldGVjdGVkLlxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBOT19DSERMQ19FWENFUF9DT05EX1RPX1JFUE9SVDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBleGNlcHRpb25zIHJlcG9ydGVkLlxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRXhjZXB0aW9uIENvbmRpdGlvbiAleCFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsZXJyKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU3RvcmUgYSBVRFAgbWFuYWdlbWVudCBwYWNrZXQgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCi0gKi8KLQotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCSAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEgKQotewotCWludCB1ZHBfcGt0X3N0b3JlZCA9IDA7Ci0KLQlpZighY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2xndGggJiYKLQkgIChza2ItPmxlbiA8PSBNQVhfTEdUSF9VRFBfTUdOVF9QS1QpKSB7Ci0gICAgICAgIAljaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCA9IHNrYi0+bGVuOwotCQljaGRsY19wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID0gdWRwX3BrdF9zcmM7Ci0gICAgICAgCQltZW1jcHkoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkID0gVE1SX0lOVF9FTkFCTEVEX1VEUDsKLQkJdWRwX3BrdF9zdG9yZWQgPSAxOwotCX0KLQotCWlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX1NUQUNLKQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCWVsc2UKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQotCXJldHVybih1ZHBfcGt0X3N0b3JlZCk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBVRFAgbWFuYWdlbWVudCBwYWNrZXQuCi0gKi8KLQotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSApIAotewotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgZnJhbWVzLCBsZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCwgcmVhbF9sZW47Ci0JdW5zaWduZWQgbG9uZyBkYXRhX3B0cjsKLQl1bnNpZ25lZCBkYXRhX2xlbmd0aDsKLQlpbnQgdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIgPSBjYXJkLT5tYm94OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCWNoZGxjX3VkcF9wa3RfdCAqY2hkbGNfdWRwX3BrdDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlpbnQgZXJyOwotCWNoYXIgdXRfY2hhcjsKLQotCWNoZGxjX3VkcF9wa3QgPSAoY2hkbGNfdWRwX3BrdF90ICopIGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhOwotCi0JaWYoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKSB7Ci0KLQkJc3dpdGNoKGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKSB7Ci0JCQljYXNlIFJFQURfR0xPQkFMX1NUQVRJU1RJQ1M6Ci0JCQljYXNlIFJFQURfTU9ERU1fU1RBVFVTOiAgCi0JCQljYXNlIFJFQURfQ0hETENfTElOS19TVEFUVVM6Ci0JCQljYXNlIENQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJY2FzZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTOgotCQkJY2FzZSBSRUFEX0NIRExDX09QRVJBVElPTkFMX1NUQVRTOgotCi0JCQkvKiBUaGVzZSB0d28gY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGZvcgotCQkJICogZWFjaCByZXF1ZXN0ICovCi0JCQljYXNlIFJFQURfQ0hETENfQ09ORklHVVJBVElPTjoKLQkJCWNhc2UgUkVBRF9DSERMQ19DT0RFX1ZFUlNJT046Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMDsKLQkJCQlicmVhazsKLQkJfSAKLQl9Ci0JCi0gIAlpZighdWRwX21nbXRfcmVxX3ZhbGlkKSB7Ci0KLQkJLyogc2V0IGxlbmd0aCB0byAwICovCi0JCWNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoID0gMDsKLQotICAgIAkJLyogc2V0IHJldHVybiBjb2RlICovCi0JCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IDB4Q0Q7Ci0KLQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7CQotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogV2FybmluZywgSWxsZWdhbCBVRFAgY29tbWFuZCBhdHRlbXB0ZWQgZnJvbSBuZXR3b3JrOiAleFxuIiwKLQkJCWNhcmQtPmRldm5hbWUsY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpOwotCQl9Ci0KLSAgIAl9IGVsc2UgewotCSAgIAl1bnNpZ25lZCBsb25nIHRyYWNlX3N0YXR1c19jZmdfYWRkciA9IDA7Ci0JCVRSQUNFX1NUQVRVU19FTF9DRkdfU1RSVUNUIHRyYWNlX2NmZ19zdHJ1Y3Q7Ci0JCVRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVCB0cmFjZV9lbGVtZW50X3N0cnVjdDsKLQotCQlzd2l0Y2goY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpIHsKLQotCQljYXNlIENQSVBFX0VOQUJMRV9UUkFDSU5HOgotCQkgICAgIGlmICghY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCkgewotCi0JCQkvKiBPUEVSQVRFX0RBVEFMSU5FX01PTklUT1IgKi8KLQotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUKTsKLQkJCW1iLT5jb21tYW5kID0gU0VUX1RSQUNFX0NPTkZJR1VSQVRJT047Ci0KLSAgICAJCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0JCQkJdHJhY2VfY29uZmlnID0gVFJBQ0VfQUNUSVZFOwotCQkJLyogVHJhY2UgZGVsYXkgbW9kZSBpcyBub3QgdXNlZCBiZWNhdXNlIGl0IHNsb3dzCi0JCQkgICBkb3duIHRyYW5zZmVyIGFuZCByZXN1bHRzIGluIGEgc3RhbmRvZmYgc2l0dWF0aW9uCi0JCQkgICB3aGVuIHRoZXJlIGlzIGEgbG90IG9mIGRhdGEgKi8KLQotCQkJLyogQ29uZmlndXJlIHRoZSBUcmFjZSBiYXNlZCBvbiB1c2VyIGlucHV0cyAqLwotCQkJKChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKiltYi0+ZGF0YSktPnRyYWNlX2NvbmZpZyB8PSAKLQkJCQkJY2hkbGNfdWRwX3BrdC0+ZGF0YVswXTsKLQotCQkJKChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJICAgdHJhY2VfZGVhY3RpdmF0aW9uX3RpbWVyID0gNDAwMDsKLQotCi0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCQkJY2FyZC0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IGVycjsKLQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQkJYnJlYWs7Ci0JICAgIAkJfSAKLQotCQkJLyogR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRyYWNlIGVsZW1lbnQgbGlzdCAqLwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJbWItPmNvbW1hbmQgPSBSRUFEX1RSQUNFX0NPTkZJR1VSQVRJT047Ci0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQkJCWlmIChlcnIgIT0gQ09NTUFORF9PSykgewotCQkJCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQkJCQljaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkID0gMDsKLQkJCQljaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBlcnI7Ci0JCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJCWJyZWFrOwotCSAgICAJCX0gCQotCi0JICAgCQl0cmFjZV9zdGF0dXNfY2ZnX2FkZHIgPSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopCi0JCQkJbWItPmRhdGEpIC0+IHB0cl90cmFjZV9zdGF0X2VsX2NmZ19zdHJ1Y3Q7Ci0KLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIHRyYWNlX3N0YXR1c19jZmdfYWRkciwKLQkJCQkgJnRyYWNlX2NmZ19zdHJ1Y3QsIHNpemVvZih0cmFjZV9jZmdfc3RydWN0KSk7Ci0JCSAgICAKLQkJCWNoZGxjX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkciA9IHRyYWNlX2NmZ19zdHJ1Y3QuCi0JCQkJYmFzZV9hZGRyX3RyYWNlX3N0YXR1c19lbGVtZW50czsKLQotCQkJY2hkbGNfcHJpdl9hcmVhLT5udW1iZXJfdHJhY2VfZWxlbWVudHMgPSAKLQkJCQkJdHJhY2VfY2ZnX3N0cnVjdC5udW1iZXJfdHJhY2Vfc3RhdHVzX2VsZW1lbnRzOwotCi0JCQljaGRsY19wcml2X2FyZWEtPmVuZF90cmFjZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpCi0JCQkJCSgoVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUICopCi0JCQkJCSBjaGRsY19wcml2X2FyZWEtPnN0YXJ0X3RyYWNlX2FkZHIgKyAKLQkJCQkJIChjaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50cyAtIDEpKTsKLQotCQkJY2hkbGNfcHJpdl9hcmVhLT5iYXNlX2FkZHJfdHJhY2VfYnVmZmVyID0gCi0JCQkJCXRyYWNlX2NmZ19zdHJ1Y3QuYmFzZV9hZGRyX3RyYWNlX2J1ZmZlcjsKLQotCQkJY2hkbGNfcHJpdl9hcmVhLT5lbmRfYWRkcl90cmFjZV9idWZmZXIgPSAKLQkJCQkJdHJhY2VfY2ZnX3N0cnVjdC5lbmRfYWRkcl90cmFjZV9idWZmZXI7Ci0KLQkJICAgIAljaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0Lm5leHRfdHJhY2VfZWxlbWVudF90b191c2U7Ci0KLQkgICAgCQljaGRsY19wcml2X2FyZWEtPmF2YWlsYWJsZV9idWZmZXJfc3BhY2UgPSAyMDAwIC0gCi0JCQkJCQkJCSAgc2l6ZW9mKGlwX3BrdF90KSAtCi0JCQkJCQkJCSAgc2l6ZW9mKHVkcF9wa3RfdCkgLQotCQkJCQkJCSAgICAgIAkgIHNpemVvZih3cF9tZ210X3QpIC0KLQkJCQkJCQkJICBzaXplb2YoY2Jsb2NrX3QpIC0KLQkJCQkJCQkgICAgICAgICAgc2l6ZW9mKHRyYWNlX2luZm9fdCk7CQotCSAgICAgICAJICAgICB9Ci0JCSAgICAgY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JICAgICAgIAkgICAgIGNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAxOwotCSAgICAgICAJICAgICBicmVhazsKLQkgICAKLQotCQljYXNlIENQSVBFX0RJU0FCTEVfVFJBQ0lORzoKLQkJICAgICBpZiAoY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCkgewotCi0JCQkvKiBPUEVSQVRFX0RBVEFMSU5FX01PTklUT1IgKi8KLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCk7Ci0JCQltYi0+Y29tbWFuZCA9IFNFVF9UUkFDRV9DT05GSUdVUkFUSU9OOwotICAgIAkJCSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCQl0cmFjZV9jb25maWcgPSBUUkFDRV9JTkFDVElWRTsKLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkJICAgICB9CQkKLQotCQkgICAgIGNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkgICAgIGNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCSAgICAgbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCQkgICAgIGJyZWFrOwotCSAgIAotCi0JCWNhc2UgQ1BJUEVfR0VUX1RSQUNFX0lORk86Ci0KLQkJICAgICBpZiAoIWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQpIHsKLQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IDE7Ci0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQlicmVhazsKLQkJICAgICB9Ci0KLSAgCQkgICAgIGNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDA7Ci0JCSAgICAgYnVmZmVyX2xlbmd0aCA9IDA7CS8qIG9mZnNldCBvZiBwYWNrZXQgYWxyZWFkeSBvY2N1cGllZCAqLwotCi0JCSAgICAgZm9yIChmcmFtZXM9MDsgZnJhbWVzIDwgY2hkbGNfcHJpdl9hcmVhLT5udW1iZXJfdHJhY2VfZWxlbWVudHM7IGZyYW1lcysrKXsKLQotCQkJdHJhY2VfcGt0X3QgKnRyYWNlX3BrdCA9ICh0cmFjZV9wa3RfdCAqKQotCQkJCSZjaGRsY191ZHBfcGt0LT5kYXRhW2J1ZmZlcl9sZW5ndGhdOwotCi0JCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBjaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwKLQkJCSAgIAkgICh1bnNpZ25lZCBjaGFyICopJnRyYWNlX2VsZW1lbnRfc3RydWN0LAotCQkJICAgCSAgc2l6ZW9mKFRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVCkpOwotCi0gICAgIAkJCWlmICh0cmFjZV9lbGVtZW50X3N0cnVjdC5vcHBfZmxhZyA9PSAweDAwKSB7Ci0JCQkgCWJyZWFrOwotCQkJfQotCi0JCQkvKiBnZXQgcG9pbnRlciB0byByZWFsIGRhdGEgKi8KLQkJCWRhdGFfcHRyID0gdHJhY2VfZWxlbWVudF9zdHJ1Y3QucHRyX2RhdGFfYmZyOwotCi0JCQkvKiBTZWUgaWYgdGhlcmUgaXMgYWN0dWFsIGRhdGEgb24gdGhlIHRyYWNlIGJ1ZmZlciAqLwotCQkJaWYgKGRhdGFfcHRyKXsKLQkJCQlkYXRhX2xlbmd0aCA9IHRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX2xlbmd0aDsKLQkJCX1lbHNlewotCQkJCWRhdGFfbGVuZ3RoID0gMDsKLQkJCQljaGRsY191ZHBfcGt0LT50cmFjZV9pbmZvLmlzbW9yZWRhdGEgPSAweDAxOwotCQkJfQotCQotICAgCQkJaWYoIChjaGRsY19wcml2X2FyZWEtPmF2YWlsYWJsZV9idWZmZXJfc3BhY2UgLSBidWZmZXJfbGVuZ3RoKQotCQkJCTwgKCBzaXplb2YodHJhY2VfcGt0X3QpICsgZGF0YV9sZW5ndGgpICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kaWNhdGUgdGhlcmUgYXJlIG1vcmUgZnJhbWVzIG9uIGJvYXJkICYgZXhpdCAqLwotCQkJCWNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotCQkJdHJhY2VfcGt0LT5zdGF0dXMgPSB0cmFjZV9lbGVtZW50X3N0cnVjdC50cmFjZV90eXBlOwotCi0JCQl0cmFjZV9wa3QtPnRpbWVfc3RhbXAgPQotCQkJCXRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX3RpbWVfc3RhbXA7Ci0KLQkJCXRyYWNlX3BrdC0+cmVhbF9sZW5ndGggPQotCQkJCXRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX2xlbmd0aDsKLQotCQkJLyogc2VlIGlmIHdlIGNhbiBmaXQgdGhlIGZyYW1lIGludG8gdGhlIHVzZXIgYnVmZmVyICovCi0JCQlyZWFsX2xlbiA9IHRyYWNlX3BrdC0+cmVhbF9sZW5ndGg7Ci0KLQkJCWlmIChkYXRhX3B0ciA9PSAwKSB7Ci0JCQkgICAgIAl0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPSAweDAwOwotCQkJfSBlbHNlIHsKLQkJCQl1bnNpZ25lZCB0bXAgPSAwOwotCi0JCQkJLyogZ2V0IHRoZSBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyCi0JCQkJICAgIG11c3QgY2hlY2sgZm9yIGVuZCBvZiBidWZmZXIgKi8KLQkJCSAgICAgICAgdHJhY2VfcGt0LT5kYXRhX2F2YWlsID0gMHgwMTsKLQotCQkJCWlmICgoZGF0YV9wdHIgKyByZWFsX2xlbikgPgotCQkJCQkgICAgIGNoZGxjX3ByaXZfYXJlYS0+ZW5kX2FkZHJfdHJhY2VfYnVmZmVyICsgMSl7Ci0KLQkJCQkgICAgCXRtcCA9IGNoZGxjX3ByaXZfYXJlYS0+ZW5kX2FkZHJfdHJhY2VfYnVmZmVyIC0gZGF0YV9wdHIgKyAxOwotCQkJCSAgICAJc2RsYV9wZWVrKCZjYXJkLT5odywgZGF0YV9wdHIsCi0JCQkJCSAgICAgICAJICB0cmFjZV9wa3QtPmRhdGEsdG1wKTsKLQkJCQkgICAgCWRhdGFfcHRyID0gY2hkbGNfcHJpdl9hcmVhLT5iYXNlX2FkZHJfdHJhY2VfYnVmZmVyOwotCQkJCX0KLQkKLQkJICAgICAgICAJc2RsYV9wZWVrKCZjYXJkLT5odywgZGF0YV9wdHIsCi0JCQkJCSAgJnRyYWNlX3BrdC0+ZGF0YVt0bXBdLCByZWFsX2xlbiAtIHRtcCk7Ci0JCQl9CQotCi0JCQkvKiB6ZXJvIHRoZSBvcHAgZmxhZyB0byBzaG93IHdlIGdvdCB0aGUgZnJhbWUgKi8KLQkJCXV0X2NoYXIgPSAweDAwOwotCQkJc2RsYV9wb2tlKCZjYXJkLT5odywgY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIsICZ1dF9jaGFyLCAxKTsKLQotICAgICAgIAkJCS8qIG5vdyBtb3ZlIG9udG8gdGhlIG5leHQgZnJhbWUgKi8KLSAgICAgICAJCQljaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciArPSBzaXplb2YoVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUKTsKLQotICAgICAgIAkJCS8qIGNoZWNrIGlmIHdlIHdlbnQgb3ZlciB0aGUgbGFzdCBhZGRyZXNzICovCi0JCQlpZiAoIGNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID4gY2hkbGNfcHJpdl9hcmVhLT5lbmRfdHJhY2VfYWRkciApIHsKLQkJCQljaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciA9IGNoZGxjX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkcjsKLSAgICAgICAJCQl9Ci0KLSAgICAgICAgICAgIAkJaWYodHJhY2VfcGt0LT5kYXRhX2F2YWlsID09IDB4MDEpIHsKLQkJCQlidWZmZXJfbGVuZ3RoICs9IHJlYWxfbGVuIC0gMTsKLQkJCX0KLQkgCi0JICAgICAgIAkgICAgCS8qIGZvciB0aGUgaGVhZGVyICovCi0JICAgICAgICAgICAgCWJ1ZmZlcl9sZW5ndGggKz0gc2l6ZW9mKHRyYWNlX3BrdF90KTsKLQotCQkgICAgIH0gIC8qIEZvciBMb29wICovCi0KLQkJICAgICBpZiAoZnJhbWVzID09IGNoZGxjX3ByaXZfYXJlYS0+bnVtYmVyX3RyYWNlX2VsZW1lbnRzKXsKLQkJCWNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDE7Ci0JICAgICAgICAgICAgIH0KLSAJCSAgICAgY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5udW1fZnJhbWVzID0gZnJhbWVzOwotCQkgCi0gICAgCQkgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsKLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7IAotCQkgCi0JCSAgICAgY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsgCi0JCSAgICAgCi0JCSAgICAgYnJlYWs7Ci0KLQotCQljYXNlIENQSVBFX0ZUMV9SRUFEX1NUQVRVUzoKLQkJCSgodW5zaWduZWQgY2hhciAqKWNoZGxjX3VkcF9wa3QtPmRhdGEgKVswXSA9Ci0JCQkJZmxhZ3MtPkZUMV9pbmZvX3N0cnVjdC5wYXJhbGxlbF9wb3J0X0FfaW5wdXQ7Ci0KLQkJCSgodW5zaWduZWQgY2hhciAqKWNoZGxjX3VkcF9wa3QtPmRhdGEgKVsxXSA9Ci0JCQkJZmxhZ3MtPkZUMV9pbmZvX3N0cnVjdC5wYXJhbGxlbF9wb3J0X0JfaW5wdXQ7Ci0JCQkJIAotCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMjsKLQkJCWJyZWFrOwotCQkKLQkJY2FzZSBDUElQRV9ST1VURVJfVVBfVElNRToKLQkJCWRvX2dldHRpbWVvZmRheSggJnR2ICk7Ci0JCQljaGRsY19wcml2X2FyZWEtPnJvdXRlcl91cF90aW1lID0gdHYudHZfc2VjIC0gCi0JCQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3N0YXJ0X3RpbWU7Ci0JCQkqKHVuc2lnbmVkIGxvbmcgKikmY2hkbGNfdWRwX3BrdC0+ZGF0YSA9IAotCQkJCQljaGRsY19wcml2X2FyZWEtPnJvdXRlcl91cF90aW1lOwkKLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotCQkJYnJlYWs7Ci0KLSAgIAkJY2FzZSBGVDFfTU9OSVRPUl9TVEFUVVNfQ1RSTDoKLQkJCS8qIEVuYWJsZSBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkgICAgICAgIAlpZiAoKGNoZGxjX3VkcF9wa3QtPmRhdGFbMF0gJiBFTkFCTEVfUkVBRF9GVDFfU1RBVFVTKSB8fCAgCi0JCQkJKGNoZGxjX3VkcF9wa3QtPmRhdGFbMF0gJiBFTkFCTEVfUkVBRF9GVDFfT1BfU1RBVFMpKSB7Ci0JCQkKLQkJCSAgICAgCWlmKCByQ291bnQrKyAhPSAwICkgewotCQkJCQljaGRsY191ZHBfcGt0LT5jYmxvY2suCi0JCQkJCXJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAxOwotCQkgIAkJCWJyZWFrOwotCQkgICAgCSAgICAgCX0KLQkgICAgICAJCX0KLQotCSAgICAgIAkJLyogRGlzYWJsZSBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkgICAgICAJCWlmKCBjaGRsY191ZHBfcGt0LT5kYXRhWzBdID09IDApIHsKLQotCSAgICAgIAkgICAJICAgICAJaWYoIC0tckNvdW50ICE9IDApIHsKLQkJICAJCQljaGRsY191ZHBfcGt0LT5jYmxvY2suCi0JCQkJCXJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAxOwotCQkgIAkJCWJyZWFrOwotCSAgIAkgICAgCSAgICAgCX0gCi0JICAgICAgCQl9IAkKLQkKLQkJZGVmYXVsdDoKLQkJCS8qIGl0J3MgYSBib2FyZCBjb21tYW5kICovCi0JCQltYi0+Y29tbWFuZCA9IGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kOwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBjaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aDsKLQkJCWlmIChtYi0+YnVmZmVyX2xlbmd0aCkgewotCQkJCW1lbWNweSgmbWItPmRhdGEsICh1bnNpZ25lZCBjaGFyICopIGNoZGxjX3VkcF9wa3QtPgotCQkJCQkJCWRhdGEsIG1iLT5idWZmZXJfbGVuZ3RoKTsKLQkgICAgICAJCX0gCi0JCQkvKiBydW4gdGhlIGNvbW1hbmQgb24gdGhlIGJvYXJkICovCi0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCSAgICAgICAgIAltZW1jcHkoJmNoZGxjX3VkcF9wa3QtPmNibG9jaywgbWIsIHNpemVvZihjYmxvY2tfdCkpOyAKLQkJCQotCQkJaWYgKG1iLT5idWZmZXJfbGVuZ3RoKSB7Ci0JICAgICAgICAgCQltZW1jcHkoJmNoZGxjX3VkcF9wa3QtPmRhdGEsICZtYi0+ZGF0YSwgCi0JCQkJCQkJCW1iLT5idWZmZXJfbGVuZ3RoKTsgCi0JICAgICAgCQl9Ci0KLQkJfSAvKiBlbmQgb2Ygc3dpdGNoICovCi0gICAgIAl9IC8qIGVuZCBvZiBlbHNlICovCi0KLSAgICAgCS8qIEZpbGwgVURQIFRUTCAqLwotCWNoZGxjX3VkcF9wa3QtPmlwX3BrdC50dGwgPSBjYXJkLT53YW5kZXYudHRsOyAKLQotICAgICAJbGVuID0gcmVwbHlfdWRwKGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBtYi0+YnVmZmVyX2xlbmd0aCk7Ci0JCi0gICAgIAlpZihjaGRsY19wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQkJaWYoIWNoZGxjX3NlbmQoY2FyZCwgY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIGxlbikpIHsKLQkJCSsrIGNhcmQtPndhbmRldi5zdGF0cy50eF9wYWNrZXRzOwotCQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLQkJfQotCX0gZWxzZSB7CQotCQotCQkvKiBQYXNzIGl0IHVwIHRoZSBzdGFjawotICAgIAkJICAgQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCQlpZiAoKG5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGxlbikpICE9IE5VTEwpIHsKLQkJCS8qIGNvcHkgZGF0YSBpbnRvIG5ld19za2IgKi8KLQotIAkgICAgCQlidWYgPSBza2JfcHV0KG5ld19za2IsIGxlbik7Ci0gIAkgICAgCQltZW1jcHkoYnVmLCBjaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSwgbGVuKTsKLQotICAgICAgICAgICAgCQkvKiBEZWNhcHN1bGF0ZSBwa3QgYW5kIHBhc3MgaXQgdXAgdGhlIHByb3RvY29sIHN0YWNrICovCi0JICAgIAkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0gICAgICAgICAgICAJCW5ld19za2ItPmRldiA9IGRldjsKLQkgICAgCQluZXdfc2tiLT5tYWMucmF3ICA9IG5ld19za2ItPmRhdGE7Ci0JCi0JCQluZXRpZl9yeChuZXdfc2tiKTsKLQkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCX0gZWxzZSB7Ci0JICAgIAkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBzb2NrZXQgYnVmZmVycyBhdmFpbGFibGUhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgCQl9Ci0gICAgCX0KLSAKLQljaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCA9IDA7Ci0gCQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgUmVjZWl2ZSBhbmQgVHJhbnNtaXQgQnVmZmVycy4KLSAqLwotCi1zdGF0aWMgdm9pZCBpbml0X2NoZGxjX3R4X3J4X2J1ZmYoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JQ0hETENfVFhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKnR4X2NvbmZpZzsKLQlDSERMQ19SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqcnhfY29uZmlnOwotCWNoYXIgZXJyOwotCQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgewotCQl0eF9jb25maWcgPSAoQ0hETENfVFhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cl9DSERMQ19UeF9zdGF0X2VsX2NmZ19zdHJ1Y3QpKTsKLSAgICAgICAgCXJ4X2NvbmZpZyA9IChDSERMQ19SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCkpOwotCi0gICAgICAgCQkvKiBTZXR1cCBIZWFkIGFuZCBUYWlscyBmb3IgYnVmZmVycyAqLwotICAgICAgICAJY2FyZC0+dS5jLnR4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICB0eF9jb25maWctPmJhc2VfYWRkcl9UeF9zdGF0dXNfZWxlbWVudHMpOwotICAgICAgICAJY2FyZC0+dS5jLnR4YnVmX2xhc3QgPSAKLQkJKENIRExDX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVCAqKSAgCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmX2Jhc2UgKwotCQkodHhfY29uZmlnLT5udW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0KLSAgICAgICAgCWNhcmQtPnUuYy5yeGJ1Zl9iYXNlID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgcnhfY29uZmlnLT5iYXNlX2FkZHJfUnhfc3RhdHVzX2VsZW1lbnRzKTsKLSAgICAgICAgCWNhcmQtPnUuYy5yeGJ1Zl9sYXN0ID0KLQkJKENIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVCAqKQotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeGJ1Zl9iYXNlICsKLQkJKHJ4X2NvbmZpZy0+bnVtYmVyX1J4X3N0YXR1c19lbGVtZW50cyAtIDEpOwotCi0gCQkvKiBTZXQgdXAgbmV4dCBwb2ludGVyIHRvIGJlIHVzZWQgKi8KLSAgICAgICAgCWNhcmQtPnUuYy50eGJ1ZiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHR4X2NvbmZpZy0+bmV4dF9UeF9zdGF0dXNfZWxlbWVudF90b191c2UpOwotICAgICAgICAJY2FyZC0+dS5jLnJ4bWIgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICByeF9jb25maWctPm5leHRfUnhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlKTsKLQl9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHR4X2NvbmZpZyA9IChDSERMQ19UWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJCSgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCXB0cl9DSERMQ19UeF9zdGF0X2VsX2NmZ19zdHJ1Y3QgJSBTRExBX1dJTkRPV1NJWkUpKTsKLQotICAgICAgICAgICAgICAgIHJ4X2NvbmZpZyA9IChDSERMQ19SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJCSgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCXB0cl9DSERMQ19SeF9zdGF0X2VsX2NmZ19zdHJ1Y3QgJSBTRExBX1dJTkRPV1NJWkUpKTsKLQotICAgICAgICAgICAgICAgIC8qIFNldHVwIEhlYWQgYW5kIFRhaWxzIGZvciBidWZmZXJzICovCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHR4X2NvbmZpZy0+YmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy50eGJ1Zl9sYXN0ID0KLQkJKENIRExDX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVCAqKWNhcmQtPnUuYy50eGJ1Zl9iYXNlCi0JCSsgKHR4X2NvbmZpZy0+bnVtYmVyX1R4X3N0YXR1c19lbGVtZW50cyAtIDEpOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeGJ1Zl9iYXNlID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCShyeF9jb25maWctPmJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMgJSBTRExBX1dJTkRPV1NJWkUpKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhidWZfbGFzdCA9IAotCQkoQ0hETENfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUICopY2FyZC0+dS5jLnJ4YnVmX2Jhc2UKLQkJKyAocnhfY29uZmlnLT5udW1iZXJfUnhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICAgLyogU2V0IHVwIG5leHQgcG9pbnRlciB0byBiZSB1c2VkICovCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCSh0eF9jb25maWctPm5leHRfVHhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4bWIgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHJ4X2NvbmZpZy0+bmV4dF9SeF9zdGF0dXNfZWxlbWVudF90b191c2UgJSBTRExBX1dJTkRPV1NJWkUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFNldHVwIEFjdHVhbCBCdWZmZXIgU3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgKi8KLSAgICAgICAgY2FyZC0+dS5jLnJ4X2Jhc2UgPSByeF9jb25maWctPmJhc2VfYWRkcl9SeF9idWZmZXI7Ci0gICAgICAgIGNhcmQtPnUuYy5yeF90b3AgID0gcnhfY29uZmlnLT5lbmRfYWRkcl9SeF9idWZmZXI7Ci0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUGVyZm9ybSBJbnRlcnJ1cHQgVGVzdCBieSBydW5uaW5nIFJFQURfQ0hETENfQ09ERV9WRVJTSU9OIGNvbW1hbmQgTUFYX0lOVFIKLSAqIF9URVNUX0NPVU5URVIgdGltZXMuCi0gKi8KLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyLGk7Ci0KLQlJbnRyX3Rlc3RfY291bnRlciA9IDA7Ci0KLQkvKiBUaGUgY3JpdGljYWwgZmxhZyBpcyB1bnNldCBiZWNhdXNlIGR1cmluZyBpbml0aWFsaXphdGlvbiAoaWZfb3BlbikgCi0JICogd2Ugd2FudCB0aGUgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkIHNvIHRoYXQgd2hlbiB0aGUgd3BjX2lzciBpcwotCSAqIGNhbGxlZCBpdCBkb2VzIG5vdCBleGl0IGR1ZSB0byBjcml0aWNhbCBmbGFnIHNldC4KLQkgKi8gCi0KLQllcnIgPSBjaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsIEFQUF9JTlRfT05fQ09NTUFORF9DT01QTEVURSk7Ci0KLQlpZiAoZXJyID09IENNRF9PSykgeyAKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUjsgaSArKykgewkKLQkJCW1iLT5idWZmZXJfbGVuZ3RoICA9IDA7Ci0JCQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ERV9WRVJTSU9OOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQl9Ci0JfQotCWVsc2UgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgMCk7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBVRFAgY2FsbCBpdCBpcy4gQ1BJUEVBQiA/Ci0gKi8KLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCogY2FyZCkKLXsKLQkgY2hkbGNfdWRwX3BrdF90ICpjaGRsY191ZHBfcGt0ID0gKGNoZGxjX3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsKLQotCWlmICghc3RybmNtcChjaGRsY191ZHBfcGt0LT53cF9tZ210LnNpZ25hdHVyZSxVRFBNR01UX1NJR05BVFVSRSw4KSAmJgotCSAgIChjaGRsY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9PSBudG9ocyhjYXJkLT53YW5kZXYudWRwX3BvcnQpKSAmJgotCSAgIChjaGRsY191ZHBfcGt0LT5pcF9wa3QucHJvdG9jb2wgPT0gVURQTUdNVF9VRFBfUFJPVE9DT0wpICYmCi0JICAgKGNoZGxjX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9PSBVRFBNR01UX1JFUVVFU1QpKSB7Ci0JCXJldHVybiBVRFBfQ1BJUEVfVFlQRTsKLQl9Ci0JZWxzZSByZXR1cm4gVURQX0lOVkFMSURfVFlQRTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgUE9SVCBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQgcG9ydF9zZXRfc3RhdGUgKHNkbGFfdCAqY2FyZCwgaW50IHN0YXRlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0KLSAgICAgICAgaWYgKGNhcmQtPnUuYy5zdGF0ZSAhPSBzdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgV0FOX0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICIlczogSERMQyBsaW5rIGNvbm5lY3RlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBXQU5fQ09OTkVDVElORzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICIlczogSERMQyBsaW5rIGNvbm5lY3RpbmcuLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiJXM6IEhETEMgbGluayBkaXNjb25uZWN0ZWQhXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhcmQtPndhbmRldi5zdGF0ZSA9IGNhcmQtPnUuYy5zdGF0ZSA9IHN0YXRlOwotCQljaGRsY19wcml2X2FyZWEtPmNvbW1vbi5zdGF0ZSA9IHN0YXRlOwotICAgICAgICB9Ci19Ci0KLXZvaWQgczUwOF9sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+d2FuZGV2LmxvY2ssICpzbXBfZmxhZ3MpOwotICAgICAgICBpZiAoY2FyZC0+bmV4dCl7Ci0JCS8qIEl0IGlzIG9rIHRvIHVzZSBzcGluX2xvY2sgaGVyZSwgc2luY2Ugd2UKLQkJICogYWxyZWFkeSB0dXJuZWQgb2ZmIGludGVycnVwdHMgKi8KLSAgICAgICAgCXNwaW5fbG9jaygmY2FyZC0+bmV4dC0+d2FuZGV2LmxvY2spOwotCX0KLX0KLQotdm9pZCBzNTA4X3VubG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0JaWYgKGNhcmQtPm5leHQpewotCQlzcGluX3VubG9jaygmY2FyZC0+bmV4dC0+d2FuZGV2LmxvY2spOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY29uZmlnX2NoZGxjCi0gKgotICoJQ29uZmlndXJlIHRoZSBjaGRsYyBwcm90b2NvbCBhbmQgZW5hYmxlIGNvbW11bmljYXRpb25zLgkJCi0gKgotICogICAJVGhlIGlmX29wZW4oKSBmdW5jdGlvbiBiaW5kcyB0aGlzIGZ1bmN0aW9uIHRvIHRoZSBwb2xsIHJvdXRpbmUuCi0gKiAgICAgIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1biBldmVyeSB0aW1lIHRoZSBjaGRsYyBpbnRlcmZhY2UKLSAqICAgICAgaXMgYnJvdWdodCB1cC4gV2UgY2Fubm90IHJ1biB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGlmX29wZW4gCi0gKiAgICAgIGJlY2F1c2UgaWZfb3BlbiBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgcmVtb3RlIElQIGFkZHJlc3MuCi0gKiAgICAgIAotICoJSWYgdGhlIGNvbW11bmljYXRpb25zIGFyZSBub3QgZW5hYmxlZCwgcHJvY2VlZCB0byBjb25maWd1cmUKLSAqICAgICAgdGhlIGNhcmQgYW5kIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4KLSAqCi0gKiAgICAgIElmIHRoZSBjb21tdW5pY2F0aW9ucyBhcmUgZW5hYmxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgaW50ZXJmYWNlCi0gKiAgICAgIHdhcyBzaHV0ZG93biBieSBldGhlciB0aGUgdXNlciBvciBkcml2ZXIuIEluIHRoaXMgY2FzZSwgd2UgCi0gKiAgICAgIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgbm90IGNoYW5nZWQuICBJZgotICogICAgICB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgY2hhbmdlZCwgd2UgaGF2ZSB0byByZWNvbmZpZ3VyZSB0aGUgZmlybXdhcmUKLSAqICAgICAgYW5kIHVwZGF0ZSB0aGUgY2hhbmdlZCBJUCBhZGRyZXNzZXMuICBPdGhlcndpc2UsIGp1c3QgZXhpdC4KLSAqCi0gKi8KLQotc3RhdGljIGludCBjb25maWdfY2hkbGMgKHNkbGFfdCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQotCWlmIChjYXJkLT51LmMuY29tbV9lbmFibGVkKXsKLQkJY2hkbGNfY29tbV9kaXNhYmxlKGNhcmQpOwotCQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQl9Ci0KLQlpZiAoc2V0X2NoZGxjX2NvbmZpZyhjYXJkKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0hETEMgQ29uZmlndXJhdGlvbiBGYWlsZWQhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaW5pdF9jaGRsY190eF9yeF9idWZmKGNhcmQsIGRldik7Ci0KLQkvKiBTZXQgaW50ZXJydXB0IG1vZGUgYW5kIG1hc2sgKi8KLSAgICAgICAgaWYgKGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9SWF9GUkFNRSB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fVFhfRlJBTUUgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9DSERMQ19FWENFUF9DT05EIHwgQVBQX0lOVF9PTl9USU1FUikpewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBzZXQgaW50ZXJydXB0IHRyaWdnZXJzIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDA7CQotICAgICAgICB9Ci0JCi0KLQkvKiBNYXNrIHRoZSBUcmFuc21pdCBhbmQgVGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPSAKLQkJfihBUFBfSU5UX09OX1RYX0ZSQU1FIHwgQVBQX0lOVF9PTl9USU1FUik7Ci0KLQotCWlmIChjaGRsY19jb21tX2VuYWJsZShjYXJkKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gZW5hYmxlIGNoZGxjIGNvbW11bmljYXRpb25zIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiA9IDA7Ci0JCWNhcmQtPnUuYy5jb21tX2VuYWJsZWQ9MDsKLQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIFJ4L1R4IGJ1ZmZlciBjb250cm9sIGZpZWxkcyAqLwotCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNUSU5HKTsKLQlyZXR1cm4gMDsgCi19Ci0KLQotc3RhdGljIHZvaWQgc2VuZF9wcHBfdGVybV9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCi0JaWYgKChuZXdfc2tiID0gZGV2X2FsbG9jX3NrYig4KSkgIT0gTlVMTCkgewotCQkvKiBjb3B5IGRhdGEgaW50byBuZXdfc2tiICovCi0KLQkJYnVmID0gc2tiX3B1dChuZXdfc2tiLCA4KTsKLQkJc3ByaW50ZihidWYsIiVjJWMlYyVjJWMlYyVjJWMiLCAweEZGLDB4MDMsMHhDMCwweDIxLDB4MDUsMHg5OCwweDAwLDB4MDcpOwotCi0JCS8qIERlY2Fwc3VsYXRlIHBrdCBhbmQgcGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgKi8KLQkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9XQU5fUFBQKTsKLQkJbmV3X3NrYi0+ZGV2ID0gZGV2OwotCQluZXdfc2tiLT5tYWMucmF3ICA9IG5ld19za2ItPmRhdGE7Ci0KLQkJbmV0aWZfcngobmV3X3NrYik7Ci0JCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JfQotfQotCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoqKioqKiBFbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IGY4NWUzMDEuLmUwODc0Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAlkZXBlbmRzIG9uIE5FVERFVklDRVMKIAogY29uZmlnIE5FVF9SQURJTwotCWJvb2wgIldpcmVsZXNzIExBTiBkcml2ZXJzIChub24taGFtcmFkaW8pIgorCWJvb2wgIldpcmVsZXNzIExBTiBkcml2ZXJzIChub24taGFtcmFkaW8pICYgV2lyZWxlc3MgRXh0ZW5zaW9ucyIKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3Igd2lyZWxlc3MgTEFOcyBhbmQgZXZlcnl0aGluZyBoYXZpbmcgdG8gZG8gd2l0aCByYWRpbywKQEAgLTM1Niw3ICszNTYsNyBAQAogCiBjb25maWcgQVRNRUwKICAgICAgIHRyaXN0YXRlICJBdG1lbCBhdDc2YzUweCBjaGlwc2V0ICA4MDIuMTFiIHN1cHBvcnQiCi0gICAgICBkZXBlbmRzIG9uIE5FVF9SQURJTworICAgICAgZGVwZW5kcyBvbiBORVRfUkFESU8gJiYgKFBDSSB8fCBQQ01DSUEpCiAgICAgICBzZWxlY3QgRldfTE9BREVSCiAgICAgICBzZWxlY3QgQ1JDMzIKICAgICAgICAtLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggMTA4ZDlmZS4uMDA3NjRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtMzEzOSw2ICszMTM5LDcgQEAKIAkJfQogCQlpZiAoIHN0YXR1cyAmIEVWX0xJTksgKSB7CiAJCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7CisJCQlpbnQgc2Nhbl9mb3JjZWxvc3MgPSAwOwogCQkJLyogVGhlIGxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkLCBpZiB5b3Ugd2FudCB0byBwdXQgYQogCQkJICAgbW9uaXRvciBob29rIGluLCBkbyBpdCBoZXJlLiAgKFJlbWVtYmVyIHRoYXQKIAkJCSAgIGludGVycnVwdHMgYXJlIHN0aWxsIGRpc2FibGVkISkKQEAgLTMxNTcsNyArMzE1OCw4IEBACiAJCQkgIGNvZGUpICovCiAjZGVmaW5lIEFVVEhGQUlMIDB4MDMwMCAvKiBBdXRoZW50aWNhdGlvbiBmYWlsdXJlIChsb3cgYnl0ZSBpcyByZWFzb24KIAkJCSAgIGNvZGUpICovCi0jZGVmaW5lIEFTU09DSUFURUQgMHgwNDAwIC8qIEFzc29jYXRpZWQgKi8KKyNkZWZpbmUgQVNTT0NJQVRFRCAweDA0MDAgLyogQXNzb2NpYXRlZCAqLworI2RlZmluZSBSRUFTU09DSUFURUQgMHgwNjAwIC8qIFJlYXNzb2NpYXRlZD8gIE9ubHkgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwogI2RlZmluZSBSQ19SRVNFUlZFRCAwIC8qIFJlc2VydmVkIHJldHVybiBjb2RlICovCiAjZGVmaW5lIFJDX05PUkVBU09OIDEgLyogVW5zcGVjaWZpZWQgcmVhc29uICovCiAjZGVmaW5lIFJDX0FVVEhJTlYgMiAvKiBQcmV2aW91cyBhdXRoZW50aWNhdGlvbiBpbnZhbGlkICovCkBAIC0zMTc0LDQ0ICszMTc2LDMwIEBACiAJCQkgIGxlYXZpbmcgQlNTICovCiAjZGVmaW5lIFJDX05PQVVUSCA5IC8qIFN0YXRpb24gcmVxdWVzdGluZyAoUmUpQXNzb2NpYXRpb24gaXMgbm90CiAJCSAgICAgICBBdXRoZW50aWNhdGVkIHdpdGggdGhlIHJlc3BvbmRpbmcgc3RhdGlvbiAqLwotCQkJaWYgKG5ld1N0YXR1cyAhPSBBU1NPQ0lBVEVEKSB7Ci0JCQkJaWYgKGF1dG9fd2VwICYmICFhcHJpdi0+ZXhwaXJlcykgewotCQkJCQlhcHJpdi0+ZXhwaXJlcyA9IFJVTl9BVCgzKkhaKTsKLQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhcHJpdi0+dGhyX3dhaXQpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gYXByaXYtPnRhc2s7CisJCQlpZiAobmV3U3RhdHVzID09IEZPUkNFTE9TUyAmJiBhcHJpdi0+c2Nhbl90aW1lb3V0ID4gMCkKKwkJCQlzY2FuX2ZvcmNlbG9zcyA9IDE7CisJCQlpZihuZXdTdGF0dXMgPT0gQVNTT0NJQVRFRCB8fCBuZXdTdGF0dXMgPT0gUkVBU1NPQ0lBVEVEKSB7CiAJCQkJaWYgKGF1dG9fd2VwKQogCQkJCQlhcHJpdi0+ZXhwaXJlcyA9IDA7Ci0JCQkJaWYgKHRhc2spCi0JCQkJCXdha2VfdXBfcHJvY2VzcyAodGFzayk7CisJCQkJaWYgKGFwcml2LT50YXNrKQorCQkJCQl3YWtlX3VwX3Byb2Nlc3MgKGFwcml2LT50YXNrKTsKIAkJCQlzZXRfYml0KEZMQUdfVVBEQVRFX1VOSSwgJmFwcml2LT5mbGFncyk7CiAJCQkJc2V0X2JpdChGTEFHX1VQREFURV9NVUxUSSwgJmFwcml2LT5mbGFncyk7Ci0JCQl9Ci0JCQkvKiBRdWVzdGlvbiA6IGlzIEFTU09DSUFURUQgdGhlIG9ubHkgc3RhdHVzCi0JCQkgKiB0aGF0IGlzIHZhbGlkID8gV2Ugd2FudCB0byBjYXRjaCBoYW5kb3ZlcgotCQkJICogYW5kIHJlYXNzb2NpYXRpb25zIGFzIHZhbGlkIHN0YXR1cwotCQkJICogSmVhbiBJSSAqLwotCQkJaWYobmV3U3RhdHVzID09IEFTU09DSUFURUQpIHsKLSNpZiAwCi0JCQkJLyogRklYTUU6IEdyYWJiaW5nIHNjYW4gcmVzdWx0cyBoZXJlCi0JCQkJICogc2VlbXMgdG8gYmUgdG9vIGVhcmx5Pz8/ICBKdXN0IHdhaXQgZm9yCi0JCQkJICogdGltZW91dCBpbnN0ZWFkLiAqLwotCQkJCWlmIChhcHJpdi0+c2Nhbl90aW1lb3V0ID4gMCkgewotCQkJCQlzZXRfYml0KEpPQl9TQ0FOX1JFU1VMVFMsICZhcHJpdi0+ZmxhZ3MpOwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7Ci0JCQkJfQotI2VuZGlmCisKIAkJCQlpZiAoZG93bl90cnlsb2NrKCZhcHJpdi0+c2VtKSAhPSAwKSB7CiAJCQkJCXNldF9iaXQoSk9CX0VWRU5ULCAmYXByaXYtPmZsYWdzKTsKIAkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhcHJpdi0+dGhyX3dhaXQpOwogCQkJCX0gZWxzZQogCQkJCQlhaXJvX3NlbmRfZXZlbnQoZGV2KTsKLQkJCX0gZWxzZSB7Ci0JCQkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAnXDAnLCBFVEhfQUxFTik7Ci0JCQkJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCX0gZWxzZSBpZiAoIXNjYW5fZm9yY2Vsb3NzKSB7CisJCQkJaWYgKGF1dG9fd2VwICYmICFhcHJpdi0+ZXhwaXJlcykgeworCQkJCQlhcHJpdi0+ZXhwaXJlcyA9IFJVTl9BVCgzKkhaKTsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhcHJpdi0+dGhyX3dhaXQpOworCQkJCX0KIAogCQkJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCQkJCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJ1wwJywgRVRIX0FMRU4pOworCQkJCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgJndycXUsTlVMTCk7CiAJCQl9CiAJCX0KQEAgLTcxMzYsMTAgKzcxMjQsMTAgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBJbml0aWF0ZSBhIHNjYW4gY29tbWFuZCAqLworCWFpLT5zY2FuX3RpbWVvdXQgPSBSVU5fQVQoMypIWik7CiAJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAljbWQuY21kPUNNRF9MSVNUQlNTOwogCWlzc3VlY29tbWFuZChhaSwgJmNtZCwgJnJzcCk7Ci0JYWktPnNjYW5fdGltZW91dCA9IFJVTl9BVCgzKkhaKTsKIAl3YWtlID0gMTsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCmluZGV4IGE0OTY0NjAuLmFmMGNiYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKQEAgLTgwLDggKzgwLDggQEAKICAgIGV2ZW50IGhhbmRsZXIuIAogKi8KIAotc3RhdGljIHZvaWQgYWlyb19jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBhaXJvX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGFpcm9fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGFpcm9fcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIC8qCiAgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKQEAgLTEwMSwxMCArMTAxLDEwIEBACiAvKgogICAgQSBsaW5rZWQgbGlzdCBvZiAiaW5zdGFuY2VzIiBvZiB0aGUgIGFpcm9uZXQgZGV2aWNlLiAgRWFjaCBhY3R1YWwKICAgIFBDTUNJQSBjYXJkIGNvcnJlc3BvbmRzIHRvIG9uZSBkZXZpY2UgaW5zdGFuY2UsIGFuZCBpcyBkZXNjcmliZWQKLSAgIGJ5IG9uZSBkZXZfbGlua190IHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KKyAgIGJ5IG9uZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCiAKICAgIFlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIGEgbGlua2VkIGxpc3QgZm9yIHRoaXMgLS0gZm9yIGV4YW1wbGUsIHRoZQotICAgbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2YgZGV2X2xpbmtfdCBwb2ludGVycywgd2hlcmUgbWlub3IKKyAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdCBwY21jaWFfZGV2aWNlIHBvaW50ZXJzLCB3aGVyZSBtaW5vcgogICAgZGV2aWNlIG51bWJlcnMgYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGluZGV4LgogKi8KIApAQCAtMTE0LDcgKzExNCw3IEBACiAgICBleGFtcGxlLCBldGhlcm5ldCBjYXJkcywgbW9kZW1zKS4gIEluIG90aGVyIGNhc2VzLCB0aGVyZSBtYXkgYmUKICAgIG1hbnkgYWN0dWFsIG9yIGxvZ2ljYWwgZGV2aWNlcyAoU0NTSSBhZGFwdGVycywgbWVtb3J5IGNhcmRzIHdpdGgKICAgIG11bHRpcGxlIHBhcnRpdGlvbnMpLiAgVGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlcyBuZWVkIHRvIGJlIGtlcHQKLSAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgZGV2X2xpbmtfdAorICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBzdHJ1Y3QgcGNtY2lhX2RldmljZQogICAgc3RydWN0dXJlLiAgV2UgYWxsb2NhdGUgdGhlbSBpbiB0aGUgY2FyZCdzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsCiAgICBiZWNhdXNlIHRoZXkgZ2VuZXJhbGx5IHNob3VsZG4ndCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuCiAKQEAgLTE0MSwyNCArMTQxLDE2IEBACiAgIAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBhaXJvX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGFpcm9fcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotCWRldl9saW5rX3QgKmxpbms7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKIAogCURFQlVHKDAsICJhaXJvX2F0dGFjaCgpXG4iKTsKIAotCS8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCi0JbGluayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsaW5rKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWlyb19jczogbm8gbWVtb3J5IGZvciBuZXcgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCQogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwotCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLQlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CisJcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCXBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJcF9kZXYtPmlycS5IYW5kbGVyID0gTlVMTDsKIAkKIAkvKgogCSAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKQEAgLTE2NywyNiArMTU5LDE4IEBACiAJICBhbmQgYXR0cmlidXRlcyBvZiBJTyB3aW5kb3dzKSBhcmUgZml4ZWQgYnkgdGhlIG5hdHVyZSBvZiB0aGUKIAkgIGRldmljZSwgYW5kIGNhbiBiZSBoYXJkLXdpcmVkIGhlcmUuCiAJKi8KLQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOwotCWxpbmstPmNvbmYuVmNjID0gNTA7Ci0JbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IDA7CisJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCQogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAJbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYWlyb19jczogbm8gbWVtb3J5IGZvciBuZXcgZGV2aWNlXG4iKTsKLQkJa2ZyZWUgKGxpbmspOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbGluay0+cHJpdiA9IGxvY2FsOworCXBfZGV2LT5wcml2ID0gbG9jYWw7CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0JYWlyb19jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYWlyb19jb25maWcocF9kZXYpOwogfSAvKiBhaXJvX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE5OCwxNCArMTgyLDExIEBACiAgIAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgYWlyb19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgYWlyb19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KIAlERUJVRygwLCAiYWlyb19kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJYWlyb19yZWxlYXNlKGxpbmspOworCWFpcm9fcmVsZWFzZShsaW5rKTsKIAogCWlmICggKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ICkgewogCQlzdG9wX2Fpcm9fY2FyZCggKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2LCAwICk7CkBAIC0yMTMsNyArMTk0LDYgQEAKIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSBOVUxMOwogCiAJa2ZyZWUobGluay0+cHJpdik7Ci0Ja2ZyZWUobGluayk7CiB9IC8qIGFpcm9fZGV0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjI3LDkgKzIwNyw4IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIGFpcm9fY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGFpcm9fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CiAJdHVwbGVfdCB0dXBsZTsKIAljaXNwYXJzZV90IHBhcnNlOwogCWxvY2FsX2luZm9fdCAqZGV2OwpAQCAtMjM3LDggKzIxNiw3IEBACiAJdV9jaGFyIGJ1Zls2NF07CiAJd2luX3JlcV90IHJlcTsKIAltZW1yZXFfdCBtYXA7Ci0JCi0JaGFuZGxlID0gbGluay0+aGFuZGxlOworCiAJZGV2ID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICJhaXJvX2NvbmZpZygweCVwKVxuIiwgbGluayk7CkBAIC0yNTIsMTUgKzIzMCwxMiBAQAogCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKIAl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKLQkKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0JCisKIAkvKgogCSAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKIAkgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKQEAgLTI3NCwxMiArMjQ5LDEyIEBACiAJICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAJKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl3aGlsZSAoMSkgewogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKIAkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCB8fAotCQkJCXBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAorCQkJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJCiAJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7CkBAIC0yOTQsMTYgKzI2OSwxMSBAQAogCQkKIAkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCiAJCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLwotCQlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZjYyA9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKLQkJZWxzZSBpZiAoZGZsdC52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZjYyA9IGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKLQkJCiAJCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorCQkJbGluay0+Y29uZi5WcHAgPQogCQkJCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CiAJCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkJZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKIAkJCiAJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwpAQCAtMzI5LDEyICsyOTksMTIgQEAKIAkJfQogCQkKIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCQkKIAkJLyoKIAkJICBOb3cgc2V0IHVwIGEgY29tbW9uIG1lbW9yeSB3aW5kb3csIGlmIG5lZWRlZC4gIFRoZXJlIGlzIHJvb20KLQkJICBpbiB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgZm9yIG9uZSBtZW1vcnkgd2luZG93IGhhbmRsZSwKKwkJICBpbiB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIGZvciBvbmUgbWVtb3J5IHdpbmRvdyBoYW5kbGUsCiAJCSAgYnV0IGlmIHRoZSBiYXNlIGFkZHJlc3NlcyBuZWVkIHRvIGJlIHNhdmVkLCBvciBpZiBtdWx0aXBsZQogCQkgIHdpbmRvd3MgYXJlIG5lZWRlZCwgdGhlIGluZm8gc2hvdWxkIGdvIGluIHRoZSBwcml2YXRlIGRhdGEKIAkJICBzdHJ1Y3R1cmUgZm9yIHRoaXMgZGV2aWNlLgpAQCAtMzUwLDcgKzMyMCw3IEBACiAJCQlyZXEuQmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKIAkJCXJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOwogCQkJcmVxLkFjY2Vzc1NwZWVkID0gMDsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbikgIT0gMCkKKwkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pICE9IDApCiAJCQkJZ290byBuZXh0X2VudHJ5OwogCQkJbWFwLlBhZ2UgPSAwOyBtYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKIAkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkgIT0gMCkKQEAgLTM2MCw3ICszMzAsNyBAQAogCQlicmVhazsKIAkJCiAJbmV4dF9lbnRyeToKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJfQogCQogICAgIC8qCkBAIC0zNjksMzMgKzMzOSwzMiBAQAogICAgICAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KICAgICAqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCi0JCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKwkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAkKIAkvKgogCSAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKIAkgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKIAkgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSAKIAkJaW5pdF9haXJvX2NhcmQoIGxpbmstPmlycS5Bc3NpZ25lZElSUSwKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkgKTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGxpbmspICk7CiAJaWYgKCEoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYpIGdvdG8gY3NfZmFpbGVkOwogCQogCS8qCiAJICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQotCSAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2LgorCSAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuCiAJKi8KIAlzdHJjcHkoZGV2LT5ub2RlLmRldl9uYW1lLCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUgKTsKIAlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOwotCWxpbmstPmRldiA9ICZkZXYtPm5vZGU7CisJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwogCQogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAotCSAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCi0JICAgICAgIGxpbmstPmNvbmYuVmNjLzEwLCBsaW5rLT5jb25mLlZjYyUxMCk7Ci0JaWYgKGxpbmstPmNvbmYuVnBwMSkKLQkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwMS8xMCwgbGluay0+Y29uZi5WcHAxJTEwKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiAiLAorCSAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLlZwcCkKKwkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwLzEwLCBsaW5rLT5jb25mLlZwcCUxMCk7CiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKQEAgLTQwOCwxNCArMzc3LDEyIEBACiAJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCiAJCSAgICAgICByZXEuQmFzZStyZXEuU2l6ZS0xKTsKIAlwcmludGsoIlxuIik7Ci0JCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlyZXR1cm47Ci0JCisJcmV0dXJuIDA7CisKICBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCWFpcm9fcmVsZWFzZShsaW5rKTsKLQkKKwlyZXR1cm4gLUVOT0RFVjsKIH0gLyogYWlyb19jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC00MjYsNTEgKzM5MywyNiBAQAogICAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGFpcm9fcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgYWlyb19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCURFQlVHKDAsICJhaXJvX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwotCQotCS8qIFVubGluayB0aGUgZGV2aWNlIGNoYWluICovCi0JbGluay0+ZGV2ID0gTlVMTDsKLQkKLQkvKgotCSAgSW4gYSBub3JtYWwgZHJpdmVyLCBhZGRpdGlvbmFsIGNvZGUgbWF5IGJlIG5lZWRlZCB0byByZWxlYXNlCi0JICBvdGhlciBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZS4gCi0JKi8KLQkKLQkvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0JaWYgKGxpbmstPndpbikKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRKQotCQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgYWlyb19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYWlyb19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQluZXRpZl9kZXZpY2VfZGV0YWNoKGxvY2FsLT5ldGhfZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCX0KKwluZXRpZl9kZXZpY2VfZGV0YWNoKGxvY2FsLT5ldGhfZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpcm9fcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYWlyb19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCWlmIChsaW5rLT5vcGVuKSB7CiAJCXJlc2V0X2Fpcm9fY2FyZChsb2NhbC0+ZXRoX2Rldik7CiAJCW5ldGlmX2RldmljZV9hdHRhY2gobG9jYWwtPmV0aF9kZXYpOwogCX0KQEAgLTQ5Miw3ICs0MzQsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJhaXJvX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBhaXJvX2F0dGFjaCwKKwkucHJvYmUJCT0gYWlyb19wcm9iZSwKIAkucmVtb3ZlCQk9IGFpcm9fZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IGFpcm9faWRzLAogCS5zdXNwZW5kCT0gYWlyb19zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCmluZGV4IDBlMWFjMzMuLmJlZDY4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKQEAgLTE4MzgsNyArMTgzOCw3IEBACiB9CiAKICNpZmRlZiAgTU9EVUxFCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgaSA9IDA7CiAKQEAgLTE4NjAsNyArMTg2MCw3IEBACiB9CiAKIAotdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQordm9pZCBfX2V4aXQgY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgaSA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDg3YWZhNjguLjg2MDZjODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtMzQ2Myw2ICszNDYzLDcgQEAKIAl1OCBzdGF0dXMgPSBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF9jbyhwcml2LCBDTURfQkxPQ0tfU1RBVFVTX09GRlNFVCkpOwogCXU4IGNvbW1hbmQgPSBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF9jbyhwcml2LCBDTURfQkxPQ0tfQ09NTUFORF9PRkZTRVQpKTsKIAlpbnQgZmFzdF9zY2FuOworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAogCWlmIChzdGF0dXMgPT0gQ01EX1NUQVRVU19JRExFIHx8CiAJICAgIHN0YXR1cyA9PSBDTURfU1RBVFVTX0lOX1BST0dSRVNTKQpAQCAtMzQ4Nyw2ICszNDg4LDcgQEAKIAkJCWF0bWVsX3NjYW4ocHJpdiwgMSk7CiAJCX0gZWxzZSB7CiAJCQlpbnQgYnNzX2luZGV4ID0gcmV0cmlldmVfYnNzKHByaXYpOworCQkJaW50IG5vdGlmeV9zY2FuX2NvbXBsZXRlID0gMTsKIAkJCWlmIChic3NfaW5kZXggIT0gLTEpIHsKIAkJCQlhdG1lbF9qb2luX2Jzcyhwcml2LCBic3NfaW5kZXgpOwogCQkJfSBlbHNlIGlmIChwcml2LT5vcGVyYXRpbmdfbW9kZSA9PSBJV19NT0RFX0FESE9DICYmCkBAIC0zNDk1LDggKzM0OTcsMTQgQEAKIAkJCX0gZWxzZSB7CiAJCQkJcHJpdi0+ZmFzdF9zY2FuID0gIWZhc3Rfc2NhbjsKIAkJCQlhdG1lbF9zY2FuKHByaXYsIDEpOworCQkJCW5vdGlmeV9zY2FuX2NvbXBsZXRlID0gMDsKIAkJCX0KIAkJCXByaXYtPnNpdGVfc3VydmV5X3N0YXRlID0gU0lURV9TVVJWRVlfQ09NUExFVEVEOworCQkJaWYgKG5vdGlmeV9zY2FuX2NvbXBsZXRlKSB7CisJCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPmRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwkJCX0KIAkJfQogCQlicmVhazsKIApAQCAtMzUwOSw2ICszNTE3LDkgQEAKIAkJcHJpdi0+c2l0ZV9zdXJ2ZXlfc3RhdGUgPSBTSVRFX1NVUlZFWV9DT01QTEVURUQ7CiAJCWlmIChwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQpIHsKIAkJCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfUkVBRFkpOworCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5kZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CiAJCX0gZWxzZSB7CiAJCQlhdG1lbF9zY2FuKHByaXYsIDEpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwppbmRleCBkNmY0YTVhLi4yNmJmMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKQEAgLTkxLDggKzkxLDggQEAKICAgIGV2ZW50IGhhbmRsZXIuIAogKi8KIAotc3RhdGljIHZvaWQgYXRtZWxfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgYXRtZWxfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgYXRtZWxfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGF0bWVsX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiAvKgogICAgVGhlIGF0dGFjaCgpIGFuZCBkZXRhY2goKSBlbnRyeSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGFuZCBkZXN0cm95CkBAIC0xMTIsMTAgKzExMiwxMCBAQAogLyoKICAgIEEgbGlua2VkIGxpc3Qgb2YgImluc3RhbmNlcyIgb2YgdGhlICBhdG1lbG5ldCBkZXZpY2UuICBFYWNoIGFjdHVhbAogICAgUENNQ0lBIGNhcmQgY29ycmVzcG9uZHMgdG8gb25lIGRldmljZSBpbnN0YW5jZSwgYW5kIGlzIGRlc2NyaWJlZAotICAgYnkgb25lIGRldl9saW5rX3Qgc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgorICAgYnkgb25lIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KIAogICAgWW91IG1heSBub3Qgd2FudCB0byB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhpcyAtLSBmb3IgZXhhbXBsZSwgdGhlCi0gICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBkZXZfbGlua190IHBvaW50ZXJzLCB3aGVyZSBtaW5vcgorICAgbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2Ygc3RydWN0IHBjbWNpYV9kZXZpY2UgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCiAgICBkZXZpY2UgbnVtYmVycyBhcmUgdXNlZCB0byBkZXJpdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgaW5kZXguCiAqLwogCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgIGV4YW1wbGUsIGV0aGVybmV0IGNhcmRzLCBtb2RlbXMpLiAgSW4gb3RoZXIgY2FzZXMsIHRoZXJlIG1heSBiZQogICAgbWFueSBhY3R1YWwgb3IgbG9naWNhbCBkZXZpY2VzIChTQ1NJIGFkYXB0ZXJzLCBtZW1vcnkgY2FyZHMgd2l0aAogICAgbXVsdGlwbGUgcGFydGl0aW9ucykuICBUaGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUga2VwdAotICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBkZXZfbGlua190CisgICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIHN0cnVjdCBwY21jaWFfZGV2aWNlCiAgICBzdHJ1Y3R1cmUuICBXZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBjYXJkJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwKICAgIGJlY2F1c2UgdGhleSBnZW5lcmFsbHkgc2hvdWxkbid0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS4KIApAQCAtMTUyLDI0ICsxNTIsMTYgQEAKICAgCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGF0bWVsX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGF0bWVsX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKLQlkZXZfbGlua190ICpsaW5rOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7CiAKIAlERUJVRygwLCAiYXRtZWxfYXR0YWNoKClcbiIpOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLQlsaW5rID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxpbmspIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbF9jczogbm8gbWVtb3J5IGZvciBuZXcgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwotCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKKwlwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlwX2Rldi0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCiAJLyoKIAkgIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCkBAIC0xNzgsMjYgKzE3MCwxOCBAQAogCSAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCiAJICBkZXZpY2UsIGFuZCBjYW4gYmUgaGFyZC13aXJlZCBoZXJlLgogCSovCi0JbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwotCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCXBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAJbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRtZWxfY3M6IG5vIG1lbW9yeSBmb3IgbmV3IGRldmljZVxuIik7Ci0JCWtmcmVlIChsaW5rKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWxpbmstPnByaXYgPSBsb2NhbDsKKwlwX2Rldi0+cHJpdiA9IGxvY2FsOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCWF0bWVsX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBhdG1lbF9jb25maWcocF9kZXYpOwogfSAvKiBhdG1lbF9hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMDksMTcgKzE5MywxMyBAQAogICAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF0bWVsX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBhdG1lbF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KIAlERUJVRygwLCAiYXRtZWxfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCWF0bWVsX3JlbGVhc2UobGluayk7CisJYXRtZWxfcmVsZWFzZShsaW5rKTsKIAogCWtmcmVlKGxpbmstPnByaXYpOwotCWtmcmVlKGxpbmspOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIzNiwxOSArMjE2LDE3IEBACiAvKiBDYWxsLWJhY2sgZnVuY3Rpb24gdG8gaW50ZXJyb2dhdGUgUENNQ0lBLXNwZWNpZmljIGluZm9ybWF0aW9uCiAgICBhYm91dCB0aGUgY3VycmVudCBleGlzdGFuY2Ugb2YgdGhlIGNhcmQgKi8KIHN0YXRpYyBpbnQgY2FyZF9wcmVzZW50KHZvaWQgKmFyZykKLXsgCi0JZGV2X2xpbmtfdCAqbGluayA9IChkZXZfbGlua190ICopYXJnOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9TVVNQRU5EKQotCQlyZXR1cm4gMDsKLQllbHNlIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKQoreworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlICopYXJnOworCisJaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAkJcmV0dXJuIDE7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRtZWxfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGF0bWVsX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlOwogCXR1cGxlX3QgdHVwbGU7CiAJY2lzcGFyc2VfdCBwYXJzZTsKIAlsb2NhbF9pbmZvX3QgKmRldjsKQEAgLTI1Niw5ICsyMzQsOCBAQAogCXVfY2hhciBidWZbNjRdOwogCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQ7CiAKLQloYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJZGV2ID0gbGluay0+cHJpdjsKLQlkaWQgPSBoYW5kbGVfdG9fZGV2KGhhbmRsZSkuZHJpdmVyX2RhdGE7CisJZGlkID0gaGFuZGxlX3RvX2RldihsaW5rKS5kcml2ZXJfZGF0YTsKIAogCURFQlVHKDAsICJhdG1lbF9jb25maWcoMHglcClcbiIsIGxpbmspOwogCQpAQCAtMjcyLDE1ICsyNDksMTIgQEAKIAkgIHJlZ2lzdGVycy4KIAkqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKLQkKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0JCisKIAkvKgogCSAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKIAkgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKQEAgLTI5NCwxMiArMjY4LDEyIEBACiAJICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAJKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl3aGlsZSAoMSkgewogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKIAkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCB8fAotCQkJCXBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAorCQkJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJCiAJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7CkBAIC0zMTQsMTYgKzI4OCwxMSBAQAogCQkKIAkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCiAJCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLwotCQlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZjYyA9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKLQkJZWxzZSBpZiAoZGZsdC52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZjYyA9IGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKLQkJCiAJCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorCQkJbGluay0+Y29uZi5WcHAgPQogCQkJCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CiAJCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkJZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKIAkJCiAJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwpAQCAtMzQ5LDE0ICszMTgsMTQgQEAKIAkJfQogCQkKIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCiAJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KIAkJYnJlYWs7CiAJCQogCW5leHRfZW50cnk6Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCX0KIAkKIAkvKgpAQCAtMzY1LDE0ICszMzQsMTQgQEAKIAkgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCiAJKi8KIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQotCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7CisJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAJCiAJLyoKIAkgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCiAJICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAJICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgogCSovCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAJCiAJaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0FMRVJUIApAQCAtMzg0LDcgKzM1Myw3IEBACiAJCWluaXRfYXRtZWxfY2FyZChsaW5rLT5pcnEuQXNzaWduZWRJUlEsCiAJCQkJbGluay0+aW8uQmFzZVBvcnQxLAogCQkJCWRpZCA/IGRpZC0+ZHJpdmVyX2luZm8gOiBBVE1FTF9GV19UWVBFX05PTkUsCi0JCQkJJmhhbmRsZV90b19kZXYoaGFuZGxlKSwKKwkJCQkmaGFuZGxlX3RvX2RldihsaW5rKSwKIAkJCQljYXJkX3ByZXNlbnQsIAogCQkJCWxpbmspOwogCWlmICghKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2KSAKQEAgLTM5MywxOCArMzYyLDE4IEBACiAJCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCi0JICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4KIAkqLwogCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2Rldi0+bmFtZSApOwogCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7Ci0JbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKLQkJCQotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0JcmV0dXJuOwotCQorCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCXJldHVybiAwOworCiAgY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAlhdG1lbF9yZWxlYXNlKGxpbmspOworCXJldHVybiAtRU5PREVWOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQxNSw1MyArMzg0LDM0IEBACiAgIAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgYXRtZWxfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgYXRtZWxfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2OwotCQkKKwogCURFQlVHKDAsICJhdG1lbF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQkKLQkvKiBVbmxpbmsgdGhlIGRldmljZSBjaGFpbiAqLwotCWxpbmstPmRldiA9IE5VTEw7Ci0JCi0JaWYgKGRldikgCisKKwlpZiAoZGV2KQogCQlzdG9wX2F0bWVsX2NhcmQoZGV2KTsKLQkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSBOVUxMOyAKLQkKLQkvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRKQotCQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSBOVUxMOworCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCi1zdGF0aWMgaW50IGF0bWVsX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXRtZWxfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCW5ldGlmX2RldmljZV9kZXRhY2gobG9jYWwtPmV0aF9kZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQorCW5ldGlmX2RldmljZV9kZXRhY2gobG9jYWwtPmV0aF9kZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRtZWxfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF0bWVsX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlhdG1lbF9vcGVuKGxvY2FsLT5ldGhfZGV2KTsKLQkJbmV0aWZfZGV2aWNlX2F0dGFjaChsb2NhbC0+ZXRoX2Rldik7Ci0JfQorCWF0bWVsX29wZW4obG9jYWwtPmV0aF9kZXYpOworCW5ldGlmX2RldmljZV9hdHRhY2gobG9jYWwtPmV0aF9kZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTUsNyArNDY1LDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiYXRtZWxfY3MiLAogICAgICAgICB9LAotCS5wcm9iZSAgICAgICAgICA9IGF0bWVsX2F0dGFjaCwKKwkucHJvYmUgICAgICAgICAgPSBhdG1lbF9wcm9iZSwKIAkucmVtb3ZlCQk9IGF0bWVsX2RldGFjaCwKIAkuaWRfdGFibGUJPSBhdG1lbF9pZHMsCiAJLnN1c3BlbmQJPSBhdG1lbF9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9LY29uZmlnCmluZGV4IDQxODQ2NTYuLjI1ZWE0NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L0tjb25maWcKQEAgLTE3LDggKzE3LDExIEBACiAKIGNvbmZpZyBCQ000M1hYX0RNQQogCWJvb2wKKwlkZXBlbmRzIG9uIEJDTTQzWFgKKwogY29uZmlnIEJDTTQzWFhfUElPCiAJYm9vbAorCWRlcGVuZHMgb24gQkNNNDNYWAogCiBjaG9pY2UKIAlwcm9tcHQgIkJDTTQzeHggZGF0YSB0cmFuc2ZlciBtb2RlIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaAppbmRleCBkY2FkZDI5Li4yZTgzMDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaApAQCAtMTUsNyArMTUsNiBAQAogCiAjaW5jbHVkZSAiYmNtNDN4eF9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAiYmNtNDN4eF9sZWRzLmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9zeXNmcy5oIgogCiAKICNkZWZpbmUgUEZYCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIKQEAgLTYzOCw4ICs2MzcsNiBAQAogfTsKIAogc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSB7Ci0Jc3RydWN0IGJjbTQzeHhfc3lzZnMgc3lzZnM7Ci0KIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNvZnRtYWM7CiAKQEAgLTc3Miw2ICs3NjksMjAgQEAKIAlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19wcml2KGRldik7CiB9CiAKK3N0cnVjdCBkZXZpY2U7CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBiY200M3h4X3ByaXZhdGUgKiBkZXZfdG9fYmNtKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKKwlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY207CisKKwluZXRfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOworCisJcmV0dXJuIGJjbTsKK30KKwogCiAvKiBIZWxwZXIgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMgYSBib29sZWFuLgogICogVFJVRSwgaWYgUElPIGlzIHVzZWQ7IEZBTFNFLCBpZiBETUEgaXMgdXNlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jCmluZGV4IGQyYzM0MDEuLjM1YTRmY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYwpAQCAtNDUyLDEyICs0NTIsMTIgQEAKIAlzaXplX3QgaTsKIAljaGFyIGM7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiRGF0YSBkdW1wICglcywgJXUgYnl0ZXMpOiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRhdGEgZHVtcCAoJXMsICV6ZCBieXRlcyk6IiwKIAkgICAgICAgZGVzY3JpcHRpb24sIHNpemUpOwogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJYyA9IGRhdGFbaV07CiAJCWlmIChpICUgOCA9PSAwKQotCQkJcHJpbnRrKCJcbiIgS0VSTl9JTkZPIFBGWCAiMHglMDh4OiAgMHglMDJ4LCAiLCBpLCBjICYgMHhmZik7CisJCQlwcmludGsoIlxuIiBLRVJOX0lORk8gUEZYICIweCUwOHp4OiAgMHglMDJ4LCAiLCBpLCBjICYgMHhmZik7CiAJCWVsc2UKIAkJCXByaW50aygiMHglMDJ4LCAiLCBjICYgMHhmZik7CiAJfQpAQCAtNDcyLDEyICs0NzIsMTIgQEAKIAlpbnQgajsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIioqKiBCaXRkdW1wICglcywgJXUgYnl0ZXMsICVzKSAqKioiLAorCXByaW50ayhLRVJOX0lORk8gUEZYICIqKiogQml0ZHVtcCAoJXMsICV6ZCBieXRlcywgJXMpICoqKiIsCiAJICAgICAgIGRlc2NyaXB0aW9uLCBieXRlcywgbXNiX3RvX2xzYiA/ICJNU0IgdG8gTFNCIiA6ICJMU0IgdG8gTVNCIik7CiAJZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHsKIAkJZCA9IGRhdGEgKyBpOwogCQlpZiAoaSAlIDggPT0gMCkKLQkJCXByaW50aygiXG4iIEtFUk5fSU5GTyBQRlggIjB4JTA4eDogICIsIGkpOworCQkJcHJpbnRrKCJcbiIgS0VSTl9JTkZPIFBGWCAiMHglMDh6eDogICIsIGkpOwogCQlpZiAobXNiX3RvX2xzYikgewogCQkJZm9yIChqID0gNzsgaiA+PSAwOyBqLS0pIHsKIAkJCQlpZiAoKmQgJiAoMSA8PCBqKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYwppbmRleCBjMzY4MWI4Li5kMDMxOGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jCkBAIC0xOTYsOCArMTk2LDkgQEAKIAl9CiAJaWYgKHJpbmctPmRtYWJhc2UgKyBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSA+IEJDTTQzeHhfRE1BX0JVU0FERFJNQVgpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiPj4+RkFUQUwgRVJST1I8PDwgIERNQSBSSU5HTUVNT1JZID4xRyAiCi0JCQkJICAgICIoMHglMDh4LCBsZW46ICVsdSlcbiIsCi0JCSAgICAgICByaW5nLT5kbWFiYXNlLCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSk7CisJCQkJICAgICIoMHglbGx4LCBsZW46ICVsdSlcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyaW5nLT5kbWFiYXNlLAorCQkJCUJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFKTsKIAkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSwKIAkJCQkgIHJpbmctPnZiYXNlLCByaW5nLT5kbWFiYXNlKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMDcsOCArMzA4LDggQEAKIAkJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiPj4+RkFUQUwgRVJST1I8PDwgIERNQSBSWCBTS0IgPjFHICIKLQkJCQkgICAgIigweCUwOHgsIGxlbjogJXUpXG4iLAotCQkgICAgICAgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSk7CisJCQkJICAgICIoMHglbGx4LCBsZW46ICV1KVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZXRhLT5za2IgPSBza2I7CkBAIC02MjMsMjUgKzYyNCwyOCBAQAogc3RhdGljIHUxNiBnZW5lcmF0ZV9jb29raWUoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZywKIAkJCSAgIGludCBzbG90KQogewotCXUxNiBjb29raWUgPSAweDAwMDA7CisJdTE2IGNvb2tpZSA9IDB4RjAwMDsKIAogCS8qIFVzZSB0aGUgdXBwZXIgNCBiaXRzIG9mIHRoZSBjb29raWUgYXMKIAkgKiBETUEgY29udHJvbGxlciBJRCBhbmQgc3RvcmUgdGhlIHNsb3QgbnVtYmVyCi0JICogaW4gdGhlIGxvd2VyIDEyIGJpdHMKKwkgKiBpbiB0aGUgbG93ZXIgMTIgYml0cy4KKwkgKiBOb3RlIHRoYXQgdGhlIGNvb2tpZSBtdXN0IG5ldmVyIGJlIDAsIGFzIHRoaXMKKwkgKiBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCBpbiBSWCBwYXRoLgogCSAqLwogCXN3aXRjaCAocmluZy0+bW1pb19iYXNlKSB7CiAJZGVmYXVsdDoKIAkJYXNzZXJ0KDApOwogCWNhc2UgQkNNNDN4eF9NTUlPX0RNQTFfQkFTRToKKwkJY29va2llID0gMHhBMDAwOwogCQlicmVhazsKIAljYXNlIEJDTTQzeHhfTU1JT19ETUEyX0JBU0U6Ci0JCWNvb2tpZSA9IDB4MTAwMDsKKwkJY29va2llID0gMHhCMDAwOwogCQlicmVhazsKIAljYXNlIEJDTTQzeHhfTU1JT19ETUEzX0JBU0U6Ci0JCWNvb2tpZSA9IDB4MjAwMDsKKwkJY29va2llID0gMHhDMDAwOwogCQlicmVhazsKIAljYXNlIEJDTTQzeHhfTU1JT19ETUE0X0JBU0U6Ci0JCWNvb2tpZSA9IDB4MzAwMDsKKwkJY29va2llID0gMHhEMDAwOwogCQlicmVhazsKIAl9CiAJYXNzZXJ0KCgodTE2KXNsb3QgJiAweEYwMDApID09IDB4MDAwMCk7CkBAIC02NTksMTYgKzY2MywxNiBAQAogCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcgPSBOVUxMOwogCiAJc3dpdGNoIChjb29raWUgJiAweEYwMDApIHsKLQljYXNlIDB4MDAwMDoKKwljYXNlIDB4QTAwMDoKIAkJcmluZyA9IGRtYS0+dHhfcmluZzA7CiAJCWJyZWFrOwotCWNhc2UgMHgxMDAwOgorCWNhc2UgMHhCMDAwOgogCQlyaW5nID0gZG1hLT50eF9yaW5nMTsKIAkJYnJlYWs7Ci0JY2FzZSAweDIwMDA6CisJY2FzZSAweEMwMDA6CiAJCXJpbmcgPSBkbWEtPnR4X3JpbmcyOwogCQlicmVhazsKLQljYXNlIDB4MzAwMDoKKwljYXNlIDB4RDAwMDoKIAkJcmluZyA9IGRtYS0+dHhfcmluZzM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC03MjksOCArNzMzLDggQEAKIAlpZiAodW5saWtlbHkobWV0YS0+ZG1hYWRkciArIHNrYi0+bGVuID4gQkNNNDN4eF9ETUFfQlVTQUREUk1BWCkpIHsKIAkJcmV0dXJuX3Nsb3QocmluZywgc2xvdCk7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIj4+PkZBVEFMIEVSUk9SPDw8ICBETUEgVFggU0tCID4xRyAiCi0JCQkJICAgICIoMHglMDh4LCBsZW46ICV1KVxuIiwKLQkJICAgICAgIG1ldGEtPmRtYWFkZHIsIHNrYi0+bGVuKTsKKwkJCQkgICAgIigweCVsbHgsIGxlbjogJXUpXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyltZXRhLT5kbWFhZGRyLCBza2ItPmxlbik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtODM4LDggKzg0MiwxOCBAQAogCQkvKiBXZSByZWNlaXZlZCBhbiB4bWl0IHN0YXR1cy4gKi8KIAkJc3RydWN0IGJjbTQzeHhfaHd4bWl0c3RhdHVzICpodyA9IChzdHJ1Y3QgYmNtNDN4eF9od3htaXRzdGF0dXMgKilza2ItPmRhdGE7CiAJCXN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgc3RhdDsKKwkJaW50IGkgPSAwOwogCiAJCXN0YXQuY29va2llID0gbGUxNl90b19jcHUoaHctPmNvb2tpZSk7CisJCXdoaWxlIChzdGF0LmNvb2tpZSA9PSAwKSB7CisJCQlpZiAodW5saWtlbHkoKytpID49IDEwMDAwKSkgeworCQkJCWFzc2VydCgwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXVkZWxheSgyKTsKKwkJCWJhcnJpZXIoKTsKKwkJCXN0YXQuY29va2llID0gbGUxNl90b19jcHUoaHctPmNvb2tpZSk7CisJCX0KIAkJc3RhdC5mbGFncyA9IGh3LT5mbGFnczsKIAkJc3RhdC5jbnQxID0gaHctPmNudDE7CiAJCXN0YXQuY250MiA9IGh3LT5jbnQyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5oCmluZGV4IDJkNTIwZTQuLmI3ZDc3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmgKQEAgLTIxMyw2ICsyMTMsMTQgQEAKIHZvaWQgYmNtNDN4eF9kbWFfcngoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZykKIHsKIH0KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgYmNtNDN4eF9kbWFfdHhfc3VzcGVuZChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQoreworfQorc3RhdGljIGlubGluZQordm9pZCBiY200M3h4X2RtYV90eF9yZXN1bWUoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZykKK3sKK30KIAogI2VuZGlmIC8qIENPTkZJR19CQ000M1hYX0RNQSAqLwogI2VuZGlmIC8qIEJDTTQzeHhfRE1BX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwppbmRleCBjMzczNzFmLi43ZWQxOGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJiY200M3h4X3d4LmgiCiAjaW5jbHVkZSAiYmNtNDN4eF9ldGh0b29sLmgiCiAjaW5jbHVkZSAiYmNtNDN4eF94bWl0LmgiCisjaW5jbHVkZSAiYmNtNDN4eF9zeXNmcy5oIgogCiAKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gQkNNNDN4eCB3aXJlbGVzcyBkcml2ZXIiKTsKQEAgLTkzOCw5ICs5MzksOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBiY200M3h4X2dlb19pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKK3N0YXRpYyBpbnQgYmNtNDN4eF9nZW9faW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9nZW8gZ2VvOworCXN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW87CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwogCWludCBoYXZlX2EgPSAwLCBoYXZlX2JnID0gMDsKIAlpbnQgaTsKQEAgLTk0OCw3ICs5NDksMTAgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHk7CiAJY29uc3QgY2hhciAqaXNvX2NvdW50cnk7CiAKLQltZW1zZXQoJmdlbywgMCwgc2l6ZW9mKGdlbykpOworCWdlbyA9IGt6YWxsb2Moc2l6ZW9mKCpnZW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdlbykKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3IgKGkgPSAwOyBpIDwgYmNtLT5ucl84MDIxMV9hdmFpbGFibGU7IGkrKykgewogCQlwaHkgPSAmKGJjbS0+Y29yZV84MDIxMV9leHRbaV0ucGh5KTsKIAkJc3dpdGNoIChwaHktPnR5cGUpIHsKQEAgLTk2NiwzMSArOTcwLDM2IEBACiAJaXNvX2NvdW50cnkgPSBiY200M3h4X2xvY2FsZV9pc28oYmNtLT5zcHJvbS5sb2NhbGUpOwogCiAgCWlmIChoYXZlX2EpIHsKLQkJZm9yIChpID0gMCwgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCAyMDE7IGNoYW5uZWwrKykgewotCQkJY2hhbiA9ICZnZW8uYVtpKytdOworCQlmb3IgKGkgPSAwLCBjaGFubmVsID0gSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMOworCQkgICAgICBjaGFubmVsIDw9IElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTDsgY2hhbm5lbCsrKSB7CisJCQljaGFuID0gJmdlby0+YVtpKytdOwogCQkJY2hhbi0+ZnJlcSA9IGJjbTQzeHhfY2hhbm5lbF90b19mcmVxX2EoY2hhbm5lbCk7CiAJCQljaGFuLT5jaGFubmVsID0gY2hhbm5lbDsKIAkJfQotCQlnZW8uYV9jaGFubmVscyA9IGk7CisJCWdlby0+YV9jaGFubmVscyA9IGk7CiAJfQogCWlmIChoYXZlX2JnKSB7Ci0JCWZvciAoaSA9IDAsIGNoYW5uZWwgPSAxOyBjaGFubmVsIDwgMTU7IGNoYW5uZWwrKykgewotCQkJY2hhbiA9ICZnZW8uYmdbaSsrXTsKKwkJZm9yIChpID0gMCwgY2hhbm5lbCA9IElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTDsKKwkJICAgICAgY2hhbm5lbCA8PSBJRUVFODAyMTFfMjRHSFpfTUFYX0NIQU5ORUw7IGNoYW5uZWwrKykgeworCQkJY2hhbiA9ICZnZW8tPmJnW2krK107CiAJCQljaGFuLT5mcmVxID0gYmNtNDN4eF9jaGFubmVsX3RvX2ZyZXFfYmcoY2hhbm5lbCk7CiAJCQljaGFuLT5jaGFubmVsID0gY2hhbm5lbDsKIAkJfQotCQlnZW8uYmdfY2hhbm5lbHMgPSBpOworCQlnZW8tPmJnX2NoYW5uZWxzID0gaTsKIAl9Ci0JbWVtY3B5KGdlby5uYW1lLCBpc29fY291bnRyeSwgMik7CisJbWVtY3B5KGdlby0+bmFtZSwgaXNvX2NvdW50cnksIDIpOwogCWlmICgwIC8qVE9ETzogT3V0ZG9vciB1c2Ugb25seSAqLykKLQkJZ2VvLm5hbWVbMl0gPSAnTyc7CisJCWdlby0+bmFtZVsyXSA9ICdPJzsKIAllbHNlIGlmICgwIC8qVE9ETzogSW5kb29yIHVzZSBvbmx5ICovKQotCQlnZW8ubmFtZVsyXSA9ICdJJzsKKwkJZ2VvLT5uYW1lWzJdID0gJ0knOwogCWVsc2UKLQkJZ2VvLm5hbWVbMl0gPSAnICc7Ci0JZ2VvLm5hbWVbM10gPSAnXDAnOworCQlnZW8tPm5hbWVbMl0gPSAnICc7CisJZ2VvLT5uYW1lWzNdID0gJ1wwJzsKIAotCWllZWU4MDIxMV9zZXRfZ2VvKGJjbS0+aWVlZSwgJmdlbyk7CisJaWVlZTgwMjExX3NldF9nZW8oYmNtLT5pZWVlLCBnZW8pOworCWtmcmVlKGdlbyk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogRHVtbXlUcmFuc21pc3Npb24gZnVuY3Rpb24sIGFzIGRvY3VtZW50ZWQgb24gCkBAIC0zMjYyLDYgKzMyNzEsOSBAQAogCWJjbTQzeHhfc3lzZnNfcmVnaXN0ZXIoYmNtKTsKIAkvL0ZJWE1FOiBjaGVjayBmb3IgYmNtNDN4eF9zeXNmc19yZWdpc3RlciBmYWlsdXJlLiBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0IG1lc3N5IHJlZ2FyZGluZyB1bndpbmRpbmcsIHRob3VnaC4uLgogCisJLypGSVhNRTogVGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBzb2Z0bWFjIGluc3RlYWQuICovCisJc2NoZWR1bGVfd29yaygmYmNtLT5zb2Z0bWFjLT5hc3NvY2luZm8ud29yayk7CisKIAlhc3NlcnQoZXJyID09IDApOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC0zNDc4LDE2ICszNDkwLDE3IEBACiAJCQlnb3RvIGVycl84MDIxMV91bndpbmQ7CiAJCWJjbTQzeHhfd2lyZWxlc3NfY29yZV9kaXNhYmxlKGJjbSk7CiAJfQorCWVyciA9IGJjbTQzeHhfZ2VvX2luaXQoYmNtKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl84MDIxMV91bndpbmQ7CiAJYmNtNDN4eF9wY3RsX3NldF9jcnlzdGFsKGJjbSwgMCk7CiAKIAkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAqLwotCWlmIChiY200M3h4X2N1cnJlbnRfcGh5KGJjbSktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYmNtLT5zcHJvbS5ldDFtYWNhZGRyKSkKIAkJbWVtY3B5KGJjbS0+bmV0X2Rldi0+ZGV2X2FkZHIsIGJjbS0+c3Byb20uZXQxbWFjYWRkciwgNik7CiAJZWxzZQogCQltZW1jcHkoYmNtLT5uZXRfZGV2LT5kZXZfYWRkciwgYmNtLT5zcHJvbS5pbDBtYWNhZGRyLCA2KTsKIAotCWJjbTQzeHhfZ2VvX2luaXQoYmNtKTsKLQogCXNucHJpbnRmKGJjbS0+bmljaywgSVdfRVNTSURfTUFYX1NJWkUsCiAJCSAiQnJvYWRjb20gJTA0WCIsIGJjbS0+Y2hpcF9pZCk7CiAKQEAgLTM1MjIsNiArMzUzNSw3IEBACiAJCWVyciA9IGJjbTQzeHhfcGlvX3R4KGJjbSwgdHhiKTsKIAllbHNlCiAJCWVyciA9IGJjbTQzeHhfZG1hX3R4KGJjbSwgdHhiKTsKKwliY20tPm5ldF9kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zOTM1LDkgKzM5NDksNiBAQAogCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRfZGV2KTsKIAkKLQkvKkZJWE1FOiBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHNvZnRtYWMgaW5zdGVhZC4gKi8KLQlzY2hlZHVsZV93b3JrKCZiY20tPnNvZnRtYWMtPmFzc29jaW5mby53b3JrKTsKLQogCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiRGV2aWNlIHJlc3VtZWQuXG4iKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmgKaW5kZXggZWNhNzlhMy4uMzBhMjAyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5oCkBAIC0xMTgsMTIgKzExOCwxNCBAQAogc3RhdGljIGlubGluZQogaW50IGJjbTQzeHhfaXNfdmFsaWRfY2hhbm5lbF9hKHU4IGNoYW5uZWwpCiB7Ci0JcmV0dXJuIChjaGFubmVsIDw9IDIwMCk7CisJcmV0dXJuIChjaGFubmVsID49IElFRUU4MDIxMV81MkdIWl9NSU5fQ0hBTk5FTAorCSAgICAgICAmJiBjaGFubmVsIDw9IElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCk7CiB9CiBzdGF0aWMgaW5saW5lCiBpbnQgYmNtNDN4eF9pc192YWxpZF9jaGFubmVsX2JnKHU4IGNoYW5uZWwpCiB7Ci0JcmV0dXJuIChjaGFubmVsID49IDEgJiYgY2hhbm5lbCA8PSAxNCk7CisJcmV0dXJuIChjaGFubmVsID49IElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTAorCSAgICAgICAmJiBjaGFubmVsIDw9IElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCk7CiB9CiBzdGF0aWMgaW5saW5lCiBpbnQgYmNtNDN4eF9pc192YWxpZF9jaGFubmVsKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYwppbmRleCAwYTY2ZjQzLi5iMGFiYWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jCkBAIC0xMjg3LDcgKzEyODcsNyBAQAogCWlmIChyYWRpby0+cmV2aXNpb24gPT0gOCkKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MDUsIDB4MzIzMCk7CiAJYmNtNDN4eF9waHlfaW5pdF9wY3RsKGJjbSk7Ci0JaWYgKGJjbS0+Y2hpcF9pZCA9PSAweDQzMDYgJiYgYmNtLT5jaGlwX3BhY2thZ2UgIT0gMikgeworCWlmIChiY20tPmNoaXBfaWQgPT0gMHg0MzA2ICYmIGJjbS0+Y2hpcF9wYWNrYWdlID09IDIpIHsKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MjksCiAJCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDI5KSAmIDB4QkZGRik7CiAJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEMzLApAQCAtMjE1MSw2ICsyMTUxLDcgQEAKIAkJCQlwaHktPnRzc2kyZGJtID0gTlVMTDsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3QgZ2VuZXJhdGUgIgogCQkJCQkJICAgICJ0c3NpMmRCbSB0YWJsZVxuIik7CisJCQkJa2ZyZWUoZHluX3Rzc2kyZGJtKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KIAkJcGh5LT50c3NpMmRibSA9IGR5bl90c3NpMmRibTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waW8uYwppbmRleCBjNTlkZGQ0Li4wYWExYmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bpby5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiYmNtNDN4eF9waW8uaCIKICNpbmNsdWRlICJiY200M3h4X21haW4uaCIKICNpbmNsdWRlICJiY200M3h4X3htaXQuaCIKKyNpbmNsdWRlICJiY200M3h4X3Bvd2VyLmgiCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCkBAIC00NCwxMCArNDUsMTAgQEAKIAkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYREFUQSwKIAkJCQkgIG9jdGV0KTsKIAkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLAotCQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVISSk7CisJCQkJICBCQ000M3h4X1BJT19UWENUTF9XUklURUxPKTsKIAl9IGVsc2UgewogCQliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fVFhDVEwsCi0JCQkJICBCQ000M3h4X1BJT19UWENUTF9XUklURUhJKTsKKwkJCQkgIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFTE8pOwogCQliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fVFhEQVRBLAogCQkJCSAgb2N0ZXQpOwogCX0KQEAgLTEwMyw3ICsxMDQsNyBAQAogCQliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fVFhEQVRBLAogCQkJCSAgc2tiLT5kYXRhW3NrYi0+bGVuIC0gMV0pOwogCQliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fVFhDVEwsCi0JCQkJICBCQ000M3h4X1BJT19UWENUTF9XUklURUhJIHwKKwkJCQkgIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFTE8gfAogCQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfQ09NUExFVEUpOwogCX0gZWxzZSB7CiAJCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCwKQEAgLTExMiw5ICsxMTMsMTAgQEAKIH0KIAogc3RhdGljIHUxNiBnZW5lcmF0ZV9jb29raWUoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlLAotCQkJICAgaW50IHBhY2tldGluZGV4KQorCQkJICAgc3RydWN0IGJjbTQzeHhfcGlvX3R4cGFja2V0ICpwYWNrZXQpCiB7CiAJdTE2IGNvb2tpZSA9IDB4MDAwMDsKKwlpbnQgcGFja2V0aW5kZXg7CiAKIAkvKiBXZSB1c2UgdGhlIHVwcGVyIDQgYml0cyBmb3IgdGhlIFBJTwogCSAqIGNvbnRyb2xsZXIgSUQgYW5kIHRoZSBsb3dlciAxMiBiaXRzCkBAIC0xMzUsNiArMTM3LDcgQEAKIAlkZWZhdWx0OgogCQlhc3NlcnQoMCk7CiAJfQorCXBhY2tldGluZGV4ID0gcGlvX3R4cGFja2V0X2dldGluZGV4KHBhY2tldCk7CiAJYXNzZXJ0KCgodTE2KXBhY2tldGluZGV4ICYgMHhGMDAwKSA9PSAweDAwMDApOwogCWNvb2tpZSB8PSAodTE2KXBhY2tldGluZGV4OwogCkBAIC0xODQsNyArMTg3LDcgQEAKIAliY200M3h4X2dlbmVyYXRlX3R4aGRyKHF1ZXVlLT5iY20sCiAJCQkgICAgICAgJnR4aGRyLCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJICAgICAgIChwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MgPT0gMCksCi0JCQkgICAgICAgZ2VuZXJhdGVfY29va2llKHF1ZXVlLCBwaW9fdHhwYWNrZXRfZ2V0aW5kZXgocGFja2V0KSkpOworCQkJICAgICAgIGdlbmVyYXRlX2Nvb2tpZShxdWV1ZSwgcGFja2V0KSk7CiAKIAl0eF9zdGFydChxdWV1ZSk7CiAJb2N0ZXRzID0gc2tiLT5sZW4gKyBzaXplb2YodHhoZHIpOwpAQCAtMjQxLDcgKzI0NCw3IEBACiAJCXF1ZXVlLT50eF9kZXZxX3BhY2tldHMrKzsKIAkJcXVldWUtPnR4X2RldnFfdXNlZCArPSBvY3RldHM7CiAKLQkJYXNzZXJ0KHBhY2tldC0+eG1pdHRlZF9mcmFncyA8PSBwYWNrZXQtPnR4Yi0+bnJfZnJhZ3MpOworCQlhc3NlcnQocGFja2V0LT54bWl0dGVkX2ZyYWdzIDwgcGFja2V0LT50eGItPm5yX2ZyYWdzKTsKIAkJcGFja2V0LT54bWl0dGVkX2ZyYWdzKys7CiAJCXBhY2tldC0+eG1pdHRlZF9vY3RldHMgKz0gb2N0ZXRzOwogCX0KQEAgLTI1Nyw4ICsyNjAsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBiY200M3h4X3Bpb190eHBhY2tldCAqcGFja2V0LCAqdG1wX3BhY2tldDsKIAlpbnQgZXJyOworCXUxNiB0eGN0bDsKIAogCWJjbTQzeHhfbG9ja19tbWlvKGJjbSwgZmxhZ3MpOworCisJdHhjdGwgPSBiY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCk7CisJaWYgKHR4Y3RsICYgQkNNNDN4eF9QSU9fVFhDVExfU1VTUEVORCkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhY2tldCwgdG1wX3BhY2tldCwgJnF1ZXVlLT50eHF1ZXVlLCBsaXN0KSB7CiAJCWFzc2VydChwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MgPCBwYWNrZXQtPnR4Yi0+bnJfZnJhZ3MpOwogCQlpZiAocGFja2V0LT54bWl0dGVkX2ZyYWdzID09IDApIHsKQEAgLTI4OCw2ICsyOTcsNyBAQAogCW5leHRfcGFja2V0OgogCQljb250aW51ZTsKIAl9CitvdXRfdW5sb2NrOgogCWJjbTQzeHhfdW5sb2NrX21taW8oYmNtLCBmbGFncyk7CiB9CiAKQEAgLTMzMCwxMiArMzQwLDE5IEBACiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpcXVldWUpOwogCiAJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpOwotCXZhbHVlIHw9IEJDTTQzeHhfU0JGX1hGRVJfUkVHX0JZVEVTV0FQOworCXZhbHVlICY9IH5CQ000M3h4X1NCRl9YRkVSX1JFR19CWVRFU1dBUDsKIAliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxELCB2YWx1ZSk7CiAKIAlxc2l6ZSA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgcXVldWUtPm1taW9fYmFzZSArIEJDTTQzeHhfUElPX1RYUUJVRlNJWkUpOworCWlmIChxc2l6ZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkVSUk9SOiBUaGlzIGNhcmQgZG9lcyBub3Qgc3VwcG9ydCBQSU8gIgorCQkJCSAgICAib3BlcmF0aW9uIG1vZGUuIFBsZWFzZSB1c2UgRE1BIG1vZGUgIgorCQkJCSAgICAiKG1vZHVsZSBwYXJhbWV0ZXIgcGlvPTApLlxuIik7CisJCWdvdG8gZXJyX2ZyZWVxdWV1ZTsKKwl9CiAJaWYgKHFzaXplIDw9IEJDTTQzeHhfUElPX1RYUUFESlVTVCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJQSU8gdHggZGV2aWNlLXF1ZXVlIHRvbyBzbWFsbCAoJXUpXG4iLCBxc2l6ZSk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlBJTyB0eCBkZXZpY2UtcXVldWUgdG9vIHNtYWxsICgldSlcbiIsCisJCSAgICAgICBxc2l6ZSk7CiAJCWdvdG8gZXJyX2ZyZWVxdWV1ZTsKIAl9CiAJcXNpemUgLT0gQkNNNDN4eF9QSU9fVFhRQURKVVNUOwpAQCAtNDQ0LDE1ICs0NjEsMTAgQEAKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUgPSBiY200M3h4X2N1cnJlbnRfcGlvKGJjbSktPnF1ZXVlMTsKIAlzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgKnBhY2tldDsKLQl1MTYgdG1wOwogCiAJYXNzZXJ0KCFxdWV1ZS0+dHhfc3VzcGVuZGVkKTsKIAlhc3NlcnQoIWxpc3RfZW1wdHkoJnF1ZXVlLT50eGZyZWUpKTsKIAotCXRtcCA9IGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMKTsKLQlpZiAodG1wICYgQkNNNDN4eF9QSU9fVFhDVExfU1VTUEVORCkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCXBhY2tldCA9IGxpc3RfZW50cnkocXVldWUtPnR4ZnJlZS5uZXh0LCBzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQsIGxpc3QpOwogCXBhY2tldC0+dHhiID0gdHhiOwogCXBhY2tldC0+eG1pdHRlZF9mcmFncyA9IDA7CkBAIC00NjIsNyArNDc0LDcgQEAKIAlhc3NlcnQocXVldWUtPm5yX3R4ZnJlZSA8IEJDTTQzeHhfUElPX01BWFRYUEFDS0VUUyk7CiAKIAkvKiBTdXNwZW5kIFRYLCBpZiB3ZSBhcmUgb3V0IG9mIHBhY2tldHMgaW4gdGhlICJmcmVlIiBxdWV1ZS4gKi8KLQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmcXVldWUtPnR4ZnJlZSkpKSB7CisJaWYgKGxpc3RfZW1wdHkoJnF1ZXVlLT50eGZyZWUpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUocXVldWUtPmJjbS0+bmV0X2Rldik7CiAJCXF1ZXVlLT50eF9zdXNwZW5kZWQgPSAxOwogCX0KQEAgLTQ4MCwxNSArNDkyLDE1IEBACiAKIAlxdWV1ZSA9IHBhcnNlX2Nvb2tpZShiY20sIHN0YXR1cy0+Y29va2llLCAmcGFja2V0KTsKIAlhc3NlcnQocXVldWUpOwotLy9UT0RPCi1pZiAoIXF1ZXVlKQotcmV0dXJuOworCiAJZnJlZV90eHBhY2tldChwYWNrZXQsIDEpOwotCWlmICh1bmxpa2VseShxdWV1ZS0+dHhfc3VzcGVuZGVkKSkgeworCWlmIChxdWV1ZS0+dHhfc3VzcGVuZGVkKSB7CiAJCXF1ZXVlLT50eF9zdXNwZW5kZWQgPSAwOwogCQluZXRpZl93YWtlX3F1ZXVlKHF1ZXVlLT5iY20tPm5ldF9kZXYpOwogCX0KLQkvKiBJZiB0aGVyZSBhcmUgcGFja2V0cyBvbiB0aGUgdHhxdWV1ZSwgcG9rZSB0aGUgdGFza2xldC4gKi8KKwkvKiBJZiB0aGVyZSBhcmUgcGFja2V0cyBvbiB0aGUgdHhxdWV1ZSwgcG9rZSB0aGUgdGFza2xldAorCSAqIHRvIHRyYW5zbWl0IHRoZW0uCisJICovCiAJaWYgKCFsaXN0X2VtcHR5KCZxdWV1ZS0+dHhxdWV1ZSkpCiAJCXRhc2tsZXRfc2NoZWR1bGUoJnF1ZXVlLT50eHRhc2spOwogfQpAQCAtNTE5LDEyICs1MzEsOSBAQAogCWludCBpLCBwcmVhbWJsZV9yZWFkd29yZHM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotcmV0dXJuOwogCXRtcCA9IGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1JYQ1RMKTsKLQlpZiAoISh0bXAgJiBCQ000M3h4X1BJT19SWENUTF9EQVRBQVZBSUxBQkxFKSkgewotCQlkcHJpbnRrbChLRVJOX0VSUiBQRlggIlBJTyBSWDogTm8gZGF0YSBhdmFpbGFibGVcbiIpOy8vVE9ETzogcmVtb3ZlIHRoaXMgcHJpbnRrLgorCWlmICghKHRtcCAmIEJDTTQzeHhfUElPX1JYQ1RMX0RBVEFBVkFJTEFCTEUpKQogCQlyZXR1cm47Ci0JfQogCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19SWENUTCwKIAkJCSAgQkNNNDN4eF9QSU9fUlhDVExfREFUQUFWQUlMQUJMRSk7CiAKQEAgLTUzOCw4ICs1NDcsNyBAQAogCXJldHVybjsKIGRhdGFfcmVhZHk6CiAKLS8vRklYTUU6IGVuZGlhbmVzcyBpbiB0aGlzIGZ1bmN0aW9uLgotCWxlbiA9IGxlMTZfdG9fY3B1KGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1JYREFUQSkpOworCWxlbiA9IGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1JYREFUQSk7CiAJaWYgKHVubGlrZWx5KGxlbiA+IDB4NzAwKSkgewogCQlwaW9fcnhfZXJyb3IocXVldWUsIDAsICJsZW4gPiAweDcwMCIpOwogCQlyZXR1cm47CkBAIC01NTUsNyArNTYzLDcgQEAKIAkJcHJlYW1ibGVfcmVhZHdvcmRzID0gMTggLyBzaXplb2YodTE2KTsKIAlmb3IgKGkgPSAwOyBpIDwgcHJlYW1ibGVfcmVhZHdvcmRzOyBpKyspIHsKIAkJdG1wID0gYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhEQVRBKTsKLQkJcHJlYW1ibGVbaSArIDFdID0gY3B1X3RvX2JlMTYodG1wKTsvL0ZJWE1FPworCQlwcmVhbWJsZVtpICsgMV0gPSBjcHVfdG9fbGUxNih0bXApOwogCX0KIAlyeGhkciA9IChzdHJ1Y3QgYmNtNDN4eF9yeGhkciAqKXByZWFtYmxlOwogCXJ4ZmxhZ3MyID0gbGUxNl90b19jcHUocnhoZHItPmZsYWdzMik7CkBAIC01OTEsMTYgKzU5OSw0MCBAQAogCX0KIAlza2JfcHV0KHNrYiwgbGVuKTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSArPSAyKSB7Ci0JCXRtcCA9IGNwdV90b19iZTE2KGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1JYREFUQSkpOwotCQkqKCh1MTYgKikoc2tiLT5kYXRhICsgaSkpID0gdG1wOworCQl0bXAgPSBiY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19SWERBVEEpOworCQkqKCh1MTYgKikoc2tiLT5kYXRhICsgaSkpID0gY3B1X3RvX2xlMTYodG1wKTsKIAl9CiAJaWYgKGxlbiAlIDIpIHsKIAkJdG1wID0gYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhEQVRBKTsKIAkJc2tiLT5kYXRhW2xlbiAtIDFdID0gKHRtcCAmIDB4MDBGRik7CisvKiBUaGUgc3BlY3Mgc2F5IHRoZSBmb2xsb3dpbmcgaXMgcmVxdWlyZWQsIGJ1dAorICogaXQgaXMgd3JvbmcgYW5kIGNvcnJ1cHRzIHRoZSBQTENQLiBJZiB3ZSBkb24ndCBkbworICogdGhpcywgdGhlIFBMQ1Agc2VlbXMgdG8gYmUgY29ycmVjdC4gU28gaWZkZWYgaXQgb3V0IGZvciBub3cuCisgKi8KKyNpZiAwCiAJCWlmIChyeGZsYWdzMiAmIEJDTTQzeHhfUlhIRFJfRkxBR1MyX1RZUEUyRlJBTUUpCi0JCQlza2ItPmRhdGFbMHgyMF0gPSAodG1wICYgMHhGRjAwKSA+PiA4OworCQkJc2tiLT5kYXRhWzJdID0gKHRtcCAmIDB4RkYwMCkgPj4gODsKIAkJZWxzZQotCQkJc2tiLT5kYXRhWzB4MUVdID0gKHRtcCAmIDB4RkYwMCkgPj4gODsKKwkJCXNrYi0+ZGF0YVswXSA9ICh0bXAgJiAweEZGMDApID4+IDg7CisjZW5kaWYKIAl9CisJc2tiX3RyaW0oc2tiLCBsZW4gLSBJRUVFODAyMTFfRkNTX0xFTik7CiAJYmNtNDN4eF9yeChxdWV1ZS0+YmNtLCBza2IsIHJ4aGRyKTsKIH0KKwordm9pZCBiY200M3h4X3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSkKK3sKKwliY200M3h4X3Bvd2VyX3NhdmluZ19jdGxfYml0cyhxdWV1ZS0+YmNtLCAtMSwgMSk7CisJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLAorCQkJICBiY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCkKKwkJCSAgfCBCQ000M3h4X1BJT19UWENUTF9TVVNQRU5EKTsKK30KKwordm9pZCBiY200M3h4X3Bpb190eF9yZXN1bWUoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQoreworCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCwKKwkJCSAgYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fVFhDVEwpCisJCQkgICYgfkJDTTQzeHhfUElPX1RYQ1RMX1NVU1BFTkQpOworCWJjbTQzeHhfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKHF1ZXVlLT5iY20sIC0xLCAtMSk7CisJdGFza2xldF9zY2hlZHVsZSgmcXVldWUtPnR4dGFzayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmgKaW5kZXggOTcwNjI3Yi4uZGZjNzgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waW8uaApAQCAtMTQsOCArMTQsOCBAQAogI2RlZmluZSBCQ000M3h4X1BJT19SWENUTAkJMHgwOAogI2RlZmluZSBCQ000M3h4X1BJT19SWERBVEEJCTB4MEEKIAotI2RlZmluZSBCQ000M3h4X1BJT19UWENUTF9XUklURUhJCSgxIDw8IDApCi0jZGVmaW5lIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFTE8JKDEgPDwgMSkKKyNkZWZpbmUgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVMTwkoMSA8PCAwKQorI2RlZmluZSBCQ000M3h4X1BJT19UWENUTF9XUklURUhJCSgxIDw8IDEpCiAjZGVmaW5lIEJDTTQzeHhfUElPX1RYQ1RMX0NPTVBMRVRFCSgxIDw8IDIpCiAjZGVmaW5lIEJDTTQzeHhfUElPX1RYQ1RMX0lOSVQJCSgxIDw8IDMpCiAjZGVmaW5lIEJDTTQzeHhfUElPX1RYQ1RMX1NVU1BFTkQJKDEgPDwgNykKQEAgLTk1LDYgKzk1LDcgQEAKIAkJICAgICAgIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKIHsKIAliY200M3h4X3dyaXRlMTYocXVldWUtPmJjbSwgcXVldWUtPm1taW9fYmFzZSArIG9mZnNldCwgdmFsdWUpOworCW1taW93YigpOwogfQogCiAKQEAgLTEwNyw2ICsxMDgsOSBAQAogCQkJCSAgIHN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgKnN0YXR1cyk7CiB2b2lkIGJjbTQzeHhfcGlvX3J4KHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSk7CiAKK3ZvaWQgYmNtNDN4eF9waW9fdHhfc3VzcGVuZChzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUpOwordm9pZCBiY200M3h4X3Bpb190eF9yZXN1bWUoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKTsKKwogI2Vsc2UgLyogQ09ORklHX0JDTTQzWFhfUElPICovCiAKIHN0YXRpYyBpbmxpbmUKQEAgLTEzMyw2ICsxMzcsMTQgQEAKIHZvaWQgYmNtNDN4eF9waW9fcngoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQogewogfQorc3RhdGljIGlubGluZQordm9pZCBiY200M3h4X3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSkKK3sKK30KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgYmNtNDN4eF9waW9fdHhfcmVzdW1lKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSkKK3sKK30KIAogI2VuZGlmIC8qIENPTkZJR19CQ000M1hYX1BJTyAqLwogI2VuZGlmIC8qIEJDTTQzeHhfUElPX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9wb3dlci5jCmluZGV4IDNjOTJiNjIuLjY1NjlkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9wb3dlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9wb3dlci5jCkBAIC0zNSw3NyArMzUsMTAxIEBACiAjaW5jbHVkZSAiYmNtNDN4eF9tYWluLmgiCiAKIAorLyogR2V0IHRoZSBTbG93IENsb2NrIFNvdXJjZSAqLworc3RhdGljIGludCBiY200M3h4X3BjdGxfZ2V0X3Nsb3djbGtzcmMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQoreworCXUzMiB0bXA7CisJaW50IGVycjsKKworCWFzc2VydChiY20tPmN1cnJlbnRfY29yZSA9PSAmYmNtLT5jb3JlX2NoaXBjb21tb24pOworCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgNikgeworCQlpZiAoYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9QQ01DSUEgfHwKKwkJICAgIGJjbS0+YnVzdHlwZSA9PSBCQ000M3h4X0JVU1RZUEVfU0IpCisJCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1M7CisJCWlmIChiY20tPmJ1c3R5cGUgPT0gQkNNNDN4eF9CVVNUWVBFX1BDSSkgeworCQkJZXJyID0gYmNtNDN4eF9wY2lfcmVhZF9jb25maWczMihiY20sIEJDTTQzeHhfUENUTF9PVVQsICZ0bXApOworCQkJYXNzZXJ0KCFlcnIpOworCQkJaWYgKHRtcCAmIDB4MTApCisJCQkJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfUENJOworCQkJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOworCQl9CisJfQorCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgMTApIHsKKwkJdG1wID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NISVBDT01NT05fU0xPV0NMS0NUTCk7CisJCXRtcCAmPSAweDc7CisJCWlmICh0bXAgPT0gMCkKKwkJCXJldHVybiBCQ000M3h4X1BDVExfQ0xLU1JDX0xPUFdST1M7CisJCWlmICh0bXAgPT0gMSkKKwkJCXJldHVybiBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzsKKwkJaWYgKHRtcCA9PSAyKQorCQkJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfUENJOworCX0KKworCXJldHVybiBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzsKK30KKwogLyogR2V0IG1heC9taW4gc2xvd2Nsb2NrIGZyZXF1ZW5jeQogICogYXMgZGVzY3JpYmVkIGluIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9Qb3dlckNvbnRyb2wKICAqLwogc3RhdGljIGludCBiY200M3h4X3BjdGxfY2xvY2tmcmVxbGltaXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAogCQkJCSAgICAgICBpbnQgZ2V0X21heCkKIHsKLQlpbnQgbGltaXQgPSAwOworCWludCBsaW1pdDsKKwlpbnQgY2xvY2tzcmM7CiAJaW50IGRpdmlzb3I7Ci0JaW50IHNlbGVjdGlvbjsKLQlpbnQgZXJyOwogCXUzMiB0bXA7Ci0Jc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKm9sZF9jb3JlOwogCi0JaWYgKCEoYmNtLT5jaGlwY29tbW9uX2NhcGFiaWxpdGllcyAmIEJDTTQzeHhfQ0FQQUJJTElUSUVTX1BDVEwpKQotCQlnb3RvIG91dDsKLQlvbGRfY29yZSA9IGJjbS0+Y3VycmVudF9jb3JlOwotCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCAmYmNtLT5jb3JlX2NoaXBjb21tb24pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCWFzc2VydChiY20tPmNoaXBjb21tb25fY2FwYWJpbGl0aWVzICYgQkNNNDN4eF9DQVBBQklMSVRJRVNfUENUTCk7CisJYXNzZXJ0KGJjbS0+Y3VycmVudF9jb3JlID09ICZiY20tPmNvcmVfY2hpcGNvbW1vbik7CiAKKwljbG9ja3NyYyA9IGJjbTQzeHhfcGN0bF9nZXRfc2xvd2Nsa3NyYyhiY20pOwogCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgNikgewotCQlpZiAoKGJjbS0+YnVzdHlwZSA9PSBCQ000M3h4X0JVU1RZUEVfUENNQ0lBKSB8fAotCQkJKGJjbS0+YnVzdHlwZSA9PSBCQ000M3h4X0JVU1RZUEVfU0IpKSB7Ci0JCQlzZWxlY3Rpb24gPSAxOworCQlzd2l0Y2ggKGNsb2Nrc3JjKSB7CisJCWNhc2UgQkNNNDN4eF9QQ1RMX0NMS1NSQ19QQ0k6CisJCQlkaXZpc29yID0gNjQ7CisJCQlicmVhazsKKwkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzoKIAkJCWRpdmlzb3IgPSAzMjsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IGJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMzIoYmNtLCBCQ000M3h4X1BDVExfT1VULCAmdG1wKTsKLQkJCWlmIChlcnIpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbG9ja2ZyZXFsaW1pdCBwY2ljZmcgcmVhZCBmYWlsdXJlXG4iKTsKLQkJCQlnb3RvIG91dF9zd2l0Y2hiYWNrOwotCQkJfQotCQkJaWYgKHRtcCAmIDB4MTApIHsKLQkJCQkvKiBQQ0kgKi8KLQkJCQlzZWxlY3Rpb24gPSAyOwotCQkJCWRpdmlzb3IgPSA2NDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogWFRBTCAqLwotCQkJCXNlbGVjdGlvbiA9IDE7Ci0JCQkJZGl2aXNvciA9IDMyOwotCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhc3NlcnQoMCk7CisJCQlkaXZpc29yID0gMTsKIAkJfQogCX0gZWxzZSBpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDEwKSB7Ci0JCXNlbGVjdGlvbiA9ICh0bXAgJiAweDA3KTsKLQkJaWYgKHNlbGVjdGlvbikgewotCQkJdG1wID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NISVBDT01NT05fU0xPV0NMS0NUTCk7Ci0JCQlkaXZpc29yID0gNCAqICgxICsgKCh0bXAgJiAweEZGRkYwMDAwKSA+PiAxNikpOwotCQl9IGVsc2UKKwkJc3dpdGNoIChjbG9ja3NyYykgeworCQljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfTE9QV1JPUzoKIAkJCWRpdmlzb3IgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1M6CisJCWNhc2UgQkNNNDN4eF9QQ1RMX0NMS1NSQ19QQ0k6CisJCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMKTsKKwkJCWRpdmlzb3IgPSAoKHRtcCAmIDB4RkZGRjAwMDApID4+IDE2KSArIDE7CisJCQlkaXZpc29yICo9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFzc2VydCgwKTsKKwkJCWRpdmlzb3IgPSAxOworCQl9CiAJfSBlbHNlIHsKIAkJdG1wID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NISVBDT01NT05fU1lTQ0xLQ1RMKTsKLQkJZGl2aXNvciA9IDQgKiAoMSArICgodG1wICYgMHhGRkZGMDAwMCkgPj4gMTYpKTsKLQkJc2VsZWN0aW9uID0gMTsKKwkJZGl2aXNvciA9ICgodG1wICYgMHhGRkZGMDAwMCkgPj4gMTYpICsgMTsKKwkJZGl2aXNvciAqPSA0OwogCX0KLQkKLQlzd2l0Y2ggKHNlbGVjdGlvbikgewotCWNhc2UgMDoKLQkJLyogTFBPICovCisKKwlzd2l0Y2ggKGNsb2Nrc3JjKSB7CisJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX0xPUFdST1M6CiAJCWlmIChnZXRfbWF4KQogCQkJbGltaXQgPSA0MzAwMDsKIAkJZWxzZQogCQkJbGltaXQgPSAyNTAwMDsKIAkJYnJlYWs7Ci0JY2FzZSAxOgotCQkvKiBYVEFMICovCisJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzoKIAkJaWYgKGdldF9tYXgpCiAJCQlsaW1pdCA9IDIwMjAwMDAwOwogCQllbHNlCiAJCQlsaW1pdCA9IDE5ODAwMDAwOwogCQlicmVhazsKLQljYXNlIDI6Ci0JCS8qIFBDSSAqLworCWNhc2UgQkNNNDN4eF9QQ1RMX0NMS1NSQ19QQ0k6CiAJCWlmIChnZXRfbWF4KQogCQkJbGltaXQgPSAzNDAwMDAwMDsKIAkJZWxzZQpAQCAtMTEzLDE3ICsxMzcsMTQgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYXNzZXJ0KDApOworCQlsaW1pdCA9IDA7CiAJfQogCWxpbWl0IC89IGRpdmlzb3I7CiAKLW91dF9zd2l0Y2hiYWNrOgotCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBvbGRfY29yZSk7Ci0JYXNzZXJ0KGVyciA9PSAwKTsKLQotb3V0OgogCXJldHVybiBsaW1pdDsKIH0KIAorCiAvKiBpbml0IHBvd2VyIGNvbnRyb2wKICAqIGFzIGRlc2NyaWJlZCBpbiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvUG93ZXJDb250cm9sCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmgKaW5kZXggNWY2MzY0MC4uYzk2NmFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmgKQEAgLTMzLDYgKzMzLDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisvKiBDbG9jayBzb3VyY2VzICovCitlbnVtIHsKKwkvKiBQQ0kgY2xvY2sgKi8KKwlCQ000M3h4X1BDVExfQ0xLU1JDX1BDSSwKKwkvKiBDcnlzdGFsIHNsb3cgY2xvY2sgb3NjaWxsYXRvciAqLworCUJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TLAorCS8qIExvdyBwb3dlciBvc2NpbGxhdG9yICovCisJQkNNNDN4eF9QQ1RMX0NMS1NSQ19MT1BXUk9TLAorfTsKIAogc3RydWN0IGJjbTQzeHhfcHJpdmF0ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuYwppbmRleCBjNDRkODkwLi5iNDM4ZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuYwpAQCAtNzEsMTQgKzcxLDQ2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgc3Byb20yaGV4KGNvbnN0IHUxNiAqc3Byb20sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCit7CisJaW50IGksIHBvcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9TUFJPTV9TSVpFOyBpKyspIHsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgYnVmX2xlbiAtIHBvcyAtIDEsCisJCQkJIiUwNFgiLCBzd2FiMTYoc3Byb21baV0pICYgMHhGRkZGKTsKKwl9CisJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgYnVmX2xlbiAtIHBvcyAtIDEsICJcbiIpOworCisJcmV0dXJuIHBvcyArIDE7Cit9CisKK3N0YXRpYyBpbnQgaGV4MnNwcm9tKHUxNiAqc3Byb20sIGNvbnN0IGNoYXIgKmR1bXAsIHNpemVfdCBsZW4pCit7CisJY2hhciB0bXBbNV0gPSB7IDAgfTsKKwlpbnQgY250ID0gMDsKKwl1bnNpZ25lZCBsb25nIHBhcnNlZDsKKworCWlmIChsZW4gPCBCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YodTE2KSAqIDIpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKGNudCA8IEJDTTQzeHhfU1BST01fU0laRSkgeworCQltZW1jcHkodG1wLCBkdW1wLCA0KTsKKwkJZHVtcCArPSA0OworCQlwYXJzZWQgPSBzaW1wbGVfc3RydG91bCh0bXAsIE5VTEwsIDE2KTsKKwkJc3Byb21bY250KytdID0gc3dhYjE2KCh1MTYpcGFyc2VkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHNzaXplX3QgYmNtNDN4eF9hdHRyX3Nwcm9tX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldmF0dHJfdG9fYmNtKGF0dHIsIGF0dHJfc3Byb20pOworCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKIAl1MTYgKnNwcm9tOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtOTEsNTUgKzEyMyw1MyBAQAogCWJjbTQzeHhfbG9ja19tbWlvKGJjbSwgZmxhZ3MpOwogCWFzc2VydChiY20tPmluaXRpYWxpemVkKTsKIAllcnIgPSBiY200M3h4X3Nwcm9tX3JlYWQoYmNtLCBzcHJvbSk7Ci0JaWYgKCFlcnIpIHsKLQkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfU1BST01fU0laRTsgaSsrKSB7Ci0JCQlidWZbaSAqIDJdID0gc3Byb21baV0gJiAweDAwRkY7Ci0JCQlidWZbaSAqIDIgKyAxXSA9IChzcHJvbVtpXSAmIDB4RkYwMCkgPj4gODsKLQkJfQotCX0KKwlpZiAoIWVycikKKwkJZXJyID0gc3Byb20yaGV4KHNwcm9tLCBidWYsIFBBR0VfU0laRSk7CiAJYmNtNDN4eF91bmxvY2tfbW1pbyhiY20sIGZsYWdzKTsKIAlrZnJlZShzcHJvbSk7CiAKLQlyZXR1cm4gZXJyID8gZXJyIDogQkNNNDN4eF9TUFJPTV9TSVpFICogc2l6ZW9mKHUxNik7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHNzaXplX3QgYmNtNDN4eF9hdHRyX3Nwcm9tX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldmF0dHJfdG9fYmNtKGF0dHIsIGF0dHJfc3Byb20pOworCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKIAl1MTYgKnNwcm9tOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKGNvdW50ICE9IEJDTTQzeHhfU1BST01fU0laRSAqIHNpemVvZih1MTYpKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlzcHJvbSA9IGttYWxsb2MoQkNNNDN4eF9TUFJPTV9TSVpFICogc2l6ZW9mKCpzcHJvbSksCiAJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIXNwcm9tKQogCQlyZXR1cm4gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9TUFJPTV9TSVpFOyBpKyspIHsKLQkJc3Byb21baV0gPSBidWZbaSAqIDJdICYgMHhGRjsKLQkJc3Byb21baV0gfD0gKCh1MTYpKGJ1ZltpICogMiArIDFdICYgMHhGRikpIDw8IDg7Ci0JfQorCWVyciA9IGhleDJzcHJvbShzcHJvbSwgYnVmLCBjb3VudCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfa2ZyZWU7CiAJYmNtNDN4eF9sb2NrX21taW8oYmNtLCBmbGFncyk7CiAJYXNzZXJ0KGJjbS0+aW5pdGlhbGl6ZWQpOwogCWVyciA9IGJjbTQzeHhfc3Byb21fd3JpdGUoYmNtLCBzcHJvbSk7CiAJYmNtNDN4eF91bmxvY2tfbW1pbyhiY20sIGZsYWdzKTsKK291dF9rZnJlZToKIAlrZnJlZShzcHJvbSk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiAKIH0KIAorc3RhdGljIERFVklDRV9BVFRSKHNwcm9tLCAwNjAwLAorCQkgICBiY200M3h4X2F0dHJfc3Byb21fc2hvdywKKwkJICAgYmNtNDN4eF9hdHRyX3Nwcm9tX3N0b3JlKTsKKwogc3RhdGljIHNzaXplX3QgYmNtNDN4eF9hdHRyX2ludGVyZm1vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZhdHRyX3RvX2JjbShhdHRyLCBhdHRyX2ludGVyZm1vZGUpOworCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAJc3NpemVfdCBjb3VudCA9IDA7CkBAIC0xNzUsNyArMjA1LDcgQEAKIAkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZhdHRyX3RvX2JjbShhdHRyLCBhdHRyX2ludGVyZm1vZGUpOworCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAJaW50IG1vZGU7CkBAIC0yMTUsMTEgKzI0NSwxNSBAQAogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIH0KIAorc3RhdGljIERFVklDRV9BVFRSKGludGVyZmVyZW5jZSwgMDY0NCwKKwkJICAgYmNtNDN4eF9hdHRyX2ludGVyZm1vZGVfc2hvdywKKwkJICAgYmNtNDN4eF9hdHRyX2ludGVyZm1vZGVfc3RvcmUpOworCiBzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfcHJlYW1ibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgY2hhciAqYnVmKQogewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldmF0dHJfdG9fYmNtKGF0dHIsIGF0dHJfcHJlYW1ibGUpOworCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAJc3NpemVfdCBjb3VudDsKQEAgLTI0NSw3ICsyNzksNyBAQAogCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9wcmVhbWJsZSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAlpbnQgdmFsdWU7CkBAIC0yNjcsNTYgKzMwMSw0MSBAQAogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIH0KIAorc3RhdGljIERFVklDRV9BVFRSKHNob3J0cHJlYW1ibGUsIDA2NDQsCisJCSAgIGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zaG93LAorCQkgICBiY200M3h4X2F0dHJfcHJlYW1ibGVfc3RvcmUpOworCiBpbnQgYmNtNDN4eF9zeXNmc19yZWdpc3RlcihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmJjbS0+cGNpX2Rldi0+ZGV2OwotCXN0cnVjdCBiY200M3h4X3N5c2ZzICpzeXNmcyA9ICZiY20tPnN5c2ZzOwogCWludCBlcnI7CiAKIAlhc3NlcnQoYmNtLT5pbml0aWFsaXplZCk7CiAKLQlzeXNmcy0+YXR0cl9zcHJvbS5hdHRyLm5hbWUgPSAic3Byb20iOwotCXN5c2ZzLT5hdHRyX3Nwcm9tLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKLQlzeXNmcy0+YXR0cl9zcHJvbS5hdHRyLm1vZGUgPSAwNjAwOwotCXN5c2ZzLT5hdHRyX3Nwcm9tLnNob3cgPSBiY200M3h4X2F0dHJfc3Byb21fc2hvdzsKLQlzeXNmcy0+YXR0cl9zcHJvbS5zdG9yZSA9IGJjbTQzeHhfYXR0cl9zcHJvbV9zdG9yZTsKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc3lzZnMtPmF0dHJfc3Byb20pOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zcHJvbSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0KLQlzeXNmcy0+YXR0cl9pbnRlcmZtb2RlLmF0dHIubmFtZSA9ICJpbnRlcmZlcmVuY2UiOwotCXN5c2ZzLT5hdHRyX2ludGVyZm1vZGUuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwotCXN5c2ZzLT5hdHRyX2ludGVyZm1vZGUuYXR0ci5tb2RlID0gMDYwMDsKLQlzeXNmcy0+YXR0cl9pbnRlcmZtb2RlLnNob3cgPSBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zaG93OwotCXN5c2ZzLT5hdHRyX2ludGVyZm1vZGUuc3RvcmUgPSBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zdG9yZTsKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc3lzZnMtPmF0dHJfaW50ZXJmbW9kZSk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2ludGVyZmVyZW5jZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVtb3ZlX3Nwcm9tOwotCi0Jc3lzZnMtPmF0dHJfcHJlYW1ibGUuYXR0ci5uYW1lID0gInNob3J0cHJlYW1ibGUiOwotCXN5c2ZzLT5hdHRyX3ByZWFtYmxlLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKLQlzeXNmcy0+YXR0cl9wcmVhbWJsZS5hdHRyLm1vZGUgPSAwNjAwOwotCXN5c2ZzLT5hdHRyX3ByZWFtYmxlLnNob3cgPSBiY200M3h4X2F0dHJfcHJlYW1ibGVfc2hvdzsKLQlzeXNmcy0+YXR0cl9wcmVhbWJsZS5zdG9yZSA9IGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zdG9yZTsKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc3lzZnMtPmF0dHJfcHJlYW1ibGUpOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zaG9ydHByZWFtYmxlKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZW1vdmVfaW50ZXJmbW9kZTsKIAogb3V0OgogCXJldHVybiBlcnI7CiBlcnJfcmVtb3ZlX2ludGVyZm1vZGU6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnN5c2ZzLT5hdHRyX2ludGVyZm1vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9pbnRlcmZlcmVuY2UpOwogZXJyX3JlbW92ZV9zcHJvbToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc3lzZnMtPmF0dHJfc3Byb20pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zcHJvbSk7CiAJZ290byBvdXQ7CiB9CiAKIHZvaWQgYmNtNDN4eF9zeXNmc191bnJlZ2lzdGVyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYmNtLT5wY2lfZGV2LT5kZXY7Ci0Jc3RydWN0IGJjbTQzeHhfc3lzZnMgKnN5c2ZzID0gJmJjbS0+c3lzZnM7CiAKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc3lzZnMtPmF0dHJfcHJlYW1ibGUpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9pbnRlcmZtb2RlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc3lzZnMtPmF0dHJfc3Byb20pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zaG9ydHByZWFtYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW50ZXJmZXJlbmNlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3Byb20pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3N5c2ZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuaAppbmRleCA1N2YxNDUxLi5jYzcwMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuaApAQCAtMSwyMiArMSw2IEBACiAjaWZuZGVmIEJDTTQzeHhfU1lTRlNfSF8KICNkZWZpbmUgQkNNNDN4eF9TWVNGU19IXwogCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0KLQotc3RydWN0IGJjbTQzeHhfc3lzZnMgewotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfc3Byb207Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl9pbnRlcmZtb2RlOwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfcHJlYW1ibGU7Ci19OwotCi0jZGVmaW5lIGRldmF0dHJfdG9fYmNtKGF0dHIsIGF0dHJfbmFtZSkJKHsJCQkJXAotCXN0cnVjdCBiY200M3h4X3N5c2ZzICpfX3M7IHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKl9fcDsJCVwKLQlfX3MgPSBjb250YWluZXJfb2YoKGF0dHIpLCBzdHJ1Y3QgYmNtNDN4eF9zeXNmcywgYXR0cl9uYW1lKTsJXAotCV9fcCA9IGNvbnRhaW5lcl9vZihfX3MsIHN0cnVjdCBiY200M3h4X3ByaXZhdGUsIHN5c2ZzKTsJCVwKLQlfX3A7CQkJCQkJCQlcCi0JCQkJCX0pCi0KIHN0cnVjdCBiY200M3h4X3ByaXZhdGU7CiAKIGludCBiY200M3h4X3N5c2ZzX3JlZ2lzdGVyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfd3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCmluZGV4IDNkYWVlODIuLmI0NTA2MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCkBAIC0xODIsOCArMTgyLDExIEBACiAJCW1vZGUgPSBCQ000M3h4X0lOSVRJQUxfSVdNT0RFOwogCiAJYmNtNDN4eF9sb2NrX21taW8oYmNtLCBmbGFncyk7Ci0JaWYgKGJjbS0+aWVlZS0+aXdfbW9kZSAhPSBtb2RlKQotCQliY200M3h4X3NldF9pd21vZGUoYmNtLCBtb2RlKTsKKwlpZiAoYmNtLT5pbml0aWFsaXplZCkgeworCQlpZiAoYmNtLT5pZWVlLT5pd19tb2RlICE9IG1vZGUpCisJCQliY200M3h4X3NldF9pd21vZGUoYmNtLCBtb2RlKTsKKwl9IGVsc2UKKwkJYmNtLT5pZWVlLT5pd19tb2RlID0gbW9kZTsKIAliY200M3h4X3VubG9ja19tbWlvKGJjbSwgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC05NjIsMjIgKzk2NSwyMiBAQAogCXsKIAkJLmNtZAkJPSBQUklWX1dYX1NFVF9TSE9SVFBSRUFNQkxFLAogCQkuc2V0X2FyZ3MJPSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkJLm5hbWUJCT0gInNldF9zaG9ydHByZWFtYmwiLAorCQkubmFtZQkJPSAic2V0X3Nob3J0cHJlYW1iIiwKIAl9LAogCXsKIAkJLmNtZAkJPSBQUklWX1dYX0dFVF9TSE9SVFBSRUFNQkxFLAogCQkuZ2V0X2FyZ3MJPSBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IE1BWF9XWF9TVFJJTkcsCi0JCS5uYW1lCQk9ICJnZXRfc2hvcnRwcmVhbWJsIiwKKwkJLm5hbWUJCT0gImdldF9zaG9ydHByZWFtYiIsCiAJfSwKIAl7CiAJCS5jbWQJCT0gUFJJVl9XWF9TRVRfU1dFTkNSWVBUSU9OLAogCQkuc2V0X2FyZ3MJPSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkJLm5hbWUJCT0gInNldF9zd2VuY3J5cHRpb24iLAorCQkubmFtZQkJPSAic2V0X3N3ZW5jcnlwdCIsCiAJfSwKIAl7CiAJCS5jbWQJCT0gUFJJVl9XWF9HRVRfU1dFTkNSWVBUSU9OLAogCQkuZ2V0X2FyZ3MJPSBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IE1BWF9XWF9TVFJJTkcsCi0JCS5uYW1lCQk9ICJnZXRfc3dlbmNyeXB0aW9uIiwKKwkJLm5hbWUJCT0gImdldF9zd2VuY3J5cHQiLAogCX0sCiAJewogCQkuY21kCQk9IFBSSVZfV1hfU1BST01fV1JJVEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKaW5kZXggZDMzNWIyNS4uNTViZWQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwpAQCAtNDIsNyArNDIsNyBAQAogLyogc3RydWN0IGxvY2FsX2luZm86Omh3X3ByaXYgKi8KIHN0cnVjdCBob3N0YXBfY3NfcHJpdiB7CiAJZGV2X25vZGVfdCBub2RlOwotCWRldl9saW5rX3QgKmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJaW50IHNhbmRpc2tfY29ubmVjdHBsdXM7CiB9OwogCkBAIC0yMDQsMTUgKzIwNCwxMyBAQAogCiBzdGF0aWMgdm9pZCBwcmlzbTJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiBzdGF0aWMgdm9pZCBwcmlzbTJfcmVsZWFzZSh1X2xvbmcgYXJnKTsKLXN0YXRpYyBpbnQgcHJpc20yX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgcHJpc20yX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIAogc3RhdGljIGludCBwcmlzbTJfcGNjYXJkX2NhcmRfcHJlc2VudChsb2NhbF9pbmZvX3QgKmxvY2FsKQogewogCXN0cnVjdCBob3N0YXBfY3NfcHJpdiAqaHdfcHJpdiA9IGxvY2FsLT5od19wcml2OwotCWlmIChod19wcml2ICE9IE5VTEwgJiYgaHdfcHJpdi0+bGluayAhPSBOVUxMICYmCi0JICAgICgoaHdfcHJpdi0+bGluay0+c3RhdGUgJiAoREVWX1BSRVNFTlQgfCBERVZfQ09ORklHKSkgPT0KLQkgICAgIChERVZfUFJFU0VOVCB8IERFVl9DT05GSUcpKSkKKwlpZiAoaHdfcHJpdiAhPSBOVUxMICYmIGh3X3ByaXYtPmxpbmsgIT0gTlVMTCAmJiBwY21jaWFfZGV2X3ByZXNlbnQoaHdfcHJpdi0+bGluaykpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtMjM3LDcgKzIzNSw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5PZmZzZXQgPSAweDEwOyAvKiAweDNmMCBJTyBiYXNlIDEgKi8KIAlyZWcuVmFsdWUgPSBod19wcml2LT5saW5rLT5pby5CYXNlUG9ydDEgJiAweDAwZmY7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiUHJpc20zIFNhbkRpc2sgLSBmYWlsZWQgdG8gc2V0IEkvTyBiYXNlIDAgLSIKQEAgLTI0OSw3ICsyNDcsNyBAQAogCXJlZy5BY3Rpb24gPSBDU19XUklURTsKIAlyZWcuT2Zmc2V0ID0gMHgxMjsgLyogMHgzZjIgSU8gYmFzZSAyICovCiAJcmVnLlZhbHVlID0gKGh3X3ByaXYtPmxpbmstPmlvLkJhc2VQb3J0MSAmIDB4ZmYwMCkgPj4gODsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluay0+aGFuZGxlLAorCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7CiAJaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJQcmlzbTMgU2FuRGlzayAtIGZhaWxlZCB0byBzZXQgSS9PIGJhc2UgMSAtIgpAQCAtMzAxLDkgKzI5OSw5IEBACiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShod19wcml2LT5saW5rLT5oYW5kbGUsICZ0dXBsZSkgfHwKLQkgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwgJnR1cGxlKSB8fAotCSAgICBwY21jaWFfcGFyc2VfdHVwbGUoaHdfcHJpdi0+bGluay0+aGFuZGxlLCAmdHVwbGUsIHBhcnNlKSB8fAorCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKKwkgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKKwkgICAgcGNtY2lhX3BhcnNlX3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSwgcGFyc2UpIHx8CiAJICAgIHBhcnNlLT5tYW5maWQubWFuZiAhPSAweGQ2MDEgfHwgcGFyc2UtPm1hbmZpZC5jYXJkICE9IDB4MDEwMSkgewogCQkvKiBObyBTYW5EaXNrIG1hbmZpZCBmb3VuZCAqLwogCQlyZXQgPSAtRU5PREVWOwpAQCAtMzExLDkgKzMwOSw5IEBACiAJfQogCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xPTkdMSU5LX01GQzsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShod19wcml2LT5saW5rLT5oYW5kbGUsICZ0dXBsZSkgfHwKLQkgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwgJnR1cGxlKSB8fAotCSAgICBwY21jaWFfcGFyc2VfdHVwbGUoaHdfcHJpdi0+bGluay0+aGFuZGxlLCAmdHVwbGUsIHBhcnNlKSB8fAorCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKKwkgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKKwkgICAgcGNtY2lhX3BhcnNlX3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSwgcGFyc2UpIHx8CiAJCXBhcnNlLT5sb25nbGlua19tZmMubmZuIDwgMikgewogCQkvKiBObyBtdWx0aS1mdW5jdGlvbiBsaW5rcyBmb3VuZCAqLwogCQlyZXQgPSAtRU5PREVWOwpAQCAtMzI4LDcgKzMyNiw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwogCXJlZy5WYWx1ZSA9IENPUl9TT0ZUX1JFU0VUOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLT5oYW5kbGUsCisJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKIAlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTYW5EaXNrIC0gQ09SIHNyZXNldCBmYWlsZWQgKCVkKVxuIiwKQEAgLTM0NSw3ICszNDMsNyBAQAogCSAqIHdpbGwgYmUgZW5hYmxlZCBkdXJpbmcgdGhlIGZpcnN0IGNvcl9zcmVzZXQgY2FsbC4KIAkgKi8KIAlyZWcuVmFsdWUgPSBDT1JfTEVWRUxfUkVRIHwgMHg4IHwgQ09SX0FERFJfREVDT0RFIHwgQ09SX0ZVTkNfRU5BOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLT5oYW5kbGUsCisJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKIAlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTYW5EaXNrIC0gQ09SIHNyZXNldCBmYWlsZWQgKCVkKVxuIiwKQEAgLTM4MCw3ICszNzgsNyBAQAogCXJlZy5BY3Rpb24gPSBDU19SRUFEOwogCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwogCXJlZy5WYWx1ZSA9IDA7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9jb3Jfc3Jlc2V0IGZhaWxlZCAxICglZClcbiIsCkBAIC0zOTIsNyArMzkwLDcgQEAKIAogCXJlZy5BY3Rpb24gPSBDU19XUklURTsKIAlyZWcuVmFsdWUgfD0gQ09SX1NPRlRfUkVTRVQ7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9jb3Jfc3Jlc2V0IGZhaWxlZCAyICglZClcbiIsCkBAIC00MDUsNyArNDAzLDcgQEAKIAlyZWcuVmFsdWUgJj0gfkNPUl9TT0ZUX1JFU0VUOwogCWlmIChod19wcml2LT5zYW5kaXNrX2Nvbm5lY3RwbHVzKQogCQlyZWcuVmFsdWUgfD0gQ09SX0lSRVFfRU5BOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLT5oYW5kbGUsCisJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKIAlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfY29yX3NyZXNldCBmYWlsZWQgMyAoJWQpXG4iLApAQCAtNDM5LDcgKzQzNyw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1JFQUQ7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAJcmVnLlZhbHVlID0gMDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluay0+aGFuZGxlLAorCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7CiAJaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2dlbmVzaXNfc3Jlc2V0IGZhaWxlZCAxICIKQEAgLTQ1Miw3ICs0NTAsNyBAQAogCiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5WYWx1ZSB8PSBDT1JfU09GVF9SRVNFVDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluay0+aGFuZGxlLAorCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7CiAJaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2dlbmVzaXNfc3Jlc2V0IGZhaWxlZCAyICIKQEAgLTQ2Niw3ICs0NjQsNyBAQAogCXJlZy5BY3Rpb24gPSBDU19XUklURTsKIAlyZWcuVmFsdWUgPSBoY3I7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DQ1NSOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLT5oYW5kbGUsCisJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKIAlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDMgIgpAQCAtNDc4LDcgKzQ3Niw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwogCXJlZy5WYWx1ZSA9IG9sZF9jb3IgJiB+Q09SX1NPRlRfUkVTRVQ7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9nZW5lc2lzX3NyZXNldCBmYWlsZWQgNCAiCkBAIC01MDEsNDAgKzQ5OSwyNyBAQAogCiAvKiBhbGxvY2F0ZSBsb2NhbCBkYXRhIGFuZCByZWdpc3RlciB3aXRoIENhcmRTZXJ2aWNlcwogICogaW5pdGlhbGl6ZSBkZXZfbGluayBzdHJ1Y3R1cmUsIGJ1dCBkbyBub3QgY29uZmlndXJlIHRoZSBjYXJkIHlldCAqLwotc3RhdGljIGludCBwcmlzbTJfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgaG9zdGFwX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKLQlkZXZfbGlua190ICpsaW5rOwotCi0JbGluayA9IGttYWxsb2Moc2l6ZW9mKGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAobGluayA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbXNldChsaW5rLCAwLCBzaXplb2YoZGV2X2xpbmtfdCkpOworCWludCByZXQ7CiAKIAlQREVCVUcoREVCVUdfSFcsICIlczogc2V0dGluZyBWY2M9MzMgKGNvbnN0YW50KVxuIiwgZGV2X2luZm8pOwotCWxpbmstPmNvbmYuVmNjID0gMzM7Ci0JbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCWlmIChwcmlzbTJfY29uZmlnKGxpbmspKQorCXJldCA9IHByaXNtMl9jb25maWcocF9kZXYpOworCWlmIChyZXQpIHsKIAkJUERFQlVHKERFQlVHX0VYVFJBLCAicHJpc20yX2NvbmZpZygpIGZhaWxlZFxuIik7CisJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgdm9pZCBwcmlzbTJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHByaXNtMl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KIAlQREVCVUcoREVCVUdfRkxPVywgInByaXNtMl9kZXRhY2hcbiIpOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwcmlzbTJfcmVsZWFzZSgodV9sb25nKWxpbmspOwotCX0KKwlwcmlzbTJfcmVsZWFzZSgodV9sb25nKWxpbmspOwogCiAJLyogcmVsZWFzZSBuZXQgZGV2aWNlcyAqLwogCWlmIChsaW5rLT5wcml2KSB7CkBAIC01NDcsNyArNTMyLDYgQEAKIAkJcHJpc20yX2ZyZWVfbG9jYWxfZGF0YShkZXYpOwogCQlrZnJlZShod19wcml2KTsKIAl9Ci0Ja2ZyZWUobGluayk7CiB9CiAKIApAQCAtNTU4LDcgKzU0Miw3IEBACiBkbyB7IGludCByZXQgPSAocmV0Zik7IFwKIGlmIChyZXQgIT0gMCkgeyBcCiAJUERFQlVHKERFQlVHX0VYVFJBLCAiQ2FyZFNlcnZpY2VzKCIgI2ZuICIpIHJldHVybmVkICVkXG4iLCByZXQpOyBcCi0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBmbiwgcmV0KTsgXAorCWNzX2Vycm9yKGxpbmssIGZuLCByZXQpOyBcCiAJZ290byBuZXh0X2VudHJ5OyBcCiB9IFwKIH0gd2hpbGUgKDApCkBAIC01NjYsNyArNTUwLDcgQEAKIAogLyogcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQgaXMgcmVjZWl2ZWQgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEKICAqIHNvY2tldCBhbmQgbWFrZSB0aGUgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtICovCi1zdGF0aWMgaW50IHByaXNtMl9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgcHJpc20yX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKQEAgLTU5NSwyNyArNTc5LDI0IEBACiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmstPmhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluay0+aGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUsIHBhcnNlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCBwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLT5jb25maWcuYmFzZTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS0+Y29uZmlnLnJtYXNrWzBdOwogCiAJQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sCi0JCSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLT5oYW5kbGUsICZjb25mKSk7Ci0JUERFQlVHKERFQlVHX0hXLCAiJXM6ICVzIFZjYz0lZCAoZnJvbSBjb25maWcpXG4iLCBkZXZfaW5mbywKLQkgICAgICAgaWdub3JlX2Npc192Y2MgPyAiaWdub3JpbmciIDogInNldHRpbmciLCBjb25mLlZjYyk7Ci0JbGluay0+Y29uZi5WY2MgPSBjb25mLlZjYzsKKwkJIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25mKSk7CiAKIAkvKiBMb29rIGZvciBhbiBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5IGluIHRoZSBDSVMgKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmstPmhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAlmb3IgKDs7KSB7CiAJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UtPmNmdGFibGVfZW50cnkpOwogCQlDRkdfQ0hFQ0syKEdldFR1cGxlRGF0YSwKLQkJCSAgIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLT5oYW5kbGUsICZ0dXBsZSkpOworCQkJICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogCQlDRkdfQ0hFQ0syKFBhcnNlVHVwbGUsCi0JCQkgICBwY21jaWFfcGFyc2VfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUsIHBhcnNlKSk7CisJCQkgICBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCBwYXJzZSkpOwogCiAJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKIAkJCWRmbHQgPSAqY2ZnOwpAQCAtNjUwLDEwICs2MzEsMTAgQEAKIAkJfQogCiAJCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkJZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCiAJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwpAQCAtNjk1LDE5ICs2NzYsMTkgQEAKIAogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwogCQlDRkdfQ0hFQ0syKFJlcXVlc3RJTywKLQkJCSAgIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSk7CisJCQkgICBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKTsKIAogCQkvKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cnkgaXMgT0sgKi8KIAkJYnJlYWs7CiAKIAluZXh0X2VudHJ5OgogCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsCi0JCQkgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmstPmhhbmRsZSwgJnR1cGxlKSk7CisJCQkgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCX0KIAogCS8qIE5lZWQgdG8gYWxsb2NhdGUgbmV0X2RldmljZSBiZWZvcmUgcmVxdWVzdGluZyBJUlEgaGFuZGxlciAqLwogCWRldiA9IHByaXNtMl9pbml0X2xvY2FsX2RhdGEoJnByaXNtMl9wY2NhcmRfZnVuY3MsIDAsCi0JCQkJICAgICAmaGFuZGxlX3RvX2RldihsaW5rLT5oYW5kbGUpKTsKKwkJCQkgICAgICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCWdvdG8gZmFpbGVkOwogCWxpbmstPnByaXYgPSBkZXY7CkBAIC03MTcsNyArNjk4LDcgQEAKIAlsb2NhbC0+aHdfcHJpdiA9IGh3X3ByaXY7CiAJaHdfcHJpdi0+bGluayA9IGxpbms7CiAJc3RyY3B5KGh3X3ByaXYtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7Ci0JbGluay0+ZGV2ID0gJmh3X3ByaXYtPm5vZGU7CisJbGluay0+ZGV2X25vZGUgPSAmaHdfcHJpdi0+bm9kZTsKIAogCS8qCiAJICogQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQpAQCAtNzMwLDcgKzcxMSw3IEBACiAJCWxpbmstPmlycS5IYW5kbGVyID0gcHJpc20yX2ludGVycnVwdDsKIAkJbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCQlDU19DSEVDSyhSZXF1ZXN0SVJRLAotCQkJIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKwkJCSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogCX0KIAogCS8qCkBAIC03MzksMTggKzcyMCwxNyBAQAogCSAqIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJICovCiAJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCi0JCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogCWRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6IFZjYyAlZC4lZCIsCi0JICAgICAgIGRldl9pbmZvLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4LAotCSAgICAgICBsaW5rLT5jb25mLlZjYyAvIDEwLCBsaW5rLT5jb25mLlZjYyAlIDEwKTsKLQlpZiAobGluay0+Y29uZi5WcHAxKQotCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxIC8gMTAsCi0JCSAgICAgICBsaW5rLT5jb25mLlZwcDEgJSAxMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeDogIiwKKwkgICAgICAgZGV2X2luZm8sIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLlZwcCkKKwkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwIC8gMTAsCisJCSAgICAgICBsaW5rLT5jb25mLlZwcCAlIDEwKTsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAlpZiAobGluay0+aW8uTnVtUG9ydHMxKQpAQCAtNzYxLDkgKzc0MSw2IEBACiAJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOwogCXByaW50aygiXG4iKTsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQogCWxvY2FsLT5zaHV0ZG93biA9IDA7CiAKIAlzYW5kaXNrX2VuYWJsZV93aXJlbGVzcyhkZXYpOwpAQCAtNzc4LDcgKzc1NSw3IEBACiAJcmV0dXJuIHJldDsKIAogIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAKICBmYWlsZWQ6CiAJa2ZyZWUocGFyc2UpOwpAQCAtNzkwLDcgKzc2Nyw3IEBACiAKIHN0YXRpYyB2b2lkIHByaXNtMl9yZWxlYXNlKHVfbG9uZyBhcmcpCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IChkZXZfbGlua190ICopYXJnOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlICopYXJnOwogCiAJUERFQlVHKERFQlVHX0ZMT1csICJwcmlzbTJfcmVsZWFzZVxuIik7CiAKQEAgLTc5OSw3MSArNzc2LDU0IEBACiAJCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAogCQlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7Ci0JCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCQlwcmlzbTJfaHdfc2h1dGRvd24oZGV2LCAwKTsKKwkJcHJpc20yX2h3X3NodXRkb3duKGRldiwgMCk7CiAJCWlmYWNlLT5sb2NhbC0+c2h1dGRvd24gPSAxOwogCX0KIAotCWlmIChsaW5rLT53aW4pCi0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSkKLQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLQorCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlQREVCVUcoREVCVUdfRkxPVywgInJlbGVhc2UgLSBkb25lXG4iKTsKIH0KIAotc3RhdGljIGludCBob3N0YXBfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGhvc3RhcF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgbGluay0+cHJpdjsKIAlpbnQgZGV2X29wZW4gPSAwOworCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZSA9IE5VTEw7CisKKwlpZiAoZGV2KQorCQlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlQREVCVUcoREVCVUdfRVhUUkEsICIlczogQ1NfRVZFTlRfUE1fU1VTUEVORFxuIiwgZGV2X2luZm8pOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0KLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZSA9IG5ldGRldl9wcml2KGRldik7Ci0JCWlmIChpZmFjZSAmJiBpZmFjZS0+bG9jYWwpCi0JCQlkZXZfb3BlbiA9IGlmYWNlLT5sb2NhbC0+bnVtX2Rldl9vcGVuID4gMDsKLQkJaWYgKGRldl9vcGVuKSB7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCX0KLQkJcHJpc20yX3N1c3BlbmQoZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOworCWlmIChpZmFjZSAmJiBpZmFjZS0+bG9jYWwpCisJCWRldl9vcGVuID0gaWZhY2UtPmxvY2FsLT5udW1fZGV2X29wZW4gPiAwOworCWlmIChkZXZfb3BlbikgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAl9CisJcHJpc20yX3N1c3BlbmQoZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhvc3RhcF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBob3N0YXBfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgbGluay0+cHJpdjsKIAlpbnQgZGV2X29wZW4gPSAwOworCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZSA9IE5VTEw7CisKKwlpZiAoZGV2KQorCQlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlQREVCVUcoREVCVUdfRVhUUkEsICIlczogQ1NfRVZFTlRfUE1fUkVTVU1FXG4iLCBkZXZfaW5mbyk7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCQlpZiAoaWZhY2UgJiYgaWZhY2UtPmxvY2FsKQotCQkJZGV2X29wZW4gPSBpZmFjZS0+bG9jYWwtPm51bV9kZXZfb3BlbiA+IDA7CisJaWYgKGlmYWNlICYmIGlmYWNlLT5sb2NhbCkKKwkJZGV2X29wZW4gPSBpZmFjZS0+bG9jYWwtPm51bV9kZXZfb3BlbiA+IDA7CiAKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQotCQlwcmlzbTJfaHdfc2h1dGRvd24oZGV2LCAxKTsKLQkJcHJpc20yX2h3X2NvbmZpZyhkZXYsIGRldl9vcGVuID8gMCA6IDEpOwotCQlpZiAoZGV2X29wZW4pIHsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCX0KKwlwcmlzbTJfaHdfc2h1dGRvd24oZGV2LCAxKTsKKwlwcmlzbTJfaHdfY29uZmlnKGRldiwgZGV2X29wZW4gPyAwIDogMSk7CisJaWYgKGRldl9vcGVuKSB7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTkzMCw3ICs4OTAsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJob3N0YXBfY3MiLAogCX0sCi0JLnByb2JlCQk9IHByaXNtMl9hdHRhY2gsCisJLnByb2JlCQk9IGhvc3RhcF9jc19wcm9iZSwKIAkucmVtb3ZlCQk9IHByaXNtMl9kZXRhY2gsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZQk9IGhvc3RhcF9jc19pZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKaW5kZXggOGIzN2U4Mi4uODM5OWRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwpAQCAtMTg2MCw3ICsxODYwLDcgQEAKIAltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwogCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKIAlpZiAoc2NhbikgewotCQljaGFuID0gc2Nhbi0+Y2hpZDsKKwkJY2hhbiA9IGxlMTZfdG9fY3B1KHNjYW4tPmNoaWQpOwogCX0gZWxzZSBpZiAoYnNzKSB7CiAJCWNoYW4gPSBic3MtPmNoYW47CiAJfSBlbHNlIHsKQEAgLTE4NjgsNyArMTg2OCw3IEBACiAJfQogCiAJaWYgKGNoYW4gPiAwKSB7Ci0JCWl3ZS51LmZyZXEubSA9IGZyZXFfbGlzdFtsZTE2X3RvX2NwdShjaGFuIC0gMSldICogMTAwMDAwOworCQlpd2UudS5mcmVxLm0gPSBmcmVxX2xpc3RbY2hhbiAtIDFdICogMTAwMDAwOwogCQlpd2UudS5mcmVxLmUgPSAxOwogCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKIAkJCQkJCSAgSVdfRVZfRlJFUV9MRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCmluZGV4IDlkY2U1MjIuLmJjYTg5Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKQEAgLTU1NzMsOCArNTU3Myw3IEBACiAJY2FzZSBJRUVFODAyMTFfNTJHSFpfQkFORDoKIAkJbmV0d29yay0+bW9kZSA9IElFRUVfQTsKIAkJaSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOwotCQlpZiAoaSA9PSAtMSkKLQkJCUJVRygpOworCQlCVUdfT04oaSA9PSAtMSk7CiAJCWlmIChnZW8tPmFbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSB7CiAJCQlJUFdfV0FSTklORygiT3ZlcnJpZGluZyBpbnZhbGlkIGNoYW5uZWxcbiIpOwogCQkJcHJpdi0+Y2hhbm5lbCA9IGdlby0+YVswXS5jaGFubmVsOwpAQCAtNTU4Nyw4ICs1NTg2LDcgQEAKIAkJZWxzZQogCQkJbmV0d29yay0+bW9kZSA9IElFRUVfQjsKIAkJaSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOwotCQlpZiAoaSA9PSAtMSkKLQkJCUJVRygpOworCQlCVUdfT04oaSA9PSAtMSk7CiAJCWlmIChnZW8tPmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSkgewogCQkJSVBXX1dBUk5JTkcoIk92ZXJyaWRpbmcgaW52YWxpZCBjaGFubmVsXG4iKTsKIAkJCXByaXYtPmNoYW5uZWwgPSBnZW8tPmJnWzBdLmNoYW5uZWw7CkBAIC02NzE1LDggKzY3MTMsNyBAQAogCiAJc3dpdGNoIChwcml2LT5pZWVlLT5pd19tb2RlKSB7CiAJY2FzZSBJV19NT0RFX0FESE9DOgotCQlpZiAoIShuZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQotCQkJQlVHKCk7CisJCUJVR19PTighKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpOwogCiAJCXFvc19kYXRhID0gJmlic3NfZGF0YTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKaW5kZXggNzVjZTZkZC4uOTM0M2Q5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwpAQCAtMTkwLDggKzE5MCw4IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogLyogUENNQ0lBIChDYXJkIFNlcnZpY2VzKSByZWxhdGVkIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgbmV0d2F2ZV9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOyAgICAgLyogQ2FyZCByZW1vdmFsICovCi1zdGF0aWMgdm9pZCBuZXR3YXZlX3BjbWNpYV9jb25maWcoZGV2X2xpbmtfdCAqYXJnKTsgLyogUnVucyBhZnRlciBjYXJkIAorc3RhdGljIHZvaWQgbmV0d2F2ZV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsgICAgIC8qIENhcmQgcmVtb3ZhbCAqLworc3RhdGljIGludCBuZXR3YXZlX3BjbWNpYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmFyZyk7IC8qIFJ1bnMgYWZ0ZXIgY2FyZAogCQkJCQkJCQkJCQkJCSAgIGluc2VydGlvbiAqLwogc3RhdGljIHZvaWQgbmV0d2F2ZV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsgICAgLyogRGVzdHJveSBpbnN0YW5jZSAqLwogCkBAIC0yMjEsMTAgKzIyMSwxMCBAQAogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKgotICAgQSBkZXZfbGlua190IHN0cnVjdHVyZSBoYXMgZmllbGRzIGZvciBtb3N0IHRoaW5ncyB0aGF0IGFyZSBuZWVkZWQKKyAgIEEgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIGhhcyBmaWVsZHMgZm9yIG1vc3QgdGhpbmdzIHRoYXQgYXJlIG5lZWRlZAogICAgdG8ga2VlcCB0cmFjayBvZiBhIHNvY2tldCwgYnV0IHRoZXJlIHdpbGwgdXN1YWxseSBiZSBzb21lIGRldmljZQogICAgc3BlY2lmaWMgaW5mb3JtYXRpb24gdGhhdCBhbHNvIG5lZWRzIHRvIGJlIGtlcHQgdHJhY2sgb2YuICBUaGUKLSAgICdwcml2JyBwb2ludGVyIGluIGEgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgdG8gcG9pbnQgdG8KKyAgICdwcml2JyBwb2ludGVyIGluIGEgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIGNhbiBiZSB1c2VkIHRvIHBvaW50IHRvCiAgICBhIGRldmljZS1zcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLCBsaWtlIHRoaXMuCiAKICAgIEEgZHJpdmVyIG5lZWRzIHRvIHByb3ZpZGUgYSBkZXZfbm9kZV90IHN0cnVjdHVyZSBmb3IgZWFjaCBkZXZpY2UKQEAgLTIzMiw3ICsyMzIsNyBAQAogICAgZXhhbXBsZSwgZXRoZXJuZXQgY2FyZHMsIG1vZGVtcykuICBJbiBvdGhlciBjYXNlcywgdGhlcmUgbWF5IGJlCiAgICBtYW55IGFjdHVhbCBvciBsb2dpY2FsIGRldmljZXMgKFNDU0kgYWRhcHRlcnMsIG1lbW9yeSBjYXJkcyB3aXRoCiAgICBtdWx0aXBsZSBwYXJ0aXRpb25zKS4gIFRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZXMgbmVlZCB0byBiZSBrZXB0Ci0gICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIGRldl9saW5rX3QKKyAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAgIHN0cnVjdHVyZS4gIFdlIGFsbG9jYXRlIHRoZW0gaW4gdGhlIGNhcmQncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLAogICAgYmVjYXVzZSB0aGV5IGdlbmVyYWxseSBjYW4ndCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuCiAqLwpAQCAtMjY4LDcgKzI2OCw3IEBACiB9OwkKICAgIAogdHlwZWRlZiBzdHJ1Y3QgbmV0d2F2ZV9wcml2YXRlIHsKLSAgICBkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIHNwaW5sb2NrX3QJc3BpbmxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIChTTVApICovCiAgICAgZGV2X25vZGVfdCBub2RlOwogICAgIHVfY2hhciAgICAgX19pb21lbSAqcmFtQmFzZTsKQEAgLTM3NiwyMCArMzc2LDE5IEBACiAgKiAgICAgY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEKICAqICAgICBjYXJkIGluc2VydGlvbiBldmVudC4KICAqLwotc3RhdGljIGludCBuZXR3YXZlX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IG5ldHdhdmVfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdjsKIAogICAgIERFQlVHKDAsICJuZXR3YXZlX2F0dGFjaCgpXG4iKTsKIAotICAgIC8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlICovCiAgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKG5ldHdhdmVfcHJpdmF0ZSkpOwogICAgIGlmICghZGV2KQogCXJldHVybiAtRU5PTUVNOwogICAgIHByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxpbmsgPSAmcHJpdi0+bGluazsKKyAgICBwcml2LT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGRldjsKIAogICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwpAQCAtNDA2LDcgKzQwNSw2IEBACiAgICAgCiAgICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwpAQCAtNDMwLDEzICs0MjgsNyBAQAogICAgIGRldi0+c3RvcCA9ICZuZXR3YXZlX2Nsb3NlOwogICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBuZXR3YXZlX3BjbWNpYV9jb25maWcoIGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldHdhdmVfcGNtY2lhX2NvbmZpZyggbGluayk7CiB9IC8qIG5ldHdhdmVfYXR0YWNoICovCiAKIC8qCkBAIC00NDcsMTcgKzQzOSwxNSBAQAogICogICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKICAqICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KICAqLwotc3RhdGljIHZvaWQgbmV0d2F2ZV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgbmV0d2F2ZV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKIAlERUJVRygwLCAibmV0d2F2ZV9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJbmV0d2F2ZV9yZWxlYXNlKGxpbmspOworCW5ldHdhdmVfcmVsZWFzZShsaW5rKTsKIAotCWlmIChsaW5rLT5kZXYpCisJaWYgKGxpbmstPmRldl9ub2RlKQogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCiAJZnJlZV9uZXRkZXYoZGV2KTsKQEAgLTc0Myw4ICs3MzMsNyBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBuZXR3YXZlX3BjbWNpYV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykgewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CitzdGF0aWMgaW50IG5ldHdhdmVfcGNtY2lhX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykgewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdHVwbGVfdCB0dXBsZTsKQEAgLTc2NiwxNSArNzU1LDEyIEBACiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotICAgIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gICAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogICAgIC8qCiAgICAgICogIFRyeSBhbGxvY2F0aW5nIElPIHBvcnRzLiAgVGhpcyB0cmllcyBhIGZldyBmaXhlZCBhZGRyZXNzZXMuCiAgICAgICogIElmIHlvdSB3YW50LCB5b3UgY2FuIGFsc28gcmVhZCB0aGUgY2FyZCdzIGNvbmZpZyB0YWJsZSB0bwpAQCAtNzgyLDExICs3NjgsMTEgQEAKICAgICAgKi8KICAgICBmb3IgKGkgPSBqID0gMHgwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewogCWxpbmstPmlvLkJhc2VQb3J0MSA9IGogXiAweDMwMDsKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwogICAgIH0KICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQogCkBAIC03OTQsMTYgKzc4MCwxNiBAQAogICAgICAqICBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAogICAgICAqICBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCiAgICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAKICAgICAvKgogICAgICAqICBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAogICAgICAqICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZy4KICAgICAgKi8KLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsICZsaW5rLT5jb25mKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogICAgIC8qCi0gICAgICogIEFsbG9jYXRlIGEgMzJLIG1lbW9yeSB3aW5kb3cuICBOb3RlIHRoYXQgdGhlIGRldl9saW5rX3QKKyAgICAgKiAgQWxsb2NhdGUgYSAzMksgbWVtb3J5IHdpbmRvdy4gIE5vdGUgdGhhdCB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAgICAgKiAgc3RydWN0dXJlIHByb3ZpZGVzIHNwYWNlIGZvciBvbmUgd2luZG93IGhhbmRsZSAtLSBpZiB5b3VyCiAgICAgICogIGRldmljZSBuZWVkcyBzZXZlcmFsIHdpbmRvd3MsIHlvdSdsbCBuZWVkIHRvIGtlZXAgdHJhY2sgb2YKICAgICAgKiAgdGhlIGhhbmRsZXMgaW4geW91ciBwcml2YXRlIGRhdGEgc3RydWN0dXJlLCBkZXYtPnByaXYuCkBAIC04MTMsNyArNzk5LDcgQEAKICAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzh8V0lOX01FTU9SWV9UWVBFX0NNfFdJTl9FTkFCTEU7CiAgICAgcmVxLkJhc2UgPSAwOyByZXEuU2l6ZSA9IDB4ODAwMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSBtZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKICAgICBtZW0uQ2FyZE9mZnNldCA9IDB4MjAwMDA7IG1lbS5QYWdlID0gMDsgCiAgICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pKTsKIApAQCAtODIzLDcgKzgwOSw3IEBACiAKICAgICBkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9ERUJVRyAibmV0d2F2ZV9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKQEAgLTgzMSw4ICs4MTcsNyBAQAogICAgIH0KIAogICAgIHN0cmNweShwcml2LT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOwotICAgIGxpbmstPmRldiA9ICZwcml2LT5ub2RlOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisgICAgbGluay0+ZGV2X25vZGUgPSAmcHJpdi0+bm9kZTsKIAogICAgIC8qIFJlc2V0IGNhcmQgYmVmb3JlIHJlYWRpbmcgcGh5c2ljYWwgYWRkcmVzcyAqLwogICAgIG5ldHdhdmVfZG9yZXNldChkZXYtPmJhc2VfYWRkciwgcmFtQmFzZSk7CkBAIC04NTIsMTIgKzgzNywxMyBAQAogICAgIHByaW50ayhLRVJOX0RFQlVHICJOZXR3YXZlX3Jlc2V0OiByZXZpc2lvbiAlMDR4ICUwNHhcbiIsIAogCSAgIGdldF91aW50MTYocmFtQmFzZSArIE5FVFdBVkVfRVJFR19BUlcpLAogCSAgIGdldF91aW50MTYocmFtQmFzZSArIE5FVFdBVkVfRVJFR19BUlcrMikpOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICBuZXR3YXZlX3JlbGVhc2UobGluayk7CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIG5ldHdhdmVfcGNtY2lhX2NvbmZpZyAqLwogCiAvKgpAQCAtODY3LDUyICs4NTMsMzUgQEAKICAqICAgIGRldmljZSwgYW5kIHJlbGVhc2UgdGhlIFBDTUNJQSBjb25maWd1cmF0aW9uLiAgSWYgdGhlIGRldmljZSBpcwogICogICAgc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCiAgKi8KLXN0YXRpYyB2b2lkIG5ldHdhdmVfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgbmV0d2F2ZV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CisJbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotICAgIERFQlVHKDAsICJuZXR3YXZlX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCURFQlVHKDAsICJuZXR3YXZlX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0gICAgLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICAgIGlmIChsaW5rLT53aW4pIHsKLQlpb3VubWFwKHByaXYtPnJhbUJhc2UpOwotCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIH0KLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCWlmIChsaW5rLT53aW4pCisJCWlvdW5tYXAocHJpdi0+cmFtQmFzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV0d2F2ZV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgbmV0d2F2ZV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAobGluay0+b3BlbikKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCX0KKwlpZiAobGluay0+b3BlbikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmV0d2F2ZV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBuZXR3YXZlX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQluZXR3YXZlX3Jlc2V0KGRldik7Ci0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCX0KKwlpZiAobGluay0+b3BlbikgeworCQluZXR3YXZlX3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTExMTksNyArMTA4OCw3IEBACiAgICAgdV9jaGFyIF9faW9tZW0gKnJhbUJhc2U7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKICAgICBzdHJ1Y3QgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJnByaXYtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBwcml2LT5wX2RldjsKICAgICBpbnQgaTsKICAgICAKICAgICBpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCkBAIC0xMTM4LDcgKzExMDcsNyBAQAogCQogICAgICAgICBzdGF0dXMgPSBpbmIoaW9iYXNlICsgTkVUV0FWRV9SRUdfQVNSKTsKIAkJCi0JaWYgKCFERVZfT0sobGluaykpIHsKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogCSAgICBERUJVRygxLCAibmV0d2F2ZV9pbnRlcnJ1cHQ6IEludGVycnVwdCB3aXRoIHN0YXR1cyAweCV4ICIKIAkJICAiZnJvbSByZW1vdmVkIG9yIHN1c3BlbmRlZCBjYXJkIVxuIiwgc3RhdHVzKTsKIAkgICAgYnJlYWs7CkBAIC0xMzczLDExICsxMzQyLDExIEBACiAKIHN0YXRpYyBpbnQgbmV0d2F2ZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKICAgICBuZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmcHJpdi0+bGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IHByaXYtPnBfZGV2OwogCiAgICAgREVCVUcoMSwgIm5ldHdhdmVfb3Blbjogc3RhcnRpbmcuXG4iKTsKICAgICAKLSAgICBpZiAoIURFVl9PSyhsaW5rKSkKKyAgICBpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAlyZXR1cm4gLUVOT0RFVjsKIAogICAgIGxpbmstPm9wZW4rKzsKQEAgLTEzOTAsNyArMTM1OSw3IEBACiAKIHN0YXRpYyBpbnQgbmV0d2F2ZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJnByaXYtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBwcml2LT5wX2RldjsKIAogICAgIERFQlVHKDEsICJuZXR3YXZlX2Nsb3NlOiBmaW5pc2hpbmcuXG4iKTsKIApAQCAtMTQxMSw3ICsxMzgwLDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAibmV0d2F2ZV9jcyIsCiAJfSwKLQkucHJvYmUJCT0gbmV0d2F2ZV9hdHRhY2gsCisJLnByb2JlCQk9IG5ldHdhdmVfcHJvYmUsCiAJLnJlbW92ZQkJPSBuZXR3YXZlX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBuZXR3YXZlX2lkcywKIAkuc3VzcGVuZAk9IG5ldHdhdmVfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwppbmRleCA4ZGZkZmJkLi5jMmQwYjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCkBAIC0zOTAsNyArMzkwLDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXN0cnVjdCB7Ci0JCQlfX2xlMTYgcXVhbCwgc2lnbmFsLCBub2lzZTsKKwkJCV9fbGUxNiBxdWFsLCBzaWduYWwsIG5vaXNlLCB1bnVzZWQ7CiAJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNxOwogCiAJCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsCkBAIC04MTIsNyArODEyLDYgQEAKIAlpZiAoZGF0YWxlbiA+IElFRUU4MDIxMV9EQVRBX0xFTiArIDEyKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogb3ZlcnNpemVkIG1vbml0b3IgZnJhbWUsICIKIAkJICAgICAgICJkYXRhIGxlbmd0aCA9ICVkXG4iLCBkZXYtPm5hbWUsIGRhdGFsZW4pOwotCQllcnIgPSAtRUlPOwogCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOwogCQlnb3RvIHVwZGF0ZV9zdGF0czsKIAl9CkBAIC04MjEsOCArODIwLDcgQEAKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IGFsbG9jYXRlIHNrYiBmb3IgbW9uaXRvciBmcmFtZVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZHJvcDsKKwkJZ290byB1cGRhdGVfc3RhdHM7CiAJfQogCiAJLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKaW5kZXggZWM2ZjJhNC4uNDM0ZjdkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwpAQCAtNDksNyArNDksNyBAQAogLyogUENNQ0lBIHNwZWNpZmljIGRldmljZSBpbmZvcm1hdGlvbiAoZ29lcyBpbiB0aGUgY2FyZCBmaWVsZCBvZgogICogc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqLwogc3RydWN0IG9yaW5vY29fcGNjYXJkIHsKLQlkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsKIAogCS8qIFVzZWQgdG8gaGFuZGxlIGhhcmQgcmVzZXQgKi8KQEAgLTYzLDggKzYzLDggQEAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMJCQkJCQkgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgb3Jpbm9jb19jc19jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBvcmlub2NvX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IG9yaW5vY29fY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIG9yaW5vY29fY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBvcmlub2NvX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03NSwxMyArNzUsMTMgQEAKIG9yaW5vY29fY3NfaGFyZF9yZXNldChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQogewogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7Ci0JZGV2X2xpbmtfdCAqbGluayA9ICZjYXJkLT5saW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gY2FyZC0+cF9kZXY7CiAJaW50IGVycjsKIAogCS8qIFdlIG5lZWQgYXRvbWljIG9wcyBoZXJlLCBiZWNhdXNlIHdlJ3JlIG5vdCBob2xkaW5nIHRoZSBsb2NrICovCiAJc2V0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcyk7CiAKLQllcnIgPSBwY21jaWFfcmVzZXRfY2FyZChsaW5rLT5oYW5kbGUsIE5VTEwpOworCWVyciA9IHBjbWNpYV9yZXNldF9jYXJkKGxpbmssIE5VTEwpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTEwNCwxMiArMTA0LDExIEBACiAgKiBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYSBjYXJkCiAgKiBpbnNlcnRpb24gZXZlbnQuICAqLwogc3RhdGljIGludAotb3Jpbm9jb19jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorb3Jpbm9jb19jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkOwotCWRldl9saW5rX3QgKmxpbms7CiAKIAlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksIG9yaW5vY29fY3NfaGFyZF9yZXNldCk7CiAJaWYgKCEgZGV2KQpAQCAtMTE4LDcgKzExNyw3IEBACiAJY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAkvKiBMaW5rIGJvdGggc3RydWN0dXJlcyB0b2dldGhlciAqLwotCWxpbmsgPSAmY2FyZC0+bGluazsKKwljYXJkLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGRldjsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwpAQCAtMTM1LDE2ICsxMzQsNyBAQAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQkvKiBSZWdpc3RlciB3aXRoIENhcmQgU2VydmljZXMgKi8KLQlsaW5rLT5uZXh0ID0gTlVMTDsKLQotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlvcmlub2NvX2NzX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBvcmlub2NvX2NzX2NvbmZpZyhsaW5rKTsKIH0JCQkJLyogb3Jpbm9jb19jc19hdHRhY2ggKi8KIAogLyoKQEAgLTE1MywxNiArMTQzLDE0IEBACiAgKiBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgZGV2aWNlCiAgKiBpcyByZWxlYXNlZC4KICAqLwotc3RhdGljIHZvaWQgb3Jpbm9jb19jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgb3Jpbm9jb19jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlvcmlub2NvX2NzX3JlbGVhc2UobGluayk7CisJb3Jpbm9jb19jc19yZWxlYXNlKGxpbmspOwogCi0JREVCVUcoMCwgUEZYICJkZXRhY2g6IGxpbms9JXAgbGluay0+ZGV2PSVwXG4iLCBsaW5rLCBsaW5rLT5kZXYpOwotCWlmIChsaW5rLT5kZXYpIHsKKwlERUJVRygwLCBQRlggImRldGFjaDogbGluaz0lcCBsaW5rLT5kZXZfbm9kZT0lcFxuIiwgbGluaywgbGluay0+ZGV2X25vZGUpOworCWlmIChsaW5rLT5kZXZfbm9kZSkgewogCQlERUJVRygwLCBQRlggIkFib3V0IHRvIHVucmVnaXN0ZXIgbmV0IGRldmljZSAlcFxuIiwKIAkJICAgICAgZGV2KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKQEAgLTE4MCwxMSArMTY4LDEwIEBACiAJCWxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyBcCiAJfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQKLW9yaW5vY29fY3NfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50Citvcmlub2NvX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwpAQCAtMTk2LDcgKzE4Myw3IEBACiAJY2lzcGFyc2VfdCBwYXJzZTsKIAl2b2lkIF9faW9tZW0gKm1lbTsKIAotCUNTX0NIRUNLKFZhbGlkYXRlQ0lTLCBwY21jaWFfdmFsaWRhdGVfY2lzKGhhbmRsZSwgJmluZm8pKTsKKwlDU19DSEVDSyhWYWxpZGF0ZUNJUywgcGNtY2lhX3ZhbGlkYXRlX2NpcyhsaW5rLCAmaW5mbykpOwogCiAJLyoKIAkgKiBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzCkBAIC0yMDcsMTkgKzE5NCwxNSBAQAogCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKIAl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogCS8qIExvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCiAJQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sCi0JCSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25mKSk7Ci0JbGluay0+Y29uZi5WY2MgPSBjb25mLlZjYzsKKwkJIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25mKSk7CiAKIAkvKgogCSAqIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlCkBAIC0yMzYsMTMgKzIxOSwxMyBAQAogCSAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkgKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl3aGlsZSAoMSkgewogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IC5pbmRleCA9IDAgfTsKIAotCQlpZiAoIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDApCi0JCSAgICB8fCAocGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApKQorCQlpZiAoIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwKQorCQkgICAgfHwgKHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkpCiAJCQlnb3RvIG5leHRfZW50cnk7CiAKIAkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQpAQCAtMjc0LDEwICsyNTcsMTAgQEAKIAkJfQogCiAJCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkgICAgY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkgICAgZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQkKIAkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCkBAIC0zMDcsNyArMjkwLDcgQEAKIAkJCX0KIAogCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykgIT0gMCkKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCiAJCQkJZ290byBuZXh0X2VudHJ5OwogCQl9CiAKQEAgLTMxNyw5ICszMDAsOCBAQAogCQlicmVhazsKIAkJCiAJbmV4dF9lbnRyeToKLQkJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQkJbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpOworCQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAJCWlmIChsYXN0X3JldCAgPT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiR2V0TmV4dFR1cGxlKCk6IE5vIG1hdGNoaW5nICIKIAkJCSAgICAgICAiQ0lTIGNvbmZpZ3VyYXRpb24uICBNYXliZSB5b3UgbmVlZCB0aGUgIgpAQCAtMzMzLDcgKzMxNSw3IEBACiAJICogYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZgogCSAqIHRoZSBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSAqLwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKwlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogCiAJLyogV2UgaW5pdGlhbGl6ZSB0aGUgaGVybWVzIHN0cnVjdHVyZSBiZWZvcmUgY29tcGxldGluZyBQQ01DSUEKIAkgKiBjb25maWd1cmF0aW9uIGp1c3QgaW4gY2FzZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZ2V0cwpAQCAtMzUwLDcgKzMzMiw3IEBACiAJICogY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KIAkgKi8KIAlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwKLQkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJLyogT2ssIHdlIGhhdmUgdGhlIGNvbmZpZ3VyYXRpb24sIHByZXBhcmUgdG8gcmVnaXN0ZXIgdGhlIG5ldGRldiAqLwogCWRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtMzU4LDcgKzM0MCw3IEBACiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCWNhcmQtPm5vZGUubWFqb3IgPSBjYXJkLT5ub2RlLm1pbm9yID0gMDsKIAotCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAJLyogVGVsbCB0aGUgc3RhY2sgd2UgZXhpc3QgKi8KIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJyZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwpAQCAtMzY2LDIwICszNDgsMTggQEAKIAl9CiAKIAkvKiBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZHMgdG8gYmUKLQkgKiBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuICovCisJICogaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuICovCiAJc3RyY3B5KGNhcmQtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7Ci0JbGluay0+ZGV2ID0gJmNhcmQtPm5vZGU7IC8qIGxpbmstPmRldiBiZWluZyBub24tTlVMTCBpcyBhbHNvCisJbGluay0+ZGV2X25vZGUgPSAmY2FyZC0+bm9kZTsgLyogbGluay0+ZGV2X25vZGUgYmVpbmcgbm9uLU5VTEwgaXMgYWxzbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKIAogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKLQkgICAgICAgZGV2LT5uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4LAotCSAgICAgICBsaW5rLT5jb25mLlZjYyAvIDEwLCBsaW5rLT5jb25mLlZjYyAlIDEwKTsKLQlpZiAobGluay0+Y29uZi5WcHAxKQotCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxIC8gMTAsCi0JCSAgICAgICBsaW5rLT5jb25mLlZwcDEgJSAxMCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbmRleCAweCUwMng6ICIsCisJICAgICAgIGRldi0+bmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuVnBwKQorCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAgLyAxMCwKKwkJICAgICAgIGxpbmstPmNvbmYuVnBwICUgMTApOwogCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwogCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCiAJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLApAQCAtMzg5LDEzICszNjksMTQgQEAKIAkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOwogCXByaW50aygiXG4iKTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAKICBmYWlsZWQ6CiAJb3Jpbm9jb19jc19yZWxlYXNlKGxpbmspOworCXJldHVybiAtRU5PREVWOwogfQkJCQkvKiBvcmlub2NvX2NzX2NvbmZpZyAqLwogCiAvKgpAQCAtNDA0LDcgKzM4NSw3IEBACiAgKiBzdGlsbCBvcGVuLCB0aGlzIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KICAqLwogc3RhdGljIHZvaWQKLW9yaW5vY29fY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorb3Jpbm9jb19jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDE2LDg4ICszOTcsNjggQEAKIAlwcml2LT5od191bmF2YWlsYWJsZSsrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCS8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCWlmIChsaW5rLT5pcnEuQXNzaWduZWRJUlEpCi0JCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlpZiAocHJpdi0+aHcuaW9iYXNlKQogCQlpb3BvcnRfdW5tYXAocHJpdi0+aHcuaW9iYXNlKTsKIH0JCQkJLyogb3Jpbm9jb19jc19yZWxlYXNlICovCiAKLXN0YXRpYyBpbnQgb3Jpbm9jb19jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgb3Jpbm9jb19jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJLyogVGhpcyBpcyBwcm9iYWJseSByYWN5LCBidXQgSSBjYW4ndCB0aGluayBvZgotCQkgICBhIGJldHRlciB3YXksIHNob3J0IG9mIHJld3JpdGluZyB0aGUgUENNQ0lBCi0JCSAgIGxheWVyIHRvIG5vdCBzdWNrIDotKCAqLwotCQlpZiAoISB0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLyogVGhpcyBpcyBwcm9iYWJseSByYWN5LCBidXQgSSBjYW4ndCB0aGluayBvZgorCSAgIGEgYmV0dGVyIHdheSwgc2hvcnQgb2YgcmV3cml0aW5nIHRoZSBQQ01DSUEKKwkgICBsYXllciB0byBub3Qgc3VjayA6LSggKi8KKwlpZiAoISB0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCQkJZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKLQkJCWlmIChlcnIpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGRvd25pbmcgaW50ZXJmYWNlXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CisJCWlmIChlcnIpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZG93bmluZyBpbnRlcmZhY2VcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwogCi0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCQlwcml2LT5od191bmF2YWlsYWJsZSsrOworCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CiAKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJfQotCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9yaW5vY29fY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgb3Jpbm9jb19jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJLyogRklYTUU6IHNob3VsZCB3ZSBkb3VibGUgY2hlY2sgdGhhdCB0aGlzIGlzCi0JCSAqIHRoZSBzYW1lIGNhcmQgYXMgd2UgaGFkIGJlZm9yZSAqLwotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JCWlmICghIHRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgewotCQkJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKLQkJCWlmIChlcnIpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKLQotCQkJaWYgKHByaXYtPm9wZW4gJiYgISBwcml2LT5od191bmF2YWlsYWJsZSkgewotCQkJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCQkJCWlmIChlcnIpCi0JCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZFxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCX0KLQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmICghIHRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgeworCQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIC1FSU87CiAJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKKworCQlpZiAocHJpdi0+b3BlbiAmJiAhIHByaXYtPmh3X3VuYXZhaWxhYmxlKSB7CisJCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKKwkJCWlmIChlcnIpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC02MDQsNyArNTY1LDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKIAl9LAotCS5wcm9iZQkJPSBvcmlub2NvX2NzX2F0dGFjaCwKKwkucHJvYmUJCT0gb3Jpbm9jb19jc19wcm9iZSwKIAkucmVtb3ZlCQk9IG9yaW5vY29fY3NfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IG9yaW5vY29fY3NfaWRzLAogCS5zdXNwZW5kCT0gb3Jpbm9jb19jc19zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA3ODgwZDhjLi44NzllYjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtOTAsOCArOTAsOCBAQAogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQogI2VuZGlmCiAvKiogUHJvdG90eXBlcyBiYXNlZCBvbiBQQ01DSUEgc2tlbGV0b24gZHJpdmVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCByYXlfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgcmF5X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IHJheV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgcmF5X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIHZvaWQgcmF5X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCiAvKioqKiogUHJvdG90eXBlcyBpbmRpY2F0ZWQgYnkgZGV2aWNlIHN0cnVjdHVyZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTAsMjAgKzE5MCwxNyBAQAogc3RhdGljIGNoYXIgKnBoeV9hZGRyID0gTlVMTDsKIAogCi0vKiBBIGxpbmtlZCBsaXN0IG9mICJpbnN0YW5jZXMiIG9mIHRoZSByYXkgZGV2aWNlLiAgRWFjaCBhY3R1YWwKLSAgIFBDTUNJQSBjYXJkIGNvcnJlc3BvbmRzIHRvIG9uZSBkZXZpY2UgaW5zdGFuY2UsIGFuZCBpcyBkZXNjcmliZWQKLSAgIGJ5IG9uZSBkZXZfbGlua190IHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KLSovCi1zdGF0aWMgZGV2X2xpbmtfdCAqZGV2X2xpc3QgPSBOVUxMOwotCi0vKiBBIGRldl9saW5rX3Qgc3RydWN0dXJlIGhhcyBmaWVsZHMgZm9yIG1vc3QgdGhpbmdzIHRoYXQgYXJlIG5lZWRlZAorLyogQSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgaGFzIGZpZWxkcyBmb3IgbW9zdCB0aGluZ3MgdGhhdCBhcmUgbmVlZGVkCiAgICB0byBrZWVwIHRyYWNrIG9mIGEgc29ja2V0LCBidXQgdGhlcmUgd2lsbCB1c3VhbGx5IGJlIHNvbWUgZGV2aWNlCiAgICBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGFsc28gbmVlZHMgdG8gYmUga2VwdCB0cmFjayBvZi4gIFRoZQotICAgJ3ByaXYnIHBvaW50ZXIgaW4gYSBkZXZfbGlua190IHN0cnVjdHVyZSBjYW4gYmUgdXNlZCB0byBwb2ludCB0bworICAgJ3ByaXYnIHBvaW50ZXIgaW4gYSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgdG8gcG9pbnQgdG8KICAgIGEgZGV2aWNlLXNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsIGxpa2UgdGhpcy4KICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHJheV9tZW1fc3BlZWQgPSA1MDA7CiAKKy8qIFdBUk5JTkc6IFRISVMgRFJJVkVSIElTIE5PVCBDQVBBQkxFIE9GIEhBTkRMSU5HIE1VTFRJUExFIERFVklDRVMhICovCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnRoaXNfZGV2aWNlID0gTlVMTDsKKwogTU9EVUxFX0FVVEhPUigiQ29yZXkgVGhvbWFzIDxjb3JleUB3b3JsZC5zdGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSYXlsaW5rL1dlYkdlYXIgd2lyZWxlc3MgTEFOIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMzA2LDU2ICszMDMsNDYgQEAKICAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQogICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCByYXlfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgcmF5X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIHJheV9kZXZfdCAqbG9jYWw7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLSAgICAKKwogICAgIERFQlVHKDEsICJyYXlfYXR0YWNoKClcbiIpOwogCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLSAgICBsaW5rID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLQotICAgIGlmICghbGluaykKLQkgICAgcmV0dXJuIC1FTk9NRU07Ci0KICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwogICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihyYXlfZGV2X3QpKTsKLQogICAgIGlmICghZGV2KQogCSAgICBnb3RvIGZhaWxfYWxsb2NfZGV2OwogCiAgICAgbG9jYWwgPSBkZXYtPnByaXY7Ci0KLSAgICBtZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSk7CisgICAgbG9jYWwtPmZpbmRlciA9IHBfZGV2OwogCiAgICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nLiBOb25lIHVzZWQgaGVyZSAqLwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDA7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDU7CisgICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDA7CisgICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisgICAgcF9kZXYtPmlvLklPQWRkckxpbmVzID0gNTsKIAogICAgIC8qIEludGVycnVwdCBzZXR1cC4gRm9yIFBDTUNJQSwgZHJpdmVyIHRha2VzIHdoYXQncyBnaXZlbiAqLwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgICBsaW5rLT5pcnEuSGFuZGxlciA9ICZyYXlfaW50ZXJydXB0OworICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKyAgICBwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworICAgIHBfZGV2LT5pcnEuSGFuZGxlciA9ICZyYXlfaW50ZXJydXB0OwogCiAgICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwotICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwotICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwotICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOworICAgIHBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CisgICAgcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworICAgIHBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKKyAgICBwX2Rldi0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKLSAgICBsaW5rLT5wcml2ID0gZGV2OwotICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKKyAgICBwX2Rldi0+cHJpdiA9IGRldjsKKyAgICBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwogICAgIAotICAgIGxvY2FsLT5maW5kZXIgPSBsaW5rOworICAgIGxvY2FsLT5maW5kZXIgPSBwX2RldjsKICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOU0VSVEVEOwogICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKICAgICBsb2NhbC0+bnVtX211bHRpID0gMDsKLSAgICBERUJVRygyLCJyYXlfYXR0YWNoIGxpbmsgPSAlcCwgIGRldiA9ICVwLCAgbG9jYWwgPSAlcCwgaW50ciA9ICVwXG4iLAotICAgICAgICAgIGxpbmssZGV2LGxvY2FsLCZyYXlfaW50ZXJydXB0KTsKKyAgICBERUJVRygyLCJyYXlfYXR0YWNoIHBfZGV2ID0gJXAsICBkZXYgPSAlcCwgIGxvY2FsID0gJXAsIGludHIgPSAlcFxuIiwKKyAgICAgICAgICBwX2RldixkZXYsbG9jYWwsJnJheV9pbnRlcnJ1cHQpOwogCiAgICAgLyogUmF5bGluayBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCiAgICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmcmF5X2Rldl9zdGFydF94bWl0OwpAQCAtMzc5LDE2ICszNjYsMTAgQEAKIAogICAgIGluaXRfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgcmF5X2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHRoaXNfZGV2aWNlID0gcF9kZXY7CisgICAgcmV0dXJuIHJheV9jb25maWcocF9kZXYpOwogCiBmYWlsX2FsbG9jX2RldjoKLSAgICBrZnJlZShsaW5rKTsKICAgICByZXR1cm4gLUVOT01FTTsKIH0gLyogcmF5X2F0dGFjaCAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzk3LDM3ICszNzgsMjUgQEAKICAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAogICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgcmF5X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLSAgICBkZXZfbGlua190ICoqbGlua3A7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICAgICByYXlfZGV2X3QgKmxvY2FsOwogCiAgICAgREVCVUcoMSwgInJheV9kZXRhY2goMHglcClcbiIsIGxpbmspOwotICAgIAotICAgIC8qIExvY2F0ZSBkZXZpY2Ugc3RydWN0dXJlICovCi0gICAgZm9yIChsaW5rcCA9ICZkZXZfbGlzdDsgKmxpbmtwOyBsaW5rcCA9ICYoKmxpbmtwKS0+bmV4dCkKLSAgICAgICAgaWYgKCpsaW5rcCA9PSBsaW5rKSBicmVhazsKLSAgICBpZiAoKmxpbmtwID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKIAorICAgIHRoaXNfZGV2aWNlID0gTlVMTDsKICAgICBkZXYgPSBsaW5rLT5wcml2OwogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCSAgICByYXlfcmVsZWFzZShsaW5rKTsKKyAgICByYXlfcmVsZWFzZShsaW5rKTsKIAotCSAgICBsb2NhbCA9IChyYXlfZGV2X3QgKilkZXYtPnByaXY7Ci0gICAgICAgICAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgfQorICAgIGxvY2FsID0gKHJheV9kZXZfdCAqKWRldi0+cHJpdjsKKyAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKLSAgICAvKiBVbmxpbmsgZGV2aWNlIHN0cnVjdHVyZSwgZnJlZSBwaWVjZXMgKi8KLSAgICAqbGlua3AgPSBsaW5rLT5uZXh0OwogICAgIGlmIChsaW5rLT5wcml2KSB7Ci0JaWYgKGxpbmstPmRldikgdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAobGluay0+ZGV2X25vZGUpIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAgICAgICAgIGZyZWVfbmV0ZGV2KGRldik7CiAgICAgfQotICAgIGtmcmVlKGxpbmspOwogICAgIERFQlVHKDIsInJheV9jcyByYXlfZGV0YWNoIGVuZGluZ1xuIik7CiB9IC8qIHJheV9kZXRhY2ggKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQzOCw5ICs0MDcsOCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogI2RlZmluZSBNQVhfVFVQTEVfU0laRSAxMjgKLXN0YXRpYyB2b2lkIHJheV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgcmF5X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHR1cGxlX3QgdHVwbGU7CiAgICAgY2lzcGFyc2VfdCBwYXJzZTsKICAgICBpbnQgbGFzdF9mbiA9IDAsIGxhc3RfcmV0ID0gMDsKQEAgLTQ1NSw0OCArNDIzLDQ1IEBACiAKICAgICAvKiBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24gcmVncyAqLwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IE1BWF9UVVBMRV9TSVpFOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCiAgICAgLyogRGV0ZXJtaW5lIGNhcmQgdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiAqLwogICAgIGJ1ZlswXSA9IGJ1ZltNQVhfVFVQTEVfU0laRSAtIDFdID0gMDsKICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogICAgIHR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSBNQVhfVFVQTEVfU0laRTsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDI7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKIAogICAgIGZvciAoaT0wOyBpPHR1cGxlLlR1cGxlRGF0YUxlbiAtIDQ7IGkrKykgCiAgICAgICAgIGlmIChidWZbaV0gPT0gMCkgYnVmW2ldID0gJyAnOwogICAgIHByaW50ayhLRVJOX0lORk8gInJheV9jcyBEZXRlY3RlZDogJXNcbiIsYnVmKTsKIAotICAgIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gICAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogICAgIC8qIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CiAgICAgICAgYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgogICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgICAgCiAgICAgLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKICAgICAgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZy4KICAgICAqLwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAvKioqIFNldCB1cCAzMmsgd2luZG93IGZvciBzaGFyZWQgbWVtb3J5ICh0cmFuc21pdCBhbmQgY29udHJvbCkgKioqKioqKioqKioqLwogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7CiAgICAgcmVxLkJhc2UgPSAwOwogICAgIHJlcS5TaXplID0gMHg4MDAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKICAgICBtZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsgbWVtLlBhZ2UgPSAwOwogICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKSk7CiAgICAgbG9jYWwtPnNyYW0gPSBpb3JlbWFwKHJlcS5CYXNlLHJlcS5TaXplKTsKQEAgLTUwNiw3ICs0NzEsNyBAQAogICAgIHJlcS5CYXNlID0gMDsKICAgICByZXEuU2l6ZSA9IDB4NDAwMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbG9jYWwtPnJtZW1faGFuZGxlKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPnJtZW1faGFuZGxlKSk7CiAgICAgbWVtLkNhcmRPZmZzZXQgPSAweDgwMDA7IG1lbS5QYWdlID0gMDsKICAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5ybWVtX2hhbmRsZSwgJm1lbSkpOwogICAgIGxvY2FsLT5ybWVtID0gaW9yZW1hcChyZXEuQmFzZSxyZXEuU2l6ZSk7CkBAIC01MTYsNyArNDgxLDcgQEAKICAgICByZXEuQmFzZSA9IDA7CiAgICAgcmVxLlNpemUgPSAweDEwMDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxvY2FsLT5hbWVtX2hhbmRsZSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5hbWVtX2hhbmRsZSkpOwogICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOyBtZW0uUGFnZSA9IDA7CiAgICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+YW1lbV9oYW5kbGUsICZtZW0pKTsKICAgICBsb2NhbC0+YW1lbSA9IGlvcmVtYXAocmVxLkJhc2UscmVxLlNpemUpOwpAQCAtNTI2LDMyICs0OTEsMzIgQEAKICAgICBERUJVRygzLCJyYXlfY29uZmlnIGFtZW09JXBcbiIsbG9jYWwtPmFtZW0pOwogICAgIGlmIChyYXlfaW5pdChkZXYpIDwgMCkgewogICAgICAgICByYXlfcmVsZWFzZShsaW5rKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICB9CiAKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogICAgIGkgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKICAgICBpZiAoaSAhPSAwKSB7CiAgICAgICAgIHByaW50aygicmF5X2NvbmZpZyByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwogICAgICAgICByYXlfcmVsZWFzZShsaW5rKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gaTsKICAgICB9CiAKICAgICBzdHJjcHkobG9jYWwtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7Ci0gICAgbGluay0+ZGV2ID0gJmxvY2FsLT5ub2RlOworICAgIGxpbmstPmRldl9ub2RlID0gJmxvY2FsLT5ub2RlOwogCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmF5TGluaywgaXJxICVkLCBod19hZGRyICIsCiAgICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSk7CiAgICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykKICAgICBwcmludGsoIiUwMlglcyIsIGRldi0+ZGV2X2FkZHJbaV0sICgoaTw1KSA/ICI6IiA6ICJcbiIpKTsKIAotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogICAgIHJheV9yZWxlYXNlKGxpbmspOworICAgIHJldHVybiAtRU5PREVWOwogfSAvKiByYXlfY29uZmlnICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNjcyBfX2lvbWVtICpjY3NfYmFzZShyYXlfZGV2X3QgKmRldikKQEAgLTU3OCw5ICs1NDMsOSBAQAogICAgIFVDSEFSICpwOwogICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKICAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRldi0+cHJpdjsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAgICAgREVCVUcoMSwgInJheV9pbml0KDB4JXApXG4iLCBkZXYpOwotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygwLCJyYXlfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC02NDAsMTAgKzYwNSwxMCBAQAogICAgIGludCBjY3NpbmRleDsKICAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRldi0+cHJpdjsKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCiAgICAgREVCVUcoMSwiZGxfc3RhcnR1cF9wYXJhbXMgZW50ZXJlZFxuIik7Ci0gICAgaWYgKCEobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC03NDcsOSArNzEyLDkgQEAKICAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7CiAgICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgbG9jYWwtPmRsX3BhcmFtX2NjczsKICAgICBVQ0hBUiBzdGF0dXM7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyB2ZXJpZnlfZGxfc3RhcnR1cCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03ODcsOCArNzUyLDggQEAKICAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7CiAgICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwogICAgIGludCBjY3NpbmRleDsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyBzdGFydF9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODE0LDkgKzc3OSw5IEBACiAKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CiAgICAgaW50IGNjc2luZGV4OwotICAgIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKICAgICAKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2NzIGpvaW5fbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg0MCw3ICs4MDUsNyBAQAogICAgIGRldmljZSwgYW5kIHJlbGVhc2UgdGhlIFBDTUNJQSBjb25maWd1cmF0aW9uLiAgSWYgdGhlIGRldmljZSBpcwogICAgIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHJheV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OyAKICAgICByYXlfZGV2X3QgKmxvY2FsID0gZGV2LT5wcml2OwpAQCAtODQ5LDU2ICs4MTQsMzggQEAKICAgICBERUJVRygxLCAicmF5X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCiAgICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwogCiAgICAgaW91bm1hcChsb2NhbC0+c3JhbSk7CiAgICAgaW91bm1hcChsb2NhbC0+cm1lbSk7CiAgICAgaW91bm1hcChsb2NhbC0+YW1lbSk7CiAgICAgLyogRG8gYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLSAgICBpZiAoIGkgIT0gQ1NfU1VDQ0VTUyApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobGluay0+d2luKSByZXQgPSAleFxuIixpKTsKICAgICBpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5hbWVtX2hhbmRsZSk7CiAgICAgaWYgKCBpICE9IENTX1NVQ0NFU1MgKSBERUJVRygwLCJSZWxlYXNlV2luZG93KGxvY2FsLT5hbWVtKSByZXQgPSAleFxuIixpKTsKICAgICBpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5ybWVtX2hhbmRsZSk7CiAgICAgaWYgKCBpICE9IENTX1NVQ0NFU1MgKSBERUJVRygwLCJSZWxlYXNlV2luZG93KGxvY2FsLT5ybWVtKSByZXQgPSAleFxuIixpKTsKLSAgICBpID0gcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIGlmICggaSAhPSBDU19TVUNDRVNTICkgREVCVUcoMCwiUmVsZWFzZUNvbmZpZ3VyYXRpb24gcmV0ID0gJXhcbiIsaSk7Ci0gICAgaSA9IHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIGlmICggaSAhPSBDU19TVUNDRVNTICkgREVCVUcoMCwiUmVsZWFzZUlSUSByZXQgPSAleFxuIixpKTsKKyAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAKICAgICBERUJVRygyLCJyYXlfcmVsZWFzZSBlbmRpbmdcbiIpOwogfQogCi1zdGF0aWMgaW50IHJheV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgcmF5X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLSAgICAgICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAobGluay0+b3BlbikKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgICAgIH0KLQorCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYXlfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgcmF5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLSAgICAgICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZiAobGluay0+b3BlbikgewotCQkJcmF5X3Jlc2V0KGRldik7Ci0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCX0KLSAgICAgICAgfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCXJheV9yZXNldChkZXYpOworCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC05MTAsMTAgKzg1NywxMCBAQAogICAgIGludCBpOwogI2VuZGlmCS8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLwogICAgIHJheV9kZXZfdCAqbG9jYWwgPSBkZXYtPnByaXY7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCiAgICAgREVCVUcoMSwicmF5X2Rldl9pbml0KGRldj0lcClcbiIsZGV2KTsKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2Rldl9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTk0NCwxMCArODkxLDEwIEBACiBzdGF0aWMgaW50IHJheV9kZXZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKQogewogICAgIHJheV9kZXZfdCAqbG9jYWwgPSBkZXYtPnByaXY7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogICAgIC8qIER1bW15IHJvdXRpbmUgdG8gc2F0aXNmeSBkZXZpY2Ugc3RydWN0dXJlICovCiAgICAgREVCVUcoMSwicmF5X2Rldl9jb25maWcoZGV2PSVwLGlmbWFwPSVwKVxuIixkZXYsbWFwKTsKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2Rldl9jb25maWcgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtOTU4LDEwICs5MDUsMTAgQEAKIHN0YXRpYyBpbnQgcmF5X2Rldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgcmF5X2Rldl90ICpsb2NhbCA9IGRldi0+cHJpdjsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAgICAgc2hvcnQgbGVuZ3RoID0gc2tiLT5sZW47CiAKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2Rldl9zdGFydF94bWl0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTE1NzAsNyArMTUxNyw3IEBACiBzdGF0aWMgaXdfc3RhdHMgKiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQogewogICByYXlfZGV2X3QgKglsb2NhbCA9IChyYXlfZGV2X3QgKikgZGV2LT5wcml2OwotICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogICBzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOwogCiAgIGlmKGxvY2FsID09IChyYXlfZGV2X3QgKikgTlVMTCkKQEAgLTE1ODgsNyArMTUzNSw3IEBACiAgICAgfQogI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwogCi0gIGlmKChsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICBpZihwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKICAgICBsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSByZWFkYigmcC0+cnhub2lzZSk7CiAgICAgbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gNDsKICAgfQpAQCAtMTY1NywxOCArMTYwNCwxNCBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkZXYtPnByaXY7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisgICAgbGluayA9IGxvY2FsLT5maW5kZXI7CiAgICAgCiAgICAgREVCVUcoMSwgInJheV9vcGVuKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCi0gICAgZm9yIChsaW5rID0gZGV2X2xpc3Q7IGxpbms7IGxpbmsgPSBsaW5rLT5uZXh0KQotICAgICAgICBpZiAobGluay0+cHJpdiA9PSBkZXYpIGJyZWFrOwotICAgIGlmICghREVWX09LKGxpbmspKSB7Ci0gICAgICAgIHJldHVybiAtRU5PREVWOwotICAgIH0KLQotICAgIGlmIChsaW5rLT5vcGVuID09IDApIGxvY2FsLT5udW1fbXVsdGkgPSAwOworICAgIGlmIChsaW5rLT5vcGVuID09IDApCisJICAgIGxvY2FsLT5udW1fbXVsdGkgPSAwOwogICAgIGxpbmstPm9wZW4rKzsKIAogICAgIC8qIElmIHRoZSBjYXJkIGlzIG5vdCBzdGFydGVkLCB0aW1lIHRvIHN0YXJ0IGl0ICEgLSBKZWFuIElJICovCkBAIC0xNjk1LDE1ICsxNjM4LDEyIEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9kZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBkZXZfbGlua190ICpsaW5rOworICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGV2LT5wcml2OworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworICAgIGxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCiAgICAgREVCVUcoMSwgInJheV9kZXZfY2xvc2UoJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKLSAgICBmb3IgKGxpbmsgPSBkZXZfbGlzdDsgbGluazsgbGluayA9IGxpbmstPm5leHQpCi0gICAgICAgIGlmIChsaW5rLT5wcml2ID09IGRldikgYnJlYWs7Ci0gICAgaWYgKGxpbmsgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0KICAgICBsaW5rLT5vcGVuLS07CiAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC0xNzI1LDkgKzE2NjUsOSBAQAogc3RhdGljIGludCBpbnRlcnJ1cHRfZWNmKHJheV9kZXZfdCAqbG9jYWwsIGludCBjY3MpCiB7CiAgICAgaW50IGkgPSA1MDsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdF9lY2YgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMTc1Miw5ICsxNjkyLDkgQEAKIHsKICAgICBpbnQgaTsKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyBnZXRfZnJlZV90eF9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm4gRUNBUkRHT05FOwogICAgIH0KQEAgLTE3ODMsOSArMTcyMyw5IEBACiB7CiAgICAgaW50IGk7CiAgICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfY3MgZ2V0X2ZyZWVfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuIEVDQVJER09ORTsKICAgICB9CkBAIC0xODU4LDkgKzE3OTgsOSBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpyYXlfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkZXYtPnByaXY7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogICAgIHN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7Ci0gICAgaWYgKCEobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyBuZXRfZGV2aWNlX3N0YXRzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuICZsb2NhbC0+c3RhdHM7CiAgICAgfQpAQCAtMTg4OCwxMiArMTgyOCwxMiBAQAogc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9wYXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFVDSEFSIG9iamlkLCBVQ0hBUiAqdmFsdWUsIGludCBsZW4pCiB7CiAgICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkZXYtPnByaXY7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogICAgIGludCBjY3NpbmRleDsKICAgICBpbnQgaTsKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CiAKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X3VwZGF0ZV9wYXJtIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5MjUsMTAgKzE4NjUsMTAgQEAKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CiAgICAgaW50IGkgPSAwOwogICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGV2LT5wcml2OwotICAgIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKICAgICB2b2lkIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0U7CiAKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X3VwZGF0ZV9tdWx0aV9saXN0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIwMDUsNyArMTk0NSw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgcmF5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotICAgIGRldl9saW5rX3QgKmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAgICAgcmF5X2Rldl90ICpsb2NhbDsKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CiAgICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzOwpAQCAtMjAyMCw4ICsxOTYwLDggQEAKICAgICBERUJVRyg0LCJyYXlfY3M6IGludGVycnVwdCBmb3IgKmRldj0lcFxuIixkZXYpOwogCiAgICAgbG9jYWwgPSAocmF5X2Rldl90ICopZGV2LT5wcml2OwotICAgIGxpbmsgPSAoZGV2X2xpbmtfdCAqKWxvY2FsLT5maW5kZXI7Ci0gICAgaWYgKCAhIChsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSB8fCBsaW5rLT5zdGF0ZSAmIERFVl9TVVNQRU5EICkgeworICAgIGxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilsb2NhbC0+ZmluZGVyOworICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHQgZnJvbSBkZXZpY2Ugbm90IHByZXNlbnQgb3Igc3VzcGVuZGVkLlxuIik7CiAgICAgICAgIHJldHVybiBJUlFfTk9ORTsKICAgICB9CkBAIC0yNTQwLDkgKzI0ODAsOSBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogICAgIERFQlVHKDAsInJheV9jcyBTdGFydGluZyBhdXRoZW50aWNhdGlvbi5cbiIpOwotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfY3MgYXV0aGVudGljYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI2MDYsMTAgKzI1NDYsMTAgQEAKIHN0YXRpYyB2b2lkIGFzc29jaWF0ZShyYXlfZGV2X3QgKmxvY2FsKQogewogICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgaW50IGNjc2luZGV4OwotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfY3MgYXNzb2NpYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI2ODksMTQgKzI2MjksMTQgQEAKICAqIGVnIGlmY29uZmlnIAogICovCiAgICAgaW50IGk7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgIHJheV9kZXZfdCAqbG9jYWw7CiAgICAgVUNIQVIgKnA7CiAgICAgc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKnBmaDsKICAgICBVQ0hBUiBjWzMzXTsKIAotICAgIGxpbmsgPSBkZXZfbGlzdDsKKyAgICBsaW5rID0gdGhpc19kZXZpY2U7CiAgICAgaWYgKCFsaW5rKQogICAgIAlyZXR1cm4gMDsKICAgICBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OwpAQCAtMjg5OCw3ICsyODM4LDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAicmF5X2NzIiwKIAl9LAotCS5wcm9iZQkJPSByYXlfYXR0YWNoLAorCS5wcm9iZQkJPSByYXlfcHJvYmUsCiAJLnJlbW92ZQkJPSByYXlfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHJheV9pZHMsCiAJLnN1c3BlbmQJPSByYXlfc3VzcGVuZCwKQEAgLTI5NDAsNyArMjg4MCw2IEBACiAjZW5kaWYKIAogICAgIHBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7Ci0gICAgQlVHX09OKGRldl9saXN0ICE9IE5VTEwpOwogfSAvKiBleGl0X3JheV9jcyAqLwogCiBtb2R1bGVfaW5pdChpbml0X3JheV9jcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5oCmluZGV4IDQyNjYwZmUuLmJkNzNlYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5oCkBAIC0zMSw3ICszMSw3IEBACiAgICAgdm9pZCBfX2lvbWVtICpzcmFtOyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHNoYXJlZCBSQU0gICAgICovCiAgICAgdm9pZCBfX2lvbWVtICphbWVtOyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYXR0cmlidXRlIG1lbSB3aW5kb3cgICAgICAgICovCiAgICAgdm9pZCBfX2lvbWVtICpybWVtOyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gcmVjZWl2ZSBidWZmZXIgd2luZG93ICAgICAgICovCi0gICAgZGV2X2xpbmtfdCAqZmluZGVyOyAgICAgICAgICAgIC8qIHBvaW50ZXIgYmFjayB0byBkZXZfbGlua190IGZvciBjYXJkICAgICovCisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmZpbmRlcjsgICAgICAgICAgICAvKiBwb2ludGVyIGJhY2sgdG8gc3RydWN0IHBjbWNpYV9kZXZpY2UgZm9yIGNhcmQgICAgKi8KICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKICAgICBsb25nIHR4X2Njc19sb2NrOwogICAgIGxvbmcgY2NzX2xvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwppbmRleCA1ZmE2ZmJlLi5mN2I3N2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKQEAgLTYzLDcgKzYzLDcgQEAKIC8qIFBDTUNJQSBzcGVjaWZpYyBkZXZpY2UgaW5mb3JtYXRpb24gKGdvZXMgaW4gdGhlIGNhcmQgZmllbGQgb2YKICAqIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKi8KIHN0cnVjdCBvcmlub2NvX3BjY2FyZCB7Ci0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiB9OwogCkBAIC03MSw4ICs3MSw4IEBACiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzCQkJCQkJICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHNwZWN0cnVtX2NzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIHNwZWN0cnVtX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IHNwZWN0cnVtX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBzcGVjdHJ1bV9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRmlybXdhcmUgZG93bmxvYWRlcgkJCQkJCSAgICAqLwpAQCAtMjM4LDE0ICsyMzgsMTQgQEAKICAqIElmIElETEUgaXMgMSwgc3RvcCB0aGUgZmlybXdhcmUsIHNvIHRoYXQgaXQgY2FuIGJlIHNhZmVseSByZXdyaXR0ZW4uCiAgKi8KIHN0YXRpYyBpbnQKLXNwZWN0cnVtX3Jlc2V0KGRldl9saW5rX3QgKmxpbmssIGludCBpZGxlKQorc3BlY3RydW1fcmVzZXQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBpZGxlKQogewogCWludCBsYXN0X3JldCwgbGFzdF9mbjsKIAljb25mX3JlZ190IHJlZzsKIAl1X2ludCBzYXZlX2NvcjsKIAogCS8qIERvaW5nIGl0IGlmIGhhcmR3YXJlIGlzIGdvbmUgaXMgZ3VhcmFudGVlZCBjcmFzaCAqLwotCWlmICghKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykpCisJaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBTYXZlIG9yaWdpbmFsIENPUiB2YWx1ZSAqLwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1JFQUQ7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAJQ1NfQ0hFQ0soQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLAotCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZykpOworCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpKTsKIAlzYXZlX2NvciA9IHJlZy5WYWx1ZTsKIAogCS8qIFNvZnQtUmVzZXQgY2FyZCAqLwpAQCAtMjYxLDE0ICsyNjEsMTQgQEAKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKIAlyZWcuVmFsdWUgPSAoc2F2ZV9jb3IgfCBDT1JfU09GVF9SRVNFVCk7CiAJQ1NfQ0hFQ0soQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLAotCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZykpOworCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpKTsKIAl1ZGVsYXkoMTAwMCk7CiAKIAkvKiBSZWFkIENDU1IgKi8KIAlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NDU1I7CiAJQ1NfQ0hFQ0soQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLAotCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZykpOworCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpKTsKIAogCS8qCiAJICogU3RhcnQgb3Igc3RvcCB0aGUgZmlybXdhcmUuICBNZW1vcnkgd2lkdGggYml0IHNob3VsZCBiZQpAQCAtMjc4LDcgKzI3OCw3IEBACiAJcmVnLk9mZnNldCA9IENJU1JFR19DQ1NSOwogCXJlZy5WYWx1ZSA9IChpZGxlID8gSENSX0lETEUgOiBIQ1JfUlVOKSB8IChyZWcuVmFsdWUgJiBIQ1JfTUVNMTYpOwogCUNTX0NIRUNLKEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwKLQkJIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLT5oYW5kbGUsICZyZWcpKTsKKwkJIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSk7CiAJdWRlbGF5KDEwMDApOwogCiAJLyogUmVzdG9yZSBvcmlnaW5hbCBDT1IgY29uZmlndXJhdGlvbiBpbmRleCAqLwpAQCAtMjg2LDEyICsyODYsMTIgQEAKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKIAlyZWcuVmFsdWUgPSAoc2F2ZV9jb3IgJiB+Q09SX1NPRlRfUkVTRVQpOwogCUNTX0NIRUNLKEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwKLQkJIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLT5oYW5kbGUsICZyZWcpKTsKKwkJIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSk7CiAJdWRlbGF5KDEwMDApOwogCXJldHVybiAwOwogCiAgICAgICBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC00NDEsNyArNDQxLDcgQEAKICAqIGNhcmUgb2YgdGhlIFBEQSAtIHJlYWQgaXQgYW5kIHRoZW4gd3JpdGUgaXQgb24gdG9wIG9mIHRoZSBmaXJtd2FyZS4KICAqLwogc3RhdGljIGludAotc3BlY3RydW1fZGxfaW1hZ2UoaGVybWVzX3QgKmh3LCBkZXZfbGlua190ICpsaW5rLAorc3BlY3RydW1fZGxfaW1hZ2UoaGVybWVzX3QgKmh3LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywKIAkJICBjb25zdCB1bnNpZ25lZCBjaGFyICppbWFnZSkKIHsKIAlpbnQgcmV0OwpAQCAtNTA1LDE0ICs1MDUsMTMgQEAKICAqIHJlc2V0IG9uIHRoZSBjYXJkLCB0byBtYWtlIHN1cmUgaXQncyBpbiBhIHNhbmUgc3RhdGUuCiAgKi8KIHN0YXRpYyBpbnQKLXNwZWN0cnVtX2RsX2Zpcm13YXJlKGhlcm1lc190ICpodywgZGV2X2xpbmtfdCAqbGluaykKK3NwZWN0cnVtX2RsX2Zpcm13YXJlKGhlcm1lc190ICpodywgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJaW50IHJldDsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHByaW1hcnlfZndfbmFtZSwKLQkJCSAgICAgJmhhbmRsZV90b19kZXYoaGFuZGxlKSkgPT0gMCkgeworCQkJICAgICAmaGFuZGxlX3RvX2RldihsaW5rKSkgPT0gMCkgewogCQlwcmltc3ltID0gZndfZW50cnktPmRhdGE7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLApAQCAtNTIxLDcgKzUyMCw3IEBACiAJfQogCiAJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBzZWNvbmRhcnlfZndfbmFtZSwKLQkJCSAgICAgJmhhbmRsZV90b19kZXYoaGFuZGxlKSkgPT0gMCkgeworCQkJICAgICAmaGFuZGxlX3RvX2RldihsaW5rKSkgPT0gMCkgewogCQlzZWNzeW0gPSBmd19lbnRyeS0+ZGF0YTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCkBAIC01NTQsMTIgKzU1MywxMiBAQAogc3BlY3RydW1fY3NfaGFyZF9yZXNldChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQogewogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7Ci0JZGV2X2xpbmtfdCAqbGluayA9ICZjYXJkLT5saW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gY2FyZC0+cF9kZXY7CiAJaW50IGVycjsKIAogCWlmICghaGVybWVzX3ByZXNlbnQoJnByaXYtPmh3KSkgewogCQkvKiBUaGUgZmlybXdhcmUgbmVlZHMgdG8gYmUgcmVsb2FkZWQgKi8KLQkJaWYgKHNwZWN0cnVtX2RsX2Zpcm13YXJlKCZwcml2LT5odywgJmNhcmQtPmxpbmspICE9IDApIHsKKwkJaWYgKHNwZWN0cnVtX2RsX2Zpcm13YXJlKCZwcml2LT5odywgbGluaykgIT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iKTsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCX0KQEAgLTU4NCwxMiArNTgzLDExIEBACiAgKiBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYSBjYXJkCiAgKiBpbnNlcnRpb24gZXZlbnQuICAqLwogc3RhdGljIGludAotc3BlY3RydW1fY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3NwZWN0cnVtX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQ7Ci0JZGV2X2xpbmtfdCAqbGluazsKIAogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgc3BlY3RydW1fY3NfaGFyZF9yZXNldCk7CiAJaWYgKCEgZGV2KQpAQCAtNTk4LDcgKzU5Niw3IEBACiAJY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAkvKiBMaW5rIGJvdGggc3RydWN0dXJlcyB0b2dldGhlciAqLwotCWxpbmsgPSAmY2FyZC0+bGluazsKKwljYXJkLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGRldjsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwpAQCAtNjE1LDEzICs2MTMsNyBAQAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0Jc3BlY3RydW1fY3NfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNwZWN0cnVtX2NzX2NvbmZpZyhsaW5rKTsKIH0JCQkJLyogc3BlY3RydW1fY3NfYXR0YWNoICovCiAKIC8qCkBAIC02MzAsMTYgKzYyMiwxNCBAQAogICogYXJlIGZyZWVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RydWN0dXJlcyB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlIGRldmljZQogICogaXMgcmVsZWFzZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHNwZWN0cnVtX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBzcGVjdHJ1bV9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlzcGVjdHJ1bV9jc19yZWxlYXNlKGxpbmspOworCXNwZWN0cnVtX2NzX3JlbGVhc2UobGluayk7CiAKLQlERUJVRygwLCBQRlggImRldGFjaDogbGluaz0lcCBsaW5rLT5kZXY9JXBcbiIsIGxpbmssIGxpbmstPmRldik7Ci0JaWYgKGxpbmstPmRldikgeworCURFQlVHKDAsIFBGWCAiZGV0YWNoOiBsaW5rPSVwIGxpbmstPmRldl9ub2RlPSVwXG4iLCBsaW5rLCBsaW5rLT5kZXZfbm9kZSk7CisJaWYgKGxpbmstPmRldl9ub2RlKSB7CiAJCURFQlVHKDAsIFBGWCAiQWJvdXQgdG8gdW5yZWdpc3RlciBuZXQgZGV2aWNlICVwXG4iLAogCQkgICAgICBkZXYpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwpAQCAtNjUzLDExICs2NDMsMTAgQEAKICAqIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KICAqLwogCi1zdGF0aWMgdm9pZAotc3BlY3RydW1fY3NfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50CitzcGVjdHJ1bV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKQEAgLTY2OSw3ICs2NTgsNyBAQAogCWNpc3BhcnNlX3QgcGFyc2U7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKLQlDU19DSEVDSyhWYWxpZGF0ZUNJUywgcGNtY2lhX3ZhbGlkYXRlX2NpcyhoYW5kbGUsICZpbmZvKSk7CisJQ1NfQ0hFQ0soVmFsaWRhdGVDSVMsIHBjbWNpYV92YWxpZGF0ZV9jaXMobGluaywgJmluZm8pKTsKIAogCS8qCiAJICogVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cwpAQCAtNjgwLDE5ICs2NjksMTUgQEAKIAl0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KIAkvKiBMb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwogCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLAotCQkgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotCWxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7CisJCSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwogCiAJLyoKIAkgKiBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZQpAQCAtNzA5LDEzICs2OTQsMTMgQEAKIAkgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAJICovCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJd2hpbGUgKDEpIHsKIAkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKIAkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAuaW5kZXggPSAwIH07CiAKLQkJaWYgKCAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwKQotCQkgICAgfHwgKHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSAwKSkKKwkJaWYgKCAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCkKKwkJICAgIHx8IChwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApKQogCQkJZ290byBuZXh0X2VudHJ5OwogCiAJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKQEAgLTc0NywxMCArNzMyLDEwIEBACiAJCX0KIAogCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorCQkJbGluay0+Y29uZi5WcHAgPQogCQkJICAgIGNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKIAkJZWxzZSBpZiAoZGZsdC52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorCQkJbGluay0+Y29uZi5WcHAgPQogCQkJICAgIGRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKIAkJCiAJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwpAQCAtNzgwLDcgKzc2NSw3IEBACiAJCQl9CiAKIAkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pICE9IDApCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJfQogCkBAIC03OTAsOSArNzc1LDggQEAKIAkJYnJlYWs7CiAJCQogCW5leHRfZW50cnk6Ci0JCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKTsKKwkJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwogCQlpZiAobGFzdF9yZXQgID09IENTX05PX01PUkVfSVRFTVMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIkdldE5leHRUdXBsZSgpOiBObyBtYXRjaGluZyAiCiAJCQkgICAgICAgIkNJUyBjb25maWd1cmF0aW9uLiAgTWF5YmUgeW91IG5lZWQgdGhlICIKQEAgLTgwNiw3ICs3OTAsNyBAQAogCSAqIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YKIAkgKiB0aGUgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KIAkgKi8KLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAogCS8qIFdlIGluaXRpYWxpemUgdGhlIGhlcm1lcyBzdHJ1Y3R1cmUgYmVmb3JlIGNvbXBsZXRpbmcgUENNQ0lBCiAJICogY29uZmlndXJhdGlvbiBqdXN0IGluIGNhc2UgdGhlIGludGVycnVwdCBoYW5kbGVyIGdldHMKQEAgLTgyMyw3ICs4MDcsNyBAQAogCSAqIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJICovCiAJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCi0JCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCS8qIE9rLCB3ZSBoYXZlIHRoZSBjb25maWd1cmF0aW9uLCBwcmVwYXJlIHRvIHJlZ2lzdGVyIHRoZSBuZXRkZXYgKi8KIAlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKQEAgLTgzNiw3ICs4MjAsNyBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAKLQlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCS8qIFRlbGwgdGhlIHN0YWNrIHdlIGV4aXN0ICovCiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKQEAgLTg0NCwyMCArODI4LDE4IEBACiAJfQogCiAJLyogQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWRzIHRvIGJlCi0JICogaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2LiAqLworCSAqIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldl9ub2RlLiAqLwogCXN0cmNweShjYXJkLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOwotCWxpbmstPmRldiA9ICZjYXJkLT5ub2RlOyAvKiBsaW5rLT5kZXYgYmVpbmcgbm9uLU5VTEwgaXMgYWxzbworCWxpbmstPmRldl9ub2RlID0gJmNhcmQtPm5vZGU7IC8qIGxpbmstPmRldl9ub2RlIGJlaW5nIG5vbi1OVUxMIGlzIGFsc28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CiAKIAkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbmRleCAweCUwMng6IFZjYyAlZC4lZCIsCi0JICAgICAgIGRldi0+bmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCwKLQkgICAgICAgbGluay0+Y29uZi5WY2MgLyAxMCwgbGluay0+Y29uZi5WY2MgJSAxMCk7Ci0JaWYgKGxpbmstPmNvbmYuVnBwMSkKLQkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwMSAvIDEwLAotCQkgICAgICAgbGluay0+Y29uZi5WcHAxICUgMTApOworCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5kZXggMHglMDJ4OiAiLAorCSAgICAgICBkZXYtPm5hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLlZwcCkKKwkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwIC8gMTAsCisJCSAgICAgICBsaW5rLT5jb25mLlZwcCAlIDEwKTsKIAlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAlpZiAobGluay0+aW8uTnVtUG9ydHMxKQogCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKQEAgLTg2NywxMyArODQ5LDE0IEBACiAJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKIAlwcmludGsoIlxuIik7CiAKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCiAgZmFpbGVkOgogCXNwZWN0cnVtX2NzX3JlbGVhc2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CQkJCS8qIHNwZWN0cnVtX2NzX2NvbmZpZyAqLwogCiAvKgpAQCAtODgyLDcgKzg2NSw3IEBACiAgKiBzdGlsbCBvcGVuLCB0aGlzIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KICAqLwogc3RhdGljIHZvaWQKLXNwZWN0cnVtX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3NwZWN0cnVtX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC04OTQsNjQgKzg3Nyw0NiBAQAogCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSkKLQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCWlmIChwcml2LT5ody5pb2Jhc2UpCiAJCWlvcG9ydF91bm1hcChwcml2LT5ody5pb2Jhc2UpOwogfQkJCQkvKiBzcGVjdHJ1bV9jc19yZWxlYXNlICovCiAKIAogc3RhdGljIGludAotc3BlY3RydW1fY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzcGVjdHJ1bV9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKIAkvKiBNYXJrIHRoZSBkZXZpY2UgYXMgc3RvcHBlZCwgdG8gYmxvY2sgSU8gdW50aWwgbGF0ZXIgKi8KLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCQllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGRvd25pbmcgaW50ZXJmYWNlXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBkb3duaW5nIGludGVyZmFjZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKIAotCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CisJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLXNwZWN0cnVtX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzcGVjdHJ1bV9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQkvKiBGSVhNRTogc2hvdWxkIHdlIGRvdWJsZSBjaGVjayB0aGF0IHRoaXMgaXMKLQkJICogdGhlIHNhbWUgY2FyZCBhcyB3ZSBoYWQgYmVmb3JlICovCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0JfQorCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwlwcml2LT5od191bmF2YWlsYWJsZS0tOworCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk3OSw3ICs5NDQsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9IERSSVZFUl9OQU1FLAogCX0sCi0JLnByb2JlCQk9IHNwZWN0cnVtX2NzX2F0dGFjaCwKKwkucHJvYmUJCT0gc3BlY3RydW1fY3NfcHJvYmUsCiAJLnJlbW92ZQkJPSBzcGVjdHJ1bV9jc19kZXRhY2gsCiAJLnN1c3BlbmQJPSBzcGVjdHJ1bV9jc19zdXNwZW5kLAogCS5yZXN1bWUJCT0gc3BlY3RydW1fY3NfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCmluZGV4IGZmMTkyZTkuLmRhZGU0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKQEAgLTQzMDYsNyArNDMwNiw3IEBACiAgKiBJbnNlcnRpb24gb2YgdGhlIG1vZHVsZQogICogSSdtIG5vdyBxdWl0ZSBwcm91ZCBvZiB0aGUgbXVsdGktZGV2aWNlIHN1cHBvcnQuCiAgKi8KLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCWludCByZXQgPSAtRUlPOwkJLyogUmV0dXJuIGVycm9yIGlmIG5vIGNhcmRzIGZvdW5kICovCiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKaW5kZXggOTgxMjJmMy4uZjc3MjRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwpAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIHd2XzgyNTkzX3JlY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQogewogICBuZXRfbG9jYWwgKgkJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICBkZXZfbGlua190ICoJCWxpbmsgPSBscC0+bGluazsKKyAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKgkJbGluayA9IGxwLT5saW5rOwogICB1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogICAvKiBBcm0gdGhlIGZsYWcsIHdpbGwgYmUgY2xlYXJkIGluIHd2XzgyNTkzX2NvbmZpZygpICovCkBAIC0zNzQ0LDE2ICszNzQ0LDE2IEBACiB7CiAgIGludAkJaTsKICAgY29uZl9yZWdfdAlyZWcgPSB7IDAsIENTX1JFQUQsIENJU1JFR19DT1IsIDAgfTsKLSAgZGV2X2xpbmtfdCAqCWxpbmsgPSAoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5saW5rOworICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqCWxpbmsgPSAoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5saW5rOwogCiAjaWZkZWYgREVCVUdfQ09ORklHX1RSQUNFCiAgIHByaW50ayhLRVJOX0RFQlVHICIlczogLT53dl9wY21jaWFfcmVzZXQoKVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogCi0gIGkgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKyAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKICAgaWYoaSAhPSBDU19TVUNDRVNTKQogICAgIHsKLSAgICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKKyAgICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgaSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogICAgICAgCkBAIC0zNzY0LDE5ICszNzY0LDE5IEBACiAKICAgcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogICByZWcuVmFsdWUgPSByZWcuVmFsdWUgfCBDT1JfU1dfUkVTRVQ7Ci0gIGkgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKyAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKICAgaWYoaSAhPSBDU19TVUNDRVNTKQogICAgIHsKLSAgICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKKyAgICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgaSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogICAgICAgCiAgIHJlZy5BY3Rpb24gPSBDU19XUklURTsKICAgcmVnLlZhbHVlID0gQ09SX0xFVkVMX0lSUSB8IENPUl9DT05GSUc7Ci0gIGkgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKyAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKICAgaWYoaSAhPSBDU19TVUNDRVNTKQogICAgIHsKLSAgICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKKyAgICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgaSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCkBAIC0zOTQwLDkgKzM5NDAsOCBAQAogICogKGNhbGxlZCBieSB3YXZlbGFuX2V2ZW50KCkpCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci13dl9wY21jaWFfY29uZmlnKGRldl9saW5rX3QgKglsaW5rKQord3ZfcGNtY2lhX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqCWxpbmspCiB7Ci0gIGNsaWVudF9oYW5kbGVfdAloYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgIHR1cGxlX3QJCXR1cGxlOwogICBjaXNwYXJzZV90CQlwYXJzZTsKICAgc3RydWN0IG5ldF9kZXZpY2UgKglkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgbGluay0+cHJpdjsKQEAgLTM5NjUsMTYgKzM5NjQsMTYgQEAKICAgICB7CiAgICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKICAgICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gICAgICBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSk7CisgICAgICBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwogICAgICAgaWYoaSAhPSBDU19TVUNDRVNTKQogCWJyZWFrOwogICAgICAgdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKICAgICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwogICAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICAgICAgaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSk7CisgICAgICBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CiAgICAgICBpZihpICE9IENTX1NVQ0NFU1MpCiAJYnJlYWs7Ci0gICAgICBpID0gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworICAgICAgaSA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAgICAgICBpZihpICE9IENTX1NVQ0NFU1MpCiAJYnJlYWs7CiAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKQEAgLTM5ODMsMTkgKzM5ODIsMTYgQEAKICAgd2hpbGUoMCk7CiAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKICAgICB7Ci0gICAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFBhcnNlVHVwbGUsIGkpOwotICAgICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKyAgICAgIGNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIGkpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgICAKLSAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKKwogICBkbwogICAgIHsKLSAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKIAl7Ci0JICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCSAgYnJlYWs7CiAJfQogCkBAIC00MDAzLDEwICszOTk5LDEwIEBACiAgICAgICAgKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAogICAgICAgICogYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgogICAgICAgICovCi0gICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwogICAgICAgaWYoaSAhPSBDU19TVUNDRVNTKQogCXsKLQkgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElSUSwgaSk7CisJICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkgIGJyZWFrOwogCX0KIApAQCAtNDAxNSwxNSArNDAxMSwxNSBAQAogICAgICAgICogdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcuCiAgICAgICAgKi8KICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwotICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CisgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAgICAgICBpZihpICE9IENTX1NVQ0NFU1MpCiAJewotCSAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CisJICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJICBicmVhazsKIAl9CiAKICAgICAgIC8qCi0gICAgICAgKiBBbGxvY2F0ZSBhIHNtYWxsIG1lbW9yeSB3aW5kb3cuICBOb3RlIHRoYXQgdGhlIGRldl9saW5rX3QKKyAgICAgICAqIEFsbG9jYXRlIGEgc21hbGwgbWVtb3J5IHdpbmRvdy4gIE5vdGUgdGhhdCB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAgICAgICAqIHN0cnVjdHVyZSBwcm92aWRlcyBzcGFjZSBmb3Igb25lIHdpbmRvdyBoYW5kbGUgLS0gaWYgeW91cgogICAgICAgICogZGV2aWNlIG5lZWRzIHNldmVyYWwgd2luZG93cywgeW91J2xsIG5lZWQgdG8ga2VlcCB0cmFjayBvZgogICAgICAgICogdGhlIGhhbmRsZXMgaW4geW91ciBwcml2YXRlIGRhdGEgc3RydWN0dXJlLCBsaW5rLT5wcml2LgpAQCAtNDAzMSwxMCArNDAyNywxMCBAQAogICAgICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84fFdJTl9NRU1PUllfVFlQRV9BTXxXSU5fRU5BQkxFOwogICAgICAgcmVxLkJhc2UgPSByZXEuU2l6ZSA9IDA7CiAgICAgICByZXEuQWNjZXNzU3BlZWQgPSBtZW1fc3BlZWQ7Ci0gICAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pOworICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7CiAgICAgICBpZihpICE9IENTX1NVQ0NFU1MpCiAJewotCSAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0V2luZG93LCBpKTsKKwkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RXaW5kb3csIGkpOwogCSAgYnJlYWs7CiAJfQogCkBAIC00MDQ2LDcgKzQwNDIsNyBAQAogICAgICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKTsKICAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKIAl7Ci0JICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIE1hcE1lbVBhZ2UsIGkpOworCSAgY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgaSk7CiAJICBicmVhazsKIAl9CiAKQEAgLTQwNjAsNyArNDA1Niw3IEBACiAJICAgICBscC0+bWVtLCBkZXYtPmlycSwgKHVfaW50KSBkZXYtPmJhc2VfYWRkcik7CiAjZW5kaWYKIAotICAgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihoYW5kbGUpKTsKKyAgICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogICAgICAgaSA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogICAgICAgaWYoaSAhPSAwKQogCXsKQEAgLTQwNzIsNyArNDA2OCw2IEBACiAgICAgfQogICB3aGlsZSgwKTsJCS8qIEh1bW0uLi4gRGlzZ3Vpc2VkIGdvdG8gISEhICovCiAKLSAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKICAgLyogSWYgYW55IHN0ZXAgZmFpbGVkLCByZWxlYXNlIGFueSBwYXJ0aWFsbHkgY29uZmlndXJlZCBzdGF0ZSAqLwogICBpZihpICE9IDApCiAgICAgewpAQCAtNDA4MSw3ICs0MDc2LDcgQEAKICAgICB9CiAKICAgc3RyY3B5KCgobmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldikpLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOwotICBsaW5rLT5kZXYgPSAmKChuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KSktPm5vZGU7CisgIGxpbmstPmRldl9ub2RlID0gJigobmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldikpLT5ub2RlOwogCiAjaWZkZWYgREVCVUdfQ09ORklHX1RSQUNFCiAgIHByaW50ayhLRVJOX0RFQlVHICI8LXd2X3BjbWNpYV9jb25maWcoKVxuIik7CkBAIC00MDk2LDI2ICs0MDkxLDIwIEBACiAgKiBzdGlsbCBvcGVuLCB0aGlzIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KICAqLwogc3RhdGljIHZvaWQKLXd2X3BjbWNpYV9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCit3dl9wY21jaWFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgc3RydWN0IG5ldF9kZXZpY2UgKglkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgbGluay0+cHJpdjsKLSAgbmV0X2xvY2FsICoJCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBsaW5rLT5wcml2OworCW5ldF9sb2NhbCAqCQlscCA9IG5ldGRldl9wcml2KGRldik7CiAKICNpZmRlZiBERUJVR19DT05GSUdfVFJBQ0UKLSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAtPiB3dl9wY21jaWFfcmVsZWFzZSgweCVwKVxuIiwgZGV2LT5uYW1lLCBsaW5rKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IC0+IHd2X3BjbWNpYV9yZWxlYXNlKDB4JXApXG4iLCBkZXYtPm5hbWUsIGxpbmspOwogI2VuZGlmCiAKLSAgLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICBpb3VubWFwKGxwLT5tZW0pOwotICBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLSAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCi0gIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCWlvdW5tYXAobHAtPm1lbSk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCiAjaWZkZWYgREVCVUdfQ09ORklHX1RSQUNFCi0gIHByaW50ayhLRVJOX0RFQlVHICIlczogPC0gd3ZfcGNtY2lhX3JlbGVhc2UoKVxuIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IDwtIHd2X3BjbWNpYV9yZWxlYXNlKClcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIH0KIApAQCAtNDQ3OSw3ICs0NDY4LDcgQEAKIHdhdmVsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqCWRldikKIHsKICAgbmV0X2xvY2FsICoJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICBkZXZfbGlua190ICoJbGluayA9IGxwLT5saW5rOworICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqCWxpbmsgPSBscC0+bGluazsKICAga2lvX2FkZHJfdAliYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAKICNpZmRlZiBERUJVR19DQUxMQkFDS19UUkFDRQpAQCAtNDUzMyw3ICs0NTIyLDcgQEAKIHN0YXRpYyBpbnQKIHdhdmVsYW5fY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpCiB7Ci0gIGRldl9saW5rX3QgKglsaW5rID0gKChuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+bGluazsKKyAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKglsaW5rID0gKChuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+bGluazsKICAga2lvX2FkZHJfdAliYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAKICNpZmRlZiBERUJVR19DQUxMQkFDS19UUkFDRQpAQCAtNDU4Nyw0NSArNDU3NiwzNiBAQAogICogY2FyZCBpbnNlcnRpb24gZXZlbnQuCiAgKi8KIHN0YXRpYyBpbnQKLXdhdmVsYW5fYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3dhdmVsYW5fcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotICBkZXZfbGlua190ICoJbGluazsJCS8qIEluZm8gZm9yIGNhcmRtZ3IgKi8KICAgc3RydWN0IG5ldF9kZXZpY2UgKglkZXY7CQkvKiBJbnRlcmZhY2UgZ2VuZXJpYyBkYXRhICovCiAgIG5ldF9sb2NhbCAqCWxwOwkJLyogSW50ZXJmYWNlIHNwZWNpZmljIGRhdGEgKi8KKyAgaW50IHJldDsKIAogI2lmZGVmIERFQlVHX0NBTExCQUNLX1RSQUNFCiAgIHByaW50ayhLRVJOX0RFQlVHICItPiB3YXZlbGFuX2F0dGFjaCgpXG4iKTsKICNlbmRpZgogCi0gIC8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCi0gIGxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwotICBpZiAoIWxpbmspIHJldHVybiAtRU5PTUVNOwotCiAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotICBsaW5rLT5pby5OdW1Qb3J0czEgPSA4OwotICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDM7CisgIHBfZGV2LT5pby5OdW1Qb3J0czEgPSA4OworICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgcF9kZXYtPmlvLklPQWRkckxpbmVzID0gMzsKIAogICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLSAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0gIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgbGluay0+aXJxLkhhbmRsZXIgPSB3YXZlbGFuX2ludGVycnVwdDsKKyAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworICBwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworICBwX2Rldi0+aXJxLkhhbmRsZXIgPSB3YXZlbGFuX2ludGVycnVwdDsKIAogICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCi0gIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgbGluay0+Y29uZi5WY2MgPSA1MDsKLSAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87Ci0KLSAgLyogQ2hhaW4gZHJpdmVycyAqLwotICBsaW5rLT5uZXh0ID0gTlVMTDsKKyAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKyAgcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCiAgIC8qIEFsbG9jYXRlIHRoZSBnZW5lcmljIGRhdGEgc3RydWN0dXJlICovCiAgIGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihuZXRfbG9jYWwpKTsKLSAgaWYgKCFkZXYpIHsKLSAgICAgIGtmcmVlKGxpbmspOworICBpZiAoIWRldikKICAgICAgIHJldHVybiAtRU5PTUVNOwotICB9Ci0gIGxpbmstPnByaXYgPSBsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CisKKyAgcF9kZXYtPnByaXYgPSBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwogCiAgIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNDY0Miw3ICs0NjIyLDYgQEAKICAgc3Bpbl9sb2NrX2luaXQoJmxwLT5zcGlubG9jayk7CiAKICAgLyogYmFjayBsaW5rcyAqLwotICBscC0+bGluayA9IGxpbms7CiAgIGxwLT5kZXYgPSBkZXY7CiAKICAgLyogd2F2ZWxhbiBORVQzIGNhbGxiYWNrcyAqLwpAQCAtNDY2OCwxNSArNDY0NywxOCBAQAogICAvKiBPdGhlciBzcGVjaWZpYyBkYXRhICovCiAgIGRldi0+bXR1ID0gV0FWRUxBTl9NVFU7CiAKLSAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7CisgIHJldCA9IHd2X3BjbWNpYV9jb25maWcocF9kZXYpOworICBpZiAocmV0KQorCSAgcmV0dXJuIHJldDsKIAotICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgaWYod3ZfcGNtY2lhX2NvbmZpZyhsaW5rKSAmJgotICAgICB3dl9od19jb25maWcoZGV2KSkKLQkgIHd2X2luaXRfaW5mbyhkZXYpOwotICBlbHNlCisgIHJldCA9IHd2X2h3X2NvbmZpZyhkZXYpOworICBpZiAocmV0KSB7CiAJICBkZXYtPmlycSA9IDA7CisJICBwY21jaWFfZGlzYWJsZV9kZXZpY2UocF9kZXYpOworCSAgcmV0dXJuIHJldDsKKyAgfQorCisgIHd2X2luaXRfaW5mbyhkZXYpOwogCiAjaWZkZWYgREVCVUdfQ0FMTEJBQ0tfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIjwtIHdhdmVsYW5fYXR0YWNoKClcbiIpOwpAQCAtNDY5MywyNSArNDY3NSwxNCBAQAogICogaXMgcmVsZWFzZWQuCiAgKi8KIHN0YXRpYyB2b2lkCi13YXZlbGFuX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCit3YXZlbGFuX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotCiAjaWZkZWYgREVCVUdfQ0FMTEJBQ0tfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIi0+IHdhdmVsYW5fZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKICNlbmRpZgogCi0gIC8qCi0gICAqIElmIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZSwgd2Ugd29uJ3QKLSAgICogYWN0dWFsbHkgZGVsZXRlIGl0IHlldC4gIEluc3RlYWQsIGl0IGlzIG1hcmtlZCBzbyB0aGF0IHdoZW4gdGhlCi0gICAqIHJlbGVhc2UoKSBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoYXQgd2lsbCB0cmlnZ2VyIGEgcHJvcGVyCi0gICAqIGRldGFjaCgpLgotICAgKi8KLSAgaWYobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotICAgIHsKLSAgICAgIC8qIFNvbWUgb3RoZXJzIGhhdmVuJ3QgZG9uZSB0aGVpciBqb2IgOiBnaXZlIHRoZW0gYW5vdGhlciBjaGFuY2UgKi8KLSAgICAgIHd2X3BjbWNpYV9yZWxlYXNlKGxpbmspOwotICAgIH0KKyAgLyogU29tZSBvdGhlcnMgaGF2ZW4ndCBkb25lIHRoZWlyIGpvYiA6IGdpdmUgdGhlbSBhbm90aGVyIGNoYW5jZSAqLworICB3dl9wY21jaWFfcmVsZWFzZShsaW5rKTsKIAogICAvKiBGcmVlIHBpZWNlcyAqLwogICBpZihsaW5rLT5wcml2KQpAQCAtNDcyMCwyMyArNDY5MSwyMSBAQAogCiAgICAgICAvKiBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGtlcm5lbCBsaXN0IG9mIGV0aGVybmV0IGRldmljZXMgKi8KICAgICAgIC8qIFdhcm5pbmcgOiBjYW4ndCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQsIHRpbWVyIG9yIHdhdmVsYW5fY2xvc2UoKSAqLwotICAgICAgaWYgKGxpbmstPmRldikKKyAgICAgIGlmIChsaW5rLT5kZXZfbm9kZSkKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotICAgICAgbGluay0+ZGV2ID0gTlVMTDsKKyAgICAgIGxpbmstPmRldl9ub2RlID0gTlVMTDsKICAgICAgICgobmV0X2xvY2FsICopbmV0ZGV2X3ByaXYoZGV2KSktPmxpbmsgPSBOVUxMOwogICAgICAgKChuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+ZGV2ID0gTlVMTDsKICAgICAgIGZyZWVfbmV0ZGV2KGRldik7CiAgICAgfQotICBrZnJlZShsaW5rKTsKIAogI2lmZGVmIERFQlVHX0NBTExCQUNLX1RSQUNFCiAgIHByaW50ayhLRVJOX0RFQlVHICI8LSB3YXZlbGFuX2RldGFjaCgpXG4iKTsKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IHdhdmVsYW5fc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHdhdmVsYW5fc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBsaW5rLT5wcml2OwogCiAJLyogTkI6IHdhdmVsYW5fY2xvc2Ugd2lsbCBiZSBjYWxsZWQsIGJ1dCB0b28gbGF0ZSwgc28gd2UgYXJlCkBAIC00NzQ4LDM2ICs0NzE3LDIyIEBACiAJLyogU3RvcCByZWNlaXZpbmcgbmV3IG1lc3NhZ2VzIGFuZCB3YWl0IGVuZCBvZiB0cmFuc21pc3Npb24gKi8KIAl3dl9ydV9zdG9wKGRldik7CiAKKwlpZiAobGluay0+b3BlbikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCiAJLyogUG93ZXIgZG93biB0aGUgbW9kdWxlICovCiAJaGFjcl93cml0ZShkZXYtPmJhc2VfYWRkciwgSEFDUl9ERUZBVUxUICYgKH5IQUNSX1BXUl9TVEFUKSk7CiAKLQkvKiBUaGUgY2FyZCBpcyBub3cgc3VzcGVuZGVkICovCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0KLSAgICAJaWYobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCXsKLQkJaWYobGluay0+b3BlbikKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdhdmVsYW5fcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgd2F2ZWxhbl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKglkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZihsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZihsaW5rLT5vcGVuKQkvKiBJZiBSRVNFVCAtPiBUcnVlLCBJZiBSRVNVTUUgLT4gRmFsc2UgPyAqLwotCQl7Ci0JCQl3dl9od19yZXNldChkZXYpOwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9CisJaWYgKGxpbmstPm9wZW4pIHsKKwkJd3ZfaHdfcmVzZXQoZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDc5OCw3ICs0NzUzLDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAid2F2ZWxhbl9jcyIsCiAJfSwKLQkucHJvYmUJCT0gd2F2ZWxhbl9hdHRhY2gsCisJLnByb2JlCQk9IHdhdmVsYW5fcHJvYmUsCiAJLnJlbW92ZQkJPSB3YXZlbGFuX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSB3YXZlbGFuX2lkcywKIAkuc3VzcGVuZAk9IHdhdmVsYW5fc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKaW5kZXggNDUxZjYyNy4uYzY1ZmU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKQEAgLTYwMiw3ICs2MDIsNyBAQAogICBkZXZfbm9kZV90IAlub2RlOwkJLyogPz8/PyBXaGF0IGlzIHRoaXMgc3R1ZmYgPz8/PyAqLwogICBzdHJ1Y3QgbmV0X2RldmljZSAqCWRldjsJCS8qIFJldmVyc2UgbGluay4uLiAqLwogICBzcGlubG9ja190CXNwaW5sb2NrOwkvKiBTZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSAoU01QKSAqLwotICBkZXZfbGlua190ICoJbGluazsJCS8qIHBjbWNpYSBzdHJ1Y3R1cmUgKi8KKyAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKglsaW5rOwkJLyogcGNtY2lhIHN0cnVjdHVyZSAqLwogICBlbl9zdGF0cwlzdGF0czsJCS8qIEV0aGVybmV0IGludGVyZmFjZSBzdGF0aXN0aWNzICovCiAgIGludAkJbnJlc2V0czsJLyogTnVtYmVyIG9mIGh3IHJlc2V0cyAqLwogICB1X2NoYXIJY29uZmlndXJlZDsJLyogSWYgaXQgaXMgY29uZmlndXJlZCAqLwpAQCAtNzMzLDkgKzczMyw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIAl3dl9od19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogU2FtZSwgKyBzdGFydCByZWNlaXZlciB1bml0ICovCiBzdGF0aWMgaW5saW5lIGludAotCXd2X3BjbWNpYV9jb25maWcoZGV2X2xpbmtfdCAqKTsJLyogQ29uZmlndXJlIHRoZSBwY21jaWEgaW50ZXJmYWNlICovCisJd3ZfcGNtY2lhX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsJLyogQ29uZmlndXJlIHRoZSBwY21jaWEgaW50ZXJmYWNlICovCiBzdGF0aWMgdm9pZAotCXd2X3BjbWNpYV9yZWxlYXNlKGRldl9saW5rX3QgKik7LyogUmVtb3ZlIGEgZGV2aWNlICovCisJd3ZfcGNtY2lhX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7LyogUmVtb3ZlIGEgZGV2aWNlICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElOVEVSUlVQVCBIQU5ETElORyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgaXJxcmV0dXJuX3QKIAl3YXZlbGFuX2ludGVycnVwdChpbnQsCS8qIEludGVycnVwdCBoYW5kbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCmluZGV4IDQzMDNjNTAuLjY1Y2ViMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCkBAIC02MTEsNSArNjExLDYgQEAKIAlzdHJ1Y3QgaXdfc3B5X2RhdGEJCXNweV9kYXRhOwogCXN0cnVjdCBpd19wdWJsaWNfZGF0YQkJd2lyZWxlc3NfZGF0YTsKIAlzdHJ1Y3QgZGV2X25vZGVfdAkJbm9kZTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkJKnBfZGV2OwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYwppbmRleCA0OGUxMGIwLi5lNTJhNjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAgKiByZWxlYXNlIGEgc29ja2V0LCBpbiByZXNwb25zZSB0byBjYXJkIGluc2VydGlvbiBhbmQgZWplY3Rpb24gZXZlbnRzLiAgVGhleQogICogYXJlIGludm9rZWQgZnJvbSB0aGUgd2wyNCBldmVudCBoYW5kbGVyLgogICovCi1zdGF0aWMgdm9pZCB3bDM1MDFfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgd2wzNTAxX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IHdsMzUwMV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgd2wzNTAxX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiAvKgogICogVGhlIGRldl9pbmZvIHZhcmlhYmxlIGlzIHRoZSAia2V5IiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgdGhpcwpAQCAtMjI2LDE3ICsyMjYsNiBAQAogCWl3X3NldF9tZ210X2luZm9fZWxlbWVudChmcm9tLT5pZCwgdG8sIGZyb20tPmRhdGEsIGZyb20tPmxlbik7CiB9CiAKLS8qCi0gKiBBIGxpbmtlZCBsaXN0IG9mICJpbnN0YW5jZXMiIG9mIHRoZSB3bDI0IGRldmljZS4gIEVhY2ggYWN0dWFsIFBDTUNJQSBjYXJkCi0gKiBjb3JyZXNwb25kcyB0byBvbmUgZGV2aWNlIGluc3RhbmNlLCBhbmQgaXMgZGVzY3JpYmVkIGJ5IG9uZSBkZXZfbGlua190Ci0gKiBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCi0gKgotICogWW91IG1heSBub3Qgd2FudCB0byB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhpcyAtLSBmb3IgZXhhbXBsZSwgdGhlIG1lbW9yeQotICogY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBkZXZfbGlua190IHBvaW50ZXJzLCB3aGVyZSBtaW5vciBkZXZpY2UgbnVtYmVycwotICogYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGluZGV4LgotICovCi1zdGF0aWMgZGV2X2xpbmtfdCAqd2wzNTAxX2Rldl9saXN0OwotCiBzdGF0aWMgaW5saW5lIHZvaWQgd2wzNTAxX3N3aXRjaF9wYWdlKHN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcywgdTggcGFnZSkKIHsKIAl3bDM1MDFfb3V0YihwYWdlLCB0aGlzLT5iYXNlX2FkZHIgKyBXTDM1MDFfTklDX0JTUyk7CkBAIC0xMjgxLDE1ICsxMjcwLDEwIEBACiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gZGV2LT5wcml2OwogCWludCByYyA9IC1FTk9ERVY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlkZXZfbGlua190ICpsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWxpbmsgPSB0aGlzLT5wX2RldjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGlzLT5sb2NrLCBmbGFncyk7Ci0JLyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBpbiB3bDM1MDFfZGV2X2xpc3QgKi8KLQlmb3IgKGxpbmsgPSB3bDM1MDFfZGV2X2xpc3Q7IGxpbms7IGxpbmsgPSBsaW5rLT5uZXh0KQotCQlpZiAobGluay0+cHJpdiA9PSBkZXYpCi0JCQlicmVhazsKLQlpZiAoIWxpbmspCi0JCWdvdG8gb3V0OwogCWxpbmstPm9wZW4tLTsKIAogCS8qIFN0b3Agd2wzNTAxX2hhcmRfc3RhcnRfeG1pdCgpIGZyb20gbm93IG9uICovCkBAIC0xMzAxLDcgKzEyODUsNiBAQAogCiAJcmMgPSAwOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBXTDM1MDEgY2xvc2VkXG4iLCBkZXYtPm5hbWUpOwotb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNDAwLDE0ICsxMzgzLDExIEBACiAJaW50IHJjID0gLUVOT0RFVjsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBkZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlkZXZfbGlua190ICpsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWxpbmsgPSB0aGlzLT5wX2RldjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGlzLT5sb2NrLCBmbGFncyk7Ci0JLyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBpbiB3bDM1MDFfZGV2X2xpc3QgKi8KLQlmb3IgKGxpbmsgPSB3bDM1MDFfZGV2X2xpc3Q7IGxpbms7IGxpbmsgPSBsaW5rLT5uZXh0KQotCQlpZiAobGluay0+cHJpdiA9PSBkZXYpCi0JCQlicmVhazsKLQlpZiAoIURFVl9PSyhsaW5rKSkKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAkJZ290byBvdXQ7CiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCWxpbmstPm9wZW4rKzsKQEAgLTE0OTcsMzggKzE0NzcsMjMgQEAKICAqIFNlcnZpY2VzLiBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBhcmUgZnJlZWQuCiAgKiBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgogICovCi1zdGF0aWMgdm9pZCB3bDM1MDFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHdsMzUwMV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0JZGV2X2xpbmtfdCAqKmxpbmtwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JLyogTG9jYXRlIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlmb3IgKGxpbmtwID0gJndsMzUwMV9kZXZfbGlzdDsgKmxpbmtwOyBsaW5rcCA9ICYoKmxpbmtwKS0+bmV4dCkKLQkJaWYgKCpsaW5rcCA9PSBsaW5rKQotCQkJYnJlYWs7Ci0JaWYgKCEqbGlua3ApCi0JCWdvdG8gb3V0OwotCiAJLyogSWYgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgY29uZmlndXJlZCBhbmQgYWN0aXZlLCB3ZSB3b24ndCBhY3R1YWxseQogCSAqIGRlbGV0ZSBpdCB5ZXQuICBJbnN0ZWFkLCBpdCBpcyBtYXJrZWQgc28gdGhhdCB3aGVuIHRoZSByZWxlYXNlKCkKIAkgKiBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoYXQgd2lsbCB0cmlnZ2VyIGEgcHJvcGVyIGRldGFjaCgpLiAqLwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQl3aGlsZSAobGluay0+b3BlbiA+IDApCi0JCQl3bDM1MDFfY2xvc2UoZGV2KTsKKwl3aGlsZSAobGluay0+b3BlbiA+IDApCisJCXdsMzUwMV9jbG9zZShkZXYpOwogCi0JCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJd2wzNTAxX3JlbGVhc2UobGluayk7Ci0JfQotCi0JLyogVW5saW5rIGRldmljZSBzdHJ1Y3R1cmUsIGZyZWUgcGllY2VzICovCi0JKmxpbmtwID0gbGluay0+bmV4dDsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJd2wzNTAxX3JlbGVhc2UobGluayk7CiAKIAlpZiAobGluay0+cHJpdikKIAkJZnJlZV9uZXRkZXYobGluay0+cHJpdik7Ci0Ja2ZyZWUobGluayk7Ci1vdXQ6CisKIAlyZXR1cm47CiB9CiAKQEAgLTE5NTMsMzMgKzE5MTgsMjYgQEAKICAqIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSBjb25maWd1cmUgdGhlCiAgKiBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEgY2FyZCBpbnNlcnRpb24gZXZlbnQuCiAgKi8KLXN0YXRpYyBpbnQgd2wzNTAxX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHdsMzUwMV9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0JZGV2X2xpbmtfdCAqbGluazsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpczsKIAotCS8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCi0JbGluayA9IGt6YWxsb2Moc2l6ZW9mKCpsaW5rKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsaW5rKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCS8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotCWxpbmstPmlvLk51bVBvcnRzMQk9IDE2OwotCWxpbmstPmlvLkF0dHJpYnV0ZXMxCT0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uSU9BZGRyTGluZXMJPSA1OworCXBfZGV2LT5pby5OdW1Qb3J0czEJPSAxNjsKKwlwX2Rldi0+aW8uQXR0cmlidXRlczEJPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlwX2Rldi0+aW8uSU9BZGRyTGluZXMJPSA1OwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMJPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0JbGluay0+aXJxLklSUUluZm8xCT0gSVJRX0xFVkVMX0lEOwotCWxpbmstPmlycS5IYW5kbGVyID0gd2wzNTAxX2ludGVycnVwdDsKKwlwX2Rldi0+aXJxLkF0dHJpYnV0ZXMJPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJcF9kZXYtPmlycS5JUlFJbmZvMQk9IElSUV9MRVZFTF9JRDsKKwlwX2Rldi0+aXJxLkhhbmRsZXIgPSB3bDM1MDFfaW50ZXJydXB0OwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwotCWxpbmstPmNvbmYuQXR0cmlidXRlcwk9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYwkJPSA1MDsKLQlsaW5rLT5jb25mLkludFR5cGUJPSBJTlRfTUVNT1JZX0FORF9JTzsKLQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4CT0gMTsKLQlsaW5rLT5jb25mLlByZXNlbnQJPSBQUkVTRU5UX09QVElPTjsKKwlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzCT0gQ09ORl9FTkFCTEVfSVJROworCXBfZGV2LT5jb25mLkludFR5cGUJPSBJTlRfTUVNT1JZX0FORF9JTzsKKwlwX2Rldi0+Y29uZi5Db25maWdJbmRleAk9IDE7CisJcF9kZXYtPmNvbmYuUHJlc2VudAk9IFBSRVNFTlRfT1BUSU9OOwogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB3bDM1MDFfY2FyZCkpOwogCWlmICghZGV2KQpAQCAtMTk5MiwyMiArMTk1MCwxNSBAQAogCWRldi0+Z2V0X3N0YXRzCQk9IHdsMzUwMV9nZXRfc3RhdHM7CiAJdGhpcyA9IGRldi0+cHJpdjsKIAl0aGlzLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnRoaXMtPnNweV9kYXRhOworCXRoaXMtPnBfZGV2ID0gcF9kZXY7CiAJZGV2LT53aXJlbGVzc19kYXRhCT0gJnRoaXMtPndpcmVsZXNzX2RhdGE7CiAJZGV2LT53aXJlbGVzc19oYW5kbGVycwk9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmd2wzNTAxX2hhbmRsZXJfZGVmOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQlsaW5rLT5wcml2ID0gbGluay0+aXJxLkluc3RhbmNlID0gZGV2OworCXBfZGV2LT5wcml2ID0gcF9kZXYtPmlycS5JbnN0YW5jZSA9IGRldjsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQl3bDM1MDFfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHdsMzUwMV9jb25maWcocF9kZXYpOwogb3V0X2xpbms6Ci0Ja2ZyZWUobGluayk7Ci0JbGluayA9IE5VTEw7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTIwMjIsMTEgKzE5NzMsMTAgQEAKICAqIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZSBldGhlcm5ldCBkZXZpY2UKICAqIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogICovCi1zdGF0aWMgdm9pZCB3bDM1MDFfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHdsMzUwMV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJdHVwbGVfdCB0dXBsZTsKIAljaXNwYXJzZV90IHBhcnNlOwotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJaW50IGkgPSAwLCBqLCBsYXN0X2ZuLCBsYXN0X3JldDsKIAl1bnNpZ25lZCBjaGFyIGJmWzY0XTsKQEAgLTIwMzUsMTggKzE5ODUsMTUgQEAKIAkvKiBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZyByZWdpc3RlcnMuICovCiAJdHVwbGUuQXR0cmlidXRlcwk9IDA7CiAJdHVwbGUuRGVzaXJlZFR1cGxlCT0gQ0lTVFBMX0NPTkZJRzsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl0dXBsZS5UdXBsZURhdGEJCT0gYmY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4CT0gc2l6ZW9mKGJmKTsKIAl0dXBsZS5UdXBsZU9mZnNldAk9IDA7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZQk9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudAk9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogCS8qIFRyeSBhbGxvY2F0aW5nIElPIHBvcnRzLiAgVGhpcyB0cmllcyBhIGZldyBmaXhlZCBhZGRyZXNzZXMuICBJZiB5b3UKIAkgKiB3YW50LCB5b3UgY2FuIGFsc28gcmVhZCB0aGUgY2FyZCdzIGNvbmZpZyB0YWJsZSB0byBwaWNrIGFkZHJlc3NlcyAtLQogCSAqIHNlZSB0aGUgc2VyaWFsIGRyaXZlciBmb3IgYW4gZXhhbXBsZS4gKi8KQEAgLTIwNTYsMjggKzIwMDMsMjggQEAKIAkJICogMHgyMDAtMHgyZmYsIGFuZCBzbyBvbiwgYmVjYXVzZSB0aGlzIHNlZW1zIHNhZmVyICovCiAJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGo7CiAJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGxpbmstPmlvLkJhc2VQb3J0MSArIDB4MTA7Ci0JCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJYnJlYWs7CiAJfQogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5CiAJICogYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LiAqLwogCi0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAKIAkvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cCB0aGUgSS9PCiAJICogd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLiAgKi8KIAotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAJZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihoYW5kbGUpKTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJ3bDM1MDFfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbGVkOwpAQCAtMjA4OCwxMCArMjAzNSw5IEBACiAJdGhpcyA9IGRldi0+cHJpdjsKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYW5kCi0JICogYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICogYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4KIAkgKi8KLQlsaW5rLT5kZXYgPSAmdGhpcy0+bm9kZTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworCWxpbmstPmRldl9ub2RlID0gJnRoaXMtPm5vZGU7CiAKIAl0aGlzLT5iYXNlX2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIApAQCAtMjEyNywxMyArMjA3MywxMyBAQAogCXNwaW5fbG9ja19pbml0KCZ0aGlzLT5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0aGlzLT53YWl0KTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCWdvdG8gb3V0OworCXJldHVybiAwOworCiBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogCXdsMzUwMV9yZWxlYXNlKGxpbmspOwotb3V0OgotCXJldHVybjsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogLyoqCkBAIC0yMTQ0LDUyICsyMDkwLDM2IEBACiAgKiBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIG9wZW4sIHRoaXMKICAqIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KICAqLwotc3RhdGljIHZvaWQgd2wzNTAxX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHdsMzUwMV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCiAJLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLQlpZiAobGluay0+ZGV2KSB7CisJaWYgKGxpbmstPmRldl9ub2RlKQogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlsaW5rLT5kZXYgPSBOVUxMOwotCX0KIAotCS8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCB3bDM1MDFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHdsMzUwMV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0KIAl3bDM1MDFfcHdyX21nbXQoZGV2LT5wcml2LCBXTDM1MDFfU1VTUEVORCk7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAobGluay0+b3BlbikKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCX0KKwlpZiAobGluay0+b3BlbikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2wzNTAxX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHdsMzUwMV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKIAl3bDM1MDFfcHdyX21nbXQoZGV2LT5wcml2LCBXTDM1MDFfUkVTVU1FKTsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQl3bDM1MDFfcmVzZXQoZGV2KTsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCXdsMzUwMV9yZXNldChkZXYpOworCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMjA3LDcgKzIxMzcsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJ3bDM1MDFfY3MiLAogCX0sCi0JLnByb2JlCQk9IHdsMzUwMV9hdHRhY2gsCisJLnByb2JlCQk9IHdsMzUwMV9wcm9iZSwKIAkucmVtb3ZlCQk9IHdsMzUwMV9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gd2wzNTAxX2lkcywKIAkuc3VzcGVuZAk9IHdsMzUwMV9zdXNwZW5kLApAQCAtMjIyMSw5ICsyMTUxLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHdsMzUwMV9leGl0X21vZHVsZSh2b2lkKQogewotCWRwcmludGsoMCwgIjogdW5sb2FkaW5nIik7CiAJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bDM1MDFfZHJpdmVyKTsKLQlCVUdfT04od2wzNTAxX2Rldl9saXN0ICE9IE5VTEwpOwogfQogCiBtb2R1bGVfaW5pdCh3bDM1MDFfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCA3NWQ1NmJmLi5mZDBmNDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtMTQ0MSw4ICsxNDQxLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB5ZWxsb3dmaW5fcHJpdmF0ZSAqbnA7CiAKLQlpZiAoIWRldikKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYpOwogCW5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFNUQVRVU19UT1RBTF9TSVpFLCBucC0+dHhfc3RhdHVzLCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYyBiL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYwppbmRleCA0ZTUzYmU5Li5iYmVhYmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCkBAIC01MzUsNyArNTM1LDcgQEAKIHsKIAljaGFyICpvdXQgPSBidWY7CiAJc3RydWN0IHBkY3NwYXRoX2VudHJ5ICpwYXRoZW50cnk7Ci0JCisKIAlpZiAoIWVudHJ5IHx8ICFidWYpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYyBiL2RyaXZlcnMvcGFyaXNjL3NiYV9pb21tdS5jCmluZGV4IDQyYjMyZmYuLjI3OGYzMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL3NiYV9pb21tdS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3NiYV9pb21tdS5jCkBAIC0xNzgsNiArMTc4LDExIEBACiAjZGVmaW5lIFJPUEU2X0NUTAkweDIzMAogI2RlZmluZSBST1BFN19DVEwJMHgyMzgKIAorI2RlZmluZSBJT0NfUk9QRTBfQ0ZHCTB4NTAwCS8qIHBsdXRvIG9ubHkgKi8KKyNkZWZpbmUgICBJT0NfUk9QRV9BTwkgIDB4MTAJLyogQWxsb3cgIlJlbGF4ZWQgT3JkZXJpbmciICovCisKKworCiAjZGVmaW5lIEhGX0VOQUJMRQkweDQwCiAKIApAQCAtMTc1OSwxOSArMTc2NCwzMyBAQAogCiAJc2JhX2Rldi0+bnVtX2lvYyA9IG51bV9pb2M7CiAJZm9yIChpID0gMDsgaSA8IG51bV9pb2M7IGkrKykgewotCQkvKgotCQkqKiBNYWtlIHN1cmUgdGhlIGJveCBjcmFzaGVzIGlmIHdlIGdldCBhbnkgZXJyb3JzIG9uIGEgcm9wZS4KLQkJKi8KLQkJV1JJVEVfUkVHKEhGX0VOQUJMRSwgc2JhX2Rldi0+aW9jW2ldLmlvY19ocGEgKyBST1BFMF9DVEwpOwotCQlXUklURV9SRUcoSEZfRU5BQkxFLCBzYmFfZGV2LT5pb2NbaV0uaW9jX2hwYSArIFJPUEUxX0NUTCk7Ci0JCVdSSVRFX1JFRyhIRl9FTkFCTEUsIHNiYV9kZXYtPmlvY1tpXS5pb2NfaHBhICsgUk9QRTJfQ1RMKTsKLQkJV1JJVEVfUkVHKEhGX0VOQUJMRSwgc2JhX2Rldi0+aW9jW2ldLmlvY19ocGEgKyBST1BFM19DVEwpOwotCQlXUklURV9SRUcoSEZfRU5BQkxFLCBzYmFfZGV2LT5pb2NbaV0uaW9jX2hwYSArIFJPUEU0X0NUTCk7Ci0JCVdSSVRFX1JFRyhIRl9FTkFCTEUsIHNiYV9kZXYtPmlvY1tpXS5pb2NfaHBhICsgUk9QRTVfQ1RMKTsKLQkJV1JJVEVfUkVHKEhGX0VOQUJMRSwgc2JhX2Rldi0+aW9jW2ldLmlvY19ocGEgKyBST1BFNl9DVEwpOwotCQlXUklURV9SRUcoSEZfRU5BQkxFLCBzYmFfZGV2LT5pb2NbaV0uaW9jX2hwYSArIFJPUEU3X0NUTCk7CisJCXVuc2lnbmVkIGxvbmcgaW9jX2hwYSA9IHNiYV9kZXYtPmlvY1tpXS5pb2NfaHBhOworCQl1bnNpZ25lZCBpbnQgajsKIAotCQkvKiBmbHVzaCBvdXQgdGhlIHdyaXRlcyAqLworCQlmb3IgKGo9MDsgaiA8IHNpemVvZih1NjQpICogUk9QRVNfUEVSX0lPQzsgais9c2l6ZW9mKHU2NCkpIHsKKworCQkJLyoKKwkJCSAqIENsZWFyIFJPUEUoTilfQ09ORklHIEFPIGJpdC4KKwkJCSAqIERpc2FibGVzICJOVCBPcmRlcmluZyIgKH49ICEiUmVsYXhlZCBPcmRlcmluZyIpCisJCQkgKiBPdmVycmlkZXMgYml0IDEgaW4gRE1BIEhpbnQgU2V0cy4KKwkJCSAqIEltcHJvdmVzIG5ldHBlcmYgVURQX1NUUkVBTSBieSB+MTAlIGZvciBiY201NzAxLgorCQkJICovCisJCQlpZiAoSVNfUExVVE8oc2JhX2Rldi0+aW9kYykpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHJvcGVfY2ZnLCBjZmdfdmFsOworCisJCQkJcm9wZV9jZmcgPSBpb2NfaHBhICsgSU9DX1JPUEUwX0NGRyArIGo7CisJCQkJY2ZnX3ZhbCA9IFJFQURfUkVHKHJvcGVfY2ZnKTsKKwkJCQljZmdfdmFsICY9IH5JT0NfUk9QRV9BTzsKKwkJCQlXUklURV9SRUcoY2ZnX3ZhbCwgcm9wZV9jZmcpOworCQkJfQorCisJCQkvKgorCQkJKiogTWFrZSBzdXJlIHRoZSBib3ggY3Jhc2hlcyBvbiByb3BlIGVycm9ycy4KKwkJCSovCisJCQlXUklURV9SRUcoSEZfRU5BQkxFLCBpb2NfaHBhICsgUk9QRTBfQ1RMICsgaik7CisJCX0KKworCQkvKiBmbHVzaCBvdXQgdGhlIGxhc3Qgd3JpdGVzICovCiAJCVJFQURfUkVHKHNiYV9kZXYtPmlvY1tpXS5pb2NfaHBhICsgUk9QRTdfQ1RMKTsKIAogCQlEQkdfSU5JVCgiCWlvY1slZF0gUk9QRV9DRkcgMHglTHggIFJPUEVfREJHIDB4JUx4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jIGIvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCmluZGV4IDcxOWI4NjMuLjgyOGViNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYworKysgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2lvLT5saW9fcGRldjsKIAl1MTYgd29yZDsKIAotICAgICAgICBpZiAoc2lvLT5zdWNreWlvX2lycV9lbmFibGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCWlmIChzaW8tPnN1Y2t5aW9faXJxX2VuYWJsZWQpCiAJCXJldHVybjsKIAogCUJVR19PTighcGRldik7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAlyZXF1ZXN0X3JlZ2lvbiAoc2lvLT5hY3BpX2Jhc2UsIDB4MWYsICJhY3BpIik7CiAKIAkvKiBFbmFibGUgdGhlIGxlZ2FjeSBJL08gZnVuY3Rpb24gKi8KLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQgKHBkZXYsIFBDSV9DT01NQU5ELCAmd29yZCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQgKHBkZXYsIFBDSV9DT01NQU5ELCAmd29yZCk7CiAJd29yZCB8PSBQQ0lfQ09NTUFORF9TRVJSIHwgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfSU87CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkIChwZGV2LCBQQ0lfQ09NTUFORCwgd29yZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCmluZGV4IDE1OGQ5MjUuLmI5NTNkNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYwpAQCAtODEsMTUgKzgxLDE1IEBACiAjZGVmaW5lIEZPUkNFX0VQUF9NT0RFCTB4MDgKIAogdHlwZWRlZiBzdHJ1Y3QgcGFycG9ydF9pbmZvX3QgewotICAgIGRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGludAkJCW5kZXY7CiAgICAgZGV2X25vZGVfdAkJbm9kZTsKICAgICBzdHJ1Y3QgcGFycG9ydAkqcG9ydDsKIH0gcGFycG9ydF9pbmZvX3Q7CiAKIHN0YXRpYyB2b2lkIHBhcnBvcnRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci1zdGF0aWMgdm9pZCBwYXJwb3J0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIHBhcnBvcnRfY3NfcmVsZWFzZShkZXZfbGlua190ICopOworc3RhdGljIGludCBwYXJwb3J0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBwYXJwb3J0X2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC05OSwxMCArOTksOSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHBhcnBvcnRfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgcGFycG9ydF9pbmZvX3QgKmluZm87Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKIAogICAgIERFQlVHKDAsICJwYXJwb3J0X2F0dGFjaCgpXG4iKTsKIApAQCAtMTEwLDIzICsxMDksMTcgQEAKICAgICBpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWluZm8pIHJldHVybiAtRU5PTUVNOwogICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLSAgICBsaW5rID0gJmluZm8tPmxpbms7IGxpbmstPnByaXYgPSBpbmZvOworICAgIGxpbmstPnByaXYgPSBpbmZvOworICAgIGluZm8tPnBfZGV2ID0gbGluazsKIAogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKICAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgcGFycG9ydF9jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcGFycG9ydF9jb25maWcobGluayk7CiB9IC8qIHBhcnBvcnRfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTM4LDE0ICsxMzEsMTEgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHBhcnBvcnRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHBhcnBvcnRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotCiAgICAgREVCVUcoMCwgInBhcnBvcnRfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JcGFycG9ydF9jc19yZWxlYXNlKGxpbmspOworICAgIHBhcnBvcnRfY3NfcmVsZWFzZShsaW5rKTsKIAogICAgIGtmcmVlKGxpbmstPnByaXYpOwogfSAvKiBwYXJwb3J0X2RldGFjaCAqLwpAQCAtMTYxLDE0ICsxNTEsMTIgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotdm9pZCBwYXJwb3J0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBwYXJwb3J0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHBhcnBvcnRfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIHVfc2hvcnQgYnVmWzEyOF07CiAgICAgY2lzcGFyc2VfdCBwYXJzZTsKLSAgICBjb25maWdfaW5mb190IGNvbmY7CiAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJnBhcnNlLmNmdGFibGVfZW50cnk7CiAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CiAgICAgc3RydWN0IHBhcnBvcnQgKnA7CkBAIC0xODAsMjQgKzE2OCwxOCBAQAogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKLSAgICAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7CiAKLSAgICAvKiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHJpZ2h0Li4uIGxvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCi0gICAgQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKLSAgICAKICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB3aGlsZSAoMSkgewotCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDAgfHwKLQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApCisJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKKwkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCSAgICBnb3RvIG5leHRfZW50cnk7CiAKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewpAQCAtMjEyLDcgKzE5NCw3IEBACiAJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKIAkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CiAJICAgIH0KLQkgICAgaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCSAgICBpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQlnb3RvIG5leHRfZW50cnk7CiAJICAgIC8qIElmIHdlJ3ZlIGdvdCB0aGlzIGZhciwgd2UncmUgZG9uZSAqLwogCSAgICBicmVhazsKQEAgLTIyMCwxNSArMjAyLDEyIEBACiAJCiAgICAgbmV4dF9lbnRyeToKIAlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpIGRmbHQgPSAqY2ZnOwotCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgfQogICAgIAotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShoYW5kbGUsICZsaW5rLT5pcnEpKTsKLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsICZsaW5rLT5jb25mKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCi0gICAgcmVsZWFzZV9yZWdpb24obGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEpOwotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czIpCi0JcmVsZWFzZV9yZWdpb24obGluay0+aW8uQmFzZVBvcnQyLCBsaW5rLT5pby5OdW1Qb3J0czIpOwogICAgIHAgPSBwYXJwb3J0X3BjX3Byb2JlX3BvcnQobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5CYXNlUG9ydDIsCiAJCQkgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEsIFBBUlBPUlRfRE1BX05PTkUsCiAJCQkgICAgICBOVUxMKTsKQEAgLTI0NywxNyArMjI2LDE1IEBACiAgICAgaW5mby0+bm9kZS5taW5vciA9IHAtPm51bWJlcjsKICAgICBpbmZvLT5wb3J0ID0gcDsKICAgICBzdHJjcHkoaW5mby0+bm9kZS5kZXZfbmFtZSwgcC0+bmFtZSk7Ci0gICAgbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7CisgICAgbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgcmV0dXJuOwotICAgIAorICAgIHJldHVybiAwOworCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogICAgIHBhcnBvcnRfY3NfcmVsZWFzZShsaW5rKTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIHBhcnBvcnRfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjY4LDUzICsyNDUsMjEgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi12b2lkIHBhcnBvcnRfY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQordm9pZCBwYXJwb3J0X2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgcGFycG9ydF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotICAgIAotICAgIERFQlVHKDAsICJwYXJwb3J0X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCXBhcnBvcnRfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAotICAgIGlmIChpbmZvLT5uZGV2KSB7Ci0Jc3RydWN0IHBhcnBvcnQgKnAgPSBpbmZvLT5wb3J0OwotCXBhcnBvcnRfcGNfdW5yZWdpc3Rlcl9wb3J0KHApOwotCXJlcXVlc3RfcmVnaW9uKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uTnVtUG9ydHMxLAotCQkgICAgICAgaW5mby0+bm9kZS5kZXZfbmFtZSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkgICAgcmVxdWVzdF9yZWdpb24obGluay0+aW8uQmFzZVBvcnQyLCBsaW5rLT5pby5OdW1Qb3J0czIsCi0JCQkgICBpbmZvLT5ub2RlLmRldl9uYW1lKTsKLSAgICB9Ci0gICAgaW5mby0+bmRldiA9IDA7Ci0gICAgbGluay0+ZGV2ID0gTlVMTDsKLSAgICAKLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCURFQlVHKDAsICJwYXJwb3J0X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCisJaWYgKGluZm8tPm5kZXYpIHsKKwkJc3RydWN0IHBhcnBvcnQgKnAgPSBpbmZvLT5wb3J0OworCQlwYXJwb3J0X3BjX3VucmVnaXN0ZXJfcG9ydChwKTsKKwl9CisJaW5mby0+bmRldiA9IDA7CisKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9IC8qIHBhcnBvcnRfY3NfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50IHBhcnBvcnRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBhcnBvcnRfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChERVZfT0sobGluaykpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQlyZXR1cm4gMDsKLX0KIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHBhcnBvcnRfaWRzW10gPSB7CiAJUENNQ0lBX0RFVklDRV9GVU5DX0lEKDMpLApAQCAtMzI4LDExICsyNzMsOSBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJwYXJwb3J0X2NzIiwKIAl9LAotCS5wcm9iZQkJPSBwYXJwb3J0X2F0dGFjaCwKKwkucHJvYmUJCT0gcGFycG9ydF9wcm9iZSwKIAkucmVtb3ZlCQk9IHBhcnBvcnRfZGV0YWNoLAogCS5pZF90YWJsZQk9IHBhcnBvcnRfaWRzLAotCS5zdXNwZW5kCT0gcGFycG9ydF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcGFycG9ydF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BhcnBvcnRfY3Modm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCmluZGV4IGQ1ODkwMDIuLjQ4YmJmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwpAQCAtOTcsNyArOTcsNyBAQAogCWludCBpbzsKIAlpbnQgaXJxOwogCWludCBkbWE7Ci19IHN1cGVyaW9zW05SX1NVUEVSSU9TXSBfX2RldmluaXRkYXRhID0geyB7MCx9LH07Cit9IHN1cGVyaW9zW05SX1NVUEVSSU9TXSA9IHsgezAsfSx9OwogCiBzdGF0aWMgaW50IHVzZXJfc3BlY2lmaWVkOwogI2lmIGRlZmluZWQoQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTykgfHwgXApAQCAtMTU1Nyw3ICsxNTU3LDcgQEAKIAlyZXR1cm4gUEFSUE9SVF9ETUFfTk9ORTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZ2V0X3N1cGVyaW9faXJxIChzdHJ1Y3QgcGFycG9ydCAqcCkKK3N0YXRpYyBpbnQgZ2V0X3N1cGVyaW9faXJxIChzdHJ1Y3QgcGFycG9ydCAqcCkKIHsKIAlpbnQgaT0wOwogICAgICAgICB3aGlsZSggKHN1cGVyaW9zW2ldLmlvICE9IHAtPmJhc2UpICYmIChpPE5SX1NVUEVSSU9TKSkKQEAgLTE1NzksNyArMTU3OSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNoYWxsIGFsd2F5cyBiZSB0aGUgY2FzZSEpCiAgKgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X1NQUF9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQorc3RhdGljIGludCBwYXJwb3J0X1NQUF9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQogewogCXVuc2lnbmVkIGNoYXIgciwgdzsKIApAQCAtMTY2MCw3ICsxNjYwLDcgQEAKICAqIHR3byBiaXRzIG9mIEVDUiBhcmVuJ3Qgd3JpdGFibGUsIHNvIHdlIGNoZWNrIGJ5IHdyaXRpbmcgRUNSIGFuZAogICogcmVhZGluZyBpdCBiYWNrIHRvIHNlZSBpZiBpdCdzIHdoYXQgd2UgZXhwZWN0LgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X0VDUl9wcmVzZW50KHN0cnVjdCBwYXJwb3J0ICpwYikKK3N0YXRpYyBpbnQgcGFycG9ydF9FQ1JfcHJlc2VudChzdHJ1Y3QgcGFycG9ydCAqcGIpCiB7CiAJc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdiA9IHBiLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgY2hhciByID0gMHhjOwpAQCAtMTcxMiw3ICsxNzEyLDcgQEAKICAqIGJlIG1pc2RldGVjdGVkIGhlcmUgaXMgcmF0aGVyIGFjYWRlbWljLiAKICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X1BTMl9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQorc3RhdGljIGludCBwYXJwb3J0X1BTMl9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQogewogCWludCBvayA9IDA7CiAgIApAQCAtMTg2OCw3ICsxODY4LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X0VDUFBTMl9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQorc3RhdGljIGludCBwYXJwb3J0X0VDUFBTMl9zdXBwb3J0ZWQoc3RydWN0IHBhcnBvcnQgKnBiKQogewogCWNvbnN0IHN0cnVjdCBwYXJwb3J0X3BjX3ByaXZhdGUgKnByaXYgPSBwYi0+cHJpdmF0ZV9kYXRhOwogCWludCByZXN1bHQ7CkBAIC0xODg2LDcgKzE4ODYsNyBAQAogCiAvKiBFUFAgbW9kZSBkZXRlY3Rpb24gICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfRVBQX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCitzdGF0aWMgaW50IHBhcnBvcnRfRVBQX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCiB7CiAJY29uc3Qgc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdiA9IHBiLT5wcml2YXRlX2RhdGE7CiAKQEAgLTE5MzEsNyArMTkzMSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfRUNQRVBQX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCitzdGF0aWMgaW50IHBhcnBvcnRfRUNQRVBQX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCiB7CiAJc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdiA9IHBiLT5wcml2YXRlX2RhdGE7CiAJaW50IHJlc3VsdDsKQEAgLTIwNzMsNyArMjA3Myw3IEBACiAgKiBXaGVuIEVDUCBpcyBhdmFpbGFibGUgd2UgY2FuIGF1dG9wcm9iZSBmb3IgSVJRcy4KICAqIE5PVEU6IElmIHdlIGNhbiBhdXRvcHJvYmUgaXQsIHdlIGNhbiByZWdpc3RlciB0aGUgSVJRLgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X2lycV9wcm9iZShzdHJ1Y3QgcGFycG9ydCAqcGIpCitzdGF0aWMgaW50IHBhcnBvcnRfaXJxX3Byb2JlKHN0cnVjdCBwYXJwb3J0ICpwYikKIHsKIAlzdHJ1Y3QgcGFycG9ydF9wY19wcml2YXRlICpwcml2ID0gcGItPnByaXZhdGVfZGF0YTsKIApAQCAtMjc3OSw3ICsyNzc5LDcgQEAKIAkvKiBJZiBzZXQsIHRoaXMgaXMgY2FsbGVkIGFmdGVyIHByb2JpbmcgZm9yIHBvcnRzLiAgSWYgJ2ZhaWxlZCcKIAkgKiBpcyBub24temVybyB3ZSBjb3VsZG4ndCB1c2UgYW55IG9mIHRoZSBwb3J0cy4gKi8KIAl2b2lkICgqcG9zdGluaXRfaG9vaykgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZmFpbGVkKTsKLX0gY2FyZHNbXSBfX2RldmluaXRkYXRhID0geworfSBjYXJkc1tdID0gewogCS8qIHNpaWdfMXBfMTB4ICovCQl7IDEsIHsgeyAyLCAzIH0sIH0gfSwKIAkvKiBzaWlnXzJwXzEweCAqLwkJeyAyLCB7IHsgMiwgMyB9LCB7IDQsIDUgfSwgfSB9LAogCS8qIHNpaWdfMXBfMjB4ICovCQl7IDEsIHsgeyAwLCAxIH0sIH0gfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKaW5kZXggZDEyMTY0NC4uOThiODNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKQEAgLTEwMCw4ICsxMDAsNiBAQAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgbmV0bW9zXzl4eDVfY29tYm8gfSwKIAl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODM1LAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgbmV0bW9zXzl4eDVfY29tYm8gfSwKLQl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODM1LAotCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgbmV0bW9zXzl4eDVfY29tYm8gfSwKIAl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODQ1LAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgbmV0bW9zXzl4eDVfY29tYm8gfSwKIAl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODU1LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCmluZGV4IDZlNzlmNTYuLjYzODAwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKQEAgLTM2MCw5ICszNjAsNiBAQAogCXdoaWxlICgoZG4gPSBvZl9maW5kX25vZGVfYnlfdHlwZShkbiwgInBjaSIpKSkKIAkJcnBhcGhwX2FkZF9zbG90KGRuKTsKIAotCWlmICghbnVtX3Nsb3RzKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IGE3N2U3OWMuLjk4NTVjNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC01MDQsNiArNTA0LDIwMSBAQAogCQlucl9yZXNlcnZlZF92ZWN0b3JzKys7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK2ludCBwY2lfc2F2ZV9tc2lfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcG9zLCBpID0gMDsKKwl1MTYgY29udHJvbDsKKwlzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTsKKwl1MzIgKmNhcDsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CisJaWYgKHBvcyA8PSAwIHx8IGRldi0+bm9fbXNpKQorCQlyZXR1cm4gMDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksICZjb250cm9sKTsKKwlpZiAoIShjb250cm9sICYgUENJX01TSV9GTEFHU19FTkFCTEUpKQorCQlyZXR1cm4gMDsKKworCXNhdmVfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSkgKyBzaXplb2YodTMyKSAqIDUsCisJCUdGUF9LRVJORUwpOworCWlmICghc2F2ZV9zdGF0ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIk91dCBvZiBtZW1vcnkgaW4gcGNpX3NhdmVfbXNpX3N0YXRlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNhcCA9ICZzYXZlX3N0YXRlLT5kYXRhWzBdOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmY2FwW2krK10pOworCWNvbnRyb2wgPSBjYXBbMF0gPj4gMTY7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9BRERSRVNTX0xPLCAmY2FwW2krK10pOworCWlmIChjb250cm9sICYgUENJX01TSV9GTEFHU182NEJJVCkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfSEksICZjYXBbaSsrXSk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfREFUQV82NCwgJmNhcFtpKytdKTsKKwl9IGVsc2UKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9EQVRBXzMyLCAmY2FwW2krK10pOworCWlmIChjb250cm9sICYgUENJX01TSV9GTEFHU19NQVNLQklUKQorCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX01BU0tfQklULCAmY2FwW2krK10pOworCWRpc2FibGVfbXNpX21vZGUoZGV2LCBwb3MsIFBDSV9DQVBfSURfTVNJKTsKKwlzYXZlX3N0YXRlLT5jYXBfbnIgPSBQQ0lfQ0FQX0lEX01TSTsKKwlwY2lfYWRkX3NhdmVkX2NhcChkZXYsIHNhdmVfc3RhdGUpOworCXJldHVybiAwOworfQorCit2b2lkIHBjaV9yZXN0b3JlX21zaV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBpID0gMCwgcG9zOworCXUxNiBjb250cm9sOworCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOworCXUzMiAqY2FwOworCisJc2F2ZV9zdGF0ZSA9IHBjaV9maW5kX3NhdmVkX2NhcChkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0kpOworCWlmICghc2F2ZV9zdGF0ZSB8fCBwb3MgPD0gMCkKKwkJcmV0dXJuOworCWNhcCA9ICZzYXZlX3N0YXRlLT5kYXRhWzBdOworCisJY29udHJvbCA9IGNhcFtpKytdID4+IDE2OworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfTE8sIGNhcFtpKytdKTsKKwlpZiAoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfNjRCSVQpIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19ISSwgY2FwW2krK10pOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9EQVRBXzY0LCBjYXBbaSsrXSk7CisJfSBlbHNlCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0RBVEFfMzIsIGNhcFtpKytdKTsKKwlpZiAoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfTUFTS0JJVCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfTUFTS19CSVQsIGNhcFtpKytdKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLCBjb250cm9sKTsKKwllbmFibGVfbXNpX21vZGUoZGV2LCBwb3MsIFBDSV9DQVBfSURfTVNJKTsKKwlwY2lfcmVtb3ZlX3NhdmVkX2NhcChzYXZlX3N0YXRlKTsKKwlrZnJlZShzYXZlX3N0YXRlKTsKK30KKworaW50IHBjaV9zYXZlX21zaXhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcG9zOworCXUxNiBjb250cm9sOworCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJaWYgKHBvcyA8PSAwIHx8IGRldi0+bm9fbXNpKQorCQlyZXR1cm4gMDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksICZjb250cm9sKTsKKwlpZiAoIShjb250cm9sICYgUENJX01TSVhfRkxBR1NfRU5BQkxFKSkKKwkJcmV0dXJuIDA7CisJc2F2ZV9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlKSArIHNpemVvZih1MTYpLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXNhdmVfc3RhdGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJPdXQgb2YgbWVtb3J5IGluIHBjaV9zYXZlX21zaXhfc3RhdGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJKigodTE2ICopJnNhdmVfc3RhdGUtPmRhdGFbMF0pID0gY29udHJvbDsKKworCWRpc2FibGVfbXNpX21vZGUoZGV2LCBwb3MsIFBDSV9DQVBfSURfTVNJWCk7CisJc2F2ZV9zdGF0ZS0+Y2FwX25yID0gUENJX0NBUF9JRF9NU0lYOworCXBjaV9hZGRfc2F2ZWRfY2FwKGRldiwgc2F2ZV9zdGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGNpX3Jlc3RvcmVfbXNpeF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXUxNiBzYXZlOworCWludCBwb3M7CisJaW50IHZlY3RvciwgaGVhZCwgdGFpbCA9IDA7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBqOworCXN0cnVjdCBtc2dfYWRkcmVzcyBhZGRyZXNzOworCXN0cnVjdCBtc2dfZGF0YSBkYXRhOworCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CisJaW50IHRlbXA7CisJc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnNhdmVfc3RhdGU7CisKKwlzYXZlX3N0YXRlID0gcGNpX2ZpbmRfc2F2ZWRfY2FwKGRldiwgUENJX0NBUF9JRF9NU0lYKTsKKwlpZiAoIXNhdmVfc3RhdGUpCisJCXJldHVybjsKKwlzYXZlID0gKigodTE2ICopJnNhdmVfc3RhdGUtPmRhdGFbMF0pOworCXBjaV9yZW1vdmVfc2F2ZWRfY2FwKHNhdmVfc3RhdGUpOworCWtmcmVlKHNhdmVfc3RhdGUpOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJaWYgKHBvcyA8PSAwKQorCQlyZXR1cm47CisKKwkvKiByb3V0ZSB0aGUgdGFibGUgKi8KKwl0ZW1wID0gZGV2LT5pcnE7CisJaWYgKG1zaV9sb29rdXBfdmVjdG9yKGRldiwgUENJX0NBUF9JRF9NU0lYKSkKKwkJcmV0dXJuOworCXZlY3RvciA9IGhlYWQgPSBkZXYtPmlycTsKKwl3aGlsZSAoaGVhZCAhPSB0YWlsKSB7CisJCWVudHJ5ID0gbXNpX2Rlc2NbdmVjdG9yXTsKKwkJYmFzZSA9IGVudHJ5LT5tYXNrX2Jhc2U7CisJCWogPSBlbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9ucjsKKworCQltc2lfYWRkcmVzc19pbml0KCZhZGRyZXNzKTsKKwkJbXNpX2RhdGFfaW5pdCgmZGF0YSwgdmVjdG9yKTsKKworCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgJj0gTVNJX0FERFJFU1NfREVTVF9JRF9NQVNLOworCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPDwKKwkJCQkJTVNJX1RBUkdFVF9DUFVfU0hJRlQ7CisKKwkJd3JpdGVsKGFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSwKKwkJCWJhc2UgKyBqICogUENJX01TSVhfRU5UUllfU0laRSArCisJCQlQQ0lfTVNJWF9FTlRSWV9MT1dFUl9BRERSX09GRlNFVCk7CisJCXdyaXRlbChhZGRyZXNzLmhpX2FkZHJlc3MsCisJCQliYXNlICsgaiAqIFBDSV9NU0lYX0VOVFJZX1NJWkUgKworCQkJUENJX01TSVhfRU5UUllfVVBQRVJfQUREUl9PRkZTRVQpOworCQl3cml0ZWwoKih1MzIqKSZkYXRhLAorCQkJYmFzZSArIGogKiBQQ0lfTVNJWF9FTlRSWV9TSVpFICsKKwkJCVBDSV9NU0lYX0VOVFJZX0RBVEFfT0ZGU0VUKTsKKworCQl0YWlsID0gbXNpX2Rlc2NbdmVjdG9yXS0+bGluay50YWlsOworCQl2ZWN0b3IgPSB0YWlsOworCX0KKwlkZXYtPmlycSA9IHRlbXA7CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgc2F2ZSk7CisJZW5hYmxlX21zaV9tb2RlKGRldiwgcG9zLCBQQ0lfQ0FQX0lEX01TSVgpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG1zaV9yZWdpc3Rlcl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZW50cnkpCit7CisJc3RydWN0IG1zZ19hZGRyZXNzIGFkZHJlc3M7CisJc3RydWN0IG1zZ19kYXRhIGRhdGE7CisJaW50IHBvcywgdmVjdG9yID0gZGV2LT5pcnE7CisJdTE2IGNvbnRyb2w7CisKKyAgIAlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0kpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksICZjb250cm9sKTsKKwkvKiBDb25maWd1cmUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlICovCisJbXNpX2FkZHJlc3NfaW5pdCgmYWRkcmVzcyk7CisJbXNpX2RhdGFfaW5pdCgmZGF0YSwgdmVjdG9yKTsKKwllbnRyeS0+bXNpX2F0dHJpYi5jdXJyZW50X2NwdSA9ICgoYWRkcmVzcy5sb19hZGRyZXNzLnUuZGVzdF9pZCA+PgorCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKSAmIE1TSV9UQVJHRVRfQ1BVX01BU0spOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBtc2lfbG93ZXJfYWRkcmVzc19yZWcocG9zKSwKKwkJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSk7CisJaWYgKGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsCisJCQltc2lfdXBwZXJfYWRkcmVzc19yZWcocG9zKSwgYWRkcmVzcy5oaV9hZGRyZXNzKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwKKwkJCW1zaV9kYXRhX3JlZyhwb3MsIDEpLCAqKCh1MzIqKSZkYXRhKSk7CisJfSBlbHNlCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsCisJCQltc2lfZGF0YV9yZWcocG9zLCAwKSwgKigodTMyKikmZGF0YSkpOworCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KSB7CisJCXVuc2lnbmVkIGludCBtYXNrYml0cywgdGVtcDsKKwkJLyogQWxsIE1TSXMgYXJlIHVubWFza2VkIGJ5IGRlZmF1bHQsIE1hc2sgdGhlbSBhbGwgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwKKwkJCW1zaV9tYXNrX2JpdHNfcmVnKHBvcywgaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKSksCisJCQkmbWFza2JpdHMpOworCQl0ZW1wID0gKDEgPDwgbXVsdGlfbXNpX2NhcGFibGUoY29udHJvbCkpOworCQl0ZW1wID0gKCh0ZW1wIC0gMSkgJiB+dGVtcCk7CisJCW1hc2tiaXRzIHw9IHRlbXA7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAorCQkJbXNpX21hc2tfYml0c19yZWcocG9zLCBpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpKSwKKwkJCW1hc2tiaXRzKTsKKwl9Cit9CisKIC8qKgogICogbXNpX2NhcGFiaWxpdHlfaW5pdCAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKICAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJIGRldmljZSBmdW5jdGlvbgpAQCAtNTE2LDggKzcxMSw2IEBACiBzdGF0aWMgaW50IG1zaV9jYXBhYmlsaXR5X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwotCXN0cnVjdCBtc2dfYWRkcmVzcyBhZGRyZXNzOwotCXN0cnVjdCBtc2dfZGF0YSBkYXRhOwogCWludCBwb3MsIHZlY3RvcjsKIAl1MTYgY29udHJvbDsKIApAQCAtNTQ5LDMzICs3NDIsOCBAQAogCS8qIFJlcGxhY2Ugd2l0aCBNU0kgaGFuZGxlciAqLwogCWlycV9oYW5kbGVyX2luaXQoUENJX0NBUF9JRF9NU0ksIHZlY3RvciwgZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCk7CiAJLyogQ29uZmlndXJlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSAqLwotCW1zaV9hZGRyZXNzX2luaXQoJmFkZHJlc3MpOwotCW1zaV9kYXRhX2luaXQoJmRhdGEsIHZlY3Rvcik7Ci0JZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSAoKGFkZHJlc3MubG9fYWRkcmVzcy51LmRlc3RfaWQgPj4KLQkJCQlNU0lfVEFSR0VUX0NQVV9TSElGVCkgJiBNU0lfVEFSR0VUX0NQVV9NQVNLKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgbXNpX2xvd2VyX2FkZHJlc3NfcmVnKHBvcyksCi0JCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUpOwotCWlmIChpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpKSB7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAotCQkJbXNpX3VwcGVyX2FkZHJlc3NfcmVnKHBvcyksIGFkZHJlc3MuaGlfYWRkcmVzcyk7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsCi0JCQltc2lfZGF0YV9yZWcocG9zLCAxKSwgKigodTMyKikmZGF0YSkpOwotCX0gZWxzZQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LAotCQkJbXNpX2RhdGFfcmVnKHBvcywgMCksICooKHUzMiopJmRhdGEpKTsKLQlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewotCQl1bnNpZ25lZCBpbnQgbWFza2JpdHMsIHRlbXA7Ci0JCS8qIEFsbCBNU0lzIGFyZSB1bm1hc2tlZCBieSBkZWZhdWx0LCBNYXNrIHRoZW0gYWxsICovCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsCi0JCQltc2lfbWFza19iaXRzX3JlZyhwb3MsIGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpLAotCQkJJm1hc2tiaXRzKTsKLQkJdGVtcCA9ICgxIDw8IG11bHRpX21zaV9jYXBhYmxlKGNvbnRyb2wpKTsKLQkJdGVtcCA9ICgodGVtcCAtIDEpICYgfnRlbXApOwotCQltYXNrYml0cyB8PSB0ZW1wOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwKLQkJCW1zaV9tYXNrX2JpdHNfcmVnKHBvcywgaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKSksCi0JCQltYXNrYml0cyk7Ci0JfQorCW1zaV9yZWdpc3Rlcl9pbml0KGRldiwgZW50cnkpOworCiAJYXR0YWNoX21zaV9lbnRyeShlbnRyeSwgdmVjdG9yKTsKIAkvKiBTZXQgTVNJIGVuYWJsZWQgYml0cwkgKi8KIAllbmFibGVfbXNpX21vZGUoZGV2LCBwb3MsIFBDSV9DQVBfSURfTVNJKTsKQEAgLTYyNSw4ICs3OTMsMTAgQEAKIAkJaWYgKCFlbnRyeSkKIAkJCWJyZWFrOwogCQl2ZWN0b3IgPSBnZXRfbXNpX3ZlY3RvcihkZXYpOwotCQlpZiAodmVjdG9yIDwgMCkKKwkJaWYgKHZlY3RvciA8IDApIHsKKwkJCWttZW1fY2FjaGVfZnJlZShtc2lfY2FjaGVwLCBlbnRyeSk7CiAJCQlicmVhazsKKwkJfQogCiAgCQlqID0gZW50cmllc1tpXS5lbnRyeTsKICAJCWVudHJpZXNbaV0udmVjdG9yID0gdmVjdG9yOwpAQCAtNzMxLDYgKzkwMSw3IEBACiAJCQl2ZWN0b3JfaXJxW2Rldi0+aXJxXSA9IC0xOwogCQkJbnJfcmVsZWFzZWRfdmVjdG9ycy0tOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNpX2xvY2ssIGZsYWdzKTsKKwkJCW1zaV9yZWdpc3Rlcl9pbml0KGRldiwgbXNpX2Rlc2NbZGV2LT5pcnFdKTsKIAkJCWVuYWJsZV9tc2lfbW9kZShkZXYsIHBvcywgUENJX0NBUF9JRF9NU0kpOwogCQkJcmV0dXJuIDA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IDY5MTdjNmMuLmMyZWNhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtMzMsMTMgKzMzLDEwIEBACiAJYWNwaV9zdGF0dXMJCXN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdAlpbnB1dDsKIAl1bmlvbiBhY3BpX29iamVjdCAJaW5fcGFyYW1zWzRdOwotCXN0cnVjdCBhY3BpX2J1ZmZlcglvdXRwdXQ7Ci0JdW5pb24gYWNwaV9vYmplY3QgCW91dF9vYmo7CQorCXN0cnVjdCBhY3BpX2J1ZmZlcglvdXRwdXQgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCXVuaW9uIGFjcGlfb2JqZWN0IAkqb3V0X29iajsKIAl1MzIJCQlvc2NfZHcwOwogCi0JLyogU2V0dGluZyB1cCBvdXRwdXQgYnVmZmVyICovCi0Jb3V0cHV0Lmxlbmd0aCA9IHNpemVvZihvdXRfb2JqKSArIDMqc2l6ZW9mKHUzMik7ICAKLQlvdXRwdXQucG9pbnRlciA9ICZvdXRfb2JqOwogCQogCS8qIFNldHRpbmcgdXAgaW5wdXQgcGFyYW1ldGVycyAqLwogCWlucHV0LmNvdW50ID0gNDsKQEAgLTYxLDEyICs1OCwxNSBAQAogCQkJIkV2YWx1YXRlIF9PU0MgU2V0IGZhaWxzLiBTdGF0dXMgPSAweCUwNHhcbiIsIHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCWlmIChvdXRfb2JqLnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKworCWlmIChvdXRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIAogCQkJIkV2YWx1YXRlIF9PU0MgcmV0dXJucyB3cm9uZyB0eXBlXG4iKTsKLQkJcmV0dXJuIEFFX1RZUEU7CisJCXN0YXR1cyA9IEFFX1RZUEU7CisJCWdvdG8gcXVlcnlfb3NjX291dDsKIAl9Ci0Jb3NjX2R3MCA9ICooKHUzMiAqKSBvdXRfb2JqLmJ1ZmZlci5wb2ludGVyKTsKKwlvc2NfZHcwID0gKigodTMyICopIG91dF9vYmotPmJ1ZmZlci5wb2ludGVyKTsKIAlpZiAob3NjX2R3MCkgewogCQlpZiAob3NjX2R3MCAmIE9TQ19SRVFVRVNUX0VSUk9SKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIl9PU0MgcmVxdWVzdCBmYWlsc1xuIik7IApAQCAtNzYsMTUgKzc2LDIxIEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBpbnZhbGlkIHJldmlzaW9uXG4iKTsgCiAJCWlmIChvc2NfZHcwICYgT1NDX0NBUEFCSUxJVElFU19NQVNLX0VSUk9SKSB7CiAJCQkvKiBVcGRhdGUgR2xvYmFsIENvbnRyb2wgU2V0ICovCi0JCQlnbG9iYWxfY3RybHNldHMgPSAqKCh1MzIgKikob3V0X29iai5idWZmZXIucG9pbnRlcis4KSk7Ci0JCQlyZXR1cm4gQUVfT0s7CisJCQlnbG9iYWxfY3RybHNldHMgPSAqKCh1MzIgKikob3V0X29iai0+YnVmZmVyLnBvaW50ZXIrOCkpOworCQkJc3RhdHVzID0gQUVfT0s7CisJCQlnb3RvIHF1ZXJ5X29zY19vdXQ7CiAJCX0KLQkJcmV0dXJuIEFFX0VSUk9SOworCQlzdGF0dXMgPSBBRV9FUlJPUjsKKwkJZ290byBxdWVyeV9vc2Nfb3V0OwogCX0KIAogCS8qIFVwZGF0ZSBHbG9iYWwgQ29udHJvbCBTZXQgKi8KLQlnbG9iYWxfY3RybHNldHMgPSAqKCh1MzIgKikob3V0X29iai5idWZmZXIucG9pbnRlciArIDgpKTsKLQlyZXR1cm4gQUVfT0s7CisJZ2xvYmFsX2N0cmxzZXRzID0gKigodTMyICopKG91dF9vYmotPmJ1ZmZlci5wb2ludGVyICsgOCkpOworCXN0YXR1cyA9IEFFX09LOworCitxdWVyeV9vc2Nfb3V0OgorCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAKQEAgLTk2LDE0ICsxMDIsMTAgQEAKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0CWlucHV0OwogCXVuaW9uIGFjcGlfb2JqZWN0IAlpbl9wYXJhbXNbNF07Ci0Jc3RydWN0IGFjcGlfYnVmZmVyCW91dHB1dDsKLQl1bmlvbiBhY3BpX29iamVjdCAJb3V0X29iajsJCisJc3RydWN0IGFjcGlfYnVmZmVyCW91dHB1dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJdW5pb24gYWNwaV9vYmplY3QgCSpvdXRfb2JqOwogCXUzMgkJCW9zY19kdzA7CiAKLQkvKiBTZXR0aW5nIHVwIG91dHB1dCBidWZmZXIgKi8KLQlvdXRwdXQubGVuZ3RoID0gc2l6ZW9mKG91dF9vYmopICsgMypzaXplb2YodTMyKTsgIAotCW91dHB1dC5wb2ludGVyID0gJm91dF9vYmo7Ci0JCiAJLyogU2V0dGluZyB1cCBpbnB1dCBwYXJhbWV0ZXJzICovCiAJaW5wdXQuY291bnQgPSA0OwogCWlucHV0LnBvaW50ZXIgPSBpbl9wYXJhbXM7CkBAIC0xMjQsMTIgKzEyNiwxNCBAQAogCQkJIkV2YWx1YXRlIF9PU0MgU2V0IGZhaWxzLiBTdGF0dXMgPSAweCUwNHhcbiIsIHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCWlmIChvdXRfb2JqLnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKwlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICAKIAkJCSJFdmFsdWF0ZSBfT1NDIHJldHVybnMgd3JvbmcgdHlwZVxuIik7Ci0JCXJldHVybiBBRV9UWVBFOworCQlzdGF0dXMgPSBBRV9UWVBFOworCQlnb3RvIHJ1bl9vc2Nfb3V0OwogCX0KLQlvc2NfZHcwID0gKigodTMyICopIG91dF9vYmouYnVmZmVyLnBvaW50ZXIpOworCW9zY19kdzAgPSAqKCh1MzIgKikgb3V0X29iai0+YnVmZmVyLnBvaW50ZXIpOwogCWlmIChvc2NfZHcwKSB7CiAJCWlmIChvc2NfZHcwICYgT1NDX1JFUVVFU1RfRVJST1IpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyByZXF1ZXN0IGZhaWxzXG4iKTsgCkBAIC0xMzksMTEgKzE0MywxNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIl9PU0MgaW52YWxpZCByZXZpc2lvblxuIik7IAogCQlpZiAob3NjX2R3MCAmIE9TQ19DQVBBQklMSVRJRVNfTUFTS19FUlJPUikgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIl9PU0MgRlcgbm90IGdyYW50IHJlcS4gY29udHJvbFxuIik7Ci0JCQlyZXR1cm4gQUVfU1VQUE9SVDsKKwkJCXN0YXR1cyA9IEFFX1NVUFBPUlQ7CisJCQlnb3RvIHJ1bl9vc2Nfb3V0OwogCQl9Ci0JCXJldHVybiBBRV9FUlJPUjsKKwkJc3RhdHVzID0gQUVfRVJST1I7CisJCWdvdG8gcnVuX29zY19vdXQ7CiAJfQotCXJldHVybiBBRV9PSzsKKwlzdGF0dXMgPSBBRV9PSzsKKworcnVuX29zY19vdXQ6CisJa2ZyZWUob3V0cHV0LnBvaW50ZXIpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGYyMmY2OWEuLjEwZTFhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTI3MSwxMCArMjcxLDEyIEBACiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7CiAJaW50IGkgPSAwOwogCi0JaWYgKGRydiAmJiBkcnYtPnN1c3BlbmQpCisJaWYgKGRydiAmJiBkcnYtPnN1c3BlbmQpIHsKIAkJaSA9IGRydi0+c3VzcGVuZChwY2lfZGV2LCBzdGF0ZSk7Ci0JZWxzZQorCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5zdXNwZW5kLCBpKTsKKwl9IGVsc2UgewogCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKwl9CiAJcmV0dXJuIGk7CiB9CiAKQEAgLTI4Myw5ICsyODUsOSBAQAogICogRGVmYXVsdCByZXN1bWUgbWV0aG9kIGZvciBkZXZpY2VzIHRoYXQgaGF2ZSBubyBkcml2ZXIgcHJvdmlkZWQgcmVzdW1lLAogICogb3Igbm90IGV2ZW4gYSBkcml2ZXIgYXQgYWxsLgogICovCi1zdGF0aWMgdm9pZCBwY2lfZGVmYXVsdF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCitzdGF0aWMgaW50IHBjaV9kZWZhdWx0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwgPSAwOwogCiAJLyogcmVzdG9yZSB0aGUgUENJIGNvbmZpZyBzcGFjZSAqLwogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOwpAQCAtMjk1LDE4ICsyOTcsMjEgQEAKIAkvKiBpZiB0aGUgZGV2aWNlIHdhcyBidXNtYXN0ZXIgYmVmb3JlIHRoZSBzdXNwZW5kLCBtYWtlIGl0IGJ1c21hc3RlciBhZ2FpbiAqLwogCWlmIChwY2lfZGV2LT5pc19idXNtYXN0ZXIpCiAJCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOworCisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBwY2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICogZGV2KQogeworCWludCBlcnJvcjsKIAlzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7CiAKIAlpZiAoZHJ2ICYmIGRydi0+cmVzdW1lKQotCQlkcnYtPnJlc3VtZShwY2lfZGV2KTsKKwkJZXJyb3IgPSBkcnYtPnJlc3VtZShwY2lfZGV2KTsKIAllbHNlCi0JCXBjaV9kZWZhdWx0X3Jlc3VtZShwY2lfZGV2KTsKLQlyZXR1cm4gMDsKKwkJZXJyb3IgPSBwY2lfZGVmYXVsdF9yZXN1bWUocGNpX2Rldik7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgdm9pZCBwY2lfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggYmVhMWFkMS4uMTIyODYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTMwNyw5ICszMDcsMTEgQEAKIAkgKiBDYW4gZW50ZXIgRDAgZnJvbSBhbnkgc3RhdGUsIGJ1dCBpZiB3ZSBjYW4gb25seSBnbyBkZWVwZXIgCiAJICogdG8gc2xlZXAgaWYgd2UncmUgYWxyZWFkeSBpbiBhIGxvdyBwb3dlciBzdGF0ZQogCSAqLwotCWlmIChzdGF0ZSAhPSBQQ0lfRDAgJiYgZGV2LT5jdXJyZW50X3N0YXRlID4gc3RhdGUpCisJaWYgKHN0YXRlICE9IFBDSV9EMCAmJiBkZXYtPmN1cnJlbnRfc3RhdGUgPiBzdGF0ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6ICVzOiBzdGF0ZT0lZCwgY3VycmVudCBzdGF0ZT0lZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcGNpX25hbWUoZGV2KSwgc3RhdGUsIGRldi0+Y3VycmVudF9zdGF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwotCWVsc2UgaWYgKGRldi0+Y3VycmVudF9zdGF0ZSA9PSBzdGF0ZSkgCisJfSBlbHNlIGlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpCiAJCXJldHVybiAwOyAgICAgICAgLyogd2UncmUgYWxyZWFkeSB0aGVyZSAqLwogCiAJLyogZmluZCBQQ0kgUE0gY2FwYWJpbGl0eSBpbiBsaXN0ICovCkBAIC00NDQsNiArNDQ2LDEwIEBACiAJLyogWFhYOiAxMDAlIGR3b3JkIGFjY2VzcyBvayBoZXJlPyAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBpICogNCwmZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCWlmICgoaSA9IHBjaV9zYXZlX21zaV9zdGF0ZShkZXYpKSAhPSAwKQorCQlyZXR1cm4gaTsKKwlpZiAoKGkgPSBwY2lfc2F2ZV9tc2l4X3N0YXRlKGRldikpICE9IDApCisJCXJldHVybiBpOwogCXJldHVybiAwOwogfQogCkBAIC00NTUsOSArNDYxLDI1IEBACiBwY2lfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWludCBpOworCWludCB2YWw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsaSAqIDQsIGRldi0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldKTsKKwkvKgorCSAqIFRoZSBCYXNlIEFkZHJlc3MgcmVnaXN0ZXIgc2hvdWxkIGJlIHByb2dyYW1tZWQgYmVmb3JlIHRoZSBjb21tYW5kCisJICogcmVnaXN0ZXIocykKKwkgKi8KKwlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgaSAqIDQsICZ2YWwpOworCQlpZiAodmFsICE9IGRldi0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiUE06IFdyaXRpbmcgYmFjayBjb25maWcgc3BhY2Ugb24gIgorCQkJCSJkZXZpY2UgJXMgYXQgb2Zmc2V0ICV4ICh3YXMgJXgsIHdyaXRpbmcgJXgpXG4iLAorCQkJCXBjaV9uYW1lKGRldiksIGksCisJCQkJdmFsLCAoaW50KWRldi0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldKTsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LGkgKiA0LAorCQkJCWRldi0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldKTsKKwkJfQorCX0KKwlwY2lfcmVzdG9yZV9tc2lfc3RhdGUoZGV2KTsKKwlwY2lfcmVzdG9yZV9tc2l4X3N0YXRlKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggOGYzZmI0Ny4uMzA2MzBjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTU1LDYgKzU1LDE3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9tc2lfbW9kZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCBpbnQgdHlwZSkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX25vX21zaSh2b2lkKSB7IH0KICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1BDSV9NU0kpICYmIGRlZmluZWQoQ09ORklHX1BNKQoraW50IHBjaV9zYXZlX21zaV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2ludCBwY2lfc2F2ZV9tc2l4X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBwY2lfcmVzdG9yZV9tc2lfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7Cit2b2lkIHBjaV9yZXN0b3JlX21zaXhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcGNpX3NhdmVfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9zYXZlX21zaXhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZXN0b3JlX21zaV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZXN0b3JlX21zaXhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikge30KKyNlbmRpZgogCiBleHRlcm4gaW50IHBjaWVfbWNoX3F1aXJrOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBjaV9kZXZfYXR0cnNbXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggNDk3MGY0Ny4uZDM3ODQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTU5Miw3ICs1OTIsNyBAQAogICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfYnl0ZSggZGV2LCBBTUQ4MTMxX01JU0MsIHRtcCk7CiAgICAgICAgIH0KIH0gCi1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDLCAgICAgICAgIHF1aXJrX2FtZF84MTMxX2lvYXBpYyApOyAKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRSwgcXVpcmtfYW1kXzgxMzFfaW9hcGljKTsKIAogc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX3N2d19tc2koc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTYzNCw2ICs2MzQsOSBAQAogICogbm9uLXg4NiBhcmNoaXRlY3R1cmVzICh5ZXMgVmlhIGV4aXN0cyBvbiBQUEMgYW1vbmcgb3RoZXIgcGxhY2VzKSwKICAqIHdlIG11c3QgbWFzayB0aGUgUENJX0lOVEVSUlVQVF9MSU5FIHZhbHVlIHZlcnN1cyAweGYgdG8gZ2V0CiAgKiBpbnRlcnJ1cHRzIGRlbGl2ZXJlZCBwcm9wZXJseS4KKyAqCisgKiBTb21lIG9mIHRoZSBvbi1jaGlwIGRldmljZXMgYXJlIGFjdHVhbGx5ICc1ODYgZGV2aWNlcycgc28gdGhleSBhcmUKKyAqIGxpc3RlZCBoZXJlLgogICovCiBzdGF0aWMgdm9pZCBxdWlya192aWFfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CkBAIC02NDIsMTMgKzY0NSwxOSBAQAogCW5ld19pcnEgPSBkZXYtPmlycSAmIDB4ZjsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgJmlycSk7CiAJaWYgKG5ld19pcnEgIT0gaXJxKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogVmlhIElSUSBmaXh1cCBmb3IgJXMsIGZyb20gJWQgdG8gJWRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIlBDSTogVklBIElSUSBmaXh1cCBmb3IgJXMsIGZyb20gJWQgdG8gJWRcbiIsCiAJCQlwY2lfbmFtZShkZXYpLCBpcnEsIG5ld19pcnEpOwogCQl1ZGVsYXkoMTUpOwkvKiB1bmtub3duIGlmIGRlbGF5IHJlYWxseSBuZWVkZWQgKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBuZXdfaXJxKTsKIAl9CiB9Ci1ERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9BTllfSUQsIHF1aXJrX3ZpYV9pcnEpOworREVDTEFSRV9QQ0lfRklYVVBfRU5BQkxFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgcXVpcmtfdmlhX2lycSk7CitERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8xLCBxdWlya192aWFfaXJxKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzIsIHF1aXJrX3ZpYV9pcnEpOworREVDTEFSRV9QQ0lfRklYVVBfRU5BQkxFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMywgcXVpcmtfdmlhX2lycSk7CitERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwgcXVpcmtfdmlhX2lycSk7CitERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4Nl80LCBxdWlya192aWFfaXJxKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzUsIHF1aXJrX3ZpYV9pcnEpOwogCiAvKgogICogVklBIFZUODJDNTk4IGhhcyBpdHMgZGV2aWNlIElEIHNldHRhYmxlIGFuZCBtYW55IEJJT1NlcwpAQCAtODY1LDYgKzg3NCwzNiBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzUsCXF1aXJrX2Vpc2FfYnJpZGdlICk7CiAKIC8qCisgKiBPbiB0aGUgTVNJLUs4VC1OZW8yRmlyIEJvYXJkLCB0aGUgaW50ZXJuYWwgU291bmRjYXJkIGlzIGRpc2FibGVkCisgKiB3aGVuIGEgUENJLVNvdW5kY2FyZCBpcyBhZGRlZC4gVGhlIEJJT1Mgb25seSBnaXZlcyBPcHRpb25zCisgKiAiRGlzYWJsZWQiIGFuZCAiQVVUTyIuIFRoaXMgUXVpcmsgU2V0cyB0aGUgY29ycmVzcG9uZGluZworICogUmVnaXN0ZXItVmFsdWUgdG8gZW5hYmxlIHRoZSBTb3VuZGNhcmQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBrOHRfc291bmRfaG9zdGJyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBRdWlyay1NU0ktSzhUIFNvdW5kY2FyZCBPblxuIik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmdmFsKTsKKwlpZiAodmFsID09IDB4ODggfHwgdmFsID09IDB4YzgpIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgdmFsICYgKH4weDQwKSk7CisKKwkJLyogVmVyaWZ5IHRoZSBDaGFuZ2UgZm9yIFN0YXR1cyBvdXRwdXQgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmdmFsKTsKKwkJaWYgKHZhbCAmIDB4NDApCisJCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IE1TSS1LOFQgc291bmRjYXJkIHN0aWxsIG9mZlxuIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIlBDSTogTVNJLUs4VCBzb3VuZGNhcmQgb25cbiIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBDSTogVW5leHBlY3RlZCBWYWx1ZSBpbiBQQ0ktUmVnaXN0ZXI6ICIKKwkJCQkJIm5vIENoYW5nZSFcbiIpOworCX0KKworfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LCBrOHRfc291bmRfaG9zdGJyaWRnZSk7CisKKyNpZm5kZWYgQ09ORklHX0FDUElfU0xFRVAKKy8qCiAgKiBPbiBBU1VTIFA0QiBib2FyZHMsIHRoZSBTTUJ1cyBQQ0kgRGV2aWNlIHdpdGhpbiB0aGUgSUNIMi80IHNvdXRoYnJpZGdlCiAgKiBpcyBub3QgYWN0aXZhdGVkLiBUaGUgbXl0aCBpcyB0aGF0IEFzdXMgc2FpZCB0aGF0IHRoZXkgZG8gbm90IHdhbnQgdGhlCiAgKiB1c2VycyB0byBiZSBpcnJpdGF0ZWQgYnkganVzdCBhbm90aGVyIFBDSSBEZXZpY2UgaW4gdGhlIFdpbjk4IGRldmljZQpAQCAtODc1LDggKzkxNCwxMiBAQAogICogYnJpZGdlLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGRldmljZSBoYXMgbm8gc3VidmVuZG9yL3N1YmRldmljZSBJRC4gU28gaXQgCiAgKiBiZWNvbWVzIG5lY2Vzc2FyeSB0byBkbyB0aGlzIHR3ZWFrIGluIHR3byBzdGVwcyAtLSBJJ3ZlIGNob3NlbiB0aGUgSG9zdAogICogYnJpZGdlIGFzIHRyaWdnZXIuCisgKgorICogQWN0dWFsbHksIGxlYXZpbmcgaXQgdW5oaWRkZW4gYW5kIG5vdCByZWRvaW5nIHRoZSBxdWlyayBvdmVyIHN1c3BlbmQycmFtCisgKiB3aWxsIGNhdXNlIHRoZXJtYWwgbWFuYWdlbWVudCB0byBicmVhayBkb3duLCBhbmQgY2F1c2luZyBtYWNoaW5lIHRvCisgKiBvdmVyaGVhdC4KICAqLwotc3RhdGljIGludCBfX2luaXRkYXRhIGFzdXNfaGlkZXNfc21idXMgPSAwOworc3RhdGljIGludCBfX2luaXRkYXRhIGFzdXNfaGlkZXNfc21idXM7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhc3VzX2hpZGVzX3NtYnVzX2hvc3RicmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTkyMSw2ICs5NjQsNyBAQAogCQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0hCKSB7CiAJCQlzd2l0Y2ggKGRldi0+c3Vic3lzdGVtX2RldmljZSkgewogCQkJY2FzZSAweDE4ODI6IC8qIE02ViBub3RlYm9vayAqLworCQkJY2FzZSAweDE5Nzc6IC8qIEE2VkEgbm90ZWJvb2sgKi8KIAkJCQlhc3VzX2hpZGVzX3NtYnVzID0gMTsKIAkJCX0KIAkJfQpAQCAtOTk5LDYgKzEwNDMsNyBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8xMiwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTIsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzAsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhc3VzX2hpZGVzX3NtYnVzX2xwY19pY2g2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CkBAIC0xMDE3LDYgKzEwNjIsOCBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xLAlhc3VzX2hpZGVzX3NtYnVzX2xwY19pY2g2ICk7CiAKKyNlbmRpZgorCiAvKgogICogU2lTIDk2eCBzb3V0aCBicmlkZ2U6IEJJT1MgdHlwaWNhbGx5IGhpZGVzIFNNQnVzIGRldmljZS4uLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCAxZjRhZDBlLi42MWNiNGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiBjb25maWcgUENNQ0lBX1ZSQzQxNzEKIAl0cmlzdGF0ZSAiTkVDIFZSQzQxNzEgQ2FyZCBDb250cm9sbGVycyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVlJDNDE3MSAmJiBQQ01DSUEKKwlkZXBlbmRzIG9uIENQVV9WUjQxWFggJiYgSVNBICYmIFBDTUNJQQogCiBjb25maWcgUENNQ0lBX1ZSQzQxNzMKIAl0cmlzdGF0ZSAiTkVDIFZSQzQxNzMgQ0FSRFUgc3VwcG9ydCIKQEAgLTI2Myw2ICsyNjMsMTMgQEAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQ29tcGFjdEZsYXNoIGNvbnRyb2xsZXIgb24gT01BUC4KIAkgIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgc3VwcG9ydCAiVHJ1ZSBJREUiIG1vZGUuCiAKK2NvbmZpZyBBVDkxX0NGCisJdHJpc3RhdGUgIkFUOTEgQ29tcGFjdEZsYXNoIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBQQ01DSUEgJiYgQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBDb21wYWN0Rmxhc2ggY29udHJvbGxlciBvbiBBVDkxIGNoaXBzLgorCSAgT3IgY2hvb3NlIE0gdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlIG5hbWVkICJhdDkxX2NmIi4KKwogY29uZmlnIFBDQ0FSRF9OT05TVEFUSUMKIAl0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IGJjZWNmNTEuLjQyNzY5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw3IEBACiBwY21jaWFfY29yZS0kKENPTkZJR19DQVJEQlVTKQkJCSs9IGNhcmRidXMubwogb2JqLSQoQ09ORklHX1BDQ0FSRCkJCQkJKz0gcGNtY2lhX2NvcmUubwogCi1wY21jaWEteQkJCQkJKz0gZHMubyBwY21jaWFfY29tcGF0Lm8gcGNtY2lhX3Jlc291cmNlLm8KK3BjbWNpYS15CQkJCQkrPSBkcy5vIHBjbWNpYV9yZXNvdXJjZS5vCiBwY21jaWEtJChDT05GSUdfUENNQ0lBX0lPQ1RMKQkJCSs9IHBjbWNpYV9pb2N0bC5vCiBvYmotJChDT05GSUdfUENNQ0lBKQkJCQkrPSBwY21jaWEubwogCkBAIC0zNiw2ICszNiw3IEBACiBvYmotJChDT05GSUdfUENNQ0lBX1ZSQzQxNzEpCQkJKz0gdnJjNDE3MV9jYXJkLm8KIG9iai0kKENPTkZJR19QQ01DSUFfVlJDNDE3MykJCQkrPSB2cmM0MTczX2NhcmR1Lm8KIG9iai0kKENPTkZJR19PTUFQX0NGKQkJCQkrPSBvbWFwX2NmLm8KK29iai0kKENPTkZJR19BVDkxX0NGKQkJCQkrPSBhdDkxX2NmLm8KIAogc2ExMXh4X2NvcmUteQkJCQkJKz0gc29jX2NvbW1vbi5vIHNhMTF4eF9iYXNlLm8KIHB4YTJ4eF9jb3JlLXkJCQkJCSs9IHNvY19jb21tb24ubyBweGEyeHhfYmFzZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkNTA5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIGF0OTFfY2YuYyAtLSBBVDkxIENvbXBhY3RGbGFzaCBjb250cm9sbGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXJtOTIwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCisKKy8qCisgKiBBMC4uQTEwIHdvcmsgaW4gZWFjaCByYW5nZTsgQTIzIGluZGljYXRlcyBJL08gc3BhY2U7ICBBMjUgaXMgQ0ZSTlc7CisgKiBzb21lIG90aGVyIGJpdCBpbiB7QTI0LEEyMi4uQTExfSBpcyBuUkVHIHRvIGZsYWcgbWVtb3J5IGFjY2VzcworICogKHZzIGF0dHJpYnV0ZXMpLiAgU28gbW9yZSB0aGFuIDJLQi9yZWdpb24gd291bGQganVzdCBiZSB3YXN0ZS4KKyAqLworI2RlZmluZQlDRl9BVFRSX1BIWVMJKEFUOTFfQ0ZfQkFTRSkKKyNkZWZpbmUJQ0ZfSU9fUEhZUwkoQVQ5MV9DRl9CQVNFICArICgxIDw8IDIzKSkKKyNkZWZpbmUJQ0ZfTUVNX1BIWVMJKEFUOTFfQ0ZfQkFTRSAgKyAweDAxN2ZmODAwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJhdDkxX2NmIjsKKworc3RydWN0IGF0OTFfY2Zfc29ja2V0IHsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldAlzb2NrZXQ7CisKKwl1bnNpZ25lZAkJcHJlc2VudDoxOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgYXQ5MV9jZl9kYXRhCSpib2FyZDsKK307CisKKyNkZWZpbmUJU1pfMksJCQkoMiAqIFNaXzFLKQorCitzdGF0aWMgaW5saW5lIGludCBhdDkxX2NmX3ByZXNlbnQoc3RydWN0IGF0OTFfY2Zfc29ja2V0ICpjZikKK3sKKwlyZXR1cm4gIWF0OTFfZ2V0X2dwaW9fdmFsdWUoY2YtPmJvYXJkLT5kZXRfcGluKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgYXQ5MV9jZl9zc19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MV9jZl9pcnEoaW50IGlycSwgdm9pZCAqX2NmLCBzdHJ1Y3QgcHRfcmVncyAqcikKK3sKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmID0gKHN0cnVjdCBhdDkxX2NmX3NvY2tldCAqKSBfY2Y7CisKKwlpZiAoaXJxID09IGNmLT5ib2FyZC0+ZGV0X3BpbikgeworCQl1bnNpZ25lZCBwcmVzZW50ID0gYXQ5MV9jZl9wcmVzZW50KGNmKTsKKworCQkvKiBraWNrIHBjY2FyZCBhcyBuZWVkZWQgKi8KKwkJaWYgKHByZXNlbnQgIT0gY2YtPnByZXNlbnQpIHsKKwkJCWNmLT5wcmVzZW50ID0gcHJlc2VudDsKKwkJCXByX2RlYnVnKCIlczogY2FyZCAlc1xuIiwgZHJpdmVyX25hbWUsCisJCQkJCXByZXNlbnQgPyAicHJlc2VudCIgOiAiZ29uZSIpOworCQkJcGNtY2lhX3BhcnNlX2V2ZW50cygmY2YtPnNvY2tldCwgU1NfREVURUNUKTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBhdDkxX2NmX2dldF9zdGF0dXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVfaW50ICpzcCkKK3sKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmOworCisJaWYgKCFzcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZiA9IGNvbnRhaW5lcl9vZihzLCBzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQsIHNvY2tldCk7CisKKwkvKiBOT1RFOiBDRiBpcyBhbHdheXMgM1ZDQVJEICovCisJaWYgKGF0OTFfY2ZfcHJlc2VudChjZikpIHsKKwkJaW50IHJkeQk9IGNmLT5ib2FyZC0+aXJxX3BpbjsJLyogUkRZL25JUlEgKi8KKwkJaW50IHZjYwk9IGNmLT5ib2FyZC0+dmNjX3BpbjsKKworCQkqc3AgPSBTU19ERVRFQ1QgfCBTU18zVkNBUkQ7CisJCWlmICghcmR5IHx8IGF0OTFfZ2V0X2dwaW9fdmFsdWUocmR5KSkKKwkJCSpzcCB8PSBTU19SRUFEWTsKKwkJaWYgKCF2Y2MgfHwgYXQ5MV9nZXRfZ3Bpb192YWx1ZSh2Y2MpKQorCQkJKnNwIHw9IFNTX1BPV0VST047CisJfSBlbHNlCisJCSpzcCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXQ5MV9jZl9zZXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0X3N0YXRlX3QgKnMpCit7CisJc3RydWN0IGF0OTFfY2Zfc29ja2V0CSpjZjsKKworCWNmID0gY29udGFpbmVyX29mKHNvY2ssIHN0cnVjdCBhdDkxX2NmX3NvY2tldCwgc29ja2V0KTsKKworCS8qIHN3aXRjaCBWY2MgaWYgbmVlZGVkIGFuZCBwb3NzaWJsZSAqLworCWlmIChjZi0+Ym9hcmQtPnZjY19waW4pIHsKKwkJc3dpdGNoIChzLT5WY2MpIHsKKwkJCWNhc2UgMDoKKwkJCQlhdDkxX3NldF9ncGlvX3ZhbHVlKGNmLT5ib2FyZC0+dmNjX3BpbiwgMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDMzOgorCQkJCWF0OTFfc2V0X2dwaW9fdmFsdWUoY2YtPmJvYXJkLT52Y2NfcGluLCAxKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiB0b2dnbGUgcmVzZXQgaWYgbmVlZGVkICovCisJYXQ5MV9zZXRfZ3Bpb192YWx1ZShjZi0+Ym9hcmQtPnJzdF9waW4sIHMtPmZsYWdzICYgU1NfUkVTRVQpOworCisJcHJfZGVidWcoIiVzOiBWY2MgJWQsIGlvX2lycSAlZCwgZmxhZ3MgJTA0eCBjc2MgJTA0eFxuIiwKKwkJZHJpdmVyX25hbWUsIHMtPlZjYywgcy0+aW9faXJxLCBzLT5mbGFncywgcy0+Y3NjX21hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9jZl9zc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCXJldHVybiBhdDkxX2NmX3NldF9zb2NrZXQocywgJmRlYWRfc29ja2V0KTsKK30KKworLyogd2UgYWxyZWFkeSBtYXBwZWQgdGhlIEkvTyByZWdpb24gKi8KK3N0YXRpYyBpbnQgYXQ5MV9jZl9zZXRfaW9fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqaW8pCit7CisJc3RydWN0IGF0OTFfY2Zfc29ja2V0CSpjZjsKKwl1MzIJCQljc3I7CisKKwljZiA9IGNvbnRhaW5lcl9vZihzLCBzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQsIHNvY2tldCk7CisJaW8tPmZsYWdzICY9IChNQVBfQUNUSVZFIHwgTUFQXzE2QklUIHwgTUFQX0FVVE9TWik7CisKKwkvKgorCSAqIFVzZSAxNiBiaXQgYWNjZXNzZXMgdW5sZXNzL3VudGlsIHdlIG5lZWQgOC1iaXQgaS9vIHNwYWNlLgorCSAqIEFsd2F5cyBzZXQgQ1NSNCAuLi4gUENNQ0lBIHdvbid0IGFsd2F5cyB1bm1hcCB0aGluZ3MuCisJICovCisJY3NyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1NNQ19DU1IoNCkpICYgfkFUOTFfU01DX0RCVzsKKworCS8qCisJICogTk9URTogdGhpcyBDRiBjb250cm9sbGVyIGlnbm9yZXMgSU9JUzE2LCBzbyB3ZSBjYW4ndCByZWFsbHkgZG8KKwkgKiBNQVBfQVVUT1NaLiAgVGhlIDE2Yml0IG1vZGUgYWxsb3dzIHNpbmdsZSBieXRlIGFjY2VzcyBvbiBlaXRoZXIKKwkgKiBEMC1ENyAoZXZlbiBhZGRyKSBvciBEOC1EMTUgKG9kZCksIHNvIGl0J3MgY2xvc2UgZW5vdWdoIGZvciBtYW55CisJICogcHVycG9zZXMgKGFuZCBoYW5kbGVzIGlkZS1jcykuCisJICoKKwkgKiBUaGUgOGJpdCBtb2RlIGlzIG5lZWRlZCBmb3Igb2RkIGJ5dGUgYWNjZXNzIG9uIEQwLUQ3LiAgSXQgc2VlbXMKKwkgKiBzb21lIGNhcmRzIG9ubHkgbGlrZSB0aGF0IHdheSB0byBnZXQgYXQgdGhlIG9kZCBieXRlLCBkZXNwaXRlCisJICogQ0YgMy4wIHNwZWMgdGFibGUgMzUgYWxzbyBnaXZpbmcgdGhlIEQ4LUQxNSBvcHRpb24uCisJICovCisJaWYgKCEoaW8tPmZsYWdzICYgKE1BUF8xNkJJVHxNQVBfQVVUT1NaKSkpIHsKKwkJY3NyIHw9IEFUOTFfU01DX0RCV184OworCQlwcl9kZWJ1ZygiJXM6IDhiaXQgaS9vIGJ1c1xuIiwgZHJpdmVyX25hbWUpOworCX0gZWxzZSB7CisJCWNzciB8PSBBVDkxX1NNQ19EQldfMTY7CisJCXByX2RlYnVnKCIlczogMTZiaXQgaS9vIGJ1c1xuIiwgZHJpdmVyX25hbWUpOworCX0KKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DU1IoNCksIGNzcik7CisKKwlpby0+c3RhcnQgPSBjZi0+c29ja2V0LmlvX29mZnNldDsKKwlpby0+c3RvcCA9IGlvLT5zdGFydCArIFNaXzJLIC0gMTsKKworCXJldHVybiAwOworfQorCisvKiBwY21jaWEgbGF5ZXIgbWFwcy91bm1hcHMgbWVtIHJlZ2lvbnMgKi8KK3N0YXRpYyBpbnQKK2F0OTFfY2Zfc2V0X21lbV9tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY2NhcmRfbWVtX21hcCAqbWFwKQoreworCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2Y7CisKKwlpZiAobWFwLT5jYXJkX3N0YXJ0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNmID0gY29udGFpbmVyX29mKHMsIHN0cnVjdCBhdDkxX2NmX3NvY2tldCwgc29ja2V0KTsKKworCW1hcC0+ZmxhZ3MgJj0gTUFQX0FDVElWRXxNQVBfQVRUUklCfE1BUF8xNkJJVDsKKwlpZiAobWFwLT5mbGFncyAmIE1BUF9BVFRSSUIpCisJCW1hcC0+c3RhdGljX3N0YXJ0ID0gQ0ZfQVRUUl9QSFlTOworCWVsc2UKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBDRl9NRU1fUEhZUzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIGF0OTFfY2Zfb3BzID0geworCS5pbml0CQkJPSBhdDkxX2NmX3NzX2luaXQsCisJLnN1c3BlbmQJCT0gYXQ5MV9jZl9zc19zdXNwZW5kLAorCS5nZXRfc3RhdHVzCQk9IGF0OTFfY2ZfZ2V0X3N0YXR1cywKKwkuc2V0X3NvY2tldAkJPSBhdDkxX2NmX3NldF9zb2NrZXQsCisJLnNldF9pb19tYXAJCT0gYXQ5MV9jZl9zZXRfaW9fbWFwLAorCS5zZXRfbWVtX21hcAkJPSBhdDkxX2NmX3NldF9tZW1fbWFwLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfY2ZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2Y7CisJc3RydWN0IGF0OTFfY2ZfZGF0YQkqYm9hcmQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCByZXNvdXJjZQkJKmlvOworCXVuc2lnbmVkIGludAkJY3NhOworCWludAkJCXN0YXR1czsKKworCWlmICghYm9hcmQgfHwgIWJvYXJkLT5kZXRfcGluIHx8ICFib2FyZC0+cnN0X3BpbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpbykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljZiA9IGtjYWxsb2MoMSwgc2l6ZW9mICpjZiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljZi0+Ym9hcmQgPSBib2FyZDsKKwljZi0+cGRldiA9IHBkZXY7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgY2YpOworCisJLyogQ0YgdGFrZXMgb3ZlciBDUzQsIENTNSwgQ1M2ICovCisJY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX0VCSV9DU0EpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfRUJJX0NTQSwgY3NhIHwgQVQ5MV9FQklfQ1M0QV9TTUNfQ09NUEFDVEZMQVNIKTsKKworCS8qIGZvcmNlIHBvd2Vyb24gZGVmYXVsdHMgZm9yIHRoZXNlIHBpbnMgLi4uICovCisJKHZvaWQpIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIEEyNS9DRlJOVyAqLworCSh2b2lkKSBhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEwLCAwKTsJLyogTkNTNC9DRkNTICovCisJKHZvaWQpIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTEsIDApOwkvKiBOQ1M1L0NGQ0UxICovCisJKHZvaWQpIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTIsIDApOwkvKiBOQ1M2L0NGQ0UyICovCisKKwkvKiBuV0FJVCBpcyBfbm90XyBhIGRlZmF1bHQgc2V0dGluZyAqLworCSh2b2lkKSBhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzYsIDEpOwkvKiAgbldBSVQgKi8KKworCS8qCisJICogU3RhdGljIG1lbW9yeSBjb250cm9sbGVyIHRpbWluZyBhZGp1c3RtZW50cy4KKwkgKiBSRVZJU0lUOiAgdGhlc2UgdGltaW5ncyBhcmUgaW4gdGVybXMgb2YgTUNLIGN5Y2xlcywgc28KKwkgKiB3aGVuIE1DSyBjaGFuZ2VzIChjcHVmcmVxIGV0Yykgc28gbXVzdCB0aGVzZSB2YWx1ZXMuLi4KKwkgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DU1IoNCksCisJCQkJICBBVDkxX1NNQ19BQ1NTX1NURAorCQkJCXwgQVQ5MV9TTUNfREJXXzE2CisJCQkJfCBBVDkxX1NNQ19CQVQKKwkJCQl8IEFUOTFfU01DX1dTRU4KKwkJCQl8IEFUOTFfU01DX05XU18oMzIpCS8qIHdhaXQgc3RhdGVzICovCisJCQkJfCBBVDkxX1NNQ19SV1NFVFVQXyg2KQkvKiBzZXR1cCB0aW1lICovCisJCQkJfCBBVDkxX1NNQ19SV0hPTERfKDQpCS8qIGhvbGQgdGltZSAqLworCSk7CisKKwkvKiBtdXN0IGJlIGEgR1BJTzsgZXJnbyBtdXN0IHRyaWdnZXIgb24gYm90aCBlZGdlcyAqLworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGJvYXJkLT5kZXRfcGluLCBhdDkxX2NmX2lycSwKKwkJCVNBX1NBTVBMRV9SQU5ET00sIGRyaXZlcl9uYW1lLCBjZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDA7CisKKwkvKgorCSAqIFRoZSBjYXJkIGRyaXZlciB3aWxsIHJlcXVlc3QgdGhpcyBpcnEgbGF0ZXIgYXMgbmVlZGVkLgorCSAqIGJ1dCBpdCBjYXVzZXMgbG90cyBvZiAiaXJxTk46IG5vYm9keSBjYXJlZCIgbWVzc2FnZXMKKwkgKiB1bmxlc3Mgd2UgcmVwb3J0IHRoYXQgd2UgaGFuZGxlIGV2ZXJ5dGhpbmcgKHNpZ2gpLgorCSAqIChOb3RlOiAgREsgYm9hcmQgZG9lc24ndCB3aXJlIHRoZSBJUlEgcGluLi4uKQorCSAqLworCWlmIChib2FyZC0+aXJxX3BpbikgeworCQlzdGF0dXMgPSByZXF1ZXN0X2lycShib2FyZC0+aXJxX3BpbiwgYXQ5MV9jZl9pcnEsCisJCQkJU0FfU0hJUlEsIGRyaXZlcl9uYW1lLCBjZik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBmYWlsMGE7CisJCWNmLT5zb2NrZXQucGNpX2lycSA9IGJvYXJkLT5pcnFfcGluOworCX0gZWxzZQorCQljZi0+c29ja2V0LnBjaV9pcnEgPSBOUl9JUlFTICsgMTsKKworCS8qIHBjbWNpYSBsYXllciBvbmx5IHJlbWFwcyAicmVhbCIgbWVtb3J5IG5vdCBpb3NwYWNlICovCisJY2YtPnNvY2tldC5pb19vZmZzZXQgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcChDRl9JT19QSFlTLCBTWl8ySyk7CisJaWYgKCFjZi0+c29ja2V0LmlvX29mZnNldCkKKwkJZ290byBmYWlsMTsKKworCS8qIHJlc2VydmUgQ1M0LCBDUzUsIGFuZCBDUzYgcmVnaW9uczsgYnV0IHVzZSBqdXN0IENTNCAqLworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGlvLT5zdGFydCwgaW8tPmVuZCArIDEgLSBpby0+c3RhcnQsCisJCQkJZHJpdmVyX25hbWUpKQorCQlnb3RvIGZhaWwxOworCisJcHJfaW5mbygiJXM6IGlycXMgZGV0ICMlZCwgaW8gIyVkXG4iLCBkcml2ZXJfbmFtZSwKKwkJYm9hcmQtPmRldF9waW4sIGJvYXJkLT5pcnFfcGluKTsKKworCWNmLT5zb2NrZXQub3duZXIgPSBUSElTX01PRFVMRTsKKwljZi0+c29ja2V0LmRldi5kZXYgPSBkZXY7CisJY2YtPnNvY2tldC5vcHMgPSAmYXQ5MV9jZl9vcHM7CisJY2YtPnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CisJY2YtPnNvY2tldC5mZWF0dXJlcyA9IFNTX0NBUF9QQ0NBUkQgfCBTU19DQVBfU1RBVElDX01BUAorCQkJCXwgU1NfQ0FQX01FTV9BTElHTjsKKwljZi0+c29ja2V0Lm1hcF9zaXplID0gU1pfMks7CisJY2YtPnNvY2tldC5pb1swXS5yZXMgPSBpbzsKKworCXN0YXR1cyA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJmNmLT5zb2NrZXQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWwyOworCisJcmV0dXJuIDA7CisKK2ZhaWwyOgorCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKSBjZi0+c29ja2V0LmlvX29mZnNldCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGlvLT5zdGFydCwgaW8tPmVuZCArIDEgLSBpby0+c3RhcnQpOworZmFpbDE6CisJaWYgKGJvYXJkLT5pcnFfcGluKQorCQlmcmVlX2lycShib2FyZC0+aXJxX3BpbiwgY2YpOworZmFpbDBhOgorCWZyZWVfaXJxKGJvYXJkLT5kZXRfcGluLCBjZik7CitmYWlsMDoKKwlhdDkxX3N5c193cml0ZShBVDkxX0VCSV9DU0EsIGNzYSk7CisJa2ZyZWUoY2YpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGF0OTFfY2ZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHJlc291cmNlCQkqaW8gPSBjZi0+c29ja2V0LmlvWzBdLnJlczsKKwl1bnNpZ25lZCBpbnQJCWNzYTsKKworCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmY2YtPnNvY2tldCk7CisJZnJlZV9pcnEoY2YtPmJvYXJkLT5pcnFfcGluLCBjZik7CisJZnJlZV9pcnEoY2YtPmJvYXJkLT5kZXRfcGluLCBjZik7CisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopIGNmLT5zb2NrZXQuaW9fb2Zmc2V0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaW8tPnN0YXJ0LCBpby0+ZW5kICsgMSAtIGlvLT5zdGFydCk7CisKKwljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfRUJJX0NTQSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9FQklfQ1NBLCBjc2EgJiB+QVQ5MV9FQklfQ1M0QSk7CisKKwlrZnJlZShjZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdDkxX2NmX2RyaXZlciA9IHsKKwkubmFtZQkJPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gYXQ5MV9jZl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGF0OTFfY2ZfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgYXQ5MV9jZl9pbml0KHZvaWQpCit7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXQ5MV9jZl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYXQ5MV9jZl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0OTFfY2ZfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZhdDkxX2NmX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhdDkxX2NmX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFUOTEgQ29tcGFjdCBGbGFzaCBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIEJyb3duZWxsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDEyMGZhOGQuLjkxMmMwM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAoQykgMTk5OQkJRGF2aWQgQS4gSGluZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzLmMgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCmluZGV4IDYxM2YyZjEuLjMxNjI5OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY3MuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTExMSw5ICsxMTAsOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc29ja2V0LCAmcGNtY2lhX3NvY2tldF9saXN0LCBzb2NrZXRfbGlzdCkgewogCQlpZiAoc29ja2V0LT5kZXYuZGV2ICE9IGRldikKIAkJCWNvbnRpbnVlOwotCQlkb3duKCZzb2NrZXQtPnNrdF9zZW0pOworCQltdXRleF9sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7CiAJCXNvY2tldF9zdXNwZW5kKHNvY2tldCk7Ci0JCXVwKCZzb2NrZXQtPnNrdF9zZW0pOworCQltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAl9CiAJdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKIApAQCAtMTI5LDkgKzEyOCw5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzb2NrZXQsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7CiAJCWlmIChzb2NrZXQtPmRldi5kZXYgIT0gZGV2KQogCQkJY29udGludWU7Ci0JCWRvd24oJnNvY2tldC0+c2t0X3NlbSk7CisJCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAkJc29ja2V0X3Jlc3VtZShzb2NrZXQpOwotCQl1cCgmc29ja2V0LT5za3Rfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7CiAJfQogCXVwX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CiAKQEAgLTIzNyw3ICsyMzYsNyBAQAogCWluaXRfY29tcGxldGlvbigmc29ja2V0LT5zb2NrZXRfcmVsZWFzZWQpOwogCWluaXRfY29tcGxldGlvbigmc29ja2V0LT50aHJlYWRfZG9uZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc29ja2V0LT50aHJlYWRfd2FpdCk7Ci0JaW5pdF9NVVRFWCgmc29ja2V0LT5za3Rfc2VtKTsKKwltdXRleF9pbml0KCZzb2NrZXQtPnNrdF9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnNvY2tldC0+dGhyZWFkX2xvY2spOwogCiAJcmV0ID0ga2VybmVsX3RocmVhZChwY2NhcmRkLCBzb2NrZXQsIENMT05FX0tFUk5FTCk7CkBAIC00MDYsOCArNDA1LDYgQEAKIAljYl9mcmVlKHMpOwogI2VuZGlmCiAJcy0+ZnVuY3Rpb25zID0gMDsKLQlrZnJlZShzLT5jb25maWcpOwotCXMtPmNvbmZpZyA9IE5VTEw7CiAKIAlzLT5vcHMtPmdldF9zdGF0dXMocywgJnN0YXR1cyk7CiAJaWYgKHN0YXR1cyAmIFNTX1BPV0VST04pIHsKQEAgLTY2NCw3ICs2NjEsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza3QtPnRocmVhZF9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKGV2ZW50cykgewotCQkJZG93bigmc2t0LT5za3Rfc2VtKTsKKwkJCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAkJCWlmIChldmVudHMgJiBTU19ERVRFQ1QpCiAJCQkJc29ja2V0X2RldGVjdF9jaGFuZ2Uoc2t0KTsKIAkJCWlmIChldmVudHMgJiBTU19CQVRERUFEKQpAQCAtNjczLDcgKzY3MCw3IEBACiAJCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0JBVFRFUllfTE9XLCBDU19FVkVOVF9QUklfTE9XKTsKIAkJCWlmIChldmVudHMgJiBTU19SRUFEWSkKIAkJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFLCBDU19FVkVOVF9QUklfTE9XKTsKLQkJCXVwKCZza3QtPnNrdF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC03MTcsOCArNzE0LDggQEAKIHsKICAgICAgICAgaW50IHJldCA9IDA7CiAKLQkvKiBzLT5za3Rfc2VtIGFsc28gcHJvdGVjdHMgcy0+Y2FsbGJhY2sgKi8KLQlkb3duKCZzLT5za3Rfc2VtKTsKKwkvKiBzLT5za3RfbXV0ZXggYWxzbyBwcm90ZWN0cyBzLT5jYWxsYmFjayAqLworCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7CiAKIAlpZiAoYykgewogCQkvKiByZWdpc3RyYXRpb24gKi8KQEAgLTczNCw3ICs3MzEsNyBAQAogCX0gZWxzZQogCQlzLT5jYWxsYmFjayA9IE5VTEw7CiAgZXJyOgotCXVwKCZzLT5za3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzUyLDcgKzc0OSw3IEBACiAKIAljc19kYmcoc2t0LCAxLCAicmVzZXR0aW5nIHNvY2tldFxuIik7CiAKLQlkb3duKCZza3QtPnNrdF9zZW0pOworCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAlkbyB7CiAJCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJCXJldCA9IENTX05PX0NBUkQ7CkBAIC03ODEsNyArNzc4LDcgQEAKIAogCQlyZXQgPSBDU19TVUNDRVNTOwogCX0gd2hpbGUgKDApOwotCXVwKCZza3QtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0gLyogcmVzZXRfY2FyZCAqLwpAQCAtNzk3LDcgKzc5NCw3IEBACiAKIAljc19kYmcoc2t0LCAxLCAic3VzcGVuZGluZyBzb2NrZXRcbiIpOwogCi0JZG93bigmc2t0LT5za3Rfc2VtKTsKKwltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJZG8gewogCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCQlyZXQgPSBDU19OT19DQVJEOwpAQCAtODE0LDcgKzgxMSw3IEBACiAJCX0KIAkJcmV0ID0gc29ja2V0X3N1c3BlbmQoc2t0KTsKIAl9IHdoaWxlICgwKTsKLQl1cCgmc2t0LT5za3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9IC8qIHN1c3BlbmRfY2FyZCAqLwpAQCAtODI3LDcgKzgyNCw3IEBACiAgICAgCiAJY3NfZGJnKHNrdCwgMSwgIndha2luZyB1cCBzb2NrZXRcbiIpOwogCi0JZG93bigmc2t0LT5za3Rfc2VtKTsKKwltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJZG8gewogCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCQlyZXQgPSBDU19OT19DQVJEOwpAQCAtODQxLDcgKzgzOCw3IEBACiAJCWlmICghcmV0ICYmIHNrdC0+Y2FsbGJhY2spCiAJCQlza3QtPmNhbGxiYWNrLT5yZXN1bWUoc2t0KTsKIAl9IHdoaWxlICgwKTsKLQl1cCgmc2t0LT5za3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9IC8qIHJlc3VtZV9jYXJkICovCkBAIC04NTUsNyArODUyLDcgQEAKICAgICAKIAljc19kYmcoc2t0LCAxLCAidXNlciBlamVjdCByZXF1ZXN0XG4iKTsKIAotCWRvd24oJnNrdC0+c2t0X3NlbSk7CisJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCWRvIHsKIAkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewogCQkJcmV0ID0gLUVOT0RFVjsKQEAgLTg3MSw3ICs4NjgsNyBAQAogCQlzb2NrZXRfcmVtb3ZlKHNrdCk7CiAJCXJldCA9IDA7CiAJfSB3aGlsZSAoMCk7Ci0JdXAoJnNrdC0+c2t0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfSAvKiBlamVjdF9jYXJkICovCkBAIC04ODQsNyArODgxLDcgQEAKIAogCWNzX2RiZyhza3QsIDEsICJ1c2VyIGluc2VydCByZXF1ZXN0XG4iKTsKIAotCWRvd24oJnNrdC0+c2t0X3NlbSk7CisJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCWRvIHsKIAkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkgewogCQkJcmV0ID0gLUVCVVNZOwpAQCAtODk2LDcgKzg5Myw3IEBACiAJCX0KIAkJcmV0ID0gMDsKIAl9IHdoaWxlICgwKTsKLQl1cCgmc2t0LT5za3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9IC8qIGluc2VydF9jYXJkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAppbmRleCA3YjM3ZWJhLi5kNjE2NGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNpZm5kZWYgX0xJTlVYX0NTX0lOVEVSTkFMX0gKICNkZWZpbmUgX0xJTlVYX0NTX0lOVEVSTkFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogLyogRmxhZ3MgaW4gY2xpZW50IHN0YXRlICovCiAjZGVmaW5lIENMSUVOVF9DT05GSUdfTE9DS0VECTB4MDAwMQpAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBDTElFTlRfSU9fUkVRCQkweDAwMDQKICNkZWZpbmUgQ0xJRU5UX1VOQk9VTkQJCTB4MDAwOAogI2RlZmluZSBDTElFTlRfU1RBTEUJCTB4MDAxMAotI2RlZmluZSBDTElFTlRfV0lOX1JFUShpKQkoMHgyMDw8KGkpKQorI2RlZmluZSBDTElFTlRfV0lOX1JFUShpKQkoMHgxPDwoaSkpCiAjZGVmaW5lIENMSUVOVF9DQVJEQlVTCQkweDgwMDAKIAogI2RlZmluZSBSRUdJT05fTUFHSUMJMHhFM0M5CkBAIC0zMSw3ICszMSw3IEBACiAgICAgdV9zaG9ydAkJcmVnaW9uX21hZ2ljOwogICAgIHVfc2hvcnQJCXN0YXRlOwogICAgIGRldl9pbmZvX3QJCWRldl9pbmZvOwotICAgIGNsaWVudF9oYW5kbGVfdAltdGQ7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UJKm10ZDsKICAgICB1X2ludAkJTWVkaWFJRDsKICAgICByZWdpb25faW5mb190CWluZm87CiB9IHJlZ2lvbl90OwpAQCAtNDAsMTIgKzQwLDEyIEBACiAKIC8qIEVhY2ggY2FyZCBmdW5jdGlvbiBnZXRzIG9uZSBvZiB0aGVzZSBndXlzICovCiB0eXBlZGVmIHN0cnVjdCBjb25maWdfdCB7CisJc3RydWN0IGtyZWYJcmVmOwogICAgIHVfaW50CQlzdGF0ZTsKICAgICB1X2ludAkJQXR0cmlidXRlczsKICAgICB1X2ludAkJSW50VHlwZTsKICAgICB1X2ludAkJQ29uZmlnQmFzZTsKICAgICB1X2NoYXIJCVN0YXR1cywgUGluLCBDb3B5LCBPcHRpb24sIEV4dFN0YXR1czsKLSAgICB1X2ludAkJUHJlc2VudDsKICAgICB1X2ludAkJQ2FyZFZhbHVlczsKICAgICBpb19yZXFfdAkJaW87CiAgICAgc3RydWN0IHsKQEAgLTk1LDEyICs5NSw2IEBACiAJfQogfQogCi0jZGVmaW5lIENIRUNLX1NPQ0tFVChzKSBcCi0gICAgKCgocykgPj0gc29ja2V0cykgfHwgKHNvY2tldF90YWJsZVtzXS0+b3BzID09IE5VTEwpKQotCi0jZGVmaW5lIFNPQ0tFVChoKSAoaC0+c29ja2V0KQotI2RlZmluZSBDT05GSUcoaCkgKCZTT0NLRVQoaCktPmNvbmZpZ1soaCktPmZ1bmNdKQotCiAvKiBJbiBjYXJkYnVzLmMgKi8KIGludCBjYl9hbGxvYyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiB2b2lkIGNiX2ZyZWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwpAQCAtMTMzLDEwICsxMjcsOSBAQAogZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcGNtY2lhX3NvY2tldF9saXN0OwogaW50IHBjbWNpYV9nZXRfd2luZG93KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB3aW5kb3dfaGFuZGxlX3QgKmhhbmRsZSwgaW50IGlkeCwgd2luX3JlcV90ICpyZXEpOwotaW50IHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIGNvbmZpZ19pbmZvX3QgKmNvbmZpZyk7CitpbnQgcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY29uZmlnX2luZm9fdCAqY29uZmlnKTsKIGludCBwY2NhcmRfcmVzZXRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKLWludCBwY2NhcmRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCBjc19zdGF0dXNfdCAqc3RhdHVzKTsKLWludCBwY2NhcmRfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgY29uZl9yZWdfdCAqcmVnKTsKK2ludCBwY2NhcmRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjc19zdGF0dXNfdCAqc3RhdHVzKTsKIAogCiBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggYmI5NmNlMS4uNzRiMzEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC0xMCwxMCArMTAsOSBAQAogICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogKEMpIDE5OTkJCURhdmlkIEEuIEhpbmRzCi0gKiAoQykgMjAwMyAtIDIwMDUJRG9taW5payBCcm9kb3dza2kKKyAqIChDKSAyMDAzIC0gMjAwNglEb21pbmlrIEJyb2Rvd3NraQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMyw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogI2RlZmluZSBJTl9DQVJEX1NFUlZJQ0VTCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CkBAIC0yMzYsMTEgKzIzNiwxMSBAQAogLyoqCiAgKiBwY21jaWFfbG9hZF9maXJtd2FyZSAtIGxvYWQgQ0lTIGZyb20gdXNlcnNwYWNlIGlmIGRldmljZS1wcm92aWRlZCBpcyBicm9rZW4KICAqIEBkZXYgLSB0aGUgcGNtY2lhIGRldmljZSB3aGljaCBuZWVkcyBhIENJUyBvdmVycmlkZQotICogQGZpbGVuYW1lIC0gcmVxdWVzdGVkIGZpbGVuYW1lIGluIC9saWIvZmlybXdhcmUvY2lzLworICogQGZpbGVuYW1lIC0gcmVxdWVzdGVkIGZpbGVuYW1lIGluIC9saWIvZmlybXdhcmUvCiAgKgogICogVGhpcyB1c2VzIHRoZSBpbi1rZXJuZWwgZmlybXdhcmUgbG9hZGluZyBtZWNoYW5pc20gdG8gdXNlIGEgImZha2UgQ0lTIiBpZgogICogdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgY2FyZCBpcyBicm9rZW4uIFRoZSBmaXJtd2FyZSBmaWxlcyByZXNpZGUgaW4KLSAqIC9saWIvZmlybXdhcmUvY2lzLyBpbiB1c2Vyc3BhY2UuCisgKiAvbGliL2Zpcm13YXJlLyBpbiB1c2Vyc3BhY2UuCiAgKi8KIHN0YXRpYyBpbnQgcGNtY2lhX2xvYWRfZmlybXdhcmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldiwgY2hhciAqIGZpbGVuYW1lKQogewpAQCAtMjk4LDkgKzI5OCw2IEBACiAgKgogICogUmVnaXN0ZXJzIGEgUENNQ0lBIGRyaXZlciB3aXRoIHRoZSBQQ01DSUEgYnVzIGNvcmUuCiAgKi8KLXN0YXRpYyBpbnQgcGNtY2lhX2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBwY21jaWFfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKLQogaW50IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKmRyaXZlcikKIHsKIAlpZiAoIWRyaXZlcikKQEAgLTM0MywxMiArMzQwLDE5IEBACiAJCXB1dF9kZXZpY2UoJnBfZGV2LT5kZXYpOwogfQogCitzdGF0aWMgdm9pZCBwY21jaWFfcmVsZWFzZV9mdW5jdGlvbihzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBjb25maWdfdCAqYyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBjb25maWdfdCwgcmVmKTsKKwlrZnJlZShjKTsKK30KKwogc3RhdGljIHZvaWQgcGNtY2lhX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CiAJZHNfZGJnKDEsICJyZWxlYXNpbmcgZGV2ICVwXG4iLCBwX2Rldik7CiAJcGNtY2lhX3B1dF9zb2NrZXQocF9kZXYtPnNvY2tldCk7CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOworCWtyZWZfcHV0KCZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5yZWYsIHBjbWNpYV9yZWxlYXNlX2Z1bmN0aW9uKTsKIAlrZnJlZShwX2Rldik7CiB9CiAKQEAgLTM3NywyOSArMzgxLDEyIEBACiAJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKIAlzID0gcF9kZXYtPnNvY2tldDsKIAotCWlmICgoIXBfZHJ2LT5wcm9iZSkgfHwgKCF0cnlfbW9kdWxlX2dldChwX2Rydi0+b3duZXIpKSkgeworCWlmICgoIXBfZHJ2LT5wcm9iZSkgfHwgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB8fAorCSAgICAoIXRyeV9tb2R1bGVfZ2V0KHBfZHJ2LT5vd25lcikpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gcHV0X2RldjsKIAl9CiAKLQlwX2Rldi0+c3RhdGUgJj0gfkNMSUVOVF9VTkJPVU5EOwotCi0JLyogc2V0IHVwIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiwgaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBiZWZvcmUgKi8KLQlpZiAoIXMtPmZ1bmN0aW9ucykgewotCQljaXN0cGxfbG9uZ2xpbmtfbWZjX3QgbWZjOwotCQlpZiAocGNjYXJkX3JlYWRfdHVwbGUocywgcF9kZXYtPmZ1bmMsIENJU1RQTF9MT05HTElOS19NRkMsCi0JCQkJICAgICAgJm1mYykgPT0gQ1NfU1VDQ0VTUykKLQkJCXMtPmZ1bmN0aW9ucyA9IG1mYy5uZm47Ci0JCWVsc2UKLQkJCXMtPmZ1bmN0aW9ucyA9IDE7Ci0JCXMtPmNvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKGNvbmZpZ190KSAqIHMtPmZ1bmN0aW9ucywKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcy0+Y29uZmlnKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBwdXRfbW9kdWxlOwotCQl9Ci0JfQotCiAJcmV0ID0gcF9kcnYtPnByb2JlKHBfZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIHB1dF9tb2R1bGU7CkBAIC00MTAsNyArMzk3LDcgQEAKIAkgKiBjYWxsIHdoaWNoIHdpbGwgdGhlbiBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZSB0d28KIAkgKiBwc2V1ZG8gZGV2aWNlcywgYW5kIGlmIG5vdCwgYWRkIHRoZSBzZWNvbmQgb25lLgogCSAqLwotCWRpZCA9IChzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqKSBwX2Rldi0+ZGV2LmRyaXZlcl9kYXRhOworCWRpZCA9IHBfZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJaWYgKGRpZCAmJiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSAmJgogCSAgICAocF9kZXYtPnNvY2tldC0+ZGV2aWNlX2NvdW50ID09IDEpICYmIChwX2Rldi0+ZGV2aWNlX25vID09IDApKQogCQlwY21jaWFfYWRkX3BzZXVkb19kZXZpY2UocF9kZXYtPnNvY2tldCk7CkBAIC00MjUsNjkgKzQxMiw4NCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGNtY2lhX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqIGRldikKLXsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7Ci0Jc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCWludCBpOwotCi0JLyogZGV0YWNoIHRoZSAiaW5zdGFuY2UiICovCi0JcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7Ci0JcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKLQlpZiAoIXBfZHJ2KQotCQlyZXR1cm4gMDsKLQotCWlmIChwX2Rydi0+cmVtb3ZlKQotCSAgICAgICAJcF9kcnYtPnJlbW92ZShwX2Rldik7Ci0KLQkvKiBjaGVjayBmb3IgcHJvcGVyIHVubG9hZGluZyAqLwotCWlmIChwX2Rldi0+c3RhdGUgJiAoQ0xJRU5UX0lSUV9SRVF8Q0xJRU5UX0lPX1JFUXxDTElFTlRfQ09ORklHX0xPQ0tFRCkpCi0JCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogZHJpdmVyICVzIGRpZCBub3QgcmVsZWFzZSBjb25maWcgcHJvcGVybHlcbiIsCi0JCSAgICAgICBwX2Rydi0+ZHJ2Lm5hbWUpOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9XSU47IGkrKykKLQkJaWYgKHBfZGV2LT5zdGF0ZSAmIENMSUVOVF9XSU5fUkVRKGkpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBkcml2ZXIgJXMgZGlkIG5vdCByZWxlYXNlIHdpbmRvd3MgcHJvcGVybHlcbiIsCi0JCQkgICAgICAgcF9kcnYtPmRydi5uYW1lKTsKLQotCS8qIHJlZmVyZW5jZXMgZnJvbSBwY21jaWFfcHJvYmVfZGV2aWNlICovCi0JcF9kZXYtPnN0YXRlID0gQ0xJRU5UX1VOQk9VTkQ7Ci0JcGNtY2lhX3B1dF9kZXYocF9kZXYpOwotCW1vZHVsZV9wdXQocF9kcnYtPm93bmVyKTsKLQotCXJldHVybiAwOwotfQotCi0KIC8qCiAgKiBSZW1vdmVzIGEgUENNQ0lBIGNhcmQgZnJvbSB0aGUgZGV2aWNlIHRyZWUgYW5kIHNvY2tldCBsaXN0LgogICovCi1zdGF0aWMgdm9pZCBwY21jaWFfY2FyZF9yZW1vdmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCitzdGF0aWMgdm9pZCBwY21jaWFfY2FyZF9yZW1vdmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsZWZ0b3ZlcikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnRtcDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCWRzX2RiZygyLCAidW5iaW5kX3JlcXVlc3QoJWQpXG4iLCBzLT5zb2NrKTsKIAotCXMtPmRldmljZV9jb3VudCA9IDA7CiAKLQlmb3IgKDs7KSB7Ci0JCS8qIHVucmVnaXN0ZXIgYWxsIHBjbWNpYV9kZXZpY2VzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIHNvY2tldCovCisJaWYgKCFsZWZ0b3ZlcikKKwkJcy0+ZGV2aWNlX2NvdW50ID0gMDsKKwllbHNlCisJCXMtPmRldmljZV9jb3VudCA9IDE7CisKKwkvKiB1bnJlZ2lzdGVyIGFsbCBwY21jaWFfZGV2aWNlcyByZWdpc3RlcmVkIHdpdGggdGhpcyBzb2NrZXQsIGV4Y2VwdCBsZWZ0b3ZlciAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwX2RldiwgdG1wLCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKKwkJaWYgKHBfZGV2ID09IGxlZnRvdmVyKQorCQkJY29udGludWU7CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWlmIChsaXN0X2VtcHR5KCZzLT5kZXZpY2VzX2xpc3QpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwotIAkJCXJldHVybjsKLQkJfQotCQlwX2RldiA9IGxpc3RfZW50cnkoKCZzLT5kZXZpY2VzX2xpc3QpLT5uZXh0LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSwgc29ja2V0X2RldmljZV9saXN0KTsKIAkJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwotCQlwX2Rldi0+c3RhdGUgfD0gQ0xJRU5UX1NUQUxFOworCQlwX2Rldi0+X3JlbW92ZWQ9MTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKIAogCQlkZXZpY2VfdW5yZWdpc3RlcigmcF9kZXYtPmRldik7CiAJfQogCiAJcmV0dXJuOwotfSAvKiB1bmJpbmRfcmVxdWVzdCAqLworfQorCitzdGF0aWMgaW50IHBjbWNpYV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OworCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqZGlkOworCWludCBpOworCisJcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CisJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKKworCS8qIElmIHdlJ3JlIHJlbW92aW5nIHRoZSBwcmltYXJ5IG1vZHVsZSBkcml2aW5nIGEKKwkgKiBwc2V1ZG8gbXVsdGktZnVuY3Rpb24gY2FyZCwgd2UgbmVlZCB0byB1bmJpbmQKKwkgKiBhbGwgZGV2aWNlcworCSAqLworCWRpZCA9IHBfZGV2LT5kZXYuZHJpdmVyX2RhdGE7CisJaWYgKGRpZCAmJiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSAmJgorCSAgICAocF9kZXYtPnNvY2tldC0+ZGV2aWNlX2NvdW50ICE9IDApICYmCisJICAgIChwX2Rldi0+ZGV2aWNlX25vID09IDApKQorCQlwY21jaWFfY2FyZF9yZW1vdmUocF9kZXYtPnNvY2tldCwgcF9kZXYpOworCisJLyogZGV0YWNoIHRoZSAiaW5zdGFuY2UiICovCisJaWYgKCFwX2RydikKKwkJcmV0dXJuIDA7CisKKwlpZiAocF9kcnYtPnJlbW92ZSkKKwkgICAgICAgCXBfZHJ2LT5yZW1vdmUocF9kZXYpOworCisJcF9kZXYtPmRldl9ub2RlID0gTlVMTDsKKworCS8qIGNoZWNrIGZvciBwcm9wZXIgdW5sb2FkaW5nICovCisJaWYgKHBfZGV2LT5faXJxIHx8IHBfZGV2LT5faW8gfHwgcF9kZXYtPl9sb2NrZWQpCisJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogZHJpdmVyICVzIGRpZCBub3QgcmVsZWFzZSBjb25maWcgcHJvcGVybHlcbiIsCisJCSAgICAgICBwX2Rydi0+ZHJ2Lm5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9XSU47IGkrKykKKwkJaWYgKHBfZGV2LT5fd2luICYgQ0xJRU5UX1dJTl9SRVEoaSkpCisJCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IGRyaXZlciAlcyBkaWQgbm90IHJlbGVhc2Ugd2luZG93cyBwcm9wZXJseVxuIiwKKwkJCSAgICAgICBwX2Rydi0+ZHJ2Lm5hbWUpOworCisJLyogcmVmZXJlbmNlcyBmcm9tIHBjbWNpYV9wcm9iZV9kZXZpY2UgKi8KKwlwY21jaWFfcHV0X2RldihwX2Rldik7CisJbW9kdWxlX3B1dChwX2Rydi0+b3duZXIpOworCisJcmV0dXJuIDA7Cit9CiAKIAogLyoKQEAgLTU0Niw3ICs1NDgsNyBAQAogCQkJdG1wID0gdmVyczEtPnN0ciArIHZlcnMxLT5vZnNbaV07CiAKIAkJCWxlbmd0aCA9IHN0cmxlbih0bXApICsgMTsKLQkJCWlmICgobGVuZ3RoIDwgMykgfHwgKGxlbmd0aCA+IDI1NSkpCisJCQlpZiAoKGxlbmd0aCA8IDIpIHx8IChsZW5ndGggPiAyNTUpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlwX2Rldi0+cHJvZF9pZFtpXSA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoLApAQCAtNTcxLDExICs1NzMsMTEgQEAKICAqIHdvbid0IHdvcmssIHRoaXMgZG9lc24ndCBtYXR0ZXIgbXVjaCBhdCB0aGUgbW9tZW50OiB0aGUgZHJpdmVyIGNvcmUgZG9lc24ndAogICogc3VwcG9ydCBpdCBlaXRoZXIuCiAgKi8KLXN0YXRpYyBERUNMQVJFX01VVEVYKGRldmljZV9hZGRfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZV9hZGRfbG9jayk7CiAKIHN0cnVjdCBwY21jaWFfZGV2aWNlICogcGNtY2lhX2RldmljZV9hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbikKIHsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCAqdG1wX2RldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBidXNfaWRfbGVuOwogCkBAIC01ODMsNyArNTg1LDcgQEAKIAlpZiAoIXMpCiAJCXJldHVybiBOVUxMOwogCi0JZG93bigmZGV2aWNlX2FkZF9sb2NrKTsKKwltdXRleF9sb2NrKCZkZXZpY2VfYWRkX2xvY2spOwogCiAJLyogbWF4IG9mIDIgZGV2aWNlcyBwZXIgY2FyZCAqLwogCWlmIChzLT5kZXZpY2VfY291bnQgPT0gMikKQEAgLTU5Niw2ICs1OTgsOCBAQAogCXBfZGV2LT5zb2NrZXQgPSBzOwogCXBfZGV2LT5kZXZpY2Vfbm8gPSAocy0+ZGV2aWNlX2NvdW50KyspOwogCXBfZGV2LT5mdW5jICAgPSBmdW5jdGlvbjsKKwlpZiAocy0+ZnVuY3Rpb25zIDw9IGZ1bmN0aW9uKQorCQlzLT5mdW5jdGlvbnMgPSBmdW5jdGlvbiArIDE7CiAKIAlwX2Rldi0+ZGV2LmJ1cyA9ICZwY21jaWFfYnVzX3R5cGU7CiAJcF9kZXYtPmRldi5wYXJlbnQgPSBzLT5kZXYuZGV2OwpAQCAtNjA4LDM2ICs2MTIsNTUgQEAKIAlzcHJpbnRmIChwX2Rldi0+ZGV2bmFtZSwgInBjbWNpYSVzIiwgcF9kZXYtPmRldi5idXNfaWQpOwogCiAJLyogY29tcGF0ICovCi0JcF9kZXYtPnN0YXRlID0gQ0xJRU5UX1VOQk9VTkQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIHBfZGV2LT5mdW5jdGlvbl9jb25maWcgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYWxsIGNhcmQgZnVuY3Rpb25zLgorCSAqIE5vdGUgdGhhdCB0aGlzIGlzIHNlcmlhbGl6ZWQgYnkgdGhlIGRldmljZV9hZGRfbG9jaywgc28gdGhhdAorCSAqIG9ubHkgb25lIHN1Y2ggc3RydWN0IHdpbGwgYmUgY3JlYXRlZC4KKwkgKi8KKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpCisgICAgICAgICAgICAgICAgaWYgKHBfZGV2LT5mdW5jID09IHRtcF9kZXYtPmZ1bmMpIHsKKwkJCXBfZGV2LT5mdW5jdGlvbl9jb25maWcgPSB0bXBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisJCQlrcmVmX2dldCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmKTsKKwkJfQogCiAJLyogQWRkIHRvIHRoZSBsaXN0IGluIHBjbWNpYV9idXNfc29ja2V0ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcF9kZXYtPnNvY2tldF9kZXZpY2VfbGlzdCwgJnMtPmRldmljZXNfbGlzdCk7CisJbGlzdF9hZGQoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QsICZzLT5kZXZpY2VzX2xpc3QpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKIAorCWlmICghcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZykgeworCQlwX2Rldi0+ZnVuY3Rpb25fY29uZmlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbmZpZ190KSwKKwkJCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKQorCQkJZ290byBlcnJfdW5yZWc7CisJCWtyZWZfaW5pdCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmKTsKKwl9CisKIAlwcmludGsoS0VSTl9OT1RJQ0UgInBjbWNpYTogcmVnaXN0ZXJpbmcgbmV3IGRldmljZSAlc1xuIiwKIAkgICAgICAgcF9kZXYtPmRldm5hbWUpOwogCiAJcGNtY2lhX2RldmljZV9xdWVyeShwX2Rldik7CiAKLQlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZwX2Rldi0+ZGV2KSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnBfZGV2LT5kZXYpKQorCQlnb3RvIGVycl91bnJlZzsKIAotCQlnb3RvIGVycl9mcmVlOwotICAgICAgIH0KLQotCXVwKCZkZXZpY2VfYWRkX2xvY2spOworCW11dGV4X3VubG9jaygmZGV2aWNlX2FkZF9sb2NrKTsKIAogCXJldHVybiBwX2RldjsKIAorIGVycl91bnJlZzoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcF9kZXYtPnNvY2tldF9kZXZpY2VfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwogIGVycl9mcmVlOgogCWtmcmVlKHBfZGV2LT5kZXZuYW1lKTsKIAlrZnJlZShwX2Rldik7CiAJcy0+ZGV2aWNlX2NvdW50LS07CiAgZXJyX3B1dDoKLQl1cCgmZGV2aWNlX2FkZF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRldmljZV9hZGRfbG9jayk7CiAJcGNtY2lhX3B1dF9zb2NrZXQocyk7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTY5Niw3ICs3MTksNyBAQAogCWludCBub19kZXZpY2VzPTA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIG11c3QgYmUgY2FsbGVkIHdpdGggc2t0X3NlbSBoZWxkICovCisJLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBza3RfbXV0ZXggaGVsZCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCWlmIChsaXN0X2VtcHR5KCZza3QtPmRldmljZXNfbGlzdCkpCiAJCW5vX2RldmljZXM9MTsKQEAgLTgxOSw5ICs4NDIsMTEgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqIHBfZHJ2ID0gdG9fcGNtY2lhX2RydihkcnYpOwogCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQgPSBwX2Rydi0+aWRfdGFibGU7CiAKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCiAJLyogbWF0Y2hpbmcgYnkgY2FyZG1nciAqLwogCWlmIChwX2Rldi0+Y2FyZG1nciA9PSBwX2RydikKIAkJcmV0dXJuIDE7CisjZW5kaWYKIAogCXdoaWxlIChkaWQgJiYgZGlkLT5tYXRjaF9mbGFncykgewogCQlpZiAocGNtY2lhX2Rldm1hdGNoKHBfZGV2LCBkaWQpKQpAQCAtOTI3LDcgKzk1Miw3IEBACiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwogCi0JaWYgKHBfZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfT04pCisJaWYgKHBfZGV2LT5zdXNwZW5kZWQpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm9mZlxuIik7CiAJZWxzZQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJvblxuIik7CkBAIC05NDIsMTEgKzk2Nyw5IEBACiAgICAgICAgIGlmICghY291bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKHBfZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04pICYmCi0JICAgICghc3RybmNtcChidWYsICJvZmYiLCAzKSkpCisJaWYgKCghcF9kZXYtPnN1c3BlbmRlZCkgJiYgIXN0cm5jbXAoYnVmLCAib2ZmIiwgMykpCiAJCXJldCA9IGRwbV9ydW50aW1lX3N1c3BlbmQoZGV2LCBQTVNHX1NVU1BFTkQpOwotCWVsc2UgaWYgKChwX2Rldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX09OKSAmJgotCQkgKCFzdHJuY21wKGJ1ZiwgIm9uIiwgMikpKQorCWVsc2UgaWYgKHBfZGV2LT5zdXNwZW5kZWQgJiYgIXN0cm5jbXAoYnVmLCAib24iLCAyKSkKIAkJZHBtX3J1bnRpbWVfcmVzdW1lKGRldik7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CkBAIC05ODIsOSArMTAwNSw5IEBACiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZwX2Rldi0+c29ja2V0LT5za3Rfc2VtKTsKKwltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5za3RfbXV0ZXgpOwogCXBfZGV2LT5hbGxvd19mdW5jX2lkX21hdGNoID0gMTsKLQl1cCgmcF9kZXYtPnNvY2tldC0+c2t0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5za3RfbXV0ZXgpOwogCiAJYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOwogCkBAIC0xMDEyLDE0ICsxMDM1LDI3IEBACiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IE5VTEw7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoZGV2LT5kcml2ZXIpCiAJCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihkZXYtPmRyaXZlcik7CiAKLQlpZiAocF9kcnYgJiYgcF9kcnYtPnN1c3BlbmQpCi0JCXJldHVybiBwX2Rydi0+c3VzcGVuZChwX2Rldik7CisJaWYgKCFwX2RydikKKwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gMDsKKwlpZiAocF9kcnYtPnN1c3BlbmQpIHsKKwkJcmV0ID0gcF9kcnYtPnN1c3BlbmQocF9kZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gcF9kZXYtPmZ1bmMpCisJCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24ocF9kZXYpOworCisgb3V0OgorCWlmICghcmV0KQorCQlwX2Rldi0+c3VzcGVuZGVkID0gMTsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTEwMjcsMTQgKzEwNjMsMjcgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CiAgICAgICAgIHN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IE5VTEw7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoZGV2LT5kcml2ZXIpCiAJCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihkZXYtPmRyaXZlcik7CiAKLQlpZiAocF9kcnYgJiYgcF9kcnYtPnJlc3VtZSkKLQkJcmV0dXJuIHBfZHJ2LT5yZXN1bWUocF9kZXYpOworCWlmICghcF9kcnYpCisJCWdvdG8gb3V0OwogCi0JcmV0dXJuIDA7CisJaWYgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gcF9kZXYtPmZ1bmMpIHsKKwkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihwX2RldiwgJnBfZGV2LT5jb25mKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChwX2Rydi0+cmVzdW1lKQorCQlyZXQgPSBwX2Rydi0+cmVzdW1lKHBfZGV2KTsKKworIG91dDoKKwlpZiAoIXJldCkKKwkJcF9kZXYtPnN1c3BlbmRlZCA9IDA7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0xMDk0LDEzICsxMTQzLDE5IEBACiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwY21jaWFfZ2V0X3NvY2tldChza3QpOwogCisJaWYgKCFzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENNQ0lBIG9idGFpbmluZyByZWZlcmVuY2UgdG8gc29ja2V0ICVwICIgXAorCQkJImZhaWxlZCwgZXZlbnQgMHgleCBsb3N0IVxuIiwgc2t0LCBldmVudCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCWRzX2RiZygxLCAiZHNfZXZlbnQoMHglMDZ4LCAlZCwgMHglcClcbiIsCiAJICAgICAgIGV2ZW50LCBwcmlvcml0eSwgc2t0KTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENTX0VWRU5UX0NBUkRfUkVNT1ZBTDoKIAkJcy0+cGNtY2lhX3N0YXRlLnByZXNlbnQgPSAwOwotCQlwY21jaWFfY2FyZF9yZW1vdmUoc2t0KTsKKwkJcGNtY2lhX2NhcmRfcmVtb3ZlKHNrdCwgTlVMTCk7CiAJCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKIAkJYnJlYWs7CiAKQEAgLTExMjgsNiArMTE4MywzMiBAQAogfSAvKiBkc19ldmVudCAqLwogCiAKK3N0cnVjdCBwY21jaWFfZGV2aWNlICogcGNtY2lhX2Rldl9wcmVzZW50KHN0cnVjdCBwY21jaWFfZGV2aWNlICpfcF9kZXYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpyZXQgPSBOVUxMOworCisJcF9kZXYgPSBwY21jaWFfZ2V0X2RldihfcF9kZXYpOworCWlmICghcF9kZXYpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFwX2Rldi0+c29ja2V0LT5wY21jaWFfc3RhdGUucHJlc2VudCkKKwkJZ290byBvdXQ7CisKKwlpZiAocF9kZXYtPl9yZW1vdmVkKQorCQlnb3RvIG91dDsKKworCWlmIChwX2Rldi0+c3VzcGVuZGVkKQorCQlnb3RvIG91dDsKKworCXJldCA9IHBfZGV2OworIG91dDoKKwlwY21jaWFfcHV0X2RldihwX2Rldik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX2Rldl9wcmVzZW50KTsKKworCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9jYWxsYmFjayBwY21jaWFfYnVzX2NhbGxiYWNrID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5ldmVudCA9IGRzX2V2ZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHNfaW50ZXJuYWwuaCBiL2RyaXZlcnMvcGNtY2lhL2RzX2ludGVybmFsLmgKaW5kZXggZDM1OWJkMi4uM2EyYjI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHNfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9kc19pbnRlcm5hbC5oCkBAIC04LDYgKzgsOCBAQAogCiBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIHBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pOwogCitleHRlcm4gaW50IHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKwogI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIGV4dGVybiB2b2lkIF9faW5pdCBwY21jaWFfc2V0dXBfaW9jdGwodm9pZCk7CiBleHRlcm4gdm9pZCBfX2V4aXQgcGNtY2lhX2NsZWFudXBfaW9jdGwodm9pZCk7CkBAIC0xNSw3ICsxNyw3IEBACiBleHRlcm4gaW50IGhhbmRsZV9yZXF1ZXN0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQogc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkgeyByZXR1cm47IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhhbmRsZV9yZXF1ZXN0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KSB7IHJldHVybiBDU19TVUNDRVNTOyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKaW5kZXggNzk3OWM4NS4uZDVmMDNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCAzNWE5MmQxLi5hMmYwNWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTUxMCw3ICs1MDksOCBAQAogc3RhdGljIHVfaW50IF9faW5pdCB0ZXN0X2lycSh1X3Nob3J0IHNvY2ssIGludCBpcnEpCiB7CiAgICAgZGVidWcoMiwgIiAgdGVzdGluZyBJU0EgaXJxICVkXG4iLCBpcnEpOwotICAgIGlmIChyZXF1ZXN0X2lycShpcnEsIGkzNjVfY291bnRfaXJxLCAwLCAic2NhbiIsIGkzNjVfY291bnRfaXJxKSAhPSAwKQorICAgIGlmIChyZXF1ZXN0X2lycShpcnEsIGkzNjVfY291bnRfaXJxLCBTQV9QUk9CRUlSUSwgInNjYW4iLAorCQkJaTM2NV9jb3VudF9pcnEpICE9IDApCiAJcmV0dXJuIDE7CiAgICAgaXJxX2hpdHMgPSAwOyBpcnFfc29jayA9IHNvY2s7CiAgICAgbXNsZWVwKDEwKTsKQEAgLTU2Miw3ICs1NjIsNyBAQAogICAgIH0gZWxzZSB7CiAJLyogRmFsbGJhY2s6IGp1c3QgZmluZCBpbnRlcnJ1cHRzIHRoYXQgYXJlbid0IGluIHVzZSAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCSAgICBpZiAoKG1hc2swICYgKDEgPDwgaSkpICYmIChfY2hlY2tfaXJxKGksIDApID09IDApKQorCSAgICBpZiAoKG1hc2swICYgKDEgPDwgaSkpICYmIChfY2hlY2tfaXJxKGksIFNBX1BST0JFSVJRKSA9PSAwKSkKIAkJbWFzazEgfD0gKDEgPDwgaSk7CiAJcHJpbnRrKCJkZWZhdWx0Iik7CiAJLyogSWYgc2NhbiBmYWlsZWQsIGRlZmF1bHQgdG8gcG9sbGVkIHN0YXR1cyAqLwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJdV9pbnQgY3NfbWFzayA9IG1hc2sgJiAoKGNzX2lycSkgPyAoMTw8Y3NfaXJxKSA6IH4oMTw8MTIpKTsKIAlmb3IgKGNzX2lycSA9IDE1OyBjc19pcnEgPiAwOyBjc19pcnEtLSkKIAkgICAgaWYgKChjc19tYXNrICYgKDEgPDwgY3NfaXJxKSkgJiYKLQkJKF9jaGVja19pcnEoY3NfaXJxLCAwKSA9PSAwKSkKKwkJKF9jaGVja19pcnEoY3NfaXJxLCBTQV9QUk9CRUlSUSkgPT0gMCkpCiAJCWJyZWFrOwogCWlmIChjc19pcnEpIHsKIAkgICAgZ3JhYl9pcnEgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2NvbXBhdC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2NvbXBhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmIxNjFjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9jb21wYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBQQ01DSUEgMTYtYml0IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zCi0gKgotICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCi0gKiA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcwotICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IERvbWluaWsgQnJvZG93c2tpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2RlZmluZSBJTl9DQVJEX1NFUlZJQ0VTCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2NzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2J1bGttZW0uaD4KLSNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2RzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL3NzLmg+Ci0KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgotCi1pbnQgcGNtY2lhX2dldF9maXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHR1cGxlX3QgKnR1cGxlKQotewotCXJldHVybiBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCB0dXBsZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUpOwotCi1pbnQgcGNtY2lhX2dldF9uZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgdHVwbGVfdCAqdHVwbGUpCi17Ci0JcmV0dXJuIHBjY2FyZF9nZXRfbmV4dF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X25leHRfdHVwbGUpOwotCi1pbnQgcGNtY2lhX2dldF90dXBsZV9kYXRhKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgdHVwbGVfdCAqdHVwbGUpCi17Ci0JcmV0dXJuIHBjY2FyZF9nZXRfdHVwbGVfZGF0YShwX2Rldi0+c29ja2V0LCB0dXBsZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfdHVwbGVfZGF0YSk7Ci0KLWludCBwY21jaWFfcGFyc2VfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCi17Ci0JcmV0dXJuIHBjY2FyZF9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfcGFyc2VfdHVwbGUpOwotCi1pbnQgcGNtY2lhX3ZhbGlkYXRlX2NpcyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNpc2luZm9fdCAqaW5mbykKLXsKLQlyZXR1cm4gcGNjYXJkX3ZhbGlkYXRlX2NpcyhwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgaW5mbyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV92YWxpZGF0ZV9jaXMpOwotCi0KLWludCBwY21jaWFfcmVzZXRfY2FyZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNsaWVudF9yZXFfdCAqcmVxKQotewotCXJldHVybiBwY2NhcmRfcmVzZXRfY2FyZChwX2Rldi0+c29ja2V0KTsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3Jlc2V0X2NhcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCA4MDk2OWY3Li43MzhiMWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtMTgsNyArMTgsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTcwLDEwICs2OSwyNiBAQAogI2RlZmluZSBkc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZ2V0X3BjbWNpYV9kZXZpY2Uoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7CisJCWlmIChwX2Rldi0+ZnVuYyA9PSBmdW5jdGlvbikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiBwY21jaWFfZ2V0X2RldihwX2Rldik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KIAogLyogYmFja3dhcmRzLWNvbXBhdGlibGUgYWNjZXNzaW5nIG9mIGRyaXZlciAtLS0gYnkgbmFtZSEgKi8KIAotc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyICogZ2V0X3BjbWNpYV9kcml2ZXIgKGRldl9pbmZvX3QgKmRldl9pbmZvKQorc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyICpnZXRfcGNtY2lhX2RyaXZlcihkZXZfaW5mb190ICpkZXZfaW5mbykKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKQEAgLTIxNCw3ICsyMjksNyBAQAogCQkJCQkgKiBieSB1c2Vyc3BhY2UgYmVmb3JlLCB3ZSBuZWVkIHRvCiAJCQkJCSAqIHJldHVybiB0aGUgImluc3RhbmNlIi4gKi8KIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJCQkJYmluZF9pbmZvLT5pbnN0YW5jZSA9IHBfZGV2LT5pbnN0YW5jZTsKKwkJCQkJYmluZF9pbmZvLT5pbnN0YW5jZSA9IHBfZGV2OwogCQkJCQlyZXQgPSAtRUJVU1k7CiAJCQkJCWdvdG8gZXJyX3B1dF9tb2R1bGU7CiAJCQkJfSBlbHNlIHsKQEAgLTI1Myw5ICsyNjgsOSBAQAogCS8qCiAJICogUHJldmVudCB0aGlzIHJhY2luZyB3aXRoIGEgY2FyZCBpbnNlcnRpb24uCiAJICovCi0JZG93bigmcy0+c2t0X3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAlidXNfcmVzY2FuX2RldmljZXMoJnBjbWNpYV9idXNfdHlwZSk7Ci0JdXAoJnMtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKIAogCS8qIGNoZWNrIHdoZXRoZXIgdGhlIGRyaXZlciBpbmRlZWQgbWF0Y2hlZC4gSSBkb24ndCBjYXJlIGlmIHRoaXMKIAkgKiBpcyByYWN5IG9yIG5vdCwgYmVjYXVzZSBpdCBjYW4gb25seSBoYXBwZW4gb24gY2FyZG1nciBhY2Nlc3MKQEAgLTI4OSw2ICszMDQsNyBAQAogewogCWRldl9ub2RlX3QgKm5vZGU7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OworCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCkBAIC0zNDMsMTYgKzM1OSwxNiBAQAogIGZvdW5kOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAKLQlpZiAoKCFwX2Rldi0+aW5zdGFuY2UpIHx8Ci0JICAgIChwX2Rldi0+aW5zdGFuY2UtPnN0YXRlICYgREVWX0NPTkZJR19QRU5ESU5HKSkgeworCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihwX2Rldi0+ZGV2LmRyaXZlcik7CisJaWYgKHBfZHJ2ICYmICFwX2Rldi0+X2xvY2tlZCkgewogCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIGVycl9wdXQ7CiAJfQogCiAJaWYgKGZpcnN0KQotCQlub2RlID0gcF9kZXYtPmluc3RhbmNlLT5kZXY7CisJCW5vZGUgPSBwX2Rldi0+ZGV2X25vZGU7CiAJZWxzZQotCQlmb3IgKG5vZGUgPSBwX2Rldi0+aW5zdGFuY2UtPmRldjsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpCisJCWZvciAobm9kZSA9IHBfZGV2LT5kZXZfbm9kZTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpCiAJCQlpZiAobm9kZSA9PSBiaW5kX2luZm8tPm5leHQpCiAJCQkJYnJlYWs7CiAJaWYgKCFub2RlKSB7CkBAIC00MTAsNyArNDI2LDcgQEAKIAogICAgIGlmICghd2FybmluZ19wcmludGVkKSB7CiAJICAgIHByaW50ayhLRVJOX0lORk8gInBjbWNpYTogRGV0ZWN0ZWQgZGVwcmVjYXRlZCBQQ01DSUEgaW9jdGwgIgotCQkJInVzYWdlLlxuIik7CisJCQkidXNhZ2UgZnJvbSBwcm9jZXNzOiAlcy5cbiIsIGN1cnJlbnQtPmNvbW0pOwogCSAgICBwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IFRoaXMgaW50ZXJmYWNlIHdpbGwgc29vbiBiZSByZW1vdmVkIGZyb20gIgogCQkJInRoZSBrZXJuZWw7IHBsZWFzZSBleHBlY3QgYnJlYWthZ2UgdW5sZXNzIHlvdSB1cGdyYWRlICIKIAkJCSJ0byBuZXcgdG9vbHMuXG4iKTsKQEAgLTU4MywxNCArNTk5LDIwIEBACiAJaWYgKGJ1Zi0+Y29uZmlnLkZ1bmN0aW9uICYmCiAJICAgKGJ1Zi0+Y29uZmlnLkZ1bmN0aW9uID49IHMtPmZ1bmN0aW9ucykpCiAJICAgIHJldCA9IENTX0JBRF9BUkdTOwotCWVsc2UKLQkgICAgcmV0ID0gcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8ocywKLQkJCWJ1Zi0+Y29uZmlnLkZ1bmN0aW9uLCAmYnVmLT5jb25maWcpOworCWVsc2UgeworCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPmNvbmZpZy5GdW5jdGlvbik7CisJICAgIGlmIChwX2RldiA9PSBOVUxMKQorCQkgICAgcmV0ID0gQ1NfQkFEX0FSR1M7CisJICAgIGVsc2UgeworCQkgICAgcmV0ID0gcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8ocywgcF9kZXYsICZidWYtPmNvbmZpZyk7CisJCSAgICBwY21jaWFfcHV0X2RldihwX2Rldik7CisJICAgIH0KKwl9CiAJYnJlYWs7CiAgICAgY2FzZSBEU19HRVRfRklSU1RfVFVQTEU6Ci0JZG93bigmcy0+c2t0X3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAlwY21jaWFfdmFsaWRhdGVfbWVtKHMpOwotCXVwKCZzLT5za3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7CiAJcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJmJ1Zi0+dHVwbGUpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfR0VUX05FWFRfVFVQTEU6CkBAIC02MDksMTYgKzYzMSwyMyBAQAogCXJldCA9IHBjY2FyZF9yZXNldF9jYXJkKHMpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfR0VUX1NUQVRVUzoKLQlpZiAoYnVmLT5zdGF0dXMuRnVuY3Rpb24gJiYKLQkgICAoYnVmLT5zdGF0dXMuRnVuY3Rpb24gPj0gcy0+ZnVuY3Rpb25zKSkKLQkgICAgcmV0ID0gQ1NfQkFEX0FSR1M7Ci0JZWxzZQotCXJldCA9IHBjY2FyZF9nZXRfc3RhdHVzKHMsIGJ1Zi0+c3RhdHVzLkZ1bmN0aW9uLCAmYnVmLT5zdGF0dXMpOwotCWJyZWFrOworCSAgICBpZiAoYnVmLT5zdGF0dXMuRnVuY3Rpb24gJiYKKwkJKGJ1Zi0+c3RhdHVzLkZ1bmN0aW9uID49IHMtPmZ1bmN0aW9ucykpCisJCSAgICByZXQgPSBDU19CQURfQVJHUzsKKwkgICAgZWxzZSB7CisJCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPnN0YXR1cy5GdW5jdGlvbik7CisJCSAgICBpZiAocF9kZXYgPT0gTlVMTCkKKwkJCSAgICByZXQgPSBDU19CQURfQVJHUzsKKwkJICAgIGVsc2UgeworCQkJICAgIHJldCA9IHBjY2FyZF9nZXRfc3RhdHVzKHMsIHBfZGV2LCAmYnVmLT5zdGF0dXMpOworCQkJICAgIHBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKKwkJICAgIH0KKwkgICAgfQorCSAgICBicmVhazsKICAgICBjYXNlIERTX1ZBTElEQVRFX0NJUzoKLQlkb3duKCZzLT5za3Rfc2VtKTsKKwltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwogCXBjbWNpYV92YWxpZGF0ZV9tZW0ocyk7Ci0JdXAoJnMtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKIAlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmYnVmLT5jaXNpbmZvKTsKIAlicmVhazsKICAgICBjYXNlIERTX1NVU1BFTkRfQ0FSRDoKQEAgLTYzOCwxMiArNjY3LDE3IEBACiAJICAgIGVyciA9IC1FUEVSTTsKIAkgICAgZ290byBmcmVlX291dDsKIAl9Ci0JaWYgKGJ1Zi0+Y29uZl9yZWcuRnVuY3Rpb24gJiYKLQkgICAoYnVmLT5jb25mX3JlZy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKQotCSAgICByZXQgPSBDU19CQURfQVJHUzsKLQllbHNlCi0JICAgIHJldCA9IHBjY2FyZF9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihzLAotCQkJYnVmLT5jb25mX3JlZy5GdW5jdGlvbiwgJmJ1Zi0+Y29uZl9yZWcpOworCisJcmV0ID0gQ1NfQkFEX0FSR1M7CisKKwlpZiAoIShidWYtPmNvbmZfcmVnLkZ1bmN0aW9uICYmCisJICAgICAoYnVmLT5jb25mX3JlZy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKSkgeworCQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPmNvbmZfcmVnLkZ1bmN0aW9uKTsKKwkJaWYgKHBfZGV2KSB7CisJCQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIocF9kZXYsICZidWYtPmNvbmZfcmVnKTsKKwkJCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKKwkJfQorCX0KIAlicmVhazsKICAgICBjYXNlIERTX0dFVF9GSVJTVF9SRUdJT046CiAgICAgY2FzZSBEU19HRVRfTkVYVF9SRUdJT046CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCmluZGV4IDg5MDIyYWQuLjMxMzFiYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTg5LDcgKzg4LDYgQEAKIAl9CiAJaWYgKChzLT5mZWF0dXJlcyAmIFNTX0NBUF9TVEFUSUNfTUFQKSAmJiBzLT5pb19vZmZzZXQpIHsKIAkJKmJhc2UgPSBzLT5pb19vZmZzZXQgfCAoKmJhc2UgJiAweDBmZmYpOwotCQlzLT5pb1swXS5BdHRyaWJ1dGVzID0gYXR0cjsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIENoZWNrIGZvciBhbiBhbHJlYWR5LWFsbG9jYXRlZCB3aW5kb3cgdGhhdCBtdXN0IGNvbmZsaWN0IHdpdGgKQEAgLTk3LDM4ICs5NSwzNiBAQAogCSAqIHBvdGVudGlhbCBjb25mbGljdHMsIGp1c3QgdGhlIG1vc3Qgb2J2aW91cyBvbmVzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspCi0JCWlmICgocy0+aW9baV0uTnVtUG9ydHMgIT0gMCkgJiYKLQkJICAgICgocy0+aW9baV0uQmFzZVBvcnQgJiAoYWxpZ24tMSkpID09ICpiYXNlKSkKKwkJaWYgKChzLT5pb1tpXS5yZXMpICYmCisJCSAgICAoKHMtPmlvW2ldLnJlcy0+c3RhcnQgJiAoYWxpZ24tMSkpID09ICpiYXNlKSkKIAkJCXJldHVybiAxOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspIHsKLQkJaWYgKHMtPmlvW2ldLk51bVBvcnRzID09IDApIHsKKwkJaWYgKCFzLT5pb1tpXS5yZXMpIHsKIAkJCXMtPmlvW2ldLnJlcyA9IHBjbWNpYV9maW5kX2lvX3JlZ2lvbigqYmFzZSwgbnVtLCBhbGlnbiwgcyk7CiAJCQlpZiAocy0+aW9baV0ucmVzKSB7Ci0JCQkJcy0+aW9baV0uQXR0cmlidXRlcyA9IGF0dHI7Ci0JCQkJcy0+aW9baV0uQmFzZVBvcnQgPSAqYmFzZSA9IHMtPmlvW2ldLnJlcy0+c3RhcnQ7Ci0JCQkJcy0+aW9baV0uTnVtUG9ydHMgPSBzLT5pb1tpXS5JblVzZSA9IG51bTsKKwkJCQkqYmFzZSA9IHMtPmlvW2ldLnJlcy0+c3RhcnQ7CisJCQkJcy0+aW9baV0ucmVzLT5mbGFncyA9IChzLT5pb1tpXS5yZXMtPmZsYWdzICYgfklPUkVTT1VSQ0VfQklUUykgfCAoYXR0ciAmIElPUkVTT1VSQ0VfQklUUyk7CisJCQkJcy0+aW9baV0uSW5Vc2UgPSBudW07CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UKIAkJCQlyZXR1cm4gMTsKLQkJfSBlbHNlIGlmIChzLT5pb1tpXS5BdHRyaWJ1dGVzICE9IGF0dHIpCisJCX0gZWxzZSBpZiAoKHMtPmlvW2ldLnJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JJVFMpICE9IChhdHRyICYgSU9SRVNPVVJDRV9CSVRTKSkKIAkJCWNvbnRpbnVlOwogCQkvKiBUcnkgdG8gZXh0ZW5kIHRvcCBvZiB3aW5kb3cgKi8KLQkJdHJ5ID0gcy0+aW9baV0uQmFzZVBvcnQgKyBzLT5pb1tpXS5OdW1Qb3J0czsKKwkJdHJ5ID0gcy0+aW9baV0ucmVzLT5lbmQgKyAxOwogCQlpZiAoKCpiYXNlID09IDApIHx8ICgqYmFzZSA9PSB0cnkpKQogCQkJaWYgKHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHMtPmlvW2ldLnJlcywgcy0+aW9baV0ucmVzLT5zdGFydCwKIAkJCQkJCSAgICBzLT5pb1tpXS5yZXMtPmVuZCArIG51bSwgcykgPT0gMCkgewogCQkJCSpiYXNlID0gdHJ5OwotCQkJCXMtPmlvW2ldLk51bVBvcnRzICs9IG51bTsKIAkJCQlzLT5pb1tpXS5JblVzZSArPSBudW07CiAJCQkJYnJlYWs7CiAJCQl9CiAJCS8qIFRyeSB0byBleHRlbmQgYm90dG9tIG9mIHdpbmRvdyAqLwotCQl0cnkgPSBzLT5pb1tpXS5CYXNlUG9ydCAtIG51bTsKKwkJdHJ5ID0gcy0+aW9baV0ucmVzLT5zdGFydCAtIG51bTsKIAkJaWYgKCgqYmFzZSA9PSAwKSB8fCAoKmJhc2UgPT0gdHJ5KSkKIAkJCWlmIChwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbihzLT5pb1tpXS5yZXMsIHMtPmlvW2ldLnJlcy0+c3RhcnQgLSBudW0sCiAJCQkJCQkgICAgcy0+aW9baV0ucmVzLT5lbmQsIHMpID09IDApIHsKLQkJCQlzLT5pb1tpXS5CYXNlUG9ydCA9ICpiYXNlID0gdHJ5OwotCQkJCXMtPmlvW2ldLk51bVBvcnRzICs9IG51bTsKKwkJCQkqYmFzZSA9IHRyeTsKIAkJCQlzLT5pb1tpXS5JblVzZSArPSBudW07CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xNDMsMTIgKzEzOSwxMyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykgewotCQlpZiAoKHMtPmlvW2ldLkJhc2VQb3J0IDw9IGJhc2UpICYmCi0JCSAgICAocy0+aW9baV0uQmFzZVBvcnQrcy0+aW9baV0uTnVtUG9ydHMgPj0gYmFzZStudW0pKSB7CisJCWlmICghcy0+aW9baV0ucmVzKQorCQkJY29udGludWU7CisJCWlmICgocy0+aW9baV0ucmVzLT5zdGFydCA8PSBiYXNlKSAmJgorCQkgICAgKHMtPmlvW2ldLnJlcy0+ZW5kID49IGJhc2UrbnVtLTEpKSB7CiAJCQlzLT5pb1tpXS5JblVzZSAtPSBudW07CiAJCQkvKiBGcmVlIHRoZSB3aW5kb3cgaWYgbm8gb25lIGVsc2UgaXMgdXNpbmcgaXQgKi8KIAkJCWlmIChzLT5pb1tpXS5JblVzZSA9PSAwKSB7Ci0JCQkJcy0+aW9baV0uTnVtUG9ydHMgPSAwOwogCQkJCXJlbGVhc2VfcmVzb3VyY2Uocy0+aW9baV0ucmVzKTsKIAkJCQlrZnJlZShzLT5pb1tpXS5yZXMpOwogCQkJCXMtPmlvW2ldLnJlcyA9IE5VTEw7CkBAIC0xNjUsMjEgKzE2MiwxOSBAQAogICogdGhpcyBhbmQgdGhlIHR1cGxlIHJlYWRpbmcgc2VydmljZXMuCiAgKi8KIAotaW50IHBjY2FyZF9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkJIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKK2ludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCQkgY29uZl9yZWdfdCAqcmVnKQogeworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogCWNvbmZpZ190ICpjOwogCWludCBhZGRyOwogCXVfY2hhciB2YWw7CiAKLQlpZiAoIXMgfHwgIXMtPmNvbmZpZykKKwlpZiAoIXBfZGV2IHx8ICFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKQogCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKIAotCWMgPSAmcy0+Y29uZmlnW2Z1bmN0aW9uXTsKLQotCWlmIChjID09IE5VTEwpCi0JCXJldHVybiBDU19OT19DQVJEOworCXMgPSBwX2Rldi0+c29ja2V0OworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCEoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSkKIAkJcmV0dXJuIENTX0NPTkZJR1VSQVRJT05fTE9DS0VEOwpAQCAtMjAwLDIwICsxOTUsMTIgQEAKIAkJYnJlYWs7CiAJfQogCXJldHVybiBDU19TVUNDRVNTOwotfSAvKiBwY2NhcmRfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIgKi8KLQotaW50IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCi0JCQkJCSBjb25mX3JlZ190ICpyZWcpCi17Ci0JcmV0dXJuIHBjY2FyZF9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihwX2Rldi0+c29ja2V0LAotCQkJCQkJICAgIHBfZGV2LT5mdW5jLCByZWcpOwotfQorfSAvKiBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKTsKIAogCi0KIGludCBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkgIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJCQkgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQkgIGNvbmZpZ19pbmZvX3QgKmNvbmZpZykKIHsKIAljb25maWdfdCAqYzsKQEAgLTIyMSw3ICsyMDgsNiBAQAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKIAotCWNvbmZpZy0+RnVuY3Rpb24gPSBmdW5jdGlvbjsKIAogI2lmZGVmIENPTkZJR19DQVJEQlVTCiAJaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKQEAgLTIzNSwxNCArMjIxLDIyIEBACiAJCQljb25maWctPkFzc2lnbmVkSVJRID0gcy0+aXJxLkFzc2lnbmVkSVJROwogCQkJaWYgKGNvbmZpZy0+QXNzaWduZWRJUlEpCiAJCQkJY29uZmlnLT5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQkJCWNvbmZpZy0+QmFzZVBvcnQxID0gcy0+aW9bMF0uQmFzZVBvcnQ7Ci0JCQljb25maWctPk51bVBvcnRzMSA9IHMtPmlvWzBdLk51bVBvcnRzOworCQkJaWYgKHMtPmlvWzBdLnJlcykgeworCQkJCWNvbmZpZy0+QmFzZVBvcnQxID0gcy0+aW9bMF0ucmVzLT5zdGFydDsKKwkJCQljb25maWctPk51bVBvcnRzMSA9IHMtPmlvWzBdLnJlcy0+ZW5kIC0gY29uZmlnLT5CYXNlUG9ydDEgKyAxOworCQkJfQogCQl9CiAJCXJldHVybiBDU19TVUNDRVNTOwogCX0KICNlbmRpZgogCi0JYyA9IChzLT5jb25maWcgIT0gTlVMTCkgPyAmcy0+Y29uZmlnW2Z1bmN0aW9uXSA6IE5VTEw7CisJaWYgKHBfZGV2KSB7CisJCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOworCQljb25maWctPkZ1bmN0aW9uID0gcF9kZXYtPmZ1bmM7CisJfSBlbHNlIHsKKwkJYyA9IE5VTEw7CisJCWNvbmZpZy0+RnVuY3Rpb24gPSAwOworCX0KIAogCWlmICgoYyA9PSBOVUxMKSB8fCAhKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpIHsKIAkJY29uZmlnLT5BdHRyaWJ1dGVzID0gMDsKQEAgLTI3MSw3ICsyNjUsNyBAQAogaW50IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQkgIGNvbmZpZ19pbmZvX3QgKmNvbmZpZykKIHsKLQlyZXR1cm4gcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8ocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsCisJcmV0dXJuIHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHBfZGV2LT5zb2NrZXQsIHBfZGV2LAogCQkJCQkgICAgIGNvbmZpZyk7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKTsKQEAgLTMxNyw3ICszMTEsNyBAQAogICogU29ja2V0U3RhdGUgeWV0OiBJIGhhdmVuJ3Qgc2VlbiBhbnkgcG9pbnQgZm9yIGl0LgogICovCiAKLWludCBwY2NhcmRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAoraW50IHBjY2FyZF9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCiAJCSAgICAgIGNzX3N0YXR1c190ICpzdGF0dXMpCiB7CiAJY29uZmlnX3QgKmM7CkBAIC0zMzQsMTEgKzMyOCwxMiBAQAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKIAotCWMgPSAocy0+Y29uZmlnICE9IE5VTEwpID8gJnMtPmNvbmZpZ1tmdW5jdGlvbl0gOiBOVUxMOworCWMgPSAocF9kZXYpID8gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZyA6IE5VTEw7CisKIAlpZiAoKGMgIT0gTlVMTCkgJiYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkgJiYKIAkgICAgKGMtPkludFR5cGUgJiAoSU5UX01FTU9SWV9BTkRfSU8gfCBJTlRfWk9PTUVEX1ZJREVPKSkpIHsKIAkJdV9jaGFyIHJlZzsKLQkJaWYgKGMtPlByZXNlbnQgJiBQUkVTRU5UX1BJTl9SRVBMQUNFKSB7CisJCWlmIChjLT5DYXJkVmFsdWVzICYgUFJFU0VOVF9QSU5fUkVQTEFDRSkgewogCQkJcGNtY2lhX3JlYWRfY2lzX21lbShzLCAxLCAoYy0+Q29uZmlnQmFzZStDSVNSRUdfUFJSKT4+MSwgMSwgJnJlZyk7CiAJCQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQogCQkJCShyZWcgJiBQUlJfV1BfU1RBVFVTKSA/IENTX0VWRU5UX1dSSVRFX1BST1RFQ1QgOiAwOwpAQCAtMzUyLDcgKzM0Nyw3IEBACiAJCQkvKiBObyBQUlI/ICBUaGVuIGFzc3VtZSB3ZSdyZSBhbHdheXMgcmVhZHkgKi8KIAkJCXN0YXR1cy0+Q2FyZFN0YXRlIHw9IENTX0VWRU5UX1JFQURZX0NIQU5HRTsKIAkJfQotCQlpZiAoYy0+UHJlc2VudCAmIFBSRVNFTlRfRVhUX1NUQVRVUykgeworCQlpZiAoYy0+Q2FyZFZhbHVlcyAmIFBSRVNFTlRfRVhUX1NUQVRVUykgewogCQkJcGNtY2lhX3JlYWRfY2lzX21lbShzLCAxLCAoYy0+Q29uZmlnQmFzZStDSVNSRUdfRVNSKT4+MSwgMSwgJnJlZyk7CiAJCQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQogCQkJCShyZWcgJiBFU1JfUkVRX0FUVE4pID8gQ1NfRVZFTlRfUkVRVUVTVF9BVFRFTlRJT04gOiAwOwpAQCAtMzcwLDExICszNjUsOSBAQAogCXJldHVybiBDU19TVUNDRVNTOwogfSAvKiBwY2NhcmRfZ2V0X3N0YXR1cyAqLwogCi1pbnQgcGNtY2lhX2dldF9zdGF0dXMoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgY3Nfc3RhdHVzX3QgKnN0YXR1cykKK2ludCBwY21jaWFfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNzX3N0YXR1c190ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0JcyA9IFNPQ0tFVChoYW5kbGUpOwotCXJldHVybiBwY2NhcmRfZ2V0X3N0YXR1cyhzLCBoYW5kbGUtPmZ1bmMsIHN0YXR1cyk7CisJcmV0dXJuIHBjY2FyZF9nZXRfc3RhdHVzKHBfZGV2LT5zb2NrZXQsIHBfZGV2LCBzdGF0dXMpOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X3N0YXR1cyk7CiAKQEAgLTQyMiw3ICs0MTUsOCBAQAogCWNvbmZpZ190ICpjOwogCiAJcyA9IHBfZGV2LT5zb2NrZXQ7Ci0JYyA9IENPTkZJRyhwX2Rldik7CisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKIAkJcmV0dXJuIENTX05PX0NBUkQ7CiAJaWYgKCEoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSkKQEAgLTQ1NCw2ICs0NDgsMjggQEAKIAkJICAgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQpKQogCQlyZXR1cm4gQ1NfQkFEX1ZQUDsKIAorCWlmIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX0lPX0NIQU5HRV9XSURUSCkgeworCQlwY2NhcmRfaW9fbWFwIGlvX29mZiA9IHsgMCwgMCwgMCwgMCwgMSB9OworCQlwY2NhcmRfaW9fbWFwIGlvX29uOworCQlpbnQgaTsKKworCQlpb19vbi5zcGVlZCA9IGlvX3NwZWVkOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lPX1dJTjsgaSsrKSB7CisJCQlpZiAoIXMtPmlvW2ldLnJlcykKKwkJCQljb250aW51ZTsKKwkJCWlvX29mZi5tYXAgPSBpOworCQkJaW9fb24ubWFwID0gaTsKKworCQkJaW9fb24uZmxhZ3MgPSBNQVBfQUNUSVZFIHwgSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlpb19vbi5zdGFydCA9IHMtPmlvW2ldLnJlcy0+c3RhcnQ7CisJCQlpb19vbi5zdG9wID0gcy0+aW9baV0ucmVzLT5lbmQ7CisKKwkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW9fb2ZmKTsKKwkJCW1kZWxheSg0MCk7CisJCQlzLT5vcHMtPnNldF9pb19tYXAocywgJmlvX29uKTsKKwkJfQorCX0KKwogCXJldHVybiBDU19TVUNDRVNTOwogfSAvKiBtb2RpZnlfY29uZmlndXJhdGlvbiAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfbW9kaWZ5X2NvbmZpZ3VyYXRpb24pOwpAQCAtNDYzLDIzICs0NzksMjMgQEAKIHsKIAlwY2NhcmRfaW9fbWFwIGlvID0geyAwLCAwLCAwLCAwLCAxIH07CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OworCWNvbmZpZ190ICpjID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAlpbnQgaTsKIAotCWlmICghKHBfZGV2LT5zdGF0ZSAmIENMSUVOVF9DT05GSUdfTE9DS0VEKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0JcF9kZXYtPnN0YXRlICY9IH5DTElFTlRfQ09ORklHX0xPQ0tFRDsKLQotCWlmICghKHBfZGV2LT5zdGF0ZSAmIENMSUVOVF9TVEFMRSkpIHsKLQkJY29uZmlnX3QgKmMgPSBDT05GSUcocF9kZXYpOworCWlmIChwX2Rldi0+X2xvY2tlZCkgeworCQlwX2Rldi0+X2xvY2tlZCA9IDA7CiAJCWlmICgtLShzLT5sb2NrX2NvdW50KSA9PSAwKSB7CiAJCQlzLT5zb2NrZXQuZmxhZ3MgPSBTU19PVVRQVVRfRU5BOyAgIC8qIElzIHRoaXMgY29ycmVjdD8gKi8KIAkJCXMtPnNvY2tldC5WcHAgPSAwOwogCQkJcy0+c29ja2V0LmlvX2lycSA9IDA7CiAJCQlzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCk7CiAJCX0KKwl9CisJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkgeworCQljLT5zdGF0ZSAmPSB+Q09ORklHX0xPQ0tFRDsKIAkJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lPX1JFUSkKIAkJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspIHsKLQkJCQlpZiAocy0+aW9baV0uTnVtUG9ydHMgPT0gMCkKKwkJCQlpZiAoIXMtPmlvW2ldLnJlcykKIAkJCQkJY29udGludWU7CiAJCQkJcy0+aW9baV0uQ29uZmlnLS07CiAJCQkJaWYgKHMtPmlvW2ldLkNvbmZpZyAhPSAwKQpAQCAtNDg3LDEyICs1MDMsMTAgQEAKIAkJCQlpby5tYXAgPSBpOwogCQkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW8pOwogCQkJfQotCQljLT5zdGF0ZSAmPSB+Q09ORklHX0xPQ0tFRDsKIAl9CiAKIAlyZXR1cm4gQ1NfU1VDQ0VTUzsKIH0gLyogcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbiAqLwotRVhQT1JUX1NZTUJPTChwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKTsKIAogCiAvKiogcGNtY2lhX3JlbGVhc2VfaW8KQEAgLTUwMywyNSArNTE3LDIzIEBACiAgKiBkb24ndCBib3RoZXIgY2hlY2tpbmcgdGhlIHBvcnQgcmFuZ2VzIGFnYWluc3QgdGhlIGN1cnJlbnQgc29ja2V0CiAgKiB2YWx1ZXMuCiAgKi8KLWludCBwY21jaWFfcmVsZWFzZV9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpCitzdGF0aWMgaW50IHBjbWNpYV9yZWxlYXNlX2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CisJY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCi0JaWYgKCEocF9kZXYtPnN0YXRlICYgQ0xJRU5UX0lPX1JFUSkpCisJaWYgKCFwX2Rldi0+X2lvICkKIAkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0JcF9kZXYtPnN0YXRlICY9IH5DTElFTlRfSU9fUkVROwogCi0JaWYgKCEocF9kZXYtPnN0YXRlICYgQ0xJRU5UX1NUQUxFKSkgewotCQljb25maWdfdCAqYyA9IENPTkZJRyhwX2Rldik7Ci0JCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCi0JCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7Ci0JCWlmICgoYy0+aW8uQmFzZVBvcnQxICE9IHJlcS0+QmFzZVBvcnQxKSB8fAotCQkgICAgKGMtPmlvLk51bVBvcnRzMSAhPSByZXEtPk51bVBvcnRzMSkgfHwKLQkJICAgIChjLT5pby5CYXNlUG9ydDIgIT0gcmVxLT5CYXNlUG9ydDIpIHx8Ci0JCSAgICAoYy0+aW8uTnVtUG9ydHMyICE9IHJlcS0+TnVtUG9ydHMyKSkKLQkJCXJldHVybiBDU19CQURfQVJHUzsKLQkJYy0+c3RhdGUgJj0gfkNPTkZJR19JT19SRVE7Ci0JfQorCXBfZGV2LT5faW8gPSAwOworCisJaWYgKChjLT5pby5CYXNlUG9ydDEgIT0gcmVxLT5CYXNlUG9ydDEpIHx8CisJICAgIChjLT5pby5OdW1Qb3J0czEgIT0gcmVxLT5OdW1Qb3J0czEpIHx8CisJICAgIChjLT5pby5CYXNlUG9ydDIgIT0gcmVxLT5CYXNlUG9ydDIpIHx8CisJICAgIChjLT5pby5OdW1Qb3J0czIgIT0gcmVxLT5OdW1Qb3J0czIpKQorCQlyZXR1cm4gQ1NfQkFEX0FSR1M7CisKKwljLT5zdGF0ZSAmPSB+Q09ORklHX0lPX1JFUTsKIAogCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDEsIHJlcS0+TnVtUG9ydHMxKTsKIAlpZiAocmVxLT5OdW1Qb3J0czIpCkBAIC01MjksMjggKzU0MSwyNiBAQAogCiAJcmV0dXJuIENTX1NVQ0NFU1M7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2lvICovCi1FWFBPUlRfU1lNQk9MKHBjbWNpYV9yZWxlYXNlX2lvKTsKIAogCi1pbnQgcGNtY2lhX3JlbGVhc2VfaXJxKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaXJxX3JlcV90ICpyZXEpCitzdGF0aWMgaW50IHBjbWNpYV9yZWxlYXNlX2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlycV9yZXFfdCAqcmVxKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKLQlpZiAoIShwX2Rldi0+c3RhdGUgJiBDTElFTlRfSVJRX1JFUSkpCi0JCXJldHVybiBDU19CQURfSEFORExFOwotCXBfZGV2LT5zdGF0ZSAmPSB+Q0xJRU5UX0lSUV9SRVE7CisJY29uZmlnX3QgKmM9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKLQlpZiAoIShwX2Rldi0+c3RhdGUgJiBDTElFTlRfU1RBTEUpKSB7Ci0JCWNvbmZpZ190ICpjID0gQ09ORklHKHBfZGV2KTsKLQkJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKLQkJCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKLQkJaWYgKGMtPmlycS5BdHRyaWJ1dGVzICE9IHJlcS0+QXR0cmlidXRlcykKLQkJCXJldHVybiBDU19CQURfQVRUUklCVVRFOwotCQlpZiAocy0+aXJxLkFzc2lnbmVkSVJRICE9IHJlcS0+QXNzaWduZWRJUlEpCi0JCQlyZXR1cm4gQ1NfQkFEX0lSUTsKLQkJaWYgKC0tcy0+aXJxLkNvbmZpZyA9PSAwKSB7Ci0JCQljLT5zdGF0ZSAmPSB+Q09ORklHX0lSUV9SRVE7Ci0JCQlzLT5pcnEuQXNzaWduZWRJUlEgPSAwOwotCQl9CisJaWYgKCFwX2Rldi0+X2lycSkKKwkJcmV0dXJuIENTX0JBRF9IQU5ETEU7CisJcF9kZXYtPl9pcnEgPSAwOworCisJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKKwkJcmV0dXJuIENTX0NPTkZJR1VSQVRJT05fTE9DS0VEOworCWlmIChjLT5pcnEuQXR0cmlidXRlcyAhPSByZXEtPkF0dHJpYnV0ZXMpCisJCXJldHVybiBDU19CQURfQVRUUklCVVRFOworCWlmIChzLT5pcnEuQXNzaWduZWRJUlEgIT0gcmVxLT5Bc3NpZ25lZElSUSkKKwkJcmV0dXJuIENTX0JBRF9JUlE7CisJaWYgKC0tcy0+aXJxLkNvbmZpZyA9PSAwKSB7CisJCWMtPnN0YXRlICY9IH5DT05GSUdfSVJRX1JFUTsKKwkJcy0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAKIAlpZiAocmVxLT5BdHRyaWJ1dGVzICYgSVJRX0hBTkRMRV9QUkVTRU5UKSB7CkBAIC01NjMsNyArNTczLDYgQEAKIAogCXJldHVybiBDU19TVUNDRVNTOwogfSAvKiBwY21jaWFfcmVsZWFzZV9pcnEgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3JlbGVhc2VfaXJxKTsKIAogCiBpbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHdpbmRvd19oYW5kbGVfdCB3aW4pCkBAIC01NzMsNyArNTgyLDcgQEAKIAlpZiAoKHdpbiA9PSBOVUxMKSB8fCAod2luLT5tYWdpYyAhPSBXSU5ET1dfTUFHSUMpKQogCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKIAlzID0gd2luLT5zb2NrOwotCWlmICghKHdpbi0+aGFuZGxlLT5zdGF0ZSAmIENMSUVOVF9XSU5fUkVRKHdpbi0+aW5kZXgpKSkKKwlpZiAoISh3aW4tPmhhbmRsZS0+X3dpbiAmIENMSUVOVF9XSU5fUkVRKHdpbi0+aW5kZXgpKSkKIAkJcmV0dXJuIENTX0JBRF9IQU5ETEU7CiAKIAkvKiBTaHV0IGRvd24gbWVtb3J5IHdpbmRvdyAqLwpAQCAtNTg3LDcgKzU5Niw3IEBACiAJCWtmcmVlKHdpbi0+Y3RsLnJlcyk7CiAJCXdpbi0+Y3RsLnJlcyA9IE5VTEw7CiAJfQotCXdpbi0+aGFuZGxlLT5zdGF0ZSAmPSB+Q0xJRU5UX1dJTl9SRVEod2luLT5pbmRleCk7CisJd2luLT5oYW5kbGUtPl93aW4gJj0gfkNMSUVOVF9XSU5fUkVRKHdpbi0+aW5kZXgpOwogCiAJd2luLT5tYWdpYyA9IDA7CiAKQEAgLTYxMCwxNiArNjE5LDEyIEBACiAKIAlpZiAocmVxLT5JbnRUeXBlICYgSU5UX0NBUkRCVVMpCiAJCXJldHVybiBDU19VTlNVUFBPUlRFRF9NT0RFOwotCWMgPSBDT05GSUcocF9kZXYpOworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCiAJCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKIAogCS8qIERvIHBvd2VyIGNvbnRyb2wuICBXZSBkb24ndCBhbGxvdyBjaGFuZ2VzIGluIFZjYy4gKi8KLQlpZiAocy0+c29ja2V0LlZjYyAhPSByZXEtPlZjYykKLQkJcmV0dXJuIENTX0JBRF9WQ0M7Ci0JaWYgKHJlcS0+VnBwMSAhPSByZXEtPlZwcDIpCi0JCXJldHVybiBDU19CQURfVlBQOwotCXMtPnNvY2tldC5WcHAgPSByZXEtPlZwcDE7CisJcy0+c29ja2V0LlZwcCA9IHJlcS0+VnBwOwogCWlmIChzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCkpCiAJCXJldHVybiBDU19CQURfVlBQOwogCkBAIC02NDMsNyArNjQ4LDcgQEAKIAogCS8qIFNldCB1cCBDSVMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KIAliYXNlID0gYy0+Q29uZmlnQmFzZSA9IHJlcS0+Q29uZmlnQmFzZTsKLQljLT5QcmVzZW50ID0gYy0+Q2FyZFZhbHVlcyA9IHJlcS0+UHJlc2VudDsKKwljLT5DYXJkVmFsdWVzID0gcmVxLT5QcmVzZW50OwogCWlmIChyZXEtPlByZXNlbnQgJiBQUkVTRU5UX0NPUFkpIHsKIAkJYy0+Q29weSA9IHJlcS0+Q29weTsKIAkJcGNtY2lhX3dyaXRlX2Npc19tZW0ocywgMSwgKGJhc2UgKyBDSVNSRUdfU0NSKT4+MSwgMSwgJmMtPkNvcHkpOwpAQCAtNjkwLDEwICs2OTUsMTAgQEAKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKSB7CiAJCWlvbWFwLnNwZWVkID0gaW9fc3BlZWQ7CiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspCi0JCQlpZiAocy0+aW9baV0uTnVtUG9ydHMgIT0gMCkgeworCQkJaWYgKHMtPmlvW2ldLnJlcykgewogCQkJCWlvbWFwLm1hcCA9IGk7CiAJCQkJaW9tYXAuZmxhZ3MgPSBNQVBfQUNUSVZFOwotCQkJCXN3aXRjaCAocy0+aW9baV0uQXR0cmlidXRlcyAmIElPX0RBVEFfUEFUSF9XSURUSCkgeworCQkJCXN3aXRjaCAocy0+aW9baV0ucmVzLT5mbGFncyAmIElPX0RBVEFfUEFUSF9XSURUSCkgewogCQkJCWNhc2UgSU9fREFUQV9QQVRIX1dJRFRIXzE2OgogCQkJCQlpb21hcC5mbGFncyB8PSBNQVBfMTZCSVQ7IGJyZWFrOwogCQkJCWNhc2UgSU9fREFUQV9QQVRIX1dJRFRIX0FVVE86CkBAIC03MDEsMTUgKzcwNiwxNSBAQAogCQkJCWRlZmF1bHQ6CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlpb21hcC5zdGFydCA9IHMtPmlvW2ldLkJhc2VQb3J0OwotCQkJCWlvbWFwLnN0b3AgPSBpb21hcC5zdGFydCArIHMtPmlvW2ldLk51bVBvcnRzIC0gMTsKKwkJCQlpb21hcC5zdGFydCA9IHMtPmlvW2ldLnJlcy0+c3RhcnQ7CisJCQkJaW9tYXAuc3RvcCA9IHMtPmlvW2ldLnJlcy0+ZW5kOwogCQkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW9tYXApOwogCQkJCXMtPmlvW2ldLkNvbmZpZysrOwogCQkJfQogCX0KIAogCWMtPnN0YXRlIHw9IENPTkZJR19MT0NLRUQ7Ci0JcF9kZXYtPnN0YXRlIHw9IENMSUVOVF9DT05GSUdfTE9DS0VEOworCXBfZGV2LT5fbG9ja2VkID0gMTsKIAlyZXR1cm4gQ1NfU1VDQ0VTUzsKIH0gLyogcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbiAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKTsKQEAgLTczMCw3ICs3MzUsNyBAQAogCiAJaWYgKCFyZXEpCiAJCXJldHVybiBDU19VTlNVUFBPUlRFRF9NT0RFOwotCWMgPSBDT05GSUcocF9kZXYpOworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCiAJCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKQpAQCAtNzU1LDcgKzc2MCw3IEBACiAKIAljLT5pbyA9ICpyZXE7CiAJYy0+c3RhdGUgfD0gQ09ORklHX0lPX1JFUTsKLQlwX2Rldi0+c3RhdGUgfD0gQ0xJRU5UX0lPX1JFUTsKKwlwX2Rldi0+X2lvID0gMTsKIAlyZXR1cm4gQ1NfU1VDQ0VTUzsKIH0gLyogcGNtY2lhX3JlcXVlc3RfaW8gKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaW8pOwpAQCAtNzg2LDcgKzc5MSw3IEBACiAKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKIAkJcmV0dXJuIENTX05PX0NBUkQ7Ci0JYyA9IENPTkZJRyhwX2Rldik7CisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKIAkJcmV0dXJuIENTX0NPTkZJR1VSQVRJT05fTE9DS0VEOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JUlFfUkVRKQpAQCAtODUxLDcgKzg1Niw3IEBACiAJcy0+aXJxLkNvbmZpZysrOwogCiAJYy0+c3RhdGUgfD0gQ09ORklHX0lSUV9SRVE7Ci0JcF9kZXYtPnN0YXRlIHw9IENMSUVOVF9JUlFfUkVROworCXBfZGV2LT5faXJxID0gMTsKIAogI2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkUKIAlwY21jaWFfdXNlZF9pcnFbaXJxXSsrOwpAQCAtOTExLDcgKzkxNiw3IEBACiAJCWlmICghd2luLT5jdGwucmVzKQogCQkJcmV0dXJuIENTX0lOX1VTRTsKIAl9Ci0JKCpwX2RldiktPnN0YXRlIHw9IENMSUVOVF9XSU5fUkVRKHcpOworCSgqcF9kZXYpLT5fd2luIHw9IENMSUVOVF9XSU5fUkVRKHcpOwogCiAJLyogQ29uZmlndXJlIHRoZSBzb2NrZXQgY29udHJvbGxlciAqLwogCXdpbi0+Y3RsLm1hcCA9IHcrMTsKQEAgLTk0MSwzICs5NDYsMTIgQEAKIAlyZXR1cm4gQ1NfU1VDQ0VTUzsKIH0gLyogcGNtY2lhX3JlcXVlc3Rfd2luZG93ICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyk7CisKK3ZvaWQgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikgeworCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24ocF9kZXYpOworCXBjbWNpYV9yZWxlYXNlX2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlwY21jaWFfcmVsZWFzZV9pcnEocF9kZXYsICZwX2Rldi0+aXJxKTsKKwlpZiAoJnBfZGV2LT53aW4pCisJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhwX2Rldi0+d2luKTsKK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX2Rpc2FibGVfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKaW5kZXggZjI3ODlhZi4uMjQ3YWI4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKQEAgLTgsNyArOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTU5MCw3ICs1ODksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdV9pbnQgX19pbml0IHBkNjcyOV9pc2Ffc2Nhbih2b2lkKQorc3RhdGljIHVfaW50IF9fZGV2aW5pdCBwZDY3MjlfaXNhX3NjYW4odm9pZCkKIHsKIAl1X2ludCBtYXNrMCwgbWFzayA9IDA7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc2hhcnBzbC5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYwppbmRleCBmZDM2NDczLi5iN2I5ZTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc2hhcnBzbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMKQEAgLTI2LDE0ICsyNiw2IEBACiAjaW5jbHVkZSAic29jX2NvbW1vbi5oIgogCiAjZGVmaW5lCU5PX0tFRVBfVlMgMHgwMDAxCi0KLS8qIFBDTUNJQSB0byBTY29vcCBsaW5rYWdlCi0KLSAgIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGxpbmsgbXVsdGlwbGUgc2Nvb3AgZGV2aWNlcyBpbnRvIG9uZQotICAgc2luZ2xlIGVudGl0eSBmb3IgdGhlIHB4YTJ4eF9wY21jaWEgZGV2aWNlIHNvIHRoaXMgc3RydWN0dXJlCi0gICBpcyB1c2VkIHdoaWNoIGlzIHNldHVwIGJ5IHRoZSBwbGF0Zm9ybSBjb2RlCi0qLwotc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKICNkZWZpbmUgU0NPT1BfREVWIHBsYXRmb3JtX3Njb29wX2NvbmZpZy0+ZGV2cwogCiBzdGF0aWMgdm9pZCBzaGFycHNsX3BjbWNpYV9pbml0X3Jlc2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggNTE0NjA5My4uODFkZmMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAoQykgMTk5OQkJRGF2aWQgQS4gSGluZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKQEAgLTIyLDYgKzIxLDggQEAKICNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCiAKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCisKICNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCiAKIHN0YXRpYyBpbnQgYWRqdXN0X2lycShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgYWRqdXN0X3QgKmFkaikKQEAgLTk4LDYgKzk5LDggQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2FkanVzdF9yZXNvdXJjZV9pbmZvKTsKIAorI2VuZGlmCisKIGludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCWlmIChzLT5yZXNvdXJjZV9vcHMtPnZhbGlkYXRlX21lbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCmluZGV4IDUzMDFhYzYuLjBmOGIxNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwpAQCAtMTIsNyArMTIsNiBAQAogICogKEMpIDE5OTkJCURhdmlkIEEuIEhpbmRzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNjEsNyArNjAsNyBAQAogCXVuc2lnbmVkIGludAkJCXJzcmNfbWVtX3Byb2JlOwogfTsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgocnNyY19zZW0pOworc3RhdGljIERFRklORV9NVVRFWChyc3JjX211dGV4KTsKICNkZWZpbmUgTUVNX1BST0JFX0xPVwkoMSA8PCAwKQogI2RlZmluZSBNRU1fUFJPQkVfSElHSAkoMSA8PCAxKQogCkBAIC00ODQsNyArNDgzLDcgQEAKIAogCiAvKgotICogTG9ja2luZyBub3RlOiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNrdF9zZW0gaGVsZCEKKyAqIExvY2tpbmcgbm90ZTogTXVzdCBiZSBjYWxsZWQgd2l0aCBza3RfbXV0ZXggaGVsZCEKICAqLwogc3RhdGljIGludCBwY21jaWFfbm9uc3RhdGljX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKQEAgLTQ5NSw3ICs0OTQsNyBAQAogCWlmICghcHJvYmVfbWVtKQogCQlyZXR1cm4gMDsKIAotCWRvd24oJnJzcmNfc2VtKTsKKwltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAogCWlmIChzLT5mZWF0dXJlcyAmIFNTX0NBUF9QQUdFX1JFR1MpCiAJCXByb2JlX21hc2sgPSBNRU1fUFJPQkVfSElHSDsKQEAgLTUwNyw3ICs1MDYsNyBAQAogCQkJc19kYXRhLT5yc3JjX21lbV9wcm9iZSB8PSBwcm9iZV9tYXNrOwogCX0KIAotCXVwKCZyc3JjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01ODUsNyArNTg0LDcgQEAKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKLQlkb3duKCZyc3JjX3NlbSk7CisJbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAJZm9yIChtID0gc19kYXRhLT5pb19kYi5uZXh0OyBtICE9ICZzX2RhdGEtPmlvX2RiOyBtID0gbS0+bmV4dCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbS0+YmFzZTsKIAkJdW5zaWduZWQgbG9uZyBlbmQgPSBtLT5iYXNlICsgbS0+bnVtIC0gMTsKQEAgLTU5Niw3ICs1OTUsNyBAQAogCQlyZXQgPSBhZGp1c3RfcmVzb3VyY2UocmVzLCByX3N0YXJ0LCByX2VuZCAtIHJfc3RhcnQgKyAxKTsKIAkJYnJlYWs7CiAJfQotCXVwKCZyc3JjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02MzAsNyArNjI5LDcgQEAKIAlkYXRhLm9mZnNldCA9IGJhc2UgJiBkYXRhLm1hc2s7CiAJZGF0YS5tYXAgPSAmc19kYXRhLT5pb19kYjsKIAotCWRvd24oJnJzcmNfc2VtKTsKKwltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKICNpZmRlZiBDT05GSUdfUENJCiAJaWYgKHMtPmNiX2RldikgewogCQlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHMtPmNiX2Rldi0+YnVzLCByZXMsIG51bSwgMSwKQEAgLTYzOSw3ICs2MzgsNyBAQAogI2VuZGlmCiAJCXJldCA9IGFsbG9jYXRlX3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIHJlcywgbnVtLCBtaW4sIH4wVUwsCiAJCQkJCTEsIHBjbWNpYV9hbGlnbiwgJmRhdGEpOwotCXVwKCZyc3JjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCWlmIChyZXQgIT0gMCkgewogCQlrZnJlZShyZXMpOwpAQCAtNjcyLDcgKzY3MSw3IEBACiAJCQltaW4gPSAweDEwMDAwMFVMICsgYmFzZTsKIAkJfQogCi0JCWRvd24oJnJzcmNfc2VtKTsKKwkJbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAjaWZkZWYgQ09ORklHX1BDSQogCQlpZiAocy0+Y2JfZGV2KSB7CiAJCQlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHMtPmNiX2Rldi0+YnVzLCByZXMsIG51bSwKQEAgLTY4Miw3ICs2ODEsNyBAQAogI2VuZGlmCiAJCQlyZXQgPSBhbGxvY2F0ZV9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcywgbnVtLCBtaW4sCiAJCQkJCQltYXgsIDEsIHBjbWNpYV9hbGlnbiwgJmRhdGEpOwotCQl1cCgmcnNyY19zZW0pOworCQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCQlpZiAocmV0ID09IDAgfHwgbG93KQogCQkJYnJlYWs7CiAJCWxvdyA9IDE7CkBAIC03MDUsNyArNzA0LDcgQEAKIAlpZiAoZW5kIDwgc3RhcnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG93bigmcnNyY19zZW0pOworCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBBRERfTUFOQUdFRF9SRVNPVVJDRToKIAkJcmV0ID0gYWRkX2ludGVydmFsKCZkYXRhLT5tZW1fZGIsIHN0YXJ0LCBzaXplKTsKQEAgLTcyMyw3ICs3MjIsNyBAQAogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQotCXVwKCZyc3JjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NDEsNyArNzQwLDcgQEAKIAlpZiAoZW5kID4gSU9fU1BBQ0VfTElNSVQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG93bigmcnNyY19zZW0pOworCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBBRERfTUFOQUdFRF9SRVNPVVJDRToKIAkJaWYgKGFkZF9pbnRlcnZhbCgmZGF0YS0+aW9fZGIsIHN0YXJ0LCBzaXplKSAhPSAwKSB7CkBAIC03NjAsNyArNzU5LDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCXVwKCZyc3JjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04NjcsNyArODY2LDcgQEAKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKmRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOwogCi0JZG93bigmcnNyY19zZW0pOworCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCWZvciAocCA9IGRhdGEtPm1lbV9kYi5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGI7IHAgPSBxKSB7CiAJCXEgPSBwLT5uZXh0OwogCQlrZnJlZShwKTsKQEAgLTg3Niw3ICs4NzUsNyBAQAogCQlxID0gcC0+bmV4dDsKIAkJa2ZyZWUocCk7CiAJfQotCXVwKCZyc3JjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIH0KIAogCkBAIC05MDEsNyArOTAwLDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwOwogCXNzaXplX3QgcmV0ID0gMDsKIAotCWRvd24oJnJzcmNfc2VtKTsKKwltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAlkYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAogCWZvciAocCA9IGRhdGEtPmlvX2RiLm5leHQ7IHAgIT0gJmRhdGEtPmlvX2RiOyBwID0gcC0+bmV4dCkgewpAQCAtOTEzLDcgKzkxMiw3IEBACiAJCQkJICgodW5zaWduZWQgbG9uZykgcC0+YmFzZSArIHAtPm51bSAtIDEpKTsKIAl9CiAKLQl1cCgmcnNyY19zZW0pOworCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiAJcmV0dXJuIChyZXQpOwogfQogCkBAIC05NTMsNyArOTUyLDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwOwogCXNzaXplX3QgcmV0ID0gMDsKIAotCWRvd24oJnJzcmNfc2VtKTsKKwltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAlkYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAogCWZvciAocCA9IGRhdGEtPm1lbV9kYi5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGI7IHAgPSBwLT5uZXh0KSB7CkBAIC05NjUsNyArOTY0LDcgQEAKIAkJCQkgKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlICsgcC0+bnVtIC0gMSkpOwogCX0KIAotCXVwKCZyc3JjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAlyZXR1cm4gKHJldCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9jZXJmLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfY2VyZi5jCmluZGV4IDJiM2MyODkuLmViODk5MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9jZXJmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2NlcmYuYwpAQCAtNSw3ICs1LDYgQEAKICAqIEJhc2VkIG9mZiB0aGUgQXNzYWJldC4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCA1YWIxY2RlLi5jNWQ3NDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTI1LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtMTgzLDcgKzE4Myw3IEBACiAJCXMtPnJlc291cmNlX3NldHVwX2RvbmUgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAotCWRvd24oJnMtPnNrdF9zZW0pOworCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7CiAJaWYgKChzLT5jYWxsYmFjaykgJiYKIAkgICAgKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpICYmCiAJICAgICEocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpIHsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQkJbW9kdWxlX3B1dChzLT5jYWxsYmFjay0+b3duZXIpOwogCQl9CiAJfQotCXVwKCZzLT5za3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0zMjIsNyArMzIyLDcgQEAKIAlrZnJlZShjaXMpOwogCiAJaWYgKCFyZXQpIHsKLQkJZG93bigmcy0+c2t0X3NlbSk7CisJCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7CiAJCWlmICgocy0+Y2FsbGJhY2spICYmIChzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSAmJgogCQkgICAgIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgewogCQkJaWYgKHRyeV9tb2R1bGVfZ2V0KHMtPmNhbGxiYWNrLT5vd25lcikpIHsKQEAgLTMzMCw3ICszMzAsNyBAQAogCQkJCW1vZHVsZV9wdXQocy0+Y2FsbGJhY2stPm93bmVyKTsKIAkJCX0KIAkJfQotCQl1cCgmcy0+c2t0X3NlbSk7CisJCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGkxMTN4LmggYi9kcml2ZXJzL3BjbWNpYS90aTExM3guaAppbmRleCBkNWI0ZmY3Li43YTNkMWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90aTExM3guaAorKysgYi9kcml2ZXJzL3BjbWNpYS90aTExM3guaApAQCAtMzAsNyArMzAsNiBAQAogI2lmbmRlZiBfTElOVVhfVEkxMTNYX0gKICNkZWZpbmUgX0xJTlVYX1RJMTEzWF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIFRJIDExM1ggUENJLXRvLUNhcmRCdXMgYnJpZGdlcyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCmluZGV4IDA1NzRlZmQuLjQ1OWU2ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCkBAIC02MzQsNyArNjM0LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZyYzQxNzFfY2FyZF9zZXR1cChjaGFyICpvcHRpb25zKQogewogCWlmIChvcHRpb25zID09IE5VTEwgfHwgKm9wdGlvbnMgPT0gJ1wwJykKLQkJcmV0dXJuIDA7CisJCXJldHVybiAxOwogCiAJaWYgKHN0cm5jbXAob3B0aW9ucywgImlycToiLCA0KSA9PSAwKSB7CiAJCWludCBpcnE7CkBAIC02NDQsNyArNjQ0LDcgQEAKIAkJCXZyYzQxNzFfaXJxID0gaXJxOwogCiAJCWlmICgqb3B0aW9ucyAhPSAnLCcpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAxOwogCQlvcHRpb25zKys7CiAJfQogCkBAIC02NjMsMTAgKzY2MywxMCBAQAogCQkJfQogCiAJCQlpZiAoKm9wdGlvbnMgIT0gJywnKQotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAxOwogCQkJb3B0aW9ucysrOwogCQl9IGVsc2UKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIDE7CiAKIAl9CiAKQEAgLTY4OCw3ICs2ODgsNyBAQAogCQkJfQogCiAJCQlpZiAoKm9wdGlvbnMgIT0gJywnKQotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAxOwogCQkJb3B0aW9ucysrOwogCiAJCQlpZiAoc3RybmNtcChvcHRpb25zLCAibWVtbm9wcm9iZSIsIDEwKSA9PSAwKQpAQCAtNzAwLDcgKzcwMCw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgidnJjNDE3MV9jYXJkPSIsIHZyYzQxNzFfY2FyZF9zZXR1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS92cmM0MTczX2NhcmR1LmMgYi9kcml2ZXJzL3BjbWNpYS92cmM0MTczX2NhcmR1LmMKaW5kZXggNTdmMzhkYi4uNjAwNDE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3M19jYXJkdS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzNfY2FyZHUuYwpAQCAtNTE2LDcgKzUxNiw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2cmM0MTczX2NhcmR1X3NldHVwKGNoYXIgKm9wdGlvbnMpCiB7CiAJaWYgKG9wdGlvbnMgPT0gTlVMTCB8fCAqb3B0aW9ucyA9PSAnXDAnKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDE7CiAKIAlpZiAoc3RybmNtcChvcHRpb25zLCAiY2FyZHUxOiIsIDcpID09IDApIHsKIAkJb3B0aW9ucyArPSA3OwpAQCAtNTI3LDkgKzUyNyw5IEBACiAJCQl9CiAKIAkJCWlmICgqb3B0aW9ucyAhPSAnLCcpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIDE7CiAJCX0gZWxzZQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoc3RybmNtcChvcHRpb25zLCAiY2FyZHUyOiIsIDcpID09IDApIHsKQEAgLTUzOCw3ICs1MzgsNyBAQAogCQkJY2FyZHVfc29ja2V0c1tDQVJEVTJdLm5vcHJvYmUgPSAxOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBfX3NldHVwKCJ2cmM0MTczX2NhcmR1PSIsIHZyYzQxNzNfY2FyZHVfc2V0dXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvbWFuYWdlci5jIGIvZHJpdmVycy9wbnAvbWFuYWdlci5jCmluZGV4IGM0MjU2YWEuLjZmZmYxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL21hbmFnZXIuYworKysgYi9kcml2ZXJzL3BucC9tYW5hZ2VyLmMKQEAgLTQ3OSw3ICs0NzksNyBAQAogaW50IHBucF9zdGFydF9kZXYoc3RydWN0IHBucF9kZXYgKmRldikKIHsKIAlpZiAoIXBucF9jYW5fd3JpdGUoZGV2KSkgewotCQlwbnBfaW5mbygiRGV2aWNlICVzIGRvZXMgbm90IHN1cHBvcnRlZCBhY3RpdmF0aW9uLiIsIGRldi0+ZGV2LmJ1c19pZCk7CisJCXBucF9pbmZvKCJEZXZpY2UgJXMgZG9lcyBub3Qgc3VwcG9ydCBhY3RpdmF0aW9uLiIsIGRldi0+ZGV2LmJ1c19pZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTAzLDcgKzUwMyw3IEBACiBpbnQgcG5wX3N0b3BfZGV2KHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7CiAJaWYgKCFwbnBfY2FuX2Rpc2FibGUoZGV2KSkgewotCQlwbnBfaW5mbygiRGV2aWNlICVzIGRvZXMgbm90IHN1cHBvcnRlZCBkaXNhYmxpbmcuIiwgZGV2LT5kZXYuYnVzX2lkKTsKKwkJcG5wX2luZm8oIkRldmljZSAlcyBkb2VzIG5vdCBzdXBwb3J0IGRpc2FibGluZy4iLCBkZXYtPmRldi5idXNfaWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGRldi0+cHJvdG9jb2wtPmRpc2FibGUoZGV2KTwwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMgYi9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKaW5kZXggNDA3YjRlYS4uM2E0YTY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYwpAQCAtMzYsMTMgKzM2LDEzIEBACiB7CiAJaW50IGZsYWc7CiAJaWYgKHRyaWdnZXJpbmcgPT0gQUNQSV9MRVZFTF9TRU5TSVRJVkUpIHsKLQkJaWYocG9sYXJpdHkgPT0gQUNQSV9BQ1RJVkVfTE9XKQorCQlpZiAocG9sYXJpdHkgPT0gQUNQSV9BQ1RJVkVfTE9XKQogCQkJZmxhZyA9IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMOwogCQllbHNlCiAJCQlmbGFnID0gSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMOwogCX0KIAllbHNlIHsKLQkJaWYocG9sYXJpdHkgPT0gQUNQSV9BQ1RJVkVfTE9XKQorCQlpZiAocG9sYXJpdHkgPT0gQUNQSV9BQ1RJVkVfTE9XKQogCQkJZmxhZyA9IElPUkVTT1VSQ0VfSVJRX0xPV0VER0U7CiAJCWVsc2UKIAkJCWZsYWcgPSBJT1JFU09VUkNFX0lSUV9ISUdIRURHRTsKQEAgLTU3LDcgKzU3LDcgQEAKIAkJKnRyaWdnZXJpbmcgPSBBQ1BJX0xFVkVMX1NFTlNJVElWRTsKIAkJKnBvbGFyaXR5ID0gQUNQSV9BQ1RJVkVfTE9XOwogCQlicmVhazsKLQljYXNlIElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTDoJCisJY2FzZSBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUw6CiAJCSp0cmlnZ2VyaW5nID0gQUNQSV9MRVZFTF9TRU5TSVRJVkU7CiAJCSpwb2xhcml0eSA9IEFDUElfQUNUSVZFX0hJR0g7CiAJCWJyZWFrOwpAQCAtNzMsNyArNzMsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotcG5wYWNwaV9wYXJzZV9hbGxvY2F0ZWRfaXJxcmVzb3VyY2Uoc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqIHJlcywgdTMyIGdzaSwKK3BucGFjcGlfcGFyc2VfYWxsb2NhdGVkX2lycXJlc291cmNlKHN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgKnJlcywgdTMyIGdzaSwKIAlpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KQogewogCWludCBpID0gMDsKQEAgLTEwMSw3ICsxMDEsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotcG5wYWNwaV9wYXJzZV9hbGxvY2F0ZWRfZG1hcmVzb3VyY2Uoc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqIHJlcywgdTMyIGRtYSkKK3BucGFjcGlfcGFyc2VfYWxsb2NhdGVkX2RtYXJlc291cmNlKHN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgKnJlcywgdTMyIGRtYSkKIHsKIAlpbnQgaSA9IDA7CiAJd2hpbGUgKGkgPCBQTlBfTUFYX0RNQSAmJgpAQCAtMTE5LDggKzExOSw4IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1wbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9pb3Jlc291cmNlKHN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgKiByZXMsCi0JdTMyIGlvLCB1MzIgbGVuKQorcG5wYWNwaV9wYXJzZV9hbGxvY2F0ZWRfaW9yZXNvdXJjZShzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICpyZXMsCisJdTY0IGlvLCB1NjQgbGVuKQogewogCWludCBpID0gMDsKIAl3aGlsZSAoIShyZXMtPnBvcnRfcmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX1VOU0VUKSAmJgpAQCAtMTM4LDcgKzEzOCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1wbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9tZW1yZXNvdXJjZShzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICogcmVzLAorcG5wYWNwaV9wYXJzZV9hbGxvY2F0ZWRfbWVtcmVzb3VyY2Uoc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqcmVzLAogCXU2NCBtZW0sIHU2NCBsZW4pCiB7CiAJaW50IGkgPSAwOwpAQCAtMTU2LDExICsxNTYsMzIgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitwbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9hZGRyZXNzX3NwYWNlKHN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgKnJlc190YWJsZSwKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCBhZGRyLCAqcCA9ICZhZGRyOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfcmVzb3VyY2VfdG9fYWRkcmVzczY0KHJlcywgcCk7CisJaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQlwbnBfd2FybigiUG5QQUNQSTogZmFpbGVkIHRvIGNvbnZlcnQgcmVzb3VyY2UgdHlwZSAlZCIsCisJCQlyZXMtPnR5cGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKHAtPnJlc291cmNlX3R5cGUgPT0gQUNQSV9NRU1PUllfUkFOR0UpCisJCXBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX21lbXJlc291cmNlKHJlc190YWJsZSwKKwkJCQlwLT5taW5pbXVtLCBwLT5hZGRyZXNzX2xlbmd0aCk7CisJZWxzZSBpZiAocC0+cmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKQorCQlwbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9pb3Jlc291cmNlKHJlc190YWJsZSwKKwkJCQlwLT5taW5pbXVtLCBwLT5hZGRyZXNzX2xlbmd0aCk7Cit9CiAKIHN0YXRpYyBhY3BpX3N0YXR1cyBwbnBhY3BpX2FsbG9jYXRlZF9yZXNvdXJjZShzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzLAogCXZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqIHJlc190YWJsZSA9IChzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICopZGF0YTsKKwlzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICpyZXNfdGFibGUgPSAoc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqKWRhdGE7CiAJaW50IGk7CiAKIAlzd2l0Y2ggKHJlcy0+dHlwZSkgewpAQCAtMjIxLDE5ICsyNDIsOSBAQAogCQkJCXJlcy0+ZGF0YS5maXhlZF9tZW1vcnkzMi5hZGRyZXNzX2xlbmd0aCk7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1MxNjoKLQkJcG5wYWNwaV9wYXJzZV9hbGxvY2F0ZWRfbWVtcmVzb3VyY2UocmVzX3RhYmxlLAotCQkJCXJlcy0+ZGF0YS5hZGRyZXNzMTYubWluaW11bSwKLQkJCQlyZXMtPmRhdGEuYWRkcmVzczE2LmFkZHJlc3NfbGVuZ3RoKTsKLQkJYnJlYWs7CiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzMyOgotCQlwbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9tZW1yZXNvdXJjZShyZXNfdGFibGUsCi0JCQkJcmVzLT5kYXRhLmFkZHJlc3MzMi5taW5pbXVtLAotCQkJCXJlcy0+ZGF0YS5hZGRyZXNzMzIuYWRkcmVzc19sZW5ndGgpOwotCQlicmVhazsKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTNjQ6Ci0JCXBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX21lbXJlc291cmNlKHJlc190YWJsZSwKLQkJcmVzLT5kYXRhLmFkZHJlc3M2NC5taW5pbXVtLAotCQlyZXMtPmRhdGEuYWRkcmVzczY0LmFkZHJlc3NfbGVuZ3RoKTsKKwkJcG5wYWNwaV9wYXJzZV9hbGxvY2F0ZWRfYWRkcmVzc19zcGFjZShyZXNfdGFibGUsIHJlcyk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRVhURU5ERURfQUREUkVTUzY0OgpAQCAtMjU1LDExICsyNjYsMTEgQEAKIAkJcG5wX3dhcm4oIlBuUEFDUEk6IHVua25vd24gcmVzb3VyY2UgdHlwZSAlZCIsIHJlcy0+dHlwZSk7CiAJCXJldHVybiBBRV9FUlJPUjsKIAl9Ci0JCQkKKwogCXJldHVybiBBRV9PSzsKIH0KIAotYWNwaV9zdGF0dXMgcG5wYWNwaV9wYXJzZV9hbGxvY2F0ZWRfcmVzb3VyY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICogcmVzKQorYWNwaV9zdGF0dXMgcG5wYWNwaV9wYXJzZV9hbGxvY2F0ZWRfcmVzb3VyY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICpyZXMpCiB7CiAJLyogQmxhbmsgdGhlIHJlc291cmNlIHRhYmxlIHZhbHVlcyAqLwogCXBucF9pbml0X3Jlc291cmNlX3RhYmxlKHJlcyk7CkBAIC0zMTcsMTcgKzMyOCwxNyBAQAogCQlwbnBfZXJyKCJJbnZhbGlkIERNQSB0cmFuc2ZlciB0eXBlIik7CiAJfQogCi0JcG5wX3JlZ2lzdGVyX2RtYV9yZXNvdXJjZShvcHRpb24sZG1hKTsKKwlwbnBfcmVnaXN0ZXJfZG1hX3Jlc291cmNlKG9wdGlvbiwgZG1hKTsKIAlyZXR1cm47CiB9CiAKLQkKKwogc3RhdGljIHZvaWQgcG5wYWNwaV9wYXJzZV9pcnFfb3B0aW9uKHN0cnVjdCBwbnBfb3B0aW9uICpvcHRpb24sCiAJc3RydWN0IGFjcGlfcmVzb3VyY2VfaXJxICpwKQogewogCWludCBpOwotCXN0cnVjdCBwbnBfaXJxICogaXJxOwotCQorCXN0cnVjdCBwbnBfaXJxICppcnE7CisKIAlpZiAocC0+aW50ZXJydXB0X2NvdW50ID09IDApCiAJCXJldHVybjsKIAlpcnEgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2lycSksIEdGUF9LRVJORUwpOwpAQCAtMzQ3LDcgKzM1OCw3IEBACiAJc3RydWN0IGFjcGlfcmVzb3VyY2VfZXh0ZW5kZWRfaXJxICpwKQogewogCWludCBpOwotCXN0cnVjdCBwbnBfaXJxICogaXJxOworCXN0cnVjdCBwbnBfaXJxICppcnE7CiAKIAlpZiAocC0+aW50ZXJydXB0X2NvdW50ID09IDApCiAJCXJldHVybjsKQEAgLTM2OCw3ICszNzksNyBAQAogcG5wYWNwaV9wYXJzZV9wb3J0X29wdGlvbihzdHJ1Y3QgcG5wX29wdGlvbiAqb3B0aW9uLAogCXN0cnVjdCBhY3BpX3Jlc291cmNlX2lvICppbykKIHsKLQlzdHJ1Y3QgcG5wX3BvcnQgKiBwb3J0OworCXN0cnVjdCBwbnBfcG9ydCAqcG9ydDsKIAogCWlmIChpby0+YWRkcmVzc19sZW5ndGggPT0gMCkKIAkJcmV0dXJuOwpAQCAtMzgxLDcgKzM5Miw3IEBACiAJcG9ydC0+c2l6ZSA9IGlvLT5hZGRyZXNzX2xlbmd0aDsKIAlwb3J0LT5mbGFncyA9IEFDUElfREVDT0RFXzE2ID09IGlvLT5pb19kZWNvZGUgPwogCQlQTlBfUE9SVF9GTEFHXzE2QklUQUREUiA6IDA7Ci0JcG5wX3JlZ2lzdGVyX3BvcnRfcmVzb3VyY2Uob3B0aW9uLHBvcnQpOworCXBucF9yZWdpc3Rlcl9wb3J0X3Jlc291cmNlKG9wdGlvbiwgcG9ydCk7CiAJcmV0dXJuOwogfQogCkBAIC0zODksNyArNDAwLDcgQEAKIHBucGFjcGlfcGFyc2VfZml4ZWRfcG9ydF9vcHRpb24oc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbiwKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9pbyAqaW8pCiB7Ci0Jc3RydWN0IHBucF9wb3J0ICogcG9ydDsKKwlzdHJ1Y3QgcG5wX3BvcnQgKnBvcnQ7CiAKIAlpZiAoaW8tPmFkZHJlc3NfbGVuZ3RoID09IDApCiAJCXJldHVybjsKQEAgLTQwMCw3ICs0MTEsNyBAQAogCXBvcnQtPnNpemUgPSBpby0+YWRkcmVzc19sZW5ndGg7CiAJcG9ydC0+YWxpZ24gPSAwOwogCXBvcnQtPmZsYWdzID0gUE5QX1BPUlRfRkxBR19GSVhFRDsKLQlwbnBfcmVnaXN0ZXJfcG9ydF9yZXNvdXJjZShvcHRpb24scG9ydCk7CisJcG5wX3JlZ2lzdGVyX3BvcnRfcmVzb3VyY2Uob3B0aW9uLCBwb3J0KTsKIAlyZXR1cm47CiB9CiAKQEAgLTQwOCw3ICs0MTksNyBAQAogcG5wYWNwaV9wYXJzZV9tZW0yNF9vcHRpb24oc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbiwKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9tZW1vcnkyNCAqcCkKIHsKLQlzdHJ1Y3QgcG5wX21lbSAqIG1lbTsKKwlzdHJ1Y3QgcG5wX21lbSAqbWVtOwogCiAJaWYgKHAtPmFkZHJlc3NfbGVuZ3RoID09IDApCiAJCXJldHVybjsKQEAgLTQyMyw3ICs0MzQsNyBAQAogCW1lbS0+ZmxhZ3MgPSAoQUNQSV9SRUFEX1dSSVRFX01FTU9SWSA9PSBwLT53cml0ZV9wcm90ZWN0KSA/CiAJCQlJT1JFU09VUkNFX01FTV9XUklURUFCTEUgOiAwOwogCi0JcG5wX3JlZ2lzdGVyX21lbV9yZXNvdXJjZShvcHRpb24sbWVtKTsKKwlwbnBfcmVnaXN0ZXJfbWVtX3Jlc291cmNlKG9wdGlvbiwgbWVtKTsKIAlyZXR1cm47CiB9CiAKQEAgLTQzMSw3ICs0NDIsNyBAQAogcG5wYWNwaV9wYXJzZV9tZW0zMl9vcHRpb24oc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbiwKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9tZW1vcnkzMiAqcCkKIHsKLQlzdHJ1Y3QgcG5wX21lbSAqIG1lbTsKKwlzdHJ1Y3QgcG5wX21lbSAqbWVtOwogCiAJaWYgKHAtPmFkZHJlc3NfbGVuZ3RoID09IDApCiAJCXJldHVybjsKQEAgLTQ0Niw3ICs0NTcsNyBAQAogCW1lbS0+ZmxhZ3MgPSAoQUNQSV9SRUFEX1dSSVRFX01FTU9SWSA9PSBwLT53cml0ZV9wcm90ZWN0KSA/CiAJCQlJT1JFU09VUkNFX01FTV9XUklURUFCTEUgOiAwOwogCi0JcG5wX3JlZ2lzdGVyX21lbV9yZXNvdXJjZShvcHRpb24sbWVtKTsKKwlwbnBfcmVnaXN0ZXJfbWVtX3Jlc291cmNlKG9wdGlvbiwgbWVtKTsKIAlyZXR1cm47CiB9CiAKQEAgLTQ1NCw3ICs0NjUsNyBAQAogcG5wYWNwaV9wYXJzZV9maXhlZF9tZW0zMl9vcHRpb24oc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbiwKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9tZW1vcnkzMiAqcCkKIHsKLQlzdHJ1Y3QgcG5wX21lbSAqIG1lbTsKKwlzdHJ1Y3QgcG5wX21lbSAqbWVtOwogCiAJaWYgKHAtPmFkZHJlc3NfbGVuZ3RoID09IDApCiAJCXJldHVybjsKQEAgLTQ2OCw3ICs0NzksNyBAQAogCW1lbS0+ZmxhZ3MgPSAoQUNQSV9SRUFEX1dSSVRFX01FTU9SWSA9PSBwLT53cml0ZV9wcm90ZWN0KSA/CiAJCQlJT1JFU09VUkNFX01FTV9XUklURUFCTEUgOiAwOwogCi0JcG5wX3JlZ2lzdGVyX21lbV9yZXNvdXJjZShvcHRpb24sbWVtKTsKKwlwbnBfcmVnaXN0ZXJfbWVtX3Jlc291cmNlKG9wdGlvbiwgbWVtKTsKIAlyZXR1cm47CiB9CiAKQEAgLTQ3Nyw4ICs0ODgsOCBAQAogewogCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCBhZGRyLCAqcCA9ICZhZGRyOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlzdHJ1Y3QgcG5wX21lbSAqIG1lbTsKLQlzdHJ1Y3QgcG5wX3BvcnQgKiBwb3J0OworCXN0cnVjdCBwbnBfbWVtICptZW07CisJc3RydWN0IHBucF9wb3J0ICpwb3J0OwogCiAJc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQociwgcCk7CiAJaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewpAQCAtNDk4LDcgKzUwOSw3IEBACiAJCW1lbS0+YWxpZ24gPSAwOwogCQltZW0tPmZsYWdzID0gKHAtPmluZm8ubWVtLndyaXRlX3Byb3RlY3QgPT0KIAkJICAgIEFDUElfUkVBRF9XUklURV9NRU1PUlkpID8gSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFIDogMDsKLQkJcG5wX3JlZ2lzdGVyX21lbV9yZXNvdXJjZShvcHRpb24sbWVtKTsKKwkJcG5wX3JlZ2lzdGVyX21lbV9yZXNvdXJjZShvcHRpb24sIG1lbSk7CiAJfSBlbHNlIGlmIChwLT5yZXNvdXJjZV90eXBlID09IEFDUElfSU9fUkFOR0UpIHsKIAkJcG9ydCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwbnBfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAoIXBvcnQpCkBAIC01MDcsNyArNTE4LDcgQEAKIAkJcG9ydC0+c2l6ZSA9IHAtPmFkZHJlc3NfbGVuZ3RoOwogCQlwb3J0LT5hbGlnbiA9IDA7CiAJCXBvcnQtPmZsYWdzID0gUE5QX1BPUlRfRkxBR19GSVhFRDsKLQkJcG5wX3JlZ2lzdGVyX3BvcnRfcmVzb3VyY2Uob3B0aW9uLHBvcnQpOworCQlwbnBfcmVnaXN0ZXJfcG9ydF9yZXNvdXJjZShvcHRpb24sIHBvcnQpOwogCX0KIH0KIApAQCAtNTMxLDcgKzU0Miw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9ETUE6Ci0JCQlwbnBhY3BpX3BhcnNlX2RtYV9vcHRpb24ob3B0aW9uLCAmcmVzLT5kYXRhLmRtYSk7CQorCQkJcG5wYWNwaV9wYXJzZV9kbWFfb3B0aW9uKG9wdGlvbiwgJnJlcy0+ZGF0YS5kbWEpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfU1RBUlRfREVQRU5ERU5UOgpAQCAtNTM5LDcgKzU1MCw3IEBACiAJCQkJY2FzZSBBQ1BJX0dPT0RfQ09ORklHVVJBVElPTjoKIAkJCQkJcHJpb3JpdHkgPSBQTlBfUkVTX1BSSU9SSVRZX1BSRUZFUlJFRDsKIAkJCQkJYnJlYWs7Ci0JCQkJCQorCiAJCQkJY2FzZSBBQ1BJX0FDQ0VQVEFCTEVfQ09ORklHVVJBVElPTjoKIAkJCQkJcHJpb3JpdHkgPSBQTlBfUkVTX1BSSU9SSVRZX0FDQ0VQVEFCTEU7CiAJCQkJCWJyZWFrOwpAQCAtNTU1LDcgKzU2Niw3IEBACiAJCQlvcHRpb24gPSBwbnBfcmVnaXN0ZXJfZGVwZW5kZW50X29wdGlvbihkZXYsIHByaW9yaXR5KTsKIAkJCWlmICghb3B0aW9uKQogCQkJCXJldHVybiBBRV9FUlJPUjsKLQkJCXBhcnNlX2RhdGEtPm9wdGlvbiA9IG9wdGlvbjsJCisJCQlwYXJzZV9kYXRhLT5vcHRpb24gPSBvcHRpb247CiAJCQlicmVhazsKIAogCQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9FTkRfREVQRU5ERU5UOgpAQCAtNjE1LDcgKzYyNiw3IEBACiAJCQlwbnBfd2FybigiUG5QQUNQSTogdW5rbm93biByZXNvdXJjZSB0eXBlICVkIiwgcmVzLT50eXBlKTsKIAkJCXJldHVybiBBRV9FUlJPUjsKIAl9Ci0JCQkKKwogCXJldHVybiBBRV9PSzsKIH0KIApAQCAtNjM2LDYgKzY0NywyNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgcG5wYWNwaV9zdXBwb3J0ZWRfcmVzb3VyY2Uoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlcykKK3sKKwlzd2l0Y2ggKHJlcy0+dHlwZSkgeworCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0lSUToKKwljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9ETUE6CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSU86CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfSU86CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMjQ6CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMzI6CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfTUVNT1JZMzI6CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzE2OgorCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1MzMjoKKwljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTNjQ6CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRVhURU5ERURfSVJROgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBTZXQgcmVzb3VyY2UKICAqLwpAQCAtNjQzLDU1ICs2NzMsMjAgQEAKIAl2b2lkICpkYXRhKQogewogCWludCAqcmVzX2NudCA9IChpbnQgKilkYXRhOwotCXN3aXRjaCAocmVzLT50eXBlKSB7Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSVJROgotCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0RNQToKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9JTzoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9GSVhFRF9JTzoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9NRU1PUlkyNDoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9NRU1PUlkzMjoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9GSVhFRF9NRU1PUlkzMjoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTMTY6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzMyOgotCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1M2NDoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9FWFRFTkRFRF9JUlE6Ci0JCSgqcmVzX2NudCkgKys7Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfU1RBUlRfREVQRU5ERU5UOgotCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0VORF9ERVBFTkRFTlQ6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfVkVORE9SOgotCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0VORF9UQUc6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfR0VORVJJQ19SRUdJU1RFUjoKLQlkZWZhdWx0OgotCQlyZXR1cm4gQUVfT0s7Ci0JfQorCisJaWYgKHBucGFjcGlfc3VwcG9ydGVkX3Jlc291cmNlKHJlcykpCisJCSgqcmVzX2NudCkrKzsKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLXN0YXRpYyBhY3BpX3N0YXR1cyBwbnBhY3BpX3R5cGVfcmVzb3VyY2VzKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXMsCi0Jdm9pZCAqZGF0YSkKK3N0YXRpYyBhY3BpX3N0YXR1cyBwbnBhY3BpX3R5cGVfcmVzb3VyY2VzKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXMsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2UgKipyZXNvdXJjZSA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqKilkYXRhOwkKLQlzd2l0Y2ggKHJlcy0+dHlwZSkgewotCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0lSUToKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9ETUE6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSU86Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfSU86Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMjQ6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMzI6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfTUVNT1JZMzI6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzE2OgotCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1MzMjoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTNjQ6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRVhURU5ERURfSVJROgorCXN0cnVjdCBhY3BpX3Jlc291cmNlICoqcmVzb3VyY2UgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2UgKiopZGF0YTsKKworCWlmIChwbnBhY3BpX3N1cHBvcnRlZF9yZXNvdXJjZShyZXMpKSB7CiAJCSgqcmVzb3VyY2UpLT50eXBlID0gcmVzLT50eXBlOworCQkoKnJlc291cmNlKS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3Jlc291cmNlKTsKIAkJKCpyZXNvdXJjZSkrKzsKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9TVEFSVF9ERVBFTkRFTlQ6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRU5EX0RFUEVOREVOVDoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9WRU5ET1I6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRU5EX1RBRzoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9HRU5FUklDX1JFR0lTVEVSOgotCWRlZmF1bHQ6Ci0JCXJldHVybiBBRV9PSzsKIAl9CiAKIAlyZXR1cm4gQUVfT0s7CkBAIC03MzUsMTEgKzczMCw4IEBACiAJc3RydWN0IHJlc291cmNlICpwKQogewogCWludCB0cmlnZ2VyaW5nLCBwb2xhcml0eTsKLQkKLQlkZWNvZGVfaXJxX2ZsYWdzKHAtPmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTLCAmdHJpZ2dlcmluZywKLQkJJnBvbGFyaXR5KTsKLQlyZXNvdXJjZS0+dHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9JUlE7Ci0JcmVzb3VyY2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaV9yZXNvdXJjZSk7CisKKwlkZWNvZGVfaXJxX2ZsYWdzKHAtPmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTLCAmdHJpZ2dlcmluZywgJnBvbGFyaXR5KTsKIAlyZXNvdXJjZS0+ZGF0YS5pcnEudHJpZ2dlcmluZyA9IHRyaWdnZXJpbmc7CiAJcmVzb3VyY2UtPmRhdGEuaXJxLnBvbGFyaXR5ID0gcG9sYXJpdHk7CiAJaWYgKHRyaWdnZXJpbmcgPT0gQUNQSV9FREdFX1NFTlNJVElWRSkKQEAgLTc1NCwxMSArNzQ2LDggQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnApCiB7CiAJaW50IHRyaWdnZXJpbmcsIHBvbGFyaXR5OwotCQotCWRlY29kZV9pcnFfZmxhZ3MocC0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JJVFMsICZ0cmlnZ2VyaW5nLAotCQkmcG9sYXJpdHkpOwotCXJlc291cmNlLT50eXBlID0gQUNQSV9SRVNPVVJDRV9UWVBFX0VYVEVOREVEX0lSUTsKLQlyZXNvdXJjZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3Jlc291cmNlKTsKKworCWRlY29kZV9pcnFfZmxhZ3MocC0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JJVFMsICZ0cmlnZ2VyaW5nLCAmcG9sYXJpdHkpOwogCXJlc291cmNlLT5kYXRhLmV4dGVuZGVkX2lycS5wcm9kdWNlcl9jb25zdW1lciA9IEFDUElfQ09OU1VNRVI7CiAJcmVzb3VyY2UtPmRhdGEuZXh0ZW5kZWRfaXJxLnRyaWdnZXJpbmcgPSB0cmlnZ2VyaW5nOwogCXJlc291cmNlLT5kYXRhLmV4dGVuZGVkX2lycS5wb2xhcml0eSA9IHBvbGFyaXR5OwpAQCAtNzczLDggKzc2Miw2IEBACiBzdGF0aWMgdm9pZCBwbnBhY3BpX2VuY29kZV9kbWEoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLAogCXN0cnVjdCByZXNvdXJjZSAqcCkKIHsKLQlyZXNvdXJjZS0+dHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9ETUE7Ci0JcmVzb3VyY2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaV9yZXNvdXJjZSk7CiAJLyogTm90ZTogcG5wX2Fzc2lnbl9kbWEgd2lsbCBjb3B5IHBucF9kbWEtPmZsYWdzIGludG8gcC0+ZmxhZ3MgKi8KIAlpZiAocC0+ZmxhZ3MgJiBJT1JFU09VUkNFX0RNQV9DT01QQVRJQkxFKQogCQlyZXNvdXJjZS0+ZGF0YS5kbWEudHlwZSA9IEFDUElfQ09NUEFUSUJJTElUWTsKQEAgLTc5OCw4ICs3ODUsNiBAQAogc3RhdGljIHZvaWQgcG5wYWNwaV9lbmNvZGVfaW8oc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLAogCXN0cnVjdCByZXNvdXJjZSAqcCkKIHsKLQlyZXNvdXJjZS0+dHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9JTzsKLQlyZXNvdXJjZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3Jlc291cmNlKTsKIAkvKiBOb3RlOiBwbnBfYXNzaWduX3BvcnQgd2lsbCBjb3B5IHBucF9wb3J0LT5mbGFncyBpbnRvIHAtPmZsYWdzICovCiAJcmVzb3VyY2UtPmRhdGEuaW8uaW9fZGVjb2RlID0gKHAtPmZsYWdzICYgUE5QX1BPUlRfRkxBR18xNkJJVEFERFIpPwogCQlBQ1BJX0RFQ09ERV8xNiA6IEFDUElfREVDT0RFXzEwOwpAQCAtODEyLDggKzc5Nyw2IEBACiBzdGF0aWMgdm9pZCBwbnBhY3BpX2VuY29kZV9maXhlZF9pbyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsCiAJc3RydWN0IHJlc291cmNlICpwKQogewotCXJlc291cmNlLT50eXBlID0gQUNQSV9SRVNPVVJDRV9UWVBFX0ZJWEVEX0lPOwotCXJlc291cmNlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGFjcGlfcmVzb3VyY2UpOwogCXJlc291cmNlLT5kYXRhLmZpeGVkX2lvLmFkZHJlc3MgPSBwLT5zdGFydDsKIAlyZXNvdXJjZS0+ZGF0YS5maXhlZF9pby5hZGRyZXNzX2xlbmd0aCA9IHAtPmVuZCAtIHAtPnN0YXJ0ICsgMTsKIH0KQEAgLTgyMSw4ICs4MDQsNiBAQAogc3RhdGljIHZvaWQgcG5wYWNwaV9lbmNvZGVfbWVtMjQoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLAogCXN0cnVjdCByZXNvdXJjZSAqcCkKIHsKLQlyZXNvdXJjZS0+dHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9NRU1PUlkyNDsKLQlyZXNvdXJjZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3Jlc291cmNlKTsKIAkvKiBOb3RlOiBwbnBfYXNzaWduX21lbSB3aWxsIGNvcHkgcG5wX21lbS0+ZmxhZ3MgaW50byBwLT5mbGFncyAqLwogCXJlc291cmNlLT5kYXRhLm1lbW9yeTI0LndyaXRlX3Byb3RlY3QgPQogCQkocC0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV9XUklURUFCTEUpID8KQEAgLTgzNiw4ICs4MTcsNiBAQAogc3RhdGljIHZvaWQgcG5wYWNwaV9lbmNvZGVfbWVtMzIoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLAogCXN0cnVjdCByZXNvdXJjZSAqcCkKIHsKLQlyZXNvdXJjZS0+dHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9NRU1PUlkzMjsKLQlyZXNvdXJjZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3Jlc291cmNlKTsKIAlyZXNvdXJjZS0+ZGF0YS5tZW1vcnkzMi53cml0ZV9wcm90ZWN0ID0KIAkJKHAtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFKSA/CiAJCUFDUElfUkVBRF9XUklURV9NRU1PUlkgOiBBQ1BJX1JFQURfT05MWV9NRU1PUlk7CkBAIC04NTAsOCArODI5LDYgQEAKIHN0YXRpYyB2b2lkIHBucGFjcGlfZW5jb2RlX2ZpeGVkX21lbTMyKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKIAlzdHJ1Y3QgcmVzb3VyY2UgKnApCiB7Ci0JcmVzb3VyY2UtPnR5cGUgPSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfTUVNT1JZMzI7Ci0JcmVzb3VyY2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaV9yZXNvdXJjZSk7CiAJcmVzb3VyY2UtPmRhdGEuZml4ZWRfbWVtb3J5MzIud3JpdGVfcHJvdGVjdCA9CiAJCShwLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNX1dSSVRFQUJMRSkgPwogCQlBQ1BJX1JFQURfV1JJVEVfTUVNT1JZIDogQUNQSV9SRUFEX09OTFlfTUVNT1JZOwpAQCAtODgyLDM3ICs4NTksMzcgQEAKIAkJCXBucF9kYmcoIkVuY29kZSBkbWEiKTsKIAkJCXBucGFjcGlfZW5jb2RlX2RtYShyZXNvdXJjZSwKIAkJCQkmcmVzX3RhYmxlLT5kbWFfcmVzb3VyY2VbZG1hXSk7Ci0JCQlkbWEgKys7CisJCQlkbWErKzsKIAkJCWJyZWFrOwogCQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9JTzoKIAkJCXBucF9kYmcoIkVuY29kZSBpbyIpOwogCQkJcG5wYWNwaV9lbmNvZGVfaW8ocmVzb3VyY2UsCiAJCQkJJnJlc190YWJsZS0+cG9ydF9yZXNvdXJjZVtwb3J0XSk7Ci0JCQlwb3J0ICsrOworCQkJcG9ydCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0ZJWEVEX0lPOgogCQkJcG5wX2RiZygiRW5jb2RlIGZpeGVkIGlvIik7CiAJCQlwbnBhY3BpX2VuY29kZV9maXhlZF9pbyhyZXNvdXJjZSwKIAkJCQkmcmVzX3RhYmxlLT5wb3J0X3Jlc291cmNlW3BvcnRdKTsKLQkJCXBvcnQgKys7CisJCQlwb3J0Kys7CiAJCQlicmVhazsKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMjQ6CiAJCQlwbnBfZGJnKCJFbmNvZGUgbWVtMjQiKTsKIAkJCXBucGFjcGlfZW5jb2RlX21lbTI0KHJlc291cmNlLAogCQkJCSZyZXNfdGFibGUtPm1lbV9yZXNvdXJjZVttZW1dKTsKLQkJCW1lbSArKzsKKwkJCW1lbSsrOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX01FTU9SWTMyOgogCQkJcG5wX2RiZygiRW5jb2RlIG1lbTMyIik7CiAJCQlwbnBhY3BpX2VuY29kZV9tZW0zMihyZXNvdXJjZSwKIAkJCQkmcmVzX3RhYmxlLT5tZW1fcmVzb3VyY2VbbWVtXSk7Ci0JCQltZW0gKys7CisJCQltZW0rKzsKIAkJCWJyZWFrOwogCQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9GSVhFRF9NRU1PUlkzMjoKIAkJCXBucF9kYmcoIkVuY29kZSBmaXhlZCBtZW0zMiIpOwogCQkJcG5wYWNwaV9lbmNvZGVfZml4ZWRfbWVtMzIocmVzb3VyY2UsCiAJCQkJJnJlc190YWJsZS0+bWVtX3Jlc291cmNlW21lbV0pOwotCQkJbWVtICsrOworCQkJbWVtKys7CiAJCQlicmVhazsKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRVhURU5ERURfSVJROgogCQkJcG5wX2RiZygiRW5jb2RlIGV4dCBpcnEiKTsKQEAgLTkzMyw4ICs5MTAsOCBAQAogCQkJcG5wX3dhcm4oInVua25vd24gcmVzb3VyY2UgdHlwZSAlZCIsIHJlc291cmNlLT50eXBlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXJlc291cmNlICsrOwotCQlpICsrOworCQlyZXNvdXJjZSsrOworCQlpKys7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggOTI5ZGQ4MC4uNjVkMDkwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xNDcsNiArMTQ3LDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGMtc2ExMTAwLgogCitjb25maWcgUlRDX0RSVl9WUjQxWFgKKwl0cmlzdGF0ZSAiTkVDIFZSNDFYWCIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBDUFVfVlI0MVhYCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IGFjY2VzcyB0byB0aGUgcmVhbCB0aW1lIGNsb2NrCisJICBidWlsdCBpbnRvIHlvdXIgTkVDIFZSNDFYWCBDUFUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJ0Yy12cjQxeHguCisKIGNvbmZpZyBSVENfRFJWX1RFU1QKIAl0cmlzdGF0ZSAiVGVzdCBkcml2ZXIvZGV2aWNlIgogCWRlcGVuZHMgb24gUlRDX0NMQVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IDhkNGM3ZmUuLmE5Y2EwZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0xOSwzICsxOSw0IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUODYpCSs9IHJ0Yy1tNDh0ODYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRVA5M1hYKQkrPSBydGMtZXA5M3h4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1NBMTEwMCkJKz0gcnRjLXNhMTEwMC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9WUjQxWFgpCSs9IHJ0Yy12cjQxeHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvY2xhc3MuYyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKaW5kZXggODUzMzkzNi4uNDEzYzdkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvY2xhc3MuYworKysgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCkBAIC05Niw2ICs5Niw4IEBACiAJaWRyX3JlbW92ZSgmcnRjX2lkciwgaWQpOwogCiBleGl0OgorCWRldl9lcnIoZGV2LCAicnRjIGNvcmU6IHVuYWJsZSB0byByZWdpc3RlciAlcywgZXJyID0gJWRcbiIsCisJCQluYW1lLCBlcnIpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfZGV2aWNlX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCBiMWUzZTYxLi4yMDExNTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC01OCw3ICs1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBkYXRhOwogCXNzaXplX3QgcmV0OwogCi0JaWYgKGNvdW50IDwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCWlmIChjb3VudCAhPSBzaXplb2YodW5zaWduZWQgaW50KSAmJiBjb3VudCA8IHNpemVvZih1bnNpZ25lZCBsb25nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhZGRfd2FpdF9xdWV1ZSgmcnRjLT5pcnFfcXVldWUsICZ3YWl0KTsKQEAgLTkwLDExICs5MCwxNiBAQAogCWlmIChyZXQgPT0gMCkgewogCQkvKiBDaGVjayBmb3IgYW55IGRhdGEgdXBkYXRlcyAqLwogCQlpZiAocnRjLT5vcHMtPnJlYWRfY2FsbGJhY2spCi0JCQlkYXRhID0gcnRjLT5vcHMtPnJlYWRfY2FsbGJhY2socnRjLT5jbGFzc19kZXYuZGV2LCBkYXRhKTsKKwkJCWRhdGEgPSBydGMtPm9wcy0+cmVhZF9jYWxsYmFjayhydGMtPmNsYXNzX2Rldi5kZXYsCisJCQkJCQkgICAgICAgZGF0YSk7CiAKLQkJcmV0ID0gcHV0X3VzZXIoZGF0YSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYnVmKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQlpZiAoc2l6ZW9mKGludCkgIT0gc2l6ZW9mKGxvbmcpICYmCisJCSAgICBjb3VudCA9PSBzaXplb2YodW5zaWduZWQgaW50KSkKKwkJCXJldCA9IHB1dF91c2VyKGRhdGEsICh1bnNpZ25lZCBpbnQgX191c2VyICopYnVmKSA/OgorCQkJCXNpemVvZih1bnNpZ25lZCBpbnQpOworCQllbHNlCisJCQlyZXQgPSBwdXRfdXNlcihkYXRhLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilidWYpID86CisJCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTM2LDEzICsxNDEsMTMgQEAKIAkvKiB0cnkgdGhlIGRyaXZlcidzIGlvY3RsIGludGVyZmFjZSAqLwogCWlmIChvcHMtPmlvY3RsKSB7CiAJCWVyciA9IG9wcy0+aW9jdGwoY2xhc3NfZGV2LT5kZXYsIGNtZCwgYXJnKTsKLQkJaWYgKGVyciAhPSAtRUlOVkFMKQorCQlpZiAoZXJyICE9IC1FTk9JT0NUTENNRCkKIAkJCXJldHVybiBlcnI7CiAJfQogCiAJLyogaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIHRoZSBpb2N0bCBpbnRlcmZhY2UKIAkgKiBvciBpZiB0aGF0IHBhcnRpY3VsYXIgaW9jdGwgd2FzIG5vdCBpbXBsZW1lbnRlZAotCSAqICgtRUlOVkFMKSwgd2Ugd2lsbCB0cnkgdG8gZW11bGF0ZSBoZXJlLgorCSAqICgtRU5PSU9DVExDTUQpLCB3ZSB3aWxsIHRyeSB0byBlbXVsYXRlIGhlcmUuCiAJICovCiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjI4LDcgKzIzMyw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKKwkJZXJyID0gLUVOT1RUWTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKaW5kZXggMzU4Njk1YS4uOWJlODFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYwpAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBBbiBydGMvaTJjIGRyaXZlciBmb3IgdGhlIERhbGxhcyBEUzE2NzIKLSAqIENvcHlyaWdodCAyMDA1IEFsZXNzYW5kcm8gWnVtbW8KKyAqIENvcHlyaWdodCAyMDA1LTA2IFRvd2VyIFRlY2hub2xvZ2llcworICoKKyAqIEF1dGhvcjogQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMSw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMyIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW46IG5vbmUuIFRoaXMgY2hpcCBjYW5ub3QgYmUgZGV0ZWN0ZWQuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtMjUsNiArMjcsNyBAQAogI2RlZmluZSBEUzE2NzJfUkVHX0NPTlRST0wJNAogI2RlZmluZSBEUzE2NzJfUkVHX1RSSUNLTEUJNQogCisjZGVmaW5lIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDCTB4ODAKIAogLyogUHJvdG90eXBlcyAqLwogc3RhdGljIGludCBkczE2NzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwpAQCAtNTMsOCArNTYsNyBAQAogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsCiAJCSIlczogcmF3IHJlYWQgZGF0YSAtIGNvdW50ZXJzPSUwMngsJTAyeCwlMDJ4LCUwMnhcbiIKLQkJX19GVU5DVElPTl9fLAotCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOworCQlfX0ZVTkNUSU9OX18sIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSk7CiAKIAl0aW1lID0gKGJ1ZlszXSA8PCAyNCkgfCAoYnVmWzJdIDw8IDE2KSB8IChidWZbMV0gPDwgOCkgfCBidWZbMF07CiAKQEAgLTYyLDggKzY0LDcgQEAKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCi0JCV9fRlVOQ1RJT05fXywKLQkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCisJCV9fRlVOQ1RJT05fXywgdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCiAJcmV0dXJuIDA7CkBAIC03MiwxNiArNzMsMTcgQEAKIHN0YXRpYyBpbnQgZHMxNjcyX3NldF9tbXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGxvbmcgc2VjcykKIHsKIAlpbnQgeGZlcjsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls1XTsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls2XTsKIAogCWJ1ZlswXSA9IERTMTY3Ml9SRUdfQ05UX0JBU0U7CiAJYnVmWzFdID0gc2VjcyAmIDB4MDAwMDAwRkY7CiAJYnVmWzJdID0gKHNlY3MgJiAweDAwMDBGRjAwKSA+PiA4OwogCWJ1ZlszXSA9IChzZWNzICYgMHgwMEZGMDAwMCkgPj4gMTY7CiAJYnVmWzRdID0gKHNlY3MgJiAweEZGMDAwMDAwKSA+PiAyNDsKKwlidWZbNV0gPSAwOwkvKiBzZXQgY29udHJvbCByZWcgdG8gZW5hYmxlIGNvdW50aW5nICovCiAKLQl4ZmVyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA1KTsKLQlpZiAoeGZlciAhPSA1KSB7CisJeGZlciA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgNik7CisJaWYgKHhmZXIgIT0gNikgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiBzZW5kOiAlZFxuIiwgX19GVU5DVElPTl9fLCB4ZmVyKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTIwLDYgKzEyMiw0MCBAQAogCXJldHVybiBkczE2NzJfc2V0X21tc3ModG9faTJjX2NsaWVudChkZXYpLCBzZWNzKTsKIH0KIAorc3RhdGljIGludCBkczE2NzJfZ2V0X2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKnN0YXR1cykKK3sKKwl1bnNpZ25lZCBjaGFyIGFkZHIgPSBEUzE2NzJfUkVHX0NPTlRST0w7CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsgY2xpZW50LT5hZGRyLCAwLCAxLCAmYWRkciB9LAkJLyogc2V0dXAgcmVhZCBwdHIgKi8KKwkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAxLCBzdGF0dXMgfSwJLyogcmVhZCBjb250cm9sICovCisJfTsKKworCS8qIHJlYWQgY29udHJvbCByZWdpc3RlciAqLworCWlmICgoaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZ3NbMF0sIDIpKSAhPSAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlYWQgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKiBmb2xsb3dpbmcgYXJlIHRoZSBzeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1OCBjb250cm9sOworCWludCBlcnI7CisKKwllcnIgPSBkczE2NzJfZ2V0X2NvbnRyb2woY2xpZW50LCAmY29udHJvbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY29udHJvbCAmIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDKQorCQkJCQk/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOworfQorc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2wsIFNfSVJVR08sIHNob3dfY29udHJvbCwgTlVMTCk7CisKIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE2NzJfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZHMxNjcyX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gZHMxNjcyX3J0Y19zZXRfdGltZSwKQEAgLTEyOCw3ICsxNjQsNiBAQAogCiBzdGF0aWMgaW50IGRzMTY3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgZHMxNjcyX3Byb2JlKTsKIH0KIApAQCAtMTM3LDggKzE3Miw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAgCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCkBAIC0xNjIsNiArMTk1LDcgQEAKIHN0YXRpYyBpbnQgZHMxNjcyX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQogewogCWludCBlcnIgPSAwOworCXU4IGNvbnRyb2w7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCkBAIC0xOTUsMTMgKzIyOSwyMyBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHJ0Yyk7CiAKKwkvKiByZWFkIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwllcnIgPSBkczE2NzJfZ2V0X2NvbnRyb2woY2xpZW50LCAmY29udHJvbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldGFjaDsKKworCWlmIChjb250cm9sICYgRFMxNjcyX1JFR19DT05UUk9MX0VPU0MpCisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIk9zY2lsbGF0b3Igbm90IGVuYWJsZWQuICIKKwkJCQkJIlNldCB0aW1lIHRvIGVuYWJsZS5cbiIpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY29udHJvbCk7CisKIAlyZXR1cm4gMDsKIAogZXhpdF9kZXRhY2g6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKaW5kZXggMGRkODBlYS4uZTFhMTE2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwpAQCAtNjcsNyArNjcsNiBAQAogCiAJZXA5M3h4X2dldF9zd2NvbXAoZGV2LCAmcHJlbG9hZCwgJmRlbGV0ZSk7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwogCXNlcV9wcmludGYoc2VxLCAicHJlbG9hZFx0XHQ6ICVkXG4iLCBwcmVsb2FkKTsKIAlzZXFfcHJpbnRmKHNlcSwgImRlbGV0ZVx0XHQ6ICVkXG4iLCBkZWxldGUpOwogCkBAIC0xMTAsNyArMTA5LDYgQEAKIAkJCQkmZGV2LT5kZXYsICZlcDkzeHhfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCiAJaWYgKElTX0VSUihydGMpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYwppbmRleCBkYjQ0NWM4Li44YzBkMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIE00OFQ4Nl9SRUdfU0VDQUxSTQkweDAxCiAjZGVmaW5lIE00OFQ4Nl9SRUdfTUlOCQkweDAyCiAjZGVmaW5lIE00OFQ4Nl9SRUdfTUlOQUxSTQkweDAzCi0jZGVmaW5lIE00OFQ4Nl9SRUdfSE9VUgkweDA0CisjZGVmaW5lIE00OFQ4Nl9SRUdfSE9VUgkJMHgwNAogI2RlZmluZSBNNDhUODZfUkVHX0hPVVJBTFJNCTB4MDUKICNkZWZpbmUgTTQ4VDg2X1JFR19ET1cJCTB4MDYgLyogMSA9IHN1bmRheSAqLwogI2RlZmluZSBNNDhUODZfUkVHX0RPTQkJMHgwNwpAQCAtNDgsMzMgKzQ4LDMzIEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtNDh0ODZfb3BzICpvcHMgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXJlZyA9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19CKTsKKwlyZWcgPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfQik7CiAKIAlpZiAocmVnICYgTTQ4VDg2X1JFR19CX0RNKSB7CiAJCS8qIGRhdGEgKGJpbmFyeSkgbW9kZSAqLwotCQl0bS0+dG1fc2VjCT0gb3BzLT5yZWFkYihNNDhUODZfUkVHX1NFQyk7Ci0JCXRtLT50bV9taW4JPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfTUlOKTsKLQkJdG0tPnRtX2hvdXIJPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfSE9VUikgJiAweDNGOwotCQl0bS0+dG1fbWRheQk9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19ET00pOworCQl0bS0+dG1fc2VjCT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX1NFQyk7CisJCXRtLT50bV9taW4JPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfTUlOKTsKKwkJdG0tPnRtX2hvdXIJPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfSE9VUikgJiAweDNGOworCQl0bS0+dG1fbWRheQk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET00pOwogCQkvKiB0bV9tb24gaXMgMC0xMSAqLwotCQl0bS0+dG1fbW9uCT0gb3BzLT5yZWFkYihNNDhUODZfUkVHX01PTlRIKSAtIDE7Ci0JCXRtLT50bV95ZWFyCT0gb3BzLT5yZWFkYihNNDhUODZfUkVHX1lFQVIpICsgMTAwOwotCQl0bS0+dG1fd2RheQk9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19ET1cpOworCQl0bS0+dG1fbW9uCT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01PTlRIKSAtIDE7CisJCXRtLT50bV95ZWFyCT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX1lFQVIpICsgMTAwOworCQl0bS0+dG1fd2RheQk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET1cpOwogCX0gZWxzZSB7CiAJCS8qIGJjZCBtb2RlICovCi0JCXRtLT50bV9zZWMJPSBCQ0QyQklOKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19TRUMpKTsKLQkJdG0tPnRtX21pbgk9IEJDRDJCSU4ob3BzLT5yZWFkYihNNDhUODZfUkVHX01JTikpOwotCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ob3BzLT5yZWFkYihNNDhUODZfUkVHX0hPVVIpICYgMHgzRik7Ci0JCXRtLT50bV9tZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfRE9NKSk7CisJCXRtLT50bV9zZWMJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19TRUMpKTsKKwkJdG0tPnRtX21pbgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01JTikpOworCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0hPVVIpICYgMHgzRik7CisJCXRtLT50bV9tZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9NKSk7CiAJCS8qIHRtX21vbiBpcyAwLTExICovCi0JCXRtLT50bV9tb24JPSBCQ0QyQklOKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19NT05USCkpIC0gMTsKLQkJdG0tPnRtX3llYXIJPSBCQ0QyQklOKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19ZRUFSKSkgKyAxMDA7Ci0JCXRtLT50bV93ZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfRE9XKSk7CisJCXRtLT50bV9tb24JPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NT05USCkpIC0gMTsKKwkJdG0tPnRtX3llYXIJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ZRUFSKSkgKyAxMDA7CisJCXRtLT50bV93ZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9XKSk7CiAJfQogCiAJLyogY29ycmVjdCB0aGUgaG91ciBpZiB0aGUgY2xvY2sgaXMgaW4gMTJoIG1vZGUgKi8KIAlpZiAoIShyZWcgJiBNNDhUODZfUkVHX0JfSDI0KSkKLQkJaWYgKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19IT1VSKSAmIDB4ODApCisJCWlmIChvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfSE9VUikgJiAweDgwKQogCQkJdG0tPnRtX2hvdXIgKz0gMTI7CiAKIAlyZXR1cm4gMDsKQEAgLTg2LDM1ICs4NiwzNSBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbTQ4dDg2X29wcyAqb3BzID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlyZWcgPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfQik7CisJcmVnID0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0IpOwogCiAJLyogdXBkYXRlIGZsYWcgYW5kIDI0aCBtb2RlICovCiAJcmVnIHw9IE00OFQ4Nl9SRUdfQl9TRVQgfCBNNDhUODZfUkVHX0JfSDI0OwotCW9wcy0+d3JpdGViKHJlZywgTTQ4VDg2X1JFR19CKTsKKwlvcHMtPndyaXRlYnl0ZShyZWcsIE00OFQ4Nl9SRUdfQik7CiAKIAlpZiAocmVnICYgTTQ4VDg2X1JFR19CX0RNKSB7CiAJCS8qIGRhdGEgKGJpbmFyeSkgbW9kZSAqLwotCQlvcHMtPndyaXRlYih0bS0+dG1fc2VjLCBNNDhUODZfUkVHX1NFQyk7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV9taW4sIE00OFQ4Nl9SRUdfTUlOKTsKLQkJb3BzLT53cml0ZWIodG0tPnRtX2hvdXIsIE00OFQ4Nl9SRUdfSE9VUik7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV9tZGF5LCBNNDhUODZfUkVHX0RPTSk7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV9tb24gKyAxLCBNNDhUODZfUkVHX01PTlRIKTsKLQkJb3BzLT53cml0ZWIodG0tPnRtX3llYXIgJSAxMDAsIE00OFQ4Nl9SRUdfWUVBUik7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV93ZGF5LCBNNDhUODZfUkVHX0RPVyk7CisJCW9wcy0+d3JpdGVieXRlKHRtLT50bV9zZWMsIE00OFQ4Nl9SRUdfU0VDKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX21pbiwgTTQ4VDg2X1JFR19NSU4pOworCQlvcHMtPndyaXRlYnl0ZSh0bS0+dG1faG91ciwgTTQ4VDg2X1JFR19IT1VSKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX21kYXksIE00OFQ4Nl9SRUdfRE9NKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX21vbiArIDEsIE00OFQ4Nl9SRUdfTU9OVEgpOworCQlvcHMtPndyaXRlYnl0ZSh0bS0+dG1feWVhciAlIDEwMCwgTTQ4VDg2X1JFR19ZRUFSKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX3dkYXksIE00OFQ4Nl9SRUdfRE9XKTsKIAl9IGVsc2UgewogCQkvKiBiY2QgbW9kZSAqLwotCQlvcHMtPndyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCBNNDhUODZfUkVHX1NFQyk7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIE00OFQ4Nl9SRUdfTUlOKTsKLQkJb3BzLT53cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIE00OFQ4Nl9SRUdfSE9VUik7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBNNDhUODZfUkVHX0RPTSk7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBNNDhUODZfUkVHX01PTlRIKTsKLQkJb3BzLT53cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ4Nl9SRUdfWUVBUik7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpLCBNNDhUODZfUkVHX0RPVyk7CisJCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX3NlYyksIE00OFQ4Nl9SRUdfU0VDKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbWluKSwgTTQ4VDg2X1JFR19NSU4pOworCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9ob3VyKSwgTTQ4VDg2X1JFR19IT1VSKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbWRheSksIE00OFQ4Nl9SRUdfRE9NKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIE00OFQ4Nl9SRUdfTU9OVEgpOworCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgTTQ4VDg2X1JFR19ZRUFSKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fd2RheSksIE00OFQ4Nl9SRUdfRE9XKTsKIAl9CiAKIAkvKiB1cGRhdGUgZW5kZWQgKi8KIAlyZWcgJj0gfk00OFQ4Nl9SRUdfQl9TRVQ7Ci0Jb3BzLT53cml0ZWIocmVnLCBNNDhUODZfUkVHX0IpOworCW9wcy0+d3JpdGVieXRlKHJlZywgTTQ4VDg2X1JFR19CKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI1LDE1ICsxMjUsMTIgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG00OHQ4Nl9vcHMgKm9wcyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JcmVnID0gb3BzLT5yZWFkYihNNDhUODZfUkVHX0IpOwotCi0Jc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogJXNcbiIsCi0JCSAocmVnICYgTTQ4VDg2X1JFR19CX0gyNCkgPyAieWVzIiA6ICJubyIpOworCXJlZyA9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19CKTsKIAogCXNlcV9wcmludGYoc2VxLCAibW9kZVx0XHQ6ICVzXG4iLAogCQkgKHJlZyAmIE00OFQ4Nl9SRUdfQl9ETSkgPyAiYmluYXJ5IiA6ICJiY2QiKTsKIAotCXJlZyA9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19EKTsKKwlyZWcgPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRCk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgImJhdHRlcnlcdFx0OiAlc1xuIiwKIAkJIChyZWcgJiBNNDhUODZfUkVHX0RfVlJUKSA/ICJvayIgOiAiZXhoYXVzdGVkIik7CkBAIC0xNTQsMTUgKzE1MSwxMyBAQAogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtNDh0ODYiLAogCQkJCSZkZXYtPmRldiwgJm00OHQ4Nl9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOworCWlmIChJU19FUlIocnRjKSkKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKLQl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHJ0Yyk7CiAKIAkvKiByZWFkIGJhdHRlcnkgc3RhdHVzICovCi0JcmVnID0gb3BzLT5yZWFkYihNNDhUODZfUkVHX0QpOworCXJlZyA9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19EKTsKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJiYXR0ZXJ5ICVzXG4iLAogCQkocmVnICYgTTQ4VDg2X1JFR19EX1ZSVCkgPyAib2siIDogImV4aGF1c3RlZCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwppbmRleCBkODU3ZDQ1Li5iYTlhNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKQEAgLTIyNywxNCArMjI3LDcgQEAKIAlyZXR1cm4gcGNmODU2M19zZXRfZGF0ZXRpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7CiB9CiAKLXN0YXRpYyBpbnQgcGNmODU2M19ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQotewotCXNlcV9wcmludGYoc2VxLCAiMjRoclx0XHQ6IHllc1xuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwY2Y4NTYzX3J0Y19vcHMgPSB7Ci0JLnByb2MJCT0gcGNmODU2M19ydGNfcHJvYywKIAkucmVhZF90aW1lCT0gcGNmODU2M19ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IHBjZjg1NjNfcnRjX3NldF90aW1lLAogfTsKQEAgLTI5Nyw4ICsyOTAsNiBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIApAQCAtMzIxLDggKzMxMiw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCmluZGV4IDkwYjhhOTcuLmNlZjVmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwpAQCAtNzEsNiArNzEsOCBAQAogCQkJCWFscm0ucGVuZGluZyA/ICJ5ZXMiIDogIm5vIik7CiAJfQogCisJc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKKwogCWlmIChvcHMtPnByb2MpCiAJCW9wcy0+cHJvYyhjbGFzc19kZXYtPmRldiwgc2VxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKaW5kZXggMzk2Yzg2OC4uNzU1M2Q3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCkBAIC0xNTEsOSArMTUxLDggQEAKIHsKIAlpbnQgZXJyLCBvc2MsIHRyaW07CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwotCi0JaWYgKChlcnIgPSByczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJm9zYywgJnRyaW0pKSA9PSAwKSB7CisJZXJyID0gcnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZvc2MsICZ0cmltKTsKKwlpZiAoZXJyID09IDApIHsKIAkJc2VxX3ByaW50ZihzZXEsICIlZC4lMDNkIEtIelxuIiwgb3NjIC8gMTAwMCwgb3NjICUgMTAwMCk7CiAJCXNlcV9wcmludGYoc2VxLCAidHJpbVx0OiAlZFxuIiwgdHJpbSk7CiAJfQpAQCAtMTcwLDMwICsxNjksMzEgQEAKIHN0YXRpYyBzc2l6ZV90IHJzNWMzNzJfc3lzZnNfc2hvd190cmltKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWludCB0cmltOworCWludCBlcnIsIHRyaW07CiAKLQlpZiAocnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksIE5VTEwsICZ0cmltKSA9PSAwKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUyeFxuIiwgdHJpbSk7CisJZXJyID0gcnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksIE5VTEwsICZ0cmltKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMnhcbiIsIHRyaW0pOwogfQogc3RhdGljIERFVklDRV9BVFRSKHRyaW0sIFNfSVJVR08sIHJzNWMzNzJfc3lzZnNfc2hvd190cmltLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgcnM1YzM3Ml9zeXNmc19zaG93X29zYyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgb3NjOworCWludCBlcnIsIG9zYzsKIAotCWlmIChyczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJm9zYywgTlVMTCkgPT0gMCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZCBLSHpcbiIsIG9zYyAvIDEwMDAsIG9zYyAlIDEwMDApOworCWVyciA9IHJzNWMzNzJfZ2V0X3RyaW0odG9faTJjX2NsaWVudChkZXYpLCAmb3NjLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZCBLSHpcbiIsIG9zYyAvIDEwMDAsIG9zYyAlIDEwMDApOwogfQogc3RhdGljIERFVklDRV9BVFRSKG9zYywgU19JUlVHTywgcnM1YzM3Ml9zeXNmc19zaG93X29zYywgTlVMTCk7CiAKIHN0YXRpYyBpbnQgcnM1YzM3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgcnM1YzM3Ml9wcm9iZSk7CiB9CiAKQEAgLTIzMyw4ICsyMzMsNiBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIApAQCAtMjYwLDggKzI1OCw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA4M2IyYmI0Li5hOTk3NTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0xNjAsMjcgKzE2MCwyNyBAQAogCXJldCA9IHJlcXVlc3RfaXJxKElSUV9SVEMxSHosIHNhMTEwMF9ydGNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCiAJCQkJInJ0YyAxSHoiLCBkZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGM6IElSUSVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX1JUQzFIeik7CisJCWRldl9lcnIoZGV2LCAiSVJRICVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX1JUQzFIeik7CiAJCWdvdG8gZmFpbF91aTsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1JUQ0Fscm0sIHNhMTEwMF9ydGNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCiAJCQkJInJ0YyBBbHJtIiwgZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRjOiBJUlElZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9SVENBbHJtKTsKKwkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfUlRDQWxybSk7CiAJCWdvdG8gZmFpbF9haTsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX09TVDEsIHRpbWVyMV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKIAkJCQkicnRjIHRpbWVyIiwgZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRjOiBJUlElZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9PU1QxKTsKKwkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfT1NUMSk7CiAJCWdvdG8gZmFpbF9waTsKIAl9CiAJcmV0dXJuIDA7CiAKICBmYWlsX3BpOgotCWZyZWVfaXJxKElSUV9SVENBbHJtLCBOVUxMKTsKKwlmcmVlX2lycShJUlFfUlRDQWxybSwgZGV2KTsKICBmYWlsX2FpOgotCWZyZWVfaXJxKElSUV9SVEMxSHosIE5VTEwpOworCWZyZWVfaXJxKElSUV9SVEMxSHosIGRldik7CiAgZmFpbF91aToKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJCXJ0Y19mcmVxID0gYXJnOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAogc3RhdGljIGludCBzYTExMDBfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC0yOTUsNyArMjk1LDcgQEAKIAogc3RhdGljIGludCBzYTExMDBfcnRjX3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKLQlzZXFfcHJpbnRmKHNlcSwgInRyaW0vZGl2aWRlclx0OiAweCUwOHhcbiIsIFJUVFIpOworCXNlcV9wcmludGYoc2VxLCAidHJpbS9kaXZpZGVyXHQ6IDB4JTA4bHhcbiIsIFJUVFIpOwogCXNlcV9wcmludGYoc2VxLCAiYWxhcm1fSVJRXHQ6ICVzXG4iLAogCQkJKFJUU1IgJiBSVFNSX0FMRSkgPyAieWVzIiA6ICJubyIgKTsKIAlzZXFfcHJpbnRmKHNlcSwgInVwZGF0ZV9JUlFcdDogJXNcbiIsCkBAIC0zMzIsNyArMzMyLDcgQEAKIAkgKi8KIAlpZiAoUlRUUiA9PSAwKSB7CiAJCVJUVFIgPSBSVENfREVGX0RJVklERVIgKyAoUlRDX0RFRl9UUklNIDw8IDE2KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicnRjOiB3YXJuaW5nOiBpbml0aWFsaXppbmcgZGVmYXVsdCBjbG9jayBkaXZpZGVyL3RyaW0gdmFsdWVcbiIpOworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAid2FybmluZzogaW5pdGlhbGl6aW5nIGRlZmF1bHQgY2xvY2sgZGl2aWRlci90cmltIHZhbHVlXG4iKTsKIAkJLyogVGhlIGN1cnJlbnQgUlRDIHZhbHVlIHByb2JhYmx5IGRvZXNuJ3QgbWFrZSBzZW5zZSBlaXRoZXIgKi8KIAkJUkNOUiA9IDA7CiAJfQpAQCAtMzQwLDE1ICszNDAsMTEgQEAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsICZzYTExMDBfcnRjX29wcywKIAkJCQlUSElTX01PRFVMRSk7CiAKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBSVEMgZGV2aWNlXG4iKTsKKwlpZiAoSVNfRVJSKHJ0YykpCiAJCXJldHVybiBQVFJfRVJSKHJ0Yyk7Ci0JfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJTQTExeHgvUFhBMnh4IFJUQyBSZWdpc3RlcmVkXG4iKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jIGIvZHJpdmVycy9ydGMvcnRjLXRlc3QuYwppbmRleCA0M2QxMDc0Li5lMWZhNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCi0Jc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKIAlzZXFfcHJpbnRmKHNlcSwgInRlc3RcdFx0OiB5ZXNcbiIpOwogCXNlcV9wcmludGYoc2VxLCAiaWRcdFx0OiAlZFxuIiwgcGxhdF9kZXYtPmlkKTsKIApAQCAtNzIsNyArNzEsNyBAQAogCQlyZXR1cm4gMDsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIH0KIApAQCAtMTIwLDggKzExOSw2IEBACiAJCQkJCQkmdGVzdF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmcGxhdF9kZXYtPmRldiwKLQkJCSJ1bmFibGUgdG8gcmVnaXN0ZXIgdGhlIGNsYXNzIGRldmljZVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCWRldmljZV9jcmVhdGVfZmlsZSgmcGxhdF9kZXYtPmRldiwgJmRldl9hdHRyX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3NTk2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIE5FQyBWUjQxMDAgc2VyaWVzIFJlYWwgVGltZSBDbG9jayB1bml0LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS92cjQxeHgvdnI0MXh4Lmg+CisKK01PRFVMRV9BVVRIT1IoIllvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMgVlI0MTAwIHNlcmllcyBSVEMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgUlRDMV9UWVBFMV9TVEFSVAkweDBiMDAwMGMwVUwKKyNkZWZpbmUgUlRDMV9UWVBFMV9FTkQJCTB4MGIwMDAwZGZVTAorI2RlZmluZSBSVEMyX1RZUEUxX1NUQVJUCTB4MGIwMDAxYzBVTAorI2RlZmluZSBSVEMyX1RZUEUxX0VORAkJMHgwYjAwMDFkZlVMCisKKyNkZWZpbmUgUlRDMV9UWVBFMl9TVEFSVAkweDBmMDAwMTAwVUwKKyNkZWZpbmUgUlRDMV9UWVBFMl9FTkQJCTB4MGYwMDAxMWZVTAorI2RlZmluZSBSVEMyX1RZUEUyX1NUQVJUCTB4MGYwMDAxMjBVTAorI2RlZmluZSBSVEMyX1RZUEUyX0VORAkJMHgwZjAwMDEzZlVMCisKKyNkZWZpbmUgUlRDMV9TSVpFCQkweDIwCisjZGVmaW5lIFJUQzJfU0laRQkJMHgyMAorCisvKiBSVEMgMSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVRJTUVMUkVHCQkweDAwCisjZGVmaW5lIEVUSU1FTVJFRwkJMHgwMgorI2RlZmluZSBFVElNRUhSRUcJCTB4MDQKKy8qIFJGVSAqLworI2RlZmluZSBFQ01QTFJFRwkJMHgwOAorI2RlZmluZSBFQ01QTVJFRwkJMHgwYQorI2RlZmluZSBFQ01QSFJFRwkJMHgwYworLyogUkZVICovCisjZGVmaW5lIFJUQ0wxTFJFRwkJMHgxMAorI2RlZmluZSBSVENMMUhSRUcJCTB4MTIKKyNkZWZpbmUgUlRDTDFDTlRMUkVHCQkweDE0CisjZGVmaW5lIFJUQ0wxQ05USFJFRwkJMHgxNgorI2RlZmluZSBSVENMMkxSRUcJCTB4MTgKKyNkZWZpbmUgUlRDTDJIUkVHCQkweDFhCisjZGVmaW5lIFJUQ0wyQ05UTFJFRwkJMHgxYworI2RlZmluZSBSVENMMkNOVEhSRUcJCTB4MWUKKworLyogUlRDIDIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRDTEtMUkVHCQkweDAwCisjZGVmaW5lIFRDTEtIUkVHCQkweDAyCisjZGVmaW5lIFRDTEtDTlRMUkVHCQkweDA0CisjZGVmaW5lIFRDTEtDTlRIUkVHCQkweDA2CisvKiBSRlUgKi8KKyNkZWZpbmUgUlRDSU5UUkVHCQkweDFlCisgI2RlZmluZSBUQ0xPQ0tfSU5UCQkweDA4CisgI2RlZmluZSBSVENMT05HMl9JTlQJCTB4MDQKKyAjZGVmaW5lIFJUQ0xPTkcxX0lOVAkJMHgwMgorICNkZWZpbmUgRUxBUFNFRFRJTUVfSU5UCTB4MDEKKworI2RlZmluZSBSVENfRlJFUVVFTkNZCQkzMjc2OAorI2RlZmluZSBNQVhfUEVSSU9ESUNfUkFURQk2NTUzCisjZGVmaW5lIE1BWF9VU0VSX1BFUklPRElDX1JBVEUJNjQKKworc3RhdGljIHZvaWQgX19pb21lbSAqcnRjMV9iYXNlOworc3RhdGljIHZvaWQgX19pb21lbSAqcnRjMl9iYXNlOworCisjZGVmaW5lIHJ0YzFfcmVhZChvZmZzZXQpCQlyZWFkdyhydGMxX2Jhc2UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgcnRjMV93cml0ZShvZmZzZXQsIHZhbHVlKQl3cml0ZXcoKHZhbHVlKSwgcnRjMV9iYXNlICsgKG9mZnNldCkpCisKKyNkZWZpbmUgcnRjMl9yZWFkKG9mZnNldCkJCXJlYWR3KHJ0YzJfYmFzZSArIChvZmZzZXQpKQorI2RlZmluZSBydGMyX3dyaXRlKG9mZnNldCwgdmFsdWUpCXdyaXRldygodmFsdWUpLCBydGMyX2Jhc2UgKyAob2Zmc2V0KSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBvY2ggPSAxOTcwOwkvKiBKYW4gMSAxOTcwIDAwOjAwOjAwICovCisKK3N0YXRpYyBzcGlubG9ja190IHJ0Y19sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIGNoYXIgcnRjX25hbWVbXSA9ICJSVEMiOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfZnJlcXVlbmN5Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfY291bnQ7CisKK3N0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VbMl0gPSB7CisJewkubmFtZQk9IHJ0Y19uYW1lLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJfSwKKwl7CS5uYW1lCT0gcnRjX25hbWUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAl9LAorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfZWxhcHNlZF9zZWNvbmQodm9pZCkKK3sKKworCXVuc2lnbmVkIGxvbmcgZmlyc3RfbG93LCBmaXJzdF9taWQsIGZpcnN0X2hpZ2g7CisKKwl1bnNpZ25lZCBsb25nIHNlY29uZF9sb3csIHNlY29uZF9taWQsIHNlY29uZF9oaWdoOworCisJZG8geworCQlmaXJzdF9sb3cgPSBydGMxX3JlYWQoRVRJTUVMUkVHKTsKKwkJZmlyc3RfbWlkID0gcnRjMV9yZWFkKEVUSU1FTVJFRyk7CisJCWZpcnN0X2hpZ2ggPSBydGMxX3JlYWQoRVRJTUVIUkVHKTsKKwkJc2Vjb25kX2xvdyA9IHJ0YzFfcmVhZChFVElNRUxSRUcpOworCQlzZWNvbmRfbWlkID0gcnRjMV9yZWFkKEVUSU1FTVJFRyk7CisJCXNlY29uZF9oaWdoID0gcnRjMV9yZWFkKEVUSU1FSFJFRyk7CisJfSB3aGlsZSAoZmlyc3RfbG93ICE9IHNlY29uZF9sb3cgfHwgZmlyc3RfbWlkICE9IHNlY29uZF9taWQgfHwKKwkgICAgICAgICBmaXJzdF9oaWdoICE9IHNlY29uZF9oaWdoKTsKKworCXJldHVybiAoZmlyc3RfaGlnaCA8PCAxNykgfCAoZmlyc3RfbWlkIDw8IDEpIHwgKGZpcnN0X2xvdyA+PiAxNSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9lbGFwc2VkX3NlY29uZCh1bnNpZ25lZCBsb25nIHNlYykKK3sKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVUSU1FTFJFRywgKHVpbnQxNl90KShzZWMgPDwgMTUpKTsKKwlydGMxX3dyaXRlKEVUSU1FTVJFRywgKHVpbnQxNl90KShzZWMgPj4gMSkpOworCXJ0YzFfd3JpdGUoRVRJTUVIUkVHLCAodWludDE2X3QpKHNlYyA+PiAxNykpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHZyNDF4eF9ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKKwlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKKwlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKKwlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIDApOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOworCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Cit9CisKK3N0YXRpYyBpbnQgdnI0MXh4X3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJdW5zaWduZWQgbG9uZyBlcG9jaF9zZWMsIGVsYXBzZWRfc2VjOworCisJZXBvY2hfc2VjID0gbWt0aW1lKGVwb2NoLCAxLCAxLCAwLCAwLCAwKTsKKwllbGFwc2VkX3NlYyA9IHJlYWRfZWxhcHNlZF9zZWNvbmQoKTsKKworCXJ0Y190aW1lX3RvX3RtKGVwb2NoX3NlYyArIGVsYXBzZWRfc2VjLCB0aW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJdW5zaWduZWQgbG9uZyBlcG9jaF9zZWMsIGN1cnJlbnRfc2VjOworCisJZXBvY2hfc2VjID0gbWt0aW1lKGVwb2NoLCAxLCAxLCAwLCAwLCAwKTsKKwljdXJyZW50X3NlYyA9IG1rdGltZSh0aW1lLT50bV95ZWFyICsgMTkwMCwgdGltZS0+dG1fbW9uICsgMSwgdGltZS0+dG1fbWRheSwKKwkgICAgICAgICAgICAgICAgICAgICB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7CisKKwl3cml0ZV9lbGFwc2VkX3NlY29uZChjdXJyZW50X3NlYyAtIGVwb2NoX3NlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cjQxeHhfcnRjX3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqd2thbHJtKQoreworCXVuc2lnbmVkIGxvbmcgbG93LCBtaWQsIGhpZ2g7CisJc3RydWN0IHJ0Y190aW1lICp0aW1lID0gJndrYWxybS0+dGltZTsKKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWxvdyA9IHJ0YzFfcmVhZChFQ01QTFJFRyk7CisJbWlkID0gcnRjMV9yZWFkKEVDTVBNUkVHKTsKKwloaWdoID0gcnRjMV9yZWFkKEVDTVBIUkVHKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCisJcnRjX3RpbWVfdG9fdG0oKGhpZ2ggPDwgMTcpIHwgKG1pZCA8PCAxKSB8IChsb3cgPj4gMTUpLCB0aW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKndrYWxybSkKK3sKKwl1bnNpZ25lZCBsb25nIGFsYXJtX3NlYzsKKwlzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUgPSAmd2thbHJtLT50aW1lOworCisJYWxhcm1fc2VjID0gbWt0aW1lKHRpbWUtPnRtX3llYXIgKyAxOTAwLCB0aW1lLT50bV9tb24gKyAxLCB0aW1lLT50bV9tZGF5LAorCSAgICAgICAgICAgICAgICAgICB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVDTVBMUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA8PCAxNSkpOworCXJ0YzFfd3JpdGUoRUNNUE1SRUcsICh1aW50MTZfdCkoYWxhcm1fc2VjID4+IDEpKTsKKwlydGMxX3dyaXRlKEVDTVBIUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA+PiAxNykpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cjQxeHhfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUlFX09OOgorCQllbmFibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJCWJyZWFrOworCWNhc2UgUlRDX0FJRV9PRkY6CisJCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJCWJyZWFrOworCWNhc2UgUlRDX1BJRV9PTjoKKwkJZW5hYmxlX2lycShSVENMT05HMV9JUlEpOworCQlicmVhazsKKwljYXNlIFJUQ19QSUVfT0ZGOgorCQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOworCQlicmVhazsKKwljYXNlIFJUQ19JUlFQX1JFQUQ6CisJCXJldHVybiBwdXRfdXNlcihwZXJpb2RpY19mcmVxdWVuY3ksICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7CisJCWJyZWFrOworCWNhc2UgUlRDX0lSUVBfU0VUOgorCQlpZiAoYXJnID4gTUFYX1BFUklPRElDX1JBVEUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoYXJnID4gTUFYX1VTRVJfUEVSSU9ESUNfUkFURSAmJiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpID09IDApCisJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQlwZXJpb2RpY19mcmVxdWVuY3kgPSBhcmc7CisKKwkJY291bnQgPSBSVENfRlJFUVVFTkNZOworCQlkb19kaXYoY291bnQsIGFyZyk7CisKKwkJcGVyaW9kaWNfY291bnQgPSBjb3VudDsKKworCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwkJcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKKwkJcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKKworCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfRVBPQ0hfUkVBRDoKKwkJcmV0dXJuIHB1dF91c2VyKGVwb2NoLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOworCWNhc2UgUlRDX0VQT0NIX1NFVDoKKwkJLyogRG9lc24ndCBzdXBwb3J0IGJlZm9yZSAxOTAwICovCisJCWlmIChhcmcgPCAxOTAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNhcGFibGUoQ0FQX1NZU19USU1FKSA9PSAwKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJZXBvY2ggPSBhcmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBlbGFwc2VkdGltZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjMl93cml0ZShSVENJTlRSRUcsIEVMQVBTRURUSU1FX0lOVCk7CisKKwlydGNfdXBkYXRlX2lycSgmcnRjLT5jbGFzc19kZXYsIDEsIFJUQ19BRik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBydGNsb25nMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGxvbmcgY291bnQgPSBwZXJpb2RpY19jb3VudDsKKworCXJ0YzJfd3JpdGUoUlRDSU5UUkVHLCBSVENMT05HMV9JTlQpOworCisJcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKKwlydGMxX3dyaXRlKFJUQ0wxSFJFRywgY291bnQgPj4gMTYpOworCisJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBSVENfUEYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgdnI0MXh4X3J0Y19vcHMgPSB7CisJLnJlbGVhc2UJPSB2cjQxeHhfcnRjX3JlbGVhc2UsCisJLmlvY3RsCQk9IHZyNDF4eF9ydGNfaW9jdGwsCisJLnJlYWRfdGltZQk9IHZyNDF4eF9ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IHZyNDF4eF9ydGNfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSB2cjQxeHhfcnRjX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQk9IHZyNDF4eF9ydGNfc2V0X2FsYXJtLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCByZXR2YWw7CisKKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKQorCQlyZXR1cm4gLUVCVVNZOworCisJcnRjMV9iYXNlID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgUlRDMV9TSVpFKTsKKwlpZiAocnRjMV9iYXNlID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlydGMyX2Jhc2UgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBSVEMyX1NJWkUpOworCWlmIChydGMyX2Jhc2UgPT0gTlVMTCkgeworCQlpb3VubWFwKHJ0YzFfYmFzZSk7CisJCXJ0YzFfYmFzZSA9IE5VTEw7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihydGNfbmFtZSwgJnBkZXYtPmRldiwgJnZyNDF4eF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCWlvdW5tYXAocnRjMV9iYXNlKTsKKwkJaW91bm1hcChydGMyX2Jhc2UpOworCQlydGMxX2Jhc2UgPSBOVUxMOworCQlydGMyX2Jhc2UgPSBOVUxMOworCQlyZXR1cm4gUFRSX0VSUihydGMpOworCX0KKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJ0YzFfd3JpdGUoRUNNUExSRUcsIDApOworCXJ0YzFfd3JpdGUoRUNNUE1SRUcsIDApOworCXJ0YzFfd3JpdGUoRUNNUEhSRUcsIDApOworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCAwKTsKKwlydGMxX3dyaXRlKFJUQ0wxSFJFRywgMCk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWlycSA9IEVMQVBTRURUSU1FX0lSUTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGVsYXBzZWR0aW1lX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCSAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkX3RpbWUiLCBwZGV2KTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJaXJxID0gUlRDTE9ORzFfSVJROworCQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCQkgICAgICAgICAgICAgICAgICAgICAicnRjbG9uZzEiLCBwZGV2KTsKKwl9CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInJ0YzogSVJRJWQgaXMgYnVzeVxuIiwgaXJxKTsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJCWlmIChpcnEgPT0gUlRDTE9ORzFfSVJRKQorCQkJZnJlZV9pcnEoRUxBUFNFRFRJTUVfSVJRLCBOVUxMKTsKKwkJaW91bm1hcChydGMxX2Jhc2UpOworCQlpb3VubWFwKHJ0YzJfYmFzZSk7CisJCXJ0YzFfYmFzZSA9IE5VTEw7CisJCXJ0YzJfYmFzZSA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKKworCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKKworCXByaW50ayhLRVJOX0lORk8gInJ0YzogUmVhbCBUaW1lIENsb2NrIG9mIE5FQyBWUjQxMDAgc2VyaWVzXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKworCXJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChydGMgIT0gTlVMTCkKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZyZWVfaXJxKEVMQVBTRURUSU1FX0lSUSwgTlVMTCk7CisJZnJlZV9pcnEoUlRDTE9ORzFfSVJRLCBOVUxMKTsKKwlpZiAocnRjMV9iYXNlICE9IE5VTEwpCisJCWlvdW5tYXAocnRjMV9iYXNlKTsKKwlpZiAocnRjMl9iYXNlICE9IE5VTEwpCisJCWlvdW5tYXAocnRjMl9iYXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnRjX3BsYXRmb3JtX2RldmljZTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRjX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcnRjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnRjX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gcnRjX25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2cjQxeHhfcnRjX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUpIHsKKwljYXNlIENQVV9WUjQxMTE6CisJY2FzZSBDUFVfVlI0MTIxOgorCQlydGNfcmVzb3VyY2VbMF0uc3RhcnQgPSBSVEMxX1RZUEUxX1NUQVJUOworCQlydGNfcmVzb3VyY2VbMF0uZW5kID0gUlRDMV9UWVBFMV9FTkQ7CisJCXJ0Y19yZXNvdXJjZVsxXS5zdGFydCA9IFJUQzJfVFlQRTFfU1RBUlQ7CisJCXJ0Y19yZXNvdXJjZVsxXS5lbmQgPSBSVEMyX1RZUEUxX0VORDsKKwkJYnJlYWs7CisJY2FzZSBDUFVfVlI0MTIyOgorCWNhc2UgQ1BVX1ZSNDEzMToKKwljYXNlIENQVV9WUjQxMzM6CisJCXJ0Y19yZXNvdXJjZVswXS5zdGFydCA9IFJUQzFfVFlQRTJfU1RBUlQ7CisJCXJ0Y19yZXNvdXJjZVswXS5lbmQgPSBSVEMxX1RZUEUyX0VORDsKKwkJcnRjX3Jlc291cmNlWzFdLnN0YXJ0ID0gUlRDMl9UWVBFMl9TVEFSVDsKKwkJcnRjX3Jlc291cmNlWzFdLmVuZCA9IFJUQzJfVFlQRTJfRU5EOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CisJfQorCisJcnRjX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiUlRDIiwgLTEpOworCWlmIChydGNfcGxhdGZvcm1fZGV2aWNlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocnRjX3BsYXRmb3JtX2RldmljZSwKKwkJCQlydGNfcmVzb3VyY2UsIEFSUkFZX1NJWkUocnRjX3Jlc291cmNlKSk7CisKKwlpZiAocmV0dmFsID09IDApCisJCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGQocnRjX3BsYXRmb3JtX2RldmljZSk7CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcnRjX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZyNDF4eF9ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZydGNfcGxhdGZvcm1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihydGNfcGxhdGZvcm1fZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQodnI0MXh4X3J0Y19pbml0KTsKK21vZHVsZV9leGl0KHZyNDF4eF9ydGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCmluZGV4IDYyMWQxN2EuLjc4OGI2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjYiCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjAuNyIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW46IG5vbmUuIFRoaXMgY2hpcCBpcyBsb2NhdGVkIGF0CiAgKiAweDZmIGFuZCB1c2VzIGEgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3NpbmcuCkBAIC00NTEsOCArNDUxLDYgQEAKIHsKIAlpbnQgZXJyLCBkdHJpbSwgYXRyaW07CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwotCiAJaWYgKChlcnIgPSB4MTIwNV9nZXRfZHRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmZHRyaW0pKSA9PSAwKQogCQlzZXFfcHJpbnRmKHNlcSwgImRpZ2l0YWxfdHJpbVx0OiAlZCBwcG1cbiIsIGR0cmltKTsKIApAQCAtNDczLDMwICs0NzEsMzEgQEAKIHN0YXRpYyBzc2l6ZV90IHgxMjA1X3N5c2ZzX3Nob3dfYXRyaW0oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JaW50IGF0cmltOworCWludCBlcnIsIGF0cmltOwogCi0JaWYgKHgxMjA1X2dldF9hdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZhdHJpbSkgPT0gMCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAyZCBwRlxuIiwKLQkJCWF0cmltIC8gMTAwMCwgYXRyaW0gJSAxMDAwKTsKLQlyZXR1cm4gMDsKKwllcnIgPSB4MTIwNV9nZXRfYXRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmYXRyaW0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDJkIHBGXG4iLCBhdHJpbSAvIDEwMDAsIGF0cmltICUgMTAwMCk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYXRyaW0sIFNfSVJVR08sIHgxMjA1X3N5c2ZzX3Nob3dfYXRyaW0sIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCB4MTIwNV9zeXNmc19zaG93X2R0cmltKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWludCBkdHJpbTsKKwlpbnQgZXJyLCBkdHJpbTsKIAotCWlmICh4MTIwNV9nZXRfZHRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmZHRyaW0pID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIHBwbVxuIiwgZHRyaW0pOworCWVyciA9IHgxMjA1X2dldF9kdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZkdHJpbSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIHBwbVxuIiwgZHRyaW0pOwogfQogc3RhdGljIERFVklDRV9BVFRSKGR0cmltLCBTX0lSVUdPLCB4MTIwNV9zeXNmc19zaG93X2R0cmltLCBOVUxMKTsKIAogc3RhdGljIGludCB4MTIwNV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgeDEyMDVfcHJvYmUpOwogfQogCkBAIC01NDUsOCArNTQ0LDYgQEAKIAogCWlmIChJU19FUlIocnRjKSkgewogCQllcnIgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LAotCQkJInVuYWJsZSB0byByZWdpc3RlciB0aGUgY2xhc3MgZGV2aWNlXG4iKTsKIAkJZ290byBleGl0X2RldGFjaDsKIAl9CiAKQEAgLTU4NSw4ICs1ODIsNiBAQAogCWludCBlcnI7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQogIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggMGE5ZjEyYy4uY2ZiMWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0zMTUsNiArMzE1LDExIEBACiAJCXJjID0gZGFzZF9zdGF0ZV9iYXNpY190b19yZWFkeShkZXZpY2UpOwogCiAJaWYgKCFyYyAmJgorCSAgICBkZXZpY2UtPnN0YXRlID09IERBU0RfU1RBVEVfVU5GTVQgJiYKKwkgICAgZGV2aWNlLT50YXJnZXQgPiBEQVNEX1NUQVRFX1VORk1UKQorCQlyYyA9IC1FUEVSTTsKKworCWlmICghcmMgJiYKIAkgICAgZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX1JFQURZICYmCiAJICAgIGRldmljZS0+dGFyZ2V0ID49IERBU0RfU1RBVEVfT05MSU5FKQogCQlyYyA9IGRhc2Rfc3RhdGVfcmVhZHlfdG9fb25saW5lKGRldmljZSk7CkBAIC0xMjU3LDI1ICsxMjYyLDI4IEBACiAJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+Y2N3X3F1ZXVlKSkKIAkJcmV0dXJuOwogCWNxciA9IGxpc3RfZW50cnkoZGV2aWNlLT5jY3dfcXVldWUubmV4dCwgc3RydWN0IGRhc2RfY2N3X3JlcSwgbGlzdCk7Ci0gICAgICAgIC8qIGNoZWNrIEZBSUxGQVNUICovCisJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX1FVRVVFRCkKKwkJcmV0dXJuOworCS8qIE5vbi10ZW1wb3Jhcnkgc3RvcCBjb25kaXRpb24gd2lsbCB0cmlnZ2VyIGZhaWwgZmFzdCAqLwogCWlmIChkZXZpY2UtPnN0b3BwZWQgJiB+REFTRF9TVE9QUEVEX1BFTkRJTkcgJiYKIAkgICAgdGVzdF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKSAmJgogCSAgICAoIWRhc2RfZWVyX2VuYWJsZWQoZGV2aWNlKSkpIHsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAJCWRhc2Rfc2NoZWR1bGVfYmgoZGV2aWNlKTsKKwkJcmV0dXJuOwogCX0KLQlpZiAoKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX1FVRVVFRCkgJiYKLQkgICAgKCFkZXZpY2UtPnN0b3BwZWQpKSB7Ci0JCS8qIHRyeSB0byBzdGFydCB0aGUgZmlyc3QgSS9PIHRoYXQgY2FuIGJlIHN0YXJ0ZWQgKi8KLQkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnN0YXJ0X0lPKGNxcik7Ci0JCWlmIChyYyA9PSAwKQotCQkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCBjcXItPmV4cGlyZXMpOwotCQllbHNlIGlmIChyYyA9PSAtRUFDQ0VTKSB7Ci0JCQlkYXNkX3NjaGVkdWxlX2JoKGRldmljZSk7Ci0JCX0gZWxzZQotCQkJLyogSG1wZiwgdHJ5IGFnYWluIGluIDEvMiBzZWMgKi8KLQkJCWRhc2Rfc2V0X3RpbWVyKGRldmljZSwgNTApOwotCX0KKwkvKiBEb24ndCB0cnkgdG8gc3RhcnQgcmVxdWVzdHMgaWYgZGV2aWNlIGlzIHN0b3BwZWQgKi8KKwlpZiAoZGV2aWNlLT5zdG9wcGVkKQorCQlyZXR1cm47CisKKwlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+c3RhcnRfSU8oY3FyKTsKKwlpZiAocmMgPT0gMCkKKwkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCBjcXItPmV4cGlyZXMpOworCWVsc2UgaWYgKHJjID09IC1FQUNDRVMpIHsKKwkJZGFzZF9zY2hlZHVsZV9iaChkZXZpY2UpOworCX0gZWxzZQorCQkvKiBIbXBmLCB0cnkgYWdhaW4gaW4gMS8yIHNlYyAqLworCQlkYXNkX3NldF90aW1lcihkZXZpY2UsIDUwKTsKIH0KIAogLyoKQEAgLTE5NjgsNyArMTk3Niw3IEBACiBkYXNkX2dlbmVyaWNfc2V0X29mZmxpbmUgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwotCWludCBtYXhfY291bnQ7CisJaW50IG1heF9jb3VudCwgb3Blbl9jb3VudDsKIAogCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2RldihjZGV2KTsKIAlpZiAoSVNfRVJSKGRldmljZSkpCkBAIC0xOTg1LDEwICsxOTkzLDE2IEBACiAJICogaW4gdGhlIG90aGVyIG9wZW5lcnMuCiAJICovCiAJbWF4X2NvdW50ID0gZGV2aWNlLT5iZGV2ID8gMCA6IC0xOwotCWlmIChhdG9taWNfcmVhZCgmZGV2aWNlLT5vcGVuX2NvdW50KSA+IG1heF9jb3VudCkgewotCQlwcmludGsgKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSB3aXRoIG9wZW4iCi0JCQkiIGNvdW50ID0gJWkuXG4iLAotCQkJYXRvbWljX3JlYWQoJmRldmljZS0+b3Blbl9jb3VudCkpOworCW9wZW5fY291bnQgPSAoaW50KSBhdG9taWNfcmVhZCgmZGV2aWNlLT5vcGVuX2NvdW50KTsKKwlpZiAob3Blbl9jb3VudCA+IG1heF9jb3VudCkgeworCQlpZiAob3Blbl9jb3VudCA+IDApCisJCQlwcmludGsgKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSB3aXRoICIKKwkJCQkib3BlbiBjb3VudCA9ICVpLlxuIiwKKwkJCQlvcGVuX2NvdW50KTsKKwkJZWxzZQorCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzIiwKKwkJCQkiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSBkdWUgdG8gaW50ZXJuYWwgIgorCQkJCSJ1c2VcbiIpOwogCQljbGVhcl9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZkZXZpY2UtPmZsYWdzKTsKIAkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IGMxYzZmMTMuLjIxNmJjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC00NSw2ICs0NSw3IEBACiAgICAgICAgIHVuc2lnbmVkIGludCBkZXZpbmRleDsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmVhdHVyZXM7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGRhc2RfdWlkIHVpZDsKIH07CiAKIC8qCkBAIC03MTYsNiArNzE3LDY4IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihkaXNjaXBsaW5lLCAwNDQ0LCBkYXNkX2Rpc2NpcGxpbmVfc2hvdywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90CitkYXNkX2FsaWFzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCWludCBhbGlhczsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChkZXYtPmJ1c19pZCk7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlpZiAoIUlTX0VSUihkZXZtYXApKQorCQlhbGlhcyA9IGRldm1hcC0+dWlkLmFsaWFzOworCWVsc2UKKwkJYWxpYXMgPSAwOworCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgYWxpYXMgPyAiMVxuIiA6ICIwXG4iKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGFsaWFzLCAwNDQ0LCBkYXNkX2FsaWFzX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorZGFzZF92ZW5kb3Jfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisJY2hhciAqdmVuZG9yOworCisJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGRldi0+YnVzX2lkKTsKKwlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWlmICghSVNfRVJSKGRldm1hcCkgJiYgc3RybGVuKGRldm1hcC0+dWlkLnZlbmRvcikgPiAwKQorCQl2ZW5kb3IgPSBkZXZtYXAtPnVpZC52ZW5kb3I7CisJZWxzZQorCQl2ZW5kb3IgPSAiIjsKKwlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgdmVuZG9yKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHZlbmRvciwgMDQ0NCwgZGFzZF92ZW5kb3Jfc2hvdywgTlVMTCk7CisKKyNkZWZpbmUgVUlEX1NUUkxFTiAoIC8qIHZlbmRvciAqLyAzICsgMSArIC8qIHNlcmlhbCAgICAqLyAxNCArIDEgK1wKKwkJICAgICAvKiBTU0lEICAgKi8gNCArIDEgKyAvKiB1bml0IGFkZHIgKi8gMiArIDEpCisKK3N0YXRpYyBzc2l6ZV90CitkYXNkX3VpZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKwljaGFyIHVpZFtVSURfU1RSTEVOXTsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChkZXYtPmJ1c19pZCk7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlpZiAoIUlTX0VSUihkZXZtYXApICYmIHN0cmxlbihkZXZtYXAtPnVpZC52ZW5kb3IpID4gMCkKKwkJc25wcmludGYodWlkLCBzaXplb2YodWlkKSwgIiVzLiVzLiUwNHguJTAyeCIsCisJCQkgZGV2bWFwLT51aWQudmVuZG9yLCBkZXZtYXAtPnVpZC5zZXJpYWwsCisJCQkgZGV2bWFwLT51aWQuc3NpZCwgZGV2bWFwLT51aWQudW5pdF9hZGRyKTsKKwllbHNlCisJCXVpZFswXSA9IDA7CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHVpZCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih1aWQsIDA0NDQsIGRhc2RfdWlkX3Nob3csIE5VTEwpOworCiAvKgogICogZXh0ZW5kZWQgZXJyb3ItcmVwb3J0aW5nCiAgKi8KQEAgLTc1OSw2ICs4MjIsOSBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBkYXNkX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3JlYWRvbmx5LmF0dHIsCiAJJmRldl9hdHRyX2Rpc2NpcGxpbmUuYXR0ciwKKwkmZGV2X2F0dHJfYWxpYXMuYXR0ciwKKwkmZGV2X2F0dHJfdmVuZG9yLmF0dHIsCisJJmRldl9hdHRyX3VpZC5hdHRyLAogCSZkZXZfYXR0cl91c2VfZGlhZy5hdHRyLAogCSZkZXZfYXR0cl9lZXJfZW5hYmxlZC5hdHRyLAogCU5VTEwsCkBAIC03NjgsNiArODM0LDQyIEBACiAJLmF0dHJzID0gZGFzZF9hdHRycywKIH07CiAKKworLyoKKyAqIFJldHVybiBjb3B5IG9mIHRoZSBkZXZpY2UgdW5pcXVlIGlkZW50aWZpZXIuCisgKi8KK2ludAorZGFzZF9nZXRfdWlkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGFzZF91aWQgKnVpZCkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChjZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoSVNfRVJSKGRldm1hcCkpCisJCXJldHVybiBQVFJfRVJSKGRldm1hcCk7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwkqdWlkID0gZGV2bWFwLT51aWQ7CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCXJldHVybiAwOworfQorCisvKgorICogUmVnaXN0ZXIgdGhlIGdpdmVuIGRldmljZSB1bmlxdWUgaWRlbnRpZmllciBpbnRvIGRldm1hcCBzdHJ1Y3QuCisgKi8KK2ludAorZGFzZF9zZXRfdWlkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGFzZF91aWQgKnVpZCkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChjZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoSVNfRVJSKGRldm1hcCkpCisJCXJldHVybiBQVFJfRVJSKGRldm1hcCk7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlkZXZtYXAtPnVpZCA9ICp1aWQ7CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkYXNkX3NldF91aWQpOworCiAvKgogICogUmV0dXJuIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZmVhdHVyZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGVlMDllZjMuLjdkNWE2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTQ0Niw2ICs0NDYsMzkgQEAKIAlyZXR1cm4gTEFCRUxfU0laRTsKIH0KIAorLyoKKyAqIEdlbmVyYXRlIGRldmljZSB1bmlxdWUgaWQgdGhhdCBzcGVjaWZpZXMgdGhlIHBoeXNpY2FsIGRldmljZS4KKyAqLworc3RhdGljIGludAorZGFzZF9lY2tkX2dlbmVyYXRlX3VpZChzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRhc2RfdWlkICp1aWQpCit7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCBkYXNkX2Vja2RfY29uZmRhdGEgKmNvbmZkYXRhOworCisJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY29uZmRhdGEgPSAmcHJpdmF0ZS0+Y29uZl9kYXRhOworCWlmICghY29uZmRhdGEpCisJCXJldHVybiAtRU5PREVWOworCisJbWVtc2V0KHVpZCwgMCwgc2l6ZW9mKHN0cnVjdCBkYXNkX3VpZCkpOworCXN0cm5jcHkodWlkLT52ZW5kb3IsIGNvbmZkYXRhLT5uZWQxLkhEQV9tYW51ZmFjdHVyZXIsCisJCXNpemVvZih1aWQtPnZlbmRvcikgLSAxKTsKKwlFQkNBU0ModWlkLT52ZW5kb3IsIHNpemVvZih1aWQtPnZlbmRvcikgLSAxKTsKKwlzdHJuY3B5KHVpZC0+c2VyaWFsLCBjb25mZGF0YS0+bmVkMS5IREFfbG9jYXRpb24sCisJCXNpemVvZih1aWQtPnNlcmlhbCkgLSAxKTsKKwlFQkNBU0ModWlkLT5zZXJpYWwsIHNpemVvZih1aWQtPnNlcmlhbCkgLSAxKTsKKwl1aWQtPnNzaWQgPSBjb25mZGF0YS0+bmVxLnN1YnN5c3RlbUlEOworCWlmIChjb25mZGF0YS0+bmVkMi5zbmVxLmZsYWdzID09IDB4NDApIHsKKwkJdWlkLT5hbGlhcyA9IDE7CisJCXVpZC0+dW5pdF9hZGRyID0gY29uZmRhdGEtPm5lZDIuc25lcS5iYXNlX3VuaXRfYWRkcjsKKwl9IGVsc2UKKwkJdWlkLT51bml0X2FkZHIgPSBjb25mZGF0YS0+bmVkMS51bml0X2FkZHI7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogZGFzZF9lY2tkX3JlYWRfY29uZihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTUwNywxMSArNTQwLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLQorLyoKKyAqIENoZWNrIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuCisgKiBJZiB0aGUgZGV2aWNlIGlzIGFjY2Vzc2libGUgdXNpbmcgRUNLRCBkaXNjaXBsaW5lLCB0aGUgZGV2aWNlIGlzIGVuYWJsZWQuCisgKi8KIHN0YXRpYyBpbnQKIGRhc2RfZWNrZF9jaGVja19jaGFyYWN0ZXJpc3RpY3Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCBkYXNkX3VpZCB1aWQ7CiAJdm9pZCAqcmRjX2RhdGE7CiAJaW50IHJjOwogCkBAIC01MzYsNiArNTczLDcgQEAKIAogCS8qIFJlYWQgRGV2aWNlIENoYXJhY3RlcmlzdGljcyAqLwogCXJkY19kYXRhID0gKHZvaWQgKikgJihwcml2YXRlLT5yZGNfZGF0YSk7CisJbWVtc2V0KHJkY19kYXRhLCAwLCBzaXplb2YocmRjX2RhdGEpKTsKIAlyYyA9IHJlYWRfZGV2X2NoYXJzKGRldmljZS0+Y2RldiwgJnJkY19kYXRhLCA2NCk7CiAJaWYgKHJjKSB7CiAJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLApAQCAtNTU2LDggKzU5NCwxNyBAQAogCiAJLyogUmVhZCBDb25maWd1cmF0aW9uIERhdGEgKi8KIAlyYyA9IGRhc2RfZWNrZF9yZWFkX2NvbmYgKGRldmljZSk7Ci0JcmV0dXJuIHJjOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCisJLyogR2VuZXJhdGUgZGV2aWNlIHVuaXF1ZSBpZCBhbmQgcmVnaXN0ZXIgaW4gZGV2bWFwICovCisJcmMgPSBkYXNkX2Vja2RfZ2VuZXJhdGVfdWlkKGRldmljZSwgJnVpZCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IGRhc2Rfc2V0X3VpZChkZXZpY2UtPmNkZXYsICZ1aWQpOworCisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKaW5kZXggYWQ4NTI0Yi4uZDU3MzRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaApAQCAtMjI4LDI2ICsyMjgsMzYgQEAKIAkJdW5zaWduZWQgY2hhciBIREFfbWFudWZhY3R1cmVyWzNdOwogCQl1bnNpZ25lZCBjaGFyIEhEQV9sb2NhdGlvblsyXTsKIAkJdW5zaWduZWQgY2hhciBIREFfc2Vxbm9bMTJdOwotCQlfX3UxNiBJRDsKKwkJX191OCBJRDsKKwkJX191OCB1bml0X2FkZHI7CiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbmVkMTsKLQlzdHJ1Y3QgeworCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGNoYXIgaWRlbnRpZmllcjoyOwotCQkJdW5zaWduZWQgY2hhciB0b2tlbl9pZDoxOwotCQkJdW5zaWduZWQgY2hhciBzbm9fdmFsaWQ6MTsKLQkJCXVuc2lnbmVkIGNoYXIgc3Vic3Rfc25vOjE7Ci0JCQl1bnNpZ25lZCBjaGFyIHJlY05FRDoxOwotCQkJdW5zaWduZWQgY2hhciBlbXVORUQ6MTsKLQkJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ6MTsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZmxhZ3M7Ci0JCV9fdTggZGVzY3JpcHRvcjsKLQkJX191OCByZXNlcnZlZFsyXTsKLQkJdW5zaWduZWQgY2hhciBkZXZfdHlwZVs2XTsKLQkJdW5zaWduZWQgY2hhciBkZXZfbW9kZWxbM107Ci0JCXVuc2lnbmVkIGNoYXIgREFTRF9tYW51ZmFjdHVyZXJbM107Ci0JCXVuc2lnbmVkIGNoYXIgREFTRF9sb2NhdGlvblsyXTsKLQkJdW5zaWduZWQgY2hhciBEQVNEX3NlcW5vWzEyXTsKLQkJX191MTYgSUQ7CisJCQlzdHJ1Y3QgeworCQkJCXVuc2lnbmVkIGNoYXIgaWRlbnRpZmllcjoyOworCQkJCXVuc2lnbmVkIGNoYXIgdG9rZW5faWQ6MTsKKwkJCQl1bnNpZ25lZCBjaGFyIHNub192YWxpZDoxOworCQkJCXVuc2lnbmVkIGNoYXIgc3Vic3Rfc25vOjE7CisJCQkJdW5zaWduZWQgY2hhciByZWNORUQ6MTsKKwkJCQl1bnNpZ25lZCBjaGFyIGVtdU5FRDoxOworCQkJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ6MTsKKwkJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZsYWdzOworCQkJX191OCBkZXNjcmlwdG9yOworCQkJX191OCByZXNlcnZlZFsyXTsKKwkJCXVuc2lnbmVkIGNoYXIgZGV2X3R5cGVbNl07CisJCQl1bnNpZ25lZCBjaGFyIGRldl9tb2RlbFszXTsKKwkJCXVuc2lnbmVkIGNoYXIgREFTRF9tYW51ZmFjdHVyZXJbM107CisJCQl1bnNpZ25lZCBjaGFyIERBU0RfbG9jYXRpb25bMl07CisJCQl1bnNpZ25lZCBjaGFyIERBU0Rfc2Vxbm9bMTJdOworCQkJX191MTYgSUQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIG5lZDsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIgZmxhZ3M7ICAgICAgICAgICAgLyogYnl0ZSAgMCAgICAqLworCQkJdW5zaWduZWQgY2hhciByZXMyWzddOyAgICAgICAgICAvKiBieXRlICAxLSA3ICovCisJCQl1bnNpZ25lZCBjaGFyIHN1YV9mbGFnczsJLyogYnl0ZSAgOCAgICAqLworCQkJX191OCBiYXNlX3VuaXRfYWRkcjsgICAgICAgICAgICAvKiBieXRlICA5ICAgICovCisJCQl1bnNpZ25lZCBjaGFyIHJlczNbMjJdOwkgICAgICAgIC8qIGJ5dGUgMTAtMzEgKi8KKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc25lcTsKIAl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBuZWQyOwogCXN0cnVjdCB7CiAJCXN0cnVjdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCmluZGV4IDhmZDcxYWIuLmI4NDIzNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCkBAIC0zMiw5ICszMiw4IEBACiAJaW50IHNpemU7CiAKIAkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKCBtYWdpYyA9PSBOVUxMIHx8IGRhdGFzaXplID4gUEFHRV9TSVpFIHx8Ci0JICAgICAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpCi0JCUJVRygpOworCUJVR19PTiggbWFnaWMgPT0gTlVMTCB8fCBkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fAorCSAgICAgKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpID4gUEFHRV9TSVpFKTsKIAogCXNpemUgPSAoc2l6ZW9mKHN0cnVjdCBkYXNkX2Njd19yZXEpICsgN0wpICYgLThMOwogCWlmIChjcGxlbmd0aCA+IDApCkBAIC0xMjUsOCArMTI0LDcgQEAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlpbnQgc3VjY2VzczsKIAotCWlmIChjcXItPnJlZmVycyA9PSBOVUxMIHx8IGNxci0+ZnVuY3Rpb24gPT0gTlVMTCkKLQkJQlVHKCk7CisJQlVHX09OKGNxci0+cmVmZXJzID09IE5VTEwgfHwgY3FyLT5mdW5jdGlvbiA9PSBOVUxMKTsKIAogCWRldmljZSA9IGNxci0+ZGV2aWNlOwogCXN1Y2Nlc3MgPSBjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9ET05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCA0MjkzYmE4Li5kNGIxM2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtMjY4LDYgKzI2OCwxNiBAQAogCiBleHRlcm4gc3RydWN0IGRhc2RfZGlzY2lwbGluZSAqZGFzZF9kaWFnX2Rpc2NpcGxpbmVfcG9pbnRlcjsKIAorLyoKKyAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBkYXNkIGRldmljZS4KKyAqLworc3RydWN0IGRhc2RfdWlkIHsKKwlfX3U4IGFsaWFzOworCWNoYXIgdmVuZG9yWzRdOworCWNoYXIgc2VyaWFsWzE1XTsKKwlfX3UxNiBzc2lkOworCV9fdTggdW5pdF9hZGRyOworfTsKIAogLyoKICAqIE5vdGlmaWNhdGlvbiBudW1iZXJzIGZvciBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcgbm90aWZpY2F0aW9uczoKQEAgLTUxNiw2ICs1MjYsOCBAQAogc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2NyZWF0ZV9kZXZpY2Uoc3RydWN0IGNjd19kZXZpY2UgKik7CiB2b2lkIGRhc2RfZGVsZXRlX2RldmljZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiAKK2ludCBkYXNkX2dldF91aWQoc3RydWN0IGNjd19kZXZpY2UgKiwgc3RydWN0IGRhc2RfdWlkICopOworaW50IGRhc2Rfc2V0X3VpZChzdHJ1Y3QgY2N3X2RldmljZSAqLCBzdHJ1Y3QgZGFzZF91aWQgKik7CiBpbnQgZGFzZF9nZXRfZmVhdHVyZShzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOwogaW50IGRhc2Rfc2V0X2ZlYXR1cmUoc3RydWN0IGNjd19kZXZpY2UgKiwgaW50LCBpbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggMWFhM2MyNi4uYWQyM2FlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMjk0LDIzICsyOTQsNDAgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiB9CiAKKy8qCisgKiBDcmVhdGUgZGFzZCBwcm9jLWZzIGVudHJpZXMuCisgKiBJbiBjYXNlIGNyZWF0aW9uIGZhaWxlZCwgY2xlYW51cCBhbmQgcmV0dXJuIC1FTk9FTlQuCisgKi8KIGludAogZGFzZF9wcm9jX2luaXQodm9pZCkKIHsKIAlkYXNkX3Byb2Nfcm9vdF9lbnRyeSA9IHByb2NfbWtkaXIoImRhc2QiLCAmcHJvY19yb290KTsKKwlpZiAoIWRhc2RfcHJvY19yb290X2VudHJ5KQorCQlnb3RvIG91dF9ub2Rhc2Q7CiAJZGFzZF9wcm9jX3Jvb3RfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJZGFzZF9kZXZpY2VzX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRldmljZXMiLAogCQkJCQkgICAgICAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJCQkgICAgICAgZGFzZF9wcm9jX3Jvb3RfZW50cnkpOworCWlmICghZGFzZF9kZXZpY2VzX2VudHJ5KQorCQlnb3RvIG91dF9ub2RldmljZXM7CiAJZGFzZF9kZXZpY2VzX2VudHJ5LT5wcm9jX2ZvcHMgPSAmZGFzZF9kZXZpY2VzX2ZpbGVfb3BzOwogCWRhc2RfZGV2aWNlc19lbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXNkX3N0YXRpc3RpY3NfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic3RhdGlzdGljcyIsCiAJCQkJCQkgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJCSAgZGFzZF9wcm9jX3Jvb3RfZW50cnkpOworCWlmICghZGFzZF9zdGF0aXN0aWNzX2VudHJ5KQorCQlnb3RvIG91dF9ub3N0YXRpc3RpY3M7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5yZWFkX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3NfcmVhZDsKIAlkYXNkX3N0YXRpc3RpY3NfZW50cnktPndyaXRlX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3Nfd3JpdGU7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCXJldHVybiAwOworCisgb3V0X25vc3RhdGlzdGljczoKKwlyZW1vdmVfcHJvY19lbnRyeSgiZGV2aWNlcyIsIGRhc2RfcHJvY19yb290X2VudHJ5KTsKKyBvdXRfbm9kZXZpY2VzOgorCXJlbW92ZV9wcm9jX2VudHJ5KCJkYXNkIiwgJnByb2Nfcm9vdCk7Cisgb3V0X25vZGFzZDoKKwlyZXR1cm4gLUVOT0VOVDsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKaW5kZXggNmJhZGQ4NC4uZDRkMmZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCkBAIC01NCw3ICs1NCw3IEBACiAJaWYgKCFrYmQpCiAJCWdvdG8gb3V0OwogCWtiZC0+a2V5X21hcHMgPSBremFsbG9jKHNpemVvZihrZXlfbWFwcyksIEdGUF9LRVJORUwpOwotCWlmICgha2V5X21hcHMpCisJaWYgKCFrYmQtPmtleV9tYXBzKQogCQlnb3RvIG91dF9rYmQ7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa2V5X21hcHMpOyBpKyspIHsKIAkJaWYgKGtleV9tYXBzW2ldKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3J3LmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3J3LmMKaW5kZXggYWMxMGRmYi4uOTFlOTNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9ydy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcncuYwpAQCAtMjQsNyArMjQsNyBAQAogCiAvKgogICogVGhlIHJvb20gZm9yIHRoZSBTQ0NCIChvbmx5IGZvciB3cml0aW5nKSBpcyBub3QgZXF1YWwgdG8gYSBwYWdlcyBzaXplCi0gKiAoYXMgaXQgaXMgc3BlY2lmaWVkIGFzIHRoZSBtYXhpbXVtIHNpemUgaW4gdGhlIHRoZSBTQ0xQIGR1Y3VtZW50YXRpb24pCisgKiAoYXMgaXQgaXMgc3BlY2lmaWVkIGFzIHRoZSBtYXhpbXVtIHNpemUgaW4gdGhlIHRoZSBTQ0xQIGRvY3VtZW50YXRpb24pCiAgKiBiZWNhdXNlIG9mIHRoZSBhZGRpdGlvbmFsIGRhdGEgc3RydWN0dXJlIGRlc2NyaWJlZCBhYm92ZS4KICAqLwogI2RlZmluZSBNQVhfU0NDQl9ST09NIChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IHNjbHBfYnVmZmVyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggYzM5MTVmNi4uZDcxZWYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTIzMCwxNCArMjMwLDE2IEBACiAgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gc2NoZWR1bGUgZm9sbG93LXVwIGFjdGlvbnMgZnJvbSB3aXRoaW4gYW4KICAqIGludGVycnVwdCBjb250ZXh0IChsaWtlIHVuc29saWNpdGVkIGludGVycnVwdHMpLgogICovCitzdHJ1Y3Qgd29ya19oYW5kbGVyX2RhdGEgeworCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlOworCWVudW0gdGFwZV9vcCAgICAgICAgb3A7CisJc3RydWN0IHdvcmtfc3RydWN0ICB3b3JrOworfTsKKwogc3RhdGljIHZvaWQKIHRhcGVfMzU5MF93b3JrX2hhbmRsZXIodm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZTsKLQkJZW51bSB0YXBlX29wIG9wOwotCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQl9ICpwID0gZGF0YTsKKwlzdHJ1Y3Qgd29ya19oYW5kbGVyX2RhdGEgKnAgPSBkYXRhOwogCiAJc3dpdGNoIChwLT5vcCkgewogCWNhc2UgVE9fTVNFTjoKQEAgLTI1NywxMSArMjU5LDcgQEAKIHN0YXRpYyBpbnQKIHRhcGVfMzU5MF9zY2hlZHVsZV93b3JrKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBlbnVtIHRhcGVfb3Agb3ApCiB7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2U7Ci0JCWVudW0gdGFwZV9vcCBvcDsKLQkJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0JfSAqcDsKKwlzdHJ1Y3Qgd29ya19oYW5kbGVyX2RhdGEgKnA7CiAKIAlpZiAoKHAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMxNiw3ICszMTQsNyBAQAogCiAJcnFfZm9yX2VhY2hfYmlvKGJpbywgcmVxKSB7CiAJCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJCWRzdCA9IGttYXAoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJCWRzdCA9IHBhZ2VfYWRkcmVzcyhidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OwogCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBidi0+YnZfbGVuOwogCQkJICAgICBvZmYgKz0gVEFQRUJMT0NLX0hTRUNfU0laRSkgewogCQkJCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19DQzsKQEAgLTExNjgsNiArMTE2Niw3IEBACiBzdGF0aWMgdm9pZAogdGFwZV8zNTkwX2NsZWFudXBfZGV2aWNlKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQogeworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJdGFwZV9zdGRfdW5hc3NpZ24oZGV2aWNlKTsKIAogCWtmcmVlKGRldmljZS0+ZGlzY2RhdGEpOwpAQCAtMTIzNCw2ICsxMjMzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlX2lkIHRhcGVfMzU5MF9pZHNbXSA9IHsKIAl7Q0NXX0RFVklDRV9ERVZUWVBFKDB4MzU5MCwgMCwgMHgzNTkwLCAwKSwgLmRyaXZlcl9pbmZvID0gdGFwZV8zNTkwfSwKKwl7Q0NXX0RFVklDRV9ERVZUWVBFKDB4MzU5MiwgMCwgMHgzNTkyLCAwKSwgLmRyaXZlcl9pbmZvID0gdGFwZV8zNTkyfSwKIAl7IC8qIGVuZCBvZiBsaXN0ICovIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCA1Y2VkMjcyLi5iNzBkOTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xOTgsOSArMTk4LDcgQEAKIAogCWRldmljZSA9IChzdHJ1Y3QgdGFwZV9kZXZpY2UgKikgcXVldWUtPnF1ZXVlZGF0YTsKIAlEQkZfTEgoNiwgInRhcGVibG9ja19yZXF1ZXN0X2ZuKGRldmljZT0lcClcbiIsIGRldmljZSk7Ci0JaWYgKGRldmljZSA9PSBOVUxMKQotCQlCVUcoKTsKLQorCUJVR19PTihkZXZpY2UgPT0gTlVMTCk7CiAJdGFwZWJsb2NrX3RyaWdnZXJfcmVxdWV1ZShkZXZpY2UpOwogfQogCkBAIC0zMDcsOCArMzA1LDcgQEAKIAlpbnQJCQlyYzsKIAogCWRldmljZSA9IChzdHJ1Y3QgdGFwZV9kZXZpY2UgKikgZGlzay0+cHJpdmF0ZV9kYXRhOwotCWlmICghZGV2aWNlKQotCQlCVUcoKTsKKwlCVUdfT04oIWRldmljZSk7CiAKIAlpZiAoIWRldmljZS0+YmxrX2RhdGEubWVkaXVtX2NoYW5nZWQpCiAJCXJldHVybiAwOwpAQCAtNDM1LDE2ICs0MzIsMTQgQEAKICkgewogCWludCByYzsKIAlpbnQgbWlub3I7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBnZW5kaXNrICpkaXNrOworCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlOwogCiAJcmMgICAgID0gMDsKIAlkaXNrICAgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCWlmICghZGlzaykKLQkJQlVHKCk7CisJQlVHX09OKCFkaXNrKTsKIAlkZXZpY2UgPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0JaWYgKCFkZXZpY2UpCi0JCUJVRygpOworCUJVR19PTighZGV2aWNlKTsKIAltaW5vciAgPSBpbWlub3IoaW5vZGUpOwogCiAJREJGX0xIKDYsICJ0YXBlYmxvY2tfaW9jdGwoMHglMHgpXG4iLCBjb21tYW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggMzg5ZWUyYy4uZTZlNDA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTIxMCwxOCArMjEwLDE0IEBACiAJCXJldHVybjsKIAl9CiAJREJGX0VWRU5UKDQsICJ0cy4gZGV2OgkleFxuIiwgZGV2aWNlLT5maXJzdF9taW5vcik7Ci0JaWYgKGRldmljZS0+dGFwZV9zdGF0ZSA8IFRPX1NJWkUgJiYgZGV2aWNlLT50YXBlX3N0YXRlID49IDApCi0JCXN0ciA9IHRhcGVfc3RhdGVfdmVyYm9zZVtkZXZpY2UtPnRhcGVfc3RhdGVdOwotCWVsc2UKLQkJc3RyID0gIlVOS05PV04gVFMiOwotCURCRl9FVkVOVCg0LCAib2xkIHRzOgklc1xuIiwgc3RyKTsKLQlpZiAoZGV2aWNlLT50YXBlX3N0YXRlIDwgVE9fU0laRSAmJiBkZXZpY2UtPnRhcGVfc3RhdGUgPj0wICkKKwlEQkZfRVZFTlQoNCwgIm9sZCB0czpcdFxuIik7CisJaWYgKGRldmljZS0+dGFwZV9zdGF0ZSA8IFRTX1NJWkUgJiYgZGV2aWNlLT50YXBlX3N0YXRlID49MCApCiAJCXN0ciA9IHRhcGVfc3RhdGVfdmVyYm9zZVtkZXZpY2UtPnRhcGVfc3RhdGVdOwogCWVsc2UKIAkJc3RyID0gIlVOS05PV04gVFMiOwogCURCRl9FVkVOVCg0LCAiJXNcbiIsIHN0cik7CiAJREJGX0VWRU5UKDQsICJuZXcgdHM6XHRcbiIpOwotCWlmIChuZXdzdGF0ZSA8IFRPX1NJWkUgJiYgbmV3c3RhdGUgPj0gMCkKKwlpZiAobmV3c3RhdGUgPCBUU19TSVpFICYmIG5ld3N0YXRlID49IDApCiAJCXN0ciA9IHRhcGVfc3RhdGVfdmVyYm9zZVtuZXdzdGF0ZV07CiAJZWxzZQogCQlzdHIgPSAiVU5LTk9XTiBUUyI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5oIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuaAppbmRleCAyZDMxMTc5Li4xZmM5NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5oCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgICAgICB0YXBlXzM0ODAsCiAgICAgICAgIHRhcGVfMzQ5MCwKICAgICAgICAgdGFwZV8zNTkwLAorICAgICAgICB0YXBlXzM1OTIsCiB9OwogCiAjZW5kaWYgLy8gX1RBUEVfU1REX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCmluZGV4IGNiOGUyZTYuLjA5NjBiZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwpAQCAtNDE0LDExICs0MTQsMTEgQEAKIAllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5ICgiY2lvX2lnbm9yZSIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkgICAmcHJvY19yb290KTsKIAlpZiAoIWVudHJ5KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAllbnRyeS0+cHJvY19mb3BzID0gJmNpb19pZ25vcmVfcHJvY19mb3BzOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIF9faW5pdGNhbGwgKGNpb19pZ25vcmVfcHJvY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggNjQxMmIyYy4uNzIxODdlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTI0MiwyOCArMjQyLDEwIEBACiAJaWYgKHNjaC0+dnBtID09IG1hc2spCiAJCWdvdG8gb3V0X3VucmVnOwogCi0JaWYgKChzY2gtPnNjaGliLnNjc3cuYWN0bCAmIChTQ1NXX0FDVExfQ0xFQVJfUEVORCB8Ci0JCQkJICAgICBTQ1NXX0FDVExfSEFMVF9QRU5EIHwKLQkJCQkgICAgIFNDU1dfQUNUTF9TVEFSVF9QRU5EIHwKLQkJCQkgICAgIFNDU1dfQUNUTF9SRVNVTUVfUEVORCkpICYmCi0JICAgIChzY2gtPnNjaGliLnBtY3cubHB1bSA9PSBtYXNrKSkgewotCQlpbnQgY2MgPSBjaW9fY2FuY2VsKHNjaCk7Ci0JCQotCQlpZiAoY2MgPT0gLUVOT0RFVikKLQkJCWdvdG8gb3V0X3VucmVnOwotCi0JCWlmIChjYyA9PSAtRUlOVkFMKSB7Ci0JCQljYyA9IGNpb19jbGVhcihzY2gpOwotCQkJaWYgKGNjID09IC1FTk9ERVYpCi0JCQkJZ290byBvdXRfdW5yZWc7Ci0JCQkvKiBDYWxsIGhhbmRsZXIuICovCi0JCQlpZiAoc2NoLT5kcml2ZXIgJiYgc2NoLT5kcml2ZXItPnRlcm1pbmF0aW9uKQotCQkJCXNjaC0+ZHJpdmVyLT50ZXJtaW5hdGlvbigmc2NoLT5kZXYpOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JfSBlbHNlIGlmICgoc2NoLT5zY2hpYi5zY3N3LmFjdGwgJiBTQ1NXX0FDVExfREVWQUNUKSAmJgotCQkgICAoc2NoLT5zY2hpYi5zY3N3LmFjdGwgJiBTQ1NXX0FDVExfU0NIQUNUKSAmJgotCQkgICAoc2NoLT5zY2hpYi5wbWN3LmxwdW0gPT0gbWFzaykpIHsKKwlpZiAoKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYgU0NTV19BQ1RMX0RFVkFDVCkgJiYKKwkgICAgKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYgU0NTV19BQ1RMX1NDSEFDVCkgJiYKKwkgICAgKHNjaC0+c2NoaWIucG1jdy5scHVtID09IG1hc2spICYmCisJICAgIChzY2gtPnZwbSA9PSAwKSkgewogCQlpbnQgY2M7CiAKIAkJY2MgPSBjaW9fY2xlYXIoc2NoKTsKQEAgLTY1MywxMyArNjM1LDEzIEBACiAJCWlmIChzY2gtPnNjaGliLnBtY3cuY2hwaWRbaV0gPT0gY2hwLT5pZCkgewogCQkJaWYgKHN0c2NoKHNjaC0+c2NoaWQsICZzY2gtPnNjaGliKSAhPSAwKSB7CiAJCQkJLyogRW5kZ2FtZS4gKi8KLQkJCQlzcGluX3VubG9jaygmc2NoLT5sb2NrKTsKKwkJCQlzcGluX3VubG9ja19pcnEoJnNjaC0+bG9jayk7CiAJCQkJcmV0dXJuIC1FTlhJTzsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CiAJaWYgKGk9PTgpIHsKLQkJc3Bpbl91bmxvY2soJnNjaC0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmc2NoLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNjaC0+bHBtID0gKChzY2gtPnNjaGliLnBtY3cucGltICYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCmluZGV4IGNiYjg2ZmEuLjViMjBkOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtNjcsNyArNjcsNyBAQAogCQlnb3RvIG91dF91bnJlZ2lzdGVyOwogCWRlYnVnX3JlZ2lzdGVyX3ZpZXcgKGNpb19kZWJ1Z19tc2dfaWQsICZkZWJ1Z19zcHJpbnRmX3ZpZXcpOwogCWRlYnVnX3NldF9sZXZlbCAoY2lvX2RlYnVnX21zZ19pZCwgMik7Ci0JY2lvX2RlYnVnX3RyYWNlX2lkID0gZGVidWdfcmVnaXN0ZXIgKCJjaW9fdHJhY2UiLCAxNiwgNCwgOCk7CisJY2lvX2RlYnVnX3RyYWNlX2lkID0gZGVidWdfcmVnaXN0ZXIgKCJjaW9fdHJhY2UiLCAxNiwgNCwgMTYpOwogCWlmICghY2lvX2RlYnVnX3RyYWNlX2lkKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyOwogCWRlYnVnX3JlZ2lzdGVyX3ZpZXcgKGNpb19kZWJ1Z190cmFjZV9pZCwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvX2RlYnVnLmggYi9kcml2ZXJzL3MzOTAvY2lvL2Npb19kZWJ1Zy5oCmluZGV4IDZhZjhiMjcuLmY4ODg0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvX2RlYnVnLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW9fZGVidWcuaApAQCAtMyw2ICszLDExIEBACiAKICNpbmNsdWRlIDxhc20vZGVidWcuaD4KIAorLyogZm9yIHVzZSBvZiBkZWJ1ZyBmZWF0dXJlICovCitleHRlcm4gZGVidWdfaW5mb190ICpjaW9fZGVidWdfbXNnX2lkOworZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX3RyYWNlX2lkOworZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX2Nyd19pZDsKKwogI2RlZmluZSBDSU9fVFJBQ0VfRVZFTlQoaW1wLCB0eHQpIGRvIHsgXAogCQlkZWJ1Z190ZXh0X2V2ZW50KGNpb19kZWJ1Z190cmFjZV9pZCwgaW1wLCB0eHQpOyBcCiAJfSB3aGlsZSAoMCkKQEAgLTE1LDE4ICsyMCwxOSBAQAogCQlkZWJ1Z19zcHJpbnRmX2V2ZW50KGNpb19kZWJ1Z19jcndfaWQsIGltcCAsICMjYXJncyk7IFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIENJT19IRVhfRVZFTlQoaW1wLCBhcmdzLi4uKSBkbyB7IFwKLSAgICAgICAgICAgICAgICBkZWJ1Z19ldmVudChjaW9fZGVidWdfdHJhY2VfaWQsIGltcCwgIyNhcmdzKTsgXAotICAgICAgICB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkCitDSU9fSEVYX0VWRU5UKGludCBsZXZlbCwgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQlkZWJ1Z19ldmVudChjaW9fZGVidWdfdHJhY2VfaWQsIGxldmVsLCBkYXRhLCBsZW5ndGgpOworCQlsZW5ndGggLT0gY2lvX2RlYnVnX3RyYWNlX2lkLT5idWZfc2l6ZTsKKwkJZGF0YSArPSBjaW9fZGVidWdfdHJhY2VfaWQtPmJ1Zl9zaXplOworCX0KK30KIAogI2RlZmluZSBDSU9fREVCVUcocHJpbnRrX2xldmVsLGV2ZW50X2xldmVsLG1zZy4uLikgKHsgXAogCWlmIChjaW9fc2hvd19tc2cpIHByaW50ayhwcmludGtfbGV2ZWwgbXNnKTsgXAogCUNJT19NU0dfRVZFTlQgKGV2ZW50X2xldmVsLCBtc2cpOyBcCiB9KQogCi0vKiBmb3IgdXNlIG9mIGRlYnVnIGZlYXR1cmUgKi8KLWV4dGVybiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19tc2dfaWQ7Ci1leHRlcm4gZGVidWdfaW5mb190ICpjaW9fZGVidWdfdHJhY2VfaWQ7Ci1leHRlcm4gZGVidWdfaW5mb190ICpjaW9fZGVidWdfY3J3X2lkOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmggYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCmluZGV4IDc0YTI1N2IuLmUyMTBmODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaApAQCAtNDUsMTEgKzQ1LDExIEBACiAJdW5pb24gewogCQlfX3U4IGZjOyAgIAkvKiBTUElEIGZ1bmN0aW9uIGNvZGUgKi8KIAkJc3RydWN0IHBhdGhfc3RhdGUgcHM7CS8qIFNOSUQgcGF0aCBzdGF0ZSAqLwotCX0gaW5mOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGluZjsKIAl1bmlvbiB7CiAJCV9fdTMyIGNwdV9hZGRyCTogMTY7CS8qIENQVSBhZGRyZXNzICovCiAJCXN0cnVjdCBleHRlbmRlZF9jc3NpZCBleHRfY3NzaWQ7Ci0JfSBwZ2lkX2hpZ2g7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcGdpZF9oaWdoOwogCV9fdTMyIGNwdV9pZAk6IDI0OwkvKiBDUFUgaWRlbnRpZmljYXRpb24gKi8KIAlfX3UzMiBjcHVfbW9kZWwgOiAxNjsJLyogQ1BVIG1vZGVsICovCiAJX191MzIgdG9kX2hpZ2g7CQkvKiBoaWdoIHdvcmQgVE9EIGNsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IDE4MGIzYmYuLjQ5ZWM1NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC03NDksNyArNzQ5LDcgQEAKIAkJCS8qIFVuaXQgY2hlY2sgYnV0IG5vIHNlbnNlIGRhdGEuIE5lZWQgYmFzaWMgc2Vuc2UuICovCiAJCQlpZiAoY2N3X2RldmljZV9kb19zZW5zZShjZGV2LCBpcmIpICE9IDApCiAJCQkJZ290byBjYWxsX2hhbmRsZXJfdW5zb2w7Ci0JCQltZW1jcHkoaXJiLCAmY2Rldi0+cHJpdmF0ZS0+aXJiLCBzaXplb2Yoc3RydWN0IGlyYikpOworCQkJbWVtY3B5KCZjZGV2LT5wcml2YXRlLT5pcmIsIGlyYiwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKIAkJCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX1c0U0VOU0U7CiAJCQljZGV2LT5wcml2YXRlLT5pbnRwYXJtID0gMDsKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKaW5kZXggODE0ZjkyNS4uOTZmNTE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC04MCw2ICs4MSw4IEBACiBzdGF0aWMgX191MzIgKiB2b2xhdGlsZSBpbmRpY2F0b3JzOwogc3RhdGljIF9fdTMyIHZvbGF0aWxlIHNwYXJlX2luZGljYXRvcjsKIHN0YXRpYyBhdG9taWNfdCBzcGFyZV9pbmRpY2F0b3JfdXNlY291bnQ7CisjZGVmaW5lIFFESU9fTUVNUE9PTF9TQ1NTQ19FTEVNRU5UUyAyCitzdGF0aWMgbWVtcG9vbF90ICpxZGlvX21lbXBvb2xfc2Nzc2M7CiAKIHN0YXRpYyBkZWJ1Z19pbmZvX3QgKnFkaW9fZGJmX3NldHVwOwogc3RhdGljIGRlYnVnX2luZm9fdCAqcWRpb19kYmZfc2JhbDsKQEAgLTE2MzcsNyArMTY0MCw3IEBACiAKIAl9CiAJa2ZyZWUoaXJxX3B0ci0+cWRyKTsKLQlrZnJlZShpcnFfcHRyKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlycV9wdHIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjMwNCw3ICsyMzA3LDcgQEAKIAogCVFESU9fREJGX1RFWFQwKDAsc2V0dXAsImdldHNzcWQiKTsKIAlxZGlvYWMgPSAwOwotCXNzcWRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlzc3FkX2FyZWEgPSBtZW1wb29sX2FsbG9jKHFkaW9fbWVtcG9vbF9zY3NzYywgR0ZQX0FUT01JQyk7CiAJaWYgKCFzc3FkX2FyZWEpIHsKIAkgICAgICAgIFFESU9fUFJJTlRfV0FSTigiQ291bGQgbm90IGdldCBtZW1vcnkgZm9yIGNoc2MuIFVzaW5nIGFsbCAiIFwKIAkJCQkiU0lHQXMgZm9yIHNjaCB4JXguXG4iLCBpcnFfcHRyLT5zY2hpZC5zY2hfbm8pOwpAQCAtMjM2NCw3ICsyMzY3LDcgQEAKIG91dDoKIAlxZGlvX2NoZWNrX3N1YmNoYW5uZWxfcWVic20oaXJxX3B0ciwgcWRpb2FjLAogCQkJCSAgICBzc3FkX2FyZWEtPnNjaF90b2tlbik7Ci0JZnJlZV9wYWdlICgodW5zaWduZWQgbG9uZykgc3NxZF9hcmVhKTsKKwltZW1wb29sX2ZyZWUoc3NxZF9hcmVhLCBxZGlvX21lbXBvb2xfc2Nzc2MpOwogCWlycV9wdHItPnFkaW9hYyA9IHFkaW9hYzsKIH0KIApAQCAtMjQ1OCw3ICsyNDYxLDcgQEAKIAkJCXZpcnRfdG9fcGh5cygodm9sYXRpbGUgdm9pZCAqKWlycV9wdHItPmRldl9zdF9jaGdfaW5kKTsKIAl9CiAKLQlzY3NzY19hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCXNjc3NjX2FyZWEgPSBtZW1wb29sX2FsbG9jKHFkaW9fbWVtcG9vbF9zY3NzYywgR0ZQX0FUT01JQyk7CiAJaWYgKCFzY3NzY19hcmVhKSB7CiAJCVFESU9fUFJJTlRfV0FSTigiTm8gbWVtb3J5IGZvciBzZXR0aW5nIGluZGljYXRvcnMgb24gIiBcCiAJCQkJInN1YmNoYW5uZWwgMC4leC4leC5cbiIsCkBAIC0yNTE0LDcgKzI1MTcsNyBAQAogCVFESU9fREJGX0hFWDIoMCxzZXR1cCwmcmVhbF9hZGRyX2Rldl9zdF9jaGdfaW5kLHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAJcmVzdWx0ID0gMDsKIG91dDoKLQlmcmVlX3BhZ2UgKCh1bnNpZ25lZCBsb25nKSBzY3NzY19hcmVhKTsKKwltZW1wb29sX2ZyZWUoc2Nzc2NfYXJlYSwgcWRpb19tZW1wb29sX3Njc3NjKTsKIAlyZXR1cm4gcmVzdWx0OwogCiB9CkBAIC0yNTQzLDcgKzI1NDYsNyBAQAogCWlmICghaXJxX3B0ci0+aXNfdGhpbmludF9pcnEpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc2Nzc2NmX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJc2Nzc2NmX2FyZWEgPSBtZW1wb29sX2FsbG9jKHFkaW9fbWVtcG9vbF9zY3NzYywgR0ZQX0FUT01JQyk7CiAJaWYgKCFzY3NzY2ZfYXJlYSkgewogCQlRRElPX1BSSU5UX1dBUk4oIk5vIG1lbW9yeSBmb3Igc2V0dGluZyBkZWxheSB0YXJnZXQgb24gIiBcCiAJCQkJInN1YmNoYW5uZWwgMC4leC4leC5cbiIsCkBAIC0yNTgxLDcgKzI1ODQsNyBAQAogCVFESU9fREJGX0hFWDIoMCx0cmFjZSwmZGVsYXlfdGFyZ2V0LHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAJcmVzdWx0ID0gMDsgLyogbm90IGNyaXRpY2FsICovCiBvdXQ6Ci0JZnJlZV9wYWdlICgodW5zaWduZWQgbG9uZykgc2Nzc2NmX2FyZWEpOworCW1lbXBvb2xfZnJlZShzY3NzY2ZfYXJlYSwgcWRpb19tZW1wb29sX3Njc3NjKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yOTgwLDcgKzI5ODMsNyBAQAogCXFkaW9fYWxsb2NhdGVfZG9fZGJmKGluaXRfZGF0YSk7CiAKIAkvKiBjcmVhdGUgaXJxICovCi0JaXJxX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZGlvX2lycSksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpcnFfcHRyID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAogCVFESU9fREJGX1RFWFQwKDAsc2V0dXAsImlycV9wdHI6Iik7CiAJUURJT19EQkZfSEVYMCgwLHNldHVwLCZpcnFfcHRyLHNpemVvZih2b2lkKikpOwpAQCAtMjk5NSw3ICsyOTk4LDcgQEAKIAkvKiBRRFIgbXVzdCBiZSBpbiBETUEgYXJlYSBzaW5jZSBDQ1cgZGF0YSBhZGRyZXNzIGlzIG9ubHkgMzIgYml0ICovCiAJaXJxX3B0ci0+cWRyPWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZHIpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAgIAlpZiAoIShpcnFfcHRyLT5xZHIpKSB7Ci0gICAJCWtmcmVlKGlycV9wdHIpOworICAgCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlycV9wdHIpOwogICAgIAkJUURJT19QUklOVF9FUlIoImttYWxsb2Mgb2YgaXJxX3B0ci0+cWRyIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKICAgICAgICAJfQpAQCAtMzc4MCw2ICszNzgzLDE2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyB2b2lkICpxZGlvX21lbXBvb2xfYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnNpemUpCit7CisJcmV0dXJuICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShnZnBfbWFza3xHRlBfRE1BKTsKK30KKworc3RhdGljIHZvaWQgcWRpb19tZW1wb29sX2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqc2l6ZSkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGVsZW1lbnQpOworfQorCiBzdGF0aWMgaW50IF9faW5pdAogaW5pdF9RRElPKHZvaWQpCiB7CkBAIC0zODA5LDYgKzM4MjIsMTAgQEAKIAogCXFkaW9fYWRkX3Byb2Nmc19lbnRyeSgpOwogCisJcWRpb19tZW1wb29sX3Njc3NjID0gbWVtcG9vbF9jcmVhdGUoUURJT19NRU1QT09MX1NDU1NDX0VMRU1FTlRTLAorCQkJCQkgICAgcWRpb19tZW1wb29sX2FsbG9jLAorCQkJCQkgICAgcWRpb19tZW1wb29sX2ZyZWUsIE5VTEwpOworCiAJaWYgKHRpcWRpb19jaGVja19jaHNjX2F2YWlsYWJpbGl0eSgpKQogCQlRRElPX1BSSU5UX0VSUigiTm90IGFsbCBDSFNDcyBzdXBwb3J0ZWQuIENvbnRpbnVpbmcuXG4iKTsKIApAQCAtMzgyNCw2ICszODQxLDcgQEAKIAlxZGlvX3JlbW92ZV9wcm9jZnNfZW50cnkoKTsKIAlxZGlvX3JlbGVhc2VfcWRpb19tZW1vcnkoKTsKIAlxZGlvX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CisJbWVtcG9vbF9kZXN0cm95KHFkaW9fbWVtcG9vbF9zY3NzYyk7CiAKICAgCXByaW50aygicWRpbzogJXM6IG1vZHVsZSByZW1vdmVkXG4iLHZlcnNpb24pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYwppbmRleCBhZjlmMjEyLi5mZTk4NmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYwpAQCAtMTQ4NiwxMyArMTQ4NiwxMyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgCitzdGF0aWMgdm9pZAogY2hfYWN0aW9uX3JlaW5pdChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKICAJc3RydWN0IGNoYW5uZWwgKmNoID0gKHN0cnVjdCBjaGFubmVsICopYXJnOwogIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2gtPm5ldGRldjsKICAJc3RydWN0IGN0Y19wcml2ICpwcml2cHRyID0gZGV2LT5wcml2OwotIAorCiAJREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CiAgCWNoX2FjdGlvbl9pb2ZhdGFsKGZpLCBldmVudCwgYXJnKTsKICAJZnNtX2FkZHRpbWVyKCZwcml2cHRyLT5yZXN0YXJ0X3RpbWVyLCAxMDAwLCBERVZfRVZFTlRfUkVTVEFSVCwgZGV2KTsKQEAgLTE2MjQsNyArMTYyNCw3IEBACiAJfQogCWRldjEgPSBzaW1wbGVfc3RydG91bChpZDEsICZpZDEsIDE2KTsKIAlkZXYyID0gc2ltcGxlX3N0cnRvdWwoaWQyLCAmaWQyLCAxNik7Ci0JCisKIAlyZXR1cm4gKGRldjEgPCBkZXYyKTsKIH0KIApAQCAtMTg5NSw3ICsxODk1LDcgQEAKIAkJCSAgICBpcmItPnNjc3cuZHN0YXQpOwogCQlyZXR1cm47CiAJfQotCQorCiAJcHJpdiA9ICgoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqKWNkZXYtPmRldi5kcml2ZXJfZGF0YSkKIAkJLT5kZXYuZHJpdmVyX2RhdGE7CiAKQEAgLTE5MDksNyArMTkwOSw3IEBACiAJCQkgICAiZGV2aWNlICVzXG4iLCBjZGV2LT5kZXYuYnVzX2lkKTsKIAkJcmV0dXJuOwogCX0KLQkKKwogCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSAoY2gtPm5ldGRldik7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWN0Y19wcl9jcml0KCJjdGM6IGN0Y19pcnFfaGFuZGxlciBkZXY9TlVMTCBidXNfaWQ9JXMsIGNoPTB4JXBcbiIsCkBAIC0yMDA4LDEyICsyMDA4LDEyIEBACiAJCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9TVE9QLCBjaCk7CiAJfQogfQotc3RhdGljIHZvaWQgCitzdGF0aWMgdm9pZAogZGV2X2FjdGlvbl9yZXN0YXJ0KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilhcmc7CiAJc3RydWN0IGN0Y19wcml2ICpwcml2cHRyID0gZGV2LT5wcml2OwotCQorCiAJREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CiAJY3RjX3ByX2RlYnVnKCIlczogUmVzdGFydGluZ1xuIiwgZGV2LT5uYW1lKTsKIAlkZXZfYWN0aW9uX3N0b3AoZmksIGV2ZW50LCBhcmcpOwpAQCAtMjE5Myw3ICsyMTkzLDcgQEAKIAogCURCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwogCS8qIHdlIG5lZWQgdG8gYWNxdWlyZSB0aGUgbG9jayBmb3IgdGVzdGluZyB0aGUgc3RhdGUKLQkgKiBvdGhlcndpc2Ugd2UgY2FuIGhhdmUgYW4gSVJRIGNoYW5naW5nIHRoZSBzdGF0ZSB0byAKKwkgKiBvdGhlcndpc2Ugd2UgY2FuIGhhdmUgYW4gSVJRIGNoYW5naW5nIHRoZSBzdGF0ZSB0bwogCSAqIFRYSURMRSBhZnRlciB0aGUgdGVzdCBidXQgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jay4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmNvbGxlY3RfbG9jaywgc2F2ZWZsYWdzKTsKQEAgLTIzOTMsNyArMjM5Myw3IEBACiAKIAkvKioKIAkgKiBJZiBjaGFubmVscyBhcmUgbm90IHJ1bm5pbmcsIHRyeSB0byByZXN0YXJ0IHRoZW0KLQkgKiBhbmQgdGhyb3cgYXdheSBwYWNrZXQuIAorCSAqIGFuZCB0aHJvdyBhd2F5IHBhY2tldC4KIAkgKi8KIAlpZiAoZnNtX2dldHN0YXRlKHByaXZwdHItPmZzbSkgIT0gREVWX1NUQVRFX1JVTk5JTkcpIHsKIAkJZnNtX2V2ZW50KHByaXZwdHItPmZzbSwgREVWX0VWRU5UX1NUQVJULCBkZXYpOwpAQCAtMjczOCw3ICsyNzM4LDcgQEAKIC8qKgogICogQWRkIGN0YyBzcGVjaWZpYyBhdHRyaWJ1dGVzLgogICogQWRkIGN0YyBwcml2YXRlIGRhdGEuCi0gKiAKKyAqCiAgKiBAcGFyYW0gY2dkZXYgcG9pbnRlciB0byBjY3dncm91cF9kZXZpY2UganVzdCBhZGRlZAogICoKICAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgITAgb24gZmFpbHVyZS4KQEAgLTI4NjksNyArMjg2OSw3IEBACiAJREJGX1RFWFQoc2V0dXAsIDMsIGJ1ZmZlcik7CiAKIAl0eXBlID0gZ2V0X2NoYW5uZWxfdHlwZSgmY2dkZXYtPmNkZXZbMF0tPmlkKTsKLQkKKwogCXNucHJpbnRmKHJlYWRfaWQsIENUQ19JRF9TSVpFLCAiY2gtJXMiLCBjZ2Rldi0+Y2RldlswXS0+ZGV2LmJ1c19pZCk7CiAJc25wcmludGYod3JpdGVfaWQsIENUQ19JRF9TSVpFLCAiY2gtJXMiLCBjZ2Rldi0+Y2RldlsxXS0+ZGV2LmJ1c19pZCk7CiAKQEAgLTI5MDcsNyArMjkwNyw3IEBACiAJCSAgICBjaGFubmVsX2dldCh0eXBlLCBkaXJlY3Rpb24gPT0gUkVBRCA/IHJlYWRfaWQgOiB3cml0ZV9pZCwKIAkJCQlkaXJlY3Rpb24pOwogCQlpZiAocHJpdnB0ci0+Y2hhbm5lbFtkaXJlY3Rpb25dID09IE5VTEwpIHsKLQkJCWlmIChkaXJlY3Rpb24gPT0gV1JJVEUpIAorCQkJaWYgKGRpcmVjdGlvbiA9PSBXUklURSkKIAkJCQljaGFubmVsX2ZyZWUocHJpdnB0ci0+Y2hhbm5lbFtSRUFEXSk7CiAKIAkJCWN0Y19mcmVlX25ldGRldmljZShkZXYsIDEpOwpAQCAtMjk1NSw3ICsyOTU1LDcgQEAKIHsKIAlzdHJ1Y3QgY3RjX3ByaXYgKnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7Ci0JCQorCiAJREJGX1RFWFQoc2V0dXAsIDMsIF9fRlVOQ1RJT05fXyk7CiAJcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y3R0eS5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYwppbmRleCA1Y2RjZGJmLi5hZjU0ZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y3R0eS5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCWlmICgodHR5ID0gaW5mby0+dHR5KSkgewogCQlpZiAoaW5mby0+bWNyICYgVUFSVF9NQ1JfUlRTKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJCisKIAkJCWlmICgoc2tiID0gc2tiX2RlcXVldWUoJmluZm8tPnJ4X3F1ZXVlKSkpIHsKIAkJCQlpbnQgbGVuID0gc2tiLT5sZW47CiAJCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIHNrYi0+ZGF0YSwgbGVuKTsKQEAgLTMyOCw3ICszMjgsNyBAQAogewogCWludCBza2JfcmVzOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JCisKIAlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKIAlpZiAoY3RjX3R0eV9zaHV0dGluZ2Rvd24pCiAJCXJldHVybjsKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCQljID0gKGNvdW50IDwgQ1RDX1RUWV9YTUlUX1NJWkUpID8gY291bnQgOiBDVENfVFRZX1hNSVRfU0laRTsKIAkJaWYgKGMgPD0gMCkKIAkJCWJyZWFrOwotCQkKKwogCQlza2JfcmVzID0gaW5mby0+bmV0ZGV2LT5oYXJkX2hlYWRlcl9sZW4gKyBzaXplb2YoaW5mby0+bWNyKSArCiAJCQkrIHNpemVvZihfX3UzMik7CiAJCXNrYiA9IGRldl9hbGxvY19za2Ioc2tiX3JlcyArIGMpOwpAQCAtODI4LDcgKzgyOCw3IEBACiAJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKIAkgICAgKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0NMT1NJTkcpKSB7CiAJCWlmIChpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19DTE9TSU5HKQotCQkJd2FpdF9ldmVudChpbmZvLT5jbG9zZV93YWl0LCAKKwkJCXdhaXRfZXZlbnQoaW5mby0+Y2xvc2Vfd2FpdCwKIAkJCQkgICAhKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0NMT1NJTkcpKTsKICNpZmRlZiBNT0RFTV9ET19SRVNUQVJUCiAJCWlmIChpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19IVVBfTk9USUZZKQpAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAKIHZvaWQKIGN0Y190dHlfY2xlYW51cCh2b2lkKSB7CiAJdW5zaWduZWQgbG9uZyBzYXZlZmxhZ3M7Ci0JCisKIAlEQkZfVEVYVCh0cmFjZSwgMiwgX19GVU5DVElPTl9fKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3RjX3R0eV9sb2NrLCBzYXZlZmxhZ3MpOwogCWN0Y190dHlfc2h1dHRpbmdkb3duID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3UzMDg4LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N1MzA4OC5jCmluZGV4IGIxMjUzMzEuLmU5NjVmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3UzMDg4LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdTMwODguYwpAQCAtMjAsNyArMjAsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKgogICovCi0MCisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC03Nyw3ICs3Nyw3IEBACiAJCWludCBsZW47CiAKIAkJaWYgKCEoZW5kID0gc3RyY2hyKHN0YXJ0LCBkZWxpbVtpXSkpKQotCQkJcmV0dXJuIGNvdW50OworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWxlbiA9IG1pbl90KHB0cmRpZmZfdCwgQlVTX0lEX1NJWkUsIGVuZCAtIHN0YXJ0ICsgMSk7CiAJCXN0cmxjcHkgKGJ1c19pZHNbaV0sIHN0YXJ0LCBsZW4pOwogCQlhcmd2W2ldID0gYnVzX2lkc1tpXTsKQEAgLTk0LDcgKzk0LDcgQEAKIAogLyogUmVnaXN0ZXItdW5yZWdpc3RlciBmb3IgY3RjJmxjcyAqLwogaW50Ci1yZWdpc3Rlcl9jdTMwODhfZGlzY2lwbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyICpkY3ApIAorcmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoc3RydWN0IGNjd2dyb3VwX2RyaXZlciAqZGNwKQogewogCWludCByYzsKIApAQCAtMTA5LDcgKzEwOSw3IEBACiAJcmMgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJmRjcC0+ZHJpdmVyLCAmZHJpdmVyX2F0dHJfZ3JvdXApOwogCWlmIChyYykKIAkJY2N3Z3JvdXBfZHJpdmVyX3VucmVnaXN0ZXIoZGNwKTsKLQkJCisKIAlyZXR1cm4gcmM7CiAKIH0KQEAgLTEzNyw3ICsxMzcsNyBAQAogY3UzMDg4X2luaXQgKHZvaWQpCiB7CiAJaW50IHJjOwotCQorCiAJY3UzMDg4X3Jvb3RfZGV2ID0gczM5MF9yb290X2Rldl9yZWdpc3RlcigiY3UzMDg4Iik7CiAJaWYgKElTX0VSUihjdTMwODhfcm9vdF9kZXYpKQogCQlyZXR1cm4gUFRSX0VSUihjdTMwODhfcm9vdF9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYwppbmRleCA2MTkwYmU5Li5lMGM3ZGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIElVQ1YgbmV0d29yayBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgpAQCAtMjgsNyArMjgsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKgogICovCi0MCisKIC8qICNkZWZpbmUgREVCVUcgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODEsNyArODEsNyBAQAogc3RydWN0IGJ1c190eXBlIGl1Y3ZfYnVzID0gewogCS5uYW1lID0gIml1Y3YiLAogCS5tYXRjaCA9IGl1Y3ZfYnVzX21hdGNoLAotfTsJCit9OwogCiBzdHJ1Y3QgZGV2aWNlICppdWN2X3Jvb3Q7CiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogLyoKICAqIERlYnVnZ2luZyBzdHVmZgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0MCisKIAogI2lmZGVmIERFQlVHCiBzdGF0aWMgaW50IGRlYnVnbGV2ZWwgPSAwOwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAvKgogICogSW50ZXJuYWwgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQwKKwogLyoqCiAgKiBwcmludCBzdGFydCBiYW5uZXIKICAqLwpAQCAtODEwLDcgKzgxMCw3IEBACiAJCQlzaXplb2YgKG5ld19oYW5kbGVyLT5pZC51c2VyaWQpKTsKIAkJRUJDX1RPVVBQRVIgKG5ld19oYW5kbGVyLT5pZC51c2VyaWQsCiAJCQkgICAgIHNpemVvZiAobmV3X2hhbmRsZXItPmlkLnVzZXJpZCkpOwotCQkKKwogCQlpZiAocGdtbWFzaykgewogCQkJbWVtY3B5IChuZXdfaGFuZGxlci0+aWQubWFzaywgcGdtbWFzaywKIAkJCQlzaXplb2YgKG5ld19oYW5kbGVyLT5pZC5tYXNrKSk7CkBAIC0xMjI5LDcgKzEyMjksNyBAQAogCQkvKiBwYXJtLT5pcGF1ZGl0IGhhcyBvbmx5IDMgYnl0ZXMgKi8KIAkJKmF1ZGl0ID4+PSA4OwogCX0KLQkKKwogCXJlbGVhc2VfcGFyYW0ocGFybSk7CiAKIAlpdWN2X2RlYnVnKDEsICJiMmYwX3Jlc3VsdCA9ICVsZCIsIGIyZjBfcmVzdWx0KTsKQEAgLTIzMzAsMTQgKzIzMzAsMTQgQEAKIAkJCQkJdGVtcF9idWZmMVtqXSAmPSAoaC0+aWQubWFzaylbal07CiAJCQkJCXRlbXBfYnVmZjJbal0gJj0gKGgtPmlkLm1hc2spW2pdOwogCQkJCX0KLQkJCQkKKwogCQkJCWl1Y3ZfZHVtcGl0KCJ0ZW1wX2J1ZmYxOiIsCiAJCQkJCSAgICB0ZW1wX2J1ZmYxLCBzaXplb2YodGVtcF9idWZmMSkpOwogCQkJCWl1Y3ZfZHVtcGl0KCJ0ZW1wX2J1ZmYyIiwKIAkJCQkJICAgIHRlbXBfYnVmZjIsIHNpemVvZih0ZW1wX2J1ZmYyKSk7Ci0JCQkJCisKIAkJCQlpZiAoIW1lbWNtcCAodGVtcF9idWZmMSwgdGVtcF9idWZmMiwgMjQpKSB7Ci0JCQkJCQorCiAJCQkJCWl1Y3ZfZGVidWcoMiwKIAkJCQkJCSAgICJmb3VuZCBhIG1hdGNoaW5nIGhhbmRsZXIiKTsKIAkJCQkJYnJlYWs7CkBAIC0yMzY4LDcgKzIzNjgsNyBAQAogCQkJfSBlbHNlCiAJCQkJaXVjdl9zZXZlcihpbnRfYnVmLT5pcHBhdGhpZCwgbm9fbGlzdGVuZXIpOwogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDI6CQkvKmNvbm5lY3Rpb24gY29tcGxldGUgKi8KIAkJCWlmIChtZXNzYWdlc0Rpc2FibGVkKSB7CiAJCQkgICAgaXVjdl9zZXRtYXNrKH4wKTsKQEAgLTIzODcsNyArMjM4Nyw3IEBACiAJCQl9IGVsc2UKIAkJCQlpdWN2X3NldmVyKGludF9idWYtPmlwcGF0aGlkLCBub19saXN0ZW5lcik7CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMHgwMzoJCS8qIGNvbm5lY3Rpb24gc2V2ZXJlZCAqLwogCQkJaWYgKG1lc3NhZ2VzRGlzYWJsZWQpIHsKIAkJCSAgICBpdWN2X3NldG1hc2sofjApOwpAQCAtMjM5OCwxMyArMjM5OCwxMyBAQAogCQkJCQlpbnRlcnJ1cHQtPkNvbm5lY3Rpb25TZXZlcmVkKAogCQkJCQkJKGl1Y3ZfQ29ubmVjdGlvblNldmVyZWQgKilpbnRfYnVmLAogCQkJCQkJaC0+cGdtX2RhdGEpOwotCQkJCQorCiAJCQkJZWxzZQogCQkJCQlpdWN2X3NldmVyIChpbnRfYnVmLT5pcHBhdGhpZCwgbm9fbGlzdGVuZXIpOwogCQkJfSBlbHNlCiAJCQkJaXVjdl9zZXZlcihpbnRfYnVmLT5pcHBhdGhpZCwgbm9fbGlzdGVuZXIpOwogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDQ6CQkvKiBjb25uZWN0aW9uIHF1aWVzY2VkICovCiAJCQlpZiAobWVzc2FnZXNEaXNhYmxlZCkgewogCQkJICAgIGl1Y3Zfc2V0bWFzayh+MCk7CkBAIC0yNDIwLDcgKzI0MjAsNyBAQAogCQkJCQkJICAgIkNvbm5lY3Rpb25RdWllc2NlZCBub3QgY2FsbGVkIik7CiAJCQl9CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMHgwNToJCS8qIGNvbm5lY3Rpb24gcmVzdW1lZCAqLwogCQkJaWYgKG1lc3NhZ2VzRGlzYWJsZWQpIHsKIAkJCSAgICBpdWN2X3NldG1hc2sofjApOwpAQCAtMjQzNiw3ICsyNDM2LDcgQEAKIAkJCQkJCSAgICJDb25uZWN0aW9uUmVzdW1lZCBub3QgY2FsbGVkIik7CiAJCQl9CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMHgwNjoJCS8qIHByaW9yaXR5IG1lc3NhZ2UgY29tcGxldGUgKi8KIAkJY2FzZSAweDA3OgkJLyogbm9ucHJpb3JpdHkgbWVzc2FnZSBjb21wbGV0ZSAqLwogCQkJaWYgKGgpIHsKQEAgLTI0NDksNyArMjQ0OSw3IEBACiAJCQkJCQkgICAiTWVzc2FnZUNvbXBsZXRlIG5vdCBjYWxsZWQiKTsKIAkJCX0KIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAweDA4OgkJLyogcHJpb3JpdHkgbWVzc2FnZSBwZW5kaW5nICAqLwogCQljYXNlIDB4MDk6CQkvKiBub25wcmlvcml0eSBtZXNzYWdlIHBlbmRpbmcgICovCiAJCQlpZiAoaCkgewpAQCAtMjQ2Nyw3ICsyNDY3LDcgQEAKIAkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwogCQkJYnJlYWs7CiAJfQkJCS8qIGVuZCBzd2l0Y2ggKi8KLQkKKwogCWl1Y3ZfZGVidWcoMiwgImV4aXRpbmcgcGF0aGlkICVkLCB0eXBlICUwMlgiLAogCQkgaW50X2J1Zi0+aXBwYXRoaWQsIGludF9idWYtPmlwdHlwZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5oIGIvZHJpdmVycy9zMzkwL25ldC9pdWN2LmgKaW5kZXggMGM0NjQ0ZC4uNWI2YjFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9pdWN2LmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9pdWN2LmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogIFMzOTAgdmVyc2lvbgogICogICAgQ29weXJpZ2h0IChDKSAyMDAwIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOkFsYW4gQWx0bWFyayAoQWxhbl9BbHRtYXJrQHVzLmlibS5jb20pIAorICogICAgQXV0aG9yKHMpOkFsYW4gQWx0bWFyayAoQWxhbl9BbHRtYXJrQHVzLmlibS5jb20pCiAgKgkJWGVuaWEgVGthdHNjaG93ICh4ZW5pYUB1cy5pYm0uY29tKQogICoKICAqCkBAIC0xNiwxNyArMTYsMTcgQEAKICAqIENQIFByb2dyYW1taW5nIFNlcnZpY2VzIGJvb2ssIGFsc28gYXZhaWxhYmxlIG9uIHRoZSB3ZWIKICAqIHRocnUgd3d3LmlibS5jb20vczM5MC92bS9wdWJzLCBtYW51YWwgIyBTQzI0LTU3NjAKICAqCi0gKiAgICAgIERlZmluaXRpb24gb2YgUmV0dXJuIENvZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgIC1BbGwgcG9zaXRpdmUgcmV0dXJuIGNvZGVzIGluY2x1ZGluZyB6ZXJvIGFyZSByZWZsZWN0ZWQgYmFjayAgCi0gKiAgICAgICBmcm9tIENQIGV4Y2VwdCBmb3IgaXVjdl9yZWdpc3Rlcl9wcm9ncmFtLiBUaGUgZGVmaW5pdGlvbiBvZiBlYWNoIAotICogICAgICAgcmV0dXJuIGNvZGUgY2FuIGJlIGZvdW5kIGluIENQIFByb2dyYW1taW5nIFNlcnZpY2VzIGJvb2suICAgIAotICogICAgICAgQWxzbyBhdmFpbGFibGUgb24gdGhlIHdlYiB0aHJ1IHd3dy5pYm0uY29tL3MzOTAvdm0vcHVicywgbWFudWFsICMgU0MyNC01NzYwICAgICAgICAgIAotICogICAgICAtIFJldHVybiBDb2RlIG9mOiAgICAgICAgIAotICogICAgICAgICAgICAgKC1FSU5WQUwpIEludmFsaWQgdmFsdWUgICAgICAgCi0gKiAgICAgICAgICAgICAoLUVOT01FTSkgc3RvcmFnZSBhbGxvY2F0aW9uIGZhaWxlZCAgICAgICAgICAgICAgCisgKiAgICAgIERlZmluaXRpb24gb2YgUmV0dXJuIENvZGVzCisgKiAgICAgIC1BbGwgcG9zaXRpdmUgcmV0dXJuIGNvZGVzIGluY2x1ZGluZyB6ZXJvIGFyZSByZWZsZWN0ZWQgYmFjaworICogICAgICAgZnJvbSBDUCBleGNlcHQgZm9yIGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbS4gVGhlIGRlZmluaXRpb24gb2YgZWFjaAorICogICAgICAgcmV0dXJuIGNvZGUgY2FuIGJlIGZvdW5kIGluIENQIFByb2dyYW1taW5nIFNlcnZpY2VzIGJvb2suCisgKiAgICAgICBBbHNvIGF2YWlsYWJsZSBvbiB0aGUgd2ViIHRocnUgd3d3LmlibS5jb20vczM5MC92bS9wdWJzLCBtYW51YWwgIyBTQzI0LTU3NjAKKyAqICAgICAgLSBSZXR1cm4gQ29kZSBvZjoKKyAqICAgICAgICAgICAgICgtRUlOVkFMKSBJbnZhbGlkIHZhbHVlCisgKiAgICAgICAgICAgICAoLUVOT01FTSkgc3RvcmFnZSBhbGxvY2F0aW9uIGZhaWxlZAogICoJcGdtYXNrIGRlZmluZWQgaW4gaXVjdl9yZWdpc3Rlcl9wcm9ncmFtIHdpbGwgYmUgc2V0IGRlcGVuZGluZyBvbiBpbnB1dAotICoJcGFyYW10ZXJzLiAKLSAqCQorICoJcGFyYW10ZXJzLgorICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTEyNCwxMyArMTI0LDEzIEBACiAjZGVmaW5lIGl1Y3ZfaGFuZGxlX3Qgdm9pZCAqCiAKIC8qIGZsYWdzMToKLSAqIEFsbCBmbGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZmllbGQgSVBGTEFHUzEgb2YgZWFjaCBmdW5jdGlvbiAgIAotICogYW5kIGNhbiBiZSBmb3VuZCBpbiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcy4gICAgICAgICAgICAgICAgICAKLSAqIElQTE9DQUwgIC0gSW5kaWNhdGVzIHRoZSBjb25uZWN0IGNhbiBvbmx5IGJlIHNhdGlzZmllZCBvbiB0aGUgCi0gKiAgICAgICAgICAgIGxvY2FsIHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogSVBQUlRZICAgLSBJbmRpY2F0ZXMgYSBwcmlvcml0eSBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAKLSAqIElQUVVTQ0UgIC0gSW5kaWNhdGVzIHlvdSBkbyBub3Qgd2FudCB0byByZWNlaXZlIG1lc3NhZ2VzIG9uIGEgCi0gKiAgICAgICAgICAgIHBhdGggdW50aWwgYW4gaXVjdl9yZXN1bWUgaXMgaXNzdWVkICAgICAgICAgICAgICAgIAorICogQWxsIGZsYWdzIGFyZSBkZWZpbmVkIGluIHRoZSBmaWVsZCBJUEZMQUdTMSBvZiBlYWNoIGZ1bmN0aW9uCisgKiBhbmQgY2FuIGJlIGZvdW5kIGluIENQIFByb2dyYW1taW5nIFNlcnZpY2VzLgorICogSVBMT0NBTCAgLSBJbmRpY2F0ZXMgdGhlIGNvbm5lY3QgY2FuIG9ubHkgYmUgc2F0aXNmaWVkIG9uIHRoZQorICogICAgICAgICAgICBsb2NhbCBzeXN0ZW0KKyAqIElQUFJUWSAgIC0gSW5kaWNhdGVzIGEgcHJpb3JpdHkgbWVzc2FnZQorICogSVBRVVNDRSAgLSBJbmRpY2F0ZXMgeW91IGRvIG5vdCB3YW50IHRvIHJlY2VpdmUgbWVzc2FnZXMgb24gYQorICogICAgICAgICAgICBwYXRoIHVudGlsIGFuIGl1Y3ZfcmVzdW1lIGlzIGlzc3VlZAogICogSVBSTURBVEEgLSBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbiB0aGUgcGFyYW1ldGVyIGxpc3QKICAqLwogI2RlZmluZSBJUExPQ0FMICAgCTB4MDEKQEAgLTE1NCwxNCArMTU0LDE0IEBACiAjZGVmaW5lIEFsbEludGVycnVwdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGY4CiAvKgogICogTWFwcGluZyBvZiBleHRlcm5hbCBpbnRlcnJ1cHQgYnVmZmVycyBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBpbnRlcnJ1cHQgdHlwZXMuICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lczogaXVjdl9Db25uZWN0aW9uUGVuZGluZyAgICAtPiAgY29ubmVjdGlvbiBwZW5kaW5nIAorICogaW50ZXJydXB0IHR5cGVzLgorICogTmFtZXM6IGl1Y3ZfQ29ubmVjdGlvblBlbmRpbmcgICAgLT4gIGNvbm5lY3Rpb24gcGVuZGluZwogICogICAgICAgIGl1Y3ZfQ29ubmVjdGlvbkNvbXBsZXRlICAgLT4gIGNvbm5lY3Rpb24gY29tcGxldGUKLSAqICAgICAgICBpdWN2X0Nvbm5lY3Rpb25TZXZlcmVkICAgIC0+ICBjb25uZWN0aW9uIHNldmVyZWQgCi0gKiAgICAgICAgaXVjdl9Db25uZWN0aW9uUXVpZXNjZWQgICAtPiAgY29ubmVjdGlvbiBxdWllc2NlZCAKLSAqICAgICAgICBpdWN2X0Nvbm5lY3Rpb25SZXN1bWVkICAgIC0+ICBjb25uZWN0aW9uIHJlc3VtZWQgCi0gKiAgICAgICAgaXVjdl9NZXNzYWdlUGVuZGluZyAgICAgICAtPiAgbWVzc2FnZSBwZW5kaW5nICAgIAotICogICAgICAgIGl1Y3ZfTWVzc2FnZUNvbXBsZXRlICAgICAgLT4gIG1lc3NhZ2UgY29tcGxldGUgICAKKyAqICAgICAgICBpdWN2X0Nvbm5lY3Rpb25TZXZlcmVkICAgIC0+ICBjb25uZWN0aW9uIHNldmVyZWQKKyAqICAgICAgICBpdWN2X0Nvbm5lY3Rpb25RdWllc2NlZCAgIC0+ICBjb25uZWN0aW9uIHF1aWVzY2VkCisgKiAgICAgICAgaXVjdl9Db25uZWN0aW9uUmVzdW1lZCAgICAtPiAgY29ubmVjdGlvbiByZXN1bWVkCisgKiAgICAgICAgaXVjdl9NZXNzYWdlUGVuZGluZyAgICAgICAtPiAgbWVzc2FnZSBwZW5kaW5nCisgKiAgICAgICAgaXVjdl9NZXNzYWdlQ29tcGxldGUgICAgICAtPiAgbWVzc2FnZSBjb21wbGV0ZQogICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJdTE2IGlwcGF0aGlkOwpAQCAtMjYwLDE2ICsyNjAsMTYgQEAKIAl1Y2hhciByZXMyWzNdOwogfSBpdWN2X01lc3NhZ2VDb21wbGV0ZTsKIAotLyogCi0gKiBpdWN2X2ludGVycnVwdF9vcHNfdDogSXMgYSB2ZWN0b3Igb2YgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIAotICogSVVDViBpbnRlcnJ1cHRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUGFyYW1ldGVyIGxpc3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICBlaWIgLSBpcyBhIHBvaW50ZXIgdG8gYSA0MC1ieXRlIGFyZWEgZGVzY3JpYmVkICAgIAotICogICAgICAgICAgICAgICB3aXRoIG9uZSBvZiB0aGUgc3RydWN0dXJlcyBhYm92ZS4gICAgICAgICAgIAotICogICAgICAgICBwZ21fZGF0YSAtIHRoaXMgZGF0YSBpcyBzdHJpY3RseSBmb3IgdGhlICAgICAgICAgIAotICogICAgICAgICAgICAgICAgICAgIGludGVycnVwdCBoYW5kbGVyIHRoYXQgaXMgcGFzc2VkIGJ5ICAgIAotICogICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBtYXkgYmUgYW4gYWRkcmVzcyAKLSAqICAgICAgICAgICAgICAgICAgICBvciB0b2tlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qCisgKiBpdWN2X2ludGVycnVwdF9vcHNfdDogSXMgYSB2ZWN0b3Igb2YgZnVuY3Rpb25zIHRoYXQgaGFuZGxlCisgKiBJVUNWIGludGVycnVwdHMuCisgKiBQYXJhbWV0ZXIgbGlzdDoKKyAqICAgICAgICAgZWliIC0gaXMgYSBwb2ludGVyIHRvIGEgNDAtYnl0ZSBhcmVhIGRlc2NyaWJlZAorICogICAgICAgICAgICAgICB3aXRoIG9uZSBvZiB0aGUgc3RydWN0dXJlcyBhYm92ZS4KKyAqICAgICAgICAgcGdtX2RhdGEgLSB0aGlzIGRhdGEgaXMgc3RyaWN0bHkgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgIGludGVycnVwdCBoYW5kbGVyIHRoYXQgaXMgcGFzc2VkIGJ5CisgKiAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uLiBUaGlzIG1heSBiZSBhbiBhZGRyZXNzCisgKiAgICAgICAgICAgICAgICAgICAgb3IgdG9rZW4uCiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCXZvaWQgKCpDb25uZWN0aW9uUGVuZGluZykgKGl1Y3ZfQ29ubmVjdGlvblBlbmRpbmcgKiBlaWIsCkBAIC0yODcsOCArMjg3LDggQEAKIH0gaXVjdl9pbnRlcnJ1cHRfb3BzX3Q7CiAKIC8qCi0gKml1Y3ZfYXJyYXlfdCA6IERlZmluZXMgYnVmZmVyIGFycmF5LiAgICAgICAgICAgICAgICAgICAgICAKLSAqIEluc2lkZSB0aGUgYXJyYXkgbWF5IGJlIDMxLSBiaXQgYWRkcmVzc2VzIGFuZCAzMS1iaXQgbGVuZ3Rocy4gCisgKml1Y3ZfYXJyYXlfdCA6IERlZmluZXMgYnVmZmVyIGFycmF5LgorICogSW5zaWRlIHRoZSBhcnJheSBtYXkgYmUgMzEtIGJpdCBhZGRyZXNzZXMgYW5kIDMxLWJpdCBsZW5ndGhzLgogKi8KIHR5cGVkZWYgc3RydWN0IHsKIAl1MzIgYWRkcmVzczsKQEAgLTI5OSwxOSArMjk5LDE5IEBACiBleHRlcm4gc3RydWN0IGRldmljZSAqaXVjdl9yb290OwogCiAvKiAgIC1wcm90b3R5cGVzLSAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3JlZ2lzdGVyX3Byb2dyYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFJlZ2lzdGVycyBhbiBhcHBsaWNhdGlvbiB3aXRoIElVQ1YgICAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBybW5hbWUgLSB1c2VyIGlkZW50aWZpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9yZWdpc3Rlcl9wcm9ncmFtCisgKiBQdXJwb3NlOiBSZWdpc3RlcnMgYW4gYXBwbGljYXRpb24gd2l0aCBJVUNWCisgKiBJbnB1dDogcHJtbmFtZSAtIHVzZXIgaWRlbnRpZmljYXRpb24KICAqICAgICAgICB1c2VyaWQgIC0gbWFjaGluZSBpZGVudGlmaWNhdGlvbgogICogICAgICAgIHBnbW1hc2sgLSBpbmRpY2F0ZXMgd2hpY2ggYml0cyBpbiB0aGUgcHJtbmFtZSBhbmQgdXNlcmlkIGNvbWJpbmVkIHdpbGwgYmUKICAqICAJCSAgICB1c2VkIHRvIGRldGVybWluZSB3aG8gaXMgZ2l2ZW4gY29udHJvbAotICogICAgICAgIG9wcyAgICAgLSBhZGRyZXNzIG9mIHZlY3RvciBvZiBpbnRlcnJ1cHQgaGFuZGxlcnMgICAgICAgCi0gKiAgICAgICAgcGdtX2RhdGEtIGFwcGxpY2F0aW9uIGRhdGEgcGFzc2VkIHRvIGludGVycnVwdCBoYW5kbGVycyAKLSAqIE91dHB1dDogTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBhZGRyZXNzIG9mIGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgb3BzICAgICAtIGFkZHJlc3Mgb2YgdmVjdG9yIG9mIGludGVycnVwdCBoYW5kbGVycworICogICAgICAgIHBnbV9kYXRhLSBhcHBsaWNhdGlvbiBkYXRhIHBhc3NlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMKKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogYWRkcmVzcyBvZiBoYW5kbGVyCiAgKiAgICAgICAgICgwKSAtIEVycm9yIG9jY3VycmVkLCByZWdpc3RyYXRpb24gbm90IGNvbXBsZXRlZC4KLSAqIE5PVEU6IEV4YWN0IGNhdXNlIG9mIGZhaWx1cmUgd2lsbCBiZSByZWNvcmRlZCBpbiBzeXNsb2cuICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBOT1RFOiBFeGFjdCBjYXVzZSBvZiBmYWlsdXJlIHdpbGwgYmUgcmVjb3JkZWQgaW4gc3lzbG9nLgogKi8KIGl1Y3ZfaGFuZGxlX3QgaXVjdl9yZWdpc3Rlcl9wcm9ncmFtICh1Y2hhciBwZ21uYW1lWzE2XSwKIAkJCQkgICAgIHVjaGFyIHVzZXJpZFs4XSwKQEAgLTMxOSwxMyArMzE5LDEzIEBACiAJCQkJICAgICBpdWN2X2ludGVycnVwdF9vcHNfdCAqIG9wcywKIAkJCQkgICAgIHZvaWQgKnBnbV9kYXRhKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3ZfdW5yZWdpc3Rlcl9wcm9ncmFtICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBVbnJlZ2lzdGVyIGFwcGxpY2F0aW9uIHdpdGggSVVDViAgICAgIAotICogSW5wdXQ6IGFkZHJlc3Mgb2YgaGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAKLSAqIE91dHB1dDogTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46ICgwKSAtIE5vcm1hbCByZXR1cm4gICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBJbnRlcm5hbCBlcnJvciwgd2lsZCBwb2ludGVyICAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3VucmVnaXN0ZXJfcHJvZ3JhbQorICogUHVycG9zZTogVW5yZWdpc3RlciBhcHBsaWNhdGlvbiB3aXRoIElVQ1YKKyAqIElucHV0OiBhZGRyZXNzIG9mIGhhbmRsZXIKKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogKDApIC0gTm9ybWFsIHJldHVybgorICogICAgICAgICAoLUVJTlZBTCkgLSBJbnRlcm5hbCBlcnJvciwgd2lsZCBwb2ludGVyCiAqLwogaW50IGl1Y3ZfdW5yZWdpc3Rlcl9wcm9ncmFtIChpdWN2X2hhbmRsZV90IGhhbmRsZSk7CiAKQEAgLTMzMyw3ICszMzMsNyBAQAogICogTmFtZTogaXVjdl9hY2NlcHQKICAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gaXMgaXNzdWVkIGFmdGVyIHRoZSB1c2VyIHJlY2VpdmVzIGEgQ29ubmVjdGlvbiBQZW5kaW5nIGV4dGVybmFsCiAgKiAgICAgICAgICBpbnRlcnJ1cHQgYW5kIG5vdyB3aXNoZXMgdG8gY29tcGxldGUgdGhlIElVQ1YgY29tbXVuaWNhdGlvbiBwYXRoLgotICogSW5wdXQ6ICBwYXRoaWQgLSB1MTYgLCBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlciAgIAorICogSW5wdXQ6ICBwYXRoaWQgLSB1MTYgLCBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlcgogICogICAgICAgICBtc2dsaW1fcmVxc3RkIC0gdTE2LCBUaGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nIG1lc3NhZ2VzIHJlcXVlc3RlZC4KICAqICAgICAgICAgdXNlcl9kYXRhIC0gdWNoYXJbMTZdLCBEYXRhIHNwZWNpZmllZCBieSB0aGUgaXVjdl9jb25uZWN0IGZ1bmN0aW9uLgogICoJICAgZmxhZ3MxIC0gaW50LCBDb250YWlucyBvcHRpb25zIGZvciB0aGlzIHBhdGguCkBAIC0zNTgsMzQgKzM1OCwzNCBAQAogCQkgdm9pZCAqcGdtX2RhdGEsIGludCAqZmxhZ3MxX291dCwgdTE2ICogbXNnbGltKTsKIAogLyoKLSAqIE5hbWU6IGl1Y3ZfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBOYW1lOiBpdWN2X2Nvbm5lY3QKICAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gZXN0YWJsaXNoZXMgYW4gSVVDViBwYXRoLiBBbHRob3VnaCB0aGUgY29ubmVjdCBtYXkgY29tcGxldGUKLSAqCSAgICBzdWNjZXNzZnVsbHksIHlvdSBhcmUgbm90IGFibGUgdG8gdXNlIHRoZSBwYXRoIHVudGlsIHlvdSByZWNlaXZlIGFuIElVQ1YgCi0gKiAgICAgICAgICBDb25uZWN0aW9uIENvbXBsZXRlIGV4dGVybmFsIGludGVycnVwdC4gICAgICAgICAgICAKLSAqIElucHV0OiBwYXRoaWQgLSB1MTYgKiwgUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIgICAgICAgICAgCi0gKiAgICAgICAgbXNnbGltX3JlcXN0ZCAtIHUxNiwgTnVtYmVyIG9mIG91dHN0YW5kaW5nIG1lc3NhZ2VzIHJlcXVlc3RlZCAgICAgICAKLSAqICAgICAgICB1c2VyX2RhdGEgLSB1Y2hhclsxNl0sIDE2LWJ5dGUgdXNlciBkYXRhICAgICAgICAgICAgICAgICAgICAKKyAqCSAgICBzdWNjZXNzZnVsbHksIHlvdSBhcmUgbm90IGFibGUgdG8gdXNlIHRoZSBwYXRoIHVudGlsIHlvdSByZWNlaXZlIGFuIElVQ1YKKyAqICAgICAgICAgIENvbm5lY3Rpb24gQ29tcGxldGUgZXh0ZXJuYWwgaW50ZXJydXB0LgorICogSW5wdXQ6IHBhdGhpZCAtIHUxNiAqLCBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlcgorICogICAgICAgIG1zZ2xpbV9yZXFzdGQgLSB1MTYsIE51bWJlciBvZiBvdXRzdGFuZGluZyBtZXNzYWdlcyByZXF1ZXN0ZWQKKyAqICAgICAgICB1c2VyX2RhdGEgLSB1Y2hhclsxNl0sIDE2LWJ5dGUgdXNlciBkYXRhCiAgKgkgIHVzZXJpZCAtIHVjaGFyWzhdLCBVc2VyIGlkZW50aWZpY2F0aW9uCi0gKiAgICAgICAgc3lzdGVtX25hbWUgLSB1Y2hhcls4XSwgOC1ieXRlIGlkZW50aWZ5aW5nIHRoZSBzeXN0ZW0gbmFtZSAKKyAqICAgICAgICBzeXN0ZW1fbmFtZSAtIHVjaGFyWzhdLCA4LWJ5dGUgaWRlbnRpZnlpbmcgdGhlIHN5c3RlbSBuYW1lCiAgKgkgIGZsYWdzMSAtIGludCwgQ29udGFpbnMgb3B0aW9ucyBmb3IgdGhpcyBwYXRoLgogICogICAgICAgICAgLUlQUFJUWSAtICAgMHgyMCwgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KICAqICAgICAgICAgIC1JUFJNREFUQSAtIDB4ODAsIFNwZWNpZmllcyB3aGV0aGVyIHlvdXIgcHJvZ3JhbSBjYW4gaGFuZGxlIGEgbWVzc2FnZQogICogICAgICAgICAgICAJIGluICB0aGUgcGFyYW1ldGVyIGxpc3QuCi0gKiAgICAgICAgICAtSVBRVVNDRSAtICAweDQwLCBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0byBxdWllc2NlIHRoZSBwYXRoIGJlaW5nCSAKKyAqICAgICAgICAgIC1JUFFVU0NFIC0gIDB4NDAsIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvIHF1aWVzY2UgdGhlIHBhdGggYmVpbmcKICAqCQllc3RhYmxpc2hlZC4KLSAqICAgICAgICAgIC1JUExPQ0FMIC0gIDBYMDEsIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBmb3JjZSB0aGUgcGFydG5lciB0byBiZSBvbiAKKyAqICAgICAgICAgIC1JUExPQ0FMIC0gIDBYMDEsIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBmb3JjZSB0aGUgcGFydG5lciB0byBiZSBvbgogICoJCXRoZSBsb2NhbCBzeXN0ZW0uIElmIGxvY2FsIGlzIHNwZWNpZmllZCB0aGVuIHRhcmdldCBjbGFzcyBjYW5ub3QgYmUKLSAqCQlzcGVjaWZpZWQuICAgICAgICAgICAgICAgICAgICAgICAKKyAqCQlzcGVjaWZpZWQuCiAgKiAgICAgICAgZmxhZ3MxX291dCAtIGludCAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXRoCiAgKiAgICAgICAgICAgLSBJUFBSVFkgLSAweDIwLCBJbmRpY2F0ZXMgeW91IG1heSBzZW5kIHByaW9yaXR5IG1lc3NhZ2VzLgogICogICAgICAgIG1zZ2xpbSAtICogdTE2LCBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgbWVzc2FnZXMKLSAqICAgICAgICBoYW5kbGUgLSBpdWN2X2hhbmRsZV90LCBBZGRyZXNzIG9mIGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgcGdtX2RhdGEgLSB2b2lkICosIEFwcGxpY2F0aW9uIGRhdGEgcGFzc2VkIHRvIGludGVycnVwdCBoYW5kbGVycyAgICAgICAgICAgICAgCisgKiAgICAgICAgaGFuZGxlIC0gaXVjdl9oYW5kbGVfdCwgQWRkcmVzcyBvZiBoYW5kbGVyCisgKiAgICAgICAgcGdtX2RhdGEgLSB2b2lkICosIEFwcGxpY2F0aW9uIGRhdGEgcGFzc2VkIHRvIGludGVycnVwdCBoYW5kbGVycwogICogT3V0cHV0OiByZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbAogICogICAgICAgICByYyAtIHJldHVybiBjb2RlIGZyb20gaXVjdl9kZWNsYXJlX2J1ZmZlcgotICogICAgICAgICAtRUlOVkFMIC0gSW52YWxpZCBoYW5kbGUgcGFzc2VkIGJ5IGFwcGxpY2F0aW9uIAotICogICAgICAgICAtRUlOVkFMIC0gUGF0aGlkIGFkZHJlc3MgaXMgTlVMTCAKLSAqICAgICAgICAgYWRkX3BhdGhpZF9yZXN1bHQgLSBSZXR1cm4gY29kZSBmcm9tIGludGVybmFsIGZ1bmN0aW9uIGFkZF9wYXRoaWQgICAgICAgICAKKyAqICAgICAgICAgLUVJTlZBTCAtIEludmFsaWQgaGFuZGxlIHBhc3NlZCBieSBhcHBsaWNhdGlvbgorICogICAgICAgICAtRUlOVkFMIC0gUGF0aGlkIGFkZHJlc3MgaXMgTlVMTAorICogICAgICAgICBhZGRfcGF0aGlkX3Jlc3VsdCAtIFJldHVybiBjb2RlIGZyb20gaW50ZXJuYWwgZnVuY3Rpb24gYWRkX3BhdGhpZAogKi8KIGludAogICAgIGl1Y3ZfY29ubmVjdCAodTE2ICogcGF0aGlkLApAQCAtMzk3LDE2ICszOTcsMTYgQEAKIAkJICBpbnQgKmZsYWdzMV9vdXQsCiAJCSAgdTE2ICogbXNnbGltLCBpdWN2X2hhbmRsZV90IGhhbmRsZSwgdm9pZCAqcGdtX2RhdGEpOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9wdXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gY2FuY2VscyBhIG1lc3NhZ2UgdGhhdCB5b3UgaGF2ZSBzZW50LiAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3B1cmdlCisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGNhbmNlbHMgYSBtZXNzYWdlIHRoYXQgeW91IGhhdmUgc2VudC4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KICAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBiZSBwdXJnZWQuCi0gKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4gICAgICAgICAgICAgICAgICAKLSAqIE91dHB1dDogYXVkaXQgLSBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhc3luY2hyb25vdXMgZXJyb3IgICAgICAgCi0gKiAgICAgICAgICAgICAgICAgdGhhdCBtYXkgaGF2ZSBhZmZlY3RlZCB0aGUgbm9ybWFsIGNvbXBsZXRpb24gICAgICAgIAotICogICAgICAgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KKyAqIE91dHB1dDogYXVkaXQgLSBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhc3luY2hyb25vdXMgZXJyb3IKKyAqICAgICAgICAgICAgICAgICB0aGF0IG1heSBoYXZlIGFmZmVjdGVkIHRoZSBub3JtYWwgY29tcGxldGlvbgorICogICAgICAgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZS4KKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3ZfcHVyZ2UgKHUxNiBwYXRoaWQsIHUzMiBtc2dpZCwgdTMyIHNyY2NscywgX191MzIgKmF1ZGl0KTsKIC8qCkBAIC00MjYsMzggKzQyNiwzOCBAQAogICovCiB1bG9uZyBpdWN2X3F1ZXJ5X2J1ZnNpemUgKHZvaWQpOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9xdWllc2NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdGVtcG9yYXJpbHkgc3VzcGVuZHMgaW5jb21pbmcgbWVzc2FnZXMgb24gYW4gCi0gKiAgICAgICAgICBJVUNWIHBhdGguIFlvdSBjYW4gbGF0ZXIgcmVhY3RpdmF0ZSB0aGUgcGF0aCBieSBpbnZva2luZyAgIAotICogICAgICAgICAgdGhlIGl1Y3ZfcmVzdW1lIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdXNlcl9kYXRhICAtIDE2LWJ5dGVzIG9mIHVzZXIgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9xdWllc2NlCisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRlbXBvcmFyaWx5IHN1c3BlbmRzIGluY29taW5nIG1lc3NhZ2VzIG9uIGFuCisgKiAgICAgICAgICBJVUNWIHBhdGguIFlvdSBjYW4gbGF0ZXIgcmVhY3RpdmF0ZSB0aGUgcGF0aCBieSBpbnZva2luZworICogICAgICAgICAgdGhlIGl1Y3ZfcmVzdW1lIGZ1bmN0aW9uLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyCisgKiAgICAgICAgdXNlcl9kYXRhICAtIDE2LWJ5dGVzIG9mIHVzZXIgZGF0YQorICogT3V0cHV0OiBOQQorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KICovCiBpbnQgaXVjdl9xdWllc2NlICh1MTYgcGF0aGlkLCB1Y2hhciB1c2VyX2RhdGFbMTZdKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3ZfcmVjZWl2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIG1lc3NhZ2VzIHRoYXQgYXJlIGJlaW5nIHNlbnQgdG8geW91IAorLyoKKyAqIE5hbWU6IGl1Y3ZfcmVjZWl2ZQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZWNlaXZlcyBtZXNzYWdlcyB0aGF0IGFyZSBiZWluZyBzZW50IHRvIHlvdQogICogICAgICAgICAgb3ZlciBlc3RhYmxpc2hlZCBwYXRocy4gRGF0YSB3aWxsIGJlIHJldHVybmVkIGluIGJ1ZmZlciBmb3IgbGVuZ3RoIG9mCiAgKiAgICAgICAgICBidWZsZW4uCi0gKiBJbnB1dDogCi0gKiAgICAgICBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgYnVmZmVyIC0gQWRkcmVzcyBvZiBidWZmZXIgdG8gcmVjZWl2ZS4gICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiBidWZmZXIgdG8gcmVjZWl2ZS4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgCi0gKiAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IAorICogSW5wdXQ6CisgKiAgICAgICBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYnVmZmVyIHRvIHJlY2VpdmUuCisgKiAgICAgICBidWZsZW4gLSBMZW5ndGggb2YgYnVmZmVyIHRvIHJlY2VpdmUuCisgKiAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiBPdXRwdXQ6CiAgKgkgZmxhZ3MxX291dDogaW50ICosIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGF0aC4KICAqICAgICAgICAgSVBOT1JQWSAtIDB4MTAgU3BlY2lmaWVzIHRoaXMgaXMgYSBvbmUtd2F5IG1lc3NhZ2UgYW5kIG5vIHJlcGx5IGlzCi0gKgkgICBleHBlY3RlZC4gICAgICAKLSAqICAgICAgICAgSVBQUlRZICAtIDB4MjAgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4gICAgICAgCisgKgkgICBleHBlY3RlZC4KKyAqICAgICAgICAgSVBQUlRZICAtIDB4MjAgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KICAqICAgICAgICAgSVBSTURBVEEgLSAweDgwIHNwZWNpZmllcyB0aGUgZGF0YSBpcyBjb250YWluZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0CiAgKiAgICAgICByZXNpZHVhbF9idWZmZXIgLSBhZGRyZXNzIG9mIGJ1ZmZlciB1cGRhdGVkIGJ5IHRoZSBudW1iZXIKICAqICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGJ5dGVzIHlvdSBoYXZlIHJlY2VpdmVkLgotICogICAgICAgcmVzaWR1YWxfbGVuZ3RoIC0gICAgICAKKyAqICAgICAgIHJlc2lkdWFsX2xlbmd0aCAtCiAgKiAgICAgICAgICAgICAgQ29udGFpbnMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLCBpZiB0aGUgcmVjZWl2ZSBidWZmZXIgaXM6CiAgKiAgICAgICAgICAgICAgIFRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgbWVzc2FnZSwgdGhpcyBmaWVsZCBpcyB6ZXJvLgogICogICAgICAgICAgICAgICBMb25nZXIgdGhhbiB0aGUgbWVzc2FnZSwgdGhpcyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mCkBAIC00NjYsOCArNDY2LDggQEAKICAqICAgICAgICAgICAgICAgIGNvdW50ICh0aGF0IGlzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUKICAqICAgICAgICAgICAgICAgIG1lc3NhZ2UgdGhhdCBkb2VzIG5vdCBmaXQgaW50byB0aGUgYnVmZmVyLiBJbiB0aGlzCiAgKiAgICAgICAgICAgICAgICBjYXNlIGIyZjBfcmVzdWx0ID0gNS4KLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIGJ1ZmZlciBhZGRyZXNzIGlzIHBvaW50aW5nIHRvIE5VTEwgICAgICAgICAgICAgICAgICAgCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBidWZmZXIgYWRkcmVzcyBpcyBwb2ludGluZyB0byBOVUxMCiAqLwogaW50IGl1Y3ZfcmVjZWl2ZSAodTE2IHBhdGhpZCwKIAkJICB1MzIgbXNnaWQsCkBAIC00NzcsMTYgKzQ3NywxNiBAQAogCQkgIGludCAqZmxhZ3MxX291dCwKIAkJICB1bG9uZyAqIHJlc2lkdWFsX2J1ZmZlciwgdWxvbmcgKiByZXNpZHVhbF9sZW5ndGgpOwogCi0gLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgKiBOYW1lOiBpdWN2X3JlY2VpdmVfYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgbWVzc2FnZXMgdGhhdCBhcmUgYmVpbmcgc2VudCB0byB5b3UgCisgLyoKKyAgKiBOYW1lOiBpdWN2X3JlY2VpdmVfYXJyYXkKKyAgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIG1lc3NhZ2VzIHRoYXQgYXJlIGJlaW5nIHNlbnQgdG8geW91CiAgICogICAgICAgICAgb3ZlciBlc3RhYmxpc2hlZCBwYXRocy4gRGF0YSB3aWxsIGJlIHJldHVybmVkIGluIGZpcnN0IGJ1ZmZlciBmb3IKICAgKiAgICAgICAgICBsZW5ndGggb2YgZmlyc3QgYnVmZmVyLgotICAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KICAgKiAgICAgICAgbXNnaWQgLSBzcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCiAgICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCi0gICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiBidWZmZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgYnVmZmVycy4KKyAgKiAgICAgICAgYnVmbGVuIC0gVG90YWwgbGVuZ3RoIG9mIGJ1ZmZlcnMuCiAgICogT3V0cHV0OgogICAqICAgICAgICBmbGFnczFfb3V0OiBpbnQgKiwgQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXRoLgogICAqICAgICAgICAgIElQTk9SUFkgLSAweDEwIFNwZWNpZmllcyB0aGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCBubyByZXBseSBpcwpAQCAtNTA0LDggKzUwNCw4IEBACiAgICogICAgICAgICAgICAgICAgY291bnQgKHRoYXQgaXMsIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIHRoZQogICAqICAgICAgICAgICAgICAgIG1lc3NhZ2UgdGhhdCBkb2VzIG5vdCBmaXQgaW50byB0aGUgYnVmZmVyLiBJbiB0aGlzCiAgICogICAgICAgICAgICAgICAgY2FzZSBiMmYwX3Jlc3VsdCA9IDUuCi0gICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBhZGRyZXNzIGlzIE5VTEwuICAgICAgIAorICAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCisgICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogICAqLwogaW50IGl1Y3ZfcmVjZWl2ZV9hcnJheSAodTE2IHBhdGhpZCwKIAkJCXUzMiBtc2dpZCwKQEAgLTUxNSw0NCArNTE1LDQ0IEBACiAJCQlpbnQgKmZsYWdzMV9vdXQsCiAJCQl1bG9uZyAqIHJlc2lkdWFsX2J1ZmZlciwgdWxvbmcgKiByZXNpZHVhbF9sZW5ndGgpOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3JlamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGUgcmVqZWN0IGZ1bmN0aW9uIHJlZnVzZXMgYSBzcGVjaWZpZWQgbWVzc2FnZS4gQmV0d2VlbiB0aGUgCi0gKiAgICAgICAgICB0aW1lIHlvdSBhcmUgbm90aWZpZWQgb2YgYSBtZXNzYWdlIGFuZCB0aGUgdGltZSB0aGF0IHlvdSAgICAgCi0gKiAgICAgICAgICBjb21wbGV0ZSB0aGUgbWVzc2FnZSwgdGhlIG1lc3NhZ2UgbWF5IGJlIHJlamVjdGVkLiAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9yZWplY3QKKyAqIFB1cnBvc2U6IFRoZSByZWplY3QgZnVuY3Rpb24gcmVmdXNlcyBhIHNwZWNpZmllZCBtZXNzYWdlLiBCZXR3ZWVuIHRoZQorICogICAgICAgICAgdGltZSB5b3UgYXJlIG5vdGlmaWVkIG9mIGEgbWVzc2FnZSBhbmQgdGhlIHRpbWUgdGhhdCB5b3UKKyAqICAgICAgICAgIGNvbXBsZXRlIHRoZSBtZXNzYWdlLCB0aGUgbWVzc2FnZSBtYXkgYmUgcmVqZWN0ZWQuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4KKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3ZfcmVqZWN0ICh1MTYgcGF0aGlkLCB1MzIgbXNnaWQsIHUzMiB0cmdjbHMpOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZXBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzcG9uZHMgdG8gdGhlIHR3by13YXkgbWVzc2FnZXMgdGhhdCB5b3UgICAgCi0gKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvICAgICAgIAotICogICAgICAgICAgd2hpY2ggeW91IHdpc2ggdG8gcmVwbHkuIGllLCBwYXRoaWQsIG1zZ2lkLCBhbmQgdHJnY2xzLiAgICAKLSAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAgICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcmVwbHkKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzcG9uZHMgdG8gdGhlIHR3by13YXkgbWVzc2FnZXMgdGhhdCB5b3UKKyAqICAgICAgICAgIHJlY2VpdmUuIFlvdSBtdXN0IGlkZW50aWZ5IGNvbXBsZXRlbHkgdGhlIG1lc3NhZ2UgdG8KKyAqICAgICAgICAgIHdoaWNoIHlvdSB3aXNoIHRvIHJlcGx5LiBpZSwgcGF0aGlkLCBtc2dpZCwgYW5kIHRyZ2Nscy4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KLSAqICAgICAgICAgIElQUFJUWS0gMHgyMCwgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4gICAgICAgIAotICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgcmVwbHkgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYnVmbGVuIC0gTGVuZ3RoIG9mIHJlcGx5IGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE91dHB1dDogcmVzaWR1YWxfYnVmZmVyIC0gQWRkcmVzcyBvZiBidWZmZXIgdXBkYXRlZCBieSB0aGUgbnVtYmVyIAotICogICAgICAgICAgICAgICAgICAgIG9mIGJ5dGVzIHlvdSBoYXZlIG1vdmVkLiAgICAgICAgICAgICAgCisgKiAgICAgICAgICBJUFBSVFktIDB4MjAsIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCisgKiAgICAgICAgYnVmZmVyIC0gQWRkcmVzcyBvZiByZXBseSBidWZmZXIuCisgKiAgICAgICAgYnVmbGVuIC0gTGVuZ3RoIG9mIHJlcGx5IGJ1ZmZlci4KKyAqIE91dHB1dDogcmVzaWR1YWxfYnVmZmVyIC0gQWRkcmVzcyBvZiBidWZmZXIgdXBkYXRlZCBieSB0aGUgbnVtYmVyCisgKiAgICAgICAgICAgICAgICAgICAgb2YgYnl0ZXMgeW91IGhhdmUgbW92ZWQuCiAgKiAgICAgICAgIHJlc2lkdWFsX2xlbmd0aCAtIENvbnRhaW5zIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAqCQlJZiB0aGUgYW5zd2VyIGJ1ZmZlciBpcyB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHJlcGx5LCB0aGlzIGZpZWxkCiAgKgkJIGNvbnRhaW5zIHplcm8uCiAgKgkJSWYgdGhlIGFuc3dlciBidWZmZXIgaXMgbG9uZ2VyIHRoYW4gdGhlIHJlcGx5LCB0aGlzIGZpZWxkIGNvbnRhaW5zCi0gKgkJIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIHRoZSBidWZmZXIuICAKKyAqCQkgdGhlIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlci4KICAqCQlJZiB0aGUgYW5zd2VyIGJ1ZmZlciBpcyBzaG9ydGVyIHRoYW4gdGhlIHJlcGx5LCB0aGlzIGZpZWxkIGNvbnRhaW5zCiAgKgkJIGEgcmVzaWR1YWwgY291bnQgKHRoYXQgaXMsIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtaWFuaW5nIGluIHRoZQogICoJCSByZXBseSB0aGF0IGRvZXMgbm90IGZpdCBpbnRvIHRoZSBidWZmZXIuIEluIHRoaXMKICAqICAgICAgICAgICAgICAgY2FzZSBiMmYwX3Jlc3VsdCA9IDUuCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCisgKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBhZGRyZXNzIGlzIE5VTEwuCiAqLwogaW50IGl1Y3ZfcmVwbHkgKHUxNiBwYXRoaWQsCiAJCXUzMiBtc2dpZCwKQEAgLTU2MSwyMCArNTYxLDIwIEBACiAJCXZvaWQgKmJ1ZmZlciwgdWxvbmcgYnVmbGVuLCB1bG9uZyAqIHJlc2lkdWFsX2J1ZmZlciwKIAkJdWxvbmcgKiByZXNpZHVhbF9sZW5ndGgpOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3JlcGx5X2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlc3BvbmRzIHRvIHRoZSB0d28td2F5IG1lc3NhZ2VzIHRoYXQgeW91ICAgICAgCi0gKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvICAgICAgICAgCi0gKiAgICAgICAgICB3aGljaCB5b3Ugd2lzaCB0byByZXBseS4gaWUsIHBhdGhpZCwgbXNnaWQsIGFuZCB0cmdjbHMuICAgICAgCi0gKiAgICAgICAgICBUaGUgYXJyYXkgaWRlbnRpZmllcyBhIGxpc3Qgb2YgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mICAgICAgCi0gKiAgICAgICAgICBkaXNjb250aWd1b3VzIGJ1ZmZlcnMgdGhhdCBjb250YWlucyB0aGUgcmVwbHkgZGF0YS4gICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuIAotICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3JlcGx5X2FycmF5CisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlc3BvbmRzIHRvIHRoZSB0d28td2F5IG1lc3NhZ2VzIHRoYXQgeW91CisgKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvCisgKiAgICAgICAgICB3aGljaCB5b3Ugd2lzaCB0byByZXBseS4gaWUsIHBhdGhpZCwgbXNnaWQsIGFuZCB0cmdjbHMuCisgKiAgICAgICAgICBUaGUgYXJyYXkgaWRlbnRpZmllcyBhIGxpc3Qgb2YgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mCisgKiAgICAgICAgICBkaXNjb250aWd1b3VzIGJ1ZmZlcnMgdGhhdCBjb250YWlucyB0aGUgcmVwbHkgZGF0YS4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlcgorICogICAgICAgIG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCiAgKiAgICAgICAgZmxhZ3MxIC0gT3B0aW9uIGZvciBwYXRoLgogICogICAgICAgICAgSVBQUlRZLSAweDIwLCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgcmVwbHkgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBidWZsZW4gLSBUb3RhbCBsZW5ndGggb2YgcmVwbHkgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgYnVmZmVyIC0gQWRkcmVzcyBvZiBhcnJheSBvZiByZXBseSBidWZmZXJzLgorICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiByZXBseSBidWZmZXJzLgogICogT3V0cHV0OiByZXNpZHVhbF9idWZmZXIgLSBBZGRyZXNzIG9mIGJ1ZmZlciB3aGljaCBJVUNWIGlzIGN1cnJlbnRseSB3b3JraW5nIG9uLgogICogICAgICAgICByZXNpZHVhbF9sZW5ndGggLSBDb250YWlucyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgKiAgICAgICAgICAgICAgSWYgdGhlIGFuc3dlciBidWZmZXIgaXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSByZXBseSwgdGhpcyBmaWVsZApAQCAtNTg1LDggKzU4NSw4IEBACiAgKiAgICAgICAgICAgICAgIGEgcmVzaWR1YWwgY291bnQgKHRoYXQgaXMsIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtaWFuaW5nIGluIHRoZQogICogICAgICAgICAgICAgICByZXBseSB0aGF0IGRvZXMgbm90IGZpdCBpbnRvIHRoZSBidWZmZXIuIEluIHRoaXMKICAqICAgICAgICAgICAgICAgY2FzZSBiMmYwX3Jlc3VsdCA9IDUuCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBhZGRyZXNzIGlzIE5VTEwuICAgICAgICAgICAgICAKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCisgKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBhZGRyZXNzIGlzIE5VTEwuCiAqLwogaW50IGl1Y3ZfcmVwbHlfYXJyYXkgKHUxNiBwYXRoaWQsCiAJCSAgICAgIHUzMiBtc2dpZCwKQEAgLTU5Niw3NyArNTk2LDc3IEBACiAJCSAgICAgIHVsb25nIGJ1ZmxlbiwgdWxvbmcgKiByZXNpZHVhbF9hZGRyZXNzLAogCQkgICAgICB1bG9uZyAqIHJlc2lkdWFsX2xlbmd0aCk7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3JlcGx5X3BybW1zZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZXNwb25kcyB0byB0aGUgdHdvLXdheSBtZXNzYWdlcyB0aGF0IHlvdSAKLSAqICAgICAgICAgIHJlY2VpdmUuIFlvdSBtdXN0IGlkZW50aWZ5IGNvbXBsZXRlbHkgdGhlIG1lc3NhZ2UgdG8gICAgCi0gKiAgICAgICAgICB3aGljaCB5b3Ugd2lzaCB0byByZXBseS4gaWUsIHBhdGhpZCwgbXNnaWQsIGFuZCB0cmdjbHMuIAotICogICAgICAgICAgUHJtbXNnIHNpZ25pZmllcyB0aGUgZGF0YSBpcyBtb3ZlZCBpbnRvIHRoZSAgICAgICAgICAgICAKLSAqICAgICAgICAgIHBhcmFtZXRlciBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgIAotICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9yZXBseV9wcm1tc2cKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzcG9uZHMgdG8gdGhlIHR3by13YXkgbWVzc2FnZXMgdGhhdCB5b3UKKyAqICAgICAgICAgIHJlY2VpdmUuIFlvdSBtdXN0IGlkZW50aWZ5IGNvbXBsZXRlbHkgdGhlIG1lc3NhZ2UgdG8KKyAqICAgICAgICAgIHdoaWNoIHlvdSB3aXNoIHRvIHJlcGx5LiBpZSwgcGF0aGlkLCBtc2dpZCwgYW5kIHRyZ2Nscy4KKyAqICAgICAgICAgIFBybW1zZyBzaWduaWZpZXMgdGhlIGRhdGEgaXMgbW92ZWQgaW50byB0aGUKKyAqICAgICAgICAgIHBhcmFtZXRlciBsaXN0LgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCiAgKiAgICAgICAgZmxhZ3MxIC0gT3B0aW9uIGZvciBwYXRoLgogICogICAgICAgICAgSVBQUlRZLSAweDIwIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCi0gKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBwYXJhbWV0ZXIuICAKLSAqICAgICAgICAgICAgICAgICBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAKKyAqICAgICAgICBwcm1tc2cgLSA4LWJ5dGVzIG9mIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gdGhlIHBhcmFtZXRlci4KKyAqICAgICAgICAgICAgICAgICBsaXN0LgorICogT3V0cHV0OiBOQQorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KICovCiBpbnQgaXVjdl9yZXBseV9wcm1tc2cgKHUxNiBwYXRoaWQsCiAJCSAgICAgICB1MzIgbXNnaWQsIHUzMiB0cmdjbHMsIGludCBmbGFnczEsIHVjaGFyIHBybW1zZ1s4XSk7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3Jlc3VtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZXN0b3JlcyBjb21tdW5pY2F0aW9ucyBvdmVyIGEgcXVpZXNjZWQgcGF0aCAKLSAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHVzZXJfZGF0YSAgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3Jlc3VtZQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZXN0b3JlcyBjb21tdW5pY2F0aW9ucyBvdmVyIGEgcXVpZXNjZWQgcGF0aAorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHVzZXJfZGF0YSAgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEuCisgKiBPdXRwdXQ6IE5BCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgogKi8KIGludCBpdWN2X3Jlc3VtZSAodTE2IHBhdGhpZCwgdWNoYXIgdXNlcl9kYXRhWzE2XSk7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9zZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAgICAKLSAqICAgICAgICAgIERhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgaXMgaW4gYSBidWZmZXIgYW5kIHRoaXMgaXMgYSAgICAgIAotICogICAgICAgICAgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUgcmVjZWl2ZXIgd2lsbCBub3QgcmVwbHkgdG8gdGhlICAgCi0gKiAgICAgICAgICBtZXNzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAgICAKLSAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLiAKKy8qCisgKiBOYW1lOiBpdWN2X3NlbmQKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4KKyAqICAgICAgICAgIERhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgaXMgaW4gYSBidWZmZXIgYW5kIHRoaXMgaXMgYQorICogICAgICAgICAgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUgcmVjZWl2ZXIgd2lsbCBub3QgcmVwbHkgdG8gdGhlCisgKiAgICAgICAgICBtZXNzYWdlLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KKyAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2Ygc2VuZCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiBzZW5kIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2Ygc2VuZCBidWZmZXIuCisgKiAgICAgICAgYnVmbGVuIC0gTGVuZ3RoIG9mIHNlbmQgYnVmZmVyLgorICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCisgKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBhZGRyZXNzIGlzIE5VTEwuCiAqLwogaW50IGl1Y3Zfc2VuZCAodTE2IHBhdGhpZCwKIAkgICAgICAgdTMyICogbXNnaWQsCiAJICAgICAgIHUzMiB0cmdjbHMsCiAJICAgICAgIHUzMiBzcmNjbHMsIHUzMiBtc2d0YWcsIGludCBmbGFnczEsIHZvaWQgKmJ1ZmZlciwgdWxvbmcgYnVmbGVuKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3NlbmRfYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4gICAgIAotICogICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgYXJyYXkgb2YgICAgCi0gKiAgICAgICAgICBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgb2YgZGlzY29udGlndW91cyBidWZmZXJzIHRoYXQgaG9sZCAKLSAqICAgICAgICAgIHRoZSBtZXNzYWdlIHRleHQuIFRoaXMgaXMgYSBvbmUtd2F5IG1lc3NhZ2UgYW5kIHRoZSAgICAgIAotICogICAgICAgICAgcmVjZWl2ZXIgd2lsbCBub3QgcmVwbHkgdG8gdGhlIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4gICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9zZW5kX2FycmF5CisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgKiAgICAgICAgICBUaGUgY29udGVudHMgb2YgYnVmZmVyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBhcnJheSBvZgorICogICAgICAgICAgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIGRpc2NvbnRpZ3VvdXMgYnVmZmVycyB0aGF0IGhvbGQKKyAqICAgICAgICAgIHRoZSBtZXNzYWdlIHRleHQuIFRoaXMgaXMgYSBvbmUtd2F5IG1lc3NhZ2UgYW5kIHRoZQorICogICAgICAgICAgcmVjZWl2ZXIgd2lsbCBub3QgcmVwbHkgdG8gdGhlIG1lc3NhZ2UuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4KKyAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLgogICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGh0IHRoZSBtZXNzYWdlLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KLSAqICAgICAgICAgIElQUFJUWS0gc3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4gCi0gKiAgICAgICAgYnVmZmVyIC0gQWRkcmVzcyBvZiBhcnJheSBvZiBzZW5kIGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYnVmbGVuIC0gVG90YWwgbGVuZ3RoIG9mIHNlbmQgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgICBJUFBSVFktIHNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCisgKiAgICAgICAgYnVmZmVyIC0gQWRkcmVzcyBvZiBhcnJheSBvZiBzZW5kIGJ1ZmZlcnMuCisgKiAgICAgICAgYnVmbGVuIC0gVG90YWwgbGVuZ3RoIG9mIHNlbmQgYnVmZmVycy4KKyAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3NlbmRfYXJyYXkgKHUxNiBwYXRoaWQsCiAJCSAgICAgdTMyICogbXNnaWQsCkBAIC02NzUsNDggKzY3NSw0OCBAQAogCQkgICAgIHUzMiBtc2d0YWcsCiAJCSAgICAgaW50IGZsYWdzMSwgaXVjdl9hcnJheV90ICogYnVmZmVyLCB1bG9uZyBidWZsZW4pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9zZW5kX3BybW1zZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4gICAgICAgCi0gKiAgICAgICAgICBQcm1tc2cgc3BlY2lmaWVzIHRoYXQgdGhlIDgtYnl0ZXMgb2YgZGF0YSBhcmUgdG8gYmUgbW92ZWQgIAotICogICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuIFRoaXMgaXMgYSBvbmUtd2F5IG1lc3NhZ2UgYW5kIHRoZSAKLSAqICAgICAgICAgIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZSBtZXNzYWdlLiAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4gICAKKy8qCisgKiBOYW1lOiBpdWN2X3NlbmRfcHJtbXNnCisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgKiAgICAgICAgICBQcm1tc2cgc3BlY2lmaWVzIHRoYXQgdGhlIDgtYnl0ZXMgb2YgZGF0YSBhcmUgdG8gYmUgbW92ZWQKKyAqICAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBsaXN0LiBUaGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUKKyAqICAgICAgICAgIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZSBtZXNzYWdlLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KKyAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBzcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW50byBwYXJhbWV0ZXIgbGlzdC4gICAgCi0gKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqICAgICAgICBwcm1tc2cgLSA4LWJ5dGVzIG9mIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gcGFyYW1ldGVyIGxpc3QuCisgKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KICovCiBpbnQgaXVjdl9zZW5kX3BybW1zZyAodTE2IHBhdGhpZCwKIAkJICAgICAgdTMyICogbXNnaWQsCiAJCSAgICAgIHUzMiB0cmdjbHMsCiAJCSAgICAgIHUzMiBzcmNjbHMsIHUzMiBtc2d0YWcsIGludCBmbGFnczEsIHVjaGFyIHBybW1zZ1s4XSk7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9zZW5kMndheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAKLSAqICAgICAgICAgIERhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgaXMgaW4gYSBidWZmZXIuIFRoZSByZWNlaXZlciAgIAotICogICAgICAgICAgb2YgdGhlIHNlbmQgaXMgZXhwZWN0ZWQgdG8gcmVwbHkgdG8gdGhlIG1lc3NhZ2UgYW5kICAgCi0gKiAgICAgICAgICBhIGJ1ZmZlciBpcyBwcm92aWRlZCBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5ICAKLSAqICAgICAgICAgIHRvIHRoaXMgbWVzc2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuICAgICAgICAgICAgIAotICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuICAgIAorLyoKKyAqIE5hbWU6IGl1Y3Zfc2VuZDJ3YXkKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4KKyAqICAgICAgICAgIERhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgaXMgaW4gYSBidWZmZXIuIFRoZSByZWNlaXZlcgorICogICAgICAgICAgb2YgdGhlIHNlbmQgaXMgZXhwZWN0ZWQgdG8gcmVwbHkgdG8gdGhlIG1lc3NhZ2UgYW5kCisgKiAgICAgICAgICBhIGJ1ZmZlciBpcyBwcm92aWRlZCBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5CisgKiAgICAgICAgICB0byB0aGlzIG1lc3NhZ2UuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4KKyAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLgorICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuCiAgKiAgICAgICAgZmxhZ3MxIC0gT3B0aW9uIGZvciBwYXRoLgogICogICAgICAgICAgSVBQUlRZLSAweDIwIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCi0gKiAgICAgICAgYnVmZmVyIC0gQWRkcmVzcyBvZiBzZW5kIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYnVmbGVuIC0gTGVuZ3RoIG9mIHNlbmQgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYW5zYnVmIC0gQWRkcmVzcyBvZiBidWZmZXIgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSBvZiAKLSAqICAgICAgICAgICAgICAgICB0aGlzIG1lc3NhZ2UuICAgICAgICAKLSAqICAgICAgICBhbnNsZW4gLSBBZGRyZXNzIG9mIGxlbmd0aCBvZiBidWZmZXIuICAgICAgICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIG9yIGFuc2J1ZiBhZGRyZXNzIGlzIE5VTEwuICAgIAorICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2Ygc2VuZCBidWZmZXIuCisgKiAgICAgICAgYnVmbGVuIC0gTGVuZ3RoIG9mIHNlbmQgYnVmZmVyLgorICogICAgICAgIGFuc2J1ZiAtIEFkZHJlc3Mgb2YgYnVmZmVyIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgb2YKKyAqICAgICAgICAgICAgICAgICB0aGlzIG1lc3NhZ2UuCisgKiAgICAgICAgYW5zbGVuIC0gQWRkcmVzcyBvZiBsZW5ndGggb2YgYnVmZmVyLgorICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCisgKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBvciBhbnNidWYgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3NlbmQyd2F5ICh1MTYgcGF0aGlkLAogCQkgICB1MzIgKiBtc2dpZCwKQEAgLTcyNiwyOCArNzI2LDI4IEBACiAJCSAgIGludCBmbGFnczEsCiAJCSAgIHZvaWQgKmJ1ZmZlciwgdWxvbmcgYnVmbGVuLCB2b2lkICphbnNidWYsIHVsb25nIGFuc2xlbik7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZDJ3YXlfYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4gICAgICAKLSAqICAgICAgICAgIFRoZSBjb250ZW50cyBvZiBidWZmZXIgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFycmF5IG9mICAgICAKLSAqICAgICAgICAgIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiBkaXNjb250aWd1b3VzIGJ1ZmZlcnMgdGhhdCBob2xkICAKLSAqICAgICAgICAgIHRoZSBtZXNzYWdlIHRleHQuIFRoZSByZWNlaXZlciBvZiB0aGUgc2VuZCBpcyBleHBlY3RlZCB0byAKLSAqICAgICAgICAgIHJlcGx5IHRvIHRoZSBtZXNzYWdlIGFuZCBhIGJ1ZmZlciBpcyBwcm92aWRlZCBpbnRvIHdoaWNoICAKLSAqICAgICAgICAgIElVQ1YgbW92ZXMgdGhlIHJlcGx5IHRvIHRoaXMgbWVzc2FnZS4gICAgICAgICAgICAgICAgICAgICAKLSAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLiAgIAorLyoKKyAqIE5hbWU6IGl1Y3Zfc2VuZDJ3YXlfYXJyYXkKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4KKyAqICAgICAgICAgIFRoZSBjb250ZW50cyBvZiBidWZmZXIgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFycmF5IG9mCisgKiAgICAgICAgICBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgb2YgZGlzY29udGlndW91cyBidWZmZXJzIHRoYXQgaG9sZAorICogICAgICAgICAgdGhlIG1lc3NhZ2UgdGV4dC4gVGhlIHJlY2VpdmVyIG9mIHRoZSBzZW5kIGlzIGV4cGVjdGVkIHRvCisgKiAgICAgICAgICByZXBseSB0byB0aGUgbWVzc2FnZSBhbmQgYSBidWZmZXIgaXMgcHJvdmlkZWQgaW50byB3aGljaAorICogICAgICAgICAgSVVDViBtb3ZlcyB0aGUgcmVwbHkgdG8gdGhpcyBtZXNzYWdlLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KKyAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIGJ1ZmZlciAtIFNkZHJlc3Mgb2YgYXJyYXkgb2Ygc2VuZCBidWZmZXJzLiAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBidWZsZW4gLSBUb3RhbCBsZW5ndGggb2Ygc2VuZCBidWZmZXJzLiAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYW5zYnVmIC0gQWRkcmVzcyBvZiBhcnJheSBvZiBidWZmZXIgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSAgICAgICAgICAgIAotICogICAgICAgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYW5zbGVuIC0gQWRkcmVzcyBvZiBsZW5ndGggcmVwbHkgYnVmZmVycy4gICAgICAgICAgICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgIGJ1ZmZlciAtIFNkZHJlc3Mgb2YgYXJyYXkgb2Ygc2VuZCBidWZmZXJzLgorICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiBzZW5kIGJ1ZmZlcnMuCisgKiAgICAgICAgYW5zYnVmIC0gQWRkcmVzcyBvZiBhcnJheSBvZiBidWZmZXIgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseQorICogICAgICAgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZS4KKyAqICAgICAgICBhbnNsZW4gLSBBZGRyZXNzIG9mIGxlbmd0aCByZXBseSBidWZmZXJzLgorICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCisgKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBhZGRyZXNzIGlzIE5VTEwuCiAqLwogaW50IGl1Y3Zfc2VuZDJ3YXlfYXJyYXkgKHUxNiBwYXRoaWQsCiAJCQkgdTMyICogbXNnaWQsCkBAIC03NTgsMjcgKzc1OCwyNyBAQAogCQkJIGl1Y3ZfYXJyYXlfdCAqIGJ1ZmZlciwKIAkJCSB1bG9uZyBidWZsZW4sIGl1Y3ZfYXJyYXlfdCAqIGFuc2J1ZiwgdWxvbmcgYW5zbGVuKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZDJ3YXlfcHJtbXNnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAgICAgIAotICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkICAKLSAqICAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBsaXN0LiBUaGlzIGlzIGEgdHdvLXdheSBtZXNzYWdlIGFuZCB0aGUgCi0gKiAgICAgICAgICByZWNlaXZlciBvZiB0aGUgbWVzc2FnZSBpcyBleHBlY3RlZCB0byByZXBseS4gQSBidWZmZXIgICAgIAotICogICAgICAgICAgaXMgcHJvdmlkZWQgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSB0byB0aGlzICAgICAgICAKLSAqICAgICAgICAgIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUmF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4gICAKKy8qCisgKiBOYW1lOiBpdWN2X3NlbmQyd2F5X3BybW1zZworICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLgorICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkCisgKiAgICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gVGhpcyBpcyBhIHR3by13YXkgbWVzc2FnZSBhbmQgdGhlCisgKiAgICAgICAgICByZWNlaXZlciBvZiB0aGUgbWVzc2FnZSBpcyBleHBlY3RlZCB0byByZXBseS4gQSBidWZmZXIKKyAqICAgICAgICAgIGlzIHByb3ZpZGVkIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgdG8gdGhpcworICogICAgICAgICAgbWVzc2FnZS4KKyAqIElucHV0OiBwYXRoaWQgLSBSYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCiAgKiAgICAgICAgICBJUFBSVFktIDB4MjAgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBwcm1tc2cgLSA4LWJ5dGVzIG9mIGRhdGEgdG8gYmUgcGxhY2VkIGluIHBhcmFtZXRlciBsaXN0LiAgICAgIAotICogICAgICAgIGFuc2J1ZiAtIEFkZHJlc3Mgb2YgYnVmZmVyIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgb2YgICAgCisgKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbiBwYXJhbWV0ZXIgbGlzdC4KKyAqICAgICAgICBhbnNidWYgLSBBZGRyZXNzIG9mIGJ1ZmZlciBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IG9mCiAgKiAgICAgICAgICAgICAgICAgdGhpcyBtZXNzYWdlLgotICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIG9mIGJ1ZmZlci4gICAgICAgICAgICAgICAKLSAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLiAgICAgICAgIAorICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIG9mIGJ1ZmZlci4KKyAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3NlbmQyd2F5X3BybW1zZyAodTE2IHBhdGhpZCwKIAkJCSAgdTMyICogbXNnaWQsCkBAIC03ODgsMjkgKzc4OCwyOSBAQAogCQkJICB1bG9uZyBmbGFnczEsCiAJCQkgIHVjaGFyIHBybW1zZ1s4XSwgdm9pZCAqYW5zYnVmLCB1bG9uZyBhbnNsZW4pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZDJ3YXlfcHJtbXNnX2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLiAgICAgICAgCi0gKiAgICAgICAgICBQcm1tc2cgc3BlY2lmaWVzIHRoYXQgdGhlIDgtYnl0ZXMgb2YgZGF0YSBhcmUgdG8gYmUgbW92ZWQgICAKLSAqICAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBsaXN0LiBUaGlzIGlzIGEgdHdvLXdheSBtZXNzYWdlIGFuZCB0aGUgIAotICogICAgICAgICAgcmVjZWl2ZXIgb2YgdGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gcmVwbHkuIEEgYnVmZmVyICAgICAgCi0gKiAgICAgICAgICBpcyBwcm92aWRlZCBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IHRvIHRoaXMgICAgICAgICAKLSAqICAgICAgICAgIG1lc3NhZ2UuIFRoZSBjb250ZW50cyBvZiBhbnNidWYgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlICAgICAgIAotICogICAgICAgICAgYXJyYXkgb2YgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIGRpc2NvbnRpZ3VvdXMgYnVmZmVycyAgICAgCi0gKiAgICAgICAgICB0aGF0IGNvbnRhaW4gdGhlIHJlcGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLiAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3NlbmQyd2F5X3BybW1zZ19hcnJheQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLgorICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkCisgKiAgICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gVGhpcyBpcyBhIHR3by13YXkgbWVzc2FnZSBhbmQgdGhlCisgKiAgICAgICAgICByZWNlaXZlciBvZiB0aGUgbWVzc2FnZSBpcyBleHBlY3RlZCB0byByZXBseS4gQSBidWZmZXIKKyAqICAgICAgICAgIGlzIHByb3ZpZGVkIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgdG8gdGhpcworICogICAgICAgICAgbWVzc2FnZS4gVGhlIGNvbnRlbnRzIG9mIGFuc2J1ZiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAqICAgICAgICAgIGFycmF5IG9mIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiBkaXNjb250aWd1b3VzIGJ1ZmZlcnMKKyAqICAgICAgICAgIHRoYXQgY29udGFpbiB0aGUgcmVwbHkuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4KKyAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLgorICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuCiAgKiAgICAgICAgZmxhZ3MxIC0gT3B0aW9uIGZvciBwYXRoLgogICogICAgICAgICAgSVBQUlRZLSAweDIwIHNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCi0gKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gCisgKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4KICAqICAgICAgICBhbnNidWYgLSBBZGRyZXNzIG9mIGFycmF5IG9mIGJ1ZmZlciBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5Ci0gKiAgICAgICAgICAgICAgICAgb2YgdGhpcyBtZXNzYWdlLiAgCi0gKiAgICAgICAgYW5zbGVuIC0gQWRkcmVzcyBvZiBsZW5ndGggb2YgcmVwbHkgYnVmZmVycy4gICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQW5zYnVmIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAgCisgKiAgICAgICAgICAgICAgICAgb2YgdGhpcyBtZXNzYWdlLgorICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIG9mIHJlcGx5IGJ1ZmZlcnMuCisgKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gQW5zYnVmIGFkZHJlc3MgaXMgTlVMTC4KICovCiBpbnQgaXVjdl9zZW5kMndheV9wcm1tc2dfYXJyYXkgKHUxNiBwYXRoaWQsCiAJCQkJdTMyICogbXNnaWQsCkBAIC04MjEsMjkgKzgyMSwyOSBAQAogCQkJCXVjaGFyIHBybW1zZ1s4XSwKIAkJCQlpdWN2X2FycmF5X3QgKiBhbnNidWYsIHVsb25nIGFuc2xlbik7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9zZXRtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZvbGxvd2luZyBJVUNWICAgICAKLSAqICAgICAgICAgIGV4dGVybmFsIGludGVycnVwdGlvbnM6IE5vbnByaW9yaXR5IGFuZCBwcmlvcml0eSBtZXNzYWdlIAotICogICAgICAgICAgaW50ZXJydXB0cywgbm9ucHJpb3JpdHkgYW5kIHByaW9yaXR5IHJlcGx5IGludGVycnVwdHMuICAgCisvKgorICogTmFtZTogaXVjdl9zZXRtYXNrCisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZvbGxvd2luZyBJVUNWCisgKiAgICAgICAgICBleHRlcm5hbCBpbnRlcnJ1cHRpb25zOiBOb25wcmlvcml0eSBhbmQgcHJpb3JpdHkgbWVzc2FnZQorICogICAgICAgICAgaW50ZXJydXB0cywgbm9ucHJpb3JpdHkgYW5kIHByaW9yaXR5IHJlcGx5IGludGVycnVwdHMuCiAgKiBJbnB1dDogU2V0TWFza0ZsYWcgLSBvcHRpb25zIGZvciBpbnRlcnJ1cHRzCi0gKiAgICAgICAgICAgMHg4MCAtIE5vbnByaW9yaXR5X01lc3NhZ2VQZW5kaW5nSW50ZXJydXB0c0ZsYWcgICAgICAgICAKLSAqICAgICAgICAgICAweDQwIC0gUHJpb3JpdHlfTWVzc2FnZVBlbmRpbmdJbnRlcnJ1cHRzRmxhZyAgICAgICAgICAgIAotICogICAgICAgICAgIDB4MjAgLSBOb25wcmlvcml0eV9NZXNzYWdlQ29tcGxldGlvbkludGVycnVwdHNGbGFnICAgICAgCi0gKiAgICAgICAgICAgMHgxMCAtIFByaW9yaXR5X01lc3NhZ2VDb21wbGV0aW9uSW50ZXJydXB0c0ZsYWcgICAgICAgICAKKyAqICAgICAgICAgICAweDgwIC0gTm9ucHJpb3JpdHlfTWVzc2FnZVBlbmRpbmdJbnRlcnJ1cHRzRmxhZworICogICAgICAgICAgIDB4NDAgLSBQcmlvcml0eV9NZXNzYWdlUGVuZGluZ0ludGVycnVwdHNGbGFnCisgKiAgICAgICAgICAgMHgyMCAtIE5vbnByaW9yaXR5X01lc3NhZ2VDb21wbGV0aW9uSW50ZXJydXB0c0ZsYWcKKyAqICAgICAgICAgICAweDEwIC0gUHJpb3JpdHlfTWVzc2FnZUNvbXBsZXRpb25JbnRlcnJ1cHRzRmxhZwogICogICAgICAgICAgIDB4MDggLSBJVUNWQ29udHJvbEludGVycnVwdHNGbGFnCi0gKiBPdXRwdXQ6IE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgIAorICogT3V0cHV0OiBOQQorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KICovCiBpbnQgaXVjdl9zZXRtYXNrIChpbnQgU2V0TWFza0ZsYWcpOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3NldmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgYW4gSVVDViBwYXRoLiAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgIAotICogICAgICAgIHVzZXJfZGF0YSAtIDE2LWJ5dGVzIG9mIHVzZXIgZGF0YS4gICAgICAgICAKLSAqIE91dHB1dDogTkEgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIEludGVyYWwgZXJyb3IsIHdpbGQgcG9pbnRlci4gICAgICAgCisvKgorICogTmFtZTogaXVjdl9zZXZlcgorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIGFuIElVQ1YgcGF0aC4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB1c2VyX2RhdGEgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEuCisgKiBPdXRwdXQ6IE5BCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBJbnRlcmFsIGVycm9yLCB3aWxkIHBvaW50ZXIuCiAqLwogaW50IGl1Y3Zfc2V2ZXIgKHUxNiBwYXRoaWQsIHVjaGFyIHVzZXJfZGF0YVsxNl0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggZWRjZjA1ZC4uZjk0NDE5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC02OCw2ICs2OCw3IEBACiBzdGF0aWMgdm9pZCBsY3Nfc3RhcnRfa2VybmVsX3RocmVhZChzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQpOwogc3RhdGljIHZvaWQgbGNzX2dldF9mcmFtZXNfY2Ioc3RydWN0IGxjc19jaGFubmVsICosIHN0cnVjdCBsY3NfYnVmZmVyICopOwogc3RhdGljIGludCBsY3Nfc2VuZF9kZWxpcG0oc3RydWN0IGxjc19jYXJkICosIHN0cnVjdCBsY3NfaXBtX2xpc3QgKik7CitzdGF0aWMgaW50IGxjc19yZWNvdmVyeSh2b2lkICpwdHIpOwogCiAvKioKICAqIERlYnVnIEZhY2lsaXR5IFN0dWZmCkBAIC00MjksMTIgKzQzMCw2IEBACiAJY2FyZC0+dHhfYnVmZmVyID0gTlVMTDsKIAljYXJkLT50eF9lbWl0dGVkID0gMDsKIAotCS8qIEluaXRpYWxpemUga2VybmVsIHRocmVhZCB0YXNrIHVzZWQgZm9yIExHVyBjb21tYW5kcy4gKi8KLQlJTklUX1dPUksoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlciwKLQkJICAodm9pZCAqKWxjc19zdGFydF9rZXJuZWxfdGhyZWFkLGNhcmQpOwotCWNhcmQtPnRocmVhZF9zdGFydF9tYXNrID0gMDsKLQljYXJkLT50aHJlYWRfYWxsb3dlZF9tYXNrID0gMDsKLQljYXJkLT50aHJlYWRfcnVubmluZ19tYXNrID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT53YWl0X3EpOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+aXBtX2xvY2spOwpAQCAtMTE1MCw4ICsxMTQ1LDYgQEAKIAkJbGlzdF9hZGRfdGFpbCgmaXBtLT5saXN0LCAmY2FyZC0+aXBtX2xpc3QpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcG1fbG9jaywgZmxhZ3MpOwotCWlmIChjYXJkLT5zdGF0ZSA9PSBERVZfU1RBVEVfVVApCi0JCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0xMjM0LDE3ICsxMjI3LDE3IEBACiAJCWlmIChpcG0gIT0gTlVMTCkKIAkJCWNvbnRpbnVlOwkvKiBBZGRyZXNzIGFscmVhZHkgaW4gbGlzdC4gKi8KIAkJaXBtID0gKHN0cnVjdCBsY3NfaXBtX2xpc3QgKikKLQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsY3NfaXBtX2xpc3QpLCBHRlBfQVRPTUlDKTsKKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsY3NfaXBtX2xpc3QpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGlwbSA9PSBOVUxMKSB7CiAJCQlQUklOVF9JTkZPKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBhZGQgIgogCQkJCSAgICJuZXcgbXVsdGljYXN0IGVudHJ5IVxuIik7CiAJCQlicmVhazsKIAkJfQotCQltZW1zZXQoaXBtLCAwLCBzaXplb2Yoc3RydWN0IGxjc19pcG1fbGlzdCkpOwogCQltZW1jcHkoJmlwbS0+aXBtLm1hY19hZGRyLCBidWYsIExDU19NQUNfTEVOR1RIKTsKIAkJaXBtLT5pcG0uaXBfYWRkciA9IGltNC0+bXVsdGlhZGRyOwogCQlpcG0tPmlwbV9zdGF0ZSA9IExDU19JUE1fU1RBVEVfU0VUX1JFUVVJUkVEOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBtX2xvY2ssIGZsYWdzKTsKKwkJTENTX0RCRl9IRVgoMix0cmFjZSwmaXBtLT5pcG0uaXBfYWRkciw0KTsKIAkJbGlzdF9hZGQoJmlwbS0+bGlzdCwgJmNhcmQtPmlwbV9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBtX2xvY2ssIGZsYWdzKTsKIAl9CkBAIC0xMjcyLDcgKzEyNjUsMTUgQEAKIAlyZWFkX3VubG9jaygmaW40X2Rldi0+bWNfbGlzdF9sb2NrKTsKIAlpbl9kZXZfcHV0KGluNF9kZXYpOwogCisJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKKwluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CisJd2FpdF9ldmVudChjYXJkLT53cml0ZS53YWl0X3EsCisJCQkoY2FyZC0+d3JpdGUuc3RhdGUgIT0gQ0hfU1RBVEVfUlVOTklORykpOwogCWxjc19maXhfbXVsdGljYXN0X2xpc3QoY2FyZCk7CisJaWYgKGNhcmQtPnN0YXRlID09IERFVl9TVEFURV9VUCkgeworCQluZXRpZl9jYXJyaWVyX29uKGNhcmQtPmRldik7CisJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKKwl9CiBvdXQ6CiAJbGNzX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCk7CiAJcmV0dXJuIDA7CkBAIC0xMjg5LDcgKzEyOTAsNyBAQAogICAgICAgICBMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJzZXRtdWx0aSIpOwogICAgICAgICBjYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBkZXYtPnByaXY7CiAKLSAgICAgICAgaWYgKCFsY3Nfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgTENTX1NFVF9NQ19USFJFQUQpKSAKKyAgICAgICAgaWYgKCFsY3Nfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgTENTX1NFVF9NQ19USFJFQUQpKQogCQlzY2hlZHVsZV93b3JrKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOwogfQogCkBAIC0xMzIxLDYgKzEzMjIsNTMgQEAKIAlyZXR1cm4gUFRSX0VSUihpcmIpOwogfQogCitzdGF0aWMgaW50CitsY3NfZ2V0X3Byb2JsZW0oc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwlpbnQgZHN0YXQsIGNzdGF0OworCWNoYXIgKnNlbnNlOworCisJc2Vuc2UgPSAoY2hhciAqKSBpcmItPmVjdzsKKwljc3RhdCA9IGlyYi0+c2Nzdy5jc3RhdDsKKwlkc3RhdCA9IGlyYi0+c2Nzdy5kc3RhdDsKKworCWlmIChjc3RhdCAmIChTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLIHwgU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAorCQkgICAgIFNDSE5fU1RBVF9DSE5fREFUQV9DSEsgfCBTQ0hOX1NUQVRfQ0hBSU5fQ0hFQ0sgfAorCQkgICAgIFNDSE5fU1RBVF9QUk9UX0NIRUNLICAgfCBTQ0hOX1NUQVRfUFJPR19DSEVDSykpIHsKKwkJTENTX0RCRl9URVhUKDIsIHRyYWNlLCAiQ0dFTkNISyIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgeworCQlpZiAoc2Vuc2VbTENTX1NFTlNFX0JZVEVfMV0gJgorCQkgICAgTENTX1NFTlNFX1JFU0VUVElOR19FVkVOVCkgeworCQkJTENTX0RCRl9URVhUKDIsIHRyYWNlLCAiUkVWSU5EIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoc2Vuc2VbTENTX1NFTlNFX0JZVEVfMF0gJgorCQkgICAgTENTX1NFTlNFX0NNRF9SRUpFQ1QpIHsKKwkJCUxDU19EQkZfVEVYVCgyLCB0cmFjZSwgIkNNRFJFSiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKCghc2Vuc2VbTENTX1NFTlNFX0JZVEVfMF0pICYmCisJCSAgICAoIXNlbnNlW0xDU19TRU5TRV9CWVRFXzFdKSAmJgorCQkgICAgKCFzZW5zZVtMQ1NfU0VOU0VfQllURV8yXSkgJiYKKwkJICAgICghc2Vuc2VbTENTX1NFTlNFX0JZVEVfM10pKSB7CisJCQlMQ1NfREJGX1RFWFQoMiwgdHJhY2UsICJaRVJPU0VOIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlMQ1NfREJGX1RFWFQoMiwgdHJhY2UsICJER0VOQ0hLIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZAorbGNzX3NjaGVkdWxlX3JlY292ZXJ5KHN0cnVjdCBsY3NfY2FyZCAqY2FyZCkKK3sKKwlMQ1NfREJGX1RFWFQoMiwgdHJhY2UsICJzdGFydHJlYyIpOworCWlmICghbGNzX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQorCQlzY2hlZHVsZV93b3JrKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOworfQogCiAvKioKICAqIElSUSBIYW5kbGVyIGZvciBMQ1MgY2hhbm5lbHMKQEAgLTEzMzAsNyArMTM3OCw4IEBACiB7CiAJc3RydWN0IGxjc19jYXJkICpjYXJkOwogCXN0cnVjdCBsY3NfY2hhbm5lbCAqY2hhbm5lbDsKLQlpbnQgaW5kZXg7CisJaW50IHJjLCBpbmRleDsKKwlpbnQgY3N0YXQsIGRzdGF0OwogCiAJaWYgKGxjc19jaGVja19pcmJfZXJyb3IoY2RldiwgaXJiKSkKIAkJcmV0dXJuOwpAQCAtMTM0MSwxNyArMTM5MCwzMCBAQAogCWVsc2UKIAkJY2hhbm5lbCA9ICZjYXJkLT53cml0ZTsKIAorCWNzdGF0ID0gaXJiLT5zY3N3LmNzdGF0OworCWRzdGF0ID0gaXJiLT5zY3N3LmRzdGF0OwogCUxDU19EQkZfVEVYVF8oNSwgdHJhY2UsICJSaW50JXMiLGNkZXYtPmRldi5idXNfaWQpOwogCUxDU19EQkZfVEVYVF8oNSwgdHJhY2UsICIlNHglNHgiLGlyYi0+c2Nzdy5jc3RhdCwgaXJiLT5zY3N3LmRzdGF0KTsKIAlMQ1NfREJGX1RFWFRfKDUsIHRyYWNlLCAiJTR4JTR4IixpcmItPnNjc3cuZmN0bCwgaXJiLT5zY3N3LmFjdGwpOwogCisJLyogQ2hlY2sgZm9yIGNoYW5uZWwgYW5kIGRldmljZSBlcnJvcnMgcHJlc2VudGVkICovCisJcmMgPSBsY3NfZ2V0X3Byb2JsZW0oY2RldiwgaXJiKTsKKwlpZiAocmMgfHwgKGRzdGF0ICYgREVWX1NUQVRfVU5JVF9FWENFUCkpIHsKKwkJUFJJTlRfV0FSTigiY2hlY2sgb24gZGV2aWNlICVzLCBkc3RhdD0weCVYLCBjc3RhdD0weCVYIFxuIiwKKwkJCSAgICBjZGV2LT5kZXYuYnVzX2lkLCBkc3RhdCwgY3N0YXQpOworCQlpZiAocmMpIHsKKwkJCWxjc19zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKKwkJCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7CisJCQlyZXR1cm47CisJCX0KKwl9CiAJLyogSG93IGZhciBpbiB0aGUgY2N3IGNoYWluIGhhdmUgd2UgcHJvY2Vzc2VkPyAqLwogCWlmICgoY2hhbm5lbC0+c3RhdGUgIT0gQ0hfU1RBVEVfSU5JVCkgJiYKIAkgICAgKGlyYi0+c2Nzdy5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpKSB7Ci0JCWluZGV4ID0gKHN0cnVjdCBjY3cxICopIF9fdmEoKGFkZHJfdCkgaXJiLT5zY3N3LmNwYSkgCisJCWluZGV4ID0gKHN0cnVjdCBjY3cxICopIF9fdmEoKGFkZHJfdCkgaXJiLT5zY3N3LmNwYSkKIAkJCS0gY2hhbm5lbC0+Y2N3czsKIAkJaWYgKChpcmItPnNjc3cuYWN0bCAmIFNDU1dfQUNUTF9TVVNQRU5ERUQpIHx8Ci0JCSAgICAoaXJiLT5zY3N3LmNzdGF0IHwgU0NITl9TVEFUX1BDSSkpCisJCSAgICAoaXJiLT5zY3N3LmNzdGF0ICYgU0NITl9TVEFUX1BDSSkpCiAJCQkvKiBCbG9vZHkgaW8gc3Vic3lzdGVtIHRlbGxzIHVzIGxpZXMgYWJvdXQgY3BhLi4uICovCiAJCQlpbmRleCA9IChpbmRleCAtIDEpICYgKExDU19OVU1fQlVGRlMgLSAxKTsKIAkJd2hpbGUgKGNoYW5uZWwtPmlvX2lkeCAhPSBpbmRleCkgewpAQCAtMTM3MCw3ICsxNDMyLDYgQEAKIAllbHNlIGlmIChpcmItPnNjc3cuYWN0bCAmIFNDU1dfQUNUTF9TVVNQRU5ERUQpCiAJCS8qIENDVyBleGVjdXRpb24gc3RvcHBlZCBvbiBhIHN1c3BlbmQgYml0LiAqLwogCQljaGFubmVsLT5zdGF0ZSA9IENIX1NUQVRFX1NVU1BFTkRFRDsKLQogCWlmIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9IQUxUX0ZVTkMpIHsKIAkJaWYgKGlyYi0+c2Nzdy5jYyAhPSAwKSB7CiAJCQljY3dfZGV2aWNlX2hhbHQoY2hhbm5lbC0+Y2N3ZGV2LCAoYWRkcl90KSBjaGFubmVsKTsKQEAgLTEzNzksNyArMTQ0MCw2IEBACiAJCS8qIFRoZSBjaGFubmVsIGhhcyBiZWVuIHN0b3BwZWQgYnkgaGFsdF9JTy4gKi8KIAkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9IQUxURUQ7CiAJfQotCiAJaWYgKGlyYi0+c2Nzdy5mY3RsICYgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpIHsKIAkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9DTEVBUkVEOwogCX0KQEAgLTE0NTUsNyArMTUxNSw3IEBACiAJbGNzX3JlbGVhc2VfYnVmZmVyKGNoYW5uZWwsIGJ1ZmZlcik7CiAJY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikKIAkJKChjaGFyICopIGNoYW5uZWwgLSBvZmZzZXRvZihzdHJ1Y3QgbGNzX2NhcmQsIHdyaXRlKSk7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoY2FyZC0+ZGV2KSkKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChjYXJkLT5kZXYpICYmIG5ldGlmX2NhcnJpZXJfb2soY2FyZC0+ZGV2KSkKIAkJbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOwogCXNwaW5fbG9jaygmY2FyZC0+bG9jayk7CiAJY2FyZC0+dHhfZW1pdHRlZC0tOwpAQCAtMTQ5MSw2ICsxNTUxLDEwIEBACiAJCWNhcmQtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7CiAJc3Bpbl9sb2NrKCZjYXJkLT5sb2NrKTsKIAlpZiAoY2FyZC0+dHhfYnVmZmVyICE9IE5VTEwgJiYKQEAgLTE2MzYsMzAgKzE3MDAsNiBAQAogfQogCiAvKioKLSAqIHJlc2V0IGNhcmQKLSAqLwotc3RhdGljIGludAotbGNzX3Jlc2V0Y2FyZChzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJldHJpZXM7Ci0KLQlMQ1NfREJGX1RFWFQoMiwgdHJhY2UsICJyZXNjYXJkIik7Ci0JZm9yIChyZXRyaWVzID0gMDsgcmV0cmllcyA8IDEwOyByZXRyaWVzKyspIHsKLQkJaWYgKGxjc19kZXRlY3QoY2FyZCkgPT0gMCkgewotCQkJbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOwotCQkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7Ci0JCQlQUklOVF9JTkZPKCJMQ1MgZGV2aWNlICVzIHN1Y2Nlc3NmdWxseSByZXN0YXJ0ZWQhXG4iLAotCQkJCSAgIGNhcmQtPmRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQltc2xlZXAoMzAwMCk7Ci0JfQotCVBSSU5UX0VSUigiRXJyb3IgaW4gUmVzZXRpbmcgTENTIGNhcmQhXG4iKTsKLQlyZXR1cm4gLUVJTzsKLX0KLQotCi0vKioKICAqIExDUyBTdG9wIGNhcmQKICAqLwogc3RhdGljIGludApAQCAtMTY4MywxMjYgKzE3MjMsMTggQEAKIH0KIAogLyoqCi0gKiBMR1cgaW5pdGlhdGVkIGNvbW1hbmRzCi0gKi8KLXN0YXRpYyBpbnQKLWxjc19sZ3dfc3RhcnRsYW5fdGhyZWFkKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGxjc19jYXJkICpjYXJkOwotCi0JY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGF0YTsKLQlkYWVtb25pemUoImxnd3N0cGxuIik7Ci0KLQlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TVEFSVExBTl9USFJFQUQpKQotCQlyZXR1cm4gMDsKLQlMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJsZ3dzdHBsbiIpOwotCWlmIChjYXJkLT5kZXYpCi0JCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKLQlpZiAobGNzX3N0YXJ0bGFuKGNhcmQpID09IDApIHsKLQkJbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOwotCQljYXJkLT5zdGF0ZSA9IERFVl9TVEFURV9VUDsKLQkJUFJJTlRfSU5GTygiTENTIFN0YXJ0bGFuIGZvciBkZXZpY2UgJXMgc3VjY2VlZGVkIVxuIiwKLQkJCSAgIGNhcmQtPmRldi0+bmFtZSk7Ci0KLQl9IGVsc2UKLQkJUFJJTlRfRVJSKCJMQ1MgU3RhcnRsYW4gZm9yIGRldmljZSAlcyBmYWlsZWQhXG4iLAotCQkJICBjYXJkLT5kZXYtPm5hbWUpOwotCWxjc19jbGVhcl90aHJlYWRfcnVubmluZ19iaXQoY2FyZCwgTENTX1NUQVJUTEFOX1RIUkVBRCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogU2VuZCBzdGFydHVwIGNvbW1hbmQgaW5pdGlhdGVkIGJ5IExhbiBHYXRld2F5Ci0gKi8KLXN0YXRpYyBpbnQKLWxjc19sZ3dfc3RhcnR1cF90aHJlYWQodm9pZCAqZGF0YSkKLXsKLQlpbnQgcmM7Ci0KLQlzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQ7Ci0KLQljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBkYXRhOwotCWRhZW1vbml6ZSgibGd3c3RhbG4iKTsKLQotCWlmICghbGNzX2RvX3J1bl90aHJlYWQoY2FyZCwgTENTX1NUQVJUVVBfVEhSRUFEKSkKLQkJcmV0dXJuIDA7Ci0JTENTX0RCRl9URVhUKDQsIHRyYWNlLCAibGd3c3RhbG4iKTsKLQlpZiAoY2FyZC0+ZGV2KQotCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7Ci0JcmMgPSBsY3Nfc2VuZF9zdGFydHVwKGNhcmQsIExDU19JTklUSUFUT1JfTEdXKTsKLQlpZiAocmMgIT0gMCkgewotCQlQUklOVF9FUlIoIlN0YXJ0dXAgZm9yIExDUyBkZXZpY2UgJXMgaW5pdGlhdGVkICIgXAotCQkJICAiYnkgTEdXIGZhaWxlZCFcblJlc2V0aW5nIGNhcmQgLi4uXG4iLAotCQkJICBjYXJkLT5kZXYtPm5hbWUpOwotCQkvKiBkbyBhIGNhcmQgcmVzZXQgKi8KLQkJcmMgPSBsY3NfcmVzZXRjYXJkKGNhcmQpOwotCQlpZiAocmMgPT0gMCkKLQkJCWdvdG8gRG9uZTsKLQl9Ci0JcmMgPSBsY3Nfc3RhcnRsYW4oY2FyZCk7Ci0JaWYgKHJjID09IDApIHsKLQkJbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOwotCQljYXJkLT5zdGF0ZSA9IERFVl9TVEFURV9VUDsKLQl9Ci1Eb25lOgotCWlmIChyYyA9PSAwKQotCQlQUklOVF9JTkZPKCJMQ1MgU3RhcnR1cCBmb3IgZGV2aWNlICVzIHN1Y2NlZWRlZCFcbiIsCi0JCQkgICBjYXJkLT5kZXYtPm5hbWUpOwotCWVsc2UKLQkJUFJJTlRfRVJSKCJMQ1MgU3RhcnR1cCBmb3IgZGV2aWNlICVzIGZhaWxlZCFcbiIsCi0JCQkgIGNhcmQtPmRldi0+bmFtZSk7Ci0JbGNzX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChjYXJkLCBMQ1NfU1RBUlRVUF9USFJFQUQpOwotCXJldHVybiAwOwotfQotCi0KLS8qKgotICogc2VuZCBzdG9wbGFuIGNvbW1hbmQgaW5pdGlhdGVkIGJ5IExhbiBHYXRld2F5Ci0gKi8KLXN0YXRpYyBpbnQKLWxjc19sZ3dfc3RvcGxhbl90aHJlYWQodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQ7Ci0JaW50IHJjOwotCi0JY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGF0YTsKLQlkYWVtb25pemUoImxnd3N0b3AiKTsKLQotCWlmICghbGNzX2RvX3J1bl90aHJlYWQoY2FyZCwgTENTX1NUT1BMQU5fVEhSRUFEKSkKLQkJcmV0dXJuIDA7Ci0JTENTX0RCRl9URVhUKDQsIHRyYWNlLCAibGd3c3RvcCIpOwotCWlmIChjYXJkLT5kZXYpCi0JCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKLQlpZiAobGNzX3NlbmRfc3RvcGxhbihjYXJkLCBMQ1NfSU5JVElBVE9SX0xHVykgPT0gMCkKLQkJUFJJTlRfSU5GTygiU3RvcGxhbiBmb3IgJXMgaW5pdGlhdGVkIGJ5IExHVyBzdWNjZWVkZWQhXG4iLAotCQkJICAgY2FyZC0+ZGV2LT5uYW1lKTsKLQllbHNlCi0JCVBSSU5UX0VSUigiU3RvcGxhbiAlcyBpbml0aWF0ZWQgYnkgTEdXIGZhaWxlZCFcbiIsCi0JCQkgIGNhcmQtPmRldi0+bmFtZSk7Ci0JLypUcnkgdG8gcmVzZXQgdGhlIGNhcmQsIHN0b3AgaXQgb24gZmFpbHVyZSAqLwotICAgICAgICByYyA9IGxjc19yZXNldGNhcmQoY2FyZCk7Ci0gICAgICAgIGlmIChyYyAhPSAwKQotICAgICAgICAgICAgICAgIHJjID0gbGNzX3N0b3BjYXJkKGNhcmQpOwotCWxjc19jbGVhcl90aHJlYWRfcnVubmluZ19iaXQoY2FyZCwgTENTX1NUT1BMQU5fVEhSRUFEKTsKLSAgICAgICAgcmV0dXJuIHJjOwotfQotCi0vKioKICAqIEtlcm5lbCBUaHJlYWQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgTEdXIGluaXRpYXRlZCBjb21tYW5kcwogICovCiBzdGF0aWMgdm9pZAogbGNzX3N0YXJ0X2tlcm5lbF90aHJlYWQoc3RydWN0IGxjc19jYXJkICpjYXJkKQogewogCUxDU19EQkZfVEVYVCg1LCB0cmFjZSwgImtybnRocmQiKTsKLQlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfU1RBUlRVUF9USFJFQUQpKQotCQlrZXJuZWxfdGhyZWFkKGxjc19sZ3dfc3RhcnR1cF90aHJlYWQsICh2b2lkICopIGNhcmQsIFNJR0NITEQpOwotCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19TVEFSVExBTl9USFJFQUQpKQotCQlrZXJuZWxfdGhyZWFkKGxjc19sZ3dfc3RhcnRsYW5fdGhyZWFkLCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKLQlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfU1RPUExBTl9USFJFQUQpKQotCQlrZXJuZWxfdGhyZWFkKGxjc19sZ3dfc3RvcGxhbl90aHJlYWQsICh2b2lkICopIGNhcmQsIFNJR0NITEQpOworCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQorCQlrZXJuZWxfdGhyZWFkKGxjc19yZWNvdmVyeSwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKKwkJa2VybmVsX3RocmVhZChsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLAorCQkJCSh2b2lkICopIGNhcmQsIFNJR0NITEQpOwogI2VuZGlmCiB9CiAKQEAgLTE4MTYsMTkgKzE3NDgsMTQgQEAKIAlpZiAoY21kLT5pbml0aWF0b3IgPT0gTENTX0lOSVRJQVRPUl9MR1cpIHsKIAkJc3dpdGNoKGNtZC0+Y21kX2NvZGUpIHsKIAkJY2FzZSBMQ1NfQ01EX1NUQVJUVVA6Ci0JCQlpZiAoIWxjc19zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLAotCQkJCQkJICAgICAgTENTX1NUQVJUVVBfVEhSRUFEKSkKLQkJCQlzY2hlZHVsZV93b3JrKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOwotCQkJYnJlYWs7CiAJCWNhc2UgTENTX0NNRF9TVEFSVExBTjoKLQkJCWlmICghbGNzX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsCi0JCQkJCQkgICAgICBMQ1NfU1RBUlRMQU5fVEhSRUFEKSkKLQkJCQlzY2hlZHVsZV93b3JrKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOworCQkJbGNzX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwogCQkJYnJlYWs7CiAJCWNhc2UgTENTX0NNRF9TVE9QTEFOOgotCQkJaWYgKCFsY3Nfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwKLQkJCQkJCSAgICAgIExDU19TVE9QTEFOX1RIUkVBRCkpCi0JCQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwkJCVBSSU5UX1dBUk4oIlN0b3BsYW4gZm9yICVzIGluaXRpYXRlZCBieSBMR1cuXG4iLAorCQkJCQljYXJkLT5kZXYtPm5hbWUpOworCQkJaWYgKGNhcmQtPmRldikKKwkJCQluZXRpZl9jYXJyaWVyX29mZihjYXJkLT5kZXYpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlQUklOVF9JTkZPKCJVTlJFQ09HTklaRUQgTEdXIENPTU1BTkRcbiIpOwpAQCAtMTk0NCw4ICsxODcxLDExIEBACiAKIAlMQ1NfREJGX1RFWFQoMiwgdHJhY2UsICJzdG9wZGV2Iik7CiAJY2FyZCAgID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBkZXYtPnByaXY7Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwogCWRldi0+ZmxhZ3MgJj0gfklGRl9VUDsKKwl3YWl0X2V2ZW50KGNhcmQtPndyaXRlLndhaXRfcSwKKwkJKGNhcmQtPndyaXRlLnN0YXRlICE9IENIX1NUQVRFX1JVTk5JTkcpKTsKIAlyYyA9IGxjc19zdG9wY2FyZChjYXJkKTsKIAlpZiAocmMpCiAJCVBSSU5UX0VSUigiVHJ5IGl0IGFnYWluIVxuICIpOwpAQCAtMTk3MSw2ICsxOTAxLDcgQEAKIAogCX0gZWxzZSB7CiAJCWRldi0+ZmxhZ3MgfD0gSUZGX1VQOworCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7CiAJfQpAQCAtMjA2MiwxMCArMTk5MywzMSBAQAogCiBERVZJQ0VfQVRUUihsYW5jbWRfdGltZW91dCwgMDY0NCwgbGNzX3RpbWVvdXRfc2hvdywgbGNzX3RpbWVvdXRfc3RvcmUpOwogCitzdGF0aWMgc3NpemVfdAorbGNzX2Rldl9yZWNvdmVyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBsY3NfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7CisJY2hhciAqdG1wOworCWludCBpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2FyZC0+c3RhdGUgIT0gREVWX1NUQVRFX1VQKQorCQlyZXR1cm4gLUVQRVJNOworCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKKwlpZiAoaSA9PSAxKQorCQlsY3Nfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocmVjb3ZlciwgMDIwMCwgTlVMTCwgbGNzX2Rldl9yZWNvdmVyX3N0b3JlKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBsY3NfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfcG9ydG5vLmF0dHIsCiAJJmRldl9hdHRyX3R5cGUuYXR0ciwKIAkmZGV2X2F0dHJfbGFuY21kX3RpbWVvdXQuYXR0ciwKKwkmZGV2X2F0dHJfcmVjb3Zlci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yMTAyLDYgKzIwNTQsMTIgQEAKIAljY3dnZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSBjYXJkOwogCWNjd2dkZXYtPmNkZXZbMF0tPmhhbmRsZXIgPSBsY3NfaXJxOwogCWNjd2dkZXYtPmNkZXZbMV0tPmhhbmRsZXIgPSBsY3NfaXJxOworCWNhcmQtPmdkZXYgPSBjY3dnZGV2OworCUlOSVRfV09SSygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyLAorCQkgICh2b2lkICopIGxjc19zdGFydF9rZXJuZWxfdGhyZWFkLCBjYXJkKTsKKwljYXJkLT50aHJlYWRfc3RhcnRfbWFzayA9IDA7CisJY2FyZC0+dGhyZWFkX2FsbG93ZWRfbWFzayA9IDA7CisJY2FyZC0+dGhyZWFkX3J1bm5pbmdfbWFzayA9IDA7CiAgICAgICAgIHJldHVybiAwOwogfQogCkBAIC0yMjAzLDYgKzIxNjEsNyBAQAogCWlmIChyZWNvdmVyX3N0YXRlID09IERFVl9TVEFURV9SRUNPVkVSKSB7CiAJCWxjc19zZXRfbXVsdGljYXN0X2xpc3QoY2FyZC0+ZGV2KTsKIAkJY2FyZC0+ZGV2LT5mbGFncyB8PSBJRkZfVVA7CisJCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKIAkJbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOwogCQljYXJkLT5zdGF0ZSA9IERFVl9TVEFURV9VUDsKIAl9IGVsc2UgewpAQCAtMjIzMiw3ICsyMTkxLDcgQEAKICAqIGxjc19zaHV0ZG93bl9kZXZpY2UsIGNhbGxlZCB3aGVuIHNldHRpbmcgdGhlIGdyb3VwIGRldmljZSBvZmZsaW5lLgogICovCiBzdGF0aWMgaW50Ci1sY3Nfc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNjd2dkZXYpCitfX2xjc19zaHV0ZG93bl9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2N3Z2RldiwgaW50IHJlY292ZXJ5X21vZGUpCiB7CiAJc3RydWN0IGxjc19jYXJkICpjYXJkOwogCWVudW0gbGNzX2Rldl9zdGF0ZXMgcmVjb3Zlcl9zdGF0ZTsKQEAgLTIyNDIsOSArMjIwMSwxMSBAQAogCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopY2N3Z2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWlmICghY2FyZCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JbGNzX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgMCk7Ci0JaWYgKGxjc193YWl0X2Zvcl90aHJlYWRzKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAocmVjb3ZlcnlfbW9kZSA9PSAwKSB7CisJCWxjc19zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDApOworCQlpZiAobGNzX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgTENTX1NFVF9NQ19USFJFQUQpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CiAJTENTX0RCRl9IRVgoMywgc2V0dXAsICZjYXJkLCBzaXplb2Yodm9pZCopKTsKIAlyZWNvdmVyX3N0YXRlID0gY2FyZC0+c3RhdGU7CiAKQEAgLTIyNTksNiArMjIyMCw0MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitsY3Nfc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNjd2dkZXYpCit7CisJcmV0dXJuIF9fbGNzX3NodXRkb3duX2RldmljZShjY3dnZGV2LCAwKTsKK30KKworLyoqCisgKiBkcml2ZSBsY3MgcmVjb3ZlcnkgYWZ0ZXIgc3RhcnR1cCBhbmQgc3RhcnRsYW4gaW5pdGlhdGVkIGJ5IExhbiBHYXRld2F5CisgKi8KK3N0YXRpYyBpbnQKK2xjc19yZWNvdmVyeSh2b2lkICpwdHIpCit7CisJc3RydWN0IGxjc19jYXJkICpjYXJkOworCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7CisgICAgICAgIGludCByYzsKKworCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIHB0cjsKKwlkYWVtb25pemUoImxjc19yZWNvdmVyIik7CisKKwlMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJyZWNvdmVyMSIpOworCWlmICghbGNzX2RvX3J1bl90aHJlYWQoY2FyZCwgTENTX1JFQ09WRVJZX1RIUkVBRCkpCisJCXJldHVybiAwOworCUxDU19EQkZfVEVYVCg0LCB0cmFjZSwgInJlY292ZXIyIik7CisJZ2RldiA9IGNhcmQtPmdkZXY7CisJUFJJTlRfV0FSTigiUmVjb3Zlcnkgb2YgZGV2aWNlICVzIHN0YXJ0ZWQuLi5cbiIsIGdkZXYtPmRldi5idXNfaWQpOworCXJjID0gX19sY3Nfc2h1dGRvd25fZGV2aWNlKGdkZXYsIDEpOworCXJjID0gbGNzX25ld19kZXZpY2UoZ2Rldik7CisJaWYgKCFyYykKKwkJUFJJTlRfSU5GTygiRGV2aWNlICVzIHN1Y2Nlc3NmdWxseSByZWNvdmVyZWQhXG4iLAorCQkJCWNhcmQtPmRldi0+bmFtZSk7CisJZWxzZQorCQlQUklOVF9JTkZPKCJEZXZpY2UgJXMgY291bGQgbm90IGJlIHJlY292ZXJlZCFcbiIsCisJCQkJY2FyZC0+ZGV2LT5uYW1lKTsKKwlsY3NfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpOworCXJldHVybiAwOworfQorCiAvKioKICAqIGxjc19yZW1vdmVfZGV2aWNlLCBmcmVlIGJ1ZmZlcnMgYW5kIGNhcmQKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuaCBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmgKaW5kZXggMmZhZDVlNC4uOTMxNDM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5oCkBAIC03MywxMyArNzMsMTcgQEAKIC8qKgogICogTENTIHNlbnNlIGJ5dGUgZGVmaW5pdGlvbnMKICAqLworI2RlZmluZSBMQ1NfU0VOU0VfQllURV8wIAkJMAorI2RlZmluZSBMQ1NfU0VOU0VfQllURV8xIAkJMQorI2RlZmluZSBMQ1NfU0VOU0VfQllURV8yIAkJMgorI2RlZmluZSBMQ1NfU0VOU0VfQllURV8zIAkJMwogI2RlZmluZSBMQ1NfU0VOU0VfSU5URVJGQUNFX0RJU0NPTk5FQ1QJMHgwMQogI2RlZmluZSBMQ1NfU0VOU0VfRVFVSVBNRU5UX0NIRUNLCTB4MTAKICNkZWZpbmUgTENTX1NFTlNFX0JVU19PVVRfQ0hFQ0sJCTB4MjAKICNkZWZpbmUgTENTX1NFTlNFX0lOVEVSVkVOVElPTl9SRVFVSVJFRCAweDQwCiAjZGVmaW5lIExDU19TRU5TRV9DTURfUkVKRUNUCQkweDgwCi0jZGVmaW5lIExDU19TRU5TRV9SRVNFVFRJTkdfRVZFTlQJMHgwMDgwCi0jZGVmaW5lIExDU19TRU5TRV9ERVZJQ0VfT05MSU5FCQkweDAwMjAKKyNkZWZpbmUgTENTX1NFTlNFX1JFU0VUVElOR19FVkVOVAkweDgwCisjZGVmaW5lIExDU19TRU5TRV9ERVZJQ0VfT05MSU5FCQkweDIwCiAKIC8qKgogICogTENTIHBhY2tldCB0eXBlIGRlZmluaXRpb25zCkBAIC0xNTIsMTAgKzE1Niw5IEBACiAKIGVudW0gbGNzX3RocmVhZHMgewogCUxDU19TRVRfTUNfVEhSRUFEIAk9IDEsCi0JTENTX1NUQVJUTEFOX1RIUkVBRAk9IDIsCi0JTENTX1NUT1BMQU5fVEhSRUFECT0gNCwKLQlMQ1NfU1RBUlRVUF9USFJFQUQJPSA4LAorCUxDU19SRUNPVkVSWV9USFJFQUQgCT0gMiwKIH07CisKIC8qKgogICogTENTIHN0cnVjdCBkZWNsYXJhdGlvbnMKICAqLwpAQCAtMjg2LDYgKzI4OSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgc2hvcnQgKCpsYW5fdHlwZV90cmFucykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7CiAJc3RydWN0IGxjc19jaGFubmVsIHJlYWQ7CiAJc3RydWN0IGxjc19jaGFubmVsIHdyaXRlOwogCXN0cnVjdCBsY3NfYnVmZmVyICp0eF9idWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCmluZGV4IDI2MGE5M2MuLmI0NTJjYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCkBAIC0zMCw3ICszMCw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCiAgKi8KLQwKKwogI3VuZGVmIERFQlVHCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAoIihDKSAyMDAxIElCTSBDb3Jwb3JhdGlvbiBieSBGcml0eiBFbGZlcnQgKGZlbGZlcnRAbWlsbGVudXguY29tKSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiTGludXggZm9yIFMvMzkwIElVQ1YgbmV0d29yayBkcml2ZXIiKTsKIAotDAorCiAjZGVmaW5lIFBSSU5US19IRUFERVIgIiBpdWN2OiAiICAgICAgIC8qIGZvciBkZWJ1Z2dpbmcgKi8KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG5ldGl1Y3ZfZHJpdmVyID0gewpAQCAtMjAyLDcgKzIwMiw3IEBACiAJKnAgPSAnXDAnOwogCXJldHVybiB0bXA7CiB9Ci0MCisKIC8qKgogICogU3RhdGVzIG9mIHRoZSBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgogICovCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkiQ29ubmVjdGlvbiB1cCIsCiAJIkNvbm5lY3Rpb24gZG93biIsCiB9OwotDAorCiAvKioKICAqIEV2ZW50cyBvZiB0aGUgY29ubmVjdGlvbiBzdGF0ZW1hY2hpbmUKICAqLwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJIkNvbm5lY3QgZXJyb3IiLAogfTsKIAotDAorCiAvKioKICAqIERlYnVnIEZhY2lsaXR5IFN0dWZmCiAgKi8KQEAgLTUxNiw3ICs1MTYsNyBAQAogZnNtX2FjdGlvbl9ub3AoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiB9Ci0MCisKIC8qKgogICogQWN0aW9ucyBvZiB0aGUgY29ubmVjdGlvbiBzdGF0ZW1hY2hpbmUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk5Myw3ICs5OTMsNyBAQAogCiBzdGF0aWMgY29uc3QgaW50IENPTk5fRlNNX0xFTiA9IHNpemVvZihjb25uX2ZzbSkgLyBzaXplb2YoZnNtX25vZGUpOwogCi0MCisKIC8qKgogICogQWN0aW9ucyBmb3IgaW50ZXJmYWNlIC0gc3RhdGVtYWNoaW5lLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTE4Miw3ICsxMTgyLDcgQEAKIAogCQlmc21fbmV3c3RhdGUoY29ubi0+ZnNtLCBDT05OX1NUQVRFX1RYKTsKIAkJY29ubi0+cHJvZi5zZW5kX3N0YW1wID0geHRpbWU7Ci0JCQorCiAJCXJjID0gaXVjdl9zZW5kKGNvbm4tPnBhdGhpZCwgTlVMTCwgMCwgMCwgMSAvKiBzaW5nbGVfZmxhZyAqLywKIAkJCTAsIG5za2ItPmRhdGEsIG5za2ItPmxlbik7CiAJCQkgICAgICAgLyogU2h1dCB1cCwgZ2NjISBuc2tiIGlzIGFsd2F5cyBiZWxvdyAyRy4gKi8KQEAgLTEyMjAsNyArMTIyMCw3IEBACiAKIAlyZXR1cm4gcmM7CiB9Ci0MCisKIC8qKgogICogSW50ZXJmYWNlIEFQSSBmb3IgdXBwZXIgbmV0d29yayBsYXllcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEyOTEsNyArMTI5MSw3IEBACiAKIAkvKioKIAkgKiBJZiBjb25uZWN0aW9uIGlzIG5vdCBydW5uaW5nLCB0cnkgdG8gcmVzdGFydCBpdAotCSAqIGFuZCB0aHJvdyBhd2F5IHBhY2tldC4gCisJICogYW5kIHRocm93IGF3YXkgcGFja2V0LgogCSAqLwogCWlmIChmc21fZ2V0c3RhdGUocHJpdnB0ci0+ZnNtKSAhPSBERVZfU1RBVEVfUlVOTklORykgewogCQlmc21fZXZlbnQocHJpdnB0ci0+ZnNtLCBERVZfRVZFTlRfU1RBUlQsIGRldik7CkBAIC0xNTM4LDcgKzE1MzgsNyBAQAogbWF4Y3Ffd3JpdGUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCQorCiAJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKIAlwcml2LT5jb25uLT5wcm9mLm1heGNxdWV1ZSA9IDA7CiAJcmV0dXJuIGNvdW50OwpAQCAtMTU1OSw3ICsxNTU5LDcgQEAKIHNkb2lvX3dyaXRlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKLQkKKwogCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi5kb2lvc19zaW5nbGUgPSAwOwogCXJldHVybiBjb3VudDsKQEAgLTE1ODAsNyArMTU4MCw3IEBACiBtZG9pb193cml0ZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JCisKIAlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwogCXByaXYtPmNvbm4tPnByb2YuZG9pb3NfbXVsdGkgPSAwOwogCXJldHVybiBjb3VudDsKQEAgLTE2MDEsNyArMTYwMSw3IEBACiB0eGxlbl93cml0ZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JCisKIAlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwogCXByaXYtPmNvbm4tPnByb2YudHhsZW4gPSAwOwogCXJldHVybiBjb3VudDsKQEAgLTE2MjIsNyArMTYyMiw3IEBACiB0eHRpbWVfd3JpdGUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCQorCiAJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKIAlwcml2LT5jb25uLT5wcm9mLnR4X3RpbWUgPSAwOwogCXJldHVybiBjb3VudDsKQEAgLTIwMDAsNyArMjAwMCw3IEBACiAJfQogCiAJUFJJTlRfSU5GTygiJXM6ICclcydcbiIsIGRldi0+bmFtZSwgbmV0aXVjdl9wcmludG5hbWUodXNlcm5hbWUpKTsKLQkKKwogCXJldHVybiBjb3VudDsKIAogb3V0X2ZyZWVfbmRldjoKQEAgLTIwOTksNyArMjA5OSw3IEBACiBuZXRpdWN2X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gaXVjdl9yZWdpc3Rlcl9kYmZfdmlld3MoKTsKIAlpZiAocmV0KSB7CiAJCVBSSU5UX1dBUk4oIm5ldGl1Y3ZfaW5pdCBmYWlsZWQsICIKQEAgLTIxMjgsNyArMjEyOCw3IEBACiAJfQogCXJldHVybiByZXQ7CiB9Ci0JCisKIG1vZHVsZV9pbml0KG5ldGl1Y3ZfaW5pdCk7CiBtb2R1bGVfZXhpdChuZXRpdWN2X2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGguaAppbmRleCA0ZGYwZmNkLi42MTlmNGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGguaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGguaApAQCAtMzc2LDcgKzM3Niw3IEBACiAJX191OCByZXNlcnZlZDNbMThdOwogCV9fdTMyIGNjaWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQkJCQkJICAgIAorCiBzdHJ1Y3QgcWV0aF9oZHIgewogCXVuaW9uIHsKIAkJc3RydWN0IHFldGhfaGRyX2xheWVyMiBsMjsKQEAgLTgyNSw3ICs4MjUsNyBAQAogCWludCB1c2VfaGFyZF9zdG9wOwogCWludCAoKm9yaWdfaGFyZF9oZWFkZXIpKHN0cnVjdCBza19idWZmICosc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQl1bnNpZ25lZCBzaG9ydCx2b2lkICosdm9pZCAqLHVuc2lnbmVkKTsKLQlzdHJ1Y3QgcWV0aF9vc25faW5mbyBvc25faW5mbzsgCisJc3RydWN0IHFldGhfb3NuX2luZm8gb3NuX2luZm87CiB9OwogCiBzdHJ1Y3QgcWV0aF9jYXJkX2xpc3Rfc3RydWN0IHsKQEAgLTk0NCw3ICs5NDQsNyBAQAogCQlyZXR1cm4gMDsKIAlzd2l0Y2ggKGNhcmQtPmluZm8udHlwZSkgewogCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgkKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoKIAkJcmV0dXJuIElGRl9OT0FSUDsKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAJZGVmYXVsdDoKQEAgLTk4MSw3ICs5ODEsNyBAQAogcWV0aF9nZXRfbWF4X210dV9mb3JfY2FyZChpbnQgY2FyZHR5cGUpCiB7CiAJc3dpdGNoIChjYXJkdHlwZSkgewotCQkKKwogCWNhc2UgUUVUSF9DQVJEX1RZUEVfVU5LTk9XTjoKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX09TQUU6CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CkBAIC0xMDk3LDkgKzEwOTcsOSBAQAogCWludCBjb3VudCA9IDAsIHJjID0gMDsKIAlpbnQgaW5bNF07CiAKLQlyYyA9IHNzY2FuZihidWYsICIlZC4lZC4lZC4lZCVuIiwgCisJcmMgPSBzc2NhbmYoYnVmLCAiJWQuJWQuJWQuJWQlbiIsCiAJCSAgICAmaW5bMF0sICZpblsxXSwgJmluWzJdLCAmaW5bM10sICZjb3VudCk7Ci0JaWYgKHJjICE9IDQgIHx8IGNvdW50KSAKKwlpZiAocmMgIT0gNCAgfHwgY291bnQ8PTApCiAJCXJldHVybiAtRUlOVkFMOwogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDQ7IGNvdW50KyspIHsKIAkJaWYgKGluW2NvdW50XSA+IDI1NSkKQEAgLTExMzEsNyArMTEzMSw3IEBACiAKIAljbnQgPSBvdXQgPSBmb3VuZCA9IHNhdmVfY250ID0gbnVtMiA9IDA7CiAgICAgICAgIGVuZCA9IHN0YXJ0ID0gKGNoYXIgKikgYnVmOwotCWluID0gKF9fdTE2ICopIGFkZHI7CQorCWluID0gKF9fdTE2ICopIGFkZHI7CiAJbWVtc2V0KGluLCAwLCAxNik7CiAgICAgICAgIHdoaWxlIChlbmQpIHsKICAgICAgICAgICAgICAgICBlbmQgPSBzdHJjaHIoZW5kLCc6Jyk7CkBAIC0xMTM5LDcgKzExMzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gKGNoYXIgKilidWYgKyAoc3RybGVuKGJ1ZikpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChlbmQgLSBzdGFydCkpIHsgCisgICAgICAgICAgICAgICAgaWYgKChlbmQgLSBzdGFydCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChudW0sIDAsIDUpOwogICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG51bSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAkJCWlmICghcWV0aF9pc3hkaWdpdChudW0pKQpAQCAtMTI0MSw1ICsxMjQxLDUgQEAKIAogZXh0ZXJuIHZvaWQKIHFldGhfb3NuX2RlcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci0JCQorCiAjZW5kaWYgLyogX19RRVRIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMKaW5kZXggNDRlMjI2Zi4uMGJhYjYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCkBAIC04MSw3ICs4MSw3IEBACiBxZXRoX2VkZHBfYnVmX3JlbGVhc2VfY29udGV4dHMoc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSAqcmVmOwotCQorCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImVkZHByY3R4Iik7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZidWYtPmN0eF9saXN0KSl7CiAJCXJlZiA9IGxpc3RfZW50cnkoYnVmLT5jdHhfbGlzdC5uZXh0LApAQCAtMTM1LDcgKzEzNSw3IEBACiAJCQkJCSAgICJidWZmZXIhXG4iKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJfQkJCisJCX0KIAkJLyogY2hlY2sgaWYgdGhlIHdob2xlIG5leHQgc2tiIGZpdHMgaW50byBjdXJyZW50IGJ1ZmZlciAqLwogCQlpZiAoKFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkgLQogCQkJCQlidWYtPm5leHRfZWxlbWVudF90b19maWxsKQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQkgKiBhbmQgaW5jcmVtZW50IGN0eCdzIHJlZmNudCAqLwogCQkJbXVzdF9yZWZjbnQgPSAxOwogCQkJY29udGludWU7Ci0JCX0JCisJCX0KIAkJaWYgKG11c3RfcmVmY250KXsKIAkJCW11c3RfcmVmY250ID0gMDsKIAkJCWlmIChxZXRoX2VkZHBfYnVmX3JlZl9jb250ZXh0KGJ1ZiwgY3R4KSl7CkBAIC0yNjYsNyArMjY2LDcgQEAKIAlpbnQgbGVmdF9pbl9mcmFnOwogCWludCBjb3B5X2xlbjsKIAl1OCAqc3JjOwotCQorCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBjZHRjIik7CiAJaWYgKHNrYl9zaGluZm8oZWRkcC0+c2tiKS0+bnJfZnJhZ3MgPT0gMCkgewogCQltZW1jcHkoZHN0LCBlZGRwLT5za2ItPmRhdGEgKyBlZGRwLT5za2Jfb2Zmc2V0LCBsZW4pOwpAQCAtNDA4LDcgKzQwOCw3IEBACiAJc3RydWN0IHRjcGhkciAqdGNwaDsKIAlpbnQgZGF0YV9sZW47CiAJdTMyIGhjc3VtOwotCQorCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBmdGNwIik7CiAJZWRkcC0+c2tiX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgZWRkcC0+bmhsICsgZWRkcC0+dGhsOwogICAgICAgIGlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpIHsKQEAgLTQ2NSwxMyArNDY1LDEzIEBACiAJCWVkZHAtPnRoLnRjcC5oLnNlcSArPSBkYXRhX2xlbjsKIAl9CiB9Ci0JCQkgICAKKwogc3RhdGljIGlubGluZSBpbnQKIHFldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAogCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpxaGRyKQogewogCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCA9IE5VTEw7Ci0JCisKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGZpY3giKTsKIAkvKiBjcmVhdGUgb3VyIHNlZ21lbnRhdGlvbiBoZWFkZXJzIGFuZCBjb3B5IG9yaWdpbmFsIGhlYWRlcnMgKi8KIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUCkKQEAgLTUxMiw3ICs1MTIsNyBAQAogCQkJIGludCBoZHJfbGVuKQogewogCWludCBza2JzX3Blcl9wYWdlOwotCQorCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBjYW5wIik7CiAJLyogY2FuIHdlIHB1dCBtdWx0aXBsZSBza2JzIGluIG9uZSBwYWdlPyAqLwogCXNrYnNfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyAoc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSArIGhkcl9sZW4pOwpAQCAtNTg4LDcgKzU4OCw3IEBACiAJCQkgICAgIHN0cnVjdCBxZXRoX2hkciAqcWhkcikKIHsKIAlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7Ci0JCisKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiY3JlZGRwY3QiKTsKIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUCkKIAkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoY2FyZCwgc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2ZzLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZnMuaAppbmRleCBlNDIyYjQxLi42MWZhZjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZnMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZnMuaApAQCAtNDIsNyArNDIsNyBAQAogCiBleHRlcm4gdm9pZAogcWV0aF9yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXNfb3NuKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0JCSAgICAKKwogZXh0ZXJuIGludAogcWV0aF9jcmVhdGVfZHJpdmVyX2F0dHJpYnV0ZXModm9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCmluZGV4IGIzYzZlNzkuLjllNjcxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwpAQCAtNTEzLDcgKzUxMyw3IEBACiAKIAlRRVRIX0RCRl9URVhUKHNldHVwLCAzLCAic2V0b2ZmbCIpOwogCVFFVEhfREJGX0hFWChzZXR1cCwgMywgJmNhcmQsIHNpemVvZih2b2lkICopKTsKLQkKKwogCWlmIChjYXJkLT5kZXYgJiYgbmV0aWZfY2Fycmllcl9vayhjYXJkLT5kZXYpKQogCQluZXRpZl9jYXJyaWVyX29mZihjYXJkLT5kZXYpOwogCXJlY292ZXJfZmxhZyA9IGNhcmQtPnN0YXRlOwpAQCAtNjA0LDEzICs2MDQsMTMgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkZHIsICZjYXJkLT5pcF9saXN0LCBlbnRyeSkgewogCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKIAkJCWlmICgoYWRkci0+dHlwZSA9PSB0b2RvLT50eXBlKSAmJgotCQkJICAgIChtZW1jbXAoJmFkZHItPm1hYywgJnRvZG8tPm1hYywgCisJCQkgICAgKG1lbWNtcCgmYWRkci0+bWFjLCAmdG9kby0+bWFjLAogCQkJCSAgICBPU0FfQUREUl9MRU4pID09IDApKSB7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQogCQkJY29udGludWU7Ci0JCX0gCisJCX0KIAkJaWYgKChhZGRyLT5wcm90byAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAmJgogCQkgICAgKHRvZG8tPnByb3RvICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICYmCiAJCSAgICAoYWRkci0+dHlwZSAgICAgID09IHRvZG8tPnR5cGUpICAgICAgJiYKQEAgLTY5NCwxMyArNjk0LDEzIEBACiAJCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgewogCQkJaWYgKCh0bXAtPnR5cGUJPT0gYWRkci0+dHlwZSkJJiYKIAkJCSAgICAodG1wLT5pc19tdWx0aWNhc3QgPT0gYWRkci0+aXNfbXVsdGljYXN0KSAmJgotCQkJICAgIChtZW1jbXAoJnRtcC0+bWFjLCAmYWRkci0+bWFjLCAKKwkJCSAgICAobWVtY21wKCZ0bXAtPm1hYywgJmFkZHItPm1hYywKIAkJCQkgICAgT1NBX0FERFJfTEVOKSA9PSAwKSkgewogCQkJCWZvdW5kID0gMTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWNvbnRpbnVlOwotCQl9IAkgCisJCX0KIAkJaWYgKCh0bXAtPnByb3RvICAgICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICAgICYmCiAJCSAgICAoYWRkci0+cHJvdG8gICAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAgICAmJgogCQkgICAgKHRtcC0+dHlwZSAgICAgICAgID09IGFkZHItPnR5cGUpICAgICAgICAgJiYKQEAgLTExNzMsNyArMTE3Myw3IEBACiAJCQkJCSAgICJkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMhXG4iKTsKIAkJCQljYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPSAxOwogCQkJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAwOwotCQkJfSAKKwkJCX0KIAkJCXJldHVybiAwOwogCQl9CiAJCWkrKzsKQEAgLTExOTgsNyArMTE5OCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIlcyIsIGdkZXYtPmRldi5idXNfaWQpOwotCQorCiAJY2FyZCA9IHFldGhfYWxsb2NfY2FyZCgpOwogCWlmICghY2FyZCkgewogCQlwdXRfZGV2aWNlKGRldik7CkBAIC0xMjIwLDcgKzEyMjAsNyBAQAogCQlwdXRfZGV2aWNlKGRldik7CiAJCXFldGhfZnJlZV9jYXJkKGNhcmQpOwogCQlyZXR1cm4gcmM7Ci0JfQkJCSAgICAKKwl9CiAJaWYgKChyYyA9IHFldGhfc2V0dXBfY2FyZChjYXJkKSkpewogCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjJlcnIlZCIsIHJjKTsKIAkJcHV0X2RldmljZShkZXYpOwpAQCAtMTg0Myw3ICsxODQzLDcgQEAKIAkgICAgICAgJmNhcmQtPnNlcW5vLnBkdV9oZHJfYWNrLCBRRVRIX1NFUV9OT19MRU5HVEgpOwogCVFFVEhfREJGX0hFWChjb250cm9sLCAyLCBpb2ItPmRhdGEsIFFFVEhfREJGX0NPTlRST0xfTEVOKTsKIH0KLQkJCQkJCSAgICAKKwogc3RhdGljIGludAogcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgbGVuLAogCQkgICAgICAgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iLApAQCAtMTkzNyw3ICsxOTM3LDcgQEAKIAkJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKIAl9CiAJcmV0dXJuIHJjOwotfQkJCQkJCit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWV0aF9wcmVwYXJlX2lwYV9jbWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iLApAQCAtMTk2Niw3ICsxOTY2LDcgQEAKIAltZW1jcHkoUUVUSF9JUEFfUERVX0xFTl9QRFUzKGlvYi0+ZGF0YSksICZzMiwgMik7CiAJcmV0dXJuIHFldGhfb3NuX3NlbmRfY29udHJvbF9kYXRhKGNhcmQsIHMxLCBpb2IpOwogfQotCQkJCQkJCSAgICAKKwogc3RhdGljIGludAogcWV0aF9zZW5kX2lwYV9jbWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iLAogCQkgIGludCAoKnJlcGx5X2NiKQpAQCAtMjU3OSw3ICsyNTc5LDcgQEAKIAkJc2tiLT5kZXYgPSBjYXJkLT5kZXY7CiAJCWlmIChoZHItPmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikKIAkJCXZsYW5fdGFnID0gcWV0aF9sYXllcjJfcmVidWlsZF9za2IoY2FyZCwgc2tiLCBoZHIpOwotCQllbHNlIGlmIChoZHItPmhkci5sMy5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMykgICAgIAorCQllbHNlIGlmIChoZHItPmhkci5sMy5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMykKIAkJCXFldGhfcmVidWlsZF9za2IoY2FyZCwgc2tiLCBoZHIpOwogCQllbHNlIHsgLyppbiBjYXNlIG9mIE9TTiovCiAJCQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKQEAgLTI3NjMsNyArMjc2Myw3IEBACiAJCWluZGV4ID0gaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAJCWJ1ZmZlciA9ICZjYXJkLT5xZGlvLmluX3EtPmJ1ZnNbaW5kZXhdOwogCQlpZiAoISgoc3RhdHVzICYgUURJT19TVEFUVVNfTE9PS19GT1JfRVJST1IpICYmCi0JCSAgICAgIHFldGhfY2hlY2tfcWRpb19lcnJvcnMoYnVmZmVyLT5idWZmZXIsIAorCQkgICAgICBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGJ1ZmZlci0+YnVmZmVyLAogCQkJCQkgICAgIHFkaW9fZXJyLCBzaWdhX2VyciwicWluZXJyIikpKQogCQkJcWV0aF9wcm9jZXNzX2luYm91bmRfYnVmZmVyKGNhcmQsIGJ1ZmZlciwgaW5kZXgpOwogCQkvKiBjbGVhciBidWZmZXIgYW5kIGdpdmUgYmFjayB0byBoYXJkd2FyZSAqLwpAQCAtMzE4Nyw3ICszMTg3LDcgQEAKIAlpZiAoY2FyZC0+cWRpby5zdGF0ZSA9PSBRRVRIX1FESU9fQUxMT0NBVEVEKQogCQlyZXR1cm4gMDsKIAotCWNhcmQtPnFkaW8uaW5fcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fcSksIAorCWNhcmQtPnFkaW8uaW5fcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fcSksCiAJCQkJICBHRlBfS0VSTkVMfEdGUF9ETUEpOwogCWlmICghY2FyZC0+cWRpby5pbl9xKQogCQlyZXR1cm4gLSBFTk9NRU07CkBAIC0zNDc2LDcgKzM0NzYsNyBAQAogCXJjMyA9IHFldGhfaGFsdF9jaGFubmVsKCZjYXJkLT5kYXRhKTsKIAlpZiAocmMxKQogCQlyZXR1cm4gcmMxOwotCWlmIChyYzIpIAorCWlmIChyYzIpCiAJCXJldHVybiByYzI7CiAJcmV0dXJuIHJjMzsKIH0KQEAgLTM0OTEsNyArMzQ5MSw3IEBACiAJcmMzID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT5kYXRhKTsKIAlpZiAocmMxKQogCQlyZXR1cm4gcmMxOwotCWlmIChyYzIpIAorCWlmIChyYzIpCiAJCXJldHVybiByYzI7CiAJcmV0dXJuIHJjMzsKIH0KQEAgLTM3OTgsMTAgKzM3OTgsMTAgQEAKIAkJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJub21hY2FkciIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KLQljYXJkLT5kZXYtPmZsYWdzIHw9IElGRl9VUDsKLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCWNhcmQtPmRhdGEuc3RhdGUgPSBDSF9TVEFURV9VUDsKIAljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfVVA7CisJY2FyZC0+ZGV2LT5mbGFncyB8PSBJRkZfVVA7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAogCWlmICghY2FyZC0+bGFuX29ubGluZSAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikpCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CkBAIC0zODE3LDcgKzM4MTcsNyBAQAogCiAJY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGRldi0+cHJpdjsKIAotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwluZXRpZl90eF9kaXNhYmxlKGRldik7CiAJY2FyZC0+ZGV2LT5mbGFncyAmPSB+SUZGX1VQOwogCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQogCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfU09GVFNFVFVQOwpAQCAtMzk1OCw3ICszOTU4LDcgQEAKICNlbmRpZgogCSpoZHIgPSAoc3RydWN0IHFldGhfaGRyICopCiAJCXFldGhfcHVzaF9za2IoY2FyZCwgc2tiLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JaWYgKGhkciA9PSBOVUxMKQorCWlmICgqaGRyID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiAwOwogfQpAQCAtNDA5OCw3ICs0MDk4LDcgQEAKIAkJfQogCX0gZWxzZSB7IC8qIHBhc3N0aHJvdWdoICovCiAgICAgICAgICAgICAgICAgaWYoKHNrYi0+ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyX1RSKSAmJgotCQkgICAgIW1lbWNtcChza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIAorCQkgICAgIW1lbWNtcChza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCiAJCSAgICBzaXplb2YoX191MTYpLCBza2ItPmRldi0+YnJvYWRjYXN0LCA2KSkgewogCQkJaGRyLT5oZHIubDMuZmxhZ3MgPSBRRVRIX0NBU1RfQlJPQURDQVNUIHwKIAkJCQkJCVFFVEhfSERSX1BBU1NUSFJVOwpAQCAtNDM4NSw3ICs0Mzg1LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLXFldGhfZ2V0X2VsZW1lbnRzX25vKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHZvaWQgKmhkciwgCitxZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB2b2lkICpoZHIsCiAJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVsZW1zKQogewogCWludCBlbGVtZW50c19uZWVkZWQgPSAwOwpAQCAtNDQxNiw2ICs0NDE2LDggQEAKIAllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwogCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKIAlpbnQgdHhfYnl0ZXMgPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBzaG9ydCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJdW5zaWduZWQgc2hvcnQgdHNvX3NpemUgPSBza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplOwogCWludCByYzsKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJzZW5kcGt0Iik7CkBAIC00NDQxLDcgKzQ0NDMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJY2FzdF90eXBlID0gcWV0aF9nZXRfY2FzdF90eXBlKGNhcmQsIHNrYik7Ci0JaWYgKChjYXN0X3R5cGUgPT0gUlROX0JST0FEQ0FTVCkgJiYgCisJaWYgKChjYXN0X3R5cGUgPT0gUlROX0JST0FEQ0FTVCkgJiYKIAkgICAgKGNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUgPT0gMCkpewogCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtNDQ2Myw3ICs0NDY1LDcgQEAKIAkJCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybiBORVRERVZfVFhfT0s7Ci0JCX0gCisJCX0KIAkJZWxlbWVudHNfbmVlZGVkKys7CiAJfSBlbHNlIHsKIAkJaWYgKChyYyA9IHFldGhfcHJlcGFyZV9za2IoY2FyZCwgJnNrYiwgJmhkciwgaXB2KSkpIHsKQEAgLTQ0OTgsMTYgKzQ1MDAsMTYgQEAKIAkJY2FyZC0+c3RhdHMudHhfcGFja2V0cysrOwogCQljYXJkLT5zdGF0cy50eF9ieXRlcyArPSB0eF9ieXRlczsKICNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JCWlmIChza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplICYmCisJCWlmICh0c29fc2l6ZSAmJgogCQkgICAhKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSkgewotCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHNrYi0+bGVuOworCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOwogCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOwogCQl9Ci0gCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDApeworIAkJaWYgKG5yX2ZyYWdzID4gMCl7CiAJCQljYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudCsrOwogCQkJLyogbnJfZnJhZ3MgKyBza2ItPmRhdGEgKi8KIAkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPQotCQkJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCQkJCW5yX2ZyYWdzICsgMTsKIAkJfQogI2VuZGlmIC8qIENPTkZJR19RRVRIX1BFUkZfU1RBVFMgKi8KIAl9CkBAIC01MzczLDcgKzUzNzUsNyBAQAogICAgICAgICBjbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwogICAgICAgICBpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKIAkJUFJJTlRfRVJSKCJFcnJvciBpbiBwcm9jZXNzaW5nIFZMQU4gJWkgb24gJXM6IDB4JXguICIKLQkJCSAgIkNvbnRpbnVpbmdcbiIsY21kLT5kYXRhLnNldGRlbHZsYW4udmxhbl9pZCwgCisJCQkgICJDb250aW51aW5nXG4iLGNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQsCiAJCQkgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKIAkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMlZMJTR4IiwgY21kLT5oZHIuY29tbWFuZCk7CiAJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiTDIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKQEAgLTUzOTMsNyArNTM5NSw3IEBACiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIFFFVEhfUFJPVF9JUFY0KTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAgICAgICAgIGNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQgPSBpOwotCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIAorCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsCiAJCQkJIHFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbl9jYiwgTlVMTCk7CiB9CiAKQEAgLTU0NTcsNyArNTQ1OSw3IEBACiAgKiBFeGFtaW5lIGhhcmR3YXJlIHJlc3BvbnNlIHRvIFNFVF9QUk9NSVNDX01PREUKICAqLwogc3RhdGljIGludAotcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIAorcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCiAJCQkgICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTU0NjgsMTAgKzU0NzAsMTAgQEAKIAogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CiAJc2V0cGFybXMgPSAmKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMpOwotCQorCiAgICAgICAgIHFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKWNtZCk7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7IAotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSw0LCJwcm1yYyUyLjJ4IixjbWQtPmhkci5yZXR1cm5fY29kZSk7CQorCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgeworCQlRRVRIX0RCRl9URVhUXyh0cmFjZSw0LCJwcm1yYyUyLjJ4IixjbWQtPmhkci5yZXR1cm5fY29kZSk7CiAJCXNldHBhcm1zLT5kYXRhLm1vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09GRjsKIAl9CiAJY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPSBzZXRwYXJtcy0+ZGF0YS5tb2RlOwpAQCAtNTUxNyw3ICs1NTE5LDcgQEAKIAogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQogCQlyZXR1cm4gOwotCSAKKwogCVFFVEhfREJGX1RFWFQodHJhY2UsIDMsICJzZXRtdWx0aSIpOwogCXFldGhfZGVsZXRlX21jX2FkZHJlc3NlcyhjYXJkKTsKIAlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKQEAgLTU1NzUsNyArNTU3Nyw3IEBACiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CiAJaW50IHJjOwotCQorCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgIm9zbnNkbWMiKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01NjU0LDcgKzU2NTYsNyBAQAogCWNhcmQtPm9zbl9pbmZvLmRhdGFfY2IgPSBOVUxMOwogCXJldHVybjsKIH0KLQkJCQkJICAgCisKIHN0YXRpYyB2b2lkCiBxZXRoX2RlbGV0ZV9tY19hZGRyZXNzZXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKQEAgLTU4MTgsNyArNTgyMCw3IEBACiAJc3RydWN0IGluZXQ2X2RldiAqaW42X2RldjsKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiY2hrbWN2NiIpOwotCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKSAKKwlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9JUFY2KSkKIAkJcmV0dXJuIDsKIAlpbjZfZGV2ID0gaW42X2Rldl9nZXQoY2FyZC0+ZGV2KTsKIAlpZiAoaW42X2RldiA9PSBOVUxMKQpAQCAtNjM1OSwxMiArNjM2MSw5IEBACiAJZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gcWV0aF92bGFuX3J4X2tpbGxfdmlkOwogCWRldi0+dmxhbl9yeF9hZGRfdmlkID0gcWV0aF92bGFuX3J4X2FkZF92aWQ7CiAjZW5kaWYKLQlkZXYtPmhhcmRfaGVhZGVyID0gY2FyZC0+b3JpZ19oYXJkX2hlYWRlcjsKIAlpZiAocWV0aF9nZXRfbmV0ZGV2X2ZsYWdzKGNhcmQpICYgSUZGX05PQVJQKSB7CiAJCWRldi0+cmVidWlsZF9oZWFkZXIgPSBOVUxMOwogCQlkZXYtPmhhcmRfaGVhZGVyID0gTlVMTDsKLQkJaWYgKGNhcmQtPm9wdGlvbnMuZmFrZV9sbCkKLQkJCWRldi0+aGFyZF9oZWFkZXIgPSBxZXRoX2Zha2VfaGVhZGVyOwogCQlkZXYtPmhlYWRlcl9jYWNoZV91cGRhdGUgPSBOVUxMOwogCQlkZXYtPmhhcmRfaGVhZGVyX2NhY2hlID0gTlVMTDsKIAl9CkBAIC02MzczLDYgKzYzNzIsOSBAQAogCWlmICghKGNhcmQtPmluZm8udW5pcXVlX2lkICYgVU5JUVVFX0lEX05PVF9CWV9DQVJEKSkKIAkJY2FyZC0+ZGV2LT5kZXZfaWQgPSBjYXJkLT5pbmZvLnVuaXF1ZV9pZCAmIDB4ZmZmZjsKICNlbmRpZgorCWlmIChjYXJkLT5vcHRpb25zLmZha2VfbGwgJiYKKwkJKHFldGhfZ2V0X25ldGRldl9mbGFncyhjYXJkKSAmIElGRl9OT0FSUCkpCisJCQlkZXYtPmhhcmRfaGVhZGVyID0gcWV0aF9mYWtlX2hlYWRlcjsKIAlkZXYtPmhhcmRfaGVhZGVyX3BhcnNlID0gTlVMTDsKIAlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHFldGhfbGF5ZXIyX3NldF9tYWNfYWRkcmVzczsKIAlkZXYtPmZsYWdzIHw9IHFldGhfZ2V0X25ldGRldl9mbGFncyhjYXJkKTsKQEAgLTY0NzcsNiArNjQ3OSw5IEBACiAJLypuZXR3b3JrIGRldmljZSB3aWxsIGJlIHJlY292ZXJlZCovCiAJaWYgKGNhcmQtPmRldikgewogCQljYXJkLT5kZXYtPmhhcmRfaGVhZGVyID0gY2FyZC0+b3JpZ19oYXJkX2hlYWRlcjsKKwkJaWYgKGNhcmQtPm9wdGlvbnMuZmFrZV9sbCAmJgorCQkgICAgKHFldGhfZ2V0X25ldGRldl9mbGFncyhjYXJkKSAmIElGRl9OT0FSUCkpCisJCQljYXJkLT5kZXYtPmhhcmRfaGVhZGVyID0gcWV0aF9mYWtlX2hlYWRlcjsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGF0IGZpcnN0IHNldF9vbmxpbmUgYWxsb2NhdGUgbmV0ZGV2ICovCkBAIC02NTg0LDcgKzY1ODksNyBAQAogCiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKIAlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8IGNhcmQtPmluZm8uZ3Vlc3RsYW4gfHwKLQkgICAgIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFQUQpKSB7CQorCSAgICAhKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVBRCkpIHsKIAkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsCiAJCSAgICAgICAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmFkZHIsCiAJCSAgICAgICBPU0FfQUREUl9MRU4pOwpAQCAtNzAzMSwxNCArNzAzNiwxMiBAQAogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJzb2Z0aXB2NiIpOwogCi0JbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwogCXJjID0gcWV0aF9zZW5kX3N0YXJ0bGFuKGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKIAlpZiAocmMpIHsKIAkJUFJJTlRfRVJSKCJJUHY2IHN0YXJ0bGFuIGZhaWxlZCBvbiAlc1xuIiwKIAkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CiAJCXJldHVybiByYzsKIAl9Ci0JbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOwogCXJjID0gcWV0aF9xdWVyeV9pcGFzc2lzdHMoY2FyZCxRRVRIX1BST1RfSVBWNik7CiAJaWYgKHJjKSB7CiAJCVBSSU5UX0VSUigiSVB2NiBxdWVyeSBpcGFzc2lzdCBmYWlsZWQgb24gJXNcbiIsCkBAIC03MzUyLDcgKzczNTUsOCBAQAogCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwogCQlyZXR1cm4gMDsKIAl9Ci0JbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOworCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQorCQluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CiAJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKIAlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCkgewogCWNhc2UgUUVUSF9MQVJHRV9TRU5EX0VERFA6CkBAIC03Mzc0LDcgKzczNzgsOCBAQAogCQljYXJkLT5kZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHKTsKIAkJYnJlYWs7CiAJfQotCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKKwlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkKKwkJbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOwogCXJldHVybiByYzsKIH0KIApAQCAtNzQyNyw3ICs3NDMyLDcgQEAKIAlpZiAoKHJjID0gcWV0aF9zZXRyb3V0aW5nX3Y2KGNhcmQpKSkKIAkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICI1ZXJyJWQiLCByYyk7CiBvdXQ6Ci0JbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOworCW5ldGlmX3R4X2Rpc2FibGUoY2FyZC0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU2Nyw3ICs3NTcyLDcgQEAKIAlpZiAoY2FyZC0+cmVhZC5zdGF0ZSA9PSBDSF9TVEFURV9VUCAmJgogCSAgICBjYXJkLT53cml0ZS5zdGF0ZSA9PSBDSF9TVEFURV9VUCAmJgogCSAgICAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkpIHsKLQkJaWYgKHJlY292ZXJ5X21vZGUgJiYgCisJCWlmIChyZWNvdmVyeV9tb2RlICYmCiAJCSAgICBjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfT1NOKSB7CiAJCQlxZXRoX3N0b3AoY2FyZC0+ZGV2KTsKIAkJfSBlbHNlIHsKQEAgLTc3MzYsMTAgKzc3NDEsOCBAQAogcWV0aF9yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKIAlRRVRIX0RCRl9URVhUKHNldHVwLCAzLCAicmVnbmV0ZCIpOwotCWlmIChjYXJkLT5kZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfVU5JTklUSUFMSVpFRCkgewotCQlxZXRoX25ldGRldl9pbml0KGNhcmQtPmRldik7CisJaWYgKGNhcmQtPmRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19VTklOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKLQl9CiAJLyogc3lzZnMgbWFnaWMgKi8KIAlTRVRfTkVUREVWX0RFVihjYXJkLT5kZXYsICZjYXJkLT5nZGV2LT5kZXYpOwogCXJldHVybiByZWdpc3Rlcl9uZXRkZXYoY2FyZC0+ZGV2KTsKQEAgLTc3NTAsNyArNzc1Myw3IEBACiB7CiAJUUVUSF9EQkZfVEVYVChzZXR1cCAsMiwgInN0YXJ0YWciKTsKIAotCWlmIChyZWNvdmVyeV9tb2RlICYmIAorCWlmIChyZWNvdmVyeV9tb2RlICYmCiAJICAgIGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKIAkJcWV0aF9vcGVuKGNhcmQtPmRldik7CiAJfSBlbHNlIHsKQEAgLTgwMTQsNyArODAxNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfb3BzIGFycF9kaXJlY3Rfb3BzX3RlbXBsYXRlID0gewogCS5mYW1pbHkgPSBBRl9JTkVULAotCS5kZXN0cnVjdG9yID0gTlVMTCwKIAkuc29saWNpdCA9IE5VTEwsCiAJLmVycm9yX3JlcG9ydCA9IE5VTEwsCiAJLm91dHB1dCA9IGRldl9xdWV1ZV94bWl0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oCmluZGV4IDAxMWM0MTAuLjA0NzdjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKQEAgLTQ0NSw3ICs0NDUsNyBAQAogLyogSGVscGVyIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBJU19JUEFfUkVQTFkoY21kKSAoKGNtZC0+aGRyLmluaXRpYXRvciA9PSBJUEFfQ01EX0lOSVRJQVRPUl9IT1NUKSB8fCBcCiAJCQkgICAoY21kLT5oZHIuaW5pdGlhdG9yID09IElQQV9DTURfSU5JVElBVE9SX09TQV9SRVBMWSkpCi0JCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEVORCBPRiAgIElQIEFzc2lzdCByZWxhdGVkIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ5MCw3ICs0OTAsNyBAQAogLyogTGF5ZXIgMiBkZWZpbnRpb25zICovCiAjZGVmaW5lIFFFVEhfUFJPVF9MQVlFUjIgMHgwOAogI2RlZmluZSBRRVRIX1BST1RfVENQSVAgIDB4MDMKLSNkZWZpbmUgUUVUSF9QUk9UX09TTjIgICAweDBhICAgICAKKyNkZWZpbmUgUUVUSF9QUk9UX09TTjIgICAweDBhCiAjZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9QUk9UX1RZUEUoYnVmZmVyKSAoYnVmZmVyKzB4NTApCiAjZGVmaW5lIFFFVEhfSVBBX0NNRF9QUk9UX1RZUEUoYnVmZmVyKSAoYnVmZmVyKzB4MTkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfcHJvYy5jCmluZGV4IDM2MGQ3ODIuLjY2ZjJkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Byb2MuYwpAQCAtMzYsNyArMzYsNyBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CiAJbG9mZl90IG5yID0gMDsKLQkKKwogCWRvd25fcmVhZCgmcWV0aF9jY3dncm91cF9kcml2ZXIuZHJpdmVyLmJ1cy0+c3Vic3lzLnJ3c2VtKTsKIAlpZiAoKm9mZnNldCA9PSAwKQogCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwpAQCAtNjAsOCArNjAsOCBAQAogcWV0aF9wcm9jZmlsZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0LCBsb2ZmX3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpwcmV2LCAqbmV4dDsKLQkKLQlpZiAoaXQgPT0gU0VRX1NUQVJUX1RPS0VOKSAKKworCWlmIChpdCA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXByZXYgPSBOVUxMOwogCWVsc2UKIAkJcHJldiA9IChzdHJ1Y3QgZGV2aWNlICopIGl0OwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2aWNlOwogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CiAKLQkKKwogCWlmIChpdCA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKaW5kZXggODgyZDQxOS4uMTg1YTljZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJfQogCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gdHlwZSkKIAkJcmV0dXJuIGNvdW50OwotCWlmICgocmMgPSBxZXRoX3NldF9sYXJnZV9zZW5kKGNhcmQsIHR5cGUpKSkJCisJaWYgKChyYyA9IHFldGhfc2V0X2xhcmdlX3NlbmQoY2FyZCwgdHlwZSkpKQogCQlyZXR1cm4gcmM7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTY4Miw3ICsxNjgyLDcgQEAKIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAogCQkJCQkgICZxZXRoX29zbl9kZXZpY2VfYXR0cl9ncm91cCk7Ci0gICAJCisKIAlpZiAoKHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYXR0cl9ncm91cCkpKQogCQlyZXR1cm4gcmV0OwogCWlmICgocmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9pcGF0b19ncm91cCkpKXsKQEAgLTE3MTMsNyArMTcxMyw3IEBACiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCiAJCXJldHVybiBzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwKIAkJCQkJICAmcWV0aF9vc25fZGV2aWNlX2F0dHJfZ3JvdXApOwotCQkgICAgICAKKwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYXR0cl9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9pcGF0b19ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV92aXBhX2dyb3VwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaAppbmRleCAxMjg2ZGRlLi4yNGVmNDBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oCkBAIC0xMTcsMTEgKzExNywxMSBAQAogCWludCBmcmFnbm87CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCWludCBlbGVtZW50LCBjbnQsIGRsZW47Ci0JCisKIAlmcmFnbm8gPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCWVsZW1lbnQgPSAqbmV4dF9lbGVtZW50X3RvX2ZpbGw7CiAJZGxlbiA9IDA7Ci0JCisKIAlpZiAoaXNfdHNvKQogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQogCQkJU0JBTF9GTEFHU19NSURETEVfRlJBRzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jIGIvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKaW5kZXggM2JmNDY2Ni4uZjk5ZTU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKKysrIGIvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KIApAQCAtMzYyLDEyICszNjMsMTkgQEAKIAlyZXR1cm4ga2lsbF90YXNrOwogfQogCisjZGVmaW5lIE1BWF9JUERfQ09VTlQJMjkKKyNkZWZpbmUgTUFYX0lQRF9USU1FCSg1ICogNjAgKiBVU0VDX1BFUl9TRUMpIC8qIDUgbWludXRlcyAqLworCiAvKgogICogbWFjaGluZSBjaGVjayBoYW5kbGVyLgogICovCiB2b2lkCiBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhpcGRfbG9jayk7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0X2lwZDsKKwlzdGF0aWMgaW50IGlwZF9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG1wOwogCXN0cnVjdCBtY2kgKm1jaTsKIAlzdHJ1Y3QgbWNja19zdHJ1Y3QgKm1jY2s7CiAJaW50IHVtb2RlOwpAQCAtNDA0LDExICs0MTIsMjcgQEAKIAkJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInByb2Nlc3NpbmcgYmFja3VwIG1hY2hpbmUgIgogCQkJCQkJICAgImNoZWNrIHdpdGggZGFtYWdlLiIpOwogCQkJfQotCQkJaWYgKCF1bW9kZSkKLQkJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInByb2Nlc3NpbmcgYmFja3VwIG1hY2hpbmUgIgotCQkJCQkJICAgImNoZWNrIGluIGtlcm5lbCBtb2RlLiIpOwotCQkJbWNjay0+a2lsbF90YXNrID0gMTsKLQkJCW1jY2stPm1jY2tfY29kZSA9ICoodW5zaWduZWQgbG9uZyBsb25nICopIG1jaTsKKworCQkJLyoKKwkJCSAqIE51bGxpZnlpbmcgZXhpZ2VudCBjb25kaXRpb24sIHRoZXJlZm9yZSB3ZSBtaWdodAorCQkJICogcmV0cnkgdGhpcyBpbnN0cnVjdGlvbi4KKwkJCSAqLworCisJCQlzcGluX2xvY2soJmlwZF9sb2NrKTsKKworCQkJdG1wID0gZ2V0X2Nsb2NrKCk7CisKKwkJCWlmICgoKHRtcCAtIGxhc3RfaXBkKSA+PiAxMikgPCBNQVhfSVBEX1RJTUUpCisJCQkJaXBkX2NvdW50Kys7CisJCQllbHNlCisJCQkJaXBkX2NvdW50ID0gMTsKKworCQkJbGFzdF9pcGQgPSB0bXA7CisKKwkJCWlmIChpcGRfY291bnQgPT0gTUFYX0lQRF9DT1VOVCkKKwkJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInRvbyBtYW55IGlwZCByZXRyaWVzLiIpOworCisJCQlzcGluX3VubG9jaygmaXBkX2xvY2spOwogCQl9CiAJCWVsc2UgewogCQkJLyogUHJvY2Vzc2luZyBkYW1hZ2UgLT4gc3RvcHBpbmcgbWFjaGluZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKaW5kZXggMzgzYTk1Zi4uMjM5ZTEwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCkBAIC0zOTIsMTMgKzM5MiwxNiBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlwcm9tX2dldHByb3BlcnR5KG9wLm9wX25vZGVpZCwgc3RyLCB0bXAsIGxlbik7CisJCWNudCA9IHByb21fZ2V0cHJvcGVydHkob3Aub3Bfbm9kZWlkLCBzdHIsIHRtcCwgbGVuKTsKKwkJaWYgKGNudCA8PSAwKSB7CisJCQllcnJvciA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQl0bXBbbGVuXSA9ICdcMCc7CiAKLQkJdG1wW2xlbl0gPSAnXDAnOwotCi0JCWlmIChfX2NvcHlfdG9fdXNlcihhcmdwLCAmb3AsIHNpemVvZihvcCkpICE9IDAKLQkJICAgIHx8IGNvcHlfdG9fdXNlcihvcC5vcF9idWYsIHRtcCwgbGVuKSAhPSAwKQotCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJaWYgKF9fY29weV90b191c2VyKGFyZ3AsICZvcCwgc2l6ZW9mKG9wKSkgIT0gMCB8fAorCQkJICAgIGNvcHlfdG9fdXNlcihvcC5vcF9idWYsIHRtcCwgbGVuKSAhPSAwKQorCQkJCWVycm9yID0gLUVGQVVMVDsKKwkJfQogCiAJCWtmcmVlKHRtcCk7CiAJCWtmcmVlKHN0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwppbmRleCAwZDJiNDQ3Li5jYWViNmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKQEAgLTY1LDYgKzY1LDcgQEAKICAgIDIuMjYuMDIuMDA1IC0gRml4IHVzZV9zZyA9PSAwIG1hcHBpbmcgb24gc3lzdGVtcyB3aXRoIDRHQiBvciBoaWdoZXIuCiAgICAyLjI2LjAyLjAwNiAtIEZpeCA5NTUwU1ggcGNoaXAgcmVzZXQgdGltZW91dC4KICAgICAgICAgICAgICAgICAgQWRkIGJpZyBlbmRpYW4gc3VwcG9ydC4KKyAgIDIuMjYuMDIuMDA3IC0gRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIGR1cmluZyBrbWFwL3VubWFwX2F0b21pYygpLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODgsNyArODksNyBAQAogI2luY2x1ZGUgIjN3LTl4eHguaCIKIAogLyogR2xvYmFscyAqLwotI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMDYiCisjZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIyLjI2LjAyLjAwNyIKIHN0YXRpYyBUV19EZXZpY2VfRXh0ZW5zaW9uICp0d2FfZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHdhX2RldmljZV9leHRlbnNpb25fY291bnQ7CiBzdGF0aWMgaW50IHR3YV9tYWpvciA9IC0xOwpAQCAtMTk0Miw5ICsxOTQzLDEzIEBACiAJCX0KIAkJaWYgKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT51c2Vfc2cgPT0gMSkgewogCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKil0d19kZXYtPnNyYltyZXF1ZXN0X2lkXS0+cmVxdWVzdF9idWZmZXI7Ci0JCQljaGFyICpidWYgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OworCQkJY2hhciAqYnVmOworCQkJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQlidWYgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OwogCQkJbWVtY3B5KGJ1ZiwgdHdfZGV2LT5nZW5lcmljX2J1ZmZlcl92aXJ0W3JlcXVlc3RfaWRdLCBzZy0+bGVuZ3RoKTsKIAkJCWt1bm1hcF9hdG9taWMoYnVmIC0gc2ctPm9mZnNldCwgS01fSVJRMCk7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCX0KIAl9CiB9IC8qIEVuZCB0d2Ffc2NzaW9wX2V4ZWN1dGVfc2NzaV9jb21wbGV0ZSgpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguYwppbmRleCAyNWY2NzhkLi5lOGU0MWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKQEAgLTE1MDgsMTAgKzE1MDgsMTIgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSB0d19kZXYtPnNyYltyZXF1ZXN0X2lkXTsKIAl2b2lkICpidWY7CiAJdW5zaWduZWQgaW50IHRyYW5zZmVyX2xlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAogCWlmIChjbWQtPnVzZV9zZykgewogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0KIAkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiljbWQtPnJlcXVlc3RfYnVmZmVyOworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCWJ1ZiA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9JUlEwKSArIHNnLT5vZmZzZXQ7CiAJCXRyYW5zZmVyX2xlbiA9IG1pbihzZy0+bGVuZ3RoLCBsZW4pOwogCX0gZWxzZSB7CkBAIC0xNTI2LDYgKzE1MjgsNyBAQAogCiAJCXNnID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKWNtZC0+cmVxdWVzdF9idWZmZXI7CiAJCWt1bm1hcF9hdG9taWMoYnVmIC0gc2ctPm9mZnNldCwgS01fSVJRMCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggNDAzNTkyMC4uYTQ4MGEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTQ0Niw3ICs0NDYsOSBAQAogCiBjb25maWcgU0NTSV9BRFZBTlNZUwogCXRyaXN0YXRlICJBZHZhblN5cyBTQ1NJIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoSVNBIHx8IEVJU0EgfHwgUENJKSAmJiBTQ1NJICYmIEJST0tFTgorCWRlcGVuZHMgb24gU0NTSQorCWRlcGVuZHMgb24gSVNBIHx8IEVJU0EgfHwgUENJCisJZGVwZW5kcyBvbiBCUk9LRU4gfHwgWDg2XzMyCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgYWxsIFNDU0kgaG9zdCBhZGFwdGVycyBtYW51ZmFjdHVyZWQgYnkKIAkgIEFkdmFuU3lzLiBJdCBpcyBkb2N1bWVudGVkIGluIHRoZSBrZXJuZWwgc291cmNlIGluCkBAIC0xMDc5LDcgKzEwODEsNyBAQAogCSAgbWVtb3J5IHVzaW5nIFBDSSBEQUMgY3ljbGVzLgogCiBjb25maWcgU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTCi0JaW50ICJkZWZhdWx0IHRhZ2dlZCBjb21tYW5kIHF1ZXVlIGRlcHRoIgorCWludCAiRGVmYXVsdCB0YWdnZWQgY29tbWFuZCBxdWV1ZSBkZXB0aCIKIAlkZXBlbmRzIG9uIFNDU0lfU1lNNTNDOFhYXzIKIAlkZWZhdWx0ICIxNiIKIAloZWxwCkBAIC0xMDkwLDcgKzEwOTIsNyBAQAogCSAgZXhjZWVkIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUy4KIAogY29uZmlnIFNDU0lfU1lNNTNDOFhYX01BWF9UQUdTCi0JaW50ICJtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29tbWFuZHMiCisJaW50ICJNYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29tbWFuZHMiCiAJZGVwZW5kcyBvbiBTQ1NJX1NZTTUzQzhYWF8yCiAJZGVmYXVsdCAiNjQiCiAJaGVscApAQCAtMTA5OSwxMyArMTEwMSwxNCBAQAogCSAgcG9zc2libGUuIFRoZSBkcml2ZXIgc3VwcG9ydHMgdXAgdG8gMjU2IHF1ZXVlZCBjb21tYW5kcyBwZXIgZGV2aWNlLgogCSAgVGhpcyB2YWx1ZSBpcyB1c2VkIGFzIGEgY29tcGlsZWQtaW4gaGFyZCBsaW1pdC4KIAotY29uZmlnIFNDU0lfU1lNNTNDOFhYX0lPTUFQUEVECi0JYm9vbCAidXNlIHBvcnQgSU8iCitjb25maWcgU0NTSV9TWU01M0M4WFhfTU1JTworCWJvb2wgIlVzZSBtZW1vcnkgbWFwcGVkIElPIgogCWRlcGVuZHMgb24gU0NTSV9TWU01M0M4WFhfMgorCWRlZmF1bHQgeQogCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgZHJpdmVyIHdpbGwgdXNlIHBvcnQgSU8gdG8gYWNjZXNzCi0JICB0aGUgY2FyZC4gIFRoaXMgaXMgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhlbiB1c2luZyBtZW1vcnkKLQkgIG1hcHBlZCBJTy4gIE1vc3QgcGVvcGxlIHNob3VsZCBhbnN3ZXIgTi4KKwkgIE1lbW9yeSBtYXBwZWQgSU8gaXMgZmFzdGVyIHRoYW4gUG9ydCBJTy4gIE1vc3QgcGVvcGxlIHNob3VsZAorCSAgYW5zd2VyIFkgaGVyZSwgYnV0IHNvbWUgbWFjaGluZXMgbWF5IGhhdmUgcHJvYmxlbXMuICBJZiB5b3UgaGF2ZQorCSAgdG8gYW5zd2VyIE4gaGVyZSwgcGxlYXNlIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB0aGUgbWFpbnRhaW5lci4KIAogY29uZmlnIFNDU0lfSVBSCiAJdHJpc3RhdGUgIklCTSBQb3dlciBMaW51eCBSQUlEIGFkYXB0ZXIgc3VwcG9ydCIKQEAgLTEzMDksMTUgKzEzMTIsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcWxvZ2ljZmFzLgogCi1jb25maWcgU0NTSV9RTE9HSUNfRkMKLQl0cmlzdGF0ZSAiUWxvZ2ljIElTUCBGQyBTQ1NJIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQotCWhlbHAKLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBRTG9naWMgSVNQMjEwMCBTQ1NJLUZDUCBob3N0IGFkYXB0ZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHFsb2dpY2ZjLgotCiBjb25maWcgU0NTSV9RTE9HSUNfRkNfRklSTVdBUkUKIAlib29sICJJbmNsdWRlIGxvYWRhYmxlIGZpcm13YXJlIGluIGRyaXZlciIKIAlkZXBlbmRzIG9uIFNDU0lfUUxPR0lDX0ZDCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggZTUxM2MzMS4uODE4MDNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtNzgsNyArNzgsNiBAQAogb2JqLSQoQ09ORklHX1NDU0lfU1lNNTNDNDE2KQkrPSBzeW01M2M0MTYubwogb2JqLSQoQ09ORklHX1NDU0lfUUxPR0lDX0ZBUykJKz0gcWxvZ2ljZmFzNDA4Lm8JcWxvZ2ljZmFzLm8KIG9iai0kKENPTkZJR19QQ01DSUFfUUxPR0lDKQkrPSBxbG9naWNmYXM0MDgubwotb2JqLSQoQ09ORklHX1NDU0lfUUxPR0lDX0ZDKQkrPSBxbG9naWNmYy5vIAogb2JqLSQoQ09ORklHX1NDU0lfUUxPR0lDXzEyODApCSs9IHFsYTEyODAubyAKIG9iai0kKENPTkZJR19TQ1NJX1FMQV9GQykJKz0gcWxhMnh4eC8KIG9iai0kKENPTkZJR19TQ1NJX0xQRkMpCQkrPSBscGZjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYwppbmRleCA4ZGY0YTBlLi42NDJhM2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYwpAQCAtMTQ5LDIwICsxNDksMjAgQEAKIAogc3RhdGljIGludCBjb21taXQgPSAtMTsKIAotbW9kdWxlX3BhcmFtKG5vbmRhc2QsIGludCwgMCk7Cittb2R1bGVfcGFyYW0obm9uZGFzZCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhub25kYXNkLCAiQ29udHJvbCBzY2FubmluZyBvZiBoYmEgZm9yIG5vbmRhc2QgZGV2aWNlcy4gMD1vZmYsIDE9b24iKTsKLW1vZHVsZV9wYXJhbShkYWNtb2RlLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGRhY21vZGUsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGFjbW9kZSwgIkNvbnRyb2wgd2hldGhlciBkbWEgYWRkcmVzc2luZyBpcyB1c2luZyA2NCBiaXQgREFDLiAwPW9mZiwgMT1vbiIpOwotbW9kdWxlX3BhcmFtKGNvbW1pdCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShjb21taXQsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoY29tbWl0LCAiQ29udHJvbCB3aGV0aGVyIGEgQ09NTUlUX0NPTkZJRyBpcyBpc3N1ZWQgdG8gdGhlIGFkYXB0ZXIgZm9yIGZvcmVpZ24gYXJyYXlzLlxuVGhpcyBpcyB0eXBpY2FsbHkgbmVlZGVkIGluIHN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZSBhIEJJT1MuIDA9b2ZmLCAxPW9uIik7CiAKIGludCBudW1hY2IgPSAtMTsKIG1vZHVsZV9wYXJhbShudW1hY2IsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MobnVtYWNiLCAiUmVxdWVzdCBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgYWRhcHRlciBjb250cm9sIGJsb2NrcyAoRklCKSBhbGxvY2F0ZWQuIFZhbGlkXG52YWx1ZXMgYXJlIDUxMiBhbmQgZG93bi4gRGVmYXVsdCBpcyB0byB1c2Ugc3VnZ2VzdGlvbiBmcm9tIEZpcm13YXJlLiIpOworTU9EVUxFX1BBUk1fREVTQyhudW1hY2IsICJSZXF1ZXN0IGEgbGltaXQgdG8gdGhlIG51bWJlciBvZiBhZGFwdGVyIGNvbnRyb2wgYmxvY2tzIChGSUIpIGFsbG9jYXRlZC4gVmFsaWQgdmFsdWVzIGFyZSA1MTIgYW5kIGRvd24uIERlZmF1bHQgaXMgdG8gdXNlIHN1Z2dlc3Rpb24gZnJvbSBGaXJtd2FyZS4iKTsKIAogaW50IGFjYnNpemUgPSAtMTsKIG1vZHVsZV9wYXJhbShhY2JzaXplLCBpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGFjYnNpemUsICJSZXF1ZXN0IGEgc3BlY2lmaWMgYWRhcHRlciBjb250cm9sIGJsb2NrIChGSUIpIHNpemUuIFZhbGlkIHZhbHVlcyBhcmUgNTEyLFxuMjA0OCwgNDA5NiBhbmQgODE5Mi4gRGVmYXVsdCBpcyB0byB1c2Ugc3VnZ2VzdGlvbiBmcm9tIEZpcm13YXJlLiIpOworTU9EVUxFX1BBUk1fREVTQyhhY2JzaXplLCAiUmVxdWVzdCBhIHNwZWNpZmljIGFkYXB0ZXIgY29udHJvbCBibG9jayAoRklCKSBzaXplLiBWYWxpZCB2YWx1ZXMgYXJlIDUxMiwgMjA0OCwgNDA5NiBhbmQgODE5Mi4gRGVmYXVsdCBpcyB0byB1c2Ugc3VnZ2VzdGlvbiBmcm9tIEZpcm13YXJlLiIpOwogLyoqCiAgKglhYWNfZ2V0X2NvbmZpZ19zdGF0dXMJLQljaGVjayB0aGUgYWRhcHRlciBjb25maWd1cmF0aW9uCiAgKglAY29tbW9uOiBhZGFwdGVyIHRvIHF1ZXJ5CkBAIC0zODcsNiArMzg3LDcgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICogc2NzaWNtZDsKIAogCXNjc2ljbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjb250ZXh0OworCXNjc2ljbWQtPlNDcC5waGFzZSA9IEFBQ19PV05FUl9NSURMRVZFTDsKIAogCWRwcmludGsoKEtFUk5fREVCVUcgImdldF9jb250YWluZXJfbmFtZV9jYWxsYmFja1tjcHUgJWRdOiB0ID0gJWxkLlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBqaWZmaWVzKSk7CiAJaWYgKGZpYnB0ciA9PSBOVUxMKQpAQCAtNDUzLDggKzQ1NCwxMCBAQAogCS8qCiAJICoJQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCBxdWV1ZWQgdG8gdGhlIGNvbnRyb2xsZXIKIAkgKi8KLQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgCisJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX0ZJUk1XQVJFOwogCQlyZXR1cm4gMDsKKwl9CiAJCQogCXByaW50ayhLRVJOX1dBUk5JTkcgImFhY19nZXRfY29udGFpbmVyX25hbWU6IGFhY19maWJfc2VuZCBmYWlsZWQgd2l0aCBzdGF0dXM6ICVkLlxuIiwgc3RhdHVzKTsKIAlhYWNfZmliX2NvbXBsZXRlKGNtZF9maWJjb250ZXh0KTsKQEAgLTkwNyw5ICs5MTAsMTAgQEAKIAl1MzIgY2lkOwogCiAJc2NzaWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNvbnRleHQ7CisJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX01JRExFVkVMOwogCiAJZGV2ID0gKHN0cnVjdCBhYWNfZGV2ICopc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQljaWQgPSBJRF9MVU5fVE9fQ09OVEFJTkVSKHNjc2ljbWQtPmRldmljZS0+aWQsIHNjc2ljbWQtPmRldmljZS0+bHVuKTsKKwljaWQgPSBzY21kX2lkKHNjc2ljbWQpOwogCiAJaWYgKG5ibGFuayhkcHJpbnRrKHgpKSkgewogCQl1NjQgbGJhOwpAQCAtMTE1MSw4ICsxMTU1LDEwIEBACiAJLyoKIAkgKglDaGVjayB0aGF0IHRoZSBjb21tYW5kIHF1ZXVlZCB0byB0aGUgY29udHJvbGxlcgogCSAqLwotCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSAKKwlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfRklSTVdBUkU7CiAJCXJldHVybiAwOworCX0KIAkJCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiYWFjX3JlYWQ6IGFhY19maWJfc2VuZCBmYWlsZWQgd2l0aCBzdGF0dXM6ICVkLlxuIiwgc3RhdHVzKTsKIAkvKgpAQCAtMTMxOCw4ICsxMzI0LDggQEAKIAkvKgogCSAqCUNoZWNrIHRoYXQgdGhlIGNvbW1hbmQgcXVldWVkIHRvIHRoZSBjb250cm9sbGVyCiAJICovCi0JaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCi0JeworCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCXNjc2ljbWQtPlNDcC5waGFzZSA9IEFBQ19PV05FUl9GSVJNV0FSRTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMzQxLDYgKzEzNDcsNyBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKIAogCWNtZCA9IGNvbnRleHQ7CisJY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfTUlETEVWRUw7CiAKIAlkcHJpbnRrKChLRVJOX0RFQlVHICJzeW5jaHJvbml6ZV9jYWxsYmFja1tjcHUgJWRdOiB0ID0gJWxkLlxuIiwgCiAJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBqaWZmaWVzKSk7CkBAIC0xMzU0LDcgKzEzNjEsNyBAQAogCWVsc2UgewogCQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmljZTsKIAkJc3RydWN0IGFhY19kZXYgKmRldiA9IChzdHJ1Y3QgYWFjX2RldiAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOwotCQl1MzIgY2lkID0gSURfTFVOX1RPX0NPTlRBSU5FUihzZGV2LT5pZCwgc2Rldi0+bHVuKTsKKwkJdTMyIGNpZCA9IHNkZXZfaWQoc2Rldik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCSAgICAgInN5bmNocm9uaXplX2NhbGxiYWNrOiBzeW5jaHJvbml6ZSBmYWlsZWQsIHN0YXR1cyA9ICVkXG4iLAogCQkgICAgIGxlMzJfdG9fY3B1KHN5bmNocm9uaXplcmVwbHktPnN0YXR1cykpOwpAQCAtMTM4NiwxMiArMTM5MywxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgotCSAqIFdhaXQgZm9yIGFsbCBjb21tYW5kcyB0byBjb21wbGV0ZSB0byB0aGlzIHNwZWNpZmljCi0JICogdGFyZ2V0IChibG9jaykuCisJICogV2FpdCBmb3IgYWxsIG91dHN0YW5kaW5nIHF1ZXVlZCBjb21tYW5kcyB0byBjb21wbGV0ZSB0byB0aGlzCisJICogc3BlY2lmaWMgdGFyZ2V0IChibG9jaykuCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPmxpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY21kLCAmc2Rldi0+Y21kX2xpc3QsIGxpc3QpCi0JCWlmIChjbWQgIT0gc2NzaWNtZCAmJiBjbWQtPnNlcmlhbF9udW1iZXIgIT0gMCkgeworCQlpZiAoY21kICE9IHNjc2ljbWQgJiYgY21kLT5TQ3AucGhhc2UgPT0gQUFDX09XTkVSX0ZJUk1XQVJFKSB7CiAJCQkrK2FjdGl2ZTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNDM0LDggKzE0NDEsMTAgQEAKIAkvKgogCSAqCUNoZWNrIHRoYXQgdGhlIGNvbW1hbmQgcXVldWVkIHRvIHRoZSBjb250cm9sbGVyCiAJICovCi0JaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX0ZJUk1XQVJFOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HIAogCQkiYWFjX3N5bmNocm9uaXplOiBhYWNfZmliX3NlbmQgZmFpbGVkIHdpdGggc3RhdHVzOiAlZC5cbiIsIHN0YXR1cyk7CkBAIC0xNDU4LDcgKzE0NjcsNiBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBzY3NpY21kLT5kZXZpY2UtPmhvc3Q7CiAJc3RydWN0IGFhY19kZXYgKmRldiA9IChzdHJ1Y3QgYWFjX2RldiAqKWhvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBmc2FfZGV2X2luZm8gKmZzYV9kZXZfcHRyID0gZGV2LT5mc2FfZGV2OwotCWludCByZXQ7CiAJCiAJLyoKIAkgKglJZiB0aGUgYnVzLCBpZCBvciBsdW4gaXMgb3V0IG9mIHJhbmdlLCByZXR1cm4gZmFpbApAQCAtMTQ2NiwxMyArMTQ3NCwxNCBAQAogCSAqCWl0c2VsZi4KIAkgKi8KIAlpZiAoc2NtZF9pZChzY3NpY21kKSAhPSBob3N0LT50aGlzX2lkKSB7Ci0JCWlmICgoc2NzaWNtZC0+ZGV2aWNlLT5jaGFubmVsID09IENPTlRBSU5FUl9DSEFOTkVMKSkgewotCQkJaWYoIChzY3NpY21kLT5kZXZpY2UtPmlkID49IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVycykgfHwgKHNjc2ljbWQtPmRldmljZS0+bHVuICE9IDApKXsgCisJCWlmICgoc2NtZF9jaGFubmVsKHNjc2ljbWQpID09IENPTlRBSU5FUl9DSEFOTkVMKSkgeworCQkJaWYoKHNjbWRfaWQoc2NzaWNtZCkgPj0gZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzKSB8fAorCQkJCQkoc2NzaWNtZC0+ZGV2aWNlLT5sdW4gIT0gMCkpIHsKIAkJCQlzY3NpY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAkJCQlzY3NpY21kLT5zY3NpX2RvbmUoc2NzaWNtZCk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQljaWQgPSBJRF9MVU5fVE9fQ09OVEFJTkVSKHNjc2ljbWQtPmRldmljZS0+aWQsIHNjc2ljbWQtPmRldmljZS0+bHVuKTsKKwkJCWNpZCA9IHNjbWRfaWQoc2NzaWNtZCk7CiAKIAkJCS8qCiAJCQkgKglJZiB0aGUgdGFyZ2V0IGNvbnRhaW5lciBkb2Vzbid0IGV4aXN0LCBpdCBtYXkgaGF2ZQpAQCAtMTU0OCw3ICsxNTU3LDcgQEAKIAl7CiAJCXN0cnVjdCBpbnF1aXJ5X2RhdGEgaW5xX2RhdGE7CiAKLQkJZHByaW50aygoS0VSTl9ERUJVRyAiSU5RVUlSWSBjb21tYW5kLCBJRDogJWQuXG4iLCBzY3NpY21kLT5kZXZpY2UtPmlkKSk7CisJCWRwcmludGsoKEtFUk5fREVCVUcgIklOUVVJUlkgY29tbWFuZCwgSUQ6ICVkLlxuIiwgc2NtZF9pZChzY3NpY21kKSkpOwogCQltZW1zZXQoJmlucV9kYXRhLCAwLCBzaXplb2YgKHN0cnVjdCBpbnF1aXJ5X2RhdGEpKTsKIAogCQlpbnFfZGF0YS5pbnFkX3ZlciA9IDI7CS8qIGNsYWltIGNvbXBsaWFuY2UgdG8gU0NTSS0yICovCkBAIC0xNTk4LDEzICsxNjA3LDE0IEBACiAJCWNwWzExXSA9IDA7CiAJCWNwWzEyXSA9IDA7CiAJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCBjcCwgMCwKLQkJICBtaW4oKHVuc2lnbmVkIGludClzY3NpY21kLT5jbW5kWzEzXSwgc2l6ZW9mKGNwKSkpOworCQkgIG1pbl90KHNpemVfdCwgc2NzaWNtZC0+Y21uZFsxM10sIHNpemVvZihjcCkpKTsKIAkJaWYgKHNpemVvZihjcCkgPCBzY3NpY21kLT5jbW5kWzEzXSkgewogCQkJdW5zaWduZWQgaW50IGxlbiwgb2Zmc2V0ID0gc2l6ZW9mKGNwKTsKIAogCQkJbWVtc2V0KGNwLCAwLCBvZmZzZXQpOwogCQkJZG8gewotCQkJCWxlbiA9IG1pbihzY3NpY21kLT5jbW5kWzEzXS1vZmZzZXQsIHNpemVvZihjcCkpOworCQkJCWxlbiA9IG1pbl90KHNpemVfdCwgc2NzaWNtZC0+Y21uZFsxM10gLSBvZmZzZXQsCisJCQkJCQlzaXplb2YoY3ApKTsKIAkJCQlhYWNfaW50ZXJuYWxfdHJhbnNmZXIoc2NzaWNtZCwgY3AsIG9mZnNldCwgbGVuKTsKIAkJCX0gd2hpbGUgKChvZmZzZXQgKz0gbGVuKSA8IHNjc2ljbWQtPmNtbmRbMTNdKTsKIAkJfQpAQCAtMTcyOCwyNCArMTczOCwxOSBAQAogCQkJICoJY29udGFpbmVycyB0byAvZGV2L3NkIGRldmljZSBuYW1lcwogCQkJICovCiAJCQkgCi0JCQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKIAkJCWlmIChzY3NpY21kLT5yZXF1ZXN0LT5ycV9kaXNrKQogCQkJCXN0cmxjcHkoZnNhX2Rldl9wdHJbY2lkXS5kZXZuYW1lLAogCQkJCXNjc2ljbWQtPnJlcXVlc3QtPnJxX2Rpc2stPmRpc2tfbmFtZSwKIAkJCSAgCW1pbihzaXplb2YoZnNhX2Rldl9wdHJbY2lkXS5kZXZuYW1lKSwKIAkJCQlzaXplb2Yoc2NzaWNtZC0+cmVxdWVzdC0+cnFfZGlzay0+ZGlza19uYW1lKSArIDEpKTsKLQkJCXJldCA9IGFhY19yZWFkKHNjc2ljbWQsIGNpZCk7Ci0JCQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7Ci0JCQlyZXR1cm4gcmV0OworCisJCQlyZXR1cm4gYWFjX3JlYWQoc2NzaWNtZCwgY2lkKTsKIAogCQljYXNlIFdSSVRFXzY6CiAJCWNhc2UgV1JJVEVfMTA6CiAJCWNhc2UgV1JJVEVfMTI6CiAJCWNhc2UgV1JJVEVfMTY6Ci0JCQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKLQkJCXJldCA9IGFhY193cml0ZShzY3NpY21kLCBjaWQpOwotCQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwotCQkJcmV0dXJuIHJldDsKKwkJCXJldHVybiBhYWNfd3JpdGUoc2NzaWNtZCwgY2lkKTsKIAogCQljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgogCQkJLyogSXNzdWUgRklCIHRvIHRlbGwgRmlybXdhcmUgdG8gZmx1c2ggaXQncyBjYWNoZSAqLwpAQCAtMTc3OCw3ICsxNzgzLDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnFkLCBhcmcsIHNpemVvZiAoc3RydWN0IGFhY19xdWVyeV9kaXNrKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChxZC5jbnVtID09IC0xKQotCQlxZC5jbnVtID0gSURfTFVOX1RPX0NPTlRBSU5FUihxZC5pZCwgcWQubHVuKTsKKwkJcWQuY251bSA9IHFkLmlkOwogCWVsc2UgaWYgKChxZC5idXMgPT0gLTEpICYmIChxZC5pZCA9PSAtMSkgJiYgKHFkLmx1biA9PSAtMSkpIAogCXsKIAkJaWYgKHFkLmNudW0gPCAwIHx8IHFkLmNudW0gPj0gZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzKQpAQCAtMTg5MCw2ICsxODk1LDcgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kOwogCiAJc2NzaWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNvbnRleHQ7CisJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX01JRExFVkVMOwogCWRldiA9IChzdHJ1Y3QgYWFjX2RldiAqKXNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKIAlpZiAoZmlicHRyID09IE5VTEwpCkBAIC0yMDY4LDE0ICsyMDc0LDEzIEBACiAJdTMyIHRpbWVvdXQ7CiAKIAlkZXYgPSAoc3RydWN0IGFhY19kZXYgKilzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwotCWlmIChzY3NpY21kLT5kZXZpY2UtPmlkID49IGRldi0+bWF4aW11bV9udW1fcGh5c2ljYWxzIHx8IAorCWlmIChzY21kX2lkKHNjc2ljbWQpID49IGRldi0+bWF4aW11bV9udW1fcGh5c2ljYWxzIHx8CiAJCQlzY3NpY21kLT5kZXZpY2UtPmx1biA+IDcpIHsKIAkJc2NzaWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCXNjc2ljbWQtPnNjc2lfZG9uZShzY3NpY21kKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2ID0gKHN0cnVjdCBhYWNfZGV2ICopc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAlzd2l0Y2goc2NzaWNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pewogCWNhc2UgRE1BX1RPX0RFVklDRToKIAkJZmxhZyA9IFNSQl9EYXRhT3V0OwpAQCAtMjEwMyw4ICsyMTA4LDggQEAKIAogCXNyYmNtZCA9IChzdHJ1Y3QgYWFjX3NyYiopIGZpYl9kYXRhKGNtZF9maWJjb250ZXh0KTsKIAlzcmJjbWQtPmZ1bmN0aW9uID0gY3B1X3RvX2xlMzIoU1JCRl9FeGVjdXRlU2NzaSk7Ci0Jc3JiY21kLT5jaGFubmVsICA9IGNwdV90b19sZTMyKGFhY19sb2dpY2FsX3RvX3BoeXMoc2NzaWNtZC0+ZGV2aWNlLT5jaGFubmVsKSk7Ci0Jc3JiY21kLT5pZCAgID0gY3B1X3RvX2xlMzIoc2NzaWNtZC0+ZGV2aWNlLT5pZCk7CisJc3JiY21kLT5jaGFubmVsICA9IGNwdV90b19sZTMyKGFhY19sb2dpY2FsX3RvX3BoeXMoc2NtZF9jaGFubmVsKHNjc2ljbWQpKSk7CisJc3JiY21kLT5pZCAgID0gY3B1X3RvX2xlMzIoc2NtZF9pZChzY3NpY21kKSk7CiAJc3JiY21kLT5sdW4gICAgICA9IGNwdV90b19sZTMyKHNjc2ljbWQtPmRldmljZS0+bHVuKTsKIAlzcmJjbWQtPmZsYWdzICAgID0gY3B1X3RvX2xlMzIoZmxhZyk7CiAJdGltZW91dCA9IHNjc2ljbWQtPnRpbWVvdXRfcGVyX2NvbW1hbmQvSFo7CkBAIC0yMTYxLDcgKzIxNjYsOCBAQAogCS8qCiAJICoJQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCBxdWV1ZWQgdG8gdGhlIGNvbnRyb2xsZXIKIAkgKi8KLQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUyl7CisJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX0ZJUk1XQVJFOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIxOTIsOCArMjE5OCw2IEBACiAJCQlzY3NpY21kLT5zY19kYXRhX2RpcmVjdGlvbik7CiAJCXBzZy0+Y291bnQgPSBjcHVfdG9fbGUzMihzZ19jb3VudCk7CiAKLQkJYnl0ZV9jb3VudCA9IDA7Ci0KIAkJZm9yIChpID0gMDsgaSA8IHNnX2NvdW50OyBpKyspIHsKIAkJCXBzZy0+c2dbaV0uYWRkciA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CiAJCQlwc2ctPnNnW2ldLmNvdW50ID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOwpAQCAtMjI0OSwxOCArMjI1MywxNyBAQAogCiAJCXNnX2NvdW50ID0gcGNpX21hcF9zZyhkZXYtPnBkZXYsIHNnLCBzY3NpY21kLT51c2Vfc2csCiAJCQlzY3NpY21kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0JCXBzZy0+Y291bnQgPSBjcHVfdG9fbGUzMihzZ19jb3VudCk7Ci0KLQkJYnl0ZV9jb3VudCA9IDA7CiAKIAkJZm9yIChpID0gMDsgaSA8IHNnX2NvdW50OyBpKyspIHsKKwkJCWludCBjb3VudCA9IHNnX2RtYV9sZW4oc2cpOwogCQkJYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKIAkJCXBzZy0+c2dbaV0uYWRkclswXSA9IGNwdV90b19sZTMyKGFkZHIgJiAweGZmZmZmZmZmKTsKIAkJCXBzZy0+c2dbaV0uYWRkclsxXSA9IGNwdV90b19sZTMyKGFkZHI+PjMyKTsKLQkJCXBzZy0+c2dbaV0uY291bnQgPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7Ci0JCQlieXRlX2NvdW50ICs9IHNnX2RtYV9sZW4oc2cpOworCQkJcHNnLT5zZ1tpXS5jb3VudCA9IGNwdV90b19sZTMyKGNvdW50KTsKKwkJCWJ5dGVfY291bnQgKz0gY291bnQ7CiAJCQlzZysrOwogCQl9CisJCXBzZy0+Y291bnQgPSBjcHVfdG9fbGUzMihzZ19jb3VudCk7CiAJCS8qIGhiYSB3YW50cyB0aGUgc2l6ZSB0byBiZSBleGFjdCAqLwogCQlpZihieXRlX2NvdW50ID4gc2NzaWNtZC0+cmVxdWVzdF9idWZmbGVuKXsKIAkJCXUzMiB0ZW1wID0gbGUzMl90b19jcHUocHNnLT5zZ1tpLTFdLmNvdW50KSAtIApAQCAtMjI3NSwxNiArMjI3OCwxNSBAQAogCQl9CiAJfQogCWVsc2UgaWYoc2NzaWNtZC0+cmVxdWVzdF9idWZmbGVuKSB7Ci0JCXU2NCBhZGRyOyAKLQkJYWRkciA9IHBjaV9tYXBfc2luZ2xlKGRldi0+cGRldiwKKwkJc2NzaWNtZC0+U0NwLmRtYV9oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsCiAJCQkJc2NzaWNtZC0+cmVxdWVzdF9idWZmZXIsCiAJCQkJc2NzaWNtZC0+cmVxdWVzdF9idWZmbGVuLAogCQkJCXNjc2ljbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKKwkJYWRkciA9IHNjc2ljbWQtPlNDcC5kbWFfaGFuZGxlOwogCQlwc2ctPmNvdW50ID0gY3B1X3RvX2xlMzIoMSk7CiAJCXBzZy0+c2dbMF0uYWRkclswXSA9IGNwdV90b19sZTMyKGFkZHIgJiAweGZmZmZmZmZmKTsKIAkJcHNnLT5zZ1swXS5hZGRyWzFdID0gY3B1X3RvX2xlMzIoYWRkciA+PiAzMik7CiAJCXBzZy0+c2dbMF0uY291bnQgPSBjcHVfdG9fbGUzMihzY3NpY21kLT5yZXF1ZXN0X2J1ZmZsZW4pOyAgCi0JCXNjc2ljbWQtPlNDcC5kbWFfaGFuZGxlID0gYWRkcjsKIAkJYnl0ZV9jb3VudCA9IHNjc2ljbWQtPnJlcXVlc3RfYnVmZmxlbjsKIAl9CiAJcmV0dXJuIGJ5dGVfY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmggYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKaW5kZXggOWNlNzAwMi4uZjc3M2IwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaApAQCAtMTAsNiArMTAsMTAgQEAKICAqICAgICAgICAgICAgICBEIEUgRiBJIE4gRSBTCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWZuZGVmIEFBQ19EUklWRVJfQlVJTEQKKyMgZGVmaW5lIEFBQ19EUklWRVJfQlVJTEQgMjQwOQorIyBkZWZpbmUgQUFDX0RSSVZFUl9CUkFOQ0ggIi1taDEiCisjZW5kaWYKICNkZWZpbmUgTUFYSU1VTV9OVU1fQ09OVEFJTkVSUwkzMgogCiAjZGVmaW5lIEFBQ19OVU1fTUdUX0ZJQiAgICAgICAgIDgKQEAgLTI1LDcgKzI5LDYgQEAKICAqIFRoZXNlIG1hY3JvcyBjb252ZXJ0IGZyb20gcGh5c2ljYWwgY2hhbm5lbHMgdG8gdmlydHVhbCBjaGFubmVscwogICovCiAjZGVmaW5lIENPTlRBSU5FUl9DSEFOTkVMCQkoMCkKLSNkZWZpbmUgSURfTFVOX1RPX0NPTlRBSU5FUihpZCwgbHVuKQkoaWQpCiAjZGVmaW5lIENPTlRBSU5FUl9UT19DSEFOTkVMKGNvbnQpCShDT05UQUlORVJfQ0hBTk5FTCkKICNkZWZpbmUgQ09OVEFJTkVSX1RPX0lEKGNvbnQpCQkoY29udCkKICNkZWZpbmUgQ09OVEFJTkVSX1RPX0xVTihjb250KQkJKDApCkBAIC03ODksNiArNzkyLDcgQEAKIAl1NjQJCXNpemU7CiAJdTMyCQl0eXBlOwogCXUzMgkJY29uZmlnX3dhaXRpbmdfb247CisJdW5zaWduZWQgbG9uZwljb25maWdfd2FpdGluZ19zdGFtcDsKIAl1MTYJCXF1ZXVlX2RlcHRoOwogCXU4CQljb25maWdfbmVlZGVkOwogCXU4CQl2YWxpZDsKQEAgLTE3NzEsNiArMTc3NSwxMSBAQAogfQogCiBzdHJ1Y3Qgc2NzaV9jbW5kOworLyogU0NwLnBoYXNlIHZhbHVlcyAqLworI2RlZmluZSBBQUNfT1dORVJfTUlETEVWRUwJMHgxMDEKKyNkZWZpbmUgQUFDX09XTkVSX0xPV0xFVkVMCTB4MTAyCisjZGVmaW5lIEFBQ19PV05FUl9FUlJPUl9IQU5ETEVSCTB4MTAzCisjZGVmaW5lIEFBQ19PV05FUl9GSVJNV0FSRQkweDEwNgogCiBjb25zdCBjaGFyICphYWNfZHJpdmVyaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwogc3RydWN0IGZpYiAqYWFjX2ZpYl9hbGxvYyhzdHJ1Y3QgYWFjX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1jdHJsLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tY3RybC5jCmluZGV4IDQ3ZmVmY2EuLjlmNzUxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1jdHJsLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWN0cmwuYwpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0yOTMsNiArMjk1LDE2IEBACiAJCXN0YXR1cyA9IDA7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5maWJfbG9jaywgZmxhZ3MpOworCQkvKiBJZiBzb21lb25lIGtpbGxlZCB0aGUgQUlGIGFhY3JhaWQgdGhyZWFkLCByZXN0YXJ0IGl0ICovCisJCXN0YXR1cyA9ICFkZXYtPmFpZl90aHJlYWQ7CisJCWlmIChzdGF0dXMgJiYgZGV2LT5xdWV1ZXMgJiYgZGV2LT5mc2FfZGV2KSB7CisJCQkvKiBCZSBwYXJhbm9pZCwgYmUgdmVyeSBwYXJhbm9pZCEgKi8KKwkJCWt0aHJlYWRfc3RvcChkZXYtPnRocmVhZCk7CisJCQlzc2xlZXAoMSk7CisJCQlkZXYtPmFpZl90aHJlYWQgPSAwOworCQkJZGV2LT50aHJlYWQgPSBrdGhyZWFkX3J1bihhYWNfY29tbWFuZF90aHJlYWQsIGRldiwgZGV2LT5uYW1lKTsKKwkJCXNzbGVlcCgxKTsKKwkJfQogCQlpZiAoZi53YWl0KSB7CiAJCQlpZihkb3duX2ludGVycnVwdGlibGUoJmZpYmN0eC0+d2FpdF9zZW0pIDwgMCkgewogCQkJCXN0YXR1cyA9IC1FSU5UUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYwppbmRleCBjN2Y4MGVjLi45ZjlmNGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCkBAIC03NjcsOSArNzY3LDkgQEAKIAkJaWYgKGNwW2xlbmd0aF0gIT0gMCkKIAkJCWNwW2xlbmd0aF0gPSAwOwogCQlpZiAobGV2ZWwgPT0gTE9HX0FBQ19ISUdIX0VSUk9SKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWFjcmFpZDolcyIsIGNwKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiVzIiwgZGV2LT5uYW1lLCBjcCk7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gImFhY3JhaWQ6JXMiLCBjcCk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczolcyIsIGRldi0+bmFtZSwgY3ApOwogCX0KIAltZW1zZXQoY3AsIDAsICAyNTYpOwogfQpAQCAtNzg0LDYgKzc4NCw3IEBACiAgKglkaXNwYXRjaGVzIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSByb3V0aW5lIGZvciBoYW5kbGluZy4KICAqLwogCisjZGVmaW5lIEFJRl9TTklGRl9USU1FT1VUCSgzMCpIWikKIHN0YXRpYyB2b2lkIGFhY19oYW5kbGVfYWlmKHN0cnVjdCBhYWNfZGV2ICogZGV2LCBzdHJ1Y3QgZmliICogZmlicHRyKQogewogCXN0cnVjdCBod19maWIgKiBod19maWIgPSBmaWJwdHItPmh3X2ZpYjsKQEAgLTgzNyw2ICs4MzgsNyBAQAogCQkJCWlmIChkZXZpY2UpIHsKIAkJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IENIQU5HRTsKIAkJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPSBBaWZFbkNvbmZpZ0NoYW5nZTsKKwkJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgPSBqaWZmaWVzOwogCQkJCQlzY3NpX2RldmljZV9wdXQoZGV2aWNlKTsKIAkJCQl9CiAJCQl9CkBAIC04NDksMTMgKzg1MSwxNSBAQAogCQlpZiAoY29udGFpbmVyICE9ICh1MzIpLTEpIHsKIAkJCWlmIChjb250YWluZXIgPj0gZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzKQogCQkJCWJyZWFrOwotCQkJaWYgKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09Ci0JCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKQorCQkJaWYgKChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9PQorCQkJICAgIGxlMzJfdG9fY3B1KCoodTMyICopYWlmY21kLT5kYXRhKSkgJiYKKwkJCSB0aW1lX2JlZm9yZShqaWZmaWVzLCBkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCArIEFJRl9TTklGRl9USU1FT1VUKSkKIAkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9IDA7CiAJCX0gZWxzZSBmb3IgKGNvbnRhaW5lciA9IDA7CiAJCSAgICBjb250YWluZXIgPCBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnM7ICsrY29udGFpbmVyKSB7Ci0JCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KLQkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpCisJCQlpZiAoKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09CisJCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKSAmJgorCQkJIHRpbWVfYmVmb3JlKGppZmZpZXMsIGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wICsgQUlGX1NOSUZGX1RJTUVPVVQpKQogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTg3Miw2ICs4NzYsNyBAQAogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IEFERDsKIAkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0KIAkJCQlBaWZFbkNvbmZpZ0NoYW5nZTsKKwkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wID0gamlmZmllczsKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC04ODQsNiArODg5LDcgQEAKIAkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ19uZWVkZWQgPSBERUxFVEU7CiAJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9CiAJCQkJQWlmRW5Db25maWdDaGFuZ2U7CisJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCA9IGppZmZpZXM7CiAJCQlicmVhazsKIAogCQkvKgpAQCAtODk0LDExICs5MDAsMTMgQEAKIAkJCWNvbnRhaW5lciA9IGxlMzJfdG9fY3B1KCgodTMyICopYWlmY21kLT5kYXRhKVsxXSk7CiAJCQlpZiAoY29udGFpbmVyID49IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVycykKIAkJCQlicmVhazsKLQkJCWlmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbikKKwkJCWlmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiAmJgorCQkJIHRpbWVfYmVmb3JlKGppZmZpZXMsIGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wICsgQUlGX1NOSUZGX1RJTUVPVVQpKQogCQkJCWJyZWFrOwogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IENIQU5HRTsKIAkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0KIAkJCQlBaWZFbkNvbmZpZ0NoYW5nZTsKKwkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wID0gamlmZmllczsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQWlmRW5Db25maWdDaGFuZ2U6CkBAIC05MTMsMTMgKzkyMSwxNSBAQAogCQlpZiAoY29udGFpbmVyICE9ICh1MzIpLTEpIHsKIAkJCWlmIChjb250YWluZXIgPj0gZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzKQogCQkJCWJyZWFrOwotCQkJaWYgKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09Ci0JCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKQorCQkJaWYgKChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9PQorCQkJICAgIGxlMzJfdG9fY3B1KCoodTMyICopYWlmY21kLT5kYXRhKSkgJiYKKwkJCSB0aW1lX2JlZm9yZShqaWZmaWVzLCBkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCArIEFJRl9TTklGRl9USU1FT1VUKSkKIAkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9IDA7CiAJCX0gZWxzZSBmb3IgKGNvbnRhaW5lciA9IDA7CiAJCSAgICBjb250YWluZXIgPCBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnM7ICsrY29udGFpbmVyKSB7Ci0JCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KLQkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpCisJCQlpZiAoKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09CisJCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKSAmJgorCQkJIHRpbWVfYmVmb3JlKGppZmZpZXMsIGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wICsgQUlGX1NOSUZGX1RJTUVPVVQpKQogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTk0Niw2ICs5NTYsOCBAQAogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0KIAkJCQkJQWlmRW5Db250YWluZXJDaGFuZ2U7CiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IEFERDsKKwkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCA9CisJCQkJCWppZmZpZXM7CiAJCQl9CiAJCX0KIAkJaWYgKCgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbMV0gPT0gY3B1X3RvX2xlMzIoQWlmSm9iQ3RyWmVybykpCkBAIC05NjEsNiArOTczLDggQEAKIAkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9CiAJCQkJCUFpZkVuQ29udGFpbmVyQ2hhbmdlOwogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ19uZWVkZWQgPSBERUxFVEU7CisJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgPQorCQkJCQlqaWZmaWVzOwogCQkJfQogCQl9CiAJCWJyZWFrOwpAQCAtOTY5LDggKzk4Myw5IEBACiAJZGV2aWNlX2NvbmZpZ19uZWVkZWQgPSBOT1RISU5HOwogCWZvciAoY29udGFpbmVyID0gMDsgY29udGFpbmVyIDwgZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzOwogCSAgICArK2NvbnRhaW5lcikgewotCQlpZiAoKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09IDApCi0JCSAmJiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCAhPSBOT1RISU5HKSkgeworCQlpZiAoKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09IDApICYmCisJCQkoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCAhPSBOT1RISU5HKSAmJgorCQkJdGltZV9iZWZvcmUoamlmZmllcywgZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgKyBBSUZfU05JRkZfVElNRU9VVCkpIHsKIAkJCWRldmljZV9jb25maWdfbmVlZGVkID0KIAkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkOwogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IE5PVEhJTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYwppbmRleCA3MjAzMzA3Li42ZWY4OWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKQEAgLTI3LDEyICsyNyw2IEBACiAgKiBBYnN0cmFjdDogTGludXggRHJpdmVyIGVudHJ5IG1vZHVsZSBmb3IgQWRhcHRlYyBSQUlEIEFycmF5IENvbnRyb2xsZXIKICAqLwogCi0jZGVmaW5lIEFBQ19EUklWRVJfVkVSU0lPTgkJIjEuMS00IgotI2lmbmRlZiBBQUNfRFJJVkVSX0JSQU5DSAotI2RlZmluZSBBQUNfRFJJVkVSX0JSQU5DSAkJIiIKLSNlbmRpZgotI2RlZmluZSBBQUNfRFJJVkVSX0JVSUxEX0RBVEUJCV9fREFURV9fICIgIiBfX1RJTUVfXwotI2RlZmluZSBBQUNfRFJJVkVSTkFNRQkJCSJhYWNyYWlkIgogCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CkBAIC02Miw2ICs1NiwxMyBAQAogCiAjaW5jbHVkZSAiYWFjcmFpZC5oIgogCisjZGVmaW5lIEFBQ19EUklWRVJfVkVSU0lPTgkJIjEuMS01IgorI2lmbmRlZiBBQUNfRFJJVkVSX0JSQU5DSAorI2RlZmluZSBBQUNfRFJJVkVSX0JSQU5DSAkJIiIKKyNlbmRpZgorI2RlZmluZSBBQUNfRFJJVkVSX0JVSUxEX0RBVEUJCV9fREFURV9fICIgIiBfX1RJTUVfXworI2RlZmluZSBBQUNfRFJJVkVSTkFNRQkJCSJhYWNyYWlkIgorCiAjaWZkZWYgQUFDX0RSSVZFUl9CVUlMRAogI2RlZmluZSBfc3RyKHgpICN4CiAjZGVmaW5lIHN0cih4KSBfc3RyKHgpCkBAIC03Myw3ICs3NCw3IEBACiBNT0RVTEVfQVVUSE9SKCJSZWQgSGF0IEluYyBhbmQgQWRhcHRlYyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZWxsIFBFUkMyLCAyL1NpLCAzL1NpLCAzL0RpLCAiCiAJCSAgICJBZGFwdGVjIEFkdmFuY2VkIFJhaWQgUHJvZHVjdHMsICIKLQkJICAgImFuZCBIUCBOZXRSQUlELTRNIFNDU0kgZHJpdmVyIik7CisJCSAgICJIUCBOZXRSQUlELTRNLCBJQk0gU2VydmVSQUlEICYgSUNQIFNDU0kgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihBQUNfRFJJVkVSX0ZVTExfVkVSU0lPTik7CiAKQEAgLTI0Myw2ICsyNDQsNyBAQAogc3RhdGljIGludCBhYWNfcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7CiAJY21kLT5zY3NpX2RvbmUgPSBkb25lOworCWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX0xPV0xFVkVMOwogCXJldHVybiAoYWFjX3Njc2lfY21kKGNtZCkgPyBGQUlMRUQgOiAwKTsKIH0gCiAKQEAgLTQ3MSw3ICs0NzMsOCBAQAogCQlfX3Nob3N0X2Zvcl9lYWNoX2RldmljZShkZXYsIGhvc3QpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxpc3RfbG9jaywgZmxhZ3MpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb21tYW5kLCAmZGV2LT5jbWRfbGlzdCwgbGlzdCkgewotCQkJCWlmIChjb21tYW5kLT5zZXJpYWxfbnVtYmVyKSB7CisJCQkJaWYgKChjb21tYW5kICE9IGNtZCkgJiYKKwkJCQkgICAgKGNvbW1hbmQtPlNDcC5waGFzZSA9PSBBQUNfT1dORVJfRklSTVdBUkUpKSB7CiAJCQkJCWFjdGl2ZSsrOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC01NjksMTIgKzU3MiwxMiBAQAogCQkKIAkJZiA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqZikpOwogCQlyZXQgPSAwOwotCQlpZiAoY2xlYXJfdXNlcihmLCBzaXplb2YoKmYpICE9IHNpemVvZigqZikpKQorCQlpZiAoY2xlYXJfdXNlcihmLCBzaXplb2YoKmYpKSAhPSBzaXplb2YoKmYpKQogCQkJcmV0ID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfaW5fdXNlcihmLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihzdHJ1Y3QgZmliX2lvY3RsKSAtIHNpemVvZih1MzIpKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWlmICghcmV0KQotCQkJcmV0ID0gYWFjX2RvX2lvY3RsKGRldiwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQkJcmV0ID0gYWFjX2RvX2lvY3RsKGRldiwgY21kLCBmKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02ODcsNiArNjkwLDE4IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfbWF4X2NoYW5uZWwoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJICBjbGFzc190b19zaG9zdChjbGFzc19kZXYpLT5tYXhfY2hhbm5lbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFhY19zaG93X21heF9pZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkgIGNsYXNzX3RvX3Nob3N0KGNsYXNzX2RldiktPm1heF9pZCk7Cit9CisKIAogc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGFhY19tb2RlbCA9IHsKIAkuYXR0ciA9IHsKQEAgLTczMCw2ICs3NDUsMjAgQEAKIAl9LAogCS5zaG93ID0gYWFjX3Nob3dfc2VyaWFsX251bWJlciwKIH07CitzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX21heF9jaGFubmVsID0geworCS5hdHRyID0geworCQkubmFtZSA9ICJtYXhfY2hhbm5lbCIsCisJCS5tb2RlID0gU19JUlVHTywKKwl9LAorCS5zaG93ID0gYWFjX3Nob3dfbWF4X2NoYW5uZWwsCit9Oworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGFhY19tYXhfaWQgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gIm1heF9pZCIsCisJCS5tb2RlID0gU19JUlVHTywKKwl9LAorCS5zaG93ID0gYWFjX3Nob3dfbWF4X2lkLAorfTsKIAogc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphYWNfYXR0cnNbXSA9IHsKIAkmYWFjX21vZGVsLApAQCAtNzM4LDYgKzc2Nyw4IEBACiAJJmFhY19tb25pdG9yX3ZlcnNpb24sCiAJJmFhY19iaW9zX3ZlcnNpb24sCiAJJmFhY19zZXJpYWxfbnVtYmVyLAorCSZhYWNfbWF4X2NoYW5uZWwsCisJJmFhY19tYXhfaWQsCiAJTlVMTAogfTsKIApAQCAtNzc1LDYgKzgwNiw3IEBACiAJLmNtZF9wZXJfbHVuICAgIAkJPSBBQUNfTlVNX0lPX0ZJQiwgCiAjZW5kaWYJCiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBFTkFCTEVfQ0xVU1RFUklORywKKwkuZW11bGF0ZWQgICAgICAgICAgICAgICAgICAgICAgID0gMSwKIH07CiAKIApAQCAtNzk4LDEwICs4MzAsMTEgQEAKIAllcnJvciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CisJZXJyb3IgPSAtRU5PREVWOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spIHx8IAogCQkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2Rpc2FibGVfcGRldjsKIAkvKgogCSAqIElmIHRoZSBxdWlyazMxIGJpdCBpcyBzZXQsIHRoZSBhZGFwdGVyIG5lZWRzIGFkYXB0ZXIKIAkgKiB0byBkcml2ZXIgY29tbXVuaWNhdGlvbiBtZW1vcnkgdG8gYmUgYWxsb2NhdGVkIGJlbG93IDJnaWcKQEAgLTgwOSw3ICs4NDIsNyBAQAogCWlmIChhYWNfZHJpdmVyc1tpbmRleF0ucXVpcmtzICYgQUFDX1FVSVJLXzMxQklUKSAKIAkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMxQklUX01BU0spIHx8CiAJCQkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMUJJVF9NQVNLKSkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfZGlzYWJsZV9wZGV2OwogCQogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCkBAIC05MDQsOSArOTM3LDkgQEAKIAkgKiBwaHlzaWNhbCBjaGFubmVscyBhcmUgYWRkcmVzcyBieSB0aGVpciBhY3R1YWwgcGh5c2ljYWwgbnVtYmVyKzEKIAkgKi8KIAlpZiAoYWFjLT5ub25kYXNkX3N1cHBvcnQgPT0gMSkKLQkJc2hvc3QtPm1heF9jaGFubmVsID0gYWFjLT5tYXhpbXVtX251bV9jaGFubmVscyArIDE7CisJCXNob3N0LT5tYXhfY2hhbm5lbCA9IGFhYy0+bWF4aW11bV9udW1fY2hhbm5lbHM7CiAJZWxzZQotCQlzaG9zdC0+bWF4X2NoYW5uZWwgPSAxOworCQlzaG9zdC0+bWF4X2NoYW5uZWwgPSAwOwogCiAJYWFjX2dldF9jb25maWdfc3RhdHVzKGFhYyk7CiAJYWFjX2dldF9jb250YWluZXJzKGFhYyk7CkBAIC0xMDIwLDcgKzEwNTMsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWFjX2V4aXQodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX2NocmRldihhYWNfY2ZnX21ham9yLCAiYWFjIik7CisJaWYgKGFhY19jZmdfbWFqb3IgPiAtMSkKKwkJdW5yZWdpc3Rlcl9jaHJkZXYoYWFjX2NmZ19tYWpvciwgImFhYyIpOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYWFjX3BjaV9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9ya3QuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3JrdC5jCmluZGV4IGU5Yjc3NWQuLjdhMjNlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3JrdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3JrdC5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJLyoKIAkJICoJWWllbGQgdGhlIHByb2Nlc3NvciBpbiBjYXNlIHdlIGFyZSBzbG93IAogCQkgKi8KLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJCW1zbGVlcCgxKTsKIAl9CiAJaWYgKG9rICE9IDEpIHsKIAkJLyoKQEAgLTM0Myw3ICszNDMsNyBAQAogCQkgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGRldiwgc2l6ZW9mKHN0cnVjdCBQT1NUU1RBVFVTKSwKIAkJICBwb3N0LCBwYWRkcik7Ci0gICAgICAgICAgICAgICAgaWYgKChidWZmZXJbMF0gPT0gJzAnKSAmJiAoYnVmZmVyWzFdID09ICd4JykpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGJ1ZmZlclswXSA9PSAnMCcpICYmICgoYnVmZmVyWzFdID09ICd4JykgfHwgKGJ1ZmZlclsxXSA9PSAnWCcpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gKGJ1ZmZlclsyXSA8PSAnOScpID8gKGJ1ZmZlclsyXSAtICcwJykgOiAoYnVmZmVyWzJdIC0gJ0EnICsgMTApOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0IDw8PSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IChidWZmZXJbM10gPD0gJzknKSA/IChidWZmZXJbM10gLSAnMCcpIDogKGJ1ZmZlclszXSAtICdBJyArIDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9yeC5jCmluZGV4IDY5OThiYzguLjcyOWI5ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCS8qCiAJCSAqCVlpZWxkIHRoZSBwcm9jZXNzb3IgaW4gY2FzZSB3ZSBhcmUgc2xvdyAKIAkJICovCi0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCQltc2xlZXAoMSk7CiAJfQogCWlmIChvayAhPSAxKSB7CiAJCS8qCkBAIC0zNDIsNyArMzQyLDcgQEAKIAkJICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBkZXYsIHNpemVvZihzdHJ1Y3QgUE9TVFNUQVRVUyksCiAJCSAgcG9zdCwgcGFkZHIpOwotCQlpZiAoKGJ1ZmZlclswXSA9PSAnMCcpICYmIChidWZmZXJbMV0gPT0gJ3gnKSkgeworCQlpZiAoKGJ1ZmZlclswXSA9PSAnMCcpICYmICgoYnVmZmVyWzFdID09ICd4JykgfHwgKGJ1ZmZlclsxXSA9PSAnWCcpKSkgewogCQkJcmV0ID0gKGJ1ZmZlclsyXSA8PSAnOScpID8gKGJ1ZmZlclsyXSAtICcwJykgOiAoYnVmZmVyWzJdIC0gJ0EnICsgMTApOwogCQkJcmV0IDw8PSA0OwogCQkJcmV0ICs9IChidWZmZXJbM10gPD0gJzknKSA/IChidWZmZXJbM10gLSAnMCcpIDogKGJ1ZmZlclszXSAtICdBJyArIDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3NhLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9zYS5jCmluZGV4IDQ2NmYwNWMuLmE1MzQ1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3NhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCQlvayA9IDE7CiAJCQlicmVhazsKIAkJfQotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJbXNsZWVwKDEpOwogCX0KIAogCWlmIChvayAhPSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMgYi9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYwppbmRleCAyOGI5MzA1Li4yYTQxOTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYworKysgYi9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYwpAQCAtMjA1MSw3ICsyMDUxLDcgQEAKICNkZWZpbmUgQURWX1ZBRERSX1RPX1UzMiAgIHZpcnRfdG9fYnVzCiAjZGVmaW5lIEFEVl9VMzJfVE9fVkFERFIgICBidXNfdG9fdmlydAogCi0jZGVmaW5lIEFkdlBvcnRBZGRyICB1bG9uZyAgICAgICAgICAgICAgLyogVmlydHVhbCBtZW1vcnkgYWRkcmVzcyBzaXplICovCisjZGVmaW5lIEFkdlBvcnRBZGRyICB2b2lkIF9faW9tZW0gKiAgICAgLyogVmlydHVhbCBtZW1vcnkgYWRkcmVzcyBzaXplICovCiAKIC8qCiAgKiBEZWZpbmUgQWR2IExpYnJhcnkgcmVxdWlyZWQgbWVtb3J5IGFjY2VzcyBtYWNyb3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhjaS5jIGIvZHJpdmVycy9zY3NpL2FoY2kuYwppbmRleCBmZmJhNjU2Li5iNGY4ZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKQEAgLTIwNyw3ICsyMDcsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gQUhDSV9NQVhfU0csCkBAIC0yOTMsNiArMjkyLDEwIEBACiAJICBib2FyZF9haGNpIH0sIC8qIEpNaWNyb24gSk1CMzYwICovCiAJeyAweDE5N2IsIDB4MjM2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKIAkgIGJvYXJkX2FoY2kgfSwgLyogSk1pY3JvbiBKTUIzNjMgKi8KKwl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDQzODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJICBib2FyZF9haGNpIH0sIC8qIEFUSSBTQjYwMCBub24tcmFpZCAqLworCXsgUENJX1ZFTkRPUl9JRF9BVEksIDB4NDM4MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkgIGJvYXJkX2FoY2kgfSwgLyogQVRJIFNCNjAwIHJhaWQgKi8KIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L0tjb25maWcuYWljN3h4eCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L0tjb25maWcuYWljN3h4eAppbmRleCA2YzJjMzk1Li41NTE3ZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9LY29uZmlnLmFpYzd4eHgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvS2NvbmZpZy5haWM3eHh4CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIGRlZmF1bHQgIjAiCiAgICAgICAgIGhlbHAKIAlCaXQgbWFzayBvZiBkZWJ1ZyBvcHRpb25zIHRoYXQgaXMgb25seSB2YWxpZCBpZiB0aGUKLQlDT05GSUdfQUlDN1hYWF9ERUJVR19FTkJMRSBvcHRpb24gaXMgZW5hYmxlZC4gIFRoZSBiaXRzIGluIHRoaXMgbWFzaworCUNPTkZJR19BSUM3WFhYX0RFQlVHX0VOQUJMRSBvcHRpb24gaXMgZW5hYmxlZC4gIFRoZSBiaXRzIGluIHRoaXMgbWFzawogCWFyZSBkZWZpbmVkIGluIHRoZSBkcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmggLSBzZWFyY2ggZm9yIHRoZQogCXZhcmlhYmxlIGFoY19kZWJ1ZyBpbiB0aGF0IGZpbGUgdG8gZmluZCB0aGVtLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKaW5kZXggMWQxMWY3ZS4uYmI1MTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaApAQCAtMzcyLDcgKzM3Miw3IEBACiAJQUhEX0NVUlJFTlRfU0VOU0lORyAgID0gMHg0MDAwMCwKIAlBSERfU0NCX0NPTkZJR19VU0VEICAgPSAweDgwMDAwLC8qIE5vIFNFRVBST00gYnV0IFNDQiBoYWQgaW5mby4gKi8KIAlBSERfSFBfQk9BUkQJICAgICAgPSAweDEwMDAwMCwKLQlBSERfUkVTRVRfUE9MTF9BQ1RJVkUgPSAweDIwMDAwMCwKKwlBSERfQlVTX1JFU0VUX0FDVElWRSAgPSAweDIwMDAwMCwKIAlBSERfVVBEQVRFX1BFTkRfQ01EUyAgPSAweDQwMDAwMCwKIAlBSERfUlVOTklOR19RT1VURklGTyAgPSAweDgwMDAwMCwKIAlBSERfSEFEX0ZJUlNUX1NFTCAgICAgPSAweDEwMDAwMDAKQEAgLTU4OSw3ICs1ODksNyBAQAogCVNDQl9QQUNLRVRJWkVECQk9IDB4MDA4MDAsCiAJU0NCX0VYUEVDVF9QUFJfQlVTRlJFRQk9IDB4MDEwMDAsCiAJU0NCX1BLVF9TRU5TRQkJPSAweDAyMDAwLAotCVNDQl9DTURQSEFTRV9BQk9SVAk9IDB4MDQwMDAsCisJU0NCX0VYVEVSTkFMX1JFU0VUCT0gMHgwNDAwMCwvKiBEZXZpY2Ugd2FzIHJlc2V0IGV4dGVybmFsbHkgKi8KIAlTQ0JfT05fQ09MX0xJU1QJCT0gMHgwODAwMCwKIAlTQ0JfU0lMRU5UCQk9IDB4MTAwMDAgLyoKIAkJCQkJICAgKiBCZSBxdWlldCBhYm91dCB0cmFuc21pc3Npb24gdHlwZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwppbmRleCAzMjZhNjIyLi4wODc3MWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwpAQCAtMjA3LDcgKzIwNyw2IEBACiBzdGF0aWMgdV9pbnQJCWFoZF9yZW1fd3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHNjYmlkLAogCQkJCSAgICAgdV9pbnQgcHJldiwgdV9pbnQgbmV4dCwgdV9pbnQgdGlkKTsKIHN0YXRpYyB2b2lkCQlhaGRfcmVzZXRfY3VycmVudF9idXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBhaGRfY2FsbGJhY2tfdAlhaGRfcmVzZXRfcG9sbDsKIHN0YXRpYyBhaGRfY2FsbGJhY2tfdAlhaGRfc3RhdF90aW1lcjsKICNpZmRlZiBBSERfRFVNUF9TRVEKIHN0YXRpYyB2b2lkCQlhaGRfZHVtcHNlcShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwpAQCAtMTA1NCwxMiArMTA1MywxMCBAQAogCQkJICogSWYgYSB0YXJnZXQgdGFrZXMgdXMgaW50byB0aGUgY29tbWFuZCBwaGFzZQogCQkJICogYXNzdW1lIHRoYXQgaXQgaGFzIGJlZW4gZXh0ZXJuYWxseSByZXNldCBhbmQKIAkJCSAqIGhhcyB0aHVzIGxvc3Qgb3VyIHByZXZpb3VzIHBhY2tldGl6ZWQgbmVnb3RpYXRpb24KLQkJCSAqIGFncmVlbWVudC4gIFNpbmNlIHdlIGhhdmUgbm90IHNlbnQgYW4gaWRlbnRpZnkKLQkJCSAqIG1lc3NhZ2UgYW5kIG1heSBub3QgaGF2ZSBmdWxseSBxdWFsaWZpZWQgdGhlCi0JCQkgKiBjb25uZWN0aW9uLCB3ZSBjaGFuZ2Ugb3VyIGNvbW1hbmQgdG8gVFVSLCBhc3NlcnQKLQkJCSAqIEFUTiBhbmQgQUJPUlQgdGhlIHRhc2sgd2hlbiB3ZSBnbyB0byBtZXNzYWdlIGluCi0JCQkgKiBwaGFzZS4gIFRoZSBPU00gd2lsbCBzZWUgdGhlIFJFUVVFVUVfUkVRVUVTVAotCQkJICogc3RhdHVzIGFuZCByZXRyeSB0aGUgY29tbWFuZC4KKwkJCSAqIGFncmVlbWVudC4KKwkJCSAqIFJldmVydCB0byBhc3luYy9uYXJyb3cgdHJhbnNmZXJzIHVudGlsIHdlCisJCQkgKiBjYW4gcmVuZWdvdGlhdGUgd2l0aCB0aGUgZGV2aWNlIGFuZCBub3RpZnkKKwkJCSAqIHRoZSBPU00gYWJvdXQgdGhlIHJlc2V0LgogCQkJICovCiAJCQlzY2JpZCA9IGFoZF9nZXRfc2NicHRyKGFoZCk7CiAJCQlzY2IgPSBhaGRfbG9va3VwX3NjYihhaGQsIHNjYmlkKTsKQEAgLTEwODYsMzEgKzEwODMsMTUgQEAKIAkJCWFoZF9zZXRfc3luY3JhdGUoYWhkLCAmZGV2aW5mbywgLypwZXJpb2QqLzAsCiAJCQkJCSAvKm9mZnNldCovMCwgLypwcHJfb3B0aW9ucyovMCwKIAkJCQkJIEFIRF9UUkFOU19BQ1RJVkUsIC8qcGF1c2VkKi9UUlVFKTsKLQkJCWFoZF9vdXRiKGFoZCwgU0NCX0NEQl9TVE9SRSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMiwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMywgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrNCwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrNSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfTEVOLCA2KTsKLQkJCXNjYi0+aHNjYi0+Y29udHJvbCAmPSB+KFRBR19FTkJ8U0NCX1RBR19UWVBFKTsKLQkJCXNjYi0+aHNjYi0+Y29udHJvbCB8PSBNS19NRVNTQUdFOwotCQkJYWhkX291dGIoYWhkLCBTQ0JfQ09OVFJPTCwgc2NiLT5oc2NiLT5jb250cm9sKTsKLQkJCWFoZF9vdXRiKGFoZCwgTVNHX09VVCwgSE9TVF9NU0cpOwotCQkJYWhkX291dGIoYWhkLCBTQVZFRF9TQ1NJSUQsIHNjYi0+aHNjYi0+c2NzaWlkKTsKLQkJCS8qCi0JCQkgKiBUaGUgbHVuIGlzIDAsIHJlZ2FyZGxlc3Mgb2YgdGhlIFNDQidzIGx1bgotCQkJICogYXMgd2UgaGF2ZSBub3Qgc2VudCBhbiBpZGVudGlmeSBtZXNzYWdlLgotCQkJICovCi0JCQlhaGRfb3V0YihhaGQsIFNBVkVEX0xVTiwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNFUV9GTEFHUywgMCk7Ci0JCQlhaGRfYXNzZXJ0X2F0bihhaGQpOwotCQkJc2NiLT5mbGFncyAmPSB+U0NCX1BBQ0tFVElaRUQ7Ci0JCQlzY2ItPmZsYWdzIHw9IFNDQl9BQk9SVHxTQ0JfQ01EUEhBU0VfQUJPUlQ7CisJCQlzY2ItPmZsYWdzIHw9IFNDQl9FWFRFUk5BTF9SRVNFVDsKIAkJCWFoZF9mcmVlemVfZGV2cShhaGQsIHNjYik7CiAJCQlhaGRfc2V0X3RyYW5zYWN0aW9uX3N0YXR1cyhzY2IsIENBTV9SRVFVRVVFX1JFUSk7CiAJCQlhaGRfZnJlZXplX3NjYihzY2IpOwogCisJCQkvKiBOb3RpZnkgWFBUICovCisJCQlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgZGV2aW5mby50YXJnZXQsCisJCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1NFTlRfQkRSLCBOVUxMKTsKKwogCQkJLyoKIAkJCSAqIEFsbG93IHRoZSBzZXF1ZW5jZXIgdG8gY29udGludWUgd2l0aAogCQkJICogbm9uLXBhY2sgcHJvY2Vzc2luZy4KQEAgLTE1MzQsNiArMTUxNSwxOCBAQAogCWxxaXN0YXQxID0gYWhkX2luYihhaGQsIExRSVNUQVQxKTsKIAlscW9zdGF0MCA9IGFoZF9pbmIoYWhkLCBMUU9TVEFUMCk7CiAJYnVzZnJlZXRpbWUgPSBhaGRfaW5iKGFoZCwgU1NUQVQyKSAmIEJVU0ZSRUVUSU1FOworCisJLyoKKwkgKiBJZ25vcmUgZXh0ZXJuYWwgcmVzZXRzIGFmdGVyIGEgYnVzIHJlc2V0LgorCSAqLworCWlmICgoKHN0YXR1cyAmIFNDU0lSU1RJKSAhPSAwKSAmJiAoYWhkLT5mbGFncyAmIEFIRF9CVVNfUkVTRVRfQUNUSVZFKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDbGVhciBidXMgcmVzZXQgZmxhZworCSAqLworCWFoZC0+ZmxhZ3MgJj0gfkFIRF9CVVNfUkVTRVRfQUNUSVZFOworCiAJaWYgKChzdGF0dXMwICYgKFNFTERJfFNFTERPKSkgIT0gMCkgewogCQl1X2ludCBzaW1vZGUwOwogCkBAIC0yMjA3LDIyICsyMjAwLDYgQEAKIAkJCWlmIChzZW50X21zZyA9PSBNU0dfQUJPUlRfVEFHKQogCQkJCXRhZyA9IFNDQl9HRVRfVEFHKHNjYik7CiAKLQkJCWlmICgoc2NiLT5mbGFncyAmIFNDQl9DTURQSEFTRV9BQk9SVCkgIT0gMCkgewotCQkJCS8qCi0JCQkJICogVGhpcyBhYm9ydCBpcyBpbiByZXNwb25zZSB0byBhbgotCQkJCSAqIHVuZXhwZWN0ZWQgc3dpdGNoIHRvIGNvbW1hbmQgcGhhc2UKLQkJCQkgKiBmb3IgYSBwYWNrZXRpemVkIGNvbm5lY3Rpb24uICBTaW5jZQotCQkJCSAqIHRoZSBpZGVudGlmeSBtZXNzYWdlIHdhcyBuZXZlciBzZW50LAotCQkJCSAqICJzYXZlZCBsdW4iIGlzIDAuICBXZSByZWFsbHkgd2FudCB0bwotCQkJCSAqIGFib3J0IG9ubHkgdGhlIFNDQiB0aGF0IGVuY291bnRlcmVkCi0JCQkJICogdGhpcyBlcnJvciwgd2hpY2ggY291bGQgaGF2ZSBhIGRpZmZlcmVudAotCQkJCSAqIGx1bi4gIFRoZSBTQ0Igd2lsbCBiZSByZXRyaWVkIHNvIHRoZSBPUwotCQkJCSAqIHdpbGwgc2VlIHRoZSBVQSBhZnRlciByZW5lZ290aWF0aW5nIHRvCi0JCQkJICogcGFja2V0aXplZC4KLQkJCQkgKi8KLQkJCQl0YWcgPSBTQ0JfR0VUX1RBRyhzY2IpOwotCQkJCXNhdmVkX2x1biA9IHNjYi0+aHNjYi0+bHVuOwotCQkJfQogCQkJZm91bmQgPSBhaGRfYWJvcnRfc2NicyhhaGQsIHRhcmdldCwgJ0EnLCBzYXZlZF9sdW4sCiAJCQkJCSAgICAgICB0YWcsIFJPTEVfSU5JVElBVE9SLAogCQkJCQkgICAgICAgQ0FNX1JFUV9BQk9SVEVEKTsKQEAgLTc4NDcsNiArNzgyNCwxNyBAQAogCWludAlmb3VuZDsKIAl1X2ludAlmaWZvOwogCXVfaW50CW5leHRfZmlmbzsKKwl1aW50OF90IHNjc2lzZXE7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBsYXN0IGJ1cyByZXNldCBpcyBjbGVhcmVkCisJICovCisJaWYgKGFoZC0+ZmxhZ3MgJiBBSERfQlVTX1JFU0VUX0FDVElWRSkgeworCQlwcmludGYoIiVzOiBidXMgcmVzZXQgc3RpbGwgYWN0aXZlXG4iLAorCQkgICAgICAgYWhkX25hbWUoYWhkKSk7CisJCXJldHVybiAwOworCX0KKwlhaGQtPmZsYWdzIHw9IEFIRF9CVVNfUkVTRVRfQUNUSVZFOwogCiAJYWhkLT5wZW5kaW5nX2RldmljZSA9IE5VTEw7CiAKQEAgLTc4NjAsNiArNzg0OCwxMiBAQAogCS8qIE1ha2Ugc3VyZSB0aGUgc2VxdWVuY2VyIGlzIGluIGEgc2FmZSBsb2NhdGlvbi4gKi8KIAlhaGRfY2xlYXJfY3JpdGljYWxfc2VjdGlvbihhaGQpOwogCisJLyoKKwkgKiBSdW4gb3VyIGNvbW1hbmQgY29tcGxldGUgZmlmb3MgdG8gZW5zdXJlIHRoYXQgd2UgcGVyZm9ybQorCSAqIGNvbXBsZXRpb24gcHJvY2Vzc2luZyBvbiBhbnkgY29tbWFuZHMgdGhhdCAnY29tcGxldGVkJworCSAqIGJlZm9yZSB0aGUgcmVzZXQgb2NjdXJyZWQuCisJICovCisJYWhkX3J1bl9xb3V0ZmlmbyhhaGQpOwogI2lmZGVmIEFIRF9UQVJHRVRfTU9ERQogCWlmICgoYWhkLT5mbGFncyAmIEFIRF9UQVJHRVRST0xFKSAhPSAwKSB7CiAJCWFoZF9ydW5fdHFpbmZpZm8oYWhkLCAvKnBhdXNlZCovVFJVRSk7CkBAIC03OTI0LDMwICs3OTE4LDE0IEBACiAJYWhkX2NsZWFyX2ZpZm8oYWhkLCAxKTsKIAogCS8qCi0JICogUmV2ZXJ0IHRvIGFzeW5jL25hcnJvdyB0cmFuc2ZlcnMgdW50aWwgd2UgcmVuZWdvdGlhdGUuCisJICogUmVlbmFibGUgc2VsZWN0aW9ucwogCSAqLworCWFoZF9vdXRiKGFoZCwgU0lNT0RFMSwgYWhkX2luYihhaGQsIFNJTU9ERTEpIHwgRU5TQ1NJUlNUKTsKKwlzY3Npc2VxID0gYWhkX2luYihhaGQsIFNDU0lTRVFfVEVNUExBVEUpOworCWFoZF9vdXRiKGFoZCwgU0NTSVNFUTEsIHNjc2lzZXEgJiAoRU5TRUxJfEVOUlNFTEl8RU5BVVRPQVROUCkpOworCiAJbWF4X3Njc2lpZCA9IChhaGQtPmZlYXR1cmVzICYgQUhEX1dJREUpID8gMTUgOiA3OwotCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDw9IG1heF9zY3NpaWQ7IHRhcmdldCsrKSB7Ci0KLQkJaWYgKGFoZC0+ZW5hYmxlZF90YXJnZXRzW3RhcmdldF0gPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGluaXRpYXRvciA9IDA7IGluaXRpYXRvciA8PSBtYXhfc2NzaWlkOyBpbml0aWF0b3IrKykgewotCQkJc3RydWN0IGFoZF9kZXZpbmZvIGRldmluZm87Ci0KLQkJCWFoZF9jb21waWxlX2RldmluZm8oJmRldmluZm8sIHRhcmdldCwgaW5pdGlhdG9yLAotCQkJCQkgICAgQ0FNX0xVTl9XSUxEQ0FSRCwKLQkJCQkJICAgICdBJywgUk9MRV9VTktOT1dOKTsKLQkJCWFoZF9zZXRfd2lkdGgoYWhkLCAmZGV2aW5mbywgTVNHX0VYVF9XRFRSX0JVU184X0JJVCwKLQkJCQkgICAgICBBSERfVFJBTlNfQ1VSLCAvKnBhdXNlZCovVFJVRSk7Ci0JCQlhaGRfc2V0X3N5bmNyYXRlKGFoZCwgJmRldmluZm8sIC8qcGVyaW9kKi8wLAotCQkJCQkgLypvZmZzZXQqLzAsIC8qcHByX29wdGlvbnMqLzAsCi0JCQkJCSBBSERfVFJBTlNfQ1VSLCAvKnBhdXNlZCovVFJVRSk7Ci0JCX0KLQl9Ci0KICNpZmRlZiBBSERfVEFSR0VUX01PREUKLQltYXhfc2NzaWlkID0gKGFoZC0+ZmVhdHVyZXMgJiBBSERfV0lERSkgPyAxNSA6IDc7Ci0KIAkvKgogCSAqIFNlbmQgYW4gaW1tZWRpYXRlIG5vdGlmeSBjY2IgdG8gYWxsIHRhcmdldCBtb3JlIHBlcmlwaGVyYWwKIAkgKiBkcml2ZXJzIGFmZmVjdGVkIGJ5IHRoaXMgYWN0aW9uLgpAQCAtNzk3NSw1MyArNzk1MywzMyBAQAogCS8qIE5vdGlmeSB0aGUgWFBUIHRoYXQgYSBidXMgcmVzZXQgb2NjdXJyZWQgKi8KIAlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKIAkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX0JVU19SRVNFVCwgTlVMTCk7Ci0JYWhkX3Jlc3RhcnQoYWhkKTsKKwogCS8qCi0JICogRnJlZXplIHRoZSBTSU1RIHVudGlsIG91ciBwb2xsZXIgY2FuIGRldGVybWluZSB0aGF0Ci0JICogdGhlIGJ1cyByZXNldCBoYXMgcmVhbGx5IGdvbmUgYXdheS4gIFdlIHNldCB0aGUgaW5pdGlhbAotCSAqIHRpbWVyIHRvIDAgdG8gaGF2ZSB0aGUgY2hlY2sgcGVyZm9ybWVkIGFzIHNvb24gYXMgcG9zc2libGUKLQkgKiBmcm9tIHRoZSB0aW1lciBjb250ZXh0LgorCSAqIFJldmVydCB0byBhc3luYy9uYXJyb3cgdHJhbnNmZXJzIHVudGlsIHdlIHJlbmVnb3RpYXRlLgogCSAqLwotCWlmICgoYWhkLT5mbGFncyAmIEFIRF9SRVNFVF9QT0xMX0FDVElWRSkgPT0gMCkgewotCQlhaGQtPmZsYWdzIHw9IEFIRF9SRVNFVF9QT0xMX0FDVElWRTsKLQkJYWhkX2ZyZWV6ZV9zaW1xKGFoZCk7Ci0JCWFoZF90aW1lcl9yZXNldCgmYWhkLT5yZXNldF90aW1lciwgMCwgYWhkX3Jlc2V0X3BvbGwsIGFoZCk7CisJZm9yICh0YXJnZXQgPSAwOyB0YXJnZXQgPD0gbWF4X3Njc2lpZDsgdGFyZ2V0KyspIHsKKworCQlpZiAoYWhkLT5lbmFibGVkX3RhcmdldHNbdGFyZ2V0XSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWZvciAoaW5pdGlhdG9yID0gMDsgaW5pdGlhdG9yIDw9IG1heF9zY3NpaWQ7IGluaXRpYXRvcisrKSB7CisJCQlzdHJ1Y3QgYWhkX2RldmluZm8gZGV2aW5mbzsKKworCQkJYWhkX2NvbXBpbGVfZGV2aW5mbygmZGV2aW5mbywgdGFyZ2V0LCBpbml0aWF0b3IsCisJCQkJCSAgICBDQU1fTFVOX1dJTERDQVJELAorCQkJCQkgICAgJ0EnLCBST0xFX1VOS05PV04pOworCQkJYWhkX3NldF93aWR0aChhaGQsICZkZXZpbmZvLCBNU0dfRVhUX1dEVFJfQlVTXzhfQklULAorCQkJCSAgICAgIEFIRF9UUkFOU19DVVIsIC8qcGF1c2VkKi9UUlVFKTsKKwkJCWFoZF9zZXRfc3luY3JhdGUoYWhkLCAmZGV2aW5mbywgLypwZXJpb2QqLzAsCisJCQkJCSAvKm9mZnNldCovMCwgLypwcHJfb3B0aW9ucyovMCwKKwkJCQkJIEFIRF9UUkFOU19DVVIsIC8qcGF1c2VkKi9UUlVFKTsKKwkJfQogCX0KKworCWFoZF9yZXN0YXJ0KGFoZCk7CisKIAlyZXR1cm4gKGZvdW5kKTsKIH0KIAotCi0jZGVmaW5lIEFIRF9SRVNFVF9QT0xMX1VTIDEwMDAKLXN0YXRpYyB2b2lkCi1haGRfcmVzZXRfcG9sbCh2b2lkICphcmcpCi17Ci0Jc3RydWN0CWFoZF9zb2Z0YyAqYWhkID0gYXJnOwotCXVfaW50CXNjc2lzZXExOwotCXVfbG9uZwlzOwotCQotCWFoZF9sb2NrKGFoZCwgJnMpOwotCWFoZF9wYXVzZShhaGQpOwotCWFoZF91cGRhdGVfbW9kZXMoYWhkKTsKLQlhaGRfc2V0X21vZGVzKGFoZCwgQUhEX01PREVfU0NTSSwgQUhEX01PREVfU0NTSSk7Ci0JYWhkX291dGIoYWhkLCBDTFJTSU5UMSwgQ0xSU0NTSVJTVEkpOwotCWlmICgoYWhkX2luYihhaGQsIFNTVEFUMSkgJiBTQ1NJUlNUSSkgIT0gMCkgewotCQlhaGRfdGltZXJfcmVzZXQoJmFoZC0+cmVzZXRfdGltZXIsIEFIRF9SRVNFVF9QT0xMX1VTLAotCQkJCWFoZF9yZXNldF9wb2xsLCBhaGQpOwotCQlhaGRfdW5wYXVzZShhaGQpOwotCQlhaGRfdW5sb2NrKGFoZCwgJnMpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUmVzZXQgaXMgbm93IGxvdy4gIENvbXBsZXRlIGNoaXAgcmVpbml0aWFsaXphdGlvbi4gKi8KLQlhaGRfb3V0YihhaGQsIFNJTU9ERTEsIGFoZF9pbmIoYWhkLCBTSU1PREUxKSB8IEVOU0NTSVJTVCk7Ci0Jc2NzaXNlcTEgPSBhaGRfaW5iKGFoZCwgU0NTSVNFUV9URU1QTEFURSk7Ci0JYWhkX291dGIoYWhkLCBTQ1NJU0VRMSwgc2NzaXNlcTEgJiAoRU5TRUxJfEVOUlNFTEl8RU5BVVRPQVROUCkpOwotCWFoZF91bnBhdXNlKGFoZCk7Ci0JYWhkLT5mbGFncyAmPSB+QUhEX1JFU0VUX1BPTExfQUNUSVZFOwotCWFoZF91bmxvY2soYWhkLCAmcyk7Ci0JYWhkX3JlbGVhc2Vfc2ltcShhaGQpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTdGF0aXN0aWNzIFByb2Nlc3NpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKIGFoZF9zdGF0X3RpbWVyKHZvaWQgKmFyZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCmluZGV4IGJjY2VkMGEuLjY2ZTRhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwpAQCAtNzgyLDYgKzc4Miw3IEBACiB7CiAJc3RydWN0IGFoZF9zb2Z0YyAqYWhkOwogCWludCAgICBmb3VuZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYWhkID0gKihzdHJ1Y3QgYWhkX3NvZnRjICoqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKICNpZmRlZiBBSERfREVCVUcKQEAgLTc4OSw4ICs3OTAsMTEgQEAKIAkJcHJpbnRmKCIlczogQnVzIHJlc2V0IGNhbGxlZCBmb3IgY21kICVwXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgY21kKTsKICNlbmRpZgorCWFoZF9sb2NrKGFoZCwgJmZsYWdzKTsKKwogCWZvdW5kID0gYWhkX3Jlc2V0X2NoYW5uZWwoYWhkLCBzY21kX2NoYW5uZWwoY21kKSArICdBJywKIAkJCQkgIC8qaW5pdGlhdGUgcmVzZXQqL1RSVUUpOworCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwogCiAJaWYgKGJvb3R2ZXJib3NlKQogCQlwcmludGYoIiVzOiBTQ1NJIGJ1cyByZXNldCBkZWxpdmVyZWQuICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKaW5kZXggY2IzMGQ5Yy4uMGM5YzJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKQEAgLTIxOSw2ICsyMTksNyBAQAogCQlhaGMtPmZsYWdzIHw9IEFIQ18zOUJJVF9BRERSRVNTSU5HOwogCX0gZWxzZSB7CiAJCWlmIChkbWFfc2V0X21hc2soZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJCWFoY19mcmVlKGFoYyk7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhaWM3eHh4OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAgICAgICAgICAgICAgICAgCXJldHVybiAoLUVOT0RFVik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jCmluZGV4IDVmNTg2MTQuLjNhZGVjZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wY2kuYwpAQCAtMjAzNiwxMiArMjAzNiwxMiBAQAogCSAqIHRoYXQgdGhlIE9TIGRvZXNuJ3Qga25vdyBhYm91dCBhbmQgcmVseSBvbiBvdXIgY2hpcAogCSAqIHJlc2V0IGhhbmRsZXIgdG8gaGFuZGxlIHRoZSByZXN0LgogCSAqLwotCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBERVZDT05GSUcsIC8qYnl0ZXMqLzQsCi0JCQkgICAgIGFoYy0+YnVzX3NvZnRjLnBjaV9zb2Z0Yy5kZXZjb25maWcpOwotCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBQQ0lSX0NPTU1BTkQsIC8qYnl0ZXMqLzEsCi0JCQkgICAgIGFoYy0+YnVzX3NvZnRjLnBjaV9zb2Z0Yy5jb21tYW5kKTsKLQlhaGNfcGNpX3dyaXRlX2NvbmZpZyhhaGMtPmRldl9zb2Z0YywgQ1NJWkVfTEFUVElNRSwgLypieXRlcyovMSwKLQkJCSAgICAgYWhjLT5idXNfc29mdGMucGNpX3NvZnRjLmNzaXplX2xhdHRpbWUpOworCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBERVZDT05GSUcsCisJCQkgICAgIGFoYy0+YnVzX3NvZnRjLnBjaV9zb2Z0Yy5kZXZjb25maWcsIC8qYnl0ZXMqLzQpOworCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBQQ0lSX0NPTU1BTkQsCisJCQkgICAgIGFoYy0+YnVzX3NvZnRjLnBjaV9zb2Z0Yy5jb21tYW5kLCAvKmJ5dGVzKi8xKTsKKwlhaGNfcGNpX3dyaXRlX2NvbmZpZyhhaGMtPmRldl9zb2Z0YywgQ1NJWkVfTEFUVElNRSwKKwkJCSAgICAgYWhjLT5idXNfc29mdGMucGNpX3NvZnRjLmNzaXplX2xhdHRpbWUsIC8qYnl0ZXMqLzEpOwogCWlmICgoYWhjLT5mbGFncyAmIEFIQ19IQVNfVEVSTV9MT0dJQykgIT0gMCkgewogCQlzdHJ1Y3QJc2VlcHJvbV9kZXNjcmlwdG9yIHNkOwogCQl1X2ludAlzeGZyY3RsMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKaW5kZXggMmQ1YmU4NC4uNmRjODgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKQEAgLTIwOSw3ICsyMDksNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCkBAIC0zMDEsNyArMzAwLDcgQEAKIAkubWFzayA9IDB4MywKIAkubWFwID0gewogCQkvKiBQTSAgIFBTICAgU00gICBTUyAgICAgICBNQVAgKi8KLQkJeyAgUDAsICBQMSwgIFAyLCAgUDMgfSwgLyogMDBiICovCisJCXsgIFAwLCAgUDIsICBQMSwgIFAzIH0sIC8qIDAwYiAqLwogCQl7IElERSwgSURFLCAgUDEsICBQMyB9LCAvKiAwMWIgKi8KIAkJeyAgUDAsICBQMiwgSURFLCBJREUgfSwgLyogMTBiICovCiAJCXsgIFJWLCAgUlYsICBSViwgIFJWIH0sCkBAIC0zMTIsNyArMzExLDcgQEAKIAkubWFzayA9IDB4MywKIAkubWFwID0gewogCQkvKiBQTSAgIFBTICAgU00gICBTUyAgICAgICBNQVAgKi8KLQkJeyAgUDAsICBQMSwgIFAyLCAgUDMgfSwgLyogMDBiICovCisJCXsgIFAwLCAgUDIsICBSViwgIFJWIH0sIC8qIDAwYiAqLwogCQl7ICBSViwgIFJWLCAgUlYsICBSViB9LAogCQl7ICBQMCwgIFAyLCBJREUsIElERSB9LCAvKiAxMGIgKi8KIAkJeyAgUlYsICBSViwgIFJWLCAgUlYgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKaW5kZXggZWY1N2YyNS4uZGZjYjk2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hvc3RzLmMKKysrIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKQEAgLTI5NCwxOCArMjk0LDYgQEAKIAlpZiAoc2h0LT51bmNoZWNrZWRfaXNhX2RtYSAmJiBwcml2c2l6ZSkKIAkJZ2ZwX21hc2sgfD0gX19HRlBfRE1BOwogCi0gICAgICAgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIGhvc3QgaGFzIGFueSBlcnJvciBoYW5kbGluZyBmYWNpbGl0aWVzICovCi0gICAgICAgIGlmICghc2h0LT5laF9zdHJhdGVneV9oYW5kbGVyICYmICFzaHQtPmVoX2Fib3J0X2hhbmRsZXIgJiYKLQkgICAgIXNodC0+ZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgJiYgIXNodC0+ZWhfYnVzX3Jlc2V0X2hhbmRsZXIgJiYKLSAgICAgICAgICAgICFzaHQtPmVoX2hvc3RfcmVzZXRfaGFuZGxlcikgewotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBTQ1NJIGhvc3QgYCVzJyBoYXMgbm8gZXJyb3IgaGFuZGxpbmdcbiIKLQkJCQkiRVJST1I6IFRoaXMgaXMgbm90IGEgc2FmZSB3YXkgdG8gcnVuIHlvdXIgIgotCQkJCSAgICAgICAgIlNDU0kgaG9zdFxuIgotCQkJCSJFUlJPUjogVGhlIGVycm9yIGhhbmRsaW5nIG11c3QgYmUgYWRkZWQgdG8gIgotCQkJCSJ0aGlzIGRyaXZlclxuIiwgc2h0LT5wcm9jX25hbWUpOwotCQlkdW1wX3N0YWNrKCk7Ci0gICAgICAgIH0KLQogCXNob3N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IFNjc2lfSG9zdCkgKyBwcml2c2l6ZSwgZ2ZwX21hc2spOwogCWlmICghc2hvc3QpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libW1jYS5jIGIvZHJpdmVycy9zY3NpL2libW1jYS5jCmluZGV4IDNhODQ2MmUuLjI0ZWI1OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm1tY2EuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKQEAgLTI0ODgsNyArMjQ4OCw3IEBACiAJfQogCWludHNbMF0gPSBpIC0gMTsKIAlpbnRlcm5hbF9pYm1tY2Ffc2NzaV9zZXR1cChjdXIsIGludHMpOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBfX3NldHVwKCJpYm1tY2FzY3NpPSIsIG9wdGlvbl9zZXR1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCmluZGV4IGVhZWZlZGQuLjJlOWJlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJCSsraW5fdXNlOwogCQlpZiAocG9vbC0+ZXZlbnRzW2ldLmV4dF9saXN0KSB7CiAJCQlkbWFfZnJlZV9jb2hlcmVudChob3N0ZGF0YS0+ZGV2LAotCQkJCSAgU0dfQUxMICogc2l6ZW9mKHN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciksCisJCQkJICBTR19BTEwgKiBzaXplb2Yoc3RydWN0IHNycF9kaXJlY3RfYnVmKSwKIAkJCQkgIHBvb2wtPmV2ZW50c1tpXS5leHRfbGlzdCwKIAkJCQkgIHBvb2wtPmV2ZW50c1tpXS5leHRfbGlzdF90b2tlbik7CiAJCX0KQEAgLTI4NCw0MCArMjg0LDM3IEBACiAJCQkgICAgICBzdHJ1Y3Qgc3JwX2NtZCAqc3JwX2NtZCwgCiAJCQkgICAgICBpbnQgbnVtYnVmKQogeworCXU4IGZtdDsKKwogCWlmIChudW1idWYgPT0gMCkKIAkJcmV0dXJuOwogCQotCWlmIChudW1idWYgPT0gMSkgeworCWlmIChudW1idWYgPT0gMSkKKwkJZm10ID0gU1JQX0RBVEFfREVTQ19ESVJFQ1Q7CisJZWxzZSB7CisJCWZtdCA9IFNSUF9EQVRBX0RFU0NfSU5ESVJFQ1Q7CisJCW51bWJ1ZiA9IG1pbihudW1idWYsIE1BWF9JTkRJUkVDVF9CVUZTKTsKKwogCQlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCQkJc3JwX2NtZC0+ZGF0YV9vdXRfZm9ybWF0ID0gU1JQX0RJUkVDVF9CVUZGRVI7Ci0JCWVsc2UgCi0JCQlzcnBfY21kLT5kYXRhX2luX2Zvcm1hdCA9IFNSUF9ESVJFQ1RfQlVGRkVSOwotCX0gZWxzZSB7Ci0JCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKLQkJCXNycF9jbWQtPmRhdGFfb3V0X2Zvcm1hdCA9IFNSUF9JTkRJUkVDVF9CVUZGRVI7Ci0JCQlzcnBfY21kLT5kYXRhX291dF9jb3VudCA9Ci0JCQkJbnVtYnVmIDwgTUFYX0lORElSRUNUX0JVRlMgPwotCQkJCQludW1idWY6IE1BWF9JTkRJUkVDVF9CVUZTOwotCQl9IGVsc2UgewotCQkJc3JwX2NtZC0+ZGF0YV9pbl9mb3JtYXQgPSBTUlBfSU5ESVJFQ1RfQlVGRkVSOwotCQkJc3JwX2NtZC0+ZGF0YV9pbl9jb3VudCA9Ci0JCQkJbnVtYnVmIDwgTUFYX0lORElSRUNUX0JVRlMgPwotCQkJCQludW1idWY6IE1BWF9JTkRJUkVDVF9CVUZTOwotCQl9CisJCQlzcnBfY21kLT5kYXRhX291dF9kZXNjX2NudCA9IG51bWJ1ZjsKKwkJZWxzZQorCQkJc3JwX2NtZC0+ZGF0YV9pbl9kZXNjX2NudCA9IG51bWJ1ZjsKIAl9CisKKwlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQlzcnBfY21kLT5idWZfZm10ID0gZm10IDw8IDQ7CisJZWxzZQorCQlzcnBfY21kLT5idWZfZm10ID0gZm10OwogfQogCi1zdGF0aWMgdm9pZCB1bm1hcF9zZ19saXN0KGludCBudW1fZW50cmllcywgCitzdGF0aWMgdm9pZCB1bm1hcF9zZ19saXN0KGludCBudW1fZW50cmllcywKIAkJc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKm1kKQoteyAKKwkJc3RydWN0IHNycF9kaXJlY3RfYnVmICptZCkKK3sKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgKytpKSB7Ci0JCWRtYV91bm1hcF9zaW5nbGUoZGV2LAotCQkJbWRbaV0udmlydHVhbF9hZGRyZXNzLAotCQkJbWRbaV0ubGVuZ3RoLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgKytpKQorCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgbWRbaV0udmEsIG1kW2ldLmxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwogfQogCiAvKioKQEAgLTMzMCwyMyArMzI3LDI2IEBACiAJCQkgICBzdHJ1Y3Qgc3JwX2V2ZW50X3N0cnVjdCAqZXZ0X3N0cnVjdCwKIAkJCSAgIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoKGNtZC0+ZGF0YV9vdXRfZm9ybWF0ID09IFNSUF9OT19CVUZGRVIpICYmCi0JICAgIChjbWQtPmRhdGFfaW5fZm9ybWF0ID09IFNSUF9OT19CVUZGRVIpKQorCXU4IG91dF9mbXQsIGluX2ZtdDsKKworCW91dF9mbXQgPSBjbWQtPmJ1Zl9mbXQgPj4gNDsKKwlpbl9mbXQgPSBjbWQtPmJ1Zl9mbXQgJiAoKDFVIDw8IDQpIC0gMSk7CisKKwlpZiAob3V0X2ZtdCA9PSBTUlBfTk9fREFUQV9ERVNDICYmIGluX2ZtdCA9PSBTUlBfTk9fREFUQV9ERVNDKQogCQlyZXR1cm47Ci0JZWxzZSBpZiAoKGNtZC0+ZGF0YV9vdXRfZm9ybWF0ID09IFNSUF9ESVJFQ1RfQlVGRkVSKSB8fAotCQkgKGNtZC0+ZGF0YV9pbl9mb3JtYXQgPT0gU1JQX0RJUkVDVF9CVUZGRVIpKSB7Ci0JCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqZGF0YSA9Ci0JCQkoc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICopY21kLT5hZGRpdGlvbmFsX2RhdGE7Ci0JCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkYXRhLT52aXJ0dWFsX2FkZHJlc3MsIGRhdGEtPmxlbmd0aCwKLQkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCWVsc2UgaWYgKG91dF9mbXQgPT0gU1JQX0RBVEFfREVTQ19ESVJFQ1QgfHwKKwkJIGluX2ZtdCA9PSBTUlBfREFUQV9ERVNDX0RJUkVDVCkgeworCQlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKmRhdGEgPQorCQkJKHN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqKSBjbWQtPmFkZF9kYXRhOworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZGF0YS0+dmEsIGRhdGEtPmxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yICppbmRpcmVjdCA9Ci0JCQkoc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgKiljbWQtPmFkZGl0aW9uYWxfZGF0YTsKLQkJaW50IG51bV9tYXBwZWQgPSBpbmRpcmVjdC0+aGVhZC5sZW5ndGggLyAKLQkJCXNpemVvZihpbmRpcmVjdC0+bGlzdFswXSk7CisJCXN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmICppbmRpcmVjdCA9CisJCQkoc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKikgY21kLT5hZGRfZGF0YTsKKwkJaW50IG51bV9tYXBwZWQgPSBpbmRpcmVjdC0+dGFibGVfZGVzYy5sZW4gLworCQkJc2l6ZW9mKHN0cnVjdCBzcnBfZGlyZWN0X2J1Zik7CiAKIAkJaWYgKG51bV9tYXBwZWQgPD0gTUFYX0lORElSRUNUX0JVRlMpIHsKLQkJCXVubWFwX3NnX2xpc3QobnVtX21hcHBlZCwgZGV2LCAmaW5kaXJlY3QtPmxpc3RbMF0pOworCQkJdW5tYXBfc2dfbGlzdChudW1fbWFwcGVkLCBkZXYsICZpbmRpcmVjdC0+ZGVzY19saXN0WzBdKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0zNTYsMTcgKzM1NiwxNyBAQAogCiBzdGF0aWMgaW50IG1hcF9zZ19saXN0KGludCBudW1fZW50cmllcywgCiAJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkgICAgICAgc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICptZCkKKwkJICAgICAgIHN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqbWQpCiB7CiAJaW50IGk7CiAJdTY0IHRvdGFsX2xlbmd0aCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7ICsraSkgewotCQlzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKmRlc2NyID0gbWQgKyBpOworCQlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKmRlc2NyID0gbWQgKyBpOwogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2VudHJ5ID0gJnNnW2ldOwotCQlkZXNjci0+dmlydHVhbF9hZGRyZXNzID0gc2dfZG1hX2FkZHJlc3Moc2dfZW50cnkpOwotCQlkZXNjci0+bGVuZ3RoID0gc2dfZG1hX2xlbihzZ19lbnRyeSk7Ci0JCWRlc2NyLT5tZW1vcnlfaGFuZGxlID0gMDsKKwkJZGVzY3ItPnZhID0gc2dfZG1hX2FkZHJlc3Moc2dfZW50cnkpOworCQlkZXNjci0+bGVuID0gc2dfZG1hX2xlbihzZ19lbnRyeSk7CisJCWRlc2NyLT5rZXkgPSAwOwogCQl0b3RhbF9sZW5ndGggKz0gc2dfZG1hX2xlbihzZ19lbnRyeSk7CiAgCX0KIAlyZXR1cm4gdG90YWxfbGVuZ3RoOwpAQCAtMzg5LDEwICszODksMTAgQEAKIAlpbnQgc2dfbWFwcGVkOwogCXU2NCB0b3RhbF9sZW5ndGggPSAwOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBjbWQtPnJlcXVlc3RfYnVmZmVyOwotCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqZGF0YSA9Ci0JICAgIChzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKilzcnBfY21kLT5hZGRpdGlvbmFsX2RhdGE7Ci0Jc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgKmluZGlyZWN0ID0KLQkgICAgKHN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yICopZGF0YTsKKwlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKmRhdGEgPQorCQkoc3RydWN0IHNycF9kaXJlY3RfYnVmICopIHNycF9jbWQtPmFkZF9kYXRhOworCXN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmICppbmRpcmVjdCA9CisJCShzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqKSBkYXRhOwogCiAJc2dfbWFwcGVkID0gZG1hX21hcF9zZyhkZXYsIHNnLCBjbWQtPnVzZV9zZywgRE1BX0JJRElSRUNUSU9OQUwpOwogCkBAIC00MDMsOSArNDAzLDkgQEAKIAogCS8qIHNwZWNpYWwgY2FzZTsgd2UgY2FuIHVzZSBhIHNpbmdsZSBkaXJlY3QgZGVzY3JpcHRvciAqLwogCWlmIChzZ19tYXBwZWQgPT0gMSkgewotCQlkYXRhLT52aXJ0dWFsX2FkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcygmc2dbMF0pOwotCQlkYXRhLT5sZW5ndGggPSBzZ19kbWFfbGVuKCZzZ1swXSk7Ci0JCWRhdGEtPm1lbW9yeV9oYW5kbGUgPSAwOworCQlkYXRhLT52YSA9IHNnX2RtYV9hZGRyZXNzKCZzZ1swXSk7CisJCWRhdGEtPmxlbiA9IHNnX2RtYV9sZW4oJnNnWzBdKTsKKwkJZGF0YS0+a2V5ID0gMDsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC00MTYsMjUgKzQxNiwyNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpbmRpcmVjdC0+aGVhZC52aXJ0dWFsX2FkZHJlc3MgPSAwOwotCWluZGlyZWN0LT5oZWFkLmxlbmd0aCA9IHNnX21hcHBlZCAqIHNpemVvZihpbmRpcmVjdC0+bGlzdFswXSk7Ci0JaW5kaXJlY3QtPmhlYWQubWVtb3J5X2hhbmRsZSA9IDA7CisJaW5kaXJlY3QtPnRhYmxlX2Rlc2MudmEgPSAwOworCWluZGlyZWN0LT50YWJsZV9kZXNjLmxlbiA9IHNnX21hcHBlZCAqIHNpemVvZihzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpOworCWluZGlyZWN0LT50YWJsZV9kZXNjLmtleSA9IDA7CiAKIAlpZiAoc2dfbWFwcGVkIDw9IE1BWF9JTkRJUkVDVF9CVUZTKSB7Ci0JCXRvdGFsX2xlbmd0aCA9IG1hcF9zZ19saXN0KHNnX21hcHBlZCwgc2csICZpbmRpcmVjdC0+bGlzdFswXSk7Ci0JCWluZGlyZWN0LT50b3RhbF9sZW5ndGggPSB0b3RhbF9sZW5ndGg7CisJCXRvdGFsX2xlbmd0aCA9IG1hcF9zZ19saXN0KHNnX21hcHBlZCwgc2csCisJCQkJCSAgICZpbmRpcmVjdC0+ZGVzY19saXN0WzBdKTsKKwkJaW5kaXJlY3QtPmxlbiA9IHRvdGFsX2xlbmd0aDsKIAkJcmV0dXJuIDE7CiAJfQogCiAJLyogZ2V0IGluZGlyZWN0IHRhYmxlICovCiAJaWYgKCFldnRfc3RydWN0LT5leHRfbGlzdCkgewotCQlldnRfc3RydWN0LT5leHRfbGlzdCA9KHN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciopCisJCWV2dF9zdHJ1Y3QtPmV4dF9saXN0ID0gKHN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqKQogCQkJZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgCi0JCQkJU0dfQUxMICogc2l6ZW9mKHN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciksCi0JCQkJJmV2dF9zdHJ1Y3QtPmV4dF9saXN0X3Rva2VuLCAwKTsKKwkJCQkJICAgU0dfQUxMICogc2l6ZW9mKHN0cnVjdCBzcnBfZGlyZWN0X2J1ZiksCisJCQkJCSAgICZldnRfc3RydWN0LT5leHRfbGlzdF90b2tlbiwgMCk7CiAJCWlmICghZXZ0X3N0cnVjdC0+ZXh0X2xpc3QpIHsKLQkJICAgIHByaW50ayhLRVJOX0VSUgotCQkgICAJImlibXZzY3NpOiBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluZGlyZWN0IHRhYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJpYm12c2NzaTogQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpbmRpcmVjdCB0YWJsZVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJCQogCQl9CkBAIC00NDIsMTEgKzQ0MywxMSBAQAogCiAJdG90YWxfbGVuZ3RoID0gbWFwX3NnX2xpc3Qoc2dfbWFwcGVkLCBzZywgZXZ0X3N0cnVjdC0+ZXh0X2xpc3QpOwkKIAotCWluZGlyZWN0LT50b3RhbF9sZW5ndGggPSB0b3RhbF9sZW5ndGg7Ci0JaW5kaXJlY3QtPmhlYWQudmlydHVhbF9hZGRyZXNzID0gZXZ0X3N0cnVjdC0+ZXh0X2xpc3RfdG9rZW47Ci0JaW5kaXJlY3QtPmhlYWQubGVuZ3RoID0gc2dfbWFwcGVkICogc2l6ZW9mKGluZGlyZWN0LT5saXN0WzBdKTsKLQltZW1jcHkoaW5kaXJlY3QtPmxpc3QsIGV2dF9zdHJ1Y3QtPmV4dF9saXN0LAotCQlNQVhfSU5ESVJFQ1RfQlVGUyAqIHNpemVvZihzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IpKTsKKwlpbmRpcmVjdC0+bGVuID0gdG90YWxfbGVuZ3RoOworCWluZGlyZWN0LT50YWJsZV9kZXNjLnZhID0gZXZ0X3N0cnVjdC0+ZXh0X2xpc3RfdG9rZW47CisJaW5kaXJlY3QtPnRhYmxlX2Rlc2MubGVuID0gc2dfbWFwcGVkICogc2l6ZW9mKGluZGlyZWN0LT5kZXNjX2xpc3RbMF0pOworCW1lbWNweShpbmRpcmVjdC0+ZGVzY19saXN0LCBldnRfc3RydWN0LT5leHRfbGlzdCwKKwkgICAgICAgTUFYX0lORElSRUNUX0JVRlMgKiBzaXplb2Yoc3RydWN0IHNycF9kaXJlY3RfYnVmKSk7CiAJCiAgCXJldHVybiAxOwogfQpAQCAtNDYzLDIwICs0NjQsMjAgQEAKIHN0YXRpYyBpbnQgbWFwX3NpbmdsZV9kYXRhKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKIAkJCSAgIHN0cnVjdCBzcnBfY21kICpzcnBfY21kLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICpkYXRhID0KLQkgICAgKHN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqKXNycF9jbWQtPmFkZGl0aW9uYWxfZGF0YTsKKwlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKmRhdGEgPQorCQkoc3RydWN0IHNycF9kaXJlY3RfYnVmICopIHNycF9jbWQtPmFkZF9kYXRhOwogCi0JZGF0YS0+dmlydHVhbF9hZGRyZXNzID0KKwlkYXRhLT52YSA9CiAJCWRtYV9tYXBfc2luZ2xlKGRldiwgY21kLT5yZXF1ZXN0X2J1ZmZlciwKIAkJCSAgICAgICBjbWQtPnJlcXVlc3RfYnVmZmxlbiwKIAkJCSAgICAgICBETUFfQklESVJFQ1RJT05BTCk7Ci0JaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRhdGEtPnZpcnR1YWxfYWRkcmVzcykpIHsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGF0YS0+dmEpKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgImlibXZzY3NpOiBVbmFibGUgdG8gbWFwIHJlcXVlc3RfYnVmZmVyIGZvciBjb21tYW5kIVxuIik7CiAJCXJldHVybiAwOwogCX0KLQlkYXRhLT5sZW5ndGggPSBjbWQtPnJlcXVlc3RfYnVmZmxlbjsKLQlkYXRhLT5tZW1vcnlfaGFuZGxlID0gMDsKKwlkYXRhLT5sZW4gPSBjbWQtPnJlcXVlc3RfYnVmZmxlbjsKKwlkYXRhLT5rZXkgPSAwOwogCiAJc2V0X3NycF9kaXJlY3Rpb24oY21kLCBzcnBfY21kLCAxKTsKIApAQCAtNTQ4LDcgKzU0OSw3IEBACiAKIAkvKiBDb3B5IHRoZSBJVSBpbnRvIHRoZSB0cmFuc2ZlciBhcmVhICovCiAJKmV2dF9zdHJ1Y3QtPnhmZXJfaXUgPSBldnRfc3RydWN0LT5pdTsKLQlldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAuZ2VuZXJpYy50YWcgPSAodTY0KWV2dF9zdHJ1Y3Q7CisJZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLnJzcC50YWcgPSAodTY0KWV2dF9zdHJ1Y3Q7CiAKIAkvKiBBZGQgdGhpcyB0byB0aGUgc2VudCBsaXN0LiAgV2UgbmVlZCB0byBkbyB0aGlzIAogCSAqIGJlZm9yZSB3ZSBhY3R1YWxseSBzZW5kIApAQCAtNTg2LDI3ICs1ODcsMjcgQEAKIAlzdHJ1Y3Qgc3JwX3JzcCAqcnNwID0gJmV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5yc3A7CiAJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IGV2dF9zdHJ1Y3QtPmNtbmQ7CiAKLQlpZiAodW5saWtlbHkocnNwLT50eXBlICE9IFNSUF9SU1BfVFlQRSkpIHsKKwlpZiAodW5saWtlbHkocnNwLT5vcGNvZGUgIT0gU1JQX1JTUCkpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkgICAgICAgImlibXZzY3NpOiBiYWQgU1JQIFJTUCB0eXBlICVkXG4iLAotCQkJICAgICAgIHJzcC0+dHlwZSk7CisJCQkgICAgICAgcnNwLT5vcGNvZGUpOwogCX0KIAkKIAlpZiAoY21uZCkgewogCQljbW5kLT5yZXN1bHQgPSByc3AtPnN0YXR1czsKIAkJaWYgKCgoY21uZC0+cmVzdWx0ID4+IDEpICYgMHgxZikgPT0gQ0hFQ0tfQ09ORElUSU9OKQogCQkJbWVtY3B5KGNtbmQtPnNlbnNlX2J1ZmZlciwKLQkJCSAgICAgICByc3AtPnNlbnNlX2FuZF9yZXNwb25zZV9kYXRhLAotCQkJICAgICAgIHJzcC0+c2Vuc2VfZGF0YV9saXN0X2xlbmd0aCk7CisJCQkgICAgICAgcnNwLT5kYXRhLAorCQkJICAgICAgIHJzcC0+c2Vuc2VfZGF0YV9sZW4pOwogCQl1bm1hcF9jbWRfZGF0YSgmZXZ0X3N0cnVjdC0+aXUuc3JwLmNtZCwgCiAJCQkgICAgICAgZXZ0X3N0cnVjdCwgCiAJCQkgICAgICAgZXZ0X3N0cnVjdC0+aG9zdGRhdGEtPmRldik7CiAKLQkJaWYgKHJzcC0+ZG9vdmVyKQotCQkJY21uZC0+cmVzaWQgPSByc3AtPmRhdGFfb3V0X3Jlc2lkdWFsX2NvdW50OwotCQllbHNlIGlmIChyc3AtPmRpb3ZlcikKLQkJCWNtbmQtPnJlc2lkID0gcnNwLT5kYXRhX2luX3Jlc2lkdWFsX2NvdW50OworCQlpZiAocnNwLT5mbGFncyAmIFNSUF9SU1BfRkxBR19ET09WRVIpCisJCQljbW5kLT5yZXNpZCA9IHJzcC0+ZGF0YV9vdXRfcmVzX2NudDsKKwkJZWxzZSBpZiAocnNwLT5mbGFncyAmIFNSUF9SU1BfRkxBR19ESU9WRVIpCisJCQljbW5kLT5yZXNpZCA9IHJzcC0+ZGF0YV9pbl9yZXNfY250OwogCX0KIAogCWlmIChldnRfc3RydWN0LT5jbW5kX2RvbmUpCkBAIC02MzMsMTAgKzYzNCwxMSBAQAogewogCXN0cnVjdCBzcnBfY21kICpzcnBfY21kOwogCXN0cnVjdCBzcnBfZXZlbnRfc3RydWN0ICpldnRfc3RydWN0OwotCXN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yICppbmRpcmVjdDsKKwlzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqaW5kaXJlY3Q7CiAJc3RydWN0IGlibXZzY3NpX2hvc3RfZGF0YSAqaG9zdGRhdGEgPQogCQkoc3RydWN0IGlibXZzY3NpX2hvc3RfZGF0YSAqKSZjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCXUxNiBsdW4gPSBsdW5fZnJvbV9kZXYoY21uZC0+ZGV2aWNlKTsKKwl1OCBvdXRfZm10LCBpbl9mbXQ7CiAKIAlldnRfc3RydWN0ID0gZ2V0X2V2ZW50X3N0cnVjdCgmaG9zdGRhdGEtPnBvb2wpOwogCWlmICghZXZ0X3N0cnVjdCkKQEAgLTY0NCw4ICs2NDYsOCBAQAogCiAJLyogU2V0IHVwIHRoZSBhY3R1YWwgU1JQIElVICovCiAJc3JwX2NtZCA9ICZldnRfc3RydWN0LT5pdS5zcnAuY21kOwotCW1lbXNldChzcnBfY21kLCAweDAwLCBzaXplb2YoKnNycF9jbWQpKTsKLQlzcnBfY21kLT50eXBlID0gU1JQX0NNRF9UWVBFOworCW1lbXNldChzcnBfY21kLCAweDAwLCBTUlBfTUFYX0lVX0xFTik7CisJc3JwX2NtZC0+b3Bjb2RlID0gU1JQX0NNRDsKIAltZW1jcHkoc3JwX2NtZC0+Y2RiLCBjbW5kLT5jbW5kLCBzaXplb2YoY21uZC0+Y21uZCkpOwogCXNycF9jbWQtPmx1biA9ICgodTY0KSBsdW4pIDw8IDQ4OwogCkBAIC02NjQsMTMgKzY2NiwxNSBAQAogCWV2dF9zdHJ1Y3QtPmNtbmRfZG9uZSA9IGRvbmU7CiAKIAkvKiBGaXggdXAgZG1hIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBpdHNlbGYgKi8KLQlpbmRpcmVjdCA9IChzdHJ1Y3QgaW5kaXJlY3RfZGVzY3JpcHRvciAqKXNycF9jbWQtPmFkZGl0aW9uYWxfZGF0YTsKLQlpZiAoKChzcnBfY21kLT5kYXRhX291dF9mb3JtYXQgPT0gU1JQX0lORElSRUNUX0JVRkZFUikgfHwKLQkgICAgKHNycF9jbWQtPmRhdGFfaW5fZm9ybWF0ID09IFNSUF9JTkRJUkVDVF9CVUZGRVIpKSAmJgotCSAgICAoaW5kaXJlY3QtPmhlYWQudmlydHVhbF9hZGRyZXNzID09IDApKSB7Ci0JCWluZGlyZWN0LT5oZWFkLnZpcnR1YWxfYWRkcmVzcyA9IGV2dF9zdHJ1Y3QtPmNycS5JVV9kYXRhX3B0ciArCi0JCSAgICBvZmZzZXRvZihzdHJ1Y3Qgc3JwX2NtZCwgYWRkaXRpb25hbF9kYXRhKSArCi0JCSAgICBvZmZzZXRvZihzdHJ1Y3QgaW5kaXJlY3RfZGVzY3JpcHRvciwgbGlzdCk7CisJaW5kaXJlY3QgPSAoc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKikgc3JwX2NtZC0+YWRkX2RhdGE7CisJb3V0X2ZtdCA9IHNycF9jbWQtPmJ1Zl9mbXQgPj4gNDsKKwlpbl9mbXQgPSBzcnBfY21kLT5idWZfZm10ICYgKCgxVSA8PCA0KSAtIDEpOworCWlmICgoaW5fZm10ID09IFNSUF9EQVRBX0RFU0NfSU5ESVJFQ1QgfHwKKwkgICAgIG91dF9mbXQgPT0gU1JQX0RBVEFfREVTQ19JTkRJUkVDVCkgJiYKKwkgICAgaW5kaXJlY3QtPnRhYmxlX2Rlc2MudmEgPT0gMCkgeworCQlpbmRpcmVjdC0+dGFibGVfZGVzYy52YSA9IGV2dF9zdHJ1Y3QtPmNycS5JVV9kYXRhX3B0ciArCisJCQlvZmZzZXRvZihzdHJ1Y3Qgc3JwX2NtZCwgYWRkX2RhdGEpICsKKwkJCW9mZnNldG9mKHN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmLCBkZXNjX2xpc3QpOwogCX0KIAogCXJldHVybiBpYm12c2NzaV9zZW5kX3NycF9ldmVudChldnRfc3RydWN0LCBob3N0ZGF0YSk7CkBAIC03MzUsNyArNzM5LDggQEAKIHsKIAlzdHJ1Y3Qgdmlvc3JwX2FkYXB0ZXJfaW5mbyAqcmVxOwogCXN0cnVjdCBzcnBfZXZlbnRfc3RydWN0ICpldnRfc3RydWN0OwotCQorCWRtYV9hZGRyX3QgYWRkcjsKKwogCWV2dF9zdHJ1Y3QgPSBnZXRfZXZlbnRfc3RydWN0KCZob3N0ZGF0YS0+cG9vbCk7CiAJaWYgKCFldnRfc3RydWN0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWJtdnNjc2k6IGNvdWxkbid0IGFsbG9jYXRlIGFuIGV2ZW50ICIKQEAgLTc1MywxMCArNzU4LDEwIEBACiAJCiAJcmVxLT5jb21tb24udHlwZSA9IFZJT1NSUF9BREFQVEVSX0lORk9fVFlQRTsKIAlyZXEtPmNvbW1vbi5sZW5ndGggPSBzaXplb2YoaG9zdGRhdGEtPm1hZGFwdGVyX2luZm8pOwotCXJlcS0+YnVmZmVyID0gZG1hX21hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwKLQkJCQkgICAgICZob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mbywKLQkJCQkgICAgIHNpemVvZihob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mbyksCi0JCQkJICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJcmVxLT5idWZmZXIgPSBhZGRyID0gZG1hX21hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwKKwkJCQkJICAgICZob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mbywKKwkJCQkJICAgIHNpemVvZihob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mbyksCisJCQkJCSAgICBETUFfQklESVJFQ1RJT05BTCk7CiAKIAlpZiAoZG1hX21hcHBpbmdfZXJyb3IocmVxLT5idWZmZXIpKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtNzY2LDggKzc3MSwxMyBAQAogCQlyZXR1cm47CiAJfQogCQotCWlmIChpYm12c2NzaV9zZW5kX3NycF9ldmVudChldnRfc3RydWN0LCBob3N0ZGF0YSkpCisJaWYgKGlibXZzY3NpX3NlbmRfc3JwX2V2ZW50KGV2dF9zdHJ1Y3QsIGhvc3RkYXRhKSkgewogCQlwcmludGsoS0VSTl9FUlIgImlibXZzY3NpOiBjb3VsZG4ndCBzZW5kIEFEQVBURVJfSU5GT19SRVEhXG4iKTsKKwkJZG1hX3VubWFwX3NpbmdsZShob3N0ZGF0YS0+ZGV2LAorCQkJCSBhZGRyLAorCQkJCSBzaXplb2YoaG9zdGRhdGEtPm1hZGFwdGVyX2luZm8pLAorCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJfQogfTsKIAogLyoqCkBAIC03ODAsMTAgKzc5MCwxMCBAQAogc3RhdGljIHZvaWQgbG9naW5fcnNwKHN0cnVjdCBzcnBfZXZlbnRfc3RydWN0ICpldnRfc3RydWN0KQogewogCXN0cnVjdCBpYm12c2NzaV9ob3N0X2RhdGEgKmhvc3RkYXRhID0gZXZ0X3N0cnVjdC0+aG9zdGRhdGE7Ci0Jc3dpdGNoIChldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAuZ2VuZXJpYy50eXBlKSB7Ci0JY2FzZSBTUlBfTE9HSU5fUlNQX1RZUEU6CS8qIGl0IHdvcmtlZCEgKi8KKwlzd2l0Y2ggKGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5sb2dpbl9yc3Aub3Bjb2RlKSB7CisJY2FzZSBTUlBfTE9HSU5fUlNQOgkvKiBpdCB3b3JrZWQhICovCiAJCWJyZWFrOwotCWNhc2UgU1JQX0xPR0lOX1JFSl9UWVBFOgkvKiByZWZ1c2VkISAqLworCWNhc2UgU1JQX0xPR0lOX1JFSjoJLyogcmVmdXNlZCEgKi8KIAkJcHJpbnRrKEtFUk5fSU5GTyAiaWJtdnNjc2k6IFNSUF9MT0dJTl9SRUogcmVhc29uICV1XG4iLAogCQkgICAgICAgZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3Jlai5yZWFzb24pOwogCQkvKiBMb2dpbiBmYWlsZWQuICAqLwpAQCAtNzkyLDcgKzgwMiw3IEBACiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiaWJtdnNjc2k6IEludmFsaWQgbG9naW4gcmVzcG9uc2UgdHlwZWNvZGUgMHglMDJ4IVxuIiwKLQkJICAgICAgIGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5nZW5lcmljLnR5cGUpOworCQkgICAgICAgZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5vcGNvZGUpOwogCQkvKiBMb2dpbiBmYWlsZWQuICAqLwogCQlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwgLTEpOwogCQlyZXR1cm47CkBAIC04MDAsMTcgKzgxMCwxNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaWJtdnNjc2k6IFNSUF9MT0dJTiBzdWNjZWVkZWRcbiIpOwogCi0JaWYgKGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5sb2dpbl9yc3AucmVxdWVzdF9saW1pdF9kZWx0YSA+CisJaWYgKGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5sb2dpbl9yc3AucmVxX2xpbV9kZWx0YSA+CiAJICAgIChtYXhfcmVxdWVzdHMgLSAyKSkKLQkJZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5yZXF1ZXN0X2xpbWl0X2RlbHRhID0KKwkJZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5yZXFfbGltX2RlbHRhID0KIAkJICAgIG1heF9yZXF1ZXN0cyAtIDI7CiAKIAkvKiBOb3cgd2Uga25vdyB3aGF0IHRoZSByZWFsIHJlcXVlc3QtbGltaXQgaXMgKi8KIAlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwKLQkJICAgZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5yZXF1ZXN0X2xpbWl0X2RlbHRhKTsKKwkJICAgZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5yZXFfbGltX2RlbHRhKTsKIAogCWhvc3RkYXRhLT5ob3N0LT5jYW5fcXVldWUgPQotCSAgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcXVlc3RfbGltaXRfZGVsdGEgLSAyOworCSAgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcV9saW1fZGVsdGEgLSAyOwogCiAJaWYgKGhvc3RkYXRhLT5ob3N0LT5jYW5fcXVldWUgPCAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWJtdnNjc2k6IEludmFsaWQgcmVxdWVzdF9saW1pdF9kZWx0YVxuIik7CkBAIC04NDksMTggKzg1OSwxOSBAQAogCiAJbG9naW4gPSAmZXZ0X3N0cnVjdC0+aXUuc3JwLmxvZ2luX3JlcTsKIAltZW1zZXQobG9naW4sIDB4MDAsIHNpemVvZihzdHJ1Y3Qgc3JwX2xvZ2luX3JlcSkpOwotCWxvZ2luLT50eXBlID0gU1JQX0xPR0lOX1JFUV9UWVBFOwotCWxvZ2luLT5tYXhfcmVxdWVzdGVkX2luaXRpYXRvcl90b190YXJnZXRfaXVsZW4gPSBzaXplb2YodW5pb24gc3JwX2l1KTsKLQlsb2dpbi0+cmVxdWlyZWRfYnVmZmVyX2Zvcm1hdHMgPSAweDAwMDY7CisJbG9naW4tPm9wY29kZSA9IFNSUF9MT0dJTl9SRVE7CisJbG9naW4tPnJlcV9pdF9pdV9sZW4gPSBzaXplb2YodW5pb24gc3JwX2l1KTsKKwlsb2dpbi0+cmVxX2J1Zl9mbXQgPSBTUlBfQlVGX0ZPUk1BVF9ESVJFQ1QgfCBTUlBfQlVGX0ZPUk1BVF9JTkRJUkVDVDsKIAkKKwlzcGluX2xvY2tfaXJxc2F2ZShob3N0ZGF0YS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJLyogU3RhcnQgb3V0IHdpdGggYSByZXF1ZXN0IGxpbWl0IG9mIDEsIHNpbmNlIHRoaXMgaXMgbmVnb3RpYXRlZCBpbgogCSAqIHRoZSBsb2dpbiByZXF1ZXN0IHdlIGFyZSBqdXN0IHNlbmRpbmcKIAkgKi8KIAlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwgMSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShob3N0ZGF0YS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJcmMgPSBpYm12c2NzaV9zZW5kX3NycF9ldmVudChldnRfc3RydWN0LCBob3N0ZGF0YSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0ZGF0YS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJcHJpbnRrKCJpYm12c2NzaWM6IHNlbnQgU1JQIGxvZ2luXG4iKTsKIAlyZXR1cm4gcmM7CiB9OwogCkBAIC05MjgsMTMgKzkzOSwxMyBAQAogCQogCS8qIFNldCB1cCBhbiBhYm9ydCBTUlAgY29tbWFuZCAqLwogCW1lbXNldCh0c2tfbWdtdCwgMHgwMCwgc2l6ZW9mKCp0c2tfbWdtdCkpOwotCXRza19tZ210LT50eXBlID0gU1JQX1RTS19NR01UX1RZUEU7CisJdHNrX21nbXQtPm9wY29kZSA9IFNSUF9UU0tfTUdNVDsKIAl0c2tfbWdtdC0+bHVuID0gKCh1NjQpIGx1bikgPDwgNDg7Ci0JdHNrX21nbXQtPnRhc2tfbWdtdF9mbGFncyA9IDB4MDE7CS8qIEFCT1JUIFRBU0sgKi8KLQl0c2tfbWdtdC0+bWFuYWdlZF90YXNrX3RhZyA9ICh1NjQpIGZvdW5kX2V2dDsKKwl0c2tfbWdtdC0+dHNrX21nbXRfZnVuYyA9IFNSUF9UU0tfQUJPUlRfVEFTSzsKKwl0c2tfbWdtdC0+dGFza190YWcgPSAodTY0KSBmb3VuZF9ldnQ7CiAKIAlwcmludGsoS0VSTl9JTkZPICJpYm12c2NzaTogYWJvcnRpbmcgY29tbWFuZC4gbHVuIDB4JWx4LCB0YWcgMHglbHhcbiIsCi0JICAgICAgIHRza19tZ210LT5sdW4sIHRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnKTsKKwkgICAgICAgdHNrX21nbXQtPmx1biwgdHNrX21nbXQtPnRhc2tfdGFnKTsKIAogCWV2dC0+c3luY19zcnAgPSAmc3JwX3JzcDsKIAlpbml0X2NvbXBsZXRpb24oJmV2dC0+Y29tcCk7CkBAIC05NDgsMjUgKzk1OSwyNSBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV2dC0+Y29tcCk7CiAKIAkvKiBtYWtlIHN1cmUgd2UgZ290IGEgZ29vZCByZXNwb25zZSAqLwotCWlmICh1bmxpa2VseShzcnBfcnNwLnNycC5nZW5lcmljLnR5cGUgIT0gU1JQX1JTUF9UWVBFKSkgeworCWlmICh1bmxpa2VseShzcnBfcnNwLnNycC5yc3Aub3Bjb2RlICE9IFNSUF9SU1ApKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIAogCQkJICAgICAgICJpYm12c2NzaTogYWJvcnQgYmFkIFNSUCBSU1AgdHlwZSAlZFxuIiwKLQkJCSAgICAgICBzcnBfcnNwLnNycC5nZW5lcmljLnR5cGUpOworCQkJICAgICAgIHNycF9yc3Auc3JwLnJzcC5vcGNvZGUpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAotCWlmIChzcnBfcnNwLnNycC5yc3AucnNwdmFsaWQpCi0JCXJzcF9yYyA9ICooKGludCAqKXNycF9yc3Auc3JwLnJzcC5zZW5zZV9hbmRfcmVzcG9uc2VfZGF0YSk7CisJaWYgKHNycF9yc3Auc3JwLnJzcC5mbGFncyAmIFNSUF9SU1BfRkxBR19SU1BWQUxJRCkKKwkJcnNwX3JjID0gKigoaW50ICopc3JwX3JzcC5zcnAucnNwLmRhdGEpOwogCWVsc2UKIAkJcnNwX3JjID0gc3JwX3JzcC5zcnAucnNwLnN0YXR1czsKIAogCWlmIChyc3BfcmMpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgCi0JCSAgICAgICAiaWJtdnNjc2k6IGFib3J0IGNvZGUgJWQgZm9yIHRhc2sgdGFnIDB4JWx4XG4iLAorCQkJICAgICAgICJpYm12c2NzaTogYWJvcnQgY29kZSAlZCBmb3IgdGFzayB0YWcgMHglbHhcbiIsCiAJCQkgICAgICAgcnNwX3JjLAotCQkJICAgICAgIHRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnKTsKKwkJCSAgICAgICB0c2tfbWdtdC0+dGFza190YWcpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIApAQCAtOTg3LDEzICs5OTgsMTMgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0ZGF0YS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCXByaW50ayhLRVJOX0lORk8KIAkJICAgICAgICJpYm12c2NzaTogYWJvcnRlZCB0YXNrIHRhZyAweCVseCBjb21wbGV0ZWRcbiIsCi0JCSAgICAgICB0c2tfbWdtdC0+bWFuYWdlZF90YXNrX3RhZyk7CisJCSAgICAgICB0c2tfbWdtdC0+dGFza190YWcpOwogCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICJpYm12c2NzaTogc3VjY2Vzc2Z1bGx5IGFib3J0ZWQgdGFzayB0YWcgMHglbHhcbiIsCi0JICAgICAgIHRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnKTsKKwkgICAgICAgdHNrX21nbXQtPnRhc2tfdGFnKTsKIAogCWNtZC0+cmVzdWx0ID0gKERJRF9BQk9SVCA8PCAxNik7CiAJbGlzdF9kZWwoJmZvdW5kX2V2dC0+bGlzdCk7CkBAIC0xMDQwLDkgKzEwNTEsOSBAQAogCiAJLyogU2V0IHVwIGEgbHVuIHJlc2V0IFNSUCBjb21tYW5kICovCiAJbWVtc2V0KHRza19tZ210LCAweDAwLCBzaXplb2YoKnRza19tZ210KSk7Ci0JdHNrX21nbXQtPnR5cGUgPSBTUlBfVFNLX01HTVRfVFlQRTsKKwl0c2tfbWdtdC0+b3Bjb2RlID0gU1JQX1RTS19NR01UOwogCXRza19tZ210LT5sdW4gPSAoKHU2NCkgbHVuKSA8PCA0ODsKLQl0c2tfbWdtdC0+dGFza19tZ210X2ZsYWdzID0gMHgwODsJLyogTFVOIFJFU0VUICovCisJdHNrX21nbXQtPnRza19tZ210X2Z1bmMgPSBTUlBfVFNLX0xVTl9SRVNFVDsKIAogCXByaW50ayhLRVJOX0lORk8gImlibXZzY3NpOiByZXNldHRpbmcgZGV2aWNlLiBsdW4gMHglbHhcbiIsCiAJICAgICAgIHRza19tZ210LT5sdW4pOwpAQCAtMTA1OSwxNiArMTA3MCwxNiBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV2dC0+Y29tcCk7CiAKIAkvKiBtYWtlIHN1cmUgd2UgZ290IGEgZ29vZCByZXNwb25zZSAqLwotCWlmICh1bmxpa2VseShzcnBfcnNwLnNycC5nZW5lcmljLnR5cGUgIT0gU1JQX1JTUF9UWVBFKSkgeworCWlmICh1bmxpa2VseShzcnBfcnNwLnNycC5yc3Aub3Bjb2RlICE9IFNSUF9SU1ApKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIAogCQkJICAgICAgICJpYm12c2NzaTogcmVzZXQgYmFkIFNSUCBSU1AgdHlwZSAlZFxuIiwKLQkJCSAgICAgICBzcnBfcnNwLnNycC5nZW5lcmljLnR5cGUpOworCQkJICAgICAgIHNycF9yc3Auc3JwLnJzcC5vcGNvZGUpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAotCWlmIChzcnBfcnNwLnNycC5yc3AucnNwdmFsaWQpCi0JCXJzcF9yYyA9ICooKGludCAqKXNycF9yc3Auc3JwLnJzcC5zZW5zZV9hbmRfcmVzcG9uc2VfZGF0YSk7CisJaWYgKHNycF9yc3Auc3JwLnJzcC5mbGFncyAmIFNSUF9SU1BfRkxBR19SU1BWQUxJRCkKKwkJcnNwX3JjID0gKigoaW50ICopc3JwX3JzcC5zcnAucnNwLmRhdGEpOwogCWVsc2UKIAkJcnNwX3JjID0gc3JwX3JzcC5zcnAucnNwLnN0YXR1czsKIApAQCAtMTA3Niw4ICsxMDg3LDcgQEAKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkgICAgICAgImlibXZzY3NpOiByZXNldCBjb2RlICVkIGZvciB0YXNrIHRhZyAweCVseFxuIiwKLQkJICAgICAgIHJzcF9yYywKLQkJCSAgICAgICB0c2tfbWdtdC0+bWFuYWdlZF90YXNrX3RhZyk7CisJCQkgICAgICAgcnNwX3JjLCB0c2tfbWdtdC0+dGFza190YWcpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIApAQCAtMTE3OSw2ICsxMTg5LDcgQEAKIAkJCS8qIFdlIG5lZWQgdG8gcmUtc2V0dXAgdGhlIGludGVycGFydGl0aW9uIGNvbm5lY3Rpb24gKi8KIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiaWJtdnNjc2k6IFJlLWVuYWJsaW5nIGFkYXB0ZXIhXG4iKTsKKwkJCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LCAtMSk7CiAJCQlwdXJnZV9yZXF1ZXN0cyhob3N0ZGF0YSwgRElEX1JFUVVFVUUpOwogCQkJaWYgKGlibXZzY3NpX3JlZW5hYmxlX2NycV9xdWV1ZSgmaG9zdGRhdGEtPnF1ZXVlLAogCQkJCQkJCWhvc3RkYXRhKSA9PSAwKQpAQCAtMTIyNiw3ICsxMjM3LDcgQEAKIAl9CiAKIAlpZiAoY3JxLT5mb3JtYXQgPT0gVklPU1JQX1NSUF9GT1JNQVQpCi0JCWF0b21pY19hZGQoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLnJzcC5yZXF1ZXN0X2xpbWl0X2RlbHRhLAorCQlhdG9taWNfYWRkKGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5yc3AucmVxX2xpbV9kZWx0YSwKIAkJCSAgICZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCk7CiAKIAlpZiAoZXZ0X3N0cnVjdC0+ZG9uZSkKQEAgLTEyNTQsNiArMTI2NSw3IEBACiB7CiAJc3RydWN0IHZpb3NycF9ob3N0X2NvbmZpZyAqaG9zdF9jb25maWc7CiAJc3RydWN0IHNycF9ldmVudF9zdHJ1Y3QgKmV2dF9zdHJ1Y3Q7CisJZG1hX2FkZHJfdCBhZGRyOwogCWludCByYzsKIAogCWV2dF9zdHJ1Y3QgPSBnZXRfZXZlbnRfc3RydWN0KCZob3N0ZGF0YS0+cG9vbCk7CkBAIC0xMjc0LDggKzEyODYsOSBAQAogCW1lbXNldChob3N0X2NvbmZpZywgMHgwMCwgc2l6ZW9mKCpob3N0X2NvbmZpZykpOwogCWhvc3RfY29uZmlnLT5jb21tb24udHlwZSA9IFZJT1NSUF9IT1NUX0NPTkZJR19UWVBFOwogCWhvc3RfY29uZmlnLT5jb21tb24ubGVuZ3RoID0gbGVuZ3RoOwotCWhvc3RfY29uZmlnLT5idWZmZXIgPSBkbWFfbWFwX3NpbmdsZShob3N0ZGF0YS0+ZGV2LCBidWZmZXIsIGxlbmd0aCwKLQkJCQkJICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwlob3N0X2NvbmZpZy0+YnVmZmVyID0gYWRkciA9IGRtYV9tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsIGJ1ZmZlciwKKwkJCQkJCSAgICBsZW5ndGgsCisJCQkJCQkgICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGhvc3RfY29uZmlnLT5idWZmZXIpKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMTI4NiwxMSArMTI5OSw5IEBACiAKIAlpbml0X2NvbXBsZXRpb24oJmV2dF9zdHJ1Y3QtPmNvbXApOwogCXJjID0gaWJtdnNjc2lfc2VuZF9zcnBfZXZlbnQoZXZ0X3N0cnVjdCwgaG9zdGRhdGEpOwotCWlmIChyYyA9PSAwKSB7CisJaWYgKHJjID09IDApCiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV2dF9zdHJ1Y3QtPmNvbXApOwotCQlkbWFfdW5tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsIGhvc3RfY29uZmlnLT5idWZmZXIsCi0JCQkJIGxlbmd0aCwgRE1BX0JJRElSRUNUSU9OQUwpOwotCX0KKwlkbWFfdW5tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsIGFkZHIsIGxlbmd0aCwgRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmggYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuaAppbmRleCA0NTUwZDcxLi41YzZkOTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuaApAQCAtNjgsNyArNjgsNyBAQAogCXZvaWQgKCpjbW5kX2RvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CiAJdW5pb24gdmlvc3JwX2l1ICpzeW5jX3NycDsKLQlzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKmV4dF9saXN0OworCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZXh0X2xpc3Q7CiAJZG1hX2FkZHJfdCBleHRfbGlzdF90b2tlbjsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYwppbmRleCBmNDdkZDg3Li4xYTk5OTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvcnBhX3ZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlICJpYm12c2NzaS5oIgotI2luY2x1ZGUgInNycC5oIgogCiBzdGF0aWMgY2hhciBwYXJ0aXRpb25fbmFtZVs5N10gPSAiVU5LTk9XTiI7CiBzdGF0aWMgdW5zaWduZWQgaW50IHBhcnRpdGlvbl9udW1iZXIgPSAtMTsKQEAgLTgwLDcgKzc5LDcgQEAKIAl0YXNrbGV0X2tpbGwoJmhvc3RkYXRhLT5zcnBfdGFzayk7CiAJZG8gewogCQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0ZSRUVfQ1JRLCB2ZGV2LT51bml0X2FkZHJlc3MpOwotCX0gd2hpbGUgKChyYyA9PSBIX0J1c3kpIHx8IChIX2lzTG9uZ0J1c3kocmMpKSk7CisJfSB3aGlsZSAoKHJjID09IEhfQlVTWSkgfHwgKEhfSVNfTE9OR19CVVNZKHJjKSkpOwogCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwKIAkJCSBxdWV1ZS0+bXNnX3Rva2VuLAogCQkJIHF1ZXVlLT5zaXplICogc2l6ZW9mKCpxdWV1ZS0+bXNncyksIERNQV9CSURJUkVDVElPTkFMKTsKQEAgLTIzMCw3ICsyMjksNyBAQAogCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUkVHX0NSUSwKIAkJCQl2ZGV2LT51bml0X2FkZHJlc3MsCiAJCQkJcXVldWUtPm1zZ190b2tlbiwgUEFHRV9TSVpFKTsKLQlpZiAocmMgPT0gSF9SZXNvdXJjZSkgCisJaWYgKHJjID09IEhfUkVTT1VSQ0UpCiAJCS8qIG1heWJlIGtleGVjaW5nIGFuZCByZXNvdXJjZSBpcyBidXN5LiB0cnkgYSByZXNldCAqLwogCQlyYyA9IGlibXZzY3NpX3Jlc2V0X2NycV9xdWV1ZShxdWV1ZSwKIAkJCQkJICAgICAgaG9zdGRhdGEpOwpAQCAtMjY5LDcgKzI2OCw3IEBACiAgICAgICByZXFfaXJxX2ZhaWxlZDoKIAlkbyB7CiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfRlJFRV9DUlEsIHZkZXYtPnVuaXRfYWRkcmVzcyk7Ci0JfSB3aGlsZSAoKHJjID09IEhfQnVzeSkgfHwgKEhfaXNMb25nQnVzeShyYykpKTsKKwl9IHdoaWxlICgocmMgPT0gSF9CVVNZKSB8fCAoSF9JU19MT05HX0JVU1kocmMpKSk7CiAgICAgICByZWdfY3JxX2ZhaWxlZDoKIAlkbWFfdW5tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsCiAJCQkgcXVldWUtPm1zZ190b2tlbiwKQEAgLTI5NSw3ICsyOTQsNyBAQAogCS8qIFJlLWVuYWJsZSB0aGUgQ1JRICovCiAJZG8gewogCQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0VOQUJMRV9DUlEsIHZkZXYtPnVuaXRfYWRkcmVzcyk7Ci0JfSB3aGlsZSAoKHJjID09IEhfSW5Qcm9ncmVzcykgfHwgKHJjID09IEhfQnVzeSkgfHwgKEhfaXNMb25nQnVzeShyYykpKTsKKwl9IHdoaWxlICgocmMgPT0gSF9JTl9QUk9HUkVTUykgfHwgKHJjID09IEhfQlVTWSkgfHwgKEhfSVNfTE9OR19CVVNZKHJjKSkpOwogCiAJaWYgKHJjKQogCQlwcmludGsoS0VSTl9FUlIgImlibXZzY3NpOiBFcnJvciAlZCBlbmFibGluZyBhZGFwdGVyXG4iLCByYyk7CkBAIC0zMTcsNyArMzE2LDcgQEAKIAkvKiBDbG9zZSB0aGUgQ1JRICovCiAJZG8gewogCQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0ZSRUVfQ1JRLCB2ZGV2LT51bml0X2FkZHJlc3MpOwotCX0gd2hpbGUgKChyYyA9PSBIX0J1c3kpIHx8IChIX2lzTG9uZ0J1c3kocmMpKSk7CisJfSB3aGlsZSAoKHJjID09IEhfQlVTWSkgfHwgKEhfSVNfTE9OR19CVVNZKHJjKSkpOwogCiAJLyogQ2xlYW4gb3V0IHRoZSBxdWV1ZSAqLwogCW1lbXNldChxdWV1ZS0+bXNncywgMHgwMCwgUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9zcnAuaCBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9zcnAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q4ZTRjNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvc3JwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogc3JwLmggLS0gU0NTSSBSRE1BIFByb3RvY29sIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogV3JpdHRlbiBCeTogQ29saW4gRGV2aWxiaXMsIElCTSBDb3Jwb3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogQ29weXJpZ2h0IChDKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgICAqLwotLyogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAqLwotLyogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAqLwotLyogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgICAqLwotLyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAqLwotLyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgICAqLwotLyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAqLwotLyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAqLwotLyogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUgU0NTSSBSRE1BIFByb3RvY29sICAqLwotLyogKFNSUCkgYXMgZGVmaW5lZCBpbiB0aGUgVDEwIHN0YW5kYXJkIGF2YWlsYWJsZSBhdCB3d3cudDEwLm9yZy4gIFRoaXMgICAgICAqLwotLyogZmlsZSB3YXMgYmFzZWQgb24gdGhlIDE2YSB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBTUlBfSAotI2RlZmluZSBTUlBfSAotCi0jZGVmaW5lIFNSUF9WRVJTSU9OICIxNi5hIgotCi0jZGVmaW5lIFBBQ0tFRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQotCi1lbnVtIHNycF90eXBlcyB7Ci0JU1JQX0xPR0lOX1JFUV9UWVBFID0gMHgwMCwKLQlTUlBfTE9HSU5fUlNQX1RZUEUgPSAweEMwLAotCVNSUF9MT0dJTl9SRUpfVFlQRSA9IDB4QzIsCi0JU1JQX0lfTE9HT1VUX1RZUEUgPSAweDAzLAotCVNSUF9UX0xPR09VVF9UWVBFID0gMHg4MCwKLQlTUlBfVFNLX01HTVRfVFlQRSA9IDB4MDEsCi0JU1JQX0NNRF9UWVBFID0gMHgwMiwKLQlTUlBfUlNQX1RZUEUgPSAweEMxLAotCVNSUF9DUkVEX1JFUV9UWVBFID0gMHg4MSwKLQlTUlBfQ1JFRF9SU1BfVFlQRSA9IDB4NDEsCi0JU1JQX0FFUl9SRVFfVFlQRSA9IDB4ODIsCi0JU1JQX0FFUl9SU1BfVFlQRSA9IDB4NDIKLX07Ci0KLWVudW0gc3JwX2Rlc2NyaXB0b3JfZm9ybWF0cyB7Ci0JU1JQX05PX0JVRkZFUiA9IDB4MDAsCi0JU1JQX0RJUkVDVF9CVUZGRVIgPSAweDAxLAotCVNSUF9JTkRJUkVDVF9CVUZGRVIgPSAweDAyCi19OwotCi1zdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgewotCXU2NCB2aXJ0dWFsX2FkZHJlc3M7Ci0JdTMyIG1lbW9yeV9oYW5kbGU7Ci0JdTMyIGxlbmd0aDsKLX07Ci0KLXN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yIHsKLQlzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgaGVhZDsKLQl1MzIgdG90YWxfbGVuZ3RoOwotCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciBsaXN0WzFdIFBBQ0tFRDsKLX07Ci0KLXN0cnVjdCBzcnBfZ2VuZXJpYyB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbN107Ci0JdTY0IHRhZzsKLX07Ci0KLXN0cnVjdCBzcnBfbG9naW5fcmVxIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVs3XTsKLQl1NjQgdGFnOwotCXUzMiBtYXhfcmVxdWVzdGVkX2luaXRpYXRvcl90b190YXJnZXRfaXVsZW47Ci0JdTMyIHJlc2VydmVkMjsKLQl1MTYgcmVxdWlyZWRfYnVmZmVyX2Zvcm1hdHM7Ci0JdTggcmVzZXJ2ZWQzOjY7Ci0JdTggbXVsdGlfY2hhbm5lbF9hY3Rpb246MjsKLQl1OCByZXNlcnZlZDQ7Ci0JdTMyIHJlc2VydmVkNTsKLQl1OCBpbml0aWF0b3JfcG9ydF9pZGVudGlmaWVyWzE2XTsKLQl1OCB0YXJnZXRfcG9ydF9pZGVudGlmaWVyWzE2XTsKLX07Ci0KLXN0cnVjdCBzcnBfbG9naW5fcnNwIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVszXTsKLQl1MzIgcmVxdWVzdF9saW1pdF9kZWx0YTsKLQl1NjQgdGFnOwotCXUzMiBtYXhfaW5pdGlhdG9yX3RvX3RhcmdldF9pdWxlbjsKLQl1MzIgbWF4X3RhcmdldF90b19pbml0aWF0b3JfaXVsZW47Ci0JdTE2IHN1cHBvcnRlZF9idWZmZXJfZm9ybWF0czsKLQl1OCByZXNlcnZlZDI6NjsKLQl1OCBtdWx0aV9jaGFubmVsX3Jlc3VsdDoyOwotCXU4IHJlc2VydmVkMzsKLQl1OCByZXNlcnZlZDRbMjRdOwotfTsKLQotc3RydWN0IHNycF9sb2dpbl9yZWogewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZWFzb247Ci0JdTY0IHRhZzsKLQl1NjQgcmVzZXJ2ZWQyOwotCXUxNiBzdXBwb3J0ZWRfYnVmZmVyX2Zvcm1hdHM7Ci0JdTggcmVzZXJ2ZWQzWzZdOwotfTsKLQotc3RydWN0IHNycF9pX2xvZ291dCB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbN107Ci0JdTY0IHRhZzsKLX07Ci0KLXN0cnVjdCBzcnBfdF9sb2dvdXQgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZWFzb247Ci0JdTY0IHRhZzsKLX07Ci0KLXN0cnVjdCBzcnBfdHNrX21nbXQgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzddOwotCXU2NCB0YWc7Ci0JdTMyIHJlc2VydmVkMjsKLQl1NjQgbHVuIFBBQ0tFRDsKLQl1OCByZXNlcnZlZDM7Ci0JdTggcmVzZXJ2ZWQ0OwotCXU4IHRhc2tfbWdtdF9mbGFnczsKLQl1OCByZXNlcnZlZDU7Ci0JdTY0IG1hbmFnZWRfdGFza190YWc7Ci0JdTY0IHJlc2VydmVkNjsKLX07Ci0KLXN0cnVjdCBzcnBfY21kIHsKLQl1OCB0eXBlOwotCXUzMiByZXNlcnZlZDEgUEFDS0VEOwotCXU4IGRhdGFfb3V0X2Zvcm1hdDo0OwotCXU4IGRhdGFfaW5fZm9ybWF0OjQ7Ci0JdTggZGF0YV9vdXRfY291bnQ7Ci0JdTggZGF0YV9pbl9jb3VudDsKLQl1NjQgdGFnOwotCXUzMiByZXNlcnZlZDI7Ci0JdTY0IGx1biBQQUNLRUQ7Ci0JdTggcmVzZXJ2ZWQzOwotCXU4IHJlc2VydmVkNDo1OwotCXU4IHRhc2tfYXR0cmlidXRlOjM7Ci0JdTggcmVzZXJ2ZWQ1OwotCXU4IGFkZGl0aW9uYWxfY2RiX2xlbjsKLQl1OCBjZGJbMTZdOwotCXU4IGFkZGl0aW9uYWxfZGF0YVsweDEwMCAtIDB4MzBdOwotfTsKLQotc3RydWN0IHNycF9yc3AgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZXF1ZXN0X2xpbWl0X2RlbHRhOwotCXU2NCB0YWc7Ci0JdTE2IHJlc2VydmVkMjsKLQl1OCByZXNlcnZlZDM6MjsKLQl1OCBkaXVuZGVyOjE7Ci0JdTggZGlvdmVyOjE7Ci0JdTggZG91bmRlcjoxOwotCXU4IGRvb3ZlcjoxOwotCXU4IHNuc3ZhbGlkOjE7Ci0JdTggcnNwdmFsaWQ6MTsKLQl1OCBzdGF0dXM7Ci0JdTMyIGRhdGFfaW5fcmVzaWR1YWxfY291bnQ7Ci0JdTMyIGRhdGFfb3V0X3Jlc2lkdWFsX2NvdW50OwotCXUzMiBzZW5zZV9kYXRhX2xpc3RfbGVuZ3RoOwotCXUzMiByZXNwb25zZV9kYXRhX2xpc3RfbGVuZ3RoOwotCXU4IHNlbnNlX2FuZF9yZXNwb25zZV9kYXRhWzE4XTsKLX07Ci0KLXN0cnVjdCBzcnBfY3JlZF9yZXEgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZXF1ZXN0X2xpbWl0X2RlbHRhOwotCXU2NCB0YWc7Ci19OwotCi1zdHJ1Y3Qgc3JwX2NyZWRfcnNwIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVs3XTsKLQl1NjQgdGFnOwotfTsKLQotc3RydWN0IHNycF9hZXJfcmVxIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVszXTsKLQl1MzIgcmVxdWVzdF9saW1pdF9kZWx0YTsKLQl1NjQgdGFnOwotCXUzMiByZXNlcnZlZDI7Ci0JdTY0IGx1bjsKLQl1MzIgc2Vuc2VfZGF0YV9saXN0X2xlbmd0aDsKLQl1MzIgcmVzZXJ2ZWQzOwotCXU4IHNlbnNlX2RhdGFbMjBdOwotfTsKLQotc3RydWN0IHNycF9hZXJfcnNwIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVs3XTsKLQl1NjQgdGFnOwotfTsKLQotdW5pb24gc3JwX2l1IHsKLQlzdHJ1Y3Qgc3JwX2dlbmVyaWMgZ2VuZXJpYzsKLQlzdHJ1Y3Qgc3JwX2xvZ2luX3JlcSBsb2dpbl9yZXE7Ci0Jc3RydWN0IHNycF9sb2dpbl9yc3AgbG9naW5fcnNwOwotCXN0cnVjdCBzcnBfbG9naW5fcmVqIGxvZ2luX3JlajsKLQlzdHJ1Y3Qgc3JwX2lfbG9nb3V0IGlfbG9nb3V0OwotCXN0cnVjdCBzcnBfdF9sb2dvdXQgdF9sb2dvdXQ7Ci0Jc3RydWN0IHNycF90c2tfbWdtdCB0c2tfbWdtdDsKLQlzdHJ1Y3Qgc3JwX2NtZCBjbWQ7Ci0Jc3RydWN0IHNycF9yc3AgcnNwOwotCXN0cnVjdCBzcnBfY3JlZF9yZXEgY3JlZF9yZXE7Ci0Jc3RydWN0IHNycF9jcmVkX3JzcCBjcmVkX3JzcDsKLQlzdHJ1Y3Qgc3JwX2Flcl9yZXEgYWVyX3JlcTsKLQlzdHJ1Y3Qgc3JwX2Flcl9yc3AgYWVyX3JzcDsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL3Zpb3NycC5oIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3Zpb3NycC5oCmluZGV4IDZhNmJiYTguLjkwZjFhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS92aW9zcnAuaAorKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvdmlvc3JwLmgKQEAgLTMzLDcgKzMzLDIyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIFZJT1NSUF9ICiAjZGVmaW5lIFZJT1NSUF9ICi0jaW5jbHVkZSAic3JwLmgiCisjaW5jbHVkZSA8c2NzaS9zcnAuaD4KKworI2RlZmluZSBTUlBfVkVSU0lPTiAiMTYuYSIKKyNkZWZpbmUgU1JQX01BWF9JVV9MRU4JMjU2CisKK3VuaW9uIHNycF9pdSB7CisJc3RydWN0IHNycF9sb2dpbl9yZXEgbG9naW5fcmVxOworCXN0cnVjdCBzcnBfbG9naW5fcnNwIGxvZ2luX3JzcDsKKwlzdHJ1Y3Qgc3JwX2xvZ2luX3JlaiBsb2dpbl9yZWo7CisJc3RydWN0IHNycF9pX2xvZ291dCBpX2xvZ291dDsKKwlzdHJ1Y3Qgc3JwX3RfbG9nb3V0IHRfbG9nb3V0OworCXN0cnVjdCBzcnBfdHNrX21nbXQgdHNrX21nbXQ7CisJc3RydWN0IHNycF9jbWQgY21kOworCXN0cnVjdCBzcnBfcnNwIHJzcDsKKwl1OCByZXNlcnZlZFtTUlBfTUFYX0lVX0xFTl07Cit9OwogCiBlbnVtIHZpb3NycF9jcnFfZm9ybWF0cyB7CiAJVklPU1JQX1NSUF9GT1JNQVQgPSAweDAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDU4OTBlNWYuLjhiODBlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTE2NCwyOSArMTY0LDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKElQUl9EUklWRVJfVkVSU0lPTik7CiAKLXN0YXRpYyBjb25zdCBjaGFyICppcHJfZ3BkZF9kZXZfZW5kX3N0YXRlc1tdID0gewotCSJDb21tYW5kIGNvbXBsZXRlIiwKLQkiVGVybWluYXRlZCBieSBob3N0IiwKLQkiVGVybWluYXRlZCBieSBkZXZpY2UgcmVzZXQiLAotCSJUZXJtaW5hdGVkIGJ5IGJ1cyByZXNldCIsCi0JIlVua25vd24iLAotCSJDb21tYW5kIG5vdCBzdGFydGVkIgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmlwcl9ncGRkX2Rldl9idXNfcGhhc2VzW10gPSB7Ci0JIkJ1cyBmcmVlIiwKLQkiQXJiaXRyYXRpb24iLAotCSJTZWxlY3Rpb24iLAotCSJNZXNzYWdlIG91dCIsCi0JIkNvbW1hbmQiLAotCSJNZXNzYWdlIGluIiwKLQkiRGF0YSBvdXQiLAotCSJEYXRhIGluIiwKLQkiU3RhdHVzIiwKLQkiUmVzZWxlY3Rpb24iLAotCSJVbmtub3duIgotfTsKLQogLyogIEEgY29uc3RhbnQgYXJyYXkgb2YgSU9BU0NzL1VSQ3MvRXJyb3IgTWVzc2FnZXMgKi8KIHN0YXRpYyBjb25zdAogc3RydWN0IGlwcl9lcnJvcl90YWJsZV90IGlwcl9lcnJvcl90YWJsZVtdID0gewpAQCAtODY5LDggKzg0Niw4IEBACiAKIAlpZiAoaG9zdHJjYi0+aGNhbS5ub3RpZnlfdHlwZSA9PSBJUFJfSE9TVF9SQ0JfTk9USUZfVFlQRV9SRU1fRU5UUlkpIHsKIAkJaWYgKHJlcy0+c2RldikgewotCQkJcmVzLT5zZGV2LT5ob3N0ZGF0YSA9IE5VTEw7CiAJCQlyZXMtPmRlbF9mcm9tX21sID0gMTsKKwkJCXJlcy0+Y2ZndGUucmVzX2hhbmRsZSA9IElQUl9JTlZBTElEX1JFU19IQU5ETEU7CiAJCQlpZiAoaW9hX2NmZy0+YWxsb3dfbWxfYWRkX2RlbCkKIAkJCQlzY2hlZHVsZV93b3JrKCZpb2FfY2ZnLT53b3JrX3EpOwogCQl9IGVsc2UKQEAgLTEzNTYsOCArMTMzMyw4IEBACiAJCXJldHVybjsKIAogCWlmIChpcHJfaXNfZGV2aWNlKCZob3N0cmNiLT5oY2FtLnUuZXJyb3IuZmFpbGluZ19kZXZfcmVzX2FkZHIpKSB7Ci0JCWlwcl9yZXNfZXJyKGlvYV9jZmcsIGhvc3RyY2ItPmhjYW0udS5lcnJvci5mYWlsaW5nX2Rldl9yZXNfYWRkciwKLQkJCSAgICAiJXNcbiIsIGlwcl9lcnJvcl90YWJsZVtlcnJvcl9pbmRleF0uZXJyb3IpOworCQlpcHJfcmFfZXJyKGlvYV9jZmcsIGhvc3RyY2ItPmhjYW0udS5lcnJvci5mYWlsaW5nX2Rldl9yZXNfYWRkciwKKwkJCSAgICIlc1xuIiwgaXByX2Vycm9yX3RhYmxlW2Vycm9yX2luZGV4XS5lcnJvcik7CiAJfSBlbHNlIHsKIAkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAiJXNcbiIsCiAJCQlpcHJfZXJyb3JfdGFibGVbZXJyb3JfaW5kZXhdLmVycm9yKTsKQEAgLTIxMDcsNyArMjA4NCw2IEBACiAJCQkJZGlkX3dvcmsgPSAxOwogCQkJCXNkZXYgPSByZXMtPnNkZXY7CiAJCQkJaWYgKCFzY3NpX2RldmljZV9nZXQoc2RldikpIHsKLQkJCQkJcmVzLT5zZGV2ID0gTlVMTDsKIAkJCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsICZpb2FfY2ZnLT5mcmVlX3Jlc19xKTsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CkBAIC0yMTI0LDYgKzIxMDAsNyBAQAogCQkJYnVzID0gcmVzLT5jZmd0ZS5yZXNfYWRkci5idXM7CiAJCQl0YXJnZXQgPSByZXMtPmNmZ3RlLnJlc19hZGRyLnRhcmdldDsKIAkJCWx1biA9IHJlcy0+Y2ZndGUucmVzX2FkZHIubHVuOworCQkJcmVzLT5hZGRfdG9fbWwgPSAwOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQkJc2NzaV9hZGRfZGV2aWNlKGlvYV9jZmctPmhvc3QsIGJ1cywgdGFyZ2V0LCBsdW4pOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTMyMTQsNyArMzE5MSw3IEBACiAJCQlzZGV2LT50aW1lb3V0ID0gSVBSX1ZTRVRfUldfVElNRU9VVDsKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBJUFJfVlNFVF9NQVhfU0VDVE9SUyk7CiAJCX0KLQkJaWYgKElQUl9JU19EQVNEX0RFVklDRShyZXMtPmNmZ3RlLnN0ZF9pbnFfZGF0YSkpCisJCWlmIChpcHJfaXNfdnNldF9kZXZpY2UocmVzKSB8fCBpcHJfaXNfc2NzaV9kaXNrKHJlcykpCiAJCQlzZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKIAkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOwogCX0KQEAgLTMzMDQsNiArMzI4MSw0NCBAQAogfQogCiAvKioKKyAqIGlwcl9kZXZpY2VfcmVzZXQgLSBSZXNldCB0aGUgZGV2aWNlCisgKiBAaW9hX2NmZzoJaW9hIGNvbmZpZyBzdHJ1Y3QKKyAqIEByZXM6CQlyZXNvdXJjZSBlbnRyeSBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIGRldmljZSByZXNldCB0byB0aGUgYWZmZWN0ZWQgZGV2aWNlLgorICogSWYgdGhlIGRldmljZSBpcyBhIFNDU0kgZGV2aWNlLCBhIExVTiByZXNldCB3aWxsIGJlIHNlbnQKKyAqIHRvIHRoZSBkZXZpY2UgZmlyc3QuIElmIHRoYXQgZG9lcyBub3Qgd29yaywgYSB0YXJnZXQgcmVzZXQKKyAqIHdpbGwgYmUgc2VudC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkwIG9uIHN1Y2Nlc3MgLyBub24temVybyBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IGlwcl9kZXZpY2VfcmVzZXQoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLAorCQkJICAgIHN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlcykKK3sKKwlzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQ7CisJc3RydWN0IGlwcl9pb2FyY2IgKmlvYXJjYjsKKwlzdHJ1Y3QgaXByX2NtZF9wa3QgKmNtZF9wa3Q7CisJdTMyIGlvYXNjOworCisJRU5URVI7CisJaXByX2NtZCA9IGlwcl9nZXRfZnJlZV9pcHJfY21uZChpb2FfY2ZnKTsKKwlpb2FyY2IgPSAmaXByX2NtZC0+aW9hcmNiOworCWNtZF9wa3QgPSAmaW9hcmNiLT5jbWRfcGt0OworCisJaW9hcmNiLT5yZXNfaGFuZGxlID0gcmVzLT5jZmd0ZS5yZXNfaGFuZGxlOworCWNtZF9wa3QtPnJlcXVlc3RfdHlwZSA9IElQUl9SUVRZUEVfSU9BQ01EOworCWNtZF9wa3QtPmNkYlswXSA9IElQUl9SRVNFVF9ERVZJQ0U7CisKKwlpcHJfc2VuZF9ibG9ja2luZ19jbWQoaXByX2NtZCwgaXByX3RpbWVvdXQsIElQUl9ERVZJQ0VfUkVTRVRfVElNRU9VVCk7CisJaW9hc2MgPSBiZTMyX3RvX2NwdShpcHJfY21kLT5pb2FzYS5pb2FzYyk7CisJbGlzdF9hZGRfdGFpbCgmaXByX2NtZC0+cXVldWUsICZpb2FfY2ZnLT5mcmVlX3EpOworCisJTEVBVkU7CisJcmV0dXJuIChJUFJfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA/IC1FSU8gOiAwKTsKK30KKworLyoqCiAgKiBpcHJfZWhfZGV2X3Jlc2V0IC0gUmVzZXQgdGhlIGRldmljZQogICogQHNjc2lfY21kOglzY3NpIGNvbW1hbmQgc3RydWN0CiAgKgpAQCAtMzMxOSw4ICszMzM0LDcgQEAKIAlzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQ7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnOwogCXN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlczsKLQlzdHJ1Y3QgaXByX2NtZF9wa3QgKmNtZF9wa3Q7Ci0JdTMyIGlvYXNjOworCWludCByYzsKIAogCUVOVEVSOwogCWlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopIHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwpAQCAtMzM0NywyNSArMzM2MSwxMiBAQAogCX0KIAogCXJlcy0+cmVzZXR0aW5nX2RldmljZSA9IDE7Ci0KLQlpcHJfY21kID0gaXByX2dldF9mcmVlX2lwcl9jbW5kKGlvYV9jZmcpOwotCi0JaXByX2NtZC0+aW9hcmNiLnJlc19oYW5kbGUgPSByZXMtPmNmZ3RlLnJlc19oYW5kbGU7Ci0JY21kX3BrdCA9ICZpcHJfY21kLT5pb2FyY2IuY21kX3BrdDsKLQljbWRfcGt0LT5yZXF1ZXN0X3R5cGUgPSBJUFJfUlFUWVBFX0lPQUNNRDsKLQljbWRfcGt0LT5jZGJbMF0gPSBJUFJfUkVTRVRfREVWSUNFOwotCi0JaXByX3NkZXZfZXJyKHNjc2lfY21kLT5kZXZpY2UsICJSZXNldHRpbmcgZGV2aWNlXG4iKTsKLQlpcHJfc2VuZF9ibG9ja2luZ19jbWQoaXByX2NtZCwgaXByX3RpbWVvdXQsIElQUl9ERVZJQ0VfUkVTRVRfVElNRU9VVCk7Ci0KLQlpb2FzYyA9IGJlMzJfdG9fY3B1KGlwcl9jbWQtPmlvYXNhLmlvYXNjKTsKLQorCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZCwgIlJlc2V0dGluZyBkZXZpY2VcbiIpOworCXJjID0gaXByX2RldmljZV9yZXNldChpb2FfY2ZnLCByZXMpOwogCXJlcy0+cmVzZXR0aW5nX2RldmljZSA9IDA7CiAKLQlsaXN0X2FkZF90YWlsKCZpcHJfY21kLT5xdWV1ZSwgJmlvYV9jZmctPmZyZWVfcSk7Ci0KIAlMRUFWRTsKLQlyZXR1cm4gKElQUl9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpID8gRkFJTEVEIDogU1VDQ0VTUyk7CisJcmV0dXJuIChyYyA/IEZBSUxFRCA6IFNVQ0NFU1MpOwogfQogCiBzdGF0aWMgaW50IGlwcl9laF9kZXZfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqIGNtZCkKQEAgLTM0NDAsNyArMzQ0MSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpcHJfc2Rldl9lcnIoaXByX2NtZC0+dS5zZGV2LCAiQWJvcnQgdGltZWQgb3V0LiBSZXNldHRpbmcgYnVzXG4iKTsKKwlzZGV2X3ByaW50ayhLRVJOX0VSUiwgaXByX2NtZC0+dS5zZGV2LCAiQWJvcnQgdGltZWQgb3V0LiBSZXNldHRpbmcgYnVzLlxuIik7CiAJcmVzZXRfY21kID0gaXByX2dldF9mcmVlX2lwcl9jbW5kKGlvYV9jZmcpOwogCWlwcl9jbWQtPnNpYmxpbmcgPSByZXNldF9jbWQ7CiAJcmVzZXRfY21kLT5zaWJsaW5nID0gaXByX2NtZDsKQEAgLTM1MDQsNyArMzUwNSw4IEBACiAJY21kX3BrdC0+Y2RiWzBdID0gSVBSX0NBTkNFTF9BTExfUkVRVUVTVFM7CiAJaXByX2NtZC0+dS5zZGV2ID0gc2NzaV9jbWQtPmRldmljZTsKIAotCWlwcl9zZGV2X2VycihzY3NpX2NtZC0+ZGV2aWNlLCAiQWJvcnRpbmcgY29tbWFuZDogJTAyWFxuIiwgc2NzaV9jbWQtPmNtbmRbMF0pOworCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZCwgIkFib3J0aW5nIGNvbW1hbmQ6ICUwMlhcbiIsCisJCSAgICBzY3NpX2NtZC0+Y21uZFswXSk7CiAJaXByX3NlbmRfYmxvY2tpbmdfY21kKGlwcl9jbWQsIGlwcl9hYm9ydF90aW1lb3V0LCBJUFJfQ0FOQ0VMX0FMTF9USU1FT1VUKTsKIAlpb2FzYyA9IGJlMzJfdG9fY3B1KGlwcl9jbWQtPmlvYXNhLmlvYXNjKTsKIApAQCAtMzgxNSw4ICszODE3LDggQEAKIAogCWlmIChJUFJfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA+IDApIHsKIAkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKLQkJaXByX3NkZXZfZXJyKHNjc2lfY21kLT5kZXZpY2UsCi0JCQkgICAgICJSZXF1ZXN0IFNlbnNlIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIHNjc2lfY21kLAorCQkJICAgICJSZXF1ZXN0IFNlbnNlIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKIAl9IGVsc2UgewogCQltZW1jcHkoc2NzaV9jbWQtPnNlbnNlX2J1ZmZlciwgaXByX2NtZC0+c2Vuc2VfYnVmZmVyLAogCQkgICAgICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKQEAgLTM5MzgsNiArMzk0MCw3IEBACiAgKiBpcHJfZHVtcF9pb2FzYSAtIER1bXAgY29udGVudHMgb2YgSU9BU0EKICAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAogICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAorICogQHJlczoJCXJlc291cmNlIGVudHJ5IHN0cnVjdAogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2hlbiBvcHMKICAqIGZhaWwuIEl0IHdpbGwgbG9nIHRoZSBJT0FTQSBpZiBhcHByb3ByaWF0ZS4gT25seSBjYWxsZWQKQEAgLTM5NDcsNyArMzk1MCw3IEBACiAgKiAJbm9uZQogICoqLwogc3RhdGljIHZvaWQgaXByX2R1bXBfaW9hc2Eoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLAotCQkJICAgc3RydWN0IGlwcl9jbW5kICppcHJfY21kKQorCQkJICAgc3RydWN0IGlwcl9jbW5kICppcHJfY21kLCBzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICpyZXMpCiB7CiAJaW50IGk7CiAJdTE2IGRhdGFfbGVuOwpAQCAtMzk3NSwxNiArMzk3OCw3IEBACiAJCQlyZXR1cm47CiAJfQogCi0JaXByX3NkZXZfZXJyKGlwcl9jbWQtPnNjc2lfY21kLT5kZXZpY2UsICIlc1xuIiwKLQkJICAgICBpcHJfZXJyb3JfdGFibGVbZXJyb3JfaW5kZXhdLmVycm9yKTsKLQotCWlmICgoaW9hc2EtPnUuZ3BkZC5lbmRfc3RhdGUgPD0gQVJSQVlfU0laRShpcHJfZ3BkZF9kZXZfZW5kX3N0YXRlcykpICYmCi0JICAgIChpb2FzYS0+dS5ncGRkLmJ1c19waGFzZSA8PSAgQVJSQVlfU0laRShpcHJfZ3BkZF9kZXZfYnVzX3BoYXNlcykpKSB7Ci0JCWlwcl9zZGV2X2VycihpcHJfY21kLT5zY3NpX2NtZC0+ZGV2aWNlLAotCQkJICAgICAiRGV2aWNlIEVuZCBzdGF0ZTogJXMgUGhhc2U6ICVzXG4iLAotCQkJICAgICBpcHJfZ3BkZF9kZXZfZW5kX3N0YXRlc1tpb2FzYS0+dS5ncGRkLmVuZF9zdGF0ZV0sCi0JCQkgICAgIGlwcl9ncGRkX2Rldl9idXNfcGhhc2VzW2lvYXNhLT51LmdwZGQuYnVzX3BoYXNlXSk7Ci0JfQorCWlwcl9yZXNfZXJyKGlvYV9jZmcsIHJlcywgIiVzXG4iLCBpcHJfZXJyb3JfdGFibGVbZXJyb3JfaW5kZXhdLmVycm9yKTsKIAogCWlmIChzaXplb2Yoc3RydWN0IGlwcl9pb2FzYSkgPCBiZTE2X3RvX2NwdShpb2FzYS0+cmV0X3N0YXRfbGVuKSkKIAkJZGF0YV9sZW4gPSBzaXplb2Yoc3RydWN0IGlwcl9pb2FzYSk7CkBAIC00MTQxLDcgKzQxMzUsNyBAQAogCX0KIAogCWlmIChpcHJfaXNfZ3Njc2kocmVzKSkKLQkJaXByX2R1bXBfaW9hc2EoaW9hX2NmZywgaXByX2NtZCk7CisJCWlwcl9kdW1wX2lvYXNhKGlvYV9jZmcsIGlwcl9jbWQsIHJlcyk7CiAJZWxzZQogCQlpcHJfZ2VuX3NlbnNlKGlwcl9jbWQpOwogCkBAIC00NTQwLDcgKzQ1MzQsNyBAQAogCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX2lvYV9yZXNldF9kb25lOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShyZXMsICZpb2FfY2ZnLT51c2VkX3Jlc19xLCBxdWV1ZSkgewotCQlpZiAoIUlQUl9JU19EQVNEX0RFVklDRShyZXMtPmNmZ3RlLnN0ZF9pbnFfZGF0YSkpCisJCWlmICghaXByX2lzX3Njc2lfZGlzayhyZXMpKQogCQkJY29udGludWU7CiAKIAkJaXByX2NtZC0+dS5yZXMgPSByZXM7CkBAIC00OTgwLDcgKzQ5NzQsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXMsIHRlbXAsICZvbGRfcmVzLCBxdWV1ZSkgewogCQlpZiAocmVzLT5zZGV2KSB7CiAJCQlyZXMtPmRlbF9mcm9tX21sID0gMTsKLQkJCXJlcy0+c2Rldi0+aG9zdGRhdGEgPSBOVUxMOworCQkJcmVzLT5jZmd0ZS5yZXNfaGFuZGxlID0gSVBSX0lOVkFMSURfUkVTX0hBTkRMRTsKIAkJCWxpc3RfbW92ZV90YWlsKCZyZXMtPnF1ZXVlLCAmaW9hX2NmZy0+dXNlZF9yZXNfcSk7CiAJCX0gZWxzZSB7CiAJCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwgJmlvYV9jZmctPmZyZWVfcmVzX3EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5oIGIvZHJpdmVycy9zY3NpL2lwci5oCmluZGV4IGZkMzYwYmYuLjFhZDI0ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuaAorKysgYi9kcml2ZXJzL3Njc2kvaXByLmgKQEAgLTM2LDggKzM2LDggQEAKIC8qCiAgKiBMaXRlcmFscwogICovCi0jZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi4xLjIiCi0jZGVmaW5lIElQUl9EUklWRVJfREFURSAiKEZlYnJ1YXJ5IDgsIDIwMDYpIgorI2RlZmluZSBJUFJfRFJJVkVSX1ZFUlNJT04gIjIuMS4zIgorI2RlZmluZSBJUFJfRFJJVkVSX0RBVEUgIihNYXJjaCAyOSwgMjAwNikiCiAKIC8qCiAgKiBJUFJfTUFYX0NNRF9QRVJfTFVOOiBUaGlzIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dHN0YW5kaW5nCkBAIC0xMzMsNiArMTMzLDcgQEAKICNkZWZpbmUgSVBSX01BWF9TQ1NJX1JBVEUod2lkdGgpICgoMzIwICogMTApIC8gKCh3aWR0aCkgLyA4KSkKIAogI2RlZmluZSBJUFJfSU9BX1JFU19IQU5ETEUJCQkJMHhmZmZmZmZmZgorI2RlZmluZSBJUFJfSU5WQUxJRF9SRVNfSEFORExFCQkJMAogI2RlZmluZSBJUFJfSU9BX1JFU19BRERSCQkJCTB4MDBmZmZmZmYKIAogLyoKQEAgLTExOTEsMzAgKzExOTIsMTcgQEAKICAqLwogI2RlZmluZSBpcHJfZXJyKC4uLikgcHJpbnRrKEtFUk5fRVJSIElQUl9OQU1FICI6ICJfX1ZBX0FSR1NfXykKICNkZWZpbmUgaXByX2luZm8oLi4uKSBwcmludGsoS0VSTl9JTkZPIElQUl9OQU1FICI6ICJfX1ZBX0FSR1NfXykKLSNkZWZpbmUgaXByX2NyaXQoLi4uKSBwcmludGsoS0VSTl9DUklUIElQUl9OQU1FICI6ICJfX1ZBX0FSR1NfXykKLSNkZWZpbmUgaXByX3dhcm4oLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIElQUl9OQU1FIjogIl9fVkFfQVJHU19fKQogI2RlZmluZSBpcHJfZGJnKC4uLikgSVBSX0RCR19DTUQocHJpbnRrKEtFUk5fSU5GTyBJUFJfTkFNRSAiOiAiX19WQV9BUkdTX18pKQogCi0jZGVmaW5lIGlwcl9zZGV2X3ByaW50ayhsZXZlbCwgc2RldiwgZm10LCBhcmdzLi4uKSBcCi0Jc2Rldl9wcmludGsobGV2ZWwsIHNkZXYsIGZtdCwgIyMgYXJncykKKyNkZWZpbmUgaXByX3JhX3ByaW50ayhsZXZlbCwgaW9hX2NmZywgcmEsIGZtdCwgLi4uKSBcCisJcHJpbnRrKGxldmVsIElQUl9OQU1FICI6ICVkOiVkOiVkOiVkOiAiIGZtdCwgKGlvYV9jZmcpLT5ob3N0LT5ob3N0X25vLCBcCisJCShyYSkuYnVzLCAocmEpLnRhcmdldCwgKHJhKS5sdW4sICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgaXByX3NkZXZfZXJyKHNkZXYsIGZtdCwgLi4uKSBcCi0JaXByX3NkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCBmbXQsICMjX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgaXByX3NkZXZfaW5mbyhzZGV2LCBmbXQsIC4uLikgXAotCWlwcl9zZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBpcHJfc2Rldl9kYmcoc2RldiwgZm10LCAuLi4pIFwKLQlJUFJfREJHX0NNRChpcHJfc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCBmbXQsICMjX19WQV9BUkdTX18pKQotCi0jZGVmaW5lIGlwcl9yZXNfcHJpbnRrKGxldmVsLCBpb2FfY2ZnLCByZXMsIGZtdCwgLi4uKSBcCi0JcHJpbnRrKGxldmVsIElQUl9OQU1FICI6ICVkOiVkOiVkOiVkOiAiIGZtdCwgaW9hX2NmZy0+aG9zdC0+aG9zdF9ubywgXAotCQlyZXMuYnVzLCByZXMudGFyZ2V0LCByZXMubHVuLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBpcHJfcmFfZXJyKGlvYV9jZmcsIHJhLCBmbXQsIC4uLikgXAorCWlwcl9yYV9wcmludGsoS0VSTl9FUlIsIGlvYV9jZmcsIHJhLCBmbXQsICMjX19WQV9BUkdTX18pCiAKICNkZWZpbmUgaXByX3Jlc19lcnIoaW9hX2NmZywgcmVzLCBmbXQsIC4uLikgXAotCWlwcl9yZXNfcHJpbnRrKEtFUk5fRVJSLCBpb2FfY2ZnLCByZXMsIGZtdCwgIyNfX1ZBX0FSR1NfXykKLSNkZWZpbmUgaXByX3Jlc19kYmcoaW9hX2NmZywgcmVzLCBmbXQsIC4uLikgXAotCUlQUl9EQkdfQ01EKGlwcl9yZXNfcHJpbnRrKEtFUk5fSU5GTywgaW9hX2NmZywgcmVzLCBmbXQsICMjX19WQV9BUkdTX18pKQorCWlwcl9yYV9lcnIoaW9hX2NmZywgKHJlcyktPmNmZ3RlLnJlc19hZGRyLCBmbXQsICMjX19WQV9BUkdTX18pCiAKICNkZWZpbmUgaXByX3BoeXNfcmVzX2Vycihpb2FfY2ZnLCByZXMsIGZtdCwgLi4uKQkJCVwKIHsJCQkJCQkJCQlcCkBAIC0xMzA0LDYgKzEyOTIsMjIgQEAKIH0KIAogLyoqCisgKiBpcHJfaXNfc2NzaV9kaXNrIC0gRGV0ZXJtaW5lIGlmIGEgcmVzb3VyY2UgaXMgYSBTQ1NJIGRpc2sKKyAqIEByZXM6CXJlc291cmNlIGVudHJ5IHN0cnVjdAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkxIGlmIFNDU0kgZGlzayAvIDAgaWYgbm90IFNDU0kgZGlzaworICoqLworc3RhdGljIGlubGluZSBpbnQgaXByX2lzX3Njc2lfZGlzayhzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICpyZXMpCit7CisJaWYgKGlwcl9pc19hZl9kYXNkX2RldmljZShyZXMpIHx8CisJICAgIChpcHJfaXNfZ3Njc2kocmVzKSAmJiBJUFJfSVNfREFTRF9ERVZJQ0UocmVzLT5jZmd0ZS5zdGRfaW5xX2RhdGEpKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBpcHJfaXNfbmFjYV9tb2RlbCAtIERldGVybWluZSBpZiBhIHJlc291cmNlIGlzIHVzaW5nIE5BQ0EgcXVldWVpbmcgbW9kZWwKICAqIEByZXM6CXJlc291cmNlIGVudHJ5IHN0cnVjdAogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKaW5kZXggMjFiMGVkNS4uYjA0NmZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKQEAgLTI3OCw3ICsyNzgsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV94ZmVyX2VudCB7Ci0JdW5zaWduZWQgaW50IHNoaWZ0LCBiaXRzOworCWludCBzaGlmdCwgYml0czsKIAl1OCBiYXNlOwogfSBhdGFfeGZlcl90YmxbXSA9IHsKIAl7IEFUQV9TSElGVF9QSU8sIEFUQV9CSVRTX1BJTywgWEZFUl9QSU9fMCB9LApAQCAtODY0LDYgKzg2NCw5IEBACiAvKioKICAqCWF0YV9wb3J0X3F1ZXVlX3Rhc2sgLSBRdWV1ZSBwb3J0X3Rhc2sKICAqCUBhcDogVGhlIGF0YV9wb3J0IHRvIHF1ZXVlIHBvcnRfdGFzayBmb3IKKyAqCUBmbjogd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGJlIHNjaGVkdWxlZAorICoJQGRhdGE6IGRhdGEgdmFsdWUgdG8gcGFzcyB0byB3b3JrcXVldWUgZnVuY3Rpb24KKyAqCUBkZWxheTogZGVsYXkgdGltZSBmb3Igd29ya3F1ZXVlIGZ1bmN0aW9uCiAgKgogICoJU2NoZWR1bGUgQGZuKEBkYXRhKSBmb3IgZXhlY3V0aW9uIGFmdGVyIEBkZWxheSBqaWZmaWVzIHVzaW5nCiAgKglwb3J0X3Rhc2suICBUaGVyZSBpcyBvbmUgcG9ydF90YXNrIHBlciBwb3J0IGFuZCBpdCdzIHRoZQpAQCAtOTg5LDkgKzk5Miw3IEBACiAJcWMtPnByaXZhdGVfZGF0YSA9ICZ3YWl0OwogCXFjLT5jb21wbGV0ZV9mbiA9IGF0YV9xY19jb21wbGV0ZV9pbnRlcm5hbDsKIAotCXFjLT5lcnJfbWFzayA9IGF0YV9xY19pc3N1ZShxYyk7Ci0JaWYgKHFjLT5lcnJfbWFzaykKLQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwlhdGFfcWNfaXNzdWUocWMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAKQEAgLTI3NDEsNiArMjc0Miw4IEBACiAgKglhdGFfZGV2X2luaXRfcGFyYW1zIC0gSXNzdWUgSU5JVCBERVYgUEFSQU1TIGNvbW1hbmQKICAqCUBhcDogUG9ydCBhc3NvY2lhdGVkIHdpdGggZGV2aWNlIEBkZXYKICAqCUBkZXY6IERldmljZSB0byB3aGljaCBjb21tYW5kIHdpbGwgYmUgc2VudAorICoJQGhlYWRzOiBOdW1iZXIgb2YgaGVhZHMgKHRhc2tmaWxlIHBhcmFtZXRlcikKKyAqCUBzZWN0b3JzOiBOdW1iZXIgb2Ygc2VjdG9ycyAodGFza2ZpbGUgcGFyYW1ldGVyKQogICoKICAqCUxPQ0tJTkc6CiAgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKQEAgLTM2NDAsNiArMzY0Myw4IEBACiAKIAkJYXRhX3Bpb19zZWN0b3IocWMpOwogCX0KKworCWF0YV9hbHRzdGF0dXMoYXApOyAvKiBmbHVzaCAqLwogfQogCiBzdGF0aWMgdm9pZCBhdGFfcGlvX2Vycm9yKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0zNzU2LDExICszNzYxLDE0IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKIAkJYXAtPmZsYWdzICY9IH5BVEFfRkxBR19OT0lOVFI7CiAJCWF0YV9kYXRhX3hmZXIoYXAsIHFjLT5jZGIsIHFjLT5kZXYtPmNkYl9sZW4sIDEpOworCQlhdGFfYWx0c3RhdHVzKGFwKTsgLyogZmx1c2ggKi8KKwogCQlpZiAocWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX0FUQVBJX0RNQSkKIAkJCWFwLT5vcHMtPmJtZG1hX3N0YXJ0KHFjKTsJLyogaW5pdGlhdGUgYm1kbWEgKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKIAkJYXRhX2RhdGFfeGZlcihhcCwgcWMtPmNkYiwgcWMtPmRldi0+Y2RiX2xlbiwgMSk7CisJCWF0YV9hbHRzdGF0dXMoYXApOyAvKiBmbHVzaCAqLwogCiAJCS8qIFBJTyBjb21tYW5kcyBhcmUgaGFuZGxlZCBieSBwb2xsaW5nICovCiAJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKQEAgLTM5OTcsMTUgKzQwMDUsMTQgQEAKICAqCiAgKglMT0NLSU5HOgogICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKLSAqCi0gKglSRVRVUk5TOgotICoJWmVybyBvbiBzdWNjZXNzLCBBQ19FUlJfKiBtYXNrIG9uIGZhaWx1cmUKICAqLwotCi11bnNpZ25lZCBpbnQgYXRhX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit2b2lkIGF0YV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAKKwlxYy0+YXAtPmFjdGl2ZV90YWcgPSBxYy0+dGFnOworCXFjLT5mbGFncyB8PSBBVEFfUUNGTEFHX0FDVElWRTsKKwogCWlmIChhdGFfc2hvdWxkX2RtYV9tYXAocWMpKSB7CiAJCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX1NHKSB7CiAJCQlpZiAoYXRhX3NnX3NldHVwKHFjKSkKQEAgLTQwMjAsMTcgKzQwMjcsMTggQEAKIAogCWFwLT5vcHMtPnFjX3ByZXAocWMpOwogCi0JcWMtPmFwLT5hY3RpdmVfdGFnID0gcWMtPnRhZzsKLQlxYy0+ZmxhZ3MgfD0gQVRBX1FDRkxBR19BQ1RJVkU7Ci0KLQlyZXR1cm4gYXAtPm9wcy0+cWNfaXNzdWUocWMpOworCXFjLT5lcnJfbWFzayB8PSBhcC0+b3BzLT5xY19pc3N1ZShxYyk7CisJaWYgKHVubGlrZWx5KHFjLT5lcnJfbWFzaykpCisJCWdvdG8gZXJyOworCXJldHVybjsKIAogc2dfZXJyOgogCXFjLT5mbGFncyAmPSB+QVRBX1FDRkxBR19ETUFNQVA7Ci0JcmV0dXJuIEFDX0VSUl9TWVNURU07CisJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9TWVNURU07CitlcnI6CisJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIH0KIAotCiAvKioKICAqCWF0YV9xY19pc3N1ZV9wcm90IC0gaXNzdWUgdGFza2ZpbGUgdG8gZGV2aWNlIGluIHByb3RvLWRlcGVuZGVudCBtYW5uZXIKICAqCUBxYzogY29tbWFuZCB0byBpc3N1ZSB0byBkZXZpY2UKQEAgLTQyODksNiArNDI5Nyw3IEBACiBpbnQgYXRhX2RldmljZV9yZXN1bWUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKIHsKIAlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU1VTUEVOREVEKSB7CisJCWF0YV9idXN5X3dhaXQoYXAsIEFUQV9CVVNZIHwgQVRBX0RSUSwgMjAwMDAwKTsKIAkJYXAtPmZsYWdzICY9IH5BVEFfRkxBR19TVVNQRU5ERUQ7CiAJCWF0YV9zZXRfbW9kZShhcCk7CiAJfQpAQCAtNDMwNCw2ICs0MzEzLDcgQEAKICAqCWF0YV9kZXZpY2Vfc3VzcGVuZCAtIHByZXBhcmUgYSBkZXZpY2UgZm9yIHN1c3BlbmQKICAqCUBhcDogcG9ydCB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0bwogICoJQGRldjogdGhlIGRldmljZSB0byBzdXNwZW5kCisgKglAc3RhdGU6IHRhcmdldCBwb3dlciBtYW5hZ2VtZW50IHN0YXRlCiAgKgogICoJRmx1c2ggdGhlIGNhY2hlIG9uIHRoZSBkcml2ZSwgaWYgYXBwcm9wcmlhdGUsIHRoZW4gaXNzdWUgYQogICoJc3RhbmRieW5vdyBjb21tYW5kLgpAQCAtNDk0MCw3ICs0OTUwLDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wb3J0X3F1ZXVlX3Rhc2spOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfaW9jdGwpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfcXVldWVjbWQpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfZXJyb3IpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfc2xhdmVfY29uZmlnKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX3JlbGVhc2UpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2hvc3RfaW50cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCmluZGV4IDYyODE5MWIuLmEwMjg5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCkBAIC01Myw2ICs1Myw3IEBACiB0eXBlZGVmIHVuc2lnbmVkIGludCAoKmF0YV94bGF0X2Z1bmNfdCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgY29uc3QgdTggKnNjc2ljbWQpOwogc3RhdGljIHN0cnVjdCBhdGFfZGV2aWNlICoKIGF0YV9zY3NpX2ZpbmRfZGV2KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRldik7CitzdGF0aWMgdm9pZCBhdGFfc2NzaV9lcnJvcihzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KTsKIGVudW0gc2NzaV9laF90aW1lcl9yZXR1cm4gYXRhX3Njc2lfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiAKICNkZWZpbmUgUldfUkVDT1ZFUllfTVBBR0UgMHgxCkBAIC05OSw2ICsxMDAsNyBAQAogICogSXQganVzdCBuZWVkcyB0aGUgZWhfdGltZWRfb3V0IGhvb2suCiAgKi8KIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSBhdGFfc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgPSB7CisJLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuZWhfdGltZWRfb3V0CQk9IGF0YV9zY3NpX3RpbWVkX291dCwKIH07CiAKQEAgLTc3MiwxMiArNzc0LDkgQEAKICAqCiAgKglMT0NLSU5HOgogICoJSW5oZXJpdGVkIGZyb20gU0NTSSBsYXllciAobm9uZSwgY2FuIHNsZWVwKQotICoKLSAqCVJFVFVSTlM6Ci0gKglaZXJvLgogICovCiAKLWludCBhdGFfc2NzaV9lcnJvcihzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQorc3RhdGljIHZvaWQgYXRhX3Njc2lfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04MDUsNyArODA0LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKIAogCURQUklOVEsoIkVYSVRcbiIpOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBhdGFfZWhfc2NzaWRvbmUoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKQEAgLTE0MzEsOSArMTQyOSw3IEBACiAJCWdvdG8gZWFybHlfZmluaXNoOwogCiAJLyogc2VsZWN0IGRldmljZSwgc2VuZCBjb21tYW5kIHRvIGhhcmR3YXJlICovCi0JcWMtPmVycl9tYXNrID0gYXRhX3FjX2lzc3VlKHFjKTsKLQlpZiAocWMtPmVycl9tYXNrKQotCQlhdGFfcWNfY29tcGxldGUocWMpOworCWF0YV9xY19pc3N1ZShxYyk7CiAKIAlWUFJJTlRLKCJFWElUXG4iKTsKIAlyZXR1cm47CkBAIC0yMTk5LDkgKzIxOTUsNyBAQAogCiAJcWMtPmNvbXBsZXRlX2ZuID0gYXRhcGlfc2Vuc2VfY29tcGxldGU7CiAKLQlxYy0+ZXJyX21hc2sgPSBhdGFfcWNfaXNzdWUocWMpOwotCWlmIChxYy0+ZXJyX21hc2spCi0JCWF0YV9xY19jb21wbGV0ZShxYyk7CisJYXRhX3FjX2lzc3VlKHFjKTsKIAogCURQUklOVEsoIkVYSVRcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS5oIGIvZHJpdmVycy9zY3NpL2xpYmF0YS5oCmluZGV4IDY1ZjUyYmUuLmJhYzhjYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEuaAorKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIGV4dGVybiBpbnQgYXRhX3J3Y21kX3Byb3RvY29sKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIHZvaWQgYXRhX3BvcnRfZmx1c2hfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9xY19mcmVlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitleHRlcm4gdm9pZCBhdGFfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaW50IGF0YV9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gdm9pZCBhdGFfZGV2X3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdhaXQsIHVuc2lnbmVkIGludCBjYW5fc2xlZXApOwpAQCAtNjAsNyArNjAsNiBAQAogZXh0ZXJuIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSBhdGFfc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CiAKIGV4dGVybiB2b2lkIGF0YV9zY3NpX3NjYW5faG9zdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLWV4dGVybiBpbnQgYXRhX3Njc2lfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqaG9zdCk7CiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9zY3Npb3BfaW5xX3N0ZChzdHJ1Y3QgYXRhX3Njc2lfYXJncyAqYXJncywgdTggKnJidWYsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGJ1Zmxlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKaW5kZXggZmFkNjA3Yi4uZWUyMjE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKQEAgLTI3LDcgKzI3LDYgQEAKIGludCBscGZjX3JlYWRfc3BhcmFtKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfcmVhZF9jb25maWcoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19yZWFkX2xua19zdGF0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Ci12b2lkIGxwZmNfc2V0X3NsaW0oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogaW50IGxwZmNfcmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwgdWludDhfdCAqLCBMUEZDX01CT1hRX3QgKiwKIAkJICAgdWludDMyX3QpOwogdm9pZCBscGZjX3VucmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwgTFBGQ19NQk9YUV90ICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaAppbmRleCA4OTMyYjFiLi40MWNmNWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaApAQCAtMTEzLDYgKzExMyw3IEBACiAjZGVmaW5lIE5MUF9OUFJfQURJU0MgICAgICAweDIwMDAwMDAJLyogSXNzdWUgQURJU0Mgd2hlbiBkcSdlZCBmcm9tCiAJCQkJCSAgIE5QUiBsaXN0ICovCiAjZGVmaW5lIE5MUF9ERUxBWV9SRU1PVkUgICAweDQwMDAwMDAJLyogRGVmZXIgcmVtb3ZhbCB0aWxsIGVuZCBvZiBEU00gKi8KKyNkZWZpbmUgTkxQX05PREVWX1JFTU9WRSAgIDB4ODAwMDAwMAkvKiBEZWZlciByZW1vdmFsIHRpbGwgZGlzY292ZXJ5IGVuZHMgKi8KIAogLyogRGVmaW5lcyBmb3IgbGlzdCBzZWFyY2hzICovCiAjZGVmaW5lIE5MUF9TRUFSQ0hfTUFQUEVEICAgIDB4MQkvKiBzZWFyY2ggbWFwcGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCA0ODEzYmVhLi4yODNiN2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTMwMiwxMCArMzAyLDYgQEAKIAlpZiAobHBmY19yZWdfbG9naW4ocGhiYSwgRmFicmljX0RJRCwgKHVpbnQ4X3QgKikgc3AsIG1ib3gsIDApKQogCQlnb3RvIGZhaWxfZnJlZV9tYm94OwogCi0JLyoKLQkgKiBzZXRfc2xpbSBtYWlsYm94IGNvbW1hbmQgbmVlZHMgdG8gZXhlY3V0ZSBmaXJzdCwKLQkgKiBxdWV1ZSB0aGlzIGNvbW1hbmQgdG8gYmUgcHJvY2Vzc2VkIGxhdGVyLgotCSAqLwogCW1ib3gtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfZmFicmljX3JlZ19sb2dpbjsKIAltYm94LT5jb250ZXh0MiA9IG5kbHA7CiAKQEAgLTc4MSwyNSArNzc3LDI2IEBACiAJaWYgKGRpc2MgJiYgcGhiYS0+bnVtX2Rpc2Nfbm9kZXMpIHsKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBtb3JlIFBMT0dJcyB0byBiZSBzZW50ICovCiAJCWxwZmNfbW9yZV9wbG9naShwaGJhKTsKLQl9CiAKLQlpZiAocGhiYS0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgewotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCWlmIChwaGJhLT5udW1fZGlzY19ub2RlcyA9PSAwKSB7CisJCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQlwaGJhLT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7CisJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAotCQlscGZjX2Nhbl9kaXNjdG1vKHBoYmEpOwotCQlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkgewotCQkJLyogQ2hlY2sgdG8gc2VlIGlmIG1vcmUgUlNDTnMgY2FtZSBpbiB3aGlsZSB3ZSB3ZXJlCi0JCQkgKiBwcm9jZXNzaW5nIHRoaXMgb25lLgotCQkJICovCi0JCQlpZiAoKHBoYmEtPmZjX3JzY25faWRfY250ID09IDApICYmCi0JCQkgICAgKCEocGhiYS0+ZmNfZmxhZyAmIEZDX1JTQ05fRElTQ09WRVJZKSkpIHsKLQkJCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCQkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfUlNDTl9NT0RFOwotCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJfSBlbHNlIHsKLQkJCQlscGZjX2Vsc19oYW5kbGVfcnNjbihwaGJhKTsKKwkJCWxwZmNfY2FuX2Rpc2N0bW8ocGhiYSk7CisJCQlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkgeworCQkJCS8qCisJCQkJICogQ2hlY2sgdG8gc2VlIGlmIG1vcmUgUlNDTnMgY2FtZSBpbiB3aGlsZQorCQkJCSAqIHdlIHdlcmUgcHJvY2Vzc2luZyB0aGlzIG9uZS4KKwkJCQkgKi8KKwkJCQlpZiAoKHBoYmEtPmZjX3JzY25faWRfY250ID09IDApICYmCisJCQkgICAgCSghKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX0RJU0NPVkVSWSkpKSB7CisJCQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCQkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfUlNDTl9NT0RFOworCQkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCQl9IGVsc2UgeworCQkJCQlscGZjX2Vsc19oYW5kbGVfcnNjbihwaGJhKTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CkBAIC0xMjYzLDcgKzEyNjAsNyBAQAogCXBzbGkgPSAmcGhiYS0+c2xpOwogCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CiAKLQljbWRzaXplID0gMiAqIChzaXplb2YgKHVpbnQzMl90KSArIHNpemVvZiAoc3RydWN0IGxwZmNfbmFtZSkpOworCWNtZHNpemUgPSAoMiAqIHNpemVvZiAodWludDMyX3QpKSArIHNpemVvZiAoc3RydWN0IGxwZmNfbmFtZSk7CiAJZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAxLCBjbWRzaXplLCByZXRyeSwgbmRscCwKIAkJCQkJCW5kbHAtPm5scF9ESUQsIEVMU19DTURfTE9HTyk7CiAJaWYgKCFlbHNpb2NiKQpAQCAtMTQ1MSwyMiArMTQ0OCwyMyBAQAogCQkJICogUExPR0lzIHRvIGJlIHNlbnQKIAkJCSAqLwogCQkJbHBmY19tb3JlX3Bsb2dpKHBoYmEpOwotCQl9CiAKLQkJaWYgKHBoYmEtPm51bV9kaXNjX25vZGVzID09IDApIHsKLQkJCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKLQkJCWxwZmNfY2FuX2Rpc2N0bW8ocGhiYSk7Ci0JCQlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkgewotCQkJCS8qIENoZWNrIHRvIHNlZSBpZiBtb3JlIFJTQ05zCi0JCQkJICogY2FtZSBpbiB3aGlsZSB3ZSB3ZXJlCi0JCQkJICogcHJvY2Vzc2luZyB0aGlzIG9uZS4KLQkJCQkgKi8KLQkJCQlpZigocGhiYS0+ZmNfcnNjbl9pZF9jbnQ9PTApICYmCi0JCQkJICAgKCEocGhiYS0+ZmNfZmxhZyAmIEZDX1JTQ05fRElTQ09WRVJZKSkpIHsKLQkJCQkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfUlNDTl9NT0RFOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJbHBmY19lbHNfaGFuZGxlX3JzY24ocGhiYSk7CisJCQlpZiAocGhiYS0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgeworCQkJCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKKwkJCQlscGZjX2Nhbl9kaXNjdG1vKHBoYmEpOworCQkJCWlmIChwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSB7CisJCQkJCS8qCisJCQkJCSAqIENoZWNrIHRvIHNlZSBpZiBtb3JlIFJTQ05zCisJCQkJCSAqIGNhbWUgaW4gd2hpbGUgd2Ugd2VyZQorCQkJCQkgKiBwcm9jZXNzaW5nIHRoaXMgb25lLgorCQkJCQkgKi8KKwkJCQkJaWYoKHBoYmEtPmZjX3JzY25faWRfY250PT0wKSAmJgorCQkJCQkgIShwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9ESVNDT1ZFUlkpKSB7CisJCQkJCQlwaGJhLT5mY19mbGFnICY9IH5GQ19SU0NOX01PREU7CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlscGZjX2Vsc19oYW5kbGVfcnNjbihwaGJhKTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMTg3Miw5ICsxODcwLDYgQEAKIAlpZiAobWJveCkgewogCQlpZiAoKHJzcGlvY2ItPmlvY2IudWxwU3RhdHVzID09IDApCiAJCSAgICAmJiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfQUNDX1JFR0xPR0lOKSkgewotCQkJLyogc2V0X3NsaW0gbWFpbGJveCBjb21tYW5kIG5lZWRzIHRvIGV4ZWN1dGUgZmlyc3QsCi0JCQkgKiBxdWV1ZSB0aGlzIGNvbW1hbmQgdG8gYmUgcHJvY2Vzc2VkIGxhdGVyLgotCQkJICovCiAJCQlscGZjX3VucmVnX3JwaShwaGJhLCBuZGxwKTsKIAkJCW1ib3gtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfcmVnX2xvZ2luOwogCQkJbWJveC0+Y29udGV4dDIgPSBuZGxwOwpAQCAtMTkyMCw2ICsxOTE1LDcgQEAKIAl1aW50OF90ICpwY21kOwogCXVpbnQxNl90IGNtZHNpemU7CiAJaW50IHJjOworCUVMU19QS1QgKmVsc19wa3RfcHRyOwogCiAJcHNsaSA9ICZwaGJhLT5zbGk7CiAJcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0VMU19SSU5HXTsJLyogRUxTIHJpbmcgKi8KQEAgLTE5NTgsNiArMTk1NCwyMyBAQAogCQlwY21kICs9IHNpemVvZiAodWludDMyX3QpOwogCQltZW1jcHkocGNtZCwgJnBoYmEtPmZjX3NwYXJhbSwgc2l6ZW9mIChzdHJ1Y3Qgc2Vydl9wYXJtKSk7CiAJCWJyZWFrOworCWNhc2UgRUxTX0NNRF9QUkxPOgorCQljbWRzaXplID0gc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKFBSTE8pOworCQllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDAsIGNtZHNpemUsIG9sZGlvY2ItPnJldHJ5LAorCQkJCQkgICAgIG5kbHAsIG5kbHAtPm5scF9ESUQsIEVMU19DTURfUFJMTyk7CisJCWlmICghZWxzaW9jYikKKwkJCXJldHVybiAxOworCisJCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKKwkJaWNtZC0+dWxwQ29udGV4dCA9IG9sZGNtZC0+dWxwQ29udGV4dDsgLyogWHJpICovCisJCXBjbWQgPSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKKworCQltZW1jcHkocGNtZCwgKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgb2xkaW9jYi0+Y29udGV4dDIpLT52aXJ0LAorCQkgICAgICAgc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKFBSTE8pKTsKKwkJKigodWludDMyX3QgKikgKHBjbWQpKSA9IEVMU19DTURfUFJMT19BQ0M7CisJCWVsc19wa3RfcHRyID0gKEVMU19QS1QgKikgcGNtZDsKKwkJZWxzX3BrdF9wdHItPnVuLnBybG8uYWNjZXB0UnNwQ29kZSA9IFBSTE9fUkVRX0VYRUNVVEVEOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMTsKIAl9CkBAIC0yNDk4LDcgKzI1MTEsNyBAQAogCS8qIElmIHdlIGFyZSBhYm91dCB0byBiZWdpbiBkaXNjb3ZlcnksIGp1c3QgQUNDIHRoZSBSU0NOLgogCSAqIERpc2NvdmVyeSBwcm9jZXNzaW5nIHdpbGwgc2F0aXNmeSBpdC4KIAkgKi8KLQlpZiAocGhiYS0+aGJhX3N0YXRlIDwgTFBGQ19OU19RUlkpIHsKKwlpZiAocGhiYS0+aGJhX3N0YXRlIDw9IExQRkNfTlNfUVJZKSB7CiAJCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwsCiAJCQkJCQkJCW5ld25vZGUpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKaW5kZXggNjcyMWU2Ny4uYWRiMDg2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKQEAgLTMxMSw4ICszMTEsOCBAQAogCWV2dHAtPmV2dF9hcmcyICA9IGFyZzI7CiAJZXZ0cC0+ZXZ0ICAgICAgID0gZXZ0OwogCi0JbGlzdF9hZGRfdGFpbCgmZXZ0cC0+ZXZ0X2xpc3RwLCAmcGhiYS0+d29ya19saXN0KTsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZXZ0cC0+ZXZ0X2xpc3RwLCAmcGhiYS0+d29ya19saXN0KTsKIAlpZiAocGhiYS0+d29ya193YWl0KQogCQl3YWtlX3VwKHBoYmEtPndvcmtfd2FpdCk7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC0xMDcxLDEwICsxMDcxLDYgQEAKIAkvKiBpbml0aWFsaXplIHN0YXRpYyBwb3J0IGRhdGEgKi8KIAlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IG5kbHAtPm5scF9tYXhmcmFtZTsKIAlycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBuZGxwLT5ubHBfY2xhc3Nfc3VwOwotCWlmICgocnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKSAmJgotCQkocnBvcnQtPnNjc2lfdGFyZ2V0X2lkIDwgTUFYX0ZDUF9UQVJHRVQpKSB7Ci0JCW5kbHAtPm5scF9zaWQgPSBycG9ydC0+c2NzaV90YXJnZXRfaWQ7Ci0JfQogCXJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CiAJcmRhdGEtPnBub2RlID0gbmRscDsKIApAQCAtMTA4Nyw2ICsxMDgzLDEwIEBACiAJaWYgKHJwb3J0X2lkcy5yb2xlcyAhPSAgRkNfUlBPUlRfUk9MRV9VTktOT1dOKQogCQlmY19yZW1vdGVfcG9ydF9yb2xlY2hnKHJwb3J0LCBycG9ydF9pZHMucm9sZXMpOwogCisJaWYgKChycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpICYmCisJCShycG9ydC0+c2NzaV90YXJnZXRfaWQgPCBNQVhfRkNQX1RBUkdFVCkpIHsKKwkJbmRscC0+bmxwX3NpZCA9IHJwb3J0LT5zY3NpX3RhcmdldF9pZDsKKwl9CiAKIAlyZXR1cm47CiB9CkBAIC0xMjM4LDYgKzEyMzgsNyBAQAogCQkJCQkJZXZ0X2xpc3RwKTsKIAogCQl9CisJCW5scC0+bmxwX2ZsYWcgJj0gfk5MUF9OT0RFVl9SRU1PVkU7CiAJCW5scC0+bmxwX3R5cGUgfD0gTkxQX0ZDX05PREU7CiAJCWJyZWFrOwogCWNhc2UgTkxQX01BUFBFRF9MSVNUOgpAQCAtMTI1OCw2ICsxMjU5LDcgQEAKIAkJCQkJCWV2dF9saXN0cCk7CiAKIAkJfQorCQlubHAtPm5scF9mbGFnICY9IH5OTFBfTk9ERVZfUkVNT1ZFOwogCQlicmVhazsKIAljYXNlIE5MUF9OUFJfTElTVDoKIAkJbmxwLT5ubHBfZmxhZyB8PSBsaXN0OwpAQCAtMTQwMiw2ICsxNDA0LDggQEAKIAkJCWlmIChpY21kLT51bHBDb250ZXh0ID09ICh2b2xhdGlsZSB1c2hvcnQpbmRscC0+bmxwX3JwaSkKIAkJCQlyZXR1cm4gMTsKIAkJY2FzZSBDTURfRUxTX1JFUVVFU1Q2NF9DUjoKKwkJCWlmIChpY21kLT51bi5lbHNyZXE2NC5yZW1vdGVJRCA9PSBuZGxwLT5ubHBfRElEKQorCQkJCXJldHVybiAxOwogCQljYXNlIENNRF9YTUlUX0VMU19SU1A2NF9DWDoKIAkJCWlmIChpb2NiLT5jb250ZXh0MSA9PSAodWludDhfdCAqKSBuZGxwKQogCQkJCXJldHVybiAxOwpAQCAtMTkwMSwxMCArMTkwNSw4IEBACiAJCQkgKi8KIAkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pCiAJCQkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHBoYmEsIG5kbHApOwotCQl9IGVsc2UgewotCQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKKwkJfSBlbHNlCiAJCQluZGxwID0gTlVMTDsKLQkJfQogCX0gZWxzZSB7CiAJCWZsZyA9IG5kbHAtPm5scF9mbGFnICYgTkxQX0xJU1RfTUFTSzsKIAkJaWYgKChmbGcgPT0gTkxQX0FESVNDX0xJU1QpIHx8IChmbGcgPT0gTkxQX1BMT0dJX0xJU1QpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCmluZGV4IDU0ZDA0MTguLmVlZGY5ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKQEAgLTQ0OSw2ICs0NDksNyBAQAogI2RlZmluZSBFTFNfQ01EX1JSUSAgICAgICAweDEyMDAwMDAwCiAjZGVmaW5lIEVMU19DTURfUFJMSSAgICAgIDB4MjAxMDAwMTQKICNkZWZpbmUgRUxTX0NNRF9QUkxPICAgICAgMHgyMTEwMDAxNAorI2RlZmluZSBFTFNfQ01EX1BSTE9fQUNDICAweDAyMTAwMDE0CiAjZGVmaW5lIEVMU19DTURfUERJU0MgICAgIDB4NTAwMDAwMDAKICNkZWZpbmUgRUxTX0NNRF9GRElTQyAgICAgMHg1MTAwMDAwMAogI2RlZmluZSBFTFNfQ01EX0FESVNDICAgICAweDUyMDAwMDAwCkBAIC00ODQsNiArNDg1LDcgQEAKICNkZWZpbmUgRUxTX0NNRF9SUlEgICAgICAgMHgxMgogI2RlZmluZSBFTFNfQ01EX1BSTEkgICAgICAweDE0MDAxMDIwCiAjZGVmaW5lIEVMU19DTURfUFJMTyAgICAgIDB4MTQwMDEwMjEKKyNkZWZpbmUgRUxTX0NNRF9QUkxPX0FDQyAgMHgxNDAwMTAwMgogI2RlZmluZSBFTFNfQ01EX1BESVNDICAgICAweDUwCiAjZGVmaW5lIEVMU19DTURfRkRJU0MgICAgIDB4NTEKICNkZWZpbmUgRUxTX0NNRF9BRElTQyAgICAgMHg1MgpAQCAtMTUzOSw2ICsxNTQxLDcgQEAKIAogI2RlZmluZSBGTEFHU19UT1BPTE9HWV9GQUlMT1ZFUiAgICAgIDB4MDQwMAkvKiBCaXQgMTAgKi8KICNkZWZpbmUgRkxBR1NfTElOS19TUEVFRCAgICAgICAgICAgICAweDA4MDAJLyogQml0IDExICovCisjZGVmaW5lIEZMQUdTX0lNRURfQUJPUlQgICAgICAgICAgICAgMHgwNDAwMAkvKiBCaXQgMTQgKi8KIAogCXVpbnQzMl90IGxpbmtfc3BlZWQ7CiAjZGVmaW5lIExJTktfU1BFRURfQVVUTyAwICAgICAgIC8qIEF1dG8gc2VsZWN0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IDY2ZDVkMDAuLjkwOGQwZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0yOTQsMTUgKzI5NCw2IEBACiAJCX0KIAl9CiAKLQkvKiBUaGlzIHNob3VsZCB0dXJuIG9uIERFTEFZRUQgQUJUUyBmb3IgRUxTIHRpbWVvdXRzICovCi0JbHBmY19zZXRfc2xpbShwaGJhLCBwbWIsIDB4MDUyMTk4LCAweDEpOwotCWlmIChscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX1BPTEwpICE9IE1CWF9TVUNDRVNTKSB7Ci0JCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOwotCQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCiAJbHBmY19yZWFkX2NvbmZpZyhwaGJhLCBwbWIpOwogCWlmIChscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX1BPTEwpICE9IE1CWF9TVUNDRVNTKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLApAQCAtODA0LDcgKzc5NSw3IEBACiAJCWludCAgICBtYXhfc3BlZWQ7CiAJCWNoYXIgKiBwb3J0czsKIAkJY2hhciAqIGJ1czsKLQl9IG07CisJfSBtID0geyI8VW5rbm93bj4iLCAwLCAiIiwgIiJ9OwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGhiYS0+cGNpZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJ0eXBlKTsKIAlwb3J0cyA9IChoZHJ0eXBlID09IDB4ODApID8gIjItcG9ydCAiIDogIiI7CkBAIC0xNjI3LDcgKzE2MTgsNyBAQAogCiAJZXJyb3IgPSBscGZjX2FsbG9jX3N5c2ZzX2F0dHIocGhiYSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9rdGhyZWFkX3N0b3A7CisJCWdvdG8gb3V0X3JlbW92ZV9ob3N0OwogCiAJZXJyb3IgPQlyZXF1ZXN0X2lycShwaGJhLT5wY2lkZXYtPmlycSwgbHBmY19pbnRyX2hhbmRsZXIsIFNBX1NISVJRLAogCQkJCQkJCUxQRkNfRFJJVkVSX05BTUUsIHBoYmEpOwpAQCAtMTY0NCw4ICsxNjM1LDEwIEBACiAJcGhiYS0+SENyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSENfUkVHX09GRlNFVDsKIAogCWVycm9yID0gbHBmY19zbGlfaGJhX3NldHVwKHBoYmEpOwotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IpIHsKKwkJZXJyb3IgPSAtRU5PREVWOwogCQlnb3RvIG91dF9mcmVlX2lycTsKKwl9CiAKIAlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgewogCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC0xNzAwLDYgKzE2OTMsOSBAQAogCWZyZWVfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBwaGJhKTsKIG91dF9mcmVlX3N5c2ZzX2F0dHI6CiAJbHBmY19mcmVlX3N5c2ZzX2F0dHIocGhiYSk7CitvdXRfcmVtb3ZlX2hvc3Q6CisJZmNfcmVtb3ZlX2hvc3QocGhiYS0+aG9zdCk7CisJc2NzaV9yZW1vdmVfaG9zdChwaGJhLT5ob3N0KTsKIG91dF9rdGhyZWFkX3N0b3A6CiAJa3RocmVhZF9zdG9wKHBoYmEtPndvcmtlcl90aHJlYWQpOwogb3V0X2ZyZWVfaW9jYnE6CkBAIC0xNzIxLDEyICsxNzE3LDE0IEBACiBvdXRfaWRyX3JlbW92ZToKIAlpZHJfcmVtb3ZlKCZscGZjX2hiYV9pbmRleCwgcGhiYS0+YnJkX25vKTsKIG91dF9wdXRfaG9zdDoKKwlwaGJhLT5ob3N0ID0gTlVMTDsKIAlzY3NpX2hvc3RfcHV0KGhvc3QpOwogb3V0X3JlbGVhc2VfcmVnaW9uczoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogb3V0X2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIG91dDoKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCmluZGV4IGM1ODVlMmIuLmU0MmYyMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCkBAIC0yMDAsNiArMjAwLDkgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogRW5hYmxlIGFzeW5jaHJvbm91cyBBQlRTIHJlc3BvbnNlcyBmcm9tIGZpcm13YXJlICovCisJbWItPnVuLnZhckluaXRMbmsubGlua19mbGFncyB8PSBGTEFHU19JTUVEX0FCT1JUOworCiAJLyogTkVXX0ZFQVRVUkUKIAkgKiBTZXR0aW5nIHVwIHRoZSBsaW5rIHNwZWVkCiAJICovCkBAIC0yOTIsMzYgKzI5NSw2IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byB3cml0ZSBzbGltICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWxwZmNfc2V0X3NsaW0oc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iLCB1aW50MzJfdCBhZGRyLAotCSAgICAgIHVpbnQzMl90IHZhbHVlKQotewotCU1BSUxCT1hfdCAqbWI7Ci0KLQltYiA9ICZwbWItPm1iOwotCW1lbXNldChwbWIsIDAsIHNpemVvZiAoTFBGQ19NQk9YUV90KSk7Ci0KLQkvKiBhZGRyID0gMHgwOTA1OTcgaXMgQVVUTyBBQlRTIGRpc2FibGUgZm9yIEVMUyBjb21tYW5kcyAqLwotCS8qIGFkZHIgPSAweDA1MjE5OCBpcyBERUxBWUVEIEFCVFMgZW5hYmxlIGZvciBFTFMgY29tbWFuZHMgKi8KLQotCS8qCi0JICogQWx3YXlzIHR1cm4gb24gREVMQVlFRCBBQlRTIGZvciBFTFMgdGltZW91dHMKLQkgKi8KLQlpZiAoKGFkZHIgPT0gMHgwNTIxOTgpICYmICh2YWx1ZSA9PSAwKSkKLQkJdmFsdWUgPSAxOwotCi0JbWItPnVuLnZhcldvcmRzWzBdID0gYWRkcjsKLQltYi0+dW4udmFyV29yZHNbMV0gPSB2YWx1ZTsKLQotCW1iLT5tYnhDb21tYW5kID0gTUJYX1NFVF9TTElNOwotCW1iLT5tYnhPd25lciA9IE9XTl9IT1NUOwotCXJldHVybjsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgbHBmY19yZWFkX252ICBJc3N1ZSBhIFJFQUQgQ09ORklHICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKaW5kZXggM2Q3N2JkOS4uMjdkNjBhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCkBAIC00NjUsMTQgKzQ2NSwxOCBAQAogc3RhdGljIGludAogbHBmY19yY3ZfbG9nbyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAogCQkgICAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsCi0JCSAgICAgIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiKQorCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKKwkJICAgICAgdWludDMyX3QgZWxzX2NtZCkKIHsKIAkvKiBQdXQgbmRscCBvbiBOUFIgbGlzdCB3aXRoIDEgc2VjIHRpbWVvdXQgZm9yIHBsb2dpLCBBQ0MgbG9nbyAqLwogCS8qIE9ubHkgY2FsbCBMT0dPIEFDQyBmb3IgZmlyc3QgTE9HTywgdGhpcyBhdm9pZHMgc2VuZGluZyB1bm5lY2Vzc2FyeQogCSAqIFBMT0dJcyBkdXJpbmcgTE9HTyBzdG9ybXMgZnJvbSBhIGRldmljZS4KIAkgKi8KIAluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTE9HT19BQ0M7Ci0JbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CisJaWYgKGVsc19jbWQgPT0gRUxTX0NNRF9QUkxPKQorCQlscGZjX2Vsc19yc3BfYWNjKHBoYmEsIEVMU19DTURfUFJMTywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CisJZWxzZQorCQlscGZjX2Vsc19yc3BfYWNjKHBoYmEsIEVMU19DTURfQUNDLCBjbWRpb2NiLCBuZGxwLCBOVUxMLCAwKTsKIAogCWlmICghKG5kbHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykgfHwKIAkJKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX0FESVNDX0lTU1VFKSkgewpAQCAtNjgxLDcgKzY4NSw3IEBACiAJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUExPR0kgKi8KIAlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKIAotCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7CisJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLCBFTFNfQ01EX0xPR08pOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTc4OCwxMCArNzkyLDYgQEAKIAlpZiAobHBmY19yZWdfbG9naW4KIAkgICAgKHBoYmEsIGlyc3AtPnVuLmVsc3JlcTY0LnJlbW90ZUlELAogCSAgICAgKHVpbnQ4X3QgKikgc3AsIG1ib3gsIDApID09IDApIHsKLQkJLyogc2V0X3NsaW0gbWFpbGJveCBjb21tYW5kIG5lZWRzIHRvCi0JCSAqIGV4ZWN1dGUgZmlyc3QsIHF1ZXVlIHRoaXMgY29tbWFuZCB0bwotCQkgKiBiZSBwcm9jZXNzZWQgbGF0ZXIuCi0JCSAqLwogCQlzd2l0Y2ggKG5kbHAtPm5scF9ESUQpIHsKIAkJY2FzZSBOYW1lU2VydmVyX0RJRDoKIAkJCW1ib3gtPm1ib3hfY21wbCA9CkBAIC04MzIsMTEgKzgzMiwxNyBAQAogbHBmY19kZXZpY2Vfcm1fcGxvZ2lfaXNzdWUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKIAkJCSAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwgdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCiB7Ci0JLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUExPR0kgKi8KLQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKKwlpZihuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgeworCQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTk9ERVZfUkVNT1ZFOworCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOworCX0KKwllbHNlIHsKKwkJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUExPR0kgKi8KKwkJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CiAKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOworCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwl9CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtODUxLDcgKzg1Nyw3IEBACiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJbmRscC0+bmxwX2ZsYWcgJj0gfihOTFBfTk9ERVZfUkVNT1ZFIHwgTkxQX05QUl8yQl9ESVNDKTsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CkBAIC05MDUsNyArOTExLDcgQEAKIAkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBBRElTQyAqLwogCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDApOwogCi0JbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKKwlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IsIEVMU19DTURfTE9HTyk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtOTMyLDcgKzkzOCw3IEBACiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKIAkvKiBUcmVhdCBsaWtlIHJjdiBsb2dvICovCi0JbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKKwlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IsIEVMU19DTURfUFJMTyk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtOTg3LDExICs5OTMsMTcgQEAKIAkJCSAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywKIAkJCSAgICB1aW50MzJfdCBldnQpCiB7Ci0JLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgQURJU0MgKi8KLQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKKwlpZihuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgeworCQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTk9ERVZfUkVNT1ZFOworCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOworCX0KKwllbHNlIHsKKwkJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgQURJU0MgKi8KKwkJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CiAKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOworCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwl9CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTAwNiw3ICsxMDE4LDcgQEAKIAluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKKwluZGxwLT5ubHBfZmxhZyAmPSB+KE5MUF9OT0RFVl9SRU1PVkUgfCBOTFBfTlBSXzJCX0RJU0MpOwogCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9OUFJfQURJU0M7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKQEAgLTEwNDgsNyArMTA2MCw3IEBACiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAotCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7CisJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLCBFTFNfQ01EX0xPR08pOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTEwNzMsNyArMTA4NSw3IEBACiAJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2I7CiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKLQlscGZjX2Vsc19yc3BfYWNjKHBoYmEsIEVMU19DTURfQUNDLCBjbWRpb2NiLCBuZGxwLCBOVUxMLCAwKTsKKwlscGZjX2Vsc19yc3BfYWNjKHBoYmEsIEVMU19DTURfUFJMTywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMTEzMyw4ICsxMTQ1LDE0IEBACiAJCQkgICAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywKIAkJCSAgICAgIHVpbnQzMl90IGV2dCkKIHsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOworCWlmKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl8yQl9ESVNDKSB7CisJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9OT0RFVl9SRU1PVkU7CisJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CisJfQorCWVsc2UgeworCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwl9CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTE0Niw3ICsxMTY0LDcgQEAKIAluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKKwluZGxwLT5ubHBfZmxhZyAmPSB+KE5MUF9OT0RFVl9SRU1PVkUgfCBOTFBfTlBSXzJCX0RJU0MpOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CkBAIC0xMTg2LDcgKzEyMDQsNyBAQAogCS8qIFNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBSTEkgYmVmb3JlIHNlbmRpbmcgYWNjICovCiAJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CiAKLQlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IpOworCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYiwgRUxTX0NNRF9MT0dPKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xMjE0LDcgKzEyMzIsNyBAQAogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiOwogCiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7Ci0JbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CisJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX1BSTE8sIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTEyNzgsMTEgKzEyOTYsMTcgQEAKIGxwZmNfZGV2aWNlX3JtX3BybGlfaXNzdWUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKIAkJCSAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsIHVpbnQzMl90IGV2dCkKIHsKLQkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBQUkxJICovCi0JbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CisJaWYobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpIHsKKwkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05PREVWX1JFTU9WRTsKKwkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKKwl9CisJZWxzZSB7CisJCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBMT0dJICovCisJCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOwogCi0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CisJfQogfQogCiAKQEAgLTEzMTMsNyArMTMzNyw3IEBACiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJbmRscC0+bmxwX2ZsYWcgJj0gfihOTFBfTk9ERVZfUkVNT1ZFIHwgTkxQX05QUl8yQl9ESVNDKTsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQpAQCAtMTM1MSw3ICsxMzc1LDcgQEAKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCi0JbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKKwlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IsIEVMU19DTURfTE9HTyk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMTM3NSw3ICsxMzk5LDcgQEAKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCi0JbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CisJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX1BSTE8sIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTEzODYsNyArMTQxMCw3IEBACiAJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX1VOTUFQUEVEX05PREU7CiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7Ci0JbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKKwluZGxwLT5ubHBfZmxhZyAmPSB+KE5MUF9OT0RFVl9SRU1PVkUgfCBOTFBfTlBSXzJCX0RJU0MpOwogCWxwZmNfZGlzY19zZXRfYWRpc2MocGhiYSwgbmRscCk7CiAKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwpAQCAtMTQyNCw3ICsxNDQ4LDcgQEAKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCi0JbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKKwlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IsIEVMU19DTURfTE9HTyk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMTQ1Niw3ICsxNDgwLDcgQEAKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAogCS8qIFRyZWF0IGxpa2UgcmN2IGxvZ28gKi8KLQlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IpOworCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYiwgRUxTX0NNRF9QUkxPKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xNDY5LDcgKzE0OTMsNyBAQAogCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl8yQl9ESVNDOworCW5kbHAtPm5scF9mbGFnICY9IH4oTkxQX05PREVWX1JFTU9WRSB8IE5MUF9OUFJfMkJfRElTQyk7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbHBmY19kaXNjX3NldF9hZGlzYyhwaGJhLCBuZGxwKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwpAQCAtMTU1MSw3ICsxNTc1LDcgQEAKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCi0JbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKKwlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IsIEVMU19DTURfTE9HTyk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMTYxNyw5ICsxNjQxLDE2IEBACiAJCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwgdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCiB7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsICpyc3Bpb2NiOworCUlPQ0JfdCAqaXJzcDsKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCXJzcGlvY2IgPSBjbWRpb2NiLT5jb250ZXh0X3VuLnJzcF9pb2NiOworCisJaXJzcCA9ICZyc3Bpb2NiLT5pb2NiOworCWlmIChpcnNwLT51bHBTdGF0dXMpIHsKKwkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CisJfQogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTE2MjgsOSArMTY1OSwxNiBAQAogCQkJICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQogewogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLCAqcnNwaW9jYjsKKwlJT0NCX3QgKmlyc3A7CiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAlyc3Bpb2NiID0gY21kaW9jYi0+Y29udGV4dF91bi5yc3BfaW9jYjsKKworCWlyc3AgPSAmcnNwaW9jYi0+aW9jYjsKKwlpZiAoaXJzcC0+dWxwU3RhdHVzICYmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OT0RFVl9SRU1PVkUpKSB7CisJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOworCX0KIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xNjQ5LDkgKzE2ODcsMTYgQEAKIAkJCSAgICB1aW50MzJfdCBldnQpCiB7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsICpyc3Bpb2NiOworCUlPQ0JfdCAqaXJzcDsKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCXJzcGlvY2IgPSBjbWRpb2NiLT5jb250ZXh0X3VuLnJzcF9pb2NiOworCisJaXJzcCA9ICZyc3Bpb2NiLT5pb2NiOworCWlmIChpcnNwLT51bHBTdGF0dXMgJiYgKG5kbHAtPm5scF9mbGFnICYgTkxQX05PREVWX1JFTU9WRSkpIHsKKwkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CisJfQogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTE2NjgsNyArMTcxMywxMiBAQAogCiAJaWYgKCFtYi0+bWJ4U3RhdHVzKQogCQluZGxwLT5ubHBfcnBpID0gbWItPnVuLnZhcldvcmRzWzBdOwotCisJZWxzZSB7CisJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OT0RFVl9SRU1PVkUpIHsKKwkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwkJfQorCX0KIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xNjc3LDYgKzE3MjcsMTAgQEAKIAkJCSAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywKIAkJCSAgICB1aW50MzJfdCBldnQpCiB7CisJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl8yQl9ESVNDKSB7CisJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9OT0RFVl9SRU1PVkU7CisJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CisJfQogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOwogCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CiB9CkBAIC0xNjg3LDcgKzE3NDEsNyBAQAogCQkJICAgIHVpbnQzMl90IGV2dCkKIHsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKKwluZGxwLT5ubHBfZmxhZyAmPSB+KE5MUF9OT0RFVl9SRU1PVkUgfCBOTFBfTlBSXzJCX0RJU0MpOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pIHsKIAkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHBoYmEsIG5kbHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCBmOTM3OTk4Li43ZGM0YzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtNjI5LDggKzYyOSw3IEBACiAJc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NicTsKIAlJT0NCX3QgKnBpb2NiOwogCXN0cnVjdCBmY3BfY21uZCAqZmNwX2NtbmQ7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiA9IGxwZmNfY21kLT5wQ21kLT5kZXZpY2U7Ci0Jc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBzY3NpX2Rldi0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBscGZjX2NtZC0+cmRhdGE7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSByZGF0YS0+cG5vZGU7CiAKIAlpZiAoKG5kbHAgPT0gTlVMTCkgfHwgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSkgewpAQCAtNjY1LDU2ICs2NjQsMTggQEAKIAkJcGlvY2ItPnVscFRpbWVvdXQgPSBscGZjX2NtZC0+dGltZW91dDsKIAl9CiAKLQlscGZjX2NtZC0+cmRhdGEgPSByZGF0YTsKLQotCXN3aXRjaCAodGFza19tZ210X2NtZCkgewotCWNhc2UgRkNQX0xVTl9SRVNFVDoKLQkJLyogSXNzdWUgTFVOIFJlc2V0IHRvIFRHVCA8bnVtPiBMVU4gPG51bT4gKi8KLQkJbHBmY19wcmludGZfbG9nKHBoYmEsCi0JCQkJS0VSTl9JTkZPLAotCQkJCUxPR19GQ1AsCi0JCQkJIiVkOjA3MDMgSXNzdWUgTFVOIFJlc2V0IHRvIFRHVCAlZCBMVU4gJWQgIgotCQkJCSJEYXRhOiB4JXggeCV4XG4iLAotCQkJCXBoYmEtPmJyZF9ubywKLQkJCQlzY3NpX2Rldi0+aWQsIHNjc2lfZGV2LT5sdW4sCi0JCQkJbmRscC0+bmxwX3JwaSwgbmRscC0+bmxwX2ZsYWcpOwotCi0JCWJyZWFrOwotCWNhc2UgRkNQX0FCT1JUX1RBU0tfU0VUOgotCQkvKiBJc3N1ZSBBYm9ydCBUYXNrIFNldCB0byBUR1QgPG51bT4gTFVOIDxudW0+ICovCi0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAotCQkJCUtFUk5fSU5GTywKLQkJCQlMT0dfRkNQLAotCQkJCSIlZDowNzAxIElzc3VlIEFib3J0IFRhc2sgU2V0IHRvIFRHVCAlZCBMVU4gJWQgIgotCQkJCSJEYXRhOiB4JXggeCV4XG4iLAotCQkJCXBoYmEtPmJyZF9ubywKLQkJCQlzY3NpX2Rldi0+aWQsIHNjc2lfZGV2LT5sdW4sCi0JCQkJbmRscC0+bmxwX3JwaSwgbmRscC0+bmxwX2ZsYWcpOwotCi0JCWJyZWFrOwotCWNhc2UgRkNQX1RBUkdFVF9SRVNFVDoKLQkJLyogSXNzdWUgVGFyZ2V0IFJlc2V0IHRvIFRHVCA8bnVtPiAqLwotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKLQkJCQlLRVJOX0lORk8sCi0JCQkJTE9HX0ZDUCwKLQkJCQkiJWQ6MDcwMiBJc3N1ZSBUYXJnZXQgUmVzZXQgdG8gVEdUICVkICIKLQkJCQkiRGF0YTogeCV4IHgleFxuIiwKLQkJCQlwaGJhLT5icmRfbm8sCi0JCQkJc2NzaV9kZXYtPmlkLCBuZGxwLT5ubHBfcnBpLAotCQkJCW5kbHAtPm5scF9mbGFnKTsKLQkJYnJlYWs7Ci0JfQotCiAJcmV0dXJuICgxKTsKIH0KIAogc3RhdGljIGludAotbHBmY19zY3NpX3RndF9yZXNldChzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqIGxwZmNfY21kLCBzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQorbHBmY19zY3NpX3RndF9yZXNldChzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqIGxwZmNfY21kLCBzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAorCQkgICAgdW5zaWduZWQgIHRndF9pZCwgc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEpCiB7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxOwogCXN0cnVjdCBscGZjX2lvY2JxICppb2NicXJzcDsKIAlpbnQgcmV0OwogCisJbHBmY19jbWQtPnJkYXRhID0gcmRhdGE7CiAJcmV0ID0gbHBmY19zY3NpX3ByZXBfdGFza19tZ210X2NtZChwaGJhLCBscGZjX2NtZCwgRkNQX1RBUkdFVF9SRVNFVCk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBGQUlMRUQ7CkBAIC03MjYsNiArNjg3LDEzIEBACiAJaWYgKCFpb2NicXJzcCkKIAkJcmV0dXJuIEZBSUxFRDsKIAorCS8qIElzc3VlIFRhcmdldCBSZXNldCB0byBUR1QgPG51bT4gKi8KKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRkNQLAorCQkJIiVkOjA3MDIgSXNzdWUgVGFyZ2V0IFJlc2V0IHRvIFRHVCAlZCAiCisJCQkiRGF0YTogeCV4IHgleFxuIiwKKwkJCXBoYmEtPmJyZF9ubywgdGd0X2lkLCByZGF0YS0+cG5vZGUtPm5scF9ycGksCisJCQlyZGF0YS0+cG5vZGUtPm5scF9mbGFnKTsKKwogCXJldCA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLAogCQkJCSAgICAgICAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKIAkJCQkgICAgICAgaW9jYnEsIGlvY2JxcnNwLCBscGZjX2NtZC0+dGltZW91dCk7CkBAIC0xMDIxLDYgKzk4OSw3IEBACiAJbHBmY19jbWQtPnBDbWQgPSBjbW5kOwogCWxwZmNfY21kLT50aW1lb3V0ID0gNjA7CiAJbHBmY19jbWQtPnNjc2lfaGJhID0gcGhiYTsKKwlscGZjX2NtZC0+cmRhdGEgPSByZGF0YTsKIAogCXJldCA9IGxwZmNfc2NzaV9wcmVwX3Rhc2tfbWdtdF9jbWQocGhiYSwgbHBmY19jbWQsIEZDUF9MVU5fUkVTRVQpOwogCWlmICghcmV0KQpAQCAtMTAzMyw2ICsxMDAyLDExIEBACiAJaWYgKGlvY2JxcnNwID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfc2NzaV9idWY7CiAKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRkNQLAorCQkJIiVkOjA3MDMgSXNzdWUgTFVOIFJlc2V0IHRvIFRHVCAlZCBMVU4gJWQgIgorCQkJIkRhdGE6IHgleCB4JXhcbiIsIHBoYmEtPmJyZF9ubywgY21uZC0+ZGV2aWNlLT5pZCwKKwkJCWNtbmQtPmRldmljZS0+bHVuLCBwbm9kZS0+bmxwX3JwaSwgcG5vZGUtPm5scF9mbGFnKTsKKwogCXJldCA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLAogCQkJCSAgICAgICAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKIAkJCQkgICAgICAgaW9jYnEsIGlvY2JxcnNwLCBscGZjX2NtZC0+dGltZW91dCk7CkBAIC0xMTA0LDcgKzEwNzgsNiBAQAogCWludCBtYXRjaDsKIAlpbnQgcmV0ID0gRkFJTEVELCBpLCBlcnJfY291bnQgPSAwOwogCWludCBjbnQsIGxvb3BjbnQ7Ci0JdW5zaWduZWQgaW50IG1pZGxheWVyX2lkID0gMDsKIAlzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqIGxwZmNfY21kOwogCiAJbHBmY19ibG9ja19yZXF1ZXN0cyhwaGJhKTsKQEAgLTExMjQsNyArMTA5Nyw2IEBACiAJICogdGFyZ2V0cyBrbm93biB0byB0aGUgZHJpdmVyLiAgU2hvdWxkIGFueSB0YXJnZXQgcmVzZXQKIAkgKiBmYWlsLCB0aGlzIHJvdXRpbmUgcmV0dXJucyBmYWlsdXJlIHRvIHRoZSBtaWRsYXllci4KIAkgKi8KLQltaWRsYXllcl9pZCA9IGNtbmQtPmRldmljZS0+aWQ7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9GQ1BfVEFSR0VUOyBpKyspIHsKIAkJLyogU2VhcmNoIHRoZSBtYXBwZWQgbGlzdCBmb3IgdGhpcyB0YXJnZXQgSUQgKi8KIAkJbWF0Y2ggPSAwOwpAQCAtMTEzNyw5ICsxMTA5LDggQEAKIAkJaWYgKCFtYXRjaCkKIAkJCWNvbnRpbnVlOwogCi0JCWxwZmNfY21kLT5wQ21kLT5kZXZpY2UtPmlkID0gaTsKLQkJbHBmY19jbWQtPnBDbWQtPmRldmljZS0+aG9zdGRhdGEgPSBuZGxwLT5ycG9ydC0+ZGRfZGF0YTsKLQkJcmV0ID0gbHBmY19zY3NpX3RndF9yZXNldChscGZjX2NtZCwgcGhiYSk7CisJCXJldCA9IGxwZmNfc2NzaV90Z3RfcmVzZXQobHBmY19jbWQsIHBoYmEsCisJCQkJCSAgaSwgbmRscC0+cnBvcnQtPmRkX2RhdGEpOwogCQlpZiAocmV0ICE9IFNVQ0NFU1MpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0ZDUCwKIAkJCQkiJWQ6MDcxMyBCdXMgUmVzZXQgb24gdGFyZ2V0ICVkIGZhaWxlZFxuIiwKQEAgLTExNTgsNyArMTEyOSw2IEBACiAJICogdGhlIHRhcmdldHMuICBVbmZvcnR1bmF0ZWx5LCBzb21lIHRhcmdldHMgZG8gbm90IGFiaWRlIGJ5CiAJICogdGhpcyBmb3JjaW5nIHRoZSBkcml2ZXIgdG8gZG91YmxlIGNoZWNrLgogCSAqLwotCWNtbmQtPmRldmljZS0+aWQgPSBtaWRsYXllcl9pZDsKIAljbnQgPSBscGZjX3NsaV9zdW1faW9jYihwaGJhLCAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKIAkJCQkwLCAwLCBMUEZDX0NUWF9IT1NUKTsKIAlpZiAoY250KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAppbmRleCA0Y2YxMzY2Li42YjczNzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMTgsNyArMTgsNyBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMS40IgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjEuNiIKIAogI2RlZmluZSBMUEZDX0RSSVZFUl9OQU1FICJscGZjIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCmluZGV4IDgwYjY4YTIuLmRlMzVmZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCkBAIC00NDcxLDcgKzQ0NzEsNiBAQAogewogCVNjc2lfQ21uZAkqc2NtZDsKIAlzdHJ1Y3QJc2NzaV9kZXZpY2UgKnNkZXY7Ci0JdW5zaWduZWQgbG9uZwlmbGFncyA9IDA7CiAJc2NiX3QJKnNjYjsKIAlpbnQJcnZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKaW5kZXggYzExZTVjZS4uYmVjMTQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgkgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEZJTEUJCTogbWVnYXJhaWRfbWJveC5jCi0gKiBWZXJzaW9uCTogdjIuMjAuNC43IChOb3YgMTQgMjAwNSkKKyAqIFZlcnNpb24JOiB2Mi4yMC40LjggKEFwciAxMSAyMDA2KQogICoKICAqIEF1dGhvcnM6CiAgKiAJQXR1bCBNdWtrZXIJCTxBdHVsLk11a2tlckBsc2lsLmNvbT4KQEAgLTIyNzgsNiArMjI3OCw3IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJdWludDhfdAkJCWM7CiAJaW50CQkJc3RhdHVzOworCXVpb2NfdAkJCSpraW9jOwogCiAKIAlpZiAoIWFkYXB0ZXIpIHJldHVybjsKQEAgLTIzMjAsNiArMjMyMSw5IEBACiAJCQkvLyByZW1vdmUgZnJvbSBsb2NhbCBjbGlzdAogCQkJbGlzdF9kZWxfaW5pdCgmc2NiLT5saXN0KTsKIAorCQkJa2lvYwkJCT0gKHVpb2NfdCAqKXNjYi0+Z3A7CisJCQlraW9jLT5zdGF0dXMJCT0gMDsKKwogCQkJbWVnYXJhaWRfbWJveF9tbV9kb25lKGFkYXB0ZXIsIHNjYik7CiAKIAkJCWNvbnRpbnVlOwpAQCAtMjYzNiw2ICsyNjQwLDcgQEAKIAlpbnQJCXJlY292ZXJ5X3dpbmRvdzsKIAlpbnQJCXJlY292ZXJpbmc7CiAJaW50CQlpOworCXVpb2NfdAkJKmtpb2M7CiAKIAlhZGFwdGVyCQk9IFNDUDJBREFQVEVSKHNjcCk7CiAJcmFpZF9kZXYJPSBBREFQMlJBSURERVYoYWRhcHRlcik7CkBAIC0yNjU1LDMyICsyNjYwLDUxIEBACiAJLy8gQWxzbywgcmVzZXQgYWxsIHRoZSBjb21tYW5kcyBjdXJyZW50bHkgb3duZWQgYnkgdGhlIGRyaXZlcgogCXNwaW5fbG9ja19pcnFzYXZlKFBFTkRJTkdfTElTVF9MT0NLKGFkYXB0ZXIpLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjYiwgdG1wLCAmYWRhcHRlci0+cGVuZF9saXN0LCBsaXN0KSB7Ci0KIAkJbGlzdF9kZWxfaW5pdCgmc2NiLT5saXN0KTsJLy8gZnJvbSBwZW5kaW5nIGxpc3QKIAotCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwotCQkJIm1lZ2FyYWlkOiAlbGQ6JWRbJWQ6JWRdLCByZXNldCBmcm9tIHBlbmRpbmcgbGlzdFxuIiwKLQkJCQlzY3AtPnNlcmlhbF9udW1iZXIsIHNjYi0+c25vLAotCQkJCXNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOworCQlpZiAoc2NiLT5zbm8gPj0gTUJPWF9NQVhfU0NTSV9DTURTKSB7CisJCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORworCQkJIm1lZ2FyYWlkOiBJT0NUTCBwYWNrZXQgd2l0aCAlZFslZDolZF0gYmVpbmcgcmVzZXRcbiIsCisJCQlzY2ItPnNubywgc2NiLT5kZXZfY2hhbm5lbCwgc2NiLT5kZXZfdGFyZ2V0KSk7CiAKLQkJc2NwLT5yZXN1bHQgPSAoRElEX1JFU0VUIDw8IDE2KTsKLQkJc2NwLT5zY3NpX2RvbmUoc2NwKTsKKwkJCXNjYi0+c3RhdHVzID0gLTE7CiAKLQkJbWVnYXJhaWRfZGVhbGxvY19zY2IoYWRhcHRlciwgc2NiKTsKKwkJCWtpb2MJCQk9ICh1aW9jX3QgKilzY2ItPmdwOworCQkJa2lvYy0+c3RhdHVzCQk9IC1FRkFVTFQ7CisKKwkJCW1lZ2FyYWlkX21ib3hfbW1fZG9uZShhZGFwdGVyLCBzY2IpOworCQl9IGVsc2UgeworCQkJaWYgKHNjYi0+c2NwID09IHNjcCkgewkvLyBGb3VuZCBjb21tYW5kCisJCQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKKwkJCQkJIm1lZ2FyYWlkOiAlbGQ6JWRbJWQ6JWRdLCByZXNldCBmcm9tIHBlbmRpbmcgbGlzdFxuIiwKKwkJCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubywKKwkJCQkJc2NiLT5kZXZfY2hhbm5lbCwgc2NiLT5kZXZfdGFyZ2V0KSk7CisJCQl9IGVsc2UgeworCQkJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCisJCQkJIm1lZ2FyYWlkOiBJTyBwYWNrZXQgd2l0aCAlZFslZDolZF0gYmVpbmcgcmVzZXRcbiIsCisJCQkJc2NiLT5zbm8sIHNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOworCQkJfQorCisJCQlzY2ItPnNjcC0+cmVzdWx0ID0gKERJRF9SRVNFVCA8PCAxNik7CisJCQlzY2ItPnNjcC0+c2NzaV9kb25lKHNjYi0+c2NwKTsKKworCQkJbWVnYXJhaWRfZGVhbGxvY19zY2IoYWRhcHRlciwgc2NiKTsKKwkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKFBFTkRJTkdfTElTVF9MT0NLKGFkYXB0ZXIpLCBmbGFncyk7CiAKIAlpZiAoYWRhcHRlci0+b3V0c3RhbmRpbmdfY21kcykgewogCQljb25fbG9nKENMX0FOTiwgKEtFUk5fTk9USUNFCiAJCQkibWVnYXJhaWQ6ICVkIG91dHN0YW5kaW5nIGNvbW1hbmRzLiBNYXggd2FpdCAlZCBzZWNcbiIsCi0JCQlhZGFwdGVyLT5vdXRzdGFuZGluZ19jbWRzLCBNQk9YX1JFU0VUX1dBSVQpKTsKKwkJCWFkYXB0ZXItPm91dHN0YW5kaW5nX2NtZHMsCisJCQkoTUJPWF9SRVNFVF9XQUlUICsgTUJPWF9SRVNFVF9FWFRfV0FJVCkpKTsKIAl9CiAKIAlyZWNvdmVyeV93aW5kb3cgPSBNQk9YX1JFU0VUX1dBSVQgKyBNQk9YX1JFU0VUX0VYVF9XQUlUOwogCiAJcmVjb3ZlcmluZyA9IGFkYXB0ZXItPm91dHN0YW5kaW5nX2NtZHM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcmVjb3Zlcnlfd2luZG93ICYmIGFkYXB0ZXItPm91dHN0YW5kaW5nX2NtZHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByZWNvdmVyeV93aW5kb3c7IGkrKykgewogCiAJCW1lZ2FyYWlkX2Fja19zZXF1ZW5jZShhZGFwdGVyKTsKIApAQCAtMjY4OSwxMiArMjcxMywxMSBAQAogCQkJY29uX2xvZyhDTF9BTk4sICgKIAkJCSJtZWdhcmFpZCBtYm94OiBXYWl0IGZvciAlZCBjb21tYW5kcyB0byBjb21wbGV0ZTolZFxuIiwKIAkJCQlhZGFwdGVyLT5vdXRzdGFuZGluZ19jbWRzLAotCQkJCU1CT1hfUkVTRVRfV0FJVCAtIGkpKTsKKwkJCQkoTUJPWF9SRVNFVF9XQUlUICsgTUJPWF9SRVNFVF9FWFRfV0FJVCkgLSBpKSk7CiAJCX0KIAogCQkvLyBiYWlsb3V0IGlmIG5vIHJlY292ZXJ5IGhhcHBlbmRlZCBpbiByZXNldCB0aW1lCi0JCWlmICgoaSA9PSBNQk9YX1JFU0VUX1dBSVQpICYmCi0JCQkocmVjb3ZlcmluZyA9PSBhZGFwdGVyLT5vdXRzdGFuZGluZ19jbWRzKSkgeworCQlpZiAoYWRhcHRlci0+b3V0c3RhbmRpbmdfY21kcyA9PSAwKSB7CiAJCQlicmVhazsKIAkJfQogCkBAIC0yOTE4LDEyICsyOTQxLDEzIEBACiAJd21iKCk7CiAJV1JJTkRPT1IocmFpZF9kZXYsIHJhaWRfZGV2LT5tYm94X2RtYSB8IDB4MSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMHhGRkZGRjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1CT1hfU1lOQ19XQUlUX0NOVDsgaSsrKSB7CiAJCWlmIChtYm94LT5udW1zdGF0dXMgIT0gMHhGRikgYnJlYWs7CiAJCXJtYigpOworCQl1ZGVsYXkoTUJPWF9TWU5DX0RFTEFZXzIwMCk7CiAJfQogCi0JaWYgKGkgPT0gMHhGRkZGRikgeworCWlmIChpID09IE1CT1hfU1lOQ19XQUlUX0NOVCkgewogCQkvLyBXZSBtYXkgbmVlZCB0byByZS1jYWxpYnJhdGUgdGhlIGNvdW50ZXIKIAkJY29uX2xvZyhDTF9BTk4sIChLRVJOX0NSSVQKIAkJCSJtZWdhcmFpZDogZmFzdCBzeW5jIGNvbW1hbmQgdGltZWQgb3V0XG4iKSk7CkBAIC0zNDc1LDcgKzM0OTksNyBAQAogCWFkcC5kcnZyX2RhdGEJCT0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKIAlhZHAucGRldgkJPSBhZGFwdGVyLT5wZGV2OwogCWFkcC5pc3N1ZV91aW9jCQk9IG1lZ2FyYWlkX21ib3hfbW1faGFuZGxlcjsKLQlhZHAudGltZW91dAkJPSAzMDA7CisJYWRwLnRpbWVvdXQJCT0gTUJPWF9SRVNFVF9XQUlUICsgTUJPWF9SRVNFVF9FWFRfV0FJVDsKIAlhZHAubWF4X2tpb2MJCT0gTUJPWF9NQVhfVVNFUl9DTURTOwogCiAJaWYgKChydmFsID0gbXJhaWRfbW1fcmVnaXN0ZXJfYWRwKCZhZHApKSAhPSAwKSB7CkBAIC0zNzAyLDcgKzM3MjYsNiBAQAogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJa2lvYwkJCT0gKHVpb2NfdCAqKXNjYi0+Z3A7Ci0Ja2lvYy0+c3RhdHVzCQk9IDA7CiAJbWJveDY0CQkJPSAobWJveDY0X3QgKikodW5zaWduZWQgbG9uZylraW9jLT5jbWRidWY7CiAJbWJveDY0LT5tYm94MzIuc3RhdHVzCT0gc2NiLT5zdGF0dXM7CiAJcmF3X21ib3gJCT0gKHVpbnQ4X3QgKikmbWJveDY0LT5tYm94MzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guaAppbmRleCA4ODJmYjFhLi44NjhmYjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmgKQEAgLTIxLDggKzIxLDggQEAKICNpbmNsdWRlICJtZWdhcmFpZF9pb2N0bC5oIgogCiAKLSNkZWZpbmUgTUVHQVJBSURfVkVSU0lPTgkiMi4yMC40LjciCi0jZGVmaW5lIE1FR0FSQUlEX0VYVF9WRVJTSU9OCSIoUmVsZWFzZSBEYXRlOiBNb24gTm92IDE0IDEyOjI3OjIyIEVTVCAyMDA1KSIKKyNkZWZpbmUgTUVHQVJBSURfVkVSU0lPTgkiMi4yMC40LjgiCisjZGVmaW5lIE1FR0FSQUlEX0VYVF9WRVJTSU9OCSIoUmVsZWFzZSBEYXRlOiBNb24gQXByIDExIDEyOjI3OjIyIEVTVCAyMDA2KSIKIAogCiAvKgpAQCAtMTAwLDYgKzEwMCw5IEBACiAjZGVmaW5lIE1CT1hfQlVTWV9XQUlUCQkxMAkvLyBtYXggdXNlYyB0byB3YWl0IGZvciBidXN5IG1haWxib3gKICNkZWZpbmUgTUJPWF9SRVNFVF9XQUlUCQkxODAJLy8gd2FpdCB0aGVzZSBtYW55IHNlY29uZHMgaW4gcmVzZXQKICNkZWZpbmUgTUJPWF9SRVNFVF9FWFRfV0FJVAkxMjAJLy8gZXh0ZW5kZWQgd2FpdCByZXNldAorI2RlZmluZSBNQk9YX1NZTkNfV0FJVF9DTlQJMHhGRkZGCS8vIHdhaXQgbG9vcCBpbmRleCBmb3Igc3luY2hyb25vdXMgbW9kZQorCisjZGVmaW5lIE1CT1hfU1lOQ19ERUxBWV8yMDAJMjAwCS8vIDIwMCBtaWNyby1zZWNvbmRzCiAKIC8qCiAgKiBtYXhpbXVtIHRyYW5zZmVyIHRoYXQgY2FuIGhhcHBlbiB0aHJvdWdoIHRoZSBmaXJtd2FyZSBjb21tYW5kcyBpc3N1ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKaW5kZXggOGYzY2UwNC4uZThmNTM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKQEAgLTg5OCwxMCArODk4LDggQEAKIAogCWFkYXB0ZXIgPSBrbWFsbG9jKHNpemVvZihtcmFpZF9tbWFkcF90KSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJcnZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gbWVtYWxsb2NfZXJyb3I7Ci0JfQorCWlmICghYWRhcHRlcikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAltZW1zZXQoYWRhcHRlciwgMCwgc2l6ZW9mKG1yYWlkX21tYWRwX3QpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKaW5kZXggNTYwOTg0Ny4uZWU0NDliMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCkBAIC04OSwyOSArODksMjkgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiB0eXBlZGVmIHN0cnVjdCBzY3NpX2luZm9fdCB7Ci0gICAgZGV2X2xpbmtfdAkJbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdAkJbm9kZTsKICAgICBzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0OwogfSBzY3NpX2luZm9fdDsKIAotc3RhdGljIHZvaWQgYWhhMTUyeF9yZWxlYXNlX2NzKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIHZvaWQgYWhhMTUyeF9yZWxlYXNlX2NzKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIGFoYTE1MnhfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci1zdGF0aWMgdm9pZCBhaGExNTJ4X2NvbmZpZ19jcyhkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgYWhhMTUyeF9jb25maWdfY3Moc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCi1zdGF0aWMgZGV2X2xpbmtfdCAqZGV2X2xpc3Q7CitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldl9saXN0OwogCi1zdGF0aWMgaW50IGFoYTE1MnhfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYWhhMTUyeF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzY3NpX2luZm9fdCAqaW5mbzsKLSAgICBkZXZfbGlua190ICpsaW5rOwotICAgIAorCiAgICAgREVCVUcoMCwgImFoYTE1MnhfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQ3JlYXRlIG5ldyBTQ1NJIGRldmljZSAqLwogICAgIGluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogICAgIGlmICghaW5mbykgcmV0dXJuIC1FTk9NRU07CiAgICAgbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwotICAgIGxpbmsgPSAmaW5mby0+bGluazsgbGluay0+cHJpdiA9IGluZm87CisgICAgaW5mby0+cF9kZXYgPSBsaW5rOworICAgIGxpbmstPnByaXYgPSBpbmZvOwogCiAgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMHgyMDsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwpAQCAtMTE5LDQxICsxMTksMjIgQEAKICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKICAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgYWhhMTUyeF9jb25maWdfY3MobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWhhMTUyeF9jb25maWdfY3MobGluayk7CiB9IC8qIGFoYTE1MnhfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBhaGExNTJ4X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBhaGExNTJ4X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLSAgICBkZXZfbGlua190ICoqbGlua3A7Ci0KICAgICBERUJVRygwLCAiYWhhMTUyeF9kZXRhY2goMHglcClcbiIsIGxpbmspOwotICAgIAotICAgIC8qIExvY2F0ZSBkZXZpY2Ugc3RydWN0dXJlICovCi0gICAgZm9yIChsaW5rcCA9ICZkZXZfbGlzdDsgKmxpbmtwOyBsaW5rcCA9ICYoKmxpbmtwKS0+bmV4dCkKLQlpZiAoKmxpbmtwID09IGxpbmspIGJyZWFrOwotICAgIGlmICgqbGlua3AgPT0gTlVMTCkKLQlyZXR1cm47CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCWFoYTE1MnhfcmVsZWFzZV9jcyhsaW5rKTsKKyAgICBhaGExNTJ4X3JlbGVhc2VfY3MobGluayk7CiAKICAgICAvKiBVbmxpbmsgZGV2aWNlIHN0cnVjdHVyZSwgZnJlZSBiaXRzICovCi0gICAgKmxpbmtwID0gbGluay0+bmV4dDsKICAgICBrZnJlZShsaW5rLT5wcml2KTsKLSAgICAKIH0gLyogYWhhMTUyeF9kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xNjEsOSArMTQyLDggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgYWhhMTUyeF9jb25maWdfY3MoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYWhhMTUyeF9jb25maWdfY3Moc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IGFoYTE1Mnhfc2V0dXAgczsKICAgICB0dXBsZV90IHR1cGxlOwpAQCAtMTc4LDE5ICsxNTgsMTYgQEAKICAgICB0dXBsZS5UdXBsZURhdGEgPSB0dXBsZV9kYXRhOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB3aGlsZSAoMSkgewotCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDAgfHwKLQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApCisJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKKwkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCSAgICBnb3RvIG5leHRfZW50cnk7CiAJLyogRm9yIE5ldyBNZWRpYSBUJkosIGxvb2sgZm9yIGEgU0NTSSB3aW5kb3cgKi8KIAlpZiAocGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuID49IDB4MjApCkBAIC0yMDEsMTUgKzE3OCwxNSBAQAogCWlmICgocGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5ud2luID4gMCkgJiYKIAkgICAgKGxpbmstPmlvLkJhc2VQb3J0MSA8IDB4ZmZmZikpIHsKIAkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7Ci0JICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsICZsaW5rLT5pbyk7CisJICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKIAl9CiAgICAgbmV4dF9lbnRyeToKLQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogICAgIH0KICAgICAKLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEoaGFuZGxlLCAmbGluay0+aXJxKSk7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCAmbGluay0+Y29uZikpOworICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKICAgICAKICAgICAvKiBTZXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYWhhMTUyeCBkcml2ZXIgKi8KICAgICBtZW1zZXQoJnMsIDAsIHNpemVvZihzKSk7CkBAIC0yMzEsNTMgKzIwOCwzMCBAQAogICAgIH0KIAogICAgIHNwcmludGYoaW5mby0+bm9kZS5kZXZfbmFtZSwgInNjc2klZCIsIGhvc3QtPmhvc3Rfbm8pOwotICAgIGxpbmstPmRldiA9ICZpbmZvLT5ub2RlOworICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAgICAgaW5mby0+aG9zdCA9IGhvc3Q7CiAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIHJldHVybjsKLSAgICAKKyAgICByZXR1cm4gMDsKKwogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKICAgICBhaGExNTJ4X3JlbGVhc2VfY3MobGluayk7Ci0gICAgcmV0dXJuOworICAgIHJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgdm9pZCBhaGExNTJ4X3JlbGVhc2VfY3MoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGFoYTE1MnhfcmVsZWFzZV9jcyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKIAlhaGExNTJ4X3JlbGVhc2UoaW5mby0+aG9zdCk7Ci0JbGluay0+ZGV2ID0gTlVMTDsKLSAgICAKLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIAotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCBhaGExNTJ4X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYWhhMTUyeF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWhhMTUyeF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJYWhhMTUyeF9ob3N0X3Jlc2V0X2hvc3QoaW5mby0+aG9zdCk7Ci0JfQorCWFoYTE1MnhfaG9zdF9yZXNldF9ob3N0KGluZm8tPmhvc3QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTcsMTAgKzI1MSw5IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gImFoYTE1MnhfY3MiLAogCX0sCi0JLnByb2JlCQk9IGFoYTE1MnhfYXR0YWNoLAorCS5wcm9iZQkJPSBhaGExNTJ4X3Byb2JlLAogCS5yZW1vdmUJCT0gYWhhMTUyeF9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gYWhhMTUyeF9pZHMsCi0JLnN1c3BlbmQJPSBhaGExNTJ4X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBhaGExNTJ4X3Jlc3VtZSwKIH07CiAKQEAgLTMxNyw0ICsyNzAsMyBAQAogCiBtb2R1bGVfaW5pdChpbml0X2FoYTE1MnhfY3MpOwogbW9kdWxlX2V4aXQoZXhpdF9haGExNTJ4X2NzKTsKLSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jCmluZGV4IDc4OGM1OGQuLjg1ZjdmZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYwpAQCAtNzMsNTcgKzczLDQ4IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogdHlwZWRlZiBzdHJ1Y3Qgc2NzaV9pbmZvX3QgewotICAgIGRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3QJCW5vZGU7CiAgICAgc3RydWN0IFNjc2lfSG9zdAkqaG9zdDsKIH0gc2NzaV9pbmZvX3Q7CiAKIAotc3RhdGljIHZvaWQgZmRvbWFpbl9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIHZvaWQgZmRvbWFpbl9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIGZkb21haW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci1zdGF0aWMgdm9pZCBmZG9tYWluX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgZmRvbWFpbl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCi1zdGF0aWMgaW50IGZkb21haW5fYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgZmRvbWFpbl9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzY3NpX2luZm9fdCAqaW5mbzsKLSAgICBkZXZfbGlua190ICpsaW5rOworCXNjc2lfaW5mb190ICppbmZvOwogCi0gICAgREVCVUcoMCwgImZkb21haW5fYXR0YWNoKClcbiIpOworCURFQlVHKDAsICJmZG9tYWluX2F0dGFjaCgpXG4iKTsKIAotICAgIC8qIENyZWF0ZSBuZXcgU0NTSSBkZXZpY2UgKi8KLSAgICBpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIWluZm8pIHJldHVybiAtRU5PTUVNOwotICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLSAgICBsaW5rID0gJmluZm8tPmxpbms7IGxpbmstPnByaXYgPSBpbmZvOwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDB4MTA7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDEwOwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKLSAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLSAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKKwkvKiBDcmVhdGUgbmV3IFNDU0kgZGV2aWNlICovCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7CisJaW5mby0+cF9kZXYgPSBsaW5rOworCWxpbmstPnByaXYgPSBpbmZvOworCWxpbmstPmlvLk51bVBvcnRzMSA9IDB4MTA7CisJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDEwOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CisJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisJbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBmZG9tYWluX2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworCXJldHVybiBmZG9tYWluX2NvbmZpZyhsaW5rKTsKIH0gLyogZmRvbWFpbl9hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGZkb21haW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGZkb21haW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotCiAJREVCVUcoMCwgImZkb21haW5fZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCWZkb21haW5fcmVsZWFzZShsaW5rKTsKKwlmZG9tYWluX3JlbGVhc2UobGluayk7CiAKIAlrZnJlZShsaW5rLT5wcml2KTsKIH0gLyogZmRvbWFpbl9kZXRhY2ggKi8KQEAgLTEzMyw5ICsxMjQsOCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBmZG9tYWluX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBmZG9tYWluX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CkBAIC0xNTAsMTAzICsxNDAsNzUgQEAKICAgICB0dXBsZS5UdXBsZURhdGEgPSB0dXBsZV9kYXRhOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0gICAgCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgd2hpbGUgKDEpIHsKLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCXBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKIAkgICAgZ290byBuZXh0X2VudHJ5OwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwogCWxpbmstPmlvLkJhc2VQb3J0MSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2U7Ci0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGhhbmRsZSwgJmxpbmstPmlvKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAlpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKICAgICBuZXh0X2VudHJ5OgotCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgfQogCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgJmxpbmstPmlycSkpOwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKLSAgICAKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisKICAgICAvKiBBIGJhZCBoYWNrLi4uICovCiAgICAgcmVsZWFzZV9yZWdpb24obGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEpOwogCiAgICAgLyogU2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGZkb21haW4gZHJpdmVyICovCiAgICAgc3ByaW50ZihzdHIsICIlZCwlZCIsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKICAgICBmZG9tYWluX3NldHVwKHN0cik7Ci0gICAgCisKICAgICBob3N0ID0gX19mZG9tYWluXzE2eDBfZGV0ZWN0KCZmZG9tYWluX2RyaXZlcl90ZW1wbGF0ZSk7CiAgICAgaWYgKCFob3N0KSB7CiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gImZkb21haW5fY3M6IG5vIFNDU0kgZGV2aWNlcyBmb3VuZFxuIik7CiAJZ290byBjc19mYWlsZWQ7CiAgICAgfQotIAotICAgIHNjc2lfYWRkX2hvc3QoaG9zdCwgTlVMTCk7IC8qIFhYWCBoYW5kbGUgZmFpbHVyZSAqLworCisgICAgaWYgKHNjc2lfYWRkX2hvc3QoaG9zdCwgTlVMTCkpCisJICAgIGdvdG8gY3NfZmFpbGVkOwogICAgIHNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAgICAgc3ByaW50ZihpbmZvLT5ub2RlLmRldl9uYW1lLCAic2NzaSVkIiwgaG9zdC0+aG9zdF9ubyk7Ci0gICAgbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7CisgICAgbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKICAgICBpbmZvLT5ob3N0ID0gaG9zdDsKLSAgICAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIHJldHVybjsKLSAgICAKKworICAgIHJldHVybiAwOworCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogICAgIGZkb21haW5fcmVsZWFzZShsaW5rKTsKLSAgICByZXR1cm47Ci0gICAgCisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIGZkb21haW5fY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBmZG9tYWluX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGZkb21haW5fcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CisJc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0gICAgREVCVUcoMCwgImZkb21haW5fcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJREVCVUcoMCwgImZkb21haW5fcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKLSAgICBzY3NpX3JlbW92ZV9ob3N0KGluZm8tPmhvc3QpOwotICAgIGxpbmstPmRldiA9IE5VTEw7Ci0gICAgCi0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQotICAgIHNjc2lfdW5yZWdpc3RlcihpbmZvLT5ob3N0KTsKLQotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXNjc2lfcmVtb3ZlX2hvc3QoaW5mby0+aG9zdCk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCXNjc2lfdW5yZWdpc3RlcihpbmZvLT5ob3N0KTsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZmRvbWFpbl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGZkb21haW5fcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZkb21haW5fcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJZmRvbWFpbl8xNngwX2J1c19yZXNldChOVUxMKTsKLQl9CisJZmRvbWFpbl8xNngwX2J1c19yZXNldChOVUxMKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjY0LDEwICsyMjYsOSBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJmZG9tYWluX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBmZG9tYWluX2F0dGFjaCwKKwkucHJvYmUJCT0gZmRvbWFpbl9wcm9iZSwKIAkucmVtb3ZlCQk9IGZkb21haW5fZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IGZkb21haW5faWRzLAotCS5zdXNwZW5kCT0gZmRvbWFpbl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gZmRvbWFpbl9yZXN1bWUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwppbmRleCA5ZTNhYjNmLi4yMzFmOWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKQEAgLTE1OTMsMTEgKzE1OTMsMTEgQEAKICAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQogICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IG5zcF9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBuc3BfY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc2NzaV9pbmZvX3QgICppbmZvOwotCWRldl9saW5rX3QgICAqbGluazsKIAluc3BfaHdfZGF0YSAgKmRhdGEgPSAmbnNwX2RhdGFfYmFzZTsKKwlpbnQgcmV0OwogCiAJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgImluIik7CiAKQEAgLTE2MDUsNyArMTYwNSw3IEBACiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8gPT0gTlVMTCkgeyByZXR1cm4gLUVOT01FTTsgfQogCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQlsaW5rID0gJmluZm8tPmxpbms7CisJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwogCWRhdGEtPlNjc2lJbmZvID0gaW5mbzsKIApAQCAtMTYyNywxOCArMTYyNywxMyBAQAogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogCWxpbmstPmNvbmYuQXR0cmlidXRlcwkgPSBDT05GX0VOQUJMRV9JUlE7Ci0JbGluay0+Y29uZi5WY2MJCSA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZQkgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLlByZXNlbnQJID0gUFJFU0VOVF9PUFRJT047CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0JbnNwX2NzX2NvbmZpZyhsaW5rKTsKKwlyZXQgPSBuc3BfY3NfY29uZmlnKGxpbmspOwogCiAJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgImxpbms9MHglcCIsIGxpbmspOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9IC8qIG5zcF9jc19hdHRhY2ggKi8KIAogCkBAIC0xNjQ4LDE2ICsxNjQzLDEyIEBACiAgICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKICAgICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIG5zcF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgbnNwX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJpbiwgbGluaz0weCVwIiwgbGluayk7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCSgoc2NzaV9pbmZvX3QgKilsaW5rLT5wcml2KS0+c3RvcCA9IDE7Ci0JCW5zcF9jc19yZWxlYXNlKGxpbmspOwotCX0KKwkoKHNjc2lfaW5mb190ICopbGluay0+cHJpdiktPnN0b3AgPSAxOworCW5zcF9jc19yZWxlYXNlKGxpbmspOwogCiAJa2ZyZWUobGluay0+cHJpdik7CiAJbGluay0+cHJpdiA9IE5VTEw7CkBAIC0xNjcyLDkgKzE2NjMsOSBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCBuc3BfY3NfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IG5zcF9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90CSAgaGFuZGxlID0gbGluay0+aGFuZGxlOworCWludAkJICByZXQ7CiAJc2NzaV9pbmZvX3QJICppbmZvCSA9IGxpbmstPnByaXY7CiAJdHVwbGVfdAkJICB0dXBsZTsKIAljaXNwYXJzZV90CSAgcGFyc2U7CkBAIC0xNjk4LDI2ICsxNjg5LDIyIEBACiAJdHVwbGUuVHVwbGVEYXRhCSAgICAgID0gdHVwbGVfZGF0YTsKIAl0dXBsZS5UdXBsZURhdGFNYXggICAgPSBzaXplb2YodHVwbGVfZGF0YSk7CiAJdHVwbGUuVHVwbGVPZmZzZXQgICAgID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLAlwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLAlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLAlwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ICAgID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZQkgICAgICB8PSBERVZfQ09ORklHOwotCiAJLyogTG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KLQlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotCWxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7CisJQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25mKSk7CiAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl3aGlsZSAoMSkgewogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwogCi0JCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDAgfHwKLQkJCQlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKKwkJCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCiAJCQlnb3RvIG5leHRfZW50cnk7CiAKIAkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKSB7IGRmbHQgPSAqY2ZnOyB9CkBAIC0xNzQzLDEwICsxNzMwLDEwIEBACiAJCX0KIAogCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQl9IGVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorCQkJbGluay0+Y29uZi5WcHAgPQogCQkJCWRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKIAkJfQogCkBAIC0xNzczLDcgKzE3NjAsNyBAQAogCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwogCQkJfQogCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykgIT0gMCkKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCiAJCQkJZ290byBuZXh0X2VudHJ5OwogCQl9CiAKQEAgLTE3ODgsNyArMTc3NSw3IEBACiAJCQkJcmVxLlNpemUgPSAweDEwMDA7CiAJCQl9CiAJCQlyZXEuQWNjZXNzU3BlZWQgPSAwOwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQorCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAJCQltYXAuUGFnZSA9IDA7IG1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwogCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWFwKSAhPSAwKQpAQCAtMTgwMiwxNyArMTc4OSwxNCBAQAogCiAJbmV4dF9lbnRyeToKIAkJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgIm5leHQiKTsKLQotCQlpZiAobGluay0+aW8uTnVtUG9ydHMxKSB7Ci0JCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JCX0KLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwkJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl9CiAKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7Ci0JCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKwkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAl9Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCAmbGluay0+Y29uZikpOworCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIAlpZiAoZnJlZV9wb3J0cykgewogCQlpZiAobGluay0+aW8uQmFzZVBvcnQxKSB7CkBAIC0xODU0LDE2ICsxODM4LDE5IEBACiAKIAogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDc0KSkKLQlzY3NpX2FkZF9ob3N0IChob3N0LCBOVUxMKTsKKwlyZXQgPSBzY3NpX2FkZF9ob3N0IChob3N0LCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGNzX2ZhaWxlZDsKKwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAJc25wcmludGYoaW5mby0+bm9kZS5kZXZfbmFtZSwgc2l6ZW9mKGluZm8tPm5vZGUuZGV2X25hbWUpLCAic2NzaSVkIiwgaG9zdC0+aG9zdF9ubyk7Ci0JbGluay0+ZGV2ICA9ICZpbmZvLT5ub2RlOworCWxpbmstPmRldl9ub2RlICA9ICZpbmZvLT5ub2RlOwogCWluZm8tPmhvc3QgPSBob3N0OwogCiAjZWxzZQogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJHRVRfU0NTSV9JTkZPIik7Ci0JdGFpbCA9ICZsaW5rLT5kZXY7CisJdGFpbCA9ICZsaW5rLT5kZXZfbm9kZTsKIAlpbmZvLT5uZGV2ID0gMDsKIAogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJob3N0PTB4JXAiLCBob3N0KTsKQEAgLTE5MDgsMTEgKzE4OTUsMTAgQEAKICNlbmRpZgogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0lORk8gIm5zcF9jczogaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAotCSAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4LAotCSAgICAgICBsaW5rLT5jb25mLlZjYy8xMCwgbGluay0+Y29uZi5WY2MlMTApOwotCWlmIChsaW5rLT5jb25mLlZwcDEpIHsKLQkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwMS8xMCwgbGluay0+Y29uZi5WcHAxJTEwKTsKKwlwcmludGsoS0VSTl9JTkZPICJuc3BfY3M6IGluZGV4IDB4JTAyeDogIiwKKwkgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuVnBwKSB7CisJCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcC8xMCwgbGluay0+Y29uZi5WcHAlMTApOwogCX0KIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CiAJCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwpAQCAtMTkyOSwxNSArMTkxNSwxNCBAQAogCQkgICAgICAgcmVxLkJhc2UrcmVxLlNpemUtMSk7CiAJcHJpbnRrKCJcbiIpOwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6CiAJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgImNvbmZpZyBmYWlsIik7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCW5zcF9jc19yZWxlYXNlKGxpbmspOwogCi0JcmV0dXJuOworCXJldHVybiAtRU5PREVWOwogfSAvKiBuc3BfY3NfY29uZmlnICovCiAjdW5kZWYgQ1NfQ0hFQ0sKIApAQCAtMTk0Nyw3ICsxOTMyLDcgQEAKICAgICBkZXZpY2UsIGFuZCByZWxlYXNlIHRoZSBQQ01DSUEgY29uZmlndXJhdGlvbi4gIElmIHRoZSBkZXZpY2UgaXMKICAgICBzdGlsbCBvcGVuLCB0aGlzIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgbnNwX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIG5zcF9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAluc3BfaHdfZGF0YSAqZGF0YSA9IE5VTEw7CkBAIC0xOTY4LDIyICsxOTUzLDE1IEBACiAjZWxzZQogCXNjc2lfdW5yZWdpc3Rlcl9ob3N0KCZuc3BfZHJpdmVyX3RlbXBsYXRlKTsKICNlbmRpZgotCWxpbmstPmRldiA9IE5VTEw7CisJbGluay0+ZGV2X25vZGUgPSBOVUxMOwogCiAJaWYgKGxpbmstPndpbikgewogCQlpZiAoZGF0YSAhPSBOVUxMKSB7CiAJCQlpb3VubWFwKCh2b2lkICopKGRhdGEtPk1taW9BZGRyZXNzKSk7CiAJCX0KLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7CiAJfQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKSB7Ci0JCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQl9Ci0JaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSkgewotCQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQl9Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMikpCiAJaWYgKGluZm8tPmhvc3QgIT0gTlVMTCkgewogCQlzY3NpX2hvc3RfcHV0KGluZm8tPmhvc3QpOwpAQCAtMTk5MSwxNCArMTk2OSwxMSBAQAogI2VuZGlmCiB9IC8qIG5zcF9jc19yZWxlYXNlICovCiAKLXN0YXRpYyBpbnQgbnNwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbnNwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAluc3BfaHdfZGF0YSAqZGF0YTsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCiAJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgImV2ZW50OiBzdXNwZW5kIik7CiAKIAlpZiAoaW5mby0+aG9zdCAhPSBOVUxMKSB7CkBAIC0yMDExLDI1ICsxOTg2LDE2IEBACiAKIAlpbmZvLT5zdG9wID0gMTsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5zcF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbnNwX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCW5zcF9od19kYXRhICpkYXRhOwogCiAJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgImV2ZW50OiByZXN1bWUiKTsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KIAlpbmZvLT5zdG9wID0gMDsKIAogCWlmIChpbmZvLT5ob3N0ICE9IE5VTEwpIHsKQEAgLTIwNjUsNyArMjAzMSw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gIm5zcF9jcyIsCiAJfSwKLQkucHJvYmUJCT0gbnNwX2NzX2F0dGFjaCwKKwkucHJvYmUJCT0gbnNwX2NzX3Byb2JlLAogCS5yZW1vdmUJCT0gbnNwX2NzX2RldGFjaCwKIAkuaWRfdGFibGUJPSBuc3BfY3NfaWRzLAogCS5zdXNwZW5kCT0gbnNwX2NzX3N1c3BlbmQsCkBAIC0yMDk4LDE5ICsyMDY0LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuc3BfY3NfZXhpdCh2b2lkKQogewogCW5zcF9tc2coS0VSTl9JTkZPLCAidW5sb2FkaW5nLi4uIik7Ci0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSw2OCkpCiAJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZuc3BfZHJpdmVyKTsKLSNlbHNlCi0JdW5yZWdpc3Rlcl9wY21jaWFfZHJpdmVyKCZkZXZfaW5mbyk7Ci0JLyogWFhYOiB0aGlzIHJlYWxseSBuZWVkcyB0byBtb3ZlIGludG8gZ2VuZXJpYyBjb2RlLi4gKi8KLQl3aGlsZSAoZGV2X2xpc3QgIT0gTlVMTCkgewotCQlpZiAoZGV2X2xpc3QtPnN0YXRlICYgREVWX0NPTkZJRykgewotCQkJbnNwX2NzX3JlbGVhc2UoZGV2X2xpc3QpOwotCQl9Ci0JCW5zcF9jc19kZXRhY2goZGV2X2xpc3QpOwotCX0KLSNlbmRpZgogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmggYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oCmluZGV4IGI2NmIxNDAuLjg5MDhiOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmgKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuaApAQCAtMjI1LDcgKzIyNSw3IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogdHlwZWRlZiBzdHJ1Y3Qgc2NzaV9pbmZvX3QgewotCWRldl9saW5rX3QgICAgICAgICAgICAgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJc3RydWN0IFNjc2lfSG9zdCAgICAgICpob3N0OwogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDc0KSkKIAlkZXZfbm9kZV90ICAgICAgICAgICAgIG5vZGU7CkBAIC0yOTcsOCArMjk3LDggQEAKIAogLyogQ2FyZCBzZXJ2aWNlIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgICAgICAgIG5zcF9jc19kZXRhY2ggKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci1zdGF0aWMgdm9pZCAgICAgICAgbnNwX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCAgICAgICAgbnNwX2NzX2NvbmZpZyAoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgdm9pZCAgICAgICAgbnNwX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIGludCAgICAgICAgbnNwX2NzX2NvbmZpZyAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiAvKiBMaW51eCBTQ1NJIHN1YnN5c3RlbSBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpuc3BfZGV0ZWN0ICAgICAoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCXJldHVybiBob3N0OwogfQogCi1zdGF0aWMgdm9pZCBjc19lcnJvcihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZnVuYywgaW50IHJldCkKK3N0YXRpYyB2b2lkIGNzX2Vycm9yKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIGludCBmdW5jLCBpbnQgcmV0KQogewogCWVycm9yX2luZm9fdCBlcnIgPSB7IGZ1bmMsIHJldCB9OwogCXBjbWNpYV9yZXBvcnRfZXJyb3IoaGFuZGxlLCAmZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYwppbmRleCBkY2U3ZTY4Li44NmMyYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCkBAIC05MSwxOCArOTEsMTggQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiB0eXBlZGVmIHN0cnVjdCBzY3NpX2luZm9fdCB7Ci0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAl1bnNpZ25lZCBzaG9ydCBtYW5mX2lkOwogfSBzY3NpX2luZm9fdDsKIAotc3RhdGljIHZvaWQgcWxvZ2ljX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgdm9pZCBxbG9naWNfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBxbG9naWNfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci1zdGF0aWMgdm9pZCBxbG9naWNfY29uZmlnKGRldl9saW5rX3QgKiBsaW5rKTsKK3N0YXRpYyBpbnQgcWxvZ2ljX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspOwogCiBzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqcWxvZ2ljX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0LAotCQkJCWRldl9saW5rX3QgKmxpbmssIGludCBxYmFzZSwgaW50IHFsaXJxKQorCQkJCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgcWJhc2UsIGludCBxbGlycSkKIHsKIAlpbnQgcWx0eXA7CQkvKiB0eXBlIG9mIGNoaXAgKi8KIAlpbnQgcWluaXRpZDsKQEAgLTE1NiwxMCArMTU2LDkgQEAKIGVycjoKIAlyZXR1cm4gTlVMTDsKIH0KLXN0YXRpYyBpbnQgcWxvZ2ljX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHFsb2dpY19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzY3NpX2luZm9fdCAqaW5mbzsKLQlkZXZfbGlua190ICpsaW5rOwogCiAJREVCVUcoMCwgInFsb2dpY19hdHRhY2goKVxuIik7CiAKQEAgLTE2OCw3ICsxNjcsNyBAQAogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwotCWxpbmsgPSAmaW5mby0+bGluazsKKwlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87CiAJbGluay0+aW8uTnVtUG9ydHMxID0gMTY7CiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKQEAgLTE3NiwzMCArMTc1LDE5IEBACiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXFsb2dpY19jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcWxvZ2ljX2NvbmZpZyhsaW5rKTsKIH0JCQkJLyogcWxvZ2ljX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgcWxvZ2ljX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBxbG9naWNfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotCiAJREVCVUcoMCwgInFsb2dpY19kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcWxvZ2ljX3JlbGVhc2UobGluayk7Ci0KKwlxbG9naWNfcmVsZWFzZShsaW5rKTsKIAlrZnJlZShsaW5rLT5wcml2KTsKIAogfQkJCQkvKiBxbG9naWNfZGV0YWNoICovCkBAIC0yMDksOSArMTk3LDggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgcWxvZ2ljX2NvbmZpZyhkZXZfbGlua190ICogbGluaykKK3N0YXRpYyBpbnQgcWxvZ2ljX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJdHVwbGVfdCB0dXBsZTsKIAljaXNwYXJzZV90IHBhcnNlOwpAQCAtMjI1LDM4ICsyMTIsMzUgQEAKIAl0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwotCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgJiYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykpCisJaWYgKChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgJiYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpKQogCQlpbmZvLT5tYW5mX2lkID0gbGUxNl90b19jcHUodHVwbGUuVHVwbGVEYXRhWzBdKTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXdoaWxlICgxKSB7Ci0JCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDAgfHwKLQkJCQlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKKwkJCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCiAJCQlnb3RvIG5leHRfZW50cnk7CiAJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwogCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5iYXNlOwogCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5sZW47CiAJCWlmIChsaW5rLT5pby5CYXNlUG9ydDEgIT0gMCkgewotCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGhhbmRsZSwgJmxpbmstPmlvKTsKKwkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCQlicmVhazsKIAkJfQogCSAgICAgIG5leHRfZW50cnk6Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCX0KIAotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShoYW5kbGUsICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsICZsaW5rLT5jb25mKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJaWYgKChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9NQUNOSUNBKSB8fCAoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfUElPTkVFUikgfHwgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgewogCQkvKiBzZXQgQVRBY21kICovCkBAIC0yNzUsODIgKzI1OSw1NCBAQAogCQogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gU0NTSSBkZXZpY2VzIGZvdW5kXG4iLCBxbG9naWNfbmFtZSk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGNzX2ZhaWxlZDsKIAl9CiAKIAlzcHJpbnRmKGluZm8tPm5vZGUuZGV2X25hbWUsICJzY3NpJWQiLCBob3N0LT5ob3N0X25vKTsKLQlsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwogCWluZm8tPmhvc3QgPSBob3N0OwogCi1vdXQ6Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKLQlsaW5rLT5kZXYgPSBOVUxMOwotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7Ci0JcmV0dXJuOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiAKIH0JCQkJLyogcWxvZ2ljX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgcWxvZ2ljX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHFsb2dpY19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICJxbG9naWNfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGluZm8tPmhvc3QpOwotCWxpbmstPmRldiA9IE5VTEw7CiAKIAlmcmVlX2lycShsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGluZm8tPmhvc3QpOwotCi0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAKIAlzY3NpX2hvc3RfcHV0KGluZm8tPmhvc3QpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHFsb2dpY19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHFsb2dpY19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOworCXNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFsb2dpY19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0KLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJaWYgKChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9NQUNOSUNBKSB8fAotCQkgICAgKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX1BJT05FRVIpIHx8Ci0JCSAgICAoaW5mby0+bWFuZl9pZCA9PSAweDAwOTgpKSB7Ci0JCQlvdXRiKDB4ODAsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7Ci0JCQlvdXRiKDB4MjQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4OSk7Ci0JCQlvdXRiKDB4MDQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7Ci0JCX0KLQkJLyogVWdnZ2dsbGx5eXl5ISEhICovCi0JCXFsb2dpY2ZhczQwOF9idXNfcmVzZXQoTlVMTCk7CisJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9NQUNOSUNBKSB8fAorCSAgICAoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfUElPTkVFUikgfHwKKwkgICAgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgeworCQlvdXRiKDB4ODAsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7CisJCW91dGIoMHgyNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHg5KTsKKwkJb3V0YigweDA0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOwogCX0KKwkvKiBVZ2dnZ2xsbHl5eXkhISEgKi8KKwlxbG9naWNmYXM0MDhfYnVzX3Jlc2V0KE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zODIsMTAgKzMzOCw5IEBACiAJLmRydgkJPSB7CiAJLm5hbWUJCT0gInFsb2dpY19jcyIsCiAJfSwKLQkucHJvYmUJCT0gcWxvZ2ljX2F0dGFjaCwKKwkucHJvYmUJCT0gcWxvZ2ljX3Byb2JlLAogCS5yZW1vdmUJCT0gcWxvZ2ljX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBxbG9naWNfaWRzLAotCS5zdXNwZW5kCT0gcWxvZ2ljX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBxbG9naWNfcmVzdW1lLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKaW5kZXggM2E0ZGQ2Zi4uOWY1OTgyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiBzdHJ1Y3Qgc2NzaV9pbmZvX3QgewotCWRldl9saW5rX3QgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJZGV2X25vZGVfdCBub2RlOwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJdW5zaWduZWQgc2hvcnQgbWFuZl9pZDsKQEAgLTUyNyw3ICs1MjcsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotU1lNNTNDNTAwX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK1NZTTUzQzUwMF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpbmZvLT5ob3N0OwpAQCAtNTUwLDEzICs1NTAsNyBAQAogCWlmIChzaG9zdC0+aW9fcG9ydCAmJiBzaG9zdC0+bl9pb19wb3J0KQogCQlyZWxlYXNlX3JlZ2lvbihzaG9zdC0+aW9fcG9ydCwgc2hvc3QtPm5faW9fcG9ydCk7CiAKLQlsaW5rLT5kZXYgPSBOVUxMOwotCi0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAogCXNjc2lfaG9zdF9wdXQoc2hvc3QpOwogfSAvKiBTWU01M0M1MDBfcmVsZWFzZSAqLwpAQCAtNzEzLDEwICs3MDcsOSBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZAotU1lNNTNDNTAwX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludAorU1lNNTNDNTAwX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCXN0cnVjdCBzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJdHVwbGVfdCB0dXBsZTsKIAljaXNwYXJzZV90IHBhcnNlOwpAQCAtNzMzLDQwICs3MjYsMzcgQEAKIAl0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwotCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgJiYKLQkgICAgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykpCisJaWYgKChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgJiYKKwkgICAgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpKQogCQlpbmZvLT5tYW5mX2lkID0gbGUxNl90b19jcHUodHVwbGUuVHVwbGVEYXRhWzBdKTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXdoaWxlICgxKSB7Ci0JCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDAgfHwKLQkJICAgIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAorCQkgICAgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pbmRleDsKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0uYmFzZTsKIAkJbGluay0+aW8uTnVtUG9ydHMxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuOwogCiAJCWlmIChsaW5rLT5pby5CYXNlUG9ydDEgIT0gMCkgewotCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGhhbmRsZSwgJmxpbmstPmlvKTsKKwkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCQlicmVhazsKIAkJfQogbmV4dF9lbnRyeToKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJfQogCi0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgJmxpbmstPmlycSkpOwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIAkvKgogCSogIFRoYXQncyB0aGUgdHJvdWJsZSB3aXRoIGNvcHlpbmcgbGliZXJhbGx5IGZyb20gYW5vdGhlciBkcml2ZXIuCkBAIC04MzUsNyArODI1LDcgQEAKIAlkYXRhLT5mYXN0X3BpbyA9IFVTRV9GQVNUX1BJTzsKIAogCXNwcmludGYoaW5mby0+bm9kZS5kZXZfbmFtZSwgInNjc2klZCIsIGhvc3QtPmhvc3Rfbm8pOwotCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlOworCWxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAJaW5mby0+aG9zdCA9IGhvc3Q7CiAKIAlpZiAoc2NzaV9hZGRfaG9zdChob3N0LCBOVUxMKSkKQEAgLTg0Myw3ICs4MzMsNyBAQAogCiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKLQlnb3RvIG91dDsJLyogU1VDQ0VTUyAqLworCXJldHVybiAwOwogCiBlcnJfZnJlZV9pcnE6CiAJZnJlZV9pcnEoaXJxX2xldmVsLCBob3N0KTsKQEAgLTg1Miw3NCArODQyLDUwIEBACiBlcnJfcmVsZWFzZToKIAlyZWxlYXNlX3JlZ2lvbihwb3J0X2Jhc2UsIDB4MTApOwogCXByaW50ayhLRVJOX0lORk8gInN5bTUzYzUwMF9jczogbm8gU0NTSSBkZXZpY2VzIGZvdW5kXG4iKTsKLQotb3V0OgotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0JcmV0dXJuOworCXJldHVybiAtRU5PREVWOwogCiBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCVNZTTUzQzUwMF9yZWxlYXNlKGxpbmspOwotCXJldHVybjsKKwlyZXR1cm4gLUVOT0RFVjsKIH0gLyogU1lNNTNDNTAwX2NvbmZpZyAqLwogCi1zdGF0aWMgaW50IHN5bTUzYzUwMF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHN5bTUzYzUwMF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3ltNTNjNTAwX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKIAlzdHJ1Y3Qgc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQotCQkvKiBTZWUgZWFybGllciBjb21tZW50IGFib3V0IG1hbnVmYWN0dXJlciBJRHMuICovCi0JCWlmICgoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfTUFDTklDQSkgfHwKLQkJICAgIChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9QSU9ORUVSKSB8fAotCQkgICAgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgewotCQkJb3V0YigweDgwLCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOwotCQkJb3V0YigweDI0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDkpOwotCQkJb3V0YigweDA0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOwotCQl9Ci0JCS8qCi0JCSAqICBJZiB0aGluZ3MgZG9uJ3Qgd29yayBhZnRlciBhICJyZXN1bWUiLAotCQkgKiAgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4KLQkJICovCi0JCVNZTTUzQzUwMF9pbnRfaG9zdF9yZXNldChsaW5rLT5pby5CYXNlUG9ydDEpOworCS8qIFNlZSBlYXJsaWVyIGNvbW1lbnQgYWJvdXQgbWFudWZhY3R1cmVyIElEcy4gKi8KKwlpZiAoKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX01BQ05JQ0EpIHx8CisJICAgIChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9QSU9ORUVSKSB8fAorCSAgICAoaW5mby0+bWFuZl9pZCA9PSAweDAwOTgpKSB7CisJCW91dGIoMHg4MCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHhkKTsKKwkJb3V0YigweDI0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDkpOworCQlvdXRiKDB4MDQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7CiAJfQorCS8qCisJICogIElmIHRoaW5ncyBkb24ndCB3b3JrIGFmdGVyIGEgInJlc3VtZSIsCisJICogIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCisJICovCisJU1lNNTNDNTAwX2ludF9ob3N0X3Jlc2V0KGxpbmstPmlvLkJhc2VQb3J0MSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLVNZTTUzQzUwMF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorU1lNNTNDNTAwX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCURFQlVHKDAsICJTWU01M0M1MDBfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCVNZTTUzQzUwMF9yZWxlYXNlKGxpbmspOworCVNZTTUzQzUwMF9yZWxlYXNlKGxpbmspOwogCiAJa2ZyZWUobGluay0+cHJpdik7CiAJbGluay0+cHJpdiA9IE5VTEw7CiB9IC8qIFNZTTUzQzUwMF9kZXRhY2ggKi8KIAogc3RhdGljIGludAotU1lNNTNDNTAwX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitTWU01M0M1MDBfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHNjc2lfaW5mb190ICppbmZvOwotCWRldl9saW5rX3QgKmxpbms7CiAKIAlERUJVRygwLCAiU1lNNTNDNTAwX2F0dGFjaCgpXG4iKTsKIApAQCAtOTI4LDcgKzg5NCw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0JbGluayA9ICZpbmZvLT5saW5rOworCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwpAQCAtOTM2LDE3ICs5MDIsMTAgQEAKIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotCWxpbmstPmNvbmYuVmNjID0gNTA7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0JU1lNNTNDNTAwX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBTWU01M0M1MDBfY29uZmlnKGxpbmspOwogfSAvKiBTWU01M0M1MDBfYXR0YWNoICovCiAKIE1PRFVMRV9BVVRIT1IoIkJvYiBUcmFjeSA8cmN0QGZydXMuY29tPiIpOwpAQCAtOTY2LDEwICs5MjUsOSBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJzeW01M2M1MDBfY3MiLAogCX0sCi0JLnByb2JlCQk9IFNZTTUzQzUwMF9hdHRhY2gsCisJLnByb2JlCQk9IFNZTTUzQzUwMF9wcm9iZSwKIAkucmVtb3ZlCQk9IFNZTTUzQzUwMF9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gc3ltNTNjNTAwX2lkcywKLQkuc3VzcGVuZAk9IHN5bTUzYzUwMF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc3ltNTNjNTAwX3Jlc3VtZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKaW5kZXggM2M4NWM0Yi4uNWNkYTE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKQEAgLTE0Myw3ICsxNDMsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcHBhLmMgYi9kcml2ZXJzL3Njc2kvcHBhLmMKaW5kZXggZmVlODQzZi4uMTA4OTEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BwYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wcGEuYwpAQCAtOTgyLDYgKzk4MiwxMiBAQAogCXJldHVybiAtRU5PREVWOwogfQogCitzdGF0aWMgaW50IHBwYV9hZGp1c3RfcXVldWUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UpCit7CisJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChkZXZpY2UtPnJlcXVlc3RfcXVldWUsIEJMS19CT1VOQ0VfSElHSCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBwYV90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkucHJvY19uYW1lCQk9ICJwcGEiLApAQCAtOTk3LDYgKzEwMDMsNyBAQAogCS5jbWRfcGVyX2x1bgkJPSAxLAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuY2FuX3F1ZXVlCQk9IDEsCisJLnNsYXZlX2FsbG9jCQk9IHBwYV9hZGp1c3RfcXVldWUsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDAxNzcyOWMuLjU4NGZlNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC01OTksNiArNTk5LDcgQEAKICogICAgRWl0aGVyIFNVQ0NFU1Mgb3IgRkFJTEVELgogKgogKiBOb3RlOgorKiAgICBPbmx5IHJldHVybiBGQUlMRUQgaWYgY29tbWFuZCBub3QgcmV0dXJuZWQgYnkgZmlybXdhcmUuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludAogcWxhMnh4eF9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCkBAIC02MDksMTEgKzYxMCwxMiBAQAogCXVuc2lnbmVkIGludCBpZCwgbHVuOwogCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHdhaXQgPSAwOwogCiAJaWYgKCFDTURfU1AoY21kKSkKLQkJcmV0dXJuIEZBSUxFRDsKKwkJcmV0dXJuIFNVQ0NFU1M7CiAKLQlyZXQgPSBGQUlMRUQ7CisJcmV0ID0gU1VDQ0VTUzsKIAogCWlkID0gY21kLT5kZXZpY2UtPmlkOwogCWx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CkBAIC02NDIsNyArNjQ0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCURFQlVHMyhwcmludGsoIiVzKCVsZCk6IGFib3J0X2NvbW1hbmQgIgogCQkJICAgICJtYnggc3VjY2Vzcy5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwotCQkJcmV0ID0gU1VDQ0VTUzsKKwkJCXdhaXQgPSAxOwogCQl9CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCkBAIC02NTEsMTcgKzY1MywxOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIAkvKiBXYWl0IGZvciB0aGUgY29tbWFuZCB0byBiZSByZXR1cm5lZC4gKi8KLQlpZiAocmV0ID09IFNVQ0NFU1MpIHsKKwlpZiAod2FpdCkgewogCQlpZiAocWxhMngwMF9laF93YWl0X29uX2NvbW1hbmQoaGEsIGNtZCkgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAogCQkJICAgICJzY3NpKCVsZDolZDolZCk6IEFib3J0IGhhbmRsZXIgdGltZWQgb3V0IC0tICVseCAiCiAJCQkgICAgIiV4LlxuIiwgaGEtPmhvc3Rfbm8sIGlkLCBsdW4sIHNlcmlhbCwgcmV0KTsKKwkJCXJldCA9IEZBSUxFRDsKIAkJfQogCX0KIAogCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgInNjc2koJWxkOiVkOiVkKTogQWJvcnQgY29tbWFuZCBpc3N1ZWQgLS0gJWx4ICV4LlxuIiwgaGEtPmhvc3Rfbm8sCi0JICAgIGlkLCBsdW4sIHNlcmlhbCwgcmV0KTsKKwkgICAgInNjc2koJWxkOiVkOiVkKTogQWJvcnQgY29tbWFuZCBpc3N1ZWQgLS0gJWQgJWx4ICV4LlxuIiwKKwkgICAgaGEtPmhvc3Rfbm8sIGlkLCBsdW4sIHdhaXQsIHNlcmlhbCwgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNzAwLDggKzE3MDMsOCBAQAogCWhhLT5mbGFncy5vbmxpbmUgPSAwOwogCiAJLyogRGV0YWNoIGludGVycnVwdHMgKi8KLQlpZiAoaGEtPnBkZXYtPmlycSkKLQkJZnJlZV9pcnEoaGEtPnBkZXYtPmlycSwgaGEpOworCWlmIChoYS0+aG9zdC0+aXJxKQorCQlmcmVlX2lycShoYS0+aG9zdC0+aXJxLCBoYSk7CiAKIAkvKiByZWxlYXNlIGlvIHNwYWNlIHJlZ2lzdGVycyAgKi8KIAlpZiAoaGEtPmlvYmFzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbG9naWNmYy5jIGIvZHJpdmVycy9zY3NpL3Fsb2dpY2ZjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYjIyNGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL3Fsb2dpY2ZjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjI4ICswLDAgQEAKLS8qCi0gKiBRTG9naWMgSVNQMngwMCBTQ1NJLUZDUAotICogV3JpdHRlbiBieSBFcmlrIEguIE1vZSwgZWhtQGNyaXMuY29tCi0gKiBDb3B5cmlnaHQgMTk5NSwgRXJpayBILiBNb2UKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotLyogUmVuYW1lZCBhbmQgdXBkYXRlZCB0byAxLjMueCBieSBNaWNoYWVsIEdyaWZmaXRoIDxncmlmQGNzLnVjci5lZHU+ICovCi0KLS8qIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHRoZSBpc3AxMDIwIGRyaXZlciB3aGljaCB3YXMgbW9kaWZpZWQgYnkKLSAqIENocmlzIExvdmVsYW5kIDxjd2xAaW9sLnVuaC5lZHU+IHRvIHN1cHBvcnQgdGhlIGlzcDIxMDAgYW5kIGlzcDIyMDAKLSAqCi0gKiBCaWcgZW5kaWFuIHN1cHBvcnQgYW5kIGR5bmFtaWMgRE1BIG1hcHBpbmcgYWRkZWQKLSAqIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+LgotICoKLSAqIENvbnZlcnNpb24gdG8gZmluYWwgcGNpNjQgRE1BIGludGVyZmFjZXMKLSAqIGJ5IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4uCi0gKi8KLQotLyoKLSAqICREYXRlOiAxOTk1LzA5LzIyIDAyOjIzOjE1ICQKLSAqICRSZXZpc2lvbjogMC41ICQKLSAqCi0gKiAkTG9nOiBpc3AxMDIwLmMsdiAkCi0gKiBSZXZpc2lvbiAwLjUgIDE5OTUvMDkvMjIgIDAyOjIzOjE1ICByb290Ci0gKiBkbyBhdXRvIHJlcXVlc3Qgc2Vuc2UKLSAqCi0gKiBSZXZpc2lvbiAwLjQgIDE5OTUvMDgvMDcgIDA0OjQ0OjMzICByb290Ci0gKiBzdXBwbHkgZmlybXdhcmUgd2l0aCBkcml2ZXIuCi0gKiBudW1lcm91cyBidWcgZml4ZXMvZ2VuZXJhbCBjbGVhbnVwIG9mIGNvZGUuCi0gKgotICogUmV2aXNpb24gMC4zICAxOTk1LzA3LzE2ICAxNjoxNTozOSAgcm9vdAotICogYWRkZWQgcmVzZXQvYWJvcnQgY29kZS4KLSAqCi0gKiBSZXZpc2lvbiAwLjIgIDE5OTUvMDYvMjkgIDAzOjE0OjE5ICByb290Ci0gKiBmaXhlZCBiaW9zcGFyYW0uCi0gKiBhZGRlZCBxdWV1ZSBwcm90b2NvbC4KLSAqCi0gKiBSZXZpc2lvbiAwLjEgIDE5OTUvMDYvMjUgIDAxOjU1OjQ1ICByb290Ci0gKiBJbml0aWFsIHJlbGVhc2UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlICJzY3NpLmgiCi0jaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KLQotI2RlZmluZSBwY2k2NF9kbWFfaGkzMihhKSAoKHUzMikgKDB4ZmZmZmZmZmYgJiAoKCh1NjQpKGEpKT4+MzIpKSkKLSNkZWZpbmUgcGNpNjRfZG1hX2xvMzIoYSkgKCh1MzIpICgweGZmZmZmZmZmICYgKCgodTY0KShhKSkpKSkKLSNkZWZpbmUgcGNpNjRfZG1hX2J1aWxkKGhpLGxvKSBcCi0JKChkbWFfYWRkcl90KSgoKHU2NCkobG8pKXwoKCh1NjQpKGhpKSk8PDMyKSkpCi0KLS8qCi0gKiBXaXRoIHRoZSBxbG9naWMgaW50ZXJmYWNlLCBldmVyeSBxdWV1ZSBzbG90IGNhbiBob2xkIGEgU0NTSQotICogY29tbWFuZCB3aXRoIHVwIHRvIDIgc2NhdHRlci9nYXRoZXIgZW50cmllcy4gIElmIHdlIG5lZWQgbW9yZQotICogdGhhbiAyIGVudHJpZXMsIGNvbnRpbnVhdGlvbiBlbnRyaWVzIGNhbiBiZSB1c2VkIHRoYXQgaG9sZAotICogYW5vdGhlciA1IGVudHJpZXMgZWFjaC4gIFVubGlrZSBmb3Igb3RoZXIgZHJpdmVycywgdGhpcyBtZWFucwotICogdGhhdCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgZW50cmllcyB3ZSBjYW4KLSAqIHN1cHBvcnQgYXQgYW55IGdpdmVuIHRpbWUgaXMgYSBmdW5jdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHF1ZXVlCi0gKiBzbG90cyBhdmFpbGFibGUuICBUaGF0IGlzLCBob3N0LT5jYW5fcXVldWUgYW5kIGhvc3QtPnNnX3RhYmxlc2l6ZQotICogYXJlIGR5bmFtaWMgYW5kIF9ub3RfIGluZGVwZW5kZW50LiAgVGhpcyBhbGwgd29ya3MgZmluZSBiZWNhdXNlCi0gKiByZXF1ZXN0cyBhcmUgcXVldWVkIHNlcmlhbGx5IGFuZCB0aGUgc2NhdHRlci9nYXRoZXIgbGltaXQgaXMKLSAqIGRldGVybWluZWQgZm9yIGVhY2ggcXVldWUgcmVxdWVzdCBhbmV3LgotICovCi0KLSNkZWZpbmUgREFUQVNFR1NfUEVSX0NPTU1BTkQgMgotI2RlZmluZSBEQVRBU0VHU19QRVJfQ09OVCA1Ci0KLSNkZWZpbmUgUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiAyNTUgICAgIC8qIG11c3QgYmUgcG93ZXIgb2YgdHdvIC0gMSAqLwotI2RlZmluZSBRTE9HSUNGQ19NQVhfU0cocWwpCShEQVRBU0VHU19QRVJfQ09NTUFORCArICgoKHFsKSA+IDApID8gREFUQVNFR1NfUEVSX0NPTlQqKChxbCkgLSAxKSA6IDApKQotI2RlZmluZSBRTE9HSUNGQ19DTURfUEVSX0xVTiAgICA4Ci0KLS8qIENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qIFNldCB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIDEgdG8gcmVsb2FkIHRoZSBJU1AyeDAwJ3MgZmlybXdhcmUuICBUaGlzIGlzCi0gICB2ZXJzaW9uIDEuMTcuMzAgb2YgdGhlIGlzcDIxMDAncyBmaXJtd2FyZSBhbmQgdmVyc2lvbiAyLjAwLjQwIG9mIHRoZSAKLSAgIGlzcDIyMDAncyBmaXJtd2FyZS4gCi0qLwotCi0jZGVmaW5lIFVTRV9OVlJBTV9ERUZBVUxUUyAgICAgIDEKLQotI2RlZmluZSBJU1AyeDAwX1BPUlREQiAgICAgICAgICAxCi0KLS8qIFNldCB0aGUgZm9sbG93aW5nIHRvIDEgdG8gaW5jbHVkZSBmYWJyaWMgc3VwcG9ydCwgZmFicmljIHN1cHBvcnQgaXMgCi0gKiBjdXJyZW50bHkgbm90IGFzIHdlbGwgdGVzdGVkIGFzIHRoZSBvdGhlciBhc3BlY3RzIG9mIHRoZSBkcml2ZXIgKi8KLQotI2RlZmluZSBJU1AyeDAwX0ZBQlJJQyAgICAgICAgICAxCi0KLS8qICBNYWNyb3MgdXNlZCBmb3IgZGVidWdnaW5nICovCi0jZGVmaW5lIERFQlVHX0lTUDJ4MDAJCTAKLSNkZWZpbmUgREVCVUdfSVNQMngwMF9JTlQJMAotI2RlZmluZSBERUJVR19JU1AyeDAwX0lOVFIJMAotI2RlZmluZSBERUJVR19JU1AyeDAwX1NFVFVQCTAKLSNkZWZpbmUgREVCVUdfSVNQMngwMF9GQUJSSUMgICAgMAotI2RlZmluZSBUUkFDRV9JU1AgCQkwIAotCi0KLSNkZWZpbmUgREVGQVVMVF9MT09QX0NPVU5UCTEwMDAwMDAwMDAKLQotI2RlZmluZSBJU1BfVElNRU9VVCAoMipIWikKLS8qIEVuZCBDb25maWd1cmF0aW9uIHNlY3Rpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2lmIFRSQUNFX0lTUAotCi0jZGVmaW5lIFRSQUNFX0JVRl9MRU4JKDMyKjEwMjQpCi0KLXN0cnVjdCB7Ci0JdV9sb25nIG5leHQ7Ci0Jc3RydWN0IHsKLQkJdV9sb25nIHRpbWU7Ci0JCXVfaW50IGluZGV4OwotCQl1X2ludCBhZGRyOwotCQl1X2NoYXIgKm5hbWU7Ci0JfSBidWZbVFJBQ0VfQlVGX0xFTl07Ci19IHRyYWNlOwotCi0jZGVmaW5lIFRSQUNFKHcsIGksIGEpCQkJCQkJXAotewkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQlcCi0JCQkJCQkJCVwKLQlzYXZlX2ZsYWdzKGZsYWdzKTsJCQkJCVwKLQljbGkoKTsJCQkJCQkJXAotCXRyYWNlLmJ1Zlt0cmFjZS5uZXh0XS5uYW1lICA9ICh3KTsJCQlcCi0JdHJhY2UuYnVmW3RyYWNlLm5leHRdLnRpbWUgID0gamlmZmllczsJCQlcCi0JdHJhY2UuYnVmW3RyYWNlLm5leHRdLmluZGV4ID0gKGkpOwkJCVwKLQl0cmFjZS5idWZbdHJhY2UubmV4dF0uYWRkciAgPSAobG9uZykgKGEpOwkJXAotCXRyYWNlLm5leHQgPSAodHJhY2UubmV4dCArIDEpICYgKFRSQUNFX0JVRl9MRU4gLSAxKTsJXAotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkJCQkJXAotfQotCi0jZWxzZQotI2RlZmluZSBUUkFDRSh3LCBpLCBhKQotI2VuZGlmCi0KLSNpZiBERUJVR19JU1AyeDAwX0ZBQlJJQwotI2RlZmluZSBERUJVR19GQUJSSUMoeCkJeAotI2Vsc2UKLSNkZWZpbmUgREVCVUdfRkFCUklDKHgpCi0jZW5kaWYJCQkJLyogREVCVUdfSVNQMngwMF9GQUJSSUMgKi8KLQotCi0jaWYgREVCVUdfSVNQMngwMAotI2RlZmluZSBFTlRFUih4KQlwcmludGsoImlzcDJ4MDAgOiBlbnRlcmluZyAlcygpXG4iLCB4KTsKLSNkZWZpbmUgTEVBVkUoeCkJcHJpbnRrKCJpc3AyeDAwIDogbGVhdmluZyAlcygpXG4iLCB4KTsKLSNkZWZpbmUgREVCVUcoeCkJeAotI2Vsc2UKLSNkZWZpbmUgRU5URVIoeCkKLSNkZWZpbmUgTEVBVkUoeCkKLSNkZWZpbmUgREVCVUcoeCkKLSNlbmRpZgkJCQkvKiBERUJVR19JU1AyeDAwICovCi0KLSNpZiBERUJVR19JU1AyeDAwX0lOVFIKLSNkZWZpbmUgRU5URVJfSU5UUih4KQlwcmludGsoImlzcDJ4MDAgOiBlbnRlcmluZyAlcygpXG4iLCB4KTsKLSNkZWZpbmUgTEVBVkVfSU5UUih4KQlwcmludGsoImlzcDJ4MDAgOiBsZWF2aW5nICVzKClcbiIsIHgpOwotI2RlZmluZSBERUJVR19JTlRSKHgpCXgKLSNlbHNlCi0jZGVmaW5lIEVOVEVSX0lOVFIoeCkKLSNkZWZpbmUgTEVBVkVfSU5UUih4KQotI2RlZmluZSBERUJVR19JTlRSKHgpCi0jZW5kaWYJCQkJLyogREVCVUcgSVNQMngwMF9JTlRSICovCi0KLQotI2RlZmluZSBJU1AyMTAwX1JFVl9JRDEJICAgICAgIDEKLSNkZWZpbmUgSVNQMjEwMF9SRVZfSUQzICAgICAgICAzCi0jZGVmaW5lIElTUDIyMDBfUkVWX0lENSAgICAgICAgNQotCi0vKiBob3N0IGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEhPU1RfSENDUgkweGMwCS8qIGhvc3QgY29tbWFuZCBhbmQgY29udHJvbCAqLwotCi0vKiBwY2kgYnVzIGludGVyZmFjZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgRkxBU0hfQklPU19BRERSCTB4MDAKLSNkZWZpbmUgRkxBU0hfQklPU19EQVRBCTB4MDIKLSNkZWZpbmUgSVNQX0NUUkxfU1RBVFVTCTB4MDYJLyogY29uZmlndXJhdGlvbiByZWdpc3RlciAjMSAqLwotI2RlZmluZSBQQ0lfSU5URVJfQ1RMCTB4MDgJLyogcGNpIGludGVycnVwdCBjb250cm9sICovCi0jZGVmaW5lIFBDSV9JTlRFUl9TVFMJMHgwYQkvKiBwY2kgaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSBQQ0lfU0VNQVBIT1JFCTB4MGMJLyogcGNpIHNlbWFwaG9yZSAqLwotI2RlZmluZSBQQ0lfTlZSQU0JMHgwZQkvKiBwY2kgbnZyYW0gaW50ZXJmYWNlICovCi0KLS8qIG1haWxib3ggcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1CT1gwCQkweDEwCS8qIG1haWxib3ggMCAqLwotI2RlZmluZSBNQk9YMQkJMHgxMgkvKiBtYWlsYm94IDEgKi8KLSNkZWZpbmUgTUJPWDIJCTB4MTQJLyogbWFpbGJveCAyICovCi0jZGVmaW5lIE1CT1gzCQkweDE2CS8qIG1haWxib3ggMyAqLwotI2RlZmluZSBNQk9YNAkJMHgxOAkvKiBtYWlsYm94IDQgKi8KLSNkZWZpbmUgTUJPWDUJCTB4MWEJLyogbWFpbGJveCA1ICovCi0jZGVmaW5lIE1CT1g2CQkweDFjCS8qIG1haWxib3ggNiAqLwotI2RlZmluZSBNQk9YNwkJMHgxZQkvKiBtYWlsYm94IDcgKi8KLQotLyogbWFpbGJveCBjb21tYW5kIGNvbXBsZXRlIHN0YXR1cyBjb2RlcyAqLwotI2RlZmluZSBNQk9YX0NPTU1BTkRfQ09NUExFVEUJCTB4NDAwMAotI2RlZmluZSBJTlZBTElEX0NPTU1BTkQJCQkweDQwMDEKLSNkZWZpbmUgSE9TVF9JTlRFUkZBQ0VfRVJST1IJCTB4NDAwMgotI2RlZmluZSBURVNUX0ZBSUxFRAkJCTB4NDAwMwotI2RlZmluZSBDT01NQU5EX0VSUk9SCQkJMHg0MDA1Ci0jZGVmaW5lIENPTU1BTkRfUEFSQU1fRVJST1IJCTB4NDAwNgotI2RlZmluZSBQT1JUX0lEX1VTRUQgICAgICAgICAgICAgICAgICAgIDB4NDAwNwotI2RlZmluZSBMT09QX0lEX1VTRUQgICAgICAgICAgICAgICAgICAgIDB4NDAwOAotI2RlZmluZSBBTExfSURTX1VTRUQgICAgICAgICAgICAgICAgICAgIDB4NDAwOQotCi0vKiBhc3luYyBldmVudCBzdGF0dXMgY29kZXMgKi8KLSNkZWZpbmUgUkVTRVRfREVURUNURUQgIAkJMHg4MDAxCi0jZGVmaW5lIFNZU1RFTV9FUlJPUgkJCTB4ODAwMgotI2RlZmluZSBSRVFVRVNUX1RSQU5TRkVSX0VSUk9SCQkweDgwMDMKLSNkZWZpbmUgUkVTUE9OU0VfVFJBTlNGRVJfRVJST1IJCTB4ODAwNAotI2RlZmluZSBSRVFVRVNUX1FVRVVFX1dBS0VVUAkJMHg4MDA1Ci0jZGVmaW5lIExJUF9PQ0NVUlJFRCAgICAgICAgICAgICAgICAgICAgIDB4ODAxMAotI2RlZmluZSBMT09QX1VQICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAxMQotI2RlZmluZSBMT09QX0RPV04gICAgICAgICAgICAgICAgICAgICAgIDB4ODAxMgotI2RlZmluZSBMSVBfUkVDRUlWRUQgICAgICAgICAgICAgICAgICAgIDB4ODAxMwotI2RlZmluZSBQT1JUX0RCX0NIQU5HRUQgICAgICAgICAgICAgICAgIDB4ODAxNAotI2RlZmluZSBDSEFOR0VfTk9USUZJQ0FUSU9OICAgICAgICAgICAgIDB4ODAxNQotI2RlZmluZSBTQ1NJX0NPTU1BTkRfQ09NUExFVEUgICAgICAgICAgIDB4ODAyMAotI2RlZmluZSBQT0lOVF9UT19QT0lOVF9VUCAgICAgICAgICAgICAgIDB4ODAzMAotI2RlZmluZSBDT05ORUNUSU9OX01PREUgICAgICAgICAgICAgICAgIDB4ODAzNgotCi1zdHJ1Y3QgRW50cnlfaGVhZGVyIHsKLQl1X2NoYXIgZW50cnlfdHlwZTsKLQl1X2NoYXIgZW50cnlfY250OwotCXVfY2hhciBzeXNfZGVmXzE7Ci0JdV9jaGFyIGZsYWdzOwotfTsKLQotLyogZW50cnkgaGVhZGVyIHR5cGUgY29tbWFuZHMgKi8KLSNkZWZpbmUgRU5UUllfQ09NTUFORAkJMHgxOQotI2RlZmluZSBFTlRSWV9DT05USU5VQVRJT04JMHgwYQotCi0jZGVmaW5lIEVOVFJZX1NUQVRVUwkJMHgwMwotI2RlZmluZSBFTlRSWV9NQVJLRVIJCTB4MDQKLQotCi0vKiBlbnRyeSBoZWFkZXIgZmxhZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBFRkxBR19CVVNZCQkyCi0jZGVmaW5lIEVGTEFHX0JBRF9IRUFERVIJNAotI2RlZmluZSBFRkxBR19CQURfUEFZTE9BRAk4Ci0KLXN0cnVjdCBkYXRhc2VnIHsKLQl1X2ludCBkX2Jhc2U7Ci0JdV9pbnQgZF9iYXNlX2hpOwotCXVfaW50IGRfY291bnQ7Ci19OwotCi1zdHJ1Y3QgQ29tbWFuZF9FbnRyeSB7Ci0Jc3RydWN0IEVudHJ5X2hlYWRlciBoZHI7Ci0JdV9pbnQgaGFuZGxlOwotCXVfY2hhciB0YXJnZXRfbHVuOwotCXVfY2hhciB0YXJnZXRfaWQ7Ci0JdV9zaG9ydCBleHBhbmRlZF9sdW47Ci0JdV9zaG9ydCBjb250cm9sX2ZsYWdzOwotCXVfc2hvcnQgcnN2ZDI7Ci0JdV9zaG9ydCB0aW1lX291dDsKLQl1X3Nob3J0IHNlZ21lbnRfY250OwotCXVfY2hhciBjZGJbMTZdOwotCXVfaW50IHRvdGFsX2J5dGVfY250OwotCXN0cnVjdCBkYXRhc2VnIGRhdGFzZWdbREFUQVNFR1NfUEVSX0NPTU1BTkRdOwotfTsKLQotLyogY29tbWFuZCBlbnRyeSBjb250cm9sIGZsYWcgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgQ0ZMQUdfTk9ESVNDCQkweDAxCi0jZGVmaW5lIENGTEFHX0hFQURfVEFHCQkweDAyCi0jZGVmaW5lIENGTEFHX09SREVSRURfVEFHCTB4MDQKLSNkZWZpbmUgQ0ZMQUdfU0lNUExFX1RBRwkweDA4Ci0jZGVmaW5lIENGTEFHX1RBUl9SVE4JCTB4MTAKLSNkZWZpbmUgQ0ZMQUdfUkVBRAkJMHgyMAotI2RlZmluZSBDRkxBR19XUklURQkJMHg0MAotCi1zdHJ1Y3QgQ29udGludWF0aW9uX0VudHJ5IHsKLQlzdHJ1Y3QgRW50cnlfaGVhZGVyIGhkcjsKLQlzdHJ1Y3QgZGF0YXNlZyBkYXRhc2VnW0RBVEFTRUdTX1BFUl9DT05UXTsKLX07Ci0KLXN0cnVjdCBNYXJrZXJfRW50cnkgewotCXN0cnVjdCBFbnRyeV9oZWFkZXIgaGRyOwotCXVfaW50IHJlc2VydmVkOwotCXVfY2hhciB0YXJnZXRfbHVuOwotCXVfY2hhciB0YXJnZXRfaWQ7Ci0JdV9jaGFyIG1vZGlmaWVyOwotCXVfY2hhciBleHBhbmRlZF9sdW47Ci0JdV9jaGFyIHJzdmRzWzUyXTsKLX07Ci0KLS8qIG1hcmtlciBlbnRyeSBtb2RpZmllciBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBTWU5DX0RFVklDRQkwCi0jZGVmaW5lIFNZTkNfVEFSR0VUCTEKLSNkZWZpbmUgU1lOQ19BTEwJMgotCi1zdHJ1Y3QgU3RhdHVzX0VudHJ5IHsKLQlzdHJ1Y3QgRW50cnlfaGVhZGVyIGhkcjsKLQl1X2ludCBoYW5kbGU7Ci0JdV9zaG9ydCBzY3NpX3N0YXR1czsKLQl1X3Nob3J0IGNvbXBsZXRpb25fc3RhdHVzOwotCXVfc2hvcnQgc3RhdGVfZmxhZ3M7Ci0JdV9zaG9ydCBzdGF0dXNfZmxhZ3M7Ci0JdV9zaG9ydCByZXNfaW5mb19sZW47Ci0JdV9zaG9ydCByZXFfc2Vuc2VfbGVuOwotCXVfaW50IHJlc2lkdWFsOwotCXVfY2hhciByZXNfaW5mb1s4XTsKLQl1X2NoYXIgcmVxX3NlbnNlX2RhdGFbMzJdOwotfTsKLQotLyogc3RhdHVzIGVudHJ5IGNvbXBsZXRpb24gc3RhdHVzIGRlZmluaXRpb25zICovCi0jZGVmaW5lIENTX0NPTVBMRVRFCQkJMHgwMDAwCi0jZGVmaW5lIENTX0RNQV9FUlJPUgkJCTB4MDAwMgotI2RlZmluZSBDU19SRVNFVF9PQ0NVUlJFRAkJMHgwMDA0Ci0jZGVmaW5lIENTX0FCT1JURUQJCQkweDAwMDUKLSNkZWZpbmUgQ1NfVElNRU9VVAkJCTB4MDAwNgotI2RlZmluZSBDU19EQVRBX09WRVJSVU4JCQkweDAwMDcKLSNkZWZpbmUgQ1NfREFUQV9VTkRFUlJVTgkJMHgwMDE1Ci0jZGVmaW5lIENTX1FVRVVFX0ZVTEwJCQkweDAwMWMKLSNkZWZpbmUgQ1NfUE9SVF9VTkFWQUlMQUJMRSAgICAgICAgICAgICAweDAwMjgKLSNkZWZpbmUgQ1NfUE9SVF9MT0dHRURfT1VUICAgICAgICAgICAgICAweDAwMjkKLSNkZWZpbmUgQ1NfUE9SVF9DT05GSUdfQ0hBTkdFRAkJMHgwMDJhCi0KLS8qIHN0YXR1cyBlbnRyeSBzdGF0ZSBmbGFnIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFNGX1NFTlRfQ0RCCQkJMHgwNDAwCi0jZGVmaW5lIFNGX1RSQU5TRkVSUkVEX0RBVEEJCTB4MDgwMAotI2RlZmluZSBTRl9HT1RfU1RBVFVTCQkJMHgxMDAwCi0KLS8qIHN0YXR1cyBlbnRyeSBzdGF0dXMgZmxhZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBTVEZfQlVTX1JFU0VUCQkJMHgwMDA4Ci0jZGVmaW5lIFNURl9ERVZJQ0VfUkVTRVQJCTB4MDAxMAotI2RlZmluZSBTVEZfQUJPUlRFRAkJCTB4MDAyMAotI2RlZmluZSBTVEZfVElNRU9VVAkJCTB4MDA0MAotCi0vKiBpbnRlcnJ1cHQgY29udHJvbCBjb21tYW5kcyAqLwotI2RlZmluZSBJU1BfRU5fSU5UCQkJMHg4MDAwCi0jZGVmaW5lIElTUF9FTl9SSVNDCQkJMHgwMDA4Ci0KLS8qIGhvc3QgY29udHJvbCBjb21tYW5kcyAqLwotI2RlZmluZSBIQ0NSX05PUAkJCTB4MDAwMAotI2RlZmluZSBIQ0NSX1JFU0VUCQkJMHgxMDAwCi0jZGVmaW5lIEhDQ1JfUEFVU0UJCQkweDIwMDAKLSNkZWZpbmUgSENDUl9SRUxFQVNFCQkJMHgzMDAwCi0jZGVmaW5lIEhDQ1JfU0lOR0xFX1NURVAJCTB4NDAwMAotI2RlZmluZSBIQ0NSX1NFVF9IT1NUX0lOVFIJCTB4NTAwMAotI2RlZmluZSBIQ0NSX0NMRUFSX0hPU1RfSU5UUgkJMHg2MDAwCi0jZGVmaW5lIEhDQ1JfQ0xFQVJfUklTQ19JTlRSCQkweDcwMDAKLSNkZWZpbmUgSENDUl9CUF9FTkFCTEUJCQkweDgwMDAKLSNkZWZpbmUgSENDUl9CSU9TX0RJU0FCTEUJCTB4OTAwMAotI2RlZmluZSBIQ0NSX1RFU1RfTU9ERQkJCTB4ZjAwMAotCi0jZGVmaW5lIFJJU0NfQlVTWQkJCTB4MDAwNAotCi0vKiBtYWlsYm94IGNvbW1hbmRzICovCi0jZGVmaW5lIE1CT1hfTk9fT1AJCQkweDAwMDAKLSNkZWZpbmUgTUJPWF9MT0FEX1JBTQkJCTB4MDAwMQotI2RlZmluZSBNQk9YX0VYRUNfRklSTVdBUkUJCTB4MDAwMgotI2RlZmluZSBNQk9YX0RVTVBfUkFNCQkJMHgwMDAzCi0jZGVmaW5lIE1CT1hfV1JJVEVfUkFNX1dPUkQJCTB4MDAwNAotI2RlZmluZSBNQk9YX1JFQURfUkFNX1dPUkQJCTB4MDAwNQotI2RlZmluZSBNQk9YX01BSUxCT1hfUkVHX1RFU1QJCTB4MDAwNgotI2RlZmluZSBNQk9YX1ZFUklGWV9DSEVDS1NVTQkJMHgwMDA3Ci0jZGVmaW5lIE1CT1hfQUJPVVRfRklSTVdBUkUJCTB4MDAwOAotI2RlZmluZSBNQk9YX0xPQURfUklTQ19SQU0gICAgICAgICAgICAgIDB4MDAwOQotI2RlZmluZSBNQk9YX0RVTVBfUklTQ19SQU0gICAgICAgICAgICAgIDB4MDAwYQotI2RlZmluZSBNQk9YX0NIRUNLX0ZJUk1XQVJFCQkweDAwMGUKLSNkZWZpbmUgTUJPWF9JTklUX1JFUV9RVUVVRQkJMHgwMDEwCi0jZGVmaW5lIE1CT1hfSU5JVF9SRVNfUVVFVUUJCTB4MDAxMQotI2RlZmluZSBNQk9YX0VYRUNVVEVfSU9DQgkJMHgwMDEyCi0jZGVmaW5lIE1CT1hfV0FLRV9VUAkJCTB4MDAxMwotI2RlZmluZSBNQk9YX1NUT1BfRklSTVdBUkUJCTB4MDAxNAotI2RlZmluZSBNQk9YX0FCT1JUX0lPQ0IJCQkweDAwMTUKLSNkZWZpbmUgTUJPWF9BQk9SVF9ERVZJQ0UJCTB4MDAxNgotI2RlZmluZSBNQk9YX0FCT1JUX1RBUkdFVAkJMHgwMDE3Ci0jZGVmaW5lIE1CT1hfQlVTX1JFU0VUCQkJMHgwMDE4Ci0jZGVmaW5lIE1CT1hfU1RPUF9RVUVVRQkJCTB4MDAxOQotI2RlZmluZSBNQk9YX1NUQVJUX1FVRVVFCQkweDAwMWEKLSNkZWZpbmUgTUJPWF9TSU5HTEVfU1RFUF9RVUVVRQkJMHgwMDFiCi0jZGVmaW5lIE1CT1hfQUJPUlRfUVVFVUUJCTB4MDAxYwotI2RlZmluZSBNQk9YX0dFVF9ERVZfUVVFVUVfU1RBVFVTCTB4MDAxZAotI2RlZmluZSBNQk9YX0dFVF9GSVJNV0FSRV9TVEFUVVMJMHgwMDFmCi0jZGVmaW5lIE1CT1hfR0VUX0lOSVRfU0NTSV9JRAkJMHgwMDIwCi0jZGVmaW5lIE1CT1hfR0VUX1JFVFJZX0NPVU5UCQkweDAwMjIKLSNkZWZpbmUgTUJPWF9HRVRfVEFSR0VUX1BBUkFNUwkJMHgwMDI4Ci0jZGVmaW5lIE1CT1hfR0VUX0RFVl9RVUVVRV9QQVJBTVMJMHgwMDI5Ci0jZGVmaW5lIE1CT1hfU0VUX1JFVFJZX0NPVU5UCQkweDAwMzIKLSNkZWZpbmUgTUJPWF9TRVRfVEFSR0VUX1BBUkFNUwkJMHgwMDM4Ci0jZGVmaW5lIE1CT1hfU0VUX0RFVl9RVUVVRV9QQVJBTVMJMHgwMDM5Ci0jZGVmaW5lIE1CT1hfRVhFQ1VURV9JT0NCNjQgICAgICAgICAgICAgMHgwMDU0Ci0jZGVmaW5lIE1CT1hfSU5JVF9GSVJNV0FSRSAgICAgICAgICAgICAgMHgwMDYwCi0jZGVmaW5lIE1CT1hfR0VUX0lOSVRfQ0IgICAgICAgICAgICAgICAgMHgwMDYxCi0jZGVmaW5lIE1CT1hfSU5JVF9MSVAJCQkweDAwNjIKLSNkZWZpbmUgTUJPWF9HRVRfUE9TX01BUCAgICAgICAgICAgICAgICAweDAwNjMKLSNkZWZpbmUgTUJPWF9HRVRfUE9SVF9EQiAgICAgICAgICAgICAgICAweDAwNjQKLSNkZWZpbmUgTUJPWF9DTEVBUl9BQ0EgICAgICAgICAgICAgICAgICAweDAwNjUKLSNkZWZpbmUgTUJPWF9UQVJHRVRfUkVTRVQgICAgICAgICAgICAgICAweDAwNjYKLSNkZWZpbmUgTUJPWF9DTEVBUl9UQVNLX1NFVCAgICAgICAgICAgICAweDAwNjcKLSNkZWZpbmUgTUJPWF9BQk9SVF9UQVNLX1NFVCAgICAgICAgICAgICAweDAwNjgKLSNkZWZpbmUgTUJPWF9HRVRfRklSTVdBUkVfU1RBVEUgICAgICAgICAweDAwNjkKLSNkZWZpbmUgTUJPWF9HRVRfUE9SVF9OQU1FICAgICAgICAgICAgICAweDAwNmEKLSNkZWZpbmUgTUJPWF9TRU5EX1NOUyAgICAgICAgICAgICAgICAgICAweDAwNmUKLSNkZWZpbmUgTUJPWF9QT1JUX0xPR0lOICAgICAgICAgICAgICAgICAweDAwNmYKLSNkZWZpbmUgTUJPWF9TRU5EX0NIQU5HRV9SRVFVRVNUICAgICAgICAweDAwNzAKLSNkZWZpbmUgTUJPWF9QT1JUX0xPR09VVCAgICAgICAgICAgICAgICAweDAwNzEKLQotLyoKLSAqCUZpcm13YXJlIGlmIG5lZWRlZCAobm90ZSB0aGlzIGlzIGEgaGFjaywgaXQgYmVsb25ncyBpbiBhIHNlcGFyYXRlCi0gKgltb2R1bGUuCi0gKi8KLSAKLSNpZmRlZiBDT05GSUdfU0NTSV9RTE9HSUNfRkNfRklSTVdBUkUKLSNpbmNsdWRlICJxbG9naWNmY19hc20uYyIKLSNlbHNlCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2FkZHIwMSA9IDB4MTAwMCA7Ci0jZW5kaWYKLQotLyogRWFjaCBlbGVtZW50IGluIG1ib3hfcGFyYW0gaXMgYW4gOCBiaXQgYml0bWFwIHdoZXJlIGVhY2ggYml0IGluZGljYXRlcwotICAgaWYgdGhhdCBtYm94IHNob3VsZCBiZSBjb3BpZWQgYXMgaW5wdXQuICBGb3IgZXhhbXBsZSAweDIgd291bGQgbWVhbgotICAgb25seSBjb3B5IG1ib3gxLiAqLwotCi1zdGF0aWMgY29uc3QgdV9jaGFyIG1ib3hfcGFyYW1bXSA9Ci17Ci0JMHgwMSwJCQkvKiBNQk9YX05PX09QICovCi0JMHgxZiwJCQkvKiBNQk9YX0xPQURfUkFNICovCi0JMHgwMywJCQkvKiBNQk9YX0VYRUNfRklSTVdBUkUgKi8KLQkweDFmLAkJCS8qIE1CT1hfRFVNUF9SQU0gKi8KLQkweDA3LAkJCS8qIE1CT1hfV1JJVEVfUkFNX1dPUkQgKi8KLQkweDAzLAkJCS8qIE1CT1hfUkVBRF9SQU1fV09SRCAqLwotCTB4ZmYsCQkJLyogTUJPWF9NQUlMQk9YX1JFR19URVNUICovCi0JMHgwMywJCQkvKiBNQk9YX1ZFUklGWV9DSEVDS1NVTSAqLwotCTB4MDEsCQkJLyogTUJPWF9BQk9VVF9GSVJNV0FSRSAqLwotCTB4ZmYsCQkJLyogTUJPWF9MT0FEX1JJU0NfUkFNICovCi0JMHhmZiwJCQkvKiBNQk9YX0RVTVBfUklTQ19SQU0gKi8KLQkweDAwLAkJCS8qIDB4MDAwYiAqLwotCTB4MDAsCQkJLyogMHgwMDBjICovCi0JMHgwMCwJCQkvKiAweDAwMGQgKi8KLQkweDAxLAkJCS8qIE1CT1hfQ0hFQ0tfRklSTVdBUkUgKi8KLQkweDAwLAkJCS8qIDB4MDAwZiAqLwotCTB4MWYsCQkJLyogTUJPWF9JTklUX1JFUV9RVUVVRSAqLwotCTB4MmYsCQkJLyogTUJPWF9JTklUX1JFU19RVUVVRSAqLwotCTB4MGYsCQkJLyogTUJPWF9FWEVDVVRFX0lPQ0IgKi8KLQkweDAzLAkJCS8qIE1CT1hfV0FLRV9VUCAqLwotCTB4MDEsCQkJLyogTUJPWF9TVE9QX0ZJUk1XQVJFICovCi0JMHgwZiwJCQkvKiBNQk9YX0FCT1JUX0lPQ0IgKi8KLQkweDAzLAkJCS8qIE1CT1hfQUJPUlRfREVWSUNFICovCi0JMHgwNywJCQkvKiBNQk9YX0FCT1JUX1RBUkdFVCAqLwotCTB4MDMsCQkJLyogTUJPWF9CVVNfUkVTRVQgKi8KLQkweDAzLAkJCS8qIE1CT1hfU1RPUF9RVUVVRSAqLwotCTB4MDMsCQkJLyogTUJPWF9TVEFSVF9RVUVVRSAqLwotCTB4MDMsCQkJLyogTUJPWF9TSU5HTEVfU1RFUF9RVUVVRSAqLwotCTB4MDMsCQkJLyogTUJPWF9BQk9SVF9RVUVVRSAqLwotCTB4MDMsCQkJLyogTUJPWF9HRVRfREVWX1FVRVVFX1NUQVRVUyAqLwotCTB4MDAsCQkJLyogMHgwMDFlICovCi0JMHgwMSwJCQkvKiBNQk9YX0dFVF9GSVJNV0FSRV9TVEFUVVMgKi8KLQkweDAxLAkJCS8qIE1CT1hfR0VUX0lOSVRfU0NTSV9JRCAqLwotCTB4MDAsCQkJLyogMHgwMDIxICovCi0JMHgwMSwJCQkvKiBNQk9YX0dFVF9SRVRSWV9DT1VOVCAqLwotCTB4MDAsCQkJLyogMHgwMDIzICovCi0JMHgwMCwJCQkvKiAweDAwMjQgKi8KLQkweDAwLAkJCS8qIDB4MDAyNSAqLwotCTB4MDAsCQkJLyogMHgwMDI2ICovCi0JMHgwMCwJCQkvKiAweDAwMjcgKi8KLQkweDAzLAkJCS8qIE1CT1hfR0VUX1RBUkdFVF9QQVJBTVMgKi8KLQkweDAzLAkJCS8qIE1CT1hfR0VUX0RFVl9RVUVVRV9QQVJBTVMgKi8KLQkweDAwLAkJCS8qIDB4MDAyYSAqLwotCTB4MDAsCQkJLyogMHgwMDJiICovCi0JMHgwMCwJCQkvKiAweDAwMmMgKi8KLQkweDAwLAkJCS8qIDB4MDAyZCAqLwotCTB4MDAsCQkJLyogMHgwMDJlICovCi0JMHgwMCwJCQkvKiAweDAwMmYgKi8KLQkweDAwLAkJCS8qIDB4MDAzMCAqLwotCTB4MDAsCQkJLyogMHgwMDMxICovCi0JMHgwNywJCQkvKiBNQk9YX1NFVF9SRVRSWV9DT1VOVCAqLwotCTB4MDAsCQkJLyogMHgwMDMzICovCi0JMHgwMCwJCQkvKiAweDAwMzQgKi8KLQkweDAwLAkJCS8qIDB4MDAzNSAqLwotCTB4MDAsCQkJLyogMHgwMDM2ICovCi0JMHgwMCwJCQkvKiAweDAwMzcgKi8KLQkweDBmLAkJCS8qIE1CT1hfU0VUX1RBUkdFVF9QQVJBTVMgKi8KLQkweDBmLAkJCS8qIE1CT1hfU0VUX0RFVl9RVUVVRV9QQVJBTVMgKi8KLQkweDAwLAkJCS8qIDB4MDAzYSAqLwotCTB4MDAsCQkJLyogMHgwMDNiICovCi0JMHgwMCwJCQkvKiAweDAwM2MgKi8KLQkweDAwLAkJCS8qIDB4MDAzZCAqLwotCTB4MDAsCQkJLyogMHgwMDNlICovCi0JMHgwMCwJCQkvKiAweDAwM2YgKi8KLQkweDAwLAkJCS8qIDB4MDA0MCAqLwotCTB4MDAsCQkJLyogMHgwMDQxICovCi0JMHgwMCwJCQkvKiAweDAwNDIgKi8KLQkweDAwLAkJCS8qIDB4MDA0MyAqLwotCTB4MDAsCQkJLyogMHgwMDQ0ICovCi0JMHgwMCwJCQkvKiAweDAwNDUgKi8KLQkweDAwLAkJCS8qIDB4MDA0NiAqLwotCTB4MDAsCQkJLyogMHgwMDQ3ICovCi0JMHgwMCwJCQkvKiAweDAwNDggKi8KLQkweDAwLAkJCS8qIDB4MDA0OSAqLwotCTB4MDAsCQkJLyogMHgwMDRhICovCi0JMHgwMCwJCQkvKiAweDAwNGIgKi8KLQkweDAwLAkJCS8qIDB4MDA0YyAqLwotCTB4MDAsCQkJLyogMHgwMDRkICovCi0JMHgwMCwJCQkvKiAweDAwNGUgKi8KLQkweDAwLAkJCS8qIDB4MDA0ZiAqLwotCTB4MDAsCQkJLyogMHgwMDUwICovCi0JMHgwMCwJCQkvKiAweDAwNTEgKi8KLQkweDAwLAkJCS8qIDB4MDA1MiAqLwotCTB4MDAsCQkJLyogMHgwMDUzICovCi0JMHhjZiwJCQkvKiBNQk9YX0VYRUNVVEVfSU9DQjY0ICovCi0JMHgwMCwJCQkvKiAweDAwNTUgKi8KLQkweDAwLAkJCS8qIDB4MDA1NiAqLwotCTB4MDAsCQkJLyogMHgwMDU3ICovCi0JMHgwMCwJCQkvKiAweDAwNTggKi8KLQkweDAwLAkJCS8qIDB4MDA1OSAqLwotCTB4MDAsCQkJLyogMHgwMDVhICovCi0JMHgwMCwJCQkvKiAweDAwNWIgKi8KLQkweDAwLAkJCS8qIDB4MDA1YyAqLwotCTB4MDAsCQkJLyogMHgwMDVkICovCi0JMHgwMCwJCQkvKiAweDAwNWUgKi8KLQkweDAwLAkJCS8qIDB4MDA1ZiAqLwotCTB4ZmYsCQkJLyogTUJPWF9JTklUX0ZJUk1XQVJFICovCi0JMHhjZCwJCQkvKiBNQk9YX0dFVF9JTklUX0NCICovCi0JMHgwMSwJCQkvKiBNQk9YX0lOSVRfTElQICovCi0JMHhjZCwJCQkvKiBNQk9YX0dFVF9QT1NfTUFQICovCi0JMHhjZiwJCQkvKiBNQk9YX0dFVF9QT1JUX0RCICovCi0JMHgwMywJCQkvKiBNQk9YX0NMRUFSX0FDQSAqLwotCTB4MDMsCQkJLyogTUJPWF9UQVJHRVRfUkVTRVQgKi8KLQkweDAzLAkJCS8qIE1CT1hfQ0xFQVJfVEFTS19TRVQgKi8KLQkweDAzLAkJCS8qIE1CT1hfQUJPUlRfVEFTS19TRVQgKi8KLQkweDAxLAkJCS8qIE1CT1hfR0VUX0ZJUk1XQVJFX1NUQVRFICovCi0JMHgwMywJCQkvKiBNQk9YX0dFVF9QT1JUX05BTUUgKi8KLQkweDAwLAkJCS8qIDB4MDA2YiAqLwotCTB4MDAsCQkJLyogMHgwMDZjICovCi0JMHgwMCwJCQkvKiAweDAwNmQgKi8KLQkweGNmLAkJCS8qIE1CT1hfU0VORF9TTlMgKi8KLQkweDBmLAkJCS8qIE1CT1hfUE9SVF9MT0dJTiAqLwotCTB4MDMsCQkJLyogTUJPWF9TRU5EX0NIQU5HRV9SRVFVRVNUICovCi0JMHgwMywJCQkvKiBNQk9YX1BPUlRfTE9HT1VUICovCi19OwotCi0jZGVmaW5lIE1BWF9NQk9YX0NPTU1BTkQJKHNpemVvZihtYm94X3BhcmFtKS9zaXplb2YodV9zaG9ydCkpCi0KLQotc3RydWN0IGlkX25hbWVfbWFwIHsKLQl1NjQgd3duOwotCXVfY2hhciBsb29wX2lkOwotfTsKLQotc3RydWN0IHNuc19jYiB7Ci0JdV9zaG9ydCBsZW47Ci0JdV9zaG9ydCByZXMxOwotCXVfaW50IHJlc3BvbnNlX2xvdzsKLQl1X2ludCByZXNwb25zZV9oaWdoOwotCXVfc2hvcnQgc3ViX2xlbjsKLQl1X3Nob3J0IHJlczI7Ci0JdV9jaGFyIGRhdGFbNDRdOwotfTsKLQotLyogYWRkcmVzcyBvZiBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdCBpcyBwYXNzZWQgdG8gYWRhcHRlciB0byBpbml0aWFsaXplIHRoaW5ncwotICovCi1zdHJ1Y3QgaW5pdF9jYiB7Ci0JdV9jaGFyIHZlcnNpb247Ci0JdV9jaGFyIHJlc2V2ZXJkMVsxXTsKLQl1X3Nob3J0IGZpcm1fb3B0czsKLQl1X3Nob3J0IG1heF9mcmFtZV9sZW47Ci0JdV9zaG9ydCBtYXhfaW9jYjsKLQl1X3Nob3J0IGV4ZWNfdGhyb3R0bGU7Ci0JdV9jaGFyIHJldHJ5X2NudDsKLQl1X2NoYXIgcmV0cnlfZGVsYXk7Ci0JdV9zaG9ydCBub2RlX25hbWVbNF07Ci0JdV9zaG9ydCBoYXJkX2FkZHI7Ci0JdV9jaGFyIHJlc2VydmVkMlsxMF07Ci0JdV9zaG9ydCByZXFfcXVldWVfb3V0OwotCXVfc2hvcnQgcmVzX3F1ZXVlX2luOwotCXVfc2hvcnQgcmVxX3F1ZXVlX2xlbjsKLQl1X3Nob3J0IHJlc19xdWV1ZV9sZW47Ci0JdV9pbnQgcmVxX3F1ZXVlX2FkZHJfbG87Ci0JdV9pbnQgcmVxX3F1ZXVlX2FkZHJfaGlnaDsKLQl1X2ludCByZXNfcXVldWVfYWRkcl9sbzsKLQl1X2ludCByZXNfcXVldWVfYWRkcl9oaWdoOwotICAgICAgICAvKiB0aGUgcmVzdCBvZiB0aGlzIHN0cnVjdHVyZSBvbmx5IGFwcGxpZXMgdG8gdGhlIGlzcDIyMDAgKi8KLSAgICAgICAgdV9zaG9ydCBsdW5fZW5hYmxlczsKLSAgICAgICAgdV9jaGFyIGNtZF9yZXNvdXJjZV9jbnQ7Ci0gICAgICAgIHVfY2hhciBub3RpZnlfcmVzb3VyY2VfY250OwotICAgICAgICB1X3Nob3J0IHRpbWVvdXQ7Ci0gICAgICAgIHVfc2hvcnQgcmVzZXJ2ZWQzOwotICAgICAgICB1X3Nob3J0IGFkZF9maXJtX29wdHM7Ci0gICAgICAgIHVfY2hhciByZXNfYWNjdW1fdGltZXI7Ci0gICAgICAgIHVfY2hhciBpcnFfZGVsYXlfdGltZXI7Ci0gICAgICAgIHVfc2hvcnQgc3BlY2lhbF9vcHRpb25zOwotICAgICAgICB1X3Nob3J0IHJlc2VydmVkNFsxM107Ci19OwotCi0vKgotICogVGhlIHJlc3VsdCBxdWV1ZSBjYW4gYmUgcXVpdGUgYSBiaXQgc21hbGxlciBzaW5jZSBjb250aW51YXRpb24gZW50cmllcwotICogZG8gbm90IHNob3cgdXAgdGhlcmU6Ci0gKi8KLSNkZWZpbmUgUkVTX1FVRVVFX0xFTgkJKChRTE9HSUNGQ19SRVFfUVVFVUVfTEVOICsgMSkgLyA4IC0gMSkKLSNkZWZpbmUgUVVFVUVfRU5UUllfTEVOCQk2NAotCi0jaWYgSVNQMngwMF9GQUJSSUMKLSNkZWZpbmUgUUxPR0lDRkNfTUFYX0lEICAgIDB4ZmYKLSNlbHNlCi0jZGVmaW5lIFFMT0dJQ0ZDX01BWF9JRCAgICAweDdkCi0jZW5kaWYKLQotI2RlZmluZSBRTE9HSUNGQ19NQVhfTFVOCTEyOAotI2RlZmluZSBRTE9HSUNGQ19NQVhfTE9PUF9JRAkweDdkCi0KLS8qIHRoZSBmb2xsb3dpbmcgY29ubmVjdGlvbiBvcHRpb25zIG9ubHkgYXBwbHkgdG8gdGhlIDIyMDAuICBpIGhhdmUgb25seQotICogaGFkIHN1Y2Nlc3Mgd2l0aCBMT09QX09OTFkgYW5kIFAyUF9PTkxZLgotICovCi0KLSNkZWZpbmUgTE9PUF9PTkxZICAgICAgICAgICAgICAwCi0jZGVmaW5lIFAyUF9PTkxZICAgICAgICAgICAgICAgMQotI2RlZmluZSBMT09QX1BSRUZFUkVEICAgICAgICAgIDIKLSNkZWZpbmUgUDJQX1BSRUZFUkVEICAgICAgICAgICAzCi0KLSNkZWZpbmUgQ09OTkVDVElPTl9QUkVGRVJFTkNFICBMT09QX09OTFkKLQotLyogYWRhcHRlcl9zdGF0ZSB2YWx1ZXMgKi8KLSNkZWZpbmUgQVNfRklSTVdBUkVfREVBRCAgICAgIC0xCi0jZGVmaW5lIEFTX0xPT1BfRE9XTiAgICAgICAgICAgMAotI2RlZmluZSBBU19MT09QX0dPT0QgICAgICAgICAgIDEKLSNkZWZpbmUgQVNfUkVET19GQUJSSUNfUE9SVERCICAyCi0jZGVmaW5lIEFTX1JFRE9fTE9PUF9QT1JUREIgICAgNAotCi0jZGVmaW5lIFJFU19TSVpFCSgoUkVTX1FVRVVFX0xFTiArIDEpKlFVRVVFX0VOVFJZX0xFTikKLSNkZWZpbmUgUkVRX1NJWkUJKChRTE9HSUNGQ19SRVFfUVVFVUVfTEVOICsgMSkqUVVFVUVfRU5UUllfTEVOKQotCi1zdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSB7Ci0JdV9jaGFyIHJldmlzaW9uOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCS8qIHJlc3VsdCBhbmQgcmVxdWVzdCBxdWV1ZXMgKHNoYXJlZCB3aXRoIGlzcDJ4MDApOiAqLwotCXVfaW50IHJlcV9pbl9wdHI7CS8qIGluZGV4IG9mIG5leHQgcmVxdWVzdCBzbG90ICovCi0JdV9pbnQgcmVzX291dF9wdHI7CS8qIGluZGV4IG9mIG5leHQgcmVzdWx0IHNsb3QgKi8KLQotCS8qIHRoaXMgaXMgaGVyZSBzbyB0aGUgcXVldWVzIGFyZSBuaWNlbHkgYWxpZ25lZCAqLwotCWxvbmcgc2VuZF9tYXJrZXI7CS8qIGRvIHdlIG5lZWQgdG8gc2VuZCBhIG1hcmtlcj8gKi8KLQotCWNoYXIgKiByZXM7Ci0JY2hhciAqIHJlcTsKLQlzdHJ1Y3QgaW5pdF9jYiBjb250cm9sX2Jsb2NrOwotCWludCBhZGFwdGVyX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgaW50IHRhZ19hZ2VzW1FMT0dJQ0ZDX01BWF9JRCArIDFdOwotCVNjc2lfQ21uZCAqaGFuZGxlX3B0cnNbUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiArIDFdOwotCXVuc2lnbmVkIGxvbmcgaGFuZGxlX3NlcmlhbHNbUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiArIDFdOwotCXN0cnVjdCBpZF9uYW1lX21hcCBwb3J0X2RiW1FMT0dJQ0ZDX01BWF9JRCArIDFdOwotCXVfY2hhciBtYm94X2RvbmU7Ci0JdTY0IHd3bjsKLQl1X2ludCBwb3J0X2lkOwotCXVfY2hhciBxdWV1ZWQ7Ci0JdV9jaGFyIGhvc3RfaWQ7Ci0gICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IGV4cGxvcmVfdGltZXI7Ci0Jc3RydWN0IGlkX25hbWVfbWFwIHRlbXBtYXBbUUxPR0lDRkNfTUFYX0lEICsgMV07Ci19OwotCi0KLS8qIHF1ZXVlIGxlbmd0aCdzIF9tdXN0XyBiZSBwb3dlciBvZiB0d286ICovCi0jZGVmaW5lIFFVRVVFX0RFUFRIKGluLCBvdXQsIHFsKQkoKGluIC0gb3V0KSAmIChxbCkpCi0jZGVmaW5lIFJFUV9RVUVVRV9ERVBUSChpbiwgb3V0KQlRVUVVRV9ERVBUSChpbiwgb3V0LCAJCSAgICAgXAotCQkJCQkJICAgIFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4pCi0jZGVmaW5lIFJFU19RVUVVRV9ERVBUSChpbiwgb3V0KQlRVUVVRV9ERVBUSChpbiwgb3V0LCBSRVNfUVVFVUVfTEVOKQotCi1zdGF0aWMgdm9pZCBpc3AyeDAwX2VuYWJsZV9pcnFzKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgdm9pZCBpc3AyeDAwX2Rpc2FibGVfaXJxcyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIGludCBpc3AyeDAwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyBpbnQgaXNwMngwMF9yZXNldF9oYXJkd2FyZShzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIGludCBpc3AyeDAwX21ib3hfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHVfc2hvcnRbXSk7Ci1zdGF0aWMgaW50IGlzcDJ4MDBfcmV0dXJuX3N0YXR1cyhTY3NpX0NtbmQgKiwgc3RydWN0IFN0YXR1c19FbnRyeSAqKTsKLXN0YXRpYyB2b2lkIGlzcDJ4MDBfaW50cl9oYW5kbGVyKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKLXN0YXRpYyBpcnFyZXR1cm5fdCBkb19pc3AyeDAwX2ludHJfaGFuZGxlcihpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Ci1zdGF0aWMgaW50IGlzcDJ4MDBfbWFrZV9wb3J0ZGIoc3RydWN0IFNjc2lfSG9zdCAqKTsKLQotI2lmIElTUDJ4MDBfRkFCUklDCi1zdGF0aWMgaW50IGlzcDJ4MDBfaW5pdF9mYWJyaWMoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3QgaWRfbmFtZV9tYXAgKiwgaW50KTsKLSNlbmRpZgotCi0jaWYgVVNFX05WUkFNX0RFRkFVTFRTCi1zdGF0aWMgaW50IGlzcDJ4MDBfZ2V0X252cmFtX2RlZmF1bHRzKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IGluaXRfY2IgKik7Ci1zdGF0aWMgdV9zaG9ydCBpc3AyeDAwX3JlYWRfbnZyYW1fd29yZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHVfc2hvcnQpOwotI2VuZGlmCi0KLSNpZiBERUJVR19JU1AyeDAwCi1zdGF0aWMgdm9pZCBpc3AyeDAwX3ByaW50X3Njc2lfY21kKFNjc2lfQ21uZCAqKTsKLSNlbmRpZgotCi0jaWYgREVCVUdfSVNQMngwMF9JTlRSCi1zdGF0aWMgdm9pZCBpc3AyeDAwX3ByaW50X3N0YXR1c19lbnRyeShzdHJ1Y3QgU3RhdHVzX0VudHJ5ICopOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpc3AyeDAwX2VuYWJsZV9pcnFzKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0Jb3V0dyhJU1BfRU5fSU5UIHwgSVNQX0VOX1JJU0MsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfSU5URVJfQ1RMKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNwMngwMF9kaXNhYmxlX2lycXMoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlvdXR3KDB4MCwgaG9zdC0+aW9fcG9ydCArIFBDSV9JTlRFUl9DVEwpOwotfQotCi0KLXN0YXRpYyBpbnQgaXNwMngwMF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRtcHQpCi17Ci0JaW50IGhvc3RzID0gMDsKLQl1bnNpZ25lZCBsb25nIHdhaXRfdGltZTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gTlVMTDsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0JdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkc1syXTsKLQlkbWFfYWRkcl90IGJ1c2FkZHI7Ci0JaW50IGk7Ci0KLQotCUVOVEVSKCJpc3AyeDAwX2RldGVjdCIpOwotCi0gICAgICAgCWRldmljZV9pZHNbMF0gPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMTAwOwotCWRldmljZV9pZHNbMV0gPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwOwotCi0JdG1wdC0+cHJvY19uYW1lID0gImlzcDJ4MDAiOwotCi0JZm9yIChpPTA7IGk8MjsgaSsrKXsKLQkJcGRldiA9IE5VTEw7Ci0JICAgICAgICB3aGlsZSAoKHBkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9RTE9HSUMsIGRldmljZV9pZHNbaV0sIHBkZXYpKSkgewotCQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBUcnkgdG8gY29uZmlndXJlIERNQSBhdHRyaWJ1dGVzLiAqLwotCQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spICYmCi0JCQkgICAgcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpCi0JCQkJCWNvbnRpbnVlOwotCi0JCSAgICAgICAgaG9zdCA9IHNjc2lfcmVnaXN0ZXIodG1wdCwgc2l6ZW9mKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhKSk7Ci0JCQlpZiAoIWhvc3QpIHsKLQkJCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogY291bGQgbm90IHJlZ2lzdGVyIGhvc3QuXG4iLCBob3N0cyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlob3N0LT5tYXhfaWQgPSBRTE9HSUNGQ19NQVhfSUQgKyAxOwotCQkJaG9zdC0+bWF4X2x1biA9IFFMT0dJQ0ZDX01BWF9MVU47Ci0JCQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQotCQkJbWVtc2V0KGhvc3RkYXRhLCAwLCBzaXplb2Yoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEpKTsKLQkJCWhvc3RkYXRhLT5wY2lfZGV2ID0gcGRldjsKLQkJCWhvc3RkYXRhLT5yZXMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCAmYnVzYWRkcik7Ci0KLQkJCWlmICghaG9zdGRhdGEtPnJlcyl7Ci0JCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHF1ZXVlLlxuIiwgaG9zdHMpOwotCQkJICAgICAgICBzY3NpX3VucmVnaXN0ZXIoaG9zdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlob3N0ZGF0YS0+cmVxID0gaG9zdGRhdGEtPnJlcyArIChSRVNfUVVFVUVfTEVOICsgMSkqUVVFVUVfRU5UUllfTEVOOwotCQkJaG9zdGRhdGEtPnF1ZXVlZCA9IDA7Ci0JCQkvKiBzZXQgdXAgdGhlIGNvbnRyb2wgYmxvY2sgKi8KLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnZlcnNpb24gPSAweDE7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5maXJtX29wdHMgPSBjcHVfdG9fbGUxNigweDgwMGUpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subWF4X2ZyYW1lX2xlbiA9IGNwdV90b19sZTE2KDIwNDgpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subWF4X2lvY2IgPSBjcHVfdG9fbGUxNihRTE9HSUNGQ19SRVFfUVVFVUVfTEVOKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLmV4ZWNfdGhyb3R0bGUgPSBjcHVfdG9fbGUxNihRTE9HSUNGQ19DTURfUEVSX0xVTik7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXRyeV9kZWxheSA9IDU7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXRyeV9jbnQgPSAxOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subm9kZV9uYW1lWzBdID0gY3B1X3RvX2xlMTYoMHgwMDIwKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVsxXSA9IGNwdV90b19sZTE2KDB4RTAwMCk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMl0gPSBjcHVfdG9fbGUxNigweDAwOEIpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subm9kZV9uYW1lWzNdID0gY3B1X3RvX2xlMTYoMHgwMDAwKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLmhhcmRfYWRkciA9IGNwdV90b19sZTE2KDB4MDAwMyk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXFfcXVldWVfbGVuID0gY3B1X3RvX2xlMTYoUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiArIDEpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVzX3F1ZXVlX2xlbiA9IGNwdV90b19sZTE2KFJFU19RVUVVRV9MRU4gKyAxKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnJlc19xdWV1ZV9hZGRyX2xvID0gY3B1X3RvX2xlMzIocGNpNjRfZG1hX2xvMzIoYnVzYWRkcikpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVzX3F1ZXVlX2FkZHJfaGlnaCA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIpKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnJlcV9xdWV1ZV9hZGRyX2xvID0gY3B1X3RvX2xlMzIocGNpNjRfZG1hX2xvMzIoYnVzYWRkciArIFJFU19TSVpFKSk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXFfcXVldWVfYWRkcl9oaWdoID0gY3B1X3RvX2xlMzIocGNpNjRfZG1hX2hpMzIoYnVzYWRkciArIFJFU19TSVpFKSk7Ci0KLQotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2suYWRkX2Zpcm1fb3B0cyB8PSBjcHVfdG9fbGUxNihDT05ORUNUSU9OX1BSRUZFUkVOQ0U8PDQpOwotCQkJaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPSBBU19MT09QX0RPV047Ci0JCQlob3N0ZGF0YS0+ZXhwbG9yZV90aW1lci5kYXRhID0gMTsKLQkJCWhvc3RkYXRhLT5ob3N0X2lkID0gaG9zdHM7Ci0KLQkJCWlmIChpc3AyeDAwX2luaXQoaG9zdCkgfHwgaXNwMngwMF9yZXNldF9oYXJkd2FyZShob3N0KSkgewotCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQgKHBkZXYsIFJFU19TSVpFICsgUkVRX1NJWkUsIGhvc3RkYXRhLT5yZXMsIGJ1c2FkZHIpOwotCQkJICAgICAgICBzY3NpX3VucmVnaXN0ZXIoaG9zdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlob3N0LT50aGlzX2lkID0gMDsKLQotCQkJaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgZG9faXNwMngwMF9pbnRyX2hhbmRsZXIsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLCAicWxvZ2ljZmMiLCBob3N0KSkgewotCQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBpbnRlcnJ1cHQgJWQgYWxyZWFkeSBpbiB1c2VcbiIsCi0JCQkJICAgICAgIGhvc3RkYXRhLT5ob3N0X2lkLCBob3N0LT5pcnEpOwotCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQgKHBkZXYsIFJFU19TSVpFICsgUkVRX1NJWkUsIGhvc3RkYXRhLT5yZXMsIGJ1c2FkZHIpOwotCQkJCXNjc2lfdW5yZWdpc3Rlcihob3N0KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICghcmVxdWVzdF9yZWdpb24oaG9zdC0+aW9fcG9ydCwgMHhmZiwgInFsb2dpY2ZjIikpIHsKLQkJCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogaS9vIHJlZ2lvbiAweCVseC0weCVseCBhbHJlYWR5ICIKLQkJCQkgICAgICAgImluIHVzZVxuIiwKLQkJCQkgICAgICAgaG9zdGRhdGEtPmhvc3RfaWQsIGhvc3QtPmlvX3BvcnQsIGhvc3QtPmlvX3BvcnQgKyAweGZmKTsKLQkJCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwotCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQgKHBkZXYsIFJFU19TSVpFICsgUkVRX1NJWkUsIGhvc3RkYXRhLT5yZXMsIGJ1c2FkZHIpOwotCQkJCXNjc2lfdW5yZWdpc3Rlcihob3N0KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJb3V0dygweDAsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfU0VNQVBIT1JFKTsKLQkJCW91dHcoSENDUl9DTEVBUl9SSVNDX0lOVFIsIGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpOwotCQkJaXNwMngwMF9lbmFibGVfaXJxcyhob3N0KTsKLQkJCS8qIHdhaXQgZm9yIHRoZSBsb29wIHRvIGNvbWUgdXAgKi8KLQkJCWZvciAod2FpdF90aW1lID0gamlmZmllcyArIDEwICogSFo7IHRpbWVfYmVmb3JlKGppZmZpZXMsIHdhaXRfdGltZSkgJiYgaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPT0gQVNfTE9PUF9ET1dOOykgewotCQkJICAgICAgICBiYXJyaWVyKCk7Ci0JCQkJY3B1X3JlbGF4KCk7Ci0JCQl9Ci0JCQlpZiAoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPT0gQVNfTE9PUF9ET1dOKSB7Ci0JCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IGxpbmsgaXMgbm90IHVwXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQl9Ci0JCQlob3N0cysrOwotCQkJaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIuZGF0YSA9IDA7Ci0JCX0KLQl9Ci0KLQotCS8qIHRoaXMgYnVzeSBsb29wIHNob3VsZCBub3QgYmUgbmVlZGVkIGJ1dCB0aGUgaXNwMngwMCBzZWVtcyB0byBuZWVkIAotCSAgIHNvbWUgdGltZSBiZWZvcmUgcmVjb2duaXppbmcgaXQgaXMgYXR0YWNoZWQgdG8gYSBmYWJyaWMgKi8KLQotI2lmIElTUDJ4MDBfRkFCUklDCi0JaWYgKGhvc3RzKSB7Ci0JCWZvciAod2FpdF90aW1lID0gamlmZmllcyArIDUgKiBIWjsgdGltZV9iZWZvcmUoamlmZmllcywgd2FpdF90aW1lKTspIHsKLQkJCWJhcnJpZXIoKTsKLQkJCWNwdV9yZWxheCgpOwotCQl9Ci0JfQotI2VuZGlmCi0KLQlMRUFWRSgiaXNwMngwMF9kZXRlY3QiKTsKLQotCXJldHVybiBob3N0czsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfbWFrZV9wb3J0ZGIoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQotCXNob3J0IHBhcmFtWzhdOwotCWludCBpLCBqOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQotCWlzcDJ4MDBfZGlzYWJsZV9pcnFzKGhvc3QpOwotCi0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0JbWVtc2V0KGhvc3RkYXRhLT50ZW1wbWFwLCAwLCBzaXplb2YoaG9zdGRhdGEtPnRlbXBtYXApKTsKLQotI2lmIElTUDJ4MDBfRkFCUklDCi0JZm9yIChpID0gMHg4MTsgaSA8IFFMT0dJQ0ZDX01BWF9JRDsgaSsrKSB7Ci0JCXBhcmFtWzBdID0gTUJPWF9QT1JUX0xPR09VVDsKLQkJcGFyYW1bMV0gPSBpIDw8IDg7Ci0JCXBhcmFtWzJdID0gMDsKLQkJcGFyYW1bM10gPSAwOwotCi0JCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCQlpZiAocGFyYW1bMF0gIT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0KLQkJCURFQlVHX0ZBQlJJQyhwcmludGsoInFsb2dpY2ZjJWQgOiBsb2dvdXQgZmFpbGVkICV4ICAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIGksIHBhcmFtWzBdKSk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCi0JcGFyYW1bMF0gPSBNQk9YX0dFVF9JTklUX1NDU0lfSUQ7Ci0KLQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQlpZiAocGFyYW1bMF0gPT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCWhvc3RkYXRhLT5wb3J0X2lkID0gKCh1X2ludCkgcGFyYW1bM10pIDw8IDE2OwotCQlob3N0ZGF0YS0+cG9ydF9pZCB8PSBwYXJhbVsyXTsKLQkJaG9zdGRhdGEtPnRlbXBtYXBbMF0ubG9vcF9pZCA9IHBhcmFtWzFdOwotCQlob3N0ZGF0YS0+dGVtcG1hcFswXS53d24gPSBob3N0ZGF0YS0+d3duOwotCX0KLQllbHNlIHsKLQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IGVycm9yIGdldHRpbmcgc2NzaSBpZC5cbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQl9Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8PVFMT0dJQ0ZDX01BWF9JRDsgaSsrKQotICAgICAgICAgICAgICAgIGhvc3RkYXRhLT50ZW1wbWFwW2ldLmxvb3BfaWQgPSBob3N0ZGF0YS0+dGVtcG1hcFswXS5sb29wX2lkOwotICAgCi0gICAgICAgIGZvciAoaSA9IDAsIGogPSAxOyBpIDw9IFFMT0dJQ0ZDX01BWF9MT09QX0lEOyBpKyspIHsKLSAgICAgICAgICAgICAgICBwYXJhbVswXSA9IE1CT1hfR0VUX1BPUlRfTkFNRTsKLQkJcGFyYW1bMV0gPSAoaSA8PCA4KSAmIDB4ZmYwMDsKLQotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJaWYgKHBhcmFtWzBdID09IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ubG9vcF9pZCA9IGk7Ci0JCQlob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gPSAoKHU2NCkgKHBhcmFtWzJdICYgMHhmZikpIDw8IDU2OwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duIHw9ICgodTY0KSAoKHBhcmFtWzJdID4+IDgpICYgMHhmZikpIDw8IDQ4OwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duIHw9ICgodTY0KSAocGFyYW1bM10gJiAweGZmKSkgPDwgNDA7Ci0JCQlob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gfD0gKCh1NjQpICgocGFyYW1bM10gPj4gOCkgJiAweGZmKSkgPDwgMzI7Ci0JCQlob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gfD0gKCh1NjQpIChwYXJhbVs2XSAmIDB4ZmYpKSA8PCAyNDsKLQkJCWhvc3RkYXRhLT50ZW1wbWFwW2pdLnd3biB8PSAoKHU2NCkgKChwYXJhbVs2XSA+PiA4KSAmIDB4ZmYpKSA8PCAxNjsKLQkJCWhvc3RkYXRhLT50ZW1wbWFwW2pdLnd3biB8PSAoKHU2NCkgKHBhcmFtWzddICYgMHhmZikpIDw8IDg7Ci0JCQlob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gfD0gKCh1NjQpICgocGFyYW1bN10gPj4gOCkgJiAweGZmKSk7Ci0KLQkJCWorKzsKLQotCQl9Ci0JfQotCi0KLSNpZiBJU1AyeDAwX0ZBQlJJQwotCWlzcDJ4MDBfaW5pdF9mYWJyaWMoaG9zdCwgaG9zdGRhdGEtPnRlbXBtYXAsIGopOwotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDw9IFFMT0dJQ0ZDX01BWF9JRDsgaSsrKSB7Ci0JCWlmIChob3N0ZGF0YS0+dGVtcG1hcFtpXS53d24gIT0gaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duKSB7Ci0JCQlmb3IgKGogPSAwOyBqIDw9IFFMT0dJQ0ZDX01BWF9JRDsgaisrKSB7Ci0JCQkJaWYgKGhvc3RkYXRhLT50ZW1wbWFwW2pdLnd3biA9PSBob3N0ZGF0YS0+cG9ydF9kYltpXS53d24pIHsKLQkJCQkJaG9zdGRhdGEtPnBvcnRfZGJbaV0ubG9vcF9pZCA9IGhvc3RkYXRhLT50ZW1wbWFwW2pdLmxvb3BfaWQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWlmIChqID09IFFMT0dJQ0ZDX01BWF9JRCArIDEpCi0JCQkJaG9zdGRhdGEtPnBvcnRfZGJbaV0ubG9vcF9pZCA9IGhvc3RkYXRhLT50ZW1wbWFwWzBdLmxvb3BfaWQ7Ci0KLQkJCWZvciAoaiA9IDA7IGogPD0gUUxPR0lDRkNfTUFYX0lEOyBqKyspIHsKLQkJCQlpZiAoaG9zdGRhdGEtPnBvcnRfZGJbal0ud3duID09IGhvc3RkYXRhLT50ZW1wbWFwW2ldLnd3biB8fCAhaG9zdGRhdGEtPnBvcnRfZGJbal0ud3duKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWlmIChqID09IFFMT0dJQ0ZDX01BWF9JRCArIDEpCi0JCQkJcHJpbnRrKCJxbG9naWNmYyVkIDogVG9vIG1hbnkgc2NzaSBkZXZpY2VzLCBubyBtb3JlIHJvb20gaW4gcG9ydCBtYXAuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlpZiAoIWhvc3RkYXRhLT5wb3J0X2RiW2pdLnd3bikgewotCQkJCWhvc3RkYXRhLT5wb3J0X2RiW2pdLmxvb3BfaWQgPSBob3N0ZGF0YS0+dGVtcG1hcFtpXS5sb29wX2lkOwotCQkJCWhvc3RkYXRhLT5wb3J0X2RiW2pdLnd3biA9IGhvc3RkYXRhLT50ZW1wbWFwW2ldLnd3bjsKLQkJCX0KLQkJfSBlbHNlCi0JCQlob3N0ZGF0YS0+cG9ydF9kYltpXS5sb29wX2lkID0gaG9zdGRhdGEtPnRlbXBtYXBbaV0ubG9vcF9pZDsKLQotCX0KLQotCWlzcDJ4MDBfZW5hYmxlX2lycXMoaG9zdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0jaWYgSVNQMngwMF9GQUJSSUMKLQotI2RlZmluZSBGQUJSSUNfUE9SVCAgICAgICAgICAweDdlCi0jZGVmaW5lIEZBQlJJQ19DT05UUk9MTEVSICAgIDB4N2YKLSNkZWZpbmUgRkFCUklDX1NOUyAgICAgICAgICAgMHg4MAotCi1pbnQgaXNwMngwMF9pbml0X2ZhYnJpYyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3QgaWRfbmFtZV9tYXAgKnBvcnRfZGIsIGludCBjdXJfc2NzaV9pZCkKLXsKLQotCXVfc2hvcnQgcGFyYW1bOF07Ci0JdTY0IHd3bjsKLQlpbnQgZG9uZSA9IDA7Ci0JdV9zaG9ydCBsb29wX2lkID0gMHg4MTsKLQl1X3Nob3J0IHNjc2lfaWQgPSBjdXJfc2NzaV9pZDsKLQl1X2ludCBwb3J0X2lkOwotCXN0cnVjdCBzbnNfY2IgKnJlcTsKLQl1X2NoYXIgKnNuc19yZXNwb25zZTsKLQlkbWFfYWRkcl90IGJ1c2FkZHI7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCi0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0JCi0JREVCVUdfRkFCUklDKHByaW50aygicWxvZ2ljZmMlZCA6IENoZWNraW5nIGZvciBhIGZhYnJpYy5cbiIsIGhvc3RkYXRhLT5ob3N0X2lkKSk7Ci0JcGFyYW1bMF0gPSBNQk9YX0dFVF9QT1JUX05BTUU7Ci0JcGFyYW1bMV0gPSAodTE2KUZBQlJJQ19QT1JUIDw8IDg7Ci0KLQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQlpZiAocGFyYW1bMF0gIT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCURFQlVHX0ZBQlJJQyhwcmludGsoInFsb2dpY2ZjJWQgOiBmYWJyaWMgY2hlY2sgcmVzdWx0ICV4XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgcGFyYW1bMF0pKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXByaW50aygicWxvZ2ljZmMlZCA6IEZhYnJpYyBmb3VuZC5cbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQotCXJlcSA9IChzdHJ1Y3Qgc25zX2NiICopcGNpX2FsbG9jX2NvbnNpc3RlbnQoaG9zdGRhdGEtPnBjaV9kZXYsIHNpemVvZigqcmVxKSArIDYwOCwgJmJ1c2FkZHIpOwotCQotCWlmICghcmVxKXsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogQ291bGQgbm90IGFsbG9jYXRlIERNQSByZXNvdXJjZXMgZm9yIGZhYnJpYyBpbml0aWFsaXphdGlvblxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlyZXR1cm4gMDsKLQl9Ci0Jc25zX3Jlc3BvbnNlID0gKHVfY2hhciAqKShyZXEgKyAxKTsKLQotCWlmIChob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSAmIEFTX1JFRE9fTE9PUF9QT1JUREIpewotCSAgICAgICAgbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKLQkKLQkJcmVxLT5sZW4gPSBjcHVfdG9fbGUxNig4KTsKLQkJcmVxLT5yZXNwb25zZV9sb3cgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfbG8zMihidXNhZGRyICsgc2l6ZW9mKCpyZXEpKSk7Ci0JCXJlcS0+cmVzcG9uc2VfaGlnaCA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIgKyBzaXplb2YoKnJlcSkpKTsKLQkJcmVxLT5zdWJfbGVuID0gY3B1X3RvX2xlMTYoMjIpOwotCQlyZXEtPmRhdGFbMF0gPSAweDE3OwotCQlyZXEtPmRhdGFbMV0gPSAweDAyOwotCQlyZXEtPmRhdGFbOF0gPSAodV9jaGFyKSAoaG9zdGRhdGEtPnBvcnRfaWQgJiAweGZmKTsKLQkJcmVxLT5kYXRhWzldID0gKHVfY2hhcikgKGhvc3RkYXRhLT5wb3J0X2lkID4+IDggJiAweGZmKTsKLQkJcmVxLT5kYXRhWzEwXSA9ICh1X2NoYXIpIChob3N0ZGF0YS0+cG9ydF9pZCA+PiAxNiAmIDB4ZmYpOwotCQlyZXEtPmRhdGFbMTNdID0gMHgwMTsKLQkJcGFyYW1bMF0gPSBNQk9YX1NFTkRfU05TOwotCQlwYXJhbVsxXSA9IDMwOwotCQlwYXJhbVsyXSA9IHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpID4+IDE2OwotCQlwYXJhbVszXSA9IHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpOwotCQlwYXJhbVs2XSA9IHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIpID4+IDE2OwotCQlwYXJhbVs3XSA9IHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIpOwotCi0JCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQkKLQkJaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkKLQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBlcnJvciBzZW5kaW5nIFJGQy00XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JfQotCi0JcG9ydF9pZCA9IGhvc3RkYXRhLT5wb3J0X2lkOwotCXdoaWxlICghZG9uZSkgewotCQltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwotCi0JCXJlcS0+bGVuID0gY3B1X3RvX2xlMTYoMzA0KTsKLQkJcmVxLT5yZXNwb25zZV9sb3cgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfbG8zMihidXNhZGRyICsgc2l6ZW9mKCpyZXEpKSk7Ci0JCXJlcS0+cmVzcG9uc2VfaGlnaCA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIgKyBzaXplb2YoKnJlcSkpKTsKLQkJcmVxLT5zdWJfbGVuID0gY3B1X3RvX2xlMTYoNik7Ci0JCXJlcS0+ZGF0YVswXSA9IDB4MDA7Ci0JCXJlcS0+ZGF0YVsxXSA9IDB4MDE7Ci0JCXJlcS0+ZGF0YVs4XSA9ICh1X2NoYXIpIChwb3J0X2lkICYgMHhmZik7Ci0JCXJlcS0+ZGF0YVs5XSA9ICh1X2NoYXIpIChwb3J0X2lkID4+IDggJiAweGZmKTsKLQkJcmVxLT5kYXRhWzEwXSA9ICh1X2NoYXIpIChwb3J0X2lkID4+IDE2ICYgMHhmZik7Ci0KLQkJcGFyYW1bMF0gPSBNQk9YX1NFTkRfU05TOwotCQlwYXJhbVsxXSA9IDE0OwotCQlwYXJhbVsyXSA9IHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpID4+IDE2OwotCQlwYXJhbVszXSA9IHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpOwotCQlwYXJhbVs2XSA9IHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIpID4+IDE2OwotCQlwYXJhbVs3XSA9IHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIpOwotCi0JCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCQlpZiAocGFyYW1bMF0gPT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCQlERUJVR19GQUJSSUMocHJpbnRrKCJxbG9naWNmYyVkIDogZm91bmQgbm9kZSAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiLCBob3N0ZGF0YS0+aG9zdF9pZCwgc25zX3Jlc3BvbnNlWzIwXSwgc25zX3Jlc3BvbnNlWzIxXSwgc25zX3Jlc3BvbnNlWzIyXSwgc25zX3Jlc3BvbnNlWzIzXSwgc25zX3Jlc3BvbnNlWzI0XSwgc25zX3Jlc3BvbnNlWzI1XSwgc25zX3Jlc3BvbnNlWzI2XSwgc25zX3Jlc3BvbnNlWzI3XSkpOwotCQkJREVCVUdfRkFCUklDKHByaW50aygiICBwb3J0IGlkOiAlMDJ4JTAyeCUwMnhcbiIsIHNuc19yZXNwb25zZVsxN10sIHNuc19yZXNwb25zZVsxOF0sIHNuc19yZXNwb25zZVsxOV0pKTsKLQkJCXBvcnRfaWQgPSAoKHVfaW50KSBzbnNfcmVzcG9uc2VbMTddKSA8PCAxNjsKLQkJCXBvcnRfaWQgfD0gKCh1X2ludCkgc25zX3Jlc3BvbnNlWzE4XSkgPDwgODsKLQkJCXBvcnRfaWQgfD0gKCh1X2ludCkgc25zX3Jlc3BvbnNlWzE5XSk7Ci0JCQl3d24gPSAoKHU2NCkgc25zX3Jlc3BvbnNlWzIwXSkgPDwgNTY7Ci0JCQl3d24gfD0gKCh1NjQpIHNuc19yZXNwb25zZVsyMV0pIDw8IDQ4OwotCQkJd3duIHw9ICgodTY0KSBzbnNfcmVzcG9uc2VbMjJdKSA8PCA0MDsKLQkJCXd3biB8PSAoKHU2NCkgc25zX3Jlc3BvbnNlWzIzXSkgPDwgMzI7Ci0JCQl3d24gfD0gKCh1NjQpIHNuc19yZXNwb25zZVsyNF0pIDw8IDI0OwotCQkJd3duIHw9ICgodTY0KSBzbnNfcmVzcG9uc2VbMjVdKSA8PCAxNjsKLQkJCXd3biB8PSAoKHU2NCkgc25zX3Jlc3BvbnNlWzI2XSkgPDwgODsKLQkJCXd3biB8PSAoKHU2NCkgc25zX3Jlc3BvbnNlWzI3XSk7Ci0JCQlpZiAoaG9zdGRhdGEtPnBvcnRfaWQgPj4gOCAhPSBwb3J0X2lkID4+IDgpIHsKLQkJCQlERUJVR19GQUJSSUMocHJpbnRrKCJxbG9naWNmYyVkIDogYWRkaW5nIGEgZmFicmljIHBvcnQ6ICV4XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgcG9ydF9pZCkpOwotCQkJCXBhcmFtWzBdID0gTUJPWF9QT1JUX0xPR0lOOwotCQkJCXBhcmFtWzFdID0gbG9vcF9pZCA8PCA4OwotCQkJCXBhcmFtWzJdID0gKHVfc2hvcnQpIChwb3J0X2lkID4+IDE2KTsKLQkJCQlwYXJhbVszXSA9ICh1X3Nob3J0KSAocG9ydF9pZCk7Ci0KLQkJCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJCQlpZiAocGFyYW1bMF0gPT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCQkJCXBvcnRfZGJbc2NzaV9pZF0ud3duID0gd3duOwotCQkJCQlwb3J0X2RiW3Njc2lfaWRdLmxvb3BfaWQgPSBsb29wX2lkOwotCQkJCQlsb29wX2lkKys7Ci0JCQkJCXNjc2lfaWQrKzsKLQkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoInFsb2dpY2ZjJWQgOiBFcnJvciBwZXJmb3JtaW5nIHBvcnQgbG9naW4gJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBwYXJhbVswXSk7Ci0JCQkJCURFQlVHX0ZBQlJJQyhwcmludGsoInFsb2dpY2ZjJWQgOiBsb29wX2lkOiAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIGxvb3BfaWQpKTsKLQkJCQkJcGFyYW1bMF0gPSBNQk9YX1BPUlRfTE9HT1VUOwotCQkJCQlwYXJhbVsxXSA9IGxvb3BfaWQgPDwgODsKLQkJCQkJcGFyYW1bMl0gPSAwOwotCQkJCQlwYXJhbVszXSA9IDA7Ci0KLQkJCQkJaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCQkJCQkKLQkJCQl9Ci0KLQkJCX0KLQkJCWlmIChob3N0ZGF0YS0+cG9ydF9pZCA9PSBwb3J0X2lkKQotCQkJCWRvbmUgPSAxOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKCJxbG9naWNmYyVkIDogR2V0IEFsbCBOZXh0IGZhaWxlZCAleC5cbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBwYXJhbVswXSk7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LCBzaXplb2YoKnJlcSkgKyA2MDgsIHJlcSwgYnVzYWRkcik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaG9zdGRhdGEtPnBjaV9kZXYsIHNpemVvZigqcmVxKSArIDYwOCwgcmVxLCBidXNhZGRyKTsKLQlyZXR1cm4gMTsKLX0KLQotI2VuZGlmCQkJCS8qIElTUDJ4MDBfRkFCUklDICovCi0KLQotc3RhdGljIGludCBpc3AyeDAwX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JZG1hX2FkZHJfdCBidXNhZGRyOwotCi0JRU5URVIoImlzcDJ4MDBfcmVsZWFzZSIpOwotCi0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0KLQlvdXR3KDB4MCwgaG9zdC0+aW9fcG9ydCArIFBDSV9JTlRFUl9DVEwpOwotCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7Ci0KLQlyZWxlYXNlX3JlZ2lvbihob3N0LT5pb19wb3J0LCAweGZmKTsKLQotCWJ1c2FkZHIgPSBwY2k2NF9kbWFfYnVpbGQobGUzMl90b19jcHUoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVzX3F1ZXVlX2FkZHJfaGlnaCksCi0JCQkJICBsZTMyX3RvX2NwdShob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXNfcXVldWVfYWRkcl9sbykpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaG9zdGRhdGEtPnBjaV9kZXYsIFJFU19TSVpFICsgUkVRX1NJWkUsIGhvc3RkYXRhLT5yZXMsIGJ1c2FkZHIpOwotCi0JTEVBVkUoImlzcDJ4MDBfcmVsZWFzZSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGNvbnN0IGNoYXIgKmlzcDJ4MDBfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQotewotCXN0YXRpYyBjaGFyIGJ1Zls4MF07Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCUVOVEVSKCJpc3AyeDAwX2luZm8iKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCXNwcmludGYoYnVmLAotCQkiUUxvZ2ljIElTUCUwNHggU0NTSSBvbiBQQ0kgYnVzICUwMnggZGV2aWNlICUwMnggaXJxICVkIGJhc2UgMHglbHgiLAotCQlob3N0ZGF0YS0+cGNpX2Rldi0+ZGV2aWNlLCBob3N0ZGF0YS0+cGNpX2Rldi0+YnVzLT5udW1iZXIsIGhvc3RkYXRhLT5wY2lfZGV2LT5kZXZmbiwgaG9zdC0+aXJxLAotCQlob3N0LT5pb19wb3J0KTsKLQotCi0JTEVBVkUoImlzcDJ4MDBfaW5mbyIpOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQotCi0vKgotICogVGhlIG1pZGRsZSBTQ1NJIGxheWVyIGVuc3VyZXMgdGhhdCBxdWV1ZWNvbW1hbmQgbmV2ZXIgZ2V0cyBpbnZva2VkCi0gKiBjb25jdXJyZW50bHkgd2l0aCBpdHNlbGYgb3IgdGhlIGludGVycnVwdCBoYW5kbGVyICh0aG91Z2ggdGhlCi0gKiBpbnRlcnJ1cHQgaGFuZGxlciBtYXkgY2FsbCB0aGlzIHJvdXRpbmUgYXMgcGFydCBvZgotICogcmVxdWVzdC1jb21wbGV0aW9uIGhhbmRsaW5nKS4KLSAqLwotc3RhdGljIGludCBpc3AyeDAwX3F1ZXVlY29tbWFuZChTY3NpX0NtbmQgKiBDbW5kLCB2b2lkICgqZG9uZSkgKFNjc2lfQ21uZCAqKSkKLXsKLQlpbnQgaSwgc2dfY291bnQsIG4sIG51bV9mcmVlOwotCXVfaW50IGluX3B0ciwgb3V0X3B0cjsKLQlzdHJ1Y3QgZGF0YXNlZyAqZHM7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlzdHJ1Y3QgQ29tbWFuZF9FbnRyeSAqY21kOwotCXN0cnVjdCBDb250aW51YXRpb25fRW50cnkgKmNvbnQ7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0KLQlFTlRFUigiaXNwMngwMF9xdWV1ZWNvbW1hbmQiKTsKLQotCWhvc3QgPSBDbW5kLT5kZXZpY2UtPmhvc3Q7Ci0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0JQ21uZC0+c2NzaV9kb25lID0gZG9uZTsKLQotCURFQlVHKGlzcDJ4MDBfcHJpbnRfc2NzaV9jbWQoQ21uZCkpOwotCi0JaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19GQUJSSUNfUE9SVERCIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19MT09QX1BPUlREQikgewotCQlpc3AyeDAwX21ha2VfcG9ydGRiKGhvc3QpOwotCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0xPT1BfR09PRDsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogUG9ydCBEYXRhYmFzZVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlmb3IgKGkgPSAwOyBob3N0ZGF0YS0+cG9ydF9kYltpXS53d24gIT0gMDsgaSsrKSB7Ci0JCQlwcmludGsoInd3bjogJTA4eCUwOHggIHNjc2lfaWQ6ICV4ICBsb29wX2lkOiAiLCAodV9pbnQpIChob3N0ZGF0YS0+cG9ydF9kYltpXS53d24gPj4gMzIpLCAodV9pbnQpIGhvc3RkYXRhLT5wb3J0X2RiW2ldLnd3biwgaSk7Ci0JCQlpZiAoaG9zdGRhdGEtPnBvcnRfZGJbaV0ubG9vcF9pZCAhPSBob3N0ZGF0YS0+cG9ydF9kYlswXS5sb29wX2lkIHx8IGkgPT0gMCkKLQkJCSAgICAgICAgcHJpbnRrKCIleCIsIGhvc3RkYXRhLT5wb3J0X2RiW2ldLmxvb3BfaWQpOwotCQkJZWxzZQotCQkJICAgICAgICBwcmludGsoIk5vdCBBdmFpbGFibGUiKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotCX0KLQlpZiAoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPT0gQVNfRklSTVdBUkVfREVBRCkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBUaGUgZmlybXdhcmUgaXMgZGVhZCwganVzdCByZXR1cm4uXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCWhvc3QtPm1heF9pZCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCW91dF9wdHIgPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g0KTsKLQlpbl9wdHIgPSBob3N0ZGF0YS0+cmVxX2luX3B0cjsKLQotCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IHJlcXVlc3QgcXVldWUgZGVwdGggJWRcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLAotCQkgICAgIFJFUV9RVUVVRV9ERVBUSChpbl9wdHIsIG91dF9wdHIpKSk7Ci0KLQljbWQgPSAoc3RydWN0IENvbW1hbmRfRW50cnkgKikgJmhvc3RkYXRhLT5yZXFbaW5fcHRyKlFVRVVFX0VOVFJZX0xFTl07Ci0JaW5fcHRyID0gKGluX3B0ciArIDEpICYgUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsKLQlpZiAoaW5fcHRyID09IG91dF9wdHIpIHsKLQkJREVCVUcocHJpbnRrKCJxbG9naWNmYyVkIDogcmVxdWVzdCBxdWV1ZSBvdmVyZmxvd1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmIChob3N0ZGF0YS0+c2VuZF9tYXJrZXIpIHsKLQkJc3RydWN0IE1hcmtlcl9FbnRyeSAqbWFya2VyOwotCi0JCVRSQUNFKCJxdWV1ZSBtYXJrZXIiLCBpbl9wdHIsIDApOwotCi0JCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IGFkZGluZyBtYXJrZXIgZW50cnlcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKSk7Ci0JCW1hcmtlciA9IChzdHJ1Y3QgTWFya2VyX0VudHJ5ICopIGNtZDsKLQkJbWVtc2V0KG1hcmtlciwgMCwgc2l6ZW9mKHN0cnVjdCBNYXJrZXJfRW50cnkpKTsKLQotCQltYXJrZXItPmhkci5lbnRyeV90eXBlID0gRU5UUllfTUFSS0VSOwotCQltYXJrZXItPmhkci5lbnRyeV9jbnQgPSAxOwotCQltYXJrZXItPm1vZGlmaWVyID0gU1lOQ19BTEw7Ci0KLQkJaG9zdGRhdGEtPnNlbmRfbWFya2VyID0gMDsKLQotCQlpZiAoKChpbl9wdHIgKyAxKSAmIFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4pID09IG91dF9wdHIpIHsKLQkJCW91dHcoaW5fcHRyLCBob3N0LT5pb19wb3J0ICsgTUJPWDQpOwotCQkJaG9zdGRhdGEtPnJlcV9pbl9wdHIgPSBpbl9wdHI7Ci0JCQlERUJVRyhwcmludGsoInFsb2dpY2ZjJWQgOiByZXF1ZXN0IHF1ZXVlIG92ZXJmbG93XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJY21kID0gKHN0cnVjdCBDb21tYW5kX0VudHJ5ICopICZob3N0ZGF0YS0+cmVxW2luX3B0cipRVUVVRV9FTlRSWV9MRU5dOwotCQlpbl9wdHIgPSAoaW5fcHRyICsgMSkgJiBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOOwotCX0KLQlUUkFDRSgicXVldWUgY29tbWFuZCIsIGluX3B0ciwgQ21uZCk7Ci0KLQltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IENvbW1hbmRfRW50cnkpKTsKLQotCS8qIGZpbmQgYSBmcmVlIGhhbmRsZSBtYXBwaW5nIHNsb3QgKi8KLQlmb3IgKGkgPSBpbl9wdHI7IGkgIT0gKGluX3B0ciAtIDEpICYmIGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXTsgaSA9ICgoaSArIDEpICUgKFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gKyAxKSkpOwotCi0JaWYgKCFob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0pIHsKLQkJY21kLT5oYW5kbGUgPSBjcHVfdG9fbGUzMihpKTsKLQkJaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldID0gQ21uZDsKLQkJaG9zdGRhdGEtPmhhbmRsZV9zZXJpYWxzW2ldID0gQ21uZC0+c2VyaWFsX251bWJlcjsKLQl9IGVsc2UgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBubyBoYW5kbGUgc2xvdHMsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCXByaW50aygiaG9zdGRhdGEtPnF1ZXVlZCBpcyAleCwgaW5fcHRyOiAleFxuIiwgaG9zdGRhdGEtPnF1ZXVlZCwgaW5fcHRyKTsKLQkJZm9yIChpID0gMDsgaSA8PSBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOOyBpKyspewotCQkJaWYgKCFob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0pewotCQkJCXByaW50aygic2xvdCAlZCBoYXMgJXBcbiIsIGksIGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JY21kLT5oZHIuZW50cnlfdHlwZSA9IEVOVFJZX0NPTU1BTkQ7Ci0JY21kLT5oZHIuZW50cnlfY250ID0gMTsKLQljbWQtPnRhcmdldF9sdW4gPSBDbW5kLT5kZXZpY2UtPmx1bjsKLQljbWQtPmV4cGFuZGVkX2x1biA9IGNwdV90b19sZTE2KENtbmQtPmRldmljZS0+bHVuKTsKLSNpZiBJU1AyeDAwX1BPUlREQgotCWNtZC0+dGFyZ2V0X2lkID0gaG9zdGRhdGEtPnBvcnRfZGJbQ21uZC0+ZGV2aWNlLT5pZF0ubG9vcF9pZDsKLSNlbHNlCi0JY21kLT50YXJnZXRfaWQgPSBDbW5kLT50YXJnZXQ7Ci0jZW5kaWYKLQljbWQtPnRvdGFsX2J5dGVfY250ID0gY3B1X3RvX2xlMzIoQ21uZC0+cmVxdWVzdF9idWZmbGVuKTsKLQljbWQtPnRpbWVfb3V0ID0gMDsKLQltZW1jcHkoY21kLT5jZGIsIENtbmQtPmNtbmQsIENtbmQtPmNtZF9sZW4pOwotCi0JaWYgKENtbmQtPnVzZV9zZykgewotCQlzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgQ21uZC0+cmVxdWVzdF9idWZmZXI7Ci0JCXNnX2NvdW50ID0gcGNpX21hcF9zZyhob3N0ZGF0YS0+cGNpX2Rldiwgc2csIENtbmQtPnVzZV9zZywgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQljbWQtPnNlZ21lbnRfY250ID0gY3B1X3RvX2xlMTYoc2dfY291bnQpOwotCQlkcyA9IGNtZC0+ZGF0YXNlZzsKLQkJLyogZmlsbCBpbiBmaXJzdCB0d28gc2cgZW50cmllczogKi8KLQkJbiA9IHNnX2NvdW50OwotCQlpZiAobiA+IERBVEFTRUdTX1BFUl9DT01NQU5EKQotCQkJbiA9IERBVEFTRUdTX1BFUl9DT01NQU5EOwotCi0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJCWRzW2ldLmRfYmFzZSA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9sbzMyKHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotCQkJZHNbaV0uZF9iYXNlX2hpID0gY3B1X3RvX2xlMzIocGNpNjRfZG1hX2hpMzIoc2dfZG1hX2FkZHJlc3Moc2cpKSk7Ci0JCQlkc1tpXS5kX2NvdW50ID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOwotCQkJKytzZzsKLQkJfQotCQlzZ19jb3VudCAtPSBEQVRBU0VHU19QRVJfQ09NTUFORDsKLQotCQl3aGlsZSAoc2dfY291bnQgPiAwKSB7Ci0JCQkrK2NtZC0+aGRyLmVudHJ5X2NudDsKLQkJCWNvbnQgPSAoc3RydWN0IENvbnRpbnVhdGlvbl9FbnRyeSAqKQotCQkJICAgICZob3N0ZGF0YS0+cmVxW2luX3B0cipRVUVVRV9FTlRSWV9MRU5dOwotCQkJbWVtc2V0KGNvbnQsIDAsIHNpemVvZihzdHJ1Y3QgQ29udGludWF0aW9uX0VudHJ5KSk7Ci0JCQlpbl9wdHIgPSAoaW5fcHRyICsgMSkgJiBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOOwotCQkJaWYgKGluX3B0ciA9PSBvdXRfcHRyKSB7Ci0JCQkJREVCVUcocHJpbnRrKCJxbG9naWNmYyVkIDogdW5leHBlY3RlZCByZXF1ZXN0IHF1ZXVlIG92ZXJmbG93XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQkJVFJBQ0UoInF1ZXVlIGNvbnRpbnVhdGlvbiIsIGluX3B0ciwgMCk7Ci0JCQljb250LT5oZHIuZW50cnlfdHlwZSA9IEVOVFJZX0NPTlRJTlVBVElPTjsKLQkJCWRzID0gY29udC0+ZGF0YXNlZzsKLQkJCW4gPSBzZ19jb3VudDsKLQkJCWlmIChuID4gREFUQVNFR1NfUEVSX0NPTlQpCi0JCQkJbiA9IERBVEFTRUdTX1BFUl9DT05UOwotCQkJZm9yIChpID0gMDsgaSA8IG47ICsraSkgewotCQkJCWRzW2ldLmRfYmFzZSA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9sbzMyKHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotCQkJCWRzW2ldLmRfYmFzZV9oaSA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotCQkJCWRzW2ldLmRfY291bnQgPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7Ci0JCQkJKytzZzsKLQkJCX0KLQkJCXNnX2NvdW50IC09IG47Ci0JCX0KLQl9IGVsc2UgaWYgKENtbmQtPnJlcXVlc3RfYnVmZmxlbiAmJiBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBQQ0lfRE1BX05PTkUpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoQ21uZC0+cmVxdWVzdF9idWZmZXIpOwotCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKENtbmQtPnJlcXVlc3RfYnVmZmVyKTsKLQkJZG1hX2FkZHJfdCBidXNhZGRyID0gcGNpX21hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJICBwYWdlLCBvZmZzZXQsCi0JCQkJCQkgIENtbmQtPnJlcXVlc3RfYnVmZmxlbiwKLQkJCQkJCSAgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQlDbW5kLT5TQ3AuZG1hX2hhbmRsZSA9IGJ1c2FkZHI7Ci0KLQkJY21kLT5kYXRhc2VnWzBdLmRfYmFzZSA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpKTsKLQkJY21kLT5kYXRhc2VnWzBdLmRfYmFzZV9oaSA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIpKTsKLQkJY21kLT5kYXRhc2VnWzBdLmRfY291bnQgPSBjcHVfdG9fbGUzMihDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4pOwotCQljbWQtPnNlZ21lbnRfY250ID0gY3B1X3RvX2xlMTYoMSk7Ci0JfSBlbHNlIHsKLQkJY21kLT5kYXRhc2VnWzBdLmRfYmFzZSA9IDA7Ci0JCWNtZC0+ZGF0YXNlZ1swXS5kX2Jhc2VfaGkgPSAwOwotCQljbWQtPnNlZ21lbnRfY250ID0gY3B1X3RvX2xlMTYoMSk7IC8qIFNob3VsZG4ndCB0aGlzIGJlIDA/ICovCi0JfQotCi0JaWYgKENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCi0JCWNtZC0+Y29udHJvbF9mbGFncyA9IGNwdV90b19sZTE2KENGTEFHX1dSSVRFKTsKLQllbHNlIAotCQljbWQtPmNvbnRyb2xfZmxhZ3MgPSBjcHVfdG9fbGUxNihDRkxBR19SRUFEKTsKLQotCWlmIChDbW5kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaG9zdGRhdGEtPnRhZ19hZ2VzW0NtbmQtPmRldmljZS0+aWRdICsgKDIgKiBJU1BfVElNRU9VVCkpKSB7Ci0JCQljbWQtPmNvbnRyb2xfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoQ0ZMQUdfT1JERVJFRF9UQUcpOwotCQkJaG9zdGRhdGEtPnRhZ19hZ2VzW0NtbmQtPmRldmljZS0+aWRdID0gamlmZmllczsKLQkJfSBlbHNlCi0JCQlzd2l0Y2ggKENtbmQtPnRhZykgewotCQkJY2FzZSBIRUFEX09GX1FVRVVFX1RBRzoKLQkJCQljbWQtPmNvbnRyb2xfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoQ0ZMQUdfSEVBRF9UQUcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCQljbWQtPmNvbnRyb2xfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoQ0ZMQUdfT1JERVJFRF9UQUcpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQljbWQtPmNvbnRyb2xfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoQ0ZMQUdfU0lNUExFX1RBRyk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBURVNUX1VOSVRfUkVBRFkgY29tbWFuZHMgZnJvbSBzY3NpX3NjYW4gd2lsbCBmYWlsIGR1ZSB0byAib3ZlcmxhcHBlZAotCSAqIGNvbW1hbmRzIGF0dGVtcHRlZCIgdW5sZXNzIHdlIHNldHVwIGF0IGxlYXN0IGEgc2ltcGxlIHF1ZXVlIChtaWRsYXllciAKLQkgKiB3aWxsIGVtYmVsaXNoIHRoaXMgb25jZSBpdCBjYW4gZG8gYW4gSU5RVUlSWSBjb21tYW5kIHRvIHRoZSBkZXZpY2UpCi0JICovCi0JZWxzZQotCQljbWQtPmNvbnRyb2xfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoQ0ZMQUdfU0lNUExFX1RBRyk7Ci0Jb3V0dyhpbl9wdHIsIGhvc3QtPmlvX3BvcnQgKyBNQk9YNCk7Ci0JaG9zdGRhdGEtPnJlcV9pbl9wdHIgPSBpbl9wdHI7Ci0KLQlob3N0ZGF0YS0+cXVldWVkKys7Ci0KLQludW1fZnJlZSA9IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gLSBSRVFfUVVFVUVfREVQVEgoaW5fcHRyLCBvdXRfcHRyKTsKLQludW1fZnJlZSA9IChudW1fZnJlZSA+IDIpID8gbnVtX2ZyZWUgLSAyIDogMDsKLSAgICAgICBob3N0LT5jYW5fcXVldWUgPSBob3N0LT5ob3N0X2J1c3kgKyBudW1fZnJlZTsKLQlpZiAoaG9zdC0+Y2FuX3F1ZXVlID4gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTikKLQkJaG9zdC0+Y2FuX3F1ZXVlID0gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsKLQlob3N0LT5zZ190YWJsZXNpemUgPSBRTE9HSUNGQ19NQVhfU0cobnVtX2ZyZWUpOwotCi0JTEVBVkUoImlzcDJ4MDBfcXVldWVjb21tYW5kIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiB3ZSBoYXZlIHJlY2VpdmVkIGFuIGV2ZW50LCBzdWNoIGFzIGEgbGlwIG9yIGFuIFJTQ04sIHdoaWNoIG1heSBtZWFuIHRoYXQKLSAqIG91ciBwb3J0IGRhdGFiYXNlIGlzIGluY29ycmVjdCBzbyB0aGUgcG9ydCBkYXRhYmFzZSBtdXN0IGJlIHJlY3JlYXRlZC4KLSAqLwotc3RhdGljIHZvaWQgcmVkb19wb3J0X2RiKHVuc2lnbmVkIGxvbmcgYXJnKQotewotCi0gICAgICAgIHN0cnVjdCBTY3NpX0hvc3QgKiBob3N0ID0gKHN0cnVjdCBTY3NpX0hvc3QgKikgYXJnOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICogaG9zdGRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCWhvc3RkYXRhLT5leHBsb3JlX3RpbWVyLmRhdGEgPSAwOwotCWRlbF90aW1lcigmaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgJiBBU19SRURPX0ZBQlJJQ19QT1JUREIgfHwgaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgJiBBU19SRURPX0xPT1BfUE9SVERCKSB7Ci0JCWlzcDJ4MDBfbWFrZV9wb3J0ZGIoaG9zdCk7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IFBvcnQgRGF0YWJhc2VcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJZm9yIChpID0gMDsgaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duICE9IDA7IGkrKykgewotCQkJcHJpbnRrKCJ3d246ICUwOHglMDh4ICBzY3NpX2lkOiAleCAgbG9vcF9pZDogIiwgKHVfaW50KSAoaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duID4+IDMyKSwgKHVfaW50KSBob3N0ZGF0YS0+cG9ydF9kYltpXS53d24sIGkpOwotCQkJaWYgKGhvc3RkYXRhLT5wb3J0X2RiW2ldLmxvb3BfaWQgIT0gaG9zdGRhdGEtPnBvcnRfZGJbMF0ubG9vcF9pZCB8fCBpID09IDApCi0JCQkgICAgICAgIHByaW50aygiJXgiLCBob3N0ZGF0YS0+cG9ydF9kYltpXS5sb29wX2lkKTsKLQkJCWVsc2UKLQkJCSAgICAgICAgcHJpbnRrKCJOb3QgQXZhaWxhYmxlIik7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLQkJCi0JICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsgaSsrKXsgCi0JCSAgICAgICAgaWYgKGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXSAmJiAoaG9zdGRhdGEtPnBvcnRfZGJbaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldLT5kZXZpY2UtPmlkXS5sb29wX2lkID4gUUxPR0lDRkNfTUFYX0xPT1BfSUQgfHwgaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgJiBBU19SRURPX0xPT1BfUE9SVERCKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3N0ZGF0YS0+cG9ydF9kYltob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0tPmRldmljZS0+aWRdLmxvb3BfaWQgIT0gaG9zdGRhdGEtPnBvcnRfZGJbMF0ubG9vcF9pZCl7Ci0JCQkJCVNjc2lfQ21uZCAqQ21uZCA9IGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXTsKLQotCQkJCQkgaWYgKENtbmQtPnVzZV9zZykKLQkJCQkJCSBwY2lfdW5tYXBfc2coaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJCQkJICAgICAgKHN0cnVjdCBzY2F0dGVybGlzdCAqKUNtbmQtPmJ1ZmZlciwKLQkJCQkJCQkgICAgICBDbW5kLT51c2Vfc2csCi0JCQkJCQkJICAgICAgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQkJCQkgZWxzZSBpZiAoQ21uZC0+cmVxdWVzdF9idWZmbGVuICYmCi0JCQkJCQkgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IFBDSV9ETUFfTk9ORSkgewotCQkJCQkJIHBjaV91bm1hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJCQlDbW5kLT5TQ3AuZG1hX2hhbmRsZSwKLQkJCQkJCQkJQ21uZC0+cmVxdWVzdF9idWZmbGVuLAotCQkJCQkJCQlDbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0JCQkJCSB9Ci0KLQkJCQkJIGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXS0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7Ci0KLQkJCQkJIGlmIChob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0tPnNjc2lfZG9uZSl7Ci0JCQkJCSAgICgqaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldLT5zY3NpX2RvbmUpIChob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0pOwotCQkJCQkgfQotCQkJCQkgZWxzZSBwcmludGsoInFsb2dpY2ZjJWQgOiBkb25lIGlzIG51bGw/XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQkJCSBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0gPSBOVUxMOwotCQkJCQkgaG9zdGRhdGEtPmhhbmRsZV9zZXJpYWxzW2ldID0gMDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfTE9PUF9HT09EOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0KLX0KLQotI2RlZmluZSBBU1lOQ19FVkVOVF9JTlRFUlJVUFQJMHgwMQotCi1pcnFyZXR1cm5fdCBkb19pc3AyeDAwX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWlzcDJ4MDBfaW50cl9oYW5kbGVyKGlycSwgZGV2X2lkLCByZWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi12b2lkIGlzcDJ4MDBfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JU2NzaV9DbW5kICpDbW5kOwotCXN0cnVjdCBTdGF0dXNfRW50cnkgKnN0czsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2lkOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQl1X2ludCBpbl9wdHIsIG91dF9wdHIsIGhhbmRsZSwgbnVtX2ZyZWU7Ci0JdV9zaG9ydCBzdGF0dXM7Ci0KLQlFTlRFUl9JTlRSKCJpc3AyeDAwX2ludHJfaGFuZGxlciIpOwotCi0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0KLQlERUJVR19JTlRSKHByaW50aygicWxvZ2ljZmMlZCA6IGludGVycnVwdCBvbiBsaW5lICVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgaXJxKSk7Ci0KLQlpZiAoIShpbncoaG9zdC0+aW9fcG9ydCArIFBDSV9JTlRFUl9TVFMpICYgMHgwOCkpIHsKLQkJLyogc3B1cmlvdXMgaW50ZXJydXB0cyBjYW4gaGFwcGVuIGxlZ2FsbHkgKi8KLQkJREVCVUdfSU5UUihwcmludGsoInFsb2dpY2ZjJWQgOiBnb3Qgc3B1cmlvdXMgaW50ZXJydXB0XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCQlyZXR1cm47Ci0JfQotCWluX3B0ciA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDUpOwotCW91dF9wdHIgPSBob3N0ZGF0YS0+cmVzX291dF9wdHI7Ci0KLQlpZiAoKGludyhob3N0LT5pb19wb3J0ICsgUENJX1NFTUFQSE9SRSkgJiBBU1lOQ19FVkVOVF9JTlRFUlJVUFQpKSB7Ci0JCXN0YXR1cyA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDApOwotCi0JCURFQlVHX0lOVFIocHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCBjb21wbGV0aW9uIHN0YXR1czogJXhcbiIsCi0JCQkJICBob3N0ZGF0YS0+aG9zdF9pZCwgc3RhdHVzKSk7Ci0KLQkJc3dpdGNoIChzdGF0dXMpIHsKLQkJY2FzZSBMT09QX1VQOgotCQljYXNlIFBPSU5UX1RPX1BPSU5UX1VQOgotCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IExpbmsgaXMgVXBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfUkVET19GQUJSSUNfUE9SVERCIHwgQVNfUkVET19MT09QX1BPUlREQjsKLQkJCWJyZWFrOwotCQljYXNlIExPT1BfRE9XTjoKLQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBMaW5rIGlzIERvd25cbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfTE9PUF9ET1dOOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ09OTkVDVElPTl9NT0RFOgotCQkgICAgICAgIHByaW50aygicmVjZWl2ZWQgQ09OTkVDVElPTl9NT0RFIGlycSAleFxuIiwgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YMSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0hBTkdFX05PVElGSUNBVElPTjoKLQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBSU0NOIFJlY2VpdmVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlpZiAoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPT0gQVNfTE9PUF9HT09EKQotCQkJCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfUkVET19GQUJSSUNfUE9SVERCOwotCQkJYnJlYWs7CQkgICAgICAgIAotCQljYXNlIExJUF9PQ0NVUlJFRDoKLQkJY2FzZSBMSVBfUkVDRUlWRUQ6Ci0JCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogTG9vcCBSZWluaXRpYWxpemVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlpZiAoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPT0gQVNfTE9PUF9HT09EKQotCQkJCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfUkVET19MT09QX1BPUlREQjsKLQkJCWJyZWFrOwotCQljYXNlIFNZU1RFTV9FUlJPUjoKLQkJCXByaW50aygicWxvZ2ljZmMlZCA6IFRoZSBmaXJtd2FyZSBqdXN0IGNob2tlZC5cbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfRklSTVdBUkVfREVBRDsKLQkJCWJyZWFrOwotCQljYXNlIFNDU0lfQ09NTUFORF9DT01QTEVURToKLQkJCWhhbmRsZSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDEpIHwgKGludyhob3N0LT5pb19wb3J0ICsgTUJPWDIpIDw8IDE2KTsKLQkJCUNtbmQgPSBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaGFuZGxlXTsKLQkJCWhvc3RkYXRhLT5oYW5kbGVfcHRyc1toYW5kbGVdID0gTlVMTDsKLQkJCWhvc3RkYXRhLT5oYW5kbGVfc2VyaWFsc1toYW5kbGVdID0gMDsKLQkJCWhvc3RkYXRhLT5xdWV1ZWQtLTsKLQkJCWlmIChDbW5kICE9IE5VTEwpIHsKLQkJCQlpZiAoQ21uZC0+dXNlX3NnKQotCQkJCQlwY2lfdW5tYXBfc2coaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJCQkgICAgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilDbW5kLT5idWZmZXIsCi0JCQkJCQkgICAgIENtbmQtPnVzZV9zZywKLQkJCQkJCSAgICAgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQkJCWVsc2UgaWYgKENtbmQtPnJlcXVlc3RfYnVmZmxlbiAmJgotCQkJCQkgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gUENJX0RNQV9OT05FKQotCQkJCQlwY2lfdW5tYXBfcGFnZShob3N0ZGF0YS0+cGNpX2RldiwKLQkJCQkJCSAgICAgICBDbW5kLT5TQ3AuZG1hX2hhbmRsZSwKLQkJCQkJCSAgICAgICBDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4sCi0JCQkJCQkgICAgICAgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQkJCUNtbmQtPnJlc3VsdCA9IDB4MDsKLQkJCQkoKkNtbmQtPnNjc2lfZG9uZSkgKENtbmQpOwotCQkJfSBlbHNlCi0JCQkJcHJpbnRrKCJxbG9naWNmYyVkLmMgOiBnb3QgYSBudWxsIHZhbHVlIG91dCBvZiBoYW5kbGVfcHRycywgdGhpcyBzdWNrc1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUJPWF9DT01NQU5EX0NPTVBMRVRFOgotCQljYXNlIElOVkFMSURfQ09NTUFORDoKLQkJY2FzZSBIT1NUX0lOVEVSRkFDRV9FUlJPUjoKLQkJY2FzZSBURVNUX0ZBSUxFRDoKLQkJY2FzZSBDT01NQU5EX0VSUk9SOgotCQljYXNlIENPTU1BTkRfUEFSQU1fRVJST1I6Ci0JCWNhc2UgUE9SVF9JRF9VU0VEOgotCQljYXNlIExPT1BfSURfVVNFRDoKLQkJY2FzZSBBTExfSURTX1VTRUQ6Ci0JCQlob3N0ZGF0YS0+bWJveF9kb25lID0gMTsKLQkJCW91dHcoSENDUl9DTEVBUl9SSVNDX0lOVFIsIGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpOwotCQkJcmV0dXJuOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKCJxbG9naWNmYyVkIDogZ290IGFuIHVua25vd24gc3RhdHVzPyAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHN0YXR1cyk7Ci0JCX0KLQkJaWYgKChob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSAmIEFTX1JFRE9fTE9PUF9QT1JUREIgfHwgaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgJiBBU19SRURPX0ZBQlJJQ19QT1JUREIpICYmIGhvc3RkYXRhLT5leHBsb3JlX3RpbWVyLmRhdGEgPT0gMCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBob3N0ZGF0YS0+ZXhwbG9yZV90aW1lci5mdW5jdGlvbiA9IHJlZG9fcG9ydF9kYjsKLQkJCWhvc3RkYXRhLT5leHBsb3JlX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylob3N0OwotCQkJaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoSFovNCk7Ci0JCQlpbml0X3RpbWVyKCZob3N0ZGF0YS0+ZXhwbG9yZV90aW1lcik7Ci0JCQlhZGRfdGltZXIoJmhvc3RkYXRhLT5leHBsb3JlX3RpbWVyKTsKLQkJfQotCQlvdXR3KDB4MCwgaG9zdC0+aW9fcG9ydCArIFBDSV9TRU1BUEhPUkUpOwotCX0gZWxzZSB7Ci0JCURFQlVHX0lOVFIocHJpbnRrKCJxbG9naWNmYyVkIDogcmVzcG9uc2UgcXVldWUgdXBkYXRlXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCQlERUJVR19JTlRSKHByaW50aygicWxvZ2ljZmMlZCA6IHJlc3BvbnNlIHF1ZXVlIGRlcHRoICVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgUkVTX1FVRVVFX0RFUFRIKGluX3B0ciwgb3V0X3B0cikpKTsKLQotCQl3aGlsZSAob3V0X3B0ciAhPSBpbl9wdHIpIHsKLQkJCXVuc2lnbmVkIGxlX2hhbmQ7Ci0JCQlzdHMgPSAoc3RydWN0IFN0YXR1c19FbnRyeSAqKSAmaG9zdGRhdGEtPnJlc1tvdXRfcHRyKlFVRVVFX0VOVFJZX0xFTl07Ci0JCQlvdXRfcHRyID0gKG91dF9wdHIgKyAxKSAmIFJFU19RVUVVRV9MRU47Ci0gICAgICAgICAgICAgICAgIAotCQkJVFJBQ0UoImRvbmUiLCBvdXRfcHRyLCBDbW5kKTsKLQkJCURFQlVHX0lOVFIoaXNwMngwMF9wcmludF9zdGF0dXNfZW50cnkoc3RzKSk7Ci0JCQlsZV9oYW5kID0gbGUzMl90b19jcHUoc3RzLT5oYW5kbGUpOwotCQkJaWYgKHN0cy0+aGRyLmVudHJ5X3R5cGUgPT0gRU5UUllfU1RBVFVTICYmIChDbW5kID0gaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2xlX2hhbmRdKSkgewotCQkJCUNtbmQtPnJlc3VsdCA9IGlzcDJ4MDBfcmV0dXJuX3N0YXR1cyhDbW5kLCBzdHMpOwotCQkJCWhvc3RkYXRhLT5xdWV1ZWQtLTsKLQotCQkJCWlmIChDbW5kLT51c2Vfc2cpCi0JCQkJCXBjaV91bm1hcF9zZyhob3N0ZGF0YS0+cGNpX2RldiwKLQkJCQkJCSAgICAgKHN0cnVjdCBzY2F0dGVybGlzdCAqKUNtbmQtPmJ1ZmZlciwgQ21uZC0+dXNlX3NnLAotCQkJCQkJICAgICBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0JCQkJZWxzZSBpZiAoQ21uZC0+cmVxdWVzdF9idWZmbGVuICYmIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IFBDSV9ETUFfTk9ORSkKLQkJCQkJcGNpX3VubWFwX3BhZ2UoaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJCQkgICAgICAgQ21uZC0+U0NwLmRtYV9oYW5kbGUsCi0JCQkJCQkgICAgICAgQ21uZC0+cmVxdWVzdF9idWZmbGVuLAotCQkJCQkJICAgICAgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQotCQkJCS8qIAotCQkJCSAqIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlIHdlIGRvIG5vdAotCQkJCSAqIGNhbGwgc2NzaV9kb25lLiAgaWYgdGhlIHN0YXR1cyBpcyBDU19BQk9SVEVECi0JCQkJICogd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIGRvbmUgYmVjYXVzZSB0aGUgdXBwZXIKLQkJCQkgKiBsZXZlbCBzaG91bGQgYWxyZWFkeSBrbm93IGl0cyBhYm9ydGVkLgotCQkJCSAqLwotCQkJCWlmIChob3N0ZGF0YS0+aGFuZGxlX3NlcmlhbHNbbGVfaGFuZF0gIT0gQ21uZC0+c2VyaWFsX251bWJlciAKLQkJCQkgICAgfHwgbGUxNl90b19jcHUoc3RzLT5jb21wbGV0aW9uX3N0YXR1cykgPT0gQ1NfQUJPUlRFRCl7Ci0JCQkJCWhvc3RkYXRhLT5oYW5kbGVfc2VyaWFsc1tsZV9oYW5kXSA9IDA7Ci0JCQkJCWhvc3RkYXRhLT5oYW5kbGVfcHRyc1tsZV9oYW5kXSA9IE5VTEw7Ci0JCQkJCW91dHcob3V0X3B0ciwgaG9zdC0+aW9fcG9ydCArIE1CT1g1KTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCS8qCi0JCQkJICogaWYgd2UgZ2V0IGJhY2sgYW4gZXJyb3IgaW5kaWNhdGluZyB0aGUgcG9ydAotCQkJCSAqIGlzIG5vdCB0aGVyZSBvciBpZiB0aGUgbGluayBpcyBkb3duIGFuZCAKLQkJCQkgKiB0aGlzIGlzIGEgZGV2aWNlIHRoYXQgdXNlZCB0byBiZSB0aGVyZSAKLQkJCQkgKiBhbGxvdyB0aGUgY29tbWFuZCB0byB0aW1lb3V0LgotCQkJCSAqIHRoZSBkZXZpY2UgbWF5IHdlbGwgYmUgYmFjayBpbiBhIGNvdXBsZSBvZgotCQkJCSAqIHNlY29uZHMuCi0JCQkJICovCi0JCQkJaWYgKChob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9PSBBU19MT09QX0RPV04gfHwgc3RzLT5jb21wbGV0aW9uX3N0YXR1cyA9PSBjcHVfdG9fbGUxNihDU19QT1JUX1VOQVZBSUxBQkxFKSB8fCBzdHMtPmNvbXBsZXRpb25fc3RhdHVzID09IGNwdV90b19sZTE2KENTX1BPUlRfTE9HR0VEX09VVCkgfHwgc3RzLT5jb21wbGV0aW9uX3N0YXR1cyA9PSBjcHVfdG9fbGUxNihDU19QT1JUX0NPTkZJR19DSEFOR0VEKSkgJiYgaG9zdGRhdGEtPnBvcnRfZGJbQ21uZC0+ZGV2aWNlLT5pZF0ud3duKXsKLQkJCQkJb3V0dyhvdXRfcHRyLCBob3N0LT5pb19wb3J0ICsgTUJPWDUpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCW91dHcob3V0X3B0ciwgaG9zdC0+aW9fcG9ydCArIE1CT1g1KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2xlX2hhbmRdID0gTlVMTDsKLQotCQkJaWYgKHN0cy0+Y29tcGxldGlvbl9zdGF0dXMgPT0gY3B1X3RvX2xlMTYoQ1NfUkVTRVRfT0NDVVJSRUQpCi0JCQkgICAgfHwgKHN0cy0+c3RhdHVzX2ZsYWdzICYgY3B1X3RvX2xlMTYoU1RGX0JVU19SRVNFVCkpKQotCQkJCWhvc3RkYXRhLT5zZW5kX21hcmtlciA9IDE7Ci0KLQkJCWlmIChsZTE2X3RvX2NwdShzdHMtPnNjc2lfc3RhdHVzKSAmIDB4MDIwMCkKLQkJCQltZW1jcHkoQ21uZC0+c2Vuc2VfYnVmZmVyLCBzdHMtPnJlcV9zZW5zZV9kYXRhLAotCQkJCSAgICAgICBzaXplb2YoQ21uZC0+c2Vuc2VfYnVmZmVyKSk7Ci0KLQkJCW91dHcob3V0X3B0ciwgaG9zdC0+aW9fcG9ydCArIE1CT1g1KTsKLQotCQkJaWYgKENtbmQtPnNjc2lfZG9uZSAhPSBOVUxMKSB7Ci0JCQkJKCpDbW5kLT5zY3NpX2RvbmUpIChDbW5kKTsKLQkJCX0gZWxzZQotCQkJCXByaW50aygicWxvZ2ljZmMlZCA6IE91Y2gsIHNjc2kgZG9uZSBpcyBOVUxMXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCX0KLQkJaG9zdGRhdGEtPnJlc19vdXRfcHRyID0gb3V0X3B0cjsKLQl9Ci0KLQotCW91dF9wdHIgPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g0KTsKLQlpbl9wdHIgPSBob3N0ZGF0YS0+cmVxX2luX3B0cjsKLQotCW51bV9mcmVlID0gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiAtIFJFUV9RVUVVRV9ERVBUSChpbl9wdHIsIG91dF9wdHIpOwotCW51bV9mcmVlID0gKG51bV9mcmVlID4gMikgPyBudW1fZnJlZSAtIDIgOiAwOwotICAgICAgIGhvc3QtPmNhbl9xdWV1ZSA9IGhvc3QtPmhvc3RfYnVzeSArIG51bV9mcmVlOwotCWlmIChob3N0LT5jYW5fcXVldWUgPiBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOKQotCQlob3N0LT5jYW5fcXVldWUgPSBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOOwotCWhvc3QtPnNnX3RhYmxlc2l6ZSA9IFFMT0dJQ0ZDX01BWF9TRyhudW1fZnJlZSk7Ci0KLQlvdXR3KEhDQ1JfQ0xFQVJfUklTQ19JTlRSLCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQlMRUFWRV9JTlRSKCJpc3AyeDAwX2ludHJfaGFuZGxlciIpOwotfQotCi0KLXN0YXRpYyBpbnQgaXNwMngwMF9yZXR1cm5fc3RhdHVzKFNjc2lfQ21uZCAqQ21uZCwgc3RydWN0IFN0YXR1c19FbnRyeSAqc3RzKQotewotCWludCBob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLSNpZiBERUJVR19JU1AyeDAwX0lOVFIKLQlzdGF0aWMgY2hhciAqcmVhc29uW10gPQotCXsKLQkJIkRJRF9PSyIsCi0JCSJESURfTk9fQ09OTkVDVCIsCi0JCSJESURfQlVTX0JVU1kiLAotCQkiRElEX1RJTUVfT1VUIiwKLQkJIkRJRF9CQURfVEFSR0VUIiwKLQkJIkRJRF9BQk9SVCIsCi0JCSJESURfUEFSSVRZIiwKLQkJIkRJRF9FUlJPUiIsCi0JCSJESURfUkVTRVQiLAotCQkiRElEX0JBRF9JTlRSIgotCX07Ci0jZW5kaWYJCQkJLyogREVCVUdfSVNQMngwMF9JTlRSICovCi0KLQlFTlRFUigiaXNwMngwMF9yZXR1cm5fc3RhdHVzIik7Ci0KLQlERUJVRyhwcmludGsoInFsb2dpY2ZjIDogY29tcGxldGlvbiBzdGF0dXMgPSAweCUwNHhcbiIsCi0JCSAgICAgbGUxNl90b19jcHUoc3RzLT5jb21wbGV0aW9uX3N0YXR1cykpKTsKLQotCXN3aXRjaCAobGUxNl90b19jcHUoc3RzLT5jb21wbGV0aW9uX3N0YXR1cykpIHsKLQljYXNlIENTX0NPTVBMRVRFOgotCQlob3N0X3N0YXR1cyA9IERJRF9PSzsKLQkJYnJlYWs7Ci0JY2FzZSBDU19ETUFfRVJST1I6Ci0JCWhvc3Rfc3RhdHVzID0gRElEX0VSUk9SOwotCQlicmVhazsKLQljYXNlIENTX1JFU0VUX09DQ1VSUkVEOgotCQlob3N0X3N0YXR1cyA9IERJRF9SRVNFVDsKLQkJYnJlYWs7Ci0JY2FzZSBDU19BQk9SVEVEOgotCQlob3N0X3N0YXR1cyA9IERJRF9BQk9SVDsKLQkJYnJlYWs7Ci0JY2FzZSBDU19USU1FT1VUOgotCQlob3N0X3N0YXR1cyA9IERJRF9USU1FX09VVDsKLQkJYnJlYWs7Ci0JY2FzZSBDU19EQVRBX09WRVJSVU46Ci0JCWhvc3Rfc3RhdHVzID0gRElEX0VSUk9SOwotCQlicmVhazsKLQljYXNlIENTX0RBVEFfVU5ERVJSVU46Ci0JICAgICAgICBpZiAoQ21uZC0+dW5kZXJmbG93IDw9IChDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4gLSBsZTMyX3RvX2NwdShzdHMtPnJlc2lkdWFsKSkpCi0JCSAgICAgICAgaG9zdF9zdGF0dXMgPSBESURfT0s7Ci0JCWVsc2UKLQkJICAgICAgICBob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJYnJlYWs7Ci0JY2FzZSBDU19QT1JUX1VOQVZBSUxBQkxFOgotCWNhc2UgQ1NfUE9SVF9MT0dHRURfT1VUOgotCWNhc2UgQ1NfUE9SVF9DT05GSUdfQ0hBTkdFRDoKLQkJaG9zdF9zdGF0dXMgPSBESURfQkFEX1RBUkdFVDsKLQkJYnJlYWs7Ci0JY2FzZSBDU19RVUVVRV9GVUxMOgotCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKCJxbG9naWNmYyA6IHVua25vd24gY29tcGxldGlvbiBzdGF0dXMgMHglMDR4XG4iLAotCQkgICAgICAgbGUxNl90b19jcHUoc3RzLT5jb21wbGV0aW9uX3N0YXR1cykpOwotCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJYnJlYWs7Ci0JfQotCi0JREVCVUdfSU5UUihwcmludGsoInFsb2dpY2ZjIDogaG9zdCBzdGF0dXMgKCVzKSBzY3NpIHN0YXR1cyAleFxuIiwKLQkJCSAgcmVhc29uW2hvc3Rfc3RhdHVzXSwgbGUxNl90b19jcHUoc3RzLT5zY3NpX3N0YXR1cykpKTsKLQotCUxFQVZFKCJpc3AyeDAwX3JldHVybl9zdGF0dXMiKTsKLQotCXJldHVybiAobGUxNl90b19jcHUoc3RzLT5zY3NpX3N0YXR1cykgJiBTVEFUVVNfTUFTSykgfCAoaG9zdF9zdGF0dXMgPDwgMTYpOwotfQotCi0KLXN0YXRpYyBpbnQgaXNwMngwMF9hYm9ydChTY3NpX0NtbmQgKiBDbW5kKQotewotCXVfc2hvcnQgcGFyYW1bOF07Ci0JaW50IGk7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JaW50IHJldHVybl9zdGF0dXMgPSBTVUNDRVNTOwotCi0JRU5URVIoImlzcDJ4MDBfYWJvcnQiKTsKLQotCWhvc3QgPSBDbW5kLT5kZXZpY2UtPmhvc3Q7Ci0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsgaSsrKQotCQlpZiAoaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldID09IENtbmQpCi0JCQlicmVhazsKLQotCWlmIChpID09IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4pewotCQlyZXR1cm4gU1VDQ0VTUzsKLQl9Ci0KLQlpc3AyeDAwX2Rpc2FibGVfaXJxcyhob3N0KTsKLQotCXBhcmFtWzBdID0gTUJPWF9BQk9SVF9JT0NCOwotI2lmIElTUDJ4MDBfUE9SVERCCi0JcGFyYW1bMV0gPSAoKCh1X3Nob3J0KSBob3N0ZGF0YS0+cG9ydF9kYltDbW5kLT5kZXZpY2UtPmlkXS5sb29wX2lkKSA8PCA4KSB8IENtbmQtPmRldmljZS0+bHVuOwotI2Vsc2UKLQlwYXJhbVsxXSA9ICgoKHVfc2hvcnQpIENtbmQtPnRhcmdldCkgPDwgOCkgfCBDbW5kLT5sdW47Ci0jZW5kaWYKLQlwYXJhbVsyXSA9IGkgJiAweGZmZmY7Ci0JcGFyYW1bM10gPSBpID4+IDE2OwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBzY3NpIGFib3J0IGZhaWx1cmU6ICV4XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgcGFyYW1bMF0pOwotCQlpZiAocGFyYW1bMF0gPT0gMHg0MDA1KQotCQkJQ21uZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQlpZiAocGFyYW1bMF0gPT0gMHg0MDA2KQotCQkJQ21uZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7Ci0JCXJldHVybl9zdGF0dXMgPSBGQUlMRUQ7Ci0JfQotCi0JaWYgKHJldHVybl9zdGF0dXMgIT0gU1VDQ0VTUyl7Ci0JCXBhcmFtWzBdID0gTUJPWF9HRVRfRklSTVdBUkVfU1RBVEU7Ci0JCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogYWJvcnQgZmFpbGVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IGZpcm13YXJlIHN0YXR1cyBpcyAleCAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHBhcmFtWzBdLCBwYXJhbVsxXSk7Ci0JfQotCi0JaXNwMngwMF9lbmFibGVfaXJxcyhob3N0KTsKLQotCUxFQVZFKCJpc3AyeDAwX2Fib3J0Iik7Ci0KLQlyZXR1cm4gcmV0dXJuX3N0YXR1czsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqbiwKLQkJc2VjdG9yX3QgY2FwYWNpdHksIGludCBpcFtdKQotewotCWludCBzaXplID0gY2FwYWNpdHk7Ci0KLQlFTlRFUigiaXNwMngwMF9iaW9zcGFyYW0iKTsKLQotCWlwWzBdID0gNjQ7Ci0JaXBbMV0gPSAzMjsKLQlpcFsyXSA9IHNpemUgPj4gMTE7Ci0JaWYgKGlwWzJdID4gMTAyNCkgewotCQlpcFswXSA9IDI1NTsKLQkJaXBbMV0gPSA2MzsKLQkJaXBbMl0gPSBzaXplIC8gKGlwWzBdICogaXBbMV0pOwotCX0KLQlMRUFWRSgiaXNwMngwMF9iaW9zcGFyYW0iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfcmVzZXRfaGFyZHdhcmUoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQl1X3Nob3J0IHBhcmFtWzhdOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQlpbnQgbG9vcF9jb3VudDsKLQlkbWFfYWRkcl90IGJ1c2FkZHI7Ci0KLQlFTlRFUigiaXNwMngwMF9yZXNldF9oYXJkd2FyZSIpOwotCi0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0KLQkvKgotCSAqCVRoaXMgY2Fubm90IGJlIHJpZ2h0IC0gUENJIHdyaXRlcyBhcmUgcG9zdGVkCi0JICoJKGFwcGFyZW50bHkgdGhpcyBpcyBoYXJkd2FyZSBkZXNpZ24gZmxhdyBub3Qgc29mdHdhcmUgPykKLQkgKi8KLQkgCi0Jb3V0dygweDAxLCBob3N0LT5pb19wb3J0ICsgSVNQX0NUUkxfU1RBVFVTKTsKLQl1ZGVsYXkoMTAwKTsKLQlvdXR3KEhDQ1JfUkVTRVQsIGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpOwotCXVkZWxheSgxMDApOwotCW91dHcoSENDUl9SRUxFQVNFLCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQlvdXR3KEhDQ1JfQklPU19ESVNBQkxFLCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQotCWxvb3BfY291bnQgPSBERUZBVUxUX0xPT1BfQ09VTlQ7Ci0Jd2hpbGUgKC0tbG9vcF9jb3VudCAmJiBpbncoaG9zdC0+aW9fcG9ydCArIEhPU1RfSENDUikgPT0gUklTQ19CVVNZKSB7Ci0JCWJhcnJpZXIoKTsKLQkJY3B1X3JlbGF4KCk7Ci0JfQotCWlmICghbG9vcF9jb3VudCkKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogcmVzZXRfaGFyZHdhcmUgbG9vcCB0aW1lb3V0XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0KLQotCi0jaWYgREVCVUdfSVNQMngwMAotCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggMCAweCUwNHggXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDApKTsKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDEgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gxKSk7Ci0JcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCAyIDB4JTA0eCBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YMikpOwotCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggMyAweCUwNHggXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDMpKTsKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDQgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g0KSk7Ci0JcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCA1IDB4JTA0eCBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNSkpOwotCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggNiAweCUwNHggXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDYpKTsKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDcgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g3KSk7Ci0jZW5kaWYJCQkJLyogREVCVUdfSVNQMngwMCAqLwotCi0JREVCVUcocHJpbnRrKCJxbG9naWNmYyVkIDogdmVyaWZ5aW5nIGNoZWNrc3VtXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NTSV9RTE9HSUNfRkNfRklSTVdBUkUpCi0JewotCQlpbnQgaTsKLQkJdW5zaWduZWQgc2hvcnQgKiByaXNjX2NvZGUgPSBOVUxMOwotCQl1bnNpZ25lZCBzaG9ydCByaXNjX2NvZGVfbGVuID0gMDsKLQkJaWYgKGhvc3RkYXRhLT5wY2lfZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjEwMCl7Ci0JCSAgICAgICAgcmlzY19jb2RlID0gcmlzY19jb2RlMjEwMDsKLQkJCXJpc2NfY29kZV9sZW4gPSByaXNjX2NvZGVfbGVuZ3RoMjEwMDsKLQkJfQotCQllbHNlIGlmIChob3N0ZGF0YS0+cGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIyMDApewotCQkgICAgICAgIHJpc2NfY29kZSA9IHJpc2NfY29kZTIyMDA7Ci0JCQlyaXNjX2NvZGVfbGVuID0gcmlzY19jb2RlX2xlbmd0aDIyMDA7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgcmlzY19jb2RlX2xlbjsgaSsrKSB7Ci0JCQlwYXJhbVswXSA9IE1CT1hfV1JJVEVfUkFNX1dPUkQ7Ci0JCQlwYXJhbVsxXSA9IHJpc2NfY29kZV9hZGRyMDEgKyBpOwotCQkJcGFyYW1bMl0gPSByaXNjX2NvZGVbaV07Ci0KLQkJCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCQkJaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQkJCXByaW50aygicWxvZ2ljZmMlZCA6IGZpcm13YXJlIGxvYWQgZmFpbHVyZVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmCQkJCS8qIFJFTE9BRF9GSVJNV0FSRSAqLwotCi0JcGFyYW1bMF0gPSBNQk9YX1ZFUklGWV9DSEVDS1NVTTsKLQlwYXJhbVsxXSA9IHJpc2NfY29kZV9hZGRyMDE7Ci0KLQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQlpZiAocGFyYW1bMF0gIT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IHJhbSBjaGVja3N1bSBmYWlsdXJlXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCXJldHVybiAxOwotCX0KLQlERUJVRyhwcmludGsoInFsb2dpY2ZjJWQgOiBleGVjdXRpbmcgZmlybXdhcmVcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKSk7Ci0KLQlwYXJhbVswXSA9IE1CT1hfRVhFQ19GSVJNV0FSRTsKLQlwYXJhbVsxXSA9IHJpc2NfY29kZV9hZGRyMDE7Ci0KLQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQlwYXJhbVswXSA9IE1CT1hfQUJPVVRfRklSTVdBUkU7Ci0KLQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQlpZiAocGFyYW1bMF0gIT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IGFib3V0IGZpcm13YXJlIGZhaWx1cmVcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJcmV0dXJuIDE7Ci0JfQotCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IGZpcm13YXJlIG1ham9yIHJldmlzaW9uICVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIHBhcmFtWzFdKSk7Ci0JREVCVUcocHJpbnRrKCJxbG9naWNmYyVkIDogZmlybXdhcmUgbWlub3IgcmV2aXNpb24gJWRcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgcGFyYW1bMl0pKTsKLQotI2lmZGVmIFVTRV9OVlJBTV9ERUZBVUxUUwotCi0JaWYgKGlzcDJ4MDBfZ2V0X252cmFtX2RlZmF1bHRzKGhvc3QsICZob3N0ZGF0YS0+Y29udHJvbF9ibG9jaykgIT0gMCkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBDb3VsZCBub3QgcmVhZCBmcm9tIE5WUkFNXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JfQotI2VuZGlmCi0KLQlob3N0ZGF0YS0+d3duID0gKHU2NCkgKGNwdV90b19sZTE2KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVswXSkpIDw8IDU2OwotCWhvc3RkYXRhLT53d24gfD0gKHU2NCkgKGNwdV90b19sZTE2KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVswXSkgJiAweGZmMDApIDw8IDQ4OwotCWhvc3RkYXRhLT53d24gfD0gKHU2NCkgKGNwdV90b19sZTE2KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVsxXSkgJiAweGZmMDApIDw8IDI0OwotCWhvc3RkYXRhLT53d24gfD0gKHU2NCkgKGNwdV90b19sZTE2KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVsxXSkgJiAweDAwZmYpIDw8IDQ4OwotCWhvc3RkYXRhLT53d24gfD0gKHU2NCkgKGNwdV90b19sZTE2KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVsyXSkgJiAweDAwZmYpIDw8IDI0OwotCWhvc3RkYXRhLT53d24gfD0gKHU2NCkgKGNwdV90b19sZTE2KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVsyXSkgJiAweGZmMDApIDw8IDg7Ci0JaG9zdGRhdGEtPnd3biB8PSAodTY0KSAoY3B1X3RvX2xlMTYoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subm9kZV9uYW1lWzNdKSAmIDB4MDBmZikgPDwgODsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbM10pICYgMHhmZjAwKSA+PiA4OwotCi0JLyogRklYTUU6IElmIHRoZSBETUEgdHJhbnNmZXIgZ29lcyBvbmUgd2F5IG9ubHksIHRoaXMgc2hvdWxkIHVzZQotCSAqICAgICAgICBQQ0lfRE1BX1RPREVWSUNFIGFuZCBiZWxvdyBhcyB3ZWxsLgotCSAqLwotCWJ1c2FkZHIgPSBwY2lfbWFwX3BhZ2UoaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkgICAgICAgdmlydF90b19wYWdlKCZob3N0ZGF0YS0+Y29udHJvbF9ibG9jayksCi0JCQkgICAgICAgb2Zmc2V0X2luX3BhZ2UoJmhvc3RkYXRhLT5jb250cm9sX2Jsb2NrKSwKLQkJCSAgICAgICBzaXplb2YoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2spLAotCQkJICAgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0KLQlwYXJhbVswXSA9IE1CT1hfSU5JVF9GSVJNV0FSRTsKLQlwYXJhbVsyXSA9ICh1X3Nob3J0KSAocGNpNjRfZG1hX2xvMzIoYnVzYWRkcikgPj4gMTYpOwotCXBhcmFtWzNdID0gKHVfc2hvcnQpIChwY2k2NF9kbWFfbG8zMihidXNhZGRyKSAmIDB4ZmZmZik7Ci0JcGFyYW1bNF0gPSAwOwotCXBhcmFtWzVdID0gMDsKLQlwYXJhbVs2XSA9ICh1X3Nob3J0KSAocGNpNjRfZG1hX2hpMzIoYnVzYWRkcikgPj4gMTYpOwotCXBhcmFtWzddID0gKHVfc2hvcnQpIChwY2k2NF9kbWFfaGkzMihidXNhZGRyKSAmIDB4ZmZmZik7Ci0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkLmM6IE91Y2ggMHglMDR4XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIHBhcmFtWzBdKTsKLQkJcGNpX3VubWFwX3BhZ2UoaG9zdGRhdGEtPnBjaV9kZXYsIGJ1c2FkZHIsCi0JCQkgICAgICAgc2l6ZW9mKGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrKSwKLQkJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcGFyYW1bMF0gPSBNQk9YX0dFVF9GSVJNV0FSRV9TVEFURTsKLQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2ZjJWQuYzogMHglMDR4XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIHBhcmFtWzBdKTsKLQkJcGNpX3VubWFwX3BhZ2UoaG9zdGRhdGEtPnBjaV9kZXYsIGJ1c2FkZHIsCi0JCQkgICAgICAgc2l6ZW9mKGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrKSwKLQkJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwY2lfdW5tYXBfcGFnZShob3N0ZGF0YS0+cGNpX2RldiwgYnVzYWRkciwKLQkJICAgICAgIHNpemVvZihob3N0ZGF0YS0+Y29udHJvbF9ibG9jayksCi0JCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCUxFQVZFKCJpc3AyeDAwX3Jlc2V0X2hhcmR3YXJlIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIFVTRV9OVlJBTV9ERUZBVUxUUwotCi1zdGF0aWMgaW50IGlzcDJ4MDBfZ2V0X252cmFtX2RlZmF1bHRzKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBpbml0X2NiICpjb250cm9sX2Jsb2NrKQotewotCi0JdV9zaG9ydCB2YWx1ZTsKLQlpZiAoaXNwMngwMF9yZWFkX252cmFtX3dvcmQoaG9zdCwgMCkgIT0gMHg1MzQ5KQotCQlyZXR1cm4gMTsKLQotCXZhbHVlID0gaXNwMngwMF9yZWFkX252cmFtX3dvcmQoaG9zdCwgOCk7Ci0JY29udHJvbF9ibG9jay0+bm9kZV9uYW1lWzBdID0gY3B1X3RvX2xlMTYoaXNwMngwMF9yZWFkX252cmFtX3dvcmQoaG9zdCwgOSkpOwotCWNvbnRyb2xfYmxvY2stPm5vZGVfbmFtZVsxXSA9IGNwdV90b19sZTE2KGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDEwKSk7Ci0JY29udHJvbF9ibG9jay0+bm9kZV9uYW1lWzJdID0gY3B1X3RvX2xlMTYoaXNwMngwMF9yZWFkX252cmFtX3dvcmQoaG9zdCwgMTEpKTsKLQljb250cm9sX2Jsb2NrLT5ub2RlX25hbWVbM10gPSBjcHVfdG9fbGUxNihpc3AyeDAwX3JlYWRfbnZyYW1fd29yZChob3N0LCAxMikpOwotCWNvbnRyb2xfYmxvY2stPmhhcmRfYWRkciA9IGNwdV90b19sZTE2KGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDEzKSk7Ci0KLQlyZXR1cm4gMDsKLQotfQotCi0jZW5kaWYKLQotc3RhdGljIGludCBpc3AyeDAwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqc2gpCi17Ci0JdV9sb25nIGlvX2Jhc2U7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCXVfY2hhciByZXZpc2lvbjsKLQl1X2ludCBpcnE7Ci0JdV9zaG9ydCBjb21tYW5kOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCi0KLQlFTlRFUigiaXNwMngwMF9pbml0Iik7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqKSBzaC0+aG9zdGRhdGE7Ci0JcGRldiA9IGhvc3RkYXRhLT5wY2lfZGV2OwotCi0JaWYgKHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCkKLQkgIHx8IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnJldmlzaW9uKSkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBlcnJvciByZWFkaW5nIFBDSSBjb25maWd1cmF0aW9uXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCXJldHVybiAxOwotCX0KLQlpb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwotCWlycSA9IHBkZXYtPmlycTsKLQotCi0JaWYgKHBkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX1FMT0dJQykgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiAweCUwNHggaXMgbm90IFFMb2dpYyB2ZW5kb3IgSURcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAKLQkJICAgICAgIHBkZXYtPnZlbmRvcik7Ci0JCXJldHVybiAxOwotCX0KLQlpZiAocGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIxMDAgJiYgcGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIyMDApIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogMHglMDR4IGRvZXMgbm90IG1hdGNoIElTUDIxMDAgb3IgSVNQMjIwMCBkZXZpY2UgaWRcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAKLQkJICAgICAgIHBkZXYtPmRldmljZSk7Ci0JCXJldHVybiAxOwotCX0KLQlpZiAoIShjb21tYW5kICYgUENJX0NPTU1BTkRfSU8pIHx8Ci0JICAgICEocGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBpL28gbWFwcGluZyBpcyBkaXNhYmxlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlpZiAocmV2aXNpb24gIT0gSVNQMjEwMF9SRVZfSUQxICYmIHJldmlzaW9uICE9IElTUDIxMDBfUkVWX0lEMyAmJiByZXZpc2lvbiAhPSBJU1AyMjAwX1JFVl9JRDUpCi0JCXByaW50aygicWxvZ2ljZmMlZCA6IG5ldyBpc3AyeDAwIHJldmlzaW9uIElEICglZClcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgcmV2aXNpb24pOwotCi0KLQlob3N0ZGF0YS0+cmV2aXNpb24gPSByZXZpc2lvbjsKLQotCXNoLT5pcnEgPSBpcnE7Ci0Jc2gtPmlvX3BvcnQgPSBpb19iYXNlOwotCi0JTEVBVkUoImlzcDJ4MDBfaW5pdCIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZiBVU0VfTlZSQU1fREVGQVVMVFMKLQotI2RlZmluZSBOVlJBTV9ERUxBWSgpIHVkZWxheSgxMCkJLyogMTAgbWljcm9zZWNvbmQgZGVsYXkgKi8KLQotCi11X3Nob3J0IGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKHN0cnVjdCBTY3NpX0hvc3QgKiBob3N0LCB1X3Nob3J0IGJ5dGUpCi17Ci0JaW50IGk7Ci0JdV9zaG9ydCB2YWx1ZSwgb3V0cHV0LCBpbnB1dDsKLQotCW91dHcoMHgyLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQlOVlJBTV9ERUxBWSgpOwotCW91dHcoMHgzLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQlOVlJBTV9ERUxBWSgpOwotCi0JYnl0ZSAmPSAweGZmOwotCWJ5dGUgfD0gMHgwNjAwOwotCWZvciAoaSA9IDEwOyBpID49IDA7IGktLSkgewotCQlvdXRwdXQgPSAoKGJ5dGUgPj4gaSkgJiAweDEpID8gMHg0IDogMHgwOwotCQlvdXR3KG91dHB1dCB8IDB4MiwgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JCU5WUkFNX0RFTEFZKCk7Ci0JCW91dHcob3V0cHV0IHwgMHgzLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQkJTlZSQU1fREVMQVkoKTsKLQkJb3V0dyhvdXRwdXQgfCAweDIsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfTlZSQU0pOwotCQlOVlJBTV9ERUxBWSgpOwotCX0KLQotCWZvciAoaSA9IDB4ZiwgdmFsdWUgPSAwOyBpID49IDA7IGktLSkgewotCQl2YWx1ZSA8PD0gMTsKLQkJb3V0dygweDMsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfTlZSQU0pOwotCQlOVlJBTV9ERUxBWSgpOwotCQlpbnB1dCA9IGludyhob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQkJTlZSQU1fREVMQVkoKTsKLQkJb3V0dygweDIsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfTlZSQU0pOwotCQlOVlJBTV9ERUxBWSgpOwotCQlpZiAoaW5wdXQgJiAweDgpCi0JCQl2YWx1ZSB8PSAxOwotCX0KLQotCW91dHcoMHgwLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQlOVlJBTV9ERUxBWSgpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0KLSNlbmRpZgkJCQkvKiBVU0VfTlZSQU1fREVGQVVMVFMgKi8KLQotCi0KLS8qCi0gKiBjdXJyZW50bHksIHRoaXMgaXMgb25seSBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGFib3J0L3Jlc2V0LAotICogYXQgd2hpY2ggdGltZXMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNvIHBvbGxpbmcgaXMgT0ssIEkgZ3Vlc3MuLi4KLSAqLwotc3RhdGljIGludCBpc3AyeDAwX21ib3hfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCB1X3Nob3J0IHBhcmFtW10pCi17Ci0JaW50IGxvb3BfY291bnQ7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dID09IDAgfHwgaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPT0gQVNfRklSTVdBUkVfREVBRCkKLQkJcmV0dXJuIDE7Ci0KLQlsb29wX2NvdW50ID0gREVGQVVMVF9MT09QX0NPVU5UOwotCXdoaWxlICgtLWxvb3BfY291bnQgJiYgaW53KGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpICYgMHgwMDgwKSB7Ci0JCWJhcnJpZXIoKTsKLQkJY3B1X3JlbGF4KCk7Ci0JfQotCWlmICghbG9vcF9jb3VudCkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94X2NvbW1hbmQgbG9vcCB0aW1lb3V0ICMxXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCXBhcmFtWzBdID0gMHg0MDA2OwotCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0ZJUk1XQVJFX0RFQUQ7Ci0JCXJldHVybiAxOwotCX0KLQlob3N0ZGF0YS0+bWJveF9kb25lID0gMDsKLQotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSA9PSAwKQotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBpbnZhbGlkIG1ib3ggY29tbWFuZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCi0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHg4MCkKLQkJb3V0dyhwYXJhbVs3XSwgaG9zdC0+aW9fcG9ydCArIE1CT1g3KTsKLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gJiAweDQwKQotCQlvdXR3KHBhcmFtWzZdLCBob3N0LT5pb19wb3J0ICsgTUJPWDYpOwotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSAmIDB4MjApCi0JCW91dHcocGFyYW1bNV0sIGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHgxMCkKLQkJb3V0dyhwYXJhbVs0XSwgaG9zdC0+aW9fcG9ydCArIE1CT1g0KTsKLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gJiAweDA4KQotCQlvdXR3KHBhcmFtWzNdLCBob3N0LT5pb19wb3J0ICsgTUJPWDMpOwotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSAmIDB4MDQpCi0JCW91dHcocGFyYW1bMl0sIGhvc3QtPmlvX3BvcnQgKyBNQk9YMik7Ci0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHgwMikKLQkJb3V0dyhwYXJhbVsxXSwgaG9zdC0+aW9fcG9ydCArIE1CT1gxKTsKLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gJiAweDAxKQotCQlvdXR3KHBhcmFtWzBdLCBob3N0LT5pb19wb3J0ICsgTUJPWDApOwotCi0KLQlvdXR3KEhDQ1JfU0VUX0hPU1RfSU5UUiwgaG9zdC0+aW9fcG9ydCArIEhPU1RfSENDUik7Ci0KLQl3aGlsZSAoMSkgewotCQlsb29wX2NvdW50ID0gREVGQVVMVF9MT09QX0NPVU5UOwotCQl3aGlsZSAoLS1sb29wX2NvdW50ICYmICEoaW53KGhvc3QtPmlvX3BvcnQgKyBQQ0lfSU5URVJfU1RTKSAmIDB4MDgpKSB7IAotCQkJYmFycmllcigpOwotCQkJY3B1X3JlbGF4KCk7Ci0JCX0KLQotCQlpZiAoIWxvb3BfY291bnQpIHsKLQkJCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfRklSTVdBUkVfREVBRDsKLQkJCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3hfY29tbWFuZCBsb29wIHRpbWVvdXQgIzJcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlzcDJ4MDBfaW50cl9oYW5kbGVyKGhvc3QtPmlycSwgaG9zdCwgTlVMTCk7Ci0KLQkJaWYgKGhvc3RkYXRhLT5tYm94X2RvbmUgPT0gMSkKLQkJCWJyZWFrOwotCi0JfQotCi0JbG9vcF9jb3VudCA9IERFRkFVTFRfTE9PUF9DT1VOVDsKLQl3aGlsZSAoLS1sb29wX2NvdW50ICYmIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDApID09IDB4MDQpIHsKLQkJYmFycmllcigpOwotCQljcHVfcmVsYXgoKTsKLQl9Ci0JaWYgKCFsb29wX2NvdW50KQotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94X2NvbW1hbmQgbG9vcCB0aW1lb3V0ICMzXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0KLQlwYXJhbVs3XSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDcpOwotCXBhcmFtWzZdID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNik7Ci0JcGFyYW1bNV0gPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g1KTsKLQlwYXJhbVs0XSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDQpOwotCXBhcmFtWzNdID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YMyk7Ci0JcGFyYW1bMl0gPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gyKTsKLQlwYXJhbVsxXSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDEpOwotCXBhcmFtWzBdID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YMCk7Ci0KLQotCW91dHcoMHgwLCBob3N0LT5pb19wb3J0ICsgUENJX1NFTUFQSE9SRSk7Ci0KLQlpZiAoaW53KGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpICYgMHgwMDgwKSB7Ci0JCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfRklSTVdBUkVfREVBRDsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCBvcCBpcyBzdGlsbCBwZW5kaW5nXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jaWYgREVCVUdfSVNQMngwMF9JTlRSCi0KLXZvaWQgaXNwMngwMF9wcmludF9zdGF0dXNfZW50cnkoc3RydWN0IFN0YXR1c19FbnRyeSAqc3RhdHVzKQotewotCXByaW50aygicWxvZ2ljZmMgOiBlbnRyeSBjb3VudCA9IDB4JTAyeCwgdHlwZSA9IDB4JTAyeCwgZmxhZ3MgPSAweCUwMnhcbiIsIAotCXN0YXR1cy0+aGRyLmVudHJ5X2NudCwgc3RhdHVzLT5oZHIuZW50cnlfdHlwZSwgc3RhdHVzLT5oZHIuZmxhZ3MpOwotCXByaW50aygicWxvZ2ljZmMgOiBzY3NpIHN0YXR1cyA9IDB4JTA0eCwgY29tcGxldGlvbiBzdGF0dXMgPSAweCUwNHhcbiIsCi0JICAgICAgIGxlMTZfdG9fY3B1KHN0YXR1cy0+c2NzaV9zdGF0dXMpLCBsZTE2X3RvX2NwdShzdGF0dXMtPmNvbXBsZXRpb25fc3RhdHVzKSk7Ci0JcHJpbnRrKCJxbG9naWNmYyA6IHN0YXRlIGZsYWdzID0gMHglMDR4LCBzdGF0dXMgZmxhZ3MgPSAweCUwNHhcbiIsIAotCSAgICAgICBsZTE2X3RvX2NwdShzdGF0dXMtPnN0YXRlX2ZsYWdzKSwgbGUxNl90b19jcHUoc3RhdHVzLT5zdGF0dXNfZmxhZ3MpKTsKLQlwcmludGsoInFsb2dpY2ZjIDogcmVzcG9uc2UgaW5mbyBsZW5ndGggPSAweCUwNHgsIHJlcXVlc3Qgc2Vuc2UgbGVuZ3RoID0gMHglMDR4XG4iLAotCSAgICAgICBsZTE2X3RvX2NwdShzdGF0dXMtPnJlc19pbmZvX2xlbiksIGxlMTZfdG9fY3B1KHN0YXR1cy0+cmVxX3NlbnNlX2xlbikpOwotCXByaW50aygicWxvZ2ljZmMgOiByZXNpZHVhbCB0cmFuc2ZlciBsZW5ndGggPSAweCUwOHgsIHJlc3BvbnNlID0gMHglMDJ4XG4iLCBsZTMyX3RvX2NwdShzdGF0dXMtPnJlc2lkdWFsKSwgc3RhdHVzLT5yZXNfaW5mb1szXSk7Ci0KLX0KLQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHX0lTUDJ4MDBfSU5UUiAqLwotCi0KLSNpZiBERUJVR19JU1AyeDAwCi0KLXZvaWQgaXNwMngwMF9wcmludF9zY3NpX2NtZChTY3NpX0NtbmQgKiBjbWQpCi17Ci0JaW50IGk7Ci0KLQlwcmludGsoInFsb2dpY2ZjIDogdGFyZ2V0ID0gMHglMDJ4LCBsdW4gPSAweCUwMngsIGNtZF9sZW4gPSAweCUwMnhcbiIsIAotCSAgICAgICBjbWQtPnRhcmdldCwgY21kLT5sdW4sIGNtZC0+Y21kX2xlbik7Ci0JcHJpbnRrKCJxbG9naWNmYyA6IGNvbW1hbmQgPSAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jbWRfbGVuOyBpKyspCi0JCXByaW50aygiMHglMDJ4ICIsIGNtZC0+Y21uZFtpXSk7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi0jZW5kaWYJCQkJLyogREVCVUdfSVNQMngwMCAqLwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKLSAgICAgICAgLmRldGVjdCAgICAgICAgICAgICAgICAgPSBpc3AyeDAwX2RldGVjdCwKLSAgICAgICAgLnJlbGVhc2UgICAgICAgICAgICAgICAgPSBpc3AyeDAwX3JlbGVhc2UsCi0gICAgICAgIC5pbmZvICAgICAgICAgICAgICAgICAgID0gaXNwMngwMF9pbmZvLAotICAgICAgICAucXVldWVjb21tYW5kICAgICAgICAgICA9IGlzcDJ4MDBfcXVldWVjb21tYW5kLAotICAgICAgICAuZWhfYWJvcnRfaGFuZGxlciAgICAgICA9IGlzcDJ4MDBfYWJvcnQsCi0gICAgICAgIC5iaW9zX3BhcmFtICAgICAgICAgICAgID0gaXNwMngwMF9iaW9zcGFyYW0sCi0gICAgICAgIC5jYW5fcXVldWUgICAgICAgICAgICAgID0gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiwKLSAgICAgICAgLnRoaXNfaWQgICAgICAgICAgICAgICAgPSAtMSwKLSAgICAgICAgLnNnX3RhYmxlc2l6ZSAgICAgICAgICAgPSBRTE9HSUNGQ19NQVhfU0coUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiksCi0JLmNtZF9wZXJfbHVuCQk9IFFMT0dJQ0ZDX0NNRF9QRVJfTFVOLAotICAgICAgICAudXNlX2NsdXN0ZXJpbmcgICAgICAgICA9IEVOQUJMRV9DTFVTVEVSSU5HLAotfTsKLSNpbmNsdWRlICJzY3NpX21vZHVsZS5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Fsb2dpY2ZjX2FzbS5jIGIvZHJpdmVycy9zY3NpL3Fsb2dpY2ZjX2FzbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWQ0NTEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNmY19hc20uYworKysgL2Rldi9udWxsCkBAIC0xLDk3NTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCQkJCQkqCi0gKiAJIC0tLSBJU1AyMTAwIEZhYnJpYyBJbml0aWF0b3IvVGFyZ2V0IEZpcm13YXJlIC0tLSAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgIHdpdGggZXhwYW5kZWQgTFVOIGFkZHJlc3NpbmcgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgIGFuZCBGY1RhcGUgKEZDUC0yKSBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqCQkJCQkJCQkJKgotICoJCQkJCQkJCQkqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIENvcHlyaWdodCAoQykgMjAwMCBhbmQgMjAwMSBRbG9naWMgQ29ycG9yYXRpb24gCi0gICh3d3cucWxvZ2ljLmNvbSkKLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICoJRmlybXdhcmUgVmVyc2lvbiAxLjE5LjE2ICgxMDozNiBOb3YgMDIsIDIwMDApCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZV9hZGRyMDEgPSAweDEwMDAgOwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2xlbmd0aDIxMDAgPSAweDkyNjA7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlMjEwMFtdID0gewotCTB4MDA3OCwgMHgxMDJkLCAweDAwMDAsIDB4OTI2MCwgMHgwMDAwLCAweDAwMDEsIDB4MDAxMywgMHgwMDEwLAotCTB4MDAxNywgMHgyMDQzLCAweDRmNTAsIDB4NTk1MiwgMHg0OTQ3LCAweDQ4NTQsIDB4MjAzMSwgMHgzOTM5LAotCTB4MzkyMCwgMHg1MTRjLCAweDRmNDcsIDB4NDk0MywgMHgyMDQzLCAweDRmNTIsIDB4NTA0ZiwgMHg1MjQxLAotCTB4NTQ0OSwgMHg0ZjRlLCAweDIwNDksIDB4NTM1MCwgMHgzMjMxLCAweDMwMzAsIDB4MjA0NiwgMHg2OTcyLAotCTB4NmQ3NywgMHg2MTcyLCAweDY1MjAsIDB4MjA1NiwgMHg2NTcyLCAweDczNjksIDB4NmY2ZSwgMHgyMDMwLAotCTB4MzEyZSwgMHgzMTM5LCAweDIwMjAsIDB4MjAyMCwgMHgyNDAwLCAweDIwOTEsIDB4MjAwMCwgMHgyMGMxLAotCTB4MDAyMSwgMHgyMDM5LCAweGZmZmYsIDB4MjAxOSwgMHhhYWFhLCAweDI3NjAsIDB4MjA2OSwgMHg3ZmZmLAotCTB4MjBjMSwgMHgwMDIwLCAweDJjMmMsIDB4MmQzNCwgMHgyNzYyLCAweDIzNmEsIDB4MmMyNCwgMHgyZDA0LAotCTB4MjY2YSwgMHgyNTYyLCAweGE0MDYsIDB4MDBjMCwgMHgxMDUyLCAweDIwYzEsIDB4MDAyMSwgMHgyYzJjLAotCTB4MjM2MiwgMHgyYzA0LCAweDI1NjIsIDB4YTMwNiwgMHgwMDQwLCAweDEwNTIsIDB4MjBjMSwgMHgwMDIwLAotCTB4MjAzOSwgMHg4ZmZmLCAweDIwYTEsIDB4YWEwMCwgMHgyNzA4LCAweDgxMGQsIDB4ODEwZCwgMHg4MTBkLAotCTB4ODEwZCwgMHhhMThjLCAweDAwMGYsIDB4MjAwMSwgMHgwMDBhLCAweGExMTIsIDB4YTAwZSwgMHgyMWE4LAotCTB4NDFhNCwgMHgzNDAwLCAweDgyMTEsIDB4MDBjMCwgMHgxMDVmLCAweDI3MDgsIDB4MzQwMCwgMHhhMTAyLAotCTB4MDA0MCwgMHgxMDZmLCAweDAwNDgsIDB4MTA2ZiwgMHgyMGE4LCAweGEwMGUsIDB4NDFhNCwgMHgyMGExLAotCTB4YTI2MCwgMHgyMDA5LCAweDAwMDAsIDB4MjBhOSwgMHgwN2EwLCAweDQxYTQsIDB4MzQwMCwgMHgyMGM5LAotCTB4YTdmZiwgMHgyMDU5LCAweDAwMDAsIDB4MmI3OCwgMHg3ODIzLCAweDAwMDQsIDB4MjA4OSwgMHgyNTVkLAotCTB4MjA1MSwgMHhhMzAwLCAweDJhNzAsIDB4Nzc1ZSwgMHhhNzg2LCAweDhmZmYsIDB4MDA0MCwgMHgxMDkyLAotCTB4NzA1YiwgMHhjYTAwLCAweDcwNTcsIDB4YzlmMSwgMHg3MDYzLCAweDAyMDAsIDB4NzA2NywgMHgwMjAwLAotCTB4MDA3OCwgMHgxMDlhLCAweDcwNTcsIDB4YmEwMSwgMHg3MDYzLCAweDAxMDAsIDB4NzA2NywgMHgwMTAwLAotCTB4NzA1YiwgMHhiYTAwLCAweDEwNzgsIDB4MTJkZiwgMHgxMDc4LCAweDEzYzAsIDB4MTA3OCwgMHgxNTY5LAotCTB4MTA3OCwgMHgxY2E0LCAweDEwNzgsIDB4NDIyOSwgMHgxMDc4LCAweDc0Y2YsIDB4MTA3OCwgMHgxMzRiLAotCTB4MTA3OCwgMHgyYTNmLCAweDEwNzgsIDB4NGRhMiwgMHgxMDc4LCAweDQ4YjIsIDB4MTA3OCwgMHg1N2RmLAotCTB4MTA3OCwgMHgyMWY3LCAweDEwNzgsIDB4NWFiZiwgMHgxMDc4LCAweDUzNjksIDB4MTA3OCwgMHgyMTBkLAotCTB4MTA3OCwgMHgyMWQ0LCAweDIwOTEsIDB4MzAwOSwgMHg3ODIzLCAweDAwMDAsIDB4MDA5MCwgMHgxMGNmLAotCTB4NzgyMCwgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHgxMGNmLCAweDc4MjMsIDB4NDAwMCwgMHgwMDY4LAotCTB4MTBjNywgMHg3ODFiLCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwgMHgyYTcwLAotCTB4NzAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDE3ZiwgMHgyMDAzLCAweDAwMDAsIDB4MmE3MCwgMHg3MDAwLAotCTB4YTA4ZSwgMHgwMDAzLCAweDAwYzAsIDB4MTBlZiwgMHgxMDc4LCAweDM1YmMsIDB4MTA3OCwgMHgyYTY3LAotCTB4MTA3OCwgMHg0ZGYyLCAweDEwNzgsIDB4NGE3NSwgMHgyMDA5LCAweDAxMDAsIDB4MjEwNCwgMHhhMDgyLAotCTB4MDAwMiwgMHgwMDQ4LCAweDEwZjMsIDB4MTA3OCwgMHg1N2ZiLCAweDAwNzgsIDB4MTBkNiwgMHgxMDc5LAotCTB4MTBmNywgMHgwMDc4LCAweDEwZGMsIDB4MTA3OCwgMHg2ZmE5LCAweDAwNzgsIDB4MTBlYiwgMHgxMTAxLAotCTB4MTEwMiwgMHgxMWJlLCAweDEwZmYsIDB4MTI0NiwgMHgxMmRjLCAweDEyZGQsIDB4MTJkZSwgMHgxMDc4LAotCTB4MTMyOCwgMHgwMDdjLCAweDEyN2UsIDB4MGY3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzAwMCwgMHhhMDg2LAotCTB4MDAwMSwgMHgwMGMwLCAweDExOTgsIDB4MTA3OCwgMHgzYTQzLCAweDIwNzksIDB4MDEwMCwgMHg3ODQ0LAotCTB4YTAwNSwgMHgwMGMwLCAweDExOTgsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHgxMDc4LAotCTB4MWFiMSwgMHg3ODBmLCAweDAwZmYsIDB4Nzg0MCwgMHhhMDg0LCAweGZmZmIsIDB4Nzg0MiwgMHgyMDExLAotCTB4ODAxMCwgMHg3M2MwLCAweDEwNzgsIDB4MzU3OSwgMHgyMDAxLCAweGZmZmYsIDB4MTA3OCwgMHg1OTc1LAotCTB4NzIzOCwgMHhjMjg0LCAweDcyM2EsIDB4MjAwMSwgMHhhMzBjLCAweDIwMTQsIDB4YzJhYywgMHgyMjAyLAotCTB4MTA3OCwgMHg2ZGI1LCAweDIwMTEsIDB4MDAwNCwgMHgxMDc4LCAweDhhNTksIDB4MTA3OCwgMHg0N2NlLAotCTB4MTA3OCwgMHg0MjExLCAweDAwNDAsIDB4MTE0NCwgMHg3MDgzLCAweDAwMDEsIDB4NzBiYiwgMHgwMDAwLAotCTB4MTA3OCwgMHgzYmY1LCAweDAwNzgsIDB4MTE5OCwgMHgxMDc4LCAweDQ4OTcsIDB4MDA0MCwgMHgxMTRkLAotCTB4N2EwYywgMHhjMmI0LCAweDdhMGUsIDB4MDA3OCwgMHgxMTU5LCAweDEwNzgsIDB4OGRkZiwgMHg3MGM4LAotCTB4ZDA5YywgMHgwMGMwLCAweDExNTksIDB4NzA5NCwgMHhhMDA1LCAweDAwNDAsIDB4MTE1OSwgMHgxMDc4LAotCTB4NDFmNSwgMHg3MGQzLCAweDAwMDAsIDB4NzBjZiwgMHgwMDAwLCAweDcyYzgsIDB4MjA3OSwgMHhhMzUxLAotCTB4NzgwNCwgMHhkMGFjLCAweDAwNDAsIDB4MTE2NSwgMHhjMjk1LCAweDcyY2EsIDB4YTI5NiwgMHgwMDA0LAotCTB4MDA0MCwgMHgxMTg2LCAweDIwMTEsIDB4MDAwMSwgMHgxMDc4LCAweDhhNTksIDB4NzA4ZiwgMHgwMDAwLAotCTB4NzA5MywgMHhmZmZmLCAweDcwMDMsIDB4MDAwMiwgMHgwZjdmLCAweDEwNzgsIDB4MjYwZCwgMHgyMDExLAotCTB4MDAwNSwgMHgxMDc4LCAweDZlZjIsIDB4MTA3OCwgMHg2MTA5LCAweDBjN2UsIDB4MjA2MSwgMHgwMTAwLAotCTB4NjBlMywgMHgwMDA4LCAweDBjN2YsIDB4MTI3ZiwgMHgwMDc4LCAweDExOWEsIDB4NzA4ZiwgMHgwMDAwLAotCTB4NzA5MywgMHhmZmZmLCAweDcwMDMsIDB4MDAwMiwgMHgyMDExLCAweDAwMDUsIDB4MTA3OCwgMHg2ZWYyLAotCTB4MTA3OCwgMHg2MTA5LCAweDBjN2UsIDB4MjA2MSwgMHgwMTAwLCAweDYwZTMsIDB4MDAwOCwgMHgwYzdmLAotCTB4MGY3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MGM3ZSwgMHgyMGE5LCAweDAwODIsIDB4MjAwOSwgMHgwMDdlLAotCTB4MDE3ZSwgMHgwMjdlLCAweDAzN2UsIDB4MjExMCwgMHgwMjdlLCAweDIwMTksIDB4MDAyOSwgMHgxMDc4LAotCTB4NzFlMCwgMHgwMjdmLCAweDEwNzgsIDB4YTE5MCwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwgMHgxMDc4LAotCTB4MjkyMSwgMHg4MTA4LCAweDAwZjAsIDB4MTFhMCwgMHgwYzdmLCAweDcwNmIsIDB4MDAwMCwgMHg3MDZjLAotCTB4YTA4NCwgMHgwMGZmLCAweDcwNmUsIDB4NzA5NywgMHgwMDAwLCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMiwgMHgwMGMwLCAweDEyNDQsIDB4NzA5MCwgMHhhMDg2LAotCTB4ZmZmZiwgMHgwMDQwLCAweDExZDEsIDB4MTA3OCwgMHgyNjBkLCAweDEwNzgsIDB4NjEwOSwgMHgwMDc4LAotCTB4MTI0NCwgMHg3MGM4LCAweGQwOWMsIDB4MDA0MCwgMHgxMWZkLCAweGQwODQsIDB4MDA0MCwgMHgxMWZkLAotCTB4MGY3ZSwgMHgyMDc5LCAweDAxMDAsIDB4NzkwYywgMHhjMWI1LCAweDc5MGUsIDB4MGY3ZiwgMHhkMDhjLAotCTB4MDA0MCwgMHgxMWZkLCAweDcwY2MsIDB4YTA4NiwgMHhmZmZmLCAweDAwNDAsIDB4MTFmOSwgMHgxMDc4LAotCTB4Mjc4YSwgMHgxMDc4LCAweDYxMDksIDB4NzBjOCwgMHhkMDk0LCAweDAwYzAsIDB4MTI0NCwgMHgyMDExLAotCTB4MDAwMSwgMHgyMDE5LCAweDAwMDAsIDB4MTA3OCwgMHgyN2MyLCAweDEwNzgsIDB4NjEwOSwgMHgwMDc4LAotCTB4MTI0NCwgMHg3MGQwLCAweGEwMDUsIDB4MDBjMCwgMHgxMjQ0LCAweDcwOGMsIDB4YTAwNSwgMHgwMGMwLAotCTB4MTI0NCwgMHgxMDc4LCAweDQ4OTcsIDB4MDBjMCwgMHgxMjQ0LCAweDIwMDEsIDB4YTM1MiwgMHgyMDA0LAotCTB4ZDBhYywgMHgwMDQwLCAweDEyMjcsIDB4MTU3ZSwgMHgwYzdlLCAweDIwYTksIDB4MDA3ZiwgMHgyMDA5LAotCTB4MDAwMCwgMHgwMTdlLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDEyMWEsIDB4NjAwMCwgMHhkMGVjLAotCTB4MDBjMCwgMHgxMjIyLCAweDAxN2YsIDB4ODEwOCwgMHgwMGYwLCAweDEyMTEsIDB4MGM3ZiwgMHgxNTdmLAotCTB4MDA3OCwgMHgxMjI3LCAweDAxN2YsIDB4MGM3ZiwgMHgxNTdmLCAweDAwNzgsIDB4MTI0NCwgMHg3MDAzLAotCTB4MDAwMywgMHg3MDkzLCAweGZmZmYsIDB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4MjQ4MCwgMHgxMDc4LAotCTB4MzVmNywgMHgyMDAxLCAweGE1YWMsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDUsIDB4MDBjMCwgMHgxMjNjLAotCTB4MjAxMSwgMHgwMDAwLCAweDEwNzgsIDB4NmVmMiwgMHgyMDExLCAweDAwMDAsIDB4MTA3OCwgMHg2ZWZjLAotCTB4MTA3OCwgMHg2MTA5LCAweDEwNzgsIDB4NjFkMywgMHgxMjdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwZjdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgwMTAwLCAweDIwMDksIDB4MDBmNywgMHgxMDc4LAotCTB4NDFkZSwgMHg3OTQwLCAweGExOGMsIDB4MDAxMCwgMHg3OTQyLCAweDc5MjQsIDB4ZDFiNCwgMHgwMDQwLAotCTB4MTI1YiwgMHg3ODI3LCAweDAwNDAsIDB4ZDE5YywgMHgwMDQwLCAweDEyNjAsIDB4NzgyNywgMHgwMDA4LAotCTB4MDA3ZSwgMHgwMzdlLCAweDE1N2UsIDB4YTAwNiwgMHgxMDc4LCAweDU5NzUsIDB4NzkwMCwgMHhhMThhLAotCTB4MDAwMywgMHgwMDUwLCAweDEyODksIDB4Nzk1NCwgMHhkMWFjLCAweDAwYzAsIDB4MTI4OSwgMHgyMDA5LAotCTB4MDBmOCwgMHgxMDc4LCAweDQxZGUsIDB4Nzg0MywgMHgwMDkwLCAweDc4NDMsIDB4MDAxMCwgMHgyMGE5LAotCTB4MDljNCwgMHg3ODIwLCAweGQwOWMsIDB4MDBjMCwgMHgxMjgxLCAweDc4MjQsIDB4ZDBhYywgMHgwMGMwLAotCTB4MTJjYSwgMHgwMGYwLCAweDEyNzksIDB4MjAwMSwgMHgwMDAxLCAweDEwNzgsIDB4MjQ4MCwgMHgwMDc4LAotCTB4MTJkNSwgMHg3ODUzLCAweDAwMDAsIDB4NzgyZiwgMHgwMDIwLCAweDIwYTksIDB4MDA1MCwgMHgwMGUwLAotCTB4MTI4ZiwgMHgyMDkxLCAweDYwMDAsIDB4MDBmMCwgMHgxMjhmLCAweDc4NTMsIDB4MDQwMCwgMHg3ODJmLAotCTB4MDAwMCwgMHgyMDA5LCAweDAwZjgsIDB4MTA3OCwgMHg0MWRlLCAweDIwYTksIDB4MDAwZSwgMHgwMDA1LAotCTB4MDBmMCwgMHgxMjlmLCAweDc4NTMsIDB4MTQwMCwgMHg3ODQzLCAweDAwOTAsIDB4Nzg0MywgMHgwMDEwLAotCTB4MjAxOSwgMHg2MWE4LCAweDc4NTQsIDB4MDAwNSwgMHgwMDA1LCAweGQwOGMsIDB4MDA0MCwgMHgxMmI0LAotCTB4NzgyNCwgMHhkMGFjLCAweDAwYzAsIDB4MTJjYSwgMHg4MzE5LCAweDAwYzAsIDB4MTJhYSwgMHgyMDA5LAotCTB4YTMzMSwgMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwgMHhhMDg0LCAweGZmZjAsIDB4MDA0MCwgMHgxMmM0LAotCTB4MjAwYiwgMHgwMDAwLCAweDEwNzgsIDB4MjUxZSwgMHgyMDAxLCAweDAwMDEsIDB4MTA3OCwgMHgyNDgwLAotCTB4MDA3OCwgMHgxMmQzLCAweDIwMDEsIDB4YTMzMSwgMHgyMDAzLCAweDAwMDAsIDB4NzgyOCwgMHhjMDlkLAotCTB4NzgyYSwgMHg3ODI3LCAweDAwNDgsIDB4Nzg1MywgMHgwNDAwLCAweDE1N2YsIDB4MDM3ZiwgMHgwMDdmLAotCTB4MTI3ZiwgMHgwZjdmLCAweDAxN2YsIDB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4MDA3YywgMHgyYTcwLAotCTB4MjAwOSwgMHgwMTAwLCAweDIxMDQsIDB4YTA4MiwgMHgwMDAyLCAweDAwNDgsIDB4MTJlYiwgMHg3MDRmLAotCTB4ZmZmZiwgMHgwMDc4LCAweDEyZWQsIDB4NzA0ZiwgMHgwMDAwLCAweDcwNTMsIDB4ZmZmZiwgMHg3MDZiLAotCTB4MDAwMCwgMHg3MDZmLCAweDAwMDAsIDB4MTA3OCwgMHg4ZGRmLCAweDIwNjEsIDB4YTU4YywgMHg2MDAzLAotCTB4MDkwOSwgMHg2MDA3LCAweDAwMDAsIDB4NjAwYiwgMHg4ODAwLCAweDYwMGYsIDB4MDIwMCwgMHg2MDEzLAotCTB4MDBmZiwgMHg2MDE3LCAweDAwMDMsIDB4NjAxYiwgMHgwMDAwLCAweDYwMWYsIDB4MDdkMCwgMHgyMDYxLAotCTB4YTU5NCwgMHg2MDAzLCAweDgwMDAsIDB4NjAwNywgMHgwMDAwLCAweDYwMGIsIDB4MDAwMCwgMHg2MDBmLAotCTB4MDIwMCwgMHg2MDEzLCAweDAwZmYsIDB4NjAxNywgMHgwMDAwLCAweDYwMWIsIDB4MDAwMSwgMHg2MDFmLAotCTB4MDAwMCwgMHgyMDYxLCAweGE1YTMsIDB4NjAwMywgMHg1MTRjLCAweDYwMDcsIDB4NGY0NywgMHg2MDBiLAotCTB4NDk0MywgMHg2MDBmLCAweDIwMjAsIDB4MjAwMSwgMHhhMzI1LCAweDIwMDMsIDB4MDAwMCwgMHgwMDdjLAotCTB4MjA5MSwgMHg4MDAwLCAweDAwNjgsIDB4MTMyYSwgMHgwMDdlLCAweDAxN2UsIDB4MjA3OSwgMHgwMDAwLAotCTB4NzgxOCwgMHhkMDg0LCAweDAwYzAsIDB4MTMzMCwgMHgwMTdmLCAweDc5MmUsIDB4MDA3ZiwgMHg3ODJhLAotCTB4MDA3ZiwgMHg3ODI2LCAweDM5MDAsIDB4NzgzYSwgMHg3ODIzLCAweDgwMDIsIDB4NzgxYiwgMHgwMDAxLAotCTB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwgMHgyMDc5LCAweGEzMDAsIDB4NzgwMywgMHgwMDA1LAotCTB4MDA3OCwgMHgxMzQ4LCAweDAwN2MsIDB4MjA3MSwgMHhhMzAwLCAweDcxNTgsIDB4NzEyZSwgMHgyMDIxLAotCTB4MDAwMSwgMHhhMTkwLCAweDAwMmQsIDB4YTI5OCwgMHgwMDJkLCAweDAwNDgsIDB4MTM2MSwgMHg3MDVjLAotCTB4YTMwMiwgMHgwMGM4LCAweDEzNjEsIDB4MjIwYSwgMHgyMjA4LCAweDIzMTAsIDB4ODQyMCwgMHgwMDc4LAotCTB4MTM1MywgMHgyMDBiLCAweDAwMDAsIDB4NzRhNiwgMHg3NGFhLCAweDAwN2MsIDB4MGU3ZSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTMwMCwgMHg3MGE4LCAweGEwZWEsIDB4MDAxMCwgMHgwMGM4LAotCTB4MTM3NCwgMHhhMDZlLCAweDAwNzgsIDB4MTM3ZSwgMHg4MDAxLCAweDcwYWEsIDB4NzAyYywgMHgyMDY4LAotCTB4MmQwNCwgMHg3MDJlLCAweDIwNmIsIDB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4MTI3ZiwgMHgwZTdmLAotCTB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg3MGE4LAotCTB4ODAwMSwgMHgwMGM4LCAweDEzOGUsIDB4YTA2ZSwgMHgwMDc4LCAweDEzOTcsIDB4NzBhYSwgMHg3MDJjLAotCTB4MjA2OCwgMHgyZDA0LCAweDcwMmUsIDB4MjA2YiwgMHgwMDAwLCAweDY4MDcsIDB4MDAwMCwgMHgxMjdmLAotCTB4MGU3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhMzAwLAotCTB4NzAyYywgMHgyMDZhLCAweDJkMDAsIDB4NzAyZSwgMHg3MGE4LCAweDgwMDAsIDB4NzBhYSwgMHgxMjdmLAotCTB4MGU3ZiwgMHgwMDdjLCAweDhkZmYsIDB4MDA0MCwgMHgxM2I2LCAweDY4MDQsIDB4NjgwNywgMHgwMDAwLAotCTB4MDA3ZSwgMHgxMDc4LCAweDEzOWEsIDB4MGQ3ZiwgMHgwMDc4LCAweDEzYWEsIDB4MDA3YywgMHgwZTdlLAotCTB4MjA3MSwgMHhhMzAwLCAweDcwYTgsIDB4YTA4YSwgMHgwMDEwLCAweGEwMGQsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MGU3ZSwgMHgyMDcxLCAweGE1ZDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMWIsIDB4MDAwMCwgMHg3MDFmLAotCTB4MDAwMCwgMHgyMDcxLCAweDAwMDAsIDB4NzAxMCwgMHhhMDg1LCAweDgwMDQsIDB4NzAxMiwgMHgwZTdmLAotCTB4MDA3YywgMHgwZTdlLCAweDIyNzAsIDB4NzAwYiwgMHgwMDAwLCAweDIwNzEsIDB4YTVkMCwgMHg3MDE4LAotCTB4YTA4OCwgMHhhNWQ5LCAweDIyMGEsIDB4ODAwMCwgMHhhMDg0LCAweDAwMDcsIDB4NzAxYSwgMHg3MDA0LAotCTB4YTAwNSwgMHgwMGMwLCAweDEzZTksIDB4MGY3ZSwgMHgyMDc5LCAweDAwMTAsIDB4MTA3OCwgMHgxM2ZhLAotCTB4MGY3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE1ZDAsIDB4NzAwNCwgMHhhMDA1LAotCTB4MDBjMCwgMHgxM2Y4LCAweDBmN2UsIDB4MjA3OSwgMHgwMDEwLCAweDEwNzgsIDB4MTNmYSwgMHgwZjdmLAotCTB4MGU3ZiwgMHgwMDdjLCAweDcwMDAsIDB4MDA3OSwgMHgxM2ZkLCAweDE0MDEsIDB4MTQ2YiwgMHgxNDg4LAotCTB4MTQ4OCwgMHg3MDE4LCAweDcxMWMsIDB4YTEwNiwgMHgwMGMwLCAweDE0MDksIDB4NzAwNywgMHgwMDAwLAotCTB4MDA3YywgMHgwZDdlLCAweGExODAsIDB4YTVkOSwgMHgyMDA0LCAweDcwMGEsIDB4MjA2OCwgMHg4MTA4LAotCTB4YTE4YywgMHgwMDA3LCAweDcxMWUsIDB4NzgwMywgMHgwMDI2LCAweDY4MjQsIDB4NzgzMiwgMHg2ODI4LAotCTB4NzgzNiwgMHg2ODJjLCAweDc4M2EsIDB4NjgzMCwgMHg3ODNlLCAweDY4MTAsIDB4NzAwZSwgMHg2ODBjLAotCTB4NzAxNiwgMHg2ODA0LCAweDBkN2YsIDB4ZDA4NCwgMHgwMDQwLCAweDE0MmIsIDB4NzAwNywgMHgwMDAxLAotCTB4MTA3OCwgMHgxNDMwLCAweDAwN2MsIDB4NzAwNywgMHgwMDAyLCAweDEwNzgsIDB4MTQ0NiwgMHgwMDdjLAotCTB4MDE3ZSwgMHgwMjdlLCAweDcxMGMsIDB4MjAxMSwgMHgwMDQwLCAweGExODIsIDB4MDA0MCwgMHgwMGM4LAotCTB4MTQzYiwgMHgyMTEwLCAweGEwMDYsIDB4NzAwZSwgMHg3MjEyLCAweDgyMDMsIDB4NzgyMiwgMHg3ODAzLAotCTB4MDAyMCwgMHg3ODAzLCAweDAwNDEsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwMjdlLAotCTB4MTM3ZSwgMHgxNDdlLCAweDE1N2UsIDB4NzAxNCwgMHgyMDk4LCAweDIwYTEsIDB4MDAxNCwgMHg3ODAzLAotCTB4MDAyNiwgMHg3MTBjLCAweDIwMTEsIDB4MDA0MCwgMHhhMTgyLCAweDAwNDAsIDB4MDBjOCwgMHgxNDVhLAotCTB4MjExMCwgMHhhMDA2LCAweDcwMGUsIDB4MjJhOCwgMHg1M2E2LCAweDgyMDMsIDB4NzgyMiwgMHg3ODAzLAotCTB4MDAyMCwgMHgzMzAwLCAweDcwMTYsIDB4NzgwMywgMHgwMDAxLCAweDE1N2YsIDB4MTQ3ZiwgMHgxMzdmLAotCTB4MDI3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MTM3ZSwgMHgxNDdlLCAweDE1N2UsIDB4MjA5OSwgMHhhM2Y5LAotCTB4MjBhMSwgMHgwMDE4LCAweDIwYTksIDB4MDAwOCwgMHg1M2EzLCAweDc4MDMsIDB4MDAyMCwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDc4MDMsIDB4MDA0MSwgMHg3MDA3LCAweDAwMDMsIDB4NzAwMCwgMHhjMDg0LAotCTB4NzAwMiwgMHg3MDBiLCAweGEzZjQsIDB4MTI3ZiwgMHgxNTdmLCAweDE0N2YsIDB4MTM3ZiwgMHgwMDdjLAotCTB4MTM3ZSwgMHgxNDdlLCAweDE1N2UsIDB4MjAwMSwgMHhhNDI4LCAweDIwOWMsIDB4MjBhMSwgMHgwMDE0LAotCTB4NzgwMywgMHgwMDI2LCAweDIwMDEsIDB4YTQyOSwgMHgyMGFjLCAweDUzYTYsIDB4MjA5OSwgMHhhNDJhLAotCTB4MjBhMSwgMHgwMDE4LCAweDIwYTksIDB4MDAwOCwgMHg1M2EzLCAweDc4MDMsIDB4MDAyMCwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDc4MDMsIDB4MDAwMSwgMHg3MDA3LCAweDAwMDQsIDB4NzAwMCwgMHhjMDhjLAotCTB4NzAwMiwgMHg3MDBiLCAweGE0MjUsIDB4MTI3ZiwgMHgxNTdmLCAweDE0N2YsIDB4MTM3ZiwgMHgwMDdjLAotCTB4MDE3ZSwgMHgwZTdlLCAweDIwNzEsIDB4YTVkMCwgMHgwZjdlLCAweDIwNzksIDB4MDAxMCwgMHg3OTA0LAotCTB4NzgwMywgMHgwMDAyLCAweGQxZmMsIDB4MDA0MCwgMHgxNGMyLCAweGExOGMsIDB4MDcwMCwgMHg3MDA0LAotCTB4MTA3OSwgMHgxNGM2LCAweDBmN2YsIDB4MGU3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MTNmYSwgMHgxNGNlLAotCTB4MTRmYiwgMHgxNTIzLCAweDE1NTYsIDB4MTRjYywgMHgwMDc4LCAweDE0Y2MsIDB4YTE4YywgMHgwNzAwLAotCTB4MDBjMCwgMHgxNGY0LCAweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDcwMTQsIDB4MjBhMCwgMHgyMDk5LAotCTB4MDAxNCwgMHg3ODAzLCAweDAwNDAsIDB4NzAxMCwgMHgyMGE4LCAweDUzYTUsIDB4MzQwMCwgMHg3MDE2LAotCTB4MTU3ZiwgMHgxNDdmLCAweDEzN2YsIDB4NzAwYywgMHhhMDA1LCAweDAwNDAsIDB4MTUxMCwgMHgxMDc4LAotCTB4MTQzMCwgMHgwMDdjLCAweDcwMDgsIDB4YTA4MCwgMHgwMDAyLCAweDIwMDMsIDB4MDEwMCwgMHg3MDA3LAotCTB4MDAwMCwgMHgxMDc4LCAweDEzZmEsIDB4MDA3YywgMHg3MDA4LCAweGEwODAsIDB4MDAwMiwgMHgyMDAzLAotCTB4MDIwMCwgMHgwMDc4LCAweDE0ZWYsIDB4YTE4YywgMHgwNzAwLCAweDAwYzAsIDB4MTUwNiwgMHg3MDBjLAotCTB4YTAwNSwgMHgwMDQwLCAweDE1MTAsIDB4MTA3OCwgMHgxNDQ2LCAweDAwN2MsIDB4NzAwOCwgMHhhMDgwLAotCTB4MDAwMiwgMHgyMDAzLCAweDAyMDAsIDB4NzAwNywgMHgwMDAwLCAweDEwNzgsIDB4MTNmYSwgMHgwMDdjLAotCTB4MGQ3ZSwgMHg3MDA4LCAweDIwNjgsIDB4NzgzMCwgMHg2ODI2LCAweDc4MzQsIDB4NjgyYSwgMHg3ODM4LAotCTB4NjgyZSwgMHg3ODNjLCAweDY4MzIsIDB4NjgwYiwgMHgwMTAwLCAweDBkN2YsIDB4NzAwNywgMHgwMDAwLAotCTB4MTA3OCwgMHgxM2ZhLCAweDAwN2MsIDB4YTE4YywgMHgwNzAwLCAweDAwYzAsIDB4MTU1MCwgMHgxMzdlLAotCTB4MTQ3ZSwgMHgxNTdlLCAweDIwMDEsIDB4YTNmNywgMHgyMDA0LCAweGEwODAsIDB4MDAwZCwgMHgyMGEwLAotCTB4MjA5OSwgMHgwMDE0LCAweDc4MDMsIDB4MDA0MCwgMHgyMGE5LCAweDAwMjAsIDB4NTNhNSwgMHgyMDAxLAotCTB4YTNmOSwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwgMHgxNTQ2LCAweDIwMDEsIDB4YTQwMiwgMHgyMDA0LAotCTB4YTA4MCwgMHgwMDBkLCAweDIwYTAsIDB4MjBhOSwgMHgwMDIwLCAweDUzYTUsIDB4MTU3ZiwgMHgxNDdmLAotCTB4MTM3ZiwgMHg3MDA3LCAweDAwMDAsIDB4MTA3OCwgMHg0ZTliLCAweDEwNzgsIDB4MTNmYSwgMHgwMDdjLAotCTB4MjAxMSwgMHg4MDAzLCAweDEwNzgsIDB4MzU3OSwgMHgwMDc4LCAweDE1NTQsIDB4YTE4YywgMHgwNzAwLAotCTB4MDBjMCwgMHgxNTYzLCAweDIwMDEsIDB4YTQyNywgMHgyMDAzLCAweDAxMDAsIDB4NzAwNywgMHgwMDAwLAotCTB4MTA3OCwgMHgxM2ZhLCAweDAwN2MsIDB4MjAxMSwgMHg4MDA0LCAweDEwNzgsIDB4MzU3OSwgMHgwMDc4LAotCTB4MTU2NywgMHgxMjdlLCAweDIwOTEsIDB4MjEwMCwgMHgyMDc5LCAweDAwMzAsIDB4MjA3MSwgMHhhNWUxLAotCTB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHg3MDBmLCAweGE1ZTcsIDB4NzAxMywgMHhhNWU3LAotCTB4NzgwZiwgMHgwMDc2LCAweDc4MDMsIDB4MDAwNCwgMHgxMjdmLCAweDAwN2MsIDB4NjkzNCwgMHhhMTg0LAotCTB4MDAwNywgMHgwMDc5LCAweDE1ODMsIDB4MTU4YiwgMHgxNWQxLCAweDE1OGIsIDB4MTU4YiwgMHgxNThiLAotCTB4MTViNiwgMHgxNTlhLCAweDE1OGYsIDB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4MTVlYiwgMHg2ODRjLAotCTB4ZDBiYywgMHgwMDQwLCAweDE1OGIsIDB4Njg2MCwgMHg2ODJlLCAweDY4NWMsIDB4NjgyYSwgMHg2ODU4LAotCTB4MDA3OCwgMHgxNWQ5LCAweGExOGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMWUsIDB4MDBjMCwgMHgxNThiLAotCTB4Njg0YywgMHhkMGJjLCAweDAwNDAsIDB4MTU4YiwgMHg2ODYwLCAweDY4MmUsIDB4Njg1YywgMHg2ODJhLAotCTB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwgMHhhMDgwLAotCTB4MjAxNSwgMHgyMDA0LCAweDY4MzIsIDB4Njg1OCwgMHgwMDc4LCAweDE1ZTEsIDB4YTE4YywgMHgwMGZmLAotCTB4YTE4NiwgMHgwMDE1LCAweDAwYzAsIDB4MTU4YiwgMHg2ODRjLCAweGQwYWMsIDB4MDA0MCwgMHgxNThiLAotCTB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwgMHhhMDgwLAotCTB4MjAxNSwgMHgyMDA0LCAweDY4MzIsIDB4YTAwNiwgMHg2ODJlLCAweDY4MmEsIDB4Njg1OCwgMHgwMDc4LAotCTB4MTVlMSwgMHg2ODRjLCAweGQwYWMsIDB4MDA0MCwgMHgxNThiLCAweGEwMDYsIDB4NjgyZSwgMHg2ODJhLAotCTB4Njg1OCwgMHhhMThjLCAweDAwMGYsIDB4YTE4OCwgMHgyMDE1LCAweDIxMGMsIDB4NjkzMiwgMHgyZDA4LAotCTB4NjkxYSwgMHg2ODI2LCAweDY4NGMsIDB4YzBkZCwgMHg2ODRlLCAweGEwMDYsIDB4NjgwYSwgMHg2OTdjLAotCTB4NjkxMiwgMHg2OTgwLCAweDY5MTYsIDB4MDA3YywgMHgyMGUxLCAweDAwMDcsIDB4MjBlMSwgMHgyMDAwLAotCTB4MjAwMSwgMHgwMjBhLCAweDIwMDQsIDB4ODJmZiwgMHgwMDQwLCAweDE2MGUsIDB4YTI4MCwgMHgwMDA0LAotCTB4MGQ3ZSwgMHgyMDZjLCAweDY4NGMsIDB4ZDBkYywgMHgwMGMwLCAweDE2MGEsIDB4MTA3OCwgMHgxNTdlLAotCTB4MDA0MCwgMHgxNjBhLCAweDBkN2YsIDB4YTI4MCwgMHgwMDAwLCAweDIwMDMsIDB4MDAwMiwgMHhhMDE2LAotCTB4MDA3OCwgMHgxNjBlLCAweDY4MDgsIDB4ODAwMCwgMHg2ODBhLCAweDBkN2YsIDB4MTI3ZSwgMHgwNDdlLAotCTB4MDM3ZSwgMHgwMjdlLCAweDIwOTEsIDB4MjEwMCwgMHgwMjdmLCAweDAzN2YsIDB4MDQ3ZiwgMHg3MDAwLAotCTB4YTAwNSwgMHgwMGMwLCAweDE2MjIsIDB4NzIwNiwgMHgyMDAxLCAweDE2NDMsIDB4MDA3ZSwgMHgyMjYwLAotCTB4MDA3OCwgMHgxN2JlLCAweDcxMGMsIDB4MjIwYSwgMHg4MTA4LCAweDIzMGEsIDB4ODEwOCwgMHgyNDBhLAotCTB4ODEwOCwgMHhhMTgyLCAweGE2MDIsIDB4MDA0OCwgMHgxNjJmLCAweDIwMDksIDB4YTVlNywgMHg3MTBlLAotCTB4NzAxMCwgMHhhMTAyLCAweGEwODIsIDB4MDAwOSwgMHgwMDQwLCAweDE2M2EsIDB4YTA4MCwgMHgwMDFiLAotCTB4MDBjMCwgMHgxNjNkLCAweDIwMDksIDB4MDEzOCwgMHgyMDBhLCAweDcwMDAsIDB4YTAwNSwgMHgwMGMwLAotCTB4MTY0MywgMHgxMDc4LCAweDE3OWYsIDB4MTI3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MDI3ZSwgMHgwMzdlLAotCTB4MGM3ZSwgMHgwMDdlLCAweDIwOTEsIDB4MjEwMCwgMHgwMDdmLCAweDA0N2YsIDB4MDM3ZiwgMHgwMjdmLAotCTB4MGQ3ZSwgMHgwYzdlLCAweDI0NjAsIDB4NjExMCwgMHgyMTY4LCAweDZhNjIsIDB4NmI1ZSwgMHhhMDA1LAotCTB4MDA0MCwgMHgxNmNmLCAweDY4MDgsIDB4YTAwNSwgMHgwMDQwLCAweDE3M2MsIDB4NzAwMCwgMHhhMDA1LAotCTB4MDBjMCwgMHgxNjY0LCAweDAwNzgsIDB4MTZjNCwgMHg3MDBjLCAweDcxMTAsIDB4YTEwNiwgMHgwMGMwLAotCTB4MTc0NSwgMHg3MDA0LCAweGE0MDYsIDB4MDBjMCwgMHgxNmM0LCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LAotCTB4ZDA4YywgMHgwMDQwLCAweDE2ODEsIDB4MDQ3ZSwgMHgxMDc4LCAweDE4ZTIsIDB4MDQ3ZiwgMHgyNDYwLAotCTB4NjAxMCwgMHhhMDgwLCAweDAwMDIsIDB4MjAwNCwgMHhhMDA1LCAweDAwNDAsIDB4MTczYywgMHgwMDc4LAotCTB4MTY1ZSwgMHgyMDAxLCAweDAyMDcsIDB4MjAwNCwgMHhkMDljLCAweDAwYzAsIDB4MTY2ZCwgMHg3ODA0LAotCTB4YTA4NCwgMHg2MDAwLCAweDAwNDAsIDB4MTY5MiwgMHhhMDg2LCAweDYwMDAsIDB4MDA0MCwgMHgxNjkyLAotCTB4MDA3OCwgMHgxNjZkLCAweDcxMDAsIDB4YTE4NiwgMHgwMDAyLCAweDAwYzAsIDB4MTZiMiwgMHgwZTdlLAotCTB4MmI2OCwgMHg2ODE4LCAweDIwNjAsIDB4MTA3OCwgMHgxZmVhLCAweDI4MDQsIDB4YWM3MCwgMHg2MDM0LAotCTB4ZDA5YywgMHgwMGMwLCAweDE2YTcsIDB4NzEwOCwgMHg3MjBjLCAweDAwNzgsIDB4MTZhOSwgMHg3MTEwLAotCTB4NzIxNCwgMHg2ODEwLCAweGExMDAsIDB4NjgxMiwgMHg2ODE0LCAweGEyMDEsIDB4NjgxNiwgMHgwZTdmLAotCTB4MDA3OCwgMHgxNmI2LCAweGExODYsIDB4MDAwMSwgMHgwMGMwLCAweDE2YmUsIDB4NzgyMCwgMHg2OTEwLAotCTB4YTEwMCwgMHg2ODEyLCAweDc4MjQsIDB4NjkxNCwgMHhhMTAxLCAweDY4MTYsIDB4NzgwMywgMHgwMDA0LAotCTB4NzAwMywgMHgwMDAwLCAweDcwMDQsIDB4MjA2MCwgMHg2MTAwLCAweGExOGUsIDB4MDAwNCwgMHgwMGMwLAotCTB4MTc0NSwgMHgyMDA5LCAweDAwNDgsIDB4MTA3OCwgMHg3NTZjLCAweDAwNzgsIDB4MTc0NSwgMHg2ODA4LAotCTB4YTAwNSwgMHgwMDQwLCAweDE3M2MsIDB4NzAwMCwgMHhhMDA1LCAweDAwYzAsIDB4MTZkOSwgMHgwMDc4LAotCTB4MTczYywgMHg3MDBjLCAweDcxMTAsIDB4YTEwNiwgMHgwMGMwLCAweDE2ZTIsIDB4NzAwNCwgMHhhNDA2LAotCTB4MDBjMCwgMHgxNzNjLCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LCAweGQwOGMsIDB4MDA0MCwgMHgxNmY2LAotCTB4MDQ3ZSwgMHgxMDc4LCAweDE4ZTIsIDB4MDQ3ZiwgMHgyNDYwLCAweDYwMTAsIDB4YTA4MCwgMHgwMDAyLAotCTB4MjAwNCwgMHhhMDA1LCAweDAwNDAsIDB4MTczYywgMHgwMDc4LCAweDE2ZDMsIDB4MjAwMSwgMHgwMjA3LAotCTB4MjAwNCwgMHhkMDljLCAweDAwYzAsIDB4MTZlMiwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwgMHhkMDhjLAotCTB4MDBjMCwgMHgxNmU4LCAweDc4MDQsIDB4YTA4NCwgMHg2MDAwLCAweDAwNDAsIDB4MTcwZCwgMHhhMDg2LAotCTB4NjAwMCwgMHgwMDQwLCAweDE3MGQsIDB4MDA3OCwgMHgxNmUyLCAweDcwMDcsIDB4MDAwMCwgMHhhMDE2LAotCTB4MjIxOCwgMHg3MDAwLCAweGEwOGUsIDB4MDAwMSwgMHgwMDQwLCAweDE3MmUsIDB4YTA4ZSwgMHgwMDAyLAotCTB4MDBjMCwgMHgxNzNjLCAweDBjN2UsIDB4MGU3ZSwgMHg2ODE4LCAweDIwNjAsIDB4MTA3OCwgMHgxZmVhLAotCTB4MjgwNCwgMHhhYzcwLCAweDYwMzQsIDB4ZDA5YywgMHgwMGMwLCAweDE3MmEsIDB4NzMwOCwgMHg3MjBjLAotCTB4MDA3OCwgMHgxNzJjLCAweDczMTAsIDB4NzIxNCwgMHgwZTdmLCAweDBjN2YsIDB4NzgyMCwgMHhhMzE4LAotCTB4NzgyNCwgMHhhMjExLCAweDY4MTAsIDB4YTMwMCwgMHg2ODEyLCAweDY4MTQsIDB4YTIwMSwgMHg2ODE2LAotCTB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHg2MTAwLCAweGExOGUsIDB4MDAwNCwgMHgwMGMwLAotCTB4MTc0NSwgMHgyMDA5LCAweDAwNDgsIDB4MTA3OCwgMHg3NTZjLCAweDBjN2YsIDB4MGQ3ZiwgMHgxMjdmLAotCTB4MDA3YywgMHgwZjdlLCAweDBlN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDA0N2UsIDB4MTA3OCwgMHgxYWY3LAotCTB4MDI3ZSwgMHgyMDcxLCAweGE1ZTEsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDA0MCwgMHgxNzkwLAotCTB4NzAwNCwgMHhhYzA2LCAweDAwYzAsIDB4MTc4MSwgMHgyMDc5LCAweDAwMzAsIDB4NzAwMCwgMHhhMDg2LAotCTB4MDAwMywgMHgwMDQwLCAweDE3ODEsIDB4NzgwNCwgMHhkMGZjLCAweDAwYzAsIDB4MTc3ZCwgMHgyMDAxLAotCTB4MDIwNywgMHgyMDA0LCAweGQwOWMsIDB4MDBjMCwgMHgxNzYzLCAweDc4MDMsIDB4MDAwNCwgMHg3ODA0LAotCTB4ZDBhYywgMHgwMGMwLCAweDE3NmYsIDB4NzgwMywgMHgwMDAyLCAweDc4MDMsIDB4MDAwOSwgMHg3MDAzLAotCTB4MDAwMywgMHg3MDA3LCAweDAwMDAsIDB4MDA3OCwgMHgxNzgxLCAweDEwNzgsIDB4MThlMiwgMHgwMDc4LAotCTB4MTc1MywgMHgxNTdlLCAweDIwYTksIDB4MDAwOSwgMHgyMDA5LCAweGE1ZTcsIDB4MjEwNCwgMHhhYzA2LAotCTB4MDBjMCwgMHgxNzhiLCAweDIwMGEsIDB4YTE4OCwgMHgwMDAzLCAweDAwZjAsIDB4MTc4NiwgMHgxNTdmLAotCTB4MDI3ZiwgMHgyMDAxLCAweDAxNWQsIDB4MjAxYywgMHg4MzFhLCAweDIzMDIsIDB4MjAwMSwgMHgwMTM4LAotCTB4MjIwMiwgMHgwNDdmLCAweDAzN2YsIDB4MDI3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHg3MDBjLAotCTB4NzExMCwgMHhhMTA2LCAweDAwYzAsIDB4MTdhNywgMHg3MDAzLCAweDAwMDAsIDB4MDA3YywgMHgyMTA0LAotCTB4NzAwNiwgMHgyMDYwLCAweDgxMDgsIDB4MjExYywgMHg4MTA4LCAweDIxMjQsIDB4ODEwOCwgMHhhMTgyLAotCTB4YTYwMiwgMHgwMDQ4LCAweDE3YjUsIDB4MjAwOSwgMHhhNWU3LCAweDcxMTIsIDB4NzAwYywgMHhhMTA2LAotCTB4MDBjMCwgMHgxN2JlLCAweDIwMDEsIDB4MDEzOCwgMHgyMDAzLCAweDAwMDgsIDB4OGNmZiwgMHgwMGMwLAotCTB4MTdjNSwgMHgxMDc4LCAweDFiMjIsIDB4MDA3OCwgMHgxODIzLCAweDYwMTAsIDB4MjA2OCwgMHgyZDU4LAotCTB4NjgyOCwgMHhhNDA2LCAweDAwYzAsIDB4MTdkMCwgMHg2ODJjLCAweGEzMDYsIDB4MDA0MCwgMHgxN2ZlLAotCTB4NjAxYywgMHhhMDg2LCAweDAwMDgsIDB4MDA0MCwgMHgxN2ZlLCAweDYwMjQsIDB4ZDBmNCwgMHgwMGMwLAotCTB4MTdmYSwgMHhkMGQ0LCAweDAwNDAsIDB4MTdmNiwgMHg2MDM4LCAweGE0MDIsIDB4NjAzNCwgMHhhMzAzLAotCTB4MDA0MCwgMHgxN2U0LCAweDAwYzgsIDB4MTdmNiwgMHg2NDNhLCAweDYzMzYsIDB4NmMyYSwgMHg2YjJlLAotCTB4MDQ3ZSwgMHgwMzdlLCAweDI0MDAsIDB4NmM3YywgMHhhNDAyLCAweDY4MTIsIDB4MjMwMCwgMHg2YjgwLAotCTB4YTMwMywgMHg2ODE2LCAweDAzN2YsIDB4MDQ3ZiwgMHgwMDc4LCAweDE3ZmEsIDB4MTA3OCwgMHg4ZDhlLAotCTB4MDA0MCwgMHgxN2MxLCAweDEwNzgsIDB4MjAzNSwgMHgwMGMwLCAweDE3YzEsIDB4MGM3ZSwgMHg3MDA0LAotCTB4MjA2MCwgMHg2MDI0LCAweGMwZDQsIDB4NjAyNiwgMHgwYzdmLCAweDY4NGMsIDB4ZDBmNCwgMHgwMDQwLAotCTB4MTgwZiwgMHg2ODE3LCAweGZmZmYsIDB4NjgxMywgMHhmZmZmLCAweDAwNzgsIDB4MTdjMSwgMHg2ODI0LAotCTB4MjA1MCwgMHg2ODE4LCAweDIwNjAsIDB4NjgzMCwgMHgyMDQwLCAweDYwMzQsIDB4YTBjYywgMHgwMDBmLAotCTB4MjAwOSwgMHgwMDExLCAweDEwNzgsIDB4MTgyNCwgMHgwMDQwLCAweDE4MjIsIDB4MjAwOSwgMHgwMDAxLAotCTB4MTA3OCwgMHgxODI0LCAweDJkNTgsIDB4MDA3YywgMHg4YWZmLCAweDAwNDAsIDB4MThiYiwgMHhhMDNlLAotCTB4MjczMCwgMHg2ODUwLCAweGQwZmMsIDB4MDBjMCwgMHgxODQ2LCAweGQwZjQsIDB4MDBjMCwgMHgxODU2LAotCTB4MGQ3ZSwgMHgyODA0LCAweGFjNjgsIDB4MjkwMCwgMHgwMDc5LCAweDE4MzYsIDB4MTg5ZCwgMHgxODVkLAotCTB4MTg1ZCwgMHgxODlkLCAweDE4OWQsIDB4MTg5NSwgMHgxODlkLCAweDE4NWQsIDB4MTg5ZCwgMHgxODYzLAotCTB4MTg2MywgMHgxODlkLCAweDE4OWQsIDB4MTg5ZCwgMHgxODhjLCAweDE4NjMsIDB4YzBmYywgMHg2ODUyLAotCTB4NmI2YywgMHg2YTcwLCAweDZkMWMsIDB4NmMyMCwgMHgwZDdlLCAweGQ5OWMsIDB4MDA0MCwgMHgxOGEwLAotCTB4MjgwNCwgMHhhYzY4LCAweDZmMDgsIDB4NmUwYywgMHgwMDc4LCAweDE4YTAsIDB4YzBmNCwgMHg2ODUyLAotCTB4NmI2YywgMHg2YTcwLCAweDBkN2UsIDB4MDA3OCwgMHgxOGE3LCAweDZiMDgsIDB4NmEwYywgMHg2ZDAwLAotCTB4NmMwNCwgMHgwMDc4LCAweDE4YTAsIDB4N2IwYywgMHhkM2JjLCAweDAwNDAsIDB4MTg4NCwgMHg3MDA0LAotCTB4MGU3ZSwgMHgyMDcwLCAweDcwMWMsIDB4MGU3ZiwgMHhhMDg2LCAweDAwMDgsIDB4MDBjMCwgMHgxODg0LAotCTB4N2IwOCwgMHhhMzljLCAweDBmZmYsIDB4MmQyMCwgMHgwZDdmLCAweDBkN2UsIDB4NmExNCwgMHg4MmZmLAotCTB4MDBjMCwgMHgxODdmLCAweDY4MTAsIDB4YTMwMiwgMHgwMDQ4LCAweDE4N2YsIDB4NmIxMCwgMHgyMDExLAotCTB4MDAwMCwgMHgyNDY4LCAweDAwNzgsIDB4MTg4NiwgMHg2YjEwLCAweDZhMTQsIDB4NmQwMCwgMHg2YzA0LAotCTB4NmYwOCwgMHg2ZTBjLCAweDAwNzgsIDB4MThhMCwgMHgwZDdmLCAweDBkN2UsIDB4NjgzNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDg2LCAweDAwMWUsIDB4MDBjMCwgMHgxODlkLCAweDBkN2YsIDB4MTA3OCwgMHgxZmQxLAotCTB4MDBjMCwgMHgxODI0LCAweGEwMGUsIDB4MDA3OCwgMHgxOGJiLCAweDBkN2YsIDB4MTA3OCwgMHgxMzI4LAotCTB4N2IyMiwgMHg3YTI2LCAweDdkMzIsIDB4N2MzNiwgMHg3ZjNhLCAweDdlM2UsIDB4NzkwMiwgMHg3MDAwLAotCTB4ODAwMCwgMHg3MDAyLCAweDBkN2YsIDB4NjgyOCwgMHhhMzAwLCAweDY4MmEsIDB4NjgyYywgMHhhMjAxLAotCTB4NjgyZSwgMHgyMzAwLCAweDZiMTAsIDB4YTMwMiwgMHg2ODEyLCAweDIyMDAsIDB4NmExNCwgMHhhMjAzLAotCTB4NjgxNiwgMHgxMDc4LCAweDFmZDEsIDB4MDA3YywgMHgxMDc4LCAweDEzMjgsIDB4MTA3OCwgMHgxYzUyLAotCTB4NzAwNCwgMHgyMDYwLCAweDBkN2UsIDB4NjAxMCwgMHgyMDY4LCAweDcwMDMsIDB4MDAwMCwgMHgxMDc4LAotCTB4MWFjNiwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHgxOGRiLCAweDY4MDgsIDB4ODAwMSwgMHg2ODBhLAotCTB4Njk3YywgMHg2OTEyLCAweDY5ODAsIDB4NjkxNiwgMHg2ODJiLCAweGZmZmYsIDB4NjgyZiwgMHhmZmZmLAotCTB4Njg1MCwgMHhjMGJkLCAweDY4NTIsIDB4MGQ3ZiwgMHgxMDc4LCAweDg3NTgsIDB4MDA3OCwgMHgxYWFkLAotCTB4MTA3OCwgMHgxMzI4LCAweDEyN2UsIDB4MjA5MSwgMHgyMTAwLCAweDAwN2UsIDB4MDE3ZSwgMHgyYjY4LAotCTB4NjgxOCwgMHgyMDYwLCAweDc5MDQsIDB4NzgwMywgMHgwMDAyLCAweGExODQsIDB4MDcwMCwgMHgwMGMwLAotCTB4MThiZSwgMHhhMTg0LCAweDAwMDMsIDB4YTA4NiwgMHgwMDAzLCAweDAwNDAsIDB4MThlMCwgMHg3MDAwLAotCTB4MDA3OSwgMHgxOGZhLCAweDE5MDIsIDB4MTkwNCwgMHgxYTA2LCAweDFhODQsIDB4MWE5YiwgMHgxOTAyLAotCTB4MTkwMiwgMHgxOTAyLCAweDEwNzgsIDB4MTMyOCwgMHg4MDAxLCAweDcwMDIsIDB4YTE4NCwgMHgwODgwLAotCTB4MDBjMCwgMHgxOTE5LCAweDhhZmYsIDB4MDA0MCwgMHgxOTliLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LAotCTB4MTgyNCwgMHgwMDQwLCAweDFhYWQsIDB4MjAwOSwgMHgwMDAxLCAweDEwNzgsIDB4MTgyNCwgMHgwMDc4LAotCTB4MWFhZCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweGQxYmMsIDB4MDBjMCwgMHgxOTc5LAotCTB4MDI3ZSwgMHgwMzdlLCAweDc4MDgsIDB4ZDBlYywgMHgwMGMwLCAweDE5MzAsIDB4N2MyMCwgMHg3ZDI0LAotCTB4N2UzMCwgMHg3ZjM0LCAweDc4MDMsIDB4MDAwOSwgMHg3MDAzLCAweDAwMDQsIDB4MDA3OCwgMHgxOTMyLAotCTB4MTA3OCwgMHgxYjlmLCAweDZiMjgsIDB4NmEyYywgMHgyNDAwLCAweDY4NmUsIDB4YTMxYSwgMHgyNTAwLAotCTB4Njg3MiwgMHhhMjEzLCAweDZiMmEsIDB4NmEyZSwgMHgwYzdlLCAweDcwMDQsIDB4MjA2MCwgMHg2MDI0LAotCTB4ZDBmNCwgMHgwMGMwLCAweDE5NDUsIDB4NjMzYSwgMHg2MjM2LCAweDBjN2YsIDB4MjQwMCwgMHg2OTEwLAotCTB4YTEwMCwgMHg2ODEyLCAweDI1MDAsIDB4NjkxNCwgMHhhMTAxLCAweDY4MTYsIDB4MDM3ZiwgMHgwMjdmLAotCTB4MjYwMCwgMHg2ODFlLCAweDI3MDAsIDB4NjgyMiwgMHgxMDc4LCAweDFmZWEsIDB4MmEwMCwgMHg2ODI2LAotCTB4MmMwMCwgMHg2ODFhLCAweDI4MDAsIDB4NjgzMiwgMHg2ODUwLCAweGMwZmQsIDB4Njg1MiwgMHg2ODA4LAotCTB4ODAwMSwgMHg2ODBhLCAweDAwYzAsIDB4MTk2ZSwgMHg2ODRjLCAweGQwZTQsIDB4MDA0MCwgMHgxOTZlLAotCTB4NzAwNCwgMHgyMDYwLCAweDIwMDksIDB4MDA0OCwgMHgxMDc4LCAweDc1NmMsIDB4NzAwMCwgMHhhMDg2LAotCTB4MDAwNCwgMHgwMDQwLCAweDFhYWQsIDB4NzAwMywgMHgwMDAwLCAweDEwNzgsIDB4MTc5ZiwgMHgwMDc4LAotCTB4MWFhZCwgMHgwNTdlLCAweDdkMGMsIDB4ZDViYywgMHgwMGMwLCAweDE5ODAsIDB4MTA3OCwgMHhhMjBjLAotCTB4MDU3ZiwgMHgxMDc4LCAweDFhYzYsIDB4MGY3ZSwgMHg3MDA0LCAweDIwNzgsIDB4MTA3OCwgMHg0ODkzLAotCTB4MDA0MCwgMHgxOThkLCAweDc4MjQsIDB4YzBmNSwgMHg3ODI2LCAweDBmN2YsIDB4NjgyYiwgMHhmZmZmLAotCTB4NjgyZiwgMHhmZmZmLCAweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDY5N2MsIDB4NjkxMiwgMHg2OTgwLAotCTB4NjkxNiwgMHgwMDc4LCAweDFhYWQsIDB4NzAwNCwgMHgwYzdlLCAweDIwNjAsIDB4NjAyNCwgMHgwYzdmLAotCTB4ZDBmNCwgMHgwMDQwLCAweDE5YTgsIDB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4MDA3OCwgMHgxYWFkLAotCTB4Njg0YywgMHhjMGY1LCAweDY4NGUsIDB4NzgxNCwgMHhhMDA1LCAweDAwYzAsIDB4MTljMCwgMHg3MDAzLAotCTB4MDAwMCwgMHg2ODA4LCAweDgwMDEsIDB4NjgwYSwgMHgwMGMwLCAweDE5YmMsIDB4NzAwNCwgMHgyMDYwLAotCTB4MjAwOSwgMHgwMDQ4LCAweDEwNzgsIDB4NzU2YywgMHgxMDc4LCAweDE3OWYsIDB4MDA3OCwgMHgxYWFkLAotCTB4NzgxNCwgMHg2OTEwLCAweGExMDIsIDB4NjgxMiwgMHg2OTE0LCAweGExODMsIDB4MDAwMCwgMHg2ODE2LAotCTB4NzgxNCwgMHg3OTA4LCAweGExOGMsIDB4MGZmZiwgMHhhMTg4LCAweDAwMDcsIDB4ODExNCwgMHg4MjE0LAotCTB4ODIxNCwgMHhhMTBhLCAweDgxMDQsIDB4ODAwNCwgMHg4MDA0LCAweGEyMGEsIDB4ODEwYiwgMHg4MTBiLAotCTB4ODEwYiwgMHgxMDc4LCAweDFiNGQsIDB4NzgwMywgMHgwMDA0LCAweDc4MGYsIDB4ZmZmZiwgMHg3ODAzLAotCTB4MDAwMSwgMHg3ODA0LCAweGQwZmMsIDB4MDA0MCwgMHgxOWUxLCAweDc4MDMsIDB4MDAwMiwgMHg3ODAzLAotCTB4MDAwNCwgMHg3ODBmLCAweDAwNzYsIDB4NzAwNCwgMHg3MDA3LCAweDAwMDAsIDB4MjA2MCwgMHgyMDA5LAotCTB4MDA0OCwgMHgxMDc4LCAweDc1NmMsIDB4MTA3OCwgMHgxYjgxLCAweDAwNDAsIDB4MTliYywgMHg3OTA4LAotCTB4ZDFlYywgMHgwMGMwLCAweDE5ZmYsIDB4MjAwOSwgMHgwMDA5LCAweDAwNzgsIDB4MWEwMSwgMHgyMDA5LAotCTB4MDAxOSwgMHg3OTAyLCAweDcwMDMsIDB4MDAwMywgMHgwMDc4LCAweDFhYWQsIDB4ODAwMSwgMHg3MDAyLAotCTB4ZDE5NCwgMHgwMDQwLCAweDFhMTgsIDB4NzgwNCwgMHhkMGZjLCAweDAwYzAsIDB4MThlYSwgMHg4YWZmLAotCTB4MDA0MCwgMHgxYWFkLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LCAweDE4MjQsIDB4MDA3OCwgMHgxYWFkLAotCTB4YTE4NCwgMHgwODgwLCAweDAwYzAsIDB4MWEyNSwgMHg4YWZmLCAweDAwNDAsIDB4MWFhZCwgMHgyMDA5LAotCTB4MDAwMSwgMHgxMDc4LCAweDE4MjQsIDB4MDA3OCwgMHgxYWFkLCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLAotCTB4MDAwMCwgMHhkMWJjLCAweDAwYzAsIDB4MWE2NSwgMHgwMjdlLCAweDAzN2UsIDB4NzgwOCwgMHhkMGVjLAotCTB4MDBjMCwgMHgxYTM4LCAweDc4MDMsIDB4MDAwOSwgMHg3MDAzLCAweDAwMDQsIDB4MDA3OCwgMHgxYTNhLAotCTB4MTA3OCwgMHgxYjlmLCAweDZiMjgsIDB4NmEyYywgMHgxMDc4LCAweDFmZWEsIDB4MGQ3ZSwgMHgwZjdlLAotCTB4MmQ3OCwgMHgyODA0LCAweGFjNjgsIDB4NjAzNCwgMHhkMDljLCAweDAwYzAsIDB4MWE1NSwgMHg2ODA4LAotCTB4MjAwOCwgMHhhMzFhLCAweDY4MGMsIDB4YTIxMywgMHg3ODEwLCAweGExMDAsIDB4NzgxMiwgMHg2OTBjLAotCTB4NzgxNCwgMHhhMTAxLCAweDc4MTYsIDB4MDA3OCwgMHgxYTYxLCAweDY4MTAsIDB4MjAwOCwgMHhhMzFhLAotCTB4NjgxNCwgMHhhMjEzLCAweDc4MTAsIDB4YTEwMCwgMHg3ODEyLCAweDY5MTQsIDB4NzgxNCwgMHhhMTAxLAotCTB4NzgxNiwgMHgwZjdmLCAweDBkN2YsIDB4MDA3OCwgMHgxOTM0LCAweDA1N2UsIDB4N2QwYywgMHgxMDc4LAotCTB4YTIwYywgMHgwNTdmLCAweDEwNzgsIDB4MWFjNiwgMHgwZjdlLCAweDcwMDQsIDB4MjA3OCwgMHgxMDc4LAotCTB4NDg5MywgMHgwMDQwLCAweDFhNzYsIDB4NzgyNCwgMHhjMGY1LCAweDc4MjYsIDB4MGY3ZiwgMHg2ODJiLAotCTB4ZmZmZiwgMHg2ODJmLCAweGZmZmYsIDB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4Njk3YywgMHg2OTEyLAotCTB4Njk4MCwgMHg2OTE2LCAweDAwNzgsIDB4MWFhZCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywgMHgwMDAwLAotCTB4NzAwNCwgMHhhMDBkLCAweDAwNDAsIDB4MWE5NywgMHg2ODA4LCAweDgwMDEsIDB4NjgwYSwgMHgwMGMwLAotCTB4MWE5NywgMHg3MDA0LCAweDIwNjAsIDB4MjAwOSwgMHgwMDQ4LCAweDEwNzgsIDB4NzU2YywgMHgxMDc4LAotCTB4MTc5ZiwgMHgwMDc4LCAweDFhYWQsIDB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHg3MDA0LAotCTB4MjA2MCwgMHg2MDEwLCAweGEwMDUsIDB4MDA0MCwgMHgxYTk3LCAweDIwNjgsIDB4NjgwOCwgMHg4MDAwLAotCTB4NjgwYSwgMHg2YzI4LCAweDZiMmMsIDB4MTA3OCwgMHgxN2JlLCAweDAxN2YsIDB4MDA3ZiwgMHgxMjdmLAotCTB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4MjEwMCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywgMHgwMGMwLAotCTB4MWFjNCwgMHg3MDBjLCAweDcxMTAsIDB4YTEwNiwgMHgwMDQwLCAweDFhYzQsIDB4MjBlMSwgMHg5MDI4LAotCTB4NzAwZiwgMHhhNWU3LCAweDcwMTMsIDB4YTVlNywgMHgxMjdmLCAweDAwN2MsIDB4MGM3ZSwgMHgxMDc4LAotCTB4MWFmNywgMHgyMGUxLCAweDkwMjgsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDA0MCwgMHgxYWVkLAotCTB4MjEwNCwgMHhhMDA1LCAweDAwNDAsIDB4MWFkYSwgMHgyMDYwLCAweDYwMTAsIDB4MjA2MCwgMHg2MDA4LAotCTB4ODAwMSwgMHg2MDBhLCAweGExODgsIDB4MDAwMywgMHhhMTgyLCAweGE2MDIsIDB4MDA0OCwgMHgxYWUyLAotCTB4MjAwOSwgMHhhNWU3LCAweDcxMTIsIDB4NzAwYywgMHhhMTA2LCAweDAwYzAsIDB4MWFjYiwgMHgyMDAxLAotCTB4MDEzOCwgMHgyMDAzLCAweDAwMDgsIDB4MDA3OCwgMHgxYWNiLCAweDIwMDEsIDB4MDE1ZCwgMHgyMDBjLAotCTB4ODEwYSwgMHgyMTAyLCAweDIwMDEsIDB4MDEzOCwgMHgyMjAyLCAweDBjN2YsIDB4MDA3YywgMHgyMDAxLAotCTB4MDEzOCwgMHgyMDE0LCAweDIwMDMsIDB4MDAwMCwgMHgyMDIxLCAweGIwMTUsIDB4MjAwMSwgMHgwMTQxLAotCTB4MjAxYywgMHhkM2RjLCAweDAwYzAsIDB4MWIxNCwgMHgyMDAxLCAweDAxMDksIDB4MjAxYywgMHhhMzljLAotCTB4MDA0OCwgMHgwMGMwLCAweDFiMTQsIDB4MjAwMSwgMHgwMTExLCAweDIwMWMsIDB4ODNmZiwgMHgwMGMwLAotCTB4MWIxNCwgMHg4NDIxLCAweDAwYzAsIDB4MWFmZSwgMHgwMDdjLCAweDIwMTEsIDB4MDIwMSwgMHgyMDA5LAotCTB4MDAzYywgMHgyMjA0LCAweGEwMDUsIDB4MDBjMCwgMHgxYjIxLCAweDgxMDksIDB4MDBjMCwgMHgxYjE5LAotCTB4MDA3YywgMHgwMDdjLCAweDEwNzgsIDB4MWIxNSwgMHgwMDQwLCAweDFiNGEsIDB4NzkwOCwgMHhkMWVjLAotCTB4MDBjMCwgMHgxYjNhLCAweDEwNzgsIDB4MWI4MSwgMHgwMDQwLCAweDFiM2EsIDB4NzgwMywgMHgwMDA5LAotCTB4NzkwNCwgMHhkMWZjLCAweDAwNDAsIDB4MWIzMCwgMHg3ODAzLCAweDAwMDYsIDB4MTA3OCwgMHgxYjE1LAotCTB4MDA0MCwgMHgxYjRhLCAweDc4MGMsIDB4ZDBhNCwgMHgwMGMwLCAweDFiNGEsIDB4NzAwNywgMHgwMDAwLAotCTB4MTA3OCwgMHgxYjgxLCAweDAwNDAsIDB4MWI0YywgMHg3ODAzLCAweDAwMTksIDB4NzAwMywgMHgwMDAzLAotCTB4MDA3OCwgMHgxYjRjLCAweDEwNzgsIDB4MWFjNiwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHgwMjAwLAotCTB4NzgwOCwgMHhhMDg0LCAweGYwMDAsIDB4YTEwZCwgMHgxMDc4LCAweDFhZjcsIDB4MjAxOSwgMHg1MDAwLAotCTB4ODMxOSwgMHgwMDQwLCAweDFiNmIsIDB4MjAwMSwgMHhhNjAyLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAwLAotCTB4MDA0MCwgMHgxYjZiLCAweDIwMDEsIDB4MDAyMSwgMHhkMGZjLCAweDAwNDAsIDB4MWI1OCwgMHgxMDc4LAotCTB4MWU1ZCwgMHgwMDc4LCAweDFiNTYsIDB4MjBlMSwgMHg3MDAwLCAweDczMjQsIDB4NzQyMCwgMHg3MDI4LAotCTB4NzAyOCwgMHg3NDI2LCAweDcwMzcsIDB4MDAwMSwgMHg4MTBmLCAweDcxMmUsIDB4NzAyZiwgMHgwMTAwLAotCTB4NzAzNywgMHgwMDA4LCAweDczMjYsIDB4NzQyMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwZTdmLAotCTB4MDA3YywgMHg3OTA4LCAweGExOGMsIDB4MGZmZiwgMHhhMTgyLCAweDAwMDksIDB4MDA0OCwgMHgxYjhjLAotCTB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4MWI5ZSwgMHgyMDAxLCAweDAyMGEsIDB4ODFmZiwgMHgwMDQwLAotCTB4MWI5NywgMHgyMGUxLCAweDYwMDAsIDB4MjAwYywgMHgyMDBjLCAweDIwMGMsIDB4MjAwYywgMHgyMGUxLAotCTB4NzAwMCwgMHgyMDBjLCAweDIwMGMsIDB4NzAwMywgMHgwMDAwLCAweGEwMDYsIDB4MDA3YywgMHg3YzIwLAotCTB4N2QyNCwgMHg3ZTMwLCAweDdmMzQsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDA0MCwgMHgxYzI0LAotCTB4NzAwNCwgMHgwMTdlLCAweDIxMGMsIDB4YTEwNiwgMHgwMTdmLCAweDAwNDAsIDB4MWMyNCwgMHgwZDdlLAotCTB4MGM3ZSwgMHgyMTZjLCAweDJkMDAsIDB4YTAwNSwgMHgwMDQwLCAweDFjMjIsIDB4NjgyNCwgMHhkMGQ0LAotCTB4MDBjMCwgMHgxYzIyLCAweDY4MTAsIDB4MjA2OCwgMHg2ODUwLCAweGQwZmMsIDB4MDA0MCwgMHgxYmVjLAotCTB4ODEwOCwgMHgyMTA0LCAweDZiMmMsIDB4YTMwNiwgMHgwMGMwLCAweDFjMjIsIDB4ODEwOCwgMHgyMTA0LAotCTB4NmEyOCwgMHhhMjA2LCAweDAwYzAsIDB4MWMyMiwgMHg2ODUwLCAweGMwZmMsIDB4YzBmNSwgMHg2ODUyLAotCTB4Njg2YywgMHg3ODIyLCAweDY4NzAsIDB4NzgyNiwgMHg2ODFjLCAweDc4MzIsIDB4NjgyMCwgMHg3ODM2LAotCTB4NjgxOCwgMHgyMDYwLCAweDYwMzQsIDB4ZDA5YywgMHgwMDQwLCAweDFiZTcsIDB4NjgzMCwgMHgyMDA0LAotCTB4YWM2OCwgMHg2ODA4LCAweDc4M2EsIDB4NjgwYywgMHg3ODNlLCAweDAwNzgsIDB4MWMyMCwgMHhhMDA2LAotCTB4NzgzYSwgMHg3ODNlLCAweDAwNzgsIDB4MWMyMCwgMHg4MTA4LCAweDIxMDQsIDB4YTAwNSwgMHgwMGMwLAotCTB4MWMyMiwgMHg4MTA4LCAweDIxMDQsIDB4YTAwNSwgMHgwMGMwLCAweDFjMjIsIDB4Njg1MCwgMHhjMGY1LAotCTB4Njg1MiwgMHg2ODMwLCAweDIwMDQsIDB4NjkxOCwgMHhhMTYwLCAweGExODAsIDB4MDAwZCwgMHgyMDA0LAotCTB4ZDA5YywgMHgwMGMwLCAweDFjMTIsIDB4NjAwOCwgMHg3ODIyLCAweDY4NmUsIDB4NjAwYywgMHg3ODI2LAotCTB4Njg3MiwgMHg2MDAwLCAweDc4MzIsIDB4NjAwNCwgMHg3ODM2LCAweGEwMDYsIDB4NzgzYSwgMHg3ODNlLAotCTB4MDA3OCwgMHgxYzIwLCAweDYwMTAsIDB4NzgyMiwgMHg2ODZlLCAweDYwMTQsIDB4NzgyNiwgMHg2ODcyLAotCTB4NjAwMCwgMHg3ODMyLCAweDYwMDQsIDB4NzgzNiwgMHg2MDA4LCAweDc4M2EsIDB4NjAwYywgMHg3ODNlLAotCTB4NzgwMywgMHgwMDExLCAweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwgMHgwMTdlLAotCTB4MDI3ZSwgMHgyMDcxLCAweGE1ZTEsIDB4MjA3OSwgMHgwMDMwLCAweDIwMTEsIDB4MDA1MCwgMHg3MDAwLAotCTB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4MWM0ZCwgMHg4MjExLCAweDAwNDAsIDB4MWM0YiwgMHgyMDAxLAotCTB4MDAwNSwgMHgyMDA0LCAweGQwOGMsIDB4MDA0MCwgMHgxYzM0LCAweDc5MDQsIDB4YTE4YywgMHgwNzgwLAotCTB4MDE3ZSwgMHgxMDc4LCAweDE4ZTIsIDB4MDE3ZiwgMHg4MWZmLCAweDAwYzAsIDB4MWM0YiwgMHgyMDExLAotCTB4MDA1MCwgMHgwMDc4LCAweDFjMmYsIDB4YTA4NSwgMHgwMDAxLCAweDAyN2YsIDB4MDE3ZiwgMHgwZTdmLAotCTB4MGY3ZiwgMHgwMDdjLCAweDc4MDMsIDB4MDAwNCwgMHgyMDA5LCAweDAwNjQsIDB4NzgwNCwgMHhkMGFjLAotCTB4MDA0MCwgMHgxY2EzLCAweDgxMDksIDB4MDBjMCwgMHgxYzU2LCAweDIwMDksIDB4MDEwMCwgMHgyMTBjLAotCTB4YTE4YSwgMHgwMDAzLCAweDEwNDgsIDB4MTMyOCwgMHgxMDc4LCAweDFmNzUsIDB4MGU3ZSwgMHgwZjdlLAotCTB4MjA3MSwgMHhhNWQwLCAweDIwNzksIDB4MDAxMCwgMHg3MDA0LCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLAotCTB4MWM5YiwgMHg3ODAwLCAweDAwN2UsIDB4NzgyMCwgMHgwMDdlLCAweDc4MzAsIDB4MDA3ZSwgMHg3ODM0LAotCTB4MDA3ZSwgMHg3ODM4LCAweDAwN2UsIDB4NzgzYywgMHgwMDdlLCAweDc4MDMsIDB4MDAwNCwgMHg3ODIzLAotCTB4MDAwMCwgMHgwMDA1LCAweDAwMDUsIDB4MjA3OSwgMHgwMDMwLCAweDc4MDQsIDB4ZDBhYywgMHgxMGMwLAotCTB4MTMyOCwgMHgyMDc5LCAweDAwMTAsIDB4MDA3ZiwgMHg3ODNlLCAweDAwN2YsIDB4NzgzYSwgMHgwMDdmLAotCTB4NzgzNiwgMHgwMDdmLCAweDc4MzIsIDB4MDA3ZiwgMHg3ODIyLCAweDAwN2YsIDB4NzgwMiwgMHgwZjdmLAotCTB4MGU3ZiwgMHgwMDc4LCAweDFjYTEsIDB4MGY3ZiwgMHgwZTdmLCAweDc4MDQsIDB4ZDBhYywgMHgxMGMwLAotCTB4MTMyOCwgMHgxMDc4LCAweDYxZDMsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTYwMiwgMHg3MDAzLAotCTB4MDAwMCwgMHgwZTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHhhMjgwLCAweDAwMDQsIDB4MjA2YywgMHg2OTRjLAotCTB4ZDFkYywgMHgwMGMwLCAweDFkMjYsIDB4NjkzNCwgMHhhMTg0LCAweDAwMDcsIDB4MDA3OSwgMHgxY2I4LAotCTB4MWNjMCwgMHgxZDExLCAweDFjYzAsIDB4MWNjMCwgMHgxY2MwLCAweDFjZjYsIDB4MWNkMywgMHgxY2MyLAotCTB4MTA3OCwgMHgxMzI4LCAweDY4NGMsIDB4ZDBiNCwgMHgwMDQwLCAweDFlMzQsIDB4Njg2MCwgMHg2ODJlLAotCTB4NjgxNiwgMHg2ODVjLCAweDY4MmEsIDB4NjgxMiwgMHg2ODdjLCAweDY4MGEsIDB4Njg4MCwgMHg2ODBlLAotCTB4Njk1OCwgMHgwMDc4LCAweDFkMTksIDB4NjgzNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDFlLAotCTB4MDBjMCwgMHgxY2MwLCAweDY4NGMsIDB4ZDBiNCwgMHgwMDQwLCAweDFlMzQsIDB4Njg2MCwgMHg2ODJlLAotCTB4NjgxNiwgMHg2ODVjLCAweDY4MmEsIDB4NjgxMiwgMHg2ODdjLCAweDY4MGEsIDB4Njg4MCwgMHg2ODBlLAotCTB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwgMHhhMDgwLAotCTB4MjAxNSwgMHgyMDA0LCAweDY4MzIsIDB4Njk1OCwgMHgwMDc4LCAweDFkMjIsIDB4YTE4YywgMHgwMGZmLAotCTB4YTE4NiwgMHgwMDE1LCAweDAwYzAsIDB4MWQyNiwgMHg2ODRjLCAweGQwYjQsIDB4MDA0MCwgMHgxZTM0LAotCTB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwgMHhhMDgwLAotCTB4MjAxNSwgMHgyMDA0LCAweDY4MzIsIDB4Njk1OCwgMHhhMDA2LCAweDY4MmUsIDB4NjgyYSwgMHgwMDc4LAotCTB4MWQyMiwgMHg2ODRjLCAweGQwYjQsIDB4MDA0MCwgMHgxOGJjLCAweDY5NTgsIDB4YTAwNiwgMHg2ODJlLAotCTB4NjgyYSwgMHgyZDAwLCAweDY4MWEsIDB4NjgzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwgMHgyMDE1LAotCTB4MjAwNCwgMHg2ODMyLCAweDY5MjYsIDB4Njg0YywgMHhjMGRkLCAweDY4NGUsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4MGY3ZSwgMHgyMDc5LCAweDAwMjAsIDB4NzgwNCwgMHhkMGZjLCAweDEwYzAsIDB4MWU1ZCwgMHgwZTdlLAotCTB4MGQ3ZSwgMHgyMDcxLCAweGE2MDIsIDB4NzAwMCwgMHhhMDA1LCAweDAwYzAsIDB4MWRhYiwgMHgwYzdlLAotCTB4NzIwNiwgMHhhMjgwLCAweDAwMDQsIDB4MjA1YywgMHg3MDA0LCAweDIwNjgsIDB4NzgwMywgMHgwMDA0LAotCTB4NjgxOCwgMHgwZDdlLCAweDIwNjgsIDB4Njg2YywgMHg3ODEyLCAweDY4OTAsIDB4MGY3ZSwgMHgyMGUxLAotCTB4OTA0MCwgMHgyMDc5LCAweDAyMDAsIDB4NzgxYSwgMHgyMDc5LCAweDAxMDAsIDB4ODAwNCwgMHg3OGQ2LAotCTB4MGY3ZiwgMHgwZDdmLCAweDJiNjgsIDB4NjgyNCwgMHgyMDUwLCAweDY4MTgsIDB4MjA2MCwgMHg2ODMwLAotCTB4MjA0MCwgMHg2MDM0LCAweGEwY2MsIDB4MDAwZiwgMHg2OTA4LCAweDIwMDEsIDB4MDRmZCwgMHgyMDA0LAotCTB4YTA4NiwgMHgwMDA3LCAweDAwNDAsIDB4MWQ2ZCwgMHhhMTg0LCAweDAwMDcsIDB4MDA0MCwgMHgxZDZkLAotCTB4MDE3ZSwgMHgyMDA5LCAweDAwMDgsIDB4YTEwMiwgMHgwMTdmLCAweGExMDgsIDB4NzkxYSwgMHg3MTE2LAotCTB4NzAxZSwgMHg2ODBjLCAweGEwODEsIDB4MDAwMCwgMHg3ODFlLCAweDcwMWEsIDB4YTAwNiwgMHg3MDBlLAotCTB4NzAxMiwgMHg3MDA0LCAweDY5MmMsIDB4NjgxNCwgMHhhMTA2LCAweDAwYzAsIDB4MWQ4NCwgMHg2OTI4LAotCTB4NjgxMCwgMHhhMTA2LCAweDAwNDAsIDB4MWQ5MSwgMHgwMzdlLCAweDA0N2UsIDB4NmIxNCwgMHg2YzEwLAotCTB4MTA3OCwgMHgyMDM1LCAweDA0N2YsIDB4MDM3ZiwgMHgwMDQwLCAweDFkOTEsIDB4MGM3ZiwgMHgwMDc4LAotCTB4MWRhYiwgMHg4YWZmLCAweDAwYzAsIDB4MWQ5OSwgMHgwYzdmLCAweGEwODUsIDB4MDAwMSwgMHgwMDc4LAotCTB4MWRhYiwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAwMjAsIDB4MjAwOSwgMHgwMDAxLAotCTB4MTA3OCwgMHgxZGFmLCAweDAwNDAsIDB4MWRhOCwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwgMHgxZGFmLAotCTB4MTI3ZiwgMHgwYzdmLCAweGEwMDYsIDB4MGQ3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHgwNzdlLAotCTB4MDY3ZSwgMHgwNTdlLCAweDA0N2UsIDB4MDM3ZSwgMHgwMjdlLCAweDhhZmYsIDB4MDA0MCwgMHgxZTJkLAotCTB4NzAwYywgMHg3MjE0LCAweGEyM2EsIDB4NzAxMCwgMHg3MjE4LCAweGEyMDMsIDB4MDA0OCwgMHgxZTJjLAotCTB4YTcwNSwgMHgwMDQwLCAweDFlMmMsIDB4YTAzZSwgMHgyNzMwLCAweDY4NTAsIDB4ZDBmYywgMHgwMGMwLAotCTB4MWRkZiwgMHgwZDdlLCAweDI4MDQsIDB4YWM2OCwgMHgyOTAwLCAweDAwNzksIDB4MWRjZiwgMHgxZTBlLAotCTB4MWRlZiwgMHgxZGVmLCAweDFlMGUsIDB4MWUwZSwgMHgxZTA2LCAweDFlMGUsIDB4MWRlZiwgMHgxZTBlLAotCTB4MWRmNSwgMHgxZGY1LCAweDFlMGUsIDB4MWUwZSwgMHgxZTBlLCAweDFkZmQsIDB4MWRmNSwgMHhjMGZjLAotCTB4Njg1MiwgMHg2YjZjLCAweDZhNzAsIDB4NmQxYywgMHg2YzIwLCAweGQ5OWMsIDB4MDA0MCwgMHgxZTEyLAotCTB4MGQ3ZSwgMHgyODA0LCAweGFjNjgsIDB4NmYwOCwgMHg2ZTBjLCAweDAwNzgsIDB4MWUxMSwgMHg2YjA4LAotCTB4NmEwYywgMHg2ZDAwLCAweDZjMDQsIDB4MDA3OCwgMHgxZTExLCAweDZiMTAsIDB4NmExNCwgMHg2ZDAwLAotCTB4NmMwNCwgMHg2ZjA4LCAweDZlMGMsIDB4MDA3OCwgMHgxZTExLCAweDBkN2YsIDB4MGQ3ZSwgMHg2ODM0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAxZSwgMHgwMGMwLCAweDFlMGUsIDB4MGQ3ZiwgMHgxMDc4LAotCTB4MWZkMSwgMHgwMGMwLCAweDFkYjUsIDB4YTAwZSwgMHgwMDc4LCAweDFlMmQsIDB4MGQ3ZiwgMHgxMDc4LAotCTB4MTMyOCwgMHgwZDdmLCAweDdiMjIsIDB4N2EyNiwgMHg3ZDMyLCAweDdjMzYsIDB4N2YzYSwgMHg3ZTNlLAotCTB4NzkwMiwgMHg3MDAwLCAweDgwMDAsIDB4NzAwMiwgMHg2ODI4LCAweGEzMDAsIDB4NjgyYSwgMHg2ODJjLAotCTB4YTIwMSwgMHg2ODJlLCAweDcwMGMsIDB4YTMwMCwgMHg3MDBlLCAweDcwMTAsIDB4YTIwMSwgMHg3MDEyLAotCTB4MTA3OCwgMHgxZmQxLCAweDAwNzgsIDB4MWUyZCwgMHhhMDA2LCAweDAyN2YsIDB4MDM3ZiwgMHgwNDdmLAotCTB4MDU3ZiwgMHgwNjdmLCAweDA3N2YsIDB4MDA3YywgMHgxMDc4LCAweDEzMjgsIDB4MDI3ZSwgMHgyMDAxLAotCTB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLAotCTB4MDAwMCwgMHg3MDA0LCAweDIwNjAsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LAotCTB4MDA0MCwgMHgxZTRkLCAweDY4NTAsIDB4YzBiZCwgMHg2ODUyLCAweDBkN2YsIDB4MTA3OCwgMHg4NzU4LAotCTB4MjBlMSwgMHg5MDQwLCAweDEwNzgsIDB4NzE5YSwgMHgyMDExLCAweDAwMDAsIDB4MTA3OCwgMHg2ZWZjLAotCTB4MTA3OCwgMHg2MWQzLCAweDAyN2YsIDB4MDA3OCwgMHgxZjI5LCAweDEyN2UsIDB4MjA5MSwgMHgyMjAwLAotCTB4MDA3ZSwgMHgwMTdlLCAweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MjA3OSwgMHgwMDIwLAotCTB4MjA3MSwgMHhhNjAyLCAweDJiNjgsIDB4NjgxOCwgMHgyMDYwLCAweDc5MDQsIDB4NzgwMywgMHgwMDAyLAotCTB4YTE4NCwgMHgwNzAwLCAweDAwYzAsIDB4MWUzNiwgMHg3MDAwLCAweDAwNzksIDB4MWU3NywgMHgxZjI5LAotCTB4MWU3YiwgMHgxZWY2LCAweDFmMjcsIDB4ODAwMSwgMHg3MDAyLCAweGQxOWMsIDB4MDBjMCwgMHgxZThmLAotCTB4OGFmZiwgMHgwMDQwLCAweDFlYWUsIDB4MjAwOSwgMHgwMDAxLCAweDEwNzgsIDB4MWRhZiwgMHgwMDQwLAotCTB4MWYyOSwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwgMHgxZGFmLCAweDAwNzgsIDB4MWYyOSwgMHg3ODAzLAotCTB4MDAwNCwgMHhkMTk0LCAweDAwNDAsIDB4MWU5ZiwgMHg2ODUwLCAweGMwZmMsIDB4Njg1MiwgMHg4YWZmLAotCTB4MDBjMCwgMHgxZWE0LCAweDY4NGMsIDB4YzBmNSwgMHg2ODRlLCAweDAwNzgsIDB4MWVhNCwgMHgxMDc4LAotCTB4MWZlYSwgMHg2ODUwLCAweGMwZmQsIDB4Njg1MiwgMHgyYTAwLCAweDY4MjYsIDB4MmMwMCwgMHg2ODFhLAotCTB4MjgwMCwgMHg2ODMyLCAweDcwMDMsIDB4MDAwMCwgMHgwMDc4LCAweDFmMjksIDB4NzExYywgMHg4MWZmLAotCTB4MDA0MCwgMHgxZWM0LCAweDc5MTgsIDB4NzkyMiwgMHg3ODI3LCAweDAwMDAsIDB4NzgwMywgMHgwMDAxLAotCTB4NzAwMCwgMHg4MDAwLCAweDcwMDIsIDB4NzAwYywgMHhhMTAwLCAweDcwMGUsIDB4NzAxMCwgMHhhMDgxLAotCTB4MDAwMCwgMHg3MDEyLCAweDAwNzgsIDB4MWYyOSwgMHgwZjdlLCAweDAyN2UsIDB4NzgxYywgMHgwMDdlLAotCTB4NzgxOCwgMHgwMDdlLCAweDIwNzksIDB4MDEwMCwgMHg3YTE0LCAweGEyODQsIDB4MDAwNCwgMHhhMDg1LAotCTB4MDAxMiwgMHg3ODE2LCAweDAzN2UsIDB4MjAxOSwgMHgxMDAwLCAweDgzMTksIDB4MTA0MCwgMHgxMzI4LAotCTB4NzgyMCwgMHhkMGJjLCAweDAwYzAsIDB4MWVkNSwgMHgwMzdmLCAweDc5YzgsIDB4MDA3ZiwgMHhhMTAyLAotCTB4MDE3ZiwgMHgwMDdlLCAweDAxN2UsIDB4NzljNCwgMHgwMDdmLCAweGExMDMsIDB4NzhjNiwgMHgwMDdmLAotCTB4NzhjYSwgMHhhMjg0LCAweDAwMDQsIDB4YTA4NSwgMHgwMDEyLCAweDc4MTYsIDB4MDI3ZiwgMHgwZjdmLAotCTB4NzgwMywgMHgwMDA4LCAweDcwMDMsIDB4MDAwMCwgMHgwMDc4LCAweDFmMjksIDB4ODAwMSwgMHg3MDAyLAotCTB4ZDE5NCwgMHgwMDQwLCAweDFmMGIsIDB4NzgwNCwgMHhkMGZjLCAweDAwYzAsIDB4MWU2ZCwgMHhkMTljLAotCTB4MDBjMCwgMHgxZjI1LCAweDhhZmYsIDB4MDA0MCwgMHgxZjI5LCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LAotCTB4MWRhZiwgMHgwMDc4LCAweDFmMjksIDB4MDI3ZSwgMHgwMzdlLCAweDZiMjgsIDB4NmEyYywgMHgxMDc4LAotCTB4MWZlYSwgMHgwZDdlLCAweDI4MDQsIDB4YWM2OCwgMHg2MDM0LCAweGQwOWMsIDB4MDBjMCwgMHgxZjFlLAotCTB4NjgwOCwgMHhhMzFhLCAweDY4MGMsIDB4YTIxMywgMHgwMDc4LCAweDFmMjIsIDB4NjgxMCwgMHhhMzFhLAotCTB4NjgxNCwgMHhhMjEzLCAweDBkN2YsIDB4MDA3OCwgMHgxZTlmLCAweDAwNzgsIDB4MWU5ZiwgMHgxMDc4LAotCTB4MTMyOCwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLCAweDAxN2YsIDB4MDA3ZiwgMHgxMjdmLAotCTB4MDA3YywgMHgwZjdlLCAweDBlN2UsIDB4MjA3MSwgMHhhNjAyLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAwLAotCTB4MDA0MCwgMHgxZjcyLCAweDIwNzksIDB4MDAyMCwgMHgwMTdlLCAweDIwMDksIDB4MDIwNywgMHgyMTBjLAotCTB4ZDE5NCwgMHgwMDQwLCAweDFmNGYsIDB4MjAwOSwgMHgwMjBjLCAweDIxMGMsIDB4YTE4NCwgMHgwMDAzLAotCTB4MDA0MCwgMHgxZjRmLCAweDIwZTEsIDB4OTA0MCwgMHgyMDAxLCAweDAyMGMsIDB4MjEwMiwgMHgyMDA5LAotCTB4MDIwNiwgMHgyMTA0LCAweDIwMDksIDB4MDIwMywgMHgyMTBjLCAweGExMDYsIDB4MDBjMCwgMHgxZjVhLAotCTB4MjBlMSwgMHg5MDQwLCAweDc4MDQsIDB4ZDBmYywgMHgwMDQwLCAweDFmM2QsIDB4MTA3OCwgMHgxZTVkLAotCTB4NzAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDBjMCwgMHgxZjNkLCAweDAxN2YsIDB4NzgwMywgMHgwMDA0LAotCTB4NzgwNCwgMHhkMGFjLCAweDAwYzAsIDB4MWY2OCwgMHgyMGUxLCAweDkwNDAsIDB4NzgwMywgMHgwMDAyLAotCTB4NzAwMywgMHgwMDAwLCAweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MGM3ZSwgMHgwZDdlLAotCTB4MGU3ZSwgMHgwZjdlLCAweDIwNzEsIDB4YTYwMiwgMHgyMDc5LCAweDAwMjAsIDB4NzAwMCwgMHhhMDg2LAotCTB4MDAwMCwgMHgwMDQwLCAweDFmYWUsIDB4NzAwNCwgMHgyMDYwLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LAotCTB4OGE0NCwgMHgwMDQwLCAweDFmOTgsIDB4Njg1MCwgMHhjMGI1LCAweDY4NTIsIDB4NjgwYywgMHg3YTFjLAotCTB4YTIwNiwgMHgwMGMwLCAweDFmOTgsIDB4NjgwOCwgMHg3YTE4LCAweGEyMDYsIDB4MDA0MCwgMHgxZmI0LAotCTB4MjAwMSwgMHgwMTA1LCAweDIwMDMsIDB4MDAxMCwgMHgyMGUxLCAweDkwNDAsIDB4NzgwMywgMHgwMDA0LAotCTB4NzAwMywgMHgwMDAwLCAweDcwMDQsIDB4MjA2MCwgMHgxMDc4LCAweDg3NTgsIDB4MjBlMSwgMHg5MDQwLAotCTB4MTA3OCwgMHg3MTlhLCAweDIwMTEsIDB4MDAwMCwgMHgxMDc4LCAweDZlZmMsIDB4MGY3ZiwgMHgwZTdmLAotCTB4MGQ3ZiwgMHgwYzdmLCAweDAyN2YsIDB4MDA3YywgMHg2ODEwLCAweDZhMTQsIDB4YTIwNSwgMHgwMGMwLAotCTB4MWY5OCwgMHg2ODRjLCAweGMwZGMsIDB4Njg0ZSwgMHgyYzEwLCAweDEwNzgsIDB4MWNhYiwgMHgyMDAxLAotCTB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLAotCTB4MDAwMCwgMHgyMDY5LCAweGE1YWIsIDB4NjgzMywgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwgMHgwMDc4LAotCTB4MWZhZSwgMHg4ODQwLCAweDI4MDQsIDB4YTAwNSwgMHgwMGMwLCAweDFmZTUsIDB4NjAwNCwgMHhhMDA1LAotCTB4MDA0MCwgMHgxZmU3LCAweDY4MWEsIDB4MjA2MCwgMHg2MDM0LCAweGEwODQsIDB4MDAwZiwgMHhhMDgwLAotCTB4MjAxNSwgMHgyMDQ0LCAweDg4ZmYsIDB4MTA0MCwgMHgxMzI4LCAweDhhNTEsIDB4MDA3YywgMHgyMDUxLAotCTB4MDAwMCwgMHgwMDdjLCAweDhhNTAsIDB4ODg0MSwgMHgyODA0LCAweGEwMDUsIDB4MDBjMCwgMHgyMDA0LAotCTB4MmMwMCwgMHhhZDA2LCAweDAwNDAsIDB4MWZmOSwgMHg2MDAwLCAweGEwMDUsIDB4MDBjMCwgMHgxZmY5LAotCTB4MmQwMCwgMHgyMDYwLCAweDY4MWEsIDB4NjAzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwgMHgyMDI1LAotCTB4MjA0NCwgMHg4OGZmLCAweDEwNDAsIDB4MTMyOCwgMHgwMDdjLCAweDAwMDAsIDB4MDAxMSwgMHgwMDE1LAotCTB4MDAxOSwgMHgwMDFkLCAweDAwMjEsIDB4MDAyNSwgMHgwMDI5LCAweDAwMDAsIDB4MDAwZiwgMHgwMDE1LAotCTB4MDAxYiwgMHgwMDIxLCAweDAwMjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjAwYSwgMHgyMDA2LAotCTB4MDAwMCwgMHgwMDAwLCAweDIwMTQsIDB4MDAwMCwgMHgyMDBhLCAweDAwMDAsIDB4MjAxMSwgMHgyMDBlLAotCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjAxNCwgMHgyMDExLCAweDAwMDAsIDB4MjAwYywgMHgyMDBjLAotCTB4MDAwMCwgMHgwMDAwLCAweDIwMTQsIDB4MDAwMCwgMHgyMDBjLCAweDAwMDAsIDB4MjAxMiwgMHgyMDEyLAotCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjAxNCwgMHgyMDEyLCAweDBhN2UsIDB4MDk3ZSwgMHgwODdlLAotCTB4NmIyZSwgMHg2YzJhLCAweDY4NTgsIDB4YTA1NSwgMHgwMDQwLCAweDIwZDgsIDB4MmQ2MCwgMHg2MDM0LAotCTB4YTBjYywgMHgwMDBmLCAweGE5YzAsIDB4MjAxNSwgMHhhOTg2LCAweDAwMDcsIDB4MDA0MCwgMHgyMDUwLAotCTB4YTk4NiwgMHgwMDBlLCAweDAwNDAsIDB4MjA1MCwgMHhhOTg2LCAweDAwMGYsIDB4MDBjMCwgMHgyMDU0LAotCTB4NjA1YywgMHhhNDIyLCAweDYwNjAsIDB4YTMxYSwgMHgyODA0LCAweGEwNDUsIDB4MDBjMCwgMHgyMDYyLAotCTB4MDA1MCwgMHgyMDVjLCAweDAwNzgsIDB4MjBkOCwgMHg2MDA0LCAweGEwNjUsIDB4MDA0MCwgMHgyMGQ4LAotCTB4MDA3OCwgMHgyMDNmLCAweDI4MDQsIDB4YTAwNSwgMHgwMDQwLCAweDIwODAsIDB4YWM2OCwgMHhkOTljLAotCTB4MDBjMCwgMHgyMDcwLCAweDY4MDgsIDB4YTQyMiwgMHg2ODBjLCAweGEzMWIsIDB4MDA3OCwgMHgyMDc0LAotCTB4NjgxMCwgMHhhNDIyLCAweDY4MTQsIDB4YTMxYiwgMHgwMDQ4LCAweDIwOWYsIDB4MjMwMCwgMHhhNDA1LAotCTB4MDA0MCwgMHgyMDg2LCAweDhhNTEsIDB4MDA0MCwgMHgyMGQ4LCAweDg4NDAsIDB4MDA3OCwgMHgyMDYyLAotCTB4NjAwNCwgMHhhMDY1LCAweDAwNDAsIDB4MjBkOCwgMHgwMDc4LCAweDIwM2YsIDB4OGE1MSwgMHgwMDQwLAotCTB4MjBkOCwgMHg4ODQwLCAweDI4MDQsIDB4YTAwNSwgMHgwMGMwLCAweDIwOTksIDB4NjAwNCwgMHhhMDY1LAotCTB4MDA0MCwgMHgyMGQ4LCAweDYwMzQsIDB4YTBjYywgMHgwMDBmLCAweGE5YzAsIDB4MjAxNSwgMHgyODA0LAotCTB4MjA0MCwgMHgyYjY4LCAweDY4NTAsIDB4YzBmYywgMHg2ODUyLCAweDAwNzgsIDB4MjBjYywgMHg4NDIyLAotCTB4ODQyMCwgMHg4MzFhLCAweGEzOTksIDB4MDAwMCwgMHgwZDdlLCAweDJiNjgsIDB4NmM2ZSwgMHg2YjcyLAotCTB4MGQ3ZiwgMHhkOTljLCAweDAwYzAsIDB4MjBiYSwgMHg2OTA4LCAweDI0MDAsIDB4YTEyMiwgMHg2OTBjLAotCTB4MjMwMCwgMHhhMTFiLCAweDEwNDgsIDB4MTMyOCwgMHg2ODAwLCAweGE0MjAsIDB4NjgwNCwgMHhhMzE5LAotCTB4MDA3OCwgMHgyMGM2LCAweDY5MTAsIDB4MjQwMCwgMHhhMTIyLCAweDY5MTQsIDB4MjMwMCwgMHhhMTFiLAotCTB4MTA0OCwgMHgxMzI4LCAweDY4MDAsIDB4YTQyMCwgMHg2ODA0LCAweGEzMTksIDB4MmI2OCwgMHg2YzFlLAotCTB4NmIyMiwgMHg2ODUwLCAweGMwZmQsIDB4Njg1MiwgMHgyYzAwLCAweDY4MWEsIDB4MjgwMCwgMHg2ODMyLAotCTB4MmEwMCwgMHg2ODI2LCAweDAwN2YsIDB4MDA3ZiwgMHgwMDdmLCAweGEwMDYsIDB4MDA3OCwgMHgyMGRkLAotCTB4MDg3ZiwgMHgwOTdmLCAweDBhN2YsIDB4YTA4NSwgMHgwMDAxLCAweDAwN2MsIDB4MjAwMSwgMHgwMDA1LAotCTB4MjAwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDA3OSwgMHgyMGU1LCAweDIwZWQsIDB4MjBlZSwgMHgyMGYxLAotCTB4MjBmNCwgMHgyMGY5LCAweDIwZmMsIDB4MjEwMSwgMHgyMTA2LCAweDAwN2MsIDB4MTA3OCwgMHgxZTVkLAotCTB4MDA3YywgMHgxMDc4LCAweDE4ZTIsIDB4MDA3YywgMHgxMDc4LCAweDE4ZTIsIDB4MTA3OCwgMHgxZTVkLAotCTB4MDA3YywgMHgxMDc4LCAweDE0YjAsIDB4MDA3YywgMHgxMDc4LCAweDFlNWQsIDB4MTA3OCwgMHgxNGIwLAotCTB4MDA3YywgMHgxMDc4LCAweDE4ZTIsIDB4MTA3OCwgMHgxNGIwLCAweDAwN2MsIDB4MTA3OCwgMHgxOGUyLAotCTB4MTA3OCwgMHgxZTVkLCAweDEwNzgsIDB4MTRiMCwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwgMHgyMzAwLAotCTB4MjA3OSwgMHgwMjAwLCAweDIwNzEsIDB4YTg4MCwgMHgyMDY5LCAweGEzMDAsIDB4MjAwOSwgMHgwMDA0LAotCTB4NzkxMiwgMHg3ODE3LCAweDAwMDQsIDB4MTA3OCwgMHgyNGI1LCAweDc4MWIsIDB4MDAwMiwgMHgyMGUxLAotCTB4ODcwMCwgMHgxMjdmLCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDIzMDAsIDB4NzgxYywgMHhhMDg0LAotCTB4MDAwNywgMHgwMDc5LCAweDIxMmIsIDB4MjE0ZiwgMHgyMTMzLCAweDIxMzcsIDB4MjEzYiwgMHgyMTQxLAotCTB4MjE0NSwgMHgyMTQ5LCAweDIxNGQsIDB4MTA3OCwgMHg1MzcyLCAweDAwNzgsIDB4MjE0ZiwgMHgxMDc4LAotCTB4NTNiMywgMHgwMDc4LCAweDIxNGYsIDB4MTA3OCwgMHg1MzcyLCAweDEwNzgsIDB4NTNiMywgMHgwMDc4LAotCTB4MjE0ZiwgMHgxMDc4LCAweDIxNTEsIDB4MDA3OCwgMHgyMTRmLCAweDEwNzgsIDB4MjE1MSwgMHgwMDc4LAotCTB4MjE0ZiwgMHgxMDc4LCAweDIxNTEsIDB4MDA3OCwgMHgyMTRmLCAweDEwNzgsIDB4MjE1MSwgMHgxMjdmLAotCTB4MDA3YywgMHgwMDdlLCAweDAxN2UsIDB4MDI3ZSwgMHg3OTMwLCAweGExODQsIDB4MDAwMywgMHgwMDQwLAotCTB4MjE1ZCwgMHgyMGUxLCAweDkwNDAsIDB4MDA3OCwgMHgyMTg2LCAweGExODQsIDB4MDAzMCwgMHgwMDQwLAotCTB4MjE2ZSwgMHg2YTAwLCAweGEyODYsIDB4MDAwMywgMHgwMGMwLCAweDIxNjgsIDB4MDA3OCwgMHgyMTZhLAotCTB4MTA3OCwgMHg0MTcxLCAweDIwZTEsIDB4OTAxMCwgMHgwMDc4LCAweDIxODYsIDB4YTE4NCwgMHgwMGMwLAotCTB4MDA0MCwgMHgyMTgwLCAweDBlN2UsIDB4MDM3ZSwgMHgwNDdlLCAweDA1N2UsIDB4MjA3MSwgMHhhNWUxLAotCTB4MTA3OCwgMHgxYWM2LCAweDA1N2YsIDB4MDQ3ZiwgMHgwMzdmLCAweDBlN2YsIDB4MDA3OCwgMHgyMTg2LAotCTB4YTE4NCwgMHgwMzAwLCAweDAwNDAsIDB4MjE4NiwgMHgyMGUxLCAweDkwMjAsIDB4NzkzMiwgMHgwMjdmLAotCTB4MDE3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwZTdlLCAweDBmN2UsIDB4MjA3MSwgMHhhMzAwLAotCTB4NzEyOCwgMHgyMDAxLCAweGE1OGYsIDB4MjEwMiwgMHgyMDAxLCAweGE1OTcsIDB4MjEwMiwgMHhhMTgyLAotCTB4MDIxMSwgMHgwMGM4LCAweDIxOWYsIDB4MjAwOSwgMHgwMDA4LCAweDAwNzgsIDB4MjFjOSwgMHhhMTgyLAotCTB4MDI1OSwgMHgwMGM4LCAweDIxYTcsIDB4MjAwOSwgMHgwMDA3LCAweDAwNzgsIDB4MjFjOSwgMHhhMTgyLAotCTB4MDJjMSwgMHgwMGM4LCAweDIxYWYsIDB4MjAwOSwgMHgwMDA2LCAweDAwNzgsIDB4MjFjOSwgMHhhMTgyLAotCTB4MDM0OSwgMHgwMGM4LCAweDIxYjcsIDB4MjAwOSwgMHgwMDA1LCAweDAwNzgsIDB4MjFjOSwgMHhhMTgyLAotCTB4MDQyMSwgMHgwMGM4LCAweDIxYmYsIDB4MjAwOSwgMHgwMDA0LCAweDAwNzgsIDB4MjFjOSwgMHhhMTgyLAotCTB4MDU4MSwgMHgwMGM4LCAweDIxYzcsIDB4MjAwOSwgMHgwMDAzLCAweDAwNzgsIDB4MjFjOSwgMHgyMDA5LAotCTB4MDAwMiwgMHgyMDc5LCAweDAyMDAsIDB4NzkxMiwgMHg3ODE3LCAweDAwMDQsIDB4MTA3OCwgMHgyNGI1LAotCTB4MGY3ZiwgMHgwZTdmLCAweDAxN2YsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4MjIwMCwgMHgyMDYxLAotCTB4MDEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NjAyNCwgMHg2MDI2LCAweDYwNTMsIDB4MDAzMCwgMHg2MDMzLAotCTB4MDBlZiwgMHg2MGU3LCAweDAwMDAsIDB4NjBlYiwgMHgwMGVmLCAweDYwZTMsIDB4MDAwOCwgMHg2MDRiLAotCTB4ZjdmNywgMHg2MDQzLCAweDAwMDAsIDB4NjAyZiwgMHgwMDgwLCAweDYwMmYsIDB4MDAwMCwgMHg2MDA3LAotCTB4MGVhZiwgMHg2MDBmLCAweDAwZmYsIDB4NjAyYiwgMHgwMDJmLCAweDEyN2YsIDB4MDA3YywgMHgyMDAxLAotCTB4YTMyZiwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHhhMzJlLCAweDIwMDMsIDB4MDAwMSwgMHgwMDdjLAotCTB4MTI3ZSwgMHgyMDkxLCAweDIyMDAsIDB4MDA3ZSwgMHgwMTdlLCAweDAyN2UsIDB4NjEyNCwgMHhhMTg0LAotCTB4MDAyYywgMHgwMGMwLCAweDIyMGYsIDB4YTE4NCwgMHgwMDA3LCAweDAwNzksIDB4MjIxNSwgMHhhMTk1LAotCTB4MDAwNCwgMHhhMjg0LCAweDAwMDcsIDB4MDA3OSwgMHgyMjE1LCAweDIyNDEsIDB4MjIxZCwgMHgyMjIxLAotCTB4MjIyNSwgMHgyMjJiLCAweDIyMmYsIDB4MjIzNSwgMHgyMjNiLCAweDEwNzgsIDB4NWFkMiwgMHgwMDc4LAotCTB4MjI0MSwgMHgxMDc4LCAweDViYzEsIDB4MDA3OCwgMHgyMjQxLCAweDEwNzgsIDB4NWJjMSwgMHgxMDc4LAotCTB4NWFkMiwgMHgwMDc4LCAweDIyNDEsIDB4MTA3OCwgMHgyMjQ2LCAweDAwNzgsIDB4MjI0MSwgMHgxMDc4LAotCTB4NWFkMiwgMHgxMDc4LCAweDIyNDYsIDB4MDA3OCwgMHgyMjQxLCAweDEwNzgsIDB4NWJjMSwgMHgxMDc4LAotCTB4MjI0NiwgMHgwMDc4LCAweDIyNDEsIDB4MTA3OCwgMHg1YmMxLCAweDEwNzgsIDB4NWFkMiwgMHgxMDc4LAotCTB4MjI0NiwgMHgwMjdmLCAweDAxN2YsIDB4MDA3ZiwgMHgxMjdmLCAweDAwN2MsIDB4NjEyNCwgMHhkMWFjLAotCTB4MDA0MCwgMHgyMzQyLCAweDAxN2UsIDB4MDQ3ZSwgMHgwYzdlLCAweDY0NGMsIDB4YTQ4NiwgMHhmMGYwLAotCTB4MDBjMCwgMHgyMjU5LCAweDIwNjEsIDB4MDEwMCwgMHg2NDRhLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLAotCTB4MDAxMCwgMHg3NGMyLCAweGE0OGMsIDB4ZmYwMCwgMHg3MDM0LCAweGQwODQsIDB4MDA0MCwgMHgyMjcxLAotCTB4YTE4NiwgMHhmODAwLCAweDAwYzAsIDB4MjI3MSwgMHg3MDM4LCAweGQwODQsIDB4MDBjMCwgMHgyMjcxLAotCTB4YzA4NSwgMHg3MDNhLCAweDAzN2UsIDB4MjQxOCwgMHgyMDExLCAweDgwMTYsIDB4MTA3OCwgMHgzNTc5LAotCTB4MDM3ZiwgMHhhMTk2LCAweGZmMDAsIDB4MDA0MCwgMHgyMmIzLCAweDYwMzAsIDB4YTA4NCwgMHgwMGZmLAotCTB4ODEwZiwgMHhhMTE2LCAweDAwNDAsIDB4MjJiMywgMHg3MTMwLCAweGQxODQsIDB4MDBjMCwgMHgyMmIzLAotCTB4MjAxMSwgMHhhMzUyLCAweDIyMTQsIDB4ZDJlYywgMHgwMDQwLCAweDIyOGUsIDB4YzE4ZCwgMHg3MTMyLAotCTB4MjAxMSwgMHhhMzUyLCAweDIyMTQsIDB4ZDJhYywgMHgwMGMwLCAweDIyYjMsIDB4NjI0MCwgMHhhMjk0LAotCTB4MDAxMCwgMHgwMDQwLCAweDIyOWEsIDB4NjI0OCwgMHhhMjk0LCAweGZmMDAsIDB4YTI5NiwgMHhmZjAwLAotCTB4MDA0MCwgMHgyMmIzLCAweDcwMzAsIDB4ZDA4YywgMHgwMDQwLCAweDIzMDUsIDB4NzAzNCwgMHhkMDhjLAotCTB4MDBjMCwgMHgyMmFhLCAweDIwMDEsIDB4YTMwYywgMHgyMDBjLCAweGQxYWMsIDB4MDBjMCwgMHgyMzA1LAotCTB4YzFhZCwgMHgyMTAyLCAweDAzN2UsIDB4NzNjMCwgMHgyMDExLCAweDgwMTMsIDB4MTA3OCwgMHgzNTc5LAotCTB4MDM3ZiwgMHgwMDc4LCAweDIzMDUsIDB4NzAzNCwgMHhkMDhjLCAweDAwYzAsIDB4MjJiZiwgMHgyMDAxLAotCTB4YTMwYywgMHgyMDBjLCAweGQxYWMsIDB4MDBjMCwgMHgyMzA1LCAweGMxYWQsIDB4MjEwMiwgMHgwMzdlLAotCTB4NzNjMCwgMHgyMDExLCAweDgwMTMsIDB4MTA3OCwgMHgzNTc5LCAweDAzN2YsIDB4NzEzMCwgMHhjMTg1LAotCTB4NzEzMiwgMHgyMDExLCAweGEzNTIsIDB4MjIwYywgMHhkMWE0LCAweDAwNDAsIDB4MjJlOSwgMHgwMTdlLAotCTB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDEwMCwgMHgxMDc4LCAweDVhNmQsIDB4MjAxOSwgMHgwMDBlLAotCTB4MTA3OCwgMHg5ZTNiLCAweGE0ODQsIDB4MDBmZiwgMHhhMDgwLCAweDI5M2YsIDB4MjAwYywgMHhhMThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweDgxMjcsIDB4YTAwNiwgMHgyMDA5LCAweDAwMGUsIDB4MTA3OCwgMHg5ZWMwLAotCTB4MDE3ZiwgMHhkMWFjLCAweDAwYzAsIDB4MjJmNiwgMHgwMTdlLCAweDIwMDksIDB4MDAwMCwgMHgyMDE5LAotCTB4MDAwNCwgMHgxMDc4LCAweDI3ZTIsIDB4MDE3ZiwgMHgwMDc4LCAweDIzMDUsIDB4MTU3ZSwgMHgyMGE5LAotCTB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MjMwMSwgMHgxMDc4LAotCTB4NDIzNSwgMHg4MTA4LCAweDAwZjAsIDB4MjJmYiwgMHgxNTdmLCAweDBjN2YsIDB4MDQ3ZiwgMHgwZjdlLAotCTB4MjA3OSwgMHhhNWJlLCAweDc4M2MsIDB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4MjMxNywgMHg2MDI3LAotCTB4MDAwNCwgMHg3ODNmLCAweDAwMDAsIDB4MjA3OSwgMHgwMTQwLCAweDc4MDMsIDB4MDAwMCwgMHgwZjdmLAotCTB4MjAxMSwgMHgwMDAzLCAweDEwNzgsIDB4NmVmMiwgMHgyMDExLCAweDAwMDIsIDB4MTA3OCwgMHg2ZWZjLAotCTB4MTA3OCwgMHg2ZGRhLCAweDEwNzgsIDB4NTk1YSwgMHgwMzdlLCAweDIwMTksIDB4MDAwMCwgMHgxMDc4LAotCTB4NmU2YywgMHgwMzdmLCAweDYwZTMsIDB4MDAwMCwgMHgwMTdmLCAweDIwMDEsIDB4YTMwMCwgMHgyMDE0LAotCTB4YTI5NiwgMHgwMDA0LCAweDAwYzAsIDB4MjMzYSwgMHhkMTljLCAweDAwYzAsIDB4MjMzYSwgMHg2MjI4LAotCTB4YzI5ZCwgMHg2MjJhLCAweDIwMDMsIDB4MDAwMSwgMHgyMDAxLCAweGEzMjEsIDB4MjAwMywgMHgwMDAwLAotCTB4NjAyNywgMHgwMDIwLCAweGQxOTQsIDB4MDA0MCwgMHgyNDI2LCAweDBmN2UsIDB4MjA3OSwgMHhhNWJlLAotCTB4NzgzYywgMHhhMDg2LCAweDAwMDEsIDB4MDBjMCwgMHgyMzY2LCAweDAxN2UsIDB4NjAyNywgMHgwMDA0LAotCTB4NzgzZiwgMHgwMDAwLCAweDIwNzksIDB4MDE0MCwgMHg3ODAzLCAweDEwMDAsIDB4NzgwMywgMHgwMDAwLAotCTB4MjA3OSwgMHhhNWFiLCAweDc4MDcsIDB4MDAwMCwgMHg3ODMzLCAweDAwMDAsIDB4MTA3OCwgMHg2MTA5LAotCTB4MTA3OCwgMHg2MWQzLCAweDAxN2YsIDB4MGY3ZiwgMHgwMDc4LCAweDI0MjYsIDB4MGY3ZiwgMHgwMTdlLAotCTB4MzkwMCwgMHhhMDgyLCAweGE2Y2QsIDB4MDBjOCwgMHgyMzcxLCAweDAxN2UsIDB4MTA3OCwgMHg3MjhhLAotCTB4MDE3ZiwgMHg2MjIwLCAweGQyYjQsIDB4MDA0MCwgMHgyM2RjLCAweDEwNzgsIDB4NTk1YSwgMHgxMDc4LAotCTB4NmM0MSwgMHg2MDI3LCAweDAwMDQsIDB4MGY3ZSwgMHgyMDE5LCAweGE1YjQsIDB4MjMwNCwgMHhhMDdkLAotCTB4MDA0MCwgMHgyM2IyLCAweDc4MDQsIDB4YTA4NiwgMHgwMDMyLCAweDAwYzAsIDB4MjNiMiwgMHgwZDdlLAotCTB4MGM3ZSwgMHgwZTdlLCAweDIwNjksIDB4MDE0MCwgMHg2MThjLCAweDYyODgsIDB4NzgxOCwgMHg2MDhlLAotCTB4NzgwOCwgMHg2MDhhLCAweDYwNDMsIDB4MDAwMiwgMHgyMDAxLCAweDAwMDMsIDB4ODAwMSwgMHgwMGMwLAotCTB4MjM5NiwgMHg2MDQzLCAweDAwMDAsIDB4NjgwMywgMHgxMDAwLCAweDY4MDMsIDB4MDAwMCwgMHg2MThlLAotCTB4NjI4YSwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg2MTA5LCAweDc4MTAsIDB4MjA3MCwgMHg3MDM3LAotCTB4MDEwMywgMHgyZjYwLCAweDEwNzgsIDB4NzUzZCwgMHgwZTdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZjdmLAotCTB4MDE3ZiwgMHgwMDdjLCAweDBmN2YsIDB4MGQ3ZSwgMHgyMDY5LCAweDAxNDAsIDB4NjgwNCwgMHhhMDg0LAotCTB4NDAwMCwgMHgwMDQwLCAweDIzYmYsIDB4NjgwMywgMHgxMDAwLCAweDY4MDMsIDB4MDAwMCwgMHgwZDdmLAotCTB4MGM3ZSwgMHgyMDYxLCAweGE1YWIsIDB4NjAyOCwgMHhhMDlhLCAweDAwYzgsIDB4MDBjOCwgMHgyM2NmLAotCTB4ODAwMCwgMHg2MDJhLCAweDBjN2YsIDB4MTA3OCwgMHg2YzMzLCAweDAwNzgsIDB4MjQyNSwgMHgyMDE5LAotCTB4YTViNCwgMHgyMzA0LCAweGEwNjUsIDB4MDA0MCwgMHgyM2Q5LCAweDIwMDksIDB4MDAyNywgMHgxMDc4LAotCTB4NzU2YywgMHgwYzdmLCAweDAwNzgsIDB4MjQyNSwgMHhkMmJjLCAweDAwNDAsIDB4MjQyNSwgMHgxMDc4LAotCTB4NTk2NywgMHg2MDE3LCAweDAwMTAsIDB4NjAyNywgMHgwMDA0LCAweDBkN2UsIDB4MjA2OSwgMHgwMTQwLAotCTB4NjgwNCwgMHhhMDg0LCAweDQwMDAsIDB4MDA0MCwgMHgyM2YxLCAweDY4MDMsIDB4MTAwMCwgMHg2ODAzLAotCTB4MDAwMCwgMHgwZDdmLCAweDBjN2UsIDB4MjA2MSwgMHhhNWFiLCAweDYwNDQsIDB4YTA5YSwgMHgwMGM4LAotCTB4MDBjOCwgMHgyNDE0LCAweDgwMDAsIDB4NjA0NiwgMHg2MDNjLCAweDBjN2YsIDB4YTAwNSwgMHgwMDQwLAotCTB4MjQyNSwgMHgyMDA5LCAweDA3ZDAsIDB4MTA3OCwgMHg1OTVmLCAweGEwODAsIDB4MDAwNywgMHgyMDA0LAotCTB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4MjQxMCwgMHg2MDE3LCAweDAwMTIsIDB4MDA3OCwgMHgyNDI1LAotCTB4NjAxNywgMHgwMDE2LCAweDAwNzgsIDB4MjQyNSwgMHgwMzdlLCAweDIwMTksIDB4MDAwMSwgMHgxMDc4LAotCTB4NmU2YywgMHgwMzdmLCAweDIwMTksIDB4YTViYSwgMHgyMzA0LCAweGEwNjUsIDB4MDA0MCwgMHgyNDI0LAotCTB4MjAwOSwgMHgwMDRmLCAweDEwNzgsIDB4NzU2YywgMHgwYzdmLCAweDAxN2YsIDB4ZDE5YywgMHgwMDQwLAotCTB4MjQ3YywgMHg3MDM0LCAweGQwYWMsIDB4MDBjMCwgMHgyNDU3LCAweDAxN2UsIDB4MTU3ZSwgMHg2MDI3LAotCTB4MDAwOCwgMHg2MDJmLCAweDAwMjAsIDB4MjBhOSwgMHgwMDBhLCAweDAwZjAsIDB4MjQzNSwgMHg2MDJmLAotCTB4MDAwMCwgMHg2MTUwLCAweGExODUsIDB4MTQwMCwgMHg2MDUyLCAweDIwYTksIDB4MDMyMCwgMHgwMGUwLAotCTB4MjQzZiwgMHgyMDkxLCAweDYwMDAsIDB4NjAyMCwgMHhkMDljLCAweDAwYzAsIDB4MjQ0ZSwgMHgxNTdmLAotCTB4NjE1MiwgMHgwMTdmLCAweDYwMjcsIDB4MDAwOCwgMHgwMDc4LCAweDI0N2MsIDB4MTA3OCwgMHgyNTBkLAotCTB4MDBmMCwgMHgyNDNmLCAweDE1N2YsIDB4NjE1MiwgMHgwMTdmLCAweDYwMjcsIDB4MDAwOCwgMHgwMTdlLAotCTB4NjAyOCwgMHhjMDljLCAweDYwMmEsIDB4MjAxMSwgMHgwMDAzLCAweDEwNzgsIDB4NmVmMiwgMHgyMDExLAotCTB4MDAwMiwgMHgxMDc4LCAweDZlZmMsIDB4MTA3OCwgMHg2ZGRhLCAweDEwNzgsIDB4NTk1YSwgMHgwMzdlLAotCTB4MjAxOSwgMHgwMDAwLCAweDEwNzgsIDB4NmU2YywgMHgwMzdmLCAweDYwZTMsIDB4MDAwMCwgMHgxMDc4LAotCTB4YTIyYSwgMHgxMDc4LCAweGEyNDgsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDMsIDB4MDAwNCwgMHg2MDI3LAotCTB4MDAwOCwgMHgxMDc4LCAweDEyNDYsIDB4MDE3ZiwgMHhhMThjLCAweGZmZDAsIDB4NjEyNiwgMHgwMDdjLAotCTB4MDA3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MGU3ZSwgMHgwZjdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA3MSwgMHhhMzAwLCAweDcxYjgsIDB4NzBiYSwgMHhhMTE2LCAweDAwNDAsIDB4MjRhZSwgMHg4MWZmLAotCTB4MDA0MCwgMHgyNDk4LCAweDIwMTEsIDB4ODAxMSwgMHgxMDc4LCAweDM1NzksIDB4MDA3OCwgMHgyNGFlLAotCTB4MjAxMSwgMHg4MDEyLCAweDEwNzgsIDB4MzU3OSwgMHgyMDAxLCAweGEzNzEsIDB4MjAwNCwgMHhkMGZjLAotCTB4MDBjMCwgMHgyNGFlLCAweDAzN2UsIDB4MGM3ZSwgMHgyMDYxLCAweDAxMDAsIDB4MjAxOSwgMHgwMDI4LAotCTB4MjAwOSwgMHgwMDAwLCAweDEwNzgsIDB4MjdlMiwgMHgwYzdmLCAweDAzN2YsIDB4MTI3ZiwgMHgwZjdmLAotCTB4MGU3ZiwgMHgwMjdmLCAweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MGY3ZSwgMHgwMDdlLAotCTB4MDI3ZSwgMHgyMDYxLCAweDAxMDAsIDB4YTE5MCwgMHgyNGQxLCAweDIyMDQsIDB4NjBmMiwgMHgyMDExLAotCTB4MjRkZSwgMHg2MDAwLCAweGEwODIsIDB4MDAwMywgMHgwMGM4LCAweDI0Y2EsIDB4MjAwMSwgMHgwMGZmLAotCTB4MDA3OCwgMHgyNGNiLCAweDIyMDQsIDB4NjBlZSwgMHgwMjdmLCAweDAwN2YsIDB4MGY3ZiwgMHgwYzdmLAotCTB4MDA3YywgMHgwODQwLCAweDA4NDAsIDB4MDg0MCwgMHgwNTgwLCAweDA0MjAsIDB4MDM0OCwgMHgwMmMwLAotCTB4MDI1OCwgMHgwMjEwLCAweDAxYTgsIDB4MDFhOCwgMHgwMWE4LCAweDAxYTgsIDB4MDE0MCwgMHgwMGY4LAotCTB4MDBkMCwgMHgwMGIwLCAweDAwYTAsIDB4MjAyOCwgMHhhMThjLCAweDAwZmYsIDB4MjEzMCwgMHhhMDk0LAotCTB4ZmYwMCwgMHgwMGMwLCAweDI0ZWUsIDB4ODFmZiwgMHgwMDQwLCAweDI0ZjIsIDB4MTA3OCwgMHg1NjIzLAotCTB4MDA3OCwgMHgyNGY5LCAweGEwODAsIDB4MjkzZiwgMHgyMDBjLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4YTAwNiwgMHgwMDdjLCAweGEwODAsIDB4MjkzZiwgMHgyMDBjLCAweGExOGMsIDB4MDBmZiwgMHgwMDdjLAotCTB4MGM3ZSwgMHgyMDYxLCAweGEzMDAsIDB4NjAzMCwgMHgwMDQwLCAweDI1MDksIDB4YzA5ZCwgMHgwMDc4LAotCTB4MjUwYSwgMHhjMDljLCAweDYwMzIsIDB4MGM3ZiwgMHgwMDdjLCAweDAwN2UsIDB4MTU3ZSwgMHgwZjdlLAotCTB4MjA3OSwgMHgwMTAwLCAweDIwYTksIDB4MDAwYSwgMHg3ODU0LCAweGQwOGMsIDB4MDBjMCwgMHgyNTFhLAotCTB4MDBmMCwgMHgyNTE0LCAweDBmN2YsIDB4MTU3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MGM3ZSwgMHgwMDdlLAotCTB4MjA2MSwgMHgwMTAwLCAweDYwMzAsIDB4MDA3ZSwgMHg2MDQ4LCAweDAwN2UsIDB4NjBlNCwgMHgwMDdlLAotCTB4NjBlOCwgMHgwMDdlLCAweDYwNTAsIDB4MDA3ZSwgMHg2MGYwLCAweDAwN2UsIDB4NjBlYywgMHgwMDdlLAotCTB4NjAwYywgMHgwMDdlLCAweDYwMDQsIDB4MDA3ZSwgMHg2MDI4LCAweDAwN2UsIDB4NjBlMCwgMHgwMDdlLAotCTB4NjAyZiwgMHgwMTAwLCAweDYwMmYsIDB4MDAwMCwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAotCTB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwMDdmLCAweDYwZTIsIDB4MDA3ZiwgMHg2MDJhLAotCTB4MDA3ZiwgMHg2MDA2LCAweDAwN2YsIDB4NjAwZSwgMHgwMDdmLCAweDYwZWUsIDB4MDA3ZiwgMHg2MGYyLAotCTB4MDA3ZiwgMHg2MDUyLCAweDAwN2YsIDB4NjBlYSwgMHgwMDdmLCAweDYwZTYsIDB4MDA3ZiwgMHg2MDRhLAotCTB4MDA3ZiwgMHg2MDMyLCAweDAwN2YsIDB4MGM3ZiwgMHgwMDdjLCAweDI1N2QsIDB4MjU4MSwgMHgyNTg1LAotCTB4MjU4YiwgMHgyNTkxLCAweDI1OTcsIDB4MjU5ZCwgMHgyNWE1LCAweDI1YWQsIDB4MjViMywgMHgyNWI5LAotCTB4MjVjMSwgMHgyNWM5LCAweDI1ZDEsIDB4MjVkOSwgMHgyNWUzLCAweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLAotCTB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLAotCTB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLCAweDEwN2UsIDB4MDA3ZSwgMHgwMDc4LAotCTB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LAotCTB4MjIwMCwgMHgwMDc4LCAweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjIwMCwgMHgwMDc4LAotCTB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwgMHgyMGRlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLAotCTB4MDA3ZSwgMHgxMDc4LCAweDIwZGUsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LAotCTB4MjIwMCwgMHgxMDc4LCAweDIwZGUsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LAotCTB4MjIwMCwgMHgxMDc4LCAweDIwZGUsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LAotCTB4MjEyMywgMHgwMDc4LCAweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjEyMywgMHgwMDc4LAotCTB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwgMHgyMjAwLCAweDEwNzgsIDB4MjEyMywgMHgwMDc4LAotCTB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwgMHgyMjAwLCAweDEwNzgsIDB4MjEyMywgMHgwMDc4LAotCTB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwgMHgyMGRlLCAweDEwNzgsIDB4MjEyMywgMHgwMDc4LAotCTB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwgMHgyMGRlLCAweDEwNzgsIDB4MjEyMywgMHgwMDc4LAotCTB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwgMHgyMjAwLCAweDEwNzgsIDB4MjBkZSwgMHgxMDc4LAotCTB4MjEyMywgMHgwMDc4LCAweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjIwMCwgMHgxMDc4LAotCTB4MjBkZSwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwgMHgyNjA2LCAweDAwMDUsIDB4MDA3OCwgMHgyNWVkLAotCTB4YjA4NCwgMHgwMDNjLCAweDgwMDQsIDB4ODAwNCwgMHgwMDc5LCAweDI1ZjYsIDB4MjYwNiwgMHgyNTgzLAotCTB4MjU4NywgMHgyNThkLCAweDI1OTMsIDB4MjU5OSwgMHgyNTlmLCAweDI1YTcsIDB4MjVhZiwgMHgyNWI1LAotCTB4MjViYiwgMHgyNWMzLCAweDI1Y2IsIDB4MjVkMywgMHgyNWRiLCAweDI1ZTUsIDB4MDAwOCwgMHgyNWYwLAotCTB4MDA3ZiwgMHgxMDdmLCAweDIwOTEsIDB4ODAwMSwgMHgwMDdjLCAweDBjN2UsIDB4MDI3ZSwgMHgwNDdlLAotCTB4MjAyMSwgMHgwMDAwLCAweDEwNzgsIDB4NDg5NywgMHgwMGMwLCAweDI3MDUsIDB4NzBjOCwgMHhkMDljLAotCTB4MDA0MCwgMHgyNjI0LCAweGQwODQsIDB4MDBjMCwgMHgyNjI0LCAweGQwYmMsIDB4MDBjMCwgMHgyNzA1LAotCTB4MTA3OCwgMHgyNzA5LCAweDAwNzgsIDB4MjcwNSwgMHhkMDk0LCAweDAwNDAsIDB4MjYyYiwgMHg3MDkzLAotCTB4ZmZmZiwgMHgwMDc4LCAweDI3MDUsIDB4MjAwMSwgMHgwMTBjLCAweDIwM2MsIDB4NzI4MCwgMHhkMjg0LAotCTB4MDA0MCwgMHgyNjk0LCAweGQyOGMsIDB4MDBjMCwgMHgyNjk0LCAweDAzN2UsIDB4NzM5MCwgMHhhMzhlLAotCTB4ZmZmZiwgMHgwMDQwLCAweDI2M2UsIDB4ODNmZiwgMHgwMGMwLCAweDI2NDAsIDB4MjAxOSwgMHgwMDAxLAotCTB4ODMxNCwgMHhhMmUwLCAweGE5YzAsIDB4MmMwNCwgMHhhMzhjLCAweDAwMDEsIDB4MDA0MCwgMHgyNjRkLAotCTB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDA3OCwgMHgyNjRmLCAweGEwODQsIDB4MDBmZiwgMHhhNzBlLAotCTB4MDA0MCwgMHgyNjg5LCAweGEwOGUsIDB4MDAwMCwgMHgwMDQwLCAweDI2ODksIDB4YTA4ZSwgMHgwMGZmLAotCTB4MDBjMCwgMHgyNjY2LCAweDcyMzAsIDB4ZDI4NCwgMHgwMGMwLCAweDI2OGYsIDB4NzI4MCwgMHhjMjhkLAotCTB4NzI4MiwgMHg3MDkzLCAweGZmZmYsIDB4MDM3ZiwgMHgwMDc4LCAweDI2OTQsIDB4MjAwOSwgMHgwMDAwLAotCTB4MTA3OCwgMHgyNGUzLCAweDEwNzgsIDB4NDQ5OSwgMHgwMGMwLCAweDI2OGMsIDB4NjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHgyNjgzLCAweDcwMzAsIDB4ZDA4YywgMHgwMDQwLAotCTB4MjY3ZCwgMHg2MDAwLCAweGQwYmMsIDB4MDA0MCwgMHgyNjgzLCAweDEwNzgsIDB4MjcxZiwgMHgwMDQwLAotCTB4MjY4YywgMHgwMDc4LCAweDI2ODksIDB4MTA3OCwgMHgyODU3LCAweDEwNzgsIDB4Mjc0YywgMHgwMDQwLAotCTB4MjY4YywgMHg4MzE4LCAweDAwNzgsIDB4MjY0MCwgMHg3MzkyLCAweDAwNzgsIDB4MjY5MSwgMHg3MDkzLAotCTB4ZmZmZiwgMHgwMzdmLCAweDAwNzgsIDB4MjcwNSwgMHhhNzgwLCAweDI5M2YsIDB4MjAzYywgMHhhN2JjLAotCTB4ZmYwMCwgMHg4NzNmLCAweDIwNDEsIDB4MDA3ZSwgMHg3MDkwLCAweGEwOTYsIDB4ZmZmZiwgMHgwMGMwLAotCTB4MjZhNiwgMHgyMDA5LCAweDAwMDAsIDB4MjhhOCwgMHgwMDc4LCAweDI2YjIsIDB4YTgxMiwgMHgwMDQ4LAotCTB4MjZhZSwgMHgyMDA4LCAweGE4MDIsIDB4MjBhOCwgMHgwMDc4LCAweDI2YjIsIDB4NzA5MywgMHhmZmZmLAotCTB4MDA3OCwgMHgyNzA1LCAweDI3MDAsIDB4MTU3ZSwgMHgwMTdlLCAweGExMDYsIDB4MDA0MCwgMHgyNmY5LAotCTB4YzQ4NCwgMHgxMDc4LCAweDQ1MDEsIDB4MDA0MCwgMHgyNmMzLCAweDEwNzgsIDB4NDQ5OSwgMHgwMGMwLAotCTB4MjcwMiwgMHgwMDc4LCAweDI2YzQsIDB4YzQ4NSwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LAotCTB4MDAwNiwgMHgwMGMwLCAweDI2ZDMsIDB4NzAzMCwgMHhkMDhjLCAweDAwNDAsIDB4MjZmMSwgMHg2MDAwLAotCTB4ZDBiYywgMHgwMGMwLCAweDI2ZjEsIDB4NzI4MCwgMHhkMjhjLCAweDAwNDAsIDB4MjZlOSwgMHg2MDA0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODIsIDB4MDAwNiwgMHgwMDQ4LCAweDI2ZjksIDB4ZDQ4NCwgMHgwMGMwLAotCTB4MjZlNSwgMHgxMDc4LCAweDQ0YmMsIDB4MDA3OCwgMHgyNmU3LCAweDEwNzgsIDB4MjkyMSwgMHgwMDc4LAotCTB4MjZmOSwgMHgxMDc4LCAweDI4NTcsIDB4MTA3OCwgMHgyNzRjLCAweDAwNDAsIDB4MjcwMiwgMHgwMDc4LAotCTB4MjZmOSwgMHgxMDc4LCAweDI4ZWMsIDB4MDA0MCwgMHgyNmY5LCAweDEwNzgsIDB4MjcxZiwgMHgwMDQwLAotCTB4MjcwMiwgMHgwMTdmLCAweDgxMDgsIDB4MTU3ZiwgMHgwMGYwLCAweDI2YjIsIDB4NzA5MywgMHhmZmZmLAotCTB4MDA3OCwgMHgyNzA1LCAweDAxN2YsIDB4MTU3ZiwgMHg3MTkyLCAweDA0N2YsIDB4MDI3ZiwgMHgwYzdmLAotCTB4MDA3YywgMHgwYzdlLCAweDAxN2UsIDB4NzA5MywgMHgwMDAwLCAweDIwMDksIDB4MDA3ZSwgMHgxMDc4LAotCTB4NDQ5OSwgMHgwMGMwLCAweDI3MWMsIDB4MTA3OCwgMHgyODU3LCAweDEwNzgsIDB4Mjc0YywgMHgwMDQwLAotCTB4MjcxYywgMHg3MGM4LCAweGMwYmQsIDB4NzBjYSwgMHgwMTdmLCAweDBjN2YsIDB4MDA3YywgMHgwMTdlLAotCTB4MDc3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MmM2OCwgMHgyMDAxLCAweGEzNTYsIDB4MjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHg2ODQyLCAweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDI3NDcsIDB4MmQwMCwgMHg2MDFhLAotCTB4NjAxZiwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MjAwMSwgMHgwMDAwLAotCTB4MTA3OCwgMHg0NDNmLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwOGMsIDB4ODAwMCwgMHg3MDhlLAotCTB4MTI3ZiwgMHgyMDA5LCAweDAwMDQsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgwYzdmLAotCTB4MGQ3ZiwgMHgwNzdmLCAweDAxN2YsIDB4MDA3YywgMHgwMTdlLCAweDA3N2UsIDB4MGQ3ZSwgMHgwYzdlLAotCTB4MmM2OCwgMHgyMDAxLCAweGEzNTYsIDB4MjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4Njg0MiwgMHgxMDc4LAotCTB4NzRkNywgMHgwMDQwLCAweDI3ODUsIDB4MmQwMCwgMHg2MDFhLCAweDY4MDAsIDB4YzBjNCwgMHg2ODAyLAotCTB4NjhhMCwgMHhhMDg2LCAweDAwN2UsIDB4MDA0MCwgMHgyNzZlLCAweDY4MDQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4Mjc2ZSwgMHgxMDc4LCAweDI4MTMsIDB4NjAxZiwgMHgwMDAxLAotCTB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDQyYiwgMHgyMDAxLCAweDAwMDIsIDB4MTA3OCwgMHg0NDNmLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzA4YywgMHg4MDAwLCAweDcwOGUsIDB4MTI3ZiwgMHgyMDA5LAotCTB4MDAwMiwgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDBjN2YsIDB4MGQ3ZiwgMHgwNzdmLAotCTB4MDE3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MDI3ZSwgMHgyMDA5LCAweDAwODAsIDB4MTA3OCwgMHg0NDk5LAotCTB4MDBjMCwgMHgyNzk4LCAweDEwNzgsIDB4Mjc5YiwgMHgwMDQwLCAweDI3OTgsIDB4NzBjZiwgMHhmZmZmLAotCTB4MDI3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwNzdlLCAweDBkN2UsIDB4MGM3ZSwgMHgyYzY4LAotCTB4MTA3OCwgMHg3NGQ3LCAweDAwNDAsIDB4MjdiZCwgMHgyZDAwLCAweDYwMWEsIDB4NjAxZiwgMHgwMDAxLAotCTB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDQyYiwgMHgyMDAxLCAweDAwMDIsIDB4MTA3OCwgMHg0NDNmLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzBkMCwgMHg4MDAwLCAweDcwZDIsIDB4MTI3ZiwgMHgyMDA5LAotCTB4MDAwMiwgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDBjN2YsIDB4MGQ3ZiwgMHgwNzdmLAotCTB4MDE3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MGQ3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LAotCTB4MDA3ZiwgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwgMHgyN2RlLCAweDJjNjgsIDB4MTA3OCwgMHg3NGQ3LAotCTB4MDA0MCwgMHgyN2RlLCAweDJkMDAsIDB4NjAxYSwgMHg2MzEyLCAweDYwMWYsIDB4MDAwMSwgMHg2MjBhLAotCTB4MjAwOSwgMHgwMDIyLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwZDdmLAotCTB4MGM3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MGM3ZSwgMHgwNjdlLCAweDAzN2UsIDB4MDI3ZSwgMHgxMDc4LAotCTB4NWQ2MCwgMHgxMDc4LCAweDVkMDIsIDB4MTA3OCwgMHg3ZGRmLCAweDIxMzAsIDB4ODFmZiwgMHgwMDQwLAotCTB4MjdmNywgMHgyMGE5LCAweDAwN2UsIDB4MjAwOSwgMHgwMDAwLCAweDAwNzgsIDB4MjdmYiwgMHgyMGE5LAotCTB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDE3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHgyODA0LAotCTB4MTA3OCwgMHg0NzFiLCAweDEwNzgsIDB4NDIzNSwgMHgwMTdmLCAweDgxMDgsIDB4MDBmMCwgMHgyN2ZiLAotCTB4ODZmZiwgMHgwMGMwLCAweDI4MGQsIDB4MTA3OCwgMHgxMTliLCAweDAyN2YsIDB4MDM3ZiwgMHgwNjdmLAotCTB4MGM3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MGU3ZSwgMHgwYzdlLCAweDAzN2UsIDB4MDI3ZSwgMHgwMTdlLAotCTB4NjIxOCwgMHgyMjcwLCAweDcyYTAsIDB4MDI3ZSwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwgMHg1ZDUzLAotCTB4MDc3ZSwgMHgyMDM5LCAweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDJjMDgsIDB4MTA3OCwgMHg5YzM4LAotCTB4MDc3ZiwgMHgwMTdmLCAweDJlNjAsIDB4MTA3OCwgMHg0NzFiLCAweDYyMTAsIDB4NjMxNCwgMHgxMDc4LAotCTB4NDIzNSwgMHg2MjEyLCAweDYzMTYsIDB4MDE3ZiwgMHgwMjdmLCAweDAzN2YsIDB4MGM3ZiwgMHgwZTdmLAotCTB4MDA3YywgMHgwZTdlLCAweDAwN2UsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhkMGJjLAotCTB4MDBjMCwgMHgyODRkLCAweDIwNzEsIDB4YTMwMCwgMHg3MDhjLCAweGEwMDUsIDB4MDA0MCwgMHgyODRhLAotCTB4ODAwMSwgMHg3MDhlLCAweDAwN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDIwNzEsIDB4YTMwMCwgMHg3MGQwLAotCTB4YTAwNSwgMHgwMDQwLCAweDI4NGEsIDB4ODAwMSwgMHg3MGQyLCAweDAwNzgsIDB4Mjg0YSwgMHg2MDAwLAotCTB4YzA4YywgMHg2MDAyLCAweDAwN2MsIDB4MGY3ZSwgMHgwZTdlLCAweDBjN2UsIDB4MDM3ZSwgMHgwMjdlLAotCTB4MDE3ZSwgMHgxNTdlLCAweDIxNzgsIDB4ODFmZiwgMHgwMGMwLCAweDI4NmEsIDB4MjBhOSwgMHgwMDAxLAotCTB4MDA3OCwgMHgyODg1LCAweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDA0MCwgMHgyODgxLAotCTB4ZDBhNCwgMHgwMDQwLCAweDI4ODEsIDB4MDQ3ZSwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDI0LAotCTB4YTRhNCwgMHgwMGZmLCAweDg0MjcsIDB4YTAwNiwgMHgyMDA5LCAweDAwMmQsIDB4MTA3OCwgMHg5ZWMwLAotCTB4MDQ3ZiwgMHgyMGE5LCAweDAwZmYsIDB4MjAxMSwgMHgwMDAwLCAweDAyN2UsIDB4YTI4ZSwgMHgwMDdlLAotCTB4MDA0MCwgMHgyOGM5LCAweGEyOGUsIDB4MDA3ZiwgMHgwMDQwLCAweDI4YzksIDB4YTI4ZSwgMHgwMDgwLAotCTB4MDA0MCwgMHgyOGM5LCAweGEyODgsIDB4YTQzNCwgMHgyMTBjLCAweDgxZmYsIDB4MDA0MCwgMHgyOGM5LAotCTB4OGZmZiwgMHgxMDQwLCAweDI4ZDUsIDB4MGM3ZSwgMHgyMTYwLCAweDIwMDEsIDB4MDAwMSwgMHgxMDc4LAotCTB4NDhhMiwgMHgwYzdmLCAweDIwMTksIDB4MDAyOSwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwgMHgyMDM5LAotCTB4MDAwMCwgMHgxMDc4LCAweDVjNzgsIDB4MGM3ZSwgMHgwMjdlLCAweDIxNjAsIDB4NjIwNCwgMHhhMjk0LAotCTB4MDBmZiwgMHhhMjg2LCAweDAwMDYsIDB4MDBjMCwgMHgyOGI5LCAweDYwMDcsIDB4MDQwNCwgMHgwMDc4LAotCTB4MjhiZSwgMHgyMDAxLCAweDAwMDQsIDB4ODAwNywgMHhhMjE1LCAweDYyMDYsIDB4MDI3ZiwgMHgwYzdmLAotCTB4MDE3ZSwgMHgyYzA4LCAweDEwNzgsIDB4OWMzOCwgMHgwMTdmLCAweDA3N2YsIDB4MjE2MCwgMHgxMDc4LAotCTB4NDcxYiwgMHgwMjdmLCAweDgyMTAsIDB4MDBmMCwgMHgyODg1LCAweDE1N2YsIDB4MDE3ZiwgMHgwMjdmLAotCTB4MDM3ZiwgMHgwYzdmLCAweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDA0N2UsIDB4MDI3ZSwgMHgwMTdlLAotCTB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBjNCwgMHgwMDQwLCAweDI4ZTgsIDB4ZDBhNCwgMHgwMDQwLAotCTB4MjhlOCwgMHhhMDA2LCAweDIyMjAsIDB4ODQyNywgMHgyMDA5LCAweDAwMjksIDB4MTA3OCwgMHg5ZWMwLAotCTB4MDE3ZiwgMHgwMjdmLCAweDA0N2YsIDB4MDA3YywgMHgwMTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgwYzdlLAotCTB4NzI4MCwgMHg4MmZmLCAweDAwNDAsIDB4MjkxYSwgMHhhMjkwLCAweGEzNTIsIDB4MjIxNCwgMHhkMmFjLAotCTB4MDBjMCwgMHgyOTFhLCAweDIxMDAsIDB4MTA3OCwgMHgyNGZhLCAweDgxZmYsIDB4MDA0MCwgMHgyOTFjLAotCTB4MjAxOSwgMHgwMDAxLCAweDgzMTQsIDB4YTJlMCwgMHhhOWMwLCAweDJjMDQsIDB4ZDM4NCwgMHgwMDQwLAotCTB4MjkwZSwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywgMHgwMDc4LCAweDI5MTAsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTExNiwgMHgwMDQwLCAweDI5MWMsIDB4YTA5NiwgMHgwMGZmLCAweDAwNDAsIDB4MjkxYSwgMHg4MzE4LAotCTB4MDA3OCwgMHgyOTAyLCAweGEwODUsIDB4MDAwMSwgMHgwYzdmLCAweDAzN2YsIDB4MDI3ZiwgMHgwMTdmLAotCTB4MDA3YywgMHgwMTdlLCAweDBjN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4YTE4MCwgMHhhNDM0LAotCTB4MjAwNCwgMHhhMDY1LCAweDAwNDAsIDB4MjkzYiwgMHgwMTdlLCAweDBjN2UsIDB4MTA3OCwgMHg4ZWMwLAotCTB4MDE3ZiwgMHgxMDQwLCAweDEzMjgsIDB4NjExYSwgMHgxMDc4LCAweDI4MTMsIDB4MTA3OCwgMHg3NTNkLAotCTB4MDE3ZiwgMHgxMDc4LCAweDQ0YmMsIDB4MTI3ZiwgMHgwYzdmLCAweDAxN2YsIDB4MDA3YywgMHg3ZWVmLAotCTB4N2RlOCwgMHg3Y2U0LCAweDgwZTIsIDB4N2JlMSwgMHg4MGUwLCAweDgwZGMsIDB4ODBkYSwgMHg3YWQ5LAotCTB4ODBkNiwgMHg4MGQ1LCAweDgwZDQsIDB4ODBkMywgMHg4MGQyLCAweDgwZDEsIDB4NzljZSwgMHg3OGNkLAotCTB4ODBjYywgMHg4MGNiLCAweDgwY2EsIDB4ODBjOSwgMHg4MGM3LCAweDgwYzYsIDB4NzdjNSwgMHg3NmMzLAotCTB4ODBiYywgMHg4MGJhLCAweDc1YjksIDB4ODBiNiwgMHg3NGI1LCAweDczYjQsIDB4NzJiMywgMHg4MGIyLAotCTB4ODBiMSwgMHg4MGFlLCAweDcxYWQsIDB4ODBhYywgMHg3MGFiLCAweDZmYWEsIDB4NmVhOSwgMHg4MGE3LAotCTB4NmRhNiwgMHg2Y2E1LCAweDZiYTMsIDB4NmE5ZiwgMHg2OTllLCAweDY4OWQsIDB4ODA5YiwgMHg4MDk4LAotCTB4Njc5NywgMHg2NjkwLCAweDY1OGYsIDB4NjQ4OCwgMHg2Mzg0LCAweDYyODIsIDB4ODA4MSwgMHg4MDgwLAotCTB4NjE3YywgMHg2MDdhLCAweDgwNzksIDB4NWY3NiwgMHg4MDc1LCAweDgwNzQsIDB4ODA3MywgMHg4MDcyLAotCTB4ODA3MSwgMHg4MDZlLCAweDVlNmQsIDB4ODA2YywgMHg1ZDZiLCAweDVjNmEsIDB4NWI2OSwgMHg4MDY3LAotCTB4NWE2NiwgMHg1OTY1LCAweDU4NjMsIDB4NTc1YywgMHg1NjVhLCAweDU1NTksIDB4ODA1NiwgMHg4MDU1LAotCTB4NTQ1NCwgMHg1MzUzLCAweDUyNTIsIDB4NTE1MSwgMHg1MDRlLCAweDRmNGQsIDB4ODA0YywgMHg4MDRiLAotCTB4NGU0YSwgMHg0ZDQ5LCAweDgwNDcsIDB4NGM0NiwgMHg4MDQ1LCAweDgwNDMsIDB4ODAzYywgMHg4MDNhLAotCTB4ODAzOSwgMHg4MDM2LCAweDRiMzUsIDB4ODAzNCwgMHg0YTMzLCAweDQ5MzIsIDB4NDgzMSwgMHg4MDJlLAotCTB4NDcyZCwgMHg0NjJjLCAweDQ1MmIsIDB4NDQyYSwgMHg0MzI5LCAweDQyMjcsIDB4ODAyNiwgMHg4MDI1LAotCTB4NDEyMywgMHg0MDFmLCAweDNmMWUsIDB4M2UxZCwgMHgzZDFiLCAweDNjMTgsIDB4ODAxNywgMHg4MDEwLAotCTB4M2IwZiwgMHgzYTA4LCAweDgwMDQsIDB4MzkwMiwgMHg4MDAxLCAweDgwMDAsIDB4ODAwMCwgMHgzODAwLAotCTB4MzcwMCwgMHgzNjAwLCAweDgwMDAsIDB4MzUwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzNDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzMwMCwgMHgzMjAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzEwMCwgMHgzMDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDJmMDAsIDB4ODAwMCwgMHgyZTAwLCAweDJkMDAsIDB4MmMwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDJiMDAsIDB4ODAwMCwgMHgyYTAwLCAweDI5MDAsIDB4MjgwMCwgMHg4MDAwLAotCTB4MjcwMCwgMHgyNjAwLCAweDI1MDAsIDB4MjQwMCwgMHgyMzAwLCAweDIyMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4MjEwMCwgMHgyMDAwLCAweDFmMDAsIDB4MWUwMCwgMHgxZDAwLCAweDFjMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4MWIwMCwgMHgxYTAwLCAweDgwMDAsIDB4MTkwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDE4MDAsIDB4ODAwMCwgMHgxNzAwLCAweDE2MDAsIDB4MTUwMCwgMHg4MDAwLAotCTB4MTQwMCwgMHgxMzAwLCAweDEyMDAsIDB4MTEwMCwgMHgxMDAwLCAweDBmMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4MGUwMCwgMHgwZDAwLCAweDBjMDAsIDB4MGIwMCwgMHgwYTAwLCAweDA5MDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4MDgwMCwgMHgwNzAwLCAweDgwMDAsIDB4MDYwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwNTAwLAotCTB4MDQwMCwgMHgwMzAwLCAweDgwMDAsIDB4MDIwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwMTAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgyMDcxLAotCTB4YTM4MSwgMHg3MDAzLCAweDAwMDIsIDB4YTAwNiwgMHg3MDEyLCAweDcwMTYsIDB4NzAzYSwgMHg3MDNlLAotCTB4NzAzMywgMHhhMzkxLCAweDcwMzcsIDB4YTM5MSwgMHg3MDA3LCAweDAwMDEsIDB4MjA2MSwgMHhhM2QxLAotCTB4NjAwMywgMHgwMDAyLCAweDAwN2MsIDB4MDA5MCwgMHgyYTY2LCAweDAwNjgsIDB4MmE2NiwgMHgyMDcxLAotCTB4YTM4MSwgMHgyYjc4LCAweDc4MTgsIDB4ZDA4NCwgMHgwMGMwLCAweDJhNjYsIDB4MmE2MCwgMHg3ODIwLAotCTB4YTA4ZSwgMHgwMDY5LCAweDAwYzAsIDB4MmI1NiwgMHgwMDc5LCAweDJhZWEsIDB4MDA3YywgMHgyMDcxLAotCTB4YTM4MSwgMHg3MDA0LCAweDAwNzksIDB4MmE2YywgMHgyYTcwLCAweDJhNzEsIDB4MmE3YiwgMHgyYThkLAotCTB4MDA3YywgMHgwMDkwLCAweDJhN2EsIDB4MDA2OCwgMHgyYTdhLCAweDJiNzgsIDB4NzgxOCwgMHhkMDg0LAotCTB4MDA0MCwgMHgyYTk5LCAweDAwN2MsIDB4MmI3OCwgMHgyMDYxLCAweGEzZDEsIDB4NjAwOCwgMHhhMDhlLAotCTB4MDEwMCwgMHgwMDQwLCAweDJhODgsIDB4YTA4NiwgMHgwMjAwLCAweDAwNDAsIDB4MmI0ZSwgMHgwMDdjLAotCTB4NzAxNCwgMHgyMDY4LCAweDJhNjAsIDB4NzAxOCwgMHgwMDdhLCAweDcwMTAsIDB4MjA2OCwgMHg2ODM0LAotCTB4YTA4NiwgMHgwMTAzLCAweDAwNDAsIDB4MmE5NSwgMHgwMDdjLCAweDJhNjAsIDB4MmI3OCwgMHg3MDE4LAotCTB4MDA3YSwgMHgyYTYwLCAweDc4MjAsIDB4YTA4YSwgMHgwMDQwLCAweDAwYzgsIDB4MmFhMiwgMHg2MWI4LAotCTB4MDA3OSwgMHgyYWFhLCAweDIxMDAsIDB4YTA4YSwgMHgwMDNmLCAweDAwYzgsIDB4MmI0YSwgMHg2MWI4LAotCTB4MDA3OSwgMHgyYWVhLCAweDJiMmMsIDB4MmI1ZSwgMHgyYjY2LCAweDJiNmEsIDB4MmI3MiwgMHgyYjc4LAotCTB4MmI3YywgMHgyYjg4LCAweDJiOGMsIDB4MmI5NiwgMHgyYjlhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLAotCTB4MmI5ZSwgMHgyYjRhLCAweDJiYWUsIDB4MmJjNSwgMHgyYmRjLCAweDJjNTgsIDB4MmM1ZCwgMHgyYzhhLAotCTB4MmNlNCwgMHgyY2Y1LCAweDJkMTMsIDB4MmQ1NCwgMHgyZDVlLCAweDJkNmIsIDB4MmQ3ZSwgMHgyZDlkLAotCTB4MmRhNiwgMHgyZGUzLCAweDJkZTksIDB4MmI0YSwgMHgyZTA1LCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLAotCTB4MmI0YSwgMHgyYjRhLCAweDJlMGMsIDB4MmUxNiwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLAotCTB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyZTFlLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLAotCTB4MmI0YSwgMHgyYjRhLCAweDJlMzAsIDB4MmU0NywgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLAotCTB4MmI0YSwgMHgyYjRhLCAweDJlNTksIDB4MmViMCwgMHgyZjBlLCAweDJmMWYsIDB4MmI0YSwgMHgyYjRhLAotCTB4MmI0YSwgMHgzOGYxLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLAotCTB4MmI0YSwgMHgyYjRhLCAweDJiOTYsIDB4MmI5YSwgMHgyZjM2LCAweDJiNGEsIDB4MmY0MywgMHgzOTdkLAotCTB4MzlkYSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLAotCTB4MmI0YSwgMHgyYjRhLCAweDJmOTAsIDB4MzBjNSwgMHgzMGUxLCAweDMwZWQsIDB4MzE1MCwgMHgzMWE5LAotCTB4MzFiNCwgMHgzMWYzLCAweDMyMDIsIDB4MzIxMSwgMHgzMjE0LCAweDJmNDcsIDB4MzIzOCwgMHgzMjg0LAotCTB4MzI5MSwgMHgzM2EyLCAweDM0Y2QsIDB4MzRmNywgMHgzNjA0LCAweDM2MTQsIDB4MzYyMSwgMHgzNjViLAotCTB4MzcyYSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDM3OTIsIDB4MzdhZSwgMHgzODI4LAotCTB4MzhlMiwgMHg3MTNjLCAweDAwNzgsIDB4MmIyYywgMHgyMDIxLCAweDQwMDAsIDB4MTA3OCwgMHgzNTUzLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDA2OCwgMHgyYjM5LCAweDc4MTgsIDB4ZDA4NCwgMHgwMDQwLAotCTB4MmIzYywgMHgxMjdmLCAweDAwNzgsIDB4MmIzMCwgMHg3YzIyLCAweDc5MjYsIDB4N2EyYSwgMHg3YjJlLAotCTB4NzgxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHg3MDA3LCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLAotCTB4MTI3ZiwgMHgwMDdjLCAweDIwMjEsIDB4NDAwMSwgMHgwMDc4LCAweDJiMmUsIDB4MjAyMSwgMHg0MDAyLAotCTB4MDA3OCwgMHgyYjJlLCAweDIwMjEsIDB4NDAwMywgMHgwMDc4LCAweDJiMmUsIDB4MjAyMSwgMHg0MDA1LAotCTB4MDA3OCwgMHgyYjJlLCAweDIwMjEsIDB4NDAwNiwgMHgwMDc4LCAweDJiMmUsIDB4YTAyZSwgMHgyNTIwLAotCTB4N2IyOCwgMHg3YTJjLCAweDc4MjQsIDB4NzkzMCwgMHgwMDc4LCAweDM1NjIsIDB4NzgyMywgMHgwMDA0LAotCTB4NzgyNCwgMHgwMDdhLCAweGEwMmUsIDB4MjUyMCwgMHg3YjI4LCAweDdhMmMsIDB4NzgyNCwgMHg3OTMwLAotCTB4MDA3OCwgMHgzNTY2LCAweDc5MjQsIDB4NzgyOCwgMHgyMTE0LCAweDIwMGEsIDB4MDA3OCwgMHgyYjJjLAotCTB4NzkyNCwgMHgyMTE0LCAweDAwNzgsIDB4MmIyYywgMHgyMDk5LCAweDAwMDksIDB4MjBhMSwgMHgwMDA5LAotCTB4MjBhOSwgMHgwMDA3LCAweDUzYTMsIDB4NzkyNCwgMHg3YTI4LCAweDdiMmMsIDB4MDA3OCwgMHgyYjJjLAotCTB4NzgyNCwgMHgyMDYwLCAweDAwNzgsIDB4MmJhMCwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMDEzLAotCTB4MjAxOSwgMHgwMDEwLCAweDc4M2IsIDB4MDAxNywgMHgwMDc4LCAweDJiMmMsIDB4N2QzOCwgMHg3YzNjLAotCTB4MDA3OCwgMHgyYjYwLCAweDdkMzgsIDB4N2MzYywgMHgwMDc4LCAweDJiNmMsIDB4MjA2MSwgMHgxMDAwLAotCTB4NjEwYywgMHhhMDA2LCAweDJjMTQsIDB4YTIwMCwgMHg4YzYwLCAweDgxMDksIDB4MDBjMCwgMHgyYmEyLAotCTB4MjAxMCwgMHhhMDA1LCAweDAwNDAsIDB4MmIyYywgMHgwMDc4LCAweDJiNTIsIDB4MjA2OSwgMHhhMzUxLAotCTB4NzgyNCwgMHg3OTMwLCAweGExMWEsIDB4MDBjOCwgMHgyYjVhLCAweDgwMTksIDB4MDA0MCwgMHgyYjVhLAotCTB4Njg0YSwgMHg2OTQyLCAweDc4MmMsIDB4Njg1MiwgMHg3ODI4LCAweDY4NTYsIDB4YTAwNiwgMHg2ODVhLAotCTB4Njg1ZSwgMHgxMDc4LCAweDRkYmQsIDB4MDA3OCwgMHgyYjJjLCAweDIwNjksIDB4YTM1MSwgMHg3ODI0LAotCTB4NzkzNCwgMHhhMTFhLCAweDAwYzgsIDB4MmI1YSwgMHg4MDE5LCAweDAwNDAsIDB4MmI1YSwgMHg2ODRlLAotCTB4Njk0NiwgMHg3ODJjLCAweDY4NjIsIDB4NzgyOCwgMHg2ODY2LCAweGEwMDYsIDB4Njg2YSwgMHg2ODZlLAotCTB4MTA3OCwgMHg0OTRkLCAweDAwNzgsIDB4MmIyYywgMHhhMDJlLCAweDI1MjAsIDB4ODFmZiwgMHgwMGMwLAotCTB4MmI1NiwgMHg3OTI0LCAweDdiMjgsIDB4N2EyYywgMHgyMGE5LCAweDAwMDUsIDB4MjBhMSwgMHhhMzg4LAotCTB4NDFhMSwgMHgxMDc4LCAweDM1MTgsIDB4MDA0MCwgMHgyYjU2LCAweDIwMDksIDB4MDAyMCwgMHgxMDc4LAotCTB4MzU2MiwgMHg3MDFiLCAweDJiZjQsIDB4MDA3YywgMHg2ODM0LCAweDIwMDgsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA5NiwgMHgwMDExLCAweDAwNDAsIDB4MmMwMCwgMHhhMDk2LCAweDAwMTksIDB4MDBjMCwgMHgyYjU2LAotCTB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4MDA0MCwgMHgyYjU2LCAweDcxMGUsIDB4NzAwYywgMHg4MDAxLAotCTB4MDA0MCwgMHgyYzMxLCAweDcwMGUsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmI1NiwgMHgyMDA5LAotCTB4MDAyMCwgMHgyMDYxLCAweGEzZDEsIDB4NjIyNCwgMHg2MzI4LCAweDY0MmMsIDB4NjUzMCwgMHhhMjkwLAotCTB4MDA0MCwgMHhhMzk5LCAweDAwMDAsIDB4YTRhMSwgMHgwMDAwLCAweGE1YTksIDB4MDAwMCwgMHgxMDc4LAotCTB4MzU2MiwgMHg3MDFiLCAweDJjMjQsIDB4MDA3YywgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwgMHhhMDk2LAotCTB4MDAwMiwgMHgwMDQwLCAweDJjMmYsIDB4YTA5NiwgMHgwMDBhLCAweDAwYzAsIDB4MmI1NiwgMHgwMDc4LAotCTB4MmMwNiwgMHg3MDEwLCAweDIwNjgsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MTA3OCwgMHg0MzZlLAotCTB4MDBjMCwgMHgyYzNmLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDJjNDEsIDB4MDA3YywgMHgxMDc4LAotCTB4NGE2MCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMGE5LCAweDAwMDUsIDB4MjA5OSwgMHhhMzg4LAotCTB4NTMwYSwgMHgyMTAwLCAweGEyMTAsIDB4YTM5OSwgMHgwMDAwLCAweGE0YTEsIDB4MDAwMCwgMHhhNWE5LAotCTB4MDAwMCwgMHhhZDgwLCAweDAwMGQsIDB4MjAwOSwgMHgwMDIwLCAweDEyN2YsIDB4MDA3OCwgMHgzNTY2LAotCTB4NjFhMCwgMHg3ODI0LCAweDYwYTIsIDB4MDA3OCwgMHgyYjJjLCAweDIwOTEsIDB4ODAwMCwgMHg3ODIzLAotCTB4NDAwMCwgMHg3ODI3LCAweDQ5NTMsIDB4NzgyYiwgMHg1MDIwLCAweDc4MmYsIDB4MjAyMCwgMHgyMDA5LAotCTB4MDE3ZiwgMHgyMTA0LCAweDc4MzIsIDB4M2YwMCwgMHg3ODM2LCAweDIwNjEsIDB4MDEwMCwgMHg2MjAwLAotCTB4MjA2MSwgMHgwMjAwLCAweDYwM2MsIDB4ODAwNywgMHhhMjA1LCAweDc4M2EsIDB4MjAwOSwgMHgwNGZkLAotCTB4MjEwNCwgMHg3ODNlLCAweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4MjA5MSwgMHg0MDgwLAotCTB4MjA3MSwgMHgwMDEwLCAweDIwYzEsIDB4MDBmMCwgMHhhMDhhLCAweDAwMDMsIDB4MDBjOCwgMHgwNDI3LAotCTB4MDA3OCwgMHgwNDIzLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDc5MjQsIDB4ODEwZiwgMHhhMThjLAotCTB4MDBmZiwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHgyYjVhLCAweDdlMzgsIDB4YTY4NCwgMHgzZmZmLAotCTB4YTA4MiwgMHg0MDAwLCAweDAwNDgsIDB4MmM5ZSwgMHgwMDc4LCAweDJiNWEsIDB4N2MyOCwgMHg3ZDJjLAotCTB4MTA3OCwgMHg0NmQ2LCAweGQyOGMsIDB4MDBjMCwgMHgyY2E5LCAweDEwNzgsIDB4NDY2YSwgMHgwMDc4LAotCTB4MmNhYiwgMHgxMDc4LCAweDQ2YTQsIDB4MDBjMCwgMHgyY2Q1LCAweDIwNjEsIDB4YWEwMCwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4MmNjMywgMHg2MDEwLAotCTB4YTA2ZCwgMHgwMDQwLCAweDJjYzMsIDB4NjgzYywgMHhhNDA2LCAweDAwYzAsIDB4MmNjMywgMHg2ODQwLAotCTB4YTUwNiwgMHgwMDQwLCAweDJjY2UsIDB4MTI3ZiwgMHhhY2UwLCAweDAwMTAsIDB4MjAwMSwgMHhhMzE1LAotCTB4MjAwNCwgMHhhYzAyLCAweDAwYzgsIDB4MmI1NiwgMHgwMDc4LCAweDJjYWYsIDB4MTA3OCwgMHg4NzU4LAotCTB4MTI3ZiwgMHgwMDQwLCAweDJiNTYsIDB4MDA3OCwgMHgyYjJjLCAweGEwMGUsIDB4MjAwMSwgMHgwMDA1LAotCTB4MTA3OCwgMHg0YTYwLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4OGNjMCwgMHgxMDc4LAotCTB4NDk4MiwgMHgxMjdmLCAweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LAotCTB4MzUzMCwgMHgwMDQwLCAweDJiNWEsIDB4MTA3OCwgMHg0NWE3LCAweDAwNDAsIDB4MmI1NiwgMHgxMDc4LAotCTB4NDZlNCwgMHgwMDQwLCAweDJiNTYsIDB4MDA3OCwgMHgyYjJjLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LAotCTB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ3NWYsIDB4MDA0MCwgMHgyYjU2LAotCTB4MjAxOSwgMHgwMDA1LCAweDEwNzgsIDB4NDcwNSwgMHgwMDQwLCAweDJiNTYsIDB4NzgyOCwgMHhhMDhhLAotCTB4MTAwMCwgMHgwMGM4LCAweDJiNWEsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwgMHgxMDc4LAotCTB4NThlMSwgMHgwMDc4LCAweDJiMmMsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4ODFmZiwgMHgwMDQwLAotCTB4MmQxZCwgMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwgMHgyZDRlLCAweDIwMjksIDB4MDBmZiwgMHg2NDRjLAotCTB4MjQwMCwgMHhhNTA2LCAweDAwNDAsIDB4MmQ0OCwgMHgyNTA4LCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLAotCTB4MmQ0OCwgMHgxMDc4LCAweDQ3NWYsIDB4MDBjMCwgMHgyZDMzLCAweDIwMDksIDB4MDAwMiwgMHg2MmE4LAotCTB4MjUxOCwgMHgwMDc4LCAweDJkNGUsIDB4MjAxOSwgMHgwMDA0LCAweDEwNzgsIDB4NDcwNSwgMHgwMGMwLAotCTB4MmQzZCwgMHgyMDA5LCAweDAwMDYsIDB4MDA3OCwgMHgyZDRlLCAweDc4MjQsIDB4YTA4YSwgMHgxMDAwLAotCTB4MDBjOCwgMHgyZDUxLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4MTA3OCwgMHg1OGUxLAotCTB4ODUyOSwgMHgwMGM4LCAweDJkMjAsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4MTI3ZiwgMHgwMDc4LAotCTB4MmI1NiwgMHgxMjdmLCAweDAwNzgsIDB4MmI1YSwgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwgMHgyYjVhLAotCTB4MTA3OCwgMHg0NjFiLCAweDEwNzgsIDB4NDZkNiwgMHgwMDc4LCAweDJiMmMsIDB4ODFmZiwgMHgwMGMwLAotCTB4MmI1NiwgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwgMHgyYjVhLCAweDEwNzgsIDB4NDYwYSwgMHgxMDc4LAotCTB4NDZkNiwgMHgwMDc4LCAweDJiMmMsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwgMHgzNTMwLAotCTB4MDA0MCwgMHgyYjVhLCAweDEwNzgsIDB4NDZhNywgMHgwMDQwLCAweDJiNTYsIDB4MTA3OCwgMHg0M2MxLAotCTB4MTA3OCwgMHg0NjYzLCAweDEwNzgsIDB4NDZkNiwgMHgwMDc4LCAweDJiMmMsIDB4MTA3OCwgMHgzNTMwLAotCTB4MDA0MCwgMHgyYjVhLCAweDEwNzgsIDB4NDVhNywgMHgwMDQwLCAweDJiNTYsIDB4NjJhMCwgMHgyMDE5LAotCTB4MDAwNSwgMHgwYzdlLCAweDEwNzgsIDB4NDcxYiwgMHgwYzdmLCAweDEwNzgsIDB4NWQ1MywgMHgwNzdlLAotCTB4MjAzOSwgMHgwMDAwLCAweDEwNzgsIDB4NWM3OCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHg5YzM4LAotCTB4MDc3ZiwgMHgxMDc4LCAweDQ2ZDYsIDB4MDA3OCwgMHgyYjJjLCAweDEwNzgsIDB4MzUzMCwgMHgwMDQwLAotCTB4MmI1YSwgMHgxMDc4LCAweDQ2ZDYsIDB4MjIwOCwgMHgwMDc4LCAweDJiMmMsIDB4MTU3ZSwgMHgwZDdlLAotCTB4MGU3ZSwgMHgyMDY5LCAweGE0MTMsIDB4NjgxMCwgMHg2OTE0LCAweGExMGEsIDB4MDBjOCwgMHgyZGIyLAotCTB4MjAwOSwgMHgwMDAwLCAweDY4MTYsIDB4MjAxMSwgMHgwMDAwLCAweDIwMTksIDB4MDAwMCwgMHgyMGE5LAotCTB4MDBmZiwgMHgyMDY5LCAweGE0MzQsIDB4MmQwNCwgMHhhMDc1LCAweDAwNDAsIDB4MmRjNywgMHg3MDRjLAotCTB4MTA3OCwgMHgyZGQxLCAweGEyMTAsIDB4NzA4MCwgMHgxMDc4LCAweDJkZDEsIDB4YTMxOCwgMHg4ZDY4LAotCTB4MDBmMCwgMHgyZGJiLCAweDIzMDAsIDB4YTIxOCwgMHgwZTdmLCAweDBkN2YsIDB4MTU3ZiwgMHgwMDc4LAotCTB4MmIyYywgMHgwZjdlLCAweDAxN2UsIDB4YTA3ZCwgMHgwMDQwLCAweDJkZTAsIDB4MjAwMSwgMHgwMDAwLAotCTB4ODAwMCwgMHgyZjBjLCAweDgxZmYsIDB4MDA0MCwgMHgyZGUwLCAweDIxNzgsIDB4MDA3OCwgMHgyZGQ4LAotCTB4MDE3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MjA2OSwgMHhhNDEzLCAweDY5MTAsIDB4NjJhNCwgMHgwMDc4LAotCTB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHg2MTRjLCAweGExOTAsIDB4MjkzZiwgMHgyMjE0LAotCTB4YTI5NCwgMHgwMGZmLCAweDYwNmMsIDB4YTA4NCwgMHhmZjAwLCAweGEyMTUsIDB4NjM2OCwgMHg2N2M4LAotCTB4ZDc5YywgMHgwMDQwLCAweDJkZmYsIDB4MjAzMSwgMHgwMDAxLCAweDAwNzgsIDB4MmUwMSwgMHgyMDMxLAotCTB4MDAwMCwgMHg3ZTNhLCAweDdmM2UsIDB4MDA3OCwgMHgyYjJjLCAweDYxM2MsIDB4NjI0MCwgMHgyMDE5LAotCTB4YTVhMCwgMHgyMzFjLCAweDAwNzgsIDB4MmIyYywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg2MTM0LAotCTB4YTAwNiwgMHgyMDEwLCAweDIwMTgsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4MTA3OCwgMHgzNTQyLAotCTB4MDA0MCwgMHgyYjVhLCAweDYyNDQsIDB4NjMzOCwgMHgwMDc4LCAweDJiMmMsIDB4NjEzYywgMHg2MjQwLAotCTB4NzgyNCwgMHg2MDNlLCAweDdiMjgsIDB4NjM0MiwgMHgyMDY5LCAweGEzNTEsIDB4ODMxZiwgMHhhMzA1LAotCTB4NjgxNiwgMHg3ODJjLCAweDIwNjksIDB4YTVhMCwgMHgyZDFjLCAweDIwNmEsIDB4MDA3OCwgMHgyYjJjLAotCTB4MDE3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg3ODI0LCAweDYwMzYsIDB4ZDA5NCwgMHgwMDQwLAotCTB4MmU0MywgMHg3ODI4LCAweGEwODUsIDB4MDAwMSwgMHgyMDA5LCAweGE1YTksIDB4MjAwYSwgMHgyMDAxLAotCTB4ZmZmZiwgMHgxMDc4LCAweDU5NzUsIDB4MTI3ZiwgMHgwMTdmLCAweDAwNzgsIDB4MmIyYywgMHgxMDc4LAotCTB4MzU0MiwgMHgwMDQwLCAweDJiNWEsIDB4NzgyOCwgMHhhMDBkLCAweDAwNDAsIDB4MmI1YSwgMHg3ODJjLAotCTB4YTAwNSwgMHgwMDQwLCAweDJiNWEsIDB4NjI0NCwgMHg2MTQ2LCAweDYzMzgsIDB4NjAzYSwgMHgwMDc4LAotCTB4MmIyYywgMHgyMDAxLCAweGEzMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHgyYjU2LAotCTB4MGM3ZSwgMHgyMDYxLCAweDAxMDAsIDB4NzkyNCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHhhMTk2LAotCTB4MDBmZiwgMHgwMGMwLCAweDJlNzAsIDB4NjAzMCwgMHhhMDg1LCAweGZmMDAsIDB4MDA3OCwgMHgyZTdmLAotCTB4YTE4MiwgMHgwMDdmLCAweDAwYzgsIDB4MmVhOSwgMHhhMTg4LCAweDI5M2YsIDB4MjEwYywgMHhhMThjLAotCTB4MDBmZiwgMHg2MDMwLCAweGExMTYsIDB4MDA0MCwgMHgyZWE5LCAweDgxMGYsIDB4YTEwNSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDAwN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDAwN2YsIDB4MDA0MCwgMHgyZWE1LAotCTB4NjAxYSwgMHg2MDBiLCAweGJjMDksIDB4NjAxZiwgMHgwMDAxLCAweDEwNzgsIDB4MzUxOCwgMHgwMDQwLAotCTB4MmVhYywgMHg2ODM3LCAweDAwMDAsIDB4NzAwNywgMHgwMDAzLCAweDY4MzMsIDB4MDAwMCwgMHg2ODM4LAotCTB4YzBmZCwgMHg2ODNhLCAweDcwMWIsIDB4MmYwNywgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwgMHgwMDMyLAotCTB4MTA3OCwgMHg3NTZjLCAweDEyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweDEyN2YsIDB4MGM3ZiwgMHgwMDc4LAotCTB4MmI1NiwgMHgwYzdmLCAweDAwNzgsIDB4MmI1YSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwgMHgyZWE1LAotCTB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4MmI1NiwgMHgwYzdlLAotCTB4MjA2MSwgMHgwMTAwLCAweDc5MjQsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4YTE5NiwgMHgwMGZmLAotCTB4MDBjMCwgMHgyZWM3LCAweDYwMzAsIDB4YTA4NSwgMHhmZjAwLCAweDAwNzgsIDB4MmVkNiwgMHhhMTgyLAotCTB4MDA3ZiwgMHgwMGM4LCAweDJmMDAsIDB4YTE4OCwgMHgyOTNmLCAweDIxMGMsIDB4YTE4YywgMHgwMGZmLAotCTB4NjAzMCwgMHhhMTE2LCAweDAwNDAsIDB4MmYwMCwgMHg4MTBmLCAweGExMDUsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgwMDdlLCAweDEwNzgsIDB4NzRkNywgMHgwMDdmLCAweDAwNDAsIDB4MmVmYywgMHg2MDFhLAotCTB4NjAwYiwgMHhiYzA1LCAweDYwMWYsIDB4MDAwMSwgMHgxMDc4LCAweDM1MTgsIDB4MDA0MCwgMHgyZjAzLAotCTB4NjgzNywgMHgwMDAwLCAweDcwMDcsIDB4MDAwMywgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLAotCTB4NjgzYSwgMHg3MDFiLCAweDJmMDcsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMiwgMHgxMDc4LAotCTB4NzU2YywgMHgxMjdmLCAweDBjN2YsIDB4MDA3YywgMHgxMjdmLCAweDBjN2YsIDB4MDA3OCwgMHgyYjU2LAotCTB4MGM3ZiwgMHgwMDc4LCAweDJiNWEsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4MmVmYywgMHg2ODMwLAotCTB4YTA4NiwgMHgwMTAwLCAweDAwNDAsIDB4MmI1NiwgMHgwMDc4LCAweDJiMmMsIDB4MjA2MSwgMHhhNjJkLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjAwMCwgMHhkMDg0LCAweDAwNDAsIDB4MmYxYywgMHg2MTA0LAotCTB4NjIwOCwgMHgxMjdmLCAweDAwNzgsIDB4MmIyYywgMHgxMjdmLCAweDAwNzgsIDB4MmI1YSwgMHg4MWZmLAotCTB4MDBjMCwgMHgyYjU2LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyNDQsIDB4NjA2MCwgMHhhMjAyLAotCTB4MDA0OCwgMHgyZjMzLCAweGEwODUsIDB4MDAwMSwgMHgxMDc4LCAweDI1MDAsIDB4MTA3OCwgMHgzYmY1LAotCTB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4MTI3ZiwgMHgwMDc4LCAweDJiNWEsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMGE5LCAweDAwMTEsIDB4MjAwMSwgMHhhMzQwLCAweDIwYTAsIDB4YTAwNiwgMHg0MGE0LAotCTB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4N2QzOCwgMHg3YzNjLCAweDAwNzgsIDB4MmJkZSwgMHg3ODI0LAotCTB4YTA5YywgMHgwMGZmLCAweGEzOWEsIDB4MDAwMywgMHgwMGM4LCAweDJiNTYsIDB4NjI0YywgMHhhMDg0LAotCTB4ZmYwMCwgMHg4MDA3LCAweGEyMDYsIDB4MDBjMCwgMHgyZjVmLCAweDIwMDEsIDB4YTM0MCwgMHgyMDA5LAotCTB4MDAwYywgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDAwNzgsIDB4MzU2NiwgMHg4MWZmLAotCTB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzU0MiwgMHgwMDQwLCAweDJiNWEsIDB4NjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHgyYjU2LCAweDBjN2UsIDB4MTA3OCwgMHgzNTE4LAotCTB4MGM3ZiwgMHgwMDQwLCAweDJiNTYsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLAotCTB4MTA3OCwgMHg4Yjg1LCAweDAwNDAsIDB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgyZjgxLAotCTB4MDA3YywgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgwMDQwLCAweDJiNTYsIDB4YWQ4MCwgMHgwMDBlLAotCTB4MjAwOSwgMHgwMDBjLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDA3OCwgMHgzNTY2LAotCTB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmI1NiwgMHgxMDc4LCAweDQyMWEsIDB4MjAwOSwgMHgwMDFjLAotCTB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgxMDc4LCAweDM1NjIsIDB4NzAxYiwgMHgyZmExLAotCTB4MDA3YywgMHhhZGU4LCAweDAwMGQsIDB4NjgwMCwgMHhhMDA1LCAweDAwNDAsIDB4MmI1YSwgMHg2ODA0LAotCTB4ZDBhYywgMHgwMDQwLCAweDJmYWUsIDB4ZDBhNCwgMHgwMDQwLCAweDJiNWEsIDB4ZDA5NCwgMHgwMDQwLAotCTB4MmZiOSwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwgMHg2MTA0LCAweGExOGMsIDB4ZmZkZiwgMHg2MTA2LAotCTB4MGM3ZiwgMHhkMDhjLCAweDAwNDAsIDB4MmZjNCwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwgMHg2MTA0LAotCTB4YTE4ZCwgMHgwMDEwLCAweDYxMDYsIDB4MGM3ZiwgMHgyMDA5LCAweDAxMDAsIDB4MjEwYywgMHhhMThhLAotCTB4MDAwMiwgMHgwMDQ4LCAweDJmZDksIDB4ZDA4NCwgMHgwMDQwLCAweDJmZDksIDB4NmEyOCwgMHhhMjhhLAotCTB4MDA3ZiwgMHgwMGM4LCAweDJiNWEsIDB4YTI4OCwgMHgyOTNmLCAweDIxMGMsIDB4YTE4YywgMHgwMGZmLAotCTB4NjE1MiwgMHhkMGRjLCAweDAwNDAsIDB4MmZlMiwgMHg2ODI4LCAweGEwOGEsIDB4MDA3ZiwgMHgwMGM4LAotCTB4MmI1YSwgMHg2MDRlLCAweDY4MDgsIDB4YTA4YSwgMHgwMTAwLCAweDAwNDgsIDB4MmI1YSwgMHhhMDhhLAotCTB4MDg0MSwgMHgwMGM4LCAweDJiNWEsIDB4YTA4NCwgMHgwMDA3LCAweDAwYzAsIDB4MmI1YSwgMHg2ODBjLAotCTB4YTAwNSwgMHgwMDQwLCAweDJiNWEsIDB4NjgxMCwgMHhhMDA1LCAweDAwNDAsIDB4MmI1YSwgMHg2ODQ4LAotCTB4Njk0MCwgMHhhMTBhLCAweDAwYzgsIDB4MmI1YSwgMHg4MDAxLCAweDAwNDAsIDB4MmI1YSwgMHg2ODRjLAotCTB4Njk0NCwgMHhhMTBhLCAweDAwYzgsIDB4MmI1YSwgMHg4MDAxLCAweDAwNDAsIDB4MmI1YSwgMHg2ODA0LAotCTB4ZDBmYywgMHgwMDQwLCAweDMwMzgsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmI1NiwgMHgyMDA5LAotCTB4MDAxNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweGEyOTAsIDB4MDAzOCwgMHhhMzk5LAotCTB4MDAwMCwgMHgxMDc4LCAweDM1NjIsIDB4NzAxYiwgMHgzMDFlLCAweDAwN2MsIDB4YWRlOCwgMHgwMDBkLAotCTB4MjBhOSwgMHgwMDE0LCAweDJkOTgsIDB4MjA2OSwgMHhhMzZkLCAweDJkYTAsIDB4NTNhMywgMHg3MDEwLAotCTB4YTBlOCwgMHgwMDBkLCAweDIwMDEsIDB4YTM3MSwgMHgyMDBjLCAweGQxZTQsIDB4MDA0MCwgMHgzMDM4LAotCTB4MGM3ZSwgMHgyMDYxLCAweDAxMDAsIDB4NjAwNCwgMHhhMDg1LCAweDBiMDAsIDB4NjAwNiwgMHgwYzdmLAotCTB4MjBhOSwgMHgwMDFjLCAweDJkOTgsIDB4MjA2OSwgMHhhMzUxLCAweDJkYTAsIDB4NTNhMywgMHg2ODE0LAotCTB4YTA4YywgMHgwMGZmLCAweDYxM2UsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4NjA0MiwgMHgxMDc4LAotCTB4NGRiZCwgMHgxMDc4LCAweDQ4ZGQsIDB4MTA3OCwgMHg0OTRkLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLAotCTB4MDBjMCwgMHgzMGMzLCAweDY4MDgsIDB4NjAyYSwgMHgxMDc4LCAweDIxOGIsIDB4NjgxOCwgMHg2OTFjLAotCTB4NmEyMCwgMHg2YjI0LCAweDgwMDcsIDB4ODEwZiwgMHg4MjE3LCAweDgzMWYsIDB4NjAxNiwgMHg2MTFhLAotCTB4NjIxZSwgMHg2MzIyLCAweDZjMDQsIDB4ZDRmNCwgMHgwMDQwLCAweDMwNzAsIDB4NjgzMCwgMHg2OTM0LAotCTB4NmEzOCwgMHg2YjNjLCAweDgwMDcsIDB4ODEwZiwgMHg4MjE3LCAweDgzMWYsIDB4MDA3OCwgMHgzMDcyLAotCTB4YTA4NCwgMHhmMGZmLCAweDYwMDYsIDB4NjEwYSwgMHg2MjBlLCAweDYzMTIsIDB4MTA3OCwgMHg1OWE4LAotCTB4NjkwNCwgMHhkMWZjLCAweDAwNDAsIDB4MzBhNSwgMHgwYzdlLCAweDIwMDksIDB4MDAwMCwgMHgyMGE5LAotCTB4MDAwMSwgMHg2YjcwLCAweGQzODQsIDB4MDA0MCwgMHgzMGEyLCAweDAwNzgsIDB4MzA4YywgMHg4MzlkLAotCTB4MDBjOCwgMHgzMGEyLCAweDM1MDgsIDB4ODEwOSwgMHgxMDc4LCAweDUzNjQsIDB4Njg3OCwgMHg2MDE2LAotCTB4Njg3NCwgMHgyMDA4LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDYwMGEsIDB4YTE4NCwgMHgwMGZmLAotCTB4NjAwNiwgMHg4MTA4LCAweDAwYzAsIDB4MzBhMCwgMHg2MDAzLCAweDAwMDMsIDB4MDA3OCwgMHgzMGEyLAotCTB4NjAwMywgMHgwMDAxLCAweDAwZjAsIDB4MzA4NywgMHgwYzdmLCAweDBjN2UsIDB4MjA2MSwgMHgwMTAwLAotCTB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwYzdmLCAweDEwNzgsIDB4Mzc4NCwgMHgwMDQwLAotCTB4MzBiMywgMHgxMDc4LCAweDI1MDAsIDB4NjBiYywgMHhhMDA1LCAweDAwNDAsIDB4MzBiZiwgMHg2MDAzLAotCTB4MDAwMSwgMHgyMDkxLCAweDMwMWQsIDB4MTA3OCwgMHg0MTcxLCAweDAwNzgsIDB4MzBjMywgMHg2MDAzLAotCTB4MDAwNCwgMHgyMDkxLCAweDMwMWQsIDB4MDA3OCwgMHgyYjJjLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLAotCTB4MDA0MCwgMHgyYjU2LCAweDIwNjksIDB4YTM1MSwgMHg3ODMwLCAweDY4NDIsIDB4NzgzNCwgMHg2ODQ2LAotCTB4NjgwNCwgMHhkMGZjLCAweDAwNDAsIDB4MzBkOCwgMHgyMDA5LCAweDAwMzAsIDB4MDA3OCwgMHgzMGRhLAotCTB4MjAwOSwgMHgwMDFjLCAweDJkMDAsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwMDc4LAotCTB4MzU2NiwgMHhhMDA2LCAweDEwNzgsIDB4MjUwMCwgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LAotCTB4NDIxYSwgMHgxMDc4LCAweDQxNzEsIDB4MDA3OCwgMHgyYjJjLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LAotCTB4NjE4MCwgMHg4MWZmLCAweDAwNDAsIDB4MzEwNywgMHg3MDNmLCAweDAwMDAsIDB4MjAwMSwgMHhhOWMwLAotCTB4MjAwOSwgMHgwMDQwLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgxMDc4LCAweDM1NjYsIDB4NzAxYiwgMHgyYjI5LCAweDEyN2YsIDB4MDA3YywgMHg3MDNmLAotCTB4MDAwMSwgMHgwZDdlLCAweDIwNjksIDB4YTljMCwgMHgyMGE5LCAweDAwNDAsIDB4MjBhMSwgMHhhOWMwLAotCTB4MjAxOSwgMHhmZmZmLCAweDQzYTQsIDB4NjU0YywgMHhhNTg4LCAweDI5M2YsIDB4MjEwYywgMHhhMThjLAotCTB4MDBmZiwgMHgyMTZhLCAweGEwMGUsIDB4MjAxMSwgMHgwMDAyLCAweDIxMDAsIDB4YTUwNiwgMHgwMDQwLAotCTB4MzEzOSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHgzMTM5LCAweDYwMTQsIDB4ODIxYywgMHgwMDQ4LAotCTB4MzEzMSwgMHhhMzk4LCAweGE5YzAsIDB4YTA4NSwgMHhmZjAwLCAweDgwMDcsIDB4MjAxYSwgMHgwMDc4LAotCTB4MzEzOCwgMHhhMzk4LCAweGE5YzAsIDB4MjMyNCwgMHhhNGE0LCAweGZmMDAsIDB4YTQwNSwgMHgyMDFhLAotCTB4ODIxMCwgMHg4MTA4LCAweGExODIsIDB4MDA4MCwgMHgwMGM4LCAweDMxNDAsIDB4MDA3OCwgMHgzMTFkLAotCTB4ODIwMSwgMHg4MDA3LCAweDJkMGMsIDB4YTEwNSwgMHgyMDZhLCAweDBkN2YsIDB4MjBhOSwgMHgwMDQwLAotCTB4MjBhMSwgMHhhOWMwLCAweDIwOTksIDB4YTljMCwgMHgxMDc4LCAweDQxYmUsIDB4MDA3OCwgMHgzMGY2LAotCTB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwgMHgwYzdlLCAweDEwNzgsIDB4MzUxOCwgMHgwYzdmLAotCTB4MDBjMCwgMHgzMTVlLCAweDIwMDksIDB4MDAwMiwgMHgwMDc4LCAweDJiNTYsIDB4MjAwMSwgMHhhMzUyLAotCTB4MjAwNCwgMHhkMGI0LCAweDAwNDAsIDB4MzE4NSwgMHg2MDAwLCAweGQwOGMsIDB4MDBjMCwgMHgzMTg1LAotCTB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4MzE4NSwgMHg2ODM3LAotCTB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHgxMDc4LCAweDhiZDksIDB4MDBjMCwgMHgzMTdjLAotCTB4MjAwOSwgMHgwMDAzLCAweDAwNzgsIDB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzMTgxLAotCTB4MDA3YywgMHgxMDc4LCAweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDIwYTksIDB4MDAyYiwgMHgyYzk4LAotCTB4YWRlOCwgMHgwMDAyLCAweDJkYTAsIDB4NTNhMywgMHgyMGE5LCAweDAwMDQsIDB4YWM4MCwgMHgwMDA2LAotCTB4MjA5OCwgMHhhZDgwLCAweDAwMDYsIDB4MjBhMCwgMHgxMDc4LCAweDQxYmUsIDB4MjBhOSwgMHgwMDA0LAotCTB4YWM4MCwgMHgwMDBhLCAweDIwOTgsIDB4YWQ4MCwgMHgwMDBhLCAweDIwYTAsIDB4MTA3OCwgMHg0MWJlLAotCTB4MmQwMCwgMHgyMDA5LCAweDAwMmIsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwMDc4LAotCTB4MzU2NiwgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwgMHgyYjVhLAotCTB4MTA3OCwgMHg0NmVmLCAweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHg3ODI4LAotCTB4YTA4YSwgMHgxMDAwLCAweDAwYzgsIDB4MmI1YSwgMHgxMDc4LCAweDM1NDIsIDB4MDA0MCwgMHgyYjVhLAotCTB4MTA3OCwgMHg0NzVmLCAweDAwNDAsIDB4MmI1NiwgMHgyMDE5LCAweDAwMDQsIDB4MTA3OCwgMHg0NzA1LAotCTB4NzkyNCwgMHg4MTBmLCAweDdhMjgsIDB4MTA3OCwgMHgzMWNmLCAweDAwNzgsIDB4MmIyYywgMHhhMTg2LAotCTB4MDBmZiwgMHgwMDQwLCAweDMxZDcsIDB4MTA3OCwgMHgzMWU3LCAweDAwNzgsIDB4MzFlNiwgMHgyMDI5LAotCTB4MDA3ZSwgMHgyMDYxLCAweGEzMDAsIDB4NjQ0YywgMHgyNDAwLCAweGE1MDYsIDB4MDA0MCwgMHgzMWUzLAotCTB4MjUwOCwgMHgxMDc4LCAweDMxZTcsIDB4ODUyOSwgMHgwMGM4LCAweDMxZGMsIDB4MDA3YywgMHgxMDc4LAotCTB4NDUwMSwgMHgwMGMwLCAweDMxZjIsIDB4MjIwMCwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHhhMTA4LAotCTB4MTA3OCwgMHg1OGUxLCAweDAwN2MsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwgMHgzNTMwLAotCTB4MDA0MCwgMHgyYjVhLCAweDEwNzgsIDB4NDVhNywgMHgwMDQwLCAweDJiNTYsIDB4MTA3OCwgMHg0NmZhLAotCTB4MDA3OCwgMHgyYjJjLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzUzMCwgMHgwMDQwLAotCTB4MmI1YSwgMHgxMDc4LCAweDQ1YTcsIDB4MDA0MCwgMHgyYjU2LCAweDEwNzgsIDB4NDZlNCwgMHgwMDc4LAotCTB4MmIyYywgMHg2MTAwLCAweDAwNzgsIDB4MmIyYywgMHgxMDc4LCAweDM1NDIsIDB4MDA0MCwgMHgyYjVhLAotCTB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4MmI1NiwgMHgwZDdlLAotCTB4YWNlOCwgMHgwMDBhLCAweDc5MjQsIDB4ZDE4NCwgMHgwMDQwLCAweDMyMjgsIDB4YWNlOCwgMHgwMDA2LAotCTB4NjgwYywgMHg4MDA3LCAweDc4M2UsIDB4NjgwOCwgMHg4MDA3LCAweDc4M2EsIDB4NmIwNCwgMHg4MzFmLAotCTB4NmEwMCwgMHg4MjE3LCAweDBkN2YsIDB4NjEwMCwgMHhhMThjLCAweDAyMDAsIDB4MDA3OCwgMHgyYjJjLAotCTB4YTAwNiwgMHgxMDc4LCAweDI1MDAsIDB4NzgyNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMGZmLAotCTB4MDA0MCwgMHgzMjQ1LCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4NDIxYSwgMHg3ODI4LAotCTB4YTA4YSwgMHgxMDAwLCAweDAwYzgsIDB4MmI1YSwgMHg3OTI0LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4YTE4NiwgMHgwMGZmLCAweDAwNDAsIDB4MzI1YiwgMHhhMTgyLCAweDAwN2YsIDB4MDBjOCwgMHgyYjVhLAotCTB4MjEwMCwgMHgxMDc4LCAweDI0ZmEsIDB4MDI3ZSwgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA2MSwgMHhhNWJlLCAweDYwMWIsIDB4MDAwMCwgMHg2MDFmLCAweDAwMDAsIDB4MjA2MSwgMHgwMTAwLAotCTB4NjAzMCwgMHhhMDg0LCAweDAwZmYsIDB4ODEwZiwgMHhhMTA1LCAweDYwNGEsIDB4NjA0MywgMHgwMDkwLAotCTB4NjA0MywgMHgwMDEwLCAweDIwMDksIDB4MDAyZCwgMHgyMDExLCAweDQxOTYsIDB4MTA3OCwgMHg1OTZjLAotCTB4NzkyNCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwgMHg3YTI4LCAweDEwNzgsIDB4MzFjZiwgMHgxMjdmLAotCTB4MGM3ZiwgMHgwMjdmLCAweDAwNzgsIDB4MmIyYywgMHg3OTI0LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4MGM3ZSwgMHgxMDc4LCAweDQ0OTksIDB4MmMwOCwgMHgwYzdmLCAweDAwYzAsIDB4MmI1YSwgMHgwMDc4LAotCTB4MmIyYywgMHg4MWZmLCAweDAwNDAsIDB4MzI5OCwgMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwgMHgyYjU2LAotCTB4NjBjOCwgMHhkMDljLCAweDAwYzAsIDB4MzJhMCwgMHgyMDA5LCAweDAwMDUsIDB4MDA3OCwgMHgyYjU2LAotCTB4MTA3OCwgMHgzNTE4LCAweDAwYzAsIDB4MzJhOCwgMHgyMDA5LCAweDAwMDIsIDB4MDA3OCwgMHgyYjU2LAotCTB4NzkyNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDEwNzgsIDB4MzU2MiwgMHg3MDFiLAotCTB4MzJiMiwgMHgwMDdjLCAweDIwMDksIDB4MDA4MCwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHgzMmJmLAotCTB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAwNDAsIDB4MzJjMywgMHgyMDIxLAotCTB4NDAwYSwgMHgwMDc4LCAweDJiMmUsIDB4MGQ3ZSwgMHhhZGU4LCAweDAwMGQsIDB4NjkwMCwgMHg2YTA4LAotCTB4NmIwYywgMHg2YzEwLCAweDZkMTQsIDB4NmUxOCwgMHg2ODIwLCAweGEwYmUsIDB4MDEwMCwgMHgwMDQwLAotCTB4MzMzNiwgMHhhMGJlLCAweDAxMTIsIDB4MDA0MCwgMHgzMzM2LCAweGEwYmUsIDB4MDExMywgMHgwMDQwLAotCTB4MzMzNiwgMHhhMGJlLCAweDAxMTQsIDB4MDA0MCwgMHgzMzM2LCAweGEwYmUsIDB4MDExNywgMHgwMDQwLAotCTB4MzMzNiwgMHhhMGJlLCAweDAxMWEsIDB4MDA0MCwgMHgzMzM2LCAweGEwYmUsIDB4MDEyMSwgMHgwMDQwLAotCTB4MzMyYywgMHhhMGJlLCAweDAxMzEsIDB4MDA0MCwgMHgzMzJjLCAweGEwYmUsIDB4MDE3MSwgMHgwMDQwLAotCTB4MzMzNiwgMHhhMGJlLCAweDAxNzMsIDB4MDA0MCwgMHgzMzM2LCAweGEwYmUsIDB4MDFhMSwgMHgwMGMwLAotCTB4MzJmZSwgMHg2ODMwLCAweDgwMDcsIDB4NjgzMiwgMHgwMDc4LCAweDMzM2MsIDB4YTBiZSwgMHgwMjEyLAotCTB4MDA0MCwgMHgzMzMyLCAweGEwYmUsIDB4MDIxMywgMHgwMDQwLCAweDMzMzIsIDB4YTBiZSwgMHgwMjE0LAotCTB4MDA0MCwgMHgzMzI0LCAweGEwYmUsIDB4MDIxNywgMHgwMDQwLCAweDMzMWUsIDB4YTBiZSwgMHgwMjFhLAotCTB4MDBjMCwgMHgzMzE3LCAweDY4MzgsIDB4ODAwNywgMHg2ODNhLCAweDAwNzgsIDB4MzMzNiwgMHhhMGJlLAotCTB4MDMwMCwgMHgwMDQwLCAweDMzMzYsIDB4MGQ3ZiwgMHgwMDc4LCAweDJiNWEsIDB4YWQ4MCwgMHgwMDEwLAotCTB4MjBhOSwgMHgwMDA3LCAweDEwNzgsIDB4MzM3ZSwgMHhhZDgwLCAweDAwMGUsIDB4MjBhOSwgMHgwMDAxLAotCTB4MTA3OCwgMHgzMzdlLCAweDAwNzgsIDB4MzMzNiwgMHhhZDgwLCAweDAwMGMsIDB4MTA3OCwgMHgzMzhjLAotCTB4MDA3OCwgMHgzMzNjLCAweGFkODAsIDB4MDAwZSwgMHgxMDc4LCAweDMzOGMsIDB4YWQ4MCwgMHgwMDBjLAotCTB4MjBhOSwgMHgwMDAxLCAweDEwNzgsIDB4MzM3ZSwgMHgwYzdlLCAweDEwNzgsIDB4MzUxOCwgMHgwMDQwLAotCTB4MzM2ZiwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHg2ODM3LCAweDAxMTksIDB4Njg1MywgMHgwMDAwLAotCTB4Njg0ZiwgMHgwMDIwLCAweDY4NWIsIDB4MDAwMSwgMHg4MTBiLCAweDY5N2UsIDB4Njg4MywgMHgwMDAwLAotCTB4NmE4NiwgMHg2YjhhLCAweDZjOGUsIDB4NmQ5MiwgMHg2OTk2LCAweDY4OWIsIDB4MDAwMCwgMHgwYzdmLAotCTB4MGQ3ZiwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NjgyMywgMHgwMDAwLAotCTB4NjgwNCwgMHgyMDY4LCAweDEwNzgsIDB4OGJhMSwgMHgwMGMwLCAweDMzNmEsIDB4MjAwOSwgMHgwMDAzLAotCTB4MDA3OCwgMHgyYjU2LCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDMzNzUsIDB4MDA3YywgMHgwYzdmLAotCTB4MGQ3ZiwgMHgyMDA5LCAweDAwMDIsIDB4MDA3OCwgMHgyYjU2LCAweDY4MjAsIDB4YTA4NiwgMHg4MDAxLAotCTB4MDBjMCwgMHgyYjJjLCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDJiNTYsIDB4MDE3ZSwgMHgyMDA4LAotCTB4MjA0NCwgMHg4MDAwLCAweDIwNGMsIDB4ODAwMCwgMHgyOTBhLCAweDgxMDgsIDB4MjgwYSwgMHg4MTA4LAotCTB4MDBmMCwgMHgzMzgwLCAweDAxN2YsIDB4MDA3YywgMHgwMTdlLCAweDBhN2UsIDB4MGI3ZSwgMHgyMDA4LAotCTB4MjA0NCwgMHg4MDAwLCAweDIwNGMsIDB4ODAwMCwgMHgyMDU0LCAweDgwMDAsIDB4MjA1YywgMHgyYjBhLAotCTB4ODEwOCwgMHgyYTBhLCAweDgxMDgsIDB4MjkwYSwgMHg4MTA4LCAweDI4MGEsIDB4MGI3ZiwgMHgwYTdmLAotCTB4MDE3ZiwgMHgwMDdjLCAweDgxZmYsIDB4MDA0MCwgMHgzM2E5LCAweDIwMDksIDB4MDAwMSwgMHgwMDc4LAotCTB4MmI1NiwgMHg3OTI0LCAweDIxNDAsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4MiwgMHgwMDgwLAotCTB4MDA0OCwgMHgyYjVhLCAweGExODIsIDB4MDBmZiwgMHgwMGM4LCAweDJiNWEsIDB4N2EyYywgMHg3YjI4LAotCTB4NjA2OCwgMHhhMzA2LCAweDAwYzAsIDB4MzNjNCwgMHg2MDZjLCAweGEyNGUsIDB4MDA0MCwgMHgyYjVhLAotCTB4YTljYywgMHhmZjAwLCAweDAwNDAsIDB4MmI1YSwgMHgwYzdlLCAweDEwNzgsIDB4MzQ2ZCwgMHgyYzY4LAotCTB4MGM3ZiwgMHgwMDQwLCAweDMzZmMsIDB4YTBjNiwgMHg0MDAwLCAweDAwYzAsIDB4MzNlMiwgMHgwYzdlLAotCTB4MDA3ZSwgMHgyZDYwLCAweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDQ3Y2IsIDB4MDBjMCwgMHgzM2Q5LAotCTB4YzE4NSwgMHg2MDAwLCAweGQwYmMsIDB4MDA0MCwgMHgzM2RlLCAweGMxOGQsIDB4MDA3ZiwgMHgwYzdmLAotCTB4MDA3OCwgMHgzM2Y5LCAweGEwYzYsIDB4NDAwNywgMHgwMGMwLCAweDMzZTksIDB4MjQwOCwgMHgwMDc4LAotCTB4MzNmOSwgMHhhMGM2LCAweDQwMDgsIDB4MDBjMCwgMHgzM2YxLCAweDI3MDgsIDB4MjYxMCwgMHgwMDc4LAotCTB4MzNmOSwgMHhhMGM2LCAweDQwMDksIDB4MDBjMCwgMHgzM2Y3LCAweDAwNzgsIDB4MzNmOSwgMHgyMDAxLAotCTB4NDAwNiwgMHgyMDIwLCAweDAwNzgsIDB4MmIyZSwgMHgyZDAwLCAweDcwMjIsIDB4MDE3ZSwgMHgwYjdlLAotCTB4MGM3ZSwgMHgwZTdlLCAweDJjNzAsIDB4MTA3OCwgMHg3NGQ3LCAweDAwNDAsIDB4MzQ0MiwgMHgyZDAwLAotCTB4NjAxYSwgMHgyMDAxLCAweGEzNTYsIDB4MjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4Njg0MiwgMHgyZTU4LAotCTB4MGU3ZiwgMHgwZTdlLCAweDBjN2UsIDB4MTA3OCwgMHgzNTE4LCAweDBjN2YsIDB4MmI3MCwgMHgwMGMwLAotCTB4MzQyMywgMHgxMDc4LCAweDc1M2QsIDB4MGU3ZiwgMHgwYzdmLCAweDBiN2YsIDB4MDE3ZiwgMHgyMDA5LAotCTB4MDAwMiwgMHgwMDc4LCAweDJiNTYsIDB4NjgzNywgMHgwMDAwLCAweDJkMDAsIDB4NjAxMiwgMHg2ODMzLAotCTB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LAotCTB4MjgxMywgMHgxMjdmLCAweDYwMWYsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLAotCTB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwgMHgyMDA5LCAweDAwMDIsIDB4MTA3OCwgMHg3NTZjLAotCTB4YTA4NSwgMHgwMDAxLCAweDBlN2YsIDB4MGM3ZiwgMHgwYjdmLCAweDAxN2YsIDB4MDBjMCwgMHgzNDRjLAotCTB4MjAwOSwgMHgwMDAzLCAweDAwNzgsIDB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzNDUxLAotCTB4MDA3YywgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHg3MDIwLCAweDIwNjAsIDB4MDBjMCwgMHgzNDVmLAotCTB4MjAwOSwgMHgwMDA0LCAweDYyMDQsIDB4YTI5NCwgMHgwMGZmLCAweDAwNzgsIDB4MmI1NiwgMHgyMDA5LAotCTB4MDAwMCwgMHgxMDc4LCAweDQ3Y2IsIDB4MDBjMCwgMHgzNDY2LCAweGMxODUsIDB4NjAwMCwgMHhkMGJjLAotCTB4MDA0MCwgMHgzNDZiLCAweGMxOGQsIDB4MDA3OCwgMHgyYjJjLCAweDBlN2UsIDB4MGQ3ZSwgMHgyMDI5LAotCTB4MDAwMCwgMHgyMDIxLCAweDAwODAsIDB4MjBhOSwgMHgwMDdmLCAweDIwNzEsIDB4YTRiNCwgMHgyZTA0LAotCTB4YTAwNSwgMHgwMGMwLCAweDM0ODIsIDB4MjEwMCwgMHhhNDA2LCAweDAwYzAsIDB4MzRiMywgMHgyNDI4LAotCTB4MDA3OCwgMHgzNGIzLCAweDIwNjgsIDB4NmYxMCwgMHgyNzAwLCAweGEzMDYsIDB4MDBjMCwgMHgzNGE0LAotCTB4NmUxNCwgMHgyNjAwLCAweGEyMDYsIDB4MDBjMCwgMHgzNGE0LCAweDI0MDAsIDB4YTEwNiwgMHgwMGMwLAotCTB4MzRhMCwgMHgyZDYwLCAweGQ4ODQsIDB4MDA0MCwgMHgzNGM4LCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4MzRjOCwgMHgyMDAxLCAweDQwMDAsIDB4MDA3OCwgMHgzNGM5LAotCTB4MjAwMSwgMHg0MDA3LCAweDAwNzgsIDB4MzRjOSwgMHgyNDAwLCAweGExMDYsIDB4MDBjMCwgMHgzNGIzLAotCTB4NmUxNCwgMHg4N2ZmLCAweDAwYzAsIDB4MzRhZiwgMHg4NmZmLCAweDAwNDAsIDB4MzQ3ZiwgMHgyMDAxLAotCTB4NDAwOCwgMHgwMDc4LCAweDM0YzksIDB4ODQyMCwgMHg4ZTcwLCAweDAwZjAsIDB4MzQ3NywgMHg4NWZmLAotCTB4MDBjMCwgMHgzNGMyLCAweDIwMDEsIDB4NDAwOSwgMHgwMDc4LCAweDM0YzksIDB4MjAwMSwgMHgwMDAxLAotCTB4MDA3OCwgMHgzNGM5LCAweDEwNzgsIDB4NDQ5OSwgMHgwMGMwLCAweDM0YmUsIDB4NjMxMiwgMHg2MjE2LAotCTB4YTAwNiwgMHhhMDA1LCAweDBkN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LAotCTB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmI1NiwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLAotCTB4NjgzYSwgMHg3ODI0LCAweGEwMDUsIDB4MDA0MCwgMHgyYjVhLCAweGEwOTYsIDB4MDBmZiwgMHgwMDQwLAotCTB4MzRlNSwgMHhhMDkyLCAweDAwMDQsIDB4MDBjOCwgMHgyYjVhLCAweDIwMTAsIDB4MmQxOCwgMHgxMDc4LAotCTB4MjdjMiwgMHgwMDQwLCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzRmMCwgMHgwMDdjLAotCTB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDA0MCwgMHgyYjU2LCAweDAwNzgsIDB4MmIyYywgMHg3OTI0LAotCTB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4MiwgMHgwMDgwLCAweDAwNDgsIDB4MmI1YSwgMHhhMTgyLAotCTB4MDBmZiwgMHgwMGM4LCAweDJiNWEsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg4YTg5LAotCTB4MDBjMCwgMHgzNTE1LCAweGExOTAsIDB4YTQzNCwgMHgyMjA0LCAweGEwNjUsIDB4MDA0MCwgMHgzNTE1LAotCTB4MTA3OCwgMHg0MjM1LCAweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2YsIDB4MDA3OCwgMHgyYjU2LAotCTB4MTA3OCwgMHgxMzgxLCAweDAwNDAsIDB4MzUyZiwgMHhhMDA2LCAweDY4MDIsIDB4NzAxMCwgMHhhMDA1LAotCTB4MDBjMCwgMHgzNTI3LCAweDJkMDAsIDB4NzAxMiwgMHg3MDE2LCAweDAwNzgsIDB4MzUyZCwgMHg3MDE0LAotCTB4NjgwMiwgMHgyMDYwLCAweDJkMDAsIDB4NjAwNiwgMHg3MDE2LCAweGFkODAsIDB4MDAwZCwgMHgwMDdjLAotCTB4NzkyNCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHgzNTNmLAotCTB4N2UyOCwgMHhhNjg0LCAweDNmZmYsIDB4YTA4MiwgMHg0MDAwLCAweDAwNDgsIDB4MzU0MCwgMHhhMDY2LAotCTB4OGNmZiwgMHgwMDdjLCAweDdlMjQsIDB4ODYwZiwgMHhhMThjLCAweDAwZmYsIDB4MTA3OCwgMHg0NTAxLAotCTB4MDBjMCwgMHgzNTUwLCAweGE2YjQsIDB4MDBmZiwgMHhhNjgyLCAweDQwMDAsIDB4MDA0OCwgMHgzNTUxLAotCTB4YTA2NiwgMHg4Y2ZmLCAweDAwN2MsIDB4MDE3ZSwgMHg3MTEwLCAweDgxZmYsIDB4MDA0MCwgMHgzNTVlLAotCTB4MjE2OCwgMHg2OTA0LCAweDEwNzgsIDB4MTM5YSwgMHgwMDc4LCAweDM1NTUsIDB4NzExMiwgMHg3MTE2LAotCTB4MDE3ZiwgMHgwMDdjLCAweDIwMzEsIDB4MDAwMSwgMHgwMDc4LCAweDM1NjgsIDB4MjAzMSwgMHgwMDAwLAotCTB4MjA2MSwgMHhhM2QxLCAweDY2MDYsIDB4NjExMiwgMHg2MDBlLCAweDYyMjYsIDB4NjMyYSwgMHg2NDJlLAotCTB4NjUzMiwgMHgyYzEwLCAweDEwNzgsIDB4MTNkMSwgMHg3MDA3LCAweDAwMDIsIDB4NzAxYiwgMHgyYjJjLAotCTB4MDA3YywgMHgwZjdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDAwMCwgMHgyMDAxLAotCTB4YTM4ZiwgMHgyMDA0LCAweGEwMDUsIDB4MDBjMCwgMHgzNTk0LCAweDAwNjgsIDB4MzU5NCwgMHg3ODE4LAotCTB4ZDA4NCwgMHgwMGMwLCAweDM1OTQsIDB4N2EyMiwgMHg3YjI2LCAweDdjMmEsIDB4NzgxYiwgMHgwMDAxLAotCTB4MjA5MSwgMHg0MDgwLCAweDAwNzgsIDB4MzViOSwgMHgwMTdlLCAweDBjN2UsIDB4MGU3ZSwgMHgyMDcxLAotCTB4YTM4MSwgMHg3MTM4LCAweGExODIsIDB4MDAwOCwgMHgwMDQ4LCAweDM1YTIsIDB4NzAzMCwgMHgyMDYwLAotCTB4MDA3OCwgMHgzNWIzLCAweDcwMzAsIDB4YTBlMCwgMHgwMDA4LCAweGFjODIsIDB4YTNkMSwgMHgwMDQ4LAotCTB4MzVhYiwgMHgyMDYxLCAweGEzOTEsIDB4MmMwMCwgMHg3MDMyLCAweDgxZmYsIDB4MDBjMCwgMHgzNWIxLAotCTB4NzAzNiwgMHg4MTA4LCAweDcxM2EsIDB4MjI2MiwgMHg2MzA2LCAweDY0MGEsIDB4MGU3ZiwgMHgwYzdmLAotCTB4MDE3ZiwgMHgxMjdmLCAweDBmN2YsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTM4MSwgMHg3MDM4LAotCTB4YTAwNSwgMHgwMDQwLCAweDM1ZjUsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDA2OCwgMHgzNWY0LAotCTB4MGY3ZSwgMHgyMDc5LCAweDAwMDAsIDB4NzgxOCwgMHhkMDg0LCAweDAwYzAsIDB4MzVmMywgMHgwYzdlLAotCTB4NzAzNCwgMHgyMDYwLCAweDJjMDQsIDB4NzgyMiwgMHg2MDA0LCAweDc4MjYsIDB4NjAwOCwgMHg3ODJhLAotCTB4NzgxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHg3MDM4LCAweDgwMDEsIDB4NzAzYSwgMHhhMDA1LAotCTB4MDBjMCwgMHgzNWU5LCAweDcwMzMsIDB4YTM5MSwgMHg3MDM3LCAweGEzOTEsIDB4MGM3ZiwgMHgwMDc4LAotCTB4MzVmMywgMHhhYzgwLCAweDAwMDgsIDB4YTBmYSwgMHhhM2QxLCAweDAwNDgsIDB4MzVmMSwgMHgyMDAxLAotCTB4YTM5MSwgMHg3MDM2LCAweDBjN2YsIDB4MGY3ZiwgMHgxMjdmLCAweDBlN2YsIDB4MDA3YywgMHgwMjdlLAotCTB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBjNCwgMHgwMDQwLCAweDM2MDIsIDB4MjAxMSwgMHg4MDE0LAotCTB4MTA3OCwgMHgzNTc5LCAweDAyN2YsIDB4MDA3YywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDYwMzAsIDB4YzA4ZCwgMHhjMDg1LCAweGMwYWMsIDB4NjAzMiwgMHgxMDc4LAotCTB4NDE3MSwgMHgxMjdmLCAweDAwNzgsIDB4MmIyYywgMHg3ODI0LCAweDIwMDgsIDB4YTE4YywgMHhmZmZkLAotCTB4MDBjMCwgMHgzNjFmLCAweDYxZDQsIDB4YTEwZCwgMHg2MWQ2LCAweDAwNzgsIDB4MmIyYywgMHgwMDc4LAotCTB4MmI1YSwgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHg2MDAwLCAweGEwODYsIDB4MDAwMywgMHgwMGMwLAotCTB4MmI1NiwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGFjLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LAotCTB4MzU0MiwgMHgwMDQwLCAweDJiNWEsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LAotCTB4MDBjMCwgMHgzNjNlLCAweDc4MjgsIDB4YTAwNSwgMHgwMDQwLCAweDJiMmMsIDB4MGM3ZSwgMHgxMDc4LAotCTB4MzUxOCwgMHgwYzdmLCAweDAwNDAsIDB4MmI1NiwgMHg2ODM3LCAweDAwMDAsIDB4NjgzMywgMHgwMDAwLAotCTB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MTA3OCwgMHg4YzRkLCAweDAwNDAsIDB4MmI1NiwgMHg3MDA3LAotCTB4MDAwMywgMHg3MDFiLCAweDM2NTQsIDB4MDA3YywgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgwMDQwLAotCTB4MmI1NiwgMHgwMDc4LCAweDJiMmMsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLAotCTB4MDBjMCwgMHgyYjU2LCAweDdmMjQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgxMDc4LAotCTB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4MjAwOSwgMHgwMDAwLCAweDIwMzEsIDB4MDAwMCwgMHg3MDIzLAotCTB4MDAwMCwgMHg3MDJmLCAweDAwMDAsIDB4YWQ4MCwgMHgwMDA1LCAweDcwMjYsIDB4MjBhMCwgMHgxMDc4LAotCTB4NDUwMSwgMHgwMGMwLCAweDM2ZDgsIDB4NjAwNCwgMHhhMGM0LCAweDAwZmYsIDB4YThjNiwgMHgwMDA2LAotCTB4MDA0MCwgMHgzNjg4LCAweGEwYzQsIDB4ZmYwMCwgMHhhOGM2LCAweDA2MDAsIDB4MDBjMCwgMHgzNmQ4LAotCTB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgwMGMwLCAweDM2OTUsIDB4MTA3OCwgMHg0N2NiLAotCTB4MDBjMCwgMHgzNjk1LCAweGQ3OWMsIDB4MDA0MCwgMHgzNmQ4LCAweGQ3OTQsIDB4MDBjMCwgMHgzNjliLAotCTB4ZDc4NCwgMHgwMDQwLCAweDM2YTcsIDB4YWM4MCwgMHgwMDA2LCAweDIwOTgsIDB4MzQwMCwgMHgyMGE5LAotCTB4MDAwNCwgMHg1M2EzLCAweDEwNzgsIDB4MzM4YywgMHhkNzk0LCAweDAwNDAsIDB4MzZiMCwgMHhhYzgwLAotCTB4MDAwYSwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MTA3OCwgMHgzMzhjLAotCTB4MjFhMiwgMHhkNzk0LCAweDAwNDAsIDB4MzZkMCwgMHhhYzgwLCAweDAwMDAsIDB4MjA5OCwgMHg5NGEwLAotCTB4MjBhOSwgMHgwMDAyLCAweDUzYTMsIDB4YWM4MCwgMHgwMDAzLCAweDIwYTYsIDB4OTRhMCwgMHhhYzgwLAotCTB4MDAwNCwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwgMHgwMDAyLCAweDUzYTMsIDB4MTA3OCwgMHgzMzdlLAotCTB4YWM4MCwgMHgwMDI2LCAweDIwOTgsIDB4MjBhOSwgMHgwMDAyLCAweDUzYTMsIDB4MDA3OCwgMHgzNmQxLAotCTB4OTRhMCwgMHhkNzk0LCAweDAwNDAsIDB4MzZkNiwgMHhhNmIwLCAweDAwMGIsIDB4YTZiMCwgMHgwMDA1LAotCTB4ODEwOCwgMHhkNzhjLCAweDAwNDAsIDB4MzZlMiwgMHhhMTg2LCAweDAxMDAsIDB4MDA0MCwgMHgzNmYzLAotCTB4MDA3OCwgMHgzNmU2LCAweGExODYsIDB4MDA3ZSwgMHgwMDQwLCAweDM2ZjMsIDB4ZDc5NCwgMHgwMDQwLAotCTB4MzZlZCwgMHhhNjg2LCAweDAwMjAsIDB4MDA3OCwgMHgzNmVmLCAweGE2ODYsIDB4MDAyOCwgMHgwMDQwLAotCTB4MzZmYywgMHgwMDc4LCAweDM2NzcsIDB4ODZmZiwgMHgwMGMwLCAweDM2ZmEsIDB4NzEyMCwgMHg4MTBiLAotCTB4MDA3OCwgMHgyYjJjLCAweDcwMmYsIDB4MDAwMSwgMHg3MTFlLCAweDcwMjAsIDB4YTYwMCwgMHg3MDIyLAotCTB4NzcyYSwgMHgyMDYxLCAweGEzZDEsIDB4NjAwNywgMHgwMDAwLCAweDY2MTIsIDB4NzAyNCwgMHg2MDBlLAotCTB4NjIyNiwgMHg2MzJhLCAweDY0MmUsIDB4NjUzMiwgMHgyYzEwLCAweDEwNzgsIDB4MTNkMSwgMHg3MDA3LAotCTB4MDAwMiwgMHg3MDFiLCAweDM3MTQsIDB4MDA3YywgMHg3MDJjLCAweGEwMDUsIDB4MDBjMCwgMHgzNzI2LAotCTB4NzExYywgMHg3MDI0LCAweDIwYTAsIDB4NzcyOCwgMHgyMDMxLCAweDAwMDAsIDB4MjA2MSwgMHhhM2QxLAotCTB4NjIyNCwgMHg2MzI4LCAweDY0MmMsIDB4NjUzMCwgMHgwMDc4LCAweDM2NzcsIDB4NzEyMCwgMHg4MTBiLAotCTB4MDA3OCwgMHgyYjJjLCAweDIwMjksIDB4MDA3ZSwgMHg3OTI0LCAweDdhMjgsIDB4N2IyYywgMHg3YzM4LAotCTB4YTE4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDAwNDgsIDB4MmI1YSwgMHhhNTAyLAotCTB4MDA0OCwgMHgyYjVhLCAweGExODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MDA0OCwgMHgyYjVhLAotCTB4YTUwMiwgMHgwMDQ4LCAweDJiNWEsIDB4YTI4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwgMHgwMDIwLAotCTB4MDA0OCwgMHgyYjVhLCAweGE1MDIsIDB4MDA0OCwgMHgyYjVhLCAweGEyODQsIDB4MDBmZiwgMHhhMGUyLAotCTB4MDAyMCwgMHgwMDQ4LCAweDJiNWEsIDB4YTUwMiwgMHgwMDQ4LCAweDJiNWEsIDB4YTM4NCwgMHhmZjAwLAotCTB4ODAwNywgMHhhMGUyLCAweDAwMjAsIDB4MDA0OCwgMHgyYjVhLCAweGE1MDIsIDB4MDA0OCwgMHgyYjVhLAotCTB4YTM4NCwgMHgwMGZmLCAweGEwZTIsIDB4MDAyMCwgMHgwMDQ4LCAweDJiNWEsIDB4YTUwMiwgMHgwMDQ4LAotCTB4MmI1YSwgMHhhNDg0LCAweGZmMDAsIDB4ODAwNywgMHhhMGUyLCAweDAwMjAsIDB4MDA0OCwgMHgyYjVhLAotCTB4YTUwMiwgMHgwMDQ4LCAweDJiNWEsIDB4YTQ4NCwgMHgwMGZmLCAweGEwZTIsIDB4MDAyMCwgMHgwMDQ4LAotCTB4MmI1YSwgMHhhNTAyLCAweDAwNDgsIDB4MmI1YSwgMHgyMDYxLCAweGE1YTMsIDB4NjEwMiwgMHg2MjA2LAotCTB4NjMwYSwgMHg2NDBlLCAweDAwNzgsIDB4MmIyYywgMHgwMDdlLCAweDIwMDEsIDB4YTM1MiwgMHgyMDA0LAotCTB4ZDBjYywgMHgwMDdmLCAweDAwN2MsIDB4MDA3ZSwgMHgyMDAxLCAweGEzNzEsIDB4MjAwNCwgMHhkMGJjLAotCTB4MDA3ZiwgMHgwMDdjLCAweDYxNjAsIDB4N2EyNCwgMHg2MzAwLCAweDgyZmYsIDB4MDBjMCwgMHgzNzliLAotCTB4NzkyNiwgMHgwMDc4LCAweDJiMmMsIDB4ODNmZiwgMHgwMGMwLCAweDJiNWEsIDB4MjAwMSwgMHhmZmYwLAotCTB4YTIwMCwgMHgwMGM4LCAweDJiNWEsIDB4MjAxOSwgMHhmZmZmLCAweDYwNjQsIDB4YTMwMiwgMHhhMjAwLAotCTB4MDA0OCwgMHgyYjVhLCAweDc5MjYsIDB4NjI2MiwgMHgwMDc4LCAweDJiMmMsIDB4MjAwMSwgMHhhMzAwLAotCTB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHgyYjU2LCAweDdjMjgsIDB4N2QyNCwgMHg3ZTM4LAotCTB4N2YyYywgMHgxMDc4LCAweDM1MTgsIDB4MDA0MCwgMHgyYjU2LCAweDIwMDksIDB4MDAwMCwgMHgyMDE5LAotCTB4MDAwMCwgMHg3MDIzLCAweDAwMDAsIDB4NzAyZiwgMHgwMDAwLCAweGFkODAsIDB4MDAwMywgMHg3MDI2LAotCTB4MjBhMCwgMHhhMWUwLCAweGE0MzQsIDB4MmM2NCwgMHg4Y2ZmLCAweDAwNDAsIDB4MzdlOCwgMHg2MDA0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMDQwLCAweDM3ZGQsIDB4NjAwNCwgMHhhMDg0LAotCTB4ZmYwMCwgMHhhMDg2LCAweDA2MDAsIDB4MDBjMCwgMHgzN2U4LCAweDYwMTQsIDB4MjBhMiwgMHg5NGEwLAotCTB4NjAxMCwgMHg4MDA3LCAweGExMDUsIDB4ODAwNywgMHgyMGEyLCAweDk0YTAsIDB4YTM5OCwgMHgwMDAyLAotCTB4ODEwOCwgMHhhMTgyLCAweDAwZmYsIDB4MDA0MCwgMHgzN2YzLCAweGEzODYsIDB4MDAyYSwgMHgwMDQwLAotCTB4MzdmYywgMHgwMDc4LCAweDM3YzksIDB4ODNmZiwgMHgwMGMwLCAweDM3ZmEsIDB4NzEyMCwgMHg4MTBjLAotCTB4MDA3OCwgMHgyYjJjLCAweDcwMmYsIDB4MDAwMSwgMHg3MTFlLCAweDcwMjAsIDB4YTMwMCwgMHg3MDIyLAotCTB4MjA2MSwgMHhhM2QxLCAweDYwMDcsIDB4MDAwMCwgMHg2MzEyLCAweDcwMjQsIDB4NjAwZSwgMHg2NDI2LAotCTB4NjUyYSwgMHg2NjJlLCAweDY3MzIsIDB4MmMxMCwgMHgxMDc4LCAweDEzZDEsIDB4NzAwNywgMHgwMDAyLAotCTB4NzAxYiwgMHgzODEzLCAweDAwN2MsIDB4NzAyYywgMHhhMDA1LCAweDAwYzAsIDB4MzgyNCwgMHg3MTFjLAotCTB4NzAyNCwgMHgyMGEwLCAweDIwMTksIDB4MDAwMCwgMHgyMDYxLCAweGEzZDEsIDB4NjQyNCwgMHg2NTI4LAotCTB4NjYyYywgMHg2NzMwLCAweDAwNzgsIDB4MzdjOSwgMHg3MTIwLCAweDgxMGMsIDB4MDA3OCwgMHgyYjJjLAotCTB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4NjBjOCwgMHhkMDljLCAweDAwNDAsIDB4MmI1NiwgMHgxMDc4LAotCTB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4NzkyNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LAotCTB4MTA3OCwgMHgzNTYyLCAweDcwMWIsIDB4MzgzZCwgMHgwMDdjLCAweDBkN2UsIDB4YWRlOCwgMHgwMDBkLAotCTB4NjgyOCwgMHhhMGJlLCAweDcwMDAsIDB4MDA0MCwgMHgzODUwLCAweGEwYmUsIDB4NzEwMCwgMHgwMDQwLAotCTB4Mzg1MCwgMHhhMGJlLCAweDcyMDAsIDB4MDA0MCwgMHgzODUwLCAweDBkN2YsIDB4MDA3OCwgMHgyYjVhLAotCTB4NjgyMCwgMHg2OTI0LCAweDEwNzgsIDB4MjRlMywgMHgwMGMwLCAweDM4N2IsIDB4MTA3OCwgMHg0NDk5LAotCTB4MDBjMCwgMHgzODdiLCAweDcxMjIsIDB4NjYxMiwgMHg2NTE2LCAweDZlMTgsIDB4MGM3ZSwgMHgxMDc4LAotCTB4MzUxOCwgMHgwMDQwLCAweDM4N2IsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4Mzg3YiwgMHgwYzdmLAotCTB4MGQ3ZiwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NjgyMywgMHgwMDAwLAotCTB4NjgwNCwgMHgyMDY4LCAweDEwNzgsIDB4OGJiZCwgMHgwMDQwLCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLAotCTB4NzAxYiwgMHgzODdlLCAweDAwN2MsIDB4MGQ3ZiwgMHgwMDc4LCAweDJiNTYsIDB4NzEyMCwgMHgxMDc4LAotCTB4MjkyMSwgMHg2ODIwLCAweGEwODYsIDB4ODAwMSwgMHgwMDQwLCAweDJiNTYsIDB4MmQwMCwgMHg3MDFlLAotCTB4NjgwNCwgMHhhMDgwLCAweDAwMDIsIDB4MDA3ZSwgMHgyMGE5LCAweDAwMmEsIDB4MjA5OCwgMHgyMGEwLAotCTB4MTA3OCwgMHg0MWJlLCAweDAwN2YsIDB4YWRlOCwgMHgwMDBkLCAweDZhMDgsIDB4NmIwYywgMHg2YzEwLAotCTB4NmQxNCwgMHgyMDYxLCAweGEzZDEsIDB4NjAwNywgMHgwMDAwLCAweDZlMDAsIDB4NmYyOCwgMHhhN2M2LAotCTB4NzAwMCwgMHgwMGMwLCAweDM4YTUsIDB4MDA3OCwgMHgzOGE5LCAweGE3YzYsIDB4NzEwMCwgMHgwMGMwLAotCTB4MzhiMSwgMHhhNmMyLCAweDAwMDQsIDB4MDA0OCwgMHgyYjVhLCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LAotCTB4MzU2NiwgMHhhN2M2LCAweDcyMDAsIDB4MDBjMCwgMHgyYjVhLCAweGE2YzIsIDB4MDA1NCwgMHgwMDQ4LAotCTB4MmI1YSwgMHg2MDBlLCAweDYwMTMsIDB4MDAyYSwgMHg2MjI2LCAweDYzMmEsIDB4NjQyZSwgMHg2NTMyLAotCTB4MmMxMCwgMHgxMDc4LCAweDEzZDEsIDB4NzAwNywgMHgwMDAyLCAweDcwMWIsIDB4MzhjOCwgMHgwMDdjLAotCTB4NzAxYywgMHgyMDY4LCAweDY4MDQsIDB4YTA4MCwgMHgwMDAxLCAweDIwMDQsIDB4YTA4MCwgMHgwMDAyLAotCTB4MDA3ZSwgMHgyMGE5LCAweDAwMmEsIDB4MjA5OCwgMHgyMGEwLCAweDEwNzgsIDB4NDFiZSwgMHgwMDdmLAotCTB4MjAwOSwgMHgwMDJhLCAweDIwNjEsIDB4YTNkMSwgMHg2MjI0LCAweDYzMjgsIDB4NjQyYywgMHg2NTMwLAotCTB4MDA3OCwgMHgzNTY2LCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzUzMCwgMHgwMDQwLAotCTB4MmI1YSwgMHgxMDc4LCAweDQ1YTcsIDB4MDA0MCwgMHgyYjU2LCAweDEwNzgsIDB4NDcxMCwgMHgwMDc4LAotCTB4MmIyYywgMHg3ODI0LCAweGQwODQsIDB4MDA0MCwgMHgzMTUwLCAweDEwNzgsIDB4MzU0MiwgMHgwMDQwLAotCTB4MmI1YSwgMHgwYzdlLCAweDEwNzgsIDB4MzUxOCwgMHgwYzdmLCAweDAwYzAsIDB4MzkwMywgMHgyMDA5LAotCTB4MDAwMiwgMHgwMDc4LCAweDJiNTYsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LAotCTB4MDA0MCwgMHgzOTEwLCAweGEwOGUsIDB4MDAwNCwgMHgwMDQwLCAweDM5MTAsIDB4YTA4ZSwgMHgwMDA1LAotCTB4MDBjMCwgMHgzOTM0LCAweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYjQsIDB4MDA0MCwgMHgzMTg1LAotCTB4NjAwMCwgMHhkMDhjLCAweDAwYzAsIDB4MzE4NSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLAotCTB4NjgzYSwgMHgxMDc4LCAweDhiZDksIDB4MDBjMCwgMHgzOTI5LCAweDIwMDksIDB4MDAwMywgMHgwMDc4LAotCTB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzOTJlLCAweDAwN2MsIDB4MTA3OCwgMHgzNTQyLAotCTB4MDA0MCwgMHgyYjVhLCAweDAwNzgsIDB4MzE4NSwgMHgyMDA5LCAweGEzMmUsIDB4MjEwYywgMHg4MWZmLAotCTB4MDA0MCwgMHgzOTNlLCAweDIwMDksIDB4MDAwMSwgMHgwMDc4LCAweDJiNTYsIDB4MjAwMSwgMHhhMzAwLAotCTB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MDA0MCwgMHgzOTQ5LCAweDIwMDksIDB4MDAwNywgMHgwMDc4LAotCTB4MmI1NiwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGFjLCAweDAwNDAsIDB4Mzk1MywgMHgyMDA5LAotCTB4MDAwOCwgMHgwMDc4LCAweDJiNTYsIDB4NjA5YywgMHhkMGE0LCAweDAwYzAsIDB4Mzk1YSwgMHhkMGFjLAotCTB4MDBjMCwgMHgzMTg1LCAweDY4MzcsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLAotCTB4NjgzYSwgMHgxMDc4LCAweDhjNGQsIDB4MDBjMCwgMHgzOTY5LCAweDIwMDksIDB4MDAwMywgMHgwMDc4LAotCTB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzOTZlLCAweDAwN2MsIDB4NjgzMCwgMHhhMDg2LAotCTB4MDEwMCwgMHgwMGMwLCAweDM5NzcsIDB4MjAwOSwgMHgwMDA0LCAweDAwNzgsIDB4MmI1NiwgMHgxMDc4LAotCTB4MzU0MiwgMHgwMDQwLCAweDJiNWEsIDB4MDA3OCwgMHgzOTEyLCAweDgxZmYsIDB4MjAwOSwgMHgwMDAxLAotCTB4MDBjMCwgMHgyYjU2LCAweDYwMDAsIDB4YTA4NiwgMHgwMDAzLCAweDIwMDksIDB4MDAwNywgMHgwMGMwLAotCTB4MmI1NiwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGFjLCAweDIwMDksIDB4MDAwOCwgMHgwMGMwLAotCTB4MmI1NiwgMHgxMDc4LCAweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4NiwgMHgwMDA2LCAweDIwMDksIDB4MDAwOSwgMHgwMGMwLCAweDJiNTYsIDB4MGM3ZSwgMHgxMDc4LAotCTB4MzUxOCwgMHgwYzdmLCAweDIwMDksIDB4MDAwMiwgMHgwMDQwLCAweDJiNTYsIDB4NjgzNywgMHgwMDAwLAotCTB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDc5MjgsIDB4YTE5NCwgMHhmZjAwLAotCTB4YTE4YywgMHgwMGZmLCAweGEwMDYsIDB4ODJmZiwgMHgwMGMwLCAweDM5YmMsIDB4YzBlZCwgMHg2OTUyLAotCTB4NzkyYywgMHg2OTU2LCAweDAwNzgsIDB4MzljNSwgMHhhMjhlLCAweDAxMDAsIDB4MDBjMCwgMHgyYjVhLAotCTB4YzBlNSwgMHg2ODUzLCAweDAwMDAsIDB4Njg1NywgMHgwMDAwLCAweDY4M2UsIDB4MTA3OCwgMHg4ZGY2LAotCTB4MjAwOSwgMHgwMDAzLCAweDAwNDAsIDB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzOWQxLAotCTB4MDA3YywgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgyMDA5LCAweDAwMDQsIDB4MDA0MCwgMHgyYjU2LAotCTB4MDA3OCwgMHgyYjJjLCAweDgxZmYsIDB4MjAwOSwgMHgwMDAxLCAweDAwYzAsIDB4MmI1NiwgMHg2MDAwLAotCTB4YTA4NiwgMHgwMDAzLCAweDIwMDksIDB4MDAwNywgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwgMHgzNTQyLAotCTB4MDA0MCwgMHgyYjVhLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgyMDA5LAotCTB4MDAwOSwgMHgwMGMwLCAweDJiNTYsIDB4MGM3ZSwgMHgxMDc4LCAweDM1MTgsIDB4MGM3ZiwgMHgyMDA5LAotCTB4MDAwMiwgMHgwMDQwLCAweDJiNTYsIDB4YWQ4MCwgMHgwMDBmLCAweDIwMDksIDB4MDAwOCwgMHg3YTJjLAotCTB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MTA3OCwgMHgzNTYyLCAweDcwMWIsIDB4M2EwOCwgMHgwMDdjLAotCTB4MGQ3ZSwgMHhhZGU4LCAweDAwMGYsIDB4NjgwMCwgMHhhMDg2LCAweDA1MDAsIDB4MDBjMCwgMHgzYTFiLAotCTB4NjgwNCwgMHhhMDA1LCAweDAwYzAsIDB4M2ExYiwgMHg2ODA4LCAweGEwODQsIDB4ZmYwMCwgMHgwMGMwLAotCTB4M2ExYiwgMHgwMDc4LCAweDNhMWUsIDB4MGQ3ZiwgMHgwMGMwLCAweDJiNWEsIDB4MGQ3ZiwgMHg2ODM3LAotCTB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MGM3ZSwgMHgxMDc4LAotCTB4MzU0MiwgMHgwMGMwLCAweDNhMmUsIDB4MGM3ZiwgMHgwMDc4LCAweDJiNWEsIDB4MTA3OCwgMHg4ZTUyLAotCTB4MjAwOSwgMHgwMDAzLCAweDBjN2YsIDB4MDA0MCwgMHgyYjU2LCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLAotCTB4M2EzYSwgMHgwMDdjLCAweDY4MzAsIDB4YTA4NiwgMHgwMTAwLCAweDIwMDksIDB4MDAwNCwgMHgwMDQwLAotCTB4MmI1NiwgMHgwMDc4LCAweDJiMmMsIDB4MTI3ZSwgMHgwYzdlLCAweDBlN2UsIDB4MjA2MSwgMHgwMTAwLAotCTB4MjA3MSwgMHhhMzAwLCAweDYwNDQsIDB4ZDBhNCwgMHgwMGMwLCAweDNhNmMsIDB4ZDA4NCwgMHgwMDQwLAotCTB4M2E1NSwgMHgxMDc4LCAweDNiY2MsIDB4MDA3OCwgMHgzYTY4LCAweGQwOGMsIDB4MDA0MCwgMHgzYTVjLAotCTB4MTA3OCwgMHgzYWUzLCAweDAwNzgsIDB4M2E2OCwgMHhkMDk0LCAweDAwNDAsIDB4M2E2MywgMHgxMDc4LAotCTB4M2FiNywgMHgwMDc4LCAweDNhNjgsIDB4ZDA5YywgMHgwMDQwLCAweDNhNjgsIDB4MTA3OCwgMHgzYTc2LAotCTB4MGU3ZiwgMHgwYzdmLCAweDEyN2YsIDB4MDA3YywgMHgwMTdlLCAweDYxMjgsIDB4ZDE5YywgMHgwMGMwLAotCTB4M2E3MywgMHhjMTlkLCAweDYxMmEsIDB4MDE3ZiwgMHgwMDc4LCAweDNhNjgsIDB4NjI0YywgMHhhMjg2LAotCTB4ZjBmMCwgMHgwMGMwLCAweDNhODcsIDB4NjA0OCwgMHhhMDg2LCAweGYwZjAsIDB4MDA0MCwgMHgzYTg3LAotCTB4NjI0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDAwNzgsIDB4M2FiNiwgMHhhMjk0LAotCTB4ZmYwMCwgMHhhMjk2LCAweGY3MDAsIDB4MDA0MCwgMHgzYTljLCAweDcxMzQsIDB4ZDFhNCwgMHgwMGMwLAotCTB4M2E5YywgMHg2MjQwLCAweGEyOTQsIDB4MDAxMCwgMHgwMDQwLCAweDNhOWMsIDB4MjAwOSwgMHgwMGY3LAotCTB4MTA3OCwgMHg0MWRlLCAweDAwNzgsIDB4M2FiNiwgMHg2MDQzLCAweDAwNDAsIDB4NjA0MywgMHgwMDAwLAotCTB4NzA3MywgMHgwMDAwLCAweDcwOGIsIDB4MDAwMSwgMHg3MGFmLCAweDAwMDAsIDB4NzBjYiwgMHgwMDAwLAotCTB4MjAwOSwgMHhhOWMwLCAweDIwMGIsIDB4MDAwMCwgMHg3MDgzLCAweDAwMDAsIDB4NzA3NywgMHgwMDBmLAotCTB4MjAwOSwgMHgwMDBmLCAweDIwMTEsIDB4NDEyMiwgMHgxMDc4LCAweDU5NmMsIDB4MDA3YywgMHgxNTdlLAotCTB4NzA3NCwgMHhhMDA1LCAweDAwYzAsIDB4M2FlMSwgMHgyMDExLCAweDQxMjIsIDB4MTA3OCwgMHg1OGQ0LAotCTB4NjA0MCwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDIwLCAweDYwNDIsIDB4MjBhOSwgMHgwMGM4LAotCTB4NjA0NCwgMHhkMDhjLCAweDAwYzAsIDB4M2FkYSwgMHgwMGYwLCAweDNhYzgsIDB4NjI0MiwgMHg3MDg3LAotCTB4MDAwMCwgMHg2MDQwLCAweGEwOTQsIDB4MDAxMCwgMHhhMjg1LCAweDAwODAsIDB4NjA0MiwgMHg2MjQyLAotCTB4MDA3OCwgMHgzYWUxLCAweDYyNDIsIDB4NzA4NywgMHgwMDAwLCAweDcwN2IsIDB4MDAwMCwgMHgwMDc4LAotCTB4M2FlMSwgMHgxNTdmLCAweDAwN2MsIDB4NzA3OCwgMHhhMDhhLCAweDAwMDMsIDB4MDBjOCwgMHgzYWVjLAotCTB4MTA3OSwgMHgzYWVmLCAweDAwNzgsIDB4M2FlZSwgMHgxMDc4LCAweDEzMjgsIDB4MDA3YywgMHgzYWYyLAotCTB4M2I0MSwgMHgzYmNiLCAweDBmN2UsIDB4NzA3YiwgMHgwMDAxLCAweDIwZTEsIDB4YTAwMCwgMHgyMGUxLAotCTB4ODcwMCwgMHgxMDc4LCAweDIxOGIsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgyMDc5LAotCTB4YTgwMCwgMHgyMDdiLCAweDIyMDAsIDB4NzgwNywgMHgwMGVmLCAweDc4MGIsIDB4MDAwMCwgMHg3ODBmLAotCTB4MDBlZiwgMHg3ODEzLCAweDAxMzgsIDB4NzgxNywgMHgwMDAwLCAweDc4MWIsIDB4MDAwMCwgMHg3ODFmLAotCTB4MDAwMCwgMHg3ODIzLCAweGZmZmYsIDB4NzgyNywgMHhmZmZmLCAweDc4MmIsIDB4MDAwMCwgMHg3ODJmLAotCTB4MDAwMCwgMHgyMDc5LCAweGE4MGMsIDB4MjA3YiwgMHgxMTAxLCAweDc4MDcsIDB4MDAwMCwgMHgyMDk5LAotCTB4YTMwNSwgMHgyMGExLCAweGE4MGUsIDB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MjA3OSwgMHhhODEyLAotCTB4MjA3YiwgMHgwMDAwLCAweDc4MDcsIDB4MDAwMCwgMHgyMDk5LCAweGE4MDAsIDB4MjBhMSwgMHgwMjBiLAotCTB4MjBhOSwgMHgwMDE0LCAweDUzYTYsIDB4NjBjMywgMHgwMDBjLCAweDYwMGYsIDB4MDAwMCwgMHgxMDc4LAotCTB4NDE1OCwgMHgwZjdmLCAweDcwN2YsIDB4MDAwMCwgMHg2MDQzLCAweDAwMDgsIDB4NjA0MywgMHgwMDAwLAotCTB4MDA3YywgMHgwZDdlLCAweDcwN2MsIDB4NzA3ZiwgMHgwMDAwLCAweGEwMjUsIDB4MDA0MCwgMHgzYmI1LAotCTB4NjAyMCwgMHhkMGI0LCAweDAwYzAsIDB4M2JiMywgMHg3MTg4LCAweDgxZmYsIDB4MDA0MCwgMHgzYmEyLAotCTB4YTQ4NiwgMHgwMDBjLCAweDAwYzAsIDB4M2JhZCwgMHhhNDgwLCAweDAwMTgsIDB4ODAwNCwgMHgyMGE4LAotCTB4MjAxMSwgMHhhODgwLCAweDIwMTksIDB4YTgwMCwgMHgyMjBjLCAweDIzMDQsIDB4YTEwNiwgMHgwMGMwLAotCTB4M2I3OSwgMHg4MjEwLCAweDgzMTgsIDB4MDBmMCwgMHgzYjVjLCAweDYwNDMsIDB4MDAwNCwgMHg2MDhiLAotCTB4YmM5NCwgMHg2MDhmLCAweGYwZjAsIDB4NjA0MywgMHgwMDA2LCAweDcwN2IsIDB4MDAwMiwgMHg3MDg3LAotCTB4MDAwMiwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NTk2YywgMHgwMDc4LAotCTB4M2JiMywgMHgyMDY5LCAweGE4ODAsIDB4NjkzMCwgMHhhMThlLCAweDExMDEsIDB4MDBjMCwgMHgzYmFkLAotCTB4NjgzNCwgMHhhMDA1LCAweDAwYzAsIDB4M2JhZCwgMHg2OTAwLCAweGExOGMsIDB4MDBmZiwgMHgwMGMwLAotCTB4M2I4ZCwgMHg2ODA0LCAweGEwMDUsIDB4MDA0MCwgMHgzYmEyLCAweDIwMTEsIDB4YTg4ZSwgMHgyMDE5LAotCTB4YTMwNSwgMHgyMGE5LCAweDAwMDQsIDB4MjIwYywgMHgyMzA0LCAweGExMDIsIDB4MDA0OCwgMHgzYmEwLAotCTB4MDBjMCwgMHgzYmFkLCAweDgyMTAsIDB4ODMxOCwgMHgwMGYwLCAweDNiOTMsIDB4MDA3OCwgMHgzYmFkLAotCTB4NzA4YiwgMHgwMDAwLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwgMHhhODgwLAotCTB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAxNCwgMHg1M2E2LCAweDYwNDMsIDB4MDAwOCwgMHg2MDQzLAotCTB4MDAwMCwgMHgwMDc4LCAweDNiYjUsIDB4MGQ3ZiwgMHgwMDdjLCAweDYwMjAsIDB4ZDBiNCwgMHgwMGMwLAotCTB4M2JiMywgMHg2MGMzLCAweDAwMGMsIDB4MjAxMSwgMHhhNWI1LCAweDIwMTMsIDB4MDAwMCwgMHg3MDdmLAotCTB4MDAwMCwgMHgyMGUxLCAweDkwODAsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgxMDc4LAotCTB4NmMzOCwgMHgwMDc4LCAweDNiYjMsIDB4MDA3YywgMHg3MDg0LCAweGEwOGEsIDB4MDAxZCwgMHgwMGM4LAotCTB4M2JkNSwgMHgxMDc5LCAweDNiZDgsIDB4MDA3OCwgMHgzYmQ3LCAweDEwNzgsIDB4MTMyOCwgMHgwMDdjLAotCTB4M2MwMiwgMHgzYzExLCAweDNjNDAsIDB4M2M1OSwgMHgzYzg1LCAweDNjYjEsIDB4M2NkZCwgMHgzZDEzLAotCTB4M2QzZiwgMHgzZDY3LCAweDNkYWEsIDB4M2RkNCwgMHgzZGY2LCAweDNlMGMsIDB4M2UzMiwgMHgzZTQ1LAotCTB4M2U0ZSwgMHgzZTdlLCAweDNlYWEsIDB4M2VkNiwgMHgzZjAyLCAweDNmMzgsIDB4M2Y3ZCwgMHgzZmFjLAotCTB4M2ZjZSwgMHg0MDEwLCAweDQwMzYsIDB4NDA0ZiwgMHg0MDUwLCAweDBjN2UsIDB4MjA2MSwgMHhhMzAwLAotCTB4NjAwMywgMHgwMDA3LCAweDIwNjEsIDB4MDEwMCwgMHg2MDA0LCAweGEwODQsIDB4ZmZmOSwgMHg2MDA2LAotCTB4MGM3ZiwgMHgwMDdjLCAweDYwOGIsIDB4YmM5NCwgMHg2MDhmLCAweGYwZjAsIDB4NjA0MywgMHgwMDAyLAotCTB4NzA4NywgMHgwMDAxLCAweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OTZjLAotCTB4MDA3YywgMHgwZjdlLCAweDcwN2MsIDB4YTA4NiwgMHgwMDE0LCAweDAwYzAsIDB4M2MzZSwgMHg2MDQzLAotCTB4MDAwMCwgMHg2MDIwLCAweGQwYjQsIDB4MDBjMCwgMHgzYzNlLCAweDIwNzksIDB4YTg4MCwgMHg3YTMwLAotCTB4YTI5NiwgMHgxMTAyLCAweDAwYzAsIDB4M2MzYywgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwgMHgzYzNjLAotCTB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2MzMiwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwgMHgzYzMyLAotCTB4NzBhZiwgMHgwMDAxLCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4NzA4NywgMHgwMDEwLAotCTB4MTA3OCwgMHgzZTRlLCAweDAwNzgsIDB4M2MzZSwgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLAotCTB4NzA4NywgMHgwMDAzLCAweDYwNDMsIDB4MDAwNCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LAotCTB4MTA3OCwgMHg0MWM2LCAweDIwYTMsIDB4MTEwMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhOSwgMHgwMDBhLAotCTB4MjBhMywgMHgwMDAwLCAweDAwZjAsIDB4M2M1MCwgMHg2MGMzLCAweDAwMTQsIDB4MTA3OCwgMHg0MTU4LAotCTB4MDA3YywgMHgwZjdlLCAweDcwN2MsIDB4YTAwNSwgMHgwMDQwLCAweDNjODMsIDB4MjAxMSwgMHg0MTI5LAotCTB4MTA3OCwgMHg1OGQ0LCAweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDNjODEsIDB4MjA3OSwgMHhhODgwLAotCTB4N2EzMCwgMHhhMjk2LCAweDExMDIsIDB4MDBjMCwgMHgzYzgxLCAweDc4MzQsIDB4YTAwNSwgMHgwMGMwLAotCTB4M2M4MSwgMHg3YTM4LCAweGQyZmMsIDB4MDA0MCwgMHgzYzdiLCAweDcwYWMsIDB4YTAwNSwgMHgwMGMwLAotCTB4M2M3YiwgMHg3MGFmLCAweDAwMDEsIDB4NzA4NywgMHgwMDA0LCAweDEwNzgsIDB4M2M4NSwgMHgwMDc4LAotCTB4M2M4MywgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAwNSwgMHgxMDc4LAotCTB4NDFjNiwgMHgyMGEzLCAweDExMDMsIDB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjAxMSwgMHhhODhlLAotCTB4MTA3OCwgMHg0MjExLCAweDAwYzAsIDB4M2NhMywgMHg3MDcwLCAweGEwMDUsIDB4MDBjMCwgMHgzY2EzLAotCTB4NzE0YywgMHhhMTg2LCAweGZmZmYsIDB4MDA0MCwgMHgzY2EzLCAweDEwNzgsIDB4NDBlYSwgMHgwMDQwLAotCTB4M2NhMywgMHgxMDc4LCAweDQxZjUsIDB4MjBhOSwgMHgwMDA4LCAweDIyOTgsIDB4MjZhMCwgMHg1M2E2LAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MTA3OCwgMHg0MTU4LAotCTB4MDA3YywgMHgwZjdlLCAweDcwN2MsIDB4YTAwNSwgMHgwMDQwLCAweDNjZGIsIDB4MjAxMSwgMHg0MTI5LAotCTB4MTA3OCwgMHg1OGQ0LCAweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDNjZDksIDB4MjA3OSwgMHhhODgwLAotCTB4N2EzMCwgMHhhMjk2LCAweDExMDMsIDB4MDBjMCwgMHgzY2Q5LCAweDc4MzQsIDB4YTAwNSwgMHgwMGMwLAotCTB4M2NkOSwgMHg3YTM4LCAweGQyZmMsIDB4MDA0MCwgMHgzY2QzLCAweDcwYWMsIDB4YTAwNSwgMHgwMGMwLAotCTB4M2NkMywgMHg3MGFmLCAweDAwMDEsIDB4NzA4NywgMHgwMDA2LCAweDEwNzgsIDB4M2NkZCwgMHgwMDc4LAotCTB4M2NkYiwgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAwNywgMHgxMDc4LAotCTB4NDFjNiwgMHgyMGEzLCAweDExMDQsIDB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjAxMSwgMHhhODhlLAotCTB4MTA3OCwgMHg0MjExLCAweDAwYzAsIDB4M2QwNSwgMHg3MDcwLCAweGEwMDUsIDB4MDBjMCwgMHgzZDA1LAotCTB4NzE1MCwgMHhhMTg2LCAweGZmZmYsIDB4MDA0MCwgMHgzZDA1LCAweGExODAsIDB4MjkzZiwgMHgyMDBjLAotCTB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4MTA3OCwgMHg0MGVhLCAweDAwNDAsIDB4M2QwNSwgMHgxMDc4LAotCTB4Mzc4YiwgMHgwMDQwLCAweDNkMDUsIDB4MTA3OCwgMHgyNTAwLCAweDIwYTksIDB4MDAwOCwgMHgyMjk4LAotCTB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LAotCTB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwgMHgzZDNkLAotCTB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwgMHgzZDNiLAotCTB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA0LCAweDAwYzAsIDB4M2QzYiwgMHg3ODM0LAotCTB4YTAwNSwgMHgwMGMwLCAweDNkM2IsIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2QzNSwgMHg3MGFjLAotCTB4YTAwNSwgMHgwMGMwLCAweDNkMzUsIDB4NzBhZiwgMHgwMDAxLCAweDcwODcsIDB4MDAwOCwgMHgxMDc4LAotCTB4M2QzZiwgMHgwMDc4LCAweDNkM2QsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywgMHg3MDg3LAotCTB4MDAwOSwgMHgxMDc4LCAweDQxYzYsIDB4MjBhMywgMHgxMTA1LCAweDIwYTMsIDB4MDEwMCwgMHgzNDMwLAotCTB4MTA3OCwgMHg0MjExLCAweDAwYzAsIDB4M2Q1OCwgMHg3MDcwLCAweGEwMDUsIDB4MDBjMCwgMHgzZDU4LAotCTB4MTA3OCwgMHg0MDUxLCAweDAwYzAsIDB4M2Q2MiwgMHhhMDg1LCAweDAwMDEsIDB4MTA3OCwgMHgyNTAwLAotCTB4MjBhOSwgMHgwMDA4LCAweDIwOTksIDB4YTg4ZSwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywgMHgwZjdlLAotCTB4NzA3YywgMHhhMDA1LCAweDAwNDAsIDB4M2RhOCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LAotCTB4YTA4NiwgMHgwMDE0LCAweDAwYzAsIDB4M2RhNiwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwgMHhhMjk2LAotCTB4MTEwNSwgMHgwMGMwLCAweDNkYTYsIDB4NzgzNCwgMHgyMDExLCAweDAxMDAsIDB4YTIxZSwgMHgwMGMwLAotCTB4M2Q5MSwgMHg3YTM4LCAweGQyZmMsIDB4MDA0MCwgMHgzZDhiLCAweDcwYWMsIDB4YTAwNSwgMHgwMGMwLAotCTB4M2Q4YiwgMHg3MGFmLCAweDAwMDEsIDB4NzA4NywgMHgwMDBhLCAweDEwNzgsIDB4M2RhYSwgMHgwMDc4LAotCTB4M2RhOCwgMHhhMDA1LCAweDAwYzAsIDB4M2RhNiwgMHg3YTM4LCAweGQyZmMsIDB4MDA0MCwgMHgzZDllLAotCTB4NzBhYywgMHhhMDA1LCAweDAwYzAsIDB4M2Q5ZSwgMHg3MGFmLCAweDAwMDEsIDB4NzA4MywgMHgwMDAwLAotCTB4NzA4NywgMHgwMDBlLCAweDEwNzgsIDB4M2UzMiwgMHgwMDc4LCAweDNkYTgsIDB4MTA3OCwgMHg0MTcxLAotCTB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAwYiwgMHgyMDExLCAweGE4MGUsIDB4MjJhMCwgMHgyMGE5LAotCTB4MDA0MCwgMHgyMDE5LCAweGZmZmYsIDB4NDNhNCwgMHgyMGE5LCAweDAwMDIsIDB4MjAwOSwgMHgwMDAwLAotCTB4NDFhNCwgMHgxMDc4LCAweDQxYzYsIDB4MjBhMywgMHgxMTA2LCAweDIwYTMsIDB4MDAwMCwgMHgxMDc4LAotCTB4NDIxMSwgMHgwMDQwLCAweDNkYzcsIDB4MjAxMywgMHgwMDAwLCAweDAwNzgsIDB4M2RjYiwgMHg2MDMwLAotCTB4YTA4NSwgMHgwMTAwLCAweDIwMTIsIDB4MjI5OCwgMHgyMGE5LCAweDAwNDIsIDB4NTNhNiwgMHg2MGMzLAotCTB4MDA4NCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywgMHgwZjdlLCAweDcwN2MsIDB4YTAwNSwgMHgwMDQwLAotCTB4M2RmNCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LCAweGEwODYsIDB4MDA4NCwgMHgwMGMwLAotCTB4M2RmMiwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDYsIDB4MDBjMCwgMHgzZGYyLAotCTB4NzgzNCwgMHhhMDA1LCAweDAwYzAsIDB4M2RmMiwgMHg3MDg3LCAweDAwMGMsIDB4MTA3OCwgMHgzZGY2LAotCTB4MDA3OCwgMHgzZGY0LCAweDEwNzgsIDB4NDE3MSwgMHgwZjdmLCAweDAwN2MsIDB4NzA4NywgMHgwMDBkLAotCTB4MTA3OCwgMHg0MWM2LCAweDIwYTMsIDB4MTEwNywgMHgyMGEzLCAweDAwMDAsIDB4MjA5OSwgMHhhODhlLAotCTB4MjBhOSwgMHgwMDQwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLAotCTB4MDA4NCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywgMHgwZjdlLCAweDcwN2MsIDB4YTAwNSwgMHgwMDQwLAotCTB4M2UzMCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LCAweGEwODYsIDB4MDA4NCwgMHgwMGMwLAotCTB4M2UyZSwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDcsIDB4MDBjMCwgMHgzZTJlLAotCTB4NzgzNCwgMHhhMDA1LCAweDAwYzAsIDB4M2UyZSwgMHg3MDgzLCAweDAwMDEsIDB4MTA3OCwgMHg0MWI4LAotCTB4NzA4NywgMHgwMDBlLCAweDEwNzgsIDB4M2UzMiwgMHgwMDc4LCAweDNlMzAsIDB4MTA3OCwgMHg0MTcxLAotCTB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAwZiwgMHg3MDdmLCAweDAwMDAsIDB4NjA4YiwgMHhiYzg1LAotCTB4NjA4ZiwgMHhiNWI1LCAweDYwNDMsIDB4MDAwNSwgMHg2MDQzLCAweDAwMDQsIDB4MjAwOSwgMHgwN2QwLAotCTB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThjNywgMHgwMDdjLCAweDcwN2MsIDB4YTAwNSwgMHgwMDQwLAotCTB4M2U0ZCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LCAweDAwN2MsIDB4NzA4NywgMHgwMDExLAotCTB4MTA3OCwgMHg0MjExLCAweDAwYzAsIDB4M2U2NywgMHg3MTY4LCAweDgxZmYsIDB4MDA0MCwgMHgzZTY3LAotCTB4MjAwOSwgMHgwMDAwLCAweDcwNmMsIDB4YTA4NCwgMHgwMGZmLCAweDEwNzgsIDB4MjRlMywgMHhhMTg2LAotCTB4MDA4MCwgMHgwMDQwLCAweDNlNjcsIDB4MjAxMSwgMHhhODhlLCAweDEwNzgsIDB4NDBlYSwgMHgyMGUxLAotCTB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwgMHhhODgwLCAweDIwYTEsIDB4MDIwYiwgMHg3NDdjLAotCTB4YTQ4MCwgMHgwMDE4LCAweGEwODAsIDB4MDAwNywgMHhhMDg0LCAweDAzZjgsIDB4ODAwNCwgMHgyMGE4LAotCTB4NTNhNiwgMHg2MGMzLCAweDAwMTQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLAotCTB4YTAwNSwgMHgwMDQwLCAweDNlYTgsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LAotCTB4MDAxNCwgMHgwMGMwLCAweDNlYTYsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTAzLAotCTB4MDBjMCwgMHgzZWE2LCAweDc4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNlYTYsIDB4N2EzOCwgMHhkMmZjLAotCTB4MDA0MCwgMHgzZWEwLCAweDcwYWMsIDB4YTAwNSwgMHgwMGMwLCAweDNlYTAsIDB4NzBhZiwgMHgwMDAxLAotCTB4NzA4NywgMHgwMDEyLCAweDEwNzgsIDB4M2VhYSwgMHgwMDc4LCAweDNlYTgsIDB4MTA3OCwgMHg0MTcxLAotCTB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAxMywgMHgxMDc4LCAweDQxZDIsIDB4MjBhMywgMHgxMTAzLAotCTB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjAxMSwgMHhhODhlLCAweDEwNzgsIDB4NDIxMSwgMHgwMGMwLAotCTB4M2VjOCwgMHg3MDcwLCAweGEwMDUsIDB4MDBjMCwgMHgzZWM4LCAweDcxNGMsIDB4YTE4NiwgMHhmZmZmLAotCTB4MDA0MCwgMHgzZWM4LCAweDEwNzgsIDB4NDBlYSwgMHgwMDQwLCAweDNlYzgsIDB4MTA3OCwgMHg0MWY1LAotCTB4MjBhOSwgMHgwMDA4LCAweDIyOTgsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLAotCTB4YTAwNSwgMHgwMDQwLCAweDNmMDAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LAotCTB4MDAxNCwgMHgwMGMwLCAweDNlZmUsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA0LAotCTB4MDBjMCwgMHgzZWZlLCAweDc4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNlZmUsIDB4N2EzOCwgMHhkMmZjLAotCTB4MDA0MCwgMHgzZWY4LCAweDcwYWMsIDB4YTAwNSwgMHgwMGMwLCAweDNlZjgsIDB4NzBhZiwgMHgwMDAxLAotCTB4NzA4NywgMHgwMDE0LCAweDEwNzgsIDB4M2YwMiwgMHgwMDc4LCAweDNmMDAsIDB4MTA3OCwgMHg0MTcxLAotCTB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAxNSwgMHgxMDc4LCAweDQxZDIsIDB4MjBhMywgMHgxMTA0LAotCTB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjAxMSwgMHhhODhlLCAweDEwNzgsIDB4NDIxMSwgMHgwMGMwLAotCTB4M2YyYSwgMHg3MDcwLCAweGEwMDUsIDB4MDBjMCwgMHgzZjJhLCAweDcxNTAsIDB4YTE4NiwgMHhmZmZmLAotCTB4MDA0MCwgMHgzZjJhLCAweGExODAsIDB4MjkzZiwgMHgyMDBjLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4MTA3OCwgMHg0MGVhLCAweDAwNDAsIDB4M2YyYSwgMHgxMDc4LCAweDM3OGIsIDB4MDA0MCwgMHgzZjJhLAotCTB4MTA3OCwgMHgyNTAwLCAweDIwYTksIDB4MDAwOCwgMHgyMjk4LCAweDI2YTAsIDB4NTNhNiwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwgMHgwMDdjLAotCTB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwgMHgzZjdiLCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LAotCTB4NThkNCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwgMHgzZjc5LCAweDIwNzksIDB4YTg4MCwgMHg3YTMwLAotCTB4YTI5NiwgMHgxMTA1LCAweDAwYzAsIDB4M2Y3OSwgMHg3ODM0LCAweDIwMTEsIDB4MDEwMCwgMHhhMjFlLAotCTB4MDBjMCwgMHgzZjVlLCAweDdhMzgsIDB4ZDJmYywgMHgwMDQwLCAweDNmNWMsIDB4NzBhYywgMHhhMDA1LAotCTB4MDBjMCwgMHgzZjVjLCAweDcwYWYsIDB4MDAwMSwgMHgwMDc4LCAweDNmNmQsIDB4YTAwNSwgMHgwMGMwLAotCTB4M2Y3OSwgMHg3YTM4LCAweGQyZmMsIDB4MDA0MCwgMHgzZjZiLCAweDcwYWMsIDB4YTAwNSwgMHgwMGMwLAotCTB4M2Y2YiwgMHg3MGFmLCAweDAwMDEsIDB4NzA4MywgMHgwMDAwLCAweDdhMzgsIDB4ZDJmNCwgMHgwMDQwLAotCTB4M2Y3MywgMHg3MGNiLCAweDAwMDgsIDB4NzA4NywgMHgwMDE2LCAweDEwNzgsIDB4M2Y3ZCwgMHgwMDc4LAotCTB4M2Y3YiwgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLAotCTB4NDAwMCwgMHgyMDk5LCAweGE4ODAsIDB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAwZSwgMHg1M2E2LAotCTB4MzQzMCwgMHgyMDExLCAweGE4OGUsIDB4NzA4NywgMHgwMDE3LCAweDEwNzgsIDB4NDIxMSwgMHgwMGMwLAotCTB4M2Y5ZCwgMHg3MDcwLCAweGEwMDUsIDB4MDBjMCwgMHgzZjlkLCAweDEwNzgsIDB4NDA1MSwgMHgwMGMwLAotCTB4M2ZhNywgMHhhMDg1LCAweDAwMDEsIDB4MTA3OCwgMHgyNTAwLCAweDIwYTksIDB4MDAwOCwgMHgyMDk5LAotCTB4YTg4ZSwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLAotCTB4MDAxNCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywgMHgwZjdlLCAweDcwN2MsIDB4YTAwNSwgMHgwMDQwLAotCTB4M2ZjYywgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LCAweGEwODYsIDB4MDA4NCwgMHgwMGMwLAotCTB4M2ZjYSwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDYsIDB4MDBjMCwgMHgzZmNhLAotCTB4NzgzNCwgMHhhMDA1LCAweDAwYzAsIDB4M2ZjYSwgMHg3MDg3LCAweDAwMTgsIDB4MTA3OCwgMHgzZmNlLAotCTB4MDA3OCwgMHgzZmNjLCAweDEwNzgsIDB4NDE3MSwgMHgwZjdmLCAweDAwN2MsIDB4NzA4NywgMHgwMDE5LAotCTB4MTA3OCwgMHg0MWQyLCAweDIwYTMsIDB4MTEwNiwgMHgyMGEzLCAweDAwMDAsIDB4MzQzMCwgMHgyMDk5LAotCTB4YTg4ZSwgMHgyMDM5LCAweGE4MGUsIDB4MjdhMCwgMHgyMGE5LCAweDAwNDAsIDB4NTNhMywgMHgxMDc4LAotCTB4NDIxMSwgMHgwMGMwLCAweDQwMDIsIDB4MjcyOCwgMHgyNTE0LCAweDgyMDcsIDB4YTA4NCwgMHgwMGZmLAotCTB4ODAwMCwgMHgyMDE4LCAweGEyOTQsIDB4MDBmZiwgMHg4MDA3LCAweGEyMDUsIDB4MjAyYSwgMHg2MDMwLAotCTB4MjMxMCwgMHg4MjE0LCAweGEyYTAsIDB4YTgwZSwgMHgyNDE0LCAweGEzOGMsIDB4MDAwMSwgMHgwMDQwLAotCTB4M2ZmZCwgMHhhMjk0LCAweGZmMDAsIDB4MDA3OCwgMHg0MDAwLCAweGEyOTQsIDB4MDBmZiwgMHg4MDA3LAotCTB4YTIxNSwgMHgyMjIyLCAweDI3OTgsIDB4MjZhMCwgMHgyMGE5LCAweDAwNDAsIDB4NTNhNiwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDg0LCAweDEwNzgsIDB4NDE1OCwgMHgwMDdjLAotCTB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwgMHg0MDM0LCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LAotCTB4NThkNCwgMHhhMDg2LCAweDAwODQsIDB4MDBjMCwgMHg0MDMyLCAweDIwNzksIDB4YTg4MCwgMHg3YTMwLAotCTB4YTI5NiwgMHgxMTA3LCAweDAwYzAsIDB4NDAzMiwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwgMHg0MDMyLAotCTB4NzA4MywgMHgwMDAxLCAweDEwNzgsIDB4NDFiOCwgMHg3MDg3LCAweDAwMWEsIDB4MTA3OCwgMHg0MDM2LAotCTB4MDA3OCwgMHg0MDM0LCAweDEwNzgsIDB4NDE3MSwgMHgwZjdmLCAweDAwN2MsIDB4NzA4NywgMHgwMDFiLAotCTB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgyMDk5LCAweGE4ODAsIDB4MjBhMSwgMHgwMjBiLAotCTB4NzQ3YywgMHhhNDgwLCAweDAwMTgsIDB4YTA4MCwgMHgwMDA3LCAweGEwODQsIDB4MDNmOCwgMHg4MDA0LAotCTB4MjBhOCwgMHg1M2E2LCAweDYwYzMsIDB4MDA4NCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywgMHgwMDdjLAotCTB4MDA3YywgMHgwODdlLCAweDA5N2UsIDB4MjAyOSwgMHhhMzUyLCAweDI1MmMsIDB4MjBhOSwgMHgwMDA4LAotCTB4MjA0MSwgMHhhODBlLCAweDI4YTAsIDB4MjA5OSwgMHhhODhlLCAweDUzYTMsIDB4MjBhOSwgMHgwMDA4LAotCTB4MjAxMSwgMHgwMDA3LCAweGQ1ZDQsIDB4MDA0MCwgMHg0MDY3LCAweDIwMTEsIDB4MDAwMCwgMHgyODAwLAotCTB4YTIwMCwgMHgyMDBjLCAweGExYTYsIDB4ZmZmZiwgMHgwMGMwLCAweDQwNzksIDB4ZDVkNCwgMHgwMDQwLAotCTB4NDA3NCwgMHg4MjEwLCAweDAwNzgsIDB4NDA3NSwgMHg4MjExLCAweDAwZjAsIDB4NDA2NywgMHgwMDc4LAotCTB4NDBlMSwgMHg4MmZmLCAweDAwYzAsIDB4NDA4YiwgMHhkNWQ0LCAweDAwNDAsIDB4NDA4NSwgMHhhMWE2LAotCTB4M2ZmZiwgMHgwMDQwLCAweDQwNzEsIDB4MDA3OCwgMHg0MDg5LCAweGExYTYsIDB4M2ZmZiwgMHgwMDQwLAotCTB4NDBlMSwgMHhhMThkLCAweGMwMDAsIDB4MjBhOSwgMHgwMDEwLCAweDIwMTksIDB4MDAwMSwgMHhkNWQ0LAotCTB4MDA0MCwgMHg0MDk0LCAweDIwMTksIDB4MDAxMCwgMHgyMTIwLCAweGQ1ZDQsIDB4MDA0MCwgMHg0MDliLAotCTB4ODQyMywgMHgwMDc4LCAweDQwOWMsIDB4ODQyNCwgMHgwMGM4LCAweDQwYTksIDB4ZDVkNCwgMHgwMDQwLAotCTB4NDBhNCwgMHg4MzE5LCAweDAwNzgsIDB4NDBhNSwgMHg4MzE4LCAweDAwZjAsIDB4NDA5NSwgMHgwMDc4LAotCTB4NDBlMSwgMHgyM2E4LCAweDIwMjEsIDB4MDAwMSwgMHg4NDI2LCAweDg0MjUsIDB4MDBmMCwgMHg0MGFkLAotCTB4MjMyOCwgMHg4NTI5LCAweGEyYmUsIDB4MDAwNywgMHgwMDQwLCAweDQwYzEsIDB4MDA3ZSwgMHgyMDM5LAotCTB4MDAwNywgMHgyMjAwLCAweGE3M2EsIDB4MDA3ZiwgMHgyN2E4LCAweGE1YTgsIDB4MDAxMCwgMHgwMGYwLAotCTB4NDBiZCwgMHg3NTRlLCAweGE1YzgsIDB4MjkzZiwgMHgyOTJjLCAweGE1YWMsIDB4MDBmZiwgMHg2NTMyLAotCTB4NjBlNywgMHgwMDAwLCAweDY1ZWEsIDB4NzA2YiwgMHgwMDAwLCAweDc1NmUsIDB4MjAxOCwgMHgyMzA0LAotCTB4YTQwNSwgMHgyMDFhLCAweDcwNzMsIDB4MDAwMSwgMHgyNmEwLCAweDI4OTgsIDB4MjBhOSwgMHgwMDA4LAotCTB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweGEwODUsIDB4MDAwMSwgMHgwMDc4LAotCTB4NDBlNywgMHhhMDA2LCAweDAwNzgsIDB4NDBlNywgMHhhMDA2LCAweDEwNzgsIDB4MTMyOCwgMHgwOTdmLAotCTB4MDg3ZiwgMHgwMDdjLCAweDIxMTgsIDB4MjAyMSwgMHgwMDAwLCAweDIwMDEsIDB4MDAwNywgMHhhMzlhLAotCTB4MDAxMCwgMHgwMDQ4LCAweDQwZjcsIDB4ODQyMCwgMHg4MDAxLCAweDAwNzgsIDB4NDBlZiwgMHgyMTE4LAotCTB4ODRmZiwgMHgwMDQwLCAweDQxMDAsIDB4YTM5YSwgMHgwMDEwLCAweDg0MjEsIDB4MDBjMCwgMHg0MGZiLAotCTB4MjAyMSwgMHgwMDAxLCAweDgzZmYsIDB4MDA0MCwgMHg0MTA5LCAweDg0MjMsIDB4ODMxOSwgMHgwMGMwLAotCTB4NDEwNSwgMHhhMjM4LCAweDI3MDQsIDB4YTQyYywgMHgwMGMwLCAweDQxMjEsIDB4YTQwNSwgMHgyMDNhLAotCTB4NzE0ZSwgMHhhMWEwLCAweDI5M2YsIDB4MjQyYywgMHhhNWFjLCAweDAwZmYsIDB4NjUzMiwgMHg2MGU3LAotCTB4MDAwMCwgMHg2NWVhLCAweDcwNmIsIDB4MDAwMCwgMHg3NTZlLCAweDcwNzMsIDB4MDAwMSwgMHhhMDg0LAotCTB4MDAwMCwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDcwNzcsIDB4MDAwMCwgMHgwZTdmLAotCTB4MDA3YywgMHgwZTdlLCAweDBmN2UsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NTk3NSwgMHgyMDc5LAotCTB4MDEwMCwgMHgyMDcxLCAweDAxNDAsIDB4MTA3OCwgMHg2YzQxLCAweDcwMDQsIDB4YTA4NCwgMHg0MDAwLAotCTB4MDA0MCwgMHg0MTNlLCAweDcwMDMsIDB4MTAwMCwgMHg3MDAzLCAweDAwMDAsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDcxLCAweGEzMjEsIDB4MjA3MywgMHgwMDAwLCAweDc4NDAsIDB4MDI3ZSwgMHgwMTdlLAotCTB4MjAwOSwgMHgwMGY3LCAweDEwNzgsIDB4NDFkZSwgMHgwMTdmLCAweGEwOTQsIDB4MDAxMCwgMHhhMjg1LAotCTB4MDA4MCwgMHg3ODQyLCAweDdhNDIsIDB4MDI3ZiwgMHgxMjdmLCAweDBmN2YsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAxMSwgMHhhNWI1LCAweDIwMTMsIDB4MDAwMCwgMHg3MDdmLAotCTB4MDAwMCwgMHgxMjdmLCAweDIwZTEsIDB4OTA4MCwgMHg2MGEzLCAweDAwNTYsIDB4NjBhNywgMHg5NTc1LAotCTB4MTA3OCwgMHg2YzM4LCAweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OTZjLAotCTB4MDA3YywgMHgwMTdlLCAweDAyN2UsIDB4MGM3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LAotCTB4MDBmNywgMHgxMDc4LCAweDQxZGUsIDB4MjA2MSwgMHhhNWJlLCAweDYwMWIsIDB4MDAwMCwgMHg2MDFmLAotCTB4MDAwMCwgMHgyMDYxLCAweGEzMDAsIDB4NjAwMywgMHgwMDAxLCAweDIwNjEsIDB4MDEwMCwgMHg2MDQzLAotCTB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4MjAwOSwgMHgwMDJkLCAweDIwMTEsIDB4NDE5NiwgMHgxMDc4LAotCTB4NThjNywgMHgxMjdmLCAweDBjN2YsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MGU3ZSwgMHgwMDdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgwMDAxLCAweDEwNzgsIDB4NTk3NSwgMHgyMDcxLAotCTB4MDEwMCwgMHgxMDc4LCAweDZjNDEsIDB4MjA3MSwgMHgwMTQwLCAweDcwMDQsIDB4YTA4NCwgMHg0MDAwLAotCTB4MDA0MCwgMHg0MWFlLCAweDcwMDMsIDB4MTAwMCwgMHg3MDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMDAxLAotCTB4MTA3OCwgMHgyNDgwLCAweDEwNzgsIDB4NDE3MSwgMHgxMjdmLCAweDAwN2YsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MjBhOSwgMHgwMDQwLCAweDIwYTEsIDB4YTljMCwgMHgyMDk5LCAweGE4OGUsIDB4MzMwNCwgMHg4MDA3LAotCTB4MjBhMiwgMHg5Mzk4LCAweDk0YTAsIDB4MDBmMCwgMHg0MWJlLCAweDAwN2MsIDB4MjBlMSwgMHg5MDgwLAotCTB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YTgwMCwgMHgyMGExLCAweDAyMGIsIDB4MjBhOSwgMHgwMDBjLAotCTB4NTNhNiwgMHgwMDdjLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwgMHhhODgwLAotCTB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAwYywgMHg1M2E2LCAweDAwN2MsIDB4MGM3ZSwgMHgwMDdlLAotCTB4MjA2MSwgMHgwMTAwLCAweDgxMGYsIDB4MjAwMSwgMHhhMzJlLCAweDIwMDQsIDB4YTAwNSwgMHgwMGMwLAotCTB4NDFlZiwgMHg2MDMwLCAweGEwODQsIDB4MDBmZiwgMHhhMTA1LCAweDAwNzgsIDB4NDFmMSwgMHhhMTg1LAotCTB4MDBmNywgMHg2MDRhLCAweDAwN2YsIDB4MGM3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MDQ3ZSwgMHgyMDAxLAotCTB4YTM1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDA0MCwgMHg0MjA4LCAweGEwMDYsIDB4MjAyMCwgMHgyMDA5LAotCTB4MDAyYSwgMHgxMDc4LCAweDllYzAsIDB4MjAwMSwgMHhhMzBjLCAweDIwMGMsIDB4YzE5NSwgMHgyMTAyLAotCTB4MjAxOSwgMHgwMDJhLCAweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI3ZTIsIDB4MDQ3ZiwgMHgwMTdmLAotCTB4MDA3YywgMHgwMDdlLCAweDIwMDEsIDB4YTMwYywgMHgyMDA0LCAweGQwOWMsIDB4MDA0MCwgMHg0MjE4LAotCTB4MDA3ZiwgMHgwMDdjLCAweDAwN2UsIDB4MDE3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDAxLAotCTB4MDEwMSwgMHgyMDBjLCAweGExOGQsIDB4MDAwNiwgMHgyMTAyLCAweDEyN2YsIDB4MDE3ZiwgMHgwMDdmLAotCTB4MDA3YywgMHgxNTdlLCAweDIwYTksIDB4MDBmZiwgMHgyMDA5LCAweGE0MzQsIDB4YTAwNiwgMHgyMDBhLAotCTB4ODEwOCwgMHgwMGYwLCAweDQyMmYsIDB4MTU3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MDM3ZSwgMHgxNTdlLAotCTB4MTM3ZSwgMHgxNDdlLCAweDIwNjksIDB4YTM1MSwgMHhhMDA2LCAweDYwMDIsIDB4NjAwNywgMHgwNzA3LAotCTB4NjAwYSwgMHg2MDBlLCAweDYwMTIsIDB4YTE5OCwgMHgyOTNmLCAweDIzMWMsIDB4YTM5YywgMHgwMGZmLAotCTB4NjMxNiwgMHgyMGE5LCAweDAwMDQsIDB4YWM5OCwgMHgwMDA2LCAweDIzYTAsIDB4NDBhNCwgMHgyMGE5LAotCTB4MDAwNCwgMHhhYzk4LCAweDAwMGEsIDB4MjNhMCwgMHg0MGE0LCAweDYwM2UsIDB4NjA0MiwgMHg2MDRlLAotCTB4NjA1MiwgMHg2MDU2LCAweDYwNWEsIDB4NjA1ZSwgMHg2MDYyLCAweDYwNjYsIDB4NjA2YSwgMHg2MDZlLAotCTB4NjA3MiwgMHg2MDc2LCAweDYwN2EsIDB4NjA3ZSwgMHg2MDgyLCAweDYwODYsIDB4NjA4YSwgMHg2MDhlLAotCTB4NjA5MiwgMHg2MDk2LCAweDYwOWEsIDB4NjA5ZSwgMHg2MGFlLCAweDYxYTIsIDB4MGQ3ZSwgMHg2MGE0LAotCTB4YTA2ZCwgMHgwMDQwLCAweDQyNzUsIDB4MTA3OCwgMHgxMzlhLCAweDYwYTcsIDB4MDAwMCwgMHg2MGE4LAotCTB4YTA2ZCwgMHgwMDQwLCAweDQyN2QsIDB4MTA3OCwgMHgxMzlhLCAweDYwYWIsIDB4MDAwMCwgMHgwZDdmLAotCTB4YTAwNiwgMHg2MDRhLCAweDY4MTAsIDB4NjAzYSwgMHg2ODBjLCAweDYwNDYsIDB4NjgxNCwgMHhhMDg0LAotCTB4MDBmZiwgMHg2MDQyLCAweDE0N2YsIDB4MTM3ZiwgMHgxNTdmLCAweDAzN2YsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4Njk0NCwgMHg2ZTQ4LCAweGE2ODQsIDB4M2ZmZiwgMHhhMDgyLAotCTB4NDAwMCwgMHgwMGM4LCAweDQzNjEsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4MiwgMHgwMGZmLAotCTB4MDBjOCwgMHg0MzY3LCAweDIwMDEsIDB4YTMwYywgMHgyMDA0LCAweGEwODQsIDB4MDAwMywgMHgwMDQwLAotCTB4NDJjMiwgMHgyMDAxLCAweGEzMGMsIDB4MjAwNCwgMHhkMDg0LCAweDAwYzAsIDB4NDM0MiwgMHhhMTg4LAotCTB4YTQzNCwgMHgyMTA0LCAweGEwNjUsIDB4MDA0MCwgMHg0MzQyLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4ZSwgMHgwMDA2LCAweDAwYzAsIDB4NDM0MiwgMHg2MDAwLCAweGQwYzQsIDB4MDA0MCwgMHg0MzQyLAotCTB4MDA3OCwgMHg0MmNmLCAweGExODgsIDB4YTQzNCwgMHgyMTA0LCAweGEwNjUsIDB4MDA0MCwgMHg0MzI2LAotCTB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4ZSwgMHgwMDA2LCAweDAwYzAsIDB4NDMyYywgMHg2MGE0LAotCTB4YTAwZCwgMHgwMDQwLCAweDQyZDcsIDB4MTA3OCwgMHg0NzQ5LCAweDAwNDAsIDB4NDMyMCwgMHg2MGE4LAotCTB4YTAwZCwgMHgwMDQwLCAweDQyZjEsIDB4MTA3OCwgMHg0NzlhLCAweDAwYzAsIDB4NDJmMSwgMHg2OTRjLAotCTB4ZDFmYywgMHgwMGMwLCAweDQyZTcsIDB4MTA3OCwgMHg0NDFjLCAweDAwNzgsIDB4NDMxYiwgMHgxMDc4LAotCTB4NDNkNiwgMHg2OTRjLCAweGQxZWMsIDB4MDBjMCwgMHg0MzFiLCAweDEwNzgsIDB4NDYwYSwgMHgwMDc4LAotCTB4NDMxYiwgMHg2OTRjLCAweGExODQsIDB4YTAwMCwgMHgwMDQwLCAweDQzMGIsIDB4ZDFlYywgMHgwMDQwLAotCTB4NDMwNCwgMHhkMWZjLCAweDAwNDAsIDB4NDMwMCwgMHgxMDc4LCAweDQ2MWIsIDB4MDA3OCwgMHg0MzA3LAotCTB4MTA3OCwgMHg0NjFiLCAweDAwNzgsIDB4NDMwYiwgMHhkMWZjLCAweDAwNDAsIDB4NDMwYiwgMHgxMDc4LAotCTB4NDNkNiwgMHgwMDc4LCAweDQzMWIsIDB4NjA1MCwgMHhhMDBkLCAweDAwNDAsIDB4NDMxNiwgMHgyZDAwLAotCTB4MjAwYSwgMHg2ODAzLCAweDAwMDAsIDB4NjA1MiwgMHgwMDc4LCAweDQzMWIsIDB4MmQwMCwgMHg2MDUyLAotCTB4NjA0ZSwgMHg2ODAzLCAweDAwMDAsIDB4MTA3OCwgMHg1YzE3LCAweGEwMDYsIDB4MTI3ZiwgMHgwMDdjLAotCTB4MjAwMSwgMHgwMDA1LCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDQzNmIsIDB4MjAwMSwgMHgwMDI4LAotCTB4MjAwOSwgMHgwMDAwLCAweDAwNzgsIDB4NDM2YiwgMHhhMDgyLCAweDAwMDYsIDB4MDBjOCwgMHg0MzQyLAotCTB4NjBhMCwgMHhkMGJjLCAweDAwYzAsIDB4NDMzZSwgMHg2MTAwLCAweGQxZmMsIDB4MDA0MCwgMHg0MmNmLAotCTB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwMDc4LCAweDQzNmIsIDB4MjAwMSwgMHgwMDI4LAotCTB4MDA3OCwgMHg0MzVkLCAweDIwMDksIDB4YTMwYywgMHgyMTBjLCAweGQxOGMsIDB4MDA0MCwgMHg0MzRjLAotCTB4MjAwMSwgMHgwMDA0LCAweDAwNzgsIDB4NDM1ZCwgMHhkMTg0LCAweDAwNDAsIDB4NDM1MywgMHgyMDAxLAotCTB4MDAwNCwgMHgwMDc4LCAweDQzNWQsIDB4MjAwMSwgMHgwMDI5LCAweDYxMDAsIDB4ZDFmYywgMHgwMDQwLAotCTB4NDM1ZCwgMHgyMDA5LCAweDEwMDAsIDB4MDA3OCwgMHg0MzZiLCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LAotCTB4NDM2YiwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweDAwNzgsIDB4NDM2YiwgMHgyMDAxLAotCTB4MDAyOSwgMHgyMDA5LCAweDAwMDAsIDB4YTAwNSwgMHgxMjdmLCAweDAwN2MsIDB4Njk0NCwgMHg2ZTQ4LAotCTB4YTY4NCwgMHgzZmZmLCAweGEwODIsIDB4NDAwMCwgMHgwMGM4LCAweDQzYmIsIDB4YTE4YywgMHhmZjAwLAotCTB4ODEwZiwgMHhhMTgyLCAweDAwZmYsIDB4MDBjOCwgMHg0M2ExLCAweGExODgsIDB4YTQzNCwgMHgyMTA0LAotCTB4YTA2NSwgMHgwMDQwLCAweDQzYTEsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4ZSwgMHgwMDA2LAotCTB4MDBjMCwgMHg0M2E3LCAweDY4NGMsIDB4ZDBlYywgMHgwMDQwLCAweDQzOTQsIDB4MTA3OCwgMHg0NjFiLAotCTB4MTA3OCwgMHg0M2Q2LCAweDAwNzgsIDB4NDM5YywgMHgxMDc4LCAweDQzZDYsIDB4Njg0YywgMHhkMGZjLAotCTB4MDA0MCwgMHg0MzljLCAweDEwNzgsIDB4NDYwYSwgMHgxMDc4LCAweDQ2NjMsIDB4YTAwNiwgMHgwMDc4LAotCTB4NDNiZiwgMHgyMDAxLCAweDAwMjgsIDB4MjAwOSwgMHgwMDAwLCAweDAwNzgsIDB4NDNiZiwgMHhhMDgyLAotCTB4MDAwNiwgMHgwMGM4LCAweDQzYjUsIDB4NjEwMCwgMHhkMWZjLCAweDAwNDAsIDB4NDM4YSwgMHgyMDAxLAotCTB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDA3OCwgMHg0M2JmLCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LAotCTB4MDAwMCwgMHgwMDc4LCAweDQzYmYsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MDAwMCwgMHhhMDA1LAotCTB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg2MDUwLCAweGEwMGQsIDB4MDA0MCwgMHg0M2NmLAotCTB4MmQwMCwgMHgyMDBhLCAweDY4MDMsIDB4MDAwMCwgMHg2MDUyLCAweDEyN2YsIDB4MDA3YywgMHgyZDAwLAotCTB4NjA1MiwgMHg2MDRlLCAweDY4MDMsIDB4MDAwMCwgMHgwMDc4LCAweDQzY2QsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHg2MDRjLCAweGEwMDUsIDB4MDA0MCwgMHg0M2VjLCAweDBlN2UsIDB4MjA3MSwgMHhhNWFiLAotCTB4NzAwNCwgMHhhMDg2LCAweDAwMDIsIDB4MDA0MCwgMHg0M2YzLCAweDBlN2YsIDB4NjA0YywgMHg2ODAyLAotCTB4MmQwMCwgMHg2MDRlLCAweDEyN2YsIDB4MDA3YywgMHgyZDAwLCAweDYwNTIsIDB4NjA0ZSwgMHg2ODAzLAotCTB4MDAwMCwgMHgwMDc4LCAweDQzZWEsIDB4NzAxYywgMHhhYzA2LCAweDAwYzAsIDB4NDNlNSwgMHg2MDRjLAotCTB4MjA3MCwgMHg3MDAwLCAweDY4MDIsIDB4MmQwMCwgMHg3MDAyLCAweDBlN2YsIDB4MTI3ZiwgMHgwMDdjLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjA0YywgMHhhMDZkLCAweDAwNDAsIDB4NDQwZSwgMHg2ODAwLAotCTB4YTAwNSwgMHgwMGMwLCAweDQ0MGMsIDB4NjA1MiwgMHg2MDRlLCAweGFkMDUsIDB4MTI3ZiwgMHgwMDdjLAotCTB4NjA0YywgMHhhMDZkLCAweDAwNDAsIDB4NDQxYiwgMHg2ODAwLCAweGEwMDUsIDB4MDBjMCwgMHg0NDE5LAotCTB4NjA1MiwgMHg2MDRlLCAweGFkMDUsIDB4MDA3YywgMHg2ODAzLCAweDAwMDAsIDB4NjA4NCwgMHhhMDBkLAotCTB4MDA0MCwgMHg0NDI2LCAweDJkMDAsIDB4MjAwYSwgMHg2MDg2LCAweDAwN2MsIDB4MmQwMCwgMHg2MDg2LAotCTB4NjA4MiwgMHgwMDc4LCAweDQ0MjUsIDB4MTI3ZSwgMHgwYzdlLCAweDAyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjIxOCwgMHgyMjYwLCAweDYyMDAsIDB4YTAwNSwgMHgwMDQwLCAweDQ0MzksIDB4YzI4NSwgMHgwMDc4LAotCTB4NDQzYSwgMHhjMjg0LCAweDYyMDIsIDB4MDI3ZiwgMHgwYzdmLCAweDEyN2YsIDB4MDA3YywgMHgxMjdlLAotCTB4MGM3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjIxOCwgMHgyMjYwLCAweDYyMDQsIDB4MDA3ZSwgMHhhMDg2LAotCTB4MDAwNiwgMHgwMGMwLCAweDQ0NWUsIDB4NjA5YywgMHhkMGFjLCAweDAwNDAsIDB4NDQ1ZSwgMHgyMDAxLAotCTB4YTM1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDA0MCwgMHg0NDVlLCAweGEyODQsIDB4ZmYwMCwgMHg4MDA3LAotCTB4YTA4NiwgMHgwMDA3LCAweDAwYzAsIDB4NDQ1ZSwgMHgyMDExLCAweDA2MDAsIDB4MDA3ZiwgMHhhMjk0LAotCTB4ZmYwMCwgMHhhMjE1LCAweDYyMDYsIDB4MDA3ZSwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg0NDZlLAotCTB4NjI5MCwgMHg4MmZmLCAweDAwYzAsIDB4NDQ2ZSwgMHgxMDc4LCAweDEzMjgsIDB4MDA3ZiwgMHgwYzdmLAotCTB4MTI3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MGM3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjIxOCwgMHgyMjYwLAotCTB4NjIwNCwgMHgwMDdlLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDQ0OTAsIDB4NjA5YywgMHhkMGE0LAotCTB4MDA0MCwgMHg0NDkwLCAweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYWMsIDB4MDBjMCwgMHg0NDkwLAotCTB4YTI4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNywgMHgwMGMwLCAweDQ0OTAsIDB4MjAxMSwgMHgwMDA2LAotCTB4MDA3ZiwgMHhhMjk0LCAweDAwZmYsIDB4ODAwNywgMHhhMjE1LCAweDYyMDYsIDB4MGM3ZiwgMHgxMjdmLAotCTB4MDA3YywgMHgwMjdlLCAweGExODIsIDB4MDBmZiwgMHgwMDQ4LCAweDQ0YTIsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDA3OCwgMHg0NGJhLCAweGExOTAsIDB4YTQzNCwgMHgyMjA0LCAweGEwNjUsIDB4MDBjMCwgMHg0NGI5LAotCTB4MDE3ZSwgMHgwZDdlLCAweDEwNzgsIDB4MTM2NiwgMHgyZDYwLCAweDBkN2YsIDB4MDE3ZiwgMHgwMDQwLAotCTB4NDQ5ZSwgMHgyYzAwLCAweDIwMTIsIDB4NjBhNywgMHgwMDAwLCAweDYwYWIsIDB4MDAwMCwgMHgxMDc4LAotCTB4NDIzNSwgMHhhMDA2LCAweDAyN2YsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwMjdlLAotCTB4YTE4MiwgMHgwMGZmLCAweDAwNDgsIDB4NDRjOCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHg0NGZlLAotCTB4MGQ3ZSwgMHhhMTkwLCAweGE0MzQsIDB4MjIwNCwgMHhhMDZkLCAweDAwNDAsIDB4NDRmYywgMHgyMDEzLAotCTB4MDAwMCwgMHgwZDdlLCAweDBjN2UsIDB4MmQ2MCwgMHg2MGE0LCAweGEwNmQsIDB4MDA0MCwgMHg0NGRhLAotCTB4MTA3OCwgMHgxMzlhLCAweDYwYTgsIDB4YTA2ZCwgMHgwMDQwLCAweDQ0ZTAsIDB4MTA3OCwgMHgxMzlhLAotCTB4MGM3ZiwgMHgwZDdmLCAweDBkN2UsIDB4MGM3ZSwgMHg2OGFjLCAweDIwNjAsIDB4OGNmZiwgMHgwMDQwLAotCTB4NDRmOCwgMHg2MDBjLCAweDAwN2UsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLAotCTB4NDRmMywgMHgxMDc4LCAweDEzYWEsIDB4MTA3OCwgMHg3NTNkLCAweDBjN2YsIDB4MDA3OCwgMHg0NGU2LAotCTB4MGM3ZiwgMHgwZDdmLCAweDEwNzgsIDB4MTM5YSwgMHgwZDdmLCAweGEwMDYsIDB4MDI3ZiwgMHgxMjdmLAotCTB4MDA3YywgMHgwMTdlLCAweGExODIsIDB4MDBmZiwgMHgwMDQ4LCAweDQ1MGEsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDA3OCwgMHg0NTExLCAweGExODgsIDB4YTQzNCwgMHgyMTA0LCAweGEwNjUsIDB4MDA0MCwgMHg0NTA2LAotCTB4YTAwNiwgMHgwMTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgxNTdlLCAweDEzN2UsIDB4MTQ3ZSwgMHg2MDBiLAotCTB4MDAwMCwgMHg2MDBmLCAweDAwMDAsIDB4NjAwMCwgMHhjMDhjLCAweDYwMDIsIDB4MjA2OSwgMHhhODhlLAotCTB4NjgwOCwgMHg2MDVlLCAweDY4MTAsIDB4NjA2MiwgMHg2MTM4LCAweGExMGEsIDB4MDA0OCwgMHg0NTI5LAotCTB4NjAzYSwgMHg2ODE0LCAweDYwNjYsIDB4MjA5OSwgMHhhODk2LCAweGFjODgsIDB4MDAwYSwgMHgyMWEwLAotCTB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MjA5OSwgMHhhODlhLCAweGFjODgsIDB4MDAwNiwgMHgyMWEwLAotCTB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MjA2OSwgMHhhOGFlLCAweDY4MDgsIDB4NjA2YSwgMHg2OTBjLAotCTB4NjE2ZSwgMHg2ODEwLCAweDYwNzIsIDB4NjgxOCwgMHg2MDc2LCAweGExODIsIDB4MDIxMSwgMHgwMGM4LAotCTB4NDU0ZCwgMHgyMDA5LCAweDAwMDgsIDB4MDA3OCwgMHg0NTc3LCAweGExODIsIDB4MDI1OSwgMHgwMGM4LAotCTB4NDU1NSwgMHgyMDA5LCAweDAwMDcsIDB4MDA3OCwgMHg0NTc3LCAweGExODIsIDB4MDJjMSwgMHgwMGM4LAotCTB4NDU1ZCwgMHgyMDA5LCAweDAwMDYsIDB4MDA3OCwgMHg0NTc3LCAweGExODIsIDB4MDM0OSwgMHgwMGM4LAotCTB4NDU2NSwgMHgyMDA5LCAweDAwMDUsIDB4MDA3OCwgMHg0NTc3LCAweGExODIsIDB4MDQyMSwgMHgwMGM4LAotCTB4NDU2ZCwgMHgyMDA5LCAweDAwMDQsIDB4MDA3OCwgMHg0NTc3LCAweGExODIsIDB4MDU4MSwgMHgwMGM4LAotCTB4NDU3NSwgMHgyMDA5LCAweDAwMDMsIDB4MDA3OCwgMHg0NTc3LCAweDIwMDksIDB4MDAwMiwgMHg2MTkyLAotCTB4MTQ3ZiwgMHgxMzdmLCAweDE1N2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MDI3ZSwgMHgwZTdlLAotCTB4MjA3MSwgMHhhODhkLCAweDJlMDQsIDB4Njg5NiwgMHgyMDcxLCAweGE4OGUsIDB4NzAwNCwgMHg2ODlhLAotCTB4NzAxYywgMHg2ODllLCAweDZhMDAsIDB4MjAwOSwgMHhhMzcxLCAweDIxMGMsIDB4ZDBiYywgMHgwMDQwLAotCTB4NDU5NywgMHhkMWVjLCAweDAwNDAsIDB4NDU5NywgMHhjMmFkLCAweDAwNzgsIDB4NDU5OCwgMHhjMmFjLAotCTB4ZDBjNCwgMHgwMDQwLCAweDQ1YTEsIDB4ZDFlNCwgMHgwMDQwLCAweDQ1YTEsIDB4YzJiZCwgMHgwMDc4LAotCTB4NDVhMiwgMHhjMmJjLCAweDZhMDIsIDB4MGU3ZiwgMHgwMjdmLCAweDAxN2YsIDB4MDA3YywgMHgwZDdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjBhNCwgMHhhMDZkLCAweDAwNDAsIDB4NDVjYiwgMHg2OTAwLAotCTB4ODFmZiwgMHgwMGMwLCAweDQ1ZGYsIDB4NmEwNCwgMHhhMjgyLCAweDAwMTAsIDB4MDBjOCwgMHg0NWU0LAotCTB4YWQ4OCwgMHgwMDA0LCAweDIwYTksIDB4MDAxMCwgMHgyMTA0LCAweGEwODYsIDB4ZmZmZiwgMHgwMDQwLAotCTB4NDVjNiwgMHg4MTA4LCAweDAwZjAsIDB4NDViYywgMHgxMDc4LCAweDEzMjgsIDB4MjYwYSwgMHg4MjEwLAotCTB4NmEwNiwgMHgwMDc4LCAweDQ1ZGYsIDB4MTA3OCwgMHgxMzgxLCAweDAwNDAsIDB4NDVlNCwgMHgyZDAwLAotCTB4NjBhNiwgMHg2ODAzLCAweDAwMDAsIDB4YWQ4OCwgMHgwMDA0LCAweDIwYTksIDB4MDAxMCwgMHgyMDBiLAotCTB4ZmZmZiwgMHg4MTA4LCAweDAwZjAsIDB4NDVkNywgMHg2ODA3LCAweDAwMDEsIDB4NmUxMiwgMHhhMDg1LAotCTB4MDAwMSwgMHgxMjdmLCAweDBkN2YsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4NDVlMSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDBkN2UsIDB4NjBhNCwgMHhhMDBkLCAweDAwNDAsIDB4NDYwNywgMHgyMTY4LAotCTB4NjgwMCwgMHhhMDA1LCAweDAwYzAsIDB4NDYwMywgMHgxMDc4LCAweDQ3NDksIDB4MDBjMCwgMHg0NjA3LAotCTB4MjAwYiwgMHhmZmZmLCAweDY4MDQsIDB4YTA4YSwgMHgwMDAyLCAweDAwNDgsIDB4NDYwMywgMHg4MDAxLAotCTB4NjgwNiwgMHgwMDc4LCAweDQ2MDcsIDB4MTA3OCwgMHgxMzlhLCAweDYwYTcsIDB4MDAwMCwgMHgwZDdmLAotCTB4MTI3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDdhZiwgMHgwMDc4LAotCTB4NDYxMywgMHgxMDc4LCAweDQzYzEsIDB4MTA3OCwgMHg0NmE3LCAweDAwYzAsIDB4NDYxMSwgMHgxMDc4LAotCTB4NDY2MywgMHgxMjdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg2MGE4LAotCTB4YTA2ZCwgMHgwMDQwLCAweDQ2M2YsIDB4Njk1MCwgMHg4MWZmLCAweDAwYzAsIDB4NDY1MywgMHg2YTU0LAotCTB4YTI4MiwgMHgwMDEwLCAweDAwYzgsIDB4NDY2MCwgMHhhZDg4LCAweDAwMTgsIDB4MjBhOSwgMHgwMDEwLAotCTB4MjEwNCwgMHhhMDg2LCAweGZmZmYsIDB4MDA0MCwgMHg0NjNhLCAweDgxMDgsIDB4MDBmMCwgMHg0NjMwLAotCTB4MTA3OCwgMHgxMzI4LCAweDI2MGEsIDB4ODIxMCwgMHg2YTU2LCAweDAwNzgsIDB4NDY1MywgMHgxMDc4LAotCTB4MTM4MSwgMHgwMDQwLCAweDQ2NjAsIDB4MmQwMCwgMHg2MGFhLCAweDY4NTMsIDB4MDAwMCwgMHhhZDg4LAotCTB4MDAxOCwgMHgyMGE5LCAweDAwMTAsIDB4MjAwYiwgMHhmZmZmLCAweDgxMDgsIDB4MDBmMCwgMHg0NjRiLAotCTB4Njg1NywgMHgwMDAxLCAweDZlNjIsIDB4MDA3OCwgMHg0NjU3LCAweDEwNzgsIDB4NDQxYywgMHgxMDc4LAotCTB4NDY2ZCwgMHgwMGMwLCAweDQ2NTUsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4YTAwNiwgMHgwMDc4LCAweDQ2NWQsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg1YzE3LAotCTB4MTI3ZiwgMHgwMDdjLCAweGEwMWUsIDB4MDA3OCwgMHg0NjZmLCAweDIwMTksIDB4MDAwMSwgMHhhMDBlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjA0YywgMHgyMDY4LCAweDYwMDAsIDB4ZDBkYywgMHgwMGMwLAotCTB4NDY4ZCwgMHg4ZGZmLCAweDAwNDAsIDB4NDZhMiwgMHg4M2ZmLCAweDAwNDAsIDB4NDY4NSwgMHg2ODQ4LAotCTB4YTYwNiwgMHgwMDQwLCAweDQ2OTIsIDB4MDA3OCwgMHg0NjhkLCAweDY4M2MsIDB4YTQwNiwgMHgwMGMwLAotCTB4NDY4ZCwgMHg2ODQwLCAweGE1MDYsIDB4MDA0MCwgMHg0NjkyLCAweDJkMDgsIDB4NjgwMCwgMHgyMDY4LAotCTB4MDA3OCwgMHg0Njc5LCAweDZhMDAsIDB4NjA0YywgMHhhZDA2LCAweDAwYzAsIDB4NDY5YSwgMHg2MjRlLAotCTB4MDA3OCwgMHg0NjlkLCAweGExODAsIDB4MDAwMCwgMHgyMjAyLCAweDgyZmYsIDB4MDBjMCwgMHg0NmEyLAotCTB4NjE1MiwgMHg4ZGZmLCAweDEyN2YsIDB4MDA3YywgMHhhMDFlLCAweDAwNzgsIDB4NDZhOSwgMHgyMDE5LAotCTB4MDAwMSwgMHhhMDBlLCAweDYwODAsIDB4MjA2OCwgMHg4ZGZmLCAweDAwNDAsIDB4NDZkNSwgMHg4M2ZmLAotCTB4MDA0MCwgMHg0NmI4LCAweDY4NDgsIDB4YTYwNiwgMHgwMDQwLCAweDQ2YzUsIDB4MDA3OCwgMHg0NmMwLAotCTB4NjgzYywgMHhhNDA2LCAweDAwYzAsIDB4NDZjMCwgMHg2ODQwLCAweGE1MDYsIDB4MDA0MCwgMHg0NmM1LAotCTB4MmQwOCwgMHg2ODAwLCAweDIwNjgsIDB4MDA3OCwgMHg0NmFjLCAweDZhMDAsIDB4NjA4MCwgMHhhZDA2LAotCTB4MDBjMCwgMHg0NmNkLCAweDYyODIsIDB4MDA3OCwgMHg0NmQwLCAweGExODAsIDB4MDAwMCwgMHgyMjAyLAotCTB4ODJmZiwgMHgwMGMwLCAweDQ2ZDUsIDB4NjE4NiwgMHg4ZGZmLCAweDAwN2MsIDB4YTAxNiwgMHgxMDc4LAotCTB4NDc0MiwgMHgwMGMwLCAweDQ2ZGQsIDB4MjAxMSwgMHgwMDAxLCAweDEwNzgsIDB4NDc5MywgMHgwMGMwLAotCTB4NDZlMywgMHhhMjk1LCAweDAwMDIsIDB4MDA3YywgMHgxMDc4LCAweDQ3Y2IsIDB4MDA0MCwgMHg0NmVjLAotCTB4MTA3OCwgMHg4YjEyLCAweDAwNzgsIDB4NDZlZSwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHgxMDc4LAotCTB4NDdjYiwgMHgwMDQwLCAweDQ2ZjcsIDB4MTA3OCwgMHg4YWFhLCAweDAwNzgsIDB4NDZmOSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDdjLCAweDEwNzgsIDB4NDdjYiwgMHgwMDQwLCAweDQ3MDIsIDB4MTA3OCwgMHg4YWY0LAotCTB4MDA3OCwgMHg0NzA0LCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDEwNzgsIDB4NDdjYiwgMHgwMDQwLAotCTB4NDcwZCwgMHgxMDc4LCAweDhhYzYsIDB4MDA3OCwgMHg0NzBmLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLAotCTB4MTA3OCwgMHg0N2NiLCAweDAwNDAsIDB4NDcxOCwgMHgxMDc4LCAweDhiMzAsIDB4MDA3OCwgMHg0NzFhLAotCTB4YTA4NSwgMHgwMDAxLCAweDAwN2MsIDB4MTI3ZSwgMHgwMDdlLCAweDBkN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjA4MCwgMHhhMDZkLCAweDAwNDAsIDB4NDczYSwgMHg2ODAwLCAweDAwN2UsIDB4NjgzNywgMHgwMTAzLAotCTB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHg4Y2I4LCAweDAwN2UsIDB4NjAwMCwgMHhkMGZjLAotCTB4MDA0MCwgMHg0NzM0LCAweDEwNzgsIDB4YTE4YywgMHgwMDdmLCAweDEwNzgsIDB4NDk4MiwgMHgwMDdmLAotCTB4MDA3OCwgMHg0NzIxLCAweDYwODMsIDB4MDAwMCwgMHg2MDg3LCAweDAwMDAsIDB4MGQ3ZiwgMHgwMDdmLAotCTB4MTI3ZiwgMHgwMDdjLCAweDYwYTQsIDB4YTAwZCwgMHgwMGMwLCAweDQ3NDksIDB4YTA4NSwgMHgwMDAxLAotCTB4MDA3YywgMHgwZTdlLCAweDIxNzAsIDB4NzAwMCwgMHhhMDA1LCAweDAwYzAsIDB4NDc1YywgMHgyMGE5LAotCTB4MDAxMCwgMHhhZTg4LCAweDAwMDQsIDB4MjEwNCwgMHhhNjA2LCAweDAwNDAsIDB4NDc1YywgMHg4MTA4LAotCTB4MDBmMCwgMHg0NzUzLCAweGEwODUsIDB4MDAwMSwgMHhhMDA2LCAweDBlN2YsIDB4MDA3YywgMHgwZDdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjBhNCwgMHhhMDZkLCAweDAwYzAsIDB4NDc2ZCwgMHgxMDc4LAotCTB4MTM4MSwgMHgwMDQwLCAweDQ3N2YsIDB4MmQwMCwgMHg2MGE2LCAweDY4MDMsIDB4MDAwMSwgMHg2ODA3LAotCTB4MDAwMCwgMHhhZDg4LCAweDAwMDQsIDB4MjBhOSwgMHgwMDEwLCAweDIwMGIsIDB4ZmZmZiwgMHg4MTA4LAotCTB4MDBmMCwgMHg0Nzc1LCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDBkN2YsIDB4MDA3YywgMHhhMDA2LAotCTB4MDA3OCwgMHg0NzdjLCAweDBkN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjBhNCwgMHhhMDZkLAotCTB4MDA0MCwgMHg0NzkwLCAweDYwYTcsIDB4MDAwMCwgMHgxMDc4LCAweDEzOWEsIDB4YTA4NSwgMHgwMDAxLAotCTB4MTI3ZiwgMHgwZDdmLCAweDAwN2MsIDB4NjBhOCwgMHhhMDBkLCAweDAwYzAsIDB4NDc5YSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDdjLCAweDBlN2UsIDB4MjE3MCwgMHg3MDUwLCAweGEwMDUsIDB4MDBjMCwgMHg0N2FkLAotCTB4MjBhOSwgMHgwMDEwLCAweGFlODgsIDB4MDAxOCwgMHgyMTA0LCAweGE2MDYsIDB4MDA0MCwgMHg0N2FkLAotCTB4ODEwOCwgMHgwMGYwLCAweDQ3YTQsIDB4YTA4NSwgMHgwMDAxLCAweDBlN2YsIDB4MDA3YywgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDc5MywgMHgwMGMwLCAweDQ3YzksIDB4MjAwYiwgMHhmZmZmLAotCTB4MGQ3ZSwgMHg2MGE4LCAweDIwNjgsIDB4Njg1NCwgMHhhMDhhLCAweDAwMDIsIDB4MDA0OCwgMHg0N2M0LAotCTB4ODAwMSwgMHg2ODU2LCAweDAwNzgsIDB4NDdjOCwgMHgxMDc4LCAweDEzOWEsIDB4NjBhYiwgMHgwMDAwLAotCTB4MGQ3ZiwgMHgxMjdmLCAweDAwN2MsIDB4NjA5YywgMHhkMGE0LCAweDAwN2MsIDB4MGY3ZSwgMHg3MWFjLAotCTB4ODFmZiwgMHgwMGMwLCAweDQ3ZTksIDB4NzFjOCwgMHhkMTljLCAweDAwNDAsIDB4NDdlOSwgMHgyMDAxLAotCTB4MDA3ZSwgMHhhMDgwLCAweGE0MzQsIDB4MjAwNCwgMHhhMDdkLCAweDAwNDAsIDB4NDdlOSwgMHg3ODA0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDQ3ZTksIDB4NzgwMCwgMHhjMGVkLAotCTB4NzgwMiwgMHgyMDc5LCAweGEzNTEsIDB4NzgwNCwgMHhkMGE0LCAweDAwNDAsIDB4NDgwZiwgMHgxNTdlLAotCTB4MGM3ZSwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAxN2UsIDB4MTA3OCwgMHg0NTAxLAotCTB4MDBjMCwgMHg0ODA5LCAweDYwMDQsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTA5NiwgMHgwMDA0LAotCTB4MDA0MCwgMHg0ODA2LCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDQ4MDksIDB4NjAwMCwgMHhjMGVkLAotCTB4NjAwMiwgMHgwMTdmLCAweDgxMDgsIDB4MDBmMCwgMHg0N2Y1LCAweDBjN2YsIDB4MTU3ZiwgMHgxMDc4LAotCTB4NDg5NywgMHgwMDQwLCAweDQ4MTgsIDB4MjAwMSwgMHhhNTlmLCAweDIwMGMsIDB4MDA3OCwgMHg0ODIwLAotCTB4MjA3OSwgMHhhMzUxLCAweDc4MDQsIDB4ZDBhNCwgMHgwMDQwLCAweDQ4MjQsIDB4MjAwOSwgMHgwN2QwLAotCTB4MjAxMSwgMHg0ODI2LCAweDEwNzgsIDB4NTk2YywgMHgwZjdmLCAweDAwN2MsIDB4MjAxMSwgMHg0ODI2LAotCTB4MTA3OCwgMHg1OGQ0LCAweDEwNzgsIDB4NDg5NywgMHgwMDQwLCAweDQ4NGUsIDB4MjAwMSwgMHhhNGIyLAotCTB4MjAwNCwgMHhhMDgwLCAweDAwMDAsIDB4MjAwYywgMHhjMWVjLCAweDIxMDIsIDB4MjAwMSwgMHhhMzUyLAotCTB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4NDg0MiwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg0ODI2LAotCTB4MTA3OCwgMHg1OTZjLCAweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDcwNmIsIDB4MDAwMCwgMHg3MDZmLAotCTB4MDAwMCwgMHgxMDc4LCAweDI2MGQsIDB4MGU3ZiwgMHgwMDc4LCAweDQ4ODYsIDB4MTU3ZSwgMHgwYzdlLAotCTB4MjBhOSwgMHgwMDdmLCAweDIwMDksIDB4MDAwMCwgMHgwMTdlLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLAotCTB4NDg4MCwgMHg2MDAwLCAweGQwZWMsIDB4MDA0MCwgMHg0ODgwLCAweDA0N2UsIDB4NjJhMCwgMHhhMjk0LAotCTB4MDBmZiwgMHg4MjI3LCAweGEwMDYsIDB4MjAwOSwgMHgwMDI5LCAweDEwNzgsIDB4OWVjMCwgMHg2MDAwLAotCTB4YzBlNSwgMHhjMGVjLCAweDYwMDIsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NSwgMHgwNzAwLAotCTB4NjAwNiwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwgMHgwMDAwLAotCTB4MTA3OCwgMHg1Yzc4LCAweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDljMzgsIDB4MDc3ZiwgMHgwNDdmLAotCTB4MDE3ZiwgMHg4MTA4LCAweDAwZjAsIDB4NDg1NCwgMHgwYzdmLCAweDE1N2YsIDB4MDA3YywgMHgwYzdlLAotCTB4NjAxOCwgMHgyMDYwLCAweDYwMDAsIDB4YzBlYywgMHg2MDAyLCAweDBjN2YsIDB4MDA3YywgMHg3ODE4LAotCTB4MjAwNCwgMHhkMGFjLCAweDAwN2MsIDB4NzgxOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA3YywgMHgwZjdlLAotCTB4MjAwMSwgMHhhNGIyLCAweDIwMDQsIDB4YTA3ZCwgMHgwMDQwLCAweDQ4YTAsIDB4NzgwMCwgMHhkMGVjLAotCTB4MGY3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MDI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjIwMCwgMHhhMDA1LAotCTB4MDA0MCwgMHg0OGFkLCAweGMyZmQsIDB4MDA3OCwgMHg0OGFlLCAweGMyZmMsIDB4NjIwMiwgMHgwMjdmLAotCTB4MTI3ZiwgMHgwMDdjLCAweDIwNzEsIDB4YTQxMywgMHg3MDAzLCAweDAwMDEsIDB4NzAwNywgMHgwMDAwLAotCTB4NzAxMywgMHgwMDAwLCAweDcwMTcsIDB4MDAwMCwgMHg3MDFiLCAweDAwMDAsIDB4NzAxZiwgMHgwMDAwLAotCTB4NzAwYiwgMHgwMDAwLCAweDcwNGIsIDB4MDAwMSwgMHg3MDRmLCAweDAwMDAsIDB4NzA1YiwgMHgwMDIwLAotCTB4NzA1ZiwgMHgwMDQwLCAweDcwN2YsIDB4MDAwMCwgMHgyMDcxLCAweGE1N2MsIDB4NzAwMywgMHhhNDEzLAotCTB4NzAwNywgMHgwMDAwLCAweDcwMGIsIDB4MDAwMCwgMHg3MDBmLCAweGE1NWMsIDB4NzAxMywgMHgwMDIwLAotCTB4NzAxNywgMHgwMDQwLCAweDcwMzcsIDB4MDAwMCwgMHgwMDdjLCAweDAxN2UsIDB4MGU3ZSwgMHgyMDcxLAotCTB4YTUzNCwgMHhhMDBlLCAweDcxODYsIDB4NzE4YSwgMHg3MDk3LCAweDAwMDEsIDB4MjAwMSwgMHhhMzUyLAotCTB4MjAwNCwgMHhkMGZjLCAweDAwYzAsIDB4NDhmNywgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhhMDBlLAotCTB4ZDA5YywgMHgwMDQwLCAweDQ4ZjQsIDB4ODEwOCwgMHg3MTAyLCAweDAwNzgsIDB4NDk0YSwgMHgyMDAxLAotCTB4YTM3MSwgMHgyMDBjLCAweGExODQsIDB4MDAwZiwgMHgyMDA5LCAweGEzNzIsIDB4MjEwYywgMHgwMDc5LAotCTB4NDkwMSwgMHg0OGVjLCAweDQ5MjIsIDB4NDkyYSwgMHg0OTM1LCAweDQ5M2IsIDB4NDhlYywgMHg0OGVjLAotCTB4NDhlYywgMHg0OTExLCAweDQ4ZWMsIDB4NDhlYywgMHg0OGVjLCAweDQ4ZWMsIDB4NDhlYywgMHg0OGVjLAotCTB4NDhlYywgMHg3MDAzLCAweDAwMDQsIDB4MTM3ZSwgMHgxNDdlLCAweDE1N2UsIDB4MjA5OSwgMHhhMzc1LAotCTB4MjBhMSwgMHhhNTg1LCAweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDE1N2YsIDB4MTQ3ZiwgMHgxMzdmLAotCTB4MDA3OCwgMHg0OTRhLCAweDcwOGYsIDB4MDAwNSwgMHg3MDA3LCAweDAxMjIsIDB4MjAwMSwgMHgwMDAyLAotCTB4MDA3OCwgMHg0OTMwLCAweDcwOGYsIDB4MDAwMiwgMHg3MDA3LCAweDAxMjEsIDB4MjAwMSwgMHgwMDAzLAotCTB4NzAwMiwgMHg3MDk3LCAweDAwMDEsIDB4MDA3OCwgMHg0OTQ3LCAweDcwMDcsIDB4MDEyMiwgMHgyMDAxLAotCTB4MDAwMiwgMHgwMDc4LCAweDQ5M2YsIDB4NzAwNywgMHgwMTIxLCAweDIwMDEsIDB4MDAwMywgMHg3MDAyLAotCTB4YTAwNiwgMHg3MDk2LCAweDcwOGUsIDB4YTE4NCwgMHhmZjAwLCAweDgwMDcsIDB4NzA5YSwgMHhhMTg0LAotCTB4MDBmZiwgMHg3MDkyLCAweDBlN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhNDEzLAotCTB4Njg0YywgMHhhMDA1LCAweDAwYzAsIDB4NDk1YiwgMHg3MDI4LCAweGMwODUsIDB4NzAyYSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDc4LCAweDQ5ODAsIDB4NmE2MCwgMHg3MjM2LCAweDZiNjQsIDB4NzMzYSwgMHg2ODY4LAotCTB4NzAzZSwgMHg3MDc2LCAweDY4NmMsIDB4NzA0MiwgMHg3MDdhLCAweDY4NGMsIDB4NzAyZSwgMHg2ODQ0LAotCTB4NzAzMiwgMHgyMDA5LCAweDAwMGQsIDB4MjAwYSwgMHg3MDBiLCAweDAwMDAsIDB4ODAwNywgMHg4MDA2LAotCTB4ODAwNiwgMHhhMDhjLCAweDAwM2YsIDB4YTA4NCwgMHhmZmMwLCAweGEyMTAsIDB4MjEwMCwgMHhhMzE5LAotCTB4NzI2ZSwgMHg3MzcyLCAweDcwMjgsIDB4YzA4NCwgMHg3MDJhLCAweDcwMDcsIDB4MDAwMSwgMHhhMDA2LAotCTB4MGU3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MDI3ZSwgMHg2ODM4LCAweGQwZmMsIDB4MDBjMCwgMHg0OWQ4LAotCTB4NjgwNCwgMHhhMDBkLCAweDAwNDAsIDB4NDk5ZSwgMHgwZDdlLCAweDIwNzEsIDB4YTMwMCwgMHhhMDE2LAotCTB4NzAyYywgMHgyMTY4LCAweDY5MDQsIDB4MjA2YSwgMHg4MjEwLCAweDJkMDAsIDB4ODFmZiwgMHgwMGMwLAotCTB4NDk5MSwgMHg3MDJlLCAweDcwYTgsIDB4YTIwMCwgMHg3MGFhLCAweDBkN2YsIDB4MjA3MSwgMHhhNDEzLAotCTB4NzAxYywgMHhhMDA1LCAweDAwYzAsIDB4NDllYSwgMHgwMDY4LCAweDQ5ZTgsIDB4MjA3MSwgMHhhNTM0LAotCTB4NzIwMCwgMHg4MmZmLCAweDAwNDAsIDB4NDllOCwgMHg2OTM0LCAweGExODYsIDB4MDEwMywgMHgwMGMwLAotCTB4NDlmYiwgMHg2OTQ4LCAweDY4NDQsIDB4YTEwNSwgMHgwMGMwLCAweDQ5ZGIsIDB4MjAwOSwgMHg4MDIwLAotCTB4MjIwMCwgMHgwMDc5LCAweDQ5YmIsIDB4NDllOCwgMHg0OWMwLCAweDRhMTgsIDB4NGEyNiwgMHg0OWU4LAotCTB4MjA3MSwgMHgwMDAwLCAweDcwMTgsIDB4ZDA4NCwgMHgwMGMwLCAweDQ5ZTgsIDB4NzEyMiwgMHg2ODNjLAotCTB4NzAyNiwgMHg2ODQwLCAweDcwMmEsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgyMDcxLAotCTB4YTMwMCwgMHg3MDJjLCAweDIwNmEsIDB4MmQwMCwgMHg3MDJlLCAweDcwYTgsIDB4ODAwMCwgMHg3MGFhLAotCTB4MDI3ZiwgMHgwZTdmLCAweDAwN2MsIDB4Njg0NCwgMHhhMDg2LCAweDAxMDAsIDB4MDBjMCwgMHg0OWU4LAotCTB4Njg2OCwgMHhhMDA1LCAweDAwYzAsIDB4NDllOCwgMHgyMDA5LCAweDgwMjAsIDB4MDA3OCwgMHg0OWI4LAotCTB4MjA3MSwgMHhhNDEzLCAweDJkMDgsIDB4MjA2YiwgMHgwMDAwLCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLAotCTB4NzAxOCwgMHhhMDZkLCAweDcxMWEsIDB4MDA0MCwgMHg0OWY4LCAweDY5MDIsIDB4MDA3OCwgMHg0OWY5LAotCTB4NzExZSwgMHgwMDc4LCAweDQ5ZDgsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAxNywgMHgwMDQwLAotCTB4NGEwOSwgMHhhMTg2LCAweDAwMWUsIDB4MDA0MCwgMHg0YTA5LCAweGExOGUsIDB4MDAxZiwgMHgwMGMwLAotCTB4NDllOCwgMHg2ODRjLCAweGQwY2MsIDB4MDA0MCwgMHg0OWU4LCAweDY4NTAsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4NDllOCwgMHgyMDA5LCAweDgwMjEsIDB4MDA3OCwgMHg0OWI4LAotCTB4NzA4NCwgMHg4MDA4LCAweGEwOTIsIDB4MDAxZSwgMHgwMGM4LCAweDQ5ZTgsIDB4NzE4NiwgMHhhZTkwLAotCTB4MDAwMywgMHhhMjEwLCAweDY4M2MsIDB4MjAxMiwgMHgwMDc4LCAweDRhMzYsIDB4NzA4NCwgMHg4MDA4LAotCTB4YTA5MiwgMHgwMDBmLCAweDAwYzgsIDB4NDllOCwgMHg3MTg2LCAweGFlOTAsIDB4MDAwMywgMHg4MDAzLAotCTB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4ODIxMCwgMHg2ODQwLCAweDIwMTIsIDB4NzA4OCwgMHhhMTBhLAotCTB4MDA0OCwgMHg0OWNmLCAweDcxOGMsIDB4NzA4NCwgMHhhMTBhLCAweDAwNDgsIDB4NDljZiwgMHgyMDcxLAotCTB4MDAwMCwgMHg3MDE4LCAweGQwODQsIDB4MDBjMCwgMHg0OWNmLCAweDIwNzEsIDB4YTUzNCwgMHg3MDAwLAotCTB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4NGE1NiwgMHgxMDc4LCAweDRjZDIsIDB4MjA3MSwgMHgwMDAwLAotCTB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgwMDc4LCAweDQ5Y2YsIDB4MTA3OCwgMHg0Y2ZkLAotCTB4MjA3MSwgMHgwMDAwLCAweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MDA3OCwgMHg0OWNmLAotCTB4MDA3ZSwgMHg2ODRjLCAweDAwN2UsIDB4NjgzNywgMHgwMTAzLCAweDIwYTksIDB4MDAxYywgMHhhZDgwLAotCTB4MDAxMSwgMHgyMGEwLCAweDIwMDEsIDB4MDAwMCwgMHg0MGE0LCAweDAwN2YsIDB4YTA4NCwgMHgwMGZmLAotCTB4Njg0ZSwgMHgwMDdmLCAweDY4NGEsIDB4Njk1MiwgMHgwMDdjLCAweDIwNzEsIDB4YTQxMywgMHg3MDA0LAotCTB4MDA3OSwgMHg0YTdhLCAweDRhODQsIDB4NGE5NSwgMHg0Y2EzLCAweDRjYTQsIDB4NGNjYiwgMHg0Y2QxLAotCTB4NGE4NSwgMHg0YzkxLCAweDRjMzIsIDB4NGNiNCwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDA2OCwgMHg0YTk0LCAweDIwMDksIDB4MDAwZCwgMHg3MDMwLCAweDIwMGEsIDB4MjA5MSwgMHg0MDgwLAotCTB4NzAwNywgMHgwMDAxLCAweDcwMGIsIDB4MDAwMCwgMHgxMjdmLCAweDIwNjksIDB4YTViZSwgMHg2ODQ0LAotCTB4YTAwNSwgMHgwMDUwLCAweDRhYmQsIDB4MDBjMCwgMHg0YWJkLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA2OSwgMHgwMDAwLCAweDY5MzQsIDB4MjAwMSwgMHhhNDFmLCAweDIwMDQsIDB4YTEwYSwgMHgwMDQwLAotCTB4NGFiOCwgMHgwMDY4LCAweDRhYmMsIDB4MjA2OSwgMHgwMDAwLCAweDY4MTgsIDB4ZDA4NCwgMHgwMGMwLAotCTB4NGFiYywgMHgyMDA5LCAweDgwNDAsIDB4NjkyMiwgMHg2ODFiLCAweDAwMDEsIDB4MjA5MSwgMHg0MDgwLAotCTB4MjA2OSwgMHhhNWJlLCAweDY4NDcsIDB4ZmZmZiwgMHgxMjdmLCAweDIwNjksIDB4YTMwMCwgMHg2ODQ0LAotCTB4Njk2MCwgMHhhMTAyLCAweDIwNjksIDB4YTUzNCwgMHg2ODhhLCAweDY5ODQsIDB4NzAxYywgMHhhMDZkLAotCTB4MDA0MCwgMHg0YWNmLCAweDgxZmYsIDB4MDA0MCwgMHg0YjE3LCAweDAwNzgsIDB4NGFlNSwgMHg4MWZmLAotCTB4MDA0MCwgMHg0YmU5LCAweDIwNzEsIDB4YTUzNCwgMHg3MTg0LCAweDcwODgsIDB4YTEwYSwgMHgwMGM4LAotCTB4NGFlNSwgMHg3MTkwLCAweDIwNzEsIDB4YTViZSwgMHg3MDQwLCAweGEwMDUsIDB4MDA0MCwgMHg0YWU1LAotCTB4MDBkMCwgMHg0YmU5LCAweDcxNDIsIDB4MDA3OCwgMHg0YmU5LCAweDIwNzEsIDB4YTUzNCwgMHg3MThjLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzA4NCwgMHhhMTBhLCAweDAwNDgsIDB4NGMwNiwgMHgwMDY4LAotCTB4NGI5YiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxOCwgMHhkMDg0LCAweDAwYzAsIDB4NGI5YiwgMHgyMDAxLAotCTB4ZmZmZiwgMHgyMDcxLCAweGE1YmUsIDB4NzA0MiwgMHgyMDcxLCAweGE1MzQsIDB4NzAwMCwgMHhhMDg2LAotCTB4MDAwMiwgMHgwMGMwLCAweDRiMGQsIDB4MTA3OCwgMHg0Y2QyLCAweDIwNzEsIDB4MDAwMCwgMHg3MDFiLAotCTB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MDA3OCwgMHg0YjliLCAweDEwNzgsIDB4NGNmZCwgMHgyMDcxLAotCTB4MDAwMCwgMHg3MDFiLCAweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDAwNzgsIDB4NGI5YiwgMHgyMDcxLAotCTB4YTUzNCwgMHg3MDAwLCAweGEwMDUsIDB4MDA0MCwgMHg0YmM4LCAweDY5MzQsIDB4YTE4NiwgMHgwMTAzLAotCTB4MDBjMCwgMHg0YjllLCAweDY4NGMsIDB4ZDBiYywgMHgwMGMwLCAweDRiYzgsIDB4Njk0OCwgMHg2ODQ0LAotCTB4YTEwNSwgMHgwMGMwLCAweDRiYmIsIDB4MjAwOSwgMHg4MDIwLCAweDIwNzEsIDB4YTUzNCwgMHg3MDAwLAotCTB4MDA3OSwgMHg0YjMyLCAweDRiYzgsIDB4NGI4MCwgMHg0YjU4LCAweDRiNmEsIDB4NGIzNywgMHgxMzdlLAotCTB4MTQ3ZSwgMHgxNTdlLCAweDIwOTksIDB4YTM3NSwgMHgyMGExLCAweGE1ODUsIDB4MjBhOSwgMHgwMDA0LAotCTB4NTNhMywgMHgxNTdmLCAweDE0N2YsIDB4MTM3ZiwgMHgyMDcxLCAweGE1N2MsIDB4YWQ4MCwgMHgwMDBmLAotCTB4NzAwZSwgMHg3MDEzLCAweDAwMDIsIDB4NzAwNywgMHgwMDAyLCAweDcwMGIsIDB4MDAwMCwgMHgyZTEwLAotCTB4MTA3OCwgMHgxM2QxLCAweDIwNzEsIDB4YTQxMywgMHg3MDA3LCAweDAwMDksIDB4MDA3OCwgMHg0YmU5LAotCTB4NzA4NCwgMHg4MDA4LCAweGEwOTIsIDB4MDAxZSwgMHgwMGM4LCAweDRiZTksIDB4YWU5MCwgMHgwMDAzLAotCTB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4NzE4NiwgMHgyMDcxLCAweGE0MTMsIDB4MTA3OCwgMHg0ZDViLAotCTB4MDA3OCwgMHg0YmU5LCAweDcwODQsIDB4ODAwOCwgMHhhMDkyLCAweDAwMGYsIDB4MDBjOCwgMHg0YmU5LAotCTB4YWU5MCwgMHgwMDAzLCAweDgwMDMsIDB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4ODIxMCwgMHg2ODQwLAotCTB4MjAxMiwgMHg3MTg2LCAweDIwNzEsIDB4YTQxMywgMHgxMDc4LCAweDRkNWIsIDB4MDA3OCwgMHg0YmU5LAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDA2OCwgMHg0YjliLCAweDIwNzEsIDB4MDAwMCwgMHg3MDE4LAotCTB4ZDA4NCwgMHgwMGMwLCAweDRiOWIsIDB4NzEyMiwgMHg2ODNjLCAweDcwMjYsIDB4Njg0MCwgMHg3MDJhLAotCTB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgxMjdmLCAweDIwNzEsIDB4YTQxMywgMHgxMDc4LAotCTB4NGQ1YiwgMHgwMDc4LCAweDRiZTksIDB4MTI3ZiwgMHgwMDc4LCAweDRiZTksIDB4YTE4YywgMHgwMGZmLAotCTB4YTE4NiwgMHgwMDE3LCAweDAwNDAsIDB4NGJhYywgMHhhMTg2LCAweDAwMWUsIDB4MDA0MCwgMHg0YmFjLAotCTB4YTE4ZSwgMHgwMDFmLCAweDAwYzAsIDB4NGJjOCwgMHg2ODRjLCAweGQwY2MsIDB4MDA0MCwgMHg0YmM4LAotCTB4Njg1MCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4NGJjOCwgMHgyMDA5LAotCTB4ODAyMSwgMHgwMDc4LCAweDRiMmQsIDB4Njg0NCwgMHhhMDg2LCAweDAxMDAsIDB4MDBjMCwgMHg0YmM4LAotCTB4Njg2OCwgMHhhMDA1LCAweDAwYzAsIDB4NGJjOCwgMHgyMDA5LCAweDgwMjAsIDB4MDA3OCwgMHg0YjJkLAotCTB4MjA3MSwgMHhhNDEzLCAweDEwNzgsIDB4NGQ2ZiwgMHgwMDQwLCAweDRiZTksIDB4MjA3MSwgMHhhNDEzLAotCTB4NzAwZiwgMHgwMDAxLCAweDY5MzQsIDB4YTE4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwMywgMHgwMGMwLAotCTB4NGJlMCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHg4MTAxLCAweDAwNDAsIDB4NGJlMCwgMHg3MTBlLAotCTB4NzAwNywgMHgwMDAzLCAweDEwNzgsIDB4NGQ4ZiwgMHg3MDUwLCAweGEwODYsIDB4MDEwMCwgMHgwMDQwLAotCTB4NGNhNCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGE0MTMsIDB4NzAwOCwgMHhhMDg2LAotCTB4MDAwMSwgMHgwMGMwLCAweDRjMDQsIDB4MDA2OCwgMHg0YzA0LCAweDIwMDksIDB4MDAwZCwgMHg3MDMwLAotCTB4MjAwYSwgMHgyMDkxLCAweDQwODAsIDB4NzAwYiwgMHgwMDAwLCAweDcwMDQsIDB4YTA4NiwgMHgwMDA2LAotCTB4MDBjMCwgMHg0YzA0LCAweDcwMDcsIDB4MDAwMSwgMHgxMjdmLCAweDAwN2MsIDB4MjA3MSwgMHhhNDEzLAotCTB4MTA3OCwgMHg0ZDZmLCAweDAwNDAsIDB4NGMyZiwgMHgyMDcxLCAweGE1MzQsIDB4NzA4NCwgMHg3MDBhLAotCTB4MjBhOSwgMHgwMDIwLCAweDIwOTksIDB4YTUzNSwgMHgyMGExLCAweGE1NWMsIDB4NTNhMywgMHg3MDg3LAotCTB4MDAwMCwgMHgyMDcxLCAweGE0MTMsIDB4MjA2OSwgMHhhNTdjLCAweDcwNmMsIDB4NjgyNiwgMHg3MDcwLAotCTB4NjgyYSwgMHg3MDc0LCAweDY4MmUsIDB4NzA3OCwgMHg2ODMyLCAweDJkMTAsIDB4MTA3OCwgMHgxM2QxLAotCTB4NzAwNywgMHgwMDA4LCAweDIwMDEsIDB4ZmZmZiwgMHgyMDcxLCAweGE1YmUsIDB4NzA0MiwgMHgxMjdmLAotCTB4MDA3OCwgMHg0YmU5LCAweDIwNjksIDB4YTU3YywgMHg2ODA4LCAweGEwOGUsIDB4MDAwMCwgMHgwMDQwLAotCTB4NGM5MCwgMHhhMDhlLCAweDAyMDAsIDB4MDA0MCwgMHg0YzhlLCAweGEwOGUsIDB4MDEwMCwgMHgwMGMwLAotCTB4NGM5MCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwMDY4LCAweDRjOGIsIDB4MjA2OSwgMHgwMDAwLAotCTB4NjgxOCwgMHhkMDg0LCAweDAwYzAsIDB4NGM4YiwgMHg3MDJjLCAweDcxMzAsIDB4ODEwOCwgMHhhMTAyLAotCTB4MDA0OCwgMHg0YzU5LCAweGEwMGUsIDB4NzAzNCwgMHg3MDZlLCAweDcwMzgsIDB4NzA3MiwgMHgwMDc4LAotCTB4NGM2MywgMHg3MDZjLCAweGEwODAsIDB4MDA0MCwgMHg3MDZlLCAweDAwYzgsIDB4NGM2MywgMHg3MDcwLAotCTB4YTA4MSwgMHgwMDAwLCAweDcwNzIsIDB4NzEzMiwgMHg2OTM2LCAweDcwMGIsIDB4MDAwMCwgMHgyMDAxLAotCTB4YTU1OSwgMHgyMDA0LCAweGEwMDUsIDB4MDBjMCwgMHg0YzgyLCAweDY5MzQsIDB4MjA2OSwgMHhhNTM0LAotCTB4Njg5YywgMHg2OTllLCAweDIwNjksIDB4YTViZSwgMHhhMTAyLCAweDAwYzAsIDB4NGM3YiwgMHg2ODQ0LAotCTB4YTAwNSwgMHgwMGQwLCAweDRjODksIDB4MjAwMSwgMHhhNTVhLCAweDIwMGMsIDB4ODEwZCwgMHg2OTQ2LAotCTB4MDA3OCwgMHg0Yzg5LCAweDIwMDksIDB4ODA0MCwgMHg2OTIyLCAweDY4MWIsIDB4MDAwMSwgMHgyMDkxLAotCTB4NDA4MCwgMHg3MDA3LCAweDAwMDEsIDB4MTI3ZiwgMHgwMDc4LCAweDRjOTAsIDB4NzAwNywgMHgwMDA1LAotCTB4MDA3YywgMHg3MDFjLCAweGEwNmQsIDB4MDA0MCwgMHg0Y2EyLCAweDEwNzgsIDB4NGQ2ZiwgMHgwMDQwLAotCTB4NGNhMiwgMHg3MDA3LCAweDAwMDMsIDB4MTA3OCwgMHg0ZDhmLCAweDcwNTAsIDB4YTA4NiwgMHgwMTAwLAotCTB4MDA0MCwgMHg0Y2E0LCAweDAwN2MsIDB4MDA3YywgMHg3MDUwLCAweGEwOWUsIDB4MDEwMCwgMHgwMGMwLAotCTB4NGNhZCwgMHg3MDA3LCAweDAwMDQsIDB4MDA3OCwgMHg0Y2NiLCAweGEwODYsIDB4MDIwMCwgMHgwMGMwLAotCTB4NGNiMywgMHg3MDA3LCAweDAwMDUsIDB4MDA3YywgMHgyMDAxLCAweGE1N2UsIDB4MjAwNCwgMHhhMDhlLAotCTB4MDEwMCwgMHgwMGMwLCAweDRjYzAsIDB4NzAwNywgMHgwMDAxLCAweDEwNzgsIDB4NGQ1YiwgMHgwMDdjLAotCTB4YTA4ZSwgMHgwMDAwLCAweDAwNDAsIDB4NGNiZiwgMHhhMDhlLCAweDAyMDAsIDB4MDBjMCwgMHg0Y2JmLAotCTB4NzAwNywgMHgwMDA1LCAweDAwN2MsIDB4MTA3OCwgMHg0ZDI1LCAweDcwMDYsIDB4MTA3OCwgMHg0ZDViLAotCTB4MDA3YywgMHgwMDdjLCAweDBlN2UsIDB4MTU3ZSwgMHgyMDcxLCAweGE1MzQsIDB4NzE4NCwgMHg4MWZmLAotCTB4MDA0MCwgMHg0Y2ZhLCAweGEwMDYsIDB4NzA4NiwgMHhhZTgwLCAweDAwMDMsIDB4MjA3MSwgMHgwMDAwLAotCTB4MjFhOCwgMHgyMDE0LCAweDcyMjYsIDB4ODAwMCwgMHgwMDcwLCAweDRjZjcsIDB4MjAxNCwgMHg3MjJhLAotCTB4ODAwMCwgMHgwMDcwLCAweDRjZjcsIDB4MjAxNCwgMHg3MjJlLCAweDgwMDAsIDB4MDA3MCwgMHg0Y2Y3LAotCTB4MjAxNCwgMHg3MjNhLCAweDgwMDAsIDB4MDA3MCwgMHg0Y2Y3LCAweDIwMTQsIDB4NzIzZSwgMHhhMTgwLAotCTB4ODAzMCwgMHg3MDIyLCAweDE1N2YsIDB4MGU3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MTU3ZSwgMHgyMDcxLAotCTB4YTUzNCwgMHg3MTg0LCAweDgxZmYsIDB4MDA0MCwgMHg0ZDIyLCAweGEwMDYsIDB4NzA4NiwgMHhhZTgwLAotCTB4MDAwMywgMHgyMDcxLCAweDAwMDAsIDB4MjFhOCwgMHgyMDE0LCAweDcyMjYsIDB4ODAwMCwgMHgyMDE0LAotCTB4NzIyYSwgMHg4MDAwLCAweDAwNzAsIDB4NGQxYiwgMHgyMDE0LCAweDcyM2EsIDB4ODAwMCwgMHgyMDE0LAotCTB4NzIzZSwgMHgwMDc4LCAweDRkMWYsIDB4MjAwMSwgMHg4MDIwLCAweDAwNzgsIDB4NGQyMSwgMHgyMDAxLAotCTB4ODA0MiwgMHg3MDIyLCAweDE1N2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcwMmMsIDB4NzEzMCwgMHg4MTA4LAotCTB4YTEwMiwgMHgwMDQ4LCAweDRkMzIsIDB4YTAwZSwgMHg3MDM0LCAweDcwNmUsIDB4NzAzOCwgMHg3MDcyLAotCTB4MDA3OCwgMHg0ZDNjLCAweDcwNmMsIDB4YTA4MCwgMHgwMDQwLCAweDcwNmUsIDB4MDBjOCwgMHg0ZDNjLAotCTB4NzA3MCwgMHhhMDgxLCAweDAwMDAsIDB4NzA3MiwgMHg3MTMyLCAweDcwMGMsIDB4ODAwMSwgMHg3MDBlLAotCTB4MDBjMCwgMHg0ZDUyLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDAwNjgsIDB4NGQ1NSwgMHgyMDAxLAotCTB4MDAwZCwgMHgyMTAyLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwMDEsIDB4NzAwYiwgMHgwMDAwLAotCTB4MTI3ZiwgMHgwMDdjLCAweDIwMDEsIDB4MDAwNywgMHgwMDdjLCAweDIwMDEsIDB4MDAwNiwgMHg3MDBiLAotCTB4MDAwMSwgMHgxMjdmLCAweDAwN2MsIDB4NzAxYywgMHhhMDZkLCAweDAwNDAsIDB4NGQ2ZSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweDJkMDQsIDB4NzAxZSwgMHhhMDA1LAotCTB4MDBjMCwgMHg0ZDZiLCAweDcwMWEsIDB4MTI3ZiwgMHgxMDc4LCAweDEzOWEsIDB4MDA3YywgMHgyMDE5LAotCTB4MDAwZCwgMHgyMzA0LCAweDIzMGMsIDB4YTEwZSwgMHgwMDQwLCAweDRkN2UsIDB4MjMwNCwgMHgyMzBjLAotCTB4YTEwZSwgMHgwMDQwLCAweDRkN2UsIDB4YTAwNiwgMHgwMDc4LCAweDRkOGUsIDB4NzMyYywgMHg4MzE5LAotCTB4NzEzMCwgMHhhMTAyLCAweDAwYzAsIDB4NGQ4OCwgMHgyMzAwLCAweGEwMDUsIDB4MDA3OCwgMHg0ZDhlLAotCTB4MDA0OCwgMHg0ZDhkLCAweGEzMDIsIDB4MDA3OCwgMHg0ZDhlLCAweDgwMDIsIDB4MDA3YywgMHgyZDAwLAotCTB4NzAyNiwgMHhhMDgwLCAweDAwMGQsIDB4NzA1NiwgMHg3MDUzLCAweDAwMDAsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDA5LCAweGE1ZDAsIDB4MjEwNCwgMHhjMDhkLCAweDIwMGEsIDB4MTI3ZiwgMHgxMDc4LAotCTB4MTNlYiwgMHgwMDdjLCAweDIwNzEsIDB4YTNlMSwgMHg3MDAzLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLAotCTB4NzAwZiwgMHgwMDAwLCAweDcwMmIsIDB4MDAwMSwgMHg3MDRmLCAweDAwMDAsIDB4NzA1MywgMHgwMDAxLAotCTB4NzA1ZiwgMHgwMDIwLCAweDcwNjMsIDB4MDA0MCwgMHg3MDgzLCAweDAwMDAsIDB4NzA4YiwgMHgwMDAwLAotCTB4NzA4ZiwgMHgwMDAxLCAweDcwYmYsIDB4MDAwMCwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhM2UxLAotCTB4Njg0OCwgMHhhMDA1LCAweDAwYzAsIDB4NGRjYiwgMHg3MDI4LCAweGMwODUsIDB4NzAyYSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDc4LCAweDRkZjAsIDB4NmE1MCwgMHg3MjM2LCAweDZiNTQsIDB4NzMzYSwgMHg2ODU4LAotCTB4NzAzZSwgMHg3MDdhLCAweDY4NWMsIDB4NzA0MiwgMHg3MDdlLCAweDY4NDgsIDB4NzAyZSwgMHg2ODQwLAotCTB4NzAzMiwgMHgyMDA5LCAweDAwMGMsIDB4MjAwYSwgMHg4MDA3LCAweDgwMDYsIDB4ODAwNiwgMHhhMDhjLAotCTB4MDAzZiwgMHhhMDg0LCAweGZmYzAsIDB4YTIxMCwgMHgyMTAwLCAweGEzMTksIDB4NzI3MiwgMHg3Mzc2LAotCTB4NzAyOCwgMHhjMDg0LCAweDcwMmEsIDB4NzAwNywgMHgwMDAxLCAweDcwMGYsIDB4MDAwMCwgMHhhMDA2LAotCTB4MGU3ZiwgMHgwMDdjLCAweDJiNzgsIDB4MjA3MSwgMHhhM2UxLCAweDcwMDQsIDB4MTA3OSwgMHg0ZTUwLAotCTB4NzAwYywgMHgwMDc5LCAweDRkZmIsIDB4NGUwMCwgMHg0ZGY1LCAweDRkZjUsIDB4NGRmNSwgMHg0ZGY1LAotCTB4MDA3YywgMHg3MDBjLCAweDAwNzksIDB4NGUwNCwgMHg0ZTA5LCAweDRlNGUsIDB4NGU0ZSwgMHg0ZTRmLAotCTB4NGU0ZiwgMHg3ODMwLCAweDc5MzAsIDB4YTEwNiwgMHgwMDQwLCAweDRlMTMsIDB4NzgzMCwgMHg3OTMwLAotCTB4YTEwNiwgMHgwMGMwLCAweDRlMzksIDB4NzAzMCwgMHhhMTBhLCAweDAwNDAsIDB4NGUzOSwgMHgwMGM4LAotCTB4NGUxYiwgMHg3MTJjLCAweGExMGEsIDB4YTE4YSwgMHgwMDAyLCAweDAwYzgsIDB4NGUzYSwgMHgxMDc4LAotCTB4MTM2NiwgMHgwMDQwLCAweDRlMzksIDB4MmQwMCwgMHg3MDVhLCAweDcwNjMsIDB4MDA0MCwgMHgyMDAxLAotCTB4MDAwMywgMHg3MDU3LCAweDAwMDAsIDB4MTI3ZSwgMHgwMDdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LAotCTB4YTVkMCwgMHgyMTA0LCAweGMwODUsIDB4MjAwYSwgMHgwMDdmLCAweDcwMGUsIDB4MTI3ZiwgMHgxMDc4LAotCTB4MTNlYiwgMHgwMDdjLCAweDEwNzgsIDB4MTM2NiwgMHgwMDQwLCAweDRlMzksIDB4MmQwMCwgMHg3MDVhLAotCTB4MTA3OCwgMHgxMzY2LCAweDAwYzAsIDB4NGU0NiwgMHgwMDc4LCAweDRlMjUsIDB4MmQwMCwgMHg3MDg2LAotCTB4NzA2MywgMHgwMDgwLCAweDIwMDEsIDB4MDAwNCwgMHgwMDc4LCAweDRlMjksIDB4MDA3YywgMHgwMDdjLAotCTB4NGU2MSwgMHg0ZTYyLCAweDRlOTksIDB4NGU5YSwgMHg0ZTRlLCAweDRlZDAsIDB4NGVkNSwgMHg0ZjBjLAotCTB4NGYwZCwgMHg0ZjI4LCAweDRmMjksIDB4NGYyYSwgMHg0ZjJiLCAweDRmMmMsIDB4NGYyZCwgMHg0ZmFkLAotCTB4NGZkNywgMHgwMDdjLCAweDcwMGMsIDB4MDA3OSwgMHg0ZTY1LCAweDRlNmEsIDB4NGU2ZCwgMHg0ZTdkLAotCTB4NGU5OCwgMHg0ZTk4LCAweDEwNzgsIDB4NGUwMSwgMHgwMDdjLCAweDEyN2UsIDB4ODAwMSwgMHg3MDBlLAotCTB4NzA1OCwgMHgwMDdlLCAweDEwNzgsIDB4NTM0OCwgMHgwMDQwLCAweDRlN2EsIDB4MjA5MSwgMHg4MDAwLAotCTB4MTA3OCwgMHg0ZTAxLCAweDBkN2YsIDB4MDA3OCwgMHg0ZTg2LCAweDEyN2UsIDB4ODAwMSwgMHg3MDBlLAotCTB4MTA3OCwgMHg1MzQ4LCAweDcwNTgsIDB4MjA2OCwgMHg3MDg0LCAweDcwNWEsIDB4NjgwMywgMHgwMDAwLAotCTB4NjgwNywgMHgwMDAwLCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLCAweGEwOGEsIDB4MDAyMCwgMHgwMGM4LAotCTB4NGU5NSwgMHgxMDc5LCAweDRlYjAsIDB4MTI3ZiwgMHgwMDdjLCAweDEyN2YsIDB4MTA3OCwgMHg0ZjJlLAotCTB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzZTEsIDB4NzAwYywgMHgwMDc5LAotCTB4NGVhMSwgMHg0ZWE2LCAweDRlYTYsIDB4NGVhNiwgMHg0ZWE4LCAweDRlYWMsIDB4MGU3ZiwgMHgwMDdjLAotCTB4NzAwZiwgMHgwMDAxLCAweDAwNzgsIDB4NGVhZSwgMHg3MDBmLCAweDAwMDIsIDB4MGU3ZiwgMHgwMDdjLAotCTB4NGYyZSwgMHg0ZjJlLCAweDRmNGEsIDB4NGYyZSwgMHg1MDgwLCAweDRmMmUsIDB4NGYyZSwgMHg0ZjJlLAotCTB4NGYyZSwgMHg0ZjJlLCAweDRmNGEsIDB4NTBjYSwgMHg1MTE3LCAweDUxNzAsIDB4NTE4NiwgMHg0ZjJlLAotCTB4NGYyZSwgMHg0ZjY2LCAweDRmNGEsIDB4NGYyZSwgMHg0ZjJlLCAweDRmODcsIDB4NTI0NSwgMHg1MjYzLAotCTB4NGYyZSwgMHg0ZjY2LCAweDRmMmUsIDB4NGYyZSwgMHg0ZjJlLCAweDRmMmUsIDB4NGY3YywgMHg1MjYzLAotCTB4NzAyMCwgMHgyMDY4LCAweDEwNzgsIDB4MTM5YSwgMHgwMDdjLCAweDcwMGMsIDB4MDA3OSwgMHg0ZWQ4LAotCTB4NGVkZCwgMHg0ZWUwLCAweDRlZjAsIDB4NGYwYiwgMHg0ZjBiLCAweDEwNzgsIDB4NGUwMSwgMHgwMDdjLAotCTB4MTI3ZSwgMHg4MDAxLCAweDcwMGUsIDB4NzA1OCwgMHgwMDdlLCAweDEwNzgsIDB4NTM0OCwgMHgwMDQwLAotCTB4NGVlZCwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg0ZTAxLCAweDBkN2YsIDB4MDA3OCwgMHg0ZWY5LAotCTB4MTI3ZSwgMHg4MDAxLCAweDcwMGUsIDB4MTA3OCwgMHg1MzQ4LCAweDcwNTgsIDB4MjA2OCwgMHg3MDg0LAotCTB4NzA1YSwgMHg2ODAzLCAweDAwMDAsIDB4NjgwNywgMHgwMDAwLCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4YSwgMHgwMDFhLCAweDAwYzgsIDB4NGYwOCwgMHgxMDc5LCAweDRmMGUsIDB4MTI3ZiwgMHgwMDdjLAotCTB4MTI3ZiwgMHgxMDc4LCAweDRmMmUsIDB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4NGYyZSwgMHg0ZjRhLAotCTB4NTA2YSwgMHg0ZjJlLCAweDRmNGEsIDB4NGYyZSwgMHg0ZjRhLCAweDRmNGEsIDB4NGYyZSwgMHg0ZjRhLAotCTB4NTA2YSwgMHg0ZjRhLCAweDRmNGEsIDB4NGY0YSwgMHg0ZjRhLCAweDRmNGEsIDB4NGYyZSwgMHg0ZjRhLAotCTB4NTA2YSwgMHg0ZjJlLCAweDRmMmUsIDB4NGY0YSwgMHg0ZjJlLCAweDRmMmUsIDB4NGYyZSwgMHg0ZjRhLAotCTB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4NzAwNywgMHgwMDAxLAotCTB4NjgzOCwgMHhhMDg0LCAweDAwZmYsIDB4YzBkNSwgMHg2ODNhLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MTA3OCwgMHg0OTgyLCAweDEyN2YsIDB4MDA3YywgMHg3MDA3LCAweDAwMDEsIDB4NjgzOCwgMHhhMDg0LAotCTB4MDBmZiwgMHhjMGU1LCAweDY4M2EsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg0OTgyLAotCTB4MTI3ZiwgMHgwMDdjLCAweDcwMDcsIDB4MDAwMSwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwgMHhjMGVkLAotCTB4NjgzYSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDQ5ODIsIDB4MTI3ZiwgMHgwMDdjLAotCTB4NzAwNywgMHgwMDAxLCAweDY4MzgsIDB4YTA4NCwgMHgwMGZmLCAweGMwZGQsIDB4NjgzYSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDk4MiwgMHgxMjdmLCAweDAwN2MsIDB4NjgzNCwgMHg4MDA3LAotCTB4YTA4NCwgMHgwMGZmLCAweDAwNDAsIDB4NGYzYywgMHg4MDAxLCAweDAwYzAsIDB4NGY3MywgMHg3MDA3LAotCTB4MDAwMSwgMHgwMDc4LCAweDUwNDksIDB4NzAwNywgMHgwMDA2LCAweDcwMTIsIDB4MmQwMCwgMHg3MDE2LAotCTB4NzAxYSwgMHg3MDRiLCAweDUwNDksIDB4MDA3YywgMHg2ODRjLCAweGEwODQsIDB4MDBjMCwgMHhhMDg2LAotCTB4MDBjMCwgMHgwMGMwLCAweDRmODcsIDB4NzAwNywgMHgwMDAxLCAweDAwNzgsIDB4NTI4MCwgMHgyZDAwLAotCTB4NzAxNiwgMHg3MDFhLCAweDIwYTksIDB4MDAwNCwgMHhhMDgwLCAweDAwMjQsIDB4MjA5OCwgMHgyMGExLAotCTB4YTQwYywgMHg1M2EzLCAweDY4NTgsIDB4NzAxMiwgMHhhMDgyLCAweDA0MDEsIDB4MDBjOCwgMHg0ZjU4LAotCTB4Njg4NCwgMHhhMDhhLCAweDAwMDIsIDB4MDBjOCwgMHg0ZjU4LCAweDgyZmYsIDB4MDBjMCwgMHg0ZmE5LAotCTB4Njg4OCwgMHg2OThjLCAweGExMDUsIDB4MDA0MCwgMHg0ZmE5LCAweDIwMDEsIDB4NTAxOSwgMHgwMDc4LAotCTB4NGZhYywgMHhhMjgwLCAweDUwMGYsIDB4MjAwNCwgMHg3MGM2LCAweDcwMTAsIDB4YTAxNSwgMHgwMDQwLAotCTB4NGZmNywgMHgxMDc4LCAweDEzNjYsIDB4MDBjMCwgMHg0ZmI4LCAweDcwMDcsIDB4MDAwZiwgMHgwMDdjLAotCTB4MmQwMCwgMHg3MDIyLCAweDcwYzQsIDB4MjA2MCwgMHg2MDAwLCAweDY4MzYsIDB4NjAwNCwgMHhhZDAwLAotCTB4NzA5NiwgMHg2MDA4LCAweGEyMGEsIDB4MDBjOCwgMHg0ZmM3LCAweGEwMGUsIDB4MjIwMCwgMHg3MTEyLAotCTB4NjIwYywgMHg4MDAzLCAweDgwMGIsIDB4YTI5NiwgMHgwMDA0LCAweDAwNDAsIDB4NGZkMCwgMHhhMTA4LAotCTB4NzE5YSwgMHg4MTBiLCAweDcxOWUsIDB4YWU5MCwgMHgwMDIyLCAweDEwNzgsIDB4MTNkMSwgMHg3MDkwLAotCTB4YTA4ZSwgMHgwMTAwLCAweDAwNDAsIDB4NGZlYiwgMHhhMDg2LCAweDAyMDAsIDB4MDA0MCwgMHg0ZmUzLAotCTB4NzAwNywgMHgwMDEwLCAweDAwN2MsIDB4NzAyMCwgMHgyMDY4LCAweDEwNzgsIDB4MTM5YSwgMHg3MDE0LAotCTB4MjA2OCwgMHgwMDc4LCAweDRmNTgsIDB4NzAyMCwgMHgyMDY4LCAweDcwMTgsIDB4NjgwMiwgMHg2ODA3LAotCTB4MDAwMCwgMHgyZDA4LCAweDIwNjgsIDB4NjkwNiwgMHg3MTFhLCAweDAwNzgsIDB4NGZhZCwgMHg3MDE0LAotCTB4MjA2OCwgMHg3MDA3LCAweDAwMDEsIDB4Njg4NCwgMHhhMDA1LCAweDAwYzAsIDB4NTAwNiwgMHg2ODg4LAotCTB4Njk4YywgMHhhMTA1LCAweDAwNDAsIDB4NTAwNiwgMHgxMDc4LCAweDUwMWQsIDB4NjgzNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDg2LCAweDAwMWUsIDB4MDA0MCwgMHg1MjgwLCAweDAwNzgsIDB4NTA0OSwgMHg1MDExLAotCTB4NTAxNSwgMHgwMDAyLCAweDAwMTEsIDB4MDAwNywgMHgwMDA0LCAweDAwMGEsIDB4MDAwZiwgMHgwMDA1LAotCTB4MDAwNiwgMHgwMDBhLCAweDAwMTEsIDB4MDAwNSwgMHgwMDA0LCAweDBmN2UsIDB4MGU3ZSwgMHgwYzdlLAotCTB4MDc3ZSwgMHgwNjdlLCAweDZmODgsIDB4NmU4YywgMHg2ODA0LCAweDIwNjAsIDB4YWNmMCwgMHgwMDIxLAotCTB4YWNmOCwgMHgwMDI3LCAweDIwMDksIDB4MDAwNSwgMHg3MDBjLCAweDc4MTYsIDB4NzAwOCwgMHg3ODEyLAotCTB4NzAwNCwgMHg3ODA2LCAweDcwMDAsIDB4NzgwMiwgMHg3ZTBlLCAweDdmMGEsIDB4ODEwOSwgMHgwMDQwLAotCTB4NTAzZiwgMHhhZWYyLCAweDAwMDQsIDB4YWZmYSwgMHgwMDA2LCAweDAwNzgsIDB4NTAyYywgMHg2MDA0LAotCTB4YTA2NSwgMHgwMGMwLCAweDUwMjYsIDB4MDY3ZiwgMHgwNzdmLCAweDBjN2YsIDB4MGU3ZiwgMHgwZjdmLAotCTB4MDA3YywgMHgyMDA5LCAweGEzMmUsIDB4MjEwYywgMHg4MWZmLCAweDAwYzAsIDB4NTA2NCwgMHg2ODM4LAotCTB4YTA4NCwgMHgwMGZmLCAweDY4M2EsIDB4MTA3OCwgMHg0MjkwLCAweDAwYzAsIDB4NTA1OCwgMHgwMDdjLAotCTB4MTA3OCwgMHg0YTYwLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4OGNiOCwgMHgxMDc4LAotCTB4NDk4MiwgMHgxMjdmLCAweDAwNzgsIDB4NTA1NywgMHgyMDAxLCAweDAwMjgsIDB4MjAwOSwgMHgwMDAwLAotCTB4MDA3OCwgMHg1MDU4LCAweDcwMTgsIDB4NjgwMiwgMHgyZDA4LCAweDIwNjgsIDB4NjkwNiwgMHg3MTFhLAotCTB4NzAxMCwgMHg4MDAxLCAweDcwMTIsIDB4MDA0MCwgMHg1MDc5LCAweDcwMDcsIDB4MDAwNiwgMHgwMDc4LAotCTB4NTA3ZiwgMHg3MDE0LCAweDIwNjgsIDB4NzAwNywgMHgwMDAxLCAweDcwNDgsIDB4MTA3YSwgMHgwMDdjLAotCTB4NzAwNywgMHgwMDAxLCAweDY5NDQsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4Njg0OCwgMHhhMDg0LAotCTB4MDBmZiwgMHgyMGE5LCAweDAwMDEsIDB4YTA5NiwgMHgwMDAxLCAweDAwNDAsIDB4NTBhOSwgMHgyMDA5LAotCTB4MDAwMCwgMHgyMGE5LCAweDAwZmYsIDB4YTA5NiwgMHgwMDAyLCAweDAwNDAsIDB4NTBhOSwgMHhhMDA1LAotCTB4MDBjMCwgMHg1MGJjLCAweDY5NDQsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4MTA3OCwgMHg0NTAxLAotCTB4MDBjMCwgMHg1MGJjLCAweDA2N2UsIDB4NmU1MCwgMHgxMDc4LCAweDQ1ZTcsIDB4MDY3ZiwgMHgwMDc4LAotCTB4NTBiYywgMHgwNDdlLCAweDIwMTEsIDB4YTMwYywgMHgyMjI0LCAweGM0ODQsIDB4YzQ4YywgMHgyNDEyLAotCTB4MDQ3ZiwgMHgwYzdlLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDUwYjgsIDB4MTA3OCwgMHg0NzgyLAotCTB4ODEwOCwgMHgwMGYwLCAweDUwYjIsIDB4MGM3ZiwgMHg2ODRjLCAweGQwODQsIDB4MDBjMCwgMHg1MGMzLAotCTB4MTA3OCwgMHgxMzlhLCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg0OTgyLAotCTB4MTI3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHgyMDAxLAotCTB4YTM1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDA0MCwgMHg1MTBlLCAweDIwNjEsIDB4YTYyZCwgMHg2MTAwLAotCTB4ZDE4NCwgMHgwMDQwLCAweDUwZWUsIDB4Njg1OCwgMHhhMDg0LCAweDAwZmYsIDB4MDBjMCwgMHg1MTExLAotCTB4NjAwMCwgMHhkMDg0LCAweDAwNDAsIDB4NTEwZSwgMHg2MDA0LCAweGEwMDUsIDB4MDBjMCwgMHg1MTE0LAotCTB4NjAwMywgMHgwMDAwLCAweDYwMGIsIDB4MDAwMCwgMHgwMDc4LCAweDUxMGIsIDB4MjAxMSwgMHgwMDAxLAotCTB4Njg2MCwgMHhhMDA1LCAweDAwYzAsIDB4NTBmNiwgMHgyMDAxLCAweDAwMWUsIDB4ODAwMCwgMHg2MDE2LAotCTB4Njg1OCwgMHhhMDg0LCAweDAwZmYsIDB4MDA0MCwgMHg1MTBlLCAweDYwMDYsIDB4Njg1OCwgMHg4MDA3LAotCTB4YTA4NCwgMHgwMGZmLCAweDAwNDAsIDB4NTEwZSwgMHg2MDBhLCAweDY4NTgsIDB4ODAwMCwgMHgwMGMwLAotCTB4NTEwYSwgMHhjMjhkLCAweDYyMDIsIDB4MTI3ZiwgMHgwMDc4LCAweDUzMzcsIDB4MTI3ZiwgMHgwMDc4LAotCTB4NTMyZiwgMHgxMjdmLCAweDAwNzgsIDB4NTMyNywgMHgxMjdmLCAweDAwNzgsIDB4NTMyYiwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGE0LAotCTB4MDA0MCwgMHg1MTZkLCAweDIwNjEsIDB4YTYyZCwgMHg2MDAwLCAweGQwODQsIDB4MDA0MCwgMHg1MTZkLAotCTB4NjIwNCwgMHg2MzA4LCAweGQwOGMsIDB4MDBjMCwgMHg1MTVmLCAweDZjNDgsIDB4YTQ4NCwgMHgwMDAzLAotCTB4MDA0MCwgMHg1MTQ1LCAweDY5NTgsIDB4YTE4YywgMHgwMGZmLCAweDgwMDEsIDB4MDBjMCwgMHg1MTNlLAotCTB4MjEwMCwgMHhhMjEwLCAweDAwNDgsIDB4NTE2YSwgMHgwMDc4LCAweDUxNDUsIDB4ODAwMSwgMHgwMGMwLAotCTB4NTE2YSwgMHgyMTAwLCAweGEyMTIsIDB4MDA0OCwgMHg1MTZhLCAweGE0ODQsIDB4MDAwYywgMHgwMDQwLAotCTB4NTE1ZiwgMHg2OTU4LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweGEwODIsIDB4MDAwNCwgMHgwMGMwLAotCTB4NTE1NywgMHgyMTAwLCAweGEzMTgsIDB4MDA0OCwgMHg1MTZhLCAweDAwNzgsIDB4NTE1ZiwgMHhhMDgyLAotCTB4MDAwNCwgMHgwMGMwLCAweDUxNmEsIDB4MjEwMCwgMHhhMzFhLCAweDAwNDgsIDB4NTE2YSwgMHg2ODYwLAotCTB4YTAwNSwgMHgwMDQwLCAweDUxNjUsIDB4ODAwMCwgMHg2MDE2LCAweDYyMDYsIDB4NjMwYSwgMHgxMjdmLAotCTB4MDA3OCwgMHg1MzM3LCAweDEyN2YsIDB4MDA3OCwgMHg1MzMzLCAweDEyN2YsIDB4MDA3OCwgMHg1MzJmLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzAwNywgMHgwMDAxLCAweDIwNjEsIDB4YTYyZCwgMHg2MzAwLAotCTB4ZDM4YywgMHgwMGMwLCAweDUxODAsIDB4NjMwOCwgMHg4MzE4LCAweDAwNDgsIDB4NTE4MywgMHg2MzBhLAotCTB4MTI3ZiwgMHgwMDc4LCAweDUzNDUsIDB4MTI3ZiwgMHgwMDc4LCAweDUzMzMsIDB4MTI3ZSwgMHgwYzdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHg2ODRjLCAweGQwYWMsIDB4MDA0MCwgMHg1MTlhLAotCTB4MGM3ZSwgMHgyMDYxLCAweGE2MmQsIDB4NjAwMCwgMHhhMDg0LCAweGZjZmYsIDB4NjAwMiwgMHgwYzdmLAotCTB4MDA3OCwgMHg1MWM5LCAweDY4NTgsIDB4YTAwNSwgMHgwMDQwLCAweDUxZTAsIDB4Njg1YywgMHhhMDY1LAotCTB4MDA0MCwgMHg1MWRjLCAweDIwMDEsIDB4YTMyZSwgMHgyMDA0LCAweGEwMDUsIDB4MDA0MCwgMHg1MWFjLAotCTB4MTA3OCwgMHg4YzAxLCAweDAwNzgsIDB4NTFiYSwgMHg2MDEzLCAweDA0MDAsIDB4NjAzNywgMHgwMDAwLAotCTB4Njk0YywgMHhkMWE0LCAweDAwNDAsIDB4NTFiNiwgMHg2OTUwLCAweDYxMzYsIDB4MjAwOSwgMHgwMDQxLAotCTB4MTA3OCwgMHg3NTZjLCAweDY5NTgsIDB4YTE4YywgMHhmZjAwLCAweGExODYsIDB4MjAwMCwgMHgwMGMwLAotCTB4NTFjOSwgMHgwMjdlLCAweDIwMDksIDB4MDAwMCwgMHgyMDExLCAweGZkZmYsIDB4MTA3OCwgMHg1YTZkLAotCTB4MDI3ZiwgMHg2ODRjLCAweGQwYzQsIDB4MDA0MCwgMHg1MWQ4LCAweDIwNjEsIDB4YTYyZCwgMHg2MDAwLAotCTB4ZDA4YywgMHgwMGMwLCAweDUxZDgsIDB4NjAwOCwgMHg4MDAwLCAweDAwNDgsIDB4NTFkYywgMHg2MDBhLAotCTB4MGM3ZiwgMHgxMjdmLCAweDAwNzgsIDB4NTMzNywgMHgwYzdmLCAweDEyN2YsIDB4MDA3OCwgMHg1MzJmLAotCTB4Njk1NCwgMHhhMTg2LCAweDAwNDUsIDB4MDA0MCwgMHg1MjEzLCAweGExODYsIDB4MDAyYSwgMHgwMGMwLAotCTB4NTFmMCwgMHgyMDAxLCAweGEzMGMsIDB4MjAwYywgMHhjMTk0LCAweDIxMDIsIDB4MDA3OCwgMHg1MWM5LAotCTB4YTE4NiwgMHgwMDIwLCAweDAwNDAsIDB4NTIwOSwgMHhhMTg2LCAweDAwMjksIDB4MDA0MCwgMHg1MWZjLAotCTB4YTE4NiwgMHgwMDJkLCAweDAwYzAsIDB4NTFkYywgMHg2OTQ0LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4NTFjOSwgMHg2MDAwLCAweGMwZTQsIDB4NjAwMiwgMHgwMDc4LAotCTB4NTFjOSwgMHg2ODVjLCAweGEwNjUsIDB4MDA0MCwgMHg1MWRjLCAweDIwMDEsIDB4YTVhMSwgMHgyMDA0LAotCTB4NjAxNiwgMHgwMDc4LCAweDUxYzksIDB4Njg1YywgMHhhMDY1LCAweDAwNDAsIDB4NTFkYywgMHgwZTdlLAotCTB4Njg2MCwgMHhhMDc1LCAweDIwMDEsIDB4YTMyZSwgMHgyMDA0LCAweGEwMDUsIDB4MDA0MCwgMHg1MjJiLAotCTB4MTA3OCwgMHg4YzAxLCAweDhlZmYsIDB4MDA0MCwgMHg1MjI4LCAweDJlNjAsIDB4MTA3OCwgMHg4YzAxLAotCTB4MGU3ZiwgMHgwMDc4LCAweDUxYzksIDB4NjAyNCwgMHhjMGRjLCAweGMwZDUsIDB4NjAyNiwgMHgyZTYwLAotCTB4NjAwNywgMHgwMDNhLCAweDY4NzAsIDB4YTAwNSwgMHgwMDQwLCAweDUyM2MsIDB4NjAwNywgMHgwMDNiLAotCTB4Njg3NCwgMHg2MDJhLCAweDY4NzgsIDB4NjAxMiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwgMHg1YmY4LAotCTB4MTA3OCwgMHg2MTA5LCAweDBlN2YsIDB4MDA3OCwgMHg1MWM5LCAweDIwNjEsIDB4YTYyZCwgMHg2MDAwLAotCTB4ZDA4NCwgMHgwMDQwLCAweDUyNWYsIDB4ZDA4YywgMHgwMGMwLCAweDUzNDUsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjIwNCwgMHg4MjEwLCAweDAwNDgsIDB4NTI1OSwgMHg2MjA2LCAweDIwOTEsIDB4ODAwMSwgMHgwMDc4LAotCTB4NTM0NSwgMHgyMDkxLCAweDgwMDEsIDB4Njg1MywgMHgwMDE2LCAweDAwNzgsIDB4NTMzZSwgMHg2ODUzLAotCTB4MDAwNywgMHgwMDc4LCAweDUzM2UsIDB4NjgzNCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwgMHgwMGMwLAotCTB4NTI2ZCwgMHgxMDc4LCAweDRmM2MsIDB4MDA3OCwgMHg1MjdmLCAweDIwMzAsIDB4ODAwMSwgMHgwMGMwLAotCTB4NTI3NywgMHg3MDA3LCAweDAwMDEsIDB4MTA3OCwgMHg1MjgwLCAweDAwNzgsIDB4NTI3ZiwgMHg3MDA3LAotCTB4MDAwNiwgMHg3MDEyLCAweDJkMDAsIDB4NzAxNiwgMHg3MDFhLCAweDcwNGIsIDB4NTI4MCwgMHgwMDdjLAotCTB4MGU3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweGEzMmUsIDB4MjEwYywgMHg4MWZmLAotCTB4MDBjMCwgMHg1MzBiLCAweDIwMDksIDB4YTMwYywgMHgyMTBjLCAweGQxOTQsIDB4MDBjMCwgMHg1MzE1LAotCTB4Njg0OCwgMHgyMDcwLCAweGFlODIsIDB4YWEwMCwgMHgwMDQ4LCAweDUyZmIsIDB4MjAwMSwgMHhhMzE1LAotCTB4MjAwNCwgMHhhZTAyLCAweDAwYzgsIDB4NTJmYiwgMHgyMDYxLCAweGE2MmQsIDB4NjEwMCwgMHhhMTg0LAotCTB4MDMwMSwgMHhhMDg2LCAweDAwMDEsIDB4MDBjMCwgMHg1MmRlLCAweDcxMWMsIDB4YTE4NiwgMHgwMDA2LAotCTB4MDBjMCwgMHg1MmU2LCAweDcwMTgsIDB4YTAwNSwgMHgwMDQwLCAweDUzMGIsIDB4MjAwNCwgMHhkMGU0LAotCTB4MDBjMCwgMHg1MzBmLCAweDcwMjQsIDB4ZDBkYywgMHgwMGMwLCAweDUzMTksIDB4Njg1MywgMHgwMDAwLAotCTB4NjgwMywgMHgwMDAwLCAweDJkMDgsIDB4NzAxMCwgMHhhMDA1LCAweDAwYzAsIDB4NTJjYSwgMHg3MTEyLAotCTB4Njg0YywgMHhkMGY0LCAweDAwYzAsIDB4NTMxZCwgMHgyZTYwLCAweDEwNzgsIDB4NTliNiwgMHgxMjdmLAotCTB4MGU3ZiwgMHgwMDdjLCAweDIwNjgsIDB4NjgwMCwgMHhhMDA1LCAweDAwYzAsIDB4NTJjYSwgMHg2OTAyLAotCTB4MjE2OCwgMHg2ODRjLCAweGQwZjQsIDB4MDBjMCwgMHg1MzFkLCAweDEyN2YsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MTI3ZiwgMHgwZTdmLCAweDY4NTMsIDB4MDAwNiwgMHgwMDc4LCAweDUzM2UsIDB4ZDE4NCwgMHgwMDQwLAotCTB4NTJkOCwgMHhkMWM0LCAweDAwYzAsIDB4NTJmZiwgMHgwMDc4LCAweDUzMDMsIDB4Njk0NCwgMHhhMThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDUzMGYsIDB4NjAwMCwgMHhkMGU0LAotCTB4MDBjMCwgMHg1MzBmLCAweDcxMWMsIDB4YTE4NiwgMHgwMDA3LCAweDAwYzAsIDB4NTJmYiwgMHg2ODUzLAotCTB4MDAwMiwgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywgMHgwMDA4LCAweDAwNzgsIDB4NTMxMSwgMHg2ODUzLAotCTB4MDAwZSwgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywgMHgwMDE3LCAweDAwNzgsIDB4NTMxMSwgMHg2ODUzLAotCTB4MDAzNSwgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywgMHgwMDI4LCAweDAwNzgsIDB4NTMxMSwgMHg2ODUzLAotCTB4MDAyOSwgMHgxMjdmLCAweDBlN2YsIDB4MDA3OCwgMHg1MzNlLCAweDY4NTMsIDB4MDAyYSwgMHgwMDc4LAotCTB4NTMxMSwgMHg2ODUzLCAweDAwNDUsIDB4MDA3OCwgMHg1MzExLCAweDJlNjAsIDB4MjAxOSwgMHgwMDAyLAotCTB4NjAxNywgMHgwMDE0LCAweDEwNzgsIDB4OWE2YSwgMHgxMjdmLCAweDBlN2YsIDB4MDA3YywgMHgyMDA5LAotCTB4MDAzZSwgMHgwMDc4LCAweDUzMzksIDB4MjAwOSwgMHgwMDA0LCAweDAwNzgsIDB4NTMzOSwgMHgyMDA5LAotCTB4MDAwNiwgMHgwMDc4LCAweDUzMzksIDB4MjAwOSwgMHgwMDE2LCAweDAwNzgsIDB4NTMzOSwgMHgyMDA5LAotCTB4MDAwMSwgMHg2ODU0LCAweGEwODQsIDB4ZmYwMCwgMHhhMTA1LCAweDY4NTYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MTA3OCwgMHg0OTgyLCAweDIwOTEsIDB4ODAwMSwgMHgwMDdjLCAweDEwNzgsIDB4MTM5YSwgMHgwMDdjLAotCTB4NzAyYywgMHg3MTMwLCAweDgxMDgsIDB4YTEwMiwgMHgwMDQ4LCAweDUzNTUsIDB4YTAwZSwgMHg3MDM0LAotCTB4NzA3MiwgMHg3MDM4LCAweDcwNzYsIDB4MDA3OCwgMHg1MzYxLCAweDcwNzAsIDB4YTA4MCwgMHgwMDQwLAotCTB4NzA3MiwgMHgwMGM4LCAweDUzNjEsIDB4NzA3NCwgMHhhMDgxLCAweDAwMDAsIDB4NzA3NiwgMHhhMDg1LAotCTB4MDAwMSwgMHg3OTMyLCAweDcxMzIsIDB4MDA3YywgMHgwZDdlLCAweDEwNzgsIDB4NTlhZCwgMHgwZDdmLAotCTB4MDA3YywgMHgwZDdlLCAweDIwMTEsIDB4MDAwNCwgMHgyMjA0LCAweGEwODUsIDB4ODAwMiwgMHgyMDEyLAotCTB4MGQ3ZiwgMHgwMDdjLCAweDIwZTEsIDB4MDAwMiwgMHgzZDA4LCAweDIwZTEsIDB4MjAwMCwgMHgzZDAwLAotCTB4YTA4NCwgMHg3MDAwLCAweDAwNDAsIDB4NTM4MCwgMHhhMDg2LCAweDEwMDAsIDB4MDBjMCwgMHg1M2FjLAotCTB4MjBlMSwgMHgwMDAwLCAweDNkMDAsIDB4YTA5NCwgMHhmZjAwLCAweDgyMTcsIDB4YTA4NCwgMHhmMDAwLAotCTB4YTA4NiwgMHgzMDAwLCAweDAwYzAsIDB4NTM5MCwgMHgxMDc4LCAweDU1NzAsIDB4MDA3OCwgMHg1M2E3LAotCTB4MjBlMSwgMHgwMDA0LCAweDNkNjAsIDB4ZDFiYywgMHgwMGMwLCAweDUzOTcsIDB4M2U2MCwgMHhhYzg0LAotCTB4MDAwZiwgMHgwMGMwLCAweDUzYWMsIDB4YWM4MiwgMHhhYTAwLCAweDAwNDgsIDB4NTNhYywgMHg2ODU0LAotCTB4YWMwMiwgMHgwMGM4LCAweDUzYWMsIDB4MjAwOSwgMHgwMDQ3LCAweDEwNzgsIDB4NzU2YywgMHg3YTFjLAotCTB4ZDI4NCwgMHgwMGMwLCAweDUzNzIsIDB4MDA3YywgMHhhMDE2LCAweDEwNzgsIDB4MTVlYywgMHgwMDc4LAotCTB4NTNhNywgMHgwMDc4LCAweDUzYWMsIDB4NzgxYywgMHhkMDhjLCAweDAwNDAsIDB4NTNkYiwgMHgxNTdlLAotCTB4MTM3ZSwgMHgxNDdlLCAweDIwZTEsIDB4MzAwMCwgMHgzZDIwLCAweDNlMjgsIDB4YTU4NCwgMHgwMDc2LAotCTB4MDBjMCwgMHg1M2YxLCAweGE0ODQsIDB4NzAwMCwgMHhhMDg2LCAweDEwMDAsIDB4MDBjMCwgMHg1M2UwLAotCTB4MTA3OCwgMHg1NDBjLCAweDAwNDAsIDB4NTNmMSwgMHgyMGUxLCAweDMwMDAsIDB4NzgyOCwgMHg3ODI4LAotCTB4MTA3OCwgMHg1NDJhLCAweDE0N2YsIDB4MTM3ZiwgMHgxNTdmLCAweDIwMDksIDB4YTViMywgMHgyMTA0LAotCTB4YTAwNSwgMHgwMGMwLCAweDUzZGMsIDB4MDA3YywgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg1M2RiLAotCTB4YTQ4NCwgMHg3MDAwLCAweDAwYzAsIDB4NTNmMSwgMHgxMDc4LCAweDU0MGMsIDB4MDA0MCwgMHg1NDAzLAotCTB4NzAwMCwgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwgMHg4MTAwLCAweDAwNDAsIDB4NTNjYywgMHgwMDc4LAotCTB4NTQwMywgMHgxMDc4LCAweGExZWUsIDB4ZDVhNCwgMHgwMDQwLCAweDUzZmYsIDB4MTA3OCwgMHgxYWY3LAotCTB4MjBlMSwgMHg5MDEwLCAweDIwMDEsIDB4MDEzOCwgMHgyMjAyLCAweDAwNzgsIDB4NTQwNywgMHgxMDc4LAotCTB4NTQwYywgMHg2ODdmLCAweDAwMDAsIDB4MjBlMSwgMHgzMDAwLCAweDc4MjgsIDB4NzgyOCwgMHgxNDdmLAotCTB4MTM3ZiwgMHgxNTdmLCAweDAwNzgsIDB4NTNkYiwgMHhhNDg0LCAweDAxZmYsIDB4Njg3ZSwgMHhhMDA1LAotCTB4MDA0MCwgMHg1NDFlLCAweGEwODAsIDB4MDAxZiwgMHhhMDg0LCAweDAzZjgsIDB4ODBhYywgMHgyMGUxLAotCTB4MTAwMCwgMHgyZWEwLCAweDIwOTksIDB4MDIwYSwgMHg1M2E1LCAweDAwN2MsIDB4MjBhOSwgMHgwMDBjLAotCTB4MjBlMSwgMHgxMDAwLCAweDJlYTAsIDB4MjA5OSwgMHgwMjBhLCAweDUzYTUsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDA3OCwgMHg1NDFkLCAweDcwMDAsIDB4YTA4NCwgMHhmZjAwLCAweGEwOGMsIDB4ZjAwMCwgMHg4MDA3LAotCTB4YTE5NiwgMHgwMDAwLCAweDAwYzAsIDB4NTQzNywgMHgwMDc4LCAweDU2N2MsIDB4MDA3YywgMHhhMTk2LAotCTB4MjAwMCwgMHgwMGMwLCAweDU0NDgsIDB4NjkwMCwgMHhhMThlLCAweDAwMDEsIDB4MDBjMCwgMHg1NDQ0LAotCTB4MTA3OCwgMHgzYTQzLCAweDAwNzgsIDB4NTQzNiwgMHgxMDc4LCAweDU0NTAsIDB4MDA3OCwgMHg1NDM2LAotCTB4YTE5NiwgMHg4MDAwLCAweDAwYzAsIDB4NTQzNiwgMHgxMDc4LCAweDU3MGMsIDB4MDA3OCwgMHg1NDM2LAotCTB4MGM3ZSwgMHg3MTEwLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExOTYsIDB4MDAwMSwgMHgwMDQwLAotCTB4NTQ1ZCwgMHhhMTk2LCAweDAwMjMsIDB4MDBjMCwgMHg1NTY4LCAweGEwOGUsIDB4MDAyMywgMHgwMGMwLAotCTB4NTQ5MiwgMHgxMDc4LCAweDU3YjIsIDB4MDA0MCwgMHg1NTY4LCAweDcxMjQsIDB4NjEwYSwgMHg3MDMwLAotCTB4YTA4ZSwgMHgwMjAwLCAweDAwYzAsIDB4NTQ3NiwgMHg3MDM0LCAweGEwMDUsIDB4MDBjMCwgMHg1NTY4LAotCTB4MjAwOSwgMHgwMDE1LCAweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDU1NjgsIDB4YTA4ZSwgMHgwMjE0LAotCTB4MDA0MCwgMHg1NDdlLCAweGEwOGUsIDB4MDIxMCwgMHgwMGMwLCAweDU0ODQsIDB4MjAwOSwgMHgwMDE1LAotCTB4MTA3OCwgMHg3NTZjLCAweDAwNzgsIDB4NTU2OCwgMHhhMDhlLCAweDAxMDAsIDB4MDBjMCwgMHg1NTY4LAotCTB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTU2OCwgMHgyMDA5LCAweDAwMTYsIDB4MTA3OCwgMHg3NTZjLAotCTB4MDA3OCwgMHg1NTY4LCAweGEwOGUsIDB4MDAyMiwgMHgwMGMwLCAweDU1NjgsIDB4NzAzMCwgMHhhMDhlLAotCTB4MDMwMCwgMHgwMGMwLCAweDU0YTMsIDB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTU2OCwgMHgyMDA5LAotCTB4MDAxNywgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwgMHgwNTAwLCAweDAwYzAsIDB4NTRhZiwgMHg3MDM0LAotCTB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwgMHgwMDE4LCAweDAwNzgsIDB4NTUzNCwgMHhhMDhlLAotCTB4MjAxMCwgMHgwMGMwLCAweDU0YjcsIDB4MjAwOSwgMHgwMDE5LCAweDAwNzgsIDB4NTUzNCwgMHhhMDhlLAotCTB4MjExMCwgMHgwMGMwLCAweDU0YmYsIDB4MjAwOSwgMHgwMDFhLCAweDAwNzgsIDB4NTUzNCwgMHhhMDhlLAotCTB4NTIwMCwgMHgwMGMwLCAweDU0Y2IsIDB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTU2OCwgMHgyMDA5LAotCTB4MDAxYiwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwgMHg1MDAwLCAweDAwYzAsIDB4NTRkNywgMHg3MDM0LAotCTB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwgMHgwMDFjLCAweDAwNzgsIDB4NTUzNCwgMHhhMDhlLAotCTB4MTMwMCwgMHgwMGMwLCAweDU0ZGYsIDB4MjAwOSwgMHgwMDM0LCAweDAwNzgsIDB4NTUzNCwgMHhhMDhlLAotCTB4MTIwMCwgMHgwMGMwLCAweDU0ZWIsIDB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTU2OCwgMHgyMDA5LAotCTB4MDAyNCwgMHgwMDc4LCAweDU1MzQsIDB4YTA4YywgMHhmZjAwLCAweGExOGUsIDB4MjQwMCwgMHgwMGMwLAotCTB4NTRmNSwgMHgyMDA5LCAweDAwMmQsIDB4MDA3OCwgMHg1NTM0LCAweGEwOGMsIDB4ZmYwMCwgMHhhMThlLAotCTB4NTMwMCwgMHgwMGMwLCAweDU0ZmYsIDB4MjAwOSwgMHgwMDJhLCAweDAwNzgsIDB4NTUzNCwgMHhhMDhlLAotCTB4MGYwMCwgMHgwMGMwLCAweDU1MDcsIDB4MjAwOSwgMHgwMDIwLCAweDAwNzgsIDB4NTUzNCwgMHhhMDhlLAotCTB4NTMwMCwgMHgwMGMwLCAweDU1MGQsIDB4MDA3OCwgMHg1NTJhLCAweGEwOGUsIDB4NjEwNCwgMHgwMGMwLAotCTB4NTUyYSwgMHgyMDExLCAweGE4OGQsIDB4ODIwOCwgMHgyMjA0LCAweGEwODIsIDB4MDAwNCwgMHgyMGE4LAotCTB4OTVhYywgMHg5NWFjLCAweDIwMTEsIDB4ODAxNSwgMHgyMTFjLCAweDgxMDgsIDB4MDQ3ZSwgMHgyMTI0LAotCTB4MTA3OCwgMHgzNTc5LCAweDA0N2YsIDB4ODEwOCwgMHgwMGYwLCAweDU1MWEsIDB4MjAwOSwgMHgwMDIzLAotCTB4MDA3OCwgMHg1NTM0LCAweGEwOGUsIDB4NjAwMCwgMHgwMGMwLCAweDU1MzIsIDB4MjAwOSwgMHgwMDNmLAotCTB4MDA3OCwgMHg1NTM0LCAweDIwMDksIDB4MDAxZCwgMHgwMTdlLCAweDIwMTEsIDB4YTg4MywgMHgyMjA0LAotCTB4ODIxMSwgMHgyMjBjLCAweDEwNzgsIDB4MjRlMywgMHgwMGMwLCAweDU1NmEsIDB4MTA3OCwgMHg0NDk5LAotCTB4MDBjMCwgMHg1NTZhLCAweDY2MTIsIDB4NjUxNiwgMHg4NmZmLCAweDAwNDAsIDB4NTU1YSwgMHgwMTdmLAotCTB4MDE3ZSwgMHhhMTg2LCAweDAwMTcsIDB4MDBjMCwgMHg1NTVhLCAweDY4NjgsIDB4YTYwNiwgMHgwMGMwLAotCTB4NTU1YSwgMHg2ODZjLCAweGE1MDYsIDB4YTA4NCwgMHhmZjAwLCAweDAwYzAsIDB4NTU1YSwgMHg2MDAwLAotCTB4YzBmNSwgMHg2MDAyLCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDAwNDAsIDB4NTU2ZCwgMHgwMTdmLAotCTB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDAxN2YsIDB4MTA3OCwgMHg3NTZjLAotCTB4MGM3ZiwgMHgwMDdjLCAweDAxN2YsIDB4MDA3OCwgMHg1NTY4LCAweDBjN2YsIDB4MDA3OCwgMHg1NTZhLAotCTB4MGM3ZSwgMHgxMDc4LCAweDU1ZDQsIDB4MDBjMCwgMHg1NWQyLCAweGExODQsIDB4ZmYwMCwgMHg4MDA3LAotCTB4YTA4NiwgMHgwMDA4LCAweDAwYzAsIDB4NTVkMiwgMHhhMjhlLCAweDAwMzMsIDB4MDBjMCwgMHg1NWEzLAotCTB4MTA3OCwgMHg1N2IyLCAweDAwNDAsIDB4NTVkMiwgMHg3MTI0LCAweDYxMGEsIDB4NzAzMCwgMHhhMDhlLAotCTB4MDIwMCwgMHgwMGMwLCAweDU1OTUsIDB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTVkMiwgMHgyMDA5LAotCTB4MDAxNSwgMHgxMDc4LCAweDc1NmMsIDB4MDA3OCwgMHg1NWQyLCAweGEwOGUsIDB4MDEwMCwgMHgwMGMwLAotCTB4NTVkMiwgMHg3MDM0LCAweGEwMDUsIDB4MDBjMCwgMHg1NWQyLCAweDIwMDksIDB4MDAxNiwgMHgxMDc4LAotCTB4NzU2YywgMHgwMDc4LCAweDU1ZDIsIDB4YTI4ZSwgMHgwMDMyLCAweDAwYzAsIDB4NTVkMiwgMHg3MDMwLAotCTB4YTA4ZSwgMHgxNDAwLCAweDAwYzAsIDB4NTVkMiwgMHgyMDA5LCAweDAwMzgsIDB4MDE3ZSwgMHgyMDExLAotCTB4YTg4MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwgMHg1NWQxLAotCTB4MTA3OCwgMHg0NDk5LCAweDAwYzAsIDB4NTVkMSwgMHg2NjEyLCAweDY1MTYsIDB4MGM3ZSwgMHgxMDc4LAotCTB4NzRkNywgMHgwMDQwLCAweDU1ZDAsIDB4MDE3ZiwgMHg2MTFhLCAweDYwMWYsIDB4MDAwNCwgMHg3MTIwLAotCTB4NjEwYSwgMHgwMTdmLCAweDEwNzgsIDB4NzU2YywgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg1NWQyLAotCTB4MGM3ZiwgMHgwMTdmLCAweDBjN2YsIDB4MDA3YywgMHgwZjdlLCAweDBkN2UsIDB4MDI3ZSwgMHgwMTdlLAotCTB4MTM3ZSwgMHgxNDdlLCAweDE1N2UsIDB4M2MwMCwgMHgwMDdlLCAweDIwNzksIDB4MDAzMCwgMHgyMDY5LAotCTB4MDIwMCwgMHgxMDc4LCAweDFjMjUsIDB4MDBjMCwgMHg1NjE1LCAweDEwNzgsIDB4MWIxNSwgMHgwMDQwLAotCTB4NTYxZiwgMHg3OTA4LCAweGExOGMsIDB4MWZmZiwgMHhhMTgyLCAweDAwMTEsIDB4MDBjOCwgMHg1NjFmLAotCTB4MjBhOSwgMHgwMDBjLCAweDIwZTEsIDB4MDAwMCwgMHgyZWEwLCAweDIwOTksIDB4MDIwYSwgMHg1M2E1LAotCTB4MjBlMSwgMHgyMDAwLCAweDIwMDEsIDB4MDIwYSwgMHgyMDA0LCAweDdhMGMsIDB4NzgwOCwgMHhhMDgwLAotCTB4MDAwNywgMHhhMDg0LCAweDFmZjgsIDB4YTA4YSwgMHgwMTQwLCAweDEwYzgsIDB4MTMyOCwgMHg4MGFjLAotCTB4MjBlMSwgMHg2MDAwLCAweDIwOTksIDB4MDIwYSwgMHg1M2E1LCAweDIwZTEsIDB4NzAwMCwgMHg2ODI4LAotCTB4NjgyOCwgMHg3ODAzLCAweDAwMDQsIDB4YTI5NCwgMHgwMDcwLCAweDAwN2YsIDB4MjBlMCwgMHgxNTdmLAotCTB4MTQ3ZiwgMHgxMzdmLCAweDAxN2YsIDB4MDI3ZiwgMHgwZDdmLCAweDBmN2YsIDB4MDA3YywgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDc4LCAweDU2MTUsIDB4MDQ3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MjAyOCwgMHgyMTMwLAotCTB4YTY5NiwgMHgwMGZmLCAweDAwYzAsIDB4NTY0NCwgMHhhNTk2LCAweGZmZmQsIDB4MDBjMCwgMHg1NjM0LAotCTB4MjAwOSwgMHgwMDdmLCAweDAwNzgsIDB4NTY3NywgMHhhNTk2LCAweGZmZmUsIDB4MDBjMCwgMHg1NjNjLAotCTB4MjAwOSwgMHgwMDdlLCAweDAwNzgsIDB4NTY3NywgMHhhNTk2LCAweGZmZmMsIDB4MDBjMCwgMHg1NjQ0LAotCTB4MjAwOSwgMHgwMDgwLCAweDAwNzgsIDB4NTY3NywgMHgyMDExLCAweDAwMDAsIDB4MjAyMSwgMHgwMDgxLAotCTB4MjBhOSwgMHgwMDdlLCAweDIwNzEsIDB4YTRiNSwgMHgyZTFjLCAweDgzZmYsIDB4MDBjMCwgMHg1NjU2LAotCTB4ODJmZiwgMHgwMGMwLCAweDU2NmIsIDB4MjQxMCwgMHgwMDc4LCAweDU2NmIsIDB4MjM2OCwgMHg2ZjEwLAotCTB4MDA3ZSwgMHgyMTAwLCAweGE3MDYsIDB4MDA3ZiwgMHg2YjE0LCAweDAwYzAsIDB4NTY2NSwgMHhhMzQ2LAotCTB4MDBjMCwgMHg1NjY1LCAweDI0MDgsIDB4MDA3OCwgMHg1Njc3LCAweDg3ZmYsIDB4MDBjMCwgMHg1NjZiLAotCTB4ODNmZiwgMHgwMDQwLCAweDU2NTAsIDB4ODQyMCwgMHg4ZTcwLCAweDAwZjAsIDB4NTY0YywgMHg4MmZmLAotCTB4MDBjMCwgMHg1Njc2LCAweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDU2NzgsIDB4MjIwOCwgMHhhMDA2LAotCTB4MGQ3ZiwgMHgwZTdmLCAweDA0N2YsIDB4MDA3YywgMHhhMDg0LCAweDAwMDcsIDB4MDA3OSwgMHg1NjgxLAotCTB4MDA3YywgMHg1Njg5LCAweDU2ODksIDB4NTY4OSwgMHg1N2M4LCAweDU2ODksIDB4NTY4YSwgMHg1NmEzLAotCTB4NTZmMywgMHgwMDdjLCAweDcxMTAsIDB4ZDFiYywgMHgwMDQwLCAweDU2YTIsIDB4NzEyMCwgMHgyMTYwLAotCTB4YWM4YywgMHgwMDBmLCAweDAwYzAsIDB4NTZhMiwgMHhhYzhhLCAweGFhMDAsIDB4MDA0OCwgMHg1NmEyLAotCTB4Njg1NCwgMHhhYzAyLCAweDAwYzgsIDB4NTZhMiwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDQ2LAotCTB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4MGM3ZSwgMHg3MTEwLCAweGQxYmMsIDB4MDBjMCwgMHg1NmYxLAotCTB4MjAxMSwgMHhhODgzLCAweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDEwNzgsIDB4MjRlMywgMHgwMGMwLAotCTB4NTZmMSwgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwgMHg1NmYxLCAweDY2MTIsIDB4NjUxNiwgMHg2MDAwLAotCTB4ZDBlYywgMHgwMGMwLCAweDU2ZjEsIDB4NjIwNCwgMHhhMjk0LCAweGZmMDAsIDB4ODIxNywgMHhhMjg2LAotCTB4MDAwNiwgMHgwMGMwLCAweDU2ZDYsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLAotCTB4NTZmMSwgMHg2MTFhLCAweDYwMWYsIDB4MDAwNiwgMHg3MTIwLCAweDYxMGEsIDB4NzEzMCwgMHg2MTIyLAotCTB4MjAwOSwgMHgwMDQ0LCAweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDU2ZjEsIDB4MGM3ZSwgMHgxMDc4LAotCTB4NzRkNywgMHgwMTdmLCAweDAwNDAsIDB4NTZmMSwgMHg2MTFhLCAweDYwMWYsIDB4MDAwNCwgMHg3MTIwLAotCTB4NjEwYSwgMHhhMjg2LCAweDAwMDQsIDB4MDBjMCwgMHg1NmU5LCAweDYwMDcsIDB4MDAwNSwgMHgwMDc4LAotCTB4NTZlYiwgMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWM0NSwgMHgxMDc4LAotCTB4NjEwOSwgMHgwYzdmLCAweDAwN2MsIDB4NzExMCwgMHhkMWJjLCAweDAwNDAsIDB4NTcwYiwgMHg3MDIwLAotCTB4MjA2MCwgMHhhYzg0LCAweDAwMGYsIDB4MDBjMCwgMHg1NzBiLCAweGFjODIsIDB4YWEwMCwgMHgwMDQ4LAotCTB4NTcwYiwgMHg2ODU0LCAweGFjMDIsIDB4MDBjOCwgMHg1NzBiLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LAotCTB4MDA0NSwgMHgxMDc4LCAweDc1NmMsIDB4MDA3YywgMHg3MTEwLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4YTE4ZSwgMHgwMDAwLCAweDAwYzAsIDB4NTcxYywgMHhhMDg0LCAweDAwMGYsIDB4YTA4YSwgMHgwMDA2LAotCTB4MDBjOCwgMHg1NzFjLCAweDEwNzksIDB4NTcxZCwgMHgwMDdjLCAweDU3MjMsIDB4NTcyNCwgMHg1NzIzLAotCTB4NTcyMywgMHg1Nzk0LCAweDU3YTMsIDB4MDA3YywgMHg3MTEwLCAweGQxYmMsIDB4MDA0MCwgMHg1NzJjLAotCTB4NzAyYywgMHhkMDg0LCAweDAwNDAsIDB4NTc5MywgMHg3MDBjLCAweDcxMDgsIDB4MTA3OCwgMHgyNGUzLAotCTB4MDBjMCwgMHg1NzkzLCAweDEwNzgsIDB4NDQ5OSwgMHgwMGMwLCAweDU3OTMsIDB4NjYxMiwgMHg2NTE2LAotCTB4NjIwNCwgMHg3MTEwLCAweGQxYmMsIDB4MDA0MCwgMHg1NzVlLCAweGEyOGMsIDB4MDBmZiwgMHhhMTg2LAotCTB4MDAwNCwgMHgwMDQwLCAweDU3NDcsIDB4YTE4NiwgMHgwMDA2LCAweDAwYzAsIDB4NTc4NCwgMHgwYzdlLAotCTB4MTA3OCwgMHg1N2IyLCAweDBjN2YsIDB4MDA0MCwgMHg1NzkzLCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LAotCTB4MDE3ZiwgMHgwMDQwLCAweDU3OTMsIDB4NjExYSwgMHg2MDFmLCAweDAwMDIsIDB4NzEyMCwgMHg2MTBhLAotCTB4MjAwOSwgMHgwMDg4LCAweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDU3OTMsIDB4YTI4YywgMHgwMGZmLAotCTB4YTE4NiwgMHgwMDA2LCAweDAwNDAsIDB4NTc3MywgMHhhMTg2LCAweDAwMDQsIDB4MDA0MCwgMHg1NzczLAotCTB4YTI5NCwgMHhmZjAwLCAweDgyMTcsIDB4YTI4NiwgMHgwMDA0LCAweDAwNDAsIDB4NTc3MywgMHhhMjg2LAotCTB4MDAwNiwgMHgwMGMwLCAweDU3ODQsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLAotCTB4NTc5MywgMHg2MTFhLCAweDYwMWYsIDB4MDAwNSwgMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwgMHgwMDg4LAotCTB4MTA3OCwgMHg3NTZjLCAweDAwNzgsIDB4NTc5MywgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwMTdmLAotCTB4MDA0MCwgMHg1NzkzLCAweDYxMWEsIDB4NjAxZiwgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgyMDA5LAotCTB4MDAwMSwgMHgxMDc4LCAweDc1NmMsIDB4MDA3YywgMHg3MTEwLCAweGQxYmMsIDB4MDA0MCwgMHg1N2EyLAotCTB4MTA3OCwgMHg1N2IyLCAweDAwNDAsIDB4NTdhMiwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDg5LAotCTB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4NzExMCwgMHhkMWJjLCAweDAwNDAsIDB4NTdiMSwgMHgxMDc4LAotCTB4NTdiMiwgMHgwMDQwLCAweDU3YjEsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA4YSwgMHgxMDc4LAotCTB4NzU2YywgMHgwMDdjLCAweDcwMjAsIDB4MjA2MCwgMHhhYzg0LCAweDAwMGYsIDB4MDBjMCwgMHg1N2M1LAotCTB4YWM4MiwgMHhhYTAwLCAweDAwNDgsIDB4NTdjNSwgMHgyMDAxLCAweGEzMTUsIDB4MjAwNCwgMHhhYzAyLAotCTB4MDBjOCwgMHg1N2M1LCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwgMHg1N2M0LAotCTB4NzExMCwgMHhkMWJjLCAweDAwYzAsIDB4NTdkZSwgMHg3MDI0LCAweDIwNjAsIDB4YWM4NCwgMHgwMDBmLAotCTB4MDBjMCwgMHg1N2RlLCAweGFjODIsIDB4YWEwMCwgMHgwMDQ4LCAweDU3ZGUsIDB4Njg1NCwgMHhhYzAyLAotCTB4MDBjOCwgMHg1N2RlLCAweDIwMDksIDB4MDA1MSwgMHgxMDc4LCAweDc1NmMsIDB4MDA3YywgMHgyMDcxLAotCTB4YTViZSwgMHg3MDAzLCAweDAwMDMsIDB4NzAwZiwgMHgwMzYxLCAweGEwMDYsIDB4NzAxYSwgMHg3MDEyLAotCTB4NzAxNywgMHhhYTAwLCAweDcwMDcsIDB4MDAwMCwgMHg3MDI2LCAweDcwMmIsIDB4NmM0ZSwgMHg3MDMyLAotCTB4NzAzNywgMHg2Y2EwLCAweDcwM2IsIDB4MDAwMiwgMHg3MDNmLCAweDAwMDAsIDB4NzA0MywgMHhmZmZmLAotCTB4NzA0NywgMHhmZmZmLCAweDAwN2MsIDB4MjA3MSwgMHhhNWJlLCAweDAwZTAsIDB4NThjMSwgMHgyMDkxLAotCTB4NjAwMCwgMHg3MDBjLCAweDgwMDEsIDB4NzAwZSwgMHgwMGMwLCAweDU4NzMsIDB4NzAwZiwgMHgwMzYxLAotCTB4NzAwNywgMHgwMDAxLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcxMzgsIDB4ODEwOSwgMHg3MTNhLAotCTB4MDBjMCwgMHg1ODcxLCAweDcwM2IsIDB4MDAwMiwgMHgyMDA5LCAweDAxMDAsIDB4MjEwNCwgMHhhMDgyLAotCTB4MDAwMywgMHgwMGM4LCAweDU4NzEsIDB4NzAzYywgMHhhMDg2LCAweDAwMDEsIDB4MDBjMCwgMHg1ODRlLAotCTB4MGQ3ZSwgMHgyMDY5LCAweDAxNDAsIDB4NjgwNCwgMHhhMDg0LCAweDQwMDAsIDB4MDA0MCwgMHg1ODJjLAotCTB4NjgwMywgMHgxMDAwLCAweDAwNzgsIDB4NTgzMywgMHg2ODA0LCAweGEwODQsIDB4MTAwMCwgMHgwMDQwLAotCTB4NTgzMywgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywgMHgwMDAwLCAweDcwM2YsIDB4MDAwMCwgMHgyMDY5LAotCTB4YTVhYiwgMHg2ODA0LCAweGEwODIsIDB4MDAwNiwgMHgwMGMwLCAweDU4NDAsIDB4NjgwNywgMHgwMDAwLAotCTB4NjgzMCwgMHhhMDgyLCAweDAwMDMsIDB4MDBjMCwgMHg1ODQ3LCAweDY4MzMsIDB4MDAwMCwgMHgxMDc4LAotCTB4NjEwOSwgMHgxMDc4LCAweDYxZDMsIDB4MGQ3ZiwgMHgwMDc4LCAweDU4NzEsIDB4MGQ3ZSwgMHgyMDY5LAotCTB4YTMwMCwgMHg2OTQ0LCAweDY4NjAsIDB4YTEwMiwgMHgwMGM4LCAweDU4NzAsIDB4MjA2OSwgMHhhNWFiLAotCTB4NjgwNCwgMHhhMDg2LCAweDAwMDAsIDB4MDBjMCwgMHg1ODcwLCAweDY4MzAsIDB4YTA4NiwgMHgwMDAwLAotCTB4MDBjMCwgMHg1ODcwLCAweDcwM2YsIDB4MDAwMSwgMHg2ODA3LCAweDAwMDYsIDB4NjgzMywgMHgwMDAzLAotCTB4MjA2OSwgMHgwMTAwLCAweDY4MzAsIDB4Njg5ZSwgMHgyMDY5LCAweDAxNDAsIDB4NjgwMywgMHgwNjAwLAotCTB4MGQ3ZiwgMHgwMDc4LCAweDU4NzYsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzAyNCwgMHhhMDBkLAotCTB4MDA0MCwgMHg1ODhlLCAweDcwMjAsIDB4ODAwMSwgMHg3MDIyLCAweDAwYzAsIDB4NTg4ZSwgMHg3MDIzLAotCTB4MDAwOSwgMHg4MTA5LCAweDcxMjYsIDB4YTE4NiwgMHgwM2U4LCAweDAwYzAsIDB4NTg4OSwgMHg3MDI4LAotCTB4MTA3YSwgMHg4MWZmLCAweDAwYzAsIDB4NTg4ZSwgMHg3MDI4LCAweDEwN2EsIDB4NzAzMCwgMHhhMDBkLAotCTB4MDA0MCwgMHg1ODlmLCAweDcwMmMsIDB4ODAwMSwgMHg3MDJlLCAweDAwYzAsIDB4NTg5ZiwgMHg3MDJmLAotCTB4MDAwOSwgMHg4MTA5LCAweDcxMzIsIDB4MDBjMCwgMHg1ODlmLCAweDcwMzQsIDB4MTA3YSwgMHg3MDQwLAotCTB4YTAwNSwgMHgwMDQwLCAweDU4YTcsIDB4MDA1MCwgMHg1OGE3LCAweDgwMDEsIDB4NzA0MiwgMHg3MDQ0LAotCTB4YTAwNSwgMHgwMDQwLCAweDU4YWYsIDB4MDA1MCwgMHg1OGFmLCAweDgwMDEsIDB4NzA0NiwgMHg3MDE4LAotCTB4YTAwZCwgMHgwMDQwLCAweDU4YzAsIDB4NzAwOCwgMHg4MDAxLCAweDcwMGEsIDB4MDBjMCwgMHg1OGMwLAotCTB4NzAwYiwgMHgwMDA5LCAweDgxMDksIDB4NzExYSwgMHgwMGMwLCAweDU4YzAsIDB4NzAxYywgMHgxMDdhLAotCTB4MTI3ZiwgMHg3MDA0LCAweDAwNzksIDB4NThjNCwgMHg1OGViLCAweDU4ZWMsIDB4NTkwOCwgMHgwZTdlLAotCTB4MjA3MSwgMHhhNWJlLCAweDcwMTgsIDB4YTAwNSwgMHgwMGMwLCAweDU4ZDIsIDB4NzExYSwgMHg3MjFlLAotCTB4NzAwYiwgMHgwMDA5LCAweDBlN2YsIDB4MDA3YywgMHgwZTdlLCAweDAwN2UsIDB4MjA3MSwgMHhhNWJlLAotCTB4NzAxYywgMHhhMjA2LCAweDAwYzAsIDB4NThkZSwgMHg3MDFhLCAweDcwMWUsIDB4MDA3ZiwgMHgwZTdmLAotCTB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTViZSwgMHg2MDg4LCAweGExMDIsIDB4MDA0OCwgMHg1OGU5LAotCTB4NjE4YSwgMHgwZTdmLCAweDAwN2MsIDB4MDA3YywgMHg3MTEwLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLAotCTB4NThmZSwgMHg2MDg4LCAweDgwMDEsIDB4MDA0OCwgMHg1OGZlLCAweDYwOGEsIDB4MDBjMCwgMHg1OGZlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg2MTA5LCAweDEyN2YsIDB4ODEwOCwgMHhhMTgyLAotCTB4MDBmZiwgMHgwMDQ4LCAweDU5MDYsIDB4YTAwZSwgMHg3MDA3LCAweDAwMDIsIDB4NzExMiwgMHgwMDdjLAotCTB4NzAxNCwgMHgyMDYwLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwM2MsIDB4YTAwNSwgMHgwMDQwLAotCTB4NTkxNywgMHg4MDAxLCAweDYwM2UsIDB4MDBjMCwgMHg1OTE3LCAweDEwNzgsIDB4OGNkNywgMHg2MDE0LAotCTB4YTAwNSwgMHgwMDQwLCAweDU5NDEsIDB4ODAwMSwgMHg2MDE2LCAweDAwYzAsIDB4NTk0MSwgMHg2MTFjLAotCTB4YTE4NiwgMHgwMDAzLCAweDAwNDAsIDB4NTkyOCwgMHhhMTg2LCAweDAwMDYsIDB4MDBjMCwgMHg1OTNmLAotCTB4NjAxMCwgMHgyMDY4LCAweDY4NTQsIDB4YTA4YSwgMHgxOTlhLCAweDAwNDgsIDB4NTkzZiwgMHhhMDgyLAotCTB4MTk5OSwgMHg2ODU2LCAweGEwOGEsIDB4MTk5YSwgMHgwMDQ4LCAweDU5MzgsIDB4MjAwMSwgMHgxOTk5LAotCTB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwgMHg2MTE2LCAweDAwNzgsIDB4NTk0MSwgMHgxMDc4LAotCTB4ODgxMCwgMHgxMjdmLCAweGFjODgsIDB4MDAxMCwgMHg3MTE2LCAweDIwMDEsIDB4Y2EwMCwgMHhhMTAyLAotCTB4MDA0OCwgMHg1OTRlLCAweDcwMTcsIDB4YWEwMCwgMHg3MDA3LCAweDAwMDAsIDB4MDA3YywgMHgwZTdlLAotCTB4MjA3MSwgMHhhNWJlLCAweDcwMjcsIDB4MDdkMCwgMHg3MDIzLCAweDAwMDksIDB4NzAzYiwgMHgwMDAyLAotCTB4MGU3ZiwgMHgwMDdjLCAweDIwMDEsIDB4YTVjNywgMHgyMDAzLCAweDAwMDAsIDB4MDA3YywgMHgwZTdlLAotCTB4MjA3MSwgMHhhNWJlLCAweDcxMzIsIDB4NzAyZiwgMHgwMDA5LCAweDBlN2YsIDB4MDA3YywgMHgyMDExLAotCTB4YTVjYSwgMHgyMDEzLCAweDAwMDAsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTViZSwgMHg3MTFhLAotCTB4NzIxZSwgMHg3MDBiLCAweDAwMDksIDB4MGU3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MGU3ZSwgMHgwZjdlLAotCTB4MjA3OSwgMHhhMzAwLCAweDdhMzQsIDB4ZDI5NCwgMHgwMDQwLCAweDU5YTQsIDB4MjA3MSwgMHhhNWFhLAotCTB4MmUxNCwgMHhhMGZlLCAweDAwMDAsIDB4MDA0MCwgMHg1OTkxLCAweGEwZmUsIDB4MDAwMSwgMHgwMDQwLAotCTB4NTk5NSwgMHhhMGZlLCAweDAwMDIsIDB4MDBjMCwgMHg1OWEwLCAweGEyOTIsIDB4MDA4NSwgMHgwMDc4LAotCTB4NTk5NywgMHhhMjkyLCAweDAwMDUsIDB4MDA3OCwgMHg1OTk3LCAweGEyOTIsIDB4MDAwMiwgMHgyMjcyLAotCTB4MDA0MCwgMHg1OTljLCAweDAwYzgsIDB4NTlhNCwgMHgyMDExLCAweDgwMzcsIDB4MTA3OCwgMHgzNTc5LAotCTB4MjAxMSwgMHhhNWE5LCAweDIyMDQsIDB4MjA3MiwgMHgwZjdmLCAweDBlN2YsIDB4MDI3ZiwgMHgwMDdjLAotCTB4MGM3ZSwgMHgyMDYxLCAweGE2MmQsIDB4MGM3ZiwgMHgwMDdjLCAweGExODQsIDB4MDAwZiwgMHg4MDAzLAotCTB4ODAwMywgMHg4MDAzLCAweGEwODAsIDB4YTYyZCwgMHgyMDYwLCAweDAwN2MsIDB4Njg1NCwgMHhhMDhhLAotCTB4MTk5YSwgMHgwMDQ4LCAweDU5YmQsIDB4MjAwMSwgMHgxOTk5LCAweGEwMDUsIDB4MDBjMCwgMHg1OWNjLAotCTB4MGM3ZSwgMHgyMDYxLCAweGE2MmQsIDB4NjAxNCwgMHgwYzdmLCAweGEwMDUsIDB4MDBjMCwgMHg1OWQxLAotCTB4MjAwMSwgMHgwMDFlLCAweDAwNzgsIDB4NTlkMSwgMHhhMDhlLCAweGZmZmYsIDB4MDBjMCwgMHg1OWQxLAotCTB4YTAwNiwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHhhMTA4LCAweDYxMTYsIDB4Njg0YywgMHhhMDhjLAotCTB4MDBjMCwgMHhhMThlLCAweDAwYzAsIDB4MDA0MCwgMHg1YTI0LCAweGQwYjQsIDB4MDBjMCwgMHg1OWU4LAotCTB4ZDBiYywgMHgwMGMwLCAweDVhMTQsIDB4MjAwOSwgMHgwMDA2LCAweDEwNzgsIDB4NWE0MywgMHgwMDdjLAotCTB4ZDBmYywgMHgwMDQwLCAweDU5ZjMsIDB4YTA4NCwgMHgwMDAzLCAweDAwNDAsIDB4NTlmMywgMHhhMDg2LAotCTB4MDAwMywgMHgwMGMwLCAweDVhM2MsIDB4NjAyNCwgMHhkMGQ0LCAweDAwNDAsIDB4NTlmZCwgMHhjMGQ0LAotCTB4NjAyNiwgMHg2ODYwLCAweDYwMmEsIDB4Njg1YywgMHg2MDJlLCAweDIwMDksIDB4YTM3MywgMHgyMTA0LAotCTB4ZDA4NCwgMHgwMDQwLCAweDVhMGYsIDB4NjExOCwgMHhhMTg4LCAweDAwMjcsIDB4MjEwNCwgMHhkMDhjLAotCTB4MDBjMCwgMHg1YTBmLCAweDIwMDksIDB4MDA0MiwgMHgxMDc4LCAweDc1NmMsIDB4MDA3YywgMHgyMDA5LAotCTB4MDA0MywgMHgxMDc4LCAweDc1NmMsIDB4MDA3YywgMHhkMGZjLCAweDAwNDAsIDB4NWExZiwgMHhhMDg0LAotCTB4MDAwMywgMHgwMDQwLCAweDVhMWYsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4NWEzYywgMHgyMDA5LAotCTB4MDA0MiwgMHgxMDc4LCAweDc1NmMsIDB4MDA3YywgMHhkMGZjLCAweDAwNDAsIDB4NWEzMiwgMHhhMDg0LAotCTB4MDAwMywgMHhhMDhlLCAweDAwMDIsIDB4MDA0MCwgMHg1YTM2LCAweDIwMDksIDB4MDA0MSwgMHgxMDc4LAotCTB4NzU2YywgMHgwMDdjLCAweDEwNzgsIDB4NWE0MSwgMHgwMDc4LCAweDVhMzEsIDB4MjAwOSwgMHgwMDQzLAotCTB4MTA3OCwgMHg3NTZjLCAweDAwNzgsIDB4NWEzMSwgMHgyMDA5LCAweDAwMDQsIDB4MTA3OCwgMHg1YTQzLAotCTB4MDA3YywgMHgyMDA5LCAweDAwMDEsIDB4MGQ3ZSwgMHg2MDEwLCAweGEwZWMsIDB4ZjAwMCwgMHgwMDQwLAotCTB4NWE2YiwgMHgyMDY4LCAweDY5NTIsIDB4NjgwMCwgMHg2MDEyLCAweGExODYsIDB4MDAwMSwgMHgwMGMwLAotCTB4NWE2NSwgMHg2OTRjLCAweGExOGMsIDB4ODEwMCwgMHhhMThlLCAweDgxMDAsIDB4MDBjMCwgMHg1YTY1LAotCTB4MGM3ZSwgMHgyMDYxLCAweGE2MmQsIDB4NjIwMCwgMHhkMjhjLCAweDAwYzAsIDB4NWE2NCwgMHg2MjA0LAotCTB4ODIxMCwgMHgwMDQ4LCAweDVhNjQsIDB4NjIwNiwgMHgwYzdmLCAweDEwNzgsIDB4NDk4MiwgMHg2MDEwLAotCTB4YTA2ZCwgMHgxMGMwLCAweDU5YjYsIDB4MGQ3ZiwgMHgwMDdjLCAweDE1N2UsIDB4MGM3ZSwgMHgyMDYxLAotCTB4YTYyZCwgMHg2MDAwLCAweDgxZmYsIDB4MDA0MCwgMHg1YTc4LCAweGEyMDUsIDB4MDA3OCwgMHg1YTc5LAotCTB4YTIwNCwgMHg2MDAyLCAweDBjN2YsIDB4MTU3ZiwgMHgwMDdjLCAweDY4MDAsIDB4ZDA4YywgMHgwMGMwLAotCTB4NWE4OSwgMHg2ODA4LCAweGEwMDUsIDB4MDA0MCwgMHg1YTg5LCAweDgwMDEsIDB4NjgwYSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDdjLCAweDIwYTksIDB4MDAxMCwgMHhhMDA2LCAweDgwMDQsIDB4ODA4NiwgMHg4MThlLAotCTB4MDBjOCwgMHg1YTkzLCAweGEyMDAsIDB4MDBmMCwgMHg1YThlLCAweDgwODYsIDB4ODE4ZSwgMHgwMDdjLAotCTB4MTU3ZSwgMHgyMGE5LCAweDAwMTAsIDB4YTAwNSwgMHgwMDQwLCAweDVhYjksIDB4YTExYSwgMHgwMGM4LAotCTB4NWFiOSwgMHg4MjEzLCAweDgxOGQsIDB4MDA0OCwgMHg1YWFjLCAweGExMWEsIDB4MDBjOCwgMHg1YWFkLAotCTB4MDBmMCwgMHg1YWExLCAweDAwNzgsIDB4NWFiMSwgMHhhMTFhLCAweDIzMDgsIDB4ODIxMCwgMHgwMGYwLAotCTB4NWFhMSwgMHgwMDdlLCAweDMyMDAsIDB4YTA4NCwgMHhmN2ZmLCAweDIwODAsIDB4MDA3ZiwgMHgxNTdmLAotCTB4MDA3YywgMHgwMDdlLCAweDMyMDAsIDB4YTA4NSwgMHgwODAwLCAweDAwNzgsIDB4NWFiNSwgMHgxMjdlLAotCTB4MjA5MSwgMHgyMjAwLCAweDIwNzksIDB4YTVhYiwgMHgxMjdmLCAweDBkN2UsIDB4MjA2OSwgMHhhNWFiLAotCTB4NjgwMywgMHgwMDA1LCAweDIwNjksIDB4MDAwNCwgMHgyZDA0LCAweGEwODUsIDB4ODAwMSwgMHgyMDZhLAotCTB4MGQ3ZiwgMHgwMDdjLCAweDBjN2UsIDB4NjAyNywgMHgwMDAxLCAweDc4MDQsIDB4YTA4NCwgMHgwMDA3LAotCTB4MDA3OSwgMHg1YWRhLCAweDVhZTQsIDB4NWIwOSwgMHg1YjY0LCAweDVhZWEsIDB4NWIwOSwgMHg1YWU0LAotCTB4NWFlMiwgMHg1YWUyLCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDU5NWEsIDB4MTA3OCwgMHg2MTA5LAotCTB4MGM3ZiwgMHgwMDdjLCAweDYyYzAsIDB4ODJmZiwgMHgwMGMwLCAweDVhZjAsIDB4MGM3ZiwgMHgwMDdjLAotCTB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHg3ODI4LCAweGEwOTIsIDB4MDBjOCwgMHgwMGM4LAotCTB4NWFmZiwgMHg4MDAwLCAweDc4MmEsIDB4MTA3OCwgMHg0MTY4LCAweDAwNzgsIDB4NWFlZSwgMHgxMDc4LAotCTB4NDEyOSwgMHg3ODA3LCAweDAwMDMsIDB4NzgyNywgMHgwMDAwLCAweDc4MmIsIDB4MDAwMCwgMHgwMDc4LAotCTB4NWFlZSwgMHgxMDc4LCAweDU5NWEsIDB4M2MwMCwgMHgwMDdlLCAweDIwMTEsIDB4MDIwOSwgMHgyMGUxLAotCTB4NDAwMCwgMHgyMjE0LCAweDAwN2YsIDB4MjBlMCwgMHg4MmZmLCAweDAwNDAsIDB4NWIyNywgMHg2MmMwLAotCTB4ODJmZiwgMHgwMGMwLCAweDViMjcsIDB4NzgyYiwgMHgwMDAwLCAweDc4MjQsIDB4YTA2NSwgMHgxMDQwLAotCTB4MTMyOCwgMHgyMDA5LCAweDAwMTMsIDB4MTA3OCwgMHg3NTZjLCAweDBjN2YsIDB4MDA3YywgMHgzOTAwLAotCTB4YTA4MiwgMHhhNmNkLCAweDAwYzgsIDB4NWIyZSwgMHgxMDc4LCAweDcyOGEsIDB4MGM3ZSwgMHg3ODI0LAotCTB4YTA2NSwgMHgxMDQwLCAweDEzMjgsIDB4NzgwNCwgMHhhMDg2LCAweDAwMDQsIDB4MDA0MCwgMHg1YmE5LAotCTB4NzgyOCwgMHhhMDkyLCAweDI3MTAsIDB4MDBjOCwgMHg1YjQ0LCAweDgwMDAsIDB4NzgyYSwgMHgwYzdmLAotCTB4MTA3OCwgMHg2YzMzLCAweDAwNzgsIDB4NWIyNSwgMHg2MTA0LCAweGExODYsIDB4MDAwMywgMHgwMGMwLAotCTB4NWI1YiwgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwgMHg3MGQ0LCAweDBlN2YsIDB4ZDA4YywgMHgwMDQwLAotCTB4NWI1YiwgMHgwYzdlLCAweDBlN2UsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YTMwMCwgMHgxMDc4LAotCTB4NDE3MSwgMHgwZTdmLCAweDBjN2YsIDB4MTA3OCwgMHhhMjQxLCAweDIwMDksIDB4MDAxNCwgMHgxMDc4LAotCTB4NzU2YywgMHgwYzdmLCAweDAwNzgsIDB4NWIyNSwgMHgyMDAxLCAweGE1YzcsIDB4MjAwMywgMHgwMDAwLAotCTB4NjJjMCwgMHg4MmZmLCAweDAwYzAsIDB4NWI3OCwgMHg3ODJiLCAweDAwMDAsIDB4NzgyNCwgMHhhMDY1LAotCTB4MTA0MCwgMHgxMzI4LCAweDIwMDksIDB4MDAxMywgMHgxMDc4LCAweDc1YzMsIDB4MGM3ZiwgMHgwMDdjLAotCTB4MGM3ZSwgMHgwZDdlLCAweDM5MDAsIDB4YTA4MiwgMHhhNmNkLCAweDAwYzgsIDB4NWI4MSwgMHgxMDc4LAotCTB4NzI4YSwgMHg3ODI0LCAweGEwMDUsIDB4MTA0MCwgMHgxMzI4LCAweDc4MWMsIDB4YTA2ZCwgMHgxMDQwLAotCTB4MTMyOCwgMHg2ODAwLCAweGMwZGMsIDB4NjgwMiwgMHg3OTI0LCAweDIxNjAsIDB4MTA3OCwgMHg3NTNkLAotCTB4NjkzYywgMHg4MWZmLCAweDEwNDAsIDB4MTMyOCwgMHg4MTA5LCAweDY5M2UsIDB4Njg1NCwgMHhhMDE1LAotCTB4MDA0MCwgMHg1YjlkLCAweDdhMWUsIDB4MDA3OCwgMHg1YjlmLCAweDc5MTgsIDB4NzkxZSwgMHg3ODA3LAotCTB4MDAwMCwgMHg3ODI3LCAweDAwMDAsIDB4MGQ3ZiwgMHgwYzdmLCAweDEwNzgsIDB4NjEwOSwgMHgwMDc4LAotCTB4NWI3NiwgMHg2MTA0LCAweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDViYjQsIDB4YTE4NiwgMHgwMDA0LAotCTB4MDA0MCwgMHg1YmI0LCAweDAwNzgsIDB4NWIzOCwgMHg3ODA4LCAweGFjMDYsIDB4MDA0MCwgMHg1YjM4LAotCTB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NWM0NSwgMHgwYzdmLCAweDEwNzgsIDB4NjEwOSwgMHgwMDc4LAotCTB4NWIyNSwgMHgwYzdlLCAweDYwMjcsIDB4MDAwMiwgMHg2MmM4LCAweDgyZmYsIDB4MDBjMCwgMHg1YmRiLAotCTB4NjJjNCwgMHg4MmZmLCAweDAwYzAsIDB4NWJkYiwgMHg3OTNjLCAweGExZTUsIDB4MDAwMCwgMHgwMDQwLAotCTB4NWJkNSwgMHgyMDA5LCAweDAwNDksIDB4MTA3OCwgMHg3NTZjLCAweDIwMTEsIDB4YTVjYSwgMHgyMDEzLAotCTB4MDAwMCwgMHgwYzdmLCAweDAwN2MsIDB4MzkwOCwgMHhhMTkyLCAweGE2Y2QsIDB4MDBjOCwgMHg1YmUyLAotCTB4MTA3OCwgMHg3MjhhLCAweDYwMTcsIDB4MDAxMCwgMHg3OTNjLCAweDgxZmYsIDB4MDA0MCwgMHg1YmQ1LAotCTB4NzkzYywgMHhhMTg4LCAweDAwMDcsIDB4MjEwYywgMHhhMThlLCAweDAwMDYsIDB4MDBjMCwgMHg1YmY0LAotCTB4NjAxNywgMHgwMDEyLCAweDAwNzgsIDB4NWJkOSwgMHg2MDE3LCAweDAwMTYsIDB4MDA3OCwgMHg1YmQ5LAotCTB4MDA3ZSwgMHgwMTdlLCAweDBjN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjAwZiwgMHgwMDAwLAotCTB4MmMwOCwgMHgyMDYxLCAweGE1YWIsIDB4NjAyMCwgMHg4MDAwLCAweDYwMjIsIDB4NjAxMCwgMHhhMDA1LAotCTB4MDA0MCwgMHg1YzEzLCAweGEwODAsIDB4MDAwMywgMHgyMTAyLCAweDYxMTIsIDB4MTI3ZiwgMHgwYzdmLAotCTB4MDE3ZiwgMHgwMDdmLCAweDAwN2MsIDB4NjExNiwgMHg2MTEyLCAweDAwNzgsIDB4NWMwZSwgMHgwZDdlLAotCTB4MjA2OSwgMHhhNWFiLCAweDYwMDAsIDB4ZDBkNCwgMHgwMDQwLCAweDVjMmMsIDB4NjgyMCwgMHg4MDAwLAotCTB4NjgyMiwgMHhhMDg2LCAweDAwMDEsIDB4MDBjMCwgMHg1YzI3LCAweDJjMDAsIDB4NjgxZSwgMHg2ODA0LAotCTB4YTA4NCwgMHgwMDA3LCAweDAwNzksIDB4NjExMSwgMHhjMGQ1LCAweDYwMDIsIDB4NjgxOCwgMHhhMDA1LAotCTB4MDA0MCwgMHg1YzNlLCAweDYwNTYsIDB4NjA1YiwgMHgwMDAwLCAweDAwN2UsIDB4MmMwMCwgMHg2ODFhLAotCTB4MGQ3ZiwgMHg2ODVhLCAweDIwNjksIDB4YTVhYiwgMHgwMDc4LCAweDVjMWUsIDB4NjA1NiwgMHg2MDVhLAotCTB4MmMwMCwgMHg2ODFhLCAweDY4MWUsIDB4MDA3OCwgMHg1YzFlLCAweDAwN2UsIDB4MDE3ZSwgMHgwYzdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsIDB4MjA2MSwgMHhhNWFiLAotCTB4NjAyMCwgMHg4MDAwLCAweDYwMjIsIDB4NjAwOCwgMHhhMDA1LCAweDAwNDAsIDB4NWM2MCwgMHhhMDgwLAotCTB4MDAwMywgMHgyMTAyLCAweDYxMGEsIDB4MTI3ZiwgMHgwYzdmLCAweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLAotCTB4NjEwZSwgMHg2MTBhLCAweDAwNzgsIDB4NWM1YiwgMHgwYzdlLCAweDYwMGYsIDB4MDAwMCwgMHgyYzA4LAotCTB4MjA2MSwgMHhhNWFiLCAweDYwMzQsIDB4YTAwNSwgMHgwMDQwLCAweDVjNzQsIDB4YTA4MCwgMHgwMDAzLAotCTB4MjEwMiwgMHg2MTM2LCAweDBjN2YsIDB4MDA3YywgMHg2MTNhLCAweDYxMzYsIDB4MDA3OCwgMHg1YzcyLAotCTB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwgMHgwNjdlLCAweDAyN2UsIDB4MDE3ZSwgMHgwMDdlLAotCTB4MTI3ZSwgMHgyMDcxLCAweGE1YWIsIDB4NzYzOCwgMHgyNjYwLCAweDI2NzgsIDB4MjA5MSwgMHg4MDAwLAotCTB4OGNmZiwgMHgwMDQwLCAweDVjZWQsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMjA2LAotCTB4MDBjMCwgMHg1Y2U4LCAweDg3ZmYsIDB4MDA0MCwgMHg1Yzk5LCAweDYwMjAsIDB4YTEwNiwgMHgwMGMwLAotCTB4NWNlOCwgMHg3MDNjLCAweGFjMDYsIDB4MDBjMCwgMHg1Y2FiLCAweDAzN2UsIDB4MjAxOSwgMHgwMDAxLAotCTB4MTA3OCwgMHg2ZTZjLCAweDcwMzMsIDB4MDAwMCwgMHg3MDNmLCAweDAwMDAsIDB4NzA0MywgMHgwMDAwLAotCTB4NzA0NywgMHgwMDAwLCAweDAzN2YsIDB4NzAzOCwgMHhhYzM2LCAweDAwYzAsIDB4NWNiMSwgMHg2NjBjLAotCTB4NzYzYSwgMHg3MDM0LCAweGFjMzYsIDB4MDBjMCwgMHg1Y2JmLCAweDJjMDAsIDB4YWYzNiwgMHgwMDQwLAotCTB4NWNiZCwgMHgyZjAwLCAweDcwMzYsIDB4MDA3OCwgMHg1Y2JmLCAweDcwMzcsIDB4MDAwMCwgMHg2NjBjLAotCTB4MDY3ZSwgMHgyYzAwLCAweGFmMDYsIDB4MDA0MCwgMHg1Y2M4LCAweDdlMGUsIDB4MDA3OCwgMHg1Y2M5LAotCTB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4NWNlMywgMHg2MDEwLAotCTB4MjA2OCwgMHg2MDFjLCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDVjZjcsIDB4NjgzNywgMHgwMTAzLAotCTB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHg4Y2I4LCAweDEwNzgsIDB4YTE4MSwgMHgxMDc4LAotCTB4NDk4MiwgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwgMHg4YzAxLCAweDBjN2YsIDB4MDA3OCwgMHg1Yzg4LAotCTB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDA3OCwgMHg1Yzg4LCAweDEyN2YsIDB4MDA3ZiwgMHgwMTdmLAotCTB4MDI3ZiwgMHgwNjdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHg2MDFjLAotCTB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4NWNkNiwgMHgxMDc4LCAweGExODEsIDB4MTA3OCwgMHg5ZTcwLAotCTB4MDA3OCwgMHg1Y2UzLCAweDAwN2UsIDB4MDY3ZSwgMHgwYzdlLCAweDBkN2UsIDB4MGY3ZSwgMHgyMDMxLAotCTB4MDAwMCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweGE1YWIsIDB4NzgzOCwgMHhhMDY1LAotCTB4MDA0MCwgMHg1ZDQxLCAweDYwMGMsIDB4MDA3ZSwgMHg2MDBmLCAweDAwMDAsIDB4NzgzYywgMHhhYzA2LAotCTB4MDBjMCwgMHg1ZDI4LCAweDAzN2UsIDB4MjAxOSwgMHgwMDAxLCAweDEwNzgsIDB4NmU2YywgMHg3ODMzLAotCTB4MDAwMCwgMHg3ODNmLCAweDAwMDAsIDB4Nzg0MywgMHgwMDAwLCAweDc4NDcsIDB4MDAwMCwgMHgwMzdmLAotCTB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4NWQzYywgMHg2MDEwLCAweDIwNjgsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwMywgMHgwMGMwLCAweDVkNGEsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLAotCTB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgxMDc4LCAweDhjMDEsIDB4MDA3ZiwgMHgwMDc4LAotCTB4NWQwZiwgMHg3ZTNhLCAweDdlMzYsIDB4MTI3ZiwgMHgwZjdmLCAweDBkN2YsIDB4MGM3ZiwgMHgwNjdmLAotCTB4MDA3ZiwgMHgwMDdjLCAweDYwMWMsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4NWQzMywgMHgxMDc4LAotCTB4OWU3MCwgMHgwMDc4LCAweDVkM2MsIDB4MDE3ZSwgMHgwMjdlLCAweDA4N2UsIDB4MjA0MSwgMHgwMDAwLAotCTB4MTA3OCwgMHg1ZDZkLCAweDEwNzgsIDB4NWUyMSwgMHgwODdmLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdjLAotCTB4MGY3ZSwgMHgxMjdlLCAweDIwNzksIDB4YTVhYiwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg1ZWJjLAotCTB4MTA3OCwgMHg1ZjMyLCAweDEyN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLAotCTB4MGM3ZSwgMHgwNjdlLCAweDAxN2UsIDB4MDA3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAotCTB4YTVhYiwgMHg3NjE0LCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDAwNDAsIDB4NWUwMSwgMHg2MDE4LAotCTB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTIwNiwgMHgwMGMwLCAweDVkZmMsIDB4ODhmZiwgMHgwMDQwLAotCTB4NWQ4ZCwgMHg2MDIwLCAweGExMDYsIDB4MDBjMCwgMHg1ZGZjLCAweDcwMjQsIDB4YWMwNiwgMHgwMGMwLAotCTB4NWRiZCwgMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDAwNDAsIDB4NWRiOCwgMHgxMDc4LAotCTB4NTk1YSwgMHgxMDc4LCAweDZjNDEsIDB4NjhjMywgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwgMHg3MDI3LAotCTB4MDAwMCwgMHgwMzdlLCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMDQwLAotCTB4NWRhZCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywgMHgwMDAwLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LAotCTB4ZDA4NCwgMHgwMDQwLCAweDVkYjUsIDB4NjgyNywgMHgwMDAxLCAweDAzN2YsIDB4MDA3OCwgMHg1ZGJkLAotCTB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MDA3OCwgMHg1ZGZjLCAweDcwMTQsIDB4YWMzNiwgMHgwMGMwLAotCTB4NWRjMywgMHg2NjBjLCAweDc2MTYsIDB4NzAxMCwgMHhhYzM2LCAweDAwYzAsIDB4NWRkMSwgMHgyYzAwLAotCTB4YWYzNiwgMHgwMDQwLCAweDVkY2YsIDB4MmYwMCwgMHg3MDEyLCAweDAwNzgsIDB4NWRkMSwgMHg3MDEzLAotCTB4MDAwMCwgMHg2NjBjLCAweDA2N2UsIDB4MmMwMCwgMHhhZjA2LCAweDAwNDAsIDB4NWRkYSwgMHg3ZTBlLAotCTB4MDA3OCwgMHg1ZGRiLCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LAotCTB4OGE0NCwgMHgwMDQwLCAweDVkZjUsIDB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHg1ZTBhLAotCTB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4OGNiOCwgMHgxMDc4LAotCTB4YTE4MSwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LCAweDEwNzgsIDB4OGMwMSwgMHgxMDc4LAotCTB4NzA0NSwgMHgwYzdmLCAweDAwNzgsIDB4NWQ3YywgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwMDc4LAotCTB4NWQ3YywgMHgxMjdmLCAweDAwN2YsIDB4MDE3ZiwgMHgwNjdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLAotCTB4MGY3ZiwgMHgwMDdjLCAweDYwMWMsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4NWUxNSwgMHgxMDc4LAotCTB4YTE4MSwgMHgxMDc4LCAweDllNzAsIDB4MDA3OCwgMHg1ZGY1LCAweDYwMWMsIDB4YTA4NiwgMHgwMDAyLAotCTB4MDBjMCwgMHg1ZGY1LCAweDYwMDQsIDB4YTA4NiwgMHgwMDg1LCAweDAwNDAsIDB4NWRlOCwgMHgwMDc4LAotCTB4NWRmNSwgMHgwYzdlLCAweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4YTI4MCwgMHhhNDM0LAotCTB4MjAwNCwgMHhhMDY1LCAweDAwNDAsIDB4NWViOCwgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwgMHgwNjdlLAotCTB4MjA3MSwgMHhhNWFiLCAweDY2NTQsIDB4NzAxOCwgMHhhYzA2LCAweDAwYzAsIDB4NWUzOCwgMHg3NjFhLAotCTB4NzAxYywgMHhhYzA2LCAweDAwYzAsIDB4NWU0NCwgMHg4NmZmLCAweDAwYzAsIDB4NWU0MywgMHg3MDE4LAotCTB4NzAxZSwgMHgwMDc4LCAweDVlNDQsIDB4NzYxZSwgMHg2MDU4LCAweGEwN2QsIDB4MDA0MCwgMHg1ZTQ5LAotCTB4N2U1NiwgMHhhNmVkLCAweDAwMDAsIDB4MDA0MCwgMHg1ZTRmLCAweDJmMDAsIDB4Njg1YSwgMHg2MDU3LAotCTB4MDAwMCwgMHg2MDViLCAweDAwMDAsIDB4NjAwMCwgMHhjMGQ0LCAweGMwZGMsIDB4NjAwMiwgMHgxMDc4LAotCTB4NDQxMCwgMHgwMDQwLCAweDVlYjQsIDB4NzYyNCwgMHg4NmZmLCAweDAwNDAsIDB4NWVhMiwgMHhhNjgwLAotCTB4MDAwNCwgMHgyMDA0LCAweGFkMDYsIDB4MDBjMCwgMHg1ZWEyLCAweDBkN2UsIDB4MjA2OSwgMHgwMTAwLAotCTB4NjhjMCwgMHhhMDA1LCAweDAwNDAsIDB4NWU5OSwgMHgxMDc4LCAweDU5NWEsIDB4MTA3OCwgMHg2YzQxLAotCTB4NjhjMywgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwgMHg3MDI3LCAweDAwMDAsIDB4MDM3ZSwgMHgyMDY5LAotCTB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMDQwLCAweDVlODIsIDB4NjgwMywgMHgwMTAwLAotCTB4NjgwMywgMHgwMDAwLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDA0MCwgMHg1ZThhLAotCTB4NjgyNywgMHgwMDAxLCAweDAzN2YsIDB4MGQ3ZiwgMHgwYzdlLCAweDYwM2MsIDB4YTAwNSwgMHgwMDQwLAotCTB4NWU5MywgMHg4MDAxLCAweDYwM2UsIDB4MjY2MCwgMHgxMDc4LCAweDhjMDEsIDB4MGM3ZiwgMHgwMDc4LAotCTB4NWVhMiwgMHgwZDdmLCAweDBjN2UsIDB4MjY2MCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgwYzdmLAotCTB4MDA3OCwgMHg1ZTU3LCAweDhkZmYsIDB4MDA0MCwgMHg1ZWIwLCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLAotCTB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4OGNiOCwgMHgxMDc4LCAweGExODEsIDB4MTA3OCwgMHg0OTgyLAotCTB4MTA3OCwgMHg3MDQ1LCAweDAwNzgsIDB4NWU1NywgMHgwNjdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLAotCTB4MTI3ZiwgMHgwMDdmLCAweDBjN2YsIDB4MDA3YywgMHgwMDdlLCAweDA2N2UsIDB4MGM3ZSwgMHgwZDdlLAotCTB4MjAzMSwgMHgwMDAwLCAweDc4MTQsIDB4YTA2NSwgMHgwMDQwLCAweDVmMTYsIDB4NjAwYywgMHgwMDdlLAotCTB4NjAwZiwgMHgwMDAwLCAweDc4MjQsIDB4YWMwNiwgMHgwMGMwLCAweDVlZmIsIDB4MjA2OSwgMHgwMTAwLAotCTB4NjhjMCwgMHhhMDA1LCAweDAwNDAsIDB4NWVmNSwgMHgxMDc4LCAweDU5NWEsIDB4MTA3OCwgMHg2YzQxLAotCTB4NjhjMywgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwgMHg3ODI3LCAweDAwMDAsIDB4MDM3ZSwgMHgyMDY5LAotCTB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMDQwLCAweDVlZWEsIDB4NjgwMywgMHgwMTAwLAotCTB4NjgwMywgMHgwMDAwLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDA0MCwgMHg1ZWYyLAotCTB4NjgyNywgMHgwMDAxLCAweDAzN2YsIDB4MDA3OCwgMHg1ZWZiLCAweDYwMDMsIDB4MDAwOSwgMHg2MzBhLAotCTB4MmMzMCwgMHgwMDc4LCAweDVmMTMsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLAotCTB4NWYwZiwgMHg2MDFjLCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDVmMWQsIDB4NjgzNywgMHgwMTAzLAotCTB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgxMDc4LAotCTB4OGMwMSwgMHgxMDc4LCAweDcwNDUsIDB4MDA3ZiwgMHgwMDc4LCAweDVlYzMsIDB4N2UxNiwgMHg3ZTEyLAotCTB4MGQ3ZiwgMHgwYzdmLCAweDA2N2YsIDB4MDA3ZiwgMHgwMDdjLCAweDYwMWMsIDB4YTA4NiwgMHgwMDA2LAotCTB4MDBjMCwgMHg1ZjI2LCAweDEwNzgsIDB4OWU3MCwgMHgwMDc4LCAweDVmMGYsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwMiwgMHgwMGMwLCAweDVmMGYsIDB4NjAwNCwgMHhhMDg2LCAweDAwODUsIDB4MDA0MCwgMHg1ZjA2LAotCTB4MDA3OCwgMHg1ZjBmLCAweDAwN2UsIDB4MDY3ZSwgMHgwYzdlLCAweDBkN2UsIDB4NzgxOCwgMHhhMDY1LAotCTB4MDA0MCwgMHg1ZmEwLCAweDYwNTQsIDB4MDA3ZSwgMHg2MDU3LCAweDAwMDAsIDB4NjA1YiwgMHgwMDAwLAotCTB4NjAwMCwgMHhjMGQ0LCAweGMwZGMsIDB4NjAwMiwgMHgxMDc4LCAweDQ0MTAsIDB4MDA0MCwgMHg1ZjlkLAotCTB4N2UyNCwgMHg4NmZmLCAweDAwNDAsIDB4NWY4ZiwgMHhhNjgwLCAweDAwMDQsIDB4MjAwNCwgMHhhZDA2LAotCTB4MDBjMCwgMHg1ZjhmLCAweDBkN2UsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4YTAwNSwgMHgwMDQwLAotCTB4NWY4NiwgMHgxMDc4LCAweDU5NWEsIDB4MTA3OCwgMHg2YzQxLCAweDY4YzMsIDB4MDAwMCwgMHgxMDc4LAotCTB4NzE4OCwgMHg3ODI3LCAweDAwMDAsIDB4MDM3ZSwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHhhMzg0LAotCTB4MTAwMCwgMHgwMDQwLCAweDVmNmYsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwgMHgyMDY5LAotCTB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDA0MCwgMHg1Zjc3LCAweDY4MjcsIDB4MDAwMSwgMHgwMzdmLAotCTB4MGQ3ZiwgMHgwYzdlLCAweDYwM2MsIDB4YTAwNSwgMHgwMDQwLCAweDVmODAsIDB4ODAwMSwgMHg2MDNlLAotCTB4MjY2MCwgMHgxMDc4LCAweDhjMDEsIDB4MGM3ZiwgMHgwMDc4LCAweDVmOGYsIDB4MGQ3ZiwgMHgwYzdlLAotCTB4MjY2MCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgwYzdmLCAweDAwNzgsIDB4NWY0NCwgMHg4ZGZmLAotCTB4MDA0MCwgMHg1Zjk5LCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgxMDc4LAotCTB4NDk4MiwgMHgxMDc4LCAweDcwNDUsIDB4MDA3OCwgMHg1ZjQ0LCAweDAwN2YsIDB4MDA3OCwgMHg1ZjM3LAotCTB4NzgxZSwgMHg3ODFhLCAweDBkN2YsIDB4MGM3ZiwgMHgwNjdmLCAweDAwN2YsIDB4MDA3YywgMHgwZTdlLAotCTB4MGQ3ZSwgMHgwNjdlLCAweDYwMDAsIDB4ZDBkYywgMHgwMDQwLCAweDVmYzQsIDB4NjA0YywgMHhhMDZkLAotCTB4MDA0MCwgMHg1ZmM0LCAweDY4NDgsIDB4YTYwNiwgMHgwMGMwLCAweDVmYzQsIDB4MjA3MSwgMHhhNWFiLAotCTB4NzAyNCwgMHhhMDM1LCAweDAwNDAsIDB4NWZjNCwgMHhhMDgwLCAweDAwMDQsIDB4MjAwNCwgMHhhZDA2LAotCTB4MDBjMCwgMHg1ZmM0LCAweDEwNzgsIDB4NWZjOCwgMHgwNjdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MGY3ZSwgMHgyMDc5LCAweDAxMDAsIDB4NzhjMCwgMHhhMDA1LCAweDAwYzAsIDB4NWZkNywgMHgwYzdlLAotCTB4MjY2MCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgwYzdmLCAweDAwNzgsIDB4NjAwZSwgMHgxMDc4LAotCTB4NmM0MSwgMHg3OGMzLCAweDAwMDAsIDB4MTA3OCwgMHg3MTg4LCAweDcwMjcsIDB4MDAwMCwgMHgwMzdlLAotCTB4MjA3OSwgMHgwMTQwLCAweDdiMDQsIDB4YTM4NCwgMHgxMDAwLCAweDAwNDAsIDB4NWZlYiwgMHg3ODAzLAotCTB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4MjA3OSwgMHgwMTAwLCAweDc4MjQsIDB4ZDA4NCwgMHgwMDQwLAotCTB4NWZmMywgMHg3ODI3LCAweDAwMDEsIDB4MTA3OCwgMHg3MTg4LCAweDAzN2YsIDB4MTA3OCwgMHg0NDEwLAotCTB4MGM3ZSwgMHg2MDNjLCAweGEwMDUsIDB4MDA0MCwgMHg1ZmZmLCAweDgwMDEsIDB4NjAzZSwgMHgyNjYwLAotCTB4MTA3OCwgMHg3NTNkLCAweDBjN2YsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLAotCTB4MTA3OCwgMHg4Y2I4LCAweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDcwNDUsIDB4MGY3ZiwgMHgwMDdjLAotCTB4MGU3ZSwgMHgwYzdlLCAweDIwNzEsIDB4YTVhYiwgMHg3MDA0LCAweGEwODQsIDB4MDAwNywgMHgwMDc5LAotCTB4NjAxOSwgMHg2MDIzLCAweDYwMjYsIDB4NjAzZiwgMHg2MDViLCAweDYwYTAsIDB4NjAyMywgMHg2MDIzLAotCTB4NjAyMSwgMHgxMDc4LCAweDEzMjgsIDB4MGM3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzAyNCwgMHhhMDY1LAotCTB4MDA0MCwgMHg2MDM0LCAweDcwMjAsIDB4ODAwMSwgMHg3MDIyLCAweDYwMGMsIDB4YTAxNSwgMHgwMDQwLAotCTB4NjAzYiwgMHg3MjE2LCAweDYwMGYsIDB4MDAwMCwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNywgMHgwMDAwLAotCTB4MGM3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzIxNiwgMHg3MjEyLCAweDAwNzgsIDB4NjAzNCwgMHg2MDE4LAotCTB4MjA2MCwgMHgxMDc4LCAweDQ0MTAsIDB4NjAwMCwgMHhjMGRjLCAweDYwMDIsIDB4NzAyMCwgMHg4MDAxLAotCTB4NzAyMiwgMHgwMDQwLCAweDYwNTAsIDB4NjA1NCwgMHhhMDE1LCAweDAwNDAsIDB4NjA1NywgMHg3MjFlLAotCTB4NzAwNywgMHgwMDAwLCAweDcwMjcsIDB4MDAwMCwgMHgwYzdmLCAweDBlN2YsIDB4MDA3YywgMHg3MjE4LAotCTB4NzIxZSwgMHgwMDc4LCAweDYwNTAsIDB4NzAyNCwgMHhhMDY1LCAweDAwNDAsIDB4NjA5ZCwgMHg3MDBjLAotCTB4YWMwNiwgMHgwMGMwLCAweDYwNzIsIDB4MTA3OCwgMHg3MDQ1LCAweDYwMGMsIDB4YTAxNSwgMHgwMDQwLAotCTB4NjA2ZSwgMHg3MjBlLCAweDYwMGYsIDB4MDAwMCwgMHgwMDc4LCAweDYwOWIsIDB4NzIwZSwgMHg3MjBhLAotCTB4MDA3OCwgMHg2MDliLCAweDcwMTQsIDB4YWMwNiwgMHgwMGMwLCAweDYwODUsIDB4MTA3OCwgMHg3MDQ1LAotCTB4NjAwYywgMHhhMDE1LCAweDAwNDAsIDB4NjA4MSwgMHg3MjE2LCAweDYwMGYsIDB4MDAwMCwgMHgwMDc4LAotCTB4NjA5YiwgMHg3MjE2LCAweDcyMTIsIDB4MDA3OCwgMHg2MDliLCAweDYwMTgsIDB4MjA2MCwgMHgxMDc4LAotCTB4NDQxMCwgMHg2MDAwLCAweGMwZGMsIDB4NjAwMiwgMHgxMDc4LCAweDcwNDUsIDB4NzAxYywgMHhhMDY1LAotCTB4MDA0MCwgMHg2MDliLCAweDYwNTQsIDB4YTAxNSwgMHgwMDQwLCAweDYwOTksIDB4NzIxZSwgMHgwMDc4LAotCTB4NjA5YiwgMHg3MjE4LCAweDcyMWUsIDB4NzAyNywgMHgwMDAwLCAweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLAotCTB4NzAyNCwgMHhhMDY1LCAweDAwNDAsIDB4NjBhZCwgMHgxMDc4LCAweDcwNDUsIDB4NjAwYywgMHhhMDE1LAotCTB4MDA0MCwgMHg2MGI0LCAweDcyMGUsIDB4NjAwZiwgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwgMHg3MDI3LAotCTB4MDAwMCwgMHgwYzdmLCAweDBlN2YsIDB4MDA3YywgMHg3MjBlLCAweDcyMGEsIDB4MDA3OCwgMHg2MGFkLAotCTB4MGQ3ZSwgMHgyMDY5LCAweGE1YWIsIDB4NjgzMCwgMHhhMDg0LCAweDAwMDMsIDB4MDA3OSwgMHg2MGMwLAotCTB4NjBjNiwgMHg2MGM4LCAweDYwZWUsIDB4NjBjNiwgMHgxMDc4LCAweDEzMjgsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4MGM3ZSwgMHg2ODQwLCAweGEwODYsIDB4MDAwMSwgMHgwMDQwLCAweDYwZTQsIDB4NjgzYywgMHhhMDY1LAotCTB4MDA0MCwgMHg2MGQ5LCAweDYwMGMsIDB4YTAxNSwgMHgwMDQwLCAweDYwZTAsIDB4NmEzYSwgMHg2MDBmLAotCTB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLCAweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4NjgzYSwgMHg2ODM2LCAweDAwNzgsIDB4NjBkOSwgMHg2ODQzLCAweDAwMDAsIDB4NjgzOCwgMHhhMDY1LAotCTB4MDA0MCwgMHg2MGQ5LCAweDYwMDMsIDB4MDAwMywgMHgwMDc4LCAweDYwZDksIDB4MGM3ZSwgMHg2ODQzLAotCTB4MDAwMCwgMHg2ODQ3LCAweDAwMDAsIDB4NjgzYywgMHhhMDY1LCAweDAwNDAsIDB4NjEwNiwgMHg2MDBjLAotCTB4YTAxNSwgMHgwMDQwLCAweDYxMDIsIDB4NmEzYSwgMHg2MDBmLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLAotCTB4MDA3OCwgMHg2MTA2LCAweDY4M2YsIDB4MDAwMCwgMHg2ODNhLCAweDY4MzYsIDB4MGM3ZiwgMHgwZDdmLAotCTB4MDA3YywgMHgwZDdlLCAweDIwNjksIDB4YTVhYiwgMHg2ODA0LCAweGEwODQsIDB4MDAwNywgMHgwMDc5LAotCTB4NjExMSwgMHg2MTFiLCAweDYxYzIsIDB4NjFjMiwgMHg2MWMyLCAweDYxYzIsIDB4NjFjNCwgMHg2MWMyLAotCTB4NjExOSwgMHgxMDc4LCAweDEzMjgsIDB4NjgyMCwgMHhhMDA1LCAweDAwYzAsIDB4NjEyMSwgMHgwZDdmLAotCTB4MDA3YywgMHgwYzdlLCAweDY4MGMsIDB4YTA2NSwgMHgwMDQwLCAweDYxMzAsIDB4NjgwNywgMHgwMDA0LAotCTB4NjgyNiwgMHg2ODJiLCAweDAwMDAsIDB4MTA3OCwgMHg2MjBhLCAweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4NjgxNCwgMHhhMDY1LCAweDAwNDAsIDB4NjEzZSwgMHg2ODA3LCAweDAwMDEsIDB4NjgyNiwgMHg2ODJiLAotCTB4MDAwMCwgMHgxMDc4LCAweDYyMGEsIDB4MGM3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MGU3ZSwgMHgwMzdlLAotCTB4NmExYywgMHhhMmY1LCAweDAwMDAsIDB4MDA0MCwgMHg2MWJkLCAweDcwNGMsIDB4YTAwZCwgMHgwMDQwLAotCTB4NjE0ZCwgMHg3MDg4LCAweGEwMDUsIDB4MDA0MCwgMHg2MTY1LCAweDcwNTQsIDB4YTA3NSwgMHgwMDQwLAotCTB4NjE1NiwgMHhhMjBlLCAweDAwNDAsIDB4NjFiZCwgMHgwMDc4LCAweDYxNWIsIDB4NjgxOCwgMHhhMjBlLAotCTB4MDA0MCwgMHg2MWJkLCAweDIwNzAsIDB4NzA0YywgMHhhMDBkLCAweDAwNDAsIDB4NjE0ZCwgMHg3MDg4LAotCTB4YTAwNSwgMHgwMGMwLCAweDYxNGQsIDB4MmUwMCwgMHg2ODFlLCAweDczM2MsIDB4NzAzOCwgMHhhMzAyLAotCTB4MDBjOCwgMHg2MTRkLCAweDEwNzgsIDB4NzUwYywgMHgwMDQwLCAweDYxYmQsIDB4ODMxOCwgMHg3MzNlLAotCTB4NjExMiwgMHgyZTEwLCAweDYyMWEsIDB4YTE4MCwgMHgwMDE0LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLAotCTB4NjAzMiwgMHhhMTgwLCAweDAwMTQsIDB4MjAwMywgMHgwMDAwLCAweGExODAsIDB4MDAxNSwgMHgyMDA0LAotCTB4YTA4YSwgMHgxOTlhLCAweDAwNDgsIDB4NjE4NiwgMHgyMDAxLCAweDE5OTksIDB4ODAwMywgMHg4MDFiLAotCTB4ODMxYiwgMHhhMzE4LCAweDYzMTYsIDB4MDM3ZiwgMHgwZjdlLCAweDJjNzgsIDB4NzFhMCwgMHhkMWJjLAotCTB4MDA0MCwgMHg2MTlmLCAweDcxMDAsIDB4ZDFmNCwgMHgwMDQwLCAweDYxOWIsIDB4NzExNCwgMHhhMThjLAotCTB4MDBmZiwgMHgwMDc4LCAweDYxYTQsIDB4MjAwOSwgMHgwMDAwLCAweDAwNzgsIDB4NjFhNCwgMHhhMWUwLAotCTB4MjkzZiwgMHgyYzBjLCAweGExOGMsIDB4MDBmZiwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHgxMDc4LAotCTB4Njc5YiwgMHg3MzAwLCAweGMzZGQsIDB4NzMwMiwgMHg2ODA3LCAweDAwMDIsIDB4MmYxOCwgMHg2YjI2LAotCTB4NjgyYiwgMHgwMDAwLCAweDc4MWYsIDB4MDAwMywgMHg3ODAzLCAweDAwMDEsIDB4NzgwNywgMHgwMDQwLAotCTB4MGY3ZiwgMHgwZTdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDAzN2YsIDB4MGU3ZiwgMHgwYzdmLAotCTB4MDA3OCwgMHg2MWJiLCAweDBkN2YsIDB4MDA3YywgMHgwYzdlLCAweDY4MGMsIDB4YTA2NSwgMHgwMDQwLAotCTB4NjFkMCwgMHg2ODA3LCAweDAwMDQsIDB4NjgyNiwgMHg2ODJiLCAweDAwMDAsIDB4MTA3OCwgMHg2MjBhLAotCTB4MGM3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MGY3ZSwgMHgwZDdlLCAweDIwNjksIDB4YTVhYiwgMHg2ODMwLAotCTB4YTA4NiwgMHgwMDAwLCAweDAwYzAsIDB4NjFmMSwgMHg2ODM4LCAweGEwN2QsIDB4MDA0MCwgMHg2MWYxLAotCTB4NjgzMywgMHgwMDAxLCAweDY4M2UsIDB4Njg0NywgMHgwMDAwLCAweDEyN2UsIDB4MGY3ZSwgMHgyMDkxLAotCTB4MjIwMCwgMHgwMjdmLCAweDEwNzgsIDB4MWQyOCwgMHgwMGMwLCAweDYxZjQsIDB4MTI3ZiwgMHgxMDc4LAotCTB4NmFlNSwgMHgwZDdmLCAweDBmN2YsIDB4MDA3YywgMHgxMjdmLCAweDY4NDMsIDB4MDAwMCwgMHg3ODAzLAotCTB4MDAwMiwgMHg3ODBjLCAweGEwMTUsIDB4MDA0MCwgMHg2MjA2LCAweDZhM2EsIDB4NzgwZiwgMHgwMDAwLAotCTB4NjgzMywgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwgMHgwMDc4LCAweDYxZjEsIDB4NjgzYSwgMHg2ODM2LAotCTB4MDA3OCwgMHg2MjAwLCAweDYwMWMsIDB4YTA4NCwgMHgwMDBmLCAweDEwNzksIDB4NjIxMCwgMHgwMDdjLAotCTB4NjIxOSwgMHg2MjFlLCAweDY2M2YsIDB4Njc1OCwgMHg2MjFlLCAweDY2M2YsIDB4Njc1OCwgMHg2MjE5LAotCTB4NjIxZSwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MTU3ZSwgMHgxMzdlLAotCTB4MTQ3ZSwgMHgwYzdlLCAweDBmN2UsIDB4NjAwNCwgMHhhMDhhLCAweDAwNDQsIDB4MTBjOCwgMHgxMzI4LAotCTB4NjExOCwgMHgyMTc4LCAweDc5YTAsIDB4ZDFiYywgMHgwMDQwLCAweDYyM2IsIDB4NzkwMCwgMHhkMWY0LAotCTB4MDA0MCwgMHg2MjM3LCAweDc5MTQsIDB4YTE4YywgMHgwMGZmLCAweDAwNzgsIDB4NjI0MCwgMHgyMDA5LAotCTB4MDAwMCwgMHgwMDc4LCAweDYyNDAsIDB4YTFmOCwgMHgyOTNmLCAweDJmMGMsIDB4YTE4YywgMHgwMGZmLAotCTB4MmM3OCwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHhhMDhhLCAweDAwNDAsIDB4MDBjOCwgMHg2MjkyLAotCTB4MTA3OSwgMHg2MjUwLCAweDBmN2YsIDB4MGM3ZiwgMHgxNDdmLCAweDEzN2YsIDB4MTU3ZiwgMHgwMDdjLAotCTB4NjJmOCwgMHg2MzQwLCAweDYzNjgsIDB4NjQwMywgMHg2NDMzLCAweDY0M2IsIDB4NjQ2MiwgMHg2NDczLAotCTB4NjQ4NCwgMHg2NDhjLCAweDY0YTQsIDB4NjQ4YywgMHg2NTBmLCAweDY0NzMsIDB4NjUzMCwgMHg2NTM4LAotCTB4NjQ4NCwgMHg2NTM4LCAweDY1NDksIDB4NjI5MCwgMHg2MjkwLCAweDYyOTAsIDB4NjI5MCwgMHg2MjkwLAotCTB4NjI5MCwgMHg2MjkwLCAweDYyOTAsIDB4NjI5MCwgMHg2MjkwLCAweDYyOTAsIDB4NmQwNSwgMHg2ZDJhLAotCTB4NmQzZiwgMHg2ZDYyLCAweDZkODMsIDB4NjQ2MiwgMHg2MjkwLCAweDY0NjIsIDB4NjQ4YywgMHg2MjkwLAotCTB4NjM2OCwgMHg2NDAzLCAweDYyOTAsIDB4NzJhYywgMHg2NDhjLCAweDYyOTAsIDB4NzJjYywgMHg2NDhjLAotCTB4NjI5MCwgMHg2MjkwLCAweDYyZjMsIDB4NjJhMSwgMHg2MjkwLCAweDcyZjEsIDB4NzM2OCwgMHg3NDUwLAotCTB4NjI5MCwgMHg3NDYxLCAweDY0NWMsIDB4NzQ3ZCwgMHg2MjkwLCAweDZkOTgsIDB4NjI5MCwgMHg2MjkwLAotCTB4MTA3OCwgMHgxMzI4LCAweDIxMDAsIDB4MTA3OSwgMHg2MjliLCAweDBmN2YsIDB4MGM3ZiwgMHgxNDdmLAotCTB4MTM3ZiwgMHgxNTdmLCAweDAwN2MsIDB4NjI5ZiwgMHg2MjlmLCAweDYyOWYsIDB4NjJkNSwgMHgxMDc4LAotCTB4MTMyOCwgMHgwZDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4NzgxMCwgMHgyMDY4LAotCTB4MjBhMywgMHgyNDE0LCAweDIwYTMsIDB4MDAxOCwgMHgyMGEzLCAweDA4MDAsIDB4NjgzYywgMHgyMGEyLAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4Njg1MCwgMHgyMGEyLCAweDY4NTQsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4NjBjMywgMHgwMDE4LCAweDEwNzgsIDB4NmMyZCwgMHgwZDdmLCAweDAwN2MsIDB4MGQ3ZSwgMHg3ODE4LAotCTB4MjA2OCwgMHg2OGEwLCAweGEwODIsIDB4MDA3ZSwgMHgwMDQ4LCAweDYyZDIsIDB4YTA4NSwgMHgwMDAxLAotCTB4MGQ3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwgMHg2MmQwLCAweDBkN2UsIDB4MjBhMSwgMHgwMjBiLAotCTB4MTA3OCwgMHg2NTY3LCAweDIwYTMsIDB4MDUwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgxMCwgMHhhMGU4LAotCTB4MDAwZiwgMHg2ODA4LCAweDIwYTIsIDB4NjgwYywgMHgyMGEyLCAweDY4MTAsIDB4MjBhMiwgMHg2ODE0LAotCTB4MjBhMiwgMHg2ODE4LCAweDIwYTIsIDB4NjgxYywgMHgyMGEyLCAweDYwYzMsIDB4MDAxMCwgMHgxMDc4LAotCTB4NmMyZCwgMHgwZDdmLCAweDAwN2MsIDB4NjAzMCwgMHg2MDlhLCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLAotCTB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywgMHgyMGEzLCAweDUyMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MGQ3ZSwgMHgyMDY5LCAweGEzNTEsIDB4NjgwNCwgMHhkMDg0LCAweDAwNDAsIDB4NjMxMiwgMHg2ODI4LAotCTB4MjBhMywgMHgwMDAwLCAweDAxN2UsIDB4MTA3OCwgMHgyNGZhLCAweDIxYTIsIDB4MDE3ZiwgMHgwZDdmLAotCTB4MDA3OCwgMHg2MzE3LCAweDBkN2YsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGE5LAotCTB4MDAwNCwgMHgyMDk5LCAweGEzMDUsIDB4NTNhNiwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHhhMzAxLAotCTB4NTNhNiwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEwODIsIDB4MDA3ZiwgMHgwMDQ4LAotCTB4NjMzMSwgMHgyMDAxLCAweGEzMWEsIDB4MjBhNiwgMHgyMDAxLCAweGEzMWIsIDB4MjBhNiwgMHgwMDc4LAotCTB4NjMzNywgMHgyMGEzLCAweDAwMDAsIDB4NjAzMCwgMHhhMDg0LCAweDAwZmYsIDB4MjBhMiwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDFjLCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLAotCTB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywgMHgyMGEzLCAweDA1MDAsIDB4MjBhMywgMHgwMDAwLAotCTB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDgyLCAweDAwN2YsIDB4MDA0OCwgMHg2MzU4LAotCTB4MjAwMSwgMHhhMzFhLCAweDIwYTYsIDB4MjAwMSwgMHhhMzFiLCAweDIwYTYsIDB4MDA3OCwgMHg2MzVlLAotCTB4MjBhMywgMHgwMDAwLCAweDYwMzAsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4MjBhOSwgMHgwMDA0LAotCTB4MjA5OSwgMHhhMzA1LCAweDUzYTYsIDB4NjBjMywgMHgwMDEwLCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLAotCTB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywgMHgwYzdlLCAweDc4MTgsIDB4MjA2MCwgMHgyMDAxLAotCTB4MDAwMCwgMHgxMDc4LCAweDQ4YTIsIDB4MGM3ZiwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4YTA4NiwgMHgwMDdlLCAweDAwYzAsIDB4NjM4MywgMHgyMGEzLCAweDA0MDAsIDB4NjIwYywgMHhjMmI0LAotCTB4NjIwZSwgMHgwMDc4LCAweDYzODUsIDB4MjBhMywgMHgwMzAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODE4LAotCTB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4NiwgMHgwMDdlLCAweDAwYzAsIDB4NjNkMiwgMHgyMDk5LAotCTB4YTU4YywgMHgzM2E2LCAweDkzOTgsIDB4MzNhNiwgMHg5Mzk4LCAweDMzMDQsIDB4YTA4NCwgMHgzZmZmLAotCTB4MjBhMiwgMHg5Mzk4LCAweDMzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YTMwNSwgMHg1M2E2LAotCTB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YTMwMSwgMHg1M2E2LCAweDIwYTksIDB4MDAxMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgwMGYwLCAweDYzYWYsIDB4MjA5OSwgMHhhNTk0LCAweDMzMDQsIDB4YzBkZCwgMHgyMGEyLAotCTB4MjAwMSwgMHhhMzcxLCAweDIwMDQsIDB4ZDBlNCwgMHgwMDQwLCAweDYzY2EsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDkzOTgsIDB4OTM5OCwgMHg5Mzk4LCAweDMzYTYsIDB4MjBhOSwgMHgwMDA0LAotCTB4MDA3OCwgMHg2M2NjLCAweDIwYTksIDB4MDAwNywgMHgyMGEzLCAweDAwMDAsIDB4MDBmMCwgMHg2M2NjLAotCTB4MDA3OCwgMHg2M2YyLCAweDIwOTksIDB4YTU4YywgMHgyMGE5LCAweDAwMDgsIDB4NTNhNiwgMHgyMGE5LAotCTB4MDAwNCwgMHgyMDk5LCAweGEzMDUsIDB4NTNhNiwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHhhMzAxLAotCTB4NTNhNiwgMHgyMGE5LCAweDAwMDgsIDB4MjBhMywgMHgwMDAwLCAweDAwZjAsIDB4NjNlMywgMHgyMGE5LAotCTB4MDAwOCwgMHgyMGEzLCAweDAwMDAsIDB4MDBmMCwgMHg2M2U5LCAweDIwOTksIDB4YTU5NCwgMHgyMGE5LAotCTB4MDAwOCwgMHg1M2E2LCAweDIwYTksIDB4MDAwOCwgMHgyMGEzLCAweDAwMDAsIDB4MDBmMCwgMHg2M2Y0LAotCTB4MjBhOSwgMHgwMDBhLCAweDIwYTMsIDB4MDAwMCwgMHgwMGYwLCAweDYzZmEsIDB4NjBjMywgMHgwMDc0LAotCTB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywgMHgyMGEzLAotCTB4MjAxMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywgMHgwODAwLCAweDIwYTMsIDB4MjAwMCwgMHhhMDA2LAotCTB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDBmN2UsIDB4MjA3OSwgMHhhMzUxLAotCTB4NzkwNCwgMHgwZjdmLCAweGQxYWMsIDB4MDBjMCwgMHg2NDFmLCAweGEwODUsIDB4MDAyMCwgMHhkMWE0LAotCTB4MDA0MCwgMHg2NDI0LCAweGEwODUsIDB4MDAxMCwgMHhhMDg1LCAweDAwMDIsIDB4MGQ3ZSwgMHgwMDc4LAotCTB4NjRlZCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LAotCTB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywgMHgyMGEzLAotCTB4NTAwMCwgMHgwMDc4LCAweDYzODUsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywgMHgyMGEzLAotCTB4MjExMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLAotCTB4MDAxNCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NWVmLAotCTB4MDA3OCwgMHg2NDY2LCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywgMHgwMjAwLAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDA0LAotCTB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwgMHgyMGEzLAotCTB4MDEwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAzLCAweDIwYTMsIDB4MmEwMCwgMHg2MGMzLAotCTB4MDAwOCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NWY4LAotCTB4MjBhMywgMHgwMjAwLCAweDAwNzgsIDB4NjM4NSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NWY4LAotCTB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODI4LCAweGEwMDUsIDB4MDA0MCwgMHg2NDliLAotCTB4MjBhMiwgMHgwMDc4LCAweDY0OWQsIDB4MjBhMywgMHgwMDAzLCAweDc4MTAsIDB4MjBhMiwgMHg2MGMzLAotCTB4MDAwOCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywgMHgwZDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LAotCTB4NjVmOCwgMHgyMGEzLCAweDAyMTAsIDB4MjBhMywgMHgwMDE0LCAweDIwYTMsIDB4MDgwMCwgMHg3ODE4LAotCTB4MjA2OCwgMHg2ODk0LCAweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDY0Y2EsIDB4Njk5OCwgMHhhMTg0LAotCTB4YzAwMCwgMHgwMGMwLCAweDY0YzYsIDB4ZDFlYywgMHgwMDQwLCAweDY0YzIsIDB4MjBhMywgMHgyMTAwLAotCTB4MDA3OCwgMHg2NGNjLCAweDIwYTMsIDB4MDEwMCwgMHgwMDc4LCAweDY0Y2MsIDB4MjBhMywgMHgwNDAwLAotCTB4MDA3OCwgMHg2NGNjLCAweDIwYTMsIDB4MDcwMCwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLAotCTB4MjBhMiwgMHgyMGEyLCAweDBmN2UsIDB4MjA3OSwgMHhhMzUxLCAweDc5MDQsIDB4MGY3ZiwgMHhkMWFjLAotCTB4MDBjMCwgMHg2NGRjLCAweGEwODUsIDB4MDAyMCwgMHhkMWE0LCAweDAwNDAsIDB4NjRlMSwgMHhhMDg1LAotCTB4MDAxMCwgMHgyMDA5LCAweGEzNzMsIDB4MjEwYywgMHhkMTg0LCAweDAwNDAsIDB4NjRlYiwgMHg2OTljLAotCTB4ZDE4YywgMHgwMDQwLCAweDY0ZWQsIDB4YTA4NSwgMHgwMDAyLCAweDAyN2UsIDB4MjAwOSwgMHhhMzcxLAotCTB4MjEwYywgMHhkMWU0LCAweDAwNDAsIDB4NjRmYiwgMHhjMGM1LCAweGEwOTQsIDB4MDAzMCwgMHhhMjk2LAotCTB4MDAxMCwgMHgwMDQwLCAweDY1MDUsIDB4ZDFlYywgMHgwMDQwLCAweDY1MDUsIDB4YTA5NCwgMHgwMDMwLAotCTB4YTI5NiwgMHgwMDEwLCAweDAwNDAsIDB4NjUwNSwgMHhjMGJkLCAweDAyN2YsIDB4MjBhMiwgMHgyMGEyLAotCTB4MjBhMiwgMHg2MGMzLCAweDAwMTQsIDB4MTA3OCwgMHg2YzJkLCAweDBkN2YsIDB4MDA3YywgMHgyMGExLAotCTB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywgMHgwMjEwLCAweDIwYTMsIDB4MDAxNCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLAotCTB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwgMHgyMGEzLCAweDAyMDAsIDB4MDA3OCwgMHg2MmZlLAotCTB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAzLCAweDIwYTMsIDB4MmEwMCwgMHg2MGMzLCAweDAwMDgsIDB4MTA3OCwgMHg2YzJkLAotCTB4MDA3YywgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LAotCTB4NjVmOCwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwYiwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MGMzLCAweDAwMDgsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MDI3ZSwgMHgwMzdlLAotCTB4MDQ3ZSwgMHgyMDE5LCAweDMyMDAsIDB4MjAyMSwgMHgwODAwLCAweDAwNzgsIDB4NjU2ZSwgMHgwMjdlLAotCTB4MDM3ZSwgMHgwNDdlLCAweDIwMTksIDB4MjIwMCwgMHgyMDIxLCAweDAxMDAsIDB4MjBlMSwgMHg5MDgwLAotCTB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMTQsIDB4YTI4NiwgMHgwMDdlLAotCTB4MDBjMCwgMHg2NTgxLCAweGEzODUsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTMsIDB4ZmZmZSwgMHgwMDc4LAotCTB4NjViNiwgMHhhMjg2LCAweDAwN2YsIDB4MDBjMCwgMHg2NThkLCAweDBkN2UsIDB4YTM4NSwgMHgwMGZmLAotCTB4MjBhMiwgMHgyMGEzLCAweGZmZmQsIDB4MDA3OCwgMHg2NWE0LCAweGQyYmMsIDB4MDA0MCwgMHg2NWFjLAotCTB4YTI4NiwgMHgwMDgwLCAweDBkN2UsIDB4MDBjMCwgMHg2NTljLCAweGEzODUsIDB4MDBmZiwgMHgyMGEyLAotCTB4MjBhMywgMHhmZmZjLCAweDAwNzgsIDB4NjVhNCwgMHhhMmU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLAotCTB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGEzMWEsIDB4MmRhNiwgMHg4ZDY4LAotCTB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4NjViYSwgMHgwZDdlLCAweGEyZTgsIDB4YTQzNCwgMHgyZDZjLAotCTB4NjgxMCwgMHhhMzA1LCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywgMHgwMDAwLAotCTB4NjIzMCwgMHgyMmEyLCAweGE0ODUsIDB4MDAyOSwgMHgyMGEyLCAweDA0N2YsIDB4MDM3ZiwgMHgyMGEzLAotCTB4MDAwMCwgMHgxMDc4LCAweDZjMWMsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4MmZhMiwgMHgyMGEzLAotCTB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAyN2YsIDB4MDA3YywgMHgwMjdlLAotCTB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgyMGEzLCAweDAyZmYsIDB4MjAxMSwgMHhmZmZjLAotCTB4MjJhMiwgMHgwZDdlLCAweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwZDdmLAotCTB4MjBhMywgMHgyMDI5LCAweDIwYTMsIDB4MDAwMCwgMHgwMDc4LCAweDY1YzEsIDB4MjBhMywgMHgwMTAwLAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4ZmMwMiwgMHgyMGEzLCAweDAwMDAsIDB4MDA3YywgMHgwMjdlLAotCTB4MDM3ZSwgMHgwNDdlLCAweDIwMTksIDB4MzMwMCwgMHgyMDIxLCAweDA4MDAsIDB4MDA3OCwgMHg2NWZmLAotCTB4MDI3ZSwgMHgwMzdlLCAweDA0N2UsIDB4MjAxOSwgMHgyMzAwLCAweDIwMjEsIDB4MDEwMCwgMHgyMGUxLAotCTB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDkyLAotCTB4MDA3ZSwgMHgwMDQ4LCAweDY2MWMsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLAotCTB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGEzMWEsIDB4MmRhNiwgMHg4ZDY4LAotCTB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4NjYyYSwgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLAotCTB4NjgxMCwgMHhhMzA1LCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywgMHgwMDAwLAotCTB4NjIzMCwgMHgyMmEyLCAweGE0ODUsIDB4MDA5OCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwgMHgwNDdmLAotCTB4MDM3ZiwgMHgxMDc4LCAweDZjMWMsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4N2EwOCwgMHgyMmEyLAotCTB4MmZhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAyN2YsIDB4MDA3YywgMHgwYzdlLAotCTB4MGY3ZSwgMHg2MDA0LCAweGEwOGEsIDB4MDA4NSwgMHgxMDQ4LCAweDEzMjgsIDB4YTA4YSwgMHgwMDhjLAotCTB4MTBjOCwgMHgxMzI4LCAweDYxMTgsIDB4MjE3OCwgMHg3OWEwLCAweGQxYmMsIDB4MDA0MCwgMHg2NjVkLAotCTB4NzkwMCwgMHhkMWY0LCAweDAwNDAsIDB4NjY1OSwgMHg3OTE0LCAweGExOGMsIDB4MDBmZiwgMHgwMDc4LAotCTB4NjY2MiwgMHgyMDA5LCAweDAwMDAsIDB4MDA3OCwgMHg2NjYyLCAweGExZjgsIDB4MjkzZiwgMHgyZjBjLAotCTB4YTE4YywgMHgwMGZmLCAweDJjNzgsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4YTA4MiwgMHgwMDg1LAotCTB4MTA3OSwgMHg2NjZkLCAweDBmN2YsIDB4MGM3ZiwgMHgwMDdjLCAweDY2NzYsIDB4NjY4MSwgMHg2NjljLAotCTB4NjY3NCwgMHg2Njc0LCAweDY2NzQsIDB4NjY3NiwgMHgxMDc4LCAweDEzMjgsIDB4MTQ3ZSwgMHgyMGExLAotCTB4MDIwYiwgMHgxMDc4LCAweDY2YWYsIDB4NjBjMywgMHgwMDAwLCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLAotCTB4MDA3YywgMHgxNDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY2ZTMsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDc4MDgsIDB4MjBhMiwgMHg3ODEwLCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHhmZmZmLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDBjLAotCTB4MTA3OCwgMHg2YzJkLCAweDE0N2YsIDB4MDA3YywgMHgxNDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LAotCTB4NjcyNCwgMHgyMGEzLCAweDAwMDMsIDB4MjBhMywgMHgwMzAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MGMzLCAweDAwMDQsIDB4MTA3OCwgMHg2YzJkLCAweDE0N2YsIDB4MDA3YywgMHgwMjdlLAotCTB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4YTA5MiwgMHgwMDdlLCAweDAwNDgsIDB4NjZjZSwgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLAotCTB4NjgxMCwgMHhhMDg1LCAweDgxMDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLAotCTB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDY2ZGQsIDB4MGQ3ZSwgMHhhMGU4LAotCTB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHg4MTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLAotCTB4MGQ3ZiwgMHgyMGEzLCAweDAwMDAsIDB4NjIzMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwOSwgMHgyMGEzLAotCTB4MDAwMCwgMHgwMDc4LCAweDY1YzEsIDB4MDI3ZSwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLAotCTB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDkyLCAweDAwN2UsIDB4MDA0OCwgMHg2NzAyLAotCTB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODQwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwZDdmLAotCTB4MDA3OCwgMHg2NzExLCAweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LAotCTB4ODQwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHg2MjMwLAotCTB4MjJhMiwgMHgyMGEzLCAweDAwOTksIDB4MjBhMywgMHgwMDAwLCAweDEwNzgsIDB4NmMxYywgMHgyMmEyLAotCTB4MjBhMywgMHgwMDAwLCAweDdhMDgsIDB4MjJhMiwgMHg3YTEwLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDAyN2YsIDB4MDA3YywgMHgwMjdlLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLAotCTB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEwOTIsIDB4MDA3ZSwgMHgwMDQ4LAotCTB4Njc0MywgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHg4NTAwLAotCTB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LAotCTB4MGQ3ZiwgMHgwMDc4LCAweDY3NTIsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLAotCTB4YTA4NSwgMHg4NTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywgMHgwMDAwLAotCTB4NjIzMCwgMHgyMmEyLCAweDIwYTMsIDB4MDA5OSwgMHgyMGEzLCAweDAwMDAsIDB4MDA3OCwgMHg2NzE1LAotCTB4MGM3ZSwgMHgwZjdlLCAweDJjNzgsIDB4NzgwNCwgMHhhMDhhLCAweDAwNDAsIDB4MTA0OCwgMHgxMzI4LAotCTB4YTA4YSwgMHgwMDUzLCAweDEwYzgsIDB4MTMyOCwgMHg3OTE4LCAweDIxNjAsIDB4NjFhMCwgMHhkMWJjLAotCTB4MDA0MCwgMHg2Nzc3LCAweDYxMDAsIDB4ZDFmNCwgMHgwMDQwLCAweDY3NzMsIDB4NjExNCwgMHhhMThjLAotCTB4MDBmZiwgMHgwMDc4LCAweDY3N2MsIDB4MjAwOSwgMHgwMDAwLCAweDAwNzgsIDB4Njc3YywgMHhhMWUwLAotCTB4MjkzZiwgMHgyYzBjLCAweGExOGMsIDB4MDBmZiwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHhhMDgyLAotCTB4MDA0MCwgMHgxMDc5LCAweDY3ODYsIDB4MGY3ZiwgMHgwYzdmLCAweDAwN2MsIDB4Njc5YiwgMHg2OGE5LAotCTB4Njg0YSwgMHg2YTU5LCAweDY3OTksIDB4Njc5OSwgMHg2Nzk5LCAweDY3OTksIDB4Njc5OSwgMHg2Nzk5LAotCTB4Njc5OSwgMHg2ZjVlLCAweDZmNmYsIDB4NmY4MCwgMHg2ZjkxLCAweDY3OTksIDB4NzQ4ZSwgMHg2Nzk5LAotCTB4NmY0ZCwgMHgxMDc4LCAweDEzMjgsIDB4MGQ3ZSwgMHgxNTdlLCAweDE0N2UsIDB4NzgwYiwgMHhmZmZmLAotCTB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjgwNiwgMHg3OTEwLCAweDIxNjgsIDB4Njk0OCwgMHg3OTIyLAotCTB4MjFhMiwgMHhhMDE2LCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDY5NGMsIDB4YTE4NCwgMHgwMDBmLAotCTB4MDBjMCwgMHg2N2I2LCAweDIwMDEsIDB4MDAwNSwgMHgwMDc4LCAweDY3YzAsIDB4ZDE4NCwgMHgwMDQwLAotCTB4NjdiZCwgMHgyMDAxLCAweDAwMDQsIDB4MDA3OCwgMHg2N2MwLCAweGEwODQsIDB4MDAwNiwgMHg4MDA0LAotCTB4MDE3ZSwgMHgyMDA4LCAweDc4MzAsIDB4YTA4NCwgMHgwMGZmLCAweDgwMDcsIDB4YTEwNSwgMHgwMTdmLAotCTB4MjBhMiwgMHhkMWFjLCAweDAwNDAsIDB4NjdkMCwgMHgyMGEzLCAweDAwMDIsIDB4MDA3OCwgMHg2N2RjLAotCTB4ZDFiNCwgMHgwMDQwLCAweDY3ZDcsIDB4MjBhMywgMHgwMDAxLCAweDAwNzgsIDB4NjdkYywgMHgyMGEzLAotCTB4MDAwMCwgMHgyMjMwLCAweDAwNzgsIDB4NjdkZSwgMHg2YTgwLCAweDZlN2MsIDB4MjBhOSwgMHgwMDA4LAotCTB4YWQ4MCwgMHgwMDE3LCAweDIwMGMsIDB4ODEwZiwgMHgyMWEyLCAweDgwMDAsIDB4MDBmMCwgMHg2N2UyLAotCTB4MjJhMiwgMHgyNmEyLCAweDYwYzMsIDB4MDAyMCwgMHgyMGUxLCAweDkwODAsIDB4NjAxNCwgMHhhMDg0LAotCTB4MDAwNCwgMHhhMDg1LCAweDAwMDksIDB4NjAxNiwgMHgyMDAxLCAweGE1YzcsIDB4MjAwMywgMHgwN2QwLAotCTB4MjAwMSwgMHhhNWM2LCAweDIwMDMsIDB4MDAwOSwgMHgyMDAxLCAweGE1Y2MsIDB4MjAwMywgMHgwMDAyLAotCTB4MTA3OCwgMHgxNTdlLCAweDE0N2YsIDB4MTU3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MjBlMSwgMHg5MDgwLAotCTB4MjBlMSwgMHg0MDAwLCAweDdhMTgsIDB4YTI4MCwgMHgwMDIzLCAweDIwMTQsIDB4ODIxMCwgMHhhMjk0LAotCTB4MDBmZiwgMHgyMjAyLCAweDgyMTcsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhkMGJjLAotCTB4MDA0MCwgMHg2ODJjLCAweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LAotCTB4MDYwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGEzMWEsIDB4MmRhNiwgMHg4ZDY4LAotCTB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4NjgzYiwgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLAotCTB4NjgxMCwgMHhhMDg1LCAweDA2MDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MGQ3ZiwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MTMwLCAweDIxYTIsIDB4MjBhMywgMHgwODI5LCAweDIwYTMsIDB4MDAwMCwgMHgyMmEyLAotCTB4MjBhMywgMHgwMDAwLCAweDJmYTIsIDB4MjBhMywgMHhmZmZmLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgwMDdjLCAweDBkN2UsIDB4MTU3ZSwgMHgxMzdlLCAweDE0N2UsIDB4MjBhMSwgMHgwMjBiLAotCTB4MTA3OCwgMHg2ODZhLCAweDc4MTAsIDB4MjA2OCwgMHg2ODYwLCAweDIwYTIsIDB4Njg1YywgMHgyMGEyLAotCTB4Njg4MCwgMHgyMGEyLCAweDY4N2MsIDB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLAotCTB4MjBhMiwgMHg2MGMzLCAweDAwMGMsIDB4MTA3OCwgMHg2YzJkLCAweDE0N2YsIDB4MTM3ZiwgMHgxNTdmLAotCTB4MGQ3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LAotCTB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4ZDBiYywgMHgwMDQwLCAweDY4ODgsIDB4MGQ3ZSwgMHhhMGU4LAotCTB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLAotCTB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg2ODk3LAotCTB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDUwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywgMHgwMDAwLCAweDYyMzAsIDB4MjJhMiwgMHgyMGEzLAotCTB4MDg4OSwgMHgyMGEzLCAweDAwMDAsIDB4MTA3OCwgMHg2YzFjLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMjdmLAotCTB4MDA3YywgMHgwZDdlLCAweDE1N2UsIDB4MTM3ZSwgMHgxNDdlLCAweDc4MTAsIDB4YTA2ZCwgMHgxMDc4LAotCTB4NDg4ZiwgMHgwMDQwLCAweDY4YmQsIDB4Njg0YywgMHhhMDg0LCAweDIwMjAsIDB4YTA4NiwgMHgyMDIwLAotCTB4MDBjMCwgMHg2OGJkLCAweDc4MjQsIDB4YzBjZCwgMHg3ODI2LCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LAotCTB4NmExMiwgMHhhMDE2LCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHg3ODEwLAotCTB4YTA4NCwgMHhmMDAwLCAweDAwYzAsIDB4NjhkNCwgMHg3ODEwLCAweGEwODQsIDB4MDcwMCwgMHg4MDA3LAotCTB4MTA3OSwgMHg2OGRjLCAweDAwNzgsIDB4NjhkNywgMHhhMDA2LCAweDEwNzksIDB4NjhkYywgMHgxNDdmLAotCTB4MTM3ZiwgMHgxNTdmLCAweDBkN2YsIDB4MDA3YywgMHg2OGU2LCAweDY5N2UsIDB4Njk4OSwgMHg2OWIzLAotCTB4NjljNywgMHg2OWUzLCAweDY5ZWUsIDB4NjhlNCwgMHgxMDc4LCAweDEzMjgsIDB4MDE3ZSwgMHgwMzdlLAotCTB4Njk0YywgMHhhMThjLCAweDAwMDMsIDB4MDA0MCwgMHg2OGYxLCAweGExODYsIDB4MDAwMywgMHgwMGMwLAotCTB4NjkwMCwgMHg2Yjc4LCAweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDY4ZjcsIDB4YzNlNSwgMHgyM2EyLAotCTB4Njg2OCwgMHgyMGEyLCAweDY4NjQsIDB4MjBhMiwgMHgwMzdmLCAweDAxN2YsIDB4MDA3OCwgMHg2OWJlLAotCTB4YTE4NiwgMHgwMDAxLCAweDEwYzAsIDB4MTMyOCwgMHg2Yjc4LCAweDc4MjQsIDB4ZDBjYywgMHgwMDQwLAotCTB4NjkwYSwgMHhjM2U1LCAweDIzYTIsIDB4Njg2OCwgMHgyMGEyLCAweDY4NjQsIDB4MjBhMiwgMHgyMmEyLAotCTB4Njg3NCwgMHgyMGEyLCAweDIyYTIsIDB4Njg3YywgMHgyMGEyLCAweDIwMDksIDB4MDAxOCwgMHhhMzg0LAotCTB4MDMwMCwgMHgwMDQwLCAweDY5NzgsIDB4ZDNjNCwgMHgwMDQwLCAweDY5MjAsIDB4Njg3YywgMHhhMTA4LAotCTB4ZDNjYywgMHgwMDQwLCAweDY5MjUsIDB4Njg3NCwgMHhhMTA4LCAweDE1N2UsIDB4MjBhOSwgMHgwMDBkLAotCTB4YWQ4MCwgMHgwMDIwLCAweDIwMWMsIDB4ODMxZiwgMHgyM2EyLCAweDgwMDAsIDB4MDBmMCwgMHg2OTJhLAotCTB4MTU3ZiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHhhMTg0LCAweDAwMDMsIDB4MDA0MCwgMHg2OTc4LAotCTB4MjBhMSwgMHgwMjBiLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MDA3ZSwgMHg3ODE4LAotCTB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4ZDBiYywgMHgwMDQwLCAweDY5NTgsIDB4MGQ3ZSwgMHhhMGU4LAotCTB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNzAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLAotCTB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg2OTY3LAotCTB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywgMHgwMDAwLCAweDYyMzAsIDB4MjJhMiwgMHgwMDdmLAotCTB4N2IyNCwgMHhkM2NjLCAweDAwNDAsIDB4Njk3MCwgMHgyMGEzLCAweDA4ODksIDB4MDA3OCwgMHg2OTcyLAotCTB4MjBhMywgMHgwODk4LCAweDIwYTIsIDB4MTA3OCwgMHg2YzFjLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4NjFjMiwgMHgwMzdmLCAweDAxN2YsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjAxMSwgMHgwMDA4LAotCTB4NzgyNCwgMHhkMGNjLCAweDAwNDAsIDB4Njk4NSwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwgMHgwMDc4LAotCTB4NjliYywgMHgyMDExLCAweDAzMDIsIDB4NzgyNCwgMHhkMGNjLCAweDAwNDAsIDB4Njk5MCwgMHhjMmU1LAotCTB4MjJhMiwgMHhhMDE2LCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIwYTMsIDB4MDAxMiwgMHgyMmEyLAotCTB4MjBhMywgMHgwMDA4LCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjBhMywgMHg3MDAwLAotCTB4MjBhMywgMHgwNTAwLCAweDIyYTIsIDB4MjBhMywgMHgwMDBhLCAweDIyYTIsIDB4MjJhMiwgMHgyMGEzLAotCTB4MjUwMCwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NjBjMywgMHgwMDMyLAotCTB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjAxMSwgMHgwMDI4LCAweDc4MjQsIDB4ZDBjYywgMHgwMDQwLAotCTB4NjliYSwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLAotCTB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAxOCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywgMHgyMDExLAotCTB4MDEwMCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwgMHg2OWNlLCAweGMyZTUsIDB4MjJhMiwgMHhhMDE2LAotCTB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIwYTMsIDB4MDAwOCwgMHgyMmEyLAotCTB4NzgzNCwgMHhhMDg0LCAweDAwZmYsIDB4MjBhMiwgMHgyMmEyLCAweDIyYTIsIDB4NjBjMywgMHgwMDIwLAotCTB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjAxMSwgMHgwMDA4LCAweDc4MjQsIDB4ZDBjYywgMHgwMDQwLAotCTB4NjllYSwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwgMHgwMDc4LCAweDY5YmMsIDB4MDM3ZSwgMHg3YjEwLAotCTB4YTM4NCwgMHhmZjAwLCAweDc4MTIsIDB4YTM4NCwgMHgwMGZmLCAweDgwMDEsIDB4MDBjMCwgMHg2YTAxLAotCTB4NzgyNCwgMHhkMGNjLCAweDAwNDAsIDB4NjlmZCwgMHhjMmU1LCAweDIyYTIsIDB4MDM3ZiwgMHgwMDc4LAotCTB4NjliYywgMHgwNDdlLCAweDIwMjEsIDB4MDgwMCwgMHgwMDdlLCAweDc4MjQsIDB4ZDBjYywgMHgwMDdmLAotCTB4MDA0MCwgMHg2YTBiLCAweGM0ZTUsIDB4MjRhMiwgMHgwNDdmLCAweDIyYTIsIDB4MjBhMiwgMHgwMzdmLAotCTB4MDA3OCwgMHg2OWJlLCAweDAyN2UsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LAotCTB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4ZDBiYywgMHgwMDQwLCAweDZhMzAsIDB4MGQ3ZSwgMHhhMGU4LAotCTB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNzAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLAotCTB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg2YTNmLAotCTB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywgMHgwMDAwLCAweDYyMzAsIDB4MjJhMiwgMHg3ODI0LAotCTB4ZDBjYywgMHgwMDQwLCAweDZhNDcsIDB4MjBhMywgMHgwODg5LCAweDAwNzgsIDB4NmE0OSwgMHgyMGEzLAotCTB4MDg5OCwgMHgyMGEzLCAweDAwMDAsIDB4MTA3OCwgMHg2YzFjLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMjdmLAotCTB4MDA3YywgMHgwZDdlLCAweDE1N2UsIDB4MTM3ZSwgMHgxNDdlLCAweDAxN2UsIDB4MDM3ZSwgMHg3ODEwLAotCTB4YTA4NCwgMHgwNzAwLCAweDgwMDcsIDB4MTA3OSwgMHg2YTZjLCAweDAzN2YsIDB4MDE3ZiwgMHgxNDdmLAotCTB4MTM3ZiwgMHgxNTdmLCAweDBkN2YsIDB4MDA3YywgMHg2YTc0LCAweDZhNzQsIDB4NmE3NiwgMHg2YTc0LAotCTB4NmE3NCwgMHg2YTc0LCAweDZhOWIsIDB4NmE3NCwgMHgxMDc4LCAweDEzMjgsIDB4NzkxMCwgMHhhMThjLAotCTB4ZjhmZiwgMHhhMThkLCAweDA2MDAsIDB4NzkxMiwgMHgyMGExLCAweDAyMGIsIDB4MjAwOSwgMHgwMDAzLAotCTB4MTA3OCwgMHg2YWE1LCAweDBkN2UsIDB4MjA2OSwgMHhhMzUxLCAweDY4MDQsIDB4ZDBiYywgMHgwMDQwLAotCTB4NmE5MCwgMHg2ODJjLCAweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweDIwYTIsIDB4MDA3OCwgMHg2YTkyLAotCTB4MjBhMywgMHgzZjAwLCAweDBkN2YsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NjBjMywgMHgwMDAxLAotCTB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDIwMDksIDB4MDAwMywgMHgxMDc4LAotCTB4NmFhNSwgMHgyMGEzLCAweDdmMDAsIDB4MDA3OCwgMHg2YTkzLCAweDAyN2UsIDB4MjBlMSwgMHg5MDgwLAotCTB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4ZDBiYywgMHgwMDQwLAotCTB4NmFjMywgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwMTAwLAotCTB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LAotCTB4MGQ3ZiwgMHgwMDc4LCAweDZhZDIsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLAotCTB4YTA4NSwgMHgwMTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywgMHgwMDAwLAotCTB4NjIzMCwgMHgyMmEyLCAweDIwYTMsIDB4MDg4OCwgMHhhMThkLCAweDAwMDgsIDB4MjFhMiwgMHgxMDc4LAotCTB4NmMxYywgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwgMHg3YTA4LCAweDIyYTIsIDB4MmZhMiwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDI3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MGQ3ZSwgMHgwYzdlLAotCTB4MDU3ZSwgMHgwNDdlLCAweDAzN2UsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YTMwMCwgMHg2MTMwLAotCTB4NzgxOCwgMHgyMDY4LCAweDY4YTAsIDB4MjAyOCwgMHhkMGJjLCAweDAwYzAsIDB4NmFmYywgMHg2OTEwLAotCTB4NmExNCwgMHg2NDMwLCAweDAwNzgsIDB4NmIwMCwgMHg2OTEwLCAweDZhMTQsIDB4NzM2OCwgMHg3NDZjLAotCTB4NzgxYywgMHhhMDg2LCAweDAwMDYsIDB4MDA0MCwgMHg2YjVmLCAweGQ1YmMsIDB4MDA0MCwgMHg2YjEwLAotCTB4YTE4NSwgMHgwMTAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLCAweDY0NmUsIDB4MDA3OCwgMHg2YjE3LAotCTB4YTE4NSwgMHgwMTAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MDZiLCAweDAwMDAsIDB4NjQ2ZSwgMHg2MDczLAotCTB4MDgwOSwgMHg2MDc3LCAweDAwMDgsIDB4Njg4YywgMHg4MDAwLCAweGEwODQsIDB4MDBmZiwgMHg2ODhlLAotCTB4ODAwNywgMHg2MDdhLCAweDYwN2YsIDB4MDAwMCwgMHgyZjAwLCAweDYwODIsIDB4NzgwOCwgMHg2MDg2LAotCTB4NzgxMCwgMHgyMDcwLCAweDcwMTQsIDB4NjA4YSwgMHg3MDEwLCAweDYwOGUsIDB4NzAwYywgMHg2MGM2LAotCTB4NzAwOCwgMHg2MGNhLCAweDY4NmMsIDB4NjBjZSwgMHg2MGFiLCAweDAwMzYsIDB4NjBhZiwgMHg5NWQ1LAotCTB4NjBkNywgMHgwMDAwLCAweGE1ODIsIDB4MDA4MCwgMHgwMDQ4LCAweDZiNDksIDB4NmEwMCwgMHhkMmY0LAotCTB4MDA0MCwgMHg2YjQ3LCAweDZhMTQsIDB4YTI5NCwgMHgwMGZmLCAweDAwNzgsIDB4NmI0OSwgMHgyMDExLAotCTB4MDAwMCwgMHg2MjllLCAweDYwMTcsIDB4MDAxNiwgMHgyMDA5LCAweDA3ZDAsIDB4NjBjNCwgMHhhMDg0LAotCTB4ZmZmMCwgMHhhMDA1LCAweDAwNDAsIDB4NmI1NiwgMHgyMDA5LCAweDFiNTgsIDB4MTA3OCwgMHg1OTVmLAotCTB4MDM3ZiwgMHgwNDdmLCAweDA1N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHg3ODEwLAotCTB4MjA3MCwgMHg3MDRjLCAweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDIsIDB4MDA0MCwgMHg2YmI3LAotCTB4ZDViYywgMHgwMDQwLCAweDZiNzMsIDB4YTE4NSwgMHgwMTAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLAotCTB4NjQ2ZSwgMHgwMDc4LCAweDZiN2EsIDB4YTE4NSwgMHgwMTAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MDZiLAotCTB4MDAwMCwgMHg2NDZlLCAweDYwNzMsIDB4MDg4MCwgMHg2MDc3LCAweDAwMDgsIDB4Njg4YywgMHg4MDAwLAotCTB4YTA4NCwgMHgwMGZmLCAweDY4OGUsIDB4ODAwNywgMHg2MDdhLCAweDYwN2YsIDB4MDAwMCwgMHgyZjAwLAotCTB4NjA4NiwgMHg3ODA4LCAweDYwODIsIDB4NzA2MCwgMHg2MDhhLCAweDcwNWMsIDB4NjA4ZSwgMHg3MDgwLAotCTB4NjBjNiwgMHg3MDdjLCAweDYwY2EsIDB4NzA3YywgMHg3OTJjLCAweGExMDgsIDB4NzkyZSwgMHg3MDgwLAotCTB4NzkyOCwgMHhhMTA5LCAweDc5MmEsIDB4Njg2YywgMHg2MGNlLCAweDYwYWIsIDB4MDAzNiwgMHg2MGFmLAotCTB4OTVkNSwgMHg2MGQ3LCAweDAwMDAsIDB4YTU4MiwgMHgwMDgwLCAweDAwNDgsIDB4NmJiMiwgMHg2YTAwLAotCTB4ZDJmNCwgMHgwMDQwLCAweDZiYjAsIDB4NmExNCwgMHhhMjk0LCAweDAwZmYsIDB4MDA3OCwgMHg2YmIyLAotCTB4MjAxMSwgMHgwMDAwLCAweDYyOWUsIDB4NjAxNywgMHgwMDEyLCAweDAwNzgsIDB4NmI0YywgMHhkNWJjLAotCTB4MDA0MCwgMHg2YmMyLCAweGExODUsIDB4MDcwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLAotCTB4MDA3OCwgMHg2YmM5LCAweGExODUsIDB4MDcwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjA2YiwgMHgwMDAwLAotCTB4NjQ2ZSwgMHgxMDc4LCAweDQ4OGYsIDB4MDA0MCwgMHg2YmRmLCAweDBkN2UsIDB4NzgxMCwgMHhhMDZkLAotCTB4Njg0YywgMHgwZDdmLCAweGEwODQsIDB4MjAyMCwgMHhhMDg2LCAweDIwMjAsIDB4MDBjMCwgMHg2YmRmLAotCTB4NzgyNCwgMHhjMGNkLCAweDc4MjYsIDB4NjA3MywgMHgwODg5LCAweDAwNzgsIDB4NmJlMSwgMHg2MDczLAotCTB4MDg5OCwgMHg2MDc3LCAweDAwMDAsIDB4Njg4YywgMHg4MDAwLCAweGEwODQsIDB4MDBmZiwgMHg2ODhlLAotCTB4ODAwNywgMHg2MDdhLCAweDYwN2YsIDB4MDAwMCwgMHgyZjAwLCAweDYwODYsIDB4NzgwOCwgMHg2MDgyLAotCTB4NzAxNCwgMHg2MDhhLCAweDcwMTAsIDB4NjA4ZSwgMHg3MDBjLCAweDYwYzYsIDB4NzAwOCwgMHg2MGNhLAotCTB4Njg2YywgMHg2MGNlLCAweDYwYWIsIDB4MDAzNiwgMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLAotCTB4YTU4MiwgMHgwMDgwLCAweDAwNDgsIDB4NmMwZiwgMHg2YTAwLCAweGQyZjQsIDB4MDA0MCwgMHg2YzBkLAotCTB4NmExNCwgMHhhMjk0LCAweDAwZmYsIDB4MDA3OCwgMHg2YzBmLCAweDIwMTEsIDB4MDAwMCwgMHg2MjllLAotCTB4NzgyNCwgMHhkMGNjLCAweDAwNDAsIDB4NmMxOCwgMHg2MDE3LCAweDAwMTYsIDB4MDA3OCwgMHg2YjRjLAotCTB4NjAxNywgMHgwMDEyLCAweDAwNzgsIDB4NmI0YywgMHg3YTE4LCAweGEyODAsIDB4MDAyMywgMHgyMDE0LAotCTB4ODIxMCwgMHhhMjk0LCAweDAwZmYsIDB4MjIwMiwgMHg4MjE3LCAweDAwN2MsIDB4MGQ3ZSwgMHgyMDY5LAotCTB4YTVhYiwgMHg2ODQzLCAweDAwMDEsIDB4MGQ3ZiwgMHgwMDdjLCAweDIwZTEsIDB4OTA4MCwgMHg2MGEzLAotCTB4MDA1NiwgMHg2MGE3LCAweDk1NzUsIDB4MTA3OCwgMHg2YzM4LCAweDEwNzgsIDB4NTk0ZiwgMHgwMDdjLAotCTB4MDA3ZSwgMHg2MDE0LCAweGEwODQsIDB4MDAwNCwgMHhhMDg1LCAweDAwMDksIDB4NjAxNiwgMHgwMDdmLAotCTB4MDA3YywgMHgwMDdlLCAweDBjN2UsIDB4MjA2MSwgMHgwMTAwLCAweDYwMTQsIDB4YTA4NCwgMHgwMDA0LAotCTB4YTA4NSwgMHgwMDA4LCAweDYwMTYsIDB4MGM3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MGM3ZSwgMHgwZDdlLAotCTB4MDE3ZSwgMHgwMjdlLCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4NjkwNCwgMHhhMTk0LAotCTB4NDAwMCwgMHgwMDQwLCAweDZjODksIDB4MTA3OCwgMHg2YzQxLCAweDY4MDMsIDB4MTAwMCwgMHg2ODAzLAotCTB4MDAwMCwgMHgwYzdlLCAweDIwNjEsIDB4YTVhYiwgMHg2MTI4LCAweGExOTIsIDB4MDBjOCwgMHgwMGM4LAotCTB4NmM3NiwgMHg4MTA4LCAweDYxMmEsIDB4NjEyNCwgMHgwYzdmLCAweDgxZmYsIDB4MDA0MCwgMHg2Yzg0LAotCTB4MTA3OCwgMHg1OTRmLCAweDEwNzgsIDB4NmMzOCwgMHgwMDc4LCAweDZjODQsIDB4NjEyNCwgMHhhMWU1LAotCTB4MDAwMCwgMHgwMDQwLCAweDZjODEsIDB4MTA3OCwgMHhhMjQxLCAweDIwMDksIDB4MDAxNCwgMHgxMDc4LAotCTB4NzU2YywgMHgwYzdmLCAweDAwNzgsIDB4NmM4NCwgMHgwMjdmLCAweDAxN2YsIDB4MGQ3ZiwgMHgwYzdmLAotCTB4MDA3YywgMHgyMDAxLCAweGE1YzcsIDB4MjAwNCwgMHhhMDA1LCAweDAwYzAsIDB4NmM4NCwgMHgwYzdlLAotCTB4MjA2MSwgMHhhNWFiLCAweDYxMjgsIDB4YTE5MiwgMHgwMDAzLCAweDAwYzgsIDB4NmM3NiwgMHg4MTA4LAotCTB4NjEyYSwgMHgwYzdmLCAweDEwNzgsIDB4NTk0ZiwgMHgxMDc4LCAweDQxNzEsIDB4MDA3OCwgMHg2Yzg0LAotCTB4MGM3ZSwgMHgwZDdlLCAweDBlN2UsIDB4MDE3ZSwgMHgwMjdlLCAweDEwNzgsIDB4NTk2NywgMHgyMDcxLAotCTB4YTVhYiwgMHg3MTNjLCAweDgxZmYsIDB4MDA0MCwgMHg2Y2NhLCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LAotCTB4MDE0MCwgMHg2OTA0LCAweGExOTQsIDB4NDAwMCwgMHgwMDQwLCAweDZjZDAsIDB4NjgwMywgMHgxMDAwLAotCTB4NjgwMywgMHgwMDAwLCAweDAzN2UsIDB4MjAxOSwgMHgwMDAxLCAweDEwNzgsIDB4NmU2YywgMHgwMzdmLAotCTB4NzEzYywgMHgyMTYwLCAweDEwNzgsIDB4YTI0MSwgMHgyMDA5LCAweDAwNGEsIDB4MTA3OCwgMHg3NTZjLAotCTB4MDA3OCwgMHg2Y2NhLCAweDAyN2YsIDB4MDE3ZiwgMHgwZTdmLCAweDBkN2YsIDB4MGM3ZiwgMHgwMDdjLAotCTB4MDA3OCwgMHg2Y2JhLCAweDBlN2UsIDB4MGQ3ZSwgMHgwYzdlLCAweDA2N2UsIDB4MDU3ZSwgMHgwNDdlLAotCTB4MDA3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg2MDE4LCAweDIwNjgsIDB4NmNhMCwgMHgyMDcxLAotCTB4YTVhYiwgMHg3MDE4LCAweDIwNjgsIDB4OGRmZiwgMHgwMDQwLCAweDZjZmMsIDB4NjhhMCwgMHhhNDA2LAotCTB4MDA0MCwgMHg2Y2VlLCAweDY4NTQsIDB4MjA2OCwgMHgwMDc4LCAweDZjZTMsIDB4NjAxMCwgMHgyMDYwLAotCTB4NjQzYywgMHg2NTQwLCAweDZlNDgsIDB4MmQ2MCwgMHgxMDc4LCAweDQ2NmEsIDB4MDA0MCwgMHg2Y2ZjLAotCTB4MTA3OCwgMHg3MDQ1LCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDAwN2YsIDB4MDQ3ZiwgMHgwNTdmLAotCTB4MDY3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LAotCTB4NjU2NywgMHgyMGEzLCAweDEyMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODFjLAotCTB4YTA4NiwgMHgwMDA0LCAweDAwYzAsIDB4NmQxNywgMHg2MDk4LCAweDAwNzgsIDB4NmQxOCwgMHg2MDMwLAotCTB4MjBhMiwgMHg3ODM0LCAweDIwYTIsIDB4NzgzOCwgMHgyMGEyLCAweDIwYTksIDB4MDAxMCwgMHhhMDA2LAotCTB4MjBhMiwgMHgwMGYwLCAweDZkMjAsIDB4MjBhMiwgMHgyMGEyLCAweDYwYzMsIDB4MDAyYywgMHgxMDc4LAotCTB4NmMyZCwgMHgwMDdjLCAweDE1N2UsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NTY3LAotCTB4MjBhMywgMHgwZjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgwOCwgMHgyMGEyLAotCTB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDE1N2YsIDB4MDA3YywgMHgxNTdlLAotCTB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NWY4LCAweDIwYTMsIDB4MDIwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGE5LCAweDAwMDYsIDB4MjAxMSwgMHhhMzQwLCAweDIwMTksIDB4YTM0MSwgMHgyM2E2LAotCTB4MjJhNiwgMHhhMzk4LCAweDAwMDIsIDB4YTI5MCwgMHgwMDAyLCAweDAwZjAsIDB4NmQ0ZiwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDFjLCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLAotCTB4MTU3ZiwgMHgwMDdjLCAweDE1N2UsIDB4MTQ3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MjBhMSwgMHgwMjBiLAotCTB4MTA3OCwgMHg2NWNmLCAweDEwNzgsIDB4NjVlNiwgMHg3ODEwLCAweGEwODAsIDB4MDAwMCwgMHgyMDA0LAotCTB4YTA4MCwgMHgwMDE1LCAweDIwOTgsIDB4NzgwOCwgMHhhMDg4LCAweDAwMDIsIDB4MjFhOCwgMHg1M2E2LAotCTB4YTA4MCwgMHgwMDA0LCAweDgwMDMsIDB4NjBjMiwgMHgxMDc4LCAweDZjMmQsIDB4MDI3ZiwgMHgwMTdmLAotCTB4MTQ3ZiwgMHgxNTdmLCAweDAwN2MsIDB4MTU3ZSwgMHgxNDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LAotCTB4NjU2NywgMHgyMGEzLCAweDYyMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODA4LAotCTB4MjBhMiwgMHg2MGMzLCAweDAwMDgsIDB4MTA3OCwgMHg2YzJkLCAweDE0N2YsIDB4MTU3ZiwgMHgwMDdjLAotCTB4MTU3ZSwgMHgxNDdlLCAweDAxN2UsIDB4MDI3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NTY3LAotCTB4NzgxMCwgMHhhMDgwLCAweDAwMDAsIDB4MjAwNCwgMHhhMDgwLCAweDAwMTcsIDB4MjA5OCwgMHg3ODA4LAotCTB4YTA4OCwgMHgwMDAyLCAweDIxYTgsIDB4NTNhNiwgMHg4MDAzLCAweDYwYzIsIDB4MTA3OCwgMHg2YzJkLAotCTB4MDI3ZiwgMHgwMTdmLCAweDE0N2YsIDB4MTU3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MGM3ZSwgMHgwMDdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhNWFiLCAweDcwMGMsIDB4MjA2MCwgMHg4Y2ZmLAotCTB4MDA0MCwgMHg2ZGQxLCAweDEwNzgsIDB4OGMzYiwgMHgwMGMwLCAweDZkYzgsIDB4MTA3OCwgMHg3YTA1LAotCTB4NjAwYywgMHgwMDdlLCAweDEwNzgsIDB4NzUzZCwgMHgxMDc4LCAweDcwNDUsIDB4MGM3ZiwgMHgwMDc4LAotCTB4NmRiZiwgMHg3MDBmLCAweDAwMDAsIDB4NzAwYiwgMHgwMDAwLCAweDEyN2YsIDB4MDA3ZiwgMHgwYzdmLAotCTB4MGU3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MTU3ZSwgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwgMHgwYzdlLAotCTB4MDI3ZSwgMHgwMTdlLCAweDAwN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4MDEwMCwgMHgyMDc5LAotCTB4MDE0MCwgMHgyMDcxLCAweGE1YWIsIDB4NzAyNCwgMHgyMDYwLCAweDhjZmYsIDB4MDA0MCwgMHg2ZTJhLAotCTB4MTA3OCwgMHg2YzQxLCAweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDU5NWEsIDB4MjAwOSwgMHgwMDEzLAotCTB4MTA3OCwgMHg3NTZjLCAweDIwYTksIDB4MDFmNCwgMHg2ODI0LCAweGQwOTQsIDB4MDA0MCwgMHg2ZTBkLAotCTB4NjgyNywgMHgwMDA0LCAweDc4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAwNDAsIDB4NmUxZiwgMHg3ODAzLAotCTB4MTAwMCwgMHg3ODAzLCAweDAwMDAsIDB4MDA3OCwgMHg2ZTFmLCAweGQwODQsIDB4MDA0MCwgMHg2ZTE0LAotCTB4NjgyNywgMHgwMDAxLCAweDAwNzgsIDB4NmUxNiwgMHgwMGYwLCAweDZkZmMsIDB4NzgwNCwgMHhhMDg0LAotCTB4MTAwMCwgMHgwMDQwLCAweDZlMWYsIDB4NzgwMywgMHgwMTAwLCAweDc4MDMsIDB4MDAwMCwgMHg2ODI0LAotCTB4MDA3ZiwgMHgwMTdmLCAweDAyN2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwgMHgxNTdmLAotCTB4MTI3ZiwgMHgwMDdjLCAweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwOTYsIDB4MDAwMSwgMHgwMDQwLAotCTB4NmU2MiwgMHhhMDk2LCAweDAwMDQsIDB4MDA0MCwgMHg2ZTYyLCAweDY4MTcsIDB4MDAwOCwgMHg2OGMzLAotCTB4MDAwMCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LCAweDIwYTksIDB4MDFmNCwgMHg2ODI0LAotCTB4ZDA5NCwgMHgwMDQwLCAweDZlNTAsIDB4NjgyNywgMHgwMDA0LCAweDc4MDQsIDB4YTA4NCwgMHg0MDAwLAotCTB4MDA0MCwgMHg2ZTYyLCAweDc4MDMsIDB4MTAwMCwgMHg3ODAzLCAweDAwMDAsIDB4MDA3OCwgMHg2ZTYyLAotCTB4ZDA4NCwgMHgwMDQwLCAweDZlNTcsIDB4NjgyNywgMHgwMDAxLCAweDAwNzgsIDB4NmU1OSwgMHgwMGYwLAotCTB4NmUzZiwgMHg3ODA0LCAweGEwODQsIDB4MTAwMCwgMHgwMDQwLCAweDZlNjIsIDB4NzgwMywgMHgwMTAwLAotCTB4NzgwMywgMHgwMDAwLCAweDAwN2YsIDB4MDE3ZiwgMHgwMjdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLAotCTB4MGY3ZiwgMHgxNTdmLCAweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDE1N2UsIDB4MGY3ZSwgMHgwZTdlLAotCTB4MGQ3ZSwgMHgwYzdlLCAweDAyN2UsIDB4MDE3ZSwgMHgwMDdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LAotCTB4MDEwMCwgMHgyMDc5LCAweDAxNDAsIDB4MjA3MSwgMHhhNWFiLCAweDcwM2MsIDB4MjA2MCwgMHg4Y2ZmLAotCTB4MDA0MCwgMHg2ZWU4LCAweDY4MTcsIDB4MDAxMCwgMHgyMDA5LCAweDAwZmEsIDB4ODEwOSwgMHgwMGMwLAotCTB4NmU4NiwgMHg2OGM3LCAweDAwMDAsIDB4NjhjYiwgMHgwMDA4LCAweDEwNzgsIDB4NTk2NywgMHgxMDc4LAotCTB4MWYzMSwgMHgwNDdlLCAweDA1N2UsIDB4MjAwOSwgMHgwMTdmLCAweDIxMmMsIDB4MjAwYiwgMHgwMGE1LAotCTB4MjAyMSwgMHgwMTY5LCAweDI0MDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODYsIDB4MDAwNCwgMHgwMGMwLAotCTB4NmViNywgMHg2OGM3LCAweDAwMDAsIDB4NjhjYiwgMHgwMDA4LCAweDBlN2UsIDB4MGY3ZSwgMHgyMDc5LAotCTB4MDAyMCwgMHgyMDcxLCAweGE2MDIsIDB4NjgxNCwgMHhhMDg0LCAweDAwMDQsIDB4YTA4NSwgMHgwMDEyLAotCTB4NjgxNiwgMHg3ODAzLCAweDAwMDgsIDB4NzAwMywgMHgwMDAwLCAweDBmN2YsIDB4MGU3ZiwgMHgyNTBhLAotCTB4MDU3ZiwgMHgwNDdmLCAweGEzOWQsIDB4MDAwMCwgMHgwMGMwLCAweDZlYzIsIDB4MjAwOSwgMHgwMDQ5LAotCTB4MTA3OCwgMHg3NTZjLCAweDIwYTksIDB4MDNlOCwgMHg2ODI0LCAweGQwOTQsIDB4MDA0MCwgMHg2ZWQ1LAotCTB4NjgyNywgMHgwMDA0LCAweDc4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAwNDAsIDB4NmVlNywgMHg3ODAzLAotCTB4MTAwMCwgMHg3ODAzLCAweDAwMDAsIDB4MDA3OCwgMHg2ZWU3LCAweGQwOGMsIDB4MDA0MCwgMHg2ZWRjLAotCTB4NjgyNywgMHgwMDAyLCAweDAwNzgsIDB4NmVkZSwgMHgwMGYwLCAweDZlYzQsIDB4NzgwNCwgMHhhMDg0LAotCTB4MTAwMCwgMHgwMDQwLCAweDZlZTcsIDB4NzgwMywgMHgwMTAwLCAweDc4MDMsIDB4MDAwMCwgMHg2ODI0LAotCTB4MDA3ZiwgMHgwMTdmLCAweDAyN2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwgMHgxNTdmLAotCTB4MTI3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHhhNWFiLAotCTB4NmEwNiwgMHgxMjdmLCAweDBkN2YsIDB4MDA3YywgMHgwZDdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA2OSwgMHhhNWFiLCAweDZhMzIsIDB4MTI3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MGY3ZSwgMHgwZTdlLAotCTB4MGM3ZSwgMHgwNjdlLCAweDAwN2UsIDB4MTI3ZSwgMHgyMDcxLCAweGE1YWIsIDB4NzYxNCwgMHgyNjYwLAotCTB4MjY3OCwgMHgyMDkxLCAweDgwMDAsIDB4OGNmZiwgMHgwMDQwLCAweDZmNDYsIDB4NjAxYywgMHhhMjA2LAotCTB4MDBjMCwgMHg2ZjQxLCAweDcwMTQsIDB4YWMzNiwgMHgwMGMwLCAweDZmMjAsIDB4NjYwYywgMHg3NjE2LAotCTB4NzAxMCwgMHhhYzM2LCAweDAwYzAsIDB4NmYyZSwgMHgyYzAwLCAweGFmMzYsIDB4MDA0MCwgMHg2ZjJjLAotCTB4MmYwMCwgMHg3MDEyLCAweDAwNzgsIDB4NmYyZSwgMHg3MDEzLCAweDAwMDAsIDB4NjYwYywgMHgwNjdlLAotCTB4MmMwMCwgMHhhZjA2LCAweDAwNDAsIDB4NmYzNywgMHg3ZTBlLCAweDAwNzgsIDB4NmYzOCwgMHgyNjc4LAotCTB4NjAwZiwgMHgwMDAwLCAweDEwNzgsIDB4OGMwMSwgMHgxMDc4LCAweDcwNDUsIDB4MGM3ZiwgMHgwMDc4LAotCTB4NmYxMywgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwMDc4LCAweDZmMTMsIDB4MTI3ZiwgMHgwMDdmLAotCTB4MDY3ZiwgMHgwYzdmLCAweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDE1N2UsIDB4MTQ3ZSwgMHgyMGExLAotCTB4MDIwYiwgMHgxMDc4LCAweDY4MDYsIDB4NzgxMCwgMHgyMGEyLCAweGEwMDYsIDB4MjBhMiwgMHgyMGEyLAotCTB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MTAwMCwgMHgwMDc4LCAweDZmYTAsIDB4MTU3ZSwgMHgxNDdlLAotCTB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjgwNiwgMHg3ODEwLCAweDIwYTIsIDB4YTAwNiwgMHgyMGEyLAotCTB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMywgMHg0MDAwLCAweDAwNzgsIDB4NmZhMCwgMHgxNTdlLAotCTB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2ODA2LCAweDc4MTAsIDB4MjBhMiwgMHhhMDA2LAotCTB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEzLCAweDIwMDAsIDB4MDA3OCwgMHg2ZmEwLAotCTB4MTU3ZSwgMHgxNDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY4MDYsIDB4NzgxMCwgMHgyMGEyLAotCTB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MDQwMCwgMHgwMDc4LAotCTB4NmZhMCwgMHgxNTdlLCAweDE0N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjgwNiwgMHg3ODEwLAotCTB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMywgMHgwMjAwLAotCTB4MTA3OCwgMHg3MDUwLCAweDYwYzMsIDB4MDAyMCwgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwgMHgxNTdmLAotCTB4MDA3YywgMHgxMjdlLCAweDBjN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjEsIDB4MDEwMCwgMHg2MTIwLAotCTB4ZDFiNCwgMHgwMGMwLCAweDZmYjgsIDB4ZDFiYywgMHgwMGMwLCAweDcwMDIsIDB4MDA3OCwgMHg3MDQyLAotCTB4MjAwOSwgMHgwMTdmLCAweDIwMGIsIDB4MDBhMSwgMHgxNTdlLCAweDAwN2UsIDB4MGQ3ZSwgMHgyMDY5LAotCTB4MDE0MCwgMHgyMGE5LCAweDAwMWUsIDB4MjAwOSwgMHgwMTY5LCAweDY4MDQsIDB4YTA4NCwgMHg0MDAwLAotCTB4MDA0MCwgMHg2ZmY5LCAweDYwMjAsIDB4ZDBiNCwgMHgwMDQwLCAweDZmZjksIDB4NjAyNCwgMHhkMDk0LAotCTB4MDBjMCwgMHg2ZmY5LCAweDIxMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODYsIDB4MDAwNCwgMHgwMGMwLAotCTB4NmZmOSwgMHgwMGYwLCAweDZmYzUsIDB4MDI3ZSwgMHg2MTk4LCAweGExOGMsIDB4MDBmZiwgMHg4MTA3LAotCTB4NjEzMCwgMHhhMThjLCAweDAwZmYsIDB4YTEwZCwgMHg2MDg4LCAweDYyOGMsIDB4NjE4ZSwgMHg2MDhiLAotCTB4YmM5MSwgMHg2MDQzLCAweDAwMDEsIDB4NjA0MywgMHgwMDAwLCAweDYwOGEsIDB4NjI4ZSwgMHg2MDI0LAotCTB4ZDA5NCwgMHgwMGMwLCAweDZmZjgsIDB4NmEwNCwgMHhhMjk0LCAweDQwMDAsIDB4MDBjMCwgMHg2ZmVmLAotCTB4MDI3ZiwgMHgwZDdmLCAweDAwN2YsIDB4MTU3ZiwgMHgyMDA5LCAweDAxN2YsIDB4MjAwYiwgMHgwMDAwLAotCTB4MDA3OCwgMHg3MDQyLCAweDIwMDksIDB4MDE3ZiwgMHgyMDBiLCAweDAwYTEsIDB4MTU3ZSwgMHgwMDdlLAotCTB4MGQ3ZSwgMHgyMDY5LCAweDAxNDAsIDB4MjBhOSwgMHgwMDFlLCAweDIwMDksIDB4MDE2OSwgMHg2ODA0LAotCTB4YTA4NCwgMHg0MDAwLCAweDAwNDAsIDB4NzAzYiwgMHg2MDIwLCAweGQwYmMsIDB4MDA0MCwgMHg3MDNiLAotCTB4MjEwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4NiwgMHgwMDA0LCAweDAwYzAsIDB4NzAzYiwgMHgwMGYwLAotCTB4NzAwZiwgMHgwMjdlLCAweDYxNjQsIDB4YTE4YywgMHgwMGZmLCAweDgxMDcsIDB4NjEzMCwgMHhhMThjLAotCTB4MDBmZiwgMHhhMTBkLCAweDYwODgsIDB4NjI4YywgMHg2MDhiLCAweGJjOTEsIDB4NjE4ZSwgMHg2MDQzLAotCTB4MDAwMSwgMHg2MDQzLCAweDAwMDAsIDB4NjA4YSwgMHg2MjhlLCAweDZhMDQsIDB4YTI5NCwgMHg0MDAwLAotCTB4MDBjMCwgMHg3MDM1LCAweDAyN2YsIDB4MGQ3ZiwgMHgwMDdmLCAweDE1N2YsIDB4MjAwOSwgMHgwMTdmLAotCTB4MjAwYiwgMHgwMDAwLCAweDBjN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhNWFiLAotCTB4NzAyMCwgMHhhMDA1LCAweDAwNDAsIDB4NzA0ZSwgMHg4MDAxLCAweDcwMjIsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MjBhOSwgMHgwMDA4LCAweDIwYTIsIDB4MDBmMCwgMHg3MDUyLCAweDIwYTIsIDB4MjBhMiwgMHgwMDdjLAotCTB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwgMHgwNzdlLCAweDA2N2UsIDB4MDA3ZSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTVhYiwgMHg3NjE0LCAweDI2NjAsIDB4MjY3OCwgMHgyMDM5LAotCTB4MDAwMSwgMHg4N2ZmLCAweDAwNDAsIDB4NzBmNCwgMHg4Y2ZmLCAweDAwNDAsIDB4NzBmNCwgMHg2MDFjLAotCTB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4NzBlZiwgMHg4OGZmLCAweDAwNDAsIDB4NzA3ZiwgMHgyODAwLAotCTB4YWMwNiwgMHgwMGMwLCAweDcwZWYsIDB4MjAzOSwgMHgwMDAwLCAweDAwNzgsIDB4NzA4YSwgMHg2MDE4LAotCTB4YTIwNiwgMHgwMGMwLCAweDcwZWYsIDB4ODVmZiwgMHgwMDQwLCAweDcwOGEsIDB4NjAyMCwgMHhhMTA2LAotCTB4MDBjMCwgMHg3MGVmLCAweDcwMjQsIDB4YWMwNiwgMHgwMGMwLCAweDcwYmEsIDB4MjA2OSwgMHgwMTAwLAotCTB4NjhjMCwgMHhhMDA1LCAweDAwNDAsIDB4NzBiNSwgMHgxMDc4LCAweDU5NWEsIDB4NjgxNywgMHgwMDA4LAotCTB4NjhjMywgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwgMHg3MDI3LCAweDAwMDAsIDB4MDM3ZSwgMHgyMDY5LAotCTB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMDQwLCAweDcwYWEsIDB4NjgwMywgMHgwMTAwLAotCTB4NjgwMywgMHgwMDAwLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDA0MCwgMHg3MGIyLAotCTB4NjgyNywgMHgwMDAxLCAweDAzN2YsIDB4MDA3OCwgMHg3MGJhLCAweDYwMDMsIDB4MDAwOSwgMHg2MzBhLAotCTB4MDA3OCwgMHg3MGVmLCAweDcwMTQsIDB4YWMzNiwgMHgwMGMwLCAweDcwYzAsIDB4NjYwYywgMHg3NjE2LAotCTB4NzAxMCwgMHhhYzM2LCAweDAwYzAsIDB4NzBjZSwgMHgyYzAwLCAweGFmMzYsIDB4MDA0MCwgMHg3MGNjLAotCTB4MmYwMCwgMHg3MDEyLCAweDAwNzgsIDB4NzBjZSwgMHg3MDEzLCAweDAwMDAsIDB4NjYwYywgMHgwNjdlLAotCTB4MmMwMCwgMHhhZjA2LCAweDAwNDAsIDB4NzBkNywgMHg3ZTBlLCAweDAwNzgsIDB4NzBkOCwgMHgyNjc4LAotCTB4ODlmZiwgMHgwMGMwLCAweDcwZTcsIDB4NjAwZiwgMHgwMDAwLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LAotCTB4OGE0NCwgMHgwMDQwLCAweDcwZTUsIDB4MTA3OCwgMHg5ZTcwLCAweDEwNzgsIDB4OGMwMSwgMHgxMDc4LAotCTB4NzA0NSwgMHg4OGZmLCAweDAwYzAsIDB4NzBmZSwgMHgwYzdmLCAweDAwNzgsIDB4NzA2OSwgMHgyYzc4LAotCTB4NjAwYywgMHgyMDYwLCAweDAwNzgsIDB4NzA2OSwgMHhhMDA2LCAweDEyN2YsIDB4MDA3ZiwgMHgwNjdmLAotCTB4MDc3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLCAweDAwN2MsIDB4NjAxNywgMHgwMDAwLAotCTB4MGM3ZiwgMHhhOGM1LCAweDAwMDEsIDB4MDA3OCwgMHg3MGY1LCAweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLAotCTB4MGM3ZSwgMHgwNjdlLCAweDAyN2UsIDB4MDA3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAotCTB4YTVhYiwgMHg3NjM4LCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDAwNDAsIDB4NzE3NywgMHg2MDFjLAotCTB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4NzE3MiwgMHg4N2ZmLCAweDAwNDAsIDB4NzEyNSwgMHgyNzAwLAotCTB4YWMwNiwgMHgwMGMwLCAweDcxNzIsIDB4MDA3OCwgMHg3MTMwLCAweDYwMTgsIDB4YTIwNiwgMHgwMGMwLAotCTB4NzE3MiwgMHg4NWZmLCAweDAwNDAsIDB4NzEzMCwgMHg2MDIwLCAweGExMDYsIDB4MDBjMCwgMHg3MTcyLAotCTB4NzAzYywgMHhhYzA2LCAweDAwYzAsIDB4NzE0MiwgMHgwMzdlLCAweDIwMTksIDB4MDAwMSwgMHgxMDc4LAotCTB4NmU2YywgMHg3MDMzLCAweDAwMDAsIDB4NzAzZiwgMHgwMDAwLCAweDcwNDMsIDB4MDAwMCwgMHg3MDQ3LAotCTB4MDAwMCwgMHgwMzdmLCAweDcwMzgsIDB4YWMzNiwgMHgwMGMwLCAweDcxNDgsIDB4NjYwYywgMHg3NjNhLAotCTB4NzAzNCwgMHhhYzM2LCAweDAwYzAsIDB4NzE1NiwgMHgyYzAwLCAweGFmMzYsIDB4MDA0MCwgMHg3MTU0LAotCTB4MmYwMCwgMHg3MDM2LCAweDAwNzgsIDB4NzE1NiwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgwNjdlLAotCTB4MmMwMCwgMHhhZjA2LCAweDAwNDAsIDB4NzE1ZiwgMHg3ZTBlLCAweDAwNzgsIDB4NzE2MCwgMHgyNjc4LAotCTB4NjAwZiwgMHgwMDAwLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg3MTZhLAotCTB4MTA3OCwgMHg5ZTcwLCAweDEwNzgsIDB4OGMwMSwgMHg4N2ZmLCAweDAwYzAsIDB4NzE4MSwgMHgwYzdmLAotCTB4MDA3OCwgMHg3MTE0LCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDAwNzgsIDB4NzExNCwgMHhhMDA2LAotCTB4MTI3ZiwgMHgwMDdmLCAweDAyN2YsIDB4MDY3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLAotCTB4MDA3YywgMHg2MDE3LCAweDAwMDAsIDB4MGM3ZiwgMHhhN2JkLCAweDAwMDEsIDB4MDA3OCwgMHg3MTc4LAotCTB4MGU3ZSwgMHgyMDcxLCAweGE1YWIsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAyLAotCTB4MDBjMCwgMHg3MTk2LCAweDcwMDcsIDB4MDAwNSwgMHgwMDc4LCAweDcxOTgsIDB4NzAwNywgMHgwMDAwLAotCTB4MGU3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwgMHgwYzdlLCAweDA2N2UsIDB4MDI3ZSwgMHgwMDdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhNWFiLCAweDJjMTAsIDB4NzYzOCwgMHgyNjYwLAotCTB4MjY3OCwgMHg4Y2ZmLCAweDAwNDAsIDB4NzFkOCwgMHgyMjAwLCAweGFjMDYsIDB4MDBjMCwgMHg3MWQzLAotCTB4NzAzOCwgMHhhYzM2LCAweDAwYzAsIDB4NzFiNiwgMHg2NjBjLCAweDc2M2EsIDB4NzAzNCwgMHhhYzM2LAotCTB4MDBjMCwgMHg3MWM0LCAweDJjMDAsIDB4YWYzNiwgMHgwMDQwLCAweDcxYzIsIDB4MmYwMCwgMHg3MDM2LAotCTB4MDA3OCwgMHg3MWM0LCAweDcwMzcsIDB4MDAwMCwgMHg2NjBjLCAweDJjMDAsIDB4YWYwNiwgMHgwMDQwLAotCTB4NzFjYywgMHg3ZTBlLCAweDAwNzgsIDB4NzFjZCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDc4LCAweDcxZDgsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDA3OCwgMHg3MWE5LAotCTB4MTI3ZiwgMHgwMDdmLCAweDAyN2YsIDB4MDY3ZiwgMHgwYzdmLCAweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLAotCTB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwgMHgwNjdlLCAweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDcxLCAweGE1YWIsIDB4NzYwYywgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwMDQwLAotCTB4NzI3OSwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEyMDYsIDB4MDBjMCwgMHg3Mjc0LAotCTB4NzAyNCwgMHhhYzA2LCAweDAwYzAsIDB4NzIxZiwgMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHhhMDA1LAotCTB4MDA0MCwgMHg3MjRkLCAweDEwNzgsIDB4NmM0MSwgMHg2OGMzLCAweDAwMDAsIDB4MTA3OCwgMHg3MTg4LAotCTB4NzAyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4YTM4NCwgMHgxMDAwLAotCTB4MDA0MCwgMHg3MjE2LCAweDY4MDMsIDB4MDEwMCwgMHg2ODAzLCAweDAwMDAsIDB4MjA2OSwgMHgwMTAwLAotCTB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NzIxZSwgMHg2ODI3LCAweDAwMDEsIDB4MDM3ZiwgMHg3MDBjLAotCTB4YWMzNiwgMHgwMGMwLCAweDcyMjUsIDB4NjYwYywgMHg3NjBlLCAweDcwMDgsIDB4YWMzNiwgMHgwMGMwLAotCTB4NzIzMywgMHgyYzAwLCAweGFmMzYsIDB4MDA0MCwgMHg3MjMxLCAweDJmMDAsIDB4NzAwYSwgMHgwMDc4LAotCTB4NzIzMywgMHg3MDBiLCAweDAwMDAsIDB4NjYwYywgMHgwNjdlLCAweDJjMDAsIDB4YWYwNiwgMHgwMDQwLAotCTB4NzIzYywgMHg3ZTBlLCAweDAwNzgsIDB4NzIzZCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHgxMDc4LAotCTB4OGMyNywgMHgwMGMwLCAweDcyNTEsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4OGMzYiwgMHgwMGMwLAotCTB4NzI2ZCwgMHgxMDc4LCAweDdhMDUsIDB4MDA3OCwgMHg3MjZkLCAweDEwNzgsIDB4NzE4OCwgMHgwMDc4LAotCTB4NzIxZiwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg3MjU5LCAweDEwNzgsIDB4N2EwNSwgMHgwMDc4LAotCTB4NzI2ZCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4NzI2ZCwgMHg2MDFjLAotCTB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4NzI4MSwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LAotCTB4MDAwMCwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LCAweDEwNzgsIDB4OGMwMSwgMHgxMDc4LAotCTB4NzA0NSwgMHgwYzdmLCAweDAwNzgsIDB4NzFlZSwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwMDc4LAotCTB4NzFlZSwgMHgxMjdmLCAweDAwN2YsIDB4MDY3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLAotCTB4MDA3YywgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDcyNmQsIDB4MTA3OCwgMHg5ZTcwLAotCTB4MDA3OCwgMHg3MjZkLCAweDAzN2UsIDB4MTU3ZSwgMHgxMzdlLCAweDE0N2UsIDB4MzkwOCwgMHhhMDA2LAotCTB4YTE5MCwgMHgwMDIwLCAweDIyMWMsIDB4YTM5ZSwgMHgyNjBjLCAweDAwYzAsIDB4NzI5YiwgMHg4MjEwLAotCTB4ODAwMCwgMHgwMDc4LCAweDcyOTIsIDB4YTAwNSwgMHgwMDQwLCAweDcyYTcsIDB4MjBhOSwgMHgwMDIwLAotCTB4MjE5OCwgMHg4MjExLCAweGEyODIsIDB4MDAyMCwgMHgyMGM4LCAweDIwYTAsIDB4NTNhMywgMHgxNDdmLAotCTB4MTM3ZiwgMHgxNTdmLCAweDAzN2YsIDB4MDA3YywgMHgwZDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LAotCTB4NjVmOCwgMHgyMGEzLCAweDAyMDAsIDB4MjBhMywgMHgwMDE0LCAweDYwYzMsIDB4MDAxNCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjA5OSwgMHhhNWEzLCAweDIwYTksIDB4MDAwNCwgMHg1M2E2LAotCTB4MjBhMywgMHgwMDA0LCAweDIwYTMsIDB4Nzg3OCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MTA3OCwgMHg2YzJkLCAweDBkN2YsIDB4MDA3YywgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NWY4LAotCTB4MjBhMywgMHgwMjE0LCAweDIwYTMsIDB4MDAxOCwgMHgyMGEzLCAweDA4MDAsIDB4NzgxMCwgMHhhMDg0LAotCTB4ZmYwMCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDc4MTAsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4NzgyOCwgMHgyMGEyLAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTgsIDB4MTA3OCwgMHg2YzJkLAotCTB4MDA3YywgMHgwZDdlLCAweDAxN2UsIDB4MmY2OCwgMHgyMDA5LCAweDAwMzUsIDB4MTA3OCwgMHg4ZWY1LAotCTB4MDBjMCwgMHg3MzYxLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywgMHgxMzAwLAotCTB4MjBhMywgMHgwMDAwLCAweDc4MjgsIDB4MjA2OCwgMHg2ODFjLCAweGEwODYsIDB4MDAwMywgMHgwMDQwLAotCTB4NzMzZCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDE0LCAweGEyODYsIDB4MDA3ZSwgMHgwMGMwLAotCTB4NzMxNywgMHgyMGEzLCAweDAwZmYsIDB4MjBhMywgMHhmZmZlLCAweDAwNzgsIDB4NzM1MiwgMHhhMjg2LAotCTB4MDA3ZiwgMHgwMGMwLCAweDczMjEsIDB4MjBhMywgMHgwMGZmLCAweDIwYTMsIDB4ZmZmZCwgMHgwMDc4LAotCTB4NzM1MiwgMHhkMmJjLCAweDAwNDAsIDB4NzMzNywgMHhhMjg2LCAweDAwODAsIDB4MDBjMCwgMHg3MzJlLAotCTB4MjBhMywgMHgwMGZmLCAweDIwYTMsIDB4ZmZmYywgMHgwMDc4LCAweDczNTIsIDB4YTJlOCwgMHhhNDM0LAotCTB4MmQ2YywgMHg2ODEwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwNzgsIDB4NzM1MiwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MDk4LCAweDIwYTIsIDB4MDA3OCwgMHg3MzUyLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHhhMDgyLCAweDAwN2UsIDB4MDA0OCwgMHg3MzRlLCAweDBkN2UsIDB4MjA2OSwgMHhhMzFhLAotCTB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDczNTIsIDB4MjBhMywgMHgwMDAwLAotCTB4NjAzMCwgMHgyMGEyLCAweDc4MzQsIDB4MjBhMiwgMHg3ODM4LCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwYywgMHgxMDc4LCAweDZjMmQsIDB4MDE3ZiwgMHgwZDdmLAotCTB4MDA3YywgMHg3ODE3LCAweDAwMDEsIDB4NzgwMywgMHgwMDA2LCAweDAxN2YsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4MGQ3ZSwgMHgwMjdlLCAweDc5MjgsIDB4MjE2OCwgMHg2OTFjLCAweGExODYsIDB4MDAwNiwgMHgwMDQwLAotCTB4NzM4YSwgMHhhMTg2LCAweDAwMDMsIDB4MDA0MCwgMHg3M2U1LCAweGExODYsIDB4MDAwNSwgMHgwMDQwLAotCTB4NzNjOCwgMHhhMTg2LCAweDAwMDQsIDB4MDA0MCwgMHg3M2I4LCAweGExODYsIDB4MDAwOCwgMHgwMDQwLAotCTB4NzNkMiwgMHg3ODA3LCAweDAwMzcsIDB4NzgxMywgMHgxNzAwLCAweDEwNzgsIDB4NzQ1MCwgMHgwMjdmLAotCTB4MGQ3ZiwgMHgwMDdjLCAweDEwNzgsIDB4NzQwZCwgMHgyMDA5LCAweDQwMDAsIDB4NjgwMCwgMHgwMDc5LAotCTB4NzM5MSwgMHg3M2E0LCAweDczYjIsIDB4NzNhNiwgMHg3M2IyLCAweDczYWQsIDB4NzNhNCwgMHg3M2E0LAotCTB4NzNiMiwgMHg3M2IyLCAweDczYjIsIDB4NzNiMiwgMHg3M2E0LCAweDczYTQsIDB4NzNhNCwgMHg3M2E0LAotCTB4NzNhNCwgMHg3M2IyLCAweDczYTQsIDB4NzNiMiwgMHgxMDc4LCAweDEzMjgsIDB4NjgyNCwgMHhkMGU0LAotCTB4MDA0MCwgMHg3M2FkLCAweGQwY2MsIDB4MDA0MCwgMHg3M2IwLCAweGEwMGUsIDB4MDA3OCwgMHg3M2IyLAotCTB4MjAwOSwgMHgyMDAwLCAweDY4MjgsIDB4MjBhMiwgMHg2ODJjLCAweDIwYTIsIDB4MDA3OCwgMHg3NDAzLAotCTB4MTA3OCwgMHg3NDBkLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjAwOSwgMHg0MDAwLAotCTB4NmEwMCwgMHhhMjg2LCAweDAwMDIsIDB4MDBjMCwgMHg3M2M2LCAweGEwMGUsIDB4MDA3OCwgMHg3NDAzLAotCTB4MTA3OCwgMHg3NDBkLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjAwOSwgMHg0MDAwLAotCTB4MDA3OCwgMHg3NDAzLCAweDEwNzgsIDB4NzQwZCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MjAwOSwgMHg0MDAwLCAweGEyODYsIDB4MDAwNSwgMHgwMDQwLCAweDczZTIsIDB4YTI4NiwgMHgwMDAyLAotCTB4MDBjMCwgMHg3M2UzLCAweGEwMGUsIDB4MDA3OCwgMHg3NDAzLCAweDEwNzgsIDB4NzQwZCwgMHg2ODEwLAotCTB4MjA2OCwgMHg2OTdjLCAweDY4MTAsIDB4YTExMiwgMHg2OTgwLCAweDY4MTQsIDB4YTEwMywgMHgyMGEyLAotCTB4MjJhMiwgMHg3OTI4LCAweGExODAsIDB4MDAwMCwgMHgyMDA0LCAweGEwOGUsIDB4MDAwMiwgMHgwMDQwLAotCTB4NzQwMSwgMHhhMDhlLCAweDAwMDQsIDB4MDA0MCwgMHg3NDAxLCAweDIwMDksIDB4NDAwMCwgMHgwMDc4LAotCTB4NzQwMywgMHgyMDA5LCAweDAwMDAsIDB4MjFhMiwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE4LAotCTB4MTA3OCwgMHg2YzJkLCAweDAyN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDAzN2UsIDB4MDQ3ZSwgMHgwNTdlLAotCTB4MDY3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NWY4LCAweGEwMDYsIDB4MjBhMywgMHgwMjAwLAotCTB4MjBhMiwgMHg3OTM0LCAweDIxYTIsIDB4NzkzOCwgMHgyMWEyLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHhhMDkyLCAweDAwN2UsIDB4MDA0OCwgMHg3NDMzLCAweDBkN2UsIDB4MjA2OSwgMHhhMzFhLAotCTB4MmQyYywgMHg4ZDY4LCAweDJkMzQsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NmIxMCwgMHg2YzE0LAotCTB4MGQ3ZiwgMHgwMDc4LCAweDc0MzksIDB4MjAxOSwgMHgwMDAwLCAweDY0OTgsIDB4MjAyOSwgMHgwMDAwLAotCTB4NjYzMCwgMHg3ODI4LCAweGEwODAsIDB4MDAwNywgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgwMGMwLAotCTB4NzQ0NywgMHgyNWEyLCAweDI2YTIsIDB4MjNhMiwgMHgyNGEyLCAweDAwNzgsIDB4NzQ0YiwgMHgyM2EyLAotCTB4MjRhMiwgMHgyNWEyLCAweDI2YTIsIDB4MDY3ZiwgMHgwNTdmLCAweDA0N2YsIDB4MDM3ZiwgMHgwMDdjLAotCTB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDA5LCAweDc4MTAsIDB4MjBhMiwgMHg2MGMzLCAweDAwMDgsIDB4MTA3OCwgMHg2YzJkLAotCTB4MDA3YywgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NTVlLCAweDIwYTMsIDB4MTQwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHg3ODM0LCAweDIwYTIsIDB4NzgzOCwgMHgyMGEyLCAweDc4MjgsIDB4MjBhMiwgMHg3ODJjLAotCTB4MjBhMiwgMHg3ODMwLCAweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4NjBjMywgMHgwMDEwLCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LAotCTB4NjVlZiwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDc4MjgsIDB4MjBhMiwgMHg3ODEwLAotCTB4MjBhMiwgMHg2MGMzLCAweDAwMDgsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MTQ3ZSwgMHgyMGExLAotCTB4MDIwYiwgMHgxMDc4LCAweDc0OTksIDB4NjBjMywgMHgwMDAwLCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLAotCTB4MDA3YywgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHhkMGJjLCAweDAwNDAsIDB4NzRiNiwgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLAotCTB4NjgxMCwgMHhhMDg1LCAweDAzMDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLAotCTB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDc0YmUsIDB4MjBhMywgMHgwMzAwLAotCTB4NjI5OCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwgMHg2MjMwLCAweDIyYTIsIDB4MjBhMywgMHgwODE5LAotCTB4MjBhMywgMHgwMDAwLCAweDEwNzgsIDB4NmMxYywgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyZmEyLAotCTB4N2EwOCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDA3YywgMHgyMDYxLAotCTB4YWEwMCwgMHgyYTcwLCAweDcwNjAsIDB4NzA0NiwgMHg3MDRiLCAweGFhMDAsIDB4MDA3YywgMHgwZTdlLAotCTB4MTI3ZSwgMHgyMDcxLCAweGEzMDAsIDB4MjA5MSwgMHg4MDAwLCAweDc1NDQsIDB4YTU4MiwgMHgwMDEwLAotCTB4MDA0OCwgMHg3NTA5LCAweDcwNDgsIDB4MjA2MCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLAotCTB4NzRmNSwgMHhhY2UwLCAweDAwMTAsIDB4NzA1NCwgMHhhYzAyLCAweDAwYzgsIDB4NzRmMSwgMHgwMDc4LAotCTB4NzRlNCwgMHgyMDYxLCAweGFhMDAsIDB4MDA3OCwgMHg3NGU0LCAweDYwMDMsIDB4MDAwOCwgMHg4NTI5LAotCTB4NzU0NiwgMHhhY2E4LCAweDAwMTAsIDB4NzA1NCwgMHhhNTAyLCAweDAwYzgsIDB4NzUwNSwgMHg3NTRhLAotCTB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcwNGIsIDB4YWEwMCwgMHgwMDc4LAotCTB4NzUwMCwgMHhhMDA2LCAweDAwNzgsIDB4NzUwMiwgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwgMHg3NTQ0LAotCTB4YTU4MiwgMHgwMDEwLCAweDAwNDgsIDB4NzUzYSwgMHg3MDQ4LCAweDIwNjAsIDB4NjAwMCwgMHhhMDg2LAotCTB4MDAwMCwgMHgwMDQwLCAweDc1MjcsIDB4YWNlMCwgMHgwMDEwLCAweDcwNTQsIDB4YWMwMiwgMHgwMGM4LAotCTB4NzUyMywgMHgwMDc4LCAweDc1MTYsIDB4MjA2MSwgMHhhYTAwLCAweDAwNzgsIDB4NzUxNiwgMHg2MDAzLAotCTB4MDAwOCwgMHg4NTI5LCAweDc1NDYsIDB4YWNhOCwgMHgwMDEwLCAweDcwNTQsIDB4YTUwMiwgMHgwMGM4LAotCTB4NzUzNiwgMHg3NTRhLCAweGEwODUsIDB4MDAwMSwgMHgwZTdmLCAweDAwN2MsIDB4NzA0YiwgMHhhYTAwLAotCTB4MDA3OCwgMHg3NTMyLCAweGEwMDYsIDB4MDA3OCwgMHg3NTM0LCAweGFjODIsIDB4YWEwMCwgMHgxMDQ4LAotCTB4MTMyOCwgMHgyMDAxLCAweGEzMTUsIDB4MjAwNCwgMHhhYzAyLCAweDEwYzgsIDB4MTMyOCwgMHhhMDA2LAotCTB4NjAwNiwgMHg2MDBhLCAweDYwMGUsIDB4NjAxMiwgMHg2MDE2LCAweDYwMWEsIDB4NjAxZiwgMHgwMDAwLAotCTB4NjAwMywgMHgwMDAwLCAweDYwMjIsIDB4NjAyNiwgMHg2MDJhLCAweDYwMmUsIDB4NjAzMiwgMHg2MDM2LAotCTB4NjAzYSwgMHg2MDNlLCAweDIwNjEsIDB4YTMwMCwgMHg2MDQ0LCAweDgwMDAsIDB4NjA0NiwgMHhhMDg2LAotCTB4MDAwMSwgMHgwMDQwLCAweDc1NjQsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LAotCTB4NjEwOSwgMHgxMjdmLCAweDAwNzgsIDB4NzU2MywgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgwMDc5LAotCTB4NzU3MSwgMHg3NTdhLCAweDc1OGIsIDB4NzVhNywgMHg3NWMzLCAweDhmMmQsIDB4OGY0OSwgMHg4ZjY1LAotCTB4NzU3YSwgMHg3NThiLCAweGExODYsIDB4MDAxMywgMHgwMGMwLCAweDc1ODMsIDB4MTA3OCwgMHg2MDEwLAotCTB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4YTE4ZSwgMHgwMDQ3LCAweDAwYzAsIDB4NzU4YSwgMHhhMDE2LAotCTB4MTA3OCwgMHgxNWVjLCAweDAwN2MsIDB4MDY3ZSwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwgMHgxMGM4LAotCTB4MTMyOCwgMHgxMDc5LCAweDc1OTUsIDB4MDY3ZiwgMHgwMDdjLCAweDc1YTUsIDB4Nzg5MSwgMHg3YTM0LAotCTB4NzVhNSwgMHg3YWI4LCAweDc1ZGYsIDB4NzVhNSwgMHg3NWE1LCAweDc4MjMsIDB4N2U2ZCwgMHg3NWE1LAotCTB4NzVhNSwgMHg3NWE1LCAweDc1YTUsIDB4NzVhNSwgMHg3NWE1LCAweDEwNzgsIDB4MTMyOCwgMHgwNjdlLAotCTB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4NzViMSwgMHgwNjdmLAotCTB4MDA3YywgMHg3NWMxLCAweDg1MjIsIDB4NzVjMSwgMHg3NWMxLCAweDc1YzEsIDB4NzVjMSwgMHg3NWMxLAotCTB4NzVjMSwgMHg4NGM1LCAweDg2YTgsIDB4NzVjMSwgMHg4NTUyLCAweDg1ZDgsIDB4ODU1MiwgMHg4NWQ4LAotCTB4NzVjMSwgMHgxMDc4LCAweDEzMjgsIDB4MDY3ZSwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwgMHgxMGM4LAotCTB4MTMyOCwgMHgxMDc5LCAweDc1Y2QsIDB4MDY3ZiwgMHgwMDdjLCAweDc1ZGQsIDB4N2ViNCwgMHg3ZjgxLAotCTB4ODBjNiwgMHg4MjQyLCAweDc1ZGQsIDB4NzVkZCwgMHg3NWRkLCAweDdlOGQsIDB4ODQ2ZCwgMHg4NDcxLAotCTB4NzVkZCwgMHg3NWRkLCAweDc1ZGQsIDB4NzVkZCwgMHg4NGExLCAweDEwNzgsIDB4MTMyOCwgMHhhMWI2LAotCTB4MDAxNSwgMHgwMGMwLCAweDc1ZTcsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4NzVlZCwgMHhhMWI2LAotCTB4MDAxNiwgMHgxMGMwLCAweDEzMjgsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4MjBhOSwgMHgwMDBlLAotCTB4MmU5OCwgMHg2MDEwLCAweDIwYTAsIDB4NTNhMywgMHgyMGE5LCAweDAwMDYsIDB4MzMxMCwgMHgzNDIwLAotCTB4OTM5OCwgMHg5NGEwLCAweDMzMTgsIDB4MzQyOCwgMHgyMjJlLCAweDIzMjYsIDB4YTI5MCwgMHgwMDAyLAotCTB4YTVhOCwgMHgwMDAyLCAweGEzOTgsIDB4MDAwMiwgMHhhNGEwLCAweDAwMDIsIDB4MDBmMCwgMHg3NWZjLAotCTB4MGU3ZSwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg3NjEzLCAweDYwMTAsIDB4MjA3MCwgMHg3MDA3LAotCTB4MDAwMCwgMHg3MDM3LCAweDAxMDMsIDB4MGU3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHgwZDdlLAotCTB4MDM3ZSwgMHg3MzMwLCAweGEzODYsIDB4MDIwMCwgMHgwMGMwLCAweDc2MjQsIDB4NjAxOCwgMHgyMDY4LAotCTB4NjgxMywgMHgwMGZmLCAweDY4MTcsIDB4ZmZmZCwgMHg2MDEwLCAweGEwMDUsIDB4MDA0MCwgMHg3NjJlLAotCTB4MjA2OCwgMHg2ODA3LCAweDAwMDAsIDB4NjgzNywgMHgwMTAzLCAweDZiMzIsIDB4MTA3OCwgMHg3NTNkLAotCTB4MDM3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MDE3ZSwgMHgyMGE5LCAweDAwMmEsIDB4YWU4MCwgMHgwMDBjLAotCTB4MjA5OCwgMHg2MDEwLCAweGEwODAsIDB4MDAwMiwgMHgyMGEwLCAweDUzYTMsIDB4MjBhOSwgMHgwMDJhLAotCTB4NjAxMCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwNCwgMHhhMDgwLCAweDAwMDIsIDB4MjBhMCwgMHg1M2EzLAotCTB4MGU3ZSwgMHg2MDEwLCAweDIwMDQsIDB4MjA3MCwgMHg3MDM3LCAweDAxMDMsIDB4MGU3ZiwgMHgxMDc4LAotCTB4NzUzZCwgMHgwMTdmLCAweDAwN2MsIDB4MGU3ZSwgMHgwZDdlLCAweDYwM2YsIDB4MDAwMCwgMHgyYzY4LAotCTB4MDE3ZSwgMHgyMDA5LCAweDAwMzUsIDB4MTA3OCwgMHg4ZWY1LCAweDAxN2YsIDB4MDBjMCwgMHg3NjZmLAotCTB4MDI3ZSwgMHg2MjI4LCAweDIyNjgsIDB4MDI3ZiwgMHgyMDcxLCAweGE4OGMsIDB4NmIxYywgMHhhMzg2LAotCTB4MDAwMywgMHgwMDQwLCAweDc2NzMsIDB4YTM4NiwgMHgwMDA2LCAweDAwNDAsIDB4NzY3NywgMHgxMDc4LAotCTB4NzUzZCwgMHgwMDc4LCAweDc2NzksIDB4MTA3OCwgMHg3NjdjLCAweDAwNzgsIDB4NzY3OSwgMHgxMDc4LAotCTB4NzcxZSwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHgwZjdlLCAweDY4MTAsIDB4MjA3OCwgMHhhMTg2LAotCTB4MDAxNSwgMHgwMDQwLCAweDc3MDUsIDB4YTE4ZSwgMHgwMDE2LCAweDAwYzAsIDB4NzcxYywgMHg3MDBjLAotCTB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4MTcwMCwgMHgwMGMwLCAweDc2ZTAsIDB4OGZmZiwgMHgwMDQwLAotCTB4NzcxYSwgMHg2ODA4LCAweGEwODYsIDB4ZmZmZiwgMHgwMGMwLCAweDc3MDksIDB4Nzg0YywgMHhhMDg0LAotCTB4MDA2MCwgMHhhMDg2LCAweDAwMjAsIDB4MDBjMCwgMHg3NmE3LCAweDc5N2MsIDB4NzgxMCwgMHhhMTA2LAotCTB4MDBjMCwgMHg3NzA5LCAweDc5ODAsIDB4NzgxNCwgMHhhMTA2LCAweDAwYzAsIDB4NzcwOSwgMHgxMDc4LAotCTB4OGJmNCwgMHg2ODMwLCAweDc4NTIsIDB4Nzg0YywgMHhjMGRjLCAweGMwZjQsIDB4YzBkNCwgMHg3ODRlLAotCTB4MDI3ZSwgMHhhMDBlLCAweDZhMTQsIDB4MjAwMSwgMHgwMDBhLCAweDEwNzgsIDB4NWE5OCwgMHg3ODU0LAotCTB4YTIwYSwgMHgwMDQ4LCAweDc2YmMsIDB4ODAxMSwgMHg3YTU2LCAweDgyZmYsIDB4MDI3ZiwgMHgwMGMwLAotCTB4NzZjOCwgMHgwYzdlLCAweDJkNjAsIDB4MTA3OCwgMHg4ODMyLCAweDBjN2YsIDB4MDA3OCwgMHg3NzFhLAotCTB4MGM3ZSwgMHgwZDdlLCAweDJmNjgsIDB4NjgzOCwgMHhkMGZjLCAweDAwYzAsIDB4NzZkMywgMHgxMDc4LAotCTB4NDI5MCwgMHgwMDc4LCAweDc2ZDUsIDB4MTA3OCwgMHg0MzZlLCAweDBkN2YsIDB4MGM3ZiwgMHgwMGMwLAotCTB4NzcwOSwgMHgwYzdlLCAweDJkNjAsIDB4MTA3OCwgMHg3NTNkLCAweDBjN2YsIDB4MDA3OCwgMHg3NzFhLAotCTB4NzAwOCwgMHhhMDg2LCAweDAwMGIsIDB4MDBjMCwgMHg3NmZhLCAweDYwMTgsIDB4MjAwYywgMHhjMWJjLAotCTB4MjEwMiwgMHgwYzdlLCAweDJkNjAsIDB4Nzg1MywgMHgwMDAzLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLAotCTB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwYzdmLAotCTB4MDA3OCwgMHg3NzFhLCAweDcwMGMsIDB4YTA4NiwgMHgyYTAwLCAweDAwYzAsIDB4NzcwOSwgMHgyMDAxLAotCTB4YTVhMiwgMHgyMDA0LCAweDY4M2UsIDB4MDA3OCwgMHg3NzFhLCAweDEwNzgsIDB4NzczOSwgMHgwMDc4LAotCTB4NzcxYywgMHg4ZmZmLCAweDEwNDAsIDB4MTMyOCwgMHgwYzdlLCAweDBkN2UsIDB4MmQ2MCwgMHgyZjY4LAotCTB4Njg0YiwgMHgwMDAzLCAweDEwNzgsIDB4ODcyNiwgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwgMHg4YzAxLAotCTB4MGQ3ZiwgMHgwYzdmLCAweDEwNzgsIDB4NzUzZCwgMHgwZjdmLCAweDAwN2MsIDB4YTE4NiwgMHgwMDE1LAotCTB4MDBjMCwgMHg3NzI4LCAweDIwMDEsIDB4YTVhMiwgMHgyMDA0LCAweDY4M2UsIDB4MDA3OCwgMHg3NzM2LAotCTB4YTE4ZSwgMHgwMDE2LCAweDAwYzAsIDB4NzczOCwgMHgwYzdlLCAweDJkMDAsIDB4MjA2MCwgMHgxMDc4LAotCTB4YTEzNCwgMHgxMDc4LCAweDVhNDEsIDB4MTA3OCwgMHg3NTNkLCAweDBjN2YsIDB4MTA3OCwgMHg3NTNkLAotCTB4MDA3YywgMHgwMjdlLCAweDAzN2UsIDB4MDQ3ZSwgMHg3MjI4LCAweDdjODAsIDB4N2I3YywgMHhkMmY0LAotCTB4MDA0MCwgMHg3NzQ4LCAweDIwMDEsIDB4YTVhMiwgMHgyMDA0LCAweDY4M2UsIDB4MDA3OCwgMHg3N2FjLAotCTB4MGM3ZSwgMHgyZDYwLCAweDEwNzgsIDB4ODc0YSwgMHgwYzdmLCAweDY4MDQsIDB4YTA4NiwgMHgwMDUwLAotCTB4MDBjMCwgMHg3NzYwLCAweDBjN2UsIDB4MmQwMCwgMHgyMDYwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDA1MCwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDBjN2YsIDB4MDA3OCwgMHg3N2FjLAotCTB4NjgwMCwgMHhhMDg2LCAweDAwMGYsIDB4MDA0MCwgMHg3NzgyLCAweDhmZmYsIDB4MTA0MCwgMHgxMzI4LAotCTB4NjgyNCwgMHhkMGRjLCAweDAwYzAsIDB4Nzc4MiwgMHg2ODAwLCAweGEwODYsIDB4MDAwNCwgMHgwMGMwLAotCTB4Nzc4NywgMHg3ODRjLCAweGQwYWMsIDB4MDA0MCwgMHg3Nzg3LCAweDc4NGMsIDB4YzBkYywgMHhjMGY0LAotCTB4Nzg0ZSwgMHg3ODUwLCAweGMwZjQsIDB4YzBmYywgMHg3ODUyLCAweDIwMDEsIDB4MDAwMSwgMHg2ODJlLAotCTB4MDA3OCwgMHg3N2E2LCAweDIwMDEsIDB4MDAwNywgMHg2ODJlLCAweDAwNzgsIDB4NzdhNiwgMHg3ODRjLAotCTB4ZDBiNCwgMHgwMGMwLCAweDc3OTQsIDB4ZDBhYywgMHgwMDQwLCAweDc3ODIsIDB4Nzg0YywgMHhkMGY0LAotCTB4MDBjMCwgMHg3NzgyLCAweDAwNzgsIDB4Nzc3NSwgMHhkMmVjLCAweDAwYzAsIDB4Nzc4MiwgMHg3MDI0LAotCTB4YTMwNiwgMHgwMGMwLCAweDc3OWYsIDB4NzAyMCwgMHhhNDA2LCAweDAwNDAsIDB4Nzc4MiwgMHg3MDIwLAotCTB4NjgzNiwgMHg3MDI0LCAweDY4M2EsIDB4MjAwMSwgMHgwMDA1LCAweDY4MmUsIDB4MTA3OCwgMHg4ZDJiLAotCTB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NzdhZSwgMHgxMDc4LCAweDc1M2QsIDB4MDQ3ZiwgMHgwMzdmLAotCTB4MDI3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MGQ3ZSwgMHgwMjdlLCAweDYwMzQsIDB4MjA2OCwgMHg2YTFjLAotCTB4YTI4NiwgMHgwMDA3LCAweDAwNDAsIDB4NzgwNiwgMHhhMjg2LCAweDAwMDIsIDB4MDA0MCwgMHg3ODA2LAotCTB4YTI4NiwgMHgwMDAwLCAweDAwNDAsIDB4NzgwNiwgMHg2ODA4LCAweDYzMzgsIDB4YTMwNiwgMHgwMGMwLAotCTB4NzgwNiwgMHgyMDcxLCAweGE4OGMsIDB4YTE4NiwgMHgwMDE1LCAweDAwNDAsIDB4NzgwMCwgMHhhMThlLAotCTB4MDAxNiwgMHgwMGMwLCAweDc3ZTgsIDB4NjAzMCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDAxLAotCTB4MDBjMCwgMHg3N2U4LCAweDcwMGMsIDB4YTA4NiwgMHgyYTAwLCAweDAwYzAsIDB4NzdlOCwgMHg2MDM0LAotCTB4YTA4MCwgMHgwMDA5LCAweDIwMGMsIDB4YzFkZCwgMHhjMWY1LCAweDIxMDIsIDB4MDA3OCwgMHg3ODAwLAotCTB4MGM3ZSwgMHg2MDM0LCAweDIwNjAsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgxMDQwLAotCTB4MTMyOCwgMHg2ODUzLCAweDAwMDMsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLAotCTB4MDAwMiwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDBjN2YsIDB4MDA3OCwgMHg3ODA2LAotCTB4NjAzNCwgMHgyMDY4LCAweDIwMDEsIDB4YTVhMiwgMHgyMDA0LCAweDY4M2UsIDB4MTA3OCwgMHg3NTNkLAotCTB4MDI3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHgwZDdlLCAweDIwYTksIDB4MDAwZSwgMHgyZTk4LAotCTB4NjAxMCwgMHgyMGEwLCAweDUzYTMsIDB4YTFiNiwgMHgwMDE1LCAweDAwYzAsIDB4NzgyMCwgMHg2MDE4LAotCTB4MjA2OCwgMHg3MDM4LCAweDY4MGEsIDB4NzAzYywgMHg2ODBlLCAweDY4MDAsIDB4YzA4ZCwgMHg2ODAyLAotCTB4MGQ3ZiwgMHgwMDc4LCAweDc2MDgsIDB4MjEwMCwgMHhhMWIyLCAweDAwNDQsIDB4MTBjOCwgMHgxMzI4LAotCTB4YTFiMiwgMHgwMDQwLCAweDAwYzgsIDB4Nzg4OCwgMHgwMDc5LCAweDc4MmUsIDB4Nzg3YywgMHg3ODcwLAotCTB4Nzg3YywgMHg3ODdjLCAweDc4N2MsIDB4Nzg3YywgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLAotCTB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLAotCTB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLAotCTB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4N2MsIDB4Nzg2ZSwgMHg3ODdjLAotCTB4Nzg3YywgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg3YywgMHg3ODZlLAotCTB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLAotCTB4Nzg3YywgMHg3ODdjLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLAotCTB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg3YywgMHg3ODZlLCAweDc4NmUsIDB4MTA3OCwgMHgxMzI4LAotCTB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MTA3OCwgMHg1YzQ1LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MTA3OCwgMHg2MTA5LCAweDEyN2YsIDB4MDA3YywgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgxMDc4LAotCTB4NWM0NSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDYxMDksIDB4MTI3ZiwgMHgwMDdjLAotCTB4MjYwMCwgMHgwMDc5LCAweDc4OGIsIDB4Nzg4ZiwgMHg3ODhmLCAweDc4OGYsIDB4Nzg3YywgMHgxMDc4LAotCTB4MTMyOCwgMHg2MDA0LCAweGEwYjIsIDB4MDA0NCwgMHgxMGM4LCAweDEzMjgsIDB4YTFiNiwgMHgwMDEzLAotCTB4MDBjMCwgMHg3OGExLCAweGEwYjIsIDB4MDA0MCwgMHgwMGM4LCAweDc5ZmIsIDB4MjAwOCwgMHgwMDc5LAotCTB4Nzk0MSwgMHhhMWI2LCAweDAwMjcsIDB4MDBjMCwgMHg3OGZlLCAweDEwNzgsIDB4NjAxMCwgMHg2MDA0LAotCTB4MTA3OCwgMHg4YzI3LCAweDAwNDAsIDB4NzhiZSwgMHgxMDc4LCAweDhjM2IsIDB4MDA0MCwgMHg3OGY2LAotCTB4YTA4ZSwgMHgwMDIxLCAweDAwNDAsIDB4NzhmYSwgMHhhMDhlLCAweDAwMjIsIDB4MDA0MCwgMHg3OGY2LAotCTB4YTA4ZSwgMHgwMDNkLCAweDAwNDAsIDB4NzhmYSwgMHgwMDc4LCAweDc4ZjEsIDB4MTA3OCwgMHgyODM5LAotCTB4MjAwMSwgMHgwMDA3LCAweDEwNzgsIDB4NDQzZiwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDBjLAotCTB4MTA3OCwgMHg3YTA1LCAweGExODYsIDB4MDA3ZSwgMHgwMGMwLCAweDc4ZDMsIDB4MjAwMSwgMHhhMzMyLAotCTB4MjAxNCwgMHhjMjg1LCAweDIyMDIsIDB4MDE3ZSwgMHgwMjdlLCAweDAzN2UsIDB4MjExMCwgMHgyMDE5LAotCTB4MDAyOCwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwgMHgyMDM5LCAweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LAotCTB4MGM3ZSwgMHg2MDE4LCAweGEwNjUsIDB4MDA0MCwgMHg3OGU3LCAweDEwNzgsIDB4NDcxYiwgMHgwYzdmLAotCTB4MmMwOCwgMHgxMDc4LCAweDljMzgsIDB4MDc3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwgMHgxMDc4LAotCTB4NDRiYywgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MTA3OCwgMHg3YTA1LAotCTB4MDA3OCwgMHg3OGYxLCAweDEwNzgsIDB4N2EyOCwgMHgwMDc4LCAweDc4ZjEsIDB4YTE4NiwgMHgwMDE0LAotCTB4MDBjMCwgMHg3OGY1LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDI4MTMsIDB4MTA3OCwgMHg4YzI3LAotCTB4MDBjMCwgMHg3OTFkLCAweDEwNzgsIDB4MjgzOSwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDBjLAotCTB4MTA3OCwgMHg3YTA1LCAweGExODYsIDB4MDA3ZSwgMHgwMGMwLCAweDc5MWIsIDB4MjAwMSwgMHhhMzMyLAotCTB4MjAwYywgMHhjMTg1LCAweDIxMDIsIDB4MDA3OCwgMHg3OGYxLCAweDEwNzgsIDB4OGMzYiwgMHgwMGMwLAotCTB4NzkyNSwgMHgxMDc4LCAweDdhMDUsIDB4MDA3OCwgMHg3OGYxLCAweDYwMDQsIDB4YTA4ZSwgMHgwMDMyLAotCTB4MDBjMCwgMHg3OTM2LCAweDBlN2UsIDB4MGY3ZSwgMHgyMDcxLCAweGEzODEsIDB4MjA3OSwgMHgwMDAwLAotCTB4MTA3OCwgMHgyYjU2LCAweDBmN2YsIDB4MGU3ZiwgMHgwMDc4LCAweDc4ZjEsIDB4NjAwNCwgMHhhMDhlLAotCTB4MDAyMSwgMHgwMDQwLCAweDc5MjEsIDB4YTA4ZSwgMHgwMDIyLCAweDEwNDAsIDB4N2EwNSwgMHgwMDc4LAotCTB4NzhmMSwgMHg3OTgzLCAweDc5ODUsIDB4Nzk4OSwgMHg3OThkLCAweDc5OTEsIDB4Nzk5NSwgMHg3OTgxLAotCTB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLAotCTB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLAotCTB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTk5LAotCTB4NzlhYiwgMHg3OTgxLCAweDc5YWQsIDB4NzlhYiwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLAotCTB4Nzk4MSwgMHg3OWFiLCAweDc5YWIsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLAotCTB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4NzlkZSwgMHg3OWFiLCAweDc5ODEsIDB4NzlhNSwgMHg3OTgxLAotCTB4Nzk4MSwgMHg3OTgxLCAweDc5YTcsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4NzlhYiwgMHg3OTgxLAotCTB4Nzk4MSwgMHgxMDc4LCAweDEzMjgsIDB4MDA3OCwgMHg3OWFiLCAweDIwMDEsIDB4MDAwYiwgMHgwMDc4LAotCTB4NzliOCwgMHgyMDAxLCAweDAwMDMsIDB4MDA3OCwgMHg3OWI4LCAweDIwMDEsIDB4MDAwNSwgMHgwMDc4LAotCTB4NzliOCwgMHgyMDAxLCAweDAwMDEsIDB4MDA3OCwgMHg3OWI4LCAweDIwMDEsIDB4MDAwOSwgMHgwMDc4LAotCTB4NzliOCwgMHgxMDc4LCAweDYwMTAsIDB4NjAwMywgMHgwMDA1LCAweDIwMDEsIDB4YTVhMiwgMHgyMDA0LAotCTB4NjAzZSwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg3OWI3LCAweDAwNzgsIDB4NzlhYiwgMHgwMDc4LAotCTB4NzlhYiwgMHgxMDc4LCAweDQ0M2YsIDB4MDA3OCwgMHg3OWYwLCAweDEwNzgsIDB4NjAxMCwgMHg2MDAzLAotCTB4MDAwNCwgMHgyMDAxLCAweGE1YTAsIDB4MjAwNCwgMHg2MDE2LCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLAotCTB4MTA3OCwgMHg0NDNmLCAweDEwNzgsIDB4NjAxMCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2MDNlLAotCTB4NjAwMywgMHgwMDAyLCAweDAzN2UsIDB4MjAxOSwgMHhhMzVjLCAweDIzMDQsIDB4YTA4NCwgMHhmZjAwLAotCTB4MDBjMCwgMHg3OWNmLCAweDIwMTksIDB4YTVhMCwgMHgyMzFjLCAweDAwNzgsIDB4NzlkOCwgMHg4MDA3LAotCTB4YTA5YSwgMHgwMDA0LCAweDAwNDgsIDB4NzljYSwgMHg4MDAzLCAweDgwMWIsIDB4ODMxYiwgMHhhMzE4LAotCTB4NjMxNiwgMHgwMzdmLCAweDEwNzgsIDB4NjEwOSwgMHgwMDc4LCAweDc5YjcsIDB4MGU3ZSwgMHgwZjdlLAotCTB4MjA3MSwgMHhhMzgxLCAweDIwNzksIDB4MDAwMCwgMHgxMDc4LCAweDJiNTYsIDB4MGY3ZiwgMHgwZTdmLAotCTB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NzUzZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg3OWI3LAotCTB4MTA3OCwgMHg2MDEwLCAweDYwMDMsIDB4MDAwMiwgMHgyMDAxLCAweGE1YTAsIDB4MjAwNCwgMHg2MDE2LAotCTB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MjYwMCwgMHgyMDA4LCAweDAwNzksIDB4NzlmZiwgMHg3YTAzLAotCTB4N2EwMywgMHg3YTAzLCAweDc5ZjAsIDB4MTA3OCwgMHgxMzI4LCAweDBlN2UsIDB4MTA3OCwgMHg4YTQ0LAotCTB4MDA0MCwgMHg3YTIxLCAweDYwMTAsIDB4MjA3MCwgMHg3MDM4LCAweGQwZmMsIDB4MDA0MCwgMHg3YTIxLAotCTB4NzAwNywgMHgwMDAwLCAweDAxN2UsIDB4NjAwNCwgMHhhMDhlLCAweDAwMjEsIDB4MDA0MCwgMHg3YTIzLAotCTB4YTA4ZSwgMHgwMDNkLCAweDAwNDAsIDB4N2EyMywgMHgwMTdmLCAweDcwMzcsIDB4MDEwMywgMHg3MDMzLAotCTB4MDEwMCwgMHgwZTdmLCAweDAwN2MsIDB4MDE3ZiwgMHgxMDc4LCAweDdhMjgsIDB4MDA3OCwgMHg3YTIxLAotCTB4MGU3ZSwgMHhhY2YwLCAweDAwMDQsIDB4MmU3NCwgMHg3MDAwLCAweDIwNzAsIDB4NzAzNywgMHgwMTAzLAotCTB4NzAyMywgMHg4MDAxLCAweDBlN2YsIDB4MDA3YywgMHgwZDdlLCAweDY2MTgsIDB4MjY2OCwgMHg2ODA0LAotCTB4YTA4NCwgMHgwMGZmLCAweDBkN2YsIDB4YTBiMiwgMHgwMDBjLCAweDEwYzgsIDB4MTMyOCwgMHg2NjA0LAotCTB4YTZiNiwgMHgwMDQzLCAweDAwYzAsIDB4N2E0OCwgMHgxMDc4LCAweDhlNmQsIDB4MDA3OCwgMHg3YWE3LAotCTB4NjYwNCwgMHhhNmI2LCAweDAwMzMsIDB4MDBjMCwgMHg3YTUxLCAweDEwNzgsIDB4OGUxMSwgMHgwMDc4LAotCTB4N2FhNywgMHg2NjA0LCAweGE2YjYsIDB4MDAyOCwgMHgwMGMwLCAweDdhNWEsIDB4MTA3OCwgMHg4YzZhLAotCTB4MDA3OCwgMHg3YWE3LCAweDY2MDQsIDB4YTZiNiwgMHgwMDI5LCAweDAwYzAsIDB4N2E2MywgMHgxMDc4LAotCTB4OGM4NCwgMHgwMDc4LCAweDdhYTcsIDB4NjYwNCwgMHhhNmI2LCAweDAwMWYsIDB4MDBjMCwgMHg3YTZjLAotCTB4MTA3OCwgMHg3NWVlLCAweDAwNzgsIDB4N2FhNywgMHg2NjA0LCAweGE2YjYsIDB4MDAwMCwgMHgwMGMwLAotCTB4N2E3NSwgMHgxMDc4LCAweDc4MGMsIDB4MDA3OCwgMHg3YWE3LCAweDY2MDQsIDB4YTZiNiwgMHgwMDIyLAotCTB4MDBjMCwgMHg3YTdlLCAweDEwNzgsIDB4NzYxNywgMHgwMDc4LCAweDdhYTcsIDB4NjYwNCwgMHhhNmI2LAotCTB4MDAzNSwgMHgwMGMwLCAweDdhODcsIDB4MTA3OCwgMHg3NjUzLCAweDAwNzgsIDB4N2FhNywgMHg2NjA0LAotCTB4YTZiNiwgMHgwMDM5LCAweDAwYzAsIDB4N2E5MCwgMHgxMDc4LCAweDc3YjIsIDB4MDA3OCwgMHg3YWE3LAotCTB4NjYwNCwgMHhhNmI2LCAweDAwM2QsIDB4MDBjMCwgMHg3YTk5LCAweDEwNzgsIDB4NzYzMywgMHgwMDc4LAotCTB4N2FhNywgMHhhMWI2LCAweDAwMTUsIDB4MDBjMCwgMHg3YWExLCAweDEwNzksIDB4N2FhYywgMHgwMDc4LAotCTB4N2FhNywgMHhhMWI2LCAweDAwMTYsIDB4MDBjMCwgMHg3YWE4LCAweDEwNzksIDB4N2JmZCwgMHgwMDdjLAotCTB4MTA3OCwgMHg3NTgzLCAweDAwNzgsIDB4N2FhNywgMHg3YWQwLCAweDdhZDMsIDB4N2FkMCwgMHg3YjFlLAotCTB4N2FkMCwgMHg3YjkxLCAweDdjMDksIDB4N2FkMCwgMHg3YWQwLCAweDdiZDUsIDB4N2FkMCwgMHg3YmViLAotCTB4YTFiNiwgMHgwMDQ4LCAweDAwNDAsIDB4N2FjNCwgMHgyMGUxLCAweDAwMDUsIDB4M2QxOCwgMHgzZTIwLAotCTB4MmMxMCwgMHgxMDc4LCAweDE1ZWMsIDB4MDA3YywgMHgwZTdlLCAweGFjZjAsIDB4MDAwNCwgMHgyZTc0LAotCTB4NzAwMCwgMHgyMDcwLCAweDcwMzcsIDB4MDEwMywgMHgwZTdmLCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLAotCTB4MDAwNSwgMHgwMDA1LCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4NzA3YywgMHhhMDg2LAotCTB4MDA3NCwgMHgwMGMwLCAweDdiMDcsIDB4MTA3OCwgMHg5YzBjLCAweDAwYzAsIDB4N2FmOSwgMHgwZDdlLAotCTB4NjAxOCwgMHgyMDY4LCAweDcwMzAsIDB4ZDA4YywgMHgwMDQwLCAweDdhZWMsIDB4NjgwMCwgMHhkMGJjLAotCTB4MDA0MCwgMHg3YWVjLCAweGMwYzUsIDB4NjgwMiwgMHgxMDc4LCAweDdiMGIsIDB4MGQ3ZiwgMHgyMDAxLAotCTB4MDAwNiwgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LAotCTB4N2IwOSwgMHgyMDAxLCAweDAwMGEsIDB4MTA3OCwgMHg0NDNmLCAweDEwNzgsIDB4MjgzOSwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2IwOSwgMHgxMDc4LAotCTB4N2I4MSwgMHgwZTdmLCAweDAwN2MsIDB4NjgwMCwgMHhkMDg0LCAweDAwNDAsIDB4N2IxZCwgMHgyMDAxLAotCTB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MjA2OSwgMHhhMzUxLCAweDY4MDQsIDB4ZDBhNCwgMHgwMDQwLAotCTB4N2IxZCwgMHgyMDAxLCAweDAwMDYsIDB4MTA3OCwgMHg0NDcyLCAweDAwN2MsIDB4MGQ3ZSwgMHgyMDExLAotCTB4YTMxZiwgMHgyMjA0LCAweGEwODYsIDB4MDA3NCwgMHgwMGMwLCAweDdiN2QsIDB4NjAxOCwgMHgyMDY4LAotCTB4NmFhMCwgMHhhMjg2LCAweDAwN2UsIDB4MDBjMCwgMHg3YjMxLCAweDEwNzgsIDB4N2QxNywgMHgwMDc4LAotCTB4N2I3ZiwgMHgxMDc4LCAweDdkMGQsIDB4NjAxOCwgMHgyMDY4LCAweGEwODAsIDB4MDAyOCwgMHgyMDE0LAotCTB4YTI4NiwgMHgwMDgwLCAweDAwYzAsIDB4N2I1NSwgMHg2ODEzLCAweDAwZmYsIDB4NjgxNywgMHhmZmZjLAotCTB4NjAxMCwgMHhhMDA1LCAweDAwNDAsIDB4N2I0YiwgMHgyMDY4LCAweDY4MDcsIDB4MDAwMCwgMHg2ODM3LAotCTB4MDEwMywgMHg2ODMzLCAweDAyMDAsIDB4MjAwMSwgMHgwMDA2LCAweDEwNzgsIDB4NDQzZiwgMHgxMDc4LAotCTB4MjgzOSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwgMHg3YjdmLCAweDBlN2UsIDB4MjA3MSwgMHhhMzMyLAotCTB4MmUwNCwgMHhkMDljLCAweDAwNDAsIDB4N2I3MCwgMHgyMDcxLCAweGE4ODAsIDB4NzEwOCwgMHg3MjBjLAotCTB4YTE4YywgMHgwMGZmLCAweDAwYzAsIDB4N2I2OCwgMHhhMjg0LCAweGZmMDAsIDB4MDA0MCwgMHg3YjcwLAotCTB4NjAxOCwgMHgyMDcwLCAweDcwYTAsIDB4ZDBiYywgMHgwMGMwLCAweDdiNzAsIDB4NzExMiwgMHg3MjE2LAotCTB4MGU3ZiwgMHgyMDAxLCAweDAwMDQsIDB4MTA3OCwgMHg0NDNmLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDAwMywgMHgxMDc4LCAweDVjNDUsIDB4MDA3OCwgMHg3YjdmLCAweDEwNzgsIDB4N2I4MSwgMHgwZDdmLAotCTB4MDA3YywgMHgyMDAxLCAweGEzMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MDA0MCwgMHg3YjhjLAotCTB4MjAwMSwgMHgwMDA3LCAweDEwNzgsIDB4NDQzZiwgMHgxMDc4LCAweDI4MzksIDB4MTA3OCwgMHg3NTNkLAotCTB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwgMHg3MDdjLCAweGEwODYsIDB4MDAxNCwgMHgwMGMwLAotCTB4N2JjZiwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDdiYTQsIDB4NjAxMCwgMHhhMDA1LAotCTB4MDBjMCwgMHg3YmE0LCAweDEwNzgsIDB4MzVmNywgMHgwZDdlLCAweDYwMTgsIDB4MjA2OCwgMHgxMDc4LAotCTB4NDU3ZCwgMHgxMDc4LCAweDdiMGIsIDB4MGQ3ZiwgMHgxMDc4LCAweDdkYmEsIDB4MDBjMCwgMHg3YmNmLAotCTB4MGQ3ZSwgMHg2MDE4LCAweDIwNjgsIDB4Njg5MCwgMHgwZDdmLCAweGEwMDUsIDB4MDA0MCwgMHg3YmNmLAotCTB4MjAwMSwgMHgwMDA2LCAweDEwNzgsIDB4NDQzZiwgMHgwZTdlLCAweDYwMTAsIDB4YTAwNSwgMHgwMDQwLAotCTB4N2JjOCwgMHgyMDcwLCAweDcwMDcsIDB4MDAwMCwgMHg3MDM3LCAweDAxMDMsIDB4NzAzMywgMHgwMjAwLAotCTB4MGU3ZiwgMHgxMDc4LCAweDI4MzksIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4N2JkMywgMHgxMDc4LAotCTB4N2EwNSwgMHgxMDc4LCAweDdiODEsIDB4MGU3ZiwgMHgwMDdjLCAweDIwMTEsIDB4YTMxZiwgMHgyMjA0LAotCTB4YTA4NiwgMHgwMDE0LCAweDAwYzAsIDB4N2JlOCwgMHgyMDAxLCAweDAwMDIsIDB4MTA3OCwgMHg0NDNmLAotCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MDA3OCwgMHg3YmVhLAotCTB4MTA3OCwgMHg3YjgxLCAweDAwN2MsIDB4MjAxMSwgMHhhMzFmLCAweDIyMDQsIDB4YTA4NiwgMHgwMDA0LAotCTB4MDBjMCwgMHg3YmZhLCAweDIwMDEsIDB4MDAwNywgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwgMHg3NTNkLAotCTB4MDA3OCwgMHg3YmZjLCAweDEwNzgsIDB4N2I4MSwgMHgwMDdjLCAweDdhZDAsIDB4N2MxMSwgMHg3YWQwLAotCTB4N2M0ZSwgMHg3YWQwLCAweDdjYzAsIDB4N2MwOSwgMHg3YWQwLCAweDdhZDAsIDB4N2NkNSwgMHg3YWQwLAotCTB4N2NlOCwgMHg2NjA0LCAweGE2YjYsIDB4MDAxZSwgMHgwMGMwLCAweDdjMTAsIDB4MTA3OCwgMHg3NTNkLAotCTB4MDA3YywgMHgwZDdlLCAweDBjN2UsIDB4MTA3OCwgMHg3Y2ZiLCAweDAwYzAsIDB4N2MyNywgMHgyMDAxLAotCTB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2M0YiwgMHgyMDA5LAotCTB4YTg4ZSwgMHgyMTA0LCAweGEwODYsIDB4MDAwOSwgMHgwMGMwLCAweDdjM2MsIDB4NjAxOCwgMHgyMDY4LAotCTB4Njg0MCwgMHhhMDg0LCAweDAwZmYsIDB4YTAwNSwgMHgwMDQwLCAweDdjNDksIDB4ODAwMSwgMHg2ODQyLAotCTB4NjAxNywgMHgwMDBhLCAweDAwNzgsIDB4N2M0YiwgMHgyMDA5LCAweGE4OGYsIDB4MjEwNCwgMHhhMDg0LAotCTB4ZmYwMCwgMHhhMDg2LCAweDE5MDAsIDB4MDBjMCwgMHg3YzQ5LCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LAotCTB4N2M0YiwgMHgxMDc4LCAweDdiODEsIDB4MGM3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MTA3OCwgMHg3ZDBhLAotCTB4MDBjMCwgMHg3YzYyLCAweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MjAwMSwgMHgwMDAyLAotCTB4MTA3OCwgMHg0NDNmLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MTA3OCwgMHg1YzQ1LAotCTB4MDA3OCwgMHg3YzhlLCAweDEwNzgsIDB4N2EwNSwgMHgyMDA5LCAweGE4OGUsIDB4MjEzNCwgMHhhNmI0LAotCTB4MDBmZiwgMHhhNjg2LCAweDAwMDUsIDB4MDA0MCwgMHg3YzhmLCAweGE2ODYsIDB4MDAwYiwgMHgwMDQwLAotCTB4N2M4YywgMHgyMDA5LCAweGE4OGYsIDB4MjEwNCwgMHhhMDg0LCAweGZmMDAsIDB4MDBjMCwgMHg3YzdjLAotCTB4YTY4NiwgMHgwMDA5LCAweDAwNDAsIDB4N2M4ZiwgMHhhMDg2LCAweDE5MDAsIDB4MDBjMCwgMHg3YzhjLAotCTB4YTY4NiwgMHgwMDA5LCAweDAwNDAsIDB4N2M4ZiwgMHgyMDAxLCAweDAwMDQsIDB4MTA3OCwgMHg0NDNmLAotCTB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4N2M4ZSwgMHgxMDc4LCAweDdiODEsIDB4MDA3YywgMHgwZDdlLAotCTB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDdjOWQsIDB4NjgzOCwgMHhkMGZjLAotCTB4MDA0MCwgMHg3YzlkLCAweDBkN2YsIDB4MDA3OCwgMHg3YzhjLCAweDYwMTgsIDB4MjA2OCwgMHg2ODQwLAotCTB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDA0MCwgMHg3Y2FlLCAweDgwMDEsIDB4Njg0MiwgMHg2MDE3LAotCTB4MDAwYSwgMHg2MDA3LCAweDAwMTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDdjOGUsIDB4NjhhMCwgMHhhMDg2LAotCTB4MDA3ZSwgMHgwMGMwLCAweDdjYmIsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4MTA3OCwgMHg0MWY1LAotCTB4MGU3ZiwgMHgwMDc4LCAweDdjYmQsIDB4MTA3OCwgMHgyODEzLCAweDBkN2YsIDB4MDA3OCwgMHg3YzhjLAotCTB4MTA3OCwgMHg3ZDBhLCAweDAwYzAsIDB4N2NkMCwgMHgyMDAxLCAweDAwMDQsIDB4MTA3OCwgMHg0NDNmLAotCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMywgMHgxMDc4LCAweDVjNDUsIDB4MDA3OCwgMHg3Y2Q0LAotCTB4MTA3OCwgMHg3YTA1LCAweDEwNzgsIDB4N2I4MSwgMHgwMDdjLCAweDEwNzgsIDB4N2QwYSwgMHgwMGMwLAotCTB4N2NlNSwgMHgyMDAxLCAweDAwMDgsIDB4MTA3OCwgMHg0NDNmLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDAwNSwgMHgxMDc4LCAweDVjNDUsIDB4MDA3OCwgMHg3Y2U3LCAweDEwNzgsIDB4N2I4MSwgMHgwMDdjLAotCTB4MTA3OCwgMHg3ZDBhLCAweDAwYzAsIDB4N2NmOCwgMHgyMDAxLCAweDAwMGEsIDB4MTA3OCwgMHg0NDNmLAotCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MDA3OCwgMHg3Y2ZhLAotCTB4MTA3OCwgMHg3YjgxLCAweDAwN2MsIDB4MjAwOSwgMHhhODhlLCAweDIxMDQsIDB4YTA4NiwgMHgwMDAzLAotCTB4MDBjMCwgMHg3ZDA5LCAweDIwMDksIDB4YTg4ZiwgMHgyMTA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LAotCTB4MmEwMCwgMHgwMDdjLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDBjN2UsIDB4MDE3ZSwgMHhhYzg4LAotCTB4MDAwNiwgMHgyMTY0LCAweDEwNzgsIDB4NDUxMywgMHgwMTdmLCAweDBjN2YsIDB4MDA3YywgMHgwZjdlLAotCTB4MGU3ZSwgMHgwZDdlLCAweDAzN2UsIDB4MDE3ZSwgMHg2MDE4LCAweDIwNjgsIDB4MjA3MSwgMHhhMzMyLAotCTB4MmUwNCwgMHhhMDg1LCAweDAwMDMsIDB4MjA3MiwgMHgxMDc4LCAweDdkOGIsIDB4MDA0MCwgMHg3ZDUwLAotCTB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhNCwgMHgwMDQwLCAweDdkMzksIDB4YTAwNiwgMHgyMDIwLAotCTB4MjAwOSwgMHgwMDJhLCAweDEwNzgsIDB4OWVjMCwgMHgyMDAxLCAweGEzMGMsIDB4MjAwYywgMHhjMTk1LAotCTB4MjEwMiwgMHgyMDE5LCAweDAwMmEsIDB4MjAwOSwgMHgwMDAxLCAweDEwNzgsIDB4MjdlMiwgMHgyMDcxLAotCTB4YTMwMCwgMHgxMDc4LCAweDI2MGQsIDB4MGM3ZSwgMHgxNTdlLCAweDIwYTksIDB4MDA4MSwgMHgyMDA5LAotCTB4MDA3ZiwgMHgxMDc4LCAweDI5MjEsIDB4ODEwOCwgMHgwMGYwLCAweDdkNDksIDB4MTU3ZiwgMHgwYzdmLAotCTB4MTA3OCwgMHg3ZDBkLCAweDY4MTMsIDB4MDBmZiwgMHg2ODE3LCAweGZmZmUsIDB4MjA3MSwgMHhhODgwLAotCTB4MjA3OSwgMHgwMTAwLCAweDJlMDQsIDB4YTA4NCwgMHgwMGZmLCAweDIwNjksIDB4YTMxYSwgMHgyMDZhLAotCTB4NzhlNiwgMHgwMDdlLCAweDhlNzAsIDB4MmUwNCwgMHgyMDY5LCAweGEzMWIsIDB4MjA2YSwgMHg3OGVhLAotCTB4YTA4NCwgMHhmZjAwLCAweDAxN2YsIDB4YTEwNSwgMHgyMDA5LCAweGEzMjUsIDB4MjAwYSwgMHgyMDY5LAotCTB4YTg4ZSwgMHgyMDcxLCAweGE1OWMsIDB4NjgxMCwgMHgyMDcyLCAweDY4MTQsIDB4NzAwNiwgMHg2ODE4LAotCTB4NzAwYSwgMHg2ODFjLCAweDcwMGUsIDB4MTA3OCwgMHg4ZGE5LCAweDIwMDEsIDB4MDAwNiwgMHgxMDc4LAotCTB4NDQzZiwgMHgxMDc4LCAweDI4MzksIDB4MTA3OCwgMHg3NTNkLCAweDAxN2YsIDB4MDM3ZiwgMHgwZDdmLAotCTB4MGU3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MDI3ZSwgMHgwMzdlLCAweDBlN2UsIDB4MTU3ZSwgMHgyMDE5LAotCTB4YTMyNSwgMHgyMzFjLCAweDgzZmYsIDB4MDA0MCwgMHg3ZGI1LCAweDIwNzEsIDB4YTg4MCwgMHgyZTE0LAotCTB4YTI5NCwgMHgwMGZmLCAweDcwMDQsIDB4YTA4NCwgMHhmZjAwLCAweGEyMDUsIDB4YTMwNiwgMHgwMGMwLAotCTB4N2RiNSwgMHgyMDExLCAweGE4OTYsIDB4YWQ5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgxMDc4LAotCTB4N2U1NSwgMHgwMGMwLCAweDdkYjUsIDB4MjAxMSwgMHhhODlhLCAweGFkOTgsIDB4MDAwNiwgMHgyMGE5LAotCTB4MDAwNCwgMHgxMDc4LCAweDdlNTUsIDB4MDBjMCwgMHg3ZGI1LCAweDE1N2YsIDB4MGU3ZiwgMHgwMzdmLAotCTB4MDI3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhODhjLCAweDcwMDQsIDB4YTA4NiwgMHgwMDE0LAotCTB4MDBjMCwgMHg3ZGRkLCAweDcwMDgsIDB4YTA4NiwgMHgwODAwLCAweDAwYzAsIDB4N2RkZCwgMHg3MDBjLAotCTB4ZDBlYywgMHgwMDQwLCAweDdkZGIsIDB4YTA4NCwgMHgwZjAwLCAweGEwODYsIDB4MDEwMCwgMHgwMGMwLAotCTB4N2RkYiwgMHg3MDI0LCAweGQwYTQsIDB4MDBjMCwgMHg3ZGQ4LCAweGQwYWMsIDB4MDA0MCwgMHg3ZGRiLAotCTB4YTAwNiwgMHgwMDc4LCAweDdkZGQsIDB4YTA4NSwgMHgwMDAxLCAweDBlN2YsIDB4MDA3YywgMHgwZTdlLAotCTB4MGQ3ZSwgMHgwYzdlLCAweDA3N2UsIDB4MDU3ZSwgMHgwNDdlLCAweDAyN2UsIDB4MDA3ZSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDIwMjksIDB4YTViNCwgMHgyNTJjLCAweDIwMjEsIDB4YTViYSwgMHgyNDI0LAotCTB4MjA2MSwgMHhhYTAwLCAweDIwNzEsIDB4YTMwMCwgMHg3MjQ0LCAweDcwNjAsIDB4YTIwMiwgMHgwMGM4LAotCTB4N2U0MywgMHgxMDc4LCAweDllZTUsIDB4MDA0MCwgMHg3ZTNiLCAweDY3MWMsIDB4YTc4NiwgMHgwMDAxLAotCTB4MDA0MCwgMHg3ZTNiLCAweGE3ODYsIDB4MDAwNywgMHgwMDQwLCAweDdlM2IsIDB4MjUwMCwgMHhhYzA2LAotCTB4MDA0MCwgMHg3ZTNiLCAweDI0MDAsIDB4YWMwNiwgMHgwMDQwLCAweDdlM2IsIDB4MGM3ZSwgMHg2MDAwLAotCTB4YTA4NiwgMHgwMDA0LCAweDAwYzAsIDB4N2UxNiwgMHgxMDc4LCAweDE3NDksIDB4YTc4NiwgMHgwMDA4LAotCTB4MDBjMCwgMHg3ZTI1LCAweDEwNzgsIDB4OGMzYiwgMHgwMGMwLCAweDdlMjUsIDB4MGM3ZiwgMHgxMDc4LAotCTB4N2EwNSwgMHgxMDc4LCAweDhjMDEsIDB4MDA3OCwgMHg3ZTNiLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LAotCTB4OGE0NCwgMHgwMDQwLCAweDdlMzgsIDB4YTc4NiwgMHgwMDAzLCAweDAwYzAsIDB4N2U0ZCwgMHg2ODM3LAotCTB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LAotCTB4MTA3OCwgMHg4YzAxLCAweDBjN2YsIDB4YWNlMCwgMHgwMDEwLCAweDcwNTQsIDB4YWMwMiwgMHgwMGM4LAotCTB4N2U0MywgMHgwMDc4LCAweDdkZjQsIDB4MTI3ZiwgMHgwMDdmLCAweDAyN2YsIDB4MDQ3ZiwgMHgwNTdmLAotCTB4MDc3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwMDdjLCAweGE3ODYsIDB4MDAwNiwgMHgwMGMwLAotCTB4N2UyZiwgMHgxMDc4LCAweDllNzAsIDB4MDA3OCwgMHg3ZTM4LCAweDIyMGMsIDB4MjMwNCwgMHhhMTA2LAotCTB4MDBjMCwgMHg3ZTYwLCAweDgyMTAsIDB4ODMxOCwgMHgwMGYwLCAweDdlNTUsIDB4YTAwNiwgMHgwMDdjLAotCTB4MjMwNCwgMHhhMTAyLCAweDAwNDgsIDB4N2U2OCwgMHgyMDAxLCAweDAwMDEsIDB4MDA3OCwgMHg3ZTZhLAotCTB4MjAwMSwgMHgwMDAwLCAweGExOGQsIDB4MDAwMSwgMHgwMDdjLCAweDYwMDQsIDB4YTA4YSwgMHgwMDQ0LAotCTB4MTBjOCwgMHgxMzI4LCAweDEwNzgsIDB4OGMyNywgMHgwMDQwLCAweDdlN2MsIDB4MTA3OCwgMHg4YzNiLAotCTB4MDA0MCwgMHg3ZTg5LCAweDAwNzgsIDB4N2U4MiwgMHgxMDc4LCAweDI4MzksIDB4MTA3OCwgMHg4YzNiLAotCTB4MDA0MCwgMHg3ZTg5LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LAotCTB4MDA3YywgMHgxMDc4LCAweDdhMDUsIDB4MDA3OCwgMHg3ZTgyLCAweGExODIsIDB4MDA0MCwgMHgwMDc5LAotCTB4N2U5MSwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNCwgMHg3ZWE0LAotCTB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNCwgMHg3ZWE2LCAweDdlYTYsIDB4N2VhNiwgMHg3ZWE2LAotCTB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNiwgMHgxMDc4LCAweDEzMjgsIDB4NjAwYiwgMHhmZmZmLAotCTB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MTA3OCwgMHg1YmY4LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MTA3OCwgMHg2MTA5LCAweDEyN2YsIDB4MDA3YywgMHhhMTg2LCAweDAwMTMsIDB4MDBjMCwgMHg3ZWJkLAotCTB4NjAwNCwgMHhhMDgyLCAweDAwNDAsIDB4MDA3OSwgMHg3ZjQ4LCAweGExODYsIDB4MDAyNywgMHgwMGMwLAotCTB4N2VkZiwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHgyODEzLCAweDBkN2UsIDB4NjExMCwgMHgyMTY4LAotCTB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4N2VkOSwgMHg2ODM3LCAweDAxMDMsIDB4Njg0YiwgMHgwMDI5LAotCTB4Njg0NywgMHgwMDAwLCAweDY5NGMsIDB4YzFjNSwgMHg2OTRlLCAweDEwNzgsIDB4NDk4MiwgMHgxMDc4LAotCTB4OGJmNCwgMHgwZDdmLCAweDEwNzgsIDB4NzUzZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHhhMTg2LAotCTB4MDAxNCwgMHgwMGMwLCAweDdlZTgsIDB4NjAwNCwgMHhhMDgyLCAweDAwNDAsIDB4MDA3OSwgMHg3ZjEwLAotCTB4YTE4NiwgMHgwMDQ2LCAweDAwNDAsIDB4N2VmNCwgMHhhMTg2LCAweDAwNDUsIDB4MDA0MCwgMHg3ZWY0LAotCTB4YTE4NiwgMHgwMDQ3LCAweDEwYzAsIDB4MTMyOCwgMHgyMDAxLCAweDAxMDksIDB4MjAwNCwgMHhkMDg0LAotCTB4MDA0MCwgMHg3ZjBkLCAweDEyN2UsIDB4MjA5MSwgMHgyMjAwLCAweDAwN2UsIDB4MDE3ZSwgMHgwMjdlLAotCTB4MTA3OCwgMHg1YWQyLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdmLCAweDEyN2YsIDB4NjAwMCwgMHhhMDg2LAotCTB4MDAwMiwgMHgwMGMwLCAweDdmMGQsIDB4MDA3OCwgMHg3ZjgxLCAweDEwNzgsIDB4NzU4MywgMHgwMDdjLAotCTB4N2YyNSwgMHg3ZjIzLCAweDdmMjMsIDB4N2YyMywgMHg3ZjIzLCAweDdmMjMsIDB4N2YyMywgMHg3ZjIzLAotCTB4N2YyMywgMHg3ZjIzLCAweDdmMjMsIDB4N2Y0MSwgMHg3ZjQxLCAweDdmNDEsIDB4N2Y0MSwgMHg3ZjIzLAotCTB4N2Y0MSwgMHg3ZjIzLCAweDdmNDEsIDB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgwZDdlLAotCTB4NjExMCwgMHgyMTY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDdmM2IsIDB4NjgzNywgMHgwMTAzLAotCTB4Njg0YiwgMHgwMDA2LCAweDY4NDcsIDB4MDAwMCwgMHg2ODUwLCAweGMwZWMsIDB4Njg1MiwgMHgxMDc4LAotCTB4NDk4MiwgMHgxMDc4LCAweDhiZjQsIDB4MGQ3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LAotCTB4MDA3YywgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLAotCTB4N2Y1ZCwgMHg3ZjViLCAweDdmNWIsIDB4N2Y1YiwgMHg3ZjViLCAweDdmNWIsIDB4N2Y1YiwgMHg3ZjViLAotCTB4N2Y1YiwgMHg3ZjViLCAweDdmNWIsIDB4N2Y2ZiwgMHg3ZjZmLCAweDdmNmYsIDB4N2Y2ZiwgMHg3ZjViLAotCTB4N2Y3YSwgMHg3ZjViLCAweDdmNmYsIDB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgyMDAxLAotCTB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4NjAwMywgMHgwMDAyLCAweDEwNzgsIDB4NjEwOSwgMHg2MDEwLAotCTB4YTA4OCwgMHgwMDEzLCAweDIxMDQsIDB4YTA4NSwgMHgwNDAwLCAweDIwMGEsIDB4MDA3YywgMHgxMDc4LAotCTB4NjAxMCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwZiwgMHgxMDc4LAotCTB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LAotCTB4MDA3YywgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg3Zjg1LCAweDdmOTgsIDB4N2Y5OCwgMHg3Zjk4LAotCTB4N2Y5OCwgMHg3Zjk4LCAweDdmOWEsIDB4ODA5NSwgMHg4MGI3LCAweDdmOTgsIDB4N2Y5OCwgMHg3Zjk4LAotCTB4N2Y5OCwgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwgMHg3Zjk4LAotCTB4MTA3OCwgMHgxMzI4LCAweDBlN2UsIDB4MGQ3ZSwgMHg2MDNmLCAweDAwMDAsIDB4MjA3MSwgMHhhODgwLAotCTB4NzEyNCwgMHg2MTBhLCAweDIwNzEsIDB4YTg4YywgMHg2MTEwLCAweDIxNjgsIDB4NzYxNCwgMHhhNmI0LAotCTB4MGZmZiwgMHg4NmZmLCAweDAwNDAsIDB4ODA1OCwgMHhhNjhjLCAweDBjMDAsIDB4MDA0MCwgMHg3ZmQxLAotCTB4MGY3ZSwgMHgyYzc4LCAweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4N2ZjZCwgMHg2ODRjLAotCTB4ZDBhYywgMHgwMDQwLCAweDdmY2QsIDB4NjAyNCwgMHhkMGRjLCAweDAwYzAsIDB4N2ZjZCwgMHg2ODUwLAotCTB4ZDBiYywgMHgwMGMwLCAweDdmY2QsIDB4NzMxOCwgMHg2ODE0LCAweGEzMDYsIDB4MDBjMCwgMHg4MDZmLAotCTB4NzMxYywgMHg2ODEwLCAweGEzMDYsIDB4MDBjMCwgMHg4MDZmLCAweDczMTgsIDB4NmI2MiwgMHg3MzFjLAotCTB4NmI1ZSwgMHhhNjhjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDAyLCAweDAwNDAsIDB4ODAwNCwgMHhhMTg2LAotCTB4MDAyOCwgMHgwMGMwLCAweDdmZTEsIDB4MTA3OCwgMHg4YzE1LCAweDY4NGIsIDB4MDAxYywgMHgwMDc4LAotCTB4ODAwNiwgMHhkNmRjLCAweDAwNDAsIDB4N2ZmZCwgMHg2ODRiLCAweDAwMTUsIDB4Njg0YywgMHhkMGFjLAotCTB4MDA0MCwgMHg3ZmZiLCAweDY5MTQsIDB4NmExMCwgMHgyMTAwLCAweGEyMDUsIDB4MDA0MCwgMHg3ZmZiLAotCTB4NzAxOCwgMHhhMTA2LCAweDAwYzAsIDB4N2ZmOCwgMHg3MDFjLCAweGEyMDYsIDB4MDA0MCwgMHg3ZmZiLAotCTB4Njk2MiwgMHg2YTVlLCAweGM2ZGMsIDB4MDA3OCwgMHg4MDA2LCAweGQ2ZDQsIDB4MDA0MCwgMHg4MDA0LAotCTB4Njg0YiwgMHgwMDA3LCAweDAwNzgsIDB4ODAwNiwgMHg2ODRiLCAweDAwMDAsIDB4NjgzNywgMHgwMTAzLAotCTB4NmU0NiwgMHhhMDFlLCAweGQ2YzQsIDB4MDA0MCwgMHg4MDJmLCAweGE2ODYsIDB4MDEwMCwgMHgwMGMwLAotCTB4ODAxYSwgMHgyMDAxLCAweGE4OTksIDB4MjAwNCwgMHhhMDA1LCAweDAwYzAsIDB4ODAxYSwgMHhjNmM0LAotCTB4MDA3OCwgMHg3ZmE5LCAweDczMjgsIDB4NzMyYywgMHg2YjU2LCAweDgzZmYsIDB4MDA0MCwgMHg4MDJmLAotCTB4YTM4YSwgMHgwMDA5LCAweDAwNDgsIDB4ODAyNiwgMHgyMDE5LCAweDAwMDgsIDB4MDM3ZSwgMHgyMzA4LAotCTB4MjAxOSwgMHhhODk4LCAweGFkOTAsIDB4MDAxOSwgMHgxMDc4LCAweDg3MzksIDB4MDM3ZiwgMHhkNmNjLAotCTB4MDA0MCwgMHg4MDg1LCAweDcxMjQsIDB4Njk1YSwgMHg4MWZmLCAweDAwNDAsIDB4ODA4NSwgMHhhMTkyLAotCTB4MDAyMSwgMHgwMGM4LCAweDgwNDYsIDB4MjA3MSwgMHhhODk4LCAweDgzMWMsIDB4MjMwMCwgMHhhZTE4LAotCTB4YWQ5MCwgMHgwMDFkLCAweDEwNzgsIDB4ODczOSwgMHgwMDc4LCAweDgwODUsIDB4NjgzOCwgMHhkMGZjLAotCTB4MDA0MCwgMHg4MDRmLCAweDIwMDksIDB4MDAyMCwgMHg2OTVhLCAweDAwNzgsIDB4ODAzYiwgMHgwZjdlLAotCTB4MmQ3OCwgMHgxMDc4LCAweDg2ZDEsIDB4MGY3ZiwgMHgxMDc4LCAweDg3MjYsIDB4MDA3OCwgMHg4MDg3LAotCTB4MGY3ZSwgMHgyYzc4LCAweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODA3NSwgMHg2ODRjLAotCTB4ZDBhYywgMHgwMDQwLCAweDgwNzUsIDB4NjAyNCwgMHhkMGRjLCAweDAwYzAsIDB4ODA3NSwgMHg2ODUwLAotCTB4ZDBiYywgMHgwMGMwLCAweDgwNzUsIDB4Njg0YywgMHhkMGY0LCAweDAwYzAsIDB4ODA3NSwgMHgxMDc4LAotCTB4OGNmYSwgMHgwZDdmLCAweDBlN2YsIDB4MDA3OCwgMHg4MDk0LCAweDY4NGIsIDB4MDAwMCwgMHg2ODM3LAotCTB4MDEwMywgMHg2ZTQ2LCAweDY4NGMsIDB4ZDBhYywgMHgwMDQwLCAweDgwODUsIDB4NjgxMCwgMHg2OTE0LAotCTB4YTExNSwgMHgwMDQwLCAweDgwODUsIDB4MTA3OCwgMHg4MjMzLCAweDEwNzgsIDB4NDk4MiwgMHg2MjE4LAotCTB4MjI2OCwgMHg2YTNjLCAweDgyMTEsIDB4NmEzZSwgMHgxMDc4LCAweDhjYzQsIDB4MGQ3ZiwgMHgwZTdmLAotCTB4MDBjMCwgMHg4MDk0LCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLCAweDBmN2UsIDB4NjAwMywgMHgwMDAzLAotCTB4MjA3OSwgMHhhODhjLCAweDdjMDQsIDB4N2IwMCwgMHg3ZTBjLCAweDdkMDgsIDB4NjAxMCwgMHgyMDc4LAotCTB4Nzg0YywgMHhkMGFjLCAweDAwNDAsIDB4ODBhOCwgMHg2MDAzLCAweDAwMDIsIDB4MGY3ZiwgMHgwMDdjLAotCTB4N2MxMiwgMHg3YjE2LCAweDdlMGEsIDB4N2QwZSwgMHgwZjdmLCAweDYwM2YsIDB4MDAwMCwgMHgyYzEwLAotCTB4MTA3OCwgMHgxY2FiLCAweDEwNzgsIDB4NWM2NCwgMHgxMDc4LCAweDYxZDMsIDB4MDA3YywgMHgyMDAxLAotCTB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4NjAwMywgMHgwMDA0LCAweDYxMTAsIDB4MjBlMSwgMHgwMDA1LAotCTB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDAwN2MsIDB4YTE4MiwgMHgwMDQwLAotCTB4MDA3OSwgMHg4MGNhLCAweDgwZGQsIDB4ODBkZCwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZCwgMHg4MGRmLAotCTB4ODE4MiwgMHg4MGRkLCAweDgwZGQsIDB4ODE5OCwgMHg4MjA5LCAweDgwZGQsIDB4ODBkZCwgMHg4MGRkLAotCTB4ODBkZCwgMHg4MjE4LCAweDgwZGQsIDB4ODBkZCwgMHg4MGRkLCAweDEwNzgsIDB4MTMyOCwgMHgwNzdlLAotCTB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MjA3MSwgMHhhODhjLCAweDYxMTAsIDB4MjE3OCwgMHg3NjE0LAotCTB4YTZiNCwgMHgwZmZmLCAweDdlNDYsIDB4N2Y0YywgMHhjN2U1LCAweDdmNGUsIDB4NjIxOCwgMHgyMjY4LAotCTB4NmEzYywgMHg4MjExLCAweDZhM2UsIDB4ODZmZiwgMHgwMDQwLCAweDgxN2QsIDB4YTY5NCwgMHhmZjAwLAotCTB4YTI4NCwgMHgwYzAwLCAweDAwNDAsIDB4ODEwMCwgMHg3MDE4LCAweDc4NjIsIDB4NzAxYywgMHg3ODVlLAotCTB4YTI4NCwgMHgwMzAwLCAweDAwNDAsIDB4ODE3ZCwgMHgxMDc4LCAweDEzODEsIDB4MTA0MCwgMHgxMzI4LAotCTB4MmQwMCwgMHg3ODRhLCAweDdmNGMsIDB4YzdjZCwgMHg3ZjRlLCAweDY4MzcsIDB4MDEwMywgMHg3ODM4LAotCTB4NjgzYSwgMHg3ODNjLCAweDY4M2UsIDB4Nzg0MCwgMHg2ODQyLCAweDZlNDYsIDB4YTY4YywgMHgwYzAwLAotCTB4MDA0MCwgMHg4MTFlLCAweDczMTgsIDB4NmI2MiwgMHg3MzFjLCAweDZiNWUsIDB4YTY4YywgMHgwMGZmLAotCTB4YTE4NiwgMHgwMDAyLCAweDAwNDAsIDB4ODEzYSwgMHhhMTg2LCAweDAwMjgsIDB4MDBjMCwgMHg4MTJjLAotCTB4Njg0YiwgMHgwMDFjLCAweDAwNzgsIDB4ODEzYywgMHhkNmRjLCAweDAwNDAsIDB4ODEzMywgMHg2ODRiLAotCTB4MDAxNSwgMHgwMDc4LCAweDgxM2MsIDB4ZDZkNCwgMHgwMDQwLCAweDgxM2EsIDB4Njg0YiwgMHgwMDA3LAotCTB4MDA3OCwgMHg4MTNjLCAweDY4NGIsIDB4MDAwMCwgMHg2ZjRlLCAweDc4NTAsIDB4Njg1MiwgMHg3ODU0LAotCTB4Njg1NiwgMHhhMDFlLCAweGQ2YzQsIDB4MDA0MCwgMHg4MTVhLCAweDczMjgsIDB4NzMyYywgMHg2YjU2LAotCTB4ODNmZiwgMHgwMDQwLCAweDgxNWEsIDB4YTM4YSwgMHgwMDA5LCAweDAwNDgsIDB4ODE1MSwgMHgyMDE5LAotCTB4MDAwOCwgMHgwMzdlLCAweDIzMDgsIDB4MjAxOSwgMHhhODk4LCAweGFkOTAsIDB4MDAxOSwgMHgxMDc4LAotCTB4ODczOSwgMHgwMzdmLCAweGQ2Y2MsIDB4MDA0MCwgMHg4MTdkLCAweDcxMjQsIDB4Njk1YSwgMHg4MWZmLAotCTB4MDA0MCwgMHg4MTdkLCAweGExOTIsIDB4MDAyMSwgMHgwMGM4LCAweDgxNzEsIDB4MjA3MSwgMHhhODk4LAotCTB4ODMxYywgMHgyMzAwLCAweGFlMTgsIDB4YWQ5MCwgMHgwMDFkLCAweDEwNzgsIDB4ODczOSwgMHgwMDc4LAotCTB4ODE3ZCwgMHg3ODM4LCAweGQwZmMsIDB4MDA0MCwgMHg4MTdhLCAweDIwMDksIDB4MDAyMCwgMHg2OTVhLAotCTB4MDA3OCwgMHg4MTY2LCAweDJkNzgsIDB4MTA3OCwgMHg4NmQxLCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLAotCTB4MDc3ZiwgMHgwMDdjLCAweDBmN2UsIDB4NjAwMywgMHgwMDAzLCAweDIwNzksIDB4YTg4YywgMHg3YzA0LAotCTB4N2IwMCwgMHg3ZTBjLCAweDdkMDgsIDB4NjAxMCwgMHgyMDc4LCAweDdjMTIsIDB4N2IxNiwgMHg3ZTBhLAotCTB4N2QwZSwgMHgwZjdmLCAweDJjMTAsIDB4MTA3OCwgMHgxY2FiLCAweDEwNzgsIDB4NmMyNiwgMHgwMDdjLAotCTB4MGQ3ZSwgMHgwZjdlLCAweDJjNzgsIDB4MTA3OCwgMHg0ODkzLCAweDBmN2YsIDB4MDA0MCwgMHg4MWE0LAotCTB4MjAwMSwgMHhhNWEyLCAweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDIsIDB4MTA3OCwgMHg2MGI4LAotCTB4MTA3OCwgMHg2MWQzLCAweDYxMTAsIDB4MjE2OCwgMHg2OTRjLCAweGQxZTQsIDB4MDA0MCwgMHg4MjA3LAotCTB4ZDFjYywgMHgwMDQwLCAweDgxZGUsIDB4Njk0OCwgMHg2ODM4LCAweGQwZmMsIDB4MDA0MCwgMHg4MWQ2LAotCTB4MDE3ZSwgMHg2ODRjLCAweDAwN2UsIDB4Njg1MCwgMHgwMDdlLCAweGFkOTAsIDB4MDAwZCwgMHhhMTk4LAotCTB4MDAwZCwgMHgyMDA5LCAweDAwMjAsIDB4MTU3ZSwgMHgyMWE4LCAweDIzMDQsIDB4MjAxMiwgMHg4MzE4LAotCTB4ODIxMCwgMHgwMGYwLCAweDgxYzUsIDB4MTU3ZiwgMHgwMDdmLCAweDY4NTIsIDB4MDA3ZiwgMHg2ODRlLAotCTB4MDE3ZiwgMHgyMTY4LCAweDEwNzgsIDB4MTNhYSwgMHgwMDc4LCAweDgyMDEsIDB4MDE3ZSwgMHgxMDc4LAotCTB4MTNhYSwgMHgwZDdmLCAweDEwNzgsIDB4ODcyNiwgMHgwMDc4LCAweDgyMDEsIDB4NjgzNywgMHgwMTAzLAotCTB4Njk0NCwgMHhhMTg0LCAweDAwZmYsIDB4YTBiNiwgMHgwMDAyLCAweDAwNDAsIDB4ODFmZCwgMHhhMDg2LAotCTB4MDAyOCwgMHgwMGMwLCAweDgxZWYsIDB4Njg0YiwgMHgwMDFjLCAweDAwNzgsIDB4ODFmZiwgMHhkMWRjLAotCTB4MDA0MCwgMHg4MWY2LCAweDY4NGIsIDB4MDAxNSwgMHgwMDc4LCAweDgxZmYsIDB4ZDFkNCwgMHgwMDQwLAotCTB4ODFmZCwgMHg2ODRiLCAweDAwMDcsIDB4MDA3OCwgMHg4MWZmLCAweDY4NGIsIDB4MDAwMCwgMHgxMDc4LAotCTB4NDk4MiwgMHgxMDc4LCAweDhjYzQsIDB4MDBjMCwgMHg4MjA3LCAweDEwNzgsIDB4NzUzZCwgMHgwZDdmLAotCTB4MDA3YywgMHgyMDE5LCAweDAwMDEsIDB4MTA3OCwgMHg2ZTZjLCAweDYwMDMsIDB4MDAwMiwgMHgyMDAxLAotCTB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4MTA3OCwgMHg2MGI4LCAweDEwNzgsIDB4NjFkMywgMHgwMDdjLAotCTB4MTA3OCwgMHg2MGI4LCAweDEwNzgsIDB4MjgxMywgMHgwZDdlLCAweDYxMTAsIDB4MjE2OCwgMHgxMDc4LAotCTB4OGE0NCwgMHgwMDQwLCAweDgyMmQsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAyOSwgMHg2ODQ3LAotCTB4MDAwMCwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LCAweDBkN2YsIDB4MTA3OCwgMHg3NTNkLAotCTB4MTA3OCwgMHg2MWQzLCAweDAwN2MsIDB4Njg0YiwgMHgwMDE1LCAweGQxZmMsIDB4MDA0MCwgMHg4MjNmLAotCTB4Njg0YiwgMHgwMDA3LCAweDgwMDIsIDB4ODAwMCwgMHg4MTBhLCAweGExODksIDB4MDAwMCwgMHg2OTYyLAotCTB4Njg1ZSwgMHgwMDdjLCAweGExODIsIDB4MDA0MCwgMHgwMDc5LCAweDgyNDYsIDB4ODI1OSwgMHg4MjU5LAotCTB4ODI1OSwgMHg4MjU5LCAweDgyNTksIDB4ODI1YiwgMHg4MjU5LCAweDgzMzMsIDB4ODMzZiwgMHg4MjU5LAotCTB4ODI1OSwgMHg4MjU5LCAweDgyNTksIDB4ODI1OSwgMHg4MjU5LCAweDgyNTksIDB4ODI1OSwgMHg4MjU5LAotCTB4ODI1OSwgMHgxMDc4LCAweDEzMjgsIDB4MDc3ZSwgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwgMHgyMDcxLAotCTB4YTg4YywgMHg2MTEwLCAweDIxNzgsIDB4NzYxNCwgMHhhNmI0LCAweDBmZmYsIDB4MGY3ZSwgMHgyYzc4LAotCTB4MTA3OCwgMHg0ODkzLCAweDBmN2YsIDB4MDA0MCwgMHg4MjdlLCAweGE2ODQsIDB4MDBmZiwgMHgwMGMwLAotCTB4ODI3ZSwgMHg2MDI0LCAweGQwZjQsIDB4MDBjMCwgMHg4MjdhLCAweDc4MDgsIDB4YTA4NiwgMHgwMDAwLAotCTB4MDBjMCwgMHg4MjdlLCAweDEwNzgsIDB4OGNmYSwgMHgwMDc4LCAweDgzMmUsIDB4N2U0NiwgMHg3ZjRjLAotCTB4YzdlNSwgMHg3ZjRlLCAweDYyMTgsIDB4MjI2OCwgMHg2YTNjLCAweDgyMTEsIDB4NmEzZSwgMHg4NmZmLAotCTB4MDA0MCwgMHg4MzIzLCAweGE2OTQsIDB4ZmYwMCwgMHhhMjg0LCAweDBjMDAsIDB4MDA0MCwgMHg4Mjk0LAotCTB4NzAxOCwgMHg3ODYyLCAweDcwMWMsIDB4Nzg1ZSwgMHhhMjg0LCAweDAzMDAsIDB4MDA0MCwgMHg4MzIwLAotCTB4YTY4NiwgMHgwMTAwLCAweDAwYzAsIDB4ODJhNiwgMHgyMDAxLCAweGE4OTksIDB4MjAwNCwgMHhhMDA1LAotCTB4MDBjMCwgMHg4MmE2LCAweGM2YzQsIDB4N2U0NiwgMHgwMDc4LCAweDgyODcsIDB4MTA3OCwgMHgxMzgxLAotCTB4MTA0MCwgMHgxMzI4LCAweDJkMDAsIDB4Nzg0YSwgMHg3ZjRjLCAweGE3YmQsIDB4MDIwMCwgMHg3ZjRlLAotCTB4NjgzNywgMHgwMTAzLCAweDc4MzgsIDB4NjgzYSwgMHg3ODNjLCAweDY4M2UsIDB4Nzg0MCwgMHg2ODQyLAotCTB4NmU0NiwgMHhhNjhjLCAweDBjMDAsIDB4MDA0MCwgMHg4MmMxLCAweDczMTgsIDB4NmI2MiwgMHg3MzFjLAotCTB4NmI1ZSwgMHhhNjhjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDAyLCAweDAwNDAsIDB4ODJkZCwgMHhhMTg2LAotCTB4MDAyOCwgMHgwMGMwLCAweDgyY2YsIDB4Njg0YiwgMHgwMDFjLCAweDAwNzgsIDB4ODJkZiwgMHhkNmRjLAotCTB4MDA0MCwgMHg4MmQ2LCAweDY4NGIsIDB4MDAxNSwgMHgwMDc4LCAweDgyZGYsIDB4ZDZkNCwgMHgwMDQwLAotCTB4ODJkZCwgMHg2ODRiLCAweDAwMDcsIDB4MDA3OCwgMHg4MmRmLCAweDY4NGIsIDB4MDAwMCwgMHg2ZjRlLAotCTB4Nzg1MCwgMHg2ODUyLCAweDc4NTQsIDB4Njg1NiwgMHhhMDFlLCAweGQ2YzQsIDB4MDA0MCwgMHg4MmZkLAotCTB4NzMyOCwgMHg3MzJjLCAweDZiNTYsIDB4ODNmZiwgMHgwMDQwLCAweDgyZmQsIDB4YTM4YSwgMHgwMDA5LAotCTB4MDA0OCwgMHg4MmY0LCAweDIwMTksIDB4MDAwOCwgMHgwMzdlLCAweDIzMDgsIDB4MjAxOSwgMHhhODk4LAotCTB4YWQ5MCwgMHgwMDE5LCAweDEwNzgsIDB4ODczOSwgMHgwMzdmLCAweGQ2Y2MsIDB4MDA0MCwgMHg4MzIwLAotCTB4NzEyNCwgMHg2OTVhLCAweDgxZmYsIDB4MDA0MCwgMHg4MzIwLCAweGExOTIsIDB4MDAyMSwgMHgwMGM4LAotCTB4ODMxNCwgMHgyMDcxLCAweGE4OTgsIDB4ODMxYywgMHgyMzAwLCAweGFlMTgsIDB4YWQ5MCwgMHgwMDFkLAotCTB4MTA3OCwgMHg4NzM5LCAweDAwNzgsIDB4ODMyMCwgMHg3ODM4LCAweGQwZmMsIDB4MDA0MCwgMHg4MzFkLAotCTB4MjAwOSwgMHgwMDIwLCAweDY5NWEsIDB4MDA3OCwgMHg4MzA5LCAweDJkNzgsIDB4MTA3OCwgMHg4NmQxLAotCTB4ZDZkYywgMHgwMGMwLCAweDgzMjYsIDB4YTAwNiwgMHgwMDc4LCAweDgzMmMsIDB4MjAwMSwgMHgwMDAxLAotCTB4MjA3MSwgMHhhODhjLCAweDcyMTgsIDB4NzMxYywgMHgxMDc4LCAweDE2NDUsIDB4MGQ3ZiwgMHgwZTdmLAotCTB4MGY3ZiwgMHgwNzdmLCAweDAwN2MsIDB4MjAwMSwgMHhhNWEyLCAweDIwMDQsIDB4NjAzZSwgMHgyMGUxLAotCTB4MDAwNSwgMHgzZDE4LCAweDNlMjAsIDB4MmMxMCwgMHgxMDc4LCAweDE1ZWMsIDB4MDA3YywgMHgyMDAxLAotCTB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4MGQ3ZSwgMHg2MDAzLCAweDAwMDIsIDB4NjExMCwgMHgyMTY4LAotCTB4Njk0YywgMHhkMWU0LCAweDAwNDAsIDB4ODQ2YiwgMHg2MDNmLCAweDAwMDAsIDB4MGY3ZSwgMHgyYzc4LAotCTB4MTA3OCwgMHg0ODkzLCAweDBmN2YsIDB4MDA0MCwgMHg4Mzg1LCAweDY4MTQsIDB4NjkxMCwgMHhhMTE1LAotCTB4MDA0MCwgMHg4Mzg1LCAweDZhNjAsIDB4YTIwNiwgMHgwMGMwLCAweDgzNjIsIDB4Njg1YywgMHhhMTA2LAotCTB4MDA0MCwgMHg4Mzg1LCAweDY4NGMsIDB4YzBlNCwgMHg2ODRlLCAweDY4NDcsIDB4MDAwMCwgMHg2ODYzLAotCTB4MDAwMCwgMHg2ODVmLCAweDAwMDAsIDB4NjAyNCwgMHhkMGY0LCAweDAwYzAsIDB4ODM3YSwgMHg2OTdjLAotCTB4NjgxMCwgMHhhMTAyLCAweDYwM2EsIDB4Njk4MCwgMHg2ODE0LCAweGExMDMsIDB4NjAzNiwgMHg2MDI0LAotCTB4YzBmNSwgMHg2MDI2LCAweDBkN2UsIDB4NjAxOCwgMHgyMDY4LCAweDY4M2MsIDB4ODAwMCwgMHg2ODNlLAotCTB4MGQ3ZiwgMHgxMDc4LCAweDhjZmEsIDB4MDA3OCwgMHg4NDZiLCAweDY5NGMsIDB4ZDFjYywgMHgwMDQwLAotCTB4ODQzMCwgMHg2OTQ4LCAweDY4MzgsIDB4ZDBmYywgMHgwMDQwLCAweDgzZWEsIDB4MDE3ZSwgMHg2ODRjLAotCTB4MDA3ZSwgMHg2ODUwLCAweDAwN2UsIDB4MGY3ZSwgMHgyMTc4LCAweDc5NDQsIDB4YTE4NCwgMHgwMGZmLAotCTB4YTBiNiwgMHgwMDAyLCAweDAwNDAsIDB4ODNiZiwgMHhhMDg2LCAweDAwMjgsIDB4MDBjMCwgMHg4M2E2LAotCTB4Njg0YiwgMHgwMDFjLCAweDc4NGIsIDB4MDAxYywgMHgwMDc4LCAweDgzY2EsIDB4ZDFkYywgMHgwMDQwLAotCTB4ODNiNiwgMHg2ODRiLCAweDAwMTUsIDB4Nzg0YiwgMHgwMDE1LCAweDEwNzgsIDB4OGVhNSwgMHgwMDQwLAotCTB4ODNiNCwgMHg3OTQ0LCAweGMxZGMsIDB4Nzk0NiwgMHgwMDc4LCAweDgzY2EsIDB4ZDFkNCwgMHgwMDQwLAotCTB4ODNiZiwgMHg2ODRiLCAweDAwMDcsIDB4Nzg0YiwgMHgwMDA3LCAweDAwNzgsIDB4ODNjYSwgMHg2ODRjLAotCTB4ZDBhYywgMHgwMDQwLCAweDgzY2EsIDB4NjgxMCwgMHg2OTE0LCAweGExMTUsIDB4MDA0MCwgMHg4M2NhLAotCTB4MTA3OCwgMHg4MjMzLCAweDY4NDgsIDB4Nzg0YSwgMHg2ODYwLCAweDc4NjIsIDB4Njg1YywgMHg3ODVlLAotCTB4YWQ5MCwgMHgwMDBkLCAweGFmOTgsIDB4MDAwZCwgMHgyMDA5LCAweDAwMjAsIDB4MTU3ZSwgMHgyMWE4LAotCTB4MjMwNCwgMHgyMDEyLCAweDgzMTgsIDB4ODIxMCwgMHgwMGYwLCAweDgzZDgsIDB4MTU3ZiwgMHgwZjdmLAotCTB4MDA3ZiwgMHg2ODUyLCAweDAwN2YsIDB4Njg0ZSwgMHgwMTdmLCAweDIxNjgsIDB4MTA3OCwgMHgxM2FhLAotCTB4MDA3OCwgMHg4NDY1LCAweDAxN2UsIDB4MGY3ZSwgMHgyMTc4LCAweDc5NDQsIDB4YTE4NCwgMHgwMGZmLAotCTB4YTBiNiwgMHgwMDAyLCAweDAwNDAsIDB4ODQxNywgMHhhMDg2LCAweDAwMjgsIDB4MDBjMCwgMHg4M2ZlLAotCTB4Njg0YiwgMHgwMDFjLCAweDc4NGIsIDB4MDAxYywgMHgwMDc4LCAweDg0MjIsIDB4ZDFkYywgMHgwMDQwLAotCTB4ODQwZSwgMHg2ODRiLCAweDAwMTUsIDB4Nzg0YiwgMHgwMDE1LCAweDEwNzgsIDB4OGVhNSwgMHgwMDQwLAotCTB4ODQwYywgMHg3OTQ0LCAweGMxZGMsIDB4Nzk0NiwgMHgwMDc4LCAweDg0MjIsIDB4ZDFkNCwgMHgwMDQwLAotCTB4ODQxNywgMHg2ODRiLCAweDAwMDcsIDB4Nzg0YiwgMHgwMDA3LCAweDAwNzgsIDB4ODQyMiwgMHg2ODRjLAotCTB4ZDBhYywgMHgwMDQwLCAweDg0MjIsIDB4NjgxMCwgMHg2OTE0LCAweGExMTUsIDB4MDA0MCwgMHg4NDIyLAotCTB4MTA3OCwgMHg4MjMzLCAweDY4NjAsIDB4Nzg2MiwgMHg2ODVjLCAweDc4NWUsIDB4Njg0YywgMHg3ODRlLAotCTB4MGY3ZiwgMHgxMDc4LCAweDEzYWEsIDB4MGQ3ZiwgMHgxMDc4LCAweDg3MjYsIDB4MDA3OCwgMHg4NDY1LAotCTB4NjgzNywgMHgwMTAzLCAweDY5NDQsIDB4YTE4NCwgMHgwMGZmLCAweGEwYjYsIDB4MDAwMiwgMHgwMDQwLAotCTB4ODQ1NiwgMHhhMDg2LCAweDAwMjgsIDB4MDBjMCwgMHg4NDQxLCAweDY4NGIsIDB4MDAxYywgMHgwMDc4LAotCTB4ODQ2MywgMHhkMWRjLCAweDAwNDAsIDB4ODQ0ZiwgMHg2ODRiLCAweDAwMTUsIDB4MTA3OCwgMHg4ZWE1LAotCTB4MDA0MCwgMHg4NDRkLCAweDY5NDQsIDB4YzFkYywgMHg2OTQ2LCAweDAwNzgsIDB4ODQ2MywgMHhkMWQ0LAotCTB4MDA0MCwgMHg4NDU2LCAweDY4NGIsIDB4MDAwNywgMHgwMDc4LCAweDg0NjMsIDB4Njg0YiwgMHgwMDAwLAotCTB4Njg0YywgMHhkMGFjLCAweDAwNDAsIDB4ODQ2MywgMHg2ODEwLCAweDY5MTQsIDB4YTExNSwgMHgwMDQwLAotCTB4ODQ2MywgMHgxMDc4LCAweDgyMzMsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGNjNCwgMHgwMGMwLAotCTB4ODQ2YiwgMHgxMDc4LCAweDc1M2QsIDB4MGQ3ZiwgMHgwMDdjLCAweDEwNzgsIDB4NjAxMCwgMHgwMDc4LAotCTB4ODQ3MywgMHgxMDc4LCAweDYwYjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODQ5MiwgMHgwZDdlLAotCTB4NjExMCwgMHgyMTY4LCAweDY4MzcsIDB4MDEwMywgMHgyMDA5LCAweGEzMGMsIDB4MjEwYywgMHhkMThjLAotCTB4MDBjMCwgMHg4NDlkLCAweGQxODQsIDB4MDBjMCwgMHg4NDk5LCAweDYxMDgsIDB4Njk0YSwgMHhhMThlLAotCTB4MDAyOSwgMHgwMGMwLCAweDg0OGQsIDB4MTA3OCwgMHhhMTgxLCAweDY4NDcsIDB4MDAwMCwgMHgxMDc4LAotCTB4NDk4MiwgMHgwZDdmLCAweDEwNzgsIDB4NzUzZCwgMHgxMDc4LCAweDYxMDksIDB4MTA3OCwgMHg2MWQzLAotCTB4MDA3YywgMHg2ODRiLCAweDAwMDQsIDB4MDA3OCwgMHg4NDhkLCAweDY4NGIsIDB4MDAwNCwgMHgwMDc4LAotCTB4ODQ4ZCwgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg4NGE1LCAweDg0YjgsIDB4ODRiOCwgMHg4NGI4LAotCTB4ODRiOCwgMHg4NGI4LCAweDg0YmEsIDB4ODRiOCwgMHg4NGJkLCAweDg0YjgsIDB4ODRiOCwgMHg4NGI4LAotCTB4ODRiOCwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwgMHg4NGI4LAotCTB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLCAweDAwN2UsIDB4MDI3ZSwgMHhhMDE2LAotCTB4MTA3OCwgMHgxNWVjLCAweDAyN2YsIDB4MDA3ZiwgMHgwMDdjLCAweGExODIsIDB4MDA4NSwgMHgwMDc5LAotCTB4ODRjOSwgMHg4NGQyLCAweDg0ZDAsIDB4ODRkMCwgMHg4NGRlLCAweDg0ZDAsIDB4ODRkMCwgMHg4NGQwLAotCTB4MTA3OCwgMHgxMzI4LCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDEwNzgsIDB4NWJmOCwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NjEwOSwgMHgxMjdmLCAweDAwN2MsIDB4MDI3ZSwgMHgwNTdlLAotCTB4MGQ3ZSwgMHgwZTdlLCAweDIwNzEsIDB4YTg4MCwgMHg3MjI0LCAweDYyMTIsIDB4NzIyMCwgMHgxMDc4LAotCTB4OGEzMCwgMHgwMDQwLCAweDg1MDMsIDB4MjI2OCwgMHg2ODAwLCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLAotCTB4ODUwMywgMHg2MDE4LCAweDZkMTgsIDB4YTUyZSwgMHgwMGMwLCAweDg1MDMsIDB4MGM3ZSwgMHgyZDYwLAotCTB4MTA3OCwgMHg4NzRhLCAweDBjN2YsIDB4MDA0MCwgMHg4NTAzLCAweDY4MDMsIDB4MDAwMiwgMHg2MDA3LAotCTB4MDA4NiwgMHgwMDc4LCAweDg1MDUsIDB4NjAwNywgMHgwMDg3LCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LAotCTB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MGY3ZSwgMHgyMjc4LCAweDEwNzgsIDB4NDg5MywgMHgwZjdmLAotCTB4MDA0MCwgMHg4NTFkLCAweDY4MjQsIDB4ZDBlYywgMHgwMDQwLCAweDg1MWQsIDB4MGM3ZSwgMHgyMjYwLAotCTB4NjAzZiwgMHgwMDAwLCAweDEwNzgsIDB4OGNmYSwgMHgwYzdmLCAweDBlN2YsIDB4MGQ3ZiwgMHgwNTdmLAotCTB4MDI3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxMywgMHgwMGMwLCAweDg1MzMsIDB4NjAwNCwgMHhhMDhhLAotCTB4MDA4NSwgMHgxMDQ4LCAweDEzMjgsIDB4YTA4YSwgMHgwMDhjLCAweDEwYzgsIDB4MTMyOCwgMHhhMDgyLAotCTB4MDA4NSwgMHgwMDc5LCAweDg1NDIsIDB4YTE4NiwgMHgwMDI3LCAweDAwNDAsIDB4ODUzYiwgMHhhMTg2LAotCTB4MDAxNCwgMHgxMGMwLCAweDEzMjgsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4OGMwMSwgMHgxMDc4LAotCTB4NjEwOSwgMHgwMDdjLCAweDg1NDksIDB4ODU0YiwgMHg4NTRiLCAweDg1NDksIDB4ODU0OSwgMHg4NTQ5LAotCTB4ODU0OSwgMHgxMDc4LCAweDEzMjgsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4OGMwMSwgMHgxMDc4LAotCTB4NjEwOSwgMHgwMDdjLCAweGExODYsIDB4MDAxMywgMHgwMGMwLCAweDg1NWMsIDB4NjAwNCwgMHhhMDgyLAotCTB4MDA4NSwgMHgyMDA4LCAweDAwNzgsIDB4ODU5NywgMHhhMTg2LCAweDAwMjcsIDB4MDBjMCwgMHg4NTdmLAotCTB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4MjgxMywgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LAotCTB4OGE0NCwgMHgwMDQwLCAweDg1NzUsIDB4NjgzNywgMHgwMTAzLCAweDY4NDcsIDB4MDAwMCwgMHg2ODRiLAotCTB4MDAyOSwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LCAweDBkN2YsIDB4MTA3OCwgMHg3NTNkLAotCTB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MTA3OCwgMHg3NTgzLCAweDAwNzgsIDB4ODU3YSwgMHhhMTg2LAotCTB4MDAxNCwgMHgwMGMwLCAweDg1N2IsIDB4MTA3OCwgMHg2MDEwLCAweDBkN2UsIDB4NjAxMCwgMHgyMDY4LAotCTB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODU3NSwgMHg2ODM3LCAweDAxMDMsIDB4Njg0NywgMHgwMDAwLAotCTB4Njg0YiwgMHgwMDA2LCAweDY4NTAsIDB4YzBlYywgMHg2ODUyLCAweDAwNzgsIDB4ODU3MSwgMHgwMDc5LAotCTB4ODU5OSwgMHg4NWEyLCAweDg1YTAsIDB4ODVhMCwgMHg4NWEwLCAweDg1YTAsIDB4ODVhMCwgMHg4NWJkLAotCTB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHg2MDMwLCAweGEwOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4YTE4NiwgMHgwMDM5LCAweDAwNDAsIDB4ODViMCwgMHhhMTg2LCAweDAwMzUsIDB4MDBjMCwgMHg4NWI0LAotCTB4MjAwMSwgMHhhNWEwLCAweDAwNzgsIDB4ODViNiwgMHgyMDAxLCAweGE1YTEsIDB4MjAwNCwgMHg2MDE2LAotCTB4NjAwMywgMHgwMDBjLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4NjAxMCwgMHg2MDMwLAotCTB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAwNDAsIDB4ODVjYiwgMHhhMTg2LAotCTB4MDAzNSwgMHgwMGMwLCAweDg1Y2YsIDB4MjAwMSwgMHhhNWEwLCAweDAwNzgsIDB4ODVkMSwgMHgyMDAxLAotCTB4YTVhMSwgMHgyMDA0LCAweDYwMTYsIDB4NjAwMywgMHgwMDBlLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLAotCTB4YTE4MiwgMHgwMDhjLCAweDAwYzgsIDB4ODVlMiwgMHhhMTgyLCAweDAwODUsIDB4MDA0OCwgMHg4NWUyLAotCTB4MDA3OSwgMHg4NWU1LCAweDEwNzgsIDB4NzU4MywgMHgwMDdjLCAweDg1ZWMsIDB4ODVlYywgMHg4NWVjLAotCTB4ODVlYywgMHg4NWVlLCAweDg2NDMsIDB4ODVlYywgMHgxMDc4LCAweDEzMjgsIDB4MGY3ZSwgMHgyYzc4LAotCTB4MTA3OCwgMHg0ODkzLCAweDBmN2YsIDB4MDA0MCwgMHg4NjAxLCAweDYwMzAsIDB4YTA4YywgMHhmZjAwLAotCTB4ODEwZiwgMHhhMTg2LCAweDAwMzksIDB4MDA0MCwgMHg4NjVhLCAweGExODYsIDB4MDAzNSwgMHgwMDQwLAotCTB4ODY1YSwgMHgwZDdlLCAweDEwNzgsIDB4OGJmNCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg4NjI1LAotCTB4NjAxMCwgMHgyMDY4LCAweDY4MzcsIDB4MDEwMywgMHg2ODUwLCAweGQwYjQsIDB4MDA0MCwgMHg4NjE2LAotCTB4Njg0YiwgMHgwMDA2LCAweGMwZWMsIDB4Njg1MiwgMHgwMDc4LCAweDg2MjEsIDB4ZDBiYywgMHgwMDQwLAotCTB4ODYxZCwgMHg2ODRiLCAweDAwMDIsIDB4MDA3OCwgMHg4NjIxLCAweDY4NGIsIDB4MDAwNSwgMHgxMDc4LAotCTB4OGNjMCwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDJjNjgsIDB4MTA3OCwgMHg3NGQ3LAotCTB4MDA0MCwgMHg4NjNlLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMWUsIDB4MjAwOSwgMHhhODhlLAotCTB4MjEwYywgMHg2MTM2LCAweDIwMDksIDB4YTg4ZiwgMHgyMTBjLCAweDYxM2EsIDB4NjkxOCwgMHg2MTFhLAotCTB4NjkyMCwgMHg2MTIyLCAweDYwMWYsIDB4MDAwMSwgMHgxMDc4LCAweDViZjgsIDB4MmQ2MCwgMHgxMDc4LAotCTB4NzUzZCwgMHgwZDdmLCAweDAwN2MsIDB4MGY3ZSwgMHgyYzc4LCAweDEwNzgsIDB4NDg5MywgMHgwZjdmLAotCTB4MDA0MCwgMHg4NjgwLCAweDYwMzAsIDB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM1LAotCTB4MDA0MCwgMHg4NjVhLCAweGExODYsIDB4MDAxZSwgMHgwMDQwLCAweDg2NWEsIDB4YTE4NiwgMHgwMDM5LAotCTB4MDBjMCwgMHg4NjgwLCAweDBkN2UsIDB4MmM2OCwgMHgxMDc4LCAweDhlZjUsIDB4MDBjMCwgMHg4NmE0LAotCTB4MTA3OCwgMHg3NGQ3LCAweDAwNDAsIDB4ODY3ZCwgMHg2MTA2LCAweDYwMDMsIDB4MDAwMSwgMHg2MDFmLAotCTB4MDAwMSwgMHg2OTE4LCAweDYxMWEsIDB4NjkyOCwgMHg2MTJhLCAweDY5MmMsIDB4NjEyZSwgMHg2OTMwLAotCTB4YTE4YywgMHgwMGZmLCAweDYxMzIsIDB4NjkzNCwgMHg2MTM2LCAweDY5MzgsIDB4NjEzYSwgMHg2OTIwLAotCTB4NjEyMiwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDJkNjAsIDB4MDA3OCwgMHg4NmE0LAotCTB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODZhNCwgMHg2ODM3LAotCTB4MDEwMywgMHg2ODUwLCAweGQwYjQsIDB4MDA0MCwgMHg4NjkzLCAweGMwZWMsIDB4Njg1MiwgMHg2ODRiLAotCTB4MDAwNiwgMHgwMDc4LCAweDg2OWUsIDB4ZDBiYywgMHgwMDQwLCAweDg2OWEsIDB4Njg0YiwgMHgwMDAyLAotCTB4MDA3OCwgMHg4NjllLCAweDY4NGIsIDB4MDAwNSwgMHgxMDc4LCAweDhjYzAsIDB4Njg0NywgMHgwMDAwLAotCTB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgwZDdmLCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLAotCTB4MDE3ZSwgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg4NmI4LAotCTB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAyOCwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHg0OTgyLAotCTB4MGQ3ZiwgMHgwMTdmLCAweGExODYsIDB4MDAxMywgMHgwMDQwLCAweDg2Y2EsIDB4YTE4NiwgMHgwMDE0LAotCTB4MDA0MCwgMHg4NmNhLCAweGExODYsIDB4MDAyNywgMHgwMDQwLCAweDg2Y2EsIDB4MTA3OCwgMHg3NTgzLAotCTB4MDA3OCwgMHg4NmQwLCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwgMHg2MTA5LAotCTB4MDA3YywgMHgwNTdlLCAweDA2N2UsIDB4MGQ3ZSwgMHgwZjdlLCAweDIwMjksIDB4MDAwMSwgMHhhMTgyLAotCTB4MDEwMSwgMHgwMGM4LCAweDg2ZGQsIDB4MDA3OCwgMHg4NmRmLCAweDIwMDksIDB4MDEwMCwgMHgyMTMwLAotCTB4MjA2OSwgMHhhODk4LCAweDgzMWMsIDB4MjMwMCwgMHhhZDE4LCAweDIwMDksIDB4MDAyMCwgMHhhZjkwLAotCTB4MDAxZCwgMHgxMDc4LCAweDg3MzksIDB4YTZiMiwgMHgwMDIwLCAweDc4MDQsIDB4YTA2ZCwgMHgwMDQwLAotCTB4ODZmMywgMHgxMDc4LCAweDEzYWEsIDB4MTA3OCwgMHgxMzgxLCAweDAwNDAsIDB4ODcxZCwgMHg4NTI4LAotCTB4NjgzNywgMHgwMTEwLCAweDY4M2IsIDB4MDAwMCwgMHgyZDIwLCAweDdjMDYsIDB4YTY4YSwgMHgwMDNkLAotCTB4MDBjOCwgMHg4NzA5LCAweDI2MDgsIDB4YWQ5MCwgMHgwMDBmLCAweDEwNzgsIDB4ODczOSwgMHgwMDc4LAotCTB4ODcxZCwgMHhhNmIyLCAweDAwM2MsIDB4MjAwOSwgMHgwMDNjLCAweDJkNzgsIDB4YWQ5MCwgMHgwMDBmLAotCTB4MTA3OCwgMHg4NzM5LCAweDAwNzgsIDB4ODZmMywgMHgwZjdmLCAweDg1MmYsIDB4YTVhZCwgMHgwMDAzLAotCTB4N2QzNiwgMHhhNWFjLCAweDAwMDAsIDB4MDA3OCwgMHg4NzIyLCAweDBmN2YsIDB4ODUyZiwgMHhhNWFkLAotCTB4MDAwMywgMHg3ZDM2LCAweDBkN2YsIDB4MDY3ZiwgMHgwNTdmLCAweDAwN2MsIDB4MGY3ZSwgMHg4ZGZmLAotCTB4MDA0MCwgMHg4NzM3LCAweDY4MDQsIDB4YTA3ZCwgMHgwMDQwLCAweDg3MzUsIDB4NjgwNywgMHgwMDAwLAotCTB4MTA3OCwgMHg0OTgyLCAweDJmNjgsIDB4MDA3OCwgMHg4NzJhLCAweDEwNzgsIDB4NDk4MiwgMHgwZjdmLAotCTB4MDA3YywgMHgxNTdlLCAweGExODQsIDB4MDAwMSwgMHgwMDQwLCAweDg3M2YsIDB4ODEwOCwgMHg4MTBjLAotCTB4MjFhOCwgMHgyMzA0LCAweDgwMDcsIDB4MjAxMiwgMHg4MzE4LCAweDgyMTAsIDB4MDBmMCwgMHg4NzQxLAotCTB4MTU3ZiwgMHgwMDdjLCAweDA2N2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAzMSwgMHgwMDAxLAotCTB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MTA3OSwgMHg4NzY2LCAweDEyN2YsIDB4MDY3ZiwgMHgwMDdjLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDY3ZSwgMHgyMDMxLCAweDAwMDAsIDB4NjAxYywgMHhhMDg0LAotCTB4MDAwZiwgMHgxMDc5LCAweDg3NjYsIDB4MDY3ZiwgMHgxMjdmLCAweDAwN2MsIDB4ODc4MCwgMHg4NzZlLAotCTB4ODc3YiwgMHg4NzljLCAweDg3NmUsIDB4ODc3YiwgMHg4NzljLCAweDg3N2IsIDB4MTA3OCwgMHgxMzI4LAotCTB4MDM3ZSwgMHgyMDE5LCAweDAwMTAsIDB4MTA3OCwgMHg5YTZhLCAweDYwMWYsIDB4MDAwNiwgMHg2MDAzLAotCTB4MDAwNywgMHgwMzdmLCAweDAwN2MsIDB4YTAwNiwgMHgwMDdjLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLAotCTB4MGQ3ZSwgMHg4NmZmLCAweDAwYzAsIDB4ODc5NywgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LAotCTB4MDA0MCwgMHg4Nzk5LCAweGEwMGUsIDB4MjAwMSwgMHgwMDA1LCAweDEwNzgsIDB4NGE2MCwgMHgxMDc4LAotCTB4OGNjMCwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwgMHg3NTNkLCAweGEwODUsIDB4MDAwMSwgMHgwZDdmLAotCTB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4ODc5NywgMHg2MDAwLCAweGEwOGEsIDB4MDAxMCwgMHgxMGM4LAotCTB4MTMyOCwgMHgxMDc5LCAweDg3YTQsIDB4MDA3YywgMHg4N2I0LCAweDg3ZDQsIDB4ODdiNiwgMHg4N2Y3LAotCTB4ODdkMCwgMHg4N2I0LCAweDg3N2IsIDB4ODc4MCwgMHg4NzgwLCAweDg3N2IsIDB4ODc3YiwgMHg4NzdiLAotCTB4ODc3YiwgMHg4NzdiLCAweDg3N2IsIDB4ODc3YiwgMHgxMDc4LCAweDEzMjgsIDB4ODZmZiwgMHgwMGMwLAotCTB4ODdjZCwgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg4N2MyLAotCTB4MTA3OCwgMHg4Y2MwLCAweDBkN2YsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLAotCTB4MDAwMiwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLAotCTB4MTA3OCwgMHgxNzQ5LCAweDAwNzgsIDB4ODdiNiwgMHgwZTdlLCAweDIwNzEsIDB4YTVhYiwgMHg3MDI0LAotCTB4YWMwNiwgMHgwMGMwLCAweDg3ZGQsIDB4MTA3OCwgMHg2ZGRhLCAweDYwMWMsIDB4YTA4NCwgMHgwMDBmLAotCTB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4ODdlZiwgMHgwODdlLCAweDA5N2UsIDB4MjA0OSwgMHgwMDAxLAotCTB4MmM0MCwgMHgxMDc4LCAweDcwNTgsIDB4MDk3ZiwgMHgwODdmLCAweDAwNzgsIDB4ODdmMSwgMHgxMDc4LAotCTB4NmNkMiwgMHgwZTdmLCAweDAwYzAsIDB4ODdiNiwgMHgxMDc4LCAweDg3N2IsIDB4MDA3YywgMHgwMzdlLAotCTB4MGU3ZSwgMHgyMDcxLCAweGE1YWIsIDB4NzAzYywgMHhhYzA2LCAweDAwYzAsIDB4ODgwNywgMHgyMDE5LAotCTB4MDAwMCwgMHgxMDc4LCAweDZlNmMsIDB4MGU3ZiwgMHgwMzdmLCAweDAwNzgsIDB4ODdiNiwgMHgxMDc4LAotCTB4NzE5YSwgMHgwZTdmLCAweDAzN2YsIDB4MDBjMCwgMHg4N2I2LCAweDEwNzgsIDB4ODc3YiwgMHgwMDdjLAotCTB4MGM3ZSwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgxMDc5LCAweDg4MTgsIDB4MGM3ZiwgMHgwMDdjLAotCTB4ODgyNywgMHg4ODk1LCAweDg5Y2QsIDB4ODgzMiwgMHg4YzAxLCAweDg4MjcsIDB4OWE1YiwgMHg3NTNkLAotCTB4ODg5NSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg4ODI3LCAweDEwNzgsIDB4N2EwNSwgMHgwMDdjLAotCTB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NjEwOSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHg2MDE3LAotCTB4MDAwMSwgMHgwMDdjLCAweDYwMTAsIDB4YTA4MCwgMHgwMDE5LCAweDJjMDIsIDB4NjAwMCwgMHhhMDhhLAotCTB4MDAxMCwgMHgxMGM4LCAweDEzMjgsIDB4MTA3OSwgMHg4ODNlLCAweDAwN2MsIDB4ODg0ZSwgMHg4ODUwLAotCTB4ODg3MiwgMHg4ODg0LCAweDg4OTEsIDB4ODg0ZSwgMHg4ODI3LCAweDg4MjcsIDB4ODgyNywgMHg4ODg0LAotCTB4ODg4NCwgMHg4ODRlLCAweDg4NGUsIDB4ODg0ZSwgMHg4ODRlLCAweDg4OGUsIDB4MTA3OCwgMHgxMzI4LAotCTB4MGU3ZSwgMHg2MDEwLCAweDIwNzAsIDB4NzA1MCwgMHhjMGI1LCAweDcwNTIsIDB4MjA3MSwgMHhhNWFiLAotCTB4NzAyNCwgMHhhYzA2LCAweDAwNDAsIDB4ODg2ZSwgMHgxMDc4LCAweDZjZDIsIDB4NjAwNywgMHgwMDg1LAotCTB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHgyMDAxLCAweGE1YTEsIDB4MjAwNCwgMHg2MDE2LAotCTB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwZTdmLCAweDAwN2MsIDB4NjAxNywgMHgwMDAxLAotCTB4MDA3OCwgMHg4ODZjLCAweDBkN2UsIDB4NjAxMCwgMHgyMDY4LCAweDY4NTAsIDB4YzBiNSwgMHg2ODUyLAotCTB4MGQ3ZiwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHgxMDc4LAotCTB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgwZDdlLCAweDYwMTcsIDB4MDAwMSwgMHg2MDEwLAotCTB4MjA2OCwgMHg2ODUwLCAweGMwYjUsIDB4Njg1MiwgMHgwZDdmLCAweDAwN2MsIDB4MTA3OCwgMHg3NTNkLAotCTB4MDA3YywgMHgxMDc4LCAweDE3NDksIDB4MDA3OCwgMHg4ODcyLCAweDYwMDAsIDB4YTA4YSwgMHgwMDEwLAotCTB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4ODg5ZCwgMHgwMDdjLCAweDg4YWQsIDB4ODgyZiwgMHg4OGFmLAotCTB4ODhhZCwgMHg4OGFmLCAweDg4YWYsIDB4ODgyOCwgMHg4OGFkLCAweDg4MjEsIDB4ODgyMSwgMHg4OGFkLAotCTB4ODhhZCwgMHg4OGFkLCAweDg4YWQsIDB4ODhhZCwgMHg4OGFkLCAweDEwNzgsIDB4MTMyOCwgMHgwZDdlLAotCTB4NjAxOCwgMHgyMDY4LCAweDY4MDQsIDB4YTA4NCwgMHgwMGZmLCAweDBkN2YsIDB4YTA4YSwgMHgwMDBjLAotCTB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4ODhiZCwgMHgwMDdjLCAweDg4YzksIDB4ODk3MSwgMHg4OGNiLAotCTB4ODkwYiwgMHg4OGNiLCAweDg5MGIsIDB4ODhjYiwgMHg4OGQ4LCAweDg4YzksIDB4ODkwYiwgMHg4OGM5LAotCTB4ODhmNSwgMHgxMDc4LCAweDEzMjgsIDB4NjAwNCwgMHhhMDhlLCAweDAwMTYsIDB4MDA0MCwgMHg4OTA2LAotCTB4YTA4ZSwgMHgwMDA0LCAweDAwNDAsIDB4ODkwNiwgMHhhMDhlLCAweDAwMDIsIDB4MDA0MCwgMHg4OTA2LAotCTB4NjAwNCwgMHgxMDc4LCAweDhjM2IsIDB4MDA0MCwgMHg4OThjLCAweGEwOGUsIDB4MDAyMSwgMHgwMDQwLAotCTB4ODk5MCwgMHhhMDhlLCAweDAwMjIsIDB4MDA0MCwgMHg4OThjLCAweGEwOGUsIDB4MDAzZCwgMHgwMDQwLAotCTB4ODk5MCwgMHhhMDhlLCAweDAwMzksIDB4MDA0MCwgMHg4OTk0LCAweGEwOGUsIDB4MDAzNSwgMHgwMDQwLAotCTB4ODk5NCwgMHhhMDhlLCAweDAwMWUsIDB4MDA0MCwgMHg4OTA4LCAweGEwOGUsIDB4MDAwMSwgMHgwMGMwLAotCTB4ODkwNCwgMHgwZDdlLCAweDYwMTgsIDB4MjA2OCwgMHg2ODA0LCAweGEwODQsIDB4MDBmZiwgMHgwZDdmLAotCTB4YTA4NiwgMHgwMDA2LCAweDAwNDAsIDB4ODkwNiwgMHgxMDc4LCAweDI4MTMsIDB4MTA3OCwgMHg3YTA1LAotCTB4MTA3OCwgMHg4YzAxLCAweDAwN2MsIDB4MGM3ZSwgMHgwZDdlLCAweDYxMDQsIDB4YTE4NiwgMHgwMDE2LAotCTB4MDA0MCwgMHg4OTYxLCAweGExODYsIDB4MDAwMiwgMHgwMGMwLCAweDg5MzQsIDB4NjAxOCwgMHgyMDY4LAotCTB4NjhhMCwgMHhkMGJjLCAweDAwYzAsIDB4ODliOCwgMHg2ODQwLCAweGEwODQsIDB4MDBmZiwgMHhhMDA1LAotCTB4MDA0MCwgMHg4OTM0LCAweDgwMDEsIDB4Njg0MiwgMHg2MDEzLCAweDAwMDAsIDB4NjAxZiwgMHgwMDA3LAotCTB4NjAxNywgMHgwMzk4LCAweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDg5MzQsIDB4MmQwMCwgMHg2MDFhLAotCTB4NjAxZiwgMHgwMDAxLCAweDAwNzgsIDB4ODk2MSwgMHgwZDdmLCAweDBjN2YsIDB4NjAwNCwgMHhhMDhlLAotCTB4MDAwMiwgMHgwMGMwLCAweDg5NTIsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDg2LAotCTB4MDA3ZSwgMHgwMGMwLCAweDg5NTIsIDB4MjAwOSwgMHhhMzMyLCAweDIxMDQsIDB4YzA4NSwgMHgyMDBhLAotCTB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4MTA3OCwgMHg0MWY1LCAweDBlN2YsIDB4MTA3OCwgMHg3YTA1LAotCTB4MDA3OCwgMHg4OTU2LCAweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDI4MTMsIDB4MGU3ZSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4MjgzOSwgMHgxMjdmLCAweDBlN2YsIDB4MTA3OCwgMHg4YzAxLAotCTB4MDA3YywgMHgyMDAxLCAweDAwMDIsIDB4MTA3OCwgMHg0NDNmLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDAwMiwgMHgxMDc4LCAweDVjNDUsIDB4MTA3OCwgMHg2MTA5LCAweDBkN2YsIDB4MGM3ZiwgMHgwMDc4LAotCTB4ODk2MCwgMHgwYzdlLCAweDBkN2UsIDB4NjEwNCwgMHhhMTg2LCAweDAwMTYsIDB4MDA0MCwgMHg4OTYxLAotCTB4NjAxOCwgMHgyMDY4LCAweDY4NDAsIDB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDA0MCwgMHg4OTM0LAotCTB4ODAwMSwgMHg2ODQyLCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MTA3OCwgMHg2MTA5LAotCTB4MGQ3ZiwgMHgwYzdmLCAweDAwNzgsIDB4ODk2MCwgMHgxMDc4LCAweDdhMDUsIDB4MDA3OCwgMHg4OTA4LAotCTB4MTA3OCwgMHg3YTI4LCAweDAwNzgsIDB4ODkwOCwgMHgwZDdlLCAweDJjNjgsIDB4NjEwNCwgMHgxMDc4LAotCTB4OGVmNSwgMHgwZDdmLCAweDAwNDAsIDB4ODlhMCwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwgMHg4OWI3LAotCTB4NjAwNCwgMHg4MDA3LCAweDYxMzAsIDB4YTE4YywgMHgwMGZmLCAweGExMDUsIDB4NjAzMiwgMHg2MDA3LAotCTB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwgMHgwMDAyLCAweDYwMzgsIDB4NjAwYSwgMHgyMDAxLAotCTB4YTVhMSwgMHgyMDA0LCAweDYwMTYsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLAotCTB4MGQ3ZiwgMHgwYzdmLCAweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDI4MTMsIDB4MGU3ZSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4MjgzOSwgMHg2MDEzLCAweDAwMDAsIDB4NjAxZiwgMHgwMDA3LAotCTB4NjAxNywgMHgwMzk4LCAweDEyN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDYwMDAsIDB4YTA4YSwgMHgwMDEwLAotCTB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4ODlkNSwgMHgwMDdjLCAweDg5ZTUsIDB4ODllNSwgMHg4OWU1LAotCTB4ODllNSwgMHg4OWU1LCAweDg5ZTUsIDB4ODllNSwgMHg4OWU1LCAweDg5ZTUsIDB4ODgyNywgMHg4OWU1LAotCTB4ODgyZiwgMHg4OWU3LCAweDg4MmYsIDB4ODlmNSwgMHg4OWU1LCAweDEwNzgsIDB4MTMyOCwgMHg2MDA0LAotCTB4YTA4NiwgMHgwMDhiLCAweDAwNDAsIDB4ODlmNSwgMHg2MDA3LCAweDAwOGIsIDB4NjAwMywgMHgwMDBkLAotCTB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4OGJmNCwgMHgxMDc4LAotCTB4OGE0NCwgMHgwMDQwLCAweDhhMmQsIDB4MTA3OCwgMHgyODEzLCAweDBkN2UsIDB4MTA3OCwgMHg4YTQ0LAotCTB4MDA0MCwgMHg4YTBmLCAweDYwMTAsIDB4MjA2OCwgMHg2ODM3LCAweDAxMDMsIDB4Njg0YiwgMHgwMDA2LAotCTB4Njg0NywgMHgwMDAwLCAweDY4NTAsIDB4YzBlZCwgMHg2ODUyLCAweDEwNzgsIDB4NDk4MiwgMHgyYzY4LAotCTB4MTA3OCwgMHg3NGQ3LCAweDAwNDAsIDB4OGExZCwgMHg2ODE4LCAweDYwMWEsIDB4MGM3ZSwgMHgyZDYwLAotCTB4MTA3OCwgMHg4YzAxLCAweDBjN2YsIDB4MDA3OCwgMHg4YTFlLCAweDJkNjAsIDB4MGQ3ZiwgMHg2MDEzLAotCTB4MDAwMCwgMHg2MDFmLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LAotCTB4NWM0NSwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg4YTJmLCAweDEwNzgsIDB4OGMwMSwgMHgwMDdjLAotCTB4YTI4NCwgMHgwMDBmLCAweDAwYzAsIDB4OGE0MSwgMHhhMjgyLCAweGFhMDAsIDB4MDA0OCwgMHg4YTQxLAotCTB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YTIwMiwgMHgwMGM4LCAweDhhNDEsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4OGE0MCwgMHgwMjdlLCAweDBlN2UsIDB4MjA3MSwgMHhhMzAwLAotCTB4NjIxMCwgMHg3MDU4LCAweGEyMDIsIDB4MDA0OCwgMHg4YTU2LCAweDcwNWMsIDB4YTIwMiwgMHgwMGM4LAotCTB4OGE1NiwgMHhhMDg1LCAweDAwMDEsIDB4MGU3ZiwgMHgwMjdmLCAweDAwN2MsIDB4YTAwNiwgMHgwMDc4LAotCTB4OGE1MywgMHgwZTdlLCAweDBjN2UsIDB4MDM3ZSwgMHgwMDdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA2MSwgMHhhYTAwLCAweDIwNzEsIDB4YTMwMCwgMHg3MzQ0LCAweDcwNjAsIDB4YTMwMiwgMHgwMGM4LAotCTB4OGE4MywgMHg2MDFjLCAweGEyMDYsIDB4MDBjMCwgMHg4YTdiLCAweDEwNzgsIDB4OGQ2NiwgMHgwMDQwLAotCTB4OGE3YiwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg4YTc3LCAweDEwNzgsIDB4N2EwNSwgMHgwYzdlLAotCTB4MTA3OCwgMHg3NTNkLCAweDBjN2YsIDB4YWNlMCwgMHgwMDEwLCAweDcwNTQsIDB4YWMwMiwgMHgwMGM4LAotCTB4OGE4MywgMHgwMDc4LCAweDhhNjQsIDB4MTI3ZiwgMHgwMDdmLCAweDAzN2YsIDB4MGM3ZiwgMHgwZTdmLAotCTB4MDA3YywgMHgwZTdlLCAweDBjN2UsIDB4MDE3ZSwgMHhhMTg4LCAweGE0MzQsIDB4MjEwYywgMHg4MWZmLAotCTB4MDA0MCwgMHg4YWExLCAweDIwNjEsIDB4YWEwMCwgMHgyMDcxLCAweGEzMDAsIDB4MDE3ZSwgMHgxMDc4LAotCTB4NzRkNywgMHgwMTdmLCAweDAwNDAsIDB4OGFhNCwgMHg2MTFhLCAweDEwNzgsIDB4MjgxMywgMHgxMDc4LAotCTB4NzUzZCwgMHhhMDA2LCAweDAwNzgsIDB4OGFhNiwgMHhhMDg1LCAweDAwMDEsIDB4MDE3ZiwgMHgwYzdmLAotCTB4MGU3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MDU3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwYzdlLAotCTB4MTA3OCwgMHg3NGQ3LCAweDA1N2YsIDB4MDA0MCwgMHg4YWMzLCAweDY2MTIsIDB4NjUxYSwgMHg2MDFmLAotCTB4MDAwMywgMHgyMDA5LCAweDAwNGIsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLAotCTB4MDU3ZiwgMHgwYzdmLCAweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDhhYmYsIDB4MGM3ZSwgMHgwNTdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjJhMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwNTdmLAotCTB4MDA0MCwgMHg4YWYxLCAweDYwMTMsIDB4MDAwMCwgMHg2NTFhLCAweDYwMWYsIDB4MDAwMywgMHgwYzdlLAotCTB4MjU2MCwgMHgxMDc4LCAweDQ3MWIsIDB4MGM3ZiwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwgMHgyMDM5LAotCTB4MDAwMCwgMHgxMDc4LCAweDVjNzgsIDB4MmMwOCwgMHgxMDc4LCAweDljMzgsIDB4MDc3ZiwgMHgyMDA5LAotCTB4MDA0YywgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MDU3ZiwgMHgwYzdmLAotCTB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4OGFlZCwgMHgwZjdlLCAweDBjN2UsIDB4MDQ3ZSwgMHgwYzdlLAotCTB4MTA3OCwgMHg3NGQ3LCAweDJjNzgsIDB4MGM3ZiwgMHgwMDQwLCAweDhiMGUsIDB4N2UxMiwgMHgyYzAwLAotCTB4NzgxYSwgMHg3ODFmLCAweDAwMDMsIDB4MjAyMSwgMHgwMDA1LCAweDEwNzgsIDB4OGI0ZSwgMHgyZjYwLAotCTB4MjAwOSwgMHgwMDRkLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MDQ3ZiwgMHgwYzdmLAotCTB4MGY3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGM3ZSwgMHgwNDdlLCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LAotCTB4MmM3OCwgMHgwYzdmLCAweDAwNDAsIDB4OGIyYywgMHg3ZTEyLCAweDJjMDAsIDB4NzgxYSwgMHg3ODFmLAotCTB4MDAwMywgMHgyMDIxLCAweDAwMDUsIDB4MTA3OCwgMHg4YjRlLCAweDJmNjAsIDB4MjAwOSwgMHgwMDRlLAotCTB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgwNDdmLCAweDBjN2YsIDB4MGY3ZiwgMHgwMDdjLAotCTB4MGY3ZSwgMHgwYzdlLCAweDA0N2UsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MmM3OCwgMHgwYzdmLAotCTB4MDA0MCwgMHg4YjRhLCAweDdlMTIsIDB4MmMwMCwgMHg3ODFhLCAweDc4MWYsIDB4MDAwMywgMHgyMDIxLAotCTB4MDAwNCwgMHgxMDc4LCAweDhiNGUsIDB4MmY2MCwgMHgyMDA5LCAweDAwNTIsIDB4MTA3OCwgMHg3NTZjLAotCTB4YTA4NSwgMHgwMDAxLCAweDA0N2YsIDB4MGM3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MDk3ZSwgMHgwNzdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg0NmE3LCAweDAwNDAsIDB4OGI1YiwgMHgyMDAxLAotCTB4OGI1MywgMHgwMDc4LCAweDhiNjEsIDB4MTA3OCwgMHg0NjZkLCAweDAwNDAsIDB4OGI2YSwgMHgyMDAxLAotCTB4OGI1YiwgMHgwMDdlLCAweGEwMGUsIDB4MjQwMCwgMHgxMDc4LCAweDRhNjAsIDB4MTA3OCwgMHg0OTgyLAotCTB4MDA3ZiwgMHgwMDdhLCAweDI0MTgsIDB4MTA3OCwgMHg1ZmE3LCAweDYyYTAsIDB4MDg3ZSwgMHgyMDQxLAotCTB4MDAwMSwgMHgyMDM5LCAweDAwMDEsIDB4MjYwOCwgMHgxMDc4LCAweDVkNmQsIDB4MDg3ZiwgMHgxMDc4LAotCTB4NWM3OCwgMHgyZjA4LCAweDI2NDgsIDB4MTA3OCwgMHg5YzM4LCAweDYxM2MsIDB4ODFmZiwgMHgxMDQwLAotCTB4NWUyMSwgMHgxMjdmLCAweDA3N2YsIDB4MDk3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwMTdmLCAweDAwNDAsIDB4OGI5ZSwgMHg2NjBhLAotCTB4NjExYSwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAxZiwgMHgxMDc4LAotCTB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwYzdmLCAweDAwN2MsIDB4YTAwNiwgMHgwMDc4LAotCTB4OGI5YiwgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LAotCTB4MDE3ZiwgMHgwMDQwLCAweDhiYmEsIDB4NjYwYSwgMHg2MTFhLCAweDYwMWYsIDB4MDAwOCwgMHgyZDAwLAotCTB4NjAxMiwgMHgyMDA5LCAweDAwMjEsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLAotCTB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwgMHg4YmI3LCAweDBjN2UsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwMTdmLCAweDAwNDAsIDB4OGJkNiwgMHg2NjBhLAotCTB4NjExYSwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzZCwgMHgxMDc4LAotCTB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwYzdmLCAweDAwN2MsIDB4YTAwNiwgMHgwMDc4LAotCTB4OGJkMywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LAotCTB4MDE3ZiwgMHgwMDQwLCAweDhiZjEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLAotCTB4MjAwOSwgMHgwMDAwLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwYzdmLAotCTB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4OGJlZSwgMHgwMjdlLCAweDBkN2UsIDB4NjIxOCwgMHgyMjY4LAotCTB4NmEzYywgMHg4MmZmLCAweDAwNDAsIDB4OGJmZSwgMHg4MjExLCAweDZhM2UsIDB4MGQ3ZiwgMHgwMjdmLAotCTB4MDA3YywgMHgwMDdlLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4OGMxMywgMHg2MDEzLAotCTB4MDAwMCwgMHg2MDFmLCAweDAwMDcsIDB4MjAwMSwgMHhhNWExLCAweDIwMDQsIDB4NjAxNiwgMHgxMDc4LAotCTB4YTEzNCwgMHg2MDNmLCAweDAwMDAsIDB4MDA3ZiwgMHgwMDdjLCAweDA2N2UsIDB4MGM3ZSwgMHgwZDdlLAotCTB4MjAzMSwgMHhhMzUyLCAweDI2MzQsIDB4ZDZlNCwgMHgwMDQwLCAweDhjMjMsIDB4NjYxOCwgMHgyNjYwLAotCTB4NmU0OCwgMHgxMDc4LCAweDQ2MWIsIDB4MGQ3ZiwgMHgwYzdmLCAweDA2N2YsIDB4MDA3YywgMHgwMDdlLAotCTB4MDE3ZSwgMHg2MDA0LCAweGEwOGUsIDB4MDAwMiwgMHgwMDQwLCAweDhjMzgsIDB4YTA4ZSwgMHgwMDAzLAotCTB4MDA0MCwgMHg4YzM4LCAweGEwOGUsIDB4MDAwNCwgMHgwMDQwLCAweDhjMzgsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDE3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MDA3ZSwgMHgwZDdlLCAweDYwMTAsIDB4YTA2ZCwgMHgwMDQwLAotCTB4OGM0OCwgMHg2ODM4LCAweGQwZmMsIDB4MDA0MCwgMHg4YzQ4LCAweGEwMDYsIDB4MDA3OCwgMHg4YzRhLAotCTB4YTA4NSwgMHgwMDAxLCAweDBkN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwMTdmLCAweDAwNDAsIDB4OGM2NywgMHg2MTFhLAotCTB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgxMDc4LCAweDI4MTMsIDB4MjAwOSwgMHgwMDI4LAotCTB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDBjN2YsIDB4MDA3YywgMHhhMDA2LAotCTB4MDA3OCwgMHg4YzY0LCAweGExODYsIDB4MDAxNSwgMHgwMGMwLCAweDhjN2YsIDB4MjAxMSwgMHhhMzFmLAotCTB4MjIwNCwgMHhhMDg2LCAweDAwNzQsIDB4MDBjMCwgMHg4YzdmLCAweDEwNzgsIDB4N2QwZCwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMjksIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4OGM4MywgMHgxMDc4LAotCTB4N2EwNSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHhhMTg2LCAweDAwMTYsIDB4MDBjMCwgMHg4YzhlLAotCTB4MjAwMSwgMHgwMDA0LCAweDEwNzgsIDB4NDQzZiwgMHgwMDc4LCAweDhjYWYsIDB4YTE4NiwgMHgwMDE1LAotCTB4MDBjMCwgMHg4Y2IzLCAweDIwMTEsIDB4YTMxZiwgMHgyMjA0LCAweGEwODYsIDB4MDAxNCwgMHgwMGMwLAotCTB4OGNiMywgMHgwZDdlLCAweDYwMTgsIDB4MjA2OCwgMHgxMDc4LCAweDQ1N2QsIDB4MGQ3ZiwgMHgxMDc4LAotCTB4N2RiYSwgMHgwMGMwLCAweDhjYjMsIDB4MGQ3ZSwgMHg2MDE4LCAweDIwNjgsIDB4Njg5MCwgMHgwZDdmLAotCTB4YTAwNSwgMHgwMDQwLCAweDhjYjMsIDB4MjAwMSwgMHgwMDA2LCAweDEwNzgsIDB4NDQzZiwgMHgxMDc4LAotCTB4NzYwOCwgMHgwMDc4LCAweDhjYjcsIDB4MTA3OCwgMHg3YTA1LCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLAotCTB4Njg0OCwgMHhhMDg2LCAweDAwMDUsIDB4MDBjMCwgMHg4Y2JmLCAweDEwNzgsIDB4OGNjMCwgMHgwMDdjLAotCTB4Njg1MCwgMHhjMGFkLCAweDY4NTIsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTg4YywgMHg3MDE0LAotCTB4ZDBlNCwgMHgwMDQwLCAweDhjZDUsIDB4NjAxMywgMHgwMDAwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDA1MCwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDBlN2YsIDB4MDA3YywgMHgwYzdlLAotCTB4MGY3ZSwgMHgyYzc4LCAweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4OGNlNCwgMHg2MDFjLAotCTB4YTA4NCwgMHgwMDBmLCAweDEwNzksIDB4OGNlNiwgMHgwYzdmLCAweDAwN2MsIDB4ODgyNywgMHg4Y2YxLAotCTB4OGNmNCwgMHg4Y2Y3LCAweDlmMDAsIDB4OWYxYywgMHg5ZjFmLCAweDg4MjcsIDB4ODgyNywgMHgxMDc4LAotCTB4MTMyOCwgMHgwMDA1LCAweDAwMDUsIDB4MDA3YywgMHgwMDA1LCAweDAwMDUsIDB4MDA3YywgMHgxMDc4LAotCTB4OGNmYSwgMHgwMDdjLCAweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MDA0MCwgMHg4ZDI5LAotCTB4MTA3OCwgMHg3NGQ3LCAweDAwYzAsIDB4OGQwYSwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg3ODNlLAotCTB4MDA3OCwgMHg4ZDI5LCAweDc4MTgsIDB4NjAxYSwgMHg3ODFjLCAweGEwODYsIDB4MDAwMywgMHgwMDQwLAotCTB4OGQxNywgMHg3ODA4LCAweDYwMzYsIDB4MmYwMCwgMHg2MDNhLCAweDAwNzgsIDB4OGQxYiwgMHg3ODA4LAotCTB4NjAzYSwgMHgyZjAwLCAweDYwMzYsIDB4NjAyYSwgMHg2MDFmLCAweDAwMDEsIDB4NjAwNywgMHgwMDM1LAotCTB4NjAwMywgMHgwMDAxLCAweDc5MjAsIDB4NjEyMiwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LAotCTB4MmY2MCwgMHgwZjdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwZjdlLCAweDY4MmMsIDB4NjAzMiwgMHhhMDhlLAotCTB4MDAwMSwgMHgwMDQwLCAweDhkM2MsIDB4YTA4NiwgMHgwMDA1LCAweDAwNDAsIDB4OGQ0MCwgMHhhMDA2LAotCTB4NjAyYSwgMHg2MDJlLCAweDAwNzgsIDB4OGQ1MSwgMHg2ODI0LCAweGMwZjQsIDB4YzBkNSwgMHg2ODI2LAotCTB4NjgxMCwgMHgyMDc4LCAweDc4N2MsIDB4NjkzOCwgMHhhMTAyLCAweDc4ODAsIDB4NjkzNCwgMHhhMTAzLAotCTB4MDBjOCwgMHg4ZDM3LCAweDY4MzQsIDB4NjAyYSwgMHg2ODM4LCAweGEwODQsIDB4ZmZmYywgMHg2ODNhLAotCTB4NjAyZSwgMHgyZDAwLCAweDYwMzYsIDB4NjgwOCwgMHg2MDNhLCAweDY5MTgsIDB4NjExYSwgMHg2OTIwLAotCTB4NjEyMiwgMHg2MDFmLCAweDAwMDEsIDB4NjAwNywgMHgwMDM5LCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LAotCTB4NWJmOCwgMHg2ODAzLCAweDAwMDIsIDB4MGY3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MDA3ZSwgMHgwMTdlLAotCTB4NjAwNCwgMHhhMDhlLCAweDAwMzQsIDB4MDA0MCwgMHg4ZDhiLCAweGEwOGUsIDB4MDAzNSwgMHgwMDQwLAotCTB4OGQ4YiwgMHhhMDhlLCAweDAwMzYsIDB4MDA0MCwgMHg4ZDhiLCAweGEwOGUsIDB4MDAzNywgMHgwMDQwLAotCTB4OGQ4YiwgMHhhMDhlLCAweDAwMzgsIDB4MDA0MCwgMHg4ZDhiLCAweGEwOGUsIDB4MDAzOSwgMHgwMDQwLAotCTB4OGQ4YiwgMHhhMDhlLCAweDAwM2EsIDB4MDA0MCwgMHg4ZDhiLCAweGEwOGUsIDB4MDAzYiwgMHgwMDQwLAotCTB4OGQ4YiwgMHhhMDg1LCAweDAwMDEsIDB4MDE3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MGY3ZSwgMHgyYzc4LAotCTB4MTA3OCwgMHg0ODkzLCAweDAwYzAsIDB4OGQ5OCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHg4ZGE3LAotCTB4NjAyNCwgMHhkMGY0LCAweDAwYzAsIDB4OGRhNiwgMHhjMGY1LCAweDYwMjYsIDB4NjAxMCwgMHgyMDc4LAotCTB4NzgyOCwgMHg2MDNhLCAweDc4MmMsIDB4NjAzNiwgMHgxMDc4LCAweDE3NDksIDB4YTAwNiwgMHgwZjdmLAotCTB4MDA3YywgMHgwMDdlLCAweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDBlN2UsIDB4MjAwMSwgMHhhNTljLAotCTB4MjAwYywgMHg4MDAwLCAweDIwMTQsIDB4MjAwMSwgMHgwMDMyLCAweDEwNzgsIDB4NWE5OCwgMHgyMDAxLAotCTB4YTVhMCwgMHg4MmZmLCAweDAwYzAsIDB4OGRiZSwgMHgyMDExLCAweDAwMDIsIDB4MjIwMiwgMHgyMDAxLAotCTB4YTU5ZSwgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDcxLCAweGE1OGMsIDB4NzExYSwgMHg3MjFlLAotCTB4MjAwMSwgMHgwMDY0LCAweDEwNzgsIDB4NWE5OCwgMHgyMDAxLCAweGE1YTEsIDB4ODJmZiwgMHgwMGMwLAotCTB4OGRkMywgMHgyMDExLCAweDAwMDIsIDB4MjIwMiwgMHgyMDA5LCAweGE1YTIsIDB4YTI4MCwgMHgwMDBhLAotCTB4MjAwYSwgMHgwZTdmLCAweDAzN2YsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MDA3YywgMHgwMDdlLAotCTB4MGU3ZSwgMHgyMDAxLCAweGE1YTAsIDB4MjAwMywgMHgwMDI4LCAweDIwMDEsIDB4YTVhMSwgMHgyMDAzLAotCTB4MDAxNCwgMHgyMDcxLCAweGE1OGMsIDB4NzAxYiwgMHgwMDAwLCAweDcwMWYsIDB4MDdkMCwgMHgyMDAxLAotCTB4YTVhMiwgMHgyMDAzLCAweDAwMWUsIDB4MGU3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MGM3ZSwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDAxN2YsIDB4MDA0MCwgMHg4ZTBlLAotCTB4NjExYSwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMywgMHgxMDc4LAotCTB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwYzdmLCAweDAwN2MsIDB4YTAwNiwgMHgwMDc4LAotCTB4OGUwYiwgMHgwZDdlLCAweDBlN2UsIDB4MGY3ZSwgMHgyMDcxLCAweGEzMDAsIDB4YTE4NiwgMHgwMDE1LAotCTB4MDBjMCwgMHg4ZTQwLCAweDcwN2MsIDB4YTA4NiwgMHgwMDE4LCAweDAwYzAsIDB4OGU0MCwgMHg2MDEwLAotCTB4MjA2OCwgMHg2YTNjLCAweGQyZTQsIDB4MDBjMCwgMHg4ZTM0LCAweDJjNzgsIDB4MTA3OCwgMHg2MmM2LAotCTB4MDA0MCwgMHg4ZTQ4LCAweDcwNjgsIDB4NmE1MCwgMHhhMjA2LCAweDAwYzAsIDB4OGUzYywgMHg3MDZjLAotCTB4NmE1NCwgMHhhMjA2LCAweDAwYzAsIDB4OGUzYywgMHg2MjE4LCAweGEyOTAsIDB4MDAyOCwgMHgyMjE0LAotCTB4MjAwOSwgMHgwMDAwLCAweDEwNzgsIDB4Mjg1YiwgMHgxMDc4LCAweDc2MDgsIDB4MDA3OCwgMHg4ZTQ0LAotCTB4MTA3OCwgMHg3YTA1LCAweDEwNzgsIDB4NzUzZCwgMHgwZjdmLCAweDBlN2YsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4NzA0YywgMHhhMDgwLCAweDI5M2YsIDB4MjAwNCwgMHg2YTU0LCAweGEyMDYsIDB4MDA0MCwgMHg4ZTM0LAotCTB4MDA3OCwgMHg4ZTNjLCAweDBjN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MGM3ZSwgMHgxMDc4LAotCTB4NzRkNywgMHgwMTdmLCAweDAwNDAsIDB4OGU2YSwgMHg2MTFhLCAweDYwMWYsIDB4MDAwMSwgMHgyZDAwLAotCTB4NjAxMiwgMHgyMDA5LCAweDAwNDMsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLAotCTB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwgMHg4ZTY3LCAweDBkN2UsIDB4MGU3ZSwgMHgwZjdlLAotCTB4MjA3MSwgMHhhMzAwLCAweGExODYsIDB4MDAxNSwgMHgwMGMwLCAweDhlOTMsIDB4NzA3YywgMHhhMDg2LAotCTB4MDAwNCwgMHgwMGMwLCAweDhlOTMsIDB4NjAxMCwgMHhhMGU4LCAweDAwMGYsIDB4MmM3OCwgMHgxMDc4LAotCTB4NjJjNiwgMHgwMDQwLCAweDhlOWIsIDB4NzA2OCwgMHg2YTA4LCAweGEyMDYsIDB4MDBjMCwgMHg4ZThmLAotCTB4NzA2YywgMHg2YTBjLCAweGEyMDYsIDB4MDBjMCwgMHg4ZThmLCAweDEwNzgsIDB4MjgxMywgMHgxMDc4LAotCTB4NzYwOCwgMHgwMDc4LCAweDhlOTcsIDB4MTA3OCwgMHg3YTA1LCAweDEwNzgsIDB4NzUzZCwgMHgwZjdmLAotCTB4MGU3ZiwgMHgwZDdmLCAweDAwN2MsIDB4NzA0YywgMHhhMDgwLCAweDI5M2YsIDB4MjAwNCwgMHg2YTBjLAotCTB4YTIwNiwgMHgwMDQwLCAweDhlOGQsIDB4MDA3OCwgMHg4ZThmLCAweDAxN2UsIDB4MDI3ZSwgMHg2ODRjLAotCTB4ZDBhYywgMHgwMDQwLCAweDhlYmQsIDB4NjkxNCwgMHg2YTEwLCAweDIxMDAsIDB4YTIwNSwgMHgwMDQwLAotCTB4OGViZCwgMHg2ODYwLCAweGExMDYsIDB4MDBjMCwgMHg4ZWI5LCAweDY4NWMsIDB4YTIwNiwgMHgwMDQwLAotCTB4OGViZCwgMHg2OTYyLCAweDZhNWUsIDB4YTA4NSwgMHgwMDAxLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdjLAotCTB4MGU3ZSwgMHgxMjdlLCAweDIwNzEsIDB4YTMwMCwgMHgyMDkxLCAweDgwMDAsIDB4NzU0NCwgMHhhNTgyLAotCTB4MDAwMSwgMHgwMDQ4LCAweDhlZjIsIDB4NzA0OCwgMHgyMDYwLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLAotCTB4MDA0MCwgMHg4ZWRlLCAweGFjZTAsIDB4MDAxMCwgMHg3MDU0LCAweGFjMDIsIDB4MDBjOCwgMHg4ZWRhLAotCTB4MDA3OCwgMHg4ZWNkLCAweDIwNjEsIDB4YWEwMCwgMHgwMDc4LCAweDhlY2QsIDB4NjAwMywgMHgwMDA4LAotCTB4ODUyOSwgMHg3NTQ2LCAweGFjYTgsIDB4MDAxMCwgMHg3MDU0LCAweGE1MDIsIDB4MDBjOCwgMHg4ZWVlLAotCTB4NzU0YSwgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzA0YiwgMHhhYTAwLAotCTB4MDA3OCwgMHg4ZWU5LCAweGEwMDYsIDB4MDA3OCwgMHg4ZWViLCAweDBjN2UsIDB4MDI3ZSwgMHgwMTdlLAotCTB4YTE4NiwgMHgwMDM1LCAweDAwNDAsIDB4OGVmZiwgMHg2YTM0LCAweDAwNzgsIDB4OGYwMCwgMHg2YTI4LAotCTB4MTA3OCwgMHg4YTMwLCAweDAwNDAsIDB4OGYyOSwgMHgyMjYwLCAweDYxMWMsIDB4YTE4NiwgMHgwMDAzLAotCTB4MDA0MCwgMHg4ZjBlLCAweGExODYsIDB4MDAwNiwgMHgwMGMwLCAweDhmMjUsIDB4NjgzNCwgMHhhMjA2LAotCTB4MDA0MCwgMHg4ZjFkLCAweDY4MzgsIDB4YTIwNiwgMHgwMGMwLCAweDhmMjUsIDB4NjEwOCwgMHg2ODM0LAotCTB4YTEwNiwgMHgwMGMwLCAweDhmMjUsIDB4MDA3OCwgMHg4ZjIyLCAweDYwMDgsIDB4NjkzOCwgMHhhMTA2LAotCTB4MDBjMCwgMHg4ZjI1LCAweDYwMTgsIDB4NjkxOCwgMHhhMTA2LCAweDAxN2YsIDB4MDI3ZiwgMHgwYzdmLAotCTB4MDA3YywgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHg4ZjI1LCAweDA2N2UsIDB4NjAwMCwgMHhhMGIyLAotCTB4MDAxMCwgMHgxMGM4LCAweDEzMjgsIDB4MTA3OSwgMHg4ZjM3LCAweDA2N2YsIDB4MDA3YywgMHg4ZjQ3LAotCTB4OTNiYiwgMHg5NGQzLCAweDhmNDcsIDB4OGY0NywgMHg4ZjQ3LCAweDhmNDcsIDB4OGY0NywgMHg4ZjgxLAotCTB4OTU1ZSwgMHg4ZjQ3LCAweDhmNDcsIDB4OGY0NywgMHg4ZjQ3LCAweDhmNDcsIDB4OGY0NywgMHgxMDc4LAotCTB4MTMyOCwgMHgwNjdlLCAweDYwMDAsIDB4YTBiMiwgMHgwMDEwLCAweDEwYzgsIDB4MTMyOCwgMHgxMDc5LAotCTB4OGY1MywgMHgwNjdmLCAweDAwN2MsIDB4OGY2MywgMHg5OWY2LCAweDhmNjMsIDB4OGY2MywgMHg4ZjYzLAotCTB4OGY2MywgMHg4ZjYzLCAweDhmNjMsIDB4OTliNCwgMHg5YTQ0LCAweDhmNjMsIDB4YTA1MywgMHhhMDg3LAotCTB4YTA1MywgMHhhMDg3LCAweDhmNjMsIDB4MTA3OCwgMHgxMzI4LCAweDA2N2UsIDB4NjAwMCwgMHhhMGIyLAotCTB4MDAxMCwgMHgxMGM4LCAweDEzMjgsIDB4MTA3OSwgMHg4ZjZmLCAweDA2N2YsIDB4MDA3YywgMHg4ZjdmLAotCTB4OTY5ZiwgMHg5NzZhLCAweDk3OTgsIDB4OTgxMywgMHg4ZjdmLCAweDk5MTksIDB4OThjMSwgMHg5NTZhLAotCTB4OTk4OCwgMHg5OTllLCAweDhmN2YsIDB4OGY3ZiwgMHg4ZjdmLCAweDhmN2YsIDB4OGY3ZiwgMHgxMDc4LAotCTB4MTMyOCwgMHhhMWIyLCAweDAwNDQsIDB4MTBjOCwgMHgxMzI4LCAweDIxMDAsIDB4MDA3OSwgMHg4Zjg4LAotCTB4OGZjOCwgMHg5MTlhLCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDkxYTIsIDB4OGZjOCwgMHg4ZmM4LAotCTB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LAotCTB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmNhLAotCTB4OTAyZCwgMHg5MDM4LCAweDkwODEsIDB4OTA5YywgMHg5MTFiLCAweDkxOGIsIDB4OGZjOCwgMHg4ZmM4LAotCTB4OTFhNiwgMHg4ZmM4LCAweDhmYzgsIDB4OTFiNSwgMHg5MWJjLCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LAotCTB4OGZjOCwgMHg4ZmM4LCAweDkxZWEsIDB4OGZjOCwgMHg4ZmM4LCAweDkxZjUsIDB4OGZjOCwgMHg4ZmM4LAotCTB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg5MjBhLCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LAotCTB4OTI5MSwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg5MzA1LAotCTB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4NDg5NywgMHgwMGMwLCAweDhmZDcsIDB4MjAwMSwgMHhhMzMyLAotCTB4MjAwNCwgMHhhMDg0LCAweDAwMDksIDB4YTA4NiwgMHgwMDA4LCAweDAwYzAsIDB4OGZkZiwgMHg2MDA3LAotCTB4MDAwOSwgMHg2MDJiLCAweDAwMDksIDB4NjAxMywgMHgwMDAwLCAweDAwNzgsIDB4OTE5NSwgMHgxMDc4LAotCTB4NDg4NywgMHgwZTdlLCAweDBjN2UsIDB4MDM3ZSwgMHgwMjdlLCAweDAxN2UsIDB4NjIxOCwgMHgyMjcwLAotCTB4NzJhMCwgMHgwMjdlLCAweDIwMTksIDB4MDAyOSwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwgMHgyMDM5LAotCTB4MDAwMCwgMHgxMDc4LCAweDVjNzgsIDB4MmMwOCwgMHgxMDc4LCAweDljMzgsIDB4MDc3ZiwgMHgwMTdmLAotCTB4MmU2MCwgMHgxMDc4LCAweDQ3MWIsIDB4MDE3ZiwgMHgwMjdmLCAweDAzN2YsIDB4MGM3ZiwgMHgwZTdmLAotCTB4NjYxOCwgMHgwYzdlLCAweDI2NjAsIDB4MTA3OCwgMHg0NTEzLCAweDBjN2YsIDB4YTZiMCwgMHgwMDAxLAotCTB4MjYzNCwgMHhhNjg0LCAweDAwZmYsIDB4YTA4MiwgMHgwMDA2LCAweDAwNDgsIDB4OTAxZiwgMHgxMDc4LAotCTB4OWI2YywgMHgwMGMwLCAweDkwN2IsIDB4MTA3OCwgMHg5YWZkLCAweDAwYzAsIDB4OTAxYiwgMHg2MDA3LAotCTB4MDAwOCwgMHgwMDc4LCAweDkxOTUsIDB4NjAwNywgMHgwMDA5LCAweDAwNzgsIDB4OTE5NSwgMHgxMDc4LAotCTB4OWQ0NSwgMHgwMDQwLCAweDkwMjksIDB4MTA3OCwgMHg5YjZjLCAweDAwNDAsIDB4OTAxMywgMHgwMDc4LAotCTB4OTA3YiwgMHg2MDEzLCAweDE5MDAsIDB4MDA3OCwgMHg5MDFiLCAweDYxMDYsIDB4MTA3OCwgMHg5YWE4LAotCTB4NjAwNywgMHgwMDA2LCAweDAwNzgsIDB4OTE5NSwgMHg2MDA3LCAweDAwMDcsIDB4MDA3OCwgMHg5MTk1LAotCTB4MTA3OCwgMHhhMGJmLCAweDAwYzAsIDB4OTM0MCwgMHgwZDdlLCAweDY2MTgsIDB4MjY2OCwgMHg2ZTA0LAotCTB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwgMHgwMDA2LCAweDAwNDAsIDB4OTA1ZCwgMHhhNjg2LAotCTB4MDAwNCwgMHgwMDQwLCAweDkwNWQsIDB4NmUwNCwgMHhhNmI0LCAweDAwZmYsIDB4YTY4NiwgMHgwMDA2LAotCTB4MDA0MCwgMHg5MDVkLCAweGE2ODYsIDB4MDAwNCwgMHgwMDQwLCAweDkwNWQsIDB4YTY4NiwgMHgwMDA1LAotCTB4MDA0MCwgMHg5MDVkLCAweDBkN2YsIDB4MDA3OCwgMHg5MDdiLCAweDEwNzgsIDB4OWJkMiwgMHgwMGMwLAotCTB4OTA3NiwgMHhhNjg2LCAweDAwMDYsIDB4MDBjMCwgMHg5MDZmLCAweDAyN2UsIDB4NjIxOCwgMHhhMjkwLAotCTB4MDAyOCwgMHgyMjE0LCAweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI4NWIsIDB4MDI3ZiwgMHgxMDc4LAotCTB4NDU3ZCwgMHg2MDA3LCAweDAwMGEsIDB4MGQ3ZiwgMHgwMDc4LCAweDkxOTUsIDB4NjAwNywgMHgwMDBiLAotCTB4MGQ3ZiwgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwgMHgyODEzLCAweDYwMDcsIDB4MDAwMSwgMHgwMDc4LAotCTB4OTE5NSwgMHgxMDc4LCAweGEwYmYsIDB4MDBjMCwgMHg5MzQwLCAweDY2MTgsIDB4MGQ3ZSwgMHgyNjY4LAotCTB4NmUwNCwgMHgwZDdmLCAweGE2ODYsIDB4MDcwNywgMHgwMDQwLCAweDkwN2IsIDB4MDI3ZSwgMHg2MjE4LAotCTB4YTI5MCwgMHgwMDI4LCAweDIyMTQsIDB4MjAwOSwgMHgwMDAwLCAweDEwNzgsIDB4Mjg1YiwgMHgwMjdmLAotCTB4NjAwNywgMHgwMDBjLCAweDAwNzgsIDB4OTE5NSwgMHgxMDc4LCAweDQ4OTcsIDB4MDBjMCwgMHg5MGE5LAotCTB4MjAwMSwgMHhhMzMyLCAweDIwMDQsIDB4YTA4NCwgMHgwMDA5LCAweGEwODYsIDB4MDAwOCwgMHgwMGMwLAotCTB4OTBiMSwgMHg2MDA3LCAweDAwMDksIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MDAwMCwgMHgwMDc4LAotCTB4OTE5NSwgMHgxMDc4LCAweDQ4ODcsIDB4NjYxOCwgMHhhNmIwLCAweDAwMDEsIDB4MjYzNCwgMHhhNjg0LAotCTB4MDBmZiwgMHhhMDgyLCAweDAwMDYsIDB4MDA0OCwgMHg5MGY1LCAweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LAotCTB4YTY4NiwgMHgwMDA0LCAweDAwNDAsIDB4OTBjOCwgMHhhNjg2LCAweDAwMDYsIDB4MDBjMCwgMHg5MDdiLAotCTB4MTA3OCwgMHg5YmUxLCAweDAwYzAsIDB4OTBkMCwgMHg2MDA3LCAweDAwMGUsIDB4MDA3OCwgMHg5MTk1LAotCTB4MDQ3ZSwgMHg2NDE4LCAweGE0YTAsIDB4MDAyOCwgMHgyNDI0LCAweGE0YTQsIDB4MDBmZiwgMHg4NDI3LAotCTB4MDQ3ZSwgMHgxMDc4LCAweDI4MTMsIDB4MDQ3ZiwgMHgwMTdlLCAweGEwMDYsIDB4MjAwOSwgMHhhMzUyLAotCTB4MjEwYywgMHhkMWE0LCAweDAwNDAsIDB4OTBlZiwgMHgyMDA5LCAweDAwMjksIDB4MTA3OCwgMHg5ZWMwLAotCTB4NjAxOCwgMHgwZDdlLCAweDIwNjgsIDB4NjgwMCwgMHhjMGU1LCAweDY4MDIsIDB4MGQ3ZiwgMHgwMTdmLAotCTB4MDQ3ZiwgMHg2MDA3LCAweDAwMDEsIDB4MDA3OCwgMHg5MTk1LCAweDIwMDEsIDB4MDAwMSwgMHgxMDc4LAotCTB4NDQyYiwgMHgxNTdlLCAweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDIwYTksIDB4MDAwNCwgMHgyMDE5LAotCTB4YTMwNSwgMHgyMDExLCAweGE4OTAsIDB4MTA3OCwgMHg3ZTU1LCAweDAzN2YsIDB4MDI3ZiwgMHgwMTdmLAotCTB4MTU3ZiwgMHhhMDA1LCAweDAwNDAsIDB4OTExNSwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywgMHhhNjg2LAotCTB4MDAwNiwgMHgwMDQwLCAweDkwYzgsIDB4MDA3OCwgMHg5MDdiLCAweDYwMTMsIDB4MTkwMCwgMHg2MDA3LAotCTB4MDAwOSwgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwgMHg0ODk3LCAweDAwYzAsIDB4OTEyOCwgMHgyMDAxLAotCTB4YTMzMiwgMHgyMDA0LCAweGEwODQsIDB4MDAwOSwgMHhhMDg2LCAweDAwMDgsIDB4MDBjMCwgMHg5MTMwLAotCTB4NjAwNywgMHgwMDA5LCAweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDAwMDAsIDB4MDA3OCwgMHg5MTk1LAotCTB4MTA3OCwgMHg0ODg3LCAweDY2MTgsIDB4YTZiMCwgMHgwMDAxLCAweDI2MzQsIDB4YTY4NCwgMHgwMGZmLAotCTB4YTA4MiwgMHgwMDA2LCAweDAwNDgsIDB4OTE3OCwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywgMHhhNjg2LAotCTB4MDAwNCwgMHgwMDQwLCAweDkxNDcsIDB4YTY4NiwgMHgwMDA2LCAweDAwYzAsIDB4OTA3YiwgMHgxMDc4LAotCTB4OWMwYywgMHgwMGMwLCAweDkxNTMsIDB4MTA3OCwgMHg5YWZkLCAweDAwYzAsIDB4OTE1MywgMHg2MDA3LAotCTB4MDAxMCwgMHgwMDc4LCAweDkxOTUsIDB4MDQ3ZSwgMHg2NDE4LCAweGE0YTAsIDB4MDAyOCwgMHgyNDI0LAotCTB4YTRhNCwgMHgwMGZmLCAweDg0MjcsIDB4MDQ3ZSwgMHgxMDc4LCAweDI4MTMsIDB4MDQ3ZiwgMHgwMTdlLAotCTB4YTAwNiwgMHgyMDA5LCAweGEzNTIsIDB4MjEwYywgMHhkMWE0LCAweDAwNDAsIDB4OTE3MiwgMHgyMDA5LAotCTB4MDAyOSwgMHgxMDc4LCAweDllYzAsIDB4NjAxOCwgMHgwZDdlLCAweDIwNjgsIDB4NjgwMCwgMHhjMGU1LAotCTB4NjgwMiwgMHgwZDdmLCAweDAxN2YsIDB4MDQ3ZiwgMHg2MDA3LCAweDAwMDEsIDB4MDA3OCwgMHg5MTk1LAotCTB4MTA3OCwgMHg5ZDQ1LCAweDAwNDAsIDB4OTE4NSwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywgMHhhNjg2LAotCTB4MDAwNiwgMHgwMDQwLCAweDkxNDcsIDB4MDA3OCwgMHg5MDdiLCAweDYwMTMsIDB4MTkwMCwgMHg2MDA3LAotCTB4MDAwOSwgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwgMHhhMGJmLCAweDAwYzAsIDB4OTM0MCwgMHgxMDc4LAotCTB4OTM0MywgMHgwMGMwLCAweDkwN2IsIDB4NjAwNywgMHgwMDEyLCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LAotCTB4NWM0NSwgMHgwMDdjLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LAotCTB4MDA3OCwgMHg5MTk5LCAweDYwMDcsIDB4MDAwNSwgMHgwMDc4LCAweDkxOWMsIDB4MTA3OCwgMHhhMGJmLAotCTB4MDBjMCwgMHg5MzQwLCAweDEwNzgsIDB4OTM0MywgMHgwMGMwLCAweDkwN2IsIDB4NjAwNywgMHgwMDIwLAotCTB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWM0NSwgMHgwMDdjLCAweDYwMDcsIDB4MDAyMywgMHg2MDAzLAotCTB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MDA3YywgMHgxMDc4LCAweGEwYmYsIDB4MDBjMCwgMHg5MzQwLAotCTB4MTA3OCwgMHg5MzQzLCAweDAwYzAsIDB4OTA3YiwgMHgwMTdlLCAweDAyN2UsIDB4MjAxMSwgMHhhODkwLAotCTB4MjIxNCwgMHgyYzA4LCAweDEwNzgsIDB4OWU4YywgMHgwMGMwLCAweDkxZGUsIDB4MjE2MCwgMHg2MDA3LAotCTB4MDAyNiwgMHg2MDEzLCAweDE3MDAsIDB4MjAxMSwgMHhhODg5LCAweDIyMTQsIDB4YTI5NiwgMHhmZmZmLAotCTB4MDBjMCwgMHg5MWUzLCAweDYwMDcsIDB4MDAyNSwgMHgwMDc4LCAweDkxZTMsIDB4MTA3OCwgMHg3NTNkLAotCTB4MjE2MCwgMHg2MDA3LCAweDAwMjUsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWM0NSwgMHgwMjdmLAotCTB4MDE3ZiwgMHgwMDdjLCAweDYxMDYsIDB4MTA3OCwgMHg5MzYzLCAweDYwMDcsIDB4MDAyYiwgMHgwMDc4LAotCTB4OTE5NSwgMHg2MDA3LCAweDAwMmMsIDB4MDA3OCwgMHg5MTk1LCAweDEwNzgsIDB4YTBiZiwgMHgwMGMwLAotCTB4OTM0MCwgMHgxMDc4LCAweDkzNDMsIDB4MDBjMCwgMHg5MDdiLCAweDYxMDYsIDB4MTA3OCwgMHg5MzY4LAotCTB4MDBjMCwgMHg5MjA2LCAweDYwMDcsIDB4MDAyZSwgMHgwMDc4LCAweDkxOTUsIDB4NjAwNywgMHgwMDJmLAotCTB4MDA3OCwgMHg5MTk1LCAweDBlN2UsIDB4MGQ3ZSwgMHgwYzdlLCAweDYwMTgsIDB4YTA4MCwgMHgwMDAxLAotCTB4MjAwYywgMHhhMTg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAwNDAsIDB4OTIyMywgMHhhMTg0LAotCTB4ZmYwMCwgMHg4MDA3LCAweGEwODYsIDB4MDAwNiwgMHgwMDQwLCAweDkyMjMsIDB4MGM3ZiwgMHgwZDdmLAotCTB4MGU3ZiwgMHgwMDc4LCAweDkxOWEsIDB4MjAwMSwgMHhhMzcxLCAweDIwMDQsIDB4ZDBlNCwgMHgwMDQwLAotCTB4OTI4ZCwgMHgyMDcxLCAweGE4OGMsIDB4NzAxMCwgMHg2MDM2LCAweDcwMTQsIDB4NjAzYSwgMHg3MTA4LAotCTB4NzIwYywgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4OTI0MSwgMHg2MDE4LAotCTB4MjA2OCwgMHg2ODEwLCAweGExMDYsIDB4MDBjMCwgMHg5MjQxLCAweDY4MTQsIDB4YTIwNiwgMHgwMDQwLAotCTB4OTI2NSwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGFjLCAweDAwYzAsIDB4OTI4MSwgMHgyMDY5LAotCTB4YTMwMCwgMHg2ODZjLCAweGEyMDYsIDB4MDBjMCwgMHg5MjgxLCAweDY4NjgsIDB4YTEwNiwgMHgwMGMwLAotCTB4OTI4MSwgMHg3MjEwLCAweDEwNzgsIDB4OGEzMCwgMHgwMDQwLCAweDkyODcsIDB4MTA3OCwgMHg5ZjMxLAotCTB4MDA0MCwgMHg5Mjg3LCAweDYyMmEsIDB4NjAwNywgMHgwMDM2LCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LAotCTB4NWJmOCwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcyMTQsIDB4YTI4NiwgMHhmZmZmLAotCTB4MDA0MCwgMHg5Mjc3LCAweDEwNzgsIDB4OGEzMCwgMHgwMDQwLCAweDkyODcsIDB4YTI4MCwgMHgwMDAyLAotCTB4MjAwNCwgMHg3MTEwLCAweGExMDYsIDB4MDBjMCwgMHg5Mjg3LCAweDAwNzgsIDB4OTI1MiwgMHg3MjEwLAotCTB4MmMwOCwgMHgxMDc4LCAweDllOGMsIDB4MmMxMCwgMHgyMTYwLCAweDAwNDAsIDB4OTI4NywgMHgwMDc4LAotCTB4OTI1MiwgMHg2MDA3LCAweDAwMzcsIDB4NjAxMywgMHgxNTAwLCAweDAwNzgsIDB4OTI1ZCwgMHg2MDA3LAotCTB4MDAzNywgMHg2MDEzLCAweDE3MDAsIDB4MDA3OCwgMHg5MjVkLCAweDYwMDcsIDB4MDAxMiwgMHgwMDc4LAotCTB4OTI1ZCwgMHg2MDE4LCAweGEwODAsIDB4MDAwMSwgMHgyMDA0LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LAotCTB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4OTE5YSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwgMHgyMDAxLAotCTB4YTM3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDA0MCwgMHg5MmZkLCAweDIwNjksIDB4YTMwMCwgMHgyMDcxLAotCTB4YTg4YywgMHg3MDA4LCAweDYwMzYsIDB4NzIwYywgMHg2MjNhLCAweGEyODYsIDB4ZmZmZiwgMHgwMGMwLAotCTB4OTJiYSwgMHg3MjA4LCAweDBjN2UsIDB4MmMwOCwgMHgxMDc4LCAweDllOGMsIDB4MmMxMCwgMHgwYzdmLAotCTB4MDA0MCwgMHg5MmYxLCAweDEwNzgsIDB4OGEzMCwgMHgwMDQwLCAweDkyZjEsIDB4MGM3ZSwgMHgwMjdlLAotCTB4MjI2MCwgMHgxMDc4LCAweDg3NGEsIDB4MDI3ZiwgMHgwYzdmLCAweDcxMTgsIDB4YTE4YywgMHhmZjAwLAotCTB4ODEwZiwgMHhhMTg2LCAweDAwMDEsIDB4MDA0MCwgMHg5MmRiLCAweGExODYsIDB4MDAwNSwgMHgwMDQwLAotCTB4OTJkNSwgMHhhMTg2LCAweDAwMDcsIDB4MDBjMCwgMHg5MmU1LCAweGEyODAsIDB4MDAwNCwgMHgyMDA0LAotCTB4YTAwNSwgMHgwMDQwLCAweDkyZTUsIDB4MDU3ZSwgMHg3NTEwLCAweDc2MTQsIDB4MTA3OCwgMHg5ZjQ2LAotCTB4MDU3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDYwMDcsIDB4MDAzYiwgMHg2MDJiLAotCTB4MDAwOSwgMHg2MDEzLCAweDJhMDAsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWJmOCwgMHgwMDc4LAotCTB4OTJlMSwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MTcwMCwgMHg2MDAzLAotCTB4MDAwMSwgMHgxMDc4LCAweDViZjgsIDB4MDA3OCwgMHg5MmUxLCAweDYwMDcsIDB4MDAzYiwgMHg2MDJiLAotCTB4MDAwYiwgMHg2MDEzLCAweDAwMDAsIDB4MDA3OCwgMHg5MjVkLCAweDBlN2UsIDB4MDI3ZSwgMHgxMDc4LAotCTB4NDg5NywgMHgwMDQwLCAweDkzM2EsIDB4MTA3OCwgMHg0ODg3LCAweDEwNzgsIDB4YTE0OCwgMHgwMGMwLAotCTB4OTMzOCwgMHgyMDcxLCAweGEzMDAsIDB4NzBjOCwgMHhjMDg1LCAweDcwY2EsIDB4MGY3ZSwgMHgyMDc5LAotCTB4MDEwMCwgMHg3Mjk0LCAweGEyODQsIDB4MDBmZiwgMHg3MDZhLCAweDc4ZTYsIDB4YTI4NCwgMHhmZjAwLAotCTB4NzI2YywgMHhhMjA1LCAweDcwNmUsIDB4NzhlYSwgMHgwZjdmLCAweDcwZDMsIDB4MDAwMCwgMHgyMDAxLAotCTB4YTM1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDA0MCwgMHg5MzMxLCAweDIwMTEsIDB4YTVjNCwgMHgyMDEzLAotCTB4MDdkMCwgMHhkMGFjLCAweDAwYzAsIDB4OTMzYSwgMHgxMDc4LCAweDI2MGQsIDB4MDA3OCwgMHg5MzNhLAotCTB4MTA3OCwgMHhhMTc4LCAweDAyN2YsIDB4MGU3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwgMHg5MTk5LAotCTB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4MGQ3ZSwgMHgwNjdlLCAweDY2MTgsIDB4MjY2OCwgMHg2ZTA0LAotCTB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwgMHgwMDA2LCAweDAwNDAsIDB4OTM2MCwgMHhhNjg2LAotCTB4MDAwNCwgMHgwMDQwLCAweDkzNjAsIDB4NmUwNCwgMHhhNmI0LCAweDAwZmYsIDB4YTY4NiwgMHgwMDA2LAotCTB4MDA0MCwgMHg5MzYwLCAweGE2ODYsIDB4MDAwNCwgMHgwMDQwLCAweDkzNjAsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDY3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgxMDc4LCAweDkzOTcsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4MGQ3ZSwgMHgxMDc4LCAweDkzYTYsIDB4MDBjMCwgMHg5MzkwLCAweDY4MGMsIDB4YTA4YywgMHhmZjAwLAotCTB4NjgyMCwgMHhhMDg0LCAweDAwZmYsIDB4YTExNSwgMHg2MjEyLCAweDY4MjQsIDB4NjAyYSwgMHhkMWU0LAotCTB4MDA0MCwgMHg5MzdlLCAweDIwMDksIDB4MDAwMSwgMHgwMDc4LCAweDkzOGMsIDB4ZDFlYywgMHgwMDQwLAotCTB4OTM5MCwgMHg2OTIwLCAweGExOGMsIDB4MDBmZiwgMHg2ODI0LCAweDEwNzgsIDB4MjRlMywgMHgwMGMwLAotCTB4OTM5MCwgMHgyMTEwLCAweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI4NWIsIDB4MDA3OCwgMHg5Mzk0LAotCTB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4OTM5NSwgMHhhMDA2LCAweDBkN2YsIDB4MDA3YywgMHgyMDY5LAotCTB4YTg4ZCwgMHg2ODAwLCAweGEwODIsIDB4MDAxMCwgMHgwMGM4LCAweDkzYTQsIDB4NjAxMywgMHgwMDAwLAotCTB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4OTNhNSwgMHhhMDA2LCAweDAwN2MsIDB4NjAxMywgMHgwMDAwLAotCTB4MjA2OSwgMHhhODhjLCAweDY4MDgsIDB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4MDgwMCwgMHgwMGMwLAotCTB4OTNiYSwgMHg2ODAwLCAweGEwODQsIDB4MDBmZiwgMHhhMDhlLCAweDAwMTQsIDB4MDA0MCwgMHg5M2JhLAotCTB4YTA4ZSwgMHgwMDEwLCAweDAwN2MsIDB4NjAwNCwgMHhhMGIyLCAweDAwNDQsIDB4MTBjOCwgMHgxMzI4LAotCTB4YTFiNiwgMHgwMDEzLCAweDAwYzAsIDB4OTNjNywgMHgyMDA4LCAweDAwNzksIDB4OTNkYSwgMHhhMWI2LAotCTB4MDAyNywgMHgwMDQwLCAweDkzY2YsIDB4YTFiNiwgMHgwMDE0LCAweDEwYzAsIDB4MTMyOCwgMHgyMDAxLAotCTB4MDAwNywgMHgxMDc4LCAweDQ0NzIsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4OGMwMSwgMHgxMDc4LAotCTB4NjEwOSwgMHgwMDdjLCAweDk0MWEsIDB4OTQxYywgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFjLAotCTB4OTQyNCwgMHg5NGFlLCAweDk0NzEsIDB4OTRhZSwgMHg5NDg1LCAweDk0YWUsIDB4OTQyNCwgMHg5NGFlLAotCTB4OTRhNiwgMHg5NGFlLCAweDk0YTYsIDB4OTRhZSwgMHg5NGFlLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLAotCTB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLAotCTB4OTQxYywgMHg5NDFhLCAweDk0YWUsIDB4OTQxYSwgMHg5NDFhLCAweDk0YWUsIDB4OTQxYSwgMHg5NGFlLAotCTB4OTRhZSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0YWUsIDB4OTRhZSwgMHg5NDFhLAotCTB4OTRhZSwgMHg5NGFlLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFjLAotCTB4OTRhZSwgMHg5NGFlLCAweDk0MWEsIDB4OTQxYSwgMHg5NGFlLCAweDk0YWUsIDB4OTQxYSwgMHg5NDFhLAotCTB4OTQxYSwgMHg5NDFhLCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4NjAwMywgMHgwMDAyLAotCTB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OTRiNCwgMHgwZjdlLCAweDIwNzksIDB4YTM1MSwgMHg3ODA0LAotCTB4MGY3ZiwgMHhkMGFjLCAweDAwYzAsIDB4OTRhZSwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLAotCTB4NjAxOCwgMHhhMDgwLCAweDAwMDQsIDB4MjAwNCwgMHhhMDg2LCAweDAwZmYsIDB4MDA0MCwgMHg5NGFlLAotCTB4MGM3ZSwgMHg2MDE4LCAweDIwNjAsIDB4NjAwMCwgMHhkMGY0LCAweDAwYzAsIDB4OTQ0OCwgMHg2MDEwLAotCTB4YTAwNSwgMHgwMDQwLCAweDk0NDgsIDB4MGM3ZiwgMHgxMDc4LCAweDM1ZjcsIDB4MDA3OCwgMHg5NGFlLAotCTB4MGM3ZiwgMHgyMDAxLCAweGEzMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHg5NDU3LAotCTB4MGY3ZSwgMHgyMDc5LCAweGEzMDAsIDB4Nzg4YywgMHg4MDAwLCAweDc4OGUsIDB4MGY3ZiwgMHgyMDAxLAotCTB4MDAwMiwgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwgMHg2MDEwLCAweDYwMWYsIDB4MDAwMSwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MTA3OCwgMHg1YzQ1LCAweDEwNzgsIDB4NjEwOSwgMHgwYzdlLAotCTB4NjExOCwgMHgyMTYwLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LCAweDU4ZTEsIDB4MGM3ZiwgMHgwMDc4LAotCTB4OTRiNCwgMHg2NjE4LCAweDBkN2UsIDB4MjY2OCwgMHg2ZTA0LCAweDBkN2YsIDB4YTZiNCwgMHhmZjAwLAotCTB4ODYzNywgMHhhNjg2LCAweDAwMDYsIDB4MDA0MCwgMHg5NGFlLCAweGE2ODYsIDB4MDAwNCwgMHgwMDQwLAotCTB4OTRhZSwgMHgyMDAxLCAweDAwMDQsIDB4MDA3OCwgMHg5NGFjLCAweDIwMDEsIDB4YTMwMCwgMHgyMDA0LAotCTB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4OTQ4ZSwgMHgxMDc4LCAweDM1ZjcsIDB4MjAwMSwgMHgwMDA2LAotCTB4MTA3OCwgMHg5NGI1LCAweDY2MTgsIDB4MGQ3ZSwgMHgyNjY4LCAweDZlMDQsIDB4MGQ3ZiwgMHhhNmI0LAotCTB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNiwgMHgwMDQwLCAweDk0YWUsIDB4MjAwMSwgMHgwMDA2LAotCTB4MDA3OCwgMHg5NGFjLCAweDIwMDEsIDB4MDAwNCwgMHgwMDc4LCAweDk0YWMsIDB4MjAwMSwgMHgwMDA2LAotCTB4MTA3OCwgMHg5NGI1LCAweDAwNzgsIDB4OTRhZSwgMHgxMDc4LCAweDQ0NzIsIDB4MTA3OCwgMHg2MDEwLAotCTB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDAxN2UsIDB4MGQ3ZSwgMHg2MTE4LAotCTB4MjE2OCwgMHg2OTAwLCAweGQxODQsIDB4MDA0MCwgMHg5NGQwLCAweDYxMDQsIDB4YTE4ZSwgMHgwMDBhLAotCTB4MDBjMCwgMHg5NGM4LCAweDY5OWMsIDB4ZDFhNCwgMHgwMGMwLCAweDk0YzgsIDB4MjAwMSwgMHgwMDA3LAotCTB4MTA3OCwgMHg0NDNmLCAweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MTA3OCwgMHgyODM5LAotCTB4MGQ3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHg2NjE4LCAweDI2NjgsIDB4NjgwNCwgMHhhMDg0LAotCTB4ZmYwMCwgMHg4MDA3LCAweDBkN2YsIDB4YTBiMiwgMHgwMDBjLCAweDEwYzgsIDB4MTMyOCwgMHhhMWI2LAotCTB4MDAxNSwgMHgwMGMwLCAweDk0ZTcsIDB4MTA3OSwgMHg5NGVlLCAweDAwNzgsIDB4OTRlZCwgMHhhMWI2LAotCTB4MDAxNiwgMHgxMGMwLCAweDEzMjgsIDB4MTA3OSwgMHg5NGZhLCAweDAwN2MsIDB4N2FkMCwgMHg3YWQwLAotCTB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwgMHg5NTQ3LCAweDk1MDYsIDB4N2FkMCwgMHg3YWQwLAotCTB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwgMHg3YWQwLAotCTB4OTU0NywgMHg5NTRmLCAweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4MGY3ZSwgMHgyMDc5LAotCTB4YTM1MSwgMHg3ODA0LCAweGQwYWMsIDB4MDBjMCwgMHg5NTJkLCAweDYwMTgsIDB4YTA3ZCwgMHgwMDQwLAotCTB4OTUyZCwgMHg3ODAwLCAweGQwZjQsIDB4MDBjMCwgMHg5NTE5LCAweDc4MTAsIDB4YTAwNSwgMHgwMGMwLAotCTB4OTUyZCwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwMDEsIDB4MDAwMiwgMHgxMDc4LAotCTB4NDQzZiwgMHg2MDFmLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgxMDc4LAotCTB4NWM0NSwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg5NTQ1LCAweDIwMTEsIDB4YTg4MywgMHgyMjA0LAotCTB4ODIxMSwgMHgyMjBjLCAweDEwNzgsIDB4MjRlMywgMHgwMGMwLCAweDk1NDUsIDB4MGM3ZSwgMHgxMDc4LAotCTB4NDUwMSwgMHgwMDQwLCAweDk1NDAsIDB4MGM3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwgMHg5NTQ1LAotCTB4MTA3OCwgMHg0MjM1LCAweDBjN2YsIDB4MTA3OCwgMHg3NTNkLCAweDBmN2YsIDB4MDA3YywgMHg2NjA0LAotCTB4YTZiNiwgMHgwMDFlLCAweDAwYzAsIDB4OTU0ZSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHgxMDc4LAotCTB4N2QwYSwgMHgwMGMwLCAweDk1NWIsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgxMDc4LAotCTB4NWM0NSwgMHgwMDc4LCAweDk1NWQsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4NjAwNCwgMHhhMDhhLAotCTB4MDA0NCwgMHgxMGM4LCAweDEzMjgsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4OGMwMSwgMHgxMDc4LAotCTB4NjEwOSwgMHgwMDdjLCAweGExODIsIDB4MDA0MCwgMHgwMDc5LCAweDk1NmUsIDB4OTU4MSwgMHg5NTgxLAotCTB4OTU4MSwgMHg5NTgxLCAweDk1ODMsIDB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwgMHg5NTgxLAotCTB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwgMHg5NTgxLAotCTB4OTU4MSwgMHgxMDc4LCAweDEzMjgsIDB4MGQ3ZSwgMHgwZTdlLCAweDBmN2UsIDB4MTU3ZSwgMHgwNDdlLAotCTB4MDI3ZSwgMHg2MjE4LCAweGEyODAsIDB4MDAyYiwgMHgyMDA0LCAweGEwMDUsIDB4MDA0MCwgMHg5NTk0LAotCTB4MjAyMSwgMHgwMDAwLCAweDEwNzgsIDB4YTExMSwgMHg2MTA2LCAweDIwNzEsIDB4YTg4MCwgMHg3NDQ0LAotCTB4YTRhNCwgMHhmZjAwLCAweDAwNDAsIDB4OTVlYiwgMHhhNDg2LCAweDIwMDAsIDB4MDBjMCwgMHg5NWE2LAotCTB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDIwMCwgMHgxMDc4LCAweDVhNmQsIDB4MTA3OCwgMHgxMzgxLAotCTB4MTA0MCwgMHgxMzI4LCAweDYwMDMsIDB4MDAwNywgMHgyZDAwLCAweDY4MzcsIDB4MDEwZCwgMHg2ODAzLAotCTB4MDAwMCwgMHg2ODNiLCAweDAwMDAsIDB4NmM1YSwgMHgyYzAwLCAweDY4NWUsIDB4NjAwOCwgMHg2OGIyLAotCTB4NjAxOCwgMHgyMDc4LCAweDc4YTAsIDB4ODAwNywgMHg3MTMwLCAweDY5NGEsIDB4MDE3ZSwgMHhhMDg0LAotCTB4ZmYwMCwgMHg2ODQ2LCAweDY4NGYsIDB4MDAwMCwgMHg2ODU3LCAweDAwMzYsIDB4MTA3OCwgMHg0OTgyLAotCTB4MDE3ZiwgMHhhNDg2LCAweDIwMDAsIDB4MDBjMCwgMHg5NWQzLCAweDIwMTksIDB4MDAxNywgMHgxMDc4LAotCTB4OWUzYiwgMHgwMDc4LCAweDk2NDUsIDB4YTQ4NiwgMHgwNDAwLCAweDAwYzAsIDB4OTVkZCwgMHgyMDE5LAotCTB4MDAwMiwgMHgxMDc4LCAweDlkZWMsIDB4MDA3OCwgMHg5NjQ1LCAweGE0ODYsIDB4MDIwMCwgMHgwMGMwLAotCTB4OTVlMywgMHgxMDc4LCAweDlkZDEsIDB4YTQ4NiwgMHgxMDAwLCAweDAwYzAsIDB4OTVlOSwgMHgxMDc4LAotCTB4OWUyMCwgMHgwMDc4LCAweDk2NDUsIDB4MjA2OSwgMHhhNjJkLCAweDZhMDAsIDB4ZDI4NCwgMHgwMDQwLAotCTB4OTY5YiwgMHhhMjg0LCAweDAzMDAsIDB4MDBjMCwgMHg5NjkzLCAweDY4MDQsIDB4YTAwNSwgMHgwMDQwLAotCTB4OTY4MywgMHgyZDc4LCAweDYwMDMsIDB4MDAwNywgMHgxMDc4LCAweDEzNjYsIDB4MDA0MCwgMHg5NjRjLAotCTB4NzgwMCwgMHhkMDhjLCAweDAwYzAsIDB4OTYwNywgMHg3ODA0LCAweDgwMDEsIDB4NzgwNiwgMHg2MDEzLAotCTB4MDAwMCwgMHg2ODAzLCAweDAwMDAsIDB4NjgzNywgMHgwMTE2LCAweDY4M2IsIDB4MDAwMCwgMHg2MDA4LAotCTB4NjhiMiwgMHgyYzAwLCAweDY4NGEsIDB4NjAxOCwgMHgyMDc4LCAweDc4YTAsIDB4ODAwNywgMHg3MTMwLAotCTB4Njk4NiwgMHg2ODQ2LCAweDY4NTMsIDB4MDAzZCwgMHg3MjQ0LCAweGEyOTQsIDB4MDAwMywgMHhhMjg2LAotCTB4MDAwMiwgMHgwMGMwLCAweDk2MjcsIDB4Njg0ZiwgMHgwMDQwLCAweDAwNzgsIDB4OTYzMSwgMHhhMjg2LAotCTB4MDAwMSwgMHgwMGMwLCAweDk2MmYsIDB4Njg0ZiwgMHgwMDgwLCAweDAwNzgsIDB4OTYzMSwgMHg2ODRmLAotCTB4MDAwMCwgMHgyMGE5LCAweDAwMGEsIDB4MjAwMSwgMHhhODkwLCAweGFkOTAsIDB4MDAxNSwgMHgyMDBjLAotCTB4ODEwZiwgMHgyMTEyLCAweDgwMDAsIDB4ODIxMCwgMHgwMGYwLCAweDk2MzcsIDB4MjAwYywgMHg2OTgyLAotCTB4ODAwMCwgMHgyMDBjLCAweDY5N2UsIDB4MTA3OCwgMHg0OTgyLCAweDAyN2YsIDB4MDQ3ZiwgMHgxNTdmLAotCTB4MGY3ZiwgMHgwZTdmLCAweDBkN2YsIDB4MDA3YywgMHg2MDEzLCAweDAxMDAsIDB4NjAwMywgMHgwMDAxLAotCTB4NjAwNywgMHgwMDQxLCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg5NjQ1LAotCTB4MjA2OSwgMHhhODkyLCAweDJkMDQsIDB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4MTIwMCwgMHgwMGMwLAotCTB4OTY3NywgMHgyMDY5LCAweGE4ODAsIDB4Njg2YywgMHhhMDg0LCAweDAwZmYsIDB4MDE3ZSwgMHg2MTEwLAotCTB4YTE4YywgMHgwNzAwLCAweGExMGQsIDB4NjExMiwgMHgwMTdmLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDA0MywgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OTY0NSwgMHg2MDEzLAotCTB4MDIwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LAotCTB4NjEwOSwgMHgwMDc4LCAweDk2NDUsIDB4NjAxMywgMHgwMzAwLCAweDAwNzgsIDB4OTY4OSwgMHg2MDEzLAotCTB4MDEwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LAotCTB4NjEwOSwgMHgwMDc4LCAweDk2NDUsIDB4NjAxMywgMHgwNTAwLCAweDAwNzgsIDB4OTY4OSwgMHg2MDEzLAotCTB4MDYwMCwgMHgwMDc4LCAweDk2NTgsIDB4NjAxMywgMHgwMjAwLCAweDAwNzgsIDB4OTY1OCwgMHhhMTg2LAotCTB4MDAxMywgMHgwMGMwLCAweDk2YjEsIDB4NjAwNCwgMHhhMDhhLCAweDAwNDAsIDB4MTA0OCwgMHgxMzI4LAotCTB4YTA4YSwgMHgwMDUzLCAweDEwYzgsIDB4MTMyOCwgMHhhMDgyLCAweDAwNDAsIDB4MjAwOCwgMHgwMDc5LAotCTB4OTcyNSwgMHhhMTg2LCAweDAwNTEsIDB4MDA0MCwgMHg5NmJlLCAweGExODYsIDB4MDA0NywgMHgwMGMwLAotCTB4OTZkNywgMHg2MDA0LCAweGEwODYsIDB4MDA0MSwgMHgwMDQwLCAweDk2ZTUsIDB4MjAwMSwgMHgwMTA5LAotCTB4MjAwNCwgMHhkMDg0LCAweDAwNDAsIDB4OTZlNSwgMHgxMjdlLCAweDIwOTEsIDB4MjIwMCwgMHgwMDdlLAotCTB4MDE3ZSwgMHgwMjdlLCAweDEwNzgsIDB4NWFkMiwgMHgwMjdmLCAweDAxN2YsIDB4MDA3ZiwgMHgxMjdmLAotCTB4NjAwMCwgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHg5NmU1LCAweDAwNzgsIDB4OTc2YSwgMHhhMTg2LAotCTB4MDAyNywgMHgwMDQwLCAweDk2ZGYsIDB4YTE4NiwgMHgwMDE0LCAweDEwYzAsIDB4MTMyOCwgMHg2MDA0LAotCTB4YTA4MiwgMHgwMDQwLCAweDIwMDgsIDB4MDA3OSwgMHg5NmU4LCAweDEwNzgsIDB4NzU4MywgMHgwMDdjLAotCTB4OTZmYiwgMHg5NmZkLCAweDk2ZmQsIDB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLAotCTB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLAotCTB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LAotCTB4NjEwOSwgMHgwMzdlLCAweDBkN2UsIDB4NjAxMCwgMHhhMDZkLCAweDAwNDAsIDB4OTcyMiwgMHhhZDg0LAotCTB4ZjAwMCwgMHgwMDQwLCAweDk3MjIsIDB4NjAwMywgMHgwMDAyLCAweDYwMTgsIDB4MjAwNCwgMHhkMGJjLAotCTB4MDBjMCwgMHg5NzIyLCAweDIwMTksIDB4MDAwNCwgMHgxMDc4LCAweDllNzAsIDB4NjAxMywgMHgwMDAwLAotCTB4NjAxNCwgMHhhMDA1LCAweDAwYzAsIDB4OTcyMCwgMHgyMDAxLCAweGE1YTEsIDB4MjAwNCwgMHg2MDE2LAotCTB4NjAwMywgMHgwMDA3LCAweDBkN2YsIDB4MDM3ZiwgMHgwMDdjLCAweDk3MzgsIDB4OTc1NywgMHg5NzQxLAotCTB4OTc2NCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwgMHg5NzM4LAotCTB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwgMHg5NzM4LAotCTB4MTA3OCwgMHgxMzI4LCAweDYwMTAsIDB4YTA4OCwgMHgwMDEzLCAweDIxMDQsIDB4YTA4NSwgMHgwNDAwLAotCTB4MjAwYSwgMHgxMDc4LCAweDYwMTAsIDB4NjAxMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwNCwgMHhkMGI0LAotCTB4MDA0MCwgMHg5NzUyLCAweDYwMDMsIDB4MDAwNywgMHgyMDA5LCAweDAwNDMsIDB4MTA3OCwgMHg3NTZjLAotCTB4MDA3OCwgMHg5NzU0LCAweDYwMDMsIDB4MDAwMiwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgxMDc4LAotCTB4NjAxMCwgMHgxMDc4LCAweGEwYzYsIDB4MDBjMCwgMHg5NzYxLCAweDEwNzgsIDB4NWE0MSwgMHgxMDc4LAotCTB4NzUzZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgxMDc4LCAweDYwMTAsIDB4MjAwOSwgMHgwMDQxLAotCTB4MDA3OCwgMHg5OGMxLCAweGExODIsIDB4MDA0MCwgMHgwMDc5LCAweDk3NmUsIDB4OTc4MSwgMHg5NzgzLAotCTB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4MSwgMHg5NzgxLCAweDk3ODQsIDB4OTc4MSwgMHg5NzgxLAotCTB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4MSwgMHg5NzhmLAotCTB4OTc4MSwgMHgxMDc4LCAweDEzMjgsIDB4MDA3YywgMHg2MDAzLCAweDAwMDQsIDB4NjExMCwgMHgyMGUxLAotCTB4MDAwNSwgMHgzZDE4LCAweDNlMjAsIDB4MmMxMCwgMHgxMDc4LCAweDE1ZWMsIDB4MDA3YywgMHgwZDdlLAotCTB4MTA3OCwgMHg1YTQxLCAweDBkN2YsIDB4MTA3OCwgMHhhMTM0LCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLAotCTB4YTE4MiwgMHgwMDQwLCAweDAwNzksIDB4OTc5YywgMHg5N2FmLCAweDk3YWYsIDB4OTdhZiwgMHg5N2FmLAotCTB4OTdhZiwgMHg5N2FmLCAweDk3YWYsIDB4OTdiMSwgMHg5N2FmLCAweDk3YjQsIDB4OTdkZiwgMHg5N2FmLAotCTB4OTdhZiwgMHg5N2FmLCAweDk3YWYsIDB4OTdkZiwgMHg5N2FmLCAweDk3YWYsIDB4OTdhZiwgMHgxMDc4LAotCTB4MTMyOCwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywgMHgxMDc4LCAweDYwYjgsIDB4MTA3OCwgMHg2MWQzLAotCTB4NjAxMCwgMHgwZDdlLCAweDIwNjgsIDB4Njg0YywgMHhkMGZjLCAweDAwNDAsIDB4OTdjYSwgMHhhMDhjLAotCTB4MDAwMywgMHhhMThlLCAweDAwMDIsIDB4MDA0MCwgMHg5N2QyLCAweDIwMDksIDB4MDA0MSwgMHgwZDdmLAotCTB4MDA3OCwgMHg5OGMxLCAweDYwMDMsIDB4MDAwNywgMHg2MDE3LCAweDAwMDAsIDB4MTA3OCwgMHg1YTQxLAotCTB4MGQ3ZiwgMHgwMDdjLCAweDEwNzgsIDB4YTBjNiwgMHgwMDQwLCAweDk3ZDgsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4MTA3OCwgMHg1YTQxLCAweDEwNzgsIDB4NzUzZCwgMHgwZDdmLCAweDAwNzgsIDB4OTdkMSwgMHgwMzdlLAotCTB4MTA3OCwgMHg2MGI4LCAweDEwNzgsIDB4NjFkMywgMHg2MDEwLCAweDBkN2UsIDB4MjA2OCwgMHg2MDE4LAotCTB4MjAwNCwgMHhkMGJjLCAweDAwNDAsIDB4OTdmZiwgMHg2ODRjLCAweGEwODQsIDB4MDAwMywgMHhhMDg2LAotCTB4MDAwMiwgMHgwMDQwLCAweDk3ZmIsIDB4Njg3YywgMHg2MzJjLCAweGEzMWEsIDB4NjMyZSwgMHg2ODgwLAotCTB4NjMyOCwgMHhhMzFiLCAweDYzMmEsIDB4NjAwMywgMHgwMDAyLCAweDAwNzgsIDB4OTgxMCwgMHgyMDE5LAotCTB4MDAwNCwgMHgxMDc4LCAweDllNzAsIDB4NjAxNCwgMHhhMDA1LCAweDAwYzAsIDB4OTgwYywgMHgyMDAxLAotCTB4YTVhMSwgMHgyMDA0LCAweDgwMDMsIDB4NjAxNiwgMHg2MDEzLCAweDAwMDAsIDB4NjAwMywgMHgwMDA3LAotCTB4MGQ3ZiwgMHgwMzdmLCAweDAwN2MsIDB4YTE4NiwgMHgwMDEzLCAweDAwYzAsIDB4OTgyMSwgMHg2MDA0LAotCTB4YTA4NiwgMHgwMDQyLCAweDEwYzAsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg2MTA5LAotCTB4MDA3YywgMHhhMTg2LCAweDAwMjcsIDB4MDA0MCwgMHg5ODI5LCAweGExODYsIDB4MDAxNCwgMHgwMGMwLAotCTB4OTgzOSwgMHg2MDA0LCAweGEwODYsIDB4MDA0MiwgMHgxMGMwLCAweDEzMjgsIDB4MjAwMSwgMHgwMDA3LAotCTB4MTA3OCwgMHg0NDcyLCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwgMHg2MTA5LAotCTB4MDA3YywgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg5ODNkLCAweDk4NTAsIDB4OTg1MCwgMHg5ODUwLAotCTB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwgMHg5ODUyLCAweDk4NWUsIDB4OTg1MCwgMHg5ODUwLAotCTB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwgMHg5ODUwLAotCTB4MTA3OCwgMHgxMzI4LCAweDAzN2UsIDB4MDQ3ZSwgMHgyMGUxLCAweDAwMDUsIDB4M2QxOCwgMHgzZTIwLAotCTB4MmMxMCwgMHgxMDc4LCAweDE1ZWMsIDB4MDQ3ZiwgMHgwMzdmLCAweDAwN2MsIDB4NjAxMCwgMHgwZDdlLAotCTB4MjA2OCwgMHg2ODEwLCAweDZhMTQsIDB4NjExOCwgMHgyMTBjLCAweGQxYmMsIDB4MDA0MCwgMHg5ODdkLAotCTB4NjEyNCwgMHhkMWY0LCAweDAwYzAsIDB4OTg3ZCwgMHgwMDdlLCAweDA0N2UsIDB4MDU3ZSwgMHg2YzdjLAotCTB4YTQyMiwgMHg2ZDgwLCAweDIyMDAsIDB4YTUyYiwgMHg2MDJjLCAweGE0MjAsIDB4NjQyZSwgMHg2MDI4LAotCTB4YTUyOSwgMHg2NTJhLCAweDA1N2YsIDB4MDQ3ZiwgMHgwMDdmLCAweGEyMGQsIDB4MDBjMCwgMHg5ODkxLAotCTB4Njg0YywgMHhkMGZjLCAweDAwNDAsIDB4OTg4OSwgMHgyMDA5LCAweDAwNDEsIDB4MGQ3ZiwgMHgwMDc4LAotCTB4OThjMSwgMHg2MDAzLCAweDAwMDcsIDB4NjAxNywgMHgwMDAwLCAweDEwNzgsIDB4NWE0MSwgMHgwZDdmLAotCTB4MDA3YywgMHgwMDdlLCAweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwgMHgwMDdmLAotCTB4MDA0MCwgMHg5ODllLCAweDYwMDMsIDB4MDAwMiwgMHgwZDdmLCAweDAwN2MsIDB4MjAwOSwgMHhhMzBkLAotCTB4MjEwYywgMHhkMTljLCAweDAwNDAsIDB4OThhOCwgMHg2MDAzLCAweDAwMDcsIDB4MDA3OCwgMHg5OGFhLAotCTB4NjAwMywgMHgwMDA2LCAweDEwNzgsIDB4OThiMCwgMHgxMDc4LCAweDVhNDMsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4ZDJmYywgMHgwMDQwLCAweDk4YmMsIDB4ODAwMiwgMHg4MDAwLCAweDgyMTIsIDB4YTI5MSwgMHgwMDAwLAotCTB4MjAwOSwgMHgwMDA5LCAweDAwNzgsIDB4OThiZSwgMHgyMDA5LCAweDAwMTUsIDB4NmE2YSwgMHg2ODY2LAotCTB4MDA3YywgMHhhMTgyLCAweDAwNDAsIDB4MDA0OCwgMHg5OGM3LCAweDAwNzksIDB4OThkNCwgMHhhMTg2LAotCTB4MDAxMywgMHgwMDQwLCAweDk4Y2YsIDB4YTE4NiwgMHgwMDE0LCAweDEwYzAsIDB4MTMyOCwgMHg2MDI0LAotCTB4ZDBkYywgMHgxMDQwLCAweDEzMjgsIDB4MDA3YywgMHg5OGU3LCAweDk4ZWUsIDB4OThmYSwgMHg5OTA2LAotCTB4OThlNywgMHg5OGU3LCAweDk4ZTcsIDB4OTkxNSwgMHg5OGU3LCAweDk4ZTksIDB4OThlOSwgMHg5OGU3LAotCTB4OThlNywgMHg5OGU3LCAweDk4ZTcsIDB4OThlNywgMHg5OGU3LCAweDk4ZTcsIDB4OThlNywgMHgxMDc4LAotCTB4MTMyOCwgMHg2MDI0LCAweGQwZGMsIDB4MTA0MCwgMHgxMzI4LCAweDAwN2MsIDB4NjAwMywgMHgwMDAxLAotCTB4NjEwNiwgMHgxMDc4LCAweDViZjgsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg2MTA5LAotCTB4MTI3ZiwgMHgwMDdjLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDEwNzgsIDB4NWJmOCwgMHgxMjdlLAotCTB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NjEwOSwgMHgxMjdmLCAweDAwN2MsIDB4NjAwMywgMHgwMDAzLAotCTB4NjEwNiwgMHgyYzEwLCAweDEwNzgsIDB4MWNhYiwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LAotCTB4NWM2NCwgMHgxMDc4LCAweDYxZDMsIDB4MTI3ZiwgMHgwMDdjLCAweGEwMTYsIDB4MTA3OCwgMHgxNWVjLAotCTB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwMzdlLCAweDBkN2UsIDB4YTE4MiwgMHgwMDQwLAotCTB4MTA3OSwgMHg5OTI2LCAweDBkN2YsIDB4MDM3ZiwgMHgxMjdmLCAweDAwN2MsIDB4OTkzNiwgMHg5OTM4LAotCTB4OTk0ZCwgMHg5OTZjLCAweDk5MzYsIDB4OTkzNiwgMHg5OTM2LCAweDk5ODQsIDB4OTkzNiwgMHg5OTM2LAotCTB4OTkzNiwgMHg5OTM2LCAweDk5MzYsIDB4OTkzNiwgMHg5OTM2LCAweDk5MzYsIDB4MTA3OCwgMHgxMzI4LAotCTB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywgMHgwMDQwLCAweDk5NjIsIDB4YTA5YywgMHgwMDAzLAotCTB4YTM5ZSwgMHgwMDAzLCAweDAwNDAsIDB4OTk2MiwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgxMDc4LAotCTB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg5OTg3LCAweDYwMTAsIDB4MjA2OCwgMHg2ODRjLAotCTB4ZDBmYywgMHgwMDQwLCAweDk5NjIsIDB4YTA5YywgMHgwMDAzLCAweGEzOWUsIDB4MDAwMywgMHgwMDQwLAotCTB4OTk2MiwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LAotCTB4MDA3OCwgMHg5OTg3LCAweDYwMTMsIDB4MDAwMCwgMHg2MDE3LCAweDAwMDAsIDB4MjAxOSwgMHgwMDA0LAotCTB4MTA3OCwgMHg5ZTcwLCAweDAwNzgsIDB4OTk4NywgMHg2MDEwLCAweDIwNjgsIDB4Njg0YywgMHhkMGZjLAotCTB4MDA0MCwgMHg5OTYyLCAweGEwOWMsIDB4MDAwMywgMHhhMzllLCAweDAwMDMsIDB4MDA0MCwgMHg5OTYyLAotCTB4NjAwMywgMHgwMDAzLCAweDYxMDYsIDB4MmMxMCwgMHgxMDc4LCAweDFjYWIsIDB4MTA3OCwgMHg1YzY0LAotCTB4MTA3OCwgMHg2MWQzLCAweDAwNzgsIDB4OTk4NywgMHhhMDE2LCAweDEwNzgsIDB4MTVlYywgMHgwMDdjLAotCTB4MTA3OCwgMHg2MDEwLCAweDYxMTAsIDB4ODFmZiwgMHgwMDQwLCAweDk5OTksIDB4MGQ3ZSwgMHgyMTY4LAotCTB4MTA3OCwgMHhhMTgxLCAweDAzN2UsIDB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4OWU3MCwgMHgwMzdmLAotCTB4MGQ3ZiwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MTA3OCwgMHg2MGI4LAotCTB4NjExMCwgMHg4MWZmLCAweDAwNDAsIDB4OTlhZiwgMHgwZDdlLCAweDIxNjgsIDB4MTA3OCwgMHhhMTgxLAotCTB4MDM3ZSwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwgMHg5ZTcwLCAweDAzN2YsIDB4MGQ3ZiwgMHgxMDc4LAotCTB4OGMwMSwgMHgxMDc4LCAweDYxZDMsIDB4MDA3YywgMHhhMTgyLCAweDAwODUsIDB4MDA3OSwgMHg5OWI4LAotCTB4OTljMSwgMHg5OWJmLCAweDk5YmYsIDB4OTljZCwgMHg5OWJmLCAweDk5YmYsIDB4OTliZiwgMHgxMDc4LAotCTB4MTMyOCwgMHg2MDAzLCAweDAwMGIsIDB4NjEwNiwgMHgxMDc4LCAweDViZjgsIDB4MTI3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgxMDc4LCAweDYxMDksIDB4MTI3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MGU3ZSwgMHgxMDc4LAotCTB4YTBiZiwgMHgwMDQwLCAweDk5ZDcsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4OTlmMywgMHgyMDcxLAotCTB4YTg4MCwgMHg3MjI0LCAweDYyMTIsIDB4NzIyMCwgMHgxMDc4LCAweDlkMTAsIDB4MDA0MCwgMHg5OWU0LAotCTB4NjAwNywgMHgwMDg2LCAweDAwNzgsIDB4OTllZCwgMHg2MDA3LCAweDAwODcsIDB4NzIyNCwgMHhhMjk2LAotCTB4ZmZmZiwgMHgwMGMwLCAweDk5ZWQsIDB4NjAwNywgMHgwMDg2LCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LAotCTB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MGU3ZiwgMHgwMjdmLCAweDAwN2MsIDB4YTE4NiwgMHgwMDEzLAotCTB4MDBjMCwgMHg5YTA3LCAweDYwMDQsIDB4YTA4YSwgMHgwMDg1LCAweDEwNDgsIDB4MTMyOCwgMHhhMDhhLAotCTB4MDA4YywgMHgxMGM4LCAweDEzMjgsIDB4YTA4MiwgMHgwMDg1LCAweDAwNzksIDB4OWExZSwgMHhhMTg2LAotCTB4MDAyNywgMHgwMDQwLCAweDlhMTMsIDB4YTE4NiwgMHgwMDE0LCAweDAwNDAsIDB4OWExMywgMHgxMDc4LAotCTB4NzU4MywgMHgwMDc4LCAweDlhMWQsIDB4MjAwMSwgMHgwMDA3LCAweDEwNzgsIDB4NDQ3MiwgMHgxMDc4LAotCTB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4OWEyNSwgMHg5YTI3LAotCTB4OWEyNywgMHg5YTI1LCAweDlhMjUsIDB4OWEyNSwgMHg5YTI1LCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LAotCTB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4YTE4MiwgMHgwMDg1LAotCTB4MTA0OCwgMHgxMzI4LCAweGExODIsIDB4MDA4YywgMHgxMGM4LCAweDEzMjgsIDB4YTE4MiwgMHgwMDg1LAotCTB4MDA3OSwgMHg5YTNhLCAweDlhNDEsIDB4OWE0MSwgMHg5YTQxLCAweDlhNDMsIDB4OWE0MSwgMHg5YTQxLAotCTB4OWE0MSwgMHgxMDc4LCAweDEzMjgsIDB4MDA3YywgMHhhMTg2LCAweDAwMTMsIDB4MDA0MCwgMHg5YTU0LAotCTB4YTE4NiwgMHgwMDE0LCAweDAwNDAsIDB4OWE1NCwgMHhhMTg2LCAweDAwMjcsIDB4MDA0MCwgMHg5YTU0LAotCTB4MTA3OCwgMHg3NTgzLCAweDAwNzgsIDB4OWE1YSwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg4YzAxLAotCTB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MDM3ZSwgMHgxMDc4LCAweGExMzQsIDB4NjAzZiwgMHgwMDAwLAotCTB4MjAxOSwgMHgwMDBiLCAweDEwNzgsIDB4OWE2YSwgMHg2MDFmLCAweDAwMDYsIDB4NjAwMywgMHgwMDA3LAotCTB4MDM3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MDM3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDg3ZSwgMHgyYzQwLAotCTB4MDk3ZSwgMHgyMDQ5LCAweDAwMDAsIDB4MTA3OCwgMHg3MDU4LCAweDA5N2YsIDB4MDg3ZiwgMHgwMGMwLAotCTB4OWFhNSwgMHgwNzdlLCAweDJjMzgsIDB4MTA3OCwgMHg3MTA1LCAweDA3N2YsIDB4MDBjMCwgMHg5YWE1LAotCTB4NjAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDA0MCwgMHg5YWE1LCAweDYwMWMsIDB4YTA4NiwgMHgwMDA3LAotCTB4MDA0MCwgMHg5YWE1LCAweDBkN2UsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwgMHg5YTk2LAotCTB4MTA3OCwgMHhhMTM0LCAweDYwMWYsIDB4MDAwNywgMHgxMDc4LCAweDE3NDksIDB4NjAxMCwgMHgyMDY4LAotCTB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4OWE5ZSwgMHgxMDc4LCAweDllNzAsIDB4MGQ3ZiwgMHg2MDEzLAotCTB4MDAwMCwgMHgxMDc4LCAweGExMzQsIDB4NjAxZiwgMHgwMDA3LCAweDAzN2YsIDB4MTI3ZiwgMHgwMDdjLAotCTB4MGY3ZSwgMHgwYzdlLCAweDAzN2UsIDB4MTU3ZSwgMHgyMDc5LCAweGE4ODAsIDB4NzkzOCwgMHg3ODNjLAotCTB4MTA3OCwgMHgyNGUzLCAweDAwYzAsIDB4OWFmNiwgMHgwMTdlLCAweDBjN2UsIDB4MTA3OCwgMHg0NTAxLAotCTB4MDBjMCwgMHg5YWY2LCAweDIwMTEsIDB4YTg5MCwgMHhhYzk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LAotCTB4MTA3OCwgMHg3ZTU1LCAweDAwYzAsIDB4OWFmNiwgMHgwMTdmLCAweDAyN2YsIDB4MDI3ZSwgMHgwMTdlLAotCTB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4NzFlMCwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwgMHgyMDM5LAotCTB4MDAwMCwgMHgxMDc4LCAweDVjNzgsIDB4MDc3ZiwgMHgwMTdmLCAweDA3N2UsIDB4MjAzOSwgMHgwMDAwLAotCTB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MTA3OCwgMHg0NzFiLCAweDAyN2UsIDB4NjIwNCwgMHhhMjk0LAotCTB4ZmYwMCwgMHg4MjE3LCAweGEyODYsIDB4MDAwNiwgMHgwMDQwLCAweDlhZWEsIDB4YTI4NiwgMHgwMDA0LAotCTB4MDBjMCwgMHg5YWVkLCAweDYyYTAsIDB4MTA3OCwgMHgyOGQ1LCAweDAyN2YsIDB4MDE3ZiwgMHgxMDc4LAotCTB4NDIzNSwgMHg2NjEyLCAweDY1MTYsIDB4YTAwNiwgMHgwMDc4LCAweDlhZjgsIDB4MGM3ZiwgMHgwMTdmLAotCTB4MTU3ZiwgMHgwMzdmLCAweDBjN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MGQ3ZSwgMHgwZTdlLAotCTB4MDE3ZSwgMHgyMDA5LCAweGEzMWYsIDB4MjEwNCwgMHhhMDg2LCAweDAwNzQsIDB4MDBjMCwgMHg5YjYwLAotCTB4MjA2OSwgMHhhODhlLCAweDY5MGMsIDB4YTE4MiwgMHgwMTAwLCAweDAwNDgsIDB4OWI1MCwgMHg2OTA4LAotCTB4YTE4NCwgMHg4MDAwLCAweDAwNDAsIDB4OWI1YywgMHg2MDE4LCAweDIwNzAsIDB4NzAxMCwgMHhhMDg0LAotCTB4MDBmZiwgMHgwMDQwLCAweDliMWYsIDB4NzAwMCwgMHhkMGY0LCAweDAwNDAsIDB4OWIyMywgMHhhMTg0LAotCTB4MDgwMCwgMHgwMDQwLCAweDliNWMsIDB4NjkxMCwgMHhhMThhLCAweDAwMDEsIDB4MDA0OCwgMHg5YjU0LAotCTB4NjkxNCwgMHgyMDY5LCAweGE4YWUsIDB4NjkwNCwgMHg4MWZmLCAweDAwYzAsIDB4OWI0OCwgMHg2OTBjLAotCTB4YTE4MiwgMHgwMTAwLCAweDAwNDgsIDB4OWI1MCwgMHg2OTA4LCAweDgxZmYsIDB4MDBjMCwgMHg5YjRjLAotCTB4NjkxMCwgMHhhMThhLCAweDAwMDEsIDB4MDA0OCwgMHg5YjU0LCAweDY5MTgsIDB4YTE4YSwgMHgwMDAxLAotCTB4MDA0OCwgMHg5YjVjLCAweDAwNzgsIDB4OWI2NiwgMHg2MDEzLCAweDAxMDAsIDB4MDA3OCwgMHg5YjYyLAotCTB4NjAxMywgMHgwMzAwLCAweDAwNzgsIDB4OWI2MiwgMHg2MDEzLCAweDA1MDAsIDB4MDA3OCwgMHg5YjYyLAotCTB4NjAxMywgMHgwNzAwLCAweDAwNzgsIDB4OWI2MiwgMHg2MDEzLCAweDA5MDAsIDB4MDA3OCwgMHg5YjYyLAotCTB4NjAxMywgMHgwYjAwLCAweDAwNzgsIDB4OWI2MiwgMHg2MDEzLCAweDBmMDAsIDB4MDA3OCwgMHg5YjYyLAotCTB4NjAxMywgMHgyZDAwLCAweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDliNjcsIDB4YTAwNiwgMHgwMTdmLAotCTB4MGU3ZiwgMHgwZDdmLCAweDBjN2YsIDB4MDA3YywgMHgwYzdlLCAweDBkN2UsIDB4MDI3ZSwgMHgwMzdlLAotCTB4MTU3ZSwgMHg2MjE4LCAweDIyNjgsIDB4NmIwNCwgMHhhMzk0LCAweDAwZmYsIDB4YTI4NiwgMHgwMDA2LAotCTB4MDA0MCwgMHg5YjkwLCAweGEyODYsIDB4MDAwNCwgMHgwMDQwLCAweDliOTAsIDB4YTM5NCwgMHhmZjAwLAotCTB4ODIxNywgMHhhMjg2LCAweDAwMDYsIDB4MDA0MCwgMHg5YjkwLCAweGEyODYsIDB4MDAwNCwgMHgwMDQwLAotCTB4OWI5MCwgMHgwYzdlLCAweDJkNjAsIDB4MTA3OCwgMHg0NTEzLCAweDBjN2YsIDB4MDA3OCwgMHg5YmNiLAotCTB4MjAxMSwgMHhhODk2LCAweGFkOTgsIDB4MDAwYSwgMHgyMGE5LCAweDAwMDQsIDB4MTA3OCwgMHg3ZTU1LAotCTB4MDBjMCwgMHg5YmNjLCAweDIwMTEsIDB4YTg5YSwgMHhhZDk4LCAweDAwMDYsIDB4MjBhOSwgMHgwMDA0LAotCTB4MTA3OCwgMHg3ZTU1LCAweDAwYzAsIDB4OWJjYywgMHgwNDdlLCAweDAxN2UsIDB4NmFhMCwgMHhhMjk0LAotCTB4MDBmZiwgMHg4MjI3LCAweGEwMDYsIDB4MjAwOSwgMHhhMzUyLCAweDIxMGMsIDB4ZDFhNCwgMHgwMDQwLAotCTB4OWJiOCwgMHgyMDA5LCAweDAwMjksIDB4MTA3OCwgMHg5ZWMwLCAweDY4MDAsIDB4YzBlNSwgMHg2ODAyLAotCTB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4NWQ1MywgMHgwNzdlLCAweDIwMzksIDB4MDAwMCwgMHgxMDc4LAotCTB4NWM3OCwgMHgyYzA4LCAweDEwNzgsIDB4OWMzOCwgMHgwNzdmLCAweDIwMDEsIDB4MDAwNywgMHgxMDc4LAotCTB4NDQ3MiwgMHgwMTdmLCAweDA0N2YsIDB4YTAwNiwgMHgxNTdmLCAweDAzN2YsIDB4MDI3ZiwgMHgwZDdmLAotCTB4MGM3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MjA2OSwgMHhhODhlLCAweDY4MDAsIDB4YTA4NiwgMHgwODAwLAotCTB4MDA0MCwgMHg5YmRlLCAweDYwMTMsIDB4MDAwMCwgMHgwMDc4LCAweDliZGYsIDB4YTAwNiwgMHgwZDdmLAotCTB4MDA3YywgMHgwYzdlLCAweDBmN2UsIDB4MDE3ZSwgMHgwMjdlLCAweDAzN2UsIDB4MTU3ZSwgMHgyMDc5LAotCTB4YTg4YywgMHg3OTMwLCAweDc4MzQsIDB4MTA3OCwgMHgyNGUzLCAweDAwYzAsIDB4OWMwNSwgMHgxMDc4LAotCTB4NDUwMSwgMHgwMGMwLCAweDljMDUsIDB4MjAxMSwgMHhhODkwLCAweGFjOTgsIDB4MDAwYSwgMHgyMGE5LAotCTB4MDAwNCwgMHgxMDc4LCAweDdlNTUsIDB4MDBjMCwgMHg5YzA1LCAweDIwMTEsIDB4YTg5NCwgMHhhYzk4LAotCTB4MDAwNiwgMHgyMGE5LCAweDAwMDQsIDB4MTA3OCwgMHg3ZTU1LCAweDE1N2YsIDB4MDM3ZiwgMHgwMjdmLAotCTB4MDE3ZiwgMHgwZjdmLCAweDBjN2YsIDB4MDA3YywgMHgwYzdlLCAweDAwN2UsIDB4MDE3ZSwgMHgwMjdlLAotCTB4MDM3ZSwgMHgxNTdlLCAweDIwMTEsIDB4YTg4MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgxMDc4LAotCTB4MjRlMywgMHgwMGMwLCAweDljMzEsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4OWMzMSwgMHgyMDExLAotCTB4YTg5NiwgMHhhYzk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDEwNzgsIDB4N2U1NSwgMHgwMGMwLAotCTB4OWMzMSwgMHgyMDExLCAweGE4OWEsIDB4YWM5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwgMHgxMDc4LAotCTB4N2U1NSwgMHgxNTdmLCAweDAzN2YsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MGM3ZiwgMHgwMDdjLAotCTB4MGU3ZSwgMHgwYzdlLCAweDA4N2UsIDB4MDc3ZSwgMHgwNjdlLCAweDA1N2UsIDB4MDQ3ZSwgMHgwMjdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4Mjc0MCwgMHgyMDI5LCAweGE1YjQsIDB4MjUyYywgMHgyMDIxLAotCTB4YTViYSwgMHgyNDI0LCAweDIwNjEsIDB4YWEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NzY0NCwgMHg3MDYwLAotCTB4ODFmZiwgMHgwMDQwLCAweDljNTksIDB4ODAwMSwgMHhhNjAyLCAweDAwYzgsIDB4OWNjMywgMHgwMDc4LAotCTB4OWM1YywgMHhhNjA2LCAweDAwNDAsIDB4OWNjMywgMHgyMTAwLCAweGFjMDYsIDB4MDA0MCwgMHg5Y2I5LAotCTB4MTA3OCwgMHg5ZWU1LCAweDAwNDAsIDB4OWNiOSwgMHg2NzFjLCAweGE3ODYsIDB4MDAwMSwgMHgwMDQwLAotCTB4OWNkZSwgMHhhNzg2LCAweDAwMDQsIDB4MDA0MCwgMHg5Y2RlLCAweGE3ODYsIDB4MDAwNywgMHgwMDQwLAotCTB4OWNiOSwgMHgyNTAwLCAweGFjMDYsIDB4MDA0MCwgMHg5Y2I5LCAweDI0MDAsIDB4YWMwNiwgMHgwMDQwLAotCTB4OWNiOSwgMHgxMDc4LCAweDllZjksIDB4MDBjMCwgMHg5Y2I5LCAweDg4ZmYsIDB4MDA0MCwgMHg5Yzg0LAotCTB4NjAyMCwgMHhhOTA2LCAweDAwYzAsIDB4OWNiOSwgMHgwZDdlLCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LAotCTB4MDBjMCwgMHg5YzhlLCAweDAxN2UsIDB4MTA3OCwgMHgxNzQ5LCAweDAxN2YsIDB4YTc4NiwgMHgwMDA4LAotCTB4MDBjMCwgMHg5YzlkLCAweDEwNzgsIDB4OGMzYiwgMHgwMGMwLCAweDljOWQsIDB4MTA3OCwgMHg3YTA1LAotCTB4MGQ3ZiwgMHgxMDc4LCAweDhjMDEsIDB4MDA3OCwgMHg5Y2I5LCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LAotCTB4OGE0NCwgMHgwMDQwLCAweDljYjYsIDB4YTc4NiwgMHgwMDAzLCAweDAwYzAsIDB4OWNjZCwgMHg2ODM3LAotCTB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgxMDc4LCAweGExODEsIDB4MDE3ZSwgMHgxMDc4LAotCTB4OGNiOCwgMHgxMDc4LCAweDQ5ODIsIDB4MDE3ZiwgMHgxMDc4LCAweDhiZjQsIDB4MGQ3ZiwgMHgxMDc4LAotCTB4OGMwMSwgMHhhY2UwLCAweDAwMTAsIDB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YWMwMiwgMHgwMGM4LAotCTB4OWNjMywgMHgwMDc4LCAweDljNGMsIDB4MTI3ZiwgMHgwMjdmLCAweDA0N2YsIDB4MDU3ZiwgMHgwNjdmLAotCTB4MDc3ZiwgMHgwODdmLCAweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweGE3ODYsIDB4MDAwNiwgMHgwMGMwLAotCTB4OWNhNywgMHhhMzg2LCAweDAwMDUsIDB4MDA0MCwgMHg5Y2RiLCAweDEwNzgsIDB4YTE4MSwgMHgxMDc4LAotCTB4OWU3MCwgMHgwMDc4LCAweDljYjYsIDB4MGQ3ZiwgMHgwMDc4LCAweDljYjksIDB4MTA3OCwgMHg5ZWY5LAotCTB4MDBjMCwgMHg5Y2I5LCAweDgxZmYsIDB4MDA0MCwgMHg5Y2I5LCAweGExODAsIDB4MDAwMSwgMHgyMDA0LAotCTB4YTA4NiwgMHgwMDE4LCAweDAwNDAsIDB4OWNmMywgMHhhMTgwLCAweDAwMDEsIDB4MjAwNCwgMHhhMDg2LAotCTB4MDAyZCwgMHgwMGMwLCAweDljYjksIDB4NjAwMCwgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHg5Y2I5LAotCTB4MTA3OCwgMHg4YzI3LCAweDAwNDAsIDB4OWQwNCwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg5Y2I5LAotCTB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4OWQwYywgMHgxMDc4LCAweDI4MzksIDB4MTA3OCwgMHg4YzNiLAotCTB4MDBjMCwgMHg5ZDBjLCAweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDhjMDEsIDB4MDA3OCwgMHg5Y2I5LAotCTB4MGM3ZSwgMHgwZTdlLCAweDAxN2UsIDB4MmMwOCwgMHgyMTcwLCAweDEwNzgsIDB4OWU4YywgMHgwMTdmLAotCTB4MDA0MCwgMHg5ZDFmLCAweDYwMWMsIDB4YTA4NCwgMHgwMDBmLCAweDEwNzksIDB4OWQyMiwgMHgwZTdmLAotCTB4MGM3ZiwgMHgwMDdjLCAweDlkMmEsIDB4OWQyYSwgMHg5ZDJhLCAweDlkMmEsIDB4OWQyYSwgMHg5ZDJhLAotCTB4OWQyYywgMHg5ZDJhLCAweGEwMDYsIDB4MDA3YywgMHgwNDdlLCAweDAxN2UsIDB4NzAxOCwgMHhhMDgwLAotCTB4MDAyOCwgMHgyMDI0LCAweGE0YTQsIDB4MDBmZiwgMHg4NDI3LCAweDJjMDAsIDB4MjAwOSwgMHgwMDIwLAotCTB4MTA3OCwgMHg5ZWMwLCAweDAxN2YsIDB4MDQ3ZiwgMHgwMzdlLCAweDIwMTksIDB4MDAwMiwgMHgxMDc4LAotCTB4OWE2YSwgMHgwMzdmLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDIwMDEsIDB4MDAwMSwgMHgxMDc4LAotCTB4NDQyYiwgMHgxNTdlLCAweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDIwYTksIDB4MDAwNCwgMHgyMDE5LAotCTB4YTMwNSwgMHgyMDExLCAweGE4OTYsIDB4MTA3OCwgMHg3ZTU1LCAweDAzN2YsIDB4MDI3ZiwgMHgwMTdmLAotCTB4MTU3ZiwgMHhhMDA1LCAweDAwN2MsIDB4MGY3ZSwgMHgwZTdlLCAweDBjN2UsIDB4MDg3ZSwgMHgwNzdlLAotCTB4MDY3ZSwgMHgwMjdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDI3NDAsIDB4MjA2MSwgMHhhYTAwLAotCTB4MjA3OSwgMHgwMDAxLCAweDhmZmYsIDB4MDA0MCwgMHg5ZGMzLCAweDIwNzEsIDB4YTMwMCwgMHg3NjQ0LAotCTB4NzA2MCwgMHg4MDAxLCAweGE2MDIsIDB4MDBjOCwgMHg5ZGMzLCAweDg4ZmYsIDB4MDA0MCwgMHg5ZDdlLAotCTB4MjgwMCwgMHhhYzA2LCAweDAwYzAsIDB4OWRiOSwgMHgyMDc5LCAweDAwMDAsIDB4MTA3OCwgMHg5ZWU1LAotCTB4MDA0MCwgMHg5ZGI5LCAweDI0MDAsIDB4YWMwNiwgMHgwMDQwLCAweDlkYjksIDB4NjcxYywgMHhhNzg2LAotCTB4MDAwNiwgMHgwMGMwLCAweDlkYjksIDB4YTc4NiwgMHgwMDA3LCAweDAwNDAsIDB4OWRiOSwgMHg4OGZmLAotCTB4MDBjMCwgMHg5ZDlkLCAweDYwMTgsIDB4YTIwNiwgMHgwMGMwLCAweDlkYjksIDB4ODVmZiwgMHgwMDQwLAotCTB4OWQ5ZCwgMHg2MDIwLCAweGExMDYsIDB4MDBjMCwgMHg5ZGI5LCAweDBkN2UsIDB4NjAwMCwgMHhhMDg2LAotCTB4MDAwNCwgMHgwMGMwLCAweDlkYTksIDB4MTA3OCwgMHhhMTM0LCAweDYwMWYsIDB4MDAwNywgMHgxMDc4LAotCTB4MTc0OSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4OWRiMywgMHgwNDdlLAotCTB4MTA3OCwgMHg5ZTcwLCAweDA0N2YsIDB4MGQ3ZiwgMHgxMDc4LCAweDhjMDEsIDB4ODhmZiwgMHgwMGMwLAotCTB4OWRjZCwgMHhhY2UwLCAweDAwMTAsIDB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YWMwMiwgMHgwMGM4LAotCTB4OWRjMywgMHgwMDc4LCAweDlkNmEsIDB4YTAwNiwgMHgxMjdmLCAweDAyN2YsIDB4MDY3ZiwgMHgwNzdmLAotCTB4MDg3ZiwgMHgwYzdmLCAweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweGE4YzUsIDB4MDAwMSwgMHgwMDc4LAotCTB4OWRjNCwgMHgwNzdlLCAweDA1N2UsIDB4MDg3ZSwgMHgyMDQxLCAweDAwMDAsIDB4MjAyOSwgMHgwMDAxLAotCTB4MmMyMCwgMHgyMDE5LCAweDAwMDIsIDB4NjIxOCwgMHgwOTdlLCAweDIwNDksIDB4MDAwMCwgMHgxMDc4LAotCTB4NzA1OCwgMHgwOTdmLCAweDA4N2YsIDB4MjAzOSwgMHgwMDAwLCAweDEwNzgsIDB4NzEwNSwgMHgxMDc4LAotCTB4OWQ1YiwgMHgwNTdmLCAweDA3N2YsIDB4MDA3YywgMHgwMjdlLCAweDA0N2UsIDB4MDU3ZSwgMHgwNzdlLAotCTB4MGM3ZSwgMHgxNTdlLCAweDJjMjAsIDB4MjEyOCwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLAotCTB4MDE3ZSwgMHgwMzdlLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDllMTQsIDB4MmMxMCwgMHgwNTdlLAotCTB4MDg3ZSwgMHgyMDQxLCAweDAwMDAsIDB4MjUwOCwgMHgyMDI5LCAweDAwMDEsIDB4MDk3ZSwgMHgyMDQ5LAotCTB4MDAwMCwgMHgxMDc4LCAweDcwNTgsIDB4MDk3ZiwgMHgwODdmLCAweDIwMzksIDB4MDAwMCwgMHgxMDc4LAotCTB4NzEwNSwgMHgxMDc4LCAweDlkNWIsIDB4MDU3ZiwgMHgwMzdmLCAweDAxN2YsIDB4ODEwOCwgMHgwMGYwLAotCTB4OWRmOCwgMHgxNTdmLCAweDBjN2YsIDB4MDc3ZiwgMHgwNTdmLCAweDA0N2YsIDB4MDI3ZiwgMHgwMDdjLAotCTB4MDc3ZSwgMHgwNTdlLCAweDYyMTgsIDB4MDg3ZSwgMHgyMDQxLCAweDAwMDAsIDB4MjAyOSwgMHgwMDAxLAotCTB4MjAxOSwgMHgwMDQ4LCAweDA5N2UsIDB4MjA0OSwgMHgwMDAwLCAweDEwNzgsIDB4NzA1OCwgMHgwOTdmLAotCTB4MDg3ZiwgMHgyMDM5LCAweDAwMDAsIDB4MTA3OCwgMHg3MTA1LCAweDJjMjAsIDB4MTA3OCwgMHg5ZDViLAotCTB4MDU3ZiwgMHgwNzdmLCAweDAwN2MsIDB4MDI3ZSwgMHgwNDdlLCAweDA1N2UsIDB4MDc3ZSwgMHgwYzdlLAotCTB4MTU3ZSwgMHgyYzIwLCAweDIwYTksIDB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDE3ZSwgMHgwMzdlLAotCTB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4OWU2NCwgMHgyYzEwLCAweDA4N2UsIDB4MjA0MSwgMHgwMDAwLAotCTB4MjgyOCwgMHgwNDdlLCAweDIwMjEsIDB4MDAwMSwgMHgxMDc4LCAweGExMTEsIDB4MDQ3ZiwgMHgwOTdlLAotCTB4MjA0OSwgMHgwMDAwLCAweDEwNzgsIDB4NzA1OCwgMHgwOTdmLCAweDA4N2YsIDB4MjAzOSwgMHgwMDAwLAotCTB4MTA3OCwgMHg3MTA1LCAweDEwNzgsIDB4OWQ1YiwgMHgwMzdmLCAweDAxN2YsIDB4ODEwOCwgMHgwMGYwLAotCTB4OWU0NiwgMHgxNTdmLCAweDBjN2YsIDB4MDc3ZiwgMHgwNTdmLCAweDA0N2YsIDB4MDI3ZiwgMHgwMDdjLAotCTB4MDE3ZSwgMHgwZjdlLCAweGFkODIsIDB4Y2EwMCwgMHgwMDQ4LCAweDllODksIDB4YWQ4MiwgMHhmZmZmLAotCTB4MDBjOCwgMHg5ZTg5LCAweDY4MDAsIDB4YTA3ZCwgMHgwMDQwLCAweDllODYsIDB4NjgwMywgMHgwMDAwLAotCTB4NmI1MiwgMHgxMDc4LCAweDQ5ODIsIDB4MmY2OCwgMHgwMDc4LCAweDllN2EsIDB4NmI1MiwgMHgxMDc4LAotCTB4NDk4MiwgMHgwZjdmLCAweDAxN2YsIDB4MDA3YywgMHgwZTdlLCAweDA0N2UsIDB4MDM3ZSwgMHgyMDYxLAotCTB4YWEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NzQ0NCwgMHg3MDYwLCAweDgwMDEsIDB4YTQwMiwgMHgwMGM4LAotCTB4OWViYiwgMHgyMTAwLCAweGFjMDYsIDB4MDA0MCwgMHg5ZWFkLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLAotCTB4MDA0MCwgMHg5ZWFkLCAweDYwMDgsIDB4YTIwNiwgMHgwMGMwLCAweDllYWQsIDB4NjAxOCwgMHhhMWEwLAotCTB4MDAwNiwgMHgyNDI0LCAweGE0MDYsIDB4MDA0MCwgMHg5ZWI3LCAweGFjZTAsIDB4MDAxMCwgMHgyMDAxLAotCTB4YTMxNSwgMHgyMDA0LCAweGFjMDIsIDB4MDBjOCwgMHg5ZWJiLCAweDAwNzgsIDB4OWU5MSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDc4LCAweDllYmMsIDB4YTAwNiwgMHgwMzdmLCAweDA0N2YsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MGQ3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MTM4MSwgMHgwMDdmLCAweDEwNDAsIDB4MTMyOCwgMHg2ODM3LAotCTB4MDEwZCwgMHg2ODVlLCAweDAyN2UsIDB4MjAxMCwgMHgxMDc4LCAweDhhMzAsIDB4MjAwMSwgMHgwMDAwLAotCTB4MDA0MCwgMHg5ZWQ2LCAweDIyMDAsIDB4YTA4MCwgMHgwMDA4LCAweDIwMDQsIDB4MDI3ZiwgMHg2ODRhLAotCTB4Njk1NiwgMHg2YzQ2LCAweDY4NGYsIDB4MDAwMCwgMHhhMDA2LCAweDY4YjIsIDB4NjgwMiwgMHg2ODNhLAotCTB4Njg1YSwgMHgxMDc4LCAweDQ5ODIsIDB4MGQ3ZiwgMHgwMDdjLCAweDY3MDAsIDB4YTc4NiwgMHgwMDAwLAotCTB4MDA0MCwgMHg5ZWY4LCAweGE3ODYsIDB4MDAwMSwgMHgwMDQwLCAweDllZjgsIDB4YTc4NiwgMHgwMDBhLAotCTB4MDA0MCwgMHg5ZWY4LCAweGE3ODYsIDB4MDAwOSwgMHgwMDQwLCAweDllZjgsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDA3YywgMHgwZTdlLCAweDYwMTgsIDB4MjA3MCwgMHg3MGEwLCAweGEyMDYsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MDE3ZSwgMHg2MDA0LCAweGEwOGUsIDB4MDAxZSwgMHgwMGMwLCAweDlmMWEsIDB4ODAwNywgMHg2MTMwLAotCTB4YTE4YywgMHgwMGZmLCAweGExMDUsIDB4NjAzMiwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLAotCTB4NjAxZiwgMHgwMDA1LCAweDIwMDEsIDB4YTVhMSwgMHgyMDA0LCAweDYwMTYsIDB4MTA3OCwgMHg1YmY4LAotCTB4MTA3OCwgMHg2MTA5LCAweDAxN2YsIDB4MDA3YywgMHgwMDA1LCAweDAwMDUsIDB4MDA3YywgMHg2MDI0LAotCTB4ZDBlNCwgMHgwMDQwLCAweDlmMzAsIDB4ZDBjYywgMHgwMDQwLCAweDlmMmEsIDB4MTA3OCwgMHg4Y2ZhLAotCTB4MDA3OCwgMHg5ZjMwLCAweDEwNzgsIDB4YTEzNCwgMHgxMDc4LCAweDVhNDEsIDB4MTA3OCwgMHg3NTNkLAotCTB4MDA3YywgMHhhMjgwLCAweDAwMDcsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4MDA3OSwgMHg5ZjM4LAotCTB4OWY0MSwgMHg5ZjQxLCAweDlmNDEsIDB4OWY0MywgMHg5ZjQxLCAweDlmNDMsIDB4OWY0MywgMHg5ZjQxLAotCTB4OWY0MywgMHhhMDA2LCAweDAwN2MsIDB4YTA4NSwgMHgwMDAxLCAweDAwN2MsIDB4YTI4MCwgMHgwMDA3LAotCTB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4MDA3OSwgMHg5ZjRkLCAweDlmNTYsIDB4OWY1NiwgMHg5ZjU2LAotCTB4OWY1NiwgMHg5ZjU2LCAweDlmNTYsIDB4OWY2MSwgMHg5ZjU2LCAweDlmNTYsIDB4NjAwNywgMHgwMDNiLAotCTB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MmEwMCwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwgMHg1YmY4LAotCTB4MDA3YywgMHgwYzdlLCAweDIyNjAsIDB4MTA3OCwgMHhhMTM0LCAweDYwM2YsIDB4MDAwMCwgMHg2MDI0LAotCTB4YzBmNCwgMHhjMGNjLCAweDYwMjYsIDB4MGM3ZiwgMHgwZDdlLCAweDIyNjgsIDB4YTE4NiwgMHgwMDA3LAotCTB4MDBjMCwgMHg5ZmMyLCAweDY4MTAsIDB4YTAwNSwgMHgwMDQwLCAweDlmN2YsIDB4YTA4MCwgMHgwMDEzLAotCTB4MjAwNCwgMHhkMGZjLCAweDAwYzAsIDB4OWY3ZiwgMHgwZDdmLCAweDAwNzgsIDB4OWY1NiwgMHg2MDA3LAotCTB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwYzdlLAotCTB4MmQ2MCwgMHg2MTAwLCAweGExODYsIDB4MDAwMiwgMHgwMGMwLCAweGEwNTAsIDB4NjAxMCwgMHhhMDA1LAotCTB4MDBjMCwgMHg5Zjk5LCAweDYwMDAsIDB4YTA4NiwgMHgwMDA3LCAweDEwYzAsIDB4MTMyOCwgMHgwMDc4LAotCTB4YTA1MCwgMHhhMDhjLCAweGYwMDAsIDB4MDBjMCwgMHg5ZmE1LCAweDAwNzgsIDB4OWZhNSwgMHgyMDY4LAotCTB4NjgwMCwgMHhhMDA1LCAweDAwYzAsIDB4OWY5ZiwgMHgyZDAwLCAweGEwODAsIDB4MDAxMywgMHgyMDA0LAotCTB4YTA4NCwgMHgwMDAzLCAweGEwODYsIDB4MDAwMiwgMHgwMGMwLCAweDlmYmUsIDB4NjAxMCwgMHgyMDY4LAotCTB4Njg0YywgMHhjMGRjLCAweGMwZjQsIDB4Njg0ZSwgMHg2ODUwLCAweGMwZjQsIDB4YzBmYywgMHg2ODUyLAotCTB4MjAwOSwgMHgwMDQzLCAweDEwNzgsIDB4OThjMSwgMHgwMDc4LCAweGEwNTAsIDB4MjAwOSwgMHgwMDQxLAotCTB4MDA3OCwgMHhhMDRhLCAweGExODYsIDB4MDAwNSwgMHgwMGMwLCAweGEwMDksIDB4NjgxMCwgMHhhMDgwLAotCTB4MDAxMywgMHgyMDA0LCAweGQwYmMsIDB4MDBjMCwgMHg5ZmQwLCAweDBkN2YsIDB4MDA3OCwgMHg5ZjU2LAotCTB4ZDBiNCwgMHgwMDQwLCAweDlmZDgsIDB4ZDBmYywgMHgxMDQwLCAweDEzMjgsIDB4MDA3OCwgMHg5ZjcyLAotCTB4NjAwNywgMHgwMDNhLCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LAotCTB4MGM3ZSwgMHgyZDYwLCAweDYxMDAsIDB4YTE4NiwgMHgwMDAyLCAweDAwNDAsIDB4OWZlYiwgMHhhMTg2LAotCTB4MDAwNCwgMHgwMGMwLCAweGEwNTAsIDB4MjA3MSwgMHhhNWUxLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAzLAotCTB4MDBjMCwgMHg5ZmY4LCAweDcwMDQsIDB4YWMwNiwgMHgwMGMwLCAweDlmZjgsIDB4NzAwMywgMHgwMDAwLAotCTB4NjgxMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwYywgMHhjMWY0LCAweGMxZGMsIDB4MjEwMiwgMHg4MDAwLAotCTB4MjAwYywgMHhjMWY0LCAweGMxZmMsIDB4YzFiYywgMHgyMTAyLCAweDIwMDksIDB4MDA0MiwgMHgwMDc4LAotCTB4YTA0YSwgMHgwMzdlLCAweDBkN2UsIDB4MGQ3ZSwgMHgxMDc4LCAweDEzODEsIDB4MDM3ZiwgMHgxMDQwLAotCTB4MTMyOCwgMHg2ODM3LCAweDAxMGQsIDB4NjgwMywgMHgwMDAwLCAweDY4M2IsIDB4MDAwMCwgMHg2ODViLAotCTB4MDAwMCwgMHg2YjVlLCAweDY4NTcsIDB4MDA0NSwgMHgyYzAwLCAweDY4NjIsIDB4NjAzNCwgMHg2ODcyLAotCTB4MjM2MCwgMHg2MDI0LCAweGMwZGQsIDB4NjAyNiwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4YTA4NCwgMHgwMGZmLCAweDgwMDcsIDB4NjMyMCwgMHg2YjRhLCAweDY4NDYsIDB4Njg0ZiwgMHgwMDAwLAotCTB4NmQ2YSwgMHg2ZTY2LCAweDY4NmYsIDB4MDAwMSwgMHgxMDc4LCAweDQ5ODIsIDB4MjAxOSwgMHgwMDQ1LAotCTB4NjAwOCwgMHgyMDY4LCAweDEwNzgsIDB4OWE2YSwgMHgyZDAwLCAweDYwMGEsIDB4NjAxZiwgMHgwMDA2LAotCTB4NjAwMywgMHgwMDA3LCAweDYwMTcsIDB4MDAwMCwgMHg2MDNmLCAweDAwMDAsIDB4MGQ3ZiwgMHgwMzdmLAotCTB4MDA3OCwgMHhhMDUxLCAweDYwM2YsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDcsIDB4MTA3OCwgMHg5OGMxLAotCTB4MGM3ZiwgMHgwZDdmLCAweDAwN2MsIDB4YTE4NiwgMHgwMDEzLCAweDAwYzAsIDB4YTA1ZCwgMHg2MDA0LAotCTB4YTA4MiwgMHgwMDg1LCAweDIwMDgsIDB4MDA3OSwgMHhhMDc3LCAweGExODYsIDB4MDAyNywgMHgwMGMwLAotCTB4YTA3MCwgMHgxMDc4LCAweDYwMTAsIDB4MDM3ZSwgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwgMHgyMDE5LAotCTB4MDAwNCwgMHgxMDc4LCAweDllNzAsIDB4MGQ3ZiwgMHgwMzdmLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLAotCTB4YTE4NiwgMHgwMDE0LCAweDAwNDAsIDB4YTA2MSwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywgMHhhMDgwLAotCTB4YTA3ZSwgMHhhMDdlLCAweGEwN2UsIDB4YTA3ZSwgMHhhMDdlLCAweGEwODAsIDB4MTA3OCwgMHgxMzI4LAotCTB4MTA3OCwgMHg2MDEwLCAweDYwMDMsIDB4MDAwYywgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHhhMTgyLAotCTB4MDA4YywgMHgwMGM4LCAweGEwOTEsIDB4YTE4MiwgMHgwMDg1LCAweDAwNDgsIDB4YTA5MSwgMHgwMDc5LAotCTB4YTA5NCwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywgMHhhMDliLCAweGEwOWIsIDB4YTA5YiwgMHhhMDliLAotCTB4YTA5ZCwgMHhhMGJjLCAweGEwOWIsIDB4MTA3OCwgMHgxMzI4LCAweDBkN2UsIDB4MmM2OCwgMHgxMDc4LAotCTB4NzRkNywgMHgwMDQwLCAweGEwYjcsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAxZSwgMHgyMDA5LAotCTB4YTg4ZSwgMHgyMTBjLCAweDYxMzYsIDB4MjAwOSwgMHhhODhmLCAweDIxMGMsIDB4NjEzYSwgMHg2MDBiLAotCTB4ZmZmZiwgMHg2OTE4LCAweDYxMWEsIDB4NjAxZiwgMHgwMDA0LCAweDEwNzgsIDB4NWJmOCwgMHgyZDYwLAotCTB4MTA3OCwgMHg3NTNkLCAweDBkN2YsIDB4MDA3YywgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHgwZTdlLAotCTB4NjAxOCwgMHgyMDcwLCAweDcwMDAsIDB4ZDBlYywgMHgwZTdmLCAweDAwN2MsIDB4NjAxMCwgMHhhMDgwLAotCTB4MDAxMywgMHgyMDBjLCAweGQxZWMsIDB4MDA0MCwgMHhhMTEwLCAweDIwMDEsIDB4YTM3MSwgMHgyMDA0LAotCTB4ZDBlYywgMHgwMDQwLCAweGExMTAsIDB4NjAwMywgMHgwMDAyLCAweDYwMjQsIDB4YzBlNSwgMHg2MDI2LAotCTB4ZDFhYywgMHgwMDQwLCAweGEwZWUsIDB4MGY3ZSwgMHgyYzc4LCAweDEwNzgsIDB4NDg4ZiwgMHgwZjdmLAotCTB4MDA0MCwgMHhhMGVlLCAweDIwMDEsIDB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4MjAwOSwgMHhhMzcxLAotCTB4MjEwYywgMHhkMWY0LCAweDAwYzAsIDB4YTEwZSwgMHgwMDc4LCAweGExMDAsIDB4MjAwOSwgMHhhMzcxLAotCTB4MjEwYywgMHhkMWY0LCAweDAwNDAsIDB4YTBmYSwgMHg2MDI0LCAweGMwZTQsIDB4NjAyNiwgMHhhMDA2LAotCTB4MDA3OCwgMHhhMTEwLCAweDIwMDEsIDB4YTVhMiwgMHgyMDBjLCAweDgxMDMsIDB4YTEwMCwgMHg2MDNlLAotCTB4NjAxOCwgMHhhMDg4LCAweDAwMmIsIDB4MjEwNCwgMHhhMDA1LCAweDAwNDAsIDB4YTEwYiwgMHhhMDg4LAotCTB4MDAwMywgMHgwMDc4LCAweGExMDMsIDB4MmMwYSwgMHg2MDBmLCAweDAwMDAsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDA3YywgMHgwMTdlLCAweDBjN2UsIDB4MGU3ZSwgMHg2MTIwLCAweGEyZjAsIDB4MDAyYiwgMHgyZTA0LAotCTB4MjA2MCwgMHg4Y2ZmLCAweDAwNDAsIDB4YTEzMCwgMHg4NGZmLCAweDAwYzAsIDB4YTEyMywgMHg2MDIwLAotCTB4YTEwNiwgMHgwMGMwLCAweGExMmIsIDB4NjAwYywgMHgyMDcyLCAweDEwNzgsIDB4NWE0MSwgMHgxMDc4LAotCTB4NzUzZCwgMHgwMDc4LCAweGExMmQsIDB4YWNmMCwgMHgwMDAzLCAweDJlNjQsIDB4MDA3OCwgMHhhMTE5LAotCTB4MGU3ZiwgMHgwYzdmLCAweDAxN2YsIDB4MDA3YywgMHgwZDdlLCAweDYwMTgsIDB4YTBlOCwgMHgwMDJiLAotCTB4MmQwNCwgMHhhMDA1LCAweDAwNDAsIDB4YTE0NiwgMHhhYzA2LCAweDAwNDAsIDB4YTE0NCwgMHgyZDA0LAotCTB4YTBlOCwgMHgwMDAzLCAweDAwNzgsIDB4YTEzOCwgMHg2MDBjLCAweDIwNmEsIDB4MGQ3ZiwgMHgwMDdjLAotCTB4MDI3ZSwgMHgwMzdlLCAweDE1N2UsIDB4MjAxMSwgMHhhMzI1LCAweDIyMDQsIDB4YTA4NCwgMHgwMGZmLAotCTB4MjAxOSwgMHhhODhlLCAweDIzMzQsIDB4YTYzNiwgMHgwMGMwLCAweGExNzQsIDB4ODMxOCwgMHgyMzM0LAotCTB4MjIwNCwgMHhhMDg0LCAweGZmMDAsIDB4YTYzNiwgMHgwMGMwLCAweGExNzQsIDB4MjAxMSwgMHhhODkwLAotCTB4NjAxOCwgMHhhMDk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDEwNzgsIDB4N2U1NSwgMHgwMGMwLAotCTB4YTE3NCwgMHgyMDExLCAweGE4OTQsIDB4NjAxOCwgMHhhMDk4LCAweDAwMDYsIDB4MjBhOSwgMHgwMDA0LAotCTB4MTA3OCwgMHg3ZTU1LCAweDAwYzAsIDB4YTE3NCwgMHgxNTdmLCAweDAzN2YsIDB4MDI3ZiwgMHgwMDdjLAotCTB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4MTA3OCwgMHg0MWY1LCAweDEwNzgsIDB4MjYwZCwgMHgwZTdmLAotCTB4MDA3YywgMHgwZTdlLCAweDYwMTgsIDB4MjA3MCwgMHg3MDAwLCAweGQwZmMsIDB4MDA0MCwgMHhhMThhLAotCTB4MTA3OCwgMHhhMThjLCAweDBlN2YsIDB4MDA3YywgMHg2ODUwLCAweGMwZTUsIDB4Njg1MiwgMHgwMDdjLAotCTB4MGU3ZSwgMHgwYzdlLCAweDA3N2UsIDB4MDY3ZSwgMHgwNTdlLCAweDA0N2UsIDB4MDI3ZSwgMHgwMTdlLAotCTB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAyOSwgMHhhNWI0LCAweDI1MmMsIDB4MjAyMSwgMHhhNWJhLAotCTB4MjQyNCwgMHgyMDYxLCAweGFhMDAsIDB4MjA3MSwgMHhhMzAwLCAweDc2NDQsIDB4NzA2MCwgMHhhNjA2LAotCTB4MDA0MCwgMHhhMWU0LCAweDY3MWMsIDB4YTc4NiwgMHgwMDAxLCAweDAwNDAsIDB4YTFiMywgMHhhNzg2LAotCTB4MDAwOCwgMHgwMGMwLCAweGExZGEsIDB4MjUwMCwgMHhhYzA2LCAweDAwNDAsIDB4YTFkYSwgMHgyNDAwLAotCTB4YWMwNiwgMHgwMDQwLCAweGExZGEsIDB4MTA3OCwgMHg5ZWU1LCAweDAwNDAsIDB4YTFkYSwgMHgxMDc4LAotCTB4OWVmOSwgMHgwMGMwLCAweGExZGEsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwgMHhhMWNjLAotCTB4MDE3ZSwgMHgxMDc4LCAweDE3NDksIDB4MDE3ZiwgMHgxMDc4LCAweDhjMjcsIDB4MDBjMCwgMHhhMWQyLAotCTB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4OGMzYiwgMHgwMGMwLCAweGExZDgsIDB4MTA3OCwgMHg3YTA1LAotCTB4MTA3OCwgMHg4YzAxLCAweGFjZTAsIDB4MDAxMCwgMHgyMDAxLCAweGEzMTUsIDB4MjAwNCwgMHhhYzAyLAotCTB4MDBjOCwgMHhhMWU0LCAweDAwNzgsIDB4YTFhMywgMHgxMjdmLCAweDAxN2YsIDB4MDI3ZiwgMHgwNDdmLAotCTB4MDU3ZiwgMHgwNjdmLCAweDA3N2YsIDB4MGM3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MTI3ZSwgMHgwMDdlLAotCTB4MGU3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhMzQwLCAweGQ1YTQsIDB4MDA0MCwgMHhhMWZiLAotCTB4NzAzNCwgMHg4MDAwLCAweDcwMzYsIDB4ZDViNCwgMHgwMDQwLCAweGEyMDEsIDB4NzAzMCwgMHg4MDAwLAotCTB4NzAzMiwgMHhkNWFjLCAweDAwNDAsIDB4YTIwOCwgMHgyMDcxLCAweGEzNGEsIDB4MTA3OCwgMHhhMjM3LAotCTB4MGU3ZiwgMHgwMDdmLCAweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDAwN2UsIDB4MGU3ZSwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDcxLCAweGEzNDAsIDB4ZDVhNCwgMHgwMDQwLCAweGEyMTksIDB4NzAzNCwgMHg4MDAwLAotCTB4NzAzNiwgMHhkNWI0LCAweDAwNDAsIDB4YTIxZiwgMHg3MDMwLCAweDgwMDAsIDB4NzAzMiwgMHhkNWFjLAotCTB4MDA0MCwgMHhhMjI2LCAweDIwNzEsIDB4YTM0YSwgMHgxMDc4LCAweGEyMzcsIDB4MGU3ZiwgMHgwMDdmLAotCTB4MTI3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MDA3ZSwgMHgwZTdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAotCTB4YTM0MiwgMHgxMDc4LCAweGEyMzcsIDB4MGU3ZiwgMHgwMDdmLCAweDEyN2YsIDB4MDA3YywgMHgyZTA0LAotCTB4ODAwMCwgMHgyMDcyLCAweDAwYzgsIDB4YTI0MCwgMHg4ZTcwLCAweDJlMDQsIDB4ODAwMCwgMHgyMDcyLAotCTB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTM0MCwgMHgxMDc4LCAweGEyMzcsIDB4MGU3ZiwgMHgwMDdjLAotCTB4MGU3ZSwgMHgyMDcxLCAweGEzNDQsIDB4MTA3OCwgMHhhMjM3LCAweDBlN2YsIDB4MDA3YywgMHgwMDAxLAotCTB4MDAwMiwgMHgwMDA0LCAweDAwMDgsIDB4MDAxMCwgMHgwMDIwLCAweDAwNDAsIDB4MDA4MCwgMHgwMTAwLAotCTB4MDIwMCwgMHgwNDAwLCAweDA4MDAsIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAsIDB4ODAwMCwgMHg2Mjg2Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCQkJCQkJCSoKLSAqICAgICAgICAgICAgICAgLS0tIElTUDIyMDAgSW5pdGlhdG9yL1RhcmdldCBGaXJtd2FyZSAtLS0gICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgIHdpdGggRmFicmljIChQdWJsaWMgTG9vcCksIFBvaW50LXBvaW50LCBhbmQgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgIGV4cGFuZGVkIExVTiBhZGRyZXNzaW5nIGZvciBGQ1RBUEUgICAgICAgICAgICAgICAgICAgICAgICoKLSAqCQkJCQkJCQkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBDb3B5cmlnaHQgKEMpIDIwMDAgYW5kIDIxMDAgUWxvZ2ljIENvcnBvcmF0aW9uIAotICAod3d3LnFsb2dpYy5jb20pCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqCUZpcm13YXJlIFZlcnNpb24gMi4wMS4yNyAoMTE6MDcgRGVjIDE4LCAyMDAwKQotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCByaXNjX2NvZGVfbGVuZ3RoMjIwMCA9IDB4OWNiZjsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCByaXNjX2NvZGUyMjAwW10gPSB7IAotCTB4MDQ3MCwgMHgwMDAwLCAweDAwMDAsIDB4OWNiZiwgMHgwMDAwLCAweDAwMDIsIDB4MDAwMSwgMHgwMDFiLAotCTB4MDAxNywgMHgyMDQzLCAweDRmNTAsIDB4NTk1MiwgMHg0OTQ3LCAweDQ4NTQsIDB4MjAzMSwgMHgzOTM5LAotCTB4MzkyMCwgMHg1MTRjLCAweDRmNDcsIDB4NDk0MywgMHgyMDQzLCAweDRmNTIsIDB4NTA0ZiwgMHg1MjQxLAotCTB4NTQ0OSwgMHg0ZjRlLCAweDIwNDksIDB4NTM1MCwgMHgzMjMyLCAweDMwMzAsIDB4MjA0NiwgMHg2OTcyLAotCTB4NmQ3NywgMHg2MTcyLCAweDY1MjAsIDB4MjA1NiwgMHg2NTcyLCAweDczNjksIDB4NmY2ZSwgMHgyMDMwLAotCTB4MzIyZSwgMHgzMDMxLCAweDJlMzIsIDB4MzcyMCwgMHgyMDIwLCAweDIwMjAsIDB4MjQwMCwgMHgyMGMxLAotCTB4MDAwNSwgMHgyMDAxLCAweDAxN2YsIDB4MjAwMywgMHgwMDAwLCAweDIwYzksIDB4YjFmZiwgMHgyMDkxLAotCTB4MjAwMCwgMHgyMDU5LCAweDAwMDAsIDB4MmI3OCwgMHg3ODIzLCAweDAwMDQsIDB4MjA4OSwgMHgyN2I1LAotCTB4MjA1MSwgMHhhZDAwLCAweDJhNzAsIDB4MjAyOSwgMHhlNDAwLCAweDIwMzEsIDB4ZmZmZiwgMHgyMDM5LAotCTB4ZTNlOSwgMHgyMDIxLCAweDAyMDAsIDB4MDgwNCwgMHgxNDQ5LCAweDIwYTEsIDB4YWNiZiwgMHhhMDBlLAotCTB4MjBhOSwgMHgwNzQxLCAweDQxYTQsIDB4MzQwMCwgMHg3NTVlLCAweDc2NjIsIDB4Nzc1YSwgMHg3NDY2LAotCTB4NzQ2YSwgMHgyMGExLCAweGI0MDAsIDB4NzE2MCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwgMHg4MTBkLAotCTB4YTE4YywgMHgwMDBmLCAweDIwMDEsIDB4MDAwYiwgMHhhMTEyLCAweGEwMGUsIDB4MjFhOCwgMHg0MWE0LAotCTB4MzQwMCwgMHg4MjExLCAweDFkZDgsIDB4NzE2MCwgMHgzNDAwLCAweGExMDIsIDB4MDEyMCwgMHgwMjE4LAotCTB4MjBhOCwgMHhhMDBlLCAweDQxYTQsIDB4MzgwMCwgMHhkMDhjLCAweDAxZDgsIDB4MjAwOSwgMHhhZDAwLAotCTB4ODEwZCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwgMHhhMThjLCAweDAwMGYsIDB4MjAwMSwgMHgwMDAxLAotCTB4YTExMiwgMHgyMGExLCAweDEwMDAsIDB4YTAwZSwgMHgyMWE4LCAweDQxYTQsIDB4ODIxMSwgMHgxZGUwLAotCTB4MjAwOSwgMHhhZDAwLCAweDM0MDAsIDB4YTEwMiwgMHgwMTIwLCAweDAyMTgsIDB4MjBhOCwgMHhhMDBlLAotCTB4NDFhNCwgMHgwODBjLCAweDEzZmMsIDB4MDgwYywgMHgxNjEzLCAweDA4MGMsIDB4MTdhYywgMHgwODBjLAotCTB4MWU2NywgMHgwODBjLCAweDQ5MmUsIDB4MDgwYywgMHg4MDFhLCAweDA4MGMsIDB4MTU5YywgMHgwODBjLAotCTB4MmNlNiwgMHgwODBjLCAweDVhMDEsIDB4MDgwYywgMHg1MDQ1LCAweDA4MGMsIDB4NjQ4NywgMHgwODBjLAotCTB4MjM2YSwgMHgwODBjLCAweDY2ODYsIDB4MDgwYywgMHg1ZmFlLCAweDA4MGMsIDB4MjI2YiwgMHgwODBjLAotCTB4MjMzOCwgMHgyMDkxLCAweDMwMDksIDB4NzgyMywgMHgwMDAwLCAweDEwMDQsIDB4MTBjNSwgMHg3ODIwLAotCTB4YTA4NiwgMHgwMDAyLCAweDExNTAsIDB4NzgyMywgMHg0MDAwLCAweDBlMDQsIDB4MTBiZCwgMHg3ODFiLAotCTB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4MjA5MSwgMHg0MDgwLCAweDJhNzAsIDB4NzAwMywgMHgwMDAwLAotCTB4MmE3MCwgMHg3MDAwLCAweGEwOGUsIDB4MDAwMywgMHgxMTU4LCAweDA4MGMsIDB4M2M5OCwgMHgwODBjLAotCTB4MmQwZCwgMHgwODBjLCAweDVhNGYsIDB4MDgwYywgMHg1MWY0LCAweDA4MGMsIDB4NjRhMiwgMHgwYzgwLAotCTB4MDAwYiwgMHgwYzk4LCAweDEwZTQsIDB4MTBlNSwgMHgxMjAzLCAweDEwZTIsIDB4MTJjYywgMHgxM2Y5LAotCTB4MTNmYSwgMHgxM2ZiLCAweDA4MGMsIDB4MTRmNiwgMHgwMDA1LCAweDAxMjYsIDB4MDBmNiwgMHgyMDkxLAotCTB4ODAwMCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMSwgMHgxOTA0LCAweDExZDEsIDB4MDgwYywgMHgxNTY5LAotCTB4MDgwYywgMHg1NzRmLCAweDAxNTAsIDB4MDgwYywgMHg1Nzc1LCAweDE1ODAsIDB4MjA3OSwgMHgwMTAwLAotCTB4NzgyOCwgMHhhMDg1LCAweDE4MDAsIDB4NzgyYSwgMHgwNDQ4LCAweDA4MGMsIDB4NTY5YSwgMHg3MDAwLAotCTB4YTA4NiwgMHgwMDAxLCAweDE5MDQsIDB4MTFkMSwgMHg3MDg4LCAweGEwODYsIDB4MDAyOCwgMHgxOTA0LAotCTB4MTFkMSwgMHgyMDc5LCAweDAxMDAsIDB4NzgyNywgMHhmZmZmLCAweDdhMjgsIDB4YTI5NSwgMHgxZTJmLAotCTB4N2EyYSwgMHgyMDExLCAweDU2NmUsIDB4MDgwYywgMHg2NTBkLCAweDIwMTEsIDB4NTY3YiwgMHgwODBjLAotCTB4NjUwZCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweDIwMTEsIDB4ODAzMCwgMHgyMDE5LAotCTB4MDAwMCwgMHg3MDg3LCAweDAwMDAsIDB4MDgwYywgMHgxZDBmLCAweDAwZTgsIDB4MDgwYywgMHg0MWQxLAotCTB4MjA3OSwgMHgwMTAwLCAweDc4NDQsIDB4YTAwNSwgMHgxOTA0LCAweDExZDEsIDB4MjAxMSwgMHg0ODFiLAotCTB4MDgwYywgMHg2NTBkLCAweDIwMTEsIDB4NTY3YiwgMHgwODBjLCAweDY1MGQsIDB4MDgwYywgMHgxZDBmLAotCTB4MjAwMSwgMHhhZjhjLCAweDIwMDQsIDB4NzgwZSwgMHg3ODQwLCAweGEwODQsIDB4ZmZmYiwgMHg3ODQyLAotCTB4MjAxMSwgMHg4MDEwLCAweDczYzgsIDB4MDgwYywgMHgzYzVjLCAweDcyMzgsIDB4YzI4NCwgMHg3MjNhLAotCTB4MjAwMSwgMHhhZDBjLCAweDIwMGMsIDB4YzFhYywgMHgyMTAyLCAweDA4MGMsIDB4NzliZCwgMHgyMDExLAotCTB4MDAwNCwgMHgwODBjLCAweDk1OWMsIDB4MDgwYywgMHg0ZjcxLCAweDA4MGMsIDB4NTc0ZiwgMHgwMTU4LAotCTB4MDgwYywgMHg0OTE3LCAweDAxNDAsIDB4NzA4NywgMHgwMDAxLCAweDcwYzMsIDB4MDAwMCwgMHgwODBjLAotCTB4NDM2ZSwgMHgwODA0LCAweDExZDEsIDB4MDgwYywgMHg1MDJkLCAweDAxMjAsIDB4N2EwYywgMHhjMmI0LAotCTB4N2EwZSwgMHgwMDUwLCAweDA4MGMsIDB4OTkzNywgMHg3MGQwLCAweGQwOWMsIDB4MTEyOCwgMHg3MDljLAotCTB4YTAwNSwgMHgwMTEwLCAweDA4MGMsIDB4NDhmNSwgMHg3MGRiLCAweDAwMDAsIDB4NzBkNywgMHgwMDAwLAotCTB4NzJkMCwgMHgwODBjLCAweDU3NGYsIDB4MTE3OCwgMHgyMDExLCAweDAwMDAsIDB4MDAxNiwgMHgwODBjLAotCTB4Mjc0NCwgMHgyMDE5LCAweGFmOGUsIDB4MjExYSwgMHgwMDFlLCAweDcwNGYsIDB4ZmZmZiwgMHg3MDUzLAotCTB4MDBlZiwgMHg3MDczLCAweDAwMDAsIDB4MjA3OSwgMHhhZDUxLCAweDc4MDQsIDB4ZDBhYywgMHgwMTA4LAotCTB4YzI5NSwgMHg3MmQyLCAweDA4MGMsIDB4NTc0ZiwgMHgwMTE4LCAweGEyOTYsIDB4MDAwNCwgMHgwNTA4LAotCTB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4OTU5YywgMHg3MDk3LCAweDAwMDAsIDB4NzA5YiwgMHhmZmZmLAotCTB4NzAwMywgMHgwMDAyLCAweDAwZmUsIDB4MDgwYywgMHgyOGZhLCAweDIwMTEsIDB4MDAwNSwgMHgwODBjLAotCTB4N2FkZiwgMHgwODBjLCAweDZjNTAsIDB4MDgwYywgMHg1NzRmLCAweDAxNDgsIDB4MDBjNiwgMHgyMDYxLAotCTB4MDEwMCwgMHgwMDE2LCAweDA4MGMsIDB4Mjc0NCwgMHg2MWUyLCAweDAwMWUsIDB4MDBjZSwgMHgwMTJlLAotCTB4MDBkMCwgMHg3MDk3LCAweDAwMDAsIDB4NzA5YiwgMHhmZmZmLCAweDcwMDMsIDB4MDAwMiwgMHgyMDExLAotCTB4MDAwNSwgMHgwODBjLCAweDdhZGYsIDB4MDgwYywgMHg2YzUwLCAweDA4MGMsIDB4NTc0ZiwgMHgwMTQ4LAotCTB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4MDAxNiwgMHgwODBjLCAweDI3NDQsIDB4NjFlMiwgMHgwMDFlLAotCTB4MDBjZSwgMHgwMGZlLCAweDAxMmUsIDB4MDAwNSwgMHgwMGM2LCAweDA4MGMsIDB4NTc0ZiwgMHgxMTE4LAotCTB4MjBhOSwgMHgwMTAwLCAweDAwMTAsIDB4MjBhOSwgMHgwMDgyLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTE4LAotCTB4MjAwOSwgMHgwMDAwLCAweDAwMTAsIDB4MjAwOSwgMHgwMDdlLCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LAotCTB4MjExMCwgMHgwMDI2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDdjZjQsIDB4MDAyZSwgMHgwODBjLAotCTB4YWMwNywgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwODBjLCAweDJiYzksIDB4ODEwOCwgMHgxZjA0LAotCTB4MTFlNSwgMHgwMGNlLCAweDcwNmYsIDB4MDAwMCwgMHg3MDcwLCAweGEwODQsIDB4MDBmZiwgMHg3MDcyLAotCTB4NzA5ZiwgMHgwMDAwLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwMCwgMHhhMDg2LAotCTB4MDAwMiwgMHgxOTA0LCAweDEyY2EsIDB4NzA5OCwgMHhhMDg2LCAweGZmZmYsIDB4MDEzMCwgMHgwODBjLAotCTB4MjhmYSwgMHgwODBjLCAweDZjNTAsIDB4MDgwNCwgMHgxMmNhLCAweDcwZDAsIDB4ZDBhYywgMHgxMTEwLAotCTB4ZDA5YywgMHgwNTQwLCAweGQwODQsIDB4MDUzMCwgMHgwMDA2LCAweDAwMTYsIDB4MjAwMSwgMHgwMTAzLAotCTB4MjAwOSwgMHhhZjhjLCAweDIxMGMsIDB4MjEwMiwgMHgwMDFlLCAweDAwMGUsIDB4ZDA4YywgMHgwMWQwLAotCTB4NzBkNCwgMHhhMDg2LCAweGZmZmYsIDB4MDE5MCwgMHgwODBjLCAweDJhNTYsIDB4MDgwYywgMHg2YzUwLAotCTB4NzBkMCwgMHhkMDk0LCAweDE5MDQsIDB4MTJjYSwgMHgyMDExLCAweDAwMDEsIDB4MjAxOSwgMHgwMDAwLAotCTB4MDgwYywgMHgyYThjLCAweDA4MGMsIDB4NmM1MCwgMHgwODA0LCAweDEyY2EsIDB4NzBkOCwgMHhhMDA1LAotCTB4MTkwNCwgMHgxMmNhLCAweDcwOTQsIDB4YTAwNSwgMHgxOTA0LCAweDEyY2EsIDB4NzBkMCwgMHhkMGE0LAotCTB4MDExOCwgMHhkMGI0LCAweDA5MDQsIDB4MTJjYSwgMHgwODBjLCAweDUwMmQsIDB4MTkwNCwgMHgxMmNhLAotCTB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhYywgMHgwMWM4LCAweDAxNTYsIDB4MDBjNiwgMHgyMGE5LAotCTB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDAxNiwgMHgwODBjLCAweDRjZGMsIDB4MTExOCwgMHg2MDAwLAotCTB4ZDBlYywgMHgxMTM4LCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDEyNWIsIDB4MDBjZSwgMHgwMTVlLAotCTB4MDAyOCwgMHgwMDFlLCAweDAwY2UsIDB4MDE1ZSwgMHgwODA0LCAweDEyY2EsIDB4MDAwNiwgMHgwMDE2LAotCTB4MjAwMSwgMHgwMTAzLCAweDIwMDksIDB4YWY4YywgMHgyMTBjLCAweDIxMDIsIDB4MDAxZSwgMHgwMDBlLAotCTB4YTAwNiwgMHgyMDA5LCAweDA3MDAsIDB4MjBhOSwgMHgwMDAyLCAweDIwYTEsIDB4YWZiNSwgMHg0MGExLAotCTB4NzA2YywgMHg4MDA3LCAweDcxNzAsIDB4ODEwZiwgMHgyMGE5LCAweDAwMDIsIDB4NDBhMSwgMHgyMDA5LAotCTB4MDAwMCwgMHgwODBjLCAweDE0ZGMsIDB4MjAwMSwgMHgwMDAwLCAweDgxMGYsIDB4MjBhOSwgMHgwMDAyLAotCTB4NDBhMSwgMHhhMDA2LCAweDIwMDksIDB4MDIwMCwgMHgyMGE5LCAweDAwMDIsIDB4MjBhMSwgMHhhZmM1LAotCTB4NDBhMSwgMHg3MDMwLCAweGMwOGMsIDB4NzAzMiwgMHg3MDAzLCAweDAwMDMsIDB4NzA5YiwgMHhmZmZmLAotCTB4MDgwYywgMHgxNTYyLCAweGEwMDYsIDB4MDgwYywgMHgyNjFlLCAweDA4MGMsIDB4M2NjZSwgMHgwMGY2LAotCTB4MjA3OSwgMHgwMTAwLCAweDA4MGMsIDB4NTc3NSwgMHgwMTUwLCAweDA4MGMsIDB4NTc0ZiwgMHg3ODI4LAotCTB4MDExOCwgMHhhMDg0LCAweGUxZmYsIDB4MDAxMCwgMHhhMDg0LCAweGZmZGYsIDB4NzgyYSwgMHgwMGZlLAotCTB4MjAwMSwgMHhhZmM4LCAweDIwMDQsIDB4YTA4NiwgMHgwMDA1LCAweDExMjAsIDB4MjAxMSwgMHgwMDAwLAotCTB4MDgwYywgMHg3YWRmLCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweDdhZTksIDB4MDgwYywgMHg2YzUwLAotCTB4MDgwYywgMHg2ZDBkLCAweDAxMmUsIDB4MDAwNSwgMHgwMDE2LCAweDAwNDYsIDB4MDBmNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDEwMCwgMHgyMDA5LCAweGFkMzMsIDB4MjEwNCwgMHhhMDA1LAotCTB4MTExMCwgMHgwODBjLCAweDI3NzAsIDB4MjAwOSwgMHgwMGY3LCAweDA4MGMsIDB4NDhkZSwgMHg3OTQwLAotCTB4YTE4YywgMHgwMDEwLCAweDc5NDIsIDB4NzkyNCwgMHhkMWI0LCAweDAxMTAsIDB4NzgyNywgMHgwMDQwLAotCTB4ZDE5YywgMHgwMTEwLCAweDc4MjcsIDB4MDAwOCwgMHgwMDA2LCAweDAwMzYsIDB4MDE1NiwgMHg3OTU0LAotCTB4ZDFhYywgMHgxOTA0LCAweDEzM2EsIDB4MDgwYywgMHg1NzYxLCAweDAxNTgsIDB4MDgwYywgMHg1Nzc1LAotCTB4MTEyOCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywgMHgwMDAwLCAweDAwNzAsIDB4MDgwYywgMHg1NzU3LAotCTB4MGRjMCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywgMHhhYWFhLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLAotCTB4MDAwMSwgMHgwODBjLCAweDU2OWEsIDB4MDA1OCwgMHgwODBjLCAweDU3NGYsIDB4MDE0MCwgMHgyMDA5LAotCTB4MDBmOCwgMHgwODBjLCAweDQ4ZGUsIDB4Nzg0MywgMHgwMDkwLCAweDc4NDMsIDB4MDAxMCwgMHgyMGE5LAotCTB4MDljNCwgMHg3ODIwLCAweGQwOWMsIDB4MTEzOCwgMHgwODBjLCAweDU3NGYsIDB4MDEzOCwgMHg3ODI0LAotCTB4ZDBhYywgMHgxOTA0LCAweDEzZTAsIDB4MWYwNCwgMHgxMzE5LCAweDAwNzAsIDB4NzgyNCwgMHgwODBjLAotCTB4NTc2YiwgMHgwMTE4LCAweGQwYWMsIDB4MTkwNCwgMHgxM2UwLCAweGEwODQsIDB4MTgwMCwgMHgwZDk4LAotCTB4NzAwMywgMHgwMDAxLCAweDA4MDQsIDB4MTNlMCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjFlLAotCTB4MDgwNCwgMHgxM2VmLCAweDc4NTAsIDB4YTA4NCwgMHgwMTgwLCAweDc4NTIsIDB4NzgyZiwgMHgwMDIwLAotCTB4MjBhOSwgMHgwMDQ2LCAweDFkMDQsIDB4MTM0MiwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHgxMzQyLAotCTB4Nzg1MCwgMHhhMDg0LCAweDAxODAsIDB4YTA4NSwgMHgwNDAwLCAweDc4NTIsIDB4NzgyZiwgMHgwMDAwLAotCTB4MDgwYywgMHg1NzYxLCAweDAxNTgsIDB4MDgwYywgMHg1Nzc1LCAweDExMjgsIDB4MjAwMSwgMHhhZjlkLAotCTB4MjAwMywgMHgwMDAwLCAweDAwNzAsIDB4MDgwYywgMHg1NzU3LCAweDBkYzAsIDB4MjAwMSwgMHhhZjlkLAotCTB4MjAwMywgMHhhYWFhLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywgMHg1NjlhLAotCTB4MDAyMCwgMHgyMDA5LCAweDAwZjgsIDB4MDgwYywgMHg0OGRlLCAweDIwYTksIDB4MDAwZSwgMHhlMDAwLAotCTB4MWYwNCwgMHgxMzZmLCAweDc4NTAsIDB4YTA4NCwgMHgwMTgwLCAweGEwODUsIDB4MTQwMCwgMHg3ODUyLAotCTB4MDgwYywgMHg1NzRmLCAweDAxMjAsIDB4Nzg0MywgMHgwMDkwLCAweDc4NDMsIDB4MDAxMCwgMHgyMDIxLAotCTB4ZTY3OCwgMHgyMDE5LCAweGVhNjAsIDB4NzgyMCwgMHhkMDljLCAweDE1NTgsIDB4MDgwYywgMHg1NzRmLAotCTB4MDViOCwgMHg3ODI0LCAweGQwYWMsIDB4MTkwNCwgMHgxM2UwLCAweDA4MGMsIDB4NTc3NSwgMHgxNTA4LAotCTB4MDA0NiwgMHgyMDIxLCAweDAxOTAsIDB4ODQyMSwgMHgxZGYwLCAweDAwNGUsIDB4ODQyMSwgMHgxMWM4LAotCTB4NzgyNywgMHgwMDQ4LCAweDIwYTksIDB4MDFmNCwgMHgxZDA0LCAweDEzOWMsIDB4MjA5MSwgMHg2MDAwLAotCTB4MWYwNCwgMHgxMzljLCAweDc4MjQsIDB4YTA4NCwgMHgwMDY4LCAweDE1YTgsIDB4MjAwMSwgMHhhZjlkLAotCTB4MjAwMywgMHhhYWFhLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4NzAwMywgMHgwMDAxLAotCTB4MDQ3OCwgMHg4MzE5LCAweDE5ODAsIDB4MjAwOSwgMHhhZDMzLCAweDIxMDQsIDB4ODAwMCwgMHgyMDBhLAotCTB4YTA4NCwgMHhmZmYwLCAweDAxMjAsIDB4MjAwYiwgMHgwMDAwLCAweDA4MGMsIDB4Mjc3MCwgMHgwMGQ4LAotCTB4MDgwYywgMHg1NzYxLCAweDExNDAsIDB4YTRhMiwgMHgwMDY0LCAweDExMjgsIDB4MDgwYywgMHg1NzI2LAotCTB4NzAwMywgMHgwMDAxLCAweDAwYTgsIDB4NzgyNywgMHgxODAwLCAweGUwMDAsIDB4ZTAwMCwgMHg3ODI0LAotCTB4MDgwYywgMHg1NzZiLCAweDAxMTAsIDB4ZDBhYywgMHgxMTU4LCAweGEwODQsIDB4MTgwMCwgMHgwOWM4LAotCTB4NzAwMywgMHgwMDAxLCAweDAwMjgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjYxZSwgMHgwMDQ4LAotCTB4MjAwMSwgMHhhZDMzLCAweDIwMDMsIDB4MDAwMCwgMHg3ODI3LCAweDAwNDgsIDB4NzgyOCwgMHhjMDlkLAotCTB4NzgyYSwgMHg3ODUwLCAweGEwODQsIDB4MDE4MCwgMHhhMDg1LCAweDA0MDAsIDB4Nzg1MiwgMHgwMTVlLAotCTB4MDAzZSwgMHgwMDBlLCAweDA4MGMsIDB4MTUzOSwgMHgwMTJlLCAweDAwZmUsIDB4MDA0ZSwgMHgwMDFlLAotCTB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwgMHgyYTcwLCAweDIwMDEsIDB4YWY5ZCwgMHgyMDAzLAotCTB4MDAwMCwgMHg3MDg3LCAweDAwMDAsIDB4MjAwOSwgMHgwMTAwLCAweDIxMDQsIDB4YTA4MiwgMHgwMDAyLAotCTB4MDIxOCwgMHg3MDRmLCAweGZmZmYsIDB4MDAxMCwgMHg3MDRmLCAweDAwMDAsIDB4NzA1NywgMHhmZmZmLAotCTB4NzA2ZiwgMHgwMDAwLCAweDcwNzMsIDB4MDAwMCwgMHgwODBjLCAweDk5MzcsIDB4MjA2MSwgMHhhZjhkLAotCTB4NjAwMywgMHgwOTA5LCAweDYwMDcsIDB4MDAwMCwgMHg2MDBiLCAweDg4MDAsIDB4NjAwZiwgMHgwMjAwLAotCTB4NjAxMywgMHgwMGZmLCAweDYwMTcsIDB4MDAwMywgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwgMHgwN2QwLAotCTB4MjA2MSwgMHhhZjk1LCAweDYwMDMsIDB4ODAwMCwgMHg2MDA3LCAweDAwMDAsIDB4NjAwYiwgMHgwMDAwLAotCTB4NjAwZiwgMHgwMjAwLCAweDYwMTMsIDB4MDBmZiwgMHg2MDE3LCAweDAwMDAsIDB4NjAxYiwgMHgwMDAxLAotCTB4NjAxZiwgMHgwMDAwLCAweDIwNjEsIDB4YWZhNiwgMHg2MDAzLCAweDUxNGMsIDB4NjAwNywgMHg0ZjQ3LAotCTB4NjAwYiwgMHg0OTQzLCAweDYwMGYsIDB4MjAyMCwgMHgyMDAxLCAweGFkMjcsIDB4MjAwMywgMHgwMDAwLAotCTB4MDAwNSwgMHgwNGEwLCAweDIwMTEsIDB4MDAwMCwgMHg4MWZmLCAweDA1NzAsIDB4YTE4NiwgMHgwMDAxLAotCTB4MTE0OCwgMHgyMDMxLCAweDhmZmYsIDB4MjAzOSwgMHhjYzAxLCAweDIwMjEsIDB4MDEwMCwgMHgyMDI5LAotCTB4Y2MwMCwgMHgwMGU4LCAweGExODYsIDB4MDAwMiwgMHgxMTE4LCAweDIwMTEsIDB4MDAwMCwgMHgwMGI4LAotCTB4YTE4NiwgMHgwMDA1LCAweDExMTgsIDB4MjAxMSwgMHgwMDAxLCAweDAwODgsIDB4YTE4NiwgMHgwMDA5LAotCTB4MTExOCwgMHgyMDExLCAweDAwMDIsIDB4MDA1OCwgMHhhMTg2LCAweDAwMGEsIDB4MTExOCwgMHgyMDExLAotCTB4MDAwMiwgMHgwMDI4LCAweGExODYsIDB4MDA1NSwgMHgxMTEwLCAweDIwMTEsIDB4MDAwMywgMHgzODAwLAotCTB4YTA4NCwgMHhmZmZjLCAweGEyMDUsIDB4MjBjMCwgMHgwODA0LCAweDEwNGQsIDB4YTAwZSwgMHgyMDExLAotCTB4MDAwMywgMHgyMDE5LCAweDE0ODUsIDB4MDgwNCwgMHgxNGQ2LCAweDIwMTksIDB4YWFhYSwgMHgyMDYxLAotCTB4ZmZmZiwgMHgyYzE0LCAweDIzNjIsIDB4ZTAwMCwgMHhlMDAwLCAweDJjMDQsIDB4YTMwNiwgMHgyMjYyLAotCTB4MTExMCwgMHhjMWI1LCAweGMxYTUsIDB4MjAxMSwgMHgwMDAwLCAweDIwMTksIDB4MTQ5OCwgMHgwNGYwLAotCTB4MjAxOSwgMHhhYWFhLCAweDIwNjEsIDB4ZmZmZiwgMHgyYzE0LCAweDIzNjIsIDB4ZTAwMCwgMHhlMDAwLAotCTB4MmMxYywgMHgyMDYxLCAweDdmZmYsIDB4ZTAwMCwgMHhlMDAwLCAweDJjMDQsIDB4MjA2MSwgMHhmZmZmLAotCTB4MjI2MiwgMHhhMzA2LCAweDAxMTAsIDB4YzE4ZCwgMHgwMDA4LCAweGMxODUsIDB4MjAxMSwgMHgwMDAyLAotCTB4MjAxOSwgMHgxNGIzLCAweDA0MTgsIDB4MjA2MSwgMHhmZmZmLCAweDIwMTksIDB4YWFhYSwgMHgyYzE0LAotCTB4MjM2MiwgMHhlMDAwLCAweGUwMDAsIDB4MmMwNCwgMHgyMjYyLCAweGEzMDYsIDB4MTE4MCwgMHgyYzE0LAotCTB4MjM2MiwgMHhlMDAwLCAweGUwMDAsIDB4MmMxYywgMHgyMDYxLCAweDdmZmYsIDB4MmMwNCwgMHgyMDYxLAotCTB4ZmZmZiwgMHgyMjYyLCAweGEzMDYsIDB4MTExMCwgMHhjMTk1LCAweDAwMDgsIDB4YzE5ZCwgMHgyMDExLAotCTB4MDAwMSwgMHgyMDE5LCAweDE0ZDQsIDB4MDAxMCwgMHgwODA0LCAweDE0NGEsIDB4MzgwMCwgMHhhMDg0LAotCTB4ZmZmYywgMHhhMjA1LCAweDIwYzAsIDB4MDgzNywgMHgyMDExLCAweDAwMDAsIDB4MDgwYywgMHg0Y2RjLAotCTB4MTE3OCwgMHg2MDA0LCAweGEwYzQsIDB4MDBmZiwgMHhhOGM2LCAweDAwMDYsIDB4MDEyOCwgMHhhMGM0LAotCTB4ZmYwMCwgMHhhOGM2LCAweDA2MDAsIDB4MTEyMCwgMHhhMTg2LCAweDAwODAsIDB4MDEwOCwgMHg4MjEwLAotCTB4ODEwOCwgMHhhMTg2LCAweDAxMDAsIDB4MWQ1MCwgMHgyMjA4LCAweDAwMDUsIDB4MjA5MSwgMHg4MDAwLAotCTB4MGUwNCwgMHgxNGY4LCAweDAwMDYsIDB4MDAxNiwgMHgyMDc5LCAweDAwMDAsIDB4NzgxOCwgMHhkMDg0LAotCTB4MWRlOCwgMHgwMDFlLCAweDc5MmUsIDB4MDAwZSwgMHg3ODJhLCAweDAwMGUsIDB4NzgyNiwgMHgzOTAwLAotCTB4NzgzYSwgMHg3ODIzLCAweDgwMDIsIDB4NzgxYiwgMHgwMDAxLCAweDIwOTEsIDB4NTAwMCwgMHgwMTI2LAotCTB4MDE1NiwgMHgwMTQ2LCAweDIwYTksIDB4MDAxMCwgMHgyMGExLCAweGIwYzgsIDB4MjA5MSwgMHgyMDAwLAotCTB4NDBhMSwgMHgyMGE5LCAweDAwMTAsIDB4MjA5MSwgMHgyMjAwLCAweDQwYTEsIDB4MjBhOSwgMHgwMDEwLAotCTB4MjA5MSwgMHgyNDAwLCAweDQwYTEsIDB4MjBhOSwgMHgwMDEwLCAweDIwOTEsIDB4MjYwMCwgMHg0MGExLAotCTB4MjBhOSwgMHgwMDEwLCAweDIwOTEsIDB4MjgwMCwgMHg0MGExLCAweDAxNGUsIDB4MDE1ZSwgMHgwMTJlLAotCTB4MjA3OSwgMHhhZDAwLCAweDc4MDMsIDB4MDAwNSwgMHgyMDkxLCAweDQwODAsIDB4MDRjOSwgMHgwY2Y4LAotCTB4MDAwNSwgMHgwMDA2LCAweDA4MGMsIDB4MTU4NCwgMHgxNTE4LCAweDAwZjYsIDB4MjA3OSwgMHhhZDIzLAotCTB4MmYwNCwgMHg4MDAwLCAweDIwN2EsIDB4YTA4MiwgMHgwMDBmLCAweDAyNTgsIDB4YTAwNiwgMHgyMDdhLAotCTB4MjA3OSwgMHhhZDI1LCAweDJmMDQsIDB4YTA4NCwgMHgwMDAxLCAweGEwODYsIDB4MDAwMSwgMHgyMDdhLAotCTB4MDA3MCwgMHgyMDc5LCAweGFkMjUsIDB4MmY3YywgMHg4ZmZmLCAweDExMjgsIDB4MjAwMSwgMHgwYzAzLAotCTB4MjAwMywgMHgwMDQwLCAweDAwMjAsIDB4MjAwMSwgMHgwYzAzLCAweDIwMDMsIDB4MDBjMCwgMHgwMGZlLAotCTB4MDAwZSwgMHgwMDA1LCAweDA0MDksIDB4MTEyMCwgMHgyMDAxLCAweDBjMDMsIDB4MjAwMywgMHgwMDgwLAotCTB4MDAwNSwgMHgwMGQxLCAweDExMjAsIDB4MjAwMSwgMHgwYzAzLCAweDIwMDMsIDB4MDA0MCwgMHgwMDA1LAotCTB4MDAwNiwgMHgwMDkxLCAweDExNzgsIDB4MjAwMSwgMHgwYzAzLCAweDIwMDMsIDB4MDA0MCwgMHgyMDA5LAotCTB4MGZmZiwgMHgwMGExLCAweDIwMDEsIDB4MGMwMywgMHgyMDAzLCAweDAwODAsIDB4MjAwOSwgMHgwZmZmLAotCTB4MDA2OSwgMHgwYzg4LCAweDAwMGUsIDB4MDAwNSwgMHgwMGM2LCAweDIwNjEsIDB4MGMwMCwgMHgyYzA0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDBhYSwgMHgwMGNlLCAweDAwMDUsIDB4MDE1NiwgMHgwMTI2LAotCTB4YTE4YywgMHgwZmZmLCAweDIxYTgsIDB4MWQwNCwgMHgxNTkzLCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LAotCTB4MTU5MywgMHgwMTJlLCAweDAxNWUsIDB4MDAwNSwgMHgyMDcxLCAweGFkMDAsIDB4NzE1YywgMHg3MTJlLAotCTB4MjAyMSwgMHgwMDAxLCAweGExOTAsIDB4MDAzMCwgMHhhMjk4LCAweDAwMzAsIDB4MDI0MCwgMHg3MDYwLAotCTB4YTMwMiwgMHgxMjI4LCAweDIyMGEsIDB4MjIwOCwgMHgyMzEwLCAweDg0MjAsIDB4MGNhOCwgMHgzODAwLAotCTB4ZDA4YywgMHgwMTQ4LCAweDcwNjAsIDB4YTA4NiwgMHhhZDAwLCAweDAxMjgsIDB4NzA2MywgMHhhZDAwLAotCTB4MjAxMSwgMHgxMDAwLCAweDBjNDgsIDB4MjAwYiwgMHgwMDAwLCAweDc0YWUsIDB4NzRiMiwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzBiMCwgMHhhMGVhLAotCTB4MDAxMCwgMHgwMjY4LCAweDgwMDEsIDB4NzBiMiwgMHg3MDJjLCAweDIwNjgsIDB4MmQwNCwgMHg3MDJlLAotCTB4MjA2YiwgMHgwMDAwLCAweDY4MDcsIDB4MDAwMCwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHhhMDZlLAotCTB4MGNkOCwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MGIwLAotCTB4ODAwMSwgMHgwMjYwLCAweDcwYjIsIDB4NzAyYywgMHgyMDY4LCAweDJkMDQsIDB4NzAyZSwgMHgyMDZiLAotCTB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4YTA2ZSwgMHgwY2Q4LAotCTB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzAyYywgMHgyMDZhLAotCTB4MmQwMCwgMHg3MDJlLCAweDcwYjAsIDB4ODAwMCwgMHg3MGIyLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LAotCTB4OGRmZiwgMHgwMTM4LCAweDY4MDQsIDB4NjgwNywgMHgwMDAwLCAweDAwMDYsIDB4MGM0OSwgMHgwMGRlLAotCTB4MGNiOCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhhZDAwLCAweDcwYjAsIDB4YTA4YSwgMHgwMDEwLAotCTB4YTAwZCwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFmZWMsIDB4NzAwNywgMHgwMDAwLAotCTB4NzAxYiwgMHgwMDAwLCAweDcwMWYsIDB4MDAwMCwgMHgyMDcxLCAweDAwMDAsIDB4NzAxMCwgMHhhMDg1LAotCTB4ODAwNCwgMHg3MDEyLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDIyNzAsIDB4NzAwYiwgMHgwMDAwLAotCTB4MjA3MSwgMHhhZmVjLCAweDcwMTgsIDB4YTA4OCwgMHhhZmY1LCAweDIyMGEsIDB4ODAwMCwgMHhhMDg0LAotCTB4MDAwNywgMHg3MDFhLCAweDcwMDQsIDB4YTAwNSwgMHgxMTI4LCAweDAwZjYsIDB4MjA3OSwgMHgwMDEwLAotCTB4MDA4MSwgMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWZlYywgMHg3MDA0LAotCTB4YTAwNSwgMHgxMTI4LCAweDAwZjYsIDB4MjA3OSwgMHgwMDEwLCAweDAwMTksIDB4MDBmZSwgMHgwMGVlLAotCTB4MDAwNSwgMHg3MDAwLCAweDAwMDIsIDB4MTY0ZiwgMHgxNmIzLCAweDE2ZDAsIDB4MTZkMCwgMHg3MDE4LAotCTB4NzExYywgMHhhMTA2LCAweDExMTgsIDB4NzAwNywgMHgwMDAwLCAweDAwMDUsIDB4MDBkNiwgMHhhMTgwLAotCTB4YWZmNSwgMHgyMDA0LCAweDcwMGEsIDB4MjA2OCwgMHg4MTA4LCAweGExOGMsIDB4MDAwNywgMHg3MTFlLAotCTB4NzgwMywgMHgwMDI2LCAweDY4MjQsIDB4NzgzMiwgMHg2ODI4LCAweDc4MzYsIDB4NjgyYywgMHg3ODNhLAotCTB4NjgzMCwgMHg3ODNlLCAweDY4MTAsIDB4NzAwZSwgMHg2ODBjLCAweDcwMTYsIDB4NjgwNCwgMHgwMGRlLAotCTB4ZDA4NCwgMHgwMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwMDI5LCAweDAwMDUsIDB4NzAwNywgMHgwMDAyLAotCTB4MDBiMSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHg3MTBjLCAweDIwMTEsIDB4MDA0MCwgMHhhMTgyLAotCTB4MDA0MCwgMHgxMjEwLCAweDIxMTAsIDB4YTAwNiwgMHg3MDBlLCAweDcyMTIsIDB4ODIwMywgMHg3ODIyLAotCTB4NzgwMywgMHgwMDIwLCAweDc4MDMsIDB4MDA0MSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LAotCTB4MDAyNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHg3MDE0LCAweDIwOTgsIDB4MjBhMSwgMHgwMDE0LAotCTB4NzgwMywgMHgwMDI2LCAweDcxMGMsIDB4MjAxMSwgMHgwMDQwLCAweGExODIsIDB4MDA0MCwgMHgxMjEwLAotCTB4MjExMCwgMHhhMDA2LCAweDcwMGUsIDB4MjJhOCwgMHg1M2E2LCAweDgyMDMsIDB4NzgyMiwgMHg3ODAzLAotCTB4MDAyMCwgMHgzMzAwLCAweDcwMTYsIDB4NzgwMywgMHgwMDAxLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLAotCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MjA5OSwgMHhhZGY5LAotCTB4MjBhMSwgMHgwMDE4LCAweDIwYTksIDB4MDAwOCwgMHg1M2EzLCAweDc4MDMsIDB4MDAyMCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDc4MDMsIDB4MDA0MSwgMHg3MDA3LCAweDAwMDMsIDB4NzAwMCwgMHhjMDg0LAotCTB4NzAwMiwgMHg3MDBiLCAweGFkZjQsIDB4MDEyZSwgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwgMHgwMDA1LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MjAwMSwgMHhhZTI4LCAweDIwOWMsIDB4MjBhMSwgMHgwMDE0LAotCTB4NzgwMywgMHgwMDI2LCAweDIwMDEsIDB4YWUyOSwgMHgyMGFjLCAweDUzYTYsIDB4MjA5OSwgMHhhZTJhLAotCTB4MjBhMSwgMHgwMDE4LCAweDIwYTksIDB4MDAwOCwgMHg1M2EzLCAweDc4MDMsIDB4MDAyMCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDc4MDMsIDB4MDAwMSwgMHg3MDA3LCAweDAwMDQsIDB4NzAwMCwgMHhjMDhjLAotCTB4NzAwMiwgMHg3MDBiLCAweGFlMjUsIDB4MDEyZSwgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMGU2LCAweDIwNzEsIDB4YWZlYywgMHgwMGY2LCAweDIwNzksIDB4MDAxMCwgMHg3OTA0LAotCTB4NzgwMywgMHgwMDAyLCAweGQxZmMsIDB4MDEyMCwgMHhhMThjLCAweDA3MDAsIDB4NzAwNCwgMHgwMDIzLAotCTB4MDBmZSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHgxNjQ5LCAweDE3MTMsIDB4MTc0MSwgMHgxNzZiLAotCTB4MTc5YiwgMHgxNzEyLCAweDBjZjgsIDB4YTE4YywgMHgwNzAwLCAweDE1MjgsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHg3MDE0LCAweDIwYTAsIDB4MjA5OSwgMHgwMDE0LCAweDc4MDMsIDB4MDA0MCwgMHg3MDEwLAotCTB4MjBhOCwgMHg1M2E1LCAweDM0MDAsIDB4NzAxNiwgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwgMHg3MDBjLAotCTB4YTAwNSwgMHgwNTcwLCAweDc4MzAsIDB4NzgzMiwgMHg3ODM0LCAweDc4MzYsIDB4MDgwYywgMHgxNjdhLAotCTB4MDAwNSwgMHg3MDA4LCAweGEwODAsIDB4MDAwMiwgMHgyMDAzLCAweDAxMDAsIDB4NzAwNywgMHgwMDAwLAotCTB4MDgwYywgMHgxNjQ5LCAweDAwMDUsIDB4NzAwOCwgMHhhMDgwLCAweDAwMDIsIDB4MjAwMywgMHgwMjAwLAotCTB4MGNhOCwgMHhhMThjLCAweDA3MDAsIDB4MTE1MCwgMHg3MDBjLCAweGEwMDUsIDB4MDE4OCwgMHg3ODMwLAotCTB4NzgzMiwgMHg3ODM0LCAweDc4MzYsIDB4MDgwYywgMHgxNjhmLCAweDAwMDUsIDB4NzAwOCwgMHhhMDgwLAotCTB4MDAwMiwgMHgyMDAzLCAweDAyMDAsIDB4NzAwNywgMHgwMDAwLCAweDA4MGMsIDB4MTY0OSwgMHgwMDA1LAotCTB4MDBkNiwgMHg3MDA4LCAweDIwNjgsIDB4NzgzMCwgMHg2ODI2LCAweDc4MzQsIDB4NjgyYSwgMHg3ODM4LAotCTB4NjgyZSwgMHg3ODNjLCAweDY4MzIsIDB4NjgwYiwgMHgwMTAwLCAweDAwZGUsIDB4NzAwNywgMHgwMDAwLAotCTB4MDgwYywgMHgxNjQ5LCAweDAwMDUsIDB4YTE4YywgMHgwNzAwLCAweDE1NDAsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgyMDAxLCAweGFkZjcsIDB4MjAwNCwgMHhhMDgwLCAweDAwMGQsIDB4MjBhMCwgMHgyMDk5LAotCTB4MDAxNCwgMHg3ODAzLCAweDAwNDAsIDB4MjBhOSwgMHgwMDIwLCAweDUzYTUsIDB4MjAwMSwgMHhhZGY5LAotCTB4MjAwNCwgMHhkMGJjLCAweDAxNDgsIDB4MjAwMSwgMHhhZTAyLCAweDIwMDQsIDB4YTA4MCwgMHgwMDBkLAotCTB4MjBhMCwgMHgyMGE5LCAweDAwMjAsIDB4NTNhNSwgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwgMHg3MDA3LAotCTB4MDAwMCwgMHgwODBjLCAweDVhZTYsIDB4MDgwYywgMHgxNjQ5LCAweDAwMDUsIDB4MjAxMSwgMHg4MDAzLAotCTB4MDgwYywgMHgzYzVjLCAweDBjZjgsIDB4YTE4YywgMHgwNzAwLCAweDExNDgsIDB4MjAwMSwgMHhhZTI3LAotCTB4MjAwMywgMHgwMTAwLCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLCAweDE2NDksIDB4MDAwNSwgMHgyMDExLAotCTB4ODAwNCwgMHgwODBjLCAweDNjNWMsIDB4MGNmOCwgMHgwMTI2LCAweDIwOTEsIDB4MjIwMCwgMHgyMDc5LAotCTB4MDAzMCwgMHgyMDcxLCAweGFmZmQsIDB4NzAwMywgMHgwMDAwLCAweDcwMGYsIDB4YjAwMywgMHg3MDEzLAotCTB4YjAwMywgMHg3ODBmLCAweDAwZjYsIDB4NzgwMywgMHgwMDA0LCAweDAxMmUsIDB4MDAwNSwgMHg2OTM0LAotCTB4YTE4NCwgMHgwMDA3LCAweDAwMDIsIDB4MTdjYiwgMHgxODA5LCAweDE3Y2IsIDB4MTdjYiwgMHgxN2NiLAotCTB4MTdmMSwgMHgxN2Q4LCAweDE3Y2YsIDB4YTA4NSwgMHgwMDAxLCAweDA4MDQsIDB4MTgyMywgMHg2ODRjLAotCTB4ZDBiYywgMHgwZGM4LCAweDY4NjAsIDB4NjgyZSwgMHg2ODVjLCAweDY4MmEsIDB4Njg1OCwgMHgwNGM4LAotCTB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAxZSwgMHgxZDcwLCAweDY4NGMsIDB4ZDBiYywgMHgwZDU4LAotCTB4Njg2MCwgMHg2ODJlLCAweDY4NWMsIDB4NjgyYSwgMHg2ODA0LCAweDY4MWEsIDB4YTA4MCwgMHgwMDBkLAotCTB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwgMHgyMTg2LCAweDIwMDUsIDB4NjgzMiwgMHg2ODU4LAotCTB4MDQ0MCwgMHhhMThjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDE1LCAweDE5YTgsIDB4Njg0YywgMHhkMGFjLAotCTB4MDk5MCwgMHg2ODA0LCAweDY4MWEsIDB4YTA4MCwgMHgwMDBkLCAweDIwMDQsIDB4YTA4NCwgMHgwMDBmLAotCTB4YTA4MCwgMHgyMTg2LCAweDIwMDUsIDB4NjgzMiwgMHhhMDA2LCAweDY4MmUsIDB4NjgyYSwgMHg2ODU4LAotCTB4MDA4MCwgMHg2ODRjLCAweGQwYWMsIDB4MDkwNCwgMHgxN2NiLCAweGEwMDYsIDB4NjgyZSwgMHg2ODJhLAotCTB4Njg1OCwgMHhhMThjLCAweDAwMGYsIDB4YTE4OCwgMHgyMTg2LCAweDIxMGQsIDB4NjkzMiwgMHgyZDA4LAotCTB4NjkxYSwgMHg2ODI2LCAweDY4NGMsIDB4YzBkZCwgMHg2ODRlLCAweGEwMDYsIDB4NjgwYSwgMHg2OTdjLAotCTB4NjkxMiwgMHg2OTgwLCAweDY5MTYsIDB4MDAwNSwgMHgyMGUxLCAweDAwMDcsIDB4MjBlMSwgMHgyMDAwLAotCTB4MjAwMSwgMHgwMjBhLCAweDIwMDQsIDB4ODJmZiwgMHgwMWE4LCAweGEyODAsIDB4MDAwNCwgMHgwMGQ2LAotCTB4MjA2YywgMHg2ODRjLCAweGQwZGMsIDB4MTE1MCwgMHgwODBjLCAweDE3YmYsIDB4MDEzOCwgMHgwMGRlLAotCTB4YTI4MCwgMHgwMDAwLCAweDIwMDMsIDB4MDAwMiwgMHhhMDE2LCAweDAwMjAsIDB4NjgwOCwgMHg4MDAwLAotCTB4NjgwYSwgMHgwMGRlLCAweDAxMjYsIDB4MDA0NiwgMHgwMDM2LCAweDAwMjYsIDB4MjA5MSwgMHgyMjAwLAotCTB4MDAyZSwgMHgwMDNlLCAweDAwNGUsIDB4NzAwMCwgMHhhMDA1LCAweDAxZDAsIDB4NzEwYywgMHgyMjBhLAotCTB4ODEwOCwgMHgyMzBhLCAweDgxMDgsIDB4MjQwYSwgMHg4MTA4LCAweGExODIsIDB4YjAxZSwgMHgwMjEwLAotCTB4MjAwOSwgMHhiMDAzLCAweDcxMGUsIDB4NzAxMCwgMHhhMTAyLCAweGEwODIsIDB4MDAwOSwgMHgwMTE4LAotCTB4YTA4MCwgMHgwMDFiLCAweDExMTgsIDB4MjAwOSwgMHgwMTM4LCAweDIwMGEsIDB4MDEyZSwgMHgwMDA1LAotCTB4NzIwNiwgMHgyMDAxLCAweDE4NjYsIDB4MDAwNiwgMHgyMjYwLCAweDA4MDQsIDB4MTk3YSwgMHgwMTI2LAotCTB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4MDAwNiwgMHgyMDkxLCAweDIyMDAsIDB4MDAwZSwgMHgwMDRlLAotCTB4MDAzZSwgMHgwMDJlLCAweDAwZDYsIDB4MDBjNiwgMHgyNDYwLCAweDYxMTAsIDB4MjE2OCwgMHg2YTYyLAotCTB4NmI1ZSwgMHhhMDA1LCAweDA5MDQsIDB4MThjOCwgMHg2ODA4LCAweGEwMDUsIDB4MDkwNCwgMHgxOGZmLAotCTB4NzAwMCwgMHhhMDA1LCAweDExMDgsIDB4MDQ4OCwgMHg3MDBjLCAweDcxMTAsIDB4YTEwNiwgMHgxOTA0LAotCTB4MTkwNywgMHg3MDA0LCAweGE0MDYsIDB4MTU0OCwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwgMHhkMDhjLAotCTB4MDE2OCwgMHgwMDQ2LCAweDA4MGMsIDB4MWE2YywgMHgwMDRlLCAweDI0NjAsIDB4NjAxMCwgMHhhMDgwLAotCTB4MDAwMiwgMHgyMDA0LCAweGEwMDUsIDB4MDkwNCwgMHgxOGZmLCAweDBjMTAsIDB4MjAwMSwgMHgwMjA3LAotCTB4MjAwNCwgMHhkMDljLCAweDFkNDgsIDB4NzgwNCwgMHhhMDg0LCAweDYwMDAsIDB4MDEyMCwgMHhhMDg2LAotCTB4NjAwMCwgMHgwMTA4LCAweDBjMDgsIDB4NzgxOCwgMHg2ODEyLCAweDc4MWMsIDB4NjgxNiwgMHg3ODAzLAotCTB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDYxMDAsIDB4YTE4ZSwgMHgwMDA0LAotCTB4MTkwNCwgMHgxOTA3LCAweDIwMDksIDB4MDA0OCwgMHgwODBjLCAweDgwYTcsIDB4MDgwNCwgMHgxOTA3LAotCTB4NjgwOCwgMHhhMDA1LCAweDA1YTAsIDB4NzAwMCwgMHhhMDA1LCAweDA1ODgsIDB4NzAwYywgMHg3MTEwLAotCTB4YTEwNiwgMHgxMTE4LCAweDcwMDQsIDB4YTQwNiwgMHgxNTUwLCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LAotCTB4ZDA4YywgMHgwMTYwLCAweDAwNDYsIDB4MDgwYywgMHgxYTZjLCAweDAwNGUsIDB4MjQ2MCwgMHg2MDEwLAotCTB4YTA4MCwgMHgwMDAyLCAweDIwMDQsIDB4YTAwNSwgMHgwMWQwLCAweDBjMjgsIDB4MjAwMSwgMHgwMjA3LAotCTB4MjAwNCwgMHhkMDljLCAweDFkNTAsIDB4MjAwMSwgMHgwMDA1LCAweDIwMDQsIDB4ZDA4YywgMHgxZDUwLAotCTB4NzgwNCwgMHhhMDg0LCAweDYwMDAsIDB4MDExOCwgMHhhMDg2LCAweDYwMDAsIDB4MTlmMCwgMHg3ODE4LAotCTB4NjgxMiwgMHg3ODFjLCAweDY4MTYsIDB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHg2MTAwLAotCTB4YTE4ZSwgMHgwMDA0LCAweDExMjAsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4ODBhNywgMHgwMGNlLAotCTB4MDBkZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LAotCTB4MDA1NiwgMHgwODBjLCAweDFkODYsIDB4MDAyNiwgMHgwMDU2LCAweDIwNzEsIDB4YWZmZCwgMHg3MDAwLAotCTB4YTA4NiwgMHgwMDAwLCAweDA1ODAsIDB4NzAwNCwgMHhhYzA2LCAweDExZjgsIDB4MjA3OSwgMHgwMDMwLAotCTB4NzAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDFjOCwgMHg3ODA0LCAweGQwZmMsIDB4MTE5OCwgMHgyMDAxLAotCTB4MDIwNywgMHgyMDA0LCAweGQwOWMsIDB4MWRjMCwgMHg3ODAzLCAweDAwMDQsIDB4NzgwNCwgMHhkMGFjLAotCTB4MWRlOCwgMHg3ODAzLCAweDAwMDIsIDB4NzgwMywgMHgwMDA5LCAweDcwMDMsIDB4MDAwMywgMHg3MDA3LAotCTB4MDAwMCwgMHgwMDE4LCAweDA4MGMsIDB4MWE2YywgMHgwOGQwLCAweDAxNTYsIDB4MjBhOSwgMHgwMDA5LAotCTB4MjAwOSwgMHhiMDAzLCAweDIxMDQsIDB4YWMwNiwgMHgxMTA4LCAweDIwMGEsIDB4YTE4OCwgMHgwMDAzLAotCTB4MWYwNCwgMHgxOTQyLCAweDAxNWUsIDB4MDA1ZSwgMHgwMDJlLCAweDIwMDEsIDB4MDE1ZCwgMHgyMDFjLAotCTB4ODMxYSwgMHgyMzAyLCAweDIwMDEsIDB4MDE2MCwgMHgyNTAyLCAweDIwMDEsIDB4MDEzOCwgMHgyMjAyLAotCTB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg3MDBjLAotCTB4NzExMCwgMHhhMTA2LCAweDA5MDQsIDB4MTlkZCwgMHgyMTA0LCAweDcwMDYsIDB4MjA2MCwgMHg4MTA4LAotCTB4MjExYywgMHg4MTA4LCAweDIxMjQsIDB4ODEwOCwgMHhhMTgyLCAweGIwMWUsIDB4MDIxMCwgMHgyMDA5LAotCTB4YjAwMywgMHg3MTEyLCAweDcwMGMsIDB4YTEwNiwgMHgxMTI4LCAweDA4MGMsIDB4Mjc0NCwgMHgyMDAxLAotCTB4MDEzOCwgMHgyMTAyLCAweDhjZmYsIDB4MDU4OCwgMHg2MDEwLCAweDIwNjgsIDB4MmQ1OCwgMHg2ODI4LAotCTB4YTQwNiwgMHgxNTgwLCAweDY4MmMsIDB4YTMwNiwgMHgxNTY4LCAweDcwMDQsIDB4MjA2MCwgMHg2MDIwLAotCTB4YzBkNCwgMHg2MDIyLCAweDY4NGMsIDB4ZDBmNCwgMHgwMTI4LCAweDY4MTcsIDB4ZmZmZiwgMHg2ODEzLAotCTB4ZmZmZiwgMHgwMGQ4LCAweDY4NTAsIDB4ZDBmNCwgMHgxMTMwLCAweDc4MDMsIDB4MDAwNCwgMHg2ODEwLAotCTB4NzgxYSwgMHg2ODE0LCAweDc4MWUsIDB4NjgyNCwgMHgyMDUwLCAweDY4MTgsIDB4MjA2MCwgMHg2ODMwLAotCTB4MjA0MCwgMHg2MDM0LCAweGEwY2MsIDB4MDAwZiwgMHgyMDA5LCAweDAwMTEsIDB4MDRjOSwgMHgwMTE4LAotCTB4MjAwOSwgMHgwMDAxLCAweDA0YTksIDB4MmQ1OCwgMHgwMDA1LCAweDA4MGMsIDB4MWNlZCwgMHgwOTA0LAotCTB4MTk1ZiwgMHgwY2QwLCAweDYwMjAsIDB4ZDBkNCwgMHgwMWI4LCAweDYwMzgsIDB4YTQwMiwgMHg2MDM0LAotCTB4YTMwMywgMHgwMTA4LCAweDEyODgsIDB4NjQzYSwgMHg2MzM2LCAweDZjMmEsIDB4NmIyZSwgMHgwMDQ2LAotCTB4MDAzNiwgMHgyNDAwLCAweDZjN2MsIDB4YTQwMiwgMHg2ODEyLCAweDIzMDAsIDB4NmI4MCwgMHhhMzAzLAotCTB4NjgxNiwgMHgwMDNlLCAweDAwNGUsIDB4MDAxOCwgMHgwODBjLCAweDk4Y2IsIDB4MDlmMCwgMHg2MDFjLAotCTB4YTA4ZSwgMHgwMDA4LCAweDA5MDQsIDB4MTk4NSwgMHhhMDhlLCAweDAwMGEsIDB4MDkwNCwgMHgxOTg1LAotCTB4MDgwYywgMHgyMWE2LCAweDE5OTAsIDB4MDgwNCwgMHgxOTg1LCAweDcwMDMsIDB4MDAwMCwgMHgwMDA1LAotCTB4OGFmZiwgMHgwOTA0LCAweDFhNDYsIDB4YTAzZSwgMHgyNzMwLCAweDY4NTAsIDB4ZDBmYywgMHgxMWI4LAotCTB4ZDBmNCwgMHgxNTI4LCAweDAwZDYsIDB4MjgwNSwgMHhhYzY4LCAweDI5MDAsIDB4MDAwMiwgMHgxYTMwLAotCTB4MWExNSwgMHgxYTE1LCAweDFhMzAsIDB4MWEzMCwgMHgxYTI5LCAweDFhMzAsIDB4MWExNSwgMHgxYTMwLAotCTB4MWExYSwgMHgxYTFhLCAweDFhMzAsIDB4MWEzMCwgMHgxYTMwLCAweDFhMjEsIDB4MWExYSwgMHg3ODAzLAotCTB4MDAwNCwgMHhjMGZjLCAweDY4NTIsIDB4NmI2YywgMHg2YTcwLCAweDZkMWMsIDB4NmMyMCwgMHgwMGQ2LAotCTB4ZDk5YywgMHgwNTQ4LCAweDI4MDUsIDB4YWM2OCwgMHg2ZjA4LCAweDZlMGMsIDB4MDQyMCwgMHhjMGY0LAotCTB4Njg1MiwgMHg2YjZjLCAweDZhNzAsIDB4MDBkNiwgMHgwNDI4LCAweDZiMDgsIDB4NmEwYywgMHg2ZDAwLAotCTB4NmMwNCwgMHgwMGM4LCAweDZiMTAsIDB4NmExNCwgMHg2ZDAwLCAweDZjMDQsIDB4NmYwOCwgMHg2ZTBjLAotCTB4MDA5MCwgMHgwMGRlLCAweDAwZDYsIDB4NjgzNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDFlLAotCTB4MTEzOCwgMHgwMGRlLCAweDA4MGMsIDB4MjE0OCwgMHgxOTA0LCAweDE5ZTAsIDB4YTAwZSwgMHgwMGIwLAotCTB4MDBkZSwgMHgwODBjLCAweDE0ZjYsIDB4N2IyMiwgMHg3YTI2LCAweDdkMzIsIDB4N2MzNiwgMHg3ZjNhLAotCTB4N2UzZSwgMHg3OTAyLCAweDcwMDAsIDB4ODAwMCwgMHg3MDAyLCAweDAwZGUsIDB4NjgyOCwgMHhhMzAwLAotCTB4NjgyYSwgMHg2ODJjLCAweGEyMDEsIDB4NjgyZSwgMHgwODBjLCAweDIxNDgsIDB4MDAwNSwgMHgwODBjLAotCTB4MTRmNiwgMHgwODBjLCAweDFlMWEsIDB4NzAwNCwgMHgyMDYwLCAweDAwZDYsIDB4NjAxMCwgMHgyMDY4LAotCTB4NzAwMywgMHgwMDAwLCAweDA4MGMsIDB4MWQyMiwgMHgwODBjLCAweDk1OTYsIDB4MDE3MCwgMHg2ODA4LAotCTB4ODAwMSwgMHg2ODBhLCAweDY5N2MsIDB4NjkxMiwgMHg2OTgwLCAweDY5MTYsIDB4NjgyYiwgMHhmZmZmLAotCTB4NjgyZiwgMHhmZmZmLCAweDY4NTAsIDB4YzBiZCwgMHg2ODUyLCAweDAwZGUsIDB4MDgwYywgMHg5MjljLAotCTB4MDgwNCwgMHgxYzVlLCAweDA4MGMsIDB4MTRmNiwgMHgwMTI2LCAweDIwOTEsIDB4MjIwMCwgMHgwMDA2LAotCTB4MDAxNiwgMHgyYjY4LCAweDY4MTgsIDB4MjA2MCwgMHg3OTA0LCAweDc4MDMsIDB4MDAwMiwgMHhhMTg0LAotCTB4MDcwMCwgMHgxOTc4LCAweGExODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDMsIDB4MGQ1OCwgMHg3MDAwLAotCTB4MDAwMiwgMHgxYTg5LCAweDFhOGYsIDB4MWI5MiwgMHgxYzM5LCAweDFjNGQsIDB4MWE4OSwgMHgxYTg5LAotCTB4MWE4OSwgMHg3ODA0LCAweGQwOWMsIDB4MTkwNCwgMHgxYzVlLCAweDA4MGMsIDB4MTRmNiwgMHg4MDAxLAotCTB4NzAwMiwgMHhhMTg0LCAweDA4ODAsIDB4MTE5MCwgMHhkMTljLCAweDE5MDQsIDB4MWIyMCwgMHg4YWZmLAotCTB4MDkwNCwgMHgxYjIwLCAweDIwMDksIDB4MDAwMSwgMHgwODBjLCAweDE5ZTAsIDB4MDkwNCwgMHgxYzVlLAotCTB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4MTllMCwgMHgwODA0LCAweDFjNWUsIDB4NzgwMywgMHgwMDA0LAotCTB4NzAwMywgMHgwMDAwLCAweGQxYmMsIDB4MTkwNCwgMHgxYjAwLCAweDAwMjYsIDB4MDAzNiwgMHg3YzIwLAotCTB4N2QyNCwgMHg3ZTMwLCAweDdmMzQsIDB4NzgxOCwgMHg2ODEyLCAweDc4MWMsIDB4NjgxNiwgMHgyMDAxLAotCTB4MDIwMSwgMHgyMDA0LCAweGEwMDUsIDB4MDE0MCwgMHg3ODA4LCAweGQwZWMsIDB4MTEyOCwgMHg3ODAzLAotCTB4MDAwOSwgMHg3MDAzLCAweDAwMDQsIDB4MDAxMCwgMHgwODBjLCAweDFjNjIsIDB4NmIyOCwgMHg2YTJjLAotCTB4MjQwMCwgMHg2ODZlLCAweGEzMWEsIDB4MjUwMCwgMHg2ODcyLCAweGEyMTMsIDB4NmIyYSwgMHg2YTJlLAotCTB4MDBjNiwgMHg3MDA0LCAweDIwNjAsIDB4NjAyMCwgMHhkMGY0LCAweDExMTAsIDB4NjMzYSwgMHg2MjM2LAotCTB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4NmUxZSwgMHg2ZjIyLCAweDA4MGMsIDB4MjE1ZSwgMHgyYTAwLAotCTB4NjgyNiwgMHgyYzAwLCAweDY4MWEsIDB4MjgwMCwgMHg2ODMyLCAweDY4NTAsIDB4YzBmZCwgMHg2ODUyLAotCTB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4MTE0OCwgMHg2ODRjLCAweGQwZTQsIDB4MDEzMCwgMHg3MDA0LAotCTB4MjA2MCwgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHg4MGE3LCAweDcwMDAsIDB4YTA4NiwgMHgwMDA0LAotCTB4MDkwNCwgMHgxYzVlLCAweDcwMDMsIDB4MDAwMCwgMHgwODBjLCAweDE5NWYsIDB4MDgwNCwgMHgxYzVlLAotCTB4MDA1NiwgMHg3ZDBjLCAweGQ1YmMsIDB4MTExMCwgMHgwODBjLCAweGFjNzMsIDB4MDA1ZSwgMHgwODBjLAotCTB4MWQyMiwgMHgwMGY2LCAweDcwMDQsIDB4MjA3OCwgMHgwODBjLCAweDUwMjksIDB4MDExOCwgMHg3ODIwLAotCTB4YzBmNSwgMHg3ODIyLCAweDAwZmUsIDB4NjgyYiwgMHhmZmZmLCAweDY4MmYsIDB4ZmZmZiwgMHg2ODA4LAotCTB4ODAwMSwgMHg2ODBhLCAweDY5N2MsIDB4NzkxYSwgMHg2OTgwLCAweDc5MWUsIDB4MDgwNCwgMHgxYzVlLAotCTB4NzAwNCwgMHgwMGM2LCAweDIwNjAsIDB4NjAyMCwgMHgwMGNlLCAweGQwZjQsIDB4MDEyOCwgMHg2ODA4LAotCTB4ODAwMSwgMHg2ODBhLCAweDA4MDQsIDB4MWM1ZSwgMHg3ODE4LCAweDY4MTIsIDB4N2ExYywgMHg2YTE2LAotCTB4ZDE5YywgMHgwMTYwLCAweGEyMDUsIDB4MDE1MCwgMHg3MDA0LCAweGEwODAsIDB4MDAwNywgMHgyMDA0LAotCTB4YTA4NCwgMHhmZmZkLCAweGEwODYsIDB4MDAwOCwgMHgxOTA0LCAweDFhYTYsIDB4Njg0YywgMHhjMGY1LAotCTB4Njg0ZSwgMHg3ODE0LCAweGEwMDUsIDB4MTE4MCwgMHg3MDAzLCAweDAwMDAsIDB4NjgwOCwgMHg4MDAxLAotCTB4NjgwYSwgMHgxMTMwLCAweDcwMDQsIDB4MjA2MCwgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHg4MGE3LAotCTB4MDgwYywgMHgxOTVmLCAweDA4MDQsIDB4MWM1ZSwgMHg3ODE4LCAweDY4MTIsIDB4NzgxYywgMHg2ODE2LAotCTB4NzgxNCwgMHg3OTA4LCAweGExOGMsIDB4MGZmZiwgMHhhMTg4LCAweDAwMDcsIDB4ODExNCwgMHg4MjE0LAotCTB4ODIxNCwgMHhhMTBhLCAweDgxMDQsIDB4ODAwNCwgMHg4MDA0LCAweGEyMGEsIDB4ODEwYiwgMHg4MTBiLAotCTB4ODEwYiwgMHgwODBjLCAweDFkYTUsIDB4NzgwMywgMHgwMDA0LCAweDc4MGYsIDB4ZmZmZiwgMHg3ODAzLAotCTB4MDAwMSwgMHg3ODA0LCAweGQwZmMsIDB4MGRlOCwgMHg3ODAzLCAweDAwMDIsIDB4NzgwMywgMHgwMDA0LAotCTB4NzgwZiwgMHgwMGY2LCAweDcwMDQsIDB4NzAwNywgMHgwMDAwLCAweDIwNjAsIDB4MjAwOSwgMHgwMDQ4LAotCTB4MDgwYywgMHg4MGE3LCAweDA4MGMsIDB4MWRkNywgMHgwOTU4LCAweDc5MDgsIDB4ZDFlYywgMHgxMTE4LAotCTB4MjAwOSwgMHgwMDA5LCAweDAwMTAsIDB4MjAwOSwgMHgwMDE5LCAweDc5MDIsIDB4NzAwMywgMHgwMDAzLAotCTB4MDgwNCwgMHgxYzVlLCAweDgwMDEsIDB4NzAwMiwgMHhkMTk0LCAweDAxYTgsIDB4NzgwNCwgMHhkMGZjLAotCTB4MTkwNCwgMHgxYzJjLCAweGQwOWMsIDB4MDEzMCwgMHg3ODA0LCAweGQwZmMsIDB4MTkwNCwgMHgxYTc0LAotCTB4ZDA5YywgMHgxMWE4LCAweDhhZmYsIDB4MDkwNCwgMHgxYzVlLCAweDIwMDksIDB4MDAwMSwgMHgwODBjLAotCTB4MTllMCwgMHgwODA0LCAweDFjNWUsIDB4YTE4NCwgMHgwODg4LCAweDExNDgsIDB4OGFmZiwgMHgwOTA0LAotCTB4MWM1ZSwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgxOWUwLCAweDA4MDQsIDB4MWM1ZSwgMHg3ODE4LAotCTB4NjgxMiwgMHg3YTFjLCAweDZhMTYsIDB4YTIwNSwgMHgwOTA0LCAweDFiM2UsIDB4NzgwMywgMHgwMDA0LAotCTB4NzAwMywgMHgwMDAwLCAweGQxYmMsIDB4MTkwNCwgMHgxYzBmLCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4NiwgMHgwMDI5LCAweDExMTgsIDB4ZDE5YywgMHgxOTA0LCAweDFiM2UsIDB4MDAyNiwgMHgwMDM2LAotCTB4N2MyMCwgMHg3ZDI0LCAweDdlMzAsIDB4N2YzNCwgMHg3ODE4LCAweDY4MTIsIDB4NzgxYywgMHg2ODE2LAotCTB4MjAwMSwgMHgwMjAxLCAweDIwMDQsIDB4YTAwNSwgMHgwMTQwLCAweDc4MDgsIDB4ZDBlYywgMHgxMTI4LAotCTB4NzgwMywgMHgwMDA5LCAweDcwMDMsIDB4MDAwNCwgMHgwMDIwLCAweDAwMTYsIDB4MDgwYywgMHgxYzYyLAotCTB4MDAxZSwgMHg2YjI4LCAweDZhMmMsIDB4MDgwYywgMHgyMTVlLCAweDAwZDYsIDB4MjgwNSwgMHhhYzY4LAotCTB4NjAzNCwgMHhkMDljLCAweDExMjgsIDB4NjgwOCwgMHhhMzFhLCAweDY4MGMsIDB4YTIxMywgMHgwMDIwLAotCTB4NjgxMCwgMHhhMzFhLCAweDY4MTQsIDB4YTIxMywgMHgwMGRlLCAweGQxOTQsIDB4MDkwNCwgMHgxYWM4LAotCTB4MmEwMCwgMHg2ODI2LCAweDJjMDAsIDB4NjgxYSwgMHgyODAwLCAweDY4MzIsIDB4NjgwOCwgMHg4MDAxLAotCTB4NjgwYSwgMHg2YjJhLCAweDZhMmUsIDB4MDAzZSwgMHgwMDJlLCAweDA4MDQsIDB4MWI1MCwgMHgwMDU2LAotCTB4N2QwYywgMHgwODBjLCAweGFjNzMsIDB4MDA1ZSwgMHgwODBjLCAweDFkMjIsIDB4MDBmNiwgMHg3MDA0LAotCTB4MjA3OCwgMHgwODBjLCAweDUwMjksIDB4MDExOCwgMHg3ODIwLCAweGMwZjUsIDB4NzgyMiwgMHgwMGZlLAotCTB4NjgyYiwgMHhmZmZmLCAweDY4MmYsIDB4ZmZmZiwgMHg2ODA4LCAweDgwMDEsIDB4NjgwYSwgMHg2OTdjLAotCTB4NzkxYSwgMHg2OTgwLCAweDc5MWUsIDB4MDQ5MCwgMHg3ODA0LCAweGQwOWMsIDB4MDkwNCwgMHgxYTc0LAotCTB4N2MyMCwgMHg3ODI0LCAweGE0MDUsIDB4MTkwNCwgMHgxYTc0LCAweDc4MDMsIDB4MDAwMiwgMHgwODA0LAotCTB4MWJiNywgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweDcwMDQsIDB4YTAwZCwgMHgwMTUwLAotCTB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4MTEzMCwgMHg3MDA0LCAweDIwNjAsIDB4MjAwOSwgMHgwMDQ4LAotCTB4MDgwYywgMHg4MGE3LCAweDA4MGMsIDB4MTk1ZiwgMHgwMDg4LCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLAotCTB4MDAwMCwgMHg3MDA0LCAweDIwNjAsIDB4NjAxMCwgMHhhMDA1LCAweDBkYTAsIDB4MjA2OCwgMHg2ODA4LAotCTB4ODAwMCwgMHg2ODBhLCAweDZjMjgsIDB4NmIyYywgMHgwODBjLCAweDE5N2EsIDB4MDAxZSwgMHgwMDBlLAotCTB4MDEyZSwgMHgwMDA1LCAweDcwMGMsIDB4NzExMCwgMHhhMTA2LCAweDA5MDQsIDB4MWNlMSwgMHg3MDA0LAotCTB4MDAxNiwgMHgyMTBjLCAweGExMDYsIDB4MDAxZSwgMHgwOTA0LCAweDFjZTEsIDB4MDBkNiwgMHgwMGM2LAotCTB4MjE2YywgMHgyZDAwLCAweGEwMDUsIDB4MDkwNCwgMHgxY2RmLCAweDY4MjAsIDB4ZDBkNCwgMHgxOTA0LAotCTB4MWNkZiwgMHg2ODEwLCAweDIwNjgsIDB4Njg1MCwgMHhkMGZjLCAweDA1NTgsIDB4ODEwOCwgMHgyMTA0LAotCTB4NmIyYywgMHhhMzA2LCAweDE5MDQsIDB4MWNkZiwgMHg4MTA4LCAweDIxMDQsIDB4NmEyOCwgMHhhMjA2LAotCTB4MTkwNCwgMHgxY2RmLCAweDY4NTAsIDB4YzBmYywgMHhjMGY1LCAweDY4NTIsIDB4Njg2YywgMHg3ODIyLAotCTB4Njg3MCwgMHg3ODI2LCAweDY4MWMsIDB4NzgzMiwgMHg2ODIwLCAweDc4MzYsIDB4NjgxOCwgMHgyMDYwLAotCTB4NjAzNCwgMHhkMDljLCAweDAxNTAsIDB4NjgzMCwgMHgyMDA1LCAweDAwZDYsIDB4YWM2OCwgMHg2ODA4LAotCTB4NzgzYSwgMHg2ODBjLCAweDc4M2UsIDB4MDBkZSwgMHgwNGEwLCAweGEwMDYsIDB4NzgzYSwgMHg3ODNlLAotCTB4MDQ4MCwgMHg4MTA4LCAweDIxMDQsIDB4YTAwNSwgMHgxNTkwLCAweDgxMDgsIDB4MjEwNCwgMHhhMDA1LAotCTB4MTU3MCwgMHg2ODUwLCAweGMwZjUsIDB4Njg1MiwgMHg2ODMwLCAweDIwMDUsIDB4NjkxOCwgMHhhMTYwLAotCTB4YTE4MCwgMHgwMDBkLCAweDIwMDQsIDB4ZDA5YywgMHgxMTcwLCAweDYwMDgsIDB4NzgyMiwgMHg2ODZlLAotCTB4NjAwYywgMHg3ODI2LCAweDY4NzIsIDB4NjAwMCwgMHg3ODMyLCAweDYwMDQsIDB4NzgzNiwgMHhhMDA2LAotCTB4NzgzYSwgMHg3ODNlLCAweDAwNzAsIDB4NjAxMCwgMHg3ODIyLCAweDY4NmUsIDB4NjAxNCwgMHg3ODI2LAotCTB4Njg3MiwgMHg2MDAwLCAweDc4MzIsIDB4NjAwNCwgMHg3ODM2LCAweDYwMDgsIDB4NzgzYSwgMHg2MDBjLAotCTB4NzgzZSwgMHg2ODEwLCAweDc4MWEsIDB4NjgxNCwgMHg3ODFlLCAweDc4MDMsIDB4MDAxMSwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMDA1LCAweDIwMTEsIDB4MDIwMSwgMHgyMDA5LCAweDAwM2MsIDB4MjIwNCwgMHhhMDA1LAotCTB4MTExOCwgMHg4MTA5LCAweDFkZDgsIDB4MDAwNSwgMHgwMDA1LCAweDBjYTEsIDB4MDFlMCwgMHg3OTA4LAotCTB4ZDFlYywgMHgxMTYwLCAweDA4MGMsIDB4MWRkNywgMHgwMTQ4LCAweDc4MDMsIDB4MDAwOSwgMHg3OTA0LAotCTB4ZDFmYywgMHgwZGU4LCAweDc4MDMsIDB4MDAwNiwgMHgwYzI5LCAweDAxNjgsIDB4NzgwYywgMHhkMGE0LAotCTB4MTE1MCwgMHg3MDA3LCAweDAwMDAsIDB4MDgwYywgMHgxZGQ3LCAweDAxNDAsIDB4NzgwMywgMHgwMDE5LAotCTB4NzAwMywgMHgwMDAzLCAweDAwMTgsIDB4MDBiMSwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMTI2LAotCTB4MjA5MSwgMHgyMjAwLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAzLCAweDExNTAsIDB4NzAwYywgMHg3MTEwLAotCTB4YTEwNiwgMHgwMTMwLCAweDIwZTEsIDB4OTAyOCwgMHg3MDBmLCAweGIwMDMsIDB4NzAxMywgMHhiMDAzLAotCTB4MDEyZSwgMHgwMDA1LCAweDAwYzYsIDB4MDgwYywgMHg1NzRmLCAweDE1NTAsIDB4MjAwMSwgMHgwMTYwLAotCTB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDEzOCwgMHgyMDAzLCAweDAwMDAsIDB4MjAxMSwgMHgwMGM4LAotCTB4ZTAwMCwgMHhlMDAwLCAweDgyMTEsIDB4MWRlMCwgMHgwODBjLCAweDFkN2UsIDB4NzAwYywgMHg3MTEwLAotCTB4YTEwNiwgMHgwMTkwLCAweDIxMDQsIDB4YTAwNSwgMHgwMTMwLCAweDIwNjAsIDB4NjAxMCwgMHgyMDYwLAotCTB4NjAwOCwgMHg4MDAxLCAweDYwMGEsIDB4YTE4OCwgMHgwMDAzLCAweGExODIsIDB4YjAxZSwgMHgwMjEwLAotCTB4MjAwOSwgMHhiMDAzLCAweDcxMTIsIDB4MGM1MCwgMHgwODBjLCAweDU3ZDEsIDB4MDBjZSwgMHgwMDA1LAotCTB4MDRhOSwgMHgyMGUxLCAweDkwMjgsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDFkMCwgMHgyMTA0LAotCTB4YTAwNSwgMHgwMTMwLCAweDIwNjAsIDB4NjAxMCwgMHgyMDYwLCAweDYwMDgsIDB4ODAwMSwgMHg2MDBhLAotCTB4YTE4OCwgMHgwMDAzLCAweGExODIsIDB4YjAxZSwgMHgwMjEwLCAweDIwMDksIDB4YjAwMywgMHg3MTEyLAotCTB4NzAwYywgMHhhMTA2LCAweDFkNDAsIDB4MDgwYywgMHgyNzQ0LCAweDIwMDEsIDB4MDEzOCwgMHgyMTAyLAotCTB4MGMxMCwgMHgyMDAxLCAweDAxNWQsIDB4MjAwYywgMHg4MTBhLCAweDIxMDIsIDB4MjAwMSwgMHgwMTYwLAotCTB4MjUwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMGNlLCAweDAwMDUsIDB4MjBlMSwgMHg5MDI4LAotCTB4MjAwMSwgMHgwMTVkLCAweDIwMGMsIDB4ODEwYSwgMHgyMTAyLCAweDAwMDUsIDB4MjAwMSwgMHgwMTM4LAotCTB4MjAxNCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMTYwLCAweDIwMmMsIDB4MjAwMywgMHgwMDAwLAotCTB4MjAyMSwgMHhiMDE1LCAweDIwMDEsIDB4MDE0MSwgMHgyMDFjLCAweGQzZGMsIDB4MTE2OCwgMHgyMDAxLAotCTB4MDEwOSwgMHgyMDFjLCAweGEzOWMsIDB4MDA0OCwgMHgxMTM4LCAweDIwMDEsIDB4MDExMSwgMHgyMDFjLAotCTB4ODNmZiwgMHgxMTEwLCAweDg0MjEsIDB4MWQ3MCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMjAwLAotCTB4NzgwOCwgMHhhMDg0LCAweGYwMDAsIDB4YTEwZCwgMHgwOGM5LCAweDIwMTksIDB4NTAwMCwgMHg4MzE5LAotCTB4MDE2OCwgMHgyMDAxLCAweGIwMWUsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDAsIDB4MDEzOCwgMHgyMDAxLAotCTB4MDAyMSwgMHhkMGZjLCAweDBkYTAsIDB4MDgwYywgMHgxZmY0LCAweDBjNzgsIDB4MjBlMSwgMHg3MDAwLAotCTB4NzMyNCwgMHg3NDIwLCAweDcwMjgsIDB4NzAyOCwgMHg3NDI2LCAweDcwMzcsIDB4MDAwMSwgMHg4MTBmLAotCTB4NzEyZSwgMHg3MDJmLCAweDAxMDAsIDB4NzAzNywgMHgwMDA4LCAweDczMjYsIDB4NzQyMiwgMHgyMDAxLAotCTB4MDE2MCwgMHgyNTAyLCAweDIwMDEsIDB4MDEzOCwgMHgyMjAyLCAweDAwZWUsIDB4MDAwNSwgMHg3OTA4LAotCTB4YTE4YywgMHgwZmZmLCAweGExODIsIDB4MDAwOSwgMHgwMjE4LCAweGEwODUsIDB4MDAwMSwgMHgwMDg4LAotCTB4MjAwMSwgMHgwMjBhLCAweDgxZmYsIDB4MDEzMCwgMHgyMGUxLCAweDYwMDAsIDB4MjAwYywgMHgyMDBjLAotCTB4MjAwYywgMHgyMDBjLCAweDIwZTEsIDB4NzAwMCwgMHgyMDBjLCAweDIwMGMsIDB4NzAwMywgMHgwMDAwLAotCTB4YTAwNiwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMDE2LCAweDAwMjYsIDB4MjA3MSwgMHhhZmZkLAotCTB4MjA3OSwgMHgwMDMwLCAweDIwMTEsIDB4MDA1MCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwMWE4LAotCTB4ODIxMSwgMHgwMTg4LCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LCAweGQwOGMsIDB4MGRjOCwgMHg3OTA0LAotCTB4YTE4YywgMHgwNzgwLCAweDAwMTYsIDB4MDgwYywgMHgxYTZjLCAweDAwMWUsIDB4ODFmZiwgMHgxMTE4LAotCTB4MjAxMSwgMHgwMDUwLCAweDBjNDgsIDB4YTA4NSwgMHgwMDAxLCAweDAwMmUsIDB4MDAxZSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDc4MDMsIDB4MDAwNCwgMHgyMDA5LCAweDAwNjQsIDB4NzgwNCwgMHhkMGFjLAotCTB4MDkwNCwgMHgxZTY2LCAweDgxMDksIDB4MWRkMCwgMHgyMDA5LCAweDAxMDAsIDB4MjEwYywgMHhhMThhLAotCTB4MDAwMywgMHgwYTBjLCAweDE0ZjYsIDB4MDgwYywgMHgyMGYyLCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLAotCTB4YWZlYywgMHgyMDc5LCAweDAwMTAsIDB4NzAwNCwgMHhhMDg2LCAweDAwMDAsIDB4MDUzOCwgMHg3ODAwLAotCTB4MDAwNiwgMHg3ODIwLCAweDAwMDYsIDB4NzgzMCwgMHgwMDA2LCAweDc4MzQsIDB4MDAwNiwgMHg3ODM4LAotCTB4MDAwNiwgMHg3ODNjLCAweDAwMDYsIDB4NzgwMywgMHgwMDA0LCAweGUwMDAsIDB4ZTAwMCwgMHgyMDc5LAotCTB4MDAzMCwgMHg3ODA0LCAweGQwYWMsIDB4MTkwYywgMHgxNGY2LCAweDIwNzksIDB4MDAxMCwgMHgwMDBlLAotCTB4NzgzZSwgMHgwMDBlLCAweDc4M2EsIDB4MDAwZSwgMHg3ODM2LCAweDAwMGUsIDB4NzgzMiwgMHgwMDBlLAotCTB4NzgyMiwgMHgwMDBlLCAweDc4MDIsIDB4MDBmZSwgMHgwMGVlLCAweDAwMzAsIDB4MDBmZSwgMHgwMGVlLAotCTB4NzgwNCwgMHhkMGFjLCAweDE5MGMsIDB4MTRmNiwgMHgwODBjLCAweDZkMGQsIDB4MDAwNSwgMHgwMGU2LAotCTB4MjA3MSwgMHhiMDFlLCAweDcwMDMsIDB4MDAwMCwgMHgwMGVlLCAweDAwMDUsIDB4MDBkNiwgMHhhMjgwLAotCTB4MDAwNCwgMHgyMDZjLCAweDY5NGMsIDB4ZDFkYywgMHgxOTA0LCAweDFlZTQsIDB4NjkzNCwgMHhhMTg0LAotCTB4MDAwNywgMHgwMDAyLCAweDFlODIsIDB4MWVjZiwgMHgxZTgyLCAweDFlODIsIDB4MWU4MiwgMHgxZWI2LAotCTB4MWU5NSwgMHgxZTg0LCAweDA4MGMsIDB4MTRmNiwgMHg2ODRjLCAweGQwYjQsIDB4MDkwNCwgMHgxZmNjLAotCTB4Njg2MCwgMHg2ODJlLCAweDY4MTYsIDB4Njg1YywgMHg2ODJhLCAweDY4MTIsIDB4Njg3YywgMHg2ODBhLAotCTB4Njg4MCwgMHg2ODBlLCAweDY5NTgsIDB4MDgwNCwgMHgxZWQ3LCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4NiwgMHgwMDFlLCAweDFkMzgsIDB4Njg0YywgMHhkMGI0LCAweDA5MDQsIDB4MWZjYywgMHg2ODYwLAotCTB4NjgyZSwgMHg2ODE2LCAweDY4NWMsIDB4NjgyYSwgMHg2ODEyLCAweDY4N2MsIDB4NjgwYSwgMHg2ODgwLAotCTB4NjgwZSwgMHg2ODA0LCAweDY4MWEsIDB4YTA4MCwgMHgwMDBkLCAweDIwMDQsIDB4YTA4NCwgMHgwMDBmLAotCTB4YTA4MCwgMHgyMTg2LCAweDIwMDUsIDB4NjgzMiwgMHg2OTU4LCAweDA0NTAsIDB4YTE4YywgMHgwMGZmLAotCTB4YTE4NiwgMHgwMDE1LCAweDE1NDgsIDB4Njg0YywgMHhkMGI0LCAweDA5MDQsIDB4MWZjYywgMHg2ODA0LAotCTB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwgMHgyMTg2LAotCTB4MjAwNSwgMHg2ODMyLCAweDY5NTgsIDB4YTAwNiwgMHg2ODJlLCAweDY4MmEsIDB4MDA4OCwgMHg2ODRjLAotCTB4ZDBiNCwgMHgwOTA0LCAweDFhNDcsIDB4Njk1OCwgMHhhMDA2LCAweDY4MmUsIDB4NjgyYSwgMHgyZDAwLAotCTB4NjgxYSwgMHg2ODM0LCAweGEwODQsIDB4MDAwZiwgMHhhMDgwLCAweDIxODYsIDB4MjAwNSwgMHg2ODMyLAotCTB4NjkyNiwgMHg2ODRjLCAweGMwZGQsIDB4Njg0ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LAotCTB4MDAyMCwgMHg3ODA0LCAweGQwZmMsIDB4MTkwYywgMHgxZmY0LCAweDAwZTYsIDB4MDBkNiwgMHgyMDcxLAotCTB4YjAxZSwgMHg3MDAwLCAweGEwMDUsIDB4MTkwNCwgMHgxZjRjLCAweDAwYzYsIDB4NzIwNiwgMHhhMjgwLAotCTB4MDAwNCwgMHgyMDVjLCAweDcwMDQsIDB4MjA2OCwgMHg3ODAzLCAweDAwMDQsIDB4NjgxOCwgMHgwMGQ2LAotCTB4MjA2OCwgMHg2ODZjLCAweDc4MTIsIDB4Njg5MCwgMHgwMGY2LCAweDIwZTEsIDB4OTA0MCwgMHgyMDc5LAotCTB4MDIwMCwgMHg3ODFhLCAweDIwNzksIDB4MDEwMCwgMHg4MDA0LCAweDc4ZDYsIDB4MDBmZSwgMHgwMGRlLAotCTB4MmI2OCwgMHg2ODI0LCAweDIwNTAsIDB4NjgxOCwgMHgyMDYwLCAweDY4MzAsIDB4MjA0MCwgMHg2MDM0LAotCTB4YTBjYywgMHgwMDBmLCAweDY5MDgsIDB4NzkxYSwgMHg3MTE2LCAweDY4MGMsIDB4NzgxZSwgMHg3MDFhLAotCTB4YTAwNiwgMHg3MDBlLCAweDcwMTIsIDB4NzAwNCwgMHg2OTJjLCAweDY4MTQsIDB4YTEwNiwgMHgxMTIwLAotCTB4NjkyOCwgMHg2ODEwLCAweGExMDYsIDB4MDE1OCwgMHgwMDM2LCAweDAwNDYsIDB4NmIxNCwgMHg2YzEwLAotCTB4MDgwYywgMHgyMWE2LCAweDAwNGUsIDB4MDAzZSwgMHgwMTEwLCAweDAwY2UsIDB4MDBhOCwgMHg4YWZmLAotCTB4MTEyMCwgMHgwMGNlLCAweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA3OSwgMHgwMDIwLCAweDIwMDksIDB4MDAwMSwgMHgwMDU5LCAweDAxMTgsIDB4MjAwOSwgMHgwMDAxLAotCTB4MDAzOSwgMHgwMTJlLCAweDAwY2UsIDB4YTAwNiwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDA3NiwgMHgwMDY2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDM2LCAweDAwMjYsIDB4OGFmZiwgMHgwOTA0LAotCTB4MWZjNSwgMHg3MDBjLCAweDcyMTQsIDB4YTIzYSwgMHg3MDEwLCAweDcyMTgsIDB4YTIwMywgMHgwYTA0LAotCTB4MWZjNCwgMHhhNzA1LCAweDA5MDQsIDB4MWZjNCwgMHhhMDNlLCAweDI3MzAsIDB4Njg1MCwgMHhkMGZjLAotCTB4MTFhOCwgMHgwMGQ2LCAweDI4MDUsIDB4YWM2OCwgMHgyOTAwLCAweDAwMDIsIDB4MWZhNywgMHgxZjhjLAotCTB4MWY4YywgMHgxZmE3LCAweDFmYTcsIDB4MWZhMCwgMHgxZmE3LCAweDFmOGMsIDB4MWZhNywgMHgxZjkxLAotCTB4MWY5MSwgMHgxZmE3LCAweDFmYTcsIDB4MWZhNywgMHgxZjk4LCAweDFmOTEsIDB4YzBmYywgMHg2ODUyLAotCTB4NmI2YywgMHg2YTcwLCAweDZkMWMsIDB4NmMyMCwgMHhkOTljLCAweDA1MjgsIDB4MDBkNiwgMHgyODA1LAotCTB4YWM2OCwgMHg2ZjA4LCAweDZlMGMsIDB4MDBmMCwgMHg2YjA4LCAweDZhMGMsIDB4NmQwMCwgMHg2YzA0LAotCTB4MDBjOCwgMHg2YjEwLCAweDZhMTQsIDB4NmQwMCwgMHg2YzA0LCAweDZmMDgsIDB4NmUwYywgMHgwMDkwLAotCTB4MDBkZSwgMHgwMGQ2LCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAxZSwgMHgxMTM4LAotCTB4MDBkZSwgMHgwODBjLCAweDIxNDgsIDB4MTkwNCwgMHgxZjU2LCAweGEwMGUsIDB4MDBmMCwgMHgwMGRlLAotCTB4MDgwYywgMHgxNGY2LCAweDAwZGUsIDB4N2IyMiwgMHg3YTI2LCAweDdkMzIsIDB4N2MzNiwgMHg3ZjNhLAotCTB4N2UzZSwgMHg3OTAyLCAweDcwMDAsIDB4ODAwMCwgMHg3MDAyLCAweDY4MjgsIDB4YTMwMCwgMHg2ODJhLAotCTB4NjgyYywgMHhhMjAxLCAweDY4MmUsIDB4NzAwYywgMHhhMzAwLCAweDcwMGUsIDB4NzAxMCwgMHhhMjAxLAotCTB4NzAxMiwgMHgwODBjLCAweDIxNDgsIDB4MDAwOCwgMHhhMDA2LCAweDAwMmUsIDB4MDAzZSwgMHgwMDRlLAotCTB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsIDB4MDAwNSwgMHgwODBjLCAweDE0ZjYsIDB4MDAyNiwgMHgyMDAxLAotCTB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLAotCTB4MDAwMCwgMHg3MDA0LCAweDIwNjAsIDB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHg5NTk2LAotCTB4MDExOCwgMHg2ODUwLCAweGMwYmQsIDB4Njg1MiwgMHgwMGRlLCAweDA4MGMsIDB4OTI5YywgMHgyMGUxLAotCTB4OTA0MCwgMHgwODBjLCAweDdjYjgsIDB4MjAxMSwgMHgwMDAwLCAweDA4MGMsIDB4N2FlOSwgMHgwODBjLAotCTB4NmQwZCwgMHgwMDJlLCAweDA4MDQsIDB4MjBhZCwgMHgwMTI2LCAweDIwOTEsIDB4MjQwMCwgMHgwMDA2LAotCTB4MDAxNiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDIwNzksIDB4MDAyMCwgMHgyMDcxLAotCTB4YjAxZSwgMHgyYjY4LCAweDY4MTgsIDB4MjA2MCwgMHg3OTA0LCAweDc4MDMsIDB4MDAwMiwgMHhhMTg0LAotCTB4MDcwMCwgMHgxOTIwLCAweDcwMDAsIDB4MDAwMiwgMHgyMGFkLCAweDIwMTAsIDB4MjA4MCwgMHgyMGFiLAotCTB4ODAwMSwgMHg3MDAyLCAweGQxOWMsIDB4MTE3MCwgMHg4YWZmLCAweDA1ZDAsIDB4MjAwOSwgMHgwMDAxLAotCTB4MDgwYywgMHgxZjUwLCAweDA5MDQsIDB4MjBhZCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgxZjUwLAotCTB4MDgwNCwgMHgyMGFkLCAweDc4MDMsIDB4MDAwNCwgMHhkMTk0LCAweDAxNDgsIDB4Njg1MCwgMHhjMGZjLAotCTB4Njg1MiwgMHg4YWZmLCAweDExZDgsIDB4Njg0YywgMHhjMGY1LCAweDY4NGUsIDB4MDBiOCwgMHgwMDI2LAotCTB4MDAzNiwgMHg2YjI4LCAweDZhMmMsIDB4NzgyMCwgMHg2ODZlLCAweGEzMWEsIDB4NzgyNCwgMHg2ODcyLAotCTB4YTIxMywgMHg3ODMwLCAweDY4MWUsIDB4NzgzNCwgMHg2ODIyLCAweDZiMmEsIDB4NmEyZSwgMHgwMDNlLAotCTB4MDAyZSwgMHgwODBjLCAweDIxNWUsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4MmEwMCwgMHg2ODI2LAotCTB4MmMwMCwgMHg2ODFhLCAweDI4MDAsIDB4NjgzMiwgMHg3MDAzLCAweDAwMDAsIDB4MDgwNCwgMHgyMGFkLAotCTB4MDBmNiwgMHgwMDI2LCAweDc4MWMsIDB4MDAwNiwgMHg3ODE4LCAweDAwMDYsIDB4MjA3OSwgMHgwMTAwLAotCTB4N2ExNCwgMHhhMjg0LCAweDAxODQsIDB4YTA4NSwgMHgwMDEyLCAweDc4MTYsIDB4MDAzNiwgMHgyMDE5LAotCTB4MTAwMCwgMHg4MzE5LCAweDA5MGMsIDB4MTRmNiwgMHg3ODIwLCAweGQwYmMsIDB4MWRkMCwgMHgwMDNlLAotCTB4NzljOCwgMHgwMDBlLCAweGExMDIsIDB4MDAxZSwgMHgwMDA2LCAweDAwMTYsIDB4NzljNCwgMHgwMDBlLAotCTB4YTEwMywgMHg3OGM2LCAweDAwMGUsIDB4NzhjYSwgMHhhMjg0LCAweDAxODQsIDB4YTA4NSwgMHgwMDEyLAotCTB4NzgxNiwgMHgwMDJlLCAweDAwZmUsIDB4NzgwMywgMHgwMDA4LCAweDcwMDMsIDB4MDAwMCwgMHgwNDY4LAotCTB4ODAwMSwgMHg3MDAyLCAweGQxOTQsIDB4MDE2OCwgMHg3ODA0LCAweGQwZmMsIDB4MTkwNCwgMHgyMDA0LAotCTB4ZDE5YywgMHgxMWY4LCAweDhhZmYsIDB4MDUwOCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgxZjUwLAotCTB4MDBlMCwgMHgwMDI2LCAweDAwMzYsIDB4NmIyOCwgMHg2YTJjLCAweDA4MGMsIDB4MjE1ZSwgMHgwMGQ2LAotCTB4MjgwNSwgMHhhYzY4LCAweDYwMzQsIDB4ZDA5YywgMHgxMTI4LCAweDY4MDgsIDB4YTMxYSwgMHg2ODBjLAotCTB4YTIxMywgMHgwMDIwLCAweDY4MTAsIDB4YTMxYSwgMHg2ODE0LCAweGEyMTMsIDB4MDBkZSwgMHgwODA0LAotCTB4MjAzMywgMHgwODA0LCAweDIwMmYsIDB4MDgwYywgMHgxNGY2LCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDFlLCAweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgyMDcxLAotCTB4YjAxZSwgMHg3MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwNTkwLCAweDIwNzksIDB4MDAyMCwgMHgwMDE2LAotCTB4MjAwOSwgMHgwMjA3LCAweDIxMGMsIDB4ZDE5NCwgMHgwMTU4LCAweDIwMDksIDB4MDIwYywgMHgyMTBjLAotCTB4YTE4NCwgMHgwMDAzLCAweDAxMjgsIDB4MjBlMSwgMHg5MDQwLCAweDIwMDEsIDB4MDIwYywgMHgyMTAyLAotCTB4MjAwOSwgMHgwMjA2LCAweDIxMDQsIDB4MjAwOSwgMHgwMjAzLCAweDIxMGMsIDB4YTEwNiwgMHgxMTEwLAotCTB4MjBlMSwgMHg5MDQwLCAweDc4MDQsIDB4ZDBmYywgMHgwZDE4LCAweDA4MGMsIDB4MWZmNCwgMHg3MDAwLAotCTB4YTA4NiwgMHgwMDAwLCAweDE5ZTgsIDB4MDAxZSwgMHg3ODAzLCAweDAwMDQsIDB4NzgwNCwgMHhkMGFjLAotCTB4MWRlOCwgMHgyMGUxLCAweDkwNDAsIDB4NzgwMywgMHgwMDAyLCAweDcwMDMsIDB4MDAwMCwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDAwMjYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLAotCTB4YjAxZSwgMHgyMDc5LCAweDAwMjAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDU0MCwgMHg3MDA0LAotCTB4MjA2MCwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNTgsIDB4Njg1MCwgMHhjMGI1LAotCTB4Njg1MiwgMHg2ODBjLCAweDdhMWMsIDB4YTIwNiwgMHgxMTIwLCAweDY4MDgsIDB4N2ExOCwgMHhhMjA2LAotCTB4MDFlMCwgMHgyMDAxLCAweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLAotCTB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDA4MGMsIDB4OTI5YywgMHgyMGUxLAotCTB4OTA0MCwgMHgwODBjLCAweDdjYjgsIDB4MjAxMSwgMHgwMDAwLCAweDA4MGMsIDB4N2FlOSwgMHgwMGZlLAotCTB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAyZSwgMHgwMDA1LCAweDY4MTAsIDB4NmExNCwgMHhhMjA1LAotCTB4MWQwMCwgMHg2ODRjLCAweGMwZGMsIDB4Njg0ZSwgMHgyYzEwLCAweDA4MGMsIDB4MWU2ZSwgMHgyMDAxLAotCTB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLAotCTB4MDAwMCwgMHgyMDY5LCAweGFmYzcsIDB4NjgzMywgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwgMHgwOGY4LAotCTB4ODg0MCwgMHgyODA1LCAweGEwMDUsIDB4MTE3MCwgMHg2MDA0LCAweGEwMDUsIDB4MDE2OCwgMHg2ODFhLAotCTB4MjA2MCwgMHg2MDM0LCAweGEwODQsIDB4MDAwZiwgMHhhMDgwLCAweDIxODYsIDB4MjA0NSwgMHg4OGZmLAotCTB4MDkwYywgMHgxNGY2LCAweDhhNTEsIDB4MDAwNSwgMHgyMDUwLCAweDAwMDUsIDB4OGE1MCwgMHg4ODQxLAotCTB4MjgwNSwgMHhhMDA1LCAweDExOTAsIDB4MmMwMCwgMHhhZDA2LCAweDAxMjAsIDB4NjAwMCwgMHhhMDA1LAotCTB4MTEwOCwgMHgyZDAwLCAweDIwNjAsIDB4NjgxYSwgMHg2MDM0LCAweGEwODQsIDB4MDAwZiwgMHhhMDgwLAotCTB4MjE5NiwgMHgyMDQ1LCAweDg4ZmYsIDB4MDkwYywgMHgxNGY2LCAweDAwMDUsIDB4MDAwMCwgMHgwMDExLAotCTB4MDAxNSwgMHgwMDE5LCAweDAwMWQsIDB4MDAyMSwgMHgwMDI1LCAweDAwMjksIDB4MDAwMCwgMHgwMDBmLAotCTB4MDAxNSwgMHgwMDFiLCAweDAwMjEsIDB4MDAyNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTdiLAotCTB4MjE3NywgMHgwMDAwLCAweDAwMDAsIDB4MjE4NSwgMHgwMDAwLCAweDIxN2IsIDB4MDAwMCwgMHgyMTgyLAotCTB4MjE3ZiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTg1LCAweDIxODIsIDB4MDAwMCwgMHgyMTdkLAotCTB4MjE3ZCwgMHgwMDAwLCAweDAwMDAsIDB4MjE4NSwgMHgwMDAwLCAweDIxN2QsIDB4MDAwMCwgMHgyMTgzLAotCTB4MjE4MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTg1LCAweDIxODMsIDB4MDBhNiwgMHgwMDk2LAotCTB4MDA4NiwgMHg2YjJlLCAweDZjMmEsIDB4Njg1OCwgMHhhMDU1LCAweDA5MDQsIDB4MjIzNywgMHgyZDYwLAotCTB4NjAzNCwgMHhhMGNjLCAweDAwMGYsIDB4YTljMCwgMHgyMTg2LCAweGE5ODYsIDB4MDAwNywgMHgwMTMwLAotCTB4YTk4NiwgMHgwMDBlLCAweDAxMTgsIDB4YTk4NiwgMHgwMDBmLCAweDExMjAsIDB4NjA1YywgMHhhNDIyLAotCTB4NjA2MCwgMHhhMzFhLCAweDI4MDUsIDB4YTA0NSwgMHgxMTQwLCAweDAzMTAsIDB4MDgwNCwgMHgyMjM3LAotCTB4NjAwNCwgMHhhMDY1LCAweDA5MDQsIDB4MjIzNywgMHgwYzE4LCAweDI4MDUsIDB4YTAwNSwgMHgwMWE4LAotCTB4YWM2OCwgMHhkOTljLCAweDExMjgsIDB4NjgwOCwgMHhhNDIyLCAweDY4MGMsIDB4YTMxYiwgMHgwMDIwLAotCTB4NjgxMCwgMHhhNDIyLCAweDY4MTQsIDB4YTMxYiwgMHgwNjIwLCAweDIzMDAsIDB4YTQwNSwgMHgwMTUwLAotCTB4OGE1MSwgMHgwOTA0LCAweDIyMzcsIDB4ODg0MCwgMHgwYzQwLCAweDYwMDQsIDB4YTA2NSwgMHgwOTA0LAotCTB4MjIzNywgMHgwODMwLCAweDhhNTEsIDB4MDkwNCwgMHgyMjM3LCAweDg4NDAsIDB4MjgwNSwgMHhhMDA1LAotCTB4MTE1OCwgMHg2MDA0LCAweGEwNjUsIDB4MDkwNCwgMHgyMjM3LCAweDYwMzQsIDB4YTBjYywgMHgwMDBmLAotCTB4YTljMCwgMHgyMTg2LCAweDI4MDUsIDB4MjA0MCwgMHgyYjY4LCAweDY4NTAsIDB4YzBmYywgMHg2ODUyLAotCTB4MDQ1OCwgMHg4NDIyLCAweDg0MjAsIDB4ODMxYSwgMHhhMzk5LCAweDAwMDAsIDB4MDBkNiwgMHgyYjY4LAotCTB4NmM2ZSwgMHg2YjcyLCAweDAwZGUsIDB4ZDk5YywgMHgxMTY4LCAweDY5MDgsIDB4MjQwMCwgMHhhMTIyLAotCTB4NjkwYywgMHgyMzAwLCAweGExMWIsIDB4MGEwYywgMHgxNGY2LCAweDY4MDAsIDB4YTQyMCwgMHg2ODA0LAotCTB4YTMxOSwgMHgwMDYwLCAweDY5MTAsIDB4MjQwMCwgMHhhMTIyLCAweDY5MTQsIDB4MjMwMCwgMHhhMTFiLAotCTB4MGEwYywgMHgxNGY2LCAweDY4MDAsIDB4YTQyMCwgMHg2ODA0LCAweGEzMTksIDB4MmI2OCwgMHg2YzFlLAotCTB4NmIyMiwgMHg2ODUwLCAweGMwZmQsIDB4Njg1MiwgMHgyYzAwLCAweDY4MWEsIDB4MjgwMCwgMHg2ODMyLAotCTB4MmEwMCwgMHg2ODI2LCAweDAwMGUsIDB4MDAwZSwgMHgwMDBlLCAweGEwMDYsIDB4MDAyOCwgMHgwMDhlLAotCTB4MDA5ZSwgMHgwMGFlLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LAotCTB4YTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4MjI0YiwgMHgyMjRjLCAweDIyNGYsIDB4MjI1MiwgMHgyMjU3LAotCTB4MjI1YSwgMHgyMjVmLCAweDIyNjQsIDB4MDAwNSwgMHgwODBjLCAweDFmZjQsIDB4MDAwNSwgMHgwODBjLAotCTB4MWE2YywgMHgwMDA1LCAweDA4MGMsIDB4MWE2YywgMHgwODBjLCAweDFmZjQsIDB4MDAwNSwgMHgwODBjLAotCTB4MTZmOCwgMHgwMDA1LCAweDA4MGMsIDB4MWZmNCwgMHgwODBjLCAweDE2ZjgsIDB4MDAwNSwgMHgwODBjLAotCTB4MWE2YywgMHgwODBjLCAweDE2ZjgsIDB4MDAwNSwgMHgwODBjLCAweDFhNmMsIDB4MDgwYywgMHgxZmY0LAotCTB4MDgwYywgMHgxNmY4LCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDI2MDAsIDB4MjA3OSwgMHgwMjAwLAotCTB4MjA3MSwgMHhiMjgwLCAweDIwNjksIDB4YWQwMCwgMHgyMDA5LCAweDAwMDQsIDB4NzkxMiwgMHg3ODE3LAotCTB4MDAwNCwgMHgwODBjLCAweDI2NTEsIDB4NzgxYiwgMHgwMDAyLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLAotCTB4NDAwMCwgMHgyMGE5LCAweDAwODAsIDB4NzgyZiwgMHgwMDAwLCAweDFmMDQsIDB4MjI4MywgMHgyMGUxLAotCTB4OTA4MCwgMHg3ODNiLCAweDAwMWYsIDB4MjBlMSwgMHg4NzAwLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LAotCTB4MjA5MSwgMHgyNjAwLCAweDc4MWMsIDB4ZDBhNCwgMHgxOTBjLCAweDIzMzUsIDB4YTA4NCwgMHgwMDA3LAotCTB4MDAwMiwgMHgyMmIzLCAweDIyYTEsIDB4MjJhNCwgMHgyMmE3LCAweDIyYWMsIDB4MjJhZSwgMHgyMmIwLAotCTB4MjJiMiwgMHgwODBjLCAweDVmYjcsIDB4MDA3OCwgMHgwODBjLCAweDVmZjAsIDB4MDA2MCwgMHgwODBjLAotCTB4NWZiNywgMHgwODBjLCAweDVmZjAsIDB4MDAzOCwgMHgwMDQxLCAweDAwMjgsIDB4MDAzMSwgMHgwMDE4LAotCTB4MDAyMSwgMHgwMDA4LCAweDAwMTEsIDB4MDEyZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LAotCTB4NzkzMCwgMHhhMTg0LCAweDAwMDMsIDB4MDExOCwgMHgyMGUxLCAweDkwNDAsIDB4MDRhMCwgMHhhMTg0LAotCTB4MDAzMCwgMHgwMWUwLCAweDZhMDAsIDB4YTI4NiwgMHgwMDAzLCAweDExMDgsIDB4MDBhMCwgMHgwODBjLAotCTB4NTc0ZiwgMHgxMTc4LCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhZDAwLAotCTB4MjAwMywgMHgwMDAxLCAweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDU3OTMsIDB4MDgwYywgMHg1NjlhLAotCTB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MjBlMSwgMHg5MDEwLCAweDAwYTgsIDB4YTE4NCwgMHgwMGMwLAotCTB4MDE2OCwgMHgwMGU2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDIwNzEsIDB4YWZmZCwgMHgwODBjLAotCTB4MWQyMiwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMGVlLCAweDAwMjgsIDB4YTE4NCwgMHgwMzAwLAotCTB4MDExMCwgMHgyMGUxLCAweDkwMjAsIDB4NzkzMiwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHhhZDAwLCAweDcxMjgsIDB4MjAwMSwgMHhhZjkwLAotCTB4MjEwMiwgMHgyMDAxLCAweGFmOTgsIDB4MjEwMiwgMHhhMTgyLCAweDAyMTEsIDB4MTIxOCwgMHgyMDA5LAotCTB4MDAwOCwgMHgwNDAwLCAweGExODIsIDB4MDI1OSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNywgMHgwMGQwLAotCTB4YTE4MiwgMHgwMmMxLCAweDEyMTgsIDB4MjAwOSwgMHgwMDA2LCAweDAwYTAsIDB4YTE4MiwgMHgwMzQ5LAotCTB4MTIxOCwgMHgyMDA5LCAweDAwMDUsIDB4MDA3MCwgMHhhMTgyLCAweDA0MjEsIDB4MTIxOCwgMHgyMDA5LAotCTB4MDAwNCwgMHgwMDQwLCAweGExODIsIDB4MDU4MSwgMHgxMjE4LCAweDIwMDksIDB4MDAwMywgMHgwMDEwLAotCTB4MjAwOSwgMHgwMDAyLCAweDIwNzksIDB4MDIwMCwgMHg3OTEyLCAweDc4MTcsIDB4MDAwNCwgMHgwODBjLAotCTB4MjY1MSwgMHgwMGZlLCAweDAwZWUsIDB4MDAxZSwgMHgwMDA1LCAweDc5MzgsIDB4MDgwYywgMHgxNGY2LAotCTB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwgMHg2MDI0LAotCTB4NjAyNiwgMHg2MDUzLCAweDAwMzAsIDB4MDgwYywgMHgyNjkwLCAweDYwNTAsIDB4YTA4NCwgMHhmZTdmLAotCTB4NjA1MiwgMHgyMDA5LCAweDAwZWYsIDB4NjEzMiwgMHg2MTM2LCAweDA4MGMsIDB4MjZhMCwgMHg2MGU3LAotCTB4MDAwMCwgMHg2MWVhLCAweDYwZTMsIDB4MDAwOCwgMHg2MDRiLCAweGY3ZjcsIDB4NjA0MywgMHgwMDAwLAotCTB4NjAyZiwgMHgwMDgwLCAweDYwMmYsIDB4MDAwMCwgMHg2MDA3LCAweDBlOWYsIDB4NjAxYiwgMHgwMDFlLAotCTB4NjAwZiwgMHgwMGZmLCAweDIwMDEsIDB4YWY4YywgMHgyMDAzLCAweDAwZmYsIDB4NjAyYiwgMHgwMDJmLAotCTB4MDEyZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQzMSwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHhhZDMwLAotCTB4MjAwMywgMHgwMDAxLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MDAwNiwgMHgwMDE2LAotCTB4MDAyNiwgMHg2MTI0LCAweGExODQsIDB4MWUyYywgMHgxMTE4LCAweGExODQsIDB4MDAwNywgMHgwMDJhLAotCTB4YTE5NSwgMHgwMDA0LCAweGEyODQsIDB4MDAwNywgMHgwMDAyLCAweDIzYTcsIDB4MjM4ZCwgMHgyMzkwLAotCTB4MjM5MywgMHgyMzk4LCAweDIzOWEsIDB4MjM5ZSwgMHgyM2EyLCAweDA4MGMsIDB4NjY5OSwgMHgwMGI4LAotCTB4MDgwYywgMHg2Nzc0LCAweDAwYTAsIDB4MDgwYywgMHg2Nzc0LCAweDA4MGMsIDB4NjY5OSwgMHgwMDc4LAotCTB4MDA5OSwgMHgwMDY4LCAweDA4MGMsIDB4NjY5OSwgMHgwMDc5LCAweDAwNDgsIDB4MDgwYywgMHg2Nzc0LAotCTB4MDA1OSwgMHgwMDI4LCAweDA4MGMsIDB4Njc3NCwgMHgwODBjLCAweDY2OTksIDB4MDAyOSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHg2MTI0LCAweGQxOWMsIDB4MTkwNCwgMHgyNWJmLAotCTB4MDgwYywgMHg1NzRmLCAweDA1NzgsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDE5OCwgMHg2MDI0LAotCTB4YTA4NCwgMHgxODAwLCAweDAxNzgsIDB4MDgwYywgMHg1Nzc1LCAweDAxMTgsIDB4MDgwYywgMHg1NzYxLAotCTB4MTE0OCwgMHg2MDI3LCAweDAwMjAsIDB4NjA0MywgMHgwMDAwLCAweDIwMDEsIDB4YWY5ZCwgMHgyMDAzLAotCTB4YWFhYSwgMHgwNDU4LCAweDA4MGMsIDB4NTc3NSwgMHgxNWQwLCAweDYwMjQsIDB4YTA4NCwgMHgxODAwLAotCTB4MTEwOCwgMHgwNGE4LCAweDIwMDEsIDB4YWY5ZCwgMHgyMDAzLCAweGFhYWEsIDB4MjAwMSwgMHhhZjllLAotCTB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywgMHg1NjlhLAotCTB4MDgwNCwgMHgyNWJmLCAweGQxYWMsIDB4MTUxOCwgMHg2MDI0LCAweGQwZGMsIDB4MTE3MCwgMHhkMGU0LAotCTB4MTE4OCwgMHhkMGQ0LCAweDExYTAsIDB4ZDBjYywgMHgwMTMwLCAweDcwODgsIDB4YTA4NiwgMHgwMDI4LAotCTB4MTExMCwgMHgwODBjLCAweDU4ZGEsIDB4MDgwNCwgMHgyNWJmLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLAotCTB4MDAwMCwgMHgwMDQ4LCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDIsIDB4MDAyMCwgMHgwODBjLAotCTB4NTg0ZCwgMHgwODA0LCAweDI1YmYsIDB4MDgwYywgMHg1OTdhLCAweDA4MDQsIDB4MjViZiwgMHhkMWFjLAotCTB4MDkwNCwgMHgyNTA3LCAweDA4MGMsIDB4NTc0ZiwgMHgxMWQ4LCAweDYwMjcsIDB4MDAyMCwgMHgwMDA2LAotCTB4MDAyNiwgMHgwMDM2LCAweDA4MGMsIDB4NTc2YiwgMHgxMTcwLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLAotCTB4MDAwMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NTY5YSwgMHgwMDNlLAotCTB4MDAyZSwgMHgwMDBlLCAweDAwMDUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMGUsIDB4MDgwYywgMHg1NzI2LAotCTB4MDAxNiwgMHgwMDQ2LCAweDAwYzYsIDB4NjQ0YywgMHhhNDg2LCAweGYwZjAsIDB4MTEzOCwgMHgyMDYxLAotCTB4MDEwMCwgMHg2NDRhLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4NzRjYSwgMHhhNDhjLAotCTB4ZmYwMCwgMHg3MDM0LCAweGQwODQsIDB4MDE3OCwgMHhhMTg2LCAweGY4MDAsIDB4MTE2MCwgMHg3MDM4LAotCTB4ZDA4NCwgMHgxMTQ4LCAweGMwODUsIDB4NzAzYSwgMHgwMDM2LCAweDI0MTgsIDB4MjAxMSwgMHg4MDE2LAotCTB4MDgwYywgMHgzYzVjLCAweDAwM2UsIDB4YTE5NiwgMHhmZjAwLCAweDA1YjgsIDB4NzA1MCwgMHhhMDg0LAotCTB4MDBmZiwgMHg4MTBmLCAweGExMTYsIDB4MDU4OCwgMHg3MTMwLCAweGQxODQsIDB4MTU3MCwgMHgyMDExLAotCTB4YWQ1MiwgMHgyMjE0LCAweGQyZWMsIDB4MDEzOCwgMHhjMThkLCAweDcxMzIsIDB4MjAxMSwgMHhhZDUyLAotCTB4MjIxNCwgMHhkMmFjLCAweDE1MTAsIDB4NjI0MCwgMHhhMjk0LCAweDAwMTAsIDB4MDEzMCwgMHg2MjQ4LAotCTB4YTI5NCwgMHhmZjAwLCAweGEyOTYsIDB4ZmYwMCwgMHgwMWMwLCAweDcwMzAsIDB4ZDA4YywgMHgwOTA0LAotCTB4MjRkMiwgMHg3MDM0LCAweGQwOGMsIDB4MTE0MCwgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywgMHhkMWFjLAotCTB4MTkwNCwgMHgyNGQyLCAweGMxYWQsIDB4MjEwMiwgMHgwMDM2LCAweDczYzgsIDB4MjAxMSwgMHg4MDEzLAotCTB4MDgwYywgMHgzYzVjLCAweDAwM2UsIDB4MDgwNCwgMHgyNGQyLCAweDcwMzQsIDB4ZDA4YywgMHgxMTQwLAotCTB4MjAwMSwgMHhhZDBjLCAweDIwMGMsIDB4ZDFhYywgMHgxOTA0LCAweDI0ZDIsIDB4YzFhZCwgMHgyMTAyLAotCTB4MDAzNiwgMHg3M2M4LCAweDIwMTEsIDB4ODAxMywgMHgwODBjLCAweDNjNWMsIDB4MDAzZSwgMHg3MTMwLAotCTB4YzE4NSwgMHg3MTMyLCAweDIwMTEsIDB4YWQ1MiwgMHgyMjBjLCAweGQxYTQsIDB4MDFkMCwgMHgwMDE2LAotCTB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDEwMCwgMHgwODBjLCAweDY2M2YsIDB4MjAxOSwgMHgwMDBlLAotCTB4MDgwYywgMHhhOGViLCAweGE0ODQsIDB4MDBmZiwgMHhhMDgwLCAweDJiZTYsIDB4MjAwZCwgMHhhMThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweDgxMjcsIDB4YTAwNiwgMHgyMDA5LCAweDAwMGUsIDB4MDgwYywgMHhhOTZjLAotCTB4MDAxZSwgMHhkMWFjLCAweDExNDgsIDB4MDAxNiwgMHgyMDA5LCAweDAwMDAsIDB4MjAxOSwgMHgwMDA0LAotCTB4MDgwYywgMHgyYWFjLCAweDAwMWUsIDB4MDA3MCwgMHgwMTU2LCAweDIwYTksIDB4MDA3ZiwgMHgyMDA5LAotCTB4MDAwMCwgMHgwODBjLCAweDRjZGMsIDB4MTExMCwgMHgwODBjLCAweDQ5M2EsIDB4ODEwOCwgMHgxZjA0LAotCTB4MjRjOSwgMHgwMTVlLCAweDAwY2UsIDB4MDA0ZSwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg3YWRmLAotCTB4MjAxMSwgMHgwMDAyLCAweDA4MGMsIDB4N2FlOSwgMHgwODBjLCAweDc5ZTEsIDB4MDgwYywgMHg2NTgxLAotCTB4MDAzNiwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywgMHg3YTY0LCAweDAwM2UsIDB4NjBlMywgMHgwMDAwLAotCTB4MDAxZSwgMHgyMDAxLCAweGFkMDAsIDB4MjAxNCwgMHhhMjk2LCAweDAwMDQsIDB4MTEyOCwgMHhkMTljLAotCTB4MTExOCwgMHg2MjI4LCAweGMyOWQsIDB4NjIyYSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhZDIyLAotCTB4MjAwMywgMHgwMDAwLCAweDYwMjcsIDB4MDAyMCwgMHgwODBjLCAweDU3NzUsIDB4MTE0MCwgMHgwMDE2LAotCTB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NTY3YiwgMHgwODBjLCAweDY1OTMsIDB4MDAxZSwgMHhkMTk0LAotCTB4MDkwNCwgMHgyNWJmLCAweDAwMTYsIDB4NjIyMCwgMHhkMmI0LCAweDA5MDQsIDB4MjU3MCwgMHgwODBjLAotCTB4NjU4MSwgMHgwODBjLCAweDc4MzQsIDB4NjAyNywgMHgwMDA0LCAweDAwZjYsIDB4MjAxOSwgMHhhZmQwLAotCTB4MjMwNCwgMHhhMDdkLCAweDA1NzAsIDB4NzgwNCwgMHhhMDg2LCAweDAwMzIsIDB4MTU1MCwgMHgwMGQ2LAotCTB4MDBjNiwgMHgwMGU2LCAweDIwNjksIDB4MDE0MCwgMHg2MThjLCAweDYyODgsIDB4NzgxOCwgMHg2MDhlLAotCTB4NzgwOCwgMHg2MDhhLCAweDYwNDMsIDB4MDAwMiwgMHgyMDAxLCAweDAwMDMsIDB4ODAwMSwgMHgxZGYwLAotCTB4NjA0MywgMHgwMDAwLCAweDY4MDMsIDB4MTAwMCwgMHg2ODAzLCAweDAwMDAsIDB4NjE4ZSwgMHg2MjhhLAotCTB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4NmM1MCwgMHg3ODEwLCAweDIwNzAsIDB4NzAzNywgMHgwMTAzLAotCTB4MmY2MCwgMHgwODBjLCAweDgwNzgsIDB4MDBlZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBmZSwgMHgwMDFlLAotCTB4MDAwNSwgMHgwMGZlLCAweDAwZDYsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDQsIDB4YTA4NCwgMHg0MDAwLAotCTB4MDEyMCwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywgMHgwMDAwLCAweDAwZGUsIDB4MDBjNiwgMHgyMDYxLAotCTB4YWZjNywgMHg2MDI4LCAweGEwOWEsIDB4MDBjOCwgMHgxMjM4LCAweDgwMDAsIDB4NjAyYSwgMHgwMGNlLAotCTB4MDgwYywgMHg3ODI3LCAweDA4MDQsIDB4MjViZSwgMHgyMDE5LCAweGFmZDAsIDB4MjMwNCwgMHhhMDY1LAotCTB4MDEyMCwgMHgyMDA5LCAweDAwMjcsIDB4MDgwYywgMHg4MGE3LCAweDAwY2UsIDB4MDgwNCwgMHgyNWJlLAotCTB4ZDJiYywgMHgwOTA0LCAweDI1YmUsIDB4MDgwYywgMHg2NThlLCAweDYwMTQsIDB4YTA4NCwgMHgwMTg0LAotCTB4YTA4NSwgMHgwMDEwLCAweDYwMTYsIDB4NjAyNywgMHgwMDA0LCAweDAwZDYsIDB4MjA2OSwgMHgwMTQwLAotCTB4NjgwNCwgMHhhMDg0LCAweDQwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywgMHgwMDAwLAotCTB4MDBkZSwgMHgwMGM2LCAweDIwNjEsIDB4YWZjNywgMHg2MDQ0LCAweGEwOWEsIDB4MDBjOCwgMHgxMmYwLAotCTB4ODAwMCwgMHg2MDQ2LCAweDYwM2MsIDB4MDBjZSwgMHhhMDA1LCAweDA1NDAsIDB4MjAwOSwgMHgwN2QwLAotCTB4MDgwYywgMHg2NTg2LCAweGEwODAsIDB4MDAwNywgMHgyMDA0LCAweGEwODYsIDB4MDAwNiwgMHgxMTM4LAotCTB4NjExNCwgMHhhMThjLCAweDAxODQsIDB4YTE4ZCwgMHgwMDEyLCAweDYxMTYsIDB4MDBiOCwgMHg2MTE0LAotCTB4YTE4YywgMHgwMTg0LCAweGExOGQsIDB4MDAxNiwgMHg2MTE2LCAweDAwODAsIDB4MDAzNiwgMHgyMDE5LAotCTB4MDAwMSwgMHgwODBjLCAweDdhNjQsIDB4MDAzZSwgMHgyMDE5LCAweGFmZDYsIDB4MjMwNCwgMHhhMDY1LAotCTB4MDEyMCwgMHgyMDA5LCAweDAwNGYsIDB4MDgwYywgMHg4MGE3LCAweDAwY2UsIDB4MDAxZSwgMHhkMTljLAotCTB4MDkwNCwgMHgyNjFhLCAweDcwMzQsIDB4ZDBhYywgMHgxNTYwLCAweDAwMTYsIDB4MDE1NiwgMHg2MDI3LAotCTB4MDAwOCwgMHg2MDJmLCAweDAwMjAsIDB4MjBhOSwgMHgwMDA2LCAweDFkMDQsIDB4MjVjZCwgMHgyMDkxLAotCTB4NjAwMCwgMHgxZjA0LCAweDI1Y2QsIDB4NjAyZiwgMHgwMDAwLCAweDYxNTAsIDB4YTE4NSwgMHgxNDAwLAotCTB4NjA1MiwgMHgyMGE5LCAweDAzNjYsIDB4MWQwNCwgMHgyNWRiLCAweDIwOTEsIDB4NjAwMCwgMHg2MDIwLAotCTB4ZDA5YywgMHgxMTMwLCAweDAxNWUsIDB4NjE1MiwgMHgwMDFlLCAweDYwMjcsIDB4MDAwOCwgMHgwNDkwLAotCTB4MDgwYywgMHgyNzYwLCAweDFmMDQsIDB4MjVkYiwgMHgwMTVlLCAweDYxNTIsIDB4MDAxZSwgMHg2MDI3LAotCTB4MDAwOCwgMHgwMDE2LCAweDYwMjgsIDB4YzA5YywgMHg2MDJhLCAweDIwMTEsIDB4MDAwMywgMHgwODBjLAotCTB4N2FkZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHg3YWU5LCAweDA4MGMsIDB4NzllMSwgMHgwODBjLAotCTB4NjU4MSwgMHgwMDM2LCAweDIwMTksIDB4MDAwMCwgMHgwODBjLCAweDdhNjQsIDB4MDAzZSwgMHg2MGUzLAotCTB4MDAwMCwgMHgwODBjLCAweGFjOGQsIDB4MDgwYywgMHhhY2E4LCAweGEwODUsIDB4MDAwMSwgMHgwODBjLAotCTB4NTc5MywgMHgyMDAxLCAweGFkMDAsIDB4MjAwMywgMHgwMDA0LCAweDYwMjcsIDB4MDAwOCwgMHgwODBjLAotCTB4MTJjYywgMHgwMDFlLCAweGExOGMsIDB4ZmZkMCwgMHg2MTI2LCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LAotCTB4MDAyNiwgMHgwMGU2LCAweDAwZjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZDAwLAotCTB4NzFjMCwgMHg3MGMyLCAweGExMTYsIDB4MDFmMCwgMHg4MWZmLCAweDAxMjgsIDB4MjAxMSwgMHg4MDExLAotCTB4MDgwYywgMHgzYzVjLCAweDAwYjgsIDB4MjAxMSwgMHg4MDEyLCAweDA4MGMsIDB4M2M1YywgMHgyMDAxLAotCTB4YWQ3MSwgMHgyMDA0LCAweGQwZmMsIDB4MTE3MCwgMHgwMDM2LCAweDAwYzYsIDB4MDgwYywgMHgyNmViLAotCTB4MjA2MSwgMHgwMTAwLCAweDIwMTksIDB4MDAyOCwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgyYWFjLAotCTB4MDBjZSwgMHgwMDNlLCAweDAxMmUsIDB4MDBmZSwgMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLAotCTB4MDAwNSwgMHgwMGM2LCAweDAwZjYsIDB4MDAwNiwgMHgwMDI2LCAweDIwNjEsIDB4MDEwMCwgMHhhMTkwLAotCTB4MjY2NCwgMHgyMjA1LCAweDYwZjIsIDB4MjAxMSwgMHgyNjcxLCAweDIyMDUsIDB4NjBlZSwgMHgwMDJlLAotCTB4MDAwZSwgMHgwMGZlLCAweDAwY2UsIDB4MDAwNSwgMHgwODQwLCAweDA4NDAsIDB4MDg0MCwgMHgwNTgwLAotCTB4MDQyMCwgMHgwMzQ4LCAweDAyYzAsIDB4MDI1OCwgMHgwMjEwLCAweDAxYTgsIDB4MDFhOCwgMHgwMWE4LAotCTB4MDFhOCwgMHgwMTQwLCAweDAwZjgsIDB4MDBkMCwgMHgwMGIwLCAweDAwYTAsIDB4MjAyOCwgMHhhMThjLAotCTB4MDBmZiwgMHgyMTMwLCAweGEwOTQsIDB4ZmYwMCwgMHgxMTEwLCAweDgxZmYsIDB4MDExOCwgMHgwODBjLAotCTB4NjI3OCwgMHgwMDM4LCAweGEwODAsIDB4MmJlNiwgMHgyMDBkLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4YTAwNiwgMHgwMDA1LCAweGEwODAsIDB4MmJlNiwgMHgyMDBkLCAweGExOGMsIDB4MDBmZiwgMHgwMDA1LAotCTB4MDBkNiwgMHgyMDY5LCAweDAxNDAsIDB4MjAwMSwgMHhhZDE0LCAweDIwMDMsIDB4MDBlZiwgMHgyMGE5LAotCTB4MDAxMCwgMHhhMDA2LCAweDY4NTIsIDB4Njg1NiwgMHgxZjA0LCAweDI2OWIsIDB4MDBkZSwgMHgwMDA1LAotCTB4MDAwNiwgMHgwMGQ2LCAweDAwMjYsIDB4MjA2OSwgMHgwMTQwLCAweDIwMDEsIDB4YWQxNCwgMHgyMTAyLAotCTB4ODExNCwgMHg4MjE0LCAweDgyMTQsIDB4ODIxNCwgMHgyMGE5LCAweDAwMTAsIDB4Njg1MywgMHgwMDAwLAotCTB4YTAwNiwgMHg4MmZmLCAweDExMjgsIDB4YTE4NCwgMHgwMDBmLCAweGEwODAsIDB4YWNhZSwgMHgyMDA1LAotCTB4Njg1NiwgMHg4MjExLCAweDFmMDQsIDB4MjZiMCwgMHgwMDJlLCAweDAwZGUsIDB4MDAwZSwgMHgwMDA1LAotCTB4MDBjNiwgMHgyMDYxLCAweGFkMDAsIDB4NjAzMCwgMHgwMTEwLCAweGMwOWQsIDB4MDAwOCwgMHhjMDljLAotCTB4NjAzMiwgMHgwMGNlLCAweDAwMDUsIDB4MDE1NiwgMHgwMGQ2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LAotCTB4MjA2OSwgMHgwMTQwLCAweDY5ODAsIDB4YTExNiwgMHgwMTgwLCAweGExMTIsIDB4MTIzMCwgMHg4MjEyLAotCTB4ODIxMCwgMHgyMmE4LCAweDIwMDEsIDB4MDQwMiwgMHgwMDE4LCAweDIyYTgsIDB4MjAwMSwgMHgwNDA0LAotCTB4NjgwZSwgMHgxZjA0LCAweDI2ZTAsIDB4NjgwZiwgMHgwMDAwLCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLAotCTB4MDBkZSwgMHgwMTVlLCAweDAwMDUsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBjNCwgMHgwMTUwLAotCTB4ZDBhNCwgMHgwMTQwLCAweGEwMDYsIDB4MDA0NiwgMHgyMDIwLCAweDIwMDksIDB4MDAyZSwgMHgwODBjLAotCTB4YTk2YywgMHgwMDRlLCAweDAwMDUsIDB4MDBmNiwgMHgwMDE2LCAweDAwMjYsIDB4MjA3OSwgMHgwMTQwLAotCTB4NzhjNCwgMHhkMGRjLCAweDA1NDgsIDB4YTA4NCwgMHgwNzAwLCAweGEwOGUsIDB4MDMwMCwgMHgxNTIwLAotCTB4MjAxMSwgMHgwMDAwLCAweDIwMDksIDB4MDAwMiwgMHgyMzAwLCAweGEwODAsIDB4MDAyMCwgMHgyMDE4LAotCTB4MjMwMCwgMHgwODBjLCAweDY2NjUsIDB4MjAxMSwgMHgwMDMwLCAweDIyMDAsIDB4ODAwNywgMHhhMDg1LAotCTB4MDA0YywgMHg3OGMyLCAweDIwMDksIDB4MDIwNCwgMHgyMTBjLCAweDIyMDAsIDB4YTEwMCwgMHgyMDA5LAotCTB4MDEzOCwgMHgyMDBhLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTE4LCAweDIwMDksIDB4YWY4ZSwgMHgyMDBhLAotCTB4MDAyZSwgMHgwMDFlLCAweDAwZmUsIDB4MDAwNSwgMHg3OGMzLCAweDAwMDAsIDB4MGNjOCwgMHgwMTI2LAotCTB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDEsIDB4MDE3MCwgMHgyMDBjLAotCTB4ODAwMCwgMHgyMDE0LCAweGExODQsIDB4MDAwMywgMHgwMTEwLCAweDA4MDQsIDB4MWE2YSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LAotCTB4YTA4MiwgMHgwMDA1LCAweDAwMGUsIDB4MDI2OCwgMHgyMDAxLCAweDAxNzAsIDB4MjAwYywgMHhhMThjLAotCTB4MDBmZiwgMHhhMThlLCAweDAwNGMsIDB4MTEyOCwgMHgyMDBjLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4MDAxMCwgMHgyMDA5LCAweDAwMDAsIDB4MjAwMSwgMHgwMjA0LCAweDIwMDQsIDB4YTEwOCwgMHgwMDA1LAotCTB4MDAwNiwgMHgwMTU2LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDIwYTksIDB4MDAwYSwgMHg3ODU0LAotCTB4ZDA4YywgMHgxMTEwLCAweDFmMDQsIDB4Mjc2NywgMHgwMGZlLCAweDAxNWUsIDB4MDAwZSwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMGM2LCAweDAwMDYsIDB4MjA2MSwgMHgwMTAwLCAweDYwMzAsIDB4MDAwNiwgMHg2MDQ4LAotCTB4MDAwNiwgMHg2MGU0LCAweDAwMDYsIDB4NjBlOCwgMHgwMDA2LCAweDYwNTAsIDB4MDAwNiwgMHg2MGYwLAotCTB4MDAwNiwgMHg2MGVjLCAweDAwMDYsIDB4NjAwYywgMHgwMDA2LCAweDYwMDQsIDB4MDAwNiwgMHg2MDI4LAotCTB4MDAwNiwgMHg2MGUwLCAweDAwMDYsIDB4NjAyZiwgMHgwMTAwLCAweDYwMmYsIDB4MDAwMCwgMHhlMDAwLAotCTB4ZTAwMCwgMHhlMDAwLCAweGUwMDAsIDB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwMDBlLAotCTB4NjBlMiwgMHgwMDBlLCAweDYwMmEsIDB4MDAwZSwgMHg2MDA2LCAweDAwMGUsIDB4NjAwZSwgMHgwMDBlLAotCTB4NjBlZSwgMHgwMDBlLCAweDYwZjIsIDB4MDAwZSwgMHg2MDUyLCAweDAwMGUsIDB4NjBlYSwgMHgwMDBlLAotCTB4NjBlNiwgMHgwMDBlLCAweDYwNGEsIDB4MDAwZSwgMHg2MDMyLCAweDYwMzYsIDB4MjAwOCwgMHgwODBjLAotCTB4MjZhMCwgMHgwMDBlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDI4NDUsIDB4Mjg0OSwgMHgyODRkLAotCTB4Mjg1MywgMHgyODU5LCAweDI4NWYsIDB4Mjg2NSwgMHgyODZkLCAweDI4NzUsIDB4Mjg3YiwgMHgyODgxLAotCTB4Mjg4OSwgMHgyODkxLCAweDI4OTksIDB4MjhhMSwgMHgyOGFiLCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjcsIDB4MjhiNywgMHgyOGJjLAotCTB4MjhiYywgMHgyOGMzLCAweDI4YzMsIDB4MjhjYSwgMHgyOGNhLCAweDI4ZDMsIDB4MjhkMywgMHgyOGRhLAotCTB4MjhkYSwgMHgyOGUzLCAweDI4ZTMsIDB4MjhlYywgMHgyOGVjLCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LAotCTB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDAxMDYsIDB4MDAwNiwgMHgwODA0LAotCTB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLAotCTB4MjM3MywgMHgwODA0LCAweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjM3MywgMHgwODA0LAotCTB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyMjNkLCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LAotCTB4MDAwNiwgMHgwODBjLCAweDIyM2QsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLAotCTB4MjM3MywgMHgwODBjLCAweDIyM2QsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLAotCTB4MjM3MywgMHgwODBjLCAweDIyM2QsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLAotCTB4MjI4ZiwgMHgwODA0LCAweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjI4ZiwgMHgwODA0LAotCTB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyMzczLCAweDA4MGMsIDB4MjI4ZiwgMHgwODA0LAotCTB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyMzczLCAweDA4MGMsIDB4MjI4ZiwgMHgwODA0LAotCTB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyMjNkLCAweDA4MGMsIDB4MjI4ZiwgMHgwODA0LAotCTB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyMjNkLCAweDA4MGMsIDB4MjI4ZiwgMHgwODA0LAotCTB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyMzczLCAweDA4MGMsIDB4MjIzZCwgMHgwODBjLAotCTB4MjI4ZiwgMHgwODA0LCAweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjM3MywgMHgwODBjLAotCTB4MjIzZCwgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwgMHgyOGY3LCAweGUwMDAsIDB4MGNmMCwgMHgwMTA2LAotCTB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDRkOCwgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyNzJmLAotCTB4MDgwYywgMHgyMzczLCAweDA0YTAsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjcyZiwgMHgwODBjLAotCTB4MjIzZCwgMHgwNDY4LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDgwYywgMHgyMzczLAotCTB4MDgwYywgMHgyMjNkLCAweDA0MjAsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjcyZiwgMHgwODBjLAotCTB4MjI4ZiwgMHgwMGU4LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDgwYywgMHgyMzczLAotCTB4MDgwYywgMHgyMjhmLCAweDAwYTAsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjcyZiwgMHgwODBjLAotCTB4MjIzZCwgMHgwODBjLCAweDIyOGYsIDB4MDA1OCwgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyNzJmLAotCTB4MDgwYywgMHgyMzczLCAweDA4MGMsIDB4MjIzZCwgMHgwODBjLCAweDIyOGYsIDB4MDAwMCwgMHgwMDBlLAotCTB4MDEwZSwgMHgwMDBkLCAweDAwYzYsIDB4MDAyNiwgMHgwMDQ2LCAweDIwMjEsIDB4MDAwMCwgMHgwODBjLAotCTB4NTAyZCwgMHgxOTA0LCAweDI5ZDQsIDB4NzJkMCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwNCwgMHhhMDA1LAotCTB4MTExMCwgMHhkMjljLCAweDAxNDgsIDB4ZDI4NCwgMHgxMTM4LCAweGQyYmMsIDB4MTkwNCwgMHgyOWQ0LAotCTB4MDgwYywgMHgyOWQ4LCAweDA4MDQsIDB4MjlkNCwgMHgwODBjLCAweDU3NGYsIDB4MTEyMCwgMHg3MDliLAotCTB4ZmZmZiwgMHgwODA0LCAweDI5ZDQsIDB4ZDI5NCwgMHgwMTIwLCAweDcwOWIsIDB4ZmZmZiwgMHgwODA0LAotCTB4MjlkNCwgMHgyMDAxLCAweGFkMTQsIDB4MjAzYywgMHg3Mjg0LCAweGQyODQsIDB4MDkwNCwgMHgyOTc2LAotCTB4ZDI4YywgMHgxOTA0LCAweDI5NzYsIDB4MDAzNiwgMHg3Mzk4LCAweGEzOGUsIDB4ZmZmZiwgMHgxMTEwLAotCTB4MjAxOSwgMHgwMDAxLCAweDgzMTQsIDB4YTJlMCwgMHhiM2MwLCAweDJjMDQsIDB4YTM4YywgMHgwMDAxLAotCTB4MDEyMCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywgMHgwMDEwLCAweGEwODQsIDB4MDBmZiwgMHhhNzBlLAotCTB4MDU2MCwgMHhhMDhlLCAweDAwMDAsIDB4MDU0OCwgMHhhMDhlLCAweDAwZmYsIDB4MTE1MCwgMHg3MjMwLAotCTB4ZDI4NCwgMHgxNTM4LCAweDcyODQsIDB4YzI4ZCwgMHg3Mjg2LCAweDcwOWIsIDB4ZmZmZiwgMHgwMDNlLAotCTB4MDQyOCwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgyNjc2LCAweDA4MGMsIDB4NGM4MCwgMHgxMWI4LAotCTB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDExNTAsIDB4NzAzMCwgMHhkMDhjLAotCTB4MDExOCwgMHg2MDAwLCAweGQwYmMsIDB4MDEyMCwgMHgwODBjLCAweDI5ZWIsIDB4MDE0MCwgMHgwMDI4LAotCTB4MDgwYywgMHgyYjFhLCAweDA4MGMsIDB4MmExOSwgMHgwMTEwLCAweDgzMTgsIDB4MDgxOCwgMHg3MzlhLAotCTB4MDAxMCwgMHg3MDliLCAweGZmZmYsIDB4MDAzZSwgMHgwODA0LCAweDI5ZDQsIDB4YTc4MCwgMHgyYmU2LAotCTB4MjAzZCwgMHhhN2JjLCAweGZmMDAsIDB4ODczZiwgMHgyMDQxLCAweDAwN2UsIDB4NzA5OCwgMHhhMDk2LAotCTB4ZmZmZiwgMHgxMTIwLCAweDIwMDksIDB4MDAwMCwgMHgyOGE4LCAweDAwNTAsIDB4YTgxMiwgMHgwMjIwLAotCTB4MjAwOCwgMHhhODAyLCAweDIwYTgsIDB4MDAyMCwgMHg3MDliLCAweGZmZmYsIDB4MDgwNCwgMHgyOWQ0LAotCTB4MjcwMCwgMHgwMTU2LCAweDAwMTYsIDB4YTEwNiwgMHgwNWEwLCAweGM0ODQsIDB4MDgwYywgMHg0Y2RjLAotCTB4MDEyMCwgMHgwODBjLCAweDRjODAsIDB4MTVhOCwgMHgwMDA4LCAweGM0ODUsIDB4NjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MTEzMCwgMHg3MDMwLCAweGQwOGMsIDB4MDFlOCwgMHg2MDAwLAotCTB4ZDBiYywgMHgxMWQwLCAweDcyODQsIDB4ZDI4YywgMHgwMTg4LCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4MiwgMHgwMDA2LCAweDAyYjAsIDB4ZDQ4NCwgMHgxMTE4LCAweDA4MGMsIDB4NGM5ZiwgMHgwMDI4LAotCTB4MDgwYywgMHgyYjljLCAweDAxNzAsIDB4MDgwYywgMHgyYmM5LCAweDAwNTgsIDB4MDgwYywgMHgyYjFhLAotCTB4MDgwYywgMHgyYTE5LCAweDAxNzAsIDB4MDAyOCwgMHgwODBjLCAweDJiOWMsIDB4MDExMCwgMHgwNDE5LAotCTB4MDE0MCwgMHgwMDFlLCAweDgxMDgsIDB4MDE1ZSwgMHgxZjA0LCAweDI5OTAsIDB4NzA5YiwgMHhmZmZmLAotCTB4MDAxOCwgMHgwMDFlLCAweDAxNWUsIDB4NzE5YSwgMHgwMDRlLCAweDAwMmUsIDB4MDBjZSwgMHgwMDA1LAotCTB4MDBjNiwgMHgwMDE2LCAweDcwOWIsIDB4MDAwMCwgMHgyMDA5LCAweDAwN2UsIDB4MDgwYywgMHg0YzgwLAotCTB4MTEzOCwgMHgwODBjLCAweDJiMWEsIDB4MDRhOSwgMHgwMTE4LCAweDcwZDAsIDB4YzBiZCwgMHg3MGQyLAotCTB4MDAxZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDc2LCAweDAwZDYsIDB4MDBjNiwgMHgyYzY4LAotCTB4MjAwMSwgMHhhZDU2LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDY4NDIsIDB4MDgwYywgMHg5ODA3LAotCTB4MDFkOCwgMHgyZDAwLCAweDYwMWEsIDB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwMSwgMHgyMDAxLAotCTB4MDAwMCwgMHgwODBjLCAweDRjMWUsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMzMCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDcwOTQsIDB4ODAwMCwgMHg3MDk2LCAweDAxMmUsIDB4MjAwOSwgMHgwMDA0LAotCTB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAwZGUsIDB4MDA3ZSwgMHgwMDFlLAotCTB4MDAwNSwgMHgwMDE2LCAweDAwNzYsIDB4MDBkNiwgMHgwMGM2LCAweDJjNjgsIDB4MjAwMSwgMHhhZDU2LAotCTB4MjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4Njg0MiwgMHgwODBjLCAweDk4MDcsIDB4MDU1MCwgMHgyZDAwLAotCTB4NjAxYSwgMHg2ODAwLCAweGMwYzQsIDB4NjgwMiwgMHg2OGEwLCAweGEwODYsIDB4MDA3ZSwgMHgwMTQwLAotCTB4NjgwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDExMTAsIDB4MDgwYywgMHgyYWQ5LAotCTB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg0YzFlLAotCTB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NGMzMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDk0LAotCTB4ODAwMCwgMHg3MDk2LCAweDAxMmUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LAotCTB4MDAwMSwgMHgwMGNlLCAweDAwZGUsIDB4MDA3ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBjNiwgMHgwMDI2LAotCTB4MjAwOSwgMHgwMDgwLCAweDA4MGMsIDB4NGM4MCwgMHgxMTIwLCAweDAwMzEsIDB4MDExMCwgMHg3MGQ3LAotCTB4ZmZmZiwgMHgwMDJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDE2LCAweDAwNzYsIDB4MDBkNiwgMHgwMGM2LAotCTB4MmM2OCwgMHgwODBjLCAweDgwMjIsIDB4MDFkOCwgMHgyZDAwLCAweDYwMWEsIDB4MDgwYywgMHg5OTU2LAotCTB4NjAxZiwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDRjMWUsIDB4MjAwMSwgMHgwMDAyLAotCTB4MDgwYywgMHg0YzMwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwZDgsIDB4ODAwMCwgMHg3MGRhLAotCTB4MDEyZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMDdlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDA5LCAweDAwN2YsIDB4MDgwYywgMHg0YzgwLCAweDExOTAsIDB4MmM2OCwgMHgwODBjLAotCTB4ODAyMiwgMHgwMTcwLCAweDJkMDAsIDB4NjAxYSwgMHg2MzEyLCAweDYwMWYsIDB4MDAwMSwgMHg2MjBhLAotCTB4MDgwYywgMHg5OTU2LCAweDIwMDksIDB4MDAyMiwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDEyZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDM2LAotCTB4MDAyNiwgMHgwODBjLCAweDY4ZjMsIDB4MDgwYywgMHg2ODlkLCAweDA4MGMsIDB4OGExNSwgMHgyMTMwLAotCTB4ODFmZiwgMHgwMTI4LCAweDIwYTksIDB4MDA3ZSwgMHgyMDA5LCAweDAwMDAsIDB4MDAyMCwgMHgyMGE5LAotCTB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDAxNiwgMHgwODBjLCAweDRjZGMsIDB4MTEyMCwgMHgwODBjLAotCTB4NGVjZiwgMHgwODBjLCAweDQ5M2EsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4MmFjMywgMHg4NmZmLAotCTB4MTExMCwgMHgwODBjLCAweDExZDQsIDB4MDAyZSwgMHgwMDNlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDAzNiwgMHgwMDI2LCAweDAwMTYsIDB4NjIxOCwgMHgyMjcwLAotCTB4NzJhMCwgMHgwMDI2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LAotCTB4MDAwMCwgMHgwODBjLCAweDY4MWQsIDB4MmMwOCwgMHgwODBjLCAweGE3MTIsIDB4MDA3ZSwgMHgwMDFlLAotCTB4MmU2MCwgMHgwODBjLCAweDRlY2YsIDB4NjIxMCwgMHg2MzE0LCAweDA4MGMsIDB4NDkzYSwgMHg2MjEyLAotCTB4NjMxNiwgMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LAotCTB4MDAwNiwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEwODYsIDB4MDA4MCwgMHgwMTUwLAotCTB4MjA3MSwgMHhhZDAwLCAweDcwOTQsIDB4YTAwNSwgMHgwMTEwLCAweDgwMDEsIDB4NzA5NiwgMHgwMDBlLAotCTB4MDBlZSwgMHgwMDA1LCAweDIwNzEsIDB4YWQwMCwgMHg3MGQ4LCAweGEwMDUsIDB4MGRjMCwgMHg4MDAxLAotCTB4NzBkYSwgMHgwY2E4LCAweDYwMDAsIDB4YzA4YywgMHg2MDAyLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LAotCTB4MDBjNiwgMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMTU2LCAweDIxNzgsIDB4ODFmZiwgMHgxMTE4LAotCTB4MjBhOSwgMHgwMDAxLCAweDAwOTgsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBjNCwgMHgwMTUwLAotCTB4ZDBhNCwgMHgwMTQwLCAweGEwMDYsIDB4MDA0NiwgMHgyMDIwLCAweDIwMDksIDB4MDAyZCwgMHgwODBjLAotCTB4YTk2YywgMHgwMDRlLCAweDIwYTksIDB4MDBmZiwgMHgyMDExLCAweDAwMDAsIDB4MDAyNiwgMHhhMjhlLAotCTB4MDA3ZSwgMHgwNWM4LCAweGEyOGUsIDB4MDA3ZiwgMHgwNWIwLCAweGEyOGUsIDB4MDA4MCwgMHgwNTk4LAotCTB4YTI4OCwgMHhhZTM0LCAweDIxMGMsIDB4ODFmZiwgMHgwNTcwLCAweDhmZmYsIDB4MDVjMSwgMHgwMGM2LAotCTB4MjE2MCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHg1MDM3LCAweDAwY2UsIDB4MjAxOSwgMHgwMDI5LAotCTB4MDgwYywgMHg2OGU3LCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4NjgxZCwgMHgwMGM2LAotCTB4MDAyNiwgMHgyMTYwLCAweDYyMDQsIDB4YTI5NCwgMHgwMGZmLCAweGEyODYsIDB4MDAwNiwgMHgxMTE4LAotCTB4NjAwNywgMHgwNDA0LCAweDAwMjgsIDB4MjAwMSwgMHgwMDA0LCAweDgwMDcsIDB4YTIxNSwgMHg2MjA2LAotCTB4MDAyZSwgMHgwMGNlLCAweDAwMTYsIDB4MmMwOCwgMHgwODBjLCAweGE3MTIsIDB4MDAxZSwgMHgwMDdlLAotCTB4MjE2MCwgMHgwODBjLCAweDRlY2YsIDB4MDAyZSwgMHg4MjEwLCAweDFmMDQsIDB4MmIzZSwgMHgwMTVlLAotCTB4MDAxZSwgMHgwMDJlLCAweDAwM2UsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMDQ2LAotCTB4MDAyNiwgMHgwMDE2LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDE0OCwgMHhkMGE0LAotCTB4MDEzOCwgMHhhMDA2LCAweDIyMjAsIDB4ODQyNywgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhhOTZjLAotCTB4MDAxZSwgMHgwMDJlLCAweDAwNGUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LAotCTB4NzI4NCwgMHg4MmZmLCAweDAxZjgsIDB4MjAxMSwgMHhhZDUyLCAweDIyMTQsIDB4ZDJhYywgMHgxMWQwLAotCTB4MjEwMCwgMHgwODBjLCAweDI2OGEsIDB4ODFmZiwgMHgwMWI4LCAweDIwMTksIDB4MDAwMSwgMHg4MzE0LAotCTB4YTJlMCwgMHhiM2MwLCAweDJjMDQsIDB4ZDM4NCwgMHgwMTIwLCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LAotCTB4MDAxMCwgMHhhMDg0LCAweDAwZmYsIDB4YTExNiwgMHgwMTM4LCAweGEwOTYsIDB4MDBmZiwgMHgwMTEwLAotCTB4ODMxOCwgMHgwYzY4LCAweGEwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDAwNSwgMHgwMDE2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YTE4MCwgMHhhZTM0LAotCTB4MjAwNCwgMHhhMDY1LCAweDAxNzgsIDB4MDAxNiwgMHgwMGM2LCAweDA4MGMsIDB4OTgwNywgMHgwMDFlLAotCTB4MDkwYywgMHgxNGY2LCAweDYxMWEsIDB4MDgwYywgMHgyYWQ5LCAweDA4MGMsIDB4ODA3OCwgMHgwMDFlLAotCTB4MDgwYywgMHg0YzlmLCAweDAxMmUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4N2VlZiwgMHg3ZGU4LAotCTB4N2NlNCwgMHg4MGUyLCAweDdiZTEsIDB4ODBlMCwgMHg4MGRjLCAweDgwZGEsIDB4N2FkOSwgMHg4MGQ2LAotCTB4ODBkNSwgMHg4MGQ0LCAweDgwZDMsIDB4ODBkMiwgMHg4MGQxLCAweDc5Y2UsIDB4NzhjZCwgMHg4MGNjLAotCTB4ODBjYiwgMHg4MGNhLCAweDgwYzksIDB4ODBjNywgMHg4MGM2LCAweDc3YzUsIDB4NzZjMywgMHg4MGJjLAotCTB4ODBiYSwgMHg3NWI5LCAweDgwYjYsIDB4NzRiNSwgMHg3M2I0LCAweDcyYjMsIDB4ODBiMiwgMHg4MGIxLAotCTB4ODBhZSwgMHg3MWFkLCAweDgwYWMsIDB4NzBhYiwgMHg2ZmFhLCAweDZlYTksIDB4ODBhNywgMHg2ZGE2LAotCTB4NmNhNSwgMHg2YmEzLCAweDZhOWYsIDB4Njk5ZSwgMHg2ODlkLCAweDgwOWIsIDB4ODA5OCwgMHg2Nzk3LAotCTB4NjY5MCwgMHg2NThmLCAweDY0ODgsIDB4NjM4NCwgMHg2MjgyLCAweDgwODEsIDB4ODA4MCwgMHg2MTdjLAotCTB4NjA3YSwgMHg4MDc5LCAweDVmNzYsIDB4ODA3NSwgMHg4MDc0LCAweDgwNzMsIDB4ODA3MiwgMHg4MDcxLAotCTB4ODA2ZSwgMHg1ZTZkLCAweDgwNmMsIDB4NWQ2YiwgMHg1YzZhLCAweDViNjksIDB4ODA2NywgMHg1YTY2LAotCTB4NTk2NSwgMHg1ODYzLCAweDU3NWMsIDB4NTY1YSwgMHg1NTU5LCAweDgwNTYsIDB4ODA1NSwgMHg1NDU0LAotCTB4NTM1MywgMHg1MjUyLCAweDUxNTEsIDB4NTA0ZSwgMHg0ZjRkLCAweDgwNGMsIDB4ODA0YiwgMHg0ZTRhLAotCTB4NGQ0OSwgMHg4MDQ3LCAweDRjNDYsIDB4ODA0NSwgMHg4MDQzLCAweDgwM2MsIDB4ODAzYSwgMHg4MDM5LAotCTB4ODAzNiwgMHg0YjM1LCAweDgwMzQsIDB4NGEzMywgMHg0OTMyLCAweDQ4MzEsIDB4ODAyZSwgMHg0NzJkLAotCTB4NDYyYywgMHg0NTJiLCAweDQ0MmEsIDB4NDMyOSwgMHg0MjI3LCAweDgwMjYsIDB4ODAyNSwgMHg0MTIzLAotCTB4NDAxZiwgMHgzZjFlLCAweDNlMWQsIDB4M2QxYiwgMHgzYzE4LCAweDgwMTcsIDB4ODAxMCwgMHgzYjBmLAotCTB4M2EwOCwgMHg4MDA0LCAweDM5MDIsIDB4ODAwMSwgMHg4MDAwLCAweDgwMDAsIDB4MzgwMCwgMHgzNzAwLAotCTB4MzYwMCwgMHg4MDAwLCAweDM1MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzQwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDMzMDAsIDB4MzIwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDMxMDAsIDB4MzAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHgyZjAwLCAweDgwMDAsIDB4MmUwMCwgMHgyZDAwLCAweDJjMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHgyYjAwLCAweDgwMDAsIDB4MmEwMCwgMHgyOTAwLCAweDI4MDAsIDB4ODAwMCwgMHgyNzAwLAotCTB4MjYwMCwgMHgyNTAwLCAweDI0MDAsIDB4MjMwMCwgMHgyMjAwLCAweDgwMDAsIDB4ODAwMCwgMHgyMTAwLAotCTB4MjAwMCwgMHgxZjAwLCAweDFlMDAsIDB4MWQwMCwgMHgxYzAwLCAweDgwMDAsIDB4ODAwMCwgMHgxYjAwLAotCTB4MWEwMCwgMHg4MDAwLCAweDE5MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHgxODAwLCAweDgwMDAsIDB4MTcwMCwgMHgxNjAwLCAweDE1MDAsIDB4ODAwMCwgMHgxNDAwLAotCTB4MTMwMCwgMHgxMjAwLCAweDExMDAsIDB4MTAwMCwgMHgwZjAwLCAweDgwMDAsIDB4ODAwMCwgMHgwZTAwLAotCTB4MGQwMCwgMHgwYzAwLCAweDBiMDAsIDB4MGEwMCwgMHgwOTAwLCAweDgwMDAsIDB4ODAwMCwgMHgwODAwLAotCTB4MDcwMCwgMHg4MDAwLCAweDA2MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDUwMCwgMHgwNDAwLAotCTB4MDMwMCwgMHg4MDAwLCAweDAyMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDEwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDAwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MjA3MSwgMHhhZDgxLAotCTB4NzAwMywgMHgwMDAyLCAweGEwMDYsIDB4NzAxMiwgMHg3MDE2LCAweDcwM2EsIDB4NzAzZSwgMHg3MDMzLAotCTB4YWQ5MSwgMHg3MDM3LCAweGFkOTEsIDB4NzAwNywgMHgwMDAxLCAweDIwNjEsIDB4YWRkMSwgMHg2MDAzLAotCTB4MDAwMiwgMHgwMDA1LCAweDEwMDQsIDB4MmQwYywgMHgwZTA0LCAweDJkMGMsIDB4MjA3MSwgMHhhZDgxLAotCTB4MmI3OCwgMHg3ODE4LCAweGQwODQsIDB4MTE0MCwgMHgyYTYwLCAweDc4MjAsIDB4YTA4ZSwgMHgwMDY5LAotCTB4MTkwNCwgMHgyZGYxLCAweDA4MDQsIDB4MmQ4YSwgMHgwMDA1LCAweDIwNzEsIDB4YWQ4MSwgMHg3MDA0LAotCTB4MDAwMiwgMHgyZDE1LCAweDJkMTYsIDB4MmQxZiwgMHgyZDMwLCAweDAwMDUsIDB4MTAwNCwgMHgyZDFlLAotCTB4MGUwNCwgMHgyZDFlLCAweDJiNzgsIDB4NzgxOCwgMHhkMDg0LCAweDAxZTgsIDB4MDAwNSwgMHgyYjc4LAotCTB4MjA2MSwgMHhhZGQxLCAweDYwMDgsIDB4YTA4ZSwgMHgwMTAwLCAweDAxMjgsIDB4YTA4NiwgMHgwMjAwLAotCTB4MDkwNCwgMHgyZGViLCAweDAwMDUsIDB4NzAxNCwgMHgyMDY4LCAweDJhNjAsIDB4NzAxOCwgMHgwODA3LAotCTB4NzAxMCwgMHgyMDY4LCAweDY4MzQsIDB4YTA4NiwgMHgwMTAzLCAweDAxMDgsIDB4MDAwNSwgMHgyYTYwLAotCTB4MmI3OCwgMHg3MDE4LCAweDA4MDcsIDB4MmE2MCwgMHg3ODIwLCAweGEwOGEsIDB4MDA0MCwgMHgxMjEwLAotCTB4NjFjMCwgMHgwMDQyLCAweDIxMDAsIDB4YTA4YSwgMHgwMDNmLCAweDFhMDQsIDB4MmRlOCwgMHg2MWMwLAotCTB4MDgwNCwgMHgyZDhhLCAweDJkY2MsIDB4MmRmNywgMHgyZGZmLCAweDJlMDMsIDB4MmUwYiwgMHgyZTExLAotCTB4MmUxNSwgMHgyZTIxLCAweDJlMjQsIDB4MmUyZSwgMHgyZTMxLCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LAotCTB4MmUzNCwgMHgyZGU4LCAweDJlNDMsIDB4MmU1YSwgMHgyZTcxLCAweDJlZTgsIDB4MmVlZCwgMHgyZjE2LAotCTB4MmY2NywgMHgyZjc4LCAweDJmOTYsIDB4MmZjZCwgMHgyZmQ3LCAweDJmZTQsIDB4MmZmNywgMHgzMDE4LAotCTB4MzAyMSwgMHgzMDU3LCAweDMwNWQsIDB4MmRlOCwgMHgzMDg2LCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LAotCTB4MmRlOCwgMHgyZGU4LCAweDMwOGQsIDB4MzA5NywgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LAotCTB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwgMHgzMDlmLCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LAotCTB4MmRlOCwgMHgyZGU4LCAweDMwYjEsIDB4MzBiOSwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LAotCTB4MmRlOCwgMHgyZGU4LCAweDAwMDIsIDB4MzBjYiwgMHgzMTFmLCAweDMxN2EsIDB4MzE4YSwgMHgyZGU4LAotCTB4MzFhNCwgMHgzNWNiLCAweDNmYmIsIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LAotCTB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmUyZSwgMHgyZTMxLCAweDM1Y2QsIDB4MmRlOCwgMHgzNWRhLAotCTB4NDAzYywgMHg0MDk3LCAweDQwZmIsIDB4MmRlOCwgMHg0MTVhLCAweDQxODAsIDB4NDE5ZiwgMHgyZGU4LAotCTB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MzVkZSwgMHgzNzZiLCAweDM3ODUsIDB4MzdhMywgMHgzODA0LAotCTB4Mzg1OCwgMHgzODYzLCAweDM4OWEsIDB4MzhhOSwgMHgzOGI4LCAweDM4YmIsIDB4MzhkZSwgMHgzOTI4LAotCTB4Mzk4ZSwgMHgzOTliLCAweDNhOWMsIDB4M2JiMywgMHgzYmRjLCAweDNjZGEsIDB4M2NmYywgMHgzZDA4LAotCTB4M2Q0MSwgMHgzZTA1LCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4M2U2ZCwgMHgzZTg4LAotCTB4M2VmYSwgMHgzZmFjLCAweDcxM2MsIDB4MDAwMCwgMHgyMDIxLCAweDQwMDAsIDB4MDgwYywgMHgzYzM5LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MGUwNCwgMHgyZGQ4LCAweDc4MTgsIDB4ZDA4NCwgMHgwMTEwLAotCTB4MDEyZSwgMHgwY2IwLCAweDdjMjIsIDB4NzkyNiwgMHg3YTJhLCAweDdiMmUsIDB4NzgxYiwgMHgwMDAxLAotCTB4MjA5MSwgMHg0MDgwLCAweDcwMDcsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4MDEyZSwgMHgwMDA1LAotCTB4MjAyMSwgMHg0MDAxLCAweDBjMTgsIDB4MjAyMSwgMHg0MDAyLCAweDBjMDAsIDB4MjAyMSwgMHg0MDAzLAotCTB4MDhlOCwgMHgyMDIxLCAweDQwMDUsIDB4MDhkMCwgMHgyMDIxLCAweDQwMDYsIDB4MDhiOCwgMHhhMDJlLAotCTB4MjUyMCwgMHg3YjI4LCAweDdhMmMsIDB4NzgyNCwgMHg3OTMwLCAweDA4MDQsIDB4M2M0NiwgMHg3ODIzLAotCTB4MDAwNCwgMHg3ODI0LCAweDA4MDcsIDB4YTAyZSwgMHgyNTIwLCAweDdiMjgsIDB4N2EyYywgMHg3ODI0LAotCTB4NzkzMCwgMHgwODA0LCAweDNjNDksIDB4NzkyNCwgMHg3ODI4LCAweDIxMTQsIDB4MjAwYSwgMHgwODA0LAotCTB4MmRjYywgMHg3OTI0LCAweDIxMTQsIDB4MDgwNCwgMHgyZGNjLCAweDIwOTksIDB4MDAwOSwgMHgyMGExLAotCTB4MDAwOSwgMHgyMGE5LCAweDAwMDcsIDB4NTNhMywgMHg3OTI0LCAweDdhMjgsIDB4N2IyYywgMHgwODA0LAotCTB4MmRjYywgMHg3ODI0LCAweDIwNjAsIDB4MDA5MCwgMHgyMDA5LCAweDAwMDIsIDB4MjAxMSwgMHgwMDAxLAotCTB4MjAxOSwgMHgwMDFiLCAweDc4M2IsIDB4MDAxNywgMHgwODA0LCAweDJkY2MsIDB4N2QzOCwgMHg3YzNjLAotCTB4MDg0MCwgMHg3ZDM4LCAweDdjM2MsIDB4MDg4OCwgMHgyMDYxLCAweDEwMDAsIDB4ZTEwYywgMHhhMDA2LAotCTB4MmMxNSwgMHhhMjAwLCAweDhjNjAsIDB4ODEwOSwgMHgxZGQ4LCAweDIwMTAsIDB4YTAwNSwgMHgwOTA0LAotCTB4MmRjYywgMHgwODA0LCAweDJkZWUsIDB4MjA2OSwgMHhhZDUxLCAweDc4MjQsIDB4NzkzMCwgMHhhMTFhLAotCTB4MWEwNCwgMHgyZGY0LCAweDgwMTksIDB4MDkwNCwgMHgyZGY0LCAweDY4NGEsIDB4Njk0MiwgMHg3ODJjLAotCTB4Njg1MiwgMHg3ODI4LCAweDY4NTYsIDB4YTAwNiwgMHg2ODVhLCAweDY4NWUsIDB4MDgwYywgMHg1YTFjLAotCTB4MDgwNCwgMHgyZGNjLCAweDIwNjksIDB4YWQ1MSwgMHg3ODI0LCAweDc5MzQsIDB4YTExYSwgMHgxYTA0LAotCTB4MmRmNCwgMHg4MDE5LCAweDA5MDQsIDB4MmRmNCwgMHg2ODRlLCAweDY5NDYsIDB4NzgyYywgMHg2ODYyLAotCTB4NzgyOCwgMHg2ODY2LCAweGEwMDYsIDB4Njg2YSwgMHg2ODZlLCAweDA4MGMsIDB4NTBkOSwgMHgwODA0LAotCTB4MmRjYywgMHhhMDJlLCAweDI1MjAsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4NzkyNCwgMHg3YjI4LAotCTB4N2EyYywgMHgyMGE5LCAweDAwMDUsIDB4MjBhMSwgMHhhZDg4LCAweDQxYTEsIDB4MDgwYywgMHgzYzA1LAotCTB4MDkwNCwgMHgyZGYxLCAweDIwMDksIDB4MDAyMCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwgMHgyZTg5LAotCTB4MDAwNSwgMHg2ODM0LCAweDIwMDgsIDB4YTA4NCwgMHgwMGZmLCAweGEwOTYsIDB4MDAxMSwgMHgwMTIwLAotCTB4YTA5NiwgMHgwMDE5LCAweDE5MDQsIDB4MmRmMSwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHgwOTA0LAotCTB4MmRmMSwgMHg3MTBlLCAweDcwMGMsIDB4ODAwMSwgMHgwNTI4LCAweDcwMGUsIDB4MDgwYywgMHgzYzA1LAotCTB4MDkwNCwgMHgyZGYxLCAweDIwMDksIDB4MDAyMCwgMHgyMDYxLCAweGFkZDEsIDB4NjIyNCwgMHg2MzI4LAotCTB4NjQyYywgMHg2NTMwLCAweGEyOTAsIDB4MDA0MCwgMHhhMzk5LCAweDAwMDAsIDB4YTRhMSwgMHgwMDAwLAotCTB4YTVhOSwgMHgwMDAwLCAweDA4MGMsIDB4M2M0NiwgMHg3MDFiLCAweDJlYjcsIDB4MDAwNSwgMHg2ODM0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwOTYsIDB4MDAwMiwgMHgwMTIwLCAweGEwOTYsIDB4MDAwYSwgMHgxOTA0LAotCTB4MmRmMSwgMHgwOGMwLCAweDcwMTAsIDB4MjA2OCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHgwODBjLAotCTB4NGI3YywgMHgxMTI4LCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDJlZDEsIDB4MDAwNSwgMHgwODBjLAotCTB4NTFkZiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMGE5LCAweDAwMDUsIDB4MjA5OSwgMHhhZDg4LAotCTB4NTMwYSwgMHgyMTAwLCAweGEyMTAsIDB4YTM5OSwgMHgwMDAwLCAweGE0YTEsIDB4MDAwMCwgMHhhNWE5LAotCTB4MDAwMCwgMHhhZDgwLCAweDAwMGQsIDB4MjAwOSwgMHgwMDIwLCAweDAxMmUsIDB4MDgwNCwgMHgzYzQ5LAotCTB4NjFhOCwgMHg3ODI0LCAweDYwYWEsIDB4MDgwNCwgMHgyZGNjLCAweDIwOTEsIDB4ODAwMCwgMHg3ODIzLAotCTB4NDAwMCwgMHg3ODI3LCAweDQ5NTMsIDB4NzgyYiwgMHg1MDIwLCAweDc4MmYsIDB4MjAyMCwgMHgyMDA5LAotCTB4MDE3ZiwgMHgyMTA0LCAweDc4MzIsIDB4M2YwMCwgMHg3ODM2LCAweDIwNjEsIDB4MDEwMCwgMHg2MjAwLAotCTB4MjA2MSwgMHgwMjAwLCAweDYwM2MsIDB4ODAwNywgMHhhMjA1LCAweDc4M2EsIDB4MjAwOSwgMHgwNGZkLAotCTB4MjEwNCwgMHg3ODNlLCAweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4MjA5MSwgMHg0MDgwLAotCTB4MjA3MSwgMHgwMDEwLCAweDIwYzEsIDB4MDBmMCwgMHgwODA0LCAweDA0MjcsIDB4ODFmZiwgMHgxOTA0LAotCTB4MmRmMSwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDA4MGMsIDB4NGNkYywgMHgxOTA0LAotCTB4MmRmNCwgMHg3ZTM4LCAweGE2ODQsIDB4M2ZmZiwgMHhhMDgyLCAweDQwMDAsIDB4MDIxMCwgMHgwODA0LAotCTB4MmRmNCwgMHg3YzI4LCAweDdkMmMsIDB4MDgwYywgMHg0ZTk2LCAweGQyOGMsIDB4MTExOCwgMHgwODBjLAotCTB4NGU0MSwgMHgwMDEwLCAweDA4MGMsIDB4NGU2ZiwgMHgxNTE4LCAweDIwNjEsIDB4YjQwMCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4NjAxMCwgMHhhMDZkLAotCTB4MDEzMCwgMHg2ODNjLCAweGE0MDYsIDB4MTExOCwgMHg2ODQwLCAweGE1MDYsIDB4MDE1MCwgMHgwMTJlLAotCTB4YWNlMCwgMHgwMDE4LCAweDIwMDEsIDB4YWQxNiwgMHgyMDA0LCAweGFjMDIsIDB4MWEwNCwgMHgyZGYxLAotCTB4MGMzMCwgMHgwODBjLCAweDkyOWMsIDB4MDEyZSwgMHgwOTA0LCAweDJkZjEsIDB4MDgwNCwgMHgyZGNjLAotCTB4YTAwZSwgMHgyMDAxLCAweDAwMDUsIDB4MDgwYywgMHg1MWRmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg5ODAzLCAweDA4MGMsIDB4NTEwYywgMHgwMTJlLCAweDA4MDQsIDB4MmRjYywgMHg4MWZmLAotCTB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywgMHg0ZDk2LAotCTB4MDkwNCwgMHgyZGYxLCAweDA4MGMsIDB4NGVhMiwgMHgwOTA0LCAweDJkZjEsIDB4MDgwNCwgMHgyZGNjLAotCTB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHgwODBjLAotCTB4NGYwZCwgMHgwOTA0LCAweDJkZjEsIDB4MjAxOSwgMHgwMDA1LCAweDA4MGMsIDB4NGViZCwgMHgwOTA0LAotCTB4MmRmMSwgMHg3ODI4LCAweGEwOGEsIDB4MTAwMCwgMHgxYTA0LCAweDJkZjQsIDB4ODAwMywgMHg4MDBiLAotCTB4ODEwYiwgMHhhMTA4LCAweDA4MGMsIDB4NjUxOSwgMHgwODA0LCAweDJkY2MsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHg4MWZmLCAweDAxMTgsIDB4MjAwOSwgMHgwMDAxLCAweDA0NDgsIDB4MjAyOSwgMHgwMGZmLAotCTB4NjQ0YywgMHgyNDAwLCAweGE1MDYsIDB4MDFmMCwgMHgyNTA4LCAweDA4MGMsIDB4NGNkYywgMHgxMWQwLAotCTB4MDgwYywgMHg0ZjBkLCAweDExMjgsIDB4MjAwOSwgMHgwMDAyLCAweDYyYjAsIDB4MjUxOCwgMHgwMGI4LAotCTB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4NGViZCwgMHgxMTE4LCAweDIwMDksIDB4MDAwNiwgMHgwMDc4LAotCTB4NzgyNCwgMHhhMDhhLCAweDEwMDAsIDB4MTI3MCwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHhhMTA4LAotCTB4MDgwYywgMHg2NTE5LCAweDg1MjksIDB4MWFlOCwgMHgwMTJlLCAweDA4MDQsIDB4MmRjYywgMHgwMTJlLAotCTB4MDgwNCwgMHgyZGYxLCAweDAxMmUsIDB4MDgwNCwgMHgyZGY0LCAweDA4MGMsIDB4M2MxYSwgMHgwOTA0LAotCTB4MmRmNCwgMHgwODBjLCAweDRkZmMsIDB4MDgwYywgMHg0ZTk2LCAweDA4MDQsIDB4MmRjYywgMHg4MWZmLAotCTB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywgMHg0ZGVkLAotCTB4MDgwYywgMHg0ZTk2LCAweDA4MDQsIDB4MmRjYywgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwODBjLAotCTB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywgMHg0ZTcxLCAweDA5MDQsIDB4MmRmMSwgMHgwODBjLAotCTB4NGJjMCwgMHgwODBjLCAweDRlM2EsIDB4MDgwYywgMHg0ZTk2LCAweDA4MDQsIDB4MmRjYywgMHgwODBjLAotCTB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywgMHg0ZDk2LCAweDA5MDQsIDB4MmRmMSwgMHg2MmEwLAotCTB4MjAxOSwgMHgwMDA1LCAweDAwYzYsIDB4MDgwYywgMHg0ZWNmLCAweDIwNjEsIDB4MDAwMCwgMHgwODBjLAotCTB4NjhlNywgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDY4MWQsIDB4MjAwOSwgMHgwMDAwLAotCTB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MDBjZSwgMHgwODBjLCAweDRlOTYsIDB4MDgwNCwgMHgyZGNjLAotCTB4MDgwYywgMHgzYzFhLCAweDA5MDQsIDB4MmRmNCwgMHgwODBjLCAweDRlOTYsIDB4MjIwOCwgMHgwODA0LAotCTB4MmRjYywgMHgwMTU2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDY5LCAweGFlMTMsIDB4NjgxMCwgMHg2OTE0LAotCTB4YTEwYSwgMHgxMjEwLCAweDIwMDksIDB4MDAwMCwgMHg2ODE2LCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LAotCTB4MDAwMCwgMHgyMGE5LCAweDAwN2UsIDB4MjA2OSwgMHhhZTM0LCAweDJkMDQsIDB4YTA3NSwgMHgwMTMwLAotCTB4NzA0YywgMHgwMDcxLCAweGEyMTAsIDB4NzA4MCwgMHgwMDU5LCAweGEzMTgsIDB4OGQ2OCwgMHgxZjA0LAotCTB4MzAzNSwgMHgyMzAwLCAweGEyMTgsIDB4MDBlZSwgMHgwMGRlLCAweDAxNWUsIDB4MDgwNCwgMHgyZGNjLAotCTB4MDBmNiwgMHgwMDE2LCAweGEwN2QsIDB4MDE0MCwgMHgyMDAxLCAweDAwMDAsIDB4ODAwMCwgMHgyZjBjLAotCTB4ODFmZiwgMHgwMTEwLCAweDIxNzgsIDB4MGNkMCwgMHgwMDFlLCAweDAwZmUsIDB4MDAwNSwgMHgyMDY5LAotCTB4YWUxMywgMHg2OTEwLCAweDYyYWMsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLAotCTB4NjE0YywgMHhhMTkwLCAweDJiZTYsIDB4MjIxNSwgMHhhMjk0LCAweDAwZmYsIDB4NjM2YywgMHg4M2ZmLAotCTB4MDEwOCwgMHg2MjcwLCAweDY3ZDAsIDB4ZDc5YywgMHgwMTE4LCAweDIwMzEsIDB4MDAwMSwgMHgwMDkwLAotCTB4ZDdhYywgMHgwMTE4LCAweDIwMzEsIDB4MDAwMywgMHgwMDY4LCAweGQ3YTQsIDB4MDExOCwgMHgyMDMxLAotCTB4MDAwMiwgMHgwMDQwLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTE4LCAweDIwMzEsIDB4MDAwNCwgMHgwMDEwLAotCTB4MjAzMSwgMHgwMDAwLCAweDdlM2EsIDB4N2YzZSwgMHgwODA0LCAweDJkY2MsIDB4NjEzYywgMHg2MjQwLAotCTB4MjAxOSwgMHhhZmEzLCAweDIzMWMsIDB4MDgwNCwgMHgyZGNjLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjEzNCwgMHhhMDA2LCAweDIwMTAsIDB4MjAxOCwgMHgwMTJlLCAweDA4MDQsIDB4MmRjYywgMHgwODBjLAotCTB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4NjI0NCwgMHg2MzM4LCAweDA4MDQsIDB4MmRjYywgMHg2MTNjLAotCTB4NjI0MCwgMHg3ODI0LCAweDYwM2UsIDB4N2IyOCwgMHg2MzQyLCAweDIwNjksIDB4YWQ1MSwgMHg4MzFmLAotCTB4YTMwNSwgMHg2ODE2LCAweDc4MmMsIDB4MjA2OSwgMHhhZmEzLCAweDJkMWMsIDB4MjA2YSwgMHgwODA0LAotCTB4MmRjYywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3ODI0LCAweDYwMzYsIDB4MDEyZSwgMHgwODA0LAotCTB4MmRjYywgMHgwODBjLCAweDNjMmEsIDB4MDkwNCwgMHgyZGY0LCAweDc4MjgsIDB4YTAwZCwgMHgwOTA0LAotCTB4MmRmNCwgMHg3ODJjLCAweGEwMDUsIDB4MDkwNCwgMHgyZGY0LCAweDYyNDQsIDB4NjE0NiwgMHg2MzM4LAotCTB4NjAzYSwgMHgwODA0LCAweDJkY2MsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLAotCTB4MTkwNCwgMHgyZGYxLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDc5MjQsIDB4ODEwZiwgMHhhMThjLAotCTB4MDBmZiwgMHhhMTk2LCAweDAwZmYsIDB4MTEzMCwgMHgyMDAxLCAweGFkMTQsIDB4MjAwNCwgMHhhMDg1LAotCTB4ZmYwMCwgMHgwMDc4LCAweGExODIsIDB4MDA3ZiwgMHgxNmEwLCAweGExODgsIDB4MmJlNiwgMHgyMTBkLAotCTB4YTE4YywgMHgwMGZmLCAweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGExMTYsIDB4MDU1MCwgMHg4MTBmLAotCTB4YTEwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDA2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDBlLAotCTB4MDFlMCwgMHg2MDFhLCAweDYwMGIsIDB4YmMwOSwgMHg2MDFmLCAweDAwMDEsIDB4MDgwYywgMHgzYzA1LAotCTB4MDFkOCwgMHg2ODM3LCAweDAwMDAsIDB4NzAwNywgMHgwMDAzLCAweDY4MzMsIDB4MDAwMCwgMHg2ODM4LAotCTB4YzBmZCwgMHg2ODNhLCAweDcwMWIsIDB4MzE3MywgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwgMHgwMDMyLAotCTB4MDgwYywgMHg4MGE3LCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDAxMmUsIDB4MDBjZSwgMHgwODA0LAotCTB4MmRmMSwgMHgwMGNlLCAweDA4MDQsIDB4MmRmNCwgMHgwODBjLCAweDgwNzgsIDB4MGNiMCwgMHgyMDAxLAotCTB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgxOTA0LCAweDJkZjEsIDB4MDBjNiwgMHgyMDYxLAotCTB4MDEwMCwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweGExOTYsIDB4MDBmZiwgMHgxMTMwLAotCTB4MjAwMSwgMHhhZDE0LCAweDIwMDQsIDB4YTA4NSwgMHhmZjAwLCAweDAwNzgsIDB4YTE4MiwgMHgwMDdmLAotCTB4MTZhMCwgMHhhMTg4LCAweDJiZTYsIDB4MjEwZCwgMHhhMThjLCAweDAwZmYsIDB4MjAwMSwgMHhhZDE0LAotCTB4MjAwNCwgMHhhMTE2LCAweDA1NTAsIDB4ODEwZiwgMHhhMTA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDAwNiwgMHgwODBjLCAweDgwMjIsIDB4MDAwZSwgMHgwMWUwLCAweDYwMWEsIDB4NjAwYiwgMHhiYzA1LAotCTB4NjAxZiwgMHgwMDAxLCAweDA4MGMsIDB4M2MwNSwgMHgwMWQ4LCAweDY4MzcsIDB4MDAwMCwgMHg3MDA3LAotCTB4MDAwMywgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NzAxYiwgMHgzMTczLAotCTB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMiwgMHgwODBjLCAweDgwYTcsIDB4MDEyZSwgMHgwMGNlLAotCTB4MDAwNSwgMHgwMTJlLCAweDAwY2UsIDB4MDgwNCwgMHgyZGYxLCAweDAwY2UsIDB4MDgwNCwgMHgyZGY0LAotCTB4MDgwYywgMHg4MDc4LCAweDBjYjAsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDkwNCwgMHgyZGYxLAotCTB4MDgwNCwgMHgyZGNjLCAweDIwNjEsIDB4YjA0OCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDAwLAotCTB4ZDA4NCwgMHgwMTI4LCAweDYxMDQsIDB4NjIwOCwgMHgwMTJlLCAweDA4MDQsIDB4MmRjYywgMHgwMTJlLAotCTB4MDgwNCwgMHgyZGY0LCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4NTc0ZiwgMHgwOTA0LAotCTB4MmRmMSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjQ0LCAweDYwNjQsIDB4YTIwMiwgMHgwMjQ4LAotCTB4YTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4MjZjMCwgMHgwODBjLCAweDQzNmUsIDB4MDEyZSwgMHgwODA0LAotCTB4MmRjYywgMHgwMTJlLCAweDA4MDQsIDB4MmRmNCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3ODI0LAotCTB4YTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4MzFiNiwgMHgzMWJmLCAweDMxYzYsIDB4MzFiMywgMHgzMWIzLAotCTB4MzFiMywgMHgzMWIzLCAweDMxYjMsIDB4MDEyZSwgMHgwODA0LCAweDJkZjQsIDB4MjAwOSwgMHgwMTE0LAotCTB4MjEwNCwgMHhhMDg1LCAweDA4MDAsIDB4MjAwYSwgMHgwODBjLCAweDMzMmYsIDB4MDA3MCwgMHgyMDA5LAotCTB4MDEwYiwgMHgyMDBiLCAweDAwMTAsIDB4MDgwYywgMHgzMzJmLCAweDAwMzgsIDB4ODFmZiwgMHgwMTI4LAotCTB4MDEyZSwgMHgyMDIxLCAweDQwMGIsIDB4MDgwNCwgMHgyZGNlLCAweDAwODYsIDB4MDA5NiwgMHgwMGE2LAotCTB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDIwMDksIDB4MDEwMSwgMHgyMTBjLAotCTB4MDAxNiwgMHgyMDAxLCAweDAxMzgsIDB4MjAwYywgMHgyMDAzLCAweDAwMDEsIDB4MDAxNiwgMHgyMDAxLAotCTB4MDA3YSwgMHgyMDM0LCAweDIwMDEsIDB4MDA3YiwgMHgyMDJjLCAweGEwMDYsIDB4MjA0OCwgMHgyMDUwLAotCTB4MjA1OCwgMHgwODBjLCAweDM1NzAsIDB4MDgwYywgMHgzNGRhLCAweGEwM2UsIDB4MjcyMCwgMHgwMGY2LAotCTB4MDBlNiwgMHgwMGM2LCAweDJkNjAsIDB4MjA3MSwgMHhiMDFlLCAweDIwNzksIDB4MDAyMCwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMDAwLCAweDY4MjQsIDB4ZDBiNCwgMHgwMTQwLCAweDIwMDEsIDB4MDA3ZCwgMHgyMDA0LAotCTB4NzgzZSwgMHgyMDAxLCAweDAwN2MsIDB4MjAwNCwgMHg3ODNhLCAweDAwZGUsIDB4MjAxMSwgMHgwMDAxLAotCTB4MDgwYywgMHgzNDg2LCAweDA4MGMsIDB4MzQ4NiwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwODBjLAotCTB4MzNkNSwgMHgwODBjLCAweDM0YWUsIDB4MDgwYywgMHgzNDJiLCAweDA4MGMsIDB4MzM5NCwgMHgwODBjLAotCTB4MzNjNSwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg3ODI0LCAweGQwOTQsIDB4MDUzMCwgMHg3ODE0LAotCTB4YTA4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAxMCwgMHg3ODE2LCAweDIwNzksIDB4MDE0MCwgMHgwODBjLAotCTB4MzMwZCwgMHgxMTEwLCAweDAwZmUsIDB4MDQzMCwgMHg3ODA0LCAweGQwZGMsIDB4MGRjMCwgMHgyMDc5LAotCTB4MDEwMCwgMHg3ODI3LCAweDAwODYsIDB4NzgxNCwgMHhhMDg0LCAweDAxODQsIDB4YTA4NSwgMHgwMDMyLAotCTB4NzgxNiwgMHgwODBjLCAweDMzMGQsIDB4MTExMCwgMHgwMGZlLCAweDAwYTAsIDB4NzgyNCwgMHhkMGJjLAotCTB4MGRjMCwgMHg3ODI3LCAweDAwODAsIDB4YTAyNiwgMHg3YzE2LCAweDc4MjQsIDB4ZDBhYywgMHgwMTMwLAotCTB4OGI1OCwgMHgwODBjLCAweDMzMTcsIDB4MDBmZSwgMHgwODA0LCAweDMyZDcsIDB4MDBmZSwgMHgwODBjLAotCTB4MzMwZCwgMHgxMTUwLCAweDg5NDgsIDB4MjAwMSwgMHgwMDdhLCAweDI2MDIsIDB4MjAwMSwgMHgwMDdiLAotCTB4MjUwMiwgMHgwODBjLCAweDMzMTcsIDB4MDA4OCwgMHg4N2ZmLCAweDAxNDAsIDB4MjAwMSwgMHgwMjAxLAotCTB4MjAwNCwgMHhhMDA1LCAweDE5MDQsIDB4MzIxMSwgMHg4NzM5LCAweDAwMzgsIDB4MjAwMSwgMHhhZmZkLAotCTB4MjAwNCwgMHhhMDg2LCAweDAwMDAsIDB4MTkwNCwgMHgzMjExLCAweDIwMDEsIDB4MDAzMywgMHgyMDAzLAotCTB4MDBmNiwgMHg4NjMxLCAweDEyMDgsIDB4ODUyOSwgMHgyNTAwLCAweGE2MDUsIDB4MDkwNCwgMHgzMmQ3LAotCTB4NzgyNCwgMHhkMGJjLCAweDAxMjgsIDB4MjkwMCwgMHhhYTA1LCAweGFiMDUsIDB4MTkwNCwgMHgzMmQ3LAotCTB4NjAzMywgMHgwMDBkLCAweDIwMDEsIDB4MDAzMCwgMHgyMDAzLCAweDAwMDQsIDB4NzgyNCwgMHhkMGFjLAotCTB4MTE0OCwgMHgyMDAxLCAweGFmZmQsIDB4MjAwMywgMHgwMDAzLCAweDIwMDEsIDB4MDAzMCwgMHgyMDAzLAotCTB4MDAwOSwgMHgwMDQwLCAweDYwMjcsIDB4MDAwMSwgMHgyMDAxLCAweDAwNzUsIDB4MjAwNCwgMHhhMDA1LAotCTB4MDEwOCwgMHg2MDI2LCAweDJjMDAsIDB4NjAxYSwgMHgyMGUxLCAweDkwNDAsIDB4MmQwMCwgMHg2ODFhLAotCTB4NjgzMywgMHgwMDBkLCAweDc4MjQsIDB4ZDBhNCwgMHgxMTgwLCAweDY4MjcsIDB4MDAwMCwgMHgwMGM2LAotCTB4MjBhOSwgMHgwMDA0LCAweDIwNjEsIDB4MDAyMCwgMHg2MDAzLCAweDAwMDgsIDB4MjAwMSwgMHgwMjAzLAotCTB4MjAwNCwgMHgxZjA0LCAweDMyYWMsIDB4MDBjZSwgMHgwMDQwLCAweDY4MjcsIDB4MDAwMSwgMHgyMDAxLAotCTB4MDA3NCwgMHgyMDA0LCAweGEwMDUsIDB4MDEwOCwgMHg2ODI2LCAweDAwZjYsIDB4MDBjNiwgMHgyMDc5LAotCTB4MDEwMCwgMHgyMDYxLCAweDAwMjAsIDB4NzgyNywgMHgwMDAyLCAweDIwMDEsIDB4MDA3MiwgMHgyMDA0LAotCTB4YTA4NCwgMHhmZmY4LCAweDYwMWEsIDB4MDAwNiwgMHgyMDAxLCAweDAwNzMsIDB4MjAwNCwgMHg2MDFlLAotCTB4NzhjNiwgMHgwMDBlLCAweDc4Y2EsIDB4MDBjZSwgMHgwMGZlLCAweDA4MDQsIDB4MzFlZiwgMHgyMDYxLAotCTB4MDEwMCwgMHg2MDI3LCAweDAwMDIsIDB4MDAxZSwgMHg2MWUyLCAweDAwMWUsIDB4NjEwNiwgMHg3ODI0LAotCTB4YTA4NCwgMHgwMDAzLCAweGEwODYsIDB4MDAwMiwgMHgwMTg4LCAweDIwZTEsIDB4OTAyOCwgMHg2MDUwLAotCTB4YTA4NCwgMHhmN2VmLCAweDYwNTIsIDB4NjAyZiwgMHgwMDAwLCAweDYwMmMsIDB4YzBhYywgMHg2MDJlLAotCTB4NjA0YiwgMHhmN2Y3LCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4MjkwOCwgMHgyYTEwLAotCTB4MmIxOCwgMHgyYjAwLCAweGFhMDUsIDB4YTkwNSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLAotCTB4MDBiZSwgMHgwMGFlLCAweDAwOWUsIDB4MDA4ZSwgMHgxMTE4LCAweDAxMmUsIDB4MDgwNCwgMHgyZGNjLAotCTB4MDEyZSwgMHgyMDIxLCAweDQwMGMsIDB4MDgwNCwgMHgyZGNlLCAweGEwODUsIDB4MDAwMSwgMHgxZDA0LAotCTB4MzMxNiwgMHgyMDkxLCAweDYwMDAsIDB4ODQyMCwgMHhhNDg2LCAweDAwNjQsIDB4MDAwNSwgMHgyMDAxLAotCTB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4MjAwMSwgMHgwMDMwLCAweDIwMDMsIDB4MDAwNCwgMHgyMDAxLAotCTB4MDAyMCwgMHgyMDAzLCAweDAwMDQsIDB4MjAwMSwgMHhhZmZkLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLAotCTB4YjAxZSwgMHgyMDAzLCAweDAwMDAsIDB4MjBlMSwgMHhmMDAwLCAweGEwMjYsIDB4MDAwNSwgMHgwMGY2LAotCTB4MjA3OSwgMHgwMTAwLCAweDIwMDEsIDB4YWQxNCwgMHgyMDBjLCAweDc5MzIsIDB4NzkzNiwgMHgwODBjLAotCTB4MjZhMCwgMHg3ODUwLCAweGEwODQsIDB4MDk4MCwgMHhhMDg1LCAweDAwMzAsIDB4Nzg1MiwgMHgyMDE5LAotCTB4MDFmNCwgMHg4MzE5LCAweDFkZjAsIDB4YTA4NCwgMHgwOTgwLCAweDc4NTIsIDB4NzgyYywgMHhjMGFkLAotCTB4NzgyZSwgMHgyMGE5LCAweDAwNDYsIDB4MWQwNCwgMHgzMzRiLCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LAotCTB4MzM0YiwgMHg3ODUwLCAweGEwODUsIDB4MDQwMCwgMHg3ODUyLCAweDIwMDEsIDB4MDAwOSwgMHgyMDA0LAotCTB4YTA4NCwgMHgwMDAzLCAweGEwODYsIDB4MDAwMSwgMHgxMTE4LCAweDc4MmMsIDB4YzBhYywgMHg3ODJlLAotCTB4Nzg0YiwgMHhmN2Y3LCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjBhOSwgMHgwMDBlLAotCTB4ZTAwMCwgMHgxZjA0LCAweDMzNjgsIDB4Nzg1MCwgMHhhMDg1LCAweDE0MDAsIDB4Nzg1MiwgMHgyMDE5LAotCTB4NjFhOCwgMHg3ODU0LCAweGUwMDAsIDB4ZTAwMCwgMHhkMDhjLCAweDExMTAsIDB4ODMxOSwgMHgxZGM4LAotCTB4NzgyNywgMHgwMDQ4LCAweDc4NTAsIDB4YTA4NSwgMHgwNDAwLCAweDc4NTIsIDB4Nzg0MywgMHgwMDQwLAotCTB4MjAxOSwgMHgwMWY0LCAweGUwMDAsIDB4ZTAwMCwgMHg4MzE5LCAweDFkZTAsIDB4MjAwMSwgMHgwMTQwLAotCTB4MjAwMywgMHgwMTAwLCAweDc4MjcsIDB4MDAyMCwgMHg3ODQzLCAweDAwMDAsIDB4MjAwMywgMHgwMDAwLAotCTB4NzgyNywgMHgwMDQ4LCAweDAwZmUsIDB4MDAwNSwgMHg3ODI0LCAweGQwYWMsIDB4MTFjOCwgMHgwMGY2LAotCTB4MDBlNiwgMHgyMDcxLCAweGFmZmQsIDB4MjA3OSwgMHgwMDMwLCAweDIwMDEsIDB4MDIwMSwgMHgyMDA0LAotCTB4YTAwNSwgMHgwMTYwLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDExNDAsIDB4MDA1MSwgMHhkMGJjLAotCTB4MDEwOCwgMHg4NzM4LCAweDcwMDMsIDB4MDAwMywgMHg3ODAzLCAweDAwMTksIDB4MDBlZSwgMHgwMGZlLAotCTB4MDAwNSwgMHg3ODBjLCAweGEwOGMsIDB4MDA3MCwgMHgwMTc4LCAweDIwMDksIDB4MDA3YSwgMHgyNjBhLAotCTB4MjAwOSwgMHgwMDdiLCAweDI1MGEsIDB4ZDBiNCwgMHgwMTA4LCAweDhhNTAsIDB4ZDBhYywgMHgwMTA4LAotCTB4ODk0OCwgMHhkMGE0LCAweDAxMDgsIDB4OGI1OCwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLAotCTB4NzgxYywgMHhkMDg0LCAweDAxNDAsIDB4MjBlMSwgMHgwMDA3LCAweDIwZTEsIDB4MjAwMCwgMHgyMDAxLAotCTB4MDIwYSwgMHgyMDA0LCAweDBjYTgsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMTAwLAotCTB4MjAwOSwgMHhhZDE0LCAweDIxMGMsIDB4NzE2ZSwgMHg3MDYzLCAweDAxMDAsIDB4NzE2NiwgMHg3MTllLAotCTB4NzA2YiwgMHgwMDAwLCAweDcwNzMsIDB4MDgwOSwgMHg3MDc3LCAweDAwMDgsIDB4NzA3OCwgMHhhMDgwLAotCTB4MDEwMCwgMHg3MDdhLCAweDcwODAsIDB4ODAwMCwgMHg3MDgyLCAweDcwODcsIDB4YWFhYSwgMHhhMDA2LAotCTB4NzA4YSwgMHg3MDhlLCAweDcwN2UsIDB4NzBkNiwgMHg3MGFiLCAweDAwMzYsIDB4NzBhZiwgMHg5NWQ1LAotCTB4NzAyNywgMHgwMDgwLCAweDcwMTQsIDB4YTA4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAzMiwgMHg3MDE2LAotCTB4MDgwYywgMHgzNGFlLCAweDA4MGMsIDB4MzMwZCwgMHgxMTEwLCAweDg0MjEsIDB4MDAyOCwgMHg3MDI0LAotCTB4ZDBiYywgMHgwZGIwLCAweDcwMjcsIDB4MDA4MCwgMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwgMHhhZmZkLAotCTB4MjA3OSwgMHgwMDMwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4MjQsIDB4ZDBiNCwgMHgwMTIwLAotCTB4NjgzYywgMHg3ODNlLCAweDY4MzgsIDB4NzgzYSwgMHgwMGRlLCAweDIwMTEsIDB4MDAxMSwgMHgwODBjLAotCTB4MzQ4NiwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHgzNDg2LCAweDAwZWUsIDB4MDBmZSwgMHg3MDE3LAotCTB4MDAwMCwgMHgwMGVlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDIwNzEsIDB4YWZmZCwgMHgyMDc5LAotCTB4MDAzMCwgMHg3OTA0LCAweGQxZmMsIDB4MDkwNCwgMHgzNDgzLCAweDc4MDMsIDB4MDAwMiwgMHhhMDI2LAotCTB4ZDE5YywgMHgxOTA0LCAweDM0N2YsIDB4NzAwMCwgMHgwMDAyLCAweDM0ODMsIDB4MzQ0MSwgMHgzNDY1LAotCTB4MzQ3ZiwgMHhkMWJjLCAweDExNTAsIDB4ZDFkYywgMHgxMTUwLCAweDgwMDEsIDB4NzAwMiwgMHgyMDExLAotCTB4MDAwMSwgMHgwNGUxLCAweDA1YzAsIDB4MDRkMSwgMHgwNGIwLCAweDc4MGYsIDB4MDAwMCwgMHg3ODIwLAotCTB4NzkyNCwgMHg3ODAzLCAweDAwMDQsIDB4NzgyMiwgMHg3OTI2LCAweDIwMDEsIDB4MDIwMSwgMHgyMDBjLAotCTB4ODFmZiwgMHgwZGU4LCAweDA4MGMsIDB4MzNiMSwgMHgyMDA5LCAweDAwMDEsIDB4NzgwOCwgMHhkMGVjLAotCTB4MDExMCwgMHgyMDA5LCAweDAwMTEsIDB4NzkwMiwgMHgwMGYwLCAweDgwMDEsIDB4NzAwMiwgMHhhMTg0LAotCTB4MDg4MCwgMHgxMTM4LCAweDc4MDQsIDB4ZDBmYywgMHgxOTQwLCAweDIwMTEsIDB4MDAwMSwgMHgwMGIxLAotCTB4MDA5MCwgMHg2MDMwLCAweGEwOTIsIDB4MDAwNCwgMHhhMDg2LCAweDAwMDksIDB4MTEyMCwgMHg2MDAwLAotCTB4NjAxYSwgMHgyMDExLCAweDAwMjUsIDB4NjIzMiwgMHhkMWRjLCAweDE5ODgsIDB4MDg3MCwgMHg3ODAzLAotCTB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NjAyNCwgMHhhMDA1LAotCTB4MDUyMCwgMHg4MDAxLCAweDYwMjYsIDB4NjAxOCwgMHg2MTMwLCAweGExNDAsIDB4MjgwNCwgMHg3ODMyLAotCTB4ODg0MCwgMHgyODA0LCAweDc4MzYsIDB4ODg0MCwgMHgyODA0LCAweDc4MjIsIDB4ODg0MCwgMHgyODA0LAotCTB4NzgyNiwgMHg4ODQwLCAweDdhMDIsIDB4NzAwMCwgMHg4MDAwLCAweDcwMDIsIDB4NjAxOCwgMHhhODAyLAotCTB4YTA4YSwgMHgwMDI5LCAweDExMzgsIDB4NjAxOCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwNCwgMHg2MDFhLAotCTB4MjAwMSwgMHgwMDBkLCAweDYwMzIsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LAotCTB4MDBjNiwgMHgyMDcxLCAweGIwMWUsIDB4MjA3OSwgMHgwMDIwLCAweDc5MDQsIDB4ZDFmYywgMHgwMWYwLAotCTB4NzgwMywgMHgwMDAyLCAweDJkNjAsIDB4YTAyNiwgMHg3MDAwLCAweDAwMDIsIDB4MzRkNiwgMHgzNGMxLAotCTB4MzRjZCwgMHg4MDAxLCAweDcwMDIsIDB4ZDE5YywgMHgxMTg4LCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLAotCTB4MzQ4NiwgMHgwMTYwLCAweDA4MGMsIDB4MzQ4NiwgMHgwMDQ4LCAweDgwMDEsIDB4NzAwMiwgMHg3ODA0LAotCTB4ZDBmYywgMHgxZDMwLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDM0ODYsIDB4MDBjZSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDIwNjEsIDB4MDIwMCwgMHg2MDFiLAotCTB4MDAwNCwgMHgyMDYxLCAweDAxMDAsIDB4NjBjZiwgMHgwNDAwLCAweDYwMDQsIDB4YzBhYywgMHhhMDg1LAotCTB4MDIwMCwgMHg2MDA2LCAweDIwMDEsIDB4MDA3NCwgMHgyMDA0LCAweGEwMDUsIDB4MDFmOCwgMHgyMDM4LAotCTB4MjAwMSwgMHgwMDc2LCAweDIwMjQsIDB4MjAwMSwgMHgwMDc3LCAweDIwMWMsIDB4MDgwYywgMHgzYzA1LAotCTB4NjgzMywgMHgwMDBkLCAweDZmMjYsIDB4MmQwMCwgMHg2ODFhLCAweGE3OGEsIDB4MDAwNywgMHgwMjIwLAotCTB4MjEzOCwgMHgyMDA5LCAweDAwMDcsIDB4MDAxMCwgMHgyNzA4LCAweGEwM2UsIDB4NjgxOCwgMHhhMDgwLAotCTB4MDAwZCwgMHgwNGExLCAweDFkOTAsIDB4MmQwMCwgMHg2ODFhLCAweDAwODgsIDB4MDgwYywgMHgzYzA1LAotCTB4NjgzMywgMHgwMDBkLCAweDIwNzAsIDB4NjgyNywgMHgwMDAxLCAweDJkMDAsIDB4NjgxYSwgMHgyMDAxLAotCTB4MDA3NiwgMHgyMDA0LCAweDIwNzIsIDB4MjAwMSwgMHgwMDc3LCAweDIwMDQsIDB4NzAwNiwgMHgyMDYxLAotCTB4MDAyMCwgMHgyMDc5LCAweDAxMDAsIDB4NjAxMywgMHgwNDAwLCAweDIwZTEsIDB4OTA0MCwgMHgyMDAxLAotCTB4MDA3MiwgMHgyMDA0LCAweGEwODQsIDB4ZmZmOCwgMHg3MDBhLCAweDYwMWEsIDB4MDAwNiwgMHgyMDAxLAotCTB4MDA3MywgMHgyMDA0LCAweDcwMGUsIDB4NjAxZSwgMHg3OGM2LCAweDAwMGUsIDB4NzhjYSwgMHhhMDA2LAotCTB4NjAzYSwgMHg2MDNlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAotCTB4MDAxMCwgMHgyMGEwLCAweDIwOTksIDB4MDAxNCwgMHg3MDAzLCAweDAwMjYsIDB4NzQzMiwgMHg3MzM2LAotCTB4YTAwNiwgMHg3MDNhLCAweDcwM2UsIDB4ODEwYiwgMHg4MTBiLCAweDIxYTgsIDB4ODEwYiwgMHg3MTIyLAotCTB4NzAwMywgMHgwMDQxLCAweDcwMDQsIDB4ZDBmYywgMHgwZGU4LCAweDcwMDMsIDB4MDAwMiwgMHg3MDAzLAotCTB4MDA0MCwgMHg1M2E1LCAweDc0MzAsIDB4NzMzNCwgMHg4N2ZmLCAweDAxODAsIDB4MDBjNiwgMHgwMGQ2LAotCTB4MmQ2MCwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwgMHgwMGNlLCAweDYwMTgsIDB4MjA3MCwgMHgyZDAwLAotCTB4NzAwNiwgMHg2MDFhLCAweDAwZGUsIDB4MDBjZSwgMHhhMDg1LCAweDAwMDEsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDAxLCAweDAwNzUsIDB4MjAwNCwgMHhhMDA1LCAweDA1MDgsIDB4MjAzOCwgMHgyMDAxLAotCTB4MDA3OCwgMHgyMDI0LCAweDIwMDEsIDB4MDA3OSwgMHgyMDFjLCAweDA4MGMsIDB4M2MwNSwgMHgyZDYwLAotCTB4NjgzMywgMHgwMDBkLCAweDZmMjYsIDB4MmQwMCwgMHg2ODFhLCAweGE3OGEsIDB4MDAwNywgMHgwMjIwLAotCTB4MjEzOCwgMHgyMDA5LCAweDAwMDcsIDB4MDAxMCwgMHgyNzA4LCAweGEwM2UsIDB4NjgxOCwgMHhhMDgwLAotCTB4MDAwZCwgMHgwODBjLCAweDM1M2UsIDB4MWQ4OCwgMHgyZDAwLCAweDY4MWEsIDB4MDBlMCwgMHgwODBjLAotCTB4M2MwNSwgMHgyZDYwLCAweDYwMzMsIDB4MDAwZCwgMHgyMDcwLCAweDYwMjcsIDB4MDAwMSwgMHgyYzAwLAotCTB4NjAxYSwgMHgyMDAxLCAweDAwNzgsIDB4MjAwNCwgMHgyMDcyLCAweDIwMDEsIDB4MDA3OSwgMHgyMDA0LAotCTB4NzAwNiwgMHgyMDAxLCAweDAwNzIsIDB4MjAwNCwgMHhhMDg0LCAweGZmZjgsIDB4NzAwYSwgMHgyMDAxLAotCTB4MDA3MywgMHgyMDA0LCAweDcwMGUsIDB4MjAwMSwgMHgwMDMwLCAweDIwMDMsIDB4MDAwNCwgMHg3ODI0LAotCTB4ZDBhYywgMHgxMTc4LCAweDIwMDEsIDB4MDEwMSwgMHgyMDBjLCAweGMxZWQsIDB4MjEwMiwgMHg2MDI3LAotCTB4MDAwMCwgMHgyMDAxLCAweGFmZmQsIDB4MjAwMywgMHgwMDAzLCAweDIwMDEsIDB4MDAzMCwgMHgyMDAzLAotCTB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MDgwNCwgMHgyZGNjLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjBhOSwgMHgwMDExLCAweDIwMDEsIDB4YWQ0MCwgMHgyMGEwLCAweGEwMDYsIDB4NDBhNCwgMHgwMTJlLAotCTB4MDgwNCwgMHgyZGNjLCAweDdkMzgsIDB4N2MzYywgMHgwODA0LCAweDJlNzMsIDB4MDgwYywgMHgzYzA1LAotCTB4MDkwNCwgMHgyZGYxLCAweDA4MGMsIDB4NTc0ZiwgMHgwMTEwLCAweDA4MGMsIDB4NDkxZiwgMHgyMDA5LAotCTB4MDAxYywgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MGMsIDB4M2M0NiwgMHg3MDFiLAotCTB4MzVmMiwgMHgwMDA1LCAweGFkZTgsIDB4MDAwZCwgMHg2ODAwLCAweGEwMDUsIDB4MDkwNCwgMHgyZGY0LAotCTB4NjgwNCwgMHhkMGFjLCAweDAxMTgsIDB4ZDBhNCwgMHgwOTA0LCAweDJkZjQsIDB4ZDA5NCwgMHgwMGM2LAotCTB4MjA2MSwgMHgwMTAwLCAweDYxMDQsIDB4MDEzOCwgMHg2MjAwLCAweGEyOTIsIDB4MDAwNSwgMHgwMjE4LAotCTB4YTE4YywgMHhmZmRmLCAweDAwMTAsIDB4YTE4ZCwgMHgwMDIwLCAweDYxMDYsIDB4MDBjZSwgMHhkMDhjLAotCTB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwgMHgwMTE4LCAweGExOGQsIDB4MDAxMCwgMHgwMDEwLAotCTB4YTE4YywgMHhmZmVmLCAweDYxMDYsIDB4MDBjZSwgMHgyMDA5LCAweDAxMDAsIDB4MjEwYywgMHhhMThhLAotCTB4MDAwMiwgMHgwMjY4LCAweGQwODQsIDB4MDE1OCwgMHg2YTI4LCAweGEyOGEsIDB4MDA3ZiwgMHgxYTA0LAotCTB4MmRmNCwgMHhhMjg4LCAweDJiZTYsIDB4MjEwZCwgMHhhMThjLCAweDAwZmYsIDB4NjE1NiwgMHhkMGRjLAotCTB4MDEzMCwgMHg2ODI4LCAweGEwOGEsIDB4MDA3ZiwgMHgxYTA0LCAweDJkZjQsIDB4NjA0ZSwgMHg2ODA4LAotCTB4YTA4YSwgMHgwMTAwLCAweDBhMDQsIDB4MmRmNCwgMHhhMDhhLCAweDA4NDEsIDB4MWEwNCwgMHgyZGY0LAotCTB4YTA4NCwgMHgwMDA3LCAweDE5MDQsIDB4MmRmNCwgMHg2ODBjLCAweGEwMDUsIDB4MDkwNCwgMHgyZGY0LAotCTB4NjgxMCwgMHhhMDA1LCAweDA5MDQsIDB4MmRmNCwgMHg2ODQ4LCAweDY5NDAsIDB4YTEwYSwgMHgxYTA0LAotCTB4MmRmNCwgMHg4MDAxLCAweDA5MDQsIDB4MmRmNCwgMHg2ODRjLCAweDY5NDQsIDB4YTEwYSwgMHgxYTA0LAotCTB4MmRmNCwgMHg4MDAxLCAweDA5MDQsIDB4MmRmNCwgMHg2ODA0LCAweGQwZmMsIDB4MDU2MCwgMHgwODBjLAotCTB4M2MwNSwgMHgwOTA0LCAweDJkZjEsIDB4MjAwOSwgMHgwMDE0LCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLAotCTB4N2QzOCwgMHhhMjkwLCAweDAwMzgsIDB4YTM5OSwgMHgwMDAwLCAweDA4MGMsIDB4M2M0NiwgMHg3MDFiLAotCTB4MzY3MiwgMHgwMDA1LCAweGFkZTgsIDB4MDAwZCwgMHgyMGE5LCAweDAwMTQsIDB4MmQ5OCwgMHgyMDY5LAotCTB4YWQ2ZCwgMHgyZGEwLCAweDUzYTMsIDB4NzAxMCwgMHhhMGU4LCAweDAwMGQsIDB4MjAwMSwgMHhhZDcxLAotCTB4MjAwYywgMHhkMWU0LCAweDAxNDAsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4NjAwNCwgMHhhMDg1LAotCTB4MGIwMCwgMHg2MDA2LCAweDAwY2UsIDB4MjBhOSwgMHgwMDFjLCAweDJkOTgsIDB4MjA2OSwgMHhhZDUxLAotCTB4MmRhMCwgMHg1M2EzLCAweDY4MTQsIDB4YTA4YywgMHgwMGZmLCAweDYxM2UsIDB4ODAwNywgMHhhMDg0LAotCTB4MDBmZiwgMHg2MDQyLCAweDA4MGMsIDB4NWExYywgMHgwODBjLCAweDUwNzAsIDB4MDgwYywgMHg1MGQ5LAotCTB4NjAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MTkwNCwgMHgzNzU1LCAweDY4MDgsIDB4NjAyYSwgMHgwODBjLAotCTB4MjJmOCwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweGEwODIsIDB4MDAwNSwgMHgwMDBlLAotCTB4MDI2OCwgMHgyMDA5LCAweDAxNzAsIDB4MjAwYiwgMHgwMDgwLCAweGUwMDAsIDB4ZTAwMCwgMHgyMDBiLAotCTB4MDAwMCwgMHgwMDM2LCAweDZiMDgsIDB4MDgwYywgMHgyNmZiLCAweDAwM2UsIDB4NjgxOCwgMHg2OTFjLAotCTB4NmEyMCwgMHg2YjI0LCAweDgwMDcsIDB4ODEwZiwgMHg4MjE3LCAweDgzMWYsIDB4NjAxNiwgMHg2MTFhLAotCTB4NjIxZSwgMHg2MzIyLCAweDZjMDQsIDB4ZDRmNCwgMHgwMTQ4LCAweDY4MzAsIDB4NjkzNCwgMHg2YTM4LAotCTB4NmIzYywgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDAwMTAsIDB4YTA4NCwgMHhmMGZmLAotCTB4NjAwNiwgMHg2MTBhLCAweDYyMGUsIDB4NjMxMiwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLAotCTB4MjBhOSwgMHgwMDA0LCAweDIwYTEsIDB4YWZhZCwgMHg0MGExLCAweDA4MGMsIDB4NjU5YywgMHg2OTA0LAotCTB4ZDFmYywgMHgwNTIwLCAweDAwYzYsIDB4MjAwOSwgMHgwMDAwLCAweDIwYTksIDB4MDAwMSwgMHg2YjcwLAotCTB4ZDM4NCwgMHgwMWM4LCAweDAwMjAsIDB4ODM5ZCwgMHgxMmIwLCAweDM1MDgsIDB4ODEwOSwgMHgwODBjLAotCTB4NWZhOSwgMHg2ODc4LCAweDYwMTYsIDB4Njg3NCwgMHgyMDA4LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LAotCTB4NjAwYSwgMHhhMTg0LCAweDAwZmYsIDB4NjAwNiwgMHg4MTA4LCAweDExMTgsIDB4NjAwMywgMHgwMDAzLAotCTB4MDAxMCwgMHg2MDAzLCAweDAwMDEsIDB4MWYwNCwgMHgzNmYzLCAweDAwY2UsIDB4MjA2OSwgMHhhZDUxLAotCTB4MjAwMSwgMHhhZjlkLCAweDZhODAsIDB4YTI5NCwgMHgwMDMwLCAweGEyOGUsIDB4MDAwMCwgMHgwMTcwLAotCTB4YTI4ZSwgMHgwMDEwLCAweDAxMTgsIDB4YTI4ZSwgMHgwMDIwLCAweDAxNDAsIDB4MjAwMywgMHhhYWFhLAotCTB4MDgwYywgMHgyNzQ0LCAweDIwMDEsIDB4YWY4ZSwgMHgyMTAyLCAweDAwMDgsIDB4MjEwMiwgMHgwMGM2LAotCTB4MjA2MSwgMHgwMTAwLCAweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDBjZSwgMHgwODBjLAotCTB4NTc0ZiwgMHgwMTI4LCAweDA4MGMsIDB4M2U1ZiwgMHgwMTEwLCAweDA4MGMsIDB4MjZjMCwgMHg2MGM0LAotCTB4YTAwNSwgMHgwMWIwLCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LCAweDM3M2YsIDB4MDBjMCwgMHgwODBjLAotCTB4NTc0ZiwgMHgxMTU4LCAweDIwMTEsIDB4NTY2ZSwgMHgwODBjLCAweDY1MGQsIDB4MjAwMSwgMHhhZjllLAotCTB4MjAwMywgMHgwMDAwLCAweDA4MGMsIDB4NTY5YSwgMHgwMDQwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMDI4LAotCTB4NjAwMywgMHgwMDA0LCAweDIwMDksIDB4Mzc1NSwgMHgwMDEwLCAweDA4MDQsIDB4MmRjYywgMHgyMDAxLAotCTB4MDEwMCwgMHgyMDA0LCAweGEwODIsIDB4MDAwNSwgMHgwMjU4LCAweDIwMDEsIDB4MDE3MCwgMHgyMDA0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDA0YywgMHgxMTE4LCAweDIwOTEsIDB4MzA5ZCwgMHgwODE3LAotCTB4MjA5MSwgMHgzMDFkLCAweDA4MTcsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDkwNCwgMHgyZGYxLAotCTB4MjA2OSwgMHhhZDUxLCAweDc4MzAsIDB4Njg0MiwgMHg3ODM0LCAweDY4NDYsIDB4NjgwNCwgMHhkMGZjLAotCTB4MDExOCwgMHgyMDA5LCAweDAwMzAsIDB4MDAxMCwgMHgyMDA5LCAweDAwMWMsIDB4MmQwMCwgMHg3YTJjLAotCTB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDgwNCwgMHgzYzQ5LCAweGEwMDYsIDB4MDgwYywgMHgyNmMwLAotCTB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHg1NzRmLCAweDExNzgsIDB4MjAwMSwgMHhhZjllLAotCTB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDgwYywgMHg1NzkzLCAweDA4MGMsIDB4NTY5YSwgMHgwMDIwLCAweDA4MGMsIDB4NDkxZiwgMHgwODBjLAotCTB4NDg1ZSwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHg1NzRmLAotCTB4MTExMCwgMHgwODA0LCAweDJkZjEsIDB4NjE4NCwgMHg4MWZmLCAweDAxOTgsIDB4NzAzZiwgMHgwMDAwLAotCTB4MjAwMSwgMHhiM2MwLCAweDIwMDksIDB4MDA0MCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgzYzQ5LCAweDcwMWIsIDB4MmRjYSwgMHgwMTJlLAotCTB4MDAwNSwgMHg3MDNmLCAweDAwMDEsIDB4MDBkNiwgMHgyMDY5LCAweGIzYzAsIDB4MjBhOSwgMHgwMDQwLAotCTB4MjBhMSwgMHhiM2MwLCAweDIwMTksIDB4ZmZmZiwgMHg0M2E0LCAweDY1NGMsIDB4YTU4OCwgMHgyYmU2LAotCTB4MjEwZCwgMHhhMThjLCAweDAwZmYsIDB4MjE2YSwgMHhhMDBlLCAweDIwMTEsIDB4MDAwMiwgMHgyMTAwLAotCTB4YTUwNiwgMHgwMWE4LCAweDA4MGMsIDB4NGNkYywgMHgxMTkwLCAweDYwMTQsIDB4ODIxYywgMHgwMjM4LAotCTB4YTM5OCwgMHhiM2MwLCAweGEwODUsIDB4ZmYwMCwgMHg4MDA3LCAweDIwMWEsIDB4MDAzOCwgMHhhMzk4LAotCTB4YjNjMCwgMHgyMzI0LCAweGE0YTQsIDB4ZmYwMCwgMHhhNDA1LCAweDIwMWEsIDB4ODIxMCwgMHg4MTA4LAotCTB4YTE4MiwgMHgwMDgwLCAweDEyMDgsIDB4MGMxOCwgMHg4MjAxLCAweDgwMDcsIDB4MmQwYywgMHhhMTA1LAotCTB4MjA2YSwgMHgwMGRlLCAweDIwYTksIDB4MDA0MCwgMHgyMGExLCAweGIzYzAsIDB4MjA5OSwgMHhiM2MwLAotCTB4MDgwYywgMHg0OGJlLCAweDA4MDQsIDB4MzdiMCwgMHgwODBjLCAweDNjMmEsIDB4MDkwNCwgMHgyZGY0LAotCTB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDBjZSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LAotCTB4MmRmMSwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwgMHhkMGI0LCAweDAxZjAsIDB4NjAwMCwgMHhkMDhjLAotCTB4MTFkOCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MTFhOCwgMHg2ODM3LAotCTB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHgwODBjLCAweDk3MGIsIDB4MTEyMCwgMHgyMDA5LAotCTB4MDAwMywgMHgwODA0LCAweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzgzMCwgMHgwMDA1LAotCTB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHgyMGE5LCAweDAwMmIsIDB4MmM5OCwgMHhhZGU4LAotCTB4MDAwMiwgMHgyZGEwLCAweDUzYTMsIDB4MjBhOSwgMHgwMDA0LCAweGFjODAsIDB4MDAwNiwgMHgyMDk4LAotCTB4YWQ4MCwgMHgwMDA2LCAweDIwYTAsIDB4MDgwYywgMHg0OGJlLCAweDIwYTksIDB4MDAwNCwgMHhhYzgwLAotCTB4MDAwYSwgMHgyMDk4LCAweGFkODAsIDB4MDAwYSwgMHgyMGEwLCAweDA4MGMsIDB4NDhiZSwgMHgyZDAwLAotCTB4MjAwOSwgMHgwMDJiLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDgwNCwgMHgzYzQ5LAotCTB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzFhLCAweDA5MDQsIDB4MmRmNCwgMHgwODBjLAotCTB4NGVhYiwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4NzgyOCwgMHhhMDhhLAotCTB4MTAwMCwgMHgxYTA0LCAweDJkZjQsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHgwODBjLAotCTB4NGYwZCwgMHgwOTA0LCAweDJkZjEsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4NGViZCwgMHg3OTI0LAotCTB4ODEwZiwgMHg3YTI4LCAweDAwMTEsIDB4MDgwNCwgMHgyZGNjLCAweGExODYsIDB4MDBmZiwgMHgwMTEwLAotCTB4MDA3MSwgMHgwMDYwLCAweDIwMjksIDB4MDA3ZSwgMHgyMDYxLCAweGFkMDAsIDB4NjQ0YywgMHgyNDAwLAotCTB4YTUwNiwgMHgwMTEwLCAweDI1MDgsIDB4MDAxOSwgMHg4NTI5LCAweDFlYzgsIDB4MDAwNSwgMHgwODBjLAotCTB4NGNkYywgMHgxMTM4LCAweDIyMDAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwgMHgwODBjLAotCTB4NjUxOSwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MxYSwgMHgwOTA0LAotCTB4MmRmNCwgMHgwODBjLCAweDRkOTYsIDB4MDkwNCwgMHgyZGYxLCAweDA4MGMsIDB4NGViNCwgMHgwODA0LAotCTB4MmRjYywgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwgMHgyZGY0LAotCTB4MDgwYywgMHg0ZDk2LCAweDA5MDQsIDB4MmRmMSwgMHgwODBjLCAweDRlYTIsIDB4MDgwNCwgMHgyZGNjLAotCTB4NjEwMCwgMHgwODA0LCAweDJkY2MsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHgyMDAxLAotCTB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgxOTA0LCAweDJkZjEsIDB4MDBkNiwgMHhhY2U4LAotCTB4MDAwYSwgMHg3OTI0LCAweGQxODQsIDB4MDExMCwgMHhhY2U4LCAweDAwMDYsIDB4NjgwYywgMHg4MDA3LAotCTB4NzgzZSwgMHg2ODA4LCAweDgwMDcsIDB4NzgzYSwgMHg2YjA0LCAweDgzMWYsIDB4NmEwMCwgMHg4MjE3LAotCTB4MDBkZSwgMHg2MTAwLCAweGExOGMsIDB4MDIwMCwgMHgwODA0LCAweDJkY2MsIDB4NzgyNCwgMHhhMDljLAotCTB4MDBmZiwgMHhhMzlhLCAweDAwMDMsIDB4MWEwNCwgMHgyZGYxLCAweDYyNGMsIDB4YTI5NCwgMHgwMGZmLAotCTB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTIwNiwgMHgxMTUwLCAweDIwMDEsIDB4YWQ0MCwgMHgyMDA5LAotCTB4MDAwYywgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MDQsIDB4M2M0OSwgMHg4MWZmLAotCTB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4NjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MTkwNCwgMHgyZGYxLCAweDAwYzYsIDB4MDgwYywgMHgzYzA1LAotCTB4MDBjZSwgMHgwOTA0LCAweDJkZjEsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLAotCTB4MDgwYywgMHg5NmI3LCAweDA5MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzOTE5LAotCTB4MDAwNSwgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgwOTA0LCAweDJkZjEsIDB4YWQ4MCwgMHgwMDBlLAotCTB4MjAwOSwgMHgwMDBjLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDgwNCwgMHgzYzQ5LAotCTB4YTAwNiwgMHgwODBjLCAweDI2YzAsIDB4NzgyNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMGZmLAotCTB4MDExOCwgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDU3NGYsIDB4MDExMCwgMHgwODBjLAotCTB4NDkxZiwgMHg3ODI4LCAweGEwOGEsIDB4MTAwMCwgMHgxYTA0LCAweDJkZjQsIDB4NzkyNCwgMHhhMThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweGExODYsIDB4MDBmZiwgMHgwMTM4LCAweGExODIsIDB4MDA3ZiwgMHgxYTA0LAotCTB4MmRmNCwgMHgyMTAwLCAweDA4MGMsIDB4MjY4YSwgMHgwMDI2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDYxLCAweGFmZGEsIDB4NjAxYiwgMHgwMDAwLCAweDYwMWYsIDB4MDAwMCwgMHgwODBjLAotCTB4NTc0ZiwgMHgxMTc4LCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhZDAwLAotCTB4MjAwMywgMHgwMDAxLCAweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDU3OTMsIDB4MDgwYywgMHg1NjlhLAotCTB4MDBhMCwgMHgyMDYxLCAweDAxMDAsIDB4MjAwMSwgMHhhZDE0LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLAotCTB4ODEwZiwgMHhhMTA1LCAweDYwNGEsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgyMDA5LAotCTB4MDAyZCwgMHgyMDExLCAweDQ4ODMsIDB4MDgwYywgMHg2NTkzLCAweDc5MjQsIDB4YTE4YywgMHhmZjAwLAotCTB4ODEwZiwgMHgwODBjLCAweDU3NGYsIDB4MTExMCwgMHgyMDA5LCAweDAwZmYsIDB4N2EyOCwgMHgwODBjLAotCTB4Mzg3ZCwgMHgwMTJlLCAweDAwY2UsIDB4MDAyZSwgMHgwODA0LCAweDJkY2MsIDB4NzkyNCwgMHhhMThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweDAwYzYsIDB4MDgwYywgMHg0YzgwLCAweDJjMDgsIDB4MDBjZSwgMHgxOTA0LAotCTB4MmRmNCwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LAotCTB4MmRmMSwgMHg2MGQwLCAweGQwYWMsIDB4MTEzMCwgMHhkMDljLCAweDExMjAsIDB4MjAwOSwgMHgwMDA1LAotCTB4MDgwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MwNSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LAotCTB4MmRmMSwgMHg3OTI0LCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDgwYywgMHgzYzQ2LAotCTB4NzAxYiwgMHgzOWJiLCAweDAwMDUsIDB4MjAwOSwgMHgwMDgwLCAweDA4MGMsIDB4NGNkYywgMHgxMTMwLAotCTB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAxMjAsIDB4MjAyMSwgMHg0MDBhLAotCTB4MDgwNCwgMHgyZGNlLCAweDAwZDYsIDB4YWRlOCwgMHgwMDBkLCAweDY5MDAsIDB4NmEwOCwgMHg2YjBjLAotCTB4NmMxMCwgMHg2ZDE0LCAweDZlMTgsIDB4NjgyMCwgMHhhMGJlLCAweDAxMDAsIDB4MDkwNCwgMHgzYTMyLAotCTB4YTBiZSwgMHgwMTEyLCAweDA5MDQsIDB4M2EzMiwgMHhhMGJlLCAweDAxMTMsIDB4MDkwNCwgMHgzYTMyLAotCTB4YTBiZSwgMHgwMTE0LCAweDA5MDQsIDB4M2EzMiwgMHhhMGJlLCAweDAxMTcsIDB4MDkwNCwgMHgzYTMyLAotCTB4YTBiZSwgMHgwMTFhLCAweDA5MDQsIDB4M2EzMiwgMHhhMGJlLCAweDAxMWMsIDB4MDkwNCwgMHgzYTMyLAotCTB4YTBiZSwgMHgwMTIxLCAweDA1YjAsIDB4YTBiZSwgMHgwMTMxLCAweDA1OTgsIDB4YTBiZSwgMHgwMTcxLAotCTB4MDVjOCwgMHhhMGJlLCAweDAxNzMsIDB4MDViMCwgMHhhMGJlLCAweDAxYTEsIDB4MTEyMCwgMHg2ODMwLAotCTB4ODAwNywgMHg2ODMyLCAweDA0YTgsIDB4YTBiZSwgMHgwMjEyLCAweDA1NDAsIDB4YTBiZSwgMHgwMjEzLAotCTB4MDUyOCwgMHhhMGJlLCAweDAyMTQsIDB4MDFiMCwgMHhhMGJlLCAweDAyMTcsIDB4MDE2OCwgMHhhMGJlLAotCTB4MDIxYSwgMHgxMTIwLCAweDY4MzgsIDB4ODAwNywgMHg2ODNhLCAweDAwZTAsIDB4YTBiZSwgMHgwMzAwLAotCTB4MDFjOCwgMHgwMGRlLCAweDA4MDQsIDB4MmRmNCwgMHhhZDgwLCAweDAwMTAsIDB4MjBhOSwgMHgwMDA3LAotCTB4MDgwYywgMHgzYTc4LCAweGFkODAsIDB4MDAwZSwgMHgyMGE5LCAweDAwMDEsIDB4MDgwYywgMHgzYTc4LAotCTB4MDA0OCwgMHhhZDgwLCAweDAwMGMsIDB4MDgwYywgMHgzYTg2LCAweDAwNTAsIDB4YWQ4MCwgMHgwMDBlLAotCTB4MDgwYywgMHgzYTg2LCAweGFkODAsIDB4MDAwYywgMHgyMGE5LCAweDAwMDEsIDB4MDgwYywgMHgzYTc4LAotCTB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDU2OCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHg2ODM3LAotCTB4MDExOSwgMHg2ODUzLCAweDAwMDAsIDB4Njg0ZiwgMHgwMDIwLCAweDY4NWIsIDB4MDAwMSwgMHg4MTBiLAotCTB4Njk3ZSwgMHg2ODgzLCAweDAwMDAsIDB4NmE4NiwgMHg2YjhhLCAweDZjOGUsIDB4NmQ5MiwgMHg2OTk2LAotCTB4Njg5YiwgMHgwMDAwLCAweDAwY2UsIDB4MDBkZSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLAotCTB4NjgzYSwgMHg2ODIzLCAweDAwMDAsIDB4NjgwNCwgMHgyMDY4LCAweDA4MGMsIDB4OTZkMywgMHgxMTIwLAotCTB4MjAwOSwgMHgwMDAzLCAweDA4MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzYTZmLAotCTB4MDAwNSwgMHgwMGNlLCAweDAwZGUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MmRmMSwgMHg2ODIwLAotCTB4YTA4NiwgMHg4MDAxLCAweDE5MDQsIDB4MmRjYywgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgyZGYxLAotCTB4MDAxNiwgMHgyMDA4LCAweDIwNDQsIDB4ODAwMCwgMHgyMDRjLCAweDgwMDAsIDB4MjkwYSwgMHg4MTA4LAotCTB4MjgwYSwgMHg4MTA4LCAweDFmMDQsIDB4M2E3YSwgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGE2LAotCTB4MDBiNiwgMHgyMDA4LCAweDIwNDQsIDB4ODAwMCwgMHgyMDRjLCAweDgwMDAsIDB4MjA1NCwgMHg4MDAwLAotCTB4MjA1YywgMHgyYjBhLCAweDgxMDgsIDB4MmEwYSwgMHg4MTA4LCAweDI5MGEsIDB4ODEwOCwgMHgyODBhLAotCTB4MDBiZSwgMHgwMGFlLCAweDAwMWUsIDB4MDAwNSwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLAotCTB4MDgwNCwgMHgyZGYxLCAweDc5MjQsIDB4MjE0MCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwgMHg2MGQwLAotCTB4ZDBhYywgMHgxMTIwLCAweGExODIsIDB4MDA4MCwgMHgwYTA0LCAweDJkZjQsIDB4YTE4MiwgMHgwMGZmLAotCTB4MWEwNCwgMHgyZGY0LCAweDdhMmMsIDB4N2IyOCwgMHg2MDZjLCAweGEzMDYsIDB4MTE0MCwgMHg2MDcwLAotCTB4YTI0ZSwgMHgwOTA0LCAweDJkZjQsIDB4YTljYywgMHhmZjAwLCAweDA5MDQsIDB4MmRmNCwgMHgwMGM2LAotCTB4MDgwYywgMHgzYjU4LCAweDJjNjgsIDB4MDBjZSwgMHgwNTM4LCAweGEwYzYsIDB4NDAwMCwgMHgxMTgwLAotCTB4MDBjNiwgMHgwMDA2LCAweDJkNjAsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4NGY2ZSwgMHgxMTA4LAotCTB4YzE4NSwgMHg2MDAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDAwMGUsIDB4MDBjZSwgMHgwMDg4LAotCTB4YTBjNiwgMHg0MDA3LCAweDExMTAsIDB4MjQwOCwgMHgwMDYwLCAweGEwYzYsIDB4NDAwOCwgMHgxMTE4LAotCTB4MjcwOCwgMHgyNjEwLCAweDAwMzAsIDB4YTBjNiwgMHg0MDA5LCAweDExMDgsIDB4MDAxMCwgMHgyMDAxLAotCTB4NDAwNiwgMHgyMDIwLCAweDA4MDQsIDB4MmRjZSwgMHgyZDAwLCAweDcwMjIsIDB4MDAxNiwgMHgwMGI2LAotCTB4MDBjNiwgMHgwMGU2LCAweDJjNzAsIDB4MDgwYywgMHg4MDIyLCAweDA1ZDgsIDB4MmQwMCwgMHg2MDFhLAotCTB4MDgwYywgMHg5OTU2LCAweDJlNTgsIDB4MDBlZSwgMHgwMGU2LCAweDAwYzYsIDB4MDgwYywgMHgzYzA1LAotCTB4MDBjZSwgMHgyYjcwLCAweDExNTAsIDB4MDgwYywgMHg4MDc4LCAweDAwZWUsIDB4MDBjZSwgMHgwMGJlLAotCTB4MDAxZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgyZGYxLCAweDY4MzcsIDB4MDAwMCwgMHg2ODNiLAotCTB4MDAwMCwgMHgyZDAwLCAweDYwMTIsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHhkODhjLAotCTB4MDEwOCwgMHhjMGY1LCAweDY4M2EsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgyYWQ5LAotCTB4MDEyZSwgMHg2MDFmLCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwgMHgyMDAxLAotCTB4MDAwMiwgMHgwODBjLCAweDRjMzAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LAotCTB4MDAwMSwgMHgwMGVlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDFlLCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLAotCTB4MDgwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDNiM2YsIDB4MDAwNSwgMHg2ODMwLAotCTB4YTA4NiwgMHgwMTAwLCAweDcwMjAsIDB4MjA2MCwgMHgxMTM4LCAweDIwMDksIDB4MDAwNCwgMHg2MjA0LAotCTB4YTI5NCwgMHgwMGZmLCAweDA4MDQsIDB4MmRmMSwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHg0ZjZlLAotCTB4MTEwOCwgMHhjMTg1LCAweDYwMDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDgwNCwgMHgyZGNjLAotCTB4MDBlNiwgMHgwMGQ2LCAweDIwMjksIDB4MDAwMCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLAotCTB4MDEzOCwgMHgyMDIxLCAweDAwMDAsIDB4MjBhOSwgMHgwMGZmLCAweDIwNzEsIDB4YWUzNCwgMHgwMDMwLAotCTB4MjAyMSwgMHgwMDgwLCAweDIwYTksIDB4MDA3ZiwgMHgyMDcxLCAweGFlYjQsIDB4MmUwNCwgMHhhMDA1LAotCTB4MTEzMCwgMHgyMTAwLCAweGE0MDYsIDB4MTU0OCwgMHgyNDI4LCAweGM1ZmQsIDB4MDQzMCwgMHgyMDY4LAotCTB4NmYxMCwgMHgyNzAwLCAweGEzMDYsIDB4MTFiMCwgMHg2ZTE0LCAweDI2MDAsIDB4YTIwNiwgMHgxMTkwLAotCTB4MjQwMCwgMHhhMTA2LCAweDExNjAsIDB4MmQ2MCwgMHhkODg0LCAweDA1NDAsIDB4NjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MTUxMCwgMHgyMDAxLCAweDQwMDAsIDB4MDQwMCwgMHgyMDAxLAotCTB4NDAwNywgMHgwMGU4LCAweDI0MDAsIDB4YTEwNiwgMHgxMTQwLCAweDZlMTQsIDB4ODdmZiwgMHgxMTEwLAotCTB4ODZmZiwgMHgwOWQwLCAweDIwMDEsIDB4NDAwOCwgMHgwMDkwLCAweDg0MjAsIDB4OGU3MCwgMHgxZjA0LAotCTB4M2I2ZSwgMHg4NWZmLCAweDExMzAsIDB4MjAwMSwgMHg0MDA5LCAweDAwNDgsIDB4MjAwMSwgMHgwMDAxLAotCTB4MDAzMCwgMHgwODBjLCAweDRjODAsIDB4MWRkMCwgMHg2MzEyLCAweDYyMTYsIDB4YTAwNiwgMHhhMDA1LAotCTB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzA1LAotCTB4MDkwNCwgMHgyZGYxLCAweDY4MzcsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHg3ODI0LAotCTB4YTAwNSwgMHgwOTA0LCAweDJkZjQsIDB4YTA5NiwgMHgwMGZmLCAweDAxMjAsIDB4YTA5MiwgMHgwMDA0LAotCTB4MWEwNCwgMHgyZGY0LCAweDIwMTAsIDB4MmQxOCwgMHgwODBjLCAweDJhOGMsIDB4MDkwNCwgMHgyZGYxLAotCTB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4M2JkNSwgMHgwMDA1LCAweDY4MzAsIDB4YTA4NiwgMHgwMTAwLAotCTB4MDkwNCwgMHgyZGYxLCAweDA4MDQsIDB4MmRjYywgMHg3OTI0LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4NjBkMCwgMHhkMGFjLCAweDExMjAsIDB4YTE4MiwgMHgwMDgwLCAweDBhMDQsIDB4MmRmNCwgMHhhMTgyLAotCTB4MDBmZiwgMHgxYTA0LCAweDJkZjQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5NWM2LAotCTB4MTE4OCwgMHhhMTkwLCAweGFlMzQsIDB4MjIwNCwgMHhhMDY1LCAweDAxNjAsIDB4MDgwYywgMHg0OTNhLAotCTB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhYywgMHgwMTEwLCAweDYwMTcsIDB4MDAwMCwgMHgwMTJlLAotCTB4MDgwNCwgMHgyZGNjLCAweDAxMmUsIDB4MDgwNCwgMHgyZGYxLCAweDA4MGMsIDB4MTVkOSwgMHgwMTg4LAotCTB4YTAwNiwgMHg2ODAyLCAweDcwMTAsIDB4YTAwNSwgMHgxMTIwLCAweDJkMDAsIDB4NzAxMiwgMHg3MDE2LAotCTB4MDAzMCwgMHg3MDE0LCAweDY4MDIsIDB4MjA2MCwgMHgyZDAwLCAweDYwMDYsIDB4NzAxNiwgMHhhZDgwLAotCTB4MDAwZCwgMHgwMDA1LCAweDc5MjQsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4MDgwYywgMHg0Y2RjLAotCTB4MTEzMCwgMHg3ZTI4LCAweGE2ODQsIDB4M2ZmZiwgMHhhMDgyLCAweDQwMDAsIDB4MDIwOCwgMHhhMDY2LAotCTB4OGNmZiwgMHgwMDA1LCAweDdlMjQsIDB4ODYwZiwgMHhhMThjLCAweDAwZmYsIDB4MDgwYywgMHg0Y2RjLAotCTB4MTEyOCwgMHhhNmI0LCAweDAwZmYsIDB4YTY4MiwgMHg0MDAwLCAweDAyMDgsIDB4YTA2NiwgMHg4Y2ZmLAotCTB4MDAwNSwgMHgwMDE2LCAweDcxMTAsIDB4ODFmZiwgMHgwMTI4LCAweDIxNjgsIDB4NjkwNCwgMHgwODBjLAotCTB4MTVmMCwgMHgwY2M4LCAweDcxMTIsIDB4NzExNiwgMHgwMDFlLCAweDAwMDUsIDB4MjAzMSwgMHgwMDAxLAotCTB4MDAxMCwgMHgyMDMxLCAweDAwMDAsIDB4MjA2MSwgMHhhZGQxLCAweDY2MDYsIDB4NjExMiwgMHg2MDBlLAotCTB4NjIyNiwgMHg2MzJhLCAweDY0MmUsIDB4NjUzMiwgMHgyYzEwLCAweDA4MGMsIDB4MTYyNCwgMHg3MDA3LAotCTB4MDAwMiwgMHg3MDFiLCAweDJkY2MsIDB4MDAwNSwgMHgwMGY2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA3OSwgMHgwMDAwLCAweDIwMDEsIDB4YWQ4ZiwgMHgyMDA0LCAweGEwMDUsIDB4MTE2OCwgMHgwZTA0LAotCTB4M2M3NCwgMHg3ODE4LCAweGQwODQsIDB4MTE0MCwgMHg3YTIyLCAweDdiMjYsIDB4N2MyYSwgMHg3ODFiLAotCTB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MDQwOCwgMHgwMDE2LCAweDAwYzYsIDB4MDBlNiwgMHgyMDcxLAotCTB4YWQ4MSwgMHg3MTM4LCAweGExODIsIDB4MDAxMCwgMHgwMjE4LCAweDcwMzAsIDB4MjA2MCwgMHgwMDc4LAotCTB4NzAzMCwgMHhhMGUwLCAweDAwMDQsIDB4YWM4MiwgMHhhZGQxLCAweDAyMTAsIDB4MjA2MSwgMHhhZDkxLAotCTB4MmMwMCwgMHg3MDMyLCAweDgxZmYsIDB4MTEwOCwgMHg3MDM2LCAweDgxMDgsIDB4NzEzYSwgMHgyMjYyLAotCTB4NjMwNiwgMHg2NDBhLCAweDAwZWUsIDB4MDBjZSwgMHgwMDFlLCAweDAxMmUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweGFkODEsIDB4NzAzOCwgMHhhMDA1LCAweDA1NzAsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwZTA0LCAweDNjY2IsIDB4MDBmNiwgMHgyMDc5LCAweDAwMDAsIDB4NzgxOCwgMHhkMDg0LAotCTB4MTUwOCwgMHgwMGM2LCAweDcwMzQsIDB4MjA2MCwgMHgyYzA0LCAweDc4MjIsIDB4NjAwNCwgMHg3ODI2LAotCTB4NjAwOCwgMHg3ODJhLCAweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4NzAzOCwgMHg4MDAxLAotCTB4NzAzYSwgMHhhMDA1LCAweDExMzAsIDB4NzAzMywgMHhhZDkxLCAweDcwMzcsIDB4YWQ5MSwgMHgwMGNlLAotCTB4MDA0OCwgMHhhYzgwLCAweDAwMDQsIDB4YTBmYSwgMHhhZGQxLCAweDAyMTAsIDB4MjAwMSwgMHhhZDkxLAotCTB4NzAzNiwgMHgwMGNlLCAweDAwZmUsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDAyNiwgMHgyMDAxLAotCTB4YWQ1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDEyMCwgMHgyMDExLCAweDgwMTQsIDB4MDgwYywgMHgzYzVjLAotCTB4MDAyZSwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjAzMCwgMHhjMDhkLCAweGMwODUsIDB4YzBhYywgMHg2MDMyLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTc4LAotCTB4MjAwMSwgMHhhZjllLCAweDIwMDMsIDB4MDAwMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwMywgMHgwMDAxLAotCTB4YTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4NTc5MywgMHgwODBjLCAweDU2OWEsIDB4MDAxMCwgMHgwODBjLAotCTB4NDg1ZSwgMHgwMTJlLCAweDA4MDQsIDB4MmRjYywgMHg3ODI0LCAweDIwMDgsIDB4YTE4YywgMHhmZmZkLAotCTB4MTEyOCwgMHg2MWRjLCAweGExMGQsIDB4NjFkZSwgMHgwODA0LCAweDJkY2MsIDB4MDgwNCwgMHgyZGY0LAotCTB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MTkwNCwgMHgyZGYxLAotCTB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhYywgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzJhLAotCTB4MDkwNCwgMHgyZGY0LCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgxMTIwLAotCTB4NzgyOCwgMHhhMDA1LCAweDA5MDQsIDB4MmRjYywgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwgMHgwMGNlLAotCTB4MDkwNCwgMHgyZGYxLCAweDY4MzcsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLAotCTB4NjgzYSwgMHgwODBjLCAweDk3OWMsIDB4MDkwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLAotCTB4M2QzYSwgMHgwMDA1LCAweDY4MzAsIDB4YTA4NiwgMHgwMTAwLCAweDA5MDQsIDB4MmRmMSwgMHgwODA0LAotCTB4MmRjYywgMHgyMDAxLCAweGFkMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTkwNCwgMHgyZGYxLAotCTB4N2YyNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MGMsIDB4M2MwNSwgMHgwOTA0LAotCTB4MmRmMSwgMHgyMDA5LCAweDAwMDAsIDB4MjAzMSwgMHgwMDAwLCAweDcwMjMsIDB4MDAwMCwgMHg3MDJmLAotCTB4MDAwMCwgMHhhZDgwLCAweDAwMDUsIDB4NzAyNiwgMHgyMGEwLCAweDA4MGMsIDB4NGNkYywgMHgxOTA0LAotCTB4M2RiNCwgMHg2MDA0LCAweGEwYzQsIDB4MDBmZiwgMHhhOGM2LCAweDAwMDYsIDB4MDEzMCwgMHhhMGM0LAotCTB4ZmYwMCwgMHhhOGM2LCAweDA2MDAsIDB4MTkwNCwgMHgzZGI0LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LAotCTB4ZDBhYywgMHgxMTI4LCAweDA4MGMsIDB4NGY2ZSwgMHgxMTEwLCAweGQ3OWMsIDB4MDVlOCwgMHhkNzk0LAotCTB4MTExMCwgMHhkNzg0LCAweDAxNTgsIDB4YWM4MCwgMHgwMDA2LCAweDIwOTgsIDB4MzQwMCwgMHgyMGE5LAotCTB4MDAwNCwgMHg1M2EzLCAweDA4MGMsIDB4M2E4NiwgMHhkNzk0LCAweDAxNDgsIDB4YWM4MCwgMHgwMDBhLAotCTB4MjA5OCwgMHgzNDAwLCAweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDA4MGMsIDB4M2E4NiwgMHgyMWEyLAotCTB4ZDc5NCwgMHgwMWQ4LCAweGFjODAsIDB4MDAwMCwgMHgyMDk4LCAweDk0YTAsIDB4MjBhOSwgMHgwMDAyLAotCTB4NTNhMywgMHhhYzgwLCAweDAwMDMsIDB4MjBhNiwgMHg5NGEwLCAweGFjODAsIDB4MDAwNCwgMHgyMDk4LAotCTB4MzQwMCwgMHgyMGE5LCAweDAwMDIsIDB4NTNhMywgMHgwODBjLCAweDNhNzgsIDB4YWM4MCwgMHgwMDI2LAotCTB4MjA5OCwgMHgyMGE5LCAweDAwMDIsIDB4NTNhMywgMHgwMDA4LCAweDk0YTAsIDB4ZDc5NCwgMHgwMTEwLAotCTB4YTZiMCwgMHgwMDBiLCAweGE2YjAsIDB4MDAwNSwgMHg4MTA4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LAotCTB4ZDBhYywgMHgwMTE4LCAweGExODYsIDB4MDEwMCwgMHgwMDQwLCAweGQ3OGMsIDB4MDEyMCwgMHhhMTg2LAotCTB4MDEwMCwgMHgwMTcwLCAweDAwMTgsIDB4YTE4NiwgMHgwMDdlLCAweDAxNTAsIDB4ZDc5NCwgMHgwMTE4LAotCTB4YTY4NiwgMHgwMDIwLCAweDAwMTAsIDB4YTY4NiwgMHgwMDI4LCAweDAxNTAsIDB4MDgwNCwgMHgzZDVkLAotCTB4ODZmZiwgMHgxMTIwLCAweDcxMjAsIDB4ODEwYiwgMHgwODA0LCAweDJkY2MsIDB4NzAyZiwgMHgwMDAxLAotCTB4NzExZSwgMHg3MDIwLCAweGE2MDAsIDB4NzAyMiwgMHg3NzJhLCAweDIwNjEsIDB4YWRkMSwgMHg2MDA3LAotCTB4MDAwMCwgMHg2NjEyLCAweDcwMjQsIDB4NjAwZSwgMHg2MjI2LCAweDYzMmEsIDB4NjQyZSwgMHg2NTMyLAotCTB4MmMxMCwgMHgwODBjLCAweDE2MjQsIDB4NzAwNywgMHgwMDAyLCAweDcwMWIsIDB4M2RmMCwgMHgwMDA1LAotCTB4NzAyYywgMHhhMDA1LCAweDExNzAsIDB4NzExYywgMHg3MDI0LCAweDIwYTAsIDB4NzcyOCwgMHgyMDMxLAotCTB4MDAwMCwgMHgyMDYxLCAweGFkZDEsIDB4NjIyNCwgMHg2MzI4LCAweDY0MmMsIDB4NjUzMCwgMHgwODA0LAotCTB4M2Q1ZCwgMHg3MTIwLCAweDgxMGIsIDB4MDgwNCwgMHgyZGNjLCAweDIwMjksIDB4MDA3ZSwgMHg3OTI0LAotCTB4N2EyOCwgMHg3YjJjLCAweDdjMzgsIDB4YTE4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwgMHgwMDIwLAotCTB4MGEwNCwgMHgyZGY0LCAweGE1MDIsIDB4MGEwNCwgMHgyZGY0LCAweGExODQsIDB4MDBmZiwgMHhhMGUyLAotCTB4MDAyMCwgMHgwYTA0LCAweDJkZjQsIDB4YTUwMiwgMHgwYTA0LCAweDJkZjQsIDB4YTI4NCwgMHhmZjAwLAotCTB4ODAwNywgMHhhMGUyLCAweDAwMjAsIDB4MGEwNCwgMHgyZGY0LCAweGE1MDIsIDB4MGEwNCwgMHgyZGY0LAotCTB4YTI4NCwgMHgwMGZmLCAweGEwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDJkZjQsIDB4YTUwMiwgMHgwYTA0LAotCTB4MmRmNCwgMHhhMzg0LCAweGZmMDAsIDB4ODAwNywgMHhhMGUyLCAweDAwMjAsIDB4MGEwNCwgMHgyZGY0LAotCTB4YTUwMiwgMHgwYTA0LCAweDJkZjQsIDB4YTM4NCwgMHgwMGZmLCAweGEwZTIsIDB4MDAyMCwgMHgwYTA0LAotCTB4MmRmNCwgMHhhNTAyLCAweDBhMDQsIDB4MmRmNCwgMHhhNDg0LCAweGZmMDAsIDB4ODAwNywgMHhhMGUyLAotCTB4MDAyMCwgMHgwYTA0LCAweDJkZjQsIDB4YTUwMiwgMHgwYTA0LCAweDJkZjQsIDB4YTQ4NCwgMHgwMGZmLAotCTB4YTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MmRmNCwgMHhhNTAyLCAweDBhMDQsIDB4MmRmNCwgMHgyMDYxLAotCTB4YWZhNiwgMHg2MTAyLCAweDYyMDYsIDB4NjMwYSwgMHg2NDBlLCAweDA4MDQsIDB4MmRjYywgMHgwMDA2LAotCTB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBjYywgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLAotCTB4YWQ3MSwgMHgyMDA0LCAweGQwYmMsIDB4MDAwZSwgMHgwMDA1LCAweDYxNjQsIDB4N2EyNCwgMHg2MzAwLAotCTB4ODJmZiwgMHgxMTE4LCAweDc5MjYsIDB4MDgwNCwgMHgyZGNjLCAweDgzZmYsIDB4MTkwNCwgMHgyZGY0LAotCTB4MjAwMSwgMHhmZmYwLCAweGEyMDAsIDB4MWEwNCwgMHgyZGY0LCAweDIwMTksIDB4ZmZmZiwgMHg2MDY4LAotCTB4YTMwMiwgMHhhMjAwLCAweDBhMDQsIDB4MmRmNCwgMHg3OTI2LCAweDYyNjYsIDB4MDgwNCwgMHgyZGNjLAotCTB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDE5MDQsIDB4MmRmMSwgMHg3YzI4LAotCTB4N2QyNCwgMHg3ZTM4LCAweDdmMmMsIDB4MDgwYywgMHgzYzA1LCAweDA5MDQsIDB4MmRmMSwgMHgyMDA5LAotCTB4MDAwMCwgMHgyMDE5LCAweDAwMDAsIDB4NzAyMywgMHgwMDAwLCAweDcwMmYsIDB4MDAwMCwgMHhhZDgwLAotCTB4MDAwMywgMHg3MDI2LCAweDIwYTAsIDB4YTFlMCwgMHhhZTM0LCAweDJjNjQsIDB4OGNmZiwgMHgwMWI4LAotCTB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAxMzAsIDB4NjAwNCwgMHhhMDg0LAotCTB4ZmYwMCwgMHhhMDg2LCAweDA2MDAsIDB4MTE1OCwgMHg2MDE0LCAweDIwYTIsIDB4OTRhMCwgMHg2MDEwLAotCTB4ODAwNywgMHhhMTA1LCAweDgwMDcsIDB4MjBhMiwgMHg5NGEwLCAweGEzOTgsIDB4MDAwMiwgMHg4MTA4LAotCTB4YTE4MiwgMHgwMGZmLCAweDAxMjAsIDB4YTM4NiwgMHgwMDJhLCAweDAxNDgsIDB4MDhlMCwgMHg4M2ZmLAotCTB4MTEyMCwgMHg3MTIwLCAweDgxMGMsIDB4MDgwNCwgMHgyZGNjLCAweDcwMmYsIDB4MDAwMSwgMHg3MTFlLAotCTB4NzAyMCwgMHhhMzAwLCAweDcwMjIsIDB4MjA2MSwgMHhhZGQxLCAweDYwMDcsIDB4MDAwMCwgMHg2MzEyLAotCTB4NzAyNCwgMHg2MDBlLCAweDY0MjYsIDB4NjUyYSwgMHg2NjJlLCAweDY3MzIsIDB4MmMxMCwgMHgwODBjLAotCTB4MTYyNCwgMHg3MDA3LCAweDAwMDIsIDB4NzAxYiwgMHgzZWU2LCAweDAwMDUsIDB4NzAyYywgMHhhMDA1LAotCTB4MTE2OCwgMHg3MTFjLCAweDcwMjQsIDB4MjBhMCwgMHgyMDE5LCAweDAwMDAsIDB4MjA2MSwgMHhhZGQxLAotCTB4NjQyNCwgMHg2NTI4LCAweDY2MmMsIDB4NjczMCwgMHgwODA0LCAweDNlYTMsIDB4NzEyMCwgMHg4MTBjLAotCTB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDYwZDAsIDB4ZDBhYywgMHgxMTE4LAotCTB4ZDA5YywgMHgwOTA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzA1LCAweDA5MDQsIDB4MmRmMSwgMHg3OTI0LAotCTB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwgMHgzZjExLAotCTB4MDAwNSwgMHgwMGQ2LCAweGFkZTgsIDB4MDAwZCwgMHg2ODI4LCAweGEwYmUsIDB4NzAwMCwgMHgwMTQ4LAotCTB4YTBiZSwgMHg3MTAwLCAweDAxMzAsIDB4YTBiZSwgMHg3MjAwLCAweDAxMTgsIDB4MDBkZSwgMHgwODA0LAotCTB4MmRmNCwgMHg2ODIwLCAweDY5MjQsIDB4MDgwYywgMHgyNjc2LCAweDE1MTAsIDB4MDgwYywgMHg0YzgwLAotCTB4MTFmOCwgMHg3MTIyLCAweDY2MTIsIDB4NjUxNiwgMHg2ZTE4LCAweDAwYzYsIDB4MDgwYywgMHgzYzA1LAotCTB4MDFiOCwgMHgwODBjLCAweDNjMDUsIDB4MDFhMCwgMHgwMGNlLCAweDAwZGUsIDB4NjgzNywgMHgwMDAwLAotCTB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NjgyMywgMHgwMDAwLCAweDY4MDQsIDB4MjA2OCwgMHgwODBjLAotCTB4OTZlZiwgMHgwOTA0LCAweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4M2Y0YiwgMHgwMDA1LAotCTB4MDBkZSwgMHgwODA0LCAweDJkZjEsIDB4NzEyMCwgMHgwODBjLCAweDJiYzksIDB4NjgyMCwgMHhhMDg2LAotCTB4ODAwMSwgMHgwOTA0LCAweDJkZjEsIDB4MmQwMCwgMHg3MDFlLCAweDY4MDQsIDB4YTA4MCwgMHgwMDAyLAotCTB4MDAwNiwgMHgyMGE5LCAweDAwMmEsIDB4MjA5OCwgMHgyMGEwLCAweDA4MGMsIDB4NDhiZSwgMHgwMDBlLAotCTB4YWRlOCwgMHgwMDBkLCAweDZhMDgsIDB4NmIwYywgMHg2YzEwLCAweDZkMTQsIDB4MjA2MSwgMHhhZGQxLAotCTB4NjAwNywgMHgwMDAwLCAweDZlMDAsIDB4NmYyOCwgMHhhN2M2LCAweDcwMDAsIDB4MTEwOCwgMHgwMDE4LAotCTB4YTdjNiwgMHg3MTAwLCAweDExNDAsIDB4YTZjMiwgMHgwMDA0LCAweDBhMDQsIDB4MmRmNCwgMHgyMDA5LAotCTB4MDAwNCwgMHgwODA0LCAweDNjNDksIDB4YTdjNiwgMHg3MjAwLCAweDE5MDQsIDB4MmRmNCwgMHhhNmMyLAotCTB4MDA1NCwgMHgwYTA0LCAweDJkZjQsIDB4NjAwZSwgMHg2MDEzLCAweDAwMmEsIDB4NjIyNiwgMHg2MzJhLAotCTB4NjQyZSwgMHg2NTMyLCAweDJjMTAsIDB4MDgwYywgMHgxNjI0LCAweDcwMDcsIDB4MDAwMiwgMHg3MDFiLAotCTB4M2Y5MiwgMHgwMDA1LCAweDcwMWMsIDB4MjA2OCwgMHg2ODA0LCAweGEwODAsIDB4MDAwMSwgMHgyMDA0LAotCTB4YTA4MCwgMHgwMDAyLCAweDAwMDYsIDB4MjBhOSwgMHgwMDJhLCAweDIwOTgsIDB4MjBhMCwgMHgwODBjLAotCTB4NDhiZSwgMHgwMDBlLCAweDIwMDksIDB4MDAyYSwgMHgyMDYxLCAweGFkZDEsIDB4NjIyNCwgMHg2MzI4LAotCTB4NjQyYywgMHg2NTMwLCAweDA4MDQsIDB4M2M0OSwgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwODBjLAotCTB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywgMHg0ZDk2LCAweDA5MDQsIDB4MmRmMSwgMHgwODBjLAotCTB4NGVjNiwgMHgwODA0LCAweDJkY2MsIDB4NzgyNCwgMHhkMDg0LCAweDA5MDQsIDB4MzgwNCwgMHgwODBjLAotCTB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDBjZSwgMHgxMTIwLAotCTB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MmRmMSwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LAotCTB4MDAwNiwgMHgwMTI4LCAweGEwOGUsIDB4MDAwNCwgMHgwMTEwLCAweGEwOGUsIDB4MDAwNSwgMHgxNTA4LAotCTB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBiNCwgMHgwOTA0LCAweDM4MzQsIDB4NjAwMCwgMHhkMDhjLAotCTB4MTkwNCwgMHgzODM0LCAweDY4MzcsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHgwODBjLAotCTB4OTcwYiwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDJkZjEsIDB4NzAwNywgMHgwMDAzLAotCTB4NzAxYiwgMHgzZmYzLCAweDAwMDUsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHgwODA0LAotCTB4MzgzNCwgMHgyMDA5LCAweGFkMzAsIDB4MjEwYywgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLAotCTB4MDgwNCwgMHgyZGYxLCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgwMTIwLAotCTB4MjAwOSwgMHgwMDA3LCAweDA4MDQsIDB4MmRmMSwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwgMHhkMGFjLAotCTB4MDEyMCwgMHgyMDA5LCAweDAwMDgsIDB4MDgwNCwgMHgyZGYxLCAweDYwOWMsIDB4ZDBhNCwgMHgxMTE4LAotCTB4ZDBhYywgMHgxOTA0LCAweDM4MzQsIDB4NjgzNywgMHgwMDAwLCAweDY4MzMsIDB4MDAwMCwgMHg2ODM4LAotCTB4YzBmZCwgMHg2ODNhLCAweDA4MGMsIDB4OTc5YywgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LAotCTB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHg0MDJlLCAweDAwMDUsIDB4NjgzMCwgMHhhMDg2LAotCTB4MDEwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzJhLAotCTB4MDkwNCwgMHgyZGY0LCAweDA4MDQsIDB4M2ZkOCwgMHg4MWZmLCAweDIwMDksIDB4MDAwMSwgMHgxOTA0LAotCTB4MmRmMSwgMHg2MDAwLCAweGEwODYsIDB4MDAwMywgMHgyMDA5LCAweDAwMDcsIDB4MTkwNCwgMHgyZGYxLAotCTB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhYywgMHgyMDA5LCAweDAwMDgsIDB4MTkwNCwgMHgyZGYxLAotCTB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LAotCTB4MDAwNiwgMHgyMDA5LCAweDAwMDksIDB4MTkwNCwgMHgyZGYxLCAweDAwYzYsIDB4MDgwYywgMHgzYzA1LAotCTB4MDBjZSwgMHgyMDA5LCAweDAwMDIsIDB4MDkwNCwgMHgyZGYxLCAweDY4MzcsIDB4MDAwMCwgMHg2ODMzLAotCTB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHg3OTI4LCAweGExOTQsIDB4ZmYwMCwgMHhhMThjLAotCTB4MDBmZiwgMHhhMDA2LCAweDgyZmYsIDB4MTEyOCwgMHhjMGVkLCAweDY5NTIsIDB4NzkyYywgMHg2OTU2LAotCTB4MDA0OCwgMHhhMjhlLCAweDAxMDAsIDB4MTkwNCwgMHgyZGY0LCAweGMwZTUsIDB4Njg1MywgMHgwMDAwLAotCTB4Njg1NywgMHgwMDAwLCAweDY4M2UsIDB4MDgwYywgMHg5OTU3LCAweDIwMDksIDB4MDAwMywgMHgwOTA0LAotCTB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHg0MDhlLCAweDAwMDUsIDB4NjgzMCwgMHhhMDg2LAotCTB4MDEwMCwgMHgyMDA5LCAweDAwMDQsIDB4MDkwNCwgMHgyZGYxLCAweDA4MDQsIDB4MmRjYywgMHg4MWZmLAotCTB4MjAwOSwgMHgwMDAxLCAweDE5MDQsIDB4MmRmMSwgMHg2MDAwLCAweGEwODYsIDB4MDAwMywgMHgyMDA5LAotCTB4MDAwNywgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHg2MDA0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgyMDA5LCAweDAwMDksIDB4MTkwNCwgMHgyZGYxLAotCTB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDBjZSwgMHgyMDA5LCAweDAwMDIsIDB4MDkwNCwgMHgyZGYxLAotCTB4YWQ4MCwgMHgwMDBmLCAweDIwMDksIDB4MDAwOCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LAotCTB4MDgwYywgMHgzYzQ2LCAweDcwMWIsIDB4NDBjNSwgMHgwMDA1LCAweDAwZDYsIDB4YWRlOCwgMHgwMDBmLAotCTB4NjgwMCwgMHhhMDg2LCAweDA1MDAsIDB4MTE0MCwgMHg2ODA0LCAweGEwMDUsIDB4MTEyOCwgMHg2ODA4LAotCTB4YTA4NCwgMHhmZjAwLCAweDExMDgsIDB4MDAxOCwgMHgwMGRlLCAweDE5MDQsIDB4MmRmNCwgMHgwMGRlLAotCTB4NjgzNywgMHgwMDAwLCAweDY4MzMsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHgwMGM2LAotCTB4MDgwYywgMHgzYzJhLCAweDExMTgsIDB4MDBjZSwgMHgwODA0LCAweDJkZjQsIDB4MDgwYywgMHg5OWE2LAotCTB4MjAwOSwgMHgwMDAzLCAweDAwY2UsIDB4MDkwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLAotCTB4NDBmMiwgMHgwMDA1LCAweDY4MzAsIDB4YTA4NiwgMHgwMTAwLCAweDIwMDksIDB4MDAwNCwgMHgwOTA0LAotCTB4MmRmMSwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LAotCTB4MmRmMSwgMHg2MDAwLCAweGEwODYsIDB4MDAwMywgMHgwMTIwLCAweDIwMDksIDB4MDAwNywgMHgwODA0LAotCTB4MmRmMSwgMHg3ZTI0LCAweDg2MGYsIDB4YTE4YywgMHgwMGZmLCAweGE2YjQsIDB4MDBmZiwgMHgwODBjLAotCTB4NGNkYywgMHgxOTA0LCAweDJkZjQsIDB4YTE4NiwgMHgwMDdmLCAweDAxNTAsIDB4NjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDksIDB4MDgwNCwgMHgyZGYxLAotCTB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDBjZSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LAotCTB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDgwYywgMHg5NzI2LAotCTB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLAotCTB4NDEzYSwgMHgwMDA1LCAweDY4MDgsIDB4ODAwNywgMHhhMDg2LCAweDAxMDAsIDB4MTEyMCwgMHgyMDA5LAotCTB4MDAwNCwgMHgwODA0LCAweDJkZjEsIDB4NjhiMCwgMHg2ODM2LCAweDY4MTAsIDB4ODAwNywgMHhhMDg0LAotCTB4MDBmZiwgMHg4MDhlLCAweDY4MTQsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4ODA4NiwgMHhhMDgwLAotCTB4MDAwMiwgMHhhMTA4LCAweGFkODAsIDB4MDAwNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LAotCTB4MDgwNCwgMHgzYzQ5LCAweDA4MGMsIDB4M2MwNSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LAotCTB4MmRmMSwgMHg3OTI0LCAweGExOTQsIDB4ZmYwMCwgMHhhMThjLCAweDAwZmYsIDB4ODIxNywgMHg4MmZmLAotCTB4MDExMCwgMHgwODA0LCAweDJkZjQsIDB4MjAwOSwgMHgwMDFhLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLAotCTB4N2QzOCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwgMHg0MTc2LCAweDAwMDUsIDB4YWQ4MCwgMHgwMDBkLAotCTB4MjA5OCwgMHgyMGE5LCAweDAwMWEsIDB4MjBhMSwgMHhhZmFkLCAweDUzYTMsIDB4MDgwNCwgMHgyZGNjLAotCTB4MDgwYywgMHgzYzA1LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MmRmMSwgMHg3OTI0LAotCTB4YTE5NCwgMHhmZjAwLCAweGExOGMsIDB4MDBmZiwgMHg4MjE3LCAweDgyZmYsIDB4MDExMCwgMHgwODA0LAotCTB4MmRmNCwgMHgyMDk5LCAweGFmYWQsIDB4MjBhMCwgMHgyMGE5LCAweDAwMWEsIDB4NTNhMywgMHgyMDA5LAotCTB4MDAxYSwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MDQsIDB4M2M0OSwgMHg3ODI0LAotCTB4YTA4YSwgMHgxMDAwLCAweDFhMDQsIDB4MmRmNCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg4MDAzLAotCTB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4MDBjNiwgMHgyMDYxLCAweGFmZGEsIDB4NjE0MiwgMHgwMGNlLAotCTB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4MDBjNiwgMHgwODBjLCAweDU3NGYsIDB4MTE4OCwgMHgyMDAxLAotCTB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwODBjLCAweDU3OTMsIDB4MDgwYywgMHg1NjlhLCAweDA4MGMsIDB4MTRmNiwgMHgwMDM4LAotCTB4MjA2MSwgMHhhZDAwLCAweDYwMzAsIDB4YzA5ZCwgMHg2MDMyLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGNlLAotCTB4MDAwNSwgMHgwMTI2LCAweDAwYzYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHhhZDAwLAotCTB4NjA0NCwgMHhkMGE0LCAweDExYjAsIDB4ZDA4NCwgMHgwMTE4LCAweDA4MGMsIDB4NDM0OCwgMHgwMDY4LAotCTB4ZDA4YywgMHgwMTE4LCAweDA4MGMsIDB4NDI2OSwgMHgwMDQwLCAweGQwOTQsIDB4MDExOCwgMHgwODBjLAotCTB4NDIzYSwgMHgwMDE4LCAweGQwOWMsIDB4MDEwOCwgMHgwMDYxLCAweDAwZWUsIDB4MDBjZSwgMHgwMTJlLAotCTB4MDAwNSwgMHgwMDE2LCAweDYxMjgsIDB4ZDE5YywgMHgxMTEwLCAweGMxOWQsIDB4NjEyYSwgMHgwMDFlLAotCTB4MGNhMCwgMHg2MjRjLCAweGEyODYsIDB4ZjBmMCwgMHgxMTUwLCAweDYwNDgsIDB4YTA4NiwgMHhmMGYwLAotCTB4MDEzMCwgMHg2MjRhLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4MDQ5MCwgMHhhMjk0LAotCTB4ZmYwMCwgMHhhMjk2LCAweGY3MDAsIDB4MDE3OCwgMHg3MTM0LCAweGQxYTQsIDB4MTE2MCwgMHg2MjQwLAotCTB4YTI5NSwgMHgwMTAwLCAweDYyNDIsIDB4YTI5NCwgMHgwMDEwLCAweDAxMjgsIDB4MjAwOSwgMHgwMGY3LAotCTB4MDgwYywgMHg0OGRlLCAweDAwZjAsIDB4NjA0MCwgMHhhMDg0LCAweDAwMTAsIDB4YTA4NSwgMHgwMDQwLAotCTB4NjA0MiwgMHg2MDQzLCAweDAwMDAsIDB4NzA3NywgMHgwMDAwLCAweDcwOTMsIDB4MDAwMSwgMHg3MGI3LAotCTB4MDAwMCwgMHg3MGQzLCAweDAwMDAsIDB4MjAwOSwgMHhiM2MwLCAweDIwMGIsIDB4MDAwMCwgMHg3MDg3LAotCTB4MDAwMCwgMHg3MDdiLCAweDAwMGEsIDB4MjAwOSwgMHgwMDBhLCAweDIwMTEsIDB4NDgxNCwgMHgwODBjLAotCTB4NjU5MywgMHgwMDA1LCAweDAxNTYsIDB4MjAwMSwgMHhhZDczLCAweDIwMDQsIDB4ZDA4YywgMHgwMTEwLAotCTB4NzA0ZiwgMHhmZmZmLCAweDcwNzgsIDB4YTAwNSwgMHgxNTEwLCAweDIwMTEsIDB4NDgxNCwgMHgwODBjLAotCTB4NjUwZCwgMHg2MDQwLCAweGEwOTQsIDB4MDAxMCwgMHhhMjg1LCAweDAwMjAsIDB4NjA0MiwgMHgyMGE5LAotCTB4MDBjOCwgMHg2MDQ0LCAweGQwOGMsIDB4MTE2OCwgMHgxZjA0LCAweDQyNTEsIDB4NjI0MiwgMHg3MDhiLAotCTB4MDAwMCwgMHg2MDQwLCAweGEwOTQsIDB4MDAxMCwgMHhhMjg1LCAweDAwODAsIDB4NjA0MiwgMHg2MjQyLAotCTB4MDAzMCwgMHg2MjQyLCAweDcwOGIsIDB4MDAwMCwgMHg3MDdmLCAweDAwMDAsIDB4MDAwMCwgMHgwMTVlLAotCTB4MDAwNSwgMHg3MDdjLCAweGEwOGEsIDB4MDAwMywgMHgxMjEwLCAweDAwMjMsIDB4MDAxMCwgMHgwODBjLAotCTB4MTRmNiwgMHgwMDA1LCAweDQyNzUsIDB4NDJjNSwgMHg0MzQ3LCAweDAwZjYsIDB4NzA3ZiwgMHgwMDAxLAotCTB4MjBlMSwgMHhhMDAwLCAweGUwMDAsIDB4MjBlMSwgMHg4NzAwLCAweDA4MGMsIDB4MjJmOCwgMHgyMGUxLAotCTB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA3OSwgMHhiMjAwLCAweDIwN2IsIDB4MjIwMCwgMHg3ODA3LAotCTB4MDBlZiwgMHg3ODBiLCAweDAwMDAsIDB4NzgwZiwgMHgwMGVmLCAweDc4MTMsIDB4MDEzOCwgMHg3ODE3LAotCTB4MDAwMCwgMHg3ODFiLCAweDAwMDAsIDB4NzgxZiwgMHgwMDAwLCAweDc4MjMsIDB4ZmZmZiwgMHg3ODI3LAotCTB4ZmZmZiwgMHg3ODJiLCAweDAwMDAsIDB4NzgyZiwgMHgwMDAwLCAweDIwNzksIDB4YjIwYywgMHgyMDdiLAotCTB4MTEwMSwgMHg3ODA3LCAweDAwMDAsIDB4MjA5OSwgMHhhZDA1LCAweDIwYTEsIDB4YjIwZSwgMHgyMGE5LAotCTB4MDAwNCwgMHg1M2EzLCAweDIwNzksIDB4YjIxMiwgMHgyMDdiLCAweDAwMDAsIDB4NzgwNywgMHgwMDAwLAotCTB4MjA5OSwgMHhiMjAwLCAweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMTQsIDB4NTNhNiwgMHg2MGMzLAotCTB4MDAwYywgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHg0ODQ1LCAweDAwZmUsIDB4NzA4MywgMHgwMDAwLAotCTB4NjA0MywgMHgwMDA4LCAweDYwNDMsIDB4MDAwMCwgMHgwMDA1LCAweDAwZDYsIDB4NzA4MCwgMHg3MDgzLAotCTB4MDAwMCwgMHhhMDI1LCAweDA5MDQsIDB4NDMyZiwgMHg2MDIwLCAweGQwYjQsIDB4MTkwNCwgMHg0MzJkLAotCTB4NzE5MCwgMHg4MWZmLCAweDA5MDQsIDB4NDMxZCwgMHhhNDg2LCAweDAwMGMsIDB4MTkwNCwgMHg0MzI4LAotCTB4YTQ4MCwgMHgwMDE4LCAweDgwMDQsIDB4MjBhOCwgMHgyMDExLCAweGIyODAsIDB4MjAxOSwgMHhiMjAwLAotCTB4MjIwYywgMHgyMzA0LCAweGExMDYsIDB4MTFiOCwgMHg4MjEwLCAweDgzMTgsIDB4MWYwNCwgMHg0MmUwLAotCTB4NjA0MywgMHgwMDA0LCAweDYwOGIsIDB4YmM5NCwgMHg2MDhmLCAweGYwZjAsIDB4NjA0MywgMHgwMDA2LAotCTB4NzA3ZiwgMHgwMDAyLCAweDcwOGIsIDB4MDAwMiwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg0ODFiLAotCTB4MDgwYywgMHg2NTkzLCAweDA0OTAsIDB4MjA2OSwgMHhiMjgwLCAweDY5MzAsIDB4YTE4ZSwgMHgxMTAxLAotCTB4MTUzOCwgMHg2ODM0LCAweGEwMDUsIDB4MTUyMCwgMHg2OTAwLCAweGExOGMsIDB4MDBmZiwgMHgxMTE4LAotCTB4NjgwNCwgMHhhMDA1LCAweDAxOTAsIDB4MjAxMSwgMHhiMjhlLCAweDIwMTksIDB4YWQwNSwgMHgyMGE5LAotCTB4MDAwNCwgMHgyMjBjLCAweDIzMDQsIDB4YTEwMiwgMHgwMjMwLCAweDExOTAsIDB4ODIxMCwgMHg4MzE4LAotCTB4MWYwNCwgMHg0MzExLCAweDAwNjgsIDB4NzA5MywgMHgwMDAwLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLAotCTB4NDAwMCwgMHgyMDk5LCAweGIyODAsIDB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAxNCwgMHg1M2E2LAotCTB4NjA0MywgMHgwMDA4LCAweDYwNDMsIDB4MDAwMCwgMHgwMDEwLCAweDAwZGUsIDB4MDAwNSwgMHg2MDQwLAotCTB4YTA4NSwgMHgwMTAwLCAweDYwNDIsIDB4NjAyMCwgMHhkMGI0LCAweDFkYjgsIDB4NjBjMywgMHgwMDBjLAotCTB4MjAxMSwgMHhhZmQxLCAweDIwMTMsIDB4MDAwMCwgMHg3MDgzLCAweDAwMDAsIDB4MjBlMSwgMHg5MDgwLAotCTB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwODBjLCAweDc4MmIsIDB4MGMzMCwgMHgwMDA1LAotCTB4NzA4OCwgMHhhMDhhLCAweDAwMWQsIDB4MTIxMCwgMHgwMDIzLCAweDAwMTAsIDB4MDgwYywgMHgxNGY2LAotCTB4MDAwNSwgMHg0MzdiLCAweDQzOGEsIDB4NDNiMiwgMHg0M2NiLCAweDQzZWYsIDB4NDQxNywgMHg0NDNiLAotCTB4NDQ2YywgMHg0NDkwLCAweDQ0YjgsIDB4NDRlZiwgMHg0NTE3LCAweDQ1MzMsIDB4NDU0OSwgMHg0NTY5LAotCTB4NDU3YywgMHg0NTg0LCAweDQ1YjEsIDB4NDVkNSwgMHg0NWZkLCAweDQ2MjEsIDB4NDY1MiwgMHg0NjhmLAotCTB4NDZiZSwgMHg0NmRhLCAweDQ3MTksIDB4NDczOSwgMHg0NzUyLCAweDQ3NTMsIDB4MDBjNiwgMHgyMDYxLAotCTB4YWQwMCwgMHg2MDAzLCAweDAwMDcsIDB4MjA2MSwgMHgwMTAwLCAweDYwMDQsIDB4YTA4NCwgMHhmZmY5LAotCTB4NjAwNiwgMHgwMGNlLCAweDAwMDUsIDB4NjA4YiwgMHhiYzk0LCAweDYwOGYsIDB4ZjBmMCwgMHg2MDQzLAotCTB4MDAwMiwgMHg3MDhiLCAweDAwMDEsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLAotCTB4NjU5MywgMHgwMDA1LCAweDAwZjYsIDB4NzA4MCwgMHhhMDg2LCAweDAwMTQsIDB4MTUwOCwgMHg2MDQzLAotCTB4MDAwMCwgMHg2MDIwLCAweGQwYjQsIDB4MTFlMCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LAotCTB4MTEwMiwgMHgxMWEwLCAweDc4MzQsIDB4YTAwNSwgMHgxMTg4LCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LAotCTB4NzBiNCwgMHhhMDA1LCAweDExMTAsIDB4NzBiNywgMHgwMDAxLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLAotCTB4NjUwZCwgMHg3MDhiLCAweDAwMTAsIDB4MDgwYywgMHg0NTg0LCAweDAwMTAsIDB4MDgwYywgMHg0ODVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDcwOGIsIDB4MDAwMywgMHg2MDQzLCAweDAwMDQsIDB4MjAxMSwgMHg0ODFiLAotCTB4MDgwYywgMHg2NTBkLCAweDA4MGMsIDB4NDhjNiwgMHgyMGEzLCAweDExMDIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhOSwgMHgwMDBhLCAweDIwYTMsIDB4MDAwMCwgMHgxZjA0LCAweDQzYzIsIDB4NjBjMywgMHgwMDE0LAotCTB4MDgwYywgMHg0ODQ1LCAweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFmMCwgMHgyMDExLAotCTB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4YTA4NiwgMHgwMDE0LCAweDExYTgsIDB4MjA3OSwgMHhiMjgwLAotCTB4N2EzMCwgMHhhMjk2LCAweDExMDIsIDB4MTE3OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE2MCwgMHg3YTM4LAotCTB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwgMHg3MDhiLAotCTB4MDAwNCwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDAwZmUsIDB4MDAwNSwgMHg3MDhiLAotCTB4MDAwNSwgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywgMHgxMTAzLCAweDIwYTMsIDB4MDAwMCwgMHgzNDMwLAotCTB4MjAxMSwgMHhiMjhlLCAweDA4MGMsIDB4NDkxNywgMHgxMTYwLCAweDcwNzQsIDB4YTAwNSwgMHgxMTQ4LAotCTB4NzE0YywgMHhhMTg2LCAweGZmZmYsIDB4MDEyOCwgMHgwODBjLCAweDQ3ZGYsIDB4MDExMCwgMHgwODBjLAotCTB4NDhmNSwgMHgyMGE5LCAweDAwMDgsIDB4MjI5OCwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDQ4NDUsIDB4MDAwNSwgMHgwMGY2LAotCTB4NzA4MCwgMHhhMDA1LCAweDAxZjAsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwgMHhhMDg2LAotCTB4MDAxNCwgMHgxMWE4LCAweDIwNzksIDB4YjI4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwMywgMHgxMTc4LAotCTB4NzgzNCwgMHhhMDA1LCAweDExNjAsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBiNCwgMHhhMDA1LAotCTB4MTExMCwgMHg3MGI3LCAweDAwMDEsIDB4NzA4YiwgMHgwMDA2LCAweDAwMjksIDB4MDAxMCwgMHgwODBjLAotCTB4NDg1ZSwgMHgwMGZlLCAweDAwMDUsIDB4NzA4YiwgMHgwMDA3LCAweDA4MGMsIDB4NDhjNiwgMHgyMGEzLAotCTB4MTEwNCwgMHgyMGEzLCAweDAwMDAsIDB4MzQzMCwgMHgyMDExLCAweGIyOGUsIDB4MDgwYywgMHg0OTE3LAotCTB4MTFhOCwgMHg3MDc0LCAweGEwMDUsIDB4MTE5MCwgMHg3MTU0LCAweGExODYsIDB4ZmZmZiwgMHgwMTcwLAotCTB4YTE4MCwgMHgyYmU2LCAweDIwMGQsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4MDgwYywgMHg0N2RmLAotCTB4MDEyOCwgMHgwODBjLCAweDNlNjYsIDB4MDExMCwgMHgwODBjLCAweDI2YzAsIDB4MjBhOSwgMHgwMDA4LAotCTB4MjI5OCwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLAotCTB4MDAxNCwgMHgwODBjLCAweDQ4NDUsIDB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTAwNSwgMHgwMWYwLAotCTB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwgMHhhMDg2LCAweDAwMTQsIDB4MTFhOCwgMHgyMDc5LAotCTB4YjI4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNCwgMHgxMTc4LCAweDc4MzQsIDB4YTAwNSwgMHgxMTYwLAotCTB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBiNCwgMHhhMDA1LCAweDExMTAsIDB4NzBiNywgMHgwMDAxLAotCTB4NzA4YiwgMHgwMDA4LCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBmZSwgMHgwMDA1LAotCTB4NzA4YiwgMHgwMDA5LCAweDA4MGMsIDB4NDhjNiwgMHgyMGEzLCAweDExMDUsIDB4MjBhMywgMHgwMTAwLAotCTB4MzQzMCwgMHgwODBjLCAweDQ5MTcsIDB4MTE1MCwgMHg3MDc0LCAweGEwMDUsIDB4MTEzOCwgMHgwODBjLAotCTB4NDc1NCwgMHgxMTcwLCAweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDI2YzAsIDB4MjBhOSwgMHgwMDA4LAotCTB4MjA5OSwgMHhiMjhlLCAweDI2YTAsIDB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NDg0NSwgMHgwMDEwLCAweDA4MGMsIDB4NDM2ZSwgMHgwMDA1LAotCTB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDU4OCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywgMHg2NTBkLAotCTB4YTA4NiwgMHgwMDE0LCAweDE1NDAsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA1LAotCTB4MTUxMCwgMHg3ODM0LCAweDIwMTEsIDB4MDEwMCwgMHhhMjFlLCAweDExNjAsIDB4N2EzOCwgMHhkMmZjLAotCTB4MDEyOCwgMHg3MGI0LCAweGEwMDUsIDB4MTExMCwgMHg3MGI3LCAweDAwMDEsIDB4NzA4YiwgMHgwMDBhLAotCTB4MDBiMSwgMHgwMDk4LCAweGEwMDUsIDB4MTE3OCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGI0LAotCTB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwgMHg3MDg3LCAweDAwMDAsIDB4NzA4YiwgMHgwMDBlLAotCTB4MDgwYywgMHg0NTY5LCAweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDAwZmUsIDB4MDAwNSwgMHg3MDhiLAotCTB4MDAwYiwgMHgyMDExLCAweGIyMGUsIDB4MjJhMCwgMHgyMGE5LCAweDAwNDAsIDB4MjAxOSwgMHhmZmZmLAotCTB4NDNhNCwgMHgyMGE5LCAweDAwMDIsIDB4MjAwOSwgMHgwMDAwLCAweDQxYTQsIDB4MDgwYywgMHg0OGM2LAotCTB4MjBhMywgMHgxMTA2LCAweDIwYTMsIDB4MDAwMCwgMHgwODBjLCAweDQ5MTcsIDB4MDExOCwgMHgyMDEzLAotCTB4MDAwMCwgMHgwMDIwLCAweDcwNTAsIDB4YTA4NSwgMHgwMTAwLCAweDIwMTIsIDB4MjI5OCwgMHgyMGE5LAotCTB4MDA0MiwgMHg1M2E2LCAweDYwYzMsIDB4MDA4NCwgMHgwODBjLCAweDQ4NDUsIDB4MDAwNSwgMHgwMGY2LAotCTB4NzA4MCwgMHhhMDA1LCAweDAxYjAsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwgMHhhMDg2LAotCTB4MDA4NCwgMHgxMTY4LCAweDIwNzksIDB4YjI4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNiwgMHgxMTM4LAotCTB4NzgzNCwgMHhhMDA1LCAweDExMjAsIDB4NzA4YiwgMHgwMDBjLCAweDAwMjksIDB4MDAxMCwgMHgwODBjLAotCTB4NDg1ZSwgMHgwMGZlLCAweDAwMDUsIDB4NzA4YiwgMHgwMDBkLCAweDA4MGMsIDB4NDhjNiwgMHgyMGEzLAotCTB4MTEwNywgMHgyMGEzLCAweDAwMDAsIDB4MjA5OSwgMHhiMjhlLCAweDIwYTksIDB4MDA0MCwgMHg1M2E2LAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg0ODQ1LAotCTB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTAwNSwgMHgwMWQwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLAotCTB4NjUwZCwgMHhhMDg2LCAweDAwODQsIDB4MTE4OCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LAotCTB4MTEwNywgMHgxMTU4LCAweDc4MzQsIDB4YTAwNSwgMHgxMTQwLCAweDcwODcsIDB4MDAwMSwgMHgwODBjLAotCTB4NDhiOCwgMHg3MDhiLCAweDAwMGUsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLAotCTB4MDAwNSwgMHg3MDhiLCAweDAwMGYsIDB4NzA4MywgMHgwMDAwLCAweDYwOGIsIDB4YmM4NSwgMHg2MDhmLAotCTB4YjViNSwgMHg2MDQzLCAweDAwMDUsIDB4NjA0MywgMHgwMDA0LCAweDIwMDksIDB4MDdkMCwgMHgyMDExLAotCTB4NDgxYiwgMHgwODBjLCAweDY1MDEsIDB4MDAwNSwgMHg3MDgwLCAweGEwMDUsIDB4MDEyMCwgMHgyMDExLAotCTB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4MDAwNSwgMHg3MDhiLCAweDAwMTEsIDB4MDgwYywgMHg0OTE3LAotCTB4MTE4OCwgMHg3MTZjLCAweDgxZmYsIDB4MDE3MCwgMHgyMDA5LCAweDAwMDAsIDB4NzA3MCwgMHhhMDg0LAotCTB4MDBmZiwgMHgwODBjLCAweDI2NzYsIDB4YTE4NiwgMHgwMDgwLCAweDAxMjAsIDB4MjAxMSwgMHhiMjhlLAotCTB4MDgwYywgMHg0N2RmLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwgMHhiMjgwLAotCTB4MjBhMSwgMHgwMjBiLCAweDc0ODAsIDB4YTQ4MCwgMHgwMDE4LCAweGEwODAsIDB4MDAwNywgMHhhMDg0LAotCTB4MDNmOCwgMHg4MDA0LCAweDIwYTgsIDB4NTNhNiwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg0ODQ1LAotCTB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTAwNSwgMHgwMWYwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLAotCTB4NjUwZCwgMHhhMDg2LCAweDAwMTQsIDB4MTFhOCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LAotCTB4MTEwMywgMHgxMTc4LCAweDc4MzQsIDB4YTAwNSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LAotCTB4NzBiNCwgMHhhMDA1LCAweDExMTAsIDB4NzBiNywgMHgwMDAxLCAweDcwOGIsIDB4MDAxMiwgMHgwMDI5LAotCTB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBmZSwgMHgwMDA1LCAweDcwOGIsIDB4MDAxMywgMHgwODBjLAotCTB4NDhkMiwgMHgyMGEzLCAweDExMDMsIDB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjAxMSwgMHhiMjhlLAotCTB4MDgwYywgMHg0OTE3LCAweDExNjAsIDB4NzA3NCwgMHhhMDA1LCAweDExNDgsIDB4NzE0YywgMHhhMTg2LAotCTB4ZmZmZiwgMHgwMTI4LCAweDA4MGMsIDB4NDdkZiwgMHgwMTEwLCAweDA4MGMsIDB4NDhmNSwgMHgyMGE5LAotCTB4MDAwOCwgMHgyMjk4LCAweDI2YTAsIDB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NDg0NSwgMHgwMDA1LCAweDAwZjYsIDB4NzA4MCwgMHhhMDA1LAotCTB4MDFmMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweGEwODYsIDB4MDAxNCwgMHgxMWE4LAotCTB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA0LCAweDExNzgsIDB4NzgzNCwgMHhhMDA1LAotCTB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGI0LCAweGEwMDUsIDB4MTExMCwgMHg3MGI3LAotCTB4MDAwMSwgMHg3MDhiLCAweDAwMTQsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLAotCTB4MDAwNSwgMHg3MDhiLCAweDAwMTUsIDB4MDgwYywgMHg0OGQyLCAweDIwYTMsIDB4MTEwNCwgMHgyMGEzLAotCTB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YjI4ZSwgMHgwODBjLCAweDQ5MTcsIDB4MTFhOCwgMHg3MDc0LAotCTB4YTAwNSwgMHgxMTkwLCAweDcxNTQsIDB4YTE4NiwgMHhmZmZmLCAweDAxNzAsIDB4YTE4MCwgMHgyYmU2LAotCTB4MjAwZCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwgMHgwODBjLCAweDQ3ZGYsIDB4MDEyOCwgMHgwODBjLAotCTB4M2U2NiwgMHgwMTEwLCAweDA4MGMsIDB4MjZjMCwgMHgyMGE5LCAweDAwMDgsIDB4MjI5OCwgMHgyNmEwLAotCTB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLAotCTB4NDg0NSwgMHgwMDA1LCAweDAwZjYsIDB4NzA4MCwgMHhhMDA1LCAweDA1YjgsIDB4MjAxMSwgMHg0ODFiLAotCTB4MDgwYywgMHg2NTBkLCAweGEwODYsIDB4MDAxNCwgMHgxNTcwLCAweDIwNzksIDB4YjI4MCwgMHg3YTMwLAotCTB4YTI5NiwgMHgxMTA1LCAweDE1NDAsIDB4NzgzNCwgMHgyMDExLCAweDAxMDAsIDB4YTIxZSwgMHgxMTQ4LAotCTB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBiNCwgMHhhMDA1LCAweDExMTAsIDB4NzBiNywgMHgwMDAxLAotCTB4MDA2MCwgMHhhMDA1LCAweDExYzAsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBiNCwgMHhhMDA1LAotCTB4MTExMCwgMHg3MGI3LCAweDAwMDEsIDB4NzA4NywgMHgwMDAwLCAweDdhMzgsIDB4ZDJmNCwgMHgwMTM4LAotCTB4MjAwMSwgMHhhZDczLCAweDIwMDQsIDB4ZDBhNCwgMHgxMTEwLCAweDcwZDMsIDB4MDAwOCwgMHg3MDhiLAotCTB4MDAxNiwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDAwZmUsIDB4MDAwNSwgMHgyMGUxLAotCTB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwgMHhiMjgwLCAweDIwYTEsIDB4MDIwYiwgMHgyMGE5LAotCTB4MDAwZSwgMHg1M2E2LCAweDM0MzAsIDB4MjAxMSwgMHhiMjhlLCAweDcwOGIsIDB4MDAxNywgMHgwODBjLAotCTB4NDkxNywgMHgxMTUwLCAweDcwNzQsIDB4YTAwNSwgMHgxMTM4LCAweDA4MGMsIDB4NDc1NCwgMHgxMTcwLAotCTB4YTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4MjZjMCwgMHgyMGE5LCAweDAwMDgsIDB4MjA5OSwgMHhiMjhlLAotCTB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LAotCTB4MDgwYywgMHg0ODQ1LCAweDAwMTAsIDB4MDgwYywgMHg0MzZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDgwLAotCTB4YTAwNSwgMHgwMWIwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4YTA4NiwgMHgwMDg0LAotCTB4MTE2OCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDYsIDB4MTEzOCwgMHg3ODM0LAotCTB4YTAwNSwgMHgxMTIwLCAweDcwOGIsIDB4MDAxOCwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg0ODVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDcwOGIsIDB4MDAxOSwgMHgwODBjLCAweDQ4ZDIsIDB4MjBhMywgMHgxMTA2LAotCTB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjA5OSwgMHhiMjhlLCAweDIwMzksIDB4YjIwZSwgMHgyN2EwLAotCTB4MjBhOSwgMHgwMDQwLCAweDUzYTMsIDB4MDgwYywgMHg0OTE3LCAweDExZTgsIDB4MjcyOCwgMHgyNTE0LAotCTB4ODIwNywgMHhhMDg0LCAweDAwZmYsIDB4ODAwMCwgMHgyMDE4LCAweGEyOTQsIDB4MDBmZiwgMHg4MDA3LAotCTB4YTIwNSwgMHgyMDJhLCAweDcwNTAsIDB4MjMxMCwgMHg4MjE0LCAweGEyYTAsIDB4YjIwZSwgMHgyNDE0LAotCTB4YTM4YywgMHgwMDAxLCAweDAxMTgsIDB4YTI5NCwgMHhmZjAwLCAweDAwMTgsIDB4YTI5NCwgMHgwMGZmLAotCTB4ODAwNywgMHhhMjE1LCAweDIyMjIsIDB4Mjc5OCwgMHgyNmEwLCAweDIwYTksIDB4MDA0MCwgMHg1M2E2LAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg0ODQ1LAotCTB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTAwNSwgMHgwMWQwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLAotCTB4NjUwZCwgMHhhMDg2LCAweDAwODQsIDB4MTE4OCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LAotCTB4MTEwNywgMHgxMTU4LCAweDc4MzQsIDB4YTAwNSwgMHgxMTQwLCAweDcwODcsIDB4MDAwMSwgMHgwODBjLAotCTB4NDhiOCwgMHg3MDhiLCAweDAwMWEsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLAotCTB4MDAwNSwgMHg3MDhiLCAweDAwMWIsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgyMDk5LAotCTB4YjI4MCwgMHgyMGExLCAweDAyMGIsIDB4NzQ4MCwgMHhhNDgwLCAweDAwMTgsIDB4YTA4MCwgMHgwMDA3LAotCTB4YTA4NCwgMHgwM2Y4LCAweDgwMDQsIDB4MjBhOCwgMHg1M2E2LCAweDYwYzMsIDB4MDA4NCwgMHgwODBjLAotCTB4NDg0NSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwgMHgwMDg2LCAweDAwOTYsIDB4MjAyOSwgMHhhZDUyLAotCTB4MjUyYywgMHgyMGE5LCAweDAwMDgsIDB4MjA0MSwgMHhiMjBlLCAweDI4YTAsIDB4MjA5OSwgMHhiMjhlLAotCTB4NTNhMywgMHgyMGE5LCAweDAwMDgsIDB4MjAxMSwgMHgwMDA3LCAweGQ1ZDQsIDB4MDExMCwgMHgyMDExLAotCTB4MDAwMCwgMHgyODAwLCAweGEyMDAsIDB4MjAwYywgMHhhMWE2LCAweGZmZmYsIDB4MTE0OCwgMHhkNWQ0LAotCTB4MDExMCwgMHg4MjEwLCAweDAwMDgsIDB4ODIxMSwgMHgxZjA0LCAweDQ3NjksIDB4MDgwNCwgMHg0N2Q3LAotCTB4ODJmZiwgMHgxMTYwLCAweGQ1ZDQsIDB4MDEyMCwgMHhhMWE2LCAweDNmZmYsIDB4MGQ5MCwgMHgwMDIwLAotCTB4YTFhNiwgMHgzZmZmLCAweDA5MDQsIDB4NDdkNywgMHhhMThkLCAweGMwMDAsIDB4MjBhOSwgMHgwMDEwLAotCTB4MjAxOSwgMHgwMDAxLCAweGQ1ZDQsIDB4MDExMCwgMHgyMDE5LCAweDAwMTAsIDB4MjEyMCwgMHhkNWQ0LAotCTB4MDExMCwgMHg4NDIzLCAweDAwMDgsIDB4ODQyNCwgMHgxMjQwLCAweGQ1ZDQsIDB4MDExMCwgMHg4MzE5LAotCTB4MDAwOCwgMHg4MzE4LCAweDFmMDQsIDB4NDc4ZiwgMHgwNGQwLCAweDIzYTgsIDB4MjAyMSwgMHgwMDAxLAotCTB4ODQyNiwgMHg4NDI1LCAweDFmMDQsIDB4NDdhMSwgMHgyMzI4LCAweDg1MjksIDB4YTJiZSwgMHgwMDA3LAotCTB4MDE1OCwgMHgwMDA2LCAweDIwMzksIDB4MDAwNywgMHgyMjAwLCAweGE3M2EsIDB4MDAwZSwgMHgyN2E4LAotCTB4YTVhOCwgMHgwMDEwLCAweDFmMDQsIDB4NDdiMCwgMHg3NTRlLCAweGE1YzgsIDB4MmJlNiwgMHgyOTJkLAotCTB4YTVhYywgMHgwMGZmLCAweDc1NzIsIDB4NjUzMiwgMHg2NTM2LCAweDAwMTYsIDB4MjUwOCwgMHgwODBjLAotCTB4MjZhMCwgMHgwMDFlLCAweDYwZTcsIDB4MDAwMCwgMHg2NWVhLCAweDIwMTgsIDB4MjMwNCwgMHhhNDA1LAotCTB4MjAxYSwgMHg3MDc3LCAweDAwMDEsIDB4MjZhMCwgMHgyODk4LCAweDIwYTksIDB4MDAwOCwgMHg1M2E2LAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAyOCwgMHhhMDA2LAotCTB4MDAxOCwgMHhhMDA2LCAweDA4MGMsIDB4MTRmNiwgMHgwMDllLCAweDAwOGUsIDB4MDAwNSwgMHgyMTE4LAotCTB4MjAyMSwgMHgwMDAwLCAweDIwMDEsIDB4MDAwNywgMHhhMzlhLCAweDAwMTAsIDB4MDIxOCwgMHg4NDIwLAotCTB4ODAwMSwgMHgwY2QwLCAweDIxMTgsIDB4ODRmZiwgMHgwMTIwLCAweGEzOWEsIDB4MDAxMCwgMHg4NDIxLAotCTB4MWRlMCwgMHgyMDIxLCAweDAwMDEsIDB4ODNmZiwgMHgwMTE4LCAweDg0MjMsIDB4ODMxOSwgMHgxZGU4LAotCTB4YTIzOCwgMHgyNzA0LCAweGE0MmMsIDB4MTFiOCwgMHhhNDA1LCAweDIwM2EsIDB4NzE0ZSwgMHhhMWEwLAotCTB4MmJlNiwgMHgyNDJkLCAweGE1YWMsIDB4MDBmZiwgMHg3NTcyLCAweDY1MzIsIDB4NjUzNiwgMHgwMDE2LAotCTB4MjUwOCwgMHgwODBjLCAweDI2YTAsIDB4MDAxZSwgMHg2MGU3LCAweDAwMDAsIDB4NjVlYSwgMHg3MDc3LAotCTB4MDAwMSwgMHhhMDg0LCAweDAwMDAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwgMHg3MDdiLAotCTB4MDAwMCwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgyMDcxLAotCTB4MDE0MCwgMHgwODBjLCAweDc4MzQsIDB4NzAwNCwgMHhhMDg0LCAweDQwMDAsIDB4MDEyMCwgMHg3MDAzLAotCTB4MTAwMCwgMHg3MDAzLCAweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZDIyLAotCTB4MjA3MywgMHgwMDAwLCAweDc4NDAsIDB4MDAyNiwgMHgwMDE2LCAweDIwMDksIDB4MDBmNywgMHgwODBjLAotCTB4NDhkZSwgMHgwMDFlLCAweGEwOTQsIDB4MDAxMCwgMHhhMjg1LCAweDAwODAsIDB4Nzg0MiwgMHg3YTQyLAotCTB4MDAyZSwgMHgwMTJlLCAweDAwZmUsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjAxMSwgMHhhZmQxLCAweDIwMTMsIDB4MDAwMCwgMHg3MDgzLCAweDAwMDAsIDB4MDEyZSwgMHgyMGUxLAotCTB4OTA4MCwgMHg2MGEzLCAweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDA4MGMsIDB4NzgyYiwgMHgyMDA5LAotCTB4MDdkMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywgMHg2NTkzLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LAotCTB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg0OGRlLAotCTB4MjA2MSwgMHhhZmRhLCAweDYwMWIsIDB4MDAwMCwgMHg2MDFmLCAweDAwMDAsIDB4MjA2MSwgMHhhZDAwLAotCTB4NjAwMywgMHgwMDAxLCAweDIwNjEsIDB4MDEwMCwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLAotCTB4MjAwOSwgMHgwMDJkLCAweDIwMTEsIDB4NDg4MywgMHgwODBjLCAweDY1MDEsIDB4MDEyZSwgMHgwMGNlLAotCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA3MSwgMHgwMTAwLCAweDA4MGMsIDB4NzgzNCwgMHgyMDcxLCAweDAxNDAsIDB4NzAwNCwgMHhhMDg0LAotCTB4NDAwMCwgMHgwMTIwLCAweDcwMDMsIDB4MTAwMCwgMHg3MDAzLCAweDAwMDAsIDB4MDgwYywgMHg1NzU3LAotCTB4MDFhOCwgMHgwODBjLCAweDU3NzUsIDB4MTE5MCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywgMHhhYWFhLAotCTB4MDAxNiwgMHgwODBjLCAweDI3NDQsIDB4MjAwMSwgMHhhZjhlLCAweDIxMDIsIDB4MDAxZSwgMHgyMDAxLAotCTB4YWY5ZSwgMHgyMDAzLCAweDAwMDAsIDB4MDgwYywgMHg1NjlhLCAweDAwMzAsIDB4MjAwMSwgMHgwMDAxLAotCTB4MDgwYywgMHgyNjFlLCAweDA4MGMsIDB4NDg1ZSwgMHgwMTJlLCAweDAwMGUsIDB4MDBlZSwgMHgwMDA1LAotCTB4MjBhOSwgMHgwMDQwLCAweDIwYTEsIDB4YjNjMCwgMHgyMDk5LCAweGIyOGUsIDB4MzMwNCwgMHg4MDA3LAotCTB4MjBhMiwgMHg5Mzk4LCAweDk0YTAsIDB4MWYwNCwgMHg0OGJlLCAweDAwMDUsIDB4MjBlMSwgMHg5MDgwLAotCTB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YjIwMCwgMHgyMGExLCAweDAyMGIsIDB4MjBhOSwgMHgwMDBjLAotCTB4NTNhNiwgMHgwMDA1LCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwgMHhiMjgwLAotCTB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAwYywgMHg1M2E2LCAweDAwMDUsIDB4MDBjNiwgMHgwMDA2LAotCTB4MjA2MSwgMHgwMTAwLCAweDgxMGYsIDB4MjAwMSwgMHhhZDMwLCAweDIwMDQsIDB4YTAwNSwgMHgxMTM4LAotCTB4MjAwMSwgMHhhZDE0LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGExMDUsIDB4MDAxMCwgMHhhMTg1LAotCTB4MDBmNywgMHg2MDRhLCAweDAwMGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMTYsIDB4MDA0NiwgMHgyMDAxLAotCTB4YWQ1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDE1OCwgMHhhMDA2LCAweDIwMjAsIDB4MjAwOSwgMHgwMDJhLAotCTB4MDgwYywgMHhhOTZjLCAweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGMxOTUsIDB4MjEwMiwgMHgyMDE5LAotCTB4MDAyYSwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgyYWFjLCAweDAwNGUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDgwYywgMHg0ODVlLCAweDcwOGIsIDB4MDAwMCwgMHg3MDgzLCAweDAwMDAsIDB4MDAwNSwgMHgwMDA2LAotCTB4MjAwMSwgMHhhZDBjLCAweDIwMDQsIDB4ZDA5YywgMHgwMTAwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LAotCTB4MDAxNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDAxLCAweDAxMDEsIDB4MjAwYywgMHhhMThkLAotCTB4MDAwNiwgMHgyMTAyLCAweDAxMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDE1NiwgMHgyMGE5LAotCTB4MDBmZiwgMHgyMDA5LCAweGFlMzQsIDB4YTAwNiwgMHgyMDBhLCAweDgxMDgsIDB4MWYwNCwgMHg0OTM0LAotCTB4MDE1ZSwgMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgyMDY5LAotCTB4YWQ1MSwgMHhhMDA2LCAweDYwMDIsIDB4NjAwNywgMHgwNzA3LCAweDYwMGEsIDB4NjAwZSwgMHg2MDEyLAotCTB4YTE5OCwgMHgyYmU2LCAweDIzMWQsIDB4YTM5YywgMHgwMGZmLCAweDYzMTYsIDB4MjBhOSwgMHgwMDA0LAotCTB4YWM5OCwgMHgwMDA2LCAweDIzYTAsIDB4NDBhNCwgMHgyMGE5LCAweDAwMDQsIDB4YWM5OCwgMHgwMDBhLAotCTB4MjNhMCwgMHg0MGE0LCAweDYwM2UsIDB4NjA0MiwgMHg2MDRlLCAweDYwNTIsIDB4NjA1NiwgMHg2MDVhLAotCTB4NjA1ZSwgMHg2MDYyLCAweDYwNjYsIDB4NjA2YSwgMHg2MDZlLCAweDYwNzIsIDB4NjA3NiwgMHg2MDdhLAotCTB4NjA3ZSwgMHg2MDgyLCAweDYwODYsIDB4NjA4YSwgMHg2MDhlLCAweDYwOTIsIDB4NjA5NiwgMHg2MDlhLAotCTB4NjA5ZSwgMHg2MGFlLCAweDYxYTIsIDB4MDBkNiwgMHg2MGE0LCAweGEwNmQsIDB4MDExMCwgMHgwODBjLAotCTB4MTVmMCwgMHg2MGE3LCAweDAwMDAsIDB4NjBhOCwgMHhhMDZkLCAweDAxMTAsIDB4MDgwYywgMHgxNWYwLAotCTB4NjBhYiwgMHgwMDAwLCAweDAwZGUsIDB4YTAwNiwgMHg2MDRhLCAweDY4MTAsIDB4NjAzYSwgMHg2ODBjLAotCTB4NjA0NiwgMHg2ODE0LCAweGEwODQsIDB4MDBmZiwgMHg2MDQyLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLAotCTB4MDAzZSwgMHgwMGRlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4Njk0NCwgMHg2ZTQ4LAotCTB4YTY4NCwgMHgzZmZmLCAweGEwODIsIDB4NDAwMCwgMHgxYTA0LCAweDRhNDksIDB4YTE4YywgMHhmZjAwLAotCTB4ODEwZiwgMHhhMTgyLCAweDAwZmYsIDB4MWEwNCwgMHg0YTRlLCAweDIwMDEsIDB4YWQwYywgMHgyMDA0LAotCTB4YTA4NCwgMHgwMDAzLCAweDAxYzAsIDB4MjAwMSwgMHhhZDBjLCAweDIwMDQsIDB4ZDA4NCwgMHgxOTA0LAotCTB4NGEzMSwgMHhhMTg4LCAweGFlMzQsIDB4MjEwNCwgMHhhMDY1LCAweDA5MDQsIDB4NGEzMSwgMHg2MDA0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwOGUsIDB4MDAwNiwgMHgxOTA0LCAweDRhMzEsIDB4NjAwMCwgMHhkMGM0LAotCTB4MDkwNCwgMHg0YTMxLCAweDAwNjgsIDB4YTE4OCwgMHhhZTM0LCAweDIxMDQsIDB4YTA2NSwgMHgwOTA0LAotCTB4NGExNSwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDhlLCAweDAwMDYsIDB4MTkwNCwgMHg0YTFhLAotCTB4NjBhNCwgMHhhMDBkLCAweDAxMTgsIDB4MDgwYywgMHg0ZWY5LCAweDA1ZDAsIDB4NjBhOCwgMHhhMDBkLAotCTB4MDE4OCwgMHgwODBjLCAweDRmNDMsIDB4MTE3MCwgMHg2OTRjLCAweGQxZmMsIDB4MTExOCwgMHgwODBjLAotCTB4NGMxMSwgMHgwNDQ4LCAweDA4MGMsIDB4NGJkMywgMHg2OTRjLCAweGQxZWMsIDB4MTUyMCwgMHgwODBjLAotCTB4NGRlZCwgMHgwNDA4LCAweDY5NGMsIDB4YTE4NCwgMHhhMDAwLCAweDAxNzgsIDB4ZDFlYywgMHgwMTQwLAotCTB4ZDFmYywgMHgwMTE4LCAweDA4MGMsIDB4NGRmYywgMHgwMDI4LCAweDA4MGMsIDB4NGRmYywgMHgwMDI4LAotCTB4ZDFmYywgMHgwMTE4LCAweDA4MGMsIDB4NGJkMywgMHgwMDcwLCAweDYwNTAsIDB4YTAwZCwgMHgwMTMwLAotCTB4MmQwMCwgMHgyMDBhLCAweDY4MDMsIDB4MDAwMCwgMHg2MDUyLCAweDAwMjgsIDB4MmQwMCwgMHg2MDUyLAotCTB4NjA0ZSwgMHg2ODAzLCAweDAwMDAsIDB4MDgwYywgMHg2N2M1LCAweGEwMDYsIDB4MDEyZSwgMHgwMDA1LAotCTB4MjAwMSwgMHgwMDA1LCAweDIwMDksIDB4MDAwMCwgMHgwNGU4LCAweDIwMDEsIDB4MDAyOCwgMHgyMDA5LAotCTB4MDAwMCwgMHgwNGMwLCAweGEwODIsIDB4MDAwNiwgMHgxMmEwLCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LAotCTB4ZDBhYywgMHgxMTYwLCAweDYwYTAsIDB4ZDBiYywgMHgxMTQ4LCAweDYxMDAsIDB4ZDFmYywgMHgwOTA0LAotCTB4NDlkMCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgxMDAwLCAweDA0MjAsIDB4MjAwMSwgMHgwMDI4LAotCTB4MDBhOCwgMHgyMDA5LCAweGFkMGMsIDB4MjEwYywgMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LAotCTB4MDA2OCwgMHhkMTg0LCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwNDAsIDB4MjAwMSwgMHgwMDI5LAotCTB4NjEwMCwgMHhkMWZjLCAweDAxMTgsIDB4MjAwOSwgMHgxMDAwLCAweDAwNjAsIDB4MjAwOSwgMHgwMDAwLAotCTB4MDA0OCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweDAwMjAsIDB4MjAwMSwgMHgwMDI5LAotCTB4MjAwOSwgMHgwMDAwLCAweGEwMDUsIDB4MDEyZSwgMHgwMDA1LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHg2ODQ0LCAweDgwMDcsIDB4YTA4NCwgMHgwMGZmLCAweDIwMDgsIDB4YTE4MiwgMHgwMGZmLAotCTB4MWEwNCwgMHg0YWE4LCAweGExODgsIDB4YWUzNCwgMHgyMTA0LCAweGEwNjUsIDB4MDFjMCwgMHg2MDA0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwOGUsIDB4MDAwNiwgMHgxMWE4LCAweDJjNzAsIDB4MDgwYywgMHg4MDIyLAotCTB4MDVlOCwgMHgyZTAwLCAweDYwMWEsIDB4MmQwMCwgMHg2MDEyLCAweDYwMGIsIDB4ZmZmZiwgMHg2MDFmLAotCTB4MDAwYSwgMHgyMDA5LCAweDAwMDMsIDB4MDgwYywgMHg4MGE3LCAweGEwMDYsIDB4MDQ2MCwgMHgyMDAxLAotCTB4MDAyOCwgMHgwNDQwLCAweGEwODIsIDB4MDAwNiwgMHgxMjk4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LAotCTB4ZDBhYywgMHgxMTU4LCAweDYwYTAsIDB4ZDBiYywgMHgxMTQwLCAweDYxMDAsIDB4ZDFmYywgMHgwOWU4LAotCTB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwMGE4LCAweDIwMDEsIDB4MDAyOCwgMHgwMDkwLAotCTB4MjAwOSwgMHhhZDBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDUwLAotCTB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDI4LCAweDIwMDEsIDB4MDAyOSwgMHgwMDEwLAotCTB4MjAwMSwgMHgwMDI5LCAweGEwMDUsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MjAwMSwgMHgwMDJjLAotCTB4MGNjOCwgMHgwMGY2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAxMSwgMHgwMDAwLAotCTB4MjA3OSwgMHhhZDAwLCAweDY5NDQsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4MiwgMHgwMGZmLAotCTB4MWEwNCwgMHg0Yjc3LCAweDIwMDEsIDB4YWQwYywgMHgyMDA0LCAweGEwODQsIDB4MDAwMywgMHgxOTA0LAotCTB4NGI2NSwgMHgwODBjLCAweDRjZGMsIDB4MTE4MCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDgyLAotCTB4MDAwNiwgMHgxMjUwLCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MTkwNCwgMHg0YjYwLAotCTB4NjBhMCwgMHhkMGJjLCAweDE5MDQsIDB4NGI2MCwgMHg2ODY0LCAweGEwYzYsIDB4MDA2ZiwgMHgwMTE4LAotCTB4MjAwOCwgMHgwODA0LCAweDRiMjgsIDB4Njk2OCwgMHgyMTQwLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4NzhkMCwgMHhkMGFjLCAweDExMTgsIDB4YTE4MiwgMHgwMDgwLCAweDA2ZDAsIDB4YTE4MiwgMHgwMGZmLAotCTB4MTZiOCwgMHg2YTcwLCAweDZiNmMsIDB4Nzg2YywgMHhhMzA2LCAweDExNjAsIDB4Nzg3MCwgMHhhMjRlLAotCTB4MTExOCwgMHgyMjA4LCAweDIzMTAsIDB4MDQ2MCwgMHhhOWNjLCAweGZmMDAsIDB4MTExOCwgMHgyMjA4LAotCTB4MjMxMCwgMHgwNDMwLCAweDA4MGMsIDB4M2I1OCwgMHgyYzcwLCAweDA1NTAsIDB4MjAwOSwgMHgwMDAwLAotCTB4MjAxMSwgMHgwMDAwLCAweGEwYzYsIDB4NDAwMCwgMHgxMTYwLCAweDAwMDYsIDB4MmU2MCwgMHgwODBjLAotCTB4NGY2ZSwgMHgxMTA4LCAweGMxODUsIDB4NzAwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwMDBlLAotCTB4MDA4OCwgMHhhMGM2LCAweDQwMDcsIDB4MTExMCwgMHgyNDA4LCAweDAwNjAsIDB4YTBjNiwgMHg0MDA4LAotCTB4MTExOCwgMHgyNzA4LCAweDI2MTAsIDB4MDAzMCwgMHhhMGM2LCAweDQwMDksIDB4MTEwOCwgMHgwMDEwLAotCTB4MjAwMSwgMHg0MDA2LCAweDY4NjYsIDB4Njk2YSwgMHg2YTZlLCAweDIwMDEsIDB4MDAzMCwgMHgwNDU4LAotCTB4MDgwYywgMHg4MDIyLCAweDExMzgsIDB4MjAwMSwgMHg0MDA1LCAweDIwMDksIDB4MDAwMywgMHgyMDExLAotCTB4MDAwMCwgMHgwYzgwLCAweDJlMDAsIDB4NjAxYSwgMHgwODBjLCAweDk5NTYsIDB4MmQwMCwgMHg2MDEyLAotCTB4NjAxZiwgMHgwMDAxLCAweGEwMDYsIDB4ZDg4YywgMHgwMTEwLCAweDIwMDEsIDB4NDAwMCwgMHg2ODNhLAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgyYWQ5LCAweDAxMmUsIDB4MjAwMSwgMHgwMDAwLAotCTB4MDgwYywgMHg0YzFlLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDRjMzAsIDB4MjAwOSwgMHgwMDAyLAotCTB4MDgwYywgMHg4MGE3LCAweGEwMDYsIDB4YTAwNSwgMHgwMTJlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MjAwMSwgMHgwMDI4LCAweDIwMDksIDB4MDAwMCwgMHgwY2IwLCAweDIwMDksIDB4YWQwYywgMHgyMTBjLAotCTB4ZDE4YywgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDM4LCAweGQxODQsIDB4MDExOCwgMHgyMDAxLAotCTB4MDAwNCwgMHgwMDEwLCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDAwMDAsIDB4MGMyMCwgMHgyMDAxLAotCTB4MDAyOSwgMHgyMDA5LCAweDAwMDAsIDB4MDhmOCwgMHg2OTQ0LCAweDZlNDgsIDB4YTY4NCwgMHgzZmZmLAotCTB4YTA4MiwgMHg0MDAwLCAweDE2YjgsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4MiwgMHgwMGZmLAotCTB4MTJlMCwgMHhhMTg4LCAweGFlMzQsIDB4MjEwNCwgMHhhMDY1LCAweDAxYjgsIDB4NjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDhlLCAweDAwMDYsIDB4MTFiMCwgMHg2ODRjLCAweGQwZWMsIDB4MDEyMCwgMHgwODBjLAotCTB4NGRmYywgMHgwNGM5LCAweDAwMzAsIDB4MDRiOSwgMHg2ODRjLCAweGQwZmMsIDB4MDExMCwgMHgwODBjLAotCTB4NGRlZCwgMHgwODBjLCAweDRlM2EsIDB4YTAwNiwgMHgwMGM4LCAweDIwMDEsIDB4MDAyOCwgMHgyMDA5LAotCTB4MDAwMCwgMHgwMGEwLCAweGEwODIsIDB4MDAwNiwgMHgxMjQwLCAweDYxMDAsIDB4ZDFmYywgMHgwZDIwLAotCTB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwMDQ4LCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LAotCTB4MDAwMCwgMHgwMDIwLCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDAwMDAsIDB4YTAwNSwgMHgwMDA1LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjA1MCwgMHhhMDBkLCAweDAxMzgsIDB4MmQwMCwgMHgyMDBhLAotCTB4NjgwMywgMHgwMDAwLCAweDYwNTIsIDB4MDEyZSwgMHgwMDA1LCAweDJkMDAsIDB4NjA1MiwgMHg2MDRlLAotCTB4NjgwMywgMHgwMDAwLCAweDBjYzAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjA0YywgMHhhMDA1LAotCTB4MDE3MCwgMHgwMGU2LCAweDIwNzEsIDB4YWZjNywgMHg3MDA0LCAweGEwODYsIDB4MDAwMiwgMHgwMTY4LAotCTB4MDBlZSwgMHg2MDRjLCAweDY4MDIsIDB4MmQwMCwgMHg2MDRlLCAweDAxMmUsIDB4MDAwNSwgMHgyZDAwLAotCTB4NjA1MiwgMHg2MDRlLCAweDY4MDMsIDB4MDAwMCwgMHgwY2MwLCAweDcwMWMsIDB4YWMwNiwgMHgxZDgwLAotCTB4NjA0YywgMHgyMDcwLCAweDcwMDAsIDB4NjgwMiwgMHgyZDAwLCAweDcwMDIsIDB4MDBlZSwgMHgwMTJlLAotCTB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDRjLCAweGEwNmQsIDB4MDEzMCwgMHg2ODAwLAotCTB4YTAwNSwgMHgxMTA4LCAweDYwNTIsIDB4NjA0ZSwgMHhhZDA1LCAweDAxMmUsIDB4MDAwNSwgMHg2MDRjLAotCTB4YTA2ZCwgMHgwMTMwLCAweDY4MDAsIDB4YTAwNSwgMHgxMTA4LCAweDYwNTIsIDB4NjA0ZSwgMHhhZDA1LAotCTB4MDAwNSwgMHg2ODAzLCAweDAwMDAsIDB4NjA4NCwgMHhhMDBkLCAweDAxMjAsIDB4MmQwMCwgMHgyMDBhLAotCTB4NjA4NiwgMHgwMDA1LCAweDJkMDAsIDB4NjA4NiwgMHg2MDgyLCAweDBjZDgsIDB4MDEyNiwgMHgwMGM2LAotCTB4MDAyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIxOCwgMHgyMjYwLCAweDYyMDAsIDB4YTAwNSwgMHgwMTEwLAotCTB4YzI4NSwgMHgwMDA4LCAweGMyODQsIDB4NjIwMiwgMHgwMDJlLCAweDAwY2UsIDB4MDEyZSwgMHgwMDA1LAotCTB4MDEyNiwgMHgwMGM2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjE4LCAweDIyNjAsIDB4NjIwNCwgMHgwMDA2LAotCTB4YTA4NiwgMHgwMDA2LCAweDExODAsIDB4NjA5YywgMHhkMGFjLCAweDAxNjgsIDB4MjAwMSwgMHhhZDUyLAotCTB4MjAwNCwgMHhkMGE0LCAweDAxNDAsIDB4YTI4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTA4NiwgMHgwMDA3LAotCTB4MTExMCwgMHgyMDExLCAweDA2MDAsIDB4MDAwZSwgMHhhMjk0LCAweGZmMDAsIDB4YTIxNSwgMHg2MjA2LAotCTB4MDAwNiwgMHhhMDg2LCAweDAwMDYsIDB4MTEyOCwgMHg2MjkwLCAweDgyZmYsIDB4MTExMCwgMHgwODBjLAotCTB4MTRmNiwgMHgwMDBlLCAweDAwY2UsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsIDB4MDBjNiwgMHgyMDkxLAotCTB4ODAwMCwgMHg2MjE4LCAweDIyNjAsIDB4NjIwNCwgMHgwMDA2LCAweGEwODYsIDB4MDAwNiwgMHgxMTc4LAotCTB4NjA5YywgMHhkMGE0LCAweDAxNjAsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhYywgMHgxMTM4LAotCTB4YTI4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNywgMHgxMTEwLCAweDIwMTEsIDB4MDAwNiwgMHgwMDBlLAotCTB4YTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4YTIxNSwgMHg2MjA2LCAweDAwY2UsIDB4MDEyZSwgMHgwMDA1LAotCTB4MDAyNiwgMHhhMTgyLCAweDAwZmYsIDB4MDIxOCwgMHhhMDg1LCAweDAwMDEsIDB4MDBiMCwgMHhhMTkwLAotCTB4YWUzNCwgMHgyMjA0LCAweGEwNjUsIDB4MTE4MCwgMHgwMDE2LCAweDAwZDYsIDB4MDgwYywgMHgxNWMwLAotCTB4MmQ2MCwgMHgwMGRlLCAweDAwMWUsIDB4MGQ4MCwgMHgyYzAwLCAweDIwMTIsIDB4NjBhNywgMHgwMDAwLAotCTB4NjBhYiwgMHgwMDAwLCAweDA4MGMsIDB4NDkzYSwgMHhhMDA2LCAweDAwMmUsIDB4MDAwNSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwMjYsIDB4YTE4MiwgMHgwMGZmLCAweDAyMTgsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDQ4MCwgMHgwMGQ2LCAweGExOTAsIDB4YWUzNCwgMHgyMjA0LCAweGEwNmQsIDB4MDU0MCwgMHgyMDEzLAotCTB4MDAwMCwgMHgwMGQ2LCAweDAwYzYsIDB4MmQ2MCwgMHg2MGE0LCAweGEwNmQsIDB4MDExMCwgMHgwODBjLAotCTB4MTVmMCwgMHg2MGE4LCAweGEwNmQsIDB4MDExMCwgMHgwODBjLCAweDE1ZjAsIDB4MDBjZSwgMHgwMGRlLAotCTB4MDBkNiwgMHgwMGM2LCAweDY4YWMsIDB4MjA2MCwgMHg4Y2ZmLCAweDAxNjgsIDB4NjAwYywgMHgwMDA2LAotCTB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTEwLCAweDA4MGMsIDB4MTYwMCwgMHgwODBjLAotCTB4ODA3OCwgMHgwMGNlLCAweDBjODgsIDB4MDBjZSwgMHgwMGRlLCAweDA4MGMsIDB4MTVmMCwgMHgwMGRlLAotCTB4YTAwNiwgMHgwMDJlLCAweDAxMmUsIDB4MDAwNSwgMHgwMDE2LCAweGExODIsIDB4MDBmZiwgMHgwMjE4LAotCTB4YTA4NSwgMHgwMDAxLCAweDAwMzAsIDB4YTE4OCwgMHhhZTM0LCAweDIxMDQsIDB4YTA2NSwgMHgwZGMwLAotCTB4YTAwNiwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHg2MDBiLAotCTB4MDAwMCwgMHg2MDBmLCAweDAwMDAsIDB4NjAwMCwgMHhjMDhjLCAweDYwMDIsIDB4MDgwYywgMHg1NzRmLAotCTB4MTUzOCwgMHg2MGEwLCAweGEwODYsIDB4MDA3ZSwgMHgyMDY5LCAweGIyOTAsIDB4MDEzMCwgMHgyMDAxLAotCTB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MTFlMCwgMHgwMDk4LCAweDJkMDQsIDB4ZDBlNCwgMHgwMWMwLAotCTB4MDBkNiwgMHgyMDY5LCAweGIyOGUsIDB4MDBjNiwgMHgyMDYxLCAweGFmOWYsIDB4NjgxMCwgMHgyMDYyLAotCTB4NjgxNCwgMHg2MDA2LCAweDY4MTgsIDB4NjAwYSwgMHg2ODFjLCAweDYwMGUsIDB4MDBjZSwgMHgwMGRlLAotCTB4OGQ2OSwgMHgyZDA0LCAweDIwNjksIDB4MDE0MCwgMHg2ODg2LCAweDIwNjksIDB4YWQwMCwgMHg2OGEyLAotCTB4MjA2OSwgMHhiMjhlLCAweDY4MDgsIDB4NjA1ZSwgMHg2ODEwLCAweDYwNjIsIDB4NjEzOCwgMHhhMTBhLAotCTB4MDIwOCwgMHg2MDNhLCAweDY4MTQsIDB4NjA2NiwgMHgyMDk5LCAweGIyOTYsIDB4YWM4OCwgMHgwMDBhLAotCTB4MjFhMCwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgyMDk5LCAweGIyOWEsIDB4YWM4OCwgMHgwMDA2LAotCTB4MjFhMCwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgyMDY5LCAweGIyYWUsIDB4NjgwOCwgMHg2MDZhLAotCTB4NjkwYywgMHg2MTZlLCAweDY4MTAsIDB4NjA3MiwgMHg2ODE4LCAweDYwNzYsIDB4YTE4MiwgMHgwMjExLAotCTB4MTIxOCwgMHgyMDA5LCAweDAwMDgsIDB4MDQwMCwgMHhhMTgyLCAweDAyNTksIDB4MTIxOCwgMHgyMDA5LAotCTB4MDAwNywgMHgwMGQwLCAweGExODIsIDB4MDJjMSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNiwgMHgwMGEwLAotCTB4YTE4MiwgMHgwMzQ5LCAweDEyMTgsIDB4MjAwOSwgMHgwMDA1LCAweDAwNzAsIDB4YTE4MiwgMHgwNDIxLAotCTB4MTIxOCwgMHgyMDA5LCAweDAwMDQsIDB4MDA0MCwgMHhhMTgyLCAweDA1ODEsIDB4MTIxOCwgMHgyMDA5LAotCTB4MDAwMywgMHgwMDEwLCAweDIwMDksIDB4MDAwMiwgMHg2MTkyLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLAotCTB4MDBkZSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgwMGU2LCAweDIwNzEsIDB4YjI4ZCwgMHgyZTA0LAotCTB4Njg5NiwgMHgyMDcxLCAweGIyOGUsIDB4NzAwNCwgMHg2ODlhLCAweDcwMWMsIDB4Njg5ZSwgMHg2YTAwLAotCTB4MjAwOSwgMHhhZDcxLCAweDIxMGMsIDB4ZDBiYywgMHgwMTIwLCAweGQxZWMsIDB4MDExMCwgMHhjMmFkLAotCTB4MDAwOCwgMHhjMmFjLCAweGQwYzQsIDB4MDEyMCwgMHhkMWU0LCAweDAxMTAsIDB4YzJiZCwgMHgwMDA4LAotCTB4YzJiYywgMHg2YTAyLCAweDAwZWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDYwYTQsIDB4YTA2ZCwgMHgwMWMwLCAweDY5MDAsIDB4ODFmZiwgMHgxNTQwLAotCTB4NmEwNCwgMHhhMjgyLCAweDAwMTAsIDB4MTY0OCwgMHhhZDg4LCAweDAwMDQsIDB4MjBhOSwgMHgwMDEwLAotCTB4MjEwNCwgMHhhMDg2LCAweGZmZmYsIDB4MDEyOCwgMHg4MTA4LCAweDFmMDQsIDB4NGRhOCwgMHgwODBjLAotCTB4MTRmNiwgMHgyNjBhLCAweDgyMTAsIDB4NmEwNiwgMHgwMDk4LCAweDA4MGMsIDB4MTVkOSwgMHgwMWE4LAotCTB4MmQwMCwgMHg2MGE2LCAweDY4MDMsIDB4MDAwMCwgMHhhZDg4LCAweDAwMDQsIDB4MjBhOSwgMHgwMDEwLAotCTB4MjAwYiwgMHhmZmZmLCAweDgxMDgsIDB4MWYwNCwgMHg0ZGMwLCAweDY4MDcsIDB4MDAwMSwgMHg2ZTEyLAotCTB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweGEwMDYsIDB4MGNkOCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwZDYsIDB4NjBhNCwgMHhhMDBkLCAweDAxYTAsIDB4MjE2OCwgMHg2ODAwLAotCTB4YTAwNSwgMHgxMTYwLCAweDA4MGMsIDB4NGVmOSwgMHgxMTY4LCAweDIwMGIsIDB4ZmZmZiwgMHg2ODA0LAotCTB4YTA4YSwgMHgwMDAyLCAweDAyMTgsIDB4ODAwMSwgMHg2ODA2LCAweDAwMjAsIDB4MDgwYywgMHgxNWYwLAotCTB4NjBhNywgMHgwMDAwLCAweDAwZGUsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg0ZjU2LCAweDAwMTAsIDB4MDgwYywgMHg0YmMwLCAweDA4MGMsIDB4NGU3MSwgMHgxZGQ4LAotCTB4MDgwYywgMHg0ZTNhLCAweDAxMmUsIDB4MDAwNSwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjBhOCwgMHhhMDZkLCAweDAxYzAsIDB4Njk1MCwgMHg4MWZmLCAweDE1NDAsIDB4NmE1NCwgMHhhMjgyLAotCTB4MDAxMCwgMHgxNjcwLCAweGFkODgsIDB4MDAxOCwgMHgyMGE5LCAweDAwMTAsIDB4MjEwNCwgMHhhMDg2LAotCTB4ZmZmZiwgMHgwMTI4LCAweDgxMDgsIDB4MWYwNCwgMHg0ZTBlLCAweDA4MGMsIDB4MTRmNiwgMHgyNjBhLAotCTB4ODIxMCwgMHg2YTU2LCAweDAwOTgsIDB4MDgwYywgMHgxNWQ5LCAweDAxZDAsIDB4MmQwMCwgMHg2MGFhLAotCTB4Njg1MywgMHgwMDAwLCAweGFkODgsIDB4MDAxOCwgMHgyMGE5LCAweDAwMTAsIDB4MjAwYiwgMHhmZmZmLAotCTB4ODEwOCwgMHgxZjA0LCAweDRlMjYsIDB4Njg1NywgMHgwMDAxLCAweDZlNjIsIDB4MDAxMCwgMHgwODBjLAotCTB4NGMxMSwgMHgwMDg5LCAweDFkZTAsIDB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBkZSwgMHgwMDA1LAotCTB4YTAwNiwgMHgwY2Q4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NjdjNSwgMHgwMTJlLAotCTB4MDAwNSwgMHhhMDFlLCAweDAwMTAsIDB4MjAxOSwgMHgwMDAxLCAweGEwMGUsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHg2MDRjLCAweDIwNjgsIDB4NjAwMCwgMHhkMGRjLCAweDExNzAsIDB4OGRmZiwgMHgwMWU4LAotCTB4ODNmZiwgMHgwMTIwLCAweDY4NDgsIDB4YTYwNiwgMHgwMTU4LCAweDAwMzAsIDB4NjgzYywgMHhhNDA2LAotCTB4MTExOCwgMHg2ODQwLCAweGE1MDYsIDB4MDEyMCwgMHgyZDA4LCAweDY4MDAsIDB4MjA2OCwgMHgwYzcwLAotCTB4NmEwMCwgMHg2MDRjLCAweGFkMDYsIDB4MTExMCwgMHg2MjRlLCAweDAwMTgsIDB4YTE4MCwgMHgwMDAwLAotCTB4MjIwMiwgMHg4MmZmLCAweDExMTAsIDB4NjE1MiwgMHg4ZGZmLCAweDAxMmUsIDB4MDAwNSwgMHhhMDFlLAotCTB4MDAxMCwgMHgyMDE5LCAweDAwMDEsIDB4YTAwZSwgMHg2MDgwLCAweDIwNjgsIDB4OGRmZiwgMHgwMWU4LAotCTB4ODNmZiwgMHgwMTIwLCAweDY4NDgsIDB4YTYwNiwgMHgwMTU4LCAweDAwMzAsIDB4NjgzYywgMHhhNDA2LAotCTB4MTExOCwgMHg2ODQwLCAweGE1MDYsIDB4MDEyMCwgMHgyZDA4LCAweDY4MDAsIDB4MjA2OCwgMHgwYzcwLAotCTB4NmEwMCwgMHg2MDgwLCAweGFkMDYsIDB4MTExMCwgMHg2MjgyLCAweDAwMTgsIDB4YTE4MCwgMHgwMDAwLAotCTB4MjIwMiwgMHg4MmZmLCAweDExMTAsIDB4NjE4NiwgMHg4ZGZmLCAweDAwMDUsIDB4YTAxNiwgMHgwODBjLAotCTB4NGVmMywgMHgxMTEwLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDRmM2QsIDB4MTExMCwgMHhhMjk1LAotCTB4MDAwMiwgMHgwMDA1LCAweDA4MGMsIDB4NGY2ZSwgMHgwMTE4LCAweDA4MGMsIDB4OTY0YiwgMHgwMDEwLAotCTB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg0ZjZlLCAweDAxMTgsIDB4MDgwYywgMHg5NWU0LAotCTB4MDAxMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLCAweDRmNmUsIDB4MDExOCwgMHgwODBjLAotCTB4OTYyZSwgMHgwMDEwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NGY2ZSwgMHgwMTE4LAotCTB4MDgwYywgMHg5NjAwLCAweDAwMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg0ZjZlLAotCTB4MDExOCwgMHgwODBjLCAweDk2NjcsIDB4MDAxMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMTI2LAotCTB4MDAwNiwgMHgwMGQ2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDgwLCAweGEwNmQsIDB4MDFhMCwgMHg2ODAwLAotCTB4MDAwNiwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywgMHg5N2ZkLAotCTB4MDAwNiwgMHg2MDAwLCAweGQwZmMsIDB4MDExMCwgMHgwODBjLCAweGFjMDMsIDB4MDAwZSwgMHgwODBjLAotCTB4NTEwYywgMHgwMDBlLCAweDBjNTAsIDB4NjA4MywgMHgwMDAwLCAweDYwODcsIDB4MDAwMCwgMHgwMGRlLAotCTB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4NjBhNCwgMHhhMDBkLCAweDExMTgsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDAwNSwgMHgwMGU2LCAweDIxNzAsIDB4NzAwMCwgMHhhMDA1LCAweDExNjAsIDB4MjBhOSwgMHgwMDEwLAotCTB4YWU4OCwgMHgwMDA0LCAweDIxMDQsIDB4YTYwNiwgMHgwMTI4LCAweDgxMDgsIDB4MWYwNCwgMHg0ZjAyLAotCTB4YTA4NSwgMHgwMDAxLCAweGEwMDYsIDB4MDBlZSwgMHgwMDA1LCAweDAwZDYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHg2MGE0LCAweGEwNmQsIDB4MTEyOCwgMHgwODBjLCAweDE1ZDksIDB4MDFhMCwgMHgyZDAwLAotCTB4NjBhNiwgMHg2ODAzLCAweDAwMDEsIDB4NjgwNywgMHgwMDAwLCAweGFkODgsIDB4MDAwNCwgMHgyMGE5LAotCTB4MDAxMCwgMHgyMDBiLCAweGZmZmYsIDB4ODEwOCwgMHgxZjA0LCAweDRmMjEsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDEyZSwgMHgwMGRlLCAweDAwMDUsIDB4YTAwNiwgMHgwY2Q4LCAweDAwZDYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHg2MGE0LCAweGEwNmQsIDB4MDEzMCwgMHg2MGE3LCAweDAwMDAsIDB4MDgwYywgMHgxNWYwLAotCTB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweDYwYTgsIDB4YTAwZCwgMHgxMTE4LAotCTB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBlNiwgMHgyMTcwLCAweDcwNTAsIDB4YTAwNSwgMHgxMTYwLAotCTB4MjBhOSwgMHgwMDEwLCAweGFlODgsIDB4MDAxOCwgMHgyMTA0LCAweGE2MDYsIDB4MDEyOCwgMHg4MTA4LAotCTB4MWYwNCwgMHg0ZjRjLCAweGEwODUsIDB4MDAwMSwgMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwYzE5LCAweDExODgsIDB4MjAwYiwgMHhmZmZmLCAweDAwZDYsIDB4NjBhOCwgMHgyMDY4LAotCTB4Njg1NCwgMHhhMDhhLCAweDAwMDIsIDB4MDIxOCwgMHg4MDAxLCAweDY4NTYsIDB4MDAyMCwgMHgwODBjLAotCTB4MTVmMCwgMHg2MGFiLCAweDAwMDAsIDB4MDBkZSwgMHgwMTJlLCAweDAwMDUsIDB4NjA5YywgMHhkMGE0LAotCTB4MDAwNSwgMHgwMGY2LCAweDA4MGMsIDB4NTc0ZiwgMHgwMWIwLCAweDcxYjQsIDB4ODFmZiwgMHgxMTk4LAotCTB4NzFkMCwgMHhkMTljLCAweDAxODAsIDB4MjAwMSwgMHgwMDdlLCAweGEwODAsIDB4YWUzNCwgMHgyMDA0LAotCTB4YTA3ZCwgMHgwMTQ4LCAweDc4MDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgxMTE4LAotCTB4NzgwMCwgMHhjMGVkLCAweDc4MDIsIDB4MjA3OSwgMHhhZDUxLCAweDc4MDQsIDB4ZDBhNCwgMHgwMWU4LAotCTB4MDE1NiwgMHgwMGM2LCAweDIwYTksIDB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDAxNiwgMHgwODBjLAotCTB4NGNkYywgMHgxMTY4LCAweDYwMDQsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTA5NiwgMHgwMDA0LAotCTB4MDExOCwgMHhhMDg2LCAweDAwMDYsIDB4MTExOCwgMHg2MDAwLCAweGMwZWQsIDB4NjAwMiwgMHgwMDFlLAotCTB4ODEwOCwgMHgxZjA0LCAweDRmOTYsIDB4MDBjZSwgMHgwMTVlLCAweDA4MGMsIDB4NTAyZCwgMHgwMTIwLAotCTB4MjAwMSwgMHhhZmEyLCAweDIwMGMsIDB4MDAzOCwgMHgyMDc5LCAweGFkNTEsIDB4NzgwNCwgMHhkMGE0LAotCTB4MDEzMCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg0ZmMxLCAweDA4MGMsIDB4NjU5MywgMHgwMGZlLAotCTB4MDAwNSwgMHgyMDExLCAweDRmYzEsIDB4MDgwYywgMHg2NTBkLCAweDA4MGMsIDB4NTAyZCwgMHgwMWYwLAotCTB4MjAwMSwgMHhhZWIyLCAweDIwMDQsIDB4YTA4MCwgMHgwMDAwLCAweDIwMGMsIDB4YzFlYywgMHgyMTAyLAotCTB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhNCwgMHgwMTMwLCAweDIwMDksIDB4MDdkMCwgMHgyMDExLAotCTB4NGZjMSwgMHgwODBjLCAweDY1OTMsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4NzA2ZiwgMHgwMDAwLAotCTB4NzA3MywgMHgwMDAwLCAweDA4MGMsIDB4MjhmYSwgMHgwMGVlLCAweDA0YjAsIDB4MDE1NiwgMHgwMGM2LAotCTB4MjBhOSwgMHgwMDdmLCAweDIwMDksIDB4MDAwMCwgMHgwMDE2LCAweDA4MGMsIDB4NGNkYywgMHgxNTMwLAotCTB4NjAwMCwgMHhkMGVjLCAweDA1MTgsIDB4MDA0NiwgMHg2MmEwLCAweGEyOTQsIDB4MDBmZiwgMHg4MjI3LAotCTB4YTAwNiwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhhOTZjLCAweDYwMDAsIDB4YzBlNSwgMHhjMGVjLAotCTB4NjAwMiwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg1LCAweDA3MDAsIDB4NjAwNiwgMHgyMDE5LAotCTB4MDAyOSwgMHgwODBjLCAweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg2ODFkLAotCTB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4YTcxMiwgMHgwMDdlLCAweDAwNGUsIDB4MDAxZSwgMHg4MTA4LAotCTB4MWYwNCwgMHg0ZmVjLCAweDAwY2UsIDB4MDE1ZSwgMHgwMDA1LCAweDAwYzYsIDB4NjAxOCwgMHgyMDYwLAotCTB4NjAwMCwgMHhjMGVjLCAweDYwMDIsIDB4MDBjZSwgMHgwMDA1LCAweDc4MTgsIDB4MjAwNCwgMHhkMGFjLAotCTB4MDAwNSwgMHg3ODE4LCAweDIwMDQsIDB4ZDBiYywgMHgwMDA1LCAweDAwZjYsIDB4MjAwMSwgMHhhZWIyLAotCTB4MjAwNCwgMHhhMDdkLCAweDAxMTAsIDB4NzgwMCwgMHhkMGVjLCAweDAwZmUsIDB4MDAwNSwgMHgwMTI2LAotCTB4MDAyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIwMCwgMHhhMDA1LCAweDAxMTAsIDB4YzJmZCwgMHgwMDA4LAotCTB4YzJmYywgMHg2MjAyLCAweDAwMmUsIDB4MDEyZSwgMHgwMDA1LCAweDIwNzEsIDB4YWUxMywgMHg3MDAzLAotCTB4MDAwMSwgMHg3MDA3LCAweDAwMDAsIDB4NzAxMywgMHgwMDAwLCAweDcwMTcsIDB4MDAwMCwgMHg3MDFiLAotCTB4MDAwMCwgMHg3MDFmLCAweDAwMDAsIDB4NzAwYiwgMHgwMDAwLCAweDcwNGIsIDB4MDAwMSwgMHg3MDRmLAotCTB4MDAwMCwgMHg3MDViLCAweDAwMjAsIDB4NzA1ZiwgMHgwMDQwLCAweDcwN2YsIDB4MDAwMCwgMHgyMDcxLAotCTB4YWY3YywgMHg3MDAzLCAweGFlMTMsIDB4NzAwNywgMHgwMDAwLCAweDcwMGIsIDB4MDAwMCwgMHg3MDBmLAotCTB4YWY1YywgMHg3MDEzLCAweDAwMjAsIDB4NzAxNywgMHgwMDQwLCAweDcwMzcsIDB4MDAwMCwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMGU2LCAweDIwNzEsIDB4YWYzNCwgMHhhMDBlLCAweDcxODYsIDB4NzE4YSwgMHg3MDk3LAotCTB4MDAwMSwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwgMHhkMGZjLCAweDExNTAsIDB4MjAwMSwgMHhhZDUyLAotCTB4MjAwNCwgMHhhMDBlLCAweGQwOWMsIDB4MDEwOCwgMHg4MTA4LCAweDcxMDIsIDB4MDgwNCwgMHg1MGQ2LAotCTB4MjAwMSwgMHhhZDcxLCAweDIwMGMsIDB4YTE4NCwgMHgwMDBmLCAweDIwMDksIDB4YWQ3MiwgMHgyMTBjLAotCTB4MDAwMiwgMHg1MDdlLCAweDUwYjEsIDB4NTBiOCwgMHg1MGMyLCAweDUwYzcsIDB4NTA3ZSwgMHg1MDdlLAotCTB4NTA3ZSwgMHg1MGExLCAweDUwN2UsIDB4NTA3ZSwgMHg1MDdlLCAweDUwN2UsIDB4NTA3ZSwgMHg1MDdlLAotCTB4NTA3ZSwgMHg3MDAzLCAweDAwMDQsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MjA5OSwgMHhhZDc1LAotCTB4MjBhMSwgMHhhZjg1LCAweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLAotCTB4MDQyOCwgMHg3MDhmLCAweDAwMDUsIDB4NzAwNywgMHgwMTIyLCAweDIwMDEsIDB4MDAwMiwgMHgwMDMwLAotCTB4NzA4ZiwgMHgwMDAyLCAweDcwMDcsIDB4MDEyMSwgMHgyMDAxLCAweDAwMDMsIDB4NzAwMiwgMHg3MDk3LAotCTB4MDAwMSwgMHgwMDg4LCAweDcwMDcsIDB4MDEyMiwgMHgyMDAxLCAweDAwMDIsIDB4MDAyMCwgMHg3MDA3LAotCTB4MDEyMSwgMHgyMDAxLCAweDAwMDMsIDB4NzAwMiwgMHhhMDA2LCAweDcwOTYsIDB4NzA4ZSwgMHhhMTg0LAotCTB4ZmYwMCwgMHg4MDA3LCAweDcwOWEsIDB4YTE4NCwgMHgwMGZmLCAweDcwOTIsIDB4MDBlZSwgMHgwMDFlLAotCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWUxMywgMHg2ODRjLCAweGEwMDUsIDB4MTEzMCwgMHg3MDI4LAotCTB4YzA4NSwgMHg3MDJhLCAweGEwODUsIDB4MDAwMSwgMHgwNDI4LCAweDZhNjAsIDB4NzIzNiwgMHg2YjY0LAotCTB4NzMzYSwgMHg2ODY4LCAweDcwM2UsIDB4NzA3NiwgMHg2ODZjLCAweDcwNDIsIDB4NzA3YSwgMHg2ODRjLAotCTB4NzAyZSwgMHg2ODQ0LCAweDcwMzIsIDB4MjAwOSwgMHgwMDBkLCAweDIwMGEsIDB4NzAwYiwgMHgwMDAwLAotCTB4ODAwNywgMHg4MDA2LCAweDgwMDYsIDB4YTA4YywgMHgwMDNmLCAweGEwODQsIDB4ZmZjMCwgMHhhMjEwLAotCTB4MjEwMCwgMHhhMzE5LCAweDcyNmUsIDB4NzM3MiwgMHg3MDI4LCAweGMwODQsIDB4NzAyYSwgMHg3MDA3LAotCTB4MDAwMSwgMHhhMDA2LCAweDAwZWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwZTYsIDB4MDAyNiwgMHg2ODM4LAotCTB4ZDBmYywgMHgxOTA0LCAweDUxNjUsIDB4NjgwNCwgMHhhMDBkLCAweDAxODgsIDB4MDBkNiwgMHgyMDcxLAotCTB4YWQwMCwgMHhhMDE2LCAweDcwMmMsIDB4MjE2OCwgMHg2OTA0LCAweDIwNmEsIDB4ODIxMCwgMHgyZDAwLAotCTB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBiMCwgMHhhMjAwLCAweDcwYjIsIDB4MDBkZSwgMHgyMDcxLAotCTB4YWUxMywgMHg3MDFjLCAweGEwMDUsIDB4MTkwNCwgMHg1MTc1LCAweDIwYTksIDB4MDAzMiwgMHgwZjA0LAotCTB4NTE3MywgMHgwZTA0LCAweDUxMmYsIDB4MjA3MSwgMHhhZjM0LCAweDcyMDAsIDB4ODJmZiwgMHgwNWQ4LAotCTB4NjkzNCwgMHhhMTg2LCAweDAxMDMsIDB4MTkwNCwgMHg1MTgzLCAweDY5NDgsIDB4Njg0NCwgMHhhMTA1LAotCTB4MTU0MCwgMHgyMDA5LCAweDgwMjAsIDB4MjIwMCwgMHgwMDAyLCAweDUxNzMsIDB4NTE0YSwgMHg1MTliLAotCTB4NTFhNywgMHg1MTczLCAweDIwNzEsIDB4MDAwMCwgMHgyMGE5LCAweDAwMzIsIDB4MGYwNCwgMHg1MTczLAotCTB4NzAxOCwgMHhkMDg0LCAweDFkZDgsIDB4NzEyMiwgMHg2ODNjLCAweDcwMjYsIDB4Njg0MCwgMHg3MDJhLAotCTB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgyMDcxLCAweGFkMDAsIDB4NzAyYywgMHgyMDZhLAotCTB4MmQwMCwgMHg3MDJlLCAweDcwYjAsIDB4ODAwMCwgMHg3MGIyLCAweDAwMmUsIDB4MDBlZSwgMHgwMTVlLAotCTB4MDAwNSwgMHg2ODQ0LCAweGEwODYsIDB4MDEwMCwgMHgxMTMwLCAweDY4NjgsIDB4YTAwNSwgMHgxMTE4LAotCTB4MjAwOSwgMHg4MDIwLCAweDA4ODAsIDB4MjA3MSwgMHhhZTEzLCAweDJkMDgsIDB4MjA2YiwgMHgwMDAwLAotCTB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHhhMDZkLCAweDcxMWEsIDB4MDExMCwgMHg2OTAyLAotCTB4MDAwOCwgMHg3MTFlLCAweDBjMTAsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAxNywgMHgwMTMwLAotCTB4YTE4NiwgMHgwMDFlLCAweDAxMTgsIDB4YTE4ZSwgMHgwMDFmLCAweDFkMjgsIDB4Njg0YywgMHhkMGNjLAotCTB4MGQxMCwgMHg2ODUwLCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDEsIDB4MTllMCwgMHgyMDA5LAotCTB4ODAyMSwgMHgwODA0LCAweDUxNDMsIDB4NzA4NCwgMHg4MDA4LCAweGEwOTIsIDB4MDAxZSwgMHgxYTk4LAotCTB4NzE4NiwgMHhhZTkwLCAweDAwMDMsIDB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4MDA3OCwgMHg3MDg0LAotCTB4ODAwOCwgMHhhMDkyLCAweDAwMGYsIDB4MWEzOCwgMHg3MTg2LCAweGFlOTAsIDB4MDAwMywgMHg4MDAzLAotCTB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4ODIxMCwgMHg2ODQwLCAweDIwMTIsIDB4NzA4OCwgMHhhMTBhLAotCTB4MGEwNCwgMHg1MTVjLCAweDcxOGMsIDB4NzA4NCwgMHhhMTBhLCAweDBhMDQsIDB4NTE1YywgMHgyMDcxLAotCTB4MDAwMCwgMHg3MDE4LCAweGQwODQsIDB4MTkwNCwgMHg1MTVjLCAweDIwNzEsIDB4YWYzNCwgMHg3MDAwLAotCTB4YTA4NiwgMHgwMDAyLCAweDExNTAsIDB4MDgwYywgMHg1NDI2LCAweDIwNzEsIDB4MDAwMCwgMHg3MDFiLAotCTB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MDgwNCwgMHg1MTVjLCAweDA4MGMsIDB4NTQ1MCwgMHgyMDcxLAotCTB4MDAwMCwgMHg3MDFiLCAweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDA4MDQsIDB4NTE1YywgMHgwMDA2LAotCTB4Njg0YywgMHgwMDA2LCAweDY4MzcsIDB4MDEwMywgMHgyMGE5LCAweDAwMWMsIDB4YWQ4MCwgMHgwMDExLAotCTB4MjBhMCwgMHgyMDAxLCAweDAwMDAsIDB4NDBhNCwgMHgwMDBlLCAweGEwODQsIDB4MDBmZiwgMHg2ODRlLAotCTB4MDAwZSwgMHg2ODRhLCAweDY5NTIsIDB4MDAwNSwgMHgyMDcxLCAweGFlMTMsIDB4NzAwNCwgMHgwMDAyLAotCTB4NTIwMiwgMHg1MjEzLCAweDU0MTEsIDB4NTQxMiwgMHg1NDFmLCAweDU0MjUsIDB4NTIwMywgMHg1NDAyLAotCTB4NTM5OCwgMHg1M2VlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MGUwNCwgMHg1MjEyLAotCTB4MjAwOSwgMHgwMDBkLCAweDcwMzAsIDB4MjAwYSwgMHgyMDkxLCAweDQwODAsIDB4NzAwNywgMHgwMDAxLAotCTB4NzAwYiwgMHgwMDAwLCAweDAxMmUsIDB4MjA2OSwgMHhhZmRhLCAweDY4M2MsIDB4YTAwNSwgMHgwM2Y4LAotCTB4MTFmMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDAwMDAsIDB4NjkzNCwgMHgyMDAxLAotCTB4YWUxZiwgMHgyMDA0LCAweGExMGEsIDB4MDE3MCwgMHgwZTA0LCAweDUyMzYsIDB4MjA2OSwgMHgwMDAwLAotCTB4NjgxOCwgMHhkMDg0LCAweDExNTgsIDB4MjAwOSwgMHg4MDQwLCAweDY5MjIsIDB4NjgxYiwgMHgwMDAxLAotCTB4MjA5MSwgMHg0MDgwLCAweDIwNjksIDB4YWZkYSwgMHg2ODNmLCAweGZmZmYsIDB4MDEyZSwgMHgyMDY5LAotCTB4YWQwMCwgMHg2ODQ0LCAweDY5NjQsIDB4YTEwMiwgMHgyMDY5LCAweGFmMzQsIDB4Njg4YSwgMHg2OTg0LAotCTB4NzAxYywgMHhhMDZkLCAweDAxMjAsIDB4ODFmZiwgMHgwOTA0LCAweDUyOGMsIDB4MDBhMCwgMHg4MWZmLAotCTB4MDkwNCwgMHg1MzUyLCAweDIwNzEsIDB4YWYzNCwgMHg3MTg0LCAweDcwODgsIDB4YTEwYSwgMHgxMjU4LAotCTB4NzE5MCwgMHgyMDcxLCAweGFmZGEsIDB4NzAzOCwgMHhhMDA1LCAweDAxMjgsIDB4MWIwNCwgMHg1MzUyLAotCTB4NzEzYSwgMHgwODA0LCAweDUzNTIsIDB4MjA3MSwgMHhhZjM0LCAweDcxOGMsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHg3MDg0LCAweGExMGEsIDB4MGEwNCwgMHg1MzZkLCAweDBlMDQsIDB4NTMwZSwgMHgyMDcxLAotCTB4MDAwMCwgMHg3MDE4LCAweGQwODQsIDB4MTkwNCwgMHg1MzBlLCAweDIwMDEsIDB4ZmZmZiwgMHgyMDcxLAotCTB4YWZkYSwgMHg3MDNhLCAweDIwNzEsIDB4YWYzNCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMiwgMHgxMTUwLAotCTB4MDgwYywgMHg1NDI2LCAweDIwNzEsIDB4MDAwMCwgMHg3MDFiLCAweDAwMDEsIDB4MjA5MSwgMHg0MDgwLAotCTB4MDgwNCwgMHg1MzBlLCAweDA4MGMsIDB4NTQ1MCwgMHgyMDcxLCAweDAwMDAsIDB4NzAxYiwgMHgwMDAxLAotCTB4MjA5MSwgMHg0MDgwLCAweDA4MDQsIDB4NTMwZSwgMHgyMDcxLCAweGFmMzQsIDB4NzAwMCwgMHhhMDA1LAotCTB4MDkwNCwgMHg1MzM0LCAweDY5MzQsIDB4YTE4NiwgMHgwMTAzLCAweDE5MDQsIDB4NTMxMSwgMHg2ODRjLAotCTB4ZDBiYywgMHgxOTA0LCAweDUzMzQsIDB4Njk0OCwgMHg2ODQ0LCAweGExMDUsIDB4MTkwNCwgMHg1MzI5LAotCTB4MjAwOSwgMHg4MDIwLCAweDIwNzEsIDB4YWYzNCwgMHg3MDAwLCAweDAwMDIsIDB4NTMzNCwgMHg1MmY0LAotCTB4NTJjYywgMHg1MmRlLCAweDUyYWIsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MjA5OSwgMHhhZDc1LAotCTB4MjBhMSwgMHhhZjg1LCAweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLAotCTB4MjA3MSwgMHhhZjdjLCAweGFkODAsIDB4MDAwZiwgMHg3MDBlLCAweDcwMTMsIDB4MDAwMiwgMHg3MDA3LAotCTB4MDAwMiwgMHg3MDBiLCAweDAwMDAsIDB4MmUxMCwgMHgwODBjLCAweDE2MjQsIDB4MjA3MSwgMHhhZTEzLAotCTB4NzAwNywgMHgwMDA5LCAweDA4MDQsIDB4NTM1MiwgMHg3MDg0LCAweDgwMDgsIDB4YTA5MiwgMHgwMDFlLAotCTB4MWEwNCwgMHg1MzUyLCAweGFlOTAsIDB4MDAwMywgMHhhMjEwLCAweDY4M2MsIDB4MjAxMiwgMHg3MTg2LAotCTB4MjA3MSwgMHhhZTEzLCAweDA4MGMsIDB4NTRhNywgMHgwODA0LCAweDUzNTIsIDB4NzA4NCwgMHg4MDA4LAotCTB4YTA5MiwgMHgwMDBmLCAweDFhMDQsIDB4NTM1MiwgMHhhZTkwLCAweDAwMDMsIDB4ODAwMywgMHhhMjEwLAotCTB4NjgzYywgMHgyMDEyLCAweDgyMTAsIDB4Njg0MCwgMHgyMDEyLCAweDcxODYsIDB4MjA3MSwgMHhhZTEzLAotCTB4MDgwYywgMHg1NGE3LCAweDA4MDQsIDB4NTM1MiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LAotCTB4NTMwZSwgMHgyMDcxLCAweDAwMDAsIDB4NzAxOCwgMHhkMDg0LCAweDExODAsIDB4NzEyMiwgMHg2ODNjLAotCTB4NzAyNiwgMHg2ODQwLCAweDcwMmEsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgwMTJlLAotCTB4MjA3MSwgMHhhZTEzLCAweDA4MGMsIDB4NTRhNywgMHgwODA0LCAweDUzNTIsIDB4MDEyZSwgMHgwODA0LAotCTB4NTM1MiwgMHhhMThjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDE3LCAweDAxMzAsIDB4YTE4NiwgMHgwMDFlLAotCTB4MDExOCwgMHhhMThlLCAweDAwMWYsIDB4MTFjMCwgMHg2ODRjLCAweGQwY2MsIDB4MDFhOCwgMHg2ODUwLAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwMSwgMHgxMTc4LCAweDIwMDksIDB4ODAyMSwgMHgwODA0LAotCTB4NTJhMiwgMHg2ODQ0LCAweGEwODYsIDB4MDEwMCwgMHgxMTM4LCAweDY4NjgsIDB4YTAwNSwgMHgxMTIwLAotCTB4MjAwOSwgMHg4MDIwLCAweDA4MDQsIDB4NTJhMiwgMHgyMDcxLCAweGFlMTMsIDB4MDgwYywgMHg1NGI5LAotCTB4MDFjOCwgMHgyMDcxLCAweGFlMTMsIDB4NzAwZiwgMHgwMDAxLCAweDY5MzQsIDB4YTE4NCwgMHgwMGZmLAotCTB4YTA4NiwgMHgwMDAzLCAweDExMzAsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4ODEwMSwgMHgwMTA4LAotCTB4NzEwZSwgMHg3MDA3LCAweDAwMDMsIDB4MDgwYywgMHg1NGQyLCAweDcwNTAsIDB4YTA4NiwgMHgwMTAwLAotCTB4MDkwNCwgMHg1NDEyLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWUxMywgMHg3MDA4LAotCTB4YTA4NiwgMHgwMDAxLCAweDExODAsIDB4MGUwNCwgMHg1MzZiLCAweDIwMDksIDB4MDAwZCwgMHg3MDMwLAotCTB4MjAwYSwgMHgyMDkxLCAweDQwODAsIDB4NzAwYiwgMHgwMDAwLCAweDcwMDQsIDB4YTA4NiwgMHgwMDA2LAotCTB4MTExMCwgMHg3MDA3LCAweDAwMDEsIDB4MDEyZSwgMHgwMDA1LCAweDIwNzEsIDB4YWUxMywgMHgwODBjLAotCTB4NTRiOSwgMHgwNTE4LCAweDIwNzEsIDB4YWYzNCwgMHg3MDg0LCAweDcwMGEsIDB4MjBhOSwgMHgwMDIwLAotCTB4MjA5OSwgMHhhZjM1LCAweDIwYTEsIDB4YWY1YywgMHg1M2EzLCAweDcwODcsIDB4MDAwMCwgMHgyMDcxLAotCTB4YWUxMywgMHgyMDY5LCAweGFmN2MsIDB4NzA2YywgMHg2ODI2LCAweDcwNzAsIDB4NjgyYSwgMHg3MDc0LAotCTB4NjgyZSwgMHg3MDc4LCAweDY4MzIsIDB4MmQxMCwgMHgwODBjLCAweDE2MjQsIDB4NzAwNywgMHgwMDA4LAotCTB4MjAwMSwgMHhmZmZmLCAweDIwNzEsIDB4YWZkYSwgMHg3MDNhLCAweDAxMmUsIDB4MDgwNCwgMHg1MzUyLAotCTB4MjA2OSwgMHhhZjdjLCAweDY4MDgsIDB4YTA4ZSwgMHgwMDAwLCAweDA5MDQsIDB4NTNlZCwgMHhhMDhlLAotCTB4MDIwMCwgMHgwOTA0LCAweDUzZWIsIDB4YTA4ZSwgMHgwMTAwLCAweDE5MDQsIDB4NTNlZCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4NTNlOSwgMHgyMDY5LCAweDAwMDAsIDB4NjgxOCwgMHhkMDg0LAotCTB4MTVjMCwgMHg3MDJjLCAweDcxMzAsIDB4ODEwOCwgMHhhMTAyLCAweDAyMzAsIDB4YTAwZSwgMHg3MDM0LAotCTB4NzA2ZSwgMHg3MDM4LCAweDcwNzIsIDB4MDA0OCwgMHg3MDZjLCAweGEwODAsIDB4MDA0MCwgMHg3MDZlLAotCTB4MTIyMCwgMHg3MDcwLCAweGEwODEsIDB4MDAwMCwgMHg3MDcyLCAweDcxMzIsIDB4NjkzNiwgMHg3MDBiLAotCTB4MDAwMCwgMHgyMDAxLCAweGFmNTksIDB4MjAwNCwgMHhhMDA1LCAweDExOTAsIDB4NjkzNCwgMHgyMDY5LAotCTB4YWYzNCwgMHg2ODljLCAweDY5OWUsIDB4MjA2OSwgMHhhZmRhLCAweGExMDIsIDB4MTExOCwgMHg2ODNjLAotCTB4YTAwNSwgMHgxMzY4LCAweDIwMDEsIDB4YWY1YSwgMHgyMDBjLCAweDgxMGQsIDB4NjkzZSwgMHgwMDM4LAotCTB4MjAwOSwgMHg4MDQwLCAweDY5MjIsIDB4NjgxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHg3MDA3LAotCTB4MDAwMSwgMHgwMTJlLCAweDAwMTAsIDB4NzAwNywgMHgwMDA1LCAweDAwMDUsIDB4MjAwMSwgMHhhZjdlLAotCTB4MjAwNCwgMHhhMDhlLCAweDAxMDAsIDB4MTEyOCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwYywgMHg1NGE3LAotCTB4MDAwNSwgMHhhMDhlLCAweDAwMDAsIDB4MGRlMCwgMHhhMDhlLCAweDAyMDAsIDB4MWRjOCwgMHg3MDA3LAotCTB4MDAwNSwgMHgwMDA1LCAweDcwMWMsIDB4YTA2ZCwgMHgwMTU4LCAweDA4MGMsIDB4NTRiOSwgMHgwMTQwLAotCTB4NzAwNywgMHgwMDAzLCAweDA4MGMsIDB4NTRkMiwgMHg3MDUwLCAweGEwODYsIDB4MDEwMCwgMHgwMTEwLAotCTB4MDAwNSwgMHgwMDA1LCAweDcwNTAsIDB4YTA5ZSwgMHgwMTAwLCAweDExMTgsIDB4NzAwNywgMHgwMDA0LAotCTB4MDAzMCwgMHhhMDg2LCAweDAyMDAsIDB4MTExMCwgMHg3MDA3LCAweDAwMDUsIDB4MDAwNSwgMHgwODBjLAotCTB4NTQ3NSwgMHg3MDA2LCAweDA4MGMsIDB4NTRhNywgMHgwMDA1LCAweDAwMDUsIDB4MDBlNiwgMHgwMTU2LAotCTB4MjA3MSwgMHhhZjM0LCAweDcxODQsIDB4ODFmZiwgMHgwNTAwLCAweGEwMDYsIDB4NzA4NiwgMHhhZTgwLAotCTB4MDAwMywgMHgyMDcxLCAweDAwMDAsIDB4MjFhOCwgMHgyMDE0LCAweDcyMjYsIDB4ODAwMCwgMHgwZjA0LAotCTB4NTQ0YSwgMHgyMDE0LCAweDcyMmEsIDB4ODAwMCwgMHgwZjA0LCAweDU0NGEsIDB4MjAxNCwgMHg3MjJlLAotCTB4ODAwMCwgMHgwZjA0LCAweDU0NGEsIDB4MjAxNCwgMHg3MjNhLCAweDgwMDAsIDB4MGYwNCwgMHg1NDRhLAotCTB4MjAxNCwgMHg3MjNlLCAweGExODAsIDB4ODAzMCwgMHg3MDIyLCAweDAxNWUsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMTU2LCAweDIwNzEsIDB4YWYzNCwgMHg3MTg0LCAweDgxZmYsIDB4MDFkOCwgMHhhMDA2LAotCTB4NzA4NiwgMHhhZTgwLCAweDAwMDMsIDB4MjA3MSwgMHgwMDAwLCAweDIxYTgsIDB4MjAxNCwgMHg3MjI2LAotCTB4ODAwMCwgMHgyMDE0LCAweDcyMmEsIDB4ODAwMCwgMHgwZjA0LCAweDU0NmMsIDB4MjAxNCwgMHg3MjNhLAotCTB4ODAwMCwgMHgyMDE0LCAweDcyM2UsIDB4MDAxOCwgMHgyMDAxLCAweDgwMjAsIDB4MDAxMCwgMHgyMDAxLAotCTB4ODA0MiwgMHg3MDIyLCAweDAxNWUsIDB4MDBlZSwgMHgwMDA1LCAweDcwMmMsIDB4NzEzMCwgMHg4MTA4LAotCTB4YTEwMiwgMHgwMjMwLCAweGEwMGUsIDB4NzAzNCwgMHg3MDZlLCAweDcwMzgsIDB4NzA3MiwgMHgwMDQ4LAotCTB4NzA2YywgMHhhMDgwLCAweDAwNDAsIDB4NzA2ZSwgMHgxMjIwLCAweDcwNzAsIDB4YTA4MSwgMHgwMDAwLAotCTB4NzA3MiwgMHg3MTMyLCAweDcwMGMsIDB4ODAwMSwgMHg3MDBlLCAweDExODAsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwZTA0LCAweDU0YTEsIDB4MjAwMSwgMHgwMDBkLCAweDIxMDIsIDB4MjA5MSwgMHg0MDgwLAotCTB4MjAwMSwgMHgwMDAxLCAweDcwMGIsIDB4MDAwMCwgMHgwMTJlLCAweDAwMDUsIDB4MjAwMSwgMHgwMDA3LAotCTB4MDAwNSwgMHgyMDAxLCAweDAwMDYsIDB4NzAwYiwgMHgwMDAxLCAweDAxMmUsIDB4MDAwNSwgMHg3MDFjLAotCTB4YTA2ZCwgMHgwMTcwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLAotCTB4MmQwNCwgMHg3MDFlLCAweGEwMDUsIDB4MTEwOCwgMHg3MDFhLCAweDAxMmUsIDB4MDgwYywgMHgxNWYwLAotCTB4MDAwNSwgMHgyMDE5LCAweDAwMGQsIDB4MjMwNCwgMHgyMzBjLCAweGExMGUsIDB4MDEzMCwgMHgyMzA0LAotCTB4MjMwYywgMHhhMTBlLCAweDAxMTAsIDB4YTAwNiwgMHgwMDYwLCAweDczMmMsIDB4ODMxOSwgMHg3MTMwLAotCTB4YTEwMiwgMHgxMTE4LCAweDIzMDAsIDB4YTAwNSwgMHgwMDIwLCAweDAyMTAsIDB4YTMwMiwgMHgwMDA4LAotCTB4ODAwMiwgMHgwMDA1LCAweDJkMDAsIDB4NzAyNiwgMHhhMDgwLCAweDAwMGQsIDB4NzA1NiwgMHg3MDUzLAotCTB4MDAwMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweGFmZWMsIDB4MjEwNCwgMHhjMDhkLAotCTB4MjAwYSwgMHgwMTJlLCAweDA4MGMsIDB4MTYzYywgMHgwMDA1LCAweDcwODgsIDB4YTA4YSwgMHgwMDI5LAotCTB4MTIyMCwgMHhhMDgyLCAweDAwMWQsIDB4MDAzMywgMHgwMDEwLCAweDA4MGMsIDB4MTRmNiwgMHg2MDI3LAotCTB4MWUwMCwgMHgwMDA1LCAweDU1YzEsIDB4NTU1YiwgMHg1NTcxLCAweDU1OTUsIDB4NTViNCwgMHg1NWU2LAotCTB4NTVmOCwgMHg1NTcxLCAweDU1ZDIsIDB4NTRmZiwgMHg1NTJkLCAweDU0ZmUsIDB4MDAwNSwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMjAwLCAweDY4MDQsIDB4YTAwNSwgMHgxMTgwLCAweDY4MDgsIDB4YTAwNSwgMHgxNTE4LAotCTB4NzA4YiwgMHgwMDI4LCAweDIwNjksIDB4YWZhYywgMHgyZDA0LCAweDcwMDIsIDB4MDgwYywgMHg1ODRkLAotCTB4NjAyOCwgMHhhMDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGIwLCAweDcwOGIsIDB4MDAyOCwgMHgyMDY5LAotCTB4YWZhYywgMHgyZDA0LCAweDcwMDIsIDB4NjAyOCwgMHhhMDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGU2LAotCTB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MjA3MSwgMHhhZmZkLCAweDA4MGMsIDB4MWQyMiwgMHgwMDVlLAotCTB4MDA0ZSwgMHgwMDNlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLAotCTB4NjgwNCwgMHhhMDA1LCAweDExODAsIDB4NjgwOCwgMHhhMDA1LCAweDE1MTgsIDB4NzA4YiwgMHgwMDI4LAotCTB4MjA2OSwgMHhhZmFjLCAweDJkMDQsIDB4NzAwMiwgMHgwODBjLCAweDU4ZGEsIDB4NjAyOCwgMHhhMDg1LAotCTB4MDYwMCwgMHg2MDJhLCAweDAwYjAsIDB4NzA4YiwgMHgwMDI4LCAweDIwNjksIDB4YWZhYywgMHgyZDA0LAotCTB4NzAwMiwgMHg2MDI4LCAweGEwODUsIDB4MDYwMCwgMHg2MDJhLCAweDAwZTYsIDB4MDAzNiwgMHgwMDQ2LAotCTB4MDA1NiwgMHgyMDcxLCAweGFmZmQsIDB4MDgwYywgMHgxZDIyLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLAotCTB4MDBlZSwgMHgwMGRlLCAweDAwMDUsIDB4NjgwMywgMHgwMDkwLCAweDYxMjQsIDB4ZDFlNCwgMHgxMTgwLAotCTB4MDgwYywgMHg1NjYzLCAweGQxZDQsIDB4MTE1MCwgMHhkMWRjLCAweDExMjgsIDB4ZDFjYywgMHgwMTQwLAotCTB4NzA4YiwgMHgwMDIwLCAweDAwMjgsIDB4NzA4YiwgMHgwMDFkLCAweDAwMTAsIDB4NzA4YiwgMHgwMDFmLAotCTB4MDAwNSwgMHg2ODAzLCAweDAwODgsIDB4NjEyNCwgMHhkMWNjLCAweDExYzgsIDB4ZDFkYywgMHgxMWEwLAotCTB4ZDFlNCwgMHgxMTc4LCAweGExODQsIDB4MWUwMCwgMHgxMWI4LCAweDYwZTMsIDB4MDAwMSwgMHg2MDBjLAotCTB4YzBiNCwgMHg2MDBlLCAweDA4MGMsIDB4NTc3ZiwgMHg2ODAzLCAweDAwODAsIDB4NzA4YiwgMHgwMDI4LAotCTB4MDA1OCwgMHg3MDhiLCAweDAwMWUsIDB4MDA0MCwgMHg3MDhiLCAweDAwMWQsIDB4MDAyOCwgMHg3MDhiLAotCTB4MDAyMCwgMHgwMDEwLCAweDcwOGIsIDB4MDAxZiwgMHgwMDA1LCAweDYwZTMsIDB4MDAwMSwgMHg2MDBjLAotCTB4YzBiNCwgMHg2MDBlLCAweDA4MGMsIDB4NTc3ZiwgMHg2ODAzLCAweDAwODAsIDB4NjEyNCwgMHhkMWQ0LAotCTB4MTE4MCwgMHhkMWRjLCAweDExNTgsIDB4ZDFlNCwgMHgxMTMwLCAweGExODQsIDB4MWUwMCwgMHgxMTU4LAotCTB4NzA4YiwgMHgwMDI4LCAweDAwNDAsIDB4NzA4YiwgMHgwMDFlLCAweDAwMjgsIDB4NzA4YiwgMHgwMDFkLAotCTB4MDAxMCwgMHg3MDhiLCAweDAwMWYsIDB4MDAwNSwgMHg2ODAzLCAweDAwYTAsIDB4NjEyNCwgMHhkMWRjLAotCTB4MTEyOCwgMHhkMWU0LCAweDAxMjgsIDB4NzA4YiwgMHgwMDFlLCAweDAwMTAsIDB4NzA4YiwgMHgwMDFkLAotCTB4MDAwNSwgMHgwODBjLCAweDU2OGQsIDB4NjEyNCwgMHhkMWRjLCAweDExNTgsIDB4MDgwYywgMHg1NjYzLAotCTB4ZDFkNCwgMHgxMTI4LCAweGQxZTQsIDB4MDEyOCwgMHg3MDhiLCAweDAwMWUsIDB4MDAxMCwgMHg3MDhiLAotCTB4MDAxZiwgMHgwMDA1LCAweDY4MDMsIDB4MDBhMCwgMHg2MTI0LCAweGQxZDQsIDB4MTE2MCwgMHhkMWNjLAotCTB4MTE1MCwgMHhkMWRjLCAweDExMjgsIDB4ZDFlNCwgMHgwMTQwLCAweDcwOGIsIDB4MDAxZSwgMHgwMDI4LAotCTB4NzA4YiwgMHgwMDFkLCAweDAwMTAsIDB4NzA4YiwgMHgwMDIxLCAweDAwMDUsIDB4MDgwYywgMHg1NjhkLAotCTB4NjEyNCwgMHhkMWQ0LCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsIDB4MDE0MCwgMHg3MDhiLAotCTB4MDAxZSwgMHgwMDI4LCAweDcwOGIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOGIsIDB4MDAxZiwgMHgwMDA1LAotCTB4NjgwMywgMHgwMDkwLCAweDYxMjQsIDB4ZDFkNCwgMHgxMTc4LCAweGQxY2MsIDB4MTE1MCwgMHhkMWRjLAotCTB4MTEyOCwgMHhkMWU0LCAweDAxNTgsIDB4NzA4YiwgMHgwMDFlLCAweDAwNDAsIDB4NzA4YiwgMHgwMDFkLAotCTB4MDAyOCwgMHg3MDhiLCAweDAwMjAsIDB4MDAxMCwgMHg3MDhiLCAweDAwMWYsIDB4MDAwNSwgMHgwMDE2LAotCTB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLAotCTB4MjA3MSwgMHhhZDAwLCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDU3NGYsIDB4MTFlOCwgMHgyMDAxLAotCTB4YWQwYywgMHgyMDBjLCAweGQxYjQsIDB4MDFjMCwgMHhjMWI0LCAweDIxMDIsIDB4NjAyNywgMHgwMjAwLAotCTB4ZTAwMCwgMHhlMDAwLCAweDYwMjQsIDB4ZDBjYywgMHgwMTU4LCAweDY4MDMsIDB4MDBhMCwgMHgyMDAxLAotCTB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwgMHgwNDI4LAotCTB4NjAyOCwgMHhjMGNkLCAweDYwMmEsIDB4MDQwOCwgMHgwODBjLCAweDU3NmIsIDB4MDE1MCwgMHgwODBjLAotCTB4NTc2MSwgMHgxMTM4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2MWUsIDB4MDgwYywgMHg1NzI2LAotCTB4MDBhMCwgMHgwODBjLCAweDU2OGEsIDB4MDE3OCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjFlLAotCTB4NzA4OCwgMHhhMDg2LCAweDAwMWUsIDB4MDEyMCwgMHg3MDg4LCAweGEwODYsIDB4MDAyMiwgMHgxMTE4LAotCTB4NzA4YiwgMHgwMDI1LCAweDAwMTAsIDB4NzA4YiwgMHgwMDIxLCAweDAxMmUsIDB4MDBlZSwgMHgwMGRlLAotCTB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDksIDB4MDA2NCwgMHgyMDExLAotCTB4NTY2ZSwgMHgwODBjLCAweDY1MDEsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGY2LAotCTB4MDAxNiwgMHgwODBjLCAweDc4MzQsIDB4MjA3MSwgMHhhZDAwLCAweDA4MGMsIDB4NTYwZiwgMHgwMDFlLAotCTB4MDBmZSwgMHgwMGVlLCAweDAwMDUsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDA0LAotCTB4MDE0MCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywgMHhhYWFhLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLAotCTB4MDAwMCwgMHgwMDA1LCAweDYwMjAsIDB4ZDA5YywgMHgwMDA1LCAweDY4MDMsIDB4MDBjMCwgMHgwMTU2LAotCTB4MjBhOSwgMHgwMDJkLCAweDFkMDQsIDB4NTY5MiwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHg1NjkyLAotCTB4MDE1ZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LAotCTB4MDE0MCwgMHgyMDcxLCAweGFkMDAsIDB4MjAwMSwgMHhhZjllLCAweDIwMGMsIDB4YTE4NiwgMHgwMDAwLAotCTB4MDE1OCwgMHhhMTg2LCAweDAwMDEsIDB4MDE1OCwgMHhhMTg2LCAweDAwMDIsIDB4MDE1OCwgMHhhMTg2LAotCTB4MDAwMywgMHgwMTU4LCAweDA4MDQsIDB4NTcxNCwgMHg3MDhiLCAweDAwMjIsIDB4MDA0MCwgMHg3MDhiLAotCTB4MDAyMSwgMHgwMDI4LCAweDcwOGIsIDB4MDAyMywgMHgwMDIwLCAweDcwOGIsIDB4MDAyNCwgMHg2MDQzLAotCTB4MDAwMCwgMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAxLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MjZjYiwgMHgwMDI2LCAweDIwMTEsIDB4MDAwMywgMHgwODBjLCAweDdhZGYsIDB4MjAxMSwgMHgwMDAyLAotCTB4MDgwYywgMHg3YWU5LCAweDAwMmUsIDB4NzAwMCwgMHhhMDhlLCAweDAwMDQsIDB4MDExOCwgMHg2MDJiLAotCTB4MDAyOCwgMHgwMDEwLCAweDYwMmIsIDB4MDAyMCwgMHgwMTU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjBhOSwgMHgwMDA1LCAweDYwMjQsIDB4ZDBhYywgMHgwMTE4LCAweDAxMmUsIDB4MDE1ZSwgMHgwNGQwLAotCTB4NjgwMCwgMHhhMDg0LCAweDAwYTAsIDB4YzBiZCwgMHg2ODAyLCAweDY5MDQsIDB4ZDFkNCwgMHgxMTMwLAotCTB4NjgwMywgMHgwMTAwLCAweDFmMDQsIDB4NTZlMiwgMHgwODBjLCAweDU3YTAsIDB4MDEyZSwgMHgwMTVlLAotCTB4MDgwYywgMHg1NzYxLCAweDAxYTgsIDB4NjA0NCwgMHhhMDA1LCAweDAxNjgsIDB4NjA1MCwgMHgwMDA2LAotCTB4YTA4NSwgMHgwMDIwLCAweDYwNTIsIDB4MDgwYywgMHg1N2EwLCAweGEwMDYsIDB4ODAwMSwgMHgxZGYwLAotCTB4MDAwZSwgMHg2MDUyLCAweDAwMjgsIDB4NjgwNCwgMHhkMGQ0LCAweDExMTAsIDB4MDgwYywgMHg1N2EwLAotCTB4MjAwMSwgMHhhZjllLCAweDIwMDMsIDB4MDAwNCwgMHgwODBjLCAweDU0ZTUsIDB4MDgwYywgMHg1NzYxLAotCTB4MDE0OCwgMHg2ODA0LCAweGQwZDQsIDB4MTEzMCwgMHhkMGRjLCAweDExMDAsIDB4MjAwMSwgMHhhZjllLAotCTB4MjAwMywgMHgwMDAwLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LAotCTB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDIwNzEsIDB4YWQwMCwgMHgyMDAxLAotCTB4YWY5ZCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHhhZjhlLCAweDIwMDMsIDB4MDAwMCwgMHg3MDhiLAotCTB4MDAwMCwgMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAwLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLAotCTB4MjZjYiwgMHg2ODAzLCAweDAwMDAsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHg2MDI3LAotCTB4ZmZmZiwgMHg2MDJiLCAweDE4MmYsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDA2LAotCTB4MjAwMSwgMHhhZjlkLCAweDIwMDQsIDB4YTA4NiwgMHhhYWFhLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LAotCTB4MjAwMSwgMHhhZDcxLCAweDIwMDQsIDB4YTA4NCwgMHgwMDMwLCAweGEwODYsIDB4MDAwMCwgMHgwMDBlLAotCTB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGEwODQsIDB4MDAzMCwgMHhhMDg2LAotCTB4MDAzMCwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweGFkNzEsIDB4MjAwNCwgMHhhMDg0LAotCTB4MDAzMCwgMHhhMDg2LCAweDAwMTAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHhhZDcxLAotCTB4MjAwNCwgMHhhMDg0LCAweDAwMzAsIDB4YTA4NiwgMHgwMDIwLCAweDAwMGUsIDB4MDAwNSwgMHgyMDAxLAotCTB4YWQwYywgMHgyMDA0LCAweGQwYTQsIDB4MDE3MCwgMHgwODBjLCAweDI2ZWIsIDB4MDAzNiwgMHgwMDE2LAotCTB4MjAwOSwgMHgwMDAwLCAweDIwMTksIDB4MDAyOCwgMHgwODBjLCAweDJhYWMsIDB4MDAxZSwgMHgwMDNlLAotCTB4YTAwNiwgMHgwMDA5LCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkMGMsIDB4MmUwNCwgMHgwMTE4LAotCTB4YTA4NSwgMHgwMDEwLCAweDAwMTAsIDB4YTA4NCwgMHhmZmVmLCAweDIwNzIsIDB4MDBlZSwgMHgwMDA1LAotCTB4NjA1MCwgMHgwMDA2LCAweDYwZjAsIDB4MDAwNiwgMHg2MGVjLCAweDAwMDYsIDB4NjAwYywgMHgwMDA2LAotCTB4NjAwNCwgMHgwMDA2LCAweDYwMjgsIDB4MDAwNiwgMHg2MDJmLCAweDAxMDAsIDB4NjAyZiwgMHgwMDAwLAotCTB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwMDBlLCAweDYwMmEsIDB4MDAwZSwgMHg2MDA2LAotCTB4MDAwZSwgMHg2MDBlLCAweDAwMGUsIDB4NjBlZSwgMHgwMDBlLCAweDYwZjIsIDB4NjBlMywgMHgwMDAwLAotCTB4Njg4NywgMHgwMDAxLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2Y2IsIDB4NjgwMCwgMHhhMDg0LAotCTB4MDBhMCwgMHhjMGJkLCAweDY4MDIsIDB4NjgwMywgMHgwMGEwLCAweDAwMGUsIDB4NjA1MiwgMHg2MDUwLAotCTB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAotCTB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLCAweGFkMDAsIDB4NjAyMCwgMHhhMDg0LAotCTB4MDA4MCwgMHgwMTM4LCAweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGMxYmQsIDB4MjEwMiwgMHgwODA0LAotCTB4NTg0NSwgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywgMHhjMWJjLCAweDIxMDIsIDB4NjAyOCwgMHhhMDg0LAotCTB4ZTFmZiwgMHg2MDJhLCAweDYwMjcsIDB4MDIwMCwgMHg2ODAzLCAweDAwOTAsIDB4MjBhOSwgMHgwMzg0LAotCTB4NjAyNCwgMHhkMGNjLCAweDE1MTgsIDB4MWQwNCwgMHg1N2Y4LCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LAotCTB4NTdmOCwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg3YWRmLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLAotCTB4N2FlOSwgMHgwODBjLCAweDc5ZTEsIDB4MDgwYywgMHg2NTgxLCAweDIwMTksIDB4MDAwMCwgMHgwODBjLAotCTB4N2E2NCwgMHg2ODAzLCAweDAwYTAsIDB4MjAwMSwgMHhhZjllLCAweDIwMDMsIDB4MDAwMSwgMHgyMDAxLAotCTB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4YTA4NSwgMHgwMDAxLCAweDA0MzgsIDB4NjBlMywgMHgwMDAwLAotCTB4MjAwMSwgMHhhZjhlLCAweDIwMDQsIDB4MDgwYywgMHgyNmNiLCAweDYwZTIsIDB4NjgwMywgMHgwMDgwLAotCTB4MjBhOSwgMHgwMzg0LCAweDYwMjcsIDB4MWUwMCwgMHgyMDA5LCAweDFlMDAsIDB4ZTAwMCwgMHg2MDI0LAotCTB4YTEwYywgMHgwMTM4LCAweDFkMDQsIDB4NTgyYSwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHg1ODJhLAotCTB4MDg0MCwgMHg2MDI4LCAweGEwODUsIDB4MWUwMCwgMHg2MDJhLCAweDcwYTAsIDB4YTAwNSwgMHgxMTE4LAotCTB4Njg4NywgMHgwMDAxLCAweDAwMDgsIDB4Njg4NiwgMHhhMDA2LCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLAotCTB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LAotCTB4MDAzNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHhhZDAwLAotCTB4MjA2OSwgMHgwMTQwLCAweDYwMjAsIDB4YTA4NCwgMHgwMGMwLCAweDAxMjAsIDB4Njg4NCwgMHhhMDA1LAotCTB4MTkwNCwgMHg1OGExLCAweDY4MDMsIDB4MDA4OCwgMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAwLAotCTB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4MjZjYiwgMHgyMDY5LCAweDAyMDAsIDB4NjgwNCwgMHhhMDA1LAotCTB4MTExOCwgMHg2ODA4LCAweGEwMDUsIDB4MDFjMCwgMHg2MDI4LCAweGEwODQsIDB4ZmJmZiwgMHg2MDJhLAotCTB4NjAyNywgMHgwNDAwLCAweDIwNjksIDB4YWZhYywgMHg3MDAwLCAweDIwNmEsIDB4NzA4YiwgMHgwMDI2LAotCTB4NzAwMywgMHgwMDAxLCAweDIwYTksIDB4MDAwMiwgMHgxZDA0LCAweDU4ODQsIDB4MjA5MSwgMHg2MDAwLAotCTB4MWYwNCwgMHg1ODg0LCAweDA4MDQsIDB4NThkMiwgMHgyMDY5LCAweDAxNDAsIDB4MjBhOSwgMHgwMzg0LAotCTB4NjAyNywgMHgxZTAwLCAweDIwMDksIDB4MWUwMCwgMHhlMDAwLCAweDYwMjQsIDB4YTEwYywgMHgwNTMwLAotCTB4YTA4NCwgMHgxYTAwLCAweDE1MTgsIDB4MWQwNCwgMHg1ODkwLCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LAotCTB4NTg5MCwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg3YWRmLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLAotCTB4N2FlOSwgMHgwODBjLCAweDc5ZTEsIDB4MDgwYywgMHg2NTgxLCAweDIwMTksIDB4MDAwMCwgMHgwODBjLAotCTB4N2E2NCwgMHg2ODAzLCAweDAwYTAsIDB4MjAwMSwgMHhhZjllLCAweDIwMDMsIDB4MDAwMSwgMHgyMDAxLAotCTB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4YTA4NSwgMHgwMDAxLCAweDAwYTAsIDB4NjgwMywgMHgwMDgwLAotCTB4MjA2OSwgMHgwMTQwLCAweDYwZTMsIDB4MDAwMCwgMHg3MGEwLCAweGEwMDUsIDB4MTExOCwgMHg2ODg3LAotCTB4MDAwMSwgMHgwMDA4LCAweDY4ODYsIDB4MjAwMSwgMHhhZjhlLCAweDIwMDQsIDB4MDgwYywgMHgyNmNiLAotCTB4NjBlMiwgMHhhMDA2LCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LAotCTB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHhhZDAwLCAweDYwMjAsIDB4YTA4NCwgMHgwMGMwLAotCTB4MDFmMCwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg3YWRmLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLAotCTB4N2FlOSwgMHgwODBjLCAweDc5ZTEsIDB4MDgwYywgMHg2NTgxLCAweDIwMTksIDB4MDAwMCwgMHgwODBjLAotCTB4N2E2NCwgMHgyMDY5LCAweDAxNDAsIDB4NjgwMywgMHgwMGEwLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLAotCTB4MDAwMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweDA4MDQsIDB4NTk3MiwgMHgyMDAxLAotCTB4YWQwYywgMHgyMDBjLCAweGQxYjQsIDB4MTE1MCwgMHhjMWI1LCAweDIxMDIsIDB4MDgwYywgMHg1NjYzLAotCTB4MjA2OSwgMHgwMTQwLCAweDY4MDMsIDB4MDA4MCwgMHg2MGUzLCAweDAwMDAsIDB4MjA2OSwgMHgwMjAwLAotCTB4NjgwNCwgMHhhMDA1LCAweDExMTgsIDB4NjgwOCwgMHhhMDA1LCAweDAxYjgsIDB4NjAyOCwgMHhhMDg0LAotCTB4ZmRmZiwgMHg2MDJhLCAweDYwMjcsIDB4MDIwMCwgMHgyMDY5LCAweGFmYWMsIDB4NzAwMCwgMHgyMDZhLAotCTB4NzA4YiwgMHgwMDI3LCAweDcwMDMsIDB4MDAwMSwgMHgyMGE5LCAweDAwMDIsIDB4MWQwNCwgMHg1OTJlLAotCTB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NTkyZSwgMHgwNGU4LCAweDYwMjcsIDB4MWUwMCwgMHgyMDA5LAotCTB4MWUwMCwgMHhlMDAwLCAweDYwMjQsIDB4YTEwYywgMHgwMWM4LCAweGEwODQsIDB4MWMwMCwgMHgxMWIwLAotCTB4MWQwNCwgMHg1OTM1LCAweDAwMDYsIDB4MDAxNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwODBjLAotCTB4NjRhMiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMGUsIDB4MDBlNiwgMHgyMDcxLAotCTB4YWZkYSwgMHg3MDE4LCAweDAwZWUsIDB4YTAwNSwgMHgxZDAwLCAweDAxZTAsIDB4MDAyNiwgMHgyMDExLAotCTB4NTY2ZSwgMHgwODBjLCAweDY1MGQsIDB4MDAyZSwgMHgyMDY5LCAweDAxNDAsIDB4NjBlMywgMHgwMDAwLAotCTB4NzBhMCwgMHhhMDA1LCAweDExMTgsIDB4Njg4NywgMHgwMDAxLCAweDAwMDgsIDB4Njg4NiwgMHgyMDAxLAotCTB4YWY4ZSwgMHgyMDA0LCAweDA4MGMsIDB4MjZjYiwgMHg2MGUyLCAweDIwMDEsIDB4YWQwYywgMHgyMDBjLAotCTB4YzFiNCwgMHgyMTAyLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMGM2LAotCTB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHhhZDAwLCAweDcxMzAsIDB4ZDE4NCwgMHgxMTgwLAotCTB4MjAxMSwgMHhhZDUyLCAweDIyMTQsIDB4ZDJlYywgMHgwMTM4LCAweGMxOGQsIDB4NzEzMiwgMHgyMDExLAotCTB4YWQ1MiwgMHgyMjE0LCAweGQyYWMsIDB4MTEyMCwgMHg3MDMwLCAweGQwOGMsIDB4MDkwNCwgMHg1OWRmLAotCTB4NzEzMCwgMHhjMTg1LCAweDcxMzIsIDB4MjAxMSwgMHhhZDUyLCAweDIyMGMsIDB4ZDFhNCwgMHgwNTMwLAotCTB4MDAxNiwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMTAwLCAweDA4MGMsIDB4NjYzZiwgMHgyMDE5LAotCTB4MDAwZSwgMHgwODBjLCAweGE4ZWIsIDB4MDE1NiwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLAotCTB4YTE4NiwgMHgwMDdlLCAweDAxNzAsIDB4YTE4NiwgMHgwMDgwLCAweDAxNTgsIDB4MDgwYywgMHg0Y2RjLAotCTB4MTE0MCwgMHg4MTI3LCAweGEwMDYsIDB4MDAxNiwgMHgyMDA5LCAweDAwMGUsIDB4MDgwYywgMHhhOTZjLAotCTB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4NTliMCwgMHgwMTVlLCAweDAwMWUsIDB4ZDFhYywgMHgxMTQ4LAotCTB4MDAxNiwgMHgyMDA5LCAweDAwMDAsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4MmFhYywgMHgwMDFlLAotCTB4MDA3MCwgMHgwMTU2LCAweDIwYTksIDB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHg0Y2RjLAotCTB4MTExMCwgMHgwODBjLCAweDQ5M2EsIDB4ODEwOCwgMHgxZjA0LCAweDU5ZDYsIDB4MDE1ZSwgMHgyMDExLAotCTB4MDAwMywgMHgwODBjLCAweDdhZGYsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsIDB4N2FlOSwgMHgwODBjLAotCTB4NzllMSwgMHgwODBjLCAweDY1ODEsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywgMHg3YTY0LAotCTB4MDAzZSwgMHg2MGUzLCAweDAwMDAsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwgMHgwODBjLAotCTB4NTY5YSwgMHgwMGVlLCAweDAwY2UsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMTVlLAotCTB4MDAwNSwgMHgyMDcxLCAweGFkZTEsIDB4NzAwMywgMHgwMDAwLCAweDcwMDcsIDB4MDAwMCwgMHg3MDBmLAotCTB4MDAwMCwgMHg3MDJiLCAweDAwMDEsIDB4NzA0ZiwgMHgwMDAwLCAweDcwNTMsIDB4MDAwMSwgMHg3MDVmLAotCTB4MDAyMCwgMHg3MDYzLCAweDAwNDAsIDB4NzA4MywgMHgwMDAwLCAweDcwOGIsIDB4MDAwMCwgMHg3MDhmLAotCTB4MDAwMSwgMHg3MGJmLCAweDAwMDAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWRlMSwgMHg2ODQ4LAotCTB4YTAwNSwgMHgxMTMwLCAweDcwMjgsIDB4YzA4NSwgMHg3MDJhLCAweGEwODUsIDB4MDAwMSwgMHgwNDI4LAotCTB4NmE1MCwgMHg3MjM2LCAweDZiNTQsIDB4NzMzYSwgMHg2ODU4LCAweDcwM2UsIDB4NzA3YSwgMHg2ODVjLAotCTB4NzA0MiwgMHg3MDdlLCAweDY4NDgsIDB4NzAyZSwgMHg2ODQwLCAweDcwMzIsIDB4MjAwOSwgMHgwMDBjLAotCTB4MjAwYSwgMHg4MDA3LCAweDgwMDYsIDB4ODAwNiwgMHhhMDhjLCAweDAwM2YsIDB4YTA4NCwgMHhmZmMwLAotCTB4YTIxMCwgMHgyMTAwLCAweGEzMTksIDB4NzI3MiwgMHg3Mzc2LCAweDcwMjgsIDB4YzA4NCwgMHg3MDJhLAotCTB4NzAwNywgMHgwMDAxLCAweDcwMGYsIDB4MDAwMCwgMHhhMDA2LCAweDAwZWUsIDB4MDAwNSwgMHgyYjc4LAotCTB4MjA3MSwgMHhhZGUxLCAweDcwMDQsIDB4MDA0MywgMHg3MDBjLCAweDAwMDIsIDB4NWE1YiwgMHg1YTUyLAotCTB4NWE1MiwgMHg1YTUyLCAweDVhNTIsIDB4MDAwNSwgMHg1YWIxLCAweDVhYjIsIDB4NWFlNCwgMHg1YWU1LAotCTB4NWFhZiwgMHg1YjMzLCAweDViMzgsIDB4NWI2OSwgMHg1YjZhLCAweDViODUsIDB4NWI4NiwgMHg1Yjg3LAotCTB4NWI4OCwgMHg1Yjg5LCAweDViOGEsIDB4NWM0MCwgMHg1YzY3LCAweDcwMGMsIDB4MDAwMiwgMHg1YTc0LAotCTB4NWFhZiwgMHg1YWFmLCAweDVhYjAsIDB4NWFiMCwgMHg3ODMwLCAweDc5MzAsIDB4YTEwNiwgMHgwMTIwLAotCTB4NzgzMCwgMHg3OTMwLCAweGExMDYsIDB4MTUxMCwgMHg3MDMwLCAweGExMGEsIDB4MDFmOCwgMHgxMjEwLAotCTB4NzEyYywgMHhhMTBhLCAweGExOGEsIDB4MDAwMiwgMHgxMmQwLCAweDA4MGMsIDB4MTVjMCwgMHgwMWIwLAotCTB4MmQwMCwgMHg3MDVhLCAweDcwNjMsIDB4MDA0MCwgMHgyMDAxLCAweDAwMDMsIDB4NzA1NywgMHgwMDAwLAotCTB4MDEyNiwgMHgwMDA2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweGFmZWMsIDB4MjEwNCwgMHhjMDg1LAotCTB4MjAwYSwgMHgwMDBlLCAweDcwMGUsIDB4MDEyZSwgMHgwODBjLCAweDE2M2MsIDB4MDAwNSwgMHgwODBjLAotCTB4MTVjMCwgMHgwZGUwLCAweDJkMDAsIDB4NzA1YSwgMHgwODBjLCAweDE1YzAsIDB4MTEwOCwgMHgwYzEwLAotCTB4MmQwMCwgMHg3MDg2LCAweDcwNjMsIDB4MDA4MCwgMHgyMDAxLCAweDAwMDQsIDB4MDhmOCwgMHgwMDA1LAotCTB4MDAwNSwgMHgwMDA1LCAweDcwMGMsIDB4MDAwMiwgMHg1YWI5LCAweDVhYmMsIDB4NWFjYSwgMHg1YWUzLAotCTB4NWFlMywgMHgwODBjLCAweDVhNmQsIDB4MDAwNSwgMHgwMTI2LCAweDgwMDEsIDB4NzAwZSwgMHg3MDU4LAotCTB4MDAwNiwgMHgwODBjLCAweDVmOTAsIDB4MDEyMCwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg1YTZkLAotCTB4MDBkZSwgMHgwMDQ4LCAweDAxMjYsIDB4ODAwMSwgMHg3MDBlLCAweDA4MGMsIDB4NWY5MCwgMHg3MDU4LAotCTB4MjA2OCwgMHg3MDg0LCAweDcwNWEsIDB4NjgwMywgMHgwMDAwLCAweDY4MDcsIDB4MDAwMCwgMHg2ODM0LAotCTB4YTA4NCwgMHgwMGZmLCAweGEwOGEsIDB4MDAzYSwgMHgxMjE4LCAweDAwZGIsIDB4MDEyZSwgMHgwMDA1LAotCTB4MDEyZSwgMHgwODBjLCAweDViOGIsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAotCTB4YWRlMSwgMHg3MDBjLCAweDAwMDIsIDB4NWFmMCwgMHg1YWYwLCAweDVhZjAsIDB4NWFmMiwgMHg1YWY1LAotCTB4MDBlZSwgMHgwMDA1LCAweDcwMGYsIDB4MDAwMSwgMHgwMDEwLCAweDcwMGYsIDB4MDAwMiwgMHgwMGVlLAotCTB4MDAwNSwgMHg1YjhiLCAweDViOGIsIDB4NWJhNywgMHg1YjhiLCAweDVkMjIsIDB4NWI4YiwgMHg1YjhiLAotCTB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWJhNywgMHg1ZDY0LCAweDVkYTcsIDB4NWRmMCwgMHg1ZTA0LAotCTB4NWI4YiwgMHg1YjhiLCAweDViYzMsIDB4NWJhNywgMHg1YjhiLCAweDViOGIsIDB4NWMxZCwgMHg1ZWFkLAotCTB4NWVjOCwgMHg1YjhiLCAweDViYzMsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YzEzLAotCTB4NWVjOCwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLAotCTB4NWI4YiwgMHg1YjhiLCAweDViZDcsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLAotCTB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLAotCTB4NWI4YiwgMHg1YjhiLCAweDViZWMsIDB4NzAyMCwgMHgyMDY4LCAweDA4MGMsIDB4MTVmMCwgMHgwMDA1LAotCTB4NzAwYywgMHgwMDAyLCAweDViM2YsIDB4NWI0MiwgMHg1YjUwLCAweDViNjgsIDB4NWI2OCwgMHgwODBjLAotCTB4NWE2ZCwgMHgwMDA1LCAweDAxMjYsIDB4ODAwMSwgMHg3MDBlLCAweDcwNTgsIDB4MDAwNiwgMHgwODBjLAotCTB4NWY5MCwgMHgwMTIwLCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDVhNmQsIDB4MDBkZSwgMHgwMDQ4LAotCTB4MDEyNiwgMHg4MDAxLCAweDcwMGUsIDB4MDgwYywgMHg1ZjkwLCAweDcwNTgsIDB4MjA2OCwgMHg3MDg0LAotCTB4NzA1YSwgMHg2ODAzLCAweDAwMDAsIDB4NjgwNywgMHgwMDAwLCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4YSwgMHgwMDFhLCAweDEyMTgsIDB4MDAzYiwgMHgwMTJlLCAweDAwMDUsIDB4MDEyZSwgMHgwNDE5LAotCTB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4NWI4YiwgMHg1YmE3LCAweDVkMGUsIDB4NWI4YiwgMHg1YmE3LAotCTB4NWI4YiwgMHg1YmE3LCAweDViYTcsIDB4NWI4YiwgMHg1YmE3LCAweDVkMGUsIDB4NWJhNywgMHg1YmE3LAotCTB4NWJhNywgMHg1YmE3LCAweDViYTcsIDB4NWI4YiwgMHg1YmE3LCAweDVkMGUsIDB4NWI4YiwgMHg1YjhiLAotCTB4NWJhNywgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YmE3LCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAotCTB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4NzAwNywgMHgwMDAxLCAweDY4MzgsIDB4YTA4NCwgMHgwMGZmLAotCTB4YzBkNSwgMHg2ODNhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NTEwYywgMHgwMTJlLAotCTB4MDAwNSwgMHg3MDA3LCAweDAwMDEsIDB4NjgzOCwgMHhhMDg0LCAweDAwZmYsIDB4YzBlNSwgMHg2ODNhLAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MDAwNSwgMHg3MDA3LAotCTB4MDAwMSwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwgMHhjMGVkLCAweDY4M2EsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMSwgMHg2ODM4LAotCTB4YTA4NCwgMHgwMGZmLCAweGMwZGQsIDB4NjgzYSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLAotCTB4NTEwYywgMHgwMTJlLCAweDAwMDUsIDB4NjgzNCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwgMHgwOTg4LAotCTB4ODAwMSwgMHgxMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwODA0LCAweDVjZDAsIDB4NzAwNywgMHgwMDA2LAotCTB4NzAxMiwgMHgyZDAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDVjZDAsIDB4MDAwNSwgMHg2ODM0LAotCTB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MDkwNCwgMHg1Yjk5LCAweDgwMDEsIDB4MTEyMCwgMHg3MDA3LAotCTB4MDAwMSwgMHgwODA0LCAweDVjZWQsIDB4NzAwNywgMHgwMDA2LCAweDcwMTIsIDB4MmQwMCwgMHg3MDE2LAotCTB4NzAxYSwgMHg3MDRiLCAweDVjZWQsIDB4MDAwNSwgMHg2ODM0LCAweDgwMDcsIDB4YTA4NCwgMHgwMGZmLAotCTB4YTA4NiwgMHgwMDAxLCAweDE5MDQsIDB4NWI5OSwgMHg3MDA3LCAweDAwMDEsIDB4MjAwOSwgMHhhZDMwLAotCTB4MjEwYywgMHg4MWZmLCAweDExYTgsIDB4NjgzOCwgMHhhMDg0LCAweDAwZmYsIDB4NjgzYSwgMHg2ODUzLAotCTB4MDAwMCwgMHgwODBjLCAweDRhYjEsIDB4MTEwOCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjgzNywgMHgwMTM5LCAweDY4NGEsIDB4Njk1MiwgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwgMHgwY2EwLAotCTB4MjAwMSwgMHgwMDI4LCAweDBjOTAsIDB4Njg0YywgMHhhMDg0LCAweDAwYzAsIDB4YTA4NiwgMHgwMGMwLAotCTB4MTEyMCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg1ZWUwLCAweDJkMDAsIDB4NzAxNiwgMHg3MDFhLAotCTB4MjBhOSwgMHgwMDA0LCAweGEwODAsIDB4MDAyNCwgMHgyMDk4LCAweDIwYTEsIDB4YWUwYywgMHg1M2EzLAotCTB4Njg1OCwgMHg3MDEyLCAweGEwODIsIDB4MDQwMSwgMHgxYTA0LCAweDViYjUsIDB4NmE4NCwgMHhhMjhhLAotCTB4MDAwMiwgMHgxYTA0LCAweDViYjUsIDB4ODJmZiwgMHgxMTM4LCAweDY4ODgsIDB4Njk4YywgMHhhMTA1LAotCTB4MDExOCwgMHgyMDAxLCAweDVjYTMsIDB4MDAxOCwgMHhhMjgwLCAweDVjOTksIDB4MjAwNSwgMHg3MGM2LAotCTB4NzAxMCwgMHhhMDE1LCAweDA5MDQsIDB4NWM4NSwgMHgwODBjLCAweDE1YzAsIDB4MTExOCwgMHg3MDA3LAotCTB4MDAwZiwgMHgwMDA1LCAweDJkMDAsIDB4NzAyMiwgMHg3MGM0LCAweDIwNjAsIDB4MmMwNSwgMHg2ODM2LAotCTB4ZTAwNCwgMHhhZDAwLCAweDcwOTYsIDB4ZTAwOCwgMHhhMjBhLCAweDEyMTAsIDB4YTAwZSwgMHgyMjAwLAotCTB4NzExMiwgMHhlMjBjLCAweDgwMDMsIDB4ODAwYiwgMHhhMjk2LCAweDAwMDQsIDB4MDEwOCwgMHhhMTA4LAotCTB4NzE5YSwgMHg4MTBiLCAweDcxOWUsIDB4YWU5MCwgMHgwMDIyLCAweDA4MGMsIDB4MTYyNCwgMHg3MDkwLAotCTB4YTA4ZSwgMHgwMTAwLCAweDAxNzAsIDB4YTA4NiwgMHgwMjAwLCAweDAxMTgsIDB4NzAwNywgMHgwMDEwLAotCTB4MDAwNSwgMHg3MDIwLCAweDIwNjgsIDB4MDgwYywgMHgxNWYwLCAweDcwMTQsIDB4MjA2OCwgMHgwODA0LAotCTB4NWJiNSwgMHg3MDIwLCAweDIwNjgsIDB4NzAxOCwgMHg2ODAyLCAweDY4MDcsIDB4MDAwMCwgMHgyZDA4LAotCTB4MjA2OCwgMHg2OTA2LCAweDcxMWEsIDB4MDgwNCwgMHg1YzQwLCAweDcwMTQsIDB4MjA2OCwgMHg3MDA3LAotCTB4MDAwMSwgMHg2ODg0LCAweGEwMDUsIDB4MTEyOCwgMHg2ODg4LCAweDY5OGMsIDB4YTEwNSwgMHgwMTA4LAotCTB4MDBiMSwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMWUsIDB4MDkwNCwgMHg1ZWUwLAotCTB4MDRiOCwgMHg1YzliLCAweDVjOWYsIDB4MDAwMiwgMHgwMDExLCAweDAwMDcsIDB4MDAwNCwgMHgwMDBhLAotCTB4MDAwZiwgMHgwMDA1LCAweDAwMDYsIDB4MDAwYSwgMHgwMDExLCAweDAwMDUsIDB4MDAwNCwgMHgwMGY2LAotCTB4MDBlNiwgMHgwMGM2LCAweDAwNzYsIDB4MDA2NiwgMHg2Zjg4LCAweDZlOGMsIDB4NjgwNCwgMHgyMDYwLAotCTB4YWNmMCwgMHgwMDIxLCAweGFjZjgsIDB4MDAyNywgMHgyMDA5LCAweDAwMDUsIDB4NzAwYywgMHg3ODE2LAotCTB4NzAwOCwgMHg3ODEyLCAweDcwMDQsIDB4NzgwNiwgMHg3MDAwLCAweDc4MDIsIDB4N2UwZSwgMHg3ZjBhLAotCTB4ODEwOSwgMHgwMTI4LCAweGFlZjIsIDB4MDAwNCwgMHhhZmZhLCAweDAwMDYsIDB4MGM3OCwgMHg2MDA0LAotCTB4YTA2NSwgMHgxZDMwLCAweDAwNmUsIDB4MDA3ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MjAwOSwgMHhhZDMwLCAweDIxMGMsIDB4ODFmZiwgMHgxMTk4LCAweDY4MzgsIDB4YTA4NCwgMHgwMGZmLAotCTB4NjgzYSwgMHgwODBjLCAweDQ5OTMsIDB4MTEwOCwgMHgwMDA1LCAweDA4MGMsIDB4NTFkZiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OTdmZCwgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwgMHgwY2EwLAotCTB4MjAwMSwgMHgwMDI4LCAweDIwMDksIDB4MDAwMCwgMHgwYzgwLCAweDIwMDksIDB4YWQzMCwgMHgyMTBjLAotCTB4ODFmZiwgMHgxMWIwLCAweDY4NTgsIDB4YTAwNSwgMHgwMWIwLCAweDY4MzgsIDB4YTA4NCwgMHgwMGZmLAotCTB4NjgzYSwgMHg2ODUzLCAweDAwMDAsIDB4MDgwYywgMHg0YTU1LCAweDExMDgsIDB4MDAwNSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NTFkZiwgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwgMHgwY2IwLAotCTB4MjAwMSwgMHgwMDI4LCAweDBjYTAsIDB4MjAwMSwgMHgwMDAwLCAweDBjODgsIDB4NzAxOCwgMHg2ODAyLAotCTB4MmQwOCwgMHgyMDY4LCAweDY5MDYsIDB4NzExYSwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHgwMTE4LAotCTB4NzAwNywgMHgwMDA2LCAweDAwMzAsIDB4NzAxNCwgMHgyMDY4LCAweDcwMDcsIDB4MDAwMSwgMHg3MDQ4LAotCTB4MDgwZiwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMSwgMHg2OTQ0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLAotCTB4Njg0OCwgMHhhMDg0LCAweDAwZmYsIDB4MjBhOSwgMHgwMDAxLCAweGEwOTYsIDB4MDAwMSwgMHgwMWIwLAotCTB4MjAwOSwgMHgwMDAwLCAweDIwYTksIDB4MDBmZiwgMHhhMDk2LCAweDAwMDIsIDB4MDE3OCwgMHhhMDA1LAotCTB4MTFmMCwgMHg2OTQ0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDA4MGMsIDB4NGNkYywgMHgxMWI4LAotCTB4MDA2NiwgMHg2ZTUwLCAweDA4MGMsIDB4NGRjZiwgMHgwMDZlLCAweDAwODgsIDB4MDA0NiwgMHgyMDExLAotCTB4YWQwYywgMHgyMjI0LCAweGM0ODQsIDB4MjQxMiwgMHgwMDRlLCAweDAwYzYsIDB4MDgwYywgMHg0Y2RjLAotCTB4MTExMCwgMHgwODBjLCAweDRmMmQsIDB4ODEwOCwgMHgxZjA0LCAweDVkNGUsIDB4MDBjZSwgMHg2ODRjLAotCTB4ZDA4NCwgMHgxMTE4LCAweDA4MGMsIDB4MTVmMCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LAotCTB4MDAwMSwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwgMHhkMGE0LCAweDA1ODAsIDB4MjA2MSwgMHhiMDQ4LAotCTB4NjEwMCwgMHhkMTg0LCAweDAxNzgsIDB4Njg1OCwgMHhhMDg0LCAweDAwZmYsIDB4MTU1MCwgMHg2MDAwLAotCTB4ZDA4NCwgMHgwNTIwLCAweDYwMDQsIDB4YTAwNSwgMHgxNTM4LCAweDYwMDMsIDB4MDAwMCwgMHg2MDBiLAotCTB4MDAwMCwgMHgwMGM4LCAweDIwMTEsIDB4MDAwMSwgMHg2ODYwLCAweGEwMDUsIDB4MTExMCwgMHgyMDAxLAotCTB4MDAxZSwgMHg4MDAwLCAweDYwMTYsIDB4Njg1OCwgMHhhMDg0LCAweDAwZmYsIDB4MDE3OCwgMHg2MDA2LAotCTB4Njg1OCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwgMHgwMTQ4LCAweDYwMGEsIDB4Njg1OCwgMHg4MDAwLAotCTB4MTEwOCwgMHhjMjhkLCAweDYyMDIsIDB4MDEyZSwgMHgwODA0LCAweDVmN2YsIDB4MDEyZSwgMHgwODA0LAotCTB4NWY3OSwgMHgwMTJlLCAweDA4MDQsIDB4NWY3MywgMHgwMTJlLCAweDA4MDQsIDB4NWY3NiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwgMHhkMGE0LAotCTB4MDVlMCwgMHgyMDYxLCAweGIwNDgsIDB4NjAwMCwgMHhkMDg0LCAweDA1YjgsIDB4NjIwNCwgMHg2MzA4LAotCTB4ZDA4YywgMHgxNTMwLCAweDZjNDgsIDB4YTQ4NCwgMHgwMDAzLCAweDAxNzAsIDB4Njk1OCwgMHhhMThjLAotCTB4MDBmZiwgMHg4MDAxLCAweDExMjAsIDB4MjEwMCwgMHhhMjEwLCAweDA2MjAsIDB4MDAyOCwgMHg4MDAxLAotCTB4MTUwOCwgMHgyMTAwLCAweGEyMTIsIDB4MDJmMCwgMHhhNDg0LCAweDAwMGMsIDB4MDE4OCwgMHg2OTU4LAotCTB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4YTA4MiwgMHgwMDA0LCAweDExMjAsIDB4MjEwMCwgMHhhMzE4LAotCTB4MDI4OCwgMHgwMDMwLCAweGEwODIsIDB4MDAwNCwgMHgxMTY4LCAweDIxMDAsIDB4YTMxYSwgMHgwMjUwLAotCTB4Njg2MCwgMHhhMDA1LCAweDAxMTAsIDB4ODAwMCwgMHg2MDE2LCAweDYyMDYsIDB4NjMwYSwgMHgwMTJlLAotCTB4MDgwNCwgMHg1ZjdmLCAweDAxMmUsIDB4MDgwNCwgMHg1ZjdjLCAweDAxMmUsIDB4MDgwNCwgMHg1Zjc5LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwNywgMHgwMDAxLCAweDIwNjEsIDB4YjA0OCwgMHg2MzAwLAotCTB4ZDM4YywgMHgxMTIwLCAweDYzMDgsIDB4ODMxOCwgMHgwMjIwLCAweDYzMGEsIDB4MDEyZSwgMHgwODA0LAotCTB4NWY4ZCwgMHgwMTJlLCAweDA4MDQsIDB4NWY3YywgMHgwMTI2LCAweDAwYzYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NzAwNywgMHgwMDAxLCAweDY4NGMsIDB4ZDBhYywgMHgwMTQ4LCAweDAwYzYsIDB4MjA2MSwgMHhiMDQ4LAotCTB4NjAwMCwgMHhhMDg0LCAweGZjZmYsIDB4NjAwMiwgMHgwMGNlLCAweDA0NDgsIDB4Njg1OCwgMHhhMDA1LAotCTB4MDVkMCwgMHg2ODVjLCAweGEwNjUsIDB4MDU5OCwgMHgyMDAxLCAweGFkMzAsIDB4MjAwNCwgMHhhMDA1LAotCTB4MDExOCwgMHgwODBjLCAweDk3NGUsIDB4MDA2OCwgMHg2MDEzLCAweDA0MDAsIDB4NjA1NywgMHgwMDAwLAotCTB4Njk0YywgMHhkMWE0LCAweDAxMTAsIDB4Njk1MCwgMHg2MTU2LCAweDIwMDksIDB4MDA0MSwgMHgwODBjLAotCTB4ODBhNywgMHg2OTU4LCAweGExOGMsIDB4ZmYwMCwgMHhhMTg2LCAweDIwMDAsIDB4MTE0MCwgMHgwMDI2LAotCTB4MjAwOSwgMHgwMDAwLCAweDIwMTEsIDB4ZmRmZiwgMHgwODBjLCAweDY2M2YsIDB4MDAyZSwgMHg2ODRjLAotCTB4ZDBjNCwgMHgwMTQ4LCAweDIwNjEsIDB4YjA0OCwgMHg2MDAwLCAweGQwOGMsIDB4MTEyMCwgMHg2MDA4LAotCTB4ODAwMCwgMHgwMjA4LCAweDYwMGEsIDB4MDBjZSwgMHgwMTJlLCAweDA4MDQsIDB4NWY3ZiwgMHgwMGNlLAotCTB4MDEyZSwgMHgwODA0LCAweDVmNzksIDB4Njk1NCwgMHhhMTg2LCAweDAwMmUsIDB4MGQ0MCwgMHhhMTg2LAotCTB4MDAyZCwgMHgwZDI4LCAweGExODYsIDB4MDA0NSwgMHgwNTEwLCAweGExODYsIDB4MDAyYSwgMHgxMTMwLAotCTB4MjAwMSwgMHhhZDBjLCAweDIwMGMsIDB4YzE5NCwgMHgyMTAyLCAweDA4YzgsIDB4YTE4NiwgMHgwMDIwLAotCTB4MDE3MCwgMHhhMTg2LCAweDAwMjksIDB4MWQxOCwgMHg2OTQ0LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4MDgwYywgMHg0Y2RjLCAweDE5NjAsIDB4NjAwMCwgMHhjMGU0LCAweDYwMDIsIDB4MDg0MCwgMHg2ODVjLAotCTB4YTA2NSwgMHgwOWE4LCAweDIwMDEsIDB4YWZhMywgMHgyMDA0LCAweDYwMTYsIDB4MDgwMCwgMHg2ODVjLAotCTB4YTA2NSwgMHgwOTY4LCAweDAwZTYsIDB4Njg2MCwgMHhhMDc1LCAweDIwMDEsIDB4YWQzMCwgMHgyMDA0LAotCTB4YTAwNSwgMHgwMTUwLCAweDA4MGMsIDB4OTc0ZSwgMHg4ZWZmLCAweDAxMTgsIDB4MmU2MCwgMHgwODBjLAotCTB4OTc0ZSwgMHgwMGVlLCAweDA4MDQsIDB4NWUzZiwgMHg2MDIwLCAweGMwZGMsIDB4YzBkNSwgMHg2MDIyLAotCTB4MmU2MCwgMHg2MDA3LCAweDAwM2EsIDB4Njg3MCwgMHhhMDA1LCAweDAxMzAsIDB4NjAwNywgMHgwMDNiLAotCTB4Njg3NCwgMHg2MDJhLCAweDY4NzgsIDB4NjAxMiwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2E4LAotCTB4MDgwYywgMHg2YzUwLCAweDAwZWUsIDB4MDgwNCwgMHg1ZTNmLCAweDIwNjEsIDB4YjA0OCwgMHg2MDAwLAotCTB4ZDA4NCwgMHgwMTkwLCAweGQwOGMsIDB4MTkwNCwgMHg1ZjhkLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjIwNCwgMHg4MjEwLCAweDAyMjAsIDB4NjIwNiwgMHgwMTJlLCAweDA4MDQsIDB4NWY4ZCwgMHgwMTJlLAotCTB4Njg1MywgMHgwMDE2LCAweDA4MDQsIDB4NWY4NiwgMHg2ODUzLCAweDAwMDcsIDB4MDgwNCwgMHg1Zjg2LAotCTB4NjgzNCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwgMHgxMTE4LCAweDA4MGMsIDB4NWI5OSwgMHgwMDc4LAotCTB4MjAzMCwgMHg4MDAxLCAweDExMjAsIDB4NzAwNywgMHgwMDAxLCAweDAwNTEsIDB4MDA0MCwgMHg3MDA3LAotCTB4MDAwNiwgMHg3MDEyLCAweDJkMDAsIDB4NzAxNiwgMHg3MDFhLCAweDcwNGIsIDB4NWVlMCwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweGFkMzAsIDB4MjEwYywgMHg4MWZmLAotCTB4MTkwNCwgMHg1ZjViLCAweDIwMDksIDB4YWQwYywgMHgyMTBjLCAweGQxOTQsIDB4MTkwNCwgMHg1ZjYzLAotCTB4Njg0OCwgMHgyMDcwLCAweGFlODIsIDB4YjQwMCwgMHgwYTA0LCAweDVmNGYsIDB4MjAwMSwgMHhhZDE2LAotCTB4MjAwNCwgMHhhZTAyLCAweDFhMDQsIDB4NWY0ZiwgMHgyMDYxLCAweGIwNDgsIDB4NjEwMCwgMHhhMTg0LAotCTB4MDMwMSwgMHhhMDg2LCAweDAwMDEsIDB4MTVhOCwgMHg3MTFjLCAweGExODYsIDB4MDAwNiwgMHgxNWIwLAotCTB4NzAxOCwgMHhhMDA1LCAweDA5MDQsIDB4NWY1YiwgMHgyMDA0LCAweGQwZTQsIDB4MTkwNCwgMHg1ZjVlLAotCTB4NzAyMCwgMHhkMGRjLCAweDE5MDQsIDB4NWY2NiwgMHg2ODUzLCAweDAwMDAsIDB4NjgwMywgMHgwMDAwLAotCTB4MmQwOCwgMHg3MDEwLCAweGEwMDUsIDB4MTE1OCwgMHg3MTEyLCAweDY4NGMsIDB4ZDBmNCwgMHgxOTA0LAotCTB4NWY2OSwgMHgyZTYwLCAweDA4MGMsIDB4NjVhYSwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDY4LAotCTB4NjgwMCwgMHhhMDA1LCAweDFkZTAsIDB4NjkwMiwgMHgyMTY4LCAweDY4NGMsIDB4ZDBmNCwgMHgxNWM4LAotCTB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDEyZSwgMHgwMGVlLCAweDY4NTMsIDB4MDAwNiwgMHgwODA0LAotCTB4NWY4NiwgMHhkMTg0LCAweDBkYzAsIDB4ZDFjNCwgMHgxMWE4LCAweDAwYjgsIDB4Njk0NCwgMHhhMThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweDA4MGMsIDB4NGNkYywgMHgxMWM4LCAweDYwMDAsIDB4ZDBlNCwgMHgxMWIwLAotCTB4NzExYywgMHhhMTg2LCAweDAwMDcsIDB4MTExOCwgMHg2ODUzLCAweDAwMDIsIDB4MDA4OCwgMHg2ODUzLAotCTB4MDAwOCwgMHgwMDcwLCAweDY4NTMsIDB4MDAwZSwgMHgwMDU4LCAweDY4NTMsIDB4MDAxNywgMHgwMDQwLAotCTB4Njg1MywgMHgwMDM1LCAweDAwMjgsIDB4Njg1MywgMHgwMDI4LCAweDAwMTAsIDB4Njg1MywgMHgwMDI5LAotCTB4MDEyZSwgMHgwMGVlLCAweDA0MTgsIDB4Njg1MywgMHgwMDJhLCAweDBjZDAsIDB4Njg1MywgMHgwMDQ1LAotCTB4MGNiOCwgMHgyZTYwLCAweDIwMTksIDB4MDAwMiwgMHg2MDE3LCAweDAwMTQsIDB4MDgwYywgMHhhNTY2LAotCTB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MjAwOSwgMHgwMDNlLCAweDAwNTgsIDB4MjAwOSwgMHgwMDA0LAotCTB4MDA0MCwgMHgyMDA5LCAweDAwMDYsIDB4MDAyOCwgMHgyMDA5LCAweDAwMTYsIDB4MDAxMCwgMHgyMDA5LAotCTB4MDAwMSwgMHg2ODU0LCAweGEwODQsIDB4ZmYwMCwgMHhhMTA1LCAweDY4NTYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4MTVmMCwgMHgwMDA1LAotCTB4NzAyYywgMHg3MTMwLCAweDgxMDgsIDB4YTEwMiwgMHgwMjMwLCAweGEwMGUsIDB4NzAzNCwgMHg3MDcyLAotCTB4NzAzOCwgMHg3MDc2LCAweDAwNTgsIDB4NzA3MCwgMHhhMDgwLCAweDAwNDAsIDB4NzA3MiwgMHgxMjMwLAotCTB4NzA3NCwgMHhhMDgxLCAweDAwMDAsIDB4NzA3NiwgMHhhMDg1LCAweDAwMDEsIDB4NzkzMiwgMHg3MTMyLAotCTB4MDAwNSwgMHgwMGQ2LCAweDA4MGMsIDB4NjVhMSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgyMDExLAotCTB4MDAwNCwgMHgyMjA0LCAweGEwODUsIDB4ODAwMiwgMHgyMDEyLCAweDAwZGUsIDB4MDAwNSwgMHgyMGUxLAotCTB4MDAwMiwgMHgzZDA4LCAweDIwZTEsIDB4MjAwMCwgMHgzZDAwLCAweGEwODQsIDB4NzAwMCwgMHgwMTE4LAotCTB4YTA4NiwgMHgxMDAwLCAweDE1NDAsIDB4MjBlMSwgMHgwMDAwLCAweDNkMDAsIDB4YTA5NCwgMHhmZjAwLAotCTB4ODIxNywgMHhhMDg0LCAweGYwMDAsIDB4YTA4NiwgMHgzMDAwLCAweDExMTgsIDB4MDgwYywgMHg2MWM2LAotCTB4MDBiMCwgMHgyMGUxLCAweDAwMDQsIDB4M2Q2MCwgMHhkMWJjLCAweDExMDgsIDB4M2U2MCwgMHhhYzg0LAotCTB4MDAwNywgMHgxMTg4LCAweGFjODIsIDB4YjQwMCwgMHgwMjcwLCAweDY4NTgsIDB4YWMwMiwgMHgxMjU4LAotCTB4NjEyMCwgMHhkMWY0LCAweDExNjAsIDB4MjAwOSwgMHgwMDQ3LCAweDA4MGMsIDB4ODBhNywgMHg3YTFjLAotCTB4ZDI4NCwgMHgxOTY4LCAweDAwMDUsIDB4YTAxNiwgMHgwODBjLCAweDE4MjQsIDB4MGNjMCwgMHgwY2Q4LAotCTB4NzgxYywgMHhkMDhjLCAweDA1MDAsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MjBlMSwgMHgzMDAwLAotCTB4M2QyMCwgMHgzZTI4LCAweGE1ODQsIDB4MDA3NiwgMHgxNTMwLCAweGE0ODQsIDB4NzAwMCwgMHhhMDg2LAotCTB4MTAwMCwgMHgxMWE4LCAweDA4MGMsIDB4NjA0ZSwgMHgwMWYwLCAweDIwZTEsIDB4MzAwMCwgMHg3ODI4LAotCTB4NzgyOCwgMHgwODBjLCAweDYwNmEsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MjAwOSwgMHhhZmNmLAotCTB4MjEwNCwgMHhhMDA1LCAweDExMDgsIDB4MDAwNSwgMHgwODBjLCAweDZjNTAsIDB4MGNlMCwgMHhhNDg0LAotCTB4NzAwMCwgMHgxNTE4LCAweDA0OTksIDB4MDFiOCwgMHg3MDAwLCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LAotCTB4ODEwMCwgMHgwZDE4LCAweDAwODAsIDB4ZDVhNCwgMHgwMTU4LCAweDA4MGMsIDB4MWQ4NiwgMHgyMGUxLAotCTB4OTAxMCwgMHgyMDAxLCAweDAxNjAsIDB4MjUwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMDQ4LAotCTB4MDBlOSwgMHg2ODgzLCAweDAwMDAsIDB4MDgwYywgMHhhYzU5LCAweDIwZTEsIDB4MzAwMCwgMHg3ODI4LAotCTB4NzgyOCwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwOGIwLCAweDAwODEsIDB4MTEzMCwgMHg3MDAwLAotCTB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4ODEwMCwgMHgxZDcwLCAweDA4MGMsIDB4YWM1OSwgMHgyMGUxLAotCTB4MzAwMCwgMHg3ODI4LCAweDc4MjgsIDB4MDgwYywgMHg2NDJkLCAweDBjNTgsIDB4YTQ4NCwgMHgwMWZmLAotCTB4Njg4MiwgMHhhMDA1LCAweDAxNjAsIDB4YTA4MCwgMHgwMDFmLCAweGEwODQsIDB4MDNmOCwgMHg4MGFjLAotCTB4MjBlMSwgMHgxMDAwLCAweDJlYTAsIDB4MjA5OSwgMHgwMjBhLCAweDUzYTUsIDB4MDAwNSwgMHgyMGE5LAotCTB4MDAwYywgMHgyMGUxLCAweDEwMDAsIDB4MmVhMCwgMHgyMDk5LCAweDAyMGEsIDB4NTNhNSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwY2EwLCAweDcwMDAsIDB4YTA4NCwgMHhmZjAwLCAweGEwOGMsIDB4ZjAwMCwgMHg4MDA3LAotCTB4YTE5NiwgMHgwMDAwLCAweDExMTgsIDB4MDgwNCwgMHg2MmNmLCAweDAwMDUsIDB4YTE5NiwgMHgyMDAwLAotCTB4MTE0OCwgMHg2OTAwLCAweGExOGUsIDB4MDAwMSwgMHgxMTE4LCAweDA4MGMsIDB4NDFkMSwgMHgwY2E4LAotCTB4MDAzOSwgMHgwYzk4LCAweGExOTYsIDB4ODAwMCwgMHgxZDgwLCAweDA4MGMsIDB4NjM3MiwgMHgwYzY4LAotCTB4MDBjNiwgMHg2YTgwLCAweDgyZmYsIDB4MDkwNCwgMHg2MWMwLCAweDcxMTAsIDB4YTE4YywgMHhmZjAwLAotCTB4ODEwZiwgMHhhMTk2LCAweDAwMDEsIDB4MDEyMCwgMHhhMTk2LCAweDAwMjMsIDB4MTkwNCwgMHg2MWMwLAotCTB4YTA4ZSwgMHgwMDIzLCAweDE1NzAsIDB4MDgwYywgMHg2NDA4LCAweDA5MDQsIDB4NjFjMCwgMHg3MTI0LAotCTB4NjEwYSwgMHg3MDMwLCAweGEwOGUsIDB4MDIwMCwgMHgxMTUwLCAweDcwMzQsIDB4YTAwNSwgMHgxOTA0LAotCTB4NjFjMCwgMHgyMDA5LCAweDAwMTUsIDB4MDgwYywgMHg4MGE3LCAweDA4MDQsIDB4NjFjMCwgMHhhMDhlLAotCTB4MDIxNCwgMHgwMTE4LCAweGEwOGUsIDB4MDIxMCwgMHgxMTMwLCAweDIwMDksIDB4MDAxNSwgMHgwODBjLAotCTB4ODBhNywgMHgwODA0LCAweDYxYzAsIDB4YTA4ZSwgMHgwMTAwLCAweDE5MDQsIDB4NjFjMCwgMHg3MDM0LAotCTB4YTAwNSwgMHgxOTA0LCAweDYxYzAsIDB4MjAwOSwgMHgwMDE2LCAweDA4MGMsIDB4ODBhNywgMHgwODA0LAotCTB4NjFjMCwgMHhhMDhlLCAweDAwMjIsIDB4MTkwNCwgMHg2MWMwLCAweDcwMzAsIDB4YTA4ZSwgMHgwMzAwLAotCTB4MTU4MCwgMHg2OGQwLCAweGQwYTQsIDB4MDUyOCwgMHhjMGI1LCAweDY4ZDIsIDB4NzEwMCwgMHhhMThjLAotCTB4MDBmZiwgMHg2OTZlLCAweDcwMDQsIDB4Njg3MiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg3OWU2LAotCTB4NzhlYSwgMHgwMDA2LCAweGEwODQsIDB4MDBmZiwgMHgwMDE2LCAweDIwMDgsIDB4MDgwYywgMHgyNmEwLAotCTB4NzkzMiwgMHg3OTM2LCAweDAwMWUsIDB4MDAwZSwgMHgwMGZlLCAweDA4MGMsIDB4MjY3NiwgMHg2OTRlLAotCTB4NzAzYywgMHgwMGU2LCAweDIwNzEsIDB4MDE0MCwgMHg3MDg2LCAweDIwNzEsIDB4YWQwMCwgMHg3MGEyLAotCTB4MDBlZSwgMHg3MDM0LCAweGEwMDUsIDB4MTkwNCwgMHg2MWMwLCAweDIwMDksIDB4MDAxNywgMHgwODA0LAotCTB4NjE5MywgMHhhMDhlLCAweDA0MDAsIDB4MTE1OCwgMHg3MDM0LCAweGEwMDUsIDB4MTkwNCwgMHg2MWMwLAotCTB4NjhkMCwgMHhjMGE1LCAweDY4ZDIsIDB4MjAwOSwgMHgwMDMwLCAweDA4MDQsIDB4NjE5MywgMHhhMDhlLAotCTB4MDUwMCwgMHgxMTQwLCAweDcwMzQsIDB4YTAwNSwgMHgxOTA0LCAweDYxYzAsIDB4MjAwOSwgMHgwMDE4LAotCTB4MDgwNCwgMHg2MTkzLCAweGEwOGUsIDB4MjAxMCwgMHgxMTIwLCAweDIwMDksIDB4MDAxOSwgMHgwODA0LAotCTB4NjE5MywgMHhhMDhlLCAweDIxMTAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMWEsIDB4MDgwNCwgMHg2MTkzLAotCTB4YTA4ZSwgMHg1MjAwLCAweDExNDAsIDB4NzAzNCwgMHhhMDA1LCAweDE5MDQsIDB4NjFjMCwgMHgyMDA5LAotCTB4MDAxYiwgMHgwODA0LCAweDYxOTMsIDB4YTA4ZSwgMHg1MDAwLCAweDExNDAsIDB4NzAzNCwgMHhhMDA1LAotCTB4MTkwNCwgMHg2MWMwLCAweDIwMDksIDB4MDAxYywgMHgwODA0LCAweDYxOTMsIDB4YTA4ZSwgMHgxMzAwLAotCTB4MTEyMCwgMHgyMDA5LCAweDAwMzQsIDB4MDgwNCwgMHg2MTkzLCAweGEwOGUsIDB4MTIwMCwgMHgxMTQwLAotCTB4NzAzNCwgMHhhMDA1LCAweDE5MDQsIDB4NjFjMCwgMHgyMDA5LCAweDAwMjQsIDB4MDgwNCwgMHg2MTkzLAotCTB4YTA4YywgMHhmZjAwLCAweGExOGUsIDB4MjQwMCwgMHgxMTE4LCAweDIwMDksIDB4MDAyZCwgMHgwNGQ4LAotCTB4YTA4YywgMHhmZjAwLCAweGExOGUsIDB4NTMwMCwgMHgxMTE4LCAweDIwMDksIDB4MDAyYSwgMHgwNDk4LAotCTB4YTA4ZSwgMHgwZjAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDIwLCAweDA0NjgsIDB4YTA4ZSwgMHg1MzAwLAotCTB4MTEwOCwgMHgwMGQ4LCAweGEwOGUsIDB4NjEwNCwgMHgxMWMwLCAweDIwMTEsIDB4YjI4ZCwgMHg4MjA4LAotCTB4MjIwNCwgMHhhMDgyLCAweDAwMDQsIDB4MjBhOCwgMHg5NWFjLCAweDk1YWMsIDB4MjAxMSwgMHg4MDE1LAotCTB4MjExYywgMHg4MTA4LCAweDAwNDYsIDB4MjEyNCwgMHgwODBjLCAweDNjNWMsIDB4MDA0ZSwgMHg4MTA4LAotCTB4MWYwNCwgMHg2MTc2LCAweDIwMDksIDB4MDAyMywgMHgwMDcwLCAweGEwOGUsIDB4NjAwMCwgMHgxMTE4LAotCTB4MjAwOSwgMHgwMDNmLCAweDAwNDAsIDB4YTA4ZSwgMHg3ODAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDQ1LAotCTB4MDAxMCwgMHgyMDA5LCAweDAwMWQsIDB4MDAxNiwgMHgyMDExLCAweGIyODMsIDB4MjIwNCwgMHg4MjExLAotCTB4MjIwYywgMHgwODBjLCAweDI2NzYsIDB4MTUzMCwgMHgwODBjLCAweDRjODAsIDB4MTUxOCwgMHg2NjEyLAotCTB4NjUxNiwgMHg4NmZmLCAweDAxODAsIDB4MDAxZSwgMHgwMDE2LCAweGExODYsIDB4MDAxNywgMHgxMTU4LAotCTB4Njg2YywgMHhhNjA2LCAweDExNDAsIDB4Njg3MCwgMHhhNTA2LCAweGEwODQsIDB4ZmYwMCwgMHgxMTE4LAotCTB4NjAwMCwgMHhjMGY1LCAweDYwMDIsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDE2OCwgMHgwMDFlLAotCTB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDAwMWUsIDB4MDgwYywgMHg4MGE3LAotCTB4MDBjZSwgMHgwMDA1LCAweDAwMWUsIDB4MGNlMCwgMHgwMGNlLCAweDBjZTAsIDB4MDBjNiwgMHgwMDQ2LAotCTB4MDgwYywgMHg2MjIxLCAweDE5MDQsIDB4NjIxZSwgMHhhMTg0LCAweGZmMDAsIDB4ODAwNywgMHhhMDg2LAotCTB4MDAwOCwgMHgxOTA0LCAweDYyMWUsIDB4YTI4ZSwgMHgwMDMzLCAweDExZTgsIDB4MDgwYywgMHg2NDA4LAotCTB4MDkwNCwgMHg2MjFlLCAweDcxMjQsIDB4NjEwYSwgMHg3MDMwLCAweGEwOGUsIDB4MDIwMCwgMHgxMTQwLAotCTB4NzAzNCwgMHhhMDA1LCAweDE1ZDgsIDB4MjAwOSwgMHgwMDE1LCAweDA4MGMsIDB4ODBhNywgMHgwNGIwLAotCTB4YTA4ZSwgMHgwMTAwLCAweDE1OTgsIDB4NzAzNCwgMHhhMDA1LCAweDE1ODAsIDB4MjAwOSwgMHgwMDE2LAotCTB4MDgwYywgMHg4MGE3LCAweDA0NTgsIDB4YTI4ZSwgMHgwMDMyLCAweDE1NDAsIDB4NzAzMCwgMHhhMDhlLAotCTB4MTQwMCwgMHgxNTIwLCAweDIwMDksIDB4MDAzOCwgMHgwMDE2LCAweDIwMTEsIDB4YjI4MywgMHgyMjA0LAotCTB4ODIxMSwgMHgyMjBjLCAweDA4MGMsIDB4MjY3NiwgMHgxMWMwLCAweDA4MGMsIDB4NGM4MCwgMHgxMWE4LAotCTB4NjYxMiwgMHg2NTE2LCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAxNzAsIDB4MDAxZSwgMHg2MTFhLAotCTB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4MDAxZSwgMHgwODBjLAotCTB4ODBhNywgMHgwODBjLCAweDZjNTAsIDB4MDAxMCwgMHgwMGNlLCAweDAwMWUsIDB4MDA0ZSwgMHgwMGNlLAotCTB4MDAwNSwgMHgwMGY2LCAweDAwZDYsIDB4MDAyNiwgMHgwMDE2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAotCTB4M2MwMCwgMHgwMDA2LCAweDIwNzksIDB4MDAzMCwgMHgyMDY5LCAweDAyMDAsIDB4MDgwYywgMHgxZGYyLAotCTB4MTU5MCwgMHgwODBjLCAweDFjZTIsIDB4MDVjOCwgMHgwNGQ5LCAweDExMzAsIDB4NzkwOCwgMHhhMThjLAotCTB4MWZmZiwgMHhhMTgyLCAweDAwMTEsIDB4MTY4OCwgMHgyMGE5LCAweDAwMGMsIDB4MjBlMSwgMHgwMDAwLAotCTB4MmVhMCwgMHgyMDk5LCAweDAyMGEsIDB4NTNhNSwgMHgyMGUxLCAweDIwMDAsIDB4MjAwMSwgMHgwMjBhLAotCTB4MjAwNCwgMHg3YTBjLCAweDc4MDgsIDB4YTA4MCwgMHgwMDA3LCAweGEwODQsIDB4MWZmOCwgMHgwNDAxLAotCTB4MTEyMCwgMHhhMDhhLCAweDAxNDAsIDB4MWEwYywgMHgxNGY2LCAweDgwYWMsIDB4MjBlMSwgMHg2MDAwLAotCTB4MjA5OSwgMHgwMjBhLCAweDUzYTUsIDB4MjBlMSwgMHg3MDAwLCAweDY4MjgsIDB4NjgyOCwgMHg3ODAzLAotCTB4MDAwNCwgMHhhMjk0LCAweDAwNzAsIDB4MDAwZSwgMHgyMGUwLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLAotCTB4MDAxZSwgMHgwMDJlLCAweDAwZGUsIDB4MDBmZSwgMHgwMDA1LCAweGEwODUsIDB4MDAwMSwgMHgwYzk4LAotCTB4MDAwNiwgMHgyMDAxLCAweDAxMTEsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDMsIDB4MDAwZSwgMHgwMDA1LAotCTB4MDA0NiwgMHgwMGU2LCAweDAwZDYsIDB4MjAyOCwgMHgyMTMwLCAweGE2OTYsIDB4MDBmZiwgMHgxMTk4LAotCTB4YTU5NiwgMHhmZmZkLCAweDExMjAsIDB4MjAwOSwgMHgwMDdmLCAweDA4MDQsIDB4NjJjYSwgMHhhNTk2LAotCTB4ZmZmZSwgMHgxMTE4LCAweDIwMDksIDB4MDA3ZSwgMHgwNGU4LCAweGE1OTYsIDB4ZmZmYywgMHgxMTE4LAotCTB4MjAwOSwgMHgwMDgwLCAweDA0YjgsIDB4MjAxMSwgMHgwMDAwLCAweDIwMTksIDB4YWQzNCwgMHgyMzFjLAotCTB4ZDNhYywgMHgwMTM4LCAweDIwMjEsIDB4MDAwMCwgMHgyMGE5LCAweDAwZmYsIDB4MjA3MSwgMHhhZTM0LAotCTB4MDAzMCwgMHgyMDIxLCAweDAwODEsIDB4MjBhOSwgMHgwMDdlLCAweDIwNzEsIDB4YWViNSwgMHgyZTFjLAotCTB4ODNmZiwgMHgxMTI4LCAweDgyZmYsIDB4MTE5OCwgMHgyNDEwLCAweGMyZmQsIDB4MDA4MCwgMHgyMzY4LAotCTB4NmYxMCwgMHgwMDA2LCAweDIxMDAsIDB4YTcwNiwgMHgwMDBlLCAweDZiMTQsIDB4MTEyMCwgMHhhMzQ2LAotCTB4MTExMCwgMHgyNDA4LCAweDAwNzgsIDB4ODdmZiwgMHgxMTEwLCAweDgzZmYsIDB4MGQ1OCwgMHg4NDIwLAotCTB4OGU3MCwgMHgxZjA0LCAweDYyYTcsIDB4ODJmZiwgMHgxMTE4LCAweGEwODUsIDB4MDAwMSwgMHgwMDE4LAotCTB4YzJmYywgMHgyMjA4LCAweGEwMDYsIDB4MDBkZSwgMHgwMGVlLCAweDAwNGUsIDB4MDAwNSwgMHhhMDg0LAotCTB4MDAwNywgMHgwMDBhLCAweDAwMDUsIDB4NjJkYiwgMHg2MmRiLCAweDYyZGIsIDB4NjQxYSwgMHg2MmRiLAotCTB4NjJkYywgMHg2MmYxLCAweDYzNWQsIDB4MDAwNSwgMHg3MTEwLCAweGQxYmMsIDB4MDE4OCwgMHg3MTIwLAotCTB4MjE2MCwgMHhhYzhjLCAweDAwMDcsIDB4MTE2MCwgMHhhYzhhLCAweGI0MDAsIDB4MDI0OCwgMHg2ODU4LAotCTB4YWMwMiwgMHgxMjMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LCAweDAwNDYsIDB4MDgwYywgMHg4MGE3LAotCTB4MDAwNSwgMHgwMGM2LCAweDcxMTAsIDB4ZDFiYywgMHgxOTA0LCAweDYzNDQsIDB4MjAxMSwgMHhiMjgzLAotCTB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyNjc2LCAweDE5MDQsIDB4NjM0NCwgMHgwODBjLAotCTB4NGM4MCwgMHgxOTA0LCAweDYzNDQsIDB4NjYxMiwgMHg2NTE2LCAweDYwMDAsIDB4ZDBlYywgMHgxNWUwLAotCTB4NjIwNCwgMHhhMjk0LCAweGZmMDAsIDB4ODIxNywgMHhhMjg2LCAweDAwMDYsIDB4MDE2MCwgMHgwODBjLAotCTB4NTc0ZiwgMHgxMWQwLCAweDYyMDQsIDB4YTI5NCwgMHgwMGZmLCAweGEyODYsIDB4MDAwNiwgMHgxMWEwLAotCTB4YTI5NSwgMHgwNjAwLCAweDYyMDYsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwgMHgwNTMwLAotCTB4NjExYSwgMHg2MDFmLCAweDAwMDYsIDB4NzEyMCwgMHg2MTBhLCAweDcxMzAsIDB4NjE1MiwgMHgyMDA5LAotCTB4MDA0NCwgMHgwODBjLCAweDgwYTcsIDB4MDBjMCwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDFlLAotCTB4MDE5OCwgMHg2MTFhLCAweDYwMWYsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4YTI4NiwgMHgwMDA0LAotCTB4MTExOCwgMHg2MDA3LCAweDAwMDUsIDB4MDAxMCwgMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLAotCTB4MDgwYywgMHg2N2VlLCAweDA4MGMsIDB4NmM1MCwgMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHgwODBjLAotCTB4OTgwNywgMHgwMDFlLCAweDBkYzgsIDB4NjExYSwgMHg2MDFmLCAweDAwMDYsIDB4NzEyMCwgMHg2MTBhLAotCTB4NzEzMCwgMHg2MTUyLCAweDYwMTMsIDB4MDMwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQxLAotCTB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwYzM4LCAweDcxMTAsIDB4ZDFiYywgMHgwMTg4LAotCTB4NzAyMCwgMHgyMDYwLCAweGFjODQsIDB4MDAwNywgMHgxMTYwLCAweGFjODIsIDB4YjQwMCwgMHgwMjQ4LAotCTB4Njg1OCwgMHhhYzAyLCAweDEyMzAsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA0NSwgMHgwODBjLAotCTB4ODBhNywgMHgwMDA1LCAweDcxMTAsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4ZSwgMHgwMDAwLAotCTB4MTEzMCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4YSwgMHgwMDA2LCAweDEyMDgsIDB4MDAwYiwgMHgwMDA1LAotCTB4NjM4NiwgMHg2Mzg3LCAweDYzODYsIDB4NjM4NiwgMHg2M2YwLCAweDYzZmMsIDB4MDAwNSwgMHg3MTEwLAotCTB4ZDFiYywgMHgwMTIwLCAweDcwMmMsIDB4ZDA4NCwgMHgwOTA0LCAweDYzZWYsIDB4NzAwYywgMHg3MTA4LAotCTB4MDgwYywgMHgyNjc2LCAweDE5MDQsIDB4NjNlZiwgMHgwODBjLCAweDRjODAsIDB4MTkwNCwgMHg2M2VmLAotCTB4NjYxMiwgMHg2NTE2LCAweDYyMDQsIDB4NzExMCwgMHhkMWJjLCAweDAxZjgsIDB4YTI4YywgMHgwMGZmLAotCTB4YTE4NiwgMHgwMDA0LCAweDAxMTgsIDB4YTE4NiwgMHgwMDA2LCAweDE1YzgsIDB4MDBjNiwgMHgwODBjLAotCTB4NjQwOCwgMHgwMGNlLCAweDA5MDQsIDB4NjNlZiwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDFlLAotCTB4MDVmMCwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDIsIDB4NzEyMCwgMHg2MTBhLAotCTB4MjAwOSwgMHgwMDg4LCAweDA4MGMsIDB4ODBhNywgMHgwNDkwLCAweGEyOGMsIDB4MDBmZiwgMHhhMTg2LAotCTB4MDAwNiwgMHgwMTYwLCAweGExODYsIDB4MDAwNCwgMHgwMTQ4LCAweGEyOTQsIDB4ZmYwMCwgMHg4MjE3LAotCTB4YTI4NiwgMHgwMDA0LCAweDAxMTgsIDB4YTI4NiwgMHgwMDA2LCAweDExODgsIDB4MDBjNiwgMHgwODBjLAotCTB4ODAyMiwgMHgwMDFlLCAweDAxZTAsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwgMHgwMDA1LAotCTB4NzEyMCwgMHg2MTBhLCAweDIwMDksIDB4MDA4OCwgMHgwODBjLCAweDgwYTcsIDB4MDA4MCwgMHgwMGM2LAotCTB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE1OCwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwgMHg2MDFmLAotCTB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4ODBhNywgMHgwMDA1LAotCTB4NzExMCwgMHhkMWJjLCAweDAxNDAsIDB4MDBhMSwgMHgwMTMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LAotCTB4MDA4OSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwgMHg3MTEwLCAweGQxYmMsIDB4MDE0MCwgMHgwMDQxLAotCTB4MDEzMCwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDhhLCAweDA4MGMsIDB4ODBhNywgMHgwMDA1LAotCTB4NzAyMCwgMHgyMDYwLCAweGFjODQsIDB4MDAwNywgMHgxMTU4LCAweGFjODIsIDB4YjQwMCwgMHgwMjQwLAotCTB4MjAwMSwgMHhhZDE2LCAweDIwMDQsIDB4YWMwMiwgMHgxMjE4LCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LAotCTB4YTAwNiwgMHgwY2U4LCAweDcxMTAsIDB4ZDFiYywgMHgxMTc4LCAweDcwMjQsIDB4MjA2MCwgMHhhYzg0LAotCTB4MDAwNywgMHgxMTUwLCAweGFjODIsIDB4YjQwMCwgMHgwMjM4LCAweDY4NTgsIDB4YWMwMiwgMHgxMjIwLAotCTB4MjAwOSwgMHgwMDUxLCAweDA4MGMsIDB4ODBhNywgMHgwMDA1LCAweDIwMzEsIDB4MDEwNSwgMHgwMDY5LAotCTB4MDAwNSwgMHgyMDMxLCAweDAyMDYsIDB4MDA0OSwgMHgwMDA1LCAweDIwMzEsIDB4MDIwNywgMHgwMDI5LAotCTB4MDAwNSwgMHgyMDMxLCAweDAyMTMsIDB4MDAwOSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwgMHgwMGY2LAotCTB4NzAwMCwgMHhhMDg0LCAweGYwMDAsIDB4YTA4NiwgMHhjMDAwLCAweDA1YjAsIDB4MDgwYywgMHg4MDIyLAotCTB4MDU5OCwgMHgwMDY2LCAweDAwYzYsIDB4MDA0NiwgMHgyMDExLCAweGIyODMsIDB4MjIwNCwgMHg4MjExLAotCTB4MjIwYywgMHgwODBjLCAweDI2NzYsIDB4MTU4MCwgMHgwODBjLCAweDRjODAsIDB4MTU2OCwgMHg2NjEyLAotCTB4NjUxNiwgMHgyYzAwLCAweDAwNGUsIDB4MDBjZSwgMHg2MDFhLCAweDA4MGMsIDB4OTk1NiwgMHgwODBjLAotCTB4MTVkOSwgMHgwMWYwLCAweDJkMDAsIDB4NjA1NiwgMHg2ODAzLCAweDAwMDAsIDB4NjgzNywgMHgwMDAwLAotCTB4NmMzYSwgMHhhZGY4LCAweDAwMGYsIDB4MjBhOSwgMHgwMDBlLCAweDJmYTAsIDB4MmU5OCwgMHg1M2EzLAotCTB4MDA2ZSwgMHg2NjEyLCAweDYwMDcsIDB4MDAzZSwgMHg2MDFmLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLAotCTB4MDgwYywgMHg2N2VlLCAweDA4MGMsIDB4NmM1MCwgMHgwMGZlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LAotCTB4MDgwYywgMHg4MDc4LCAweDAwNmUsIDB4MGNjMCwgMHgwMDRlLCAweDAwY2UsIDB4MGNjOCwgMHgyMDcxLAotCTB4YWZkYSwgMHg3MDAzLCAweDAwMDMsIDB4NzAwZiwgMHgwMzYxLCAweGEwMDYsIDB4NzAxYSwgMHg3MDEyLAotCTB4NzAxNywgMHhiNDAwLCAweDcwMDcsIDB4MDAwMCwgMHg3MDI2LCAweDcwMmIsIDB4Nzg0MSwgMHg3MDMyLAotCTB4NzAzNywgMHg3ODlkLCAweDcwM2IsIDB4ZmZmZiwgMHg3MDNmLCAweGZmZmYsIDB4NzA0MiwgMHg3MDQ3LAotCTB4NDFiMywgMHgwMDA1LCAweDIwNzEsIDB4YWZkYSwgMHgxZDA0LCAweDY0ZmMsIDB4MjA5MSwgMHg2MDAwLAotCTB4NzAwYywgMHg4MDAxLCAweDcwMGUsIDB4MTE4MCwgMHg3MDBmLCAweDAzNjEsIDB4NzAwNywgMHgwMDAxLAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzA0MCwgMHhhMDBkLCAweDAxNDgsIDB4ODEwOSwgMHg3MTQyLAotCTB4MTEzMCwgMHg3MDQ0LCAweDA4MGYsIDB4MDAxOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDI0LAotCTB4YTAwZCwgMHgwMTg4LCAweDcwMjAsIDB4ODAwMSwgMHg3MDIyLCAweDExNjgsIDB4NzAyMywgMHgwMDA5LAotCTB4ODEwOSwgMHg3MTI2LCAweGExODYsIDB4MDNlOCwgMHgxMTEwLCAweDcwMjgsIDB4MDgwZiwgMHg4MWZmLAotCTB4MTExMCwgMHg3MDI4LCAweDA4MGYsIDB4NzAzMCwgMHhhMDBkLCAweDAxNTgsIDB4NzAyYywgMHg4MDAxLAotCTB4NzAyZSwgMHgxMTM4LCAweDcwMmYsIDB4MDAwOSwgMHg4MTA5LCAweDcxMzIsIDB4MTExMCwgMHg3MDM0LAotCTB4MDgwZiwgMHg3MDM4LCAweGEwMDUsIDB4MDExOCwgMHgwMzEwLCAweDgwMDEsIDB4NzAzYSwgMHg3MDNjLAotCTB4YTAwNSwgMHgwMTE4LCAweDAzMTAsIDB4ODAwMSwgMHg3MDNlLCAweDcwMTgsIDB4YTAwZCwgMHgwMTU4LAotCTB4NzAwOCwgMHg4MDAxLCAweDcwMGEsIDB4MTEzOCwgMHg3MDBiLCAweDAwMDksIDB4ODEwOSwgMHg3MTFhLAotCTB4MTExMCwgMHg3MDFjLCAweDA4MGYsIDB4MDEyZSwgMHg3MDA0LCAweDAwMDIsIDB4NjUyMiwgMHg2NTIzLAotCTB4NjUzYiwgMHgwMGU2LCAweDIwNzEsIDB4YWZkYSwgMHg3MDE4LCAweGEwMDUsIDB4MTEyMCwgMHg3MTFhLAotCTB4NzIxZSwgMHg3MDBiLCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDAwNiwgMHgyMDcxLAotCTB4YWZkYSwgMHg3MDFjLCAweGEyMDYsIDB4MTExMCwgMHg3MDFhLCAweDcwMWUsIDB4MDAwZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWZkYSwgMHg2MDg4LCAweGExMDIsIDB4MDIwOCwgMHg2MThhLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwMDUsIDB4NzExMCwgMHgwODBjLCAweDRjZGMsIDB4MTE1OCwgMHg2MDg4LAotCTB4ODAwMSwgMHgwMjQwLCAweDYwOGEsIDB4MTEzMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLAotCTB4NmM1MCwgMHgwMTJlLCAweDgxMDgsIDB4YTE4MiwgMHgwMGZmLCAweDAyMTgsIDB4YTAwZSwgMHg3MDA3LAotCTB4MDAwMiwgMHg3MTEyLCAweDAwMDUsIDB4NzAxNCwgMHgyMDYwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjAzYywgMHhhMDA1LCAweDAxMjgsIDB4ODAwMSwgMHg2MDNlLCAweDExMTAsIDB4MDgwYywgMHg5ODQ2LAotCTB4NjAxNCwgMHhhMDA1LCAweDA1MDAsIDB4ODAwMSwgMHg2MDE2LCAweDExZTgsIDB4NjExYywgMHhhMTg2LAotCTB4MDAwMywgMHgwMTE4LCAweGExODYsIDB4MDAwNiwgMHgxMWEwLCAweDYwMTAsIDB4MjA2OCwgMHg2ODU0LAotCTB4YTA4YSwgMHgxOTlhLCAweDAyNzAsIDB4YTA4MiwgMHgxOTk5LCAweDY4NTYsIDB4YTA4YSwgMHgxOTlhLAotCTB4MDIxMCwgMHgyMDAxLCAweDE5OTksIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwgMHg2MTE2LAotCTB4MDAxMCwgMHgwODBjLCAweDkzNTAsIDB4MDEyZSwgMHhhYzg4LCAweDAwMTgsIDB4NzExNiwgMHgyMDAxLAotCTB4ZTQwMCwgMHhhMTAyLCAweDAyMjAsIDB4NzAxNywgMHhiNDAwLCAweDcwMDcsIDB4MDAwMCwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweGFmZGEsIDB4NzAyNywgMHgwN2QwLCAweDcwMjMsIDB4MDAwOSwgMHgwMGVlLAotCTB4MDAwNSwgMHgyMDAxLCAweGFmZTMsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAotCTB4YWZkYSwgMHg3MTMyLCAweDcwMmYsIDB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MjAxMSwgMHhhZmU2LAotCTB4MjAxMywgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFmZGEsIDB4NzExYSwgMHg3MjFlLAotCTB4NzAwYiwgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgwMGM2LCAweDIwNjEsIDB4YjA0OCwgMHgwMGNlLAotCTB4MDAwNSwgMHhhMTg0LCAweDAwMGYsIDB4ODAwMywgMHg4MDAzLCAweDgwMDMsIDB4YTA4MCwgMHhiMDQ4LAotCTB4MjA2MCwgMHgwMDA1LCAweDY4NTQsIDB4YTA4YSwgMHgxOTlhLCAweDAyMTAsIDB4MjAwMSwgMHgxOTk5LAotCTB4YTAwNSwgMHgxMTUwLCAweDAwYzYsIDB4MjA2MSwgMHhiMDQ4LCAweDYwMTQsIDB4MDBjZSwgMHhhMDA1LAotCTB4MTEzOCwgMHgyMDAxLCAweDAwMWUsIDB4MDAyMCwgMHhhMDhlLCAweGZmZmYsIDB4MTEwOCwgMHhhMDA2LAotCTB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwgMHg2MTE2LCAweDY4NGMsIDB4YTA4YywgMHgwMGMwLAotCTB4YTE4ZSwgMHgwMGMwLCAweDA1YjAsIDB4ZDBiNCwgMHgxMTM4LCAweGQwYmMsIDB4MTUyOCwgMHgyMDA5LAotCTB4MDAwNiwgMHgwODBjLCAweDY2MWEsIDB4MDAwNSwgMHhkMGZjLCAweDAxMzAsIDB4YTA4NCwgMHgwMDAzLAotCTB4MDExOCwgMHhhMDg2LCAweDAwMDMsIDB4MTVjMCwgMHg2MDIwLCAweGQwZDQsIDB4MDEzMCwgMHhjMGQ0LAotCTB4NjAyMiwgMHg2ODYwLCAweDYwMmEsIDB4Njg1YywgMHg2MDJlLCAweDIwMDksIDB4YWQ3MywgMHgyMTA0LAotCTB4ZDA4NCwgMHgwMTI4LCAweDIwMDksIDB4MDA0MiwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwgMHgyMDA5LAotCTB4MDA0MywgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwgMHhkMGZjLCAweDAxMzAsIDB4YTA4NCwgMHgwMDAzLAotCTB4MDExOCwgMHhhMDg2LCAweDAwMDMsIDB4MTFjMCwgMHgyMDA5LCAweDAwNDIsIDB4MDgwYywgMHg4MGE3LAotCTB4MDAwNSwgMHhkMGZjLCAweDAxNTAsIDB4YTA4NCwgMHgwMDAzLCAweGEwOGUsIDB4MDAwMiwgMHgwMTM4LAotCTB4MjAwOSwgMHgwMDQxLCAweDA4MGMsIDB4ODBhNywgMHgwMDA1LCAweDAwNTEsIDB4MGNlOCwgMHgyMDA5LAotCTB4MDA0MywgMHgwODBjLCAweDgwYTcsIDB4MGNjMCwgMHgyMDA5LCAweDAwMDQsIDB4MDAxOSwgMHgwMDA1LAotCTB4MjAwOSwgMHgwMDAxLCAweDAwZDYsIDB4NjAxMCwgMHhhMGVjLCAweGYwMDAsIDB4MDFmMCwgMHgyMDY4LAotCTB4Njk1MiwgMHg2ODAwLCAweDYwMTIsIDB4YTE4NiwgMHgwMDAxLCAweDExODgsIDB4Njk0YywgMHhhMThjLAotCTB4ODEwMCwgMHhhMThlLCAweDgxMDAsIDB4MTE1OCwgMHgwMGM2LCAweDIwNjEsIDB4YjA0OCwgMHg2MjAwLAotCTB4ZDI4YywgMHgxMTIwLCAweDYyMDQsIDB4ODIxMCwgMHgwMjA4LCAweDYyMDYsIDB4MDBjZSwgMHgwODBjLAotCTB4NTEwYywgMHg2MDEwLCAweGEwNmQsIDB4MTkwYywgMHg2NWFhLCAweDAwZGUsIDB4MDAwNSwgMHgwMTU2LAotCTB4MDBjNiwgMHgyMDYxLCAweGIwNDgsIDB4NjAwMCwgMHg4MWZmLCAweDAxMTAsIDB4YTIwNSwgMHgwMDA4LAotCTB4YTIwNCwgMHg2MDAyLCAweDAwY2UsIDB4MDE1ZSwgMHgwMDA1LCAweDY4MDAsIDB4ZDA4YywgMHgxMTM4LAotCTB4NjgwOCwgMHhhMDA1LCAweDAxMjAsIDB4ODAwMSwgMHg2ODBhLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LAotCTB4MjBhOSwgMHgwMDEwLCAweGEwMDYsIDB4ODAwNCwgMHg4MDg2LCAweDgxOGUsIDB4MTIwOCwgMHhhMjAwLAotCTB4MWYwNCwgMHg2NjVjLCAweDgwODYsIDB4ODE4ZSwgMHgwMDA1LCAweDAxNTYsIDB4MjBhOSwgMHgwMDEwLAotCTB4YTAwNSwgMHgwMWI4LCAweGExMWEsIDB4MTJhOCwgMHg4MjEzLCAweDgxOGQsIDB4MDIyOCwgMHhhMTFhLAotCTB4MTIyMCwgMHgxZjA0LCAweDY2NmMsIDB4MDAyOCwgMHhhMTFhLCAweDIzMDgsIDB4ODIxMCwgMHgxZjA0LAotCTB4NjY2YywgMHgwMDA2LCAweDMyMDAsIDB4YTA4NCwgMHhlZmZmLCAweDIwODAsIDB4MDAwZSwgMHgwMTVlLAotCTB4MDAwNSwgMHgwMDA2LCAweDMyMDAsIDB4YTA4NSwgMHgxMDAwLCAweDBjYjgsIDB4MDEyNiwgMHgyMDkxLAotCTB4MjgwMCwgMHgyMDc5LCAweGFmYzcsIDB4MDEyZSwgMHgwMGQ2LCAweDIwNjksIDB4YWZjNywgMHg2ODAzLAotCTB4MDAwNSwgMHgyMDY5LCAweDAwMDQsIDB4MmQwNCwgMHhhMDg1LCAweDgwMDEsIDB4MjA2YSwgMHgwMGRlLAotCTB4MDAwNSwgMHgwMGM2LCAweDYwMjcsIDB4MDAwMSwgMHg3ODA0LCAweGEwODQsIDB4MDAwNywgMHgwMDAyLAotCTB4NjZhYSwgMHg2NmNiLCAweDY3MWUsIDB4NjZiMCwgMHg2NmNiLCAweDY2YWEsIDB4NjZhOCwgMHg2NmE4LAotCTB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NjU4MSwgMHgwODBjLCAweDZjNTAsIDB4MDBjZSwgMHgwMDA1LAotCTB4NjJjMCwgMHg4MmZmLCAweDExMTAsIDB4MDBjZSwgMHgwMDA1LCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLAotCTB4NjUwZCwgMHg3ODI4LCAweGEwOTIsIDB4MDBjOCwgMHgxMjI4LCAweDgwMDAsIDB4NzgyYSwgMHgwODBjLAotCTB4NDg1NSwgMHgwYzg4LCAweDA4MGMsIDB4NDgxYiwgMHg3ODA3LCAweDAwMDMsIDB4NzgyNywgMHgwMDAwLAotCTB4NzgyYiwgMHgwMDAwLCAweDBjNDAsIDB4MDgwYywgMHg2NTgxLCAweDNjMDAsIDB4MDAwNiwgMHgyMDExLAotCTB4MDIwOSwgMHgyMGUxLCAweDQwMDAsIDB4MjIxNCwgMHgwMDBlLCAweDIwZTAsIDB4ODJmZiwgMHgwMTc4LAotCTB4NjJjMCwgMHg4MmZmLCAweDExNjAsIDB4NzgyYiwgMHgwMDAwLCAweDc4MjQsIDB4YTA2NSwgMHgwOTBjLAotCTB4MTRmNiwgMHgyMDA5LCAweDAwMTMsIDB4MDgwYywgMHg4MGE3LCAweDAwY2UsIDB4MDAwNSwgMHgzOTAwLAotCTB4YTA4MiwgMHhiMGU4LCAweDEyMTAsIDB4MDgwYywgMHg3ZDhkLCAweDAwYzYsIDB4NzgyNCwgMHhhMDY1LAotCTB4MDkwYywgMHgxNGY2LCAweDc4MDQsIDB4YTA4NiwgMHgwMDA0LCAweDA5MDQsIDB4Njc1ZSwgMHg3ODI4LAotCTB4YTA5MiwgMHgyNzEwLCAweDEyMzAsIDB4ODAwMCwgMHg3ODJhLCAweDAwY2UsIDB4MDgwYywgMHg3ODI3LAotCTB4MGMyMCwgMHg2MTA0LCAweGExODYsIDB4MDAwMywgMHgxMTg4LCAweDAwZTYsIDB4MjA3MSwgMHhhZDAwLAotCTB4NzBkYywgMHgwMGVlLCAweGQwOGMsIDB4MDE1MCwgMHgwMGM2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLAotCTB4MjA3MSwgMHhhZDAwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGVlLCAweDAwY2UsIDB4MDgwYywgMHhhY2EyLAotCTB4MjAwOSwgMHgwMDE0LCAweDA4MGMsIDB4ODBhNywgMHgwMGNlLCAweDA4MzgsIDB4MjAwMSwgMHhhZmUzLAotCTB4MjAwMywgMHgwMDAwLCAweDYyYzAsIDB4ODJmZiwgMHgxMTYwLCAweDc4MmIsIDB4MDAwMCwgMHg3ODI0LAotCTB4YTA2NSwgMHgwOTBjLCAweDE0ZjYsIDB4MjAwOSwgMHgwMDEzLCAweDA4MGMsIDB4ODBmYiwgMHgwMGNlLAotCTB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MzkwMCwgMHhhMDgyLCAweGIwZTgsIDB4MTIxMCwgMHgwODBjLAotCTB4N2Q4ZCwgMHg3ODI0LCAweGEwMDUsIDB4MDkwYywgMHgxNGY2LCAweDc4MWMsIDB4YTA2ZCwgMHgwOTBjLAotCTB4MTRmNiwgMHg2ODAwLCAweGMwZGMsIDB4NjgwMiwgMHg3OTI0LCAweDIxNjAsIDB4MDgwYywgMHg4MDc4LAotCTB4NjkzYywgMHg4MWZmLCAweDA5MGMsIDB4MTRmNiwgMHg4MTA5LCAweDY5M2UsIDB4Njg1NCwgMHhhMDE1LAotCTB4MDExMCwgMHg3YTFlLCAweDAwMTAsIDB4NzkxOCwgMHg3OTFlLCAweDc4MDcsIDB4MDAwMCwgMHg3ODI3LAotCTB4MDAwMCwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHg2YzUwLCAweDA4ODgsIDB4NjEwNCwgMHhhMTg2LAotCTB4MDAwMiwgMHgwMTI4LCAweGExODYsIDB4MDAwNCwgMHgwMTEwLCAweDA4MDQsIDB4NjZmNywgMHg3ODA4LAotCTB4YWMwNiwgMHgwOTA0LCAweDY2ZjcsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4NjdlZSwgMHgwMGNlLAotCTB4MDgwYywgMHg2YzUwLCAweDA4MDQsIDB4NjZlNSwgMHgwMGM2LCAweDYwMjcsIDB4MDAwMiwgMHg2MmM4LAotCTB4NjBjNCwgMHhhMjA1LCAweDExNzgsIDB4NzkzYywgMHhhMWU1LCAweDAwMDAsIDB4MDEzMCwgMHgyMDA5LAotCTB4MDA0OSwgMHgwODBjLCAweDgwYTcsIDB4MDBjZSwgMHgwMDA1LCAweDIwMTEsIDB4YWZlNiwgMHgyMDEzLAotCTB4MDAwMCwgMHgwY2M4LCAweDM5MDgsIDB4YTE5MiwgMHhiMGU4LCAweDEyMTAsIDB4MDgwYywgMHg3ZDhkLAotCTB4NzkzYywgMHg4MWZmLCAweDBkOTAsIDB4NzkzYywgMHhhMTg4LCAweDAwMDcsIDB4MjEwYywgMHhhMThlLAotCTB4MDAwNiwgMHgxMTM4LCAweDYwMTQsIDB4YTA4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAxMiwgMHg2MDE2LAotCTB4MGMxMCwgMHg2MDE0LCAweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMTYsIDB4NjAxNiwgMHgwOGQ4LAotCTB4MDAwNiwgMHgwMDE2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwZiwgMHgwMDAwLAotCTB4MmMwOCwgMHgyMDYxLCAweGFmYzcsIDB4NjAyMCwgMHg4MDAwLCAweDYwMjIsIDB4NjAxMCwgMHhhMDA1LAotCTB4MDE0OCwgMHhhMDgwLCAweDAwMDMsIDB4MjEwMiwgMHg2MTEyLCAweDAxMmUsIDB4MDBjZSwgMHgwMDFlLAotCTB4MDAwZSwgMHgwMDA1LCAweDYxMTYsIDB4NjExMiwgMHgwY2MwLCAweDAwZDYsIDB4MjA2OSwgMHhhZmM3LAotCTB4NjAwMCwgMHhkMGQ0LCAweDAxNjgsIDB4NjgyMCwgMHg4MDAwLCAweDY4MjIsIDB4YTA4NiwgMHgwMDAxLAotCTB4MTExMCwgMHgyYzAwLCAweDY4MWUsIDB4NjgwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDgwNCwgMHg2YzU2LAotCTB4YzBkNSwgMHg2MDAyLCAweDY4MTgsIDB4YTAwNSwgMHgwMTU4LCAweDYwNTYsIDB4NjA1YiwgMHgwMDAwLAotCTB4MDAwNiwgMHgyYzAwLCAweDY4MWEsIDB4MDBkZSwgMHg2ODVhLCAweDIwNjksIDB4YWZjNywgMHgwYzE4LAotCTB4NjA1NiwgMHg2MDVhLCAweDJjMDAsIDB4NjgxYSwgMHg2ODFlLCAweDA4ZTgsIDB4MDAwNiwgMHgwMDE2LAotCTB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDBmLCAweDAwMDAsIDB4MmMwOCwgMHgyMDYxLAotCTB4YWZjNywgMHg2MDIwLCAweDgwMDAsIDB4NjAyMiwgMHg2MDA4LCAweGEwMDUsIDB4MDE0OCwgMHhhMDgwLAotCTB4MDAwMywgMHgyMTAyLCAweDYxMGEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LAotCTB4NjEwZSwgMHg2MTBhLCAweDBjYzAsIDB4MDBjNiwgMHg2MDBmLCAweDAwMDAsIDB4MmMwOCwgMHgyMDYxLAotCTB4YWZjNywgMHg2MDM0LCAweGEwMDUsIDB4MDEzMCwgMHhhMDgwLCAweDAwMDMsIDB4MjEwMiwgMHg2MTM2LAotCTB4MDBjZSwgMHgwMDA1LCAweDYxM2EsIDB4NjEzNiwgMHgwY2Q4LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LAotCTB4MDBjNiwgMHgwMDc2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDE2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDcxLAotCTB4YWZjNywgMHg3NjM4LCAweDI2NjAsIDB4MjY3OCwgMHgyMDkxLCAweDgwMDAsIDB4OGNmZiwgMHgwOTA0LAotCTB4Njg4OSwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEyMDYsIDB4MTkwNCwgMHg2ODg0LAotCTB4ODdmZiwgMHgwMTIwLCAweDYwNTAsIDB4YTEwNiwgMHgxOTA0LCAweDY4ODQsIDB4NzAzYywgMHhhYzA2LAotCTB4MTE3MCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweDdhNjQsIDB4NzAzMywgMHgwMDAwLAotCTB4NzAzZiwgMHgwMDAwLCAweDcwNDMsIDB4MDAwMCwgMHg3MDQ3LCAweDAwMDAsIDB4MDAzZSwgMHg3MDM4LAotCTB4YWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYzYSwgMHg3MDM0LCAweGFjMzYsIDB4MTE0MCwgMHgyYzAwLAotCTB4YWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAzNiwgMHgwMDEwLCAweDcwMzcsIDB4MDAwMCwgMHg2NjBjLAotCTB4MDA2NiwgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLAotCTB4MDAwMCwgMHgwODBjLCAweDk1OTYsIDB4MDE5OCwgMHg2MDEwLCAweDIwNjgsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwMywgMHgxNTEwLCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLAotCTB4OTdmZCwgMHgwODBjLCAweGFiZmEsIDB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4OTc0MiwgMHgwODBjLAotCTB4OTc0ZSwgMHgwMGNlLCAweDA4MDQsIDB4NjgyZSwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LAotCTB4NjgyZSwgMHgwMTJlLCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwNmUsIDB4MDA3ZSwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwgMHgxOWQwLAotCTB4MDgwYywgMHhhYmZhLCAweDA4MGMsIDB4YTkxZiwgMHgwYzEwLCAweDAwMDYsIDB4MDA2NiwgMHgwMGM2LAotCTB4MDBkNiwgMHgwMGY2LCAweDIwMzEsIDB4MDAwMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LAotCTB4YWZjNywgMHg3ODM4LCAweGEwNjUsIDB4MDU1OCwgMHg2MDBjLCAweDAwMDYsIDB4NjAwZiwgMHgwMDAwLAotCTB4NzgzYywgMHhhYzA2LCAweDExNzAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHg3YTY0LAotCTB4NzgzMywgMHgwMDAwLCAweDc4M2YsIDB4MDAwMCwgMHg3ODQzLCAweDAwMDAsIDB4Nzg0NywgMHgwMDAwLAotCTB4MDAzZSwgMHgwODBjLCAweDk1OTYsIDB4MDE3OCwgMHg2MDEwLCAweDIwNjgsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwMywgMHgxMWIwLCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLAotCTB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDgwYywgMHg5NzRlLCAweDAwMGUsIDB4MDg5OCwgMHg3ZTNhLAotCTB4N2UzNiwgMHgwMTJlLCAweDAwZmUsIDB4MDBkZSwgMHgwMGNlLCAweDAwNmUsIDB4MDAwZSwgMHgwMDA1LAotCTB4NjAxYywgMHhhMDg2LCAweDAwMDYsIDB4MWQzMCwgMHgwODBjLCAweGE5MWYsIDB4MGM2MCwgMHgwMDE2LAotCTB4MDAyNiwgMHgwMDg2LCAweDIwNDEsIDB4MDAwMCwgMHgwMDk5LCAweDA4MGMsIDB4NjlhOSwgMHgwMDhlLAotCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBmNiwgMHgwMTI2LCAweDIwNzksIDB4YWZjNywgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDZhMzYsIDB4MDgwYywgMHg2YWE4LCAweDAxMmUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMTYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWZjNywgMHg3NjE0LCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLAotCTB4MDkwNCwgMHg2OTg1LCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTIwNiwgMHgxOTA0LAotCTB4Njk4MCwgMHg4OGZmLCAweDAxMjAsIDB4NjA1MCwgMHhhMTA2LCAweDE5MDQsIDB4Njk4MCwgMHg3MDI0LAotCTB4YWMwNiwgMHgxNTM4LCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLCAweGEwMDUsIDB4MDFmMCwgMHgwODBjLAotCTB4NjU4MSwgMHgwODBjLCAweDc4MzQsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4N2NhOCwgMHg3MDI3LAotCTB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMTIwLAotCTB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LAotCTB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHgwMDIwLCAweDYwMDMsIDB4MDAwOSwgMHg2MzBhLAotCTB4MDRiOCwgMHg3MDE0LCAweGFjMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2MTYsIDB4NzAxMCwgMHhhYzM2LAotCTB4MTE0MCwgMHgyYzAwLCAweGFmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMTIsIDB4MDAxMCwgMHg3MDEzLAotCTB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHhhZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LAotCTB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTg4LAotCTB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MTUxMCwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LAotCTB4MDAwMCwgMHgwODBjLCAweDk3ZmQsIDB4MDgwYywgMHhhYmZhLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLAotCTB4OTc0MiwgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg3Yjg4LCAweDAwY2UsIDB4MDgwNCwgMHg2OTBmLAotCTB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHg2OTBmLCAweDAxMmUsIDB4MDAwZSwgMHgwMDFlLAotCTB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwNiwgMHgxMTI4LCAweDA4MGMsIDB4YWJmYSwgMHgwODBjLCAweGE5MWYsIDB4MGMxMCwgMHg2MDFjLAotCTB4YTA4NiwgMHgwMDAyLCAweDExMjgsIDB4NjAwNCwgMHhhMDg2LCAweDAwODUsIDB4MDk2OCwgMHgwOGM4LAotCTB4NjAxYywgMHhhMDg2LCAweDAwMDUsIDB4MTlhOCwgMHg2MDA0LCAweGEwODYsIDB4MDA4NSwgMHgwZDUwLAotCTB4MDg4MCwgMHgwMGM2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YTI4MCwgMHhhZTM0LAotCTB4MjAwNCwgMHhhMDY1LCAweDA5MDQsIDB4NmEzMiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMDY2LAotCTB4MjA3MSwgMHhhZmM3LCAweDY2NTQsIDB4NzAxOCwgMHhhYzA2LCAweDExMDgsIDB4NzYxYSwgMHg3MDFjLAotCTB4YWMwNiwgMHgxMTMwLCAweDg2ZmYsIDB4MTExOCwgMHg3MDE4LCAweDcwMWUsIDB4MDAwOCwgMHg3NjFlLAotCTB4NjA1OCwgMHhhMDdkLCAweDAxMDgsIDB4N2U1NiwgMHhhNmVkLCAweDAwMDAsIDB4MDExMCwgMHgyZjAwLAotCTB4Njg1YSwgMHg2MDU3LCAweDAwMDAsIDB4NjA1YiwgMHgwMDAwLCAweDYwMDAsIDB4YzBkNCwgMHhjMGRjLAotCTB4NjAwMiwgMHgwODBjLCAweDRjMDcsIDB4MDkwNCwgMHg2YTJlLCAweDc2MjQsIDB4ODZmZiwgMHgwNWU4LAotCTB4YTY4MCwgMHgwMDA0LCAweDIwMDQsIDB4YWQwNiwgMHgxNWMwLCAweDAwZDYsIDB4MjA2OSwgMHgwMTAwLAotCTB4NjhjMCwgMHhhMDA1LCAweDA1NDgsIDB4MDgwYywgMHg2NTgxLCAweDA4MGMsIDB4NzgzNCwgMHg2OGMzLAotCTB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLAotCTB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywgMHgwMDAwLAotCTB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLAotCTB4MDBkZSwgMHgwMGM2LCAweDYwM2MsIDB4YTAwNSwgMHgwMTEwLCAweDgwMDEsIDB4NjAzZSwgMHgyNjYwLAotCTB4MDgwYywgMHg5NzRlLCAweDAwY2UsIDB4MDA0OCwgMHgwMGRlLCAweDAwYzYsIDB4MjY2MCwgMHg2MDAzLAotCTB4MDAwOSwgMHg2MzBhLCAweDAwY2UsIDB4MDgwNCwgMHg2OWQ5LCAweDhkZmYsIDB4MDE1OCwgMHg2ODM3LAotCTB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDk3ZmQsIDB4MDgwYywgMHhhYmZhLAotCTB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4N2I4OCwgMHgwODA0LCAweDY5ZDksIDB4MDA2ZSwgMHgwMGRlLAotCTB4MDBlZSwgMHgwMGZlLCAweDAxMmUsIDB4MDAwZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDY2LAotCTB4MDBjNiwgMHgwMGQ2LCAweDIwMzEsIDB4MDAwMCwgMHg3ODE0LCAweGEwNjUsIDB4MDkwNCwgMHg2YTg4LAotCTB4NjAwYywgMHgwMDA2LCAweDYwMGYsIDB4MDAwMCwgMHg3ODI0LCAweGFjMDYsIDB4MTU0MCwgMHgyMDY5LAotCTB4MDEwMCwgMHg2OGMwLCAweGEwMDUsIDB4MDFmMCwgMHgwODBjLCAweDY1ODEsIDB4MDgwYywgMHg3ODM0LAotCTB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4N2NhOCwgMHg3ODI3LCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LAotCTB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMTIwLCAweDY4MDMsIDB4MDEwMCwgMHg2ODAzLAotCTB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAxMTAsIDB4NjgyNywgMHgwMDAxLAotCTB4MDAzZSwgMHgwMDI4LCAweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDJjMzAsIDB4MDBiMCwgMHg2MDEwLAotCTB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE2OCwgMHg2MDFjLCAweGEwODYsIDB4MDAwMywgMHgxMWI4LAotCTB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLAotCTB4OTc0MiwgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg3Yjg4LCAweDAwMGUsIDB4MDgwNCwgMHg2YTNkLAotCTB4N2UxNiwgMHg3ZTEyLCAweDAwZGUsIDB4MDBjZSwgMHgwMDZlLCAweDAwMGUsIDB4MDAwNSwgMHg2MDFjLAotCTB4YTA4NiwgMHgwMDA2LCAweDExMTgsIDB4MDgwYywgMHhhOTFmLCAweDBjNTgsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwMiwgMHgxMTI4LCAweDYwMDQsIDB4YTA4NiwgMHgwMDg1LCAweDA5ZDAsIDB4MGMxMCwgMHg2MDFjLAotCTB4YTA4NiwgMHgwMDA1LCAweDE5ZjAsIDB4NjAwNCwgMHhhMDg2LCAweDAwODUsIDB4MGQ2MCwgMHgwOGM4LAotCTB4MDAwNiwgMHgwMDY2LCAweDAwYzYsIDB4MDBkNiwgMHg3ODE4LCAweGEwNjUsIDB4MDkwNCwgMHg2YjBlLAotCTB4NjA1NCwgMHgwMDA2LCAweDYwNTcsIDB4MDAwMCwgMHg2MDViLCAweDAwMDAsIDB4NjAwMCwgMHhjMGQ0LAotCTB4YzBkYywgMHg2MDAyLCAweDA4MGMsIDB4NGMwNywgMHgwOTA0LCAweDZiMGIsIDB4N2UyNCwgMHg4NmZmLAotCTB4MDVlOCwgMHhhNjgwLCAweDAwMDQsIDB4MjAwNCwgMHhhZDA2LCAweDE1YzAsIDB4MDBkNiwgMHgyMDY5LAotCTB4MDEwMCwgMHg2OGMwLCAweGEwMDUsIDB4MDU0OCwgMHgwODBjLCAweDY1ODEsIDB4MDgwYywgMHg3ODM0LAotCTB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4N2NhOCwgMHg3ODI3LCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LAotCTB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMTIwLCAweDY4MDMsIDB4MDEwMCwgMHg2ODAzLAotCTB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAxMTAsIDB4NjgyNywgMHgwMDAxLAotCTB4MDAzZSwgMHgwMGRlLCAweDAwYzYsIDB4NjAzYywgMHhhMDA1LCAweDAxMTAsIDB4ODAwMSwgMHg2MDNlLAotCTB4MjY2MCwgMHgwODBjLCAweDk3NGUsIDB4MDBjZSwgMHgwMDQ4LCAweDAwZGUsIDB4MDBjNiwgMHgyNjYwLAotCTB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MDBjZSwgMHgwODA0LCAweDZhYmEsIDB4OGRmZiwgMHgwMTM4LAotCTB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLAotCTB4N2I4OCwgMHgwODA0LCAweDZhYmEsIDB4MDAwZSwgMHgwODA0LCAweDZhYWQsIDB4NzgxZSwgMHg3ODFhLAotCTB4MDBkZSwgMHgwMGNlLCAweDAwNmUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMDY2LAotCTB4NjAwMCwgMHhkMGRjLCAweDAxODgsIDB4NjA0YywgMHhhMDZkLCAweDAxNzAsIDB4Njg0OCwgMHhhNjA2LAotCTB4MTE1OCwgMHgyMDcxLCAweGFmYzcsIDB4NzAyNCwgMHhhMDM1LCAweDAxMzAsIDB4YTA4MCwgMHgwMDA0LAotCTB4MjAwNCwgMHhhZDA2LCAweDExMDgsIDB4MDAyMSwgMHgwMDZlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzhjMCwgMHhhMDA1LCAweDExMzgsIDB4MDBjNiwgMHgyNjYwLAotCTB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MDBjZSwgMHgwNGEwLCAweDA4MGMsIDB4NzgzNCwgMHg3OGMzLAotCTB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA3OSwgMHgwMTQwLAotCTB4N2IwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwgMHg3ODAzLCAweDAxMDAsIDB4NzgwMywgMHgwMDAwLAotCTB4MjA3OSwgMHgwMTAwLCAweDc4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDc4MjcsIDB4MDAwMSwgMHgwODBjLAotCTB4N2NhOCwgMHgwMDNlLCAweDA4MGMsIDB4NGMwNywgMHgwMGM2LCAweDYwM2MsIDB4YTAwNSwgMHgwMTEwLAotCTB4ODAwMSwgMHg2MDNlLCAweDI2NjAsIDB4MDgwYywgMHg4MDc4LCAweDAwY2UsIDB4NjgzNywgMHgwMTAzLAotCTB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywgMHg5N2ZkLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLAotCTB4N2I4OCwgMHgwMGZlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDIwNzEsIDB4YWZjNywgMHg3MDA0LAotCTB4YTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4NmI4NSwgMHg2Yjg4LCAweDZiOWUsIDB4NmJiNywgMHg2YmYwLAotCTB4NmI4NSwgMHg2YjgzLCAweDZiODMsIDB4MDgwYywgMHgxNGY2LCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LAotCTB4NzAyNCwgMHhhMDY1LCAweDAxNDgsIDB4NzAyMCwgMHg4MDAxLCAweDcwMjIsIDB4NjAwYywgMHhhMDE1LAotCTB4MDE1MCwgMHg3MjE2LCAweDYwMGYsIDB4MDAwMCwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNywgMHgwMDAwLAotCTB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4NzIxNiwgMHg3MjEyLCAweDBjYjAsIDB4NjAxOCwgMHgyMDYwLAotCTB4MDgwYywgMHg0YzA3LCAweDYwMDAsIDB4YzBkYywgMHg2MDAyLCAweDcwMjAsIDB4ODAwMSwgMHg3MDIyLAotCTB4MDEyMCwgMHg2MDU0LCAweGEwMTUsIDB4MDE0MCwgMHg3MjFlLCAweDcwMDcsIDB4MDAwMCwgMHg3MDI3LAotCTB4MDAwMCwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHg3MjE4LCAweDcyMWUsIDB4MGNiMCwgMHg3MDI0LAotCTB4YTA2NSwgMHgwNTk4LCAweDcwMGMsIDB4YWMwNiwgMHgxMTYwLCAweDA4MGMsIDB4N2I4OCwgMHg2MDBjLAotCTB4YTAxNSwgMHgwMTIwLCAweDcyMGUsIDB4NjAwZiwgMHgwMDAwLCAweDA0MjgsIDB4NzIwZSwgMHg3MjBhLAotCTB4MDQxMCwgMHg3MDE0LCAweGFjMDYsIDB4MTE2MCwgMHgwODBjLCAweDdiODgsIDB4NjAwYywgMHhhMDE1LAotCTB4MDEyMCwgMHg3MjE2LCAweDYwMGYsIDB4MDAwMCwgMHgwMGIwLCAweDcyMTYsIDB4NzIxMiwgMHgwMDk4LAotCTB4NjAxOCwgMHgyMDYwLCAweDA4MGMsIDB4NGMwNywgMHg2MDAwLCAweGMwZGMsIDB4NjAwMiwgMHgwODBjLAotCTB4N2I4OCwgMHg3MDFjLCAweGEwNjUsIDB4MDEzOCwgMHg2MDU0LCAweGEwMTUsIDB4MDExMCwgMHg3MjFlLAotCTB4MDAxMCwgMHg3MjE4LCAweDcyMWUsIDB4NzAyNywgMHgwMDAwLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LAotCTB4NzAyNCwgMHhhMDY1LCAweDAxNDAsIDB4MDgwYywgMHg3Yjg4LCAweDYwMGMsIDB4YTAxNSwgMHgwMTUwLAotCTB4NzIwZSwgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHg3Y2E4LCAweDcwMjcsIDB4MDAwMCwgMHgwMGNlLAotCTB4MDBlZSwgMHgwMDA1LCAweDcyMGUsIDB4NzIwYSwgMHgwY2IwLCAweDAwZDYsIDB4MjA2OSwgMHhhZmM3LAotCTB4NjgzMCwgMHhhMDg0LCAweDAwMDMsIDB4MDAwMiwgMHg2YzEyLCAweDZjMTQsIDB4NmMzOCwgMHg2YzEwLAotCTB4MDgwYywgMHgxNGY2LCAweDAwZGUsIDB4MDAwNSwgMHgwMGM2LCAweDY4NDAsIDB4YTA4NiwgMHgwMDAxLAotCTB4MDFiOCwgMHg2ODNjLCAweGEwNjUsIDB4MDEzMCwgMHg2MDBjLCAweGEwMTUsIDB4MDE3MCwgMHg2YTNhLAotCTB4NjAwZiwgMHgwMDAwLCAweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsIDB4MjAxMSwgMHhhZmU2LAotCTB4MjAxMywgMHgwMDAwLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDY4M2EsIDB4NjgzNiwgMHgwYzkwLAotCTB4Njg0MywgMHgwMDAwLCAweDY4MzgsIDB4YTA2NSwgMHgwZDY4LCAweDYwMDMsIDB4MDAwMywgMHgwYzUwLAotCTB4MDBjNiwgMHg2ODQzLCAweDAwMDAsIDB4Njg0NywgMHgwMDAwLCAweDY4M2MsIDB4YTA2NSwgMHgwMTY4LAotCTB4NjAwYywgMHhhMDE1LCAweDAxMzAsIDB4NmEzYSwgMHg2MDBmLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLAotCTB4MDAyMCwgMHg2ODNmLCAweDAwMDAsIDB4NjgzYSwgMHg2ODM2LCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LAotCTB4MDBkNiwgMHgyMDY5LCAweGFmYzcsIDB4NjgwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDAwMiwgMHg2YzYxLAotCTB4NmNmZCwgMHg2Y2ZkLCAweDZjZmQsIDB4NmNmZCwgMHg2Y2ZmLCAweDZjNWYsIDB4NmM1ZiwgMHgwODBjLAotCTB4MTRmNiwgMHg2ODIwLCAweGEwMDUsIDB4MTExMCwgMHgwMGRlLCAweDAwMDUsIDB4MDBjNiwgMHg2ODBjLAotCTB4YTA2NSwgMHgwMTUwLCAweDY4MDcsIDB4MDAwNCwgMHg2ODI2LCAweDY4MmIsIDB4MDAwMCwgMHgwODBjLAotCTB4NmQ0OSwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHg2ODE0LCAweGEwNjUsIDB4MDE1MCwgMHg2ODA3LAotCTB4MDAwMSwgMHg2ODI2LCAweDY4MmIsIDB4MDAwMCwgMHgwODBjLCAweDZkNDksIDB4MDBjZSwgMHgwMGRlLAotCTB4MDAwNSwgMHgwMGU2LCAweDAwMzYsIDB4NmExYywgMHhhMmY1LCAweDAwMDAsIDB4MDkwNCwgMHg2Y2Y5LAotCTB4NzA0YywgMHhhMDBkLCAweDAxMTgsIDB4NzA4OCwgMHhhMDA1LCAweDAxYTAsIDB4NzA1NCwgMHhhMDc1LAotCTB4MDEyMCwgMHhhMjBlLCAweDA5MDQsIDB4NmNmOSwgMHgwMDI4LCAweDY4MTgsIDB4YTIwZSwgMHgwOTA0LAotCTB4NmNmOSwgMHgyMDcwLCAweDcwNGMsIDB4YTAwZCwgMHgwZDg4LCAweDcwODgsIDB4YTAwNSwgMHgxZDcwLAotCTB4MmUwMCwgMHg2ODFlLCAweDczM2MsIDB4NzAzOCwgMHhhMzAyLCAweDFlNDAsIDB4MDgwYywgMHg4MDRmLAotCTB4MDkwNCwgMHg2Y2Y5LCAweDgzMTgsIDB4NzMzZSwgMHg2MTEyLCAweDJlMTAsIDB4NjIxYSwgMHhhMTgwLAotCTB4MDAxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwgMHg2MDVhLCAweGExODAsIDB4MDAxNCwgMHgyMDAzLAotCTB4MDAwMCwgMHhhMTgwLCAweDAwMTUsIDB4MjAwNCwgMHhhMDhhLCAweDE5OWEsIDB4MDIxMCwgMHgyMDAxLAotCTB4MTk5OSwgMHg4MDAzLCAweDgwMWIsIDB4ODMxYiwgMHhhMzE4LCAweDYzMTYsIDB4MDAzZSwgMHgwMGY2LAotCTB4MmM3OCwgMHg3MWEwLCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MTExMCwgMHhkMWJjLAotCTB4MDE1MCwgMHg3MTAwLCAweGQxZjQsIDB4MDEyMCwgMHg3MTE0LCAweGExOGMsIDB4MDBmZiwgMHgwMDQwLAotCTB4MjAwOSwgMHgwMDAwLCAweDAwMjgsIDB4YTFlMCwgMHgyYmU2LCAweDJjMGQsIDB4YTE4YywgMHgwMGZmLAotCTB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4MDgwYywgMHg3MzZmLCAweDczMDAsIDB4YzNkZCwgMHg3MzAyLAotCTB4NjgwNywgMHgwMDAyLCAweDJmMTgsIDB4NmIyNiwgMHg2ODJiLCAweDAwMDAsIDB4NzgxZiwgMHgwMDAzLAotCTB4NzgwMywgMHgwMDAxLCAweDc4MDcsIDB4MDA0MCwgMHgwMGZlLCAweDAwZWUsIDB4MDBjZSwgMHgwMGRlLAotCTB4MDAwNSwgMHgwMDNlLCAweDAwZWUsIDB4MDBjZSwgMHgwY2QwLCAweDAwZGUsIDB4MDAwNSwgMHgwMGM2LAotCTB4NjgwYywgMHhhMDY1LCAweDAxMzgsIDB4NjgwNywgMHgwMDA0LCAweDY4MjYsIDB4NjgyYiwgMHgwMDAwLAotCTB4MDgwYywgMHg2ZDQ5LCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBkNiwgMHgyMDY5LAotCTB4YWZjNywgMHg2ODMwLCAweGEwODYsIDB4MDAwMCwgMHgxMWMwLCAweDIwMDEsIDB4YWQwYywgMHgyMDBjLAotCTB4ZDFiYywgMHgxNTUwLCAweDY4MzgsIDB4YTA3ZCwgMHgwMTgwLCAweDY4MzMsIDB4MDAwMSwgMHg2ODNlLAotCTB4Njg0NywgMHgwMDAwLCAweDAxMjYsIDB4MDBmNiwgMHgyMDkxLCAweDI0MDAsIDB4MDAyZSwgMHgwODBjLAotCTB4MWVlNiwgMHgxMTMwLCAweDAxMmUsIDB4MDgwYywgMHg3NmE1LCAweDAwZGUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDEyZSwgMHhlMDAwLCAweDY4NDMsIDB4MDAwMCwgMHg3ODAzLCAweDAwMDIsIDB4NzgwYywgMHhhMDE1LAotCTB4MDE0MCwgMHg2YTNhLCAweDc4MGYsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLAotCTB4MGM2MCwgMHg2ODNhLCAweDY4MzYsIDB4MGNjMCwgMHhjMWJjLCAweDIxMDIsIDB4MDgwYywgMHg1N2QxLAotCTB4MDg4OCwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgwMDBiLCAweDAwMDUsIDB4NmQ1NywgMHg2ZDVjLAotCTB4NzIxMCwgMHg3MzJjLCAweDZkNWMsIDB4NzIxMCwgMHg3MzJjLCAweDZkNTcsIDB4NmQ1YywgMHgwODBjLAotCTB4NmI3MywgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgwMGM2LAotCTB4MDBmNiwgMHg2MDA0LCAweGEwOGEsIDB4MDA4MCwgMHgxYTBjLCAweDE0ZjYsIDB4NjExOCwgMHgyMTc4LAotCTB4NzlhMCwgMHgyMDExLCAweGFkMzQsIDB4MjIxNCwgMHhkMmFjLCAweDExMTAsIDB4ZDFiYywgMHgwMTUwLAotCTB4NzkwMCwgMHhkMWY0LCAweDAxMjAsIDB4NzkxNCwgMHhhMThjLCAweDAwZmYsIDB4MDA0MCwgMHgyMDA5LAotCTB4MDAwMCwgMHgwMDI4LCAweGExZjgsIDB4MmJlNiwgMHgyZjBkLCAweGExOGMsIDB4MDBmZiwgMHgyYzc4LAotCTB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4YTA4YSwgMHgwMDQwLCAweDFhMDQsIDB4NmRkMCwgMHgwMDMzLAotCTB4MDBmZSwgMHgwMGNlLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwMDUsIDB4NmU3YywgMHg2ZWM3LAotCTB4NmVmNCwgMHg2ZmMxLCAweDZmZWYsIDB4NmZmNywgMHg3MDFkLCAweDcwMmUsIDB4NzAzZiwgMHg3MDQ3LAotCTB4NzA1ZCwgMHg3MDQ3LCAweDcwYjcsIDB4NzAyZSwgMHg3MGQ4LCAweDcwZTAsIDB4NzAzZiwgMHg3MGUwLAotCTB4NzBmMSwgMHg2ZGNlLCAweDZkY2UsIDB4NmRjZSwgMHg2ZGNlLCAweDZkY2UsIDB4NmRjZSwgMHg2ZGNlLAotCTB4NmRjZSwgMHg2ZGNlLCAweDZkY2UsIDB4NmRjZSwgMHg3OTBkLCAweDc5MzIsIDB4Nzk0NywgMHg3OTZhLAotCTB4Nzk4YiwgMHg3MDFkLCAweDZkY2UsIDB4NzAxZCwgMHg3MDQ3LCAweDZkY2UsIDB4NmVmNCwgMHg2ZmMxLAotCTB4NmRjZSwgMHg3ZGFhLCAweDcwNDcsIDB4NmRjZSwgMHg3ZGNhLCAweDcwNDcsIDB4NmRjZSwgMHg3MDNmLAotCTB4NmU3NSwgMHg2ZGUwLCAweDZkY2UsIDB4N2RlZiwgMHg3ZTY0LCAweDdmM2IsIDB4NmRjZSwgMHg3ZjRjLAotCTB4NzAxOCwgMHg3ZjY4LCAweDZkY2UsIDB4NzlhMCwgMHg3ZmMzLCAweDZkY2UsIDB4MDgwYywgMHgxNGY2LAotCTB4MjEwMCwgMHgwMDMzLCAweDAwZmUsIDB4MDBjZSwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMDA1LAotCTB4NmRkZSwgMHg2ZGRlLCAweDZkZGUsIDB4NmUxNCwgMHg2ZTMyLCAweDZlNDgsIDB4MDgwYywgMHgxNGY2LAotCTB4MDBkNiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MTBlLCAweDc4MTAsIDB4MjA2OCwgMHgyMGEzLAotCTB4MjQxNCwgMHgyMGEzLCAweDAwMTgsIDB4MjBhMywgMHgwODAwLCAweDY4M2MsIDB4MjBhMiwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2ODUwLAotCTB4MjBhMiwgMHg2ODU0LCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLAotCTB4MDAxOCwgMHgwODBjLCAweDc4MjEsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4NzgxOCwgMHgyMDY4LAotCTB4NjhhMCwgMHgyMDY5LCAweGFkMDAsIDB4NmFkMCwgMHhkMmFjLCAweDExMTAsIDB4ZDBiYywgMHgwMTEwLAotCTB4YTA4NSwgMHgwMDAxLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLAotCTB4NzEwZSwgMHgyMGEzLCAweDA1MDAsIDB4MjBhMywgMHgwMDAwLCAweDc4MTAsIDB4YTBlOCwgMHgwMDBmLAotCTB4NjgwOCwgMHgyMGEyLCAweDY4MGMsIDB4MjBhMiwgMHg2ODEwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLAotCTB4NjgxOCwgMHgyMGEyLCAweDY4MWMsIDB4MjBhMiwgMHg2MGMzLCAweDAwMTAsIDB4MDgwYywgMHg3ODIxLAotCTB4MDBkZSwgMHgwMDA1LCAweDAxNTYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MTBlLAotCTB4MjBhMywgMHg3ODAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODA4LCAweDgwMDcsIDB4MjBhMiwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwYywgMHg3ODIxLCAweDAxNGUsIDB4MDE1ZSwgMHgwMDA1LAotCTB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMjAwLAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4ZGYxMCwgMHgyMGEzLCAweDAwMzQsIDB4MjA5OSwgMHhhZDA1LAotCTB4MjBhOSwgMHgwMDA0LCAweDUzYTYsIDB4MjA5OSwgMHhhZDAxLCAweDIwYTksIDB4MDAwNCwgMHg1M2E2LAotCTB4MjA5OSwgMHhhZmFkLCAweDIwYTksIDB4MDAxYSwgMHgzMzA0LCAweDgwMDcsIDB4MjBhMiwgMHg5Mzk4LAotCTB4MWYwNCwgMHg2ZTY0LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDRjLAotCTB4MDgwYywgMHg3ODIxLCAweDAxNGUsIDB4MDE1ZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQxNCwgMHgyMDA0LAotCTB4NjA5YSwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MTBlLAotCTB4MjBhMywgMHg1MjAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMGQ2LCAweDIwNjksIDB4YWQ1MSwgMHg2ODA0LAotCTB4ZDA4NCwgMHgwMTUwLCAweDY4MjgsIDB4MjBhMywgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywgMHgyNjhhLAotCTB4MjFhMiwgMHgwMDFlLCAweDAwZGUsIDB4MDAyOCwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHhhZDA1LCAweDUzYTYsIDB4MjBhOSwgMHgwMDA0LAotCTB4MjA5OSwgMHhhZDAxLCAweDUzYTYsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhYywgMHgxMTM4LAotCTB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDgyLCAweDAwN2YsIDB4MDIzOCwgMHgyMDAxLAotCTB4YWQxYiwgMHgyMGE2LCAweDIwMDEsIDB4YWQxYywgMHgyMGE2LCAweDAwNDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MjAwMSwgMHhhZDE0LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxYywgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMGExLAotCTB4MDIwYiwgMHgwODBjLCAweDcxMGUsIDB4MjBhMywgMHgwNTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMDAxLAotCTB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MTEzOCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4YTA4MiwgMHgwMDdmLCAweDAyMzgsIDB4MjAwMSwgMHhhZDFiLCAweDIwYTYsIDB4MjAwMSwgMHhhZDFjLAotCTB4MjBhNiwgMHgwMDQwLCAweDIwYTMsIDB4MDAwMCwgMHgyMDAxLCAweGFkMTQsIDB4MjAwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHgyMGEyLCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweGFkMDUsIDB4NTNhNiwgMHg2MGMzLAotCTB4MDAxMCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MTBlLAotCTB4MDBjNiwgMHg3ODE4LCAweDIwNjAsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NTAzNywgMHgwMGNlLAotCTB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDg2LCAweDAwN2UsIDB4MTEzMCwgMHgyMGEzLAotCTB4MDQwMCwgMHg2MjBjLCAweGMyYjQsIDB4NjIwZSwgMHgwMDEwLCAweDIwYTMsIDB4MDMwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEwODYsIDB4MDA3ZSwgMHgxOTA0LAotCTB4NmY4MywgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGE0LCAweDAxYzgsIDB4MjA5OSwgMHhhZjhkLAotCTB4MzNhNiwgMHg5Mzk4LCAweDIwYTMsIDB4MDAwMCwgMHg5Mzk4LCAweDMzMDQsIDB4YTA4NCwgMHgyMDAwLAotCTB4MjBhMiwgMHg5Mzk4LCAweDMzYTYsIDB4OTM5OCwgMHgyMGEzLCAweDAwMDAsIDB4OTM5OCwgMHgyMDAxLAotCTB4MjcxMCwgMHgyMGEyLCAweDkzOTgsIDB4MzNhNiwgMHg5Mzk4LCAweDMzYTYsIDB4MDBkMCwgMHgyMDk5LAotCTB4YWY4ZCwgMHgzM2E2LCAweDkzOTgsIDB4MzNhNiwgMHg5Mzk4LCAweDMzMDQsIDB4MDgwYywgMHg1NzRmLAotCTB4MTExOCwgMHhhMDg0LCAweDM3ZmYsIDB4MDAxMCwgMHhhMDg0LCAweDNmZmYsIDB4MjBhMiwgMHg5Mzk4LAotCTB4MzNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHhhZDA1LCAweDUzYTYsIDB4MjBhOSwgMHgwMDA0LAotCTB4MjA5OSwgMHhhZDAxLCAweDUzYTYsIDB4MjBhOSwgMHgwMDA4LCAweDIwYTMsIDB4MDAwMCwgMHgxZjA0LAotCTB4NmY1ZCwgMHgyMGE5LCAweDAwMDgsIDB4MjBhMywgMHgwMDAwLCAweDFmMDQsIDB4NmY2MywgMHgyMDk5LAotCTB4YWY5NSwgMHgzMzA0LCAweGMwZGQsIDB4MjBhMiwgMHgyMDAxLCAweGFkNzEsIDB4MjAwNCwgMHhkMGU0LAotCTB4MDE1OCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDkzOTgsIDB4OTM5OCwgMHg5Mzk4LAotCTB4MzNhNiwgMHgyMGE5LCAweDAwMDQsIDB4MDAxMCwgMHgyMGE5LCAweDAwMDcsIDB4MjBhMywgMHgwMDAwLAotCTB4MWYwNCwgMHg2ZjdlLCAweDA0NjgsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhNCwgMHgwMTQwLAotCTB4MjAwMSwgMHhhZjhlLCAweDIwMDQsIDB4NjBlMywgMHgwMDAwLCAweDA4MGMsIDB4MjZjYiwgMHg2MGUyLAotCTB4MjA5OSwgMHhhZjhkLCAweDIwYTksIDB4MDAwOCwgMHg1M2E2LCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LAotCTB4YWQwNSwgMHg1M2E2LCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweGFkMDEsIDB4NTNhNiwgMHgyMGE5LAotCTB4MDAwOCwgMHgyMGEzLCAweDAwMDAsIDB4MWYwNCwgMHg2ZmExLCAweDIwYTksIDB4MDAwOCwgMHgyMGEzLAotCTB4MDAwMCwgMHgxZjA0LCAweDZmYTcsIDB4MjA5OSwgMHhhZjk1LCAweDIwYTksIDB4MDAwOCwgMHg1M2E2LAotCTB4MjBhOSwgMHgwMDA4LCAweDIwYTMsIDB4MDAwMCwgMHgxZjA0LCAweDZmYjIsIDB4MjBhOSwgMHgwMDBhLAotCTB4MjBhMywgMHgwMDAwLCAweDFmMDQsIDB4NmZiOCwgMHg2MGMzLCAweDAwNzQsIDB4MDgwYywgMHg3ODIxLAotCTB4MDAwNSwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MTBlLCAweDIwYTMsIDB4MjAxMCwgMHgyMGEzLAotCTB4MDAxNCwgMHgyMGEzLCAweDA4MDAsIDB4MjBhMywgMHgyMDAwLCAweGEwMDYsIDB4MjBhMiwgMHgyMGEyLAotCTB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MDBmNiwgMHgyMDc5LCAweGFkNTEsIDB4NzkwNCwgMHgwMGZlLAotCTB4ZDFhYywgMHgxMTEwLCAweGEwODUsIDB4MDAyMCwgMHhkMWE0LCAweDAxMTAsIDB4YTA4NSwgMHgwMDEwLAotCTB4YTA4NSwgMHgwMDAyLCAweDAwZDYsIDB4MDgwNCwgMHg3MDk5LCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMGExLAotCTB4MDIwYiwgMHgwODBjLCAweDcxMGUsIDB4MjBhMywgMHg1MDAwLCAweDA4MDQsIDB4NmYwZiwgMHgyMGExLAotCTB4MDIwYiwgMHgwODBjLCAweDcxMGUsIDB4MjBhMywgMHgyMTEwLCAweDIwYTMsIDB4MDAxNCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LAotCTB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhMiwgMHgwMDIwLCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLAotCTB4NzFhYSwgMHgyMGEzLCAweDAyMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MGMzLCAweDAwMDQsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLAotCTB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDEwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAzLAotCTB4MjBhMywgMHgyYTAwLCAweDYwYzMsIDB4MDAwOCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMGExLAotCTB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMjAwLCAweDA4MDQsIDB4NmYwZiwgMHgyMGExLAotCTB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODI4LAotCTB4YTAwNSwgMHgwMTEwLCAweDIwYTIsIDB4MDAxMCwgMHgyMGEzLCAweDAwMDMsIDB4NzgxMCwgMHgyMGEyLAotCTB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LCAweDAwZDYsIDB4MjBhMSwgMHgwMjBiLAotCTB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIxMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywgMHgwODAwLAotCTB4NzgxOCwgMHgyMDY4LCAweDY4OTQsIDB4YTA4NiwgMHgwMDE0LCAweDExNzgsIDB4Njk5OCwgMHhhMTg0LAotCTB4YzAwMCwgMHgxMTQwLCAweGQxZWMsIDB4MDExOCwgMHgyMGEzLCAweDIxMDAsIDB4MDA0MCwgMHgyMGEzLAotCTB4MDEwMCwgMHgwMDI4LCAweDIwYTMsIDB4MDQwMCwgMHgwMDEwLCAweDIwYTMsIDB4MDcwMCwgMHhhMDA2LAotCTB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDAwZjYsIDB4MjA3OSwgMHhhZDUxLAotCTB4NzkwNCwgMHgwMGZlLCAweGQxYWMsIDB4MTExMCwgMHhhMDg1LCAweDAwMjAsIDB4ZDFhNCwgMHgwMTEwLAotCTB4YTA4NSwgMHgwMDEwLCAweDIwMDksIDB4YWQ3MywgMHgyMTBjLCAweGQxODQsIDB4MTExMCwgMHhhMDg1LAotCTB4MDAwMiwgMHgwMDI2LCAweDIwMDksIDB4YWQ3MSwgMHgyMTBjLCAweGQxZTQsIDB4MDEzMCwgMHhjMGM1LAotCTB4YTA5NCwgMHgwMDMwLCAweGEyOTYsIDB4MDAxMCwgMHgwMTQwLCAweGQxZWMsIDB4MDEzMCwgMHhhMDk0LAotCTB4MDAzMCwgMHhhMjk2LCAweDAwMTAsIDB4MDEwOCwgMHhjMGJkLCAweDAwMmUsIDB4MjBhMiwgMHgyMGEyLAotCTB4MjBhMiwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg3ODIxLCAweDAwZGUsIDB4MDAwNSwgMHgyMGExLAotCTB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMjEwLCAweDIwYTMsIDB4MDAxNCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LAotCTB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhYSwgMHgyMGEzLCAweDAyMDAsIDB4MDgwNCwgMHg2ZTgyLAotCTB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhYSwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAzLCAweDIwYTMsIDB4MmEwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwYywgMHg3ODIxLAotCTB4MDAwNSwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLAotCTB4NzFhYSwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwYiwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MDAyNiwgMHgwMDM2LAotCTB4MDA0NiwgMHgyMDE5LCAweDMyMDAsIDB4MjAyMSwgMHgwODAwLCAweDAwMzgsIDB4MDAyNiwgMHgwMDM2LAotCTB4MDA0NiwgMHgyMDE5LCAweDIyMDAsIDB4MjAyMSwgMHgwMTAwLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLAotCTB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDE0LCAweGEyODYsIDB4MDA3ZSwgMHgxMWEwLAotCTB4YTM4NSwgMHgwMGZmLCAweDIwYTIsIDB4MjBhMywgMHhmZmZlLCAweDIwYTMsIDB4MDAwMCwgMHgyMDExLAotCTB4YWQxNCwgMHgyMjE0LCAweDIwMDEsIDB4YWY5ZCwgMHgyMDA0LCAweGEwMDUsIDB4MDExOCwgMHgyMDExLAotCTB4YWQxYywgMHgyMjE0LCAweDIyYTIsIDB4MDRkMCwgMHhhMjg2LCAweDAwN2YsIDB4MTEzOCwgMHgwMGQ2LAotCTB4YTM4NSwgMHgwMGZmLCAweDIwYTIsIDB4MjBhMywgMHhmZmZkLCAweDAwYzgsIDB4MjAwMSwgMHhhZDM0LAotCTB4MjAwNCwgMHhkMGFjLCAweDExMTAsIDB4ZDJiYywgMHgwMWM4LCAweGEyODYsIDB4MDA4MCwgMHgwMGQ2LAotCTB4MTEzMCwgMHhhMzg1LCAweDAwZmYsIDB4MjBhMiwgMHgyMGEzLCAweGZmZmMsIDB4MDA0MCwgMHhhMmU4LAotCTB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgyMDY5LAotCTB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwMGRlLCAweDAwODAsIDB4MDBkNiwgMHhhMmU4LAotCTB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwMGRlLAotCTB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwgMHgyMjE0LCAweDIyYTIsIDB4YTQ4NSwgMHgwMDI5LAotCTB4MjBhMiwgMHgwMDRlLCAweDAwM2UsIDB4MjBhMywgMHgwMDAwLCAweDA4MGMsIDB4NzgxMCwgMHgyMmEyLAotCTB4MjBhMywgMHgwMDAwLCAweDJmYTIsIDB4MjBhMywgMHhmZmZmLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgwMDJlLCAweDAwMDUsIDB4MDAyNiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLAotCTB4MjBhMywgMHgwMmZmLCAweDIwMTEsIDB4ZmZmYywgMHgyMmEyLCAweDAwZDYsIDB4MjA2OSwgMHhhZDFiLAotCTB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwgMHgyMGEzLCAweDIwMjksIDB4MjBhMywgMHgwMDAwLAotCTB4MDhlMCwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4ZmMwMiwgMHgyMGEzLAotCTB4MDAwMCwgMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LCAweDIwMTksIDB4MzMwMCwgMHgyMDIxLAotCTB4MDgwMCwgMHgwMDM4LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LCAweDIwMTksIDB4MjMwMCwgMHgyMDIxLAotCTB4MDEwMCwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHgyMDExLCAweGFkMzQsIDB4MjIxNCwgMHhkMmFjLCAweDExMTgsIDB4YTA5MiwgMHgwMDdlLAotCTB4MDJkOCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTMwNSwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDY4MTAsIDB4YTAwNSwgMHgxMTQwLCAweDY4MTQsIDB4YTAwNSwgMHgxMTI4LAotCTB4MjBhMywgMHgwMGZmLCAweDIwYTMsIDB4ZmZmZSwgMHgwMDI4LCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LAotCTB4OGQ2OCwgMHgyZGE2LCAweDAwZGUsIDB4MDA4MCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLAotCTB4NjgxMCwgMHhhMzA1LCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLAotCTB4MjAxMSwgMHhhZDE0LCAweDIyMTQsIDB4MjJhMiwgMHhhNDg1LCAweDAwOTgsIDB4MjBhMiwgMHgyMGEzLAotCTB4MDAwMCwgMHgwMDRlLCAweDAwM2UsIDB4MDgwYywgMHg3ODEwLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMDJlLAotCTB4MDAwNSwgMHgwODBjLCAweDc4MTAsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4N2EwOCwgMHgyMmEyLAotCTB4NzgxMCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDAyZSwgMHgwMDA1LAotCTB4MDBjNiwgMHgwMGY2LCAweDYwMDQsIDB4YTA4YSwgMHgwMDg1LCAweDBhMGMsIDB4MTRmNiwgMHhhMDhhLAotCTB4MDA4YywgMHgxYTBjLCAweDE0ZjYsIDB4NjExOCwgMHgyMTc4LCAweDc5YTAsIDB4MjAxMSwgMHhhZDM0LAotCTB4MjIxNCwgMHhkMmFjLCAweDExMTAsIDB4ZDFiYywgMHgwMTUwLCAweDc5MDAsIDB4ZDFmNCwgMHgwMTIwLAotCTB4NzkxNCwgMHhhMThjLCAweDAwZmYsIDB4MDA0MCwgMHgyMDA5LCAweDAwMDAsIDB4MDAyOCwgMHhhMWY4LAotCTB4MmJlNiwgMHgyZjBkLCAweGExOGMsIDB4MDBmZiwgMHgyYzc4LCAweDIwNjEsIDB4MDEwMCwgMHg2MTlhLAotCTB4YTA4MiwgMHgwMDg1LCAweDAwMWIsIDB4MDBmZSwgMHgwMGNlLCAweDAwMDUsIDB4NzI0NywgMHg3MjUxLAotCTB4NzI2YywgMHg3MjQ1LCAweDcyNDUsIDB4NzI0NSwgMHg3MjQ3LCAweDA4MGMsIDB4MTRmNiwgMHgwMTQ2LAotCTB4MjBhMSwgMHgwMjBiLCAweDA0YTEsIDB4NjBjMywgMHgwMDAwLCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLAotCTB4MDAwNSwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcyYjgsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDc4MDgsIDB4MjBhMiwgMHg3ODEwLCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHhmZmZmLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDBjLAotCTB4MDgwYywgMHg3ODIxLCAweDAxNGUsIDB4MDAwNSwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLAotCTB4NzJmMiwgMHgyMGEzLCAweDAwMDMsIDB4MjBhMywgMHgwMzAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MGMzLCAweDAwMDQsIDB4MDgwYywgMHg3ODIxLCAweDAxNGUsIDB4MDAwNSwgMHgwMDI2LAotCTB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTE4LCAweGEwOTIsIDB4MDA3ZSwgMHgwMjg4LAotCTB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODEwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwMGRlLAotCTB4MDA4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHg4MTAwLAotCTB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwgMHgyMGEzLCAweDAwMDAsIDB4MjAxMSwgMHhhZDE0LAotCTB4MjIxNCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwOSwgMHgyMGEzLCAweDAwMDAsIDB4MDgwNCwgMHg3MTc1LAotCTB4MDAyNiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHgyMDExLCAweGFkMzQsIDB4MjIxNCwgMHhkMmFjLCAweDExMTgsIDB4YTA5MiwgMHgwMDdlLAotCTB4MDI4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHg4NDAwLAotCTB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhZDFiLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LAotCTB4MDBkZSwgMHgwMDg4LCAweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LAotCTB4ODQwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwgMHgyMDExLAotCTB4YWQxNCwgMHgyMjE0LCAweDIyYTIsIDB4MjAwMSwgMHgwMDk5LCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MDgwNCwgMHg3MjAxLCAweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LAotCTB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTE4LAotCTB4YTA5MiwgMHgwMDdlLCAweDAyODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLAotCTB4YTA4NSwgMHg4NTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LAotCTB4OGQ2OCwgMHgyZGE2LCAweDAwZGUsIDB4MDA4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLAotCTB4NjgxMCwgMHhhMDg1LCAweDg1MDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMDExLCAweGFkMTQsIDB4MjIxNCwgMHgyMmEyLCAweDIwMDEsIDB4MDA5OSwgMHgyMGEyLAotCTB4MjBhMywgMHgwMDAwLCAweDA4MDQsIDB4NzIwMSwgMHgwMGM2LCAweDAwZjYsIDB4MmM3OCwgMHg3ODA0LAotCTB4YTA4YSwgMHgwMDQwLCAweDBhMGMsIDB4MTRmNiwgMHhhMDhhLCAweDAwNTMsIDB4MWEwYywgMHgxNGY2LAotCTB4NzkxOCwgMHgyMTYwLCAweDYxYTAsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLAotCTB4ZDFiYywgMHgwMTUwLCAweDYxMDAsIDB4ZDFmNCwgMHgwMTIwLCAweDYxMTQsIDB4YTE4YywgMHgwMGZmLAotCTB4MDA0MCwgMHgyMDA5LCAweDAwMDAsIDB4MDAyOCwgMHhhMWUwLCAweDJiZTYsIDB4MmMwZCwgMHhhMThjLAotCTB4MDBmZiwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHhhMDgyLCAweDAwNDAsIDB4MDAxYiwgMHgwMGZlLAotCTB4MDBjZSwgMHgwMDA1LCAweDczNmYsIDB4NzQ3YiwgMHg3NDE4LCAweDc2MWEsIDB4NzM2ZCwgMHg3MzZkLAotCTB4NzM2ZCwgMHg3MzZkLCAweDczNmQsIDB4NzM2ZCwgMHg3MzZkLCAweDdiNDEsIDB4N2I1MSwgMHg3YjYxLAotCTB4N2I3MSwgMHg3MzZkLCAweDdmNzksIDB4NzM2ZCwgMHg3YjMwLCAweDA4MGMsIDB4MTRmNiwgMHgwMGQ2LAotCTB4MDE1NiwgMHgwMTQ2LCAweDc4MGIsIDB4ZmZmZiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3M2NmLAotCTB4NzkxMCwgMHgyMTY4LCAweDY5NDgsIDB4Nzk1MiwgMHgyMWEyLCAweGEwMTYsIDB4MjJhMiwgMHgyMmEyLAotCTB4MjJhMiwgMHg2OTRjLCAweGExODQsIDB4MDAwZiwgMHgxMTE4LCAweDIwMDEsIDB4MDAwNSwgMHgwMDQwLAotCTB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDE4LCAweGEwODQsIDB4MDAwNiwgMHg4MDA0LAotCTB4MDAxNiwgMHgyMDA4LCAweDc4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDgwMDcsIDB4YTEwNSwgMHgwMDFlLAotCTB4MjBhMiwgMHhkMWFjLCAweDAxMTgsIDB4MjBhMywgMHgwMDAyLCAweDAwNDgsIDB4ZDFiNCwgMHgwMTE4LAotCTB4MjBhMywgMHgwMDAxLCAweDAwMjAsIDB4MjBhMywgMHgwMDAwLCAweDIyMzAsIDB4MDAxMCwgMHg2YTgwLAotCTB4NmU3YywgMHgyMGE5LCAweDAwMDgsIDB4MDEzNiwgMHhhZDg4LCAweDAwMTcsIDB4MjE5OCwgMHgyMGExLAotCTB4MDIxYiwgMHg1M2E2LCAweDAxM2UsIDB4MjBhMSwgMHgwMjBiLCAweDIyYTIsIDB4MjZhMiwgMHg2MGMzLAotCTB4MDAyMCwgMHgyMGUxLCAweDkwODAsIDB4NjAxNCwgMHhhMDg0LCAweDAwMDQsIDB4YTA4NSwgMHgwMDA5LAotCTB4NjAxNiwgMHgyMDAxLCAweGFmZTMsIDB4MjAwMywgMHgwN2QwLCAweDIwMDEsIDB4YWZlMiwgMHgyMDAzLAotCTB4MDAwOSwgMHgwODBjLCAweDE3YmYsIDB4MDE0ZSwgMHgwMTVlLCAweDAwZGUsIDB4MDAwNSwgMHgyMGUxLAotCTB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4N2ExOCwgMHhhMjgwLCAweDAwMjMsIDB4MjAxNCwgMHg4MjEwLAotCTB4YTI5NCwgMHgwMGZmLCAweDIyMDIsIDB4ODIxNywgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4MjAxOSwgMHhhZDM0LCAweDIzMWMsIDB4ZDNhYywgMHgxMTEwLCAweGQwYmMsIDB4MDE4OCwgMHgwMGQ2LAotCTB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA2MDAsIDB4MjBhMiwgMHg2ODE0LAotCTB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwgMHgwMDg4LAotCTB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDYwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMDksIDB4YWQxNCwgMHgyMTBjLAotCTB4MjFhMiwgMHgyMGEzLCAweDA4MjksIDB4MjBhMywgMHgwMDAwLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MmZhMiwgMHgyMGEzLCAweGZmZmYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMDA1LAotCTB4MDBkNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDBjMSwgMHg3ODEwLAotCTB4MjA2OCwgMHg2ODYwLCAweDIwYTIsIDB4Njg1YywgMHgyMGEyLCAweDY4ODAsIDB4MjBhMiwgMHg2ODdjLAotCTB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4NjBjMywgMHgwMDBjLAotCTB4MDgwYywgMHg3ODIxLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDI2LAotCTB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDE4OCwgMHgwMGQ2LAotCTB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA1MDAsIDB4MjBhMiwgMHg2ODE0LAotCTB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwgMHgwMDg4LAotCTB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDUwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwgMHgyMjE0LAotCTB4MjJhMiwgMHgyMGEzLCAweDA4ODksIDB4MjBhMywgMHgwMDAwLCAweDA4MGMsIDB4NzgxMCwgMHgyMmEyLAotCTB4MjBhMywgMHgwMDAwLCAweDdhMDgsIDB4MjJhMiwgMHgyZmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgwMDJlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHg3ODEwLAotCTB4YTA2ZCwgMHgwODBjLCAweDUwMjUsIDB4MDE0OCwgMHg2ODRjLCAweGEwODQsIDB4MjAyMCwgMHhhMDg2LAotCTB4MjAyMCwgMHgxMTE4LCAweDc4MjAsIDB4YzBjZCwgMHg3ODIyLCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLAotCTB4NzVkMCwgMHhhMDE2LCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHg3ODEwLAotCTB4YTA4NCwgMHhmMDAwLCAweDExMzAsIDB4NzgxMCwgMHhhMDg0LCAweDA3MDAsIDB4ODAwNywgMHgwMDQzLAotCTB4MDAxMCwgMHhhMDA2LCAweDAwMmIsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDBkZSwgMHgwMDA1LAotCTB4NzRiMiwgMHg3NTQ3LCAweDc1NTAsIDB4NzU3OSwgMHg3NThjLCAweDc1YTcsIDB4NzViMCwgMHg3NGIwLAotCTB4MDgwYywgMHgxNGY2LCAweDAwMTYsIDB4MDAzNiwgMHg2OTRjLCAweGExOGMsIDB4MDAwMywgMHgwMTE4LAotCTB4YTE4NiwgMHgwMDAzLCAweDExNzAsIDB4NmI3OCwgMHg3ODIwLCAweGQwY2MsIDB4MDEwOCwgMHhjM2U1LAotCTB4MjNhMiwgMHg2ODY4LCAweDIwYTIsIDB4Njg2NCwgMHgyMGEyLCAweDAwM2UsIDB4MDAxZSwgMHgwODA0LAotCTB4NzU4MywgMHhhMTg2LCAweDAwMDEsIDB4MTkwYywgMHgxNGY2LCAweDZiNzgsIDB4NzgyMCwgMHhkMGNjLAotCTB4MDEwOCwgMHhjM2U1LCAweDIzYTIsIDB4Njg2OCwgMHgyMGEyLCAweDY4NjQsIDB4MjBhMiwgMHgyMmEyLAotCTB4Njg3NCwgMHgyMGEyLCAweDIyYTIsIDB4Njg3YywgMHgyMGEyLCAweDIwMDksIDB4MDAxOCwgMHhhMzg0LAotCTB4MDMwMCwgMHgwOTA0LCAweDc1NDEsIDB4ZDNjNCwgMHgwMTEwLCAweDY4N2MsIDB4YTEwOCwgMHhkM2NjLAotCTB4MDExMCwgMHg2ODc0LCAweGExMDgsIDB4MDE1NiwgMHgyMGE5LCAweDAwMGQsIDB4YWQ4MCwgMHgwMDIwLAotCTB4MjAxYywgMHg4MzFmLCAweDIzYTIsIDB4ODAwMCwgMHgxZjA0LCAweDc0ZjAsIDB4MDE1ZSwgMHgyMmEyLAotCTB4MjJhMiwgMHgyMmEyLCAweGExODQsIDB4MDAwMywgMHgwOTA0LCAweDc1NDEsIDB4MjBhMSwgMHgwMjBiLAotCTB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgwMDA2LCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHgyMDExLCAweGFkMzQsIDB4MjIxNCwgMHhkMmFjLCAweDExMTAsIDB4ZDBiYywgMHgwMTg4LAotCTB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwMGRlLAotCTB4MDA4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNzAwLAotCTB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwgMHgyMGEzLCAweDAwMDAsIDB4MjAxMSwgMHhhZDE0LAotCTB4MjIxNCwgMHgyMmEyLCAweDAwMGUsIDB4N2IyMCwgMHhkM2NjLCAweDAxMTgsIDB4MjBhMywgMHgwODg5LAotCTB4MDAxMCwgMHgyMGEzLCAweDA4OTgsIDB4MjBhMiwgMHgwODBjLCAweDc4MTAsIDB4MjJhMiwgMHgyMGEzLAotCTB4MDAwMCwgMHg2MWMyLCAweDAwM2UsIDB4MDAxZSwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMDExLAotCTB4MDAwOCwgMHg3ODIwLCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwgMHgwNDg4LAotCTB4MjAxMSwgMHgwMzAyLCAweDc4MjAsIDB4ZDBjYywgMHgwMTA4LCAweGMyZTUsIDB4MjJhMiwgMHhhMDE2LAotCTB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjBhMywgMHgwMDEyLCAweDIyYTIsIDB4MjBhMywgMHgwMDA4LAotCTB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMGEzLCAweDcwMDAsIDB4MjBhMywgMHgwNTAwLAotCTB4MjJhMiwgMHgyMGEzLCAweDAwMGEsIDB4MjJhMiwgMHgyMmEyLCAweDIwYTMsIDB4MjUwMCwgMHgyMmEyLAotCTB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHg2MGMzLCAweDAwMzIsIDB4MDgwYywgMHg3ODIxLAotCTB4MDAwNSwgMHgyMDExLCAweDAwMjgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHgyMmEyLAotCTB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHg2MGMzLAotCTB4MDAxOCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMDExLCAweDAxMDAsIDB4NzgyMCwgMHhkMGNjLAotCTB4MDEwOCwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLAotCTB4MjJhMiwgMHgyMGEzLCAweDAwMDgsIDB4MjJhMiwgMHg3ODU0LCAweGEwODQsIDB4MDBmZiwgMHgyMGEyLAotCTB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAyMCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMDExLAotCTB4MDAwOCwgMHg3ODIwLCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwgMHgwODg4LAotCTB4MDAzNiwgMHg3YjEwLCAweGEzODQsIDB4ZmYwMCwgMHg3ODEyLCAweGEzODQsIDB4MDBmZiwgMHg4MDAxLAotCTB4MTEzOCwgMHg3ODIwLCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDIyYTIsIDB4MDAzZSwgMHgwODA4LAotCTB4MDA0NiwgMHgyMDIxLCAweDA4MDAsIDB4MDAwNiwgMHg3ODIwLCAweGQwY2MsIDB4MDAwZSwgMHgwMTA4LAotCTB4YzRlNSwgMHgyNGEyLCAweDAwNGUsIDB4MjJhMiwgMHgyMGEyLCAweDAwM2UsIDB4MDgwNCwgMHg3NTgzLAotCTB4MDAyNiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHgyMDExLCAweGFkMzQsIDB4MjIxNCwgMHhkMmFjLCAweDExMTAsIDB4ZDBiYywgMHgwMTg4LAotCTB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwMGRlLAotCTB4MDA4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNzAwLAotCTB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwgMHgyMGEzLCAweDAwMDAsIDB4MjAxMSwgMHhhZDE0LAotCTB4MjIxNCwgMHgyMmEyLCAweDc4MjAsIDB4ZDBjYywgMHgwMTE4LCAweDIwYTMsIDB4MDg4OSwgMHgwMDEwLAotCTB4MjBhMywgMHgwODk4LCAweDIwYTMsIDB4MDAwMCwgMHgwODBjLCAweDc4MTAsIDB4MjJhMiwgMHgyMGEzLAotCTB4MDAwMCwgMHg3YTA4LCAweDIyYTIsIDB4MmZhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4MDAyZSwgMHgwMDA1LCAweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MDAxNiwgMHgwMDM2LAotCTB4NzgxMCwgMHhhMDg0LCAweDA3MDAsIDB4ODAwNywgMHgwMDNiLCAweDAwM2UsIDB4MDAxZSwgMHgwMTRlLAotCTB4MDEzZSwgMHgwMTVlLCAweDAwZGUsIDB4MDAwNSwgMHg3NjM0LCAweDc2MzQsIDB4NzYzNiwgMHg3NjM0LAotCTB4NzYzNCwgMHg3NjM0LCAweDc2NTgsIDB4NzYzNCwgMHgwODBjLCAweDE0ZjYsIDB4NzkxMCwgMHhhMThjLAotCTB4ZjhmZiwgMHhhMThkLCAweDA2MDAsIDB4NzkxMiwgMHgyMGExLCAweDAyMGIsIDB4MjAwOSwgMHgwMDAzLAotCTB4MDBmOSwgMHgwMGQ2LCAweDIwNjksIDB4YWQ1MSwgMHg2ODA0LCAweGQwYmMsIDB4MDEzMCwgMHg2ODJjLAotCTB4YTA4NCwgMHgwMGZmLCAweDgwMDcsIDB4MjBhMiwgMHgwMDEwLCAweDIwYTMsIDB4M2YwMCwgMHgwMGRlLAotCTB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NjBjMywgMHgwMDAxLCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LAotCTB4MjBhMSwgMHgwMjBiLCAweDIwMDksIDB4MDAwMywgMHgwMDE5LCAweDIwYTMsIDB4N2YwMCwgMHgwYzgwLAotCTB4MDAyNiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHgyMDExLCAweGFkMzQsIDB4MjIxNCwgMHhkMmFjLCAweDExMTAsIDB4ZDBiYywgMHgwMTg4LAotCTB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDEwMCwgMHgyMGEyLAotCTB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwMGRlLAotCTB4MDA4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwMTAwLAotCTB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwgMHgyMGEzLCAweDAwMDAsIDB4MjAxMSwgMHhhZDE0LAotCTB4MjIxNCwgMHgyMmEyLCAweDIwYTMsIDB4MDg4OCwgMHhhMThkLCAweDAwMDgsIDB4MjFhMiwgMHgwODBjLAotCTB4NzgxMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwgMHg3YTA4LCAweDIyYTIsIDB4MmZhMiwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDAyZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LAotCTB4MDA1NiwgMHgwMDQ2LCAweDAwMzYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwgMHg3MTUwLAotCTB4NzgxOCwgMHgyMDY4LCAweDY4YTAsIDB4MjAyOCwgMHg3NmQwLCAweGQ2YWMsIDB4MTEzMCwgMHhkMGJjLAotCTB4MTEyMCwgMHg2OTEwLCAweDZhMTQsIDB4NzQ1MCwgMHgwMDIwLCAweDY5MTAsIDB4NmExNCwgMHg3MzZjLAotCTB4NzQ3MCwgMHg3ODFjLCAweGEwYmUsIDB4MDAwNiwgMHgwOTA0LCAweDc3NWIsIDB4YTBiZSwgMHgwMDBhLAotCTB4MTVlOCwgMHhhMTg1LCAweDAyMDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsIDB4NjQ2ZSwgMHg2MDczLAotCTB4MjAyOSwgMHg2MDc3LCAweDAwMDAsIDB4Njg4YywgMHg4MDAwLCAweGEwODQsIDB4MDBmZiwgMHg2ODhlLAotCTB4ODAwNywgMHg2MDdhLCAweDYwN2YsIDB4MDAwMCwgMHgyZjAwLCAweDYwODIsIDB4NzgwOCwgMHg2MDg2LAotCTB4NzgxMCwgMHgyMDcwLCAweDcwMTQsIDB4NjA4YSwgMHg3MDEwLCAweDYwOGUsIDB4NzAwYywgMHg2MGM2LAotCTB4NzAwOCwgMHg2MGNhLCAweDY4NmMsIDB4NjBjZSwgMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLAotCTB4NjA5ZiwgMHgwMDAwLCAweDA4MGMsIDB4ODAxNCwgMHgyMDA5LCAweDA3ZDAsIDB4NjBjNCwgMHhhMDg0LAotCTB4ZmZmMCwgMHhhMDA1LCAweDAxMTAsIDB4MjAwOSwgMHgxYjU4LCAweDA4MGMsIDB4NjU4NiwgMHgwMDNlLAotCTB4MDA0ZSwgMHgwMDVlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4NzBkMCwgMHhkMGFjLAotCTB4MTExMCwgMHhkNWJjLCAweDAxMzgsIDB4YTE4NSwgMHgwMTAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLAotCTB4NjQ2ZSwgMHgwMDM4LCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjA2YiwgMHgwMDAwLAotCTB4NjQ2ZSwgMHg2MDczLCAweDA4MDksIDB4NjA3NywgMHgwMDA4LCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LAotCTB4MDBmZiwgMHg2ODhlLCAweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDgyLAotCTB4NzgwOCwgMHg2MDg2LCAweDc4MTAsIDB4MjA3MCwgMHg3MDE0LCAweDYwOGEsIDB4NzAxMCwgMHg2MDhlLAotCTB4NzAwYywgMHg2MGM2LCAweDcwMDgsIDB4NjBjYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LAotCTB4NjBkNywgMHgwMDAwLCAweGE1ODIsIDB4MDA4MCwgMHgwMjQ4LCAweDZhMDAsIDB4ZDJmNCwgMHgwMTIwLAotCTB4NmExNCwgMHhhMjk0LCAweDAwZmYsIDB4MDAxMCwgMHgyMDExLCAweDAwMDAsIDB4NjI5ZSwgMHgwODBjLAotCTB4ODAxNCwgMHgyMDA5LCAweDA3ZDAsIDB4NjBjNCwgMHhhMDg0LCAweGZmZjAsIDB4YTAwNSwgMHgwMTEwLAotCTB4MjAwOSwgMHgxYjU4LCAweDA4MGMsIDB4NjU4NiwgMHgwMDNlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4NzgxMCwgMHgyMDcwLCAweDcwNGMsIDB4YTA4NCwgMHgwMDAzLAotCTB4YTA4NiwgMHgwMDAyLCAweDA5MDQsIDB4NzdiMSwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLAotCTB4MTExMCwgMHhkNWJjLCAweDAxMzgsIDB4YTE4NSwgMHgwMTAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLAotCTB4NjQ2ZSwgMHgwMDM4LCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjA2YiwgMHgwMDAwLAotCTB4NjQ2ZSwgMHg2MDczLCAweDA4ODAsIDB4NjA3NywgMHgwMDA4LCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LAotCTB4MDBmZiwgMHg2ODhlLCAweDgwMDcsIDB4NjA3YSwgMHg3ODM0LCAweDYwN2UsIDB4MmYwMCwgMHg2MDg2LAotCTB4NzgwOCwgMHg2MDgyLCAweDcwNjAsIDB4NjA4YSwgMHg3MDVjLCAweDYwOGUsIDB4NzA4MCwgMHg2MGM2LAotCTB4NzA3YywgMHg2MGNhLCAweDcwN2MsIDB4NzkyYywgMHhhMTA4LCAweDc5MmUsIDB4NzA4MCwgMHg3OTI4LAotCTB4YTEwOSwgMHg3OTJhLCAweDY4NmMsIDB4NjBjZSwgMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLAotCTB4YTU4MiwgMHgwMDgwLCAweDAyNDgsIDB4NmEwMCwgMHhkMmY0LCAweDAxMjAsIDB4NmExNCwgMHhhMjk0LAotCTB4MDBmZiwgMHgwMDEwLCAweDIwMTEsIDB4MDAwMCwgMHg2MjllLCAweDA4MGMsIDB4ODAxMSwgMHgwODA0LAotCTB4Nzc0OSwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExMTAsIDB4ZDViYywgMHgwMTM4LAotCTB4YTE4NSwgMHgwNzAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLCAweDY0NmUsIDB4MDAzOCwgMHhhMTg1LAotCTB4MDcwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjA2YiwgMHgwMDAwLCAweDY0NmUsIDB4MDgwYywgMHg1MDI1LAotCTB4MDE4MCwgMHgwMGQ2LCAweDc4MTAsIDB4YTA2ZCwgMHg2ODRjLCAweDAwZGUsIDB4YTA4NCwgMHgyMDIwLAotCTB4YTA4NiwgMHgyMDIwLCAweDExMzAsIDB4NzgyMCwgMHhjMGNkLCAweDc4MjIsIDB4NjA3MywgMHgwODg5LAotCTB4MDAxMCwgMHg2MDczLCAweDA4OTgsIDB4NjA3NywgMHgwMDAwLCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LAotCTB4MDBmZiwgMHg2ODhlLCAweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDg2LAotCTB4NzgwOCwgMHg2MDgyLCAweDcwMTQsIDB4NjA4YSwgMHg3MDEwLCAweDYwOGUsIDB4NzAwYywgMHg2MGM2LAotCTB4NzAwOCwgMHg2MGNhLCAweDY4NmMsIDB4NjBjZSwgMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLAotCTB4YTU4MiwgMHgwMDgwLCAweDAyNDgsIDB4NmEwMCwgMHhkMmY0LCAweDAxMjAsIDB4NmExNCwgMHhhMjk0LAotCTB4MDBmZiwgMHgwMDEwLCAweDIwMTEsIDB4MDAwMCwgMHg2MjllLCAweDc4MjAsIDB4ZDBjYywgMHgwMTIwLAotCTB4MDgwYywgMHg4MDE0LCAweDA4MDQsIDB4Nzc0OSwgMHgwODBjLCAweDgwMTEsIDB4MDgwNCwgMHg3NzQ5LAotCTB4N2ExOCwgMHhhMjgwLCAweDAwMjMsIDB4MjAxNCwgMHg4MjEwLCAweGEyOTQsIDB4MDBmZiwgMHgyMjAyLAotCTB4ODIxNywgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHhhZmM3LCAweDY4NDMsIDB4MDAwMSwgMHgwMGRlLAotCTB4MDAwNSwgMHgyMGUxLCAweDkwODAsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwMDE5LAotCTB4MDgwYywgMHg2NTc4LCAweDAwMDUsIDB4MDAwNiwgMHg2MDE0LCAweGEwODQsIDB4MDAwNCwgMHhhMDg1LAotCTB4MDAwOSwgMHg2MDE2LCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLAotCTB4NjAxNCwgMHhhMDg0LCAweDAwMDQsIDB4YTA4NSwgMHgwMDA4LCAweDYwMTYsIDB4MDBjZSwgMHgwMDBlLAotCTB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDAxNiwgMHgwMDI2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LAotCTB4MDE0MCwgMHgwODBjLCAweDU3NGYsIDB4MTE3OCwgMHgyMDAxLCAweGFmZTMsIDB4MjAwNCwgMHhhMDA1LAotCTB4MTU5OCwgMHgwODBjLCAweDU3ZDEsIDB4MTExOCwgMHgwODBjLCAweDY1NzgsIDB4MDQ2OCwgMHgwMGM2LAotCTB4MjA2MSwgMHhhZmM3LCAweDAwZDgsIDB4NjkwNCwgMHhhMTk0LCAweDQwMDAsIDB4MDU1MCwgMHgwOGExLAotCTB4NjgwMywgMHgxMDAwLCAweDY4MDMsIDB4MDAwMCwgMHgwMGM2LCAweDIwNjEsIDB4YWZjNywgMHg2MTI4LAotCTB4YTE5MiwgMHgwMGM4LCAweDEyNTgsIDB4ODEwOCwgMHg2MTJhLCAweDYxMjQsIDB4MDBjZSwgMHg4MWZmLAotCTB4MDE5OCwgMHgwODBjLCAweDY1NzgsIDB4MDgwYywgMHg3ODJiLCAweDAwNzAsIDB4NjEyNCwgMHhhMWU1LAotCTB4MDAwMCwgMHgwMTQwLCAweDA4MGMsIDB4YWNhMiwgMHgyMDA5LCAweDAwMTQsIDB4MDgwYywgMHg4MGE3LAotCTB4MDgwYywgMHg2NTgxLCAweDAwY2UsIDB4MDAwMCwgMHgwMDJlLCAweDAwMWUsIDB4MDBkZSwgMHgwMGNlLAotCTB4MDAwNSwgMHgyMDAxLCAweGFmZTMsIDB4MjAwNCwgMHhhMDA1LCAweDFkYjAsIDB4MDBjNiwgMHgyMDYxLAotCTB4YWZjNywgMHg2MTI4LCAweGExOTIsIDB4MDAwMywgMHgxZTA4LCAweDgxMDgsIDB4NjEyYSwgMHgwMGNlLAotCTB4MDgwYywgMHg2NTc4LCAweDA4MGMsIDB4NDg1ZSwgMHgwYzM4LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAotCTB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4NjU4ZSwgMHgyMDcxLCAweGFmYzcsIDB4NzEzYywgMHg4MWZmLAotCTB4MDU3MCwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTg4LAotCTB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHg3YTY0LCAweDAwM2UsIDB4NzEzYywgMHgyMTYwLAotCTB4MDgwYywgMHhhY2EyLCAweDIwMDksIDB4MDA0YSwgMHgwODBjLCAweDgwYTcsIDB4MDgwYywgMHg1N2QxLAotCTB4MDBiMCwgMHg2OTA0LCAweGExOTQsIDB4NDAwMCwgMHgwMWMwLCAweDY4MDMsIDB4MTAwMCwgMHg2ODAzLAotCTB4MDAwMCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweDdhNjQsIDB4MDAzZSwgMHg3MTNjLAotCTB4MjE2MCwgMHgwODBjLCAweGFjYTIsIDB4MjAwOSwgMHgwMDRhLCAweDA4MGMsIDB4ODBhNywgMHgwMDJlLAotCTB4MDAxZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDBjNTgsIDB4MDBlNiwgMHgwMGQ2LAotCTB4MDBjNiwgMHgwMDY2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjAxOCwgMHgyMDY4LCAweDZjYTAsIDB4MjA3MSwgMHhhZmM3LCAweDcwMTgsIDB4MjA2OCwgMHg4ZGZmLAotCTB4MDE5OCwgMHg2OGEwLCAweGE0MDYsIDB4MDExOCwgMHg2ODU0LCAweDIwNjgsIDB4MGNjMCwgMHg2MDEwLAotCTB4MjA2MCwgMHg2NDNjLCAweDY1NDAsIDB4NmU0OCwgMHgyZDYwLCAweDA4MGMsIDB4NGU0MSwgMHgwMTIwLAotCTB4MDgwYywgMHg3Yjg4LCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwMGUsIDB4MDA0ZSwgMHgwMDVlLAotCTB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLAotCTB4NzEwZSwgMHgyMGEzLCAweDEyMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODFjLAotCTB4YTA4NiwgMHgwMDA0LCAweDExMTAsIDB4NjA5OCwgMHgwMDE4LCAweDIwMDEsIDB4YWQxNCwgMHgyMDA0LAotCTB4MjBhMiwgMHg3ODM0LCAweDIwYTIsIDB4NzgzOCwgMHgyMGEyLCAweDIwYTksIDB4MDAxMCwgMHhhMDA2LAotCTB4MjBhMiwgMHgxZjA0LCAweDc5MjgsIDB4MjBhMiwgMHgyMGEyLCAweDYwYzMsIDB4MDAyYywgMHgwODBjLAotCTB4NzgyMSwgMHgwMDA1LCAweDAxNTYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MTBlLAotCTB4MjBhMywgMHgwZjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgwOCwgMHgyMGEyLAotCTB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwgMHgwMTU2LAotCTB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGE5LCAweDAwMDYsIDB4MjAxMSwgMHhhZDQwLCAweDIwMTksIDB4YWQ0MSwgMHgyM2E2LAotCTB4MjJhNiwgMHhhMzk4LCAweDAwMDIsIDB4YTI5MCwgMHgwMDAyLCAweDFmMDQsIDB4Nzk1NywgMHgyMGEzLAotCTB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDFjLCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLAotCTB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDE0NiwgMHgwMDE2LCAweDAwMjYsIDB4MjBhMSwgMHgwMjBiLAotCTB4MDgwYywgMHg3MTgzLCAweDA4MGMsIDB4NzE5OSwgMHg3ODEwLCAweGEwODAsIDB4MDAwMCwgMHgyMDA0LAotCTB4YTA4MCwgMHgwMDE1LCAweDIwOTgsIDB4NzgwOCwgMHhhMDg4LCAweDAwMDIsIDB4MjFhOCwgMHg1M2E2LAotCTB4YTA4MCwgMHgwMDA0LCAweDgwMDMsIDB4NjBjMiwgMHgwODBjLCAweDc4MjEsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDE0ZSwgMHgwMTVlLCAweDAwMDUsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLAotCTB4NzEwZSwgMHgyMGEzLCAweDYyMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODA4LAotCTB4MjBhMiwgMHg2MGMzLCAweDAwMDgsIDB4MDgwYywgMHg3ODIxLCAweDAxNGUsIDB4MDE1ZSwgMHgwMDA1LAotCTB4MDE1NiwgMHgwMTQ2LCAweDAwMTYsIDB4MDAyNiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MTBlLAotCTB4NzgxMCwgMHhhMDgwLCAweDAwMDAsIDB4MjAwNCwgMHhhMDgwLCAweDAwMTcsIDB4MjA5OCwgMHg3ODA4LAotCTB4YTA4OCwgMHgwMDAyLCAweDIxYTgsIDB4NTNhNiwgMHg4MDAzLCAweDYwYzIsIDB4MDgwYywgMHg3ODIxLAotCTB4MDAyZSwgMHgwMDFlLCAweDAxNGUsIDB4MDE1ZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwgMHgwMDA2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZmM3LCAweDcwMGMsIDB4MjA2MCwgMHg4Y2ZmLAotCTB4MDE3OCwgMHgwODBjLCAweDk3ODksIDB4MTExMCwgMHgwODBjLCAweDg1ZjMsIDB4NjAwYywgMHgwMDA2LAotCTB4MDgwYywgMHg5OTRlLCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDdiODgsIDB4MDBjZSwgMHgwYzc4LAotCTB4NzAwZiwgMHgwMDAwLCAweDcwMGIsIDB4MDAwMCwgMHgwMTJlLCAweDAwMGUsIDB4MDBjZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgwMTI2LCAweDAxNTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDI2LAotCTB4MDAxNiwgMHgwMDA2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDAxMDAsIDB4MjA3OSwgMHgwMTQwLAotCTB4MjA3MSwgMHhhZmM3LCAweDcwMjQsIDB4MjA2MCwgMHg4Y2ZmLCAweDA1YTAsIDB4MDgwYywgMHg3ODM0LAotCTB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4NjU4MSwgMHgyMDA5LCAweDAwMTMsIDB4MDgwYywgMHg4MGE3LAotCTB4MjBhOSwgMHgwMWY0LCAweDY4MjQsIDB4ZDA5NCwgMHgwMTU4LCAweDY4MjcsIDB4MDAwNCwgMHg3ODA0LAotCTB4YTA4NCwgMHg0MDAwLCAweDAxYTAsIDB4NzgwMywgMHgxMDAwLCAweDc4MDMsIDB4MDAwMCwgMHgwMDc4LAotCTB4ZDA4NCwgMHgwMTE4LCAweDY4MjcsIDB4MDAwMSwgMHgwMDEwLCAweDFmMDQsIDB4N2EwMiwgMHg3ODA0LAotCTB4YTA4NCwgMHgxMDAwLCAweDAxMjAsIDB4NzgwMywgMHgwMTAwLCAweDc4MDMsIDB4MDAwMCwgMHg2ODI0LAotCTB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMTVlLAotCTB4MDEyZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwOTYsIDB4MDAwMSwgMHgwNTUwLAotCTB4YTA5NiwgMHgwMDA0LCAweDA1MzgsIDB4NjgxNywgMHgwMDA4LCAweDY4YzMsIDB4MDAwMCwgMHgyMDExLAotCTB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4MjBhOSwgMHgwMWY0LCAweDY4MjQsIDB4ZDA5NCwgMHgwMTU4LAotCTB4NjgyNywgMHgwMDA0LCAweDc4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAxYTAsIDB4NzgwMywgMHgxMDAwLAotCTB4NzgwMywgMHgwMDAwLCAweDAwNzgsIDB4ZDA4NCwgMHgwMTE4LCAweDY4MjcsIDB4MDAwMSwgMHgwMDEwLAotCTB4MWYwNCwgMHg3YTNkLCAweDc4MDQsIDB4YTA4NCwgMHgxMDAwLCAweDAxMjAsIDB4NzgwMywgMHgwMTAwLAotCTB4NzgwMywgMHgwMDAwLCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMTVlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDAxNTYsIDB4MDBmNiwgMHgwMGU2LAotCTB4MDBkNiwgMHgwMGM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LAotCTB4MDEwMCwgMHgyMDc5LCAweDAxNDAsIDB4MjA3MSwgMHhhZmM3LCAweDcwM2MsIDB4MjA2MCwgMHg4Y2ZmLAotCTB4MDkwNCwgMHg3YWQ1LCAweDY4MTcsIDB4MDAxMCwgMHgyMDA5LCAweDAwZmEsIDB4ODEwOSwgMHgxZGYwLAotCTB4NjhjNywgMHgwMDAwLCAweDY4Y2IsIDB4MDAwOCwgMHgwODBjLCAweDY1OGUsIDB4MDgwYywgMHgyMGI1LAotCTB4MDA0NiwgMHgyMDA5LCAweDAxN2YsIDB4MjAwYiwgMHgwMGE1LCAweDIwMjEsIDB4MDE2OSwgMHgyNDA0LAotCTB4YTA4NCwgMHgwMDBmLCAweGEwODYsIDB4MDAwNCwgMHgxMWIwLCAweDY4YzcsIDB4MDAwMCwgMHg2OGNiLAotCTB4MDAwOCwgMHgwMGU2LCAweDAwZjYsIDB4MjA3OSwgMHgwMDIwLCAweDIwNzEsIDB4YjAxZSwgMHg2ODE0LAotCTB4YTA4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAxMiwgMHg2ODE2LCAweDc4MDMsIDB4MDAwOCwgMHg3MDAzLAotCTB4MDAwMCwgMHgwMGZlLCAweDAwZWUsIDB4MjAwYiwgMHgwMDAwLCAweDAwNGUsIDB4YTM5ZCwgMHgwMDAwLAotCTB4MTEyMCwgMHgyMDA5LCAweDAwNDksIDB4MDgwYywgMHg4MGE3LCAweDIwYTksIDB4MDNlOCwgMHg2ODI0LAotCTB4ZDA5NCwgMHgwMTU4LCAweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwgMHgwMWEwLAotCTB4NzgwMywgMHgxMDAwLCAweDc4MDMsIDB4MDAwMCwgMHgwMDc4LCAweGQwOGMsIDB4MDExOCwgMHg2ODI3LAotCTB4MDAwMiwgMHgwMDEwLCAweDFmMDQsIDB4N2FiNywgMHg3ODA0LCAweGEwODQsIDB4MTAwMCwgMHgwMTIwLAotCTB4NzgwMywgMHgwMTAwLCAweDc4MDMsIDB4MDAwMCwgMHg2ODI0LCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLAotCTB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMTVlLCAweDAxMmUsIDB4MDAwNSwgMHgwMGQ2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHhhZmM3LCAweDZhMDYsIDB4MDEyZSwgMHgwMGRlLAotCTB4MDAwNSwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4YWZjNywgMHg2YTMyLAotCTB4MDEyZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDA2LAotCTB4MDEyNiwgMHgyMDcxLCAweGFmYzcsIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsIDB4MjA5MSwgMHg4MDAwLAotCTB4OGNmZiwgMHgwNTM4LCAweDYwMWMsIDB4YTIwNiwgMHgxNTAwLCAweDcwMTQsIDB4YWMzNiwgMHgxMTEwLAotCTB4NjYwYywgMHg3NjE2LCAweDcwMTAsIDB4YWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4YWYzNiwgMHgwMTE4LAotCTB4MmYwMCwgMHg3MDEyLCAweDAwMTAsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLAotCTB4YWYwNiwgMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHgwODBjLAotCTB4OTc0ZSwgMHgwODBjLCAweDdiODgsIDB4MDBjZSwgMHgwOGQ4LCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLAotCTB4MDhiOCwgMHgwMTJlLCAweDAwMGUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwgMHgyMGEyLAotCTB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MTAwMCwgMHgwODA0LAotCTB4N2I4MCwgMHgwMTU2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzNjZiwgMHg3ODEwLAotCTB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMywgMHg0MDAwLAotCTB4MDQ3OCwgMHgwMTU2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzNjZiwgMHg3ODEwLAotCTB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMywgMHgyMDAwLAotCTB4MDBmOCwgMHgwMTU2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzNjZiwgMHg3ODEwLAotCTB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMywgMHgwNDAwLAotCTB4MDA3OCwgMHgwMTU2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzNjZiwgMHg3ODEwLAotCTB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMywgMHgwMjAwLAotCTB4MDA4OSwgMHg2MGMzLCAweDAwMjAsIDB4MDgwYywgMHg3ODIxLCAweDAxNGUsIDB4MDE1ZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAyMCwgMHhhMDA1LCAweDAxMTAsIDB4ODAwMSwgMHg3MDIyLAotCTB4MDBlZSwgMHgwMDA1LCAweDIwYTksIDB4MDAwOCwgMHgyMGEyLCAweDFmMDQsIDB4N2I5NCwgMHgyMGEyLAotCTB4MjBhMiwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA3NiwgMHgwMDY2LAotCTB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFmYzcsIDB4NzYxNCwgMHgyNjYwLAotCTB4MjY3OCwgMHgyMDM5LCAweDAwMDEsIDB4ODdmZiwgMHgwOTA0LCAweDdjMjQsIDB4OGNmZiwgMHgwOTA0LAotCTB4N2MyNCwgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwgMHgxOTA0LCAweDdjMWYsIDB4ODhmZiwgMHgwMTM4LAotCTB4MjgwMCwgMHhhYzA2LCAweDE5MDQsIDB4N2MxZiwgMHgyMDM5LCAweDAwMDAsIDB4MDA1MCwgMHg2MDE4LAotCTB4YTIwNiwgMHgxOTA0LCAweDdjMWYsIDB4ODVmZiwgMHgwMTIwLCAweDYwNTAsIDB4YTEwNiwgMHgxOTA0LAotCTB4N2MxZiwgMHg3MDI0LCAweGFjMDYsIDB4MTUzOCwgMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHhhMDA1LAotCTB4MDFmMCwgMHgwODBjLCAweDY1ODEsIDB4NjgxNywgMHgwMDA4LCAweDY4YzMsIDB4MDAwMCwgMHgwODBjLAotCTB4N2NhOCwgMHg3MDI3LCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHhhMzg0LAotCTB4MTAwMCwgMHgwMTIwLCAweDY4MDMsIDB4MDEwMCwgMHg2ODAzLCAweDAwMDAsIDB4MjA2OSwgMHgwMTAwLAotCTB4NjgyNCwgMHhkMDg0LCAweDAxMTAsIDB4NjgyNywgMHgwMDAxLCAweDAwM2UsIDB4MDAyMCwgMHg2MDAzLAotCTB4MDAwOSwgMHg2MzBhLCAweDA0NjAsIDB4NzAxNCwgMHhhYzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjE2LAotCTB4NzAxMCwgMHhhYzM2LCAweDExNDAsIDB4MmMwMCwgMHhhZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDEyLAotCTB4MDAxMCwgMHg3MDEzLCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4YWYwNiwgMHgwMTEwLAotCTB4N2UwZSwgMHgwMDA4LCAweDI2NzgsIDB4ODlmZiwgMHgxMTU4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDEwLAotCTB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDExMCwgMHgwODBjLCAweGE5MWYsIDB4MDgwYywgMHg5NzRlLAotCTB4MDgwYywgMHg3Yjg4LCAweDg4ZmYsIDB4MTE5MCwgMHgwMGNlLCAweDA4MDQsIDB4N2JhYiwgMHgyYzc4LAotCTB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4N2JhYiwgMHhhMDA2LCAweDAxMmUsIDB4MDAwZSwgMHgwMDZlLAotCTB4MDA3ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NjAxNywgMHgwMDAwLAotCTB4MDBjZSwgMHhhOGM1LCAweDAwMDEsIDB4MGM4OCwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LAotCTB4MDA2NiwgMHgwMDI2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZmM3LAotCTB4NzYzOCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwOTA0LCAweDdjOTgsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwNiwgMHgxOTA0LCAweDdjOTMsIDB4ODdmZiwgMHgwMTI4LCAweDI3MDAsIDB4YWMwNiwgMHgxOTA0LAotCTB4N2M5MywgMHgwMDQwLCAweDYwMTgsIDB4YTIwNiwgMHgxNWYwLCAweDg1ZmYsIDB4MDExOCwgMHg2MDUwLAotCTB4YTEwNiwgMHgxNWM4LCAweDcwM2MsIDB4YWMwNiwgMHgxMTcwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLAotCTB4MDgwYywgMHg3YTY0LCAweDcwMzMsIDB4MDAwMCwgMHg3MDNmLCAweDAwMDAsIDB4NzA0MywgMHgwMDAwLAotCTB4NzA0NywgMHgwMDAwLCAweDAwM2UsIDB4NzAzOCwgMHhhYzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjNhLAotCTB4NzAzNCwgMHhhYzM2LCAweDExNDAsIDB4MmMwMCwgMHhhZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDM2LAotCTB4MDAxMCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4YWYwNiwgMHgwMTEwLAotCTB4N2UwZSwgMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDYwMTAsIDB4MjA2OCwgMHgwODBjLAotCTB4OTU5NiwgMHgwMTEwLCAweDA4MGMsIDB4YTkxZiwgMHgwODBjLCAweDk3NGUsIDB4ODdmZiwgMHgxMTkwLAotCTB4MDBjZSwgMHgwODA0LCAweDdjNDMsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHg3YzQzLAotCTB4YTAwNiwgMHgwMTJlLCAweDAwMGUsIDB4MDAyZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDYwMTcsIDB4MDAwMCwgMHgwMGNlLCAweGE3YmQsIDB4MDAwMSwgMHgwYzg4LAotCTB4MDBlNiwgMHgyMDcxLCAweGFmYzcsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAyLAotCTB4MTExOCwgMHg3MDA3LCAweDAwMDUsIDB4MDAxMCwgMHg3MDA3LCAweDAwMDAsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBmNiwgMHgwMGU2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDI2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDcxLCAweGFmYzcsIDB4MmMxMCwgMHg3NjM4LCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLAotCTB4MDUxOCwgMHgyMjAwLCAweGFjMDYsIDB4MTFlMCwgMHg3MDM4LCAweGFjMzYsIDB4MTExMCwgMHg2NjBjLAotCTB4NzYzYSwgMHg3MDM0LCAweGFjMzYsIDB4MTE0MCwgMHgyYzAwLCAweGFmMzYsIDB4MDExOCwgMHgyZjAwLAotCTB4NzAzNiwgMHgwMDEwLCAweDcwMzcsIDB4MDAwMCwgMHg2NjBjLCAweDJjMDAsIDB4YWYwNiwgMHgwMTEwLAotCTB4N2UwZSwgMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweGEwODUsIDB4MDAwMSwgMHgwMDIwLAotCTB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDhkOCwgMHgwMTJlLCAweDAwMGUsIDB4MDAyZSwgMHgwMDZlLAotCTB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LAotCTB4MDA2NiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWZjNywgMHg3NjBjLAotCTB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHg3ZDdlLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LAotCTB4MjAwNCwgMHhhMjA2LCAweDE5MDQsIDB4N2Q3OSwgMHg3MDI0LCAweGFjMDYsIDB4MTUwOCwgMHgyMDY5LAotCTB4MDEwMCwgMHg2OGMwLCAweGEwMDUsIDB4MDkwNCwgMHg3ZDU1LCAweDA4MGMsIDB4NzgzNCwgMHg2OGMzLAotCTB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLAotCTB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywgMHgwMDAwLAotCTB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLAotCTB4NzAwYywgMHhhYzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjBlLCAweDcwMDgsIDB4YWMzNiwgMHgxMTQwLAotCTB4MmMwMCwgMHhhZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDBhLCAweDAwMTAsIDB4NzAwYiwgMHgwMDAwLAotCTB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4YWYwNiwgMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LAotCTB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4OTc3OCwgMHgxMTU4LCAweDA4MGMsIDB4MmFmZiwgMHgwODBjLAotCTB4OTc4OSwgMHgxMWYwLCAweDA4MGMsIDB4ODVmMywgMHgwMGQ4LCAweDA4MGMsIDB4N2NhOCwgMHgwOGMwLAotCTB4MDgwYywgMHg5Nzg5LCAweDExMTgsIDB4MDgwYywgMHg4NWYzLCAweDAwOTAsIDB4NjAxMCwgMHgyMDY4LAotCTB4MDgwYywgMHg5NTk2LCAweDAxNjgsIDB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MTFmOCwgMHg2ODM3LAotCTB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg5NzQyLAotCTB4MDgwYywgMHg5OTRlLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDdiODgsIDB4MDBjZSwgMHgwODA0LAotCTB4N2QwMiwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LCAweDdkMDIsIDB4MDEyZSwgMHgwMDBlLAotCTB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwNiwgMHgxZDMwLCAweDA4MGMsIDB4YTkxZiwgMHgwYzE4LCAweDAwMzYsIDB4MDE1NiwgMHgwMTM2LAotCTB4MDE0NiwgMHgzOTA4LCAweGEwMDYsIDB4YTE5MCwgMHgwMDIwLCAweDIyMWMsIDB4YTM5ZSwgMHgyOGY5LAotCTB4MTExOCwgMHg4MjEwLCAweDgwMDAsIDB4MGNjOCwgMHhhMDA1LCAweDAxMzgsIDB4MjBhOSwgMHgwMDIwLAotCTB4MjE5OCwgMHhhMTEwLCAweDIyYTAsIDB4MjJjOCwgMHg1M2EzLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLAotCTB4MDAzZSwgMHgwMDA1LCAweDAwZDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhYSwgMHgyMGEzLAotCTB4MDIwMCwgMHgyMGEzLCAweDAwMTQsIDB4NjBjMywgMHgwMDE0LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMDk5LCAweGFmYTYsIDB4MjBhOSwgMHgwMDA0LCAweDUzYTYsIDB4MjBhMywgMHgwMDA0LAotCTB4MjBhMywgMHg3ODc4LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDgwYywgMHg3ODIxLAotCTB4MDBkZSwgMHgwMDA1LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMjE0LAotCTB4MjBhMywgMHgwMDE4LCAweDIwYTMsIDB4MDgwMCwgMHg3ODEwLCAweGEwODQsIDB4ZmYwMCwgMHgyMGEyLAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4NzgxMCwgMHhhMDg0LCAweDAwZmYsIDB4MjBhMiwgMHg3ODI4LCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxOCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgwMGQ2LAotCTB4MDAxNiwgMHgyZjY4LCAweDIwMDksIDB4MDAzNSwgMHgwODBjLCAweDlhMzQsIDB4MTkwNCwgMHg3ZTVkLAotCTB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwgMHgyMGEzLCAweDEzMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4NzgyOCwgMHgyMDY4LCAweDY4MWMsIDB4YTA4NiwgMHgwMDAzLCAweDA1ODAsIDB4NzgxOCwgMHhhMDgwLAotCTB4MDAyOCwgMHgyMDE0LCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MTFkMCwgMHhhMjg2LAotCTB4MDA3ZSwgMHgxMTI4LCAweDIwYTMsIDB4MDBmZiwgMHgyMGEzLCAweGZmZmUsIDB4MDRiOCwgMHhhMjg2LAotCTB4MDA3ZiwgMHgxMTI4LCAweDIwYTMsIDB4MDBmZiwgMHgyMGEzLCAweGZmZmQsIDB4MDQ3OCwgMHhkMmJjLAotCTB4MDE4MCwgMHhhMjg2LCAweDAwODAsIDB4MTEyOCwgMHgyMGEzLCAweDAwZmYsIDB4MjBhMywgMHhmZmZjLAotCTB4MDQyOCwgMHhhMmU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLAotCTB4MDBlOCwgMHgyMGEzLCAweDAwMDAsIDB4NjA5OCwgMHgyMGEyLCAweDAwYzAsIDB4MjAwMSwgMHhhZDM0LAotCTB4MjAwNCwgMHhkMGFjLCAweDExMzgsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDgyLAotCTB4MDA3ZSwgMHgwMjQwLCAweDAwZDYsIDB4MjA2OSwgMHhhZDFiLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LAotCTB4MDBkZSwgMHgwMDIwLCAweDIwYTMsIDB4MDAwMCwgMHg2MDM0LCAweDIwYTIsIDB4NzgzNCwgMHgyMGEyLAotCTB4NzgzOCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDBjLAotCTB4MDgwYywgMHg3ODIxLCAweDAwMWUsIDB4MDBkZSwgMHgwMDA1LCAweDc4MTcsIDB4MDAwMSwgMHg3ODAzLAotCTB4MDAwNiwgMHgwMDFlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwMjYsIDB4NzkyOCwgMHgyMTY4LAotCTB4NjkxYywgMHhhMTg2LCAweDAwMDYsIDB4MDFjMCwgMHhhMTg2LCAweDAwMDMsIDB4MDkwNCwgMHg3ZWQzLAotCTB4YTE4NiwgMHgwMDA1LCAweDA5MDQsIDB4N2ViYywgMHhhMTg2LCAweDAwMDQsIDB4MDViOCwgMHhhMTg2LAotCTB4MDAwOCwgMHgwOTA0LCAweDdlYzQsIDB4NzgwNywgMHgwMDM3LCAweDc4MTMsIDB4MTcwMCwgMHgwODBjLAotCTB4N2YzYiwgMHgwMDJlLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDdlZjcsIDB4MjAwOSwgMHg0MDAwLAotCTB4NjgwMCwgMHgwMDAyLCAweDdlOWQsIDB4N2VhOCwgMHg3ZTlmLCAweDdlYTgsIDB4N2VhNCwgMHg3ZTlkLAotCTB4N2U5ZCwgMHg3ZWE4LCAweDdlYTgsIDB4N2VhOCwgMHg3ZWE4LCAweDdlOWQsIDB4N2U5ZCwgMHg3ZTlkLAotCTB4N2U5ZCwgMHg3ZTlkLCAweDdlYTgsIDB4N2U5ZCwgMHg3ZWE4LCAweDA4MGMsIDB4MTRmNiwgMHg2ODIwLAotCTB4ZDBlNCwgMHgwMTEwLCAweGQwY2MsIDB4MDExMCwgMHhhMDBlLCAweDAwMTAsIDB4MjAwOSwgMHgyMDAwLAotCTB4NjgyOCwgMHgyMGEyLCAweDY4MmMsIDB4MjBhMiwgMHgwODA0LCAweDdlZWQsIDB4MDgwYywgMHg3ZWY3LAotCTB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMDA5LCAweDQwMDAsIDB4NmEwMCwgMHhhMjg2LAotCTB4MDAwMiwgMHgxMTA4LCAweGEwMGUsIDB4MDQ4OCwgMHgwNGQxLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMDA5LCAweDQwMDAsIDB4MDQ0OCwgMHgwNDkxLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLAotCTB4MDAwMCwgMHgyMDA5LCAweDQwMDAsIDB4YTI4NiwgMHgwMDA1LCAweDAxMTgsIDB4YTI4NiwgMHgwMDAyLAotCTB4MTEwOCwgMHhhMDBlLCAweDAwZDAsIDB4MDQxOSwgMHg2ODEwLCAweDIwNjgsIDB4Njk3YywgMHg2ODEwLAotCTB4YTExMiwgMHg2OTgwLCAweDY4MTQsIDB4YTEwMywgMHgyMGEyLCAweDIyYTIsIDB4NzkyOCwgMHhhMTgwLAotCTB4MDAwMCwgMHgyMDA0LCAweGEwOGUsIDB4MDAwMiwgMHgwMTMwLCAweGEwOGUsIDB4MDAwNCwgMHgwMTE4LAotCTB4MjAwOSwgMHg0MDAwLCAweDAwMTAsIDB4MjAwOSwgMHgwMDAwLCAweDIxYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4NjBjMywgMHgwMDE4LCAweDA4MGMsIDB4NzgyMSwgMHgwMDJlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDM2LAotCTB4MDA0NiwgMHgwMDU2LCAweDAwNjYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhYSwgMHhhMDA2LAotCTB4MjBhMywgMHgwMjAwLCAweDIwYTIsIDB4NzkzNCwgMHgyMWEyLCAweDc5MzgsIDB4MjFhMiwgMHg3ODE4LAotCTB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTE4LAotCTB4YTA5MiwgMHgwMDdlLCAweDAyNjgsIDB4MDBkNiwgMHgyMDY5LCAweGFkMWIsIDB4MmQyYywgMHg4ZDY4LAotCTB4MmQzNCwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2YjEwLCAweDZjMTQsIDB4MDBkZSwgMHgwMDMwLAotCTB4MjAxOSwgMHgwMDAwLCAweDY0OTgsIDB4MjAyOSwgMHgwMDAwLCAweDY2MzQsIDB4NzgyOCwgMHhhMDgwLAotCTB4MDAwNywgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgxMTI4LCAweDI1YTIsIDB4MjZhMiwgMHgyM2EyLAotCTB4MjRhMiwgMHgwMDIwLCAweDIzYTIsIDB4MjRhMiwgMHgyNWEyLCAweDI2YTIsIDB4MDA2ZSwgMHgwMDVlLAotCTB4MDA0ZSwgMHgwMDNlLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhYSwgMHgyMGEzLAotCTB4MDEwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDA5LCAweDc4MTAsIDB4MjBhMiwgMHg2MGMzLAotCTB4MDAwOCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MTA2LAotCTB4MjBhMywgMHgxNDAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODM0LCAweDIwYTIsIDB4NzgzOCwgMHgyMGEyLAotCTB4NzgyOCwgMHgyMGEyLCAweDc4MmMsIDB4MjBhMiwgMHg3ODMwLCAweGEwODQsIDB4MDBmZiwgMHg4MDA3LAotCTB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDEwLCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LAotCTB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhMiwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLAotCTB4NzgyOCwgMHgyMGEyLCAweDc4MTAsIDB4MjBhMiwgMHg2MGMzLCAweDAwMDgsIDB4MDgwYywgMHg3ODIxLAotCTB4MDAwNSwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwMDMxLCAweDYwYzMsIDB4MDAwMCwgMHgwODBjLAotCTB4NzgyMSwgMHgwMTRlLCAweDAwMDUsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LAotCTB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLAotCTB4ZDBiYywgMHgwMTg4LCAweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LAotCTB4MDMwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LAotCTB4MmRhNiwgMHgwMGRlLCAweDAwNzgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLAotCTB4YTA4NSwgMHgwMzAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLAotCTB4NjIzNCwgMHgyMmEyLCAweDIwYTMsIDB4MDgxOSwgMHgyMGEzLCAweDAwMDAsIDB4MDgwYywgMHg3ODEwLAotCTB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4MmZhMiwgMHg3YTA4LCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLAotCTB4MjBhMywgMHgwMDAwLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDAwNzksIDB4NzkxMCwgMHgyMWEyLAotCTB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwMCwgMHgyMGUxLCAweDkwODAsIDB4NjBhNywgMHg5NTc1LAotCTB4MDgwYywgMHg3ODJiLCAweDA4MGMsIDB4NjU3OCwgMHgwMDA1LCAweDAxNTYsIDB4MDEzNiwgMHgwMDM2LAotCTB4MDBkNiwgMHgwMGU2LCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4Nzg1NCwgMHgyMDY4LAotCTB4YWRmMCwgMHgwMDBmLCAweDcyMTAsIDB4YTI5NiwgMHgwMGMwLCAweGEyOTQsIDB4ZmZmZCwgMHg3MjEyLAotCTB4NzIxNCwgMHhhMjk0LCAweDAzMDAsIDB4NzIxNiwgMHg3MTAwLCAweGExOTQsIDB4MDBmZiwgMHg3MzA4LAotCTB4YTM4NCwgMHgwMGZmLCAweGEwOGQsIDB4YzIwMCwgMHg3MTAyLCAweGEzODQsIDB4ZmYwMCwgMHhhMjE1LAotCTB4NzIwYSwgMHg3MDA0LCAweDcyMGMsIDB4NzAwZSwgMHg3MjA2LCAweDIwYTksIDB4MDAwYSwgMHgyZTk4LAotCTB4NTNhNiwgMHg2MGEzLCAweDAwMzUsIDB4NmEzOCwgMHhhMjk0LCAweDcwMDAsIDB4YTI4NiwgMHgzMDAwLAotCTB4MDExMCwgMHg2MGEzLCAweDAwMzcsIDB4MDBlZSwgMHgwMGRlLCAweDAwM2UsIDB4MDEzZSwgMHgwMTVlLAotCTB4MDAwNSwgMHgyMDA5LCAweDAwOTIsIDB4MDAxMCwgMHgyMDA5LCAweDAwOTYsIDB4NjBhYiwgMHgwMDM2LAotCTB4NjExNiwgMHgwMDA1LCAweDIwNjEsIDB4YjQwMCwgMHgyYTcwLCAweDcwNjQsIDB4NzA0NiwgMHg3MDRiLAotCTB4YjQwMCwgMHgwMDA1LCAweDAwZTYsIDB4MDEyNiwgMHgyMDcxLCAweGFkMDAsIDB4MjA5MSwgMHg4MDAwLAotCTB4NzU0NCwgMHhhNTgyLCAweDAwMTAsIDB4MDYwOCwgMHg3MDQ4LCAweDIwNjAsIDB4NjAwMCwgMHhhMDg2LAotCTB4MDAwMCwgMHgwMTQ4LCAweGFjZTAsIDB4MDAxOCwgMHg3MDU4LCAweGFjMDIsIDB4MTIwOCwgMHgwY2IwLAotCTB4MjA2MSwgMHhiNDAwLCAweDBjOTgsIDB4NjAwMywgMHgwMDA4LCAweDg1MjksIDB4NzU0NiwgMHhhY2E4LAotCTB4MDAxOCwgMHg3MDU4LCAweGE1MDIsIDB4MTIzMCwgMHg3NTRhLCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLAotCTB4MDBlZSwgMHgwMDA1LCAweDcwNGIsIDB4YjQwMCwgMHgwY2MwLCAweGEwMDYsIDB4MGNjMCwgMHgwMGU2LAotCTB4MjA3MSwgMHhhZDAwLCAweDc1NDQsIDB4YTU4MiwgMHgwMDEwLCAweDA2MDAsIDB4NzA0OCwgMHgyMDYwLAotCTB4NjAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDE0OCwgMHhhY2UwLCAweDAwMTgsIDB4NzA1OCwgMHhhYzAyLAotCTB4MTIwOCwgMHgwY2IwLCAweDIwNjEsIDB4YjQwMCwgMHgwYzk4LCAweDYwMDMsIDB4MDAwOCwgMHg4NTI5LAotCTB4NzU0NiwgMHhhY2E4LCAweDAwMTgsIDB4NzA1OCwgMHhhNTAyLCAweDEyMjgsIDB4NzU0YSwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMGVlLCAweDAwMDUsIDB4NzA0YiwgMHhiNDAwLCAweDBjYzgsIDB4YTAwNiwgMHgwY2M4LAotCTB4YWM4MiwgMHhiNDAwLCAweDBhMGMsIDB4MTRmNiwgMHgyMDAxLCAweGFkMTYsIDB4MjAwNCwgMHhhYzAyLAotCTB4MWEwYywgMHgxNGY2LCAweGEwMDYsIDB4NjAwNiwgMHg2MDBhLCAweDYwMGUsIDB4NjAxMiwgMHg2MDE2LAotCTB4NjAxYSwgMHg2MDFmLCAweDAwMDAsIDB4NjAwMywgMHgwMDAwLCAweDYwNTIsIDB4NjA1NiwgMHg2MDIyLAotCTB4NjAyNiwgMHg2MDJhLCAweDYwMmUsIDB4NjAzMiwgMHg2MDM2LCAweDYwM2EsIDB4NjAzZSwgMHgyMDYxLAotCTB4YWQwMCwgMHg2MDQ0LCAweDgwMDAsIDB4NjA0NiwgMHhhMDg2LCAweDAwMDEsIDB4MDEwOCwgMHgwMDA1LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2YzUwLCAweDAxMmUsIDB4MGNjMCwgMHg2MDFjLAotCTB4YTA4NCwgMHgwMDBmLCAweDAwMDIsIDB4ODBiNiwgMHg4MGM1LCAweDgwZTAsIDB4ODBmYiwgMHg5YTYxLAotCTB4OWE3YywgMHg5YTk3LCAweDgwYjYsIDB4ODBjNSwgMHg4MGI2LCAweDgxMTYsIDB4YTE4NiwgMHgwMDEzLAotCTB4MTEyOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4ZSwgMHgwMDQ3LAotCTB4MTExOCwgMHhhMDE2LCAweDA4MGMsIDB4MTgyNCwgMHgwMDA1LCAweDAwNjYsIDB4NjAwMCwgMHhhMGIyLAotCTB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4ODBkZSwgMHg4NDc4LAotCTB4ODYyZCwgMHg4MGRlLCAweDg2YTIsIDB4ODFjZiwgMHg4MGRlLCAweDgwZGUsIDB4ODQwYSwgMHg4YTkxLAotCTB4ODBkZSwgMHg4MGRlLCAweDgwZGUsIDB4ODBkZSwgMHg4MGRlLCAweDgwZGUsIDB4MDgwYywgMHgxNGY2LAotCTB4MDA2NiwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAxMywgMHgwMDZlLAotCTB4MDAwNSwgMHg4MGY5LCAweDkwOWEsIDB4ODBmOSwgMHg4MGY5LCAweDgwZjksIDB4ODBmOSwgMHg4MGY5LAotCTB4ODBmOSwgMHg5MDQ1LCAweDkyMDAsIDB4ODBmOSwgMHg5MGM3LCAweDkxM2UsIDB4OTBjNywgMHg5MTNlLAotCTB4ODBmOSwgMHgwODBjLCAweDE0ZjYsIDB4MDA2NiwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwgMHgxYTBjLAotCTB4MTRmNiwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwgMHg4MTE0LCAweDhhZDIsIDB4OGI5OCwgMHg4Y2I4LAotCTB4OGUxMiwgMHg4MTE0LCAweDgxMTQsIDB4ODExNCwgMHg4YWFjLCAweDhmZjUsIDB4OGZmOCwgMHg4MTE0LAotCTB4ODExNCwgMHg4MTE0LCAweDgxMTQsIDB4OTAyMiwgMHgwODBjLCAweDE0ZjYsIDB4MDA2NiwgMHg2MDAwLAotCTB4YTBiMiwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwgMHg4MTJmLAotCTB4ODEyZiwgMHg4MTJmLCAweDgxNTIsIDB4ODFhNSwgMHg4MTJmLCAweDgxMmYsIDB4ODEyZiwgMHg4MTMxLAotCTB4ODEyZiwgMHg4MTJmLCAweDgxMmYsIDB4ODEyZiwgMHg4MTJmLCAweDgxMmYsIDB4ODEyZiwgMHgwODBjLAotCTB4MTRmNiwgMHhhMTg2LCAweDAwMDMsIDB4MTkwYywgMHgxNGY2LCAweDAwZDYsIDB4NjAwMywgMHgwMDAzLAotCTB4NjEwNiwgMHg2MDEwLCAweDIwNjgsIDB4Njg0ZiwgMHgwMDQwLCAweDY4N2MsIDB4NjgwYSwgMHg2ODgwLAotCTB4NjgwZSwgMHg2ODEzLCAweDAwMDAsIDB4NjgxNywgMHgwMDAwLCAweDAwZGUsIDB4MmMxMCwgMHgwODBjLAotCTB4MWU2ZSwgMHgwODBjLCAweDY4MGIsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2ZDBkLAotCTB4MDEyZSwgMHgwMDA1LCAweGExODIsIDB4MDA0NywgMHgwMDAyLCAweDgxNWUsIDB4ODE1ZSwgMHg4MTYwLAotCTB4ODE3ZiwgMHg4MTVlLCAweDgxNWUsIDB4ODE1ZSwgMHg4MTVlLCAweDgxOTEsIDB4MDgwYywgMHgxNGY2LAotCTB4MDBkNiwgMHgwMDE2LCAweDA4MGMsIDB4NmMwNSwgMHgwODBjLCAweDZkMGQsIDB4NjAwMywgMHgwMDA0LAotCTB4NjExMCwgMHgyMTY4LCAweDY4NTQsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwgMHg2MTE2LAotCTB4Njg0ZiwgMHgwMDIwLCAweDY4NWMsIDB4Njg1YSwgMHg2ODc0LCAweDY4N2UsIDB4Njg3OCwgMHg2ODgyLAotCTB4Njg5NywgMHgwMDAwLCAweDY4OWIsIDB4MDAwMCwgMHgwMDFlLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLAotCTB4NmMwNSwgMHgwMGQ2LCAweDYxMTAsIDB4MjE2OCwgMHgwODBjLCAweDk1OTYsIDB4MDEyMCwgMHg2ODRiLAotCTB4MDAwNiwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg2ZDBkLAotCTB4MDAwNSwgMHgwODBjLCAweDZjMDUsIDB4MDgwYywgMHgyYWQ5LCAweDAwZDYsIDB4NjExMCwgMHgyMTY4LAotCTB4MDgwYywgMHg5NTk2LCAweDAxMjAsIDB4Njg0YiwgMHgwMDI5LCAweDA4MGMsIDB4NTEwYywgMHgwMGRlLAotCTB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmQwZCwgMHgwMDA1LCAweGExODIsIDB4MDA0NywgMHgwMDAyLAotCTB4ODFiMywgMHg4MWMyLCAweDgxYjEsIDB4ODFiMSwgMHg4MWIxLCAweDgxYjEsIDB4ODFiMSwgMHg4MWIxLAotCTB4ODFiMSwgMHgwODBjLCAweDE0ZjYsIDB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4Njg0YywgMHhjMGY0LAotCTB4Njg0ZSwgMHgwMGRlLCAweDIwZTEsIDB4MDAwNSwgMHgzZDE4LCAweDNlMjAsIDB4MmMxMCwgMHgwODBjLAotCTB4MTgyNCwgMHgwMDA1LCAweDAwZDYsIDB4NjExMCwgMHgyMTY4LCAweDY4NGIsIDB4MDAwMCwgMHg2ODUzLAotCTB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHhhMWI2LAotCTB4MDAxNSwgMHgxMTE4LCAweDA4MGMsIDB4ODA3OCwgMHgwMDMwLCAweGExYjYsIDB4MDAxNiwgMHgxOTBjLAotCTB4MTRmNiwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHgyMGE5LCAweDAwMGUsIDB4MmU5OCwgMHg2MDEwLAotCTB4MjBhMCwgMHg1M2EzLCAweDIwYTksIDB4MDAwNiwgMHgzMzEwLCAweDM0MjAsIDB4OTM5OCwgMHg5NGEwLAotCTB4MzMxOCwgMHgzNDI4LCAweDIyMmUsIDB4MjMyNiwgMHhhMjkwLCAweDAwMDIsIDB4YTVhOCwgMHgwMDAyLAotCTB4YTM5OCwgMHgwMDAyLCAweGE0YTAsIDB4MDAwMiwgMHgxZjA0LCAweDgxZWEsIDB4MDBlNiwgMHgwODBjLAotCTB4OTU5NiwgMHgwMTMwLCAweDYwMTAsIDB4MjA3MCwgMHg3MDA3LCAweDAwMDAsIDB4NzAzNywgMHgwMTAzLAotCTB4MDBlZSwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHgwMGQ2LCAweDAwMzYsIDB4NzMzMCwgMHhhMzg2LAotCTB4MDIwMCwgMHgxMTMwLCAweDYwMTgsIDB4MjA2OCwgMHg2ODEzLCAweDAwZmYsIDB4NjgxNywgMHhmZmZkLAotCTB4NjAxMCwgMHhhMDA1LCAweDAxMzAsIDB4MjA2OCwgMHg2ODA3LCAweDAwMDAsIDB4NjgzNywgMHgwMTAzLAotCTB4NmIzMiwgMHgwODBjLCAweDgwNzgsIDB4MDAzZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAxNiwgMHgyMGE5LAotCTB4MDAyYSwgMHhhZTgwLCAweDAwMGMsIDB4MjA5OCwgMHg2MDEwLCAweGEwODAsIDB4MDAwMiwgMHgyMGEwLAotCTB4NTNhMywgMHgyMGE5LCAweDAwMmEsIDB4NjAxMCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwNCwgMHhhMDgwLAotCTB4MDAwMiwgMHgyMGEwLCAweDUzYTMsIDB4MDBlNiwgMHg2MDEwLCAweDIwMDQsIDB4MjA3MCwgMHg3MDM3LAotCTB4MDEwMywgMHgwMGVlLCAweDA4MGMsIDB4ODA3OCwgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgyMDA5LAotCTB4MDAwMCwgMHg3MDMwLCAweGEwODYsIDB4MDEwMCwgMHgwMTQwLCAweDcwMzgsIDB4YTA4NCwgMHgwMGZmLAotCTB4ODA4ZSwgMHg3MDNjLCAweGEwODQsIDB4MDBmZiwgMHg4MDg2LCAweGEwODAsIDB4MDAwNCwgMHhhMTA4LAotCTB4MjFhOCwgMHhhZTgwLCAweDAwMGMsIDB4MjA5OCwgMHg2MDEwLCAweGEwODAsIDB4MDAwMiwgMHgyMGEwLAotCTB4MDgwYywgMHg0OGJlLCAweDAwZTYsIDB4MDgwYywgMHg5NTk2LCAweDAxNDAsIDB4NjAxMCwgMHgyMDcwLAotCTB4NzAwNywgMHgwMDAwLCAweDcwMzQsIDB4NzBiMiwgMHg3MDM3LCAweDAxMDMsIDB4MDBlZSwgMHgwODBjLAotCTB4ODA3OCwgMHgwMDFlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGQ2LCAweDYwM2YsIDB4MDAwMCwgMHgyYzY4LAotCTB4MDAxNiwgMHgyMDA5LCAweDAwMzUsIDB4MDgwYywgMHg5YTM0LCAweDAwMWUsIDB4MTE2OCwgMHgwMDI2LAotCTB4NjIyOCwgMHgyMjY4LCAweDAwMmUsIDB4MjA3MSwgMHhiMjhjLCAweDZiMWMsIDB4YTM4NiwgMHgwMDAzLAotCTB4MDEzMCwgMHhhMzg2LCAweDAwMDYsIDB4MDEyOCwgMHgwODBjLCAweDgwNzgsIDB4MDAyMCwgMHgwMDMxLAotCTB4MDAxMCwgMHgwODBjLCAweDgzMjMsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBmNiwgMHg2ODEwLAotCTB4MjA3OCwgMHhhMTg2LCAweDAwMTUsIDB4MDkwNCwgMHg4MzBjLCAweGExOGUsIDB4MDAxNiwgMHgxOTA0LAotCTB4ODMyMSwgMHg3MDBjLCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDE3MDAsIDB4MTkwNCwgMHg4MmViLAotCTB4OGZmZiwgMHgwOTA0LCAweDgzMWYsIDB4NjgwOCwgMHhhMDg2LCAweGZmZmYsIDB4MTkwNCwgMHg4MzBlLAotCTB4Nzg0YywgMHhhMDg0LCAweDAwNjAsIDB4YTA4NiwgMHgwMDIwLCAweDExNTAsIDB4Nzk3YywgMHg3ODEwLAotCTB4YTEwNiwgMHgxOTA0LCAweDgzMGUsIDB4Nzk4MCwgMHg3ODE0LCAweGExMDYsIDB4MTkwNCwgMHg4MzBlLAotCTB4MDgwYywgMHg5NzQyLCAweDY4NTgsIDB4Nzg1MiwgMHg3ODRjLCAweGMwZGMsIDB4YzBmNCwgMHhjMGQ0LAotCTB4Nzg0ZSwgMHgwMDI2LCAweGEwMGUsIDB4NmExNCwgMHgyMDAxLCAweDAwMGEsIDB4MDgwYywgMHg2NjY1LAotCTB4Nzg1NCwgMHhhMjBhLCAweDAyMDgsIDB4ODAxMSwgMHg3YTU2LCAweDgyZmYsIDB4MDAyZSwgMHgxMTM4LAotCTB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4OTM3NCwgMHgwMGNlLCAweDA4MDQsIDB4ODMxZiwgMHgwMGM2LAotCTB4MDBkNiwgMHgyZjY4LCAweDY4MzgsIDB4ZDBmYywgMHgxMTE4LCAweDA4MGMsIDB4NDk5MywgMHgwMDEwLAotCTB4MDgwYywgMHg0YjdjLCAweDAwZGUsIDB4MDBjZSwgMHgxNTQ4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLAotCTB4ODA3OCwgMHgwMGNlLCAweDA0YTAsIDB4NzAwOCwgMHhhMDg2LCAweDAwMGIsIDB4MTFhMCwgMHg2MDE4LAotCTB4MjAwYywgMHhjMWJjLCAweDIxMDIsIDB4MDBjNiwgMHgyZDYwLCAweDc4NTMsIDB4MDAwMywgMHg2MDA3LAotCTB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwgMHgwMDAyLCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLAotCTB4NmM1MCwgMHgwMGNlLCAweDAwZTAsIDB4NzAwYywgMHhhMDg2LCAweDJhMDAsIDB4MTEzOCwgMHgyMDAxLAotCTB4YWZhNSwgMHgyMDA0LCAweDY4M2UsIDB4MDA5OCwgMHgwNDcxLCAweDAwOTgsIDB4OGZmZiwgMHgwOTBjLAotCTB4MTRmNiwgMHgwMGM2LCAweDAwZDYsIDB4MmQ2MCwgMHgyZjY4LCAweDY4NGIsIDB4MDAwMywgMHgwODBjLAotCTB4OTI2ZiwgMHgwODBjLCAweDk3NDIsIDB4MDgwYywgMHg5NzRlLCAweDAwZGUsIDB4MDBjZSwgMHgwODBjLAotCTB4ODA3OCwgMHgwMGZlLCAweDAwMDUsIDB4YTE4NiwgMHgwMDE1LCAweDExMjgsIDB4MjAwMSwgMHhhZmE1LAotCTB4MjAwNCwgMHg2ODNlLCAweDAwNjgsIDB4YTE4ZSwgMHgwMDE2LCAweDExNjAsIDB4MDBjNiwgMHgyZDAwLAotCTB4MjA2MCwgMHgwODBjLCAweGFiYjQsIDB4MDgwYywgMHg2NjE4LCAweDA4MGMsIDB4ODA3OCwgMHgwMGNlLAotCTB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsIDB4NzIyOCwgMHg3YzgwLAotCTB4N2I3YywgMHhkMmY0LCAweDAxMzAsIDB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjgzZSwgMHgwODA0LAotCTB4ODM5ZCwgMHgwMGM2LCAweDJkNjAsIDB4MDgwYywgMHg5MjhmLCAweDAwY2UsIDB4NjgwNCwgMHhhMDg2LAotCTB4MDA1MCwgMHgxMTY4LCAweDAwYzYsIDB4MmQwMCwgMHgyMDYwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDA1MCwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDAwY2UsIDB4MDRmMCwgMHg2ODAwLAotCTB4YTA4NiwgMHgwMDBmLCAweDAxYzgsIDB4OGZmZiwgMHgwOTBjLCAweDE0ZjYsIDB4NjgyMCwgMHhkMGRjLAotCTB4MTE5OCwgMHg2ODAwLCAweGEwODYsIDB4MDAwNCwgMHgxMTk4LCAweDc4NGMsIDB4ZDBhYywgMHgwMTgwLAotCTB4Nzg0YywgMHhjMGRjLCAweGMwZjQsIDB4Nzg0ZSwgMHg3ODUwLCAweGMwZjQsIDB4YzBmYywgMHg3ODUyLAotCTB4MjAwMSwgMHgwMDAxLCAweDY4MmUsIDB4MDBlMCwgMHgyMDAxLCAweDAwMDcsIDB4NjgyZSwgMHgwMGMwLAotCTB4Nzg0YywgMHhkMGI0LCAweDExMzAsIDB4ZDBhYywgMHgwZGI4LCAweDc4NGMsIDB4ZDBmNCwgMHgxZGEwLAotCTB4MGMzOCwgMHhkMmVjLCAweDFkODgsIDB4NzAyNCwgMHhhMzA2LCAweDExMTgsIDB4NzAyMCwgMHhhNDA2LAotCTB4MGQ1OCwgMHg3MDIwLCAweDY4MzYsIDB4NzAyNCwgMHg2ODNhLCAweDIwMDEsIDB4MDAwNSwgMHg2ODJlLAotCTB4MDgwYywgMHg5ODk0LCAweDA4MGMsIDB4NmM1MCwgMHgwMDEwLCAweDA4MGMsIDB4ODA3OCwgMHgwMDRlLAotCTB4MDAzZSwgMHgwMDJlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGQ2LCAweDAwMjYsIDB4NjAzNCwgMHgyMDY4LAotCTB4NmExYywgMHhhMjg2LCAweDAwMDcsIDB4MDkwNCwgMHg4M2VlLCAweGEyODYsIDB4MDAwMiwgMHgwNWYwLAotCTB4YTI4NiwgMHgwMDAwLCAweDA1ZDgsIDB4NjgwOCwgMHg2MzM4LCAweGEzMDYsIDB4MTViOCwgMHgyMDcxLAotCTB4YjI4YywgMHhhMTg2LCAweDAwMTUsIDB4MDU2MCwgMHhhMThlLCAweDAwMTYsIDB4MTE5MCwgMHg2MDMwLAotCTB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwMSwgMHgxMTYwLCAweDcwMGMsIDB4YTA4NiwgMHgyYTAwLAotCTB4MTE0MCwgMHg2MDM0LCAweGEwODAsIDB4MDAwOCwgMHgyMDBjLCAweGMxZGQsIDB4YzFmNSwgMHgyMTAyLAotCTB4MDBiOCwgMHgwMGM2LCAweDYwMzQsIDB4MjA2MCwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHg5NTk2LAotCTB4MDkwYywgMHgxNGY2LCAweDY4NTMsIDB4MDAwMywgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLAotCTB4NjAxZiwgMHgwMDAyLCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDBjZSwgMHgwMDMwLAotCTB4NjAzNCwgMHgyMDcwLCAweDIwMDEsIDB4YWZhNSwgMHgyMDA0LCAweDcwM2UsIDB4MDgwYywgMHg4MDc4LAotCTB4MDAyZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGQ2LCAweDIwYTksIDB4MDAwZSwgMHgyZTk4LAotCTB4NjAxMCwgMHgyMGEwLCAweDUzYTMsIDB4YTFiNiwgMHgwMDE1LCAweDExNDgsIDB4NjAxOCwgMHgyMDY4LAotCTB4NzAzOCwgMHg2ODBhLCAweDcwM2MsIDB4NjgwZSwgMHg2ODAwLCAweGMwOGQsIDB4NjgwMiwgMHgwMGRlLAotCTB4MDgwNCwgMHg4MWY2LCAweDIxMDAsIDB4YTFiMiwgMHgwMDgwLCAweDFhMGMsIDB4MTRmNiwgMHhhMWIyLAotCTB4MDA0MCwgMHgxYTA0LCAweDg0NmUsIDB4MDAwMiwgMHg4NDYyLCAweDg0NTYsIDB4ODQ2MiwgMHg4NDYyLAotCTB4ODQ2MiwgMHg4NDYyLCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LAotCTB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LAotCTB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LAotCTB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ2MiwgMHg4NDU0LCAweDg0NjIsIDB4ODQ2MiwgMHg4NDU0LAotCTB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDYyLCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LAotCTB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ2MiwgMHg4NDYyLAotCTB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LAotCTB4ODQ1NCwgMHg4NDYyLCAweDg0NTQsIDB4ODQ1NCwgMHgwODBjLCAweDE0ZjYsIDB4NjAwMywgMHgwMDAxLAotCTB4NjEwNiwgMHgwODBjLCAweDY3ZWUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2YzUwLAotCTB4MDEyZSwgMHgwMDA1LCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsIDB4NjdlZSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmM1MCwgMHgwMTJlLCAweDAwMDUsIDB4MjYwMCwgMHgwMDAyLAotCTB4ODQ2MiwgMHg4NDc2LCAweDg0NzYsIDB4ODQ2MiwgMHg4NDYyLCAweDg0NzYsIDB4MDgwYywgMHgxNGY2LAotCTB4NjAwNCwgMHhhMGIyLCAweDAwODAsIDB4MWEwYywgMHgxNGY2LCAweGExYjYsIDB4MDAxMywgMHgwOTA0LAotCTB4ODUxOCwgMHhhMWI2LCAweDAwMjcsIDB4MTkwNCwgMHg4NGRlLCAweDA4MGMsIDB4NmI3MywgMHg2MDA0LAotCTB4MDgwYywgMHg5Nzc4LCAweDAxODgsIDB4MDgwYywgMHg5Nzg5LCAweDA5MDQsIDB4ODRkOCwgMHhhMDhlLAotCTB4MDAyMSwgMHgwOTA0LCAweDg0ZGIsIDB4YTA4ZSwgMHgwMDIyLCAweDA5MDQsIDB4ODRkOCwgMHhhMDhlLAotCTB4MDAzZCwgMHgwOTA0LCAweDg0ZGIsIDB4MDRhOCwgMHgwODBjLCAweDJhZmYsIDB4MjAwMSwgMHgwMDA3LAotCTB4MDgwYywgMHg0YzMwLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMGMsIDB4MDgwYywgMHg4NWYzLAotCTB4YTE4NiwgMHgwMDdlLCAweDExNDgsIDB4MjAwMSwgMHhhZDM0LCAweDIwMTQsIDB4YzI4NSwgMHgwODBjLAotCTB4NTc0ZiwgMHgxMTA4LCAweGMyYWQsIDB4MjIwMiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgyMTEwLAotCTB4MjAxOSwgMHgwMDI4LCAweDA4MGMsIDB4NjhlNywgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLAotCTB4NjgxZCwgMHgwMGM2LCAweDYwMTgsIDB4YTA2NSwgMHgwMTEwLCAweDA4MGMsIDB4NGVjZiwgMHgwMGNlLAotCTB4MmMwOCwgMHgwODBjLCAweGE3MTIsIDB4MDA3ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwODBjLAotCTB4NGM5ZiwgMHgwODBjLCAweDk5NGUsIDB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LAotCTB4MDgwYywgMHg4NWYzLCAweDBjYjAsIDB4MDgwYywgMHg4NjIxLCAweDBjOTgsIDB4YTE4NiwgMHgwMDE0LAotCTB4MWRiMCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHgyYWQ5LCAweDA4MGMsIDB4OTc3OCwgMHgxMTg4LAotCTB4MDgwYywgMHgyYWZmLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMGMsIDB4MDgwYywgMHg4NWYzLAotCTB4YTE4NiwgMHgwMDdlLCAweDExMjgsIDB4MjAwMSwgMHhhZDM0LCAweDIwMGMsIDB4YzE4NSwgMHgyMTAyLAotCTB4MDhjMCwgMHgwODBjLCAweDk3ODksIDB4MTExOCwgMHgwODBjLCAweDg1ZjMsIDB4MDg5MCwgMHg2MDA0LAotCTB4YTA4ZSwgMHgwMDMyLCAweDExNTgsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsIDB4YWQ4MSwgMHgyMDc5LAotCTB4MDAwMCwgMHgwODBjLCAweDJkZjEsIDB4MDBmZSwgMHgwMGVlLCAweDA4MTgsIDB4NjAwNCwgMHhhMDhlLAotCTB4MDAyMSwgMHgwZDUwLCAweGEwOGUsIDB4MDAyMiwgMHgwOTBjLCAweDg1ZjMsIDB4MDgwNCwgMHg4NGQxLAotCTB4YTBiMiwgMHgwMDQwLCAweDFhMDQsIDB4ODVkYiwgMHgyMDA4LCAweDAwMDIsIDB4ODU2MCwgMHg4NTYxLAotCTB4ODU2NCwgMHg4NTY3LCAweDg1NmEsIDB4ODU2ZCwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLAotCTB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLAotCTB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLAotCTB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTcwLCAweDg1N2YsIDB4ODU1ZSwgMHg4NTgxLAotCTB4ODU3ZiwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU3ZiwgMHg4NTdmLAotCTB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLAotCTB4ODViYiwgMHg4NTdmLCAweDg1NWUsIDB4ODU3YiwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTdjLAotCTB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU3ZiwgMHg4NWIyLCAweDg1NWUsIDB4MDgwYywgMHgxNGY2LAotCTB4MDBmMCwgMHgyMDAxLCAweDAwMGIsIDB4MDQ2MCwgMHgyMDAxLCAweDAwMDMsIDB4MDQ0OCwgMHgyMDAxLAotCTB4MDAwNSwgMHgwNDMwLCAweDIwMDEsIDB4MDAwMSwgMHgwNDE4LCAweDIwMDEsIDB4MDAwOSwgMHgwNDAwLAotCTB4MDgwYywgMHg2YjczLCAweDYwMDMsIDB4MDAwNSwgMHgyMDAxLCAweGFmYTUsIDB4MjAwNCwgMHg2MDNlLAotCTB4MDgwYywgMHg2YzUwLCAweDAwYTAsIDB4MDAxOCwgMHgwMDEwLCAweDA4MGMsIDB4NGMzMCwgMHgwODA0LAotCTB4ODVjYywgMHgwODBjLCAweDZiNzMsIDB4MjAwMSwgMHhhZmEzLCAweDIwMDQsIDB4NjAxNiwgMHgyMDAxLAotCTB4YWZhNSwgMHgyMDA0LCAweDYwM2UsIDB4NjAwMywgMHgwMDA0LCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LAotCTB4MDgwYywgMHg0YzMwLCAweDA4MGMsIDB4NmI3MywgMHg2MDAzLCAweDAwMDIsIDB4MjAwMSwgMHhhZmE1LAotCTB4MjAwNCwgMHg2MDNlLCAweDAwMzYsIDB4MjAxOSwgMHhhZDVjLCAweDIzMDQsIDB4YTA4NCwgMHhmZjAwLAotCTB4MTEyMCwgMHgyMDAxLCAweGFmYTMsIDB4MjAxYywgMHgwMDQwLCAweDgwMDcsIDB4YTA5YSwgMHgwMDA0LAotCTB4MGVjMCwgMHg4MDAzLCAweDgwMWIsIDB4ODMxYiwgMHhhMzE4LCAweDYzMTYsIDB4MDAzZSwgMHgwODBjLAotCTB4NmM1MCwgMHgwOGU4LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk5NGUsIDB4MDgwYywgMHg4MDc4LAotCTB4MDgwYywgMHg2YzUwLCAweDA4YTAsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsIDB4YWQ4MSwgMHgyMDc5LAotCTB4MDAwMCwgMHgwODBjLCAweDJkZjEsIDB4MDBmZSwgMHgwMGVlLCAweDA4MGMsIDB4NmI3MywgMHgwODBjLAotCTB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDgxOCwgMHgwODBjLCAweDZiNzMsIDB4MjAwMSwgMHhhZmE1LAotCTB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwMiwgMHgyMDAxLCAweGFmYTMsIDB4MjAwNCwgMHg2MDE2LAotCTB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MjYwMCwgMHgyMDA4LCAweDAwMDIsIDB4ODVlNiwgMHg4NWU0LAotCTB4ODVlNCwgMHg4NWNjLCAweDg1Y2MsIDB4ODVlNCwgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLAotCTB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHgxNWYwLCAweDAwZGUsIDB4MDgwYywgMHg4MDc4LAotCTB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDBlNiwgMHgwMDI2LCAweDAwMTYsIDB4MDgwYywgMHg5NTk2LAotCTB4MDUwOCwgMHg2MDEwLCAweDIwNzAsIDB4NzAzNCwgMHhhMDg2LCAweDAxMzksIDB4MTE0OCwgMHgyMDAxLAotCTB4MDAzMCwgMHgyMDA5LCAweDAwMDAsIDB4MjAxMSwgMHg0MDA1LCAweDA4MGMsIDB4OWEwNSwgMHgwMDkwLAotCTB4NzAzOCwgMHhkMGZjLCAweDAxNzgsIDB4NzAwNywgMHgwMDAwLCAweDAwMTYsIDB4NjAwNCwgMHhhMDhlLAotCTB4MDAyMSwgMHgwMTYwLCAweGEwOGUsIDB4MDAzZCwgMHgwMTQ4LCAweDAwMWUsIDB4NzAzNywgMHgwMTAzLAotCTB4NzAzMywgMHgwMTAwLCAweDAwMWUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDAxZSwgMHgwMDA5LAotCTB4MGNjOCwgMHgwMGU2LCAweGFjZjAsIDB4MDAwNCwgMHgyZTc0LCAweDcwMDAsIDB4MjA3MCwgMHg3MDM3LAotCTB4MDEwMywgMHg3MDIzLCAweDgwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDAwZDYsIDB4NjYxOCwgMHgyNjY4LAotCTB4NjgwNCwgMHhhMDg0LCAweDAwZmYsIDB4MDBkZSwgMHhhMGIyLCAweDAwMGMsIDB4MWEwYywgMHgxNGY2LAotCTB4NjYwNCwgMHhhNmI2LCAweDAwNDMsIDB4MTEyMCwgMHgwODBjLCAweDk5YzEsIDB4MDgwNCwgMHg4NjkyLAotCTB4NjYwNCwgMHhhNmI2LCAweDAwMzMsIDB4MTEyMCwgMHgwODBjLCAweDk5NzEsIDB4MDgwNCwgMHg4NjkyLAotCTB4NjYwNCwgMHhhNmI2LCAweDAwMjgsIDB4MTEyMCwgMHgwODBjLCAweDk3YjksIDB4MDgwNCwgMHg4NjkyLAotCTB4NjYwNCwgMHhhNmI2LCAweDAwMjksIDB4MTExOCwgMHgwODBjLCAweDk3ZDAsIDB4MDRkOCwgMHg2NjA0LAotCTB4YTZiNiwgMHgwMDFmLCAweDExMTgsIDB4MDgwYywgMHg4MWRjLCAweDA0YTAsIDB4NjYwNCwgMHhhNmI2LAotCTB4MDAwMCwgMHgxMTE4LCAweDA4MGMsIDB4ODNmNCwgMHgwNDY4LCAweDY2MDQsIDB4YTZiNiwgMHgwMDIyLAotCTB4MTExOCwgMHgwODBjLCAweDgyMDQsIDB4MDQzMCwgMHg2NjA0LCAweGE2YjYsIDB4MDAzNSwgMHgxMTE4LAotCTB4MDgwYywgMHg4MjZiLCAweDAwZjgsIDB4NjYwNCwgMHhhNmI2LCAweDAwMzksIDB4MTExOCwgMHgwODBjLAotCTB4ODNhMywgMHgwMGMwLCAweDY2MDQsIDB4YTZiNiwgMHgwMDNkLCAweDExMTgsIDB4MDgwYywgMHg4MjFlLAotCTB4MDA4OCwgMHg2NjA0LCAweGE2YjYsIDB4MDA0NCwgMHgxMTE4LCAweDA4MGMsIDB4ODIzZSwgMHgwMDUwLAotCTB4YTFiNiwgMHgwMDE1LCAweDExMTAsIDB4MDA1MywgMHgwMDI4LCAweGExYjYsIDB4MDAxNiwgMHgxMTE4LAotCTB4MDgwNCwgMHg4ODNmLCAweDAwMDUsIDB4MDgwYywgMHg4MGJlLCAweDBjZTAsIDB4ODZiOSwgMHg4NmJjLAotCTB4ODZiOSwgMHg4NmZlLCAweDg2YjksIDB4ODdjYywgMHg4ODRkLCAweDg2YjksIDB4ODZiOSwgMHg4ODFiLAotCTB4ODZiOSwgMHg4ODJmLCAweGExYjYsIDB4MDA0OCwgMHgwMTQwLCAweDIwZTEsIDB4MDAwNSwgMHgzZDE4LAotCTB4M2UyMCwgMHgyYzEwLCAweDA4MGMsIDB4MTgyNCwgMHgwMDA1LCAweDAwZTYsIDB4YWNmMCwgMHgwMDA0LAotCTB4MmU3NCwgMHg3MDAwLCAweDIwNzAsIDB4NzAzNywgMHgwMTAzLCAweDAwZWUsIDB4MDgwYywgMHg4MDc4LAotCTB4MDAwNSwgMHhlMDAwLCAweGUwMDAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwgMHg3MDgwLAotCTB4YTA4NiwgMHgwMDc0LCAweDE1MzAsIDB4MDgwYywgMHhhNmU5LCAweDExYjAsIDB4MDBkNiwgMHg2MDE4LAotCTB4MjA2OCwgMHg3MDMwLCAweGQwOGMsIDB4MDEyOCwgMHg2ODAwLCAweGQwYmMsIDB4MDExMCwgMHhjMGM1LAotCTB4NjgwMiwgMHgwMGQ5LCAweDAwZGUsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NGMzMCwgMHgwODBjLAotCTB4MmFmZiwgMHgwODBjLCAweDgwNzgsIDB4MDA3OCwgMHgyMDAxLCAweDAwMGEsIDB4MDgwYywgMHg0YzMwLAotCTB4MDgwYywgMHgyYWZmLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwYywgMHg2N2VlLAotCTB4MDAxMCwgMHgwODBjLCAweDg3YmQsIDB4MDBlZSwgMHgwMDA1LCAweDY4MDAsIDB4ZDA4NCwgMHgwMTY4LAotCTB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwgMHgyMDY5LCAweGFkNTEsIDB4NjgwNCwgMHhkMGE0LAotCTB4MDEyMCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg0YzVkLCAweDAwMDUsIDB4MDBkNiwgMHgyMDExLAotCTB4YWQyMCwgMHgyMjA0LCAweGEwODYsIDB4MDA3NCwgMHgxOTA0LCAweDg3YmEsIDB4NjAxOCwgMHgyMDY4LAotCTB4NmFhMCwgMHhhMjg2LCAweDAwN2UsIDB4MTEyMCwgMHgwODBjLCAweDg5NGQsIDB4MDgwNCwgMHg4NzVlLAotCTB4MDgwYywgMHg4OTQzLCAweDYwMTgsIDB4MjA2OCwgMHhhMDgwLCAweDAwMjgsIDB4MjAxNCwgMHhhMjg2LAotCTB4MDA4MCwgMHgxMWMwLCAweDY4MTMsIDB4MDBmZiwgMHg2ODE3LCAweGZmZmMsIDB4NjAxMCwgMHhhMDA1LAotCTB4MDEzOCwgMHgyMDY4LCAweDY4MDcsIDB4MDAwMCwgMHg2ODM3LCAweDAxMDMsIDB4NjgzMywgMHgwMjAwLAotCTB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDJhZmYsIDB4MDgwYywgMHg4MDc4LAotCTB4MDgwNCwgMHg4N2JiLCAweDAwZTYsIDB4MjA3MSwgMHhhZDM0LCAweDJlMDQsIDB4ZDA5YywgMHgwMTg4LAotCTB4MjA3MSwgMHhiMjgwLCAweDcxMDgsIDB4NzIwYywgMHhhMThjLCAweDAwZmYsIDB4MTExOCwgMHhhMjg0LAotCTB4ZmYwMCwgMHgwMTM4LCAweDYwMTgsIDB4MjA3MCwgMHg3MGEwLCAweGQwYmMsIDB4MTExMCwgMHg3MTEyLAotCTB4NzIxNiwgMHgwMGVlLCAweDYwMTAsIDB4YTAwNSwgMHgwMTI4LCAweDIwNjgsIDB4NjgzOCwgMHhkMGY0LAotCTB4MDEwOCwgMHgwODgwLCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDRjMzAsIDB4NjAwMywgMHgwMDAxLAotCTB4NjAwNywgMHgwMDAzLCAweDA4MGMsIDB4NjdlZSwgMHgwODA0LCAweDg3YmIsIDB4Njg1YywgMHhkMGU0LAotCTB4MDFkMCwgMHgwODBjLCAweDk5MDMsIDB4MDgwYywgMHg1NzRmLCAweDAxMTAsIDB4ZDBkYywgMHgxOTAwLAotCTB4MjAxMSwgMHhhZDM0LCAweDIyMDQsIDB4YzBhZCwgMHgyMDEyLCAweDIwMDEsIDB4YWY4ZSwgMHgyMDA0LAotCTB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzhlMywgMHgwMDAwLCAweDA4MGMsIDB4MjZjYiwgMHg3OGUyLAotCTB4MDBmZSwgMHgwODA0LCAweDg3MjgsIDB4MDgwYywgMHg5OTM3LCAweDIwMTEsIDB4YWQzNCwgMHgyMjA0LAotCTB4YzBhNSwgMHgyMDEyLCAweDAwMDYsIDB4MDgwYywgMHhhODAxLCAweDAwMGUsIDB4MTkwNCwgMHg4NzI4LAotCTB4YzBiNSwgMHgyMDEyLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDRjMWUsIDB4MDBjNiwgMHgyMDA5LAotCTB4MDBlZiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg3OWVhLCAweDc5MzIsIDB4NzkzNiwgMHgwMGZlLAotCTB4MDgwYywgMHgyNmEwLCAweDAwZjYsIDB4MjA3OSwgMHhhZDAwLCAweDc5NzIsIDB4MjEwMCwgMHgyMDA5LAotCTB4MDAwMCwgMHgwODBjLCAweDI2NzYsIDB4Nzk0ZSwgMHgwMGZlLCAweDgxMDgsIDB4MDgwYywgMHg0YzgwLAotCTB4MmMwMCwgMHgwMGNlLCAweDE5MDQsIDB4ODcyOCwgMHg2MDFhLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLAotCTB4NGMzMCwgMHg2MDFmLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLAotCTB4NjdlZSwgMHgwMDA4LCAweDAwMTEsIDB4MDBkZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LAotCTB4YTA4NiwgMHgwMDAzLCAweDAxMjAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NGMzMCwgMHgwODBjLAotCTB4MmFmZiwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHgwMGU2LCAweDAwMjYsIDB4MDAxNiwgMHgyMDcxLAotCTB4YWQwMCwgMHg3MDgwLCAweGEwODYsIDB4MDAxNCwgMHgxNWYwLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAzLAotCTB4MTEyOCwgMHg2MDEwLCAweGEwMDUsIDB4MTExMCwgMHgwODBjLCAweDNjY2UsIDB4MDBkNiwgMHg2MDE4LAotCTB4MjA2OCwgMHgwODBjLCAweDRkNzIsIDB4MDgwYywgMHg4NmVkLCAweDAwZGUsIDB4MDgwYywgMHg4OWY3LAotCTB4MTU1MCwgMHgwMGQ2LCAweDYwMTgsIDB4MjA2OCwgMHg2ODkwLCAweDAwZGUsIDB4YTAwNSwgMHgwNTE4LAotCTB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NGMzMCwgMHgwMGU2LCAweDYwMTAsIDB4YTA3NSwgMHgwMWE4LAotCTB4NzAzNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDM5LCAweDExNDgsIDB4MjAwMSwgMHgwMDAwLAotCTB4MjAwOSwgMHgwMDAwLCAweDIwMTEsIDB4NDAwMCwgMHgwODBjLCAweDlhMDUsIDB4MDAzMCwgMHg3MDA3LAotCTB4MDAwMCwgMHg3MDM3LCAweDAxMDMsIDB4NzAzMywgMHgwMjAwLCAweDAwZWUsIDB4MDgwYywgMHgyYWZmLAotCTB4MDgwYywgMHg4MDc4LCAweDAwMjAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4ODdiZCwgMHgwMDFlLAotCTB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MjAxMSwgMHhhZDIwLCAweDIyMDQsIDB4YTA4NiwgMHgwMDE0LAotCTB4MTE1OCwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg0YzMwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDAxMCwgMHgwODBjLCAweDg3YmQsIDB4MDAwNSwgMHgyMDExLAotCTB4YWQyMCwgMHgyMjA0LCAweGEwODYsIDB4MDAwNCwgMHgxMTM4LCAweDIwMDEsIDB4MDAwNywgMHgwODBjLAotCTB4NGMzMCwgMHgwODBjLCAweDgwNzgsIDB4MDAxMCwgMHgwODBjLCAweDg3YmQsIDB4MDAwNSwgMHgwMDBiLAotCTB4MDAwNSwgMHg4NmI5LCAweDg4NTQsIDB4ODZiOSwgMHg4ODhhLCAweDg2YjksIDB4ODhmZiwgMHg4ODRkLAotCTB4ODZiOSwgMHg4NmI5LCAweDg5MTIsIDB4ODZiOSwgMHg4OTIyLCAweDY2MDQsIDB4YTZiNiwgMHgwMDFlLAotCTB4MTExMCwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHgwMGQ2LCAweDAwYzYsIDB4MDgwYywgMHg4OTMyLAotCTB4MTE3OCwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLAotCTB4NGMzMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsIDB4NjdlZSwgMHgwMGY4LAotCTB4MjAwOSwgMHhiMjhlLCAweDIxMDQsIDB4YTA4NiwgMHgwMDA5LCAweDExNjAsIDB4NjAxOCwgMHgyMDY4LAotCTB4Njg0MCwgMHhhMDg0LCAweDAwZmYsIDB4YTAwNSwgMHgwMTgwLCAweDgwMDEsIDB4Njg0MiwgMHg2MDE3LAotCTB4MDAwYSwgMHgwMDY4LCAweDIwMDksIDB4YjI4ZiwgMHgyMTA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LAotCTB4MTkwMCwgMHgxMTE4LCAweDA4MGMsIDB4ODA3OCwgMHgwMDEwLCAweDA4MGMsIDB4ODdiZCwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4ODk0MCwgMHgwMGQ2LCAweDIwNjksIDB4YWY5ZCwgMHgyZDA0LAotCTB4YTAwNSwgMHgwMTY4LCAweDYwMTgsIDB4MjA2OCwgMHg2OGEwLCAweGEwODYsIDB4MDA3ZSwgMHgxMTM4LAotCTB4MjA2OSwgMHhhZDFjLCAweDJkMDQsIDB4ODAwMCwgMHgyMDZhLCAweDAwZGUsIDB4MDAxMCwgMHgwMGRlLAotCTB4MDA3OCwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLAotCTB4NGMzMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsIDB4NjdlZSwgMHgwNDI4LAotCTB4MDgwYywgMHg4NWYzLCAweDIwMDksIDB4YjI4ZSwgMHgyMTM0LCAweGE2YjQsIDB4MDBmZiwgMHhhNjg2LAotCTB4MDAwNSwgMHgwMWUwLCAweGE2ODYsIDB4MDAwYiwgMHgwMWIwLCAweDIwMDksIDB4YjI4ZiwgMHgyMTA0LAotCTB4YTA4NCwgMHhmZjAwLCAweDExMTgsIDB4YTY4NiwgMHgwMDA5LCAweDAxODAsIDB4YTA4NiwgMHgxOTAwLAotCTB4MTE1MCwgMHhhNjg2LCAweDAwMDksIDB4MDE1MCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg0YzMwLAotCTB4MDgwYywgMHg4MDc4LCAweDAwMTAsIDB4MDgwYywgMHg4N2JkLCAweDAwMDUsIDB4MDBkNiwgMHg2MDEwLAotCTB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDEyOCwgMHg2ODM4LCAweGQwZmMsIDB4MDExMCwgMHgwMGRlLAotCTB4MGM5MCwgMHg2MDE4LCAweDIwNjgsIDB4Njg0MCwgMHhhMDg0LCAweDAwZmYsIDB4YTAwNSwgMHgwMTQwLAotCTB4ODAwMSwgMHg2ODQyLCAweDYwMTcsIDB4MDAwYSwgMHg2MDA3LCAweDAwMTYsIDB4MDBkZSwgMHgwYzI4LAotCTB4NjhhMCwgMHhhMDg2LCAweDAwN2UsIDB4MTEzOCwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwgMHgwODBjLAotCTB4NDhmNSwgMHgwMGVlLCAweDAwMTAsIDB4MDgwYywgMHgyYWQ5LCAweDAwZGUsIDB4MDhhMCwgMHgwODBjLAotCTB4ODk0MCwgMHgxMTU4LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDRjMzAsIDB4NjAwMywgMHgwMDAxLAotCTB4NjAwNywgMHgwMDAzLCAweDA4MGMsIDB4NjdlZSwgMHgwMDIwLCAweDA4MGMsIDB4ODVmMywgMHgwODBjLAotCTB4ODdiZCwgMHgwMDA1LCAweDA0NjksIDB4MTE1OCwgMHgyMDAxLCAweDAwMDgsIDB4MDgwYywgMHg0YzMwLAotCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwNSwgMHgwODBjLCAweDY3ZWUsIDB4MDAxMCwgMHgwODBjLAotCTB4ODdiZCwgMHgwMDA1LCAweDAwZTksIDB4MTE1OCwgMHgyMDAxLCAweDAwMGEsIDB4MDgwYywgMHg0YzMwLAotCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDAxMCwgMHgwODBjLAotCTB4ODdiZCwgMHgwMDA1LCAweDIwMDksIDB4YjI4ZSwgMHgyMTA0LCAweGEwODYsIDB4MDAwMywgMHgxMTM4LAotCTB4MjAwOSwgMHhiMjhmLCAweDIxMDQsIDB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4MmEwMCwgMHgwMDA1LAotCTB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBjNiwgMHgwMDE2LCAweGFjODgsIDB4MDAwNiwgMHgyMTY0LAotCTB4MDgwYywgMHg0Y2ViLCAweDAwMWUsIDB4MDBjZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LAotCTB4MDAzNiwgMHgwMDE2LCAweDYwMTgsIDB4MjA2OCwgMHgyMDcxLCAweGFkMzQsIDB4MmUwNCwgMHhhMDg1LAotCTB4MDAwMywgMHgyMDcyLCAweDA4MGMsIDB4ODljYywgMHgwNTM4LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LAotCTB4ZDBhNCwgMHgwMTU4LCAweGEwMDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmEsIDB4MDgwYywgMHhhOTZjLAotCTB4MjAwMSwgMHhhZDBjLCAweDIwMGMsIDB4YzE5NSwgMHgyMTAyLCAweDIwMTksIDB4MDAyYSwgMHgyMDA5LAotCTB4MDAwMSwgMHgwODBjLCAweDJhYWMsIDB4MjA3MSwgMHhhZDAwLCAweDA4MGMsIDB4MjhmYSwgMHgwMGM2LAotCTB4MDE1NiwgMHgyMGE5LCAweDAwODEsIDB4MjAwOSwgMHgwMDdmLCAweDA4MGMsIDB4MmJjOSwgMHg4MTA4LAotCTB4MWYwNCwgMHg4OTdkLCAweDAxNWUsIDB4MDBjZSwgMHgwODBjLCAweDg5NDMsIDB4NjgxMywgMHgwMGZmLAotCTB4NjgxNywgMHhmZmZlLCAweDIwNzEsIDB4YjI4MCwgMHgyMDc5LCAweDAxMDAsIDB4MmUwNCwgMHhhMDg0LAotCTB4MDBmZiwgMHgyMDY5LCAweGFkMWIsIDB4MjA2YSwgMHg3OGU2LCAweDAwMDYsIDB4OGU3MCwgMHgyZTA0LAotCTB4MjA2OSwgMHhhZDFjLCAweDIwNmEsIDB4NzhlYSwgMHg3ODMyLCAweDc4MzYsIDB4MjAxMCwgMHhhMDg0LAotCTB4ZmYwMCwgMHgwMDFlLCAweGExMDUsIDB4MjAwOSwgMHhhZDI3LCAweDIwMGEsIDB4MjIwMCwgMHhhMDg0LAotCTB4MDBmZiwgMHgyMDA4LCAweDA4MGMsIDB4MjZhMCwgMHgwODBjLCAweDU3NGYsIDB4MDE3MCwgMHgyMDY5LAotCTB4YjI4ZSwgMHgyMDcxLCAweGFmOWYsIDB4NjgxMCwgMHgyMDcyLCAweDY4MTQsIDB4NzAwNiwgMHg2ODE4LAotCTB4NzAwYSwgMHg2ODFjLCAweDcwMGUsIDB4MDgwYywgMHg5OTAzLCAweDAwNDAsIDB4MjAwMSwgMHgwMDA2LAotCTB4MDgwYywgMHg0YzMwLCAweDA4MGMsIDB4MmFmZiwgMHgwODBjLCAweDgwNzgsIDB4MDAxZSwgMHgwMDNlLAotCTB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwMzYsIDB4MDBlNiwgMHgwMTU2LAotCTB4MjAxOSwgMHhhZDI3LCAweDIzMWMsIDB4ODNmZiwgMHgwMWU4LCAweDIwNzEsIDB4YjI4MCwgMHgyZTE0LAotCTB4YTI5NCwgMHgwMGZmLCAweDcwMDQsIDB4YTA4NCwgMHhmZjAwLCAweGEyMDUsIDB4YTMwNiwgMHgxMTkwLAotCTB4MjAxMSwgMHhiMjk2LCAweGFkOTgsIDB4MDAwYSwgMHgyMGE5LCAweDAwMDQsIDB4MDgwYywgMHg4YTdjLAotCTB4MTE0OCwgMHgyMDExLCAweGIyOWEsIDB4YWQ5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwgMHgwODBjLAotCTB4OGE3YywgMHgxMTAwLCAweDAxNWUsIDB4MDBlZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LAotCTB4MjA3MSwgMHhiMjhjLCAweDcwMDQsIDB4YTA4NiwgMHgwMDE0LCAweDExYTgsIDB4NzAwOCwgMHhhMDg2LAotCTB4MDgwMCwgMHgxMTg4LCAweDcwMGMsIDB4ZDBlYywgMHgwMTYwLCAweGEwODQsIDB4MGYwMCwgMHhhMDg2LAotCTB4MDEwMCwgMHgxMTM4LCAweDcwMjQsIDB4ZDBhNCwgMHgxMTEwLCAweGQwYWMsIDB4MDExMCwgMHhhMDA2LAotCTB4MDAxMCwgMHhhMDg1LCAweDAwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LAotCTB4MDA3NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjAyOSwgMHhhZmQwLCAweDI1MmMsIDB4MjAyMSwgMHhhZmQ2LCAweDI0MjQsIDB4MjA2MSwgMHhiNDAwLAotCTB4MjA3MSwgMHhhZDAwLCAweDcyNDQsIDB4NzA2NCwgMHhhMjAyLCAweDE2ZjAsIDB4MDgwYywgMHhhOTkwLAotCTB4MDVhMCwgMHg2NzFjLCAweGE3ODYsIDB4MDAwMSwgMHgwNTgwLCAweGE3ODYsIDB4MDAwNywgMHgwNTY4LAotCTB4MjUwMCwgMHhhYzA2LCAweDA1NTAsIDB4MjQwMCwgMHhhYzA2LCAweDA1MzgsIDB4MDBjNiwgMHg2MDAwLAotCTB4YTA4NiwgMHgwMDA0LCAweDExMTAsIDB4MDgwYywgMHgxOTBiLCAweGE3ODYsIDB4MDAwOCwgMHgxMTQ4LAotCTB4MDgwYywgMHg5Nzg5LCAweDExMzAsIDB4MDBjZSwgMHgwODBjLCAweDg1ZjMsIDB4MDgwYywgMHg5NzRlLAotCTB4MDBhMCwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNjAsIDB4YTc4NiwgMHgwMDAzLAotCTB4MTFlOCwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywgMHg1MTBjLAotCTB4MDgwYywgMHg5NzQyLCAweDA4MGMsIDB4OTc0ZSwgMHgwMGNlLCAweGFjZTAsIDB4MDAxOCwgMHg3MDU4LAotCTB4YWMwMiwgMHgxMjEwLCAweDA4MDQsIDB4OGEyYSwgMHgwMTJlLCAweDAwMGUsIDB4MDAyZSwgMHgwMDRlLAotCTB4MDA1ZSwgMHgwMDdlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4YTc4NiwgMHgwMDA2LAotCTB4MWQwMCwgMHgwODBjLCAweGE5MWYsIDB4MGMzMCwgMHgyMjBjLCAweDIzMDQsIDB4YTEwNiwgMHgxMTMwLAotCTB4ODIxMCwgMHg4MzE4LCAweDFmMDQsIDB4OGE3YywgMHhhMDA2LCAweDAwMDUsIDB4MjMwNCwgMHhhMTAyLAotCTB4MDIxOCwgMHgyMDAxLCAweDAwMDEsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDAsIDB4YTE4ZCwgMHgwMDAxLAotCTB4MDAwNSwgMHg2MDA0LCAweGEwOGEsIDB4MDA4MCwgMHgxYTBjLCAweDE0ZjYsIDB4MDgwYywgMHg5Nzc4LAotCTB4MDEyMCwgMHgwODBjLCAweDk3ODksIDB4MDE2OCwgMHgwMDI4LCAweDA4MGMsIDB4MmFmZiwgMHgwODBjLAotCTB4OTc4OSwgMHgwMTM4LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg2YzUwLAotCTB4MDAwNSwgMHgwODBjLCAweDg1ZjMsIDB4MGNiMCwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwgMHg4YWMyLAotCTB4OGFjMiwgMHg4YWMyLCAweDhhYzIsIDB4OGFjMiwgMHg4YWMyLCAweDhhYzIsIDB4OGFjMiwgMHg4YWMyLAotCTB4OGFjMiwgMHg4YWMyLCAweDhhYzQsIDB4OGFjNCwgMHg4YWM0LCAweDhhYzQsIDB4OGFjMiwgMHg4YWMyLAotCTB4OGFjMiwgMHg4YWM0LCAweDA4MGMsIDB4MTRmNiwgMHg2MDBiLCAweGZmZmYsIDB4NjAwMywgMHgwMDAxLAotCTB4NjEwNiwgMHgwODBjLCAweDY3YTgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2YzUwLAotCTB4MDEyZSwgMHgwMDA1LCAweGExODYsIDB4MDAxMywgMHgxMTI4LCAweDYwMDQsIDB4YTA4MiwgMHgwMDQwLAotCTB4MDgwNCwgMHg4YjVlLCAweGExODYsIDB4MDAyNywgMHgxMWU4LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLAotCTB4MmFkOSwgMHgwMGQ2LCAweDYxMTAsIDB4MjE2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE2OCwgMHg2ODM3LAotCTB4MDEwMywgMHg2ODRiLCAweDAwMjksIDB4Njg0NywgMHgwMDAwLCAweDY5NGMsIDB4YzFjNSwgMHg2OTRlLAotCTB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4OTc0MiwgMHgwMGRlLCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLAotCTB4NmM1MCwgMHgwMDA1LCAweGExODYsIDB4MDAxNCwgMHgxMTIwLCAweDYwMDQsIDB4YTA4MiwgMHgwMDQwLAotCTB4MDQyOCwgMHhhMTg2LCAweDAwNDYsIDB4MDEzOCwgMHhhMTg2LCAweDAwNDUsIDB4MDEyMCwgMHhhMTg2LAotCTB4MDA0NywgMHgxOTBjLCAweDE0ZjYsIDB4MjAwMSwgMHgwMTA5LCAweDIwMDQsIDB4ZDA4NCwgMHgwMTk4LAotCTB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg2Njk5LAotCTB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDEyZSwgMHhlMDAwLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAyLAotCTB4MTExMCwgMHgwODA0LCAweDhiOTgsIDB4MDgwYywgMHg4MGJlLCAweDAwMDUsIDB4MDAwMiwgMHg4YjNjLAotCTB4OGIzYSwgMHg4YjNhLCAweDhiM2EsIDB4OGIzYSwgMHg4YjNhLCAweDhiM2EsIDB4OGIzYSwgMHg4YjNhLAotCTB4OGIzYSwgMHg4YjNhLCAweDhiNTcsIDB4OGI1NywgMHg4YjU3LCAweDhiNTcsIDB4OGIzYSwgMHg4YjU3LAotCTB4OGIzYSwgMHg4YjU3LCAweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDZiNzMsIDB4MDBkNiwgMHg2MTEwLAotCTB4MjE2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE2OCwgMHg2ODM3LCAweDAxMDMsIDB4Njg0YiwgMHgwMDA2LAotCTB4Njg0NywgMHgwMDAwLCAweDY4NTAsIDB4YzBlYywgMHg2ODUyLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLAotCTB4OTc0MiwgMHgwMGRlLCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHgwODBjLAotCTB4NmI3MywgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDAwMiwgMHg4Yjc0LAotCTB4OGI3MiwgMHg4YjcyLCAweDhiNzIsIDB4OGI3MiwgMHg4YjcyLCAweDhiNzIsIDB4OGI3MiwgMHg4YjcyLAotCTB4OGI3MiwgMHg4YjcyLCAweDhiODYsIDB4OGI4NiwgMHg4Yjg2LCAweDhiODYsIDB4OGI3MiwgMHg4YjkxLAotCTB4OGI3MiwgMHg4Yjg2LCAweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDZiNzMsIDB4MjAwMSwgMHhhZmE1LAotCTB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwMiwgMHgwODBjLCAweDZjNTAsIDB4NjAxMCwgMHhhMDg4LAotCTB4MDAxMywgMHgyMTA0LCAweGEwODUsIDB4MDQwMCwgMHgyMDBhLCAweDAwMDUsIDB4MDgwYywgMHg2YjczLAotCTB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMGYsIDB4MDgwYywgMHg2YzUwLAotCTB4MDAwNSwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LAotCTB4YTE4MiwgMHgwMDQwLCAweDAwMDIsIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLAotCTB4OGJiMCwgMHg4Yzg4LCAweDhjYTksIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLAotCTB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4MDgwYywgMHgxNGY2LAotCTB4MDBlNiwgMHgwMGQ2LCAweDYwM2YsIDB4MDAwMCwgMHgyMDcxLCAweGIyODAsIDB4NzEyNCwgMHg2MTBhLAotCTB4MjA3MSwgMHhiMjhjLCAweDYxMTAsIDB4MjE2OCwgMHg3NjE0LCAweGE2YjQsIDB4MGZmZiwgMHg4NmZmLAotCTB4MDkwNCwgMHg4YzU0LCAweGE2OGMsIDB4MGMwMCwgMHgwMWU4LCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLAotCTB4NTAyOSwgMHgwMGZlLCAweDAxOTgsIDB4Njg0YywgMHhkMGFjLCAweDAxODAsIDB4NjAyMCwgMHhkMGRjLAotCTB4MTE2OCwgMHg2ODUwLCAweGQwYmMsIDB4MTE1MCwgMHg3MzE4LCAweDY4MTQsIDB4YTMwNiwgMHgxOTA0LAotCTB4OGM2NiwgMHg3MzFjLCAweDY4MTAsIDB4YTMwNiwgMHgxOTA0LCAweDhjNjYsIDB4NzMxOCwgMHg2YjYyLAotCTB4NzMxYywgMHg2YjVlLCAweGE2OGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMDIsIDB4MDUxOCwgMHhhMTg2LAotCTB4MDAyOCwgMHgxMTI4LCAweDA4MGMsIDB4OTc2NywgMHg2ODRiLCAweDAwMWMsIDB4MDBlOCwgMHhkNmRjLAotCTB4MDFhMCwgMHg2ODRiLCAweDAwMTUsIDB4Njg0YywgMHhkMGFjLCAweDAxNzAsIDB4NjkxNCwgMHg2YTEwLAotCTB4MjEwMCwgMHhhMjA1LCAweDAxNDgsIDB4NzAxOCwgMHhhMTA2LCAweDExMTgsIDB4NzAxYywgMHhhMjA2LAotCTB4MDExOCwgMHg2OTYyLCAweDZhNWUsIDB4YzZkYywgMHgwMDM4LCAweGQ2ZDQsIDB4MDExOCwgMHg2ODRiLAotCTB4MDAwNywgMHgwMDEwLCAweDY4NGIsIDB4MDAwMCwgMHg2ODM3LCAweDAxMDMsIDB4NmU0NiwgMHhhMDFlLAotCTB4ZDZjNCwgMHgwMWYwLCAweGE2ODYsIDB4MDEwMCwgMHgxMTQwLCAweDIwMDEsIDB4YjI5OSwgMHgyMDA0LAotCTB4YTAwNSwgMHgxMTE4LCAweGM2YzQsIDB4MDgwNCwgMHg4YmJmLCAweDczMjgsIDB4NzMyYywgMHg2YjU2LAotCTB4ODNmZiwgMHgwMTcwLCAweGEzOGEsIDB4MDAwOSwgMHgwMjEwLCAweDIwMTksIDB4MDAwOCwgMHgwMDM2LAotCTB4MjMwOCwgMHgyMDE5LCAweGIyOTgsIDB4YWQ5MCwgMHgwMDE5LCAweDA4MGMsIDB4OTI3ZiwgMHgwMDNlLAotCTB4ZDZjYywgMHgwOTA0LCAweDhjNzksIDB4NzEyNCwgMHg2OTVhLCAweDgxZmYsIDB4MDkwNCwgMHg4Yzc5LAotCTB4YTE5MiwgMHgwMDIxLCAweDEyNTAsIDB4MjA3MSwgMHhiMjk4LCAweDgzMWMsIDB4MjMwMCwgMHhhZTE4LAotCTB4YWQ5MCwgMHgwMDFkLCAweDA4MGMsIDB4OTI3ZiwgMHgwNGEwLCAweDY4MzgsIDB4ZDBmYywgMHgwMTIwLAotCTB4MjAwOSwgMHgwMDIwLCAweDY5NWEsIDB4MGM3OCwgMHgwMGY2LCAweDJkNzgsIDB4MDgwYywgMHg5MjI0LAotCTB4MDBmZSwgMHgwODBjLCAweDkyNmYsIDB4MDQzOCwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHg1MDI5LAotCTB4MDBmZSwgMHgwMTg4LCAweDY4NGMsIDB4ZDBhYywgMHgwMTcwLCAweDYwMjAsIDB4ZDBkYywgMHgxMTU4LAotCTB4Njg1MCwgMHhkMGJjLCAweDExNDAsIDB4Njg0YywgMHhkMGY0LCAweDExMjgsIDB4MDgwYywgMHg5ODY2LAotCTB4MDBkZSwgMHgwMGVlLCAweDAwZTAsIDB4Njg0YiwgMHgwMDAwLCAweDY4MzcsIDB4MDEwMywgMHg2ZTQ2LAotCTB4Njg0YywgMHhkMGFjLCAweDAxMzAsIDB4NjgxMCwgMHg2OTE0LCAweGExMTUsIDB4MDExMCwgMHgwODBjLAotCTB4OGUwNCwgMHgwODBjLCAweDUxMGMsIDB4NjIxOCwgMHgyMjY4LCAweDZhM2MsIDB4ODIxMSwgMHg2YTNlLAotCTB4MDgwYywgMHg5ODM0LCAweDAwZGUsIDB4MDBlZSwgMHgxMTEwLCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LAotCTB4MDBmNiwgMHg2MDAzLCAweDAwMDMsIDB4MjA3OSwgMHhiMjhjLCAweDdjMDQsIDB4N2IwMCwgMHg3ZTBjLAotCTB4N2QwOCwgMHg2MDEwLCAweDIwNzgsIDB4Nzg0YywgMHhkMGFjLCAweDAxMjAsIDB4NjAwMywgMHgwMDAyLAotCTB4MDBmZSwgMHgwMDA1LCAweDdjMTIsIDB4N2IxNiwgMHg3ZTBhLCAweDdkMGUsIDB4MDBmZSwgMHg2MDNmLAotCTB4MDAwMCwgMHgyYzEwLCAweDA4MGMsIDB4MWU2ZSwgMHgwODBjLCAweDY4MGIsIDB4MDgwYywgMHg2ZDBkLAotCTB4MDAwNSwgMHgyMDAxLCAweGFmYTUsIDB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwNCwgMHg2MTEwLAotCTB4MjBlMSwgMHgwMDA1LCAweDNkMTgsIDB4M2UyMCwgMHgyYzEwLCAweDA4MGMsIDB4MTgyNCwgMHgwMDA1LAotCTB4YTE4MiwgMHgwMDQwLCAweDAwMDIsIDB4OGNjZSwgMHg4Y2NlLCAweDhjY2UsIDB4OGNjZSwgMHg4Y2NlLAotCTB4OGNkMCwgMHg4ZDYxLCAweDhjY2UsIDB4OGNjZSwgMHg4ZDc3LCAweDhkZGIsIDB4OGNjZSwgMHg4Y2NlLAotCTB4OGNjZSwgMHg4Y2NlLCAweDhkZWEsIDB4OGNjZSwgMHg4Y2NlLCAweDhjY2UsIDB4MDgwYywgMHgxNGY2LAotCTB4MDA3NiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgyMDcxLCAweGIyOGMsIDB4NjExMCwgMHgyMTc4LAotCTB4NzYxNCwgMHhhNmI0LCAweDBmZmYsIDB4N2U0NiwgMHg3ZjRjLCAweGM3ZTUsIDB4N2Y0ZSwgMHg2MjE4LAotCTB4MjI2OCwgMHg2YTNjLCAweDgyMTEsIDB4NmEzZSwgMHg4NmZmLCAweDA5MDQsIDB4OGQ1YywgMHhhNjk0LAotCTB4ZmYwMCwgMHhhMjg0LCAweDBjMDAsIDB4MDEyMCwgMHg3MDE4LCAweDc4NjIsIDB4NzAxYywgMHg3ODVlLAotCTB4YTI4NCwgMHgwMzAwLCAweDA5MDQsIDB4OGQ1YywgMHgwODBjLCAweDE1ZDksIDB4MDkwYywgMHgxNGY2LAotCTB4MmQwMCwgMHg3ODRhLCAweDdmNGMsIDB4YzdjZCwgMHg3ZjRlLCAweDY4MzcsIDB4MDEwMywgMHg3ODM4LAotCTB4NjgzYSwgMHg3ODNjLCAweDY4M2UsIDB4Nzg0MCwgMHg2ODQyLCAweDZlNDYsIDB4YTY4YywgMHgwYzAwLAotCTB4MDEyMCwgMHg3MzE4LCAweDZiNjIsIDB4NzMxYywgMHg2YjVlLCAweGE2OGMsIDB4MDBmZiwgMHhhMTg2LAotCTB4MDAwMiwgMHgwMTgwLCAweGExODYsIDB4MDAyOCwgMHgxMTE4LCAweDY4NGIsIDB4MDAxYywgMHgwMDYwLAotCTB4ZDZkYywgMHgwMTE4LCAweDY4NGIsIDB4MDAxNSwgMHgwMDM4LCAweGQ2ZDQsIDB4MDExOCwgMHg2ODRiLAotCTB4MDAwNywgMHgwMDEwLCAweDY4NGIsIDB4MDAwMCwgMHg2ZjRlLCAweDc4NTAsIDB4Njg1MiwgMHg3ODU0LAotCTB4Njg1NiwgMHhhMDFlLCAweGQ2YzQsIDB4MDE5OCwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwgMHg4M2ZmLAotCTB4MDE3MCwgMHhhMzhhLCAweDAwMDksIDB4MDIxMCwgMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwgMHgyMzA4LAotCTB4MjAxOSwgMHhiMjk4LCAweGFkOTAsIDB4MDAxOSwgMHgwODBjLCAweDkyN2YsIDB4MDAzZSwgMHhkNmNjLAotCTB4MDFkOCwgMHg3MTI0LCAweDY5NWEsIDB4ODFmZiwgMHgwMWI4LCAweGExOTIsIDB4MDAyMSwgMHgxMjUwLAotCTB4MjA3MSwgMHhiMjk4LCAweDgzMWMsIDB4MjMwMCwgMHhhZTE4LCAweGFkOTAsIDB4MDAxZCwgMHgwODBjLAotCTB4OTI3ZiwgMHgwMDUwLCAweDc4MzgsIDB4ZDBmYywgMHgwMTIwLCAweDIwMDksIDB4MDAyMCwgMHg2OTVhLAotCTB4MGM3OCwgMHgyZDc4LCAweDA4MGMsIDB4OTIyNCwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDdlLAotCTB4MDAwNSwgMHgwMGY2LCAweDYwMDMsIDB4MDAwMywgMHgyMDc5LCAweGIyOGMsIDB4N2MwNCwgMHg3YjAwLAotCTB4N2UwYywgMHg3ZDA4LCAweDYwMTAsIDB4MjA3OCwgMHg3YzEyLCAweDdiMTYsIDB4N2UwYSwgMHg3ZDBlLAotCTB4MDBmZSwgMHgyYzEwLCAweDA4MGMsIDB4MWU2ZSwgMHgwODBjLCAweDc4MWEsIDB4MDAwNSwgMHgwMGQ2LAotCTB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4NTAyOSwgMHgwMGZlLCAweDAxMjAsIDB4MjAwMSwgMHhhZmE1LAotCTB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwMiwgMHgwODBjLCAweDZjMDUsIDB4MDgwYywgMHg2ZDBkLAotCTB4NjExMCwgMHgyMTY4LCAweDY5NGMsIDB4ZDFlNCwgMHgwOTA0LCAweDhkZDksIDB4ZDFjYywgMHgwNTQwLAotCTB4Njk0OCwgMHg2ODM4LCAweGQwZmMsIDB4MDFlOCwgMHgwMDE2LCAweDY4NGMsIDB4MDAwNiwgMHg2ODUwLAotCTB4MDAwNiwgMHhhZDkwLCAweDAwMGQsIDB4YTE5OCwgMHgwMDBkLCAweDIwMDksIDB4MDAyMCwgMHgwMTU2LAotCTB4MjFhOCwgMHgyMzA0LCAweDIwMTIsIDB4ODMxOCwgMHg4MjEwLCAweDFmMDQsIDB4OGRhMSwgMHgwMTVlLAotCTB4MDAwZSwgMHg2ODUyLCAweDAwMGUsIDB4Njg0ZSwgMHgwMDFlLCAweDIxNjgsIDB4MDgwYywgMHgxNjAwLAotCTB4MDQxOCwgMHgwMDE2LCAweDA4MGMsIDB4MTYwMCwgMHgwMGRlLCAweDA4MGMsIDB4OTI2ZiwgMHgwMGUwLAotCTB4NjgzNywgMHgwMTAzLCAweDY5NDQsIDB4YTE4NCwgMHgwMGZmLCAweGEwYjYsIDB4MDAwMiwgMHgwMTgwLAotCTB4YTA4NiwgMHgwMDI4LCAweDExMTgsIDB4Njg0YiwgMHgwMDFjLCAweDAwNjAsIDB4ZDFkYywgMHgwMTE4LAotCTB4Njg0YiwgMHgwMDE1LCAweDAwMzgsIDB4ZDFkNCwgMHgwMTE4LCAweDY4NGIsIDB4MDAwNywgMHgwMDEwLAotCTB4Njg0YiwgMHgwMDAwLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk4MzQsIDB4MTExMCwgMHgwODBjLAotCTB4ODA3OCwgMHgwMGRlLCAweDAwMDUsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4N2E2NCwgMHg2MDAzLAotCTB4MDAwMiwgMHgyMDAxLCAweGFmYTUsIDB4MjAwNCwgMHg2MDNlLCAweDA4MGMsIDB4NmMwNSwgMHgwODBjLAotCTB4NmQwZCwgMHgwMDA1LCAweDA4MGMsIDB4NmMwNSwgMHgwODBjLCAweDJhZDksIDB4MDBkNiwgMHg2MTEwLAotCTB4MjE2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE1MCwgMHg2ODM3LCAweDAxMDMsIDB4Njg0YiwgMHgwMDI5LAotCTB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDBkZSwgMHgwODBjLAotCTB4ODA3OCwgMHgwODBjLCAweDZkMGQsIDB4MDAwNSwgMHg2ODRiLCAweDAwMTUsIDB4ZDFmYywgMHgwMTM4LAotCTB4Njg0YiwgMHgwMDA3LCAweDgwMDIsIDB4ODAwMCwgMHg4MTBhLCAweGExODksIDB4MDAwMCwgMHg2OTYyLAotCTB4Njg1ZSwgMHgwMDA1LCAweGExODIsIDB4MDA0MCwgMHgwMDAyLCAweDhlMjgsIDB4OGUyOCwgMHg4ZTI4LAotCTB4OGUyOCwgMHg4ZTI4LCAweDhlMmEsIDB4OGUyOCwgMHg4ZWUzLCAweDhlZWYsIDB4OGUyOCwgMHg4ZTI4LAotCTB4OGUyOCwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyOCwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyOCwgMHg4ZTI4LAotCTB4MDgwYywgMHgxNGY2LCAweDAwNzYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MjA3MSwgMHhiMjhjLAotCTB4NjExMCwgMHgyMTc4LCAweDc2MTQsIDB4YTZiNCwgMHgwZmZmLCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLAotCTB4NTAyOSwgMHgwMGZlLCAweDAxNTAsIDB4YTY4NCwgMHgwMGZmLCAweDExMzgsIDB4NjAyMCwgMHhkMGY0LAotCTB4MDEyMCwgMHgwODBjLCAweDk4NjYsIDB4MDgwNCwgMHg4ZWRlLCAweDdlNDYsIDB4N2Y0YywgMHhjN2U1LAotCTB4N2Y0ZSwgMHg2MjE4LCAweDIyNjgsIDB4NmEzYywgMHg4MjExLCAweDZhM2UsIDB4ODZmZiwgMHgwOTA0LAotCTB4OGVkNCwgMHhhNjk0LCAweGZmMDAsIDB4YTI4NCwgMHgwYzAwLCAweDAxMjAsIDB4NzAxOCwgMHg3ODYyLAotCTB4NzAxYywgMHg3ODVlLCAweGEyODQsIDB4MDMwMCwgMHgwOTA0LCAweDhlZDIsIDB4YTY4NiwgMHgwMTAwLAotCTB4MTE0MCwgMHgyMDAxLCAweGIyOTksIDB4MjAwNCwgMHhhMDA1LCAweDExMTgsIDB4YzZjNCwgMHg3ZTQ2LAotCTB4MGMyOCwgMHgwODBjLCAweDE1ZDksIDB4MDkwYywgMHgxNGY2LCAweDJkMDAsIDB4Nzg0YSwgMHg3ZjRjLAotCTB4YTdiZCwgMHgwMjAwLCAweDdmNGUsIDB4NjgzNywgMHgwMTAzLCAweDc4MzgsIDB4NjgzYSwgMHg3ODNjLAotCTB4NjgzZSwgMHg3ODQwLCAweDY4NDIsIDB4NmU0NiwgMHhhNjhjLCAweDBjMDAsIDB4MDEyMCwgMHg3MzE4LAotCTB4NmI2MiwgMHg3MzFjLCAweDZiNWUsIDB4YTY4YywgMHgwMGZmLCAweGExODYsIDB4MDAwMiwgMHgwMTgwLAotCTB4YTE4NiwgMHgwMDI4LCAweDExMTgsIDB4Njg0YiwgMHgwMDFjLCAweDAwNjAsIDB4ZDZkYywgMHgwMTE4LAotCTB4Njg0YiwgMHgwMDE1LCAweDAwMzgsIDB4ZDZkNCwgMHgwMTE4LCAweDY4NGIsIDB4MDAwNywgMHgwMDEwLAotCTB4Njg0YiwgMHgwMDAwLCAweDZmNGUsIDB4Nzg1MCwgMHg2ODUyLCAweDc4NTQsIDB4Njg1NiwgMHhhMDFlLAotCTB4ZDZjNCwgMHgwMTk4LCAweDczMjgsIDB4NzMyYywgMHg2YjU2LCAweDgzZmYsIDB4MDE3MCwgMHhhMzhhLAotCTB4MDAwOSwgMHgwMjEwLCAweDIwMTksIDB4MDAwOCwgMHgwMDM2LCAweDIzMDgsIDB4MjAxOSwgMHhiMjk4LAotCTB4YWQ5MCwgMHgwMDE5LCAweDA4MGMsIDB4OTI3ZiwgMHgwMDNlLCAweGQ2Y2MsIDB4MDFkOCwgMHg3MTI0LAotCTB4Njk1YSwgMHg4MWZmLCAweDAxYjgsIDB4YTE5MiwgMHgwMDIxLCAweDEyNTAsIDB4MjA3MSwgMHhiMjk4LAotCTB4ODMxYywgMHgyMzAwLCAweGFlMTgsIDB4YWQ5MCwgMHgwMDFkLCAweDA4MGMsIDB4OTI3ZiwgMHgwMDUwLAotCTB4NzgzOCwgMHhkMGZjLCAweDAxMjAsIDB4MjAwOSwgMHgwMDIwLCAweDY5NWEsIDB4MGM3OCwgMHgyZDc4LAotCTB4MDgwYywgMHg5MjI0LCAweGQ2ZGMsIDB4MTExMCwgMHhhMDA2LCAweDAwMzAsIDB4MjAwMSwgMHgwMDAxLAotCTB4MjA3MSwgMHhiMjhjLCAweDcyMTgsIDB4NzMxYywgMHgwODBjLCAweDE4NmYsIDB4MDBkZSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDdlLCAweDAwMDUsIDB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjAzZSwgMHgyMGUxLAotCTB4MDAwNSwgMHgzZDE4LCAweDNlMjAsIDB4MmMxMCwgMHgwODBjLCAweDE4MjQsIDB4MDAwNSwgMHgyMDAxLAotCTB4YWZhNSwgMHgyMDA0LCAweDYwM2UsIDB4MDBkNiwgMHg2MDAzLCAweDAwMDIsIDB4NjExMCwgMHgyMTY4LAotCTB4Njk0YywgMHhkMWU0LCAweDA5MDQsIDB4OGZmMywgMHg2MDNmLCAweDAwMDAsIDB4MDBmNiwgMHgyYzc4LAotCTB4MDgwYywgMHg1MDI5LCAweDAwZmUsIDB4MDU0OCwgMHg2ODE0LCAweDY5MTAsIDB4YTExNSwgMHgwNTI4LAotCTB4NmE2MCwgMHhhMjA2LCAweDExMTgsIDB4Njg1YywgMHhhMTA2LCAweDAxZjgsIDB4Njg0YywgMHhjMGU0LAotCTB4Njg0ZSwgMHg2ODQ3LCAweDAwMDAsIDB4Njg2MywgMHgwMDAwLCAweDY4NWYsIDB4MDAwMCwgMHg2OTdjLAotCTB4NjgxMCwgMHhhMTAyLCAweDYwM2EsIDB4Njk4MCwgMHg2ODE0LCAweGExMDMsIDB4NjAzNiwgMHg2MDIwLAotCTB4YzBmNSwgMHg2MDIyLCAweDAwZDYsIDB4NjAxOCwgMHgyMDY4LCAweDY4M2MsIDB4ODAwMCwgMHg2ODNlLAotCTB4MDBkZSwgMHgwODBjLCAweDk4NjYsIDB4MDgwNCwgMHg4ZmYzLCAweDY5NGMsIDB4ZDFjYywgMHgwOTA0LAotCTB4OGZjMywgMHg2OTQ4LCAweDY4MzgsIDB4ZDBmYywgMHgwOTA0LCAweDhmODgsIDB4MDAxNiwgMHg2ODRjLAotCTB4MDAwNiwgMHg2ODUwLCAweDAwMDYsIDB4MDBmNiwgMHgyMTc4LCAweDc5NDQsIDB4YTE4NCwgMHgwMGZmLAotCTB4YTBiNiwgMHgwMDAyLCAweDAxZTAsIDB4YTA4NiwgMHgwMDI4LCAweDExMjgsIDB4Njg0YiwgMHgwMDFjLAotCTB4Nzg0YiwgMHgwMDFjLCAweDAwZTgsIDB4ZDFkYywgMHgwMTU4LCAweDY4NGIsIDB4MDAxNSwgMHg3ODRiLAotCTB4MDAxNSwgMHgwODBjLCAweDk5ZWUsIDB4MDExOCwgMHg3OTQ0LCAweGMxZGMsIDB4Nzk0NiwgMHgwMDgwLAotCTB4ZDFkNCwgMHgwMTI4LCAweDY4NGIsIDB4MDAwNywgMHg3ODRiLCAweDAwMDcsIDB4MDA0OCwgMHg2ODRjLAotCTB4ZDBhYywgMHgwMTMwLCAweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAxMTAsIDB4MDgwYywgMHg4ZTA0LAotCTB4Njg0OCwgMHg3ODRhLCAweDY4NjAsIDB4Nzg2MiwgMHg2ODVjLCAweDc4NWUsIDB4YWQ5MCwgMHgwMDBkLAotCTB4YWY5OCwgMHgwMDBkLCAweDIwMDksIDB4MDAyMCwgMHgwMTU2LCAweDIxYTgsIDB4MjMwNCwgMHgyMDEyLAotCTB4ODMxOCwgMHg4MjEwLCAweDFmMDQsIDB4OGY3NiwgMHgwMTVlLCAweDAwZmUsIDB4MDAwZSwgMHg2ODUyLAotCTB4MDAwZSwgMHg2ODRlLCAweDAwMWUsIDB4MjE2OCwgMHgwODBjLCAweDE2MDAsIDB4MDgwNCwgMHg4ZmVlLAotCTB4MDAxNiwgMHgwMGY2LCAweDIxNzgsIDB4Nzk0NCwgMHhhMTg0LCAweDAwZmYsIDB4YTBiNiwgMHgwMDAyLAotCTB4MDFlMCwgMHhhMDg2LCAweDAwMjgsIDB4MTEyOCwgMHg2ODRiLCAweDAwMWMsIDB4Nzg0YiwgMHgwMDFjLAotCTB4MDBlOCwgMHhkMWRjLCAweDAxNTgsIDB4Njg0YiwgMHgwMDE1LCAweDc4NGIsIDB4MDAxNSwgMHgwODBjLAotCTB4OTllZSwgMHgwMTE4LCAweDc5NDQsIDB4YzFkYywgMHg3OTQ2LCAweDAwODAsIDB4ZDFkNCwgMHgwMTI4LAotCTB4Njg0YiwgMHgwMDA3LCAweDc4NGIsIDB4MDAwNywgMHgwMDQ4LCAweDY4NGMsIDB4ZDBhYywgMHgwMTMwLAotCTB4NjgxMCwgMHg2OTE0LCAweGExMTUsIDB4MDExMCwgMHgwODBjLCAweDhlMDQsIDB4Njg2MCwgMHg3ODYyLAotCTB4Njg1YywgMHg3ODVlLCAweDY4NGMsIDB4Nzg0ZSwgMHgwMGZlLCAweDA4MGMsIDB4MTYwMCwgMHgwMGRlLAotCTB4MDgwYywgMHg5MjZmLCAweDA0NTgsIDB4NjgzNywgMHgwMTAzLCAweDY5NDQsIDB4YTE4NCwgMHgwMGZmLAotCTB4YTBiNiwgMHgwMDAyLCAweDAxYjAsIDB4YTA4NiwgMHgwMDI4LCAweDExMTgsIDB4Njg0YiwgMHgwMDFjLAotCTB4MDBkOCwgMHhkMWRjLCAweDAxNDgsIDB4Njg0YiwgMHgwMDE1LCAweDA4MGMsIDB4OTllZSwgMHgwMTE4LAotCTB4Njk0NCwgMHhjMWRjLCAweDY5NDYsIDB4MDA4MCwgMHhkMWQ0LCAweDAxMTgsIDB4Njg0YiwgMHgwMDA3LAotCTB4MDA1OCwgMHg2ODRiLCAweDAwMDAsIDB4Njg0YywgMHhkMGFjLCAweDAxMzAsIDB4NjgxMCwgMHg2OTE0LAotCTB4YTExNSwgMHgwMTEwLCAweDA4MGMsIDB4OGUwNCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg5ODM0LAotCTB4MTExMCwgMHgwODBjLCAweDgwNzgsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4NmI3MywgMHgwMDEwLAotCTB4MDgwYywgMHg2YzA1LCAweDA4MGMsIDB4OTU5NiwgMHgwMWMwLCAweDAwZDYsIDB4NjExMCwgMHgyMTY4LAotCTB4NjgzNywgMHgwMTAzLCAweDIwMDksIDB4YWQwYywgMHgyMTBjLCAweGQxOGMsIDB4MTFjMCwgMHhkMTg0LAotCTB4MTE5OCwgMHg2MTA4LCAweDY5NGEsIDB4YTE4ZSwgMHgwMDI5LCAweDExMTAsIDB4MDgwYywgMHhhYmZhLAotCTB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4NTEwYywgMHgwMGRlLCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLAotCTB4NmM1MCwgMHgwODBjLCAweDZkMGQsIDB4MDAwNSwgMHg2ODRiLCAweDAwMDQsIDB4MGM4OCwgMHg2ODRiLAotCTB4MDAwNCwgMHgwYzcwLCAweGExODIsIDB4MDA0MCwgMHgwMDAyLCAweDkwMzgsIDB4OTAzOCwgMHg5MDM4LAotCTB4OTAzOCwgMHg5MDM4LCAweDkwM2EsIDB4OTAzOCwgMHg5MDNkLCAweDkwMzgsIDB4OTAzOCwgMHg5MDM4LAotCTB4OTAzOCwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwgMHg5MDM4LAotCTB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDAwMDYsIDB4MDAyNiwgMHhhMDE2LAotCTB4MDgwYywgMHgxODI0LCAweDAwMmUsIDB4MDAwZSwgMHgwMDA1LCAweGExODIsIDB4MDA4NSwgMHgwMDAyLAotCTB4OTA1MSwgMHg5MDRmLCAweDkwNGYsIDB4OTA1ZCwgMHg5MDRmLCAweDkwNGYsIDB4OTA0ZiwgMHgwODBjLAotCTB4MTRmNiwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwODBjLCAweDY3YTgsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDZjNTAsIDB4MDEyZSwgMHgwMDA1LCAweDAwMjYsIDB4MDA1NiwgMHgwMGQ2LAotCTB4MDBlNiwgMHgyMDcxLCAweGIyODAsIDB4NzIyNCwgMHg2MjEyLCAweDcyMjAsIDB4MDgwYywgMHg5NTg2LAotCTB4MDFhMCwgMHgyMjY4LCAweDY4MDAsIDB4YTA4NiwgMHgwMDAwLCAweDAxNzgsIDB4NjAxOCwgMHg2ZDE4LAotCTB4YTUyZSwgMHgxMTU4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweDkyOGYsIDB4MDBjZSwgMHgwMTI4LAotCTB4NjgwMywgMHgwMDAyLCAweDYwMDcsIDB4MDA4NiwgMHgwMDEwLCAweDYwMDcsIDB4MDA4NywgMHg2MDAzLAotCTB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDAwZjYsIDB4MjI3OCwgMHgwODBjLAotCTB4NTAyOSwgMHgwMGZlLCAweDAxNTAsIDB4NjgyMCwgMHhkMGVjLCAweDAxMzgsIDB4MDBjNiwgMHgyMjYwLAotCTB4NjAzZiwgMHgwMDAwLCAweDA4MGMsIDB4OTg2NiwgMHgwMGNlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDVlLAotCTB4MDAyZSwgMHgwMDA1LCAweGExODYsIDB4MDAxMywgMHgxMTYwLCAweDYwMDQsIDB4YTA4YSwgMHgwMDg1LAotCTB4MGEwYywgMHgxNGY2LCAweGEwOGEsIDB4MDA4YywgMHgxYTBjLCAweDE0ZjYsIDB4YTA4MiwgMHgwMDg1LAotCTB4MDA3MiwgMHhhMTg2LCAweDAwMjcsIDB4MDEyMCwgMHhhMTg2LCAweDAwMTQsIDB4MTkwYywgMHgxNGY2LAotCTB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHg5MGJlLAotCTB4OTBjMCwgMHg5MGMwLCAweDkwYmUsIDB4OTBiZSwgMHg5MGJlLCAweDkwYmUsIDB4MDgwYywgMHgxNGY2LAotCTB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHhhMTg2LAotCTB4MDAxMywgMHgxMTI4LCAweDYwMDQsIDB4YTA4MiwgMHgwMDg1LCAweDIwMDgsIDB4MDRhOCwgMHhhMTg2LAotCTB4MDAyNywgMHgxMWU4LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDJhZDksIDB4MDBkNiwgMHg2MDEwLAotCTB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE1MCwgMHg2ODM3LCAweDAxMDMsIDB4Njg0NywgMHgwMDAwLAotCTB4Njg0YiwgMHgwMDI5LCAweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDBkZSwgMHgwODBjLAotCTB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHgwODBjLCAweDgwYmUsIDB4MGNlMCwgMHhhMTg2LAotCTB4MDAxNCwgMHgxZGQwLCAweDA4MGMsIDB4NmI3MywgMHgwMGQ2LCAweDYwMTAsIDB4MjA2OCwgMHgwODBjLAotCTB4OTU5NiwgMHgwZDYwLCAweDY4MzcsIDB4MDEwMywgMHg2ODQ3LCAweDAwMDAsIDB4Njg0YiwgMHgwMDA2LAotCTB4Njg1MCwgMHhjMGVjLCAweDY4NTIsIDB4MDhmMCwgMHgwMDAyLCAweDkxMGUsIDB4OTEwYywgMHg5MTBjLAotCTB4OTEwYywgMHg5MTBjLCAweDkxMGMsIDB4OTEyNiwgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLAotCTB4NjAzMCwgMHhhMDhjLCAweGZmMDAsIDB4ODEwZiwgMHhhMTg2LCAweDAwMzksIDB4MDExOCwgMHhhMTg2LAotCTB4MDAzNSwgMHgxMTE4LCAweDIwMDEsIDB4YWZhMywgMHgwMDEwLCAweDIwMDEsIDB4YWZhNCwgMHgyMDA0LAotCTB4NjAxNiwgMHg2MDAzLCAweDAwMGMsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywgMHg2YjczLAotCTB4NjAzMCwgMHhhMDhjLCAweGZmMDAsIDB4ODEwZiwgMHhhMTg2LCAweDAwMzksIDB4MDExOCwgMHhhMTg2LAotCTB4MDAzNSwgMHgxMTE4LCAweDIwMDEsIDB4YWZhMywgMHgwMDEwLCAweDIwMDEsIDB4YWZhNCwgMHgyMDA0LAotCTB4NjAxNiwgMHg2MDAzLCAweDAwMGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4MiwgMHgwMDhjLAotCTB4MTIyMCwgMHhhMTgyLCAweDAwODUsIDB4MDIwOCwgMHgwMDFhLCAweDA4MGMsIDB4ODBiZSwgMHgwMDA1LAotCTB4OTE0ZiwgMHg5MTRmLCAweDkxNGYsIDB4OTE0ZiwgMHg5MTUxLCAweDkxYTQsIDB4OTE0ZiwgMHgwODBjLAotCTB4MTRmNiwgMHgwMGQ2LCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweDUwMjksIDB4MDBmZSwgMHgwMTY4LAotCTB4NjAzMCwgMHhhMDhjLCAweGZmMDAsIDB4ODEwZiwgMHhhMTg2LCAweDAwMzksIDB4MDExOCwgMHhhMTg2LAotCTB4MDAzNSwgMHgxMTE4LCAweDAwZGUsIDB4MDgwNCwgMHg5MWI3LCAweDA4MGMsIDB4OTc0MiwgMHgwODBjLAotCTB4OTU5NiwgMHgwMWM4LCAweDYwMTAsIDB4MjA2OCwgMHg2ODM3LCAweDAxMDMsIDB4Njg1MCwgMHhkMGI0LAotCTB4MDEyOCwgMHg2ODRiLCAweDAwMDYsIDB4YzBlYywgMHg2ODUyLCAweDAwNDgsIDB4ZDBiYywgMHgwMTE4LAotCTB4Njg0YiwgMHgwMDAyLCAweDAwMjAsIDB4Njg0YiwgMHgwMDA1LCAweDA4MGMsIDB4OTgwMywgMHg2ODQ3LAotCTB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MmM2OCwgMHgwODBjLCAweDgwMjIsIDB4MDFjMCwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMWUsIDB4NjAwYiwgMHhmZmZmLCAweDIwMDksIDB4YjI4ZSwgMHgyMTBjLAotCTB4NjEzNiwgMHgyMDA5LCAweGIyOGYsIDB4MjEwYywgMHg2MTNhLCAweDY5MTgsIDB4NjExYSwgMHgwODBjLAotCTB4OTk1NiwgMHg2OTUwLCAweDYxNTIsIDB4NjAxZiwgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwgMHgyZDYwLAotCTB4MDgwYywgMHg4MDc4LCAweDAwZGUsIDB4MDAwNSwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHg1MDI5LAotCTB4MDBmZSwgMHgwNTk4LCAweDYwMzAsIDB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM1LAotCTB4MDEzMCwgMHhhMTg2LCAweDAwMWUsIDB4MDExOCwgMHhhMTg2LCAweDAwMzksIDB4MTUzMCwgMHgwMGQ2LAotCTB4MmM2OCwgMHgwODBjLCAweDlhMzQsIDB4MTkwNCwgMHg5MWZjLCAweDA4MGMsIDB4ODAyMiwgMHgwMWQ4LAotCTB4NjEwNiwgMHg2MDAzLCAweDAwMDEsIDB4NjAxZiwgMHgwMDAxLCAweDY5MTgsIDB4NjExYSwgMHg2OTI4LAotCTB4NjEyYSwgMHg2OTJjLCAweDYxMmUsIDB4NjkzMCwgMHhhMThjLCAweDAwZmYsIDB4NjEzMiwgMHg2OTM0LAotCTB4NjEzNiwgMHg2OTM4LCAweDYxM2EsIDB4Njk1MCwgMHg2MTUyLCAweDA4MGMsIDB4OTk1NiwgMHgwODBjLAotCTB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MmQ2MCwgMHgwMGY4LCAweDAwZDYsIDB4NjAxMCwgMHgyMDY4LAotCTB4MDgwYywgMHg5NTk2LCAweDAxYzgsIDB4NjgzNywgMHgwMTAzLCAweDY4NTAsIDB4ZDBiNCwgMHgwMTI4LAotCTB4YzBlYywgMHg2ODUyLCAweDY4NGIsIDB4MDAwNiwgMHgwMDQ4LCAweGQwYmMsIDB4MDExOCwgMHg2ODRiLAotCTB4MDAwMiwgMHgwMDIwLCAweDY4NGIsIDB4MDAwNSwgMHgwODBjLCAweDk4MDMsIDB4Njg0NywgMHgwMDAwLAotCTB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4OTc0MiwgMHgwMGRlLCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMGQ2LCAweDYwMTAsIDB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE0MCwgMHg2ODM3LAotCTB4MDEwMywgMHg2ODRiLCAweDAwMjgsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4NTEwYywgMHgwMGRlLAotCTB4MDAxZSwgMHhhMTg2LCAweDAwMTMsIDB4MDE0OCwgMHhhMTg2LCAweDAwMTQsIDB4MDEzMCwgMHhhMTg2LAotCTB4MDAyNywgMHgwMTE4LCAweDA4MGMsIDB4ODBiZSwgMHgwMDMwLCAweDA4MGMsIDB4NmI3MywgMHgwODBjLAotCTB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHgwMDU2LCAweDAwNjYsIDB4MDBkNiwgMHgwMGY2LAotCTB4MjAyOSwgMHgwMDAxLCAweGExODIsIDB4MDEwMSwgMHgxMjA4LCAweDAwMTAsIDB4MjAwOSwgMHgwMTAwLAotCTB4MjEzMCwgMHgyMDY5LCAweGIyOTgsIDB4ODMxYywgMHgyMzAwLCAweGFkMTgsIDB4MjAwOSwgMHgwMDIwLAotCTB4YWY5MCwgMHgwMDFkLCAweDA4MGMsIDB4OTI3ZiwgMHhhNmIyLCAweDAwMjAsIDB4NzgwNCwgMHhhMDZkLAotCTB4MDExMCwgMHgwODBjLCAweDE2MDAsIDB4MDgwYywgMHgxNWQ5LCAweDA1MDAsIDB4ODUyOCwgMHg2ODM3LAotCTB4MDExMCwgMHg2ODNiLCAweDAwMDAsIDB4MmQyMCwgMHg3YzA2LCAweGE2OGEsIDB4MDAzZCwgMHgxMjI4LAotCTB4MjYwOCwgMHhhZDkwLCAweDAwMGYsIDB4MDQ1OSwgMHgwMDg4LCAweGE2YjIsIDB4MDAzYywgMHgyMDA5LAotCTB4MDAzYywgMHgyZDc4LCAweGFkOTAsIDB4MDAwZiwgMHgwNDExLCAweDBjMjgsIDB4MDBmZSwgMHg4NTJmLAotCTB4YTVhZCwgMHgwMDAzLCAweDdkMzYsIDB4YTVhYywgMHgwMDAwLCAweDAwMjgsIDB4MDBmZSwgMHg4NTJmLAotCTB4YTVhZCwgMHgwMDAzLCAweDdkMzYsIDB4MDBkZSwgMHgwMDZlLCAweDAwNWUsIDB4MDAwNSwgMHgwMGY2LAotCTB4OGRmZiwgMHgwMTU4LCAweDY4MDQsIDB4YTA3ZCwgMHgwMTMwLCAweDY4MDcsIDB4MDAwMCwgMHgwODBjLAotCTB4NTEwYywgMHgyZjY4LCAweDBjYjgsIDB4MDgwYywgMHg1MTBjLCAweDAwZmUsIDB4MDAwNSwgMHgwMTU2LAotCTB4YTE4NCwgMHgwMDAxLCAweDAxMDgsIDB4ODEwOCwgMHg4MTBjLCAweDIxYTgsIDB4MjMwNCwgMHg4MDA3LAotCTB4MjAxMiwgMHg4MzE4LCAweDgyMTAsIDB4MWYwNCwgMHg5Mjg2LCAweDAxNWUsIDB4MDAwNSwgMHgwMDY2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAzMSwgMHgwMDAxLCAweDYwMWMsIDB4YTA4NCwgMHgwMDBmLAotCTB4MDA4MywgMHgwMTJlLCAweDAwNmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDY2LAotCTB4MjAzMSwgMHgwMDAwLCAweDYwMWMsIDB4YTA4NCwgMHgwMDBmLCAweDAwMWIsIDB4MDA2ZSwgMHgwMTJlLAotCTB4MDAwNSwgMHg5MmMzLCAweDkyYzMsIDB4OTJiZSwgMHg5MmU1LCAweDkyYjEsIDB4OTJiZSwgMHg5MmU1LAotCTB4OTJiZSwgMHgwODBjLCAweDE0ZjYsIDB4MDAzNiwgMHgyMDE5LCAweDAwMTAsIDB4MDgwYywgMHhhNTY2LAotCTB4NjAxZiwgMHgwMDA2LCAweDYwMDMsIDB4MDAwNywgMHgwMDNlLCAweDAwMDUsIDB4YTAwNiwgMHgwMDA1LAotCTB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBkNiwgMHg4NmZmLCAweDExZDgsIDB4NjAxMCwgMHgyMDY4LAotCTB4MDgwYywgMHg5NTk2LCAweDAxYzAsIDB4NjgzNCwgMHhhMDg2LCAweDAxMzksIDB4MTEyOCwgMHg2ODRiLAotCTB4MDAwNSwgMHg2ODUzLCAweDAwMDAsIDB4MDAyOCwgMHhhMDBlLCAweDIwMDEsIDB4MDAwNSwgMHgwODBjLAotCTB4NTFkZiwgMHgwODBjLCAweDk4MDMsIDB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4ODA3OCwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMGRlLCAweDAwMDUsIDB4YTAwNiwgMHgwY2UwLCAweDYwMDAsIDB4YTA4YSwgMHgwMDEwLAotCTB4MWEwYywgMHgxNGY2LCAweDAwMGIsIDB4MDAwNSwgMHg5MmZjLCAweDkzMTksIDB4OTJmZSwgMHg5MzM4LAotCTB4OTMxNiwgMHg5MmZjLCAweDkyYmUsIDB4OTJjMywgMHg5MmMzLCAweDkyYmUsIDB4OTJiZSwgMHg5MmJlLAotCTB4OTJiZSwgMHg5MmJlLCAweDkyYmUsIDB4OTJiZSwgMHgwODBjLCAweDE0ZjYsIDB4ODZmZiwgMHgxMTk4LAotCTB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxMTAsIDB4MDgwYywgMHg5ODAzLAotCTB4MDBkZSwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHgwODBjLAotCTB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHgxOTBiLAotCTB4MGMyOCwgMHgwMGU2LCAweDIwNzEsIDB4YWZjNywgMHg3MDI0LCAweGFjMDYsIDB4MTExMCwgMHgwODBjLAotCTB4NzllMSwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHhhMDg2LCAweDAwMDYsIDB4MTE1MCwgMHgwMDg2LAotCTB4MDA5NiwgMHgyMDQ5LCAweDAwMDEsIDB4MmM0MCwgMHgwODBjLCAweDdiOWEsIDB4MDA5ZSwgMHgwMDhlLAotCTB4MDAxMCwgMHgwODBjLCAweDc4ZGUsIDB4MDBlZSwgMHgxOTQ4LCAweDA4MGMsIDB4OTJiZSwgMHgwMDA1LAotCTB4MDAzNiwgMHgwMGU2LCAweDIwNzEsIDB4YWZjNywgMHg3MDNjLCAweGFjMDYsIDB4MTE0MCwgMHgyMDE5LAotCTB4MDAwMCwgMHgwODBjLCAweDdhNjQsIDB4MDBlZSwgMHgwMDNlLCAweDA4MDQsIDB4OTJmZSwgMHgwODBjLAotCTB4N2NiOCwgMHgwMGVlLCAweDAwM2UsIDB4MTkwNCwgMHg5MmZlLCAweDA4MGMsIDB4OTJiZSwgMHgwMDA1LAotCTB4MDBjNiwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgwMDEzLCAweDAwY2UsIDB4MDAwNSwgMHg5MzY5LAotCTB4OTNkMywgMHg5NTAxLCAweDkzNzQsIDB4OTc0ZSwgMHg5MzY5LCAweGE1NTgsIDB4ODA3OCwgMHg5M2QzLAotCTB4OTM2MiwgMHg5NTVmLCAweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDk3ODksIDB4MTExMCwgMHgwODBjLAotCTB4ODVmMywgMHgwMDA1LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDZjNTAsIDB4MDgwYywgMHg4MDc4LAotCTB4MDAwNSwgMHg2MDE3LCAweDAwMDEsIDB4MDAwNSwgMHg2MDEwLCAweGEwODAsIDB4MDAxOSwgMHgyYzAyLAotCTB4NjAwMCwgMHhhMDhhLCAweDAwMTAsIDB4MWEwYywgMHgxNGY2LCAweDAwMGIsIDB4MDAwNSwgMHg5MzhmLAotCTB4OTM5MSwgMHg5M2IxLCAweDkzYzMsIDB4OTNkMCwgMHg5MzhmLCAweDkzNjksIDB4OTM2OSwgMHg5MzY5LAotCTB4OTNjMywgMHg5M2MzLCAweDkzOGYsIDB4OTM4ZiwgMHg5MzhmLCAweDkzOGYsIDB4OTNjZCwgMHgwODBjLAotCTB4MTRmNiwgMHgwMGU2LCAweDYwMTAsIDB4MjA3MCwgMHg3MDUwLCAweGMwYjUsIDB4NzA1MiwgMHgyMDcxLAotCTB4YWZjNywgMHg3MDI0LCAweGFjMDYsIDB4MDE5MCwgMHgwODBjLCAweDc4ZGUsIDB4NjAwNywgMHgwMDg1LAotCTB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwgMHg2MDE2LAotCTB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwMGVlLCAweDAwMDUsIDB4NjAxNywgMHgwMDAxLAotCTB4MGNkOCwgMHgwMGQ2LCAweDYwMTAsIDB4MjA2OCwgMHg2ODUwLCAweGMwYjUsIDB4Njg1MiwgMHgwMGRlLAotCTB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MDgwYywgMHg2N2E4LAotCTB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDBkNiwgMHg2MDE3LCAweDAwMDEsIDB4NjAxMCwgMHgyMDY4LAotCTB4Njg1MCwgMHhjMGI1LCAweDY4NTIsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LAotCTB4MDgwYywgMHgxOTBiLCAweDA4ZjAsIDB4NjAwMCwgMHhhMDhhLCAweDAwMTAsIDB4MWEwYywgMHgxNGY2LAotCTB4MDAwYiwgMHgwMDA1LCAweDkzZWEsIDB4OTM3MSwgMHg5M2VjLCAweDkzZWEsIDB4OTNlYywgMHg5M2VjLAotCTB4OTM2YSwgMHg5M2VhLCAweDkzNjQsIDB4OTM2NCwgMHg5M2VhLCAweDkzZWEsIDB4OTNlYSwgMHg5M2VhLAotCTB4OTNlYSwgMHg5M2VhLCAweDA4MGMsIDB4MTRmNiwgMHgwMGQ2LCAweDYwMTgsIDB4MjA2OCwgMHg2ODA0LAotCTB4YTA4NCwgMHgwMGZmLCAweDAwZGUsIDB4YTA4YSwgMHgwMDBjLCAweDFhMGMsIDB4MTRmNiwgMHgwMDBiLAotCTB4MDAwNSwgMHg5NDA1LCAweDk0YTcsIDB4OTQwNywgMHg5NDQxLCAweDk0MDcsIDB4OTQ0MSwgMHg5NDA3LAotCTB4OTQxMSwgMHg5NDA1LCAweDk0NDEsIDB4OTQwNSwgMHg5NDJkLCAweDA4MGMsIDB4MTRmNiwgMHg2MDA0LAotCTB4YTA4ZSwgMHgwMDE2LCAweDA1ODgsIDB4YTA4ZSwgMHgwMDA0LCAweDA1NzAsIDB4YTA4ZSwgMHgwMDAyLAotCTB4MDU1OCwgMHg2MDA0LCAweDA4MGMsIDB4OTc4OSwgMHgwOTA0LCAweDk0YzAsIDB4YTA4ZSwgMHgwMDIxLAotCTB4MDkwNCwgMHg5NGM0LCAweGEwOGUsIDB4MDAyMiwgMHgwOTA0LCAweDk0YzAsIDB4YTA4ZSwgMHgwMDNkLAotCTB4MDkwNCwgMHg5NGM0LCAweGEwOGUsIDB4MDAzOSwgMHgwOTA0LCAweDk0YzgsIDB4YTA4ZSwgMHgwMDM1LAotCTB4MDkwNCwgMHg5NGM4LCAweGEwOGUsIDB4MDAxZSwgMHgwMTg4LCAweGEwOGUsIDB4MDAwMSwgMHgxMTUwLAotCTB4MDBkNiwgMHg2MDE4LCAweDIwNjgsIDB4NjgwNCwgMHhhMDg0LCAweDAwZmYsIDB4MDBkZSwgMHhhMDg2LAotCTB4MDAwNiwgMHgwMTEwLCAweDA4MGMsIDB4MmFkOSwgMHgwODBjLCAweDg1ZjMsIDB4MDgwYywgMHg5NzRlLAotCTB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4NjEwNCwgMHhhMTg2LCAweDAwMTYsIDB4MDkwNCwgMHg5NDk4LAotCTB4YTE4NiwgMHgwMDAyLCAweDE1MTgsIDB4NjAxOCwgMHgyMDY4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LAotCTB4ZDBhYywgMHgxOTA0LCAweDk0ZWEsIDB4NjhhMCwgMHhkMGJjLCAweDE5MDQsIDB4OTRlYSwgMHg2ODQwLAotCTB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDE5MCwgMHg4MDAxLCAweDY4NDIsIDB4NjAxMywgMHgwMDAwLAotCTB4NjAxZiwgMHgwMDA3LCAweDYwMTcsIDB4MDM5OCwgMHg2MDNmLCAweDAwMDAsIDB4MDgwYywgMHg4MDIyLAotCTB4MDEyOCwgMHgyZDAwLCAweDYwMWEsIDB4NjAxZiwgMHgwMDAxLCAweDA0NTAsIDB4MDBkZSwgMHgwMGNlLAotCTB4NjAwNCwgMHhhMDhlLCAweDAwMDIsIDB4MTFhOCwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4YTA4NiwgMHgwMDdlLCAweDExNzAsIDB4MjAwOSwgMHhhZDM0LCAweDIxMDQsIDB4YzA4NSwgMHgyMDBhLAotCTB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4MDgwYywgMHg0OGY1LCAweDAwZWUsIDB4MDgwYywgMHg4NWYzLAotCTB4MDAyMCwgMHgwODBjLCAweDg1ZjMsIDB4MDgwYywgMHgyYWQ5LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDJhZmYsIDB4MDEyZSwgMHgwMGVlLCAweDA4MGMsIDB4OTc0ZSwgMHgwMDA1LAotCTB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NGMzMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLAotCTB4MDgwYywgMHg2N2VlLCAweDA4MGMsIDB4NmM1MCwgMHgwMGRlLCAweDAwY2UsIDB4MGM4MCwgMHgwMGM2LAotCTB4MDBkNiwgMHg2MTA0LCAweGExODYsIDB4MDAxNiwgMHgwZDU4LCAweDYwMTgsIDB4MjA2OCwgMHg2ODQwLAotCTB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDkwNCwgMHg5NDZlLCAweDgwMDEsIDB4Njg0MiwgMHg2MDAzLAotCTB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDgwYywgMHg2YzUwLCAweDAwZGUsIDB4MDBjZSwgMHgwOGI4LAotCTB4MDgwYywgMHg4NWYzLCAweDA4MDQsIDB4OTQzZSwgMHgwODBjLCAweDg2MjEsIDB4MDgwNCwgMHg5NDNlLAotCTB4MDBkNiwgMHgyYzY4LCAweDYxMDQsIDB4MDgwYywgMHg5YTM0LCAweDAwZGUsIDB4MDExOCwgMHgwODBjLAotCTB4ODA3OCwgMHgwMGI4LCAweDYwMDQsIDB4ODAwNywgMHg2MTMwLCAweGExOGMsIDB4MDBmZiwgMHhhMTA1LAotCTB4NjAzMiwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHg2MDM4LAotCTB4NjAwYSwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwgMHg2MDE2LCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLAotCTB4NmM1MCwgMHgwMDA1LCAweDAwZGUsIDB4MDBjZSwgMHgwODBjLCAweDg1ZjMsIDB4MDgwYywgMHgyYWQ5LAotCTB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDJhZmYsIDB4NjAxMywgMHgwMDAwLAotCTB4NjAxZiwgMHgwMDA3LCAweDYwMTcsIDB4MDM5OCwgMHg2MDNmLCAweDAwMDAsIDB4MDEyZSwgMHgwMGVlLAotCTB4MDAwNSwgMHg2MDAwLCAweGEwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAwYiwgMHgwMDA1LAotCTB4OTUxOCwgMHg5NTE4LCAweDk1MTgsIDB4OTUxOCwgMHg5NTE4LCAweDk1MTgsIDB4OTUxOCwgMHg5NTE4LAotCTB4OTUxOCwgMHg5MzY5LCAweDk1MTgsIDB4OTM3MSwgMHg5NTFhLCAweDkzNzEsIDB4OTUyNywgMHg5NTE4LAotCTB4MDgwYywgMHgxNGY2LCAweDYwMDQsIDB4YTA4NiwgMHgwMDhiLCAweDAxNDgsIDB4NjAwNywgMHgwMDhiLAotCTB4NjAwMywgMHgwMDBkLCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHgwODBjLAotCTB4OTc0MiwgMHgwODBjLCAweDk1OTYsIDB4MDU4MCwgMHgwODBjLCAweDJhZDksIDB4MDBkNiwgMHgwODBjLAotCTB4OTU5NiwgMHgwMTY4LCAweDYwMTAsIDB4MjA2OCwgMHg2ODM3LCAweDAxMDMsIDB4Njg0YiwgMHgwMDA2LAotCTB4Njg0NywgMHgwMDAwLCAweDY4NTAsIDB4YzBlZCwgMHg2ODUyLCAweDA4MGMsIDB4NTEwYywgMHgyYzY4LAotCTB4MDgwYywgMHg4MDIyLCAweDAxNTAsIDB4NjgxOCwgMHg2MDFhLCAweDA4MGMsIDB4OTk1NiwgMHgwMGM2LAotCTB4MmQ2MCwgMHgwODBjLCAweDk3NGUsIDB4MDBjZSwgMHgwMDA4LCAweDJkNjAsIDB4MDBkZSwgMHg2MDEzLAotCTB4MDAwMCwgMHg2MDFmLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLAotCTB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDAxMCwgMHgwODBjLCAweDk3NGUsIDB4MDAwNSwgMHg2MDAwLAotCTB4YTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwgMHgwMDBiLCAweDAwMDUsIDB4OTU3NiwgMHg5NTc2LAotCTB4OTU3NiwgMHg5NTc4LCAweDk1NzksIDB4OTU3NiwgMHg5NTc2LCAweDk1NzYsIDB4OTU3NiwgMHg5NTc2LAotCTB4OTU3NiwgMHg5NTc2LCAweDk1NzYsIDB4OTU3NiwgMHg5NTc2LCAweDk1NzYsIDB4MDgwYywgMHgxNGY2LAotCTB4MDAwNSwgMHgwODBjLCAweDdjYjgsIDB4MTkwYywgMHgxNGY2LCAweDYxMTAsIDB4MjE2OCwgMHg2ODRiLAotCTB4MDAwNiwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4YTI4NCwgMHgwMDA3LAotCTB4MTE1OCwgMHhhMjgyLCAweGI0MDAsIDB4MDI0MCwgMHgyMDAxLCAweGFkMTYsIDB4MjAwNCwgMHhhMjAyLAotCTB4MTIxOCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwgMHhhMDA2LCAweDBjZTgsIDB4MDAyNiwgMHg2MjEwLAotCTB4YTI5NCwgMHhmMDAwLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDAzNiwgMHgwMDA2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2MSwgMHhiNDAwLCAweDIwNzEsIDB4YWQwMCwgMHg3MzQ0LAotCTB4NzA2NCwgMHhhMzAyLCAweDEyYTgsIDB4NjAxYywgMHhhMjA2LCAweDExNjAsIDB4MDgwYywgMHg5OGUzLAotCTB4MDE0OCwgMHgwODBjLCAweDk3ODksIDB4MTExMCwgMHgwODBjLCAweDg1ZjMsIDB4MDBjNiwgMHgwODBjLAotCTB4ODA3OCwgMHgwMGNlLCAweGFjZTAsIDB4MDAxOCwgMHg3MDU4LCAweGFjMDIsIDB4MTIwOCwgMHgwYzM4LAotCTB4MDEyZSwgMHgwMDBlLCAweDAwM2UsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LAotCTB4MDAxNiwgMHhhMTg4LCAweGFlMzQsIDB4MjEwYywgMHg4MWZmLCAweDAxNzAsIDB4MjA2MSwgMHhiNDAwLAotCTB4MjA3MSwgMHhhZDAwLCAweDAwMTYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDEzOCwgMHg2MTFhLAotCTB4MDgwYywgMHgyYWQ5LCAweDA4MGMsIDB4ODA3OCwgMHhhMDA2LCAweDAwMTAsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDAxZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGM2LCAweDAwNTYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDVlLCAweDAxODAsIDB4NjYxMiwgMHg2NTFhLAotCTB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwMywgMHgyMDA5LCAweDAwNGIsIDB4MDgwYywgMHg4MGE3LAotCTB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDA1ZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwgMHgwY2QwLAotCTB4MDBjNiwgMHgwMDU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyYTAsIDB4MDBjNiwgMHgwODBjLAotCTB4ODAyMiwgMHgwMDVlLCAweDA1MDgsIDB4NjAxMywgMHgwMDAwLCAweDY1MWEsIDB4MDgwYywgMHg5OTU2LAotCTB4NjAxZiwgMHgwMDAzLCAweDAwYzYsIDB4MjU2MCwgMHgwODBjLCAweDRlY2YsIDB4MDBjZSwgMHgwODBjLAotCTB4NjhlNywgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDY4MWQsIDB4MmMwOCwgMHgwODBjLAotCTB4YTcxMiwgMHgwMDdlLCAweDIwMDksIDB4MDA0YywgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDEyZSwgMHgwMDVlLCAweDAwY2UsIDB4MDAwNSwgMHhhMDA2LCAweDBjZDAsIDB4MDBmNiwgMHgwMGM2LAotCTB4MDA0NiwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgyYzc4LCAweDAwY2UsIDB4MDE4MCwgMHg3ZTEyLAotCTB4MmMwMCwgMHg3ODFhLCAweDc4MWYsIDB4MDAwMywgMHgyMDIxLCAweDAwMDUsIDB4MDgwYywgMHg5NjgzLAotCTB4MmY2MCwgMHgyMDA5LCAweDAwNGQsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMDRlLAotCTB4MDBjZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGM2LCAweDAwNDYsIDB4MDBjNiwgMHgwODBjLAotCTB4ODAyMiwgMHgyYzc4LCAweDAwY2UsIDB4MDE3OCwgMHg3ZTEyLCAweDJjMDAsIDB4NzgxYSwgMHg3ODFmLAotCTB4MDAwMywgMHgyMDIxLCAweDAwMDUsIDB4MDQzOSwgMHgyZjYwLCAweDIwMDksIDB4MDA0ZSwgMHgwODBjLAotCTB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDA0ZSwgMHgwMGNlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LAotCTB4MDBjNiwgMHgwMDQ2LCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDJjNzgsIDB4MDBjZSwgMHgwMTc4LAotCTB4N2UxMiwgMHgyYzAwLCAweDc4MWEsIDB4NzgxZiwgMHgwMDAzLCAweDIwMjEsIDB4MDAwNCwgMHgwMDU5LAotCTB4MmY2MCwgMHgyMDA5LCAweDAwNTIsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMDRlLAotCTB4MDBjZSwgMHgwMGZlLCAweDAwMDUsIDB4MDA5NiwgMHgwMDc2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg0ZTcxLCAweDAxMTgsIDB4MjAwMSwgMHg5Njg4LCAweDAwMjgsIDB4MDgwYywgMHg0ZTQzLAotCTB4MDE1OCwgMHgyMDAxLCAweDk2OGUsIDB4MDAwNiwgMHhhMDBlLCAweDI0MDAsIDB4MDgwYywgMHg1MWRmLAotCTB4MDgwYywgMHg1MTBjLCAweDAwMGUsIDB4MDgwNywgMHgyNDE4LCAweDA4MGMsIDB4NmIxNSwgMHg2MmEwLAotCTB4MDA4NiwgMHgyMDQxLCAweDAwMDEsIDB4MjAzOSwgMHgwMDAxLCAweDI2MDgsIDB4MDgwYywgMHg2OTAwLAotCTB4MDA4ZSwgMHgwODBjLCAweDY4MWQsIDB4MmYwOCwgMHgyNjQ4LCAweDA4MGMsIDB4YTcxMiwgMHg2MTNjLAotCTB4ODFmZiwgMHgwOTBjLCAweDY5YTksIDB4MDEyZSwgMHgwMDdlLCAweDAwOWUsIDB4MDAwNSwgMHgwMGM2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwgMHgwMTg4LAotCTB4NjYwYSwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLAotCTB4MjAwOSwgMHgwMDFmLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLAotCTB4MDAwNSwgMHhhMDA2LCAweDBjZDgsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGM2LAotCTB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE4OCwgMHg2NjBhLCAweDYxMWEsIDB4MDgwYywgMHg5OTU2LAotCTB4NjAxZiwgMHgwMDA4LCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMjEsIDB4MDgwYywgMHg4MGE3LAotCTB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweGEwMDYsIDB4MGNkOCwgMHgwMGM2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwgMHgwMTg4LAotCTB4NjYwYSwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLAotCTB4MjAwOSwgMHgwMDNkLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLAotCTB4MDAwNSwgMHhhMDA2LCAweDBjZDgsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGM2LAotCTB4MDgwYywgMHg5ODA3LCAweDAwMWUsIDB4MDE4MCwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwgMHg2MDFmLAotCTB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LAotCTB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHhhMDA2LCAweDBjZDgsIDB4MDBjNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE4OCwgMHg2NjBhLAotCTB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LAotCTB4MDA0NCwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LAotCTB4YTAwNiwgMHgwY2Q4LCAweDAwMjYsIDB4MDBkNiwgMHg2MjE4LCAweDIyNjgsIDB4NmEzYywgMHg4MmZmLAotCTB4MDExMCwgMHg4MjExLCAweDZhM2UsIDB4MDBkZSwgMHgwMDJlLCAweDAwMDUsIDB4MDAwNiwgMHg2MDAwLAotCTB4YTA4NiwgMHgwMDAwLCAweDAxOTAsIDB4NjAxMywgMHgwMDAwLCAweDYwMWYsIDB4MDAwNywgMHgyMDAxLAotCTB4YWZhMywgMHgyMDA0LCAweDAwMDYsIDB4YTA4MiwgMHgwMDUxLCAweDAwMGUsIDB4MDIwOCwgMHg4MDA0LAotCTB4NjAxNiwgMHgwODBjLCAweGFiYjQsIDB4NjAzZiwgMHgwMDAwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDY2LAotCTB4MDBjNiwgMHgwMGQ2LCAweDIwMzEsIDB4YWQ1MiwgMHgyNjM0LCAweGQ2ZTQsIDB4MDEyOCwgMHg2NjE4LAotCTB4MjY2MCwgMHg2ZTQ4LCAweDA4MGMsIDB4NGRmYywgMHgwMGRlLCAweDAwY2UsIDB4MDA2ZSwgMHgwMDA1LAotCTB4MDAwNiwgMHgwMDE2LCAweDYwMDQsIDB4YTA4ZSwgMHgwMDAyLCAweDAxNDAsIDB4YTA4ZSwgMHgwMDAzLAotCTB4MDEyOCwgMHhhMDhlLCAweDAwMDQsIDB4MDExMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAxZSwgMHgwMDBlLAotCTB4MDAwNSwgMHgwMDA2LCAweDAwZDYsIDB4NjAxMCwgMHhhMDZkLCAweDAxNDgsIDB4NjgzNCwgMHhhMDg2LAotCTB4MDEzOSwgMHgwMTM4LCAweDY4MzgsIDB4ZDBmYywgMHgwMTEwLCAweGEwMDYsIDB4MDAxMCwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMGRlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwgMHgwMTkwLCAweDYxMWEsIDB4MDgwYywgMHg5OTU2LAotCTB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgwODBjLCAweDJhZDksIDB4MjAwOSwgMHgwMDI4LAotCTB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHhhMDA2LAotCTB4MGNkOCwgMHhhMTg2LCAweDAwMTUsIDB4MTE3OCwgMHgyMDExLCAweGFkMjAsIDB4MjIwNCwgMHhhMDg2LAotCTB4MDA3NCwgMHgxMTQ4LCAweDA4MGMsIDB4ODk0MywgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDI5LAotCTB4MDgwYywgMHg2N2VlLCAweDAwMjAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LAotCTB4YTE4NiwgMHgwMDE2LCAweDExMjgsIDB4MjAwMSwgMHgwMDA0LCAweDA4MGMsIDB4NGMzMCwgMHgwMGU4LAotCTB4YTE4NiwgMHgwMDE1LCAweDExZTgsIDB4MjAxMSwgMHhhZDIwLCAweDIyMDQsIDB4YTA4NiwgMHgwMDE0LAotCTB4MTFiOCwgMHgwMGQ2LCAweDYwMTgsIDB4MjA2OCwgMHgwODBjLCAweDRkNzIsIDB4MDBkZSwgMHgwODBjLAotCTB4ODlmNywgMHgxMTcwLCAweDAwZDYsIDB4NjAxOCwgMHgyMDY4LCAweDY4OTAsIDB4MDBkZSwgMHhhMDA1LAotCTB4MDEzOCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg0YzMwLCAweDA4MGMsIDB4ODFmNiwgMHgwMDIwLAotCTB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDY4NDgsIDB4YTA4NiwgMHgwMDA1LAotCTB4MTEwOCwgMHgwMDA5LCAweDAwMDUsIDB4Njg1MCwgMHhjMGFkLCAweDY4NTIsIDB4MDAwNSwgMHgwMGU2LAotCTB4MDEyNiwgMHgyMDcxLCAweGFkMDAsIDB4MjA5MSwgMHg4MDAwLCAweDc1NDQsIDB4YTU4MiwgMHgwMDAxLAotCTB4MDYwOCwgMHg3MDQ4LCAweDIwNjAsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDE0OCwgMHhhY2UwLAotCTB4MDAxOCwgMHg3MDU4LCAweGFjMDIsIDB4MTIwOCwgMHgwY2IwLCAweDIwNjEsIDB4YjQwMCwgMHgwYzk4LAotCTB4NjAwMywgMHgwMDA4LCAweDg1MjksIDB4NzU0NiwgMHhhY2E4LCAweDAwMTgsIDB4NzA1OCwgMHhhNTAyLAotCTB4MTIzMCwgMHg3NTRhLCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDRiLAotCTB4YjQwMCwgMHgwY2MwLCAweGEwMDYsIDB4MGNjMCwgMHgwMGU2LCAweDIwNzEsIDB4YjI4YywgMHg3MDE0LAotCTB4ZDBlNCwgMHgwMTUwLCAweDYwMTMsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDUwLAotCTB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwMGVlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGY2LAotCTB4MmM3OCwgMHgwODBjLCAweDUwMjksIDB4MDBmZSwgMHgwMTIwLCAweDYwMWMsIDB4YTA4NCwgMHgwMDBmLAotCTB4MDAxMywgMHgwMGNlLCAweDAwMDUsIDB4OTM2OSwgMHg5ODVlLCAweDk4NjEsIDB4OTg2NCwgMHhhOWE3LAotCTB4YTljMiwgMHhhOWM1LCAweDkzNjksIDB4OTM2OSwgMHgwODBjLCAweDE0ZjYsIDB4ZTAwMCwgMHhlMDAwLAotCTB4MDAwNSwgMHhlMDAwLCAweGUwMDAsIDB4MDAwNSwgMHgwMDA5LCAweDAwMDUsIDB4MDBmNiwgMHgyYzc4LAotCTB4MDgwYywgMHg1MDI5LCAweDA1MzgsIDB4MDgwYywgMHg4MDIyLCAweDExMjgsIDB4MjAwMSwgMHhhZmE1LAotCTB4MjAwNCwgMHg3ODNlLCAweDAwZjgsIDB4NzgxOCwgMHg2MDFhLCAweDA4MGMsIDB4OTk1NiwgMHg3ODFjLAotCTB4YTA4NiwgMHgwMDAzLCAweDAxMjgsIDB4NzgwOCwgMHg2MDM2LCAweDJmMDAsIDB4NjAzYSwgMHgwMDIwLAotCTB4NzgwOCwgMHg2MDNhLCAweDJmMDAsIDB4NjAzNiwgMHg2MDJhLCAweDYwMWYsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDAzNSwgMHg2MDAzLCAweDAwMDEsIDB4Nzk1MCwgMHg2MTUyLCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLAotCTB4NmM1MCwgMHgyZjYwLCAweDAwZmUsIDB4MDAwNSwgMHgwMDE2LCAweDAwZjYsIDB4NjgyYywgMHg2MDMyLAotCTB4YTA4ZSwgMHgwMDAxLCAweDAxMzgsIDB4YTA4NiwgMHgwMDA1LCAweDAxNDAsIDB4YTAwNiwgMHg2MDJhLAotCTB4NjAyZSwgMHgwMGEwLCAweDY4MjAsIDB4YzBmNCwgMHhjMGQ1LCAweDY4MjIsIDB4NjgxMCwgMHgyMDc4LAotCTB4Nzg3YywgMHg2OTM4LCAweGExMDIsIDB4Nzg4MCwgMHg2OTM0LCAweGExMDMsIDB4MWU3OCwgMHg2ODM0LAotCTB4NjAyYSwgMHg2ODM4LCAweGEwODQsIDB4ZmZmYywgMHg2ODNhLCAweDYwMmUsIDB4MmQwMCwgMHg2MDM2LAotCTB4NjgwOCwgMHg2MDNhLCAweDY5MTgsIDB4NjExYSwgMHg2OTUwLCAweDYxNTIsIDB4NjAxZiwgMHgwMDAxLAotCTB4NjAwNywgMHgwMDM5LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4NjgwMywgMHgwMDAyLAotCTB4MDBmZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4NTAyOSwgMHgxMTE4LAotCTB4YTA4NSwgMHgwMDAxLCAweDAwNzAsIDB4NjAyMCwgMHhkMGY0LCAweDExNTAsIDB4YzBmNSwgMHg2MDIyLAotCTB4NjAxMCwgMHgyMDc4LCAweDc4MjgsIDB4NjAzYSwgMHg3ODJjLCAweDYwMzYsIDB4MDgwYywgMHgxOTBiLAotCTB4YTAwNiwgMHgwMGZlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDYwMDQsIDB4YTA4ZSwgMHgwMDM0LAotCTB4MDFiOCwgMHhhMDhlLCAweDAwMzUsIDB4MDFhMCwgMHhhMDhlLCAweDAwMzYsIDB4MDE4OCwgMHhhMDhlLAotCTB4MDAzNywgMHgwMTcwLCAweGEwOGUsIDB4MDAzOCwgMHgwMTU4LCAweGEwOGUsIDB4MDAzOSwgMHgwMTQwLAotCTB4YTA4ZSwgMHgwMDNhLCAweDAxMjgsIDB4YTA4ZSwgMHgwMDNiLCAweDAxMTAsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGU2LAotCTB4MjAwMSwgMHhhZjlmLCAweDIwMGMsIDB4ODAwMCwgMHgyMDE0LCAweDIwMDEsIDB4MDAzMiwgMHgwODBjLAotCTB4NjY2NSwgMHgyMDAxLCAweGFmYTMsIDB4ODJmZiwgMHgxMTEwLCAweDIwMTEsIDB4MDAwMiwgMHgyMjAyLAotCTB4MjAwMSwgMHhhZmExLCAweDIwMGMsIDB4ODAwMCwgMHgyMDE0LCAweDIwNzEsIDB4YWY4ZCwgMHg3MTFhLAotCTB4NzIxZSwgMHgyMDAxLCAweDAwNjQsIDB4MDgwYywgMHg2NjY1LCAweDIwMDEsIDB4YWZhNCwgMHg4MmZmLAotCTB4MTExMCwgMHgyMDExLCAweDAwMDIsIDB4MjIwMiwgMHgyMDA5LCAweGFmYTUsIDB4YTI4MCwgMHgwMDBhLAotCTB4MjAwYSwgMHgwMGVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LAotCTB4MDBlNiwgMHgyMDAxLCAweGFmYTMsIDB4MjAwMywgMHgwMDI4LCAweDIwMDEsIDB4YWZhNCwgMHgyMDAzLAotCTB4MDAxNCwgMHgyMDcxLCAweGFmOGQsIDB4NzAxYiwgMHgwMDAwLCAweDcwMWYsIDB4MDdkMCwgMHgyMDAxLAotCTB4YWZhNSwgMHgyMDAzLCAweDAwMWUsIDB4MDBlZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBkNiwgMHg2MDU0LAotCTB4YTA2ZCwgMHgwMTEwLCAweDA4MGMsIDB4MTVmMCwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNSwgMHgwMGM2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwgMHgwMTc4LAotCTB4NjExYSwgMHgwY2ExLCAweDYwMWYsIDB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwgMHgwMDMzLAotCTB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHhhMDA2LAotCTB4MGNkOCwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweGFkMDAsIDB4YTE4NiwgMHgwMDE1LAotCTB4MTUwMCwgMHg3MDgwLCAweGEwODYsIDB4MDAxOCwgMHgxMWUwLCAweDYwMTAsIDB4MjA2OCwgMHg2YTNjLAotCTB4ZDJlNCwgMHgxMTYwLCAweDJjNzgsIDB4MDgwYywgMHg2ZTA1LCAweDAxZDgsIDB4NzA2YywgMHg2YTUwLAotCTB4YTIwNiwgMHgxMTYwLCAweDcwNzAsIDB4NmE1NCwgMHhhMjA2LCAweDExNDAsIDB4NjIxOCwgMHhhMjkwLAotCTB4MDAyOCwgMHgyMjE0LCAweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweDJiMWUsIDB4MDgwYywgMHg4MWY2LAotCTB4MDAyMCwgMHgwODBjLCAweDg1ZjMsIDB4MDgwYywgMHg4MDc4LCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLAotCTB4MDAwNSwgMHg3MDUwLCAweDZhNTQsIDB4YTIwNiwgMHgwZDQ4LCAweDBjODAsIDB4MDBjNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE4MCwgMHg2MTFhLAotCTB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwgMHgwMDQzLAotCTB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHhhMDA2LAotCTB4MGNkOCwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweGFkMDAsIDB4YTE4NiwgMHgwMDE1LAotCTB4MTFjMCwgMHg3MDgwLCAweGEwODYsIDB4MDAwNCwgMHgxMWEwLCAweDYwMTAsIDB4YTBlOCwgMHgwMDBmLAotCTB4MmM3OCwgMHgwODBjLCAweDZlMDUsIDB4MDFhOCwgMHg3MDZjLCAweDZhMDgsIDB4YTIwNiwgMHgxMTMwLAotCTB4NzA3MCwgMHg2YTBjLCAweGEyMDYsIDB4MTExMCwgMHgwODBjLCAweDJhZDksIDB4MDgwYywgMHg4MWY2LAotCTB4MDAyMCwgMHgwODBjLCAweDg1ZjMsIDB4MDgwYywgMHg4MDc4LCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLAotCTB4MDAwNSwgMHg3MDUwLCAweDZhMGMsIDB4YTIwNiwgMHgwZDc4LCAweDBjODAsIDB4MDAxNiwgMHgwMDI2LAotCTB4Njg0YywgMHhkMGFjLCAweDAxNzgsIDB4NjkxNCwgMHg2YTEwLCAweDIxMDAsIDB4YTIwNSwgMHgwMTUwLAotCTB4Njg2MCwgMHhhMTA2LCAweDExMTgsIDB4Njg1YywgMHhhMjA2LCAweDAxMjAsIDB4Njk2MiwgMHg2YTVlLAotCTB4YTA4NSwgMHgwMDAxLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHg2MzEwLAotCTB4MjM2OCwgMHg2ODRhLCAweDY5NTIsIDB4YTI5ZSwgMHg0MDAwLCAweDExODgsIDB4MDBjNiwgMHg2MzE4LAotCTB4MjM2MCwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHg0ZjZlLCAweDExMDgsIDB4YzE4NSwgMHg2MDAwLAotCTB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4NmE2NiwgMHg2OTZhLCAweDAwY2UsIDB4MDA4MCwgMHg2YTY2LAotCTB4MzkxOCwgMHhhMzk4LCAweDAwMDYsIDB4MjMxYywgMHg2ODZiLCAweDAwMDQsIDB4NmI3MiwgMHgwMGM2LAotCTB4NjMxOCwgMHgyMzYwLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDY4NmUsIDB4MDBjZSwgMHgwODBjLAotCTB4NTEwYywgMHgwMDNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGM2LCAweDAwMjYsIDB4MDAxNiwgMHhhMTg2LAotCTB4MDAzNSwgMHgwMTEwLCAweDZhMzQsIDB4MDAwOCwgMHg2YTI4LCAweDA4MGMsIDB4OTU4NiwgMHgwMWYwLAotCTB4MjI2MCwgMHg2MTFjLCAweGExODYsIDB4MDAwMywgMHgwMTE4LCAweGExODYsIDB4MDAwNiwgMHgxMTkwLAotCTB4NjgzNCwgMHhhMjA2LCAweDAxNDAsIDB4NjgzOCwgMHhhMjA2LCAweDExNjAsIDB4NjEwOCwgMHg2ODM0LAotCTB4YTEwNiwgMHgxMTQwLCAweDAwMjAsIDB4NjAwOCwgMHg2OTM4LCAweGExMDYsIDB4MTExOCwgMHg2MDE4LAotCTB4NjkxOCwgMHhhMTA2LCAweDAwMWUsIDB4MDAyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTA4NSwgMHgwMDAxLAotCTB4MGNjOCwgMHgwMDY2LCAweDYwMDAsIDB4YTBiMiwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwgMHgwMDEzLAotCTB4MDA2ZSwgMHgwMDA1LCAweDlhN2EsIDB4OWVmZiwgMHhhMDI3LCAweDlhN2EsIDB4OWE3YSwgMHg5YTdhLAotCTB4OWE3YSwgMHg5YTdhLCAweDlhYjIsIDB4YTBhMywgMHg5YTdhLCAweDlhN2EsIDB4OWE3YSwgMHg5YTdhLAotCTB4OWE3YSwgMHg5YTdhLCAweDA4MGMsIDB4MTRmNiwgMHgwMDY2LCAweDYwMDAsIDB4YTBiMiwgMHgwMDEwLAotCTB4MWEwYywgMHgxNGY2LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LCAweDlhOTUsIDB4YTRmZCwgMHg5YTk1LAotCTB4OWE5NSwgMHg5YTk1LCAweDlhOTUsIDB4OWE5NSwgMHg5YTk1LCAweGE0YzEsIDB4YTU0NSwgMHg5YTk1LAotCTB4YWFlYSwgMHhhYjFhLCAweGFhZWEsIDB4YWIxYSwgMHg5YTk1LCAweDA4MGMsIDB4MTRmNiwgMHgwMDY2LAotCTB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MWEwYywgMHgxNGY2LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LAotCTB4OWFiMCwgMHhhMWQ4LCAweGEyOTUsIDB4YTJjMiwgMHhhMzQ2LCAweDlhYjAsIDB4YTQzMywgMHhhM2RlLAotCTB4YTBhZiwgMHhhNDk3LCAweGE0YWMsIDB4OWFiMCwgMHg5YWIwLCAweDlhYjAsIDB4OWFiMCwgMHg5YWIwLAotCTB4MDgwYywgMHgxNGY2LCAweGExYjIsIDB4MDA4MCwgMHgxYTBjLCAweDE0ZjYsIDB4MjEwMCwgMHhhMWIyLAotCTB4MDA0MCwgMHgxYTA0LCAweDllNzksIDB4MDAwMiwgMHg5YWZjLCAweDljYWIsIDB4OWFmYywgMHg5YWZjLAotCTB4OWFmYywgMHg5Y2IyLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLAotCTB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLAotCTB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmZSwgMHg5YjVhLCAweDliNjUsIDB4OWJhNiwgMHg5YmMwLAotCTB4OWMzZSwgMHg5YzljLCAweDlhZmMsIDB4OWFmYywgMHg5Y2I1LCAweDlhZmMsIDB4OWFmYywgMHg5Y2M0LAotCTB4OWNjYiwgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWQ0MiwgMHg5YWZjLAotCTB4OWFmYywgMHg5ZDRkLCAweDlhZmMsIDB4OWFmYywgMHg5ZDE4LCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLAotCTB4OWQ2MSwgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5ZGQ1LCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLAotCTB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWU0MCwgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg1MDJkLAotCTB4MTE0MCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDksIDB4YTA4NiwgMHgwMDA4LAotCTB4MTE0MCwgMHg2MDA3LCAweDAwMDksIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MDAwMCwgMHgwODA0LAotCTB4OWNhNiwgMHgwODBjLCAweDUwMWQsIDB4MDBlNiwgMHgwMGM2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LAotCTB4NjIxOCwgMHgyMjcwLCAweDcyYTAsIDB4MDAyNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg2OGU3LAotCTB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDJjMDgsIDB4MDgwYywgMHhhNzEyLAotCTB4MDA3ZSwgMHgwMDFlLCAweDJlNjAsIDB4MDgwYywgMHg0ZWNmLCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLAotCTB4MDBjZSwgMHgwMGVlLCAweDY2MTgsIDB4MDBjNiwgMHgyNjYwLCAweDA4MGMsIDB4NGNlYiwgMHgwMGNlLAotCTB4YTZiMCwgMHgwMDAxLCAweDI2MzQsIDB4YTY4NCwgMHgwMGZmLCAweGEwODIsIDB4MDAwNiwgMHgwMjc4LAotCTB4MDgwYywgMHhhNjU2LCAweDE5MDQsIDB4OWJhMCwgMHgwODBjLCAweGE1ZjYsIDB4MTEyMCwgMHg2MDA3LAotCTB4MDAwOCwgMHgwODA0LCAweDljYTYsIDB4NjAwNywgMHgwMDA5LCAweDA4MDQsIDB4OWNhNiwgMHgwODBjLAotCTB4YTgwMSwgMHgwMTI4LCAweDA4MGMsIDB4YTY1NiwgMHgwZDc4LCAweDA4MDQsIDB4OWJhMCwgMHg2MDEzLAotCTB4MTkwMCwgMHgwYzg4LCAweDYxMDYsIDB4MDgwYywgMHhhNWE2LCAweDYwMDcsIDB4MDAwNiwgMHgwODA0LAotCTB4OWNhNiwgMHg2MDA3LCAweDAwMDcsIDB4MDgwNCwgMHg5Y2E2LCAweDA4MGMsIDB4YWI0ZSwgMHgxOTA0LAotCTB4OWU3NiwgMHgwMGQ2LCAweDY2MTgsIDB4MjY2OCwgMHg2ZTA0LCAweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LAotCTB4YTY4NiwgMHgwMDA2LCAweDAxODgsIDB4YTY4NiwgMHgwMDA0LCAweDAxNzAsIDB4NmUwNCwgMHhhNmI0LAotCTB4MDBmZiwgMHhhNjg2LCAweDAwMDYsIDB4MDE0MCwgMHhhNjg2LCAweDAwMDQsIDB4MDEyOCwgMHhhNjg2LAotCTB4MDAwNSwgMHgwMTEwLCAweDAwZGUsIDB4MDBlMCwgMHgwODBjLCAweGE2YjQsIDB4MTFhMCwgMHhhNjg2LAotCTB4MDAwNiwgMHgxMTUwLCAweDAwMjYsIDB4NjIxOCwgMHhhMjkwLCAweDAwMjgsIDB4MjIxNCwgMHgyMDA5LAotCTB4MDAwMCwgMHgwODBjLCAweDJiMWUsIDB4MDAyZSwgMHgwODBjLCAweDRkNzIsIDB4NjAwNywgMHgwMDBhLAotCTB4MDBkZSwgMHgwODA0LCAweDljYTYsIDB4NjAwNywgMHgwMDBiLCAweDAwZGUsIDB4MDgwNCwgMHg5Y2E2LAotCTB4MDgwYywgMHgyYWQ5LCAweDYwMDcsIDB4MDAwMSwgMHgwODA0LCAweDljYTYsIDB4MDgwYywgMHhhYjRlLAotCTB4MTkwNCwgMHg5ZTc2LCAweDY2MTgsIDB4MDBkNiwgMHgyNjY4LCAweDZlMDQsIDB4MDBkZSwgMHhhNjg2LAotCTB4MDcwNywgMHgwZDcwLCAweDAwMjYsIDB4NjIxOCwgMHhhMjkwLCAweDAwMjgsIDB4MjIxNCwgMHgyMDA5LAotCTB4MDAwMCwgMHgwODBjLCAweDJiMWUsIDB4MDAyZSwgMHg2MDA3LCAweDAwMGMsIDB4MDgwNCwgMHg5Y2E2LAotCTB4MDgwYywgMHg1MDJkLCAweDExNDAsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4YTA4NCwgMHgwMDA5LAotCTB4YTA4NiwgMHgwMDA4LCAweDExMTAsIDB4MDgwNCwgMHg5YjA5LCAweDA4MGMsIDB4NTAxZCwgMHg2NjE4LAotCTB4YTZiMCwgMHgwMDAxLCAweDI2MzQsIDB4YTY4NCwgMHgwMGZmLCAweGEwODIsIDB4MDAwNiwgMHgwNmU4LAotCTB4MTEzOCwgMHgwMDI2LCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDRjNWQsIDB4MDAyZSwgMHgwMDUwLAotCTB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwgMHgwMDA0LCAweDAxMjAsIDB4YTY4NiwgMHgwMDA2LAotCTB4MTkwNCwgMHg5YmEwLCAweDA4MGMsIDB4YTZjMSwgMHgxMTIwLCAweDYwMDcsIDB4MDAwZSwgMHgwODA0LAotCTB4OWNhNiwgMHgwMDQ2LCAweDY0MTgsIDB4YTRhMCwgMHgwMDI4LCAweDI0MjQsIDB4YTRhNCwgMHgwMGZmLAotCTB4ODQyNywgMHgwMDQ2LCAweDA4MGMsIDB4MmFkOSwgMHgwMDRlLCAweDAwMTYsIDB4YTAwNiwgMHgyMDA5LAotCTB4YWQ1MiwgMHgyMTBjLCAweGQxYTQsIDB4MDE1OCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhhOTZjLAotCTB4NjAxOCwgMHgwMGQ2LCAweDIwNjgsIDB4NjgwMCwgMHhjMGU1LCAweDY4MDIsIDB4MDBkZSwgMHgwMDFlLAotCTB4MDA0ZSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg5Y2E2LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4NGMxZSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDIwYTksIDB4MDAwNCwgMHgyMDE5LAotCTB4YWQwNSwgMHgyMDExLCAweGIyOTAsIDB4MDgwYywgMHg4YTdjLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDE1ZSwgMHhhMDA1LCAweDAxNjgsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4MiwgMHgwMDA0LAotCTB4MGEwNCwgMHg5YmEwLCAweGE2ODIsIDB4MDAwNywgMHgwYTA0LCAweDliZWEsIDB4MDgwNCwgMHg5YmEwLAotCTB4NjAxMywgMHgxOTAwLCAweDYwMDcsIDB4MDAwOSwgMHgwODA0LCAweDljYTYsIDB4MDgwYywgMHg1MDJkLAotCTB4MTE0MCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDksIDB4YTA4NiwgMHgwMDA4LAotCTB4MTExMCwgMHgwODA0LCAweDliMDksIDB4MDgwYywgMHg1MDFkLCAweDY2MTgsIDB4YTZiMCwgMHgwMDAxLAotCTB4MjYzNCwgMHhhNjg0LCAweDAwZmYsIDB4YTA4MiwgMHgwMDA2LCAweDA2YjAsIDB4YTZiNCwgMHhmZjAwLAotCTB4ODYzNywgMHhhNjg2LCAweDAwMDQsIDB4MDEyMCwgMHhhNjg2LCAweDAwMDYsIDB4MTkwNCwgMHg5YmEwLAotCTB4MDgwYywgMHhhNmU5LCAweDExMzAsIDB4MDgwYywgMHhhNWY2LCAweDExMTgsIDB4NjAwNywgMHgwMDEwLAotCTB4MDRlOCwgMHgwMDQ2LCAweDY0MTgsIDB4YTRhMCwgMHgwMDI4LCAweDI0MjQsIDB4YTRhNCwgMHgwMGZmLAotCTB4ODQyNywgMHgwMDQ2LCAweDA4MGMsIDB4MmFkOSwgMHgwMDRlLCAweDAwMTYsIDB4YTAwNiwgMHgyMDA5LAotCTB4YWQ1MiwgMHgyMTBjLCAweGQxYTQsIDB4MDE1OCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhhOTZjLAotCTB4NjAxOCwgMHgwMGQ2LCAweDIwNjgsIDB4NjgwMCwgMHhjMGU1LCAweDY4MDIsIDB4MDBkZSwgMHgwMDFlLAotCTB4MDA0ZSwgMHg2MDA3LCAweDAwMDEsIDB4MDBkMCwgMHgwODBjLCAweGE4MDEsIDB4MDE0MCwgMHhhNmI0LAotCTB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNiwgMHgwOTU4LCAweDA4MDQsIDB4OWJhMCwgMHg2MDEzLAotCTB4MTkwMCwgMHg2MDA3LCAweDAwMDksIDB4MDA1MCwgMHgwODBjLCAweGFiNGUsIDB4MTkwNCwgMHg5ZTc2LAotCTB4MDgwYywgMHg5ZTk4LCAweDE5MDQsIDB4OWJhMCwgMHg2MDA3LCAweDAwMTIsIDB4NjAwMywgMHgwMDAxLAotCTB4MDgwYywgMHg2N2VlLCAweDAwMDUsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLAotCTB4NjdlZSwgMHgwY2MwLCAweDYwMDcsIDB4MDAwNSwgMHgwY2MwLCAweDA4MGMsIDB4YWI0ZSwgMHgxOTA0LAotCTB4OWU3NiwgMHgwODBjLCAweDllOTgsIDB4MTkwNCwgMHg5YmEwLCAweDYwMDcsIDB4MDAyMCwgMHg2MDAzLAotCTB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDAwNSwgMHg2MDA3LCAweDAwMjMsIDB4NjAwMywgMHgwMDAxLAotCTB4MDgwYywgMHg2N2VlLCAweDAwMDUsIDB4MDgwYywgMHhhYjRlLCAweDE5MDQsIDB4OWU3NiwgMHgwODBjLAotCTB4OWU5OCwgMHgxOTA0LCAweDliYTAsIDB4MDAxNiwgMHgwMDI2LCAweDIwMTEsIDB4YjI5MSwgMHgyMjE0LAotCTB4YTI4NiwgMHhmZmZmLCAweDAxOTAsIDB4MmMwOCwgMHgwODBjLCAweDk1ODYsIDB4MDFkOCwgMHgyMjYwLAotCTB4MjAxMSwgMHhiMjkwLCAweDIyMTQsIDB4NjAwOCwgMHhhMjA2LCAweDExYTAsIDB4NjAxOCwgMHhhMTkwLAotCTB4MDAwNiwgMHgyMjE0LCAweGEyMDYsIDB4MDFlMCwgMHgwMDY4LCAweDIwMTEsIDB4YjI5MCwgMHgyMjE0LAotCTB4MmMwOCwgMHgwODBjLCAweGE5NDAsIDB4MTFhMCwgMHgyMDExLCAweGIyOTEsIDB4MjIxNCwgMHhhMjg2LAotCTB4ZmZmZiwgMHgwMWEwLCAweDIxNjAsIDB4NjAwNywgMHgwMDI2LCAweDYwMTMsIDB4MTcwMCwgMHgyMDExLAotCTB4YjI4OSwgMHgyMjE0LCAweGEyOTYsIDB4ZmZmZiwgMHgxMTYwLCAweDYwMDcsIDB4MDAyNSwgMHgwMDQ4LAotCTB4NjAxYywgMHhhMDg2LCAweDAwMDcsIDB4MWQ3MCwgMHgwODBjLCAweDgwNzgsIDB4MjE2MCwgMHg2MDA3LAotCTB4MDAyNSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NGMxZSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LAotCTB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4YWQwNSwgMHgyMDExLCAweGIyOTYsIDB4MDgwYywgMHg4YTdjLAotCTB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHgwMTIwLCAweDYwMDcsIDB4MDAzMSwgMHgwODA0LAotCTB4OWNhNiwgMHgwODBjLCAweDg3YmQsIDB4MDgwYywgMHg1NzRmLCAweDExNTgsIDB4MDAwNiwgMHgwMDI2LAotCTB4MDAzNiwgMHgwODBjLCAweDU3NmIsIDB4MDExMCwgMHgwODBjLCAweDU3MjYsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAwZSwgMHgwMDA1LCAweDYxMDYsIDB4MDgwYywgMHg5ZWI0LCAweDYwMDcsIDB4MDAyYiwgMHgwODA0LAotCTB4OWNhNiwgMHg2MDA3LCAweDAwMmMsIDB4MDgwNCwgMHg5Y2E2LCAweDA4MGMsIDB4YWI0ZSwgMHgxOTA0LAotCTB4OWU3NiwgMHgwODBjLCAweDllOTgsIDB4MTkwNCwgMHg5YmEwLCAweDYxMDYsIDB4MDgwYywgMHg5ZWI4LAotCTB4MTEyMCwgMHg2MDA3LCAweDAwMmUsIDB4MDgwNCwgMHg5Y2E2LCAweDYwMDcsIDB4MDAyZiwgMHgwODA0LAotCTB4OWNhNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHg2MDE4LCAweGEwODAsIDB4MDAwMSwgMHgyMDBjLAotCTB4YTE4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMTU4LCAweGExODQsIDB4ZmYwMCwgMHg4MDA3LAotCTB4YTA4NiwgMHgwMDA2LCAweDAxMjgsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDgwNCwgMHg5Y2FiLAotCTB4MjAwMSwgMHhhZDcxLCAweDIwMDQsIDB4ZDBlNCwgMHgwOTA0LCAweDlkZDIsIDB4MjA3MSwgMHhiMjhjLAotCTB4NzAxMCwgMHg2MDM2LCAweDcwMTQsIDB4NjAzYSwgMHg3MTA4LCAweDcyMGMsIDB4MjAwMSwgMHhhZDUyLAotCTB4MjAwNCwgMHhkMGE0LCAweDAxNDAsIDB4NjAxOCwgMHgyMDY4LCAweDY4MTAsIDB4YTEwNiwgMHgxMTE4LAotCTB4NjgxNCwgMHhhMjA2LCAweDAxZjgsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhYywgMHgxNTgwLAotCTB4MjA2OSwgMHhhZDAwLCAweDY4NzAsIDB4YTIwNiwgMHgxNTU4LCAweDY4NmMsIDB4YTEwNiwgMHgxNTQwLAotCTB4NzIxMCwgMHgwODBjLCAweDk1ODYsIDB4MDU0OCwgMHgwODBjLCAweGE5ZDQsIDB4MDUzMCwgMHg2MjJhLAotCTB4NjAwNywgMHgwMDM2LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MDBjZSwgMHgwMGRlLAotCTB4MDBlZSwgMHgwMDA1LCAweDcyMTQsIDB4YTI4NiwgMHhmZmZmLCAweDAxNTAsIDB4MDgwYywgMHg5NTg2LAotCTB4MDFhMCwgMHhhMjgwLCAweDAwMDIsIDB4MjAwNCwgMHg3MTEwLCAweGExMDYsIDB4MTE3MCwgMHgwYzA4LAotCTB4NzIxMCwgMHgyYzA4LCAweDA4MGMsIDB4YTk0MCwgMHgyYzEwLCAweDIxNjAsIDB4MDEzMCwgMHgwOGM4LAotCTB4NjAwNywgMHgwMDM3LCAweDYwMTMsIDB4MTUwMCwgMHgwOGU4LCAweDYwMDcsIDB4MDAzNywgMHg2MDEzLAotCTB4MTcwMCwgMHgwOGMwLCAweDYwMDcsIDB4MDAxMiwgMHgwOGE4LCAweDYwMTgsIDB4YTA4MCwgMHgwMDAxLAotCTB4MjAwNCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywgMHhhMDg2LCAweDAwMDYsIDB4MTkwNCwgMHg5Y2FiLAotCTB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MjAwMSwgMHhhZDcxLCAweDIwMDQsIDB4ZDBlNCwgMHgwOTA0LAotCTB4OWUzOCwgMHgyMDY5LCAweGFkMDAsIDB4MjA3MSwgMHhiMjhjLCAweDcwMDgsIDB4NjAzNiwgMHg3MjBjLAotCTB4NjIzYSwgMHhhMjg2LCAweGZmZmYsIDB4MTE0MCwgMHg3MjA4LCAweDAwYzYsIDB4MmMwOCwgMHgwODBjLAotCTB4YTk0MCwgMHgyYzEwLCAweDAwY2UsIDB4MDU4OCwgMHgwODBjLCAweDk1ODYsIDB4MDU3MCwgMHgwMGM2LAotCTB4MDAyNiwgMHgyMjYwLCAweDA4MGMsIDB4OTI4ZiwgMHgwMDJlLCAweDAwY2UsIDB4NzExOCwgMHhhMThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweGExODYsIDB4MDAwMSwgMHgwMTU4LCAweGExODYsIDB4MDAwNSwgMHgwMTE4LAotCTB4YTE4NiwgMHgwMDA3LCAweDExNzgsIDB4YTI4MCwgMHgwMDA0LCAweDIwMDQsIDB4YTAwNSwgMHgwMTUwLAotCTB4MDA1NiwgMHg3NTEwLCAweDc2MTQsIDB4MDgwYywgMHhhOWViLCAweDAwNWUsIDB4MDBjZSwgMHgwMGRlLAotCTB4MDBlZSwgMHgwMDA1LCAweDYwMDcsIDB4MDAzYiwgMHg2MDJiLCAweDAwMDksIDB4NjAxMywgMHgyYTAwLAotCTB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwgMHgwYzg4LCAweDYwMDcsIDB4MDAzYiwgMHg2MDJiLAotCTB4MDAwOSwgMHg2MDEzLCAweDE3MDAsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwgMHgwYzMwLAotCTB4NjAwNywgMHgwMDNiLCAweDYwMmIsIDB4MDAwYiwgMHg2MDEzLCAweDAwMDAsIDB4MDgwNCwgMHg5ZGFhLAotCTB4MDBlNiwgMHgwMDI2LCAweDA4MGMsIDB4NTAyZCwgMHgwNTU4LCAweDA4MGMsIDB4NTAxZCwgMHgwODBjLAotCTB4YWJjNSwgMHgxNTIwLCAweDIwNzEsIDB4YWQwMCwgMHg3MGQwLCAweGMwODUsIDB4NzBkMiwgMHgwMGY2LAotCTB4MjA3OSwgMHgwMTAwLCAweDcyOWMsIDB4YTI4NCwgMHgwMGZmLCAweDcwNmUsIDB4NzhlNiwgMHhhMjg0LAotCTB4ZmYwMCwgMHg3MjcwLCAweGEyMDUsIDB4NzA3MiwgMHg3OGVhLCAweDAwZmUsIDB4NzBkYiwgMHgwMDAwLAotCTB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhNCwgMHgwMTIwLCAweDIwMTEsIDB4YWZlMCwgMHgyMDEzLAotCTB4MDdkMCwgMHhkMGFjLCAweDExMjgsIDB4MDgwYywgMHgyOGZhLCAweDAwMTAsIDB4MDgwYywgMHhhYmYxLAotCTB4MDAyZSwgMHgwMGVlLCAweDA4MGMsIDB4ODA3OCwgMHgwODA0LCAweDljYWEsIDB4MDgwYywgMHg4MDc4LAotCTB4MDAwNSwgMHgyNjAwLCAweDAwMDIsIDB4OWU4MSwgMHg5ZTgxLCAweDllODEsIDB4OWU4MSwgMHg5ZTgxLAotCTB4OWU4MywgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHhhYjRlLCAweDFkODAsIDB4MDA4OSwgMHgxMTM4LAotCTB4NjAwNywgMHgwMDQ1LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDAwNSwgMHgwODBjLAotCTB4MmFkOSwgMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdlZSwgMHgwMDA1LAotCTB4MDBkNiwgMHgwMDY2LCAweDY2MTgsIDB4MjY2OCwgMHg2ZTA0LCAweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LAotCTB4YTY4NiwgMHgwMDA2LCAweDAxNzAsIDB4YTY4NiwgMHgwMDA0LCAweDAxNTgsIDB4NmUwNCwgMHhhNmI0LAotCTB4MDBmZiwgMHhhNjg2LCAweDAwMDYsIDB4MDEyOCwgMHhhNjg2LCAweDAwMDQsIDB4MDExMCwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDZlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDA0NDksIDB4MDBkZSwgMHgwMDA1LAotCTB4MDBkNiwgMHgwNDkxLCAweDExZjAsIDB4NjgwYywgMHhhMDhjLCAweGZmMDAsIDB4NjgyMCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMTE1LCAweDYyMTIsIDB4NjgyNCwgMHg2MDJhLCAweGQxZTQsIDB4MDExOCwgMHgyMDA5LAotCTB4MDAwMSwgMHgwMDYwLCAweGQxZWMsIDB4MDE2OCwgMHg2OTIwLCAweGExOGMsIDB4MDBmZiwgMHg2ODI0LAotCTB4MDgwYywgMHgyNjc2LCAweDExMzAsIDB4MjExMCwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgyYjFlLAotCTB4MDAxOCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwOCwgMHhhMDA2LCAweDAwZGUsIDB4MDAwNSwgMHgyMDY5LAotCTB4YjI4ZCwgMHg2ODAwLCAweGEwODIsIDB4MDAxMCwgMHgxMjI4LCAweDYwMTMsIDB4MDAwMCwgMHhhMDg1LAotCTB4MDAwMSwgMHgwMDA4LCAweGEwMDYsIDB4MDAwNSwgMHg2MDEzLCAweDAwMDAsIDB4MjA2OSwgMHhiMjhjLAotCTB4NjgwOCwgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwgMHgwODAwLCAweDExNDAsIDB4NjgwMCwgMHhhMDg0LAotCTB4MDBmZiwgMHhhMDhlLCAweDAwMTQsIDB4MDExMCwgMHhhMDhlLCAweDAwMTAsIDB4MDAwNSwgMHg2MDA0LAotCTB4YTBiMiwgMHgwMDgwLCAweDFhMGMsIDB4MTRmNiwgMHhhMWI2LCAweDAwMTMsIDB4MTEzMCwgMHgyMDA4LAotCTB4YTFiMiwgMHgwMDQwLCAweDFhMDQsIDB4OWZmYiwgMHgwMDkyLCAweGExYjYsIDB4MDAyNywgMHgwMTIwLAotCTB4YTFiNiwgMHgwMDE0LCAweDE5MGMsIDB4MTRmNiwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg0YzVkLAotCTB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHg5ZjVmLAotCTB4OWY2MSwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjYxLCAweDlmNmYsIDB4OWZmNCwgMHg5ZmJmLAotCTB4OWZmNCwgMHg5ZmQwLCAweDlmZjQsIDB4OWY2ZiwgMHg5ZmY0LCAweDlmZWMsIDB4OWZmNCwgMHg5ZmVjLAotCTB4OWZmNCwgMHg5ZmY0LCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLAotCTB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNjEsIDB4OWY1ZiwgMHg5ZmY0LAotCTB4OWY1ZiwgMHg5ZjVmLCAweDlmZjQsIDB4OWY1ZiwgMHg5ZmYxLCAweDlmZjQsIDB4OWY1ZiwgMHg5ZjVmLAotCTB4OWY1ZiwgMHg5ZjVmLCAweDlmZjQsIDB4OWZmNCwgMHg5ZjVmLCAweDlmZjQsIDB4OWZmNCwgMHg5ZjVmLAotCTB4OWY2OSwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmZjAsIDB4OWZmNCwgMHg5ZjVmLAotCTB4OWY1ZiwgMHg5ZmY0LCAweDlmZjQsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHgwODBjLAotCTB4MTRmNiwgMHgwODBjLCAweDZiNzMsIDB4NjAwMywgMHgwMDAyLCAweDA4MGMsIDB4NmM1MCwgMHgwODA0LAotCTB4OWZmYSwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDA4MDQsIDB4OWZmNCwgMHgwMGY2LAotCTB4MjA3OSwgMHhhZDUxLCAweDc4MDQsIDB4MDBmZSwgMHhkMGFjLCAweDE5MDQsIDB4OWZmNCwgMHgyMDAxLAotCTB4MDAwMCwgMHgwODBjLCAweDRjMWUsIDB4NjAxOCwgMHhhMDgwLCAweDAwMDQsIDB4MjAwNCwgMHhhMDg2LAotCTB4MDBmZiwgMHgxMTQwLCAweDAwZjYsIDB4MjA3OSwgMHhhZDAwLCAweDc4OTQsIDB4ODAwMCwgMHg3ODk2LAotCTB4MDBmZSwgMHgwMGUwLCAweDAwYzYsIDB4NjAxOCwgMHgyMDYwLCAweDYwMDAsIDB4ZDBmNCwgMHgxMTQwLAotCTB4NjAxMCwgMHhhMDA1LCAweDAxMjgsIDB4MDBjZSwgMHgwODBjLCAweDNjY2UsIDB4MDgwNCwgMHg5ZmY0LAotCTB4MDBjZSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDIsIDB4MTEzOCwgMHgwMGY2LAotCTB4MjA3OSwgMHhhZDAwLCAweDc4OTQsIDB4ODAwMCwgMHg3ODk2LCAweDAwZmUsIDB4MjAwMSwgMHgwMDAyLAotCTB4MDgwYywgMHg0YzMwLCAweDA4MGMsIDB4NmI3MywgMHg2MDFmLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLAotCTB4NjAwNywgMHgwMDAyLCAweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBjNiwgMHg2MTE4LAotCTB4MjE2MCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHg2NTE5LCAweDAwY2UsIDB4MDRkOCwgMHg2NjE4LAotCTB4MDBkNiwgMHgyNjY4LCAweDZlMDQsIDB4MDBkZSwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywgMHhhNjg2LAotCTB4MDAwNiwgMHgwNTUwLCAweGE2ODYsIDB4MDAwNCwgMHgwNTM4LCAweDIwMDEsIDB4MDAwNCwgMHgwNDEwLAotCTB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDExMTAsIDB4MDgwYywgMHgzY2NlLAotCTB4MjAwMSwgMHgwMDA2LCAweDA0ODksIDB4NjYxOCwgMHgwMGQ2LCAweDI2NjgsIDB4NmUwNCwgMHgwMGRlLAotCTB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwgMHgwMDA2LCAweDAxNzAsIDB4MjAwMSwgMHgwMDA2LAotCTB4MDA0OCwgMHgyMDAxLCAweDAwMDQsIDB4MDAzMCwgMHgyMDAxLCAweDAwMDYsIDB4MDBlOSwgMHgwMDIwLAotCTB4MDAxOCwgMHgwMDEwLCAweDA4MGMsIDB4NGM1ZCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg4MDc4LAotCTB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MjYwMCwgMHgwMDAyLCAweGEwMDMsIDB4YTAwMywgMHhhMDAzLAotCTB4YTAwMywgMHhhMDAzLCAweGEwMDUsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLAotCTB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHgwMDE2LCAweDAwZDYsIDB4NjExOCwgMHgyMTY4LAotCTB4NjkwMCwgMHhkMTg0LCAweDAxODgsIDB4NjEwNCwgMHhhMThlLCAweDAwMGEsIDB4MTEyOCwgMHg2OTljLAotCTB4ZDFhNCwgMHgxMTEwLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDRjMzAsIDB4MjAwMSwgMHgwMDAwLAotCTB4MDgwYywgMHg0YzFlLCAweDA4MGMsIDB4MmFmZiwgMHgwMGRlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGQ2LAotCTB4NjYxOCwgMHgyNjY4LCAweDY4MDQsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDBkZSwgMHhhMGIyLAotCTB4MDAwYywgMHgxYTBjLCAweDE0ZjYsIDB4YTFiNiwgMHgwMDE1LCAweDExMTAsIDB4MDAzYiwgMHgwMDI4LAotCTB4YTFiNiwgMHgwMDE2LCAweDE5MGMsIDB4MTRmNiwgMHgwMDZiLCAweDAwMDUsIDB4ODZiOSwgMHg4NmI5LAotCTB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwgMHhhMDhmLCAweGEwNTYsIDB4ODZiOSwgMHg4NmI5LAotCTB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwgMHg4NmI5LAotCTB4YTA4ZiwgMHhhMDk2LCAweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4MDBmNiwgMHgyMDc5LAotCTB4YWQ1MSwgMHg3ODA0LCAweGQwYWMsIDB4MTFlMCwgMHg2MDE4LCAweGEwN2QsIDB4MDFjOCwgMHg3ODAwLAotCTB4ZDBmNCwgMHgxMTE4LCAweDc4MTAsIDB4YTAwNSwgMHgxMTk4LCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLAotCTB4NGMxZSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg0YzMwLCAweDYwMWYsIDB4MDAwMSwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MDgwYywgMHg2N2VlLCAweDA4MGMsIDB4NmM1MCwgMHgwMGE4LAotCTB4MjAxMSwgMHhiMjgzLCAweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDA4MGMsIDB4MjY3NiwgMHgxMTY4LAotCTB4MDBjNiwgMHgwODBjLCAweDRjZGMsIDB4MDEyMCwgMHgwMGNlLCAweDA4MGMsIDB4ODA3OCwgMHgwMDI4LAotCTB4MDgwYywgMHg0OTNhLCAweDAwY2UsIDB4MDgwYywgMHg4MDc4LCAweDAwZmUsIDB4MDAwNSwgMHg2NjA0LAotCTB4YTZiNiwgMHgwMDFlLCAweDExMTAsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDgwYywgMHg4OTQwLAotCTB4MTEzOCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDA4MGMsIDB4NjdlZSwgMHgwMDEwLAotCTB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4NjAwNCwgMHhhMDhhLCAweDAwODAsIDB4MWEwYywgMHgxNGY2LAotCTB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHhhMTgyLAotCTB4MDA0MCwgMHgwMDAyLCAweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNywgMHhhMGM1LAotCTB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHhhMGM1LAotCTB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweDA4MGMsIDB4MTRmNiwgMHgwMGQ2LAotCTB4MDBlNiwgMHgwMGY2LCAweDAxNTYsIDB4MDA0NiwgMHgwMDI2LCAweDYyMTgsIDB4YTI4MCwgMHgwMDJiLAotCTB4MjAwNCwgMHhhMDA1LCAweDAxMjAsIDB4MjAyMSwgMHgwMDAwLCAweDA4MGMsIDB4YWI5NiwgMHg2MTA2LAotCTB4MjA3MSwgMHhiMjgwLCAweDc0NDQsIDB4YTRhNCwgMHhmZjAwLCAweDA5MDQsIDB4YTEyOSwgMHhhNDg2LAotCTB4MjAwMCwgMHgxMTMwLCAweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAyMDAsIDB4MDgwYywgMHg2NjNmLAotCTB4MDgwYywgMHgxNWQ5LCAweDA5MGMsIDB4MTRmNiwgMHg2MDAzLCAweDAwMDcsIDB4MmQwMCwgMHg2ODM3LAotCTB4MDEwZCwgMHg2ODAzLCAweDAwMDAsIDB4NjgzYiwgMHgwMDAwLCAweDZjNWEsIDB4MmMwMCwgMHg2ODVlLAotCTB4NjAwOCwgMHg2OGIyLCAweDYwMTgsIDB4MjA3OCwgMHg3OGEwLCAweDgwMDcsIDB4NzEzMCwgMHg2OTRhLAotCTB4MDAxNiwgMHhhMDg0LCAweGZmMDAsIDB4Njg0NiwgMHg2ODRmLCAweDAwMDAsIDB4Njg1NywgMHgwMDM2LAotCTB4MDgwYywgMHg1MTBjLCAweDAwMWUsIDB4YTQ4NiwgMHgyMDAwLCAweDExMzAsIDB4MjAxOSwgMHgwMDE3LAotCTB4MDgwYywgMHhhOGViLCAweDA4MDQsIDB4YTE4NiwgMHhhNDg2LCAweDA0MDAsIDB4MTEzMCwgMHgyMDE5LAotCTB4MDAwMiwgMHgwODBjLCAweGE4OWQsIDB4MDgwNCwgMHhhMTg2LCAweGE0ODYsIDB4MDIwMCwgMHgxMTEwLAotCTB4MDgwYywgMHhhODgyLCAweGE0ODYsIDB4MTAwMCwgMHgxMTEwLCAweDA4MGMsIDB4YThkMCwgMHgwODA0LAotCTB4YTE4NiwgMHgyMDY5LCAweGIwNDgsIDB4NmEwMCwgMHhkMjg0LCAweDA5MDQsIDB4YTFkNSwgMHhhMjg0LAotCTB4MDMwMCwgMHgxOTA0LCAweGExY2YsIDB4NjgwNCwgMHhhMDA1LCAweDA5MDQsIDB4YTFjMCwgMHgyZDc4LAotCTB4NjAwMywgMHgwMDA3LCAweDA4MGMsIDB4MTVjMCwgMHgwOTA0LCAweGExOGQsIDB4NzgwMCwgMHhkMDhjLAotCTB4MTExOCwgMHg3ODA0LCAweDgwMDEsIDB4NzgwNiwgMHg2MDEzLCAweDAwMDAsIDB4NjgwMywgMHgwMDAwLAotCTB4NjgzNywgMHgwMTE2LCAweDY4M2IsIDB4MDAwMCwgMHg2MDA4LCAweDY4YjIsIDB4MmMwMCwgMHg2ODRhLAotCTB4NjAxOCwgMHgyMDc4LCAweDc4YTAsIDB4ODAwNywgMHg3MTMwLCAweDY5ODYsIDB4Njg0NiwgMHg3OTI4LAotCTB4Njk4YSwgMHg3OTJjLCAweDY5OGUsIDB4NzkzMCwgMHg2OTkyLCAweDc5MzQsIDB4Njk5NiwgMHg2ODUzLAotCTB4MDAzZCwgMHg3MjQ0LCAweGEyOTQsIDB4MDAwMywgMHhhMjg2LCAweDAwMDIsIDB4MTExOCwgMHg2ODRmLAotCTB4MDA0MCwgMHgwMDQwLCAweGEyODYsIDB4MDAwMSwgMHgxMTE4LCAweDY4NGYsIDB4MDA4MCwgMHgwMDEwLAotCTB4Njg0ZiwgMHgwMDAwLCAweDIwYTksIDB4MDAwYSwgMHgyMDAxLCAweGIyOTAsIDB4YWQ5MCwgMHgwMDE1LAotCTB4MjAwYywgMHg4MTBmLCAweDIxMTIsIDB4ODAwMCwgMHg4MjEwLCAweDFmMDQsIDB4YTE3OCwgMHgyMDBjLAotCTB4Njk4MiwgMHg4MDAwLCAweDIwMGMsIDB4Njk3ZSwgMHgwODBjLCAweDUxMGMsIDB4MDAyZSwgMHgwMDRlLAotCTB4MDE1ZSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDA1LCAweDYwMTMsIDB4MDEwMCwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwNDEsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwYzcwLAotCTB4MjA2OSwgMHhiMjkyLCAweDJkMDQsIDB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4MTIwMCwgMHgxMWE4LAotCTB4MjA2OSwgMHhiMjgwLCAweDY4NmMsIDB4YTA4NCwgMHgwMGZmLCAweDAwMTYsIDB4NjExMCwgMHhhMThjLAotCTB4MDcwMCwgMHhhMTBkLCAweDYxMTIsIDB4MDAxZSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQzLAotCTB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwODg4LCAweDYwMTMsIDB4MDIwMCwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwNDEsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwODMwLAotCTB4NjAxMywgMHgwMzAwLCAweDAwMTAsIDB4NjAxMywgMHgwMTAwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDA0MSwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDA4MDQsIDB4YTE4NiwgMHg2MDEzLAotCTB4MDUwMCwgMHgwYzk4LCAweDYwMTMsIDB4MDYwMCwgMHgwODE4LCAweDYwMTMsIDB4MDIwMCwgMHgwODAwLAotCTB4YTE4NiwgMHgwMDEzLCAweDExNzAsIDB4NjAwNCwgMHhhMDhhLCAweDAwNDAsIDB4MGEwYywgMHgxNGY2LAotCTB4YTA4YSwgMHgwMDUzLCAweDFhMGMsIDB4MTRmNiwgMHhhMDgyLCAweDAwNDAsIDB4MjAwOCwgMHgwODA0LAotCTB4YTI1MiwgMHhhMTg2LCAweDAwNTEsIDB4MDEzOCwgMHhhMTg2LCAweDAwNDcsIDB4MTFkOCwgMHg2MDA0LAotCTB4YTA4NiwgMHgwMDQxLCAweDA1MTgsIDB4MjAwMSwgMHgwMTA5LCAweDIwMDQsIDB4ZDA4NCwgMHgwMWYwLAotCTB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg2Njk5LAotCTB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDEyZSwgMHg2MDAwLCAweGEwODYsIDB4MDAwMiwgMHgxMTcwLAotCTB4MDgwNCwgMHhhMjk1LCAweGExODYsIDB4MDAyNywgMHgwMTIwLCAweGExODYsIDB4MDAxNCwgMHgxOTBjLAotCTB4MTRmNiwgMHg2MDA0LCAweGEwODIsIDB4MDA0MCwgMHgyMDA4LCAweDAwMWEsIDB4MDgwYywgMHg4MGJlLAotCTB4MDAwNSwgMHhhMjJjLCAweGEyMmUsIDB4YTIyZSwgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywgMHhhMjJjLAotCTB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywgMHhhMjJjLAotCTB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLAotCTB4MDgwYywgMHg2YzUwLCAweDAwMzYsIDB4MDBkNiwgMHg2MDEwLCAweGEwNmQsIDB4MDFjMCwgMHhhZDg0LAotCTB4ZjAwMCwgMHgwMWE4LCAweDYwMDMsIDB4MDAwMiwgMHg2MDE4LCAweDIwMDQsIDB4ZDBiYywgMHgxMTc4LAotCTB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4YTkxZiwgMHg2MDEzLCAweDAwMDAsIDB4NjAxNCwgMHhhMDA1LAotCTB4MTEyMCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwgMHg2MDE2LCAweDYwMDMsIDB4MDAwNywgMHgwMGRlLAotCTB4MDAzZSwgMHgwMDA1LCAweDAwMDIsIDB4YTI2NiwgMHhhMjgzLCAweGEyNmYsIDB4YTI4ZiwgMHhhMjY2LAotCTB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwgMHhhMjY2LAotCTB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4MDgwYywgMHgxNGY2LAotCTB4NjAxMCwgMHhhMDg4LCAweDAwMTMsIDB4MjEwNCwgMHhhMDg1LCAweDA0MDAsIDB4MjAwYSwgMHgwODBjLAotCTB4NmI3MywgMHg2MDEwLCAweGEwODAsIDB4MDAxMywgMHgyMDA0LCAweGQwYjQsIDB4MDEzOCwgMHg2MDAzLAotCTB4MDAwNywgMHgyMDA5LCAweDAwNDMsIDB4MDgwYywgMHg4MGE3LCAweDAwMTAsIDB4NjAwMywgMHgwMDAyLAotCTB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4YWI1NSwgMHgxMTIwLAotCTB4MDgwYywgMHg2NjE4LCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHgwODBjLAotCTB4NmI3MywgMHgyMDA5LCAweDAwNDEsIDB4MDgwNCwgMHhhM2RlLCAweGExODIsIDB4MDA0MCwgMHgwMDAyLAotCTB4YTJhYiwgMHhhMmFkLCAweGEyYWIsIDB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwgMHhhMmFlLAotCTB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwgMHhhMmFiLAotCTB4YTJhYiwgMHhhMmI5LCAweGEyYWIsIDB4MDgwYywgMHgxNGY2LCAweDAwMDUsIDB4NjAwMywgMHgwMDA0LAotCTB4NjExMCwgMHgyMGUxLCAweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MDgwYywgMHgxODI0LAotCTB4MDAwNSwgMHgwMGQ2LCAweDA4MGMsIDB4NjYxOCwgMHgwMGRlLCAweDA4MGMsIDB4YWJiNCwgMHgwODBjLAotCTB4ODA3OCwgMHgwMDA1LCAweGExODIsIDB4MDA0MCwgMHgwMDAyLCAweGEyZDgsIDB4YTJkOCwgMHhhMmQ4LAotCTB4YTJkOCwgMHhhMmQ4LCAweGEyZDgsIDB4YTJkOCwgMHhhMmRhLCAweGEyZDgsIDB4YTJkZCwgMHhhMzE2LAotCTB4YTJkOCwgMHhhMmQ4LCAweGEyZDgsIDB4YTJkOCwgMHhhMzE2LCAweGEyZDgsIDB4YTJkOCwgMHhhMmQ4LAotCTB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4ODBiZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LAotCTB4ZDBlNCwgMHgwMTU4LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweGEwODIsIDB4MDAwNSwgMHgwMjI4LAotCTB4MjAwMSwgMHgwMTFmLCAweDIwMDQsIDB4NjAzNiwgMHgwMDEwLCAweDYwMzcsIDB4MDAwMCwgMHgwODBjLAotCTB4NmMwNSwgMHgwODBjLCAweDZkMGQsIDB4NjAxMCwgMHgwMGQ2LCAweDIwNjgsIDB4Njg0YywgMHhkMGZjLAotCTB4MDE1MCwgMHhhMDhjLCAweDAwMDMsIDB4YTE4ZSwgMHgwMDAyLCAweDAxNjgsIDB4MjAwOSwgMHgwMDQxLAotCTB4MDBkZSwgMHgwODA0LCAweGEzZGUsIDB4NjAwMywgMHgwMDA3LCAweDYwMTcsIDB4MDAwMCwgMHgwODBjLAotCTB4NjYxOCwgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHhhYjU1LCAweDAxMTAsIDB4MDBkZSwgMHgwMDA1LAotCTB4MDgwYywgMHg2NjE4LCAweDA4MGMsIDB4ODA3OCwgMHgwMGRlLCAweDBjYTAsIDB4MDAzNiwgMHgwODBjLAotCTB4NmMwNSwgMHgwODBjLCAweDZkMGQsIDB4NjAxMCwgMHgwMGQ2LCAweDIwNjgsIDB4NjAxOCwgMHgyMDA0LAotCTB4ZDBiYywgMHgwMTg4LCAweDY4NGMsIDB4YTA4NCwgMHgwMDAzLCAweGEwODYsIDB4MDAwMiwgMHgwMTQwLAotCTB4Njg3YywgMHg2MzJjLCAweGEzMWEsIDB4NjMyZSwgMHg2ODgwLCAweDYzMjgsIDB4YTMxYiwgMHg2MzJhLAotCTB4NjAwMywgMHgwMDAyLCAweDAwODAsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4YTkxZiwgMHg2MDE0LAotCTB4YTAwNSwgMHgxMTI4LCAweDIwMDEsIDB4YWZhNCwgMHgyMDA0LCAweDgwMDMsIDB4NjAxNiwgMHg2MDEzLAotCTB4MDAwMCwgMHg2MDAzLCAweDAwMDcsIDB4MDBkZSwgMHgwMDNlLCAweDAwMDUsIDB4YTE4NiwgMHgwMDEzLAotCTB4MTE1MCwgMHg2MDA0LCAweGEwODYsIDB4MDA0MiwgMHgxOTBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLAotCTB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4NiwgMHgwMDI3LCAweDAxMTgsIDB4YTE4NiwgMHgwMDE0LAotCTB4MTE4MCwgMHg2MDA0LCAweGEwODYsIDB4MDA0MiwgMHgxOTBjLCAweDE0ZjYsIDB4MjAwMSwgMHgwMDA3LAotCTB4MDgwYywgMHg0YzVkLCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLAotCTB4MDAwNSwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLAotCTB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4YTM4MSwgMHhhMzhkLCAweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLAotCTB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwgMHgwODBjLAotCTB4MTRmNiwgMHgwMDM2LCAweDAwNDYsIDB4MjBlMSwgMHgwMDA1LCAweDNkMTgsIDB4M2UyMCwgMHgyYzEwLAotCTB4MDgwYywgMHgxODI0LCAweDAwNGUsIDB4MDAzZSwgMHgwMDA1LCAweDYwMTAsIDB4MDBkNiwgMHgyMDY4LAotCTB4NjgxMCwgMHg2YTE0LCAweDAwMDYsIDB4MDA0NiwgMHgwMDU2LCAweDZjN2MsIDB4YTQyMiwgMHg2ZDgwLAotCTB4MjIwMCwgMHhhNTJiLCAweDYwMmMsIDB4YTQyMCwgMHg2NDJlLCAweDYwMjgsIDB4YTUyOSwgMHg2NTJhLAotCTB4MDA1ZSwgMHgwMDRlLCAweDAwMGUsIDB4YTIwZCwgMHgxMTc4LCAweDY4NGMsIDB4ZDBmYywgMHgwMTIwLAotCTB4MjAwOSwgMHgwMDQxLCAweDAwZGUsIDB4MDQ5MCwgMHg2MDAzLCAweDAwMDcsIDB4NjAxNywgMHgwMDAwLAotCTB4MDgwYywgMHg2NjE4LCAweDAwZGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLAotCTB4NTAyOSwgMHgwMGZlLCAweDAwMGUsIDB4MDEyMCwgMHg2MDAzLCAweDAwMDIsIDB4MDBkZSwgMHgwMDA1LAotCTB4MjAwOSwgMHhhZDBkLCAweDIxMGMsIDB4ZDE5YywgMHgwMTE4LCAweDYwMDMsIDB4MDAwNywgMHgwMDEwLAotCTB4NjAwMywgMHgwMDA2LCAweDAwMjEsIDB4MDgwYywgMHg2NjFhLCAweDAwZGUsIDB4MDAwNSwgMHhkMmZjLAotCTB4MDE0MCwgMHg4MDAyLCAweDgwMDAsIDB4ODIxMiwgMHhhMjkxLCAweDAwMDAsIDB4MjAwOSwgMHgwMDA5LAotCTB4MDAxMCwgMHgyMDA5LCAweDAwMTUsIDB4NmE2YSwgMHg2ODY2LCAweDAwMDUsIDB4YTE4MiwgMHgwMDQwLAotCTB4MDIwOCwgMHgwMDYyLCAweGExODYsIDB4MDAxMywgMHgwMTIwLCAweGExODYsIDB4MDAxNCwgMHgxOTBjLAotCTB4MTRmNiwgMHg2MDIwLCAweGQwZGMsIDB4MDkwYywgMHgxNGY2LCAweDAwMDUsIDB4YTQwMSwgMHhhNDA4LAotCTB4YTQxNCwgMHhhNDIwLCAweGE0MDEsIDB4YTQwMSwgMHhhNDAxLCAweGE0MmYsIDB4YTQwMSwgMHhhNDAzLAotCTB4YTQwMywgMHhhNDAxLCAweGE0MDEsIDB4YTQwMSwgMHhhNDAxLCAweGE0MDMsIDB4YTQwMSwgMHhhNDAzLAotCTB4YTQwMSwgMHgwODBjLCAweDE0ZjYsIDB4NjAyMCwgMHhkMGRjLCAweDA5MGMsIDB4MTRmNiwgMHgwMDA1LAotCTB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg2N2E4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg2YzUwLCAweDAxMmUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwODBjLAotCTB4NjdhOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZjNTAsIDB4MDEyZSwgMHgwMDA1LAotCTB4NjAwMywgMHgwMDAzLCAweDYxMDYsIDB4MmMxMCwgMHgwODBjLCAweDFlNmUsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDY4MGIsIDB4MDgwYywgMHg2ZDBkLCAweDAxMmUsIDB4MDAwNSwgMHhhMDE2LAotCTB4MDgwYywgMHgxODI0LCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAzNiwgMHgwMGQ2LAotCTB4YTE4MiwgMHgwMDQwLCAweDAwMjMsIDB4MDBkZSwgMHgwMDNlLCAweDAxMmUsIDB4MDAwNSwgMHhhNDRmLAotCTB4YTQ1MSwgMHhhNDYzLCAweGE0N2UsIDB4YTQ0ZiwgMHhhNDRmLCAweGE0NGYsIDB4YTQ5MywgMHhhNDRmLAotCTB4YTQ0ZiwgMHhhNDRmLCAweGE0NGYsIDB4YTQ0ZiwgMHhhNDRmLCAweGE0NGYsIDB4YTQ0ZiwgMHgwODBjLAotCTB4MTRmNiwgMHg2MDEwLCAweDIwNjgsIDB4Njg0YywgMHhkMGZjLCAweDAxZjgsIDB4YTA5YywgMHgwMDAzLAotCTB4YTM5ZSwgMHgwMDAzLCAweDAxZDAsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg2N2E4LAotCTB4MDgwYywgMHg2YzUwLCAweDA0OTgsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywgMHgwMTY4LAotCTB4YTA5YywgMHgwMDAzLCAweGEzOWUsIDB4MDAwMywgMHgwMTQwLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LAotCTB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwNDA4LCAweDYwMTMsIDB4MDAwMCwgMHg2MDE3LAotCTB4MDAwMCwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHhhOTFmLCAweDAwYzAsIDB4NjAxMCwgMHgyMDY4LAotCTB4Njg0YywgMHhkMGZjLCAweDBkOTAsIDB4YTA5YywgMHgwMDAzLCAweGEzOWUsIDB4MDAwMywgMHgwZDY4LAotCTB4NjAwMywgMHgwMDAzLCAweDYxMDYsIDB4MmMxMCwgMHgwODBjLCAweDFlNmUsIDB4MDgwYywgMHg2ODBiLAotCTB4MDgwYywgMHg2ZDBkLCAweDAwMTgsIDB4YTAxNiwgMHgwODBjLCAweDE4MjQsIDB4MDAwNSwgMHgwODBjLAotCTB4NmI3MywgMHg2MTEwLCAweDgxZmYsIDB4MDE1OCwgMHgwMGQ2LCAweDIxNjgsIDB4MDgwYywgMHhhYmZhLAotCTB4MDAzNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHhhOTFmLCAweDAwM2UsIDB4MDBkZSwgMHgwODBjLAotCTB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHgwODBjLCAweDZjMDUsIDB4NjExMCwgMHg4MWZmLAotCTB4MDE1OCwgMHgwMGQ2LCAweDIxNjgsIDB4MDgwYywgMHhhYmZhLCAweDAwMzYsIDB4MjAxOSwgMHgwMDI5LAotCTB4MDgwYywgMHhhOTFmLCAweDAwM2UsIDB4MDBkZSwgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2ZDBkLAotCTB4MDAwNSwgMHhhMTgyLCAweDAwODUsIDB4MDAwMiwgMHhhNGNkLCAweGE0Y2IsIDB4YTRjYiwgMHhhNGQ5LAotCTB4YTRjYiwgMHhhNGNiLCAweGE0Y2IsIDB4MDgwYywgMHgxNGY2LCAweDYwMDMsIDB4MDAwYiwgMHg2MTA2LAotCTB4MDgwYywgMHg2N2E4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmM1MCwgMHgwMTJlLAotCTB4MDAwNSwgMHgwMDI2LCAweDAwZTYsIDB4MDgwYywgMHhhYjRlLCAweDAxMTgsIDB4MDgwYywgMHg4MDc4LAotCTB4MDBjOCwgMHgyMDcxLCAweGIyODAsIDB4NzIyNCwgMHg2MjEyLCAweDcyMjAsIDB4MDgwYywgMHhhN2NlLAotCTB4MDExOCwgMHg2MDA3LCAweDAwODYsIDB4MDA0MCwgMHg2MDA3LCAweDAwODcsIDB4NzIyNCwgMHhhMjk2LAotCTB4ZmZmZiwgMHgxMTEwLCAweDYwMDcsIDB4MDA4NiwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2E4LAotCTB4MDgwYywgMHg2YzUwLCAweDAwZWUsIDB4MDAyZSwgMHgwMDA1LCAweGExODYsIDB4MDAxMywgMHgxMTYwLAotCTB4NjAwNCwgMHhhMDhhLCAweDAwODUsIDB4MGEwYywgMHgxNGY2LCAweGEwOGEsIDB4MDA4YywgMHgxYTBjLAotCTB4MTRmNiwgMHhhMDgyLCAweDAwODUsIDB4MDBhMiwgMHhhMTg2LCAweDAwMjcsIDB4MDEzMCwgMHhhMTg2LAotCTB4MDAxNCwgMHgwMTE4LCAweDA4MGMsIDB4ODBiZSwgMHgwMDUwLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLAotCTB4NGM1ZCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LAotCTB4YTUyNywgMHhhNTI5LCAweGE1MjksIDB4YTUyNywgMHhhNTI3LCAweGE1MjcsIDB4YTUyNywgMHgwODBjLAotCTB4MTRmNiwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LAotCTB4YTE4MiwgMHgwMDg1LCAweDBhMGMsIDB4MTRmNiwgMHhhMTgyLCAweDAwOGMsIDB4MWEwYywgMHgxNGY2LAotCTB4YTE4MiwgMHgwMDg1LCAweDAwMDIsIDB4YTU0MiwgMHhhNTQyLCAweGE1NDIsIDB4YTU0NCwgMHhhNTQyLAotCTB4YTU0MiwgMHhhNTQyLCAweDA4MGMsIDB4MTRmNiwgMHgwMDA1LCAweGExODYsIDB4MDAxMywgMHgwMTQ4LAotCTB4YTE4NiwgMHgwMDE0LCAweDAxMzAsIDB4YTE4NiwgMHgwMDI3LCAweDAxMTgsIDB4MDgwYywgMHg4MGJlLAotCTB4MDAzMCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LAotCTB4MDAzNiwgMHgwODBjLCAweGFiYjQsIDB4NjAzZiwgMHgwMDAwLCAweDIwMTksIDB4MDAwYiwgMHgwMDMxLAotCTB4NjAxZiwgMHgwMDA2LCAweDYwMDMsIDB4MDAwNywgMHgwMDNlLCAweDAwMDUsIDB4MDEyNiwgMHgwMDM2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwODYsIDB4MmM0MCwgMHgwMDk2LCAweDIwNDksIDB4MDAwMCwgMHgwODBjLAotCTB4N2I5YSwgMHgwMDllLCAweDAwOGUsIDB4MTU3OCwgMHgwMDc2LCAweDJjMzgsIDB4MDgwYywgMHg3YzM0LAotCTB4MDA3ZSwgMHgxNTQ4LCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDA1MjgsIDB4NjAxYywgMHhhMDg2LAotCTB4MDAwNywgMHgwNTA4LCAweDAwZDYsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDQsIDB4MTE1MCwgMHgwODBjLAotCTB4YWJiNCwgMHg2MDFmLCAweDAwMDcsIDB4MjAwMSwgMHhhZmEzLCAweDIwMDQsIDB4NjAxNiwgMHgwODBjLAotCTB4MTkwYiwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxMTAsIDB4MDgwYywgMHhhOTFmLAotCTB4MDBkZSwgMHg2MDEzLCAweDAwMDAsIDB4MDgwYywgMHhhYmI0LCAweDYwMWYsIDB4MDAwNywgMHgyMDAxLAotCTB4YWZhMywgMHgyMDA0LCAweDYwMTYsIDB4MDAzZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGM2LAotCTB4MDAzNiwgMHgwMTU2LCAweDIwNzksIDB4YjI4MCwgMHg3OTM4LCAweDc4M2MsIDB4MDgwYywgMHgyNjc2LAotCTB4MTkwNCwgMHhhNWYxLCAweDAwMTYsIDB4MDBjNiwgMHgwODBjLCAweDRjZGMsIDB4MTVjMCwgMHgyMDExLAotCTB4YjI5MCwgMHhhYzk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4OGE3YywgMHgxNTc4LAotCTB4MDAxZSwgMHgwMDJlLCAweDAwMjYsIDB4MDAxNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg3Y2Y0LAotCTB4MDgwYywgMHg2OGU3LCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4NjgxZCwgMHgwMDdlLAotCTB4MDAxZSwgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweGE3MTIsIDB4MDA3ZSwgMHgwODBjLAotCTB4NGVjZiwgMHgwMDI2LCAweDYyMDQsIDB4YTI5NCwgMHhmZjAwLCAweDgyMTcsIDB4YTI4NiwgMHgwMDA2LAotCTB4MDExOCwgMHhhMjg2LCAweDAwMDQsIDB4MTExOCwgMHg2MmEwLCAweDA4MGMsIDB4MmI4NywgMHgwMDJlLAotCTB4MDAxZSwgMHgwODBjLCAweDQ5M2EsIDB4NjYxMiwgMHg2NTE2LCAweGEwMDYsIDB4MDAxMCwgMHgwMGNlLAotCTB4MDAxZSwgMHgwMTVlLCAweDAwM2UsIDB4MDBjZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LAotCTB4MDBlNiwgMHgwMDE2LCAweDIwMDksIDB4YWQyMCwgMHgyMTA0LCAweGEwODYsIDB4MDA3NCwgMHgxOTA0LAotCTB4YTY0YiwgMHgyMDY5LCAweGIyOGUsIDB4NjkwYywgMHhhMTgyLCAweDAxMDAsIDB4MDZjMCwgMHg2OTA4LAotCTB4YTE4NCwgMHg4MDAwLCAweDA1ZTgsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDQsIDB4YTAwNSwgMHgxMTYwLAotCTB4NjAxOCwgMHgyMDcwLCAweDcwMTAsIDB4YTA4NCwgMHgwMGZmLCAweDAxMTgsIDB4NzAwMCwgMHhkMGY0LAotCTB4MDExOCwgMHhhMTg0LCAweDA4MDAsIDB4MDU2MCwgMHg2OTEwLCAweGExOGEsIDB4MDAwMSwgMHgwNjEwLAotCTB4NjkxNCwgMHgyMDY5LCAweGIyYWUsIDB4NjkwNCwgMHg4MWZmLCAweDExOTgsIDB4NjkwYywgMHhhMTgyLAotCTB4MDEwMCwgMHgwMmE4LCAweDY5MDgsIDB4ODFmZiwgMHgxMTc4LCAweDY5MTAsIDB4YTE4YSwgMHgwMDAxLAotCTB4MDI4OCwgMHg2OTE4LCAweGExOGEsIDB4MDAwMSwgMHgwMjk4LCAweDAwZDAsIDB4NjAxMywgMHgwMTAwLAotCTB4MDBhMCwgMHg2MDEzLCAweDAzMDAsIDB4MDA4OCwgMHg2MDEzLCAweDA1MDAsIDB4MDA3MCwgMHg2MDEzLAotCTB4MDcwMCwgMHgwMDU4LCAweDYwMTMsIDB4MDkwMCwgMHgwMDQwLCAweDYwMTMsIDB4MGIwMCwgMHgwMDI4LAotCTB4NjAxMywgMHgwZjAwLCAweDAwMTAsIDB4NjAxMywgMHgyZDAwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA4LAotCTB4YTAwNiwgMHgwMDFlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LAotCTB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4NjIxOCwgMHgyMjY4LCAweDZiMDQsIDB4YTM5NCwgMHgwMGZmLAotCTB4YTI4NiwgMHgwMDA2LCAweDAxOTAsIDB4YTI4NiwgMHgwMDA0LCAweDAxNzgsIDB4YTM5NCwgMHhmZjAwLAotCTB4ODIxNywgMHhhMjg2LCAweDAwMDYsIDB4MDE0OCwgMHhhMjg2LCAweDAwMDQsIDB4MDEzMCwgMHgwMGM2LAotCTB4MmQ2MCwgMHgwODBjLCAweDRjZWIsIDB4MDBjZSwgMHgwNGMwLCAweDIwMTEsIDB4YjI5NiwgMHhhZDk4LAotCTB4MDAwYSwgMHgyMGE5LCAweDAwMDQsIDB4MDgwYywgMHg4YTdjLCAweDE1ODAsIDB4MjAxMSwgMHhiMjlhLAotCTB4YWQ5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwgMHgwODBjLCAweDhhN2MsIDB4MTUzOCwgMHgwMDQ2LAotCTB4MDAxNiwgMHg2YWEwLCAweGEyOTQsIDB4MDBmZiwgMHg4MjI3LCAweGEwMDYsIDB4MjAwOSwgMHhhZDUyLAotCTB4MjEwYywgMHhkMWE0LCAweDAxMzgsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywgMHg2ODAwLAotCTB4YzBlNSwgMHg2ODAyLCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LAotCTB4MDAwMCwgMHgwODBjLCAweDY4MWQsIDB4MmMwOCwgMHgwODBjLCAweGE3MTIsIDB4MDA3ZSwgMHgyMDAxLAotCTB4MDAwNywgMHgwODBjLCAweDRjNWQsIDB4MDAxZSwgMHgwMDRlLCAweGEwMDYsIDB4MDE1ZSwgMHgwMDNlLAotCTB4MDAyZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4YjI4ZSwgMHg2ODAwLAotCTB4YTA4NiwgMHgwODAwLCAweDAxMTgsIDB4NjAxMywgMHgwMDAwLCAweDAwMDgsIDB4YTAwNiwgMHgwMGRlLAotCTB4MDAwNSwgMHgwMGM2LCAweDAwZjYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDE1NiwgMHgyMDc5LAotCTB4YjI4YywgMHg3OTMwLCAweDc4MzQsIDB4MDgwYywgMHgyNjc2LCAweDExYTAsIDB4MDgwYywgMHg0Y2RjLAotCTB4MTE4OCwgMHgyMDExLCAweGIyOTAsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgwODBjLAotCTB4OGE3YywgMHgxMTQwLCAweDIwMTEsIDB4YjI5NCwgMHhhYzk4LCAweDAwMDYsIDB4MjBhOSwgMHgwMDA0LAotCTB4MDgwYywgMHg4YTdjLCAweDAxNWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDBmZSwgMHgwMGNlLAotCTB4MDAwNSwgMHgwMGM2LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDE1NiwgMHgyMDExLAotCTB4YjI4MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2NzYsIDB4MTFhMCwgMHgwODBjLAotCTB4NGNkYywgMHgxMTg4LCAweDIwMTEsIDB4YjI5NiwgMHhhYzk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LAotCTB4MDgwYywgMHg4YTdjLCAweDExNDAsIDB4MjAxMSwgMHhiMjlhLCAweGFjOTgsIDB4MDAwNiwgMHgyMGE5LAotCTB4MDAwNCwgMHgwODBjLCAweDhhN2MsIDB4MDE1ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLAotCTB4MDBjZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwgMHgwMDg2LCAweDAwNzYsIDB4MDA2NiwgMHgwMDU2LAotCTB4MDA0NiwgMHgwMDI2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDI3NDAsIDB4MjAyOSwgMHhhZmQwLAotCTB4MjUyYywgMHgyMDIxLCAweGFmZDYsIDB4MjQyNCwgMHgyMDYxLCAweGI0MDAsIDB4MjA3MSwgMHhhZDAwLAotCTB4NzY0NCwgMHg3MDY0LCAweDgxZmYsIDB4MDEyOCwgMHg4MDAxLCAweGE2MDIsIDB4MWEwNCwgMHhhNzhlLAotCTB4MDAxOCwgMHhhNjA2LCAweDA5MDQsIDB4YTc4ZSwgMHgyMTAwLCAweGFjMDYsIDB4MDkwNCwgMHhhNzg1LAotCTB4MDgwYywgMHhhOTkwLCAweDA5MDQsIDB4YTc4NSwgMHg2NzFjLCAweGE3ODYsIDB4MDAwMSwgMHgwOTA0LAotCTB4YTdhNSwgMHhhNzg2LCAweDAwMDQsIDB4MDkwNCwgMHhhN2E1LCAweGE3ODYsIDB4MDAwNywgMHgwNWU4LAotCTB4MjUwMCwgMHhhYzA2LCAweDA1ZDAsIDB4MjQwMCwgMHhhYzA2LCAweDA1YjgsIDB4MDgwYywgMHhhOWEwLAotCTB4MTVhMCwgMHg4OGZmLCAweDAxMTgsIDB4NjA1MCwgMHhhOTA2LCAweDE1NzgsIDB4MDBkNiwgMHg2MDAwLAotCTB4YTA4NiwgMHgwMDA0LCAweDExMjAsIDB4MDAxNiwgMHgwODBjLCAweDE5MGIsIDB4MDAxZSwgMHhhNzg2LAotCTB4MDAwOCwgMHgxMTQ4LCAweDA4MGMsIDB4OTc4OSwgMHgxMTMwLCAweDA4MGMsIDB4ODVmMywgMHgwMGRlLAotCTB4MDgwYywgMHg5NzRlLCAweDAwZDAsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTkwLAotCTB4YTc4NiwgMHgwMDAzLCAweDE1MjgsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLAotCTB4MDgwYywgMHhhYmZhLCAweDAwMTYsIDB4MDgwYywgMHg5N2ZkLCAweDA4MGMsIDB4NTEwYywgMHgwMDFlLAotCTB4MDgwYywgMHg5NzQyLCAweDAwZGUsIDB4MDgwYywgMHg5NzRlLCAweGFjZTAsIDB4MDAxOCwgMHgyMDAxLAotCTB4YWQxNiwgMHgyMDA0LCAweGFjMDIsIDB4MTIxMCwgMHgwODA0LCAweGE3MjYsIDB4MDEyZSwgMHgwMDJlLAotCTB4MDA0ZSwgMHgwMDVlLCAweDAwNmUsIDB4MDA3ZSwgMHgwMDhlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LAotCTB4YTc4NiwgMHgwMDA2LCAweDE5YzAsIDB4YTM4NiwgMHgwMDA1LCAweDAxMjgsIDB4MDgwYywgMHhhYmZhLAotCTB4MDgwYywgMHhhOTFmLCAweDA4ZjgsIDB4MDBkZSwgMHgwYzAwLCAweDA4MGMsIDB4YTlhMCwgMHgxOWU4LAotCTB4ODFmZiwgMHgwOWQ4LCAweGExODAsIDB4MDAwMSwgMHgyMDA0LCAweGEwODYsIDB4MDAxOCwgMHgwMTMwLAotCTB4YTE4MCwgMHgwMDAxLCAweDIwMDQsIDB4YTA4NiwgMHgwMDJkLCAweDE5NzgsIDB4NjAwMCwgMHhhMDg2LAotCTB4MDAwMiwgMHgxOTU4LCAweDA4MGMsIDB4OTc3OCwgMHgwMTMwLCAweDA4MGMsIDB4OTc4OSwgMHgxOTI4LAotCTB4MDgwYywgMHg4NWYzLCAweDAwMzgsIDB4MDgwYywgMHgyYWZmLCAweDA4MGMsIDB4OTc4OSwgMHgxMTEwLAotCTB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4OTc0ZSwgMHgwODA0LCAweGE3ODUsIDB4MDBjNiwgMHgwMGU2LAotCTB4MDAxNiwgMHgyYzA4LCAweDIxNzAsIDB4MDgwYywgMHhhOTQwLCAweDAwMWUsIDB4MDEyMCwgMHg2MDFjLAotCTB4YTA4NCwgMHgwMDBmLCAweDAwMWIsIDB4MDBlZSwgMHgwMGNlLCAweDAwMDUsIDB4YTdlNiwgMHhhN2U2LAotCTB4YTdlNiwgMHhhN2U2LCAweGE3ZTYsIDB4YTdlNiwgMHhhN2U4LCAweGE3ZTYsIDB4YTAwNiwgMHgwMDA1LAotCTB4MDA0NiwgMHgwMDE2LCAweDcwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMjQsIDB4YTRhNCwgMHgwMGZmLAotCTB4ODQyNywgMHgyYzAwLCAweDIwMDksIDB4MDAyMCwgMHgwODBjLCAweGE5NmMsIDB4MDAxZSwgMHgwMDRlLAotCTB4MDAzNiwgMHgyMDE5LCAweDAwMDIsIDB4MDgwYywgMHhhNTY2LCAweDAwM2UsIDB4YTA4NSwgMHgwMDAxLAotCTB4MDAwNSwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHg0YzFlLCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LAotCTB4MDAzNiwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHhhZDA1LCAweDIwMTEsIDB4YjI5NiwgMHgwODBjLAotCTB4OGE3YywgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMTVlLCAweGEwMDUsIDB4MDAwNSwgMHgwMGY2LAotCTB4MDBlNiwgMHgwMGM2LCAweDAwODYsIDB4MDA3NiwgMHgwMDY2LCAweDAwMjYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgyNzQwLCAweDIwNjEsIDB4YjQwMCwgMHgyMDc5LCAweDAwMDEsIDB4OGZmZiwgMHgwOTA0LAotCTB4YTg3NSwgMHgyMDcxLCAweGFkMDAsIDB4NzY0NCwgMHg3MDY0LCAweDgwMDEsIDB4YTYwMiwgMHgxYTA0LAotCTB4YTg3NSwgMHg4OGZmLCAweDAxMjgsIDB4MjgwMCwgMHhhYzA2LCAweDE1YjAsIDB4MjA3OSwgMHgwMDAwLAotCTB4MDgwYywgMHhhOTkwLCAweDA1ODgsIDB4MjQwMCwgMHhhYzA2LCAweDA1NzAsIDB4NjcxYywgMHhhNzg2LAotCTB4MDAwNiwgMHgxNTUwLCAweGE3ODYsIDB4MDAwNywgMHgwNTM4LCAweDg4ZmYsIDB4MTE0MCwgMHg2MDE4LAotCTB4YTIwNiwgMHgxNTEwLCAweDg1ZmYsIDB4MDExOCwgMHg2MDUwLCAweGExMDYsIDB4MTFlOCwgMHgwMGQ2LAotCTB4NjAwMCwgMHhhMDg2LCAweDAwMDQsIDB4MTE1MCwgMHgwODBjLCAweGFiYjQsIDB4NjAxZiwgMHgwMDA3LAotCTB4MjAwMSwgMHhhZmEzLCAweDIwMDQsIDB4NjAxNiwgMHgwODBjLCAweDE5MGIsIDB4NjAxMCwgMHgyMDY4LAotCTB4MDgwYywgMHg5NTk2LCAweDAxMjAsIDB4MDA0NiwgMHgwODBjLCAweGE5MWYsIDB4MDA0ZSwgMHgwMGRlLAotCTB4MDgwYywgMHg5NzRlLCAweDg4ZmYsIDB4MTE5OCwgMHhhY2UwLCAweDAwMTgsIDB4MjAwMSwgMHhhZDE2LAotCTB4MjAwNCwgMHhhYzAyLCAweDEyMTAsIDB4MDgwNCwgMHhhODI2LCAweGEwMDYsIDB4MDEyZSwgMHgwMDJlLAotCTB4MDA2ZSwgMHgwMDdlLCAweDAwOGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHhhOGM1LAotCTB4MDAwMSwgMHgwY2EwLCAweDAwNzYsIDB4MDA1NiwgMHgwMDg2LCAweDIwNDEsIDB4MDAwMCwgMHgyMDI5LAotCTB4MDAwMSwgMHgyYzIwLCAweDIwMTksIDB4MDAwMiwgMHg2MjE4LCAweDAwOTYsIDB4MjA0OSwgMHgwMDAwLAotCTB4MDgwYywgMHg3YjlhLCAweDAwOWUsIDB4MDA4ZSwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg3YzM0LAotCTB4MDgwYywgMHhhODE3LCAweDAwNWUsIDB4MDA3ZSwgMHgwMDA1LCAweDAwMjYsIDB4MDA0NiwgMHgwMDU2LAotCTB4MDA3NiwgMHgwMGM2LCAweDAxNTYsIDB4MmMyMCwgMHgyMTI4LCAweDIwYTksIDB4MDA3ZiwgMHgyMDA5LAotCTB4MDAwMCwgMHgwMDE2LCAweDAwMzYsIDB4MDgwYywgMHg0Y2RjLCAweDExYjAsIDB4MmMxMCwgMHgwMDU2LAotCTB4MDA4NiwgMHgyMDQxLCAweDAwMDAsIDB4MjUwOCwgMHgyMDI5LCAweDAwMDEsIDB4MDA5NiwgMHgyMDQ5LAotCTB4MDAwMCwgMHgwODBjLCAweDdiOWEsIDB4MDA5ZSwgMHgwMDhlLCAweDIwMzksIDB4MDAwMCwgMHgwODBjLAotCTB4N2MzNCwgMHgwODBjLCAweGE4MTcsIDB4MDA1ZSwgMHgwMDNlLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LAotCTB4YThhOSwgMHgwMTVlLCAweDAwY2UsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDAyZSwgMHgwMDA1LAotCTB4MDA3NiwgMHgwMDU2LCAweDYyMTgsIDB4MDA4NiwgMHgyMDQxLCAweDAwMDAsIDB4MjAyOSwgMHgwMDAxLAotCTB4MjAxOSwgMHgwMDQ4LCAweDAwOTYsIDB4MjA0OSwgMHgwMDAwLCAweDA4MGMsIDB4N2I5YSwgMHgwMDllLAotCTB4MDA4ZSwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg3YzM0LCAweDJjMjAsIDB4MDgwYywgMHhhODE3LAotCTB4MDA1ZSwgMHgwMDdlLCAweDAwMDUsIDB4MDAyNiwgMHgwMDQ2LCAweDAwNTYsIDB4MDA3NiwgMHgwMGM2LAotCTB4MDE1NiwgMHgyYzIwLCAweDIwYTksIDB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDAxNiwgMHgwMDM2LAotCTB4MDgwYywgMHg0Y2RjLCAweDExYzAsIDB4MmMxMCwgMHgwMDg2LCAweDIwNDEsIDB4MDAwMCwgMHgyODI4LAotCTB4MDA0NiwgMHgyMDIxLCAweDAwMDEsIDB4MDgwYywgMHhhYjk2LCAweDAwNGUsIDB4MDA5NiwgMHgyMDQ5LAotCTB4MDAwMCwgMHgwODBjLCAweDdiOWEsIDB4MDA5ZSwgMHgwMDhlLCAweDIwMzksIDB4MDAwMCwgMHgwODBjLAotCTB4N2MzNCwgMHgwODBjLCAweGE4MTcsIDB4MDAzZSwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHhhOGY2LAotCTB4MDE1ZSwgMHgwMGNlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLCAweDAwMmUsIDB4MDAwNSwgMHgwMDE2LAotCTB4MDBmNiwgMHgzODAwLCAweGQwOGMsIDB4MDEzMCwgMHhhZDgyLCAweDEwMDAsIDB4MDJiMCwgMHhhZDgyLAotCTB4YWQwMCwgMHgwMjMwLCAweGFkODIsIDB4ZTQwMCwgMHgwMjgwLCAweGFkODIsIDB4ZmZmZiwgMHgxMjY4LAotCTB4NjgwMCwgMHhhMDdkLCAweDAxMzgsIDB4NjgwMywgMHgwMDAwLCAweDZiNTIsIDB4MDgwYywgMHg1MTBjLAotCTB4MmY2OCwgMHgwY2IwLCAweDZiNTIsIDB4MDgwYywgMHg1MTBjLCAweDAwZmUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMDQ2LCAweDAwMzYsIDB4MjA2MSwgMHhiNDAwLCAweDIwNzEsIDB4YWQwMCwgMHg3NDQ0LAotCTB4NzA2NCwgMHg4MDAxLCAweGE0MDIsIDB4MTJkOCwgMHgyMTAwLCAweGFjMDYsIDB4MDE2OCwgMHg2MDAwLAotCTB4YTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4NjAwOCwgMHhhMjA2LCAweDExMzAsIDB4NjAxOCwgMHhhMWEwLAotCTB4MDAwNiwgMHgyNDI0LCAweGE0MDYsIDB4MDE0MCwgMHhhY2UwLCAweDAwMTgsIDB4MjAwMSwgMHhhZDE2LAotCTB4MjAwNCwgMHhhYzAyLCAweDEyMjAsIDB4MGMwOCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwOCwgMHhhMDA2LAotCTB4MDAzZSwgMHgwMDRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwMDYsIDB4MDgwYywgMHgxNWQ5LAotCTB4MDAwZSwgMHgwOTBjLCAweDE0ZjYsIDB4NjgzNywgMHgwMTBkLCAweDY4NWUsIDB4MDAyNiwgMHgyMDEwLAotCTB4MDgwYywgMHg5NTg2LCAweDIwMDEsIDB4MDAwMCwgMHgwMTIwLCAweDIyMDAsIDB4YTA4MCwgMHgwMDE0LAotCTB4MjAwNCwgMHgwMDJlLCAweDY4NGEsIDB4Njk1NiwgMHg2YzQ2LCAweDY4NGYsIDB4MDAwMCwgMHhhMDA2LAotCTB4NjhiMiwgMHg2ODAyLCAweDY4M2EsIDB4Njg1YSwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwgMHgwMDA1LAotCTB4NjcwMCwgMHhhNzg2LCAweDAwMDAsIDB4MDE1OCwgMHhhNzg2LCAweDAwMDEsIDB4MDE0MCwgMHhhNzg2LAotCTB4MDAwYSwgMHgwMTI4LCAweGE3ODYsIDB4MDAwOSwgMHgwMTEwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LAotCTB4MDBlNiwgMHg2MDE4LCAweDIwNzAsIDB4NzBhMCwgMHhhMjA2LCAweDAwZWUsIDB4MDAwNSwgMHgwMDE2LAotCTB4NjAwNCwgMHhhMDhlLCAweDAwMWUsIDB4MTFhMCwgMHg4MDA3LCAweDYxMzAsIDB4YTE4YywgMHgwMGZmLAotCTB4YTEwNSwgMHg2MDMyLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwgMHgwMDA1LAotCTB4MjAwMSwgMHhhZmE0LCAweDIwMDQsIDB4NjAxNiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywgMHg2YzUwLAotCTB4MDAxZSwgMHgwMDA1LCAweGUwMDAsIDB4ZTAwMCwgMHgwMDA1LCAweDYwMjAsIDB4ZDBlNCwgMHgwMTU4LAotCTB4ZDBjYywgMHgwMTE4LCAweDA4MGMsIDB4OTg2NiwgMHgwMDMwLCAweDA4MGMsIDB4YWJiNCwgMHgwODBjLAotCTB4NjYxOCwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHhhMjgwLCAweDAwMDcsIDB4MjAwNCwgMHhhMDg0LAotCTB4MDAwZiwgMHgwMDAyLCAweGE5ZTMsIDB4YTllMywgMHhhOWUzLCAweGE5ZTgsIDB4YTllMywgMHhhOWU1LAotCTB4YTllNSwgMHhhOWUzLCAweGE5ZTUsIDB4YTAwNiwgMHgwMDA1LCAweDAwYzYsIDB4MjI2MCwgMHgwMGNlLAotCTB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4YTI4MCwgMHgwMDA3LCAweDIwMDQsIDB4YTA4NCwgMHgwMDBmLAotCTB4MDAwMiwgMHhhOWZhLCAweGE5ZmEsIDB4YTlmYSwgMHhhOWZhLCAweGE5ZmEsIDB4YTlmYSwgMHhhYTA1LAotCTB4YTlmYSwgMHhhOWZhLCAweDYwMDcsIDB4MDAzYiwgMHg2MDJiLCAweDAwMDksIDB4NjAxMywgMHgyYTAwLAotCTB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwgMHgwMDA1LCAweDAwYzYsIDB4MjI2MCwgMHgwODBjLAotCTB4YWJiNCwgMHg2MDNmLCAweDAwMDAsIDB4NjAyMCwgMHhjMGY0LCAweGMwY2MsIDB4NjAyMiwgMHg2MDM3LAotCTB4MDAwMCwgMHgwMGNlLCAweDAwZDYsIDB4MjI2OCwgMHhhMTg2LCAweDAwMDcsIDB4MTkwNCwgMHhhYTYwLAotCTB4NjgxMCwgMHhhMDA1LCAweDAxMzgsIDB4YTA4MCwgMHgwMDEzLCAweDIwMDQsIDB4ZDBmYywgMHgxMTEwLAotCTB4MDBkZSwgMHgwOGMwLCAweDYwMDcsIDB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2E4LAotCTB4MDgwYywgMHg2YzUwLCAweDAwYzYsIDB4MmQ2MCwgMHg2MTAwLCAweGExODYsIDB4MDAwMiwgMHgxOTA0LAotCTB4YWFlNywgMHg2MDEwLCAweGEwMDUsIDB4MTEzOCwgMHg2MDAwLCAweGEwODYsIDB4MDAwNywgMHgxOTBjLAotCTB4MTRmNiwgMHgwODA0LCAweGFhZTcsIDB4YTA4YywgMHhmMDAwLCAweDExMzAsIDB4MDAyOCwgMHgyMDY4LAotCTB4NjgwMCwgMHhhMDA1LCAweDFkZTAsIDB4MmQwMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwNCwgMHhhMDg0LAotCTB4MDAwMywgMHhhMDg2LCAweDAwMDIsIDB4MTE4MCwgMHg2MDEwLCAweDIwNjgsIDB4Njg0YywgMHhjMGRjLAotCTB4YzBmNCwgMHg2ODRlLCAweDY4NTAsIDB4YzBmNCwgMHhjMGZjLCAweDY4NTIsIDB4MjAwOSwgMHgwMDQzLAotCTB4MDgwYywgMHhhM2RlLCAweDA4MDQsIDB4YWFlNywgMHgyMDA5LCAweDAwNDEsIDB4MDgwNCwgMHhhYWUxLAotCTB4YTE4NiwgMHgwMDA1LCAweDE1ZjAsIDB4NjgxMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwNCwgMHhkMGJjLAotCTB4MTExOCwgMHgwMGRlLCAweDA4MDQsIDB4YTlmYSwgMHhkMGI0LCAweDAxMjgsIDB4ZDBmYywgMHgwOTBjLAotCTB4MTRmNiwgMHgwODA0LCAweGFhMTgsIDB4NjAwNywgMHgwMDNhLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLAotCTB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDBjNiwgMHgyZDYwLCAweDYxMDAsIDB4YTE4NiwgMHgwMDAyLAotCTB4MDEyMCwgMHhhMTg2LCAweDAwMDQsIDB4MTkwNCwgMHhhYWU3LCAweDIwNzEsIDB4YWZmZCwgMHg3MDAwLAotCTB4YTA4NiwgMHgwMDAzLCAweDExMjgsIDB4NzAwNCwgMHhhYzA2LCAweDExMTAsIDB4NzAwMywgMHgwMDAwLAotCTB4NjgxMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwYywgMHhjMWY0LCAweGMxZGMsIDB4MjEwMiwgMHg4MDAwLAotCTB4MjAwYywgMHhjMWY0LCAweGMxZmMsIDB4YzFiYywgMHgyMTAyLCAweDIwMDksIDB4MDA0MiwgMHgwODA0LAotCTB4YWFlMSwgMHgwMDM2LCAweDAwZDYsIDB4MDBkNiwgMHgwODBjLCAweDE1ZDksIDB4MDAzZSwgMHgwOTBjLAotCTB4MTRmNiwgMHg2ODM3LCAweDAxMGQsIDB4NjgwMywgMHgwMDAwLCAweDY4M2IsIDB4MDAwMCwgMHg2ODViLAotCTB4MDAwMCwgMHg2YjVlLCAweDY4NTcsIDB4MDA0NSwgMHgyYzAwLCAweDY4NjIsIDB4NjAzNCwgMHg2ODcyLAotCTB4MjM2MCwgMHg2MDIwLCAweGMwZGQsIDB4NjAyMiwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LAotCTB4YTA4NCwgMHgwMGZmLCAweDgwMDcsIDB4NjM1MCwgMHg2YjRhLCAweDY4NDYsIDB4Njg0ZiwgMHgwMDAwLAotCTB4NmQ2YSwgMHg2ZTY2LCAweDY4NmYsIDB4MDAwMSwgMHgwODBjLCAweDUxMGMsIDB4MjAxOSwgMHgwMDQ1LAotCTB4NjAwOCwgMHgyMDY4LCAweDA4MGMsIDB4YTU2NiwgMHgyZDAwLCAweDYwMGEsIDB4NjAxZiwgMHgwMDA2LAotCTB4NjAwMywgMHgwMDA3LCAweDYwMTcsIDB4MDAwMCwgMHg2MDNmLCAweDAwMDAsIDB4MDBkZSwgMHgwMDNlLAotCTB4MDAzOCwgMHg2MDNmLCAweDAwMDAsIDB4NjAwMywgMHgwMDA3LCAweDA4MGMsIDB4YTNkZSwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMDA1LCAweGExODYsIDB4MDAxMywgMHgxMTI4LCAweDYwMDQsIDB4YTA4MiwgMHgwMDg1LAotCTB4MjAwOCwgMHgwMGMyLCAweGExODYsIDB4MDAyNywgMHgxMTc4LCAweDA4MGMsIDB4NmI3MywgMHgwMDM2LAotCTB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4YTkxZiwgMHgwMGRlLAotCTB4MDAzZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTQsIDB4MGQ3MCwgMHgwODBjLAotCTB4ODBiZSwgMHgwMDA1LCAweGFiMTMsIDB4YWIxMSwgMHhhYjExLCAweGFiMTEsIDB4YWIxMSwgMHhhYjExLAotCTB4YWIxMywgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDYwMDMsIDB4MDAwYywgMHgwODBjLAotCTB4NmM1MCwgMHgwMDA1LCAweGExODIsIDB4MDA4YywgMHgxMjIwLCAweGExODIsIDB4MDA4NSwgMHgwMjA4LAotCTB4MDAxYSwgMHgwODBjLCAweDgwYmUsIDB4MDAwNSwgMHhhYjJiLCAweGFiMmIsIDB4YWIyYiwgMHhhYjJiLAotCTB4YWIyZCwgMHhhYjRiLCAweGFiMmIsIDB4MDgwYywgMHgxNGY2LCAweDAwZDYsIDB4MmM2OCwgMHgwODBjLAotCTB4ODAyMiwgMHgwMWEwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMWUsIDB4MjAwOSwgMHhiMjhlLAotCTB4MjEwYywgMHg2MTM2LCAweDIwMDksIDB4YjI4ZiwgMHgyMTBjLCAweDYxM2EsIDB4NjAwYiwgMHhmZmZmLAotCTB4NjkxOCwgMHg2MTFhLCAweDYwMWYsIDB4MDAwNCwgMHgwODBjLCAweDY3YTgsIDB4MmQ2MCwgMHgwODBjLAotCTB4ODA3OCwgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDBlNiwgMHg2MDE4LAotCTB4MjA3MCwgMHg3MDAwLCAweGQwZWMsIDB4MDBlZSwgMHgwMDA1LCAweDYwMTAsIDB4YTA4MCwgMHgwMDEzLAotCTB4MjAwYywgMHhkMWVjLCAweDA1ZDAsIDB4MjAwMSwgMHhhZDcxLCAweDIwMDQsIDB4ZDBlYywgMHgwNWE4LAotCTB4NjAwMywgMHgwMDAyLCAweDYwMjAsIDB4YzBlNSwgMHg2MDIyLCAweGQxYWMsIDB4MDE4MCwgMHgwMGY2LAotCTB4MmM3OCwgMHgwODBjLCAweDUwMjUsIDB4MDBmZSwgMHgwMTUwLCAweDIwMDEsIDB4YWZhNSwgMHgyMDA0LAotCTB4NjAzZSwgMHgyMDA5LCAweGFkNzEsIDB4MjEwYywgMHhkMWY0LCAweDExZTgsIDB4MDA4MCwgMHgyMDA5LAotCTB4YWQ3MSwgMHgyMTBjLCAweGQxZjQsIDB4MDEyOCwgMHg2MDIwLCAweGMwZTQsIDB4NjAyMiwgMHhhMDA2LAotCTB4MDBhMCwgMHgyMDAxLCAweGFmYTUsIDB4MjAwYywgMHg4MTAzLCAweGExMDAsIDB4NjAzZSwgMHg2MDE4LAotCTB4YTA4OCwgMHgwMDJiLCAweDIxMDQsIDB4YTAwNSwgMHgwMTE4LCAweGEwODgsIDB4MDAwMywgMHgwY2QwLAotCTB4MmMwYSwgMHg2MDBmLCAweDAwMDAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LAotCTB4MDBlNiwgMHg2MTUwLCAweGEyZjAsIDB4MDAyYiwgMHgyZTA0LCAweDIwNjAsIDB4OGNmZiwgMHgwMTgwLAotCTB4ODRmZiwgMHgxMTE4LCAweDYwNTAsIDB4YTEwNiwgMHgxMTM4LCAweDYwMGMsIDB4MjA3MiwgMHgwODBjLAotCTB4NjYxOCwgMHgwODBjLCAweDgwNzgsIDB4MDAxMCwgMHhhY2YwLCAweDAwMDMsIDB4MmU2NCwgMHgwYzcwLAotCTB4MDBlZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGQ2LCAweDYwMTgsIDB4YTBlOCwgMHgwMDJiLAotCTB4MmQwNCwgMHhhMDA1LCAweDAxNDAsIDB4YWMwNiwgMHgwMTIwLCAweDJkMDQsIDB4YTBlOCwgMHgwMDAzLAotCTB4MGNiOCwgMHg2MDBjLCAweDIwNmEsIDB4MDBkZSwgMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwgMHgwMTU2LAotCTB4MjAxMSwgMHhhZDI3LCAweDIyMDQsIDB4YTA4NCwgMHgwMGZmLCAweDIwMTksIDB4YjI4ZSwgMHgyMzM0LAotCTB4YTYzNiwgMHgxMWQ4LCAweDgzMTgsIDB4MjMzNCwgMHgyMjA0LCAweGEwODQsIDB4ZmYwMCwgMHhhNjM2LAotCTB4MTFhMCwgMHgyMDExLCAweGIyOTAsIDB4NjAxOCwgMHhhMDk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LAotCTB4MDgwYywgMHg4YTdjLCAweDExNTAsIDB4MjAxMSwgMHhiMjk0LCAweDYwMTgsIDB4YTA5OCwgMHgwMDA2LAotCTB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4OGE3YywgMHgxMTAwLCAweDAxNWUsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwgMHgwODBjLCAweDQ4ZjUsIDB4MDgwYywgMHgyOGZhLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4NjAxOCwgMHgyMDcwLCAweDcwMDAsIDB4ZDBmYywgMHgwMTA4LAotCTB4MDAxMSwgMHgwMGVlLCAweDAwMDUsIDB4Njg1MCwgMHhjMGU1LCAweDY4NTIsIDB4MDAwNSwgMHgwMGU2LAotCTB4MDBjNiwgMHgwMDc2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsIDB4MDAxNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwMjksIDB4YWZkMCwgMHgyNTJjLCAweDIwMjEsIDB4YWZkNiwgMHgyNDI0LAotCTB4MjA2MSwgMHhiNDAwLCAweDIwNzEsIDB4YWQwMCwgMHg3NjQ0LCAweDcwNjQsIDB4YTYwNiwgMHgwNTc4LAotCTB4NjcxYywgMHhhNzg2LCAweDAwMDEsIDB4MDExOCwgMHhhNzg2LCAweDAwMDgsIDB4MTUwMCwgMHgyNTAwLAotCTB4YWMwNiwgMHgwMWU4LCAweDI0MDAsIDB4YWMwNiwgMHgwMWQwLCAweDA4MGMsIDB4YTk5MCwgMHgwMWI4LAotCTB4MDgwYywgMHhhOWEwLCAweDExYTAsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDQsIDB4MTEyMCwgMHgwMDE2LAotCTB4MDgwYywgMHgxOTBiLCAweDAwMWUsIDB4MDgwYywgMHg5Nzc4LCAweDExMTAsIDB4MDgwYywgMHgyYWZmLAotCTB4MDgwYywgMHg5Nzg5LCAweDExMTAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4OTc0ZSwgMHhhY2UwLAotCTB4MDAxOCwgMHgyMDAxLCAweGFkMTYsIDB4MjAwNCwgMHhhYzAyLCAweDEyMDgsIDB4MDg1OCwgMHgwMTJlLAotCTB4MDAxZSwgMHgwMDJlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsIDB4MDBjZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgwMTI2LCAweDAwMDYsIDB4MDBlNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZDQwLAotCTB4ZDVhNCwgMHgwMTE4LCAweDcwMzQsIDB4ODAwMCwgMHg3MDM2LCAweGQ1YjQsIDB4MDExOCwgMHg3MDMwLAotCTB4ODAwMCwgMHg3MDMyLCAweGQ1YWMsIDB4MDExOCwgMHgyMDcxLCAweGFkNGEsIDB4MDQ1MSwgMHgwMGVlLAotCTB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgwMDA2LCAweDAwZTYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA3MSwgMHhhZDQwLCAweGQ1YTQsIDB4MDExOCwgMHg3MDM0LCAweDgwMDAsIDB4NzAzNiwgMHhkNWI0LAotCTB4MDExOCwgMHg3MDMwLCAweDgwMDAsIDB4NzAzMiwgMHhkNWFjLCAweDAxMTgsIDB4MjA3MSwgMHhhZDRhLAotCTB4MDA4MSwgMHgwMGVlLCAweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsIDB4MDAwNiwgMHgwMGU2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWQ0MiwgMHgwMDIxLCAweDAwZWUsIDB4MDAwZSwgMHgwMTJlLAotCTB4MDAwNSwgMHgyZTA0LCAweDgwMDAsIDB4MjA3MiwgMHgxMjIwLCAweDhlNzAsIDB4MmUwNCwgMHg4MDAwLAotCTB4MjA3MiwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhhZDQwLCAweDBjOTksIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweGFkNDQsIDB4MGM2OSwgMHgwMGVlLCAweDAwMDUsIDB4MDAwMSwgMHgwMDAyLAotCTB4MDAwNCwgMHgwMDA4LCAweDAwMTAsIDB4MDAyMCwgMHgwMDQwLCAweDAwODAsIDB4MDEwMCwgMHgwMjAwLAotCTB4MDQwMCwgMHgwODAwLCAweDEwMDAsIDB4MjAwMCwgMHg0MDAwLCAweDgwMDAsIDB4ODUyOQotfTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKaW5kZXggZmE5MDFmZC4uZjE2ZjkyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInNhdGFfbXYiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjciCiAKIGVudW0gewogCS8qIEJBUidzIGFyZSBlbnVtZXJhdGVkIGluIHRlcm1zIG9mIHBjaV9yZXNvdXJjZV9zdGFydCgpIHRlcm1zICovCkBAIC01MCw2ICs1MCwxMiBAQAogCiAJTVZfUENJX1JFR19CQVNFCQk9IDAsCiAJTVZfSVJRX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAkvKiA2eHh4IHBhcnQgb25seSAqLworCU1WX0lSUV9DT0FMX0NBVVNFCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4MDgpLAorCU1WX0lSUV9DT0FMX0NBVVNFX0xPCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ODgpLAorCU1WX0lSUV9DT0FMX0NBVVNFX0hJCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAorCU1WX0lSUV9DT0FMX1RIUkVTSE9MRAkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweGNjKSwKKwlNVl9JUlFfQ09BTF9USU1FX1RIUkVTSE9MRAk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ZDApLAorCiAJTVZfU0FUQUhDMF9SRUdfQkFTRQk9IDB4MjAwMDAsCiAJTVZfRkxBU0hfQ1RMCQk9IDB4MTA0NmMsCiAJTVZfR1BJT19QT1JUX0NUTAk9IDB4MTA0ZjAsCkBAIC0zMDIsOSArMzA4LDYgQEAKIAlkbWFfYWRkcl90CQljcnBiX2RtYTsKIAlzdHJ1Y3QgbXZfc2cJCSpzZ190Ymw7CiAJZG1hX2FkZHJfdAkJc2dfdGJsX2RtYTsKLQotCXVuc2lnbmVkCQlyZXFfcHJvZHVjZXI7CQkvKiBjcCBvZiByZXFfaW5fcHRyICovCi0JdW5zaWduZWQJCXJzcF9jb25zdW1lcjsJCS8qIGNwIG9mIHJzcF9vdXRfcHRyICovCiAJdTMyCQkJcHBfZmxhZ3M7CiB9OwogCkBAIC0zNzgsNyArMzgxLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBNVl9VU0VfUV9ERVBUSCwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBNVl9NQVhfU0dfQ1QgLyAyLApAQCAtNzQ4LDcgKzc1MCw3IEBACiAJbXZfZHVtcF9tZW0obW1pb19iYXNlKzB4ZjAwLCAweDQpOwogCW12X2R1bXBfbWVtKG1taW9fYmFzZSsweDFkMDAsIDB4NmMpOwogCWZvciAoaGMgPSBzdGFydF9oYzsgaGMgPCBzdGFydF9oYyArIG51bV9oY3M7IGhjKyspIHsKLQkJaGNfYmFzZSA9IG12X2hjX2Jhc2UobW1pb19iYXNlLCBwb3J0ID4+IE1WX1BPUlRfSENfU0hJRlQpOworCQloY19iYXNlID0gbXZfaGNfYmFzZShtbWlvX2Jhc2UsIGhjKTsKIAkJRFBSSU5USygiSEMgcmVncyAoSEMgJWkpOlxuIiwgaGMpOwogCQltdl9kdW1wX21lbShoY19iYXNlLCAweDFjKTsKIAl9CkBAIC05MzgsOCArOTQwLDYgQEAKIAl3cml0ZWxmbChwcC0+Y3JwYl9kbWEgJiBFRE1BX1JTUF9RX0JBU0VfTE9fTUFTSywKIAkJIHBvcnRfbW1pbyArIEVETUFfUlNQX1FfT1VUX1BUUl9PRlMpOwogCi0JcHAtPnJlcV9wcm9kdWNlciA9IHBwLT5yc3BfY29uc3VtZXIgPSAwOwotCiAJLyogRG9uJ3QgdHVybiBvbiBFRE1BIGhlcmUuLi5kbyBpdCBiZWZvcmUgRE1BIGNvbW1hbmRzIG9ubHkuICBFbHNlCiAJICogd2UnbGwgYmUgdW5hYmxlIHRvIHNlbmQgbm9uLWRhdGEsIFBJTywgZXRjIGR1ZSB0byByZXN0cmljdGVkIGFjY2VzcwogCSAqIHRvIHNoYWRvdyByZWdzLgpAQCAtMTAyMywxNiArMTAyMywxNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBtdl9pbmNfcV9pbmRleCh1bnNpZ25lZCAqaW5kZXgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG12X2luY19xX2luZGV4KHVuc2lnbmVkIGluZGV4KQogewotCSppbmRleCA9ICgqaW5kZXggKyAxKSAmIE1WX01BWF9RX0RFUFRIX01BU0s7Ci0JcmV0dXJuICppbmRleDsKKwlyZXR1cm4gKGluZGV4ICsgMSkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXZfY3JxYl9wYWNrX2NtZCh1MTYgKmNtZHcsIHU4IGRhdGEsIHU4IGFkZHIsIHVuc2lnbmVkIGxhc3QpCiB7Ci0JKmNtZHcgPSBkYXRhIHwgKGFkZHIgPDwgQ1JRQl9DTURfQUREUl9TSElGVCkgfCBDUlFCX0NNRF9DUyB8CisJdTE2IHRtcCA9IGRhdGEgfCAoYWRkciA8PCBDUlFCX0NNRF9BRERSX1NISUZUKSB8IENSUUJfQ01EX0NTIHwKIAkJKGxhc3QgPyBDUlFCX0NNRF9MQVNUIDogMCk7CisJKmNtZHcgPSBjcHVfdG9fbGUxNih0bXApOwogfQogCiAvKioKQEAgLTEwNTQsMTUgKzEwNTQsMTEgQEAKIAl1MTYgKmN3OwogCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmOwogCXUxNiBmbGFncyA9IDA7CisJdW5zaWduZWQgaW5faW5kZXg7CiAKICAJaWYgKEFUQV9QUk9UX0RNQSAhPSBxYy0+dGYucHJvdG9jb2wpCiAJCXJldHVybjsKIAotCS8qIHRoZSByZXEgcHJvZHVjZXIgaW5kZXggc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHdlIHJlbWVtYmVyIGl0ICovCi0JV0FSTl9PTigoKHJlYWRsKG12X2FwX2Jhc2UocWMtPmFwKSArIEVETUFfUkVRX1FfSU5fUFRSX09GUykgPj4KLQkJICBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSAhPQotCQlwcC0+cmVxX3Byb2R1Y2VyKTsKLQogCS8qIEZpbGwgaW4gY29tbWFuZCByZXF1ZXN0IGJsb2NrCiAJICovCiAJaWYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKSkKQEAgLTEwNzAsMTMgKzEwNjYsMTcgQEAKIAlXQVJOX09OKE1WX01BWF9RX0RFUFRIIDw9IHFjLT50YWcpOwogCWZsYWdzIHw9IHFjLT50YWcgPDwgQ1JRQl9UQUdfU0hJRlQ7CiAKLQlwcC0+Y3JxYltwcC0+cmVxX3Byb2R1Y2VyXS5zZ19hZGRyID0KLQkJY3B1X3RvX2xlMzIocHAtPnNnX3RibF9kbWEgJiAweGZmZmZmZmZmKTsKLQlwcC0+Y3JxYltwcC0+cmVxX3Byb2R1Y2VyXS5zZ19hZGRyX2hpID0KLQkJY3B1X3RvX2xlMzIoKHBwLT5zZ190YmxfZG1hID4+IDE2KSA+PiAxNik7Ci0JcHAtPmNycWJbcHAtPnJlcV9wcm9kdWNlcl0uY3RybF9mbGFncyA9IGNwdV90b19sZTE2KGZsYWdzKTsKKwkvKiBnZXQgY3VycmVudCBxdWV1ZSBpbmRleCBmcm9tIGhhcmR3YXJlICovCisJaW5faW5kZXggPSAocmVhZGwobXZfYXBfYmFzZShhcCkgKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpCisJCQk+PiBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLOwogCi0JY3cgPSAmcHAtPmNycWJbcHAtPnJlcV9wcm9kdWNlcl0uYXRhX2NtZFswXTsKKwlwcC0+Y3JxYltpbl9pbmRleF0uc2dfYWRkciA9CisJCWNwdV90b19sZTMyKHBwLT5zZ190YmxfZG1hICYgMHhmZmZmZmZmZik7CisJcHAtPmNycWJbaW5faW5kZXhdLnNnX2FkZHJfaGkgPQorCQljcHVfdG9fbGUzMigocHAtPnNnX3RibF9kbWEgPj4gMTYpID4+IDE2KTsKKwlwcC0+Y3JxYltpbl9pbmRleF0uY3RybF9mbGFncyA9IGNwdV90b19sZTE2KGZsYWdzKTsKKworCWN3ID0gJnBwLT5jcnFiW2luX2luZGV4XS5hdGFfY21kWzBdOwogCXRmID0gJnFjLT50ZjsKIAogCS8qIFNhZGx5LCB0aGUgQ1JRQiBjYW5ub3QgYWNjb21vZGF0ZSBhbGwgcmVnaXN0ZXJzLS10aGVyZSBhcmUKQEAgLTExNDUsMTYgKzExNDUsMTIgQEAKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IG12X2NycWJfaWllICpjcnFiOwogCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmOworCXVuc2lnbmVkIGluX2luZGV4OwogCXUzMiBmbGFncyA9IDA7CiAKICAJaWYgKEFUQV9QUk9UX0RNQSAhPSBxYy0+dGYucHJvdG9jb2wpCiAJCXJldHVybjsKIAotCS8qIHRoZSByZXEgcHJvZHVjZXIgaW5kZXggc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHdlIHJlbWVtYmVyIGl0ICovCi0JV0FSTl9PTigoKHJlYWRsKG12X2FwX2Jhc2UocWMtPmFwKSArIEVETUFfUkVRX1FfSU5fUFRSX09GUykgPj4KLQkJICBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSAhPQotCQlwcC0+cmVxX3Byb2R1Y2VyKTsKLQogCS8qIEZpbGwgaW4gR2VuIElJRSBjb21tYW5kIHJlcXVlc3QgYmxvY2sKIAkgKi8KIAlpZiAoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpKQpAQCAtMTE2Myw3ICsxMTU5LDExIEBACiAJV0FSTl9PTihNVl9NQVhfUV9ERVBUSCA8PSBxYy0+dGFnKTsKIAlmbGFncyB8PSBxYy0+dGFnIDw8IENSUUJfVEFHX1NISUZUOwogCi0JY3JxYiA9IChzdHJ1Y3QgbXZfY3JxYl9paWUgKikgJnBwLT5jcnFiW3BwLT5yZXFfcHJvZHVjZXJdOworCS8qIGdldCBjdXJyZW50IHF1ZXVlIGluZGV4IGZyb20gaGFyZHdhcmUgKi8KKwlpbl9pbmRleCA9IChyZWFkbChtdl9hcF9iYXNlKGFwKSArIEVETUFfUkVRX1FfSU5fUFRSX09GUykKKwkJCT4+IEVETUFfUkVRX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0s7CisKKwljcnFiID0gKHN0cnVjdCBtdl9jcnFiX2lpZSAqKSAmcHAtPmNycWJbaW5faW5kZXhdOwogCWNycWItPmFkZHIgPSBjcHVfdG9fbGUzMihwcC0+c2dfdGJsX2RtYSAmIDB4ZmZmZmZmZmYpOwogCWNycWItPmFkZHJfaGkgPSBjcHVfdG9fbGUzMigocHAtPnNnX3RibF9kbWEgPj4gMTYpID4+IDE2KTsKIAljcnFiLT5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKQEAgLTEyMTEsNiArMTIxMSw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKHFjLT5hcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBxYy0+YXAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbl9pbmRleDsKIAl1MzIgaW5fcHRyOwogCiAJaWYgKEFUQV9QUk9UX0RNQSAhPSBxYy0+dGYucHJvdG9jb2wpIHsKQEAgLTEyMjIsMjMgKzEyMjMsMjAgQEAKIAkJcmV0dXJuIGF0YV9xY19pc3N1ZV9wcm90KHFjKTsKIAl9CiAKLQlpbl9wdHIgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpOworCWluX3B0ciAgID0gcmVhZGwocG9ydF9tbWlvICsgRURNQV9SRVFfUV9JTl9QVFJfT0ZTKTsKKwlpbl9pbmRleCA9IChpbl9wdHIgPj4gRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKIAotCS8qIHRoZSByZXEgcHJvZHVjZXIgaW5kZXggc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHdlIHJlbWVtYmVyIGl0ICovCi0JV0FSTl9PTigoKGluX3B0ciA+PiBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSAhPQotCQlwcC0+cmVxX3Byb2R1Y2VyKTsKIAkvKiB1bnRpbCB3ZSBkbyBxdWV1aW5nLCB0aGUgcXVldWUgc2hvdWxkIGJlIGVtcHR5IGF0IHRoaXMgcG9pbnQgKi8KLQlXQVJOX09OKCgoaW5fcHRyID4+IEVETUFfUkVRX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0spICE9Ci0JCSgocmVhZGwocG9ydF9tbWlvICsgRURNQV9SRVFfUV9PVVRfUFRSX09GUykgPj4KLQkJICBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSk7CisJV0FSTl9PTihpbl9pbmRleCAhPSAoKHJlYWRsKHBvcnRfbW1pbyArIEVETUFfUkVRX1FfT1VUX1BUUl9PRlMpCisJCT4+IEVETUFfUkVRX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0spKTsKIAotCW12X2luY19xX2luZGV4KCZwcC0+cmVxX3Byb2R1Y2VyKTsJLyogbm93IGluY3IgcHJvZHVjZXIgaW5kZXggKi8KKwlpbl9pbmRleCA9IG12X2luY19xX2luZGV4KGluX2luZGV4KTsJLyogbm93IGluY3IgcHJvZHVjZXIgaW5kZXggKi8KIAogCW12X3N0YXJ0X2RtYShwb3J0X21taW8sIHBwKTsKIAogCS8qIGFuZCB3cml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLwogCWluX3B0ciAmPSBFRE1BX1JFUV9RX0JBU0VfTE9fTUFTSzsKLQlpbl9wdHIgfD0gcHAtPnJlcV9wcm9kdWNlciA8PCBFRE1BX1JFUV9RX1BUUl9TSElGVDsKKwlpbl9wdHIgfD0gaW5faW5kZXggPDwgRURNQV9SRVFfUV9QVFJfU0hJRlQ7CiAJd3JpdGVsZmwoaW5fcHRyLCBwb3J0X21taW8gKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpOwogCiAJcmV0dXJuIDA7CkBAIC0xMjYxLDI4ICsxMjU5LDI2IEBACiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgb3V0X2luZGV4OwogCXUzMiBvdXRfcHRyOwogCXU4IGF0YV9zdGF0dXM7CiAKLQlvdXRfcHRyID0gcmVhZGwocG9ydF9tbWlvICsgRURNQV9SU1BfUV9PVVRfUFRSX09GUyk7CisJb3V0X3B0ciAgID0gcmVhZGwocG9ydF9tbWlvICsgRURNQV9SU1BfUV9PVVRfUFRSX09GUyk7CisJb3V0X2luZGV4ID0gKG91dF9wdHIgPj4gRURNQV9SU1BfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKIAotCS8qIHRoZSByZXNwb25zZSBjb25zdW1lciBpbmRleCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgd2UgcmVtZW1iZXIgaXQgKi8KLQlXQVJOX09OKCgob3V0X3B0ciA+PiBFRE1BX1JTUF9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSAhPQotCQlwcC0+cnNwX2NvbnN1bWVyKTsKLQotCWF0YV9zdGF0dXMgPSBwcC0+Y3JwYltwcC0+cnNwX2NvbnN1bWVyXS5mbGFncyA+PiBDUlBCX0ZMQUdfU1RBVFVTX1NISUZUOworCWF0YV9zdGF0dXMgPSBsZTE2X3RvX2NwdShwcC0+Y3JwYltvdXRfaW5kZXhdLmZsYWdzKQorCQkJCQk+PiBDUlBCX0ZMQUdfU1RBVFVTX1NISUZUOwogCiAJLyogaW5jcmVtZW50IG91ciBjb25zdW1lciBpbmRleC4uLiAqLwotCXBwLT5yc3BfY29uc3VtZXIgPSBtdl9pbmNfcV9pbmRleCgmcHAtPnJzcF9jb25zdW1lcik7CisJb3V0X2luZGV4ID0gbXZfaW5jX3FfaW5kZXgob3V0X2luZGV4KTsKIAogCS8qIGFuZCwgdW50aWwgd2UgZG8gTkNRLCB0aGVyZSBzaG91bGQgb25seSBiZSAxIENSUEIgd2FpdGluZyAqLwotCVdBUk5fT04oKChyZWFkbChwb3J0X21taW8gKyBFRE1BX1JTUF9RX0lOX1BUUl9PRlMpID4+Ci0JCSAgRURNQV9SU1BfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgIT0KLQkJcHAtPnJzcF9jb25zdW1lcik7CisJV0FSTl9PTihvdXRfaW5kZXggIT0gKChyZWFkbChwb3J0X21taW8gKyBFRE1BX1JTUF9RX0lOX1BUUl9PRlMpCisJCT4+IEVETUFfUlNQX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0spKTsKIAogCS8qIHdyaXRlIG91dCBvdXIgaW5jJ2QgY29uc3VtZXIgaW5kZXggc28gRURNQSBrbm93cyB3ZSdyZSBjYXVnaHQgdXAgKi8KIAlvdXRfcHRyICY9IEVETUFfUlNQX1FfQkFTRV9MT19NQVNLOwotCW91dF9wdHIgfD0gcHAtPnJzcF9jb25zdW1lciA8PCBFRE1BX1JTUF9RX1BUUl9TSElGVDsKKwlvdXRfcHRyIHw9IG91dF9pbmRleCA8PCBFRE1BX1JTUF9RX1BUUl9TSElGVDsKIAl3cml0ZWxmbChvdXRfcHRyLCBwb3J0X21taW8gKyBFRE1BX1JTUF9RX09VVF9QVFJfT0ZTKTsKIAogCS8qIFJldHVybiBBVEEgc3RhdHVzIHJlZ2lzdGVyIGZvciBjb21wbGV0ZWQgQ1JQQiAqLwpAQCAtMTI5Miw2ICsxMjg4LDcgQEAKIC8qKgogICogICAgICBtdl9lcnJfaW50ciAtIEhhbmRsZSBlcnJvciBpbnRlcnJ1cHRzIG9uIHRoZSBwb3J0CiAgKiAgICAgIEBhcDogQVRBIGNoYW5uZWwgdG8gbWFuaXB1bGF0ZQorICogICAgICBAcmVzZXRfYWxsb3dlZDogYm9vbDogMCA9PSBkb24ndCB0cmlnZ2VyIGZyb20gcmVzZXQgaGVyZQogICoKICAqICAgICAgSW4gbW9zdCBjYXNlcywganVzdCBjbGVhciB0aGUgaW50ZXJydXB0IGFuZCBtb3ZlIG9uLiAgSG93ZXZlciwKICAqICAgICAgc29tZSBjYXNlcyByZXF1aXJlIGFuIGVETUEgcmVzZXQsIHdoaWNoIGlzIGRvbmUgcmlnaHQgYmVmb3JlCkBAIC0xMzAyLDcgKzEyOTksNyBAQAogICogICAgICBMT0NLSU5HOgogICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLXN0YXRpYyB2b2lkIG12X2Vycl9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgdm9pZCBtdl9lcnJfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgcmVzZXRfYWxsb3dlZCkKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOwogCXUzMiBlZG1hX2Vycl9jYXVzZSwgc2VyciA9IDA7CkBAIC0xMzI0LDkgKzEzMjEsOCBAQAogCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfRVJSX0lSUV9DQVVTRV9PRlMpOwogCiAJLyogY2hlY2sgZm9yIGZhdGFsIGhlcmUgYW5kIHJlY292ZXIgaWYgbmVlZGVkICovCi0JaWYgKEVETUFfRVJSX0ZBVEFMICYgZWRtYV9lcnJfY2F1c2UpIHsKKwlpZiAocmVzZXRfYWxsb3dlZCAmJiAoRURNQV9FUlJfRkFUQUwgJiBlZG1hX2Vycl9jYXVzZSkpCiAJCW12X3N0b3BfYW5kX3Jlc2V0KGFwKTsKLQl9CiB9CiAKIC8qKgpAQCAtMTM3NSwxMiArMTM3MSwxMiBAQAogCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdF9zZXQtPnBvcnRzW3BvcnRdOwogCQlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAKLQkJaGFyZF9wb3J0ID0gcG9ydCAmIE1WX1BPUlRfTUFTSzsJLyogcmFuZ2UgMC0zICovCisJCWhhcmRfcG9ydCA9IG12X2hhcmRwb3J0X2Zyb21fcG9ydChwb3J0KTsgLyogcmFuZ2UgMC4uMyAqLwogCQloYW5kbGVkID0gMDsJLyogZW5zdXJlIGF0YV9zdGF0dXMgaXMgc2V0IGlmIGhhbmRsZWQrKyAqLwogCiAJCS8qIE5vdGUgdGhhdCBERVZfSVJRIG1pZ2h0IGhhcHBlbiBzcHVyaW91c2x5IGR1cmluZyBFRE1BLAotCQkgKiBhbmQgc2hvdWxkIGJlIGlnbm9yZWQgaW4gc3VjaCBjYXNlcy4gIFdlIGNvdWxkIG1hc2sgaXQsCi0JCSAqIGJ1dCBpdCdzIHByZXR0eSByYXJlIGFuZCBtYXkgbm90IGJlIHdvcnRoIHRoZSBvdmVyaGVhZC4KKwkJICogYW5kIHNob3VsZCBiZSBpZ25vcmVkIGluIHN1Y2ggY2FzZXMuCisJCSAqIFRoZSBjYXVzZSBvZiB0aGlzIGlzIHN0aWxsIHVuZGVyIGludmVzdGlnYXRpb24uCiAJCSAqLyAKIAkJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikgewogCQkJLyogRURNQTogY2hlY2sgZm9yIHJlc3BvbnNlIHF1ZXVlIGludGVycnVwdCAqLwpAQCAtMTM5NCw2ICsxMzkwLDExIEBACiAJCQkJYXRhX3N0YXR1cyA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKikKIAkJCQkJICAgYXAtPmlvYWRkci5zdGF0dXNfYWRkcik7CiAJCQkJaGFuZGxlZCA9IDE7CisJCQkJLyogaWdub3JlIHNwdXJpb3VzIGludHIgaWYgZHJpdmUgc3RpbGwgQlVTWSAqLworCQkJCWlmIChhdGFfc3RhdHVzICYgQVRBX0JVU1kpIHsKKwkJCQkJYXRhX3N0YXR1cyA9IDA7CisJCQkJCWhhbmRsZWQgPSAwOworCQkJCX0KIAkJCX0KIAkJfQogCkBAIC0xNDA3LDcgKzE0MDgsNyBAQAogCQkJc2hpZnQrKzsJLyogc2tpcCBiaXQgOCBpbiB0aGUgSEMgTWFpbiBJUlEgcmVnICovCiAJCX0KIAkJaWYgKChQT1JUMF9FUlIgPDwgc2hpZnQpICYgcmVsZXZhbnQpIHsKLQkJCW12X2Vycl9pbnRyKGFwKTsKKwkJCW12X2Vycl9pbnRyKGFwLCAxKTsKIAkJCWVycl9tYXNrIHw9IEFDX0VSUl9PVEhFUjsKIAkJCWhhbmRsZWQgPSAxOwogCQl9CkBAIC0xNDQ5LDYgKzE0NTAsNyBAQAogCXN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0ID0gZGV2X2luc3RhbmNlOwogCXVuc2lnbmVkIGludCBoYywgaGFuZGxlZCA9IDAsIG5faGNzOwogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhvc3Rfc2V0LT5tbWlvX2Jhc2U7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXY7CiAJdTMyIGlycV9zdGF0OwogCiAJaXJxX3N0YXQgPSByZWFkbChtbWlvICsgSENfTUFJTl9JUlFfQ0FVU0VfT0ZTKTsKQEAgLTE0NzAsNiArMTQ3MiwxNyBAQAogCQkJaGFuZGxlZCsrOwogCQl9CiAJfQorCisJaHByaXYgPSBob3N0X3NldC0+cHJpdmF0ZV9kYXRhOworCWlmIChJU182MFhYKGhwcml2KSkgeworCQkvKiBkZWFsIHdpdGggdGhlIGludGVycnVwdCBjb2FsZXNjaW5nIGJpdHMgKi8KKwkJaWYgKGlycV9zdGF0ICYgKFRSQU5fTE9fRE9ORSB8IFRSQU5fSElfRE9ORSB8IFBPUlRTXzBfN19DT0FMX0RPTkUpKSB7CisJCQl3cml0ZWxmbCgwLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0VfTE8pOworCQkJd3JpdGVsZmwoMCwgbW1pbyArIE1WX0lSUV9DT0FMX0NBVVNFX0hJKTsKKwkJCXdyaXRlbGZsKDAsIG1taW8gKyBNVl9JUlFfQ09BTF9DQVVTRSk7CisJCX0KKwl9CisKIAlpZiAoUENJX0VSUiAmIGlycV9zdGF0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBQQ0kgRVJST1I7IFBDSSBJUlEgY2F1c2U9MHglMDh4XG4iLAogCQkgICAgICAgcmVhZGwobW1pbyArIFBDSV9JUlFfQ0FVU0VfT0ZTKSk7CkBAIC0xODY4LDcgKzE4ODEsOCBAQAogCiAJaWYgKElTXzYwWFgoaHByaXYpKSB7CiAJCXUzMiBpZmN0bCA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSU5URVJGQUNFX0NUTCk7Ci0JCWlmY3RsIHw9ICgxIDw8IDEyKSB8ICgxIDw8IDcpOworCQlpZmN0bCB8PSAoMSA8PCA3KTsJCS8qIGVuYWJsZSBnZW4yaSBzcGVlZCAqLworCQlpZmN0bCA9IChpZmN0bCAmIDB4ZmZmKSB8IDB4OWIxMDAwOyAvKiBmcm9tIGNoaXAgc3BlYyAqLwogCQl3cml0ZWxmbChpZmN0bCwgcG9ydF9tbWlvICsgU0FUQV9JTlRFUkZBQ0VfQ1RMKTsKIAl9CiAKQEAgLTIwMjEsNiArMjAzNSw3IEBACiBzdGF0aWMgdm9pZCBtdl9lbmdfdGltZW91dChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IEVudGVyaW5nIG12X2VuZ190aW1lb3V0XG4iLGFwLT5pZCk7CiAJRFBSSU5USygiQWxsIHJlZ3MgQCBzdGFydCBvZiBlbmdfdGltZW91dFxuIik7CkBAIC0yMDMyLDExICsyMDQ3LDE2IEBACiAJICAgICAgIGFwLT5ob3N0X3NldC0+bW1pb19iYXNlLCBhcCwgcWMsIHFjLT5zY3NpY21kLAogCSAgICAgICAmcWMtPnNjc2ljbWQtPmNtbmQpOwogCi0JbXZfZXJyX2ludHIoYXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKKwltdl9lcnJfaW50cihhcCwgMCk7CiAJbXZfc3RvcF9hbmRfcmVzZXQoYXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCi0JcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9USU1FT1VUOwotCWF0YV9laF9xY19jb21wbGV0ZShxYyk7CisJV0FSTl9PTighKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSk7CisJaWYgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSB7CisJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfVElNRU9VVDsKKwkJYXRhX2VoX3FjX2NvbXBsZXRlKHFjKTsKKwl9CiB9CiAKIC8qKgpAQCAtMjIzMCw3ICsyMjUwLDggQEAKIAkJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfcG9ydF9iYXNlKG1taW8sIHBvcnQpOwogCiAJCQl1MzIgaWZjdGwgPSByZWFkbChwb3J0X21taW8gKyBTQVRBX0lOVEVSRkFDRV9DVEwpOwotCQkJaWZjdGwgfD0gKDEgPDwgMTIpOworCQkJaWZjdGwgfD0gKDEgPDwgNyk7CQkvKiBlbmFibGUgZ2VuMmkgc3BlZWQgKi8KKwkJCWlmY3RsID0gKGlmY3RsICYgMHhmZmYpIHwgMHg5YjEwMDA7IC8qIGZyb20gY2hpcCBzcGVjICovCiAJCQl3cml0ZWxmbChpZmN0bCwgcG9ydF9tbWlvICsgU0FUQV9JTlRFUkZBQ0VfQ1RMKTsKIAkJfQogCkBAIC0yMzMxLDYgKzIzNTIsNyBAQAogCWlmIChyYykgewogCQlyZXR1cm4gcmM7CiAJfQorCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKTsKIAlpZiAocmMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX252LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCmluZGV4IGY3N2JmMTguLjlmNTUzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfbnYuYwpAQCAtMjAxLDcgKzIwMSw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYwppbmRleCBjYzkyOGM2Li43ZWI2N2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCkBAIC0xMTEsNyArMTExLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKaW5kZXggOWZmZTFlZi4uODg2ZjM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCkBAIC0xMzIsNyArMTMyLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IFFTX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCmluZGV4IDE4YzI5NmMuLjEwNjYyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCkBAIC0xNDYsNyArMTQ2LDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKaW5kZXggMDY4Yzk4YS4uY2I5MDgyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCkBAIC0yODEsNyArMjgxLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApAQCAtNDU1LDcgKzQ1NCw3IEBACiAJICovCiAJbXNsZWVwKDEwKTsKIAotCXByYi0+Y3RybCA9IFBSQl9DVFJMX1NSU1Q7CisJcHJiLT5jdHJsID0gY3B1X3RvX2xlMTYoUFJCX0NUUkxfU1JTVCk7CiAJcHJiLT5maXNbMV0gPSAwOyAvKiBubyBQTSB5ZXQgKi8KIAogCXdyaXRlbCgodTMyKXBhZGRyLCBwb3J0ICsgUE9SVF9DTURfQUNUSVZBVEUpOwpAQCAtNTUyLDkgKzU1MSw5IEBACiAKIAkJaWYgKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9BVEFQSV9OT0RBVEEpIHsKIAkJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpCi0JCQkJcHJiLT5jdHJsID0gUFJCX0NUUkxfUEFDS0VUX1dSSVRFOworCQkJCXByYi0+Y3RybCA9IGNwdV90b19sZTE2KFBSQl9DVFJMX1BBQ0tFVF9XUklURSk7CiAJCQllbHNlCi0JCQkJcHJiLT5jdHJsID0gUFJCX0NUUkxfUEFDS0VUX1JFQUQ7CisJCQkJcHJiLT5jdHJsID0gY3B1X3RvX2xlMTYoUFJCX0NUUkxfUEFDS0VUX1JFQUQpOwogCQl9IGVsc2UKIAkJCXByYi0+Y3RybCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKaW5kZXggYWNjODQzOS4uNzI4NTMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKQEAgLTg3LDcgKzg3LDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IEFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYwppbmRleCA3MjRmMGVkLi41M2IwZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYwpAQCAtMjkwLDcgKzI5MCw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKaW5kZXggYWU3MGY2MC4uNDEzOWFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKQEAgLTE4Miw3ICsxODIsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCmluZGV4IDdhYzVhNWYuLjM4YjUyYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCkBAIC04MSw3ICs4MSw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKaW5kZXggNzkxYmY2NS4uOWU3YWU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKQEAgLTk0LDcgKzk0LDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYwppbmRleCA4MzZiYmJiLi44YTI5Y2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYwpAQCAtMjYzLDcgKzI2Myw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IDY5MTNiMDYuLjczOTk0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtNTY1LDcgKzU2NSw4IEBACiAJLyogCiAJICogSWYgU0NTSS0yIG9yIGxvd2VyLCBzdG9yZSB0aGUgTFVOIHZhbHVlIGluIGNtbmQuCiAJICovCi0JaWYgKGNtZC0+ZGV2aWNlLT5zY3NpX2xldmVsIDw9IFNDU0lfMikgeworCWlmIChjbWQtPmRldmljZS0+c2NzaV9sZXZlbCA8PSBTQ1NJXzIgJiYKKwkgICAgY21kLT5kZXZpY2UtPnNjc2lfbGV2ZWwgIT0gU0NTSV9VTktOT1dOKSB7CiAJCWNtZC0+Y21uZFsxXSA9IChjbWQtPmNtbmRbMV0gJiAweDFmKSB8CiAJCQkgICAgICAgKGNtZC0+ZGV2aWNlLT5sdW4gPDwgNSAmIDB4ZTApOwogCX0KQEAgLTEyNDMsNyArMTI0NCw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGNsZWFudXBfc3lzY3RsOwogCi0JZm9yX2VhY2hfY3B1KGkpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCUlOSVRfTElTVF9IRUFEKCZwZXJfY3B1KHNjc2lfZG9uZV9xLCBpKSk7CiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlNDU0kgc3Vic3lzdGVtIGluaXRpYWxpemVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwppbmRleCA4NGMzOTM3Li42MmY4Y2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCkBAIC01Niw2ICs1Niw4IEBACiAJeyJERU5PTiIsICJEUkQtMjVYIiwgIlYiLCBCTElTVF9OT0xVTn0sCQkJLyogbG9ja3MgdXAgKi8KIAl7IkhJVEFDSEkiLCAiREszMTJDIiwgIkNNODEiLCBCTElTVF9OT0xVTn0sCS8qIHJlc3BvbmRzIHRvIGFsbCBsdW4gKi8KIAl7IkhJVEFDSEkiLCAiREszMTRDIiwgIkNSMjEiLCBCTElTVF9OT0xVTn0sCS8qIHJlc3BvbmRzIHRvIGFsbCBsdW4gKi8KKwl7IklCTSIsICIyMTA0LURVMyIsIE5VTEwsIEJMSVNUX05PTFVOfSwJCS8qIGxvY2tzIHVwICovCisJeyJJQk0iLCAiMjEwNC1UVTMiLCBOVUxMLCBCTElTVF9OT0xVTn0sCQkvKiBsb2NrcyB1cCAqLwogCXsiSU1TIiwgIkNERDUyMS8xMCIsICIyLjA2IiwgQkxJU1RfTk9MVU59LAkvKiBsb2NrcyB1cCAqLwogCXsiTUFYVE9SIiwgIlhULTMyODAiLCAiUFIwMiIsIEJMSVNUX05PTFVOfSwJLyogbG9ja3MgdXAgKi8KIAl7Ik1BWFRPUiIsICJYVC00MzgwUyIsICJCM0MiLCBCTElTVF9OT0xVTn0sCS8qIGxvY2tzIHVwICovCkBAIC0xMzIsNyArMTM0LDkgQEAKIAl7IkNNRCIsICJDUkEtNzI4MCIsIE5VTEwsIEJMSVNUX1NQQVJTRUxVTn0sCS8qIENNRCBSQUlEIENvbnRyb2xsZXIgKi8KIAl7IkNOU0kiLCAiRzczMjQiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU59LAkvKiBDaGFwYXJyYWwgRzczMjQgUkFJRCAqLwogCXsiQ05TaSIsICJHODMyNCIsIE5VTEwsIEJMSVNUX1NQQVJTRUxVTn0sCS8qIENoYXBhcnJhbCBHODMyNCBSQUlEICovCi0JeyJDT01QQVEiLCAiTE9HSUNBTCBWT0xVTUUiLCBOVUxMLCBCTElTVF9GT1JDRUxVTn0sCisJeyJDT01QQVEiLCAiQVJSQVkgQ09OVFJPTExFUiIsIE5VTEwsIEJMSVNUX1NQQVJTRUxVTiB8IEJMSVNUX0xBUkdFTFVOIHwKKwkJQkxJU1RfTUFYXzUxMiB8IEJMSVNUX1JFUE9SVExVTjJ9LAkvKiBDb21wYXEgUkE0eDAwICovCisJeyJDT01QQVEiLCAiTE9HSUNBTCBWT0xVTUUiLCBOVUxMLCBCTElTVF9GT1JDRUxVTiB8IEJMSVNUX01BWF81MTJ9LCAvKiBDb21wYXEgUkE0eDAwICovCiAJeyJDT01QQVEiLCAiQ1IzNTAwIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LAogCXsiQ09NUEFRIiwgIk1TQTEwMDAiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU4gfCBCTElTVF9OT1NUQVJUT05BRER9LAogCXsiQ09NUEFRIiwgIk1TQTEwMDAgVk9MVU1FIiwgTlVMTCwgQkxJU1RfU1BBUlNFTFVOIHwgQkxJU1RfTk9TVEFSVE9OQUREfSwKQEAgLTE2MSw2ICsxNjUsNyBAQAogCXsiSFAiLCAiSFNWMTAwIiwgTlVMTCwgQkxJU1RfUkVQT1JUTFVOMiB8IEJMSVNUX05PU1RBUlRPTkFERH0sCiAJeyJIUCIsICJDMTU1N0EiLCBOVUxMLCBCTElTVF9GT1JDRUxVTn0sCiAJeyJIUCIsICJDMzMyMy0zMDAiLCAiNDI2OSIsIEJMSVNUX05PVFF9LAorCXsiSFAiLCAiQzU3MTNBIiwgTlVMTCwgQkxJU1RfTk9SRVBPUlRMVU59LAogCXsiSUJNIiwgIkF1U2FWMVMyIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LAogCXsiSUJNIiwgIlByb0ZpYnJlIDQwMDBSIiwgIioiLCBCTElTVF9TUEFSU0VMVU4gfCBCTElTVF9MQVJHRUxVTn0sCiAJeyJJQk0iLCAiMjEwNSIsIE5VTEwsIEJMSVNUX1JFVFJZX0hXRVJST1J9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggNWYwZmRmYi4uMWM3NTY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0xNTM3LDggKzE1MzcsOCBAQAogCQkgKiB3aGF0IHdlIG5lZWQgdG8gZG8gdG8gZ2V0IGl0IHVwIGFuZCBvbmxpbmUgYWdhaW4gKGlmIHdlIGNhbikuCiAJCSAqIElmIHdlIGZhaWwsIHdlIGVuZCB1cCB0YWtpbmcgdGhlIHRoaW5nIG9mZmxpbmUuCiAJCSAqLwotCQlpZiAoc2hvc3QtPmhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKSAKLQkJCXNob3N0LT5ob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcihzaG9zdCk7CisJCWlmIChzaG9zdC0+dHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcikKKwkJCXNob3N0LT50cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKHNob3N0KTsKIAkJZWxzZQogCQkJc2NzaV91bmphbV9ob3N0KHNob3N0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKaW5kZXggMzZlOTMwMC4uYTg5YWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCkBAIC0xNTgsMTgwICsxNTgsNiBAQAogRVhQT1JUX1NZTUJPTChzY3NpX3NldF9tZWRpdW1fcmVtb3ZhbCk7CiAKIC8qCi0gKiBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkIC0gdXNlcnMgc2hvdWxkIHVzZSB0aGUgc2NzaSBnZW5lcmljIChzZykKLSAqIGludGVyZmFjZSBpbnN0ZWFkLCBhcyB0aGlzIGlzIGEgbW9yZSBmbGV4aWJsZSBhcHByb2FjaCB0byBwZXJmb3JtaW5nCi0gKiBnZW5lcmljIFNDU0kgY29tbWFuZHMgb24gYSBkZXZpY2UuCi0gKgotICogVGhlIHN0cnVjdHVyZSB0aGF0IHdlIGFyZSBwYXNzZWQgc2hvdWxkIGxvb2sgbGlrZToKLSAqCi0gKiBzdHJ1Y3Qgc2RhdGEgewotICogIHVuc2lnbmVkIGludCBpbmxlbjsgICAgICBbaV0gTGVuZ3RoIG9mIGRhdGEgdG8gYmUgd3JpdHRlbiB0byBkZXZpY2UgCi0gKiAgdW5zaWduZWQgaW50IG91dGxlbjsgICAgIFtpXSBMZW5ndGggb2YgZGF0YSB0byBiZSByZWFkIGZyb20gZGV2aWNlIAotICogIHVuc2lnbmVkIGNoYXIgY21kW3hdOyAgICBbaV0gU0NTSSBjb21tYW5kICg2IDw9IHggPD0gMTIpLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICBbb10gRGF0YSByZWFkIGZyb20gZGV2aWNlIHN0YXJ0cyBoZXJlLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICBbb10gT24gZXJyb3IsIHNlbnNlIGJ1ZmZlciBzdGFydHMgaGVyZS4KLSAqICB1bnNpZ25lZCBjaGFyIHdkYXRhW3ldOyAgW2ldIERhdGEgd3JpdHRlbiB0byBkZXZpY2Ugc3RhcnRzIGhlcmUuCi0gKiB9OwotICogTm90ZXM6Ci0gKiAgIC0gIFRoZSBTQ1NJIGNvbW1hbmQgbGVuZ3RoIGlzIGRldGVybWluZWQgYnkgZXhhbWluaW5nIHRoZSAxc3QgYnl0ZQotICogICAgICBvZiB0aGUgZ2l2ZW4gY29tbWFuZC4gVGhlcmUgaXMgbm8gd2F5IHRvIG92ZXJyaWRlIHRoaXMuCi0gKiAgIC0gIERhdGEgdHJhbnNmZXJzIGFyZSBsaW1pdGVkIHRvIFBBR0VfU0laRSAoNEsgb24gaTM4NiwgOEsgb24gYWxwaGEpLgotICogICAtICBUaGUgbGVuZ3RoICh4ICsgeSkgbXVzdCBiZSBhdCBsZWFzdCBPTUFYX1NCX0xFTiBieXRlcyBsb25nIHRvCi0gKiAgICAgIGFjY29tbW9kYXRlIHRoZSBzZW5zZSBidWZmZXIgd2hlbiBhbiBlcnJvciBvY2N1cnMuCi0gKiAgICAgIFRoZSBzZW5zZSBidWZmZXIgaXMgdHJ1bmNhdGVkIHRvIE9NQVhfU0JfTEVOICgxNikgYnl0ZXMgc28gdGhhdAotICogICAgICBvbGQgY29kZSB3aWxsIG5vdCBiZSBzdXJwcmlzZWQuCi0gKiAgIC0gIElmIGEgVW5peCBlcnJvciBvY2N1cnMgKGUuZy4gRU5PTUVNKSB0aGVuIHRoZSB1c2VyIHdpbGwgcmVjZWl2ZQotICogICAgICBhIG5lZ2F0aXZlIHJldHVybiBhbmQgdGhlIFVuaXggZXJyb3IgY29kZSBpbiAnZXJybm8nLiAKLSAqICAgICAgSWYgdGhlIFNDU0kgY29tbWFuZCBzdWNjZWVkcyB0aGVuIDAgaXMgcmV0dXJuZWQuCi0gKiAgICAgIFBvc2l0aXZlIG51bWJlcnMgcmV0dXJuZWQgYXJlIHRoZSBjb21wYWN0ZWQgU0NTSSBlcnJvciBjb2RlcyAoNCAKLSAqICAgICAgYnl0ZXMgaW4gb25lIGludCkgd2hlcmUgdGhlIGxvd2VzdCBieXRlIGlzIHRoZSBTQ1NJIHN0YXR1cy4KLSAqICAgICAgU2VlIHRoZSBkcml2ZXJzL3Njc2kvc2NzaS5oIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcy4KLSAqCi0gKi8KLSNkZWZpbmUgT01BWF9TQl9MRU4gMTYJCS8qIE9sZCBzZW5zZSBidWZmZXIgbGVuZ3RoICovCi0KLWludCBzY3NpX2lvY3RsX3NlbmRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkgICAgc3RydWN0IHNjc2lfaW9jdGxfY29tbWFuZCBfX3VzZXIgKnNpYykKLXsKLQljaGFyICpidWY7Ci0JdW5zaWduZWQgY2hhciBjbWRbTUFYX0NPTU1BTkRfU0laRV07Ci0JdW5zaWduZWQgY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwotCWNoYXIgX191c2VyICpjbWRfaW47Ci0JdW5zaWduZWQgY2hhciBvcGNvZGU7Ci0JdW5zaWduZWQgaW50IGlubGVuLCBvdXRsZW4sIGNtZGxlbjsKLQl1bnNpZ25lZCBpbnQgbmVlZGVkLCBidWZfbmVlZGVkOwotCWludCB0aW1lb3V0LCByZXRyaWVzLCByZXN1bHQ7Ci0JaW50IGRhdGFfZGlyZWN0aW9uOwotCWdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDsKLQotCWlmICghc2ljKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzZGV2LT5ob3N0LT51bmNoZWNrZWRfaXNhX2RtYSkKLQkJZ2ZwX21hc2sgfD0gR0ZQX0RNQTsKLQotCS8qCi0JICogVmVyaWZ5IHRoYXQgd2UgY2FuIHJlYWQgYXQgbGVhc3QgdGhpcyBtdWNoLgotCSAqLwotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzaWMsIHNpemVvZihTY3NpX0lvY3RsX0NvbW1hbmQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZihfX2dldF91c2VyKGlubGVuLCAmc2ljLT5pbmxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCQkKLQlpZihfX2dldF91c2VyKG91dGxlbiwgJnNpYy0+b3V0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSAqIFdlIGRvIG5vdCB0cmFuc2ZlciBtb3JlIHRoYW4gTUFYX0JVRiB3aXRoIHRoaXMgaW50ZXJmYWNlLgotCSAqIElmIHRoZSB1c2VyIG5lZWRzIHRvIHRyYW5zZmVyIG1vcmUgZGF0YSB0aGFuIHRoaXMsIHRoZXkKLQkgKiBzaG91bGQgdXNlIHNjc2lfZ2VuZXJpY3MgKHNnKSBpbnN0ZWFkLgotCSAqLwotCWlmIChpbmxlbiA+IE1BWF9CVUYpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChvdXRsZW4gPiBNQVhfQlVGKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNtZF9pbiA9IHNpYy0+ZGF0YTsKLQlpZihnZXRfdXNlcihvcGNvZGUsIGNtZF9pbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JbmVlZGVkID0gYnVmX25lZWRlZCA9IChpbmxlbiA+IG91dGxlbiA/IGlubGVuIDogb3V0bGVuKTsKLQlpZiAoYnVmX25lZWRlZCkgewotCQlidWZfbmVlZGVkID0gKGJ1Zl9uZWVkZWQgKyA1MTEpICYgfjUxMTsKLQkJaWYgKGJ1Zl9uZWVkZWQgPiBNQVhfQlVGKQotCQkJYnVmX25lZWRlZCA9IE1BWF9CVUY7Ci0JCWJ1ZiA9IGt6YWxsb2MoYnVmX25lZWRlZCwgZ2ZwX21hc2spOwotCQlpZiAoIWJ1ZikKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoaW5sZW4gPT0gMCkgewotCQkJZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7Ci0JCX0gZWxzZSBpZiAob3V0bGVuID09IDAgKSB7Ci0JCQlkYXRhX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogQ2FuIHRoaXMgZXZlciBoYXBwZW4/Ci0JCQkgKi8KLQkJCWRhdGFfZGlyZWN0aW9uID0gRE1BX0JJRElSRUNUSU9OQUw7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCWJ1ZiA9IE5VTEw7Ci0JCWRhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7Ci0JfQotCi0JLyoKLQkgKiBPYnRhaW4gdGhlIGNvbW1hbmQgZnJvbSB0aGUgdXNlcidzIGFkZHJlc3Mgc3BhY2UuCi0JICovCi0JY21kbGVuID0gQ09NTUFORF9TSVpFKG9wY29kZSk7Ci0JCi0JcmVzdWx0ID0gLUVGQVVMVDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBjbWRfaW4sIGNtZGxlbiArIGlubGVuKSkKLQkJZ290byBlcnJvcjsKLQotCWlmKF9fY29weV9mcm9tX3VzZXIoY21kLCBjbWRfaW4sIGNtZGxlbikpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKgotCSAqIE9idGFpbiB0aGUgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2UgKGlmIGFueSkuCi0JICovCi0KLQlpZihpbmxlbiAmJiBjb3B5X2Zyb21fdXNlcihidWYsIGNtZF9pbiArIGNtZGxlbiwgaW5sZW4pKQotCQlnb3RvIGVycm9yOwotCi0Jc3dpdGNoIChvcGNvZGUpIHsKLQljYXNlIFNFTkRfRElBR05PU1RJQzoKLQljYXNlIEZPUk1BVF9VTklUOgotCQl0aW1lb3V0ID0gRk9STUFUX1VOSVRfVElNRU9VVDsKLQkJcmV0cmllcyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU1RBUlRfU1RPUDoKLQkJdGltZW91dCA9IFNUQVJUX1NUT1BfVElNRU9VVDsKLQkJcmV0cmllcyA9IE5PUk1BTF9SRVRSSUVTOwotCQlicmVhazsKLQljYXNlIE1PVkVfTUVESVVNOgotCQl0aW1lb3V0ID0gTU9WRV9NRURJVU1fVElNRU9VVDsKLQkJcmV0cmllcyA9IE5PUk1BTF9SRVRSSUVTOwotCQlicmVhazsKLQljYXNlIFJFQURfRUxFTUVOVF9TVEFUVVM6Ci0JCXRpbWVvdXQgPSBSRUFEX0VMRU1FTlRfU1RBVFVTX1RJTUVPVVQ7Ci0JCXJldHJpZXMgPSBOT1JNQUxfUkVUUklFUzsKLQkJYnJlYWs7Ci0JY2FzZSBSRUFEX0RFRkVDVF9EQVRBOgotCQl0aW1lb3V0ID0gUkVBRF9ERUZFQ1RfREFUQV9USU1FT1VUOwotCQlyZXRyaWVzID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJdGltZW91dCA9IElPQ1RMX05PUk1BTF9USU1FT1VUOwotCQlyZXRyaWVzID0gTk9STUFMX1JFVFJJRVM7Ci0JCWJyZWFrOwotCX0KLQotCXJlc3VsdCA9IHNjc2lfZXhlY3V0ZShzZGV2LCBjbWQsIGRhdGFfZGlyZWN0aW9uLCBidWYsIG5lZWRlZCwKLQkJCSAgICAgIHNlbnNlLCB0aW1lb3V0LCByZXRyaWVzLCAwKTsKLQotCS8qIAotCSAqIElmIHRoZXJlIHdhcyBhbiBlcnJvciBjb25kaXRpb24sIHBhc3MgdGhlIGluZm8gYmFjayB0byB0aGUgdXNlci4gCi0JICovCi0JaWYgKHJlc3VsdCkgewotCQlpbnQgc2JfbGVuID0gc2l6ZW9mKCpzZW5zZSk7Ci0KLQkJc2JfbGVuID0gKHNiX2xlbiA+IE9NQVhfU0JfTEVOKSA/IE9NQVhfU0JfTEVOIDogc2JfbGVuOwotCQlpZiAoY29weV90b191c2VyKGNtZF9pbiwgc2Vuc2UsIHNiX2xlbikpCi0JCQlyZXN1bHQgPSAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCWlmIChvdXRsZW4gJiYgY29weV90b191c2VyKGNtZF9pbiwgYnVmLCBvdXRsZW4pKQotCQkJcmVzdWx0ID0gLUVGQVVMVDsKLQl9CQotCi1lcnJvcjoKLQlrZnJlZShidWYpOwotCXJldHVybiByZXN1bHQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc2lfaW9jdGxfc2VuZF9jb21tYW5kKTsKLQotLyoKICAqIFRoZSBzY3NpX2lvY3RsX2dldF9wY2koKSBmdW5jdGlvbiBwbGFjZXMgaW50byBhcmcgdGhlIHZhbHVlCiAgKiBwY2lfZGV2OjpzbG90X25hbWUgKDggY2hhcmFjdGVycykgZm9yIHRoZSBQQ0kgZGV2aWNlIChpZiBhbnkpLgogICogUmV0dXJuczogMCBvbiBzdWNjZXNzCkBAIC00MDksNyArMjM1LDcgQEAKIAljYXNlIFNDU0lfSU9DVExfU0VORF9DT01NQU5EOgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJcmV0dXJuIHNjc2lfaW9jdGxfc2VuZF9jb21tYW5kKHNkZXYsIGFyZyk7CisJCXJldHVybiBzZ19zY3NpX2lvY3RsKE5VTEwsIHNkZXYtPnJlcXVlc3RfcXVldWUsIE5VTEwsIGFyZyk7CiAJY2FzZSBTQ1NJX0lPQ1RMX0RPT1JMT0NLOgogCQlyZXR1cm4gc2NzaV9zZXRfbWVkaXVtX3JlbW92YWwoc2RldiwgU0NTSV9SRU1PVkFMX1BSRVZFTlQpOwogCWNhc2UgU0NTSV9JT0NUTF9ET09SVU5MT0NLOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA4ZjAxMGEzLi5mYWVlNDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCQkgICBpbnQgbnNlZ3MsIHVuc2lnbmVkIGJ1ZmZsZW4sIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJxLT5xOwotCWludCBucl9wYWdlcyA9IChidWZmbGVuICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKwlpbnQgbnJfcGFnZXMgPSAoYnVmZmxlbiArIHNnbFswXS5vZmZzZXQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGludCBkYXRhX2xlbiA9IDAsIGxlbiwgYnl0ZXMsIG9mZjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOwpAQCAtMTA2NywxNiArMTA2NywyOSBAQAogCQkJYnJlYWs7CiAJCWNhc2UgTk9UX1JFQURZOgogCQkJLyoKLQkJCSAqIElmIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVjb21pbmcgcmVhZHksCi0JCQkgKiByZXRyeS4KKwkJCSAqIElmIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVjb21pbmcKKwkJCSAqIHJlYWR5LCBvciBoYXMgYSB0ZW1wb3JhcnkgYmxvY2thZ2UsIHJldHJ5LgogCQkJICovCi0JCQlpZiAoc3NoZHIuYXNjID09IDB4MDQgJiYgc3NoZHIuYXNjcSA9PSAweDAxKSB7Ci0JCQkJc2NzaV9yZXF1ZXVlX2NvbW1hbmQocSwgY21kKTsKLQkJCQlyZXR1cm47CisJCQlpZiAoc3NoZHIuYXNjID09IDB4MDQpIHsKKwkJCQlzd2l0Y2ggKHNzaGRyLmFzY3EpIHsKKwkJCQljYXNlIDB4MDE6IC8qIGJlY29taW5nIHJlYWR5ICovCisJCQkJY2FzZSAweDA0OiAvKiBmb3JtYXQgaW4gcHJvZ3Jlc3MgKi8KKwkJCQljYXNlIDB4MDU6IC8qIHJlYnVpbGQgaW4gcHJvZ3Jlc3MgKi8KKwkJCQljYXNlIDB4MDY6IC8qIHJlY2FsY3VsYXRpb24gaW4gcHJvZ3Jlc3MgKi8KKwkJCQljYXNlIDB4MDc6IC8qIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyAqLworCQkJCWNhc2UgMHgwODogLyogTG9uZyB3cml0ZSBpbiBwcm9ncmVzcyAqLworCQkJCWNhc2UgMHgwOTogLyogc2VsZiB0ZXN0IGluIHByb2dyZXNzICovCisJCQkJCXNjc2lfcmVxdWV1ZV9jb21tYW5kKHEsIGNtZCk7CisJCQkJCXJldHVybjsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CiAJCQl9Ci0JCQlpZiAoIShyZXEtPmZsYWdzICYgUkVRX1FVSUVUKSkKKwkJCWlmICghKHJlcS0+ZmxhZ3MgJiBSRVFfUVVJRVQpKSB7CiAJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCi0JCQkJCSAgICJEZXZpY2Ugbm90IHJlYWR5LlxuIik7CisJCQkJCSAgICJEZXZpY2Ugbm90IHJlYWR5OiAiKTsKKwkJCQlzY3NpX3ByaW50X3NlbnNlX2hkcigiIiwgJnNzaGRyKTsKKwkJCX0KIAkJCXNjc2lfZW5kX3JlcXVlc3QoY21kLCAwLCB0aGlzX2NvdW50LCAxKTsKIAkJCXJldHVybjsKIAkJY2FzZSBWT0xVTUVfT1ZFUkZMT1c6CkBAIC0xNDc5LDYgKzE0OTIsOCBAQAogc3RhdGljIHZvaWQgc2NzaV9raWxsX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgcmVxdWVzdF9xdWV1ZV90ICpxKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHJlcS0+c3BlY2lhbDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmljZTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAKIAlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJlcSk7CiAKQEAgLTE0OTEsNiArMTUwNiwxOSBAQAogCXNjc2lfaW5pdF9jbWRfZXJyaChjbWQpOwogCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJYXRvbWljX2luYygmY21kLT5kZXZpY2UtPmlvcmVxdWVzdF9jbnQpOworCisJLyoKKwkgKiBTQ1NJIHJlcXVlc3QgY29tcGxldGlvbiBwYXRoIHdpbGwgZG8gc2NzaV9kZXZpY2VfdW5idXN5KCksCisJICogYnVtcCBidXN5IGNvdW50cy4gIFRvIGJ1bXAgdGhlIGNvdW50ZXJzLCB3ZSBuZWVkIHRvIGRhbmNlCisJICogd2l0aCB0aGUgbG9ja3MgYXMgbm9ybWFsIGlzc3VlIHBhdGggZG9lcy4KKwkgKi8KKwlzZGV2LT5kZXZpY2VfYnVzeSsrOworCXNwaW5fdW5sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOworCXNwaW5fbG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKKwlzaG9zdC0+aG9zdF9idXN5Kys7CisJc3Bpbl91bmxvY2soc2hvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOworCiAJX19zY3NpX2RvbmUoY21kKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmggYi9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzZlNmUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmgKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBfU0NTSV9TQVNfSU5URVJOQUxfSAorI2RlZmluZSBfU0NTSV9TQVNfSU5URVJOQUxfSAorCisjZGVmaW5lIFNBU19IT1NUX0FUVFJTCQkwCisjZGVmaW5lIFNBU19QT1JUX0FUVFJTCQkxNworI2RlZmluZSBTQVNfUlBPUlRfQVRUUlMJCTcKKyNkZWZpbmUgU0FTX0VORF9ERVZfQVRUUlMJMworI2RlZmluZSBTQVNfRVhQQU5ERVJfQVRUUlMJNworCitzdHJ1Y3Qgc2FzX2ludGVybmFsIHsKKwlzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgdDsKKwlzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlICpmOworCXN0cnVjdCBzYXNfZG9tYWluX2Z1bmN0aW9uX3RlbXBsYXRlICpkZnQ7CisKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2hvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlNdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcGh5X2F0dHJzW1NBU19QT1JUX0FUVFJTXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3JwaHlfYXR0cnNbU0FTX1JQT1JUX0FUVFJTXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2VuZF9kZXZfYXR0cnNbU0FTX0VORF9ERVZfQVRUUlNdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfZXhwYW5kZXJfYXR0cnNbU0FTX0VYUEFOREVSX0FUVFJTXTsKKworCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHBoeV9hdHRyX2NvbnQ7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgcnBoeV9hdHRyX2NvbnQ7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgZW5kX2Rldl9hdHRyX2NvbnQ7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgZXhwYW5kZXJfYXR0cl9jb250OworCisJLyoKKwkgKiBUaGUgYXJyYXkgb2YgbnVsbCB0ZXJtaW5hdGVkIHBvaW50ZXJzIHRvIGF0dHJpYnV0ZXMKKwkgKiBuZWVkZWQgYnkgc2NzaV9zeXNmcy5jCisJICovCisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmhvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcGh5X2F0dHJzW1NBU19QT1JUX0FUVFJTICsgMV07CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnJwaHlfYXR0cnNbU0FTX1JQT1JUX0FUVFJTICsgMV07CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmVuZF9kZXZfYXR0cnNbU0FTX0VORF9ERVZfQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZXhwYW5kZXJfYXR0cnNbU0FTX0VYUEFOREVSX0FUVFJTICsgMV07Cit9OworI2RlZmluZSB0b19zYXNfaW50ZXJuYWwodG1wbCkJY29udGFpbmVyX29mKHRtcGwsIHN0cnVjdCBzYXNfaW50ZXJuYWwsIHQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IGYxNDk0NTkuLjFhNTQ3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTY3Myw2ICs2NzMsNyBAQAogCWNhc2UgVFlQRV9NRURJVU1fQ0hBTkdFUjoKIAljYXNlIFRZUEVfRU5DTE9TVVJFOgogCWNhc2UgVFlQRV9DT01NOgorCWNhc2UgVFlQRV9SQUlEOgogCWNhc2UgVFlQRV9SQkM6CiAJCXNkZXYtPndyaXRlYWJsZSA9IDE7CiAJCWJyZWFrOwpAQCAtNzM4LDYgKzczOSwxMyBAQAogCQlzZGV2LT5zZWxlY3Rfbm9fYXRuID0gMTsKIAogCS8qCisJICogTWF4aW11bSA1MTIgc2VjdG9yIHRyYW5zZmVyIGxlbmd0aAorCSAqIGJyb2tlbiBSQTR4MDAgQ29tcGFxIERpc2sgQXJyYXkKKwkgKi8KKwlpZiAoKmJmbGFncyAmIEJMSVNUX01BWF81MTIpCisJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA1MTIpOworCisJLyoKIAkgKiBTb21lIGRldmljZXMgbWF5IG5vdCB3YW50IHRvIGhhdmUgYSBzdGFydCBjb21tYW5kIGF1dG9tYXRpY2FsbHkKIAkgKiBpc3N1ZWQgd2hlbiBhIGRldmljZSBpcyBhZGRlZC4KIAkgKi8KQEAgLTExMjMsMTAgKzExMzEsMTMgQEAKIAkgKiBBbHNvIGFsbG93IFNDU0ktMiBpZiBCTElTVF9SRVBPUlRMVU4yIGlzIHNldCBhbmQgaG9zdCBhZGFwdGVyIGRvZXMKIAkgKiBzdXBwb3J0IG1vcmUgdGhhbiA4IExVTnMuCiAJICovCi0JaWYgKChiZmxhZ3MgJiBCTElTVF9OT1JFUE9SVExVTikgfHwgCi0JICAgICBzdGFyZ2V0LT5zY3NpX2xldmVsIDwgU0NTSV8yIHx8Ci0JICAgIChzdGFyZ2V0LT5zY3NpX2xldmVsIDwgU0NTSV8zICYmIAotCSAgICAgKCEoYmZsYWdzICYgQkxJU1RfUkVQT1JUTFVOMikgfHwgc2hvc3QtPm1heF9sdW4gPD0gOCkpICkKKwlpZiAoYmZsYWdzICYgQkxJU1RfTk9SRVBPUlRMVU4pCisJCXJldHVybiAxOworCWlmIChzdGFyZ2V0LT5zY3NpX2xldmVsIDwgU0NTSV8yICYmCisJICAgIHN0YXJnZXQtPnNjc2lfbGV2ZWwgIT0gU0NTSV9VTktOT1dOKQorCQlyZXR1cm4gMTsKKwlpZiAoc3RhcmdldC0+c2NzaV9sZXZlbCA8IFNDU0lfMyAmJgorCSAgICAoIShiZmxhZ3MgJiBCTElTVF9SRVBPUlRMVU4yKSB8fCBzaG9zdC0+bWF4X2x1biA8PSA4KSkKIAkJcmV0dXJuIDE7CiAJaWYgKGJmbGFncyAmIEJMSVNUX05PTFVOKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggOGRiNjU2Mi4uOTVjNTQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgInNjc2lfcHJpdi5oIgogCitzdGF0aWMgaW50IGZjX3F1ZXVlX3dvcmsoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CisKIC8qCiAgKiBSZWRlZmluZSBzbyB0aGF0IHdlIGNhbiBoYXZlIHNhbWUgbmFtZWQgYXR0cmlidXRlcyBpbiB0aGUKICAqIHNkZXYvc3RhcmdldC9ob3N0IG9iamVjdHMuCkBAIC0yMTMsMTAgKzIxNSw4IEBACiAjZGVmaW5lIEZDX01HTVRTUlZSX1BPUlRJRAkJMHgwMDAwMGEKIAogCi1zdGF0aWMgdm9pZCBmY19zaG9zdF9yZW1vdmVfcnBvcnRzKHZvaWQgICpkYXRhKTsKIHN0YXRpYyB2b2lkIGZjX3RpbWVvdXRfZGVsZXRlZF9ycG9ydCh2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkIGZjX3Njc2lfc2Nhbl9ycG9ydCh2b2lkICpkYXRhKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3Rlcm1pbmF0ZShzdHJ1Y3QgZmNfcnBvcnQgICpycG9ydCk7CiAKIC8qCiAgKiBBdHRyaWJ1dGUgY291bnRzIHByZSBvYmplY3QgdHlwZS4uLgpAQCAtMjg4LDQyICsyODgsNTggQEAKIAkJCSBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KGRldik7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAogCS8qIAogCSAqIFNldCBkZWZhdWx0IHZhbHVlcyBlYXNpbHkgZGV0ZWN0ZWQgYnkgdGhlIG1pZGxheWVyIGFzCiAJICogZmFpbHVyZSBjYXNlcy4gIFRoZSBzY3NpIGxsZGQgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZwogCSAqIGFsbCB0cmFuc3BvcnQgYXR0cmlidXRlcyB0byB2YWxpZCB2YWx1ZXMgcGVyIGhvc3QuCiAJICovCi0JZmNfaG9zdF9ub2RlX25hbWUoc2hvc3QpID0gLTE7Ci0JZmNfaG9zdF9wb3J0X25hbWUoc2hvc3QpID0gLTE7Ci0JZmNfaG9zdF9wZXJtYW5lbnRfcG9ydF9uYW1lKHNob3N0KSA9IC0xOwotCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoc2hvc3QpID0gRkNfQ09TX1VOU1BFQ0lGSUVEOwotCW1lbXNldChmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KSwgMCwKLQkJc2l6ZW9mKGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoc2hvc3QpKSk7Ci0JbWVtc2V0KGZjX2hvc3Rfc3ltYm9saWNfbmFtZShzaG9zdCksIDAsCi0JCXNpemVvZihmY19ob3N0X3N5bWJvbGljX25hbWUoc2hvc3QpKSk7Ci0JZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOwotCWZjX2hvc3RfbWF4ZnJhbWVfc2l6ZShzaG9zdCkgPSAtMTsKLQltZW1zZXQoZmNfaG9zdF9zZXJpYWxfbnVtYmVyKHNob3N0KSwgMCwKLQkJc2l6ZW9mKGZjX2hvc3Rfc2VyaWFsX251bWJlcihzaG9zdCkpKTsKKwlmY19ob3N0LT5ub2RlX25hbWUgPSAtMTsKKwlmY19ob3N0LT5wb3J0X25hbWUgPSAtMTsKKwlmY19ob3N0LT5wZXJtYW5lbnRfcG9ydF9uYW1lID0gLTE7CisJZmNfaG9zdC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBGQ19DT1NfVU5TUEVDSUZJRUQ7CisJbWVtc2V0KGZjX2hvc3QtPnN1cHBvcnRlZF9mYzRzLCAwLAorCQlzaXplb2YoZmNfaG9zdC0+c3VwcG9ydGVkX2ZjNHMpKTsKKwltZW1zZXQoZmNfaG9zdC0+c3ltYm9saWNfbmFtZSwgMCwKKwkJc2l6ZW9mKGZjX2hvc3QtPnN5bWJvbGljX25hbWUpKTsKKwlmY19ob3N0LT5zdXBwb3J0ZWRfc3BlZWRzID0gRkNfUE9SVFNQRUVEX1VOS05PV047CisJZmNfaG9zdC0+bWF4ZnJhbWVfc2l6ZSA9IC0xOworCW1lbXNldChmY19ob3N0LT5zZXJpYWxfbnVtYmVyLCAwLAorCQlzaXplb2YoZmNfaG9zdC0+c2VyaWFsX251bWJlcikpOwogCi0JZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9IC0xOwotCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX1VOS05PV047Ci0JZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IEZDX1BPUlRTVEFURV9VTktOT1dOOwotCW1lbXNldChmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSwgMCwKLQkJc2l6ZW9mKGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpKSk7Ci0JZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfVU5LTk9XTjsKLQlmY19ob3N0X2ZhYnJpY19uYW1lKHNob3N0KSA9IC0xOworCWZjX2hvc3QtPnBvcnRfaWQgPSAtMTsKKwlmY19ob3N0LT5wb3J0X3R5cGUgPSBGQ19QT1JUVFlQRV9VTktOT1dOOworCWZjX2hvc3QtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfVU5LTk9XTjsKKwltZW1zZXQoZmNfaG9zdC0+YWN0aXZlX2ZjNHMsIDAsCisJCXNpemVvZihmY19ob3N0LT5hY3RpdmVfZmM0cykpOworCWZjX2hvc3QtPnNwZWVkID0gRkNfUE9SVFNQRUVEX1VOS05PV047CisJZmNfaG9zdC0+ZmFicmljX25hbWUgPSAtMTsKIAotCWZjX2hvc3RfdGd0aWRfYmluZF90eXBlKHNob3N0KSA9IEZDX1RHVElEX0JJTkRfQllfV1dQTjsKKwlmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUgPSBGQ19UR1RJRF9CSU5EX0JZX1dXUE47CiAKLQlJTklUX0xJU1RfSEVBRCgmZmNfaG9zdF9ycG9ydHMoc2hvc3QpKTsKLQlJTklUX0xJU1RfSEVBRCgmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCkpOwotCWZjX2hvc3RfbmV4dF9ycG9ydF9udW1iZXIoc2hvc3QpID0gMDsKLQlmY19ob3N0X25leHRfdGFyZ2V0X2lkKHNob3N0KSA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJmZjX2hvc3QtPnJwb3J0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmZjX2hvc3QtPnJwb3J0X2JpbmRpbmdzKTsKKwlmY19ob3N0LT5uZXh0X3Jwb3J0X251bWJlciA9IDA7CisJZmNfaG9zdC0+bmV4dF90YXJnZXRfaWQgPSAwOwogCi0JZmNfaG9zdF9mbGFncyhzaG9zdCkgPSAwOwotCUlOSVRfV09SSygmZmNfaG9zdF9ycG9ydF9kZWxfd29yayhzaG9zdCksIGZjX3Nob3N0X3JlbW92ZV9ycG9ydHMsIHNob3N0KTsKKwlzbnByaW50ZihmY19ob3N0LT53b3JrX3FfbmFtZSwgS09CSl9OQU1FX0xFTiwgImZjX3dxXyVkIiwKKwkJc2hvc3QtPmhvc3Rfbm8pOworCWZjX2hvc3QtPndvcmtfcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCQlmY19ob3N0LT53b3JrX3FfbmFtZSk7CisJaWYgKCFmY19ob3N0LT53b3JrX3EpCisJCXJldHVybiAtRU5PTUVNOworCisJc25wcmludGYoZmNfaG9zdC0+ZGV2bG9zc193b3JrX3FfbmFtZSwgS09CSl9OQU1FX0xFTiwgImZjX2RsXyVkIiwKKwkJc2hvc3QtPmhvc3Rfbm8pOworCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xX25hbWUpOworCWlmICghZmNfaG9zdC0+ZGV2bG9zc193b3JrX3EpIHsKKwkJZGVzdHJveV93b3JrcXVldWUoZmNfaG9zdC0+d29ya19xKTsKKwkJZmNfaG9zdC0+d29ya19xID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3OSw5ICs4OTUsOSBAQAogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpKSkgewogCQkJZ2V0X2xpc3RfaGVhZF9lbnRyeShycG9ydCwKIAkJCQkmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCksIHBlZXJzKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJCWxpc3RfZGVsKCZycG9ydC0+cGVlcnMpOworCQkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKKwkJCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+cnBvcnRfZGVsZXRlX3dvcmspOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0KQEAgLTEyNjIsNiArMTI3OCw5MCBAQAogfQogRVhQT1JUX1NZTUJPTChmY19yZWxlYXNlX3RyYW5zcG9ydCk7CiAKKy8qKgorICogZmNfcXVldWVfd29yayAtIFF1ZXVlIHdvcmsgdG8gdGhlIGZjX2hvc3Qgd29ya3F1ZXVlLgorICogQHNob3N0OglQb2ludGVyIHRvIFNjc2lfSG9zdCBib3VuZCB0byBmY19ob3N0LgorICogQHdvcms6CVdvcmsgdG8gcXVldWUgZm9yIGV4ZWN1dGlvbi4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJMCBvbiBzdWNjZXNzIC8gIT0gMCBmb3IgZXJyb3IKKyAqKi8KK3N0YXRpYyBpbnQKK2ZjX3F1ZXVlX3dvcmsoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpZiAodW5saWtlbHkoIWZjX2hvc3Rfd29ya19xKHNob3N0KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiRVJST1I6IEZDIGhvc3QgJyVzJyBhdHRlbXB0ZWQgdG8gcXVldWUgd29yaywgIgorCQkJIndoZW4gbm8gd29ya3F1ZXVlIGNyZWF0ZWQuXG4iLCBzaG9zdC0+aG9zdHQtPm5hbWUpOworCQlkdW1wX3N0YWNrKCk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHF1ZXVlX3dvcmsoZmNfaG9zdF93b3JrX3Eoc2hvc3QpLCB3b3JrKTsKK30KKworLyoqCisgKiBmY19mbHVzaF93b3JrIC0gRmx1c2ggYSBmY19ob3N0J3Mgd29ya3F1ZXVlLgorICogQHNob3N0OglQb2ludGVyIHRvIFNjc2lfSG9zdCBib3VuZCB0byBmY19ob3N0LgorICoqLworc3RhdGljIHZvaWQKK2ZjX2ZsdXNoX3dvcmsoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJaWYgKCFmY19ob3N0X3dvcmtfcShzaG9zdCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiRVJST1I6IEZDIGhvc3QgJyVzJyBhdHRlbXB0ZWQgdG8gZmx1c2ggd29yaywgIgorCQkJIndoZW4gbm8gd29ya3F1ZXVlIGNyZWF0ZWQuXG4iLCBzaG9zdC0+aG9zdHQtPm5hbWUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybjsKKwl9CisKKwlmbHVzaF93b3JrcXVldWUoZmNfaG9zdF93b3JrX3Eoc2hvc3QpKTsKK30KKworLyoqCisgKiBmY19xdWV1ZV9kZXZsb3NzX3dvcmsgLSBTY2hlZHVsZSB3b3JrIGZvciB0aGUgZmNfaG9zdCBkZXZsb3NzIHdvcmtxdWV1ZS4KKyAqIEBzaG9zdDoJUG9pbnRlciB0byBTY3NpX0hvc3QgYm91bmQgdG8gZmNfaG9zdC4KKyAqIEB3b3JrOglXb3JrIHRvIHF1ZXVlIGZvciBleGVjdXRpb24uCisgKiBAZGVsYXk6CWppZmZpZXMgdG8gZGVsYXkgdGhlIHdvcmsgcXVldWluZworICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkwIG9uIHN1Y2Nlc3MgLyAhPSAwIGZvciBlcnJvcgorICoqLworc3RhdGljIGludAorZmNfcXVldWVfZGV2bG9zc193b3JrKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssCisJCQkJdW5zaWduZWQgbG9uZyBkZWxheSkKK3sKKwlpZiAodW5saWtlbHkoIWZjX2hvc3RfZGV2bG9zc193b3JrX3Eoc2hvc3QpKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJFUlJPUjogRkMgaG9zdCAnJXMnIGF0dGVtcHRlZCB0byBxdWV1ZSB3b3JrLCAiCisJCQkid2hlbiBubyB3b3JrcXVldWUgY3JlYXRlZC5cbiIsIHNob3N0LT5ob3N0dC0+bmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcXVldWVfZGVsYXllZF93b3JrKGZjX2hvc3RfZGV2bG9zc193b3JrX3Eoc2hvc3QpLCB3b3JrLCBkZWxheSk7Cit9CisKKy8qKgorICogZmNfZmx1c2hfZGV2bG9zcyAtIEZsdXNoIGEgZmNfaG9zdCdzIGRldmxvc3Mgd29ya3F1ZXVlLgorICogQHNob3N0OglQb2ludGVyIHRvIFNjc2lfSG9zdCBib3VuZCB0byBmY19ob3N0LgorICoqLworc3RhdGljIHZvaWQKK2ZjX2ZsdXNoX2Rldmxvc3Moc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJaWYgKCFmY19ob3N0X2Rldmxvc3Nfd29ya19xKHNob3N0KSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJFUlJPUjogRkMgaG9zdCAnJXMnIGF0dGVtcHRlZCB0byBmbHVzaCB3b3JrLCAiCisJCQkid2hlbiBubyB3b3JrcXVldWUgY3JlYXRlZC5cbiIsIHNob3N0LT5ob3N0dC0+bmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuOworCX0KKworCWZsdXNoX3dvcmtxdWV1ZShmY19ob3N0X2Rldmxvc3Nfd29ya19xKHNob3N0KSk7Cit9CisKIAogLyoqCiAgKiBmY19yZW1vdmVfaG9zdCAtIGNhbGxlZCB0byB0ZXJtaW5hdGUgYW55IGZjX3RyYW5zcG9ydC1yZWxhdGVkIGVsZW1lbnRzCkBAIC0xMjgzLDM2ICsxMzgzLDEwMyBAQAogZmNfcmVtb3ZlX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgKm5leHRfcnBvcnQ7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfcTsKKwlzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqZmNfaG9zdCA9IHNob3N0X3RvX2ZjX2hvc3Qoc2hvc3QpOwogCiAJLyogUmVtb3ZlIGFueSByZW1vdGUgcG9ydHMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnBvcnQsIG5leHRfcnBvcnQsCi0JCQkmZmNfaG9zdF9ycG9ydHMoc2hvc3QpLCBwZWVycykKLQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKKwkJCSZmY19ob3N0LT5ycG9ydHMsIHBlZXJzKSB7CisJCWxpc3RfZGVsKCZycG9ydC0+cGVlcnMpOworCQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9ERUxFVEVEOworCQlmY19xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnJwb3J0X2RlbGV0ZV93b3JrKTsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnBvcnQsIG5leHRfcnBvcnQsCi0JCQkmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCksIHBlZXJzKQotCQlmY19ycG9ydF90ZXJtaW5hdGUocnBvcnQpOworCQkJJmZjX2hvc3QtPnJwb3J0X2JpbmRpbmdzLCBwZWVycykgeworCQlsaXN0X2RlbCgmcnBvcnQtPnBlZXJzKTsKKwkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKKwkJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5ycG9ydF9kZWxldGVfd29yayk7CisJfQorCisJLyogZmx1c2ggYWxsIHNjYW4gd29yayBpdGVtcyAqLworCXNjc2lfZmx1c2hfd29yayhzaG9zdCk7CisKKwkvKiBmbHVzaCBhbGwgc3RndCBkZWxldGUsIGFuZCBycG9ydCBkZWxldGUgd29yayBpdGVtcywgdGhlbiBraWxsIGl0ICAqLworCWlmIChmY19ob3N0LT53b3JrX3EpIHsKKwkJd29ya19xID0gZmNfaG9zdC0+d29ya19xOworCQlmY19ob3N0LT53b3JrX3EgPSBOVUxMOworCQlkZXN0cm95X3dvcmtxdWV1ZSh3b3JrX3EpOworCX0KKworCS8qIGZsdXNoIGFsbCBkZXZsb3NzIHdvcmsgaXRlbXMsIHRoZW4ga2lsbCBpdCAgKi8KKwlpZiAoZmNfaG9zdC0+ZGV2bG9zc193b3JrX3EpIHsKKwkJd29ya19xID0gZmNfaG9zdC0+ZGV2bG9zc193b3JrX3E7CisJCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xID0gTlVMTDsKKwkJZGVzdHJveV93b3JrcXVldWUod29ya19xKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3JlbW92ZV9ob3N0KTsKIAotLyoKLSAqIGZjX3Jwb3J0X3RndF9yZW1vdmUgLSBSZW1vdmVzIHRoZSBzY3NpIHRhcmdldCBvbiB0aGUgcmVtb3RlIHBvcnQKLSAqIEBycG9ydDoJVGhlIHJlbW90ZSBwb3J0IHRvIGJlIG9wZXJhdGVkIG9uCi0gKi8KKworLyoqCisgKiBmY19zdGFyZ2V0X2RlbGV0ZSAtIGNhbGxlZCB0byBkZWxldGUgdGhlIHNjc2kgZGVjZW5kZW50cyBvZiBhbiBycG9ydAorICogICAgICAgICAgICAgICAgICAodGFyZ2V0IGFuZCBhbGwgc2RldnMpCisgKgorICogQGRhdGE6CXJlbW90ZSBwb3J0IHRvIGJlIG9wZXJhdGVkIG9uLgorICoqLwogc3RhdGljIHZvaWQKLWZjX3Jwb3J0X3RndF9yZW1vdmUoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK2ZjX3N0YXJnZXRfZGVsZXRlKHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IChzdHJ1Y3QgZmNfcnBvcnQgKilkYXRhOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKIAotCS8qIFN0b3AgYW55dGhpbmcgb24gdGhlIHdvcmtxICovCi0JaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaykpCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0Jc2NzaV9mbHVzaF93b3JrKHNob3N0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaykpCisJCQlmY19mbHVzaF9kZXZsb3NzKHNob3N0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAlzY3NpX3JlbW92ZV90YXJnZXQoJnJwb3J0LT5kZXYpOwogfQogCisKKy8qKgorICogZmNfcnBvcnRfZmluYWxfZGVsZXRlIC0gZmluaXNoIHJwb3J0IHRlcm1pbmF0aW9uIGFuZCBkZWxldGUgaXQuCisgKgorICogQGRhdGE6CXJlbW90ZSBwb3J0IHRvIGJlIGRlbGV0ZWQuCisgKiovCitzdGF0aWMgdm9pZAorZmNfcnBvcnRfZmluYWxfZGVsZXRlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IChzdHJ1Y3QgZmNfcnBvcnQgKilkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZycG9ydC0+ZGV2OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCisJLyogRGVsZXRlIFNDU0kgdGFyZ2V0IGFuZCBzZGV2cyAqLworCWlmIChycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpCisJCWZjX3N0YXJnZXRfZGVsZXRlKGRhdGEpOworCisJLyoKKwkgKiBpZiBhIHNjYW4gaXMgcGVuZGluZywgZmx1c2ggdGhlIFNDU0kgSG9zdCB3b3JrX3Egc28gdGhhdCAKKwkgKiB0aGF0IHdlIGNhbiByZWNsYWltIHRoZSBycG9ydCBzY2FuIHdvcmsgZWxlbWVudC4KKwkgKi8KKwlpZiAocnBvcnQtPmZsYWdzICYgRkNfUlBPUlRfU0NBTl9QRU5ESU5HKQorCQlzY3NpX2ZsdXNoX3dvcmsoc2hvc3QpOworCisJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZGVsKGRldik7CisJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKGRldik7CisJcHV0X2RldmljZSgmc2hvc3QtPnNob3N0X2dlbmRldik7Cit9CisKKwogLyoqCiAgKiBmY19ycG9ydF9jcmVhdGUgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSByZW1vdGUgRkMgcG9ydC4KICAqIEBzaG9zdDoJc2NzaSBob3N0IHRoZSByZW1vdGUgcG9ydCBpcyBjb25uZWN0ZWQgdG8uCkBAIC0xMzMwLDggKzE0OTcsNyBAQAogZmNfcnBvcnRfY3JlYXRlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBpbnQgY2hhbm5lbCwKIAlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgICppZHMpCiB7Ci0Jc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPQotCQkJKHN0cnVjdCBmY19ob3N0X2F0dHJzICopc2hvc3QtPnNob3N0X2RhdGE7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmZjaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTEzNjAsNiArMTUyNiw4IEBACiAKIAlJTklUX1dPUksoJnJwb3J0LT5kZXZfbG9zc193b3JrLCBmY190aW1lb3V0X2RlbGV0ZWRfcnBvcnQsIHJwb3J0KTsKIAlJTklUX1dPUksoJnJwb3J0LT5zY2FuX3dvcmssIGZjX3Njc2lfc2Nhbl9ycG9ydCwgcnBvcnQpOworCUlOSVRfV09SSygmcnBvcnQtPnN0Z3RfZGVsZXRlX3dvcmssIGZjX3N0YXJnZXRfZGVsZXRlLCBycG9ydCk7CisJSU5JVF9XT1JLKCZycG9ydC0+cnBvcnRfZGVsZXRlX3dvcmssIGZjX3Jwb3J0X2ZpbmFsX2RlbGV0ZSwgcnBvcnQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCkBAIC0xMzY4LDcgKzE1MzYsNyBAQAogCQlycG9ydC0+c2NzaV90YXJnZXRfaWQgPSBmY19ob3N0LT5uZXh0X3RhcmdldF9pZCsrOwogCWVsc2UKIAkJcnBvcnQtPnNjc2lfdGFyZ2V0X2lkID0gLTE7Ci0JbGlzdF9hZGRfdGFpbCgmcnBvcnQtPnBlZXJzLCAmZmNfaG9zdF9ycG9ydHMoc2hvc3QpKTsKKwlsaXN0X2FkZF90YWlsKCZycG9ydC0+cGVlcnMsICZmY19ob3N0LT5ycG9ydHMpOwogCWdldF9kZXZpY2UoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0xMzg5LDkgKzE1NTcsMTEgQEAKIAl0cmFuc3BvcnRfYWRkX2RldmljZShkZXYpOwogCXRyYW5zcG9ydF9jb25maWd1cmVfZGV2aWNlKGRldik7CiAKLQlpZiAocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKQorCWlmIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpIHsKIAkJLyogaW5pdGlhdGUgYSBzY2FuIG9mIHRoZSB0YXJnZXQgKi8KKwkJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX1NDQU5fUEVORElORzsKIAkJc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnNjYW5fd29yayk7CisJfQogCiAJcmV0dXJuIHJwb3J0OwogCkBAIC0xNDUxLDEwICsxNjIxLDE0IEBACiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzICAqaWRzKQogewogCXN0cnVjdCBmY19pbnRlcm5hbCAqZmNpID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOworCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0gc2hvc3RfdG9fZmNfaG9zdChzaG9zdCk7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBtYXRjaCA9IDA7CiAKKwkvKiBlbnN1cmUgYW55IHN0Z3QgZGVsZXRlIGZ1bmN0aW9ucyBhcmUgZG9uZSAqLworCWZjX2ZsdXNoX3dvcmsoc2hvc3QpOworCiAJLyoKIAkgKiBTZWFyY2ggdGhlIGxpc3Qgb2YgImFjdGl2ZSIgcnBvcnRzLCBmb3IgYW4gcnBvcnQgdGhhdCBoYXMgYmVlbgogCSAqIGRlbGV0ZWQsIGJ1dCB3ZSd2ZSBoZWxkIG9mZiB0aGUgcmVhbCBkZWxldGUgd2hpbGUgdGhlIHRhcmdldApAQCAtMTQ2MiwxMiArMTYzNiwxMiBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocnBvcnQsICZmY19ob3N0X3Jwb3J0cyhzaG9zdCksIHBlZXJzKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShycG9ydCwgJmZjX2hvc3QtPnJwb3J0cywgcGVlcnMpIHsKIAogCQlpZiAoKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9CTE9DS0VEKSAmJgogCQkJKHJwb3J0LT5jaGFubmVsID09IGNoYW5uZWwpKSB7CiAKLQkJCXN3aXRjaCAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpKSB7CisJCQlzd2l0Y2ggKGZjX2hvc3QtPnRndGlkX2JpbmRfdHlwZSkgewogCQkJY2FzZSBGQ19UR1RJRF9CSU5EX0JZX1dXUE46CiAJCQljYXNlIEZDX1RHVElEX0JJTkRfTk9ORToKIAkJCQlpZiAocnBvcnQtPnBvcnRfbmFtZSA9PSBpZHMtPnBvcnRfbmFtZSkKQEAgLTE1MjEsMjcgKzE2OTUsMzQgQEAKIAkJCQkgKiB0cmFuc2FjdGlvbi4KIAkJCQkgKi8KIAkJCQlpZiAoIWNhbmNlbF9kZWxheWVkX3dvcmsod29yaykpCi0JCQkJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCQkJCWZjX2ZsdXNoX2Rldmxvc3Moc2hvc3QpOworCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJCQkJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7CiAKIAkJCQkvKiBpbml0aWF0ZSBhIHNjYW4gb2YgdGhlIHRhcmdldCAqLworCQkJCXJwb3J0LT5mbGFncyB8PSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkc7CiAJCQkJc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnNjYW5fd29yayk7CiAKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwogCQkJCXJldHVybiBycG9ydDsKIAkJCX0KIAkJfQogCX0KIAogCS8qIFNlYXJjaCB0aGUgYmluZGluZ3MgYXJyYXkgKi8KLQlpZiAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpICE9IEZDX1RHVElEX0JJTkRfTk9ORSkgeworCWlmIChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUgIT0gRkNfVEdUSURfQklORF9OT05FKSB7CiAKIAkJLyogc2VhcmNoIGZvciBhIG1hdGNoaW5nIGNvbnNpc3RlbnQgYmluZGluZyAqLwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocnBvcnQsICZmY19ob3N0X3Jwb3J0X2JpbmRpbmdzKHNob3N0KSwKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShycG9ydCwgJmZjX2hvc3QtPnJwb3J0X2JpbmRpbmdzLAogCQkJCQlwZWVycykgewogCQkJaWYgKHJwb3J0LT5jaGFubmVsICE9IGNoYW5uZWwpCiAJCQkJY29udGludWU7CiAKLQkJCXN3aXRjaCAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpKSB7CisJCQlzd2l0Y2ggKGZjX2hvc3QtPnRndGlkX2JpbmRfdHlwZSkgewogCQkJY2FzZSBGQ19UR1RJRF9CSU5EX0JZX1dXUE46CiAJCQkJaWYgKHJwb3J0LT5wb3J0X25hbWUgPT0gaWRzLT5wb3J0X25hbWUpCiAJCQkJCW1hdGNoID0gMTsKQEAgLTE1NTksOCArMTc0MCw3IEBACiAJCQl9CiAKIAkJCWlmIChtYXRjaCkgewotCQkJCWxpc3RfbW92ZV90YWlsKCZycG9ydC0+cGVlcnMsCi0JCQkJCSZmY19ob3N0X3Jwb3J0cyhzaG9zdCkpOworCQkJCWxpc3RfbW92ZV90YWlsKCZycG9ydC0+cGVlcnMsICZmY19ob3N0LT5ycG9ydHMpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0xNTc0LDE1ICsxNzU0LDE3IEBACiAJCQlycG9ydC0+cm9sZXMgPSBpZHMtPnJvbGVzOwogCQkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfT05MSU5FOwogCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQogCQkJaWYgKGZjaS0+Zi0+ZGRfZmNycG9ydF9zaXplKQogCQkJCW1lbXNldChycG9ydC0+ZGRfZGF0YSwgMCwKIAkJCQkJCWZjaS0+Zi0+ZGRfZmNycG9ydF9zaXplKTsKIAotCQkJaWYgKHJwb3J0LT5yb2xlcyAmIEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVCkKKwkJCWlmIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpIHsKIAkJCQkvKiBpbml0aWF0ZSBhIHNjYW4gb2YgdGhlIHRhcmdldCAqLworCQkJCXJwb3J0LT5mbGFncyB8PSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkc7CiAJCQkJc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnNjYW5fd29yayk7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJCQlyZXR1cm4gcnBvcnQ7CiAJCX0KQEAgLTE1OTcsMzAgKzE3NzksNiBAQAogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdGVfcG9ydF9hZGQpOwogCi0vKgotICogZmNfcnBvcnRfdGVybWluYXRlIC0gdGhpcyByb3V0aW5lIHRlYXJzIGRvd24gYW5kIGRlYWxsb2NhdGVzIGEgcmVtb3RlIHBvcnQuCi0gKiBAcnBvcnQ6CVRoZSByZW1vdGUgcG9ydCB0byBiZSB0ZXJtaW5hdGVkCi0gKgotICogTm90ZXM6Ci0gKglUaGlzIHJvdXRpbmUgYXNzdW1lcyBubyBsb2NrcyBhcmUgaGVsZCBvbiBlbnRyeS4KLSAqLwotc3RhdGljIHZvaWQKLWZjX3Jwb3J0X3Rlcm1pbmF0ZShzdHJ1Y3QgZmNfcnBvcnQgICpycG9ydCkKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcnBvcnQtPmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZmNfcnBvcnRfdGd0X3JlbW92ZShycG9ydCk7Ci0KLQl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZShkZXYpOwotCWRldmljZV9kZWwoZGV2KTsKLQl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJnJwb3J0LT5wZWVycyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JcHV0X2RldmljZSgmc2hvc3QtPnNob3N0X2dlbmRldik7Ci19CiAKIC8qKgogICogZmNfcmVtb3RlX3BvcnRfZGVsZXRlIC0gbm90aWZpZXMgdGhlIGZjIHRyYW5zcG9ydCB0aGF0IGEgcmVtb3RlCkBAIC0xNjc1LDIwICsxODMzLDM5IEBACiB2b2lkCiBmY19yZW1vdGVfcG9ydF9kZWxldGUoc3RydWN0IGZjX3Jwb3J0ICAqcnBvcnQpCiB7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CiAJaW50IHRpbWVvdXQgPSBycG9ydC0+ZGV2X2xvc3NfdG1vOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIE5vIG5lZWQgdG8gZmx1c2ggdGhlIGZjX2hvc3Qgd29ya19xJ3MsIGFzIGFsbCBhZGRzIGFyZSBzeW5jaHJvbm91cy4KKwkgKgorCSAqIFdlIGRvIG5lZWQgdG8gcmVjbGFpbSB0aGUgcnBvcnQgc2NhbiB3b3JrIGVsZW1lbnQsIHNvIGV2ZW50dWFsbHkKKwkgKiAoaW4gZmNfcnBvcnRfZmluYWxfZGVsZXRlKCkpIHdlJ2xsIGZsdXNoIHRoZSBzY3NpIGhvc3Qgd29ya19xIGlmCisJICogdGhlcmUncyBzdGlsbCBhIHNjYW4gcGVuZGluZy4KKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCS8qIElmIG5vIHNjc2kgdGFyZ2V0IGlkIG1hcHBpbmcsIGRlbGV0ZSBpdCAqLwogCWlmIChycG9ydC0+c2NzaV90YXJnZXRfaWQgPT0gLTEpIHsKLQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKKwkJbGlzdF9kZWwoJnJwb3J0LT5wZWVycyk7CisJCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0RFTEVURUQ7CisJCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+cnBvcnRfZGVsZXRlX3dvcmspOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAorCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0JMT0NLRUQ7CisKKwlycG9ydC0+ZmxhZ3MgfD0gRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKIAlzY3NpX3RhcmdldF9ibG9jaygmcnBvcnQtPmRldik7CiAKIAkvKiBjYXAgdGhlIGxlbmd0aCB0aGUgZGV2aWNlcyBjYW4gYmUgYmxvY2tlZCB1bnRpbCB0aGV5IGFyZSBkZWxldGVkICovCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaywgdGltZW91dCAqIEhaKTsKLQotCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0JMT0NLRUQ7CisJZmNfcXVldWVfZGV2bG9zc193b3JrKHNob3N0LCAmcnBvcnQtPmRldl9sb3NzX3dvcmssIHRpbWVvdXQgKiBIWik7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3JlbW90ZV9wb3J0X2RlbGV0ZSk7CiAKQEAgLTE3MTYsOCArMTg5Myw3IEBACiBmY19yZW1vdGVfcG9ydF9yb2xlY2hnKHN0cnVjdCBmY19ycG9ydCAgKnJwb3J0LCB1MzIgcm9sZXMpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0Jc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPQotCQkJKHN0cnVjdCBmY19ob3N0X2F0dHJzICopc2hvc3QtPnNob3N0X2RhdGE7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcmVhdGUgPSAwOwogCkBAIC0xNzI5LDEwICsxOTA1LDExIEBACiAJCX0gZWxzZSBpZiAoIShycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpKQogCQkJY3JlYXRlID0gMTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAlycG9ydC0+cm9sZXMgPSByb2xlczsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCiAJaWYgKGNyZWF0ZSkgewogCQkvKgogCQkgKiBUaGVyZSBtYXkgaGF2ZSBiZWVuIGEgZGVsZXRlIHRpbWVyIHJ1bm5pbmcgb24gdGhlCkBAIC0xNzQ3LDEwICsxOTI0LDIwIEBACiAJCSAqIHRyYW5zYWN0aW9uLgogCQkgKi8KIAkJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaykpCi0JCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQkJZmNfZmx1c2hfZGV2bG9zcyhzaG9zdCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKKwkJLyogZW5zdXJlIGFueSBzdGd0IGRlbGV0ZSBmdW5jdGlvbnMgYXJlIGRvbmUgKi8KKwkJZmNfZmx1c2hfd29yayhzaG9zdCk7CiAKIAkJLyogaW5pdGlhdGUgYSBzY2FuIG9mIHRoZSB0YXJnZXQgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlycG9ydC0+ZmxhZ3MgfD0gRkNfUlBPUlRfU0NBTl9QRU5ESU5HOwogCQlzY3NpX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c2Nhbl93b3JrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdGVfcG9ydF9yb2xlY2hnKTsKQEAgLTE3NjcsMjIgKzE5NTQsMjQgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gKHN0cnVjdCBmY19ycG9ydCAqKWRhdGE7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCisJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7CisKIAkvKgotCSAqIElmIHRoZSBwb3J0IGlzIE9OTElORSwgdGhlbiBpdCBjYW1lIGJhY2ssIGJ1dCB3YXMgbm8gbG9uZ2VyIGFuCi0JICogRkNQIHRhcmdldC4gVGh1cyB3ZSBuZWVkIHRvIHRlYXIgZG93biB0aGUgc2NzaV90YXJnZXQgb24gaXQuCisJICogSWYgdGhlIHBvcnQgaXMgT05MSU5FLCB0aGVuIGl0IGNhbWUgYmFjay4gVmFsaWRhdGUgaXQncyBzdGlsbCBhbgorCSAqIEZDUCB0YXJnZXQuIElmIG5vdCwgdGVhciBkb3duIHRoZSBzY3NpX3RhcmdldCBvbiBpdC4KIAkgKi8KLQlpZiAocnBvcnQtPnBvcnRfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX09OTElORSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQorCWlmICgocnBvcnQtPnBvcnRfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX09OTElORSkgJiYKKwkgICAgIShycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpKSB7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsICZycG9ydC0+ZGV2LAotCQkJImJsb2NrZWQgRkMgcmVtb3RlIHBvcnQgdGltZSBvdXQ6IHJlbW92aW5nIHRhcmdldFxuIik7Ci0KLQkJZmNfcnBvcnRfdGd0X3JlbW92ZShycG9ydCk7Ci0KKwkJCSJibG9ja2VkIEZDIHJlbW90ZSBwb3J0IHRpbWUgb3V0OiBubyBsb25nZXIiCisJCQkiIGEgRkNQIHRhcmdldCwgcmVtb3Zpbmcgc3RhcmdldFxuIik7CisJCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c3RndF9kZWxldGVfd29yayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNzkzLDExICsxOTgyLDEzIEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpID09IEZDX1RHVElEX0JJTkRfTk9ORSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAoZmNfaG9zdC0+dGd0aWRfYmluZF90eXBlID09IEZDX1RHVElEX0JJTkRfTk9ORSkgeworCQlsaXN0X2RlbCgmcnBvcnQtPnBlZXJzKTsKKwkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnJwb3J0LT5kZXYsCiAJCQkiYmxvY2tlZCBGQyByZW1vdGUgcG9ydCB0aW1lIG91dDogcmVtb3ZpbmcgdGFyZ2V0XG4iKTsKLQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKKwkJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5ycG9ydF9kZWxldGVfd29yayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xODA1LDcgKzE5OTYsNyBAQAogCQkiYmxvY2tlZCBGQyByZW1vdGUgcG9ydCB0aW1lIG91dDogcmVtb3ZpbmcgdGFyZ2V0IGFuZCAiCiAJCSJzYXZpbmcgYmluZGluZ1xuIik7CiAKLQlsaXN0X21vdmVfdGFpbCgmcnBvcnQtPnBlZXJzLCAmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCkpOworCWxpc3RfbW92ZV90YWlsKCZycG9ydC0+cGVlcnMsICZmY19ob3N0LT5ycG9ydF9iaW5kaW5ncyk7CiAKIAkvKgogCSAqIE5vdGU6IFdlIGRvIG5vdCByZW1vdmUgb3IgY2xlYXIgdGhlIGhvc3RkYXRhIGFyZWEuIFRoaXMgYWxsb3dzCkBAIC0xODE5LDEwICsyMDEwLDEwIEBACiAJcnBvcnQtPm1heGZyYW1lX3NpemUgPSAtMTsKIAlycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBGQ19DT1NfVU5TUEVDSUZJRUQ7CiAJcnBvcnQtPnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwotCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0RFTEVURUQ7CisJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfTk9UUFJFU0VOVDsKIAogCS8qIHJlbW92ZSB0aGUgaWRlbnRpZmllcnMgdGhhdCBhcmVuJ3QgdXNlZCBpbiB0aGUgY29uc2lzdGluZyBiaW5kaW5nICovCi0Jc3dpdGNoIChmY19ob3N0X3RndGlkX2JpbmRfdHlwZShzaG9zdCkpIHsKKwlzd2l0Y2ggKGZjX2hvc3QtPnRndGlkX2JpbmRfdHlwZSkgewogCWNhc2UgRkNfVEdUSURfQklORF9CWV9XV1BOOgogCQlycG9ydC0+bm9kZV9uYW1lID0gLTE7CiAJCXJwb3J0LT5wb3J0X2lkID0gLTE7CkBAIC0xODQzLDE3ICsyMDM0LDggQEAKIAkgKiBBcyB0aGlzIG9ubHkgb2NjdXJzIGlmIHRoZSByZW1vdGUgcG9ydCAoc2NzaSB0YXJnZXQpCiAJICogd2VudCBhd2F5IGFuZCBkaWRuJ3QgY29tZSBiYWNrIC0gd2UnbGwgcmVtb3ZlCiAJICogYWxsIGF0dGFjaGVkIHNjc2kgZGV2aWNlcy4KLQkgKgotCSAqIFdlJ2xsIHNjaGVkdWxlIHRoZSBzaG9zdCB3b3JrIGl0ZW0gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHJlbW92YWwKLQkgKiB0byBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGRpZmZlcmVudCBmbHVzaCBjYWxscyBpZiB3ZSBwZXJmb3JtCi0JICogdGhlIHJlbW92YWwgaW4gZWFjaCB0YXJnZXQgLSBhbmQgdGhlcmUgYXJlIGxvdHMgb2YgdGFyZ2V0cwotCSAqIHdob3NlIHRpbWVvdXRzIGZpcmUgYXQgdGhlIHNhbWUgdGltZS4KIAkgKi8KLQotCWlmICggIShmY19ob3N0X2ZsYWdzKHNob3N0KSAmIEZDX1NIT1NUX1JQT1JUX0RFTF9TQ0hFRFVMRUQpKSB7Ci0JCWZjX2hvc3RfZmxhZ3Moc2hvc3QpIHw9IEZDX1NIT1NUX1JQT1JUX0RFTF9TQ0hFRFVMRUQ7Ci0JCXNjc2lfcXVldWVfd29yayhzaG9zdCwgJmZjX2hvc3RfcnBvcnRfZGVsX3dvcmsoc2hvc3QpKTsKLQl9CisJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5zdGd0X2RlbGV0ZV93b3JrKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQpAQCAtMTg3MCw0NCArMjA1MiwxOCBAQAogZmNfc2NzaV9zY2FuX3Jwb3J0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IChzdHJ1Y3QgZmNfcnBvcnQgKilkYXRhOwotCi0Jc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7Ci0Jc2NzaV9zY2FuX3RhcmdldCgmcnBvcnQtPmRldiwgcnBvcnQtPmNoYW5uZWwsIHJwb3J0LT5zY3NpX3RhcmdldF9pZCwKLQkJCVNDQU5fV0lMRF9DQVJELCAxKTsKLX0KLQotCi0vKioKLSAqIGZjX3Nob3N0X3JlbW92ZV9ycG9ydHMgLSBjYWxsZWQgdG8gcmVtb3ZlIGFsbCBycG9ydHMgdGhhdCBhcmUgbWFya2VkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgYXMgaW4gYSBkZWxldGVkIChub3QgY29ubmVjdGVkKSBzdGF0ZS4KLSAqIAotICogQGRhdGE6CXNob3N0IHdob3NlIHJwb3J0cyBhcmUgdG8gYmUgbG9va2VkIGF0Ci0gKiovCi1zdGF0aWMgdm9pZAotZmNfc2hvc3RfcmVtb3ZlX3Jwb3J0cyh2b2lkICAqZGF0YSkKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IChzdHJ1Y3QgU2NzaV9Ib3N0ICopZGF0YTsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCAqbmV4dF9ycG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXdoaWxlIChmY19ob3N0X2ZsYWdzKHNob3N0KSAmIEZDX1NIT1NUX1JQT1JUX0RFTF9TQ0hFRFVMRUQpIHsKLQotCQlmY19ob3N0X2ZsYWdzKHNob3N0KSAmPSB+RkNfU0hPU1RfUlBPUlRfREVMX1NDSEVEVUxFRDsKLQotcmVzdGFydF9zZWFyY2g6Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycG9ydCwgbmV4dF9ycG9ydCwKLQkJCQkmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCksIHBlZXJzKSB7Ci0JCQlpZiAocnBvcnQtPnBvcnRfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX0RFTEVURUQpIHsKLQkJCQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9OT1RQUkVTRU5UOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQkJCWZjX3Jwb3J0X3RndF9yZW1vdmUocnBvcnQpOwotCQkJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJCQlnb3RvIHJlc3RhcnRfc2VhcmNoOwotCQkJfQotCQl9Ci0KKwlpZiAoKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9PTkxJTkUpICYmCisJICAgIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpKSB7CisJCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOworCQlzY3NpX3NjYW5fdGFyZ2V0KCZycG9ydC0+ZGV2LCBycG9ydC0+Y2hhbm5lbCwKKwkJCXJwb3J0LT5zY3NpX3RhcmdldF9pZCwgU0NBTl9XSUxEX0NBUkQsIDEpOwogCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX1NDQU5fUEVORElORzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCmluZGV4IDEzNGM0NGMuLmYzYjE2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKQEAgLTM1LDQwICszNSw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc2FzLmg+CiAKLQotI2RlZmluZSBTQVNfSE9TVF9BVFRSUwkJMAotI2RlZmluZSBTQVNfUE9SVF9BVFRSUwkJMTcKLSNkZWZpbmUgU0FTX1JQT1JUX0FUVFJTCQk3Ci0jZGVmaW5lIFNBU19FTkRfREVWX0FUVFJTCTMKLSNkZWZpbmUgU0FTX0VYUEFOREVSX0FUVFJTCTcKLQotc3RydWN0IHNhc19pbnRlcm5hbCB7Ci0Jc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIHQ7Ci0Jc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSAqZjsKLQotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfaG9zdF9hdHRyc1tTQVNfSE9TVF9BVFRSU107Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9waHlfYXR0cnNbU0FTX1BPUlRfQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcnBoeV9hdHRyc1tTQVNfUlBPUlRfQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfZW5kX2Rldl9hdHRyc1tTQVNfRU5EX0RFVl9BVFRSU107Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9leHBhbmRlcl9hdHRyc1tTQVNfRVhQQU5ERVJfQVRUUlNdOwotCi0Jc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgcGh5X2F0dHJfY29udDsKLQlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciBycGh5X2F0dHJfY29udDsKLQlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciBlbmRfZGV2X2F0dHJfY29udDsKLQlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciBleHBhbmRlcl9hdHRyX2NvbnQ7Ci0KLQkvKgotCSAqIFRoZSBhcnJheSBvZiBudWxsIHRlcm1pbmF0ZWQgcG9pbnRlcnMgdG8gYXR0cmlidXRlcwotCSAqIG5lZWRlZCBieSBzY3NpX3N5c2ZzLmMKLQkgKi8KLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaG9zdF9hdHRyc1tTQVNfSE9TVF9BVFRSUyArIDFdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpwaHlfYXR0cnNbU0FTX1BPUlRfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcnBoeV9hdHRyc1tTQVNfUlBPUlRfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZW5kX2Rldl9hdHRyc1tTQVNfRU5EX0RFVl9BVFRSUyArIDFdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpleHBhbmRlcl9hdHRyc1tTQVNfRVhQQU5ERVJfQVRUUlMgKyAxXTsKLX07Ci0jZGVmaW5lIHRvX3Nhc19pbnRlcm5hbCh0bXBsKQljb250YWluZXJfb2YodG1wbCwgc3RydWN0IHNhc19pbnRlcm5hbCwgdCkKLQorI2luY2x1ZGUgInNjc2lfc2FzX2ludGVybmFsLmgiCiBzdHJ1Y3Qgc2FzX2hvc3RfYXR0cnMgewogCXN0cnVjdCBsaXN0X2hlYWQgcnBoeV9saXN0OwogCXN0cnVjdCBtdXRleCBsb2NrOwpAQCAtNDA2LDggKzM3Myw2IEBACiAJaWYgKCFwaHkpCiAJCXJldHVybiBOVUxMOwogCi0JZ2V0X2RldmljZShwYXJlbnQpOwotCiAJcGh5LT5udW1iZXIgPSBudW1iZXI7CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmcGh5LT5kZXYpOwpAQCAtNDU5LDEwICs0MjQsNyBAQAogdm9pZCBzYXNfcGh5X2ZyZWUoc3RydWN0IHNhc19waHkgKnBoeSkKIHsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnBoeS0+ZGV2KTsKLQlwdXRfZGV2aWNlKHBoeS0+ZGV2LnBhcmVudCk7Ci0JcHV0X2RldmljZShwaHktPmRldi5wYXJlbnQpOwotCXB1dF9kZXZpY2UocGh5LT5kZXYucGFyZW50KTsKLQlrZnJlZShwaHkpOworCXB1dF9kZXZpY2UoJnBoeS0+ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3BoeV9mcmVlKTsKIApAQCAtNDg0LDcgKzQ0Niw3IEBACiAJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKIAlkZXZpY2VfZGVsKGRldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKGRldik7Ci0JcHV0X2RldmljZShkZXYtPnBhcmVudCk7CisJcHV0X2RldmljZShkZXYpOwogfQogRVhQT1JUX1NZTUJPTChzYXNfcGh5X2RlbGV0ZSk7CiAKQEAgLTgwMCw3ICs3NjIsNiBAQAogCiAJcmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpyZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZGV2KSB7Ci0JCXB1dF9kZXZpY2UoJnBhcmVudC0+ZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC04MzYsNyArNzk3LDYgQEAKIAogCXJkZXYgPSBremFsbG9jKHNpemVvZigqcmRldiksIEdGUF9LRVJORUwpOwogCWlmICghcmRldikgewotCQlwdXRfZGV2aWNlKCZwYXJlbnQtPmRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtODg1LDYgKzg0NSw4IEBACiAJICAgIChpZGVudGlmeS0+dGFyZ2V0X3BvcnRfcHJvdG9jb2xzICYKIAkgICAgIChTQVNfUFJPVE9DT0xfU1NQfFNBU19QUk9UT0NPTF9TVFB8U0FTX1BST1RPQ09MX1NBVEEpKSkKIAkJcnBoeS0+c2NzaV90YXJnZXRfaWQgPSBzYXNfaG9zdC0+bmV4dF90YXJnZXRfaWQrKzsKKwllbHNlIGlmIChpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPT0gU0FTX0VORF9ERVZJQ0UpCisJCXJwaHktPnNjc2lfdGFyZ2V0X2lkID0gLTE7CiAJbXV0ZXhfdW5sb2NrKCZzYXNfaG9zdC0+bG9jayk7CiAKIAlpZiAoaWRlbnRpZnktPmRldmljZV90eXBlID09IFNBU19FTkRfREVWSUNFICYmCkBAIC05MTAsNiArODcyLDcgQEAKICAqLwogdm9pZCBzYXNfcnBoeV9mcmVlKHN0cnVjdCBzYXNfcnBoeSAqcnBoeSkKIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcnBoeS0+ZGV2OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHJwaHktPmRldi5wYXJlbnQtPnBhcmVudCk7CiAJc3RydWN0IHNhc19ob3N0X2F0dHJzICpzYXNfaG9zdCA9IHRvX3Nhc19ob3N0X2F0dHJzKHNob3N0KTsKIApAQCAtOTE3LDIxICs4ODAsOSBAQAogCWxpc3RfZGVsKCZycGh5LT5saXN0KTsKIAltdXRleF91bmxvY2soJnNhc19ob3N0LT5sb2NrKTsKIAotCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmcnBoeS0+ZGV2KTsKLQlwdXRfZGV2aWNlKHJwaHktPmRldi5wYXJlbnQpOwotCXB1dF9kZXZpY2UocnBoeS0+ZGV2LnBhcmVudCk7Ci0JcHV0X2RldmljZShycGh5LT5kZXYucGFyZW50KTsKLQlpZiAocnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0gU0FTX0VORF9ERVZJQ0UpIHsKLQkJc3RydWN0IHNhc19lbmRfZGV2aWNlICplZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOwogCi0JCWtmcmVlKGVkZXYpOwotCX0gZWxzZSB7Ci0JCS8qIG11c3QgYmUgZXhwYW5kZXIgKi8KLQkJc3RydWN0IHNhc19leHBhbmRlcl9kZXZpY2UgKmVkZXYgPQotCQkJcnBoeV90b19leHBhbmRlcl9kZXZpY2UocnBoeSk7Ci0KLQkJa2ZyZWUoZWRldik7Ci0JfQorCXB1dF9kZXZpY2UoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3JwaHlfZnJlZSk7CiAKQEAgLTk3MSw3ICs5MjIsNyBAQAogCiAJcGFyZW50LT5ycGh5ID0gTlVMTDsKIAotCXB1dF9kZXZpY2UoJnBhcmVudC0+ZGV2KTsKKwlwdXRfZGV2aWNlKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNhc19ycGh5X2RlbGV0ZSk7CiAKQEAgLTEwMDQsNyArOTU1LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJwaHksICZzYXNfaG9zdC0+cnBoeV9saXN0LCBsaXN0KSB7CiAJCXN0cnVjdCBzYXNfcGh5ICpwYXJlbnQgPSBkZXZfdG9fcGh5KHJwaHktPmRldi5wYXJlbnQpOwogCi0JCWlmIChycGh5LT5zY3NpX3RhcmdldF9pZCA9PSAtMSkKKwkJaWYgKHJwaHktPmlkZW50aWZ5LmRldmljZV90eXBlICE9IFNBU19FTkRfREVWSUNFIHx8CisJCSAgICBycGh5LT5zY3NpX3RhcmdldF9pZCA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICgoY2hhbm5lbCA9PSBTQ0FOX1dJTERfQ0FSRCB8fCBjaGFubmVsID09IHBhcmVudC0+cG9ydF9pZGVudGlmaWVyKSAmJgpAQCAtMTAyNiw3ICs5NzgsNiBAQAogI2RlZmluZSBTRVRVUF9URU1QTEFURShhdHRyYiwgZmllbGQsIHBlcm0sIHRlc3QpCQkJCVwKIAlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfIyNmaWVsZDsJCVwKIAlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdLmF0dHIubW9kZSA9IHBlcm07CQkJXAotCWktPnByaXZhdGVfIyNhdHRyYltjb3VudF0uc3RvcmUgPSBOVUxMOwkJCQlcCiAJaS0+YXR0cmJbY291bnRdID0gJmktPnByaXZhdGVfIyNhdHRyYltjb3VudF07CQkJXAogCWlmICh0ZXN0KQkJCQkJCQlcCiAJCWNvdW50KysKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNzQwNWQwZC4uYjA5ODk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTc0OCw2ICs3NDgsNyBAQAogCQkvKgogCQkgKiBtb3N0IGxpa2VseSBvdXQgb2YgbWVtLCBidXQgY291bGQgYWxzbyBiZSBhIGJhZCBtYXAKIAkJICovCisJCXNnX2ZpbmlzaF9yZW1fcmVxKHNycCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKQEAgLTEwNDQsNyArMTA0NSw3IEBACiAJCQlpZiAoIXNnX2FsbG93X2FjY2VzcyhvcGNvZGUsIHNkcC0+ZGV2aWNlLT50eXBlKSkKIAkJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCXJldHVybiBzY3NpX2lvY3RsX3NlbmRfY29tbWFuZChzZHAtPmRldmljZSwgcCk7CisJCXJldHVybiBzZ19zY3NpX2lvY3RsKGZpbHAsIHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCBOVUxMLCBwKTsKIAljYXNlIFNHX1NFVF9ERUJVRzoKIAkJcmVzdWx0ID0gZ2V0X3VzZXIodmFsLCBpcCk7CiAJCWlmIChyZXN1bHQpCkBAIC0xNzk4LDggKzE3OTksMTAgQEAKIAlyZXMgPSBzdF9tYXBfdXNlcl9wYWdlcyhzY2hwLT5idWZmZXIsIG14X3NjX2VsZW1zLAogCQkJCSh1bnNpZ25lZCBsb25nKWhwLT5keGZlcnAsIGR4ZmVyX2xlbiwgCiAJCQkJKFNHX0RYRkVSX1RPX0RFViA9PSBocC0+ZHhmZXJfZGlyZWN0aW9uKSA/IDEgOiAwKTsKLQlpZiAocmVzIDw9IDApCisJaWYgKHJlcyA8PSAwKSB7CisJCXNnX3JlbW92ZV9zY2F0KHNjaHApOwogCQlyZXR1cm4gMTsKKwl9CiAJc2NocC0+a191c2Vfc2cgPSByZXM7CiAJc2NocC0+ZGlvX2luX3VzZSA9IDE7CiAJaHAtPmluZm8gfD0gU0dfSU5GT19ESVJFQ1RfSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2ltNzEwLmMgYi9kcml2ZXJzL3Njc2kvc2ltNzEwLmMKaW5kZXggMzI3NGFiNy4uMjU1ODg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NpbTcxMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zaW03MTAuYwpAQCAtNzUsNyArNzUsNyBAQAogCQllbHNlIGlmKCFzdHJuY21wKHBvcywgImlkOiIsIDMpKSB7CiAJCQlpZihzbG90ID09IC0xKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2ltNzEwOiBNdXN0IHNwZWNpZnkgc2xvdCBmb3IgaWQgcGFyYW1ldGVyXG4iKTsKLQkJCX0gZWxzZSBpZihzbG90ID4gTUFYX1NMT1RTKSB7CisJCQl9IGVsc2UgaWYoc2xvdCA+PSBNQVhfU0xPVFMpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzaW03MTA6IElsbGVnYWwgc2xvdCAlZCBmb3IgaWQgJWRcbiIsIHNsb3QsIHZhbCk7CiAJCQl9IGVsc2UgewogCQkJCWlkX2FycmF5W3Nsb3RdID0gdmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0LmMgYi9kcml2ZXJzL3Njc2kvc3QuYwppbmRleCBkNDBlN2M4Li41NmNiNDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvc3QuYwpAQCAtNDA1NCw3ICs0MDU0LDcgQEAKIAl9CiAKIAlzZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIFNEcCwKLQkJICAgICJBdHRhY2hlZCBzY3NpIHRhcGUgJXMiLCB0YXBlX25hbWUodHBudCkpOworCQkgICAgIkF0dGFjaGVkIHNjc2kgdGFwZSAlc1xuIiwgdGFwZV9uYW1lKHRwbnQpKTsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJ5IGRpcmVjdCBpL286ICVzIChhbGlnbm1lbnQgJWQgQilcbiIsCiAJICAgICAgIHRhcGVfbmFtZSh0cG50KSwgdHBudC0+dHJ5X2RpbyA/ICJ5ZXMiIDogIm5vIiwKIAkgICAgICAgcXVldWVfZG1hX2FsaWdubWVudChTRHAtPnJlcXVlc3RfcXVldWUpICsgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZGVmcy5oCmluZGV4IDM2NTlkZDcuLmRlZmNjYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZGVmcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZGVmcy5oCkBAIC00MCw3ICs0MCw3IEBACiAjaWZuZGVmIFNZTV9ERUZTX0gKICNkZWZpbmUgU1lNX0RFRlNfSAogCi0jZGVmaW5lIFNZTV9WRVJTSU9OICIyLjIuMiIKKyNkZWZpbmUgU1lNX1ZFUlNJT04gIjIuMi4zIgogI2RlZmluZSBTWU1fRFJJVkVSX05BTUUJInN5bS0iIFNZTV9WRVJTSU9OCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCmluZGV4IDFmZmZkMmIuLjljODNiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCkBAIC0xMzQsNjYgKzEzNCwxNyBAQAogCX0KIH0KIAotLyoKLSAqIFdlIHVzZWQgdG8gdHJ5IHRvIGRlYWwgd2l0aCA2NC1iaXQgQkFScyBoZXJlLCBidXQgZG9uJ3QgYW55IG1vcmUuCi0gKiBUaGVyZSBhcmUgbWFueSBwYXJ0cyBvZiB0aGlzIGRyaXZlciB3aGljaCB3b3VsZCBuZWVkIHRvIGJlIG1vZGlmaWVkCi0gKiB0byBoYW5kbGUgYSA2NC1iaXQgYmFzZSBhZGRyZXNzLCBpbmNsdWRpbmcgc2NyaXB0cy4gIEknbSB1bmNvbWZvcnRhYmxlCi0gKiB3aXRoIG1ha2luZyB0aG9zZSBjaGFuZ2VzIHdoZW4gSSBoYXZlIG5vIHdheSBvZiB0ZXN0aW5nIGl0LCBzbyBJJ20KLSAqIGp1c3QgZ29pbmcgdG8gZGlzYWJsZSBpdC4KLSAqCi0gKiBOb3RlIHRoYXQgc29tZSBtYWNoaW5lcyAoZWcgSFAgcng4NjIwIGFuZCBTdXBlcmRvbWUpIGhhdmUgYnVzIGFkZHJlc3NlcwotICogYmVsb3cgNEdCIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMgYWJvdmUgNEdCLiAgVGhlc2Ugd2lsbCBjb250aW51ZSB0byB3b3JrLgotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotcGNpX2dldF9iYXNlX2FkZHJlc3Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdW5zaWduZWQgbG9uZyAqYmFzZXApCi17Ci0JdTMyIHRtcDsKLQl1bnNpZ25lZCBsb25nIGJhc2U7Ci0jZGVmaW5lIFBDSV9CQVJfT0ZGU0VUKGluZGV4KSAoUENJX0JBU0VfQUREUkVTU18wICsgKGluZGV4PDwyKSkKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQkFSX09GRlNFVChpbmRleCsrKSwgJnRtcCk7Ci0JYmFzZSA9IHRtcDsKLQlpZiAoKHRtcCAmIDB4NykgPT0gUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCkgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0JBUl9PRkZTRVQoaW5kZXgrKyksICZ0bXApOwotCQlpZiAodG1wID4gMCkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJCQVIgJWQgaXMgNjQtYml0LCBkaXNhYmxpbmdcbiIsIGluZGV4IC0gMSk7Ci0JCQliYXNlID0gMDsKLQkJfQotCX0KLQotCWlmICgoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpID09IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHsKLQkJYmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JfSBlbHNlIHsKLQkJYmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwotCX0KLQotCSpiYXNlcCA9IGJhc2U7Ci0JcmV0dXJuIGluZGV4OwotI3VuZGVmIFBDSV9CQVJfT0ZGU0VUCi19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKnN5bTJfdHJhbnNwb3J0X3RlbXBsYXRlID0gTlVMTDsKIAogLyoKLSAqICBVc2VkIGJ5IHRoZSBlaCB0aHJlYWQgdG8gd2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9uLgotICogIEl0IGlzIGFsbG9jYXRlZCBvbiB0aGUgZWggdGhyZWFkIHN0YWNrLgotICovCi1zdHJ1Y3Qgc3ltX2VoX3dhaXQgewotCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0Jdm9pZCAoKm9sZF9kb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopOwotCWludCB0b19kbzsKLQlpbnQgdGltZWRfb3V0OwotfTsKLQotLyoKICAqICBEcml2ZXIgcHJpdmF0ZSBhcmVhIGluIHRoZSBTQ1NJIGNvbW1hbmQgc3RydWN0dXJlLgogICovCiBzdHJ1Y3Qgc3ltX3VjbWQgewkJLyogT3ZlcnJpZGUgdGhlIFNDU0kgcG9pbnRlciBzdHJ1Y3R1cmUgKi8KLQlkbWFfYWRkcl90IGRhdGFfbWFwcGluZzsKLQl1X2NoYXIJZGF0YV9tYXBwZWQ7Ci0Jc3RydWN0IHN5bV9laF93YWl0ICplaF93YWl0OworCWRtYV9hZGRyX3QJZGF0YV9tYXBwaW5nOworCXVuc2lnbmVkIGNoYXIJZGF0YV9tYXBwZWQ7CisJdW5zaWduZWQgY2hhcgl0b19kbzsJCQkvKiBGb3IgZXJyb3IgaGFuZGxpbmcgKi8KKwl2b2lkICgqb2xkX2RvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKik7CS8qIEZvciBlcnJvciBoYW5kbGluZyAqLworCXN0cnVjdCBjb21wbGV0aW9uICplaF9kb25lOwkJLyogRm9yIGVycm9yIGhhbmRsaW5nICovCiB9OwogCiAjZGVmaW5lIFNZTV9VQ01EX1BUUihjbWQpICAoKHN0cnVjdCBzeW1fdWNtZCAqKSgmKGNtZCktPlNDcCkpCkBAIC01MTQsOCArNDY1LDYgQEAKICAqLwogaW50IHN5bV9zZXR1cF9kYXRhX2FuZF9zdGFydChzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IHN5bV9jY2IgKmNwKQogewotCXN0cnVjdCBzeW1fdGNiICp0cCA9ICZucC0+dGFyZ2V0W2NwLT50YXJnZXRdOwotCXN0cnVjdCBzeW1fbGNiICpscCA9IHN5bV9scCh0cCwgY3AtPmx1bik7CiAJdTMyIGxhc3RwLCBnb2FscDsKIAlpbnQgZGlyOwogCkBAIC01OTYsNyArNTQ1LDcgQEAKIAkvKgogCSAqCWFjdGl2YXRlIHRoaXMgam9iLgogCSAqLwotCXN5bV9zdGFydF9uZXh0X2NjYnMobnAsIGxwLCAyKTsKKwlzeW1fcHV0X3N0YXJ0X3F1ZXVlKG5wLCBjcCk7CiAJcmV0dXJuIDA7CiAKIG91dF9hYm9ydDoKQEAgLTc1MSw4MCArNzAwLDU0IEBACiAgKiAgV2hhdCB3ZSB3aWxsIGRvIHJlZ2FyZGluZyB0aGUgaW52b2x2ZWQgU0NTSSBjb21tYW5kLgogICovCiAjZGVmaW5lIFNZTV9FSF9ET19JR05PUkUJMAotI2RlZmluZSBTWU1fRUhfRE9fQ09NUExFVEUJMQogI2RlZmluZSBTWU1fRUhfRE9fV0FJVAkJMgogCiAvKgotICogIE91ciBnZW5lcmFsIGNvbXBsZXRpb24gaGFuZGxlci4KKyAqICBzY3NpX2RvbmUoKSBhbGlhcyB3aGVuIGVycm9yIHJlY292ZXJ5IGlzIGluIHByb2dyZXNzLgogICovCi1zdGF0aWMgdm9pZCBfX3N5bV9laF9kb25lKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHRpbWVkX291dCkKK3N0YXRpYyB2b2lkIHN5bV9laF9kb25lKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlzdHJ1Y3Qgc3ltX2VoX3dhaXQgKmVwID0gU1lNX1VDTURfUFRSKGNtZCktPmVoX3dhaXQ7Ci0JaWYgKCFlcCkKLQkJcmV0dXJuOworCXN0cnVjdCBzeW1fdWNtZCAqdWNtZCA9IFNZTV9VQ01EX1BUUihjbWQpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNjc2lfcG9pbnRlcikgPCBzaXplb2Yoc3RydWN0IHN5bV91Y21kKSk7CiAKLQkvKiBUcnkgdG8gYXZvaWQgYSByYWNlIGhlcmUgKG5vdCAxMDAlIHNhZmUpICovCi0JaWYgKCF0aW1lZF9vdXQpIHsKLQkJZXAtPnRpbWVkX291dCA9IDA7Ci0JCWlmIChlcC0+dG9fZG8gPT0gU1lNX0VIX0RPX1dBSVQgJiYgIWRlbF90aW1lcigmZXAtPnRpbWVyKSkKLQkJCXJldHVybjsKLQl9CisJY21kLT5zY3NpX2RvbmUgPSB1Y21kLT5vbGRfZG9uZTsKIAotCS8qIFJldmVydCBldmVyeXRoaW5nICovCi0JU1lNX1VDTURfUFRSKGNtZCktPmVoX3dhaXQgPSBOVUxMOwotCWNtZC0+c2NzaV9kb25lID0gZXAtPm9sZF9kb25lOwotCi0JLyogV2FrZSB1cCB0aGUgZWggdGhyZWFkIGlmIGl0IHdhbnRzIHRvIHNsZWVwICovCi0JaWYgKGVwLT50b19kbyA9PSBTWU1fRUhfRE9fV0FJVCkKLQkJY29tcGxldGUoJmVwLT5kb25lKTsKKwlpZiAodWNtZC0+dG9fZG8gPT0gU1lNX0VIX0RPX1dBSVQpCisJCWNvbXBsZXRlKHVjbWQtPmVoX2RvbmUpOwogfQogCiAvKgotICogIHNjc2lfZG9uZSgpIGFsaWFzIHdoZW4gZXJyb3IgcmVjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MuIAotICovCi1zdGF0aWMgdm9pZCBzeW1fZWhfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpIHsgX19zeW1fZWhfZG9uZShjbWQsIDApOyB9Ci0KLS8qCi0gKiAgU29tZSB0aW1lb3V0IGhhbmRsZXIgdG8gYXZvaWQgd2FpdGluZyB0b28gbG9uZy4KLSAqLwotc3RhdGljIHZvaWQgc3ltX2VoX3RpbWVvdXQodV9sb25nIHApIHsgX19zeW1fZWhfZG9uZSgoc3RydWN0IHNjc2lfY21uZCAqKXAsIDEpOyB9Ci0KLS8qCiAgKiAgR2VuZXJpYyBtZXRob2QgZm9yIG91ciBlaCBwcm9jZXNzaW5nLgogICogIFRoZSAnb3AnIGFyZ3VtZW50IHRlbGxzIHdoYXQgd2UgaGF2ZSB0byBkby4KICAqLwogc3RhdGljIGludCBzeW1fZWhfaGFuZGxlcihpbnQgb3AsIGNoYXIgKm9wbmFtZSwgc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXN0cnVjdCBzeW1faGNiICpucCA9IFNZTV9TT0ZUQ19QVFIoY21kKTsKKwlzdHJ1Y3Qgc3ltX3VjbWQgKnVjbWQgPSBTWU1fVUNNRF9QVFIoY21kKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY21kLT5kZXZpY2UtPmhvc3Q7CiAJU1lNX1FVRUhFQUQgKnFwOwogCWludCB0b19kbyA9IFNZTV9FSF9ET19JR05PUkU7CiAJaW50IHN0cyA9IC0xOwotCXN0cnVjdCBzeW1fZWhfd2FpdCBlaCwgKmVwID0gJmVoOworCXN0cnVjdCBjb21wbGV0aW9uIGVoX2RvbmU7CiAKIAlkZXZfd2FybigmY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LCAiJXMgb3BlcmF0aW9uIHN0YXJ0ZWQuXG4iLCBvcG5hbWUpOwogCisJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCS8qIFRoaXMgb25lIGlzIHF1ZXVlZCBpbiBzb21lIHBsYWNlIC0+IHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlGT1JfRUFDSF9RVUVVRURfRUxFTUVOVCgmbnAtPmJ1c3lfY2NicSwgcXApIHsKIAkJc3RydWN0IHN5bV9jY2IgKmNwID0gc3ltX3F1ZV9lbnRyeShxcCwgc3RydWN0IHN5bV9jY2IsIGxpbmtfY2NicSk7CiAJCWlmIChjcC0+Y21kID09IGNtZCkgewogCQkJdG9fZG8gPSBTWU1fRUhfRE9fV0FJVDsKLQkJCWdvdG8gcHJlcGFyZTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCi1wcmVwYXJlOgotCS8qIFByZXBhcmUgc3R1ZmYgdG8gZWl0aGVyIGlnbm9yZSwgY29tcGxldGUgb3Igd2FpdCBmb3IgY29tcGxldGlvbiAqLwotCXN3aXRjaCh0b19kbykgewotCWRlZmF1bHQ6Ci0JY2FzZSBTWU1fRUhfRE9fSUdOT1JFOgotCQlicmVhazsKLQljYXNlIFNZTV9FSF9ET19XQUlUOgotCQlpbml0X2NvbXBsZXRpb24oJmVwLT5kb25lKTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBTWU1fRUhfRE9fQ09NUExFVEU6Ci0JCWVwLT5vbGRfZG9uZSA9IGNtZC0+c2NzaV9kb25lOworCWlmICh0b19kbyA9PSBTWU1fRUhfRE9fV0FJVCkgeworCQlpbml0X2NvbXBsZXRpb24oJmVoX2RvbmUpOworCQl1Y21kLT5vbGRfZG9uZSA9IGNtZC0+c2NzaV9kb25lOworCQl1Y21kLT5laF9kb25lID0gJmVoX2RvbmU7CisJCXdtYigpOwogCQljbWQtPnNjc2lfZG9uZSA9IHN5bV9laF9kb25lOwotCQlTWU1fVUNNRF9QVFIoY21kKS0+ZWhfd2FpdCA9IGVwOwogCX0KIAogCS8qIFRyeSB0byBwcm9jZWVkIHRoZSBvcGVyYXRpb24gd2UgaGF2ZSBiZWVuIGFza2VkIGZvciAqLwpAQCAtODUxLDI5ICs3NzQsMTkgQEAKIAogCS8qIE9uIGVycm9yLCByZXN0b3JlIGV2ZXJ5dGhpbmcgYW5kIGNyb3NzIGZpbmdlcnMgOikgKi8KIAlpZiAoc3RzKSB7Ci0JCVNZTV9VQ01EX1BUUihjbWQpLT5laF93YWl0ID0gTlVMTDsKLQkJY21kLT5zY3NpX2RvbmUgPSBlcC0+b2xkX2RvbmU7CisJCWNtZC0+c2NzaV9kb25lID0gdWNtZC0+b2xkX2RvbmU7CiAJCXRvX2RvID0gU1lNX0VIX0RPX0lHTk9SRTsKIAl9CiAKLQllcC0+dG9fZG8gPSB0b19kbzsKLQkvKiBDb21wbGV0ZSB0aGUgY29tbWFuZCB3aXRoIGxvY2tzIGhlbGQgYXMgcmVxdWlyZWQgYnkgdGhlIGRyaXZlciAqLwotCWlmICh0b19kbyA9PSBTWU1fRUhfRE9fQ09NUExFVEUpCi0JCXN5bV94cHRfZG9uZTIobnAsIGNtZCwgRElEX0FCT1JUKTsKKwl1Y21kLT50b19kbyA9IHRvX2RvOworCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCi0JLyogV2FpdCBmb3IgY29tcGxldGlvbiB3aXRoIGxvY2tzIHJlbGVhc2VkLCBhcyByZXF1aXJlZCBieSBrZXJuZWwgKi8KIAlpZiAodG9fZG8gPT0gU1lNX0VIX0RPX1dBSVQpIHsKLQkJaW5pdF90aW1lcigmZXAtPnRpbWVyKTsKLQkJZXAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKDUqSFopOwotCQllcC0+dGltZXIuZnVuY3Rpb24gPSBzeW1fZWhfdGltZW91dDsKLQkJZXAtPnRpbWVyLmRhdGEgPSAodV9sb25nKWNtZDsKLQkJZXAtPnRpbWVkX291dCA9IDE7CS8qIEJlIHBlc3NpbWlzdGljIGZvciBvbmNlIDopICovCi0JCWFkZF90aW1lcigmZXAtPnRpbWVyKTsKLQkJc3Bpbl91bmxvY2tfaXJxKG5wLT5zLmhvc3QtPmhvc3RfbG9jayk7Ci0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJmVwLT5kb25lKTsKLQkJc3Bpbl9sb2NrX2lycShucC0+cy5ob3N0LT5ob3N0X2xvY2spOwotCQlpZiAoZXAtPnRpbWVkX291dCkKKwkJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmVoX2RvbmUsIDUqSFopKSB7CisJCQl1Y21kLT50b19kbyA9IFNZTV9FSF9ET19JR05PUkU7CisJCQl3bWIoKTsKIAkJCXN0cyA9IC0yOworCQl9CiAJfQogCWRldl93YXJuKCZjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYsICIlcyBvcGVyYXRpb24gJXMuXG4iLCBvcG5hbWUsCiAJCQlzdHM9PTAgPyAiY29tcGxldGUiIDpzdHM9PS0yID8gInRpbWVkLW91dCIgOiAiZmFpbGVkIik7CkBAIC04ODYsNDYgKzc5OSwyMiBAQAogICovCiBzdGF0aWMgaW50IHN5bTUzYzh4eF9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlpbnQgcmM7Ci0KLQlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCXJjID0gc3ltX2VoX2hhbmRsZXIoU1lNX0VIX0FCT1JULCAiQUJPUlQiLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotCXJldHVybiByYzsKKwlyZXR1cm4gc3ltX2VoX2hhbmRsZXIoU1lNX0VIX0FCT1JULCAiQUJPUlQiLCBjbWQpOwogfQogCiBzdGF0aWMgaW50IHN5bTUzYzh4eF9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0JaW50IHJjOwotCi0Jc3Bpbl9sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyYyA9IHN5bV9laF9oYW5kbGVyKFNZTV9FSF9ERVZJQ0VfUkVTRVQsICJERVZJQ0UgUkVTRVQiLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotCXJldHVybiByYzsKKwlyZXR1cm4gc3ltX2VoX2hhbmRsZXIoU1lNX0VIX0RFVklDRV9SRVNFVCwgIkRFVklDRSBSRVNFVCIsIGNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgc3ltNTNjOHh4X2VoX2J1c19yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlpbnQgcmM7Ci0KLQlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCXJjID0gc3ltX2VoX2hhbmRsZXIoU1lNX0VIX0JVU19SRVNFVCwgIkJVUyBSRVNFVCIsIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCi0JcmV0dXJuIHJjOworCXJldHVybiBzeW1fZWhfaGFuZGxlcihTWU1fRUhfQlVTX1JFU0VULCAiQlVTIFJFU0VUIiwgY21kKTsKIH0KIAogc3RhdGljIGludCBzeW01M2M4eHhfZWhfaG9zdF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlpbnQgcmM7Ci0KLQlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCXJjID0gc3ltX2VoX2hhbmRsZXIoU1lNX0VIX0hPU1RfUkVTRVQsICJIT1NUIFJFU0VUIiwgY21kKTsKLQlzcGluX3VubG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIHN5bV9laF9oYW5kbGVyKFNZTV9FSF9IT1NUX1JFU0VULCAiSE9TVCBSRVNFVCIsIGNtZCk7CiB9CiAKIC8qCkBAIC05NDQsMTUgKzgzMywxMiBAQAogCWlmIChyZXF0YWdzID4gbHAtPnMuc2NkZXZfZGVwdGgpCiAJCXJlcXRhZ3MgPSBscC0+cy5zY2Rldl9kZXB0aDsKIAotCWxwLT5zdGFydGVkX2xpbWl0ID0gcmVxdGFncyA/IHJlcXRhZ3MgOiAyOwotCWxwLT5zdGFydGVkX21heCAgID0gMTsKIAlscC0+cy5yZXF0YWdzICAgICA9IHJlcXRhZ3M7CiAKIAlpZiAocmVxdGFncyAhPSBvbGR0YWdzKSB7CiAJCWRldl9pbmZvKCZ0cC0+c3RhcmdldC0+ZGV2LAogCQkgICAgICAgICAidGFnZ2VkIGNvbW1hbmQgcXVldWluZyAlcywgY29tbWFuZCBxdWV1ZSBkZXB0aCAlZC5cbiIsCi0JCSAgICAgICAgICBscC0+cy5yZXF0YWdzID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLSAJCSAgICAgICAgICBscC0+c3RhcnRlZF9saW1pdCk7CisJCSAgICAgICAgICBscC0+cy5yZXF0YWdzID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwgcmVxdGFncyk7CiAJfQogfQogCkBAIC0xODY2LDE1ICsxNzUyLDI1IEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQKIHN5bV9pbml0X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHN5bV9kZXZpY2UgKmRldmljZSkKIHsKLQlpbnQgaTsKKwlpbnQgaSA9IDI7CisJc3RydWN0IHBjaV9idXNfcmVnaW9uIGJ1c19hZGRyOwogCiAJZGV2aWNlLT5ob3N0X2lkID0gU1lNX1NFVFVQX0hPU1RfSUQ7CiAJZGV2aWNlLT5wZGV2ID0gcGRldjsKIAotCWkgPSBwY2lfZ2V0X2Jhc2VfYWRkcmVzcyhwZGV2LCAxLCAmZGV2aWNlLT5tbWlvX2Jhc2UpOwotCXBjaV9nZXRfYmFzZV9hZGRyZXNzKHBkZXYsIGksICZkZXZpY2UtPnJhbV9iYXNlKTsKKwlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhwZGV2LCAmYnVzX2FkZHIsICZwZGV2LT5yZXNvdXJjZVsxXSk7CisJZGV2aWNlLT5tbWlvX2Jhc2UgPSBidXNfYWRkci5zdGFydDsKIAotI2lmbmRlZiBDT05GSUdfU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQKKwkvKgorCSAqIElmIHRoZSBCQVIgaXMgNjQtYml0LCByZXNvdXJjZSAyIHdpbGwgYmUgb2NjdXBpZWQgYnkgdGhlCisJICogdXBwZXIgMzIgYml0cworCSAqLworCWlmICghcGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MpCisJCWkrKzsKKwlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhwZGV2LCAmYnVzX2FkZHIsICZwZGV2LT5yZXNvdXJjZVtpXSk7CisJZGV2aWNlLT5yYW1fYmFzZSA9IGJ1c19hZGRyLnN0YXJ0OworCisjaWZkZWYgQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU8KIAlpZiAoZGV2aWNlLT5tbWlvX2Jhc2UpCiAJCWRldmljZS0+cy5pb2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMSwKIAkJCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpOwpAQCAtMTk3OCw3ICsxODc0LDggQEAKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJPSBzeW01M2M4eHhfZWhfYnVzX3Jlc2V0X2hhbmRsZXIsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHN5bTUzYzh4eF9laF9ob3N0X3Jlc2V0X2hhbmRsZXIsCiAJLnRoaXNfaWQJCT0gNywKLQkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAorCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKKwkubWF4X3NlY3RvcnMJCT0gMHhGRkZGLAogI2lmZGVmIFNZTV9MSU5VWF9QUk9DX0lORk9fU1VQUE9SVAogCS5wcm9jX2luZm8JCT0gc3ltNTNjOHh4X3Byb2NfaW5mbywKIAkucHJvY19uYW1lCQk9IE5BTUU1M0M4WFgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5oCmluZGV4IGNjOTJkMGMuLmE0NDZjZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5oCkBAIC02OCw3ICs2OCw3IEBACiAgKi8KICNkZWZpbmUJU1lNX0NPTkZfVElNRVJfSU5URVJWQUwJCSgoSForMSkvMikKIAotI2RlZmluZSBTWU1fT1BUX0hBTkRMRV9ERVZJQ0VfUVVFVUVJTkcKKyN1bmRlZiBTWU1fT1BUX0hBTkRMRV9ERVZJQ0VfUVVFVUVJTkcKICNkZWZpbmUgU1lNX09QVF9MSU1JVF9DT01NQU5EX1JFT1JERVJJTkcKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKaW5kZXggNjA4NTBjYi4uYTY3MWJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKQEAgLTcyLDcgKzcyLDEwIEBACiAKIHN0YXRpYyB2b2lkIHN5bV9wcmludF9tc2coc3RydWN0IHN5bV9jY2IgKmNwLCBjaGFyICpsYWJlbCwgdV9jaGFyICptc2cpCiB7Ci0Jc3ltX3ByaW50X2FkZHIoY3AtPmNtZCwgIiVzOiAiLCBsYWJlbCk7CisJaWYgKGxhYmVsKQorCQlzeW1fcHJpbnRfYWRkcihjcC0+Y21kLCAiJXM6ICIsIGxhYmVsKTsKKwllbHNlCisJCXN5bV9wcmludF9hZGRyKGNwLT5jbWQsICIiKTsKIAogCXNwaV9wcmludF9tc2cobXNnKTsKIAlwcmludGYoIlxuIik7CkBAIC00NzIsNyArNDc1LDcgQEAKICAqICBjYWxjdWxhdGlvbnMgbW9yZSBzaW1wbGUuCiAgKi8KICNkZWZpbmUgXzVNIDUwMDAwMDAKLXN0YXRpYyB1MzIgZGl2XzEwTVtdID0gezIqXzVNLCAzKl81TSwgNCpfNU0sIDYqXzVNLCA4Kl81TSwgMTIqXzVNLCAxNipfNU19Oworc3RhdGljIGNvbnN0IHUzMiBkaXZfMTBNW10gPSB7MipfNU0sIDMqXzVNLCA0Kl81TSwgNipfNU0sIDgqXzVNLCAxMipfNU0sIDE2Kl81TX07CiAKIC8qCiAgKiAgR2V0IGNsb2NrIGZhY3RvciBhbmQgc3luYyBkaXZpc29yIGZvciBhIGdpdmVuIApAQCAtNjQ1LDYgKzY0OCwzNyBAQAogfQogCiAvKgorICogIFNldCBTQ1NJIEJVUyBtb2RlLgorICogIC0gTFZEIGNhcGFibGUgY2hpcHMgKDg5NS84OTVBLzg5Ni8xMDEwKSByZXBvcnQgdGhlIGN1cnJlbnQgQlVTIG1vZGUKKyAqICAgIHRocm91Z2ggdGhlIFNURVNUNCBJTyByZWdpc3Rlci4KKyAqICAtIEZvciBwcmV2aW91cyBnZW5lcmF0aW9uIGNoaXBzICg4MjUvODI1QS84NzUpLCB0aGUgdXNlciBoYXMgdG8gdGVsbCB1cworICogICAgaG93IHRvIGNoZWNrIGFnYWluc3QgSFZELCBzaW5jZSBhIDEwMCUgc2FmZSBhbGdvcml0aG0gaXMgbm90IHBvc3NpYmxlLgorICovCitzdGF0aWMgdm9pZCBzeW1fc2V0X2J1c19tb2RlKHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHN5bV9udnJhbSAqbnZyYW0pCit7CisJaWYgKG5wLT5zY3NpX21vZGUpCisJCXJldHVybjsKKworCW5wLT5zY3NpX21vZGUgPSBTTU9ERV9TRTsKKwlpZiAobnAtPmZlYXR1cmVzICYgKEZFX1VMVFJBMnxGRV9VTFRSQTMpKQorCQlucC0+c2NzaV9tb2RlID0gKG5wLT5zdl9zdGVzdDQgJiBTTU9ERSk7CisJZWxzZSBpZgkobnAtPmZlYXR1cmVzICYgRkVfRElGRikgeworCQlpZiAoU1lNX1NFVFVQX1NDU0lfRElGRiA9PSAxKSB7CisJCQlpZiAobnAtPnN2X3NjbnRsMykgeworCQkJCWlmIChucC0+c3Zfc3Rlc3QyICYgMHgyMCkKKwkJCQkJbnAtPnNjc2lfbW9kZSA9IFNNT0RFX0hWRDsKKwkJCX0gZWxzZSBpZiAobnZyYW0tPnR5cGUgPT0gU1lNX1NZTUJJT1NfTlZSQU0pIHsKKwkJCQlpZiAoIShJTkIobnAsIG5jX2dwcmVnKSAmIDB4MDgpKQorCQkJCQlucC0+c2NzaV9tb2RlID0gU01PREVfSFZEOworCQkJfQorCQl9IGVsc2UgaWYgKFNZTV9TRVRVUF9TQ1NJX0RJRkYgPT0gMikKKwkJCW5wLT5zY3NpX21vZGUgPSBTTU9ERV9IVkQ7CisJfQorCWlmIChucC0+c2NzaV9tb2RlID09IFNNT0RFX0hWRCkKKwkJbnAtPnJ2X3N0ZXN0MiB8PSAweDIwOworfQorCisvKgogICogIFByZXBhcmUgaW8gcmVnaXN0ZXIgdmFsdWVzIHVzZWQgYnkgc3ltX3N0YXJ0X3VwKCkgCiAgKiAgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIGFuZCBzdXBwb3J0ZWQgZmVhdHVyZXMuCiAgKi8KQEAgLTY1NCwxMCArNjg4LDcgQEAKIAl1MzIJcGVyaW9kOwogCWludCBpOwogCi0JLyoKLQkgKiAgV2lkZSA/Ci0JICovCi0JbnAtPm1heHdpZGUJPSAobnAtPmZlYXR1cmVzICYgRkVfV0lERSk/IDEgOiAwOworCW5wLT5tYXh3aWRlID0gKG5wLT5mZWF0dXJlcyAmIEZFX1dJREUpID8gMSA6IDA7CiAKIAkvKgogCSAqICBHdWVzcyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBjaGlwJ3MgY2xvY2suCkBAIC04MzgsNiArODY5LDcgQEAKIAkgKiAgR2V0IHBhcml0eSBjaGVja2luZywgaG9zdCBJRCBhbmQgdmVyYm9zZSBtb2RlIGZyb20gTlZSQU0KIAkgKi8KIAlucC0+bXlhZGRyID0gMjU1OworCW5wLT5zY3NpX21vZGUgPSAwOwogCXN5bV9udnJhbV9zZXR1cF9ob3N0KHNob3N0LCBucCwgbnZyYW0pOwogCiAJLyoKQEAgLTg1NCwzMyArODg2LDcgQEAKIAkgKi8KIAlzeW1faW5pdF9idXJzdChucCwgYnVyc3RfbWF4KTsKIAotCS8qCi0JICogIFNldCBTQ1NJIEJVUyBtb2RlLgotCSAqICAtIExWRCBjYXBhYmxlIGNoaXBzICg4OTUvODk1QS84OTYvMTAxMCkgcmVwb3J0IHRoZSAKLQkgKiAgICBjdXJyZW50IEJVUyBtb2RlIHRocm91Z2ggdGhlIFNURVNUNCBJTyByZWdpc3Rlci4KLQkgKiAgLSBGb3IgcHJldmlvdXMgZ2VuZXJhdGlvbiBjaGlwcyAoODI1LzgyNUEvODc1KSwgCi0JICogICAgdXNlciBoYXMgdG8gdGVsbCB1cyBob3cgdG8gY2hlY2sgYWdhaW5zdCBIVkQsIAotCSAqICAgIHNpbmNlIGEgMTAwJSBzYWZlIGFsZ29yaXRobSBpcyBub3QgcG9zc2libGUuCi0JICovCi0JbnAtPnNjc2lfbW9kZSA9IFNNT0RFX1NFOwotCWlmIChucC0+ZmVhdHVyZXMgJiAoRkVfVUxUUkEyfEZFX1VMVFJBMykpCi0JCW5wLT5zY3NpX21vZGUgPSAobnAtPnN2X3N0ZXN0NCAmIFNNT0RFKTsKLQllbHNlIGlmCShucC0+ZmVhdHVyZXMgJiBGRV9ESUZGKSB7Ci0JCWlmIChTWU1fU0VUVVBfU0NTSV9ESUZGID09IDEpIHsKLQkJCWlmIChucC0+c3Zfc2NudGwzKSB7Ci0JCQkJaWYgKG5wLT5zdl9zdGVzdDIgJiAweDIwKQotCQkJCQlucC0+c2NzaV9tb2RlID0gU01PREVfSFZEOwotCQkJfQotCQkJZWxzZSBpZiAobnZyYW0tPnR5cGUgPT0gU1lNX1NZTUJJT1NfTlZSQU0pIHsKLQkJCQlpZiAoIShJTkIobnAsIG5jX2dwcmVnKSAmIDB4MDgpKQotCQkJCQlucC0+c2NzaV9tb2RlID0gU01PREVfSFZEOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYJKFNZTV9TRVRVUF9TQ1NJX0RJRkYgPT0gMikKLQkJCW5wLT5zY3NpX21vZGUgPSBTTU9ERV9IVkQ7Ci0JfQotCWlmIChucC0+c2NzaV9tb2RlID09IFNNT0RFX0hWRCkKLQkJbnAtPnJ2X3N0ZXN0MiB8PSAweDIwOworCXN5bV9zZXRfYnVzX21vZGUobnAsIG52cmFtKTsKIAogCS8qCiAJICogIFNldCBMRUQgc3VwcG9ydCBmcm9tIFNDUklQVFMuCkBAIC05NzMsOCArOTc5LDggQEAKICAqCiAgKiAgSGFzIHRvIGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KLSNpZm5kZWYgQ09ORklHX1NDU0lfU1lNNTNDOFhYX0lPTUFQUEVECi1zdGF0aWMgaW50IHN5bV9yZWd0ZXN0IChzdHJ1Y3Qgc3ltX2hjYiAqbnApCisjaWZkZWYgQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU8KK3N0YXRpYyBpbnQgc3ltX3JlZ3Rlc3Qoc3RydWN0IHN5bV9oY2IgKm5wKQogewogCXJlZ2lzdGVyIHZvbGF0aWxlIHUzMiBkYXRhOwogCS8qCkBAIC05OTIsMjAgKzk5OCwyNSBAQAogI2VuZGlmCiAJCXByaW50ZiAoIkNBQ0hFIFRFU1QgRkFJTEVEOiByZWcgZHN0YXQtc3N0YXQyIHJlYWRiYWNrICV4LlxuIiwKIAkJCSh1bnNpZ25lZCkgZGF0YSk7Ci0JCXJldHVybiAoMHgxMCk7CisJCXJldHVybiAweDEwOwogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHN5bV9yZWd0ZXN0KHN0cnVjdCBzeW1faGNiICpucCkKK3sKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHN5bV9zbm9vcHRlc3QgKHN0cnVjdCBzeW1faGNiICpucCkKK3N0YXRpYyBpbnQgc3ltX3Nub29wdGVzdChzdHJ1Y3Qgc3ltX2hjYiAqbnApCiB7Ci0JdTMyCXN5bV9yZCwgc3ltX3dyLCBzeW1fYmssIGhvc3RfcmQsIGhvc3Rfd3IsIHBjLCBkc3RhdDsKLQlpbnQJaSwgZXJyPTA7Ci0jaWZuZGVmIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9JT01BUFBFRAotCWVyciB8PSBzeW1fcmVndGVzdCAobnApOwotCWlmIChlcnIpIHJldHVybiAoZXJyKTsKLSNlbmRpZgorCXUzMiBzeW1fcmQsIHN5bV93ciwgc3ltX2JrLCBob3N0X3JkLCBob3N0X3dyLCBwYywgZHN0YXQ7CisJaW50IGksIGVycjsKKworCWVyciA9IHN5bV9yZWd0ZXN0KG5wKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogcmVzdGFydF90ZXN0OgogCS8qCiAJICogIEVuYWJsZSBNYXN0ZXIgUGFyaXR5IENoZWNraW5nIGFzIHdlIGludGVuZCAKQEAgLTEwOTQsNyArMTEwNSw3IEBACiAJCWVyciB8PSA0OwogCX0KIAotCXJldHVybiAoZXJyKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtMTQ2NCw3ICsxNDc1LDcgQEAKIC8qCiAgKiAgSW5zZXJ0IGEgam9iIGludG8gdGhlIHN0YXJ0IHF1ZXVlLgogICovCi1zdGF0aWMgdm9pZCBzeW1fcHV0X3N0YXJ0X3F1ZXVlKHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHN5bV9jY2IgKmNwKQordm9pZCBzeW1fcHV0X3N0YXJ0X3F1ZXVlKHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHN5bV9jY2IgKmNwKQogewogCXVfc2hvcnQJcWlkeDsKIApAQCAtNDQ4MSw3ICs0NDkyLDcgQEAKIAkJCXN3aXRjaCAobnAtPm1zZ2luIFsyXSkgewogCQkJY2FzZSBNX1hfTU9ESUZZX0RQOgogCQkJCWlmIChERUJVR19GTEFHUyAmIERFQlVHX1BPSU5URVIpCi0JCQkJCXN5bV9wcmludF9tc2coY3AsIm1vZGlmeSBEUCIsbnAtPm1zZ2luKTsKKwkJCQkJc3ltX3ByaW50X21zZyhjcCwgTlVMTCwgbnAtPm1zZ2luKTsKIAkJCQl0bXAgPSAobnAtPm1zZ2luWzNdPDwyNCkgKyAobnAtPm1zZ2luWzRdPDwxNikgKyAKIAkJCQkgICAgICAobnAtPm1zZ2luWzVdPDw4KSAgKyAobnAtPm1zZ2luWzZdKTsKIAkJCQlzeW1fbW9kaWZ5X2RwKG5wLCB0cCwgY3AsIHRtcCk7CkBAIC00NTA4LDcgKzQ1MTksNyBAQAogCQkgKi8KIAkJY2FzZSBNX0lHTl9SRVNJRFVFOgogCQkJaWYgKERFQlVHX0ZMQUdTICYgREVCVUdfUE9JTlRFUikKLQkJCQlzeW1fcHJpbnRfbXNnKGNwLCJpZ24gd2lkZSByZXNpZHVlIiwgbnAtPm1zZ2luKTsKKwkJCQlzeW1fcHJpbnRfbXNnKGNwLCBOVUxMLCBucC0+bXNnaW4pOwogCQkJaWYgKGNwLT5ob3N0X2ZsYWdzICYgSEZfU0VOU0UpCiAJCQkJT1VUTF9EU1AobnAsIFNDUklQVEFfQkEobnAsIGNscmFjaykpOwogCQkJZWxzZQpAQCAtNDU5Nyw3ICs0NjA4LDggQEAKIAkJCSAqICBEZWJ1Z2dpbmcgcHVycG9zZS4KIAkJCSAqLwogI2lmbmRlZiBTWU1fT1BUX0hBTkRMRV9ERVZJQ0VfUVVFVUVJTkcKLQkJCWFzc2VydChscC0+YnVzeV9pdGwgPT0gMCk7CisJCQlpZiAobHAtPmJ1c3lfaXRsICE9IDApCisJCQkJZ290byBvdXRfZnJlZTsKICNlbmRpZgogCQkJLyoKIAkJCSAqICBBbGxvY2F0ZSByZXNvdXJjZXMgZm9yIHRhZ3MgaWYgbm90IHlldC4KQEAgLTQ2NDIsNyArNDY1NCw4IEBACiAJCQkgKiAgRGVidWdnaW5nIHB1cnBvc2UuCiAJCQkgKi8KICNpZm5kZWYgU1lNX09QVF9IQU5ETEVfREVWSUNFX1FVRVVFSU5HCi0JCQlhc3NlcnQobHAtPmJ1c3lfaXRsID09IDAgJiYgbHAtPmJ1c3lfaXRscSA9PSAwKTsKKwkJCWlmIChscC0+YnVzeV9pdGwgIT0gMCB8fCBscC0+YnVzeV9pdGxxICE9IDApCisJCQkJZ290byBvdXRfZnJlZTsKICNlbmRpZgogCQkJLyoKIAkJCSAqICBDb3VudCB0aGlzIG5leHVzIGZvciB0aGlzIExVTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5oIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmgKaW5kZXggMjQ1NjA5MC4uNzlhYjZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmgKQEAgLTEwNDksNiArMTA0OSw4IEBACiBzdHJ1Y3Qgc3ltX2NoaXAgKnN5bV9sb29rdXBfY2hpcF90YWJsZSh1X3Nob3J0IGRldmljZV9pZCwgdV9jaGFyIHJldmlzaW9uKTsKICNpZmRlZiBTWU1fT1BUX0hBTkRMRV9ERVZJQ0VfUVVFVUVJTkcKIHZvaWQgc3ltX3N0YXJ0X25leHRfY2NicyhzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBzeW1fbGNiICpscCwgaW50IG1heG4pOworI2Vsc2UKK3ZvaWQgc3ltX3B1dF9zdGFydF9xdWV1ZShzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBzeW1fY2NiICpjcCk7CiAjZW5kaWYKIHZvaWQgc3ltX3N0YXJ0X3VwKHN0cnVjdCBzeW1faGNiICpucCwgaW50IHJlYXNvbik7CiB2b2lkIHN5bV9pbnRlcnJ1cHQoc3RydWN0IHN5bV9oY2IgKm5wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCA2NzRiMTVjLi5iYmY3OGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0zNjIsNiArMzYyLDQwIEBACiAjZGVmaW5lIHNlcmlhbF9pbnAodXAsIG9mZnNldCkJCXNlcmlhbF9pbih1cCwgb2Zmc2V0KQogI2RlZmluZSBzZXJpYWxfb3V0cCh1cCwgb2Zmc2V0LCB2YWx1ZSkJc2VyaWFsX291dCh1cCwgb2Zmc2V0LCB2YWx1ZSkKIAorLyogVWFydCBkaXZpc29yIGxhdGNoIHJlYWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9zZXJpYWxfZGxfcmVhZChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQoreworCXJldHVybiBzZXJpYWxfaW5wKHVwLCBVQVJUX0RMTCkgfCBzZXJpYWxfaW5wKHVwLCBVQVJUX0RMTSkgPDwgODsKK30KKworLyogVWFydCBkaXZpc29yIGxhdGNoIHdyaXRlICovCitzdGF0aWMgaW5saW5lIHZvaWQgX3NlcmlhbF9kbF93cml0ZShzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwLCBpbnQgdmFsdWUpCit7CisJc2VyaWFsX291dHAodXAsIFVBUlRfRExMLCB2YWx1ZSAmIDB4ZmYpOworCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0RMTSwgdmFsdWUgPj4gOCAmIDB4ZmYpOworfQorCisjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMAorLyogQXUxeDAwIGhhdmVuJ3QgZ290IGEgc3RhbmRhcmQgZGl2aXNvciBsYXRjaCAqLworc3RhdGljIGludCBzZXJpYWxfZGxfcmVhZChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQoreworCWlmICh1cC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKKwkJcmV0dXJuIF9fcmF3X3JlYWRsKHVwLT5wb3J0Lm1lbWJhc2UgKyAweDI4KTsKKwllbHNlCisJCXJldHVybiBfc2VyaWFsX2RsX3JlYWQodXApOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfZGxfd3JpdGUoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCwgaW50IHZhbHVlKQoreworCWlmICh1cC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKKwkJX19yYXdfd3JpdGVsKHZhbHVlLCB1cC0+cG9ydC5tZW1iYXNlICsgMHgyOCk7CisJZWxzZQorCQlfc2VyaWFsX2RsX3dyaXRlKHVwLCB2YWx1ZSk7Cit9CisjZWxzZQorI2RlZmluZSBzZXJpYWxfZGxfcmVhZCh1cCkgX3NlcmlhbF9kbF9yZWFkKHVwKQorI2RlZmluZSBzZXJpYWxfZGxfd3JpdGUodXAsIHZhbHVlKSBfc2VyaWFsX2RsX3dyaXRlKHVwLCB2YWx1ZSkKKyNlbmRpZgogCiAvKgogICogRm9yIHRoZSAxNkM5NTAKQEAgLTQ5NCw3ICs1MjgsOCBAQAogICovCiBzdGF0aWMgaW50IHNpemVfZmlmbyhzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXVuc2lnbmVkIGNoYXIgb2xkX2Zjciwgb2xkX21jciwgb2xkX2RsbCwgb2xkX2RsbSwgb2xkX2xjcjsKKwl1bnNpZ25lZCBjaGFyIG9sZF9mY3IsIG9sZF9tY3IsIG9sZF9sY3I7CisJdW5zaWduZWQgc2hvcnQgb2xkX2RsOwogCWludCBjb3VudDsKIAogCW9sZF9sY3IgPSBzZXJpYWxfaW5wKHVwLCBVQVJUX0xDUik7CkBAIC01MDUsMTAgKzU0MCw4IEBACiAJCSAgICBVQVJUX0ZDUl9DTEVBUl9SQ1ZSIHwgVUFSVF9GQ1JfQ0xFQVJfWE1JVCk7CiAJc2VyaWFsX291dHAodXAsIFVBUlRfTUNSLCBVQVJUX01DUl9MT09QKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0RMQUIpOwotCW9sZF9kbGwgPSBzZXJpYWxfaW5wKHVwLCBVQVJUX0RMTCk7Ci0Jb2xkX2RsbSA9IHNlcmlhbF9pbnAodXAsIFVBUlRfRExNKTsKLQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9ETEwsIDB4MDEpOwotCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0RMTSwgMHgwMCk7CisJb2xkX2RsID0gc2VyaWFsX2RsX3JlYWQodXApOworCXNlcmlhbF9kbF93cml0ZSh1cCwgMHgwMDAxKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIDB4MDMpOwogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDI1NjsgY291bnQrKykKIAkJc2VyaWFsX291dHAodXAsIFVBUlRfVFgsIGNvdW50KTsKQEAgLTUxOSw4ICs1NTIsNyBAQAogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0ZDUiwgb2xkX2Zjcik7CiAJc2VyaWFsX291dHAodXAsIFVBUlRfTUNSLCBvbGRfbWNyKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0RMQUIpOwotCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0RMTCwgb2xkX2RsbCk7Ci0Jc2VyaWFsX291dHAodXAsIFVBUlRfRExNLCBvbGRfZGxtKTsKKwlzZXJpYWxfZGxfd3JpdGUodXAsIG9sZF9kbCk7CiAJc2VyaWFsX291dHAodXAsIFVBUlRfTENSLCBvbGRfbGNyKTsKIAogCXJldHVybiBjb3VudDsKQEAgLTc1MCw4ICs3ODIsNyBAQAogCiAJCQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIDB4RTApOwogCi0JCQlxdW90ID0gc2VyaWFsX2lucCh1cCwgVUFSVF9ETE0pIDw8IDg7Ci0JCQlxdW90ICs9IHNlcmlhbF9pbnAodXAsIFVBUlRfRExMKTsKKwkJCXF1b3QgPSBzZXJpYWxfZGxfcmVhZCh1cCk7CiAJCQlxdW90IDw8PSAzOwogCiAJCQlzdGF0dXMxID0gc2VyaWFsX2luKHVwLCAweDA0KTsgLyogRVhDUjEgKi8KQEAgLTc1OSw4ICs3OTAsNyBAQAogCQkJc3RhdHVzMSB8PSAweDEwOyAgLyogMS42MjUgZGl2aXNvciBmb3IgYmF1ZF9iYXNlIC0tPiA5MjE2MDAgKi8KIAkJCXNlcmlhbF9vdXRwKHVwLCAweDA0LCBzdGF0dXMxKTsKIAkJCQotCQkJc2VyaWFsX291dHAodXAsIFVBUlRfRExMLCBxdW90ICYgMHhmZik7Ci0JCQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9ETE0sIHF1b3QgPj4gOCk7CisJCQlzZXJpYWxfZGxfd3JpdGUodXAsIHF1b3QpOwogCiAJCQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIDApOwogCkBAIC0xODYyLDggKzE4OTIsNyBAQAogCQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIGN2YWwgfCBVQVJUX0xDUl9ETEFCKTsvKiBzZXQgRExBQiAqLwogCX0KIAotCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0RMTCwgcXVvdCAmIDB4ZmYpOwkJLyogTFMgb2YgZGl2aXNvciAqLwotCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0RMTSwgcXVvdCA+PiA4KTsJCS8qIE1TIG9mIGRpdmlzb3IgKi8KKwlzZXJpYWxfZGxfd3JpdGUodXAsIHF1b3QpOwogCiAJLyoKIAkgKiBMQ1IgRExBQiBtdXN0IGJlIHNldCB0byBlbmFibGUgNjQtYnl0ZSBGSUZPIG1vZGUuIElmIHRoZSBGQ1IKQEAgLTE5MDYsNiArMTkzNSw5IEBACiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKHVwLT5wb3J0LmlvdHlwZSkgeworCWNhc2UgVVBJT19BVToKKwkJc2l6ZSA9IDB4MTAwMDAwOworCQkvKiBmYWxsIHRocnUgKi8KIAljYXNlIFVQSU9fTUVNOgogCQlpZiAoIXVwLT5wb3J0Lm1hcGJhc2UpCiAJCQlicmVhazsKQEAgLTE5MzgsNiArMTk3MCw5IEBACiAJdW5zaWduZWQgaW50IHNpemUgPSA4IDw8IHVwLT5wb3J0LnJlZ3NoaWZ0OwogCiAJc3dpdGNoICh1cC0+cG9ydC5pb3R5cGUpIHsKKwljYXNlIFVQSU9fQVU6CisJCXNpemUgPSAweDEwMDAwMDsKKwkJLyogZmFsbCB0aHJ1ICovCiAJY2FzZSBVUElPX01FTToKIAkJaWYgKCF1cC0+cG9ydC5tYXBiYXNlKQogCQkJYnJlYWs7CkBAIC0yMjAwLDEwICsyMjM1LDE3IEBACiBzZXJpYWw4MjUwX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9ICZzZXJpYWw4MjUwX3BvcnRzW2NvLT5pbmRleF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaWVyOworCWludCBsb2NrZWQgPSAxOwogCiAJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAKKwlpZiAob29wc19pbl9wcm9ncmVzcykgeworCQlsb2NrZWQgPSBzcGluX3RyeWxvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCX0gZWxzZQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCiAJLyoKIAkgKglGaXJzdCBzYXZlIHRoZSBJRVIgdGhlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCiAJICovCkBAIC0yMjIxLDggKzIyNjMsMTAgQEAKIAkgKglhbmQgcmVzdG9yZSB0aGUgSUVSCiAJICovCiAJd2FpdF9mb3JfeG1pdHIodXAsIEJPVEhfRU1QVFkpOwotCXVwLT5pZXIgfD0gVUFSVF9JRVJfVEhSSTsKLQlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgaWVyIHwgVUFSVF9JRVJfVEhSSSk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9JRVIsIGllcik7CisKKwlpZiAobG9ja2VkKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgc2VyaWFsODI1MF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfYXUxeDAwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2F1MXgwMC5jCmluZGV4IDNkMWJmZDAuLjU4MDE1ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfYXUxeDAwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MF9hdTF4MDAuYwpAQCAtMzAsMTMgKzMwLDEyIEBACiAJewkJCQkJCVwKIAkJLmlvYmFzZQkJPSBfYmFzZSwJCVwKIAkJLm1lbWJhc2UJPSAodm9pZCBfX2lvbWVtICopX2Jhc2UsXAotCQkubWFwYmFzZQk9IF9iYXNlLAkJXAorCQkubWFwYmFzZQk9IENQSFlTQUREUihfYmFzZSksCVwKIAkJLmlycQkJPSBfaXJxLAkJCVwKIAkJLnVhcnRjbGsJPSAwLAkvKiBmaWxsZWQgKi8JXAogCQkucmVnc2hpZnQJPSAyLAkJCVwKIAkJLmlvdHlwZQkJPSBVUElPX0FVLAkJXAotCQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCB8IAlcCi0JCQkJICBVUEZfSU9SRU1BUCwJCVwKKwkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QgCVwKIAl9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgYXUxeDAwX2RhdGFbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IGZlMGQ4YjguLjdkMjJkYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtNjMsNiArNjMsMzMgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFNFUklBTF84MjUwX0dTQworCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBTRVJJQUxfODI1MCAmJiBHU0MKKwlkZWZhdWx0IFNFUklBTF84MjUwCisKK2NvbmZpZyBTRVJJQUxfODI1MF9QQ0kKKwl0cmlzdGF0ZSAiODI1MC8xNjU1MCBQQ0kgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBTRVJJQUxfODI1MCAmJiBQQ0kKKwlkZWZhdWx0IFNFUklBTF84MjUwCisJaGVscAorCSAgVGhpcyBidWlsZHMgc3RhbmRhcmQgUENJIHNlcmlhbCBzdXBwb3J0LiBZb3UgbWF5IGJlIGFibGUgdG8KKwkgIGRpc2FibGUgdGhpcyBmZWF0dXJlIGlmIHlvdSBvbmx5IG5lZWQgbGVnYWN5IHNlcmlhbCBzdXBwb3J0LgorCSAgU2F2ZXMgYWJvdXQgOUsuCisKK2NvbmZpZyBTRVJJQUxfODI1MF9QTlAKKwl0cmlzdGF0ZSAiODI1MC8xNjU1MCBQTlAgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBTRVJJQUxfODI1MCAmJiBQTlAKKwlkZWZhdWx0IFNFUklBTF84MjUwCisJaGVscAorCSAgVGhpcyBidWlsZHMgc3RhbmRhcmQgUE5QIHNlcmlhbCBzdXBwb3J0LiBZb3UgbWF5IGJlIGFibGUgdG8KKwkgIGRpc2FibGUgdGhpcyBmZWF0dXJlIGlmIHlvdSBvbmx5IG5lZWQgbGVnYWN5IHNlcmlhbCBzdXBwb3J0LgorCitjb25maWcgU0VSSUFMXzgyNTBfSFAzMDAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gU0VSSUFMXzgyNTAgJiYgSFAzMDAKKwlkZWZhdWx0IFNFUklBTF84MjUwCisKIGNvbmZpZyBTRVJJQUxfODI1MF9DUwogCXRyaXN0YXRlICI4MjUwLzE2NTUwIFBDTUNJQSBkZXZpY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDTUNJQSAmJiBTRVJJQUxfODI1MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCBkMmI0YzIxLi4wYTcxYmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQpAQCAtNCwxNSArNCwxMyBAQAogIyAgJElkOiBNYWtlZmlsZSx2IDEuOCAyMDAyLzA3LzIxIDIxOjMyOjMwIHJtayBFeHAgJAogIwogCi1zZXJpYWwtODI1MC15IDo9Ci1zZXJpYWwtODI1MC0kKENPTkZJR19QTlApICs9IDgyNTBfcG5wLm8KLXNlcmlhbC04MjUwLSQoQ09ORklHX0dTQykgKz0gODI1MF9nc2Mubwotc2VyaWFsLTgyNTAtJChDT05GSUdfUENJKSArPSA4MjUwX3BjaS5vCi1zZXJpYWwtODI1MC0kKENPTkZJR19IUDMwMCkgKz0gODI1MF9ocDMwMC5vCi0KIG9iai0kKENPTkZJR19TRVJJQUxfQ09SRSkgKz0gc2VyaWFsX2NvcmUubwogb2JqLSQoQ09ORklHX1NFUklBTF8yMTI4NSkgKz0gMjEyODUubwotb2JqLSQoQ09ORklHX1NFUklBTF84MjUwKSArPSA4MjUwLm8gJChzZXJpYWwtODI1MC15KQorb2JqLSQoQ09ORklHX1NFUklBTF84MjUwKSArPSA4MjUwLm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MF9QTlApICs9IDgyNTBfcG5wLm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MF9HU0MpICs9IDgyNTBfZ3NjLm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MF9QQ0kpICs9IDgyNTBfcGNpLm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MF9IUDMwMCkgKz0gODI1MF9ocDMwMC5vCiBvYmotJChDT05GSUdfU0VSSUFMXzgyNTBfQ1MpICs9IHNlcmlhbF9jcy5vCiBvYmotJChDT05GSUdfU0VSSUFMXzgyNTBfQUNPUk4pICs9IDgyNTBfYWNvcm4ubwogb2JqLSQoQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUpICs9IDgyNTBfZWFybHkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaCBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmgKaW5kZXggNzNjOGEwOC4uM2IzNWNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydC5oCkBAIC01LDExICs1LDIwIEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKKyAqICAyMDA2IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAJVml0YWx5IEJvcmR1ZyA8dmJvcmR1Z0BydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgogICovCiAjaWZuZGVmIENQTV9VQVJUX0gKICNkZWZpbmUgQ1BNX1VBUlRfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnNfdWFydF9wZC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikKICNpbmNsdWRlICJjcG1fdWFydF9jcG0yLmgiCkBAIC0yNiwxNCArMzUsMTQgQEAKICNkZWZpbmUgRkxBR19TTUMJMHgwMDAwMDAwMgogI2RlZmluZSBGTEFHX0NPTlNPTEUJMHgwMDAwMDAwMQogCi0jZGVmaW5lIFVBUlRfU01DMQkwCi0jZGVmaW5lIFVBUlRfU01DMgkxCi0jZGVmaW5lIFVBUlRfU0NDMQkyCi0jZGVmaW5lIFVBUlRfU0NDMgkzCi0jZGVmaW5lIFVBUlRfU0NDMwk0Ci0jZGVmaW5lIFVBUlRfU0NDNAk1CisjZGVmaW5lIFVBUlRfU01DMQlmc2lkX3NtYzFfdWFydAorI2RlZmluZSBVQVJUX1NNQzIJZnNpZF9zbWMyX3VhcnQKKyNkZWZpbmUgVUFSVF9TQ0MxCWZzaWRfc2NjMV91YXJ0CisjZGVmaW5lIFVBUlRfU0NDMglmc2lkX3NjYzJfdWFydAorI2RlZmluZSBVQVJUX1NDQzMJZnNpZF9zY2MzX3VhcnQKKyNkZWZpbmUgVUFSVF9TQ0M0CWZzaWRfc2NjNF91YXJ0CiAKLSNkZWZpbmUgVUFSVF9OUgk2CisjZGVmaW5lIFVBUlRfTlIJCWZzX3VhcnRfbnIKIAogI2RlZmluZSBSWF9OVU1fRklGTwk0CiAjZGVmaW5lIFJYX0JVRl9TSVpFCTMyCkBAIC02NCw2ICs3Myw3IEBACiAJdWludAkJCSBkcF9hZGRyOwogCXZvaWQJCQkqbWVtX2FkZHI7CiAJZG1hX2FkZHJfdAkJIGRtYV9hZGRyOworCXUzMgkJCW1lbV9zaXplOwogCS8qIGhlbHBlcnMgKi8KIAlpbnQJCQkgYmF1ZDsKIAlpbnQJCQkgYml0czsKQEAgLTkwLDQgKzEwMCwzOCBAQAogdm9pZCBzY2MzX2xpbmVpZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pOwogdm9pZCBzY2M0X2xpbmVpZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pOwogCisvKgorICAgdmlydHVhbCB0byBwaHlzIHRyYW5zdGFsaW9uCisqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNwdTJjcG1fYWRkcih2b2lkKiBhZGRyLCBzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCit7CisJaW50IG9mZnNldDsKKwl1MzIgdmFsID0gKHUzMilhZGRyOworCS8qIHNhbmUgY2hlY2sgKi8KKwlpZiAobGlrZWx5KCh2YWwgPj0gKHUzMilwaW5mby0+bWVtX2FkZHIpKSAmJgorCQkJKHZhbDwoKHUzMilwaW5mby0+bWVtX2FkZHIgKyBwaW5mby0+bWVtX3NpemUpKSkgeworCQlvZmZzZXQgPSB2YWwgLSAodTMyKXBpbmZvLT5tZW1fYWRkcjsKKwkJcmV0dXJuIHBpbmZvLT5kbWFfYWRkcitvZmZzZXQ7CisJfQorCS8qIHNvbWV0aGluZyBuYXN0eSBoYXBwZW5lZCAqLworCUJVRygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmNwbTJjcHVfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbykKK3sKKwlpbnQgb2Zmc2V0OworCXUzMiB2YWwgPSBhZGRyOworCS8qIHNhbmUgY2hlY2sgKi8KKwlpZiAobGlrZWx5KCh2YWwgPj0gcGluZm8tPmRtYV9hZGRyKSAmJgorCQkJKHZhbDwocGluZm8tPmRtYV9hZGRyICsgcGluZm8tPm1lbV9zaXplKSkpKSB7CisJCW9mZnNldCA9IHZhbCAtICh1MzIpcGluZm8tPmRtYV9hZGRyOworCQlyZXR1cm4gKHZvaWQqKShwaW5mby0+bWVtX2FkZHIrb2Zmc2V0KTsKKwl9CisJLyogc29tZXRoaW5nIG5hc3R5IGhhcHBlbmVkICovCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKKwogI2VuZGlmIC8qIENQTV9VQVJUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCBiN2JmNGM2Li41Y2JhNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC0xMiw3ICsxMiw4IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICogICAgICAgICAgICAoQykgMjAwNCBJbnRyYWNvbSwgUy5BLgotICogICAgICAgICAgICAoQykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIGJ5IFZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KKyAqICAgICAgICAgICAgKEMpIDIwMDUtMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAJCVZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mc191YXJ0X3BkLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC02MCw3ICs2Miw3IEBACiAvKiBUcmFjayB3aGljaCBwb3J0cyBhcmUgY29uZmlndXJlZCBhcyB1YXJ0cyAqLwogaW50IGNwbV91YXJ0X3BvcnRfbWFwW1VBUlRfTlJdOwogLyogSG93IG1hbnkgcG9ydHMgZGlkIHdlIGNvbmZpZyBhcyB1YXJ0cyAqLwotaW50IGNwbV91YXJ0X25yOworaW50IGNwbV91YXJ0X25yID0gMDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC03MSwxOCArNzMsNTEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3B1MmNwbV9hZGRyKHZvaWQgKmFkZHIpCisKKy8qIFBsYWNlLWhvbGRlciBmb3IgYm9hcmQtc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkgX19pbml0CitlYXJseV91YXJ0X2dldF9wZGV2KGludCBpbmRleCkKIHsKLQlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciA+PSBDUE1fQUREUikKLQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWFkZHI7Ci0JcmV0dXJuIHZpcnRfdG9fYnVzKGFkZHIpOworCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmNwbTJjcHVfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCisKK3N0YXRpYyB2b2lkIGNwbV91YXJ0X2NvdW50KHZvaWQpCiB7Ci0JaWYgKGFkZHIgPj0gQ1BNX0FERFIpCi0JCXJldHVybiAodm9pZCAqKWFkZHI7Ci0JcmV0dXJuIGJ1c190b192aXJ0KGFkZHIpOworCWNwbV91YXJ0X25yID0gMDsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMxCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NNQzE7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMyCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NNQzI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MxCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NDQzE7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MyCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NDQzI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NDQzM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0CisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NDQzQ7CisjZW5kaWYKK30KKworLyogR2V0IFVBUlQgbnVtYmVyIGJ5IGl0cyBpZCAqLworc3RhdGljIGludCBjcG1fdWFydF9pZDJucihpbnQgaWQpCit7CisJaW50IGk7CisJaWYgKGlkIDwgVUFSVF9OUikgeworCQlmb3IgKGk9MDsgaTxVQVJUX05SOyBpKyspIHsKKwkJCWlmIChjcG1fdWFydF9wb3J0X21hcFtpXSA9PSBpZCkKKwkJCQlyZXR1cm4gaTsKKwkJfQorCX0KKworCS8qIG5vdCBmb3VuZCBvciBpbnZhbGlkIGFyZ3VtZW50ICovCisJcmV0dXJuIC0xOwogfQogCiAvKgpAQCAtMjU4LDcgKzI5Myw3IEBACiAJCX0KIAogCQkvKiBnZXQgcG9pbnRlciAqLwotCQljcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyKTsKKwkJY3AgPSBjcG0yY3B1X2FkZHIoYmRwLT5jYmRfYnVmYWRkciwgcGluZm8pOwogCiAJCS8qIGxvb3AgdGhyb3VnaCB0aGUgYnVmZmVyICovCiAJCXdoaWxlIChpLS0gPiAwKSB7CkBAIC00MzgsNyArNDczLDExIEBACiAJCX0KIAogCQkvKiBTaHV0IHRoZW0gcmVhbGx5IGRvd24gYW5kIHJlaW5pdCBidWZmZXIgZGVzY3JpcHRvcnMgKi8KLQkJY3BtX2xpbmVfY3JfY21kKGxpbmUsIENQTV9DUl9TVE9QX1RYKTsKKwkJaWYgKElTX1NNQyhwaW5mbykpCisJCQljcG1fbGluZV9jcl9jbWQobGluZSwgQ1BNX0NSX1NUT1BfVFgpOworCQllbHNlCisJCQljcG1fbGluZV9jcl9jbWQobGluZSwgQ1BNX0NSX0dSQV9TVE9QX1RYKTsKKwogCQljcG1fdWFydF9pbml0YmQocGluZm8pOwogCX0KIH0KQEAgLTYwMSw3ICs2NDAsNyBAQAogCQkvKiBQaWNrIG5leHQgZGVzY3JpcHRvciBhbmQgZmlsbCBmcm9tIGJ1ZmZlciAqLwogCQliZHAgPSBwaW5mby0+dHhfY3VyOwogCi0JCXAgPSBjcG0yY3B1X2FkZHIoYmRwLT5jYmRfYnVmYWRkcik7CisJCXAgPSBjcG0yY3B1X2FkZHIoYmRwLT5jYmRfYnVmYWRkciwgcGluZm8pOwogCiAJCSpwKysgPSBwb3J0LT54X2NoYXI7CiAJCWJkcC0+Y2JkX2RhdGxlbiA9IDE7CkBAIC02MjgsNyArNjY3LDcgQEAKIAogCXdoaWxlICghKGJkcC0+Y2JkX3NjICYgQkRfU0NfUkVBRFkpICYmICh4bWl0LT50YWlsICE9IHhtaXQtPmhlYWQpKSB7CiAJCWNvdW50ID0gMDsKLQkJcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyKTsKKwkJcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyLCBwaW5mbyk7CiAJCXdoaWxlIChjb3VudCA8IHBpbmZvLT50eF9maWZvc2l6ZSkgewogCQkJKnArKyA9IHhtaXQtPmJ1Zlt4bWl0LT50YWlsXTsKIAkJCXhtaXQtPnRhaWwgPSAoeG1pdC0+dGFpbCArIDEpICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7CkBAIC02NzcsMTIgKzcxNiwxMiBAQAogCW1lbV9hZGRyID0gcGluZm8tPm1lbV9hZGRyOwogCWJkcCA9IHBpbmZvLT5yeF9jdXIgPSBwaW5mby0+cnhfYmRfYmFzZTsKIAlmb3IgKGkgPSAwOyBpIDwgKHBpbmZvLT5yeF9ucmZpZm9zIC0gMSk7IGkrKywgYmRwKyspIHsKLQkJYmRwLT5jYmRfYnVmYWRkciA9IGNwdTJjcG1fYWRkcihtZW1fYWRkcik7CisJCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIsIHBpbmZvKTsKIAkJYmRwLT5jYmRfc2MgPSBCRF9TQ19FTVBUWSB8IEJEX1NDX0lOVFJQVDsKIAkJbWVtX2FkZHIgKz0gcGluZm8tPnJ4X2ZpZm9zaXplOwogCX0KIAotCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIpOworCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIsIHBpbmZvKTsKIAliZHAtPmNiZF9zYyA9IEJEX1NDX1dSQVAgfCBCRF9TQ19FTVBUWSB8IEJEX1NDX0lOVFJQVDsKIAogCS8qIFNldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgaG9zdCBtZW1vcnkKQEAgLTY5MiwxMiArNzMxLDEyIEBACiAJbWVtX2FkZHIgPSBwaW5mby0+bWVtX2FkZHIgKyBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcyAqIHBpbmZvLT5yeF9maWZvc2l6ZSk7CiAJYmRwID0gcGluZm8tPnR4X2N1ciA9IHBpbmZvLT50eF9iZF9iYXNlOwogCWZvciAoaSA9IDA7IGkgPCAocGluZm8tPnR4X25yZmlmb3MgLSAxKTsgaSsrLCBiZHArKykgewotCQliZHAtPmNiZF9idWZhZGRyID0gY3B1MmNwbV9hZGRyKG1lbV9hZGRyKTsKKwkJYmRwLT5jYmRfYnVmYWRkciA9IGNwdTJjcG1fYWRkcihtZW1fYWRkciwgcGluZm8pOwogCQliZHAtPmNiZF9zYyA9IEJEX1NDX0lOVFJQVDsKIAkJbWVtX2FkZHIgKz0gcGluZm8tPnR4X2ZpZm9zaXplOwogCX0KIAotCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIpOworCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIsIHBpbmZvKTsKIAliZHAtPmNiZF9zYyA9IEJEX1NDX1dSQVAgfCBCRF9TQ19JTlRSUFQ7CiB9CiAKQEAgLTgyOSwxNCArODY4LDYgQEAKIAlpZiAocGluZm8tPmZsYWdzICYgRkxBR19DT05TT0xFKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogU2V0dXAgYW55IHBvcnQgSU8sIGNvbm5lY3QgYW55IGJhdWQgcmF0ZSBnZW5lcmF0b3JzLAotCSAqIGV0Yy4gIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBieSBib2FyZAotCSAqIGRlcGVuZGFudCBjb2RlCi0JICovCi0JaWYgKHBpbmZvLT5zZXRfbGluZWlmKQotCQlwaW5mby0+c2V0X2xpbmVpZihwaW5mbyk7Ci0KIAlpZiAoSVNfU01DKHBpbmZvKSkgewogCQlwaW5mby0+c21jcC0+c21jX3NtY20gJj0gfihTTUNNX1JYIHwgU01DTV9UWCk7CiAJCXBpbmZvLT5zbWNwLT5zbWNfc21jbXIgJj0gfihTTUNNUl9SRU4gfCBTTUNNUl9URU4pOwpAQCAtOTg4LDYgKzEwMTksNTggQEAKIAl9LAogfTsKIAoraW50IGNwbV91YXJ0X2Rydl9nZXRfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXNfY29uKQoreworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBpZHggPSBwZGF0YS0+ZnNfbm87CS8qIEl0IGlzIFVBUlRfU01DeCBvciBVQVJUX1NDQ3ggaW5kZXggKi8KKwlzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm87CisJaW50IGxpbmU7CisJdTMyIG1lbSwgcHJhbTsKKworCWxpbmUgPSBjcG1fdWFydF9pZDJucihpZHgpOworCWlmKGxpbmUgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiIlcygpOiBwb3J0ICVkIGlzIG5vdCByZWdpc3RlcmVkIiwgX19GVU5DVElPTl9fLCBpZHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcGluZm8gPSAoc3RydWN0IHVhcnRfY3BtX3BvcnQgKikgJmNwbV91YXJ0X3BvcnRzW2lkeF07CisKKwlwaW5mby0+YnJnID0gcGRhdGEtPmJyZzsKKworCWlmICghaXNfY29uKSB7CisJCXBpbmZvLT5wb3J0LmxpbmUgPSBsaW5lOworCQlwaW5mby0+cG9ydC5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GOworCX0KKworCWlmICghKHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicmVncyIpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtID0gci0+c3RhcnQ7CisKKwlpZiAoIShyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInByYW0iKSkpCisJCXJldHVybiAtRUlOVkFMOworCXByYW0gPSByLT5zdGFydDsKKworCWlmKGlkeCA+IGZzaWRfc21jMl91YXJ0KSB7CisJCXBpbmZvLT5zY2NwID0gKHNjY190ICopbWVtOworCQlwaW5mby0+c2NjdXAgPSAoc2NjX3VhcnRfdCAqKXByYW07CisJfSBlbHNlIHsKKwkJcGluZm8tPnNtY3AgPSAoc21jX3QgKiltZW07CisJCXBpbmZvLT5zbWN1cCA9IChzbWNfdWFydF90ICopcHJhbTsKKwl9CisJcGluZm8tPnR4X25yZmlmb3MgPSBwZGF0YS0+dHhfbnVtX2ZpZm87CisJcGluZm8tPnR4X2ZpZm9zaXplID0gcGRhdGEtPnR4X2J1Zl9zaXplOworCisJcGluZm8tPnJ4X25yZmlmb3MgPSBwZGF0YS0+cnhfbnVtX2ZpZm87CisJcGluZm8tPnJ4X2ZpZm9zaXplID0gcGRhdGEtPnJ4X2J1Zl9zaXplOworCisJcGluZm8tPnBvcnQudWFydGNsayA9IHBkYXRhLT51YXJ0X2NsazsKKwlwaW5mby0+cG9ydC5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCXBpbmZvLT5wb3J0LmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEUKIC8qCiAgKglQcmludCBhIHN0cmluZyB0byB0aGUgc2VyaWFsIHBvcnQgdHJ5aW5nIG5vdCB0byBkaXN0dXJiCkBAIC0xMDI3LDcgKzExMTAsNyBAQAogCQkgKiBJZiB0aGUgYnVmZmVyIGFkZHJlc3MgaXMgaW4gdGhlIENQTSBEUFJBTSwgZG9uJ3QKIAkJICogY29udmVydCBpdC4KIAkJICovCi0JCWNwID0gY3BtMmNwdV9hZGRyKGJkcC0+Y2JkX2J1ZmFkZHIpOworCQljcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyLCBwaW5mbyk7CiAKIAkJKmNwID0gKnM7CiAKQEAgLTEwNDQsNyArMTEyNyw3IEBACiAJCQl3aGlsZSAoKGJkcC0+Y2JkX3NjICYgQkRfU0NfUkVBRFkpICE9IDApCiAJCQkJOwogCi0JCQljcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyKTsKKwkJCWNwID0gY3BtMmNwdV9hZGRyKGJkcC0+Y2JkX2J1ZmFkZHIsIHBpbmZvKTsKIAogCQkJKmNwID0gMTM7CiAJCQliZHAtPmNiZF9kYXRsZW4gPSAxOwpAQCAtMTA2Nyw5ICsxMTUwLDcgQEAKIAlwaW5mby0+dHhfY3VyID0gKHZvbGF0aWxlIGNiZF90ICopIGJkcDsKIH0KIAotLyoKLSAqIFNldHVwIGNvbnNvbGUuIEJlIGNhcmVmdWwgaXMgY2FsbGVkIGVhcmx5ICEKLSAqLworCiBzdGF0aWMgaW50IF9faW5pdCBjcG1fdWFydF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwpAQCAtMTA4MCw5ICsxMTYxLDI5IEBACiAJaW50IGZsb3cgPSAnbic7CiAJaW50IHJldDsKIAorCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBkYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHBkZXYgPSBlYXJseV91YXJ0X2dldF9wZGV2KGNvLT5pbmRleCk7CisKKwlpZiAoIXBkZXYpIHsKKwkJcHJfaW5mbygiY3BtX3VhcnQ6IGNvbnNvbGU6IGNvbXBhdCBtb2RlXG4iKTsKKwkJLyogY29tcGF0aWJpbGl0eSAtIHdpbGwgYmUgY2xlYW5lZCB1cCAqLworCQljcG1fdWFydF9pbml0X3BvcnRkZXNjKCk7CisJfQorCiAJcG9ydCA9CiAJICAgIChzdHJ1Y3QgdWFydF9wb3J0ICopJmNwbV91YXJ0X3BvcnRzW2NwbV91YXJ0X3BvcnRfbWFwW2NvLT5pbmRleF1dOwogCXBpbmZvID0gKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICopcG9ydDsKKwlpZiAoIXBkZXYpIHsKKwkJaWYgKHBpbmZvLT5zZXRfbGluZWlmKQorCQkJcGluZm8tPnNldF9saW5laWYocGluZm8pOworCX0gZWxzZSB7CisJCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCWlmIChwZGF0YSkKKwkJCWlmIChwZGF0YS0+aW5pdF9pb3BvcnRzKQorICAgIAkgICAgICAgICAgICAgICAgCXBkYXRhLT5pbml0X2lvcG9ydHMoKTsKKworCQljcG1fdWFydF9kcnZfZ2V0X3BsYXRmb3JtX2RhdGEocGRldiwgMSk7CisJfQogCiAJcGluZm8tPmZsYWdzIHw9IEZMQUdfQ09OU09MRTsKIApAQCAtMTA5NywxNCArMTE5OCw2IEBACiAJCQliYXVkID0gOTYwMDsKIAl9CiAKLQkvKgotCSAqIFNldHVwIGFueSBwb3J0IElPLCBjb25uZWN0IGFueSBiYXVkIHJhdGUgZ2VuZXJhdG9ycywKLQkgKiBldGMuICBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGhhbmRsZWQgYnkgYm9hcmQKLQkgKiBkZXBlbmRhbnQgY29kZQotCSAqLwotCWlmIChwaW5mby0+c2V0X2xpbmVpZikKLQkJcGluZm8tPnNldF9saW5laWYocGluZm8pOwotCiAJaWYgKElTX1NNQyhwaW5mbykpIHsKIAkJcGluZm8tPnNtY3AtPnNtY19zbWNtICY9IH4oU01DTV9SWCB8IFNNQ01fVFgpOwogCQlwaW5mby0+c21jcC0+c21jX3NtY21yICY9IH4oU01DTVJfUkVOIHwgU01DTVJfVEVOKTsKQEAgLTExNDMsMTEgKzEyMzYsOCBAQAogCiBpbnQgX19pbml0IGNwbV91YXJ0X2NvbnNvbGVfaW5pdCh2b2lkKQogewotCWludCByZXQgPSBjcG1fdWFydF9pbml0X3BvcnRkZXNjKCk7Ci0KLQlpZiAoIXJldCkKLQkJcmVnaXN0ZXJfY29uc29sZSgmY3BtX3NjY191YXJ0X2NvbnNvbGUpOwotCXJldHVybiByZXQ7CisJcmVnaXN0ZXJfY29uc29sZSgmY3BtX3NjY191YXJ0X2NvbnNvbGUpOworCXJldHVybiAwOwogfQogCiBjb25zb2xlX2luaXRjYWxsKGNwbV91YXJ0X2NvbnNvbGVfaW5pdCk7CkBAIC0xMTY1LDQ0ICsxMjU1LDEyOSBAQAogCS5taW5vcgkJPSBTRVJJQUxfQ1BNX01JTk9SLAogCS5jb25zCQk9IENQTV9VQVJUX0NPTlNPTEUsCiB9OwotCi1zdGF0aWMgaW50IF9faW5pdCBjcG1fdWFydF9pbml0KHZvaWQpCitzdGF0aWMgaW50IGNwbV91YXJ0X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldCwgaTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBkYXRhOworCWludCByZXQgPSAtRU5PREVWOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBDUE0gZHJpdmVyICRSZXZpc2lvbjogMC4wMSAkXG4iKTsKLQotI2lmbmRlZiBDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFCi0JcmV0ID0gY3BtX3VhcnRfaW5pdF9wb3J0ZGVzYygpOwotCWlmIChyZXQpCisJaWYoIXBkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIkNQTSBVQVJUOiBwbGF0Zm9ybSBkYXRhIG1pc3NpbmchXG4iKTsKIAkJcmV0dXJuIHJldDsKLSNlbmRpZgotCi0JY3BtX3JlZy5uciA9IGNwbV91YXJ0X25yOwotCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZjcG1fcmVnKTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3BtX3VhcnRfbnI7IGkrKykgewotCQlpbnQgY29uID0gY3BtX3VhcnRfcG9ydF9tYXBbaV07Ci0JCWNwbV91YXJ0X3BvcnRzW2Nvbl0ucG9ydC5saW5lID0gaTsKLQkJY3BtX3VhcnRfcG9ydHNbY29uXS5wb3J0LmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkY7Ci0JCXVhcnRfYWRkX29uZV9wb3J0KCZjcG1fcmVnLCAmY3BtX3VhcnRfcG9ydHNbY29uXS5wb3J0KTsKIAl9CiAKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXByX2RlYnVnKCJjcG1fdWFydF9kcnZfcHJvYmU6IEFkZGluZyBDUE0gVUFSVCAlZFxuIiwgY3BtX3VhcnRfaWQybnIocGRhdGEtPmZzX25vKSk7CisKKwlpZiAoKHJldCA9IGNwbV91YXJ0X2Rydl9nZXRfcGxhdGZvcm1fZGF0YShwZGV2LCAwKSkpCisJCXJldHVybiByZXQ7CisKKwlpZiAocGRhdGEtPmluaXRfaW9wb3J0cykKKyAgICAgICAgICAgICAgICBwZGF0YS0+aW5pdF9pb3BvcnRzKCk7CisKKwlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmY3BtX3JlZywgJmNwbV91YXJ0X3BvcnRzW3BkYXRhLT5mc19ub10ucG9ydCk7CisKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjcG1fdWFydF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlwcl9kZWJ1ZygiY3BtX3VhcnRfZHJ2X3JlbW92ZTogUmVtb3ZpbmcgQ1BNIFVBUlQgJWRcbiIsCisJCQljcG1fdWFydF9pZDJucihwZGF0YS0+ZnNfbm8pKTsKKworICAgICAgICB1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmY3BtX3JlZywgJmNwbV91YXJ0X3BvcnRzW3BkYXRhLT5mc19ub10ucG9ydCk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY3BtX3NtY191YXJ0X2RyaXZlciA9IHsKKyAgICAgICAgLm5hbWUgICA9ICJmc2wtY3BtLXNtYzp1YXJ0IiwKKyAgICAgICAgLmJ1cyAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKyAgICAgICAgLnByb2JlICA9IGNwbV91YXJ0X2Rydl9wcm9iZSwKKyAgICAgICAgLnJlbW92ZSA9IGNwbV91YXJ0X2Rydl9yZW1vdmUsCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY3BtX3NjY191YXJ0X2RyaXZlciA9IHsKKyAgICAgICAgLm5hbWUgICA9ICJmc2wtY3BtLXNjYzp1YXJ0IiwKKyAgICAgICAgLmJ1cyAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKyAgICAgICAgLnByb2JlICA9IGNwbV91YXJ0X2Rydl9wcm9iZSwKKyAgICAgICAgLnJlbW92ZSA9IGNwbV91YXJ0X2Rydl9yZW1vdmUsCit9OworCisvKgorICAgVGhpcyBpcyBzdXBwb3NlZCB0byBtYXRjaCB1YXJ0IGRldmljZXMgb24gcGxhdGZvcm0gYnVzLAorICAgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfaXNfdWFydCAoc3RydWN0IGRldmljZSogZGV2LCB2b2lkKiBkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCWludCByZXQgPSAwOworCS8qIHRoaXMgd2FzIHNldGZ1bmMgYXMgdWFydCAqLworCWlmKHN0cnN0cihwZGV2LT5uYW1lLCI6dWFydCIpKSB7CisJCXJldCA9IDE7CisJfQorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBjcG1fdWFydF9pbml0KHZvaWQpIHsKKworCWludCByZXQ7CisJaW50IGk7CisJc3RydWN0IGRldmljZSAqZGV2OworCXByaW50ayhLRVJOX0lORk8gIlNlcmlhbDogQ1BNIGRyaXZlciAkUmV2aXNpb246IDAuMDIgJFxuIik7CisKKwkvKiBsb29rdXAgdGhlIGJ1cyBmb3IgdWFydCBkZXZpY2VzICovCisJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZwbGF0Zm9ybV9idXNfdHlwZSwgTlVMTCwgMCwgbWF0Y2hfaXNfdWFydCk7CisKKwkvKiBUaGVyZSBhcmUgZGV2aWNlcyBvbiB0aGUgYnVzIC0gYWxsIHNob3VsZCBiZSBPSyAgKi8KKwlpZiAoZGV2KSB7CisJCWNwbV91YXJ0X2NvdW50KCk7CisJCWNwbV9yZWcubnIgPSBjcG1fdWFydF9ucjsKKworCQlpZiAoIShyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZykpKSB7CisJCQlpZiAoKHJldCA9IGRyaXZlcl9yZWdpc3RlcigmY3BtX3NtY191YXJ0X2RyaXZlcikpKSB7CisJCQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWlmICgocmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZjcG1fc2NjX3VhcnRfZHJpdmVyKSkpIHsKKwkJCQlkcml2ZXJfdW5yZWdpc3RlcigmY3BtX3NjY191YXJ0X2RyaXZlcik7CisJCQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCS8qIE5vIGNhcGFibGUgcGxhdGZvcm0gZGV2aWNlcyBmb3VuZCAtIGZhbGxpbmcgYmFjayB0byBsZWdhY3kgbW9kZSAqLworCQlwcl9pbmZvKCJjcG1fdWFydDogV0FSTklORzogbm8gVUFSVCBkZXZpY2VzIGZvdW5kIG9uIHBsYXRmb3JtIGJ1cyFcbiIpOworCQlwcl9pbmZvKAorCQkiY3BtX3VhcnQ6IHRoZSBkcml2ZXIgd2lsbCBndWVzcyBjb25maWd1cmF0aW9uLCBidXQgdGhpcyBtb2RlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXG4iKTsKKyNpZm5kZWYgQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRQorCQlyZXQgPSBjcG1fdWFydF9pbml0X3BvcnRkZXNjKCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworI2VuZGlmCisKKwkJY3BtX3JlZy5uciA9IGNwbV91YXJ0X25yOworCQlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGNwbV91YXJ0X25yOyBpKyspIHsKKwkJCWludCBjb24gPSBjcG1fdWFydF9wb3J0X21hcFtpXTsKKwkJCWNwbV91YXJ0X3BvcnRzW2Nvbl0ucG9ydC5saW5lID0gaTsKKwkJCWNwbV91YXJ0X3BvcnRzW2Nvbl0ucG9ydC5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GOworCQkJdWFydF9hZGRfb25lX3BvcnQoJmNwbV9yZWcsICZjcG1fdWFydF9wb3J0c1tjb25dLnBvcnQpOworCQl9CisKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNwbV91YXJ0X2V4aXQodm9pZCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjcG1fdWFydF9ucjsgaSsrKSB7Ci0JCWludCBjb24gPSBjcG1fdWFydF9wb3J0X21hcFtpXTsKLQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJmNwbV9yZWcsICZjcG1fdWFydF9wb3J0c1tjb25dLnBvcnQpOwotCX0KLQorCWRyaXZlcl91bnJlZ2lzdGVyKCZjcG1fc2NjX3VhcnRfZHJpdmVyKTsKKwlkcml2ZXJfdW5yZWdpc3RlcigmY3BtX3NtY191YXJ0X2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwppbmRleCBkNzg5ZWU1Li4xNzQwNmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCkBAIC04LDYgKzgsOCBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqICAgICAgICAgICAgKEMpIDIwMDQgSW50cmFjb20sIFMuQS4KKyAqICAgICAgICAgICAgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogCQlWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC04MSw1OCArODMsMTEgQEAKIAogdm9pZCBzbWMxX2xpbmVpZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCiB7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtcDsKLQotCSh2b2lkKWNwOwkvKiBmaXggd2FybmluZyAqLwotI2lmIGRlZmluZWQgKENPTkZJR19NUEM4ODVBRFMpCi0JLyogRW5hYmxlIFNNQzEgdHJhbnNjZWl2ZXJzICovCi0JewotCQljcC0+Y3BfcGVwYXIgfD0gMHgwMDAwMDBjMDsKLQkJY3AtPmNwX3BlZGlyICY9IH4weDAwMDAwMGMwOwotCQljcC0+Y3BfcGVzbyAmPSB+MHgwMDAwMDA0MDsKLQkJY3AtPmNwX3Blc28gfD0gMHgwMDAwMDA4MDsKLQl9Ci0jZWxpZiBkZWZpbmVkIChDT05GSUdfTVBDODZYQURTKQotCXVuc2lnbmVkIGludCBpb2JpdHMgPSAweDAwMDAwMGMwOwotCi0JaWYgKCFwaW5mby0+aXNfcG9ydGIpIHsKLQkJY3AtPmNwX3BicGFyIHw9IGlvYml0czsKLQkJY3AtPmNwX3BiZGlyICY9IH5pb2JpdHM7Ci0JCWNwLT5jcF9wYm9kciAmPSB+aW9iaXRzOwotCX0gZWxzZSB7Ci0JCSgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGFwYXIgfD0gaW9iaXRzOwotCQkoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9pb3BvcnQuaW9wX3BhZGlyICY9IH5pb2JpdHM7Ci0JCSgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGFvZHIgJj0gfmlvYml0czsKLQl9Ci0jZW5kaWYKIAlwaW5mby0+YnJnID0gMTsKIH0KIAogdm9pZCBzbWMyX2xpbmVpZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCiB7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtcDsKLQotCSh2b2lkKWNwOwkvKiBmaXggd2FybmluZyAqLwotI2lmIGRlZmluZWQgKENPTkZJR19NUEM4ODVBRFMpCi0JY3AtPmNwX3BlcGFyIHw9IDB4MDAwMDBjMDA7Ci0JY3AtPmNwX3BlZGlyICY9IH4weDAwMDAwYzAwOwotCWNwLT5jcF9wZXNvICY9IH4weDAwMDAwNDAwOwotCWNwLT5jcF9wZXNvIHw9IDB4MDAwMDA4MDA7Ci0jZWxpZiBkZWZpbmVkIChDT05GSUdfTVBDODZYQURTKQotCXVuc2lnbmVkIGludCBpb2JpdHMgPSAweDAwMDAwYzAwOwotCi0JaWYgKCFwaW5mby0+aXNfcG9ydGIpIHsKLQkJY3AtPmNwX3BicGFyIHw9IGlvYml0czsKLQkJY3AtPmNwX3BiZGlyICY9IH5pb2JpdHM7Ci0JCWNwLT5jcF9wYm9kciAmPSB+aW9iaXRzOwotCX0gZWxzZSB7Ci0JCSgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGFwYXIgfD0gaW9iaXRzOwotCQkoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9pb3BvcnQuaW9wX3BhZGlyICY9IH5pb2JpdHM7Ci0JCSgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGFvZHIgJj0gfmlvYml0czsKLQl9Ci0KLSNlbmRpZgotCiAJcGluZm8tPmJyZyA9IDI7CiB9CiAKQEAgLTE5MSw3ICsxNDYsNyBAQAogCQkvKiB3YXMgaG9zdGFsbG9jIGJ1dCBjaGFuZ2VkIGNhdXNlIGl0IGJsb3dzIGF3YXkgdGhlICovCiAJCS8qIGxhcmdlIHRsYiBtYXBwaW5nIHdoZW4gcGlubmluZyB0aGUga2VybmVsIGFyZWEgICAgKi8KIAkJbWVtX2FkZHIgPSAodTggKikgY3BtX2RwcmFtX2FkZHIoY3BtX2RwYWxsb2MobWVtc3osIDgpKTsKLQkJZG1hX2FkZHIgPSAwOworCQlkbWFfYWRkciA9ICh1MzIpbWVtX2FkZHI7CiAJfSBlbHNlCiAJCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIG1lbXN6LCAmZG1hX2FkZHIsCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwpAQCAtMjA0LDggKzE1OSw5IEBACiAJfQogCiAJcGluZm8tPmRwX2FkZHIgPSBkcF9vZmZzZXQ7Ci0JcGluZm8tPm1lbV9hZGRyID0gbWVtX2FkZHI7Ci0JcGluZm8tPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJcGluZm8tPm1lbV9hZGRyID0gbWVtX2FkZHI7ICAgICAgICAgICAgIC8qICB2aXJ0dWFsIGFkZHJlc3MqLworCXBpbmZvLT5kbWFfYWRkciA9IGRtYV9hZGRyOyAgICAgICAgICAgICAvKiAgcGh5c2ljYWwgYWRkcmVzcyovCisJcGluZm8tPm1lbV9zaXplID0gbWVtc3o7CiAKIAlwaW5mby0+cnhfYnVmID0gbWVtX2FkZHI7CiAJcGluZm8tPnR4X2J1ZiA9IHBpbmZvLT5yeF9idWYgKyBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCmluZGV4IGZkOWU1M2UuLmNkYmExMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKQEAgLTgsNiArOCw4IEBACiAgKiAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqICAgICAgICAgICAgKEMpIDIwMDQgSW50cmFjb20sIFMuQS4KKyAqICAgICAgICAgICAgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogCQlWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNDIsMTQgKzE0NCw2IEBACiAJICogYmUgc3VwcG9ydGVkIGluIGEgc2FuZSBmYXNoaW9uLgogCSAqLwogI2lmbmRlZiBDT05GSUdfU1RYX0dQMwotI2lmZGVmIENPTkZJR19NUEM4NTYwX0FEUwotCXZvbGF0aWxlIGlvcF9jcG0yX3QgKmlvID0gJmNwbTJfaW1tci0+aW1faW9wb3J0OwotCWlvLT5pb3BfcHBhcmQgfD0gMHgwMDAwMDAxODsKLQlpby0+aW9wX3Bzb3JkICY9IH4weDAwMDAwMDA4OwkvKiBSeCAqLwotCWlvLT5pb3BfcHNvcmQgJj0gfjB4MDAwMDAwMTA7CS8qIFR4ICovCi0JaW8tPmlvcF9wZGlyZCAmPSB+MHgwMDAwMDAwODsJLyogUnggKi8KLQlpby0+aW9wX3BkaXJkIHw9IDB4MDAwMDAwMTA7CS8qIFR4ICovCi0jZWxzZQogCXZvbGF0aWxlIGlvcF9jcG0yX3QgKmlvID0gJmNwbTJfaW1tci0+aW1faW9wb3J0OwogCWlvLT5pb3BfcHBhcmIgfD0gMHgwMDhiMDAwMDsKIAlpby0+aW9wX3BkaXJiIHw9IDB4MDA4ODAwMDA7CkBAIC0xNTcsNyArMTUxLDYgQEAKIAlpby0+aW9wX3BkaXJiICY9IH4weDAwMDMwMDAwOwogCWlvLT5pb3BfcHNvcmIgJj0gfjB4MDAwMzAwMDA7CiAjZW5kaWYKLSNlbmRpZgogCWNwbTJfaW1tci0+aW1fY3BtdXguY214X3NjciAmPSAweGZmMDBmZmZmOwogCWNwbTJfaW1tci0+aW1fY3BtdXguY214X3NjciB8PSAweDAwMDkwMDAwOwogCXBpbmZvLT5icmcgPSAyOwpAQCAtMjE4LDggKzIxMSwxMCBAQAogCiAJbWVtc3ogPSBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcyAqIHBpbmZvLT5yeF9maWZvc2l6ZSkgKwogCSAgICBMMV9DQUNIRV9BTElHTihwaW5mby0+dHhfbnJmaWZvcyAqIHBpbmZvLT50eF9maWZvc2l6ZSk7Ci0JaWYgKGlzX2NvbikKKwlpZiAoaXNfY29uKSB7CiAJCW1lbV9hZGRyID0gYWxsb2NfYm9vdG1lbShtZW1zeik7CisJCWRtYV9hZGRyID0gdmlydF90b19idXMobWVtX2FkZHIpOworCX0KIAllbHNlCiAJCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIG1lbXN6LCAmZG1hX2FkZHIsCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwpAQCAtMjM0LDYgKzIyOSw3IEBACiAJcGluZm8tPmRwX2FkZHIgPSBkcF9vZmZzZXQ7CiAJcGluZm8tPm1lbV9hZGRyID0gbWVtX2FkZHI7CiAJcGluZm8tPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJcGluZm8tPm1lbV9zaXplID0gbWVtc3o7CiAKIAlwaW5mby0+cnhfYnVmID0gbWVtX2FkZHI7CiAJcGluZm8tPnR4X2J1ZiA9IHBpbmZvLT5yeF9idWYgKyBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCBjM2I3YTY2Li5kMjAyZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtdWFydC5oPgogCiAvKiBXZSd2ZSBiZWVuIGFzc2lnbmVkIGEgcmFuZ2Ugb24gdGhlICJMb3ctZGVuc2l0eSBzZXJpYWwgcG9ydHMiIG1ham9yICovCiAjZGVmaW5lIFNFUklBTF9JTVhfTUFKT1IJMjA0CkBAIC03Myw3ICs3NCw4IEBACiAJc3RydWN0IHVhcnRfcG9ydAlwb3J0OwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCXVuc2lnbmVkIGludAkJb2xkX3N0YXR1czsKLQlpbnQgdHhpcnEscnhpcnEscnRzaXJxOworCWludAkJCXR4aXJxLHJ4aXJxLHJ0c2lycTsKKwlpbnQJCQloYXZlX3J0c2N0czoxOwogfTsKIAogLyoKQEAgLTQ5MSw4ICs0OTMsMTIgQEAKIAkJdWNyMiA9IFVDUjJfU1JTVCB8IFVDUjJfSVJUUzsKIAogCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewotCQl1Y3IyICY9IH5VQ1IyX0lSVFM7Ci0JCXVjcjIgfD0gVUNSMl9DVFNDOworCQlpZiggc3BvcnQtPmhhdmVfcnRzY3RzICkgeworCQkJdWNyMiAmPSB+VUNSMl9JUlRTOworCQkJdWNyMiB8PSBVQ1IyX0NUU0M7CisJCX0gZWxzZSB7CisJCQl0ZXJtaW9zLT5jX2NmbGFnICY9IH5DUlRTQ1RTOworCQl9CiAJfQogCiAJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIpCkBAIC03MTksMjcgKzcyNSw2IEBACiAJCWlteF9wb3J0c1tpXS50aW1lci5mdW5jdGlvbiA9IGlteF90aW1lb3V0OwogCQlpbXhfcG9ydHNbaV0udGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZykmaW14X3BvcnRzW2ldOwogCX0KLQotCWlteF9ncGlvX21vZGUoUEM5X1BGX1VBUlQxX0NUUyk7Ci0JaW14X2dwaW9fbW9kZShQQzEwX1BGX1VBUlQxX1JUUyk7Ci0JaW14X2dwaW9fbW9kZShQQzExX1BGX1VBUlQxX1RYRCk7Ci0JaW14X2dwaW9fbW9kZShQQzEyX1BGX1VBUlQxX1JYRCk7Ci0JaW14X2dwaW9fbW9kZShQQjI4X1BGX1VBUlQyX0NUUyk7Ci0JaW14X2dwaW9fbW9kZShQQjI5X1BGX1VBUlQyX1JUUyk7Ci0KLQlpbXhfZ3Bpb19tb2RlKFBCMzBfUEZfVUFSVDJfVFhEKTsKLQlpbXhfZ3Bpb19tb2RlKFBCMzFfUEZfVUFSVDJfUlhEKTsKLQotI2lmIDAgLyogV2UgZG9uJ3QgbmVlZCB0aGVzZSwgb24gdGhlIG14MSB0aGUgX21vZGVtXyBzaWRlIG9mIHRoZSB1YXJ0Ci0gICAgICAgKiBpcyBpbXBsZW1lbnRlZC4KLSAgICAgICAqLwotCWlteF9ncGlvX21vZGUoUEQ3X0FGX1VBUlQyX0RUUik7Ci0JaW14X2dwaW9fbW9kZShQRDhfQUZfVUFSVDJfRENEKTsKLQlpbXhfZ3Bpb19tb2RlKFBEOV9BRl9VQVJUMl9SSSk7Ci0JaW14X2dwaW9fbW9kZShQRDEwX0FGX1VBUlQyX0RTUik7Ci0jZW5kaWYKLQotCiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0lNWF9DT05TT0xFCkBAIC05MzIsNyArOTE3LDE0IEBACiAKIHN0YXRpYyBpbnQgc2VyaWFsX2lteF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKIAlpbXhfcG9ydHNbZGV2LT5pZF0ucG9ydC5kZXYgPSAmZGV2LT5kZXY7CisKKwlwZGF0YSA9IChzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhICopZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZihwZGF0YSAmJiAocGRhdGEtPmZsYWdzICYgSU1YVUFSVF9IQVZFX1JUU0NUUykpCisJCWlteF9wb3J0c1tkZXYtPmlkXS5oYXZlX3J0c2N0cyA9IDE7CisKIAl1YXJ0X2FkZF9vbmVfcG9ydCgmaW14X3JlZywgJmlteF9wb3J0c1tkZXYtPmlkXS5wb3J0KTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZpbXhfcG9ydHNbZGV2LT5pZF0pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbS5oIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbS5oCmluZGV4IGRmYzFlODYuLjA0M2Y1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc20uaAorKysgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogU2NvdHQgSCBLaWxhdSA8U2NvdHRfS2lsYXVAZGlnaS5jb20+Ci0gKiBXZW5keSBYaW9uZyAgIDx3ZW5keXhAdXMubHRjZndkLmxpbnV4LmlibS5jb20+CisgKiBXZW5keSBYaW9uZyAgIDx3ZW5keXhAdXMuaWJtLmNvbT4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX2RyaXZlci5jCmluZGV4IGIxYjY2ZTcuLmIzZTFmNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYwpAQCAtMjAsNyArMjAsNyBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiBTY290dCBIIEtpbGF1IDxTY290dF9LaWxhdUBkaWdpLmNvbT4KLSAqIFdlbmR5IFhpb25nICAgPHdlbmR5eEB1cy5sdGNmd2QubGludXguaWJtLmNvbT4KKyAqIFdlbmR5IFhpb25nICAgPHdlbmR5eEB1cy5pYm0uY29tPgogICoKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9uZW8uYwppbmRleCA4N2U0ZTJjLi5hNWZjNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogU2NvdHQgSCBLaWxhdSA8U2NvdHRfS2lsYXVAZGlnaS5jb20+Ci0gKiBXZW5keSBYaW9uZyAgIDx3ZW5keXhAdXMubHRjZndkLmxpbnV4LmlibS5jb20+CisgKiBXZW5keSBYaW9uZyAgIDx3ZW5keXhAdXMuaWJtLmNvbT4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogRm9yIHVkZWxheSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKaW5kZXggNGQ0OGI2Mi4uN2Q4MjM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCkBAIC0xNDIsMTIgKzE0MiwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAlzdHJ1Y3QganNtX2NoYW5uZWwgKmNoYW5uZWwgPSAoc3RydWN0IGpzbV9jaGFubmVsICopcG9ydDsKKwlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBsb2NrX2ZsYWdzKTsKLQlpZiAoY2ggPT0gcG9ydC0+aW5mby0+dHR5LT50ZXJtaW9zLT5jX2NjW1ZTVEFSVF0pCisJdGVybWlvcyA9IHBvcnQtPmluZm8tPnR0eS0+dGVybWlvczsKKwlpZiAoY2ggPT0gdGVybWlvcy0+Y19jY1tWU1RBUlRdKQogCQljaGFubmVsLT5jaF9iZC0+YmRfb3BzLT5zZW5kX3N0YXJ0X2NoYXJhY3RlcihjaGFubmVsKTsKIAotCWlmIChjaCA9PSBwb3J0LT5pbmZvLT50dHktPnRlcm1pb3MtPmNfY2NbVlNUT1BdKQorCWlmIChjaCA9PSB0ZXJtaW9zLT5jX2NjW1ZTVE9QXSkKIAkJY2hhbm5lbC0+Y2hfYmQtPmJkX29wcy0+c2VuZF9zdG9wX2NoYXJhY3RlcihjaGFubmVsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBsb2NrX2ZsYWdzKTsKIH0KQEAgLTE3OCw2ICsxODAsNyBAQAogCXN0cnVjdCBqc21fYm9hcmQgKmJyZDsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBqc21fY2hhbm5lbCAqY2hhbm5lbCA9IChzdHJ1Y3QganNtX2NoYW5uZWwgKilwb3J0OworCXN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zOwogCiAJLyogR2V0IGJvYXJkIHBvaW50ZXIgZnJvbSBvdXIgYXJyYXkgb2YgbWFqb3JzIHdlIGhhdmUgYWxsb2NhdGVkICovCiAJYnJkID0gY2hhbm5lbC0+Y2hfYmQ7CkBAIC0yMzksMTIgKzI0MiwxMyBAQAogCWNoYW5uZWwtPmNoX2NhY2hlZF9sc3IgPSAwOwogCWNoYW5uZWwtPmNoX3N0b3BzX3NlbnQgPSAwOwogCi0JY2hhbm5lbC0+Y2hfY19jZmxhZwk9IHBvcnQtPmluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKLQljaGFubmVsLT5jaF9jX2lmbGFnCT0gcG9ydC0+aW5mby0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOwotCWNoYW5uZWwtPmNoX2Nfb2ZsYWcJPSBwb3J0LT5pbmZvLT50dHktPnRlcm1pb3MtPmNfb2ZsYWc7Ci0JY2hhbm5lbC0+Y2hfY19sZmxhZwk9IHBvcnQtPmluZm8tPnR0eS0+dGVybWlvcy0+Y19sZmxhZzsKLQljaGFubmVsLT5jaF9zdGFydGMgPSBwb3J0LT5pbmZvLT50dHktPnRlcm1pb3MtPmNfY2NbVlNUQVJUXTsKLQljaGFubmVsLT5jaF9zdG9wYyA9IHBvcnQtPmluZm8tPnR0eS0+dGVybWlvcy0+Y19jY1tWU1RPUF07CisJdGVybWlvcyA9IHBvcnQtPmluZm8tPnR0eS0+dGVybWlvczsKKwljaGFubmVsLT5jaF9jX2NmbGFnCT0gdGVybWlvcy0+Y19jZmxhZzsKKwljaGFubmVsLT5jaF9jX2lmbGFnCT0gdGVybWlvcy0+Y19pZmxhZzsKKwljaGFubmVsLT5jaF9jX29mbGFnCT0gdGVybWlvcy0+Y19vZmxhZzsKKwljaGFubmVsLT5jaF9jX2xmbGFnCT0gdGVybWlvcy0+Y19sZmxhZzsKKwljaGFubmVsLT5jaF9zdGFydGMJPSB0ZXJtaW9zLT5jX2NjW1ZTVEFSVF07CisJY2hhbm5lbC0+Y2hfc3RvcGMJPSB0ZXJtaW9zLT5jX2NjW1ZTVE9QXTsKIAogCS8qIFRlbGwgVUFSVCB0byBpbml0IGl0c2VsZiAqLwogCWJyZC0+YmRfb3BzLT51YXJ0X2luaXQoY2hhbm5lbCk7CkBAIC03ODQsNiArNzg4LDcgQEAKIAogdm9pZCBqc21fY2hlY2tfcXVldWVfZmxvd19jb250cm9sKHN0cnVjdCBqc21fY2hhbm5lbCAqY2gpCiB7CisJc3RydWN0IGJvYXJkX29wcyAqYmRfb3BzID0gY2gtPmNoX2JkLT5iZF9vcHM7CiAJaW50IHFsZWZ0ID0gMDsKIAogCS8qIFN0b3JlIGhvdyBtdWNoIHNwYWNlIHdlIGhhdmUgbGVmdCBpbiB0aGUgcXVldWUgKi8KQEAgLTgwOSw3ICs4MTQsNyBAQAogCQkvKiBIV0ZMT1cgKi8KIAkJaWYgKGNoLT5jaF9jX2NmbGFnICYgQ1JUU0NUUykgewogCQkJaWYoIShjaC0+Y2hfZmxhZ3MgJiBDSF9SRUNFSVZFUl9PRkYpKSB7Ci0JCQkJY2gtPmNoX2JkLT5iZF9vcHMtPmRpc2FibGVfcmVjZWl2ZXIoY2gpOworCQkJCWJkX29wcy0+ZGlzYWJsZV9yZWNlaXZlcihjaCk7CiAJCQkJY2gtPmNoX2ZsYWdzIHw9IChDSF9SRUNFSVZFUl9PRkYpOwogCQkJCWpzbV9wcmludGsoUkVBRCwgSU5GTywgJmNoLT5jaF9iZC0+cGNpX2RldiwKIAkJCQkJIkludGVybmFsIHF1ZXVlIGhpdCBoaWxldmVsIG1hcmsgKCVkKSEgVHVybmluZyBvZmYgaW50ZXJydXB0cy5cbiIsCkBAIC04MTksNyArODI0LDcgQEAKIAkJLyogU1dGTE9XICovCiAJCWVsc2UgaWYgKGNoLT5jaF9jX2lmbGFnICYgSVhPRkYpIHsKIAkJCWlmIChjaC0+Y2hfc3RvcHNfc2VudCA8PSBNQVhfU1RPUFNfU0VOVCkgewotCQkJCWNoLT5jaF9iZC0+YmRfb3BzLT5zZW5kX3N0b3BfY2hhcmFjdGVyKGNoKTsKKwkJCQliZF9vcHMtPnNlbmRfc3RvcF9jaGFyYWN0ZXIoY2gpOwogCQkJCWNoLT5jaF9zdG9wc19zZW50Kys7CiAJCQkJanNtX3ByaW50ayhSRUFELCBJTkZPLCAmY2gtPmNoX2JkLT5wY2lfZGV2LAogCQkJCQkiU2VuZGluZyBzdG9wIGNoYXIhIFRpbWVzIHNlbnQ6ICV4XG4iLCBjaC0+Y2hfc3RvcHNfc2VudCk7CkBAIC04NDYsNyArODUxLDcgQEAKIAkJLyogSFdGTE9XICovCiAJCWlmIChjaC0+Y2hfY19jZmxhZyAmIENSVFNDVFMpIHsKIAkJCWlmIChjaC0+Y2hfZmxhZ3MgJiBDSF9SRUNFSVZFUl9PRkYpIHsKLQkJCQljaC0+Y2hfYmQtPmJkX29wcy0+ZW5hYmxlX3JlY2VpdmVyKGNoKTsKKwkJCQliZF9vcHMtPmVuYWJsZV9yZWNlaXZlcihjaCk7CiAJCQkJY2gtPmNoX2ZsYWdzICY9IH4oQ0hfUkVDRUlWRVJfT0ZGKTsKIAkJCQlqc21fcHJpbnRrKFJFQUQsIElORk8sICZjaC0+Y2hfYmQtPnBjaV9kZXYsCiAJCQkJCSJJbnRlcm5hbCBxdWV1ZSBoaXQgbG93bGV2ZWwgbWFyayAoJWQpISBUdXJuaW5nIG9uIGludGVycnVwdHMuXG4iLApAQCAtODU2LDcgKzg2MSw3IEBACiAJCS8qIFNXRkxPVyAqLwogCQllbHNlIGlmIChjaC0+Y2hfY19pZmxhZyAmIElYT0ZGICYmIGNoLT5jaF9zdG9wc19zZW50KSB7CiAJCQljaC0+Y2hfc3RvcHNfc2VudCA9IDA7Ci0JCQljaC0+Y2hfYmQtPmJkX29wcy0+c2VuZF9zdGFydF9jaGFyYWN0ZXIoY2gpOworCQkJYmRfb3BzLT5zZW5kX3N0YXJ0X2NoYXJhY3RlcihjaCk7CiAJCQlqc21fcHJpbnRrKFJFQUQsIElORk8sICZjaC0+Y2hfYmQtPnBjaV9kZXYsICJTZW5kaW5nIHN0YXJ0IGNoYXIhXG4iKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCmluZGV4IGU5YzEwYzAuLjMyMWE0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwpAQCAtMTA1Nyw3ICsxMDU3LDYgQEAKIHsKIAlzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXAgPSAmbTMycl9zaW9fcG9ydHNbY28tPmluZGV4XTsKIAl1bnNpZ25lZCBpbnQgaWVyOwotCWludCBpOwogCiAJLyoKIAkgKglGaXJzdCBzYXZlIHRoZSBVRVIgdGhlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCBmY2Q3NzQ0Li4xNzgzOWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTE1MDAsMjAgKzE1MDAsMTggQEAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9zdGF0ZSAqdWFydF9nZXQoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIGludCBsaW5lKQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZTsKKwlpbnQgcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJnBvcnRfbXV0ZXgpOwogCXN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc3RhdGUtPm11dGV4KSkgewotCQlzdGF0ZSA9IEVSUl9QVFIoLUVSRVNUQVJUU1lTKTsKLQkJZ290byBvdXQ7CisJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBlcnI7CiAJfQogCiAJc3RhdGUtPmNvdW50Kys7Ci0JaWYgKCFzdGF0ZS0+cG9ydCkgewotCQlzdGF0ZS0+Y291bnQtLTsKLQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCQlzdGF0ZSA9IEVSUl9QVFIoLUVOWElPKTsKLQkJZ290byBvdXQ7CisJaWYgKCFzdGF0ZS0+cG9ydCB8fCBzdGF0ZS0+cG9ydC0+ZmxhZ3MgJiBVUEZfREVBRCkgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX3VubG9jazsKIAl9CiAKIAlpZiAoIXN0YXRlLT5pbmZvKSB7CkBAIC0xNTMxLDE1ICsxNTI5LDE3IEBACiAJCQl0YXNrbGV0X2luaXQoJnN0YXRlLT5pbmZvLT50bGV0LCB1YXJ0X3Rhc2tsZXRfYWN0aW9uLAogCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpc3RhdGUpOwogCQl9IGVsc2UgewotCQkJc3RhdGUtPmNvdW50LS07Ci0JCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0JCQlzdGF0ZSA9IEVSUl9QVFIoLUVOT01FTSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJfdW5sb2NrOwogCQl9CiAJfQotCi0gb3V0OgotCW11dGV4X3VubG9jaygmcG9ydF9tdXRleCk7CiAJcmV0dXJuIHN0YXRlOworCisgZXJyX3VubG9jazoKKwlzdGF0ZS0+Y291bnQtLTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisgZXJyOgorCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIC8qCkBAIC0xOTA3LDkgKzE5MDcsMTIgQEAKIHN0YXRpYyB2b2lkIHVhcnRfY2hhbmdlX3BtKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwgaW50IHBtX3N0YXRlKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKLQlpZiAocG9ydC0+b3BzLT5wbSkKLQkJcG9ydC0+b3BzLT5wbShwb3J0LCBwbV9zdGF0ZSwgc3RhdGUtPnBtX3N0YXRlKTsKLQlzdGF0ZS0+cG1fc3RhdGUgPSBwbV9zdGF0ZTsKKworCWlmIChzdGF0ZS0+cG1fc3RhdGUgIT0gcG1fc3RhdGUpIHsKKwkJaWYgKHBvcnQtPm9wcy0+cG0pCisJCQlwb3J0LT5vcHMtPnBtKHBvcnQsIHBtX3N0YXRlLCBzdGF0ZS0+cG1fc3RhdGUpOworCQlzdGF0ZS0+cG1fc3RhdGUgPSBwbV9zdGF0ZTsKKwl9CiB9CiAKIGludCB1YXJ0X3N1c3BlbmRfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTIwODUsNDUgKzIwODgsNiBAQAogCX0KIH0KIAotLyoKLSAqIFRoaXMgcmV2ZXJzZXMgdGhlIGVmZmVjdHMgb2YgdWFydF9jb25maWd1cmVfcG9ydCwgaGFuZ2luZyB1cCB0aGUKLSAqIHBvcnQgYmVmb3JlIHJlbW92YWwuCi0gKi8KLXN0YXRpYyB2b2lkCi11YXJ0X3VuY29uZmlndXJlX3BvcnQoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7Ci0Jc3RydWN0IHVhcnRfaW5mbyAqaW5mbyA9IHN0YXRlLT5pbmZvOwotCi0JaWYgKGluZm8gJiYgaW5mby0+dHR5KQotCQl0dHlfdmhhbmd1cChpbmZvLT50dHkpOwotCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQotCXN0YXRlLT5pbmZvID0gTlVMTDsKLQotCS8qCi0JICogRnJlZSB0aGUgcG9ydCBJTyBhbmQgbWVtb3J5IHJlc291cmNlcywgaWYgYW55LgotCSAqLwotCWlmIChwb3J0LT50eXBlICE9IFBPUlRfVU5LTk9XTikKLQkJcG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQocG9ydCk7Ci0KLQkvKgotCSAqIEluZGljYXRlIHRoYXQgdGhlcmUgaXNuJ3QgYSBwb3J0IGhlcmUgYW55bW9yZS4KLQkgKi8KLQlwb3J0LT50eXBlID0gUE9SVF9VTktOT1dOOwotCi0JLyoKLQkgKiBLaWxsIHRoZSB0YXNrbGV0LCBhbmQgZnJlZSByZXNvdXJjZXMuCi0JICovCi0JaWYgKGluZm8pIHsKLQkJdGFza2xldF9raWxsKCZpbmZvLT50bGV0KTsKLQkJa2ZyZWUoaW5mbyk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotfQotCiBzdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIHVhcnRfb3BzID0gewogCS5vcGVuCQk9IHVhcnRfb3BlbiwKIAkuY2xvc2UJCT0gdWFydF9jbG9zZSwKQEAgLTIyNzAsNiArMjIzNCw3IEBACiAJc3RhdGUgPSBkcnYtPnN0YXRlICsgcG9ydC0+bGluZTsKIAogCW11dGV4X2xvY2soJnBvcnRfbXV0ZXgpOworCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CiAJaWYgKHN0YXRlLT5wb3J0KSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtMjMwNCw3ICsyMjY5LDEzIEBACiAJICAgIHBvcnQtPmNvbnMgJiYgIShwb3J0LT5jb25zLT5mbGFncyAmIENPTl9FTkFCTEVEKSkKIAkJcmVnaXN0ZXJfY29uc29sZShwb3J0LT5jb25zKTsKIAorCS8qCisJICogRW5zdXJlIFVQRl9ERUFEIGlzIG5vdCBzZXQuCisJICovCisJcG9ydC0+ZmxhZ3MgJj0gflVQRl9ERUFEOworCiAgb3V0OgorCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKIAltdXRleF91bmxvY2soJnBvcnRfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIzMjIsNiArMjI5Myw3IEBACiBpbnQgdWFydF9yZW1vdmVfb25lX3BvcnQoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIHBvcnQtPmxpbmU7CisJc3RydWN0IHVhcnRfaW5mbyAqaW5mbzsKIAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAKQEAgLTIzMzIsMTEgKzIzMDQsNDggQEAKIAltdXRleF9sb2NrKCZwb3J0X211dGV4KTsKIAogCS8qCisJICogTWFyayB0aGUgcG9ydCAiZGVhZCIgLSB0aGlzIHByZXZlbnRzIGFueSBvcGVucyBmcm9tCisJICogc3VjY2VlZGluZyB3aGlsZSB3ZSBzaHV0IGRvd24gdGhlIHBvcnQuCisJICovCisJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwlwb3J0LT5mbGFncyB8PSBVUEZfREVBRDsKKwltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisKKwkvKgogCSAqIFJlbW92ZSB0aGUgZGV2aWNlcyBmcm9tIGRldmZzCiAJICovCiAJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGRydi0+dHR5X2RyaXZlciwgcG9ydC0+bGluZSk7CiAKLQl1YXJ0X3VuY29uZmlndXJlX3BvcnQoZHJ2LCBzdGF0ZSk7CisJaW5mbyA9IHN0YXRlLT5pbmZvOworCWlmIChpbmZvICYmIGluZm8tPnR0eSkKKwkJdHR5X3ZoYW5ndXAoaW5mby0+dHR5KTsKKworCS8qCisJICogQWxsIHVzZXJzIG9mIHRoaXMgcG9ydCBzaG91bGQgbm93IGJlIGRpc2Nvbm5lY3RlZCBmcm9tCisJICogdGhpcyBkcml2ZXIsIGFuZCB0aGUgcG9ydCBzaHV0IGRvd24uICBXZSBzaG91bGQgYmUgdGhlCisJICogb25seSB0aHJlYWQgZmlkZGxpbmcgd2l0aCB0aGlzIHBvcnQgZnJvbSBub3cgb24uCisJICovCisJc3RhdGUtPmluZm8gPSBOVUxMOworCisJLyoKKwkgKiBGcmVlIHRoZSBwb3J0IElPIGFuZCBtZW1vcnkgcmVzb3VyY2VzLCBpZiBhbnkuCisJICovCisJaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOKQorCQlwb3J0LT5vcHMtPnJlbGVhc2VfcG9ydChwb3J0KTsKKworCS8qCisJICogSW5kaWNhdGUgdGhhdCB0aGVyZSBpc24ndCBhIHBvcnQgaGVyZSBhbnltb3JlLgorCSAqLworCXBvcnQtPnR5cGUgPSBQT1JUX1VOS05PV047CisKKwkvKgorCSAqIEtpbGwgdGhlIHRhc2tsZXQsIGFuZCBmcmVlIHJlc291cmNlcy4KKwkgKi8KKwlpZiAoaW5mbykgeworCQl0YXNrbGV0X2tpbGwoJmluZm8tPnRsZXQpOworCQlrZnJlZShpbmZvKTsKKwl9CisKIAlzdGF0ZS0+cG9ydCA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZwb3J0X211dGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCBjMzAzMzM2Li4yYzcwNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtOTcsMTEgKzk4LDEzIEBACiAjZGVmaW5lIE1VTFRJX0NPVU5UIChzaXplb2YobXVsdGlfaWQpL3NpemVvZihzdHJ1Y3QgbXVsdGlfaWQpKQogCiBzdHJ1Y3Qgc2VyaWFsX2luZm8gewotCWRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWludAkJCW5kZXY7CiAJaW50CQkJbXVsdGk7CiAJaW50CQkJc2xhdmU7CiAJaW50CQkJbWFuZmlkOworCWludAkJCXByb2RpZDsKKwlpbnQJCQljOTUwY3RybDsKIAlkZXZfbm9kZV90CQlub2RlWzRdOwogCWludAkJCWxpbmVbNF07CiB9OwpAQCAtMTEzLDkgKzExNiwzNiBAQAogfTsKIAogCi1zdGF0aWMgdm9pZCBzZXJpYWxfY29uZmlnKGRldl9saW5rX3QgKiBsaW5rKTsKK3N0YXRpYyBpbnQgc2VyaWFsX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspOwogCiAKK3N0YXRpYyB2b2lkIHdha2V1cF9jYXJkKHN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbykKK3sKKwlpbnQgY3RybCA9IGluZm8tPmM5NTBjdHJsOworCisJaWYgKGluZm8tPm1hbmZpZCA9PSBNQU5GSURfT1hTRU1JKSB7CisJCW91dGIoMTIsIGN0cmwgKyAxKTsKKwl9IGVsc2UgaWYgKGluZm8tPm1hbmZpZCA9PSBNQU5GSURfUE9TU0lPICYmIGluZm8tPnByb2RpZCA9PSBQUk9ESURfUE9TU0lPX0dDQykgeworCQkvKiByZXF1ZXN0X3JlZ2lvbj8gb3hzZW1pIGJyYW5jaCBkb2VzIG5vIHJlcXVlc3RfcmVnaW9uIHRvby4uLiAqLworCQkvKiBUaGlzIHNlcXVlbmNlIGlzIG5lZWRlZCB0byBwcm9wZXJseSBpbml0aWFsaXplIE1DNDUgYXR0YWNoZWQgdG8gT1hDRjk1MC4KKwkJICogSSB0cmllZCBkZWNyZWFzaW5nIHRoZXNlIG1zbGVlcCgpcywgYnV0IGl0IHdvcmtlZCBwcm9wZXJseSAoc3Vydml2ZWQKKwkJICogMTAwMCBzdG9wL3N0YXJ0IG9wZXJhdGlvbnMpIHdpdGggdGhlc2UgdGltZW91dHMgKG9yIGJpZ2dlcikuICovCisJCW91dGIoMHhBLCBjdHJsICsgMSk7CisJCW1zbGVlcCgxMDApOworCQlvdXRiKDB4RSwgY3RybCArIDEpOworCQltc2xlZXAoMzAwKTsKKwkJb3V0YigweEMsIGN0cmwgKyAxKTsKKwkJbXNsZWVwKDEwMCk7CisJCW91dGIoMHhFLCBjdHJsICsgMSk7CisJCW1zbGVlcCgyMDApOworCQlvdXRiKDB4RiwgY3RybCArIDEpOworCQltc2xlZXAoMTAwKTsKKwkJb3V0YigweEUsIGN0cmwgKyAxKTsKKwkJbXNsZWVwKDEwMCk7CisJCW91dGIoMHhDLCBjdHJsICsgMSk7CisJfQorfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIEFmdGVyIGEgY2FyZCBpcyByZW1vdmVkLCBzZXJpYWxfcmVtb3ZlKCkgd2lsbCB1bnJlZ2lzdGVyCkBAIC0xMjMsNjcgKzE1Myw0NSBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHNlcmlhbF9yZW1vdmUoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHNlcmlhbF9yZW1vdmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKIAlpbnQgaTsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfUFJFU0VOVDsKLQogCURFQlVHKDAsICJzZXJpYWxfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKIAkvKgogCSAqIFJlY2hlY2sgdG8gc2VlIGlmIHRoZSBkZXZpY2UgaXMgc3RpbGwgY29uZmlndXJlZC4KIAkgKi8KLQlpZiAoaW5mby0+bGluay5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPm5kZXY7IGkrKykKLQkJCXNlcmlhbDgyNTBfdW5yZWdpc3Rlcl9wb3J0KGluZm8tPmxpbmVbaV0pOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uZGV2OyBpKyspCisJCXNlcmlhbDgyNTBfdW5yZWdpc3Rlcl9wb3J0KGluZm8tPmxpbmVbaV0pOwogCi0JCWluZm8tPmxpbmsuZGV2ID0gTlVMTDsKKwlpbmZvLT5wX2Rldi0+ZGV2X25vZGUgPSBOVUxMOwogCi0JCWlmICghaW5mby0+c2xhdmUpIHsKLQkJCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24oaW5mby0+bGluay5oYW5kbGUpOwotCQkJcGNtY2lhX3JlbGVhc2VfaW8oaW5mby0+bGluay5oYW5kbGUsICZpbmZvLT5saW5rLmlvKTsKLQkJCXBjbWNpYV9yZWxlYXNlX2lycShpbmZvLT5saW5rLmhhbmRsZSwgJmluZm8tPmxpbmsuaXJxKTsKLQkJfQotCi0JCWluZm8tPmxpbmsuc3RhdGUgJj0gfkRFVl9DT05GSUc7Ci0JfQorCWlmICghaW5mby0+c2xhdmUpCisJCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzZXJpYWxfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CisJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKKwlpbnQgaTsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPm5kZXY7IGkrKykKLQkJCXNlcmlhbDgyNTBfc3VzcGVuZF9wb3J0KGluZm8tPmxpbmVbaV0pOwotCi0JCWlmICghaW5mby0+c2xhdmUpCi0JCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uZGV2OyBpKyspCisJCXNlcmlhbDgyNTBfc3VzcGVuZF9wb3J0KGluZm8tPmxpbmVbaV0pOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzZXJpYWxfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0KLQlpZiAoREVWX09LKGxpbmspKSB7CisJaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogCQlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwogCQlpbnQgaTsKIAotCQlpZiAoIWluZm8tPnNsYXZlKQotCQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQogCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bmRldjsgaSsrKQogCQkJc2VyaWFsODI1MF9yZXN1bWVfcG9ydChpbmZvLT5saW5lW2ldKTsKKwkJd2FrZXVwX2NhcmQoaW5mbyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xOTcsMTAgKzIwNSw5IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHNlcmlhbF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm87Ci0JZGV2X2xpbmtfdCAqbGluazsKIAogCURFQlVHKDAsICJzZXJpYWxfYXR0YWNoKClcbiIpOwogCkBAIC0yMDksNyArMjE2LDcgQEAKIAlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChpbmZvLCAwLCBzaXplb2YgKCppbmZvKSk7Ci0JbGluayA9ICZpbmZvLT5saW5rOworCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CkBAIC0yMjMsMTIgKzIzMCw3IEBACiAJfQogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlzZXJpYWxfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNlcmlhbF9jb25maWcobGluayk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjQwLDkgKzI0Miw4IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBzZXJpYWxfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHNlcmlhbF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICJzZXJpYWxfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKQEAgLTI2Myw3ICsyNjQsNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBzZXR1cF9zZXJpYWwoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgc3RydWN0IHNlcmlhbF9pbmZvICogaW5mbywKK3N0YXRpYyBpbnQgc2V0dXBfc2VyaWFsKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHN0cnVjdCBzZXJpYWxfaW5mbyAqIGluZm8sCiAJCQlraW9fYWRkcl90IGlvYmFzZSwgaW50IGlycSkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CkBAIC0yOTgsNyArMjk5LDcgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50Ci1maXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICogdHVwbGUsIGNpc3BhcnNlX3QgKiBwYXJzZSkKK2ZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKiB0dXBsZSwgY2lzcGFyc2VfdCAqIHBhcnNlKQogewogCWludCBpOwogCWkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwpAQCAtMzExLDcgKzMxMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLW5leHRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqIHR1cGxlLCBjaXNwYXJzZV90ICogcGFyc2UpCituZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKiB0dXBsZSwgY2lzcGFyc2VfdCAqIHBhcnNlKQogewogCWludCBpOwogCWkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSk7CkBAIC0zMjUsMTEgKzMyNiwxMCBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBzaW1wbGVfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHNpbXBsZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RhdGljIGNvbnN0IGtpb19hZGRyX3QgYmFzZVs1XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTgsIDB4MCB9OwogCXN0YXRpYyBjb25zdCBpbnQgc2l6ZV90YWJsZVsyXSA9IHsgOCwgMTYgfTsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbyA9IGxpbmstPnByaXY7CiAJc3RydWN0IHNlcmlhbF9jZmdfbWVtICpjZmdfbWVtOwogCXR1cGxlX3QgKnR1cGxlOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJYnVmID0gY2ZnX21lbS0+YnVmOwogCiAJLyogSWYgdGhlIGNhcmQgaXMgYWxyZWFkeSBjb25maWd1cmVkLCBsb29rIHVwIHRoZSBwb3J0IGFuZCBpcnEgKi8KLQlpID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZmlnKTsKKwlpID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmZpZyk7CiAJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjb25maWcuQXR0cmlidXRlcyAmIENPTkZfVkFMSURfQ0xJRU5UKSkgewogCQlraW9fYWRkcl90IHBvcnQgPSAwOwogCQlpZiAoKGNvbmZpZy5CYXNlUG9ydDIgIT0gMCkgJiYgKGNvbmZpZy5OdW1Qb3J0czIgPT0gOCkpIHsKQEAgLTM2MywxMCArMzYzLDkgQEAKIAkJfQogCQlpZiAoaW5mby0+c2xhdmUpIHsKIAkJCWtmcmVlKGNmZ19tZW0pOwotCQkJcmV0dXJuIHNldHVwX3NlcmlhbChoYW5kbGUsIGluZm8sIHBvcnQsIGNvbmZpZy5Bc3NpZ25lZElSUSk7CisJCQlyZXR1cm4gc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIHBvcnQsIGNvbmZpZy5Bc3NpZ25lZElSUSk7CiAJCX0KIAl9Ci0JbGluay0+Y29uZi5WY2MgPSBjb25maWcuVmNjOwogCiAJLyogRmlyc3QgcGFzczogbG9vayBmb3IgYSBjb25maWcgZW50cnkgdGhhdCBsb29rcyBub3JtYWwuICovCiAJdHVwbGUtPlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOwpAQCAtMzc3LDEyICszNzYsMTIgQEAKIAkvKiBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KIAlmb3IgKHMgPSAwOyBzIDwgMjsgcysrKSB7CiAJCWZvciAodHJ5ID0gMDsgdHJ5IDwgMjsgdHJ5KyspIHsKLQkJCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJCQlpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKIAkJCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKIAkJCQlpZiAoaSAhPSBDU19TVUNDRVNTKQogCQkJCQlnb3RvIG5leHRfZW50cnk7CiAJCQkJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQkJCWxpbmstPmNvbmYuVnBwID0KIAkJCQkJICAgIGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQkJCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gc2l6ZV90YWJsZVtzXSkgJiYKIAkJCQkJICAgIChjZi0+aW8ud2luWzBdLmJhc2UgIT0gMCkpIHsKQEAgLTM5MCwxOSArMzg5LDE5IEBACiAJCQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKIAkJCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSAodHJ5ID09IDApID8KIAkJCQkJICAgIDE2IDogY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCQkJZ290byBmb3VuZF9wb3J0OwogCQkJCX0KIG5leHRfZW50cnk6Ci0JCQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCQkJCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAJCQl9CiAJCX0KIAl9CiAJLyogU2Vjb25kIHBhc3M6IHRyeSB0byBmaW5kIGFuIGVudHJ5IHRoYXQgaXNuJ3QgcGlja3kgYWJvdXQKIAkgICBpdHMgYmFzZSBhZGRyZXNzLCB0aGVuIHRyeSB0byBncmFiIGFueSBzdGFuZGFyZCBzZXJpYWwgcG9ydAogCSAgIGFkZHJlc3MsIGFuZCBmaW5hbGx5IHRyeSB0byBnZXQgYW55IGZyZWUgcG9ydC4gKi8KLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKIAkJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjZi0+aW8ubndpbiA+IDApICYmCiAJCSAgICAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewpAQCAtNDEwLDUwICs0MDksNDggQEAKIAkJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKIAkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOwogCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKLQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJCWdvdG8gZm91bmRfcG9ydDsKIAkJCX0KIAkJfQotCQlpID0gbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAJfQogCiAgICAgICBmb3VuZF9wb3J0OgogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFCiAJCSAgICAgICAic2VyaWFsX2NzOiBubyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCwgZ2l2aW5nIHVwXG4iKTsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCQlrZnJlZShjZmdfbWVtKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SVJRLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgaSk7CiAJCWxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7CiAJfQogCWlmIChpbmZvLT5tdWx0aSAmJiAoaW5mby0+bWFuZmlkID09IE1BTkZJRF8zQ09NKSkKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCAmPSB+KDB4MDgpOwotCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJCWtmcmVlKGNmZ19tZW0pOwogCQlyZXR1cm4gLTE7CiAJfQogCWtmcmVlKGNmZ19tZW0pOwotCXJldHVybiBzZXR1cF9zZXJpYWwoaGFuZGxlLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJcmV0dXJuIHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiB9CiAKLXN0YXRpYyBpbnQgbXVsdGlfY29uZmlnKGRldl9saW5rX3QgKiBsaW5rKQorc3RhdGljIGludCBtdWx0aV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0gKmNmZ19tZW07CiAJdHVwbGVfdCAqdHVwbGU7CiAJdV9jaGFyICpidWY7CiAJY2lzcGFyc2VfdCAqcGFyc2U7CiAJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2Y7Ci0JY29uZmlnX2luZm9fdCBjb25maWc7CiAJaW50IGksIHJjLCBiYXNlMiA9IDA7CiAKIAljZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlhbF9jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7CkBAIC00NjQsMTQgKzQ2MSw2IEBACiAJY2YgPSAmcGFyc2UtPmNmdGFibGVfZW50cnk7CiAJYnVmID0gY2ZnX21lbS0+YnVmOwogCi0JaSA9IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmZpZyk7Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihoYW5kbGUsIEdldENvbmZpZ3VyYXRpb25JbmZvLCBpKTsKLQkJcmMgPSAtMTsKLQkJZ290byBmcmVlX2NmZ19tZW07Ci0JfQotCWxpbmstPmNvbmYuVmNjID0gY29uZmlnLlZjYzsKLQogCXR1cGxlLT5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKIAl0dXBsZS0+VHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7CkBAIC00ODAsNyArNDY5LDcgQEAKIAogCS8qIEZpcnN0LCBsb29rIGZvciBhIGdlbmVyaWMgZnVsbC1zaXplZCB3aW5kb3cgKi8KIAlsaW5rLT5pby5OdW1Qb3J0czEgPSBpbmZvLT5tdWx0aSAqIDg7Ci0JaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKIAl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCS8qIFRoZSBxdWFkIHBvcnQgY2FyZHMgaGF2ZSBiYWQgQ0lTJ3MsIHNvIGp1c3QgbG9vayBmb3IgYQogCQkgICB3aW5kb3cgbGFyZ2VyIHRoYW4gOCBwb3J0cyBhbmQgYXNzdW1lIGl0IHdpbGwgYmUgcmlnaHQgKi8KQEAgLTQ5MCwxOSArNDc5LDE5IEBACiAJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9CiAJCQkgICAgY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCQliYXNlMiA9IGxpbmstPmlvLkJhc2VQb3J0MSArIDg7CiAJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCWJyZWFrOwogCQl9Ci0JCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwkJaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKIAl9CiAKIAkvKiBJZiB0aGF0IGRpZG4ndCB3b3JrLCBsb29rIGZvciB0d28gd2luZG93cyAqLwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gODsKIAkJaW5mby0+bXVsdGkgPSAyOwotCQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCQlpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKIAkJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQkJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjZi0+aW8ubndpbiA9PSAyKSkgewogCQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CkBAIC01MTAsMjYgKzQ5OSwyNiBAQAogCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMV0uYmFzZTsKIAkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9CiAJCQkJICAgIGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCQkJYmFzZTIgPSBsaW5rLT5pby5CYXNlUG9ydDI7CiAJCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpID0gbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJCQlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogCQl9CiAJfQogCiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJCXJjID0gLTE7CiAJCWdvdG8gZnJlZV9jZmdfbWVtOwogCX0KIAotCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFCiAJCSAgICAgICAic2VyaWFsX2NzOiBubyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCwgZ2l2aW5nIHVwXG4iKTsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SVJRLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgaSk7CiAJCWxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7CiAJfQogCS8qIFNvY2tldCBEdWFsIElPOiB0aGlzIGVuYWJsZXMgaXJxJ3MgZm9yIHNlY29uZCBwb3J0ICovCkBAIC01MzcsMzUgKzUyNiw0MyBAQAogCQlsaW5rLT5jb25mLlByZXNlbnQgfD0gUFJFU0VOVF9FWFRfU1RBVFVTOwogCQlsaW5rLT5jb25mLkV4dFN0YXR1cyA9IEVTUl9SRVFfQVRUTl9FTkE7CiAJfQotCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJCXJjID0gLTE7CiAJCWdvdG8gZnJlZV9jZmdfbWVtOwogCX0KIAogCS8qIFRoZSBPeGZvcmQgU2VtaWNvbmR1Y3RvciBPWENGOTUwIGNhcmRzIGFyZSBpbiBmYWN0IHNpbmdsZS1wb3J0OgotCSAgIDggcmVnaXN0ZXJzIGFyZSBmb3IgdGhlIFVBUlQsIHRoZSBvdGhlcnMgYXJlIGV4dHJhIHJlZ2lzdGVycyAqLwotCWlmIChpbmZvLT5tYW5maWQgPT0gTUFORklEX09YU0VNSSkgeworCSAqIDggcmVnaXN0ZXJzIGFyZSBmb3IgdGhlIFVBUlQsIHRoZSBvdGhlcnMgYXJlIGV4dHJhIHJlZ2lzdGVycy4KKwkgKiBTaWVtZW4ncyBNQzQ1IFBDTUNJQSAoUG9zc2lvJ3MgR0NDKSBpcyBPWENGOTUwIGJhc2VkIHRvby4KKwkgKi8KKwlpZiAoaW5mby0+bWFuZmlkID09IE1BTkZJRF9PWFNFTUkgfHwgKGluZm8tPm1hbmZpZCA9PSBNQU5GSURfUE9TU0lPICYmCisJCQkJaW5mby0+cHJvZGlkID09IFBST0RJRF9QT1NTSU9fR0NDKSkgeworCQlpbnQgZXJyOworCiAJCWlmIChjZi0+aW5kZXggPT0gMSB8fCBjZi0+aW5kZXggPT0gMykgewotCQkJc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgYmFzZTIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7Ci0JCQlvdXRiKDEyLCBsaW5rLT5pby5CYXNlUG9ydDEgKyAxKTsKKwkJCWVyciA9IHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBiYXNlMiwKKwkJCQkJbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwkJCWJhc2UyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCQl9IGVsc2UgewotCQkJc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwotCQkJb3V0YigxMiwgYmFzZTIgKyAxKTsKKwkJCWVyciA9IHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQkJCWxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJCX0KKwkJaW5mby0+Yzk1MGN0cmwgPSBiYXNlMjsKKwkJd2FrZXVwX2NhcmQoaW5mbyk7CiAJCXJjID0gMDsKIAkJZ290byBmcmVlX2NmZ19tZW07CiAJfQogCi0Jc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCXNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJLyogVGhlIE5va2lhIGNhcmRzIGFyZSBub3QgcmVhbGx5IG11bHRpcG9ydCBjYXJkcyAqLwogCWlmIChpbmZvLT5tYW5maWQgPT0gTUFORklEX05PS0lBKSB7CiAJCXJjID0gMDsKIAkJZ290byBmcmVlX2NmZ19tZW07CiAJfQogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5tdWx0aSAtIDE7IGkrKykKLQkJc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgYmFzZTIgKyAoOCAqIGkpLAorCQlzZXR1cF9zZXJpYWwobGluaywgaW5mbywgYmFzZTIgKyAoOCAqIGkpLAogCQkJCWxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJcmMgPSAwOwogZnJlZV9jZmdfbWVtOgpAQCAtNTgxLDkgKzU3OCw4IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi12b2lkIHNlcmlhbF9jb25maWcoZGV2X2xpbmtfdCAqIGxpbmspCitzdGF0aWMgaW50IHNlcmlhbF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0gKmNmZ19tZW07CiAJdHVwbGVfdCAqdHVwbGU7CkBAIC02MDksNyArNjA1LDcgQEAKIAl0dXBsZS0+QXR0cmlidXRlcyA9IDA7CiAJLyogR2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KIAl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlsYXN0X3JldCA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlsYXN0X3JldCA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAJaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKIAkJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwpAQCAtNjE3LDE4ICs2MTMsMTYgQEAKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UtPmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogCS8qIElzIHRoaXMgYSBjb21wbGlhbnQgbXVsdGlmdW5jdGlvbiBjYXJkPyAqLwogCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwogCXR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTiB8IFRVUExFX1JFVFVSTl9MSU5LOwotCWluZm8tPm11bHRpID0gKGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSA9PSBDU19TVUNDRVNTKTsKKwlpbmZvLT5tdWx0aSA9IChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpOwogCiAJLyogSXMgdGhpcyBhIG11bHRpcG9ydCBjYXJkPyAqLwogCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwotCWlmIChmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUykgeworCWlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKIAkJaW5mby0+bWFuZmlkID0gcGFyc2UtPm1hbmZpZC5tYW5mOworCQlpbmZvLT5wcm9kaWQgPSBsZTE2X3RvX2NwdShidWZbMV0pOwogCQlmb3IgKGkgPSAwOyBpIDwgTVVMVElfQ09VTlQ7IGkrKykKIAkJCWlmICgoaW5mby0+bWFuZmlkID09IG11bHRpX2lkW2ldLm1hbmZpZCkgJiYKIAkJCSAgICAocGFyc2UtPm1hbmZpZC5jYXJkID09IG11bHRpX2lkW2ldLnByb2RpZCkpCkBAIC02NDEsMTEgKzYzNSwxMSBAQAogCSAgIG11bHRpZnVuY3Rpb24gY2FyZHMgdGhhdCBhc2sgZm9yIGFwcHJvcHJpYXRlIElPIHBvcnQgcmFuZ2VzICovCiAJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9GVU5DSUQ7CiAJaWYgKChpbmZvLT5tdWx0aSA9PSAwKSAmJgotCSAgICAoKGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSAhPSBDU19TVUNDRVNTKSB8fAorCSAgICAoKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgIT0gQ1NfU1VDQ0VTUykgfHwKIAkgICAgIChwYXJzZS0+ZnVuY2lkLmZ1bmMgPT0gQ0lTVFBMX0ZVTkNJRF9NVUxUSSkgfHwKIAkgICAgIChwYXJzZS0+ZnVuY2lkLmZ1bmMgPT0gQ0lTVFBMX0ZVTkNJRF9TRVJJQUwpKSkgewogCQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JCWlmIChmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUykgeworCQlpZiAoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSA9PSBDU19TVUNDRVNTKSB7CiAJCQlpZiAoKGNmLT5pby5ud2luID09IDEpICYmIChjZi0+aW8ud2luWzBdLmxlbiAlIDggPT0gMCkpCiAJCQkJaW5mby0+bXVsdGkgPSBjZi0+aW8ud2luWzBdLmxlbiA+PiAzOwogCQkJaWYgKChjZi0+aW8ubndpbiA9PSAyKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYKQEAgLTY2NCwzMSArNjU4LDMwIEBACiAKIAlpZiAoaW5mby0+bWFuZmlkID09IE1BTkZJRF9JQk0pIHsKIAkJY29uZl9yZWdfdCByZWcgPSB7IDAsIENTX1JFQUQsIDB4ODAwLCAwIH07Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZyk7CisJCWxhc3RfcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogCQlpZiAobGFzdF9yZXQpIHsKIAkJCWxhc3RfZm4gPSBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXI7CiAJCQlnb3RvIGNzX2ZhaWxlZDsKIAkJfQogCQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJCXJlZy5WYWx1ZSA9IHJlZy5WYWx1ZSB8IDE7Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZyk7CisJCWxhc3RfcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogCQlpZiAobGFzdF9yZXQpIHsKIAkJCWxhc3RfZm4gPSBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXI7CiAJCQlnb3RvIGNzX2ZhaWxlZDsKIAkJfQogCX0KIAotCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlWzBdOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZVswXTsKIAlrZnJlZShjZmdfbWVtKTsKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogIGZhaWxlZDoKIAlzZXJpYWxfcmVtb3ZlKGxpbmspOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CiAJa2ZyZWUoY2ZnX21lbSk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBzZXJpYWxfaWRzW10gPSB7CkBAIC03MzksNiArNzMyLDcgQEAKIAlQQ01DSUFfTUZDX0RFVklDRV9QUk9EX0lEMSgxLCAiTW90b3JvbGEgTUFSUVVJUyIsIDB4ZjAzZTRlNzcpLAogCVBDTUNJQV9NRkNfREVWSUNFX1BST0RfSUQyKDEsICJGQVgvTW9kZW0vRXRoZXJuZXQgQ29tYm8gQ2FyZCAiLCAweDFlZDU5MzAyKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwODksIDB4MDMwMSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMGE0LCAweDAyNzYpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwMSwgMHgwMDM5KSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMDQsIDB4MDAwNiksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTA1LCAweDQxMGEpLApAQCAtNzU3LDYgKzc1MSw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTQoIk1FR0FIRVJUWiIsICJQQ01DSUEgTU9ERU0iLCAweGY1MTBkYjA0LCAweGJkNmM0M2VmKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjQoIlRPU0hJQkEiLCAiVDE0NFBGIiwgIlBDTUNJQSBNT0RFTSIsIDB4YjQ1ODVhMWEsIDB4NzI3MTQwOWMsIDB4YmQ2YzQzZWYpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiRlVKSVRTVSIsICJGQzE0RiAiLCAiTUJIMTAyMTMiLCAweDZlZTVhM2Q4LCAweDMwZWFkMTJiLCAweGIwMGYwNWEwKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIk5vdmF0ZWwgV2lyZWxlc3MiLCAiTWVybGluIFVNVFMgTW9kZW0iLCAiVTYzMCIsIDB4MzI2MDc3NzYsIDB4ZDllNzNiMTMsIDB4ZTg3MzMyZSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTMoIk1FR0FIRVJUWiIsICJWLjM0IFBDTUNJQSBNT0RFTSIsIDB4ZjUxMGRiMDQsIDB4YmIyY2NlNGEpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJCcmFpbiBCb3hlcyIsICJCbHVldG9vdGggUEMgQ2FyZCIsIDB4ZWUxMzgzODIsIDB4ZDRjZTliMDIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJDSVJSVVMgTE9HSUMiLCAiRkFYIE1PREVNIiwgMHhlNjI1ZjQ1MSwgMHhjZWNkNmRmYSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwppbmRleCAxYzQzOTZjLi4yYjRmOTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKQEAgLTE3MzAsMyArMTczMCw0IEBACiAKIG1vZHVsZV9pbml0KHN1bnN1X3Byb2JlKTsKIG1vZHVsZV9leGl0KHN1bnN1X2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zbi9pb2MzLmMgYi9kcml2ZXJzL3NuL2lvYzMuYwppbmRleCA5MzQ0OWExLi41MDEzMTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NuL2lvYzMuYworKysgYi9kcml2ZXJzL3NuL2lvYzMuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC02MTksOSArNjIwLDkgQEAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogI2lmZGVmIFVTRV82NEJJVF9ETUEKLSAgICAgICAgcmV0ID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpOworICAgICAgICByZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKICAgICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKTsKKyAgICAgICAgICAgICAgICByZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOwogICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIG9idGFpbiA2NCBiaXQgRE1BICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIsCkBAIC02NzcsNyArNjc4LDcgQEAKIAkvKiBUcmFjayBQQ0ktZGV2aWNlIHNwZWNpZmljIGRhdGEgKi8KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaWRkKTsKIAlkb3duX3dyaXRlKCZpb2MzX2RldmljZXNfcndzZW0pOwotCWxpc3RfYWRkKCZpZGQtPmxpc3QsICZpb2MzX2RldmljZXMpOworCWxpc3RfYWRkX3RhaWwoJmlkZC0+bGlzdCwgJmlvYzNfZGV2aWNlcyk7CiAJaWRkLT5pZCA9IGlvYzNfY291bnRlcisrOwogCXVwX3dyaXRlKCZpb2MzX2RldmljZXNfcndzZW0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NuL2lvYzQuYyBiL2RyaXZlcnMvc24vaW9jNC5jCmluZGV4IDY3MTQwYTUuLmNkZWZmOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc24vaW9jNC5jCisrKyBiL2RyaXZlcnMvc24vaW9jNC5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAlwY2lfc2V0X2RydmRhdGEoaWRkLT5pZGRfcGRldiwgaWRkKTsKIAogCW11dGV4X2xvY2soJmlvYzRfbXV0ZXgpOwotCWxpc3RfYWRkKCZpZGQtPmlkZF9saXN0LCAmaW9jNF9kZXZpY2VzKTsKKwlsaXN0X2FkZF90YWlsKCZpZGQtPmlkZF9saXN0LCAmaW9jNF9kZXZpY2VzKTsKIAogCS8qIEFkZCB0aGlzIElPQzQgdG8gYWxsIHN1Ym1vZHVsZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlzLCAmaW9jNF9zdWJtb2R1bGVzLCBpc19saXN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCA3YTc1ZmFlLi4yMzMzNGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKQEAgLTc1LDExICs3NSw0NSBAQAogCSAgaW5leHBlbnNpdmUgYmF0dGVyeSBwb3dlcmVkIG1pY3JvY29udHJvbGxlciBldmFsdWF0aW9uIGJvYXJkLgogCSAgVGhpcyBzYW1lIGNhYmxlIGNhbiBiZSB1c2VkIHRvIGZsYXNoIG5ldyBmaXJtd2FyZS4KIAorY29uZmlnIFNQSV9NUEM4M3h4CisJdHJpc3RhdGUgIkZyZWVzY2FsZSBNUEM4M3h4IFNQSSBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiBQUENfODN4eCAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgU1BJX0JJVEJBTkcKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdXNpbmcgdGhlIEZyZWVzY2FsZSBNUEM4M3h4IFNQSSBjb250cm9sbGVyIGluIG1hc3RlcgorCSAgbW9kZS4KKworCSAgTm90ZSwgdGhpcyBkcml2ZXIgdW5pcXVlbHkgc3VwcG9ydHMgdGhlIFNQSSBjb250cm9sbGVyIG9uIHRoZSBNUEM4M3h4CisJICBmYW1pbHkgb2YgUG93ZXJQQyBwcm9jZXNzb3JzLiAgVGhlIE1QQzgzeHggdXNlcyBhIHNpbXBsZSBzZXQgb2Ygc2hpZnQKKwkgIHJlZ2lzdGVycyBmb3IgZGF0YSAob3Bwb3NlZCB0byB0aGUgQ1BNIGJhc2VkIGRlc2NyaXB0b3IgbW9kZWwpLgorCitjb25maWcgU1BJX1BYQTJYWAorCXRyaXN0YXRlICJQWEEyeHggU1NQIFNQSSBtYXN0ZXIiCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEFSQ0hfUFhBICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB1c2luZyBhIFBYQTJ4eCBTU1AgcG9ydCBhcyBhIFNQSSBtYXN0ZXIgY29udHJvbGxlci4KKwkgIFRoZSBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIGFueSBTU1AgcG9ydCBhbmQgYWRkaXRpb25hbAorCSAgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYSBEb2N1bWVudGF0aW9uL3NwaS9weGEyeHguCisKK2NvbmZpZyBTUElfUzNDMjRYWF9HUElPCisJdHJpc3RhdGUgIlNhbXN1bmcgUzNDMjRYWCBzZXJpZXMgU1BJIGJ5IEdQSU8iCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEFSQ0hfUzNDMjQxMCAmJiBTUElfQklUQkFORyAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTUEkgZHJpdmVyIGZvciBTYW1zdW5nIFMzQzI0WFggc2VyaWVzIEFSTSBTb0NzIHVzaW5nCisJICBHUElPIGxpbmVzIHRvIHByb3ZpZGUgdGhlIFNQSSBidXMuIFRoaXMgY2FuIGJlIHVzZWQgd2hlcmUKKwkgIHRoZSBpbmJ1aWx0IGhhcmR3YXJlIGNhbm5vdCBwcm92aWRlIHRoZSB0cmFuc2ZlciBtb2RlLCBvcgorCSAgd2hlcmUgdGhlIGJvYXJkIGlzIHVzaW5nIG5vbiBoYXJkd2FyZSBjb25uZWN0ZWQgcGlucy4KICMKICMgQWRkIG5ldyBTUEkgbWFzdGVyIGNvbnRyb2xsZXJzIGluIGFscGhhYmV0aWNhbCBvcmRlciBhYm92ZSB0aGlzIGxpbmUKICMKIAogCitjb25maWcgU1BJX1MzQzI0WFgKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBTUEkiCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEFSQ0hfUzNDMjQxMCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTUEkgZHJpdmVyIGZvciBTYW1zdW5nIFMzQzI0WFggc2VyaWVzIEFSTSBTb0NzCisKICMKICMgVGhlcmUgYXJlIGxvdHMgb2YgU1BJIGRldmljZSB0eXBlcywgd2l0aCBzZW5zb3JzIGFuZCBtZW1vcnkKICMgYmVpbmcgcHJvYmFibHkgdGhlIG1vc3Qgd2lkZWx5IHVzZWQgb25lcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggYzJjODdlOC4uOGY0Y2I2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDEwIEBACiAjIFNQSSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXJzIChidXMpCiBvYmotJChDT05GSUdfU1BJX0JJVEJBTkcpCQkrPSBzcGlfYml0YmFuZy5vCiBvYmotJChDT05GSUdfU1BJX0JVVFRFUkZMWSkJCSs9IHNwaV9idXR0ZXJmbHkubworb2JqLSQoQ09ORklHX1NQSV9QWEEyWFgpCQkrPSBweGEyeHhfc3BpLm8KK29iai0kKENPTkZJR19TUElfTVBDODN4eCkJCSs9IHNwaV9tcGM4M3h4Lm8KK29iai0kKENPTkZJR19TUElfUzNDMjRYWF9HUElPKQkJKz0gc3BpX3MzYzI0eHhfZ3Bpby5vCitvYmotJChDT05GSUdfU1BJX1MzQzI0WFgpCQkrPSBzcGlfczNjMjR4eC5vCiAjIAkuLi4gYWRkIGFib3ZlIHRoaXMgbGluZSAuLi4KIAogIyBTUEkgcHJvdG9jb2wgZHJpdmVycyAoZGV2aWNlL2xpbmsgb24gYnVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YWVjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKQEAgLTAsMCArMSwxNDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFN0ZXBoZW4gU3RyZWV0IC8gU3RyZWV0RmlyZSBTb3VuZCBMYWJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4X3NwaS5oPgorCitNT0RVTEVfQVVUSE9SKCJTdGVwaGVuIFN0cmVldCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQWEEyeHggU1NQIFNQSSBDb250b2xsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBNQVhfQlVTRVMgMworCisjZGVmaW5lIERNQV9JTlRfTUFTSyAoRENTUl9FTkRJTlRSIHwgRENTUl9TVEFSVElOVFIgfCBEQ1NSX0JVU0VSUikKKyNkZWZpbmUgUkVTRVRfRE1BX0NIQU5ORUwgKERDU1JfTk9ERVNDIHwgRE1BX0lOVF9NQVNLKQorI2RlZmluZSBJU19ETUFfQUxJR05FRCh4KSAoKCh1MzIpKHgpJjB4MDcpPT0wKQorCisjZGVmaW5lIERFRklORV9TU1BfUkVHKHJlZywgb2ZmKSBcCitzdGF0aWMgaW5saW5lIHUzMiByZWFkXyMjcmVnKHZvaWQgKnApIHsgcmV0dXJuIF9fcmF3X3JlYWRsKHAgKyAob2ZmKSk7IH0gXAorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlXyMjcmVnKHUzMiB2LCB2b2lkICpwKSB7IF9fcmF3X3dyaXRlbCh2LCBwICsgKG9mZikpOyB9CisKK0RFRklORV9TU1BfUkVHKFNTQ1IwLCAweDAwKQorREVGSU5FX1NTUF9SRUcoU1NDUjEsIDB4MDQpCitERUZJTkVfU1NQX1JFRyhTU1NSLCAweDA4KQorREVGSU5FX1NTUF9SRUcoU1NJVFIsIDB4MGMpCitERUZJTkVfU1NQX1JFRyhTU0RSLCAweDEwKQorREVGSU5FX1NTUF9SRUcoU1NUTywgMHgyOCkKK0RFRklORV9TU1BfUkVHKFNTUFNQLCAweDJjKQorCisjZGVmaW5lIFNUQVJUX1NUQVRFICgodm9pZCopMCkKKyNkZWZpbmUgUlVOTklOR19TVEFURSAoKHZvaWQqKTEpCisjZGVmaW5lIERPTkVfU1RBVEUgKCh2b2lkKikyKQorI2RlZmluZSBFUlJPUl9TVEFURSAoKHZvaWQqKS0xKQorCisjZGVmaW5lIFFVRVVFX1JVTk5JTkcgMAorI2RlZmluZSBRVUVVRV9TVE9QUEVEIDEKKworc3RydWN0IGRyaXZlcl9kYXRhIHsKKwkvKiBEcml2ZXIgbW9kZWwgaG9va3VwICovCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCS8qIFNQSSBmcmFtZXdvcmsgaG9va3VwICovCisJZW51bSBweGFfc3NwX3R5cGUgc3NwX3R5cGU7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKworCS8qIFBYQSBob29rdXAgKi8KKwlzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgKm1hc3Rlcl9pbmZvOworCisJLyogRE1BIHNldHVwIHN0dWZmICovCisJaW50IHJ4X2NoYW5uZWw7CisJaW50IHR4X2NoYW5uZWw7CisJdTMyICpudWxsX2RtYV9idWY7CisKKwkvKiBTU1AgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisJdm9pZCAqaW9hZGRyOworCXUzMiBzc2RyX3BoeXNpY2FsOworCisJLyogU1NQIG1hc2tzKi8KKwl1MzIgZG1hX2NyMTsKKwl1MzIgaW50X2NyMTsKKwl1MzIgY2xlYXJfc3I7CisJdTMyIG1hc2tfc3I7CisKKwkvKiBEcml2ZXIgbWVzc2FnZSBxdWV1ZSAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0IHB1bXBfbWVzc2FnZXM7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJaW50IGJ1c3k7CisJaW50IHJ1bjsKKworCS8qIE1lc3NhZ2UgVHJhbnNmZXIgcHVtcCAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBwdW1wX3RyYW5zZmVyczsKKworCS8qIEN1cnJlbnQgbWVzc2FnZSB0cmFuc2ZlciBzdGF0ZSBpbmZvICovCisJc3RydWN0IHNwaV9tZXNzYWdlKiBjdXJfbXNnOworCXN0cnVjdCBzcGlfdHJhbnNmZXIqIGN1cl90cmFuc2ZlcjsKKwlzdHJ1Y3QgY2hpcF9kYXRhICpjdXJfY2hpcDsKKwlzaXplX3QgbGVuOworCXZvaWQgKnR4OworCXZvaWQgKnR4X2VuZDsKKwl2b2lkICpyeDsKKwl2b2lkICpyeF9lbmQ7CisJaW50IGRtYV9tYXBwZWQ7CisJZG1hX2FkZHJfdCByeF9kbWE7CisJZG1hX2FkZHJfdCB0eF9kbWE7CisJc2l6ZV90IHJ4X21hcF9sZW47CisJc2l6ZV90IHR4X21hcF9sZW47CisJdTggbl9ieXRlczsKKwl1MzIgZG1hX3dpZHRoOworCWludCBjc19jaGFuZ2U7CisJdm9pZCAoKndyaXRlKShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKTsKKwl2b2lkICgqcmVhZCkoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7CisJaXJxcmV0dXJuX3QgKCp0cmFuc2Zlcl9oYW5kbGVyKShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKTsKKwl2b2lkICgqY3NfY29udHJvbCkodTMyIGNvbW1hbmQpOworfTsKKworc3RydWN0IGNoaXBfZGF0YSB7CisJdTMyIGNyMDsKKwl1MzIgY3IxOworCXUzMiB0bzsKKwl1MzIgcHNwOworCXUzMiB0aW1lb3V0OworCXU4IG5fYnl0ZXM7CisJdTMyIGRtYV93aWR0aDsKKwl1MzIgZG1hX2J1cnN0X3NpemU7CisJdTMyIHRocmVzaG9sZDsKKwl1MzIgZG1hX3RocmVzaG9sZDsKKwl1OCBlbmFibGVfZG1hOworCXU4IGJpdHNfcGVyX3dvcmQ7CisJdTMyIHNwZWVkX2h6OworCXZvaWQgKCp3cml0ZSkoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7CisJdm9pZCAoKnJlYWQpKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOworCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Cit9OworCitzdGF0aWMgdm9pZCBwdW1wX21lc3NhZ2VzKHZvaWQgKmRhdGEpOworCitzdGF0aWMgaW50IGZsdXNoKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdW5zaWduZWQgbG9uZyBsaW1pdCA9IGxvb3BzX3Blcl9qaWZmeSA8PCAxOworCisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKworCWRvIHsKKwkJd2hpbGUgKHJlYWRfU1NTUihyZWcpICYgU1NTUl9STkUpIHsKKwkJCXJlYWRfU1NEUihyZWcpOworCQl9CisJfSB3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9CU1kpICYmIGxpbWl0LS0pOworCXdyaXRlX1NTU1IoU1NTUl9ST1IsIHJlZyk7CisKKwlyZXR1cm4gbGltaXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfc3RhdGUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJLyogQ2xlYXIgc3RhdHVzIGFuZCBkaXNhYmxlIGNsb2NrICovCisJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisJd3JpdGVfU1NDUjAoZHJ2X2RhdGEtPmN1cl9jaGlwLT5jcjAgJiB+U1NDUjBfU1NFLCByZWcpOworCisJLyogTG9hZCB0aGUgcmVnaXN0ZXJzICovCisJd3JpdGVfU1NDUjEoZHJ2X2RhdGEtPmN1cl9jaGlwLT5jcjEsIHJlZyk7CisJd3JpdGVfU1NDUjAoZHJ2X2RhdGEtPmN1cl9jaGlwLT5jcjAsIHJlZyk7CisJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKSB7CisJCXdyaXRlX1NTVE8oMCwgcmVnKTsKKwkJd3JpdGVfU1NQU1AoZHJ2X2RhdGEtPmN1cl9jaGlwLT5wc3AsIHJlZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBudWxsX2NzX2NvbnRyb2wodTMyIGNvbW1hbmQpCit7Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfd3JpdGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKwl1OCBuX2J5dGVzID0gZHJ2X2RhdGEtPm5fYnl0ZXM7CisKKwl3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9UTkYpCisJCQkmJiAoZHJ2X2RhdGEtPnR4IDwgZHJ2X2RhdGEtPnR4X2VuZCkpIHsKKwkJd3JpdGVfU1NEUigwLCByZWcpOworCQlkcnZfZGF0YS0+dHggKz0gbl9ieXRlczsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKwl1OCBuX2J5dGVzID0gZHJ2X2RhdGEtPm5fYnl0ZXM7CisKKwl3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9STkUpCisJCQkmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKKwkJcmVhZF9TU0RSKHJlZyk7CisJCWRydl9kYXRhLT5yeCArPSBuX2J5dGVzOworCX0KK30KKworc3RhdGljIHZvaWQgdThfd3JpdGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKworCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1RORikKKwkJCSYmIChkcnZfZGF0YS0+dHggPCBkcnZfZGF0YS0+dHhfZW5kKSkgeworCQl3cml0ZV9TU0RSKCoodTggKikoZHJ2X2RhdGEtPnR4KSwgcmVnKTsKKwkJKytkcnZfZGF0YS0+dHg7CisJfQorfQorCitzdGF0aWMgdm9pZCB1OF9yZWFkZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKQorCQkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7CisJCSoodTggKikoZHJ2X2RhdGEtPnJ4KSA9IHJlYWRfU1NEUihyZWcpOworCQkrK2Rydl9kYXRhLT5yeDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHUxNl93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfVE5GKQorCQkJJiYgKGRydl9kYXRhLT50eCA8IGRydl9kYXRhLT50eF9lbmQpKSB7CisJCXdyaXRlX1NTRFIoKih1MTYgKikoZHJ2X2RhdGEtPnR4KSwgcmVnKTsKKwkJZHJ2X2RhdGEtPnR4ICs9IDI7CisJfQorfQorCitzdGF0aWMgdm9pZCB1MTZfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKworCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1JORSkKKwkJCSYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSkgeworCQkqKHUxNiAqKShkcnZfZGF0YS0+cngpID0gcmVhZF9TU0RSKHJlZyk7CisJCWRydl9kYXRhLT5yeCArPSAyOworCX0KK30KK3N0YXRpYyB2b2lkIHUzMl93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfVE5GKQorCQkJJiYgKGRydl9kYXRhLT50eCA8IGRydl9kYXRhLT50eF9lbmQpKSB7CisJCXdyaXRlX1NTRFIoKih1MzIgKikoZHJ2X2RhdGEtPnR4KSwgcmVnKTsKKwkJZHJ2X2RhdGEtPnR4ICs9IDQ7CisJfQorfQorCitzdGF0aWMgdm9pZCB1MzJfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKworCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1JORSkKKwkJCSYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSkgeworCQkqKHUzMiAqKShkcnZfZGF0YS0+cngpID0gcmVhZF9TU0RSKHJlZyk7CisJCWRydl9kYXRhLT5yeCArPSA0OworCX0KK30KKworc3RhdGljIHZvaWQgKm5leHRfdHJhbnNmZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnRyYW5zID0gZHJ2X2RhdGEtPmN1cl90cmFuc2ZlcjsKKworCS8qIE1vdmUgdG8gbmV4dCB0cmFuc2ZlciAqLworCWlmICh0cmFucy0+dHJhbnNmZXJfbGlzdC5uZXh0ICE9ICZtc2ctPnRyYW5zZmVycykgeworCQlkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyID0KKwkJCWxpc3RfZW50cnkodHJhbnMtPnRyYW5zZmVyX2xpc3QubmV4dCwKKwkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciwKKwkJCQkJdHJhbnNmZXJfbGlzdCk7CisJCXJldHVybiBSVU5OSU5HX1NUQVRFOworCX0gZWxzZQorCQlyZXR1cm4gRE9ORV9TVEFURTsKK30KKworc3RhdGljIGludCBtYXBfZG1hX2J1ZmZlcnMoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtc2ctPnNwaS0+ZGV2OworCisJaWYgKCFkcnZfZGF0YS0+Y3VyX2NoaXAtPmVuYWJsZV9kbWEpCisJCXJldHVybiAwOworCisJaWYgKG1zZy0+aXNfZG1hX21hcHBlZCkKKwkJcmV0dXJuICBkcnZfZGF0YS0+cnhfZG1hICYmIGRydl9kYXRhLT50eF9kbWE7CisKKwlpZiAoIUlTX0RNQV9BTElHTkVEKGRydl9kYXRhLT5yeCkgfHwgIUlTX0RNQV9BTElHTkVEKGRydl9kYXRhLT50eCkpCisJCXJldHVybiAwOworCisJLyogTW9kaWZ5IHNldHVwIGlmIHJ4IGJ1ZmZlciBpcyBudWxsICovCisJaWYgKGRydl9kYXRhLT5yeCA9PSBOVUxMKSB7CisJCSpkcnZfZGF0YS0+bnVsbF9kbWFfYnVmID0gMDsKKwkJZHJ2X2RhdGEtPnJ4ID0gZHJ2X2RhdGEtPm51bGxfZG1hX2J1ZjsKKwkJZHJ2X2RhdGEtPnJ4X21hcF9sZW4gPSA0OworCX0gZWxzZQorCQlkcnZfZGF0YS0+cnhfbWFwX2xlbiA9IGRydl9kYXRhLT5sZW47CisKKworCS8qIE1vZGlmeSBzZXR1cCBpZiB0eCBidWZmZXIgaXMgbnVsbCAqLworCWlmIChkcnZfZGF0YS0+dHggPT0gTlVMTCkgeworCQkqZHJ2X2RhdGEtPm51bGxfZG1hX2J1ZiA9IDA7CisJCWRydl9kYXRhLT50eCA9IGRydl9kYXRhLT5udWxsX2RtYV9idWY7CisJCWRydl9kYXRhLT50eF9tYXBfbGVuID0gNDsKKwl9IGVsc2UKKwkJZHJ2X2RhdGEtPnR4X21hcF9sZW4gPSBkcnZfZGF0YS0+bGVuOworCisJLyogU3RyZWFtIG1hcCB0aGUgcnggYnVmZmVyICovCisJZHJ2X2RhdGEtPnJ4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKGRldiwgZHJ2X2RhdGEtPnJ4LAorCQkJCQkJZHJ2X2RhdGEtPnJ4X21hcF9sZW4sCisJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihkcnZfZGF0YS0+cnhfZG1hKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBTdHJlYW0gbWFwIHRoZSB0eCBidWZmZXIgKi8KKwlkcnZfZGF0YS0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LCBkcnZfZGF0YS0+dHgsCisJCQkJCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiwKKwkJCQkJCURNQV9UT19ERVZJQ0UpOworCisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRydl9kYXRhLT50eF9kbWEpKSB7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkcnZfZGF0YS0+cnhfZG1hLAorCQkJCQlkcnZfZGF0YS0+cnhfbWFwX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHVubWFwX2RtYV9idWZmZXJzKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJaWYgKCFkcnZfZGF0YS0+ZG1hX21hcHBlZCkKKwkJcmV0dXJuOworCisJaWYgKCFkcnZfZGF0YS0+Y3VyX21zZy0+aXNfZG1hX21hcHBlZCkgeworCQlkZXYgPSAmZHJ2X2RhdGEtPmN1cl9tc2ctPnNwaS0+ZGV2OworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZHJ2X2RhdGEtPnJ4X2RtYSwKKwkJCQkJZHJ2X2RhdGEtPnJ4X21hcF9sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkcnZfZGF0YS0+dHhfZG1hLAorCQkJCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJfQorCisJZHJ2X2RhdGEtPmRtYV9tYXBwZWQgPSAwOworfQorCisvKiBjYWxsZXIgYWxyZWFkeSBzZXQgbWVzc2FnZS0+c3RhdHVzOyBkbWEgYW5kIHBpbyBpcnFzIGFyZSBibG9ja2VkICovCitzdGF0aWMgdm9pZCBnaXZlYmFjayhzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIqIGxhc3RfdHJhbnNmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCW1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOworCWRydl9kYXRhLT5jdXJfbXNnID0gTlVMTDsKKwlkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyID0gTlVMTDsKKwlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBOVUxMOworCXF1ZXVlX3dvcmsoZHJ2X2RhdGEtPndvcmtxdWV1ZSwgJmRydl9kYXRhLT5wdW1wX21lc3NhZ2VzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCisJbGFzdF90cmFuc2ZlciA9IGxpc3RfZW50cnkobXNnLT50cmFuc2ZlcnMucHJldiwKKwkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciwKKwkJCQkJdHJhbnNmZXJfbGlzdCk7CisKKwlpZiAoIWxhc3RfdHJhbnNmZXItPmNzX2NoYW5nZSkKKwkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0RFQVNTRVJUKTsKKworCW1zZy0+c3RhdGUgPSBOVUxMOworCWlmIChtc2ctPmNvbXBsZXRlKQorCQltc2ctPmNvbXBsZXRlKG1zZy0+Y29udGV4dCk7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9zc3Bfcnhfc3RhbGwodm9pZCAqaW9hZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBsb29wc19wZXJfamlmZnkgPDwgMTsKKworCXdoaWxlICgocmVhZF9TU1NSKGlvYWRkcikgJiBTU1NSX0JTWSkgJiYgbGltaXQtLSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gbGltaXQ7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9kbWFfY2hhbm5lbF9zdG9wKGludCBjaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBsb29wc19wZXJfamlmZnkgPDwgMTsKKworCXdoaWxlICghKERDU1IoY2hhbm5lbCkgJiBEQ1NSX1NUT1BTVEFURSkgJiYgbGltaXQtLSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gbGltaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9oYW5kbGVyKGludCBjaGFubmVsLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGF0YTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisJdTMyIGlycV9zdGF0dXMgPSBEQ1NSKGNoYW5uZWwpICYgRE1BX0lOVF9NQVNLOworCXUzMiB0cmFpbGluZ19zc3NyID0gMDsKKworCWlmIChpcnFfc3RhdHVzICYgRENTUl9CVVNFUlIpIHsKKworCQkvKiBEaXNhYmxlIGludGVycnVwdHMsIGNsZWFyIHN0YXR1cyBhbmQgcmVzZXQgRE1BICovCisJCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7CisJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+ZG1hX2NyMSwgcmVnKTsKKwkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQorCQkJd3JpdGVfU1NUTygwLCByZWcpOworCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwkJRENTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwkJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKworCQlpZiAoZmx1c2goZHJ2X2RhdGEpID09IDApCisJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCQkiZG1hX2hhbmRsZXI6IGZsdXNoIGZhaWxcbiIpOworCisJCXVubWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKTsKKworCQlpZiAoY2hhbm5lbCA9PSBkcnZfZGF0YS0+dHhfY2hhbm5lbCkKKwkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJImRtYV9oYW5kbGVyOiBiYWQgYnVzIGFkZHJlc3Mgb24gIgorCQkJCSJ0eCBjaGFubmVsICVkLCBzb3VyY2UgJXggdGFyZ2V0ID0gJXhcbiIsCisJCQkJY2hhbm5lbCwgRFNBRFIoY2hhbm5lbCksIERUQURSKGNoYW5uZWwpKTsKKwkJZWxzZQorCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKKwkJCQkiZG1hX2hhbmRsZXI6IGJhZCBidXMgYWRkcmVzcyBvbiAiCisJCQkJInJ4IGNoYW5uZWwgJWQsIHNvdXJjZSAleCB0YXJnZXQgPSAleFxuIiwKKwkJCQljaGFubmVsLCBEU0FEUihjaGFubmVsKSwgRFRBRFIoY2hhbm5lbCkpOworCisJCW1zZy0+c3RhdGUgPSBFUlJPUl9TVEFURTsKKwkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKKwl9CisKKwkvKiBQWEEyNTV4X1NTUCBoYXMgbm8gdGltZW91dCBpbnRlcnJ1cHQsIHdhaXQgZm9yIHRhaWxpbmcgYnl0ZXMgKi8KKwlpZiAoKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBQWEEyNXhfU1NQKQorCQkmJiAoY2hhbm5lbCA9PSBkcnZfZGF0YS0+dHhfY2hhbm5lbCkKKwkJJiYgKGlycV9zdGF0dXMgJiBEQ1NSX0VORElOVFIpKSB7CisKKwkJLyogV2FpdCBmb3IgcnggdG8gc3RhbGwgKi8KKwkJaWYgKHdhaXRfc3NwX3J4X3N0YWxsKGRydl9kYXRhLT5pb2FkZHIpID09IDApCisJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCSJkbWFfaGFuZGxlcjogc3NwIHJ4IHN0YWxsIGZhaWxlZFxuIik7CisKKwkJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbiBTU1AgYW5kIERNQSBjaGFubmVscyovCisJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+ZG1hX2NyMSwgcmVnKTsKKwkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisJCURDU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJCURDU1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJCWlmICh3YWl0X2RtYV9jaGFubmVsX3N0b3AoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID09IDApCisJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCSJkbWFfaGFuZGxlcjogZG1hIHJ4IGNoYW5uZWwgc3RvcCBmYWlsZWRcbiIpOworCisJCXVubWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKTsKKworCQkvKiBSZWFkIHRyYWlsaW5nIGJ5dGVzICovCisJCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgdHJhaWxpbmcgYnl0ZXMsIHJlYWQgdGhlbSAqLworCQl0cmFpbGluZ19zc3NyID0gcmVhZF9TU1NSKHJlZyk7CisJCWlmICgodHJhaWxpbmdfc3NzciAmIDB4ZjAwOCkgIT0gMHhmMDAwKSB7CisJCQlkcnZfZGF0YS0+cnggPSBkcnZfZGF0YS0+cnhfZW5kIC0KKwkJCQkJKCgodHJhaWxpbmdfc3NzciA+PiAxMikgJiAweDBmKSArIDEpOworCQkJZHJ2X2RhdGEtPnJlYWQoZHJ2X2RhdGEpOworCQl9CisJCW1zZy0+YWN0dWFsX2xlbmd0aCArPSBkcnZfZGF0YS0+bGVuOworCisJCS8qIFJlbGVhc2UgY2hpcCBzZWxlY3QgaWYgcmVxdWVzdGVkLCB0cmFuc2ZlciBkZWxheXMgYXJlCisJCSAqIGhhbmRsZWQgaW4gcHVtcF90cmFuc2ZlcnMgKi8KKwkJaWYgKGRydl9kYXRhLT5jc19jaGFuZ2UpCisJCQlkcnZfZGF0YS0+Y3NfY29udHJvbChQWEEyWFhfQ1NfREVBU1NFUlQpOworCisJCS8qIE1vdmUgdG8gbmV4dCB0cmFuc2ZlciAqLworCQltc2ctPnN0YXRlID0gbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7CisKKwkJLyogU2NoZWR1bGUgdHJhbnNmZXIgdGFza2xldCAqLworCQl0YXNrbGV0X3NjaGVkdWxlKCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IGRtYV90cmFuc2ZlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXUzMiBpcnFfc3RhdHVzOworCXUzMiB0cmFpbGluZ19zc3NyID0gMDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisKKwlpcnFfc3RhdHVzID0gcmVhZF9TU1NSKHJlZykgJiBkcnZfZGF0YS0+bWFza19zcjsKKwlpZiAoaXJxX3N0YXR1cyAmIFNTU1JfUk9SKSB7CisJCS8qIENsZWFyIGFuZCBkaXNhYmxlIGludGVycnVwdHMgb24gU1NQIGFuZCBETUEgY2hhbm5lbHMqLworCQl3cml0ZV9TU0NSMChyZWFkX1NTQ1IwKHJlZykgJiB+U1NDUjBfU1NFLCByZWcpOworCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmRtYV9jcjEsIHJlZyk7CisJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJCXdyaXRlX1NTVE8oMCwgcmVnKTsKKwkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisJCURDU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJCURDU1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJCXVubWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKTsKKworCQlpZiAoZmx1c2goZHJ2X2RhdGEpID09IDApCisJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCQkiZG1hX3RyYW5zZmVyOiBmbHVzaCBmYWlsXG4iKTsKKworCQlkZXZfd2FybigmZHJ2X2RhdGEtPnBkZXYtPmRldiwgImRtYV90cmFuc2ZlcjogZmlmbyBvdmVydW5cbiIpOworCisJCWRydl9kYXRhLT5jdXJfbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMpOworCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwkvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmUgdGltZW91dCAqLworCWlmICgoaXJxX3N0YXR1cyAmIFNTU1JfVElOVCkgJiYgRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgJiBEQ1NSX1JVTikgeworCQl3cml0ZV9TU1NSKFNTU1JfVElOVCwgcmVnKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3RhdHVzICYgU1NTUl9USU5UIHx8IGRydl9kYXRhLT5yeCA9PSBkcnZfZGF0YS0+cnhfZW5kKSB7CisKKwkJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbiBTU1AgYW5kIERNQSBjaGFubmVscyovCisJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+ZG1hX2NyMSwgcmVnKTsKKwkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQorCQkJd3JpdGVfU1NUTygwLCByZWcpOworCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwkJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwkJRENTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKworCQlpZiAod2FpdF9kbWFfY2hhbm5lbF9zdG9wKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9PSAwKQorCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKKwkJCQkiZG1hX3RyYW5zZmVyOiBkbWEgcnggY2hhbm5lbCBzdG9wIGZhaWxlZFxuIik7CisKKwkJaWYgKHdhaXRfc3NwX3J4X3N0YWxsKGRydl9kYXRhLT5pb2FkZHIpID09IDApCisJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCSJkbWFfdHJhbnNmZXI6IHNzcCByeCBzdGFsbCBmYWlsZWRcbiIpOworCisJCXVubWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKTsKKworCQkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIHRyYWlsaW5nIGJ5dGVzLCByZWFkIHRoZW0gKi8KKwkJdHJhaWxpbmdfc3NzciA9IHJlYWRfU1NTUihyZWcpOworCQlpZiAoKHRyYWlsaW5nX3Nzc3IgJiAweGYwMDgpICE9IDB4ZjAwMCkgeworCQkJZHJ2X2RhdGEtPnJ4ID0gZHJ2X2RhdGEtPnJ4X2VuZCAtCisJCQkJCSgoKHRyYWlsaW5nX3Nzc3IgPj4gMTIpICYgMHgwZikgKyAxKTsKKwkJCWRydl9kYXRhLT5yZWFkKGRydl9kYXRhKTsKKwkJfQorCQltc2ctPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbjsKKworCQkvKiBSZWxlYXNlIGNoaXAgc2VsZWN0IGlmIHJlcXVlc3RlZCwgdHJhbnNmZXIgZGVsYXlzIGFyZQorCQkgKiBoYW5kbGVkIGluIHB1bXBfdHJhbnNmZXJzICovCisJCWlmIChkcnZfZGF0YS0+Y3NfY2hhbmdlKQorCQkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0RFQVNTRVJUKTsKKworCQkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KKwkJbXNnLT5zdGF0ZSA9IG5leHRfdHJhbnNmZXIoZHJ2X2RhdGEpOworCisJCS8qIFNjaGVkdWxlIHRyYW5zZmVyIHRhc2tsZXQgKi8KKwkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKKworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLyogT3BwcyBwcm9ibGVtIGRldGVjdGVkICovCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBsb29wc19wZXJfamlmZnkgPDwgMTsKKwl1MzIgaXJxX3N0YXR1czsKKwl1MzIgaXJxX21hc2sgPSAocmVhZF9TU0NSMShyZWcpICYgU1NDUjFfVElFKSA/CisJCQlkcnZfZGF0YS0+bWFza19zciA6IGRydl9kYXRhLT5tYXNrX3NyICYgflNTU1JfVEZTOworCisJd2hpbGUgKChpcnFfc3RhdHVzID0gcmVhZF9TU1NSKHJlZykgJiBpcnFfbWFzaykpIHsKKworCQlpZiAoaXJxX3N0YXR1cyAmIFNTU1JfUk9SKSB7CisKKwkJCS8qIENsZWFyIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkJCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7CisJCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmludF9jcjEsIHJlZyk7CisJCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCQkJd3JpdGVfU1NUTygwLCByZWcpOworCQkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisKKwkJCWlmIChmbHVzaChkcnZfZGF0YSkgPT0gMCkKKwkJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCQkiaW50ZXJydXB0X3RyYW5zZmVyOiBmbHVzaCBmYWlsXG4iKTsKKworCQkJLyogU3RvcCB0aGUgU1NQICovCisKKwkJCWRldl93YXJuKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCQkiaW50ZXJydXB0X3RyYW5zZmVyOiBmaWZvIG92ZXJ1blxuIik7CisKKwkJCW1zZy0+c3RhdGUgPSBFUlJPUl9TVEFURTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CisKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCisJCS8qIExvb2sgZm9yIGZhbHNlIHBvc2l0aXZlIHRpbWVvdXQgKi8KKwkJaWYgKChpcnFfc3RhdHVzICYgU1NTUl9USU5UKQorCQkJCSYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSkKKwkJCXdyaXRlX1NTU1IoU1NTUl9USU5ULCByZWcpOworCisJCS8qIFB1bXAgZGF0YSAqLworCQlkcnZfZGF0YS0+cmVhZChkcnZfZGF0YSk7CisJCWRydl9kYXRhLT53cml0ZShkcnZfZGF0YSk7CisKKwkJaWYgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKSB7CisJCQkvKiBEaXNhYmxlIHR4IGludGVycnVwdCAqLworCQkJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgflNTQ1IxX1RJRSwgcmVnKTsKKwkJCWlycV9tYXNrID0gZHJ2X2RhdGEtPm1hc2tfc3IgJiB+U1NTUl9URlM7CisKKwkJCS8qIFBYQTI1eF9TU1AgaGFzIG5vIHRpbWVvdXQsIHJlYWQgdHJhaWxpbmcgYnl0ZXMgKi8KKwkJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgPT0gUFhBMjV4X1NTUCkgeworCQkJCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX0JTWSkgJiYgbGltaXQtLSkKKwkJCQkJZHJ2X2RhdGEtPnJlYWQoZHJ2X2RhdGEpOworCisJCQkJaWYgKGxpbWl0ID09IDApCisJCQkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJCQkiaW50ZXJydXB0X3RyYW5zZmVyOiAiCisJCQkJCQkidHJhaWxpbmcgYnl0ZSByZWFkIGZhaWxlZFxuIik7CisJCQl9CisJCX0KKworCQlpZiAoKGlycV9zdGF0dXMgJiBTU1NSX1RJTlQpCisJCQkJfHwgKGRydl9kYXRhLT5yeCA9PSBkcnZfZGF0YS0+cnhfZW5kKSkgeworCisJCQkvKiBDbGVhciB0aW1lb3V0ICovCisJCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmludF9jcjEsIHJlZyk7CisJCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCQkJd3JpdGVfU1NUTygwLCByZWcpOworCQkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisKKwkJCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgKi8KKwkJCW1zZy0+YWN0dWFsX2xlbmd0aCArPSBkcnZfZGF0YS0+bGVuOworCisJCQkvKiBSZWxlYXNlIGNoaXAgc2VsZWN0IGlmIHJlcXVlc3RlZCwgdHJhbnNmZXIgZGVsYXlzIGFyZQorCQkJICogaGFuZGxlZCBpbiBwdW1wX3RyYW5zZmVycyAqLworCQkJaWYgKGRydl9kYXRhLT5jc19jaGFuZ2UpCisJCQkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0RFQVNTRVJUKTsKKworCQkJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCisJCQltc2ctPnN0YXRlID0gbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7CisKKwkJCS8qIFNjaGVkdWxlIHRyYW5zZmVyIHRhc2tsZXQgKi8KKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CisJCX0KKwl9CisKKwkvKiBXZSBkaWQgc29tZXRoaW5nICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3NwX2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSAoc3RydWN0IGRyaXZlcl9kYXRhICopZGV2X2lkOworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisKKwlpZiAoIWRydl9kYXRhLT5jdXJfbXNnKSB7CisKKwkJd3JpdGVfU1NDUjAocmVhZF9TU0NSMChyZWcpICYgflNTQ1IwX1NTRSwgcmVnKTsKKwkJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5pbnRfY3IxLCByZWcpOworCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCisJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJiYWQgbWVzc2FnZSBzdGF0ZSAiCisJCQkJImluIGludGVycnVwdCBoYW5kbGVyIik7CisKKwkJLyogTmV2ZXIgZmFpbCAqLworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIGRydl9kYXRhLT50cmFuc2Zlcl9oYW5kbGVyKGRydl9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgcHVtcF90cmFuc2ZlcnModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSAoc3RydWN0IGRyaXZlcl9kYXRhICopZGF0YTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnRyYW5zZmVyID0gTlVMTDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICpwcmV2aW91cyA9IE5VTEw7CisJc3RydWN0IGNoaXBfZGF0YSAqY2hpcCA9IE5VTEw7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKwl1MzIgY2xrX2RpdiA9IDA7CisJdTggYml0cyA9IDA7CisJdTMyIHNwZWVkID0gMDsKKwl1MzIgY3IwOworCisJLyogR2V0IGN1cnJlbnQgc3RhdGUgaW5mb3JtYXRpb24gKi8KKwltZXNzYWdlID0gZHJ2X2RhdGEtPmN1cl9tc2c7CisJdHJhbnNmZXIgPSBkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyOworCWNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7CisKKwkvKiBIYW5kbGUgZm9yIGFib3J0ICovCisJaWYgKG1lc3NhZ2UtPnN0YXRlID09IEVSUk9SX1NUQVRFKSB7CisJCW1lc3NhZ2UtPnN0YXR1cyA9IC1FSU87CisJCWdpdmViYWNrKGRydl9kYXRhKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEhhbmRsZSBlbmQgb2YgbWVzc2FnZSAqLworCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBET05FX1NUQVRFKSB7CisJCW1lc3NhZ2UtPnN0YXR1cyA9IDA7CisJCWdpdmViYWNrKGRydl9kYXRhKTsKKwkJcmV0dXJuOworCX0KKworCS8qIERlbGF5IGlmIHJlcXVlc3RlZCBhdCBlbmQgb2YgdHJhbnNmZXIqLworCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBSVU5OSU5HX1NUQVRFKSB7CisJCXByZXZpb3VzID0gbGlzdF9lbnRyeSh0cmFuc2Zlci0+dHJhbnNmZXJfbGlzdC5wcmV2LAorCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAorCQkJCQl0cmFuc2Zlcl9saXN0KTsKKwkJaWYgKHByZXZpb3VzLT5kZWxheV91c2VjcykKKwkJCXVkZWxheShwcmV2aW91cy0+ZGVsYXlfdXNlY3MpOworCX0KKworCS8qIFNldHVwIHRoZSB0cmFuc2ZlciBzdGF0ZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0cmFuc2ZlciAqLworCWlmIChmbHVzaChkcnZfZGF0YSkgPT0gMCkgeworCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAicHVtcF90cmFuc2ZlcnM6IGZsdXNoIGZhaWxlZFxuIik7CisJCW1lc3NhZ2UtPnN0YXR1cyA9IC1FSU87CisJCWdpdmViYWNrKGRydl9kYXRhKTsKKwkJcmV0dXJuOworCX0KKwlkcnZfZGF0YS0+bl9ieXRlcyA9IGNoaXAtPm5fYnl0ZXM7CisJZHJ2X2RhdGEtPmRtYV93aWR0aCA9IGNoaXAtPmRtYV93aWR0aDsKKwlkcnZfZGF0YS0+Y3NfY29udHJvbCA9IGNoaXAtPmNzX2NvbnRyb2w7CisJZHJ2X2RhdGEtPnR4ID0gKHZvaWQgKil0cmFuc2Zlci0+dHhfYnVmOworCWRydl9kYXRhLT50eF9lbmQgPSBkcnZfZGF0YS0+dHggKyB0cmFuc2Zlci0+bGVuOworCWRydl9kYXRhLT5yeCA9IHRyYW5zZmVyLT5yeF9idWY7CisJZHJ2X2RhdGEtPnJ4X2VuZCA9IGRydl9kYXRhLT5yeCArIHRyYW5zZmVyLT5sZW47CisJZHJ2X2RhdGEtPnJ4X2RtYSA9IHRyYW5zZmVyLT5yeF9kbWE7CisJZHJ2X2RhdGEtPnR4X2RtYSA9IHRyYW5zZmVyLT50eF9kbWE7CisJZHJ2X2RhdGEtPmxlbiA9IHRyYW5zZmVyLT5sZW47CisJZHJ2X2RhdGEtPndyaXRlID0gZHJ2X2RhdGEtPnR4ID8gY2hpcC0+d3JpdGUgOiBudWxsX3dyaXRlcjsKKwlkcnZfZGF0YS0+cmVhZCA9IGRydl9kYXRhLT5yeCA/IGNoaXAtPnJlYWQgOiBudWxsX3JlYWRlcjsKKwlkcnZfZGF0YS0+Y3NfY2hhbmdlID0gdHJhbnNmZXItPmNzX2NoYW5nZTsKKworCS8qIENoYW5nZSBzcGVlZCBhbmQgYml0IHBlciB3b3JkIG9uIGEgcGVyIHRyYW5zZmVyICovCisJaWYgKHRyYW5zZmVyLT5zcGVlZF9oeiB8fCB0cmFuc2Zlci0+Yml0c19wZXJfd29yZCkgeworCisJCS8qIERpc2FibGUgY2xvY2sgKi8KKwkJd3JpdGVfU1NDUjAoY2hpcC0+Y3IwICYgflNTQ1IwX1NTRSwgcmVnKTsKKwkJY3IwID0gY2hpcC0+Y3IwOworCQliaXRzID0gY2hpcC0+Yml0c19wZXJfd29yZDsKKwkJc3BlZWQgPSBjaGlwLT5zcGVlZF9oejsKKworCQlpZiAodHJhbnNmZXItPnNwZWVkX2h6KQorCQkJc3BlZWQgPSB0cmFuc2Zlci0+c3BlZWRfaHo7CisKKwkJaWYgKHRyYW5zZmVyLT5iaXRzX3Blcl93b3JkKQorCQkJYml0cyA9IHRyYW5zZmVyLT5iaXRzX3Blcl93b3JkOworCisJCWlmIChyZWcgPT0gU1NQMV9WSVJUKQorCQkJY2xrX2RpdiA9IFNTUDFfU2VyQ2xrRGl2KHNwZWVkKTsKKwkJZWxzZSBpZiAocmVnID09IFNTUDJfVklSVCkKKwkJCWNsa19kaXYgPSBTU1AyX1NlckNsa0RpdihzcGVlZCk7CisJCWVsc2UgaWYgKHJlZyA9PSBTU1AzX1ZJUlQpCisJCQljbGtfZGl2ID0gU1NQM19TZXJDbGtEaXYoc3BlZWQpOworCisJCWlmIChiaXRzIDw9IDgpIHsKKwkJCWRydl9kYXRhLT5uX2J5dGVzID0gMTsKKwkJCWRydl9kYXRhLT5kbWFfd2lkdGggPSBEQ01EX1dJRFRIMTsKKwkJCWRydl9kYXRhLT5yZWFkID0gZHJ2X2RhdGEtPnJlYWQgIT0gbnVsbF9yZWFkZXIgPworCQkJCQkJdThfcmVhZGVyIDogbnVsbF9yZWFkZXI7CisJCQlkcnZfZGF0YS0+d3JpdGUgPSBkcnZfZGF0YS0+d3JpdGUgIT0gbnVsbF93cml0ZXIgPworCQkJCQkJdThfd3JpdGVyIDogbnVsbF93cml0ZXI7CisJCX0gZWxzZSBpZiAoYml0cyA8PSAxNikgeworCQkJZHJ2X2RhdGEtPm5fYnl0ZXMgPSAyOworCQkJZHJ2X2RhdGEtPmRtYV93aWR0aCA9IERDTURfV0lEVEgyOworCQkJZHJ2X2RhdGEtPnJlYWQgPSBkcnZfZGF0YS0+cmVhZCAhPSBudWxsX3JlYWRlciA/CisJCQkJCQl1MTZfcmVhZGVyIDogbnVsbF9yZWFkZXI7CisJCQlkcnZfZGF0YS0+d3JpdGUgPSBkcnZfZGF0YS0+d3JpdGUgIT0gbnVsbF93cml0ZXIgPworCQkJCQkJdTE2X3dyaXRlciA6IG51bGxfd3JpdGVyOworCQl9IGVsc2UgaWYgKGJpdHMgPD0gMzIpIHsKKwkJCWRydl9kYXRhLT5uX2J5dGVzID0gNDsKKwkJCWRydl9kYXRhLT5kbWFfd2lkdGggPSBEQ01EX1dJRFRINDsKKwkJCWRydl9kYXRhLT5yZWFkID0gZHJ2X2RhdGEtPnJlYWQgIT0gbnVsbF9yZWFkZXIgPworCQkJCQkJdTMyX3JlYWRlciA6IG51bGxfcmVhZGVyOworCQkJZHJ2X2RhdGEtPndyaXRlID0gZHJ2X2RhdGEtPndyaXRlICE9IG51bGxfd3JpdGVyID8KKwkJCQkJCXUzMl93cml0ZXIgOiBudWxsX3dyaXRlcjsKKwkJfQorCisJCWNyMCA9IGNsa19kaXYKKwkJCXwgU1NDUjBfTW90b3JvbGEKKwkJCXwgU1NDUjBfRGF0YVNpemUoYml0cyA+IDE2ID8gYml0cyAtIDE2IDogYml0cykKKwkJCXwgU1NDUjBfU1NFCisJCQl8IChiaXRzID4gMTYgPyBTU0NSMF9FRFNTIDogMCk7CisKKwkJLyogU3RhcnQgaXQgYmFjayB1cCAqLworCQl3cml0ZV9TU0NSMChjcjAsIHJlZyk7CisJfQorCisJbWVzc2FnZS0+c3RhdGUgPSBSVU5OSU5HX1NUQVRFOworCisJLyogVHJ5IHRvIG1hcCBkbWEgYnVmZmVyIGFuZCBkbyBhIGRtYSB0cmFuc2ZlciBpZiBzdWNjZXNzZnVsICovCisJaWYgKChkcnZfZGF0YS0+ZG1hX21hcHBlZCA9IG1hcF9kbWFfYnVmZmVycyhkcnZfZGF0YSkpKSB7CisKKwkJLyogRW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwkJZHJ2X2RhdGEtPnRyYW5zZmVyX2hhbmRsZXIgPSBkbWFfdHJhbnNmZXI7CisKKwkJLyogU2V0dXAgcnggRE1BIENoYW5uZWwgKi8KKwkJRENTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwkJRFNBRFIoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gZHJ2X2RhdGEtPnNzZHJfcGh5c2ljYWw7CisJCURUQURSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IGRydl9kYXRhLT5yeF9kbWE7CisJCWlmIChkcnZfZGF0YS0+cnggPT0gZHJ2X2RhdGEtPm51bGxfZG1hX2J1ZikKKwkJCS8qIE5vIHRhcmdldCBhZGRyZXNzIGluY3JlbWVudCAqLworCQkJRENNRChkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBEQ01EX0ZMT1dTUkMKKwkJCQkJCQl8IGRydl9kYXRhLT5kbWFfd2lkdGgKKwkJCQkJCQl8IGNoaXAtPmRtYV9idXJzdF9zaXplCisJCQkJCQkJfCBkcnZfZGF0YS0+bGVuOworCQllbHNlCisJCQlEQ01EKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IERDTURfSU5DVFJHQUREUgorCQkJCQkJCXwgRENNRF9GTE9XU1JDCisJCQkJCQkJfCBkcnZfZGF0YS0+ZG1hX3dpZHRoCisJCQkJCQkJfCBjaGlwLT5kbWFfYnVyc3Rfc2l6ZQorCQkJCQkJCXwgZHJ2X2RhdGEtPmxlbjsKKworCQkvKiBTZXR1cCB0eCBETUEgQ2hhbm5lbCAqLworCQlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCQlEU0FEUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBkcnZfZGF0YS0+dHhfZG1hOworCQlEVEFEUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBkcnZfZGF0YS0+c3Nkcl9waHlzaWNhbDsKKwkJaWYgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+bnVsbF9kbWFfYnVmKQorCQkJLyogTm8gc291cmNlIGFkZHJlc3MgaW5jcmVtZW50ICovCisJCQlEQ01EKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IERDTURfRkxPV1RSRworCQkJCQkJCXwgZHJ2X2RhdGEtPmRtYV93aWR0aAorCQkJCQkJCXwgY2hpcC0+ZG1hX2J1cnN0X3NpemUKKwkJCQkJCQl8IGRydl9kYXRhLT5sZW47CisJCWVsc2UKKwkJCURDTUQoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gRENNRF9JTkNTUkNBRERSCisJCQkJCQkJfCBEQ01EX0ZMT1dUUkcKKwkJCQkJCQl8IGRydl9kYXRhLT5kbWFfd2lkdGgKKwkJCQkJCQl8IGNoaXAtPmRtYV9idXJzdF9zaXplCisJCQkJCQkJfCBkcnZfZGF0YS0+bGVuOworCisJCS8qIEVuYWJsZSBkbWEgZW5kIGlycXMgb24gU1NQIHRvIGRldGVjdCBlbmQgb2YgdHJhbnNmZXIgKi8KKwkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBQWEEyNXhfU1NQKQorCQkJRENNRChkcnZfZGF0YS0+dHhfY2hhbm5lbCkgfD0gRENNRF9FTkRJUlFFTjsKKworCQkvKiBGaXggbWUsIG5lZWQgdG8gaGFuZGxlIGNzIHBvbGFyaXR5ICovCisJCWRydl9kYXRhLT5jc19jb250cm9sKFBYQTJYWF9DU19BU1NFUlQpOworCisJCS8qIEdvIGJhYnksIGdvICovCisJCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCQlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSB8PSBEQ1NSX1JVTjsKKwkJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgfD0gRENTUl9SVU47CisJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJCXdyaXRlX1NTVE8oY2hpcC0+dGltZW91dCwgcmVnKTsKKwkJd3JpdGVfU1NDUjEoY2hpcC0+Y3IxCisJCQkJfCBjaGlwLT5kbWFfdGhyZXNob2xkCisJCQkJfCBkcnZfZGF0YS0+ZG1hX2NyMSwKKwkJCQlyZWcpOworCX0gZWxzZSB7CisJCS8qIEVuc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGludGVycnVwdCBoYW5kbGVyCSovCisJCWRydl9kYXRhLT50cmFuc2Zlcl9oYW5kbGVyID0gaW50ZXJydXB0X3RyYW5zZmVyOworCisJCS8qIEZpeCBtZSwgbmVlZCB0byBoYW5kbGUgY3MgcG9sYXJpdHkgKi8KKwkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0FTU0VSVCk7CisKKwkJLyogR28gYmFieSwgZ28gKi8KKwkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJCXdyaXRlX1NTVE8oY2hpcC0+dGltZW91dCwgcmVnKTsKKwkJd3JpdGVfU1NDUjEoY2hpcC0+Y3IxCisJCQkJfCBjaGlwLT50aHJlc2hvbGQKKwkJCQl8IGRydl9kYXRhLT5pbnRfY3IxLAorCQkJCXJlZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwdW1wX21lc3NhZ2VzKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIExvY2sgcXVldWUgYW5kIGNoZWNrIGZvciBxdWV1ZSB3b3JrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmRydl9kYXRhLT5xdWV1ZSkgfHwgZHJ2X2RhdGEtPnJ1biA9PSBRVUVVRV9TVE9QUEVEKSB7CisJCWRydl9kYXRhLT5idXN5ID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGFscmVhZHkgcnVubmluZyBhIG1lc3NhZ2UgKi8KKwlpZiAoZHJ2X2RhdGEtPmN1cl9tc2cpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEV4dHJhY3QgaGVhZCBvZiBxdWV1ZSAqLworCWRydl9kYXRhLT5jdXJfbXNnID0gbGlzdF9lbnRyeShkcnZfZGF0YS0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CisJbGlzdF9kZWxfaW5pdCgmZHJ2X2RhdGEtPmN1cl9tc2ctPnF1ZXVlKTsKKworCS8qIEluaXRpYWwgbWVzc2FnZSBzdGF0ZSovCisJZHJ2X2RhdGEtPmN1cl9tc2ctPnN0YXRlID0gU1RBUlRfU1RBVEU7CisJZHJ2X2RhdGEtPmN1cl90cmFuc2ZlciA9IGxpc3RfZW50cnkoZHJ2X2RhdGEtPmN1cl9tc2ctPnRyYW5zZmVycy5uZXh0LAorCQkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciwKKwkJCQkJCXRyYW5zZmVyX2xpc3QpOworCisJLyogU2V0dXAgdGhlIFNTUCB1c2luZyB0aGUgcGVyIGNoaXAgY29uZmlndXJhdGlvbiAqLworCWRydl9kYXRhLT5jdXJfY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShkcnZfZGF0YS0+Y3VyX21zZy0+c3BpKTsKKwlyZXN0b3JlX3N0YXRlKGRydl9kYXRhKTsKKworCS8qIE1hcmsgYXMgYnVzeSBhbmQgbGF1bmNoIHRyYW5zZmVycyAqLworCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CisKKwlkcnZfZGF0YS0+YnVzeSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCB0cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGRydl9kYXRhLT5ydW4gPT0gUVVFVUVfU1RPUFBFRCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwltc2ctPmFjdHVhbF9sZW5ndGggPSAwOworCW1zZy0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCW1zZy0+c3RhdGUgPSBTVEFSVF9TVEFURTsKKworCWxpc3RfYWRkX3RhaWwoJm1zZy0+cXVldWUsICZkcnZfZGF0YS0+cXVldWUpOworCisJaWYgKGRydl9kYXRhLT5ydW4gPT0gUVVFVUVfUlVOTklORyAmJiAhZHJ2X2RhdGEtPmJ1c3kpCisJCXF1ZXVlX3dvcmsoZHJ2X2RhdGEtPndvcmtxdWV1ZSwgJmRydl9kYXRhLT5wdW1wX21lc3NhZ2VzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBweGEyeHhfc3BpX2NoaXAgKmNoaXBfaW5mbyA9IE5VTEw7CisJc3RydWN0IGNoaXBfZGF0YSAqY2hpcDsKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdW5zaWduZWQgaW50IGNsa19kaXY7CisKKwlpZiAoIXNwaS0+Yml0c19wZXJfd29yZCkKKwkJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKworCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUAorCQkJJiYgKHNwaS0+Yml0c19wZXJfd29yZCA8IDQgfHwgc3BpLT5iaXRzX3Blcl93b3JkID4gMzIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChzcGktPmJpdHNfcGVyX3dvcmQgPCA0IHx8IHNwaS0+Yml0c19wZXJfd29yZCA+IDE2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE9ubHkgYWxsb2MgKG9yIHVzZSBjaGlwX2luZm8pIG9uIGZpcnN0IHNldHVwICovCisJY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOworCWlmIChjaGlwID09IE5VTEwpIHsKKwkJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGlwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjaGlwKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJY2hpcC0+Y3NfY29udHJvbCA9IG51bGxfY3NfY29udHJvbDsKKwkJY2hpcC0+ZW5hYmxlX2RtYSA9IDA7CisJCWNoaXAtPnRpbWVvdXQgPSBTU1BfVElNRU9VVCgxMDAwKTsKKwkJY2hpcC0+dGhyZXNob2xkID0gU1NDUjFfUnhUcmVzaCgxKSB8IFNTQ1IxX1R4VHJlc2goMSk7CisJCWNoaXAtPmRtYV9idXJzdF9zaXplID0gZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5lbmFibGVfZG1hID8KKwkJCQkJRENNRF9CVVJTVDggOiAwOworCisJCWNoaXBfaW5mbyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOworCX0KKworCS8qIGNoaXBfaW5mbyBpc24ndCBhbHdheXMgbmVlZGVkICovCisJaWYgKGNoaXBfaW5mbykgeworCQlpZiAoY2hpcF9pbmZvLT5jc19jb250cm9sKQorCQkJY2hpcC0+Y3NfY29udHJvbCA9IGNoaXBfaW5mby0+Y3NfY29udHJvbDsKKworCQljaGlwLT50aW1lb3V0ID0gU1NQX1RJTUVPVVQoY2hpcF9pbmZvLT50aW1lb3V0X21pY3Jvc2Vjcyk7CisKKwkJY2hpcC0+dGhyZXNob2xkID0gU1NDUjFfUnhUcmVzaChjaGlwX2luZm8tPnJ4X3RocmVzaG9sZCkKKwkJCQkJfCBTU0NSMV9UeFRyZXNoKGNoaXBfaW5mby0+dHhfdGhyZXNob2xkKTsKKworCQljaGlwLT5lbmFibGVfZG1hID0gY2hpcF9pbmZvLT5kbWFfYnVyc3Rfc2l6ZSAhPSAwCisJCQkJCSYmIGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+ZW5hYmxlX2RtYTsKKwkJY2hpcC0+ZG1hX3RocmVzaG9sZCA9IDA7CisKKwkJaWYgKGNoaXAtPmVuYWJsZV9kbWEpIHsKKwkJCWlmIChjaGlwX2luZm8tPmRtYV9idXJzdF9zaXplIDw9IDgpIHsKKwkJCQljaGlwLT5kbWFfdGhyZXNob2xkID0gU1NDUjFfUnhUcmVzaCg4KQorCQkJCQkJCXwgU1NDUjFfVHhUcmVzaCg4KTsKKwkJCQljaGlwLT5kbWFfYnVyc3Rfc2l6ZSA9IERDTURfQlVSU1Q4OworCQkJfSBlbHNlIGlmIChjaGlwX2luZm8tPmRtYV9idXJzdF9zaXplIDw9IDE2KSB7CisJCQkJY2hpcC0+ZG1hX3RocmVzaG9sZCA9IFNTQ1IxX1J4VHJlc2goMTYpCisJCQkJCQkJfCBTU0NSMV9UeFRyZXNoKDE2KTsKKwkJCQljaGlwLT5kbWFfYnVyc3Rfc2l6ZSA9IERDTURfQlVSU1QxNjsKKwkJCX0gZWxzZSB7CisJCQkJY2hpcC0+ZG1hX3RocmVzaG9sZCA9IFNTQ1IxX1J4VHJlc2goMzIpCisJCQkJCQkJfCBTU0NSMV9UeFRyZXNoKDMyKTsKKwkJCQljaGlwLT5kbWFfYnVyc3Rfc2l6ZSA9IERDTURfQlVSU1QzMjsKKwkJCX0KKwkJfQorCisKKwkJaWYgKGNoaXBfaW5mby0+ZW5hYmxlX2xvb3BiYWNrKQorCQkJY2hpcC0+Y3IxID0gU1NDUjFfTEJNOworCX0KKworCWlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDFfVklSVCkKKwkJY2xrX2RpdiA9IFNTUDFfU2VyQ2xrRGl2KHNwaS0+bWF4X3NwZWVkX2h6KTsKKwllbHNlIGlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDJfVklSVCkKKwkJY2xrX2RpdiA9IFNTUDJfU2VyQ2xrRGl2KHNwaS0+bWF4X3NwZWVkX2h6KTsKKwllbHNlIGlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDNfVklSVCkKKwkJY2xrX2RpdiA9IFNTUDNfU2VyQ2xrRGl2KHNwaS0+bWF4X3NwZWVkX2h6KTsKKwllbHNlCisJCXJldHVybiAtRU5PREVWOworCWNoaXAtPnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisKKwljaGlwLT5jcjAgPSBjbGtfZGl2CisJCQl8IFNTQ1IwX01vdG9yb2xhCisJCQl8IFNTQ1IwX0RhdGFTaXplKHNwaS0+Yml0c19wZXJfd29yZCA+IDE2ID8KKwkJCQlzcGktPmJpdHNfcGVyX3dvcmQgLSAxNiA6IHNwaS0+Yml0c19wZXJfd29yZCkKKwkJCXwgU1NDUjBfU1NFCisJCQl8IChzcGktPmJpdHNfcGVyX3dvcmQgPiAxNiA/IFNTQ1IwX0VEU1MgOiAwKTsKKwljaGlwLT5jcjEgfD0gKCgoc3BpLT5tb2RlICYgU1BJX0NQSEEpICE9IDApIDw8IDQpCisJCQl8ICgoKHNwaS0+bW9kZSAmIFNQSV9DUE9MKSAhPSAwKSA8PCAzKTsKKworCS8qIE5PVEU6ICBQWEEyNXhfU1NQIF9jb3VsZF8gdXNlIGV4dGVybmFsIGNsb2NraW5nIC4uLiAqLworCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJZGV2X2RiZygmc3BpLT5kZXYsICIlZCBiaXRzL3dvcmQsICVkIEh6LCBtb2RlICVkXG4iLAorCQkJCXNwaS0+Yml0c19wZXJfd29yZCwKKwkJCQkoQ0xPQ0tfU1BFRURfSFopCisJCQkJCS8gKDEgKyAoKGNoaXAtPmNyMCAmIFNTQ1IwX1NDUikgPj4gOCkpLAorCQkJCXNwaS0+bW9kZSAmIDB4Myk7CisJZWxzZQorCQlkZXZfZGJnKCZzcGktPmRldiwgIiVkIGJpdHMvd29yZCwgJWQgSHosIG1vZGUgJWRcbiIsCisJCQkJc3BpLT5iaXRzX3Blcl93b3JkLAorCQkJCShDTE9DS19TUEVFRF9IWi8yKQorCQkJCQkvICgxICsgKChjaGlwLT5jcjAgJiBTU0NSMF9TQ1IpID4+IDgpKSwKKwkJCQlzcGktPm1vZGUgJiAweDMpOworCisJaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8PSA4KSB7CisJCWNoaXAtPm5fYnl0ZXMgPSAxOworCQljaGlwLT5kbWFfd2lkdGggPSBEQ01EX1dJRFRIMTsKKwkJY2hpcC0+cmVhZCA9IHU4X3JlYWRlcjsKKwkJY2hpcC0+d3JpdGUgPSB1OF93cml0ZXI7CisJfSBlbHNlIGlmIChzcGktPmJpdHNfcGVyX3dvcmQgPD0gMTYpIHsKKwkJY2hpcC0+bl9ieXRlcyA9IDI7CisJCWNoaXAtPmRtYV93aWR0aCA9IERDTURfV0lEVEgyOworCQljaGlwLT5yZWFkID0gdTE2X3JlYWRlcjsKKwkJY2hpcC0+d3JpdGUgPSB1MTZfd3JpdGVyOworCX0gZWxzZSBpZiAoc3BpLT5iaXRzX3Blcl93b3JkIDw9IDMyKSB7CisJCWNoaXAtPmNyMCB8PSBTU0NSMF9FRFNTOworCQljaGlwLT5uX2J5dGVzID0gNDsKKwkJY2hpcC0+ZG1hX3dpZHRoID0gRENNRF9XSURUSDQ7CisJCWNoaXAtPnJlYWQgPSB1MzJfcmVhZGVyOworCQljaGlwLT53cml0ZSA9IHUzMl93cml0ZXI7CisJfSBlbHNlIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJpbnZhbGlkIHdvcmRzaXplXG4iKTsKKwkJa2ZyZWUoY2hpcCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwljaGlwLT5iaXRzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkOworCisJc3BpX3NldF9jdGxkYXRhKHNwaSwgY2hpcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoKHN0cnVjdCBzcGlfZGV2aWNlICopc3BpKTsKKworCWtmcmVlKGNoaXApOworfQorCitzdGF0aWMgaW50IGluaXRfcXVldWUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwlJTklUX0xJU1RfSEVBRCgmZHJ2X2RhdGEtPnF1ZXVlKTsKKwlzcGluX2xvY2tfaW5pdCgmZHJ2X2RhdGEtPmxvY2spOworCisJZHJ2X2RhdGEtPnJ1biA9IFFVRVVFX1NUT1BQRUQ7CisJZHJ2X2RhdGEtPmJ1c3kgPSAwOworCisJdGFza2xldF9pbml0KCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMsCisJCQlwdW1wX3RyYW5zZmVycywJKHVuc2lnbmVkIGxvbmcpZHJ2X2RhdGEpOworCisJSU5JVF9XT1JLKCZkcnZfZGF0YS0+cHVtcF9tZXNzYWdlcywgcHVtcF9tZXNzYWdlcywgZHJ2X2RhdGEpOworCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQkJZHJ2X2RhdGEtPm1hc3Rlci0+Y2Rldi5kZXYtPmJ1c19pZCk7CisJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YXJ0X3F1ZXVlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGRydl9kYXRhLT5ydW4gPT0gUVVFVUVfUlVOTklORyB8fCBkcnZfZGF0YS0+YnVzeSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWRydl9kYXRhLT5ydW4gPSBRVUVVRV9SVU5OSU5HOworCWRydl9kYXRhLT5jdXJfbXNnID0gTlVMTDsKKwlkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyID0gTlVMTDsKKwlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisKKwlxdWV1ZV93b3JrKGRydl9kYXRhLT53b3JrcXVldWUsICZkcnZfZGF0YS0+cHVtcF9tZXNzYWdlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG9wX3F1ZXVlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsaW1pdCA9IDUwMDsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCisJLyogVGhpcyBpcyBhIGJpdCBsYW1lLCBidXQgaXMgb3B0aW1pemVkIGZvciB0aGUgY29tbW9uIGV4ZWN1dGlvbiBwYXRoLgorCSAqIEEgd2FpdF9xdWV1ZSBvbiB0aGUgZHJ2X2RhdGEtPmJ1c3kgY291bGQgYmUgdXNlZCwgYnV0IHRoZW4gdGhlIGNvbW1vbgorCSAqIGV4ZWN1dGlvbiBwYXRoIChwdW1wX21lc3NhZ2VzKSB3b3VsZCBiZSByZXF1aXJlZCB0byBjYWxsIHdha2VfdXAgb3IKKwkgKiBmcmllbmRzIG9uIGV2ZXJ5IFNQSSBtZXNzYWdlLiBEbyB0aGlzIGluc3RlYWQgKi8KKwlkcnZfZGF0YS0+cnVuID0gUVVFVUVfU1RPUFBFRDsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRydl9kYXRhLT5xdWV1ZSkgJiYgZHJ2X2RhdGEtPmJ1c3kgJiYgbGltaXQtLSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCQltc2xlZXAoMTApOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRydl9kYXRhLT5xdWV1ZSkgfHwgZHJ2X2RhdGEtPmJ1c3kpCisJCXN0YXR1cyA9IC1FQlVTWTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRlc3Ryb3lfcXVldWUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gc3RvcF9xdWV1ZShkcnZfZGF0YSk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJZGVzdHJveV93b3JrcXVldWUoZHJ2X2RhdGEtPndvcmtxdWV1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGEyeHhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgKnBsYXRmb3JtX2luZm87CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbW9yeV9yZXNvdXJjZTsKKwlpbnQgaXJxOworCWludCBzdGF0dXMgPSAwOworCisJcGxhdGZvcm1faW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWlmIChwbGF0Zm9ybV9pbmZvLT5zc3BfdHlwZSA9PSBTU1BfVU5ERUZJTkVEKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuZGVmaW5lZCBTU1BcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBtYXN0ZXIgd2l0aCBzcGFjZSBmb3IgZHJ2X2RhdGEgYW5kIG51bGwgZG1hIGJ1ZmZlciAqLworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoZGV2LCBzaXplb2Yoc3RydWN0IGRyaXZlcl9kYXRhKSArIDE2KTsKKwlpZiAoIW1hc3RlcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4gbm90IGFsbG9jIHNwaV9tYXN0ZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJZHJ2X2RhdGEtPm1hc3RlciA9IG1hc3RlcjsKKwlkcnZfZGF0YS0+bWFzdGVyX2luZm8gPSBwbGF0Zm9ybV9pbmZvOworCWRydl9kYXRhLT5wZGV2ID0gcGRldjsKKworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwbGF0Zm9ybV9pbmZvLT5udW1fY2hpcHNlbGVjdDsKKwltYXN0ZXItPmNsZWFudXAgPSBjbGVhbnVwOworCW1hc3Rlci0+c2V0dXAgPSBzZXR1cDsKKwltYXN0ZXItPnRyYW5zZmVyID0gdHJhbnNmZXI7CisKKwlkcnZfZGF0YS0+c3NwX3R5cGUgPSBwbGF0Zm9ybV9pbmZvLT5zc3BfdHlwZTsKKwlkcnZfZGF0YS0+bnVsbF9kbWFfYnVmID0gKHUzMiAqKUFMSUdOKCh1MzIpKGRydl9kYXRhICsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZHJpdmVyX2RhdGEpKSwgOCk7CisKKwkvKiBTZXR1cCByZWdpc3RlciBhZGRyZXNzZXMgKi8KKwltZW1vcnlfcmVzb3VyY2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghbWVtb3J5X3Jlc291cmNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1lbW9yeSByZXNvdXJjZXMgbm90IGRlZmluZWRcbiIpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIG91dF9lcnJvcl9tYXN0ZXJfYWxsb2M7CisJfQorCisJZHJ2X2RhdGEtPmlvYWRkciA9ICh2b2lkICopaW9fcDJ2KCh1bnNpZ25lZCBsb25nKShtZW1vcnlfcmVzb3VyY2UtPnN0YXJ0KSk7CisJZHJ2X2RhdGEtPnNzZHJfcGh5c2ljYWwgPSBtZW1vcnlfcmVzb3VyY2UtPnN0YXJ0ICsgMHgwMDAwMDAxMDsKKwlpZiAocGxhdGZvcm1faW5mby0+c3NwX3R5cGUgPT0gUFhBMjV4X1NTUCkgeworCQlkcnZfZGF0YS0+aW50X2NyMSA9IFNTQ1IxX1RJRSB8IFNTQ1IxX1JJRTsKKwkJZHJ2X2RhdGEtPmRtYV9jcjEgPSAwOworCQlkcnZfZGF0YS0+Y2xlYXJfc3IgPSBTU1NSX1JPUjsKKwkJZHJ2X2RhdGEtPm1hc2tfc3IgPSBTU1NSX1JGUyB8IFNTU1JfVEZTIHwgU1NTUl9ST1I7CisJfSBlbHNlIHsKKwkJZHJ2X2RhdGEtPmludF9jcjEgPSBTU0NSMV9USUUgfCBTU0NSMV9SSUUgfCBTU0NSMV9USU5URTsKKwkJZHJ2X2RhdGEtPmRtYV9jcjEgPSBTU0NSMV9UU1JFIHwgU1NDUjFfUlNSRSB8IFNTQ1IxX1RJTlRFOworCQlkcnZfZGF0YS0+Y2xlYXJfc3IgPSBTU1NSX1JPUiB8IFNTU1JfVElOVDsKKwkJZHJ2X2RhdGEtPm1hc2tfc3IgPSBTU1NSX1RJTlQgfCBTU1NSX1JGUyB8IFNTU1JfVEZTIHwgU1NTUl9ST1I7CisJfQorCisJLyogQXR0YWNoIHRvIElSUSAqLworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaXJxIHJlc291cmNlIG5vdCBkZWZpbmVkXG4iKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZXJyb3JfbWFzdGVyX2FsbG9jOworCX0KKworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgc3NwX2ludCwgMCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4gbm90IGdldCBJUlFcbiIpOworCQlnb3RvIG91dF9lcnJvcl9tYXN0ZXJfYWxsb2M7CisJfQorCisJLyogU2V0dXAgRE1BIGlmIHJlcXVlc3RlZCAqLworCWRydl9kYXRhLT50eF9jaGFubmVsID0gLTE7CisJZHJ2X2RhdGEtPnJ4X2NoYW5uZWwgPSAtMTsKKwlpZiAocGxhdGZvcm1faW5mby0+ZW5hYmxlX2RtYSkgeworCisJCS8qIEdldCB0d28gRE1BIGNoYW5uZWxzCShyeCBhbmQgdHgpICovCisJCWRydl9kYXRhLT5yeF9jaGFubmVsID0gcHhhX3JlcXVlc3RfZG1hKCJweGEyeHhfc3BpX3NzcF9yeCIsCisJCQkJCQkJRE1BX1BSSU9fSElHSCwKKwkJCQkJCQlkbWFfaGFuZGxlciwKKwkJCQkJCQlkcnZfZGF0YSk7CisJCWlmIChkcnZfZGF0YS0+cnhfY2hhbm5lbCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAicHJvYmxlbSAoJWQpIHJlcXVlc3RpbmcgcnggY2hhbm5lbFxuIiwKKwkJCQlkcnZfZGF0YS0+cnhfY2hhbm5lbCk7CisJCQlzdGF0dXMgPSAtRU5PREVWOworCQkJZ290byBvdXRfZXJyb3JfaXJxX2FsbG9jOworCQl9CisJCWRydl9kYXRhLT50eF9jaGFubmVsID0gcHhhX3JlcXVlc3RfZG1hKCJweGEyeHhfc3BpX3NzcF90eCIsCisJCQkJCQkJRE1BX1BSSU9fTUVESVVNLAorCQkJCQkJCWRtYV9oYW5kbGVyLAorCQkJCQkJCWRydl9kYXRhKTsKKwkJaWYgKGRydl9kYXRhLT50eF9jaGFubmVsIDwgMCkgeworCQkJZGV2X2VycihkZXYsICJwcm9ibGVtICglZCkgcmVxdWVzdGluZyB0eCBjaGFubmVsXG4iLAorCQkJCWRydl9kYXRhLT50eF9jaGFubmVsKTsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlnb3RvIG91dF9lcnJvcl9kbWFfYWxsb2M7CisJCX0KKworCQlpZiAoZHJ2X2RhdGEtPmlvYWRkciA9PSBTU1AxX1ZJUlQpIHsKKwkJCQlEUkNNUlJYU1NEUiA9IERSQ01SX01BUFZMRAorCQkJCQkJfCBkcnZfZGF0YS0+cnhfY2hhbm5lbDsKKwkJCQlEUkNNUlRYU1NEUiA9IERSQ01SX01BUFZMRAorCQkJCQkJfCBkcnZfZGF0YS0+dHhfY2hhbm5lbDsKKwkJfSBlbHNlIGlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDJfVklSVCkgeworCQkJCURSQ01SUlhTUzJEUiA9IERSQ01SX01BUFZMRAorCQkJCQkJfCBkcnZfZGF0YS0+cnhfY2hhbm5lbDsKKwkJCQlEUkNNUlRYU1MyRFIgPSBEUkNNUl9NQVBWTEQKKwkJCQkJCXwgZHJ2X2RhdGEtPnR4X2NoYW5uZWw7CisJCX0gZWxzZSBpZiAoZHJ2X2RhdGEtPmlvYWRkciA9PSBTU1AzX1ZJUlQpIHsKKwkJCQlEUkNNUlJYU1MzRFIgPSBEUkNNUl9NQVBWTEQKKwkJCQkJCXwgZHJ2X2RhdGEtPnJ4X2NoYW5uZWw7CisJCQkJRFJDTVJUWFNTM0RSID0gRFJDTVJfTUFQVkxECisJCQkJCQl8IGRydl9kYXRhLT50eF9jaGFubmVsOworCQl9IGVsc2UgeworCQkJZGV2X2VycihkZXYsICJiYWQgU1NQIHR5cGVcbiIpOworCQkJZ290byBvdXRfZXJyb3JfZG1hX2FsbG9jOworCQl9CisJfQorCisJLyogRW5hYmxlIFNPQyBjbG9jayAqLworCXB4YV9zZXRfY2tlbihwbGF0Zm9ybV9pbmZvLT5jbG9ja19lbmFibGUsIDEpOworCisJLyogTG9hZCBkZWZhdWx0IFNTUCBjb25maWd1cmF0aW9uICovCisJd3JpdGVfU1NDUjAoMCwgZHJ2X2RhdGEtPmlvYWRkcik7CisJd3JpdGVfU1NDUjEoU1NDUjFfUnhUcmVzaCg0KSB8IFNTQ1IxX1R4VHJlc2goMTIpLCBkcnZfZGF0YS0+aW9hZGRyKTsKKwl3cml0ZV9TU0NSMChTU0NSMF9TZXJDbGtEaXYoMikKKwkJCXwgU1NDUjBfTW90b3JvbGEKKwkJCXwgU1NDUjBfRGF0YVNpemUoOCksCisJCQlkcnZfZGF0YS0+aW9hZGRyKTsKKwlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCXdyaXRlX1NTVE8oMCwgZHJ2X2RhdGEtPmlvYWRkcik7CisJd3JpdGVfU1NQU1AoMCwgZHJ2X2RhdGEtPmlvYWRkcik7CisKKwkvKiBJbml0aWFsIGFuZCBzdGFydCBxdWV1ZSAqLworCXN0YXR1cyA9IGluaXRfcXVldWUoZHJ2X2RhdGEpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9ibGVtIGluaXRpYWxpemluZyBxdWV1ZVxuIik7CisJCWdvdG8gb3V0X2Vycm9yX2Nsb2NrX2VuYWJsZWQ7CisJfQorCXN0YXR1cyA9IHN0YXJ0X3F1ZXVlKGRydl9kYXRhKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmxlbSBzdGFydGluZyBxdWV1ZVxuIik7CisJCWdvdG8gb3V0X2Vycm9yX2Nsb2NrX2VuYWJsZWQ7CisJfQorCisJLyogUmVnaXN0ZXIgd2l0aCB0aGUgU1BJIGZyYW1ld29yayAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydl9kYXRhKTsKKwlzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gcmVnaXN0ZXJpbmcgc3BpIG1hc3RlclxuIik7CisJCWdvdG8gb3V0X2Vycm9yX3F1ZXVlX2FsbG9jOworCX0KKworCXJldHVybiBzdGF0dXM7CisKK291dF9lcnJvcl9xdWV1ZV9hbGxvYzoKKwlkZXN0cm95X3F1ZXVlKGRydl9kYXRhKTsKKworb3V0X2Vycm9yX2Nsb2NrX2VuYWJsZWQ6CisJcHhhX3NldF9ja2VuKHBsYXRmb3JtX2luZm8tPmNsb2NrX2VuYWJsZSwgMCk7CisKK291dF9lcnJvcl9kbWFfYWxsb2M6CisJaWYgKGRydl9kYXRhLT50eF9jaGFubmVsICE9IC0xKQorCQlweGFfZnJlZV9kbWEoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpOworCWlmIChkcnZfZGF0YS0+cnhfY2hhbm5lbCAhPSAtMSkKKwkJcHhhX2ZyZWVfZG1hKGRydl9kYXRhLT5yeF9jaGFubmVsKTsKKworb3V0X2Vycm9yX2lycV9hbGxvYzoKKwlmcmVlX2lycShpcnEsIGRydl9kYXRhKTsKKworb3V0X2Vycm9yX21hc3Rlcl9hbGxvYzoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcHhhMnh4X3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGlycTsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghZHJ2X2RhdGEpCisJCXJldHVybiAwOworCisJLyogUmVtb3ZlIHRoZSBxdWV1ZSAqLworCXN0YXR1cyA9IGRlc3Ryb3lfcXVldWUoZHJ2X2RhdGEpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIERpc2FibGUgdGhlIFNTUCBhdCB0aGUgcGVyaXBoZXJhbCBhbmQgU09DIGxldmVsICovCisJd3JpdGVfU1NDUjAoMCwgZHJ2X2RhdGEtPmlvYWRkcik7CisJcHhhX3NldF9ja2VuKGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+Y2xvY2tfZW5hYmxlLCAwKTsKKworCS8qIFJlbGVhc2UgRE1BICovCisJaWYgKGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+ZW5hYmxlX2RtYSkgeworCQlpZiAoZHJ2X2RhdGEtPmlvYWRkciA9PSBTU1AxX1ZJUlQpIHsKKwkJCURSQ01SUlhTU0RSID0gMDsKKwkJCURSQ01SVFhTU0RSID0gMDsKKwkJfSBlbHNlIGlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDJfVklSVCkgeworCQkJRFJDTVJSWFNTMkRSID0gMDsKKwkJCURSQ01SVFhTUzJEUiA9IDA7CisJCX0gZWxzZSBpZiAoZHJ2X2RhdGEtPmlvYWRkciA9PSBTU1AzX1ZJUlQpIHsKKwkJCURSQ01SUlhTUzNEUiA9IDA7CisJCQlEUkNNUlRYU1MzRFIgPSAwOworCQl9CisJCXB4YV9mcmVlX2RtYShkcnZfZGF0YS0+dHhfY2hhbm5lbCk7CisJCXB4YV9mcmVlX2RtYShkcnZfZGF0YS0+cnhfY2hhbm5lbCk7CisJfQorCisJLyogUmVsZWFzZSBJUlEgKi8KKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPj0gMCkKKwkJZnJlZV9pcnEoaXJxLCBkcnZfZGF0YSk7CisKKwkvKiBEaXNjb25uZWN0IGZyb20gdGhlIFNQSSBmcmFtZXdvcmsgKi8KKwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoZHJ2X2RhdGEtPm1hc3Rlcik7CisKKwkvKiBQcmV2ZW50IGRvdWJsZSByZW1vdmUgKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBweGEyeHhfc3BpX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoKHN0YXR1cyA9IHB4YTJ4eF9zcGlfcmVtb3ZlKHBkZXYpKSAhPSAwKQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzaHV0ZG93biBmYWlsZWQgd2l0aCAlZFxuIiwgc3RhdHVzKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzdXNwZW5kX2RldmljZXMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwbV9tZXNzYWdlKQoreworCXBtX21lc3NhZ2VfdCAqc3RhdGUgPSBwbV9tZXNzYWdlOworCisJaWYgKGRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gc3RhdGUtPmV2ZW50KSB7CisJCWRldl93YXJuKGRldiwgInBtIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcXVlc3RcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhMnh4X3NwaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHN0YXR1cyA9IDA7CisKKwkvKiBDaGVjayBhbGwgY2hpbGRlcm4gZm9yIGN1cnJlbnQgcG93ZXIgc3RhdGUgKi8KKwlpZiAoZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZwZGV2LT5kZXYsICZzdGF0ZSwgc3VzcGVuZF9kZXZpY2VzKSAhPSAwKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJzdXNwZW5kIGFib3J0ZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RhdHVzID0gc3RvcF9xdWV1ZShkcnZfZGF0YSk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCXdyaXRlX1NTQ1IwKDAsIGRydl9kYXRhLT5pb2FkZHIpOworCXB4YV9zZXRfY2tlbihkcnZfZGF0YS0+bWFzdGVyX2luZm8tPmNsb2NrX2VuYWJsZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGEyeHhfc3BpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qIEVuYWJsZSB0aGUgU1NQIGNsb2NrICovCisJcHhhX3NldF9ja2VuKGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+Y2xvY2tfZW5hYmxlLCAxKTsKKworCS8qIFN0YXJ0IHRoZSBxdWV1ZSBydW5uaW5nICovCisJc3RhdHVzID0gc3RhcnRfcXVldWUoZHJ2X2RhdGEpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHF1ZXVlICglZClcbiIsIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBweGEyeHhfc3BpX3N1c3BlbmQgTlVMTAorI2RlZmluZSBweGEyeHhfc3BpX3Jlc3VtZSBOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJweGEyeHgtc3BpIiwKKwkJLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBweGEyeHhfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChweGEyeHhfc3BpX3JlbW92ZSksCisJLnNodXRkb3duID0gcHhhMnh4X3NwaV9zaHV0ZG93biwKKwkuc3VzcGVuZCA9IHB4YTJ4eF9zcGlfc3VzcGVuZCwKKwkucmVzdW1lID0gcHhhMnh4X3NwaV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfc3BpX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcik7CisKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHB4YTJ4eF9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBweGEyeHhfc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHB4YTJ4eF9zcGlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS5jCmluZGV4IDk0ZjVlOGUuLjFjZWE0YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS5jCkBAIC0zMzgsMTggKzMzOCwxOCBAQAogICogc3BpX2FsbG9jX21hc3RlciAtIGFsbG9jYXRlIFNQSSBtYXN0ZXIgY29udHJvbGxlcgogICogQGRldjogdGhlIGNvbnRyb2xsZXIsIHBvc3NpYmx5IHVzaW5nIHRoZSBwbGF0Zm9ybV9idXMKICAqIEBzaXplOiBob3cgbXVjaCBkcml2ZXItcHJpdmF0ZSBkYXRhIHRvIHByZWFsbG9jYXRlOyB0aGUgcG9pbnRlciB0byB0aGlzCi0gKiAJbWVtb3J5IGlzIGluIHRoZSBjbGFzc19kYXRhIGZpZWxkIG9mIHRoZSByZXR1cm5lZCBjbGFzc19kZXZpY2UsCisgKgltZW1vcnkgaXMgaW4gdGhlIGNsYXNzX2RhdGEgZmllbGQgb2YgdGhlIHJldHVybmVkIGNsYXNzX2RldmljZSwKICAqCWFjY2Vzc2libGUgd2l0aCBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKCkuCiAgKgogICogVGhpcyBjYWxsIGlzIHVzZWQgb25seSBieSBTUEkgbWFzdGVyIGNvbnRyb2xsZXIgZHJpdmVycywgd2hpY2ggYXJlIHRoZQogICogb25seSBvbmVzIGRpcmVjdGx5IHRvdWNoaW5nIGNoaXAgcmVnaXN0ZXJzLiAgSXQncyBob3cgdGhleSBhbGxvY2F0ZQotICogYW4gc3BpX21hc3RlciBzdHJ1Y3R1cmUsIHByaW9yIHRvIGNhbGxpbmcgc3BpX2FkZF9tYXN0ZXIoKS4KKyAqIGFuIHNwaV9tYXN0ZXIgc3RydWN0dXJlLCBwcmlvciB0byBjYWxsaW5nIHNwaV9yZWdpc3Rlcl9tYXN0ZXIoKS4KICAqCiAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gY29udGV4dCB0aGF0IGNhbiBzbGVlcC4gIEl0IHJldHVybnMgdGhlIFNQSQogICogbWFzdGVyIHN0cnVjdHVyZSBvbiBzdWNjZXNzLCBlbHNlIE5VTEwuCiAgKgogICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYXNzaWduaW5nIHRoZSBidXMgbnVtYmVyIGFuZCBpbml0aWFsaXppbmcKLSAqIHRoZSBtYXN0ZXIncyBtZXRob2RzIGJlZm9yZSBjYWxsaW5nIHNwaV9hZGRfbWFzdGVyKCk7IGFuZCAoYWZ0ZXIgZXJyb3JzCisgKiB0aGUgbWFzdGVyJ3MgbWV0aG9kcyBiZWZvcmUgY2FsbGluZyBzcGlfcmVnaXN0ZXJfbWFzdGVyKCk7IGFuZCAoYWZ0ZXIgZXJyb3JzCiAgKiBhZGRpbmcgdGhlIGRldmljZSkgY2FsbGluZyBzcGlfbWFzdGVyX3B1dCgpIHRvIHByZXZlbnQgYSBtZW1vcnkgbGVhay4KICAqLwogc3RydWN0IHNwaV9tYXN0ZXIgKiBfX2luaXRfb3JfbW9kdWxlCkBAIC0zOTUsNyArMzk1LDcgQEAKIGludCBfX2luaXRfb3JfbW9kdWxlCiBzcGlfcmVnaXN0ZXJfbWFzdGVyKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCiB7Ci0Jc3RhdGljIGF0b21pY190CQlkeW5fYnVzX2lkID0gQVRPTUlDX0lOSVQoMCk7CisJc3RhdGljIGF0b21pY190CQlkeW5fYnVzX2lkID0gQVRPTUlDX0lOSVQoKDE8PDE2KSAtIDEpOwogCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSBtYXN0ZXItPmNkZXYuZGV2OwogCWludAkJCXN0YXR1cyA9IC1FTk9ERVY7CiAJaW50CQkJZHluYW1pYyA9IDA7CkBAIC00MDQsNyArNDA0LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBjb252ZW50aW9uOiAgZHluYW1pY2FsbHkgYXNzaWduZWQgYnVzIElEcyBjb3VudCBkb3duIGZyb20gdGhlIG1heCAqLwotCWlmIChtYXN0ZXItPmJ1c19udW0gPT0gMCkgeworCWlmIChtYXN0ZXItPmJ1c19udW0gPCAwKSB7CiAJCW1hc3Rlci0+YnVzX251bSA9IGF0b21pY19kZWNfcmV0dXJuKCZkeW5fYnVzX2lkKTsKIAkJZHluYW1pYyA9IDE7CiAJfQpAQCAtNTIyLDcgKzUyMiw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcGlfc3luYyk7CiAKLSNkZWZpbmUJU1BJX0JVRlNJWgkoU01QX0NBQ0hFX0JZVEVTKQorLyogcG9ydGFibGUgY29kZSBtdXN0IG5ldmVyIHBhc3MgbW9yZSB0aGFuIDMyIGJ5dGVzICovCisjZGVmaW5lCVNQSV9CVUZTSVoJbWF4KDMyLFNNUF9DQUNIRV9CWVRFUykKIAogc3RhdGljIHU4CSpidWY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9iaXRiYW5nLmMgYi9kcml2ZXJzL3NwaS9zcGlfYml0YmFuZy5jCmluZGV4IGYwMzdlNTUuLmRkMmY5NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9iaXRiYW5nLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2JpdGJhbmcuYwpAQCAtMTM4LDYgKzEzOCw0NSBAQAogCXJldHVybiB0LT5sZW4gLSBjb3VudDsKIH0KIAoraW50IHNwaV9iaXRiYW5nX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IHNwaV9iaXRiYW5nX2NzCSpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKwl1OAkJCWJpdHNfcGVyX3dvcmQ7CisJdTMyCQkJaHo7CisKKwlpZiAodCkgeworCQliaXRzX3Blcl93b3JkID0gdC0+Yml0c19wZXJfd29yZDsKKwkJaHogPSB0LT5zcGVlZF9oejsKKwl9IGVsc2UgeworCQliaXRzX3Blcl93b3JkID0gMDsKKwkJaHogPSAwOworCX0KKworCS8qIHNwaV90cmFuc2ZlciBsZXZlbCBjYWxscyB0aGF0IHdvcmsgcGVyLXdvcmQgKi8KKwlpZiAoIWJpdHNfcGVyX3dvcmQpCisJCWJpdHNfcGVyX3dvcmQgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisJaWYgKGJpdHNfcGVyX3dvcmQgPD0gOCkKKwkJY3MtPnR4cnhfYnVmcyA9IGJpdGJhbmdfdHhyeF84OworCWVsc2UgaWYgKGJpdHNfcGVyX3dvcmQgPD0gMTYpCisJCWNzLT50eHJ4X2J1ZnMgPSBiaXRiYW5nX3R4cnhfMTY7CisJZWxzZSBpZiAoYml0c19wZXJfd29yZCA8PSAzMikKKwkJY3MtPnR4cnhfYnVmcyA9IGJpdGJhbmdfdHhyeF8zMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbnNlY3MgPSAoY2xvY2sgcGVyaW9kKS8yICovCisJaWYgKCFoeikKKwkJaHogPSBzcGktPm1heF9zcGVlZF9oejsKKwlpZiAoaHopIHsKKwkJY3MtPm5zZWNzID0gKDEwMDAwMDAwMDAvMikgLyBoejsKKwkJaWYgKGNzLT5uc2VjcyA+IChNQVhfVURFTEFZX01TICogMTAwMCAqIDEwMDApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzcGlfYml0YmFuZ19zZXR1cF90cmFuc2Zlcik7CisKIC8qKgogICogc3BpX2JpdGJhbmdfc2V0dXAgLSBkZWZhdWx0IHNldHVwIGZvciBwZXItd29yZCBJL08gbG9vcHMKICAqLwpAQCAtMTQ1LDggKzE4NCwxNiBAQAogewogCXN0cnVjdCBzcGlfYml0YmFuZ19jcwkqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CiAJc3RydWN0IHNwaV9iaXRiYW5nCSpiaXRiYW5nOworCWludAkJCXJldHZhbDsKIAotCWlmICghc3BpLT5tYXhfc3BlZWRfaHopCisJYml0YmFuZyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJLyogUkVWSVNJVDogc29tZSBzeXN0ZW1zIHdpbGwgd2FudCB0byBzdXBwb3J0IGRldmljZXMgdXNpbmcgbHNiLWZpcnN0CisJICogYml0IGVuY29kaW5ncyBvbiB0aGUgd2lyZS4gIEluIHB1cmUgc29mdHdhcmUgdGhhdCB3b3VsZCBiZSB0cml2aWFsLAorCSAqIGp1c3QgYml0YmFuZ190eHJ4X2xlX2NwaGFYKCkgcm91dGluZXMgc2hpZnRpbmcgdGhlIG90aGVyIHdheSwgYW5kCisJICogc29tZSBoYXJkd2FyZSBjb250cm9sbGVycyBhbHNvIGhhdmUgdGhpcyBzdXBwb3J0LgorCSAqLworCWlmICgoc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWNzKSB7CkBAIC0xNTUsMzIgKzIwMiwyMCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXNwaS0+Y29udHJvbGxlcl9zdGF0ZSA9IGNzOwogCX0KLQliaXRiYW5nID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAKIAlpZiAoIXNwaS0+Yml0c19wZXJfd29yZCkKIAkJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKIAotCS8qIHNwaV90cmFuc2ZlciBsZXZlbCBjYWxscyB0aGF0IHdvcmsgcGVyLXdvcmQgKi8KLQlpZiAoc3BpLT5iaXRzX3Blcl93b3JkIDw9IDgpCi0JCWNzLT50eHJ4X2J1ZnMgPSBiaXRiYW5nX3R4cnhfODsKLQllbHNlIGlmIChzcGktPmJpdHNfcGVyX3dvcmQgPD0gMTYpCi0JCWNzLT50eHJ4X2J1ZnMgPSBiaXRiYW5nX3R4cnhfMTY7Ci0JZWxzZSBpZiAoc3BpLT5iaXRzX3Blcl93b3JkIDw9IDMyKQotCQljcy0+dHhyeF9idWZzID0gYml0YmFuZ190eHJ4XzMyOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBwZXItd29yZCBzaGlmdCByZWdpc3RlciBhY2Nlc3MsIGluIGhhcmR3YXJlIG9yIGJpdGJhbmdpbmcgKi8KIAljcy0+dHhyeF93b3JkID0gYml0YmFuZy0+dHhyeF93b3JkW3NwaS0+bW9kZSAmIChTUElfQ1BPTHxTUElfQ1BIQSldOwogCWlmICghY3MtPnR4cnhfd29yZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBuc2VjcyA9IChjbG9jayBwZXJpb2QpLzIgKi8KLQljcy0+bnNlY3MgPSAoMTAwMDAwMDAwMC8yKSAvIChzcGktPm1heF9zcGVlZF9oeik7Ci0JaWYgKGNzLT5uc2VjcyA+IE1BWF9VREVMQVlfTVMgKiAxMDAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR2YWwgPSBzcGlfYml0YmFuZ19zZXR1cF90cmFuc2ZlcihzcGksIE5VTEwpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOwogCi0JZGV2X2RiZygmc3BpLT5kZXYsICIlcywgbW9kZSAlZCwgJXUgYml0cy93LCAldSBuc2VjXG4iLAorCWRldl9kYmcoJnNwaS0+ZGV2LCAiJXMsIG1vZGUgJWQsICV1IGJpdHMvdywgJXUgbnNlYy9iaXRcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIHNwaS0+bW9kZSAmIChTUElfQ1BPTCB8IFNQSV9DUEhBKSwKIAkJCXNwaS0+Yml0c19wZXJfd29yZCwgMiAqIGNzLT5uc2Vjcyk7CiAKQEAgLTI0Niw2ICsyODEsOCBAQAogCQl1bnNpZ25lZAkJdG1wOwogCQl1bnNpZ25lZAkJY3NfY2hhbmdlOwogCQlpbnQJCQlzdGF0dXM7CisJCWludAkJCSgqc2V0dXBfdHJhbnNmZXIpKHN0cnVjdCBzcGlfZGV2aWNlICosCisJCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICopOwogCiAJCW0gPSBjb250YWluZXJfb2YoYml0YmFuZy0+cXVldWUubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLAogCQkJCXF1ZXVlKTsKQEAgLTI2Miw2ICsyOTksNyBAQAogCQl0bXAgPSAwOwogCQljc19jaGFuZ2UgPSAxOwogCQlzdGF0dXMgPSAwOworCQlzZXR1cF90cmFuc2ZlciA9IE5VTEw7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSAodCwgJm0tPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgewogCQkJaWYgKGJpdGJhbmctPnNodXRkb3duKSB7CkBAIC0yNjksNiArMzA3LDIwIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKKwkJCS8qIG92ZXJyaWRlIG9yIHJlc3RvcmUgc3BlZWQgYW5kIHdvcmRzaXplICovCisJCQlpZiAodC0+c3BlZWRfaHogfHwgdC0+Yml0c19wZXJfd29yZCkgeworCQkJCXNldHVwX3RyYW5zZmVyID0gYml0YmFuZy0+c2V0dXBfdHJhbnNmZXI7CisJCQkJaWYgKCFzZXR1cF90cmFuc2ZlcikgeworCQkJCQlzdGF0dXMgPSAtRU5PUFJPVE9PUFQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChzZXR1cF90cmFuc2ZlcikgeworCQkJCXN0YXR1cyA9IHNldHVwX3RyYW5zZmVyKHNwaSwgdCk7CisJCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJCWJyZWFrOworCQkJfQorCiAJCQkvKiBzZXQgdXAgZGVmYXVsdCBjbG9jayBwb2xhcml0eSwgYW5kIGFjdGl2YXRlIGNoaXA7CiAJCQkgKiB0aGlzIGltcGxpY2l0bHkgdXBkYXRlcyBjbG9jayBhbmQgc3BpIG1vZGVzIGFzCiAJCQkgKiBwcmV2aW91c2x5IHJlY29yZGVkIGZvciB0aGlzIGRldmljZSB2aWEgc2V0dXAoKS4KQEAgLTMyNSw2ICszNzcsMTAgQEAKIAkJbS0+c3RhdHVzID0gc3RhdHVzOwogCQltLT5jb21wbGV0ZShtLT5jb250ZXh0KTsKIAorCQkvKiByZXN0b3JlIHNwZWVkIGFuZCB3b3Jkc2l6ZSAqLworCQlpZiAoc2V0dXBfdHJhbnNmZXIpCisJCQlzZXR1cF90cmFuc2ZlcihzcGksIE5VTEwpOworCiAJCS8qIG5vcm1hbGx5IGRlYWN0aXZhdGUgY2hpcHNlbGVjdCAuLi4gdW5sZXNzIG5vIGVycm9yIGFuZAogCQkgKiBjc19jaGFuZ2UgaGFzIGhpbnRlZCB0aGF0IHRoZSBuZXh0IG1lc3NhZ2Ugd2lsbCBwcm9iYWJseQogCQkgKiBiZSBmb3IgdGhpcyBjaGlwIHRvby4KQEAgLTM0OCw2ICs0MDQsNyBAQAogewogCXN0cnVjdCBzcGlfYml0YmFuZwkqYml0YmFuZzsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlzdGF0dXMgPSAwOwogCiAJbS0+YWN0dWFsX2xlbmd0aCA9IDA7CiAJbS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOwpAQCAtMzU3LDExICs0MTQsMTUgQEAKIAkJcmV0dXJuIC1FU0hVVERPV047CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYml0YmFuZy0+bG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJm0tPnF1ZXVlLCAmYml0YmFuZy0+cXVldWUpOwotCXF1ZXVlX3dvcmsoYml0YmFuZy0+d29ya3F1ZXVlLCAmYml0YmFuZy0+d29yayk7CisJaWYgKCFzcGktPm1heF9zcGVlZF9oeikKKwkJc3RhdHVzID0gLUVORVRET1dOOworCWVsc2UgeworCQlsaXN0X2FkZF90YWlsKCZtLT5xdWV1ZSwgJmJpdGJhbmctPnF1ZXVlKTsKKwkJcXVldWVfd29yayhiaXRiYW5nLT53b3JrcXVldWUsICZiaXRiYW5nLT53b3JrKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0YmFuZy0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHN0YXR1czsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNwaV9iaXRiYW5nX3RyYW5zZmVyKTsKIApAQCAtNDA2LDYgKzQ2Nyw5IEBACiAJCWJpdGJhbmctPnVzZV9kbWEgPSAwOwogCQliaXRiYW5nLT50eHJ4X2J1ZnMgPSBzcGlfYml0YmFuZ19idWZzOwogCQlpZiAoIWJpdGJhbmctPm1hc3Rlci0+c2V0dXApIHsKKwkJCWlmICghYml0YmFuZy0+c2V0dXBfdHJhbnNmZXIpCisJCQkJYml0YmFuZy0+c2V0dXBfdHJhbnNmZXIgPQorCQkJCQkgc3BpX2JpdGJhbmdfc2V0dXBfdHJhbnNmZXI7CiAJCQliaXRiYW5nLT5tYXN0ZXItPnNldHVwID0gc3BpX2JpdGJhbmdfc2V0dXA7CiAJCQliaXRiYW5nLT5tYXN0ZXItPmNsZWFudXAgPSBzcGlfYml0YmFuZ19jbGVhbnVwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYnV0dGVyZmx5LmMgYi9kcml2ZXJzL3NwaS9zcGlfYnV0dGVyZmx5LmMKaW5kZXggZmY5ZTVmYS4uYTAwNmExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2J1dHRlcmZseS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9idXR0ZXJmbHkuYwpAQCAtMzIxLDYgKzMyMSw3IEBACiAJICogKGZpcm13YXJlIHJlc2V0cyBhdDQ1LCBhY3RzIGFzIHNwaSBzbGF2ZSkgb3IgbmVpdGhlciAod2UgaWdub3JlCiAJICogYm90aCwgQVZSIHVzZXMgQVQ0NSkuICBIZXJlIHdlIGV4cGVjdCBmaXJtd2FyZSBmb3IgdGhlIGZpcnN0IG9wdGlvbi4KIAkgKi8KKwogCXBwLT5pbmZvWzBdLm1heF9zcGVlZF9oeiA9IDE1ICogMTAwMCAqIDEwMDA7CiAJc3RyY3B5KHBwLT5pbmZvWzBdLm1vZGFsaWFzLCAibXRkX2RhdGFmbGFzaCIpOwogCXBwLT5pbmZvWzBdLnBsYXRmb3JtX2RhdGEgPSAmZmxhc2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDkyYTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwpAQCAtMCwwICsxLDQ4MyBAQAorLyoKKyAqIE1QQzgzeHggU1BJIGNvbnRyb2xsZXIgZHJpdmVyLgorICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUG9seWNvbSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogU1BJIENvbnRyb2xsZXIgcmVnaXN0ZXJzICovCitzdHJ1Y3QgbXBjODN4eF9zcGlfcmVnIHsKKwl1OCByZXMxWzB4MjBdOworCV9fYmUzMiBtb2RlOworCV9fYmUzMiBldmVudDsKKwlfX2JlMzIgbWFzazsKKwlfX2JlMzIgY29tbWFuZDsKKwlfX2JlMzIgdHJhbnNtaXQ7CisJX19iZTMyIHJlY2VpdmU7Cit9OworCisvKiBTUEkgQ29udHJvbGxlciBtb2RlIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lCVNQTU9ERV9DSV9JTkFDVElWRUhJR0gJKDEgPDwgMjkpCisjZGVmaW5lCVNQTU9ERV9DUF9CRUdJTl9FREdFQ0xLCSgxIDw8IDI4KQorI2RlZmluZQlTUE1PREVfRElWMTYJCSgxIDw8IDI3KQorI2RlZmluZQlTUE1PREVfUkVWCQkoMSA8PCAyNikKKyNkZWZpbmUJU1BNT0RFX01TCQkoMSA8PCAyNSkKKyNkZWZpbmUJU1BNT0RFX0VOQUJMRQkJKDEgPDwgMjQpCisjZGVmaW5lCVNQTU9ERV9MRU4oeCkJCSgoeCkgPDwgMjApCisjZGVmaW5lCVNQTU9ERV9QTSh4KQkJKCh4KSA8PCAxNikKKworLyoKKyAqIERlZmF1bHQgZm9yIFNQSSBNb2RlOgorICogCVNQSSBNT0RFIDAgKGluYWN0aXZlIGxvdywgcGhhc2UgbWlkZGxlLCBNU0IsIDgtYml0IGxlbmd0aCwgc2xvdyBjbGsKKyAqLworI2RlZmluZQlTUE1PREVfSU5JVF9WQUwgKFNQTU9ERV9DSV9JTkFDVElWRUhJR0ggfCBTUE1PREVfRElWMTYgfCBTUE1PREVfUkVWIHwgXAorCQkJIFNQTU9ERV9NUyB8IFNQTU9ERV9MRU4oNykgfCBTUE1PREVfUE0oMHhmKSkKKworLyogU1BJRSByZWdpc3RlciB2YWx1ZXMgKi8KKyNkZWZpbmUJU1BJRV9ORQkJMHgwMDAwMDIwMAkvKiBOb3QgZW1wdHkgKi8KKyNkZWZpbmUJU1BJRV9ORgkJMHgwMDAwMDEwMAkvKiBOb3QgZnVsbCAqLworCisvKiBTUElNIHJlZ2lzdGVyIHZhbHVlcyAqLworI2RlZmluZQlTUElNX05FCQkweDAwMDAwMjAwCS8qIE5vdCBlbXB0eSAqLworI2RlZmluZQlTUElNX05GCQkweDAwMDAwMTAwCS8qIE5vdCBmdWxsICovCisKKy8qIFNQSSBDb250cm9sbGVyIGRyaXZlcidzIHByaXZhdGUgZGF0YS4gKi8KK3N0cnVjdCBtcGM4M3h4X3NwaSB7CisJLyogYml0YmFuZyBoYXMgdG8gYmUgZmlyc3QgKi8KKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcgYml0YmFuZzsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCisJc3RydWN0IG1wYzgzeHhfc3BpX3JlZyBfX2lvbWVtICpiYXNlOworCisJLyogcnggJiB0eCBidWZzIGZyb20gdGhlIHNwaV90cmFuc2ZlciAqLworCWNvbnN0IHZvaWQgKnR4OworCXZvaWQgKnJ4OworCisJLyogZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBkaWZmZXJlbnQgc2l6ZWQgYnVmZmVycyAqLworCXZvaWQgKCpnZXRfcngpICh1MzIgcnhfZGF0YSwgc3RydWN0IG1wYzgzeHhfc3BpICopOworCXUzMigqZ2V0X3R4KSAoc3RydWN0IG1wYzgzeHhfc3BpICopOworCisJdW5zaWduZWQgaW50IGNvdW50OworCXUzMiBpcnE7CisKKwl1bnNpZ25lZCBuc2VjczsJCS8qIChjbG9jayBjeWNsZSB0aW1lKS8yICovCisKKwl1MzIgc3lzY2xrOworCXZvaWQgKCphY3RpdmF0ZV9jcykgKHU4IGNzLCB1OCBwb2xhcml0eSk7CisJdm9pZCAoKmRlYWN0aXZhdGVfY3MpICh1OCBjcywgdTggcG9sYXJpdHkpOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG1wYzgzeHhfc3BpX3dyaXRlX3JlZyhfX2JlMzIgX19pb21lbSAqIHJlZywgdTMyIHZhbCkKK3sKKwlvdXRfYmUzMihyZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG1wYzgzeHhfc3BpX3JlYWRfcmVnKF9fYmUzMiBfX2lvbWVtICogcmVnKQoreworCXJldHVybiBpbl9iZTMyKHJlZyk7Cit9CisKKyNkZWZpbmUgTVBDODNYWF9TUElfUlhfQlVGKHR5cGUpIAkJCQkJICBcCit2b2lkIG1wYzgzeHhfc3BpX3J4X2J1Zl8jI3R5cGUodTMyIGRhdGEsIHN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGkpIFwKK3sJCQkJCQkJCQkgIFwKKwl0eXBlICogcnggPSBtcGM4M3h4X3NwaS0+cng7CQkJCQkgIFwKKwkqcngrKyA9ICh0eXBlKWRhdGE7CQkJCQkJICBcCisJbXBjODN4eF9zcGktPnJ4ID0gcng7CQkJCQkJICBcCit9CisKKyNkZWZpbmUgTVBDODNYWF9TUElfVFhfQlVGKHR5cGUpCQkJCVwKK3UzMiBtcGM4M3h4X3NwaV90eF9idWZfIyN0eXBlKHN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGkpCVwKK3sJCQkJCQkJCVwKKwl1MzIgZGF0YTsJCQkJCQlcCisJY29uc3QgdHlwZSAqIHR4ID0gbXBjODN4eF9zcGktPnR4OwkJCVwKKwlkYXRhID0gKnR4Kys7CQkJCQkJXAorCW1wYzgzeHhfc3BpLT50eCA9IHR4OwkJCQkJXAorCXJldHVybiBkYXRhOwkJCQkJCVwKK30KKworTVBDODNYWF9TUElfUlhfQlVGKHU4KQorTVBDODNYWF9TUElfUlhfQlVGKHUxNikKK01QQzgzWFhfU1BJX1JYX0JVRih1MzIpCitNUEM4M1hYX1NQSV9UWF9CVUYodTgpCitNUEM4M1hYX1NQSV9UWF9CVUYodTE2KQorTVBDODNYWF9TUElfVFhfQlVGKHUzMikKKworc3RhdGljIHZvaWQgbXBjODN4eF9zcGlfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaTsKKwl1OCBwb2wgPSBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDEgOiAwOworCisJbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWlmICh2YWx1ZSA9PSBCSVRCQU5HX0NTX0lOQUNUSVZFKSB7CisJCWlmIChtcGM4M3h4X3NwaS0+ZGVhY3RpdmF0ZV9jcykKKwkJCW1wYzgzeHhfc3BpLT5kZWFjdGl2YXRlX2NzKHNwaS0+Y2hpcF9zZWxlY3QsIHBvbCk7CisJfQorCisJaWYgKHZhbHVlID09IEJJVEJBTkdfQ1NfQUNUSVZFKSB7CisJCXUzMiByZWd2YWwgPSBtcGM4M3h4X3NwaV9yZWFkX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPm1vZGUpOworCQl1MzIgbGVuID0gc3BpLT5iaXRzX3Blcl93b3JkOworCQlpZiAobGVuID09IDMyKQorCQkJbGVuID0gMDsKKwkJZWxzZQorCQkJbGVuID0gbGVuIC0gMTsKKworCQkvKiBtYXNrIG91dCBiaXRzIHdlIGFyZSBnb2luZyB0byBzZXQgKi8KKwkJcmVndmFsICY9IH4weDM4ZmYwMDAwOworCisJCWlmIChzcGktPm1vZGUgJiBTUElfQ1BIQSkKKwkJCXJlZ3ZhbCB8PSBTUE1PREVfQ1BfQkVHSU5fRURHRUNMSzsKKwkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQorCQkJcmVndmFsIHw9IFNQTU9ERV9DSV9JTkFDVElWRUhJR0g7CisKKwkJcmVndmFsIHw9IFNQTU9ERV9MRU4obGVuKTsKKworCQlpZiAoKG1wYzgzeHhfc3BpLT5zeXNjbGsgLyBzcGktPm1heF9zcGVlZF9oeikgPj0gNjQpIHsKKwkJCXU4IHBtID0gbXBjODN4eF9zcGktPnN5c2NsayAvIChzcGktPm1heF9zcGVlZF9oeiAqIDY0KTsKKwkJCXJlZ3ZhbCB8PSBTUE1PREVfUE0ocG0pIHwgU1BNT0RFX0RJVjE2OworCQl9IGVsc2UgeworCQkJdTggcG0gPSBtcGM4M3h4X3NwaS0+c3lzY2xrIC8gKHNwaS0+bWF4X3NwZWVkX2h6ICogNCk7CisJCQlyZWd2YWwgfD0gU1BNT0RFX1BNKHBtKTsKKwkJfQorCisJCW1wYzgzeHhfc3BpX3dyaXRlX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPm1vZGUsIHJlZ3ZhbCk7CisJCWlmIChtcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3MpCisJCQltcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3Moc3BpLT5jaGlwX3NlbGVjdCwgcG9sKTsKKwl9Cit9CisKK3N0YXRpYworaW50IG1wYzgzeHhfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaTsKKwl1MzIgcmVndmFsOworCXU4IGJpdHNfcGVyX3dvcmQ7CisJdTMyIGh6OworCisJbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWlmICh0KSB7CisJCWJpdHNfcGVyX3dvcmQgPSB0LT5iaXRzX3Blcl93b3JkOworCQloeiA9IHQtPnNwZWVkX2h6OworCX0gZWxzZSB7CisJCWJpdHNfcGVyX3dvcmQgPSAwOworCQloeiA9IDA7CisJfQorCisJLyogc3BpX3RyYW5zZmVyIGxldmVsIGNhbGxzIHRoYXQgd29yayBwZXItd29yZCAqLworCWlmICghYml0c19wZXJfd29yZCkKKwkJYml0c19wZXJfd29yZCA9IHNwaS0+Yml0c19wZXJfd29yZDsKKworCS8qIE1ha2Ugc3VyZSBpdHMgYSBiaXQgd2lkdGggd2Ugc3VwcG9ydCBbNC4uMTYsIDMyXSAqLworCWlmICgoYml0c19wZXJfd29yZCA8IDQpCisJICAgIHx8ICgoYml0c19wZXJfd29yZCA+IDE2KSAmJiAoYml0c19wZXJfd29yZCAhPSAzMikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChiaXRzX3Blcl93b3JkIDw9IDgpIHsKKwkJbXBjODN4eF9zcGktPmdldF9yeCA9IG1wYzgzeHhfc3BpX3J4X2J1Zl91ODsKKwkJbXBjODN4eF9zcGktPmdldF90eCA9IG1wYzgzeHhfc3BpX3R4X2J1Zl91ODsKKwl9IGVsc2UgaWYgKGJpdHNfcGVyX3dvcmQgPD0gMTYpIHsKKwkJbXBjODN4eF9zcGktPmdldF9yeCA9IG1wYzgzeHhfc3BpX3J4X2J1Zl91MTY7CisJCW1wYzgzeHhfc3BpLT5nZXRfdHggPSBtcGM4M3h4X3NwaV90eF9idWZfdTE2OworCX0gZWxzZSBpZiAoYml0c19wZXJfd29yZCA8PSAzMikgeworCQltcGM4M3h4X3NwaS0+Z2V0X3J4ID0gbXBjODN4eF9zcGlfcnhfYnVmX3UzMjsKKwkJbXBjODN4eF9zcGktPmdldF90eCA9IG1wYzgzeHhfc3BpX3R4X2J1Zl91MzI7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbnNlY3MgPSAoY2xvY2sgcGVyaW9kKS8yICovCisJaWYgKCFoeikKKwkJaHogPSBzcGktPm1heF9zcGVlZF9oejsKKwltcGM4M3h4X3NwaS0+bnNlY3MgPSAoMTAwMDAwMDAwMCAvIDIpIC8gaHo7CisJaWYgKG1wYzgzeHhfc3BpLT5uc2VjcyA+IE1BWF9VREVMQVlfTVMgKiAxMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChiaXRzX3Blcl93b3JkID09IDMyKQorCQliaXRzX3Blcl93b3JkID0gMDsKKwllbHNlCisJCWJpdHNfcGVyX3dvcmQgPSBiaXRzX3Blcl93b3JkIC0gMTsKKworCXJlZ3ZhbCA9IG1wYzgzeHhfc3BpX3JlYWRfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZSk7CisKKwkvKiBNYXNrIG91dCBiaXRzX3Blcl93b3JkZ3RoICovCisJcmVndmFsICY9IDB4ZmYwZmZmZmY7CisJcmVndmFsIHw9IFNQTU9ERV9MRU4oYml0c19wZXJfd29yZCk7CisKKwltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5tb2RlLCByZWd2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjODN4eF9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcgKmJpdGJhbmc7CisJc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaTsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFzcGktPm1heF9zcGVlZF9oeikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliaXRiYW5nID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQorCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCisJcmV0dmFsID0gbXBjODN4eF9zcGlfc2V0dXBfdHJhbnNmZXIoc3BpLCBOVUxMKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRldl9kYmcoJnNwaS0+ZGV2LCAiJXMsIG1vZGUgJWQsICV1IGJpdHMvdywgJXUgbnNlY1xuIiwKKwkJX19GVU5DVElPTl9fLCBzcGktPm1vZGUgJiAoU1BJX0NQT0wgfCBTUElfQ1BIQSksCisJCXNwaS0+Yml0c19wZXJfd29yZCwgMiAqIG1wYzgzeHhfc3BpLT5uc2Vjcyk7CisKKwkvKiBOT1RFIHdlIF9uZWVkXyB0byBjYWxsIGNoaXBzZWxlY3QoKSBlYXJseSwgaWRlYWxseSB3aXRoIGFkYXB0ZXIKKwkgKiBzZXR1cCwgdW5sZXNzIHRoZSBoYXJkd2FyZSBkZWZhdWx0cyBjb29wZXJhdGUgdG8gYXZvaWQgY29uZnVzaW9uCisJICogYmV0d2VlbiBub3JtYWwgKGFjdGl2ZSBsb3cpIGFuZCBpbnZlcnRlZCBjaGlwc2VsZWN0cy4KKwkgKi8KKworCS8qIGRlc2VsZWN0IGNoaXAgKGxvdyBvciBoaWdoKSAqLworCXNwaW5fbG9jaygmYml0YmFuZy0+bG9jayk7CisJaWYgKCFiaXRiYW5nLT5idXN5KSB7CisJCWJpdGJhbmctPmNoaXBzZWxlY3Qoc3BpLCBCSVRCQU5HX0NTX0lOQUNUSVZFKTsKKwkJbmRlbGF5KG1wYzgzeHhfc3BpLT5uc2Vjcyk7CisJfQorCXNwaW5fdW5sb2NrKCZiaXRiYW5nLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wYzgzeHhfc3BpX2J1ZnMoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpOworCXUzMiB3b3JkOworCisJbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCW1wYzgzeHhfc3BpLT50eCA9IHQtPnR4X2J1ZjsKKwltcGM4M3h4X3NwaS0+cnggPSB0LT5yeF9idWY7CisJbXBjODN4eF9zcGktPmNvdW50ID0gdC0+bGVuOworCUlOSVRfQ09NUExFVElPTihtcGM4M3h4X3NwaS0+ZG9uZSk7CisKKwkvKiBlbmFibGUgcnggaW50cyAqLworCW1wYzgzeHhfc3BpX3dyaXRlX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPm1hc2ssIFNQSU1fTkUpOworCisJLyogdHJhbnNtaXQgd29yZCAqLworCXdvcmQgPSBtcGM4M3h4X3NwaS0+Z2V0X3R4KG1wYzgzeHhfc3BpKTsKKwltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT50cmFuc21pdCwgd29yZCk7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtcGM4M3h4X3NwaS0+ZG9uZSk7CisKKwkvKiBkaXNhYmxlIHJ4IGludHMgKi8KKwltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5tYXNrLCAwKTsKKworCXJldHVybiB0LT5sZW4gLSBtcGM4M3h4X3NwaS0+Y291bnQ7Cit9CisKK2lycXJldHVybl90IG1wYzgzeHhfc3BpX2lycShzMzIgaXJxLCB2b2lkICpjb250ZXh0X2RhdGEsCisJCQkgICAgc3RydWN0IHB0X3JlZ3MgKiBwdHJlZ3MpCit7CisJc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaSA9IGNvbnRleHRfZGF0YTsKKwl1MzIgZXZlbnQ7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CisKKwkvKiBHZXQgaW50ZXJydXB0IGV2ZW50cyh0eC9yeCkgKi8KKwlldmVudCA9IG1wYzgzeHhfc3BpX3JlYWRfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+ZXZlbnQpOworCisJLyogV2UgbmVlZCBoYW5kbGUgUlggZmlyc3QgKi8KKwlpZiAoZXZlbnQgJiBTUElFX05FKSB7CisJCXUzMiByeF9kYXRhID0gbXBjODN4eF9zcGlfcmVhZF9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5yZWNlaXZlKTsKKworCQlpZiAobXBjODN4eF9zcGktPnJ4KQorCQkJbXBjODN4eF9zcGktPmdldF9yeChyeF9kYXRhLCBtcGM4M3h4X3NwaSk7CisKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKChldmVudCAmIFNQSUVfTkYpID09IDApCisJCS8qIHNwaW4gdW50aWwgVFggaXMgZG9uZSAqLworCQl3aGlsZSAoKChldmVudCA9CisJCQkgbXBjODN4eF9zcGlfcmVhZF9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5ldmVudCkpICYKKwkJCQkJCVNQSUVfTkYpID09IDApCisJCQkgY3B1X3JlbGF4KCk7CisKKwltcGM4M3h4X3NwaS0+Y291bnQgLT0gMTsKKwlpZiAobXBjODN4eF9zcGktPmNvdW50KSB7CisJCWlmIChtcGM4M3h4X3NwaS0+dHgpIHsKKwkJCXUzMiB3b3JkID0gbXBjODN4eF9zcGktPmdldF90eChtcGM4M3h4X3NwaSk7CisJCQltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT50cmFuc21pdCwKKwkJCQkJICAgICAgd29yZCk7CisJCX0KKwl9IGVsc2UgeworCQljb21wbGV0ZSgmbXBjODN4eF9zcGktPmRvbmUpOworCX0KKworCS8qIENsZWFyIHRoZSBldmVudHMgKi8KKwltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5ldmVudCwgZXZlbnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2luaXQgbXBjODN4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaTsKKwlzdHJ1Y3QgZnNsX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJdTMyIHJlZ3ZhbDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEdldCByZXNvdXJjZXMobWVtb3J5LCBJUlEpIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlICovCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXBjODN4eF9zcGkpKTsKKworCWlmIChtYXN0ZXIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7CisJcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX21hc3RlcjsKKwl9CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX21hc3RlcjsKKwl9CisKKwltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwltcGM4M3h4X3NwaS0+Yml0YmFuZy5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCW1wYzgzeHhfc3BpLT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBtcGM4M3h4X3NwaV9jaGlwc2VsZWN0OworCW1wYzgzeHhfc3BpLT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gbXBjODN4eF9zcGlfc2V0dXBfdHJhbnNmZXI7CisJbXBjODN4eF9zcGktPmJpdGJhbmcudHhyeF9idWZzID0gbXBjODN4eF9zcGlfYnVmczsKKwltcGM4M3h4X3NwaS0+c3lzY2xrID0gcGRhdGEtPnN5c2NsazsKKwltcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3MgPSBwZGF0YS0+YWN0aXZhdGVfY3M7CisJbXBjODN4eF9zcGktPmRlYWN0aXZhdGVfY3MgPSBwZGF0YS0+ZGVhY3RpdmF0ZV9jczsKKwltcGM4M3h4X3NwaS0+Z2V0X3J4ID0gbXBjODN4eF9zcGlfcnhfYnVmX3U4OworCW1wYzgzeHhfc3BpLT5nZXRfdHggPSBtcGM4M3h4X3NwaV90eF9idWZfdTg7CisKKwltcGM4M3h4X3NwaS0+Yml0YmFuZy5tYXN0ZXItPnNldHVwID0gbXBjODN4eF9zcGlfc2V0dXA7CisJaW5pdF9jb21wbGV0aW9uKCZtcGM4M3h4X3NwaS0+ZG9uZSk7CisKKwltcGM4M3h4X3NwaS0+YmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJaWYgKG1wYzgzeHhfc3BpLT5iYXNlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwdXRfbWFzdGVyOworCX0KKworCW1wYzgzeHhfc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CisKKwlpZiAobXBjODN4eF9zcGktPmlycSA8IDApIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIHVubWFwX2lvOworCX0KKworCS8qIFJlZ2lzdGVyIGZvciBTUEkgSW50ZXJydXB0ICovCisJcmV0ID0gcmVxdWVzdF9pcnEobXBjODN4eF9zcGktPmlycSwgbXBjODN4eF9zcGlfaXJxLAorCQkJICAwLCAibXBjODN4eF9zcGkiLCBtcGM4M3h4X3NwaSk7CisKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gdW5tYXBfaW87CisKKwltYXN0ZXItPmJ1c19udW0gPSBwZGF0YS0+YnVzX251bTsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gcGRhdGEtPm1heF9jaGlwc2VsZWN0OworCisJLyogU1BJIGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb25zICovCisJbXBjODN4eF9zcGlfd3JpdGVfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZSwgMCk7CisJbXBjODN4eF9zcGlfd3JpdGVfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bWFzaywgMCk7CisJbXBjODN4eF9zcGlfd3JpdGVfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+Y29tbWFuZCwgMCk7CisJbXBjODN4eF9zcGlfd3JpdGVfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+ZXZlbnQsIDB4ZmZmZmZmZmYpOworCisJLyogRW5hYmxlIFNQSSBpbnRlcmZhY2UgKi8KKwlyZWd2YWwgPSBwZGF0YS0+aW5pdGlhbF9zcG1vZGUgfCBTUE1PREVfSU5JVF9WQUwgfCBTUE1PREVfRU5BQkxFOworCW1wYzgzeHhfc3BpX3dyaXRlX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPm1vZGUsIHJlZ3ZhbCk7CisKKwlyZXQgPSBzcGlfYml0YmFuZ19zdGFydCgmbXBjODN4eF9zcGktPmJpdGJhbmcpOworCisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZyZWVfaXJxOworCisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IE1QQzgzeHggU1BJIENvbnRyb2xsZXIgZHJpdmVyIGF0IDB4JXAgKGlycSA9ICVkKVxuIiwKKwkgICAgICAgZGV2LT5kZXYuYnVzX2lkLCBtcGM4M3h4X3NwaS0+YmFzZSwgbXBjODN4eF9zcGktPmlycSk7CisKKwlyZXR1cm4gcmV0OworCitmcmVlX2lycToKKwlmcmVlX2lycShtcGM4M3h4X3NwaS0+aXJxLCBtcGM4M3h4X3NwaSk7Cit1bm1hcF9pbzoKKwlpb3VubWFwKG1wYzgzeHhfc3BpLT5iYXNlKTsKK3B1dF9tYXN0ZXI6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKK2ZyZWVfbWFzdGVyOgorCWtmcmVlKG1hc3Rlcik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXBjODN4eF9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisKKwltYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCW1wYzgzeHhfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJc3BpX2JpdGJhbmdfc3RvcCgmbXBjODN4eF9zcGktPmJpdGJhbmcpOworCWZyZWVfaXJxKG1wYzgzeHhfc3BpLT5pcnEsIG1wYzgzeHhfc3BpKTsKKwlpb3VubWFwKG1wYzgzeHhfc3BpLT5iYXNlKTsKKwlzcGlfbWFzdGVyX3B1dChtcGM4M3h4X3NwaS0+Yml0YmFuZy5tYXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wYzgzeHhfc3BpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtcGM4M3h4X3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobXBjODN4eF9zcGlfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJtcGM4M3h4X3NwaSIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1wYzgzeHhfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtcGM4M3h4X3NwaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXBjODN4eF9zcGlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcGM4M3h4X3NwaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtcGM4M3h4X3NwaV9pbml0KTsKK21vZHVsZV9leGl0KG1wYzgzeHhfc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJLdW1hciBHYWxhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNpbXBsZSBNUEM4M3h4IFNQSSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYzE0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCkBAIC0wLDAgKzEsNDUzIEBACisvKiBsaW51eC9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEJlbiBEb29rcworICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworCisvLyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc3BpLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3BpLmg+CisKK3N0cnVjdCBzM2MyNHh4X3NwaSB7CisJLyogYml0YmFuZyBoYXMgdG8gYmUgZmlyc3QgKi8KKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcJIGJpdGJhbmc7CisJc3RydWN0IGNvbXBsZXRpb24JIGRvbmU7CisKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCWludAkJCSBpcnE7CisJaW50CQkJIGxlbjsKKwlpbnQJCQkgY291bnQ7CisKKwkvKiBkYXRhIGJ1ZmZlcnMgKi8KKwljb25zdCB1bnNpZ25lZCBjaGFyCSp0eDsKKwl1bnNpZ25lZCBjaGFyCQkqcng7CisKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCXN0cnVjdCByZXNvdXJjZQkJKmlvYXJlYTsKKwlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyOworCXN0cnVjdCBzcGlfZGV2aWNlCSpjdXJkZXY7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgczNjMjQxMF9zcGlfaW5mbyAqcGRhdGE7Cit9OworCisjZGVmaW5lIFNQQ09OX0RFRkFVTFQgKFMzQzI0MTBfU1BDT05fTVNUUiB8IFMzQzI0MTBfU1BDT05fU01PRF9JTlQpCisjZGVmaW5lIFNQUElOX0RFRkFVTFQgKFMzQzI0MTBfU1BQSU5fS0VFUCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF9zcGkgKnRvX2h3KHN0cnVjdCBzcGlfZGV2aWNlICpzZGV2KQoreworCXJldHVybiBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNkZXYtPm1hc3Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0eHhfc3BpX2NoaXBzZWwoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IHZhbHVlKQoreworCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSB0b19odyhzcGkpOworCXVuc2lnbmVkIGludCBjc3BvbCA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMSA6IDA7CisJdW5zaWduZWQgaW50IHNwY29uOworCisJc3dpdGNoICh2YWx1ZSkgeworCWNhc2UgQklUQkFOR19DU19JTkFDVElWRToKKwkJaWYgKGh3LT5wZGF0YS0+c2V0X2NzKQorCQkJaHctPnBkYXRhLT5zZXRfY3MoaHctPnBkYXRhLCB2YWx1ZSwgY3Nwb2wpOworCQllbHNlCisJCQlzM2MyNDEwX2dwaW9fc2V0cGluKGh3LT5wZGF0YS0+cGluX2NzLCBjc3BvbCBeIDEpOworCQlicmVhazsKKworCWNhc2UgQklUQkFOR19DU19BQ1RJVkU6CisJCXNwY29uID0gcmVhZGIoaHctPnJlZ3MgKyBTM0MyNDEwX1NQQ09OKTsKKworCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQSEEpCisJCQlzcGNvbiB8PSBTM0MyNDEwX1NQQ09OX0NQSEFfRk1UQjsKKwkJZWxzZQorCQkJc3Bjb24gJj0gflMzQzI0MTBfU1BDT05fQ1BIQV9GTVRCOworCisJCWlmIChzcGktPm1vZGUgJiBTUElfQ1BPTCkKKwkJCXNwY29uIHw9IFMzQzI0MTBfU1BDT05fQ1BPTF9ISUdIOworCQllbHNlCisJCQlzcGNvbiAmPSB+UzNDMjQxMF9TUENPTl9DUE9MX0hJR0g7CisKKwkJc3Bjb24gfD0gUzNDMjQxMF9TUENPTl9FTlNDSzsKKworCQkvKiB3cml0ZSBuZXcgY29uZmlncmF0aW9uICovCisKKwkJd3JpdGViKHNwY29uLCBody0+cmVncyArIFMzQzI0MTBfU1BDT04pOworCisJCWlmIChody0+cGRhdGEtPnNldF9jcykKKwkJCWh3LT5wZGF0YS0+c2V0X2NzKGh3LT5wZGF0YSwgdmFsdWUsIGNzcG9sKTsKKwkJZWxzZQorCQkJczNjMjQxMF9ncGlvX3NldHBpbihody0+cGRhdGEtPnBpbl9jcywgY3Nwb2wpOworCisJCWJyZWFrOworCisJfQorfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSB0b19odyhzcGkpOworCXVuc2lnbmVkIGludCBicHc7CisJdW5zaWduZWQgaW50IGh6OworCXVuc2lnbmVkIGludCBkaXY7CisKKwlicHcgPSB0ID8gdC0+Yml0c19wZXJfd29yZCA6IHNwaS0+Yml0c19wZXJfd29yZDsKKwloeiAgPSB0ID8gdC0+c3BlZWRfaHogOiBzcGktPm1heF9zcGVlZF9oejsKKworCWlmIChicHcgIT0gOCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgYml0cy1wZXItd29yZCAoJWQpXG4iLCBicHcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkaXYgPSBjbGtfZ2V0X3JhdGUoaHctPmNsaykgLyBoejsKKworCS8qIGlzIGNsayA9IHBjbGsgLyAoMiAqIChwcmUrMSkpLCBvciBpcyBpdAorCSAqICAgIGNsayA9IChwY2xrICogMikgLyAoIHByZSArIDEpICovCisKKwlkaXYgPSAoZGl2IC8gMikgLSAxOworCisJaWYgKGRpdiA8IDApCisJCWRpdiA9IDE7CisKKwlpZiAoZGl2ID4gMjU1KQorCQlkaXYgPSAyNTU7CisKKwlkZXZfZGJnKCZzcGktPmRldiwgInNldHRpbmcgcHJlLXNjYWxlciB0byAlZCAoaHogJWQpXG4iLCBkaXYsIGh6KTsKKwl3cml0ZWIoZGl2LCBody0+cmVncyArIFMzQzI0MTBfU1BQUkUpOworCisJc3Bpbl9sb2NrKCZody0+Yml0YmFuZy5sb2NrKTsKKwlpZiAoIWh3LT5iaXRiYW5nLmJ1c3kpIHsKKwkJaHctPmJpdGJhbmcuY2hpcHNlbGVjdChzcGksIEJJVEJBTkdfQ1NfSU5BQ1RJVkUpOworCQkvKiBuZWVkIHRvIG5kZWxheSBmb3IgMC41IGNsb2NrdGljayA/ICovCisJfQorCXNwaW5fdW5sb2NrKCZody0+Yml0YmFuZy5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50IHJldDsKKworCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQorCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCisJaWYgKChzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHMzYzI0eHhfc3BpX3NldHVweGZlcihzcGksIE5VTEwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAic2V0dXB4ZmVyIHJldHVybmVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9kYmcoJnNwaS0+ZGV2LCAiJXM6IG1vZGUgJWQsICV1IGJwdywgJWQgaHpcbiIsCisJCV9fRlVOQ1RJT05fXywgc3BpLT5tb2RlLCBzcGktPmJpdHNfcGVyX3dvcmQsCisJCXNwaS0+bWF4X3NwZWVkX2h6KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBod190eGJ5dGUoc3RydWN0IHMzYzI0eHhfc3BpICpodywgaW50IGNvdW50KQoreworCXJldHVybiBody0+dHggPyBody0+dHhbY291bnRdIDogMHhmZjsKK30KKworc3RhdGljIGludCBzM2MyNHh4X3NwaV90eHJ4KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHRvX2h3KHNwaSk7CisKKwlkZXZfZGJnKCZzcGktPmRldiwgInR4cng6IHR4ICVwLCByeCAlcCwgbGVuICVkXG4iLAorCQl0LT50eF9idWYsIHQtPnJ4X2J1ZiwgdC0+bGVuKTsKKworCWh3LT50eCA9IHQtPnR4X2J1ZjsKKwlody0+cnggPSB0LT5yeF9idWY7CisJaHctPmxlbiA9IHQtPmxlbjsKKwlody0+Y291bnQgPSAwOworCisJLyogc2VuZCB0aGUgZmlyc3QgYnl0ZSAqLworCXdyaXRlYihod190eGJ5dGUoaHcsIDApLCBody0+cmVncyArIFMzQzI0MTBfU1BUREFUKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZody0+ZG9uZSk7CisKKwlyZXR1cm4gaHctPmNvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgczNjMjR4eF9zcGlfaXJxKGludCBpcnEsIHZvaWQgKmRldiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IGRldjsKKwl1bnNpZ25lZCBpbnQgc3BzdGEgPSByZWFkYihody0+cmVncyArIFMzQzI0MTBfU1BTVEEpOworCXVuc2lnbmVkIGludCBjb3VudCA9IGh3LT5jb3VudDsKKworCWlmIChzcHN0YSAmIFMzQzI0MTBfU1BTVEFfRENPTCkgeworCQlkZXZfZGJnKGh3LT5kZXYsICJkYXRhLWNvbGxpc2lvblxuIik7CisJCWNvbXBsZXRlKCZody0+ZG9uZSk7CisJCWdvdG8gaXJxX2RvbmU7CisJfQorCisJaWYgKCEoc3BzdGEgJiBTM0MyNDEwX1NQU1RBX1JFQURZKSkgeworCQlkZXZfZGJnKGh3LT5kZXYsICJzcGkgbm90IHJlYWR5IGZvciB0eD9cbiIpOworCQljb21wbGV0ZSgmaHctPmRvbmUpOworCQlnb3RvIGlycV9kb25lOworCX0KKworCWh3LT5jb3VudCsrOworCisJaWYgKGh3LT5yeCkKKwkJaHctPnJ4W2NvdW50XSA9IHJlYWRiKGh3LT5yZWdzICsgUzNDMjQxMF9TUFJEQVQpOworCisJY291bnQrKzsKKworCWlmIChjb3VudCA8IGh3LT5sZW4pCisJCXdyaXRlYihod190eGJ5dGUoaHcsIGNvdW50KSwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQVERBVCk7CisJZWxzZQorCQljb21wbGV0ZSgmaHctPmRvbmUpOworCisgaXJxX2RvbmU6CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodzsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYmk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgczNjMjR4eF9zcGkpKTsKKwlpZiAobWFzdGVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBzcGlfbWFzdGVyXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfbm9tZW07CisJfQorCisJaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJbWVtc2V0KGh3LCAwLCBzaXplb2Yoc3RydWN0IHMzYzI0eHhfc3BpKSk7CisKKwlody0+bWFzdGVyID0gc3BpX21hc3Rlcl9nZXQobWFzdGVyKTsKKwlody0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlody0+ZGV2ID0gJnBkZXYtPmRldjsKKworCWlmIChody0+cGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfbm9fcGRhdGE7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCWluaXRfY29tcGxldGlvbigmaHctPmRvbmUpOworCisJLyogc2V0dXAgdGhlIHN0YXRlIGZvciB0aGUgYml0YmFuZyBkcml2ZXIgKi8KKworCWh3LT5iaXRiYW5nLm1hc3RlciAgICAgICAgID0gaHctPm1hc3RlcjsKKwlody0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IHMzYzI0eHhfc3BpX3NldHVweGZlcjsKKwlody0+Yml0YmFuZy5jaGlwc2VsZWN0ICAgICA9IHMzYzI0eHhfc3BpX2NoaXBzZWw7CisJaHctPmJpdGJhbmcudHhyeF9idWZzICAgICAgPSBzM2MyNHh4X3NwaV90eHJ4OworCWh3LT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgID0gczNjMjR4eF9zcGlfc2V0dXA7CisKKwlkZXZfZGJnKGh3LT5kZXYsICJiaXRiYW5nIGF0ICVwXG4iLCAmaHctPmJpdGJhbmcpOworCisJLyogZmluZCBhbmQgbWFwIG91ciByZXNvdXJjZXMgKi8KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgSU9SRVNPVVJDRV9NRU1cbiIpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9ub19pb3JlczsKKwl9CisKKwlody0+aW9hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzEsCisJCQkJCXBkZXYtPm5hbWUpOworCisJaWYgKGh3LT5pb2FyZWEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVzZXJ2ZSByZWdpb25cbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX25vX2lvcmVzOworCX0KKworCWh3LT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSsxKTsKKwlpZiAoaHctPnJlZ3MgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIElPXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9ub19pb21hcDsKKwl9CisKKwlody0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaHctPmlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIHNwZWNpZmllZFxuIik7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX25vX2lycTsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2lycShody0+aXJxLCBzM2MyNHh4X3NwaV9pcnEsIDAsIHBkZXYtPm5hbWUsIGh3KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBjbGFpbSBJUlFcbiIpOworCQlnb3RvIGVycl9ub19pcnE7CisJfQorCisJaHctPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNwaSIpOworCWlmIChJU19FUlIoaHctPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gY2xvY2sgZm9yIGRldmljZVxuIik7CisJCWVyciA9IFBUUl9FUlIoaHctPmNsayk7CisJCWdvdG8gZXJyX25vX2NsazsKKwl9CisKKwkvKiBmb3IgdGhlIG1vbWVudCwgcGVybWFuZW50bHkgZW5hYmxlIHRoZSBjbG9jayAqLworCisJY2xrX2VuYWJsZShody0+Y2xrKTsKKworCS8qIHByb2dyYW0gZGVmYXVsdHMgaW50byB0aGUgcmVnaXN0ZXJzICovCisKKwl3cml0ZWIoMHhmZiwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQUFJFKTsKKwl3cml0ZWIoU1BQSU5fREVGQVVMVCwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQUElOKTsKKwl3cml0ZWIoU1BDT05fREVGQVVMVCwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQQ09OKTsKKworCS8qIHNldHVwIGFueSBncGlvIHdlIGNhbiAqLworCisJaWYgKCFody0+cGRhdGEtPnNldF9jcykgeworCQlzM2MyNDEwX2dwaW9fc2V0cGluKGh3LT5wZGF0YS0+cGluX2NzLCAxKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3Bpbihody0+cGRhdGEtPnBpbl9jcywgUzNDMjQxMF9HUElPX09VVFBVVCk7CisJfQorCisJLyogcmVnaXN0ZXIgb3VyIHNwaSBjb250cm9sbGVyICovCisKKwllcnIgPSBzcGlfYml0YmFuZ19zdGFydCgmaHctPmJpdGJhbmcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIFNQSSBtYXN0ZXJcbiIpOworCQlnb3RvIGVycl9yZWdpc3RlcjsKKwl9CisKKwlkZXZfZGJnKGh3LT5kZXYsICJzaHV0ZG93bj0lZFxuIiwgaHctPmJpdGJhbmcuc2h1dGRvd24pOworCisJLyogcmVnaXN0ZXIgYWxsIHRoZSBkZXZpY2VzIGFzc29jaWF0ZWQgKi8KKworCWJpID0gJmh3LT5wZGF0YS0+Ym9hcmRfaW5mb1swXTsKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBkYXRhLT5ib2FyZF9zaXplOyBpKyssIGJpKyspIHsKKwkJZGV2X2luZm8oaHctPmRldiwgInJlZ2lzdGVyaW5nICVzXG4iLCBiaS0+bW9kYWxpYXMpOworCisJCWJpLT5jb250cm9sbGVyX2RhdGEgPSBodzsKKwkJc3BpX25ld19kZXZpY2UobWFzdGVyLCBiaSk7CisJfQorCisJcmV0dXJuIDA7CisKKyBlcnJfcmVnaXN0ZXI6CisJY2xrX2Rpc2FibGUoaHctPmNsayk7CisJY2xrX3B1dChody0+Y2xrKTsKKworIGVycl9ub19jbGs6CisJZnJlZV9pcnEoaHctPmlycSwgaHcpOworCisgZXJyX25vX2lycToKKwlpb3VubWFwKGh3LT5yZWdzKTsKKworIGVycl9ub19pb21hcDoKKwlyZWxlYXNlX3Jlc291cmNlKGh3LT5pb2FyZWEpOworCWtmcmVlKGh3LT5pb2FyZWEpOworCisgZXJyX25vX2lvcmVzOgorIGVycl9ub19wZGF0YToKKwlzcGlfbWFzdGVyX3B1dChody0+bWFzdGVyKTs7CisKKyBlcnJfbm9tZW06CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzM2MyNHh4X3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCXNwaV91bnJlZ2lzdGVyX21hc3Rlcihody0+bWFzdGVyKTsKKworCWNsa19kaXNhYmxlKGh3LT5jbGspOworCWNsa19wdXQoaHctPmNsayk7CisKKwlmcmVlX2lycShody0+aXJxLCBodyk7CisJaW91bm1hcChody0+cmVncyk7CisKKwlyZWxlYXNlX3Jlc291cmNlKGh3LT5pb2FyZWEpOworCWtmcmVlKGh3LT5pb2FyZWEpOworCisJc3BpX21hc3Rlcl9wdXQoaHctPm1hc3Rlcik7CisJcmV0dXJuIDA7Cit9CisKKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJsZShody0+Y2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X3NwaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZW5hYmxlKGh3LT5jbGspOworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBzM2MyNHh4X3NwaV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjMjR4eF9zcGlfcmVzdW1lICBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjR4eF9zcGlkcnYgPSB7CisJLnByb2JlCQk9IHMzYzI0eHhfc3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gczNjMjR4eF9zcGlfcmVtb3ZlLAorCS5zdXNwZW5kCT0gczNjMjR4eF9zcGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfc3BpX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQxMC1zcGkiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9zcGlfaW5pdCh2b2lkKQoreworICAgICAgICByZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNHh4X3NwaWRydik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNHh4X3NwaV9leGl0KHZvaWQpCit7CisgICAgICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNHh4X3NwaWRydik7Cit9CisKK21vZHVsZV9pbml0KHMzYzI0eHhfc3BpX2luaXQpOworbW9kdWxlX2V4aXQoczNjMjR4eF9zcGlfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUzNDMjRYWCBTUEkgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2RjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9ncGlvLmMKQEAgLTAsMCArMSwxODggQEAKKy8qIGxpbnV4L2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2dwaW8uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBCZW4gRG9va3MKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBTM0MyNFhYIEdQSU8gYmFzZWQgU1BJIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcGktZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKK3N0cnVjdCBzM2MyNDEwX3NwaWdwaW8geworCXN0cnVjdCBzcGlfYml0YmFuZwkJIGJpdGJhbmc7CisKKwlzdHJ1Y3QgczNjMjQxMF9zcGlncGlvX2luZm8JKmluZm87CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKmRldjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0MTBfc3BpZ3BpbyAqc3BpZGV2X3RvX3NnKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJcmV0dXJuIHNwaS0+Y29udHJvbGxlcl9kYXRhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0c2NrKHN0cnVjdCBzcGlfZGV2aWNlICpkZXYsIGludCBvbikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9zcGlncGlvICpzZyA9IHNwaWRldl90b19zZyhkZXYpOworCXMzYzI0MTBfZ3Bpb19zZXRwaW4oc2ctPmluZm8tPnBpbl9jbGssIG9uID8gMSA6IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0bW9zaShzdHJ1Y3Qgc3BpX2RldmljZSAqZGV2LCBpbnQgb24pCit7CisJc3RydWN0IHMzYzI0MTBfc3BpZ3BpbyAqc2cgPSBzcGlkZXZfdG9fc2coZGV2KTsKKwlzM2MyNDEwX2dwaW9fc2V0cGluKHNnLT5pbmZvLT5waW5fbW9zaSwgb24gPyAxIDogMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGdldG1pc28oc3RydWN0IHNwaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9zcGlncGlvICpzZyA9IHNwaWRldl90b19zZyhkZXYpOworCXJldHVybiBzM2MyNDEwX2dwaW9fZ2V0cGluKHNnLT5pbmZvLT5waW5fbWlzbykgPyAxIDogMDsKK30KKworI2RlZmluZSBzcGlkZWxheSh4KSBuZGVsYXkoeCkKKworI2RlZmluZQlFWFBBTkRfQklUQkFOR19UWFJYCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisKKworc3RhdGljIHUzMiBzM2MyNDEwX3NwaWdwaW9fdHhyeF9tb2RlMChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSAgICAgIHVuc2lnbmVkIG5zZWNzLCB1MzIgd29yZCwgdTggYml0cykKK3sKKwlyZXR1cm4gYml0YmFuZ190eHJ4X2JlX2NwaGEwKHNwaSwgbnNlY3MsIDAsIHdvcmQsIGJpdHMpOworfQorCitzdGF0aWMgdTMyIHMzYzI0MTBfc3BpZ3Bpb190eHJ4X21vZGUxKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJICAgICAgdW5zaWduZWQgbnNlY3MsIHUzMiB3b3JkLCB1OCBiaXRzKQoreworCXJldHVybiBiaXRiYW5nX3R4cnhfYmVfY3BoYTEoc3BpLCBuc2VjcywgMCwgd29yZCwgYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfc3BpZ3Bpb19jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpkZXYsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9zcGlncGlvICpzZyA9IHNwaWRldl90b19zZyhkZXYpOworCisJaWYgKHNnLT5pbmZvICYmIHNnLT5pbmZvLT5jaGlwX3NlbGVjdCkKKwkJKHNnLT5pbmZvLT5jaGlwX3NlbGVjdCkoc2ctPmluZm8sIHZhbHVlKTsKK30KKworc3RhdGljIGludCBzM2MyNDEwX3NwaWdwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyCSptYXN0ZXI7CisJc3RydWN0IHMzYzI0MTBfc3BpZ3BpbyAgKnNwOworCWludCByZXQ7CisJaW50IGk7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBzM2MyNDEwX3NwaWdwaW8pKTsKKwlpZiAobWFzdGVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgc3BpIG1hc3RlclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXNwID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBzcCk7CisKKwkvKiBjb3B5IGluIHRoZSBwbGthdGZvcm0gZGF0YSAqLworCXNwLT5pbmZvID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qIHNldHVwIHNwaSBiaXRiYW5nIGFkYXB0b3IgKi8KKwlzcC0+Yml0YmFuZy5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCXNwLT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBzM2MyNDEwX3NwaWdwaW9fY2hpcHNlbGVjdDsKKworCXNwLT5iaXRiYW5nLnR4cnhfd29yZFtTUElfTU9ERV8wXSA9IHMzYzI0MTBfc3BpZ3Bpb190eHJ4X21vZGUwOworCXNwLT5iaXRiYW5nLnR4cnhfd29yZFtTUElfTU9ERV8xXSA9IHMzYzI0MTBfc3BpZ3Bpb190eHJ4X21vZGUxOworCisJLyogc2V0IHN0YXRlIG9mIHNwaSBwaW5zICovCisJczNjMjQxMF9ncGlvX3NldHBpbihzcC0+aW5mby0+cGluX2NsaywgMCk7CisJczNjMjQxMF9ncGlvX3NldHBpbihzcC0+aW5mby0+cGluX21vc2ksIDApOworCisJczNjMjQxMF9ncGlvX2NmZ3BpbihzcC0+aW5mby0+cGluX2NsaywgUzNDMjQxMF9HUElPX09VVFBVVCk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihzcC0+aW5mby0+cGluX21vc2ksIFMzQzI0MTBfR1BJT19PVVRQVVQpOworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oc3AtPmluZm8tPnBpbl9taXNvLCBTM0MyNDEwX0dQSU9fSU5QVVQpOworCisJcmV0ID0gc3BpX2JpdGJhbmdfc3RhcnQoJnNwLT5iaXRiYW5nKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ub19iaXRiYW5nOworCisJLyogcmVnaXN0ZXIgdGhlIGNoaXBzIHRvIGdvIHdpdGggdGhlIGJvYXJkICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc3AtPmluZm8tPmJvYXJkX3NpemU7IGkrKykgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmluZyAlcDogJXNcbiIsCisJCQkgJnNwLT5pbmZvLT5ib2FyZF9pbmZvW2ldLAorCQkJIHNwLT5pbmZvLT5ib2FyZF9pbmZvW2ldLm1vZGFsaWFzKTsKKworCQlzcC0+aW5mby0+Ym9hcmRfaW5mb1tpXS5jb250cm9sbGVyX2RhdGEgPSBzcDsKKwkJc3BpX25ld19kZXZpY2UobWFzdGVyLCBzcC0+aW5mby0+Ym9hcmRfaW5mbyArIGkpOworCX0KKworCXJldHVybiAwOworCisgZXJyX25vX2JpdGJhbmc6CisJc3BpX21hc3Rlcl9wdXQoc3AtPmJpdGJhbmcubWFzdGVyKTsKKyBlcnI6CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IHMzYzI0MTBfc3BpZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2MyNDEwX3NwaWdwaW8gKnNwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCXNwaV9iaXRiYW5nX3N0b3AoJnNwLT5iaXRiYW5nKTsKKwlzcGlfbWFzdGVyX3B1dChzcC0+Yml0YmFuZy5tYXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGFsbCBncGlvIHNob3VsZCBiZSBoZWxkIG92ZXIgc3VzcGVuZC9yZXN1bWUsIHNvIHdlIHNob3VsZAorICogbm90IG5lZWQgdG8gZGVhbCB3aXRoIHRoaXMKKyovCisKKyNkZWZpbmUgczNjMjQxMF9zcGlncGlvX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNDEwX3NwaWdwaW9fcmVzdW1lIE5VTEwKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX3NwaWdwaW9fZHJ2ID0geworCS5wcm9iZQkJPSBzM2MyNDEwX3NwaWdwaW9fcHJvYmUsCisgICAgICAgIC5yZW1vdmUJCT0gczNjMjQxMF9zcGlncGlvX3JlbW92ZSwKKyAgICAgICAgLnN1c3BlbmQJPSBzM2MyNDEwX3NwaWdwaW9fc3VzcGVuZCwKKyAgICAgICAgLnJlc3VtZQkJPSBzM2MyNDEwX3NwaWdwaW9fcmVzdW1lLAorICAgICAgICAuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjR4eC1zcGktZ3BpbyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorICAgICAgICB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9zcGlncGlvX2luaXQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9zcGlncGlvX2Rydik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDEwX3NwaWdwaW9fZXhpdCh2b2lkKQoreworICAgICAgICBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9zcGlncGlvX2Rydik7Cit9CisKK21vZHVsZV9pbml0KHMzYzI0MTBfc3BpZ3Bpb19pbml0KTsKK21vZHVsZV9leGl0KHMzYzI0MTBfc3BpZ3Bpb19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0MyNFhYIFNQSSBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMKaW5kZXggZDNhN2IwYy4uZGRhMGNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYwpAQCAtMzUsNzMgKzM1LDUyIEBACiB9IGl4al9pbmZvX3Q7CiAKIHN0YXRpYyB2b2lkIGl4al9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLXN0YXRpYyB2b2lkIGl4al9jb25maWcoZGV2X2xpbmtfdCAqIGxpbmspOwotc3RhdGljIHZvaWQgaXhqX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqIGxpbmspOworc3RhdGljIGludCBpeGpfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluayk7CitzdGF0aWMgdm9pZCBpeGpfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspOwogCi1zdGF0aWMgaW50IGl4al9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBpeGpfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotCWRldl9saW5rX3QgKmxpbms7Ci0KIAlERUJVRygwLCAiaXhqX2F0dGFjaCgpXG4iKTsKIAkvKiBDcmVhdGUgbmV3IGl4aiBkZXZpY2UgKi8KLQlsaW5rID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxpbmspCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChsaW5rLCAwLCBzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpKTsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uSU9BZGRyTGluZXMgPSAzOwotCWxpbmstPmNvbmYuVmNjID0gNTA7Ci0JbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87Ci0JbGluay0+cHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpeGpfaW5mb190KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsaW5rLT5wcml2KSB7Ci0JCWtmcmVlKGxpbmspOworCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDM7CisJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCXBfZGV2LT5wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGl4al9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBfZGV2LT5wcml2KSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQobGluay0+cHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBpeGpfaW5mb190KSk7CisJbWVtc2V0KHBfZGV2LT5wcml2LCAwLCBzaXplb2Yoc3RydWN0IGl4al9pbmZvX3QpKTsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlpeGpfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGl4al9jb25maWcocF9kZXYpOwogfQogCi1zdGF0aWMgdm9pZCBpeGpfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGl4al9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KIAlERUJVRygwLCAiaXhqX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1JFTEVBU0VfUEVORElORzsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlpeGpfY3NfcmVsZWFzZShsaW5rKTsKKwlpeGpfY3NfcmVsZWFzZShsaW5rKTsKIAogICAgICAgICBrZnJlZShsaW5rLT5wcml2KTsKLSAgICAgICAga2ZyZWUobGluayk7CiB9CiAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgaXhqX2dldF9zZXJpYWwoZGV2X2xpbmtfdCAqIGxpbmssIElYSiAqIGopCitzdGF0aWMgdm9pZCBpeGpfZ2V0X3NlcmlhbChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmssIElYSiAqIGopCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKIAl0dXBsZV90IHR1cGxlOwogCXVfc2hvcnQgYnVmWzEyOF07CiAJY2hhciAqc3RyOwogCWludCBsYXN0X3JldCwgbGFzdF9mbiwgaSwgcGxhY2U7Ci0JaGFuZGxlID0gbGluay0+aGFuZGxlOwogCURFQlVHKDAsICJpeGpfZ2V0X3NlcmlhbCgweCVwKVxuIiwgbGluayk7CiAJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IDgwOwogCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKIAlzdHIgPSAoY2hhciAqKSBidWY7CiAJcHJpbnRrKCJQQ01DSUEgVmVyc2lvbiAlZC4lZFxuIiwgc3RyWzBdLCBzdHJbMV0pOwogCXN0ciArPSAyOwpAQCAtMTQ5LDIyICsxMjgsMTkgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGl4al9jb25maWcoZGV2X2xpbmtfdCAqIGxpbmspCitzdGF0aWMgaW50IGl4al9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewogCUlYSiAqajsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlOwogCWl4al9pbmZvX3QgKmluZm87CiAJdHVwbGVfdCB0dXBsZTsKIAl1X3Nob3J0IGJ1ZlsxMjhdOwogCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY29uZmlnX2luZm9fdCBjb25mOwogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9CiAJewogCQkwCiAJfTsKIAlpbnQgbGFzdF9yZXQsIGxhc3RfZm47Ci0JaGFuZGxlID0gbGluay0+aGFuZGxlOwogCWluZm8gPSBsaW5rLT5wcml2OwogCURFQlVHKDAsICJpeGpfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKQEAgLTE3MiwxOSArMTQ4LDE3IEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25mKSk7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAJdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJd2hpbGUgKDEpIHsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCB8fAotCQkJCXBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAorCQkJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKIAkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKQEAgLTE5NSw3ICsxNjksNyBAQAogCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKIAkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKIAkJCX0KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykgIT0gMCkKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCiAJCQkJZ290byBuZXh0X2VudHJ5OwogCQkJLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCiAJCQlicmVhazsKQEAgLTIwMywxMCArMTc3LDEwIEBACiAJICAgICAgbmV4dF9lbnRyeToKIAkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQogCQkJZGZsdCA9ICpjZmc7Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCX0KIAotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJLyoKICAJICoJUmVnaXN0ZXIgdGhlIGNhcmQgd2l0aCB0aGUgY29yZS4KQEAgLTIxNSw0NiArMTg5LDIxIEBACiAKIAlpbmZvLT5uZGV2ID0gMTsKIAlpbmZvLT5ub2RlLm1ham9yID0gUEhPTkVfTUFKT1I7Ci0JbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAlpeGpfZ2V0X3NlcmlhbChsaW5rLCBqKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCXJldHVybjsKKwlyZXR1cm4gMDsKICAgICAgIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAJaXhqX2NzX3JlbGVhc2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyB2b2lkIGl4al9jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBpeGpfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlpeGpfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAlERUJVRygwLCAiaXhqX2NzX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCWluZm8tPm5kZXYgPSAwOwotCWxpbmstPmRldiA9IE5VTEw7Ci0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLX0KLQotc3RhdGljIGludCBpeGpfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl4al9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKERFVl9PSyhsaW5rKSkKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQotCXJldHVybiAwOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIGl4al9pZHNbXSA9IHsKQEAgLTI2OCwxMSArMjE3LDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiaXhqX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBpeGpfYXR0YWNoLAorCS5wcm9iZQkJPSBpeGpfcHJvYmUsCiAJLnJlbW92ZQkJPSBpeGpfZGV0YWNoLAogCS5pZF90YWJsZQk9IGl4al9pZHMsCi0JLnN1c3BlbmQJPSBpeGpfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGl4al9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeGpfcGNtY2lhX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKaW5kZXggNzg2MGM4YS4uOTU2YjdhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKQEAgLTY5LDcgKzY5LDcgQEAKICNkZWZpbmUgUkVTVUJNSVRfREVMQVkJCTEwMDAJLyogbWlsbGlzZWNvbmRzICovCiAKICNkZWZpbmUgREVGQVVMVF9CVUxLX0FMVFNFVFRJTkcJMQotI2RlZmluZSBERUZBVUxUX0lTT0NfQUxUU0VUVElORwkyCisjZGVmaW5lIERFRkFVTFRfSVNPQ19BTFRTRVRUSU5HCTMKICNkZWZpbmUgREVGQVVMVF9ETF81MTJfRklSU1QJMAogI2RlZmluZSBERUZBVUxUX0VOQUJMRV9JU09DCTAKICNkZWZpbmUgREVGQVVMVF9TV19CVUZGRVJJTkcJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKaW5kZXggODMwZDJjOS4uYjM4OTkwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCkBAIC02OCw3ICs2OCw3IEBACiAKICNpbmNsdWRlICJ1c2JhdG0uaCIKIAotI2RlZmluZSBFQUdMRVVTQlZFUlNJT04gInVlYWdsZSAxLjIiCisjZGVmaW5lIEVBR0xFVVNCVkVSU0lPTiAidWVhZ2xlIDEuMyIKIAogCiAvKgpAQCAtMjQzLDcgKzI0Myw3IEBACiAjZGVmaW5lIEJVTEtfVElNRU9VVCAzMDAKICNkZWZpbmUgQ1RSTF9USU1FT1VUIDEwMDAKIAotI2RlZmluZSBBQ0tfVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDE1MDApCisjZGVmaW5lIEFDS19USU1FT1VUIG1zZWNzX3RvX2ppZmZpZXMoMzAwMCkKIAogI2RlZmluZSBVRUFfSU5UUl9JRkFDRV9OTyAJMAogI2RlZmluZSBVRUFfVVNfSUZBQ0VfTk8JCTEKQEAgLTMxNCw2ICszMTQsMTAgQEAKIAkgKChkKSAmIDB4ZmYpIDw8IDE2IHwJCQkJCQlcCiAJICgoYSkgJiAweGZmKSA8PCA4ICB8CQkJCQkJXAogCSAoKGIpICYgMHhmZikpCisjZGVmaW5lIEdFVFNBMShhKSAoKGEgPj4gOCkgJiAweGZmKQorI2RlZmluZSBHRVRTQTIoYSkgKGEgJiAweGZmKQorI2RlZmluZSBHRVRTQTMoYSkgKChhID4+IDI0KSAmIDB4ZmYpCisjZGVmaW5lIEdFVFNBNChhKSAoKGEgPj4gMTYpICYgMHhmZikKIAogI2RlZmluZSBTQV9DTlRMIE1BS0VTQSgnQycsICdOJywgJ1QnLCAnTCcpCiAjZGVmaW5lIFNBX0RJQUcgTUFLRVNBKCdEJywgJ0knLCAnQScsICdHJykKQEAgLTcyOCwxMSArNzMyLDEyIEBACiAJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwgInNlbmRpbmcgRFNQIGJsb2NrICV1IGZhaWxlZFxuIiwgaSk7CiAJcmV0dXJuOwogYmFkMToKLQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAiaW52YWxpZCBEU1AgcGFnZSAldSByZXF1ZXN0ZWRcbiIscGFnZW5vKTsKKwl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAiaW52YWxpZCBEU1AgcGFnZSAldSByZXF1ZXN0ZWRcbiIsIHBhZ2Vubyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX3VwX2Ntdl9hY2soc3RydWN0IHVlYV9zb2Z0YyAqc2MpCiB7CisJQlVHX09OKHNjLT5jbXZfYWNrKTsKIAlzYy0+Y212X2FjayA9IDE7CiAJd2FrZV91cCgmc2MtPmNtdl9hY2tfd2FpdCk7CiB9CkBAIC03NDMsNiArNzQ4LDkgQEAKIAkJCQkJCSAgIHNjLT5jbXZfYWNrLCBBQ0tfVElNRU9VVCk7CiAJc2MtPmNtdl9hY2sgPSAwOwogCisJdWVhX2RiZyhJTlNfVE9fVVNCREVWKHNjKSwgIndhaXRfZXZlbnRfdGltZW91dCA6ICVkIG1zXG4iLAorCQkJamlmZmllc190b19tc2VjcyhyZXQpKTsKKwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC03OTEsNiArNzk5LDEyIEBACiAJc3RydWN0IGNtdiBjbXY7CiAJaW50IHJldDsKIAorCXVlYV9lbnRlcnMoSU5TX1RPX1VTQkRFVihzYykpOworCXVlYV92ZGJnKElOU19UT19VU0JERVYoc2MpLCAiRnVuY3Rpb24gOiAlZC0lZCwgQWRkcmVzcyA6ICVjJWMlYyVjLCAiCisJCQkib2Zmc2V0IDogMHglMDR4LCBkYXRhIDogMHglMDh4XG4iLAorCQkJRlVOQ1RJT05fVFlQRShmdW5jdGlvbiksIEZVTkNUSU9OX1NVQlRZUEUoZnVuY3Rpb24pLAorCQkJR0VUU0ExKGFkZHJlc3MpLCBHRVRTQTIoYWRkcmVzcyksIEdFVFNBMyhhZGRyZXNzKSwKKwkJCUdFVFNBNChhZGRyZXNzKSwgb2Zmc2V0LCBkYXRhKTsKIAkvKiB3ZSBzZW5kIGEgcmVxdWVzdCwgYnV0IHdlIGV4cGVjdCBhIHJlcGx5ICovCiAJc2MtPmNtdl9mdW5jdGlvbiA9IGZ1bmN0aW9uIHwgMHgyOwogCXNjLT5jbXZfaWR4Kys7CkBAIC04MDgsNyArODIyLDkgQEAKIAlyZXQgPSB1ZWFfcmVxdWVzdChzYywgVUVBX1NFVF9CTE9DSywgVUVBX01QVFhfU1RBUlQsIENNVl9TSVpFLCAmY212KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gd2FpdF9jbXZfYWNrKHNjKTsKKwlyZXQgPSB3YWl0X2Ntdl9hY2soc2MpOworCXVlYV9sZWF2ZXMoSU5TX1RPX1VTQkRFVihzYykpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHVlYV9yZWFkX2NtdihzdHJ1Y3QgdWVhX3NvZnRjICpzYywKQEAgLTkyMiw3ICs5MzgsNyBAQAogCSAqIHdlIGNoZWNrIHRoZSBzdGF0dXMgYWdhaW4gaW4gb3JkZXIgdG8gZGV0ZWN0IHRoZSBmYWlsdXJlIGVhcmxpZXIKIAkgKi8KIAlpZiAoc2MtPnN0YXRzLnBoeS5mbGFncykgewotCQl1ZWFfZGJnKElOU19UT19VU0JERVYoc2MpLCAiU3RhdCBmbGFnID0gJWRcbiIsCisJCXVlYV9kYmcoSU5TX1RPX1VTQkRFVihzYyksICJTdGF0IGZsYWcgPSAweCV4XG4iLAogCQkgICAgICAgc2MtPnN0YXRzLnBoeS5mbGFncyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEwNjMsNyArMTA3OSwxMyBAQAogCXVlYV9lbnRlcnMoSU5TX1RPX1VTQkRFVihzYykpOwogCXVlYV9pbmZvKElOU19UT19VU0JERVYoc2MpLCAiKHJlKWJvb3Rpbmcgc3RhcnRlZFxuIik7CiAKKwkvKiBtYXNrIGludGVycnVwdCAqLwogCXNjLT5ib290aW5nID0gMTsKKwkvKiBXZSBuZWVkIHRvIHNldCB0aGlzIGhlcmUgYmVjYXVzZSwgYSBhY2sgdGltZW91dCBjb3VsZCBoYXZlIG9jY3VyZWQsCisJICogYnV0IGJlZm9yZSB3ZSBzdGFydCB0aGUgcmVib290LCB0aGUgYWNrIG9jY3VycyBhbmQgc2V0IHRoaXMgdG8gMS4KKwkgKiBTbyB3ZSB3aWxsIGZhaWxlZCB0byB3YWl0IFJlYWR5IENNVi4KKwkgKi8KKwlzYy0+Y212X2FjayA9IDA7CiAJVVBEQVRFX0FUTV9TVEFUKHNpZ25hbCwgQVRNX1BIWV9TSUdfTE9TVCk7CiAKIAkvKiByZXNldCBzdGF0aXN0aWNzICovCkBAIC0xMDg5LDYgKzExMTEsNyBAQAogCiAJbXNsZWVwKDEwMDApOwogCXNjLT5jbXZfZnVuY3Rpb24gPSBNQUtFRlVOQ1RJT04oQURTTERJUkVDVElWRSwgTU9ERU1SRUFEWSk7CisJLyogZGVtYXNrIGludGVycnVwdCAqLwogCXNjLT5ib290aW5nID0gMDsKIAogCS8qIHN0YXJ0IGxvYWRpbmcgRFNQICovCkBAIC0xMTAxLDYgKzExMjQsOCBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJdWVhX3ZkYmcoSU5TX1RPX1VTQkRFVihzYyksICJSZWFkeSBDTVYgcmVjZWl2ZWRcbiIpOworCiAJLyogRW50ZXIgaW4gUi1JRExFIChjbXYpIHVudGlsIGluc3RydWN0ZWQgb3RoZXJ3aXNlICovCiAJcmV0ID0gdWVhX3dyaXRlX2NtdihzYywgU0FfQ05UTCwgMCwgMSk7CiAJaWYgKHJldCA8IDApCkBAIC0xMTIxLDYgKzExNDYsNyBAQAogCX0KIAkvKiBFbnRlciBpbiBSLUFDVC1SRVEgKi8KIAlyZXQgPSB1ZWFfd3JpdGVfY212KHNjLCBTQV9DTlRMLCAwLCAyKTsKKwl1ZWFfdmRiZyhJTlNfVE9fVVNCREVWKHNjKSwgIkVudGVyaW5nIGluIFItQUNULVJFUSBzdGF0ZVxuIik7CiBvdXQ6CiAJcmVsZWFzZV9maXJtd2FyZShjbXZzX2Z3KTsKIAlzYy0+cmVzZXQgPSAwOwpAQCAtMTIzNSw2ICsxMjYxLDcgQEAKIAogCWlmIChjbXYtPmJGdW5jdGlvbiA9PSBNQUtFRlVOQ1RJT04oQURTTERJUkVDVElWRSwgTU9ERU1SRUFEWSkpIHsKIAkJd2FrZV91cF9jbXZfYWNrKHNjKTsKKwkJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyNDksNiArMTI3Niw3IEBACiAJc2MtPmRhdGEgPSBzYy0+ZGF0YSA8PCAxNiB8IHNjLT5kYXRhID4+IDE2OwogCiAJd2FrZV91cF9jbXZfYWNrKHNjKTsKKwl1ZWFfbGVhdmVzKElOU19UT19VU0JERVYoc2MpKTsKIAlyZXR1cm47CiAKIGJhZDI6CkBAIC0xMjU2LDEyICsxMjg0LDE0IEBACiAJCQkiRnVuY3Rpb24gOiAlZCwgU3ViZnVuY3Rpb24gOiAlZFxuIiwKIAkJCUZVTkNUSU9OX1RZUEUoY212LT5iRnVuY3Rpb24pLAogCQkJRlVOQ1RJT05fU1VCVFlQRShjbXYtPmJGdW5jdGlvbikpOworCXVlYV9sZWF2ZXMoSU5TX1RPX1VTQkRFVihzYykpOwogCXJldHVybjsKIAogYmFkMToKIAl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAiaW52YWxpZCBjbXYgcmVjZWl2ZWQsICIKIAkJCSJ3UHJlYW1ibGUgJWQsIGJEaXJlY3Rpb24gJWRcbiIsCiAJCQlsZTE2X3RvX2NwdShjbXYtPndQcmVhbWJsZSksIGNtdi0+YkRpcmVjdGlvbik7CisJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CiB9CiAKIC8qCkBAIC0xMzQ2LDcgKzEzNzYsNyBAQAogCWlmIChyZXQgPCAwKSB7CiAJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksCiAJCSAgICAgICAidXJiIHN1Ym1pdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnIxOworCQlnb3RvIGVycjsKIAl9CiAKIAlzYy0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKHVlYV9rdGhyZWFkLCBzYywgInVlYWdsZS1hdG0iKTsKQEAgLTEzNjAsMTAgKzEzOTAsMTAgQEAKIAogZXJyMjoKIAl1c2Jfa2lsbF91cmIoc2MtPnVyYl9pbnQpOwotZXJyMToKLQlrZnJlZShpbnRyKTsKIGVycjoKIAl1c2JfZnJlZV91cmIoc2MtPnVyYl9pbnQpOworCXNjLT51cmJfaW50ID0gTlVMTDsKKwlrZnJlZShpbnRyKTsKIAl1ZWFfbGVhdmVzKElOU19UT19VU0JERVYoc2MpKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTE1MDgsNyArMTUzOCw3IEBACiAJaW50IHJldCA9IC1FTk9ERVY7IAkJCQkJXAogCXN0cnVjdCB1ZWFfc29mdGMgKnNjOyAJCQkJCVwKICAJCQkJCQkJCVwKLQltdXRleF9sb2NrKCZ1ZWFfbXV0ZXgpOyAJCQkJCVwKKwltdXRleF9sb2NrKCZ1ZWFfbXV0ZXgpOyAJCQkJXAogCXNjID0gZGV2X3RvX3VlYShkZXYpOwkJCQkJXAogCWlmICghc2MpIAkJCQkJCVwKIAkJZ290byBvdXQ7IAkJCQkJXApAQCAtMTUxNiw3ICsxNTQ2LDcgQEAKIAlpZiAocmVzZXQpCQkJCQkJXAogCQlzYy0+c3RhdHMucGh5Lm5hbWUgPSAwOwkJCQlcCiBvdXQ6IAkJCQkJCQkJXAotCW11dGV4X3VubG9jaygmdWVhX211dGV4KTsgCQkJCQlcCisJbXV0ZXhfdW5sb2NrKCZ1ZWFfbXV0ZXgpOyAJCQkJXAogCXJldHVybiByZXQ7IAkJCQkJCVwKIH0gCQkJCQkJCQlcCiAJCQkJCQkJCVwKQEAgLTE2NDMsNyArMTY3Myw3IEBACiAKIAlzYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1ZWFfc29mdGMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNjKSB7Ci0JCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJ1ZWFfaW5pdDogbm90IGVub3VnaCBtZW1vcnkgIVxuIik7CisJCXVlYV9lcnIodXNiLCAidWVhX2luaXQ6IG5vdCBlbm91Z2ggbWVtb3J5ICFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYwppbmRleCBjMTIxMWZjLi41NDYyNDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCkBAIC05OSwxMSArOTksMTEgQEAKIAogI2RlZmluZSBVRFNMX01BWF9SQ1ZfVVJCUwkJMTYKICNkZWZpbmUgVURTTF9NQVhfU05EX1VSQlMJCTE2Ci0jZGVmaW5lIFVEU0xfTUFYX0JVRl9TSVpFCQk2NCAqIDEwMjQJLyogYnl0ZXMgKi8KKyNkZWZpbmUgVURTTF9NQVhfQlVGX1NJWkUJCTY1NTM2CiAjZGVmaW5lIFVEU0xfREVGQVVMVF9SQ1ZfVVJCUwkJNAogI2RlZmluZSBVRFNMX0RFRkFVTFRfU05EX1VSQlMJCTQKLSNkZWZpbmUgVURTTF9ERUZBVUxUX1JDVl9CVUZfU0laRQk2NCAqIEFUTV9DRUxMX1NJWkUJLyogYnl0ZXMgKi8KLSNkZWZpbmUgVURTTF9ERUZBVUxUX1NORF9CVUZfU0laRQk2NCAqIEFUTV9DRUxMX1NJWkUJLyogYnl0ZXMgKi8KKyNkZWZpbmUgVURTTF9ERUZBVUxUX1JDVl9CVUZfU0laRQkzMzkyCS8qIDY0ICogQVRNX0NFTExfU0laRSAqLworI2RlZmluZSBVRFNMX0RFRkFVTFRfU05EX0JVRl9TSVpFCTMzOTIJLyogNjQgKiBBVE1fQ0VMTF9TSVpFICovCiAKICNkZWZpbmUgQVRNX0NFTExfSEVBREVSCQkJKEFUTV9DRUxMX1NJWkUgLSBBVE1fQ0VMTF9QQVlMT0FEKQogCkBAIC0xMzUsNyArMTM1LDcgQEAKIG1vZHVsZV9wYXJhbShzbmRfYnVmX2J5dGVzLCB1aW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Moc25kX2J1Zl9ieXRlcywKIAkJICJTaXplIG9mIHRoZSBidWZmZXJzIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiwgaW4gYnl0ZXMgKHJhbmdlOiAxLSIKLQkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfQlVGX1NJWkUpICIsIGRlZmF1bHQ6ICIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9CVUZfU0laRSkgIiwgZGVmYXVsdDogIgogCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9TTkRfQlVGX1NJWkUpICIpIik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCmluZGV4IGZmMDMxODQuLmEwODc4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKQEAgLTk5LDQgKzk5LDExIEBACiAJICBub3JtYWwgTGludXgtVVNCIGhvc3RzIGRvIChvdGhlciB0aGFuIHRoZSB3YXJuaW5nKSwgYW5kIGlzCiAJICBjb252ZW5pZW50IGZvciBtYW55IHN0YWdlcyBvZiBwcm9kdWN0IGRldmVsb3BtZW50LgogCitjb25maWcgVVNCX09UR19CTEFDS0xJU1RfSFVCCisJYm9vbCAiRGlzYWJsZSBleHRlcm5hbCBodWJzIgorCWRlcGVuZHMgb24gVVNCX09URworCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIExpbnV4IHdpbGwgcmVmdXNlIHRvIGVudW1lcmF0ZQorCSAgZXh0ZXJuYWwgaHVicy4gIE9URyBob3N0cyBhcmUgYWxsb3dlZCB0byByZWR1Y2UgaGFyZHdhcmUKKwkgIGFuZCBzb2Z0d2FyZSBjb3N0cyBieSBub3Qgc3VwcG9ydGluZyBleHRlcm5hbCBodWJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IDBkMjE5M2IuLjY2Yjc4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0yMTMsMTEgKzIxMyw5IEBACiAKIAlpZiAoaGNkLT5kcml2ZXItPnN1c3BlbmQpIHsKIAkJcmV0dmFsID0gaGNkLT5kcml2ZXItPnN1c3BlbmQoaGNkLCBtZXNzYWdlKTsKLQkJaWYgKHJldHZhbCkgewotCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAiUENJIHByZS1zdXNwZW5kIGZhaWwsICVkXG4iLAotCQkJCXJldHZhbCk7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChoY2QtPmRyaXZlci0+c3VzcGVuZCwgcmV0dmFsKTsKKwkJaWYgKHJldHZhbCkKIAkJCWdvdG8gZG9uZTsKLQkJfQogCX0KIAlzeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpOwogCkBAIC0yNjMsNiArMjYxLDcgQEAKIAkJICogc29tZSBkZXZpY2Ugc3RhdGUgKGUuZy4gYXMgcGFydCBvZiBjbG9jayByZWluaXQpLgogCQkgKi8KIAkJcmV0dmFsID0gcGNpX3NldF9wb3dlcl9zdGF0ZSAoZGV2LCBQQ0lfRDNob3QpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQocGNpX3NldF9wb3dlcl9zdGF0ZSwgcmV0dmFsKTsKIAkJaWYgKHJldHZhbCA9PSAwKSB7CiAJCQlpbnQgd2FrZSA9IGRldmljZV9jYW5fd2FrZXVwKCZoY2QtPnNlbGYucm9vdF9odWItPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IGZiZDkzOGQuLmUyZTAwYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMTgwNSw2ICsxODA1LDEyIEBACiAJCQlVU0JfU1BFRURfRlVMTDsKIAloY2QtPnNlbGYucm9vdF9odWIgPSByaGRldjsKIAorCS8qIHdha2V1cCBmbGFnIGluaXQgZGVmYXVsdHMgdG8gImV2ZXJ5dGhpbmcgd29ya3MiIGZvciByb290IGh1YnMsCisJICogYnV0IGRyaXZlcnMgY2FuIG92ZXJyaWRlIGl0IGluIHJlc2V0KCkgaWYgbmVlZGVkLCBhbG9uZyB3aXRoCisJICogcmVjb3JkaW5nIHRoZSBvdmVyYWxsIGNvbnRyb2xsZXIncyBzeXN0ZW0gd2FrZXVwIGNhcGFiaWxpdHkuCisJICovCisJZGV2aWNlX2luaXRfd2FrZXVwKCZyaGRldi0+ZGV2LCAxKTsKKwogCS8qICJyZXNldCIgaXMgbWlzbmFtZWQ7IGl0cyByb2xlIGlzIG5vdyBvbmUtdGltZSBpbml0LiB0aGUgY29udHJvbGxlcgogCSAqIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiByZXNldCAoYW5kIGJvb3QgZmlybXdhcmUga2lja2VkIG9mZiBldGMpLgogCSAqLwpAQCAtMTgxMywxMyArMTgxOSw2IEBACiAJCWdvdG8gZXJyX2hjZF9kcml2ZXJfc2V0dXA7CiAJfQogCi0JLyogd2FrZXVwIGZsYWcgaW5pdCBpcyBpbiB0cmFuc2l0aW9uOyBmb3Igbm93IHdlIGNhbid0IHJlbHkgb24gUENJIHRvCi0JICogaW5pdGlhbGl6ZSB0aGVzZSBiaXRzIHByb3Blcmx5LCBzbyB3ZSBsZXQgcmVzZXQoKSBvdmVycmlkZSBpdC4KLQkgKiBUaGlzIGluaXQgc2hvdWxkIF9wcmVjZWRlXyB0aGUgcmVzZXQoKSBvbmNlIFBDSSBiZWhhdmVzLgotCSAqLwotCWRldmljZV9pbml0X3dha2V1cCgmcmhkZXYtPmRldiwKLQkJCWRldmljZV9jYW5fd2FrZXVwKGhjZC0+c2VsZi5jb250cm9sbGVyKSk7Ci0KIAkvKiBOT1RFOiByb290IGh1YiBhbmQgY29udHJvbGxlciBjYXBhYmlsaXRpZXMgbWF5IG5vdCBiZSB0aGUgc2FtZSAqLwogCWlmIChkZXZpY2VfY2FuX3dha2V1cChoY2QtPnNlbGYuY29udHJvbGxlcikKIAkJCSYmIGRldmljZV9jYW5fd2FrZXVwKCZoY2QtPnNlbGYucm9vdF9odWItPmRldikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA4ZTY1ZjdhLi45MGI4ZDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTgzNiw2ICs4MzYsMTMgQEAKIAlkZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CiAJaGRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKKyNpZmRlZglDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCCisJaWYgKGhkZXYtPnBhcmVudCkgeworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiaWdub3JpbmcgZXh0ZXJuYWwgaHViXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorI2VuZGlmCisKIAkvKiBTb21lIGh1YnMgaGF2ZSBhIHN1YmNsYXNzIG9mIDEsIHdoaWNoIEFGQUlDVCBhY2NvcmRpbmcgdG8gdGhlICovCiAJLyogIHNwZWNzIGlzIG5vdCBkZWZpbmVkLCBidXQgaXQgd29ya3MgKi8KIAlpZiAoKGRlc2MtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDApICYmCkBAIC0xMDIyLDcgKzEwMjksNiBAQAogCQlyZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHVkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9zdGF0ZV9sb2NrLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9zZXRfZGV2aWNlX3N0YXRlKTsKIAogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xMTYyLDE5ICsxMTY4LDkgQEAKIHN0YXRpYyBpbnQgY2hvb3NlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50IGk7Ci0JdTE2IGRldnN0YXR1czsKLQlpbnQgYnVzX3Bvd2VyZWQ7CiAJaW50IG51bV9jb25maWdzOwogCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmMsICpiZXN0OwogCi0JLyogSWYgdGhpcyBmYWlscywgYXNzdW1lIHRoZSBkZXZpY2UgaXMgYnVzLXBvd2VyZWQgKi8KLQlkZXZzdGF0dXMgPSAwOwotCXVzYl9nZXRfc3RhdHVzKHVkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsICZkZXZzdGF0dXMpOwotCWxlMTZfdG9fY3B1cygmZGV2c3RhdHVzKTsKLQlidXNfcG93ZXJlZCA9ICgoZGV2c3RhdHVzICYgKDEgPDwgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQpKSA9PSAwKTsKLQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJkZXZpY2UgaXMgJXMtcG93ZXJlZFxuIiwKLQkJCWJ1c19wb3dlcmVkID8gImJ1cyIgOiAic2VsZiIpOwotCiAJYmVzdCA9IE5VTEw7CiAJYyA9IHVkZXYtPmNvbmZpZzsKIAludW1fY29uZmlncyA9IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOwpAQCAtMTE5MSw2ICsxMTg3LDE5IEBACiAJCSAqIHNpbWlsYXIgZXJyb3JzIGluIHRoZWlyIGRlc2NyaXB0b3JzLiAgSWYgdGhlIG5leHQgdGVzdAogCQkgKiB3ZXJlIGFsbG93ZWQgdG8gZXhlY3V0ZSwgc3VjaCBjb25maWd1cmF0aW9ucyB3b3VsZCBhbHdheXMKIAkJICogYmUgcmVqZWN0ZWQgYW5kIHRoZSBkZXZpY2VzIHdvdWxkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgorCQkgKiBJbiB0aGUgbWVhbnRpbWUsIHdlIHJ1biB0aGUgcmlzayBvZiBzZWxlY3RpbmcgYSBjb25maWcKKwkJICogdGhhdCByZXF1aXJlcyBleHRlcm5hbCBwb3dlciBhdCBhIHRpbWUgd2hlbiB0aGF0IHBvd2VyCisJCSAqIGlzbid0IGF2YWlsYWJsZS4gIEl0IHNlZW1zIHRvIGJlIHRoZSBsZXNzZXIgb2YgdHdvIGV2aWxzLgorCQkgKgorCQkgKiBCdWd6aWxsYSAjNjQ0OCByZXBvcnRzIGEgZGV2aWNlIHRoYXQgYXBwZWFycyB0byBjcmFzaAorCQkgKiB3aGVuIGl0IHJlY2VpdmVzIGEgR0VUX0RFVklDRV9TVEFUVVMgcmVxdWVzdCEgIFdlIGRvbid0CisJCSAqIGhhdmUgYW55IG90aGVyIHdheSB0byB0ZWxsIHdoZXRoZXIgYSBkZXZpY2UgaXMgc2VsZi1wb3dlcmVkLAorCQkgKiBidXQgc2luY2Ugd2UgZG9uJ3QgdXNlIHRoYXQgaW5mb3JtYXRpb24gYW55d2hlcmUgYnV0IGhlcmUsCisJCSAqIHRoZSBjYWxsIGhhcyBiZWVuIHJlbW92ZWQuCisJCSAqCisJCSAqIE1heWJlIHRoZSBHRVRfREVWSUNFX1NUQVRVUyBjYWxsIGFuZCB0aGUgdGVzdCBiZWxvdyBjYW4KKwkJICogYmUgcmVpbnN0YXRlZCB3aGVuIGRldmljZSBmaXJtd2FyZXMgYmVjb21lIG1vcmUgcmVsaWFibGUuCisJCSAqIERvbid0IGhvbGQgeW91ciBicmVhdGguCiAJCSAqLwogI2lmIDAKIAkJLyogUnVsZSBvdXQgc2VsZi1wb3dlcmVkIGNvbmZpZ3MgZm9yIGEgYnVzLXBvd2VyZWQgZGV2aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCBkNzM1MmFhLi5iN2ZkYzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTExOTQsNyArMTE5NCw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZ2V0X2ludGYpOwogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3B1dF9pbnRmKTsKIAotRVhQT1JUX1NZTUJPTCh1c2JfYWxsb2NfZGV2KTsKIEVYUE9SVF9TWU1CT0wodXNiX3B1dF9kZXYpOwogRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X2Rldik7CiBFWFBPUlRfU1lNQk9MKHVzYl9odWJfdHRfY2xlYXJfYnVmZmVyKTsKQEAgLTEyMDgsNyArMTIwNyw2IEBACiBFWFBPUlRfU1lNQk9MKHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyk7CiAKIEVYUE9SVF9TWU1CT0wodXNiX3Jlc2V0X2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHVzYl9kaXNjb25uZWN0KTsKIAogRVhQT1JUX1NZTUJPTChfX3VzYl9nZXRfZXh0cmFfZGVzY3JpcHRvcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggZDgwZjcxOC4uMzYzYjJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTY5LDExICs2OSwxMSBAQAogCSAgIG9mdGVuIG5lZWQgYm9hcmQtc3BlY2lmaWMgaG9va3MuCiAKIGNvbmZpZyBVU0JfR0FER0VUX05FVDIyODAKLQlib29sZWFuICJOZXRDaGlwIDIyODAiCisJYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECiAJaGVscAotCSAgIE5ldENoaXAgMjI4MCBpcyBhIFBDSSBiYXNlZCBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIHdoaWNoCisJICAgTmV0Q2hpcCAyMjgwIC8gMjI4MiBpcyBhIFBDSSBiYXNlZCBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIHdoaWNoCiAJICAgc3VwcG9ydHMgYm90aCBmdWxsIGFuZCBoaWdoIHNwZWVkIFVTQiAyLjAgZGF0YSB0cmFuc2ZlcnMuICAKIAkgICAKIAkgICBJdCBoYXMgc2l4IGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwppbmRleCA4NjU4NThjLi5iOGQwYjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwpAQCAtMTcwOSw3ICsxNzA5LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdDkxdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKK3N0YXRpYyBpbnQgYXQ5MXVkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7CiAJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCkBAIC0xNzMxLDcgKzE3MzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0OTF1ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdDkxdWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IGMzZDhlNWMuLjljNDQyMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC0yMzM4LDYgKzIzMzgsOSBAQAogCQloc19zdWJzZXRfZGVzY3JpcHRvcnMoKTsKIAl9CiAKKwlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OworCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkIChnYWRnZXQpOworCiAJLyogRm9yIG5vdyBSTkRJUyBpcyBhbHdheXMgYSBzZWNvbmQgY29uZmlnICovCiAJaWYgKHJuZGlzKQogCQlkZXZpY2VfZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMgPSAyOwpAQCAtMjM2MSw5ICsyMzY0LDYgQEAKICNlbmRpZgogI2VuZGlmCS8qIERVQUxTUEVFRCAqLwogCi0JZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwID0gZ2FkZ2V0LT5lcDAtPm1heHBhY2tldDsKLQl1c2JfZ2FkZ2V0X3NldF9zZWxmcG93ZXJlZCAoZ2FkZ2V0KTsKLQogCWlmIChnYWRnZXQtPmlzX290ZykgewogCQlvdGdfZGVzY3JpcHRvci5ibUF0dHJpYnV0ZXMgfD0gVVNCX09UR19ITlAsCiAJCWV0aF9jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCBjZjNiZTI5Li42Zjg4NzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC03MSw2ICs3MSwxMiBAQAogICogcmVxdWlyZW1lbnQgYW1vdW50cyB0byB0d28gMTZLIGJ1ZmZlcnMsIHNpemUgY29uZmlndXJhYmxlIGJ5IGEgcGFyYW1ldGVyLgogICogU3VwcG9ydCBpcyBpbmNsdWRlZCBmb3IgYm90aCBmdWxsLXNwZWVkIGFuZCBoaWdoLXNwZWVkIG9wZXJhdGlvbi4KICAqCisgKiBOb3RlIHRoYXQgdGhlIGRyaXZlciBpcyBzbGlnaHRseSBub24tcG9ydGFibGUgaW4gdGhhdCBpdCBhc3N1bWVzIGEKKyAqIHNpbmdsZSBtZW1vcnkvRE1BIGJ1ZmZlciB3aWxsIGJlIHVzZWFibGUgZm9yIGJ1bGstaW4sIGJ1bGstb3V0LCBhbmQKKyAqIGludGVycnVwdC1pbiBlbmRwb2ludHMuICBXaXRoIG1vc3QgZGV2aWNlIGNvbnRyb2xsZXJzIHRoaXMgaXNuJ3QgYW4KKyAqIGlzc3VlLCBidXQgdGhlcmUgbWF5IGJlIHNvbWUgd2l0aCBoYXJkd2FyZSByZXN0cmljdGlvbnMgdGhhdCBwcmV2ZW50CisgKiBhIGJ1ZmZlciBmcm9tIGJlaW5nIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSBlbmRwb2ludC4KKyAqCiAgKiBNb2R1bGUgb3B0aW9uczoKICAqCiAgKglmaWxlPWZpbGVuYW1lWyxmaWxlbmFtZS4uLl0KQEAgLTEwOCw2ICsxMTQsMTQgQEAKICAqIHNldHRpbmcgYXJlIG5vdCBhbGxvd2VkIHdoZW4gdGhlIG1lZGl1bSBpcyBsb2FkZWQuCiAgKgogICogVGhpcyBnYWRnZXQgZHJpdmVyIGlzIGhlYXZpbHkgYmFzZWQgb24gIkdhZGdldCBaZXJvIiBieSBEYXZpZCBCcm93bmVsbC4KKyAqIFRoZSBkcml2ZXIncyBTQ1NJIGNvbW1hbmQgaW50ZXJmYWNlIHdhcyBiYXNlZCBvbiB0aGUgIkluZm9ybWF0aW9uCisgKiB0ZWNobm9sb2d5IC0gU21hbGwgQ29tcHV0ZXIgU3lzdGVtIEludGVyZmFjZSAtIDIiIGRvY3VtZW50IGZyb20KKyAqIFgzVDkuMiBQcm9qZWN0IDM3NUQsIFJldmlzaW9uIDEwTCwgNy1TRVAtOTMsIGF2YWlsYWJsZSBhdAorICogPGh0dHA6Ly93d3cudDEwLm9yZy9mdHAvdDEwL2RyYWZ0cy9zMi9zMi1yMTBsLnBkZj4uICBUaGUgc2luZ2xlIGV4Y2VwdGlvbgorICogaXMgb3Bjb2RlIDB4MjMgKFJFQUQgRk9STUFUIENBUEFDSVRJRVMpLCB3aGljaCB3YXMgYmFzZWQgb24gdGhlCisgKiAiVW5pdmVyc2FsIFNlcmlhbCBCdXMgTWFzcyBTdG9yYWdlIENsYXNzIFVGSSBDb21tYW5kIFNwZWNpZmljYXRpb24iCisgKiBkb2N1bWVudCwgUmV2aXNpb24gMS4wLCBEZWNlbWJlciAxNCwgMTk5OCwgYXZhaWxhYmxlIGF0CisgKiA8aHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZGV2Y2xhc3NfZG9jcy91c2JtYXNzLXVmaTEwLnBkZj4uCiAgKi8KIAogCkBAIC0zMzQsMTEgKzM0OCw5IEBACiAKICNkZWZpbmUgTUFYX0xVTlMJOAogCi0JLyogQXJnZ2ghICBUaGVyZSBzaG91bGQgYmUgYSBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQgbWFjcm8hICovCi1zdGF0aWMgY2hhcgkJKmZpbGVbTUFYX0xVTlNdOwotc3RhdGljIGludAkJcm9bTUFYX0xVTlNdOwotCiBzdGF0aWMgc3RydWN0IHsKKwljaGFyCQkqZmlsZVtNQVhfTFVOU107CisJaW50CQlyb1tNQVhfTFVOU107CiAJaW50CQludW1fZmlsZW5hbWVzOwogCWludAkJbnVtX3JvczsKIAl1bnNpZ25lZCBpbnQJbmx1bnM7CkBAIC0zNzAsMTAgKzM4MiwxMSBAQAogCX07CiAKIAotbW9kdWxlX3BhcmFtX2FycmF5KGZpbGUsIGNoYXJwLCAmbW9kX2RhdGEubnVtX2ZpbGVuYW1lcywgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQoZmlsZSwgbW9kX2RhdGEuZmlsZSwgY2hhcnAsICZtb2RfZGF0YS5udW1fZmlsZW5hbWVzLAorCQlTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoZmlsZSwgIm5hbWVzIG9mIGJhY2tpbmcgZmlsZXMgb3IgZGV2aWNlcyIpOwogCi1tb2R1bGVfcGFyYW1fYXJyYXkocm8sIGJvb2wsICZtb2RfZGF0YS5udW1fcm9zLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChybywgbW9kX2RhdGEucm8sIGJvb2wsICZtb2RfZGF0YS5udW1fcm9zLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Mocm8sICJ0cnVlIHRvIGZvcmNlIHJlYWQtb25seSIpOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQobHVucywgbW9kX2RhdGEubmx1bnMsIHVpbnQsIFNfSVJVR08pOwpAQCAtMTc5NSw2ICsxODA4LDcgQEAKIAkJCSAqIHRoZSBidWxrLW91dCBtYXhwYWNrZXQgc2l6ZSAqLwogCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCA9CiAJCQkJCWFtb3VudDsKKwkJCWJoLT5vdXRyZXEtPnNob3J0X25vdF9vayA9IDE7CiAJCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19vdXQsIGJoLT5vdXRyZXEsCiAJCQkJCSZiaC0+b3V0cmVxX2J1c3ksICZiaC0+c3RhdGUpOwogCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CkBAIC0yMzk4LDYgKzI0MTIsNyBAQAogCQkJICogdGhlIGJ1bGstb3V0IG1heHBhY2tldCBzaXplICovCiAJCQliaC0+b3V0cmVxLT5sZW5ndGggPSBiaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoID0KIAkJCQkJYW1vdW50OworCQkJYmgtPm91dHJlcS0+c2hvcnRfbm90X29rID0gMTsKIAkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSwKIAkJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CiAJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKQEAgLTMwMjksNiArMzA0NCw3IEBACiAKIAkJLyogUXVldWUgYSByZXF1ZXN0IHRvIHJlYWQgYSBCdWxrLW9ubHkgQ0JXICovCiAJCXNldF9idWxrX291dF9yZXFfbGVuZ3RoKGZzZywgYmgsIFVTQl9CVUxLX0NCX1dSQVBfTEVOKTsKKwkJYmgtPm91dHJlcS0+c2hvcnRfbm90X29rID0gMTsKIAkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfb3V0LCBiaC0+b3V0cmVxLAogCQkJCSZiaC0+b3V0cmVxX2J1c3ksICZiaC0+c3RhdGUpOwogCkBAIC0zODU5LDcgKzM4NzUsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkgewogCQljdXJsdW4gPSAmZnNnLT5sdW5zW2ldOwotCQljdXJsdW4tPnJvID0gcm9baV07CisJCWN1cmx1bi0+cm8gPSBtb2RfZGF0YS5yb1tpXTsKIAkJY3VybHVuLT5kZXYucGFyZW50ID0gJmdhZGdldC0+ZGV2OwogCQljdXJsdW4tPmRldi5kcml2ZXIgPSAmZnNnX2RyaXZlci5kcml2ZXI7CiAJCWRldl9zZXRfZHJ2ZGF0YSgmY3VybHVuLT5kZXYsIGZzZyk7CkBAIC0zODc2LDggKzM4OTIsOSBAQAogCQkJa3JlZl9nZXQoJmZzZy0+cmVmKTsKIAkJfQogCi0JCWlmIChmaWxlW2ldICYmICpmaWxlW2ldKSB7Ci0JCQlpZiAoKHJjID0gb3Blbl9iYWNraW5nX2ZpbGUoY3VybHVuLCBmaWxlW2ldKSkgIT0gMCkKKwkJaWYgKG1vZF9kYXRhLmZpbGVbaV0gJiYgKm1vZF9kYXRhLmZpbGVbaV0pIHsKKwkJCWlmICgocmMgPSBvcGVuX2JhY2tpbmdfZmlsZShjdXJsdW4sCisJCQkJCW1vZF9kYXRhLmZpbGVbaV0pKSAhPSAwKQogCQkJCWdvdG8gb3V0OwogCQl9IGVsc2UgaWYgKCFtb2RfZGF0YS5yZW1vdmFibGUpIHsKIAkJCUVSUk9SKGZzZywgIm5vIGZpbGUgZ2l2ZW4gZm9yIExVTiVkXG4iLCBpKTsKQEAgLTM5NTMsNiArMzk3MCw5IEBACiAJZm9yIChpID0gMDsgaSA8IE5VTV9CVUZGRVJTOyArK2kpIHsKIAkJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gJmZzZy0+YnVmZmhkc1tpXTsKIAorCQkvKiBBbGxvY2F0ZSBmb3IgdGhlIGJ1bGstaW4gZW5kcG9pbnQuICBXZSBhc3N1bWUgdGhhdAorCQkgKiB0aGUgYnVmZmVyIHdpbGwgYWxzbyB3b3JrIHdpdGggdGhlIGJ1bGstb3V0IChhbmQKKwkJICogaW50ZXJydXB0LWluKSBlbmRwb2ludC4gKi8KIAkJYmgtPmJ1ZiA9IHVzYl9lcF9hbGxvY19idWZmZXIoZnNnLT5idWxrX2luLCBtb2RfZGF0YS5idWZsZW4sCiAJCQkJJmJoLT5kbWEsIEdGUF9LRVJORUwpOwogCQlpZiAoIWJoLT5idWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKaW5kZXggYzQwODE0MC4uYWE4MGYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApAQCAtMTAwLDkgKzEwMCw5IEBACiAjZGVmaW5lIGdhZGdldF9pc19tdXNiaHNmYyhnKQkwCiAjZW5kaWYKIAotLyogTWVudG9yIGhpZ2ggc3BlZWQgImR1YWwgcm9sZSIgY29udHJvbGxlciwgcGVyaXBoZXJhbCBtb2RlICovCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQkhEUkMKLSNkZWZpbmUgZ2FkZ2V0X2lzX211c2JoZHJjKGcpCSFzdHJjbXAoIm11c2JoZHJjX3VkYyIsIChnKS0+bmFtZSkKKy8qIE1lbnRvciBoaWdoIHNwZWVkICJkdWFsIHJvbGUiIGNvbnRyb2xsZXIsIGluIHBlcmlwaGVyYWwgcm9sZSAqLworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQworI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhkcmMoZykJIXN0cmNtcCgibXVzYl9oZHJjIiwgKGcpLT5uYW1lKQogI2Vsc2UKICNkZWZpbmUgZ2FkZ2V0X2lzX211c2JoZHJjKGcpCTAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCAzZjYxOGNlLi4wZWIwMTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtODEwLDcgKzgxMCw3IEBACiAJCWlmICh2YWx1ZSA9PSAwKQogCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9FTkFCTEVEOwogCQlicmVhazsKLSNpZmRlZglISUdIU1BFRUQKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgogCQkvKiBmYWlscyBpZiBjYWxsZXIgZGlkbid0IHByb3ZpZGUgdGhhdCBkZXNjcmlwdG9yLi4uICovCiAJCXZhbHVlID0gdXNiX2VwX2VuYWJsZSAoZXAsICZkYXRhLT5oc19kZXNjKTsKQEAgLTk4Miw3ICs5ODIsNyBAQAogCQkJLyogYXNzdW1lIHRoYXQgd2FzIFNFVF9DT05GSUdVUkFUSU9OICovCiAJCQlpZiAoZGV2LT5jdXJyZW50X2NvbmZpZykgewogCQkJCXVuc2lnbmVkIHBvd2VyOwotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCQkJCWlmIChkZXYtPmdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCiAJCQkJCXBvd2VyID0gZGV2LT5oc19jb25maWctPmJNYXhQb3dlcjsKIAkJCQllbHNlCkBAIC0xMjYyLDcgKzEyNjIsNyBAQAogICogVW5yZWNvZ25pemVkIGVwMCByZXF1ZXN0cyBtYXkgYmUgaGFuZGxlZCBpbiB1c2VyIHNwYWNlLgogICovCiAKLSNpZmRlZglISUdIU1BFRUQKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKIHN0YXRpYyB2b2lkIG1ha2VfcXVhbGlmaWVyIChzdHJ1Y3QgZGV2X2RhdGEgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yCQlxdWFsOwpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKIGNvbmZpZ19idWYgKHN0cnVjdCBkZXZfZGF0YSAqZGV2LCB1OCB0eXBlLCB1bnNpZ25lZCBpbmRleCkKIHsKIAlpbnQJCWxlbjsKLSNpZmRlZiBISUdIU1BFRUQKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKIAlpbnQJCWhzOwogI2VuZGlmCiAKQEAgLTEyOTksNyArMTI5OSw3IEBACiAJaWYgKGluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSNpZmRlZiBISUdIU1BFRUQKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKIAlocyA9IChkZXYtPmdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpOwogCWlmICh0eXBlID09IFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcpCiAJCWhzID0gIWhzOwpAQCAtMTMzNSwxMiArMTMzNSwxMiBAQAogCQlkZXYtPnN0YXRlID0gU1RBVEVfQ09OTkVDVEVEOwogCQlkZXYtPmRldi0+Yk1heFBhY2tldFNpemUwID0gZ2FkZ2V0LT5lcDAtPm1heHBhY2tldDsKIAotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCQlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCAmJiBkZXYtPmhzX2NvbmZpZyA9PSAwKSB7CiAJCQlFUlJPUiAoZGV2LCAibm8gaGlnaCBzcGVlZCBjb25maWc/P1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotI2VuZGlmCS8qIEhJR0hTUEVFRCAqLworI2VuZGlmCS8qIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCAqLwogCiAJCUlORk8gKGRldiwgImNvbm5lY3RlZFxuIik7CiAJCWV2ZW50ID0gbmV4dF9ldmVudCAoZGV2LCBHQURHRVRGU19DT05ORUNUKTsKQEAgLTEzNTIsMTEgKzEzNTIsMTEgQEAKIAkJCS8qIC4uLiBkb3duX3RyeWxvY2sgKCZkYXRhLT5sb2NrKSAuLi4gKi8KIAkJCWlmIChkYXRhLT5zdGF0ZSAhPSBTVEFURV9FUF9ERUZFUl9FTkFCTEUpCiAJCQkJY29udGludWU7Ci0jaWZkZWYJSElHSFNQRUVECisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECiAJCQlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKIAkJCQl2YWx1ZSA9IHVzYl9lcF9lbmFibGUgKGVwLCAmZGF0YS0+aHNfZGVzYyk7CiAJCQllbHNlCi0jZW5kaWYJLyogSElHSFNQRUVEICovCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCiAJCQkJdmFsdWUgPSB1c2JfZXBfZW5hYmxlIChlcCwgJmRhdGEtPmRlc2MpOwogCQkJaWYgKHZhbHVlKSB7CiAJCQkJRVJST1IgKGRldiwgImRlZmVycmVkICVzIGVuYWJsZSAtLT4gJWRcbiIsCkBAIC0xMzkxLDcgKzEzOTEsNyBAQAogCQkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSBzaXplb2YgKmRldi0+ZGV2KTsKIAkJCXJlcS0+YnVmID0gZGV2LT5kZXY7CiAJCQlicmVhazsKLSNpZmRlZglISUdIU1BFRUQKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKIAkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKIAkJCWlmICghZGV2LT5oc19jb25maWcpCiAJCQkJYnJlYWs7CkBAIC0xNDI4LDcgKzE0MjgsNyBAQAogCQkJLy8gdXNlciBtb2RlIGV4cGVjdGVkIHRvIGRpc2FibGUgZW5kcG9pbnRzCiAJCX0gZWxzZSB7CiAJCQl1OAljb25maWcsIHBvd2VyOwotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCQkJaWYgKGdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKIAkJCQljb25maWcgPSBkZXYtPmhzX2NvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZTsKIAkJCQlwb3dlciA9IGRldi0+aHNfY29uZmlnLT5iTWF4UG93ZXI7CkBAIC0xNjE0LDYgKzE2MTQsNyBAQAogCQkJCWRhdGEsICZlcF9jb25maWdfb3BlcmF0aW9ucywKIAkJCQkmZGF0YS0+ZGVudHJ5KTsKIAkJaWYgKCFkYXRhLT5pbm9kZSkgeworCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChlcCwgZGF0YS0+cmVxKTsKIAkJCWtmcmVlIChkYXRhKTsKIAkJCWdvdG8gZW5vbWVtOwogCQl9CkBAIC0xNzI4LDcgKzE3MjksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlciA9IHsKLSNpZmRlZglISUdIU1BFRUQKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKIAkuc3BlZWQJCT0gVVNCX1NQRUVEX0hJR0gsCiAjZWxzZQogCS5zcGVlZAkJPSBVU0JfU1BFRURfRlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IGZiNzNkYzEuLjBiOTI5MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMjYsNiArMjYsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBQTFggVGVjaG5vbG9neSwgSW5jLgogICoKKyAqIE1vZGlmaWVkIFNldGggTGV2eSAyMDA1IFBMWCBUZWNobm9sb2d5LCBJbmMuIHRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIDIyODIgY2hpcAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTcxLDggKzczLDggQEAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKIAotI2RlZmluZQlEUklWRVJfREVTQwkJIlBMWCBORVQyMjgwIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiCi0jZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkiMjAwNSBGZWIgMDMiCisjZGVmaW5lCURSSVZFUl9ERVNDCQkiUExYIE5FVDIyOHggVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxlciIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCSIyMDA1IFNlcHQgMjciCiAKICNkZWZpbmUJRE1BX0FERFJfSU5WQUxJRAkofihkbWFfYWRkcl90KTApCiAjZGVmaW5lCUVQX0RPTlRVU0UJCTEzCS8qIG5vbnplcm8gKi8KQEAgLTExOCw3ICsxMjAsNyBAQAogLyogZW5hYmxlX3N1c3BlbmQgLS0gV2hlbiBlbmFibGVkLCB0aGUgZHJpdmVyIHdpbGwgcmVzcG9uZCB0bwogICogVVNCIHN1c3BlbmQgcmVxdWVzdHMgYnkgcG93ZXJpbmcgZG93biB0aGUgTkVUMjI4MC4gIE90aGVyd2lzZSwKICAqIFVTQiBzdXNwZW5kIHJlcXVlc3RzIHdpbGwgYmUgaWdub3JlZC4gIFRoaXMgaXMgYWNjZXB0aWJsZSBmb3IKLSAqIHNlbGYtcG93ZXJlZCBkZXZpY2VzLCBhbmQgaGVscHMgYXZvaWQgc29tZSBxdWlya3MuCisgKiBzZWxmLXBvd2VyZWQgZGV2aWNlcwogICovCiBzdGF0aWMgaW50IGVuYWJsZV9zdXNwZW5kID0gMDsKIApAQCAtMjIzLDYgKzIyNSwxMSBAQAogCWVwLT5pc19pbiA9ICh0bXAgJiBVU0JfRElSX0lOKSAhPSAwOwogCWlmICghZXAtPmlzX2luKQogCQl3cml0ZWwgKCgxIDw8IFNFVF9OQUtfT1VUX1BBQ0tFVFMpLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CisJZWxzZSBpZiAoZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHgyMjgwKSB7CisJCS8qIEFkZGVkIGZvciAyMjgyLCBEb24ndCB1c2UgbmFrIHBhY2tldHMgb24gYW4gaW4gZW5kcG9pbnQsIHRoaXMgd2FzIGlnbm9yZWQgb24gMjI4MCAqLworCQl3cml0ZWwgKCgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUykKKwkJCXwgKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUpLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CisJfQogCiAJd3JpdGVsICh0bXAsICZlcC0+cmVncy0+ZXBfY2ZnKTsKIApAQCAtMjMyLDggKzIzOSw5IEBACiAJCXdyaXRlbCAodG1wLCAmZGV2LT5yZWdzLT5wY2lpcnFlbmIwKTsKIAogCQl0bXAgPSAoMSA8PCBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFKQotCQkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFRfRU5BQkxFKQotCQkJfCByZWFkbCAoJmVwLT5yZWdzLT5lcF9pcnFlbmIpOworCQkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJaWYgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4MjI4MCkKKwkJCXRtcCB8PSByZWFkbCAoJmVwLT5yZWdzLT5lcF9pcnFlbmIpOwogCQl3cml0ZWwgKHRtcCwgJmVwLT5yZWdzLT5lcF9pcnFlbmIpOwogCX0gZWxzZSB7CQkJCS8qIGRtYSwgcGVyLXJlcXVlc3QgKi8KIAkJdG1wID0gKDEgPDwgKDggKyBlcC0+bnVtKSk7CS8qIGNvbXBsZXRpb24gKi8KQEAgLTMxNCwxMCArMzIyLDE4IEBACiAJLyogaW5pdCB0byBvdXIgY2hvc2VuIGRlZmF1bHRzLCBub3RhYmx5IHNvIHRoYXQgd2UgTkFLIE9VVAogCSAqIHBhY2tldHMgdW50aWwgdGhlIGRyaXZlciBxdWV1ZXMgYSByZWFkICgrbm90ZSBlcnJhdHVtIDAxMTIpCiAJICovCi0JdG1wID0gKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUU19NT0RFKQorCWlmICghZXAtPmlzX2luIHx8IGVwLT5kZXYtPnBkZXYtPmRldmljZSA9PSAweDIyODApIHsKKwkJdG1wID0gKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUU19NT0RFKQogCQl8ICgxIDw8IFNFVF9OQUtfT1VUX1BBQ0tFVFMpCiAJCXwgKDEgPDwgQ0xFQVJfRVBfSElERV9TVEFUVVNfUEhBU0UpCiAJCXwgKDEgPDwgQ0xFQVJfSU5URVJSVVBUX01PREUpOworCX0gZWxzZSB7CisJCS8qIGFkZGVkIGZvciAyMjgyICovCisJCXRtcCA9ICgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFKQorCQl8ICgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUykKKwkJfCAoMSA8PCBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSkKKwkJfCAoMSA8PCBDTEVBUl9JTlRFUlJVUFRfTU9ERSk7CisJfQogCiAJaWYgKGVwLT5udW0gIT0gMCkgewogCQl0bXAgfD0gKDEgPDwgQ0xFQVJfRU5EUE9JTlRfVE9HR0xFKQpAQCAtMzI2LDE0ICszNDIsMTggQEAKIAl3cml0ZWwgKHRtcCwgJmVwLT5yZWdzLT5lcF9yc3ApOwogCiAJLyogc2NydWIgbW9zdCBzdGF0dXMgYml0cywgYW5kIGZsdXNoIGFueSBmaWZvIHN0YXRlICovCi0Jd3JpdGVsICggICgxIDw8IFRJTUVPVVQpCisJaWYgKGVwLT5kZXYtPnBkZXYtPmRldmljZSA9PSAweDIyODApCisJCXRtcCA9ICgxIDw8IEZJRk9fT1ZFUkZMT1cpCisJCQl8ICgxIDw8IEZJRk9fVU5ERVJGTE9XKTsKKwllbHNlCisJCXRtcCA9IDA7CisKKwl3cml0ZWwgKHRtcCB8ICgxIDw8IFRJTUVPVVQpCiAJCXwgKDEgPDwgVVNCX1NUQUxMX1NFTlQpCiAJCXwgKDEgPDwgVVNCX0lOX05BS19TRU5UKQogCQl8ICgxIDw8IFVTQl9JTl9BQ0tfUkNWRCkKIAkJfCAoMSA8PCBVU0JfT1VUX1BJTkdfTkFLX1NFTlQpCiAJCXwgKDEgPDwgVVNCX09VVF9BQ0tfU0VOVCkKLQkJfCAoMSA8PCBGSUZPX09WRVJGTE9XKQotCQl8ICgxIDw8IEZJRk9fVU5ERVJGTE9XKQogCQl8ICgxIDw8IEZJRk9fRkxVU0gpCiAJCXwgKDEgPDwgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVCkKIAkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUKQpAQCAtNzE4LDcgKzczOCw3IEBACiAJICovCiAJaWYgKGVwLT5pc19pbikKIAkJZG1hY291bnQgfD0gKDEgPDwgRE1BX0RJUkVDVElPTik7Ci0JZWxzZSBpZiAoKGRtYWNvdW50ICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCkKKwlpZiAoKCFlcC0+aXNfaW4gJiYgKGRtYWNvdW50ICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCkgfHwgZXAtPmRldi0+cGRldi0+ZGV2aWNlICE9IDB4MjI4MCkKIAkJZG1hY291bnQgfD0gKDEgPDwgRU5EX09GX0NIQUlOKTsKIAogCXJlcS0+dmFsaWQgPSB2YWxpZDsKQEAgLTc2MCw5ICs3ODAsMTIgQEAKIHN0YXRpYyB2b2lkIHN0YXJ0X3F1ZXVlIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHUzMiBkbWFjdGwsIHUzMiB0ZF9kbWEpCiB7CiAJc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MJX19pb21lbSAqZG1hID0gZXAtPmRtYTsKKwl1bnNpZ25lZCBpbnQgdG1wID0gKDEgPDwgVkFMSURfQklUKSB8IChlcC0+aXNfaW4gPDwgRE1BX0RJUkVDVElPTik7CiAKLQl3cml0ZWwgKCgxIDw8IFZBTElEX0JJVCkgfCAoZXAtPmlzX2luIDw8IERNQV9ESVJFQ1RJT04pLAotCQkJJmRtYS0+ZG1hY291bnQpOworCWlmIChlcC0+ZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHgyMjgwKQorCQl0bXAgfD0gKDEgPDwgRU5EX09GX0NIQUlOKTsKKworCXdyaXRlbCAodG1wLCAmZG1hLT5kbWFjb3VudCk7CiAJd3JpdGVsIChyZWFkbCAoJmRtYS0+ZG1hc3RhdCksICZkbWEtPmRtYXN0YXQpOwogCiAJd3JpdGVsICh0ZF9kbWEsICZkbWEtPmRtYWRlc2MpOwpAQCAtMjExMCw3ICsyMTMzLDExIEBACiAJVkRFQlVHIChlcC0+ZGV2LCAiJXMgYWNrIGVwX3N0YXQgJTA4eCwgcmVxICVwXG4iLAogCQkJZXAtPmVwLm5hbWUsIHQsIHJlcSA/ICZyZXEtPnJlcSA6IDApOwogI2VuZGlmCi0Jd3JpdGVsICh0ICYgfigxIDw8IE5BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfc3RhdCk7CisJaWYgKCFlcC0+aXNfaW4gfHwgZXAtPmRldi0+cGRldi0+ZGV2aWNlID09IDB4MjI4MCkKKwkJd3JpdGVsICh0ICYgfigxIDw8IE5BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfc3RhdCk7CisJZWxzZQorCQkvKiBBZGRlZCBmb3IgMjI4MiAqLworCQl3cml0ZWwgKHQsICZlcC0+cmVncy0+ZXBfc3RhdCk7CiAKIAkvKiBmb3IgZXAwLCBtb25pdG9yIHRva2VuIGlycXMgdG8gY2F0Y2ggZGF0YSBzdGFnZSBsZW5ndGggZXJyb3JzCiAJICogYW5kIHRvIHN5bmNocm9uaXplIG9uIHN0YXR1cy4KQEAgLTIxMzksNyArMjE2Niw3IEBACiAJCQkJCWVwLT5zdG9wcGVkID0gMTsKIAkJCQkJc2V0X2hhbHQgKGVwKTsKIAkJCQkJbW9kZSA9IDI7Ci0JCQkJfSBlbHNlIGlmICghcmVxICYmIGVwLT5zdG9wcGVkKQorCQkJCX0gZWxzZSBpZiAoIXJlcSAmJiAhZXAtPnN0b3BwZWQpCiAJCQkJCXdyaXRlX2ZpZm8gKGVwLCBOVUxMKTsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTIyMTQsNyArMjI0MSw4IEBACiAJCQlpZiAobGlrZWx5IChyZXEpKSB7CiAJCQkJcmVxLT50ZC0+ZG1hY291bnQgPSAwOwogCQkJCXQgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9hdmFpbCk7Ci0JCQkJZG1hX2RvbmUgKGVwLCByZXEsIGNvdW50LCB0KTsKKwkJCQlkbWFfZG9uZSAoZXAsIHJlcSwgY291bnQsCisJCQkJCShlcC0+b3V0X292ZXJmbG93IHx8IHQpID8gLUVPVkVSRkxPVyA6IDApOwogCQkJfQogCiAJCQkvKiBhbHNvIGZsdXNoIHRvIHByZXZlbnQgZXJyYXR1bSAwMTA2IHRyb3VibGUgKi8KQEAgLTIyNTIsOSArMjI4MCw3IEBACiAJCS8qIGlmIHdlIHdyb3RlIGl0IGFsbCwgd2UncmUgdXN1YWxseSBkb25lICovCiAJCWlmIChyZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSB7CiAJCQlpZiAoZXAtPm51bSA9PSAwKSB7Ci0JCQkJLyogd2FpdCBmb3IgY29udHJvbCBzdGF0dXMgKi8KLQkJCQlpZiAobW9kZSAhPSAyKQotCQkJCQlyZXEgPSBOVUxMOworCQkJCS8qIHNlbmQgemxwcyB1bnRpbCB0aGUgc3RhdHVzIHN0YWdlICovCiAJCQl9IGVsc2UgaWYgKCFyZXEtPnJlcS56ZXJvIHx8IGxlbiAhPSBlcC0+ZXAubWF4cGFja2V0KQogCQkJCW1vZGUgPSAyOwogCQl9CkBAIC0yMzM3LDcgKzIzNjMsNyBAQAogCQkJdTMyCQkJcmF3IFsyXTsKIAkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJcjsKIAkJfSB1OwotCQlpbnQJCQkJdG1wID0gMDsKKwkJaW50CQkJCXRtcDsKIAkJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkJKnJlcTsKIAogCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pIHsKQEAgLTIzNjQsMTQgKzIzOTAsMTkgQEAKIAkJfQogCQllcC0+c3RvcHBlZCA9IDA7CiAJCWRldi0+cHJvdG9jb2xfc3RhbGwgPSAwOwotCQl3cml0ZWwgKCAgKDEgPDwgVElNRU9VVCkKKworCQlpZiAoZXAtPmRldi0+cGRldi0+ZGV2aWNlID09IDB4MjI4MCkKKwkJCXRtcCA9ICgxIDw8IEZJRk9fT1ZFUkZMT1cpCisJCQkJfCAoMSA8PCBGSUZPX1VOREVSRkxPVyk7CisJCWVsc2UKKwkJCXRtcCA9IDA7CisKKwkJd3JpdGVsICh0bXAgfCAoMSA8PCBUSU1FT1VUKQogCQkJfCAoMSA8PCBVU0JfU1RBTExfU0VOVCkKIAkJCXwgKDEgPDwgVVNCX0lOX05BS19TRU5UKQogCQkJfCAoMSA8PCBVU0JfSU5fQUNLX1JDVkQpCiAJCQl8ICgxIDw8IFVTQl9PVVRfUElOR19OQUtfU0VOVCkKIAkJCXwgKDEgPDwgVVNCX09VVF9BQ0tfU0VOVCkKLQkJCXwgKDEgPDwgRklGT19PVkVSRkxPVykKLQkJCXwgKDEgPDwgRklGT19VTkRFUkZMT1cpCiAJCQl8ICgxIDw8IFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFQpCiAJCQl8ICgxIDw8IFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQpCiAJCQl8ICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCkKQEAgLTIzODUsNiArMjQxNiw4IEBACiAJCWNwdV90b19sZTMycyAoJnUucmF3IFswXSk7CiAJCWNwdV90b19sZTMycyAoJnUucmF3IFsxXSk7CiAKKwkJdG1wID0gMDsKKwogI2RlZmluZQl3X3ZhbHVlCQlsZTE2X3RvX2NwdXAgKCZ1LnIud1ZhbHVlKQogI2RlZmluZQl3X2luZGV4CQlsZTE2X3RvX2NwdXAgKCZ1LnIud0luZGV4KQogI2RlZmluZQl3X2xlbmd0aAlsZTE2X3RvX2NwdXAgKCZ1LnIud0xlbmd0aCkKQEAgLTI1OTQsMTAgKzI2MjcsMTcgQEAKIAkJd3JpdGVsIChzdGF0LCAmZGV2LT5yZWdzLT5pcnFzdGF0MSk7CiAKIAkvKiBzb21lIHN0YXR1cyB3ZSBjYW4ganVzdCBpZ25vcmUgKi8KLQlzdGF0ICY9IH4oKDEgPDwgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUKQotCQkJfCAoMSA8PCBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUKQotCQkJfCAoMSA8PCBSRVNVTUVfSU5URVJSVVBUKQotCQkJfCAoMSA8PCBTT0ZfSU5URVJSVVBUKSk7CisJaWYgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4MjI4MCkKKwkJc3RhdCAmPSB+KCgxIDw8IENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVCkKKwkJCSAgfCAoMSA8PCBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUKQorCQkJICB8ICgxIDw8IFJFU1VNRV9JTlRFUlJVUFQpCisJCQkgIHwgKDEgPDwgU09GX0lOVEVSUlVQVCkpOworCWVsc2UKKwkJc3RhdCAmPSB+KCgxIDw8IENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVCkKKwkJCSAgfCAoMSA8PCBSRVNVTUVfSU5URVJSVVBUKQorCQkJICB8ICgxIDw8IFNPRl9ET1dOX0lOVEVSUlVQVCkKKwkJCSAgfCAoMSA8PCBTT0ZfSU5URVJSVVBUKSk7CisKIAlpZiAoIXN0YXQpCiAJCXJldHVybjsKIAkvLyBERUJVRyAoZGV2LCAiaXJxc3RhdDEgJTA4eFxuIiwgc3RhdCk7CkBAIC0yNzAyLDYgKzI3NDIsMTAgQEAKIHsKIAlzdHJ1Y3QgbmV0MjI4MAkJKmRldiA9IF9kZXY7CiAKKwkvKiBzaGFyZWQgaW50ZXJydXB0LCBub3Qgb3VycyAqLworCWlmICghKHJlYWRsKCZkZXYtPnJlZ3MtPmlycXN0YXQwKSAmICgxIDw8IElOVEFfQVNTRVJURUQpKSkKKwkJcmV0dXJuIElSUV9OT05FOworCiAJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKIAogCS8qIGhhbmRsZSBkaXNjb25uZWN0LCBkbWEsIGFuZCBtb3JlICovCkBAIC0yNzg5LDEzICsyODMzLDEzIEBACiAJfQogCiAJLyogYWxsb2MsIGFuZCBzdGFydCBpbml0ICovCi0JZGV2ID0ga21hbGxvYyAoc2l6ZW9mICpkZXYsIFNMQUJfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jIChzaXplb2YgKmRldiwgU0xBQl9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCl7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQltZW1zZXQgKGRldiwgMCwgc2l6ZW9mICpkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YSAocGRldiwgZGV2KTsKIAlzcGluX2xvY2tfaW5pdCAoJmRldi0+bG9jayk7CiAJZGV2LT5wZGV2ID0gcGRldjsKIAlkZXYtPmdhZGdldC5vcHMgPSAmbmV0MjI4MF9vcHM7CkBAIC0yOTA4LDcgKzI5NTIsNiBAQAogCWRldi0+Y2hpcHJldiA9IGdldF9pZHhfcmVnIChkZXYtPnJlZ3MsIFJFR19DSElQUkVWKSAmIDB4ZmZmZjsKIAogCS8qIGRvbmUgKi8KLQlwY2lfc2V0X2RydmRhdGEgKHBkZXYsIGRldik7CiAJSU5GTyAoZGV2LCAiJXNcbiIsIGRyaXZlcl9kZXNjKTsKIAlJTkZPIChkZXYsICJpcnEgJXMsIHBjaSBtZW0gJXAsIGNoaXAgcmV2ICUwNHhcbiIsCiAJCQlidWZwLCBiYXNlLCBkZXYtPmNoaXByZXYpOwpAQCAtMjkzOSw2ICsyOTgyLDEzIEBACiAJLmRldmljZSA9CTB4MjI4MCwKIAkuc3VidmVuZG9yID0JUENJX0FOWV9JRCwKIAkuc3ViZGV2aWNlID0JUENJX0FOWV9JRCwKK30sIHsKKwkuY2xhc3MgPSAJKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUpLAorCS5jbGFzc19tYXNrID0gCX4wLAorCS52ZW5kb3IgPQkweDE3Y2MsCisJLmRldmljZSA9CTB4MjI4MiwKKwkuc3VidmVuZG9yID0JUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlID0JUENJX0FOWV9JRCwKIAogfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCmluZGV4IGZmZjQ1MDkuLjk1N2Q2ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaApAQCAtMjIsNDIwICsyMiw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogTkVUMjI4MCBNRU1PUlkgTUFQUEVEIFJFR0lTVEVSUwotICoKLSAqIFRoZSByZWdpc3RlciBsYXlvdXQgY2FtZSBmcm9tIHRoZSBjaGlwIGRvY3VtZW50YXRpb24sIGFuZCB0aGUgYml0Ci0gKiBudW1iZXIgZGVmaW5pdGlvbnMgd2VyZSBleHRyYWN0ZWQgZnJvbSBjaGlwIHNwZWNpZmljYXRpb24uCi0gKgotICogVXNlIHRoZSBzaGlmdCBvcGVyYXRvciAoJzw8JykgdG8gYnVpbGQgYml0IG1hc2tzLCB3aXRoIHJlYWRsL3dyaXRlbAotICogdG8gYWNjZXNzIHRoZSByZWdpc3RlcnMgdGhyb3VnaCBQQ0kuCi0gKi8KLQotLyogbWFpbiByZWdpc3RlcnMsIEJBUjAgKyAweDAwMDAgKi8KLXN0cnVjdCBuZXQyMjgwX3JlZ3MgewotCS8vIG9mZnNldCAweDAwMDAKLQl1MzIJCWRldmluaXQ7Ci0jZGVmaW5lICAgICBMT0NBTF9DTE9DS19GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgRk9SQ0VfUENJX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIFBDSV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBQQ0lfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRklGT19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIENGR19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBQQ0lfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgVVNCX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIE04MDUxX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQllZWN0bDsKLSNkZWZpbmUgICAgIEVFUFJPTV9BRERSRVNTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSAgICAgRUVQUk9NX0NISVBfU0VMRUNUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lICAgICBFRVBST01fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgICAgIEVFUFJPTV9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSAgICAgRUVQUk9NX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lICAgICBFRVBST01fQ0hJUF9TRUxFQ1RfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgICAgIEVFUFJPTV9CWVRFX1JFQURfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgRUVQUk9NX0JZVEVfV1JJVEVfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBFRVBST01fUkVBRF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgRUVQUk9NX1dSSVRFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWVlY2xrZnJlcTsKLQl1MzIJCV91bnVzZWQwOwotCS8vIG9mZnNldCAweDAwMTAKLQotCXUzMgkJcGNpaXJxZW5iMDsJCS8qIGludGVycnVwdCBQQ0kgbWFzdGVyIC4uLiAqLwotI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlwY2lpcnFlbmIxOwotI2RlZmluZSAgICAgUENJX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgotI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQotI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9BU1NFUlRFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE4Ci0jZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQljcHVfaXJxZW5iMDsJCS8qIC4uLiBvciBvbmJvYXJkIDgwNTEgKi8KLSNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJY3B1X2lycWVuYjE7Ci0jZGVmaW5lICAgICBDUFVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDIwCi0jZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTkKLSNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQotCS8vIG9mZnNldCAweDAwMjAKLQl1MzIJCV91bnVzZWQxOwotCXUzMgkJdXNiaXJxZW5iMTsKLSNkZWZpbmUgICAgIFVTQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQotI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJaXJxc3RhdDA7Ci0jZGVmaW5lICAgICBJTlRBX0FTU0VSVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJaXJxc3RhdDE7Ci0jZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JLy8gb2Zmc2V0IDB4MDAzMAotCXUzMgkJaWR4YWRkcjsKLQl1MzIJCWlkeGRhdGE7Ci0JdTMyCQlmaWZvY3RsOwotI2RlZmluZSAgICAgUENJX0JBU0UyX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBJR05PUkVfRklGT19BVkFJTEFCSUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgUENJX0JBU0UyX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEZJRk9fQ09ORklHVVJBVElPTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlfdW51c2VkMjsKLQkvLyBvZmZzZXQgMHgwMDQwCi0JdTMyCQltZW1hZGRyOwotI2RlZmluZSAgICAgU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lICAgICBESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgICAgIEZJRk9fRElBR05PU1RJQ19TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgTUVNT1JZX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCW1lbWRhdGEwOwotCXUzMgkJbWVtZGF0YTE7Ci0JdTMyCQlfdW51c2VkMzsKLQkvLyBvZmZzZXQgMHgwMDUwCi0JdTMyCQlncGlvY3RsOwotI2RlZmluZSAgICAgR1BJTzNfTEVEX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBHUElPM19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIEdQSU8yX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgR1BJTzFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIEdQSU8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBHUElPM19PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgR1BJTzJfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIEdQSU8xX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBHUElPMF9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgR1BJTzNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEdQSU8yX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBHUElPMV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgR1BJTzBfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWdwaW9zdGF0OwotI2RlZmluZSAgICAgR1BJTzNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEdQSU8yX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBHUElPMV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgR1BJTzBfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiB1c2IgY29udHJvbCwgQkFSMCArIDB4MDA4MCAqLwotc3RydWN0IG5ldDIyODBfdXNiX3JlZ3MgewotCS8vIG9mZnNldCAweDAwODAKLQl1MzIJCXN0ZHJzcDsKLSNkZWZpbmUgICAgIFNUQUxMX1VOU1VQUE9SVEVEX1JFUVVFU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgU0VUX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBHRVRfT1RIRVJfU1BFRURfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfUVVBTElGSUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSAgICAgU0VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBFTkRQT0lOVF9TRVRfQ0xFQVJfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIERFVklDRV9TRVRfQ0xFQVJfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIEdFVF9TRVRfSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBHRVRfU0VUX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgR0VUX0NPTkZJR1VSQVRJT05fREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBHRVRfRU5EUE9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgR0VUX0lOVEVSRkFDRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlwcm9kdmVuZGlkOwotI2RlZmluZSAgICAgUFJPRFVDVF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBWRU5ET1JfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJcmVsbnVtOwotCXUzMgkJdXNiY3RsOwotI2RlZmluZSAgICAgU0VSSUFMX05VTUJFUl9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBQUk9EVUNUX0lEX1NUUklOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIFZFTkRPUl9JRF9TVFJJTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgVVNCX1JPT1RfUE9SVF9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBWQlVTX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIFRJTUVEX0RJU0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBTVVNQRU5EX0lNTUVESUFURUxZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgU0VMRl9QT1dFUkVEX1VTQl9ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFJFTU9URV9XQUtFVVBfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBQTUVfUE9MQVJJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgVVNCX0RFVEVDVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIFBNRV9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBERVZJQ0VfUkVNT1RFX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgU0VMRl9QT1dFUkVEX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQkvLyBvZmZzZXQgMHgwMDkwCi0JdTMyCQl1c2JzdGF0OwotI2RlZmluZSAgICAgSElHSF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEZVTExfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBHRU5FUkFURV9SRVNVTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgR0VORVJBVEVfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgICAgICAgICAgICAgICAgICAgIDQKLQl1MzIJCXhjdnJkaWFnOwotI2RlZmluZSAgICAgRk9SQ0VfSElHSF9TUEVFRF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lICAgICBGT1JDRV9GVUxMX1NQRUVEX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgICAgIFVTQl9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgTElORV9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBUUkFOU0NFSVZFUl9PUEVSQVRJT05fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgVFJBTlNDRUlWRVJfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFRFUk1JTkFUSU9OX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlzZXR1cDAxMjM7Ci0JdTMyCQlzZXR1cDQ1Njc7Ci0JLy8gb2Zmc2V0IDB4MDA5MAotCXUzMgkJX3VudXNlZDA7Ci0JdTMyCQlvdXJhZGRyOwotI2RlZmluZSAgICAgRk9SQ0VfSU1NRURJQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIE9VUl9VU0JfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlvdXJjb25maWc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogcGNpIGNvbnRyb2wsIEJBUjAgKyAweDAxMDAgKi8KLXN0cnVjdCBuZXQyMjgwX3BjaV9yZWdzIHsKLQkvLyBvZmZzZXQgMHgwMTAwCi0JdTMyCQkgcGNpbXN0Y3RsOwotI2RlZmluZSAgICAgUENJX0FSQklURVJfUEFSS19TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBQQ0lfTVVMVEkgTEVWRUxfQVJCSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX01FTU9SWV9XUklURV9BTkRfSU5WQUxJREFURV9FTkFCTEUgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfUkVBRF9NVUxUSVBMRV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRE1BX1JFQURfTElORV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ09NTUFORF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICAgICAgTUVNX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBJT19SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgICAgIENGR19SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgUENJX01BU1RFUl9SRUFEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgICAgICBQQ0lfTUFTVEVSX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFBDSV9NQVNURVJfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0JZVEVfV1JJVEVfRU5BQkxFUyAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJIHBjaW1zdGFkZHI7Ci0JdTMyCQkgcGNpbXN0ZGF0YTsKLQl1MzIJCSBwY2ltc3RzdGF0OwotI2RlZmluZSAgICAgUENJX0FSQklURVJfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFBDSV9FWFRFUk5BTF9BUkJJVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBQQ0lfSE9TVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIGRtYSBjb250cm9sLCBCQVIwICsgMHgwMTgwIC4uLiBhcnJheSBvZiBmb3VyIHN0cnVjdHMgbGlrZSB0aGlzLAotICogZm9yIGNoYW5uZWxzIDAuLjMuICBzZWUgYWxzbyBzdHJ1Y3QgbmV0MjI4MF9kbWE6ICBkZXNjcmlwdG9yCi0gKiB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBzb21lIG9mIHRoZXNlIHJlZ2lzdGVycy4KLSAqLwotc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgewkvKiBbMTEuN10gKi8KLQkvLyBvZmZzZXQgMHgwMTgwLCAweDAxYTAsIDB4MDFjMCwgMHgwMWUwLCAKLQl1MzIJCWRtYWN0bDsKLSNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgRE1BX0NMRUFSX0NPVU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBERVNDUklQVE9SX1BPTExJTkdfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgICAgICAgICBQT0xMX0NPTlRJTlVPVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFBPTExfMV9VU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICAgICAgUE9MTF8xMDBfVVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgICAgICBQT0xMXzFfTVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgRE1BX1ZBTElEX0JJVF9QT0xMSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lICAgICBETUFfVkFMSURfQklUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgRE1BX09VVF9BVVRPX1NUQVJUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIERNQV9QUkVFTVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBETUFfRklGT19WQUxJREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRE1BX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIERNQV9BRERSRVNTX0hPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlkbWFzdGF0OwotI2RlZmluZSAgICAgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBETUFfVFJBTlNBQ1RJT05fRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIERNQV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBETUFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJX3VudXNlZDAgWzJdOwotCS8vIG9mZnNldCAweDAxOTAsIDB4MDFiMCwgMHgwMWQwLCAweDAxZjAsIAotCXUzMgkJZG1hY291bnQ7Ci0jZGVmaW5lICAgICBWQUxJRF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgICAgIERNQV9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSAgICAgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lICAgICBFTkRfT0ZfQ0hBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgICAgICAgICBETUFfQllURV9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgxPDwyNCktMSkKLSNkZWZpbmUgICAgIERNQV9CWVRFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlkbWFhZGRyOwotCXUzMgkJZG1hZGVzYzsKLQl1MzIJCV91bnVzZWQxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIGRlZGljYXRlZCBlbmRwb2ludCByZWdpc3RlcnMsIEJBUjAgKyAweDAyMDAgKi8KLQotc3RydWN0IG5ldDIyODBfZGVwX3JlZ3MgewkvKiBbMTEuOF0gKi8KLQkvLyBvZmZzZXQgMHgwMjAwLCAweDAyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAKLQl1MzIJCWRlcF9jZmc7Ci0JLy8gb2Zmc2V0IDB4MDIwNCwgMHgwMjE0LCAweDIyNCwgMHgyMzQsIDB4MjQ0Ci0JdTMyCQlkZXBfcnNwOwotCXUzMgkJX3VudXNlZCBbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogY29uZmlndXJhYmxlIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDMwMCAuLi4gYXJyYXkgb2Ygc2V2ZW4gc3RydWN0cwotICogbGlrZSB0aGlzLCBmb3IgZXAwIHRoZW4gdGhlIGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgQS4uRgotICogZXAwIHJlc2VydmVkIGZvciBjb250cm9sOyBFIGFuZCBGIGhhdmUgb25seSA2NCBieXRlcyBvZiBmaWZvCi0gKi8KLXN0cnVjdCBuZXQyMjgwX2VwX3JlZ3MgewkvKiBbMTEuOV0gKi8KLQkvLyBvZmZzZXQgMHgwMzAwLCAweDAzMjAsIDB4MDM0MCwgMHgwMzYwLCAweDAzODAsIDB4MDNhMCwgMHgwM2MwCi0JdTMyCQllcF9jZmc7Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9CWVRFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEVORFBPSU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgRU5EUE9JTlRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIEVORFBPSU5UX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9OVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJZXBfcnNwOwotI2RlZmluZSAgICAgU0VUX05BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lICAgICBTRVRfRVBfSElERV9TVEFUVVNfUEhBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgICAgIFNFVF9FUF9GT1JDRV9DUkNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgU0VUX0lOVEVSUlVQVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBTRVRfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIFNFVF9OQUtfT1VUX1BBQ0tFVFNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgU0VUX0VORFBPSU5UX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIFNFVF9FTkRQT0lOVF9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgQ0xFQVJfRVBfSElERV9TVEFUVVNfUEhBU0UgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIENMRUFSX0VQX0ZPUkNFX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBDTEVBUl9JTlRFUlJVUFRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgQ0xFQVJfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBDTEVBUl9FTkRQT0lOVF9UT0dHTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgQ0xFQVJfRU5EUE9JTlRfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWVwX2lycWVuYjsKLSNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgNQotI2RlZmluZSAgICAgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWVwX3N0YXQ7Ci0jZGVmaW5lICAgICBGSUZPX1ZBTElEX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIEhJR0hfQkFORFdJRFRIX09VVF9UUkFOU0FDVElPTl9QSUQgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSAgICAgVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBVU0JfU1RBTExfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIFVTQl9JTl9OQUtfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSAgICAgVVNCX0lOX0FDS19SQ1ZEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lICAgICBVU0JfT1VUX1BJTkdfTkFLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIFVTQl9PVVRfQUNLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgRklGT19PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBGSUZPX1VOREVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIEZJRk9fRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRklGT19FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBGSUZPX0ZMVVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBOQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQkvLyBvZmZzZXQgMHgwMzEwLCAweDAzMzAsIDB4MDM1MCwgMHgwMzcwLCAweDAzOTAsIDB4MDNiMCwgMHgwM2QwCi0JdTMyCQllcF9hdmFpbDsKLQl1MzIJCWVwX2RhdGE7Ci0JdTMyCQlfdW51c2VkMCBbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNpbmNsdWRlIDxsaW51eC91c2IvbmV0MjI4MC5oPgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwppbmRleCA1MTQyNGY2Li42OGUzZDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKQEAgLTU3Miw5ICs1NzIsMTAgQEAKIAlzd2l0Y2ggKHN0YXR1cykgewogCiAJY2FzZSAwOiAJCQkvKiBub3JtYWwgY29tcGxldGlvbj8gKi8KLQkJaWYgKGVwID09IGRldi0+b3V0X2VwKQorCQlpZiAoZXAgPT0gZGV2LT5vdXRfZXApIHsKIAkJCWNoZWNrX3JlYWRfZGF0YSAoZGV2LCBlcCwgcmVxKTsKLQkJZWxzZQorCQkJbWVtc2V0IChyZXEtPmJ1ZiwgMHg1NSwgcmVxLT5sZW5ndGgpOworCQl9IGVsc2UKIAkJCXJlaW5pdF93cml0ZV9kYXRhIChkZXYsIGVwLCByZXEpOwogCQlicmVhazsKIApAQCAtNjI2LDYgKzYyNyw4IEBACiAKIAlpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkKIAkJcmVpbml0X3dyaXRlX2RhdGEgKGVwLT5kcml2ZXJfZGF0YSwgZXAsIHJlcSk7CisJZWxzZQorCQltZW1zZXQgKHJlcS0+YnVmLCAweDU1LCByZXEtPmxlbmd0aCk7CiAKIAlzdGF0dXMgPSB1c2JfZXBfcXVldWUgKGVwLCByZXEsIGdmcF9mbGFncyk7CiAJaWYgKHN0YXR1cykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCmluZGV4IDFlMDNmMWEuLmExYmQyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogLyogUENJIGRyaXZlciBzZWxlY3Rpb24gbWV0YWRhdGE7IFBDSSBob3RwbHVnZ2luZyB1c2VzIHRoaXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzIFtdID0geyB7CiAJLyogaGFuZGxlIGFueSBVU0IgMi4wIEVIQ0kgY29udHJvbGxlciAqLwotCVBDSV9ERVZJQ0VfQ0xBU1MoKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MjApLCB+MCksCisJUENJX0RFVklDRV9DTEFTUyhQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9FSENJLCB+MCksCiAJLmRyaXZlcl9kYXRhID0JKHVuc2lnbmVkIGxvbmcpICZlaGNpX3BjaV9oY19kcml2ZXIsCiAJfSwKIAl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYwppbmRleCA5ODAwMzBkNi4uNmI3MzUwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KIAogI2lmbmRlZiBDT05GSUdfQVJDSF9BVDkxUk05MjAwCi0jZXJyb3IgIlRoaXMgZmlsZSBpcyBBVDkxUk05MjAwIGJ1cyBnbHVlLiAgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBtdXN0IGJlIGRlZmluZWQuIgorI2Vycm9yICJDT05GSUdfQVJDSF9BVDkxUk05MjAwIG11c3QgYmUgZGVmaW5lZC4iCiAjZW5kaWYKIAogLyogaW50ZXJmYWNlIGFuZCBmdW5jdGlvbiBjbG9ja3MgKi8KQEAgLTg0LDggKzg0LDYgQEAKICAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCiAgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAogICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgotICoKLSAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHByb2JlKCkuCiAgKi8KIGludCB1c2JfaGNkX2F0OTFfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTE0OCw3ICsxNDYsNiBAQAogfQogCiAKLS8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCiAvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KIAogLyoqCkBAIC0xNjYsMTEgKzE2MywxMSBAQAogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAJYXQ5MV9zdG9wX2hjKHBkZXYpOwogCWlvdW5tYXAoaGNkLT5yZWdzKTsKLSAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAKLSAJY2xrX3B1dChmY2xrKTsKLSAJY2xrX3B1dChpY2xrKTsKLSAJZmNsayA9IGljbGsgPSBOVUxMOworCWNsa19wdXQoZmNsayk7CisJY2xrX3B1dChpY2xrKTsKKwlmY2xrID0gaWNsayA9IE5VTEw7CiAKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CiAJcmV0dXJuIDA7CkBAIC0yMzUsOCArMjMyLDggQEAKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKIAogI2lmZGVmIENPTkZJR19QTQotCS5odWJfc3VzcGVuZCA9CQlvaGNpX2h1Yl9zdXNwZW5kLAotCS5odWJfcmVzdW1lID0JCW9oY2lfaHViX3Jlc3VtZSwKKwkuYnVzX3N1c3BlbmQgPQkJb2hjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQlvaGNpX2J1c19yZXN1bWUsCiAjZW5kaWYKIAkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKIH07CkBAIC0yNTQsMjEgKzI1MSwyMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG9oY2lfaGNkX2F0OTFfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKLXsKLQlwcmludGsoIiVzKCVzOiVkKTogbm90IGltcGxlbWVudGVkIHlldFxuIiwKLQkJX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CiAKKy8qIFJFVklTSVQgc3VzcGVuZC9yZXN1bWUgbG9vayAidG9vIiBzaW1wbGUgaGVyZSAqLworCitzdGF0aWMgaW50CitvaGNpX2hjZF9hdDkxX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCit7CiAJY2xrX2Rpc2FibGUoZmNsayk7CisJY2xrX2Rpc2FibGUoaWNsayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1MzIgc3RhdGUpCitzdGF0aWMgaW50IG9oY2lfaGNkX2F0OTFfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCIlcyglczolZCk6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsCi0JCV9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwotCisJY2xrX2VuYWJsZShpY2xrKTsKIAljbGtfZW5hYmxlKGZjbGspOwogCiAJcmV0dXJuIDA7CkBAIC0yNzgsNiArMjc1LDggQEAKICNkZWZpbmUgb2hjaV9oY2RfYXQ5MV9kcnZfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAorTU9EVUxFX0FMSUFTKCJhdDkxcm05MjAwLW9oY2kiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfYXQ5MV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX2F0OTFfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfYXQ5MV9kcnZfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDU0NGY3NTguLjczZjVhMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTg2Myw3ICs4NjMsNyBAQAogCQlpID0gb2hjaS0+bnVtX3BvcnRzOwogCQl3aGlsZSAoaS0tKQogCQkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX1BTUywKLQkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt0ZW1wXSk7CisJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbaV0pOwogCQlvaGNpX2RiZyAob2hjaSwgInJlc3RhcnQgY29tcGxldGVcbiIpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwppbmRleCAxYmZlOTZmLi5iMjY4NTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKIAkvKiBoYW5kbGUgYW55IFVTQiBPSENJIGNvbnRyb2xsZXIgKi8KLQlQQ0lfREVWSUNFX0NMQVNTKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MTAsIH4wKSwKKwlQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19TRVJJQUxfVVNCX09IQ0ksIH4wKSwKIAkuZHJpdmVyX2RhdGEgPQkodW5zaWduZWQgbG9uZykgJm9oY2lfcGNpX2hjX2RyaXZlciwKIAl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IGFjZGU4ODYuLmZhZmU3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKQEAgLTE4NSw2ICsxODUsOSBAQAogCS8qIFNlbGVjdCBQb3dlciBNYW5hZ2VtZW50IE1vZGUgKi8KIAlweGEyN3hfb2hjaV9zZWxlY3RfcG1tKGluZi0+cG9ydF9tb2RlKTsKIAorCWlmIChpbmYtPnBvd2VyX2J1ZGdldCkKKwkJaGNkLT5wb3dlcl9idWRnZXQgPSBpbmYtPnBvd2VyX2J1ZGdldDsKKwogCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CiAKIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBTQV9JTlRFUlJVUFQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKaW5kZXggNjgyYmYyMi4uMWRhNWRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCkBAIC0zMCw2ICszMCw3IEBACiAvKiBjbG9jayBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBoY2QgKi8KIAogc3RhdGljIHN0cnVjdCBjbGsgKmNsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICp1c2JfY2xrOwogCiAvKiBmb3J3YXJkIGRlZmluaXRpb25zICovCiAKQEAgLTM3LDcgKzM4LDcgQEAKIAogLyogY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KIAotc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKnRvX3MzYzI0MTBfaW5mbyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQorc3RhdGljIHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICp0b19zM2MyNDEwX2luZm8oc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAlyZXR1cm4gaGNkLT5zZWxmLmNvbnRyb2xsZXItPnBsYXRmb3JtX2RhdGE7CiB9CkBAIC00Nyw2ICs0OCwxMCBAQAogCXN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICppbmZvID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWRldl9kYmcoJmRldi0+ZGV2LCAiczNjMjQxMF9zdGFydF9oYzpcbiIpOworCisJY2xrX2VuYWJsZSh1c2JfY2xrKTsKKwltZGVsYXkoMik7CQkJLyogbGV0IHRoZSBidXMgY2xvY2sgc3RhYmlsaXNlICovCisKIAljbGtfZW5hYmxlKGNsayk7CiAKIAlpZiAoaW5mbyAhPSBOVUxMKSB7CkBAIC03NSw2ICs4MCw3IEBACiAJfQogCiAJY2xrX2Rpc2FibGUoY2xrKTsKKwljbGtfZGlzYWJsZSh1c2JfY2xrKTsKIH0KIAogLyogb2hjaV9zM2MyNDEwX2h1Yl9zdGF0dXNfZGF0YQpAQCAtMzE2LDcgKzMyMiw4IEBACiAgKgogKi8KIAotdm9pZCB1c2JfaGNkX3MzYzI0MTBfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZAordXNiX2hjZF9zM2MyNDEwX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAJczNjMjQxMF9zdG9wX2hjKGRldik7CkBAIC0zMzQsOCArMzQxLDggQEAKICAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KICAqCiAgKi8KLWludCB1c2JfaGNkX3MzYzI0MTBfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdXNiX2hjZF9zM2MyNDEwX3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IE5VTEw7CiAJaW50IHJldHZhbDsKQEAgLTM1MywxNCArMzYwLDIxIEBACiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIik7CiAJCXJldHZhbCA9IC1FQlVTWTsKLQkJZ290byBlcnIwOworCQlnb3RvIGVycl9wdXQ7CiAJfQogCi0JY2xrID0gY2xrX2dldChOVUxMLCAidXNiLWhvc3QiKTsKKwljbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgInVzYi1ob3N0Iik7CiAJaWYgKElTX0VSUihjbGspKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiY2Fubm90IGdldCB1c2ItaG9zdCBjbG9ja1xuIik7CiAJCXJldHZhbCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnJfbWVtOworCX0KKworCXVzYl9jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgInVwbGwiKTsKKwlpZiAoSVNfRVJSKHVzYl9jbGspKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiY2Fubm90IGdldCB1c2ItaG9zdCBjbG9ja1xuIik7CisJCXJldHZhbCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2NsazsKIAl9CiAKIAlzM2MyNDEwX3N0YXJ0X2hjKGRldiwgaGNkKTsKQEAgLTM2OSwyNiArMzgzLDI5IEBACiAJaWYgKCFoY2QtPnJlZ3MpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAKIAlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOwogCiAJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBTQV9JTlRFUlJVUFQpOwogCWlmIChyZXR2YWwgIT0gMCkKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3JlbWFwOwogCiAJcmV0dXJuIDA7CiAKLSBlcnIyOgorIGVycl9pb3JlbWFwOgogCXMzYzI0MTBfc3RvcF9oYyhkZXYpOwogCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwljbGtfcHV0KHVzYl9jbGspOworCisgZXJyX2NsazoKIAljbGtfcHV0KGNsayk7CiAKLSBlcnIxOgorIGVycl9tZW06CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAKLSBlcnIwOgorIGVycl9wdXQ6CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwppbmRleCA5ZTgxYzI2Li4xMDQ1Zjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlICJwY2ktcXVpcmtzLmgiCiAKIAogI2RlZmluZSBVSENJX1VTQkxFR1NVUAkJMHhjMAkJLyogbGVnYWN5IHN1cHBvcnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5oIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2NGVkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0xJTlVYX1VTQl9QQ0lfUVVJUktTX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfUENJX1FVSVJLU19ICisKK3ZvaWQgdWhjaV9yZXNldF9oYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBiYXNlKTsKK2ludCB1aGNpX2NoZWNrX2FuZF9yZXNldF9oYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBiYXNlKTsKKworI2VuZGlmICAvKiAgX19MSU5VWF9VU0JfUENJX1FVSVJLU19IICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCmluZGV4IDEzNGQyMDAuLjMwMmFhMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKQEAgLTY3LDExICs2NywxMSBAQAogc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbREVWX05BTUVfTEVOXSAgPSAic2w4MTFfY3MiOwogCiB0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgewotCWRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3QJCW5vZGU7CiB9IGxvY2FsX2luZm9fdDsKIAotc3RhdGljIHZvaWQgc2w4MTFfY3NfcmVsZWFzZShkZXZfbGlua190ICogbGluayk7CitzdGF0aWMgdm9pZCBzbDgxMV9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluayk7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0xMzgsNDEgKzEzOCwyNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgc2w4MTFfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHNsODExX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCURCRygwLCAic2w4MTFfY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfUFJFU0VOVDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlzbDgxMV9jc19yZWxlYXNlKGxpbmspOworCXNsODExX2NzX3JlbGVhc2UobGluayk7CiAKIAkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IGxvY2FsX2luZm9fdCBzdHJ1Y3QgKi8KIAlrZnJlZShsaW5rLT5wcml2KTsKIH0KIAotc3RhdGljIHZvaWQgc2w4MTFfY3NfcmVsZWFzZShkZXZfbGlua190ICogbGluaykKK3N0YXRpYyB2b2lkIHNsODExX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewotCiAJREJHKDAsICJzbDgxMV9jc19yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAotCS8qIFVubGluayB0aGUgZGV2aWNlIGNoYWluICovCi0JbGluay0+ZGV2ID0gTlVMTDsKLQorCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmcGxhdGZvcm1fZGV2KTsKLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCWlmIChsaW5rLT5pcnEuQXNzaWduZWRJUlEpCi0JCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwogfQogCi1zdGF0aWMgdm9pZCBzbDgxMV9jc19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgc2w4MTFfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdAkJaGFuZGxlID0gbGluay0+aGFuZGxlOwotCXN0cnVjdCBkZXZpY2UJCSpwYXJlbnQgPSAmaGFuZGxlX3RvX2RldihoYW5kbGUpOworCXN0cnVjdCBkZXZpY2UJCSpwYXJlbnQgPSAmaGFuZGxlX3RvX2RldihsaW5rKTsKIAlsb2NhbF9pbmZvX3QJCSpkZXYgPSBsaW5rLT5wcml2OwogCXR1cGxlX3QJCQl0dXBsZTsKIAljaXNwYXJzZV90CQlwYXJzZTsKQEAgLTE4OCwyNyArMTc0LDIzIEBACiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAJLyogTG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KIAlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywKLQkJCXBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOworCQkJcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmYpKTsKIAogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXdoaWxlICgxKSB7CiAJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QJKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CiAKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMAotCQkJCXx8IHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKQorCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMAorCQkJCXx8IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkKIAkJCQkJCSE9IDApCiAJCQlnb3RvIG5leHRfZW50cnk7CiAKQEAgLTIzNCwxMCArMjE2LDEwIEBACiAJCX0KIAogCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCWxpbmstPmNvbmYuVnBwID0KIAkJCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwogCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorCQkJbGluay0+Y29uZi5WcHAgPQogCQkJCWRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CiAKIAkJLyogd2UgbmVlZCBhbiBpbnRlcnJ1cHQgKi8KQEAgLTI1NCwxNSArMjM2LDE0IEBACiAJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CiAJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKIAotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAJCX0KIAkJYnJlYWs7CiAKIG5leHRfZW50cnk6Ci0JCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKTsKKwkJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwogCX0KIAogCS8qIHJlcXVpcmUgYW4gSVJRIGFuZCB0d28gcmVnaXN0ZXJzICovCkBAIC0yNzAsNzEgKzI1MSw0NiBAQAogCQlnb3RvIGNzX2ZhaWxlZDsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlDU19DSEVDSyhSZXF1ZXN0SVJRLAotCQkJcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworCQkJcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAllbHNlCiAJCWdvdG8gY3NfZmFpbGVkOwogCiAJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIAlzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgZHJpdmVyX25hbWUpOwogCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7Ci0JbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAotCSAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCi0JICAgICAgIGxpbmstPmNvbmYuVmNjLzEwLCBsaW5rLT5jb25mLlZjYyUxMCk7Ci0JaWYgKGxpbmstPmNvbmYuVnBwMSkKLQkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwMS8xMCwgbGluay0+Y29uZi5WcHAxJTEwKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiAiLAorCSAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLlZwcCkKKwkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwLzEwLCBsaW5rLT5jb25mLlZwcCUxMCk7CiAJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCiAJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7CiAJcHJpbnRrKCJcbiIpOwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQogCWlmIChzbDgxMV9oY19pbml0KHBhcmVudCwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpCiAJCQk8IDApIHsKIGNzX2ZhaWxlZDoKIAkJcHJpbnRrKCJzbDgxMV9jc19jb25maWcgZmFpbGVkXG4iKTsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAkJc2w4MTFfY3NfcmVsZWFzZShsaW5rKTsKLQkJbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwkJcmV0dXJuICAtRU5PREVWOwogCX0KLX0KLQotc3RhdGljIGludCBzbDgxMV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2w4MTFfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbDgxMV9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBzbDgxMV9jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCWRldl9saW5rX3QgKmxpbms7CiAKIAlsb2NhbCA9IGttYWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWwpCiAJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOwotCWxpbmsgPSAmbG9jYWwtPmxpbms7CisJbG9jYWwtPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbml0aWFsaXplICovCkBAIC0zNDMsMTYgKzI5OSw5IEBACiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKLQlsaW5rLT5jb25mLlZjYyA9IDMzOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXNsODExX2NzX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBzbDgxMV9jc19jb25maWcobGluayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBzbDgxMV9pZHNbXSA9IHsKQEAgLTM2NiwxMSArMzE1LDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAoY2hhciAqKWRyaXZlcl9uYW1lLAogCX0sCi0JLnByb2JlCQk9IHNsODExX2NzX2F0dGFjaCwKKwkucHJvYmUJCT0gc2w4MTFfY3NfcHJvYmUsCiAJLnJlbW92ZQkJPSBzbDgxMV9jc19kZXRhY2gsCiAJLmlkX3RhYmxlCT0gc2w4MTFfaWRzLAotCS5zdXNwZW5kCT0gc2w4MTFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNsODExX3Jlc3VtZSwKIH07CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCmluZGV4IDRlZGI4MzMuLmQyMjVlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKQEAgLTUwLDYgKzUwLDcgQEAKIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAjaW5jbHVkZSAidWhjaS1oY2QuaCIKKyNpbmNsdWRlICJwY2ktcXVpcmtzLmgiCiAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCkBAIC0xMDAsOSArMTAxLDYgQEAKICNpbmNsdWRlICJ1aGNpLXEuYyIKICNpbmNsdWRlICJ1aGNpLWh1Yi5jIgogCi1leHRlcm4gdm9pZCB1aGNpX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpOwotZXh0ZXJuIGludCB1aGNpX2NoZWNrX2FuZF9yZXNldF9oYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBiYXNlKTsKLQogLyoKICAqIEZpbmlzaCB1cCBhIGhvc3QgY29udHJvbGxlciByZXNldCBhbmQgdXBkYXRlIHRoZSByZWNvcmRlZCBzdGF0ZS4KICAqLwpAQCAtMTE3LDggKzExNSw3IEBACiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IHVoY2ktPnJoX251bXBvcnRzOyArK3BvcnQpCiAJCW91dHcoMCwgdWhjaS0+aW9fYWRkciArIFVTQlBPUlRTQzEgKyAocG9ydCAqIDIpKTsKIAotCXVoY2ktPnBvcnRfY19zdXNwZW5kID0gdWhjaS0+c3VzcGVuZGVkX3BvcnRzID0KLQkJCXVoY2ktPnJlc3VtaW5nX3BvcnRzID0gMDsKKwl1aGNpLT5wb3J0X2Nfc3VzcGVuZCA9IHVoY2ktPnJlc3VtaW5nX3BvcnRzID0gMDsKIAl1aGNpLT5yaF9zdGF0ZSA9IFVIQ0lfUkhfUkVTRVQ7CiAJdWhjaS0+aXNfc3RvcHBlZCA9IFVIQ0lfSVNfU1RPUFBFRDsKIAl1aGNpX3RvX2hjZCh1aGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOwpAQCAtODYxLDcgKzg1OCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB1aGNpX3BjaV9pZHNbXSA9IHsgewogCS8qIGhhbmRsZSBhbnkgVVNCIFVIQ0kgY29udHJvbGxlciAqLwotCVBDSV9ERVZJQ0VfQ0xBU1MoKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MDApLCB+MCksCisJUENJX0RFVklDRV9DTEFTUyhQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9VSENJLCB+MCksCiAJLmRyaXZlcl9kYXRhID0JKHVuc2lnbmVkIGxvbmcpICZ1aGNpX2RyaXZlciwKIAl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCmluZGV4IDRhNjljN2UuLmQ1YzhmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKQEAgLTQxNSw3ICs0MTUsNiBAQAogCiAJLyogU3VwcG9ydCBmb3IgcG9ydCBzdXNwZW5kL3Jlc3VtZS9yZXNldCAqLwogCXVuc2lnbmVkIGxvbmcgcG9ydF9jX3N1c3BlbmQ7CQkvKiBCaXQtYXJyYXlzIG9mIHBvcnRzICovCi0JdW5zaWduZWQgbG9uZyBzdXNwZW5kZWRfcG9ydHM7CiAJdW5zaWduZWQgbG9uZyByZXN1bWluZ19wb3J0czsKIAl1bnNpZ25lZCBsb25nIHBvcnRzX3RpbWVvdXQ7CQkvKiBUaW1lIHRvIHN0b3Agc2lnbmFsbGluZyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKaW5kZXggMTUyOTcxZC4uYzg0NTFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwpAQCAtODUsMTEgKzg1LDEwIEBACiB7CiAJaW50IHN0YXR1czsKIAotCWlmICh0ZXN0X2JpdChwb3J0LCAmdWhjaS0+c3VzcGVuZGVkX3BvcnRzKSkgeworCWlmIChpbncocG9ydF9hZGRyKSAmIChVU0JQT1JUU0NfU1VTUCB8IFVTQlBPUlRTQ19SRCkpIHsKIAkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19TVVNQIHwgVVNCUE9SVFNDX1JEKTsKLQkJY2xlYXJfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpOwotCQljbGVhcl9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKTsKLQkJc2V0X2JpdChwb3J0LCAmdWhjaS0+cG9ydF9jX3N1c3BlbmQpOworCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKSkKKwkJCXNldF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKTsKIAogCQkvKiBUaGUgY29udHJvbGxlciB3b24ndCBhY3R1YWxseSB0dXJuIG9mZiB0aGUgUkQgYml0IHVudGlsCiAJCSAqIGl0IGhhcyBoYWQgYSBjaGFuY2UgdG8gc2VuZCBhIGxvdy1zcGVlZCBFT1Agc2VxdWVuY2UsCkBAIC05Nyw2ICs5Niw3IEBACiAJCSAqIHNsaWdodGx5IGxvbmdlciBmb3IgZ29vZCBsdWNrLiAqLwogCQl1ZGVsYXkoNCk7CiAJfQorCWNsZWFyX2JpdChwb3J0LCAmdWhjaS0+cmVzdW1pbmdfcG9ydHMpOwogfQogCiAvKiBXYWl0IGZvciB0aGUgVUhDSSBjb250cm9sbGVyIGluIEhQJ3MgaUxPMiBzZXJ2ZXIgbWFuYWdlbWVudCBjaGlwLgpAQCAtMjY1LDggKzI2NSw2IEBACiAJCQl3UG9ydENoYW5nZSB8PSBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORDsKIAkJCWxzdGF0dXMgfD0gMTsKIAkJfQotCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cykpCi0JCQlsc3RhdHVzIHw9IDI7CiAJCWlmICh0ZXN0X2JpdChwb3J0LCAmdWhjaS0+cmVzdW1pbmdfcG9ydHMpKQogCQkJbHN0YXR1cyB8PSA0OwogCkBAIC0zMDksNyArMzA3LDYgQEAKIAogCQlzd2l0Y2ggKHdWYWx1ZSkgewogCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKLQkJCXNldF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CiAJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1NVU1ApOwogCQkJT0soMCk7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoKQEAgLTM0Myw4ICszNDAsMTEgQEAKIAkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUEVDKTsKIAkJCU9LKDApOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKLQkJCWlmICh0ZXN0X2JpdChwb3J0LCAmdWhjaS0+c3VzcGVuZGVkX3BvcnRzKSAmJgotCQkJCQkhdGVzdF9hbmRfc2V0X2JpdChwb3J0LAorCQkJaWYgKCEoaW53KHBvcnRfYWRkcikgJiBVU0JQT1JUU0NfU1VTUCkpIHsKKworCQkJCS8qIE1ha2UgY2VydGFpbiB0aGUgcG9ydCBpc24ndCBzdXNwZW5kZWQgKi8KKwkJCQl1aGNpX2ZpbmlzaF9zdXNwZW5kKHVoY2ksIHBvcnQsIHBvcnRfYWRkcik7CisJCQl9IGVsc2UgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnQsCiAJCQkJCQkmdWhjaS0+cmVzdW1pbmdfcG9ydHMpKSB7CiAJCQkJU0VUX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19SRCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCmluZGV4IDUyNDZiMzUuLjY1MDEwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZwpAQCAtMjAwLDQ1ICsyMDAsNDEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvd2VybWF0ZS4KIAotY29uZmlnIFVTQl9NVE9VQ0gKLQl0cmlzdGF0ZSAiTWljcm9Ub3VjaCBVU0IgVG91Y2hzY3JlZW4gRHJpdmVyIgorY29uZmlnIFVTQl9UT1VDSFNDUkVFTgorCXRyaXN0YXRlICJVU0IgVG91Y2hzY3JlZW4gRHJpdmVyIgogCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCiAJLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBNaWNyb1RvdWNoIChOb3cgM00pIFVTQiAKLQkgIFRvdWNoc2NyZWVuIGNvbnRyb2xsZXIuCi0KLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9tdG91Y2gudHh0PiBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbXRvdWNodXNiLgotCi1jb25maWcgVVNCX0lUTVRPVUNICi0JdHJpc3RhdGUgIklUTSBUb3VjaCBVU0IgVG91Y2hzY3JlZW4gRHJpdmVyIgotCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBJVE0gVG91Y2ggVVNCCi0JICBUb3VjaHNjcmVlbiBjb250cm9sbGVyLgotCi0JICBUaGlzIHRvdWNoc2NyZWVuIGlzIHVzZWQgaW4gTEcgMTUxMFNGIG1vbml0b3JzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpdG10b3VjaC4KLQotY29uZmlnIFVTQl9FR0FMQVgKLQl0cmlzdGF0ZSAiZUdhbGF4IFRvdWNoS2l0IFVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCi0JZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIGVHYWxheCBUb3VjaEtpdCBVU0IKLQkgIFRvdWNoc2NyZWVuIGNvbnRyb2xsZXIuCi0KLQkgIFRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIGEgWGVuYXJjIDcwMFRTViBtb25pdG9yCi0JICB3aXRoIGVHYWxheCB0b3VjaHNjcmVlbi4KKwkgIFVTQiBUb3VjaHNjcmVlbiBkcml2ZXIgZm9yOgorCSAgLSBlR2FsYXggVG91Y2hraXQgVVNCCisJICAtIFBhbkppdCBUb3VjaFNldCBVU0IKKwkgIC0gM00gTWljcm9Ub3VjaCBVU0IKKwkgIC0gSVRNCiAKIAkgIEhhdmUgYSBsb29rIGF0IDxodHRwOi8vbGludXguY2hhcHRlcjcuY2gvdG91Y2hraXQvPiBmb3IKIAkgIGEgdXNhZ2UgZGVzY3JpcHRpb24gYW5kIHRoZSByZXF1aXJlZCB1c2VyLXNwYWNlIHN0dWZmLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0b3VjaGtpdHVzYi4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2J0b3VjaHNjcmVlbi4KKworY29uZmlnIFVTQl9UT1VDSFNDUkVFTl9FR0FMQVgKKwlkZWZhdWx0IHkKKwlib29sICJlR2FsYXggZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfVE9VQ0hTQ1JFRU4KKworY29uZmlnIFVTQl9UT1VDSFNDUkVFTl9QQU5KSVQKKwlkZWZhdWx0IHkKKwlib29sICJQYW5KaXQgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfVE9VQ0hTQ1JFRU4KKworY29uZmlnIFVTQl9UT1VDSFNDUkVFTl8zTQorCWRlZmF1bHQgeQorCWJvb2wgIjNNL01pY3JvdG91Y2ggZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfVE9VQ0hTQ1JFRU4KKworY29uZmlnIFVTQl9UT1VDSFNDUkVFTl9JVE0KKwlkZWZhdWx0IHkKKwlib29sICJJVE0gZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfVE9VQ0hTQ1JFRU4KIAogY29uZmlnIFVTQl9ZRUFMSU5LCiAJdHJpc3RhdGUgIlllYWxpbmsgdXNiLXAxayB2b2lwIHBob25lIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZQppbmRleCBkNTEyZDlmLi43NjQxMTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZQpAQCAtMzcsNiArMzcsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9NVE9VQ0gpCSs9IG10b3VjaHVzYi5vCiBvYmotJChDT05GSUdfVVNCX0lUTVRPVUNIKQkrPSBpdG10b3VjaC5vCiBvYmotJChDT05GSUdfVVNCX0VHQUxBWCkJKz0gdG91Y2hraXR1c2Iubworb2JqLSQoQ09ORklHX1VTQl9UT1VDSFNDUkVFTikJKz0gdXNidG91Y2hzY3JlZW4ubwogb2JqLSQoQ09ORklHX1VTQl9QT1dFUk1BVEUpCSs9IHBvd2VybWF0ZS5vCiBvYmotJChDT05GSUdfVVNCX1dBQ09NKQkJKz0gd2Fjb20ubwogb2JqLSQoQ09ORklHX1VTQl9BQ0VDQUQpCSs9IGFjZWNhZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYwppbmRleCBkNGJmMTcwLi40MzUyNzNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKQEAgLTEzNzIsNiArMTM3MiwxMSBAQAogCQl1c2Jfa2lsbF91cmIoaGlkLT51cmJpbik7CiB9CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QQU5KSVQJCTB4MTM0YworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0lMVkVSQ1JFU1QJMHgwNjJhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0lMVkVSQ1JFU1RfS0IJMHgwMjAxCisKIC8qCiAgKiBJbml0aWFsaXplIGFsbCByZXBvcnRzCiAgKi8KQEAgLTE1NTIsNiArMTU1Nyw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfSFAJCTB4MDNmMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0hQX1VTQkhVQl9LQgkweDAyMGMKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0lCTQkJMHgwNGIzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSUJNX1VTQkhVQl9LQgkweDMwMDUKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0NSRUFUSVZFTEFCUwkweDA2MmEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DUkVBVElWRUxBQlNfU0lMVkVSQ1JFU1QJMHgwMjAxCiAKQEAgLTE2NTUsOSArMTY2MywxMiBAQAogCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MzLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzMgKyAxLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzMgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzMgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzMgKyA0LCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzMgKyA1LCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0NJTlRJUSwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9EVEYsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fRFRGICsgMywgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzIwLCBISURfUVVJUktfSUdOT1JFIH0sCiAKQEAgLTE2NzMsOCArMTY4NCwxMCBAQAogCXsgVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfVVNCSFVCX0tCLCBISURfUVVJUktfTk9HRVR9LAogCXsgVVNCX1ZFTkRPUl9JRF9DUkVBVElWRUxBQlMsIFVTQl9ERVZJQ0VfSURfQ1JFQVRJVkVMQUJTX1NJTFZFUkNSRVNULCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfSFAsIFVTQl9ERVZJQ0VfSURfSFBfVVNCSFVCX0tCLCBISURfUVVJUktfTk9HRVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfSUJNLCBVU0JfREVWSUNFX0lEX0lCTV9VU0JIVUJfS0IsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9UQU5HVE9QLCBVU0JfREVWSUNFX0lEX1RBTkdUT1BfVVNCUFMyLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEX0RVQUxfVVNCX0pPWVBBRCwgSElEX1FVSVJLX05PR0VUIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX1NJTFZFUkNSRVNULCBVU0JfREVWSUNFX0lEX1NJTFZFUkNSRVNUX0tCLCBISURfUVVJUktfTk9HRVQgfSwKIAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9QT1dFUk1PVVNFLCBISURfUVVJUktfMldIRUVMX1BPV0VSTU9VU0UgfSwKIAl7IFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVLCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNyB9LApAQCAtMTcwMSw2ICsxNzE0LDExIEBACiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMEEsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMEIsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAKKwl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDEsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwogCXsgMCwgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jCmluZGV4IDcyZTY5ODYuLmQ1YzkxZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jCkBAIC0zNCwxMiArMzQsNiBAQAogCiAjaW5jbHVkZSAiaGlkLmgiCiAKLS8qIERyaXZlcnMnIGluaXRpYWxpemluZyBmdW5jdGlvbnMgKi8KLWV4dGVybiBpbnQgaGlkX2xnZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKLWV4dGVybiBpbnQgaGlkX2xnM2RfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKLWV4dGVybiBpbnQgaGlkX3BpZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOwotZXh0ZXJuIGludCBoaWRfdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOwotCiAvKgogICogVGhpcyB0YWJsZSBjb250YWlucyBwb2ludGVycyB0byBpbml0aWFsaXplcnMuIFRvIGFkZCBzdXBwb3J0IGZvciBuZXcKICAqIGRldmljZXMsIHlvdSBuZWVkIHRvIGFkZCB0aGUgVVNCIHZlbmRvciBhbmQgcHJvZHVjdCBpZHMgaGVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1pbnB1dC5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKaW5kZXggY2IwZDgwZi4uMjViYzg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKQEAgLTUxMCw3ICs1MTAsNyBAQAogCQkJCWNhc2UgMHgwMjU6IG1hcF9rZXlfY2xlYXIoS0VZX1RWKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgwMjY6IG1hcF9rZXlfY2xlYXIoS0VZX01FTlUpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDAzMTogbWFwX2tleV9jbGVhcihLRVlfQVVESU8pOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDAzMjogbWFwX2tleV9jbGVhcihLRVlfU1VCVElUTEUpOwlicmVhazsKKwkJCQljYXNlIDB4MDMyOiBtYXBfa2V5X2NsZWFyKEtFWV9URVhUKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgwMzM6IG1hcF9rZXlfY2xlYXIoS0VZX0xBU1QpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDA0NzogbWFwX2tleV9jbGVhcihLRVlfTVAzKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgwNDg6IG1hcF9rZXlfY2xlYXIoS0VZX0RWRCk7CQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC5oIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKaW5kZXggNGUxYjc4NC4uOWM2MjgzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKQEAgLTUzMywzICs1MzMsOCBAQAogCQlyZXR1cm4gaGlkLT5mZl9ldmVudChoaWQsIGlucHV0LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CisKK2ludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworaW50IGhpZF90bWZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7CitpbnQgaGlkX3BpZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWRkZXYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCmluZGV4IDZkZDY2NjYuLmM0NjcwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCkBAIC0zMTcsNiArMzE3LDcgQEAKIAkJCQl9CiAKIAkJCQlzY2hlZHVsZSgpOworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQl9CiAKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jIGIvZHJpdmVycy91c2IvaW5wdXQva2V5c3Bhbl9yZW1vdGUuYwppbmRleCBiNGEwNTFiLi4zZDkxMTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2tleXNwYW5fcmVtb3RlLmMKQEAgLTI5Nyw2ICsyOTcsOCBAQAogCQkJcmVtb3RlLT5kYXRhLmJpdHNfbGVmdCAtPSA2OwogCQl9IGVsc2UgewogCQkJZXJyKCIlcyAtIEVycm9yIGluIG1lc3NhZ2UsIGludmFsaWQgdG9nZ2xlLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJlbW90ZS0+c3RhZ2UgPSAwOworCQkJcmV0dXJuOwogCQl9CiAKIAkJa2V5c3Bhbl9sb2FkX3Rlc3RlcihyZW1vdGUsIDUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhMDdjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMKQEAgLTAsMCArMSw2MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHVzYnRvdWNoc2NyZWVuLmMKKyAqIERyaXZlciBmb3IgVVNCIFRvdWNoc2NyZWVucywgc3VwcG9ydGluZyB0aG9zZSBkZXZpY2VzOgorICogIC0gZUdhbGF4IFRvdWNoa2l0CisgKiAgLSAzTS9NaWNyb3RvdWNoCisgKiAgLSBJVE0KKyAqICAtIFBhbkppdCBUb3VjaFNldAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IGJ5IERhbmllbCBSaXR6IDxkYW5pZWwucml0ekBnbXguY2g+CisgKiBDb3B5cmlnaHQgKEMpIGJ5IFRvZGQgRS4gSm9obnNvbiAobXRvdWNodXNiLmMpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogRHJpdmVyIGlzIGJhc2VkIG9uIHRvdWNoa2l0dXNiLmMKKyAqIC0gSVRNIHBhcnRzIGFyZSBmcm9tIGl0bXRvdWNoLmMKKyAqIC0gM00gcGFydHMgYXJlIGZyb20gbXRvdWNodXNiLmMKKyAqIC0gUGFuSml0IHBhcnRzIGFyZSBmcm9tIGFuIHVubWVyZ2VkIGRyaXZlciBieSBMYW5zbG90dCBHaXNoCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfaW5wdXQuaD4KKworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkidjAuMyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIkRhbmllbCBSaXR6IDxkYW5pZWwucml0ekBnbXguY2g+IgorI2RlZmluZSBEUklWRVJfREVTQwkJIlVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCisKK3N0YXRpYyBpbnQgc3dhcF94eTsKK21vZHVsZV9wYXJhbShzd2FwX3h5LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dhcF94eSwgIklmIHNldCBYIGFuZCBZIGF4ZXMgYXJlIHN3YXBwZWQuIik7CisKKy8qIGRldmljZSBzcGVjaWZjIGRhdGEvZnVuY3Rpb25zICovCitzdHJ1Y3QgdXNidG91Y2hfdXNiOworc3RydWN0IHVzYnRvdWNoX2RldmljZV9pbmZvIHsKKwlpbnQgbWluX3hjLCBtYXhfeGM7CisJaW50IG1pbl95YywgbWF4X3ljOworCWludCBtaW5fcHJlc3MsIG1heF9wcmVzczsKKwlpbnQgcmVwdF9zaXplOworCWludCBmbGFnczsKKworCXZvaWQgKCpwcm9jZXNzX3BrdCkgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgY2hhciAqcGt0LCBpbnQgbGVuKTsKKwlpbnQgICgqcmVhZF9kYXRhKSAgICh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKTsKKwlpbnQgICgqaW5pdCkgICAgICAgIChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCk7Cit9OworCisjZGVmaW5lIFVTQlRPVUNIX0ZMR19CVUZGRVIJMHgwMQorCisKKy8qIGEgdXNidG91Y2ggZGV2aWNlICovCitzdHJ1Y3QgdXNidG91Y2hfdXNiIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBidWZfbGVuOworCXN0cnVjdCB1cmIgKmlycTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gKnR5cGU7CisJY2hhciBuYW1lWzEyOF07CisJY2hhciBwaHlzWzY0XTsKK307CisKK3N0YXRpYyB2b2lkIHVzYnRvdWNoX3Byb2Nlc3NfcGt0KHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50IGxlbik7CisKKy8qIGRldmljZSB0eXBlcyAqLworZW51bSB7CisJREVWVFBZRV9EVU1NWSA9IC0xLAorCURFVlRZUEVfRUdBTEFYLAorCURFVlRZUEVfUEFOSklULAorCURFVlRZUEVfM00sCisJREVWVFlQRV9JVE0sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG91Y2hfZGV2aWNlc1tdID0geworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fRUdBTEFYCisJe1VTQl9ERVZJQ0UoMHgzODIzLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgwMTIzLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgwZWVmLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgwZWVmLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fUEFOSklUCisJe1VTQl9ERVZJQ0UoMHgxMzRjLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1BBTkpJVH0sCisJe1VTQl9ERVZJQ0UoMHgxMzRjLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1BBTkpJVH0sCisJe1VTQl9ERVZJQ0UoMHgxMzRjLCAweDAwMDMpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1BBTkpJVH0sCisJe1VTQl9ERVZJQ0UoMHgxMzRjLCAweDAwMDQpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1BBTkpJVH0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fM00KKwl7VVNCX0RFVklDRSgweDA1OTYsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfM019LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0lUTQorCXtVU0JfREVWSUNFKDB4MDQwMywgMHhmOWU5KSwgLmRyaXZlcl9pbmZvID0gREVWVFlQRV9JVE19LAorI2VuZGlmCisKKwl7fQorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVHYWxheCBwYXJ0CisgKi8KKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fRUdBTEFYCisKKyNkZWZpbmUgRUdBTEFYX1BLVF9UWVBFX01BU0sJCTB4RkUKKyNkZWZpbmUgRUdBTEFYX1BLVF9UWVBFX1JFUFQJCTB4ODAKKyNkZWZpbmUgRUdBTEFYX1BLVF9UWVBFX0RJQUcJCTB4MEEKKworc3RhdGljIGludCBlZ2FsYXhfcmVhZF9kYXRhKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpCit7CisJaWYgKChwa3RbMF0gJiBFR0FMQVhfUEtUX1RZUEVfTUFTSykgIT0gRUdBTEFYX1BLVF9UWVBFX1JFUFQpCisJCXJldHVybiAwOworCisJKnggPSAoKHBrdFszXSAmIDB4MEYpIDw8IDcpIHwgKHBrdFs0XSAmIDB4N0YpOworCSp5ID0gKChwa3RbMV0gJiAweDBGKSA8PCA3KSB8IChwa3RbMl0gJiAweDdGKTsKKwkqdG91Y2ggPSBwa3RbMF0gJiAweDAxOworCisJcmV0dXJuIDE7CisKK30KKworc3RhdGljIGludCBlZ2FsYXhfZ2V0X3BrdF9sZW4odW5zaWduZWQgY2hhciAqYnVmKQoreworCXN3aXRjaCAoYnVmWzBdICYgRUdBTEFYX1BLVF9UWVBFX01BU0spIHsKKwljYXNlIEVHQUxBWF9QS1RfVFlQRV9SRVBUOgorCQlyZXR1cm4gNTsKKworCWNhc2UgRUdBTEFYX1BLVF9UWVBFX0RJQUc6CisJCXJldHVybiBidWZbMV0gKyAyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlZ2FsYXhfcHJvY2VzcyhzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBwa3RfbGVuLCBidWZfbGVuLCBwb3M7CisKKwkvKiBpZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGRhdGEsIGFwcGVuZCAqLworCWlmICh1bmxpa2VseSh1c2J0b3VjaC0+YnVmX2xlbikpIHsKKwkJaW50IHRtcDsKKworCQkvKiBpZiBvbmx5IDEgYnl0ZSBpbiBidWZmZXIsIGFkZCBhbm90aGVyIG9uZSB0byBnZXQgbGVuZ3RoICovCisJCWlmICh1c2J0b3VjaC0+YnVmX2xlbiA9PSAxKQorCQkJdXNidG91Y2gtPmJ1ZmZlclsxXSA9IHBrdFswXTsKKworCQlwa3RfbGVuID0gZWdhbGF4X2dldF9wa3RfbGVuKHVzYnRvdWNoLT5idWZmZXIpOworCisJCS8qIHVua25vd24gcGFja2V0OiBkcm9wIGV2ZXJ5dGhpbmcgKi8KKwkJaWYgKCFwa3RfbGVuKQorCQkJcmV0dXJuOworCisJCS8qIGFwcGVuZCwgcHJvY2VzcyAqLworCQl0bXAgPSBwa3RfbGVuIC0gdXNidG91Y2gtPmJ1Zl9sZW47CisJCW1lbWNweSh1c2J0b3VjaC0+YnVmZmVyICsgdXNidG91Y2gtPmJ1Zl9sZW4sIHBrdCwgdG1wKTsKKwkJdXNidG91Y2hfcHJvY2Vzc19wa3QodXNidG91Y2gsIHJlZ3MsIHVzYnRvdWNoLT5idWZmZXIsIHBrdF9sZW4pOworCisJCWJ1ZmZlciA9IHBrdCArIHRtcDsKKwkJYnVmX2xlbiA9IGxlbiAtIHRtcDsKKwl9IGVsc2UgeworCQlidWZmZXIgPSBwa3Q7CisJCWJ1Zl9sZW4gPSBsZW47CisJfQorCisJLyogb25seSBvbmUgYnl0ZSBsZWZ0IGluIGJ1ZmZlciAqLworCWlmICh1bmxpa2VseShidWZfbGVuID09IDEpKSB7CisJCXVzYnRvdWNoLT5idWZmZXJbMF0gPSBidWZmZXJbMF07CisJCXVzYnRvdWNoLT5idWZfbGVuID0gMTsKKwkJcmV0dXJuOworCX0KKworCS8qIGxvb3Agb3ZlciB0aGUgYnVmZmVyICovCisJcG9zID0gMDsKKwl3aGlsZSAocG9zIDwgYnVmX2xlbikgeworCQkvKiBnZXQgcGFja2V0IGxlbiAqLworCQlwa3RfbGVuID0gZWdhbGF4X2dldF9wa3RfbGVuKGJ1ZmZlciArIHBvcyk7CisKKwkJLyogdW5rbm93biBwYWNrZXQ6IGRyb3AgZXZlcnl0aGluZyAqLworCQlpZiAodW5saWtlbHkoIXBrdF9sZW4pKQorCQkJcmV0dXJuOworCisJCS8qIGZ1bGwgcGFja2V0OiBwcm9jZXNzICovCisJCWlmIChsaWtlbHkocGt0X2xlbiA8PSBidWZfbGVuKSkgeworCQkJdXNidG91Y2hfcHJvY2Vzc19wa3QodXNidG91Y2gsIHJlZ3MsIGJ1ZmZlciArIHBvcywgcGt0X2xlbik7CisJCX0gZWxzZSB7CisJCQkvKiBpbmNvbXBsZXRlIHBhY2tldDogc2F2ZSBpbiBidWZmZXIgKi8KKwkJCW1lbWNweSh1c2J0b3VjaC0+YnVmZmVyLCBidWZmZXIgKyBwb3MsIGJ1Zl9sZW4gLSBwb3MpOworCQkJdXNidG91Y2gtPmJ1Zl9sZW4gPSBidWZfbGVuIC0gcG9zOworCQl9CisJCXBvcyArPSBwa3RfbGVuOworCX0KK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGFuSml0IFBhcnQKKyAqLworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fUEFOSklUCitzdGF0aWMgaW50IHBhbmppdF9yZWFkX2RhdGEodW5zaWduZWQgY2hhciAqcGt0LCBpbnQgKngsIGludCAqeSwgaW50ICp0b3VjaCwgaW50ICpwcmVzcykKK3sKKwkqeCA9ICgocGt0WzJdICYgMHgwRikgPDwgOCkgfCBwa3RbMV07CisJKnkgPSAoKHBrdFs0XSAmIDB4MEYpIDw8IDgpIHwgcGt0WzNdOworCSp0b3VjaCA9IHBrdFswXSAmIDB4MDE7CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogM00vTWljcm90b3VjaCBQYXJ0CisgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOXzNNCisKKyNkZWZpbmUgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCAgICAgICAgICAxCisjZGVmaW5lIE1UT1VDSFVTQl9SRVNFVCAgICAgICAgICAgICAgICAgNworI2RlZmluZSBNVE9VQ0hVU0JfUkVRX0NUUkxMUl9JRCAgICAgICAgIDEwCisKK3N0YXRpYyBpbnQgbXRvdWNoX3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKQoreworCSp4ID0gKHBrdFs4XSA8PCA4KSB8IHBrdFs3XTsKKwkqeSA9IChwa3RbMTBdIDw8IDgpIHwgcGt0WzldOworCSp0b3VjaCA9IChwa3RbMl0gJiAweDQwKSA/IDEgOiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbXRvdWNoX2luaXQoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKKwkgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX1JFU0VULAorCSAgICAgICAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlkYmcoIiVzIC0gdXNiX2NvbnRyb2xfbXNnIC0gTVRPVUNIVVNCX1JFU0VUIC0gYnl0ZXN8ZXJyOiAlZCIsCisJICAgIF9fRlVOQ1RJT05fXywgcmV0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKKwkgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCwKKwkgICAgICAgICAgICAgICAgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCSAgICAgICAgICAgICAgICAgICAgICAxLCAxLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJZGJnKCIlcyAtIHVzYl9jb250cm9sX21zZyAtIE1UT1VDSFVTQl9BU1lOQ19SRVBPUlQgLSBieXRlc3xlcnI6ICVkIiwKKwkgICAgX19GVU5DVElPTl9fLCByZXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElUTSBQYXJ0CisgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0lUTQorc3RhdGljIGludCBpdG1fcmVhZF9kYXRhKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpCit7CisJKnggPSAoKHBrdFswXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFszXSAmIDB4N0YpOworCSp4ID0gKChwa3RbMV0gJiAweDFGKSA8PCA3KSB8IChwa3RbNF0gJiAweDdGKTsKKwkqcHJlc3MgPSAoKHBrdFsyXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFs1XSAmIDB4N0YpOworCSp0b3VjaCA9IH5wa3RbN10gJiAweDIwOworCisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHRoZSBkaWZmZXJlbnQgZGV2aWNlIGRlc2NyaXB0b3JzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gdXNidG91Y2hfZGV2X2luZm9bXSA9IHsKKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0VHQUxBWAorCVtERVZUWVBFX0VHQUxBWF0gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4MDdmZiwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHgwN2ZmLAorCQkucmVwdF9zaXplCT0gMTYsCisJCS5mbGFncwkJPSBVU0JUT1VDSF9GTEdfQlVGRkVSLAorCQkucHJvY2Vzc19wa3QJPSBlZ2FsYXhfcHJvY2VzcywKKwkJLnJlYWRfZGF0YQk9IGVnYWxheF9yZWFkX2RhdGEsCisJfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9QQU5KSVQKKwlbREVWVFlQRV9QQU5KSVRdID0geworCQkubWluX3hjCQk9IDB4MCwKKwkJLm1heF94YwkJPSAweDBmZmYsCisJCS5taW5feWMJCT0gMHgwLAorCQkubWF4X3ljCQk9IDB4MGZmZiwKKwkJLnJlcHRfc2l6ZQk9IDgsCisJCS5yZWFkX2RhdGEJPSBwYW5qaXRfcmVhZF9kYXRhLAorCX0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fM00KKwlbREVWVFlQRV8zTV0gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4NDAwMCwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHg0MDAwLAorCQkucmVwdF9zaXplCT0gMTEsCisJCS5yZWFkX2RhdGEJPSBtdG91Y2hfcmVhZF9kYXRhLAorCQkuaW5pdAkJPSBtdG91Y2hfaW5pdCwKKwl9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0lUTQorCVtERVZUWVBFX0lUTV0gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4MGZmZiwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHgwZmZmLAorCQkubWF4X3ByZXNzCT0gMHhmZiwKKwkJLnJlcHRfc2l6ZQk9IDgsCisJCS5yZWFkX2RhdGEJPSBpdG1fcmVhZF9kYXRhLAorCX0sCisjZW5kaWYKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmljIFBhcnQKKyAqLworc3RhdGljIHZvaWQgdXNidG91Y2hfcHJvY2Vzc19wa3Qoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgY2hhciAqcGt0LCBpbnQgbGVuKQoreworCWludCB4LCB5LCB0b3VjaCwgcHJlc3M7CisJc3RydWN0IHVzYnRvdWNoX2RldmljZV9pbmZvICp0eXBlID0gdXNidG91Y2gtPnR5cGU7CisKKwlpZiAoIXR5cGUtPnJlYWRfZGF0YShwa3QsICZ4LCAmeSwgJnRvdWNoLCAmcHJlc3MpKQorCQkJcmV0dXJuOworCisJaW5wdXRfcmVncyh1c2J0b3VjaC0+aW5wdXQsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkodXNidG91Y2gtPmlucHV0LCBCVE5fVE9VQ0gsIHRvdWNoKTsKKworCWlmIChzd2FwX3h5KSB7CisJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LCBBQlNfWCwgeSk7CisJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LCBBQlNfWSwgeCk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19YLCB4KTsKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19ZLCB5KTsKKwl9CisJaWYgKHR5cGUtPm1heF9wcmVzcykKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19QUkVTU1VSRSwgcHJlc3MpOworCWlucHV0X3N5bmModXNidG91Y2gtPmlucHV0KTsKK30KKworCitzdGF0aWMgdm9pZCB1c2J0b3VjaF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FVElNRURPVVQ6CisJCS8qIHRoaXMgdXJiIGlzIHRpbWluZyBvdXQgKi8KKwkJZGJnKCIlcyAtIHVyYiB0aW1lZCBvdXQgLSB3YXMgdGhlIGRldmljZSB1bnBsdWdnZWQ/IiwKKwkJICAgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYnRvdWNoLT50eXBlLT5wcm9jZXNzX3BrdCh1c2J0b3VjaCwgcmVncywgdXNidG91Y2gtPmRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0OiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgdXNidG91Y2hfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IGlucHV0LT5wcml2YXRlOworCisJdXNidG91Y2gtPmlycS0+ZGV2ID0gdXNidG91Y2gtPnVkZXY7CisKKwlpZiAodXNiX3N1Ym1pdF91cmIodXNidG91Y2gtPmlycSwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYnRvdWNoX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gaW5wdXQtPnByaXZhdGU7CisKKwl1c2Jfa2lsbF91cmIodXNidG91Y2gtPmlycSk7Cit9CisKKworc3RhdGljIHZvaWQgdXNidG91Y2hfZnJlZV9idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCit7CisJaWYgKHVzYnRvdWNoLT5kYXRhKQorCQl1c2JfYnVmZmVyX2ZyZWUodWRldiwgdXNidG91Y2gtPnR5cGUtPnJlcHRfc2l6ZSwKKwkJICAgICAgICAgICAgICAgIHVzYnRvdWNoLT5kYXRhLCB1c2J0b3VjaC0+ZGF0YV9kbWEpOworCWtmcmVlKHVzYnRvdWNoLT5idWZmZXIpOworfQorCisKK3N0YXRpYyBpbnQgdXNidG91Y2hfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2J0b3VjaF9kZXZpY2VfaW5mbyAqdHlwZTsKKwlpbnQgZXJyOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCisJdXNidG91Y2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNidG91Y2hfdXNiKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF1c2J0b3VjaCB8fCAhaW5wdXRfZGV2KQorCQlnb3RvIG91dF9mcmVlOworCisJdHlwZSA9ICZ1c2J0b3VjaF9kZXZfaW5mb1tpZC0+ZHJpdmVyX2luZm9dOworCXVzYnRvdWNoLT50eXBlID0gdHlwZTsKKwlpZiAoIXR5cGUtPnByb2Nlc3NfcGt0KQorCQl0eXBlLT5wcm9jZXNzX3BrdCA9IHVzYnRvdWNoX3Byb2Nlc3NfcGt0OworCisJdXNidG91Y2gtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHR5cGUtPnJlcHRfc2l6ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xBQl9LRVJORUwsICZ1c2J0b3VjaC0+ZGF0YV9kbWEpOworCWlmICghdXNidG91Y2gtPmRhdGEpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAodHlwZS0+ZmxhZ3MgJiBVU0JUT1VDSF9GTEdfQlVGRkVSKSB7CisJCXVzYnRvdWNoLT5idWZmZXIgPSBrbWFsbG9jKHR5cGUtPnJlcHRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXNidG91Y2gtPmJ1ZmZlcikKKwkJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKKwl9CisKKwl1c2J0b3VjaC0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYnRvdWNoLT5pcnEpIHsKKwkJZGJnKCIlcyAtIHVzYl9hbGxvY191cmIgZmFpbGVkOiB1c2J0b3VjaC0+aXJxIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBvdXRfZnJlZV9idWZmZXJzOworCX0KKworCXVzYnRvdWNoLT51ZGV2ID0gdWRldjsKKwl1c2J0b3VjaC0+aW5wdXQgPSBpbnB1dF9kZXY7CisKKwlpZiAodWRldi0+bWFudWZhY3R1cmVyKQorCQlzdHJsY3B5KHVzYnRvdWNoLT5uYW1lLCB1ZGV2LT5tYW51ZmFjdHVyZXIsIHNpemVvZih1c2J0b3VjaC0+bmFtZSkpOworCisJaWYgKHVkZXYtPnByb2R1Y3QpIHsKKwkJaWYgKHVkZXYtPm1hbnVmYWN0dXJlcikKKwkJCXN0cmxjYXQodXNidG91Y2gtPm5hbWUsICIgIiwgc2l6ZW9mKHVzYnRvdWNoLT5uYW1lKSk7CisJCXN0cmxjYXQodXNidG91Y2gtPm5hbWUsIHVkZXYtPnByb2R1Y3QsIHNpemVvZih1c2J0b3VjaC0+bmFtZSkpOworCX0KKworCWlmICghc3RybGVuKHVzYnRvdWNoLT5uYW1lKSkKKwkJc25wcmludGYodXNidG91Y2gtPm5hbWUsIHNpemVvZih1c2J0b3VjaC0+bmFtZSksCisJCQkiVVNCIFRvdWNoc2NyZWVuICUwNHg6JTA0eCIsCisJCQkgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworCXVzYl9tYWtlX3BhdGgodWRldiwgdXNidG91Y2gtPnBoeXMsIHNpemVvZih1c2J0b3VjaC0+cGh5cykpOworCXN0cmxjcHkodXNidG91Y2gtPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKHVzYnRvdWNoLT5waHlzKSk7CisKKwlpbnB1dF9kZXYtPm5hbWUgPSB1c2J0b3VjaC0+bmFtZTsKKwlpbnB1dF9kZXYtPnBoeXMgPSB1c2J0b3VjaC0+cGh5czsKKwl1c2JfdG9faW5wdXRfaWQodWRldiwgJmlucHV0X2Rldi0+aWQpOworCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmaW50Zi0+ZGV2OworCWlucHV0X2Rldi0+cHJpdmF0ZSA9IHVzYnRvdWNoOworCWlucHV0X2Rldi0+b3BlbiA9IHVzYnRvdWNoX29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHVzYnRvdWNoX2Nsb3NlOworCisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fVE9VQ0gpXSA9IEJJVChCVE5fVE9VQ0gpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIHR5cGUtPm1pbl94YywgdHlwZS0+bWF4X3hjLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCB0eXBlLT5taW5feWMsIHR5cGUtPm1heF95YywgMCwgMCk7CisJaWYgKHR5cGUtPm1heF9wcmVzcykKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIHR5cGUtPm1pbl9wcmVzcywKKwkJICAgICAgICAgICAgICAgICAgICAgdHlwZS0+bWF4X3ByZXNzLCAwLCAwKTsKKworCXVzYl9maWxsX2ludF91cmIodXNidG91Y2gtPmlycSwgdXNidG91Y2gtPnVkZXYsCisJCQkgdXNiX3JjdmludHBpcGUodXNidG91Y2gtPnVkZXYsIDB4ODEpLAorCQkJIHVzYnRvdWNoLT5kYXRhLCB0eXBlLT5yZXB0X3NpemUsCisJCQkgdXNidG91Y2hfaXJxLCB1c2J0b3VjaCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisKKwl1c2J0b3VjaC0+aXJxLT50cmFuc2Zlcl9kbWEgPSB1c2J0b3VjaC0+ZGF0YV9kbWE7CisJdXNidG91Y2gtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkvKiBkZXZpY2Ugc3BlY2lmaWMgaW5pdCAqLworCWlmICh0eXBlLT5pbml0KSB7CisJCWVyciA9IHR5cGUtPmluaXQodXNidG91Y2gpOworCQlpZiAoZXJyKSB7CisJCQlkYmcoIiVzIC0gdHlwZS0+aW5pdCgpIGZhaWxlZCwgZXJyOiAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKKwkJfQorCX0KKworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh1c2J0b3VjaC0+aW5wdXQpOworCWlmIChlcnIpIHsKKwkJZGJnKCIlcyAtIGlucHV0X3JlZ2lzdGVyX2RldmljZSBmYWlsZWQsIGVycjogJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHVzYnRvdWNoKTsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9idWZmZXJzOgorCXVzYnRvdWNoX2ZyZWVfYnVmZmVycyh1ZGV2LCB1c2J0b3VjaCk7CitvdXRfZnJlZToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKHVzYnRvdWNoKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgdXNidG91Y2hfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghdXNidG91Y2gpCisJCXJldHVybjsKKworCWRiZygiJXMgLSB1c2J0b3VjaCBpcyBpbml0aWFsaXplZCwgY2xlYW5pbmcgdXAiLCBfX0ZVTkNUSU9OX18pOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJdXNiX2tpbGxfdXJiKHVzYnRvdWNoLT5pcnEpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHVzYnRvdWNoLT5pbnB1dCk7CisJdXNiX2ZyZWVfdXJiKHVzYnRvdWNoLT5pcnEpOworCXVzYnRvdWNoX2ZyZWVfYnVmZmVycyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCB1c2J0b3VjaCk7CisJa2ZyZWUodXNidG91Y2gpOworfQorCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNidG91Y2hfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0b3VjaF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInVzYnRvdWNoc2NyZWVuIiwKKwkucHJvYmUJCT0gdXNidG91Y2hfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB1c2J0b3VjaF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHVzYnRvdWNoX2RldmljZXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2J0b3VjaF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNidG91Y2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYnRvdWNoX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNidG91Y2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNidG91Y2hfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2J0b3VjaF9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9BTElBUygidG91Y2hraXR1c2IiKTsKK01PRFVMRV9BTElBUygiaXRtdG91Y2giKTsKK01PRFVMRV9BTElBUygibXRvdWNodXNiIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbS5jIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYwppbmRleCBkM2UxNWRmLi5jZjg0YzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKQEAgLTksNyArOSw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBFZ2dlcgkJPGVnZ2VyQHN1c2UuZGU+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDAxIEZyZWRlcmljIExlcGllZAkJPGZsZXBpZWRAbWFuZHJha2Vzb2Z0LmNvbT4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDQgUGFuYWdpb3RpcyBJc3NhcmlzCTxwYW5hZ2lvdGlzLmlzc2FyaXNAbWVjaC5rdWxldXZlbi5hYy5iZT4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBQaW5nIENoZW5nCQk8cGluZ2NAd2Fjb20uY29tPgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA2IFBpbmcgQ2hlbmcJCTxwaW5nY0B3YWNvbS5jb20+CiAgKgogICogIENoYW5nZUxvZzoKICAqICAgICAgdjAuMSAodnApICAtIEluaXRpYWwgcmVsZWFzZQpAQCAtNTYsNiArNTYsOCBAQAogICoJCSAgIC0gTWVyZ2VkIHdhY29tX2ludHVvczNfaXJxIGludG8gd2Fjb21faW50dW9zX2lycQogICoJdjEuNDQgKHBjKSAtIEFkZGVkIHN1cHBvcnQgZm9yIEdyYXBoaXJlNCwgQ2ludGlxIDcxMCwgSW50dW9zMyA2eDExLCBldGMuCiAgKgkJICAgLSBSZXBvcnQgRGV2aWNlIElEcworICoJdjEuNDUgKHBjKSAtIEFkZGVkIHN1cHBvcnQgZm9yIERURiA1MjEsIEludHVvczMgMTJ4MTIgYW5kIDEyeDE5CisgKgkJICAgLSBNaW5vciBkYXRhIHJlcG9ydCBmaXgKICAqLwogCiAvKgpAQCAtNzgsNyArODAsNyBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNDQiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS40NSIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBkcml2ZXIiCiAjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCkBAIC05OSw2ICsxMDEsOCBAQAogCVBMLAogCUlOVFVPUywKIAlJTlRVT1MzLAorCUlOVFVPUzMxMiwKKwlJTlRVT1MzMTksCiAJQ0lOVElRLAogCU1BWF9UWVBFCiB9OwpAQCAtMTI3LDcgKzEzMSwxOSBAQAogCWNoYXIgcGh5c1szMl07CiB9OwogCisjZGVmaW5lIFVTQl9SRVFfR0VUX1JFUE9SVAkweDAxCiAjZGVmaW5lIFVTQl9SRVFfU0VUX1JFUE9SVAkweDA5CisKK3N0YXRpYyBpbnQgdXNiX2dldF9yZXBvcnQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJCQl1bnNpZ25lZCBjaGFyIGlkLCB2b2lkICpidWYsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJdXNiX3JjdmN0cmxwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDApLAorCQlVU0JfUkVRX0dFVF9SRVBPUlQsIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJKHR5cGUgPDwgOCkgKyBpZCwgaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCWJ1Ziwgc2l6ZSwgMTAwKTsKK30KKwogc3RhdGljIGludCB1c2Jfc2V0X3JlcG9ydChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgY2hhciB0eXBlLAogCQkJCXVuc2lnbmVkIGNoYXIgaWQsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CkBAIC0yMDYsNyArMjIyLDggQEAKIAkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUEVOOwogCQkJaWQgPSBTVFlMVVNfREVWSUNFX0lEOwogCQl9Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgaWQpOyAvKiByZXBvcnQgaW4gcHJveGltaXR5IGZvciB0b29sICovCisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgcHJveCk7IC8qIHJlcG9ydCBpbiBwcm94aW1pdHkgZm9yIHRvb2wgKi8KKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCBpZCk7IC8qIHJlcG9ydCB0b29sIGlkICovCiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgZGF0YVszXSB8IChkYXRhWzJdIDw8IDcpIHwgKChkYXRhWzFdICYgMHgwMykgPDwgMTQpKTsKIAkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBkYXRhWzZdIHwgKGRhdGFbNV0gPDwgNykgfCAoKGRhdGFbNF0gJiAweDAzKSA8PCAxNCkpOwogCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7CkBAIC0yMzksNyArMjU2LDcgQEAKIAlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB3YWNvbS0+ZGV2OwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCwgaWQ7CiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgpAQCAtMjYzLDEyICsyODAsMTUgQEAKIAogCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKIAlpZiAoZGF0YVsxXSAmIDB4MDQpIHsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1JVQkJFUiwgKGRhdGFbMV0gJiAweDIwKSA/IEVSQVNFUl9ERVZJQ0VfSUQgOiAwKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1JVQkJFUiwgZGF0YVsxXSAmIDB4MjApOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwOCk7CisJCWlkID0gRVJBU0VSX0RFVklDRV9JRDsKIAl9IGVsc2UgewotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCAoZGF0YVsxXSAmIDB4MjApID8gU1RZTFVTX0RFVklDRV9JRCA6IDApOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCBkYXRhWzFdICYgMHgyMCk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGRhdGFbMV0gJiAweDAxKTsKKwkJaWQgPSBTVFlMVVNfREVWSUNFX0lEOwogCX0KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIGlkKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KIAlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzJdKSk7CiAJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVs0XSkpOwogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzZdKSk7CkBAIC0zMTIsNyArMzMyLDggQEAKIAl9CiAKIAlpbnB1dF9yZWdzKGRldiwgcmVncyk7Ci0JaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1BFTiwgU1RZTFVTX0RFVklDRV9JRCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1BFTiwgMSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCBTVFlMVVNfREVWSUNFX0lEKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KIAlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzFdKSk7CiAJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVszXSkpOwogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIChzaWduZWQgY2hhcilkYXRhWzZdICsgMTI3KTsKQEAgLTM1MCw2ICszNzEsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCisJaWYgKGRhdGFbMF0gPT0gOTkpIHJldHVybjsgLyogZm9yIFZvbGl0byB0YWJsZXRzICovCisKIAlpZiAoZGF0YVswXSAhPSAyKSB7CiAJCWRiZygid2Fjb21fZ3JhcGhpcmVfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKIAkJZ290byBleGl0OwpAQCAtMzc0LDEwICszOTcsMTAgQEAKIAkJCWNhc2UgMjogLyogTW91c2Ugd2l0aCB3aGVlbCAqLwogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzFdICYgMHgwNCk7CiAJCQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV9HNCkgewotCQkJCQlydyA9IGRhdGFbN10gJiAweDA0ID8gLShkYXRhWzddICYgMHgwMykgOiAoZGF0YVs3XSAmIDB4MDMpOwotCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCBydyk7CisJCQkJCXJ3ID0gZGF0YVs3XSAmIDB4MDQgPyAoZGF0YVs3XSAmIDB4MDMpLTQgOiAoZGF0YVs3XSAmIDB4MDMpOworCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAtcncpOwogCQkJCX0gZWxzZQotCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAoc2lnbmVkIGNoYXIpIGRhdGFbNl0pOworCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAtKHNpZ25lZCBjaGFyKSBkYXRhWzZdKTsKIAkJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAogCQkJY2FzZSAzOiAvKiBNb3VzZSB3aXRob3V0IHdoZWVsICovCkBAIC00MDYsMzkgKzQyOSwyNyBAQAogCQl9CiAJfQogCi0JaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzBdLCAoZGF0YVsxXSAmIDB4MTApID8gaWQgOiAwKTsKKwlpZiAoZGF0YVsxXSAmIDB4MTApCisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTUlTQywgaWQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCWVsc2UKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCAwKTsgLyogcmVzZXQgdG9vbCBpZCAqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFswXSwgZGF0YVsxXSAmIDB4MTApOwogCWlucHV0X3N5bmMoZGV2KTsKIAogCS8qIHNlbmQgcGFkIGRhdGEgKi8KIAlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IFdBQ09NX0c0KSB7Ci0JCS8qIGZpc3QgdGltZSBzZW5kaW5nIHBhZCBkYXRhICovCi0JCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9GSU5HRVIpIHsKLQkJCXdhY29tLT5pZFsxXSA9IDA7Ci0JCQl3YWNvbS0+c2VyaWFsWzFdID0gKGRhdGFbN10gJiAweDM4KSA+PiAyOwotCQl9Ci0JCWlmIChkYXRhWzddICYgMHhmOCkgeworCQlpZiAoKHdhY29tLT5zZXJpYWxbMV0gJiAweGMwKSAhPSAoZGF0YVs3XSAmIDB4ZjgpKSB7CisJCQl3YWNvbS0+aWRbMV0gPSAxOworCQkJd2Fjb20tPnNlcmlhbFsxXSA9IChkYXRhWzddICYgMHhmOCk7CiAJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzAsIChkYXRhWzddICYgMHg0MCkpOwogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl80LCAoZGF0YVs3XSAmIDB4ODApKTsKLQkJCWlmICgoKGRhdGFbN10gJiAweDM4KSA+PiAyKSA9PSAod2Fjb20tPnNlcmlhbFsxXSAmIDB4MGUpKQotCQkJCS8qIGFsdGVyIFJFTF9XSEVFTCB2YWx1ZSBzbyBYIGFwcHMgY2FuIGdldCBpdCAqLwotCQkJCXdhY29tLT5zZXJpYWxbMV0gKz0gKHdhY29tLT5zZXJpYWxbMV0gJiAweDAxKSA/IC0xIDogMTsKLQkJCWVsc2UKLQkJCQkgd2Fjb20tPnNlcmlhbFsxXSA9IChkYXRhWzddICYgMHgzOCApID4+IDI7Ci0KLQkJCS8qIGRvbid0IGFsdGVyIHRoZSB2YWx1ZSB3aGVuIHRoZXJlIGlzIG5vIHdoZWVsIGV2ZW50ICovCi0JCQlpZiAod2Fjb20tPnNlcmlhbFsxXSA9PSAxKQotCQkJCXdhY29tLT5zZXJpYWxbMV0gPSAwOwotCQkJcncgPSB3YWNvbS0+c2VyaWFsWzFdOwotCQkJcncgPSAocncgJiAweDA4KSA/IC0ocncgJiAweDA3KSA6IChydyAmIDB4MDcpOworCQkJcncgPSAoKGRhdGFbN10gJiAweDE4KSA+PiAzKSAtICgoZGF0YVs3XSAmIDB4MjApID4+IDMpOwogCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgcncpOwotCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9GSU5HRVI7Ci0JCQl3YWNvbS0+aWRbMV0gPSBkYXRhWzddICYgMHhmODsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMHhmMCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfRklOR0VSLCAweGYwKTsKIAkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGYwKTsKIAkJfSBlbHNlIGlmICh3YWNvbS0+aWRbMV0pIHsKIAkJCXdhY29tLT5pZFsxXSA9IDA7Ci0JCQl3YWNvbS0+c2VyaWFsWzFdID0gMDsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfRklOR0VSLCAwKTsKIAkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGYwKTsKIAkJfQogCQlpbnB1dF9zeW5jKGRldik7CkBAIC01MTYsMjEgKzUyNywzMSBAQAogCQkJZGVmYXVsdDogLyogVW5rbm93biB0b29sICovCiAJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1BFTjsKIAkJfQotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgd2Fjb20tPmlkW2lkeF0pOwotCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKLQkJaW5wdXRfc3luYyhkZXYpOworCQlpZighKCh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX0xFTlMpICYmCisJCQkJKCh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMzEyKQorCQkJCQl8fCAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzMxOSkpKSkgeworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCB3YWNvbS0+aWRbaWR4XSk7IC8qIHJlcG9ydCB0b29sIGlkICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgMSk7CisJCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwkJCWlucHV0X3N5bmMoZGV2KTsKKwkJfQogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBFeGl0IHJlcG9ydCAqLwogCWlmICgoZGF0YVsxXSAmIDB4ZmUpID09IDB4ODApIHsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIDApOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIDApOyAvKiByZXNldCB0b29sIGlkICovCiAJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOwogCQlpbnB1dF9zeW5jKGRldik7CiAJCXJldHVybiAxOwogCX0KIAotCXJldHVybiAwOworCWlmKCh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX0xFTlMpICYmICgod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzMxMikKKwkJCXx8ICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMzE5KSkpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHdhY29tX2ludHVvc19nZW5lcmFsKHN0cnVjdCB1cmIgKnVyYikKQEAgLTYwMCwxMCArNjIxLDkgQEAKIAkvKiBwYWQgcGFja2V0cy4gV29ya3MgYXMgYSBzZWNvbmQgdG9vbCBhbmQgaXMgYWx3YXlzIGluIHByb3ggKi8KIAlpZiAoZGF0YVswXSA9PSAxMikgewogCQkvKiBpbml0aWF0ZSB0aGUgcGFkIGFzIGEgZGV2aWNlICovCi0JCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9GSU5HRVIpIHsKKwkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX0ZJTkdFUikKIAkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfRklOR0VSOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCAxKTsKLQkJfQorCiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMCwgKGRhdGFbNV0gJiAweDAxKSk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMSwgKGRhdGFbNV0gJiAweDAyKSk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMiwgKGRhdGFbNV0gJiAweDA0KSk7CkBAIC02MTQsNiArNjM0LDExIEBACiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNywgKGRhdGFbNl0gJiAweDA4KSk7CiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsICgoZGF0YVsxXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVsyXSk7CiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlksICgoZGF0YVszXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVs0XSk7CisKKwkJaWYoKGRhdGFbNV0gJiAweDBmKSB8IChkYXRhWzZdICYgMHgwZikgfCAoZGF0YVsxXSAmIDB4MWYpIHwgZGF0YVsyXSkKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMSk7CisJCWVsc2UKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMCk7CiAJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGZmZmZmZmZmKTsKIAkJaW5wdXRfc3luYyhkZXYpOwogCQlnb3RvIGV4aXQ7CkBAIC02NzYsOCArNzAxLDggQEAKIAkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwNCk7CiAJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVs4XSAmIDB4MDgpOwogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgIGRhdGFbOF0gJiAweDEwKTsKLQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsICgoZGF0YVs4XSAmIDB4MDIpID4+IDEpCi0JCQkJCQkgLSAoZGF0YVs4XSAmIDB4MDEpKTsKKwkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIChkYXRhWzhdICYgMHgwMSkKKwkJCQkJCSAtICgoZGF0YVs4XSAmIDB4MDIpID4+IDEpKTsKIAogCQkJLyogSTMgMkQgbW91c2Ugc2lkZSBidXR0b25zICovCiAJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzMpIHsKQEAgLTY5NSw3ICs3MjAsOCBAQAogCQl9CiAJfQogCi0JaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIHdhY29tLT5pZFtpZHhdKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIHdhY29tLT5pZFtpZHhdKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgMSk7CiAJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CiAJaW5wdXRfc3luYyhkZXYpOwogCkBAIC03MzMsNyArNzU5LDggQEAKIAl7ICJXYWNvbSBQTDgwMCIsICAgICAgICAgOCwgICA3MjIwLCAgNTc4MCwgIDUxMSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3BsX2lycSB9LAogCXsgIldhY29tIFBMNzAwIiwgICAgICAgICA4LCAgIDY3NTgsICA1NDA2LCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKIAl7ICJXYWNvbSBQTDUxMCIsICAgICAgICAgOCwgICA2MjgyLCAgNDc2MiwgIDUxMSwgMzIsIFBMLAkgd2Fjb21fcGxfaXJxIH0sCi0JeyAiV2Fjb20gUEw3MTAiLCAgICAgICAgIDgsICAzNDA4MCwgMjc2NjAsICA1MTEsIDMyLCBQTCwJIHdhY29tX3BsX2lycSB9LAorCXsgIldhY29tIERUVTcxMCIsICAgICAgICA4LCAgMzQwODAsIDI3NjYwLCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKKwl7ICJXYWNvbSBEVEY1MjEiLCAgICAgICAgOCwgICA2MjgyLCAgNDc2MiwgIDUxMSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3BsX2lycSB9LAogCXsgIldhY29tIERURjcyMCIsICAgICAgICA4LCAgIDY4NTgsICA1NTA2LCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKIAl7ICJXYWNvbSBDaW50aXEgUGFydG5lciIsOCwgIDIwNDgwLCAxNTM2MCwgIDUxMSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3B0dV9pcnEgfSwKIAl7ICJXYWNvbSBJbnR1b3MyIDR4NSIsICAgMTAsIDEyNzAwLCAxMDYwMCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKQEAgLTc0NCw2ICs3NzEsOCBAQAogCXsgIldhY29tIEludHVvczMgNHg1IiwgICAxMCwgMjU0MDAsIDIwMzIwLCAxMDIzLCAxNSwgSU5UVU9TMywgICAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIEludHVvczMgNng4IiwgICAxMCwgNDA2NDAsIDMwNDgwLCAxMDIzLCAxNSwgSU5UVU9TMywgICAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIEludHVvczMgOXgxMiIsICAxMCwgNjA5NjAsIDQ1NzIwLCAxMDIzLCAxNSwgSU5UVU9TMywgICAgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczMgMTJ4MTIiLCAxMCwgNjA5NjAsIDYwOTYwLCAxMDIzLCAxNSwgSU5UVU9TMzEyLCAgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczMgMTJ4MTkiLCAxMCwgOTc1MzYsIDYwOTYwLCAxMDIzLCAxNSwgSU5UVU9TMzE5LCAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIEludHVvczMgNngxMSIsICAxMCwgNTQyMDQsIDMxNzUwLCAxMDIzLCAxNSwgSU5UVU9TMywgICAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIENpbnRpcSAyMVVYIiwgICAxMCwgODcyMDAsIDY1NjAwLCAxMDIzLCAxNSwgQ0lOVElRLCAgICAgd2Fjb21faW50dW9zX2lycSB9LAogCXsgIldhY29tIEludHVvczIgNng4IiwgICAxMCwgMjAzMjAsIDE2MjQwLCAxMDIzLCAxNSwgSU5UVU9TLCAgICAgd2Fjb21faW50dW9zX2lycSB9LApAQCAtNzc5LDYgKzgwOCw3IEBACiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzgpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzkpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzMpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MDMpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDEpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDIpIH0sCkBAIC03ODgsNiArODE4LDggQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzRikgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NykgfSwKQEAgLTgyMCw3ICs4NTIsNyBAQAogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJc3RydWN0IHdhY29tICp3YWNvbTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JY2hhciByZXBfZGF0YVsyXSA9IHsweDAyLCAweDAyfTsKKwljaGFyIHJlcF9kYXRhWzJdLCBsaW1pdCA9IDA7CiAKIAl3YWNvbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3YWNvbSksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwpAQCAtODU3LDYgKzg4OSw3IEBACiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgMCwgd2Fjb20tPmZlYXR1cmVzLT54X21heCwgNCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgMCwgd2Fjb20tPmZlYXR1cmVzLT55X21heCwgNCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIDAsIHdhY29tLT5mZWF0dXJlcy0+cHJlc3N1cmVfbWF4LCAwLCAwKTsKKwlpbnB1dF9kZXYtPmFic2JpdFtMT05HKEFCU19NSVNDKV0gfD0gQklUKEFCU19NSVNDKTsKIAogCXN3aXRjaCAod2Fjb20tPmZlYXR1cmVzLT50eXBlKSB7CiAJCWNhc2UgV0FDT01fRzQ6CkBAIC04NzUsNiArOTA4LDggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgSU5UVU9TMzoKKwkJY2FzZSBJTlRVT1MzMTI6CisJCWNhc2UgSU5UVU9TMzE5OgogCQljYXNlIENJTlRJUToKIAkJCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfRklOR0VSKTsKIAkJCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROXzApIHwgQklUKEJUTl8xKSB8IEJJVChCVE5fMikgfCBCSVQoQlROXzMpIHwgQklUKEJUTl80KSB8IEJJVChCVE5fNSkgfCBCSVQoQlROXzYpIHwgQklUKEJUTl83KTsKQEAgLTkxNiwxMCArOTUxLDEzIEBACiAKIAlpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uod2Fjb20tPmRldik7CiAKLQkvKiBhc2sgdGhlIHRhYmxldCB0byByZXBvcnQgdGFibGV0IGRhdGEgKi8KLQl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7Ci0JLyogcmVwZWF0IG9uY2UgKG5vdCBzdXJlIHdoeSB0aGUgZmlyc3QgY2FsbCBvZnRlbiBmYWlscykgKi8KLQl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7CisJLyogQXNrIHRoZSB0YWJsZXQgdG8gcmVwb3J0IHRhYmxldCBkYXRhLiBSZXBlYXQgdW50aWwgaXQgc3VjY2VlZHMgKi8KKwlkbyB7CisJCXJlcF9kYXRhWzBdID0gMjsKKwkJcmVwX2RhdGFbMV0gPSAyOworCQl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7CisJCXVzYl9nZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKKwl9IHdoaWxlIChyZXBfZGF0YVsxXSAhPSAyICYmIGxpbWl0KysgPCA1KTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgd2Fjb20pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCmluZGV4IDM4MjRkZjMuLjFmZDljYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2RlZmluZSBNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEggMTYKIHR5cGVkZWYgc3RydWN0IF9JTlRFTF9IRVhfUkVDT1JECkBAIC0xMTQsNiArMTE1LDcgQEAKIAogCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLwogCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMCk7CisJbXNsZWVwKDI1MCk7CS8qIGxldCBkZXZpY2Ugc2V0dGxlICovCiAKIAkvKiAyLiBXZSB1cGxvYWQgdGhlIEZQR0EgZmlybXdhcmUgaW50byB0aGUgRU1JCiAJICogTm90ZTogY29sbGVjdCB1cCB0byAxMDIzICh5ZXMhKSBieXRlcyBhbmQgc2VuZCB0aGVtIHdpdGgKQEAgLTE1MCw2ICsxNTIsNyBAQAogCQkJZ290byB3cmFwZXJyOwogCQl9CiAJfQorCW1zbGVlcCgyNTApOwkvKiBsZXQgZGV2aWNlIHNldHRsZSAqLwogCiAJLyogRGUtYXNzZXJ0IHJlc2V0IChsZXQgdGhlIENQVSBydW4pICovCiAJZXJyID0gZW1pMjZfc2V0X3Jlc2V0KGRldiwwKTsKQEAgLTE5Miw2ICsxOTUsNyBAQAogCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKIAkJZ290byB3cmFwZXJyOwogCX0KKwltc2xlZXAoMjUwKTsJLyogbGV0IGRldmljZSBzZXR0bGUgKi8KIAogCS8qIHJldHVybiAxIHRvIGZhaWwgdGhlIGRyaXZlciBpbmlhbGl6YXRpb24KIAkgKiBhbmQgZ2l2ZSByZWFsIGRyaXZlciBjaGFuZ2UgdG8gbG9hZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCmluZGV4IDUyZmVhMmUuLmZlMzUxMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2RlZmluZSBNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEggMTYKIHR5cGVkZWYgc3RydWN0IF9JTlRFTF9IRVhfUkVDT1JECkBAIC0xMjMsNiArMTI0LDcgQEAKIAogCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLwogCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMCk7CisJbXNsZWVwKDI1MCk7CS8qIGxldCBkZXZpY2Ugc2V0dGxlICovCiAKIAkvKiAyLiBXZSB1cGxvYWQgdGhlIEZQR0EgZmlybXdhcmUgaW50byB0aGUgRU1JCiAJICogTm90ZTogY29sbGVjdCB1cCB0byAxMDIzICh5ZXMhKSBieXRlcyBhbmQgc2VuZCB0aGVtIHdpdGgKQEAgLTE2Niw2ICsxNjgsNyBAQAogCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKIAkJZ290byB3cmFwZXJyOwogCX0KKwltc2xlZXAoMjUwKTsJLyogbGV0IGRldmljZSBzZXR0bGUgKi8KIAogCS8qIDQuIFdlIHB1dCB0aGUgcGFydCBvZiB0aGUgZmlybXdhcmUgdGhhdCBsaWVzIGluIHRoZSBleHRlcm5hbCBSQU0gaW50byB0aGUgRVotVVNCICovCiAKQEAgLTIyOCw2ICsyMzEsNyBAQAogCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKIAkJZ290byB3cmFwZXJyOwogCX0KKwltc2xlZXAoMjUwKTsJLyogbGV0IGRldmljZSBzZXR0bGUgKi8KIAogCWtmcmVlKGJ1Zik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKaW5kZXggOWQ1OWI5MC4uY2NjNWU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKQEAgLTM4MSw2ICszODEsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyspIHsKIAkJY2hhcgkJKmJ1ZjsKKwkJdW5zaWduZWQJajsKIAogCQlidWYgPSBremFsbG9jIChzaXplLCBTTEFCX0tFUk5FTCk7CiAJCWlmICghYnVmKSB7CkBAIC0zOTEsNiArMzkyLDE2IEBACiAJCS8qIGttYWxsb2MgcGFnZXMgYXJlIGFsd2F5cyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMhICovCiAJCXNnX2luaXRfb25lKCZzZ1tpXSwgYnVmLCBzaXplKTsKIAorCQlzd2l0Y2ggKHBhdHRlcm4pIHsKKwkJY2FzZSAwOgorCQkJLyogYWxyZWFkeSB6ZXJvZWQgKi8KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKQorCQkJCSpidWYrKyA9ICh1OCkgKGogJSA2Myk7CisJCQlicmVhazsKKwkJfQorCiAJCWlmICh2YXJ5KSB7CiAJCQlzaXplICs9IHZhcnk7CiAJCQlzaXplICU9IG1heDsKQEAgLTQyNSw2ICs0MzYsOCBAQAogCQl1c2Jfc2dfd2FpdCAocmVxKTsKIAkJcmV0dmFsID0gcmVxLT5zdGF0dXM7CiAKKwkJLyogRklYTUUgY2hlY2sgcmVzdWx0aW5nIGRhdGEgcGF0dGVybiAqLworCiAJCS8qIEZJWE1FIGlmIGVuZHBvaW50IGhhbHRlZCwgY2xlYXIgaGFsdCAoYW5kIGxvZykgKi8KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMgYi9kcml2ZXJzL3VzYi9uZXQvYXNpeC5jCmluZGV4IDMwOTQ5NzAuLjEyYjU5OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2FzaXguYwpAQCAtMzcsNyArMzcsNiBAQAogCiAjaW5jbHVkZSAidXNibmV0LmgiCiAKLQogLyogQVNJWCBBWDg4MTdYIGJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgRGV2aWNlcyAqLwogCiAjZGVmaW5lIEFYX0NNRF9TRVRfU1dfTUlJCQkweDA2CkBAIC0xMDksNyArMTA4LDcgQEAKICNkZWZpbmUgQVhfRUVQUk9NX01BR0lDCQkJMHhkZWFkYmVlZgogCiAvKiBUaGlzIHN0cnVjdHVyZSBjYW5ub3QgZXhjZWVkIHNpemVvZih1bnNpZ25lZCBsb25nIFs1XSkgQUtBIDIwIGJ5dGVzICovCi1zdHJ1Y3QgYXg4ODE3eF9kYXRhIHsKK3N0cnVjdCBhc2l4X2RhdGEgewogCXU4IG11bHRpX2ZpbHRlcltBWF9NQ0FTVF9GSUxURVJfU0laRV07CiB9OwogCkBAIC0xMjEsNyArMTIwLDcgQEAKIAl1MTYgcmVzMzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdGF0aWMgaW50IGF4ODgxN3hfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorc3RhdGljIGludCBhc2l4X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKIAkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKApAQCAtMTM2LDcgKzEzNSw3IEBACiAJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCitzdGF0aWMgaW50IGFzaXhfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKIAkJCSAgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIHVzYl9jb250cm9sX21zZygKQEAgLTE1MSwxOSArMTUwLDgwIEBACiAJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKIH0KIAotc3RhdGljIHZvaWQgYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGFzaXhfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPmNvbnRleHQ7CiAKIAlpZiAodXJiLT5zdGF0dXMgPCAwKQotCQlwcmludGsoS0VSTl9ERUJVRyAiYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2soKSBmYWlsZWQgd2l0aCAlZCIsCisJCXByaW50ayhLRVJOX0RFQlVHICJhc2l4X2FzeW5jX2NtZF9jYWxsYmFjaygpIGZhaWxlZCB3aXRoICVkIiwKIAkJCXVyYi0+c3RhdHVzKTsKIAogCWtmcmVlKHJlcSk7CiAJdXNiX2ZyZWVfdXJiKHVyYik7CiB9CiAKLXN0YXRpYyB2b2lkIGF4ODgxN3hfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIGlubGluZSBpbnQgYXNpeF9zZXRfc3dfbWlpKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksIDB4MDAwMCwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWRldmRiZyhkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHNvZnR3YXJlIE1JSSBhY2Nlc3MiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBhc2l4X3NldF9od19taWkoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMHgwMDAwLCAwLCAwLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2ZGJnKGRldiwgIkZhaWxlZCB0byBlbmFibGUgaGFyZHdhcmUgTUlJIGFjY2VzcyIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFzaXhfZ2V0X3BoeWlkKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwl2b2lkICpidWY7CisKKwlidWYgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIG91dDE7CisKKwlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9QSFlfSUQsCisJCQkJICAgIDAsIDAsIDIsIGJ1ZikpIDwgMikgeworCQlkZXZkYmcoZGV2LCAiRXJyb3IgcmVhZGluZyBQSFlJRCByZWdpc3RlcjogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MjsKKwl9CisJcmV0ID0gKigodTggKilidWYgKyAxKTsKK291dDI6CisJa2ZyZWUoYnVmKTsKK291dDE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhc2l4X3N3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggZmxhZ3MpCit7CisJaW50IHJldDsKKworICAgICAgICByZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgZmxhZ3MsIDAsIDAsIE5VTEwpOworCWlmIChyZXQgPCAwKQorCQlkZXZkYmcoZGV2LCJGYWlsZWQgdG8gc2VuZCBzb2Z0d2FyZSByZXNldDogJTAyeCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFzaXhfd3JpdGVfcnhfY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IG1vZGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgbW9kZSwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgZGV2ZGJnKGRldiwgIkZhaWxlZCB0byB3cml0ZSBSWF9DVEwgbW9kZTogJTAyeCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhc2l4X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgYXg4ODE3Ml9pbnRfZGF0YSAqZXZlbnQ7CiAJaW50IGxpbms7CkBAIC0xNzksMTIgKzIzOSwxMiBAQAogCQkJdXNibmV0X2RlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9MSU5LX1JFU0VUICk7CiAJCX0gZWxzZQogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOwotCQlkZXZkYmcoZGV2LCAiYXg4ODE3eCAtIExpbmsgU3RhdHVzIGlzOiAlZCIsIGxpbmspOworCQlkZXZkYmcoZGV2LCAiTGluayBTdGF0dXMgaXM6ICVkIiwgbGluayk7CiAJfQogfQogCiBzdGF0aWMgdm9pZAotYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAogCQkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CkBAIC0yMTEsNyArMjcxLDcgQEAKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIGRldi0+dWRldiwKIAkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCiAJCQkgICAgICh2b2lkICopcmVxLCBkYXRhLCBzaXplLAotCQkJICAgICBheDg4MTd4X2FzeW5jX2NtZF9jYWxsYmFjaywgcmVxKTsKKwkJCSAgICAgYXNpeF9hc3luY19jbWRfY2FsbGJhY2ssIHJlcSk7CiAKIAlpZigoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7CiAJCWRldmVycihkZXYsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZCIsCkBAIC0yMjEsMTAgKzI4MSwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXg4ODE3eF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitzdGF0aWMgdm9pZCBhc2l4X3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKSZkZXYtPmRhdGE7CisJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKIAl1OCByeF9jdGwgPSAweDhjOwogCiAJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewpAQCAtMjU1LDUzICszMTUsNTEgQEAKIAkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwogCQl9CiAKLQkJYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfTVVMVElfRklMVEVSLCAwLCAwLAorCQlhc2l4X3dyaXRlX2NtZF9hc3luYyhkZXYsIEFYX0NNRF9XUklURV9NVUxUSV9GSUxURVIsIDAsIDAsCiAJCQkJICAgQVhfTUNBU1RfRklMVEVSX1NJWkUsIGRhdGEtPm11bHRpX2ZpbHRlcik7CiAKIAkJcnhfY3RsIHw9IDB4MTA7CiAJfQogCi0JYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCByeF9jdGwsIDAsIDAsIE5VTEwpOworCWFzaXhfd3JpdGVfY21kX2FzeW5jKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgcnhfY3RsLCAwLCAwLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQorc3RhdGljIGludCBhc2l4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTE2IHJlczsKLQl1OCBidWZbMV07CiAKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCAmYnVmKTsKLQlheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTUlJX1JFRywgcGh5X2lkLAorCWFzaXhfc2V0X3N3X21paShkZXYpOworCWFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLCBwaHlfaWQsCiAJCQkJKF9fdTE2KWxvYywgMiwgKHUxNiAqKSZyZXMpOwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9IV19NSUksIDAsIDAsIDAsICZidWYpOworCWFzaXhfc2V0X2h3X21paShkZXYpOwogCiAJcmV0dXJuIHJlcyAmIDB4ZmZmZjsKIH0KIAogLyogc2FtZSBhcyBhYm92ZSwgYnV0IGNvbnZlcnRzIHJlc3VsdGluZyB2YWx1ZSB0byBjcHUgYnl0ZSBvcmRlciAqLwotc3RhdGljIGludCBheDg4MTd4X21kaW9fcmVhZF9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQorc3RhdGljIGludCBhc2l4X21kaW9fcmVhZF9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQogewotCXJldHVybiBsZTE2X3RvX2NwdShheDg4MTd4X21kaW9fcmVhZChuZXRkZXYscGh5X2lkLCBsb2MpKTsKKwlyZXR1cm4gbGUxNl90b19jcHUoYXNpeF9tZGlvX3JlYWQobmV0ZGV2LHBoeV9pZCwgbG9jKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1heDg4MTd4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKK2FzaXhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTE2IHJlcyA9IHZhbDsKLQl1OCBidWZbMV07CiAKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCAmYnVmKTsKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsCisJYXNpeF9zZXRfc3dfbWlpKGRldik7CisJYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUlJX1JFRywgcGh5X2lkLAogCQkJCShfX3UxNilsb2MsIDIsICh1MTYgKikmcmVzKTsKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKTsKKwlhc2l4X3NldF9od19taWkoZGV2KTsKIH0KIAogLyogc2FtZSBhcyBhYm92ZSwgYnV0IGNvbnZlcnRzIG5ldyB2YWx1ZSB0byBsZTE2IGJ5dGUgb3JkZXIgYmVmb3JlIHdyaXRpbmcgKi8KIHN0YXRpYyB2b2lkCi1heDg4MTd4X21kaW9fd3JpdGVfbGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKK2FzaXhfbWRpb193cml0ZV9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQogewotCWF4ODgxN3hfbWRpb193cml0ZSggbmV0ZGV2LCBwaHlfaWQsIGxvYywgY3B1X3RvX2xlMTYodmFsKSApOworCWFzaXhfbWRpb193cml0ZSggbmV0ZGV2LCBwaHlfaWQsIGxvYywgY3B1X3RvX2xlMTYodmFsKSApOwogfQogCiBzdGF0aWMgaW50IGF4ODgxNzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCkBAIC0zMTIsMjMgKzM3MCwyMyBAQAogCXU4IG1vZGU7CiAKIAltb2RlID0gQVhfTUVESVVNX1RYX0FCT1JUX0FMTE9XIHwgQVhfTUVESVVNX0ZMT1dfQ09OVFJPTF9FTjsKLQlscGEgPSBheDg4MTd4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsKLQlhZHYgPSBheDg4MTd4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKKwlscGEgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsKKwlhZHYgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKIAlyZXMgPSBtaWlfbndheV9yZXN1bHQobHBhfGFkdik7CiAJaWYgKHJlcyAmIExQQV9EVVBMRVgpCiAJCW1vZGUgfD0gQVhfTUVESVVNX0ZVTExfRFVQTEVYOwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCBtb2RlLCAwLCAwLCBOVUxMKTsKKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgbW9kZSwgMCwgMCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLWF4ODgxN3hfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQorYXNpeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAl1OCBvcHQ7CiAKLQlpZiAoYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX01PTklUT1JfTU9ERSwgMCwgMCwgMSwgJm9wdCkgPCAwKSB7CisJaWYgKGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NT05JVE9SX01PREUsIDAsIDAsIDEsICZvcHQpIDwgMCkgewogCQl3b2xpbmZvLT5zdXBwb3J0ZWQgPSAwOwogCQl3b2xpbmZvLT53b2xvcHRzID0gMDsKIAkJcmV0dXJuOwpAQCAtMzQ0LDcgKzQwMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWF4ODgxN3hfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQorYXNpeF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAl1OCBvcHQgPSAwOwpAQCAtMzU3LDE5ICs0MTUsMTkgQEAKIAlpZiAob3B0ICE9IDApCiAJCW9wdCB8PSBBWF9NT05JVE9SX01PREU7CiAKLQlpZiAoYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTU9OSVRPUl9NT0RFLAorCWlmIChhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NT05JVE9SX01PREUsCiAJCQkgICAgICBvcHQsIDAsIDAsICZidWYpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitzdGF0aWMgaW50IGFzaXhfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlyZXR1cm4gQVhfRUVQUk9NX0xFTjsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKK3N0YXRpYyBpbnQgYXNpeF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCiAJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKQEAgLTM4NiwxNCArNDQ0LDE0IEBACiAKIAkvKiBheDg4MTd4IHJldHVybnMgMiBieXRlcyBmcm9tIGVlcHJvbSBvbiByZWFkICovCiAJZm9yIChpPTA7IGkgPCBlZXByb20tPmxlbiAvIDI7IGkrKykgewotCQlpZiAoYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX0VFUFJPTSwKKwkJaWYgKGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9FRVBST00sCiAJCQllZXByb20tPm9mZnNldCArIGksIDAsIDIsICZlYnVmW2ldKSA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF4ODgxN3hfZ2V0X2RydmluZm8gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCitzdGF0aWMgdm9pZCBhc2l4X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LAogCQkJCSBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewogCS8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi8KQEAgLTQwMSwxNCArNDU5LDE0IEBACiAJaW5mby0+ZWVkdW1wX2xlbiA9IDB4M2U7CiB9CiAKLXN0YXRpYyBpbnQgYXg4ODE3eF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCitzdGF0aWMgaW50IGFzaXhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAKIAlyZXR1cm4gbWlpX2V0aHRvb2xfZ3NldCgmZGV2LT5taWksY21kKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgYXNpeF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIApAQCAtNDE4LDI3ICs0NzYsMjcgQEAKIC8qIFdlIG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBldGh0b29sX29wcyBzbyB3ZSByZXF1aXJlIG91cgogICAgb3duIHN0cnVjdHVyZSBzbyB3ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCBvdGhlciB1c2JuZXQKICAgIGRldmljZXMgdGhhdCBtYXkgYmUgY29ubmVjdGVkIGF0IHRoZSBzYW1lIHRpbWUuICovCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxN3hfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9kcnZpbmZvCQk9IGF4ODgxN3hfZ2V0X2RydmluZm8sCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvCQk9IGFzaXhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKLQkuZ2V0X3dvbAkJPSBheDg4MTd4X2dldF93b2wsCi0JLnNldF93b2wJCT0gYXg4ODE3eF9zZXRfd29sLAotCS5nZXRfZWVwcm9tX2xlbgkJPSBheDg4MTd4X2dldF9lZXByb21fbGVuLAotCS5nZXRfZWVwcm9tCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbSwKLQkuZ2V0X3NldHRpbmdzCQk9IGF4ODgxN3hfZ2V0X3NldHRpbmdzLAotCS5zZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9zZXRfc2V0dGluZ3MsCisJLmdldF93b2wJCT0gYXNpeF9nZXRfd29sLAorCS5zZXRfd29sCQk9IGFzaXhfc2V0X3dvbCwKKwkuZ2V0X2VlcHJvbV9sZW4JCT0gYXNpeF9nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQkJPSBhc2l4X2dldF9lZXByb20sCisJLmdldF9zZXR0aW5ncwkJPSBhc2l4X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGFzaXhfc2V0X3NldHRpbmdzLAogfTsKIAotc3RhdGljIGludCBheDg4MTd4X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQorc3RhdGljIGludCBhc2l4X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAKIAlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRldi0+bWlpLCBpZl9taWkocnEpLCBjbWQsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGF4ODgxN3hfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIGludCBheDg4MTcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpidWY7CkBAIC00NTUsNTUgKzUxMywzOSBAQAogCiAJLyogVG9nZ2xlIHRoZSBHUElPcyBpbiBhIG1hbnVmYWN0dXJlci9tb2RlbCBzcGVjaWZpYyB3YXkgKi8KIAlmb3IgKGkgPSAyOyBpID49IDA7IGktLSkgewotCQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLAorCQlpZiAoKHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLAogCQkJCQkoZ3Bpb19iaXRzID4+IChpICogOCkpICYgMHhmZiwgMCwgMCwKIAkJCQkJYnVmKSkgPCAwKQogCQkJZ290byBvdXQyOwogCQltc2xlZXAoNSk7CiAJfQogCi0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsCi0JCQkJMHg4MCwgMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygic2VuZCBBWF9DTURfV1JJVEVfUlhfQ1RMIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LDB4ODApKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCiAJbWVtc2V0KGJ1ZiwgMCwgRVRIX0FMRU4pOwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX05PREVfSUQsCisJaWYgKChyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTk9ERV9JRCwKIAkJCQkwLCAwLCA2LCBidWYpKSA8IDApIHsKIAkJZGJnKCJyZWFkIEFYX0NNRF9SRUFEX05PREVfSUQgZmFpbGVkOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CiAKLQkvKiBHZXQgdGhlIFBIWSBpZCAqLwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwKLQkJCQkwLCAwLCAyLCBidWYpKSA8IDApIHsKLQkJZGJnKCJlcnJvciBvbiByZWFkIEFYX0NNRF9SRUFEX1BIWV9JRDogJTAyeCIsIHJldCk7Ci0JCWdvdG8gb3V0MjsKLQl9IGVsc2UgaWYgKHJldCA8IDIpIHsKLQkJLyogdGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiAyIGJ5dGVzICovCi0JCWRiZygiQVhfQ01EX1JFQURfUEhZX0lEIHJldHVybmVkIGxlc3MgdGhhbiAyIGJ5dGVzOiByZXQ9JTAyeCIsCi0JCQkJcmV0KTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQyOwotCX0KLQogCS8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqLwogCWRldi0+bWlpLmRldiA9IGRldi0+bmV0OwotCWRldi0+bWlpLm1kaW9fcmVhZCA9IGF4ODgxN3hfbWRpb19yZWFkOwotCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBheDg4MTd4X21kaW9fd3JpdGU7CisJZGV2LT5taWkubWRpb19yZWFkID0gYXNpeF9tZGlvX3JlYWQ7CisJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4M2Y7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQlkZXYtPm1paS5waHlfaWQgPSAqKCh1OCAqKWJ1ZiArIDEpOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGF4ODgxN3hfaW9jdGw7CisJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5aWQoZGV2KTsKKwlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxN3hfc2V0X211bHRpY2FzdDsKLQlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3eF9ldGh0b29sX29wczsKKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OworCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4MTcyX2V0aHRvb2xfb3BzOwogCi0JYXg4ODE3eF9tZGlvX3dyaXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQlheDg4MTd4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwlhc2l4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCWFzaXhfbWRpb193cml0ZV9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAogCQlBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQKTsKIAltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CiAKQEAgLTUxNSwxNiArNTU3LDE2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODc3Ml9ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2RydmluZm8JCT0gYXg4ODE3eF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2RydmluZm8JCT0gYXNpeF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X21zZ2xldmVsCQk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSB1c2JuZXRfc2V0X21zZ2xldmVsLAotCS5nZXRfd29sCQk9IGF4ODgxN3hfZ2V0X3dvbCwKLQkuc2V0X3dvbAkJPSBheDg4MTd4X3NldF93b2wsCi0JLmdldF9lZXByb21fbGVuCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbV9sZW4sCi0JLmdldF9lZXByb20JCT0gYXg4ODE3eF9nZXRfZWVwcm9tLAotCS5nZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9nZXRfc2V0dGluZ3MsCi0JLnNldF9zZXR0aW5ncwkJPSBheDg4MTd4X3NldF9zZXR0aW5ncywKKwkuZ2V0X3dvbAkJPSBhc2l4X2dldF93b2wsCisJLnNldF93b2wJCT0gYXNpeF9zZXRfd29sLAorCS5nZXRfZWVwcm9tX2xlbgkJPSBhc2l4X2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tCQk9IGFzaXhfZ2V0X2VlcHJvbSwKKwkuZ2V0X3NldHRpbmdzCQk9IGFzaXhfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gYXNpeF9zZXRfc2V0dGluZ3MsCiB9OwogCiBzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpAQCAtNTQxLDYyICs1ODMsNDUgQEAKIAkJZ290byBvdXQxOwogCX0KIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfR1BJT1MsCisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywKIAkJCQkgICAgIDB4MDBCMCwgMCwgMCwgYnVmKSkgPCAwKQogCQlnb3RvIG91dDI7CiAKIAltc2xlZXAoNSk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19QSFlfU0VMRUNULAorCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUEhZX1NFTEVDVCwKIAkJCQkweDAwMDEsIDAsIDAsIGJ1ZikpIDwgMCkgewogCQlkYmcoIlNlbGVjdCBQSFkgIzEgZmFpbGVkOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX0lQUEQsCi0JCQkJMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHBvd2VyIGRvd24gaW50ZXJuYWwgUEhZOiAlZCIsIHJldCk7CisJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFBEKSkgPCAwKQogCQlnb3RvIG91dDI7Ci0JfQogCiAJbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9DTEVBUiwKLQkJCQkwLCAwLCBidWYpKSA8IDApIHsKLQkJZGJnKCJGYWlsZWQgdG8gcGVyZm9ybSBzb2Z0d2FyZSByZXNldDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfQ0xFQVIpKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAltc2xlZXAoMTUwKTsKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULAotCSAgICAgCQkJQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwsCi0JCQkJMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHNldCBJbnRlcm5hbC9FeHRlcm5hbCBQSFkgcmVzZXQgY29udHJvbDogJWQiLAotCQkJCQlyZXQpOworCWlmICgocmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMKSkgPCAwKQogCQlnb3RvIG91dDI7Ci0JfQogCiAJbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsCi0JCQkJMHgwMDAwLCAwLCAwLCBidWYpKSA8IDApIHsKLQkJZGJnKCJGYWlsZWQgdG8gcmVzZXQgUlhfQ1RMOiAlZCIsIHJldCk7CisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX3J4X2N0bChkZXYsIDB4MDApKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCiAJbWVtc2V0KGJ1ZiwgMCwgRVRIX0FMRU4pOwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYODg3NzJfQ01EX1JFQURfTk9ERV9JRCwKKwlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWDg4NzcyX0NNRF9SRUFEX05PREVfSUQsCiAJCQkJMCwgMCwgRVRIX0FMRU4sIGJ1ZikpIDwgMCkgewogCQlkYmcoIkZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksCi0JCQkJMCwgMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRW5hYmxpbmcgc29mdHdhcmUgTUlJIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zZXRfc3dfbWlpKGRldikpIDwgMCkKIAkJZ290byBvdXQyOwotCX0KIAotCWlmICgoKHJldCA9IGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLAorCWlmICgoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLAogCSAgICAgIAkJCTB4MDAxMCwgMiwgMiwgYnVmKSkgPCAwKQogCQkJfHwgKCooKHUxNiAqKWJ1ZikgIT0gMHgwMDNiKSkgewogCQlkYmcoIlJlYWQgUEhZIHJlZ2lzdGVyIDIgbXVzdCBiZSAweDNiMDA6ICVkIiwgcmV0KTsKQEAgLTYwNSw3NCArNjMwLDQ5IEBACiAKIAkvKiBJbml0aWFsaXplIE1JSSBzdHJ1Y3R1cmUgKi8KIAlkZXYtPm1paS5kZXYgPSBkZXYtPm5ldDsKLQlkZXYtPm1paS5tZGlvX3JlYWQgPSBheDg4MTd4X21kaW9fcmVhZDsKLQlkZXYtPm1paS5tZGlvX3dyaXRlID0gYXg4ODE3eF9tZGlvX3dyaXRlOworCWRldi0+bWlpLm1kaW9fcmVhZCA9IGFzaXhfbWRpb19yZWFkOworCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBhc2l4X21kaW9fd3JpdGU7CiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweGZmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4ZmY7Ci0JZGV2LT5uZXQtPmRvX2lvY3RsID0gYXg4ODE3eF9pb2N0bDsKKwlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOworCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CiAKLQkvKiBHZXQgdGhlIFBIWSBpZCAqLwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwKLQkJCTAsIDAsIDIsIGJ1ZikpIDwgMCkgewotCQlkYmcoIkVycm9yIHJlYWRpbmcgUEhZIElEOiAlMDJ4IiwgcmV0KTsKKwlpZiAoKHJldCA9IGFzaXhfc3dfcmVzZXQoZGV2LCBBWF9TV1JFU0VUX1BSTCkpIDwgMCkKIAkJZ290byBvdXQyOwotCX0gZWxzZSBpZiAocmV0IDwgMikgewotCQkvKiB0aGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIDIgYnl0ZXMgKi8KLQkJZGJnKCJBWF9DTURfUkVBRF9QSFlfSUQgcmV0dXJuZWQgbGVzcyB0aGFuIDIgYnl0ZXM6IHJldD0lMDJ4IiwKLQkJICAgIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0MjsKLQl9Ci0JZGV2LT5taWkucGh5X2lkID0gKigodTggKilidWYgKyAxKTsKIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfUFJMLAotCQkJCTAsIDAsIGJ1ZikpIDwgMCkgewotCQlkYmcoIlNldCBleHRlcm5hbCBQSFkgcmVzZXQgcGluIGxldmVsOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0MjsKLQl9Ci0JbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwKLQkgICAgIAkJCUFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMLAotCQkJCTAsIDAsIGJ1ZikpIDwgMCkgewotCQlkYmcoIlNldCBJbnRlcm5hbC9FeHRlcm5hbCBQSFkgcmVzZXQgY29udHJvbDogJWQiLCByZXQpOwotCQlnb3RvIG91dDI7Ci0JfQogCW1zbGVlcCgxNTApOwogCisJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwpKSA8IDApCisJCWdvdG8gb3V0MjsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTd4X3NldF9tdWx0aWNhc3Q7CisJbXNsZWVwKDE1MCk7CisKKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOwogCi0JYXg4ODE3eF9tZGlvX3dyaXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQlheDg4MTd4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwlhc2l4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCWFzaXhfbWRpb193cml0ZV9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAogCQkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BKTsKIAltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLAorCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsCiAJCQkJQVg4ODc3Ml9NRURJVU1fREVGQVVMVCwgMCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiV3JpdGUgbWVkaXVtIG1vZGUgcmVnaXN0ZXI6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfSVBHMCwKKwlpZiAoKHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0lQRzAsCiAJCQkJQVg4ODc3Ml9JUEcwX0RFRkFVTFQgfCBBWDg4NzcyX0lQRzFfREVGQVVMVCwKIAkJCQlBWDg4NzcyX0lQRzJfREVGQVVMVCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiV3JpdGUgSVBHLElQRzEsSVBHMiBmYWlsZWQ6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KLQlpZiAoKHJldCA9Ci0JICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHNldCBoYXJkd2FyZSBNSUk6ICUwMngiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zZXRfaHdfbWlpKGRldikpIDwgMCkKIAkJZ290byBvdXQyOwotCX0KIAogCS8qIFNldCBSWF9DVEwgdG8gZGVmYXVsdCB2YWx1ZXMgd2l0aCAyayBidWZmZXIsIGFuZCBlbmFibGUgY2FjdHVzICovCi0JaWYgKChyZXQgPQotCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCAweDAwODgsIDAsIDAsCi0JCQkgICAgICAgYnVmKSkgPCAwKSB7Ci0JCWRiZygiUmVzZXQgUlhfQ1RMIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LCAweDAwODgpKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAlrZnJlZShidWYpOwogCkBAIC03OTQsMjMgKzc5NCwyMyBAQAogCXUxNiBtb2RlOwogCiAJbW9kZSA9IEFYODg3NzJfTUVESVVNX0RFRkFVTFQ7Ci0JbHBhID0gYXg4ODE3eF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0xQQSk7Ci0JYWR2ID0gYXg4ODE3eF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CisJbHBhID0gYXNpeF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0xQQSk7CisJYWR2ID0gYXNpeF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CiAJcmVzID0gbWlpX253YXlfcmVzdWx0KGxwYXxhZHYpOwogCiAJaWYgKChyZXMgJiBMUEFfRFVQTEVYKSA9PSAwKQogCQltb2RlICY9IH5BWDg4NzcyX01FRElVTV9GVUxMX0RVUExFWDsKIAlpZiAoKHJlcyAmIExQQV8xMDApID09IDApCiAJCW1vZGUgJj0gfkFYODg3NzJfTUVESVVNXzEwME1COwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCBtb2RlLCAwLCAwLCBOVUxMKTsKKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgbW9kZSwgMCwgMCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTd4X2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkFTSVggQVg4ODE3eCBVU0IgMi4wIEV0aGVybmV0IiwKLQkuYmluZCA9IGF4ODgxN3hfYmluZCwKLQkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmJpbmQgPSBheDg4MTcyX2JpbmQsCisJLnN0YXR1cyA9IGFzaXhfc3RhdHVzLAogCS5saW5rX3Jlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKQEAgLTgxOSw4ICs4MTksOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGRsaW5rX2R1Yl9lMTAwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkRMaW5rIERVQi1FMTAwIFVTQiBFdGhlcm5ldCIsCi0JLmJpbmQgPSBheDg4MTd4X2JpbmQsCi0JLnN0YXR1cyA9IGF4ODgxN3hfc3RhdHVzLAorCS5iaW5kID0gYXg4ODE3Ml9iaW5kLAorCS5zdGF0dXMgPSBhc2l4X3N0YXR1cywKIAkubGlua19yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkucmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCiAJLmZsYWdzID0gIEZMQUdfRVRIRVIsCkBAIC04MjksOCArODI5LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBuZXRnZWFyX2ZhMTIwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIk5ldGdlYXIgRkEtMTIwIFVTQiBFdGhlcm5ldCIsCi0JLmJpbmQgPSBheDg4MTd4X2JpbmQsCi0JLnN0YXR1cyA9IGF4ODgxN3hfc3RhdHVzLAorCS5iaW5kID0gYXg4ODE3Ml9iaW5kLAorCS5zdGF0dXMgPSBhc2l4X3N0YXR1cywKIAkubGlua19yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkucmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCiAJLmZsYWdzID0gIEZMQUdfRVRIRVIsCkBAIC04MzksOCArODM5LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBoYXdraW5nX3VmMjAwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkhhd2tpbmcgVUYyMDAgVVNCIEV0aGVybmV0IiwKLQkuYmluZCA9IGF4ODgxN3hfYmluZCwKLQkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmJpbmQgPSBheDg4MTcyX2JpbmQsCisJLnN0YXR1cyA9IGFzaXhfc3RhdHVzLAogCS5saW5rX3Jlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKQEAgLTg1MCwxMyArODUwLDEyIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODg3NzJfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPSAiQVNJWCBBWDg4NzcyIFVTQiAyLjAgRXRoZXJuZXQiLAogCS5iaW5kID0gYXg4ODc3Ml9iaW5kLAotCS5zdGF0dXMgPSBheDg4MTd4X3N0YXR1cywKKwkuc3RhdHVzID0gYXNpeF9zdGF0dXMsCiAJLmxpbmtfcmVzZXQgPSBheDg4NzcyX2xpbmtfcmVzZXQsCiAJLnJlc2V0ID0gYXg4ODc3Ml9saW5rX3Jlc2V0LAogCS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVgsCiAJLnJ4X2ZpeHVwID0gYXg4ODc3Ml9yeF9maXh1cCwKIAkudHhfZml4dXAgPSBheDg4NzcyX3R4X2ZpeHVwLAotCS5kYXRhID0gMHgwMDEzMDEwMywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCmluZGV4IDViNjY3NTYuLjc2ODM5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJdXNiX2ZpbGxfY29udHJvbF91cmIocGVnYXN1cy0+Y3RybF91cmIsIHBlZ2FzdXMtPnVzYiwKIAkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBlZ2FzdXMtPnVzYiwgMCksCiAJCQkgICAgIChjaGFyICopICZwZWdhc3VzLT5kciwKLQkJCSAgICAgJnRtcCwgMSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CisJCQkgICAgIHRtcCwgMSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CiAKIAlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpAQCAtMzE4LDYgKzMxOCw4IEBACiAJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1JFQUQpKTsKIAlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgewogCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUN0cmwsIDEsIGRhdGEpOworCQlpZiAocmV0ID09IC1FU0hVVERPV04pCisJCQlnb3RvIGZhaWw7CiAJCWlmIChkYXRhWzBdICYgUEhZX0RPTkUpCiAJCQlicmVhazsKIAl9CkBAIC0zMjYsNiArMzI4LDcgQEAKIAkJKnJlZ2QgPSBsZTE2X3RvX2NwdShyZWdkaSk7CiAJCXJldHVybiByZXQ7CiAJfQorZmFpbDoKIAlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKIAkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKQEAgLTM1NCwxMiArMzU3LDE1IEBACiAJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1dSSVRFKSk7CiAJZm9yIChpID0gMDsgaSA8IFJFR19USU1FT1VUOyBpKyspIHsKIAkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlDdHJsLCAxLCBkYXRhKTsKKwkJaWYgKHJldCA9PSAtRVNIVVRET1dOKQorCQkJZ290byBmYWlsOwogCQlpZiAoZGF0YVswXSAmIFBIWV9ET05FKQogCQkJYnJlYWs7CiAJfQogCWlmIChpIDwgUkVHX1RJTUVPVVQpCiAJCXJldHVybiByZXQ7CiAKK2ZhaWw6CiAJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCiAJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJmYWlsICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiAtRVRJTUVET1VUOwpAQCAtMzg3LDYgKzM5Myw4IEBACiAJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21DdHJsLCAxLCAmdG1wKTsKIAkJaWYgKHRtcCAmIEVQUk9NX0RPTkUpCiAJCQlicmVhazsKKwkJaWYgKHJldCA9PSAtRVNIVVRET1dOKQorCQkJZ290byBmYWlsOwogCX0KIAlpZiAoaSA8IFJFR19USU1FT1VUKSB7CiAJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21EYXRhLCAyLCAmcmV0ZGF0YWkpOwpAQCAtMzk0LDYgKzQwMiw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCitmYWlsOgogCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQogCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKQEAgLTQzMywxMiArNDQyLDE1IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgewogCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tQ3RybCwgMSwgJnRtcCk7CisJCWlmIChyZXQgPT0gLUVTSFVURE9XTikKKwkJCWdvdG8gZmFpbDsKIAkJaWYgKHRtcCAmIEVQUk9NX0RPTkUpCiAJCQlicmVhazsKIAl9CiAJZGlzYWJsZV9lcHJvbV93cml0ZShwZWdhc3VzKTsKIAlpZiAoaSA8IFJFR19USU1FT1VUKQogCQlyZXR1cm4gcmV0OworZmFpbDoKIAlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKIAkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIC1FVElNRURPVVQ7CkBAIC0xMzc4LDkgKzEzOTAsOCBAQAogCXN0cnVjdCBwZWdhc3VzICpwZWdhc3VzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAkKIAluZXRpZl9kZXZpY2VfZGV0YWNoIChwZWdhc3VzLT5uZXQpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnBlZ2FzdXMtPmNhcnJpZXJfY2hlY2spOwogCWlmIChuZXRpZl9ydW5uaW5nKHBlZ2FzdXMtPm5ldCkpIHsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcGVnYXN1cy0+Y2Fycmllcl9jaGVjayk7Ci0KIAkJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPnJ4X3VyYik7CiAJCXVzYl9raWxsX3VyYihwZWdhc3VzLT5pbnRyX3VyYik7CiAJfQpAQCAtMTQwMCwxMCArMTQxMSw5IEBACiAJCXBlZ2FzdXMtPmludHJfdXJiLT5zdGF0dXMgPSAwOwogCQlwZWdhc3VzLT5pbnRyX3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CiAJCWludHJfY2FsbGJhY2socGVnYXN1cy0+aW50cl91cmIsIE5VTEwpOwotCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwZWdhc3VzX3dvcmtxdWV1ZSwgJnBlZ2FzdXMtPmNhcnJpZXJfY2hlY2ssCi0JCQkJCUNBUlJJRVJfQ0hFQ0tfREVMQVkpOwogCX0KKwlxdWV1ZV9kZWxheWVkX3dvcmsocGVnYXN1c193b3JrcXVldWUsICZwZWdhc3VzLT5jYXJyaWVyX2NoZWNrLAorCQkJCUNBUlJJRVJfQ0hFQ0tfREVMQVkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jIGIvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYwppbmRleCA0OTk5MWFjLi45NGRkZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMKQEAgLTM5LDYgKzM5LDIwIEBACiAgKiBSTkRJUyBpcyBORElTIHJlbW90ZWQgb3ZlciBVU0IuICBJdCdzIGEgTVNGVCB2YXJpYW50IG9mIENEQyBBQ00gLi4uIG9mCiAgKiBjb3Vyc2UgQUNNIHdhcyBpbnRlbmRlZCBmb3IgbW9kZW1zLCBub3QgRXRoZXJuZXQgbGlua3MhICBVU0IncyBzdGFuZGFyZAogICogZm9yIEV0aGVybmV0IGxpbmtzIGlzICJDREMgRXRoZXJuZXQiLCB3aGljaCBpcyBzaWduaWZpY2FudGx5IHNpbXBsZXIuCisgKgorICogTk9URSB0aGF0IE1pY3Jvc29mdCdzICJSTkRJUyAxLjAiIHNwZWNpZmljYXRpb24gaXMgaW5jb21wbGV0ZS4gIElzc3VlcworICogaW5jbHVkZToKKyAqICAgIC0gUG93ZXIgbWFuYWdlbWVudCBpbiBwYXJ0aWN1bGFyIHJlbGllcyBvbiBpbmZvcm1hdGlvbiB0aGF0J3Mgc2NhdHRlcmVkCisgKgl0aHJvdWdoIG90aGVyIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaCBpcyBpbmNvbXBsZXRlIG9yIGluY29ycmVjdCBldmVuCisgKgl0aGVyZS4KKyAqICAgIC0gVGhlcmUgYXJlIHZhcmlvdXMgdW5kb2N1bWVudGVkIHByb3RvY29sIHJlcXVpcmVtZW50cywgc3VjaCBhcyB0aGUKKyAqCW5lZWQgdG8gc2VuZCB1bnVzZWQgZ2FyYmFnZSBpbiBjb250cm9sLU9VVCBtZXNzYWdlcy4KKyAqICAgIC0gSW4gc29tZSBjYXNlcywgTVMtV2luZG93cyB3aWxsIGVtaXQgdW5kb2N1bWVudGVkIHJlcXVlc3RzOyB0aGlzCisgKgltYXR0ZXJzIG1vcmUgdG8gcGVyaXBoZXJhbCBpbXBsZW1lbnRhdGlvbnMgdGhhbiBob3N0IG9uZXMuCisgKgorICogRm9yIHRoZXNlIHJlYXNvbnMgYW5kIG90aGVycywgKiogVVNFIE9GIFJORElTIElTIFNUUk9OR0xZIERJU0NPVVJBR0VEICoqIGluCisgKiBmYXZvciBvZiBzdWNoIG5vbi1wcm9wcmlldGFyeSBhbHRlcm5hdGl2ZXMgYXMgQ0RDIEV0aGVybmV0IG9yIHRoZSBuZXdlciAoYW5kCisgKiBjdXJyZW50bHkgcmFyZSkgIkV0aGVybmV0IEVtdWxhdGlvbiBNb2RlbCIgKEVFTSkuCiAgKi8KIAogLyoKQEAgLTcyLDE3ICs4NiwxNyBAQAogICovCiAjZGVmaW5lIFJORElTX01TR19QQUNLRVQJY2NwdTIoMHgwMDAwMDAwMSkJLyogMS1OIHBhY2tldHMgKi8KICNkZWZpbmUgUk5ESVNfTVNHX0lOSVQJCWNjcHUyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFJORElTX01TR19JTklUX0MgCShSTkRJU19NU0dfSU5JVHxSTkRJU19NU0dfQ09NUExFVElPTikKKyNkZWZpbmUgUk5ESVNfTVNHX0lOSVRfQwkoUk5ESVNfTVNHX0lOSVR8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCiAjZGVmaW5lIFJORElTX01TR19IQUxUCQljY3B1MigweDAwMDAwMDAzKQogI2RlZmluZSBSTkRJU19NU0dfUVVFUlkJCWNjcHUyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFJORElTX01TR19RVUVSWV9DIAkoUk5ESVNfTVNHX1FVRVJZfFJORElTX01TR19DT01QTEVUSU9OKQorI2RlZmluZSBSTkRJU19NU0dfUVVFUllfQwkoUk5ESVNfTVNHX1FVRVJZfFJORElTX01TR19DT01QTEVUSU9OKQogI2RlZmluZSBSTkRJU19NU0dfU0VUCQljY3B1MigweDAwMDAwMDA1KQotI2RlZmluZSBSTkRJU19NU0dfU0VUX0MgCShSTkRJU19NU0dfU0VUfFJORElTX01TR19DT01QTEVUSU9OKQorI2RlZmluZSBSTkRJU19NU0dfU0VUX0MJCShSTkRJU19NU0dfU0VUfFJORElTX01TR19DT01QTEVUSU9OKQogI2RlZmluZSBSTkRJU19NU0dfUkVTRVQJCWNjcHUyKDB4MDAwMDAwMDYpCi0jZGVmaW5lIFJORElTX01TR19SRVNFVF9DIAkoUk5ESVNfTVNHX1JFU0VUfFJORElTX01TR19DT01QTEVUSU9OKQorI2RlZmluZSBSTkRJU19NU0dfUkVTRVRfQwkoUk5ESVNfTVNHX1JFU0VUfFJORElTX01TR19DT01QTEVUSU9OKQogI2RlZmluZSBSTkRJU19NU0dfSU5ESUNBVEUJY2NwdTIoMHgwMDAwMDAwNykKICNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRQljY3B1MigweDAwMDAwMDA4KQotI2RlZmluZSBSTkRJU19NU0dfS0VFUEFMSVZFX0MgCShSTkRJU19NU0dfS0VFUEFMSVZFfFJORElTX01TR19DT01QTEVUSU9OKQorI2RlZmluZSBSTkRJU19NU0dfS0VFUEFMSVZFX0MJKFJORElTX01TR19LRUVQQUxJVkV8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCiAKIC8qIGNvZGVzIGZvciAic3RhdHVzIiBmaWVsZCBvZiBjb21wbGV0aW9uIG1lc3NhZ2VzICovCiAjZGVmaW5lCVJORElTX1NUQVRVU19TVUNDRVNTCQljY3B1MigweDAwMDAwMDAwKQpAQCAtNTk2LDEzICs2MTAsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgcm5kaXNfaW5pdCh2b2lkKQogewotIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZybmRpc19kcml2ZXIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnJuZGlzX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChybmRpc19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHJuZGlzX2V4aXQodm9pZCkKIHsKLSAJdXNiX2RlcmVnaXN0ZXIoJnJuZGlzX2RyaXZlcik7CisJdXNiX2RlcmVnaXN0ZXIoJnJuZGlzX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChybmRpc19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCA1YThhMmM5Li41YzYwYmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtNzEsNiArNzEsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFueWRhdGEuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX0FSSzMxMTYKKwl0cmlzdGF0ZSAiVVNCIEFSSyBNaWNybyAzMTE2IFVTQiBTZXJpYWwgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEFSSyBNaWNybyAzMTE2IFVTQiB0byBTZXJpYWwKKwkgIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXJrMzExNgorCiBjb25maWcgVVNCX1NFUklBTF9CRUxLSU4KIAl0cmlzdGF0ZSAiVVNCIEJlbGtpbiBhbmQgUGVyYWNvbSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgogCWRlcGVuZHMgb24gVVNCX1NFUklBTApAQCAtMTU4LDYgKzE2OCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnRkaV9zaW8uCiAKK2NvbmZpZyBVU0JfU0VSSUFMX0ZVTlNPRlQKKwl0cmlzdGF0ZSAiVVNCIEZ1bmRhbWVudGFsIFNvZnR3YXJlIERvbmdsZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEZ1bmRhbWVudGFsIFNvZnR3YXJlIGRvbmdsZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnVuc29mdC4KKwogY29uZmlnIFVTQl9TRVJJQUxfVklTT1IKIAl0cmlzdGF0ZSAiVVNCIEhhbmRzcHJpbmcgVmlzb3IgLyBQYWxtIG01MHggLyBTb255IENsaWUgRHJpdmVyIgogCWRlcGVuZHMgb24gVVNCX1NFUklBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCmluZGV4IGY3ZmU0MTcuLjVhMDk2MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAKIAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUpCQkrPSBhaXJwcmltZS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9BTllEQVRBKQkJKz0gYW55ZGF0YS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2KQkJKz0gYXJrMzExNi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4pCQkJKz0gYmVsa2luX3NhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSkJCQkrPSBjcDIxMDEubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLKQkJKz0gY3liZXJqYWNrLm8KQEAgLTIyLDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJKQkJKz0gaW9fdGkubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcpCQkJKz0gZW1wZWcubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8pCQkrPSBmdGRpX3Npby5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUKQkJKz0gZnVuc29mdC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4pCQkJKz0gZ2FybWluX2dwcy5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9IUDRYKQkJCSs9IGhwNHgubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfSVBBUSkJCQkrPSBpcGFxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKaW5kZXggZGJmMWYwNi4uNjk0YjIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKQEAgLTE4LDYgKzE4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHhmM2QsIDB4MDExMikgfSwgIC8qIEFpclByaW1lIENETUEgV2lyZWxlc3MgUEMgQ2FyZCAqLwogCXsgVVNCX0RFVklDRSgweDE0MTAsIDB4MTExMCkgfSwgLyogTm92YXRlbCBXaXJlbGVzcyBNZXJsaW4gQ0RNQSAqLworCXsgVVNCX0RFVklDRSgweDExOTksIDB4MDExMikgfSwgLyogU2llcnJhIFdpcmVsZXNzIEFpcmNhcmQgNTgwICovCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGVjNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYwpAQCAtMCwwICsxLDQ2NSBAQAorLyoKKyAqIGFyazMxMTYKKyAqIC0gaW1wbGVtZW50cyBhIGRyaXZlciBmb3IgdGhlIGFya21pY3JvIGFyazMxMTYgY2hpcHNldCAodmVuZG9yPTB4NjU0NywKKyAqICAgcHJvZHVjdGlkPTB4MDIzMikgKHVzZWQgaW4gYSBkYXRhY2FibGUgY2FsbGVkIEtRLVU4QSkKKyAqCisgKiAtIGJhc2VkIG9uIGNvZGUgYnkga3Jpc2Z4IC0+IHRoYW5rcyAhIQorICogICAoc2VlIGh0dHA6Ly93d3cubGludXhxdWVzdGlvbnMub3JnL3F1ZXN0aW9ucy9zaG93dGhyZWFkLnBocD9wPTIxODQ0NTcjcG9zdDIxODQ0NTcpCisgKgorICogIC0gYmFzZWQgb24gbG9ncyBjcmVhdGVkIGJ5IHVzYnNub29weQorICoKKyAqICBBdXRob3IgICA6IFNpbW9uIFNjaHVseiBbYXJrMzExNl9kcml2ZXI8QVQ+YXVjdGlvbmFudC5kZV0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHg2NTQ3LCAweDAyMzIpIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0cnVjdCBhcmszMTE2X3ByaXZhdGUgeworCXNwaW5sb2NrX3QgbG9jazsKKwl1OCB0ZXJtaW9zX2luaXRpYWxpemVkOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIEFSSzMxMTZfU05EKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBzZXEsCisJCQkgICAgICAgX191OCByZXF1ZXN0LCBfX3U4IHJlcXVlc3R0eXBlLAorCQkJICAgICAgIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCkKK3sKKwlpbnQgcmVzdWx0OworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LDApLAorCQkJCSByZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsIGluZGV4LAorCQkJCSBOVUxMLDB4MDAsIDEwMDApOworCWRiZygiJTAzZCA+IG9rIixzZXEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQVJLMzExNl9SQ1Yoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IHNlcSwKKwkJCSAgICAgICBfX3U4IHJlcXVlc3QsIF9fdTggcmVxdWVzdHR5cGUsCisJCQkgICAgICAgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCBfX3U4IGV4cGVjdGVkLAorCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmVzdWx0OworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwwKSwKKwkJCSAgICAgIHJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsCisJCQkgICAgICBidWYsIDB4MDAwMDAwMSwgMTAwMCk7CisJaWYgKHJlc3VsdCkKKwkJZGJnKCIlMDNkIDwgJWQgYnl0ZXMgWzB4JTAyWF0iLHNlcSwgcmVzdWx0LCBidWZbMF0pOworCWVsc2UKKwkJZGJnKCIlMDNkIDwgMCBieXRlcyIsIHNlcSk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIEFSSzMxMTZfUkNWX1FVSUVUKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJICAgICBfX3U4IHJlcXVlc3QsIF9fdTggcmVxdWVzdHR5cGUsCisJCQkJICAgICBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsIGNoYXIgKmJ1ZikKK3sKKwl1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsMCksCisJCQlyZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsIGluZGV4LAorCQkJYnVmLCAweDAwMDAwMDEsIDEwMDApOworfQorCisKK3N0YXRpYyBpbnQgYXJrMzExNl9hdHRhY2goc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwljaGFyICpidWY7CisJc3RydWN0IGFyazMxMTZfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXByaXYgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBhcmszMTE2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2KQorCQkJZ290byBjbGVhbnVwOworCQltZW1zZXQgKHByaXYsIDB4MDAsIHNpemVvZiAoc3RydWN0IGFyazMxMTZfcHJpdmF0ZSkpOworCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgcHJpdik7CisJfQorCisJYnVmID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlkYmcoImVycm9yIGttYWxsb2MgLT4gb3V0IG9mIG1lbSA/Iik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiAzICovCisJQVJLMzExNl9TTkQoc2VyaWFsLCAzLDB4RkUsMHg0MCwweDAwMDgsMHgwMDAyKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDQsMHhGRSwweDQwLDB4MDAwOCwweDAwMDEpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgNSwweEZFLDB4NDAsMHgwMDAwLDB4MDAwOCk7CisJQVJLMzExNl9TTkQoc2VyaWFsLCA2LDB4RkUsMHg0MCwweDAwMDAsMHgwMDBCKTsKKworCS8qIDwtLSBzZXE3ICovCisJQVJLMzExNl9SQ1Yoc2VyaWFsLCA3LDB4RkUsMHhDMCwweDAwMDAsMHgwMDAzLCAweDAwLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgOCwweEZFLDB4NDAsMHgwMDgwLDB4MDAwMyk7CisJQVJLMzExNl9TTkQoc2VyaWFsLCA5LDB4RkUsMHg0MCwweDAwMUEsMHgwMDAwKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTAsMHhGRSwweDQwLDB4MDAwMCwweDAwMDEpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxMSwweEZFLDB4NDAsMHgwMDAwLDB4MDAwMyk7CisKKwkvKiA8LS0gc2VxMTIgKi8KKwlBUkszMTE2X1JDVihzZXJpYWwsMTIsMHhGRSwweEMwLDB4MDAwMCwweDAwMDQsIDB4MDAsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLDEzLDB4RkUsMHg0MCwweDAwMDAsMHgwMDA0KTsKKworCS8qIDE0ICovCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDE0LDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAwLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxNSwweEZFLDB4NDAsMHgwMDAwLDB4MDAwNCk7CisKKwkvKiAxNiAqLworCUFSSzMxMTZfUkNWKHNlcmlhbCwxNiwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwgMHgwMCwgYnVmKTsKKwkvKiAtLT4gc2VxMTcgKi8KKwlBUkszMTE2X1NORChzZXJpYWwsMTcsMHhGRSwweDQwLDB4MDAwMSwweDAwMDQpOworCisJLyogPC0tIHNlcTE4ICovCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDE4LDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAxLCBidWYpOworCisJLyogLS0+IHNlcTE5ICovCisJQVJLMzExNl9TTkQoc2VyaWFsLDE5LDB4RkUsMHg0MCwweDAwMDMsMHgwMDA0KTsKKworCisJLyogPC0tIHNlcTIwICovCisJLyogc2VlbXMgbGlrZSBzZXJpYWwgcG9ydCBzdGF0dXMgaW5mbyAoUlRTLCBDVFMsLi4uKSAqLworCS8qIHJldHVybnMgbW9kZW0gY29udHJvbCBsaW5lIHN0YXR1cyA/ISAqLworCUFSSzMxMTZfUkNWKHNlcmlhbCwyMCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNiwgMHhGRiwgYnVmKTsKKworCS8qIHNldCA5NjAwIGJhdWQgJiBkbyBzb21lIGluaXQgPyEgKi8KKwlBUkszMTE2X1NORChzZXJpYWwsMTQ3LDB4RkUsMHg0MCwweDAwODMsMHgwMDAzKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTQ4LDB4RkUsMHg0MCwweDAwMzgsMHgwMDAwKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTQ5LDB4RkUsMHg0MCwweDAwMDEsMHgwMDAxKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTUwLDB4RkUsMHg0MCwweDAwMDMsMHgwMDAzKTsKKwlBUkszMTE2X1JDVihzZXJpYWwsMTUxLDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LDB4MDMsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLDE1MiwweEZFLDB4NDAsMHgwMDAwLDB4MDAwMyk7CisJQVJLMzExNl9SQ1Yoc2VyaWFsLDE1MywweEZFLDB4QzAsMHgwMDAwLDB4MDAwMywweDAwLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxNTQsMHhGRSwweDQwLDB4MDAwMywweDAwMDMpOworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4oMCk7CisKK2NsZWFudXA6CisJZm9yICgtLWk7IGk+PTA7IC0taSkKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGFyazMxMTZfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgYXJrMzExNl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBiYXVkOworCWludCBhcmszMTE2X2JhdWQ7CisJY2hhciAqYnVmOworCWNoYXIgY29uZmlnOworCisJY29uZmlnID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKCFwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkKSB7CisJCSoocG9ydC0+dHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKKwkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCQlwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZzogKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKKwkJICAgIChSRUxFVkFOVF9JRkxBRyhwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcpID09CisJCSAgICAgUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZGJnKCJlcnJvciBrbWFsbG9jIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBzZXQgZGF0YSBiaXQgY291bnQgKDgvNy82LzUpICovCisJaWYgKGNmbGFnICYgQ1NJWkUpeworCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpeworCQljYXNlIENTNToKKwkJCWNvbmZpZyB8PSAweDAwOworCQkJZGJnKCJzZXR0aW5nIENTNSIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1M2OgorCQkJY29uZmlnIHw9IDB4MDE7CisJCQlkYmcoInNldHRpbmcgQ1M2Iik7CisJCQlicmVhazsKKwkJY2FzZSBDUzc6CisJCQljb25maWcgfD0gMHgwMjsKKwkJCWRiZygic2V0dGluZyBDUzciKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyICgiQ1NJWkUgd2FzIHNldCBidXQgbm90IENTNS1DUzgsIHVzaW5nIENTOCEiKTsKKwkJY2FzZSBDUzg6CisJCQljb25maWcgfD0gMHgwMzsKKwkJCWRiZygic2V0dGluZyBDUzgiKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogc2V0IHBhcml0eSAoTk9ORSxFVkVOLE9ERCkgKi8KKwlpZiAoY2ZsYWcgJiBQQVJFTkIpeworCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCWNvbmZpZyB8PSAweDA4OworCQkJZGJnKCJzZXR0aW5nIHBhcml0eSB0byBPREQiKTsKKwkJfSBlbHNlIHsKKwkJCWNvbmZpZyB8PSAweDE4OworCQkJZGJnKCJzZXR0aW5nIHBhcml0eSB0byBFVkVOIik7CisJCX0KKwl9IGVsc2UgeworCQlkYmcoInNldHRpbmcgcGFyaXR5IHRvIE5PTkUiKTsKKwl9CisKKwkvKiBTRVQgU1RPUEJJVCAoMS8yKSAqLworCWlmIChjZmxhZyAmIENTVE9QQikgeworCQljb25maWcgfD0gMHgwNDsKKwkJZGJnICgic2V0dGluZyAyIHN0b3AgYml0cyIpOworCX0gZWxzZSB7CisJCWRiZyAoInNldHRpbmcgMSBzdG9wIGJpdCIpOworCX0KKworCisJLyogc2V0IGJhdWRyYXRlOiAqLworCWJhdWQgPSAwOworCXN3aXRjaCAoY2ZsYWcgJiBDQkFVRCl7CisJCWNhc2UgQjA6CisJCQllcnIoImNhbid0IHNldCAwYmF1ZCwgdXNpbmcgOTYwMCBpbnN0ZWFkIik7CisJCQlicmVhazsKKwkJY2FzZSBCNzU6CWJhdWQgPSA3NTsJYnJlYWs7CisJCWNhc2UgQjE1MDoJYmF1ZCA9IDE1MDsJYnJlYWs7CisJCWNhc2UgQjMwMDoJYmF1ZCA9IDMwMDsJYnJlYWs7CisJCWNhc2UgQjYwMDoJYmF1ZCA9IDYwMDsJYnJlYWs7CisJCWNhc2UgQjEyMDA6CWJhdWQgPSAxMjAwOwlicmVhazsKKwkJY2FzZSBCMTgwMDoJYmF1ZCA9IDE4MDA7CWJyZWFrOworCQljYXNlIEIyNDAwOgliYXVkID0gMjQwMDsJYnJlYWs7CisJCWNhc2UgQjQ4MDA6CWJhdWQgPSA0ODAwOwlicmVhazsKKwkJY2FzZSBCOTYwMDoJYmF1ZCA9IDk2MDA7CWJyZWFrOworCQljYXNlIEIxOTIwMDoJYmF1ZCA9IDE5MjAwOwlicmVhazsKKwkJY2FzZSBCMzg0MDA6CWJhdWQgPSAzODQwMDsJYnJlYWs7CisJCWNhc2UgQjU3NjAwOgliYXVkID0gNTc2MDA7CWJyZWFrOworCQljYXNlIEIxMTUyMDA6CWJhdWQgPSAxMTUyMDA7CWJyZWFrOworCQljYXNlIEIyMzA0MDA6CWJhdWQgPSAyMzA0MDA7CWJyZWFrOworCQljYXNlIEI0NjA4MDA6CWJhdWQgPSA0NjA4MDA7CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCJkb2VzIG5vdCBzdXBwb3J0IHRoZSBiYXVkcmF0ZSByZXF1ZXN0ZWQgKGZpeCBpdCkiKTsKKwkJCWJyZWFrOworCX0KKworCS8qIHNldCA5NjAwIGFzIGRlZmF1bHQgKGlmIGdpdmVuIGJhdWRyYXRlIGlzIGludmFsaWQgZm9yIGV4YW1wbGUpICovCisJaWYgKGJhdWQgPT0gMCkKKwkJYmF1ZCA9IDk2MDA7CisKKwkvKgorCSAqIGZvdW5kIGJ5IHRyeSduJ2Vycm9yLCBiZSBjYXJlZnVsLCBtYXliZSB0aGVyZSBhcmUgb3RoZXIgb3B0aW9ucworCSAqIGZvciBtdWx0aXBsaWNhdG9yIGV0YyEKKwkgKi8KKwlpZiAoYmF1ZCA9PSA0NjA4MDApCisJCS8qIHN0cmFuZ2UsIGZvciA0NjA4MDAgdGhlIGZvcm11bGEgaXMgd3JvbmcKKwkJICogKGRvbnQgdXNlIHJvdW5kKCksIHRoZW4gOTYwMGJhdWQgaXMgd3JvbmcpICovCisJCWFyazMxMTZfYmF1ZCA9IDc7CisJZWxzZQorCQlhcmszMTE2X2JhdWQgPSAzMDAwMDAwIC8gYmF1ZDsKKworCS8qID8gKi8KKwlBUkszMTE2X1JDVihzZXJpYWwsMCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwMywgMHgwMywgYnVmKTsKKwkvKiBvZmZzZXQgPSBidWZbMF07ICovCisJLyogb2Zmc2V0ID0gMHgwMzsgKi8KKwkvKiBkYmcoInVzaW5nIDB4JTA0WCBhcyB0YXJnZXQgZm9yIDB4MDAwMzoiLDB4MDA4MCtvZmZzZXQpOyAqLworCisKKwkvKiBzZXQgYmF1ZHJhdGUgKi8KKwlkYmcoInNldHRpbmcgYmF1ZHJhdGUgdG8gJWQgKC0+cmVnPSVkKSIsYmF1ZCxhcmszMTE2X2JhdWQpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxNDcsMHhGRSwweDQwLDB4MDA4MywweDAwMDMpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxNDgsMHhGRSwweDQwLChhcmszMTE2X2JhdWQgJiAweDAwRkYpICAgLDB4MDAwMCk7CisJQVJLMzExNl9TTkQoc2VyaWFsLDE0OSwweEZFLDB4NDAsKGFyazMxMTZfYmF1ZCAmIDB4RkYwMCk+PjgsMHgwMDAxKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTUwLDB4RkUsMHg0MCwweDAwMDMsMHgwMDAzKTsKKworCS8qID8gKi8KKwlBUkszMTE2X1JDVihzZXJpYWwsMTUxLDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LDB4MDMsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLDE1MiwweEZFLDB4NDAsMHgwMDAwLDB4MDAwMyk7CisKKwkvKiBzZXQgZGF0YSBiaXQgY291bnQsIHN0b3AgYml0IGNvdW50ICYgcGFyaXR5OiAqLworCWRiZygidXBkYXRpbmcgYml0IGNvdW50LCBzdG9wIGJpdCBvciBwYXJpdHkgKGNmZz0weCUwMlgpIiwgY29uZmlnKTsKKwlBUkszMTE2X1JDVihzZXJpYWwsMTUzLDB4RkUsMHhDMCwweDAwMDAsMHgwMDAzLDB4MDAsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLDE1NCwweEZFLDB4NDAsY29uZmlnLDB4MDAwMyk7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQlkYmcoIkNSVFNDVFMgbm90IHN1cHBvcnRlZCBieSBjaGlwc2V0ID8hIik7CisKKwkvKiBURVNUIEFSSzMxMTZfU05EKDE1NCwweEZFLDB4NDAsMHhGRkZGLCAweDAwMDYpOyAqLworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYXJrMzExNl9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB0ZXJtaW9zIHRtcF90ZXJtaW9zOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJY2hhciAqYnVmOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtICBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJYnVmID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlkYmcoImVycm9yIGttYWxsb2MgLT4gb3V0IG9mIG1lbSA/Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHBvcnQsIGZpbHApOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwkvKiBvcGVuICovCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDExMSwweEZFLDB4QzAsMHgwMDAwLDB4MDAwMywgMHgwMiwgYnVmKTsKKworCUFSSzMxMTZfU05EKHNlcmlhbCwxMTIsMHhGRSwweDQwLDB4MDA4MiwweDAwMDMpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxMTMsMHhGRSwweDQwLDB4MDAxQSwweDAwMDApOworCUFSSzMxMTZfU05EKHNlcmlhbCwxMTQsMHhGRSwweDQwLDB4MDAwMCwweDAwMDEpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxMTUsMHhGRSwweDQwLDB4MDAwMiwweDAwMDMpOworCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDExNiwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwgMHgwMywgYnVmKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTE3LDB4RkUsMHg0MCwweDAwMDIsMHgwMDA0KTsKKworCUFSSzMxMTZfUkNWKHNlcmlhbCwxMTgsMHhGRSwweEMwLDB4MDAwMCwweDAwMDQsIDB4MDIsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLDExOSwweEZFLDB4NDAsMHgwMDAwLDB4MDAwNCk7CisKKwlBUkszMTE2X1JDVihzZXJpYWwsMTIwLDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAwLCBidWYpOworCisJQVJLMzExNl9TTkQoc2VyaWFsLDEyMSwweEZFLDB4NDAsMHgwMDAxLDB4MDAwNCk7CisKKwlBUkszMTE2X1JDVihzZXJpYWwsMTIyLDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAxLCBidWYpOworCisJQVJLMzExNl9TTkQoc2VyaWFsLDEyMywweEZFLDB4NDAsMHgwMDAzLDB4MDAwNCk7CisKKwkvKiByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgKGNvbnRyb2wgbGluZXMgPyEpICovCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDEyNCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNiwgMHhGRiwgYnVmKTsKKworCS8qIGluaXRpYWxpc2UgdGVybWlvczogKi8KKwlpZiAocG9ydC0+dHR5KQorCQlhcmszMTE2X3NldF90ZXJtaW9zKHBvcnQsICZ0bXBfdGVybWlvcyk7CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgaW50IGFyazMxMTZfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJZGJnKCJpb2N0bCBub3Qgc3VwcG9ydGVkIHlldC4uLiIpOworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgYXJrMzExNl90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWNoYXIgKmJ1ZjsKKwljaGFyIHRlbXA7CisKKwkvKiBzZWVtcyBsaWtlIHNlcmlhbCBwb3J0IHN0YXR1cyBpbmZvIChSVFMsIENUUywuLi4pIGlzIHN0b3JlZAorCSAqIGluIHJlZyg/KSAweDAwMDYKKwkgKiBwY2IgY29ubmVjdGlvbiBwb2ludCAxMSA9IEdORCAtPiBzZXRzIGJpdDQgb2YgcmVzcG9uc2UKKwkgKiBwY2IgY29ubmVjdGlvbiBwb2ludCAgNyA9IEdORCAtPiBzZXRzIGJpdDYgb2YgcmVzcG9uc2UKKwkgKi8KKworCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZGJnKCJlcnJvciBrbWFsbG9jIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHJlYWQgcmVnaXN0ZXI6ICovCisJQVJLMzExNl9SQ1ZfUVVJRVQoc2VyaWFsLDB4RkUsMHhDMCwweDAwMDAsMHgwMDA2LGJ1Zik7CisJdGVtcCA9IGJ1ZlswXTsKKwlrZnJlZShidWYpOworCisJLyogaSBkbyBub3QgcmVhbGx5IGtub3cgaWYgYml0ND1DVFMgYW5kIGJpdDY9RFNSLi4uIHdhcyBqdXN0IGEKKwkgKiBxdWljayBndWVzcyAhIQorCSAqLworCXJldHVybiAgKHRlbXAgJiAoMTw8NCkgPyBUSU9DTV9DVFMgOiAwKSB8CisJICAgICAgICAodGVtcCAmICgxPDw2KSA/IFRJT0NNX0RTUiA6IDApOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXJrMzExNl9kcml2ZXIgPSB7CisJLm5hbWUgPQkJImFyazMxMTYiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGFyazMxMTZfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkiYXJrMzExNiIsCisJfSwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkxLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLmF0dGFjaCA9CQlhcmszMTE2X2F0dGFjaCwKKwkuc2V0X3Rlcm1pb3MgPQkJYXJrMzExNl9zZXRfdGVybWlvcywKKwkuaW9jdGwgPQkJYXJrMzExNl9pb2N0bCwKKwkudGlvY21nZXQgPQkJYXJrMzExNl90aW9jbWdldCwKKwkub3BlbiA9CQkJYXJrMzExNl9vcGVuLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXJrMzExNl9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmFyazMxMTZfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmYXJrMzExNl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYXJrMzExNl9kZXZpY2UpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcmszMTE2X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYXJrMzExNl9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYXJrMzExNl9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChhcmszMTE2X2luaXQpOworbW9kdWxlX2V4aXQoYXJrMzExNl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKaW5kZXggMTY3ZjhlYy4uODAyM2JiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCkBAIC01NCw3ICs1NCw3IEBACiAgKiBzZXJpYWwuYyBjb2RlLCBleGNlcHQgdGhhdCB0aGUgc3BlY2lmaWVyIGlzICJ0dHlVU0IiIGluc3RlYWQKICAqIG9mICJ0dHlTIi4KICAqLwotc3RhdGljIGludCBfX2luaXQgdXNiX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQorc3RhdGljIGludCB1c2JfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCiB7CiAJc3RydWN0IHVzYmNvbnNfaW5mbyAqaW5mbyA9ICZ1c2Jjb25zX2luZm87CiAJaW50IGJhdWQgPSA5NjAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBmM2FmODFiLi45ODZkNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMzA3LDcgKzMwNyw5IEBACiAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BQ1RaV0FWRV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0lSVFJBTlNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9JUExVU19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NJT19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjMyQU1fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9QSUQpIH0sCkBAIC00ODksMTAgKzQ5MSwxNSBAQAogCXsgVVNCX0RFVklDRShLT0JJTF9WSUQsIEtPQklMX0NPTlZfS0FBTl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFBPU0lGTEVYX1ZJRCwgUE9TSUZMRVhfUFA3MDAwX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVFRVU0JfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FQ0xPX0NPTV8xV0lSRV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BDREpfREFDMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1JSQ0lSS0lUU19MT0NPQlVGRkVSX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQVNLX1JEUjQwMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKElDT01fSUQxX1ZJRCwgSUNPTV9JRDFfUElEKSB9LAorCXsgVVNCX0RFVklDRShQQVBPVUNIX1ZJRCwgUEFQT1VDSF9UTVVfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BQ0dfSEZEVUFMX1BJRCkgfSwKIAl7IH0sCQkJCQkvKiBPcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCA4ZGE3NzNjLi5kNjlhOTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtMzIsNiArMzIsMTAgQEAKICNkZWZpbmUgRlRESV9ORl9SSUNfUElECTB4MDAwMQkvKiBQcm9kdWN0IElkICovCiAKIAorLyogQUNUIFNvbHV0aW9ucyBIb21lUHJvIFpXYXZlIGludGVyZmFjZSAoaHR0cDovL3d3dy5hY3Qtc29sdXRpb25zLmNvbS9Ib21lUHJvLmh0bSkgKi8KKyNkZWZpbmUgRlRESV9BQ1RaV0FWRV9QSUQJMHhGMkQwCisKKwogLyogd3d3LmlydHJhbnMuZGUgZGV2aWNlICovCiAjZGVmaW5lIEZURElfSVJUUkFOU19QSUQgMHhGQzYwIC8qIFByb2R1Y3QgSWQgKi8KIApAQCAtMzksNiArNDMsOSBAQAogLyogd3d3LnRob3VnaHR0ZWNobm9sb2d5LmNvbS8gVFQtVVNCIHByb3ZpZGUgd2l0aCBwcm9jb21wIHVzZSBmdGRpX3NpbyAqLwogI2RlZmluZSBGVERJX1RUVVNCX1BJRCAweEZGMjAgLyogUHJvZHVjdCBJZCAqLwogCisvKiBpUGx1cyBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9JUExVU19QSUQgMHhEMDcwIC8qIFByb2R1Y3QgSWQgKi8KKwogLyogd3d3LmNyeXN0YWxmb250ei5jb20gZGV2aWNlcyAtIHRoYW54IGZvciBwcm92aWRpbmcgZnJlZSBkZXZpY2VzIGZvciBldmFsdWF0aW9uICEgKi8KIC8qIHRoZXkgdXNlIHRoZSBmdGRpIGNoaXBzZXQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCB0aGUgdmVuZG9yIGlkIGlzIHRoZSBzYW1lICovCiAjZGVmaW5lIEZURElfWEZfNjMyX1BJRCAweEZDMDgJLyogNjMyOiAxNngyIENoYXJhY3RlciBEaXNwbGF5ICovCkBAIC0xNTMsNiArMTYwLDExIEBACiAjZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAogCiAvKgorICogQVNLLmZyIGRldmljZXMKKyAqLworI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KKworLyoKICAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAogICovCiAgCkBAIC0zOTksNiArNDExLDMxIEBACiAjZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF83NzdfUElECTB4REMwMAkvKiBNb2RlbCA3NzcgKi8KICNkZWZpbmUgRlRESV9XRVNUUkVYX01PREVMXzg5MDBGX1BJRAkweERDMDEJLyogTW9kZWwgODkwMEYgKi8KIAorLyoKKyAqIFJSLUNpcktpdHMgTG9jb0J1ZmZlciBVU0IgKGh0dHA6Ly93d3cucnItY2lya2l0cy5jb20pCisgKi8KKyNkZWZpbmUgRlRESV9SUkNJUktJVFNfTE9DT0JVRkZFUl9QSUQJMHhjN2QwCS8qIExvY29CdWZmZXIgVVNCICovCisKKy8qCisgKiBFY2xvIChodHRwOi8vd3d3LmVjbG8ucHQvKSBwcm9kdWN0IElEcy4KKyAqIFBJRCAweEVBOTAgc3VibWl0dGVkIGJ5IE1hcnRpbiBHcmlsbC4KKyAqLworI2RlZmluZSBGVERJX0VDTE9fQ09NXzFXSVJFX1BJRAkweEVBOTAJLyogQ09NIHRvIDEtV2lyZSBVU0IgYWRhcHRvciAqLworCisvKgorICogUGFwb3VjaCBwcm9kdWN0cyAoaHR0cDovL3d3dy5wYXBvdWNoLmNvbS8pCisgKiBTdWJtaXR0ZWQgYnkgRm9sa2VydCB2YW4gSGV1c2RlbgorICovCisKKyNkZWZpbmUgUEFQT1VDSF9WSUQJCQkweDUwNTAJLyogVmVuZG9yIElEICovCisjZGVmaW5lIFBBUE9VQ0hfVE1VX1BJRAkJCTB4MDQwMAkvKiBUTVUgVVNCIFRoZXJtb21ldGVyICovCisKKy8qCisgKiBBQ0cgSWRlbnRpZmljYXRpb24gVGVjaG5vbG9naWVzIEdtYkggcHJvZHVjdHMgKGh0dHA6Ly93d3cuYWNnLmRlLykuCisgKiBTdWJtaXR0ZWQgYnkgYW50b24gLWF0LSBnb3RvMTAgLWRvdC0gb3JnLgorICovCisjZGVmaW5lIEZURElfQUNHX0hGRFVBTF9QSUQJCTB4REQyMAkvKiBIRiBEdWFsIElTTyBSZWFkZXIgKFJGSUQpICovCisKIC8qIENvbW1hbmRzICovCiAjZGVmaW5lIEZURElfU0lPX1JFU0VUIAkJMCAvKiBSZXNldCB0aGUgcG9ydCAqLwogI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z1bnNvZnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzNzIxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIEZ1bnNvZnQgU2VyaWFsIFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MTQwNCwgMHhjZGRjKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZnVuc29mdF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJImZ1bnNvZnQiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgZnVuc29mdF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJmdW5zb2Z0IiwKKwl9LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZ1bnNvZnRfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZmdW5zb2Z0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmZ1bnNvZnRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ1bnNvZnRfZGV2aWNlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnVuc29mdF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmZ1bnNvZnRfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ1bnNvZnRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZnVuc29mdF9pbml0KTsKK21vZHVsZV9leGl0KGZ1bnNvZnRfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCA0NzZjZGExLi5jNjJjYzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTEzOCw2ICsxMzgsNyBAQAogCiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKTsKIAogc3RhdGljIHZvaWQgZ2VuZXJpY19jbGVhbnVwIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKaW5kZXggNGQ0MDcwNC4uMjM4MDMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCkBAIC0yNTcsMTQgKzI1NywxNCBAQAogCQlyZXR1cm4gKDApOwogCX0KIAotCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7Ci0JaWYgKHBvcnQtPndyaXRlX3VyYl9idXN5KSB7Ci0JCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlzcGluX2xvY2soJndwb3J0LT5sb2NrKTsKKwlpZiAod3BvcnQtPndyaXRlX3VyYl9idXN5KSB7CisJCXNwaW5fdW5sb2NrKCZ3cG9ydC0+bG9jayk7CiAJCWRiZygiJXMgLSBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gMDsKIAl9Ci0JcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAxOwotCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwl3cG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAxOworCXNwaW5fdW5sb2NrKCZ3cG9ydC0+bG9jayk7CiAKIAljb3VudCA9IChjb3VudCA+IE9NTklORVRfQlVMS09VVFNJWkUpID8gT01OSU5FVF9CVUxLT1VUU0laRSA6IGNvdW50OwogCkBAIC0yODMsNyArMjgzLDcgQEAKIAl3cG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih3cG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKKwkJd3BvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKIAkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CiAJfSBlbHNlCiAJCXJlc3VsdCA9IGNvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDQ5NWRiNTcuLjVjZjJiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTI4LDYgKzI4LDcgQEAKICAgMjAwNS0wOS0xMCAgdjAuNC4zIGFkZGVkIEhVQVdFSSBFNjAwIGNhcmQgYW5kIEF1ZGlvdm94IEFpckNhcmQKICAgMjAwNS0wOS0yMCAgdjAuNC40IGluY3JlYXNlZCByZWN2IGJ1ZmZlciBzaXplOiB0aGUgY2FyZCBzb21ldGltZXMKICAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIHNlbmQgPjIwMDAgYnl0ZXMuCisgIDIwMDYtMDQtMTAgIHYwLjQuMiBmaXhlZCB0d28gYXJyYXkgb3ZlcnJ1biBlcnJvcnMgOi0vCiAKICAgV29yayBzcG9uc29yZWQgYnk6IFNpZ29zIEdtYkgsIEdlcm1hbnkgPGluZm9Ac2lnb3MuZGU+CiAKQEAgLTU4MiwxNCArNTgzLDE0IEBACiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAkvKiBEbyBpbmRhdCBlbmRwb2ludHMgZmlyc3QgKi8KLQlmb3IgKGogPSAwOyBqIDw9IE5fSU5fVVJCOyArK2opIHsKKwlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7ICsraikgewogCQlwb3J0ZGF0YS0+aW5fdXJic1tqXSA9IG9wdGlvbl9zZXR1cF91cmIgKHNlcmlhbCwKICAgICAgICAgICAgICAgICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzLCBVU0JfRElSX0lOLCBwb3J0LAogICAgICAgICAgICAgICAgICAgcG9ydGRhdGEtPmluX2J1ZmZlcltqXSwgSU5fQlVGTEVOLCBvcHRpb25faW5kYXRfY2FsbGJhY2spOwogCX0KIAogCS8qIG91dGRhdCBlbmRwb2ludHMgKi8KLQlmb3IgKGogPSAwOyBqIDw9IE5fT1VUX1VSQjsgKytqKSB7CisJZm9yIChqID0gMDsgaiA8IE5fT1VUX1VSQjsgKytqKSB7CiAJCXBvcnRkYXRhLT5vdXRfdXJic1tqXSA9IG9wdGlvbl9zZXR1cF91cmIgKHNlcmlhbCwKICAgICAgICAgICAgICAgICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcywgVVNCX0RJUl9PVVQsIHBvcnQsCiAgICAgICAgICAgICAgICAgICBwb3J0ZGF0YS0+b3V0X2J1ZmZlcltqXSwgT1VUX0JVRkxFTiwgb3B0aW9uX291dGRhdF9jYWxsYmFjayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggYjMwMTRmZC4uYzk2NzE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtNjEsNiArNjEsNyBAQAogCXsgVVNCX0RFVklDRShFTENPTV9WRU5ET1JfSUQsIEVMQ09NX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKEVMQ09NX1ZFTkRPUl9JRCwgRUxDT01fUFJPRFVDVF9JRF9VQ1NHVCkgfSwKIAl7IFVTQl9ERVZJQ0UoSVRFR05PX1ZFTkRPUl9JRCwgSVRFR05PX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKElURUdOT19WRU5ET1JfSUQsIElURUdOT19QUk9EVUNUX0lEXzIwODApIH0sCiAJeyBVU0JfREVWSUNFKE1BNjIwX1ZFTkRPUl9JRCwgTUE2MjBfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoUkFUT0NfVkVORE9SX0lELCBSQVRPQ19QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShUUklQUF9WRU5ET1JfSUQsIFRSSVBQX1BST0RVQ1RfSUQpIH0sCkBAIC03OCw2ICs3OSw3IEBACiAJeyBVU0JfREVWSUNFKFNBR0VNX1ZFTkRPUl9JRCwgU0FHRU1fUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTEVBRFRFS19WRU5ET1JfSUQsIExFQURURUtfOTUzMV9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShTUEVFRERSQUdPTl9WRU5ET1JfSUQsIFNQRUVERFJBR09OX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKE9USV9WRU5ET1JfSUQsIE9USV9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAppbmRleCA3NzkwMWQxLi43ZjI5ZTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCkBAIC0yNiw2ICsyNiw3IEBACiAKICNkZWZpbmUgSVRFR05PX1ZFTkRPUl9JRAkweDBlYmEKICNkZWZpbmUgSVRFR05PX1BST0RVQ1RfSUQJMHgxMDgwCisjZGVmaW5lIElURUdOT19QUk9EVUNUX0lEXzIwODAJMHgyMDgwCiAKICNkZWZpbmUgTUE2MjBfVkVORE9SX0lECQkweDBkZjcKICNkZWZpbmUgTUE2MjBfUFJPRFVDVF9JRAkweDA2MjAKQEAgLTc5LDMgKzgwLDcgQEAKIC8qIFVTQiBHU00gY2FibGUgZnJvbSBTcGVlZCBEcmFnb24gTXVsdGltZWRpYSwgTHRkICovCiAjZGVmaW5lIFNQRUVERFJBR09OX1ZFTkRPUl9JRAkweDBlNTUKICNkZWZpbmUgU1BFRUREUkFHT05fUFJPRFVDVF9JRAkweDExMGIKKworLyogT3VycyBUZWNobm9sb2d5IEluYyBES1UtNSBjbG9uZSwgY2hpcHNldDogUHJvbGlmaWMgVGVjaG5vbG9neSBJbmMgKi8KKyNkZWZpbmUgT1RJX1ZFTkRPUl9JRAkweDBlYTAKKyNkZWZpbmUgT1RJX1BST0RVQ1RfSUQJMHg2ODU4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCAwOTdmNGU4Li45YzM2ZjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKICNpbmNsdWRlICJwbDIzMDMuaCIKQEAgLTE4OSwxMSArMTg5LDE1IEBACiAKIAlwb3J0TnVtYmVyID0gdHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CiAJcG9ydCA9IHNlcmlhbC0+cG9ydFtwb3J0TnVtYmVyXTsKLQlpZiAoIXBvcnQpCi0JCXJldHVybiAtRU5PREVWOworCWlmICghcG9ydCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CisJfQogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmcG9ydC0+c2VtKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwb3J0LT5tdXRleCkpIHsKKwkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CisJfQogCSAKIAkrK3BvcnQtPm9wZW5fY291bnQ7CiAKQEAgLTIwOSw3ICsyMTMsNyBAQAogCQkgKiBzYWZlIGJlY2F1c2Ugd2UgYXJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCiAJCWlmICghdHJ5X21vZHVsZV9nZXQoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpKSB7CiAJCQlyZXR2YWwgPSAtRU5PREVWOwotCQkJZ290byBiYWlsb3V0X2tyZWZfcHV0OworCQkJZ290byBiYWlsb3V0X211dGV4X3VubG9jazsKIAkJfQogCiAJCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcyAKQEAgLTIxOSwxNSArMjIzLDE2IEBACiAJCQlnb3RvIGJhaWxvdXRfbW9kdWxlX3B1dDsKIAl9CiAKLQl1cCgmcG9ydC0+c2VtKTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAlyZXR1cm4gMDsKIAogYmFpbG91dF9tb2R1bGVfcHV0OgogCW1vZHVsZV9wdXQoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpOworYmFpbG91dF9tdXRleF91bmxvY2s6CisJcG9ydC0+b3Blbl9jb3VudCA9IDA7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiBiYWlsb3V0X2tyZWZfcHV0OgogCWtyZWZfcHV0KCZzZXJpYWwtPmtyZWYsIGRlc3Ryb3lfc2VyaWFsKTsKLQlwb3J0LT5vcGVuX2NvdW50ID0gMDsKLQl1cCgmcG9ydC0+c2VtKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yNDAsMTAgKzI0NSwxMCBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAKLQlkb3duKCZwb3J0LT5zZW0pOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAogCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDApIHsKLQkJdXAoJnBvcnQtPnNlbSk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNjIsNyArMjY3LDcgQEAKIAkJbW9kdWxlX3B1dChwb3J0LT5zZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcik7CiAJfQogCi0JdXAoJnBvcnQtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJa3JlZl9wdXQoJnBvcnQtPnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOwogfQogCkBAIC03ODMsNyArNzg4LDcgQEAKIAkJcG9ydC0+bnVtYmVyID0gaSArIHNlcmlhbC0+bWlub3I7CiAJCXBvcnQtPnNlcmlhbCA9IHNlcmlhbDsKIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwotCQlzZW1hX2luaXQoJnBvcnQtPnNlbSwgMSk7CisJCW11dGV4X2luaXQoJnBvcnQtPm11dGV4KTsKIAkJSU5JVF9XT1JLKCZwb3J0LT53b3JrLCB1c2Jfc2VyaWFsX3BvcnRfc29mdGludCwgcG9ydCk7CiAJCXNlcmlhbC0+cG9ydFtpXSA9IHBvcnQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKaW5kZXggZDdkMjdjMy4uZGM4OWQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCkBAIC0xNiw3ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgU0VSSUFMX1RUWV9NQUpPUgkxODgJLyogTmljZSBsZWdhbCBudW1iZXIgbm93ICovCiAjZGVmaW5lIFNFUklBTF9UVFlfTUlOT1JTCTI1NQkvKiBsb2FkcyBvZiBkZXZpY2VzIDopICovCkBAIC0zMSw3ICszMSw3IEBACiAgKiBAc2VyaWFsOiBwb2ludGVyIGJhY2sgdG8gdGhlIHN0cnVjdCB1c2Jfc2VyaWFsIG93bmVyIG9mIHRoaXMgcG9ydC4KICAqIEB0dHk6IHBvaW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdHR5IGZvciB0aGlzIHBvcnQuCiAgKiBAbG9jazogc3BpbmxvY2sgdG8gZ3JhYiB3aGVuIHVwZGF0aW5nIHBvcnRpb25zIG9mIHRoaXMgc3RydWN0dXJlLgotICogQHNlbTogc2VtYXBob3JlIHVzZWQgdG8gc3luY2hyb25pemUgc2VyaWFsX29wZW4oKSBhbmQgc2VyaWFsX2Nsb3NlKCkKKyAqIEBtdXRleDogbXV0ZXggdXNlZCB0byBzeW5jaHJvbml6ZSBzZXJpYWxfb3BlbigpIGFuZCBzZXJpYWxfY2xvc2UoKQogICoJYWNjZXNzIGZvciB0aGlzIHBvcnQuCiAgKiBAbnVtYmVyOiB0aGUgbnVtYmVyIG9mIHRoZSBwb3J0ICh0aGUgbWlub3IgbnVtYmVyKS4KICAqIEBpbnRlcnJ1cHRfaW5fYnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgaW4gYnVmZmVyIGZvciB0aGlzIHBvcnQuCkBAIC02Myw3ICs2Myw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWwgKglzZXJpYWw7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKgl0dHk7CiAJc3BpbmxvY2tfdAkJbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICBzZW07CisJc3RydWN0IG11dGV4ICAgICAgICAgICAgbXV0ZXg7CiAJdW5zaWduZWQgY2hhcgkJbnVtYmVyOwogCiAJdW5zaWduZWQgY2hhciAqCQlpbnRlcnJ1cHRfaW5fYnVmZmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCmluZGV4IDU1NzQxMWMuLmY4MDY1NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKQEAgLTUwOCw2ICs1MDgsNyBAQAogCWVycigiJXM6IFVuYWJsZSB0byByZXRyaWV2ZSBmaXJtd2FyZSB2ZXJzaW9uLCB0cnkgcmVwbHVnZ2luZ1xuIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAJZXJyKCIlczogSWYgdGhlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIChzdGF0dXMgbGVkIG5vdCBibGlua2luZylcbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCWVycigiJXM6IHBsZWFzZSBjb250YWN0IHN1cHBvcnRAY29ubmVjdHRlY2guY29tXG4iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwlrZnJlZShyZXN1bHQpOwogCXJldHVybiAtRU5PREVWOwogCiBub19jb21tYW5kX3ByaXZhdGU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKaW5kZXggOTJiZTEwMS4uYmU5ZWVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpAQCAtNDgsNyArNDgsOCBAQAogCiBjb25maWcgVVNCX1NUT1JBR0VfSVNEMjAwCiAJYm9vbCAiSVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UgJiYgQkxLX0RFVl9JREUKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCisJZGVwZW5kcyBvbiBCTEtfREVWX0lERT15IHx8IEJMS19ERVZfSURFPVVTQl9TVE9SQUdFCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVVNCIE1hc3MgU3RvcmUgZGV2aWNlcyBiYXNlZAogCSAgb24gdGhlIEluLVN5c3RlbXMgRGVzaWduIElTRC0yMDAgVVNCL0FUQSBicmlkZ2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCBjNGE5ZGNmLi5hZWM1ZWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTQxMSw3ICs0MTEsNyBAQAogVU5VU1VBTF9ERVYoICAweDA1MjUsIDB4YTE0MCwgMHgwMTAwLCAweDAxMDAsCiAJCSJJb21lZ2EiLAogCQkiVVNCIENsaWshIDQwIiwKLQkJVVNfU0NfODA3MCwgVVNfUFJfQlVMSywgTlVMTCwKKwkJVVNfU0NfODA3MCwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9GSVhfSU5RVUlSWSApLAogCiAvKiBZYWt1bW8gTWVnYSBJbWFnZSAzNwpAQCAtNzczLDYgKzc3MywxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfRklYX0NBUEFDSVRZICksCiAKKy8qIFJlcG9ydGVkIGJ5IE9saXZpZXIgQmxvbmRlYXUgPHplaXRvdW5AZ21haWwuY29tPiAqLworVU5VU1VBTF9ERVYoICAweDA3MjcsIDB4MDMwNiwgMHgwMTAwLCAweDAxMDAsCisJCSJBVE1FTCIsCisJCSJTTkQxIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUpLAorCiAvKiBTdWJtaXR0ZWQgYnkgUm9tYW4gSG9kZWsgPHJvbWFuQGhvZGVrLm5ldD4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDEsIDB4MDIwMCwgMHgwMjAwLAogCQkiU2FuZGlzayIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggMjJlOWQ2OS4uNDU4NzA4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtNDAwLDYgKzQwMCw4IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgQXNpbGlhbnQgNjkwMzAgY2hpcHNldAogCiBjb25maWcgRkJfSU1TVFQKIAlib29sICJJTVMgVHdpbiBUdXJibyBkaXNwbGF5IHN1cHBvcnQiCkBAIC05MDQsMTggKzkwNiw2IEBACiAJICBUaGVyZSBpcyBubyBuZWVkIGZvciBlbmFibGluZyAnTWF0cm94IG11bHRpaGVhZCBzdXBwb3J0JyBpZiB5b3UgaGF2ZQogCSAgb25seSBvbmUgTWF0cm94IGNhcmQgaW4gdGhlIGJveC4KIAotY29uZmlnIEZCX1JBREVPTl9PTEQKLQl0cmlzdGF0ZSAiQVRJIFJhZGVvbiBkaXNwbGF5IHN1cHBvcnQgKE9sZCBkcml2ZXIpIgotCWRlcGVuZHMgb24gRkIgJiYgUENJCi0Jc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAotCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKLQlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAotCXNlbGVjdCBGQl9NQUNNT0RFUyBpZiBQUEMKLQloZWxwCi0JICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGFuIEFUSSBSYWRlb24gZ3JhcGhpY3MgY2FyZCBhcwotCSAgYSBmcmFtZWJ1ZmZlciBkZXZpY2UuICBUaGVyZSBhcmUgYm90aCBQQ0kgYW5kIEFHUCB2ZXJzaW9ucy4gIFlvdQotCSAgZG9uJ3QgbmVlZCB0byBjaG9vc2UgdGhpcyB0byBydW4gdGhlIFJhZGVvbiBpbiBwbGFpbiBWR0EgbW9kZS4KLQogY29uZmlnIEZCX1JBREVPTgogCXRyaXN0YXRlICJBVEkgUmFkZW9uIGRpc3BsYXkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQpAQCAtOTczLDcgKzk2Myw3IEBACiAKIGNvbmZpZyBGQl9BVFkKIAl0cmlzdGF0ZSAiQVRJIE1hY2g2NCBkaXNwbGF5IHN1cHBvcnQiIGlmIFBDSSB8fCBBVEFSSQotCWRlcGVuZHMgb24gRkIKKwlkZXBlbmRzIG9uIEZCICYmICFTUEFSQzMyCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggY2I5MDIxOC4uMjNkZTNiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC0zOSw3ICszOSw2IEBACiBvYmotJChDT05GSUdfRkJfU0FWQUdFKQkJICArPSBzYXZhZ2UvCiBvYmotJChDT05GSUdfRkJfR0VPREUpCQkgICs9IGdlb2RlLwogb2JqLSQoQ09ORklHX0ZCX0k4MTApICAgICAgICAgICAgICs9IHZnYXN0YXRlLm8KLW9iai0kKENPTkZJR19GQl9SQURFT05fT0xEKQkgICs9IHJhZGVvbmZiLm8KIG9iai0kKENPTkZJR19GQl9ORU9NQUdJQykgICAgICAgICArPSBuZW9mYi5vIHZnYXN0YXRlLm8KIG9iai0kKENPTkZJR19GQl9WSVJHRSkgICAgICAgICAgICArPSB2aXJnZWZiLm8KIG9iai0kKENPTkZJR19GQl8zREZYKSAgICAgICAgICAgICArPSB0ZGZ4ZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IGIzOWU3MmQuLmQ5ZDdkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTM0MDAsNyArMzQwMCw3IEBACiAJc3RydWN0IGF0eWZiX3BhciAqcGFyOwogCWludCBpLCByYyA9IC1FTk9NRU07CiAKLQlmb3IgKGkgPSBBUlJBWV9TSVpFKGF0eV9jaGlwcyk7IGkgPj0gMDsgaS0tKQorCWZvciAoaSA9IEFSUkFZX1NJWkUoYXR5X2NoaXBzKSAtIDE7IGkgPj0gMDsgaS0tKQogCQlpZiAocGRldi0+ZGV2aWNlID09IGF0eV9jaGlwc1tpXS5wY2lfaWQpCiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKaW5kZXggOWE2YjViMy4uMzg3YTE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCkBAIC0yMjY1LDcgKzIyNjUsNyBAQAogfTsKIAogCi1zdGF0aWMgaW50IHJhZGVvbmZiX3BjaV9yZWdpc3RlciAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCByYWRlb25mYl9wY2lfcmVnaXN0ZXIgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwppbmRleCAzZDA0YjJkLi43ODk0NTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC0yMTQsMTAgKzIxNCwxMyBAQAogICovCiBpbnQgYXUxMTAwZmJfZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLCB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0Jc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSB0b19hdTExMDBmYl9kZXZpY2UoZmJpKTsKLQl1MzIgKnBhbGV0dGUgPSBmYmRldi0+cmVncy0+bGNkX3BhbGxldHRlYmFzZTsKKwlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldjsKKwl1MzIgKnBhbGV0dGU7CiAJdTMyIHZhbHVlOwogCisJZmJkZXYgPSB0b19hdTExMDBmYl9kZXZpY2UoZmJpKTsKKwlwYWxldHRlID0gZmJkZXYtPnJlZ3MtPmxjZF9wYWxsZXR0ZWJhc2U7CisKIAlpZiAocmVnbm8gPiAoQVUxMTAwX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTIC0gMSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMTYsOSArMzE5LDExIEBACiAgKi8KIGludCBhdTExMDBmYl9mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLQlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOworCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2OwogCWludCBkeTsKIAorCWZiZGV2ID0gdG9fYXUxMTAwZmJfZGV2aWNlKGZiaSk7CisKIAlwcmludF9kYmcoImZiX3Bhbl9kaXNwbGF5ICVwICVwIiwgdmFyLCBmYmkpOwogCiAJaWYgKCF2YXIgfHwgIWZiZGV2KSB7CkBAIC0zODIsMTAgKzM4NywxMiBAQAogICovCiBpbnQgYXUxMTAwZmJfZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOworCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2OwogCXVuc2lnbmVkIGludCBsZW47CiAJdW5zaWduZWQgbG9uZyBzdGFydD0wLCBvZmY7CiAKKwlmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOworCiAJaWYgKHZtYS0+dm1fcGdvZmYgPiAofjBVTCA+PiBQQUdFX1NISUZUKSkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00NjcsNyArNDc0LDcgQEAKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGF1MTEwMGZiX2ZpeC5tbWlvX3N0YXJ0LCBhdTExMDBmYl9maXgubW1pb19sZW4sCiAJCQkJRFJJVkVSX05BTUUpKSB7Ci0JCXByaW50X2VycigiZmFpbCB0byBsb2NrIG1lbW9yeSByZWdpb24gYXQgMHglMDh4IiwKKwkJcHJpbnRfZXJyKCJmYWlsIHRvIGxvY2sgbWVtb3J5IHJlZ2lvbiBhdCAweCUwOGx4IiwKIAkJCQlhdTExMDBmYl9maXgubW1pb19zdGFydCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNTk1LDEzICs2MDIsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCitpbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJLyogVE9ETyAqLwogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK2ludCBhdTExMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKaW5kZXggYjM2N2RlMy4uNjAwZDNlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwpAQCAtMTkyMCwxOTI1ICsxOTIwLDMgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUF1MTIwMCBMQ0QgRHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDUgQU1ECi0gKiBBdXRob3I6IEFNRAotICoKLSAqIEJhc2VkIG9uOgotICogbGludXgvZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMgLS0gU2tlbGV0b24gZm9yIGEgZnJhbWUgYnVmZmVyIGRldmljZQotICogIENyZWF0ZWQgMjggRGVjIDE5OTcgYnkgR2VlcnQgVXl0dGVyaG9ldmVuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotI2luY2x1ZGUgImF1MTIwMGZiLmgiCi0KLSNpZmRlZiBDT05GSUdfUE0KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X3BtLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfRkJfQVUxMjAwX0RFVlMKLSNkZWZpbmUgQ09ORklHX0ZCX0FVMTIwMF9ERVZTIDQKLSNlbmRpZgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJhdTEyMDBmYiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIkxDRCBjb250cm9sbGVyIGRyaXZlciBmb3IgQVUxMjAwIHByb2Nlc3NvcnMiCi0KLSNkZWZpbmUgREVCVUcgMQotCi0jZGVmaW5lIHByaW50X2VycihmLCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiAiIGYgIlxuIiwgIyMgYXJnKQotI2RlZmluZSBwcmludF93YXJuKGYsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiAiIGYgIlxuIiwgIyMgYXJnKQotI2RlZmluZSBwcmludF9pbmZvKGYsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAiIGYgIlxuIiwgIyMgYXJnKQotCi0jaWYgREVCVUcKLSNkZWZpbmUgcHJpbnRfZGJnKGYsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogIiBmICJcbiIsICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHByaW50X2RiZyhmLCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLQotI2RlZmluZSBBVTEyMDBfTENEX0ZCX0lPQ1RMIDB4NDZGRgotCi0jZGVmaW5lIEFVMTIwMF9MQ0RfU0VUX1NDUkVFTiAxCi0jZGVmaW5lIEFVMTIwMF9MQ0RfR0VUX1NDUkVFTiAyCi0jZGVmaW5lIEFVMTIwMF9MQ0RfU0VUX1dJTkRPVyAzCi0jZGVmaW5lIEFVMTIwMF9MQ0RfR0VUX1dJTkRPVyA0Ci0jZGVmaW5lIEFVMTIwMF9MQ0RfU0VUX1BBTkVMICA1Ci0jZGVmaW5lIEFVMTIwMF9MQ0RfR0VUX1BBTkVMICA2Ci0KLSNkZWZpbmUgU0NSRUVOX1NJWkUJCSAgICAoMTw8IDEpCi0jZGVmaW5lIFNDUkVFTl9CQUNLQ09MT1IgICAgKDE8PCAyKQotI2RlZmluZSBTQ1JFRU5fQlJJR0hUTkVTUyAgICgxPDwgMykKLSNkZWZpbmUgU0NSRUVOX0NPTE9SS0VZICAgICAoMTw8IDQpCi0jZGVmaW5lIFNDUkVFTl9NQVNLICAgICAgICAgKDE8PCA1KQotCi1zdHJ1Y3QgYXUxMjAwX2xjZF9nbG9iYWxfcmVnc190IHsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHhzaXplOwotCXVuc2lnbmVkIGludCB5c2l6ZTsKLQl1bnNpZ25lZCBpbnQgYmFja2NvbG9yOwotCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOwotCXVuc2lnbmVkIGludCBjb2xvcmtleTsKLQl1bnNpZ25lZCBpbnQgbWFzazsKLQl1bnNpZ25lZCBpbnQgcGFuZWxfY2hvaWNlOwotCWNoYXIgcGFuZWxfZGVzY1s4MF07Ci0KLX07Ci0KLSNkZWZpbmUgV0lOX1BPU0lUSU9OICAgICAgICAgICAgKDE8PCAwKQotI2RlZmluZSBXSU5fQUxQSEFfQ09MT1IgICAgICAgICAoMTw8IDEpCi0jZGVmaW5lIFdJTl9BTFBIQV9NT0RFICAgICAgICAgICgxPDwgMikKLSNkZWZpbmUgV0lOX1BSSU9SSVRZICAgICAgICAgICAgKDE8PCAzKQotI2RlZmluZSBXSU5fQ0hBTk5FTCAgICAgICAgICAgICAoMTw8IDQpCi0jZGVmaW5lIFdJTl9CVUZGRVJfRk9STUFUICAgICAgICgxPDwgNSkKLSNkZWZpbmUgV0lOX0NPTE9SX09SREVSICAgICAgICAgKDE8PCA2KQotI2RlZmluZSBXSU5fUElYRUxfT1JERVIgICAgICAgICAoMTw8IDcpCi0jZGVmaW5lIFdJTl9TSVpFICAgICAgICAgICAgICAgICgxPDwgOCkKLSNkZWZpbmUgV0lOX0NPTE9SS0VZX01PREUgICAgICAgKDE8PCA5KQotI2RlZmluZSBXSU5fRE9VQkxFX0JVRkZFUl9NT0RFICAoMTw8IDEwKQotI2RlZmluZSBXSU5fUkFNX0FSUkFZX01PREUgICAgICAoMTw8IDExKQotI2RlZmluZSBXSU5fQlVGRkVSX1NDQUxFICAgICAgICAoMTw8IDEyKQotI2RlZmluZSBXSU5fRU5BQkxFCSAgICAgICAgICAgICgxPDwgMTMpCi0KLXN0cnVjdCBhdTEyMDBfbGNkX3dpbmRvd19yZWdzX3QgewotCXVuc2lnbmVkIGludCBmbGFnczsKLQl1bnNpZ25lZCBpbnQgeHBvczsKLQl1bnNpZ25lZCBpbnQgeXBvczsKLQl1bnNpZ25lZCBpbnQgYWxwaGFfY29sb3I7Ci0JdW5zaWduZWQgaW50IGFscGhhX21vZGU7Ci0JdW5zaWduZWQgaW50IHByaW9yaXR5OwotCXVuc2lnbmVkIGludCBjaGFubmVsOwotCXVuc2lnbmVkIGludCBidWZmZXJfZm9ybWF0OwotCXVuc2lnbmVkIGludCBjb2xvcl9vcmRlcjsKLQl1bnNpZ25lZCBpbnQgcGl4ZWxfb3JkZXI7Ci0JdW5zaWduZWQgaW50IHhzaXplOwotCXVuc2lnbmVkIGludCB5c2l6ZTsKLQl1bnNpZ25lZCBpbnQgY29sb3JrZXlfbW9kZTsKLQl1bnNpZ25lZCBpbnQgZG91YmxlX2J1ZmZlcl9tb2RlOwotCXVuc2lnbmVkIGludCByYW1fYXJyYXlfbW9kZTsKLQl1bnNpZ25lZCBpbnQgeHNjYWxlOwotCXVuc2lnbmVkIGludCB5c2NhbGU7Ci0JdW5zaWduZWQgaW50IGVuYWJsZTsKLX07Ci0KLQotc3RydWN0IGF1MTIwMF9sY2RfaW9kYXRhX3QgewotCXVuc2lnbmVkIGludCBzdWJjbWQ7Ci0Jc3RydWN0IGF1MTIwMF9sY2RfZ2xvYmFsX3JlZ3NfdCBnbG9iYWw7Ci0Jc3RydWN0IGF1MTIwMF9sY2Rfd2luZG93X3JlZ3NfdCB3aW5kb3c7Ci19OwotCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0jZGVmaW5lIExDRF9DT05UUk9MX0RFRkFVTFRfUE8gTENEX0NPTlRST0xfUE9fMTEKLSNlbHNlCi0jZGVmaW5lIExDRF9DT05UUk9MX0RFRkFVTFRfUE8gTENEX0NPTlRST0xfUE9fMDAKLSNlbmRpZgotI2RlZmluZSBMQ0RfQ09OVFJPTF9ERUZBVUxUX1NCUFBGIExDRF9DT05UUk9MX1NCUFBGXzU2NQotCi0vKiBQcml2YXRlLCBwZXItZnJhbWVidWZmZXIgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiAoaW5kZXBlbmRlbnQgb2YgdGhlIHBhbmVsIGl0c2VsZikgKi8KLXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgewotCXN0cnVjdCBmYl9pbmZvIGZiX2luZm87CQkJLyogRkIgZHJpdmVyIGluZm8gcmVjb3JkICovCi0KLQlpbnQJCQkJCXBsYW5lOwotCXVuc2lnbmVkIGNoYXIqIAkJZmJfbWVtOwkJLyogRnJhbWVCdWZmZXIgbWVtb3J5IG1hcCAqLwotCXVuc2lnbmVkIGludAkJZmJfbGVuOwotCWRtYV9hZGRyX3QgICAgCQlmYl9waHlzOwotfTsKLQotc3RhdGljIHN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgX2F1MTIwMGZiX2RldmljZXNbQ09ORklHX0ZCX0FVMTIwMF9ERVZTXTsKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTENEIGNvbnRyb2xsZXIgcmVzdHJpY3Rpb25zICovCi0jZGVmaW5lIEFVMTIwMF9MQ0RfTUFYX1hSRVMJMTI4MAotI2RlZmluZSBBVTEyMDBfTENEX01BWF9ZUkVTCTEwMjQKLSNkZWZpbmUgQVUxMjAwX0xDRF9NQVhfQlBQCTMyCi0jZGVmaW5lIEFVMTIwMF9MQ0RfTUFYX0NMSwk5NjAwMDAwMCAvKiBmaXhtZTogdGhpcyBuZWVkcyB0byBnbyBhd2F5ID8gKi8KLSNkZWZpbmUgQVUxMjAwX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTIDI1NgotCi0vKiBEZWZhdWx0IG51bWJlciBvZiB2aXNpYmxlIHNjcmVlbiBidWZmZXIgdG8gYWxsb2NhdGUgKi8KLSNkZWZpbmUgQVUxMjAwRkJfTkJSX1ZJREVPX0JVRkZFUlMgMQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgYXUxMjAwX2xjZCAqbGNkID0gKHN0cnVjdCBhdTEyMDBfbGNkICopIEFVMTIwMF9MQ0RfQUREUjsKLXN0YXRpYyBpbnQgd2luZG93X2luZGV4ID0gMjsgLyogZGVmYXVsdCBpcyB6ZXJvICovCi1zdGF0aWMgaW50IHBhbmVsX2luZGV4ID0gMjsgLyogZGVmYXVsdCBpcyB6ZXJvICovCi1zdGF0aWMgc3RydWN0IHdpbmRvd19zZXR0aW5ncyAqd2luOwotc3RhdGljIHN0cnVjdCBwYW5lbF9zZXR0aW5ncyAqcGFuZWw7Ci1zdGF0aWMgaW50IG5vYmxhbmtpbmcgPSAxOwotc3RhdGljIGludCBub2h3Y3Vyc29yID0gMDsKLQotc3RydWN0IHdpbmRvd19zZXR0aW5ncyB7Ci0JdW5zaWduZWQgY2hhciBuYW1lWzY0XTsKLQl1aW50MzIgbW9kZV9iYWNrY29sb3I7Ci0JdWludDMyIG1vZGVfY29sb3JrZXk7Ci0JdWludDMyIG1vZGVfY29sb3JrZXltc2s7Ci0Jc3RydWN0IHsKLQkJaW50IHhyZXM7Ci0JCWludCB5cmVzOwotCQlpbnQgeHBvczsKLQkJaW50IHlwb3M7Ci0JCXVpbnQzMiBtb2RlX3dpbmN0cmwxOyAvKiB3aW5jdHJsMVtGUk0sQ0NPLFBPLFBJUEVdICovCi0JCXVpbnQzMiBtb2RlX3dpbmVuYWJsZTsKLQl9IHdbNF07Ci19OwotCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0jZGVmaW5lIExDRF9XSU5DVFJMMV9QT18xNkJQUCBMQ0RfV0lOQ1RSTDFfUE9fMDAKLSNlbHNlCi0jZGVmaW5lIExDRF9XSU5DVFJMMV9QT18xNkJQUCBMQ0RfV0lOQ1RSTDFfUE9fMDEKLSNlbmRpZgotCi1leHRlcm4gaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQgKHZvaWQpOwotZXh0ZXJuIGludCBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biAodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLWludCBhdTEyMDBmYl9wbV9jYWxsYmFjayhhdTF4eHhfcG93ZXJfZGV2X3QgKmRldiwKLQkJYXUxeHh4X3JlcXVlc3RfdCByZXF1ZXN0LCB2b2lkICpkYXRhKTsKLWF1MXh4eF9wb3dlcl9kZXZfdCAqTENEX3BtX2RldjsKLSNlbmRpZgotCi0vKgotICogRGVmYXVsdCB3aW5kb3cgY29uZmlndXJhdGlvbnMKLSAqLwotc3RhdGljIHN0cnVjdCB3aW5kb3dfc2V0dGluZ3Mgd2luZG93c1tdID0gewotCXsgLyogSW5kZXggMCAqLwotCQkiMC1GUyBnZngsIDEtdmlkZW8sIDItb3ZseSBnZngsIDMtb3ZseSBnZngiLAotCQkvKiBtb2RlX2JhY2tjb2xvcgkqLyAweDAwNjYwMGZmLAotCQkvKiBtb2RlX2NvbG9ya2V5LG1zayovIDAsIDAsCi0JCXsKLQkJCXsKLQkJCS8qIHhyZXMsIHlyZXMsIHhwb3MsIHlwb3MgKi8gMCwgMCwgMCwgMCwKLQkJCS8qIG1vZGVfd2luY3RybDEgKi8gTENEX1dJTkNUUkwxX0ZSTV8xNkJQUDU2NSB8Ci0JCQkJTENEX1dJTkNUUkwxX1BPXzE2QlBQLAotCQkJLyogbW9kZV93aW5lbmFibGUqLyBMQ0RfV0lORU5BQkxFX1dFTjAsCi0JCQl9LAotCQkJewotCQkJLyogeHJlcywgeXJlcywgeHBvcywgeXBvcyAqLyAxMDAsIDEwMCwgMTAwLCAxMDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCB8Ci0JCQkJTENEX1dJTkNUUkwxX1BJUEUsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIExDRF9XSU5FTkFCTEVfV0VOMSwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCwKLQkJCS8qIG1vZGVfd2luZW5hYmxlKi8gMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCB8Ci0JCQkJTENEX1dJTkNUUkwxX1BJUEUsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIDAsCi0JCQl9LAotCQl9LAotCX0sCi0KLQl7IC8qIEluZGV4IDEgKi8KLQkJIjAtRlMgZ2Z4LCAxLXZpZGVvLCAyLW92bHkgZ2Z4LCAzLW92bHkgZ2Z4IiwKLQkJLyogbW9kZV9iYWNrY29sb3IJKi8gMHgwMDY2MDBmZiwKLQkJLyogbW9kZV9jb2xvcmtleSxtc2sqLyAwLCAwLAotCQl7Ci0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDMyMCwgMjQwLCA1LCA1LAotCQkJLyogbW9kZV93aW5jdHJsMSAqLyBMQ0RfV0lOQ1RSTDFfRlJNXzI0QlBQIHwKLQkJCQlMQ0RfV0lOQ1RSTDFfUE9fMDAsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIExDRF9XSU5FTkFCTEVfV0VOMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUKLQkJCQl8IExDRF9XSU5DVFJMMV9QT18xNkJQUCwKLQkJCS8qIG1vZGVfd2luZW5hYmxlKi8gMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDEwMCwgMTAwLCAwLCAwLAotCQkJLyogbW9kZV93aW5jdHJsMSAqLyBMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNTY1IHwKLQkJCQlMQ0RfV0lOQ1RSTDFfUE9fMTZCUFAgfAotCQkJCUxDRF9XSU5DVFJMMV9QSVBFLAotCQkJLyogbW9kZV93aW5lbmFibGUqLyAwLypMQ0RfV0lORU5BQkxFX1dFTjIqLywKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDIwMCwgMjUsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCB8Ci0JCQkJTENEX1dJTkNUUkwxX1BJUEUsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIDAsCi0JCQl9LAotCQl9LAotCX0sCi0JeyAvKiBJbmRleCAyICovCi0JCSIwLUZTIGdmeCwgMS12aWRlbywgMi1vdmx5IGdmeCwgMy1vdmx5IGdmeCIsCi0JCS8qIG1vZGVfYmFja2NvbG9yCSovIDB4MDA2NjAwZmYsCi0JCS8qIG1vZGVfY29sb3JrZXksbXNrKi8gMCwgMCwKLQkJewotCQkJewotCQkJLyogeHJlcywgeXJlcywgeHBvcywgeXBvcyAqLyAwLCAwLCAwLCAwLAotCQkJLyogbW9kZV93aW5jdHJsMSAqLyBMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNTY1IHwKLQkJCQlMQ0RfV0lOQ1RSTDFfUE9fMTZCUFAsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIExDRF9XSU5FTkFCTEVfV0VOMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCwKLQkJCS8qIG1vZGVfd2luZW5hYmxlKi8gMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMzJCUFAgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18wMHxMQ0RfV0lOQ1RSTDFfUElQRSwKLQkJCS8qIG1vZGVfd2luZW5hYmxlKi8gMC8qTENEX1dJTkVOQUJMRV9XRU4yKi8sCi0JCQl9LAotCQkJewotCQkJLyogeHJlcywgeXJlcywgeHBvcywgeXBvcyAqLyAwLCAwLCAwLCAwLAotCQkJLyogbW9kZV93aW5jdHJsMSAqLyBMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNTY1IHwKLQkJCQlMQ0RfV0lOQ1RSTDFfUE9fMTZCUFAgfAotCQkJCUxDRF9XSU5DVFJMMV9QSVBFLAotCQkJLyogbW9kZV93aW5lbmFibGUqLyAwLAotCQkJfSwKLQkJfSwKLQl9LAotCS8qIE5lZWQgVkdBIDY0MCBAIDI0YnBwLCBAIDMyYnBwICovCi0JLyogTmVlZCBWR0EgODAwIEAgMjRicHAsIEAgMzJicHAgKi8KLQkvKiBOZWVkIFZHQSAxMDI0IEAgMjRicHAsIEAgMzJicHAgKi8KLX07Ci0KLS8qCi0gKiBDb250cm9sbGVyIGNvbmZpZ3VyYXRpb25zIGZvciB2YXJpb3VzIHBhbmVscy4KLSAqLwotCi1zdHJ1Y3QgcGFuZWxfc2V0dGluZ3MKLXsKLQljb25zdCBjaGFyIG5hbWVbMjVdOwkJLyogRnVsbCBuYW1lIDx2ZW5kb3I+Xzxtb2RlbD4gKi8KLQotCXN0cnVjdCAJZmJfbW9uc3BlY3MgbW9uc3BlY3M7IAkvKiBGQiBtb25pdG9yIHNwZWNzICovCi0KLQkvKiBwYW5lbCB0aW1pbmdzICovCi0JdWludDMyIG1vZGVfc2NyZWVuOwotCXVpbnQzMiBtb2RlX2hvcnp0aW1pbmc7Ci0JdWludDMyIG1vZGVfdmVydHRpbWluZzsKLQl1aW50MzIgbW9kZV9jbGtjb250cm9sOwotCXVpbnQzMiBtb2RlX3B3bWRpdjsKLQl1aW50MzIgbW9kZV9wd21oaTsKLQl1aW50MzIgbW9kZV9vdXRtYXNrOwotCXVpbnQzMiBtb2RlX2ZpZm9jdHJsOwotCXVpbnQzMiBtb2RlX3RveWNsa3NyYzsKLQl1aW50MzIgbW9kZV9iYWNrbGlnaHQ7Ci0JdWludDMyIG1vZGVfYXV4cGxsOwotCWludCAoKmRldmljZV9pbml0KSh2b2lkKTsKLQlpbnQgKCpkZXZpY2Vfc2h1dGRvd24pKHZvaWQpOwotI2RlZmluZSBYcmVzIG1pbl94cmVzCi0jZGVmaW5lIFlyZXMgbWluX3lyZXMKLQl1MzIJbWluX3hyZXM7CQkvKiBNaW5pbXVtIGhvcml6b250YWwgcmVzb2x1dGlvbiAqLwotCXUzMgltYXhfeHJlczsJCS8qIE1heGltdW0gaG9yaXpvbnRhbCByZXNvbHV0aW9uICovCi0JdTMyIAltaW5feXJlczsJCS8qIE1pbmltdW0gdmVydGljYWwgcmVzb2x1dGlvbiAqLwotCXUzMiAJbWF4X3lyZXM7CQkvKiBNYXhpbXVtIHZlcnRpY2FsIHJlc29sdXRpb24gKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIGZpeG1lOiBNYXliZSBhIG1vZGVkYiBmb3IgdGhlIENSVCA/IG90aGVyd2lzZSBwYW5lbHMgc2hvdWxkIGJlIGFzLWlzICovCi0KLS8qIExpc3Qgb2YgcGFuZWxzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgQVUxMjAwIExDRCBjb250cm9sbGVyLgotICogVG8gYWRkIGEgbmV3IHBhbmVsLCBlbnRlciB0aGUgc2FtZSBzcGVjaWZpY2F0aW9ucyBhcyB0aGUKLSAqIEdlbmVyaWNfVEZUIG9uZSwgYW5kIE1BS0UgU1VSRSB0aGF0IGl0IGRvZXNuJ3QgY29uZmxpY3RzCi0gKiB3aXRoIHRoZSBjb250cm9sbGVyIHJlc3RyaWN0aW9ucy4gUmVzdHJpY3Rpb25zIGFyZToKLSAqCi0gKiBTVE4gY29sb3IgcGFuZWxzOiBtYXhfYnBwIDw9IDEyCi0gKiBTVE4gbW9ubyBwYW5lbHM6IG1heF9icHAgPD0gNAotICogVEZUIHBhbmVsczogbWF4X2JwcCA8PSAxNgotICogbWF4X3hyZXMgPD0gODAwCi0gKiBtYXhfeXJlcyA8PSA2MDAKLSAqLwotc3RhdGljIHN0cnVjdCBwYW5lbF9zZXR0aW5ncyBrbm93bl9sY2RfcGFuZWxzW10gPQotewotCVswXSA9IHsgLyogUVZHQSAzMjB4MjQwIEg6MzMuM2tIeiBWOjExMEh6ICovCi0JCS5uYW1lID0gIlFWR0FfMzIweDI0MCIsCi0JCS5tb25zcGVjcyA9IHsKLQkJCS5tb2RlZGIgPSBOVUxMLAotCQkJLm1vZGVkYl9sZW4gPSAwLAotCQkJLmhmbWluID0gMzAwMDAsCi0JCQkuaGZtYXggPSA3MDAwMCwKLQkJCS52Zm1pbiA9IDYwLAotCQkJLnZmbWF4ID0gNjAsCi0JCQkuZGNsa21pbiA9IDYwMDAwMDAsCi0JCQkuZGNsa21heCA9IDI4MDAwMDAwLAotCQkJLmlucHV0ID0gRkJfRElTUF9SR0IsCi0JCX0sCi0JCS5tb2RlX3NjcmVlbgkJPSBMQ0RfU0NSRUVOX1NYX04oMzIwKSB8Ci0JCQlMQ0RfU0NSRUVOX1NZX04oMjQwKSwKLQkJLm1vZGVfaG9yenRpbWluZwk9IDB4MDBjNDYyM2IsCi0JCS5tb2RlX3ZlcnR0aW1pbmcJPSAweDAwNTAyODE0LAotCQkubW9kZV9jbGtjb250cm9sCT0gMHgwMDAyMDAwMiwgLyogLzQ9MjRNaHogKi8KLQkJLm1vZGVfcHdtZGl2CQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX3B3bWhpCQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX291dG1hc2sJPSAweDAwRkZGRkZGLAotCQkubW9kZV9maWZvY3RybAk9IDB4MmYyZjJmMmYsCi0JCS5tb2RlX3RveWNsa3NyYwk9IDB4MDAwMDAwMDQsIC8qIEFVWFBMTCBkaXJlY3RseSAqLwotCQkubW9kZV9iYWNrbGlnaHQJPSAweDAwMDAwMDAwLAotCQkubW9kZV9hdXhwbGwJCT0gOCwgLyogOTZNSHogQVVYUExMICovCi0JCS5kZXZpY2VfaW5pdAkJPSBOVUxMLAotCQkuZGV2aWNlX3NodXRkb3duCT0gTlVMTCwKLQkJMzIwLCAzMjAsCi0JCTI0MCwgMjQwLAotCX0sCi0KLQlbMV0gPSB7IC8qIFZHQSA2NDB4NDgwIEg6MzAuM2tIeiBWOjU4SHogKi8KLQkJLm5hbWUgPSAiVkdBXzY0MHg0ODAiLAotCQkubW9uc3BlY3MgPSB7Ci0JCQkubW9kZWRiID0gTlVMTCwKLQkJCS5tb2RlZGJfbGVuID0gMCwKLQkJCS5oZm1pbiA9IDMwMDAwLAotCQkJLmhmbWF4ID0gNzAwMDAsCi0JCQkudmZtaW4gPSA2MCwKLQkJCS52Zm1heCA9IDYwLAotCQkJLmRjbGttaW4gPSA2MDAwMDAwLAotCQkJLmRjbGttYXggPSAyODAwMDAwMCwKLQkJCS5pbnB1dCA9IEZCX0RJU1BfUkdCLAotCQl9LAotCQkubW9kZV9zY3JlZW4JCT0gMHgxM2Y5ZGY4MCwKLQkJLm1vZGVfaG9yenRpbWluZwk9IDB4MDAzYzU4NTksCi0JCS5tb2RlX3ZlcnR0aW1pbmcJPSAweDAwNzQxMjAxLAotCQkubW9kZV9jbGtjb250cm9sCT0gMHgwMDAyMDAwMSwgLyogLzQ9MjRNaHogKi8KLQkJLm1vZGVfcHdtZGl2CQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX3B3bWhpCQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX291dG1hc2sJPSAweDAwRkZGRkZGLAotCQkubW9kZV9maWZvY3RybAk9IDB4MmYyZjJmMmYsCi0JCS5tb2RlX3RveWNsa3NyYwk9IDB4MDAwMDAwMDQsIC8qIEFVWFBMTCBkaXJlY3RseSAqLwotCQkubW9kZV9iYWNrbGlnaHQJPSAweDAwMDAwMDAwLAotCQkubW9kZV9hdXhwbGwJCT0gOCwgLyogOTZNSHogQVVYUExMICovCi0JCS5kZXZpY2VfaW5pdAkJPSBOVUxMLAotCQkuZGV2aWNlX3NodXRkb3duCT0gTlVMTCwKLQkJNjQwLCA0ODAsCi0JCTY0MCwgNDgwLAotCX0sCi0KLQlbMl0gPSB7IC8qIFNWR0EgODAweDYwMCBIOjQ2LjFrSHogVjo2OUh6ICovCi0JCS5uYW1lID0gIlNWR0FfODAweDYwMCIsCi0JCS5tb25zcGVjcyA9IHsKLQkJCS5tb2RlZGIgPSBOVUxMLAotCQkJLm1vZGVkYl9sZW4gPSAwLAotCQkJLmhmbWluID0gMzAwMDAsCi0JCQkuaGZtYXggPSA3MDAwMCwKLQkJCS52Zm1pbiA9IDYwLAotCQkJLnZmbWF4ID0gNjAsCi0JCQkuZGNsa21pbiA9IDYwMDAwMDAsCi0JCQkuZGNsa21heCA9IDI4MDAwMDAwLAotCQkJLmlucHV0ID0gRkJfRElTUF9SR0IsCi0JCX0sCi0JCS5tb2RlX3NjcmVlbgkJPSAweDE4ZmE1NzgwLAotCQkubW9kZV9ob3J6dGltaW5nCT0gMHgwMGRjN2U3NywKLQkJLm1vZGVfdmVydHRpbWluZwk9IDB4MDA1ODQ4MDUsCi0JCS5tb2RlX2Nsa2NvbnRyb2wJPSAweDAwMDIwMDAwLCAvKiAvMj00OE1oeiAqLwotCQkubW9kZV9wd21kaXYJCT0gMHgwMDAwMDAwMCwKLQkJLm1vZGVfcHdtaGkJCT0gMHgwMDAwMDAwMCwKLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBGRkZGRkYsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IE5VTEwsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBOVUxMLAotCQk4MDAsIDgwMCwKLQkJNjAwLCA2MDAsCi0JfSwKLQotCVszXSA9IHsgLyogWFZHQSAxMDI0eDc2OCBIOjU2LjJrSHogVjo3MEh6ICovCi0JCS5uYW1lID0gIlhWR0FfMTAyNHg3NjgiLAotCQkubW9uc3BlY3MgPSB7Ci0JCQkubW9kZWRiID0gTlVMTCwKLQkJCS5tb2RlZGJfbGVuID0gMCwKLQkJCS5oZm1pbiA9IDMwMDAwLAotCQkJLmhmbWF4ID0gNzAwMDAsCi0JCQkudmZtaW4gPSA2MCwKLQkJCS52Zm1heCA9IDYwLAotCQkJLmRjbGttaW4gPSA2MDAwMDAwLAotCQkJLmRjbGttYXggPSAyODAwMDAwMCwKLQkJCS5pbnB1dCA9IEZCX0RJU1BfUkdCLAotCQl9LAotCQkubW9kZV9zY3JlZW4JCT0gMHgxZmZhZmY4MCwKLQkJLm1vZGVfaG9yenRpbWluZwk9IDB4MDA3ZDBlNTcsCi0JCS5tb2RlX3ZlcnR0aW1pbmcJPSAweDAwNzQwYTAxLAotCQkubW9kZV9jbGtjb250cm9sCT0gMHgwMDBBMDAwMCwgLyogLzEgKi8KLQkJLm1vZGVfcHdtZGl2CQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX3B3bWhpCQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX291dG1hc2sJPSAweDAwRkZGRkZGLAotCQkubW9kZV9maWZvY3RybAk9IDB4MmYyZjJmMmYsCi0JCS5tb2RlX3RveWNsa3NyYwk9IDB4MDAwMDAwMDQsIC8qIEFVWFBMTCBkaXJlY3RseSAqLwotCQkubW9kZV9iYWNrbGlnaHQJPSAweDAwMDAwMDAwLAotCQkubW9kZV9hdXhwbGwJCT0gNiwgLyogNzJNSHogQVVYUExMICovCi0JCS5kZXZpY2VfaW5pdAkJPSBOVUxMLAotCQkuZGV2aWNlX3NodXRkb3duCT0gTlVMTCwKLQkJMTAyNCwgMTAyNCwKLQkJNzY4LCA3NjgsCi0JfSwKLQotCVs0XSA9IHsgLyogWFZHQSBYVkdBIDEyODB4MTAyNCBIOjY4LjVrSHogVjo2NUh6ICovCi0JCS5uYW1lID0gIlhWR0FfMTI4MHgxMDI0IiwKLQkJLm1vbnNwZWNzID0gewotCQkJLm1vZGVkYiA9IE5VTEwsCi0JCQkubW9kZWRiX2xlbiA9IDAsCi0JCQkuaGZtaW4gPSAzMDAwMCwKLQkJCS5oZm1heCA9IDcwMDAwLAotCQkJLnZmbWluID0gNjAsCi0JCQkudmZtYXggPSA2MCwKLQkJCS5kY2xrbWluID0gNjAwMDAwMCwKLQkJCS5kY2xrbWF4ID0gMjgwMDAwMDAsCi0JCQkuaW5wdXQgPSBGQl9ESVNQX1JHQiwKLQkJfSwKLQkJLm1vZGVfc2NyZWVuCQk9IDB4MjdmYmZmODAsCi0JCS5tb2RlX2hvcnp0aW1pbmcJPSAweDAwY2RiMmM3LAotCQkubW9kZV92ZXJ0dGltaW5nCT0gMHgwMDYwMDAwMiwKLQkJLm1vZGVfY2xrY29udHJvbAk9IDB4MDAwQTAwMDAsIC8qIC8xICovCi0JCS5tb2RlX3B3bWRpdgkJPSAweDAwMDAwMDAwLAotCQkubW9kZV9wd21oaQkJPSAweDAwMDAwMDAwLAotCQkubW9kZV9vdXRtYXNrCT0gMHgwMEZGRkZGRiwKLQkJLm1vZGVfZmlmb2N0cmwJPSAweDJmMmYyZjJmLAotCQkubW9kZV90b3ljbGtzcmMJPSAweDAwMDAwMDA0LCAvKiBBVVhQTEwgZGlyZWN0bHkgKi8KLQkJLm1vZGVfYmFja2xpZ2h0CT0gMHgwMDAwMDAwMCwKLQkJLm1vZGVfYXV4cGxsCQk9IDEwLCAvKiAxMjBNSHogQVVYUExMICovCi0JCS5kZXZpY2VfaW5pdAkJPSBOVUxMLAotCQkuZGV2aWNlX3NodXRkb3duCT0gTlVMTCwKLQkJMTI4MCwgMTI4MCwKLQkJMTAyNCwgMTAyNCwKLQl9LAotCi0JWzVdID0geyAvKiBTYW1zdW5nIDEwMjR4NzY4IFRGVCAqLwotCQkubmFtZSA9ICJTYW1zdW5nXzEwMjR4NzY4X1RGVCIsCi0JCS5tb25zcGVjcyA9IHsKLQkJCS5tb2RlZGIgPSBOVUxMLAotCQkJLm1vZGVkYl9sZW4gPSAwLAotCQkJLmhmbWluID0gMzAwMDAsCi0JCQkuaGZtYXggPSA3MDAwMCwKLQkJCS52Zm1pbiA9IDYwLAotCQkJLnZmbWF4ID0gNjAsCi0JCQkuZGNsa21pbiA9IDYwMDAwMDAsCi0JCQkuZGNsa21heCA9IDI4MDAwMDAwLAotCQkJLmlucHV0ID0gRkJfRElTUF9SR0IsCi0JCX0sCi0JCS5tb2RlX3NjcmVlbgkJPSAweDFmZmFmZjgwLAotCQkubW9kZV9ob3J6dGltaW5nCT0gMHgwMThjYzY3NywKLQkJLm1vZGVfdmVydHRpbWluZwk9IDB4MDAyNDEyMTcsCi0JCS5tb2RlX2Nsa2NvbnRyb2wJPSAweDAwMDAwMDAwLCAvKiBTQ0IgMHgxIC80PTI0TWh6ICovCi0JCS5tb2RlX3B3bWRpdgkJPSAweDgwMDAwNjNmLCAvKiBTQ0IgMHgwICovCi0JCS5tb2RlX3B3bWhpCQk9IDB4MDM0MDAwMDAsIC8qIFNDQiAweDAgKi8KLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBGRkZGRkYsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biwKLQkJMTAyNCwgMTAyNCwKLQkJNzY4LCA3NjgsCi0JfSwKLQotCVs2XSA9IHsgLyogVG9zaGliYSA2NDB4NDgwIFRGVCAqLwotCQkubmFtZSA9ICJUb3NoaWJhXzY0MHg0ODBfVEZUIiwKLQkJLm1vbnNwZWNzID0gewotCQkJLm1vZGVkYiA9IE5VTEwsCi0JCQkubW9kZWRiX2xlbiA9IDAsCi0JCQkuaGZtaW4gPSAzMDAwMCwKLQkJCS5oZm1heCA9IDcwMDAwLAotCQkJLnZmbWluID0gNjAsCi0JCQkudmZtYXggPSA2MCwKLQkJCS5kY2xrbWluID0gNjAwMDAwMCwKLQkJCS5kY2xrbWF4ID0gMjgwMDAwMDAsCi0JCQkuaW5wdXQgPSBGQl9ESVNQX1JHQiwKLQkJfSwKLQkJLm1vZGVfc2NyZWVuCQk9IExDRF9TQ1JFRU5fU1hfTig2NDApIHwKLQkJCUxDRF9TQ1JFRU5fU1lfTig0ODApLAotCQkubW9kZV9ob3J6dGltaW5nCT0gTENEX0hPUlpUSU1JTkdfSFBXX04oOTYpIHwKLQkJCUxDRF9IT1JaVElNSU5HX0hORDFfTigxMykgfCBMQ0RfSE9SWlRJTUlOR19ITkQyX04oNTEpLAotCQkubW9kZV92ZXJ0dGltaW5nCT0gTENEX1ZFUlRUSU1JTkdfVlBXX04oMikgfAotCQkJTENEX1ZFUlRUSU1JTkdfVk5EMV9OKDExKSB8IExDRF9WRVJUVElNSU5HX1ZORDJfTigzMiksCi0JCS5tb2RlX2Nsa2NvbnRyb2wJPSAweDAwMDAwMDAwLCAvKiAvND0yNE1oeiAqLwotCQkubW9kZV9wd21kaXYJCT0gMHg4MDAwMDYzZiwKLQkJLm1vZGVfcHdtaGkJCT0gMHgwMzQwMDAwMCwKLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBmY2ZjZmMsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biwKLQkJNjQwLCA0ODAsCi0JCTY0MCwgNDgwLAotCX0sCi0KLQlbN10gPSB7IC8qIFNoYXJwIDMyMHgyNDAgVEZUICovCi0JCS5uYW1lID0gIlNoYXJwXzMyMHgyNDBfVEZUIiwKLQkJLm1vbnNwZWNzID0gewotCQkJLm1vZGVkYiA9IE5VTEwsCi0JCQkubW9kZWRiX2xlbiA9IDAsCi0JCQkuaGZtaW4gPSAxMjUwMCwKLQkJCS5oZm1heCA9IDIwMDAwLAotCQkJLnZmbWluID0gMzgsCi0JCQkudmZtYXggPSA4MSwKLQkJCS5kY2xrbWluID0gNDUwMDAwMCwKLQkJCS5kY2xrbWF4ID0gNjgwMDAwMCwKLQkJCS5pbnB1dCA9IEZCX0RJU1BfUkdCLAotCQl9LAotCQkubW9kZV9zY3JlZW4JCT0gTENEX1NDUkVFTl9TWF9OKDMyMCkgfAotCQkJTENEX1NDUkVFTl9TWV9OKDI0MCksCi0JCS5tb2RlX2hvcnp0aW1pbmcJPSBMQ0RfSE9SWlRJTUlOR19IUFdfTig2MCkgfAotCQkJTENEX0hPUlpUSU1JTkdfSE5EMV9OKDEzKSB8IExDRF9IT1JaVElNSU5HX0hORDJfTigyKSwKLQkJLm1vZGVfdmVydHRpbWluZwk9IExDRF9WRVJUVElNSU5HX1ZQV19OKDIpIHwKLQkJCUxDRF9WRVJUVElNSU5HX1ZORDFfTigyKSB8IExDRF9WRVJUVElNSU5HX1ZORDJfTig1KSwKLQkJLm1vZGVfY2xrY29udHJvbAk9IExDRF9DTEtDT05UUk9MX1BDRF9OKDcpLCAvKjE2PTZNaHoqLwotCQkubW9kZV9wd21kaXYJCT0gMHg4MDAwMDYzZiwKLQkJLm1vZGVfcHdtaGkJCT0gMHgwMzQwMDAwMCwKLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBmY2ZjZmMsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biwKLQkJMzIwLCAzMjAsCi0JCTI0MCwgMjQwLAotCX0sCi0KLQlbOF0gPSB7IC8qIFRvcHBvbHkgVEQwNzBXR0NCMiA3IiA4NTZ4NDgwIFRGVCAqLwotCQkubmFtZSA9ICJUb3Bwb2x5X1REMDcwV0dDQjIiLAotCQkubW9uc3BlY3MgPSB7Ci0JCQkubW9kZWRiID0gTlVMTCwKLQkJCS5tb2RlZGJfbGVuID0gMCwKLQkJCS5oZm1pbiA9IDMwMDAwLAotCQkJLmhmbWF4ID0gNzAwMDAsCi0JCQkudmZtaW4gPSA2MCwKLQkJCS52Zm1heCA9IDYwLAotCQkJLmRjbGttaW4gPSA2MDAwMDAwLAotCQkJLmRjbGttYXggPSAyODAwMDAwMCwKLQkJCS5pbnB1dCA9IEZCX0RJU1BfUkdCLAotCQl9LAotCQkubW9kZV9zY3JlZW4JCT0gTENEX1NDUkVFTl9TWF9OKDg1NikgfAotCQkJTENEX1NDUkVFTl9TWV9OKDQ4MCksCi0JCS5tb2RlX2hvcnp0aW1pbmcJPSBMQ0RfSE9SWlRJTUlOR19ITkQyX04oNDMpIHwKLQkJCUxDRF9IT1JaVElNSU5HX0hORDFfTig0MykgfCBMQ0RfSE9SWlRJTUlOR19IUFdfTigxMTQpLAotCQkubW9kZV92ZXJ0dGltaW5nCT0gTENEX1ZFUlRUSU1JTkdfVk5EMl9OKDIwKSB8Ci0JCQlMQ0RfVkVSVFRJTUlOR19WTkQxX04oMjEpIHwgTENEX1ZFUlRUSU1JTkdfVlBXX04oNCksCi0JCS5tb2RlX2Nsa2NvbnRyb2wJPSAweDAwMDIwMDAxLCAvKiAvND0yNE1oeiAqLwotCQkubW9kZV9wd21kaXYJCT0gMHg4MDAwMDYzZiwKLQkJLm1vZGVfcHdtaGkJCT0gMHgwMzQwMDAwMCwKLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBmY2ZjZmMsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biwKLQkJODU2LCA4NTYsCi0JCTQ4MCwgNDgwLAotCX0sCi19OwotCi0jZGVmaW5lIE5VTV9QQU5FTFMgKEFSUkFZX1NJWkUoa25vd25fbGNkX3BhbmVscykpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzZXRfYnJpZ2h0bmVzcyh1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcykKLXsKLQl1bnNpZ25lZCBpbnQgaGkxLCBkaXZpZGVyOwotCi0JLyogbGltaXQgYnJpZ2h0bmVzcyBwd20gZHV0eSB0byA+PSAzMC8xNjAwICovCi0JaWYgKGJyaWdodG5lc3MgPCAzMCkgewotCQlicmlnaHRuZXNzID0gMzA7Ci0JfQotCWRpdmlkZXIgPSAobGNkLT5wd21kaXYgJiAweDNGRkZGKSArIDE7Ci0JaGkxID0gKGxjZC0+cHdtaGkgPj4gMTYpICsgMTsKLQloaTEgPSAoKChicmlnaHRuZXNzICYgMHhGRikgKyAxKSAqIGRpdmlkZXIgPj4gOCk7Ci0JbGNkLT5wd21oaSAmPSAweEZGRkY7Ci0JbGNkLT5wd21oaSB8PSAoaGkxIDw8IDE2KTsKLQotCXJldHVybiBicmlnaHRuZXNzOwotfQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi1zdGF0aWMgaW50IHdpbmJwcCAodW5zaWduZWQgaW50IHdpbmN0cmwxKQotewotCWludCBiaXRzID0gMDsKLQotCS8qIGhvdyBtYW55IGJpdHMgYXJlIG5lZWRlZCBmb3IgZWFjaCBwaXhlbCBmb3JtYXQgKi8KLQlzd2l0Y2ggKHdpbmN0cmwxICYgTENEX1dJTkNUUkwxX0ZSTSkgewotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xQlBQOgotCQliaXRzID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBMQ0RfV0lOQ1RSTDFfRlJNXzJCUFA6Ci0JCWJpdHMgPSAyOwotCQlicmVhazsKLQljYXNlIExDRF9XSU5DVFJMMV9GUk1fNEJQUDoKLQkJYml0cyA9IDQ7Ci0JCWJyZWFrOwotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV84QlBQOgotCQliaXRzID0gODsKLQkJYnJlYWs7Ci0JY2FzZSBMQ0RfV0lOQ1RSTDFfRlJNXzEyQlBQOgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUDY1NToKLQljYXNlIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjU6Ci0JY2FzZSBMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNTU2OgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEkxNTU1OgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEk1NTUxOgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEExNTU1OgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEE1NTUxOgotCQliaXRzID0gMTY7Ci0JCWJyZWFrOwotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8yNEJQUDoKLQljYXNlIExDRF9XSU5DVFJMMV9GUk1fMzJCUFA6Ci0JCWJpdHMgPSAzMjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGJpdHM7Ci19Ci0KLXN0YXRpYyBpbnQgZmJpbmZvMmluZGV4IChzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfRkJfQVUxMjAwX0RFVlM7ICsraSkgewotCQlpZiAoZmJfaW5mbyA9PSAoc3RydWN0IGZiX2luZm8gKikoJl9hdTEyMDBmYl9kZXZpY2VzW2ldLmZiX2luZm8pKQotCQkJcmV0dXJuIGk7Ci0JfQotCXByaW50aygiYXUxMjAwZmI6IEVSUk9SOiBmYmluZm8yaW5kZXggZmFpbGVkIVxuIik7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGF1MTIwMF9zZXRsb2NhdGlvbiAoc3RydWN0IGF1MTIwMGZiX2RldmljZSAqZmJkZXYsIGludCBwbGFuZSwKLQlpbnQgeHBvcywgaW50IHlwb3MpCi17Ci0JdWludDMyIHdpbmN0cmwwLCB3aW5jdHJsMSwgd2luZW5hYmxlLCBmYl9vZmZzZXQgPSAwOwotCWludCB4c3osIHlzejsKLQotCS8qIEZJWCEhISBOT1QgQ0hFQ0tJTkcgRk9SIENPTVBMRVRFIE9GRlNDUkVFTiBZRVQgKi8KLQotCXdpbmN0cmwwID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwwOwotCXdpbmN0cmwxID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxOwotCXdpbmN0cmwwICY9IChMQ0RfV0lOQ1RSTDBfQSB8IExDRF9XSU5DVFJMMF9BRU4pOwotCXdpbmN0cmwxICY9IH4oTENEX1dJTkNUUkwxX1NaWCB8IExDRF9XSU5DVFJMMV9TWlkpOwotCi0JLyogQ2hlY2sgZm9yIG9mZi1zY3JlZW4gYWRqdXN0bWVudHMgKi8KLQl4c3ogPSB3aW4tPndbcGxhbmVdLnhyZXM7Ci0JeXN6ID0gd2luLT53W3BsYW5lXS55cmVzOwotCWlmICgoeHBvcyArIHdpbi0+d1twbGFuZV0ueHJlcykgPiBwYW5lbC0+WHJlcykgewotCQkvKiBPZmYtc2NyZWVuIHRvIHRoZSByaWdodCAqLwotCQl4c3ogPSBwYW5lbC0+WHJlcyAtIHhwb3M7IC8qIG9mZiBieSAxID8/PyAqLwotCQkvKnByaW50aygib2ZmIHNjcmVlbiByaWdodFxuIik7Ki8KLQl9Ci0KLQlpZiAoKHlwb3MgKyB3aW4tPndbcGxhbmVdLnlyZXMpID4gcGFuZWwtPllyZXMpIHsKLQkJLyogT2ZmLXNjcmVlbiB0byB0aGUgYm90dG9tICovCi0JCXlzeiA9IHBhbmVsLT5ZcmVzIC0geXBvczsgLyogb2ZmIGJ5IDEgPz8/ICovCi0JCS8qcHJpbnRrKCJvZmYgc2NyZWVuIGJvdHRvbVxuIik7Ki8KLQl9Ci0KLQlpZiAoeHBvcyA8IDApIHsKLQkJLyogT2ZmLXNjcmVlbiB0byB0aGUgbGVmdCAqLwotCQl4c3ogPSB3aW4tPndbcGxhbmVdLnhyZXMgKyB4cG9zOwotCQlmYl9vZmZzZXQgKz0gKCgoMCAtIHhwb3MpICogd2luYnBwKGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSkpLzgpOwotCQl4cG9zID0gMDsKLQkJLypwcmludGsoIm9mZiBzY3JlZW4gbGVmdFxuIik7Ki8KLQl9Ci0KLQlpZiAoeXBvcyA8IDApIHsKLQkJLyogT2ZmLXNjcmVlbiB0byB0aGUgdG9wICovCi0JCXlzeiA9IHdpbi0+d1twbGFuZV0ueXJlcyArIHlwb3M7Ci0JCS8qIGZpeG1lOiBmYl9vZmZzZXQgKz0gKCgwLXlwb3MpKmZiX3BhcnNbcGxhbmVdLmxpbmVfbGVuZ3RoKTsgKi8KLQkJeXBvcyA9IDA7Ci0JCS8qcHJpbnRrKCJvZmYgc2NyZWVuIHRvcFxuIik7Ki8KLQl9Ci0KLQkvKiByZWNvcmQgc2V0dGluZ3MgKi8KLQl3aW4tPndbcGxhbmVdLnhwb3MgPSB4cG9zOwotCXdpbi0+d1twbGFuZV0ueXBvcyA9IHlwb3M7Ci0KLQl4c3ogLT0gMTsKLQl5c3ogLT0gMTsKLQl3aW5jdHJsMCB8PSAoeHBvcyA8PCAyMSk7Ci0Jd2luY3RybDAgfD0gKHlwb3MgPDwgMTApOwotCXdpbmN0cmwxIHw9ICh4c3ogPDwgMTEpOwotCXdpbmN0cmwxIHw9ICh5c3ogPDwgMCk7Ci0KLQkvKiBEaXNhYmxlIHRoZSB3aW5kb3cgd2hpbGUgbWFraW5nIGNoYW5nZXMsIHRoZW4gcmVzdG9yZSBXSU5FTiAqLwotCXdpbmVuYWJsZSA9IGxjZC0+d2luZW5hYmxlICYgKDEgPDwgcGxhbmUpOwotCWF1X3N5bmMoKTsKLQlsY2QtPndpbmVuYWJsZSAmPSB+KDEgPDwgcGxhbmUpOwotCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCA9IHdpbmN0cmwwOwotCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSA9IHdpbmN0cmwxOwotCWxjZC0+d2luZG93W3BsYW5lXS53aW5idWYwID0KLQlsY2QtPndpbmRvd1twbGFuZV0ud2luYnVmMSA9IGZiZGV2LT5mYl9waHlzOwotCWxjZC0+d2luZG93W3BsYW5lXS53aW5idWZjdHJsID0gMDsgLyogc2VsZWN0IHdpbmJ1ZjAgKi8KLQlsY2QtPndpbmVuYWJsZSB8PSB3aW5lbmFibGU7Ci0JYXVfc3luYygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF1MTIwMF9zZXRwYW5lbCAoc3RydWN0IHBhbmVsX3NldHRpbmdzICpuZXdwYW5lbCkKLXsKLQkvKgotCSAqIFBlcmZvcm0gZ2xvYmFsIHNldHVwL2luaXQgb2YgTENEIGNvbnRyb2xsZXIKLQkgKi8KLQl1aW50MzIgd2luZW5hYmxlOwotCi0JLyogTWFrZSBzdXJlIGFsbCB3aW5kb3dzIGRpc2FibGVkICovCi0Jd2luZW5hYmxlID0gbGNkLT53aW5lbmFibGU7Ci0JbGNkLT53aW5lbmFibGUgPSAwOwotCWF1X3N5bmMoKTsKLQkvKgotCSAqIEVuc3VyZSBldmVyeXRoaW5nIGlzIGRpc2FibGVkIGJlZm9yZSByZWNvbmZpZ3VyaW5nCi0JICovCi0JaWYgKGxjZC0+c2NyZWVuICYgTENEX1NDUkVFTl9TRU4pIHsKLQkJLyogV2FpdCBmb3IgdmVydGljYWwgc3luYyBwZXJpb2QgKi8KLQkJbGNkLT5pbnRzdGF0dXMgPSBMQ0RfSU5UX1NTOwotCQl3aGlsZSAoKGxjZC0+aW50c3RhdHVzICYgTENEX0lOVF9TUykgPT0gMCkgewotCQkJYXVfc3luYygpOwotCQl9Ci0KLQkJbGNkLT5zY3JlZW4gJj0gfkxDRF9TQ1JFRU5fU0VOOwkvKmRpc2FibGUgdGhlIGNvbnRyb2xsZXIqLwotCi0JCWRvIHsKLQkJCWxjZC0+aW50c3RhdHVzID0gbGNkLT5pbnRzdGF0dXM7IC8qY2xlYXIgaW50ZXJydXB0cyovCi0JCQlhdV9zeW5jKCk7Ci0JCS8qd2FpdCBmb3IgY29udHJvbGxlciB0byBzaHV0IGRvd24qLwotCQl9IHdoaWxlICgobGNkLT5pbnRzdGF0dXMgJiBMQ0RfSU5UX1NEKSA9PSAwKTsKLQotCQkvKiBDYWxsIHNodXRkb3duIG9mIGN1cnJlbnQgcGFuZWwgKGlmIHVwKSAqLwotCQkvKiB0aGlzIG11c3Qgb2NjdXIgbGFzdCwgYmVjYXVzZSBpZiBhbiBleHRlcm5hbCBjbG9jayBpcyBkcml2aW5nCi0JCSAgICB0aGUgY29udHJvbGxlciwgdGhlIGNsb2NrIGNhbm5vdCBiZSB0dXJuZWQgb2ZmIGJlZm9yZSBmaXJzdAotCQkJc2h1dHRpbmcgZG93biB0aGUgY29udHJvbGxlci4KLQkJICovCi0JCWlmIChwYW5lbC0+ZGV2aWNlX3NodXRkb3duICE9IE5VTEwpCi0JCQlwYW5lbC0+ZGV2aWNlX3NodXRkb3duKCk7Ci0JfQotCi0JLyogTmV3cGFuZWwgPT0gTlVMTCBpbmRpY2F0ZXMgYSBzaHV0ZG93biBvcGVyYXRpb24gb25seSAqLwotCWlmIChuZXdwYW5lbCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlwYW5lbCA9IG5ld3BhbmVsOwotCi0JcHJpbnRrKCJQYW5lbCglcyksICVkeCVkXG4iLCBwYW5lbC0+bmFtZSwgcGFuZWwtPlhyZXMsIHBhbmVsLT5ZcmVzKTsKLQotCS8qCi0JICogU2V0dXAgY2xvY2tpbmcgaWYgaW50ZXJuYWwgTENEIGNsb2NrIHNvdXJjZSAoYXNzdW1lcyBzeXNfYXV4cGxsIHZhbGlkKQotCSAqLwotCWlmICghKHBhbmVsLT5tb2RlX2Nsa2NvbnRyb2wgJiBMQ0RfQ0xLQ09OVFJPTF9FWFQpKQotCXsKLQkJdWludDMyIHN5c19jbGtzcmM7Ci0JCWF1X3dyaXRlbChwYW5lbC0+bW9kZV9hdXhwbGwsIFNZU19BVVhQTEwpOwotCQlzeXNfY2xrc3JjID0gYXVfcmVhZGwoU1lTX0NMS1NSQykgJiB+MHgwMDAwMDAxZjsKLQkJc3lzX2Nsa3NyYyB8PSBwYW5lbC0+bW9kZV90b3ljbGtzcmM7Ci0JCWF1X3dyaXRlbChzeXNfY2xrc3JjLCBTWVNfQ0xLU1JDKTsKLQl9Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBwYW5lbCB0aW1pbmdzCi0JICovCi0JbGNkLT5zY3JlZW4gPSBwYW5lbC0+bW9kZV9zY3JlZW47Ci0JbGNkLT5ob3J6dGltaW5nID0gcGFuZWwtPm1vZGVfaG9yenRpbWluZzsKLQlsY2QtPnZlcnR0aW1pbmcgPSBwYW5lbC0+bW9kZV92ZXJ0dGltaW5nOwotCWxjZC0+Y2xrY29udHJvbCA9IHBhbmVsLT5tb2RlX2Nsa2NvbnRyb2w7Ci0JbGNkLT5wd21kaXYgPSBwYW5lbC0+bW9kZV9wd21kaXY7Ci0JbGNkLT5wd21oaSA9IHBhbmVsLT5tb2RlX3B3bWhpOwotCWxjZC0+b3V0bWFzayA9IHBhbmVsLT5tb2RlX291dG1hc2s7Ci0JbGNkLT5maWZvY3RybCA9IHBhbmVsLT5tb2RlX2ZpZm9jdHJsOwotCWF1X3N5bmMoKTsKLQotCS8qIGZpeG1lOiBDaGVjayB3aW5kb3cgc2V0dGluZ3MgdG8gbWFrZSBzdXJlIHN0aWxsIHZhbGlkCi0JICogZm9yIG5ldyBnZW9tZXRyeSAqLwotI2lmIDAKLQlhdTEyMDBfc2V0bG9jYXRpb24oZmJkZXYsIDAsIHdpbi0+d1swXS54cG9zLCB3aW4tPndbMF0ueXBvcyk7Ci0JYXUxMjAwX3NldGxvY2F0aW9uKGZiZGV2LCAxLCB3aW4tPndbMV0ueHBvcywgd2luLT53WzFdLnlwb3MpOwotCWF1MTIwMF9zZXRsb2NhdGlvbihmYmRldiwgMiwgd2luLT53WzJdLnhwb3MsIHdpbi0+d1syXS55cG9zKTsKLQlhdTEyMDBfc2V0bG9jYXRpb24oZmJkZXYsIDMsIHdpbi0+d1szXS54cG9zLCB3aW4tPndbM10ueXBvcyk7Ci0jZW5kaWYKLQlsY2QtPndpbmVuYWJsZSA9IHdpbmVuYWJsZTsKLQotCS8qCi0JICogUmUtZW5hYmxlIHNjcmVlbiBub3cgdGhhdCBpdCBpcyBjb25maWd1cmVkCi0JICovCi0JbGNkLT5zY3JlZW4gfD0gTENEX1NDUkVFTl9TRU47Ci0JYXVfc3luYygpOwotCi0JLyogQ2FsbCBpbml0IG9mIHBhbmVsICovCi0JaWYgKHBhbmVsLT5kZXZpY2VfaW5pdCAhPSBOVUxMKSBwYW5lbC0+ZGV2aWNlX2luaXQoKTsKLQotCS8qIEZJWCEhISEgbm90IGFwcHJvcHJpYXRlIG9uIHBhbmVsIGNoYW5nZSEhISBHbG9iYWwgc2V0dXAvaW5pdCAqLwotCWxjZC0+aW50ZW5hYmxlID0gMDsKLQlsY2QtPmludHN0YXR1cyA9IH4wOwotCWxjZC0+YmFja2NvbG9yID0gd2luLT5tb2RlX2JhY2tjb2xvcjsKLQotCS8qIFNldHVwIENvbG9yIEtleSAtIEZJWCEhISAqLwotCWxjZC0+Y29sb3JrZXkgPSB3aW4tPm1vZGVfY29sb3JrZXk7Ci0JbGNkLT5jb2xvcmtleW1zayA9IHdpbi0+bW9kZV9jb2xvcmtleW1zazsKLQotCS8qIFNldHVwIEhXQ3Vyc29yIC0gRklYISEhIE5lZWQgdG8gc3VwcG9ydCB0aGlzIGV2ZW50dWFsbHkgKi8KLQlsY2QtPmh3Yy5jdXJzb3JjdHJsID0gMDsKLQlsY2QtPmh3Yy5jdXJzb3Jwb3MgPSAwOwotCWxjZC0+aHdjLmN1cnNvcmNvbG9yMCA9IDA7Ci0JbGNkLT5od2MuY3Vyc29yY29sb3IxID0gMDsKLQlsY2QtPmh3Yy5jdXJzb3Jjb2xvcjIgPSAwOwotCWxjZC0+aHdjLmN1cnNvcmNvbG9yMyA9IDA7Ci0KLQotI2lmIDAKLSNkZWZpbmUgRChYKSBwcmludGsoIiUyNXM6ICUwOFhcbiIsICNYLCBYKQotCUQobGNkLT5zY3JlZW4pOwotCUQobGNkLT5ob3J6dGltaW5nKTsKLQlEKGxjZC0+dmVydHRpbWluZyk7Ci0JRChsY2QtPmNsa2NvbnRyb2wpOwotCUQobGNkLT5wd21kaXYpOwotCUQobGNkLT5wd21oaSk7Ci0JRChsY2QtPm91dG1hc2spOwotCUQobGNkLT5maWZvY3RybCk7Ci0JRChsY2QtPndpbmRvd1swXS53aW5jdHJsMCk7Ci0JRChsY2QtPndpbmRvd1swXS53aW5jdHJsMSk7Ci0JRChsY2QtPndpbmRvd1swXS53aW5jdHJsMik7Ci0JRChsY2QtPndpbmRvd1swXS53aW5idWYwKTsKLQlEKGxjZC0+d2luZG93WzBdLndpbmJ1ZjEpOwotCUQobGNkLT53aW5kb3dbMF0ud2luYnVmY3RybCk7Ci0JRChsY2QtPndpbmRvd1sxXS53aW5jdHJsMCk7Ci0JRChsY2QtPndpbmRvd1sxXS53aW5jdHJsMSk7Ci0JRChsY2QtPndpbmRvd1sxXS53aW5jdHJsMik7Ci0JRChsY2QtPndpbmRvd1sxXS53aW5idWYwKTsKLQlEKGxjZC0+d2luZG93WzFdLndpbmJ1ZjEpOwotCUQobGNkLT53aW5kb3dbMV0ud2luYnVmY3RybCk7Ci0JRChsY2QtPndpbmRvd1syXS53aW5jdHJsMCk7Ci0JRChsY2QtPndpbmRvd1syXS53aW5jdHJsMSk7Ci0JRChsY2QtPndpbmRvd1syXS53aW5jdHJsMik7Ci0JRChsY2QtPndpbmRvd1syXS53aW5idWYwKTsKLQlEKGxjZC0+d2luZG93WzJdLndpbmJ1ZjEpOwotCUQobGNkLT53aW5kb3dbMl0ud2luYnVmY3RybCk7Ci0JRChsY2QtPndpbmRvd1szXS53aW5jdHJsMCk7Ci0JRChsY2QtPndpbmRvd1szXS53aW5jdHJsMSk7Ci0JRChsY2QtPndpbmRvd1szXS53aW5jdHJsMik7Ci0JRChsY2QtPndpbmRvd1szXS53aW5idWYwKTsKLQlEKGxjZC0+d2luZG93WzNdLndpbmJ1ZjEpOwotCUQobGNkLT53aW5kb3dbM10ud2luYnVmY3RybCk7Ci0JRChsY2QtPndpbmVuYWJsZSk7Ci0JRChsY2QtPmludGVuYWJsZSk7Ci0JRChsY2QtPmludHN0YXR1cyk7Ci0JRChsY2QtPmJhY2tjb2xvcik7Ci0JRChsY2QtPndpbmVuYWJsZSk7Ci0JRChsY2QtPmNvbG9ya2V5KTsKLSAgICBEKGxjZC0+Y29sb3JrZXltc2spOwotCUQobGNkLT5od2MuY3Vyc29yY3RybCk7Ci0JRChsY2QtPmh3Yy5jdXJzb3Jwb3MpOwotCUQobGNkLT5od2MuY3Vyc29yY29sb3IwKTsKLQlEKGxjZC0+aHdjLmN1cnNvcmNvbG9yMSk7Ci0JRChsY2QtPmh3Yy5jdXJzb3Jjb2xvcjIpOwotCUQobGNkLT5od2MuY3Vyc29yY29sb3IzKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBhdTEyMDBfc2V0bW9kZShzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldikKLXsKLQlpbnQgcGxhbmUgPSBmYmRldi0+cGxhbmU7Ci0JLyogV2luZG93L3BsYW5lIHNldHVwICovCi0JbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxID0gKCAwCi0JCXwgTENEX1dJTkNUUkwxX1BSSV9OKHBsYW5lKQotCQl8IHdpbi0+d1twbGFuZV0ubW9kZV93aW5jdHJsMSAvKiBGUk0sQ0NPLFBPLFBJUEUgKi8KLQkJKSA7Ci0KLQlhdTEyMDBfc2V0bG9jYXRpb24oZmJkZXYsIHBsYW5lLCB3aW4tPndbcGxhbmVdLnhwb3MsIHdpbi0+d1twbGFuZV0ueXBvcyk7Ci0KLQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgPSAoIDAKLQkJfCBMQ0RfV0lOQ1RSTDJfQ0tNT0RFXzAwCi0JCXwgTENEX1dJTkNUUkwyX0RCTQotCQl8IExDRF9XSU5DVFJMMl9CWF9OKCBmYmRldi0+ZmJfaW5mby5maXgubGluZV9sZW5ndGgpCi0JCXwgTENEX1dJTkNUUkwyX1NDWF8xCi0JCXwgTENEX1dJTkNUUkwyX1NDWV8xCi0JCSkgOwotCWxjZC0+d2luZW5hYmxlIHw9IHdpbi0+d1twbGFuZV0ubW9kZV93aW5lbmFibGU7Ci0JYXVfc3luYygpOwotfQotCi0KLS8qIElubGluZSBoZWxwZXJzICovCi0KLS8qI2RlZmluZSBwYW5lbF9pc19kdWFsKHBhbmVsKSAgKChwYW5lbC0+bW9kZV9zY3JlZW4gJiBMQ0RfU0NSRUVOX1BUKSA9PSBMQ0RfU0NSRUVOX1BUXzAxMCkqLwotLyojZGVmaW5lIHBhbmVsX2lzX2FjdGl2ZShwYW5lbCkoKHBhbmVsLT5tb2RlX3NjcmVlbiAmIExDRF9TQ1JFRU5fUFQpID09IExDRF9TQ1JFRU5fUFRfMDEwKSovCi0KLSNkZWZpbmUgcGFuZWxfaXNfY29sb3IocGFuZWwpICgocGFuZWwtPm1vZGVfc2NyZWVuICYgTENEX1NDUkVFTl9QVCkgPD0gTENEX1NDUkVFTl9QVF9DRFNUTikKLQotLyogQml0ZmllbGRzIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIGNvbnRyb2xsZXIuICovCi1zdGF0aWMgc3RydWN0IGZiX2JpdGZpZWxkIHJnYl9iaXRmaWVsZHNbXVs0XSA9IHsKLSAgCS8qICAgICBSZWQsIAkgICBHcmVlbiwgCSBCbHVlLCAJICAgICBUcmFuc3AgICAqLwotCVtMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNjU1ID4+IDI1XSA9Ci0JCXsgeyAxMCwgNiwgMCB9LCB7IDUsIDUsIDAgfSwgeyAwLCA1LCAwIH0sIHsgMCwgMCwgMCB9IH0sCi0KLQlbTENEX1dJTkNUUkwxX0ZSTV8xNkJQUDU2NSA+PiAyNV0gPQotCQl7IHsgMTEsIDUsIDAgfSwgeyA1LCA2LCAwIH0sIHsgMCwgNSwgMCB9LCB7IDAsIDAsIDAgfSB9LAotCi0JW0xDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NTYgPj4gMjVdID0KLQkJeyB7IDExLCA1LCAwIH0sIHsgNiwgNSwgMCB9LCB7IDAsIDYsIDAgfSwgeyAwLCAwLCAwIH0gfSwKLQotCVtMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQSTE1NTUgPj4gMjVdID0KLQkJeyB7IDEwLCA1LCAwIH0sIHsgNSwgNSwgMCB9LCB7IDAsIDUsIDAgfSwgeyAwLCAwLCAwIH0gfSwKLQotCVtMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQSTU1NTEgPj4gMjVdID0KLQkJeyB7IDExLCA1LCAwIH0sIHsgNiwgNSwgMCB9LCB7IDEsIDUsIDAgfSwgeyAwLCAwLCAwIH0gfSwKLQotCVtMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQQTE1NTUgPj4gMjVdID0KLQkJeyB7IDEwLCA1LCAwIH0sIHsgNSwgNSwgMCB9LCB7IDAsIDUsIDAgfSwgeyAxNSwgMSwgMCB9IH0sCi0KLQlbTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEE1NTUxID4+IDI1XSA9Ci0JCXsgeyAxMSwgNSwgMCB9LCB7IDYsIDUsIDAgfSwgeyAxLCA1LCAwIH0sIHsgMCwgMSwgMCB9IH0sCi0KLQlbTENEX1dJTkNUUkwxX0ZSTV8yNEJQUCA+PiAyNV0gPQotCQl7IHsgMTYsIDgsIDAgfSwgeyA4LCA4LCAwIH0sIHsgMCwgOCwgMCB9LCB7IDAsIDAsIDAgfSB9LAotCi0JW0xDRF9XSU5DVFJMMV9GUk1fMzJCUFAgPj4gMjVdID0KLQkJeyB7IDE2LCA4LCAwIH0sIHsgOCwgOCwgMCB9LCB7IDAsIDgsIDAgfSwgeyAyNCwgMCwgMCB9IH0sCi19OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBIZWxwZXJzICovCi0KLXN0YXRpYyB2b2lkIGF1MTIwMGZiX3VwZGF0ZV9mYmluZm8oc3RydWN0IGZiX2luZm8gKmZiaSkKLXsKLQkvKiBGSVghISEhIFRoaXMgYWxzbyBuZWVkcyB0byB0YWtlIHRoZSB3aW5kb3cgcGl4ZWwgZm9ybWF0IGludG8gYWNjb3VudCEhISAqLwotCi0JLyogVXBkYXRlIHZhci1kZXBlbmRlbnQgRkIgaW5mbyAqLwotCWlmIChwYW5lbF9pc19jb2xvcihwYW5lbCkpIHsKLQkJaWYgKGZiaS0+dmFyLmJpdHNfcGVyX3BpeGVsIDw9IDgpIHsKLQkJCS8qIHBhbGV0dGl6ZWQgKi8KLQkJCWZiaS0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKLQkJCWZiaS0+Zml4LmxpbmVfbGVuZ3RoID0gZmJpLT52YXIueHJlc192aXJ0dWFsIC8KLQkJCQkoOC9mYmktPnZhci5iaXRzX3Blcl9waXhlbCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBub24tcGFsZXR0aXplZCAqLwotCQkJZmJpLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKLQkJCWZiaS0+Zml4LmxpbmVfbGVuZ3RoID0gZmJpLT52YXIueHJlc192aXJ0dWFsICogKGZiaS0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gOCk7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBtb25vIEZJWCEhISBtb25vIDggYW5kIDQgYml0cyAqLwotCQlmYmktPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfTU9OTzEwOwotCQlmYmktPmZpeC5saW5lX2xlbmd0aCA9IGZiaS0+dmFyLnhyZXNfdmlydHVhbCAvIDg7Ci0JfQotCi0JZmJpLT5zY3JlZW5fc2l6ZSA9IGZiaS0+Zml4LmxpbmVfbGVuZ3RoICogZmJpLT52YXIueXJlc192aXJ0dWFsOwotCXByaW50X2RiZygibGluZSBsZW5ndGg6ICVkXG4iLCBmYmktPmZpeC5saW5lX2xlbmd0aCk7Ci0JcHJpbnRfZGJnKCJiaXRzX3Blcl9waXhlbDogJWRcbiIsIGZiaS0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogQVUxMjAwIGZyYW1lYnVmZmVyIGRyaXZlciAqLwotCi0vKiBmYl9jaGVja192YXIKLSAqIFZhbGlkYXRlIHZhciBzZXR0aW5ncyB3aXRoIGhhcmR3YXJlIHJlc3RyaWN0aW9ucyBhbmQgbW9kaWZ5IGl0IGlmIG5lY2Vzc2FyeQotICovCi1zdGF0aWMgaW50IGF1MTIwMGZiX2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQlzdHJ1Y3QgZmJfaW5mbyAqZmJpKQotewotCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2ID0gKHN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKilmYmk7Ci0JdTMyIHBpeGNsb2NrOwotCWludCBzY3JlZW5fc2l6ZSwgcGxhbmU7Ci0KLQlwbGFuZSA9IGZiZGV2LT5wbGFuZTsKLQotCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtb2RlIHJlc3BlY3QgYWxsIExDRCBjb250cm9sbGVyIGFuZAotCSAqIHBhbmVsIHJlc3RyaWN0aW9ucy4gKi8KLQl2YXItPnhyZXMgPSB3aW4tPndbcGxhbmVdLnhyZXM7Ci0JdmFyLT55cmVzID0gd2luLT53W3BsYW5lXS55cmVzOwotCi0JLyogTm8gbmVlZCBmb3IgdmlydHVhbCByZXNvbHV0aW9uIHN1cHBvcnQgKi8KLQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKLQl2YXItPnlyZXNfdmlydHVhbCA9IHZhci0+eXJlczsKLQotCXZhci0+Yml0c19wZXJfcGl4ZWwgPSB3aW5icHAod2luLT53W3BsYW5lXS5tb2RlX3dpbmN0cmwxKTsKLQotCXNjcmVlbl9zaXplID0gdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbDsKLQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA+IDgpIHNjcmVlbl9zaXplICo9ICh2YXItPmJpdHNfcGVyX3BpeGVsIC8gOCk7Ci0JZWxzZSBzY3JlZW5fc2l6ZSAvPSAoOC92YXItPmJpdHNfcGVyX3BpeGVsKTsKLQotCWlmIChmYmRldi0+ZmJfbGVuIDwgc2NyZWVuX3NpemUpCi0JCXJldHVybiAtRUlOVkFMOyAvKiBWaXJ0dWFsIHNjcmVlbiBpcyB0byBiaWcsIGFib3J0ICovCi0KLQkvKiBGSVghISEhIHdoYXQgYXJlIHRoZSBpbXBsaWNhaXRvbnMgb2YgaWdub3JpbmcgdGhpcyBmb3Igd2luZG93cyA/Pz8gKi8KLQkvKiBUaGUgbWF4IExDRCBjbG9jayBpcyBmaXhlZCB0byA0OE1IeiAodmFsdWUgb2YgQVVYX0NMSykuIFRoZSBwaXhlbAotCSAqIGNsb2NrIGNhbiBvbmx5IGJlIG9idGFpbiBieSBkaXZpZGluZyB0aGlzIHZhbHVlIGJ5IGFuIGV2ZW4gaW50ZWdlci4KLQkgKiBGYWxsYmFjayB0byBhIHNsb3dlciBwaXhlbCBjbG9jayBpZiBuZWNlc3NhcnkuICovCi0JcGl4Y2xvY2sgPSBtYXgoKHUzMikoUElDT1MyS0haKHZhci0+cGl4Y2xvY2spICogMTAwMCksIGZiaS0+bW9uc3BlY3MuZGNsa21pbik7Ci0JcGl4Y2xvY2sgPSBtaW4ocGl4Y2xvY2ssIG1pbihmYmktPm1vbnNwZWNzLmRjbGttYXgsICh1MzIpQVUxMjAwX0xDRF9NQVhfQ0xLLzIpKTsKLQotCWlmIChBVTEyMDBfTENEX01BWF9DTEsgJSBwaXhjbG9jaykgewotCQlpbnQgZGlmZiA9IEFVMTIwMF9MQ0RfTUFYX0NMSyAlIHBpeGNsb2NrOwotCQlwaXhjbG9jayAtPSBkaWZmOwotCX0KLQotCXZhci0+cGl4Y2xvY2sgPSBLSFoyUElDT1MocGl4Y2xvY2svMTAwMCk7Ci0jaWYgMAotCWlmICghcGFuZWxfaXNfYWN0aXZlKHBhbmVsKSkgewotCQlpbnQgcGNkID0gQVUxMjAwX0xDRF9NQVhfQ0xLIC8gKHBpeGNsb2NrICogMikgLSAxOwotCi0JCWlmICghcGFuZWxfaXNfY29sb3IocGFuZWwpCi0JCQkmJiAocGFuZWwtPmNvbnRyb2xfYmFzZSAmIExDRF9DT05UUk9MX01QSSkgJiYgKHBjZCA8IDMpKSB7Ci0JCQkvKiBTVE4gOGJpdCBtb25vIHBhbmVsIHN1cHBvcnQgaXMgdXAgdG8gNk1IeiBwaXhjbG9jayAqLwotCQkJdmFyLT5waXhjbG9jayA9IEtIWjJQSUNPUyg2MDAwKTsKLQkJfSBlbHNlIGlmICghcGNkKSB7Ci0JCQkvKiBPdGhlciBTVE4gcGFuZWwgc3VwcG9ydCBpcyB1cCB0byAxMk1IeiAgKi8KLQkJCXZhci0+cGl4Y2xvY2sgPSBLSFoyUElDT1MoMTIwMDApOwotCQl9Ci0JfQotI2VuZGlmCi0JLyogU2V0IGJpdGZpZWxkIGFjY29yZGluZ2x5ICovCi0Jc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7Ci0JCWNhc2UgMTY6Ci0JCXsKLQkJCS8qIDE2YnBwIFRydWUgY29sb3IuCi0JCQkgKiBUaGVzZSBtdXN0IGJlIHNldCB0byBNQVRDSCBXSU5DVFJMW0ZPUk1dICovCi0JCQlpbnQgaWR4OwotCQkJaWR4ID0gKHdpbi0+d1swXS5tb2RlX3dpbmN0cmwxICYgTENEX1dJTkNUUkwxX0ZSTSkgPj4gMjU7Ci0JCQl2YXItPnJlZCAgICA9IHJnYl9iaXRmaWVsZHNbaWR4XVswXTsKLQkJCXZhci0+Z3JlZW4gID0gcmdiX2JpdGZpZWxkc1tpZHhdWzFdOwotCQkJdmFyLT5ibHVlICAgPSByZ2JfYml0ZmllbGRzW2lkeF1bMl07Ci0JCQl2YXItPnRyYW5zcCA9IHJnYl9iaXRmaWVsZHNbaWR4XVszXTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY2FzZSAzMjoKLQkJewotCQkJLyogMzJicHAgVHJ1ZSBjb2xvci4KLQkJCSAqIFRoZXNlIG11c3QgYmUgc2V0IHRvIE1BVENIIFdJTkNUUkxbRk9STV0gKi8KLQkJCWludCBpZHg7Ci0JCQlpZHggPSAod2luLT53WzBdLm1vZGVfd2luY3RybDEgJiBMQ0RfV0lOQ1RSTDFfRlJNKSA+PiAyNTsKLQkJCXZhci0+cmVkICAgID0gcmdiX2JpdGZpZWxkc1tpZHhdWzBdOwotCQkJdmFyLT5ncmVlbiAgPSByZ2JfYml0ZmllbGRzW2lkeF1bMV07Ci0JCQl2YXItPmJsdWUgICA9IHJnYl9iaXRmaWVsZHNbaWR4XVsyXTsKLQkJCXZhci0+dHJhbnNwID0gcmdiX2JpdGZpZWxkc1tpZHhdWzNdOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXByaW50X2RiZygiVW5zdXBwb3J0ZWQgZGVwdGggJWRicHAiLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBmYl9zZXRfcGFyCi0gKiBTZXQgaGFyZHdhcmUgd2l0aCB2YXIgc2V0dGluZ3MuIFRoaXMgd2lsbCBlbmFibGUgdGhlIGNvbnRyb2xsZXIgd2l0aCBhCi0gKiBzcGVjaWZpYyBtb2RlLCBub3JtYWxseSB2YWxpZGF0ZWQgd2l0aCB0aGUgZmJfY2hlY2tfdmFyIG1ldGhvZAotICovCi1zdGF0aWMgaW50IGF1MTIwMGZiX2ZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmZiaSkKLXsKLQlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldiA9IChzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICopZmJpOwotCi0JYXUxMjAwZmJfdXBkYXRlX2ZiaW5mbyhmYmkpOwotCWF1MTIwMF9zZXRtb2RlKGZiZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBmYl9zZXRjb2xyZWcKLSAqIFNldCBjb2xvciBpbiBMQ0QgcGFsZXR0ZS4KLSAqLwotc3RhdGljIGludCBhdTEyMDBmYl9mYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQotewotCXZvbGF0aWxlIHUzMiAqcGFsZXR0ZSA9IGxjZC0+cGFsZXR0ZTsKLQl1MzIgdmFsdWU7Ci0KLQlpZiAocmVnbm8gPiAoQVUxMjAwX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTIC0gMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGZiaS0+dmFyLmdyYXlzY2FsZSkgewotCQkvKiBDb252ZXJ0IGNvbG9yIHRvIGdyYXlzY2FsZSAqLwotCQlyZWQgPSBncmVlbiA9IGJsdWUgPQotCQkJKDE5NTk1ICogcmVkICsgMzg0NzAgKiBncmVlbiArIDc0NzEgKiBibHVlKSA+PiAxNjsKLQl9Ci0KLQlpZiAoZmJpLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IpIHsKLQkJLyogUGxhY2UgY29sb3IgaW4gdGhlIHBzZXVkb3BhbGV0dGUgKi8KLQkJaWYgKHJlZ25vID4gMTYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlwYWxldHRlID0gKHUzMiopIGZiaS0+cHNldWRvX3BhbGV0dGU7Ci0KLQkJcmVkICAgPj49ICgxNiAtIGZiaS0+dmFyLnJlZC5sZW5ndGgpOwotCQlncmVlbiA+Pj0gKDE2IC0gZmJpLT52YXIuZ3JlZW4ubGVuZ3RoKTsKLQkJYmx1ZSAgPj49ICgxNiAtIGZiaS0+dmFyLmJsdWUubGVuZ3RoKTsKLQotCQl2YWx1ZSA9IChyZWQgICA8PCBmYmktPnZhci5yZWQub2Zmc2V0KSAJfAotCQkJKGdyZWVuIDw8IGZiaS0+dmFyLmdyZWVuLm9mZnNldCl8Ci0JCQkoYmx1ZSAgPDwgZmJpLT52YXIuYmx1ZS5vZmZzZXQpOwotCQl2YWx1ZSAmPSAweEZGRkY7Ci0KLQl9IGVsc2UgaWYgKDEgLypGSVghISEgcGFuZWxfaXNfYWN0aXZlKGZiZGV2LT5wYW5lbCkqLykgewotCQkvKiBDT0xPUiBURlQgUEFMTEVUVElaRUQgKHVzZSBSR0IgNTY1KSAqLwotCQl2YWx1ZSA9IChyZWQgJiAweEY4MDApfCgoZ3JlZW4gPj4gNSkgJgotCQkJCTB4MDdFMCl8KChibHVlID4+IDExKSAmIDB4MDAxRik7Ci0JCXZhbHVlICY9IDB4RkZGRjsKLQotCX0gZWxzZSBpZiAoMCAvKnBhbmVsX2lzX2NvbG9yKGZiZGV2LT5wYW5lbCkqLykgewotCQkvKiBDT0xPUiBTVE4gTU9ERSAqLwotCQl2YWx1ZSA9IDB4MTIzNDsKLQkJdmFsdWUgJj0gMHhGRkY7Ci0JfSBlbHNlIHsKLQkJLyogTU9OT0NIUk9NRSBNT0RFICovCi0JCXZhbHVlID0gKGdyZWVuID4+IDEyKSAmIDB4MDAwRjsKLQkJdmFsdWUgJj0gMHhGOwotCX0KLQotCXBhbGV0dGVbcmVnbm9dID0gdmFsdWU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogZmJfYmxhbmsKLSAqIEJsYW5rIHRoZSBzY3JlZW4uIERlcGVuZGluZyBvbiB0aGUgbW9kZSwgdGhlIHNjcmVlbiB3aWxsIGJlCi0gKiBhY3RpdmF0ZWQgd2l0aCB0aGUgYmFja2xpZ2h0IGNvbG9yLCBvciBkZXNhY3RpdmF0ZWQKLSAqLwotc3RhdGljIGludCBhdTEyMDBmYl9mYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmZiaSkKLXsKLQkvKiBTaG9ydC1jaXJjdWl0IHNjcmVlbiBibGFua2luZyAqLwotCWlmIChub2JsYW5raW5nKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAoYmxhbmtfbW9kZSkgewotCi0JY2FzZSBGQl9CTEFOS19VTkJMQU5LOgotCWNhc2UgRkJfQkxBTktfTk9STUFMOgotCQkvKiBwcmludGsoInR1cm4gb24gcGFuZWxcbiIpOyAqLwotCQlhdTEyMDBfc2V0cGFuZWwocGFuZWwpOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6Ci0JY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgotCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQkvKiBwcmludGsoInR1cm4gb2ZmIHBhbmVsXG4iKTsgKi8KLQkJYXUxMjAwX3NldHBhbmVsKE5VTEwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQotCX0KLQotCS8qIEZCX0JMQU5LX05PUk1BTCBpcyBhIHNvZnQgYmxhbmsgKi8KLQlyZXR1cm4gKGJsYW5rX21vZGUgPT0gRkJfQkxBTktfTk9STUFMKSA/IC1FSU5WQUwgOiAwOwotfQotCi0vKiBmYl9tbWFwCi0gKiBNYXAgdmlkZW8gbWVtb3J5IGluIHVzZXIgc3BhY2UuIFdlIGRvbid0IHVzZSB0aGUgZ2VuZXJpYyBmYl9tbWFwCi0gKiBtZXRob2QgbWFpbmx5IHRvIGFsbG93IHRoZSB1c2Ugb2YgdGhlIFRMQiBzdHJlYW1pbmcgZmxhZyAoQ0NBPTYpCi0gKi8KLXN0YXRpYyBpbnQgYXUxMjAwZmJfZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi0KLXsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ9MCwgb2ZmOwotCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2ID0gKHN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKikgaW5mbzsKLQotI2lmZGVmIENPTkZJR19QTQotCWF1MXh4eF9wbV9hY2Nlc3MoTENEX3BtX2Rldik7Ci0jZW5kaWYKLQotCWlmICh2bWEtPnZtX3Bnb2ZmID4gKH4wVUwgPj4gUEFHRV9TSElGVCkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3RhcnQgPSBmYmRldi0+ZmJfcGh5cyAmIFBBR0VfTUFTSzsKLQlsZW4gPSBQQUdFX0FMSUdOKChzdGFydCAmIH5QQUdFX01BU0spICsgZmJkZXYtPmZiX2xlbik7Ci0KLQlvZmYgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0KLQlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCArIG9mZikgPiBsZW4pIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jb2ZmICs9IHN0YXJ0OwotCXZtYS0+dm1fcGdvZmYgPSBvZmYgPj4gUEFHRV9TSElGVDsKLQotCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0JcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX0NBQ0hFX01BU0s7IC8qIENDQT03ICovCi0KLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwotCi0JcmV0dXJuIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIG9mZiA+PiBQQUdFX1NISUZULAotCQkJCSAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJCSAgdm1hLT52bV9wYWdlX3Byb3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9nbG9iYWwodV9pbnQgY21kLCBzdHJ1Y3QgYXUxMjAwX2xjZF9nbG9iYWxfcmVnc190ICpwZGF0YSkKLXsKLQotCXVuc2lnbmVkIGludCBoaTEsIGRpdmlkZXI7Ci0KLQkvKiBTQ1JFRU5fU0laRTogdXNlciBjYW5ub3QgcmVzZXQgc2l6ZSwgbXVzdCBzd2l0Y2ggcGFuZWwgY2hvaWNlICovCi0KLQlpZiAocGRhdGEtPmZsYWdzICYgU0NSRUVOX0JBQ0tDT0xPUikKLQkJbGNkLT5iYWNrY29sb3IgPSBwZGF0YS0+YmFja2NvbG9yOwotCi0JaWYgKHBkYXRhLT5mbGFncyAmIFNDUkVFTl9CUklHSFRORVNTKSB7Ci0KLQkJLy8gbGltaXQgYnJpZ2h0bmVzcyBwd20gZHV0eSB0byA+PSAzMC8xNjAwCi0JCWlmIChwZGF0YS0+YnJpZ2h0bmVzcyA8IDMwKSB7Ci0JCQlwZGF0YS0+YnJpZ2h0bmVzcyA9IDMwOwotCQl9Ci0JCWRpdmlkZXIgPSAobGNkLT5wd21kaXYgJiAweDNGRkZGKSArIDE7Ci0JCWhpMSA9IChsY2QtPnB3bWhpID4+IDE2KSArIDE7Ci0JCWhpMSA9ICgoKHBkYXRhLT5icmlnaHRuZXNzICYgMHhGRikrMSkgKiBkaXZpZGVyID4+IDgpOwotCQlsY2QtPnB3bWhpICY9IDB4RkZGRjsKLQkJbGNkLT5wd21oaSB8PSAoaGkxIDw8IDE2KTsKLQl9Ci0KLQlpZiAocGRhdGEtPmZsYWdzICYgU0NSRUVOX0NPTE9SS0VZKQotCQlsY2QtPmNvbG9ya2V5ID0gcGRhdGEtPmNvbG9ya2V5OwotCi0JaWYgKHBkYXRhLT5mbGFncyAmIFNDUkVFTl9NQVNLKQotCQlsY2QtPmNvbG9ya2V5bXNrID0gcGRhdGEtPm1hc2s7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfZ2xvYmFsKHVfaW50IGNtZCwgc3RydWN0IGF1MTIwMF9sY2RfZ2xvYmFsX3JlZ3NfdCAqcGRhdGEpCi17Ci0JdW5zaWduZWQgaW50IGhpMSwgZGl2aWRlcjsKLQotCXBkYXRhLT54c2l6ZSA9ICgobGNkLT5zY3JlZW4gJiBMQ0RfU0NSRUVOX1NYKSA+PiAxOSkgKyAxOwotCXBkYXRhLT55c2l6ZSA9ICgobGNkLT5zY3JlZW4gJiBMQ0RfU0NSRUVOX1NZKSA+PiA4KSArIDE7Ci0KLQlwZGF0YS0+YmFja2NvbG9yID0gbGNkLT5iYWNrY29sb3I7Ci0JcGRhdGEtPmNvbG9ya2V5ID0gbGNkLT5jb2xvcmtleTsKLQlwZGF0YS0+bWFzayA9IGxjZC0+Y29sb3JrZXltc2s7Ci0KLQkvLyBicmlnaHRuZXNzCi0JaGkxID0gKGxjZC0+cHdtaGkgPj4gMTYpICsgMTsKLQlkaXZpZGVyID0gKGxjZC0+cHdtZGl2ICYgMHgzRkZGRikgKyAxOwotCXBkYXRhLT5icmlnaHRuZXNzID0gKChoaTEgPDwgOCkgLyBkaXZpZGVyKSAtIDE7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfd2luZG93KHVuc2lnbmVkIGludCBwbGFuZSwKLQlzdHJ1Y3QgYXUxMjAwX2xjZF93aW5kb3dfcmVnc190ICpwZGF0YSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsLCBicHA7Ci0KLQkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlciAwICovCi0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9QT1NJVElPTikgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDAgJiB+KExDRF9XSU5DVFJMMF9PWCB8Ci0JCQkJTENEX1dJTkNUUkwwX09ZKTsKLQkJdmFsIHw9ICgocGRhdGEtPnhwb3MgPDwgMjEpICYgTENEX1dJTkNUUkwwX09YKTsKLQkJdmFsIHw9ICgocGRhdGEtPnlwb3MgPDwgMTApICYgTENEX1dJTkNUUkwwX09ZKTsKLQkJbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwwID0gdmFsOwotCX0KLQlpZiAocGRhdGEtPmZsYWdzICYgV0lOX0FMUEhBX0NPTE9SKSB7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCAmIH4oTENEX1dJTkNUUkwwX0EpOwotCQl2YWwgfD0gKChwZGF0YS0+YWxwaGFfY29sb3IgPDwgMikgJiBMQ0RfV0lOQ1RSTDBfQSk7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCA9IHZhbDsKLQl9Ci0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9BTFBIQV9NT0RFKSB7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCAmIH4oTENEX1dJTkNUUkwwX0FFTik7Ci0JCXZhbCB8PSAoKHBkYXRhLT5hbHBoYV9tb2RlIDw8IDEpICYgTENEX1dJTkNUUkwwX0FFTik7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCA9IHZhbDsKLQl9Ci0KLQkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlciAxICovCi0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9QUklPUklUWSkgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgJiB+KExDRF9XSU5DVFJMMV9QUkkpOwotCQl2YWwgfD0gKChwZGF0YS0+cHJpb3JpdHkgPDwgMzApICYgTENEX1dJTkNUUkwxX1BSSSk7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSA9IHZhbDsKLQl9Ci0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9DSEFOTkVMKSB7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSAmIH4oTENEX1dJTkNUUkwxX1BJUEUpOwotCQl2YWwgfD0gKChwZGF0YS0+Y2hhbm5lbCA8PCAyOSkgJiBMQ0RfV0lOQ1RSTDFfUElQRSk7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSA9IHZhbDsKLQl9Ci0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9CVUZGRVJfRk9STUFUKSB7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSAmIH4oTENEX1dJTkNUUkwxX0ZSTSk7Ci0JCXZhbCB8PSAoKHBkYXRhLT5idWZmZXJfZm9ybWF0IDw8IDI1KSAmIExDRF9XSU5DVFJMMV9GUk0pOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgPSB2YWw7Ci0JfQotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fQ09MT1JfT1JERVIpIHsKLQkJdmFsID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxICYgfihMQ0RfV0lOQ1RSTDFfQ0NPKTsKLQkJdmFsIHw9ICgocGRhdGEtPmNvbG9yX29yZGVyIDw8IDI0KSAmIExDRF9XSU5DVFJMMV9DQ08pOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgPSB2YWw7Ci0JfQotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fUElYRUxfT1JERVIpIHsKLQkJdmFsID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxICYgfihMQ0RfV0lOQ1RSTDFfUE8pOwotCQl2YWwgfD0gKChwZGF0YS0+cGl4ZWxfb3JkZXIgPDwgMjIpICYgTENEX1dJTkNUUkwxX1BPKTsKLQkJbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxID0gdmFsOwotCX0KLQlpZiAocGRhdGEtPmZsYWdzICYgV0lOX1NJWkUpIHsKLQkJdmFsID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxICYgfihMQ0RfV0lOQ1RSTDFfU1pYIHwKLQkJCQlMQ0RfV0lOQ1RSTDFfU1pZKTsKLQkJdmFsIHw9ICgoKHBkYXRhLT54c2l6ZSA8PCAxMSkgLSAxKSAmIExDRF9XSU5DVFJMMV9TWlgpOwotCQl2YWwgfD0gKCgocGRhdGEtPnlzaXplKSAtIDEpICYgTENEX1dJTkNUUkwxX1NaWSk7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSA9IHZhbDsKLQkJLyogcHJvZ3JhbSBidWZmZXIgbGluZSB3aWR0aCAqLwotCQlicHAgPSB3aW5icHAodmFsKSAvIDg7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMiAmIH4oTENEX1dJTkNUUkwyX0JYKTsKLQkJdmFsIHw9ICgoKHBkYXRhLT54c2l6ZSAqIGJwcCkgPDwgOCkgJiBMQ0RfV0lOQ1RSTDJfQlgpOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgPSB2YWw7Ci0JfQotCi0JLyogV2luZG93IGNvbnRyb2wgcmVnaXN0ZXIgMiAqLwotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fQ09MT1JLRVlfTU9ERSkgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgJiB+KExDRF9XSU5DVFJMMl9DS01PREUpOwotCQl2YWwgfD0gKChwZGF0YS0+Y29sb3JrZXlfbW9kZSA8PCAyNCkgJiBMQ0RfV0lOQ1RSTDJfQ0tNT0RFKTsKLQkJbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyID0gdmFsOwotCX0KLQlpZiAocGRhdGEtPmZsYWdzICYgV0lOX0RPVUJMRV9CVUZGRVJfTU9ERSkgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgJiB+KExDRF9XSU5DVFJMMl9EQk0pOwotCQl2YWwgfD0gKChwZGF0YS0+ZG91YmxlX2J1ZmZlcl9tb2RlIDw8IDIzKSAmIExDRF9XSU5DVFJMMl9EQk0pOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgPSB2YWw7Ci0JfQotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fUkFNX0FSUkFZX01PREUpIHsKLQkJdmFsID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyICYgfihMQ0RfV0lOQ1RSTDJfUkFNKTsKLQkJdmFsIHw9ICgocGRhdGEtPnJhbV9hcnJheV9tb2RlIDw8IDIxKSAmIExDRF9XSU5DVFJMMl9SQU0pOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgPSB2YWw7Ci0JfQotCi0JLyogQnVmZmVyIGxpbmUgd2lkdGggcHJvZ3JhbW1lZCB3aXRoIFdJTl9TSVpFICovCi0KLQlpZiAocGRhdGEtPmZsYWdzICYgV0lOX0JVRkZFUl9TQ0FMRSkgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgJiB+KExDRF9XSU5DVFJMMl9TQ1ggfAotCQkJCUxDRF9XSU5DVFJMMl9TQ1kpOwotCQl2YWwgfD0gKChwZGF0YS0+eHNpemUgPDwgMTEpICYgTENEX1dJTkNUUkwyX1NDWCk7Ci0JCXZhbCB8PSAoKHBkYXRhLT55c2l6ZSkgJiBMQ0RfV0lOQ1RSTDJfU0NZKTsKLQkJbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyID0gdmFsOwotCX0KLQotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fRU5BQkxFKSB7Ci0JCXZhbCA9IGxjZC0+d2luZW5hYmxlOwotCQl2YWwgJj0gfigxPDxwbGFuZSk7Ci0JCXZhbCB8PSAocGRhdGEtPmVuYWJsZSAmIDEpIDw8IHBsYW5lOwotCQlsY2QtPndpbmVuYWJsZSA9IHZhbDsKLQl9Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfd2luZG93KHVuc2lnbmVkIGludCBwbGFuZSwKLQlzdHJ1Y3QgYXUxMjAwX2xjZF93aW5kb3dfcmVnc190ICpwZGF0YSkKLXsKLQkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlciAwICovCi0JcGRhdGEtPnhwb3MgPSAobGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwwICYgTENEX1dJTkNUUkwwX09YKSA+PiAyMTsKLQlwZGF0YS0+eXBvcyA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDAgJiBMQ0RfV0lOQ1RSTDBfT1kpID4+IDEwOwotCXBkYXRhLT5hbHBoYV9jb2xvciA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDAgJiBMQ0RfV0lOQ1RSTDBfQSkgPj4gMjsKLQlwZGF0YS0+YWxwaGFfbW9kZSA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDAgJiBMQ0RfV0lOQ1RSTDBfQUVOKSA+PiAxOwotCi0JLyogV2luZG93IGNvbnRyb2wgcmVnaXN0ZXIgMSAqLwotCXBkYXRhLT5wcmlvcml0eSA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEmIExDRF9XSU5DVFJMMV9QUkkpID4+IDMwOwotCXBkYXRhLT5jaGFubmVsID0gKGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSAmIExDRF9XSU5DVFJMMV9QSVBFKSA+PiAyOTsKLQlwZGF0YS0+YnVmZmVyX2Zvcm1hdCA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgJiBMQ0RfV0lOQ1RSTDFfRlJNKSA+PiAyNTsKLQlwZGF0YS0+Y29sb3Jfb3JkZXIgPSAobGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxICYgTENEX1dJTkNUUkwxX0NDTykgPj4gMjQ7Ci0JcGRhdGEtPnBpeGVsX29yZGVyID0gKGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSAmIExDRF9XSU5DVFJMMV9QTykgPj4gMjI7Ci0JcGRhdGEtPnhzaXplID0gKChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgJiBMQ0RfV0lOQ1RSTDFfU1pYKSA+PiAxMSkgKyAxOwotCXBkYXRhLT55c2l6ZSA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgJiBMQ0RfV0lOQ1RSTDFfU1pZKSArIDE7Ci0KLQkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlciAyICovCi0JcGRhdGEtPmNvbG9ya2V5X21vZGUgPSAobGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyICYgTENEX1dJTkNUUkwyX0NLTU9ERSkgPj4gMjQ7Ci0JcGRhdGEtPmRvdWJsZV9idWZmZXJfbW9kZSA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgJiBMQ0RfV0lOQ1RSTDJfREJNKSA+PiAyMzsKLQlwZGF0YS0+cmFtX2FycmF5X21vZGUgPSAobGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyICYgTENEX1dJTkNUUkwyX1JBTSkgPj4gMjE7Ci0KLQlwZGF0YS0+ZW5hYmxlID0gKGxjZC0+d2luZW5hYmxlID4+IHBsYW5lKSAmIDE7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgaW50IGF1MTIwMGZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcGxhbmU7Ci0JaW50IHZhbDsKLQotI2lmZGVmIENPTkZJR19QTQotCWF1MXh4eF9wbV9hY2Nlc3MoTENEX3BtX2Rldik7Ci0jZW5kaWYKLQotCXBsYW5lID0gZmJpbmZvMmluZGV4KGluZm8pOwotCXByaW50X2RiZygiYXUxMjAwZmI6IGlvY3RsICVkIG9uIHBsYW5lICVkXG4iLCBjbWQsIHBsYW5lKTsKLQotCWlmIChjbWQgPT0gQVUxMjAwX0xDRF9GQl9JT0NUTCkgewotCQlzdHJ1Y3QgYXUxMjAwX2xjZF9pb2RhdGFfdCBpb2RhdGE7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpb2RhdGEsICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZihpb2RhdGEpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXByaW50X2RiZygiRkIgSU9DVEwgY2FsbGVkXG4iKTsKLQotCQlzd2l0Y2ggKGlvZGF0YS5zdWJjbWQpIHsKLQkJY2FzZSBBVTEyMDBfTENEX1NFVF9TQ1JFRU46Ci0JCQlwcmludF9kYmcoIkFVMTIwMF9MQ0RfU0VUX1NDUkVFTlxuIik7Ci0JCQlzZXRfZ2xvYmFsKGNtZCwgJmlvZGF0YS5nbG9iYWwpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBVTEyMDBfTENEX0dFVF9TQ1JFRU46Ci0JCQlwcmludF9kYmcoIkFVMTIwMF9MQ0RfR0VUX1NDUkVFTlxuIik7Ci0JCQlnZXRfZ2xvYmFsKGNtZCwgJmlvZGF0YS5nbG9iYWwpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBVTEyMDBfTENEX1NFVF9XSU5ET1c6Ci0JCQlwcmludF9kYmcoIkFVMTIwMF9MQ0RfU0VUX1dJTkRPV1xuIik7Ci0JCQlzZXRfd2luZG93KHBsYW5lLCAmaW9kYXRhLndpbmRvdyk7Ci0JCQlicmVhazsKLQotCQljYXNlIEFVMTIwMF9MQ0RfR0VUX1dJTkRPVzoKLQkJCXByaW50X2RiZygiQVUxMjAwX0xDRF9HRVRfV0lORE9XXG4iKTsKLQkJCWdldF93aW5kb3cocGxhbmUsICZpb2RhdGEud2luZG93KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVUxMjAwX0xDRF9TRVRfUEFORUw6Ci0JCQlwcmludF9kYmcoIkFVMTIwMF9MQ0RfU0VUX1BBTkVMXG4iKTsKLQkJCWlmICgoaW9kYXRhLmdsb2JhbC5wYW5lbF9jaG9pY2UgPj0gMCkgJiYKLQkJCQkJKGlvZGF0YS5nbG9iYWwucGFuZWxfY2hvaWNlIDwKLQkJCQkJIE5VTV9QQU5FTFMpKQotCQkJewotCQkJCXN0cnVjdCBwYW5lbF9zZXR0aW5ncyAqbmV3cGFuZWw7Ci0JCQkJcGFuZWxfaW5kZXggPSBpb2RhdGEuZ2xvYmFsLnBhbmVsX2Nob2ljZTsKLQkJCQluZXdwYW5lbCA9ICZrbm93bl9sY2RfcGFuZWxzW3BhbmVsX2luZGV4XTsKLQkJCQlhdTEyMDBfc2V0cGFuZWwobmV3cGFuZWwpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBVTEyMDBfTENEX0dFVF9QQU5FTDoKLQkJCXByaW50X2RiZygiQVUxMjAwX0xDRF9HRVRfUEFORUxcbiIpOwotCQkJaW9kYXRhLmdsb2JhbC5wYW5lbF9jaG9pY2UgPSBwYW5lbF9pbmRleDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXZhbCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLCAmaW9kYXRhLCBzaXplb2YoaW9kYXRhKSk7Ci0JCWlmICh2YWwpIHsKLQkJCXByaW50X2RiZygiZXJyb3I6IGNvdWxkIG5vdCBjb3B5ICVkIGJ5dGVzXG4iLCB2YWwpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGZiX29wcyBhdTEyMDBmYl9mYl9vcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5mYl9jaGVja192YXIJPSBhdTEyMDBmYl9mYl9jaGVja192YXIsCi0JLmZiX3NldF9wYXIJPSBhdTEyMDBmYl9mYl9zZXRfcGFyLAotCS5mYl9zZXRjb2xyZWcJPSBhdTEyMDBmYl9mYl9zZXRjb2xyZWcsCi0JLmZiX2JsYW5rCT0gYXUxMjAwZmJfZmJfYmxhbmssCi0JLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKLQkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKLQkuZmJfc3luYwk9IE5VTEwsCi0JLmZiX2lvY3RsCT0gYXUxMjAwZmJfaW9jdGwsCi0JLmZiX21tYXAJPSBhdTEyMDBmYl9mYl9tbWFwLAotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlycXJldHVybl90IGF1MTIwMGZiX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCogZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQkvKiBOb3RoaW5nIHRvIGRvIGZvciBub3csIGp1c3QgY2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0ICovCi0JbGNkLT5pbnRzdGF0dXMgPSBsY2QtPmludHN0YXR1czsKLQlhdV9zeW5jKCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEFVMTIwMCBMQ0QgZGV2aWNlIHByb2JlIGhlbHBlcnMgKi8KLQotc3RhdGljIGludCBhdTEyMDBmYl9pbml0X2ZiaW5mbyhzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldikKLXsKLQlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gJmZiZGV2LT5mYl9pbmZvOwotCWludCBicHA7Ci0KLQltZW1zZXQoZmJpLCAwLCBzaXplb2Yoc3RydWN0IGZiX2luZm8pKTsKLQlmYmktPmZib3BzID0gJmF1MTIwMGZiX2ZiX29wczsKLQotCWJwcCA9IHdpbmJwcCh3aW4tPndbZmJkZXYtPnBsYW5lXS5tb2RlX3dpbmN0cmwxKTsKLQotCS8qIENvcHkgbW9uaXRvciBzcGVjcyBmcm9tIHBhbmVsIGRhdGEgKi8KLQkvKiBmaXhtZTogd2UncmUgc2V0dGluZyB1cCBMQ0QgY29udHJvbGxlciB3aW5kb3dzLCBzbyB0aGVzZSBkb250IGdpdmUgYQotCWRhbW4gYXMgdG8gd2hhdCB0aGUgbW9uaXRvciBzcGVjcyBhcmUgKHRoZSBwYW5lbCBpdHNlbGYgZG9lcywgYnV0IHRoYXQKLQlpc250IGRvbmUgaGVyZS4uLnNvIG1heWJlIG5lZWQgYSBnZW5lcmljIGNhdGNoYWxsIG1vbml0b3Igc2V0dGluZz8/PyAqLwotCW1lbWNweSgmZmJpLT5tb25zcGVjcywgJnBhbmVsLT5tb25zcGVjcywgc2l6ZW9mKHN0cnVjdCBmYl9tb25zcGVjcykpOwotCi0JLyogV2UgZmlyc3QgdHJ5IHRoZSB1c2VyIG1vZGUgcGFzc2VkIGluIGFyZ3VtZW50LiBJZiB0aGF0IGZhaWxlZCwKLQkgKiBvciBpZiBubyBvbmUgaGFzIGJlZW4gc3BlY2lmaWVkLCB3ZSBkZWZhdWx0IHRvIHRoZSBmaXJzdCBtb2RlIG9mIHRoZQotCSAqIHBhbmVsIGxpc3QuIE5vdGUgdGhhdCBhZnRlciB0aGlzIGNhbGwsIHZhciBkYXRhIHdpbGwgYmUgc2V0ICovCi0JaWYgKCFmYl9maW5kX21vZGUoJmZiaS0+dmFyLAotCQkJICBmYmksCi0JCQkgIE5VTEwsIC8qIGRydl9pbmZvLm9wdF9tb2RlLCAqLwotCQkJICBmYmktPm1vbnNwZWNzLm1vZGVkYiwKLQkJCSAgZmJpLT5tb25zcGVjcy5tb2RlZGJfbGVuLAotCQkJICBmYmktPm1vbnNwZWNzLm1vZGVkYiwKLQkJCSAgYnBwKSkgewotCi0JCXByaW50X2VycigiQ2Fubm90IGZpbmQgdmFsaWQgbW9kZSBmb3IgcGFuZWwgJXMiLCBwYW5lbC0+bmFtZSk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWZiaS0+cHNldWRvX3BhbGV0dGUgPSBrbWFsbG9jKHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOwotCWlmICghZmJpLT5wc2V1ZG9fcGFsZXR0ZSkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JbWVtc2V0KGZiaS0+cHNldWRvX3BhbGV0dGUsIDAsIHNpemVvZih1MzIpICogMTYpOwotCi0JaWYgKGZiX2FsbG9jX2NtYXAoJmZiaS0+Y21hcCwgQVUxMjAwX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTLCAwKSA8IDApIHsKLQkJcHJpbnRfZXJyKCJGYWlsIHRvIGFsbG9jYXRlIGNvbG9ybWFwICglZCBlbnRyaWVzKSIsCi0JCQkgICBBVTEyMDBfTENEX05CUl9QQUxFVFRFX0VOVFJJRVMpOwotCQlrZnJlZShmYmktPnBzZXVkb19wYWxldHRlKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0Jc3RybmNweShmYmktPmZpeC5pZCwgIkFVMTIwMCIsIHNpemVvZihmYmktPmZpeC5pZCkpOwotCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSBmYmRldi0+ZmJfcGh5czsKLQlmYmktPmZpeC5zbWVtX2xlbiA9IGZiZGV2LT5mYl9sZW47Ci0JZmJpLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLQlmYmktPmZpeC54cGFuc3RlcCA9IDA7Ci0JZmJpLT5maXgueXBhbnN0ZXAgPSAwOwotCWZiaS0+Zml4Lm1taW9fc3RhcnQgPSAwOwotCWZiaS0+Zml4Lm1taW9fbGVuID0gMDsKLQlmYmktPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX05PTkU7Ci0KLQlmYmktPnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKSBmYmRldi0+ZmJfbWVtOwotCi0JYXUxMjAwZmJfdXBkYXRlX2ZiaW5mbyhmYmkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEFVMTIwMCBMQ0QgY29udHJvbGxlciBkZXZpY2UgZHJpdmVyICovCi0KLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldjsKLQl1bnNpZ25lZCBsb25nIHBhZ2U7Ci0JaW50IGJwcCwgcGxhbmUsIHJldDsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IENPTkZJR19GQl9BVTEyMDBfREVWUzsgKytwbGFuZSkgewotCQlicHAgPSB3aW5icHAod2luLT53W3BsYW5lXS5tb2RlX3dpbmN0cmwxKTsKLQkJaWYgKHdpbi0+d1twbGFuZV0ueHJlcyA9PSAwKQotCQkJd2luLT53W3BsYW5lXS54cmVzID0gcGFuZWwtPlhyZXM7Ci0JCWlmICh3aW4tPndbcGxhbmVdLnlyZXMgPT0gMCkKLQkJCXdpbi0+d1twbGFuZV0ueXJlcyA9IHBhbmVsLT5ZcmVzOwotCi0JCWZiZGV2ID0gJl9hdTEyMDBmYl9kZXZpY2VzW3BsYW5lXTsKLQkJbWVtc2V0KGZiZGV2LCAwLCBzaXplb2Yoc3RydWN0IGF1MTIwMGZiX2RldmljZSkpOwotCQlmYmRldi0+cGxhbmUgPSBwbGFuZTsKLQotCQkvKiBBbGxvY2F0ZSB0aGUgZnJhbWVidWZmZXIgdG8gdGhlIG1heGltdW0gc2NyZWVuIHNpemUgKi8KLQkJZmJkZXYtPmZiX2xlbiA9ICh3aW4tPndbcGxhbmVdLnhyZXMgKiB3aW4tPndbcGxhbmVdLnlyZXMgKiBicHApIC8gODsKLQotCQlmYmRldi0+ZmJfbWVtID0gZG1hX2FsbG9jX25vbmNvaGVyZW50KGRldiwKLQkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAotCQkJCSZmYmRldi0+ZmJfcGh5cywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZmJkZXYtPmZiX21lbSkgewotCQkJcHJpbnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIGZyYW1idWZmZXIgKHNpemU6ICVkSykpIiwKLQkJCQkgIGZiZGV2LT5mYl9sZW4gLyAxMDI0KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJLyoKLQkJICogU2V0IHBhZ2UgcmVzZXJ2ZWQgc28gdGhhdCBtbWFwIHdpbGwgd29yay4gVGhpcyBpcyBuZWNlc3NhcnkKLQkJICogc2luY2Ugd2UnbGwgYmUgcmVtYXBwaW5nIG5vcm1hbCBtZW1vcnkuCi0JCSAqLwotCQlmb3IgKHBhZ2UgPSAodW5zaWduZWQgbG9uZylmYmRldi0+ZmJfcGh5czsKLQkJICAgICBwYWdlIDwgUEFHRV9BTElHTigodW5zaWduZWQgbG9uZylmYmRldi0+ZmJfcGh5cyArCi0JCQkgICAgIGZiZGV2LT5mYl9sZW4pOwotCQkgICAgIHBhZ2UgKz0gUEFHRV9TSVpFKSB7Ci0JCQlTZXRQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGFnZSA+PiBQQUdFX1NISUZUKSk7IC8qIExDRCBETUEgaXMgTk9UIGNvaGVyZW50IG9uIEF1MTIwMCAqLwotCQl9Ci0JCXByaW50X2RiZygiRnJhbWVidWZmZXIgbWVtb3J5IG1hcCBhdCAlcCIsIGZiZGV2LT5mYl9tZW0pOwotCQlwcmludF9kYmcoInBoeXM9MHglMDh4LCBzaXplPSVkSyIsIGZiZGV2LT5mYl9waHlzLCBmYmRldi0+ZmJfbGVuIC8gMTAyNCk7Ci0KLQkJLyogSW5pdCBGQiBkYXRhICovCi0JCWlmICgocmV0ID0gYXUxMjAwZmJfaW5pdF9mYmluZm8oZmJkZXYpKSA8IDApCi0JCQlnb3RvIGZhaWxlZDsKLQotCQkvKiBSZWdpc3RlciBuZXcgZnJhbWVidWZmZXIgKi8KLQkJaWYgKChyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJkZXYtPmZiX2luZm8pKSA8IDApIHsKLQkJCXByaW50X2VycigiY2Fubm90IHJlZ2lzdGVyIG5ldyBmcmFtZWJ1ZmZlciIpOwotCQkJZ290byBmYWlsZWQ7Ci0JCX0KLQotCQlhdTEyMDBmYl9mYl9zZXRfcGFyKCZmYmRldi0+ZmJfaW5mbyk7Ci0KLSNpZiAhZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTE9HTykKLQkJaWYgKHBsYW5lID09IDApCi0JCQlpZiAoZmJfcHJlcGFyZV9sb2dvKCZmYmRldi0+ZmJfaW5mbywgRkJfUk9UQVRFX1VSKSkgewotCQkJCS8qIFN0YXJ0IGRpc3BsYXkgYW5kIHNob3cgbG9nbyBvbiBib290ICovCi0JCQkJZmJfc2V0X2NtYXAoJmZiZGV2LT5mYl9pbmZvLmNtYXAsCi0JCQkJCQkmZmJkZXYtPmZiX2luZm8pOwotCi0JCQkJZmJfc2hvd19sb2dvKCZmYmRldi0+ZmJfaW5mbywgRkJfUk9UQVRFX1VSKTsKLQkJCX0KLSNlbmRpZgotCX0KLQotCS8qIE5vdyBob29rIGludGVycnVwdCB0b28gKi8KLQlpZiAoKHJldCA9IHJlcXVlc3RfaXJxKEFVMTIwMF9MQ0RfSU5ULCBhdTEyMDBmYl9oYW5kbGVfaXJxLAotCQkgCSAgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsICJsY2QiLCAodm9pZCAqKWRldikpIDwgMCkgewotCQlwcmludF9lcnIoImZhaWwgdG8gcmVxdWVzdCBpbnRlcnJ1cHQgbGluZSAlZCAoZXJyOiAlZCkiLAotCQkJICBBVTEyMDBfTENEX0lOVCwgcmV0KTsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWZhaWxlZDoKLQkvKiBOT1RFOiBUaGlzIG9ubHkgZG9lcyB0aGUgY3VycmVudCBwbGFuZS93aW5kb3cgdGhhdCBmYWlsZWQ7IG90aGVycyBhcmUgc3RpbGwgYWN0aXZlICovCi0JaWYgKGZiZGV2LT5mYl9tZW0pCi0JCWRtYV9mcmVlX25vbmNvaGVyZW50KGRldiwgUEFHRV9BTElHTihmYmRldi0+ZmJfbGVuKSwKLQkJCQlmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5cyk7Ci0JaWYgKGZiZGV2LT5mYl9pbmZvLmNtYXAubGVuICE9IDApCi0JCWZiX2RlYWxsb2NfY21hcCgmZmJkZXYtPmZiX2luZm8uY21hcCk7Ci0JaWYgKGZiZGV2LT5mYl9pbmZvLnBzZXVkb19wYWxldHRlKQotCQlrZnJlZShmYmRldi0+ZmJfaW5mby5wc2V1ZG9fcGFsZXR0ZSk7Ci0JaWYgKHBsYW5lID09IDApCi0JCWZyZWVfaXJxKEFVMTIwMF9MQ0RfSU5ULCAodm9pZCopZGV2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwotCWludCBwbGFuZTsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFR1cm4gb2ZmIHRoZSBwYW5lbCAqLwotCWF1MTIwMF9zZXRwYW5lbChOVUxMKTsKLQotCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IENPTkZJR19GQl9BVTEyMDBfREVWUzsgKytwbGFuZSkKLQl7Ci0JCWZiZGV2ID0gJl9hdTEyMDBmYl9kZXZpY2VzW3BsYW5lXTsKLQotCQkvKiBDbGVhbiB1cCBhbGwgcHJvYmUgZGF0YSAqLwotCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmRldi0+ZmJfaW5mbyk7Ci0JCWlmIChmYmRldi0+ZmJfbWVtKQotCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoZGV2LCBQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAotCQkJCQlmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5cyk7Ci0JCWlmIChmYmRldi0+ZmJfaW5mby5jbWFwLmxlbiAhPSAwKQotCQkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+ZmJfaW5mby5jbWFwKTsKLQkJaWYgKGZiZGV2LT5mYl9pbmZvLnBzZXVkb19wYWxldHRlKQotCQkJa2ZyZWUoZmJkZXYtPmZiX2luZm8ucHNldWRvX3BhbGV0dGUpOwotCX0KLQotCWZyZWVfaXJxKEFVMTIwMF9MQ0RfSU5ULCAodm9pZCAqKWRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQotewotCS8qIFRPRE8gKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQotewotCS8qIFRPRE8gKi8KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF1MTIwMGZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYXUxMjAwLWxjZCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCQk9IGF1MTIwMGZiX2Rydl9wcm9iZSwKLQkucmVtb3ZlCQk9IGF1MTIwMGZiX2Rydl9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBhdTEyMDBmYl9kcnZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGF1MTIwMGZiX2Rydl9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEtlcm5lbCBkcml2ZXIgKi8KLQotc3RhdGljIHZvaWQgYXUxMjAwZmJfc2V0dXAodm9pZCkKLXsKLQljaGFyKiBvcHRpb25zID0gTlVMTDsKLQljaGFyKiB0aGlzX29wdDsKLQlpbnQgbnVtX3BhbmVscyA9IEFSUkFZX1NJWkUoa25vd25fbGNkX3BhbmVscyk7Ci0JaW50IHBhbmVsX2lkeCA9IC0xOwotCi0JZmJfZ2V0X29wdGlvbnMoRFJJVkVSX05BTUUsICZvcHRpb25zKTsKLQotCWlmIChvcHRpb25zKSB7Ci0JCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsIiwiKSkgIT0gTlVMTCkgewotCQkJLyogUGFuZWwgb3B0aW9uIC0gY2FuIGJlIHBhbmVsIG5hbWUsCi0JCQkgKiAiYnMiIGZvciBib2FyZC1zd2l0Y2gsIG9yIG51bWJlci9pbmRleCAqLwotCQkJaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAicGFuZWw6IiwgNikpIHsKLQkJCQlpbnQgaTsKLQkJCQlsb25nIGludCBsaTsKLQkJCQljaGFyICplbmRwdHI7Ci0JCQkJdGhpc19vcHQgKz0gNjsKLQkJCQkvKiBGaXJzdCBjaGVjayBmb3IgaW5kZXgsIHdoaWNoIGFsbG93cwotCQkJCSAqIHRvIHNob3J0IGNpcmN1aXQgdGhpcyBtZXNzICovCi0JCQkJbGkgPSBzaW1wbGVfc3RydG9sKHRoaXNfb3B0LCAmZW5kcHRyLCAwKTsKLQkJCQlpZiAoKmVuZHB0ciA9PSAnXDAnKSB7Ci0JCQkJCXBhbmVsX2lkeCA9IChpbnQpbGk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHN0cmNtcCh0aGlzX29wdCwgImJzIikgPT0gMCkgewotCQkJCQlleHRlcm4gaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsKHZvaWQpOwotCQkJCQlwYW5lbF9pZHggPSBib2FyZF9hdTEyMDBmYl9wYW5lbCgpOwotCQkJCX0KLQotCQkJCWVsc2UKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhbmVsczsgaSsrKSB7Ci0JCQkJCWlmICghc3RyY21wKHRoaXNfb3B0LCBrbm93bl9sY2RfcGFuZWxzW2ldLm5hbWUpKSB7Ci0JCQkJCQlwYW5lbF9pZHggPSBpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAoKHBhbmVsX2lkeCA8IDApIHx8IChwYW5lbF9pZHggPj0gbnVtX3BhbmVscykpIHsKLQkJCQkJCXByaW50X3dhcm4oIlBhbmVsICVzIG5vdCBzdXBwb3J0ZWQhIiwgdGhpc19vcHQpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXBhbmVsX2luZGV4ID0gcGFuZWxfaWR4OwotCQkJfQotCi0JCQllbHNlIGlmIChzdHJuY21wKHRoaXNfb3B0LCAibm9od2N1cnNvciIsIDEwKSA9PSAwKSB7Ci0JCQkJbm9od2N1cnNvciA9IDE7Ci0JCQl9Ci0KLQkJCS8qIFVuc3VwcG9ydGVkIG9wdGlvbiAqLwotCQkJZWxzZSB7Ci0JCQkJcHJpbnRfd2FybigiVW5zdXBwb3J0ZWQgb3B0aW9uIFwiJXNcIiIsIHRoaXNfb3B0KTsKLQkJCX0KLQkJfQotCX0KLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdTEyMDBmYl9wbV9jYWxsYmFjayhhdTF4eHhfcG93ZXJfZGV2X3QgKmRldiwKLQkJYXUxeHh4X3JlcXVlc3RfdCByZXF1ZXN0LCB2b2lkICpkYXRhKSB7Ci0JaW50IHJldHZhbCA9IC0xOwotCXVuc2lnbmVkIGludCBkID0gMDsKLQl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcyA9IDA7Ci0KLQlpZiAocmVxdWVzdCA9PSBBVTFYWFhfUE1fU0xFRVApIHsKLQkJYm9hcmRfYXUxMjAwZmJfcGFuZWxfc2h1dGRvd24oKTsKLQl9Ci0JZWxzZSBpZiAocmVxdWVzdCA9PSBBVTFYWFhfUE1fV0FLRVVQKSB7Ci0JCWlmKGRldi0+cHJldl9zdGF0ZSA9PSBTTEVFUF9TVEFURSkKLQkJewotCQkJaW50IHBsYW5lOwotCQkJYXUxMjAwX3NldHBhbmVsKHBhbmVsKTsKLQkJCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IENPTkZJR19GQl9BVTEyMDBfREVWUzsgKytwbGFuZSkgCXsKLQkJCQlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldjsKLQkJCQlmYmRldiA9ICZfYXUxMjAwZmJfZGV2aWNlc1twbGFuZV07Ci0JCQkJYXUxMjAwZmJfZmJfc2V0X3BhcigmZmJkZXYtPmZiX2luZm8pOwotCQkJfQotCQl9Ci0KLQkJZCA9ICooKHVuc2lnbmVkIGludCopZGF0YSk7Ci0JCWlmKGQgPD0xMCkgYnJpZ2h0bmVzcyA9IDI2OwotCQllbHNlIGlmKGQ8PTIwKSBicmlnaHRuZXNzID0gNTE7Ci0JCWVsc2UgaWYoZDw9MzApIGJyaWdodG5lc3MgPSA3NzsKLQkJZWxzZSBpZihkPD00MCkgYnJpZ2h0bmVzcyA9IDEwMjsKLQkJZWxzZSBpZihkPD01MCkgYnJpZ2h0bmVzcyA9IDEyODsKLQkJZWxzZSBpZihkPD02MCkgYnJpZ2h0bmVzcyA9IDE1MzsKLQkJZWxzZSBpZihkPD03MCkgYnJpZ2h0bmVzcyA9IDE3OTsKLQkJZWxzZSBpZihkPD04MCkgYnJpZ2h0bmVzcyA9IDIwNDsKLQkJZWxzZSBpZihkPD05MCkgYnJpZ2h0bmVzcyA9IDIzMDsKLQkJZWxzZSBicmlnaHRuZXNzID0gMjU1OwotCQlzZXRfYnJpZ2h0bmVzcyhicmlnaHRuZXNzKTsKLQl9IGVsc2UgaWYgKHJlcXVlc3QgPT0gQVUxWFhYX1BNX0dFVFNUQVRVUykgewotCQlyZXR1cm4gZGV2LT5jdXJfc3RhdGU7Ci0JfSBlbHNlIGlmIChyZXF1ZXN0ID09IEFVMVhYWF9QTV9BQ0NFU1MpIHsKLQkJaWYgKGRldi0+Y3VyX3N0YXRlICE9IFNMRUVQX1NUQVRFKQotCQkJcmV0dXJuIHJldHZhbDsKLQkJZWxzZSB7Ci0JCQlhdTEyMDBfc2V0cGFuZWwocGFuZWwpOwotCQl9Ci0JfSBlbHNlIGlmIChyZXF1ZXN0ID09IEFVMVhYWF9QTV9JRExFKSB7Ci0JfSBlbHNlIGlmIChyZXF1ZXN0ID09IEFVMVhYWF9QTV9DTEVBTlVQKSB7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdCBhdTEyMDBmYl9pbml0KHZvaWQpCi17Ci0JcHJpbnRfaW5mbygiIiBEUklWRVJfREVTQyAiIik7Ci0KLQkvKiBTZXR1cCBkcml2ZXIgd2l0aCBvcHRpb25zICovCi0JYXUxMjAwZmJfc2V0dXAoKTsKLQotCS8qIFBvaW50IHRvIHRoZSBwYW5lbCBzZWxlY3RlZCAqLwotCXBhbmVsID0gJmtub3duX2xjZF9wYW5lbHNbcGFuZWxfaW5kZXhdOwotCXdpbiA9ICZ3aW5kb3dzW3dpbmRvd19pbmRleF07Ci0KLQlwcmludGsoRFJJVkVSX05BTUUgIjogUGFuZWwgJWQgJXNcbiIsIHBhbmVsX2luZGV4LCBwYW5lbC0+bmFtZSk7Ci0JcHJpbnRrKERSSVZFUl9OQU1FICI6IFdpbiAlZCAlc1xuIiwgd2luZG93X2luZGV4LCB3aW4tPm5hbWUpOwotCi0JLyogS2lja3N0YXJ0IHRoZSBwYW5lbCwgdGhlIGZyYW1lYnVmZmVycy93aW5kb3dzIGNvbWUgc29vbiBlbm91Z2ggKi8KLQlhdTEyMDBfc2V0cGFuZWwocGFuZWwpOwotCi0JI2lmZGVmIENPTkZJR19QTQotCUxDRF9wbV9kZXYgPSBuZXdfYXUxeHh4X3Bvd2VyX2RldmljZSgiTENEIiwgJmF1MTIwMGZiX3BtX2NhbGxiYWNrLCBOVUxMKTsKLQlpZiAoIExDRF9wbV9kZXYgPT0gTlVMTCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5hYmxlIHRvIGNyZWF0ZSBhIHBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIGVudHJ5IGZvciB0aGUgYXUxMjAwZmIuXG4iKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIGVudHJ5IGZvciB0aGUgYXUxMjAwZmIgbG9hZGVkLlxuIik7Ci0JI2VuZGlmCi0KLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBmYl9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXUxMjAwZmJfY2xlYW51cCh2b2lkKQotewotCWRyaXZlcl91bnJlZ2lzdGVyKCZhdTEyMDBmYl9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChhdTEyMDBmYl9pbml0KTsKLW1vZHVsZV9leGl0KGF1MTIwMGZiX2NsZWFudXApOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggOWQ5OTZmMi4uYjg5NWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC00MywxMSArNDMsMTEgQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIEJBQ0tMSUdIVF9DT1JHSQotCXRyaXN0YXRlICJTaGFycCBDb3JnaSBCYWNrbGlnaHQgRHJpdmVyIChTTC1DN3h4IFNlcmllcykiCisJdHJpc3RhdGUgIlNoYXJwIENvcmdpIEJhY2tsaWdodCBEcml2ZXIgKFNMIFNlcmllcykiCiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfREVWSUNFICYmIFBYQV9TSEFSUFNMCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgSWYgeW91IGhhdmUgYSBTaGFycCBaYXVydXMgU0wtQzd4eCwgc2F5IHkgdG8gZW5hYmxlIHRoZQorCSAgSWYgeW91IGhhdmUgYSBTaGFycCBaYXVydXMgU0wtQzd4eCwgU0wtQ3h4MDAgb3IgU0wtNjAwMHggc2F5IHkgdG8gZW5hYmxlIHRoZQogCSAgYmFja2xpZ2h0IGRyaXZlci4KIAogY29uZmlnIEJBQ0tMSUdIVF9IUDY4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwppbmRleCAxNTFmZGE4Li4yNzU5N2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwpAQCAtMTYsMTQgKzE2LDEyIEBACiAKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X3Bvd2VyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVOWElPOwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IHRvX2JhY2tsaWdodF9kZXZpY2UoY2Rldik7CiAKIAlkb3duKCZiZC0+c2VtKTsKLQlpZiAobGlrZWx5KGJkLT5wcm9wcyAmJiBiZC0+cHJvcHMtPmdldF9wb3dlcikpCi0JCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgYmQtPnByb3BzLT5nZXRfcG93ZXIoYmQpKTsKLQllbHNlCi0JCXJjID0gLUVOWElPOworCWlmIChsaWtlbHkoYmQtPnByb3BzKSkKKwkJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBiZC0+cHJvcHMtPnBvd2VyKTsKIAl1cCgmYmQtPnNlbSk7CiAKIAlyZXR1cm4gcmM7CkBAIC0zMSwyMSArMjksMjUgQEAKIAogc3RhdGljIHNzaXplX3QgYmFja2xpZ2h0X3N0b3JlX3Bvd2VyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWludCByYywgcG93ZXI7CisJaW50IHJjID0gLUVOWElPOwogCWNoYXIgKmVuZHA7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gdG9fYmFja2xpZ2h0X2RldmljZShjZGV2KTsKKwlpbnQgcG93ZXIgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKKwlzaXplX3Qgc2l6ZSA9IGVuZHAgLSBidWY7CiAKLQlwb3dlciA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOwotCWlmICgqZW5kcCAmJiAhaXNzcGFjZSgqZW5kcCkpCisJaWYgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCQlzaXplKys7CisJaWYgKHNpemUgIT0gY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZG93bigmYmQtPnNlbSk7Ci0JaWYgKGxpa2VseShiZC0+cHJvcHMgJiYgYmQtPnByb3BzLT5zZXRfcG93ZXIpKSB7CisJaWYgKGxpa2VseShiZC0+cHJvcHMpKSB7CiAJCXByX2RlYnVnKCJiYWNrbGlnaHQ6IHNldCBwb3dlciB0byAlZFxuIiwgcG93ZXIpOwotCQliZC0+cHJvcHMtPnNldF9wb3dlcihiZCwgcG93ZXIpOworCQliZC0+cHJvcHMtPnBvd2VyID0gcG93ZXI7CisJCWlmIChsaWtlbHkoYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKSkKKwkJCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7CiAJCXJjID0gY291bnQ7Ci0JfSBlbHNlCi0JCXJjID0gLUVOWElPOworCX0KIAl1cCgmYmQtPnNlbSk7CiAKIAlyZXR1cm4gcmM7CkBAIC01MywxNCArNTUsMTIgQEAKIAogc3RhdGljIHNzaXplX3QgYmFja2xpZ2h0X3Nob3dfYnJpZ2h0bmVzcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7Ci0JaW50IHJjOworCWludCByYyA9IC1FTlhJTzsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSB0b19iYWNrbGlnaHRfZGV2aWNlKGNkZXYpOwogCiAJZG93bigmYmQtPnNlbSk7Ci0JaWYgKGxpa2VseShiZC0+cHJvcHMgJiYgYmQtPnByb3BzLT5nZXRfYnJpZ2h0bmVzcykpCi0JCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgYmQtPnByb3BzLT5nZXRfYnJpZ2h0bmVzcyhiZCkpOwotCWVsc2UKLQkJcmMgPSAtRU5YSU87CisJaWYgKGxpa2VseShiZC0+cHJvcHMpKQorCQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGJkLT5wcm9wcy0+YnJpZ2h0bmVzcyk7CiAJdXAoJmJkLT5zZW0pOwogCiAJcmV0dXJuIHJjOwpAQCAtNjgsMjEgKzY4LDMwIEBACiAKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zdG9yZV9icmlnaHRuZXNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWludCByYywgYnJpZ2h0bmVzczsKKwlpbnQgcmMgPSAtRU5YSU87CiAJY2hhciAqZW5kcDsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSB0b19iYWNrbGlnaHRfZGV2aWNlKGNkZXYpOworCWludCBicmlnaHRuZXNzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CisJc2l6ZV90IHNpemUgPSBlbmRwIC0gYnVmOwogCi0JYnJpZ2h0bmVzcyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOwotCWlmICgqZW5kcCAmJiAhaXNzcGFjZSgqZW5kcCkpCisJaWYgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCQlzaXplKys7CisJaWYgKHNpemUgIT0gY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZG93bigmYmQtPnNlbSk7Ci0JaWYgKGxpa2VseShiZC0+cHJvcHMgJiYgYmQtPnByb3BzLT5zZXRfYnJpZ2h0bmVzcykpIHsKLQkJcHJfZGVidWcoImJhY2tsaWdodDogc2V0IGJyaWdodG5lc3MgdG8gJWRcbiIsIGJyaWdodG5lc3MpOwotCQliZC0+cHJvcHMtPnNldF9icmlnaHRuZXNzKGJkLCBicmlnaHRuZXNzKTsKLQkJcmMgPSBjb3VudDsKLQl9IGVsc2UKLQkJcmMgPSAtRU5YSU87CisJaWYgKGxpa2VseShiZC0+cHJvcHMpKSB7CisJCWlmIChicmlnaHRuZXNzID4gYmQtPnByb3BzLT5tYXhfYnJpZ2h0bmVzcykKKwkJCXJjID0gLUVJTlZBTDsKKwkJZWxzZSB7CisJCQlwcl9kZWJ1ZygiYmFja2xpZ2h0OiBzZXQgYnJpZ2h0bmVzcyB0byAlZFxuIiwKKwkJCQkgYnJpZ2h0bmVzcyk7CisJCQliZC0+cHJvcHMtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOworCQkJaWYgKGxpa2VseShiZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMpKQorCQkJCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7CisJCQlyYyA9IGNvdW50OworCQl9CisJfQogCXVwKCZiZC0+c2VtKTsKIAogCXJldHVybiByYzsKQEAgLTkwLDE0ICs5OSwyNiBAQAogCiBzdGF0aWMgc3NpemVfdCBiYWNrbGlnaHRfc2hvd19tYXhfYnJpZ2h0bmVzcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7Ci0JaW50IHJjOworCWludCByYyA9IC1FTlhJTzsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSB0b19iYWNrbGlnaHRfZGV2aWNlKGNkZXYpOwogCiAJZG93bigmYmQtPnNlbSk7CiAJaWYgKGxpa2VseShiZC0+cHJvcHMpKQogCQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGJkLT5wcm9wcy0+bWF4X2JyaWdodG5lc3MpOwotCWVsc2UKLQkJcmMgPSAtRU5YSU87CisJdXAoJmJkLT5zZW0pOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3NpemVfdCBiYWNrbGlnaHRfc2hvd19hY3R1YWxfYnJpZ2h0bmVzcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LAorCQkJCQkJY2hhciAqYnVmKQoreworCWludCByYyA9IC1FTlhJTzsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSB0b19iYWNrbGlnaHRfZGV2aWNlKGNkZXYpOworCisJZG93bigmYmQtPnNlbSk7CisJaWYgKGxpa2VseShiZC0+cHJvcHMgJiYgYmQtPnByb3BzLT5nZXRfYnJpZ2h0bmVzcykpCisJCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgYmQtPnByb3BzLT5nZXRfYnJpZ2h0bmVzcyhiZCkpOwogCXVwKCZiZC0+c2VtKTsKIAogCXJldHVybiByYzsKQEAgLTEyMyw3ICsxNDQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGJsX2NsYXNzX2RldmljZV9hdHRyaWJ1dGVzW10gPSB7CiAJREVDTEFSRV9BVFRSKHBvd2VyLCAwNjQ0LCBiYWNrbGlnaHRfc2hvd19wb3dlciwgYmFja2xpZ2h0X3N0b3JlX3Bvd2VyKSwKLQlERUNMQVJFX0FUVFIoYnJpZ2h0bmVzcywgMDY0NCwgYmFja2xpZ2h0X3Nob3dfYnJpZ2h0bmVzcywgYmFja2xpZ2h0X3N0b3JlX2JyaWdodG5lc3MpLAorCURFQ0xBUkVfQVRUUihicmlnaHRuZXNzLCAwNjQ0LCBiYWNrbGlnaHRfc2hvd19icmlnaHRuZXNzLAorCQkgICAgIGJhY2tsaWdodF9zdG9yZV9icmlnaHRuZXNzKSwKKwlERUNMQVJFX0FUVFIoYWN0dWFsX2JyaWdodG5lc3MsIDA0NDQsIGJhY2tsaWdodF9zaG93X2FjdHVhbF9icmlnaHRuZXNzLAorCQkgICAgIE5VTEwpLAogCURFQ0xBUkVfQVRUUihtYXhfYnJpZ2h0bmVzcywgMDQ0NCwgYmFja2xpZ2h0X3Nob3dfbWF4X2JyaWdodG5lc3MsIE5VTEwpLAogfTsKIApAQCAtMTQ0LDggKzE2OCwxMiBAQAogCWJkID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlLCBmYl9ub3RpZik7CiAJZG93bigmYmQtPnNlbSk7CiAJaWYgKGJkLT5wcm9wcykKLQkJaWYgKCFiZC0+cHJvcHMtPmNoZWNrX2ZiIHx8IGJkLT5wcm9wcy0+Y2hlY2tfZmIoZXZkYXRhLT5pbmZvKSkKLQkJCWJkLT5wcm9wcy0+c2V0X3Bvd2VyKGJkLCAqKGludCAqKWV2ZGF0YS0+ZGF0YSk7CisJCWlmICghYmQtPnByb3BzLT5jaGVja19mYiB8fAorCQkgICAgYmQtPnByb3BzLT5jaGVja19mYihldmRhdGEtPmluZm8pKSB7CisJCQliZC0+cHJvcHMtPmZiX2JsYW5rID0gKihpbnQgKilldmRhdGEtPmRhdGE7CisJCQlpZiAobGlrZWx5KGJkLT5wcm9wcyAmJiBiZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMpKQorCQkJCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7CisJCX0KIAl1cCgmYmQtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzEsNiArMjU5LDEyIEBACiAJCQkJCSAmYmxfY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZXNbaV0pOwogCiAJZG93bigmYmQtPnNlbSk7CisJaWYgKGxpa2VseShiZC0+cHJvcHMgJiYgYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKSkgeworCQliZC0+cHJvcHMtPmJyaWdodG5lc3MgPSAwOworCQliZC0+cHJvcHMtPnBvd2VyID0gMDsKKwkJYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKKwl9CisKIAliZC0+cHJvcHMgPSBOVUxMOwogCXVwKCZiZC0+c2VtKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKaW5kZXggZDBhYWY0NS4uMmViYmZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqICBCYWNrbGlnaHQgRHJpdmVyIGZvciBTaGFycCBDb3JnaQorICogIEJhY2tsaWdodCBEcml2ZXIgZm9yIFNoYXJwIFphdXJ1cyBIYW5kaGVsZHMgKHZhcmlvdXMgbW9kZWxzKQogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBSaWNoYXJkIFB1cmRpZQorICogIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IFJpY2hhcmQgUHVyZGllCiAgKgogICogIEJhc2VkIG9uIFNoYXJwJ3MgMi40IEJhY2tsaWdodCBEcml2ZXIKICAqCkBAIC0xNSw4MCArMTUsNjMgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Ci0KICNpbmNsdWRlIDxhc20vYXJjaC9zaGFycHNsLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NoYXJwc2xfcG0uaD4KIAotI2RlZmluZSBDT1JHSV9ERUZBVUxUX0lOVEVOU0lUWQkJMHgxZgotI2RlZmluZSBDT1JHSV9MSU1JVF9NQVNLCQkweDBiCi0KLXN0YXRpYyBpbnQgY29yZ2libF9wb3dlcm1vZGUgPSBGQl9CTEFOS19VTkJMQU5LOwotc3RhdGljIGludCBjdXJyZW50X2ludGVuc2l0eSA9IDA7Ci1zdGF0aWMgaW50IGNvcmdpYmxfbGltaXQgPSAwOwotc3RhdGljIHZvaWQgKCpjb3JnaWJsX21hY2hfc2V0X2ludGVuc2l0eSkoaW50IGludGVuc2l0eSk7Ci1zdGF0aWMgc3BpbmxvY2tfdCBibF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIGludCBjb3JnaWJsX2ludGVuc2l0eTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYmxfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBjb3JnaWJsX2RhdGE7CitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmNvcmdpX2JhY2tsaWdodF9kZXZpY2U7CitzdGF0aWMgc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gKmJsX21hY2hpbmZvOwogCi1zdGF0aWMgdm9pZCBjb3JnaWJsX3NlbmRfaW50ZW5zaXR5KGludCBpbnRlbnNpdHkpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3JnaWJsX2ZsYWdzOworI2RlZmluZSBDT1JHSUJMX1NVU1BFTkRFRCAgICAgMHgwMQorI2RlZmluZSBDT1JHSUJMX0JBVFRMT1cgICAgICAgMHgwMgorCitzdGF0aWMgaW50IGNvcmdpYmxfc2VuZF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAoKmNvcmdpX2tpY2tfYmF0dCkodm9pZCk7CisJaW50IGludGVuc2l0eSA9IGJkLT5wcm9wcy0+YnJpZ2h0bmVzczsKIAotCWlmIChjb3JnaWJsX3Bvd2VybW9kZSAhPSBGQl9CTEFOS19VTkJMQU5LKSB7CisJaWYgKGJkLT5wcm9wcy0+cG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSykKIAkJaW50ZW5zaXR5ID0gMDsKLQl9IGVsc2UgewotCQlpZiAoY29yZ2libF9saW1pdCkKLQkJCWludGVuc2l0eSAmPSBDT1JHSV9MSU1JVF9NQVNLOwotCX0KKwlpZiAoYmQtPnByb3BzLT5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlpbnRlbnNpdHkgPSAwOworCWlmIChjb3JnaWJsX2ZsYWdzICYgQ09SR0lCTF9TVVNQRU5ERUQpCisJCWludGVuc2l0eSA9IDA7CisJaWYgKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX0JBVFRMT1cpCisJCWludGVuc2l0eSAmPSBibF9tYWNoaW5mby0+bGltaXRfbWFzazsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZibF9sb2NrLCBmbGFncyk7CisgCW11dGV4X2xvY2soJmJsX211dGV4KTsKKwlibF9tYWNoaW5mby0+c2V0X2JsX2ludGVuc2l0eShpbnRlbnNpdHkpOworCW11dGV4X3VubG9jaygmYmxfbXV0ZXgpOwogCi0JY29yZ2libF9tYWNoX3NldF9pbnRlbnNpdHkoaW50ZW5zaXR5KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsX2xvY2ssIGZsYWdzKTsKKwljb3JnaWJsX2ludGVuc2l0eSA9IGludGVuc2l0eTsKIAogIAljb3JnaV9raWNrX2JhdHQgPSBzeW1ib2xfZ2V0KHNoYXJwc2xfYmF0dGVyeV9raWNrKTsKICAJaWYgKGNvcmdpX2tpY2tfYmF0dCkgewogIAkJY29yZ2lfa2lja19iYXR0KCk7CiAgCQlzeW1ib2xfcHV0KHNoYXJwc2xfYmF0dGVyeV9raWNrKTsKICAJfQotfQogCi1zdGF0aWMgdm9pZCBjb3JnaWJsX2JsYW5rKGludCBibGFuaykKLXsKLQlzd2l0Y2goYmxhbmspIHsKLQotCWNhc2UgRkJfQkxBTktfTk9STUFMOgotCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLQljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Ci0JY2FzZSBGQl9CTEFOS19QT1dFUkRPV046Ci0JCWlmIChjb3JnaWJsX3Bvd2VybW9kZSA9PSBGQl9CTEFOS19VTkJMQU5LKSB7Ci0JCQljb3JnaWJsX3NlbmRfaW50ZW5zaXR5KDApOwotCQkJY29yZ2libF9wb3dlcm1vZGUgPSBibGFuazsKLQkJfQotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX1VOQkxBTks6Ci0JCWlmIChjb3JnaWJsX3Bvd2VybW9kZSAhPSBGQl9CTEFOS19VTkJMQU5LKSB7Ci0JCQljb3JnaWJsX3Bvd2VybW9kZSA9IGJsYW5rOwotCQkJY29yZ2libF9zZW5kX2ludGVuc2l0eShjdXJyZW50X2ludGVuc2l0eSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQorCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGNvcmdpYmxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQljb3JnaWJsX2JsYW5rKEZCX0JMQU5LX1BPV0VSRE9XTik7CisJY29yZ2libF9mbGFncyB8PSBDT1JHSUJMX1NVU1BFTkRFRDsKKwljb3JnaWJsX3NlbmRfaW50ZW5zaXR5KGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNvcmdpYmxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQljb3JnaWJsX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkspOworCWNvcmdpYmxfZmxhZ3MgJj0gfkNPUkdJQkxfU1VTUEVOREVEOworCWNvcmdpYmxfc2VuZF9pbnRlbnNpdHkoY29yZ2lfYmFja2xpZ2h0X2RldmljZSk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpAQCAtOTYsMzAgKzc5LDE1IEBACiAjZGVmaW5lIGNvcmdpYmxfcmVzdW1lCU5VTEwKICNlbmRpZgogCi0KLXN0YXRpYyBpbnQgY29yZ2libF9zZXRfcG93ZXIoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLCBpbnQgc3RhdGUpCi17Ci0JY29yZ2libF9ibGFuayhzdGF0ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY29yZ2libF9nZXRfcG93ZXIoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXJldHVybiBjb3JnaWJsX3Bvd2VybW9kZTsKLX0KLQotc3RhdGljIGludCBjb3JnaWJsX3NldF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLCBpbnQgaW50ZW5zaXR5KQotewotCWlmIChpbnRlbnNpdHkgPiBjb3JnaWJsX2RhdGEubWF4X2JyaWdodG5lc3MpCi0JCWludGVuc2l0eSA9IGNvcmdpYmxfZGF0YS5tYXhfYnJpZ2h0bmVzczsKLQljb3JnaWJsX3NlbmRfaW50ZW5zaXR5KGludGVuc2l0eSk7Ci0JY3VycmVudF9pbnRlbnNpdHk9aW50ZW5zaXR5OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNvcmdpYmxfZ2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0JcmV0dXJuIGN1cnJlbnRfaW50ZW5zaXR5OworCXJldHVybiBjb3JnaWJsX2ludGVuc2l0eTsKK30KKworc3RhdGljIGludCBjb3JnaWJsX3NldF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCWNvcmdpYmxfc2VuZF9pbnRlbnNpdHkoY29yZ2lfYmFja2xpZ2h0X2RldmljZSk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMjgsMzYgKzk2LDM4IEBACiAgKi8KIHZvaWQgY29yZ2libF9saW1pdF9pbnRlbnNpdHkoaW50IGxpbWl0KQogewotCWNvcmdpYmxfbGltaXQgPSAobGltaXQgPyAxIDogMCk7Ci0JY29yZ2libF9zZW5kX2ludGVuc2l0eShjdXJyZW50X2ludGVuc2l0eSk7CisJaWYgKGxpbWl0KQorCQljb3JnaWJsX2ZsYWdzIHw9IENPUkdJQkxfQkFUVExPVzsKKwllbHNlCisJCWNvcmdpYmxfZmxhZ3MgJj0gfkNPUkdJQkxfQkFUVExPVzsKKwljb3JnaWJsX3NlbmRfaW50ZW5zaXR5KGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOwogfQogRVhQT1JUX1NZTUJPTChjb3JnaWJsX2xpbWl0X2ludGVuc2l0eSk7CiAKIAogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBjb3JnaWJsX2RhdGEgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5nZXRfcG93ZXIgICAgICA9IGNvcmdpYmxfZ2V0X3Bvd2VyLAotCS5zZXRfcG93ZXIgICAgICA9IGNvcmdpYmxfc2V0X3Bvd2VyLAorCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5nZXRfYnJpZ2h0bmVzcyA9IGNvcmdpYmxfZ2V0X2ludGVuc2l0eSwKLQkuc2V0X2JyaWdodG5lc3MgPSBjb3JnaWJsX3NldF9pbnRlbnNpdHksCisJLnVwZGF0ZV9zdGF0dXMgID0gY29yZ2libF9zZXRfaW50ZW5zaXR5LAogfTsKIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpjb3JnaV9iYWNrbGlnaHRfZGV2aWNlOwotCiBzdGF0aWMgaW50IF9faW5pdCBjb3JnaWJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gKm1hY2hpbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwlibF9tYWNoaW5mbyA9IG1hY2hpbmZvOwogCWNvcmdpYmxfZGF0YS5tYXhfYnJpZ2h0bmVzcyA9IG1hY2hpbmZvLT5tYXhfaW50ZW5zaXR5OwotCWNvcmdpYmxfbWFjaF9zZXRfaW50ZW5zaXR5ID0gbWFjaGluZm8tPnNldF9ibF9pbnRlbnNpdHk7CisJaWYgKCFtYWNoaW5mby0+bGltaXRfbWFzaykKKwkJbWFjaGluZm8tPmxpbWl0X21hc2sgPSAtMTsKIAogCWNvcmdpX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyICgiY29yZ2ktYmwiLAogCQlOVUxMLCAmY29yZ2libF9kYXRhKTsKIAlpZiAoSVNfRVJSIChjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIgKGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOwogCi0JY29yZ2libF9zZXRfaW50ZW5zaXR5KE5VTEwsIENPUkdJX0RFRkFVTFRfSU5URU5TSVRZKTsKLQljb3JnaWJsX2xpbWl0X2ludGVuc2l0eSgwKTsKKwljb3JnaWJsX2RhdGEucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCWNvcmdpYmxfZGF0YS5icmlnaHRuZXNzID0gbWFjaGluZm8tPmRlZmF1bHRfaW50ZW5zaXR5OworCWNvcmdpYmxfc2VuZF9pbnRlbnNpdHkoY29yZ2lfYmFja2xpZ2h0X2RldmljZSk7CiAKIAlwcmludGsoIkNvcmdpIEJhY2tsaWdodCBEcml2ZXIgSW5pdGlhbGl6ZWQuXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTE2Nyw4ICsxMzcsNiBAQAogewogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKIAotCWNvcmdpYmxfc2V0X2ludGVuc2l0eShOVUxMLCAwKTsKLQogCXByaW50aygiQ29yZ2kgQmFja2xpZ2h0IERyaXZlciBVbmxvYWRlZFxuIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwppbmRleCA5NWRhNGM5Li5hNzFlOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgpAQCAtMjUsNjYgKzI1LDU4IEBACiAjZGVmaW5lIEhQNjgwX01BWF9JTlRFTlNJVFkgMjU1CiAjZGVmaW5lIEhQNjgwX0RFRkFVTFRfSU5URU5TSVRZIDEwCiAKLXN0YXRpYyBpbnQgaHA2ODBibF9wb3dlcm1vZGUgPSBGQl9CTEFOS19VTkJMQU5LOworc3RhdGljIGludCBocDY4MGJsX3N1c3BlbmRlZDsKIHN0YXRpYyBpbnQgY3VycmVudF9pbnRlbnNpdHkgPSAwOwogc3RhdGljIHNwaW5sb2NrX3QgYmxfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqaHA2ODBfYmFja2xpZ2h0X2RldmljZTsKIAotc3RhdGljIHZvaWQgaHA2ODBibF9zZW5kX2ludGVuc2l0eShpbnQgaW50ZW5zaXR5KQorc3RhdGljIHZvaWQgaHA2ODBibF9zZW5kX2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgdjsKKwlpbnQgaW50ZW5zaXR5ID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOwogCi0JaWYgKGhwNjgwYmxfcG93ZXJtb2RlICE9IEZCX0JMQU5LX1VOQkxBTkspCisJaWYgKGJkLT5wcm9wcy0+cG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJaW50ZW5zaXR5ID0gMDsKKwlpZiAoYmQtPnByb3BzLT5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlpbnRlbnNpdHkgPSAwOworCWlmIChocDY4MGJsX3N1c3BlbmRlZCkKIAkJaW50ZW5zaXR5ID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZibF9sb2NrLCBmbGFncyk7Ci0Jc2hfZGFjX291dHB1dCgyNTUtKHU4KWludGVuc2l0eSwgREFDX0xDRF9CUklHSFRORVNTKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibF9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhwNjgwYmxfYmxhbmsoaW50IGJsYW5rKQotewotCXUxNiB2OwotCi0Jc3dpdGNoKGJsYW5rKSB7Ci0KLQljYXNlIEZCX0JMQU5LX05PUk1BTDoKLQljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6Ci0JY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgotCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQlpZiAoaHA2ODBibF9wb3dlcm1vZGUgPT0gRkJfQkxBTktfVU5CTEFOSykgewotCQkJaHA2ODBibF9zZW5kX2ludGVuc2l0eSgwKTsKLQkJCWhwNjgwYmxfcG93ZXJtb2RlID0gYmxhbms7Ci0JCQlzaF9kYWNfZGlzYWJsZShEQUNfTENEX0JSSUdIVE5FU1MpOwotCQkJdiA9IGludyhIRDY0NDYxX0dQQkRSKTsKLQkJCXYgfD0gSEQ2NDQ2MV9HUEJEUl9MQ0RPRkY7Ci0JCQlvdXR3KHYsIEhENjQ0NjFfR1BCRFIpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKLQkJaWYgKGhwNjgwYmxfcG93ZXJtb2RlICE9IEZCX0JMQU5LX1VOQkxBTkspIHsKLQkJCXNoX2RhY19lbmFibGUoREFDX0xDRF9CUklHSFRORVNTKTsKLQkJCXYgPSBpbncoSEQ2NDQ2MV9HUEJEUik7Ci0JCQl2ICY9IH5IRDY0NDYxX0dQQkRSX0xDRE9GRjsKLQkJCW91dHcodiwgSEQ2NDQ2MV9HUEJEUik7Ci0JCQlocDY4MGJsX3Bvd2VybW9kZSA9IGJsYW5rOwotCQkJaHA2ODBibF9zZW5kX2ludGVuc2l0eShjdXJyZW50X2ludGVuc2l0eSk7Ci0JCX0KLQkJYnJlYWs7CisJaWYgKGludGVuc2l0eSAmJiBjdXJyZW50X2ludGVuc2l0eSA9PSAwKSB7CisJCXNoX2RhY19lbmFibGUoREFDX0xDRF9CUklHSFRORVNTKTsKKwkJdiA9IGludyhIRDY0NDYxX0dQQkRSKTsKKwkJdiAmPSB+SEQ2NDQ2MV9HUEJEUl9MQ0RPRkY7CisJCW91dHcodiwgSEQ2NDQ2MV9HUEJEUik7CisJCXNoX2RhY19vdXRwdXQoMjU1LSh1OClpbnRlbnNpdHksIERBQ19MQ0RfQlJJR0hUTkVTUyk7CisJfSBlbHNlIGlmIChpbnRlbnNpdHkgPT0gMCAmJiBjdXJyZW50X2ludGVuc2l0eSAhPSAwKSB7CisJCXNoX2RhY19vdXRwdXQoMjU1LSh1OClpbnRlbnNpdHksIERBQ19MQ0RfQlJJR0hUTkVTUyk7CisJCXNoX2RhY19kaXNhYmxlKERBQ19MQ0RfQlJJR0hUTkVTUyk7CisJCXYgPSBpbncoSEQ2NDQ2MV9HUEJEUik7CisJCXYgfD0gSEQ2NDQ2MV9HUEJEUl9MQ0RPRkY7CisJCW91dHcodiwgSEQ2NDQ2MV9HUEJEUik7CisJfSBlbHNlIGlmIChpbnRlbnNpdHkpIHsKKwkJc2hfZGFjX291dHB1dCgyNTUtKHU4KWludGVuc2l0eSwgREFDX0xDRF9CUklHSFRORVNTKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxfbG9jaywgZmxhZ3MpOworCisJY3VycmVudF9pbnRlbnNpdHkgPSBpbnRlbnNpdHk7CiB9CiAKKwogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBocDY4MGJsX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIHUzMiBsZXZlbCkKK3N0YXRpYyBpbnQgaHA2ODBibF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWlmIChsZXZlbCA9PSBTVVNQRU5EX1BPV0VSX0RPV04pCi0JCWhwNjgwYmxfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOKTsKKwlocDY4MGJsX3N1c3BlbmRlZCA9IDE7CisJaHA2ODBibF9zZW5kX2ludGVuc2l0eShocDY4MF9iYWNrbGlnaHRfZGV2aWNlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBocDY4MGJsX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3N0YXRpYyBpbnQgaHA2ODBibF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWlmIChsZXZlbCA9PSBSRVNVTUVfUE9XRVJfT04pCi0JCWhwNjgwYmxfYmxhbmsoRkJfQkxBTktfVU5CTEFOSyk7CisJaHA2ODBibF9zdXNwZW5kZWQgPSAwOworCWhwNjgwYmxfc2VuZF9pbnRlbnNpdHkoaHA2ODBfYmFja2xpZ2h0X2RldmljZSk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpAQCAtOTIsMjQgKzg0LDkgQEAKICNkZWZpbmUgaHA2ODBibF9yZXN1bWUJTlVMTAogI2VuZGlmCiAKLQotc3RhdGljIGludCBocDY4MGJsX3NldF9wb3dlcihzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsIGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgaHA2ODBibF9zZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQlocDY4MGJsX2JsYW5rKHN0YXRlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBocDY4MGJsX2dldF9wb3dlcihzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCi17Ci0JcmV0dXJuIGhwNjgwYmxfcG93ZXJtb2RlOwotfQotCi1zdGF0aWMgaW50IGhwNjgwYmxfc2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsIGludCBpbnRlbnNpdHkpCi17Ci0JaWYgKGludGVuc2l0eSA+IEhQNjgwX01BWF9JTlRFTlNJVFkpCi0JCWludGVuc2l0eSA9IEhQNjgwX01BWF9JTlRFTlNJVFk7Ci0JaHA2ODBibF9zZW5kX2ludGVuc2l0eShpbnRlbnNpdHkpOwotCWN1cnJlbnRfaW50ZW5zaXR5ID0gaW50ZW5zaXR5OworCWhwNjgwYmxfc2VuZF9pbnRlbnNpdHkoYmQpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjAsNjUgKzk3LDY3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgaHA2ODBibF9kYXRhID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuZ2V0X3Bvd2VyICAgICAgPSBocDY4MGJsX2dldF9wb3dlciwKLQkuc2V0X3Bvd2VyICAgICAgPSBocDY4MGJsX3NldF9wb3dlciwKIAkubWF4X2JyaWdodG5lc3MgPSBIUDY4MF9NQVhfSU5URU5TSVRZLAogCS5nZXRfYnJpZ2h0bmVzcyA9IGhwNjgwYmxfZ2V0X2ludGVuc2l0eSwKLQkuc2V0X2JyaWdodG5lc3MgPSBocDY4MGJsX3NldF9pbnRlbnNpdHksCisJLnVwZGF0ZV9zdGF0dXMgID0gaHA2ODBibF9zZXRfaW50ZW5zaXR5LAogfTsKIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpocDY4MF9iYWNrbGlnaHRfZGV2aWNlOwotCi1zdGF0aWMgaW50IF9faW5pdCBocDY4MGJsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGhwNjgwYmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWhwNjgwX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyICgiaHA2ODAtYmwiLAogCQlOVUxMLCAmaHA2ODBibF9kYXRhKTsKIAlpZiAoSVNfRVJSIChocDY4MF9iYWNrbGlnaHRfZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIgKGhwNjgwX2JhY2tsaWdodF9kZXZpY2UpOwogCi0JaHA2ODBibF9zZXRfaW50ZW5zaXR5KE5VTEwsIEhQNjgwX0RFRkFVTFRfSU5URU5TSVRZKTsKKwlocDY4MF9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy0+YnJpZ2h0bmVzcyA9IEhQNjgwX0RFRkFVTFRfSU5URU5TSVRZOworCWhwNjgwYmxfc2VuZF9pbnRlbnNpdHkoaHA2ODBfYmFja2xpZ2h0X2RldmljZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBocDY4MGJsX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGhwNjgwYmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoaHA2ODBfYmFja2xpZ2h0X2RldmljZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGhwNjgwYmxfZHJpdmVyID0gewotCS5uYW1lCQk9ICJocDY4MC1ibCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBocDY4MGJsX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaHA2ODBibF9wcm9iZSwKIAkucmVtb3ZlCQk9IGhwNjgwYmxfcmVtb3ZlLAogCS5zdXNwZW5kCT0gaHA2ODBibF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gaHA2ODBibF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImhwNjgwLWJsIiwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaHA2ODBibF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiaHA2ODAtYmwiLAotCS5pZAk9IC0xLAotfTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpocDY4MGJsX2RldmljZTsKIAogc3RhdGljIGludCBfX2luaXQgaHA2ODBibF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldD1kcml2ZXJfcmVnaXN0ZXIoJmhwNjgwYmxfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmhwNjgwYmxfZHJpdmVyKTsKIAlpZiAoIXJldCkgewotCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmhwNjgwYmxfZGV2aWNlKTsKLQkJaWYgKHJldCkKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZocDY4MGJsX2RyaXZlcik7CisJCWhwNjgwYmxfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJocDY4MC1ibCIsIC0xKTsKKwkJaWYgKCFocDY4MGJsX2RldmljZSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoaHA2ODBibF9kZXZpY2UpOworCisJCWlmIChyZXQpIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQoaHA2ODBibF9kZXZpY2UpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhwNjgwYmxfZHJpdmVyKTsKKwkJfQogCX0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaHA2ODBibF9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmhwNjgwYmxfZGV2aWNlKTsKLSAJZHJpdmVyX3VucmVnaXN0ZXIoJmhwNjgwYmxfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihocDY4MGJsX2RldmljZSk7CisgCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZocDY4MGJsX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGhwNjgwYmxfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCmluZGV4IDg2OTA4YTYuLmJjOGFiMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCkBAIC0zMSwxMiArMzEsMTUgQEAKIAogc3RhdGljIHNzaXplX3QgbGNkX3N0b3JlX3Bvd2VyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWludCByYywgcG93ZXI7CisJaW50IHJjID0gLUVOWElPOwogCWNoYXIgKmVuZHA7CiAJc3RydWN0IGxjZF9kZXZpY2UgKmxkID0gdG9fbGNkX2RldmljZShjZGV2KTsKKwlpbnQgcG93ZXIgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKKwlzaXplX3Qgc2l6ZSA9IGVuZHAgLSBidWY7CiAKLQlwb3dlciA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOwotCWlmICgqZW5kcCAmJiAhaXNzcGFjZSgqZW5kcCkpCisJaWYgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCQlzaXplKys7CisJaWYgKHNpemUgIT0gY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZG93bigmbGQtPnNlbSk7CkBAIC00NCw4ICs0Nyw3IEBACiAJCXByX2RlYnVnKCJsY2Q6IHNldCBwb3dlciB0byAlZFxuIiwgcG93ZXIpOwogCQlsZC0+cHJvcHMtPnNldF9wb3dlcihsZCwgcG93ZXIpOwogCQlyYyA9IGNvdW50OwotCX0gZWxzZQotCQlyYyA9IC1FTlhJTzsKKwl9CiAJdXAoJmxkLT5zZW0pOwogCiAJcmV0dXJuIHJjOwpAQCAtNTMsMTQgKzU1LDEyIEBACiAKIHN0YXRpYyBzc2l6ZV90IGxjZF9zaG93X2NvbnRyYXN0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVOWElPOwogCXN0cnVjdCBsY2RfZGV2aWNlICpsZCA9IHRvX2xjZF9kZXZpY2UoY2Rldik7CiAKIAlkb3duKCZsZC0+c2VtKTsKIAlpZiAobGlrZWx5KGxkLT5wcm9wcyAmJiBsZC0+cHJvcHMtPmdldF9jb250cmFzdCkpCiAJCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgbGQtPnByb3BzLT5nZXRfY29udHJhc3QobGQpKTsKLQllbHNlCi0JCXJjID0gLUVOWElPOwogCXVwKCZsZC0+c2VtKTsKIAogCXJldHVybiByYzsKQEAgLTY4LDEyICs2OCwxNSBAQAogCiBzdGF0aWMgc3NpemVfdCBsY2Rfc3RvcmVfY29udHJhc3Qoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JaW50IHJjLCBjb250cmFzdDsKKwlpbnQgcmMgPSAtRU5YSU87CiAJY2hhciAqZW5kcDsKIAlzdHJ1Y3QgbGNkX2RldmljZSAqbGQgPSB0b19sY2RfZGV2aWNlKGNkZXYpOworCWludCBjb250cmFzdCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOworCXNpemVfdCBzaXplID0gZW5kcCAtIGJ1ZjsKIAotCWNvbnRyYXN0ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7Ci0JaWYgKCplbmRwICYmICFpc3NwYWNlKCplbmRwKSkKKwlpZiAoKmVuZHAgJiYgaXNzcGFjZSgqZW5kcCkpCisJCXNpemUrKzsKKwlpZiAoc2l6ZSAhPSBjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkb3duKCZsZC0+c2VtKTsKQEAgLTgxLDggKzg0LDcgQEAKIAkJcHJfZGVidWcoImxjZDogc2V0IGNvbnRyYXN0IHRvICVkXG4iLCBjb250cmFzdCk7CiAJCWxkLT5wcm9wcy0+c2V0X2NvbnRyYXN0KGxkLCBjb250cmFzdCk7CiAJCXJjID0gY291bnQ7Ci0JfSBlbHNlCi0JCXJjID0gLUVOWElPOworCX0KIAl1cCgmbGQtPnNlbSk7CiAKIAlyZXR1cm4gcmM7CkBAIC05MCwxNCArOTIsMTIgQEAKIAogc3RhdGljIHNzaXplX3QgbGNkX3Nob3dfbWF4X2NvbnRyYXN0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVOWElPOwogCXN0cnVjdCBsY2RfZGV2aWNlICpsZCA9IHRvX2xjZF9kZXZpY2UoY2Rldik7CiAKIAlkb3duKCZsZC0+c2VtKTsKIAlpZiAobGlrZWx5KGxkLT5wcm9wcykpCiAJCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgbGQtPnByb3BzLT5tYXhfY29udHJhc3QpOwotCWVsc2UKLQkJcmMgPSAtRU5YSU87CiAJdXAoJmxkLT5zZW0pOwogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZmJpbWdibHQuYyBiL2RyaXZlcnMvdmlkZW8vY2ZiaW1nYmx0LmMKaW5kZXggOTEwZTIzMy4uOGJhNjE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jZmJpbWdibHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NmYmltZ2JsdC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAogCQl3aGlsZSAoai0tKSB7CiAJCQlsLS07Ci0JCQljb2xvciA9ICgqcyAmIDEgPDwgKEZCX0JJVF9OUihsKSkpID8gZmdjb2xvciA6IGJnY29sb3I7CisJCQljb2xvciA9ICgqcyAmICgxIDw8IGwpKSA/IGZnY29sb3IgOiBiZ2NvbG9yOwogCQkJdmFsIHw9IEZCX1NISUZUX0hJR0goY29sb3IsIHNoaWZ0KTsKIAkJCQogCQkJLyogRGlkIHRoZSBiaXRzaGlmdCBzcGlsbCBiaXRzIHRvIHRoZSBuZXh0IGxvbmc/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDA0MWQwNjkuLjQ3YmExYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC00NjYsNyArNDY2LDcgQEAKIAlpbnQgaSwgajsKIAogCWlmICghdGhpc19vcHQgfHwgISp0aGlzX29wdCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAxOwogCiAJd2hpbGUgKChvcHRpb25zID0gc3Ryc2VwKCZ0aGlzX29wdCwgIiwiKSkgIT0gTlVMTCkgewogCQlpZiAoIXN0cm5jbXAob3B0aW9ucywgImZvbnQ6IiwgNSkpCkBAIC00ODEsMTAgKzQ4MSwxMCBAQAogCQkJCQlvcHRpb25zKys7CiAJCQkJfQogCQkJCWlmICgqb3B0aW9ucyAhPSAnLCcpCi0JCQkJCXJldHVybiAwOworCQkJCQlyZXR1cm4gMTsKIAkJCQlvcHRpb25zKys7CiAJCQl9IGVsc2UKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gMTsKIAkJfQogCQkKIAkJaWYgKCFzdHJuY21wKG9wdGlvbnMsICJtYXA6IiwgNCkpIHsKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCQkJCQljb24yZmJfbWFwX2Jvb3RbaV0gPQogCQkJCQkJKG9wdGlvbnNbaisrXS0nMCcpICUgRkJfTUFYOwogCQkJCX0KLQkJCXJldHVybiAwOworCQkJcmV0dXJuIDE7CiAJCX0KIAogCQlpZiAoIXN0cm5jbXAob3B0aW9ucywgInZjOiIsIDMpKSB7CkBAIC01MTgsNyArNTE4LDcgQEAKIAkJCQlyb3RhdGUgPSAwOwogCQl9CiAJfQotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBfX3NldHVwKCJmYmNvbj0iLCBmYl9jb25zb2xlX3NldHVwKTsKQEAgLTExNDIsNiArMTE0Miw3IEBACiAJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKIAl9CiAKKwlvcHMtPnAgPSAmZmJfZGlzcGxheVtmZ19jb25zb2xlXTsKIH0KIAogc3RhdGljIHZvaWQgZmJjb25fZGVpbml0KHN0cnVjdCB2Y19kYXRhICp2YykKQEAgLTE3NDQsNyArMTc0NSw3IEBACiAJCQkJCWZiY29uX3JlZHJhd19tb3ZlKHZjLCBwLCAwLCB0LCBjb3VudCk7CiAJCQkJeXBhbl91cF9yZWRyYXcodmMsIHQsIGNvdW50KTsKIAkJCQlpZiAodmMtPnZjX3Jvd3MgLSBiID4gMCkKLQkJCQkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIGIgLSBjb3VudCwKKwkJCQkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIGIsCiAJCQkJCQkJICB2Yy0+dmNfcm93cyAtIGIsIGIpOwogCQkJfSBlbHNlCiAJCQkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIHQgKyBjb3VudCwgYiAtIHQgLSBjb3VudCwgdCk7CkBAIC0yNjMwLDcgKzI2MzEsNyBAQAogCQkJCQlzY3JfbWVtY3B5dygodTE2ICopIHEsICh1MTYgKikgcCwKIAkJCQkJCSAgICB2Yy0+dmNfc2l6ZV9yb3cpOwogCQkJCX0KLQkJCQlzb2Z0YmFja19pbiA9IHA7CisJCQkJc29mdGJhY2tfaW4gPSBzb2Z0YmFja19jdXJyID0gcDsKIAkJCQl1cGRhdGVfcmVnaW9uKHZjLCB2Yy0+dmNfb3JpZ2luLAogCQkJCQkgICAgICBsb2dvX2xpbmVzICogdmMtPnZjX2NvbHMpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvcmUuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb3JlLmMKaW5kZXggZDYwNDFlNy4uNzRhYzJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29yZS5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAlpZiAoc3RyKQogCQlzdHJsY3B5IChkZWZhdWx0X3N0aV9wYXRoLCBzdHIsIHNpemVvZiAoZGVmYXVsdF9zdGlfcGF0aCkpOwogCQotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiAvKglBc3N1bWluZyB0aGUgbWFjaGluZSBoYXMgbXVsdGlwbGUgU1RJIGNvbnNvbGVzICg9Z3JhcGhpYyBjYXJkcykgd2hpY2gKQEAgLTMyMSw3ICszMjEsNyBAQAogCQlpKys7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qCVRoZSBvcHRpb25hbCBsaW51eCBrZXJuZWwgcGFyYW1ldGVyICJzdGlfZm9udCIgZGVmaW5lcyB3aGljaCBmb250CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggYjFhOGRjYS4uMzcyYWExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtNDM1LDYgKzQzNSwxMSBAQAogCQkJZGVwdGggPSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoOwogCX0KIAorCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1IpIHsKKwkJLyogYXNzdW1lIGNvbnNvbGUgY29sb3JtYXAgKi8KKwkJZGVwdGggPSA0OworCX0KKwogCWlmIChkZXB0aCA+PSA4KSB7CiAJCXN3aXRjaCAoaW5mby0+Zml4LnZpc3VhbCkgewogCQljYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6CkBAIC02NjksMTMgKzY3NCwxOSBAQAogCQl0b3RhbF9zaXplID0gaW5mby0+Zml4LnNtZW1fbGVuOwogCiAJaWYgKHAgPiB0b3RhbF9zaXplKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FRkJJRzsKIAotCWlmIChjb3VudCA+PSB0b3RhbF9zaXplKQorCWlmIChjb3VudCA+IHRvdGFsX3NpemUpIHsKKwkJZXJyID0gLUVGQklHOwogCQljb3VudCA9IHRvdGFsX3NpemU7CisJfQogCi0JaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpCisJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpIHsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSAtRU5PU1BDOworCiAJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CisJfQogCiAJYnVmZmVyID0ga21hbGxvYygoY291bnQgPiBQQUdFX1NJWkUpID8gUEFHRV9TSVpFIDogY291bnQsCiAJCQkgR0ZQX0tFUk5FTCk7CkBAIC03MTcsNyArNzI4LDcgQEAKIAogCWtmcmVlKGJ1ZmZlcik7CiAKLQlyZXR1cm4gKGVycikgPyBlcnIgOiBjbnQ7CisJcmV0dXJuIChjbnQpID8gY250IDogZXJyOwogfQogCiAjaWZkZWYgQ09ORklHX0tNT0QKQEAgLTE1ODgsNyArMTU5OSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoInZpZGVvPSIsIHZpZGVvX3NldHVwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwppbmRleCBiNzJiMDUyLi4zNGUwNzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwpAQCAtMzA1LDk0ICszMDUsNiBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBmYl9pbmZvLT5maXgubGluZV9sZW5ndGgpOwogfQogCi0vKiBGb3JtYXQgZm9yIGNtYXAgaXMgIiUwMnglYyU0eCU0eCU0eFxuIiAqLwotLyogJTAyeCBlbnRyeSAlYyB0cmFuc3AgJTR4IHJlZCAlNHggYmx1ZSAlNHggZ3JlZW4gXG4gKi8KLS8qIDI1NiByb3dzIGF0IDE2IGNoYXJzIGVxdWFscyA0MDk2LCB0aGUgbm9ybWFsIHBhZ2Ugc2l6ZSAqLwotLyogdGhlIGNvZGUgd2lsbCBhdXRvbWF0aWNhbGx5IGFkanVzdCBmb3IgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMgKi8KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2NtYXAoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2aWNlLCBjb25zdCBjaGFyICpidWYsCi0JCQkgIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2RldmljZSk7Ci0JaW50IHJjLCBpLCBzdGFydCwgbGVuZ3RoLCB0cmFuc3AgPSAwOwotCi0JaWYgKChjb3VudCA+IFBBR0VfU0laRSkgfHwgKChjb3VudCAlIDE2KSAhPSAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWZiX2luZm8tPmZib3BzLT5mYl9zZXRjb2xyZWcgJiYgIWZiX2luZm8tPmZib3BzLT5mYl9zZXRjbWFwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNzY2FuZihidWYsICIlMDJ4IiwgJnN0YXJ0KTsKLQlsZW5ndGggPSBjb3VudCAvIDE2OwotCi0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotCQlpZiAoYnVmW2kgKiAxNiArIDJdICE9ICcgJykKLQkJCXRyYW5zcCA9IDE7Ci0KLQkvKiBJZiB3ZSBjYW4gYmF0Y2gsIGRvIGl0ICovCi0JaWYgKGZiX2luZm8tPmZib3BzLT5mYl9zZXRjbWFwICYmIGxlbmd0aCA+IDEpIHsKLQkJc3RydWN0IGZiX2NtYXAgdW1hcDsKLQotCQltZW1zZXQoJnVtYXAsIDAsIHNpemVvZih1bWFwKSk7Ci0JCWlmICgocmMgPSBmYl9hbGxvY19jbWFwKCZ1bWFwLCBsZW5ndGgsIHRyYW5zcCkpKQotCQkJcmV0dXJuIHJjOwotCi0JCXVtYXAuc3RhcnQgPSBzdGFydDsKLQkJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCQlzc2NhbmYoJmJ1ZltpICogMTYgKyAgM10sICIlNGh4IiwgJnVtYXAucmVkW2ldKTsKLQkJCXNzY2FuZigmYnVmW2kgKiAxNiArICA3XSwgIiU0aHgiLCAmdW1hcC5ibHVlW2ldKTsKLQkJCXNzY2FuZigmYnVmW2kgKiAxNiArIDExXSwgIiU0aHgiLCAmdW1hcC5ncmVlbltpXSk7Ci0JCQlpZiAodHJhbnNwKQotCQkJCXVtYXAudHJhbnNwW2ldID0gKGJ1ZltpICogMTYgKyAgMl0gIT0gJyAnKTsKLQkJfQotCQlyYyA9IGZiX2luZm8tPmZib3BzLT5mYl9zZXRjbWFwKCZ1bWFwLCBmYl9pbmZvKTsKLQkJZmJfY29weV9jbWFwKCZ1bWFwLCAmZmJfaW5mby0+Y21hcCk7Ci0JCWZiX2RlYWxsb2NfY21hcCgmdW1hcCk7Ci0KLQkJcmV0dXJuIHJjID86IGNvdW50OwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJdTE2IHJlZCwgYmx1ZSwgZ3JlZW4sIHRzcDsKLQotCQlzc2NhbmYoJmJ1ZltpICogMTYgKyAgM10sICIlNGh4IiwgJnJlZCk7Ci0JCXNzY2FuZigmYnVmW2kgKiAxNiArICA3XSwgIiU0aHgiLCAmYmx1ZSk7Ci0JCXNzY2FuZigmYnVmW2kgKiAxNiArIDExXSwgIiU0aHgiLCAmZ3JlZW4pOwotCQl0c3AgPSAoYnVmW2kgKiAxNiArICAyXSAhPSAnICcpOwotCQlpZiAoKHJjID0gZmJfaW5mby0+ZmJvcHMtPmZiX3NldGNvbHJlZyhzdGFydCsrLAotCQkJCSAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIHRzcCwgZmJfaW5mbykpKQotCQkJcmV0dXJuIHJjOwotCi0JCWZiX2luZm8tPmNtYXAucmVkW2ldID0gcmVkOwotCQlmYl9pbmZvLT5jbWFwLmJsdWVbaV0gPSBibHVlOwotCQlmYl9pbmZvLT5jbWFwLmdyZWVuW2ldID0gZ3JlZW47Ci0JCWlmICh0cmFuc3ApCi0JCQlmYl9pbmZvLT5jbWFwLnRyYW5zcFtpXSA9IHRzcDsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2NtYXAoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2aWNlLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXZpY2UpOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKCFmYl9pbmZvLT5jbWFwLnJlZCB8fCAhZmJfaW5mby0+Y21hcC5ibHVlIHx8Ci0JICAgIWZiX2luZm8tPmNtYXAuZ3JlZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGZiX2luZm8tPmNtYXAubGVuID4gUEFHRV9TSVpFIC8gMTYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogZG9uJ3QgbWVzcyB3aXRoIHRoZSBmb3JtYXQsIHRoZSBidWZmZXIgaXMgUEFHRV9TSVpFICovCi0JLyogMjU2IGVudHJpZXMgYXQgMTYgY2hhcnMgcGVyIGxpbmUgZXF1YWxzIDQwOTYgPSBQQUdFX1NJWkUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZmJfaW5mby0+Y21hcC5sZW47IGkrKykgewotCQlzbnByaW50ZigmYnVmWyBpICogMTZdLCBQQUdFX1NJWkUgLSBpICogMTYsICIlMDJ4JWMlNHglNHglNHhcbiIsIGkgKyBmYl9pbmZvLT5jbWFwLnN0YXJ0LAotCQkJKChmYl9pbmZvLT5jbWFwLnRyYW5zcCAmJiBmYl9pbmZvLT5jbWFwLnRyYW5zcFtpXSkgPyAnKicgOiAnICcpLAotCQkJZmJfaW5mby0+Y21hcC5yZWRbaV0sIGZiX2luZm8tPmNtYXAuYmx1ZVtpXSwKLQkJCWZiX2luZm8tPmNtYXAuZ3JlZW5baV0pOwotCX0KLQlyZXR1cm4gMTYgKiBmYl9pbmZvLT5jbWFwLmxlbjsKLX0KLQogc3RhdGljIHNzaXplX3Qgc3RvcmVfYmxhbmsoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2aWNlLCBjb25zdCBjaGFyICogYnVmLAogCQkJICAgc2l6ZV90IGNvdW50KQogewpAQCAtNTAyLDEwICs0MTQsMTIgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZmJfaW5mby0+c3RhdGUpOwogfQogCisvKiBXaGVuIGNtYXAgaXMgYWRkZWQgYmFjayBpbiBpdCBzaG91bGQgYmUgYSBiaW5hcnkgYXR0cmlidXRlCisgKiBub3QgYSB0ZXh0IG9uZS4gQ29uc2lkZXJhdGlvbiBzaG91bGQgYWxzbyBiZSBnaXZlbiB0byBjb252ZXJ0aW5nCisgKiBmYmRldiB0byB1c2UgY29uZmlnZnMgaW5zdGVhZCBvZiBzeXNmcyAqLwogc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGNsYXNzX2RldmljZV9hdHRyc1tdID0gewogCV9fQVRUUihiaXRzX3Blcl9waXhlbCwgU19JUlVHT3xTX0lXVVNSLCBzaG93X2JwcCwgc3RvcmVfYnBwKSwKIAlfX0FUVFIoYmxhbmssIFNfSVJVR098U19JV1VTUiwgc2hvd19ibGFuaywgc3RvcmVfYmxhbmspLAotCV9fQVRUUihjb2xvcl9tYXAsIFNfSVJVR098U19JV1VTUiwgc2hvd19jbWFwLCBzdG9yZV9jbWFwKSwKIAlfX0FUVFIoY29uc29sZSwgU19JUlVHT3xTX0lXVVNSLCBzaG93X2NvbnNvbGUsIHN0b3JlX2NvbnNvbGUpLAogCV9fQVRUUihjdXJzb3IsIFNfSVJVR098U19JV1VTUiwgc2hvd19jdXJzb3IsIHN0b3JlX2N1cnNvciksCiAJX19BVFRSKG1vZGUsIFNfSVJVR098U19JV1VTUiwgc2hvd19tb2RlLCBzdG9yZV9tb2RlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwppbmRleCA3ODgyOTdlLi40NGFhMmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCkBAIC03Niw4ICs3Niw4IEBACiAgKgogICogRXhwZXJpbWVudCB3aXRoIHZfb2Zmc2V0IHRvIGZpbmQgb3V0IHdoaWNoIHdvcmtzIGJlc3QgZm9yIHlvdS4KICAqLwotc3RhdGljIHUzMiB2X29mZnNldF9kZWZhdWx0IF9faW5pdGRhdGE7IC8qIEZvciAzMiBNaUIgQXBlciBzaXplLCA4IHNob3VsZCBiZSB0aGUgZGVmYXVsdCAqLwotc3RhdGljIHUzMiB2b2Zmc2V0ICAgICAgICAgIF9faW5pdGRhdGEgPSAwOworc3RhdGljIHUzMiB2X29mZnNldF9kZWZhdWx0IF9fZGV2aW5pdGRhdGE7IC8qIEZvciAzMiBNaUIgQXBlciBzaXplLCA4IHNob3VsZCBiZSB0aGUgZGVmYXVsdCAqLworc3RhdGljIHUzMiB2b2Zmc2V0ICAgICAgICAgIF9fZGV2aW5pdGRhdGE7CiAKIHN0YXRpYyBpbnQgaTgxMGZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKTsKIHN0YXRpYyBpbnQgIF9fZGV2aW5pdCBpODEwZmJfaW5pdF9wY2kgKHN0cnVjdCBwY2lfZGV2ICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2xvZ28vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vTWFrZWZpbGUKaW5kZXggNGVmNWNkMS4uYjk4NWRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9sb2dvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vbG9nby9NYWtlZmlsZQpAQCAtMzQsNyArMzQsNyBAQAogZXh0cmEteSArPSAkKGNhbGwgbG9nby1jZmlsZXMsX2dyYXkyNTYscGdtKQogCiAjIENyZWF0ZSBjb21tYW5kcyBsaWtlICJwbm10b2xvZ28gLXQgbW9ubyAtbiBsb2dvX21hY19tb25vIC1vIC4uLiIKLXF1aWV0X2NtZF9sb2dvID0gTE9HTwkkQAorcXVpZXRfY21kX2xvZ28gPSBMT0dPICAgICRACiAJY21kX2xvZ28gPSBzY3JpcHRzL3BubXRvbG9nbyBcCiAJCQktdCAkKHBhdHN1YnN0ICQqXyUsJSwkKG5vdGRpciAkKGJhc2VuYW1lICQ8KSkpIFwKIAkJCS1uICQobm90ZGlyICQoYmFzZW5hbWUgJDwpKSAtbyAkQCAkPApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmMKaW5kZXggODA3M2E3My4uNDQwMjcyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jCkBAIC0zMTYsMTQgKzMxNiwyNCBAQAogCQljYXNlIE1fUElYRUxfUExMX0I6CiAJCWNhc2UgTV9QSVhFTF9QTExfQzoKIAkJCXsKLQkJCQl1X2ludDhfdCB0bXA7CisJCQkJdV9pbnQ4X3QgdG1wLCB4cHdyY3RybDsKIAkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQkJCQogCQkJCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOworCisJCQkJeHB3cmN0cmwgPSBtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQV1JDVFJMKTsKKwkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUFdSQ1RSTCwgeHB3cmN0cmwgJiB+TTEwNjRfWFBXUkNUUkxfUEFORUxQRE4pOworCQkJCW1nYV9vdXRiKE1fU0VRX0lOREVYLCBNX1NFUTEpOworCQkJCW1nYV9vdXRiKE1fU0VRX0RBVEEsIG1nYV9pbmIoTV9TRVFfREFUQSkgfCBNX1NFUTFfU0NST0ZGKTsKIAkJCQl0bXAgPSBtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhDTEtDVFJMKTsKKwkJCQl0bXAgfD0gTTEwNjRfWFBJWENMS0NUUkxfRElTOwogCQkJCWlmICghKHRtcCAmIE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUCkpIHsKLQkJCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwsIHRtcCB8IE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUCk7CisJCQkJCXRtcCB8PSBNMTA2NF9YUElYQ0xLQ1RSTF9QTExfVVA7CiAJCQkJfQorCQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQSVhDTEtDVFJMLCB0bXApOworCQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hEVklDTEtDVFJMLCAwKTsKKwkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUFdSQ1RSTCwgeHB3cmN0cmwpOworCiAJCQkJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIAkJCX0KIAkJCXsKQEAgLTQxOCw2ICs0MjgsMTUgQEAKIAkJCQkgICBmcmVxdWVuY3kgdG8gaGlnaGVyIC0gd2l0aCA8PSBsb3dlc3Qgd2lucywgd2hpbGUKIAkJCQkgICB3aXRoIDwgaGlnaGVzdCBvbmUgd2lucyAqLwogCQkJCWlmIChkZWx0YSA8PSBkZWx0YWFycmF5W2lkeC0xXSkgeworCQkJCQkvKiBhbGwgZWxzZSBiZWluZyBlcXVhbCBleGNlcHQgVkNPLAorCQkJCQkgKiBjaG9vc2UgVkNPIG5vdCBuZWFyICh3aXRoaW4gMS8xNnRoIG9yIHNvKSBWQ09taW4KKwkJCQkJICogKGZyZXFzIG5lYXIgVkNPbWluIGFyZW4ndCBhcyBzdGFibGUpCisJCQkJCSAqLworCQkJCQlpZiAoZGVsdGEgPT0gZGVsdGFhcnJheVtpZHgtMV0KKwkJCQkJICAgICYmIHZjbyAhPSBnNDUwX21ucDJ2Y28oUE1JTkZPIG1ucGFycmF5W2lkeC0xXSkKKwkJCQkJICAgICYmIHZjbyA8IChwaS0+dmNvbWluICogMTcgLyAxNikpIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CiAJCQkJCW1ucGFycmF5W2lkeF0gPSBtbnBhcnJheVtpZHgtMV07CiAJCQkJCWRlbHRhYXJyYXlbaWR4XSA9IGRlbHRhYXJyYXlbaWR4LTFdOwogCQkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmggYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmgKaW5kZXggMmU3MjM4YS4uNTY1MTNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBNMTA2NF9YQ1VSQ09MMVJFRAkweDBDCiAjZGVmaW5lIE0xMDY0X1hDVVJDT0wxR1JFRU4JMHgwRAogI2RlZmluZSBNMTA2NF9YQ1VSQ09MMUJMVUUJMHgwRQorI2RlZmluZSBNMTA2NF9YRFZJQ0xLQ1RSTAkweDBGCiAjZGVmaW5lIE0xMDY0X1hDVVJDT0wyUkVECTB4MTAKICNkZWZpbmUgTTEwNjRfWENVUkNPTDJHUkVFTgkweDExCiAjZGVmaW5lIE0xMDY0X1hDVVJDT0wyQkxVRQkweDEyCkBAIC0xNDQsNiArMTQ1LDcgQEAKICNkZWZpbmUgTTEwNjRfWFZJRFBMTE4JCTB4OEYKIAogI2RlZmluZSBNMTA2NF9YUFdSQ1RSTAkJMHhBMAorI2RlZmluZSAgICAgTTEwNjRfWFBXUkNUUkxfUEFORUxQRE4JMHgwNAogCiAjZGVmaW5lIE0xMDY0X1hQQU5NT0RFCQkweEEyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaAppbmRleCAzYTNlMTgwLi5iNzE3MzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oCkBAIC02NzIsNiArNjcyLDggQEAKIAogI2RlZmluZSBNX1NFUV9JTkRFWAkweDFGQzQKICNkZWZpbmUgTV9TRVFfREFUQQkweDFGQzUKKyNkZWZpbmUgICAgIE1fU0VRMQkJMHgwMQorI2RlZmluZSAgICAgICAgTV9TRVExX1NDUk9GRgkJMHgyMAogCiAjZGVmaW5lIE1fTUlTQ19SRUdfUkVBRAkweDFGQ0MKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXhpbmVmYi5jIGIvZHJpdmVycy92aWRlby9tYXhpbmVmYi5jCmluZGV4IDc0M2U3YWQuLmY4NTQyMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF4aW5lZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21heGluZWZiLmMKQEAgLTU1LDcgKzU1LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gbWF4aW5lZmJfZml4ID0gewotCS5pZCA9CQkiTWF4aW5lIG9uYm9hcmQgZ3JhcGhpY3MgMTAyNHg3Njh4OCIsCisJLmlkID0JCSJNYXhpbmUiLAogCS5zbWVtX2xlbiA9CSgxMDI0Kjc2OCksCiAJLnR5cGUgPQkJRkJfVFlQRV9QQUNLRURfUElYRUxTLAogCS52aXN1YWwgPQlGQl9WSVNVQUxfUFNFVURPQ09MT1IsCkBAIC0xMDcsOCArMTA3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgbWF4aW5lZmJfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuZmJfZ2V0X2ZpeAk9IGdlbl9nZXRfZml4LAotCS5mYl9nZXRfdmFyCT0gZ2VuX2dldF92YXIsCiAJLmZiX3NldGNvbHJlZwk9IG1heGluZWZiX3NldGNvbHJlZywKIAkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbTJmYi5jIGIvZHJpdmVycy92aWRlby9wbTJmYi5jCmluZGV4IDVmZTE5NzkuLjRlOTYzOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG0yZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtMmZiLmMKQEAgLTczLDggKzczLDggQEAKICAqIHRoZXNlIGZsYWdzIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhhdCByZXF1ZXN0cyBmb3IgK3ZlIHN5bmMKICAqIHNob3VsZCBiZSBzaWxlbnRseSB0dXJuZWQgaW4gLXZlIHN5bmMuCiAgKi8KLXN0YXRpYyBpbnQgbG93aHN5bmMgX19kZXZpbml0ZGF0YSA9IDA7Ci1zdGF0aWMgaW50IGxvd3ZzeW5jIF9fZGV2aW5pdGRhdGEgPSAwOworc3RhdGljIGludCBsb3doc3luYzsKK3N0YXRpYyBpbnQgbG93dnN5bmM7CiAKIC8qCiAgKiBUaGUgaGFyZHdhcmUgc3RhdGUgb2YgdGhlIGdyYXBoaWNzIGNhcmQgdGhhdCBpc24ndCBwYXJ0IG9mIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IDUzYWQ2MWYuLjgwOWZjNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTIzMiw5ICsyMzIsOSBAQAogCWlmICh2YXItPnlyZXMgPCBNSU5fWVJFUykKIAkJdmFyLT55cmVzID0gTUlOX1lSRVM7CiAJaWYgKHZhci0+eHJlcyA+IGZiaS0+bWF4X3hyZXMpCi0JCXZhci0+eHJlcyA9IGZiaS0+bWF4X3hyZXM7CisJCXJldHVybiAtRUlOVkFMOwogCWlmICh2YXItPnlyZXMgPiBmYmktPm1heF95cmVzKQotCQl2YXItPnlyZXMgPSBmYmktPm1heF95cmVzOworCQlyZXR1cm4gLUVJTlZBTDsKIAl2YXItPnhyZXNfdmlydHVhbCA9CiAJCW1heCh2YXItPnhyZXNfdmlydHVhbCwgdmFyLT54cmVzKTsKIAl2YXItPnlyZXNfdmlydHVhbCA9CkBAIC03ODEsNyArNzgxLDcgQEAKIAlMQ0NSMCAmPSB+TENDUjBfTERNOwkvKiBFbmFibGUgTENEIERpc2FibGUgRG9uZSBJbnRlcnJ1cHQgKi8KIAlMQ0NSMCB8PSBMQ0NSMF9ESVM7CS8qIERpc2FibGUgTENEIENvbnRyb2xsZXIgKi8KIAotCXNjaGVkdWxlX3RpbWVvdXQoMjAgKiBIWiAvIDEwMDApOworCXNjaGVkdWxlX3RpbWVvdXQoMjAwICogSFogLyAxMDAwKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZmJpLT5jdHJscl93YWl0LCAmd2FpdCk7CiAKIAkvKiBkaXNhYmxlIExDRCBjb250cm9sbGVyIGNsb2NrICovCkBAIC0xMjc0LDcgKzEyNzQsNyBAQAogCXN0cnVjdCBweGFmYl9tYWNoX2luZm8gKmluZjsKIAlpbnQgcmV0OwogCi0JZGV2X2RiZyhkZXYsICJweGFmYl9wcm9iZVxuIik7CisJZGV2X2RiZygmZGV2LT5kZXYsICJweGFmYl9wcm9iZVxuIik7CiAKIAlpbmYgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JhZGVvbmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3JhZGVvbmZiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYjZjMmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy92aWRlby9yYWRlb25mYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE2NyArMCwwIEBACi0vKgotICoJZHJpdmVycy92aWRlby9yYWRlb25mYi5jCi0gKglmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIEFUSSBSYWRlb24gY2hpcHNldCB2aWRlbyBib2FyZHMKLSAqCi0gKglDb3B5cmlnaHQgMjAwMAlBbmkgSm9zaGkgPGFqb3NoaUBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICoKLSAqCi0gKglDaGFuZ2VMb2c6Ci0gKgkyMDAwLTA4LTAzCWluaXRpYWwgdmVyc2lvbiAwLjAuMQotICoJMjAwMC0wOS0xMAltb3JlIGJ1ZyBmaXhlcywgcHVibGljIHJlbGVhc2UgMC4wLjUKLSAqCTIwMDEtMDItMTkJbW9kZSBidWcgZml4ZXMsIDAuMC43Ci0gKgkyMDAxLTA3LTA1CWZpeGVkIHNjcm9sbGluZyBpc3N1ZXMsIGVuZ2luZSBpbml0aWFsaXphdGlvbiwKLSAqCQkJYW5kIG1pbm9yIG1vZGUgdHdlYWtpbmcsIDAuMC45Ci0gKgkyMDAxLTA5LTA3CVJhZGVvbiBWRSBzdXBwb3J0LCBOaWNrIEt1cnNoZXYKLSAqCQkJYmxhbmtpbmcsIHBhbl9kaXNwbGF5LCBhbmQgY21hcCBmaXhlcywgMC4xLjAKLSAqCTIwMDEtMTAtMTAJUmFkZW9uIDc1MDAgYW5kIDg1MDAgc3VwcG9ydCwgYW5kIGV4cGVyaW1lbnRhbAotICoJCQlmbGF0IHBhbmVsIHN1cHBvcnQsIDAuMS4xCi0gKgkyMDAxLTExLTE3CVJhZGVvbiBNNiAocHBjKSBzdXBwb3J0LCBEYW5pZWwgQmVybGluLCAwLjEuMgotICoJMjAwMS0xMS0xOAlERlAgZml4ZXMsIEtldmluIEhlbmRyaWNrcywgMC4xLjMKLSAqCTIwMDEtMTEtMjkJbW9yZSBjbWFwLCBiYWNrbGlnaHQgZml4ZXMsIEJlbmphbWluIEhlcnJlbnNjaG1pZHQKLSAqCTIwMDItMDEtMTgJREZQIHBhbmVsIGRldGVjdGlvbiB2aWEgQklPUywgTWljaGFlbCBDbGFyaywgMC4xLjQKLSAqCTIwMDItMDYtMDIJY29uc29sZSBzd2l0Y2hpbmcsIG1vZGUgc2V0IGZpeGVzLCBhY2NlbCBmaXhlcwotICoJMjAwMi0wNi0wMwlNVFJSIHN1cHBvcnQsIFBldGVyIEhvcnRvbiwgMC4xLjUKLSAqCTIwMDItMDktMjEJcnYyNTAsIHIzMDAsIG05IGluaXRpYWwgc3VwcG9ydCwKLSAqCQkJYWRkZWQgbWlycm9yIG9wdGlvbiwgMC4xLjYKLSAqCi0gKglTcGVjaWFsIHRoYW5rcyB0byBBVEkgRGV2UmVsIHRlYW0gZm9yIHRoZWlyIGhhcmR3YXJlIGRvbmF0aW9ucy4KLSAqCi0gKi8KLQotCi0jZGVmaW5lIFJBREVPTl9WRVJTSU9OCSIwLjEuNiIKLQotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0jaW5jbHVkZSAibWFjbW9kZXMuaCIKLQotI2lmZGVmIENPTkZJR19OVlJBTQotI2luY2x1ZGUgPGxpbnV4L252cmFtLmg+Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotI2luY2x1ZGUgPGFzbS9iYWNrbGlnaHQuaD4KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0JPT1RYX1RFWFQKLSNpbmNsdWRlIDxhc20vYnRleHQuaD4KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FEQl9QTVUKLSNpbmNsdWRlIDxsaW51eC9hZGIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbXUuaD4KLSNlbmRpZgotCi0jZW5kaWYgLyogX19wb3dlcnBjX18gKi8KLQotI2lmZGVmIENPTkZJR19NVFJSCi0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8dmlkZW8vcmFkZW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFkZW9uZmIuaD4KLQotI2RlZmluZSBERUJVRyAgMAotCi0jaWYgREVCVUcKLSNkZWZpbmUgUlRSQUNFCQlwcmludGsKLSNlbHNlCi0jZGVmaW5lIFJUUkFDRQkJaWYoMCkgcHJpbnRrCi0jZW5kaWYKLQotLy8gWFhYCi0jdW5kZWYgQ09ORklHX1BNQUNfUEJPT0sKLQotCi1lbnVtIHJhZGVvbl9jaGlwcyB7Ci0JUkFERU9OX1FELAotCVJBREVPTl9RRSwKLQlSQURFT05fUUYsCi0JUkFERU9OX1FHLAotCVJBREVPTl9RWSwKLQlSQURFT05fUVosCi0JUkFERU9OX0xXLAotCVJBREVPTl9MWCwKLQlSQURFT05fTFksCi0JUkFERU9OX0xaLAotCVJBREVPTl9RTCwKLQlSQURFT05fUU4sCi0JUkFERU9OX1FPLAotCVJBREVPTl9RbCwKLQlSQURFT05fQkIsCi0JUkFERU9OX1FXLAotCVJBREVPTl9RWCwKLQlSQURFT05fSWQsCi0JUkFERU9OX0llLAotCVJBREVPTl9JZiwKLQlSQURFT05fSWcsCi0JUkFERU9OX1lhLAotCVJBREVPTl9ZZCwKLQlSQURFT05fTGQsCi0JUkFERU9OX0xlLAotCVJBREVPTl9MZiwKLQlSQURFT05fTGcsCi0JUkFERU9OX05ELAotCVJBREVPTl9ORSwKLQlSQURFT05fTkYsCi0JUkFERU9OX05HLAotCVJBREVPTl9RTQotfTsKLQotZW51bSByYWRlb25fYXJjaCB7Ci0JUkFERU9OX1IxMDAsCi0JUkFERU9OX1JWMTAwLAotCVJBREVPTl9SMjAwLAotCVJBREVPTl9SVjIwMCwKLQlSQURFT05fUlYyNTAsCi0JUkFERU9OX1IzMDAsCi0JUkFERU9OX002LAotCVJBREVPTl9NNywKLQlSQURFT05fTTkKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2NoaXBfaW5mbyB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1bnNpZ25lZCBjaGFyIGFyY2g7Ci19IHJhZGVvbl9jaGlwX2luZm9bXSBfX2RldmluaXRkYXRhID0gewotCXsgIlFEIiwgUkFERU9OX1IxMDAgfSwKLQl7ICJRRSIsIFJBREVPTl9SMTAwIH0sCi0JeyAiUUYiLCBSQURFT05fUjEwMCB9LAotCXsgIlFHIiwgUkFERU9OX1IxMDAgfSwKLQl7ICJWRSBRWSIsIFJBREVPTl9SVjEwMCB9LAotCXsgIlZFIFFaIiwgUkFERU9OX1JWMTAwIH0sCi0JeyAiTTcgTFciLCBSQURFT05fTTcgfSwKLQl7ICJNNyBMWCIsIFJBREVPTl9NNyB9LAotCXsgIk02IExZIiwgUkFERU9OX002IH0sCi0JeyAiTTYgTFoiLCBSQURFT05fTTYgfSwKLQl7ICI4NTAwIFFMIiwgUkFERU9OX1IyMDAgfSwKLQl7ICI4NTAwIFFOIiwgUkFERU9OX1IyMDAgfSwKLQl7ICI4NTAwIFFPIiwgUkFERU9OX1IyMDAgfSwKLQl7ICI4NTAwIFFsIiwgUkFERU9OX1IyMDAgfSwKLQl7ICI4NTAwIEJCIiwgUkFERU9OX1IyMDAgfSwKLQl7ICI3NTAwIFFXIiwgUkFERU9OX1JWMjAwIH0sCi0JeyAiNzUwMCBRWCIsIFJBREVPTl9SVjIwMCB9LAotCXsgIjkwMDAgSWQiLCBSQURFT05fUlYyNTAgfSwKLQl7ICI5MDAwIEllIiwgUkFERU9OX1JWMjUwIH0sCi0JeyAiOTAwMCBJZiIsIFJBREVPTl9SVjI1MCB9LAotCXsgIjkwMDAgSWciLCBSQURFT05fUlYyNTAgfSwKLQl7ICJNOSBMZCIsIFJBREVPTl9NOSB9LAotCXsgIk05IExlIiwgUkFERU9OX005IH0sCi0JeyAiTTkgTGYiLCBSQURFT05fTTkgfSwKLQl7ICJNOSBMZyIsIFJBREVPTl9NOSB9LAotCXsgIjk3MDAgTkQiLCBSQURFT05fUjMwMCB9LAotCXsgIjk3MDAgTkUiLCBSQURFT05fUjMwMCB9LAotCXsgIjk3MDAgTkYiLCBSQURFT05fUjMwMCB9LAotCXsgIjk3MDAgTkciLCBSQURFT05fUjMwMCB9LAotCXsgIjkxMDAgUU0iLCBSQURFT05fUjIwMCB9Ci19OwotCi0KLWVudW0gcmFkZW9uX21vbnR5cGUKLXsKLQlNVF9OT05FLAotCU1UX0NSVCwJCS8qIENSVCAqLwotCU1UX0xDRCwJCS8qIExDRCAqLwotCU1UX0RGUCwJCS8qIERWSSAqLwotCU1UX0NUViwJCS8qIGNvbXBvc2l0ZSBUViAqLwotCU1UX1NUVgkJLyogUy1WaWRlbyBvdXQgKi8KLX07Ci0KLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJhZGVvbmZiX3BjaV90YWJsZVtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX1FEfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9RRX0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fUUZ9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX1FHfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9RWX0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FaLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fUVp9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MVywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX0xXfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTFgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9MWH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xZLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fTFl9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MWiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX0xafSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUwsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9RTH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FOLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fUU59LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX1FPfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUWwsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9RbH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0JCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fQkJ9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RVywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX1FXfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9RWH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0lkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fSWR9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX0llfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fSWYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9JZn0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0lnLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fSWd9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ZYSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX1lhfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fWWQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9ZZH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fTGR9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX0xlfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9MZn0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xnLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fTGd9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX05EfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9ORX0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX05GLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSQURFT05fTkZ9LAotCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUkFERU9OX05HfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUU0sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJBREVPTl9RTX0sCi0JeyAwLCB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJhZGVvbmZiX3BjaV90YWJsZSk7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXUxNiByZWc7Ci0JdTMyIHZhbDsKLX0gcmVnX3ZhbDsKLQotCi0vKiB0aGVzZSBjb21tb24gcmVncyBhcmUgY2xlYXJlZCBiZWZvcmUgbW9kZSBzZXR0aW5nIHNvIHRoZXkgZG8gbm90Ci0gKiBpbnRlcmZlcmUgd2l0aCBhbnl0aGluZwotICovCi1zdGF0aWMgcmVnX3ZhbCBjb21tb25fcmVnc1tdID0gewotCXsgT1ZSX0NMUiwgMCB9LAkKLQl7IE9WUl9XSURfTEVGVF9SSUdIVCwgMCB9LAotCXsgT1ZSX1dJRF9UT1BfQk9UVE9NLCAwIH0sCi0JeyBPVjBfU0NBTEVfQ05UTCwgMCB9LAotCXsgU1VCUElDX0NOVEwsIDAgfSwKLQl7IFZJUEhfQ09OVFJPTCwgMCB9LAotCXsgSTJDX0NOVExfMSwgMCB9LAotCXsgR0VOX0lOVF9DTlRMLCAwIH0sCi0JeyBDQVAwX1RSSUdfQ05UTCwgMCB9LAotfTsKLQotc3RhdGljIHJlZ192YWwgY29tbW9uX3JlZ3NfbTZbXSA9IHsKLQl7IE9WUl9DTFIsICAgICAgMCB9LAotCXsgT1ZSX1dJRF9MRUZUX1JJR0hULCAgIDAgfSwKLQl7IE9WUl9XSURfVE9QX0JPVFRPTSwgICAwIH0sCi0JeyBPVjBfU0NBTEVfQ05UTCwgICAwIH0sCi0JeyBTVUJQSUNfQ05UTCwgICAgICAwIH0sCi0JeyBHRU5fSU5UX0NOVEwsICAgICAwIH0sCi0JeyBDQVAwX1RSSUdfQ05UTCwgICAwIH0gCi19OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIHU4IGNsb2NrX2NoaXBfdHlwZTsKLSAgICAgICAgdTggc3RydWN0X3NpemU7Ci0gICAgICAgIHU4IGFjY2VsZXJhdG9yX2VudHJ5OwotICAgICAgICB1OCBWR0FfZW50cnk7Ci0gICAgICAgIHUxNiBWR0FfdGFibGVfb2Zmc2V0OwotICAgICAgICB1MTYgUE9TVF90YWJsZV9vZmZzZXQ7Ci0gICAgICAgIHUxNiBYQ0xLOwotICAgICAgICB1MTYgTUNMSzsKLSAgICAgICAgdTggbnVtX1BMTF9ibG9ja3M7Ci0gICAgICAgIHU4IHNpemVfUExMX2Jsb2NrczsKLSAgICAgICAgdTE2IFBDTEtfcmVmX2ZyZXE7Ci0gICAgICAgIHUxNiBQQ0xLX3JlZl9kaXZpZGVyOwotICAgICAgICB1MzIgUENMS19taW5fZnJlcTsKLSAgICAgICAgdTMyIFBDTEtfbWF4X2ZyZXE7Ci0gICAgICAgIHUxNiBNQ0xLX3JlZl9mcmVxOwotICAgICAgICB1MTYgTUNMS19yZWZfZGl2aWRlcjsKLSAgICAgICAgdTMyIE1DTEtfbWluX2ZyZXE7Ci0gICAgICAgIHUzMiBNQ0xLX21heF9mcmVxOwotICAgICAgICB1MTYgWENMS19yZWZfZnJlcTsKLSAgICAgICAgdTE2IFhDTEtfcmVmX2RpdmlkZXI7Ci0gICAgICAgIHUzMiBYQ0xLX21pbl9mcmVxOwotICAgICAgICB1MzIgWENMS19tYXhfZnJlcTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIFBMTF9CTE9DSzsKLQotCi1zdHJ1Y3QgcGxsX2luZm8gewotCWludCBwcGxsX21heDsKLQlpbnQgcHBsbF9taW47Ci0JaW50IHhjbGs7Ci0JaW50IHJlZl9kaXY7Ci0JaW50IHJlZl9jbGs7Ci19OwotCi0KLXN0cnVjdCByYW1faW5mbyB7Ci0JaW50IG1sOwotCWludCBtYjsKLQlpbnQgdHJjZDsKLQlpbnQgdHJwOwotCWludCB0d3I7Ci0JaW50IGNsOwotCWludCB0cjJ3OwotCWludCBsb29wX2xhdGVuY3k7Ci0JaW50IHJsb29wOwotfTsKLQotCi1zdHJ1Y3QgcmFkZW9uX3JlZ3MgewotCS8qIENSVEMgcmVncyAqLwotCXUzMiBjcnRjX2hfdG90YWxfZGlzcDsKLQl1MzIgY3J0Y19oX3N5bmNfc3RydF93aWQ7Ci0JdTMyIGNydGNfdl90b3RhbF9kaXNwOwotCXUzMiBjcnRjX3Zfc3luY19zdHJ0X3dpZDsKLQl1MzIgY3J0Y19waXRjaDsKLQl1MzIgY3J0Y19nZW5fY250bDsKLQl1MzIgY3J0Y19leHRfY250bDsKLQl1MzIgZGFjX2NudGw7Ci0KLQl1MzIgZmxhZ3M7Ci0JdTMyIHBpeF9jbG9jazsKLQlpbnQgeHJlcywgeXJlczsKLQotCS8qIEREQSByZWdzICovCi0JdTMyIGRkYV9jb25maWc7Ci0JdTMyIGRkYV9vbl9vZmY7Ci0KLQkvKiBQTEwgcmVncyAqLwotCXUzMiBwcGxsX2Rpdl8zOwotCXUzMiBwcGxsX3JlZl9kaXY7Ci0JdTMyIHZjbGtfZWNwX2NudGw7Ci0JCi0JLyogRmxhdCBwYW5lbCByZWdzICovCi0JdTMyIGZwX2NydGNfaF90b3RhbF9kaXNwOwotCXUzMiBmcF9jcnRjX3ZfdG90YWxfZGlzcDsKLQl1MzIgZnBfZ2VuX2NudGw7Ci0JdTMyIGZwX2hfc3luY19zdHJ0X3dpZDsKLQl1MzIgZnBfaG9yel9zdHJldGNoOwotCXUzMiBmcF9wYW5lbF9jbnRsOwotCXUzMiBmcF92X3N5bmNfc3RydF93aWQ7Ci0JdTMyIGZwX3ZlcnRfc3RyZXRjaDsKLQl1MzIgbHZkc19nZW5fY250bDsKLQl1MzIgbHZkc19wbGxfY250bDsKLQl1MzIgdG1kc19jcmM7Ci0JdTMyIHRtZHNfdHJhbnNtaXR0ZXJfY250bDsKLQotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUzMiBzdXJmYWNlX2NudGw7Ci0jZW5kaWYKLX07Ci0KLQotc3RydWN0IHJhZGVvbmZiX2luZm8gewotCXN0cnVjdCBmYl9pbmZvIGluZm87Ci0KLQlzdHJ1Y3QgcmFkZW9uX3JlZ3Mgc3RhdGU7Ci0Jc3RydWN0IHJhZGVvbl9yZWdzIGluaXRfc3RhdGU7Ci0KLQljaGFyIG5hbWVbMzJdOwotCWNoYXIgcmFtX3R5cGVbMTJdOwotCi0JdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2VfcGh5czsKLQl1bnNpZ25lZCBsb25nIGZiX2Jhc2VfcGh5czsKLQotCXZvaWQgX19pb21lbSAqbW1pb19iYXNlOwotCXZvaWQgX19pb21lbSAqZmJfYmFzZTsKLQotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCi0JdW5zaWduZWQgY2hhciAqRURJRDsKLQl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmJpb3Nfc2VnOwotCi0JdTMyIHBzZXVkb19wYWxldHRlWzE3XTsKLQlzdHJ1Y3QgeyB1OCByZWQsIGdyZWVuLCBibHVlLCBwYWQ7IH0gcGFsZXR0ZVsyNTZdOwotCi0JaW50IGNoaXBzZXQ7Ci0JdW5zaWduZWQgY2hhciBhcmNoOwotCWludCB2aWRlb19yYW07Ci0JdTggcmV2OwotCWludCBwaXRjaCwgYnBwLCBkZXB0aDsKLQlpbnQgeHJlcywgeXJlcywgcGl4Y2xvY2s7Ci0JaW50IHhyZXNfdmlydHVhbCwgeXJlc192aXJ0dWFsOwotCXUzMiBhY2NlbF9mbGFnczsKLQotCWludCB1c2VfZGVmYXVsdF92YXI7Ci0JaW50IGdvdF9kZnBpbmZvOwotCi0JaW50IGhhc0NSVEMyOwotCWludCBjcnREaXNwX3R5cGU7Ci0JaW50IGR2aURpc3BfdHlwZTsKLQotCWludCBwYW5lbF94cmVzLCBwYW5lbF95cmVzOwotCWludCBjbG9jazsKLQlpbnQgaE92ZXJfcGx1cywgaFN5bmNfd2lkdGgsIGhibGFuazsKLQlpbnQgdk92ZXJfcGx1cywgdlN5bmNfd2lkdGgsIHZibGFuazsKLQlpbnQgaEFjdF9oaWdoLCB2QWN0X2hpZ2gsIGludGVybGFjZWQ7Ci0JaW50IHN5bmN0LCBtaXNjOwotCi0JdTMyIGRwX2d1aV9tYXN0ZXJfY250bDsKLQotCXN0cnVjdCBwbGxfaW5mbyBwbGw7Ci0JaW50IHBsbF9vdXRwdXRfZnJlcSwgcG9zdF9kaXYsIGZiX2RpdjsKLQotCXN0cnVjdCByYW1faW5mbyByYW07Ci0KLQlpbnQgbXRycl9oZGw7Ci0KLSNpZmRlZiBDT05GSUdfUE1BQ19QQk9PSwotCWludCBwbV9yZWc7Ci0JdTMyIHNhdmVfcmVnc1s2NF07Ci0JdTMyIG1kbGwsIG1kbGwyOwotI2VuZGlmIC8qIENPTkZJR19QTUFDX1BCT09LICovCi0JaW50IGFzbGVlcDsKLQkKLQlzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqbmV4dDsKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyByYWRlb25mYl9kZWZhdWx0X3ZhciA9IHsKLSAgICAgICAgNjQwLCA0ODAsIDY0MCwgNDgwLCAwLCAwLCA4LCAwLAotICAgICAgICB7MCwgNiwgMH0sIHswLCA2LCAwfSwgezAsIDYsIDB9LCB7MCwgMCwgMH0sCi0gICAgICAgIDAsIDAsIC0xLCAtMSwgMCwgMzk3MjEsIDQwLCAyNCwgMzIsIDExLCA5NiwgMiwKLSAgICAgICAgMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAotfTsKLQotLyoKLSAqIElPIG1hY3JvcwotICovCi0KLSNkZWZpbmUgSU5SRUc4KGFkZHIpCQlyZWFkYigocmluZm8tPm1taW9fYmFzZSkrYWRkcikKLSNkZWZpbmUgT1VUUkVHOChhZGRyLHZhbCkJd3JpdGViKHZhbCwgKHJpbmZvLT5tbWlvX2Jhc2UpK2FkZHIpCi0jZGVmaW5lIElOUkVHKGFkZHIpCQlyZWFkbCgocmluZm8tPm1taW9fYmFzZSkrYWRkcikKLSNkZWZpbmUgT1VUUkVHKGFkZHIsdmFsKQl3cml0ZWwodmFsLCAocmluZm8tPm1taW9fYmFzZSkrYWRkcikKLQotI2RlZmluZSBPVVRQTEwoYWRkcix2YWwpCVwKLQlkbyB7CVwKLQkJT1VUUkVHOChDTE9DS19DTlRMX0lOREVYLCAoYWRkciAmIDB4MDAwMDAwM2YpIHwgMHgwMDAwMDA4MCk7IFwKLQkJT1VUUkVHKENMT0NLX0NOVExfREFUQSwgdmFsKTsgXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBPVVRQTExQKGFkZHIsdmFsLG1hc2spICAJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCXVuc2lnbmVkIGludCBfdG1wID0gSU5QTEwoYWRkcik7CQkJXAotCQlfdG1wICY9IChtYXNrKTsJCQkJCQlcCi0JCV90bXAgfD0gKHZhbCk7CQkJCQkJXAotCQlPVVRQTEwoYWRkciwgX3RtcCk7CQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBPVVRSRUdQKGFkZHIsdmFsLG1hc2spICAJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCXVuc2lnbmVkIGludCBfdG1wID0gSU5SRUcoYWRkcik7CQkJXAotCQlfdG1wICY9IChtYXNrKTsJCQkJCQlcCi0JCV90bXAgfD0gKHZhbCk7CQkJCQkJXAotCQlPVVRSRUcoYWRkciwgX3RtcCk7CQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotCi1zdGF0aWMgX19pbmxpbmVfXyB1MzIgX0lOUExMKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgdTMyIGFkZHIpCi17Ci0JT1VUUkVHOChDTE9DS19DTlRMX0lOREVYLCBhZGRyICYgMHgwMDAwMDAzZik7Ci0JcmV0dXJuIChJTlJFRyhDTE9DS19DTlRMX0RBVEEpKTsKLX0KLQotI2RlZmluZSBJTlBMTChhZGRyKQkJX0lOUExMKHJpbmZvLCBhZGRyKQotCi0jZGVmaW5lIFBSSU1BUllfTU9OSVRPUihyaW5mbykJKChyaW5mby0+ZHZpRGlzcF90eXBlICE9IE1UX05PTkUpICYmCVwKLQkJCQkgKHJpbmZvLT5kdmlEaXNwX3R5cGUgIT0gTVRfU1RWKSAmJglcCi0JCQkJIChyaW5mby0+ZHZpRGlzcF90eXBlICE9IE1UX0NUVikgPwlcCi0JCQkJIHJpbmZvLT5kdmlEaXNwX3R5cGUgOiByaW5mby0+Y3J0RGlzcF90eXBlKQotCi1zdGF0aWMgY2hhciAqR0VUX01PTl9OQU1FKGludCB0eXBlKQotewotCWNoYXIgKnByZXQgPSBOVUxMOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgTVRfTk9ORToKLQkJCXByZXQgPSAibm8iOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVRfQ1JUOgotCQkJcHJldCA9ICJDUlQiOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVRfREZQOgotCQkJcHJldCA9ICJERlAiOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVRfTENEOgotCQkJcHJldCA9ICJMQ0QiOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVRfQ1RWOgotCQkJcHJldCA9ICJDVFYiOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVRfU1RWOgotCQkJcHJldCA9ICJTVFYiOwotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHByZXQ7Ci19Ci0KLQotLyoKLSAqIDJEIGVuZ2luZSByb3V0aW5lcwotICovCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcmFkZW9uX2VuZ2luZV9mbHVzaCAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQotewotCWludCBpOwotCi0JLyogaW5pdGlhdGUgZmx1c2ggKi8KLQlPVVRSRUdQKFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVCwgUkIyRF9EQ19GTFVTSF9BTEwsCi0JICAgICAgICB+UkIyRF9EQ19GTFVTSF9BTEwpOwotCi0JZm9yIChpPTA7IGkgPCAyMDAwMDAwOyBpKyspIHsKLQkJaWYgKCEoSU5SRUcoUkIyRF9EU1RDQUNIRV9DVExTVEFUKSAmIFJCMkRfRENfQlVTWSkpCi0JCQlicmVhazsKLQl9Ci19Ci0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfcmFkZW9uX2ZpZm9fd2FpdCAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCBpbnQgZW50cmllcykKLXsKLQlpbnQgaTsKLQotCWZvciAoaT0wOyBpPDIwMDAwMDA7IGkrKykKLQkJaWYgKChJTlJFRyhSQkJNX1NUQVRVUykgJiAweDdmKSA+PSBlbnRyaWVzKQotCQkJcmV0dXJuOwotfQotCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX3JhZGVvbl9lbmdpbmVfaWRsZSAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQotewotCWludCBpOwotCi0JLyogZW5zdXJlIEZJRk8gaXMgZW1wdHkgYmVmb3JlIHdhaXRpbmcgZm9yIGlkbGUgKi8KLQlfcmFkZW9uX2ZpZm9fd2FpdCAocmluZm8sIDY0KTsKLQotCWZvciAoaT0wOyBpPDIwMDAwMDA7IGkrKykgewotCQlpZiAoKChJTlJFRyhSQkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkgPT0gMCkgewotCQkJcmFkZW9uX2VuZ2luZV9mbHVzaCAocmluZm8pOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi0KLSNkZWZpbmUgcmFkZW9uX2VuZ2luZV9pZGxlKCkJCV9yYWRlb25fZW5naW5lX2lkbGUocmluZm8pCi0jZGVmaW5lIHJhZGVvbl9maWZvX3dhaXQoZW50cmllcykJX3JhZGVvbl9maWZvX3dhaXQocmluZm8sZW50cmllcykKLQotCi0KLS8qCi0gKiBoZWxwZXIgcm91dGluZXMKLSAqLwotCi1zdGF0aWMgX19pbmxpbmVfXyB1MzIgcmFkZW9uX2dldF9kc3RicHAodTE2IGRlcHRoKQotewotCXN3aXRjaCAoZGVwdGgpIHsKLQkJY2FzZSA4OgotCQkJcmV0dXJuIERTVF84QlBQOwotCQljYXNlIDE1OgotCQkJcmV0dXJuIERTVF8xNUJQUDsKLQkJY2FzZSAxNjoKLQkJCXJldHVybiBEU1RfMTZCUFA7Ci0JCWNhc2UgMzI6Ci0JCQlyZXR1cm4gRFNUXzMyQlBQOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotfQotCi0KLXN0YXRpYyBpbmxpbmUgaW50IHZhcl90b19kZXB0aChjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKLXsKLQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSAxNikKLQkJcmV0dXJuIHZhci0+Yml0c19wZXJfcGl4ZWw7Ci0JcmV0dXJuICh2YXItPmdyZWVuLmxlbmd0aCA9PSA2KSA/IDE2IDogMTU7Ci19Ci0KLQotc3RhdGljIHZvaWQgX3JhZGVvbl9lbmdpbmVfcmVzZXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQotewotCXUzMiBjbG9ja19jbnRsX2luZGV4LCBtY2xrX2NudGwsIHJiYm1fc29mdF9yZXNldDsKLQotCXJhZGVvbl9lbmdpbmVfZmx1c2ggKHJpbmZvKTsKLQotCWNsb2NrX2NudGxfaW5kZXggPSBJTlJFRyhDTE9DS19DTlRMX0lOREVYKTsKLQltY2xrX2NudGwgPSBJTlBMTChNQ0xLX0NOVEwpOwotCi0JT1VUUExMKE1DTEtfQ05UTCwgKG1jbGtfY250bCB8Ci0JCQkgICBGT1JDRU9OX01DTEtBIHwKLQkJCSAgIEZPUkNFT05fTUNMS0IgfAotCQkJICAgRk9SQ0VPTl9ZQ0xLQSB8Ci0JCQkgICBGT1JDRU9OX1lDTEtCIHwKLQkJCSAgIEZPUkNFT05fTUMgfAotCQkJICAgRk9SQ0VPTl9BSUMpKTsKLQlyYmJtX3NvZnRfcmVzZXQgPSBJTlJFRyhSQkJNX1NPRlRfUkVTRVQpOwotCi0JT1VUUkVHKFJCQk1fU09GVF9SRVNFVCwgcmJibV9zb2Z0X3Jlc2V0IHwKLQkJCQlTT0ZUX1JFU0VUX0NQIHwKLQkJCQlTT0ZUX1JFU0VUX0hJIHwKLQkJCQlTT0ZUX1JFU0VUX1NFIHwKLQkJCQlTT0ZUX1JFU0VUX1JFIHwKLQkJCQlTT0ZUX1JFU0VUX1BQIHwKLQkJCQlTT0ZUX1JFU0VUX0UyIHwKLQkJCQlTT0ZUX1JFU0VUX1JCKTsKLQlJTlJFRyhSQkJNX1NPRlRfUkVTRVQpOwotCU9VVFJFRyhSQkJNX1NPRlRfUkVTRVQsIHJiYm1fc29mdF9yZXNldCAmICh1MzIpCi0JCQkJfihTT0ZUX1JFU0VUX0NQIHwKLQkJCQkgIFNPRlRfUkVTRVRfSEkgfAotCQkJCSAgU09GVF9SRVNFVF9TRSB8Ci0JCQkJICBTT0ZUX1JFU0VUX1JFIHwKLQkJCQkgIFNPRlRfUkVTRVRfUFAgfAotCQkJCSAgU09GVF9SRVNFVF9FMiB8Ci0JCQkJICBTT0ZUX1JFU0VUX1JCKSk7Ci0JSU5SRUcoUkJCTV9TT0ZUX1JFU0VUKTsKLQotCU9VVFBMTChNQ0xLX0NOVEwsIG1jbGtfY250bCk7Ci0JT1VUUkVHKENMT0NLX0NOVExfSU5ERVgsIGNsb2NrX2NudGxfaW5kZXgpOwotCU9VVFJFRyhSQkJNX1NPRlRfUkVTRVQsIHJiYm1fc29mdF9yZXNldCk7Ci0KLQlyZXR1cm47Ci19Ci0KLSNkZWZpbmUgcmFkZW9uX2VuZ2luZV9yZXNldCgpCQlfcmFkZW9uX2VuZ2luZV9yZXNldChyaW5mbykKLQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcm91bmRfZGl2KGludCBudW0sIGludCBkZW4pCi17Ci0gICAgICAgIHJldHVybiAobnVtICsgKGRlbiAvIDIpKSAvIGRlbjsKLX0KLQotCi0KLXN0YXRpYyBfX2lubGluZV9fIGludCBtaW5fYml0c19yZXEoaW50IHZhbCkKLXsKLSAgICAgICAgaW50IGJpdHNfcmVxID0gMDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYgKHZhbCA9PSAwKQotICAgICAgICAgICAgICAgIGJpdHNfcmVxID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICB3aGlsZSAodmFsKSB7Ci0gICAgICAgICAgICAgICAgdmFsID4+PSAxOwotICAgICAgICAgICAgICAgIGJpdHNfcmVxKys7Ci0gICAgICAgIH0gICAgICAgCi0KLSAgICAgICAgcmV0dXJuIChiaXRzX3JlcSk7Ci19Ci0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9tYXgoaW50IHZhbDEsIGludCB2YWwyKQotewotICAgICAgICBpZiAodmFsMSA+PSB2YWwyKQotICAgICAgICAgICAgICAgIHJldHVybiB2YWwxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbDI7Ci19ICAgICAgICAgICAgICAgICAgICAgICAKLQotCi0KLS8qCi0gKiBnbG9iYWxzCi0gKi8KLQotI2lmbmRlZiBNT0RVTEUKLXN0YXRpYyBjaGFyICptb2RlX29wdGlvbjsKLSNlbmRpZgotCi1zdGF0aWMgY2hhciBub2FjY2VsID0gMDsKLXN0YXRpYyBjaGFyIG1pcnJvciA9IDA7Ci1zdGF0aWMgaW50IHBhbmVsX3lyZXMgPSAwOwotc3RhdGljIGNoYXIgZm9yY2VfZGZwID0gMDsKLXN0YXRpYyBzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqYm9hcmRfbGlzdCA9IE5VTEw7Ci1zdGF0aWMgY2hhciBub210cnIgPSAwOwotCi0vKgotICogcHJvdG90eXBlcwotICovCi0KLXN0YXRpYyB2b2lkIHJhZGVvbl9zYXZlX3N0YXRlIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhZGVvbl9yZWdzICpzYXZlKTsKLXN0YXRpYyB2b2lkIHJhZGVvbl9lbmdpbmVfaW5pdCAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKTsKLXN0YXRpYyB2b2lkIHJhZGVvbl93cml0ZV9tb2RlIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhZGVvbl9yZWdzICptb2RlKTsKLXN0YXRpYyBpbnQgX19kZXZpbml0IHJhZGVvbl9zZXRfZmJpbmZvIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwotc3RhdGljIGludCBfX2RldmluaXQgcmFkZW9uX2luaXRfZGlzcCAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKTsKLXN0YXRpYyBpbnQgcmFkZW9uX2luaXRfZGlzcF92YXIgKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwotc3RhdGljIHZvaWQgX19pb21lbSAqcmFkZW9uX2ZpbmRfcm9tKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyk7Ci1zdGF0aWMgdm9pZCByYWRlb25fZ2V0X3BsbGluZm8oc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCB2b2lkIF9faW9tZW0gKmJpb3Nfc2VnKTsKLXN0YXRpYyB2b2lkIHJhZGVvbl9nZXRfbW9uaW5mbyAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKTsKLXN0YXRpYyBpbnQgcmFkZW9uX2dldF9kZnBpbmZvIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwotc3RhdGljIGludCByYWRlb25fZ2V0X2RmcGluZm9fQklPUyhzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwotc3RhdGljIHZvaWQgcmFkZW9uX2dldF9FRElEKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyk7Ci1zdGF0aWMgaW50IHJhZGVvbl9kZnBfcGFyc2VfRURJRChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwotc3RhdGljIHZvaWQgcmFkZW9uX3VwZGF0ZV9kZWZhdWx0X3ZhcihzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwotCi0jaWZkZWYgQ09ORklHX1BQQ19PRgotCi1zdGF0aWMgaW50IHJhZGVvbl9yZWFkX09GIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwotc3RhdGljIGludCByYWRlb25fZ2V0X0VESURfT0Yoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKTsKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjaV9kZXZpY2VfdG9fT0Zfbm9kZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLQotI2lmZGVmIENPTkZJR19QTUFDX1BCT09LCi1pbnQgcmFkZW9uX3NsZWVwX25vdGlmeShzdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyICpzZWxmLCBpbnQgd2hlbik7Ci1zdGF0aWMgc3RydWN0IHBtdV9zbGVlcF9ub3RpZmllciByYWRlb25fc2xlZXBfbm90aWZpZXIgPSB7Ci0JcmFkZW9uX3NsZWVwX25vdGlmeSwgU0xFRVBfTEVWRUxfVklERU8sCi19OwotI2VuZGlmIC8qIENPTkZJR19QTUFDX1BCT09LICovCi0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi1zdGF0aWMgaW50IHJhZGVvbl9zZXRfYmFja2xpZ2h0X2VuYWJsZShpbnQgb24sIGludCBsZXZlbCwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IHJhZGVvbl9zZXRfYmFja2xpZ2h0X2xldmVsKGludCBsZXZlbCwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9jb250cm9sbGVyIHJhZGVvbl9iYWNrbGlnaHRfY29udHJvbGxlciA9IHsKLQlyYWRlb25fc2V0X2JhY2tsaWdodF9lbmFibGUsCi0JcmFkZW9uX3NldF9iYWNrbGlnaHRfbGV2ZWwKLX07Ci0jZW5kaWYgLyogQ09ORklHX1BNQUNfQkFDS0xJR0hUICovCi0KLSNlbmRpZiAvKiBDT05GSUdfUFBDX09GICovCi0KLQotc3RhdGljIHZvaWQgX19pb21lbSAqcmFkZW9uX2ZpbmRfcm9tKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKLXsgICAgICAgCi0jaWYgZGVmaW5lZChfX2kzODZfXykKLSAgICAgICAgdTMyICBzZWdzdGFydDsKLSAgICAgICAgY2hhciBfX2lvbWVtICpyb21fYmFzZTsKLSAgICAgICAgY2hhciBfX2lvbWVtICpyb207Ci0gICAgICAgIGludCAgc3RhZ2U7Ci0gICAgICAgIGludCAgaSxqOyAgICAgICAKLSAgICAgICAgY2hhciBhdHlfcm9tX3NpZ1tdID0gIjc2MTI5NTUyMCI7Ci0gICAgICAgIGNoYXIgKnJhZGVvbl9zaWdbXSA9IHsKLSAgICAgICAgICAiUkc2IiwKLSAgICAgICAgICAiUkFERU9OIgotICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIGZvcihzZWdzdGFydD0weDAwMGMwMDAwOyBzZWdzdGFydDwweDAwMGYwMDAwOyBzZWdzdGFydCs9MHgwMDAwMTAwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3RhZ2UgPSAxOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJvbV9iYXNlID0gaW9yZW1hcChzZWdzdGFydCwgMHgxMDAwKTsKLQotICAgICAgICAgICAgICAgIGlmICgoKnJvbV9iYXNlID09IDB4NTUpICYmICgoKCoocm9tX2Jhc2UgKyAxKSkgJiAweGZmKSA9PSAweGFhKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlID0gMjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0YWdlICE9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvdW5tYXAocm9tX2Jhc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJvbSA9IHJvbV9iYXNlOwotICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgKGkgPCAxMjggLSBzdHJsZW4oYXR5X3JvbV9zaWcpKSAmJiAoc3RhZ2UgIT0gMyk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0eV9yb21fc2lnWzBdID09ICpyb20pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKGF0eV9yb21fc2lnLCByb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oYXR5X3JvbV9zaWcpKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlID0gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvbSsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3RhZ2UgIT0gMykgewotICAgICAgICAgICAgICAgICAgICAgICAgaW91bm1hcChyb21fYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcm9tID0gcm9tX2Jhc2U7Ci0gICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IChpIDwgNTEyKSAmJiAoc3RhZ2UgIT0gNCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShyYWRlb25fc2lnKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFkZW9uX3NpZ1tqXVswXSA9PSAqcm9tKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcChyYWRlb25fc2lnW2pdLCByb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihyYWRlb25fc2lnW2pdKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlID0gNDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICByb20rKzsKLSAgICAgICAgICAgICAgICB9ICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChzdGFnZSAhPSA0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpb3VubWFwKHJvbV9iYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0gICAgICAgCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJvbV9iYXNlOwotICAgICAgICB9Ci0jZW5kaWYgICAgICAgICAgCi0gICAgICAgIHJldHVybiBOVUxMOwotfQotCi0KLQotCi1zdGF0aWMgdm9pZCByYWRlb25fZ2V0X3BsbGluZm8oc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCB2b2lkIF9faW9tZW0gKmJpb3Nfc2VnKQotewotICAgICAgICB2b2lkIF9faW9tZW0gKmJpb3NfaGVhZGVyOwotICAgICAgICB2b2lkIF9faW9tZW0gKmhlYWRlcl9wdHI7Ci0gICAgICAgIHUxNiBiaW9zX2hlYWRlcl9vZmZzZXQsIHBsbF9pbmZvX29mZnNldDsKLSAgICAgICAgUExMX0JMT0NLIHBsbDsKLQotCWlmIChiaW9zX3NlZykgewotCSAgICAgICAgYmlvc19oZWFkZXIgPSBiaW9zX3NlZyArIDB4NDhMOwotICAgICAgIAkJaGVhZGVyX3B0ciAgPSBiaW9zX2hlYWRlcjsKLSAgICAgICAgCi0gICAgICAgIAliaW9zX2hlYWRlcl9vZmZzZXQgPSByZWFkdyhoZWFkZXJfcHRyKTsKLQkgICAgICAgIGJpb3NfaGVhZGVyID0gYmlvc19zZWcgKyBiaW9zX2hlYWRlcl9vZmZzZXQ7Ci0gICAgICAgIAliaW9zX2hlYWRlciArPSAweDMwOwotICAgICAgICAKLSAgICAgICAgCWhlYWRlcl9wdHIgPSBiaW9zX2hlYWRlcjsKLSAgICAgICAgCXBsbF9pbmZvX29mZnNldCA9IHJlYWR3KGhlYWRlcl9wdHIpOwotICAgICAgICAJaGVhZGVyX3B0ciA9IGJpb3Nfc2VnICsgcGxsX2luZm9fb2Zmc2V0OwotICAgICAgICAKLSAgICAgICAgCW1lbWNweV9mcm9taW8oJnBsbCwgaGVhZGVyX3B0ciwgNTApOwotICAgICAgICAKLSAgICAgICAgCXJpbmZvLT5wbGwueGNsayA9ICh1MzIpcGxsLlhDTEs7Ci0gICAgICAgIAlyaW5mby0+cGxsLnJlZl9jbGsgPSAodTMyKXBsbC5QQ0xLX3JlZl9mcmVxOwotICAgICAgICAJcmluZm8tPnBsbC5yZWZfZGl2ID0gKHUzMilwbGwuUENMS19yZWZfZGl2aWRlcjsKLSAgICAgICAgCXJpbmZvLT5wbGwucHBsbF9taW4gPSBwbGwuUENMS19taW5fZnJlcTsKLSAgICAgICAgCXJpbmZvLT5wbGwucHBsbF9tYXggPSBwbGwuUENMS19tYXhfZnJlcTsKLQotCQlwcmludGsoInJhZGVvbmZiOiByZWZfY2xrPSVkLCByZWZfZGl2PSVkLCB4Y2xrPSVkIGZyb20gQklPU1xuIiwKLQkJCXJpbmZvLT5wbGwucmVmX2NsaywgcmluZm8tPnBsbC5yZWZfZGl2LCByaW5mby0+cGxsLnhjbGspOwotCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1BQQ19PRgotCQlpZiAocmFkZW9uX3JlYWRfT0YocmluZm8pKSB7Ci0JCQl1bnNpZ25lZCBpbnQgdG1wLCBOeCwgTSwgcmVmX2RpdiwgeGNsazsKLQotCQkJdG1wID0gSU5QTEwoTV9TUExMX1JFRl9GQl9ESVYpOwotCQkJcmVmX2RpdiA9IElOUExMKFBQTExfUkVGX0RJVikgJiAweDNmZjsKLQotCQkJTnggPSAodG1wICYgMHhmZjAwKSA+PiA4OwotCQkJTSA9ICh0bXAgJiAweGZmKTsKLQkJCXhjbGsgPSAoKCgoMiAqIE54ICogcmluZm8tPnBsbC5yZWZfY2xrKSArIChNKSkgLwotCQkJCSgyICogTSkpKTsKLQotCQkJcmluZm8tPnBsbC54Y2xrID0geGNsazsKLQkJCXJpbmZvLT5wbGwucmVmX2RpdiA9IHJlZl9kaXY7Ci0JCQlyaW5mby0+cGxsLnBwbGxfbWluID0gMTIwMDA7Ci0JCQlyaW5mby0+cGxsLnBwbGxfbWF4ID0gMzUwMDA7Ci0KLQkJCXByaW50aygicmFkZW9uZmI6IHJlZl9jbGs9JWQsIHJlZl9kaXY9JWQsIHhjbGs9JWQgZnJvbSBPRlxuIiwKLQkJCQlyaW5mby0+cGxsLnJlZl9jbGssIHJpbmZvLT5wbGwucmVmX2RpdiwgcmluZm8tPnBsbC54Y2xrKTsKLQotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJLyogbm8gQklPUyBvciBCSU9TIG5vdCBmb3VuZCwgdXNlIGRlZmF1bHRzICovCi0JCXN3aXRjaCAocmluZm8tPmNoaXBzZXQpIHsKLQkJCWNhc2UgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FXOgotCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVg6Ci0JCQkJcmluZm8tPnBsbC5wcGxsX21heCA9IDM1MDAwOwotCQkJCXJpbmZvLT5wbGwucHBsbF9taW4gPSAxMjAwMDsKLQkJCQlyaW5mby0+cGxsLnhjbGsgPSAyMzAwMDsKLQkJCQlyaW5mby0+cGxsLnJlZl9kaXYgPSAxMjsKLQkJCQlyaW5mby0+cGxsLnJlZl9jbGsgPSAyNzAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUw6Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTjoKLQkJCWNhc2UgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FPOgotCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUWw6Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9CQjoKLQkJCQlyaW5mby0+cGxsLnBwbGxfbWF4ID0gMzUwMDA7Ci0JCQkJcmluZm8tPnBsbC5wcGxsX21pbiA9IDEyMDAwOwotCQkJCXJpbmZvLT5wbGwueGNsayA9IDI3NTAwOwotCQkJCXJpbmZvLT5wbGwucmVmX2RpdiA9IDEyOwotCQkJCXJpbmZvLT5wbGwucmVmX2NsayA9IDI3MDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZDoKLQkJCWNhc2UgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0llOgotCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fSWY6Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZzoKLQkJCQlyaW5mby0+cGxsLnBwbGxfbWF4ID0gMzUwMDA7Ci0JCQkJcmluZm8tPnBsbC5wcGxsX21pbiA9IDEyMDAwOwotCQkJCXJpbmZvLT5wbGwueGNsayA9IDI1MDAwOwotCQkJCXJpbmZvLT5wbGwucmVmX2RpdiA9IDEyOwotCQkJCXJpbmZvLT5wbGwucmVmX2NsayA9IDI3MDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORDoKLQkJCWNhc2UgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX05FOgotCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkY6Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORzoKLQkJCQlyaW5mby0+cGxsLnBwbGxfbWF4ID0gNDAwMDA7Ci0JCQkJcmluZm8tPnBsbC5wcGxsX21pbiA9IDIwMDAwOwotCQkJCXJpbmZvLT5wbGwueGNsayA9IDI3MDAwOwotCQkJCXJpbmZvLT5wbGwucmVmX2RpdiA9IDEyOwotCQkJCXJpbmZvLT5wbGwucmVmX2NsayA9IDI3MDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRDoKLQkJCWNhc2UgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FFOgotCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUY6Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRzoKLQkJCWRlZmF1bHQ6Ci0JCQkJcmluZm8tPnBsbC5wcGxsX21heCA9IDM1MDAwOwotCQkJCXJpbmZvLT5wbGwucHBsbF9taW4gPSAxMjAwMDsKLQkJCQlyaW5mby0+cGxsLnhjbGsgPSAxNjYwMDsKLQkJCQlyaW5mby0+cGxsLnJlZl9kaXYgPSA2NzsKLQkJCQlyaW5mby0+cGxsLnJlZl9jbGsgPSAyNzAwOwotCQkJCWJyZWFrOwotCQl9Ci0KLQkJcHJpbnRrKCJyYWRlb25mYjogcmVmX2Nsaz0lZCwgcmVmX2Rpdj0lZCwgeGNsaz0lZCBkZWZhdWx0c1xuIiwKLQkJCXJpbmZvLT5wbGwucmVmX2NsaywgcmluZm8tPnBsbC5yZWZfZGl2LCByaW5mby0+cGxsLnhjbGspOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCByYWRlb25fZ2V0X21vbmluZm8gKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKLXsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0JaWYgKGZvcmNlX2RmcCkgewotCQlyaW5mby0+ZHZpRGlzcF90eXBlID0gTVRfREZQOwotCQlyZXR1cm47Ci0JfQotCi0JdG1wID0gSU5SRUcoQklPU180X1NDUkFUQ0gpOwotCXByaW50ayhLRVJOX0RFQlVHICJyYWRlb25fZ2V0X21vbmluZm86IGJpb3MgNCBzY3JhdGNoID0gJXhcbiIsIHRtcCk7Ci0JCi0JaWYgKHJpbmZvLT5oYXNDUlRDMikgewotCQkvKiBwcmltYXJ5IERWSSBwb3J0ICovCi0JCWlmICh0bXAgJiAweDA4KQotCQkJcmluZm8tPmR2aURpc3BfdHlwZSA9IE1UX0RGUDsKLQkJZWxzZSBpZiAodG1wICYgMHg0KQotCQkJcmluZm8tPmR2aURpc3BfdHlwZSA9IE1UX0xDRDsKLQkJZWxzZSBpZiAodG1wICYgMHgyMDApCi0JCQlyaW5mby0+ZHZpRGlzcF90eXBlID0gTVRfQ1JUOwotCQllbHNlIGlmICh0bXAgJiAweDEwKQotCQkJcmluZm8tPmR2aURpc3BfdHlwZSA9IE1UX0NUVjsKLQkJZWxzZSBpZiAodG1wICYgMHgyMCkKLQkJCXJpbmZvLT5kdmlEaXNwX3R5cGUgPSBNVF9TVFY7Ci0KLQkJLyogc2Vjb25kYXJ5IENSVCBwb3J0ICovCi0JCWlmICh0bXAgJiAweDIpCi0JCQlyaW5mby0+Y3J0RGlzcF90eXBlID0gTVRfQ1JUOwotCQllbHNlIGlmICh0bXAgJiAweDgwMCkKLQkJCXJpbmZvLT5jcnREaXNwX3R5cGUgPSBNVF9ERlA7Ci0JCWVsc2UgaWYgKHRtcCAmIDB4NDAwKQotCQkJcmluZm8tPmNydERpc3BfdHlwZSA9IE1UX0xDRDsKLQkJZWxzZSBpZiAodG1wICYgMHgxMDAwKQotCQkJcmluZm8tPmNydERpc3BfdHlwZSA9IE1UX0NUVjsKLQkJZWxzZSBpZiAodG1wICYgMHgyMDAwKQotCQkJcmluZm8tPmNydERpc3BfdHlwZSA9IE1UX1NUVjsKLQl9IGVsc2UgewotCQlyaW5mby0+ZHZpRGlzcF90eXBlID0gTVRfTk9ORTsKLQotCQl0bXAgPSBJTlJFRyhGUF9HRU5fQ05UTCk7Ci0KLQkJaWYgKHRtcCAmIEZQX0VOX1RNRFMpCi0JCQlyaW5mby0+Y3J0RGlzcF90eXBlID0gTVRfREZQOwotCQllbHNlCi0JCQlyaW5mby0+Y3J0RGlzcF90eXBlID0gTVRfQ1JUOwotCX0KLX0KLQotCi0KLXN0YXRpYyB2b2lkIHJhZGVvbl9nZXRfRURJRChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCi17Ci0jaWZkZWYgQ09ORklHX1BQQ19PRgotCWlmICghcmFkZW9uX2dldF9FRElEX09GKHJpbmZvKSkKLQkJUlRSQUNFKCJyYWRlb25mYjogY291bGQgbm90IHJldHJpZXZlIEVESUQgZnJvbSBPRlxuIik7Ci0jZWxzZQotCS8qIFhYWCB1c2Ugb3RoZXIgbWV0aG9kcyBsYXRlciAqLwotI2VuZGlmCi19Ci0KLQotI2lmZGVmIENPTkZJR19QUENfT0YKLXN0YXRpYyBpbnQgcmFkZW9uX2dldF9FRElEX09GKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKLXsKLSAgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpkcDsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqcGVkaWQgPSBOVUxMOwotICAgICAgICBzdGF0aWMgY2hhciAqcHJvcG5hbWVzW10gPSB7ICJERlAsRURJRCIsICJMQ0QsRURJRCIsICJFRElEIiwgIkVESUQxIiwgTlVMTCB9OwotICAgICAgICBpbnQgaTsgIAotCi0gICAgICAgIGRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHJpbmZvLT5wZGV2KTsKLSAgICAgICAgd2hpbGUgKGRwICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBwcm9wbmFtZXNbaV0gIT0gTlVMTDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZWRpZCA9ICh1bnNpZ25lZCBjaGFyICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9wcm9wZXJ0eShkcCwgcHJvcG5hbWVzW2ldLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWRpZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmZvLT5FRElEID0gcGVkaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkcCA9IGRwLT5jaGlsZDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUFBDX09GICovCi0KLQotc3RhdGljIGludCByYWRlb25fZGZwX3BhcnNlX0VESUQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQotewotCXVuc2lnbmVkIGNoYXIgKmJsb2NrID0gcmluZm8tPkVESUQ7Ci0KLQlpZiAoIWJsb2NrKQotCQlyZXR1cm4gMDsKLQotCS8qIGp1bXAgdG8gdGhlIGRldGFpbGVkIHRpbWluZyBibG9jayBzZWN0aW9uICovCi0JYmxvY2sgKz0gNTQ7Ci0KLQlyaW5mby0+Y2xvY2sgPSAoYmxvY2tbMF0gKyAoYmxvY2tbMV0gPDwgOCkpOwotCXJpbmZvLT5wYW5lbF94cmVzID0gKGJsb2NrWzJdICsgKChibG9ja1s0XSAmIDB4ZjApIDw8IDQpKTsKLQlyaW5mby0+aGJsYW5rID0gKGJsb2NrWzNdICsgKChibG9ja1s0XSAmIDB4MGYpIDw8IDgpKTsKLQlyaW5mby0+cGFuZWxfeXJlcyA9IChibG9ja1s1XSArICgoYmxvY2tbN10gJiAweGYwKSA8PCA0KSk7Ci0JcmluZm8tPnZibGFuayA9IChibG9ja1s2XSArICgoYmxvY2tbN10gJiAweDBmKSA8PCA4KSk7Ci0JcmluZm8tPmhPdmVyX3BsdXMgPSAoYmxvY2tbOF0gKyAoKGJsb2NrWzExXSAmIDB4YzApIDw8IDIpKTsKLQlyaW5mby0+aFN5bmNfd2lkdGggPSAoYmxvY2tbOV0gKyAoKGJsb2NrWzExXSAmIDB4MzApIDw8IDQpKTsKLQlyaW5mby0+dk92ZXJfcGx1cyA9ICgoYmxvY2tbMTBdID4+IDQpICsgKChibG9ja1sxMV0gJiAweDBjKSA8PCAyKSk7Ci0JcmluZm8tPnZTeW5jX3dpZHRoID0gKChibG9ja1sxMF0gJiAweDBmKSArICgoYmxvY2tbMTFdICYgMHgwMykgPDwgNCkpOwotCXJpbmZvLT5pbnRlcmxhY2VkID0gKChibG9ja1sxN10gJiAweDgwKSA+PiA3KTsKLQlyaW5mby0+c3luY3QgPSAoKGJsb2NrWzE3XSAmIDB4MTgpID4+IDMpOwotCXJpbmZvLT5taXNjID0gKChibG9ja1sxN10gJiAweDA2KSA+PiAxKTsKLQlyaW5mby0+aEFjdF9oaWdoID0gcmluZm8tPnZBY3RfaGlnaCA9IDA7Ci0JaWYgKHJpbmZvLT5zeW5jdCA9PSAzKSB7Ci0JCWlmIChyaW5mby0+bWlzYyAmIDIpCi0JCQlyaW5mby0+aEFjdF9oaWdoID0gMTsKLQkJaWYgKHJpbmZvLT5taXNjICYgMSkKLQkJCXJpbmZvLT52QWN0X2hpZ2ggPSAxOwotCX0KLQotCXByaW50aygicmFkZW9uZmI6IGRldGVjdGVkIERGUCBwYW5lbCBzaXplIGZyb20gRURJRDogJWR4JWRcbiIsCi0JCXJpbmZvLT5wYW5lbF94cmVzLCByaW5mby0+cGFuZWxfeXJlcyk7Ci0KLQlyaW5mby0+Z290X2RmcGluZm8gPSAxOwotCi0JcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIHZvaWQgcmFkZW9uX3VwZGF0ZV9kZWZhdWx0X3ZhcihzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCi17Ci0Jc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmcmFkZW9uZmJfZGVmYXVsdF92YXI7Ci0KLQl2YXItPnhyZXMgPSByaW5mby0+cGFuZWxfeHJlczsKLQl2YXItPnlyZXMgPSByaW5mby0+cGFuZWxfeXJlczsKLQl2YXItPnhyZXNfdmlydHVhbCA9IHJpbmZvLT5wYW5lbF94cmVzOwotCXZhci0+eXJlc192aXJ0dWFsID0gcmluZm8tPnBhbmVsX3lyZXM7Ci0JdmFyLT54b2Zmc2V0ID0gdmFyLT55b2Zmc2V0ID0gMDsKLQl2YXItPmJpdHNfcGVyX3BpeGVsID0gODsKLQl2YXItPnBpeGNsb2NrID0gMTAwMDAwMDAwIC8gcmluZm8tPmNsb2NrOwotCXZhci0+bGVmdF9tYXJnaW4gPSAocmluZm8tPmhibGFuayAtIHJpbmZvLT5oT3Zlcl9wbHVzIC0gcmluZm8tPmhTeW5jX3dpZHRoKTsKLQl2YXItPnJpZ2h0X21hcmdpbiA9IHJpbmZvLT5oT3Zlcl9wbHVzOwotCXZhci0+dXBwZXJfbWFyZ2luID0gKHJpbmZvLT52YmxhbmsgLSByaW5mby0+dk92ZXJfcGx1cyAtIHJpbmZvLT52U3luY193aWR0aCk7Ci0JdmFyLT5sb3dlcl9tYXJnaW4gPSByaW5mby0+dk92ZXJfcGx1czsKLQl2YXItPmhzeW5jX2xlbiA9IHJpbmZvLT5oU3luY193aWR0aDsKLQl2YXItPnZzeW5jX2xlbiA9IHJpbmZvLT52U3luY193aWR0aDsKLQl2YXItPnN5bmMgPSAwOwotCWlmIChyaW5mby0+c3luY3QgPT0gMykgewotCQlpZiAocmluZm8tPmhBY3RfaGlnaCkKLQkJCXZhci0+c3luYyB8PSBGQl9TWU5DX0hPUl9ISUdIX0FDVDsKLQkJaWYgKHJpbmZvLT52QWN0X2hpZ2gpCi0JCQl2YXItPnN5bmMgfD0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUOwotCX0KLQotCXZhci0+dm1vZGUgPSAwOwotCWlmIChyaW5mby0+aW50ZXJsYWNlZCkKLQkJdmFyLT52bW9kZSB8PSBGQl9WTU9ERV9JTlRFUkxBQ0VEOwotCi0JcmluZm8tPnVzZV9kZWZhdWx0X3ZhciA9IDE7Ci19Ci0KLQotc3RhdGljIGludCByYWRlb25fZ2V0X2RmcGluZm9fQklPUyhzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCi17Ci0JY2hhciBfX2lvbWVtICpmcGJpb3NzdGFydCwgKnRtcCwgKnRtcDA7Ci0JY2hhciBzdG1wWzMwXTsKLQlpbnQgaTsKLQotCWlmICghcmluZm8tPmJpb3Nfc2VnKQotCQlyZXR1cm4gMDsKLQotCWlmICghKGZwYmlvc3N0YXJ0ID0gcmluZm8tPmJpb3Nfc2VnICsgcmVhZHcocmluZm8tPmJpb3Nfc2VnICsgMHg0OCkpKSB7Ci0JCXByaW50aygicmFkZW9uZmI6IEZhaWxlZCB0byBkZXRlY3QgREZQIHBhbmVsIGluZm8gdXNpbmcgQklPU1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghKHRtcCA9IHJpbmZvLT5iaW9zX3NlZyArIHJlYWR3KGZwYmlvc3N0YXJ0ICsgMHg0MCkpKSB7Ci0JCXByaW50aygicmFkZW9uZmI6IEZhaWxlZCB0byBkZXRlY3QgREZQIHBhbmVsIGluZm8gdXNpbmcgQklPU1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWZvcihpPTA7IGk8MjQ7IGkrKykKLQkJc3RtcFtpXSA9IHJlYWRiKHRtcCtpKzEpOwotCXN0bXBbMjRdID0gMDsKLQlwcmludGsoInJhZGVvbmZiOiBwYW5lbCBJRCBzdHJpbmc6ICVzXG4iLCBzdG1wKTsKLQlyaW5mby0+cGFuZWxfeHJlcyA9IHJlYWR3KHRtcCArIDI1KTsKLQlyaW5mby0+cGFuZWxfeXJlcyA9IHJlYWR3KHRtcCArIDI3KTsKLQlwcmludGsoInJhZGVvbmZiOiBkZXRlY3RlZCBERlAgcGFuZWwgc2l6ZSBmcm9tIEJJT1M6ICVkeCVkXG4iLAotCQlyaW5mby0+cGFuZWxfeHJlcywgcmluZm8tPnBhbmVsX3lyZXMpOwotCi0JZm9yKGk9MDsgaTwzMjsgaSsrKSB7Ci0JCXRtcDAgPSByaW5mby0+Ymlvc19zZWcgKyByZWFkdyh0bXArNjQraSoyKTsKLQkJaWYgKHRtcDAgPT0gMCkKLQkJCWJyZWFrOwotCQlpZiAoKHJlYWR3KHRtcDApID09IHJpbmZvLT5wYW5lbF94cmVzKSAmJgotCQkgICAgKHJlYWR3KHRtcDArMikgPT0gcmluZm8tPnBhbmVsX3lyZXMpKSB7Ci0JCQlyaW5mby0+aGJsYW5rID0gKHJlYWR3KHRtcDArMTcpIC0gcmVhZHcodG1wMCsxOSkpICogODsKLQkJCXJpbmZvLT5oT3Zlcl9wbHVzID0gKChyZWFkdyh0bXAwKzIxKSAtIHJlYWR3KHRtcDArMTkpIC0xKSAqIDgpICYgMHg3ZmZmOwotCQkJcmluZm8tPmhTeW5jX3dpZHRoID0gcmVhZGIodG1wMCsyMykgKiA4OwotCQkJcmluZm8tPnZibGFuayA9IHJlYWR3KHRtcDArMjQpIC0gcmVhZHcodG1wMCsyNik7Ci0JCQlyaW5mby0+dk92ZXJfcGx1cyA9IChyZWFkdyh0bXAwKzI4KSAmIDB4N2ZmKSAtIHJlYWR3KHRtcDArMjYpOwotCQkJcmluZm8tPnZTeW5jX3dpZHRoID0gKHJlYWR3KHRtcDArMjgpICYgMHhmODAwKSA+PiAxMTsKLQkJCXJpbmZvLT5jbG9jayA9IHJlYWR3KHRtcDArOSk7Ci0KLQkJCXJpbmZvLT5nb3RfZGZwaW5mbyA9IDE7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludCByYWRlb25fZ2V0X2RmcGluZm8gKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKLXsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCXVuc2lnbmVkIHNob3J0IGEsIGI7Ci0KLQlpZiAocmFkZW9uX2dldF9kZnBpbmZvX0JJT1MocmluZm8pKQotCQlyYWRlb25fdXBkYXRlX2RlZmF1bHRfdmFyKHJpbmZvKTsKLQotCWlmIChyYWRlb25fZGZwX3BhcnNlX0VESUQocmluZm8pKQotCQlyYWRlb25fdXBkYXRlX2RlZmF1bHRfdmFyKHJpbmZvKTsKLQotCWlmICghcmluZm8tPmdvdF9kZnBpbmZvKSB7Ci0JCS8qCi0JCSAqIGl0IHNlZW1zIGFsbCBlbHNlIGhhcyBmYWlsZWQgbm93IGFuZCB3ZQotCQkgKiByZXNvcnQgdG8gcHJvYmluZyByZWdpc3RlcnMgZm9yIG91ciBERlAgaW5mbwotCSAgICAgICAgICovCi0JCWlmIChwYW5lbF95cmVzKSB7Ci0JCQlyaW5mby0+cGFuZWxfeXJlcyA9IHBhbmVsX3lyZXM7Ci0JCX0gZWxzZSB7Ci0JCQl0bXAgPSBJTlJFRyhGUF9WRVJUX1NUUkVUQ0gpOwotCQkJdG1wICY9IDB4MDBmZmYwMDA7Ci0JCQlyaW5mby0+cGFuZWxfeXJlcyA9ICh1bnNpZ25lZCBzaG9ydCkodG1wID4+IDB4MGMpICsgMTsKLQkJfQotCi0JCXN3aXRjaCAocmluZm8tPnBhbmVsX3lyZXMpIHsKLQkJCWNhc2UgNDgwOgotCQkJCXJpbmZvLT5wYW5lbF94cmVzID0gNjQwOwotCQkJCWJyZWFrOwotCQkJY2FzZSA2MDA6Ci0JCQkJcmluZm8tPnBhbmVsX3hyZXMgPSA4MDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDc2ODoKLSNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQotCQkJCWlmIChyaW5mby0+ZHZpRGlzcF90eXBlID09IE1UX0xDRCkKLQkJCQkJcmluZm8tPnBhbmVsX3hyZXMgPSAxMTUyOwotCQkJCWVsc2UKLSNlbmRpZgotCQkJCXJpbmZvLT5wYW5lbF94cmVzID0gMTAyNDsKLQkJCQlicmVhazsKLQkJCWNhc2UgMTAyNDoKLQkJCQlyaW5mby0+cGFuZWxfeHJlcyA9IDEyODA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDEwNTA6Ci0JCQkJcmluZm8tPnBhbmVsX3hyZXMgPSAxNDAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxMjAwOgotCQkJCXJpbmZvLT5wYW5lbF94cmVzID0gMTYwMDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKCJyYWRlb25mYjogRmFpbGVkIHRvIGRldGVjdCBERlAgcGFuZWwgc2l6ZVxuIik7Ci0JCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlwcmludGsoInJhZGVvbmZiOiBkZXRlY3RlZCBERlAgcGFuZWwgc2l6ZSBmcm9tIHJlZ2lzdGVyczogJWR4JWRcbiIsCi0JCQlyaW5mby0+cGFuZWxfeHJlcywgcmluZm8tPnBhbmVsX3lyZXMpOwotCi0JCXRtcCA9IElOUkVHKEZQX0NSVENfSF9UT1RBTF9ESVNQKTsKLQkJYSA9ICh0bXAgJiBGUF9DUlRDX0hfVE9UQUxfTUFTSykgKyA0OwotCQliID0gKHRtcCAmIDB4MDFmZjAwMDApID4+IEZQX0NSVENfSF9ESVNQX1NISUZUOwotCQlyaW5mby0+aGJsYW5rID0gKGEgLSBiICsgMSkgKiA4OwotCi0JCXRtcCA9IElOUkVHKEZQX0hfU1lOQ19TVFJUX1dJRCk7Ci0JCXJpbmZvLT5oT3Zlcl9wbHVzID0gKHVuc2lnbmVkIHNob3J0KSAoKHRtcCAmIEZQX0hfU1lOQ19TVFJUX0NIQVJfTUFTSykgPj4KLQkJCQkJRlBfSF9TWU5DX1NUUlRfQ0hBUl9TSElGVCkgLSBiIC0gMTsKLQkJcmluZm8tPmhPdmVyX3BsdXMgKj0gODsKLQkJcmluZm8tPmhTeW5jX3dpZHRoID0gKHVuc2lnbmVkIHNob3J0KSAoKHRtcCAmIEZQX0hfU1lOQ19XSURfTUFTSykgPj4KLQkJCQkJRlBfSF9TWU5DX1dJRF9TSElGVCk7Ci0JCXJpbmZvLT5oU3luY193aWR0aCAqPSA4OwotCQl0bXAgPSBJTlJFRyhGUF9DUlRDX1ZfVE9UQUxfRElTUCk7Ci0JCWEgPSAodG1wICYgRlBfQ1JUQ19WX1RPVEFMX01BU0spICsgMTsKLQkJYiA9ICh0bXAgJiBGUF9DUlRDX1ZfRElTUF9NQVNLKSA+PiBGUF9DUlRDX1ZfRElTUF9TSElGVDsKLQkJcmluZm8tPnZibGFuayA9IGEgLSBiIC8qICsgMjQgKi8gOwotCi0JCXRtcCA9IElOUkVHKEZQX1ZfU1lOQ19TVFJUX1dJRCk7Ci0JCXJpbmZvLT52T3Zlcl9wbHVzID0gKHVuc2lnbmVkIHNob3J0KSAodG1wICYgRlBfVl9TWU5DX1NUUlRfTUFTSykKLQkJCQkJLSBiICsgMTsKLQkJcmluZm8tPnZTeW5jX3dpZHRoID0gKHVuc2lnbmVkIHNob3J0KSAoKHRtcCAmIEZQX1ZfU1lOQ19XSURfTUFTSykgPj4KLQkJCQkJRlBfVl9TWU5DX1dJRF9TSElGVCk7Ci0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLQotI2lmZGVmIENPTkZJR19QUENfT0YKLXN0YXRpYyBpbnQgcmFkZW9uX3JlYWRfT0YgKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCXVuc2lnbmVkIGludCAqeHRhbDsKLQotCWRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHJpbmZvLT5wZGV2KTsKLQotCXh0YWwgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShkcCwgIkFUWSxSZWZDTEsiLCBOVUxMKTsKLQotCXJpbmZvLT5wbGwucmVmX2NsayA9ICp4dGFsIC8gMTA7Ci0KLQlpZiAoKnh0YWwpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0jZW5kaWYJCi0KLQotc3RhdGljIHZvaWQgcmFkZW9uX2VuZ2luZV9pbml0IChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCi17Ci0JdTMyIHRlbXA7Ci0KLQkvKiBkaXNhYmxlIDNEIGVuZ2luZSAqLwotCU9VVFJFRyhSQjNEX0NOVEwsIDApOwotCi0JcmFkZW9uX2VuZ2luZV9yZXNldCAoKTsKLQotCXJhZGVvbl9maWZvX3dhaXQgKDEpOwotCU9VVFJFRyhSQjJEX0RTVENBQ0hFX01PREUsIDApOwotCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0JdGVtcCA9IElOUkVHKERFRkFVTFRfUElUQ0hfT0ZGU0VUKTsKLQlPVVRSRUcoREVGQVVMVF9QSVRDSF9PRkZTRVQsICgodGVtcCAmIDB4YzAwMDAwMDApIHwgCi0JCQkJICAgICAgKHJpbmZvLT5waXRjaCA8PCAweDE2KSkpOwotCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0JT1VUUkVHUChEUF9EQVRBVFlQRSwgMCwgfkhPU1RfQklHX0VORElBTl9FTik7Ci0KLQlyYWRlb25fZmlmb193YWl0ICgxKTsKLQlPVVRSRUcoREVGQVVMVF9TQ19CT1RUT01fUklHSFQsIChERUZBVUxUX1NDX1JJR0hUX01BWCB8Ci0JCQkJCSBERUZBVUxUX1NDX0JPVFRPTV9NQVgpKTsKLQotCXRlbXAgPSByYWRlb25fZ2V0X2RzdGJwcChyaW5mby0+ZGVwdGgpOwotCXJpbmZvLT5kcF9ndWlfbWFzdGVyX2NudGwgPSAoKHRlbXAgPDwgOCkgfCBHTUNfQ0xSX0NNUF9DTlRMX0RJUyk7Ci0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0JT1VUUkVHKERQX0dVSV9NQVNURVJfQ05UTCwgKHJpbmZvLT5kcF9ndWlfbWFzdGVyX2NudGwgfAotCQkJCSAgICBHTUNfQlJVU0hfU09MSURfQ09MT1IgfAotCQkJCSAgICBHTUNfU1JDX0RBVEFUWVBFX0NPTE9SKSk7Ci0KLQlyYWRlb25fZmlmb193YWl0ICg3KTsKLQotCS8qIGNsZWFyIGxpbmUgZHJhd2luZyByZWdzICovCi0JT1VUUkVHKERTVF9MSU5FX1NUQVJULCAwKTsKLQlPVVRSRUcoRFNUX0xJTkVfRU5ELCAwKTsKLQotCS8qIHNldCBicnVzaCBjb2xvciByZWdzICovCi0JT1VUUkVHKERQX0JSVVNIX0ZSR0RfQ0xSLCAweGZmZmZmZmZmKTsKLQlPVVRSRUcoRFBfQlJVU0hfQktHRF9DTFIsIDB4MDAwMDAwMDApOwotCi0JLyogc2V0IHNvdXJjZSBjb2xvciByZWdzICovCi0JT1VUUkVHKERQX1NSQ19GUkdEX0NMUiwgMHhmZmZmZmZmZik7Ci0JT1VUUkVHKERQX1NSQ19CS0dEX0NMUiwgMHgwMDAwMDAwMCk7Ci0KLQkvKiBkZWZhdWx0IHdyaXRlIG1hc2sgKi8KLQlPVVRSRUcoRFBfV1JJVEVfTVNLLCAweGZmZmZmZmZmKTsKLQotCXJhZGVvbl9lbmdpbmVfaWRsZSAoKTsKLX0KLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCByYWRlb25faW5pdF9kaXNwIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCi17Ci0gICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvID0gJnJpbmZvLT5pbmZvOwotCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7Ci0KLSAgICAgICAgdmFyID0gcmFkZW9uZmJfZGVmYXVsdF92YXI7Ci0gICAgICAgIGlmICgocmFkZW9uX2luaXRfZGlzcF92YXIocmluZm8sICZ2YXIpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0JcmluZm8tPmRlcHRoID0gdmFyX3RvX2RlcHRoKCZ2YXIpOwotCXJpbmZvLT5icHAgPSB2YXIuYml0c19wZXJfcGl4ZWw7Ci0gICAgICAgIAotCWluZm8tPnZhciA9IHZhcjsKLQlmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOwotCi0JdmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHJhZGVvbl9pbml0X2Rpc3BfdmFyIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sCi0JCQkJIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQotewotI2lmbmRlZiBNT0RVTEUKLSAgICAgICAgaWYgKG1vZGVfb3B0aW9uKQotICAgICAgICAgICAgICAgIGZiX2ZpbmRfbW9kZSAodmFyLCAmcmluZm8tPmluZm8sIG1vZGVfb3B0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgOCk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotCWlmIChyaW5mby0+dXNlX2RlZmF1bHRfdmFyKQotCQkvKiBXZSB3aWxsIHVzZSB0aGUgbW9kaWZpZWQgZGVmYXVsdCBmYXIgKi8KLQkJKnZhciA9IHJhZGVvbmZiX2RlZmF1bHRfdmFyOwotCWVsc2UKLQotICAgICAgICAgICAgICAgIGZiX2ZpbmRfbW9kZSAodmFyLCAmcmluZm8tPmluZm8sICI2NDB4NDgwLThANjAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7Ci0KLQlpZiAobm9hY2NlbCkKLQkJdmFyLT5hY2NlbF9mbGFncyAmPSB+RkJfQUNDRUxGX1RFWFQ7Ci0JZWxzZQotCQl2YXItPmFjY2VsX2ZsYWdzIHw9IEZCX0FDQ0VMRl9URVhUOwotIAotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHJhZGVvbl9kb19tYXhpbWl6ZShzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBub20sIGludCBkZW4pCi17Ci0gICAgICAgIHN0YXRpYyBzdHJ1Y3QgewotICAgICAgICAgICAgICAgIGludCB4cmVzLCB5cmVzOwotICAgICAgICB9IG1vZGVzW10gPSB7Ci0gICAgICAgICAgICAgICAgezE2MDAsIDEyODB9LAotICAgICAgICAgICAgICAgIHsxMjgwLCAxMDI0fSwKLSAgICAgICAgICAgICAgICB7MTAyNCwgNzY4fSwKLSAgICAgICAgICAgICAgICB7ODAwLCA2MDB9LAotICAgICAgICAgICAgICAgIHs2NDAsIDQ4MH0sCi0gICAgICAgICAgICAgICAgey0xLCAtMX0KLSAgICAgICAgfTsKLSAgICAgICAgaW50IGk7Ci0gIAotICAgICAgICAvKiB1c2UgaGlnaGVzdCBwb3NzaWJsZSB2aXJ0dWFsIHJlc29sdXRpb24gKi8KLSAgICAgICAgaWYgKHYtPnhyZXNfdmlydHVhbCA9PSAtMSAmJiB2LT55cmVzX3ZpcnR1YWwgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoInJhZGVvbmZiOiB1c2luZyBtYXggYXZhaWxhYmxlIHZpcnR1YWwgcmVzb2x1dGlvblxuIik7Ci0gICAgICAgICAgICAgICAgZm9yIChpPTA7IG1vZGVzW2ldLnhyZXMgIT0gLTE7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVzW2ldLnhyZXMgKiBub20gLyBkZW4gKiBtb2Rlc1tpXS55cmVzIDwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW5mby0+dmlkZW9fcmFtIC8gMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtb2Rlc1tpXS54cmVzID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoInJhZGVvbmZiOiBjb3VsZCBub3QgZmluZCB2aXJ0dWFsIHJlc29sdXRpb24gdGhhdCBmaXRzIGludG8gdmlkZW8gbWVtb3J5IVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdi0+eHJlc192aXJ0dWFsID0gbW9kZXNbaV0ueHJlczsgIAotICAgICAgICAgICAgICAgIHYtPnlyZXNfdmlydHVhbCA9IG1vZGVzW2ldLnlyZXM7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJyYWRlb25mYjogdmlydHVhbCByZXNvbHV0aW9uIHNldCB0byBtYXggb2YgJWR4JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB2LT54cmVzX3ZpcnR1YWwsIHYtPnlyZXNfdmlydHVhbCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodi0+eHJlc192aXJ0dWFsID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgdi0+eHJlc192aXJ0dWFsID0gKHJpbmZvLT52aWRlb19yYW0gKiBkZW4gLyAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9tICogdi0+eXJlc192aXJ0dWFsICogMikpICYgfjE1OwotICAgICAgICB9IGVsc2UgaWYgKHYtPnlyZXNfdmlydHVhbCA9PSAtMSkgewotICAgICAgICAgICAgICAgIHYtPnhyZXNfdmlydHVhbCA9ICh2LT54cmVzX3ZpcnR1YWwgKyAxNSkgJiB+MTU7Ci0gICAgICAgICAgICAgICAgdi0+eXJlc192aXJ0dWFsID0gcmluZm8tPnZpZGVvX3JhbSAqIGRlbiAvCi0gICAgICAgICAgICAgICAgICAgICAgICAobm9tICogdi0+eHJlc192aXJ0dWFsICoyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAodi0+eHJlc192aXJ0dWFsICogbm9tIC8gZGVuICogdi0+eXJlc192aXJ0dWFsID4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJpbmZvLT52aWRlb19yYW0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICBpZiAodi0+eHJlc192aXJ0dWFsICogbm9tIC8gZGVuID49IDgxOTIpIHsKLSAgICAgICAgICAgICAgICB2LT54cmVzX3ZpcnR1YWwgPSA4MTkyICogZGVuIC8gbm9tIC0gMTY7Ci0gICAgICAgIH0gICAgICAgCi0gICAgICAgIAotICAgICAgICBpZiAodi0+eHJlc192aXJ0dWFsIDwgdi0+eHJlcykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYgKHYtPnlyZXNfdmlydHVhbCA8IHYtPnlyZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHJhZGVvbmZiX2NoZWNrX3ZhciAoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotICAgICAgICBzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8gPSAoc3RydWN0IHJhZGVvbmZiX2luZm8gKikgaW5mby0+cGFyOwotICAgICAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdjsKLSAgICAgICAgaW50IG5vbSwgZGVuOwotCi0gICAgICAgIG1lbWNweSAoJnYsIHZhciwgc2l6ZW9mICh2KSk7Ci0KLSAgICAgICAgc3dpdGNoICh2LmJpdHNfcGVyX3BpeGVsKSB7Ci0JCWNhc2UgMCAuLi4gODoKLQkJCXYuYml0c19wZXJfcGl4ZWwgPSA4OwotCQkJYnJlYWs7Ci0JCWNhc2UgOSAuLi4gMTY6Ci0JCQl2LmJpdHNfcGVyX3BpeGVsID0gMTY7Ci0JCQlicmVhazsKLQkJY2FzZSAxNyAuLi4gMjQ6Ci0jaWYgMCAvKiBEb2Vzbid0IHNlZW0gdG8gd29yayAqLwotCQkJdi5iaXRzX3Blcl9waXhlbCA9IDI0OwotCQkJYnJlYWs7Ci0jZW5kaWYJCQkKLQkJCXJldHVybiAtRUlOVkFMOwotCQljYXNlIDI1IC4uLiAzMjoKLQkJCXYuYml0c19wZXJfcGl4ZWwgPSAzMjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoICh2YXJfdG9fZGVwdGgoJnYpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSA4OgotICAgICAgICAgICAgICAgICAgICAgICAgbm9tID0gZGVuID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYucmVkLm9mZnNldCA9IHYuZ3JlZW4ub2Zmc2V0ID0gdi5ibHVlLm9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnJlZC5sZW5ndGggPSB2LmdyZWVuLmxlbmd0aCA9IHYuYmx1ZS5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgICAgICAgICAgdi50cmFuc3Aub2Zmc2V0ID0gdi50cmFuc3AubGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQljYXNlIDE1OgotCQkJbm9tID0gMjsKLQkJCWRlbiA9IDE7Ci0JCQl2LnJlZC5vZmZzZXQgPSAxMDsKLQkJCXYuZ3JlZW4ub2Zmc2V0ID0gNTsKLQkJCXYuYmx1ZS5vZmZzZXQgPSAwOwotCQkJdi5yZWQubGVuZ3RoID0gdi5ncmVlbi5sZW5ndGggPSB2LmJsdWUubGVuZ3RoID0gNTsKLQkJCXYudHJhbnNwLm9mZnNldCA9IHYudHJhbnNwLmxlbmd0aCA9IDA7Ci0JCQlicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDE2OgotICAgICAgICAgICAgICAgICAgICAgICAgbm9tID0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnJlZC5vZmZzZXQgPSAxMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuZ3JlZW4ub2Zmc2V0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuYmx1ZS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5yZWQubGVuZ3RoID0gNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuZ3JlZW4ubGVuZ3RoID0gNjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuYmx1ZS5sZW5ndGggPSA1OwotICAgICAgICAgICAgICAgICAgICAgICAgdi50cmFuc3Aub2Zmc2V0ID0gdi50cmFuc3AubGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSAyNDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vbSA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZW4gPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5yZWQub2Zmc2V0ID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmdyZWVuLm9mZnNldCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmJsdWUub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYucmVkLmxlbmd0aCA9IHYuYmx1ZS5sZW5ndGggPSB2LmdyZWVuLmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnRyYW5zcC5vZmZzZXQgPSB2LnRyYW5zcC5sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vbSA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZW4gPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5yZWQub2Zmc2V0ID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmdyZWVuLm9mZnNldCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmJsdWUub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYucmVkLmxlbmd0aCA9IHYuYmx1ZS5sZW5ndGggPSB2LmdyZWVuLmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnRyYW5zcC5vZmZzZXQgPSAyNDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYudHJhbnNwLmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrICgicmFkZW9uZmI6IG1vZGUgJWR4JWR4JWQgcmVqZWN0ZWQsIGNvbG9yIGRlcHRoIGludmFsaWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJhZGVvbl9kb19tYXhpbWl6ZShyaW5mbywgdmFyLCAmdiwgbm9tLCBkZW4pIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsgIAotICAgICAgICAgICAgICAgIAotICAgICAgICBpZiAodi54b2Zmc2V0IDwgMCkKLSAgICAgICAgICAgICAgICB2LnhvZmZzZXQgPSAwOwotICAgICAgICBpZiAodi55b2Zmc2V0IDwgMCkKLSAgICAgICAgICAgICAgICB2LnlvZmZzZXQgPSAwOwotICAgICAgICAgCi0gICAgICAgIGlmICh2LnhvZmZzZXQgPiB2LnhyZXNfdmlydHVhbCAtIHYueHJlcykKLSAgICAgICAgICAgICAgICB2LnhvZmZzZXQgPSB2LnhyZXNfdmlydHVhbCAtIHYueHJlcyAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYgKHYueW9mZnNldCA+IHYueXJlc192aXJ0dWFsIC0gdi55cmVzKQotICAgICAgICAgICAgICAgIHYueW9mZnNldCA9IHYueXJlc192aXJ0dWFsIC0gdi55cmVzIC0gMTsKLSAgICAgICAgIAotICAgICAgICB2LnJlZC5tc2JfcmlnaHQgPSB2LmdyZWVuLm1zYl9yaWdodCA9IHYuYmx1ZS5tc2JfcmlnaHQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICB2LnRyYW5zcC5vZmZzZXQgPSB2LnRyYW5zcC5sZW5ndGggPQotICAgICAgICAgICAgICAgICAgICAgICAgICB2LnRyYW5zcC5tc2JfcmlnaHQgPSAwOwotCi0JaWYgKG5vYWNjZWwpCi0JCXYuYWNjZWxfZmxhZ3MgPSAwOwotCQkJCi0gICAgICAgIG1lbWNweSh2YXIsICZ2LCBzaXplb2YodikpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCByYWRlb25mYl9wYW5fZGlzcGxheSAoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLSAgICAgICAgc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvID0gKHN0cnVjdCByYWRlb25mYl9pbmZvICopIGluZm87Ci0KLSAgICAgICAgaWYgKCh2YXItPnhvZmZzZXQgKyB2YXItPnhyZXMgPiB2YXItPnhyZXNfdmlydHVhbCkKLQkgICAgfHwgKHZhci0+eW9mZnNldCArIHZhci0+eXJlcyA+IHZhci0+eXJlc192aXJ0dWFsKSkKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIAotICAgICAgICBpZiAocmluZm8tPmFzbGVlcCkKLSAgICAgICAgCXJldHVybiAwOwotCi0gICAgICAgIE9VVFJFRyhDUlRDX09GRlNFVCwgKCh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCArIHZhci0+eG9mZnNldCkKLQkJCSAgICAgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gOCkgJiB+Nyk7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgcmFkZW9uZmJfaW9jdGwgKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0gICAgICAgIHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyA9IChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqKSBpbmZvOwotCXVuc2lnbmVkIGludCB0bXA7Ci0JdTMyIHZhbHVlID0gMDsKLQlpbnQgcmM7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCQkvKgotCQkgKiBUT0RPOiAgc2V0IG1pcnJvciBhY2NvcmRpbmdseSBmb3Igbm9uLU1vYmlsaXR5IGNoaXBzZXRzIHdpdGggMiBDUlRDJ3MKLQkJICovCi0JCWNhc2UgRkJJT19SQURFT05fU0VUX01JUlJPUjoKLQkJCXN3aXRjaCAocmluZm8tPmFyY2gpIHsKLQkJCQljYXNlIFJBREVPTl9SMTAwOgotCQkJCWNhc2UgUkFERU9OX1JWMTAwOgotCQkJCWNhc2UgUkFERU9OX1IyMDA6Ci0JCQkJY2FzZSBSQURFT05fUlYyMDA6Ci0JCQkJY2FzZSBSQURFT05fUlYyNTA6Ci0JCQkJY2FzZSBSQURFT05fUjMwMDoKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJLyogUkFERU9OIE02LCBSQURFT05fTTcsIFJBREVPTl9NOSAqLwotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJcmMgPSBnZXRfdXNlcih2YWx1ZSwgKF9fdTMyIF9fdXNlciAqKWFyZyk7Ci0KLQkJCWlmIChyYykKLQkJCQlyZXR1cm4gcmM7Ci0KLQkJCWlmICh2YWx1ZSAmIDB4MDEpIHsKLQkJCQl0bXAgPSBJTlJFRyhMVkRTX0dFTl9DTlRMKTsKLQotCQkJCXRtcCB8PSAoTFZEU19PTiB8IExWRFNfQkxPTik7Ci0JCQl9IGVsc2UgewotCQkJCXRtcCA9IElOUkVHKExWRFNfR0VOX0NOVEwpOwotCi0JCQkJdG1wICY9IH4oTFZEU19PTiB8IExWRFNfQkxPTik7Ci0JCQl9Ci0KLQkJCU9VVFJFRyhMVkRTX0dFTl9DTlRMLCB0bXApOwotCi0JCQlpZiAodmFsdWUgJiAweDAyKSB7Ci0JCQkJdG1wID0gSU5SRUcoQ1JUQ19FWFRfQ05UTCk7Ci0JCQkJdG1wIHw9IENSVENfQ1JUX09OOwotCi0JCQkJbWlycm9yID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJdG1wID0gSU5SRUcoQ1JUQ19FWFRfQ05UTCk7Ci0JCQkJdG1wICY9IH5DUlRDX0NSVF9PTjsKLQotCQkJCW1pcnJvciA9IDA7Ci0JCQl9Ci0KLQkJCU9VVFJFRyhDUlRDX0VYVF9DTlRMLCB0bXApOwotCi0JCQlicmVhazsKLQkJY2FzZSBGQklPX1JBREVPTl9HRVRfTUlSUk9SOgotCQkJc3dpdGNoIChyaW5mby0+YXJjaCkgewotCQkJCWNhc2UgUkFERU9OX1IxMDA6Ci0JCQkJY2FzZSBSQURFT05fUlYxMDA6Ci0JCQkJY2FzZSBSQURFT05fUjIwMDoKLQkJCQljYXNlIFJBREVPTl9SVjIwMDoKLQkJCQljYXNlIFJBREVPTl9SVjI1MDoKLQkJCQljYXNlIFJBREVPTl9SMzAwOgotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQlkZWZhdWx0OgotCQkJCQkvKiBSQURFT04gTTYsIFJBREVPTl9NNywgUkFERU9OX005ICovCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQl0bXAgPSBJTlJFRyhMVkRTX0dFTl9DTlRMKTsKLQkJCWlmICgoTFZEU19PTiB8IExWRFNfQkxPTikgJiB0bXApCi0JCQkJdmFsdWUgfD0gMHgwMTsKLQotCQkJdG1wID0gSU5SRUcoQ1JUQ19FWFRfQ05UTCk7Ci0JCQlpZiAoQ1JUQ19DUlRfT04gJiB0bXApCi0JCQkJdmFsdWUgfD0gMHgwMjsKLQotCQkJcmV0dXJuIHB1dF91c2VyKHZhbHVlLCAoX191MzIgX191c2VyICopYXJnKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi0KLXN0YXRpYyBpbnQgcmFkZW9uZmJfYmxhbmsgKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0gICAgICAgIHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyA9IChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqKSBpbmZvOwotICAgICAgICB1MzIgdmFsID0gSU5SRUcoQ1JUQ19FWFRfQ05UTCk7Ci0JdTMyIHZhbDIgPSBJTlJFRyhMVkRTX0dFTl9DTlRMKTsKLQotCWlmIChyaW5mby0+YXNsZWVwKQotCQlyZXR1cm4gMDsKLQkJCi0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JaWYgKHJpbmZvLT5kdmlEaXNwX3R5cGUgPT0gTVRfTENEICYmIG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7Ci0JCXNldF9iYWNrbGlnaHRfZW5hYmxlKCFibGFuayk7Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIC8qIHJlc2V0IGl0ICovCi0gICAgICAgIHZhbCAmPSB+KENSVENfRElTUExBWV9ESVMgfCBDUlRDX0hTWU5DX0RJUyB8Ci0gICAgICAgICAgICAgICAgIENSVENfVlNZTkNfRElTKTsKLQl2YWwyICY9IH4oTFZEU19ESVNQTEFZX0RJUyk7Ci0KLSAgICAgICAgc3dpdGNoIChibGFuaykgewotCSAgICAgICAgY2FzZSBGQl9CTEFOS19VTkJMQU5LOgotCSAgICAgICAgY2FzZSBGQl9CTEFOS19OT1JNQUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgfD0gKENSVENfRElTUExBWV9ESVMgfCBDUlRDX1ZTWU5DX0RJUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgfD0gKENSVENfRElTUExBWV9ESVMgfCBDUlRDX0hTWU5DX0RJUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCB8PSAoQ1JUQ19ESVNQTEFZX0RJUyB8IENSVENfVlNZTkNfRElTIHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSVENfSFNZTkNfRElTKTsKLQkJCXZhbDIgfD0gKExWRFNfRElTUExBWV9ESVMpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotCXN3aXRjaCAocmluZm8tPmR2aURpc3BfdHlwZSkgewotCQljYXNlIE1UX0xDRDoKLQkJCU9VVFJFRyhMVkRTX0dFTl9DTlRMLCB2YWwyKTsKLQkJCWJyZWFrOwotCQljYXNlIE1UX0NSVDoKLQkJZGVmYXVsdDoKLQkJICAgICAgICBPVVRSRUcoQ1JUQ19FWFRfQ05UTCwgdmFsKTsKLQkJCWJyZWFrOwotCX0KLQotCS8qIGxldCBmYmNvbiBkbyBhIHNvZnQgYmxhbmsgZm9yIHVzICovCi0JcmV0dXJuIChibGFuayA9PSBGQl9CTEFOS19OT1JNQUwpID8gMSA6IDA7Ci19Ci0KLQotc3RhdGljIGludCByYWRlb25mYl9zZXRjb2xyZWcgKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotICAgICAgICBzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8gPSAoc3RydWN0IHJhZGVvbmZiX2luZm8gKikgaW5mbzsKLQl1MzIgcGluZGV4LCB2Y2xrX2NudGw7Ci0JdW5zaWduZWQgaW50IGk7Ci0JCi0JaWYgKHJlZ25vID4gMjU1KQotCQlyZXR1cm4gMTsKLQotCXJlZCA+Pj0gODsKLQlncmVlbiA+Pj0gODsKLQlibHVlID4+PSA4OwotCXJpbmZvLT5wYWxldHRlW3JlZ25vXS5yZWQgPSByZWQ7Ci0JcmluZm8tPnBhbGV0dGVbcmVnbm9dLmdyZWVuID0gZ3JlZW47Ci0JcmluZm8tPnBhbGV0dGVbcmVnbm9dLmJsdWUgPSBibHVlOwotCi0gICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgcGluZGV4ID0gcmVnbm87Ci0KLSAgICAgICAgaWYgKCFyaW5mby0+YXNsZWVwKSB7Ci0JCXZjbGtfY250bCA9IElOUExMKFZDTEtfRUNQX0NOVEwpOwotCQlPVVRQTEwoVkNMS19FQ1BfQ05UTCwgdmNsa19jbnRsICYgflBJWENMS19EQUNfQUxXQVlTX09OYik7Ci0KLQkJaWYgKHJpbmZvLT5icHAgPT0gMTYpIHsKLQkJCXBpbmRleCA9IHJlZ25vICogODsKLQotCQkJaWYgKHJpbmZvLT5kZXB0aCA9PSAxNiAmJiByZWdubyA+IDYzKQotCQkJCXJldHVybiAxOwotCQkJaWYgKHJpbmZvLT5kZXB0aCA9PSAxNSAmJiByZWdubyA+IDMxKQotCQkJCXJldHVybiAxOwotCi0JCQkvKiBGb3IgNTY1LCB0aGUgZ3JlZW4gY29tcG9uZW50IGlzIG1peGVkIG9uZSBvcmRlciBiZWxvdyAqLwotCQkJaWYgKHJpbmZvLT5kZXB0aCA9PSAxNikgewotCQkgICAgICAgICAgICAgICAgT1VUUkVHKFBBTEVUVEVfSU5ERVgsIHBpbmRleD4+MSk7Ci0JICAgICAgIAkgICAgICAgICAJT1VUUkVHKFBBTEVUVEVfREFUQSwgKHJpbmZvLT5wYWxldHRlW3JlZ25vPj4xXS5yZWQgPDwgMTYpIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAJKGdyZWVuIDw8IDgpIHwgKHJpbmZvLT5wYWxldHRlW3JlZ25vPj4xXS5ibHVlKSk7Ci0JICAgICAgICAgICAgICAgIAlncmVlbiA9IHJpbmZvLT5wYWxldHRlW3JlZ25vPDwxXS5ncmVlbjsKLQkgICAgICAgIAl9Ci0JCX0KLQotCQlpZiAocmluZm8tPmRlcHRoICE9IDE2IHx8IHJlZ25vIDwgMzIpIHsKLQkJCU9VVFJFRyhQQUxFVFRFX0lOREVYLCBwaW5kZXgpOwotCQkJT1VUUkVHKFBBTEVUVEVfREFUQSwgKHJlZCA8PCAxNikgfCAoZ3JlZW4gPDwgOCkgfCBibHVlKTsKLQkJfQotCi0JCU9VVFBMTChWQ0xLX0VDUF9DTlRMLCB2Y2xrX2NudGwpOwotCX0KLSAJaWYgKHJlZ25vIDwgMTYpIHsKLSAgICAgICAgCXN3aXRjaCAocmluZm8tPmRlcHRoKSB7Ci0JCWNhc2UgMTU6Ci0JCQkoKHUxNiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQotCQkJICAgIChyZWdubyA8PCAxMCkgfCAocmVnbm8gPDwgNSkgfCByZWdubzsKLQkJCWJyZWFrOwotCQljYXNlIDE2OgotCQkJKCh1MTYgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCSAgICAocmVnbm8gPDwgMTEpIHwgKHJlZ25vIDw8IDYpIHwgcmVnbm87Ci0JCQlicmVhazsKLQkJY2FzZSAyNDoKLQkJCSgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9Ci0JCQkgICAgKHJlZ25vIDw8IDE2KSB8IChyZWdubyA8PCA4KSB8IHJlZ25vOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzI6Ci0JCQlpID0gKHJlZ25vIDw8IDgpIHwgcmVnbm87Ci0JCQkoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQotCQkJICAgIChpIDw8IDE2KSB8IGk7Ci0JCQlicmVhazsKLQkJfQotICAgICAgICB9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotCi1zdGF0aWMgdm9pZCByYWRlb25fc2F2ZV9zdGF0ZSAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYWRlb25fcmVncyAqc2F2ZSkKLXsKLQkvKiBDUlRDIHJlZ3MgKi8KLQlzYXZlLT5jcnRjX2dlbl9jbnRsID0gSU5SRUcoQ1JUQ19HRU5fQ05UTCk7Ci0Jc2F2ZS0+Y3J0Y19leHRfY250bCA9IElOUkVHKENSVENfRVhUX0NOVEwpOwotCXNhdmUtPmRhY19jbnRsID0gSU5SRUcoREFDX0NOVEwpOwotICAgICAgICBzYXZlLT5jcnRjX2hfdG90YWxfZGlzcCA9IElOUkVHKENSVENfSF9UT1RBTF9ESVNQKTsKLSAgICAgICAgc2F2ZS0+Y3J0Y19oX3N5bmNfc3RydF93aWQgPSBJTlJFRyhDUlRDX0hfU1lOQ19TVFJUX1dJRCk7Ci0gICAgICAgIHNhdmUtPmNydGNfdl90b3RhbF9kaXNwID0gSU5SRUcoQ1JUQ19WX1RPVEFMX0RJU1ApOwotICAgICAgICBzYXZlLT5jcnRjX3Zfc3luY19zdHJ0X3dpZCA9IElOUkVHKENSVENfVl9TWU5DX1NUUlRfV0lEKTsKLQlzYXZlLT5jcnRjX3BpdGNoID0gSU5SRUcoQ1JUQ19QSVRDSCk7Ci0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0Jc2F2ZS0+c3VyZmFjZV9jbnRsID0gSU5SRUcoU1VSRkFDRV9DTlRMKTsKLSNlbmRpZgotCi0JLyogRlAgcmVncyAqLwotCXNhdmUtPmZwX2NydGNfaF90b3RhbF9kaXNwID0gSU5SRUcoRlBfQ1JUQ19IX1RPVEFMX0RJU1ApOwotCXNhdmUtPmZwX2NydGNfdl90b3RhbF9kaXNwID0gSU5SRUcoRlBfQ1JUQ19WX1RPVEFMX0RJU1ApOwotCXNhdmUtPmZwX2dlbl9jbnRsID0gSU5SRUcoRlBfR0VOX0NOVEwpOwotCXNhdmUtPmZwX2hfc3luY19zdHJ0X3dpZCA9IElOUkVHKEZQX0hfU1lOQ19TVFJUX1dJRCk7Ci0Jc2F2ZS0+ZnBfaG9yel9zdHJldGNoID0gSU5SRUcoRlBfSE9SWl9TVFJFVENIKTsKLQlzYXZlLT5mcF92X3N5bmNfc3RydF93aWQgPSBJTlJFRyhGUF9WX1NZTkNfU1RSVF9XSUQpOwotCXNhdmUtPmZwX3ZlcnRfc3RyZXRjaCA9IElOUkVHKEZQX1ZFUlRfU1RSRVRDSCk7Ci0Jc2F2ZS0+bHZkc19nZW5fY250bCA9IElOUkVHKExWRFNfR0VOX0NOVEwpOwotCXNhdmUtPmx2ZHNfcGxsX2NudGwgPSBJTlJFRyhMVkRTX1BMTF9DTlRMKTsKLQlzYXZlLT50bWRzX2NyYyA9IElOUkVHKFRNRFNfQ1JDKTsKLQlzYXZlLT50bWRzX3RyYW5zbWl0dGVyX2NudGwgPSBJTlJFRyhUTURTX1RSQU5TTUlUVEVSX0NOVEwpOwotCXNhdmUtPnZjbGtfZWNwX2NudGwgPSBJTlBMTChWQ0xLX0VDUF9DTlRMKTsKLX0KLQotCi0KLXN0YXRpYyBpbnQgcmFkZW9uZmJfc2V0X3BhciAoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvID0gKHN0cnVjdCByYWRlb25mYl9pbmZvICopaW5mby0+cGFyOwotCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqbW9kZSA9ICZpbmZvLT52YXI7Ci0Jc3RydWN0IHJhZGVvbl9yZWdzIG5ld21vZGU7Ci0JaW50IGhUb3RhbCwgdlRvdGFsLCBoU3luY1N0YXJ0LCBoU3luY0VuZCwKLQkgICAgaFN5bmNQb2wsIHZTeW5jU3RhcnQsIHZTeW5jRW5kLCB2U3luY1BvbCwgY1N5bmM7Ci0JdTggaHN5bmNfYWRqX3RhYltdID0gezAsIDB4MTIsIDksIDksIDYsIDV9OwotCXU4IGhzeW5jX2Z1ZGdlX2ZwW10gPSB7MiwgMiwgMCwgMCwgNSwgNX07Ci0JdTMyIGRvdENsb2NrID0gMTAwMDAwMDAwMCAvIG1vZGUtPnBpeGNsb2NrLAotCSAgICBzeW5jLCBoX3N5bmNfcG9sLCB2X3N5bmNfcG9sOwotCWludCBmcmVxID0gZG90Q2xvY2sgLyAxMDsgIC8qIHggMTAwICovCi0gICAgICAgIGludCB4Y2xrX2ZyZXEsIHZjbGtfZnJlcSwgeGNsa19wZXJfdHJhbnMsIHhjbGtfcGVyX3RyYW5zX3ByZWNpc2U7Ci0gICAgICAgIGludCB1c2VhYmxlX3ByZWNpc2lvbiwgcm9mZiwgcm9uOwotICAgICAgICBpbnQgbWluX2JpdHMsIGZvcm1hdCA9IDA7Ci0JaW50IGhzeW5jX3N0YXJ0LCBoc3luY19mdWRnZSwgYnl0cHAsIGhzeW5jX3dpZCwgdnN5bmNfd2lkOwotCWludCBwcmltYXJ5X21vbiA9IFBSSU1BUllfTU9OSVRPUihyaW5mbyk7Ci0JaW50IGRlcHRoID0gdmFyX3RvX2RlcHRoKG1vZGUpOwotICAgICAgICBpbnQgYWNjZWwgPSAobW9kZS0+YWNjZWxfZmxhZ3MgJiBGQl9BQ0NFTEZfVEVYVCkgIT0gMDsKLQotCXJpbmZvLT54cmVzID0gbW9kZS0+eHJlczsKLQlyaW5mby0+eXJlcyA9IG1vZGUtPnlyZXM7Ci0JcmluZm8tPnhyZXNfdmlydHVhbCA9IG1vZGUtPnhyZXNfdmlydHVhbDsKLQlyaW5mby0+eXJlc192aXJ0dWFsID0gbW9kZS0+eXJlc192aXJ0dWFsOwotCXJpbmZvLT5waXhjbG9jayA9IG1vZGUtPnBpeGNsb2NrOwotCi0JaFN5bmNTdGFydCA9IG1vZGUtPnhyZXMgKyBtb2RlLT5yaWdodF9tYXJnaW47Ci0JaFN5bmNFbmQgPSBoU3luY1N0YXJ0ICsgbW9kZS0+aHN5bmNfbGVuOwotCWhUb3RhbCA9IGhTeW5jRW5kICsgbW9kZS0+bGVmdF9tYXJnaW47Ci0KLQl2U3luY1N0YXJ0ID0gbW9kZS0+eXJlcyArIG1vZGUtPmxvd2VyX21hcmdpbjsKLQl2U3luY0VuZCA9IHZTeW5jU3RhcnQgKyBtb2RlLT52c3luY19sZW47Ci0JdlRvdGFsID0gdlN5bmNFbmQgKyBtb2RlLT51cHBlcl9tYXJnaW47Ci0KLQlpZiAoKHByaW1hcnlfbW9uID09IE1UX0RGUCkgfHwgKHByaW1hcnlfbW9uID09IE1UX0xDRCkpIHsKLQkJaWYgKHJpbmZvLT5wYW5lbF94cmVzIDwgbW9kZS0+eHJlcykKLQkJCXJpbmZvLT54cmVzID0gbW9kZS0+eHJlcyA9IHJpbmZvLT5wYW5lbF94cmVzOwotCQlpZiAocmluZm8tPnBhbmVsX3lyZXMgPCBtb2RlLT55cmVzKQotCQkJcmluZm8tPnlyZXMgPSBtb2RlLT55cmVzID0gcmluZm8tPnBhbmVsX3lyZXM7Ci0KLQkJaFRvdGFsID0gbW9kZS0+eHJlcyArIHJpbmZvLT5oYmxhbms7Ci0JCWhTeW5jU3RhcnQgPSBtb2RlLT54cmVzICsgcmluZm8tPmhPdmVyX3BsdXM7Ci0JCWhTeW5jRW5kID0gaFN5bmNTdGFydCArIHJpbmZvLT5oU3luY193aWR0aDsKLQotCQl2VG90YWwgPSBtb2RlLT55cmVzICsgcmluZm8tPnZibGFuazsKLQkJdlN5bmNTdGFydCA9IG1vZGUtPnlyZXMgKyByaW5mby0+dk92ZXJfcGx1czsKLQkJdlN5bmNFbmQgPSB2U3luY1N0YXJ0ICsgcmluZm8tPnZTeW5jX3dpZHRoOwotCX0KLQotCXN5bmMgPSBtb2RlLT5zeW5jOwotCWhfc3luY19wb2wgPSBzeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QgPyAwIDogMTsKLQl2X3N5bmNfcG9sID0gc3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCA/IDAgOiAxOwotCi0JUlRSQUNFKCJoU3RhcnQgPSAlZCwgaEVuZCA9ICVkLCBoVG90YWwgPSAlZFxuIiwKLQkJaFN5bmNTdGFydCwgaFN5bmNFbmQsIGhUb3RhbCk7Ci0JUlRSQUNFKCJ2U3RhcnQgPSAlZCwgdkVuZCA9ICVkLCB2VG90YWwgPSAlZFxuIiwKLQkJdlN5bmNTdGFydCwgdlN5bmNFbmQsIHZUb3RhbCk7Ci0KLQloc3luY193aWQgPSAoaFN5bmNFbmQgLSBoU3luY1N0YXJ0KSAvIDg7Ci0JdnN5bmNfd2lkID0gdlN5bmNFbmQgLSB2U3luY1N0YXJ0OwotCWlmIChoc3luY193aWQgPT0gMCkKLQkJaHN5bmNfd2lkID0gMTsKLQllbHNlIGlmIChoc3luY193aWQgPiAweDNmKQkvKiBtYXggKi8KLQkJaHN5bmNfd2lkID0gMHgzZjsKLQotCWlmICh2c3luY193aWQgPT0gMCkKLQkJdnN5bmNfd2lkID0gMTsKLQllbHNlIGlmICh2c3luY193aWQgPiAweDFmKQkvKiBtYXggKi8KLQkJdnN5bmNfd2lkID0gMHgxZjsKLQotCWhTeW5jUG9sID0gbW9kZS0+c3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUID8gMCA6IDE7Ci0JdlN5bmNQb2wgPSBtb2RlLT5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUID8gMCA6IDE7Ci0KLQljU3luYyA9IG1vZGUtPnN5bmMgJiBGQl9TWU5DX0NPTVBfSElHSF9BQ1QgPyAoMSA8PCA0KSA6IDA7Ci0KLQlmb3JtYXQgPSByYWRlb25fZ2V0X2RzdGJwcChkZXB0aCk7Ci0JYnl0cHAgPSBtb2RlLT5iaXRzX3Blcl9waXhlbCA+PiAzOwotCi0JaWYgKChwcmltYXJ5X21vbiA9PSBNVF9ERlApIHx8IChwcmltYXJ5X21vbiA9PSBNVF9MQ0QpKQotCQloc3luY19mdWRnZSA9IGhzeW5jX2Z1ZGdlX2ZwW2Zvcm1hdC0xXTsKLQllbHNlCi0JCWhzeW5jX2Z1ZGdlID0gaHN5bmNfYWRqX3RhYltmb3JtYXQtMV07Ci0KLQloc3luY19zdGFydCA9IGhTeW5jU3RhcnQgLSA4ICsgaHN5bmNfZnVkZ2U7Ci0KLQluZXdtb2RlLmNydGNfZ2VuX2NudGwgPSBDUlRDX0VYVF9ESVNQX0VOIHwgQ1JUQ19FTiB8Ci0JCQkJKGZvcm1hdCA8PCA4KTsKLQotCWlmICgocHJpbWFyeV9tb24gPT0gTVRfREZQKSB8fCAocHJpbWFyeV9tb24gPT0gTVRfTENEKSkgewotCQluZXdtb2RlLmNydGNfZXh0X2NudGwgPSBWR0FfQVRJX0xJTkVBUiB8IFhDUlRfQ05UX0VOOwotCQlpZiAobWlycm9yKQotCQkJbmV3bW9kZS5jcnRjX2V4dF9jbnRsIHw9IENSVENfQ1JUX09OOwotCi0JCW5ld21vZGUuY3J0Y19nZW5fY250bCAmPSB+KENSVENfREJMX1NDQU5fRU4gfAotCQkJCQkgICBDUlRDX0lOVEVSTEFDRV9FTik7Ci0JfSBlbHNlIHsKLQkJbmV3bW9kZS5jcnRjX2V4dF9jbnRsID0gVkdBX0FUSV9MSU5FQVIgfCBYQ1JUX0NOVF9FTiB8Ci0JCQkJCUNSVENfQ1JUX09OOwotCX0KLQotCW5ld21vZGUuZGFjX2NudGwgPSAvKiBJTlJFRyhEQUNfQ05UTCkgfCAqLyBEQUNfTUFTS19BTEwgfCBEQUNfVkdBX0FEUl9FTiB8Ci0JCQkgICBEQUNfOEJJVF9FTjsKLQotCW5ld21vZGUuY3J0Y19oX3RvdGFsX2Rpc3AgPSAoKCgoaFRvdGFsIC8gOCkgLSAxKSAmIDB4M2ZmKSB8Ci0JCQkJICAgICAoKChtb2RlLT54cmVzIC8gOCkgLSAxKSA8PCAxNikpOwotCi0JbmV3bW9kZS5jcnRjX2hfc3luY19zdHJ0X3dpZCA9ICgoaHN5bmNfc3RhcnQgJiAweDFmZmYpIHwKLQkJCQkJKGhzeW5jX3dpZCA8PCAxNikgfCAoaF9zeW5jX3BvbCA8PCAyMykpOwotCi0JbmV3bW9kZS5jcnRjX3ZfdG90YWxfZGlzcCA9ICgodlRvdGFsIC0gMSkgJiAweGZmZmYpIHwKLQkJCQkgICAgKChtb2RlLT55cmVzIC0gMSkgPDwgMTYpOwotCi0JbmV3bW9kZS5jcnRjX3Zfc3luY19zdHJ0X3dpZCA9ICgoKHZTeW5jU3RhcnQgLSAxKSAmIDB4ZmZmKSB8Ci0JCQkJCSAodnN5bmNfd2lkIDw8IDE2KSB8ICh2X3N5bmNfcG9sICA8PCAyMykpOwotCi0JaWYgKGFjY2VsKSB7Ci0JCS8qIFdlIGZpcnN0IGNhbGN1bGF0ZSB0aGUgZW5naW5lIHBpdGNoICovCi0JCXJpbmZvLT5waXRjaCA9ICgobW9kZS0+eHJlc192aXJ0dWFsICogKChtb2RlLT5iaXRzX3Blcl9waXhlbCArIDEpIC8gOCkgKyAweDNmKQotIAkJCQkmIH4oMHgzZikpID4+IDY7Ci0KLQkJLyogVGhlbiwgcmUtbXVsdGlwbHkgaXQgdG8gZ2V0IHRoZSBDUlRDIHBpdGNoICovCi0JCW5ld21vZGUuY3J0Y19waXRjaCA9IChyaW5mby0+cGl0Y2ggPDwgMykgLyAoKG1vZGUtPmJpdHNfcGVyX3BpeGVsICsgMSkgLyA4KTsKLQl9IGVsc2UKLQkJbmV3bW9kZS5jcnRjX3BpdGNoID0gKG1vZGUtPnhyZXNfdmlydHVhbCA+PiAzKTsKLQluZXdtb2RlLmNydGNfcGl0Y2ggfD0gKG5ld21vZGUuY3J0Y19waXRjaCA8PCAxNik7Ci0KLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQkvKgotCSAqIEl0IGxvb2tzIGxpa2UgcmVjZW50IGNoaXBzIGhhdmUgYSBwcm9ibGVtIHdpdGggU1VSRkFDRV9DTlRMLAotCSAqIHNldHRpbmcgU1VSRl9UUkFOU0xBVElPTl9ESVMgY29tcGxldGVseSBkaXNhYmxlcyB0aGUKLQkgKiBzd2FwcGVyIGFzIHdlbGwsIHNvIHdlIGxlYXZlIGl0IHVuc2V0IG5vdy4KLQkgKi8KLQluZXdtb2RlLnN1cmZhY2VfY250bCA9IDA7Ci0KLQkvKiBTZXR1cCBzd2FwcGluZyBvbiBib3RoIGFwZXJ0dXJlcywgdGhvdWdoIHdlIGN1cnJlbnRseQotCSAqIG9ubHkgdXNlIGFwZXJ0dXJlIDAsIGVuYWJsaW5nIHN3YXBwZXIgb24gYXBlcnR1cmUgMQotCSAqIHdvbid0IGhhcm0KLQkgKi8KLQlzd2l0Y2ggKG1vZGUtPmJpdHNfcGVyX3BpeGVsKSB7Ci0JCWNhc2UgMTY6Ci0JCQluZXdtb2RlLnN1cmZhY2VfY250bCB8PSBOT05TVVJGX0FQMF9TV1BfMTZCUFA7Ci0JCQluZXdtb2RlLnN1cmZhY2VfY250bCB8PSBOT05TVVJGX0FQMV9TV1BfMTZCUFA7Ci0JCQlicmVhazsKLQkJY2FzZSAyNDoJCi0JCWNhc2UgMzI6Ci0JCQluZXdtb2RlLnN1cmZhY2VfY250bCB8PSBOT05TVVJGX0FQMF9TV1BfMzJCUFA7Ci0JCQluZXdtb2RlLnN1cmZhY2VfY250bCB8PSBOT05TVVJGX0FQMV9TV1BfMzJCUFA7Ci0JCQlicmVhazsKLQl9Ci0jZW5kaWYKLQotCXJpbmZvLT5waXRjaCA9ICgobW9kZS0+eHJlc192aXJ0dWFsICogKChtb2RlLT5iaXRzX3Blcl9waXhlbCArIDEpIC8gOCkgKyAweDNmKQotIAkJCSYgfigweDNmKSkgLyA2NDsKLQotCVJUUkFDRSgiaF90b3RhbF9kaXNwID0gMHgleFx0ICAgaHN5bmNfc3RydF93aWQgPSAweCV4XG4iLAotCQluZXdtb2RlLmNydGNfaF90b3RhbF9kaXNwLCBuZXdtb2RlLmNydGNfaF9zeW5jX3N0cnRfd2lkKTsKLQlSVFJBQ0UoInZfdG90YWxfZGlzcCA9IDB4JXhcdCAgIHZzeW5jX3N0cnRfd2lkID0gMHgleFxuIiwKLQkJbmV3bW9kZS5jcnRjX3ZfdG90YWxfZGlzcCwgbmV3bW9kZS5jcnRjX3Zfc3luY19zdHJ0X3dpZCk7Ci0KLQluZXdtb2RlLnhyZXMgPSBtb2RlLT54cmVzOwotCW5ld21vZGUueXJlcyA9IG1vZGUtPnlyZXM7Ci0KLQlyaW5mby0+YnBwID0gbW9kZS0+Yml0c19wZXJfcGl4ZWw7Ci0JcmluZm8tPmRlcHRoID0gZGVwdGg7Ci0KLQlpZiAoZnJlcSA+IHJpbmZvLT5wbGwucHBsbF9tYXgpCi0JCWZyZXEgPSByaW5mby0+cGxsLnBwbGxfbWF4OwotCWlmIChmcmVxKjEyIDwgcmluZm8tPnBsbC5wcGxsX21pbikKLQkJZnJlcSA9IHJpbmZvLT5wbGwucHBsbF9taW4gLyAxMjsKLQotCXsKLQkJc3RydWN0IHsKLQkJCWludCBkaXZpZGVyOwotCQkJaW50IGJpdHZhbHVlOwotCQl9ICpwb3N0X2RpdiwKLQkJICBwb3N0X2RpdnNbXSA9IHsKLQkJCXsgMSwgIDAgfSwKLQkJCXsgMiwgIDEgfSwKLQkJCXsgNCwgIDIgfSwKLQkJCXsgOCwgIDMgfSwKLQkJCXsgMywgIDQgfSwKLQkJCXsgMTYsIDUgfSwKLQkJCXsgNiwgIDYgfSwKLQkJCXsgMTIsIDcgfSwKLQkJCXsgMCwgIDAgfSwKLQkJfTsKLQotCQlmb3IgKHBvc3RfZGl2ID0gJnBvc3RfZGl2c1swXTsgcG9zdF9kaXYtPmRpdmlkZXI7ICsrcG9zdF9kaXYpIHsKLQkJCXJpbmZvLT5wbGxfb3V0cHV0X2ZyZXEgPSBwb3N0X2Rpdi0+ZGl2aWRlciAqIGZyZXE7Ci0JCQlpZiAocmluZm8tPnBsbF9vdXRwdXRfZnJlcSA+PSByaW5mby0+cGxsLnBwbGxfbWluICAmJgotCQkJICAgIHJpbmZvLT5wbGxfb3V0cHV0X2ZyZXEgPD0gcmluZm8tPnBsbC5wcGxsX21heCkKLQkJCQlicmVhazsKLQkJfQotCi0JCXJpbmZvLT5wb3N0X2RpdiA9IHBvc3RfZGl2LT5kaXZpZGVyOwotCQlyaW5mby0+ZmJfZGl2ID0gcm91bmRfZGl2KHJpbmZvLT5wbGwucmVmX2RpdipyaW5mby0+cGxsX291dHB1dF9mcmVxLAotCQkJCQkgIHJpbmZvLT5wbGwucmVmX2Nsayk7Ci0JCW5ld21vZGUucHBsbF9yZWZfZGl2ID0gcmluZm8tPnBsbC5yZWZfZGl2OwotCQluZXdtb2RlLnBwbGxfZGl2XzMgPSByaW5mby0+ZmJfZGl2IHwgKHBvc3RfZGl2LT5iaXR2YWx1ZSA8PCAxNik7Ci0JfQotCW5ld21vZGUudmNsa19lY3BfY250bCA9IHJpbmZvLT5pbml0X3N0YXRlLnZjbGtfZWNwX2NudGw7Ci0KLSNpZmRlZiBDT05GSUdfUFBDX09GCi0JLyogR3Jvc3MgaGFjayBmb3IgaUJvb2sgd2l0aCBNNyB1bnRpbCBJIGZpbmQgb3V0IGEgcHJvcGVyIGZpeCAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpICYmIHJpbmZvLT5hcmNoID09IFJBREVPTl9NNykKLQkJbmV3bW9kZS5wcGxsX2Rpdl8zID0gMHgwMDA2MDBhZDsKLSNlbmRpZiAvKiBDT05GSUdfUFBDX09GICovCQotCi0JUlRSQUNFKCJwb3N0IGRpdiA9IDB4JXhcbiIsIHJpbmZvLT5wb3N0X2Rpdik7Ci0JUlRSQUNFKCJmYl9kaXYgPSAweCV4XG4iLCByaW5mby0+ZmJfZGl2KTsKLQlSVFJBQ0UoInBwbGxfZGl2XzMgPSAweCV4XG4iLCBuZXdtb2RlLnBwbGxfZGl2XzMpOwotCi0JLyogRERBICovCi0JdmNsa19mcmVxID0gcm91bmRfZGl2KHJpbmZvLT5wbGwucmVmX2NsayAqIHJpbmZvLT5mYl9kaXYsCi0JCQkgICAgICByaW5mby0+cGxsLnJlZl9kaXYgKiByaW5mby0+cG9zdF9kaXYpOwotCXhjbGtfZnJlcSA9IHJpbmZvLT5wbGwueGNsazsKLQotCXhjbGtfcGVyX3RyYW5zID0gcm91bmRfZGl2KHhjbGtfZnJlcSAqIDEyOCwgdmNsa19mcmVxICogbW9kZS0+Yml0c19wZXJfcGl4ZWwpOwotCi0JbWluX2JpdHMgPSBtaW5fYml0c19yZXEoeGNsa19wZXJfdHJhbnMpOwotCXVzZWFibGVfcHJlY2lzaW9uID0gbWluX2JpdHMgKyAxOwotCi0JeGNsa19wZXJfdHJhbnNfcHJlY2lzZSA9IHJvdW5kX2RpdigoeGNsa19mcmVxICogMTI4KSA8PCAoMTEgLSB1c2VhYmxlX3ByZWNpc2lvbiksCi0JCQkJCSAgIHZjbGtfZnJlcSAqIG1vZGUtPmJpdHNfcGVyX3BpeGVsKTsKLQotCXJvbiA9ICg0ICogcmluZm8tPnJhbS5tYiArIDMgKiBfbWF4KHJpbmZvLT5yYW0udHJjZCAtIDIsIDApICsKLQkgICAgICAgMiAqIHJpbmZvLT5yYW0udHJwICsgcmluZm8tPnJhbS50d3IgKyByaW5mby0+cmFtLmNsICsgcmluZm8tPnJhbS50cjJ3ICsKLQkgICAgICAgeGNsa19wZXJfdHJhbnMpIDw8ICgxMSAtIHVzZWFibGVfcHJlY2lzaW9uKTsKLQlyb2ZmID0geGNsa19wZXJfdHJhbnNfcHJlY2lzZSAqICgzMiAtIDQpOwotCi0JUlRSQUNFKCJyb24gPSAlZCwgcm9mZiA9ICVkXG4iLCByb24sIHJvZmYpOwotCVJUUkFDRSgidmNsa19mcmVxID0gJWQsIHBlciA9ICVkXG4iLCB2Y2xrX2ZyZXEsIHhjbGtfcGVyX3RyYW5zX3ByZWNpc2UpOwotCi0JaWYgKChyb24gKyByaW5mby0+cmFtLnJsb29wKSA+PSByb2ZmKSB7Ci0JCXByaW50aygicmFkZW9uZmI6IGVycm9yIHJvbiBvdXQgb2YgcmFuZ2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQluZXdtb2RlLmRkYV9jb25maWcgPSAoeGNsa19wZXJfdHJhbnNfcHJlY2lzZSB8Ci0JCQkgICAgICAodXNlYWJsZV9wcmVjaXNpb24gPDwgMTYpIHwKLQkJCSAgICAgIChyaW5mby0+cmFtLnJsb29wIDw8IDIwKSk7Ci0JbmV3bW9kZS5kZGFfb25fb2ZmID0gKHJvbiA8PCAxNikgfCByb2ZmOwotCi0JaWYgKChwcmltYXJ5X21vbiA9PSBNVF9ERlApIHx8IChwcmltYXJ5X21vbiA9PSBNVF9MQ0QpKSB7Ci0JCXVuc2lnbmVkIGludCBoUmF0aW8sIHZSYXRpbzsKLQotCQkvKiBXZSBmb3JjZSB0aGUgcGl4ZWwgY2xvY2sgdG8gYmUgYWx3YXlzIGVuYWJsZWQuIEFsbG93aW5nIGl0Ci0JCSAqIHRvIGJlIHBvd2VyIG1hbmFnZWQgZHVyaW5nIGJsYW5raW5nIHdvdWxkIHNhdmUgcG93ZXIsIGJ1dCBoYXMKLQkJICogbmFzdHkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIDJEIGVuZ2luZSAmIHNsZWVwIGNvZGUgdGhhdCBoYXZlbid0Ci0JCSAqIGJlZW4gc29sdmVkIHlldC4gLS1CZW5ICi0JCSAqLwotCQluZXdtb2RlLnZjbGtfZWNwX2NudGwgJj0gflBJWENMS19EQUNfQUxXQVlTX09OYjsKLQkJCi0JCWlmIChtb2RlLT54cmVzID4gcmluZm8tPnBhbmVsX3hyZXMpCi0JCQltb2RlLT54cmVzID0gcmluZm8tPnBhbmVsX3hyZXM7Ci0JCWlmIChtb2RlLT55cmVzID4gcmluZm8tPnBhbmVsX3lyZXMpCi0JCQltb2RlLT55cmVzID0gcmluZm8tPnBhbmVsX3lyZXM7Ci0KLQkJbmV3bW9kZS5mcF9ob3J6X3N0cmV0Y2ggPSAoKChyaW5mby0+cGFuZWxfeHJlcyAvIDgpIC0gMSkKLQkJCQkJICAgPDwgSE9SWl9QQU5FTF9TSElGVCk7Ci0JCW5ld21vZGUuZnBfdmVydF9zdHJldGNoID0gKChyaW5mby0+cGFuZWxfeXJlcyAtIDEpCi0JCQkJCSAgIDw8IFZFUlRfUEFORUxfU0hJRlQpOwotCi0JCWlmIChtb2RlLT54cmVzICE9IHJpbmZvLT5wYW5lbF94cmVzKSB7Ci0JCQloUmF0aW8gPSByb3VuZF9kaXYobW9kZS0+eHJlcyAqIEhPUlpfU1RSRVRDSF9SQVRJT19NQVgsCi0JCQkJCSAgIHJpbmZvLT5wYW5lbF94cmVzKTsKLQkJCW5ld21vZGUuZnBfaG9yel9zdHJldGNoID0gKCgoKCh1bnNpZ25lZCBsb25nKWhSYXRpbykgJiBIT1JaX1NUUkVUQ0hfUkFUSU9fTUFTSykpIHwKLQkJCQkJCSAgIChuZXdtb2RlLmZwX2hvcnpfc3RyZXRjaCAmCi0JCQkJCQkgICAgKEhPUlpfUEFORUxfU0laRSB8IEhPUlpfRlBfTE9PUF9TVFJFVENIIHwKLQkJCQkJCSAgICAgSE9SWl9BVVRPX1JBVElPX0lOQykpKTsKLQkJCW5ld21vZGUuZnBfaG9yel9zdHJldGNoIHw9IChIT1JaX1NUUkVUQ0hfQkxFTkQgfAotCQkJCQkJICAgIEhPUlpfU1RSRVRDSF9FTkFCTEUpOwotCQl9Ci0JCW5ld21vZGUuZnBfaG9yel9zdHJldGNoICY9IH5IT1JaX0FVVE9fUkFUSU87Ci0KLQkJaWYgKG1vZGUtPnlyZXMgIT0gcmluZm8tPnBhbmVsX3lyZXMpIHsKLQkJCXZSYXRpbyA9IHJvdW5kX2Rpdihtb2RlLT55cmVzICogVkVSVF9TVFJFVENIX1JBVElPX01BWCwKLQkJCQkJICAgcmluZm8tPnBhbmVsX3lyZXMpOwotCQkJbmV3bW9kZS5mcF92ZXJ0X3N0cmV0Y2ggPSAoKCgoKHVuc2lnbmVkIGxvbmcpdlJhdGlvKSAmIFZFUlRfU1RSRVRDSF9SQVRJT19NQVNLKSkgfAotCQkJCQkJICAgKG5ld21vZGUuZnBfdmVydF9zdHJldGNoICYKLQkJCQkJCSAgIChWRVJUX1BBTkVMX1NJWkUgfCBWRVJUX1NUUkVUQ0hfUkVTRVJWRUQpKSk7Ci0JCQluZXdtb2RlLmZwX3ZlcnRfc3RyZXRjaCB8PSAoVkVSVF9TVFJFVENIX0JMRU5EIHwKLQkJCQkJCSAgICBWRVJUX1NUUkVUQ0hfRU5BQkxFKTsKLQkJfQotCQluZXdtb2RlLmZwX3ZlcnRfc3RyZXRjaCAmPSB+VkVSVF9BVVRPX1JBVElPX0VOOwotCi0JCW5ld21vZGUuZnBfZ2VuX2NudGwgPSAocmluZm8tPmluaXRfc3RhdGUuZnBfZ2VuX2NudGwgJiAodTMyKQotCQkJCSAgICAgICB+KEZQX1NFTF9DUlRDMiB8Ci0JCQkJCSBGUF9STVhfSFZTWU5DX0NPTlRST0xfRU4gfAotCQkJCQkgRlBfREZQX1NZTkNfU0VMIHwKLQkJCQkJIEZQX0NSVF9TWU5DX1NFTCB8Ci0JCQkJCSBGUF9DUlRDX0xPQ0tfOERPVCB8Ci0JCQkJCSBGUF9VU0VfU0hBRE9XX0VOIHwKLQkJCQkJIEZQX0NSVENfVVNFX1NIQURPV19WRU5EIHwKLQkJCQkJIEZQX0NSVF9TWU5DX0FMVCkpOwotCi0JCW5ld21vZGUuZnBfZ2VuX2NudGwgfD0gKEZQX0NSVENfRE9OVF9TSEFET1dfVlBBUiB8Ci0JCQkJCUZQX0NSVENfRE9OVF9TSEFET1dfSEVORCk7Ci0KLQkJbmV3bW9kZS5sdmRzX2dlbl9jbnRsID0gcmluZm8tPmluaXRfc3RhdGUubHZkc19nZW5fY250bDsKLQkJbmV3bW9kZS5sdmRzX3BsbF9jbnRsID0gcmluZm8tPmluaXRfc3RhdGUubHZkc19wbGxfY250bDsKLQkJbmV3bW9kZS50bWRzX2NyYyA9IHJpbmZvLT5pbml0X3N0YXRlLnRtZHNfY3JjOwotCQluZXdtb2RlLnRtZHNfdHJhbnNtaXR0ZXJfY250bCA9IHJpbmZvLT5pbml0X3N0YXRlLnRtZHNfdHJhbnNtaXR0ZXJfY250bDsKLQotCQlpZiAocHJpbWFyeV9tb24gPT0gTVRfTENEKSB7Ci0JCQluZXdtb2RlLmx2ZHNfZ2VuX2NudGwgfD0gKExWRFNfT04gfCBMVkRTX0JMT04pOwotCQkJbmV3bW9kZS5mcF9nZW5fY250bCAmPSB+KEZQX0ZQT04gfCBGUF9UTURTX0VOKTsKLQkJfSBlbHNlIHsKLQkJCS8qIERGUCAqLwotCQkJbmV3bW9kZS5mcF9nZW5fY250bCB8PSAoRlBfRlBPTiB8IEZQX1RNRFNfRU4pOwotCQkJbmV3bW9kZS50bWRzX3RyYW5zbWl0dGVyX2NudGwgPSAoVE1EU19SQU5fUEFUX1JTVCB8Ci0JCQkJCQkJIFRNRFNfSUNIQ1NFTCB8IFRNRFNfUExMX0VOKSAmCi0JCQkJCQkJIH4oVE1EU19QTExSU1QpOwotCQkJbmV3bW9kZS5jcnRjX2V4dF9jbnRsICY9IH5DUlRDX0NSVF9PTjsKLQkJfQotCi0JCW5ld21vZGUuZnBfY3J0Y19oX3RvdGFsX2Rpc3AgPSAoKChyaW5mby0+aGJsYW5rIC8gOCkgJiAweDNmZikgfAotCQkJCSgoKG1vZGUtPnhyZXMgLyA4KSAtIDEpIDw8IDE2KSk7Ci0JCW5ld21vZGUuZnBfY3J0Y192X3RvdGFsX2Rpc3AgPSAocmluZm8tPnZibGFuayAmIDB4ZmZmZikgfAotCQkJCSgobW9kZS0+eXJlcyAtIDEpIDw8IDE2KTsKLQkJbmV3bW9kZS5mcF9oX3N5bmNfc3RydF93aWQgPSAoKHJpbmZvLT5oT3Zlcl9wbHVzICYgMHgxZmZmKSB8Ci0JCQkJKGhzeW5jX3dpZCA8PCAxNikgfCAoaF9zeW5jX3BvbCA8PCAyMykpOwotCQluZXdtb2RlLmZwX3Zfc3luY19zdHJ0X3dpZCA9ICgocmluZm8tPnZPdmVyX3BsdXMgJiAweGZmZikgfAotCQkJCSh2c3luY193aWQgPDwgMTYpIHwgKHZfc3luY19wb2wgIDw8IDIzKSk7Ci0JfQotCi0JLyogZG8gaXQhICovCi0JaWYgKCFyaW5mby0+YXNsZWVwKSB7Ci0JCXJhZGVvbl93cml0ZV9tb2RlIChyaW5mbywgJm5ld21vZGUpOwotCQkvKiAocmUpaW5pdGlhbGl6ZSB0aGUgZW5naW5lICovCi0JCWlmIChub2FjY2VsKQotCQkJcmFkZW9uX2VuZ2luZV9pbml0IChyaW5mbyk7Ci0JCi0JfQotCS8qIFVwZGF0ZSBmaXggKi8KLQlpZiAoYWNjZWwpCi0gICAgICAgIAlpbmZvLT5maXgubGluZV9sZW5ndGggPSByaW5mby0+cGl0Y2gqNjQ7Ci0gICAgICAgIGVsc2UKLQkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gbW9kZS0+eHJlc192aXJ0dWFsICogKChtb2RlLT5iaXRzX3Blcl9waXhlbCArIDEpIC8gOCk7Ci0gICAgICAgIGluZm8tPmZpeC52aXN1YWwgPSByaW5mby0+ZGVwdGggPT0gOCA/IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUjsKLQotI2lmZGVmIENPTkZJR19CT09UWF9URVhUCi0JLyogVXBkYXRlIGRlYnVnIHRleHQgZW5naW5lICovCi0JYnRleHRfdXBkYXRlX2Rpc3BsYXkocmluZm8tPmZiX2Jhc2VfcGh5cywgbW9kZS0+eHJlcywgbW9kZS0+eXJlcywKLQkJCSAgICAgcmluZm8tPmRlcHRoLCBpbmZvLT5maXgubGluZV9sZW5ndGgpOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCByYWRlb25fd3JpdGVfbW9kZSAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYWRlb25fcmVncyAqbW9kZSkKLXsKLQlpbnQgaTsKLQlpbnQgcHJpbWFyeV9tb24gPSBQUklNQVJZX01PTklUT1IocmluZm8pOwotCi0JcmFkZW9uZmJfYmxhbmsoVkVTQV9QT1dFUkRPV04sIChzdHJ1Y3QgZmJfaW5mbyAqKXJpbmZvKTsKLQotCi0JaWYgKHJpbmZvLT5hcmNoID09IFJBREVPTl9NNikgewotCQlmb3IgKGk9MDsgaTw3OyBpKyspCi0JCQlPVVRSRUcoY29tbW9uX3JlZ3NfbTZbaV0ucmVnLCBjb21tb25fcmVnc19tNltpXS52YWwpOwotCX0gZWxzZSB7Ci0JCWZvciAoaT0wOyBpPDk7IGkrKykKLQkJCU9VVFJFRyhjb21tb25fcmVnc1tpXS5yZWcsIGNvbW1vbl9yZWdzW2ldLnZhbCk7Ci0JfQotCi0JT1VUUkVHKENSVENfR0VOX0NOVEwsIG1vZGUtPmNydGNfZ2VuX2NudGwpOwotCU9VVFJFR1AoQ1JUQ19FWFRfQ05UTCwgbW9kZS0+Y3J0Y19leHRfY250bCwKLQkJQ1JUQ19IU1lOQ19ESVMgfCBDUlRDX1ZTWU5DX0RJUyB8IENSVENfRElTUExBWV9ESVMpOwotCU9VVFJFR1AoREFDX0NOVEwsIG1vZGUtPmRhY19jbnRsLCBEQUNfUkFOR0VfQ05UTCB8IERBQ19CTEFOS0lORyk7Ci0JT1VUUkVHKENSVENfSF9UT1RBTF9ESVNQLCBtb2RlLT5jcnRjX2hfdG90YWxfZGlzcCk7Ci0JT1VUUkVHKENSVENfSF9TWU5DX1NUUlRfV0lELCBtb2RlLT5jcnRjX2hfc3luY19zdHJ0X3dpZCk7Ci0JT1VUUkVHKENSVENfVl9UT1RBTF9ESVNQLCBtb2RlLT5jcnRjX3ZfdG90YWxfZGlzcCk7Ci0JT1VUUkVHKENSVENfVl9TWU5DX1NUUlRfV0lELCBtb2RlLT5jcnRjX3Zfc3luY19zdHJ0X3dpZCk7Ci0JT1VUUkVHKENSVENfT0ZGU0VULCAwKTsKLQlPVVRSRUcoQ1JUQ19PRkZTRVRfQ05UTCwgMCk7Ci0JT1VUUkVHKENSVENfUElUQ0gsIG1vZGUtPmNydGNfcGl0Y2gpOwotCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JT1VUUkVHKFNVUkZBQ0VfQ05UTCwgbW9kZS0+c3VyZmFjZV9jbnRsKTsKLSNlbmRpZgotCi0Jd2hpbGUgKChJTlJFRyhDTE9DS19DTlRMX0lOREVYKSAmIFBQTExfRElWX1NFTF9NQVNLKSAhPQotCSAgICAgICBQUExMX0RJVl9TRUxfTUFTSykgewotCQlPVVRSRUdQKENMT0NLX0NOVExfSU5ERVgsIFBQTExfRElWX1NFTF9NQVNLLCAweGZmZmYpOwotCX0KLQotCU9VVFBMTFAoUFBMTF9DTlRMLCBQUExMX1JFU0VULCAweGZmZmYpOwotCi0Jd2hpbGUgKChJTlBMTChQUExMX1JFRl9ESVYpICYgUFBMTF9SRUZfRElWX01BU0spICE9Ci0JICAgICAgIChtb2RlLT5wcGxsX3JlZl9kaXYgJiBQUExMX1JFRl9ESVZfTUFTSykpIHsKLQkJT1VUUExMUChQUExMX1JFRl9ESVYsIG1vZGUtPnBwbGxfcmVmX2RpdiwgflBQTExfUkVGX0RJVl9NQVNLKTsKLQl9Ci0KLQl3aGlsZSAoKElOUExMKFBQTExfRElWXzMpICYgUFBMTF9GQjNfRElWX01BU0spICE9Ci0JICAgICAgIChtb2RlLT5wcGxsX2Rpdl8zICYgUFBMTF9GQjNfRElWX01BU0spKSB7Ci0JCU9VVFBMTFAoUFBMTF9ESVZfMywgbW9kZS0+cHBsbF9kaXZfMywgflBQTExfRkIzX0RJVl9NQVNLKTsKLQl9Ci0KLQl3aGlsZSAoKElOUExMKFBQTExfRElWXzMpICYgUFBMTF9QT1NUM19ESVZfTUFTSykgIT0KLQkgICAgICAgKG1vZGUtPnBwbGxfZGl2XzMgJiBQUExMX1BPU1QzX0RJVl9NQVNLKSkgewotCQlPVVRQTExQKFBQTExfRElWXzMsIG1vZGUtPnBwbGxfZGl2XzMsIH5QUExMX1BPU1QzX0RJVl9NQVNLKTsKLQl9Ci0KLQlPVVRQTEwoSFRPVEFMX0NOVEwsIDApOwotCi0JT1VUUExMUChQUExMX0NOVEwsIDAsIH5QUExMX1JFU0VUKTsKLQotLy8JT1VUUkVHKEREQV9DT05GSUcsIG1vZGUtPmRkYV9jb25maWcpOwotLy8JT1VUUkVHKEREQV9PTl9PRkYsIG1vZGUtPmRkYV9vbl9vZmYpOwotCi0JaWYgKChwcmltYXJ5X21vbiA9PSBNVF9ERlApIHx8IChwcmltYXJ5X21vbiA9PSBNVF9MQ0QpKSB7Ci0JCU9VVFJFRyhGUF9DUlRDX0hfVE9UQUxfRElTUCwgbW9kZS0+ZnBfY3J0Y19oX3RvdGFsX2Rpc3ApOwotCQlPVVRSRUcoRlBfQ1JUQ19WX1RPVEFMX0RJU1AsIG1vZGUtPmZwX2NydGNfdl90b3RhbF9kaXNwKTsKLQkJT1VUUkVHKEZQX0hfU1lOQ19TVFJUX1dJRCwgbW9kZS0+ZnBfaF9zeW5jX3N0cnRfd2lkKTsKLQkJT1VUUkVHKEZQX1ZfU1lOQ19TVFJUX1dJRCwgbW9kZS0+ZnBfdl9zeW5jX3N0cnRfd2lkKTsKLQkJT1VUUkVHKEZQX0hPUlpfU1RSRVRDSCwgbW9kZS0+ZnBfaG9yel9zdHJldGNoKTsKLQkJT1VUUkVHKEZQX1ZFUlRfU1RSRVRDSCwgbW9kZS0+ZnBfdmVydF9zdHJldGNoKTsKLQkJT1VUUkVHKEZQX0dFTl9DTlRMLCBtb2RlLT5mcF9nZW5fY250bCk7Ci0JCU9VVFJFRyhUTURTX0NSQywgbW9kZS0+dG1kc19jcmMpOwotCQlPVVRSRUcoVE1EU19UUkFOU01JVFRFUl9DTlRMLCBtb2RlLT50bWRzX3RyYW5zbWl0dGVyX2NudGwpOwotCi0JCWlmIChwcmltYXJ5X21vbiA9PSBNVF9MQ0QpIHsKLQkJCXVuc2lnbmVkIGludCB0bXAgPSBJTlJFRyhMVkRTX0dFTl9DTlRMKTsKLQotCQkJbW9kZS0+bHZkc19nZW5fY250bCAmPSB+TFZEU19TVEFURV9NQVNLOwotCQkJbW9kZS0+bHZkc19nZW5fY250bCB8PSAocmluZm8tPmluaXRfc3RhdGUubHZkc19nZW5fY250bCAmIExWRFNfU1RBVEVfTUFTSyk7Ci0KLQkJCWlmICgodG1wICYgKExWRFNfT04gfCBMVkRTX0JMT04pKSA9PQotCQkJICAgIChtb2RlLT5sdmRzX2dlbl9jbnRsICYgKExWRFNfT04gfCBMVkRTX0JMT04pKSkgewotCQkJCU9VVFJFRyhMVkRTX0dFTl9DTlRMLCBtb2RlLT5sdmRzX2dlbl9jbnRsKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKG1vZGUtPmx2ZHNfZ2VuX2NudGwgJiAoTFZEU19PTiB8IExWRFNfQkxPTikpIHsKLQkJCQkJdWRlbGF5KDEwMDApOwotCQkJCQlPVVRSRUcoTFZEU19HRU5fQ05UTCwgbW9kZS0+bHZkc19nZW5fY250bCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJT1VUUkVHKExWRFNfR0VOX0NOVEwsIG1vZGUtPmx2ZHNfZ2VuX2NudGwgfAotCQkJCQkgICAgICAgTFZEU19CTE9OKTsKLQkJCQkJdWRlbGF5KDEwMDApOwotCQkJCQlPVVRSRUcoTFZEU19HRU5fQ05UTCwgbW9kZS0+bHZkc19nZW5fY250bCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcmFkZW9uZmJfYmxhbmsoVkVTQV9OT19CTEFOS0lORywgKHN0cnVjdCBmYl9pbmZvICopcmluZm8pOwotCi0JT1VUUExMKFZDTEtfRUNQX0NOVEwsIG1vZGUtPnZjbGtfZWNwX2NudGwpOwotCQotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBmYl9vcHMgcmFkZW9uZmJfb3BzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLmZiX2NoZWNrX3ZhcgkJPSByYWRlb25mYl9jaGVja192YXIsCi0JLmZiX3NldF9wYXIJCT0gcmFkZW9uZmJfc2V0X3BhciwKLQkuZmJfc2V0Y29scmVnCQk9IHJhZGVvbmZiX3NldGNvbHJlZywKLQkuZmJfcGFuX2Rpc3BsYXkgCT0gcmFkZW9uZmJfcGFuX2Rpc3BsYXksCi0JLmZiX2JsYW5rCQk9IHJhZGVvbmZiX2JsYW5rLAotCS5mYl9pb2N0bAkJPSByYWRlb25mYl9pb2N0bCwKLSNpZiAwCi0JLmZiX2ZpbGxyZWN0CT0gcmFkZW9uZmJfZmlsbHJlY3QsCi0JLmZiX2NvcHlhcmVhCT0gcmFkZW9uZmJfY29weWFyZWEsCi0JLmZiX2ltYWdlYmxpdAk9IHJhZGVvbmZiX2ltYWdlYmxpdCwKLQkuZmJfcmFzdGVyaW1nCT0gcmFkZW9uZmJfcmFzdGVyaW1nLAotI2Vsc2UKLQkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCi0JLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAotCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAotI2VuZGlmCi19OwotCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJhZGVvbl9zZXRfZmJpbmZvIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCi17Ci0Jc3RydWN0IGZiX2luZm8gKmluZm87Ci0KLQlpbmZvID0gJnJpbmZvLT5pbmZvOwotCi0JaW5mby0+cGFyID0gcmluZm87Ci0JaW5mby0+cHNldWRvX3BhbGV0dGUgPSByaW5mby0+cHNldWRvX3BhbGV0dGU7Ci0gICAgICAgIGluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9ZUEFOOwotICAgICAgICBpbmZvLT5mYm9wcyA9ICZyYWRlb25mYl9vcHM7Ci0gICAgICAgIGluZm8tPnNjcmVlbl9iYXNlID0gcmluZm8tPmZiX2Jhc2U7Ci0KLQkvKiBGaWxsIGZpeCBjb21tb24gZmllbGRzICovCi0Jc3RybGNweShpbmZvLT5maXguaWQsIHJpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+Zml4LmlkKSk7Ci0gICAgICAgIGluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gcmluZm8tPmZiX2Jhc2VfcGh5czsKLSAgICAgICAgaW5mby0+Zml4LnNtZW1fbGVuID0gcmluZm8tPnZpZGVvX3JhbTsKLSAgICAgICAgaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0gICAgICAgIGluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7Ci0gICAgICAgIGluZm8tPmZpeC54cGFuc3RlcCA9IDg7Ci0gICAgICAgIGluZm8tPmZpeC55cGFuc3RlcCA9IDE7Ci0gICAgICAgIGluZm8tPmZpeC55d3JhcHN0ZXAgPSAwOwotICAgICAgICBpbmZvLT5maXgudHlwZV9hdXggPSAwOwotICAgICAgICBpbmZvLT5maXgubW1pb19zdGFydCA9IHJpbmZvLT5tbWlvX2Jhc2VfcGh5czsKLSAgICAgICAgaW5mby0+Zml4Lm1taW9fbGVuID0gUkFERU9OX1JFR1NJWkU7Ci0JaWYgKG5vYWNjZWwpCi0JICAgICAgICBpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOwotCWVsc2UKLQkJaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfQVRJX1JBREVPTjsKLQotICAgICAgICBpZiAocmFkZW9uX2luaXRfZGlzcCAocmluZm8pIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7ICAgCi0KLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLQotI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotCi0vKiBUT0RPOiBEYmwgY2hlY2sgdGhlc2UgdGFibGVzLCB3ZSBkb24ndCBnbyB1cCB0byBmdWxsIE9OIGJhY2tsaWdodAotICogaW4gdGhlc2UsIHBvc3NpYmx5IGJlY2F1c2Ugd2Ugbm90aWNlZCBNYWNPUyBkb2Vzbid0LCBidXQgSSdkIHByZWZlcgotICogaGF2aW5nIHNvbWUgbW9yZSBvZmZpY2lhbCBudW1iZXJzIGZyb20gQVRJCi0gKi8KLXN0YXRpYyBpbnQgYmFja2xpZ2h0X2NvbnZfbTZbXSA9IHsKLQkweGZmLCAweGMwLCAweGI1LCAweGFhLCAweDlmLCAweDk0LCAweDg5LCAweDdlLAotCTB4NzMsIDB4NjgsIDB4NWQsIDB4NTIsIDB4NDcsIDB4M2MsIDB4MzEsIDB4MjQKLX07Ci1zdGF0aWMgaW50IGJhY2tsaWdodF9jb252X203W10gPSB7Ci0JMHgwMCwgMHgzZiwgMHg0YSwgMHg1NSwgMHg2MCwgMHg2YiwgMHg3NiwgMHg4MSwKLQkweDhjLCAweDk3LCAweGEyLCAweGFkLCAweGI4LCAweGMzLCAweGNlLCAweGQ5Ci19OwotCi0jZGVmaW5lIEJBQ0tMSUdIVF9MVkRTX09GRgotI3VuZGVmIEJBQ0tMSUdIVF9EQUNfT0ZGCi0KLS8qIFdlIHR1cm4gb2ZmIHRoZSBMQ0QgY29tcGxldGVseSBpbnN0ZWFkIG9mIGp1c3QgZGltbWluZyB0aGUgYmFja2xpZ2h0LgotICogVGhpcyBwcm92aWRlcyBzb21lIGdyZWF0ZXIgcG93ZXIgc2F2aW5nIGFuZCB0aGUgZGlzcGxheSBpcyB1c2VsZXNzCi0gKiB3aXRob3V0IGJhY2tsaWdodCBhbnl3YXkuCi0gKi8KLQotc3RhdGljIGludCByYWRlb25fc2V0X2JhY2tsaWdodF9lbmFibGUoaW50IG9uLCBpbnQgbGV2ZWwsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvID0gKHN0cnVjdCByYWRlb25mYl9pbmZvICopZGF0YTsKLQl1bnNpZ25lZCBpbnQgbHZkc19nZW5fY250bCA9IElOUkVHKExWRFNfR0VOX0NOVEwpOwotCWludCogY29udl90YWJsZTsKLQotCS8qIFBhcmRvbiBtZSBmb3IgdGhhdCBoYWNrLi4uIG1heWJlIHNvbWUgZGF5IHdlIGNhbiBmaWd1cmUKLQkgKiBvdXQgaW4gd2hhdCBkaXJlY3Rpb24gYmFja2xpZ2h0IHNob3VsZCB3b3JrIG9uIGEgZ2l2ZW4KLQkgKiBwYW5lbCA/Ci0JICovCi0JaWYgKChyaW5mby0+YXJjaCA9PSBSQURFT05fTTcgfHwgcmluZm8tPmFyY2ggPT0gUkFERU9OX005KQotCQkmJiAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSkKLQkJY29udl90YWJsZSA9IGJhY2tsaWdodF9jb252X203OwotCWVsc2UKLQkJY29udl90YWJsZSA9IGJhY2tsaWdodF9jb252X202OwotCi0JbHZkc19nZW5fY250bCB8PSAoTFZEU19CTF9NT0RfRU4gfCBMVkRTX0JMT04pOwotCWlmIChvbiAmJiAobGV2ZWwgPiBCQUNLTElHSFRfT0ZGKSkgewotCQlsdmRzX2dlbl9jbnRsIHw9IExWRFNfRElHT047Ci0JCWlmICghKGx2ZHNfZ2VuX2NudGwgJiBMVkRTX09OKSkgewotCQkJbHZkc19nZW5fY250bCAmPSB+TFZEU19CTE9OOwotCQkJT1VUUkVHKExWRFNfR0VOX0NOVEwsIGx2ZHNfZ2VuX2NudGwpOwotCQkJKHZvaWQpSU5SRUcoTFZEU19HRU5fQ05UTCk7Ci0JCQltZGVsYXkoMTApOwotCQkJbHZkc19nZW5fY250bCB8PSBMVkRTX0JMT047Ci0JCQlPVVRSRUcoTFZEU19HRU5fQ05UTCwgbHZkc19nZW5fY250bCk7Ci0JCX0KLQkJbHZkc19nZW5fY250bCAmPSB+TFZEU19CTF9NT0RfTEVWRUxfTUFTSzsKLQkJbHZkc19nZW5fY250bCB8PSAoY29udl90YWJsZVtsZXZlbF0gPDwKLQkJCQkgIExWRFNfQkxfTU9EX0xFVkVMX1NISUZUKTsKLQkJbHZkc19nZW5fY250bCB8PSAoTFZEU19PTiB8IExWRFNfRU4pOwotCQlsdmRzX2dlbl9jbnRsICY9IH5MVkRTX0RJU1BMQVlfRElTOwotCX0gZWxzZSB7Ci0JCWx2ZHNfZ2VuX2NudGwgJj0gfkxWRFNfQkxfTU9EX0xFVkVMX01BU0s7Ci0JCWx2ZHNfZ2VuX2NudGwgfD0gKGNvbnZfdGFibGVbMF0gPDwKLQkJCQkgIExWRFNfQkxfTU9EX0xFVkVMX1NISUZUKTsKLQkJbHZkc19nZW5fY250bCB8PSBMVkRTX0RJU1BMQVlfRElTOwotCQlPVVRSRUcoTFZEU19HRU5fQ05UTCwgbHZkc19nZW5fY250bCk7Ci0JCXVkZWxheSgxMCk7Ci0JCWx2ZHNfZ2VuX2NudGwgJj0gfihMVkRTX09OIHwgTFZEU19FTiB8IExWRFNfQkxPTiB8IExWRFNfRElHT04pOwotCX0KLQotCU9VVFJFRyhMVkRTX0dFTl9DTlRMLCBsdmRzX2dlbl9jbnRsKTsKLQlyaW5mby0+aW5pdF9zdGF0ZS5sdmRzX2dlbl9jbnRsICY9IH5MVkRTX1NUQVRFX01BU0s7Ci0JcmluZm8tPmluaXRfc3RhdGUubHZkc19nZW5fY250bCB8PSAobHZkc19nZW5fY250bCAmIExWRFNfU1RBVEVfTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByYWRlb25fc2V0X2JhY2tsaWdodF9sZXZlbChpbnQgbGV2ZWwsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIHJhZGVvbl9zZXRfYmFja2xpZ2h0X2VuYWJsZSgxLCBsZXZlbCwgZGF0YSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BNQUNfQkFDS0xJR0hUICovCi0KLQotI2lmZGVmIENPTkZJR19QTUFDX1BCT09LCi0KLXN0YXRpYyB1MzIgZGJnX2NsazsKLQotLyoKLSAqIFJhZGVvbiBNNiBQb3dlciBNYW5hZ2VtZW50IGNvZGUuIFRoaXMgY29kZSBjdXJyZW50bHkgb25seSBzdXBwb3J0cwotICogdGhlIG1vYmlsZSBjaGlwcywgaXQncyBiYXNlZCBmcm9tIHNvbWUgaW5mb3JtYXRpb25zIHByb3ZpZGVkIGJ5IEFUSQotICogYWxvbmcgd2l0aCBob3VycyBvZiB0cmFjaW5nIG9mIE1hY09TIGRyaXZlcnMKLSAqLwotIAotc3RhdGljIHZvaWQgcmFkZW9uX3BtX3NhdmVfcmVncyhzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCi17Ci0JcmluZm8tPnNhdmVfcmVnc1swXSA9IElOUExMKFBMTF9QV1JNR1RfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1sxXSA9IElOUExMKENMS19QV1JNR1RfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1syXSA9IElOUExMKE1DTEtfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1szXSA9IElOUExMKFNDTEtfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1s0XSA9IElOUExMKENMS19QSU5fQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1s1XSA9IElOUExMKFZDTEtfRUNQX0NOVEwpOwotCXJpbmZvLT5zYXZlX3JlZ3NbNl0gPSBJTlBMTChQSVhDTEtTX0NOVEwpOwotCXJpbmZvLT5zYXZlX3JlZ3NbN10gPSBJTlBMTChNQ0xLX01JU0MpOwotCXJpbmZvLT5zYXZlX3JlZ3NbOF0gPSBJTlBMTChQMlBMTF9DTlRMKTsKLQkKLQlyaW5mby0+c2F2ZV9yZWdzWzldID0gSU5SRUcoRElTUF9NSVNDX0NOVEwpOwotCXJpbmZvLT5zYXZlX3JlZ3NbMTBdID0gSU5SRUcoRElTUF9QV1JfTUFOKTsKLQlyaW5mby0+c2F2ZV9yZWdzWzExXSA9IElOUkVHKExWRFNfR0VOX0NOVEwpOwotCXJpbmZvLT5zYXZlX3JlZ3NbMTJdID0gSU5SRUcoTFZEU19QTExfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1sxM10gPSBJTlJFRyhUVl9EQUNfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1sxNF0gPSBJTlJFRyhCVVNfQ05UTDEpOwotCXJpbmZvLT5zYXZlX3JlZ3NbMTVdID0gSU5SRUcoQ1JUQ19PRkZTRVRfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1sxNl0gPSBJTlJFRyhBR1BfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1sxN10gPSAoSU5SRUcoQ1JUQ19HRU5fQ05UTCkgJiAweGZkZmZmZmZmKSB8IDB4MDQwMDAwMDA7Ci0JcmluZm8tPnNhdmVfcmVnc1sxOF0gPSAoSU5SRUcoQ1JUQzJfR0VOX0NOVEwpICYgMHhmZGZmZmZmZikgfCAweDA0MDAwMDAwOwotCXJpbmZvLT5zYXZlX3JlZ3NbMTldID0gSU5SRUcoR1BJT1BBRF9BKTsKLQlyaW5mby0+c2F2ZV9yZWdzWzIwXSA9IElOUkVHKEdQSU9QQURfRU4pOwotCXJpbmZvLT5zYXZlX3JlZ3NbMjFdID0gSU5SRUcoR1BJT1BBRF9NQVNLKTsKLQlyaW5mby0+c2F2ZV9yZWdzWzIyXSA9IElOUkVHKFpWX0xDRFBBRF9BKTsKLQlyaW5mby0+c2F2ZV9yZWdzWzIzXSA9IElOUkVHKFpWX0xDRFBBRF9FTik7Ci0JcmluZm8tPnNhdmVfcmVnc1syNF0gPSBJTlJFRyhaVl9MQ0RQQURfTUFTSyk7Ci0JcmluZm8tPnNhdmVfcmVnc1syNV0gPSBJTlJFRyhHUElPX1ZHQV9EREMpOwotCXJpbmZvLT5zYXZlX3JlZ3NbMjZdID0gSU5SRUcoR1BJT19EVklfRERDKTsKLQlyaW5mby0+c2F2ZV9yZWdzWzI3XSA9IElOUkVHKEdQSU9fTU9OSUQpOwotCXJpbmZvLT5zYXZlX3JlZ3NbMjhdID0gSU5SRUcoR1BJT19DUlQyX0REQyk7Ci0KLQlyaW5mby0+c2F2ZV9yZWdzWzI5XSA9IElOUkVHKFNVUkZBQ0VfQ05UTCk7Ci0JcmluZm8tPnNhdmVfcmVnc1szMF0gPSBJTlJFRyhNQ19GQl9MT0NBVElPTik7Ci0JcmluZm8tPnNhdmVfcmVnc1szMV0gPSBJTlJFRyhESVNQTEFZX0JBU0VfQUREUik7Ci0JcmluZm8tPnNhdmVfcmVnc1szMl0gPSBJTlJFRyhNQ19BR1BfTE9DQVRJT04pOwotCXJpbmZvLT5zYXZlX3JlZ3NbMzNdID0gSU5SRUcoQ1JUQzJfRElTUExBWV9CQVNFX0FERFIpOwotfQotCi1zdGF0aWMgdm9pZCByYWRlb25fcG1fcmVzdG9yZV9yZWdzKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKLXsKLQlPVVRQTEwoUDJQTExfQ05UTCwgcmluZm8tPnNhdmVfcmVnc1s4XSAmIDB4RkZGRkZGRkUpOyAvKiBGaXJzdCAqLwotCQotCU9VVFBMTChQTExfUFdSTUdUX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbMF0pOwotCU9VVFBMTChDTEtfUFdSTUdUX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbMV0pOwotCU9VVFBMTChNQ0xLX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbMl0pOwotCU9VVFBMTChTQ0xLX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbM10pOwotCU9VVFBMTChDTEtfUElOX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbNF0pOwotCU9VVFBMTChWQ0xLX0VDUF9DTlRMLCByaW5mby0+c2F2ZV9yZWdzWzVdKTsKLQlPVVRQTEwoUElYQ0xLU19DTlRMLCByaW5mby0+c2F2ZV9yZWdzWzZdKTsKLQlPVVRQTEwoTUNMS19NSVNDLCByaW5mby0+c2F2ZV9yZWdzWzddKTsKLQkKLQlPVVRSRUcoRElTUF9NSVNDX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbOV0pOwotCU9VVFJFRyhESVNQX1BXUl9NQU4sIHJpbmZvLT5zYXZlX3JlZ3NbMTBdKTsKLQlPVVRSRUcoTFZEU19HRU5fQ05UTCwgcmluZm8tPnNhdmVfcmVnc1sxMV0pOwotCU9VVFJFRyhMVkRTX1BMTF9DTlRMLHJpbmZvLT5zYXZlX3JlZ3NbMTJdKTsKLQlPVVRSRUcoVFZfREFDX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbMTNdKTsKLQlPVVRSRUcoQlVTX0NOVEwxLCByaW5mby0+c2F2ZV9yZWdzWzE0XSk7Ci0JT1VUUkVHKENSVENfT0ZGU0VUX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbMTVdKTsKLQlPVVRSRUcoQUdQX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbMTZdKTsKLQlPVVRSRUcoQ1JUQ19HRU5fQ05UTCwgcmluZm8tPnNhdmVfcmVnc1sxN10pOwotCU9VVFJFRyhDUlRDMl9HRU5fQ05UTCwgcmluZm8tPnNhdmVfcmVnc1sxOF0pOwotCi0JLy8gd2FpdCBWQkwgYmVmb3JlIHRoYXQgb25lICA/Ci0JT1VUUExMKFAyUExMX0NOVEwsIHJpbmZvLT5zYXZlX3JlZ3NbOF0pOwotCQotCU9VVFJFRyhHUElPUEFEX0EsIHJpbmZvLT5zYXZlX3JlZ3NbMTldKTsKLQlPVVRSRUcoR1BJT1BBRF9FTiwgcmluZm8tPnNhdmVfcmVnc1syMF0pOwotCU9VVFJFRyhHUElPUEFEX01BU0ssIHJpbmZvLT5zYXZlX3JlZ3NbMjFdKTsKLQlPVVRSRUcoWlZfTENEUEFEX0EsIHJpbmZvLT5zYXZlX3JlZ3NbMjJdKTsKLQlPVVRSRUcoWlZfTENEUEFEX0VOLCByaW5mby0+c2F2ZV9yZWdzWzIzXSk7Ci0JT1VUUkVHKFpWX0xDRFBBRF9NQVNLLCByaW5mby0+c2F2ZV9yZWdzWzI0XSk7Ci0JT1VUUkVHKEdQSU9fVkdBX0REQywgcmluZm8tPnNhdmVfcmVnc1syNV0pOwotCU9VVFJFRyhHUElPX0RWSV9EREMsIHJpbmZvLT5zYXZlX3JlZ3NbMjZdKTsKLQlPVVRSRUcoR1BJT19NT05JRCwgcmluZm8tPnNhdmVfcmVnc1syN10pOwotCU9VVFJFRyhHUElPX0NSVDJfRERDLCByaW5mby0+c2F2ZV9yZWdzWzI4XSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJhZGVvbl9wbV9kaXNhYmxlX2lvcGFkKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKLXsJCQotCU9VVFJFRyhHUElPUEFEX01BU0ssIDB4MDAwMWZmZmYpOwotCU9VVFJFRyhHUElPUEFEX0VOLCAweDAwMDAwNDAwKTsKLQlPVVRSRUcoR1BJT1BBRF9BLCAweDAwMDAwMDAwKTsJCQotICAgICAgICBPVVRSRUcoWlZfTENEUEFEX01BU0ssIDB4MDAwMDAwMDApOwotICAgICAgICBPVVRSRUcoWlZfTENEUEFEX0VOLCAweDAwMDAwMDAwKTsKLSAgICAgIAlPVVRSRUcoWlZfTENEUEFEX0EsIDB4MDAwMDAwMDApOyAJCi0JT1VUUkVHKEdQSU9fVkdBX0REQywgMHgwMDAzMDAwMCk7Ci0JT1VUUkVHKEdQSU9fRFZJX0REQywgMHgwMDAwMDAwMCk7Ci0JT1VUUkVHKEdQSU9fTU9OSUQsIDB4MDAwMzAwMDApOwotCU9VVFJFRyhHUElPX0NSVDJfRERDLCAweDAwMDAwMDAwKTsKLX0KLQotc3RhdGljIHZvaWQgcmFkZW9uX3BtX3Byb2dyYW1fdjJjbGsoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQotewotLy8KLS8vCXUzMiByZWc7Ci0vLwotLy8JT1VUUExMKFAyUExMX1JFRl9ESVYsIDB4MGMpOwotLy8KLS8vICAgICAgLi4uLy4uLiBmaWd1cmUgb3V0IHdoYXQgbWFjb3MgZG9lcyBoZXJlCi19Ci0KLXN0YXRpYyB2b2lkIHJhZGVvbl9wbV9sb3dfY3VycmVudChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCi17Ci0JdTMyIHJlZzsKLQotCXJlZyAgPSBJTlJFRyhCVVNfQ05UTDEpOwotCXJlZyAmPSB+QlVTX0NOVEwxX01PQklMRV9QTEFURk9STV9TRUxfTUFTSzsKLQlyZWcgfD0gQlVTX0NOVEwxX0FHUENMS19WQUxJRCB8ICgxPDxCVVNfQ05UTDFfTU9CSUxFX1BMQVRGT1JNX1NFTF9TSElGVCk7Ci0JT1VUUkVHKEJVU19DTlRMMSwgcmVnKTsKLQkKLQlyZWcgID0gSU5QTEwoUExMX1BXUk1HVF9DTlRMKTsKLQlyZWcgfD0gUExMX1BXUk1HVF9DTlRMX1NQTExfVFVSTk9GRiB8IFBMTF9QV1JNR1RfQ05UTF9QUExMX1RVUk5PRkYgfAotCQlQTExfUFdSTUdUX0NOVExfUDJQTExfVFVSTk9GRiB8IFBMTF9QV1JNR1RfQ05UTF9UVlBMTF9UVVJOT0ZGOwotCXJlZyAmPSB+UExMX1BXUk1HVF9DTlRMX1NVX01DTEtfVVNFX0JDTEs7Ci0JcmVnICY9IH5QTExfUFdSTUdUX0NOVExfTU9CSUxFX1NVOwotCU9VVFBMTChQTExfUFdSTUdUX0NOVEwsIHJlZyk7Ci0KLS8vCXJlZyAgPSBJTlBMTChUVl9QTExfQ05UTDEpOwotLy8JcmVnIHw9IFRWX1BMTF9DTlRMMV9fVFZQTExfUkVTRVQgfCBUVl9QTExfQ05UTDFfX1RWUExMX1NMRUVQOwotLy8JT1VUUExMKFRWX1BMTF9DTlRMMSwgcmVnKTsKLQkKLQlyZWcgID0gSU5SRUcoVFZfREFDX0NOVEwpOwotCXJlZyAmPSB+KFRWX0RBQ19DTlRMX0JHQURKX01BU0sgfFRWX0RBQ19DTlRMX0RBQ0FESl9NQVNLKTsKLQlyZWcgfD1UVl9EQUNfQ05UTF9CR1NMRUVQIHwgVFZfREFDX0NOVExfUkRBQ1BEIHwgVFZfREFDX0NOVExfR0RBQ1BEIHwKLQkJVFZfREFDX0NOVExfQkRBQ1BEIHwKLQkJKDg8PFRWX0RBQ19DTlRMX0JHQURKX19TSElGVCkgfCAoODw8VFZfREFDX0NOVExfREFDQURKX19TSElGVCk7Ci0JT1VUUkVHKFRWX0RBQ19DTlRMLCByZWcpOwotCQotCXJlZyAgPSBJTlJFRyhUTURTX1RSQU5TTUlUVEVSX0NOVEwpOwotCXJlZyAmPSB+KFRNRFNfUExMX0VOIHxUTURTX1BMTFJTVCk7Ci0JT1VUUkVHKFRNRFNfVFJBTlNNSVRURVJfQ05UTCwgcmVnKTsKLQotLy8JbHZkc19wbGxfY250bCAgPSByZWdyMzIoZywgTFZEU19QTExfQ05UTCk7Ci0vLwlsdmRzX3BsbF9jbnRsICY9IH5MVkRTX1BMTF9DTlRMX19MVkRTX1BMTF9FTjsJCQkJCQkJCQkJCQotLy8JbHZkc19wbGxfY250bCB8PSAgTFZEU19QTExfQ05UTF9fTFZEU19QTExfUkVTRVQ7CQotLy8JcmVndzMyKGcsIExWRFNfUExMX0NOVEwsIGx2ZHNfcGxsX2NudGwpOwotCi0JcmVnID0gSU5SRUcoREFDX0NOVEwpOwotCXJlZyAmPSB+REFDX0NNUF9FTjsKLQlPVVRSRUcoREFDX0NOVEwsIHJlZyk7Ci0KLQlyZWcgPSBJTlJFRyhEQUNfQ05UTDIpOwotCXJlZyAmPSB+REFDMl9DTVBfRU47Ci0JT1VUUkVHKERBQ19DTlRMMiwgcmVnKTsKLQkKLQlyZWcgID0gSU5SRUcoVFZfREFDX0NOVEwpOwotCXJlZyAmPSB+VFZfREFDX0NOVExfREVURUNUOwotCU9VVFJFRyhUVl9EQUNfQ05UTCwgcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgcmFkZW9uX3BtX3NldHVwX2Zvcl9zdXNwZW5kKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKLXsKLQkvKiBUaGlzIGNvZGUgaXMgZGlzYWJsZWQuIEl0IGRvZXMgd2hhdCBpcyBpbiB0aGUgcG1faW5pdAotCSAqIGZ1bmN0aW9uIG9mIHRoZSBNYWNPUyBkcml2ZXIgY29kZSBBVEkgc2VudCBtZS4gSG93ZXZlciwKLQkgKiBpdCBkb2Vzbid0IGZpeCBteSBzbGVlcCBwcm9ibGVtLCBhbmQgaXMgY2F1c2luZyBvdGhlciBpc3N1ZXMKLQkgKiBvbiB3YWtldXAgKGJhc2NpYWxseSB0aGUgbWFjaGluZSBkeWluZyB3aGVuIHN3aXRjaGluZyBjb25zb2xlcwotCSAqIEkgaGF2ZW4ndCBoYWQgdGltZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIHlldAotCSAqLwotI2lmIDAKLQl1MzIgZGlzcF9taXNjX2NudGw7Ci0JdTMyIGRpc3BfcHdyX21hbjsKLQl1MzIgdGVtcDsKLQotCS8vIHNldCBTUExMLCBNUExMLCBQUExMLCBQMlBMTCwgVFZQTEwsIFNDTEssIE1DTEssIFBDTEssIFAyQ0xLLAotCS8vIFRDTEsgYW5kIFRFU1RfTU9ERSB0byAwCi0JdGVtcCA9IElOUExMKENMS19QV1JNR1RfQ05UTCk7Ci0JT1VUUExMKENMS19QV1JNR1RfQ05UTCAsIHRlbXAgJiB+MHhjMDAwMDJmZik7Ci0KLQkvLyBUdXJuIG9uIFBvd2VyIE1hbmFnZW1lbnQKLQl0ZW1wID0gSU5QTEwoQ0xLX1BXUk1HVF9DTlRMKTsKLQlPVVRQTEwoQ0xLX1BXUk1HVF9DTlRMICwgdGVtcCB8IDB4MDAwMDA0MDApOwotCi0JLy8gVHVybiBvZmYgZGlzcGxheSBjbG9jayBpZiB1c2luZyBtb2JpbGUgY2hpcHMKLQl0ZW1wID0gSU5QTEwoQ0xLX1BXUk1HVF9DTlRMKTsKLQlPVVRSRUcoQ0xLX1BXUk1HVF9DTlRMICwgdGVtcCB8IDB4MDAxMDAwMDApOwotCi0JLy8gRm9yY2UgUElYQ0xLX0FMV0FZU19PTiBhbmQgUElYQ0xLX0RBQ19BTFdBWVNfT04KLQl0ZW1wID0gSU5QTEwoVkNMS19FQ1BfQ05UTCk7Ci0JT1VUUExMKFZDTEtfRUNQX0NOVEwsIHRlbXAgJiB+MHgwMDAwMDBjMCk7Ci0KLQkvLyBGb3JjZSBFQ1BfRk9SQ0VfT04gdG8gMQotCXRlbXAgPSBJTlBMTChWQ0xLX0VDUF9DTlRMKTsKLQlPVVRQTEwoVkNMS19FQ1BfQ05UTCwgdGVtcCB8IDB4MDAwNDAwMDApOwotCi0JLy8gRm9yY2UgUElYQ0xLX0JMRU5EX0FMV0FZU19PTiBhbmQgUElYQ0xLX0dWX0FMV0FZU19PTgotCXRlbXAgPSBJTlBMTChQSVhDTEtTX0NOVEwpOwotICAgICAgIAlPVVRQTEwoUElYQ0xLU19DTlRMLCB0ZW1wICYgfjB4MDAwMDE4MDApOwotCi0JLy8gRm9yY2luZyBTQ0xLX0NOVEwgdG8gT04KLQlPVVRQTEwoU0NMS19DTlRMLCAoSU5QTEwoU0NMS19DTlRMKSYgMHgwMDAwMDAwNykgfCAweGZmZmY4MDAwICk7Ci0KLQkvLyBTZXQgUE0gY29udHJvbCBvdmVyIFhUQUxJTiBwYWQKLQl0ZW1wID0gSU5QTEwoQ0xLX1BJTl9DTlRMKTsKLQlPVVRQTEwoQ0xLX1BJTl9DTlRMLCB0ZW1wIHwgMHgwMDA4MDAwMCk7Ci0KLQkvLyBGb3JjZSBNQ0xLIGFuZCBZQ0xLIGFuZCBNQyBhcyBkeW5hbWljCi0gICAgCXRlbXAgPSBJTlBMTChNQ0xLX0NOVEwpOwotCU9VVFBMTChNQ0xLX0NOVEwsIHRlbXAgJiAweGZmZWFmZmZmKTsKLQotCS8vIFBMTF9UVVJOT0ZGCi0JdGVtcCA9IElOUExMKFBMTF9QV1JNR1RfQ05UTCk7Ci0JT1VUUExMKFBMTF9QV1JNR1RfQ05UTCwgdGVtcCB8IDB4MDAwMDAwMWYpOwotIAotCS8vIHNldCBNT0JJTEVfU1UgdG8gMSBpZiBNNiBvciBERFI2NCBpcyBkZXRlY3RlZAotCXRlbXAgPSBJTlBMTChQTExfUFdSTUdUX0NOVEwpOwotCU9VVFBMTChQTExfUFdSTUdUX0NOVEwsIHRlbXAgfCAweDAwMDEwMDAwKTsKLQotCS8vIHNlbGVjdCBQTSBhY2Nlc3MgbW9kZSAoUE1fTU9ERV9TRUwpICh1c2UgQUNQSSBtb2RlKQotLy8gICAgICB0ZW1wID0gSU5QTEwoUExMX1BXUk1HVF9DTlRMKTsKLS8vICAgICAgT1VUUExMKFBMTF9QV1JNR1RfQ05UTCwgdGVtcCB8IDB4MDAwMDIwMDApOwotCXRlbXAgPSBJTlBMTChQTExfUFdSTUdUX0NOVEwpOwotICAgICAgICBPVVRQTEwoUExMX1BXUk1HVF9DTlRMLCB0ZW1wICYgfjB4MDAwMDIwMDApOwotCi0JLy8gc2V0IERJU1BfTUlTQ19DTlRMIHJlZ2lzdGVyCi0JZGlzcF9taXNjX2NudGwgPSBJTlJFRyhESVNQX01JU0NfQ05UTCk7Ci0JZGlzcF9taXNjX2NudGwgJj0gfigJRElTUF9NSVNDX0NOVExfU09GVF9SRVNFVF9HUlBIX1BQIHwKLQkJCQlESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX1NVQlBJQ19QUCB8Ci0JCQkJRElTUF9NSVNDX0NOVExfU09GVF9SRVNFVF9PVjBfUFAgfAotCQkJCURJU1BfTUlTQ19DTlRMX1NPRlRfUkVTRVRfR1JQSF9TQ0xLIHwKLQkJCQlESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX1NVQlBJQ19TQ0xLIHwKLQkJCQlESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX09WMF9TQ0xLIHwKLQkJCQlESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX0dSUEgyX1BQIHwKLQkJCQlESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX0dSUEgyX1NDTEsgfAotCQkJCURJU1BfTUlTQ19DTlRMX1NPRlRfUkVTRVRfTFZEUyB8Ci0JCQkJRElTUF9NSVNDX0NOVExfU09GVF9SRVNFVF9UTURTIHwKLQkJCQlESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX0RJR19UTURTIHwKLQkJCQlESVNQX01JU0NfQ05UTF9TT0ZUX1JFU0VUX1RWKTsKLQlPVVRSRUcoRElTUF9NSVNDX0NOVEwsIGRpc3BfbWlzY19jbnRsKTsKLQotCS8vIHNldCBESVNQX1BXUl9NQU4gcmVnaXN0ZXIKLQlkaXNwX3B3cl9tYW4gPSBJTlJFRyhESVNQX1BXUl9NQU4pOwotCS8vIGNsYXUgLSA5LjI5LjIwMDAgLSBjaGFuZ2VzIG1hZGUgdG8gYml0MjM6MTggdG8gc2V0IHRvIDEgYXMgcmVxdWVzdGVkIGJ5IEdlb3JnZQotCWRpc3BfcHdyX21hbiB8PSAoRElTUF9QV1JfTUFOX0RJR19UTURTX0VOQUJMRV9SU1QgfAotICAgICAgICAgICAgICAgICAgICBESVNQX1BXUl9NQU5fVFZfRU5BQkxFX1JTVCB8Ci0gLy8gICAgICAgICAgICAgICAgIERJU1BfUFdSX01BTl9BVVRPX1BXUlVQX0VOIHwKLSAgICAgICAgICAgICAgICAgICAgRElTUF9QV1JfTUFOX0RJU1BfRDNfR1JQSF9SU1QgfAotICAgICAgICAgICAgICAgICAgICBESVNQX1BXUl9NQU5fRElTUF9EM19TVUJQSUNfUlNUIHwKLSAgICAgICAgICAgICAgICAgICAgRElTUF9QV1JfTUFOX0RJU1BfRDNfT1YwX1JTVCB8Ci0gICAgICAgICAgICAgICAgICAgIERJU1BfUFdSX01BTl9ESVNQX0QxRDJfR1JQSF9SU1QgfAotICAgICAgICAgICAgICAgICAgICBESVNQX1BXUl9NQU5fRElTUF9EMUQyX1NVQlBJQ19SU1QgfAotICAgICAgICAgICAgICAgICAgICBESVNQX1BXUl9NQU5fRElTUF9EMUQyX09WMF9SU1QpOwotCWRpc3BfcHdyX21hbiAmPSB+KERJU1BfUFdSX01BTl9ESVNQX1BXUl9NQU5fRDNfQ1JUQ19FTiB8Ci0gICAgICAgICAgICAgICAgICAgIERJU1BfUFdSX01BTl9ESVNQMl9QV1JfTUFOX0QzX0NSVEMyX0VOfAotICAgICAgICAgICAgICAgICAgICBESVNQX1BXUl9NQU5fRElTUF9EM19SU1QgfAotICAgICAgICAgICAgICAgICAgICBESVNQX1BXUl9NQU5fRElTUF9EM19SRUdfUlNUKTsKLQlPVVRSRUcoRElTUF9QV1JfTUFOLCBkaXNwX3B3cl9tYW4pOwotCi0JLy8gY2xhdSAtIDEwLjI0LjIwMDAKLQkvLyAtIGFkZCBpbiBzZXR0aW5nIGZvciBCVVNfQ05UTDEgYjI3OjI2ID0gMHgwMSBhbmQgYjMxID0gMHgxCi0JLy8gLSBhZGQgaW4gc2V0dGluZyBmb3IgQUdQX0NOVEwgIGI3OjAgPSAweDIwCi0JLy8gLSBhZGQgaW4gc2V0dGluZyBmb3IgRFZJX0REQ19EQVRBX09VVF9FTiBiMTc6MTYgPSAweDAKLQotCS8vIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgKHR3byBsaW5lcykgYXJlIGFwcGxpZWQgYXQgYSBsYXRlciBwYXJ0IG9mIHRoaXMgZnVuY3Rpb24sIG9ubHkgb24gbW9iaWxlIHBsYXRmb3JtCi0JLy8gcmVxdXJlcyAtbW9iaWxlIGZsYWcKLQlPVVRSRUcoQlVTX0NOVEwxLCAoSU5SRUcoQlVTX0NOVEwxKSAmIDB4ZjNmZmZmZmYpIHwgMHgwNDAwMDAwMCk7Ci0JT1VUUkVHKEJVU19DTlRMMSwgIElOUkVHKEJVU19DTlRMMSkgfCAweDgwMDAwMDAwKTsKLQlPVVRSRUcoQUdQX0NOVEwsIChJTlJFRyhBR1BfQ05UTCkgJiAweGZmZmZmZjAwKSB8IDB4MjApOwotCU9VVFJFRyhHUElPX0RWSV9EREMsIElOUkVHKEdQSU9fRFZJX0REQykgJiAweGZmZmNmZmZmKTsKLQotCS8vIHl1bGVlIC0gMTIuMTIuMjAwMAotCS8vIEExMiBvbmx5Ci0JLy8gRU5fTUNMS19UUklTVEFURV9JTl9TVVNQRU5EQE1DTEtfTUlTQyA9IDEKLQkvLyBBQ0NFU1NfUkVHU19JTl9TVVNQRU5EQENMS19QSU5fQ05UTCA9IDAKLQkvLyBvbmx5IG9uIG1vYmlsZSBwbGF0Zm9ybQotICAgICAgICBPVVRQTEwoTUNMS19NSVNDLCBJTlBMTChNQ0xLX01JU0MpIHwgMHgwMDA0MDAwMCApOwotICAgIAkKLQkvLyB5dWxlZSAtMTIuMTIuMjAwMAotCS8vIEFHUENMS19WQUxJREBCVVNfQ05UTDEgPSAxCi0JLy8gTU9CSUxFX1BMQVRGT1JNX1NFTEBCVVNfQ05UTDEgPSAwMQotCS8vIENSVENfU1RFUkVPX1NZTkNfT1VUX0VOQENSVENfT0ZGU0VUX0NOVEwgPSAwCi0JLy8gQ0dfQ0xLX1RPX09VVFBJTkBDTEtfUElOX0NOVEwgPSAwCi0JLy8gb25seSBvbiBtb2JpbGUgcGxhdGZvcm0KLSAgICAgICAgT1VUUExMKENMS19QSU5fQ05UTCwgSU5QTEwoQ0xLX1BJTl9DTlRMICkgJiAweEZGRkZGN0ZGICk7Ci0gICAgICAgIE9VVFJFRyhCVVNfQ05UTDEsIChJTlJFRyhCVVNfQ05UTDEgKSAmIDB4RjNGRkZGRkYpIHwgMHg4NDAwMDAwMCApOwotICAgICAgICBPVVRSRUcoQ1JUQ19PRkZTRVRfQ05UTCwgSU5SRUcoQ1JUQ19PRkZTRVRfQ05UTCApICYgMHhGRkVGRkZGRiApOwotCi0gICAgICAgIG1kZWxheSgxMDApOwotI2VuZGlmCi0KLQkvKiBEaXNhYmxlIENSVENzICovCi0JT1VUUkVHKENSVENfR0VOX0NOVEwsIChJTlJFRyhDUlRDX0dFTl9DTlRMKSAmIH5DUlRDX0VOKSB8IENSVENfRElTUF9SRVFfRU5fQik7Ci0JT1VUUkVHKENSVEMyX0dFTl9DTlRMLCAoSU5SRUcoQ1JUQzJfR0VOX0NOVEwpICYgfkNSVEMyX0VOKSB8IENSVEMyX0RJU1BfUkVRX0VOX0IpOwotCSh2b2lkKUlOUkVHKENSVEMyX0dFTl9DTlRMKTsKLQltZGVsYXkoMTcpOwotfQotCi1zdGF0aWMgdm9pZCByYWRlb25fc2V0X3N1c3BlbmQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCBpbnQgc3VzcGVuZCkKLXsKLQl1MTYgcHdyX2NtZDsKLQotCWlmICghcmluZm8tPnBtX3JlZykKLQkJcmV0dXJuOwotCi0JLyogU2V0IHRoZSBjaGlwIGludG8gYXBwcm9wcmlhdGUgc3VzcGVuZCBtb2RlICh3ZSB1c2UgRDIsCi0JICogRDMgd291bGQgcmVxdWlyZSBhIGNvbXBldGUgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNoaXAsCi0JICogaW5jbHVkaW5nIFBDSSBjb25maWcgcmVnaXN0ZXJzLCBjbG9ja3MsIEFHUCBjb25mLCAuLi4pCi0JICovCi0JaWYgKHN1c3BlbmQpIHsKLQkJLyogQWNjb3JkaW5nIHRvIEFUSSwgd2Ugc2hvdWxkIHByb2dyYW0gVjJDTEsgaGVyZSwgSSBoYXZlCi0JCSAqIHRvIHZlcmlmeSB3aGF0J3MgdXAgZXhhY3RseQotCQkgKi8KLQkJLyogU2F2ZSBzb21lIHJlZ2lzdGVycyAqLwotCQlyYWRlb25fcG1fc2F2ZV9yZWdzKHJpbmZvKTsKLQotCQkvKiBDaGVjayB0aGF0IG9uIE03IHRvbywgbWlnaHQgd29yayBtaWdodCBub3QuIE03IG1heSBhbHNvCi0JCSAqIG5lZWQgZXhwbGljaXQgZW5hYmxpbmcgb2YgUE0KLQkJICovCi0JCWlmIChyaW5mby0+YXJjaCA9PSBSQURFT05fTTYpIHsKLQkJCS8qIFByb2dyYW0gVjJDTEsgKi8KLQkJCXJhZGVvbl9wbV9wcm9ncmFtX3YyY2xrKHJpbmZvKTsKLQkJCi0JCQkvKiBEaXNhYmxlIElPIFBBRHMgKi8KLQkJCXJhZGVvbl9wbV9kaXNhYmxlX2lvcGFkKHJpbmZvKTsKLQotCQkJLyogU2V0IGxvdyBjdXJyZW50ICovCi0JCQlyYWRlb25fcG1fbG93X2N1cnJlbnQocmluZm8pOwotCi0JCQkvKiBQcmVwYXJlIGNoaXAgZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KLQkJCXJhZGVvbl9wbV9zZXR1cF9mb3Jfc3VzcGVuZChyaW5mbyk7Ci0KLQkJCS8qIFJlc2V0IHRoZSBNRExMICovCi0JCQlPVVRQTEwoTURMTF9DS08sIElOUExMKE1ETExfQ0tPKSB8IE1DS09BX1JFU0VUKTsKLQkJCSh2b2lkKUlOUExMKE1ETExfUkRDS0EpOwotCQkJT1VUUExMKE1ETExfQ0tPLCBJTlBMTChNRExMX0NLTykgJiB+TUNLT0FfUkVTRVQpOwotCQkJKHZvaWQpSU5QTEwoTURMTF9SRENLQSk7Ci0JCX0KLQotCQkvKiBTd2l0Y2ggUENJIHBvd2VyIG1hbmFnbWVudCB0byBEMi4gKi8KLQkJZm9yICg7OykgewotCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoCi0JCQkJcmluZm8tPnBkZXYsIHJpbmZvLT5wbV9yZWcrUENJX1BNX0NUUkwsCi0JCQkJJnB3cl9jbWQpOwotCQkJaWYgKHB3cl9jbWQgJiAyKQotCQkJCWJyZWFrOwkJCQotCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKAotCQkJCXJpbmZvLT5wZGV2LCByaW5mby0+cG1fcmVnK1BDSV9QTV9DVFJMLAotCQkJCShwd3JfY21kICYgflBDSV9QTV9DVFJMX1NUQVRFX01BU0spIHwgMik7Ci0JCQltZGVsYXkoNTAwKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFN3aXRjaCBiYWNrIFBDSSBwb3dlcm1hbmFnbWVudCB0byBEMCAqLwotCQltZGVsYXkoMjAwKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJpbmZvLT5wZGV2LCByaW5mby0+cG1fcmVnK1BDSV9QTV9DVFJMLCAwKTsKLQkJbWRlbGF5KDUwMCk7Ci0KLQkJZGJnX2NsayA9IElOUExMKDEpOwotCi0JCS8qIERvIHdlIG5lZWQgdGhhdCBvbiBNNyA/ICovCi0JCWlmIChyaW5mby0+YXJjaCA9PSBSQURFT05fTTYpIHsKLQkJCS8qIFJlc3RvcmUgdGhlIE1ETEwgKi8KLQkJCU9VVFBMTChNRExMX0NLTywgSU5QTEwoTURMTF9DS08pICYgfk1DS09BX1JFU0VUKTsKLQkJCSh2b2lkKUlOUExMKE1ETExfQ0tPKTsJCQkKLQkJfQotCQkKLQkJLyogUmVzdG9yZSBzb21lIHJlZ2lzdGVycyAqLwotCQlyYWRlb25fcG1fcmVzdG9yZV9yZWdzKHJpbmZvKTsKLQl9Ci19Ci0KLS8qCi0gKiBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgZnJhbWVidWZmZXIgd2hlbiB3ZSBnbyB0byBzbGVlcCwKLSAqIGFuZCByZXN0b3JlIGl0IHdoZW4gd2Ugd2FrZSB1cCBhZ2Fpbi4KLSAqLwotCi1pbnQgcmFkZW9uX3NsZWVwX25vdGlmeShzdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyICpzZWxmLCBpbnQgd2hlbikKLXsKLQlzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm87Ci0KLQlmb3IgKHJpbmZvID0gYm9hcmRfbGlzdDsgcmluZm8gIT0gTlVMTDsgcmluZm8gPSByaW5mby0+bmV4dCkgewotCQlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZml4OwotCQlpbnQgbmI7Ci0JICAgICAgICBzdHJ1Y3QgZGlzcGxheSAqZGlzcDsgIAotCi0gICAgICAgIAlkaXNwID0gKHJpbmZvLT5jdXJyY29uIDwgMCkgPyByaW5mby0+aW5mby5kaXNwIDogJmZiX2Rpc3BsYXlbcmluZm8tPmN1cnJjb25dOwotCi0JCXN3aXRjaCAocmluZm8tPmFyY2gpIHsKLQkJCWNhc2UgUkFERU9OX002OgotCQkJY2FzZSBSQURFT05fTTc6Ci0JCQljYXNlIFJBREVPTl9NOToKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIFBCT09LX1NMRUVQX1JFRlVTRTsKLQkJfQotCi0JCXJhZGVvbmZiX2dldF9maXgoJmZpeCwgZmdfY29uc29sZSwgKHN0cnVjdCBmYl9pbmZvICopcmluZm8pOwotCQluYiA9IGZiX2Rpc3BsYXlbZmdfY29uc29sZV0udmFyLnlyZXMgKiBmaXgubGluZV9sZW5ndGg7Ci0KLQkJc3dpdGNoICh3aGVuKSB7Ci0JCQljYXNlIFBCT09LX1NMRUVQX05PVzoKLQkJCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JCQkJZGlzcC0+ZGlzcHN3ID0gJmZiY29uX2R1bW15OwotCi0JCQkJaWYgKCFub2FjY2VsKSB7Ci0JCQkJCS8qIE1ha2Ugc3VyZSBlbmdpbmUgaXMgcmVzZXQgKi8KLQkJCQkJcmFkZW9uX2VuZ2luZV9yZXNldCgpOwotCQkJCQlyYWRlb25fZW5naW5lX2lkbGUoKTsKLQkJCQl9Ci0KLQkJCQkvKiBCbGFuayBkaXNwbGF5IGFuZCBMQ0QgKi8KLQkJCQlyYWRlb25mYl9ibGFuayhWRVNBX1BPV0VSRE9XTisxLAotCQkJCQkgICAgICAgKHN0cnVjdCBmYl9pbmZvICopcmluZm8pOwotCi0JCQkJLyogU2xlZXAgKi8KLQkJCQlyaW5mby0+YXNsZWVwID0gMTsKLQkJCQlyYWRlb25fc2V0X3N1c3BlbmQocmluZm8sIDEpOwotCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJCQkKLQkJCQlicmVhazsKLQkJCWNhc2UgUEJPT0tfV0FLRToKLQkJCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JCQkJLyogV2FrZXVwICovCi0JCQkJcmFkZW9uX3NldF9zdXNwZW5kKHJpbmZvLCAwKTsKLQotCQkJCWlmICghbm9hY2NlbCkKLQkJCQkJcmFkZW9uX2VuZ2luZV9pbml0KHJpbmZvKTsKLQkJCQlyaW5mby0+YXNsZWVwID0gMDsKLQkJCQlyYWRlb25fc2V0X2Rpc3BzdyhyaW5mbywgZGlzcCk7Ci0JCQkJcmFkZW9uX2xvYWRfdmlkZW9fbW9kZShyaW5mbywgJmRpc3AtPnZhcik7Ci0JCQkJZG9faW5zdGFsbF9jbWFwKHJpbmZvLT5jdXJyY29uIDwgMCA/IDAgOiByaW5mby0+Y3VycmNvbiwKLQkJCQkJCShzdHJ1Y3QgZmJfaW5mbyAqKXJpbmZvKTsKLQotCQkJCXJhZGVvbmZiX2JsYW5rKDAsIChzdHJ1Y3QgZmJfaW5mbyAqKXJpbmZvKTsKLQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCQkJcHJpbnRrKCJDTEtfUElOX0NOVEwgb24gd2FrZXVwIHdhczogJTA4eFxuIiwgZGJnX2Nsayk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gUEJPT0tfU0xFRVBfT0s7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfUE1BQ19QQk9PSyAqLwotCi1zdGF0aWMgaW50IHJhZGVvbmZiX3BjaV9yZWdpc3RlciAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQotewotCXN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbzsKLQlzdHJ1Y3QgcmFkZW9uX2NoaXBfaW5mbyAqcmNpID0gJnJhZGVvbl9jaGlwX2luZm9bZW50LT5kcml2ZXJfZGF0YV07Ci0JdTMyIHRtcDsKLQotCVJUUkFDRSgicmFkZW9uZmJfcGNpX3JlZ2lzdGVyIEJFR0lOXG4iKTsKLQotCS8qIEVuYWJsZSBkZXZpY2UgaW4gUENJIGNvbmZpZyAqLwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkZW9uZmI6IENhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJpbmZvID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghcmluZm8pIHsKLQkJcHJpbnRrICgicmFkZW9uZmI6IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQltZW1zZXQgKHJpbmZvLCAwLCBzaXplb2YgKHN0cnVjdCByYWRlb25mYl9pbmZvKSk7Ci0JLy9pbmZvID0gJnJpbmZvLT5pbmZvOwotCXJpbmZvLT5wZGV2ID0gcGRldjsKLQlzdHJjcHkocmluZm8tPm5hbWUsIHJjaS0+bmFtZSk7Ci0JcmluZm8tPmFyY2ggPSByY2ktPmFyY2g7Ci0KLQkvKiBTZXQgYmFzZSBhZGRycyAqLwotCXJpbmZvLT5mYl9iYXNlX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApOwotCXJpbmZvLT5tbWlvX2Jhc2VfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMik7Ci0KLQkvKiByZXF1ZXN0IHRoZSBtZW0gcmVnaW9ucyAqLwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uIChyaW5mby0+ZmJfYmFzZV9waHlzLAotCQkJCSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApLCAicmFkZW9uZmIiKSkgewotCQlwcmludGsgKCJyYWRlb25mYjogY2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iKTsKLQkJa2ZyZWUgKHJpbmZvKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24gKHJpbmZvLT5tbWlvX2Jhc2VfcGh5cywKLQkJCQkgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSwgInJhZGVvbmZiIikpIHsKLQkJcHJpbnRrICgicmFkZW9uZmI6IGNhbm5vdCByZXNlcnZlIE1NSU8gcmVnaW9uXG4iKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uIChyaW5mby0+ZmJfYmFzZV9waHlzLAotCQkJCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQkJa2ZyZWUgKHJpbmZvKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyogbWFwIHRoZSByZWdpb25zICovCi0JcmluZm8tPm1taW9fYmFzZSA9IGlvcmVtYXAgKHJpbmZvLT5tbWlvX2Jhc2VfcGh5cywgUkFERU9OX1JFR1NJWkUpOwotCWlmICghcmluZm8tPm1taW9fYmFzZSkgewotCQlwcmludGsgKCJyYWRlb25mYjogY2Fubm90IG1hcCBNTUlPXG4iKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uIChyaW5mby0+bW1pb19iYXNlX3BoeXMsCi0JCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpOwotCQlyZWxlYXNlX21lbV9yZWdpb24gKHJpbmZvLT5mYl9iYXNlX3BoeXMsCi0JCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwotCQlrZnJlZSAocmluZm8pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyaW5mby0+Y2hpcHNldCA9IHBkZXYtPmRldmljZTsKLQotCXN3aXRjaCAocmluZm8tPmFyY2gpIHsKLQkJY2FzZSBSQURFT05fUjEwMDoKLQkJCXJpbmZvLT5oYXNDUlRDMiA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIGFsbCB0aGUgcmVzdCBoYXZlIGl0ICovCi0JCQlyaW5mby0+aGFzQ1JUQzIgPSAxOwotCQkJYnJlYWs7Ci0JfQotI2lmIDAKLQlpZiAocmluZm8tPmFyY2ggPT0gUkFERU9OX003KSB7Ci0JCS8qCi0JCSAqIE5vdGljZWQgc29tZSBlcnJvcnMgaW4gYWNjZWwgd2l0aCBNNywgd2lsbCBoYXZlIHRvIHdvcmsgdGhlc2Ugb3V0Li4uCi0JCSAqLwotCQlub2FjY2VsID0gMTsKLQl9Ci0jZW5kaWYKLQlpZiAobWlycm9yKQotCQlwcmludGsoInJhZGVvbmZiOiBtaXJyb3JpbmcgZGlzcGxheSB0byBDUlRcbiIpOwotCi0JLyogZnJhbWVidWZmZXIgc2l6ZSAqLwotCXRtcCA9IElOUkVHKENPTkZJR19NRU1TSVpFKTsKLQotCS8qIG1lbSBzaXplIGlzIGJpdHMgWzI4OjBdLCBtYXNrIG9mZiB0aGUgcmVzdCAqLwotCXJpbmZvLT52aWRlb19yYW0gPSB0bXAgJiBDT05GSUdfTUVNU0laRV9NQVNLOwotCi0JLyogcmFtIHR5cGUgKi8KLQl0bXAgPSBJTlJFRyhNRU1fU0RSQU1fTU9ERV9SRUcpOwotCXN3aXRjaCAoKE1FTV9DRkdfVFlQRSAmIHRtcCkgPj4gMzApIHsKLQkJY2FzZSAwOgotCQkJLyogU0RSIFNHUkFNICgyOjEpICovCi0JCQlzdHJjcHkocmluZm8tPnJhbV90eXBlLCAiU0RSIFNHUkFNIik7Ci0JCQlyaW5mby0+cmFtLm1sID0gNDsKLQkJCXJpbmZvLT5yYW0ubWIgPSA0OwotCQkJcmluZm8tPnJhbS50cmNkID0gMTsKLQkJCXJpbmZvLT5yYW0udHJwID0gMjsKLQkJCXJpbmZvLT5yYW0udHdyID0gMTsKLQkJCXJpbmZvLT5yYW0uY2wgPSAyOwotCQkJcmluZm8tPnJhbS5sb29wX2xhdGVuY3kgPSAxNjsKLQkJCXJpbmZvLT5yYW0ucmxvb3AgPSAxNjsKLQkKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQkvKiBERFIgU0dSQU0gKi8KLQkJCXN0cmNweShyaW5mby0+cmFtX3R5cGUsICJERFIgU0dSQU0iKTsKLQkJCXJpbmZvLT5yYW0ubWwgPSA0OwotCQkJcmluZm8tPnJhbS5tYiA9IDQ7Ci0JCQlyaW5mby0+cmFtLnRyY2QgPSAzOwotCQkJcmluZm8tPnJhbS50cnAgPSAzOwotCQkJcmluZm8tPnJhbS50d3IgPSAyOwotCQkJcmluZm8tPnJhbS5jbCA9IDM7Ci0JCQlyaW5mby0+cmFtLnRyMncgPSAxOwotCQkJcmluZm8tPnJhbS5sb29wX2xhdGVuY3kgPSAxNjsKLQkJCXJpbmZvLT5yYW0ucmxvb3AgPSAxNjsKLQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiA2NC1iaXQgU0RSIFNHUkFNICovCi0JCQlzdHJjcHkocmluZm8tPnJhbV90eXBlLCAiU0RSIFNHUkFNIDY0Iik7Ci0JCQlyaW5mby0+cmFtLm1sID0gNDsKLQkJCXJpbmZvLT5yYW0ubWIgPSA4OwotCQkJcmluZm8tPnJhbS50cmNkID0gMzsKLQkJCXJpbmZvLT5yYW0udHJwID0gMzsKLQkJCXJpbmZvLT5yYW0udHdyID0gMTsKLQkJCXJpbmZvLT5yYW0uY2wgPSAzOwotCQkJcmluZm8tPnJhbS50cjJ3ID0gMTsKLQkJCXJpbmZvLT5yYW0ubG9vcF9sYXRlbmN5ID0gMTc7Ci0JCQlyaW5mby0+cmFtLnJsb29wID0gMTc7Ci0KLQkJCWJyZWFrOwotCX0KLQotCXJpbmZvLT5iaW9zX3NlZyA9IHJhZGVvbl9maW5kX3JvbShyaW5mbyk7Ci0JcmFkZW9uX2dldF9wbGxpbmZvKHJpbmZvLCByaW5mby0+Ymlvc19zZWcpOwotCi0JLyoKLQkgKiBIYWNrIHRvIGdldCBhcm91bmQgc29tZSBidXN0ZWQgcHJvZHVjdGlvbiBNNidzCi0JICogcmVwb3J0aW5nIG5vIHJhbQotCSAqLwotCWlmIChyaW5mby0+dmlkZW9fcmFtID09IDApIHsKLQkJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKLQkJCWNhc2UgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xZOgotCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTFo6Ci0JCQkJcmluZm8tPnZpZGVvX3JhbSA9IDgxOTIgKiAxMDI0OwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCi0JUlRSQUNFKCJyYWRlb25mYjogcHJvYmVkICVzICVkayB2aWRlb3JhbVxuIiwgKHJpbmZvLT5yYW1fdHlwZSksIChyaW5mby0+dmlkZW9fcmFtLzEwMjQpKTsKLQotI2lmICFkZWZpbmVkKF9fcG93ZXJwY19fKQotCXJhZGVvbl9nZXRfbW9uaW5mbyhyaW5mbyk7Ci0jZWxzZQotCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xXOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MWDoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTFk6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xaOgotCQkJcmluZm8tPmR2aURpc3BfdHlwZSA9IE1UX0xDRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmFkZW9uX2dldF9tb25pbmZvKHJpbmZvKTsKLQkJCWJyZWFrOwotCX0KLSNlbmRpZgotCi0JcmFkZW9uX2dldF9FRElEKHJpbmZvKTsKLQotCWlmICgocmluZm8tPmR2aURpc3BfdHlwZSA9PSBNVF9ERlApIHx8IChyaW5mby0+ZHZpRGlzcF90eXBlID09IE1UX0xDRCkgfHwKLQkgICAgKHJpbmZvLT5jcnREaXNwX3R5cGUgPT0gTVRfREZQKSkgewotCQlpZiAoIXJhZGVvbl9nZXRfZGZwaW5mbyhyaW5mbykpIHsKLQkJCWlvdW5tYXAocmluZm8tPm1taW9fYmFzZSk7Ci0JCQlyZWxlYXNlX21lbV9yZWdpb24gKHJpbmZvLT5tbWlvX2Jhc2VfcGh5cywKLQkJCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uIChyaW5mby0+ZmJfYmFzZV9waHlzLAotCQkJCQkgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JCQlrZnJlZSAocmluZm8pOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0KLQlyaW5mby0+ZmJfYmFzZSA9IGlvcmVtYXAgKHJpbmZvLT5mYl9iYXNlX3BoeXMsIHJpbmZvLT52aWRlb19yYW0pOwotCWlmICghcmluZm8tPmZiX2Jhc2UpIHsKLQkJcHJpbnRrICgicmFkZW9uZmI6IGNhbm5vdCBtYXAgRkJcbiIpOwotCQlpb3VubWFwKHJpbmZvLT5tbWlvX2Jhc2UpOwotCQlyZWxlYXNlX21lbV9yZWdpb24gKHJpbmZvLT5tbWlvX2Jhc2VfcGh5cywKLQkJCQkgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSk7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbiAocmluZm8tPmZiX2Jhc2VfcGh5cywKLQkJCQkgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JCWtmcmVlIChyaW5mbyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qIEkgU0hPVUxEIEZJWCBUSEFUIENSQVAgISBJIHNob3VsZCBwcm9iYWJseSBtaW1taWMgWEZyZWUgRFJJCi0JICogZHJpdmVyIHNldHVwIGhlcmUuCi0JICogCi0JICogT24gUFBDLCBPRiBiYXNlZCBjYXJkcyBzZXR1cCB0aGUgaW50ZXJuYWwgbWVtb3J5Ci0JICogbWFwcGluZyBpbiBzdHJhbmdlIHdheXMuIFdlIGNoYW5nZSBpdCBzbyB0aGF0IHRoZQotCSAqIGZyYW1lYnVmZmVyIGlzIG1hcHBlZCBhdCAwIGFuZCBnaXZlbiBoYWxmIG9mIHRoZSBjYXJkJ3MKLQkgKiBhZGRyZXNzIHNwYWNlICgyR2IpLiBBR1AgaXMgbWFwcGVkIGhpZ2ggKDB4ZTAwMDAwMDApIGFuZAotCSAqIGNhbiB1c2UgdXAgdG8gNTEyTWIuIE9uY2UgRFJJIGlzIGZ1bGx5IGltcGxlbWVudGVkLCB3ZQotCSAqIHdpbGwgaGF2ZSB0byBzZXR1cCB0aGUgUENJIHJlbWFwcGVyIHRvIHJlbWFwIHRoZSBhZ3Bfc3BlY2lhbF9wYWdlCi0JICogbWVtb3J5IHBhZ2Ugc29tZXdoZXJlIGJldHdlZW4gdGhvc2UgcmVnaW9ucyBzbyB0aGF0IHRoZSBjYXJkCi0JICogdXNlIGEgbm9ybWFsIFBDSSBidXMgbWFzdGVyIGN5Y2xlIHRvIGFjY2VzcyB0aGUgcmluZyByZWFkIHB0ci4KLQkgKiAtLUJlbkguCi0JICovCi0jaWZkZWYgQ09ORklHX0FMTF9QUEMKLQlpZiAocmluZm8tPmhhc0NSVEMyKQotCQlPVVRSRUcoQ1JUQzJfR0VOX0NOVEwsCi0JCQkoSU5SRUcoQ1JUQzJfR0VOX0NOVEwpICYgfkNSVEMyX0VOKSB8IENSVEMyX0RJU1BfUkVRX0VOX0IpOwotCU9VVFJFRyhDUlRDX0VYVF9DTlRMLCBJTlJFRyhDUlRDX0VYVF9DTlRMKSB8IENSVENfRElTUExBWV9ESVMpOwotCU9VVFJFRyhNQ19GQl9MT0NBVElPTiwgMHg3ZmZmMDAwMCk7Ci0JT1VUUkVHKE1DX0FHUF9MT0NBVElPTiwgMHhmZmZmZTAwMCk7Ci0JT1VUUkVHKERJU1BMQVlfQkFTRV9BRERSLCAweDAwMDAwMDAwKTsKLQlpZiAocmluZm8tPmhhc0NSVEMyKQotCQlPVVRSRUcoQ1JUQzJfRElTUExBWV9CQVNFX0FERFIsIDB4MDAwMDAwMDApOwotCU9VVFJFRyhTUkNfT0ZGU0VULCAweDAwMDAwMDAwKTsKLQlPVVRSRUcoRFNUX09GRlNFVCwgMHgwMDAwMDAwMCk7Ci0JbWRlbGF5KDEwKTsKLQlPVVRSRUcoQ1JUQ19FWFRfQ05UTCwgSU5SRUcoQ1JUQ19FWFRfQ05UTCkgJiB+Q1JUQ19ESVNQTEFZX0RJUyk7Ci0jZW5kaWYgLyogQ09ORklHX0FMTF9QUEMgKi8KLQotCS8qIHNhdmUgY3VycmVudCBtb2RlIHJlZ3MgYmVmb3JlIHdlIHN3aXRjaCBpbnRvIHRoZSBuZXcgb25lCi0JICogc28gd2UgY2FuIHJlc3RvcmUgdGhpcyB1cG9uIF9fZXhpdAotCSAqLwotCXJhZGVvbl9zYXZlX3N0YXRlIChyaW5mbywgJnJpbmZvLT5pbml0X3N0YXRlKTsKLQotCS8qIHNldCBhbGwgdGhlIHZpdGFsIHN0dWZmICovCi0JcmFkZW9uX3NldF9mYmluZm8gKHJpbmZvKTsKLQotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCByaW5mbyk7Ci0JcmluZm8tPm5leHQgPSBib2FyZF9saXN0OwotCWJvYXJkX2xpc3QgPSByaW5mbzsKLQkoKHN0cnVjdCBmYl9pbmZvICopIHJpbmZvKS0+ZGV2aWNlID0gJnBkZXYtPmRldjsKLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIgKChzdHJ1Y3QgZmJfaW5mbyAqKSByaW5mbykgPCAwKSB7Ci0JCXByaW50ayAoInJhZGVvbmZiOiBjb3VsZCBub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIpOwotCQlpb3VubWFwKHJpbmZvLT5mYl9iYXNlKTsKLQkJaW91bm1hcChyaW5mby0+bW1pb19iYXNlKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uIChyaW5mby0+bW1pb19iYXNlX3BoeXMsCi0JCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpOwotCQlyZWxlYXNlX21lbV9yZWdpb24gKHJpbmZvLT5mYl9iYXNlX3BoeXMsCi0JCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwotCQlrZnJlZSAocmluZm8pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTVRSUgotCXJpbmZvLT5tdHJyX2hkbCA9IG5vbXRyciA/IC0xIDogbXRycl9hZGQocmluZm8tPmZiX2Jhc2VfcGh5cywKLQkJCQkJCSByaW5mby0+dmlkZW9fcmFtLAotCQkJCQkJIE1UUlJfVFlQRV9XUkNPTUIsIDEpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQlpZiAocmluZm8tPmR2aURpc3BfdHlwZSA9PSBNVF9MQ0QpCi0JCXJlZ2lzdGVyX2JhY2tsaWdodF9jb250cm9sbGVyKCZyYWRlb25fYmFja2xpZ2h0X2NvbnRyb2xsZXIsCi0JCQkJCSAgICAgIHJpbmZvLCAiYXRpIik7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19QTUFDX1BCT09LCi0JaWYgKHJpbmZvLT5kdmlEaXNwX3R5cGUgPT0gTVRfTENEKSB7Ci0JCXJpbmZvLT5wbV9yZWcgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOwotCQlwbXVfcmVnaXN0ZXJfc2xlZXBfbm90aWZpZXIoJnJhZGVvbl9zbGVlcF9ub3RpZmllcik7Ci0JfQotI2VuZGlmCi0KLQlwcmludGsgKCJyYWRlb25mYjogQVRJIFJhZGVvbiAlcyAlcyAlZCBNQlxuIiwgcmluZm8tPm5hbWUsIHJpbmZvLT5yYW1fdHlwZSwKLQkJKHJpbmZvLT52aWRlb19yYW0vKDEwMjQqMTAyNCkpKTsKLQotCWlmIChyaW5mby0+aGFzQ1JUQzIpIHsKLQkJcHJpbnRrKCJyYWRlb25mYjogRFZJIHBvcnQgJXMgbW9uaXRvciBjb25uZWN0ZWRcbiIsCi0JCQlHRVRfTU9OX05BTUUocmluZm8tPmR2aURpc3BfdHlwZSkpOwotCQlwcmludGsoInJhZGVvbmZiOiBDUlQgcG9ydCAlcyBtb25pdG9yIGNvbm5lY3RlZFxuIiwKLQkJCUdFVF9NT05fTkFNRShyaW5mby0+Y3J0RGlzcF90eXBlKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJyYWRlb25mYjogQ1JUIHBvcnQgJXMgbW9uaXRvciBjb25uZWN0ZWRcbiIsCi0JCQlHRVRfTU9OX05BTUUocmluZm8tPmNydERpc3BfdHlwZSkpOwotCX0KLQotCVJUUkFDRSgicmFkZW9uZmJfcGNpX3JlZ2lzdGVyIEVORFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCByYWRlb25mYl9wY2lfdW5yZWdpc3RlciAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0gICAgICAgIHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLSAKLSAgICAgICAgaWYgKCFyaW5mbykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gCi0JLyogcmVzdG9yZSBvcmlnaW5hbCBzdGF0ZQotCSAqIAotCSAqIERvZXNuJ3QgcXVpdGUgd29yayB5ZXQsIHBvc3NpYmx5IGJlY2F1c2Ugb2YgdGhlIFBQQyBoYWNraW5nCi0JICogSSBkbyBvbiBzdGFydHVwLCBkaXNhYmxlIGZvciBub3cuIC0tQmVuSAotCSAqLwotICAgICAgICByYWRlb25fd3JpdGVfbW9kZSAocmluZm8sICZyaW5mby0+aW5pdF9zdGF0ZSk7Ci0gCi0jaWZkZWYgQ09ORklHX01UUlIKLQlpZiAocmluZm8tPm10cnJfaGRsID49IDApCi0JCW10cnJfZGVsKHJpbmZvLT5tdHJyX2hkbCwgMCwgMCk7Ci0jZW5kaWYKLQotICAgICAgICB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyICgoc3RydWN0IGZiX2luZm8gKikgcmluZm8pOwotICAgICAgICAgICAgICAgIAotICAgICAgICBpb3VubWFwKHJpbmZvLT5tbWlvX2Jhc2UpOwotICAgICAgICBpb3VubWFwKHJpbmZvLT5mYl9iYXNlKTsKLSAKLQlyZWxlYXNlX21lbV9yZWdpb24gKHJpbmZvLT5tbWlvX2Jhc2VfcGh5cywKLQkJCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpKTsKLQlyZWxlYXNlX21lbV9yZWdpb24gKHJpbmZvLT5mYl9iYXNlX3BoeXMsCi0JCQkgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0gICAgICAgIAotICAgICAgICBrZnJlZSAocmluZm8pOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciByYWRlb25mYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInJhZGVvbmZiIiwKLQkuaWRfdGFibGUJPSByYWRlb25mYl9wY2lfdGFibGUsCi0JLnByb2JlCQk9IHJhZGVvbmZiX3BjaV9yZWdpc3RlciwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJhZGVvbmZiX3BjaV91bnJlZ2lzdGVyKSwKLX07Ci0KLSNpZm5kZWYgTU9EVUxFCi1zdGF0aWMgaW50IF9faW5pdCByYWRlb25mYl9vbGRfc2V0dXAgKGNoYXIgKm9wdGlvbnMpCi17Ci0gICAgICAgIGNoYXIgKnRoaXNfb3B0OwotCi0gICAgICAgIGlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gCi0Jd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKLQkJaWYgKCEqdGhpc19vcHQpCi0JCQljb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJub2FjY2VsIiwgNykpIHsKLQkJCW5vYWNjZWwgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJtaXJyb3IiLCA2KSkgewotCQkJbWlycm9yID0gMTsKLQkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgImRmcCIsIDMpKSB7Ci0JCQlmb3JjZV9kZnAgPSAxOwotCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAicGFuZWxfeXJlczoiLCAxMSkpIHsKLQkJCXBhbmVsX3lyZXMgPSBzaW1wbGVfc3RydG91bCgodGhpc19vcHQrMTEpLCBOVUxMLCAwKTsKLQkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgIm5vbXRyciIsIDYpKSB7Ci0JCQlub210cnIgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZQotCQkJbW9kZV9vcHRpb24gPSB0aGlzX29wdDsKLSAgICAgICAgfQotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgIC8qICBNT0RVTEUgICovCi0KLXN0YXRpYyBpbnQgX19pbml0IHJhZGVvbmZiX29sZF9pbml0ICh2b2lkKQotewotI2lmbmRlZiBNT0RVTEUKLQljaGFyICpvcHRpb24gPSBOVUxMOwotCi0JaWYgKGZiX2dldF9vcHRpb25zKCJyYWRlb25mYl9vbGQiLCAmb3B0aW9uKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JcmFkZW9uZmJfb2xkX3NldHVwKG9wdGlvbik7Ci0jZW5kaWYKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciAoJnJhZGVvbmZiX2RyaXZlcik7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19leGl0IHJhZGVvbmZiX29sZF9leGl0ICh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJnJhZGVvbmZiX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHJhZGVvbmZiX29sZF9pbml0KTsKLW1vZHVsZV9leGl0KHJhZGVvbmZiX29sZF9leGl0KTsKLQotCi1NT0RVTEVfQVVUSE9SKCJBbmkgSm9zaGkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiZnJhbWVidWZmZXIgZHJpdmVyIGZvciBBVEkgUmFkZW9uIGNoaXBzZXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggMTBlNmIzYS4uMGRhNjI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTczLDcgKzczLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAKLXN0YXRpYyBjaGFyICptb2RlX29wdGlvbiBfX2luaXRkYXRhID0gTlVMTDsKK3N0YXRpYyBjaGFyICptb2RlX29wdGlvbiBfX2RldmluaXRkYXRhID0gTlVMTDsKIAogI2lmZGVmIE1PRFVMRQogCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc2F2YWdlX3VubWFwX21taW8gKHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgc2F2YWdlX3VubWFwX21taW8gKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlEQkcgKCJzYXZhZ2VfdW5tYXBfbW1pbyIpOwpAQCAtMTU5Nyw3ICsxNTk3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHNhdmFnZV91bm1hcF92aWRlbyAoc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgdm9pZCBzYXZhZ2VfdW5tYXBfdmlkZW8gKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIApAQCAtMTYxNCw3ICsxNjE0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNhdmFnZV9pbml0X2h3IChzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIpCitzdGF0aWMgaW50IHNhdmFnZV9pbml0X2h3IChzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIpCiB7CiAJdW5zaWduZWQgY2hhciBjb25maWcxLCBtLCBuLCBuMSwgbjIsIHNyOCwgY3IzZiwgY3I2NiA9IDAsIHRtcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zdGlmYi5jIGIvZHJpdmVycy92aWRlby9zdGlmYi5jCmluZGV4IDhkNWYzNTYuLjRhMjkyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3RpZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3N0aWZiLmMKQEAgLTEzNzgsNyArMTM3OCw3IEBACiAJaW50IGk7CiAJCiAJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKLQkJcmV0dXJuIDA7CisJCXJldHVybiAxOwogCQogCWlmIChzdHJuY21wKG9wdGlvbnMsICJvZmYiLCAzKSA9PSAwKSB7CiAJCXN0aWZiX2Rpc2FibGVkID0gMTsKQEAgLTEzOTMsNyArMTM5Myw3IEBACiAJCQlzdGlmYl9icHBfcHJlZltpXSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMsICZvcHRpb25zLCAxMCk7CiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIF9fc2V0dXAoInN0aWZiPSIsIHN0aWZiX3NldHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCmluZGV4IDg5ODJlNTQuLmIwYjlhY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwpAQCAtNTcsNyArNTcsNyBAQAogc3RhdGljIHZvaWQgICAgICAgICAgICAoKnBtaV9zdGFydCkodm9pZCk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICgqcG1pX3BhbCkodm9pZCk7CiBzdGF0aWMgaW50ICAgICAgICAgICAgIGRlcHRoOwotCitzdGF0aWMgaW50ICAgICAgICAgICAgIHZnYV9jb21wYXQ7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCB2ZXNhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCkBAIC04Myw5ICs4MywxMCBAQAogc3RhdGljIHZvaWQgdmVzYV9zZXRwYWxldHRlKGludCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJCSAgICB1bnNpZ25lZCBibHVlKQogeworCWludCBzaGlmdCA9IDE2IC0gZGVwdGg7CisKICNpZmRlZiBfX2kzODZfXwogCXN0cnVjdCB7IHVfY2hhciBibHVlLCBncmVlbiwgcmVkLCBwYWQ7IH0gZW50cnk7Ci0JaW50IHNoaWZ0ID0gMTYgLSBkZXB0aDsKIAogCWlmIChwbWlfc2V0cGFsKSB7CiAJCWVudHJ5LnJlZCAgID0gcmVkICAgPj4gc2hpZnQ7CkBAIC0xMDEsMTQgKzEwMiwyMCBAQAogICAgICAgICAgICAgICAgICAgImQiIChyZWdubyksICAgICAgICAgIC8qIEVEWCAqLwogICAgICAgICAgICAgICAgICAgIkQiICgmZW50cnkpLCAgICAgICAgIC8qIEVESSAqLwogICAgICAgICAgICAgICAgICAgIlMiICgmcG1pX3BhbCkpOyAgICAgIC8qIEVTSSAqLwotCX0gZWxzZSB7Ci0JCS8qIHdpdGhvdXQgcHJvdGVjdGVkIG1vZGUgaW50ZXJmYWNlLCB0cnkgVkdBIHJlZ2lzdGVycy4uLiAqLworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKy8qCisgKiB3aXRob3V0IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSBhbmQgaWYgVkdBIGNvbXBhdGlibGUsCisgKiB0cnkgVkdBIHJlZ2lzdGVycy4uLgorICovCisJaWYgKHZnYV9jb21wYXQpIHsKIAkJb3V0Yl9wKHJlZ25vLCAgICAgICBkYWNfcmVnKTsKIAkJb3V0Yl9wKHJlZCAgID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAkJb3V0Yl9wKGdyZWVuID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAkJb3V0Yl9wKGJsdWUgID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAl9Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludCB2ZXNhZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLApAQCAtMjE0LDYgKzIyMSw3IEBACiAJaWYgKHNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgIT0gVklERU9fVFlQRV9WTEZCKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXZnYV9jb21wYXQgPSAoc2NyZWVuX2luZm8uY2FwYWJpbGl0aWVzICYgMikgPyAwIDogMTsKIAl2ZXNhZmJfZml4LnNtZW1fc3RhcnQgPSBzY3JlZW5faW5mby5sZmJfYmFzZTsKIAl2ZXNhZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA9IHNjcmVlbl9pbmZvLmxmYl9kZXB0aDsKIAlpZiAoMTUgPT0gdmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwpCkBAIC0zMTgsNiArMzI2LDEyIEBACiAJCX0KIAl9CiAKKwlpZiAodmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPT0gOCAmJiAhcG1pX3NldHBhbCAmJiAhdmdhX2NvbXBhdCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2ZXNhZmI6IGhhcmR3YXJlIHBhbGV0dGUgaXMgdW5jaGFuZ2VhYmxlLFxuIgorCQkgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0XG4iKTsKKwkJdmVzYWZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SOworCX0KKwogCXZlc2FmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCA9IHZlc2FmYl9kZWZpbmVkLnhyZXM7CiAJdmVzYWZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gdmVzYWZiX2ZpeC5zbWVtX2xlbiAvIHZlc2FmYl9maXgubGluZV9sZW5ndGg7CiAJaWYgKHlwYW4gJiYgdmVzYWZiX2RlZmluZWQueXJlc192aXJ0dWFsID4gdmVzYWZiX2RlZmluZWQueXJlcykgewpAQCAtMzU0LDcgKzM2OCw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAidmVzYWZiOiAlczogIgogCSAgICAgICAic2l6ZT0lZDolZDolZDolZCwgc2hpZnQ9JWQ6JWQ6JWQ6JWRcbiIsCiAJICAgICAgICh2ZXNhZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA+IDgpID8KLQkgICAgICAgIlRydWVjb2xvciIgOiAiUHNldWRvY29sb3IiLAorCSAgICAgICAiVHJ1ZWNvbG9yIiA6ICh2Z2FfY29tcGF0IHx8IHBtaV9zZXRwYWwpID8KKwkgICAgICAgIlBzZXVkb2NvbG9yIiA6ICJTdGF0aWMgUHNldWRvY29sb3IiLAogCSAgICAgICBzY3JlZW5faW5mby5yc3ZkX3NpemUsCiAJICAgICAgIHNjcmVlbl9pbmZvLnJlZF9zaXplLAogCSAgICAgICBzY3JlZW5faW5mby5ncmVlbl9zaXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby93MTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKaW5kZXggZjZlMjRlZS4uNWZjODZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby93MTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCkBAIC00LDggKzQsOSBAQAogICogRnJhbWUgQnVmZmVyIERldmljZSBmb3IgQVRJIEltYWdlb24gdzEwMCAoV2FsbGFieSkKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEFUSSBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmljaGFyZCBQdXJkaWUKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJpY2hhcmQgUHVyZGllCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSWFuIE1vbHRvbgorICogQ29weXJpZ2h0IChjKSAyMDA2IEFsYmVydG8gTWFyZGVnYW4KICAqCiAgKiBSZXdyaXR0ZW4gZm9yIDIuNiBieSBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CiAgKgpAQCAtMTQsNiArMTUsOSBAQAogICoKICAqIHczMnh4IHN1cHBvcnQgYnkgSWFuIE1vbHRvbgogICoKKyAqIEhhcmR3YXJlIGFjY2VsZXJhdGlvbiBzdXBwb3J0IGJ5IEFsYmVydG8gTWFyZGVnYW4KKyAqIDxtYXJkeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KQEAgLTQ3LDYgKzUxLDcgQEAKIHN0YXRpYyB2b2lkIHcxMDBfdXBkYXRlX2VuYWJsZSh2b2lkKTsKIHN0YXRpYyB2b2lkIHcxMDBfdXBkYXRlX2Rpc2FibGUodm9pZCk7CiBzdGF0aWMgdm9pZCBjYWxjX2hzeW5jKHN0cnVjdCB3MTAwZmJfcGFyICpwYXIpOworc3RhdGljIHZvaWQgdzEwMF9pbml0X2dyYXBoaWNfZW5naW5lKHN0cnVjdCB3MTAwZmJfcGFyICpwYXIpOwogc3RydWN0IHcxMDBfcGxsX2luZm8gKncxMDBfZ2V0X3h0YWxfdGFibGUodW5zaWduZWQgaW50IGZyZXEpOwogCiAvKiBQc2V1ZG8gcGFsZXR0ZSBzaXplICovCkBAIC0yNDgsNiArMjUzLDE1MiBAQAogfQogCiAKK3N0YXRpYyB2b2lkIHcxMDBfZmlmb193YWl0KGludCBlbnRyaWVzKQoreworCXVuaW9uIHJiYm1fc3RhdHVzX3Ugc3RhdHVzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDIwMDAwMDA7IGkrKykgeworCQlzdGF0dXMudmFsID0gcmVhZGwocmVtYXBwZWRfcmVncyArIG1tUkJCTV9TVEFUVVMpOworCQlpZiAoc3RhdHVzLmYuY21kZmlmb19hdmFpbCA+PSBlbnRyaWVzKQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMSk7CisJfQorCXByaW50ayhLRVJOX0VSUiAidzEwMGZiOiBGSUZPIFRpbWVvdXQhXG4iKTsKK30KKworCitzdGF0aWMgaW50IHcxMDBmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXVuaW9uIHJiYm1fc3RhdHVzX3Ugc3RhdHVzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDIwMDAwMDA7IGkrKykgeworCQlzdGF0dXMudmFsID0gcmVhZGwocmVtYXBwZWRfcmVncyArIG1tUkJCTV9TVEFUVVMpOworCQlpZiAoIXN0YXR1cy5mLmd1aV9hY3RpdmUpCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEpOworCX0KKwlwcmludGsoS0VSTl9FUlIgIncxMDBmYjogR3JhcGhpYyBlbmdpbmUgdGltZW91dCFcbiIpOworCXJldHVybiAtRUJVU1k7Cit9CisKKworc3RhdGljIHZvaWQgdzEwMF9pbml0X2dyYXBoaWNfZW5naW5lKHN0cnVjdCB3MTAwZmJfcGFyICpwYXIpCit7CisJdW5pb24gZHBfZ3VpX21hc3Rlcl9jbnRsX3UgZ21jOworCXVuaW9uIGRwX21peF91IGRwX21peDsKKwl1bmlvbiBkcF9kYXRhdHlwZV91IGRwX2RhdGF0eXBlOworCXVuaW9uIGRwX2NudGxfdSBkcF9jbnRsOworCisJdzEwMF9maWZvX3dhaXQoNCk7CisJd3JpdGVsKFcxMDBfRkJfQkFTRSwgcmVtYXBwZWRfcmVncyArIG1tRFNUX09GRlNFVCk7CisJd3JpdGVsKHBhci0+eHJlcywgcmVtYXBwZWRfcmVncyArIG1tRFNUX1BJVENIKTsKKwl3cml0ZWwoVzEwMF9GQl9CQVNFLCByZW1hcHBlZF9yZWdzICsgbW1TUkNfT0ZGU0VUKTsKKwl3cml0ZWwocGFyLT54cmVzLCByZW1hcHBlZF9yZWdzICsgbW1TUkNfUElUQ0gpOworCisJdzEwMF9maWZvX3dhaXQoMyk7CisJd3JpdGVsKDAsIHJlbWFwcGVkX3JlZ3MgKyBtbVNDX1RPUF9MRUZUKTsKKwl3cml0ZWwoKHBhci0+eXJlcyA8PCAxNikgfCBwYXItPnhyZXMsIHJlbWFwcGVkX3JlZ3MgKyBtbVNDX0JPVFRPTV9SSUdIVCk7CisJd3JpdGVsKDB4MWZmZjFmZmYsIHJlbWFwcGVkX3JlZ3MgKyBtbVNSQ19TQ19CT1RUT01fUklHSFQpOworCisJdzEwMF9maWZvX3dhaXQoNCk7CisJZHBfY250bC52YWwgPSAwOworCWRwX2NudGwuZi5kc3RfeF9kaXIgPSAxOworCWRwX2NudGwuZi5kc3RfeV9kaXIgPSAxOworCWRwX2NudGwuZi5zcmNfeF9kaXIgPSAxOworCWRwX2NudGwuZi5zcmNfeV9kaXIgPSAxOworCWRwX2NudGwuZi5kc3RfbWFqb3JfeCA9IDE7CisJZHBfY250bC5mLnNyY19tYWpvcl94ID0gMTsKKwl3cml0ZWwoZHBfY250bC52YWwsIHJlbWFwcGVkX3JlZ3MgKyBtbURQX0NOVEwpOworCisJZ21jLnZhbCA9IDA7CisJZ21jLmYuZ21jX3NyY19waXRjaF9vZmZzZXRfY250bCA9IDE7CisJZ21jLmYuZ21jX2RzdF9waXRjaF9vZmZzZXRfY250bCA9IDE7CisJZ21jLmYuZ21jX3NyY19jbGlwcGluZyA9IDE7CisJZ21jLmYuZ21jX2RzdF9jbGlwcGluZyA9IDE7CisJZ21jLmYuZ21jX2JydXNoX2RhdGF0eXBlID0gR01DX0JSVVNIX05PTkU7CisJZ21jLmYuZ21jX2RzdF9kYXRhdHlwZSA9IDM7IC8qIGZyb20gRHN0VHlwZV8xNkJwcF80NDQgKi8KKwlnbWMuZi5nbWNfc3JjX2RhdGF0eXBlID0gU1JDX0RBVEFUWVBFX0VRVV9EU1Q7CisJZ21jLmYuZ21jX2J5dGVfcGl4X29yZGVyID0gMTsKKwlnbWMuZi5nbWNfZGVmYXVsdF9zZWwgPSAwOworCWdtYy5mLmdtY19yb3AzID0gUk9QM19TUkNDT1BZOworCWdtYy5mLmdtY19kcF9zcmNfc291cmNlID0gRFBfU1JDX01FTV9SRUNUQU5HVUxBUjsKKwlnbWMuZi5nbWNfY2xyX2NtcF9mY25fZGlzID0gMTsKKwlnbWMuZi5nbWNfd3JfbXNrX2RpcyA9IDE7CisJZ21jLmYuZ21jX2RwX29wID0gRFBfT1BfUk9QOworCXdyaXRlbChnbWMudmFsLCByZW1hcHBlZF9yZWdzICsgbW1EUF9HVUlfTUFTVEVSX0NOVEwpOworCisJZHBfZGF0YXR5cGUudmFsID0gZHBfbWl4LnZhbCA9IDA7CisJZHBfZGF0YXR5cGUuZi5kcF9kc3RfZGF0YXR5cGUgPSBnbWMuZi5nbWNfZHN0X2RhdGF0eXBlOworCWRwX2RhdGF0eXBlLmYuZHBfYnJ1c2hfZGF0YXR5cGUgPSBnbWMuZi5nbWNfYnJ1c2hfZGF0YXR5cGU7CisJZHBfZGF0YXR5cGUuZi5kcF9zcmMyX3R5cGUgPSAwOworCWRwX2RhdGF0eXBlLmYuZHBfc3JjMl9kYXRhdHlwZSA9IGdtYy5mLmdtY19zcmNfZGF0YXR5cGU7CisJZHBfZGF0YXR5cGUuZi5kcF9zcmNfZGF0YXR5cGUgPSBnbWMuZi5nbWNfc3JjX2RhdGF0eXBlOworCWRwX2RhdGF0eXBlLmYuZHBfYnl0ZV9waXhfb3JkZXIgPSBnbWMuZi5nbWNfYnl0ZV9waXhfb3JkZXI7CisJd3JpdGVsKGRwX2RhdGF0eXBlLnZhbCwgcmVtYXBwZWRfcmVncyArIG1tRFBfREFUQVRZUEUpOworCisJZHBfbWl4LmYuZHBfc3JjX3NvdXJjZSA9IGdtYy5mLmdtY19kcF9zcmNfc291cmNlOworCWRwX21peC5mLmRwX3NyYzJfc291cmNlID0gMTsKKwlkcF9taXguZi5kcF9yb3AzID0gZ21jLmYuZ21jX3JvcDM7CisJZHBfbWl4LmYuZHBfb3AgPSBnbWMuZi5nbWNfZHBfb3A7CisJd3JpdGVsKGRwX21peC52YWwsIHJlbWFwcGVkX3JlZ3MgKyBtbURQX01JWCk7Cit9CisKKworc3RhdGljIHZvaWQgdzEwMGZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwl1bmlvbiBkcF9ndWlfbWFzdGVyX2NudGxfdSBnbWM7CisKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybjsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgeworCQljZmJfZmlsbHJlY3QoaW5mbywgcmVjdCk7CisJCXJldHVybjsKKwl9CisKKwlnbWMudmFsID0gcmVhZGwocmVtYXBwZWRfcmVncyArIG1tRFBfR1VJX01BU1RFUl9DTlRMKTsKKwlnbWMuZi5nbWNfcm9wMyA9IFJPUDNfUEFUQ09QWTsKKwlnbWMuZi5nbWNfYnJ1c2hfZGF0YXR5cGUgPSBHTUNfQlJVU0hfU09MSURfQ09MT1I7CisJdzEwMF9maWZvX3dhaXQoMik7CisJd3JpdGVsKGdtYy52YWwsIHJlbWFwcGVkX3JlZ3MgKyBtbURQX0dVSV9NQVNURVJfQ05UTCk7CisJd3JpdGVsKHJlY3QtPmNvbG9yLCByZW1hcHBlZF9yZWdzICsgbW1EUF9CUlVTSF9GUkdEX0NMUik7CisKKwl3MTAwX2ZpZm9fd2FpdCgyKTsKKwl3cml0ZWwoKHJlY3QtPmR5IDw8IDE2KSB8IChyZWN0LT5keCAmIDB4ZmZmZiksIHJlbWFwcGVkX3JlZ3MgKyBtbURTVF9ZX1gpOworCXdyaXRlbCgocmVjdC0+d2lkdGggPDwgMTYpIHwgKHJlY3QtPmhlaWdodCAmIDB4ZmZmZiksCisJICAgICAgIHJlbWFwcGVkX3JlZ3MgKyBtbURTVF9XSURUSF9IRUlHSFQpOworfQorCisKK3N0YXRpYyB2b2lkIHcxMDBmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJdTMyIGR4ID0gYXJlYS0+ZHgsIGR5ID0gYXJlYS0+ZHksIHN4ID0gYXJlYS0+c3gsIHN5ID0gYXJlYS0+c3k7CisJdTMyIGggPSBhcmVhLT5oZWlnaHQsIHcgPSBhcmVhLT53aWR0aDsKKwl1bmlvbiBkcF9ndWlfbWFzdGVyX2NudGxfdSBnbWM7CisKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybjsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgeworCQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7CisJCXJldHVybjsKKwl9CisKKwlnbWMudmFsID0gcmVhZGwocmVtYXBwZWRfcmVncyArIG1tRFBfR1VJX01BU1RFUl9DTlRMKTsKKwlnbWMuZi5nbWNfcm9wMyA9IFJPUDNfU1JDQ09QWTsKKwlnbWMuZi5nbWNfYnJ1c2hfZGF0YXR5cGUgPSBHTUNfQlJVU0hfTk9ORTsKKwl3MTAwX2ZpZm9fd2FpdCgxKTsKKwl3cml0ZWwoZ21jLnZhbCwgcmVtYXBwZWRfcmVncyArIG1tRFBfR1VJX01BU1RFUl9DTlRMKTsKKworCXcxMDBfZmlmb193YWl0KDMpOworCXdyaXRlbCgoc3kgPDwgMTYpIHwgKHN4ICYgMHhmZmZmKSwgcmVtYXBwZWRfcmVncyArIG1tU1JDX1lfWCk7CisJd3JpdGVsKChkeSA8PCAxNikgfCAoZHggJiAweGZmZmYpLCByZW1hcHBlZF9yZWdzICsgbW1EU1RfWV9YKTsKKwl3cml0ZWwoKHcgPDwgMTYpIHwgKGggJiAweGZmZmYpLCByZW1hcHBlZF9yZWdzICsgbW1EU1RfV0lEVEhfSEVJR0hUKTsKK30KKworCiAvKgogICogIENoYW5nZSB0aGUgcmVzb2x1dGlvbiBieSBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBoYXJkd2FyZSBmdW5jdGlvbnMKICAqLwpAQCAtMjY1LDYgKzQxNiw3IEBACiAJdzEwMF9pbml0X2xjZChwYXIpOwogCXcxMDBfc2V0X2Rpc3ByZWdzKHBhcik7CiAJdzEwMF91cGRhdGVfZW5hYmxlKCk7CisJdzEwMF9pbml0X2dyYXBoaWNfZW5naW5lKHBhcik7CiAKIAljYWxjX2hzeW5jKHBhcik7CiAKQEAgLTM5NCw5ICs1NDYsMTAgQEAKIAkuZmJfc2V0X3BhciAgID0gdzEwMGZiX3NldF9wYXIsCiAJLmZiX3NldGNvbHJlZyA9IHcxMDBmYl9zZXRjb2xyZWcsCiAJLmZiX2JsYW5rICAgICA9IHcxMDBmYl9ibGFuaywKLQkuZmJfZmlsbHJlY3QgID0gY2ZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYSAgPSBjZmJfY29weWFyZWEsCisJLmZiX2ZpbGxyZWN0ICA9IHcxMDBmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgID0gdzEwMGZiX2NvcHlhcmVhLAogCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9zeW5jICAgICAgPSB3MTAwZmJfc3luYywKIH07CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTU0Myw3ICs2OTYsOCBAQAogCX0KIAogCWluZm8tPmZib3BzID0gJncxMDBmYl9vcHM7Ci0JaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgfAorCQlGQklORk9fSFdBQ0NFTF9GSUxMUkVDVDsKIAlpbmZvLT5ub2RlID0gLTE7CiAJaW5mby0+c2NyZWVuX2Jhc2UgPSByZW1hcHBlZF9mYnVmICsgKFcxMDBfRkJfQkFTRS1NRU1fV0lORE9XX0JBU0UpOwogCWluZm8tPnNjcmVlbl9zaXplID0gUkVNQVBQRURfRkJfTEVOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby93MTAwZmIuaCBiL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmgKaW5kZXggN2E1OGExZS4uZmZmYWU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby93MTAwZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5oCkBAIC0xMjIsMTUgKzEyMiwzMiBAQAogLyogQmxvY2sgRElTUExBWSBFbmQ6ICovCiAKIC8qIEJsb2NrIEdGWCBTdGFydDogKi8KKyNkZWZpbmUgbW1EU1RfT0ZGU0VUICAgICAgICAgIDB4MTAwNAorI2RlZmluZSBtbURTVF9QSVRDSCAgICAgICAgICAgMHgxMDA4CisjZGVmaW5lIG1tRFNUX1lfWCAgICAgICAgICAgICAweDEwMzgKKyNkZWZpbmUgbW1EU1RfV0lEVEhfSEVJR0hUICAgIDB4MTE5OAorI2RlZmluZSBtbURQX0dVSV9NQVNURVJfQ05UTCAgMHgxMDZDCiAjZGVmaW5lIG1tQlJVU0hfT0ZGU0VUICAgICAgICAweDEwOEMKICNkZWZpbmUgbW1CUlVTSF9ZX1ggICAgICAgICAgIDB4MTA3NAorI2RlZmluZSBtbURQX0JSVVNIX0ZSR0RfQ0xSICAgMHgxMDdDCisjZGVmaW5lIG1tU1JDX09GRlNFVCAgICAgICAgICAweDExQUMKKyNkZWZpbmUgbW1TUkNfUElUQ0ggICAgICAgICAgIDB4MTFCMAorI2RlZmluZSBtbVNSQ19ZX1ggICAgICAgICAgICAgMHgxMDM0CiAjZGVmaW5lIG1tREVGQVVMVF9QSVRDSF9PRkZTRVQgICAgICAweDEwQTAKICNkZWZpbmUgbW1ERUZBVUxUX1NDX0JPVFRPTV9SSUdIVCAgIDB4MTBBOAogI2RlZmluZSBtbURFRkFVTFQyX1NDX0JPVFRPTV9SSUdIVCAgMHgxMEFDCisjZGVmaW5lIG1tU0NfVE9QX0xFRlQgICAgICAgICAweDExQkMKKyNkZWZpbmUgbW1TQ19CT1RUT01fUklHSFQgICAgIDB4MTFDMAorI2RlZmluZSBtbVNSQ19TQ19CT1RUT01fUklHSFQgMHgxMUM0CiAjZGVmaW5lIG1tR0xPQkFMX0FMUEhBICAgICAgICAweDEyMTAKICNkZWZpbmUgbW1GSUxURVJfQ09FRiAgICAgICAgIDB4MTIxNAogI2RlZmluZSBtbU1WQ19DTlRMX1NUQVJUICAgICAgMHgxMUUwCiAjZGVmaW5lIG1tRTJfQVJJVEhNRVRJQ19DTlRMICAweDEyMjAKKyNkZWZpbmUgbW1EUF9DTlRMICAgICAgICAgICAgIDB4MTFDOAorI2RlZmluZSBtbURQX0NOVExfRFNUX0RJUiAgICAgMHgxMUNDCisjZGVmaW5lIG1tRFBfREFUQVRZUEUgICAgICAgICAweDEyQzQKKyNkZWZpbmUgbW1EUF9NSVggICAgICAgICAgICAgIDB4MTJDOAorI2RlZmluZSBtbURQX1dSSVRFX01TSyAgICAgICAgMHgxMkNDCiAjZGVmaW5lIG1tRU5HX0NOVEwgICAgICAgICAgICAweDEzRTgKICNkZWZpbmUgbW1FTkdfUEVSRl9DTlQgICAgICAgIDB4MTNGMAogLyogQmxvY2sgR0ZYIEVuZDogKi8KQEAgLTE3OSw2ICsxOTYsNyBAQAogLyogQmxvY2sgUkJCTSBTdGFydDogKi8KICNkZWZpbmUgbW1XQUlUX1VOVElMICAgICAgICAweDE0MDAKICNkZWZpbmUgbW1JU1lOQ19DTlRMICAgICAgICAweDE0MDQKKyNkZWZpbmUgbW1SQkJNX1NUQVRVUyAgICAgICAweDAxNDAKICNkZWZpbmUgbW1SQkJNX0NOVEwgICAgICAgICAweDAxNDQKICNkZWZpbmUgbW1OUVdBSVRfVU5USUwgICAgICAweDAxNTAKIC8qIEJsb2NrIFJCQk0gRW5kOiAqLwpAQCAtMjI1LDE0NyArMjQzLDE0NyBAQAogLyogUmVnaXN0ZXIgc3RydWN0dXJlIGRlZmluaXRpb25zICovCiAKIHN0cnVjdCB3cmFwX3RvcF9kaXJfdCB7Ci0JdW5zaWduZWQgbG9uZyB0b3BfYWRkciAgOiAyMzsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICA6IDk7CisJdTMyIHRvcF9hZGRyICA6IDIzOworCXUzMiAgICAgICAgICAgOiA5OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gd3JhcF90b3BfZGlyX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCB3cmFwX3RvcF9kaXJfdCBmOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IHdyYXBfc3RhcnRfZGlyX3QgewotCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciA6IDIzOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICA6IDk7CisJdTMyIHN0YXJ0X2FkZHIgOiAyMzsKKwl1MzIgICAgICAgICAgICA6IDk7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiB3cmFwX3N0YXJ0X2Rpcl91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3Qgd3JhcF9zdGFydF9kaXJfdCBmOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGNpZl9jbnRsX3QgewotCXVuc2lnbmVkIGxvbmcgc3dhcF9yZWcgICAgICAgICAgICAgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIHN3YXBfZmJ1Zl8xICAgICAgICAgICAgICA6IDI7Ci0JdW5zaWduZWQgbG9uZyBzd2FwX2ZidWZfMiAgICAgICAgICAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgc3dhcF9mYnVmXzMgICAgICAgICAgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIHBtaV9pbnRfZGlzYWJsZSAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBwbWlfc2NobWVuX2Rpc2FibGUgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgaW50Yl9vZSAgICAgICAgICAgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGVuX3dhaXRfdG9fY29tcGVuc2F0ZV9kcV9wcm9wX2RseSAgOiAxOwotCXVuc2lnbmVkIGxvbmcgY29tcGVuc2F0ZV93YWl0X3JkX3NpemUgIDogMjsKLQl1bnNpZ25lZCBsb25nIHdhaXRfYXNzZXJ0ZWRfdGltZW91dF92YWwgIDogMjsKLQl1bnNpZ25lZCBsb25nIHdhaXRfbWFza2VkX3ZhbCAgICAgICAgICA6IDI7Ci0JdW5zaWduZWQgbG9uZyBlbl93YWl0X3RpbWVvdXQgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZW5fb25lX2Nsa19zZXR1cF9iZWZvcmVfd2FpdCAgOiAxOwotCXVuc2lnbmVkIGxvbmcgaW50ZXJydXB0X2FjdGl2ZV9oaWdoICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGVuX292ZXJ3cml0ZV9zdHJhcHMgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBzdHJhcF93YWl0X2FjdGl2ZV9oaSAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgbGF0X2J1c3lfY291bnQgICAgICAgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIGxhdF9yZF9wbTRfc2Nsa19idXN5ICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkaXNfc3lzdGVtX2JpdHMgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX21yICAgICAgICAgICAgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGNpZl9zcGFyZV8xICAgICAgICAgICAgICA6IDQ7CisJdTMyIHN3YXBfcmVnICAgICAgICAgICAgICAgICA6IDI7CisJdTMyIHN3YXBfZmJ1Zl8xICAgICAgICAgICAgICA6IDI7CisJdTMyIHN3YXBfZmJ1Zl8yICAgICAgICAgICAgICA6IDI7CisJdTMyIHN3YXBfZmJ1Zl8zICAgICAgICAgICAgICA6IDI7CisJdTMyIHBtaV9pbnRfZGlzYWJsZSAgICAgICAgICA6IDE7CisJdTMyIHBtaV9zY2htZW5fZGlzYWJsZSAgICAgICA6IDE7CisJdTMyIGludGJfb2UgICAgICAgICAgICAgICAgICA6IDE7CisJdTMyIGVuX3dhaXRfdG9fY29tcGVuc2F0ZV9kcV9wcm9wX2RseSAgOiAxOworCXUzMiBjb21wZW5zYXRlX3dhaXRfcmRfc2l6ZSAgOiAyOworCXUzMiB3YWl0X2Fzc2VydGVkX3RpbWVvdXRfdmFsICA6IDI7CisJdTMyIHdhaXRfbWFza2VkX3ZhbCAgICAgICAgICA6IDI7CisJdTMyIGVuX3dhaXRfdGltZW91dCAgICAgICAgICA6IDE7CisJdTMyIGVuX29uZV9jbGtfc2V0dXBfYmVmb3JlX3dhaXQgIDogMTsKKwl1MzIgaW50ZXJydXB0X2FjdGl2ZV9oaWdoICAgIDogMTsKKwl1MzIgZW5fb3ZlcndyaXRlX3N0cmFwcyAgICAgIDogMTsKKwl1MzIgc3RyYXBfd2FpdF9hY3RpdmVfaGkgICAgIDogMTsKKwl1MzIgbGF0X2J1c3lfY291bnQgICAgICAgICAgIDogMjsKKwl1MzIgbGF0X3JkX3BtNF9zY2xrX2J1c3kgICAgIDogMTsKKwl1MzIgZGlzX3N5c3RlbV9iaXRzICAgICAgICAgIDogMTsKKwl1MzIgZGlzX21yICAgICAgICAgICAgICAgICAgIDogMTsKKwl1MzIgY2lmX3NwYXJlXzEgICAgICAgICAgICAgIDogNDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGNpZl9jbnRsX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCBjaWZfY250bF90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgY2ZncmVnX2Jhc2VfdCB7Ci0JdW5zaWduZWQgbG9uZyBjZmdyZWdfYmFzZSAgOiAyNDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICA6IDg7CisJdTMyIGNmZ3JlZ19iYXNlICA6IDI0OworCXUzMiAgICAgICAgICAgICAgOiA4OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gY2ZncmVnX2Jhc2VfdSB7Ci0JdW5zaWduZWQgbG9uZyB2YWwgOiAzMjsKKwl1MzIgdmFsIDogMzI7CiAJc3RydWN0IGNmZ3JlZ19iYXNlX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBjaWZfaW9fdCB7Ci0JdW5zaWduZWQgbG9uZyBkcV9zcnAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGRxX3NybiAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZHFfc3AgICAgICA6IDQ7Ci0JdW5zaWduZWQgbG9uZyBkcV9zbiAgICAgIDogNDsKLQl1bnNpZ25lZCBsb25nIHdhaXRiX3NycCAgOiAxOwotCXVuc2lnbmVkIGxvbmcgd2FpdGJfc3JuICA6IDE7Ci0JdW5zaWduZWQgbG9uZyB3YWl0Yl9zcCAgIDogNDsKLQl1bnNpZ25lZCBsb25nIHdhaXRiX3NuICAgOiA0OwotCXVuc2lnbmVkIGxvbmcgaW50Yl9zcnAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBpbnRiX3NybiAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGludGJfc3AgICAgOiA0OwotCXVuc2lnbmVkIGxvbmcgaW50Yl9zbiAgICA6IDQ7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgIDogMjsKKwl1MzIgZHFfc3JwICAgICA6IDE7CisJdTMyIGRxX3NybiAgICAgOiAxOworCXUzMiBkcV9zcCAgICAgIDogNDsKKwl1MzIgZHFfc24gICAgICA6IDQ7CisJdTMyIHdhaXRiX3NycCAgOiAxOworCXUzMiB3YWl0Yl9zcm4gIDogMTsKKwl1MzIgd2FpdGJfc3AgICA6IDQ7CisJdTMyIHdhaXRiX3NuICAgOiA0OworCXUzMiBpbnRiX3NycCAgIDogMTsKKwl1MzIgaW50Yl9zcm4gICA6IDE7CisJdTMyIGludGJfc3AgICAgOiA0OworCXUzMiBpbnRiX3NuICAgIDogNDsKKwl1MzIgICAgICAgICAgICA6IDI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBjaWZfaW9fdSB7Ci0JdW5zaWduZWQgbG9uZyB2YWwgOiAzMjsKKwl1MzIgdmFsIDogMzI7CiAJc3RydWN0IGNpZl9pb190IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgY2lmX3JlYWRfZGJnX3QgewotCXVuc2lnbmVkIGxvbmcgdW5wYWNrZXJfcHJlX2ZldGNoX3RyaWdfZ2VuICA6IDI7Ci0JdW5zaWduZWQgbG9uZyBkbHlfc2Vjb25kX3JkX2ZldGNoX3RyaWcgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHJzdF9yZF9idXJzdF9pZCAgICAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX3JkX2J1cnN0X2lkICAgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlbl9ibG9ja19yZF93aGVuX3BhY2tlcl9pc19ub3RfZW1wIDogMTsKLQl1bnNpZ25lZCBsb25nIGRpc19wcmVfZmV0Y2hfY250bF9zbSAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgcmJibV9jaHJuY3lfZGlzICAgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyByYmJtX3JkX2FmdGVyX3dyX2xhdCAgICAgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIGRpc19iZV9kdXJpbmdfcmQgICAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgb25lX2Nsa19pbnZhbGlkYXRlX3B1bHNlICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkaXNfY2hubF9wcmlvcml0eSAgICAgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHJzdF9yZWFkX3BhdGhfYV9wbHMgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgcnN0X3JlYWRfcGF0aF9iX3BscyAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkaXNfcmVnX3JkX2ZldGNoX3RyaWcgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGRpc19yZF9mZXRjaF90cmlnX2Zyb21faW5kX2FkZHIgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX3JkX3NhbWVfYnl0ZV90b190cmlnX2ZldGNoIDogMTsKLQl1bnNpZ25lZCBsb25nIGRpc19kaXJfd3JhcCAgICAgICAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX3JpbmdfYnVmX3RvX2ZvcmNlX2RlYyAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkaXNfYWRkcl9jb21wX2luXzE2Yml0ICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGNscl93ICAgICAgICAgICAgICAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZXJyX3JkX3RhZ19pc18zICAgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlcnJfbG9hZF93aGVuX2Z1bF9hICAgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGVycl9sb2FkX3doZW5fZnVsX2IgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDc7CisJdTMyIHVucGFja2VyX3ByZV9mZXRjaF90cmlnX2dlbiAgOiAyOworCXUzMiBkbHlfc2Vjb25kX3JkX2ZldGNoX3RyaWcgICAgIDogMTsKKwl1MzIgcnN0X3JkX2J1cnN0X2lkICAgICAgICAgICAgICA6IDE7CisJdTMyIGRpc19yZF9idXJzdF9pZCAgICAgICAgICAgICAgOiAxOworCXUzMiBlbl9ibG9ja19yZF93aGVuX3BhY2tlcl9pc19ub3RfZW1wIDogMTsKKwl1MzIgZGlzX3ByZV9mZXRjaF9jbnRsX3NtICAgICAgICA6IDE7CisJdTMyIHJiYm1fY2hybmN5X2RpcyAgICAgICAgICAgICAgOiAxOworCXUzMiByYmJtX3JkX2FmdGVyX3dyX2xhdCAgICAgICAgIDogMjsKKwl1MzIgZGlzX2JlX2R1cmluZ19yZCAgICAgICAgICAgICA6IDE7CisJdTMyIG9uZV9jbGtfaW52YWxpZGF0ZV9wdWxzZSAgICAgOiAxOworCXUzMiBkaXNfY2hubF9wcmlvcml0eSAgICAgICAgICAgIDogMTsKKwl1MzIgcnN0X3JlYWRfcGF0aF9hX3BscyAgICAgICAgICA6IDE7CisJdTMyIHJzdF9yZWFkX3BhdGhfYl9wbHMgICAgICAgICAgOiAxOworCXUzMiBkaXNfcmVnX3JkX2ZldGNoX3RyaWcgICAgICAgIDogMTsKKwl1MzIgZGlzX3JkX2ZldGNoX3RyaWdfZnJvbV9pbmRfYWRkciA6IDE7CisJdTMyIGRpc19yZF9zYW1lX2J5dGVfdG9fdHJpZ19mZXRjaCA6IDE7CisJdTMyIGRpc19kaXJfd3JhcCAgICAgICAgICAgICAgICAgOiAxOworCXUzMiBkaXNfcmluZ19idWZfdG9fZm9yY2VfZGVjICAgIDogMTsKKwl1MzIgZGlzX2FkZHJfY29tcF9pbl8xNmJpdCAgICAgICA6IDE7CisJdTMyIGNscl93ICAgICAgICAgICAgICAgICAgICAgICAgOiAxOworCXUzMiBlcnJfcmRfdGFnX2lzXzMgICAgICAgICAgICAgIDogMTsKKwl1MzIgZXJyX2xvYWRfd2hlbl9mdWxfYSAgICAgICAgICA6IDE7CisJdTMyIGVycl9sb2FkX3doZW5fZnVsX2IgICAgICAgICAgOiAxOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGNpZl9yZWFkX2RiZ191IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgY2lmX3JlYWRfZGJnX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBjaWZfd3JpdGVfZGJnX3QgewotCXVuc2lnbmVkIGxvbmcgcGFja2VyX3RpbWVvdXRfY291bnQgICAgICAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgZW5fdXBwZXJfbG9hZF9jb25kICAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZW5fY2hubF9jaGFuZ2VfY29uZCAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX2FkZHJfY29tcF9jb25kICAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX2xvYWRfc2FtZV9ieXRlX2FkZHJfY29uZCAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX3RpbWVvdXRfY29uZCAgICAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX3RpbWVvdXRfZHVyaW5nX3JiYm0gICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZGlzX3BhY2tlcl9mdWxfZHVyaW5nX3JiYm1fdGltZW91dCA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlbl9kd29yZF9zcGxpdF90b19yYmJtICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlbl9kdW1teV92YWwgICAgICAgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkdW1teV92YWxfc2VsICAgICAgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBtYXNrX3BtNF93cnB0cl9kZWMgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkaXNfbWNfY2xlYW5fY29uZCAgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlcnJfdHdvX3JlcWlfZHVyaW5nX2Z1bCAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlcnJfcmVxaV9kdXJpbmdfaWRsZV9jbGsgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlcnJfZ2xvYmFsICAgICAgICAgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlbl93cl9idWZfZGJnX2xvYWQgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlbl93cl9idWZfZGJnX3BhdGggICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBzZWxfd3JfYnVmX2J5dGUgICAgICAgICAgICAgICA6IDM7Ci0JdW5zaWduZWQgbG9uZyBkaXNfcmRfZmx1c2hfd3IgICAgICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkaXNfcGFja2VyX2Z1bF9jb25kICAgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkaXNfaW52YWxpZGF0ZV9ieV9vcHNfY2hubCAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlbl9oYWx0X3doZW5fcmVxaV9lcnIgICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBjaWZfc3BhcmVfMiAgICAgICAgICAgICAgICAgICA6IDU7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJdTMyIHBhY2tlcl90aW1lb3V0X2NvdW50ICAgICAgICAgIDogMjsKKwl1MzIgZW5fdXBwZXJfbG9hZF9jb25kICAgICAgICAgICAgOiAxOworCXUzMiBlbl9jaG5sX2NoYW5nZV9jb25kICAgICAgICAgICA6IDE7CisJdTMyIGRpc19hZGRyX2NvbXBfY29uZCAgICAgICAgICAgIDogMTsKKwl1MzIgZGlzX2xvYWRfc2FtZV9ieXRlX2FkZHJfY29uZCAgOiAxOworCXUzMiBkaXNfdGltZW91dF9jb25kICAgICAgICAgICAgICA6IDE7CisJdTMyIGRpc190aW1lb3V0X2R1cmluZ19yYmJtICAgICAgIDogMTsKKwl1MzIgZGlzX3BhY2tlcl9mdWxfZHVyaW5nX3JiYm1fdGltZW91dCA6IDE7CisJdTMyIGVuX2R3b3JkX3NwbGl0X3RvX3JiYm0gICAgICAgIDogMTsKKwl1MzIgZW5fZHVtbXlfdmFsICAgICAgICAgICAgICAgICAgOiAxOworCXUzMiBkdW1teV92YWxfc2VsICAgICAgICAgICAgICAgICA6IDE7CisJdTMyIG1hc2tfcG00X3dycHRyX2RlYyAgICAgICAgICAgIDogMTsKKwl1MzIgZGlzX21jX2NsZWFuX2NvbmQgICAgICAgICAgICAgOiAxOworCXUzMiBlcnJfdHdvX3JlcWlfZHVyaW5nX2Z1bCAgICAgICA6IDE7CisJdTMyIGVycl9yZXFpX2R1cmluZ19pZGxlX2NsayAgICAgIDogMTsKKwl1MzIgZXJyX2dsb2JhbCAgICAgICAgICAgICAgICAgICAgOiAxOworCXUzMiBlbl93cl9idWZfZGJnX2xvYWQgICAgICAgICAgICA6IDE7CisJdTMyIGVuX3dyX2J1Zl9kYmdfcGF0aCAgICAgICAgICAgIDogMTsKKwl1MzIgc2VsX3dyX2J1Zl9ieXRlICAgICAgICAgICAgICAgOiAzOworCXUzMiBkaXNfcmRfZmx1c2hfd3IgICAgICAgICAgICAgICA6IDE7CisJdTMyIGRpc19wYWNrZXJfZnVsX2NvbmQgICAgICAgICAgIDogMTsKKwl1MzIgZGlzX2ludmFsaWRhdGVfYnlfb3BzX2NobmwgICAgOiAxOworCXUzMiBlbl9oYWx0X3doZW5fcmVxaV9lcnIgICAgICAgICA6IDE7CisJdTMyIGNpZl9zcGFyZV8yICAgICAgICAgICAgICAgICAgIDogNTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gY2lmX3dyaXRlX2RiZ191IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgY2lmX3dyaXRlX2RiZ190IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCkBAIC00MDMsMzI3ICs0MjEsMzI3IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgY3J0Y190b3RhbF90IHsKLQl1bnNpZ25lZCBsb25nIGNydGNfaF90b3RhbCA6IDEwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgIDogNjsKLQl1bnNpZ25lZCBsb25nIGNydGNfdl90b3RhbCA6IDEwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgIDogNjsKKwl1MzIgY3J0Y19oX3RvdGFsIDogMTA7CisJdTMyICAgICAgICAgICAgICA6IDY7CisJdTMyIGNydGNfdl90b3RhbCA6IDEwOworCXUzMiAgICAgICAgICAgICAgOiA2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gY3J0Y190b3RhbF91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgY3J0Y190b3RhbF90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgY3J0Y19zc190IHsKLQl1bnNpZ25lZCBsb25nIHNzX3N0YXJ0ICAgIDogMTA7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICA6IDY7Ci0JdW5zaWduZWQgbG9uZyBzc19lbmQgICAgICA6IDEwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgc3NfYWxpZ24gICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc3NfcG9sICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc3NfcnVuX21vZGUgOiAxOwotCXVuc2lnbmVkIGxvbmcgc3NfZW4gICAgICAgOiAxOworCXUzMiBzc19zdGFydCAgICA6IDEwOworCXUzMiAgICAgICAgICAgICA6IDY7CisJdTMyIHNzX2VuZCAgICAgIDogMTA7CisJdTMyICAgICAgICAgICAgIDogMjsKKwl1MzIgc3NfYWxpZ24gICAgOiAxOworCXUzMiBzc19wb2wgICAgICA6IDE7CisJdTMyIHNzX3J1bl9tb2RlIDogMTsKKwl1MzIgc3NfZW4gICAgICAgOiAxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gY3J0Y19zc191IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgY3J0Y19zc190IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYWN0aXZlX2hfZGlzcF90IHsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9oX3N0YXJ0ICA6IDEwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgIDogNjsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9oX2VuZCAgICA6IDEwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgIDogNjsKKwl1MzIgYWN0aXZlX2hfc3RhcnQgIDogMTA7CisJdTMyICAgICAgICAgICAgICAgICA6IDY7CisJdTMyIGFjdGl2ZV9oX2VuZCAgICA6IDEwOworCXUzMiAgICAgICAgICAgICAgICAgOiA2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gYWN0aXZlX2hfZGlzcF91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgYWN0aXZlX2hfZGlzcF90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYWN0aXZlX3ZfZGlzcF90IHsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZV92X3N0YXJ0ICA6IDEwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgIDogNjsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZV92X2VuZCAgICA6IDEwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgIDogNjsKKwl1MzIgYWN0aXZlX3Zfc3RhcnQgIDogMTA7CisJdTMyICAgICAgICAgICAgICAgICA6IDY7CisJdTMyIGFjdGl2ZV92X2VuZCAgICA6IDEwOworCXUzMiAgICAgICAgICAgICAgICAgOiA2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gYWN0aXZlX3ZfZGlzcF91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgYWN0aXZlX3ZfZGlzcF90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZ3JhcGhpY19oX2Rpc3BfdCB7Ci0JdW5zaWduZWQgbG9uZyBncmFwaGljX2hfc3RhcnQgOiAxMDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICA6IDY7Ci0JdW5zaWduZWQgbG9uZyBncmFwaGljX2hfZW5kICAgOiAxMDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICA6IDY7CisJdTMyIGdyYXBoaWNfaF9zdGFydCA6IDEwOworCXUzMiAgICAgICAgICAgICAgICAgOiA2OworCXUzMiBncmFwaGljX2hfZW5kICAgOiAxMDsKKwl1MzIgICAgICAgICAgICAgICAgIDogNjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGdyYXBoaWNfaF9kaXNwX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCBncmFwaGljX2hfZGlzcF90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZ3JhcGhpY192X2Rpc3BfdCB7Ci0JdW5zaWduZWQgbG9uZyBncmFwaGljX3Zfc3RhcnQgOiAxMDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICA6IDY7Ci0JdW5zaWduZWQgbG9uZyBncmFwaGljX3ZfZW5kICAgOiAxMDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICA6IDY7CisJdTMyIGdyYXBoaWNfdl9zdGFydCA6IDEwOworCXUzMiAgICAgICAgICAgICAgICAgOiA2OworCXUzMiBncmFwaGljX3ZfZW5kICAgOiAxMDsKKwl1MzIgICAgICAgICAgICAgICAgIDogNjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGdyYXBoaWNfdl9kaXNwX3V7Ci0JdW5zaWduZWQgbG9uZyB2YWwgOiAzMjsKKwl1MzIgdmFsIDogMzI7CiAJc3RydWN0IGdyYXBoaWNfdl9kaXNwX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBncmFwaGljX2N0cmxfdF93MTAwIHsKLQl1bnNpZ25lZCBsb25nIGNvbG9yX2RlcHRoICAgICAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHBvcnRyYWl0X21vZGUgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIGxvd19wb3dlcl9vbiAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHJlcV9mcmVxICAgICAgICAgIDogNDsKLQl1bnNpZ25lZCBsb25nIGVuX2NydGMgICAgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGVuX2dyYXBoaWNfcmVxICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGVuX2dyYXBoaWNfY3J0YyAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX3JlcV9ncmFwaGljIDogOTsKLQl1bnNpZ25lZCBsb25nIGxjZF9wY2xrX29uICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGxjZF9zY2xrX29uICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHBjbGtfcnVubmluZyAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHNjbGtfcnVubmluZyAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICAgIDogNjsKKwl1MzIgY29sb3JfZGVwdGggICAgICAgOiAzOworCXUzMiBwb3J0cmFpdF9tb2RlICAgICA6IDI7CisJdTMyIGxvd19wb3dlcl9vbiAgICAgIDogMTsKKwl1MzIgcmVxX2ZyZXEgICAgICAgICAgOiA0OworCXUzMiBlbl9jcnRjICAgICAgICAgICA6IDE7CisJdTMyIGVuX2dyYXBoaWNfcmVxICAgIDogMTsKKwl1MzIgZW5fZ3JhcGhpY19jcnRjICAgOiAxOworCXUzMiB0b3RhbF9yZXFfZ3JhcGhpYyA6IDk7CisJdTMyIGxjZF9wY2xrX29uICAgICAgIDogMTsKKwl1MzIgbGNkX3NjbGtfb24gICAgICAgOiAxOworCXUzMiBwY2xrX3J1bm5pbmcgICAgICA6IDE7CisJdTMyIHNjbGtfcnVubmluZyAgICAgIDogMTsKKwl1MzIgICAgICAgICAgICAgICAgICAgOiA2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGdyYXBoaWNfY3RybF90X3czMnh4IHsKLQl1bnNpZ25lZCBsb25nIGNvbG9yX2RlcHRoICAgICAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHBvcnRyYWl0X21vZGUgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIGxvd19wb3dlcl9vbiAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHJlcV9mcmVxICAgICAgICAgIDogNDsKLQl1bnNpZ25lZCBsb25nIGVuX2NydGMgICAgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGVuX2dyYXBoaWNfcmVxICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGVuX2dyYXBoaWNfY3J0YyAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX3JlcV9ncmFwaGljIDogMTA7Ci0JdW5zaWduZWQgbG9uZyBsY2RfcGNsa19vbiAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBsY2Rfc2Nsa19vbiAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBwY2xrX3J1bm5pbmcgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBzY2xrX3J1bm5pbmcgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICA6IDU7CisJdTMyIGNvbG9yX2RlcHRoICAgICAgIDogMzsKKwl1MzIgcG9ydHJhaXRfbW9kZSAgICAgOiAyOworCXUzMiBsb3dfcG93ZXJfb24gICAgICA6IDE7CisJdTMyIHJlcV9mcmVxICAgICAgICAgIDogNDsKKwl1MzIgZW5fY3J0YyAgICAgICAgICAgOiAxOworCXUzMiBlbl9ncmFwaGljX3JlcSAgICA6IDE7CisJdTMyIGVuX2dyYXBoaWNfY3J0YyAgIDogMTsKKwl1MzIgdG90YWxfcmVxX2dyYXBoaWMgOiAxMDsKKwl1MzIgbGNkX3BjbGtfb24gICAgICAgOiAxOworCXUzMiBsY2Rfc2Nsa19vbiAgICAgICA6IDE7CisJdTMyIHBjbGtfcnVubmluZyAgICAgIDogMTsKKwl1MzIgc2Nsa19ydW5uaW5nICAgICAgOiAxOworCXUzMiAgICAgICAgICAgICAgICAgICA6IDU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBncmFwaGljX2N0cmxfdSB7Ci0JdW5zaWduZWQgbG9uZyB2YWwgOiAzMjsKKwl1MzIgdmFsIDogMzI7CiAJc3RydWN0IGdyYXBoaWNfY3RybF90X3cxMDAgZl93MTAwOwogCXN0cnVjdCBncmFwaGljX2N0cmxfdF93MzJ4eCBmX3czMnh4OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IHZpZGVvX2N0cmxfdCB7Ci0JdW5zaWduZWQgbG9uZyB2aWRlb19tb2RlICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGtleWVyX2VuICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZW5fdmlkZW9fcmVxICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlbl9ncmFwaGljX3JlcV92aWRlbyAgOiAxOwotCXVuc2lnbmVkIGxvbmcgZW5fdmlkZW9fY3J0YyAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyB2aWRlb19ob3JfZXhwICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvX3Zlcl9leHAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgdXZfY29tYmluZSAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbF9yZXFfdmlkZW8gIDogOTsKLQl1bnNpZ25lZCBsb25nIHZpZGVvX2NoX3NlbCAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgdmlkZW9fcG9ydHJhaXQgICA6IDI7Ci0JdW5zaWduZWQgbG9uZyB5dXYycmdiX2VuICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHl1djJyZ2Jfb3B0aW9uICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgdmlkZW9faW52X2hvciAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyB2aWRlb19pbnZfdmVyICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIGdhbW1hX3NlbCAgICAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgZGlzX2xpbWl0ICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBlbl91dl9oYmxlbmQgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHJnYl9nYW1tYV9zZWwgICAgOiAyOworCXUzMiB2aWRlb19tb2RlICAgICAgIDogMTsKKwl1MzIga2V5ZXJfZW4gICAgICAgICA6IDE7CisJdTMyIGVuX3ZpZGVvX3JlcSAgICAgOiAxOworCXUzMiBlbl9ncmFwaGljX3JlcV92aWRlbyAgOiAxOworCXUzMiBlbl92aWRlb19jcnRjICAgIDogMTsKKwl1MzIgdmlkZW9faG9yX2V4cCAgICA6IDI7CisJdTMyIHZpZGVvX3Zlcl9leHAgICAgOiAyOworCXUzMiB1dl9jb21iaW5lICAgICAgIDogMTsKKwl1MzIgdG90YWxfcmVxX3ZpZGVvICA6IDk7CisJdTMyIHZpZGVvX2NoX3NlbCAgICAgOiAxOworCXUzMiB2aWRlb19wb3J0cmFpdCAgIDogMjsKKwl1MzIgeXV2MnJnYl9lbiAgICAgICA6IDE7CisJdTMyIHl1djJyZ2Jfb3B0aW9uICAgOiAxOworCXUzMiB2aWRlb19pbnZfaG9yICAgIDogMTsKKwl1MzIgdmlkZW9faW52X3ZlciAgICA6IDE7CisJdTMyIGdhbW1hX3NlbCAgICAgICAgOiAyOworCXUzMiBkaXNfbGltaXQgICAgICAgIDogMTsKKwl1MzIgZW5fdXZfaGJsZW5kICAgICA6IDE7CisJdTMyIHJnYl9nYW1tYV9zZWwgICAgOiAyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gdmlkZW9fY3RybF91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgdmlkZW9fY3RybF90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZGlzcF9kYl9idWZfY250bF9yZF90IHsKLQl1bnNpZ25lZCBsb25nIGVuX2RiX2J1ZiAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgdXBkYXRlX2RiX2J1Zl9kb25lICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBkYl9idWZfY250bCAgICAgICAgIDogNjsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICAgICAgOiAyNDsKKwl1MzIgZW5fZGJfYnVmICAgICAgICAgICA6IDE7CisJdTMyIHVwZGF0ZV9kYl9idWZfZG9uZSAgOiAxOworCXUzMiBkYl9idWZfY250bCAgICAgICAgIDogNjsKKwl1MzIgICAgICAgICAgICAgICAgICAgICA6IDI0OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gZGlzcF9kYl9idWZfY250bF9yZF91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgZGlzcF9kYl9idWZfY250bF9yZF90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZGlzcF9kYl9idWZfY250bF93cl90IHsKLQl1bnNpZ25lZCBsb25nIGVuX2RiX2J1ZiAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHVwZGF0ZV9kYl9idWYgIDogMTsKLQl1bnNpZ25lZCBsb25nIGRiX2J1Zl9jbnRsICAgIDogNjsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgIDogMjQ7CisJdTMyIGVuX2RiX2J1ZiAgICAgIDogMTsKKwl1MzIgdXBkYXRlX2RiX2J1ZiAgOiAxOworCXUzMiBkYl9idWZfY250bCAgICA6IDY7CisJdTMyICAgICAgICAgICAgICAgIDogMjQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBkaXNwX2RiX2J1Zl9jbnRsX3dyX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCBkaXNwX2RiX2J1Zl9jbnRsX3dyX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBnYW1tYV92YWx1ZTFfdCB7Ci0JdW5zaWduZWQgbG9uZyBnYW1tYTEgICA6IDg7Ci0JdW5zaWduZWQgbG9uZyBnYW1tYTIgICA6IDg7Ci0JdW5zaWduZWQgbG9uZyBnYW1tYTMgICA6IDg7Ci0JdW5zaWduZWQgbG9uZyBnYW1tYTQgICA6IDg7CisJdTMyIGdhbW1hMSAgIDogODsKKwl1MzIgZ2FtbWEyICAgOiA4OworCXUzMiBnYW1tYTMgICA6IDg7CisJdTMyIGdhbW1hNCAgIDogODsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGdhbW1hX3ZhbHVlMV91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgZ2FtbWFfdmFsdWUxX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBnYW1tYV92YWx1ZTJfdCB7Ci0JdW5zaWduZWQgbG9uZyBnYW1tYTUgICA6IDg7Ci0JdW5zaWduZWQgbG9uZyBnYW1tYTYgICA6IDg7Ci0JdW5zaWduZWQgbG9uZyBnYW1tYTcgICA6IDg7Ci0JdW5zaWduZWQgbG9uZyBnYW1tYTggICA6IDg7CisJdTMyIGdhbW1hNSAgIDogODsKKwl1MzIgZ2FtbWE2ICAgOiA4OworCXUzMiBnYW1tYTcgICA6IDg7CisJdTMyIGdhbW1hOCAgIDogODsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGdhbW1hX3ZhbHVlMl91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgZ2FtbWFfdmFsdWUyX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBnYW1tYV9zbG9wZV90IHsKLQl1bnNpZ25lZCBsb25nIHNsb3BlMSAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHNsb3BlMiAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHNsb3BlMyAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHNsb3BlNCAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHNsb3BlNSAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHNsb3BlNiAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHNsb3BlNyAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHNsb3BlOCAgIDogMzsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIDogODsKKwl1MzIgc2xvcGUxICAgOiAzOworCXUzMiBzbG9wZTIgICA6IDM7CisJdTMyIHNsb3BlMyAgIDogMzsKKwl1MzIgc2xvcGU0ICAgOiAzOworCXUzMiBzbG9wZTUgICA6IDM7CisJdTMyIHNsb3BlNiAgIDogMzsKKwl1MzIgc2xvcGU3ICAgOiAzOworCXUzMiBzbG9wZTggICA6IDM7CisJdTMyICAgICAgICAgIDogODsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGdhbW1hX3Nsb3BlX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCBnYW1tYV9zbG9wZV90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbWNfZXh0X21lbV9sb2NhdGlvbl90IHsKLQl1bnNpZ25lZCBsb25nIG1jX2V4dF9tZW1fc3RhcnQgOiAxNjsKLQl1bnNpZ25lZCBsb25nIG1jX2V4dF9tZW1fdG9wICAgOiAxNjsKKwl1MzIgbWNfZXh0X21lbV9zdGFydCA6IDE2OworCXUzMiBtY19leHRfbWVtX3RvcCAgIDogMTY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBtY19leHRfbWVtX2xvY2F0aW9uX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCBtY19leHRfbWVtX2xvY2F0aW9uX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBtY19mYl9sb2NhdGlvbl90IHsKLQl1bnNpZ25lZCBsb25nIG1jX2ZiX3N0YXJ0ICAgICAgOiAxNjsKLQl1bnNpZ25lZCBsb25nIG1jX2ZiX3RvcCAgICAgICAgOiAxNjsKKwl1MzIgbWNfZmJfc3RhcnQgICAgICA6IDE2OworCXUzMiBtY19mYl90b3AgICAgICAgIDogMTY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBtY19mYl9sb2NhdGlvbl91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgbWNfZmJfbG9jYXRpb25fdCBmOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGNsa19waW5fY250bF90IHsKLQl1bnNpZ25lZCBsb25nIG9zY19lbiAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgb3NjX2dhaW4gICAgICAgICA6IDU7Ci0JdW5zaWduZWQgbG9uZyBkb250X3VzZV94dGFsaW4gIDogMTsKLQl1bnNpZ25lZCBsb25nIHh0YWxpbl9wbV9lbiAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgeHRhbGluX2RibF9lbiAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgIDogNzsKLQl1bnNpZ25lZCBsb25nIGNnX2RlYnVnICAgICAgICAgOiAxNjsKKwl1MzIgb3NjX2VuICAgICAgICAgICA6IDE7CisJdTMyIG9zY19nYWluICAgICAgICAgOiA1OworCXUzMiBkb250X3VzZV94dGFsaW4gIDogMTsKKwl1MzIgeHRhbGluX3BtX2VuICAgICA6IDE7CisJdTMyIHh0YWxpbl9kYmxfZW4gICAgOiAxOworCXUzMiAgICAgICAgICAgICAgICAgIDogNzsKKwl1MzIgY2dfZGVidWcgICAgICAgICA6IDE2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gY2xrX3Bpbl9jbnRsX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCBjbGtfcGluX2NudGxfdCBmOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IHBsbF9yZWZfZmJfZGl2X3QgewotCXVuc2lnbmVkIGxvbmcgcGxsX3JlZl9kaXYgICAgICA6IDQ7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgIDogNDsKLQl1bnNpZ25lZCBsb25nIHBsbF9mYl9kaXZfaW50ICAgOiA2OwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICA6IDI7Ci0JdW5zaWduZWQgbG9uZyBwbGxfZmJfZGl2X2ZyYWMgIDogMzsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgcGxsX3Jlc2V0X3RpbWUgICA6IDQ7Ci0JdW5zaWduZWQgbG9uZyBwbGxfbG9ja190aW1lICAgIDogODsKKwl1MzIgcGxsX3JlZl9kaXYgICAgICA6IDQ7CisJdTMyICAgICAgICAgICAgICAgICAgOiA0OworCXUzMiBwbGxfZmJfZGl2X2ludCAgIDogNjsKKwl1MzIgICAgICAgICAgICAgICAgICA6IDI7CisJdTMyIHBsbF9mYl9kaXZfZnJhYyAgOiAzOworCXUzMiAgICAgICAgICAgICAgICAgIDogMTsKKwl1MzIgcGxsX3Jlc2V0X3RpbWUgICA6IDQ7CisJdTMyIHBsbF9sb2NrX3RpbWUgICAgOiA4OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gcGxsX3JlZl9mYl9kaXZfdSB7Ci0JdW5zaWduZWQgbG9uZyB2YWwgOiAzMjsKKwl1MzIgdmFsIDogMzI7CiAJc3RydWN0IHBsbF9yZWZfZmJfZGl2X3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBwbGxfY250bF90IHsKLQl1bnNpZ25lZCBsb25nIHBsbF9wd2RuICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBwbGxfcmVzZXQgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgcGxsX3BtX2VuICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHBsbF9tb2RlICAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBwbGxfcmVmY2xrX3NlbCAgOiAxOwotCXVuc2lnbmVkIGxvbmcgcGxsX2ZiY2xrX3NlbCAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHBsbF90Y3BvZmYgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBwbGxfcGNwICAgICAgICAgOiAzOwotCXVuc2lnbmVkIGxvbmcgcGxsX3B2ZyAgICAgICAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHBsbF92Y29mciAgICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyBwbGxfaW9mZnNldCAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgcGxsX3BlY2NfbW9kZSAgIDogMjsKLQl1bnNpZ25lZCBsb25nIHBsbF9wZWNjX3Njb24gICA6IDI7Ci0JdW5zaWduZWQgbG9uZyBwbGxfZGFjdGFsICAgICAgOiA0OwotCXVuc2lnbmVkIGxvbmcgcGxsX2NwX2NsaXAgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIHBsbF9jb25mICAgICAgICA6IDM7Ci0JdW5zaWduZWQgbG9uZyBwbGxfbWJjdHJsICAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgcGxsX3Jpbmdfb2ZmICAgIDogMTsKKwl1MzIgcGxsX3B3ZG4gICAgICAgIDogMTsKKwl1MzIgcGxsX3Jlc2V0ICAgICAgIDogMTsKKwl1MzIgcGxsX3BtX2VuICAgICAgIDogMTsKKwl1MzIgcGxsX21vZGUgICAgICAgIDogMTsKKwl1MzIgcGxsX3JlZmNsa19zZWwgIDogMTsKKwl1MzIgcGxsX2ZiY2xrX3NlbCAgIDogMTsKKwl1MzIgcGxsX3RjcG9mZiAgICAgIDogMTsKKwl1MzIgcGxsX3BjcCAgICAgICAgIDogMzsKKwl1MzIgcGxsX3B2ZyAgICAgICAgIDogMzsKKwl1MzIgcGxsX3Zjb2ZyICAgICAgIDogMTsKKwl1MzIgcGxsX2lvZmZzZXQgICAgIDogMjsKKwl1MzIgcGxsX3BlY2NfbW9kZSAgIDogMjsKKwl1MzIgcGxsX3BlY2Nfc2NvbiAgIDogMjsKKwl1MzIgcGxsX2RhY3RhbCAgICAgIDogNDsKKwl1MzIgcGxsX2NwX2NsaXAgICAgIDogMjsKKwl1MzIgcGxsX2NvbmYgICAgICAgIDogMzsKKwl1MzIgcGxsX21iY3RybCAgICAgIDogMjsKKwl1MzIgcGxsX3Jpbmdfb2ZmICAgIDogMTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIHBsbF9jbnRsX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCBwbGxfY250bF90IGY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3Qgc2Nsa19jbnRsX3QgewotCXVuc2lnbmVkIGxvbmcgc2Nsa19zcmNfc2VsICAgICAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19wb3N0X2Rpdl9mYXN0ICAgOiA0OwotCXVuc2lnbmVkIGxvbmcgc2Nsa19jbGtvbl9oeXMgICAgICAgOiAzOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19wb3N0X2Rpdl9zbG93ICAgOiA0OwotCXVuc2lnbmVkIGxvbmcgZGlzcF9jZ19vazJzd2l0Y2hfZW4gOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9yZWcgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9kaXNwICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9tYyAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9leHRtYyAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9jcCAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9lMiAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9lMyAgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9pZGN0ICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgc2Nsa19mb3JjZV9iaXN0ICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgYnVzeV9leHRlbmRfY3AgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgYnVzeV9leHRlbmRfZTIgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgYnVzeV9leHRlbmRfZTMgICAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgYnVzeV9leHRlbmRfaWRjdCAgICAgOiAxOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgICAgOiAzOworCXUzMiBzY2xrX3NyY19zZWwgICAgICAgICA6IDI7CisJdTMyICAgICAgICAgICAgICAgICAgICAgIDogMjsKKwl1MzIgc2Nsa19wb3N0X2Rpdl9mYXN0ICAgOiA0OworCXUzMiBzY2xrX2Nsa29uX2h5cyAgICAgICA6IDM7CisJdTMyIHNjbGtfcG9zdF9kaXZfc2xvdyAgIDogNDsKKwl1MzIgZGlzcF9jZ19vazJzd2l0Y2hfZW4gOiAxOworCXUzMiBzY2xrX2ZvcmNlX3JlZyAgICAgICA6IDE7CisJdTMyIHNjbGtfZm9yY2VfZGlzcCAgICAgIDogMTsKKwl1MzIgc2Nsa19mb3JjZV9tYyAgICAgICAgOiAxOworCXUzMiBzY2xrX2ZvcmNlX2V4dG1jICAgICA6IDE7CisJdTMyIHNjbGtfZm9yY2VfY3AgICAgICAgIDogMTsKKwl1MzIgc2Nsa19mb3JjZV9lMiAgICAgICAgOiAxOworCXUzMiBzY2xrX2ZvcmNlX2UzICAgICAgICA6IDE7CisJdTMyIHNjbGtfZm9yY2VfaWRjdCAgICAgIDogMTsKKwl1MzIgc2Nsa19mb3JjZV9iaXN0ICAgICAgOiAxOworCXUzMiBidXN5X2V4dGVuZF9jcCAgICAgICA6IDE7CisJdTMyIGJ1c3lfZXh0ZW5kX2UyICAgICAgIDogMTsKKwl1MzIgYnVzeV9leHRlbmRfZTMgICAgICAgOiAxOworCXUzMiBidXN5X2V4dGVuZF9pZGN0ICAgICA6IDE7CisJdTMyICAgICAgICAgICAgICAgICAgICAgIDogMzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIHNjbGtfY250bF91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3Qgc2Nsa19jbnRsX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBwY2xrX2NudGxfdCB7Ci0JdW5zaWduZWQgbG9uZyBwY2xrX3NyY19zZWwgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICAgOiAyOwotCXVuc2lnbmVkIGxvbmcgcGNsa19wb3N0X2RpdiAgICA6IDQ7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgIDogODsKLQl1bnNpZ25lZCBsb25nIHBjbGtfZm9yY2VfZGlzcCAgOiAxOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICA6IDE1OworCXUzMiBwY2xrX3NyY19zZWwgICAgIDogMjsKKwl1MzIgICAgICAgICAgICAgICAgICA6IDI7CisJdTMyIHBjbGtfcG9zdF9kaXYgICAgOiA0OworCXUzMiAgICAgICAgICAgICAgICAgIDogODsKKwl1MzIgcGNsa19mb3JjZV9kaXNwICA6IDE7CisJdTMyICAgICAgICAgICAgICAgICAgOiAxNTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIHBjbGtfY250bF91IHsKLQl1bnNpZ25lZCBsb25nIHZhbCA6IDMyOworCXUzMiB2YWwgOiAzMjsKIAlzdHJ1Y3QgcGNsa19jbnRsX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKQEAgLTczNSwzNiArNzUzLDE3NiBAQAogI2RlZmluZSBURVNUQ0xLX1NSQ19YVEFMICAweDA2CiAKIHN0cnVjdCBjbGtfdGVzdF9jbnRsX3QgewotCXVuc2lnbmVkIGxvbmcgdGVzdGNsa19zZWwgICAgICA6IDQ7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgIDogMzsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X2NoZWNrX2ZyZXEgOiAxOwotCXVuc2lnbmVkIGxvbmcgdHN0Y291bnRfcnN0ICAgICA6IDE7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgIDogMTU7Ci0JdW5zaWduZWQgbG9uZyB0ZXN0X2NvdW50ICAgICAgIDogODsKKwl1MzIgdGVzdGNsa19zZWwgICAgICA6IDQ7CisJdTMyICAgICAgICAgICAgICAgICAgOiAzOworCXUzMiBzdGFydF9jaGVja19mcmVxIDogMTsKKwl1MzIgdHN0Y291bnRfcnN0ICAgICA6IDE7CisJdTMyICAgICAgICAgICAgICAgICAgOiAxNTsKKwl1MzIgdGVzdF9jb3VudCAgICAgICA6IDg7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBjbGtfdGVzdF9jbnRsX3UgewotCXVuc2lnbmVkIGxvbmcgdmFsIDogMzI7CisJdTMyIHZhbCA6IDMyOwogCXN0cnVjdCBjbGtfdGVzdF9jbnRsX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBwd3JtZ3RfY250bF90IHsKLQl1bnNpZ25lZCBsb25nIHB3bV9lbmFibGUgICAgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICAgICAgIDogMTsKLQl1bnNpZ25lZCBsb25nIHB3bV9tb2RlX3JlcSAgICAgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIHB3bV93YWtldXBfY29uZCAgICAgIDogMjsKLQl1bnNpZ25lZCBsb25nIHB3bV9mYXN0X25vbWxfaHdfZW4gIDogMTsKLQl1bnNpZ25lZCBsb25nIHB3bV9ub21sX2Zhc3RfaHdfZW4gIDogMTsKLQl1bnNpZ25lZCBsb25nIHB3bV9mYXN0X25vbWxfY29uZCAgIDogNDsKLQl1bnNpZ25lZCBsb25nIHB3bV9ub21sX2Zhc3RfY29uZCAgIDogNDsKLQl1bnNpZ25lZCBsb25nIHB3bV9pZGxlX3RpbWVyICAgICAgIDogODsKLQl1bnNpZ25lZCBsb25nIHB3bV9idXN5X3RpbWVyICAgICAgIDogODsKKwl1MzIgcHdtX2VuYWJsZSAgICAgICAgICAgOiAxOworCXUzMiAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJdTMyIHB3bV9tb2RlX3JlcSAgICAgICAgIDogMjsKKwl1MzIgcHdtX3dha2V1cF9jb25kICAgICAgOiAyOworCXUzMiBwd21fZmFzdF9ub21sX2h3X2VuICA6IDE7CisJdTMyIHB3bV9ub21sX2Zhc3RfaHdfZW4gIDogMTsKKwl1MzIgcHdtX2Zhc3Rfbm9tbF9jb25kICAgOiA0OworCXUzMiBwd21fbm9tbF9mYXN0X2NvbmQgICA6IDQ7CisJdTMyIHB3bV9pZGxlX3RpbWVyICAgICAgIDogODsKKwl1MzIgcHdtX2J1c3lfdGltZXIgICAgICAgOiA4OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gcHdybWd0X2NudGxfdSB7Ci0JdW5zaWduZWQgbG9uZyB2YWwgOiAzMjsKKwl1MzIgdmFsIDogMzI7CiAJc3RydWN0IHB3cm1ndF9jbnRsX3QgZjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKKyNkZWZpbmUgU1JDX0RBVEFUWVBFX0VRVV9EU1QJMworCisjZGVmaW5lIFJPUDNfU1JDQ09QWQkweGNjCisjZGVmaW5lIFJPUDNfUEFUQ09QWQkweGYwCisKKyNkZWZpbmUgR01DX0JSVVNIX1NPTElEX0NPTE9SCTEzCisjZGVmaW5lIEdNQ19CUlVTSF9OT05FCQkJMTUKKworI2RlZmluZSBEUF9TUkNfTUVNX1JFQ1RBTkdVTEFSCTIKKworI2RlZmluZSBEUF9PUF9ST1AJMAorCitzdHJ1Y3QgZHBfZ3VpX21hc3Rlcl9jbnRsX3QgeworCXUzMiBnbWNfc3JjX3BpdGNoX29mZnNldF9jbnRsIDogMTsKKwl1MzIgZ21jX2RzdF9waXRjaF9vZmZzZXRfY250bCA6IDE7CisJdTMyIGdtY19zcmNfY2xpcHBpbmcgICAgICAgICAgOiAxOworCXUzMiBnbWNfZHN0X2NsaXBwaW5nICAgICAgICAgIDogMTsKKwl1MzIgZ21jX2JydXNoX2RhdGF0eXBlICAgICAgICA6IDQ7CisJdTMyIGdtY19kc3RfZGF0YXR5cGUgICAgICAgICAgOiA0OworCXUzMiBnbWNfc3JjX2RhdGF0eXBlICAgICAgICAgIDogMzsKKwl1MzIgZ21jX2J5dGVfcGl4X29yZGVyICAgICAgICA6IDE7CisJdTMyIGdtY19kZWZhdWx0X3NlbCAgICAgICAgICAgOiAxOworCXUzMiBnbWNfcm9wMyAgICAgICAgICAgICAgICAgIDogODsKKwl1MzIgZ21jX2RwX3NyY19zb3VyY2UgICAgICAgICA6IDM7CisJdTMyIGdtY19jbHJfY21wX2Zjbl9kaXMgICAgICAgOiAxOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwl1MzIgZ21jX3dyX21za19kaXMgICAgICAgICAgICA6IDE7CisJdTMyIGdtY19kcF9vcCAgICAgICAgICAgICAgICAgOiAxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gZHBfZ3VpX21hc3Rlcl9jbnRsX3UgeworCXUzMiB2YWwgOiAzMjsKKwlzdHJ1Y3QgZHBfZ3VpX21hc3Rlcl9jbnRsX3QgZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCByYmJtX3N0YXR1c190IHsKKwl1MzIgY21kZmlmb19hdmFpbCAgIDogNzsKKwl1MzIgICAgICAgICAgICAgICAgIDogMTsKKwl1MzIgaGlycV9vbl9yYmIgICAgIDogMTsKKwl1MzIgY3BycV9vbl9yYmIgICAgIDogMTsKKwl1MzIgY2ZycV9vbl9yYmIgICAgIDogMTsKKwl1MzIgaGlycV9pbl9ydGJ1ZiAgIDogMTsKKwl1MzIgY3BycV9pbl9ydGJ1ZiAgIDogMTsKKwl1MzIgY2ZycV9pbl9ydGJ1ZiAgIDogMTsKKwl1MzIgY2ZfcGlwZV9idXN5ICAgIDogMTsKKwl1MzIgZW5nX2V2X2J1c3kgICAgIDogMTsKKwl1MzIgY3BfY21kc3RybV9idXN5IDogMTsKKwl1MzIgZTJfYnVzeSAgICAgICAgIDogMTsKKwl1MzIgcmIyZF9idXN5ICAgICAgIDogMTsKKwl1MzIgcmIzZF9idXN5ICAgICAgIDogMTsKKwl1MzIgc2VfYnVzeSAgICAgICAgIDogMTsKKwl1MzIgcmVfYnVzeSAgICAgICAgIDogMTsKKwl1MzIgdGFtX2J1c3kgICAgICAgIDogMTsKKwl1MzIgdGRtX2J1c3kgICAgICAgIDogMTsKKwl1MzIgcGJfYnVzeSAgICAgICAgIDogMTsKKwl1MzIgICAgICAgICAgICAgICAgIDogNjsKKwl1MzIgZ3VpX2FjdGl2ZSAgICAgIDogMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIHJiYm1fc3RhdHVzX3UgeworCXUzMiB2YWwgOiAzMjsKKwlzdHJ1Y3QgcmJibV9zdGF0dXNfdCBmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGRwX2RhdGF0eXBlX3QgeworCXUzMiBkcF9kc3RfZGF0YXR5cGUgICA6IDQ7CisJdTMyICAgICAgICAgICAgICAgICAgIDogNDsKKwl1MzIgZHBfYnJ1c2hfZGF0YXR5cGUgOiA0OworCXUzMiBkcF9zcmMyX3R5cGUgICAgICA6IDE7CisJdTMyIGRwX3NyYzJfZGF0YXR5cGUgIDogMzsKKwl1MzIgZHBfc3JjX2RhdGF0eXBlICAgOiAzOworCXUzMiAgICAgICAgICAgICAgICAgICA6IDExOworCXUzMiBkcF9ieXRlX3BpeF9vcmRlciA6IDE7CisJdTMyICAgICAgICAgICAgICAgICAgIDogMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGRwX2RhdGF0eXBlX3UgeworCXUzMiB2YWwgOiAzMjsKKwlzdHJ1Y3QgZHBfZGF0YXR5cGVfdCBmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGRwX21peF90IHsKKwl1MzIgICAgICAgICAgICAgICAgOiA4OworCXUzMiBkcF9zcmNfc291cmNlICA6IDM7CisJdTMyIGRwX3NyYzJfc291cmNlIDogMzsKKwl1MzIgICAgICAgICAgICAgICAgOiAyOworCXUzMiBkcF9yb3AzICAgICAgICA6IDg7CisJdTMyIGRwX29wICAgICAgICAgIDogMTsKKwl1MzIgICAgICAgICAgICAgICAgOiA3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gZHBfbWl4X3UgeworCXUzMiB2YWwgOiAzMjsKKwlzdHJ1Y3QgZHBfbWl4X3QgZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBlbmdfY250bF90IHsKKwl1MzIgZXJjX3JlZ19yZF93cyAgICAgICAgICAgIDogMTsKKwl1MzIgZXJjX3JlZ193cl93cyAgICAgICAgICAgIDogMTsKKwl1MzIgZXJjX2lkbGVfcmVnX3dyICAgICAgICAgIDogMTsKKwl1MzIgZGlzX2VuZ2luZV90cmlnZ2VycyAgICAgIDogMTsKKwl1MzIgZGlzX3JvcF9zcmNfdXNlc19kc3Rfd19oIDogMTsKKwl1MzIgZGlzX3NyY191c2VzX2RzdF9kaXJtYWogIDogMTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgIDogNjsKKwl1MzIgZm9yY2VfM2RjbGtfd2hlbl8yZGNsayAgIDogMTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBlbmdfY250bF91IHsKKwl1MzIgdmFsIDogMzI7CisJc3RydWN0IGVuZ19jbnRsX3QgZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkcF9jbnRsX3QgeworCXUzMiBkc3RfeF9kaXIgICA6IDE7CisJdTMyIGRzdF95X2RpciAgIDogMTsKKwl1MzIgc3JjX3hfZGlyICAgOiAxOworCXUzMiBzcmNfeV9kaXIgICA6IDE7CisJdTMyIGRzdF9tYWpvcl94IDogMTsKKwl1MzIgc3JjX21ham9yX3ggOiAxOworCXUzMiAgICAgICAgICAgICA6IDI2OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gZHBfY250bF91IHsKKwl1MzIgdmFsIDogMzI7CisJc3RydWN0IGRwX2NudGxfdCBmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGRwX2NudGxfZHN0X2Rpcl90IHsKKwl1MzIgICAgICAgICAgIDogMTU7CisJdTMyIGRzdF95X2RpciA6IDE7CisJdTMyICAgICAgICAgICA6IDE1OworCXUzMiBkc3RfeF9kaXIgOiAxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gZHBfY250bF9kc3RfZGlyX3UgeworCXUzMiB2YWwgOiAzMjsKKwlzdHJ1Y3QgZHBfY250bF9kc3RfZGlyX3QgZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy85cC9mY2FsbC5jIGIvZnMvOXAvZmNhbGwuYwppbmRleCA3MTc0MmJhMS4uNmYyNjE3OCAxMDA2NDQKLS0tIGEvZnMvOXAvZmNhbGwuYworKysgYi9mcy85cC9mY2FsbC5jCkBAIC05OCwyMyArOTgsMjAgQEAKIHN0YXRpYyB2b2lkIHY5ZnNfdF9jbHVua19jYih2b2lkICphLCBzdHJ1Y3Qgdjlmc19mY2FsbCAqdGMsCiAJc3RydWN0IHY5ZnNfZmNhbGwgKnJjLCBpbnQgZXJyKQogewotCWludCBmaWQ7CisJaW50IGZpZCwgaWQ7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAotCWlmIChlcnIpCi0JCXJldHVybjsKLQorCWlkID0gMDsKIAlmaWQgPSB0Yy0+cGFyYW1zLnRjbHVuay5maWQ7CisJaWYgKHJjKQorCQlpZCA9IHJjLT5pZDsKKwogCWtmcmVlKHRjKTsKLQotCWlmICghcmMpCi0JCXJldHVybjsKLQotCXY5c2VzID0gYTsKLQlpZiAocmMtPmlkID09IFJDTFVOSykKLQkJdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKLQogCWtmcmVlKHJjKTsKKwlpZiAoaWQgPT0gUkNMVU5LKSB7CisJCXY5c2VzID0gYTsKKwkJdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKKwl9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvOXAvbXV4LmMgYi9mcy85cC9tdXguYwppbmRleCAzZTViMTI0Li5mNDQwN2ViIDEwMDY0NAotLS0gYS9mcy85cC9tdXguYworKysgYi9mcy85cC9tdXguYwpAQCAtNTAsMTUgKzUwLDIzIEBACiAJV3BlbmRpbmcgPSA4LAkJLyogY2FuIHdyaXRlICovCiB9OwogCitlbnVtIHsKKwlOb25lLAorCUZsdXNoaW5nLAorCUZsdXNoZWQsCit9OworCiBzdHJ1Y3Qgdjlmc19tdXhfcG9sbF90YXNrOwogCiBzdHJ1Y3Qgdjlmc19yZXEgeworCXNwaW5sb2NrX3QgbG9jazsKIAlpbnQgdGFnOwogCXN0cnVjdCB2OWZzX2ZjYWxsICp0Y2FsbDsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqcmNhbGw7CiAJaW50IGVycjsKIAl2OWZzX211eF9yZXFfY2FsbGJhY2sgY2I7CiAJdm9pZCAqY2JhOworCWludCBmbHVzaDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9saXN0OwogfTsKIApAQCAtOTYsOCArMTA0LDggQEAKIAogc3RydWN0IHY5ZnNfbXV4X3JwYyB7CiAJc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm07Ci0Jc3RydWN0IHY5ZnNfcmVxICpyZXE7CiAJaW50IGVycjsKKwlzdHJ1Y3Qgdjlmc19mY2FsbCAqdGNhbGw7CiAJc3RydWN0IHY5ZnNfZmNhbGwgKnJjYWxsOwogCXdhaXRfcXVldWVfaGVhZF90IHdxdWV1ZTsKIH07CkBAIC01MjQsMTAgKzUzMiw5IEBACiAKIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVxdWVzdChzdHJ1Y3Qgdjlmc19tdXhfZGF0YSAqbSwgc3RydWN0IHY5ZnNfcmVxICpyZXEpCiB7Ci0JaW50IGVjb2RlLCB0YWc7CisJaW50IGVjb2RlOwogCXN0cnVjdCB2OWZzX3N0ciAqZW5hbWU7CiAKLQl0YWcgPSByZXEtPnRhZzsKIAlpZiAoIXJlcS0+ZXJyICYmIHJlcS0+cmNhbGwtPmlkID09IFJFUlJPUikgewogCQllY29kZSA9IHJlcS0+cmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJybm87CiAJCWVuYW1lID0gJnJlcS0+cmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJyb3I7CkBAIC01NTMsMjMgKzU2MCw2IEBACiAJCWlmICghcmVxLT5lcnIpCiAJCQlyZXEtPmVyciA9IC1FSU87CiAJfQotCi0JaWYgKHJlcS0+ZXJyID09IEVSUkVRRkxVU0gpCi0JCXJldHVybjsKLQotCWlmIChyZXEtPmNiKSB7Ci0JCWRwcmludGsoREVCVUdfTVVYLCAiY2FsbGluZyBjYWxsYmFjayB0Y2FsbCAlcCByY2FsbCAlcFxuIiwKLQkJCXJlcS0+dGNhbGwsIHJlcS0+cmNhbGwpOwotCi0JCSgqcmVxLT5jYikgKHJlcS0+Y2JhLCByZXEtPnRjYWxsLCByZXEtPnJjYWxsLCByZXEtPmVycik7Ci0JCXJlcS0+Y2IgPSBOVUxMOwotCX0gZWxzZQotCQlrZnJlZShyZXEtPnJjYWxsKTsKLQotCXY5ZnNfbXV4X3B1dF90YWcobSwgdGFnKTsKLQotCXdha2VfdXAoJm0tPmVxdWV1ZSk7Ci0Ja2ZyZWUocmVxKTsKIH0KIAogLyoqCkBAIC02NjksMTcgKzY1OSwyNiBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewogCQkJaWYgKHJyZXEtPnRhZyA9PSByY2FsbC0+dGFnKSB7CiAJCQkJcmVxID0gcnJlcTsKLQkJCQlyZXEtPnJjYWxsID0gcmNhbGw7Ci0JCQkJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOwotCQkJCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKLQkJCQlwcm9jZXNzX3JlcXVlc3QobSwgcmVxKTsKKwkJCQlpZiAocmVxLT5mbHVzaCAhPSBGbHVzaGluZykKKwkJCQkJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOwogCQkJCWJyZWFrOwogCQkJfQotCiAJCX0KKwkJc3Bpbl91bmxvY2soJm0tPmxvY2spOwogCi0JCWlmICghcmVxKSB7Ci0JCQlzcGluX3VubG9jaygmbS0+bG9jayk7CisJCWlmIChyZXEpIHsKKwkJCXJlcS0+cmNhbGwgPSByY2FsbDsKKwkJCXByb2Nlc3NfcmVxdWVzdChtLCByZXEpOworCisJCQlpZiAocmVxLT5mbHVzaCAhPSBGbHVzaGluZykgeworCQkJCWlmIChyZXEtPmNiKQorCQkJCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKKwkJCQllbHNlCisJCQkJCWtmcmVlKHJlcS0+cmNhbGwpOworCisJCQkJd2FrZV91cCgmbS0+ZXF1ZXVlKTsKKwkJCX0KKwkJfSBlbHNlIHsKIAkJCWlmIChlcnIgPj0gMCAmJiByY2FsbC0+aWQgIT0gUkZMVVNIKQogCQkJCWRwcmludGsoREVCVUdfRVJST1IsCiAJCQkJCSJ1bmV4cGVjdGVkIHJlc3BvbnNlIG11eCAlcCBpZCAlZCB0YWcgJWRcbiIsCkBAIC03NDYsNyArNzQ1LDYgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAl2OWZzX3NldF90YWcodGMsIG4pOwotCiAJaWYgKCh2OWZzX2RlYnVnX2xldmVsJkRFQlVHX0ZDQUxMKSA9PSBERUJVR19GQ0FMTCkgewogCQljaGFyIGJ1ZlsxNTBdOwogCkBAIC03NTQsMTIgKzc1MiwxNCBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UgIjw8PCAlcCAlc1xuIiwgbSwgYnVmKTsKIAl9CiAKKwlzcGluX2xvY2tfaW5pdCgmcmVxLT5sb2NrKTsKIAlyZXEtPnRhZyA9IG47CiAJcmVxLT50Y2FsbCA9IHRjOwogCXJlcS0+cmNhbGwgPSBOVUxMOwogCXJlcS0+ZXJyID0gMDsKIAlyZXEtPmNiID0gY2I7CiAJcmVxLT5jYmEgPSBjYmE7CisJcmVxLT5mbHVzaCA9IE5vbmU7CiAKIAlzcGluX2xvY2soJm0tPmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJnJlcS0+cmVxX2xpc3QsICZtLT51bnNlbnRfcmVxX2xpc3QpOwpAQCAtNzc2LDcyICs3NzYsMTA4IEBACiAJcmV0dXJuIHJlcTsKIH0KIAotc3RhdGljIHZvaWQgdjlmc19tdXhfZmx1c2hfY2Iodm9pZCAqYSwgc3RydWN0IHY5ZnNfZmNhbGwgKnRjLAotCQkJICAgICAgc3RydWN0IHY5ZnNfZmNhbGwgKnJjLCBpbnQgZXJyKQorc3RhdGljIHZvaWQgdjlmc19tdXhfZnJlZV9yZXF1ZXN0KHN0cnVjdCB2OWZzX211eF9kYXRhICptLCBzdHJ1Y3Qgdjlmc19yZXEgKnJlcSkKK3sKKwl2OWZzX211eF9wdXRfdGFnKG0sIHJlcS0+dGFnKTsKKwlrZnJlZShyZXEpOworfQorCitzdGF0aWMgdm9pZCB2OWZzX211eF9mbHVzaF9jYihzdHJ1Y3Qgdjlmc19yZXEgKmZyZXEsIHZvaWQgKmEpCiB7CiAJdjlmc19tdXhfcmVxX2NhbGxiYWNrIGNiOwogCWludCB0YWc7CiAJc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm07Ci0Jc3RydWN0IHY5ZnNfcmVxICpyZXEsICpycHRyOworCXN0cnVjdCB2OWZzX3JlcSAqcmVxLCAqcnJlcSwgKnJwdHI7CiAKIAltID0gYTsKLQlkcHJpbnRrKERFQlVHX01VWCwgIm11eCAlcCB0YyAlcCByYyAlcCBlcnIgJWQgb2xkdGFnICVkXG4iLCBtLCB0YywKLQkJcmMsIGVyciwgdGMtPnBhcmFtcy50Zmx1c2gub2xkdGFnKTsKKwlkcHJpbnRrKERFQlVHX01VWCwgIm11eCAlcCB0YyAlcCByYyAlcCBlcnIgJWQgb2xkdGFnICVkXG4iLCBtLAorCQlmcmVxLT50Y2FsbCwgZnJlcS0+cmNhbGwsIGZyZXEtPmVyciwKKwkJZnJlcS0+dGNhbGwtPnBhcmFtcy50Zmx1c2gub2xkdGFnKTsKIAogCXNwaW5fbG9jaygmbS0+bG9jayk7CiAJY2IgPSBOVUxMOwotCXRhZyA9IHRjLT5wYXJhbXMudGZsdXNoLm9sZHRhZzsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBycHRyLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWlmIChyZXEtPnRhZyA9PSB0YWcpIHsKKwl0YWcgPSBmcmVxLT50Y2FsbC0+cGFyYW1zLnRmbHVzaC5vbGR0YWc7CisJcmVxID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgeworCQlpZiAocnJlcS0+dGFnID09IHRhZykgeworCQkJcmVxID0gcnJlcTsKIAkJCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKLQkJCWlmIChyZXEtPmNiKSB7Ci0JCQkJY2IgPSByZXEtPmNiOwotCQkJCXJlcS0+Y2IgPSBOVUxMOwotCQkJCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKLQkJCQkoKmNiKSAocmVxLT5jYmEsIHJlcS0+dGNhbGwsIHJlcS0+cmNhbGwsCi0JCQkJICAgICAgIHJlcS0+ZXJyKTsKLQkJCX0KLQkJCWtmcmVlKHJlcSk7Ci0JCQl3YWtlX3VwKCZtLT5lcXVldWUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CisJc3Bpbl91bmxvY2soJm0tPmxvY2spOwogCi0JaWYgKCFjYikKLQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOworCWlmIChyZXEpIHsKKwkJc3Bpbl9sb2NrKCZyZXEtPmxvY2spOworCQlyZXEtPmZsdXNoID0gRmx1c2hlZDsKKwkJc3Bpbl91bmxvY2soJnJlcS0+bG9jayk7CiAKLQl2OWZzX211eF9wdXRfdGFnKG0sIHRhZyk7Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKKwkJaWYgKHJlcS0+Y2IpCisJCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKKwkJZWxzZQorCQkJa2ZyZWUocmVxLT5yY2FsbCk7CisKKwkJd2FrZV91cCgmbS0+ZXF1ZXVlKTsKKwl9CisKKwlrZnJlZShmcmVxLT50Y2FsbCk7CisJa2ZyZWUoZnJlcS0+cmNhbGwpOworCXY5ZnNfbXV4X2ZyZWVfcmVxdWVzdChtLCBmcmVxKTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIHY5ZnNfbXV4X2ZsdXNoX3JlcXVlc3Qoc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm0sIHN0cnVjdCB2OWZzX3JlcSAqcmVxKQogewogCXN0cnVjdCB2OWZzX2ZjYWxsICpmYzsKKwlzdHJ1Y3Qgdjlmc19yZXEgKnJyZXEsICpycHRyOwogCiAJZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgcmVxICVwIHRhZyAlZFxuIiwgbSwgcmVxLCByZXEtPnRhZyk7CiAKKwkvKiBpZiBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZCBmb3IgYSByZXF1ZXN0LCBkbyBub3RoaW5nICovCisJc3Bpbl9sb2NrKCZyZXEtPmxvY2spOworCWlmIChyZXEtPnJjYWxsIHx8IHJlcS0+ZXJyKSB7CisJCXNwaW5fdW5sb2NrKCZyZXEtPmxvY2spOworCQlkcHJpbnRrKERFQlVHX01VWCwgIm11eCAlcCByZXEgJXAgcmVzcG9uc2UgYWxyZWFkeSByZWNlaXZlZFxuIiwgbSwgcmVxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxLT5mbHVzaCA9IEZsdXNoaW5nOworCXNwaW5fdW5sb2NrKCZyZXEtPmxvY2spOworCisJc3Bpbl9sb2NrKCZtLT5sb2NrKTsKKwkvKiBpZiB0aGUgcmVxdWVzdCBpcyBub3Qgc2VudCB5ZXQsIGp1c3QgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnVuc2VudF9yZXFfbGlzdCwgcmVxX2xpc3QpIHsKKwkJaWYgKHJyZXEtPnRhZyA9PSByZXEtPnRhZykgeworCQkJZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgcmVxICVwIHJlcXVlc3QgaXMgbm90IHNlbnQgeWV0XG4iLCBtLCByZXEpOworCQkJbGlzdF9kZWwoJnJyZXEtPnJlcV9saXN0KTsKKwkJCXJlcS0+Zmx1c2ggPSBGbHVzaGVkOworCQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOworCQkJaWYgKHJlcS0+Y2IpCisJCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmbS0+bG9jayk7CisKKwljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CiAJZmMgPSB2OWZzX2NyZWF0ZV90Zmx1c2gocmVxLT50YWcpOwogCXY5ZnNfc2VuZF9yZXF1ZXN0KG0sIGZjLCB2OWZzX211eF9mbHVzaF9jYiwgbSk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkCi12OWZzX211eF9ycGNfY2Iodm9pZCAqYSwgc3RydWN0IHY5ZnNfZmNhbGwgKnRjLCBzdHJ1Y3Qgdjlmc19mY2FsbCAqcmMsIGludCBlcnIpCit2OWZzX211eF9ycGNfY2Ioc3RydWN0IHY5ZnNfcmVxICpyZXEsIHZvaWQgKmEpCiB7CiAJc3RydWN0IHY5ZnNfbXV4X3JwYyAqcjsKIAotCWlmIChlcnIgPT0gRVJSRVFGTFVTSCkgewotCQlrZnJlZShyYyk7Ci0JCWRwcmludGsoREVCVUdfTVVYLCAiZXJyIHJlcSBmbHVzaFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KKwlkcHJpbnRrKERFQlVHX01VWCwgInJlcSAlcCByICVwXG4iLCByZXEsIGEpOwogCXIgPSBhOwotCWRwcmludGsoREVCVUdfTVVYLCAibXV4ICVwIHJlcSAlcCB0YyAlcCByYyAlcCBlcnIgJWRcbiIsIHItPm0sIHItPnJlcSwKLQkJdGMsIHJjLCBlcnIpOwotCXItPnJjYWxsID0gcmM7Ci0Jci0+ZXJyID0gZXJyOworCXItPnJjYWxsID0gcmVxLT5yY2FsbDsKKwlyLT5lcnIgPSByZXEtPmVycjsKKworCWlmIChyZXEtPmZsdXNoIT1Ob25lICYmICFyZXEtPmVycikKKwkJci0+ZXJyID0gLUVSRVNUQVJUU1lTOworCiAJd2FrZV91cCgmci0+d3F1ZXVlKTsKIH0KIApAQCAtODU2LDEyICs4OTIsMTMgQEAKIHY5ZnNfbXV4X3JwYyhzdHJ1Y3Qgdjlmc19tdXhfZGF0YSAqbSwgc3RydWN0IHY5ZnNfZmNhbGwgKnRjLAogCSAgICAgc3RydWN0IHY5ZnNfZmNhbGwgKipyYykKIHsKLQlpbnQgZXJyOworCWludCBlcnIsIHNpZ3BlbmRpbmc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgdjlmc19yZXEgKnJlcTsKIAlzdHJ1Y3Qgdjlmc19tdXhfcnBjIHI7CiAKIAlyLmVyciA9IDA7CisJci50Y2FsbCA9IHRjOwogCXIucmNhbGwgPSBOVUxMOwogCXIubSA9IG07CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmci53cXVldWUpOwpAQCAtODY5LDQ4ICs5MDYsNTAgQEAKIAlpZiAocmMpCiAJCSpyYyA9IE5VTEw7CiAKKwlzaWdwZW5kaW5nID0gMDsKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJc2lncGVuZGluZyA9IDE7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKTsKKwl9CisKIAlyZXEgPSB2OWZzX3NlbmRfcmVxdWVzdChtLCB0Yywgdjlmc19tdXhfcnBjX2NiLCAmcik7CiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCWVyciA9IFBUUl9FUlIocmVxKTsKIAkJZHByaW50ayhERUJVR19NVVgsICJlcnJvciAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIFBUUl9FUlIocmVxKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQlyLnJlcSA9IHJlcTsKLQlkcHJpbnRrKERFQlVHX01VWCwgIm11eCAlcCB0YyAlcCB0YWcgJWQgcnBjICVwIHJlcSAlcFxuIiwgbSwgdGMsCi0JCXJlcS0+dGFnLCAmciwgcmVxKTsKIAllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoci53cXVldWUsIHIucmNhbGwgIT0gTlVMTCB8fCByLmVyciA8IDApOwogCWlmIChyLmVyciA8IDApCiAJCWVyciA9IHIuZXJyOwogCiAJaWYgKGVyciA9PSAtRVJFU1RBUlRTWVMgJiYgbS0+dHJhbnMtPnN0YXR1cyA9PSBDb25uZWN0ZWQgJiYgbS0+ZXJyID09IDApIHsKLQkJc3Bpbl9sb2NrKCZtLT5sb2NrKTsKLQkJcmVxLT50Y2FsbCA9IE5VTEw7Ci0JCXJlcS0+ZXJyID0gRVJSRVFGTFVTSDsKLQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOworCQlpZiAodjlmc19tdXhfZmx1c2hfcmVxdWVzdChtLCByZXEpKSB7CisJCQkvKiB3YWl0IHVudGlsIHdlIGdldCByZXNwb25zZSBvZiB0aGUgZmx1c2ggbWVzc2FnZSAqLworCQkJZG8geworCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKTsKKwkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoci53cXVldWUsCisJCQkJCXIucmNhbGwgfHwgci5lcnIpOworCQkJfSB3aGlsZSAoIXIucmNhbGwgJiYgIXIuZXJyICYmIGVycj09LUVSRVNUQVJUU1lTICYmCisJCQkJbS0+dHJhbnMtPnN0YXR1cz09Q29ubmVjdGVkICYmICFtLT5lcnIpOworCQl9CisJCXNpZ3BlbmRpbmcgPSAxOworCX0KIAotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7Ci0JCXY5ZnNfbXV4X2ZsdXNoX3JlcXVlc3QobSwgcmVxKTsKKwlpZiAoc2lncGVuZGluZykgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogCQlyZWNhbGNfc2lncGVuZGluZygpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CiAJfQogCi0JaWYgKCFlcnIpIHsKLQkJaWYgKHIucmNhbGwpCi0JCQlkcHJpbnRrKERFQlVHX01VWCwgImdvdCByZXNwb25zZSBpZCAlZCB0YWcgJWRcbiIsCi0JCQkJci5yY2FsbC0+aWQsIHIucmNhbGwtPnRhZyk7Ci0KLQkJaWYgKHJjKQotCQkJKnJjID0gci5yY2FsbDsKLQkJZWxzZQotCQkJa2ZyZWUoci5yY2FsbCk7Ci0JfSBlbHNlIHsKKwlpZiAocmMpCisJCSpyYyA9IHIucmNhbGw7CisJZWxzZQogCQlrZnJlZShyLnJjYWxsKTsKLQkJZHByaW50ayhERUJVR19NVVgsICJnb3QgZXJyb3IgJWRcbiIsIGVycik7Ci0JCWlmIChlcnIgPiAwKQotCQkJZXJyID0gLUVJTzsKLQl9CisKKwl2OWZzX211eF9mcmVlX3JlcXVlc3QobSwgcmVxKTsKKwlpZiAoZXJyID4gMCkKKwkJZXJyID0gLUVJTzsKIAogCXJldHVybiBlcnI7CiB9CkBAIC05NTEsMTIgKzk5MCwxNSBAQAogCXN0cnVjdCB2OWZzX3JlcSAqcmVxLCAqcnRtcDsKIAlMSVNUX0hFQUQoY2FuY2VsX2xpc3QpOwogCi0JZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgZXJyICVkXG4iLCBtLCBlcnIpOworCWRwcmludGsoREVCVUdfRVJST1IsICJtdXggJXAgZXJyICVkXG4iLCBtLCBlcnIpOwogCW0tPmVyciA9IGVycjsKIAlzcGluX2xvY2soJm0tPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZtLT5yZXFfbGlzdCwgcmVxX2xpc3QpIHsKIAkJbGlzdF9tb3ZlKCZyZXEtPnJlcV9saXN0LCAmY2FuY2VsX2xpc3QpOwogCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmbS0+dW5zZW50X3JlcV9saXN0LCByZXFfbGlzdCkgeworCQlsaXN0X21vdmUoJnJlcS0+cmVxX2xpc3QsICZjYW5jZWxfbGlzdCk7CisJfQogCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZjYW5jZWxfbGlzdCwgcmVxX2xpc3QpIHsKQEAgLTk2NSwxMSArMTAwNyw5IEBACiAJCQlyZXEtPmVyciA9IGVycjsKIAogCQlpZiAocmVxLT5jYikKLQkJCSgqcmVxLT5jYikgKHJlcS0+Y2JhLCByZXEtPnRjYWxsLCByZXEtPnJjYWxsLCByZXEtPmVycik7CisJCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKIAkJZWxzZQogCQkJa2ZyZWUocmVxLT5yY2FsbCk7Ci0KLQkJa2ZyZWUocmVxKTsKIAl9CiAKIAl3YWtlX3VwKCZtLT5lcXVldWUpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvbXV4LmggYi9mcy85cC9tdXguaAppbmRleCBlOTBiZmQzLi5mYjEwYzUwIDEwMDY0NAotLS0gYS9mcy85cC9tdXguaAorKysgYi9mcy85cC9tdXguaApAQCAtMjQsNiArMjQsNyBAQAogICovCiAKIHN0cnVjdCB2OWZzX211eF9kYXRhOworc3RydWN0IHY5ZnNfcmVxOwogCiAvKioKICAqIHY5ZnNfbXV4X3JlcV9jYWxsYmFjayAtIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlCkBAIC0zNiw4ICszNyw3IEBACiAgKiBAcmMgLSByZXNwb25zZSBjYWxsCiAgKiBAZXJyIC0gZXJyb3IgY29kZSAobm9uLXplcm8gaWYgZXJyb3Igb2NjdXJlZCkKICAqLwotdHlwZWRlZiB2b2lkICgqdjlmc19tdXhfcmVxX2NhbGxiYWNrKSh2b2lkICphLCBzdHJ1Y3Qgdjlmc19mY2FsbCAqdGMsCi0Jc3RydWN0IHY5ZnNfZmNhbGwgKnJjLCBpbnQgZXJyKTsKK3R5cGVkZWYgdm9pZCAoKnY5ZnNfbXV4X3JlcV9jYWxsYmFjaykoc3RydWN0IHY5ZnNfcmVxICpyZXEsIHZvaWQgKmEpOwogCiBpbnQgdjlmc19tdXhfZ2xvYmFsX2luaXQodm9pZCk7CiB2b2lkIHY5ZnNfbXV4X2dsb2JhbF9leGl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2ZpbGUuYyBiL2ZzLzlwL3Zmc19maWxlLmMKaW5kZXggMDgzZGNmYy4uMWE4ZTQ2MCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2ZpbGUuYworKysgYi9mcy85cC92ZnNfZmlsZS5jCkBAIC03MiwxMSArNzIsMTcgQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCi0JZXJyID0gdjlmc190X3dhbGsodjlzZXMsIHZmaWQtPmZpZCwgZmlkLCBOVUxMLCBOVUxMKTsKKwllcnIgPSB2OWZzX3Rfd2Fsayh2OXNlcywgdmZpZC0+ZmlkLCBmaWQsIE5VTEwsICZmY2FsbCk7CiAJaWYgKGVyciA8IDApIHsKIAkJZHByaW50ayhERUJVR19FUlJPUiwgInJld2FsayBkaWRuJ3Qgd29ya1xuIik7Ci0JCWdvdG8gcHV0X2ZpZDsKKwkJaWYgKGZjYWxsICYmIGZjYWxsLT5pZCA9PSBSV0FMSykKKwkJCWdvdG8gY2x1bmtfZmlkOworCQllbHNlIHsKKwkJCXY5ZnNfcHV0X2lkcG9vbChmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CisJCQlnb3RvIGZyZWVfZmNhbGw7CisJCX0KIAl9CisJa2ZyZWUoZmNhbGwpOwogCiAJLyogVE9ETzogZG8gc3BlY2lhbCB0aGluZ3MgZm9yIE9fRVhDTCwgT19OT0ZPTExPVywgT19TWU5DICovCiAJLyogdHJhbnNsYXRlIG9wZW4gbW9kZSBhcHByb3ByaWF0ZWx5ICovCkBAIC0xMDksOCArMTE1LDcgQEAKIGNsdW5rX2ZpZDoKIAl2OWZzX3RfY2x1bmsodjlzZXMsIGZpZCk7CiAKLXB1dF9maWQ6Ci0Jdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKK2ZyZWVfZmNhbGw6CiAJa2ZyZWUoZmNhbGwpOwogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggMTMzZGIzNi4uMmNiODdiYSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTI3MCw3ICsyNzAsMTAgQEAKIAllcnIgPSB2OWZzX3Rfd2Fsayh2OXNlcywgcGZpZCwgZmlkLCBOVUxMLCAmZmNhbGwpOwogCWlmIChlcnIgPCAwKSB7CiAJCVBSSU5UX0ZDQUxMX0VSUk9SKCJjbG9uZSBlcnJvciIsIGZjYWxsKTsKLQkJZ290byBwdXRfZmlkOworCQlpZiAoZmNhbGwgJiYgZmNhbGwtPmlkID09IFJXQUxLKQorCQkJZ290byBjbHVua19maWQ7CisJCWVsc2UKKwkJCWdvdG8gcHV0X2ZpZDsKIAl9CiAJa2ZyZWUoZmNhbGwpOwogCkBAIC0zMjIsNiArMzI1LDkgQEAKIAkJJmZjYWxsKTsKIAogCWlmIChlcnIgPCAwKSB7CisJCWlmIChmY2FsbCAmJiBmY2FsbC0+aWQgPT0gUldBTEspCisJCQlnb3RvIGNsdW5rX2ZpZDsKKwogCQlQUklOVF9GQ0FMTF9FUlJPUigid2FsayBlcnJvciIsIGZjYWxsKTsKIAkJdjlmc19wdXRfaWRwb29sKG5maWQsICZ2OXNlcy0+ZmlkcG9vbCk7CiAJCWdvdG8gZXJyb3I7CkBAIC02NDAsMTkgKzY0NiwyNiBAQAogCX0KIAogCXJlc3VsdCA9IHY5ZnNfdF93YWxrKHY5c2VzLCBkaXJmaWRudW0sIG5ld2ZpZCwKLQkJKGNoYXIgKilkZW50cnktPmRfbmFtZS5uYW1lLCBOVUxMKTsKKwkJKGNoYXIgKilkZW50cnktPmRfbmFtZS5uYW1lLCAmZmNhbGwpOworCiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJdjlmc19wdXRfaWRwb29sKG5ld2ZpZCwgJnY5c2VzLT5maWRwb29sKTsKKwkJaWYgKGZjYWxsICYmIGZjYWxsLT5pZCA9PSBSV0FMSykKKwkJCXY5ZnNfdF9jbHVuayh2OXNlcywgbmV3ZmlkKTsKKwkJZWxzZQorCQkJdjlmc19wdXRfaWRwb29sKG5ld2ZpZCwgJnY5c2VzLT5maWRwb29sKTsKKwogCQlpZiAocmVzdWx0ID09IC1FTk9FTlQpIHsKIAkJCWRfYWRkKGRlbnRyeSwgTlVMTCk7CiAJCQlkcHJpbnRrKERFQlVHX1ZGUywKIAkJCQkiUmV0dXJuIG5lZ2F0aXZlIGRlbnRyeSAlcCBjb3VudCAlZFxuIiwKIAkJCQlkZW50cnksIGF0b21pY19yZWFkKCZkZW50cnktPmRfY291bnQpKTsKKwkJCWtmcmVlKGZjYWxsKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJ3YWxrIGVycm9yOiVkXG4iLCByZXN1bHQpOwogCQlnb3RvIEZyZWVGY2FsbDsKIAl9CisJa2ZyZWUoZmNhbGwpOwogCiAJcmVzdWx0ID0gdjlmc190X3N0YXQodjlzZXMsIG5ld2ZpZCwgJmZjYWxsKTsKIAlpZiAocmVzdWx0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCBiMGEwYWU1Li42MWM1OTliIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtMTI3LDEyICsxMjcsMTMgQEAKIAogCWlmICgobmV3ZmlkID0gdjlmc19zZXNzaW9uX2luaXQodjlzZXMsIGRldl9uYW1lLCBkYXRhKSkgPCAwKSB7CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJwcm9ibGVtIGluaXRpYXRpbmcgc2Vzc2lvblxuIik7Ci0JCWtmcmVlKHY5c2VzKTsKLQkJcmV0dXJuIEVSUl9QVFIobmV3ZmlkKTsKKwkJc2IgPSBFUlJfUFRSKG5ld2ZpZCk7CisJCWdvdG8gb3V0X2ZyZWVfc2Vzc2lvbjsKIAl9CiAKIAlzYiA9IHNnZXQoZnNfdHlwZSwgTlVMTCwgdjlmc19zZXRfc3VwZXIsIHY5c2VzKTsKLQorCWlmIChJU19FUlIoc2IpKQorCQlnb3RvIG91dF9jbG9zZV9zZXNzaW9uOwogCXY5ZnNfZmlsbF9zdXBlcihzYiwgdjlzZXMsIGZsYWdzKTsKIAogCWlub2RlID0gdjlmc19nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCBtb2RlKTsKQEAgLTE4NSw2ICsxODYsMTIgQEAKIAogCXJldHVybiBzYjsKIAorb3V0X2Nsb3NlX3Nlc3Npb246CisJdjlmc19zZXNzaW9uX2Nsb3NlKHY5c2VzKTsKK291dF9mcmVlX3Nlc3Npb246CisJa2ZyZWUodjlzZXMpOworCXJldHVybiBzYjsKKwogcHV0X2JhY2tfc2I6CiAJLyogZGVhY3RpdmF0ZV9zdXBlciBjYWxscyB2OWZzX2tpbGxfc3VwZXIgd2hpY2ggd2lsbCBmcmVlcyB0aGUgcmVzdCAqLwogCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOwpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggZTIwN2JlNi4uZjliNTg0MiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC03OTksNiArNzk5LDcgQEAKIGNvbmZpZyBQUk9DX1ZNQ09SRQogICAgICAgICBib29sICIvcHJvYy92bWNvcmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKICAgICAgICAgZGVwZW5kcyBvbiBQUk9DX0ZTICYmIEVYUEVSSU1FTlRBTCAmJiBDUkFTSF9EVU1QCisJZGVmYXVsdCB5CiAgICAgICAgIGhlbHAKICAgICAgICAgRXhwb3J0cyB0aGUgZHVtcCBpbWFnZSBvZiBjcmFzaGVkIGtlcm5lbCBpbiBFTEYgZm9ybWF0LgogCkBAIC04NDEsNiArODQyLDEyIEBACiBjb25maWcgSFVHRVRMQkZTCiAJYm9vbCAiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0IgogCWRlcGVuZHMgWDg2IHx8IElBNjQgfHwgUFBDNjQgfHwgU1BBUkM2NCB8fCBTVVBFUkggfHwgQlJPS0VOCisJaGVscAorCSAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvbgorCSAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQ+IGZvciBkZXRhaWxzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSFVHRVRMQl9QQUdFCiAJZGVmX2Jvb2wgSFVHRVRMQkZTCkBAIC04NjEsNyArODY4LDcgQEAKIAogY29uZmlnIENPTkZJR0ZTX0ZTCiAJdHJpc3RhdGUgIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBTWVNGUyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBjb25maWdmcyBpcyBhIHJhbS1iYXNlZCBmaWxlc3lzdGVtIHRoYXQgcHJvdmlkZXMgdGhlIGNvbnZlcnNlCiAJICBvZiBzeXNmcydzIGZ1bmN0aW9uYWxpdHkuIFdoZXJlIHN5c2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZApkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCBmM2E0ZjcwLi4wNzhkM2QxIDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtMTAsNyArMTAsNyBAQAogCQlpb2N0bC5vIHJlYWRkaXIubyBzZWxlY3QubyBmaWZvLm8gbG9ja3MubyBkY2FjaGUubyBpbm9kZS5vIFwKIAkJYXR0ci5vIGJhZF9pbm9kZS5vIGZpbGUubyBmaWxlc3lzdGVtcy5vIG5hbWVzcGFjZS5vIGFpby5vIFwKIAkJc2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gbXBhZ2UubyBkaXJlY3QtaW8ubyBcCi0JCWlvcHJpby5vIHBub2RlLm8gZHJvcF9jYWNoZXMubyBzcGxpY2UubworCQlpb3ByaW8ubyBwbm9kZS5vIGRyb3BfY2FjaGVzLm8gc3BsaWNlLm8gc3luYy5vCiAKIG9iai0kKENPTkZJR19JTk9USUZZKQkJKz0gaW5vdGlmeS5vCiBvYmotJChDT05GSUdfRVBPTEwpCQkrPSBldmVudHBvbGwubwpAQCAtNDUsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX1BST0NfRlMpCQkrPSBwcm9jLwogb2JqLXkJCQkJKz0gcGFydGl0aW9ucy8KIG9iai0kKENPTkZJR19TWVNGUykJCSs9IHN5c2ZzLworb2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKQkrPSBjb25maWdmcy8KIG9iai15CQkJCSs9IGRldnB0cy8KIAogb2JqLSQoQ09ORklHX1BST0ZJTElORykJCSs9IGRjb29raWVzLm8KQEAgLTEwMCw1ICsxMDEsNCBAQAogb2JqLSQoQ09ORklHX0hPU1RGUykJCSs9IGhvc3Rmcy8KIG9iai0kKENPTkZJR19IUFBGUykJCSs9IGhwcGZzLwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKQkJKz0gZGVidWdmcy8KLW9iai0kKENPTkZJR19DT05GSUdGU19GUykJKz0gY29uZmlnZnMvCiBvYmotJChDT05GSUdfT0NGUzJfRlMpCQkrPSBvY2ZzMi8KZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuYwppbmRleCBkNGMyZDYzLi5hNDIxNDNjIDEwMDY0NAotLS0gYS9mcy9hZmZzL25hbWVpLmMKKysrIGIvZnMvYWZmcy9uYW1laS5jCkBAIC00MTYsMTAgKzQxNiw5IEBACiAJCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXJldHZhbCA9IC1FSU87CiAJYmggPSBhZmZzX2JyZWFkKHNiLCBvbGRfZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiAJaWYgKCFiaCkKLQkJZ290byBkb25lOworCQlyZXR1cm4gLUVJTzsKIAogCS8qIFJlbW92ZSBoZWFkZXIgZnJvbSBpdHMgcGFyZW50IGRpcmVjdG9yeS4gKi8KIAlhZmZzX2xvY2tfZGlyKG9sZF9kaXIpOwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCmluZGV4IDU3YzQ5MDMuLmQ2NjAzZDAgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAorKysgYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKQEAgLTc0LDggKzc0LDggQEAKIAlzdHJ1Y3QgYXV0b2ZzX3dhaXRfcXVldWUgKm5leHQ7CiAJYXV0b2ZzX3dxdF90IHdhaXRfcXVldWVfdG9rZW47CiAJLyogV2UgdXNlIHRoZSBmb2xsb3dpbmcgdG8gc2VlIHdoYXQgd2UgYXJlIHdhaXRpbmcgZm9yICovCi0JaW50IGhhc2g7Ci0JaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwl1bnNpZ25lZCBpbnQgbGVuOwogCWNoYXIgKm5hbWU7CiAJdTMyIGRldjsKIAl1NjQgaW5vOwpAQCAtODUsNyArODUsNiBAQAogCXBpZF90IHRnaWQ7CiAJLyogVGhpcyBpcyBmb3Igc3RhdHVzIHJlcG9ydGluZyB1cG9uIHJldHVybiAqLwogCWludCBzdGF0dXM7Ci0JYXRvbWljX3Qgbm90aWZ5OwogCWF0b21pY190IHdhaXRfY3RyOwogfTsKIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9yb290LmMgYi9mcy9hdXRvZnM0L3Jvb3QuYwppbmRleCA4NGUwMzBjLi41MTAwZjk4IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3Jvb3QuYworKysgYi9mcy9hdXRvZnM0L3Jvb3QuYwpAQCAtMzI3LDYgKzMyNyw3IEBACiBzdGF0aWMgdm9pZCAqYXV0b2ZzNF9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gYXV0b2ZzNF9zYmkoZGVudHJ5LT5kX3NiKTsKKwlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOwogCWludCBvel9tb2RlID0gYXV0b2ZzNF9vel9tb2RlKHNiaSk7CiAJdW5zaWduZWQgaW50IGxvb2t1cF90eXBlOwogCWludCBzdGF0dXM7CkBAIC0zNDAsMTMgKzM0MSw4IEBACiAJaWYgKG96X21vZGUgfHwgIWxvb2t1cF90eXBlKQogCQlnb3RvIGRvbmU7CiAKLQkvKgotCSAqIElmIGEgcmVxdWVzdCBpcyBwZW5kaW5nIHdhaXQgZm9yIGl0LgotCSAqIElmIGl0J3MgYSBtb3VudCB0aGVuIGl0IHdvbid0IGJlIGV4cGlyZWQgdGlsbCBhdCBsZWFzdAotCSAqIGEgbGlpdGxlIGxhdGVyIGFuZCBpZiBpdCdzIGFuIGV4cGlyZSB0aGVuIHdlIG1pZ2h0IG5lZWQKLQkgKiB0byBtb3VudCBpdCBhZ2Fpbi4KLQkgKi8KLQlpZiAoYXV0b2ZzNF9pc3BlbmRpbmcoZGVudHJ5KSkgeworCS8qIElmIGFuIGV4cGlyZSByZXF1ZXN0IGlzIHBlbmRpbmcgd2FpdCBmb3IgaXQuICovCisJaWYgKGlubyAmJiAoaW5vLT5mbGFncyAmIEFVVE9GU19JTkZfRVhQSVJJTkcpKSB7CiAJCURQUklOVEsoIndhaXRpbmcgZm9yIGFjdGl2ZSByZXF1ZXN0ICVwIG5hbWU9JS4qcyIsCiAJCQlkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvd2FpdHEuYyBiL2ZzL2F1dG9mczQvd2FpdHEuYwppbmRleCAxNDJhYjZhLi5jZTEwM2U3IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3dhaXRxLmMKKysrIGIvZnMvYXV0b2ZzNC93YWl0cS5jCkBAIC0xODksMTQgKzE4OSwzMCBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYXV0b2ZzX3dhaXRfcXVldWUgKgorYXV0b2ZzNF9maW5kX3dhaXQoc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCSAgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGhhc2gsIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlICp3cTsKKworCWZvciAod3EgPSBzYmktPnF1ZXVlczsgd3E7IHdxID0gd3EtPm5leHQpIHsKKwkJaWYgKHdxLT5oYXNoID09IGhhc2ggJiYKKwkJICAgIHdxLT5sZW4gPT0gbGVuICYmCisJCSAgICB3cS0+bmFtZSAmJiAhbWVtY21wKHdxLT5uYW1lLCBuYW1lLCBsZW4pKQorCQkJYnJlYWs7CisJfQorCXJldHVybiB3cTsKK30KKwogaW50IGF1dG9mczRfd2FpdChzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQllbnVtIGF1dG9mc19ub3RpZnkgbm90aWZ5KQogeworCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOwogCXN0cnVjdCBhdXRvZnNfd2FpdF9xdWV1ZSAqd3E7CiAJY2hhciAqbmFtZTsKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IDA7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzLCB0eXBlOwogCiAJLyogSW4gY2F0YXRvbmljIG1vZGUsIHdlIGRvbid0IHdhaXQgZm9yIG5vYm9keSAqLwogCWlmIChzYmktPmNhdGF0b25pYykKQEAgLTIyMywyMSArMjM5LDQxIEBACiAJCXJldHVybiAtRUlOVFI7CiAJfQogCi0JZm9yICh3cSA9IHNiaS0+cXVldWVzIDsgd3EgOyB3cSA9IHdxLT5uZXh0KSB7Ci0JCWlmICh3cS0+aGFzaCA9PSBkZW50cnktPmRfbmFtZS5oYXNoICYmCi0JCSAgICB3cS0+bGVuID09IGxlbiAmJgotCQkgICAgd3EtPm5hbWUgJiYgIW1lbWNtcCh3cS0+bmFtZSwgbmFtZSwgbGVuKSkKLQkJCWJyZWFrOworCXdxID0gYXV0b2ZzNF9maW5kX3dhaXQoc2JpLCBuYW1lLCBoYXNoLCBsZW4pOworCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCWlmICghd3EgJiYgaW5vICYmIG5vdGlmeSA9PSBORllfTk9ORSkgeworCQkvKgorCQkgKiBFaXRoZXIgd2UndmUgYmV0ZWFuIHRoZSBwZW5kaW5nIGV4cGlyZSB0byBwb3N0IGl0J3MKKwkJICogd2FpdCBvciBpdCBmaW5pc2hlZCB3aGlsZSB3ZSB3YWl0ZWQgb24gdGhlIG11dGV4LgorCQkgKiBTbyB3ZSBuZWVkIHRvIHdhaXQgdGlsbCBlaXRoZXIsIHRoZSB3YWl0IGFwcGVhcnMKKwkJICogb3IgdGhlIGV4cGlyZSBmaW5pc2hlcy4KKwkJICovCisKKwkJd2hpbGUgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX0VYUElSSU5HKSB7CisJCQltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaLzEwKTsKKwkJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNiaS0+d3FfbXV0ZXgpKSB7CisJCQkJa2ZyZWUobmFtZSk7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0KKwkJCXdxID0gYXV0b2ZzNF9maW5kX3dhaXQoc2JpLCBuYW1lLCBoYXNoLCBsZW4pOworCQkJaWYgKHdxKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogTm90IGlkZWFsIGJ1dCB0aGUgc3RhdHVzIGhhcyBhbHJlYWR5IGdvbmUuIE9mIHRoZSB0d28KKwkJICogY2FzZXMgd2hlcmUgd2Ugd2FpdCBvbiBORllfTk9ORSBuZWl0aGVyIGRlcGVuZCBvbiB0aGUKKwkJICogcmV0dXJuIHN0YXR1cyBvZiB0aGUgd2FpdC4KKwkJICovCisJCWlmICghd3EpIHsKKwkJCWtmcmVlKG5hbWUpOworCQkJbXV0ZXhfdW5sb2NrKCZzYmktPndxX211dGV4KTsKKwkJCXJldHVybiAwOworCQl9CiAJfQogCiAJaWYgKCF3cSkgewotCQkvKiBDYW4ndCB3YWl0IGZvciBhbiBleHBpcmUgaWYgdGhlcmUncyBubyBtb3VudCAqLwotCQlpZiAobm90aWZ5ID09IE5GWV9OT05FICYmICFkX21vdW50cG9pbnQoZGVudHJ5KSkgewotCQkJa2ZyZWUobmFtZSk7Ci0JCQltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOwotCQkJcmV0dXJuIC1FTk9FTlQ7Ci0JCX0KLQogCQkvKiBDcmVhdGUgYSBuZXcgd2FpdCBxdWV1ZSAqLwogCQl3cSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdXRvZnNfd2FpdF9xdWV1ZSksR0ZQX0tFUk5FTCk7CiAJCWlmICghd3EpIHsKQEAgLTI2MywyMCArMjk5LDcgQEAKIAkJd3EtPnRnaWQgPSBjdXJyZW50LT50Z2lkOwogCQl3cS0+c3RhdHVzID0gLUVJTlRSOyAvKiBTdGF0dXMgcmV0dXJuIGlmIGludGVycnVwdGVkICovCiAJCWF0b21pY19zZXQoJndxLT53YWl0X2N0ciwgMik7Ci0JCWF0b21pY19zZXQoJndxLT5ub3RpZnksIDEpOwogCQltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOwotCX0gZWxzZSB7Ci0JCWF0b21pY19pbmMoJndxLT53YWl0X2N0cik7Ci0JCW11dGV4X3VubG9jaygmc2JpLT53cV9tdXRleCk7Ci0JCWtmcmVlKG5hbWUpOwotCQlEUFJJTlRLKCJleGlzdGluZyB3YWl0IGlkID0gMHglMDhseCwgbmFtZSA9ICUuKnMsIG5meT0lZCIsCi0JCQkodW5zaWduZWQgbG9uZykgd3EtPndhaXRfcXVldWVfdG9rZW4sIHdxLT5sZW4sIHdxLT5uYW1lLCBub3RpZnkpOwotCX0KLQotCWlmIChub3RpZnkgIT0gTkZZX05PTkUgJiYgYXRvbWljX3JlYWQoJndxLT5ub3RpZnkpKSB7Ci0JCWludCB0eXBlOwotCi0JCWF0b21pY19kZWMoJndxLT5ub3RpZnkpOwogCiAJCWlmIChzYmktPnZlcnNpb24gPCA1KSB7CiAJCQlpZiAobm90aWZ5ID09IE5GWV9NT1VOVCkKQEAgLTI5OSw2ICszMjIsMTIgQEAKIAogCQkvKiBhdXRvZnM0X25vdGlmeV9kYWVtb24oKSBtYXkgYmxvY2sgKi8KIAkJYXV0b2ZzNF9ub3RpZnlfZGFlbW9uKHNiaSwgd3EsIHR5cGUpOworCX0gZWxzZSB7CisJCWF0b21pY19pbmMoJndxLT53YWl0X2N0cik7CisJCW11dGV4X3VubG9jaygmc2JpLT53cV9tdXRleCk7CisJCWtmcmVlKG5hbWUpOworCQlEUFJJTlRLKCJleGlzdGluZyB3YWl0IGlkID0gMHglMDhseCwgbmFtZSA9ICUuKnMsIG5meT0lZCIsCisJCQkodW5zaWduZWQgbG9uZykgd3EtPndhaXRfcXVldWVfdG9rZW4sIHdxLT5sZW4sIHdxLT5uYW1lLCBub3RpZnkpOwogCX0KIAogCS8qIHdxLT5uYW1lIGlzIE5VTEwgaWYgYW5kIG9ubHkgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSByZWxlYXNlZCAqLwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2ZsYXQuYyBiL2ZzL2JpbmZtdF9mbGF0LmMKaW5kZXggNjlmNDRkYy4uYjFjOTAyZSAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2ZsYXQuYworKysgYi9mcy9iaW5mbXRfZmxhdC5jCkBAIC00MjgsNyArNDI4LDYgQEAKIAlsb2ZmX3QgZnBvczsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGUsIGVuZF9jb2RlOwogCWludCByZXQ7Ci0JaW50IGV4ZWNfZmlsZW5vOwogCiAJaGRyID0gKChzdHJ1Y3QgZmxhdF9oZHIgKikgYnBybS0+YnVmKTsJCS8qIGV4ZWMtaGVhZGVyICovCiAJaW5vZGUgPSBicHJtLT5maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKQEAgLTUwMiwyMSArNTAxLDEyIEBACiAJCWdvdG8gZXJyOwogCX0KIAotCS8qIGNoZWNrIGZpbGUgZGVzY3JpcHRvciAqLwotCWV4ZWNfZmlsZW5vID0gZ2V0X3VudXNlZF9mZCgpOwotCWlmIChleGVjX2ZpbGVubyA8IDApIHsKLQkJcmV0ID0gLUVNRklMRTsKLQkJZ290byBlcnI7Ci0JfQotCWdldF9maWxlKGJwcm0tPmZpbGUpOwotCWZkX2luc3RhbGwoZXhlY19maWxlbm8sIGJwcm0tPmZpbGUpOwotCiAJLyogRmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqLwogCWlmIChpZCA9PSAwKSB7CiAJCXJlc3VsdCA9IGZsdXNoX29sZF9leGVjKGJwcm0pOwogCQlpZiAocmVzdWx0KSB7CiAJCQlyZXQgPSByZXN1bHQ7Ci0JCQlnb3RvIGVycl9jbG9zZTsKKwkJCWdvdG8gZXJyOwogCQl9CiAKIAkJLyogT0ssIFRoaXMgaXMgdGhlIHBvaW50IG9mIG5vIHJldHVybiAqLwpAQCAtNTQ4LDcgKzUzOCw3IEBACiAJCQkJdGV4dHBvcyA9ICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNOwogCQkJcHJpbnRrKCJVbmFibGUgdG8gbW1hcCBwcm9jZXNzIHRleHQsIGVycm5vICVkXG4iLCAoaW50KS10ZXh0cG9zKTsKIAkJCXJldCA9IHRleHRwb3M7Ci0JCQlnb3RvIGVycl9jbG9zZTsKKwkJCWdvdG8gZXJyOwogCQl9CiAKIAkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKQEAgLTU2NCw3ICs1NTQsNyBAQAogCQkJCQkoaW50KS1kYXRhcG9zKTsKIAkJCWRvX211bm1hcChjdXJyZW50LT5tbSwgdGV4dHBvcywgdGV4dF9sZW4pOwogCQkJcmV0ID0gcmVhbGRhdGFzdGFydDsKLQkJCWdvdG8gZXJyX2Nsb3NlOworCQkJZ290byBlcnI7CiAJCX0KIAkJZGF0YXBvcyA9IHJlYWxkYXRhc3RhcnQgKyBNQVhfU0hBUkVEX0xJQlMgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CiAKQEAgLTU4Nyw3ICs1NzcsNyBAQAogCQkJZG9fbXVubWFwKGN1cnJlbnQtPm1tLCB0ZXh0cG9zLCB0ZXh0X2xlbik7CiAJCQlkb19tdW5tYXAoY3VycmVudC0+bW0sIHJlYWxkYXRhc3RhcnQsIGRhdGFfbGVuICsgZXh0cmEpOwogCQkJcmV0ID0gcmVzdWx0OwotCQkJZ290byBlcnJfY2xvc2U7CisJCQlnb3RvIGVycjsKIAkJfQogCiAJCXJlbG9jID0gKHVuc2lnbmVkIGxvbmcgKikgKGRhdGFwb3MrKG50b2hsKGhkci0+cmVsb2Nfc3RhcnQpLXRleHRfbGVuKSk7CkBAIC02MDYsNyArNTk2LDcgQEAKIAkJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIFJBTSBmb3IgcHJvY2VzcyB0ZXh0L2RhdGEsIGVycm5vICVkXG4iLAogCQkJCQkoaW50KS10ZXh0cG9zKTsKIAkJCXJldCA9IHRleHRwb3M7Ci0JCQlnb3RvIGVycl9jbG9zZTsKKwkJCWdvdG8gZXJyOwogCQl9CiAKIAkJcmVhbGRhdGFzdGFydCA9IHRleHRwb3MgKyBudG9obChoZHItPmRhdGFfc3RhcnQpOwpAQCAtNjUyLDcgKzY0Miw3IEBACiAJCQlkb19tdW5tYXAoY3VycmVudC0+bW0sIHRleHRwb3MsIHRleHRfbGVuICsgZGF0YV9sZW4gKyBleHRyYSArCiAJCQkJTUFYX1NIQVJFRF9MSUJTICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAkJCXJldCA9IHJlc3VsdDsKLQkJCWdvdG8gZXJyX2Nsb3NlOworCQkJZ290byBlcnI7CiAJCX0KIAl9CiAKQEAgLTcxNyw3ICs3MDcsNyBAQAogCQkJCWFkZHIgPSBjYWxjX3JlbG9jKCpycCwgbGliaW5mbywgaWQsIDApOwogCQkJCWlmIChhZGRyID09IFJFTE9DX0ZBSUxFRCkgewogCQkJCQlyZXQgPSAtRU5PRVhFQzsKLQkJCQkJZ290byBlcnJfY2xvc2U7CisJCQkJCWdvdG8gZXJyOwogCQkJCX0KIAkJCQkqcnAgPSBhZGRyOwogCQkJfQpAQCAtNzQ3LDcgKzczNyw3IEBACiAJCQlycCA9ICh1bnNpZ25lZCBsb25nICopIGNhbGNfcmVsb2MoYWRkciwgbGliaW5mbywgaWQsIDEpOwogCQkJaWYgKHJwID09ICh1bnNpZ25lZCBsb25nICopUkVMT0NfRkFJTEVEKSB7CiAJCQkJcmV0ID0gLUVOT0VYRUM7Ci0JCQkJZ290byBlcnJfY2xvc2U7CisJCQkJZ290byBlcnI7CiAJCQl9CiAKIAkJCS8qIEdldCB0aGUgcG9pbnRlcidzIHZhbHVlLiAgKi8KQEAgLTc2Miw3ICs3NTIsNyBAQAogCQkJCWFkZHIgPSBjYWxjX3JlbG9jKGFkZHIsIGxpYmluZm8sIGlkLCAwKTsKIAkJCQlpZiAoYWRkciA9PSBSRUxPQ19GQUlMRUQpIHsKIAkJCQkJcmV0ID0gLUVOT0VYRUM7Ci0JCQkJCWdvdG8gZXJyX2Nsb3NlOworCQkJCQlnb3RvIGVycjsKIAkJCQl9CiAKIAkJCQkvKiBXcml0ZSBiYWNrIHRoZSByZWxvY2F0ZWQgcG9pbnRlci4gICovCkBAIC03ODMsOCArNzczLDYgQEAKIAkJCXN0YWNrX2xlbik7CiAKIAlyZXR1cm4gMDsKLWVycl9jbG9zZToKLQlzeXNfY2xvc2UoZXhlY19maWxlbm8pOwogZXJyOgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IGViOGZiYzUuLjA5OGMxMmIgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0xMTE2LDYgKzExMTYsOSBAQAogCWJwLT5iaW8xLmJpX2lvX3ZlYyA9ICZicC0+YnYxOwogCWJwLT5iaW8yLmJpX2lvX3ZlYyA9ICZicC0+YnYyOwogCisJYnAtPmJpbzEuYmlfbWF4X3ZlY3MgPSAxOworCWJwLT5iaW8yLmJpX21heF92ZWNzID0gMTsKKwogCWJwLT5iaW8xLmJpX2VuZF9pbyA9IGJpb19wYWlyX2VuZF8xOwogCWJwLT5iaW8yLmJpX2VuZF9pbyA9IGJpb19wYWlyX2VuZF8yOwogCmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IGFmODhjNDMuLmY1OTU4ZjQgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0xMTA0LDYgKzExMDQsOCBAQAogCS5yZWFkdgkJPSBnZW5lcmljX2ZpbGVfcmVhZHYsCiAJLndyaXRldgkJPSBnZW5lcmljX2ZpbGVfd3JpdGVfbm9sb2NrLAogCS5zZW5kZmlsZQk9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKKwkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCisJLnNwbGljZV93cml0ZQk9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUsCiB9OwogCiBpbnQgaW9jdGxfYnlfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQpkaWZmIC0tZ2l0IGEvZnMvY2hhcl9kZXYuYyBiL2ZzL2NoYXJfZGV2LmMKaW5kZXggNGUxYjg0OS4uZjM0MThmNyAxMDA2NDQKLS0tIGEvZnMvY2hhcl9kZXYuYworKysgYi9mcy9jaGFyX2Rldi5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmpfbWFwLmg+CkBAIC0yNyw4ICsyOCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9tYXAgKmNkZXZfbWFwOwogCi0jZGVmaW5lIE1BWF9QUk9CRV9IQVNIIDI1NQkvKiByYW5kb20gKi8KLQogc3RhdGljIERFRklORV9NVVRFWChjaHJkZXZzX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGNoYXJfZGV2aWNlX3N0cnVjdCB7CkBAIC0zOSw5MyArMzgsMjkgQEAKIAljaGFyIG5hbWVbNjRdOwogCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CiAJc3RydWN0IGNkZXYgKmNkZXY7CQkvKiB3aWxsIGRpZSAqLwotfSAqY2hyZGV2c1tNQVhfUFJPQkVfSEFTSF07Cit9ICpjaHJkZXZzW0NIUkRFVl9NQUpPUl9IQVNIX1NJWkVdOwogCiAvKiBpbmRleCBpbiB0aGUgYWJvdmUgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG1ham9yX3RvX2luZGV4KGludCBtYWpvcikKIHsKLQlyZXR1cm4gbWFqb3IgJSBNQVhfUFJPQkVfSEFTSDsKKwlyZXR1cm4gbWFqb3IgJSBDSFJERVZfTUFKT1JfSEFTSF9TSVpFOwogfQogCi1zdHJ1Y3QgY2hyZGV2X2luZm8gewotCWludCBpbmRleDsKLQlzdHJ1Y3QgY2hhcl9kZXZpY2Vfc3RydWN0ICpjZDsKLX07CisjaWZkZWYgQ09ORklHX1BST0NfRlMKIAotdm9pZCAqZ2V0X25leHRfY2hyZGV2KHZvaWQgKmRldikKLXsKLQlzdHJ1Y3QgY2hyZGV2X2luZm8gKmluZm87Ci0KLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghaW5mbykKLQkJCWdvdG8gb3V0OwotCQlpbmZvLT5pbmRleD0wOwotCQlpbmZvLT5jZCA9IGNocmRldnNbaW5mby0+aW5kZXhdOwotCQlpZiAoaW5mby0+Y2QpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQlpbmZvID0gZGV2OwotCX0KLQotCXdoaWxlIChpbmZvLT5pbmRleCA8IEFSUkFZX1NJWkUoY2hyZGV2cykpIHsKLQkJaWYgKGluZm8tPmNkKQotCQkJaW5mby0+Y2QgPSBpbmZvLT5jZC0+bmV4dDsKLQkJaWYgKGluZm8tPmNkKQotCQkJZ290byBvdXQ7Ci0JCS8qCi0JCSAqIE5vIGRldmljZXMgb24gdGhpcyBjaGFpbiwgbW92ZSB0byB0aGUgbmV4dAotCQkgKi8KLQkJaW5mby0+aW5kZXgrKzsKLQkJaW5mby0+Y2QgPSAoaW5mby0+aW5kZXggPCBBUlJBWV9TSVpFKGNocmRldnMpKSA/Ci0JCQljaHJkZXZzW2luZm8tPmluZGV4XSA6IE5VTEw7Ci0JCWlmIChpbmZvLT5jZCkKLQkJCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCXJldHVybiBpbmZvOwotfQotCi12b2lkICphY3F1aXJlX2NocmRldl9saXN0KHZvaWQpCi17Ci0JbXV0ZXhfbG9jaygmY2hyZGV2c19sb2NrKTsKLQlyZXR1cm4gZ2V0X25leHRfY2hyZGV2KE5VTEwpOwotfQotCi12b2lkIHJlbGVhc2VfY2hyZGV2X2xpc3Qodm9pZCAqZGV2KQotewotCW11dGV4X3VubG9jaygmY2hyZGV2c19sb2NrKTsKLQlrZnJlZShkZXYpOwotfQotCi0KLWludCBjb3VudF9jaHJkZXZfbGlzdCh2b2lkKQordm9pZCBjaHJkZXZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIG9mZl90IG9mZnNldCkKIHsKIAlzdHJ1Y3QgY2hhcl9kZXZpY2Vfc3RydWN0ICpjZDsKLQlpbnQgaSwgY291bnQ7CiAKLQljb3VudCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHJkZXZzKSA7IGkrKykgewotCQlmb3IgKGNkID0gY2hyZGV2c1tpXTsgY2Q7IGNkID0gY2QtPm5leHQpCi0JCQljb3VudCsrOworCWlmIChvZmZzZXQgPCBDSFJERVZfTUFKT1JfSEFTSF9TSVpFKSB7CisJCW11dGV4X2xvY2soJmNocmRldnNfbG9jayk7CisJCWZvciAoY2QgPSBjaHJkZXZzW29mZnNldF07IGNkOyBjZCA9IGNkLT5uZXh0KQorCQkJc2VxX3ByaW50ZihmLCAiJTNkICVzXG4iLCBjZC0+bWFqb3IsIGNkLT5uYW1lKTsKKwkJbXV0ZXhfdW5sb2NrKCZjaHJkZXZzX2xvY2spOwogCX0KLQotCXJldHVybiBjb3VudDsKIH0KIAotaW50IGdldF9jaHJkZXZfaW5mbyh2b2lkICpkZXYsIGludCAqbWFqb3IsIGNoYXIgKipuYW1lKQotewotCXN0cnVjdCBjaHJkZXZfaW5mbyAqaW5mbyA9IGRldjsKLQotCWlmIChpbmZvLT5jZCA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQotCSptYWpvciA9IGluZm8tPmNkLT5tYWpvcjsKLQkqbmFtZSA9IGluZm8tPmNkLT5uYW1lOwotCXJldHVybiAwOwotfQorI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKIC8qCiAgKiBSZWdpc3RlciBhIHNpbmdsZSBtYWpvciB3aXRoIGEgc3BlY2lmaWVkIG1pbm9yIHJhbmdlLgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IGNiNjhlZmIuLjcyNzFiYjAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTEsMyArMSwzMiBAQAorVmVyc2lvbiAxLjQzCistLS0tLS0tLS0tLS0KK1BPU0lYIGxvY2tpbmcgdG8gc2VydmVycyB3aGljaCBzdXBwb3J0IENJRlMgUE9TSVggRXh0ZW5zaW9ucworKGRpc2FibGVkIGJ5IGRlZmF1bHQgY29udHJvbGxlZCBieSBwcm9jL2ZzL2NpZnMvRXhwZXJpbWVudGFsKS4KK0hhbmRsZSBjb252ZXJzaW9uIG9mIGxvbmcgc2hhcmUgbmFtZXMgKGVzcGVjaWFsbHkgQXNpYW4gbGFuZ3VhZ2VzKQordG8gVW5pY29kZSBkdXJpbmcgbW91bnQuIAorCitWZXJzaW9uIDEuNDIKKy0tLS0tLS0tLS0tLQorRml4IHNsb3cgb3Bsb2NrIGJyZWFrIHdoZW4gbW91bnRlZCB0byBkaWZmZXJlbnQgc2VydmVycyBhdCB0aGUgc2FtZSB0aW1lIGFuZAordGhlIHRpZHMgbWF0Y2ggYW5kIHdlIHRyeSB0byBmaW5kIG1hdGNoaW5nIGZpZCBvbiB3cm9uZyBzZXJ2ZXIuIEZpeCByZWFkCitsb29waW5nIHdoZW4gc2lnbmluZyByZXF1aXJlZCBieSBzZXJ2ZXIgKDIuNi4xNiBrZXJuZWwgb25seSkuIEZpeCByZWFkZGlyCit2cy4gcmVuYW1lIHJhY2Ugd2hpY2ggY291bGQgY2F1c2UgZWFjaCB0byBoYW5nLiBSZXR1cm4gLiBhbmQgLi4gZXZlbgoraWYgc2VydmVyIGRvZXMgbm90LiAgQWxsb3cgc2VhcmNoZXMgdG8gc2tpcCBmaXJzdCB0aHJlZSBlbnRyaWVzIGFuZAorYmVnaW4gYXQgYW55IGxvY2F0aW9uLiBGaXggb29wcyBpbiBmaW5kX3dyaXRlYWJsZV9maWxlLgorCitWZXJzaW9uIDEuNDEKKy0tLS0tLS0tLS0tLQorRml4IE5UTE12MiBzZWN1cml0eSAoY2FuIGJlIGVuYWJsZWQgaW4gL3Byb2MvZnMvY2lmcykgc28gY3VzdG9tZXJzIGNhbgorY29uZmlndXJlIHN0cm9uZ2VyIGF1dGhlbnRpY2F0aW9uLiAgRml4IHNmdSBzeW1saW5rcyBzbyB0aGV5IGNhbgorYmUgZm9sbG93ZWQgKG5vdCBqdXN0IHJlY29nbml6ZWQpLiAgRml4IHdyYXBhcm91bmQgb2YgYmNjIG9uCityZWFkIHJlc3BvbnNlcyB3aGVuIGJ1ZmZlciBzaXplIG92ZXIgNjRLIGFuZCBhbHNvIGZpeCB3cmFwIG9mCittYXggc21iIGJ1ZmZlciBzaXplIHdoZW4gQ0lGU01heEJ1ZlNpemUgb3ZlciA2NEsuICBGaXggb29wcyBpbgorY2lmc191c2VyX3JlYWQgYW5kIGNpZnNfcmVhZHBhZ2VzICh3aGVuIEVBR0FJTiBvbiBzZW5kIG9mIHNtYgorb24gc29ja2V0IGlzIHJldHVybmVkIG92ZXIgYW5kIG92ZXIpLiAgQWRkIFBPU0lYIChhZHZpc29yeSkgYnl0ZSByYW5nZQorbG9ja2luZyBzdXBwb3J0IChyZXF1aXJlcyBzZXJ2ZXIgd2l0aCBuZXdlc3QgQ0lGUyBVTklYIEV4dGVuc2lvbnMKK3RvIHRoZSBwcm90b2NvbCBpbXBsZW1lbnRlZCkuIFNsb3cgZG93biBuZWdwcm90IHNsaWdodGx5IGluIHBvcnQgMTM5CitSRkMxMDAxIGNhc2UgdG8gZ2l2ZSBzZXNzaW9uX2luaXQgdGltZSBvbiBidWdneSBzZXJ2ZXJzLgorCiBWZXJzaW9uIDEuNDAKIC0tLS0tLS0tLS0tLQogVXNlIGZzdWlkIChmc2dpZCkgbW9yZSBjb25zaXN0ZW50bHkgaW5zdGVhZCBvZiB1aWQgKGdpZCkuIEltcHJvdmUgcGVyZm9ybWFuY2UKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvTWFrZWZpbGUgYi9mcy9jaWZzL01ha2VmaWxlCmluZGV4IDczODQ5NDcuLjU4Yzc3MjUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvTWFrZWZpbGUKKysrIGIvZnMvY2lmcy9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKICMKIG9iai0kKENPTkZJR19DSUZTKSArPSBjaWZzLm8KIAotY2lmcy1vYmpzIDo9IGNpZnNmcy5vIGNpZnNzbWIubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBpbm9kZS5vIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmRlcy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBhc24xLm8gbWQ0Lm8gbWQ1Lm8gY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gZmNudGwubyByZWFkZGlyLm8gaW9jdGwubworY2lmcy1vYmpzIDo9IGNpZnNmcy5vIGNpZnNzbWIubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBpbm9kZS5vIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmRlcy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBhc24xLm8gbWQ0Lm8gbWQ1Lm8gY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gZmNudGwubyByZWFkZGlyLm8gaW9jdGwubyBudGxtc3NwLm8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggYjAwNzBkMS4uMDM1NTAwMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTQyMiw2ICs0MjIsMTMgQEAKICBub21hcGNoYXJzICAgICBEbyBub3QgdHJhbnNsYXRlIGFueSBvZiB0aGVzZSBzZXZlbiBjaGFyYWN0ZXJzIChkZWZhdWx0KS4KICBub2Nhc2UgICAgICAgICBSZXF1ZXN0IGNhc2UgaW5zZW5zaXRpdmUgcGF0aCBuYW1lIG1hdGNoaW5nIChjYXNlCiAJCXNlbnNpdGl2ZSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgc2VydmVyIHN1cG9ydHMgaXQpLgorIHBvc2l4cGF0aHMgICAgIElmIENJRlMgVW5peCBleHRlbnNpb25zIGFyZSBzdXBwb3J0ZWQsIGF0dGVtcHQgdG8KKwkJbmVnb3RpYXRlIHBvc2l4IHBhdGggbmFtZSBzdXBwb3J0IHdoaWNoIGFsbG93cyBjZXJ0YWluCisJCWNoYXJhY3RlcnMgZm9yYmlkZGVuIGluIHR5cGljYWwgQ0lGUyBmaWxlbmFtZXMsIHdpdGhvdXQKKwkJcmVxdWlyaW5nIHJlbWFwcGluZy4gKGRlZmF1bHQpCisgbm9wb3NpeHBhdGhzICAgSWYgQ0lGUyBVbml4IGV4dGVuc2lvbnMgYXJlIHN1cHBvcnRlZCwgZG8gbm90IHJlcXVlc3QKKwkJcG9zaXggcGF0aCBuYW1lIHN1cHBvcnQgKHRoaXMgbWF5IGNhdXNlIHNlcnZlcnMgdG8KKwkJcmVqZWN0IGNyZWF0aW5nZmlsZSB3aXRoIGNlcnRhaW4gcmVzZXJ2ZWQgY2hhcmFjdGVycykuCiAgbm9icmwgICAgICAgICAgRG8gbm90IHNlbmQgYnl0ZSByYW5nZSBsb2NrIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuCiAJCVRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjZXJ0YWluIGFwcGxpY2F0aW9ucyB0aGF0IGJyZWFrCiAJCXdpdGggY2lmcyBzdHlsZSBtYW5kYXRvcnkgYnl0ZSByYW5nZSBsb2NrcyAoYW5kIG1vc3QKQEAgLTUwNCw2ICs1MTEsMTQgQEAKIAkJCXN1cHBvcnQgYW5kIHdhbnQgdG8gbWFwIHRoZSB1aWQgYW5kIGdpZCBmaWVsZHMgCiAJCQl0byB2YWx1ZXMgc3VwcGxpZWQgYXQgbW91bnQgKHJhdGhlciB0aGFuIHRoZSAKIAkJCWFjdHVhbCB2YWx1ZXMsIHRoZW4gc2V0IHRoaXMgdG8gemVyby4gKGRlZmF1bHQgMSkKK0V4cGVyaW1lbnRhbCAgICAgICAgICAgIFdoZW4gc2V0IHRvIDEgdXNlZCB0byBlbmFibGUgY2VydGFpbiBleHBlcmltZW50YWwKKwkJCWZlYXR1cmVzIChjdXJyZW50bHkgZW5hYmxlcyBtdWx0aXBhZ2Ugd3JpdGVzCisJCQl3aGVuIHNpZ25pbmcgaXMgZW5hYmxlZCwgdGhlIG11bHRpcGFnZSB3cml0ZQorCQkJcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgd2FzIGRpc2FibGVkIHdoZW4KKwkJCXNpZ25pbmcgdHVybmVkIG9uIGluIGNhc2UgYnVmZmVyIHdhcyBtb2RpZmllZAorCQkJanVzdCBiZWZvcmUgaXQgd2FzIHNlbnQsIGFsc28gdGhpcyBmbGFnIHdpbGwKKwkJCWJlIHVzZWQgdG8gdXNlIHRoZSBuZXcgZXhwZXJpbWVudGFsIHNlc3Npb25zZXR1cAorCQkJY29kZSkuCiAKIFRoZXNlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyBhbmQgdHJhY2luZyBjYW4gYmUgZW5hYmxlZCBieSBjaGFuZ2luZyBmbGFncyBpbiAKIC9wcm9jL2ZzL2NpZnMgKGFmdGVyIHRoZSBjaWZzIG1vZHVsZSBoYXMgYmVlbiBpbnN0YWxsZWQgb3IgYnVpbHQgaW50byB0aGUgCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKaW5kZXggYTJjMjQ4NS4uZTdkNjM3MyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvY2lmc2VuY3J5cHQuYwogICoKLSAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNQorICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDA1LDIwMDYKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqCiAgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zNiw3ICszNiw4IEBACiBleHRlcm4gdm9pZCBtZGZvdXIodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pOwogZXh0ZXJuIHZvaWQgRV9tZDRoYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqcDE2KTsKIAkKLXN0YXRpYyBpbnQgY2lmc19jYWxjdWxhdGVfc2lnbmF0dXJlKGNvbnN0IHN0cnVjdCBzbWJfaGRyICogY2lmc19wZHUsIGNvbnN0IGNoYXIgKiBrZXksIGNoYXIgKiBzaWduYXR1cmUpCitzdGF0aWMgaW50IGNpZnNfY2FsY3VsYXRlX3NpZ25hdHVyZShjb25zdCBzdHJ1Y3Qgc21iX2hkciAqIGNpZnNfcGR1LCAKKwkJCQkgICAgY29uc3QgY2hhciAqIGtleSwgY2hhciAqIHNpZ25hdHVyZSkKIHsKIAlzdHJ1Y3QJTUQ1Q29udGV4dCBjb250ZXh0OwogCkBAIC01Niw5ICs1Nyw2IEBACiAJaW50IHJjID0gMDsKIAljaGFyIHNtYl9zaWduYXR1cmVbMjBdOwogCi0JLyogQkIgcmVtZW1iZXIgdG8gaW5pdGlhbGl6ZSBzZXF1ZW5jZSBudW1iZXIgZWxzZXdoZXJlIGFuZCBpbml0aWFsaXplIG1hY19zaWduaW5nIGtleSBlbHNld2hlcmUgQkIgKi8KLQkvKiBCQiByZW1lbWJlciB0byBhZGQgY29kZSB0byBzYXZlIGV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciBpbiBtaWRRIGVudHJ5IEJCICovCi0KIAlpZigoY2lmc19wZHUgPT0gTlVMTCkgfHwgKHNlcnZlciA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg1LDIwICs4MywzMyBAQAogc3RhdGljIGludCBjaWZzX2NhbGNfc2lnbmF0dXJlMihjb25zdCBzdHJ1Y3Qga3ZlYyAqIGlvdiwgaW50IG5fdmVjLAogCQkJCWNvbnN0IGNoYXIgKiBrZXksIGNoYXIgKiBzaWduYXR1cmUpCiB7Ci0gICAgICAgIHN0cnVjdCAgTUQ1Q29udGV4dCBjb250ZXh0OworCXN0cnVjdCAgTUQ1Q29udGV4dCBjb250ZXh0OworCWludCBpOwogCi0gICAgICAgIGlmKChpb3YgPT0gTlVMTCkgfHwgKHNpZ25hdHVyZSA9PSBOVUxMKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZigoaW92ID09IE5VTEwpIHx8IChzaWduYXR1cmUgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgICAgIE1ENUluaXQoJmNvbnRleHQpOwotICAgICAgICBNRDVVcGRhdGUoJmNvbnRleHQsa2V5LENJRlNfU0VTU0lPTl9LRVlfU0laRSsxNik7CisJTUQ1SW5pdCgmY29udGV4dCk7CisJTUQ1VXBkYXRlKCZjb250ZXh0LGtleSxDSUZTX1NFU1NJT05fS0VZX1NJWkUrMTYpOworCWZvcihpPTA7aTxuX3ZlYztpKyspIHsKKwkJaWYoaW92W2ldLmlvdl9iYXNlID09IE5VTEwpIHsKKwkJCWNFUlJPUigxLCgibnVsbCBpb3ZlYyBlbnRyeSIpKTsKKwkJCXJldHVybiAtRUlPOworCQl9IGVsc2UgaWYoaW92W2ldLmlvdl9sZW4gPT0gMCkKKwkJCWJyZWFrOyAvKiBiYWlsIG91dCBpZiB3ZSBhcmUgc2VudCBub3RoaW5nIHRvIHNpZ24gKi8KKwkJLyogVGhlIGZpcnN0IGVudHJ5IGluY2x1ZGVzIGEgbGVuZ3RoIGZpZWxkICh3aGljaCBkb2VzIG5vdCBnZXQgCisJCSAgIHNpZ25lZCB0aGF0IG9jY3VwaWVzIHRoZSBmaXJzdCA0IGJ5dGVzIGJlZm9yZSB0aGUgaGVhZGVyICovCisJCWlmKGk9PTApIHsKKwkJCWlmIChpb3ZbMF0uaW92X2xlbiA8PSA4ICkgLyogY21kIGZpZWxkIGF0IG9mZnNldCA5ICovCisJCQkJYnJlYWs7IC8qIG5vdGhpbmcgdG8gc2lnbiBvciBjb3JydXB0IGhlYWRlciAqLworCQkJTUQ1VXBkYXRlKCZjb250ZXh0LGlvdlswXS5pb3ZfYmFzZSs0LCBpb3ZbMF0uaW92X2xlbi00KTsKKwkJfSBlbHNlCisJCQlNRDVVcGRhdGUoJmNvbnRleHQsaW92W2ldLmlvdl9iYXNlLCBpb3ZbaV0uaW92X2xlbik7CisJfQogCi0vKiAgICAgICAgTUQ1VXBkYXRlKCZjb250ZXh0LGNpZnNfcGR1LT5Qcm90b2NvbCxjaWZzX3BkdS0+c21iX2J1Zl9sZW5ndGgpOyAqLyAvKiBCQiBGSVhNRSBCQiAqLworCU1ENUZpbmFsKHNpZ25hdHVyZSwmY29udGV4dCk7CiAKLSAgICAgICAgTUQ1RmluYWwoc2lnbmF0dXJlLCZjb250ZXh0KTsKLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLS8qICAgICAgICByZXR1cm4gMDsgKi8KKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0yNTksNCArMjcwLDUgQEAKIC8qCWhtYWNfbWQ1X3VwZGF0ZSh2Ml9zZXNzaW9uX3Jlc3BvbnNlKzE2KWNsaWVudCB0aGluZyw4LCZjb250ZXh0KTsgKi8gLyogQkIgZml4ICovCiAKIAlobWFjX21kNV9maW5hbCh2Ml9zZXNzaW9uX3Jlc3BvbnNlLCZjb250ZXh0KTsKKwljaWZzX2R1bXBfbWVtKCJ2Ml9zZXNzX3JzcDogIiwgdjJfc2Vzc2lvbl9yZXNwb25zZSwgMzIpOyAvKiBCQiByZW1vdmVtZSBCQiAqLwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggNGJiYzU0NC4uYzI2MmQ4OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgImNpZnNmcy5oIgogI2luY2x1ZGUgImNpZnNwZHUuaCIKICNkZWZpbmUgREVDTEFSRV9HTE9CQUxTX0hFUkUKQEAgLTc1LDkgKzc2LDYgQEAKIG1vZHVsZV9wYXJhbShjaWZzX21heF9wZW5kaW5nLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhjaWZzX21heF9wZW5kaW5nLCJTaW11bHRhbmVvdXMgcmVxdWVzdHMgdG8gc2VydmVyLiBEZWZhdWx0OiA1MCBSYW5nZTogMiB0byAyNTYiKTsKIAotc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjaWZzX29wbG9ja19leGl0ZWQpOwotc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjaWZzX2Rub3RpZnlfZXhpdGVkKTsKLQogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19zbV9yZXFfcG9vbHA7CiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3JlcV9wb29scDsKIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfbWlkX3Bvb2xwOwpAQCAtOTMsMTMgKzkxLDEwIEBACiAJaW50IHJjID0gMDsKIAogCXNiLT5zX2ZsYWdzIHw9IE1TX05PRElSQVRJTUU7IC8qIGFuZCBwcm9iYWJseSBldmVuIG5vYXRpbWUgKi8KLQlzYi0+c19mc19pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNpZnNfc2JfaW5mbyksR0ZQX0tFUk5FTCk7CisJc2ItPnNfZnNfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaWZzX3NiX2luZm8pLEdGUF9LRVJORUwpOwogCWNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKIAlpZihjaWZzX3NiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWVsc2UKLQkJbWVtc2V0KGNpZnNfc2IsMCxzaXplb2Yoc3RydWN0IGNpZnNfc2JfaW5mbykpOwotCQogCiAJcmMgPSBjaWZzX21vdW50KHNiLCBjaWZzX3NiLCBkYXRhLCBkZXZuYW1lKTsKIApAQCAtODQ0LDEwICs4MzksNiBAQAogCV9fdTE2ICBuZXRmaWQ7CiAJaW50IHJjOwogCi0JZGFlbW9uaXplKCJjaWZzb3Bsb2NrZCIpOwotCWFsbG93X3NpZ25hbChTSUdURVJNKTsKLQotCW9wbG9ja1RocmVhZCA9IGN1cnJlbnQ7CiAJZG8gewogCQlpZiAodHJ5X3RvX2ZyZWV6ZSgpKSAKIAkJCWNvbnRpbnVlOwpAQCAtOTAzLDkgKzg5NCw5IEBACiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJc2NoZWR1bGVfdGltZW91dCgxKTsgIC8qIHlpZWxkIGluIGNhc2UgcSB3ZXJlIGNvcnJ1cHQgKi8KIAkJfQotCX0gd2hpbGUoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKLQlvcGxvY2tUaHJlYWQgPSBOVUxMOwotCWNvbXBsZXRlX2FuZF9leGl0ICgmY2lmc19vcGxvY2tfZXhpdGVkLCAwKTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNpZnNfZG5vdGlmeV90aHJlYWQodm9pZCAqIGR1bW15YXJnKQpAQCAtOTEzLDEwICs5MDQsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlczsKIAotCWRhZW1vbml6ZSgiY2lmc2Rub3RpZnlkIik7Ci0JYWxsb3dfc2lnbmFsKFNJR1RFUk0pOwotCi0JZG5vdGlmeVRocmVhZCA9IGN1cnJlbnQ7CiAJZG8gewogCQlpZih0cnlfdG9fZnJlZXplKCkpCiAJCQljb250aW51ZTsKQEAgLTkzNCw4ICs5MjEsOSBAQAogCQkJCXdha2VfdXBfYWxsKCZzZXMtPnNlcnZlci0+cmVzcG9uc2VfcSk7CiAJCX0KIAkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCX0gd2hpbGUoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKLQljb21wbGV0ZV9hbmRfZXhpdCAoJmNpZnNfZG5vdGlmeV9leGl0ZWQsIDApOworCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC05ODUsMzIgKzk3Myw0OCBAQAogCX0KIAogCXJjID0gY2lmc19pbml0X2lub2RlY2FjaGUoKTsKLQlpZiAoIXJjKSB7Ci0JCXJjID0gY2lmc19pbml0X21pZHMoKTsKLQkJaWYgKCFyYykgewotCQkJcmMgPSBjaWZzX2luaXRfcmVxdWVzdF9idWZzKCk7Ci0JCQlpZiAoIXJjKSB7Ci0JCQkJcmMgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZjaWZzX2ZzX3R5cGUpOwotCQkJCWlmICghcmMpIHsgICAgICAgICAgICAgICAgCi0JCQkJCXJjID0gKGludClrZXJuZWxfdGhyZWFkKGNpZnNfb3Bsb2NrX3RocmVhZCwgTlVMTCwgCi0JCQkJCQlDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgQ0xPTkVfVk0pOwotCQkJCQlpZihyYyA+IDApIHsKLQkJCQkJCXJjID0gKGludClrZXJuZWxfdGhyZWFkKGNpZnNfZG5vdGlmeV90aHJlYWQsIE5VTEwsCi0JCQkJCQkJQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8IENMT05FX1ZNKTsKLQkJCQkJCWlmKHJjID4gMCkKLQkJCQkJCQlyZXR1cm4gMDsKLQkJCQkJCWVsc2UKLQkJCQkJCQljRVJST1IoMSwoImVycm9yICVkIGNyZWF0ZSBkbm90aWZ5IHRocmVhZCIsIHJjKSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQljRVJST1IoMSwoImVycm9yICVkIGNyZWF0ZSBvcGxvY2sgdGhyZWFkIixyYykpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWNpZnNfZGVzdHJveV9yZXF1ZXN0X2J1ZnMoKTsKLQkJCX0KLQkJCWNpZnNfZGVzdHJveV9taWRzKCk7Ci0JCX0KLQkJY2lmc19kZXN0cm95X2lub2RlY2FjaGUoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2NsZWFuX3Byb2M7CisKKwlyYyA9IGNpZnNfaW5pdF9taWRzKCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9kZXN0cm95X2lub2RlY2FjaGU7CisKKwlyYyA9IGNpZnNfaW5pdF9yZXF1ZXN0X2J1ZnMoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2Rlc3Ryb3lfbWlkczsKKworCXJjID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2lmc19mc190eXBlKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2Rlc3Ryb3lfcmVxdWVzdF9idWZzOworCisJb3Bsb2NrVGhyZWFkID0ga3RocmVhZF9ydW4oY2lmc19vcGxvY2tfdGhyZWFkLCBOVUxMLCAiY2lmc29wbG9ja2QiKTsKKwlpZiAoSVNfRVJSKG9wbG9ja1RocmVhZCkpIHsKKwkJcmMgPSBQVFJfRVJSKG9wbG9ja1RocmVhZCk7CisJCWNFUlJPUigxLCgiZXJyb3IgJWQgY3JlYXRlIG9wbG9jayB0aHJlYWQiLCByYykpOworCQlnb3RvIG91dF91bnJlZ2lzdGVyX2ZpbGVzeXN0ZW07CiAJfQorCisJZG5vdGlmeVRocmVhZCA9IGt0aHJlYWRfcnVuKGNpZnNfZG5vdGlmeV90aHJlYWQsIE5VTEwsICJjaWZzZG5vdGlmeWQiKTsKKwlpZiAoSVNfRVJSKGRub3RpZnlUaHJlYWQpKSB7CisJCXJjID0gUFRSX0VSUihkbm90aWZ5VGhyZWFkKTsKKwkJY0VSUk9SKDEsKCJlcnJvciAlZCBjcmVhdGUgZG5vdGlmeSB0aHJlYWQiLCByYykpOworCQlnb3RvIG91dF9zdG9wX29wbG9ja190aHJlYWQ7CisJfQorCisJcmV0dXJuIDA7CisKKyBvdXRfc3RvcF9vcGxvY2tfdGhyZWFkOgorCWt0aHJlYWRfc3RvcChvcGxvY2tUaHJlYWQpOworIG91dF91bnJlZ2lzdGVyX2ZpbGVzeXN0ZW06CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZjaWZzX2ZzX3R5cGUpOworIG91dF9kZXN0cm95X3JlcXVlc3RfYnVmczoKKwljaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKCk7Cisgb3V0X2Rlc3Ryb3lfbWlkczoKKwljaWZzX2Rlc3Ryb3lfbWlkcygpOworIG91dF9kZXN0cm95X2lub2RlY2FjaGU6CisJY2lmc19kZXN0cm95X2lub2RlY2FjaGUoKTsKKyBvdXRfY2xlYW5fcHJvYzoKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWNpZnNfcHJvY19jbGVhbigpOwogI2VuZGlmCkBAIC0xMDI4LDE0ICsxMDMyLDggQEAKIAljaWZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOwogCWNpZnNfZGVzdHJveV9taWRzKCk7CiAJY2lmc19kZXN0cm95X3JlcXVlc3RfYnVmcygpOwotCWlmKG9wbG9ja1RocmVhZCkgewotCQlzZW5kX3NpZyhTSUdURVJNLCBvcGxvY2tUaHJlYWQsIDEpOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjaWZzX29wbG9ja19leGl0ZWQpOwotCX0KLQlpZihkbm90aWZ5VGhyZWFkKSB7Ci0JCXNlbmRfc2lnKFNJR1RFUk0sIGRub3RpZnlUaHJlYWQsIDEpOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjaWZzX2Rub3RpZnlfZXhpdGVkKTsKLQl9CisJa3RocmVhZF9zdG9wKG9wbG9ja1RocmVhZCk7CisJa3RocmVhZF9zdG9wKGRub3RpZnlUaHJlYWQpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJTdGV2ZSBGcmVuY2ggPHNmcmVuY2hAdXMuaWJtLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IDc0ZjQwNWEuLmM5ODc1NWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtOTksNSArOTksNSBAQAogZXh0ZXJuIHNzaXplX3QJY2lmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gaW50IGNpZnNfaW9jdGwgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGVwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNDAiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjQzIgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDdiZWQyNzYuLjAwNmViMzMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNnbG9iLmgKICAqCi0gKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwNQorICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDYKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqCiAgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00MzAsNiArNDMwLDE1IEBACiAjZGVmaW5lICAgQ0lGU19MQVJHRV9CVUZGRVIgICAgIDIKICNkZWZpbmUgICBDSUZTX0lPVkVDICAgICAgICAgICAgNCAgICAvKiBhcnJheSBvZiByZXNwb25zZSBidWZmZXJzICovCiAKKy8qIFR5cGUgb2Ygc2Vzc2lvbiBzZXR1cCBuZWVkZWQgKi8KKyNkZWZpbmUgICBDSUZTX1BMQUlOVEVYVAkwCisjZGVmaW5lICAgQ0lGU19MQU5NQU4JCTEKKyNkZWZpbmUgICBDSUZTX05UTE0JCTIKKyNkZWZpbmUgICBDSUZTX05UTE1TU1BfTkVHCTMKKyNkZWZpbmUgICBDSUZTX05UTE1TU1BfQVVUSAk0CisjZGVmaW5lICAgQ0lGU19TUE5FR09fSU5JVAk1CisjZGVmaW5lICAgQ0lGU19TUE5FR09fVEFSRwk2CisKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFsbCBjb25zdGFudHMgZ28gaGVyZQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBjYzI0NzEwLi5iMjIzM2FjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwZHUuaAorKysgYi9mcy9jaWZzL2NpZnNwZHUuaApAQCAtODU5LDcgKzg1OSwxMCBAQAogCUxPQ0tJTkdfQU5EWF9SQU5HRSBMb2Nrc1sxXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgTE9DS19SRVE7CiAKLQorLyogbG9jayB0eXBlICovCisjZGVmaW5lIENJRlNfUkRMQ0sJMAorI2RlZmluZSBDSUZTX1dSTENLCTEKKyNkZWZpbmUgQ0lGU19VTkxDSyAgICAgIDIKIHR5cGVkZWYgc3RydWN0IGNpZnNfcG9zaXhfbG9jayB7CiAJX19sZTE2ICBsb2NrX3R5cGU7ICAvKiAwID0gUmVhZCwgMSA9IFdyaXRlLCAyID0gVW5sb2NrICovCiAJX19sZTE2ICBsb2NrX2ZsYWdzOyAvKiAxID0gV2FpdCAob25seSB2YWxpZCBmb3Igc2V0bG9jaykgKi8KQEAgLTE3ODYsNyArMTc4OSwxMyBAQAogI2RlZmluZSBDSUZTX1VOSVhfUE9TSVhfQUNMX0NBUCAgICAgICAgIDB4MDAwMDAwMDIgLyogc3VwcG9ydCBnZXRmYWNsL3NldGZhY2wgKi8KICNkZWZpbmUgQ0lGU19VTklYX1hBVFRSX0NBUCAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIHN1cHBvcnQgbmV3IG5hbWVzcGFjZSAgICovCiAjZGVmaW5lIENJRlNfVU5JWF9FWFRBVFRSX0NBUCAgICAgICAgICAgMHgwMDAwMDAwOCAvKiBzdXBwb3J0IGNoYXR0ci9jaGZsYWcgICAqLwotI2RlZmluZSBDSUZTX1VOSVhfUE9TSVhfUEFUSE5BTUVTX0NBUCAgIDB4MDAwMDAwMTAgLyogVXNlIFBPU0lYIHBhdGhuYW1lcyBvbiB0aGUgd2lyZS4gKi8KKyNkZWZpbmUgQ0lGU19VTklYX1BPU0lYX1BBVEhOQU1FU19DQVAgICAweDAwMDAwMDEwIC8qIEFsbG93IFBPU0lYIHBhdGggY2hhcnMgICovCisjaWZkZWYgQ09ORklHX0NJRlNfUE9TSVgKKyNkZWZpbmUgQ0lGU19VTklYX0NBUF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDFiCisjZWxzZSAKKyNkZWZpbmUgQ0lGU19VTklYX0NBUF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi8KKwogCiAjZGVmaW5lIENJRlNfUE9TSVhfRVhURU5TSU9OUyAgICAgICAgICAgMHgwMDAwMDAxMCAvKiBzdXBwb3J0IGZvciBuZXcgUUZTSW5mbyAqLwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCA3YjI1NDYzLi4zMTBlYTJmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNwcm90by5oCiAgKgotICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDUKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA2CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNjQsNiArNjQsMTQgQEAKIGV4dGVybiB2b2lkIGhlYWRlcl9hc3NlbWJsZShzdHJ1Y3Qgc21iX2hkciAqLCBjaGFyIC8qIGNvbW1hbmQgKi8gLAogCQkJICAgIGNvbnN0IHN0cnVjdCBjaWZzVGNvbkluZm8gKiwgaW50IC8qIGxlbmd0aCBvZgogCQkJICAgIGZpeGVkIHNlY3Rpb24gKHdvcmQgY291bnQpIGluIHR3byBieXRlIHVuaXRzICovKTsKKyNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKK2V4dGVybiBpbnQgc21hbGxfc21iX2luaXRfbm9fdGMoY29uc3QgaW50IHNtYl9jbWQsIGNvbnN0IGludCB3Y3QsCisJCQkJc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCisJCQkJdm9pZCAqKiByZXF1ZXN0X2J1Zik7CitleHRlcm4gaW50IENJRlNfU2Vzc1NldHVwKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLAorCQkJICAgICBjb25zdCBpbnQgc3RhZ2UsIGludCAqIHBOVExNdjJfZmxnLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApOworI2VuZGlmCiBleHRlcm4gX191MTYgR2V0TmV4dE1pZChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpOwogZXh0ZXJuIHN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqIEFsbG9jT3Bsb2NrUUVudHJ5KHN0cnVjdCBpbm9kZSAqLCB1MTYsIAogCQkJCQkJIHN0cnVjdCBjaWZzVGNvbkluZm8gKik7CkBAIC0yNTcsNyArMjY1LDEwIEBACiAJCQljb25zdCBfX3U2NCBvZmZzZXQsIGNvbnN0IF9fdTMyIG51bVVubG9jaywKIAkJCWNvbnN0IF9fdTMyIG51bUxvY2ssIGNvbnN0IF9fdTggbG9ja1R5cGUsCiAJCQljb25zdCBpbnQgd2FpdEZsYWcpOwotCitleHRlcm4gaW50IENJRlNTTUJQb3NpeExvY2soY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKKwkJCWNvbnN0IF9fdTE2IHNtYl9maWxlX2lkLCBjb25zdCBpbnQgZ2V0X2ZsYWcsCisJCQljb25zdCBfX3U2NCBsZW4sIHN0cnVjdCBmaWxlX2xvY2sgKiwgCisJCQljb25zdCBfX3UxNiBsb2NrX3R5cGUsIGNvbnN0IGludCB3YWl0RmxhZyk7CiBleHRlcm4gaW50IENJRlNTTUJURGlzKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24pOwogZXh0ZXJuIGludCBDSUZTU01CTG9nb2ZmKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzKTsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzc21iLmMgYi9mcy9jaWZzL2NpZnNzbWIuYwppbmRleCBhMjQzZmUyLi45MjU4ODFlIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNzbWIuYworKysgYi9mcy9jaWZzL2NpZnNzbWIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvY2lmc3NtYi5jCiAgKgotICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDUKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA2CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBDb250YWlucyB0aGUgcm91dGluZXMgZm9yIGNvbnN0cnVjdGluZyB0aGUgU01CIFBEVXMgdGhlbXNlbHZlcwpAQCAtMTg2LDcgKzE4NiwzNSBAQAogICAgICAgICAgICAgICAgIGNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fc21ic19zZW50KTsKIAogCXJldHVybiByYzsKLX0gIAorfQorCisjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMICAKK2ludAorc21hbGxfc21iX2luaXRfbm9fdGMoY29uc3QgaW50IHNtYl9jb21tYW5kLCBjb25zdCBpbnQgd2N0LCAKKwkJICAgICBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywgdm9pZCAqKnJlcXVlc3RfYnVmKQoreworCWludCByYzsKKwlzdHJ1Y3Qgc21iX2hkciAqIGJ1ZmZlcjsKKworCXJjID0gc21hbGxfc21iX2luaXQoc21iX2NvbW1hbmQsIHdjdCwgTlVMTCwgcmVxdWVzdF9idWYpOworCWlmKHJjKQorCQlyZXR1cm4gcmM7CisKKwlidWZmZXIgPSAoc3RydWN0IHNtYl9oZHIgKikqcmVxdWVzdF9idWY7CisJYnVmZmVyLT5NaWQgPSBHZXROZXh0TWlkKHNlcy0+c2VydmVyKTsKKwlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JQ09ERSkKKwkJYnVmZmVyLT5GbGFnczIgfD0gU01CRkxHMl9VTklDT0RFOworCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9TVEFUVVMzMikKKwkJYnVmZmVyLT5GbGFnczIgfD0gU01CRkxHMl9FUlJfU1RBVFVTOworCisJLyogdWlkLCB0aWQgY2FuIHN0YXkgYXQgemVybyBhcyBzZXQgaW4gaGVhZGVyIGFzc2VtYmxlICovCisKKwkvKiBCQiBhZGQgc3VwcG9ydCBmb3IgdHVybmluZyBvbiB0aGUgc2lnbmluZyB3aGVuIAorCXRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhZnRlciAxc3Qgb2Ygc2Vzc2lvbiBzZXR1cCByZXF1ZXN0cyAqLworCisJcmV0dXJuIHJjOworfQorI2VuZGlmICAvKiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgKi8KIAogLyogSWYgdGhlIHJldHVybiBjb2RlIGlzIHplcm8sIHRoaXMgZnVuY3Rpb24gbXVzdCBmaWxsIGluIHJlcXVlc3RfYnVmIHBvaW50ZXIgKi8KIHN0YXRpYyBpbnQKQEAgLTEwNDIsNyArMTA3MCw3IEBACiAJCX0KIAl9CiAKLQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHBTTUIpOworLyoJY2lmc19zbWFsbF9idWZfcmVsZWFzZShwU01CKTsgKi8gLyogRnJlZWQgZWFybGllciBub3cgaW4gU2VuZFJlY2VpdmUyICovCiAJaWYoKmJ1ZikgewogCQlpZihyZXNwX2J1Zl90eXBlID09IENJRlNfU01BTExfQlVGRkVSKQogCQkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpb3ZbMF0uaW92X2Jhc2UpOwpAQCAtMTI0Niw3ICsxMjc0LDcgQEAKIAkJKm5ieXRlcyArPSBsZTE2X3RvX2NwdShwU01Cci0+Q291bnQpOwogCX0gCiAKLQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHBTTUIpOworLyoJY2lmc19zbWFsbF9idWZfcmVsZWFzZShwU01CKTsgKi8gLyogRnJlZWQgZWFybGllciBub3cgaW4gU2VuZFJlY2VpdmUyICovCiAJaWYocmVzcF9idWZfdHlwZSA9PSBDSUZTX1NNQUxMX0JVRkZFUikKIAkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpb3ZbMF0uaW92X2Jhc2UpOwogCWVsc2UgaWYocmVzcF9idWZfdHlwZSA9PSBDSUZTX0xBUkdFX0JVRkZFUikKQEAgLTEzMjUsNiArMTM1MywxMTUgQEAKIH0KIAogaW50CitDSUZTU01CUG9zaXhMb2NrKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCisJCWNvbnN0IF9fdTE2IHNtYl9maWxlX2lkLCBjb25zdCBpbnQgZ2V0X2ZsYWcsIGNvbnN0IF9fdTY0IGxlbiwKKwkJc3RydWN0IGZpbGVfbG9jayAqcExvY2tEYXRhLCBjb25zdCBfX3UxNiBsb2NrX3R5cGUsIAorCQljb25zdCBpbnQgd2FpdEZsYWcpCit7CisJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NmaV9yZXEgKnBTTUIgID0gTlVMTDsKKwlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JzcCAqcFNNQnIgPSBOVUxMOworCWNoYXIgKmRhdGFfb2Zmc2V0OworCXN0cnVjdCBjaWZzX3Bvc2l4X2xvY2sgKnBhcm1fZGF0YTsKKwlpbnQgcmMgPSAwOworCWludCBieXRlc19yZXR1cm5lZCA9IDA7CisJX191MTYgcGFyYW1zLCBwYXJhbV9vZmZzZXQsIG9mZnNldCwgYnl0ZV9jb3VudCwgY291bnQ7CisKKwljRllJKDEsICgiUG9zaXggTG9jayIpKTsKKworCWlmKHBMb2NrRGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gRUlOVkFMOworCisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQik7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXBTTUJyID0gKHN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uMl9zZmlfcnNwICopcFNNQjsKKworCXBhcmFtcyA9IDY7IAorCXBTTUItPk1heFNldHVwQ291bnQgPSAwOworCXBTTUItPlJlc2VydmVkID0gMDsKKwlwU01CLT5GbGFncyA9IDA7CisJcFNNQi0+VGltZW91dCA9IDA7CisJcFNNQi0+UmVzZXJ2ZWQyID0gMDsKKwlwYXJhbV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSwgRmlkKSAtIDQ7CisJb2Zmc2V0ID0gcGFyYW1fb2Zmc2V0ICsgcGFyYW1zOworCisJZGF0YV9vZmZzZXQgPSAoY2hhciAqKSAoJnBTTUItPmhkci5Qcm90b2NvbCkgKyBvZmZzZXQ7CisKKwljb3VudCA9IHNpemVvZihzdHJ1Y3QgY2lmc19wb3NpeF9sb2NrKTsKKwlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOworCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDEwMDApOyAvKiBCQiBmaW5kIG1heCBTTUIgUERVIGZyb20gc2VzcyAqLworCXBTTUItPlNldHVwQ291bnQgPSAxOworCXBTTUItPlJlc2VydmVkMyA9IDA7CisJaWYoZ2V0X2ZsYWcpCisJCXBTTUItPlN1YkNvbW1hbmQgPSBjcHVfdG9fbGUxNihUUkFOUzJfUVVFUllfRklMRV9JTkZPUk1BVElPTik7CisJZWxzZQorCQlwU01CLT5TdWJDb21tYW5kID0gY3B1X3RvX2xlMTYoVFJBTlMyX1NFVF9GSUxFX0lORk9STUFUSU9OKTsKKwlieXRlX2NvdW50ID0gMyAvKiBwYWQgKi8gICsgcGFyYW1zICsgY291bnQ7CisJcFNNQi0+RGF0YUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOworCXBTTUItPlBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKKwlwU01CLT5Ub3RhbERhdGFDb3VudCA9IHBTTUItPkRhdGFDb3VudDsKKwlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gcFNNQi0+UGFyYW1ldGVyQ291bnQ7CisJcFNNQi0+UGFyYW1ldGVyT2Zmc2V0ID0gY3B1X3RvX2xlMTYocGFyYW1fb2Zmc2V0KTsKKwlwYXJtX2RhdGEgPSAoc3RydWN0IGNpZnNfcG9zaXhfbG9jayAqKSAKKwkJCSgoKGNoYXIgKikgJnBTTUItPmhkci5Qcm90b2NvbCkgKyBvZmZzZXQpOworCisJcGFybV9kYXRhLT5sb2NrX3R5cGUgPSBjcHVfdG9fbGUxNihsb2NrX3R5cGUpOworCWlmKHdhaXRGbGFnKQorCQlwYXJtX2RhdGEtPmxvY2tfZmxhZ3MgPSBjcHVfdG9fbGUxNigxKTsKKwlwYXJtX2RhdGEtPnBpZCA9IGNwdV90b19sZTMyKGN1cnJlbnQtPnRnaWQpOworCXBhcm1fZGF0YS0+c3RhcnQgPSBjcHVfdG9fbGU2NChwTG9ja0RhdGEtPmZsX3N0YXJ0KTsKKwlwYXJtX2RhdGEtPmxlbmd0aCA9IGNwdV90b19sZTY0KGxlbik7ICAvKiBub3JtYWxpemUgbmVnYXRpdmUgbnVtYmVycyAqLworCisJcFNNQi0+RGF0YU9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldCk7CisJcFNNQi0+RmlkID0gc21iX2ZpbGVfaWQ7CisJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9TRVRfUE9TSVhfTE9DSyk7CisJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKKwlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKKwlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKKwkJCShzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAoIlNlbmQgZXJyb3IgaW4gUG9zaXggTG9jayA9ICVkIiwgcmMpKTsKKwl9IGVsc2UgaWYgKGdldF9mbGFnKSB7CisJCS8qIGxvY2sgc3RydWN0dXJlIGNhbiBiZSByZXR1cm5lZCBvbiBnZXQgKi8KKwkJX191MTYgZGF0YV9vZmZzZXQ7CisJCV9fdTE2IGRhdGFfY291bnQ7CisJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOworCisJCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IHNpemVvZihzdHJ1Y3QgY2lmc19wb3NpeF9sb2NrKSkpIHsKKwkJCXJjID0gLUVJTzsgICAgICAvKiBiYWQgc21iICovCisJCQlnb3RvIHBsa19lcnJfZXhpdDsKKwkJfQorCQlpZihwTG9ja0RhdGEgPT0gTlVMTCkgeworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBwbGtfZXJyX2V4aXQ7CisJCX0KKwkJZGF0YV9vZmZzZXQgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7CisJCWRhdGFfY291bnQgID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFDb3VudCk7CisJCWlmKGRhdGFfY291bnQgPCBzaXplb2Yoc3RydWN0IGNpZnNfcG9zaXhfbG9jaykpIHsKKwkJCXJjID0gLUVJTzsKKwkJCWdvdG8gcGxrX2Vycl9leGl0OworCQl9CisJCXBhcm1fZGF0YSA9IChzdHJ1Y3QgY2lmc19wb3NpeF9sb2NrICopCisJCQkoKGNoYXIgKikmcFNNQnItPmhkci5Qcm90b2NvbCArIGRhdGFfb2Zmc2V0KTsKKwkJaWYocGFybV9kYXRhLT5sb2NrX3R5cGUgPT0gY3B1X3RvX2xlMTYoQ0lGU19VTkxDSykpCisJCQlwTG9ja0RhdGEtPmZsX3R5cGUgPSBGX1VOTENLOworCX0KKyAKK3Bsa19lcnJfZXhpdDoKKwlpZiAocFNNQikKKwkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShwU01CKTsKKworCS8qIE5vdGU6IE9uIC1FQUdBSU4gZXJyb3Igb25seSBjYWxsZXIgY2FuIHJldHJ5IG9uIGhhbmRsZSBiYXNlZCBjYWxscworCSAgIHNpbmNlIGZpbGUgaGFuZGxlIHBhc3NlZCBpbiBubyBsb25nZXIgdmFsaWQgKi8KKworCXJldHVybiByYzsKK30KKworCitpbnQKIENJRlNTTUJDbG9zZShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBpbnQgc21iX2ZpbGVfaWQpCiB7CiAJaW50IHJjID0gMDsKQEAgLTI1NzgsNyArMjcxNSw3IEBACiAJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW92WzBdLmlvdl9iYXNlKTsKIAllbHNlIGlmKGJ1Zl90eXBlID09IENJRlNfTEFSR0VfQlVGRkVSKQogCQljaWZzX2J1Zl9yZWxlYXNlKGlvdlswXS5pb3ZfYmFzZSk7Ci0JY2lmc19zbWFsbF9idWZfcmVsZWFzZShwU01CKTsKKy8qCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UocFNNQik7ICovIC8qIEZyZWVkIGVhcmxpZXIgbm93IGluIFNlbmRSZWNlaXZlMiAqLwogCXJldHVybiByYzsKIH0KIApAQCAtMjk1NCw3ICszMDkxLDggQEAKIAlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKIAlwU01CLT5QYXJhbWV0ZXJDb3VudCA9IHBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQ7CiAJcFNNQi0+UGFyYW1ldGVyT2Zmc2V0ID0gY3B1X3RvX2xlMTYoCi0JICBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfZmZpcnN0X3JlcSwgU2VhcmNoQXR0cmlidXRlcykgLSA0KTsKKwkgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfZmZpcnN0X3JlcSwgU2VhcmNoQXR0cmlidXRlcykKKwkJLSA0KTsKIAlwU01CLT5EYXRhQ291bnQgPSAwOwogCXBTTUItPkRhdGFPZmZzZXQgPSAwOwogCXBTTUItPlNldHVwQ291bnQgPSAxOwkvKiBvbmUgYnl0ZSwgbm8gbmVlZCB0byBtYWtlIGVuZGlhbiBuZXV0cmFsICovCkBAIC0yOTc3LDEyICszMTE1LDEyIEBACiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fZmZpcnN0KTsKIAotCWlmIChyYykgey8qIEJCIGFkZCBsb2dpYyB0byByZXRyeSByZWd1bGFyIHNlYXJjaCBpZiBVbml4IHNlYXJjaCByZWplY3RlZCB1bmV4cGVjdGVkbHkgYnkgc2VydmVyICovCisJaWYgKHJjKSB7LyogQkIgYWRkIGxvZ2ljIHRvIHJldHJ5IHJlZ3VsYXIgc2VhcmNoIGlmIFVuaXggc2VhcmNoCisJCQlyZWplY3RlZCB1bmV4cGVjdGVkbHkgYnkgc2VydmVyICovCiAJCS8qIEJCIEFkZCBjb2RlIHRvIGhhbmRsZSB1bnN1cHBvcnRlZCBsZXZlbCByYyAqLwogCQljRllJKDEsICgiRXJyb3IgaW4gRmluZEZpcnN0ID0gJWQiLCByYykpOwogCi0JCWlmIChwU01CKQotCQkJY2lmc19idWZfcmVsZWFzZShwU01CKTsKKwkJY2lmc19idWZfcmVsZWFzZShwU01CKTsKIAogCQkvKiBCQiBldmVudHVhbGx5IGNvdWxkIG9wdGltaXplIG91dCBmcmVlIGFuZCByZWFsbG9jIG9mIGJ1ZiAqLwogCQkvKiAgICBmb3IgdGhpcyBjYXNlICovCkBAIC0yOTk4LDYgKzMxMzYsNyBAQAogCQkJCXBzcmNoX2luZi0+dW5pY29kZSA9IEZBTFNFOwogCiAJCQlwc3JjaF9pbmYtPm50d3JrX2J1Zl9zdGFydCA9IChjaGFyICopcFNNQnI7CisJCQlwc3JjaF9pbmYtPnNtYWxsQnVmID0gMDsKIAkJCXBzcmNoX2luZi0+c3JjaF9lbnRyaWVzX3N0YXJ0ID0gCiAJCQkJKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wgKyAKIAkJCQkJbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwpAQCAtMzAxMCw3ICszMTQ5LDcgQEAKIAkJCQlwc3JjaF9pbmYtPmVuZE9mU2VhcmNoID0gRkFMU0U7CiAKIAkJCXBzcmNoX2luZi0+ZW50cmllc19pbl9idWZmZXIgID0gbGUxNl90b19jcHUocGFybXMtPlNlYXJjaENvdW50KTsKLQkJCXBzcmNoX2luZi0+aW5kZXhfb2ZfbGFzdF9lbnRyeSA9IAorCQkJcHNyY2hfaW5mLT5pbmRleF9vZl9sYXN0X2VudHJ5ID0gMiAvKiBza2lwIC4gYW5kIC4uICovICsKIAkJCQlwc3JjaF9pbmYtPmVudHJpZXNfaW5fYnVmZmVyOwogCQkJKnBuZXRmaWQgPSBwYXJtcy0+U2VhcmNoSGFuZGxlOwogCQl9IGVsc2UgewpAQCAtMzExOCw5ICszMjU3LDE0IEBACiAJCQlwYXJtcyA9IChUMl9GTkVYVF9SU1BfUEFSTVMgKilyZXNwb25zZV9kYXRhOwogCQkJcmVzcG9uc2VfZGF0YSA9IChjaGFyICopJnBTTUJyLT5oZHIuUHJvdG9jb2wgKwogCQkJCWxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKLQkJCWNpZnNfYnVmX3JlbGVhc2UocHNyY2hfaW5mLT5udHdya19idWZfc3RhcnQpOworCQkJaWYocHNyY2hfaW5mLT5zbWFsbEJ1ZikKKwkJCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKAorCQkJCQlwc3JjaF9pbmYtPm50d3JrX2J1Zl9zdGFydCk7CisJCQllbHNlCisJCQkJY2lmc19idWZfcmVsZWFzZShwc3JjaF9pbmYtPm50d3JrX2J1Zl9zdGFydCk7CiAJCQlwc3JjaF9pbmYtPnNyY2hfZW50cmllc19zdGFydCA9IHJlc3BvbnNlX2RhdGE7CiAJCQlwc3JjaF9pbmYtPm50d3JrX2J1Zl9zdGFydCA9IChjaGFyICopcFNNQjsKKwkJCXBzcmNoX2luZi0+c21hbGxCdWYgPSAwOwogCQkJaWYocGFybXMtPkVuZG9mU2VhcmNoKQogCQkJCXBzcmNoX2luZi0+ZW5kT2ZTZWFyY2ggPSBUUlVFOwogCQkJZWxzZQpAQCAtMzgzNCw2ICszOTc4LDcgQEAKIAogCWNGWUkoMSwgKCJJbiBTRVRGU1VuaXhJbmZvIikpOwogU0VURlNVbml4UmV0cnk6CisJLyogQkIgc3dpdGNoIHRvIHNtYWxsIGJ1ZiBpbml0IHRvIHNhdmUgbWVtb3J5ICovCiAJcmMgPSBzbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQiwKIAkJICAgICAgKHZvaWQgKiopICZwU01Ccik7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAyYTBjMWY0Li5iYWUxNDc5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvY29ubmVjdC5jCiAgKgotICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDUKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA2CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTY0LDcgKzU2NCw3IEBACiAJCiAKIAkJZHVtcF9zbWIoc21iX2J1ZmZlciwgbGVuZ3RoKTsKLQkJaWYgKGNoZWNrU01CIChzbWJfYnVmZmVyLCBzbWJfYnVmZmVyLT5NaWQsIHRvdGFsX3JlYWQrNCkpIHsKKwkJaWYgKGNoZWNrU01CKHNtYl9idWZmZXIsIHNtYl9idWZmZXItPk1pZCwgdG90YWxfcmVhZCs0KSkgewogCQkJY2lmc19kdW1wX21lbSgiQmFkIFNNQjogIiwgc21iX2J1ZmZlciwgNDgpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTE0NzYsNiArMTQ3NiwxNCBAQAogCQkJcmMgPSBzbWJfc2VuZCgqY3NvY2tldCwgc21iX2J1ZiwgMHg0NCwKIAkJCQkoc3RydWN0IHNvY2thZGRyICopcHNpbl9zZXJ2ZXIpOwogCQkJa2ZyZWUoc2VzX2luaXRfYnVmKTsKKwkJCW1zbGVlcCgxKTsgLyogUkZDMTAwMSBsYXllciBpbiBhdCBsZWFzdCBvbmUgc2VydmVyIAorCQkJCSAgICAgIHJlcXVpcmVzIHZlcnkgc2hvcnQgYnJlYWsgYmVmb3JlIG5lZ3Byb3QKKwkJCQkgICAgICBwcmVzdW1hYmx5IGJlY2F1c2Ugbm90IGV4cGVjdGluZyBuZWdwcm90CisJCQkJICAgICAgdG8gZm9sbG93IHNvIGZhc3QuICBUaGlzIGlzIGEgc2ltcGxlCisJCQkJICAgICAgc29sdXRpb24gdGhhdCB3b3JrcyB3aXRob3V0IAorCQkJCSAgICAgIGNvbXBsaWNhdGluZyB0aGUgY29kZSBhbmQgY2F1c2VzIG5vCisJCQkJICAgICAgc2lnbmlmaWNhbnQgc2xvd2luZyBkb3duIG9uIG1vdW50CisJCQkJICAgICAgZm9yIGV2ZXJ5b25lIGVsc2UgKi8KIAkJfQogCQkvKiBlbHNlIHRoZSBuZWdwcm90IG1heSBzdGlsbCB3b3JrIHdpdGhvdXQgdGhpcyAKIAkJZXZlbiB0aG91Z2ggbWFsbG9jIGZhaWxlZCAqLwpAQCAtMTkyMCwyNyArMTkyOCwzNCBAQAogCQljaWZzX3NiLT50Y29uID0gdGNvbjsKIAkJdGNvbi0+c2VzID0gcFNlc0luZm87CiAKLQkJLyogZG8gbm90IGNhcmUgaWYgZm9sbG93aW5nIHR3byBjYWxscyBzdWNjZWVkIC0gaW5mb3JtYXRpb25hbCBvbmx5ICovCisJCS8qIGRvIG5vdCBjYXJlIGlmIGZvbGxvd2luZyB0d28gY2FsbHMgc3VjY2VlZCAtIGluZm9ybWF0aW9uYWwgKi8KIAkJQ0lGU1NNQlFGU0RldmljZUluZm8oeGlkLCB0Y29uKTsKIAkJQ0lGU1NNQlFGU0F0dHJpYnV0ZUluZm8oeGlkLCB0Y29uKTsKKwogCQlpZiAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgewogCQkJaWYoIUNJRlNTTUJRRlNVbml4SW5mbyh4aWQsIHRjb24pKSB7Ci0JCQkJaWYoIXZvbHVtZV9pbmZvLm5vX3BzeF9hY2wpIHsKLQkJCQkJaWYoQ0lGU19VTklYX1BPU0lYX0FDTF9DQVAgJiAKLQkJCQkJICAgbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkKLQkJCQkJCWNGWUkoMSwoInNlcnZlciBuZWdvdGlhdGVkIHBvc2l4IGFjbCBzdXBwb3J0IikpOwotCQkJCQkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisJCQkJX191NjQgY2FwID0gCisJCQkJICAgICAgIGxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSk7CisJCQkJY2FwICY9IENJRlNfVU5JWF9DQVBfTUFTSzsKKwkJCQlpZih2b2x1bWVfaW5mby5ub19wc3hfYWNsKQorCQkJCQljYXAgJj0gfkNJRlNfVU5JWF9QT1NJWF9BQ0xfQ0FQOworCQkJCWVsc2UgaWYoQ0lGU19VTklYX1BPU0lYX0FDTF9DQVAgJiBjYXApIHsKKwkJCQkJY0ZZSSgxLCgibmVnb3RpYXRlZCBwb3NpeCBhY2wgc3VwcG9ydCIpKTsKKwkJCQkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CiAJCQkJfQogCi0JCQkJLyogVHJ5IGFuZCBuZWdvdGlhdGUgUE9TSVggcGF0aG5hbWVzIGlmIHdlIGNhbi4gKi8KLQkJCQlpZiAodm9sdW1lX2luZm8ucG9zaXhfcGF0aHMgJiYgKENJRlNfVU5JWF9QT1NJWF9QQVRITkFNRVNfQ0FQICYKLQkJCQkgICAgbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKLQkJCQkJaWYgKCFDSUZTU01CU2V0RlNVbml4SW5mbyh4aWQsIHRjb24sIENJRlNfVU5JWF9QT1NJWF9QQVRITkFNRVNfQ0FQKSkgIHsKLQkJCQkJCWNGWUkoMSwoIm5lZ290aWF0ZWQgcG9zaXggcGF0aG5hbWVzIHN1cHBvcnQiKSk7Ci0JCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX1BPU0lYX1BBVEhTOwotCQkJCQl9IGVsc2UgewotCQkJCQkJY0ZZSSgxLCgicG9zaXggcGF0aG5hbWVzIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBub3Qgc3VwcG9ydGVkIikpOwotCQkJCQl9CisJCQkJaWYodm9sdW1lX2luZm8ucG9zaXhfcGF0aHMgPT0gMCkKKwkJCQkJY2FwICY9IH5DSUZTX1VOSVhfUE9TSVhfUEFUSE5BTUVTX0NBUDsKKwkJCQllbHNlIGlmKGNhcCAmIENJRlNfVU5JWF9QT1NJWF9QQVRITkFNRVNfQ0FQKSB7CisJCQkJCWNGWUkoMSwoIm5lZ290aWF0ZSBwb3NpeCBwYXRobmFtZXMiKSk7CisJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IAorCQkJCQkJQ0lGU19NT1VOVF9QT1NJWF9QQVRIUzsKKwkJCQl9CisJCQkJCQorCQkJCWNGWUkoMSwoIk5lZ290aWF0ZSBjYXBzIDB4JXgiLChpbnQpY2FwKSk7CisKKwkJCQlpZiAoQ0lGU1NNQlNldEZTVW5peEluZm8oeGlkLCB0Y29uLCBjYXApKSB7CisJCQkJCWNGWUkoMSwoInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZCIpKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTIxMzMsNiArMjE0OCw4IEBACiAvKiBXZSBsb29rIGZvciBvYnZpb3VzIG1lc3NlZCB1cCBiY2Mgb3Igc3RyaW5ncyBpbiByZXNwb25zZSBzbyB3ZSBkbyBub3QgZ28gb2ZmCiAgICB0aGUgZW5kIHNpbmNlIChhdCBsZWFzdCkgV0lOMksgYW5kIFdpbmRvd3MgWFAgaGF2ZSBhIG1ham9yIGJ1ZyBpbiBub3QgbnVsbAogICAgdGVybWluYXRpbmcgbGFzdCBVbmljb2RlIHN0cmluZyBpbiByZXNwb25zZSAgKi8KKwkJCQlpZihzZXMtPnNlcnZlck9TKQorCQkJCQlrZnJlZShzZXMtPnNlcnZlck9TKTsKIAkJCQlzZXMtPnNlcnZlck9TID0ga3phbGxvYygyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKIAkJCQlpZihzZXMtPnNlcnZlck9TID09IE5VTEwpCiAJCQkJCWdvdG8gc2Vzc3NldHVwX25vbWVtOwpAQCAtMjE0NSw2ICsyMTYyLDggQEAKIAkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQlsZW4gPSBVbmlTdHJubGVuKCh3Y2hhcl90ICopYmNjX3B0ciwKIAkJCQkJCQkgcmVtYWluaW5nX3dvcmRzLTEpOworCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKDIgKiAobGVuICsgMSksR0ZQX0tFUk5FTCk7CiAJCQkJCWlmKHNlcy0+c2VydmVyTk9TID09IE5VTEwpCiAJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTIxNjIsNiArMjE4MSw4IEBACiAJCQkJCWlmIChyZW1haW5pbmdfd29yZHMgPiAwKSB7CiAJCQkJCQlsZW4gPSBVbmlTdHJubGVuKCh3Y2hhcl90ICopIGJjY19wdHIsIHJlbWFpbmluZ193b3Jkcyk7CiAgICAgICAgICAgLyogbGFzdCBzdHJpbmcgaXMgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQgKGZvciBlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJCSAgICBremFsbG9jKDIqKGxlbisxKSxHRlBfS0VSTkVMKTsKIAkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluID09IE5VTEwpCkBAIC0yMTcyLDE1ICsyMTkzLDIyIEBACiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpblsyKmxlbl0gPSAwOwogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW5bMSsoMipsZW4pXSA9IDA7CiAJCQkJCX0gLyogZWxzZSBubyBtb3JlIHJvb20gc28gY3JlYXRlIGR1bW15IGRvbWFpbiBzdHJpbmcgKi8KLQkJCQkJZWxzZQorCQkJCQllbHNlIHsKKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0gCiAJCQkJCQkJa3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJfQogCQkJCX0gZWxzZSB7CS8qIG5vIHJvb20gc28gY3JlYXRlIGR1bW15IGRvbWFpbiBhbmQgTk9TIHN0cmluZyAqLwogCQkJCQkvKiBpZiB0aGVzZSBrY2FsbG9jcyBmYWlsIG5vdCBtdWNoIHdlCiAJCQkJCSAgIGNhbiBkbywgYnV0IGJldHRlciB0byBub3QgZmFpbCB0aGUKIAkJCQkJICAgc2Vzc3NldHVwIGl0c2VsZiAqLworCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPQogCQkJCQkgICAga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJICAgIGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CiAJCQkJfQpAQCAtMjE4OSw2ICsyMjE3LDggQEAKIAkJCQlpZiAoKChsb25nKSBiY2NfcHRyICsgbGVuKSAtIChsb25nKQogCQkJCSAgICBwQnl0ZUFyZWEoc21iX2J1ZmZlcl9yZXNwb25zZSkKIAkJCQkJICAgIDw9IEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKSkgeworCQkJCQlpZihzZXMtPnNlcnZlck9TKQorCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJCXNlcy0+c2VydmVyT1MgPSBremFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CiAJCQkJCWlmKHNlcy0+c2VydmVyT1MgPT0gTlVMTCkKIAkJCQkJCWdvdG8gc2Vzc3NldHVwX25vbWVtOwpAQCAtMjE5OSw2ICsyMjI5LDggQEAKIAkJCQkJYmNjX3B0cisrOwogCiAJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7CisJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQlzZXMtPnNlcnZlck5PUyA9IGt6YWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKIAkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MgPT0gTlVMTCkKIAkJCQkJCWdvdG8gc2Vzc3NldHVwX25vbWVtOwpAQCAtMjIwOCw2ICsyMjQwLDggQEAKIAkJCQkJYmNjX3B0cisrOwogCiAJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7CisJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGt6YWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKIAkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4gPT0gTlVMTCkKIAkJCQkJCWdvdG8gc2Vzc3NldHVwX25vbWVtOwpAQCAtMjI3OCw2ICsyMzEyLDggQEAKIAlzbWJfYnVmZmVyLT5NaWQgPSBHZXROZXh0TWlkKHNlcy0+c2VydmVyKTsKIAlwU01CLT5yZXEuaGRyLkZsYWdzMiB8PSBTTUJGTEcyX0VYVF9TRUM7CiAJcFNNQi0+cmVxLkFuZFhDb21tYW5kID0gMHhGRjsKKwlpZihzZXMtPnNlcnZlci0+bWF4QnVmID4gNjQqMTAyNCkKKwkJc2VzLT5zZXJ2ZXItPm1heEJ1ZiA9ICg2NCoxMDIzKTsKIAlwU01CLT5yZXEuTWF4QnVmZmVyU2l6ZSA9IGNwdV90b19sZTE2KHNlcy0+c2VydmVyLT5tYXhCdWYpOwogCXBTTUItPnJlcS5NYXhNcHhDb3VudCA9IGNwdV90b19sZTE2KHNlcy0+c2VydmVyLT5tYXhSZXEpOwogCkBAIC0yNDEwLDYgKzI0NDYsOCBAQAogLyogV2UgbG9vayBmb3Igb2J2aW91cyBtZXNzZWQgdXAgYmNjIG9yIHN0cmluZ3MgaW4gcmVzcG9uc2Ugc28gd2UgZG8gbm90IGdvIG9mZgogICAgdGhlIGVuZCBzaW5jZSAoYXQgbGVhc3QpIFdJTjJLIGFuZCBXaW5kb3dzIFhQIGhhdmUgYSBtYWpvciBidWcgaW4gbm90IG51bGwKICAgIHRlcm1pbmF0aW5nIGxhc3QgVW5pY29kZSBzdHJpbmcgaW4gcmVzcG9uc2UgICovCisJCQkJCWlmKHNlcy0+c2VydmVyT1MpCisJCQkJCQlrZnJlZShzZXMtPnNlcnZlck9TKTsKIAkJCQkJc2VzLT5zZXJ2ZXJPUyA9CiAJCQkJCSAgICBremFsbG9jKDIgKiAobGVuICsgMSksIEdGUF9LRVJORUwpOwogCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT5zZXJ2ZXJPUywKQEAgLTI0MjQsNiArMjQ2Miw4IEBACiAJCQkJCQlsZW4gPSBVbmlTdHJubGVuKCh3Y2hhcl90ICopYmNjX3B0ciwKIAkJCQkJCQkJIHJlbWFpbmluZ193b3JkcwogCQkJCQkJCQkgLSAxKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJCSAgICBremFsbG9jKDIgKiAobGVuICsgMSksCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMjQzNyw3ICsyNDc3LDkgQEAKIAkJCQkJCXJlbWFpbmluZ193b3JkcyAtPSBsZW4gKyAxOwogCQkJCQkJaWYgKHJlbWFpbmluZ193b3JkcyA+IDApIHsKIAkJCQkJCQlsZW4gPSBVbmlTdHJubGVuKCh3Y2hhcl90ICopIGJjY19wdHIsIHJlbWFpbmluZ193b3Jkcyk7CQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxhc3Qgc3RyaW5nIGlzIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkIChmb3IgZS5nLiBmb3IgV2luZG93cyBYUCAmIDIwMDApICovCisgICAgICAgICAgICAgICAgICAgICAvKiBsYXN0IHN0cmluZyBub3QgbnVsbCB0ZXJtaW5hdGVkIChlLmcuV2luZG93cyBYUC8yMDAwKSAqLworCQkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBremFsbG9jKDIqKGxlbisxKSxHRlBfS0VSTkVMKTsKIAkJCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT5zZXJ2ZXJEb21haW4sCiAJCQkJCQkJICAgICAoX19sZTE2ICopYmNjX3B0ciwgCkBAIC0yNDQ2LDExICsyNDg4LDE4IEBACiAJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW5bMipsZW5dID0gMDsKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpblsxKygyKmxlbildID0gMDsKIAkJCQkJCX0gLyogZWxzZSBubyBtb3JlIHJvb20gc28gY3JlYXRlIGR1bW15IGRvbWFpbiBzdHJpbmcgKi8KLQkJCQkJCWVsc2UKKwkJCQkJCWVsc2UgeworCQkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPQogCQkJCQkJCSAgICBremFsbG9jKDIsR0ZQX0tFUk5FTCk7Ci0JCQkJCX0gZWxzZSB7CS8qIG5vIHJvb20gc28gY3JlYXRlIGR1bW15IGRvbWFpbiBhbmQgTk9TIHN0cmluZyAqLworCQkJCQkJfQorCQkJCQl9IGVsc2Ugey8qIG5vIHJvb20gdXNlIGR1bW15IGRvbWFpbiZOT1MgKi8KKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7CS8qIEFTQ0lJICovCkBAIC0yNDU5LDYgKzI1MDgsOCBAQAogCQkJCQlpZiAoKChsb25nKSBiY2NfcHRyICsgbGVuKSAtIChsb25nKQogCQkJCQkgICAgcEJ5dGVBcmVhKHNtYl9idWZmZXJfcmVzcG9uc2UpCiAJCQkJCSAgICA8PSBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKKwkJCQkJCWlmKHNlcy0+c2VydmVyT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJCQlzZXMtPnNlcnZlck9TID0ga3phbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAkJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJPUywgYmNjX3B0ciwgbGVuKTsKIApAQCAtMjQ2Nyw2ICsyNTE4LDggQEAKIAkJCQkJCWJjY19wdHIrKzsKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0ga3phbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck5PUywgYmNjX3B0ciwgbGVuKTsKIAkJCQkJCWJjY19wdHIgKz0gbGVuOwpAQCAtMjQ3NCw2ICsyNTI3LDggQEAKIAkJCQkJCWJjY19wdHIrKzsKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0ga3phbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAkJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJEb21haW4sIGJjY19wdHIsIGxlbik7CiAJCQkJCQliY2NfcHRyICs9IGxlbjsKQEAgLTI1MjUsNyArMjU4MCw3IEBACiAJX191MzIgbmVnb3RpYXRlX2ZsYWdzLCBjYXBhYmlsaXRpZXM7CiAJX191MTYgY291bnQ7CiAKLQljRllJKDEsICgiSW4gTlRMTVNTUCBzZXNzc2V0dXAgKG5lZ290aWF0ZSkgIikpOworCWNGWUkoMSwgKCJJbiBOVExNU1NQIHNlc3NzZXR1cCAobmVnb3RpYXRlKSIpKTsKIAlpZihzZXMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZG9tYWluID0gc2VzLT5kb21haW5OYW1lOwpAQCAtMjU3NSw3ICsyNjMwLDggQEAKIAlTZWN1cml0eUJsb2ItPk1lc3NhZ2VUeXBlID0gTnRMbU5lZ290aWF0ZTsKIAluZWdvdGlhdGVfZmxhZ3MgPQogCSAgICBOVExNU1NQX05FR09USUFURV9VTklDT0RFIHwgTlRMTVNTUF9ORUdPVElBVEVfT0VNIHwKLQkgICAgTlRMTVNTUF9SRVFVRVNUX1RBUkdFVCB8IE5UTE1TU1BfTkVHT1RJQVRFX05UTE0gfCAweDgwMDAwMDAwIHwKKwkgICAgTlRMTVNTUF9SRVFVRVNUX1RBUkdFVCB8IE5UTE1TU1BfTkVHT1RJQVRFX05UTE0gfAorCSAgICBOVExNU1NQX05FR09USUFURV81NiB8CiAJICAgIC8qIE5UTE1TU1BfTkVHT1RJQVRFX0FMV0FZU19TSUdOIHwgKi8gTlRMTVNTUF9ORUdPVElBVEVfMTI4OwogCWlmKHNpZ25fQ0lGU19QRFVzKQogCQluZWdvdGlhdGVfZmxhZ3MgfD0gTlRMTVNTUF9ORUdPVElBVEVfU0lHTjsKQEAgLTI1ODgsMjYgKzI2NDQsMTEgQEAKIAlTZWN1cml0eUJsb2ItPldvcmtzdGF0aW9uTmFtZS5MZW5ndGggPSAwOwogCVNlY3VyaXR5QmxvYi0+V29ya3N0YXRpb25OYW1lLk1heGltdW1MZW5ndGggPSAwOwogCi0JaWYgKGRvbWFpbiA9PSBOVUxMKSB7Ci0JCVNlY3VyaXR5QmxvYi0+RG9tYWluTmFtZS5CdWZmZXIgPSAwOwotCQlTZWN1cml0eUJsb2ItPkRvbWFpbk5hbWUuTGVuZ3RoID0gMDsKLQkJU2VjdXJpdHlCbG9iLT5Eb21haW5OYW1lLk1heGltdW1MZW5ndGggPSAwOwotCX0gZWxzZSB7Ci0JCV9fdTE2IGxlbjsKLQkJbmVnb3RpYXRlX2ZsYWdzIHw9IE5UTE1TU1BfTkVHT1RJQVRFX0RPTUFJTl9TVVBQTElFRDsKLQkJc3RybmNweShiY2NfcHRyLCBkb21haW4sIDYzKTsKLQkJbGVuID0gc3Rybmxlbihkb21haW4sIDY0KTsKLQkJU2VjdXJpdHlCbG9iLT5Eb21haW5OYW1lLk1heGltdW1MZW5ndGggPQotCQkgICAgY3B1X3RvX2xlMTYobGVuKTsKLQkJU2VjdXJpdHlCbG9iLT5Eb21haW5OYW1lLkJ1ZmZlciA9Ci0JCSAgICBjcHVfdG9fbGUzMigobG9uZykgJlNlY3VyaXR5QmxvYi0+Ci0JCQkJRG9tYWluU3RyaW5nIC0KLQkJCQkobG9uZykgJlNlY3VyaXR5QmxvYi0+U2lnbmF0dXJlKTsKLQkJYmNjX3B0ciArPSBsZW47Ci0JCVNlY3VyaXR5QmxvYkxlbmd0aCArPSBsZW47Ci0JCVNlY3VyaXR5QmxvYi0+RG9tYWluTmFtZS5MZW5ndGggPQotCQkgICAgY3B1X3RvX2xlMTYobGVuKTsKLQl9CisJLyogRG9tYWluIG5vdCBzZW50IG9uIGZpcnN0IFNlc3NzZXR1cCBpbiBOVExNU1NQLCBpbnN0ZWFkIGl0IGlzIHNlbnQKKwlhbG9uZyB3aXRoIHVzZXJuYW1lIG9uIGF1dGggcmVxdWVzdCAoaWUgdGhlIHJlc3BvbnNlIHRvIGNoYWxsZW5nZSkgKi8KKwlTZWN1cml0eUJsb2ItPkRvbWFpbk5hbWUuQnVmZmVyID0gMDsKKwlTZWN1cml0eUJsb2ItPkRvbWFpbk5hbWUuTGVuZ3RoID0gMDsKKwlTZWN1cml0eUJsb2ItPkRvbWFpbk5hbWUuTWF4aW11bUxlbmd0aCA9IDA7CiAJaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSUNPREUpIHsKIAkJaWYgKChsb25nKSBiY2NfcHRyICUgMikgewogCQkJKmJjY19wdHIgPSAwOwpAQCAtMjY3Nyw3ICsyNzE4LDcgQEAKIAkJCSAgICAgIFNlY3VyaXR5QmxvYjItPk1lc3NhZ2VUeXBlKSk7CiAJCX0gZWxzZSBpZiAoc2VzKSB7CiAJCQlzZXMtPlN1aWQgPSBzbWJfYnVmZmVyX3Jlc3BvbnNlLT5VaWQ7IC8qIFVJRCBsZWZ0IGluIGxlIGZvcm1hdCAqLyAKLQkJCWNGWUkoMSwgKCJVSUQgPSAlZCAiLCBzZXMtPlN1aWQpKTsKKwkJCWNGWUkoMSwgKCJVSUQgPSAlZCIsIHNlcy0+U3VpZCkpOwogCQkJaWYgKChwU01Cci0+cmVzcC5oZHIuV29yZENvdW50ID09IDMpCiAJCQkgICAgfHwgKChwU01Cci0+cmVzcC5oZHIuV29yZENvdW50ID09IDQpCiAJCQkJJiYgKGJsb2JfbGVuIDwKQEAgLTI2ODUsMTcgKzI3MjYsMTcgQEAKIAogCQkJCWlmIChwU01Cci0+cmVzcC5oZHIuV29yZENvdW50ID09IDQpIHsKIAkJCQkJYmNjX3B0ciArPSBibG9iX2xlbjsKLQkJCQkJY0ZZSSgxLAotCQkJCQkgICAgICgiU2VjdXJpdHkgQmxvYiBMZW5ndGggJWQgIiwKKwkJCQkJY0ZZSSgxLCAoIlNlY3VyaXR5IEJsb2IgTGVuZ3RoICVkIiwKIAkJCQkJICAgICAgYmxvYl9sZW4pKTsKIAkJCQl9CiAKLQkJCQljRllJKDEsICgiTlRMTVNTUCBDaGFsbGVuZ2UgcmN2ZCAiKSk7CisJCQkJY0ZZSSgxLCAoIk5UTE1TU1AgQ2hhbGxlbmdlIHJjdmQiKSk7CiAKIAkJCQltZW1jcHkoc2VzLT5zZXJ2ZXItPmNyeXB0S2V5LAogCQkJCSAgICAgICBTZWN1cml0eUJsb2IyLT5DaGFsbGVuZ2UsCiAJCQkJICAgICAgIENJRlNfQ1JZUFRPX0tFWV9TSVpFKTsKLQkJCQlpZihTZWN1cml0eUJsb2IyLT5OZWdvdGlhdGVGbGFncyAmIGNwdV90b19sZTMyKE5UTE1TU1BfTkVHT1RJQVRFX05UTE1WMikpCisJCQkJaWYoU2VjdXJpdHlCbG9iMi0+TmVnb3RpYXRlRmxhZ3MgJiAKKwkJCQkJY3B1X3RvX2xlMzIoTlRMTVNTUF9ORUdPVElBVEVfTlRMTVYyKSkKIAkJCQkJKnBOVExNdjJfZmxhZyA9IFRSVUU7CiAKIAkJCQlpZigoU2VjdXJpdHlCbG9iMi0+TmVnb3RpYXRlRmxhZ3MgJiAKQEAgLTI3MjUsNiArMjc2Niw4IEBACiAvKiBXZSBsb29rIGZvciBvYnZpb3VzIG1lc3NlZCB1cCBiY2Mgb3Igc3RyaW5ncyBpbiByZXNwb25zZSBzbyB3ZSBkbyBub3QgZ28gb2ZmCiAgICB0aGUgZW5kIHNpbmNlIChhdCBsZWFzdCkgV0lOMksgYW5kIFdpbmRvd3MgWFAgaGF2ZSBhIG1ham9yIGJ1ZyBpbiBub3QgbnVsbAogICAgdGVybWluYXRpbmcgbGFzdCBVbmljb2RlIHN0cmluZyBpbiByZXNwb25zZSAgKi8KKwkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQlzZXMtPnNlcnZlck9TID0KIAkJCQkJICAgIGt6YWxsb2MoMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck9TLApAQCAtMjc0MCw2ICsyNzgzLDggQEAKIAkJCQkJCQkJIGJjY19wdHIsCiAJCQkJCQkJCSByZW1haW5pbmdfd29yZHMKIAkJCQkJCQkJIC0gMSk7CisJCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCQlzZXMtPnNlcnZlck5PUyA9CiAJCQkJCQkgICAga3phbGxvYygyICogKGxlbiArIDEpLAogCQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKQEAgLTI3NTcsNiArMjgwMiw4IEBACiAJCQkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQkJCWxlbiA9IFVuaVN0cm5sZW4oKHdjaGFyX3QgKikgYmNjX3B0ciwgcmVtYWluaW5nX3dvcmRzKTsJCiAgICAgICAgICAgIC8qIGxhc3Qgc3RyaW5nIGlzIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkIChmb3IgZS5nLiBmb3IgV2luZG93cyBYUCAmIDIwMDApICovCisJCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkJICAgIGt6YWxsb2MoMiAqCiAJCQkJCQkJCSAgICAobGVuICsKQEAgLTI3NzQsMTMgKzI4MjEsMjAgQEAKIAkJCQkJCQkJWzEgKyAoMiAqIGxlbildCiAJCQkJCQkJICAgID0gMDsKIAkJCQkJCX0gLyogZWxzZSBubyBtb3JlIHJvb20gc28gY3JlYXRlIGR1bW15IGRvbWFpbiBzdHJpbmcgKi8KLQkJCQkJCWVsc2UKKwkJCQkJCWVsc2UgeworCQkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPQogCQkJCQkJCSAgICBremFsbG9jKDIsCiAJCQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJCX0KIAkJCQkJfSBlbHNlIHsJLyogbm8gcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIGFuZCBOT1Mgc3RyaW5nICovCisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbik7CisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPQogCQkJCQkJICAgIGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCQlzZXMtPnNlcnZlck5PUyA9CiAJCQkJCQkgICAga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKIAkJCQkJfQpAQCAtMjc4OSw2ICsyODQzLDggQEAKIAkJCQkJaWYgKCgobG9uZykgYmNjX3B0ciArIGxlbikgLSAobG9uZykKIAkJCQkJICAgIHBCeXRlQXJlYShzbWJfYnVmZmVyX3Jlc3BvbnNlKQogCQkJCQkgICAgPD0gQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7CisJCQkJCQlpZihzZXMtPnNlcnZlck9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJPUyA9CiAJCQkJCQkgICAga3phbGxvYyhsZW4gKyAxLAogCQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKQEAgLTI4MDAsNiArMjg1Niw4IEBACiAJCQkJCQliY2NfcHRyKys7CiAKIAkJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7CisJCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCQlzZXMtPnNlcnZlck5PUyA9CiAJCQkJCQkgICAga3phbGxvYyhsZW4gKyAxLAogCQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKQEAgLTI4MDksNiArMjg2Nyw4IEBACiAJCQkJCQliY2NfcHRyKys7CiAKIAkJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7CisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkgICAga3phbGxvYyhsZW4gKyAxLAogCQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKQEAgLTI4MTgsNyArMjg3OCw3IEBACiAJCQkJCQliY2NfcHRyKys7CiAJCQkJCX0gZWxzZQogCQkJCQkJY0ZZSSgxLAotCQkJCQkJICAgICAoIlZhcmlhYmxlIGZpZWxkIG9mIGxlbmd0aCAlZCBleHRlbmRzIGJleW9uZCBlbmQgb2Ygc21iICIsCisJCQkJCQkgICAgICgiVmFyaWFibGUgZmllbGQgb2YgbGVuZ3RoICVkIGV4dGVuZHMgYmV5b25kIGVuZCBvZiBzbWIiLAogCQkJCQkJICAgICAgbGVuKSk7CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTI4MzAsNyArMjg5MCw3IEBACiAJCX0KIAl9IGVsc2UgewogCQljRVJST1IoMSwKLQkJICAgICAgICgiIEludmFsaWQgV29yZCBjb3VudCAlZDogIiwKKwkJICAgICAgICgiIEludmFsaWQgV29yZCBjb3VudCAlZDoiLAogCQkJc21iX2J1ZmZlcl9yZXNwb25zZS0+V29yZENvdW50KSk7CiAJCXJjID0gLUVJTzsKIAl9CkBAIC0zMTEzLDYgKzMxNzMsOCBAQAogLyogV2UgbG9vayBmb3Igb2J2aW91cyBtZXNzZWQgdXAgYmNjIG9yIHN0cmluZ3MgaW4gcmVzcG9uc2Ugc28gd2UgZG8gbm90IGdvIG9mZgogICB0aGUgZW5kIHNpbmNlIChhdCBsZWFzdCkgV0lOMksgYW5kIFdpbmRvd3MgWFAgaGF2ZSBhIG1ham9yIGJ1ZyBpbiBub3QgbnVsbAogICB0ZXJtaW5hdGluZyBsYXN0IFVuaWNvZGUgc3RyaW5nIGluIHJlc3BvbnNlICAqLworCQkJCQlpZihzZXMtPnNlcnZlck9TKQorCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJCXNlcy0+c2VydmVyT1MgPQogCQkJCQkgICAga3phbGxvYygyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKIAkJCQkJY2lmc19zdHJmcm9tVUNTX2xlKHNlcy0+c2VydmVyT1MsCkBAIC0zMTI4LDYgKzMxOTAsOCBAQAogCQkJCQkJCQkgYmNjX3B0ciwKIAkJCQkJCQkJIHJlbWFpbmluZ193b3JkcwogCQkJCQkJCQkgLSAxKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJCSAgICBremFsbG9jKDIgKiAobGVuICsgMSksCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMzE0NCw2ICszMjA4LDggQEAKIAkJCQkJCWlmIChyZW1haW5pbmdfd29yZHMgPiAwKSB7CiAJCQkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSBiY2NfcHRyLCByZW1haW5pbmdfd29yZHMpOwkKICAgICAgLyogbGFzdCBzdHJpbmcgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQgKGUuZy4gZm9yIFdpbmRvd3MgWFAgJiAyMDAwKSAqLworCQkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPQogCQkJCQkJCSAgICBremFsbG9jKDIgKgogCQkJCQkJCQkgICAgKGxlbiArCkBAIC0zMTY5LDEwICszMjM1LDE3IEBACiAJCQkJCQkJCQkgIGxlbildCiAJCQkJCQkJICAgID0gMDsKIAkJCQkJCX0gLyogZWxzZSBubyBtb3JlIHJvb20gc28gY3JlYXRlIGR1bW15IGRvbWFpbiBzdHJpbmcgKi8KLQkJCQkJCWVsc2UKKwkJCQkJCWVsc2UgeworCQkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBremFsbG9jKDIsR0ZQX0tFUk5FTCk7CisJCQkJCQl9CiAJCQkJCX0gZWxzZSB7ICAvKiBubyByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gYW5kIE5PUyBzdHJpbmcgKi8KKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7CS8qIEFTQ0lJICovCkBAIC0zMTgwLDYgKzMyNTMsOCBAQAogCQkJCQlpZiAoKChsb25nKSBiY2NfcHRyICsgbGVuKSAtIAogICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHBCeXRlQXJlYShzbWJfYnVmZmVyX3Jlc3BvbnNlKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PSBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKKwkJCQkJCWlmKHNlcy0+c2VydmVyT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJCQlzZXMtPnNlcnZlck9TID0ga3phbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck9TLGJjY19wdHIsIGxlbik7CiAKQEAgLTMxODgsNiArMzI2Myw4IEBACiAJCQkJCQliY2NfcHRyKys7CiAKIAkJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7CisJCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCQlzZXMtPnNlcnZlck5PUyA9IGt6YWxsb2MobGVuKzEsR0ZQX0tFUk5FTCk7CiAJCQkJCQlzdHJuY3B5KHNlcy0+c2VydmVyTk9TLCBiY2NfcHRyLCBsZW4pOwkKIAkJCQkJCWJjY19wdHIgKz0gbGVuOwpAQCAtMzE5NSw2ICszMjcyLDggQEAKIAkJCQkJCWJjY19wdHIrKzsKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0ga3phbGxvYyhsZW4rMSxHRlBfS0VSTkVMKTsKIAkJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJEb21haW4sIGJjY19wdHIsIGxlbik7CiAJCQkJCQliY2NfcHRyICs9IGxlbjsKQEAgLTMyNzksNyArMzM1OCw4IEBACiAJCWJjY19wdHIrKzsgLyogYWxpZ24gKi8KIAl9CiAKLQlpZihzZXMtPnNlcnZlci0+c2VjTW9kZSAmIChTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCisJaWYoc2VzLT5zZXJ2ZXItPnNlY01vZGUgJiAKKwkJCShTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCiAJCXNtYl9idWZmZXItPkZsYWdzMiB8PSBTTUJGTEcyX1NFQ1VSSVRZX1NJR05BVFVSRTsKIAogCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9TVEFUVVMzMikgewpAQCAtMzI5MSw4ICszMzcxLDEwIEBACiAJaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSUNPREUpIHsKIAkJc21iX2J1ZmZlci0+RmxhZ3MyIHw9IFNNQkZMRzJfVU5JQ09ERTsKIAkJbGVuZ3RoID0KLQkJICAgIGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKSBiY2NfcHRyLCB0cmVlLCAxMDAsIG5sc19jb2RlcGFnZSk7Ci0JCWJjY19wdHIgKz0gMiAqIGxlbmd0aDsJLyogY29udmVydCBudW0gb2YgMTYgYml0IHdvcmRzIHRvIGJ5dGVzICovCisJCSAgICBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgdHJlZSwgCisJCQk2IC8qIG1heCB1dGY4IGNoYXIgbGVuZ3RoIGluIGJ5dGVzICovICogCisJCQkoLyogc2VydmVyIGxlbiovICsgMjU2IC8qIHNoYXJlIGxlbiAqLyksIG5sc19jb2RlcGFnZSk7CisJCWJjY19wdHIgKz0gMiAqIGxlbmd0aDsJLyogY29udmVydCBudW0gMTYgYml0IHdvcmRzIHRvIGJ5dGVzICovCiAJCWJjY19wdHIgKz0gMjsJLyogc2tpcCB0cmFpbGluZyBudWxsICovCiAJfSBlbHNlIHsJCS8qIEFTQ0lJICovCiAJCXN0cmNweShiY2NfcHRyLCB0cmVlKTsKQEAgLTM0NDQsMTAgKzM1MjYsMTYgQEAKIAkJCXBTZXNJbmZvLT5zZXJ2ZXItPnNlY01vZGUsCiAJCQlwU2VzSW5mby0+c2VydmVyLT5jYXBhYmlsaXRpZXMsCiAJCQlwU2VzSW5mby0+c2VydmVyLT50aW1lWm9uZSkpOworI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorCQlpZihleHBlcmltRW5hYmxlZCA+IDEpCisJCQlyYyA9IENJRlNfU2Vzc1NldHVwKHhpZCwgcFNlc0luZm8sIENJRlNfTlRMTSAvKiB0eXBlICovLAorCQkJCQkgICAgJm50bG12Ml9mbGFnLCBubHNfaW5mbyk7CQorCQllbHNlCisjZW5kaWYKIAkJaWYgKGV4dGVuZGVkX3NlY3VyaXR5CiAJCQkJJiYgKHBTZXNJbmZvLT5jYXBhYmlsaXRpZXMgJiBDQVBfRVhURU5ERURfU0VDVVJJVFkpCiAJCQkJJiYgKHBTZXNJbmZvLT5zZXJ2ZXItPnNlY1R5cGUgPT0gTlRMTVNTUCkpIHsKLQkJCWNGWUkoMSwgKCJOZXcgc3R5bGUgc2Vzc3NldHVwICIpKTsKKwkJCWNGWUkoMSwgKCJOZXcgc3R5bGUgc2Vzc3NldHVwIikpOwogCQkJcmMgPSBDSUZTU3BuZWdvU2Vzc1NldHVwKHhpZCwgcFNlc0luZm8sCiAJCQkJTlVMTCAvKiBzZWN1cml0eSBibG9iICovLCAKIAkJCQkwIC8qIGJsb2IgbGVuZ3RoICovLApAQCAtMzQ1NSw3ICszNTQzLDcgQEAKIAkJfSBlbHNlIGlmIChleHRlbmRlZF9zZWN1cml0eQogCQkJICAgJiYgKHBTZXNJbmZvLT5jYXBhYmlsaXRpZXMgJiBDQVBfRVhURU5ERURfU0VDVVJJVFkpCiAJCQkgICAmJiAocFNlc0luZm8tPnNlcnZlci0+c2VjVHlwZSA9PSBSYXdOVExNU1NQKSkgewotCQkJY0ZZSSgxLCAoIk5UTE1TU1Agc2Vzc3NldHVwICIpKTsKKwkJCWNGWUkoMSwgKCJOVExNU1NQIHNlc3NzZXR1cCIpKTsKIAkJCXJjID0gQ0lGU05UTE1TU1BOZWdvdGlhdGVTZXNzU2V0dXAoeGlkLAogCQkJCQkJcFNlc0luZm8sCiAJCQkJCQkmbnRsbXYyX2ZsYWcsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCA2MzI1NjFkLi44MjMxNWVkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTQ4LDEzICs0OCwxNCBAQAogCXN0cnVjdCBkZW50cnkgKnRlbXA7CiAJaW50IG5hbWVsZW4gPSAwOwogCWNoYXIgKmZ1bGxfcGF0aDsKLQljaGFyIGRpcnNlcCA9IENJRlNfRElSX1NFUChDSUZTX1NCKGRpcmVudHJ5LT5kX3NiKSk7CisJY2hhciBkaXJzZXA7CiAKIAlpZihkaXJlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsgIC8qIG5vdCBtdWNoIHdlIGNhbiBkbyBpZiBkZW50cnkgaXMgZnJlZWQgYW5kCiAJCXdlIG5lZWQgdG8gcmVvcGVuIHRoZSBmaWxlIGFmdGVyIGl0IHdhcyBjbG9zZWQgaW1wbGljaXRseQogCQl3aGVuIHRoZSBzZXJ2ZXIgY3Jhc2hlZCAqLwogCisJZGlyc2VwID0gQ0lGU19ESVJfU0VQKENJRlNfU0IoZGlyZW50cnktPmRfc2IpKTsKIGNpZnNfYnBfcmVuYW1lX3JldHJ5OgogCWZvciAodGVtcCA9IGRpcmVudHJ5OyAhSVNfUk9PVCh0ZW1wKTspIHsKIAkJbmFtZWxlbiArPSAoMSArIHRlbXAtPmRfbmFtZS5sZW4pOwpAQCAtMTM4LDkgKzEzOSw3IEBACiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCW11dGV4X2xvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCW11dGV4X3VubG9jaygmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI1NSwxMiArMjU0LDEwIEBACiAJCQlDSUZTU01CQ2xvc2UoeGlkLCBwVGNvbiwgZmlsZUhhbmRsZSk7CiAJCX0gZWxzZSBpZihuZXdpbm9kZSkgewogCQkJcENpZnNGaWxlID0KLQkJCSAgIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSwgR0ZQX0tFUk5FTCk7CisJCQkgICBremFsbG9jKHNpemVvZiAoc3RydWN0IGNpZnNGaWxlSW5mbyksIEdGUF9LRVJORUwpOwogCQkJCiAJCQlpZihwQ2lmc0ZpbGUgPT0gTlVMTCkKIAkJCQlnb3RvIGNpZnNfY3JlYXRlX291dDsKLQkJCW1lbXNldCgoY2hhciAqKXBDaWZzRmlsZSwgMCwKLQkJCSAgICAgICBzaXplb2YgKHN0cnVjdCBjaWZzRmlsZUluZm8pKTsKIAkJCXBDaWZzRmlsZS0+bmV0ZmlkID0gZmlsZUhhbmRsZTsKIAkJCXBDaWZzRmlsZS0+cGlkID0gY3VycmVudC0+dGdpZDsKIAkJCXBDaWZzRmlsZS0+cElub2RlID0gbmV3aW5vZGU7CkBAIC0zMTcsOSArMzE0LDcgQEAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JbXV0ZXhfbG9jaygmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkKIAkJcmMgPSAtRU5PTUVNOwogCWVsc2UgaWYgKHBUY29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSB7CkBAIC00NDEsNiArNDM2LDIwIEBACiAJY2lmc19zYiA9IENJRlNfU0IocGFyZW50X2Rpcl9pbm9kZS0+aV9zYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCisJLyoKKwkgKiBEb24ndCBhbGxvdyB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciBpbiBhIHBhdGggY29tcG9uZW50LgorCSAqIFRoZSBWRlMgd2lsbCBub3QgYWxsb3cgIi8iLCBidXQgIlwiIGlzIGFsbG93ZWQgYnkgcG9zaXguCisJICovCisJaWYgKCEoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1BPU0lYX1BBVEhTKSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGRpcmVudHJ5LT5kX25hbWUubGVuOyBpKyspCisJCQlpZiAoZGlyZW50cnktPmRfbmFtZS5uYW1lW2ldID09ICdcXCcpIHsKKwkJCQljRllJKDEsICgiSW52YWxpZCBmaWxlIG5hbWUiKSk7CisJCQkJRnJlZVhpZCh4aWQpOworCQkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQkJfQorCX0KKwogCS8qIGNhbiBub3QgZ3JhYiB0aGUgcmVuYW1lIHNlbSBoZXJlIHNpbmNlIGl0IHdvdWxkCiAJZGVhZGxvY2sgaW4gdGhlIGNhc2VzIChiZWdpbm5pbmcgb2Ygc3lzX3JlbmFtZSBpdHNlbGYpCiAJaW4gd2hpY2ggd2UgYWxyZWFkeSBoYXZlIHRoZSBzYiByZW5hbWUgc2VtICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZjbnRsLmMgYi9mcy9jaWZzL2ZjbnRsLmMKaW5kZXggZWM0ZGZlOS4uNjMzYTkzOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9mY250bC5jCisrKyBiL2ZzL2NpZnMvZmNudGwuYwpAQCAtODYsOSArODYsNyBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQltdXRleF9sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGUtPmZfZGVudHJ5KTsKLQltdXRleF91bmxvY2soJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBmYjQ5YWVmLi5lMmI0Y2UxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtODQsNiArODQsOCBAQAogCQlyZXR1cm4gRklMRV9PVkVSV1JJVEVfSUY7CiAJZWxzZSBpZiAoKGZsYWdzICYgT19DUkVBVCkgPT0gT19DUkVBVCkKIAkJcmV0dXJuIEZJTEVfT1BFTl9JRjsKKwllbHNlIGlmICgoZmxhZ3MgJiBPX1RSVU5DKSA9PSBPX1RSVU5DKQorCQlyZXR1cm4gRklMRV9PVkVSV1JJVEU7CiAJZWxzZQogCQlyZXR1cm4gRklMRV9PUEVOOwogfQpAQCAtMjAzLDkgKzIwNSw3IEBACiAJCX0KIAl9CiAKLQltdXRleF9sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGUtPmZfZGVudHJ5KTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTU1LDcgKzU1NSwxMCBAQAogCQlpZiAocHRtcCkgewogCQkJY0ZZSSgxLCAoImNsb3NlZGlyIGZyZWUgc21iIGJ1ZiBpbiBzcmNoIHN0cnVjdCIpKTsKIAkJCXBDRmlsZVN0cnVjdC0+c3JjaF9pbmYubnR3cmtfYnVmX3N0YXJ0ID0gTlVMTDsKLQkJCWNpZnNfYnVmX3JlbGVhc2UocHRtcCk7CisJCQlpZihwQ0ZpbGVTdHJ1Y3QtPnNyY2hfaW5mLnNtYWxsQnVmKQorCQkJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UocHRtcCk7CisJCQllbHNlCisJCQkJY2lmc19idWZfcmVsZWFzZShwdG1wKTsKIAkJfQogCQlwdG1wID0gcENGaWxlU3RydWN0LT5zZWFyY2hfcmVzdW1lX25hbWU7CiAJCWlmIChwdG1wKSB7CkBAIC01NzQsMTMgKzU3NywxNCBAQAogaW50IGNpZnNfbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqcGZMb2NrKQogewogCWludCByYywgeGlkOwotCV9fdTMyIGxvY2tUeXBlID0gTE9DS0lOR19BTkRYX0xBUkdFX0ZJTEVTOwogCV9fdTMyIG51bUxvY2sgPSAwOwogCV9fdTMyIG51bVVubG9jayA9IDA7CiAJX191NjQgbGVuZ3RoOwogCWludCB3YWl0X2ZsYWcgPSBGQUxTRTsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOworCV9fdTE2IG5ldGZpZDsKKwlfX3U4IGxvY2tUeXBlID0gTE9DS0lOR19BTkRYX0xBUkdFX0ZJTEVTOwogCiAJbGVuZ3RoID0gMSArIHBmTG9jay0+ZmxfZW5kIC0gcGZMb2NrLT5mbF9zdGFydDsKIAlyYyA9IC1FQUNDRVM7CkBAIC01OTIsMTEgKzU5NiwxMSBAQAogCSAgICAgICAgcGZMb2NrLT5mbF9lbmQpKTsKIAogCWlmIChwZkxvY2stPmZsX2ZsYWdzICYgRkxfUE9TSVgpCi0JCWNGWUkoMSwgKCJQb3NpeCAiKSk7CisJCWNGWUkoMSwgKCJQb3NpeCIpKTsKIAlpZiAocGZMb2NrLT5mbF9mbGFncyAmIEZMX0ZMT0NLKQotCQljRllJKDEsICgiRmxvY2sgIikpOworCQljRllJKDEsICgiRmxvY2siKSk7CiAJaWYgKHBmTG9jay0+ZmxfZmxhZ3MgJiBGTF9TTEVFUCkgewotCQljRllJKDEsICgiQmxvY2tpbmcgbG9jayAiKSk7CisJCWNGWUkoMSwgKCJCbG9ja2luZyBsb2NrIikpOwogCQl3YWl0X2ZsYWcgPSBUUlVFOwogCX0KIAlpZiAocGZMb2NrLT5mbF9mbGFncyAmIEZMX0FDQ0VTUykKQEAgLTYxMiwyMSArNjE2LDIzIEBACiAJCWNGWUkoMSwgKCJGX1dSTENLICIpKTsKIAkJbnVtTG9jayA9IDE7CiAJfSBlbHNlIGlmIChwZkxvY2stPmZsX3R5cGUgPT0gRl9VTkxDSykgewotCQljRllJKDEsICgiRl9VTkxDSyAiKSk7CisJCWNGWUkoMSwgKCJGX1VOTENLIikpOwogCQludW1VbmxvY2sgPSAxOworCQkvKiBDaGVjayBpZiB1bmxvY2sgaW5jbHVkZXMgbW9yZSB0aGFuCisJCW9uZSBsb2NrIHJhbmdlICovCiAJfSBlbHNlIGlmIChwZkxvY2stPmZsX3R5cGUgPT0gRl9SRExDSykgewotCQljRllJKDEsICgiRl9SRExDSyAiKSk7CisJCWNGWUkoMSwgKCJGX1JETENLIikpOwogCQlsb2NrVHlwZSB8PSBMT0NLSU5HX0FORFhfU0hBUkVEX0xPQ0s7CiAJCW51bUxvY2sgPSAxOwogCX0gZWxzZSBpZiAocGZMb2NrLT5mbF90eXBlID09IEZfRVhMQ0spIHsKLQkJY0ZZSSgxLCAoIkZfRVhMQ0sgIikpOworCQljRllJKDEsICgiRl9FWExDSyIpKTsKIAkJbnVtTG9jayA9IDE7CiAJfSBlbHNlIGlmIChwZkxvY2stPmZsX3R5cGUgPT0gRl9TSExDSykgewotCQljRllJKDEsICgiRl9TSExDSyAiKSk7CisJCWNGWUkoMSwgKCJGX1NITENLIikpOwogCQlsb2NrVHlwZSB8PSBMT0NLSU5HX0FORFhfU0hBUkVEX0xPQ0s7CiAJCW51bUxvY2sgPSAxOwogCX0gZWxzZQotCQljRllJKDEsICgiVW5rbm93biB0eXBlIG9mIGxvY2sgIikpOworCQljRllJKDEsICgiVW5rbm93biB0eXBlIG9mIGxvY2siKSk7CiAKIAljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX2RlbnRyeS0+ZF9zYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwpAQCAtNjM1LDI3ICs2NDEsNDEgQEAKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVCQURGOwogCX0KKwluZXRmaWQgPSAoKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGEpLT5uZXRmaWQ7CiAKKworCS8qIEJCIGFkZCBjb2RlIGhlcmUgdG8gbm9ybWFsaXplIG9mZnNldCBhbmQgbGVuZ3RoIHRvCisJYWNjb3VudCBmb3IgbmVnYXRpdmUgbGVuZ3RoIHdoaWNoIHdlIGNhbiBub3QgYWNjZXB0IG92ZXIgdGhlCisJd2lyZSAqLwogCWlmIChJU19HRVRMSyhjbWQpKSB7Ci0JCXJjID0gQ0lGU1NNQkxvY2soeGlkLCBwVGNvbiwKLQkJCQkgKChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+Ci0JCQkJICBwcml2YXRlX2RhdGEpLT5uZXRmaWQsCi0JCQkJIGxlbmd0aCwKLQkJCQkgcGZMb2NrLT5mbF9zdGFydCwgMCwgMSwgbG9ja1R5cGUsCi0JCQkJIDAgLyogd2FpdCBmbGFnICovICk7CisJCWlmKGV4cGVyaW1FbmFibGVkICYmIAorCQkgICAoY2lmc19zYi0+dGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgJiYKKwkJICAgKENJRlNfVU5JWF9GQ05UTF9DQVAgJiAKKwkJCWxlNjRfdG9fY3B1KGNpZnNfc2ItPnRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CisJCQlpbnQgcG9zaXhfbG9ja190eXBlOworCQkJaWYobG9ja1R5cGUgJiBMT0NLSU5HX0FORFhfU0hBUkVEX0xPQ0spCisJCQkJcG9zaXhfbG9ja190eXBlID0gQ0lGU19SRExDSzsKKwkJCWVsc2UKKwkJCQlwb3NpeF9sb2NrX3R5cGUgPSBDSUZTX1dSTENLOworCQkJcmMgPSBDSUZTU01CUG9zaXhMb2NrKHhpZCwgcFRjb24sIG5ldGZpZCwgMSAvKiBnZXQgKi8sCisJCQkJCWxlbmd0aCwJcGZMb2NrLAorCQkJCQlwb3NpeF9sb2NrX3R5cGUsIHdhaXRfZmxhZyk7CisJCQlGcmVlWGlkKHhpZCk7CisJCQlyZXR1cm4gcmM7CisJCX0KKworCQkvKiBCQiB3ZSBjb3VsZCBjaGFpbiB0aGVzZSBpbnRvIG9uZSBsb2NrIHJlcXVlc3QgQkIgKi8KKwkJcmMgPSBDSUZTU01CTG9jayh4aWQsIHBUY29uLCBuZXRmaWQsIGxlbmd0aCwgcGZMb2NrLT5mbF9zdGFydCwKKwkJCQkgMCwgMSwgbG9ja1R5cGUsIDAgLyogd2FpdCBmbGFnICovICk7CiAJCWlmIChyYyA9PSAwKSB7Ci0JCQlyYyA9IENJRlNTTUJMb2NrKHhpZCwgcFRjb24sCi0JCQkJCSAoKHN0cnVjdCBjaWZzRmlsZUluZm8gKikgZmlsZS0+Ci0JCQkJCSAgcHJpdmF0ZV9kYXRhKS0+bmV0ZmlkLAotCQkJCQkgbGVuZ3RoLAorCQkJcmMgPSBDSUZTU01CTG9jayh4aWQsIHBUY29uLCBuZXRmaWQsIGxlbmd0aCwgCiAJCQkJCSBwZkxvY2stPmZsX3N0YXJ0LCAxIC8qIG51bVVubG9jayAqLyAsCiAJCQkJCSAwIC8qIG51bUxvY2sgKi8gLCBsb2NrVHlwZSwKIAkJCQkJIDAgLyogd2FpdCBmbGFnICovICk7CiAJCQlwZkxvY2stPmZsX3R5cGUgPSBGX1VOTENLOwogCQkJaWYgKHJjICE9IDApCiAJCQkJY0VSUk9SKDEsICgiRXJyb3IgdW5sb2NraW5nIHByZXZpb3VzbHkgbG9ja2VkICIKLQkJCQkJICAgInJhbmdlICVkIGR1cmluZyB0ZXN0IG9mIGxvY2sgIiwKLQkJCQkJICAgcmMpKTsKKwkJCQkJICAgInJhbmdlICVkIGR1cmluZyB0ZXN0IG9mIGxvY2siLCByYykpOwogCQkJcmMgPSAwOwogCiAJCX0gZWxzZSB7CkBAIC02NjcsMTIgKzY4NywzMCBAQAogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiByYzsKIAl9Ci0KLQlyYyA9IENJRlNTTUJMb2NrKHhpZCwgcFRjb24sCi0JCQkgKChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopIGZpbGUtPnByaXZhdGVfZGF0YSktPgotCQkJIG5ldGZpZCwgbGVuZ3RoLAotCQkJIHBmTG9jay0+Zmxfc3RhcnQsIG51bVVubG9jaywgbnVtTG9jaywgbG9ja1R5cGUsCi0JCQkgd2FpdF9mbGFnKTsKKwlpZiAoZXhwZXJpbUVuYWJsZWQgJiYKKwkJKGNpZnNfc2ItPnRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpICYmCisJCShDSUZTX1VOSVhfRkNOVExfQ0FQICYKKwkJCSBsZTY0X3RvX2NwdShjaWZzX3NiLT50Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgeworCQlpbnQgcG9zaXhfbG9ja190eXBlOworCQlpZihsb2NrVHlwZSAmIExPQ0tJTkdfQU5EWF9TSEFSRURfTE9DSykKKwkJCXBvc2l4X2xvY2tfdHlwZSA9IENJRlNfUkRMQ0s7CisJCWVsc2UKKwkJCXBvc2l4X2xvY2tfdHlwZSA9IENJRlNfV1JMQ0s7CisJCQorCQlpZihudW1VbmxvY2sgPT0gMSkKKwkJCXBvc2l4X2xvY2tfdHlwZSA9IENJRlNfVU5MQ0s7CisJCWVsc2UgaWYobnVtTG9jayA9PSAwKSB7CisJCQkvKiBpZiBubyBsb2NrIG9yIHVubG9jayB0aGVuIG5vdGhpbmcKKwkJCXRvIGRvIHNpbmNlIHdlIGRvIG5vdCBrbm93IHdoYXQgaXQgaXMgKi8KKwkJCUZyZWVYaWQoeGlkKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQlyYyA9IENJRlNTTUJQb3NpeExvY2soeGlkLCBwVGNvbiwgbmV0ZmlkLCAwIC8qIHNldCAqLywKKwkJCQkgICAgICBsZW5ndGgsIHBmTG9jaywKKwkJCQkgICAgICBwb3NpeF9sb2NrX3R5cGUsIHdhaXRfZmxhZyk7CisJfSBlbHNlCisJCXJjID0gQ0lGU1NNQkxvY2soeGlkLCBwVGNvbiwgbmV0ZmlkLCBsZW5ndGgsIHBmTG9jay0+Zmxfc3RhcnQsCisJCQkJbnVtVW5sb2NrLCBudW1Mb2NrLCBsb2NrVHlwZSwgd2FpdF9mbGFnKTsKIAlpZiAocGZMb2NrLT5mbF9mbGFncyAmIEZMX1BPU0lYKQogCQlwb3NpeF9sb2NrX2ZpbGVfd2FpdChmaWxlLCBwZkxvY2spOwogCUZyZWVYaWQoeGlkKTsKQEAgLTg2OCw5ICs5MDYsMTAgQEAKIAkJCQlpZiAocmMgIT0gMCkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQkvKiBCQiBGSVhNRSBXZSBjYW4gbm90IHNpZ24gYWNyb3NzIHR3byBidWZmZXJzIHlldCAqLwotCQkJaWYoKHBUY29uLT5zZXMtPnNlcnZlci0+c2VjTW9kZSAmIAotCQkJIChTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpID09IDApIHsKKwkJCWlmKGV4cGVyaW1FbmFibGVkIHx8IChwVGNvbi0+c2VzLT5zZXJ2ZXIgJiYKKwkJCQkoKHBUY29uLT5zZXMtPnNlcnZlci0+c2VjTW9kZSAmIAorCQkJCShTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCisJCQkJPT0gMCkpKSB7CiAJCQkJc3RydWN0IGt2ZWMgaW92WzJdOwogCQkJCXVuc2lnbmVkIGludCBsZW47CiAKQEAgLTg4NSwxMyArOTI0LDEzIEBACiAJCQkJCQkqcG9mZnNldCwgJmJ5dGVzX3dyaXR0ZW4sCiAJCQkJCQlpb3YsIDEsIGxvbmdfb3ApOwogCQkJfSBlbHNlCi0JCQkvKiBCQiBGSVhNRSBmaXh1cCBpbmRlbnRhdGlvbiBvZiBsaW5lIGJlbG93ICovCi0JCQlyYyA9IENJRlNTTUJXcml0ZSh4aWQsIHBUY29uLAotCQkJCSBvcGVuX2ZpbGUtPm5ldGZpZCwKLQkJCQkgbWluX3QoY29uc3QgaW50LCBjaWZzX3NiLT53c2l6ZSwgCi0JCQkJICAgICAgIHdyaXRlX3NpemUgLSB0b3RhbF93cml0dGVuKSwKLQkJCQkgKnBvZmZzZXQsICZieXRlc193cml0dGVuLAotCQkJCSB3cml0ZV9kYXRhICsgdG90YWxfd3JpdHRlbiwgTlVMTCwgbG9uZ19vcCk7CisJCQkJcmMgPSBDSUZTU01CV3JpdGUoeGlkLCBwVGNvbiwKKwkJCQkJIG9wZW5fZmlsZS0+bmV0ZmlkLAorCQkJCQkgbWluX3QoY29uc3QgaW50LCBjaWZzX3NiLT53c2l6ZSwKKwkJCQkJICAgICAgIHdyaXRlX3NpemUgLSB0b3RhbF93cml0dGVuKSwKKwkJCQkJICpwb2Zmc2V0LCAmYnl0ZXNfd3JpdHRlbiwKKwkJCQkJIHdyaXRlX2RhdGEgKyB0b3RhbF93cml0dGVuLAorCQkJCQkgTlVMTCwgbG9uZ19vcCk7CiAJCX0KIAkJaWYgKHJjIHx8IChieXRlc193cml0dGVuID09IDApKSB7CiAJCQlpZiAodG90YWxfd3JpdHRlbikKQEAgLTkzMCw2ICs5NjksMTYgQEAKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGU7CiAJaW50IHJjOwogCisJLyogSGF2aW5nIGEgbnVsbCBpbm9kZSBoZXJlIChiZWNhdXNlIG1hcHBpbmctPmhvc3Qgd2FzIHNldCB0byB6ZXJvIGJ5CisJdGhlIFZGUyBvciBNTSkgc2hvdWxkIG5vdCBoYXBwZW4gYnV0IHdlIGhhZCByZXBvcnRzIG9mIG9uIG9vcHMgKGR1ZSB0bworCWl0IGJlaW5nIHplcm8pIGR1cmluZyBzdHJlc3MgdGVzdGNhc2VzIHNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGl0ICovCisKKwlpZihjaWZzX2lub2RlID09IE5VTEwpIHsKKwkJY0VSUk9SKDEsKCJOdWxsIGlub2RlIHBhc3NlZCB0byBjaWZzX3dyaXRlYWJsZV9maWxlIikpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBOVUxMOworCX0KKwogCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvcGVuX2ZpbGUsICZjaWZzX2lub2RlLT5vcGVuRmlsZUxpc3QsIGZsaXN0KSB7CiAJCWlmIChvcGVuX2ZpbGUtPmNsb3NlUGVuZCkKQEAgLTEwNTUsMTIgKzExMDQsMTEgQEAKIAlpZiAoY2lmc19zYi0+d3NpemUgPCBQQUdFX0NBQ0hFX1NJWkUpCiAJCXJldHVybiBnZW5lcmljX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTsKIAotCS8qIEJCIEZJWE1FIHdlIGRvIG5vdCBoYXZlIGNvZGUgdG8gc2lnbiBhY3Jvc3MgbXVsdGlwbGUgYnVmZmVycyB5ZXQsCi0JICAgc28gZ28gdG8gb2xkZXIgd3JpdGVwYWdlIHN0eWxlIHdyaXRlIHdoaWNoIHdlIGNhbiBzaWduIGlmIG5lZWRlZCAqLwogCWlmKChjaWZzX3NiLT50Y29uLT5zZXMpICYmIChjaWZzX3NiLT50Y29uLT5zZXMtPnNlcnZlcikpCiAJCWlmKGNpZnNfc2ItPnRjb24tPnNlcy0+c2VydmVyLT5zZWNNb2RlICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8IFNFQ01PREVfU0lHTl9FTkFCTEVEKSkKLQkJCXJldHVybiBnZW5lcmljX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTsKKwkJCWlmKCFleHBlcmltRW5hYmxlZCkKKwkJCQlyZXR1cm4gZ2VuZXJpY193cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYyk7CiAKIAkvKgogCSAqIEJCOiBJcyB0aGlzIG1lYW5pbmdmdWwgZm9yIGEgbm9uLWJsb2NrLWRldmljZSBmaWxlIHN5c3RlbT8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA1OThlZWM5Li40MDkzNzY0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC01NjUsMTEgKzU2NSwxNCBAQAogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzSW5vZGU7CiAJRklMRV9CQVNJQ19JTkZPICpwaW5mb19idWY7CiAKLQljRllJKDEsICgiY2lmc191bmxpbmssIGlub2RlID0gMHglcCB3aXRoICIsIGlub2RlKSk7CisJY0ZZSSgxLCAoImNpZnNfdW5saW5rLCBpbm9kZSA9IDB4JXAiLCBpbm9kZSkpOwogCiAJeGlkID0gR2V0WGlkKCk7CiAKLQljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CisJaWYoaW5vZGUpCisJCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKKwllbHNlCisJCWNpZnNfc2IgPSBDSUZTX1NCKGRpcmVudHJ5LT5kX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIAkvKiBVbmxpbmsgY2FuIGJlIGNhbGxlZCBmcm9tIHJlbmFtZSBzbyB3ZSBjYW4gbm90IGdyYWIgdGhlIHNlbSBoZXJlCkBAIC02MDksOSArNjEyLDggQEAKIAkJfQogCX0gZWxzZSBpZiAocmMgPT0gLUVBQ0NFUykgewogCQkvKiB0cnkgb25seSBpZiByL28gYXR0cmlidXRlIHNldCBpbiBsb2NhbCBsb29rdXAgZGF0YT8gKi8KLQkJcGluZm9fYnVmID0ga21hbGxvYyhzaXplb2YoRklMRV9CQVNJQ19JTkZPKSwgR0ZQX0tFUk5FTCk7CisJCXBpbmZvX2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKEZJTEVfQkFTSUNfSU5GTyksIEdGUF9LRVJORUwpOwogCQlpZiAocGluZm9fYnVmKSB7Ci0JCQltZW1zZXQocGluZm9fYnVmLCAwLCBzaXplb2YoRklMRV9CQVNJQ19JTkZPKSk7CiAJCQkvKiBBVFRSUyBzZXQgdG8gbm9ybWFsIGNsZWFycyByL28gYml0ICovCiAJCQlwaW5mb19idWYtPkF0dHJpYnV0ZXMgPSBjcHVfdG9fbGUzMihBVFRSX05PUk1BTCk7CiAJCQlpZiAoIShwVGNvbi0+c2VzLT5mbGFncyAmIENJRlNfU0VTX05UNCkpCkBAIC02OTMsOSArNjk1LDExIEBACiAJCQkJCSAgIHdoZW4gbmVlZGVkICovCiAJCWRpcmVudHJ5LT5kX2lub2RlLT5pX2N0aW1lID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKIAl9Ci0JaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7Ci0JY2lmc0lub2RlID0gQ0lGU19JKGlub2RlKTsKLQljaWZzSW5vZGUtPnRpbWUgPSAwOwkvKiBmb3JjZSByZXZhbGlkYXRlIG9mIGRpciBhcyB3ZWxsICovCisJaWYoaW5vZGUpIHsKKwkJaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7CisJCWNpZnNJbm9kZSA9IENJRlNfSShpbm9kZSk7CisJCWNpZnNJbm9kZS0+dGltZSA9IDA7CS8qIGZvcmNlIHJldmFsaWRhdGUgb2YgZGlyIGFzIHdlbGwgKi8KKwl9CiAKIAlrZnJlZShmdWxsX3BhdGgpOwogCUZyZWVYaWQoeGlkKTsKQEAgLTcxOCw5ICs3MjIsNyBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQltdXRleF9sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODAzLDkgKzgwNSw3IEBACiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCW11dGV4X2xvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMTM3LDkgKzExMzcsNyBAQAogCQkJcmMgPSAwOwogCX0KIAkJCi0JbXV0ZXhfbG9jaygmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZiAoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTExNjcsNyArMTE2NSw3IEBACiAJCQkJCQluZmlkLCBucGlkLCBGQUxTRSk7CiAJCQlhdG9taWNfZGVjKCZvcGVuX2ZpbGUtPndydFBlbmRpbmcpOwogCQkJY0ZZSSgxLCgiU2V0RlNpemUgZm9yIGF0dHJzIHJjID0gJWQiLCByYykpOwotCQkJaWYocmMgPT0gLUVJTlZBTCkgeworCQkJaWYoKHJjID09IC1FSU5WQUwpIHx8IChyYyA9PSAtRU9QTk9UU1VQUCkpIHsKIAkJCQlpbnQgYnl0ZXNfd3JpdHRlbjsKIAkJCQlyYyA9IENJRlNTTUJXcml0ZSh4aWQsIHBUY29uLAogCQkJCQkJICBuZmlkLCAwLCBhdHRycy0+aWFfc2l6ZSwKQEAgLTExODksNyArMTE4Nyw3IEBACiAJCQkJCSAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCWNGWUkoMSwgKCJTZXRFT0YgYnkgcGF0aCAoc2V0YXR0cnMpIHJjID0gJWQiLCByYykpOwotCQkJaWYocmMgPT0gLUVJTlZBTCkgeworCQkJaWYoKHJjID09IC1FSU5WQUwpIHx8IChyYyA9PSAtRU9QTk9UU1VQUCkpIHsKIAkJCQlfX3UxNiBuZXRmaWQ7CiAJCQkJaW50IG9wbG9jayA9IEZBTFNFOwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2xpbmsuYyBiL2ZzL2NpZnMvbGluay5jCmluZGV4IDhkMGRhN2MuLjJlYzk5ZjggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbGluay5jCisrKyBiL2ZzL2NpZnMvbGluay5jCkBAIC00OCwxMCArNDgsOCBAQAogLyogTm8gbmVlZCB0byBjaGVjayBmb3IgY3Jvc3MgZGV2aWNlIGxpbmtzIHNpbmNlIHNlcnZlciB3aWxsIGRvIHRoYXQKICAgIEJCIG5vdGUgREZTIGNhc2UgaW4gZnV0dXJlIHRob3VnaCAod2hlbiB3ZSBtYXkgaGF2ZSB0byBjaGVjaykgKi8KIAotCW11dGV4X2xvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZyb21OYW1lID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShvbGRfZmlsZSk7CiAJdG9OYW1lID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZigoZnJvbU5hbWUgPT0gTlVMTCkgfHwgKHRvTmFtZSA9PSBOVUxMKSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gY2lmc19obF9leGl0OwpAQCAtNjcsNyArNjUsNyBAQAogCQkJCQljaWZzX3NiX3RhcmdldC0+bG9jYWxfbmxzLCAKIAkJCQkJY2lmc19zYl90YXJnZXQtPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKLQkJaWYocmMgPT0gLUVJTykKKwkJaWYoKHJjID09IC1FSU8pIHx8IChyYyA9PSAtRUlOVkFMKSkKIAkJCXJjID0gLUVPUE5PVFNVUFA7ICAKIAl9CiAKQEAgLTEwMyw5ICsxMDEsNyBAQAogCiAJeGlkID0gR2V0WGlkKCk7CiAKLQltdXRleF9sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQltdXRleF91bmxvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCiAJaWYgKCFmdWxsX3BhdGgpCiAJCWdvdG8gb3V0X25vX2ZyZWU7CkBAIC0xNjQsOSArMTYwLDcgQEAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggNDMyYmExNS4uZmFmZDA1NiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTcyLDEwICs3Miw5IEBACiAJc3RydWN0IGNpZnNTZXNJbmZvICpyZXRfYnVmOwogCiAJcmV0X2J1ZiA9Ci0JICAgIChzdHJ1Y3QgY2lmc1Nlc0luZm8gKikga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjaWZzU2VzSW5mbyksCisJICAgIChzdHJ1Y3QgY2lmc1Nlc0luZm8gKikga3phbGxvYyhzaXplb2YgKHN0cnVjdCBjaWZzU2VzSW5mbyksCiAJCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmIChyZXRfYnVmKSB7Ci0JCW1lbXNldChyZXRfYnVmLCAwLCBzaXplb2YgKHN0cnVjdCBjaWZzU2VzSW5mbykpOwogCQl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkJYXRvbWljX2luYygmc2VzSW5mb0FsbG9jQ291bnQpOwogCQlyZXRfYnVmLT5zdGF0dXMgPSBDaWZzTmV3OwpAQCAtMTEwLDEwICsxMDksOSBAQAogewogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnJldF9idWY7CiAJcmV0X2J1ZiA9Ci0JICAgIChzdHJ1Y3QgY2lmc1Rjb25JbmZvICopIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2lmc1Rjb25JbmZvKSwKKwkgICAgKHN0cnVjdCBjaWZzVGNvbkluZm8gKikga3phbGxvYyhzaXplb2YgKHN0cnVjdCBjaWZzVGNvbkluZm8pLAogCQkJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldF9idWYpIHsKLQkJbWVtc2V0KHJldF9idWYsIDAsIHNpemVvZiAoc3RydWN0IGNpZnNUY29uSW5mbykpOwogCQl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkJYXRvbWljX2luYygmdGNvbkluZm9BbGxvY0NvdW50KTsKIAkJbGlzdF9hZGQoJnJldF9idWYtPmNpZnNDb25uZWN0aW9uTGlzdCwKQEAgLTQyMyw5ICs0MjEsNyBAQAogewogCV9fdTMyIGxlbiA9IHNtYi0+c21iX2J1Zl9sZW5ndGg7CiAJX191MzIgY2xjX2xlbjsgIC8qIGNhbGN1bGF0ZWQgbGVuZ3RoICovCi0JY0ZZSSgwLAotCSAgICAgKCJFbnRlcmluZyBjaGVja1NNQiB3aXRoIExlbmd0aDogJXgsIHNtYl9idWZfbGVuZ3RoOiAleCIsCi0JICAgICAgbGVuZ3RoLCBsZW4pKTsKKwljRllJKDAsICgiY2hlY2tTTUIgTGVuZ3RoOiAweCV4LCBzbWJfYnVmX2xlbmd0aDogMHgleCIsIGxlbmd0aCwgbGVuKSk7CiAJaWYgKCgodW5zaWduZWQgaW50KWxlbmd0aCA8IDIgKyBzaXplb2YgKHN0cnVjdCBzbWJfaGRyKSkgfHwKIAkgICAgKGxlbiA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUgLSA0KSkgewogCQlpZiAoKHVuc2lnbmVkIGludClsZW5ndGggPCAyICsgc2l6ZW9mIChzdHJ1Y3Qgc21iX2hkcikpIHsKQEAgLTQzMywyOSArNDI5LDM2IEBACiAJCQkJc2l6ZW9mIChzdHJ1Y3Qgc21iX2hkcikgLSAxKQogCQkJICAgICYmIChzbWItPlN0YXR1cy5DaWZzRXJyb3IgIT0gMCkpIHsKIAkJCQlzbWItPldvcmRDb3VudCA9IDA7Ci0JCQkJcmV0dXJuIDA7CS8qIHNvbWUgZXJyb3IgY2FzZXMgZG8gbm90IHJldHVybiB3Y3QgYW5kIGJjYyAqLworCQkJCS8qIHNvbWUgZXJyb3IgY2FzZXMgZG8gbm90IHJldHVybiB3Y3QgYW5kIGJjYyAqLworCQkJCXJldHVybiAwOwogCQkJfSBlbHNlIHsKIAkJCQljRVJST1IoMSwgKCJMZW5ndGggbGVzcyB0aGFuIHNtYiBoZWFkZXIgc2l6ZSIpKTsKIAkJCX0KLQogCQl9CiAJCWlmIChsZW4gPiBDSUZTTWF4QnVmU2l6ZSArIE1BWF9DSUZTX0hEUl9TSVpFIC0gNCkKLQkJCWNFUlJPUigxLAotCQkJICAgICAgICgic21iX2J1Zl9sZW5ndGggZ3JlYXRlciB0aGFuIE1heEJ1ZlNpemUiKSk7Ci0JCWNFUlJPUigxLAotCQkgICAgICAgKCJiYWQgc21iIGRldGVjdGVkLiBJbGxlZ2FsIGxlbmd0aC4gbWlkPSVkIiwKLQkJCXNtYi0+TWlkKSk7CisJCQljRVJST1IoMSwgKCJzbWIgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBNYXhCdWZTaXplLCBtaWQ9JWQiLAorCQkJCSAgIHNtYi0+TWlkKSk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmIChjaGVja1NNQmhkcihzbWIsIG1pZCkpCiAJCXJldHVybiAxOwogCWNsY19sZW4gPSBzbWJDYWxjU2l6ZV9MRShzbWIpOwotCWlmICgoNCArIGxlbiAhPSBjbGNfbGVuKQotCSAgICB8fCAoNCArIGxlbiAhPSAodW5zaWduZWQgaW50KWxlbmd0aCkpIHsKLQkJY0VSUk9SKDEsICgiQ2FsY3VsYXRlZCBzaXplIDB4JXggdnMgYWN0dWFsIGxlbmd0aCAweCV4IiwKLQkJCQljbGNfbGVuLCA0ICsgbGVuKSk7Ci0JCWNFUlJPUigxLCAoImJhZCBzbWIgc2l6ZSBkZXRlY3RlZCBmb3IgTWlkPSVkIiwgc21iLT5NaWQpKTsKKworCWlmKDQgKyBsZW4gIT0gKHVuc2lnbmVkIGludClsZW5ndGgpIHsKKwkJY0VSUk9SKDEsICgiTGVuZ3RoIHJlYWQgZG9lcyBub3QgbWF0Y2ggUkZDMTAwMSBsZW5ndGggJWQiLGxlbikpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoNCArIGxlbiAhPSBjbGNfbGVuKSB7CisJCS8qIGNoZWNrIGlmIGJjYyB3cmFwcGVkIGFyb3VuZCBmb3IgbGFyZ2UgcmVhZCByZXNwb25zZXMgKi8KKwkJaWYoKGxlbiA+IDY0ICogMTAyNCkgJiYgKGxlbiA+IGNsY19sZW4pKSB7CisJCQkvKiBjaGVjayBpZiBsZW5ndGhzIG1hdGNoIG1vZCA2NEsgKi8KKwkJCWlmKCgoNCArIGxlbikgJiAweEZGRkYpID09IChjbGNfbGVuICYgMHhGRkZGKSkKKwkJCQlyZXR1cm4gMDsgLyogYmNjIHdyYXBwZWQgKi8JCQkKKwkJfQorCQljRllJKDEsICgiQ2FsY3VsYXRlZCBzaXplICVkIHZzIGxlbmd0aCAlZCBtaXNtYXRjaCBmb3IgbWlkICVkIiwKKwkJCQljbGNfbGVuLCA0ICsgbGVuLCBzbWItPk1pZCkpOwogCQkvKiBXaW5kb3dzIFhQIGNhbiByZXR1cm4gYSBmZXcgYnl0ZXMgdG9vIG11Y2gsIHByZXN1bWFibHkKIAkJYW4gaWxsZWdhbCBwYWQsIGF0IHRoZSBlbmQgb2YgYnl0ZSByYW5nZSBsb2NrIHJlc3BvbnNlcyAKIAkJc28gd2UgYWxsb3cgZm9yIHRoYXQgdGhyZWUgYnl0ZSBwYWQsIGFzIGxvbmcgYXMgYWN0dWFsCkBAIC00NjksOCArNDcyLDExIEBACiAJCXdjdCBhbmQgYmNjIHRvIG1pbmltdW0gc2l6ZSBhbmQgZHJvcCB0aGUgdDIgcGFybXMgYW5kIGRhdGEgKi8KIAkJaWYoKDQrbGVuID4gY2xjX2xlbikgJiYgKGxlbiA8PSBjbGNfbGVuICsgNTEyKSkKIAkJCXJldHVybiAwOwotCQllbHNlCisJCWVsc2UgeworCQkJY0VSUk9SKDEsICgiUkZDMTAwMSBzaXplICVkIGJpZ2dlciB0aGFuIFNNQiBmb3IgTWlkPSVkIiwKKwkJCQkJbGVuLCBzbWItPk1pZCkpOwogCQkJcmV0dXJuIDE7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL250bG1zc3AuYyBiL2ZzL2NpZnMvbnRsbXNzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNTM1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL250bG1zc3AuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqICAgZnMvY2lmcy9udGxtc3NwLmgKKyAqCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDYKKyAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlICJjaWZzcGR1LmgiCisjaW5jbHVkZSAiY2lmc2dsb2IuaCIKKyNpbmNsdWRlICJjaWZzcHJvdG8uaCIKKyNpbmNsdWRlICJjaWZzX3VuaWNvZGUuaCIKKyNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCisjaW5jbHVkZSAibnRsbXNzcC5oIgorI2luY2x1ZGUgIm50ZXJyLmgiCisKKyNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKK3N0YXRpYyBfX3UzMiBjaWZzX3NzZXR1cF9oZHIoc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsIFNFU1NJT05fU0VUVVBfQU5EWCAqcFNNQikKK3sKKwlfX3UzMiBjYXBhYmlsaXRpZXMgPSAwOworCisJLyogaW5pdCBmaWVsZHMgY29tbW9uIHRvIGFsbCBmb3VyIHR5cGVzIG9mIFNlc3NTZXR1cCAqLworCS8qIG5vdGUgdGhhdCBoZWFkZXIgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBpbiBoZWFkZXJfYXNzZW1ibGUgKi8KKwlwU01CLT5yZXEuQW5kWENvbW1hbmQgPSAweEZGOworCXBTTUItPnJlcS5NYXhCdWZmZXJTaXplID0gY3B1X3RvX2xlMTYoc2VzLT5zZXJ2ZXItPm1heEJ1Zik7CisJcFNNQi0+cmVxLk1heE1weENvdW50ID0gY3B1X3RvX2xlMTYoc2VzLT5zZXJ2ZXItPm1heFJlcSk7CisKKwkvKiBOb3cgbm8gbmVlZCB0byBzZXQgU01CRkxHX0NBU0VMRVNTIG9yIG9ic29sZXRlIENBTk9OSUNBTCBQQVRIICovCisKKwkvKiBCQiB2ZXJpZnkgd2hldGhlciBzaWduaW5nIHJlcXVpcmVkIG9uIG5lZyBvciBqdXN0IG9uIGF1dGggZnJhbWUgCisJICAgKGFuZCBOVExNIGNhc2UpICovCisKKwljYXBhYmlsaXRpZXMgPSBDQVBfTEFSR0VfRklMRVMgfCBDQVBfTlRfU01CUyB8IENBUF9MRVZFTF9JSV9PUExPQ0tTIHwKKwkJCUNBUF9MQVJHRV9XUklURV9YIHwgQ0FQX0xBUkdFX1JFQURfWDsKKworCWlmKHNlcy0+c2VydmVyLT5zZWNNb2RlICYgKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8IFNFQ01PREVfU0lHTl9FTkFCTEVEKSkKKwkJcFNNQi0+cmVxLmhkci5GbGFnczIgfD0gU01CRkxHMl9TRUNVUklUWV9TSUdOQVRVUkU7CisKKwlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JQ09ERSkgeworCQlwU01CLT5yZXEuaGRyLkZsYWdzMiB8PSBTTUJGTEcyX1VOSUNPREU7CisJCWNhcGFiaWxpdGllcyB8PSBDQVBfVU5JQ09ERTsKKwl9CisJaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1NUQVRVUzMyKSB7CisJCXBTTUItPnJlcS5oZHIuRmxhZ3MyIHw9IFNNQkZMRzJfRVJSX1NUQVRVUzsKKwkJY2FwYWJpbGl0aWVzIHw9IENBUF9TVEFUVVMzMjsKKwl9CisJaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX0RGUykgeworCQlwU01CLT5yZXEuaGRyLkZsYWdzMiB8PSBTTUJGTEcyX0RGUzsKKwkJY2FwYWJpbGl0aWVzIHw9IENBUF9ERlM7CisJfQorCisJLyogQkIgY2hlY2sgd2hldGhlciB0byBpbml0IHZjbnVtIEJCICovCisJcmV0dXJuIGNhcGFiaWxpdGllczsKK30KK2ludCAKK0NJRlNfU2Vzc1NldHVwKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLCBjb25zdCBpbnQgdHlwZSwKKwkJICBpbnQgKiBwTlRMTXYyX2ZsZywgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NwKQoreworCWludCByYyA9IDA7CisJaW50IHdjdDsKKwlzdHJ1Y3Qgc21iX2hkciAqc21iX2J1ZmZlcjsKKwljaGFyICpiY2NfcHRyOworCVNFU1NJT05fU0VUVVBfQU5EWCAqcFNNQjsKKwlfX3UzMiBjYXBhYmlsaXRpZXM7CisKKwlpZihzZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljRllJKDEsKCJTU3RwIHR5cGU6ICVkIix0eXBlKSk7CisJaWYodHlwZSA8IENJRlNfTlRMTSkgeworI2lmbmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKKwkJLyogTEFOTUFOIGFuZCBwbGFpbnRleHQgYXJlIGxlc3Mgc2VjdXJlIGFuZCBvZmYgYnkgZGVmYXVsdC4KKwkJU28gd2UgbWFrZSB0aGlzIGV4cGxpY2l0bHkgYmUgdHVybmVkIG9uIGluIGtjb25maWcgKGluIHRoZQorCQlidWlsZCkgYW5kIHR1cm5lZCBvbiBhdCBydW50aW1lIChjaGFuZ2VkIGZyb20gdGhlIGRlZmF1bHQpCisJCWluIHByb2MvZnMvY2lmcyBvciB2aWEgbW91bnQgcGFybS4gIFVuZm9ydHVuYXRlbHkgdGhpcyBpcworCQluZWVkZWQgZm9yIG9sZCBXaW4gKGUuZy4gV2luOTUpLCBzb21lIG9ic2N1cmUgTkFTIGFuZCBPUy8yICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKyNlbmRpZgorCQl3Y3QgPSAxMDsgLyogbGFubWFuIDIgc3R5bGUgc2Vzc2lvbnNldHVwICovCisJfSBlbHNlIGlmKHR5cGUgPCBDSUZTX05UTE1TU1BfTkVHKQorCQl3Y3QgPSAxMzsgLyogb2xkIHN0eWxlIE5UTE0gc2Vzc2lvbnNldHVwICovCisJZWxzZSAvKiBzYW1lIHNpemUgZm9yIG5lZ290aWF0ZSBvciBhdXRoLCBOVExNU1NQIG9yIGV4dGVuZGVkIHNlY3VyaXR5ICovCisJCXdjdCA9IDEyOworCisJcmMgPSBzbWFsbF9zbWJfaW5pdF9ub190YyhTTUJfQ09NX1NFU1NJT05fU0VUVVBfQU5EWCwgd2N0LCBzZXMsCisJCQkgICAgKHZvaWQgKiopJnNtYl9idWZmZXIpOworCWlmKHJjKQorCQlyZXR1cm4gcmM7CisKKwlwU01CID0gKFNFU1NJT05fU0VUVVBfQU5EWCAqKXNtYl9idWZmZXI7CisKKwljYXBhYmlsaXRpZXMgPSBjaWZzX3NzZXR1cF9oZHIoc2VzLCBwU01CKTsKKwliY2NfcHRyID0gcEJ5dGVBcmVhKHNtYl9idWZmZXIpOworCWlmKHR5cGUgPiBDSUZTX05UTE0pIHsKKwkJcFNNQi0+cmVxLmhkci5GbGFnczIgfD0gU01CRkxHMl9FWFRfU0VDOworCQljYXBhYmlsaXRpZXMgfD0gQ0FQX0VYVEVOREVEX1NFQ1VSSVRZOworCQlwU01CLT5yZXEuQ2FwYWJpbGl0aWVzID0gY3B1X3RvX2xlMzIoY2FwYWJpbGl0aWVzKTsKKwkJLyogQkIgc2V0IHBhc3N3b3JkIGxlbmd0aHMgKi8KKwl9IGVsc2UgaWYodHlwZSA8IENJRlNfTlRMTSkgLyogbGFubWFuICovIHsKKwkJLyogbm8gY2FwYWJpbGl0aWVzIGZsYWdzIGluIG9sZCBsYW5tYW4gbmVnb3RpYXRpb24gKi8KKwkJLyogcFNNQi0+b2xkX3JlcS5QYXNzd29yZExlbmd0aCA9ICovIC8qIEJCIGZpeG1lIEJCICovCisJfSBlbHNlIC8qIHR5cGUgQ0lGU19OVExNICovIHsKKwkJcFNNQi0+cmVxX25vX3NlY2V4dC5DYXBhYmlsaXRpZXMgPSBjcHVfdG9fbGUzMihjYXBhYmlsaXRpZXMpOworCQlwU01CLT5yZXFfbm9fc2VjZXh0LkNhc2VJbnNlbnNpdGl2ZVBhc3N3b3JkTGVuZ3RoID0KKwkJCWNwdV90b19sZTE2KENJRlNfU0VTU0lPTl9LRVlfU0laRSk7CisJCXBTTUItPnJlcV9ub19zZWNleHQuQ2FzZVNlbnNpdGl2ZVBhc3N3b3JkTGVuZ3RoID0KKwkJCWNwdV90b19sZTE2KENJRlNfU0VTU0lPTl9LRVlfU0laRSk7CisJfQorCisKKwkvKiBjb3B5IHNlc3Npb24ga2V5ICovCisKKwkvKiBpZiBVbmljb2RlLCBhbGlnbiBzdHJpbmdzIHRvIHR3byBieXRlIGJvdW5kYXJ5ICovCisKKwkvKiBjb3B5IHVzZXIgbmFtZSAqLyAvKiBCQiBEbyB3ZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSBudWxsIHVzZXIgbmFtZT8gKi8KKworCS8qIGNvcHkgZG9tYWluIG5hbWUgKi8KKworCS8qIGNvcHkgTGludXggdmVyc2lvbiAqLworCisJLyogY29weSBuZXR3b3JrIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSAqLworCisJLyogdXBkYXRlIGJjYyBhbmQgc21iIGJ1ZmZlciBsZW5ndGggKi8KKworLyoJcmMgPSBTZW5kUmVjZWl2ZTIoeGlkLCBzZXMsIGlvdiwgbnVtX2lvdmVjcywgJnJlc3BfYnVmX3R5cGUsIDApOyAqLworCS8qIFNNQiByZXF1ZXN0IGJ1ZiBmcmVlZCBpbiBTZW5kUmVjZWl2ZTIgKi8KKworCXJldHVybiByYzsKK30KKyNlbmRpZiAvKiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbnRsbXNzcC5oIGIvZnMvY2lmcy9udGxtc3NwLmgKaW5kZXggODAzMzg5Yi4uZDM5YjcxMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9udGxtc3NwLmgKKysrIGIvZnMvY2lmcy9udGxtc3NwLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL250bG1zc3AuaAogICoKLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMgorICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDYKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqCiAgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9mcy9jaWZzL3JlYWRkaXIuYyBiL2ZzL2NpZnMvcmVhZGRpci5jCmluZGV4IDQ4OGJkMGQ4Li5iNjg5YzUwIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNDA0LDkgKzQwNCw3IEBACiAJaWYocFRjb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGUtPmZfZGVudHJ5KTsKLQltdXRleF91bmxvY2soJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01OTIsNiArNTkwLDEzIEBACiAJZmlyc3RfZW50cnlfaW5fYnVmZmVyID0gCiAJCWNpZnNGaWxlLT5zcmNoX2luZi5pbmRleF9vZl9sYXN0X2VudHJ5IC0gCiAJCQljaWZzRmlsZS0+c3JjaF9pbmYuZW50cmllc19pbl9idWZmZXI7CisKKwkvKiBpZiBmaXJzdCBlbnRyeSBpbiBidWYgaXMgemVybyB0aGVuIGlzIGZpcnN0IGJ1ZmZlcgorCWluIHNlYXJjaCByZXNwb25zZSBkYXRhIHdoaWNoIG1lYW5zIGl0IGlzIGxpa2VseSAuIGFuZCAuLgorCXdpbGwgYmUgaW4gdGhpcyBidWZmZXIsIGFsdGhvdWdoIHNvbWUgc2VydmVycyBkbyBub3QgcmV0dXJuCisJLiBhbmQgLi4gZm9yIHRoZSByb290IG9mIGEgZHJpdmUgYW5kIGZvciB0aG9zZSB3ZSBuZWVkCisJdG8gc3RhcnQgdHdvIGVudHJpZXMgZWFybGllciAqLworCiAvKglkdW1wX2NpZnNfZmlsZV9zdHJ1Y3QoZmlsZSwgIkluIGZjZSAiKTsqLwogCWlmKCgoaW5kZXhfdG9fZmluZCA8IGNpZnNGaWxlLT5zcmNoX2luZi5pbmRleF9vZl9sYXN0X2VudHJ5KSAmJiAKIAkgICAgIGlzX2Rpcl9jaGFuZ2VkKGZpbGUpKSB8fCAKQEAgLTYwNCw3ICs2MDksMTIgQEAKIAkJY2lmc0ZpbGUtPnNlYXJjaF9yZXN1bWVfbmFtZSA9IE5VTEw7CiAJCWlmKGNpZnNGaWxlLT5zcmNoX2luZi5udHdya19idWZfc3RhcnQpIHsKIAkJCWNGWUkoMSwoImZyZWVpbmcgU01CIGZmIGNhY2hlIGJ1ZiBvbiBzZWFyY2ggcmV3aW5kIikpOwotCQkJY2lmc19idWZfcmVsZWFzZShjaWZzRmlsZS0+c3JjaF9pbmYubnR3cmtfYnVmX3N0YXJ0KTsKKwkJCWlmKGNpZnNGaWxlLT5zcmNoX2luZi5zbWFsbEJ1ZikKKwkJCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGNpZnNGaWxlLT5zcmNoX2luZi4KKwkJCQkJCW50d3JrX2J1Zl9zdGFydCk7CisJCQllbHNlCisJCQkJY2lmc19idWZfcmVsZWFzZShjaWZzRmlsZS0+c3JjaF9pbmYuCisJCQkJCQludHdya19idWZfc3RhcnQpOwogCQl9CiAJCXJjID0gaW5pdGlhdGVfY2lmc19zZWFyY2goeGlkLGZpbGUpOwogCQlpZihyYykgewpAQCAtNjI5LDIzICs2MzksMTQgQEAKIAkJY2hhciAqIGVuZF9vZl9zbWIgPSBjaWZzRmlsZS0+c3JjaF9pbmYubnR3cmtfYnVmX3N0YXJ0ICsgCiAJCQlzbWJDYWxjU2l6ZSgoc3RydWN0IHNtYl9oZHIgKikKIAkJCQljaWZzRmlsZS0+c3JjaF9pbmYubnR3cmtfYnVmX3N0YXJ0KTsKKworCQljdXJyZW50X2VudHJ5ID0gY2lmc0ZpbGUtPnNyY2hfaW5mLnNyY2hfZW50cmllc19zdGFydDsKIAkJZmlyc3RfZW50cnlfaW5fYnVmZmVyID0gY2lmc0ZpbGUtPnNyY2hfaW5mLmluZGV4X29mX2xhc3RfZW50cnkKIAkJCQkJLSBjaWZzRmlsZS0+c3JjaF9pbmYuZW50cmllc19pbl9idWZmZXI7CiAJCXBvc19pbl9idWYgPSBpbmRleF90b19maW5kIC0gZmlyc3RfZW50cnlfaW5fYnVmZmVyOwogCQljRllJKDEsKCJmb3VuZCBlbnRyeSAtIHBvc19pbl9idWYgJWQiLHBvc19pbl9idWYpKTsgCi0JCWN1cnJlbnRfZW50cnkgPSBjaWZzRmlsZS0+c3JjaF9pbmYuc3JjaF9lbnRyaWVzX3N0YXJ0OwogCQlmb3IoaT0wOyhpPChwb3NfaW5fYnVmKSkgJiYgKGN1cnJlbnRfZW50cnkgIT0gTlVMTCk7aSsrKSB7CiAJCQkvKiBnbyBlbnRyeSBieSBlbnRyeSBmaWd1cmluZyBvdXQgd2hpY2ggaXMgZmlyc3QgKi8KLQkJCS8qIGlmKCAuIG9yIC4uKQotCQkJCXNraXAgKi8KLQkJCXJjID0gY2lmc19lbnRyeV9pc19kb3QoY3VycmVudF9lbnRyeSxjaWZzRmlsZSk7Ci0JCQlpZihyYyA9PSAxKSAvKiBpcyAuIG9yIC4uIHNvIHNraXAgKi8gewotCQkJCWNGWUkoMSwoIkVudHJ5IGlzIC4iKSk7IC8qIEJCIHJlbW92ZW1lIEJCICovCi0JCQkJLyogY29udGludWU7ICovCi0JCQl9IGVsc2UgaWYgKHJjID09IDIgKSB7Ci0JCQkJY0ZZSSgxLCgiRW50cnkgaXMgLi4iKSk7IC8qIEJCIHJlbW92ZW1lIEJCICovCi0JCQkJLyogY29udGludWU7ICovCi0JCQl9CiAJCQljdXJyZW50X2VudHJ5ID0gbnh0X2Rpcl9lbnRyeShjdXJyZW50X2VudHJ5LGVuZF9vZl9zbWIpOwogCQl9CiAJCWlmKChjdXJyZW50X2VudHJ5ID09IE5VTEwpICYmIChpIDwgcG9zX2luX2J1ZikpIHsKQEAgLTc2NSw2ICs3NjYsMTEgQEAKIAlpZihmaWxlLT5mX2RlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKIAorCXJjID0gY2lmc19lbnRyeV9pc19kb3QocGZpbmRFbnRyeSxwQ2lmc0YpOworCS8qIHNraXAgLiBhbmQgLi4gc2luY2Ugd2UgYWRkZWQgdGhlbSBmaXJzdCAqLworCWlmKHJjICE9IDApIAorCQlyZXR1cm4gMDsKKwogCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKIAogCXFzdHJpbmcubmFtZSA9IHNjcmF0Y2hfYnVmOwpAQCAtODkzLDIyICs4OTksMjIgQEAKIAogCXN3aXRjaCAoKGludCkgZmlsZS0+Zl9wb3MpIHsKIAljYXNlIDA6Ci0JCS8qaWYgKGZpbGxkaXIoZGlyZW50cnksICIuIiwgMSwgZmlsZS0+Zl9wb3MsCisJCWlmIChmaWxsZGlyKGRpcmVudHJ5LCAiLiIsIDEsIGZpbGUtPmZfcG9zLAogCQkgICAgIGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubywgRFRfRElSKSA8IDApIHsKLQkJCWNFUlJPUigxLCAoIkZpbGxkaXIgZm9yIGN1cnJlbnQgZGlyIGZhaWxlZCAiKSk7CisJCQljRVJST1IoMSwgKCJGaWxsZGlyIGZvciBjdXJyZW50IGRpciBmYWlsZWQiKSk7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlicmVhazsKIAkJfQotCQlmaWxlLT5mX3BvcysrOyAqLworCQlmaWxlLT5mX3BvcysrOwogCWNhc2UgMToKLQkJLyogaWYgKGZpbGxkaXIoZGlyZW50cnksICIuLiIsIDIsIGZpbGUtPmZfcG9zLAorCQlpZiAoZmlsbGRpcihkaXJlbnRyeSwgIi4uIiwgMiwgZmlsZS0+Zl9wb3MsCiAJCSAgICAgZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX2lubywgRFRfRElSKSA8IDApIHsKIAkJCWNFUlJPUigxLCAoIkZpbGxkaXIgZm9yIHBhcmVudCBkaXIgZmFpbGVkICIpKTsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWJyZWFrOwogCQl9Ci0JCWZpbGUtPmZfcG9zKys7ICovCi0JY2FzZSAyOgorCQlmaWxlLT5mX3BvcysrOworCWRlZmF1bHQ6CiAJCS8qIDEpIElmIHNlYXJjaCBpcyBhY3RpdmUsIAogCQkJaXMgaW4gY3VycmVudCBzZWFyY2ggYnVmZmVyPyAKIAkJCWlmIGl0IGJlZm9yZSB0aGVuIHJlc3RhcnQgc2VhcmNoCkBAIC05MjIsNyArOTI4LDYgQEAKIAkJCQlyZXR1cm4gcmM7CiAJCQl9CiAJCX0KLQlkZWZhdWx0OgogCQlpZihmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkgewogCQkJcmMgPSAtRUlOVkFMOwogCQkJRnJlZVhpZCh4aWQpOwpAQCAtOTQyLDggKzk0Nyw2IEBACiAJCWtmcmVlKGNpZnNGaWxlLT5zZWFyY2hfcmVzdW1lX25hbWUpOwogCQljaWZzRmlsZS0+c2VhcmNoX3Jlc3VtZV9uYW1lID0gTlVMTDsgKi8KIAotCQkvKiBCQiBhY2NvdW50IGZvciAuIGFuZCAuLiBpbiBmX3BvcyBhcyBzcGVjaWFsIGNhc2UgKi8KLQogCQlyYyA9IGZpbmRfY2lmc19lbnRyeSh4aWQscFRjb24sIGZpbGUsCiAJCQkJJmN1cnJlbnRfZW50cnksJm51bV90b19maWxsKTsKIAkJaWYocmMpIHsKQEAgLTk3Miw3ICs5NzUsOCBAQAogCQkJCQkgIG51bV90b19maWxsLCBpKSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0KKwkJCS8qIGlmIGJ1Z2d5IHNlcnZlciByZXR1cm5zIC4gYW5kIC4uIGxhdGUgZG8KKwkJCXdlIHdhbnQgdG8gY2hlY2sgZm9yIHRoYXQgaGVyZT8gKi8KIAkJCXJjID0gY2lmc19maWxsZGlyKGN1cnJlbnRfZW50cnksIGZpbGUsIAogCQkJCQlmaWxsZGlyLCBkaXJlbnRyeSx0bXBfYnVmKTsKIAkJCWZpbGUtPmZfcG9zKys7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3RyYW5zcG9ydC5jIGIvZnMvY2lmcy90cmFuc3BvcnQuYwppbmRleCBiMTJjYjhhLi4zZGE4MDQwIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTMwOSwxNyArMzA5LDE2IEBACiAJCiAJKnBSZXNwQnVmVHlwZSA9IENJRlNfTk9fQlVGRkVSOyAgLyogbm8gcmVzcG9uc2UgYnVmIHlldCAqLwogCi0JaWYgKHNlcyA9PSBOVUxMKSB7Ci0JCWNFUlJPUigxLCgiTnVsbCBzbWIgc2Vzc2lvbiIpKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmKHNlcy0+c2VydmVyID09IE5VTEwpIHsKLQkJY0VSUk9SKDEsKCJOdWxsIHRjcCBzZXNzaW9uIikpOworCWlmICgoc2VzID09IE5VTEwpIHx8IChzZXMtPnNlcnZlciA9PSBOVUxMKSkgeworCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CisJCWNFUlJPUigxLCgiTnVsbCBzZXNzaW9uIikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpZihzZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNFeGl0aW5nKQorCWlmKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKKwkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCQlyZXR1cm4gLUVOT0VOVDsKKwl9CiAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBkbyBub3Qgc2VuZCBtb3JlIHRoYW4gNTAgb3ZlcmxhcHBpbmcgcmVxdWVzdHMgCiAJICAgdG8gdGhlIHNhbWUgc2VydmVyLiBXZSBtYXkgbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBsYXRlciBvcgpAQCAtMzQ2LDYgKzM0NSw3IEBACiAJCQl9IGVsc2UgewogCQkJCWlmKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKIAkJCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCQkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCQkJCQlyZXR1cm4gLUVOT0VOVDsKIAkJCQl9CiAKQEAgLTM4NSw2ICszODUsNyBAQAogCW1pZFEgPSBBbGxvY01pZFFFbnRyeShpbl9idWYsIHNlcyk7CiAJaWYgKG1pZFEgPT0gTlVMTCkgewogCQl1cCgmc2VzLT5zZXJ2ZXItPnRjcFNlbSk7CisJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAkJLyogSWYgbm90IGxvY2sgcmVxLCB1cGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqLwogCQlpZihsb25nX29wIDwgMykgewogCQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsgCkBAIC00MDgsMTQgKzQwOSwxOCBAQAogCWlmKHJjIDwgMCkgewogCQlEZWxldGVNaWRRRW50cnkobWlkUSk7CiAJCXVwKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsKKwkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCQkvKiBJZiBub3QgbG9jayByZXEsIHVwZGF0ZSAjIG9mIHJlcXVlc3RzIG9uIHdpcmUgdG8gc2VydmVyICovCiAJCWlmKGxvbmdfb3AgPCAzKSB7CiAJCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOyAKIAkJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwogCQl9CiAJCXJldHVybiByYzsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQl1cCgmc2VzLT5zZXJ2ZXItPnRjcFNlbSk7CisJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKKwl9CisKIAlpZiAobG9uZ19vcCA9PSAtMSkKIAkJZ290byBjaWZzX25vX3Jlc3BvbnNlX2V4aXQyOwogCWVsc2UgaWYgKGxvbmdfb3AgPT0gMikgLyogd3JpdGVzIHBhc3QgZW5kIG9mIGZpbGUgY2FuIHRha2UgbG9vbmcgdGltZSAqLwpAQCAtNTQzLDYgKzU0OCw3IEBACiAKIG91dF91bmxvY2syOgogCXVwKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsKKwljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CiAJLyogSWYgbm90IGxvY2sgcmVxLCB1cGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqLwogCWlmKGxvbmdfb3AgPCAzKSB7CiAJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7IApkaWZmIC0tZ2l0IGEvZnMvY2lmcy94YXR0ci5jIGIvZnMvY2lmcy94YXR0ci5jCmluZGV4IDM5Mzg0NDQuLjc3NTRkNjQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMKQEAgLTYyLDkgKzYyLDcgQEAKIAljaWZzX3NiID0gQ0lGU19TQihzYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCW11dGV4X2xvY2soJnNiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCW11dGV4X3VubG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTExNiw5ICsxMTQsNyBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQltdXRleF9sb2NrKCZzYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQltdXRleF91bmxvY2soJnNiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjMsOSArMjE5LDcgQEAKIAljaWZzX3NiID0gQ0lGU19TQihzYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JbXV0ZXhfbG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZzYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzQxLDkgKzMzNSw3IEBACiAJY2lmc19zYiA9IENJRlNfU0Ioc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCW11dGV4X2xvY2soJnNiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCW11dGV4X3VubG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggN2Y4ZTI2ZS4uYjFmNjQ3OCAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTEyMTcsNiArMTIxNywxMCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAorCXJldCA9IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbihmaWxlLCB0eXBlID09IFJFQUQgPyBNQVlfUkVBRDpNQVlfV1JJVEUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCiAJZm52ID0gTlVMTDsKIAlpZiAodHlwZSA9PSBSRUFEKSB7CiAJCWZuID0gZmlsZS0+Zl9vcC0+cmVhZDsKQEAgLTEzMTMsNiArMTMxNywyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2FzbWxpbmthZ2UgbG9uZworY29tcGF0X3N5c192bXNwbGljZShpbnQgZmQsIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICppb3YzMiwKKwkJICAgIHVuc2lnbmVkIGludCBucl9zZWdzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaTsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlpZiAobnJfc2VncyA+IFVJT19NQVhJT1YpCisJCXJldHVybiAtRUlOVkFMOworCWlvdiA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGlvdmVjKSk7CisJZm9yIChpID0gMDsgaSA8IG5yX3NlZ3M7IGkrKykgeworCQlzdHJ1Y3QgY29tcGF0X2lvdmVjIHY7CisJCWlmIChnZXRfdXNlcih2Lmlvdl9iYXNlLCAmaW92MzJbaV0uaW92X2Jhc2UpIHx8CisJCSAgICBnZXRfdXNlcih2Lmlvdl9sZW4sICZpb3YzMltpXS5pb3ZfbGVuKSB8fAorCQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cih2Lmlvdl9iYXNlKSwgJmlvdltpXS5pb3ZfYmFzZSkgfHwKKwkJICAgIHB1dF91c2VyKHYuaW92X2xlbiwgJmlvdltpXS5pb3ZfbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gc3lzX3Ztc3BsaWNlKGZkLCBpb3YsIG5yX3NlZ3MsIGZsYWdzKTsKK30KKwogLyoKICAqIEV4YWN0bHkgbGlrZSBmcy9vcGVuLmM6c3lzX29wZW4oKSwgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBzZXQgdGhlCiAgKiBPX0xBUkdFRklMRSBmbGFnLgpAQCAtMTg4OSw3ICsxOTEzLDcgQEAKIAl9CiAKIAlpZiAoc2lnbWFzaykgewotCQlpZiAoc2lnc2V0c2l6ZSB8PSBzaXplb2YoY29tcGF0X3NpZ3NldF90KSkKKwkJaWYgKHNpZ3NldHNpemUgIT0gc2l6ZW9mKGNvbXBhdF9zaWdzZXRfdCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZzczMyLCBzaWdtYXNrLCBzaXplb2Yoc3MzMikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMDA2LDEwOSArMjAzMCwxMTUgQEAKIAlzdHJ1Y3Qga25mc2RfZmgJCWNyMzJfZ2V0ZnM7CiB9OwogCi1zdGF0aWMgaW50IGNvbXBhdF9uZnNfc3ZjX3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLCBzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcpCitzdGF0aWMgaW50IGNvbXBhdF9uZnNfc3ZjX3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLAorCQkJCXN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZykKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gYWNjZXNzX29rKFZFUklGWV9SRUFELCAmYXJnLT5jYTMyX3N2Yywgc2l6ZW9mKGFyZy0+Y2EzMl9zdmMpKTsKLQllcnIgfD0gZ2V0X3VzZXIoa2FyZy0+Y2FfdmVyc2lvbiwgJmFyZy0+Y2EzMl92ZXJzaW9uKTsKLQllcnIgfD0gX19nZXRfdXNlcihrYXJnLT5jYV9zdmMuc3ZjX3BvcnQsICZhcmctPmNhMzJfc3ZjLnN2YzMyX3BvcnQpOwotCWVyciB8PSBfX2dldF91c2VyKGthcmctPmNhX3N2Yy5zdmNfbnRocmVhZHMsICZhcmctPmNhMzJfc3ZjLnN2YzMyX250aHJlYWRzKTsKLQlyZXR1cm4gKGVycikgPyAtRUZBVUxUIDogMDsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgJmFyZy0+Y2EzMl9zdmMsIHNpemVvZihhcmctPmNhMzJfc3ZjKSkgfHwKKwkJZ2V0X3VzZXIoa2FyZy0+Y2FfdmVyc2lvbiwgJmFyZy0+Y2EzMl92ZXJzaW9uKSB8fAorCQlfX2dldF91c2VyKGthcmctPmNhX3N2Yy5zdmNfcG9ydCwgJmFyZy0+Y2EzMl9zdmMuc3ZjMzJfcG9ydCkgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9zdmMuc3ZjX250aHJlYWRzLAorCQkJCSZhcmctPmNhMzJfc3ZjLnN2YzMyX250aHJlYWRzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X25mc19jbG50X3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLCBzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcpCitzdGF0aWMgaW50IGNvbXBhdF9uZnNfY2xudF90cmFucyhzdHJ1Y3QgbmZzY3RsX2FyZyAqa2FyZywKKwkJCQlzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcpCiB7Ci0JaW50IGVycjsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgJmFyZy0+Y2EzMl9jbGllbnQsCisJCQlzaXplb2YoYXJnLT5jYTMyX2NsaWVudCkpIHx8CisJCWdldF91c2VyKGthcmctPmNhX3ZlcnNpb24sICZhcmctPmNhMzJfdmVyc2lvbikgfHwKKwkJX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfY2xpZW50LmNsX2lkZW50WzBdLAorCQkJCSZhcmctPmNhMzJfY2xpZW50LmNsMzJfaWRlbnRbMF0sCisJCQkJTkZTQ0xOVF9JRE1BWCkgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9jbGllbnQuY2xfbmFkZHIsCisJCQkJJmFyZy0+Y2EzMl9jbGllbnQuY2wzMl9uYWRkcikgfHwKKwkJX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfY2xpZW50LmNsX2FkZHJsaXN0WzBdLAorCQkJCSZhcmctPmNhMzJfY2xpZW50LmNsMzJfYWRkcmxpc3RbMF0sCisJCQkJKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikgKiBORlNDTE5UX0FERFJNQVgpKSB8fAorCQlfX2dldF91c2VyKGthcmctPmNhX2NsaWVudC5jbF9maGtleXR5cGUsCisJCQkJJmFyZy0+Y2EzMl9jbGllbnQuY2wzMl9maGtleXR5cGUpIHx8CisJCV9fZ2V0X3VzZXIoa2FyZy0+Y2FfY2xpZW50LmNsX2Zoa2V5bGVuLAorCQkJCSZhcmctPmNhMzJfY2xpZW50LmNsMzJfZmhrZXlsZW4pIHx8CisJCV9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2NsaWVudC5jbF9maGtleVswXSwKKwkJCQkmYXJnLT5jYTMyX2NsaWVudC5jbDMyX2Zoa2V5WzBdLAorCQkJCU5GU0NMTlRfS0VZTUFYKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICZhcmctPmNhMzJfY2xpZW50LCBzaXplb2YoYXJnLT5jYTMyX2NsaWVudCkpOwotCWVyciB8PSBnZXRfdXNlcihrYXJnLT5jYV92ZXJzaW9uLCAmYXJnLT5jYTMyX3ZlcnNpb24pOwotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9jbGllbnQuY2xfaWRlbnRbMF0sCi0JCQkgICZhcmctPmNhMzJfY2xpZW50LmNsMzJfaWRlbnRbMF0sCi0JCQkgIE5GU0NMTlRfSURNQVgpOwotCWVyciB8PSBfX2dldF91c2VyKGthcmctPmNhX2NsaWVudC5jbF9uYWRkciwgJmFyZy0+Y2EzMl9jbGllbnQuY2wzMl9uYWRkcik7Ci0JZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2NsaWVudC5jbF9hZGRybGlzdFswXSwKLQkJCSAgJmFyZy0+Y2EzMl9jbGllbnQuY2wzMl9hZGRybGlzdFswXSwKLQkJCSAgKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikgKiBORlNDTE5UX0FERFJNQVgpKTsKLQllcnIgfD0gX19nZXRfdXNlcihrYXJnLT5jYV9jbGllbnQuY2xfZmhrZXl0eXBlLAotCQkgICAgICAmYXJnLT5jYTMyX2NsaWVudC5jbDMyX2Zoa2V5dHlwZSk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoa2FyZy0+Y2FfY2xpZW50LmNsX2Zoa2V5bGVuLAotCQkgICAgICAmYXJnLT5jYTMyX2NsaWVudC5jbDMyX2Zoa2V5bGVuKTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfY2xpZW50LmNsX2Zoa2V5WzBdLAotCQkJICAmYXJnLT5jYTMyX2NsaWVudC5jbDMyX2Zoa2V5WzBdLAotCQkJICBORlNDTE5UX0tFWU1BWCk7Ci0KLQlyZXR1cm4gKGVycikgPyAtRUZBVUxUIDogMDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb21wYXRfbmZzX2V4cF90cmFucyhzdHJ1Y3QgbmZzY3RsX2FyZyAqa2FyZywgc3RydWN0IGNvbXBhdF9uZnNjdGxfYXJnIF9fdXNlciAqYXJnKQorc3RhdGljIGludCBjb21wYXRfbmZzX2V4cF90cmFucyhzdHJ1Y3QgbmZzY3RsX2FyZyAqa2FyZywKKwkJCQlzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IGFjY2Vzc19vayhWRVJJRllfUkVBRCwgJmFyZy0+Y2EzMl9leHBvcnQsIHNpemVvZihhcmctPmNhMzJfZXhwb3J0KSk7Ci0JZXJyIHw9IGdldF91c2VyKGthcmctPmNhX3ZlcnNpb24sICZhcmctPmNhMzJfdmVyc2lvbik7Ci0JZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2V4cG9ydC5leF9jbGllbnRbMF0sCi0JCQkgICZhcmctPmNhMzJfZXhwb3J0LmV4MzJfY2xpZW50WzBdLAotCQkJICBORlNDTE5UX0lETUFYKTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZXhwb3J0LmV4X3BhdGhbMF0sCi0JCQkgICZhcmctPmNhMzJfZXhwb3J0LmV4MzJfcGF0aFswXSwKLQkJCSAgTkZTX01BWFBBVEhMRU4pOwotCWVyciB8PSBfX2dldF91c2VyKGthcmctPmNhX2V4cG9ydC5leF9kZXYsCi0JCSAgICAgICZhcmctPmNhMzJfZXhwb3J0LmV4MzJfZGV2KTsKLQllcnIgfD0gX19nZXRfdXNlcihrYXJnLT5jYV9leHBvcnQuZXhfaW5vLAotCQkgICAgICAmYXJnLT5jYTMyX2V4cG9ydC5leDMyX2lubyk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoa2FyZy0+Y2FfZXhwb3J0LmV4X2ZsYWdzLAotCQkgICAgICAmYXJnLT5jYTMyX2V4cG9ydC5leDMyX2ZsYWdzKTsKLQllcnIgfD0gX19nZXRfdXNlcihrYXJnLT5jYV9leHBvcnQuZXhfYW5vbl91aWQsCi0JCSAgICAgICZhcmctPmNhMzJfZXhwb3J0LmV4MzJfYW5vbl91aWQpOwotCWVyciB8PSBfX2dldF91c2VyKGthcmctPmNhX2V4cG9ydC5leF9hbm9uX2dpZCwKLQkJICAgICAgJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9hbm9uX2dpZCk7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICZhcmctPmNhMzJfZXhwb3J0LAorCQkJCXNpemVvZihhcmctPmNhMzJfZXhwb3J0KSkgfHwKKwkJZ2V0X3VzZXIoa2FyZy0+Y2FfdmVyc2lvbiwgJmFyZy0+Y2EzMl92ZXJzaW9uKSB8fAorCQlfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9leHBvcnQuZXhfY2xpZW50WzBdLAorCQkJCSZhcmctPmNhMzJfZXhwb3J0LmV4MzJfY2xpZW50WzBdLAorCQkJCU5GU0NMTlRfSURNQVgpIHx8CisJCV9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2V4cG9ydC5leF9wYXRoWzBdLAorCQkJCSZhcmctPmNhMzJfZXhwb3J0LmV4MzJfcGF0aFswXSwKKwkJCQlORlNfTUFYUEFUSExFTikgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9leHBvcnQuZXhfZGV2LAorCQkJCSZhcmctPmNhMzJfZXhwb3J0LmV4MzJfZGV2KSB8fAorCQlfX2dldF91c2VyKGthcmctPmNhX2V4cG9ydC5leF9pbm8sCisJCQkJJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9pbm8pIHx8CisJCV9fZ2V0X3VzZXIoa2FyZy0+Y2FfZXhwb3J0LmV4X2ZsYWdzLAorCQkJCSZhcmctPmNhMzJfZXhwb3J0LmV4MzJfZmxhZ3MpIHx8CisJCV9fZ2V0X3VzZXIoa2FyZy0+Y2FfZXhwb3J0LmV4X2Fub25fdWlkLAorCQkJCSZhcmctPmNhMzJfZXhwb3J0LmV4MzJfYW5vbl91aWQpIHx8CisJCV9fZ2V0X3VzZXIoa2FyZy0+Y2FfZXhwb3J0LmV4X2Fub25fZ2lkLAorCQkJCSZhcmctPmNhMzJfZXhwb3J0LmV4MzJfYW5vbl9naWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAlTRVRfVUlEKGthcmctPmNhX2V4cG9ydC5leF9hbm9uX3VpZCwga2FyZy0+Y2FfZXhwb3J0LmV4X2Fub25fdWlkKTsKIAlTRVRfR0lEKGthcmctPmNhX2V4cG9ydC5leF9hbm9uX2dpZCwga2FyZy0+Y2FfZXhwb3J0LmV4X2Fub25fZ2lkKTsKIAotCXJldHVybiAoZXJyKSA/IC1FRkFVTFQgOiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvbXBhdF9uZnNfZ2V0ZmRfdHJhbnMoc3RydWN0IG5mc2N0bF9hcmcgKmthcmcsIHN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgY29tcGF0X25mc19nZXRmZF90cmFucyhzdHJ1Y3QgbmZzY3RsX2FyZyAqa2FyZywKKwkJCQlzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcpCiB7Ci0JaW50IGVycjsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgJmFyZy0+Y2EzMl9nZXRmZCwKKwkJCXNpemVvZihhcmctPmNhMzJfZ2V0ZmQpKSB8fAorCQlnZXRfdXNlcihrYXJnLT5jYV92ZXJzaW9uLCAmYXJnLT5jYTMyX3ZlcnNpb24pIHx8CisJCV9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2dldGZkLmdkX2FkZHIsCisJCQkJJmFyZy0+Y2EzMl9nZXRmZC5nZDMyX2FkZHIsCisJCQkJKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSkgfHwKKwkJX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZ2V0ZmQuZ2RfcGF0aCwKKwkJCQkmYXJnLT5jYTMyX2dldGZkLmdkMzJfcGF0aCwKKwkJCQkoTkZTX01BWFBBVEhMRU4rMSkpIHx8CisJCV9fZ2V0X3VzZXIoa2FyZy0+Y2FfZ2V0ZmQuZ2RfdmVyc2lvbiwKKwkJCQkmYXJnLT5jYTMyX2dldGZkLmdkMzJfdmVyc2lvbikpCisJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gYWNjZXNzX29rKFZFUklGWV9SRUFELCAmYXJnLT5jYTMyX2dldGZkLCBzaXplb2YoYXJnLT5jYTMyX2dldGZkKSk7Ci0JZXJyIHw9IGdldF91c2VyKGthcmctPmNhX3ZlcnNpb24sICZhcmctPmNhMzJfdmVyc2lvbik7Ci0JZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2dldGZkLmdkX2FkZHIsCi0JCQkgICZhcmctPmNhMzJfZ2V0ZmQuZ2QzMl9hZGRyLAotCQkJICAoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpKTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZ2V0ZmQuZ2RfcGF0aCwKLQkJCSAgJmFyZy0+Y2EzMl9nZXRmZC5nZDMyX3BhdGgsCi0JCQkgIChORlNfTUFYUEFUSExFTisxKSk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoa2FyZy0+Y2FfZ2V0ZmQuZ2RfdmVyc2lvbiwKLQkJICAgICAgJmFyZy0+Y2EzMl9nZXRmZC5nZDMyX3ZlcnNpb24pOwotCi0JcmV0dXJuIChlcnIpID8gLUVGQVVMVCA6IDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X25mc19nZXRmc190cmFucyhzdHJ1Y3QgbmZzY3RsX2FyZyAqa2FyZywgc3RydWN0IGNvbXBhdF9uZnNjdGxfYXJnIF9fdXNlciAqYXJnKQorc3RhdGljIGludCBjb21wYXRfbmZzX2dldGZzX3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLAorCQkJCXN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZykKIHsKLQlpbnQgZXJyOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCZhcmctPmNhMzJfZ2V0ZnMsc2l6ZW9mKGFyZy0+Y2EzMl9nZXRmcykpIHx8CisJCWdldF91c2VyKGthcmctPmNhX3ZlcnNpb24sICZhcmctPmNhMzJfdmVyc2lvbikgfHwKKwkJX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZ2V0ZnMuZ2RfYWRkciwKKwkJCQkmYXJnLT5jYTMyX2dldGZzLmdkMzJfYWRkciwKKwkJCQkoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpKSB8fAorCQlfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9nZXRmcy5nZF9wYXRoLAorCQkJCSZhcmctPmNhMzJfZ2V0ZnMuZ2QzMl9wYXRoLAorCQkJCShORlNfTUFYUEFUSExFTisxKSkgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9nZXRmcy5nZF9tYXhsZW4sCisJCQkJJmFyZy0+Y2EzMl9nZXRmcy5nZDMyX21heGxlbikpCisJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gYWNjZXNzX29rKFZFUklGWV9SRUFELCAmYXJnLT5jYTMyX2dldGZzLCBzaXplb2YoYXJnLT5jYTMyX2dldGZzKSk7Ci0JZXJyIHw9IGdldF91c2VyKGthcmctPmNhX3ZlcnNpb24sICZhcmctPmNhMzJfdmVyc2lvbik7Ci0JZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2dldGZzLmdkX2FkZHIsCi0JCQkgICZhcmctPmNhMzJfZ2V0ZnMuZ2QzMl9hZGRyLAotCQkJICAoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpKTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZ2V0ZnMuZ2RfcGF0aCwKLQkJCSAgJmFyZy0+Y2EzMl9nZXRmcy5nZDMyX3BhdGgsCi0JCQkgIChORlNfTUFYUEFUSExFTisxKSk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoa2FyZy0+Y2FfZ2V0ZnMuZ2RfbWF4bGVuLAotCQkgICAgICAmYXJnLT5jYTMyX2dldGZzLmdkMzJfbWF4bGVuKTsKLQotCXJldHVybiAoZXJyKSA/IC1FRkFVTFQgOiAwOworCXJldHVybiAwOwogfQogCiAvKiBUaGlzIHJlYWxseSBkb2Vzbid0IG5lZWQgdHJhbnNsYXRpb25zLCB3ZSBhcmUgb25seSBwYXNzaW5nCiAgKiBiYWNrIGEgdW5pb24gd2hpY2ggY29udGFpbnMgb3BhcXVlIG5mcyBmaWxlIGhhbmRsZSBkYXRhLgogICovCi1zdGF0aWMgaW50IGNvbXBhdF9uZnNfZ2V0ZmhfcmVzX3RyYW5zKHVuaW9uIG5mc2N0bF9yZXMgKmtyZXMsIHVuaW9uIGNvbXBhdF9uZnNjdGxfcmVzIF9fdXNlciAqcmVzKQorc3RhdGljIGludCBjb21wYXRfbmZzX2dldGZoX3Jlc190cmFucyh1bmlvbiBuZnNjdGxfcmVzICprcmVzLAorCQkJCXVuaW9uIGNvbXBhdF9uZnNjdGxfcmVzIF9fdXNlciAqcmVzKQogewogCWludCBlcnI7CiAKQEAgLTIxMTcsOCArMjE0Nyw5IEBACiAJcmV0dXJuIChlcnIpID8gLUVGQVVMVCA6IDA7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX25mc3NlcnZjdGwoaW50IGNtZCwgc3RydWN0IGNvbXBhdF9uZnNjdGxfYXJnIF9fdXNlciAqYXJnLAotCQkJCQl1bmlvbiBjb21wYXRfbmZzY3RsX3JlcyBfX3VzZXIgKnJlcykKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX25mc3NlcnZjdGwoaW50IGNtZCwKKwkJCQlzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcsCisJCQkJdW5pb24gY29tcGF0X25mc2N0bF9yZXMgX191c2VyICpyZXMpCiB7CiAJc3RydWN0IG5mc2N0bF9hcmcgKmthcmc7CiAJdW5pb24gbmZzY3RsX3JlcyAqa3JlczsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmMKaW5kZXggOGVkOWIwNi4uNWY5NTIxOCAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvZGlyLmMKKysrIGIvZnMvY29uZmlnZnMvZGlyLmMKQEAgLTUwNCwxNCArNTA0LDE2IEBACiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKLQlpZiAoZ3JvdXAgJiYgZ3JvdXAtPmRlZmF1bHRfZ3JvdXBzKSB7Ci0JCS8qIEZZSSwgd2UncmUgZmFraW5nIG1rZGlyIGhlcmUKKwlpZiAoZ3JvdXAtPmRlZmF1bHRfZ3JvdXBzKSB7CisJCS8qCisJCSAqIEZZSSwgd2UncmUgZmFraW5nIG1rZGlyIGhlcmUKIAkJICogSSdtIG5vdCBzdXJlIHdlIG5lZWQgdGhpcyBzZW1hcGhvcmUsIGFzIHdlJ3JlIGNhbGxlZAogCQkgKiBmcm9tIG91ciBwYXJlbnQncyBta2Rpci4gIFRoYXQgaG9sZHMgb3VyIHBhcmVudCdzCiAJCSAqIGlfbXV0ZXgsIHNvIGFmYWlrIGxvb2t1cCBjYW5ub3QgY29udGludWUgdGhyb3VnaCBvdXIKIAkJICogcGFyZW50IHRvIGZpbmQgdXMsIGxldCBhbG9uZSBtZXNzIHdpdGggb3VyIHRyZWUuCiAJCSAqIFRoYXQgc2FpZCwgdGFraW5nIG91ciBpX211dGV4IGlzIGNsb3NlciB0byBta2RpcgotCQkgKiBlbXVsYXRpb24sIGFuZCBzaG91bGRuJ3QgaHVydC4gKi8KKwkJICogZW11bGF0aW9uLCBhbmQgc2hvdWxkbid0IGh1cnQuCisJCSAqLwogCQltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJCWZvciAoaSA9IDA7IGdyb3VwLT5kZWZhdWx0X2dyb3Vwc1tpXTsgaSsrKSB7CkBAIC01NDYsMjAgKzU0OCwzNCBAQAogCiAJCWl0ZW0tPmNpX2dyb3VwID0gTlVMTDsKIAkJaXRlbS0+Y2lfcGFyZW50ID0gTlVMTDsKKworCQkvKiBEcm9wIHRoZSByZWZlcmVuY2UgZm9yIGNpX2VudHJ5ICovCiAJCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKIAorCQkvKiBEcm9wIHRoZSByZWZlcmVuY2UgZm9yIGNpX3BhcmVudCAqLwogCQljb25maWdfZ3JvdXBfcHV0KGdyb3VwKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtfb2JqKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQkvKiBQYXJlbnQgc2VlbXMgcmVkdW5kYW50IHdpdGggZ3JvdXAsIGJ1dCBpdCBtYWtlcyBjZXJ0YWluCi0JICogdHJhdmVyc2FscyBtdWNoIG5pY2VyLiAqLworCS8qCisJICogUGFyZW50IHNlZW1zIHJlZHVuZGFudCB3aXRoIGdyb3VwLCBidXQgaXQgbWFrZXMgY2VydGFpbgorCSAqIHRyYXZlcnNhbHMgbXVjaCBuaWNlci4KKwkgKi8KIAlpdGVtLT5jaV9wYXJlbnQgPSBwYXJlbnRfaXRlbTsKKworCS8qCisJICogV2UgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgcGFyZW50IGZvciB0aGUgY2hpbGQncyBjaV9wYXJlbnQKKwkgKiBsaW5rLgorCSAqLwogCWl0ZW0tPmNpX2dyb3VwID0gY29uZmlnX2dyb3VwX2dldCh0b19jb25maWdfZ3JvdXAocGFyZW50X2l0ZW0pKTsKIAlsaXN0X2FkZF90YWlsKCZpdGVtLT5jaV9lbnRyeSwgJml0ZW0tPmNpX2dyb3VwLT5jZ19jaGlsZHJlbik7CiAKKwkvKgorCSAqIFdlIGhvbGQgYSByZWZlcmVuY2Ugb24gdGhlIGNoaWxkIGZvciBjaV9lbnRyeSBvbiB0aGUgcGFyZW50J3MKKwkgKiBjZ19jaGlsZHJlbgorCSAqLwogCWNvbmZpZ19pdGVtX2dldChpdGVtKTsKIH0KIApAQCAtNjg0LDYgKzcwMCwxMCBAQAogCXR5cGUgPSBwYXJlbnRfaXRlbS0+Y2lfdHlwZTsKIAlCVUdfT04oIXR5cGUpOwogCisJLyoKKwkgKiBJZiAtPmRyb3BfaXRlbSgpIGV4aXN0cywgaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZQorCSAqIGNvbmZpZ19pdGVtX3B1dCgpLgorCSAqLwogCWlmICh0eXBlLT5jdF9ncm91cF9vcHMgJiYgdHlwZS0+Y3RfZ3JvdXBfb3BzLT5kcm9wX2l0ZW0pCiAJCXR5cGUtPmN0X2dyb3VwX29wcy0+ZHJvcF9pdGVtKHRvX2NvbmZpZ19ncm91cChwYXJlbnRfaXRlbSksCiAJCQkJCQlpdGVtKTsKQEAgLTY5NCwyMyArNzE0LDI4IEBACiAKIHN0YXRpYyBpbnQgY29uZmlnZnNfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBtb2R1bGVfZ290ID0gMDsKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cDsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07CiAJc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTsKIAlzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXM7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiAJc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7CisJc3RydWN0IG1vZHVsZSAqb3duZXIgPSBOVUxMOwogCWNoYXIgKm5hbWU7CiAKLQlpZiAoZGVudHJ5LT5kX3BhcmVudCA9PSBjb25maWdmc19zYi0+c19yb290KQotCQlyZXR1cm4gLUVQRVJNOworCWlmIChkZW50cnktPmRfcGFyZW50ID09IGNvbmZpZ2ZzX3NiLT5zX3Jvb3QpIHsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CiAKIAlzZCA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfZnNkYXRhOwotCWlmICghKHNkLT5zX3R5cGUgJiBDT05GSUdGU19VU0VUX0RJUikpCi0JCXJldHVybiAtRVBFUk07CisJaWYgKCEoc2QtPnNfdHlwZSAmIENPTkZJR0ZTX1VTRVRfRElSKSkgeworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KIAorCS8qIEdldCBhIHdvcmtpbmcgcmVmIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBmdW5jdGlvbiAqLwogCXBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS0+ZF9wYXJlbnQpOwogCXR5cGUgPSBwYXJlbnRfaXRlbS0+Y2lfdHlwZTsKIAlzdWJzeXMgPSB0b19jb25maWdfZ3JvdXAocGFyZW50X2l0ZW0pLT5jZ19zdWJzeXM7CkBAIC03MTksMTUgKzc0NCwxNiBAQAogCWlmICghdHlwZSB8fCAhdHlwZS0+Y3RfZ3JvdXBfb3BzIHx8CiAJICAgICghdHlwZS0+Y3RfZ3JvdXBfb3BzLT5tYWtlX2dyb3VwICYmCiAJICAgICAhdHlwZS0+Y3RfZ3JvdXBfb3BzLT5tYWtlX2l0ZW0pKSB7Ci0JCWNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7Ci0JCXJldHVybiAtRVBFUk07ICAvKiBXaGF0IGxhY2stb2YtbWtkaXIgcmV0dXJucyAqLworCQlyZXQgPSAtRVBFUk07ICAvKiBMYWNrLW9mLW1rZGlyIHJldHVybnMgLUVQRVJNICovCisJCWdvdG8gb3V0X3B1dDsKIAl9CiAKIAluYW1lID0ga21hbGxvYyhkZW50cnktPmRfbmFtZS5sZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5hbWUpIHsKLQkJY29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3B1dDsKIAl9CisKIAlzbnByaW50ZihuYW1lLCBkZW50cnktPmRfbmFtZS5sZW4gKyAxLCAiJXMiLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCWRvd24oJnN1YnN5cy0+c3Vfc2VtKTsKQEAgLTc0OCw0MCArNzc0LDY3IEBACiAKIAlrZnJlZShuYW1lKTsKIAlpZiAoIWl0ZW0pIHsKLQkJY29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCS8qCisJCSAqIElmIGl0ZW0gPT0gTlVMTCwgdGhlbiBsaW5rX29iaigpIHdhcyBuZXZlciBjYWxsZWQuCisJCSAqIFRoZXJlIGFyZSBubyBleHRyYSByZWZlcmVuY2VzIHRvIGNsZWFuIHVwLgorCQkgKi8KKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfcHV0OwogCX0KIAotCXJldCA9IC1FSU5WQUw7CisJLyoKKwkgKiBsaW5rX29iaigpIGhhcyBiZWVuIGNhbGxlZCAodmlhIGxpbmtfZ3JvdXAoKSBmb3IgZ3JvdXBzKS4KKwkgKiBGcm9tIGhlcmUgb24gb3V0LCBlcnJvcnMgbXVzdCBjbGVhbiB0aGF0IHVwLgorCSAqLworCiAJdHlwZSA9IGl0ZW0tPmNpX3R5cGU7Ci0JaWYgKHR5cGUpIHsKLQkJb3duZXIgPSB0eXBlLT5jdF9vd25lcjsKLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KG93bmVyKSkgewotCQkJaWYgKGdyb3VwKSB7Ci0JCQkJcmV0ID0gY29uZmlnZnNfYXR0YWNoX2dyb3VwKHBhcmVudF9pdGVtLAotCQkJCQkJCSAgICBpdGVtLAotCQkJCQkJCSAgICBkZW50cnkpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXQgPSBjb25maWdmc19hdHRhY2hfaXRlbShwYXJlbnRfaXRlbSwKLQkJCQkJCQkgICBpdGVtLAotCQkJCQkJCSAgIGRlbnRyeSk7Ci0JCQl9Ci0KLQkJCWlmIChyZXQpIHsKLQkJCQlkb3duKCZzdWJzeXMtPnN1X3NlbSk7Ci0JCQkJaWYgKGdyb3VwKQotCQkJCQl1bmxpbmtfZ3JvdXAoZ3JvdXApOwotCQkJCWVsc2UKLQkJCQkJdW5saW5rX29iaihpdGVtKTsKLQkJCQljbGllbnRfZHJvcF9pdGVtKHBhcmVudF9pdGVtLCBpdGVtKTsKLQkJCQl1cCgmc3Vic3lzLT5zdV9zZW0pOwotCi0JCQkJY29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTsKLQkJCQltb2R1bGVfcHV0KG93bmVyKTsKLQkJCX0KLQkJfQorCWlmICghdHlwZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bmxpbms7CiAJfQogCisJb3duZXIgPSB0eXBlLT5jdF9vd25lcjsKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bmxpbms7CisJfQorCisJLyoKKwkgKiBJIGhhdGUgZG9pbmcgaXQgdGhpcyB3YXksIGJ1dCBpZiB0aGVyZSBpcworCSAqIGFuIGVycm9yLCAgbW9kdWxlX3B1dCgpIHByb2JhYmx5IHNob3VsZAorCSAqIGhhcHBlbiBhZnRlciBhbnkgY2xlYW51cC4KKwkgKi8KKwltb2R1bGVfZ290ID0gMTsKKworCWlmIChncm91cCkKKwkJcmV0ID0gY29uZmlnZnNfYXR0YWNoX2dyb3VwKHBhcmVudF9pdGVtLCBpdGVtLCBkZW50cnkpOworCWVsc2UKKwkJcmV0ID0gY29uZmlnZnNfYXR0YWNoX2l0ZW0ocGFyZW50X2l0ZW0sIGl0ZW0sIGRlbnRyeSk7CisKK291dF91bmxpbms6CisJaWYgKHJldCkgeworCQkvKiBUZWFyIGRvd24gZXZlcnl0aGluZyB3ZSBidWlsdCB1cCAqLworCQlkb3duKCZzdWJzeXMtPnN1X3NlbSk7CisJCWlmIChncm91cCkKKwkJCXVubGlua19ncm91cChncm91cCk7CisJCWVsc2UKKwkJCXVubGlua19vYmooaXRlbSk7CisJCWNsaWVudF9kcm9wX2l0ZW0ocGFyZW50X2l0ZW0sIGl0ZW0pOworCQl1cCgmc3Vic3lzLT5zdV9zZW0pOworCisJCWlmIChtb2R1bGVfZ290KQorCQkJbW9kdWxlX3B1dChvd25lcik7CisJfQorCitvdXRfcHV0OgorCS8qCisJICogbGlua19vYmooKS9saW5rX2dyb3VwKCkgdG9vayBhIHJlZmVyZW5jZSBmcm9tIGNoaWxkLT5wYXJlbnQsCisJICogc28gdGhlIHBhcmVudCBpcyBzYWZlbHkgcGlubmVkLiAgV2UgY2FuIGRyb3Agb3VyIHdvcmtpbmcKKwkgKiByZWZlcmVuY2UuCisJICovCisJY29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTsKKworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgwMSw2ICs4NTQsNyBAQAogCWlmIChzZC0+c190eXBlICYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKQogCQlyZXR1cm4gLUVQRVJNOwogCisJLyogR2V0IGEgd29ya2luZyByZWYgdW50aWwgd2UgaGF2ZSB0aGUgY2hpbGQgKi8KIAlwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktPmRfcGFyZW50KTsKIAlzdWJzeXMgPSB0b19jb25maWdfZ3JvdXAocGFyZW50X2l0ZW0pLT5jZ19zdWJzeXM7CiAJQlVHX09OKCFzdWJzeXMpOwpAQCAtODE3LDYgKzg3MSw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJLyogR2V0IGEgd29ya2luZyByZWYgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uICovCiAJaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnkpOwogCiAJLyogRHJvcCByZWZlcmVuY2UgZnJvbSBhYm92ZSwgaXRlbSBhbHJlYWR5IGhvbGRzIG9uZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggMTk0NThkMy4uOTQwZDE4OCAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTExMDEsNiArMTEwMSwzMiBAQAogfQogCiAvKioKKyAqIGRfaGFzaF9hbmRfbG9va3VwIC0gaGFzaCB0aGUgcXN0ciB0aGVuIHNlYXJjaCBmb3IgYSBkZW50cnkKKyAqIEBkaXI6IERpcmVjdG9yeSB0byBzZWFyY2ggaW4KKyAqIEBuYW1lOiBxc3RyIG9mIG5hbWUgd2Ugd2lzaCB0byBmaW5kCisgKgorICogT24gaGFzaCBmYWlsdXJlIG9yIG9uIGxvb2t1cCBmYWlsdXJlIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0cnVjdCBkZW50cnkgKmRfaGFzaF9hbmRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IHFzdHIgKm5hbWUpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gTlVMTDsKKworCS8qCisJICogQ2hlY2sgZm9yIGEgZnMtc3BlY2lmaWMgaGFzaCBmdW5jdGlvbi4gTm90ZSB0aGF0IHdlIG11c3QKKwkgKiBjYWxjdWxhdGUgdGhlIHN0YW5kYXJkIGhhc2ggZmlyc3QsIGFzIHRoZSBkX29wLT5kX2hhc2goKQorCSAqIHJvdXRpbmUgbWF5IGNob29zZSB0byBsZWF2ZSB0aGUgaGFzaCB2YWx1ZSB1bmNoYW5nZWQuCisJICovCisJbmFtZS0+aGFzaCA9IGZ1bGxfbmFtZV9oYXNoKG5hbWUtPm5hbWUsIG5hbWUtPmxlbik7CisJaWYgKGRpci0+ZF9vcCAmJiBkaXItPmRfb3AtPmRfaGFzaCkgeworCQlpZiAoZGlyLT5kX29wLT5kX2hhc2goZGlyLCBuYW1lKSA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJZGVudHJ5ID0gZF9sb29rdXAoZGlyLCBuYW1lKTsKK291dDoKKwlyZXR1cm4gZGVudHJ5OworfQorCisvKioKICAqIGRfdmFsaWRhdGUgLSB2ZXJpZnkgZGVudHJ5IHByb3ZpZGVkIGZyb20gaW5zZWN1cmUgc291cmNlCiAgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IGFsbGVnZWQgdG8gYmUgdmFsaWQgY2hpbGQgb2YgQGRwYXJlbnQKICAqIEBkcGFyZW50OiBUaGUgcGFyZW50IGRlbnRyeSAoa25vd24gdG8gYmUgdmFsaWQpCkBAIC0xMTcyLDExICsxMTk4LDExIEBACiAJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJaXNkaXIgPSBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKTsKIAlpZiAoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkgPT0gMSkgewotCQkvKiByZW1vdmUgdGhpcyBhbmQgb3RoZXIgaW5vdGlmeSBkZWJ1ZyBjaGVja3MgYWZ0ZXIgMi42LjE4ICovCi0JCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQ7Ci0KIAkJZGVudHJ5X2lwdXQoZGVudHJ5KTsKIAkJZnNub3RpZnlfbmFtZXJlbW92ZShkZW50cnksIGlzZGlyKTsKKworCQkvKiByZW1vdmUgdGhpcyBhbmQgb3RoZXIgaW5vdGlmeSBkZWJ1ZyBjaGVja3MgYWZ0ZXIgMi42LjE4ICovCisJCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQ7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2MTYsMjYgKzE2NDIsMTIgQEAKIAlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5OwogCWlub190IGlubyA9IDA7CiAKLQkvKgotCSAqIENoZWNrIGZvciBhIGZzLXNwZWNpZmljIGhhc2ggZnVuY3Rpb24uIE5vdGUgdGhhdCB3ZSBtdXN0Ci0JICogY2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBoYXNoIGZpcnN0LCBhcyB0aGUgZF9vcC0+ZF9oYXNoKCkKLQkgKiByb3V0aW5lIG1heSBjaG9vc2UgdG8gbGVhdmUgdGhlIGhhc2ggdmFsdWUgdW5jaGFuZ2VkLgotCSAqLwotCW5hbWUtPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOwotCWlmIChkaXItPmRfb3AgJiYgZGlyLT5kX29wLT5kX2hhc2gpCi0JewotCQlpZiAoZGlyLT5kX29wLT5kX2hhc2goZGlyLCBuYW1lKSAhPSAwKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JZGVudHJ5ID0gZF9sb29rdXAoZGlyLCBuYW1lKTsKLQlpZiAoZGVudHJ5KQotCXsKKwlkZW50cnkgPSBkX2hhc2hfYW5kX2xvb2t1cChkaXIsIG5hbWUpOworCWlmIChkZW50cnkpIHsKIAkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKIAkJCWlubyA9IGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm87CiAJCWRwdXQoZGVudHJ5KTsKIAl9Ci1vdXQ6CiAJcmV0dXJuIGlubzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZGVidWdmcy9pbm9kZS5jIGIvZnMvZGVidWdmcy9pbm9kZS5jCmluZGV4IDg1ZDE2NmMuLmI1NWI0ZWEgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvaW5vZGUuYworKysgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKQEAgLTY3LDEyICs2NywxMyBAQAogc3RhdGljIGludCBkZWJ1Z2ZzX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgaW50IG1vZGUsIGRldl90IGRldikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVidWdmc19nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlLCBkZXYpOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGVycm9yID0gLUVQRVJNOwogCiAJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKKwlpbm9kZSA9IGRlYnVnZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSwgZGV2KTsKIAlpZiAoaW5vZGUpIHsKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJZGdldChkZW50cnkpOwpkaWZmIC0tZ2l0IGEvZnMvZGlyZWN0LWlvLmMgYi9mcy9kaXJlY3QtaW8uYwppbmRleCA5MTBhOGVkLi5iMDVkMWIyIDEwMDY0NAotLS0gYS9mcy9kaXJlY3QtaW8uYworKysgYi9mcy9kaXJlY3QtaW8uYwpAQCAtOTI5LDggKzkyOSw3IEBACiAJCQlibG9ja19pbl9wYWdlICs9IHRoaXNfY2h1bmtfYmxvY2tzOwogCQkJZGlvLT5ibG9ja3NfYXZhaWxhYmxlIC09IHRoaXNfY2h1bmtfYmxvY2tzOwogbmV4dF9ibG9jazoKLQkJCWlmIChkaW8tPmJsb2NrX2luX2ZpbGUgPiBkaW8tPmZpbmFsX2Jsb2NrX2luX3JlcXVlc3QpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oZGlvLT5ibG9ja19pbl9maWxlID4gZGlvLT5maW5hbF9ibG9ja19pbl9yZXF1ZXN0KTsKIAkJCWlmIChkaW8tPmJsb2NrX2luX2ZpbGUgPT0gZGlvLT5maW5hbF9ibG9ja19pbl9yZXF1ZXN0KQogCQkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9mcy9kcXVvdC5jIGIvZnMvZHF1b3QuYwppbmRleCA2YjM4ODY5Li44MWQ4N2E0IDEwMDY0NAotLS0gYS9mcy9kcXVvdC5jCisrKyBiL2ZzL2RxdW90LmMKQEAgLTU5MCw4ICs1OTAsNyBAQAogCWF0b21pY19kZWMoJmRxdW90LT5kcV9jb3VudCk7CiAjaWZkZWYgX19EUVVPVF9QQVJBTk9JQQogCS8qIHNhbml0eSBjaGVjayAqLwotCWlmICghbGlzdF9lbXB0eSgmZHF1b3QtPmRxX2ZyZWUpKQotCQlCVUcoKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRxdW90LT5kcV9mcmVlKSk7CiAjZW5kaWYKIAlwdXRfZHF1b3RfbGFzdChkcXVvdCk7CiAJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CkBAIC02NjYsOCArNjY1LDcgQEAKIAkJcmV0dXJuIE5PRFFVT1Q7CiAJfQogI2lmZGVmIF9fRFFVT1RfUEFSQU5PSUEKLQlpZiAoIWRxdW90LT5kcV9zYikJLyogSGFzIHNvbWVib2R5IGludmFsaWRhdGVkIGVudHJ5IHVuZGVyIHVzPyAqLwotCQlCVUcoKTsKKwlCVUdfT04oIWRxdW90LT5kcV9zYik7CS8qIEhhcyBzb21lYm9keSBpbnZhbGlkYXRlZCBlbnRyeSB1bmRlciB1cz8gKi8KICNlbmRpZgogCiAJcmV0dXJuIGRxdW90OwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAyNDJmZTFhLi4xYjQ0OTFjIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNTk5LDcgKzU5OSw3IEBACiAJc3dpdGNoIChvcCkgewogCWNhc2UgRVBPTExfQ1RMX0FERDoKIAkJaWYgKCFlcGkpIHsKLQkJCWVwZHMuZXZlbnRzIHw9IFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTFJESFVQOworCQkJZXBkcy5ldmVudHMgfD0gUE9MTEVSUiB8IFBPTExIVVA7CiAKIAkJCWVycm9yID0gZXBfaW5zZXJ0KGVwLCAmZXBkcywgdGZpbGUsIGZkKTsKIAkJfSBlbHNlCkBAIC02MTMsNyArNjEzLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBFUE9MTF9DVExfTU9EOgogCQlpZiAoZXBpKSB7Ci0JCQllcGRzLmV2ZW50cyB8PSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwkJCWVwZHMuZXZlbnRzIHw9IFBPTExFUlIgfCBQT0xMSFVQOwogCQkJZXJyb3IgPSBlcF9tb2RpZnkoZXAsIGVwaSwgJmVwZHMpOwogCQl9IGVsc2UKIAkJCWVycm9yID0gLUVOT0VOVDsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA5NTBlYmQ0Li4zYTc5ZDk3IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC01NjEsNyArNTYxLDcgQEAKIAlhcmNoX3BpY2tfbW1hcF9sYXlvdXQobW0pOwogCWlmIChvbGRfbW0pIHsKIAkJdXBfcmVhZCgmb2xkX21tLT5tbWFwX3NlbSk7Ci0JCWlmIChhY3RpdmVfbW0gIT0gb2xkX21tKSBCVUcoKTsKKwkJQlVHX09OKGFjdGl2ZV9tbSAhPSBvbGRfbW0pOwogCQltbXB1dChvbGRfbW0pOwogCQlyZXR1cm4gMDsKIAl9CkBAIC02NjUsOSArNjY1LDcgQEAKIAkgKiBhbmQgdG8gYXNzdW1lIGl0cyBQSUQ6CiAJICovCiAJaWYgKCF0aHJlYWRfZ3JvdXBfbGVhZGVyKGN1cnJlbnQpKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50OwogCQlzdHJ1Y3QgZGVudHJ5ICpwcm9jX2RlbnRyeTEsICpwcm9jX2RlbnRyeTI7Ci0JCXVuc2lnbmVkIGxvbmcgcHRyYWNlOwogCiAJCS8qCiAJCSAqIFdhaXQgZm9yIHRoZSB0aHJlYWQgZ3JvdXAgbGVhZGVyIHRvIGJlIGEgem9tYmllLgpAQCAtNjc4LDYgKzY3NiwxOCBAQAogCQl3aGlsZSAobGVhZGVyLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFKQogCQkJeWllbGQoKTsKIAorCQkvKgorCQkgKiBUaGUgb25seSByZWNvcmQgd2UgaGF2ZSBvZiB0aGUgcmVhbC10aW1lIGFnZSBvZiBhCisJCSAqIHByb2Nlc3MsIHJlZ2FyZGxlc3Mgb2YgZXhlY3MgaXQncyBkb25lLCBpcyBzdGFydF90aW1lLgorCQkgKiBBbGwgdGhlIHBhc3QgQ1BVIHRpbWUgaXMgYWNjdW11bGF0ZWQgaW4gc2lnbmFsX3N0cnVjdAorCQkgKiBmcm9tIHNpc3RlciB0aHJlYWRzIG5vdyBkZWFkLiAgQnV0IGluIHRoaXMgbm9uLWxlYWRlcgorCQkgKiBleGVjLCBub3RoaW5nIHN1cnZpdmVzIGZyb20gdGhlIG9yaWdpbmFsIGxlYWRlciB0aHJlYWQsCisJCSAqIHdob3NlIGJpcnRoIG1hcmtzIHRoZSB0cnVlIGFnZSBvZiB0aGlzIHByb2Nlc3Mgbm93LgorCQkgKiBXaGVuIHdlIHRha2Ugb24gaXRzIGlkZW50aXR5IGJ5IHN3aXRjaGluZyB0byBpdHMgUElELCB3ZQorCQkgKiBhbHNvIHRha2UgaXRzIGJpcnRoZGF0ZSAoYWx3YXlzIGVhcmxpZXIgdGhhbiBvdXIgb3duKS4KKwkJICovCisJCWN1cnJlbnQtPnN0YXJ0X3RpbWUgPSBsZWFkZXItPnN0YXJ0X3RpbWU7CisKIAkJc3Bpbl9sb2NrKCZsZWFkZXItPnByb2NfbG9jayk7CiAJCXNwaW5fbG9jaygmY3VycmVudC0+cHJvY19sb2NrKTsKIAkJcHJvY19kZW50cnkxID0gcHJvY19waWRfdW5oYXNoKGN1cnJlbnQpOwpAQCAtNjkyLDIyICs3MDIsNiBAQAogCQkgKiB0d28gdGhyZWFkcyB3aXRoIGEgc3dpdGNoZWQgUElELCBhbmQgcmVsZWFzZQogCQkgKiB0aGUgZm9ybWVyIHRocmVhZCBncm91cCBsZWFkZXI6CiAJCSAqLwotCQlwdHJhY2UgPSBsZWFkZXItPnB0cmFjZTsKLQkJcGFyZW50ID0gbGVhZGVyLT5wYXJlbnQ7Ci0JCWlmICh1bmxpa2VseShwdHJhY2UpICYmIHVubGlrZWx5KHBhcmVudCA9PSBjdXJyZW50KSkgewotCQkJLyoKLQkJCSAqIEpva2VyIHdhcyBwdHJhY2luZyBoaXMgb3duIGdyb3VwIGxlYWRlciwKLQkJCSAqIGFuZCBub3cgaGUgd2FudHMgdG8gYmUgaGlzIG93biBwYXJlbnQhCi0JCQkgKiBXZSBjYW4ndCBoYXZlIHRoYXQuCi0JCQkgKi8KLQkJCXB0cmFjZSA9IDA7Ci0JCX0KLQotCQlwdHJhY2VfdW5saW5rKGN1cnJlbnQpOwotCQlwdHJhY2VfdW5saW5rKGxlYWRlcik7Ci0JCXJlbW92ZV9wYXJlbnQoY3VycmVudCk7Ci0JCXJlbW92ZV9wYXJlbnQobGVhZGVyKTsKLQogCiAJCS8qIEJlY29tZSBhIHByb2Nlc3MgZ3JvdXAgbGVhZGVyIHdpdGggdGhlIG9sZCBsZWFkZXIncyBwaWQuCiAJCSAqIE5vdGU6IFRoZSBvbGQgbGVhZGVyIGFsc28gdXNlcyB0aGlzcGlkIHVudGlsIHJlbGVhc2VfdGFzawpAQCAtNzE4LDE5ICs3MTIsMTUgQEAKIAkJYXR0YWNoX3BpZChjdXJyZW50LCBQSURUWVBFX1BJRCwgIGN1cnJlbnQtPnBpZCk7CiAJCWF0dGFjaF9waWQoY3VycmVudCwgUElEVFlQRV9QR0lELCBjdXJyZW50LT5zaWduYWwtPnBncnApOwogCQlhdHRhY2hfcGlkKGN1cnJlbnQsIFBJRFRZUEVfU0lELCAgY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uKTsKLQkJbGlzdF9hZGRfdGFpbCgmY3VycmVudC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOworCQlsaXN0X2FkZF90YWlsX3JjdSgmY3VycmVudC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOwogCi0JCWN1cnJlbnQtPnBhcmVudCA9IGN1cnJlbnQtPnJlYWxfcGFyZW50ID0gbGVhZGVyLT5yZWFsX3BhcmVudDsKLQkJbGVhZGVyLT5wYXJlbnQgPSBsZWFkZXItPnJlYWxfcGFyZW50ID0gY2hpbGRfcmVhcGVyOwogCQljdXJyZW50LT5ncm91cF9sZWFkZXIgPSBjdXJyZW50OwotCQlsZWFkZXItPmdyb3VwX2xlYWRlciA9IGxlYWRlcjsKKwkJbGVhZGVyLT5ncm91cF9sZWFkZXIgPSBjdXJyZW50OwogCi0JCWFkZF9wYXJlbnQoY3VycmVudCk7Ci0JCWFkZF9wYXJlbnQobGVhZGVyKTsKLQkJaWYgKHB0cmFjZSkgewotCQkJY3VycmVudC0+cHRyYWNlID0gcHRyYWNlOwotCQkJX19wdHJhY2VfbGluayhjdXJyZW50LCBwYXJlbnQpOwotCQl9CisJCS8qIFJlZHVjZSBsZWFkZXIgdG8gYSB0aHJlYWQgKi8KKwkJZGV0YWNoX3BpZChsZWFkZXIsIFBJRFRZUEVfUEdJRCk7CisJCWRldGFjaF9waWQobGVhZGVyLCBQSURUWVBFX1NJRCk7CisJCWxpc3RfZGVsX2luaXQoJmxlYWRlci0+dGFza3MpOwogCiAJCWN1cnJlbnQtPmV4aXRfc2lnbmFsID0gU0lHQ0hMRDsKIApkaWZmIC0tZ2l0IGEvZnMvZXhwb3J0ZnMvZXhwZnMuYyBiL2ZzL2V4cG9ydGZzL2V4cGZzLmMKaW5kZXggYjA2YjU0Zi4uNGMzOTAwOSAxMDA2NDQKLS0tIGEvZnMvZXhwb3J0ZnMvZXhwZnMuYworKysgYi9mcy9leHBvcnRmcy9leHBmcy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJaWYgKGFjY2VwdGFibGUoY29udGV4dCwgcmVzdWx0KSkKIAkJCXJldHVybiByZXN1bHQ7CiAJCWlmIChTX0lTRElSKHJlc3VsdC0+ZF9pbm9kZS0+aV9tb2RlKSkgewotCQkJLyogdGhlcmUgaXMgbm8gb3RoZXIgZGVudHJ5LCBzbyBmYWlsICovCisJCQllcnIgPSAtRUFDQ0VTOwogCQkJZ290byBlcnJfcmVzdWx0OwogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCA0OGFlMDMzLi4yZWRkN2VlIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC03MTEsNyArNzExLDcgQEAKIAkgKiBkaXJlY3QgYmxvY2tzIGJsb2NrcwogCSAqLwogCWlmIChudW0gPT0gMCAmJiBibGtzID4gMSkgewotCQljdXJyZW50X2Jsb2NrID0gbGUzMl90b19jcHUod2hlcmUtPmtleSArIDEpOworCQljdXJyZW50X2Jsb2NrID0gbGUzMl90b19jcHUod2hlcmUtPmtleSkgKyAxOwogCQlmb3IgKGkgPSAxOyBpIDwgYmxrczsgaSsrKQogCQkJKih3aGVyZS0+cCArIGkgKSA9IGNwdV90b19sZTMyKGN1cnJlbnRfYmxvY2srKyk7CiAJfQpAQCAtNzI0LDcgKzcyNCw3IEBACiAJaWYgKGJsb2NrX2kpIHsKIAkJYmxvY2tfaS0+bGFzdF9hbGxvY19sb2dpY2FsX2Jsb2NrID0gYmxvY2sgKyBibGtzIC0gMTsKIAkJYmxvY2tfaS0+bGFzdF9hbGxvY19waHlzaWNhbF9ibG9jayA9Ci0JCQkJbGUzMl90b19jcHUod2hlcmVbbnVtXS5rZXkgKyBibGtzIC0gMSk7CisJCQkJbGUzMl90b19jcHUod2hlcmVbbnVtXS5rZXkpICsgYmxrcyAtIDE7CiAJfQogCiAJLyogV2UgYXJlIGRvbmUgd2l0aCBhdG9taWMgc3R1ZmYsIG5vdyBkbyB0aGUgcmVzdCBvZiBob3VzZWtlZXBpbmcgKi8KQEAgLTgxNCwxMSArODE0LDEzIEBACiAKIAkvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovCiAJaWYgKCFwYXJ0aWFsKSB7Ci0JCWZpcnN0X2Jsb2NrID0gY2hhaW5bZGVwdGggLSAxXS5rZXk7CisJCWZpcnN0X2Jsb2NrID0gbGUzMl90b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpOwogCQljbGVhcl9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CiAJCWNvdW50Kys7CiAJCS8qbWFwIG1vcmUgYmxvY2tzKi8KIAkJd2hpbGUgKGNvdW50IDwgbWF4YmxvY2tzICYmIGNvdW50IDw9IGJsb2Nrc190b19ib3VuZGFyeSkgeworCQkJdW5zaWduZWQgbG9uZyBibGs7CisKIAkJCWlmICghdmVyaWZ5X2NoYWluKGNoYWluLCBwYXJ0aWFsKSkgewogCQkJCS8qCiAJCQkJICogSW5kaXJlY3QgYmxvY2sgbWlnaHQgYmUgcmVtb3ZlZCBieQpAQCAtODMxLDggKzgzMyw5IEBACiAJCQkJY291bnQgPSAwOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKGxlMzJfdG9fY3B1KCooY2hhaW5bZGVwdGgtMV0ucCtjb3VudCkgPT0KLQkJCQkJKGZpcnN0X2Jsb2NrICsgY291bnQpKSkKKwkJCWJsayA9IGxlMzJfdG9fY3B1KCooY2hhaW5bZGVwdGgtMV0ucCArIGNvdW50KSk7CisKKwkJCWlmIChibGsgPT0gZmlyc3RfYmxvY2sgKyBjb3VudCkKIAkJCQljb3VudCsrOwogCQkJZWxzZQogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pb2N0bC5jIGIvZnMvZXh0My9pb2N0bC5jCmluZGV4IGFhZjFkYTEuLjhjMjJhYTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW9jdGwuYworKysgYi9mcy9leHQzL2lvY3RsLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAkJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJZmxhZ3MgJj0gfkVYVDNfRElSU1lOQ19GTDsKIAorCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCW9sZGZsYWdzID0gZWktPmlfZmxhZ3M7CiAKIAkJLyogVGhlIEpPVVJOQUxfREFUQSBmbGFnIGlzIG1vZGlmaWFibGUgb25seSBieSByb290ICovCkBAIC02MCw4ICs2MSwxMCBAQAogCQkgKiBUaGlzIHRlc3QgbG9va3MgbmljZXIuIFRoYW5rcyB0byBQYXVsaW5lIE1pZGRlbGluawogCQkgKi8KIAkJaWYgKChmbGFncyBeIG9sZGZsYWdzKSAmIChFWFQzX0FQUEVORF9GTCB8IEVYVDNfSU1NVVRBQkxFX0ZMKSkgewotCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKQorCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC02OSwxNCArNzIsMTggQEAKIAkJICogdGhlIHJlbGV2YW50IGNhcGFiaWxpdHkuCiAJCSAqLwogCQlpZiAoKGpmbGFnIF4gb2xkZmxhZ3MpICYgKEVYVDNfSk9VUk5BTF9EQVRBX0ZMKSkgewotCQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQorCQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCX0KIAkJfQogCiAKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAxKTsKLQkJaWYgKElTX0VSUihoYW5kbGUpKQorCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKKwkJfQogCQlpZiAoSVNfU1lOQyhpbm9kZSkpCiAJCQloYW5kbGUtPmhfc3luYyA9IDE7CiAJCWVyciA9IGV4dDNfcmVzZXJ2ZV9pbm9kZV93cml0ZShoYW5kbGUsIGlub2RlLCAmaWxvYyk7CkBAIC05MywxMSArMTAwLDE0IEBACiAJCWVyciA9IGV4dDNfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZpbG9jKTsKIGZsYWdzX2VycjoKIAkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQkJaWYgKGVycikKKwkJaWYgKGVycikgeworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQlyZXR1cm4gZXJyOworCQl9CiAKIAkJaWYgKChqZmxhZyBeIG9sZGZsYWdzKSAmIChFWFQzX0pPVVJOQUxfREFUQV9GTCkpCiAJCQllcnIgPSBleHQzX2NoYW5nZV9pbm9kZV9qb3VybmFsX2ZsYWcoaW5vZGUsIGpmbGFnKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCXJldHVybiBlcnI7CiAJfQogCWNhc2UgRVhUM19JT0NfR0VUVkVSU0lPTjoKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDEwNDFkYWIuLjM0YjM5ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCQlnb3RvIGV4aXRfYmg7CiAJCX0KIAkJbG9ja19idWZmZXIoYmgpOwotCQltZW1jcHkoZ2RiLT5iX2RhdGEsIHNiaS0+c19ncm91cF9kZXNjW2ldLCBiaC0+Yl9zaXplKTsKKwkJbWVtY3B5KGdkYi0+Yl9kYXRhLCBzYmktPnNfZ3JvdXBfZGVzY1tpXS0+Yl9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJc2V0X2J1ZmZlcl91cHRvZGF0ZShnZGIpOwogCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZ2RiKTsKQEAgLTk3NCw2ICs5NzQsNyBAQAogCWlmIChvX2Jsb2Nrc19jb3VudCAhPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpKSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19GVU5DVElPTl9fLAogCQkJICAgICAibXVsdGlwbGUgcmVzaXplcnMgcnVuIG9uIGZpbGVzeXN0ZW0hIik7CisJCXVubG9ja19zdXBlcihzYik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0X3B1dDsKIAl9CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCAyYTI0NzkxLi5kMzVjYmM2IDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTQ1Myw4ICs0NTMsNyBAQAogCQkJLyogTWFrZSBzdXJlIHdlIGFyZSBjYWxsZWQgd2l0aCBvbmUgb2YgdGhlIFBPTExfKgogCQkJICAgcmVhc29ucywgb3RoZXJ3aXNlIHdlIGNvdWxkIGxlYWsga2VybmVsIHN0YWNrIGludG8KIAkJCSAgIHVzZXJzcGFjZS4gICovCi0JCQlpZiAoKHJlYXNvbiAmIF9fU0lfTUFTSykgIT0gX19TSV9QT0xMKQotCQkJCUJVRygpOworCQkJQlVHX09OKChyZWFzb24gJiBfX1NJX01BU0spICE9IF9fU0lfUE9MTCk7CiAJCQlpZiAocmVhc29uIC0gUE9MTF9JTiA+PSBOU0lHUE9MTCkKIAkJCQlzaS5zaV9iYW5kICA9IH4wTDsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2ZzL2ZpZm8uYyBiL2ZzL2ZpZm8uYwppbmRleCA4ODlmNzIyLi40OTAzNWIxIDEwMDY0NAotLS0gYS9mcy9maWZvLmMKKysrIGIvZnMvZmlmby5jCkBAIC0xNSwzMCArMTUsMzUgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BpcGVfZnNfaS5oPgogCi1zdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYXJ0bmVyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHVuc2lnbmVkIGludCogY250KQorc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFydG5lcihzdHJ1Y3QgaW5vZGUqIGlub2RlLCB1bnNpZ25lZCBpbnQgKmNudCkKIHsKIAlpbnQgY3VyID0gKmNudDsJCi0Jd2hpbGUoY3VyID09ICpjbnQpIHsKLQkJcGlwZV93YWl0KGlub2RlKTsKLQkJaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisKKwl3aGlsZSAoY3VyID09ICpjbnQpIHsKKwkJcGlwZV93YWl0KGlub2RlLT5pX3BpcGUpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHdha2VfdXBfcGFydG5lcihzdHJ1Y3QgaW5vZGUqIGlub2RlKQogewotCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbm9kZS0+aV9waXBlLT53YWl0KTsKIH0KIAogc3RhdGljIGludCBmaWZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWlmICghaW5vZGUtPmlfcGlwZSkgeworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKKwlpZiAoIXBpcGUpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJaWYoIXBpcGVfbmV3KGlub2RlKSkKKwkJcGlwZSA9IGFsbG9jX3BpcGVfaW5mbyhpbm9kZSk7CisJCWlmICghcGlwZSkKIAkJCWdvdG8gZXJyX25vY2xlYW51cDsKKwkJaW5vZGUtPmlfcGlwZSA9IHBpcGU7CiAJfQogCWZpbHAtPmZfdmVyc2lvbiA9IDA7CiAKQEAgLTUzLDE4ICs1OCwxOCBAQAogCSAqICBvcGVuZWQsIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBwcm9jZXNzIHdyaXRpbmcgdGhlIEZJRk8uCiAJICovCiAJCWZpbHAtPmZfb3AgPSAmcmVhZF9maWZvX2ZvcHM7Ci0JCVBJUEVfUkNPVU5URVIoKmlub2RlKSsrOwotCQlpZiAoUElQRV9SRUFERVJTKCppbm9kZSkrKyA9PSAwKQorCQlwaXBlLT5yX2NvdW50ZXIrKzsKKwkJaWYgKHBpcGUtPnJlYWRlcnMrKyA9PSAwKQogCQkJd2FrZV91cF9wYXJ0bmVyKGlub2RlKTsKIAotCQlpZiAoIVBJUEVfV1JJVEVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+d3JpdGVycykgewogCQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKIAkJCQkvKiBzdXBwcmVzcyBQT0xMSFVQIHVudGlsIHdlIGhhdmUKIAkJCQkgKiBzZWVuIGEgd3JpdGVyICovCi0JCQkJZmlscC0+Zl92ZXJzaW9uID0gUElQRV9XQ09VTlRFUigqaW5vZGUpOworCQkJCWZpbHAtPmZfdmVyc2lvbiA9IHBpcGUtPndfY291bnRlcjsKIAkJCX0gZWxzZSAKIAkJCXsKLQkJCQl3YWl0X2Zvcl9wYXJ0bmVyKGlub2RlLCAmUElQRV9XQ09VTlRFUigqaW5vZGUpKTsKKwkJCQl3YWl0X2Zvcl9wYXJ0bmVyKGlub2RlLCAmcGlwZS0+d19jb3VudGVyKTsKIAkJCQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCQkJZ290byBlcnJfcmQ7CiAJCQl9CkBAIC03OCwxNiArODMsMTYgQEAKIAkgKiAgZXJybm89RU5YSU8gd2hlbiB0aGVyZSBpcyBubyBwcm9jZXNzIHJlYWRpbmcgdGhlIEZJRk8uCiAJICovCiAJCXJldCA9IC1FTlhJTzsKLQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgIVBJUEVfUkVBREVSUygqaW5vZGUpKQorCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAhcGlwZS0+cmVhZGVycykKIAkJCWdvdG8gZXJyOwogCiAJCWZpbHAtPmZfb3AgPSAmd3JpdGVfZmlmb19mb3BzOwotCQlQSVBFX1dDT1VOVEVSKCppbm9kZSkrKzsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSsrKQorCQlwaXBlLT53X2NvdW50ZXIrKzsKKwkJaWYgKCFwaXBlLT53cml0ZXJzKyspCiAJCQl3YWtlX3VwX3BhcnRuZXIoaW5vZGUpOwogCi0JCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsKLQkJCXdhaXRfZm9yX3BhcnRuZXIoaW5vZGUsICZQSVBFX1JDT1VOVEVSKCppbm9kZSkpOworCQlpZiAoIXBpcGUtPnJlYWRlcnMpIHsKKwkJCXdhaXRfZm9yX3BhcnRuZXIoaW5vZGUsICZwaXBlLT5yX2NvdW50ZXIpOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCWdvdG8gZXJyX3dyOwogCQl9CkBAIC0xMDIsMTEgKzEwNywxMSBAQAogCSAqLwogCQlmaWxwLT5mX29wID0gJnJkd3JfZmlmb19mb3BzOwogCi0JCVBJUEVfUkVBREVSUygqaW5vZGUpKys7Ci0JCVBJUEVfV1JJVEVSUygqaW5vZGUpKys7Ci0JCVBJUEVfUkNPVU5URVIoKmlub2RlKSsrOwotCQlQSVBFX1dDT1VOVEVSKCppbm9kZSkrKzsKLQkJaWYgKFBJUEVfUkVBREVSUygqaW5vZGUpID09IDEgfHwgUElQRV9XUklURVJTKCppbm9kZSkgPT0gMSkKKwkJcGlwZS0+cmVhZGVycysrOworCQlwaXBlLT53cml0ZXJzKys7CisJCXBpcGUtPnJfY291bnRlcisrOworCQlwaXBlLT53X2NvdW50ZXIrKzsKKwkJaWYgKHBpcGUtPnJlYWRlcnMgPT0gMSB8fCBwaXBlLT53cml0ZXJzID09IDEpCiAJCQl3YWtlX3VwX3BhcnRuZXIoaW5vZGUpOwogCQlicmVhazsKIApAQCAtMTE2LDI3ICsxMjEsMjcgQEAKIAl9CiAKIAkvKiBPayEgKi8KLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gMDsKIAogZXJyX3JkOgotCWlmICghLS1QSVBFX1JFQURFUlMoKmlub2RlKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKKwlpZiAoIS0tcGlwZS0+cmVhZGVycykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKIAlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJZ290byBlcnI7CiAKIGVycl93cjoKLQlpZiAoIS0tUElQRV9XUklURVJTKCppbm9kZSkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CisJaWYgKCEtLXBpcGUtPndyaXRlcnMpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CiAJcmV0ID0gLUVSRVNUQVJUU1lTOwogCWdvdG8gZXJyOwogCiBlcnI6Ci0JaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSAmJiAhUElQRV9XUklURVJTKCppbm9kZSkpCisJaWYgKCFwaXBlLT5yZWFkZXJzICYmICFwaXBlLT53cml0ZXJzKQogCQlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7CiAKIGVycl9ub2NsZWFudXA6Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19vbHQuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfb2x0LmMKaW5kZXggNzZhMDcwOC4uMDQ5NTAwODQ3IDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX29sdC5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfb2x0LmMKQEAgLTQyLDI0ICs0MiwyMSBAQAogc3RhdGljIGlubGluZSB2b2lkCiB2eGZzX2dldF9mc2hlYWQoc3RydWN0IHZ4ZnNfb2x0ZnNoZWFkICpmc2hwLCBzdHJ1Y3Qgdnhmc19zYl9pbmZvICppbmZwKQogewotCWlmIChpbmZwLT52c2lfZnNoaW5vKQotCQlCVUcoKTsKKwlCVUdfT04oaW5mcC0+dnNpX2ZzaGlubyk7CiAJaW5mcC0+dnNpX2ZzaGlubyA9IGZzaHAtPm9sdF9mc2lub1swXTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiB2eGZzX2dldF9pbGlzdChzdHJ1Y3Qgdnhmc19vbHRpbGlzdCAqaWxpc3RwLCBzdHJ1Y3Qgdnhmc19zYl9pbmZvICppbmZwKQogewotCWlmIChpbmZwLT52c2lfaWV4dCkKLQkJQlVHKCk7CisJQlVHX09OKGluZnAtPnZzaV9pZXh0KTsKIAlpbmZwLT52c2lfaWV4dCA9IGlsaXN0cC0+b2x0X2lleHRbMF07IAogfQogCiBzdGF0aWMgaW5saW5lIHVfbG9uZwogdnhmc19vYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIGRhZGRyX3QgYmxvY2ssIHVfbG9uZyBic2l6ZSkKIHsKLQlpZiAoc2JwLT5zX2Jsb2Nrc2l6ZSAlIGJzaXplKQotCQlCVUcoKTsKKwlCVUdfT04oc2JwLT5zX2Jsb2Nrc2l6ZSAlIGJzaXplKTsKIAlyZXR1cm4gKGJsb2NrICogKHNicC0+c19ibG9ja3NpemUgLyBic2l6ZSkpOwogfQogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCAyM2QxZjUyLi4xMDRhNjJkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCisrKyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICBGVVNFOiBGaWxlc3lzdGVtIGluIFVzZXJzcGFjZQotICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSAgTWlrbG9zIFN6ZXJlZGkgPG1pa2xvc0BzemVyZWRpLmh1PgorICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiAgTWlrbG9zIFN6ZXJlZGkgPG1pa2xvc0BzemVyZWRpLmh1PgogCiAgIFRoaXMgcHJvZ3JhbSBjYW4gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLgogICBTZWUgdGhlIGZpbGUgQ09QWUlORy4KQEAgLTIzLDEzICsyMywxMSBAQAogCiBzdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqZnVzZV9nZXRfY29ubihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JZmMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGZjICYmICFmYy0+Y29ubmVjdGVkKQotCQlmYyA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7Ci0JcmV0dXJuIGZjOworCS8qCisJICogTG9ja2xlc3MgYWNjZXNzIGlzIE9LLCBiZWNhdXNlIGZpbGUtPnByaXZhdGUgZGF0YSBpcyBzZXQKKwkgKiBvbmNlIGR1cmluZyBtb3VudCBhbmQgaXMgdmFsaWQgdW50aWwgdGhlIGZpbGUgaXMgcmVsZWFzZWQuCisJICovCisJcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YTsKIH0KIAogc3RhdGljIHZvaWQgZnVzZV9yZXF1ZXN0X2luaXQoc3RydWN0IGZ1c2VfcmVxICpyZXEpCkBAIC03NCwxMCArNzIsOCBAQAogICovCiB2b2lkIGZ1c2VfcmVzZXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKLQlpbnQgcHJlYWxsb2NhdGVkID0gcmVxLT5wcmVhbGxvY2F0ZWQ7CiAJQlVHX09OKGF0b21pY19yZWFkKCZyZXEtPmNvdW50KSAhPSAxKTsKIAlmdXNlX3JlcXVlc3RfaW5pdChyZXEpOwotCXJlcS0+cHJlYWxsb2NhdGVkID0gcHJlYWxsb2NhdGVkOwogfQogCiBzdGF0aWMgdm9pZCBfX2Z1c2VfZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCkBAIC05Miw4MCArODgsNjQgQEAKIAlhdG9taWNfZGVjKCZyZXEtPmNvdW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZG9fZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMpCitzdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcShzdHJ1Y3QgZnVzZV9jb25uICpmYykKIHsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKLQotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlCVUdfT04obGlzdF9lbXB0eSgmZmMtPnVudXNlZF9saXN0KSk7Ci0JcmVxID0gbGlzdF9lbnRyeShmYy0+dW51c2VkX2xpc3QubmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKLQlsaXN0X2RlbF9pbml0KCZyZXEtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCWZ1c2VfcmVxdWVzdF9pbml0KHJlcSk7Ci0JcmVxLT5wcmVhbGxvY2F0ZWQgPSAxOwotCXJlcS0+aW4uaC51aWQgPSBjdXJyZW50LT5mc3VpZDsKLQlyZXEtPmluLmguZ2lkID0gY3VycmVudC0+ZnNnaWQ7Ci0JcmVxLT5pbi5oLnBpZCA9IGN1cnJlbnQtPnBpZDsKLQlyZXR1cm4gcmVxOwotfQotCi0vKiBUaGlzIGNhbiByZXR1cm4gTlVMTCwgYnV0IG9ubHkgaW4gY2FzZSBpdCdzIGludGVycnVwdGVkIGJ5IGEgU0lHS0lMTCAqLwotc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQotewotCWludCBpbnRyOwogCXNpZ3NldF90IG9sZHNldDsKKwlpbnQgaW50cjsKKwlpbnQgZXJyOwogCiAJYXRvbWljX2luYygmZmMtPm51bV93YWl0aW5nKTsKIAlibG9ja19zaWdzKCZvbGRzZXQpOwotCWludHIgPSBkb3duX2ludGVycnVwdGlibGUoJmZjLT5vdXRzdGFuZGluZ19zZW0pOworCWludHIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmMtPmJsb2NrZWRfd2FpdHEsICFmYy0+YmxvY2tlZCk7CiAJcmVzdG9yZV9zaWdzKCZvbGRzZXQpOwotCWlmIChpbnRyKSB7Ci0JCWF0b21pY19kZWMoJmZjLT5udW1fd2FpdGluZyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gZG9fZ2V0X3JlcXVlc3QoZmMpOwotfQorCWVyciA9IC1FSU5UUjsKKwlpZiAoaW50cikKKwkJZ290byBvdXQ7CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggZnVzZV9sb2NrIGhlbGQgKi8KLXN0YXRpYyB2b2lkIGZ1c2VfcHV0YmFja19yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKLXsKLQlpZiAocmVxLT5wcmVhbGxvY2F0ZWQpIHsKLQkJYXRvbWljX2RlYygmZmMtPm51bV93YWl0aW5nKTsKLQkJbGlzdF9hZGQoJnJlcS0+bGlzdCwgJmZjLT51bnVzZWRfbGlzdCk7Ci0JfSBlbHNlCi0JCWZ1c2VfcmVxdWVzdF9mcmVlKHJlcSk7CisJcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7CisJZXJyID0gLUVOT01FTTsKKwlpZiAoIXJlcSkKKwkJZ290byBvdXQ7CiAKLQkvKiBJZiB3ZSBhcmUgaW4gZGVidCBkZWNyZWFzZSB0aGF0IGZpcnN0ICovCi0JaWYgKGZjLT5vdXRzdGFuZGluZ19kZWJ0KQotCQlmYy0+b3V0c3RhbmRpbmdfZGVidC0tOwotCWVsc2UKLQkJdXAoJmZjLT5vdXRzdGFuZGluZ19zZW0pOworCXJlcS0+aW4uaC51aWQgPSBjdXJyZW50LT5mc3VpZDsKKwlyZXEtPmluLmguZ2lkID0gY3VycmVudC0+ZnNnaWQ7CisJcmVxLT5pbi5oLnBpZCA9IGN1cnJlbnQtPnBpZDsKKwlyZXEtPndhaXRpbmcgPSAxOworCXJldHVybiByZXE7CisKKyBvdXQ6CisJYXRvbWljX2RlYygmZmMtPm51bV93YWl0aW5nKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiB2b2lkIGZ1c2VfcHV0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZXEtPmNvdW50KSkgewotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JCWZ1c2VfcHV0YmFja19yZXF1ZXN0KGZjLCByZXEpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJaWYgKHJlcS0+d2FpdGluZykKKwkJCWF0b21pY19kZWMoJmZjLT5udW1fd2FpdGluZyk7CisJCWZ1c2VfcmVxdWVzdF9mcmVlKHJlcSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBmdXNlX3B1dF9yZXF1ZXN0X2xvY2tlZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJlcS0+Y291bnQpKQotCQlmdXNlX3B1dGJhY2tfcmVxdWVzdChmYywgcmVxKTsKLX0KLQotdm9pZCBmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKKy8qCisgKiBDYWxsZWQgd2l0aCBzYnB1dF9zZW0gaGVsZCBmb3IgcmVhZCAocmVxdWVzdF9lbmQpIG9yIHdyaXRlCisgKiAoZnVzZV9wdXRfc3VwZXIpLiAgQnkgdGhlIHRpbWUgZnVzZV9wdXRfc3VwZXIoKSBpcyBmaW5pc2hlZCwgYWxsCisgKiBpbm9kZXMgYmVsb25naW5nIHRvIGJhY2tncm91bmQgcmVxdWVzdHMgbXVzdCBiZSByZWxlYXNlZCwgc28gdGhlCisgKiBpcHV0cyBoYXZlIHRvIGJlIGRvbmUgd2l0aGluIHRoZSBsb2NrZWQgcmVnaW9uLgorICovCit2b2lkIGZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpcHV0KHJlcS0+aW5vZGUpOwogCWlwdXQocmVxLT5pbm9kZTIpOwotCWlmIChyZXEtPmZpbGUpCi0JCWZwdXQocmVxLT5maWxlKTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJbGlzdF9kZWwoJnJlcS0+YmdfZW50cnkpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCWlmIChmYy0+bnVtX2JhY2tncm91bmQgPT0gRlVTRV9NQVhfQkFDS0dST1VORCkgeworCQlmYy0+YmxvY2tlZCA9IDA7CisJCXdha2VfdXBfYWxsKCZmYy0+YmxvY2tlZF93YWl0cSk7CisJfQorCWZjLT5udW1fYmFja2dyb3VuZC0tOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiB9CiAKIC8qCkBAIC0xODQsMjQgKzE2NCwyOSBAQAogICogaW50ZXJydXB0ZWQgYW5kIHB1dCBpbiB0aGUgYmFja2dyb3VuZCwgaXQgd2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvcgogICogYW5kIGhlbmNlIG5ldmVyIGJlIHJlc2V0IGFuZCByZXVzZWQuCiAgKgotICogQ2FsbGVkIHdpdGggZnVzZV9sb2NrLCB1bmxvY2tzIGl0CisgKiBDYWxsZWQgd2l0aCBmYy0+bG9jaywgdW5sb2NrcyBpdAogICovCiBzdGF0aWMgdm9pZCByZXF1ZXN0X2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CiAJcmVxLT5zdGF0ZSA9IEZVU0VfUkVRX0ZJTklTSEVEOwogCWlmICghcmVxLT5iYWNrZ3JvdW5kKSB7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCXdha2VfdXAoJnJlcS0+d2FpdHEpOwotCQlmdXNlX3B1dF9yZXF1ZXN0X2xvY2tlZChmYywgcmVxKTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmVuZCkgKHN0cnVjdCBmdXNlX2Nvbm4gKiwgc3RydWN0IGZ1c2VfcmVxICopID0gcmVxLT5lbmQ7CiAJCXJlcS0+ZW5kID0gTlVMTDsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCWRvd25fcmVhZCgmZmMtPnNicHV0X3NlbSk7CiAJCWlmIChmYy0+bW91bnRlZCkKLQkJCWZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHJlcSk7CisJCQlmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChmYywgcmVxKTsKIAkJdXBfcmVhZCgmZmMtPnNicHV0X3NlbSk7CisKKwkJLyogZnB1dCBtdXN0IGdvIG91dHNpZGUgc2JwdXRfc2VtLCBvdGhlcndpc2UgaXQgY2FuIGRlYWRsb2NrICovCisJCWlmIChyZXEtPmZpbGUpCisJCQlmcHV0KHJlcS0+ZmlsZSk7CisKIAkJaWYgKGVuZCkKIAkJCWVuZChmYywgcmVxKTsKIAkJZWxzZQpAQCAtMjQyLDYgKzIyNyw5IEBACiB7CiAJcmVxLT5iYWNrZ3JvdW5kID0gMTsKIAlsaXN0X2FkZCgmcmVxLT5iZ19lbnRyeSwgJmZjLT5iYWNrZ3JvdW5kKTsKKwlmYy0+bnVtX2JhY2tncm91bmQrKzsKKwlpZiAoZmMtPm51bV9iYWNrZ3JvdW5kID09IEZVU0VfTUFYX0JBQ0tHUk9VTkQpCisJCWZjLT5ibG9ja2VkID0gMTsKIAlpZiAocmVxLT5pbm9kZSkKIAkJcmVxLT5pbm9kZSA9IGlncmFiKHJlcS0+aW5vZGUpOwogCWlmIChyZXEtPmlub2RlMikKQEAgLTI1MCwxNiArMjM4LDE2IEBACiAJCWdldF9maWxlKHJlcS0+ZmlsZSk7CiB9CiAKLS8qIENhbGxlZCB3aXRoIGZ1c2VfbG9jayBoZWxkLiAgUmVsZWFzZXMsIGFuZCB0aGVuIHJlYWNxdWlyZXMgaXQuICovCisvKiBDYWxsZWQgd2l0aCBmYy0+bG9jayBoZWxkLiAgUmVsZWFzZXMsIGFuZCB0aGVuIHJlYWNxdWlyZXMgaXQuICovCiBzdGF0aWMgdm9pZCByZXF1ZXN0X3dhaXRfYW5zd2VyKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlzaWdzZXRfdCBvbGRzZXQ7CiAKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCWJsb2NrX3NpZ3MoJm9sZHNldCk7CiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJlcS0+d2FpdHEsIHJlcS0+c3RhdGUgPT0gRlVTRV9SRVFfRklOSVNIRUQpOwogCXJlc3RvcmVfc2lncygmb2xkc2V0KTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJaWYgKHJlcS0+c3RhdGUgPT0gRlVTRV9SRVFfRklOSVNIRUQgJiYgIXJlcS0+aW50ZXJydXB0ZWQpCiAJCXJldHVybjsKIApAQCAtMjczLDkgKzI2MSw5IEBACiAJCSAgIGxvY2tlZCBzdGF0ZSwgdGhlcmUgbXVzdG4ndCBiZSBhbnkgZmlsZXN5c3RlbQogCQkgICBvcGVyYXRpb24gKGUuZy4gcGFnZSBmYXVsdCksIHNpbmNlIHRoYXQgY291bGQgbGVhZAogCQkgICB0byBkZWFkbG9jayAqLwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAkJd2FpdF9ldmVudChyZXEtPndhaXRxLCAhcmVxLT5sb2NrZWQpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIAlpZiAocmVxLT5zdGF0ZSA9PSBGVVNFX1JFUV9QRU5ESU5HKSB7CiAJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwpAQCAtMzA0LDE5ICsyOTIsMTQgQEAKIAlyZXEtPmluLmgudW5pcXVlID0gZmMtPnJlcWN0cjsKIAlyZXEtPmluLmgubGVuID0gc2l6ZW9mKHN0cnVjdCBmdXNlX2luX2hlYWRlcikgKwogCQlsZW5fYXJncyhyZXEtPmluLm51bWFyZ3MsIChzdHJ1Y3QgZnVzZV9hcmcgKikgcmVxLT5pbi5hcmdzKTsKLQlpZiAoIXJlcS0+cHJlYWxsb2NhdGVkKSB7Ci0JCS8qIElmIHJlcXVlc3QgaXMgbm90IHByZWFsbG9jYXRlZCAoZWl0aGVyIEZPUkdFVCBvcgotCQkgICBSRUxFQVNFKSwgdGhlbiBzdGlsbCBkZWNyZWFzZSBvdXRzdGFuZGluZ19zZW0sIHNvCi0JCSAgIHVzZXIgY2FuJ3Qgb3BlbiBpbmZpbml0ZSBudW1iZXIgb2YgZmlsZXMgd2hpbGUgbm90Ci0JCSAgIHByb2Nlc3NpbmcgdGhlIFJFTEVBU0UgcmVxdWVzdHMuICBIb3dldmVyIGZvcgotCQkgICBlZmZpY2llbmN5IGRvIGl0IHdpdGhvdXQgYmxvY2tpbmcsIHNvIGlmIGRvd24oKQotCQkgICB3b3VsZCBibG9jaywganVzdCBpbmNyZWFzZSB0aGUgZGVidCBpbnN0ZWFkICovCi0JCWlmIChkb3duX3RyeWxvY2soJmZjLT5vdXRzdGFuZGluZ19zZW0pKQotCQkJZmMtPm91dHN0YW5kaW5nX2RlYnQrKzsKLQl9CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmZmMtPnBlbmRpbmcpOwogCXJlcS0+c3RhdGUgPSBGVVNFX1JFUV9QRU5ESU5HOworCWlmICghcmVxLT53YWl0aW5nKSB7CisJCXJlcS0+d2FpdGluZyA9IDE7CisJCWF0b21pY19pbmMoJmZjLT5udW1fd2FpdGluZyk7CisJfQogCXdha2VfdXAoJmZjLT53YWl0cSk7CisJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIH0KIAogLyoKQEAgLTMyNSw3ICszMDgsNyBAQAogdm9pZCByZXF1ZXN0X3NlbmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCXJlcS0+aXNyZXBseSA9IDE7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWlmICghZmMtPmNvbm5lY3RlZCkKIAkJcmVxLT5vdXQuaC5lcnJvciA9IC1FTk9UQ09OTjsKIAllbHNlIGlmIChmYy0+Y29ubl9lcnJvcikKQEAgLTMzOCwxNSArMzIxLDE2IEBACiAKIAkJcmVxdWVzdF93YWl0X2Fuc3dlcihmYywgcmVxKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcmVxdWVzdF9zZW5kX25vd2FpdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWJhY2tncm91bmRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAoZmMtPmNvbm5lY3RlZCkgewogCQlxdWV1ZV9yZXF1ZXN0KGZjLCByZXEpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl9IGVsc2UgewogCQlyZXEtPm91dC5oLmVycm9yID0gLUVOT1RDT05OOwogCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKQEAgLTM2Miw5ICszNDYsNiBAQAogdm9pZCByZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJcmVxLT5pc3JlcGx5ID0gMTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JYmFja2dyb3VuZF9yZXF1ZXN0KGZjLCByZXEpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwogCXJlcXVlc3Rfc2VuZF9ub3dhaXQoZmMsIHJlcSk7CiB9CiAKQEAgLTM3MywxNiArMzU0LDE2IEBACiAgKiBhbnl0aGluZyB0aGF0IGNvdWxkIGNhdXNlIGEgcGFnZS1mYXVsdC4gIElmIHRoZSByZXF1ZXN0IHdhcyBhbHJlYWR5CiAgKiBpbnRlcnJ1cHRlZCBiYWlsIG91dC4KICAqLwotc3RhdGljIGludCBsb2NrX3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCitzdGF0aWMgaW50IGxvY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJaW50IGVyciA9IDA7CiAJaWYgKHJlcSkgewotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQlpZiAocmVxLT5pbnRlcnJ1cHRlZCkKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCWVsc2UKIAkJCXJlcS0+bG9ja2VkID0gMTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0zOTIsMTggKzM3MywxOSBAQAogICogcmVxdWVzdGVyIHRocmVhZCBpcyBjdXJyZW50bHkgd2FpdGluZyBmb3IgaXQgdG8gYmUgdW5sb2NrZWQsIHNvCiAgKiB3YWtlIGl0IHVwLgogICovCi1zdGF0aWMgdm9pZCB1bmxvY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIHVubG9ja19yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpZiAocmVxKSB7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCXJlcS0+bG9ja2VkID0gMDsKIAkJaWYgKHJlcS0+aW50ZXJydXB0ZWQpCiAJCQl3YWtlX3VwKCZyZXEtPndhaXRxKTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJfQogfQogCiBzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlIHsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKIAlpbnQgd3JpdGU7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJY29uc3Qgc3RydWN0IGlvdmVjICppb3Y7CkBAIC00MTYsMTEgKzM5OCwxMiBAQAogCXVuc2lnbmVkIGxlbjsKIH07CiAKLXN0YXRpYyB2b2lkIGZ1c2VfY29weV9pbml0KHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLCBpbnQgd3JpdGUsCi0JCQkgICBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCitzdGF0aWMgdm9pZCBmdXNlX2NvcHlfaW5pdChzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcywgc3RydWN0IGZ1c2VfY29ubiAqZmMsCisJCQkgICBpbnQgd3JpdGUsIHN0cnVjdCBmdXNlX3JlcSAqcmVxLAorCQkJICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKIAltZW1zZXQoY3MsIDAsIHNpemVvZigqY3MpKTsKKwljcy0+ZmMgPSBmYzsKIAljcy0+d3JpdGUgPSB3cml0ZTsKIAljcy0+cmVxID0gcmVxOwogCWNzLT5pb3YgPSBpb3Y7CkBAIC00NTAsNyArNDMzLDcgQEAKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAlpbnQgZXJyOwogCi0JdW5sb2NrX3JlcXVlc3QoY3MtPnJlcSk7CisJdW5sb2NrX3JlcXVlc3QoY3MtPmZjLCBjcy0+cmVxKTsKIAlmdXNlX2NvcHlfZmluaXNoKGNzKTsKIAlpZiAoIWNzLT5zZWdsZW4pIHsKIAkJQlVHX09OKCFjcy0+bnJfc2Vncyk7CkBAIC00NzMsNyArNDU2LDcgQEAKIAljcy0+c2VnbGVuIC09IGNzLT5sZW47CiAJY3MtPmFkZHIgKz0gY3MtPmxlbjsKIAotCXJldHVybiBsb2NrX3JlcXVlc3QoY3MtPnJlcSk7CisJcmV0dXJuIGxvY2tfcmVxdWVzdChjcy0+ZmMsIGNzLT5yZXEpOwogfQogCiAvKiBEbyBhcyBtdWNoIGNvcHkgdG8vZnJvbSB1c2Vyc3BhY2UgYnVmZmVyIGFzIHdlIGNhbiAqLwpAQCAtNTg1LDkgKzU2OCw5IEBACiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCi0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQlzY2hlZHVsZSgpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZmYy0+d2FpdHEsICZ3YWl0KTsKQEAgLTYwNiwxOCArNTg5LDIxIEBACiAJCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqb2ZmKQogewogCWludCBlcnI7Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmM7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJc3RydWN0IGZ1c2VfaW4gKmluOwogCXN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgY3M7CiAJdW5zaWduZWQgcmVxc2l6ZTsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CisJaWYgKCFmYykKKwkJcmV0dXJuIC1FUEVSTTsKIAogIHJlc3RhcnQ6Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCWZjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IC1FUEVSTTsKLQlpZiAoIWZjKQorCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWVyciA9IC1FQUdBSU47CisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgZmMtPmNvbm5lY3RlZCAmJgorCSAgICBsaXN0X2VtcHR5KCZmYy0+cGVuZGluZykpCiAJCWdvdG8gZXJyX3VubG9jazsKKwogCXJlcXVlc3Rfd2FpdChmYyk7CiAJZXJyID0gLUVOT0RFVjsKIAlpZiAoIWZjLT5jb25uZWN0ZWQpCkBAIC02NDEsMTQgKzYyNywxNCBAQAogCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKIAkJZ290byByZXN0YXJ0OwogCX0KLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQlmdXNlX2NvcHlfaW5pdCgmY3MsIDEsIHJlcSwgaW92LCBucl9zZWdzKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOworCWZ1c2VfY29weV9pbml0KCZjcywgZmMsIDEsIHJlcSwgaW92LCBucl9zZWdzKTsKIAllcnIgPSBmdXNlX2NvcHlfb25lKCZjcywgJmluLT5oLCBzaXplb2YoaW4tPmgpKTsKIAlpZiAoIWVycikKIAkJZXJyID0gZnVzZV9jb3B5X2FyZ3MoJmNzLCBpbi0+bnVtYXJncywgaW4tPmFyZ3BhZ2VzLAogCQkJCSAgICAgKHN0cnVjdCBmdXNlX2FyZyAqKSBpbi0+YXJncywgMCk7CiAJZnVzZV9jb3B5X2ZpbmlzaCgmY3MpOwotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAlyZXEtPmxvY2tlZCA9IDA7CiAJaWYgKCFlcnIgJiYgcmVxLT5pbnRlcnJ1cHRlZCkKIAkJZXJyID0gLUVOT0VOVDsKQEAgLTY2MywxMiArNjQ5LDEyIEBACiAJZWxzZSB7CiAJCXJlcS0+c3RhdGUgPSBGVVNFX1JFUV9TRU5UOwogCQlsaXN0X21vdmVfdGFpbCgmcmVxLT5saXN0LCAmZmMtPnByb2Nlc3NpbmcpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl9CiAJcmV0dXJuIHJlcXNpemU7CiAKICBlcnJfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzM1LDkgKzcyMSw5IEBACiAJc3RydWN0IGZ1c2VfY29weV9zdGF0ZSBjczsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJaWYgKCFmYykKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAtRVBFUk07CiAKLQlmdXNlX2NvcHlfaW5pdCgmY3MsIDAsIE5VTEwsIGlvdiwgbnJfc2Vncyk7CisJZnVzZV9jb3B5X2luaXQoJmNzLCBmYywgMCwgTlVMTCwgaW92LCBucl9zZWdzKTsKIAlpZiAobmJ5dGVzIDwgc2l6ZW9mKHN0cnVjdCBmdXNlX291dF9oZWFkZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzQ5LDcgKzczNSw3IEBACiAJICAgIG9oLmxlbiAhPSBuYnl0ZXMpCiAJCWdvdG8gZXJyX2ZpbmlzaDsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghZmMtPmNvbm5lY3RlZCkKIAkJZ290byBlcnJfdW5sb2NrOwpAQCAtNzYwLDkgKzc0Niw5IEBACiAJCWdvdG8gZXJyX3VubG9jazsKIAogCWlmIChyZXEtPmludGVycnVwdGVkKSB7Ci0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQlmdXNlX2NvcHlfZmluaXNoKCZjcyk7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CkBAIC03NzAsMTIgKzc1NiwxMiBAQAogCXJlcS0+b3V0LmggPSBvaDsKIAlyZXEtPmxvY2tlZCA9IDE7CiAJY3MucmVxID0gcmVxOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAKIAllcnIgPSBjb3B5X291dF9hcmdzKCZjcywgJnJlcS0+b3V0LCBuYnl0ZXMpOwogCWZ1c2VfY29weV9maW5pc2goJmNzKTsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAlyZXEtPmxvY2tlZCA9IDA7CiAJaWYgKCFlcnIpIHsKIAkJaWYgKHJlcS0+aW50ZXJydXB0ZWQpCkBAIC03ODcsNyArNzczLDcgQEAKIAlyZXR1cm4gZXJyID8gZXJyIDogbmJ5dGVzOwogCiAgZXJyX3VubG9jazoKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogIGVycl9maW5pc2g6CiAJZnVzZV9jb3B5X2ZpbmlzaCgmY3MpOwogCXJldHVybiBlcnI7CkBAIC04MDQsMTggKzc5MCwxOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgZnVzZV9kZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJdW5zaWduZWQgbWFzayA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBmdXNlX2dldF9jb25uKGZpbGUpOwogCWlmICghZmMpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gUE9MTEVSUjsKIAogCXBvbGxfd2FpdChmaWxlLCAmZmMtPndhaXRxLCB3YWl0KTsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmZjLT5wZW5kaW5nKSkKLSAgICAgICAgICAgICAgICBtYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJaWYgKCFmYy0+Y29ubmVjdGVkKQorCQltYXNrID0gUE9MTEVSUjsKKwllbHNlIGlmICghbGlzdF9lbXB0eSgmZmMtPnBlbmRpbmcpKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAogCXJldHVybiBtYXNrOwogfQpAQCAtODIzLDcgKzgxMCw3IEBACiAvKgogICogQWJvcnQgYWxsIHJlcXVlc3RzIG9uIHRoZSBnaXZlbiBsaXN0IChwZW5kaW5nIG9yIHByb2Nlc3NpbmcpCiAgKgotICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhbmQgcmVhY3F1aXJlcyBmdXNlX2xvY2sKKyAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYW5kIHJlYWNxdWlyZXMgZmMtPmxvY2sKICAqLwogc3RhdGljIHZvaWQgZW5kX3JlcXVlc3RzKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewpAQCAtODMyLDcgKzgxOSw3IEBACiAJCXJlcSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKIAkJcmVxLT5vdXQuaC5lcnJvciA9IC1FQ09OTkFCT1JURUQ7CiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIH0KIApAQCAtODYzLDEwICs4NTAsMTAgQEAKIAkJCXJlcS0+ZW5kID0gTlVMTDsKIAkJCS8qIFRoZSBlbmQgZnVuY3Rpb24gd2lsbCBjb25zdW1lIHRoaXMgcmVmZXJlbmNlICovCiAJCQlfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTsKLQkJCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAkJCXdhaXRfZXZlbnQocmVxLT53YWl0cSwgIXJlcS0+bG9ja2VkKTsKIAkJCWVuZChmYywgcmVxKTsKLQkJCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQl9CiAJfQogfQpAQCAtODkzLDM1ICs4ODAsNDQgQEAKICAqLwogdm9pZCBmdXNlX2Fib3J0X2Nvbm4oc3RydWN0IGZ1c2VfY29ubiAqZmMpCiB7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWlmIChmYy0+Y29ubmVjdGVkKSB7CiAJCWZjLT5jb25uZWN0ZWQgPSAwOwogCQllbmRfaW9fcmVxdWVzdHMoZmMpOwogCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cGVuZGluZyk7CiAJCWVuZF9yZXF1ZXN0cyhmYywgJmZjLT5wcm9jZXNzaW5nKTsKIAkJd2FrZV91cF9hbGwoJmZjLT53YWl0cSk7CisJCWtpbGxfZmFzeW5jKCZmYy0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAJfQotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgZnVzZV9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKLQotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlmYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJaWYgKGZjKSB7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQlmYy0+Y29ubmVjdGVkID0gMDsKIAkJZW5kX3JlcXVlc3RzKGZjLCAmZmMtPnBlbmRpbmcpOwogCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cHJvY2Vzc2luZyk7Ci0JfQotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCWlmIChmYykKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKwkJZmFzeW5jX2hlbHBlcigtMSwgZmlsZSwgMCwgJmZjLT5mYXN5bmMpOwogCQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOworCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZ1c2VfZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCit7CisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBmdXNlX2dldF9jb25uKGZpbGUpOworCWlmICghZmMpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBObyBsb2NraW5nIC0gZmFzeW5jX2hlbHBlciBkb2VzIGl0cyBvd24gbG9ja2luZyAqLworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmZjLT5mYXN5bmMpOworfQorCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1c2VfZGV2X29wZXJhdGlvbnMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLApAQCAtOTMxLDYgKzkyNyw3IEBACiAJLndyaXRldgkJPSBmdXNlX2Rldl93cml0ZXYsCiAJLnBvbGwJCT0gZnVzZV9kZXZfcG9sbCwKIAkucmVsZWFzZQk9IGZ1c2VfZGV2X3JlbGVhc2UsCisJLmZhc3luYwkJPSBmdXNlX2Rldl9mYXN5bmMsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgZnVzZV9taXNjZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggMjU2MzU1Yi4uOGQ3NTQ2ZSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0xMTcsOCArMTE3LDggQEAKIAkJCXJldHVybiAwOwogCiAJCWZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0JCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCQlpZiAoIXJlcSkKKwkJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwkJaWYgKElTX0VSUihyZXEpKQogCQkJcmV0dXJuIDA7CiAKIAkJZnVzZV9sb29rdXBfaW5pdChyZXEsIGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSwgZW50cnksICZvdXRhcmcpOwpAQCAtMTg4LDkgKzE4OCw5IEBACiAJaWYgKGVudHJ5LT5kX25hbWUubGVuID4gRlVTRV9OQU1FX01BWCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlRSKTsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihyZXEpKTsKIAogCWZ1c2VfbG9va3VwX2luaXQocmVxLCBkaXIsIGVudHJ5LCAmb3V0YXJnKTsKIAlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CkBAIC0yNDQsMTUgKzI0NCwxNCBAQAogCXN0cnVjdCBmaWxlICpmaWxlOwogCWludCBmbGFncyA9IG5kLT5pbnRlbnQub3Blbi5mbGFncyAtIDE7CiAKLQllcnIgPSAtRU5PU1lTOwogCWlmIChmYy0+bm9fY3JlYXRlKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9TWVM7CiAKLQllcnIgPSAtRUlOVFI7Ci0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCWdvdG8gb3V0OworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCisJZXJyID0gLUVOT01FTTsKIAlmZiA9IGZ1c2VfZmlsZV9hbGxvYygpOwogCWlmICghZmYpCiAJCWdvdG8gb3V0X3B1dF9yZXF1ZXN0OwpAQCAtMzE0LDcgKzMxMyw2IEBACiAJZnVzZV9maWxlX2ZyZWUoZmYpOwogIG91dF9wdXRfcmVxdWVzdDoKIAlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwotIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNzUsOSArMzczLDkgQEAKIHsKIAlzdHJ1Y3QgZnVzZV9ta25vZF9pbiBpbmFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5tb2RlID0gbW9kZTsKQEAgLTQwNyw5ICs0MDUsOSBAQAogewogCXN0cnVjdCBmdXNlX21rZGlyX2luIGluYXJnOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLm1vZGUgPSBtb2RlOwpAQCAtNDI3LDkgKzQyNSw5IEBACiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7CiAJdW5zaWduZWQgbGVuID0gc3RybGVuKGxpbmspICsgMTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9TWU1MSU5LOwogCXJlcS0+aW4ubnVtYXJncyA9IDI7CkBAIC00NDQsOSArNDQyLDkgQEAKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1VOTElOSzsKIAlyZXEtPmluLmgubm9kZWlkID0gZ2V0X25vZGVfaWQoZGlyKTsKQEAgLTQ3Niw5ICs0NzQsOSBAQAogewogCWludCBlcnI7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfUk1ESVI7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGRpcik7CkBAIC01MDQsOSArNTAyLDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX3JlbmFtZV9pbiBpbmFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4ob2xkZGlyKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5uZXdkaXIgPSBnZXRfbm9kZV9pZChuZXdkaXIpOwpAQCAtNTUzLDkgKzU1MSw5IEBACiAJc3RydWN0IGZ1c2VfbGlua19pbiBpbmFyZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5vbGRub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CkBAIC01ODMsOSArNTgxLDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX2F0dHJfb3V0IGFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX0dFVEFUVFI7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKQEAgLTY3Myw5ICs2NzEsOSBAQAogCWlmIChmYy0+bm9fYWNjZXNzKQogCQlyZXR1cm4gMDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcubWFzayA9IG1hc2s7CkBAIC03ODAsOSArNzc4LDkgQEAKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCWlmICghcGFnZSkgewpAQCAtODA5LDExICs4MDcsMTEgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CiAJY2hhciAqbGluazsKIAotCWlmICghcmVxKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihyZXEpKTsKIAogCWxpbmsgPSAoY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFsaW5rKSB7CkBAIC05MzMsOSArOTMxLDkgQEAKIAkJfQogCX0KIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaWF0dHJfdG9fZmF0dHIoYXR0ciwgJmluYXJnKTsKQEAgLTk5NSw5ICs5OTMsOSBAQAogCWlmIChmYy0+bm9fc2V0eGF0dHIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuc2l6ZSA9IHNpemU7CkBAIC0xMDM1LDkgKzEwMzMsOSBAQAogCWlmIChmYy0+bm9fZ2V0eGF0dHIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuc2l6ZSA9IHNpemU7CkBAIC0xMDg1LDkgKzEwODMsOSBAQAogCWlmIChmYy0+bm9fbGlzdHhhdHRyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLnNpemUgPSBzaXplOwpAQCAtMTEzMSw5ICsxMTI5LDkgQEAKIAlpZiAoZmMtPm5vX3JlbW92ZXhhdHRyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1JFTU9WRVhBVFRSOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDk3NWYyNjkuLmZjMzQyY2YgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0yMiw5ICsyMiw5IEBACiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJaW50IGVycjsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgfihPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogCWlmIChmYy0+bm9fZmx1c2gpCiAJCXJldHVybiAwOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5maCA9IGZmLT5maDsKQEAgLTIyMyw5ICsyMjMsOSBAQAogCWlmICgoIWlzZGlyICYmIGZjLT5ub19mc3luYykgfHwgKGlzZGlyICYmIGZjLT5ub19mc3luY2RpcikpCiAJCXJldHVybiAwOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5maCA9IGZmLT5maDsKQEAgLTI5Nyw5ICsyOTcsOSBAQAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlnb3RvIG91dDsKIAotCWVyciA9IC1FSU5UUjsKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWVyciA9IFBUUl9FUlIocmVxKTsKKwlpZiAoSVNfRVJSKHJlcSkpCiAJCWdvdG8gb3V0OwogCiAJcmVxLT5vdXQucGFnZV96ZXJvaW5nID0gMTsKQEAgLTM2OCwxMCArMzY4LDEwIEBACiAJICAgICAocmVxLT5udW1fcGFnZXMgKyAxKSAqIFBBR0VfQ0FDSEVfU0laRSA+IGZjLT5tYXhfcmVhZCB8fAogCSAgICAgcmVxLT5wYWdlc1tyZXEtPm51bV9wYWdlcyAtIDFdLT5pbmRleCArIDEgIT0gcGFnZS0+aW5kZXgpKSB7CiAJCWZ1c2Vfc2VuZF9yZWFkcGFnZXMocmVxLCBkYXRhLT5maWxlLCBpbm9kZSk7Ci0JCWRhdGEtPnJlcSA9IHJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCQlpZiAoIXJlcSkgeworCQlkYXRhLT5yZXEgPSByZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCQlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJcmV0dXJuIC1FSU5UUjsKKwkJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAJCX0KIAl9CiAJcmVxLT5wYWdlc1tyZXEtPm51bV9wYWdlc10gPSBwYWdlOwpAQCAtMzkyLDEzICszOTIsMTcgQEAKIAogCWRhdGEuZmlsZSA9IGZpbGU7CiAJZGF0YS5pbm9kZSA9IGlub2RlOwotCWRhdGEucmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFkYXRhLnJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlkYXRhLnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihkYXRhLnJlcSkpCisJCXJldHVybiBQVFJfRVJSKGRhdGEucmVxKTsKIAogCWVyciA9IHJlYWRfY2FjaGVfcGFnZXMobWFwcGluZywgcGFnZXMsIGZ1c2VfcmVhZHBhZ2VzX2ZpbGwsICZkYXRhKTsKLQlpZiAoIWVycikKLQkJZnVzZV9zZW5kX3JlYWRwYWdlcyhkYXRhLnJlcSwgZmlsZSwgaW5vZGUpOworCWlmICghZXJyKSB7CisJCWlmIChkYXRhLnJlcS0+bnVtX3BhZ2VzKQorCQkJZnVzZV9zZW5kX3JlYWRwYWdlcyhkYXRhLnJlcSwgZmlsZSwgaW5vZGUpOworCQllbHNlCisJCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCBkYXRhLnJlcSk7CisJfQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ1MSw5ICs0NTUsOSBAQAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5udW1fcGFnZXMgPSAxOwogCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwpAQCAtNTI4LDkgKzUzMiw5IEBACiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCiAJCXJldHVybiAtRUlPOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZV90IG5yZXM7CkBAIC01NjEsOCArNTY1LDEyIEBACiAJCWJ1ZiArPSBucmVzOwogCQlpZiAobnJlcyAhPSBuYnl0ZXMpCiAJCQlicmVhazsKLQkJaWYgKGNvdW50KQotCQkJZnVzZV9yZXNldF9yZXF1ZXN0KHJlcSk7CisJCWlmIChjb3VudCkgeworCQkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwkJCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJCQlpZiAoSVNfRVJSKHJlcSkpCisJCQkJYnJlYWs7CisJCX0KIAl9CiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAocmVzID4gMCkgewpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggYTE2YTA0Zi4uMDQ3NDIwMiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0xOCw4ICsxOCw4IEBACiAvKiogTWF4IG51bWJlciBvZiBwYWdlcyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgc2luZ2xlIHJlYWQgcmVxdWVzdCAqLwogI2RlZmluZSBGVVNFX01BWF9QQUdFU19QRVJfUkVRIDMyCiAKLS8qKiBJZiBtb3JlIHJlcXVlc3RzIGFyZSBvdXRzdGFuZGluZywgdGhlbiB0aGUgb3BlcmF0aW9uIHdpbGwgYmxvY2sgKi8KLSNkZWZpbmUgRlVTRV9NQVhfT1VUU1RBTkRJTkcgMTAKKy8qKiBNYXhpbXVtIG51bWJlciBvZiBvdXRzdGFuZGluZyBiYWNrZ3JvdW5kIHJlcXVlc3RzICovCisjZGVmaW5lIEZVU0VfTUFYX0JBQ0tHUk9VTkQgMTAKIAogLyoqIEl0IGNvdWxkIGJlIGFzIGxhcmdlIGFzIFBBVEhfTUFYLCBidXQgd291bGQgdGhhdCBoYXZlIGFueSB1c2VzPyAqLwogI2RlZmluZSBGVVNFX05BTUVfTUFYIDEwMjQKQEAgLTEzMSw4ICsxMzEsOCBAQAogICogQSByZXF1ZXN0IHRvIHRoZSBjbGllbnQKICAqLwogc3RydWN0IGZ1c2VfcmVxIHsKLQkvKiogVGhpcyBjYW4gYmUgb24gZWl0aGVyIHVudXNlZF9saXN0LCBwZW5kaW5nIHByb2Nlc3Npbmcgb3IKLQkgICAgaW8gbGlzdHMgaW4gZnVzZV9jb25uICovCisJLyoqIFRoaXMgY2FuIGJlIG9uIGVpdGhlciBwZW5kaW5nIHByb2Nlc3Npbmcgb3IgaW8gbGlzdHMgaW4KKwkgICAgZnVzZV9jb25uICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJLyoqIEVudHJ5IG9uIHRoZSBiYWNrZ3JvdW5kIGxpc3QgKi8KQEAgLTE0NCwxNSArMTQ0LDEyIEBACiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGJpdGZpZWxkcyBhcmUgZWl0aGVyIHNldCBvbmNlIGJlZm9yZSB0aGUKIAkgKiByZXF1ZXN0IGlzIHF1ZXVlZCBvciBzZXR0aW5nL2NsZWFyaW5nIHRoZW0gaXMgcHJvdGVjdGVkIGJ5Ci0JICogZnVzZV9sb2NrCisJICogZnVzZV9jb25uLT5sb2NrCiAJICovCiAKIAkvKiogVHJ1ZSBpZiB0aGUgcmVxdWVzdCBoYXMgcmVwbHkgKi8KIAl1bnNpZ25lZCBpc3JlcGx5OjE7CiAKLQkvKiogVGhlIHJlcXVlc3QgaXMgcHJlYWxsb2NhdGVkICovCi0JdW5zaWduZWQgcHJlYWxsb2NhdGVkOjE7Ci0KIAkvKiogVGhlIHJlcXVlc3Qgd2FzIGludGVycnVwdGVkICovCiAJdW5zaWduZWQgaW50ZXJydXB0ZWQ6MTsKIApAQCAtMTYyLDYgKzE1OSw5IEBACiAJLyoqIERhdGEgaXMgYmVpbmcgY29waWVkIHRvL2Zyb20gdGhlIHJlcXVlc3QgKi8KIAl1bnNpZ25lZCBsb2NrZWQ6MTsKIAorCS8qKiBSZXF1ZXN0IGlzIGNvdW50ZWQgYXMgIndhaXRpbmciICovCisJdW5zaWduZWQgd2FpdGluZzoxOworCiAJLyoqIFN0YXRlIG9mIHRoZSByZXF1ZXN0ICovCiAJZW51bSBmdXNlX3JlcV9zdGF0ZSBzdGF0ZTsKIApAQCAtMjEzLDYgKzIxMyw5IEBACiAgKiB1bm1vdW50ZWQuCiAgKi8KIHN0cnVjdCBmdXNlX2Nvbm4geworCS8qKiBMb2NrIHByb3RlY3RpbmcgYWNjZXNzZXNzIHRvICBtZW1iZXJzIG9mIHRoaXMgc3RydWN0dXJlICovCisJc3BpbmxvY2tfdCBsb2NrOworCiAJLyoqIFRoZSB1c2VyIGlkIGZvciB0aGlzIG1vdW50ICovCiAJdWlkX3QgdXNlcl9pZDsKIApAQCAtMjQ0LDE5ICsyNDcsMjAgQEAKIAkgICAgaW50ZXJydXB0ZWQgcmVxdWVzdCkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJhY2tncm91bmQ7CiAKLQkvKiogQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzICovCi0Jc3RydWN0IHNlbWFwaG9yZSBvdXRzdGFuZGluZ19zZW07CisJLyoqIE51bWJlciBvZiByZXF1ZXN0cyBjdXJyZW50bHkgaW4gdGhlIGJhY2tncm91bmQgKi8KKwl1bnNpZ25lZCBudW1fYmFja2dyb3VuZDsKIAotCS8qKiBUaGlzIGNvdW50cyB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzIGlmCi0JICAgIG91dHN0YW5kaW5nX3NlbSB3b3VsZCBnbyBuZWdhdGl2ZSAqLwotCXVuc2lnbmVkIG91dHN0YW5kaW5nX2RlYnQ7CisJLyoqIEZsYWcgaW5kaWNhdGluZyBpZiBjb25uZWN0aW9uIGlzIGJsb2NrZWQuICBUaGlzIHdpbGwgYmUKKwkgICAgdGhlIGNhc2UgYmVmb3JlIHRoZSBJTklUIHJlcGx5IGlzIHJlY2VpdmVkLCBhbmQgaWYgdGhlcmUKKwkgICAgYXJlIHRvbyBtYW55IG91dHN0YWRpbmcgYmFja2dyb3VuZHMgcmVxdWVzdHMgKi8KKwlpbnQgYmxvY2tlZDsKKworCS8qKiB3YWl0cSBmb3IgYmxvY2tlZCBjb25uZWN0aW9uICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgYmxvY2tlZF93YWl0cTsKIAogCS8qKiBSVyBzZW1hcGhvcmUgZm9yIGV4Y2x1c2lvbiB3aXRoIGZ1c2VfcHV0X3N1cGVyKCkgKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIHNicHV0X3NlbTsKIAotCS8qKiBUaGUgbGlzdCBvZiB1bnVzZWQgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHVudXNlZF9saXN0OwotCiAJLyoqIFRoZSBuZXh0IHVuaXF1ZSByZXF1ZXN0IGlkICovCiAJdTY0IHJlcWN0cjsKIApAQCAtMzE4LDYgKzMyMiw5IEBACiAKIAkvKioga29iamVjdCAqLwogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisKKwkvKiogT19BU1lOQyByZXF1ZXN0cyAqLworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmdXNlX2Nvbm4gKmdldF9mdXNlX2Nvbm5fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTM0OSwyMSArMzU2LDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1c2VfZGV2X29wZXJhdGlvbnM7CiAKIC8qKgotICogVGhpcyBpcyB0aGUgc2luZ2xlIGdsb2JhbCBzcGlubG9jayB3aGljaCBwcm90ZWN0cyBGVVNFJ3Mgc3RydWN0dXJlcwotICoKLSAqIFRoZSBmb2xsb3dpbmcgZGF0YSBpcyBwcm90ZWN0ZWQgYnkgdGhpcyBsb2NrOgotICoKLSAqICAtIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgb2YgdGhlIGRldmljZSBmaWxlCi0gKiAgLSB0aGUgc19mc19pbmZvIGZpZWxkIG9mIHRoZSBzdXBlciBibG9jawotICogIC0gdW51c2VkX2xpc3QsIHBlbmRpbmcsIHByb2Nlc3NpbmcgbGlzdHMgaW4gZnVzZV9jb25uCi0gKiAgLSBiYWNrZ3JvdW5kIGxpc3QgaW4gZnVzZV9jb25uCi0gKiAgLSB0aGUgdW5pcXVlIHJlcXVlc3QgSUQgY291bnRlciByZXFjdHIgaW4gZnVzZV9jb25uCi0gKiAgLSB0aGUgc2IgKHN1cGVyX2Jsb2NrKSBmaWVsZCBpbiBmdXNlX2Nvbm4KLSAqICAtIHRoZSBmaWxlIChkZXZpY2UgZmlsZSkgZmllbGQgaW4gZnVzZV9jb25uCi0gKi8KLWV4dGVybiBzcGlubG9ja190IGZ1c2VfbG9jazsKLQotLyoqCiAgKiBHZXQgYSBmaWxsZWQgaW4gaW5vZGUKICAqLwogc3RydWN0IGlub2RlICpmdXNlX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBub2RlaWQsCkBAIC00NjEsMTEgKzQ1MywxMSBAQAogLyoqCiAgKiBSZXNlcnZlIGEgcHJlYWxsb2NhdGVkIHJlcXVlc3QKICAqLwotc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKK3N0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKIAogLyoqCi0gKiBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9mIGEgcmVxdWVzdC4gIElmIGNvdW50IGdvZXMgdG8gemVybyBwdXQKLSAqIG9uIHVudXNlZCBsaXN0IChwcmVhbGxvY2F0ZWQpIG9yIGZyZWUgcmVxdWVzdCAobm90IHByZWFsbG9jYXRlZCkuCisgKiBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9mIGEgcmVxdWVzdC4gIElmIGNvdW50IGdvZXMgdG8gemVybyBmcmVlCisgKiB0aGUgcmVxdWVzdC4KICAqLwogdm9pZCBmdXNlX3B1dF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSk7CiAKQEAgLTQ4Nyw3ICs0NzksNyBAQAogLyoqCiAgKiBSZWxlYXNlIGlub2RlcyBhbmQgZmlsZSBhc3NvY2lhdGVkIHdpdGggYmFja2dyb3VuZCByZXF1ZXN0CiAgKi8KLXZvaWQgZnVzZV9yZWxlYXNlX2JhY2tncm91bmQoc3RydWN0IGZ1c2VfcmVxICpyZXEpOwordm9pZCBmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpOwogCiAvKiBBYm9ydCBhbGwgcmVxdWVzdHMgKi8KIHZvaWQgZnVzZV9hYm9ydF9jb25uKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCA4NzllNmZiLi43NjI3MDIyIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0yMiw3ICsyMiw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXNwaW5sb2NrX3QgZnVzZV9sb2NrOwogc3RhdGljIGttZW1fY2FjaGVfdCAqZnVzZV9pbm9kZV9jYWNoZXA7CiBzdGF0aWMgc3RydWN0IHN1YnN5c3RlbSBjb25uZWN0aW9uc19zdWJzeXM7CiAKQEAgLTIwNywxNSArMjA2LDE3IEBACiAKIAlkb3duX3dyaXRlKCZmYy0+c2JwdXRfc2VtKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmZjLT5iYWNrZ3JvdW5kKSkKLQkJZnVzZV9yZWxlYXNlX2JhY2tncm91bmQobGlzdF9lbnRyeShmYy0+YmFja2dyb3VuZC5uZXh0LAorCQlmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChmYywKKwkJCQkJbGlzdF9lbnRyeShmYy0+YmFja2dyb3VuZC5uZXh0LAogCQkJCQkJICAgc3RydWN0IGZ1c2VfcmVxLCBiZ19lbnRyeSkpOwogCi0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWZjLT5tb3VudGVkID0gMDsKIAlmYy0+Y29ubmVjdGVkID0gMDsKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCXVwX3dyaXRlKCZmYy0+c2JwdXRfc2VtKTsKIAkvKiBGbHVzaCBhbGwgcmVhZGVycyBvbiB0aGlzIGZzICovCisJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAl3YWtlX3VwX2FsbCgmZmMtPndhaXRxKTsKIAlrb2JqZWN0X2RlbCgmZmMtPmtvYmopOwogCWtvYmplY3RfcHV0KCZmYy0+a29iaik7CkBAIC0yNDIsOSArMjQzLDkgQEAKIAlzdHJ1Y3QgZnVzZV9zdGF0ZnNfb3V0IG91dGFyZzsKIAlpbnQgZXJyOwogCi0gICAgICAgIHJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZvdXRhcmcsIDAsIHNpemVvZihvdXRhcmcpKTsKIAlyZXEtPmluLm51bWFyZ3MgPSAwOwpAQCAtMzY5LDE1ICszNzAsNyBAQAogCiBzdGF0aWMgdm9pZCBmdXNlX2Nvbm5fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm5fa29iaihrb2JqKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmZmMtPnVudXNlZF9saXN0KSkgewotCQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKLQkJcmVxID0gbGlzdF9lbnRyeShmYy0+dW51c2VkX2xpc3QubmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKLQkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7Ci0JCWZ1c2VfcmVxdWVzdF9mcmVlKHJlcSk7Ci0JfQotCWtmcmVlKGZjKTsKKwlrZnJlZShnZXRfZnVzZV9jb25uX2tvYmooa29iaikpOwogfQogCiBzdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqbmV3X2Nvbm4odm9pZCkKQEAgLTM4Niw2NCArMzc5LDI1IEBACiAKIAlmYyA9IGt6YWxsb2Moc2l6ZW9mKCpmYyksIEdGUF9LRVJORUwpOwogCWlmIChmYykgewotCQlpbnQgaTsKKwkJc3Bpbl9sb2NrX2luaXQoJmZjLT5sb2NrKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmZmMtPndhaXRxKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZmMtPmJsb2NrZWRfd2FpdHEpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPnBlbmRpbmcpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPnByb2Nlc3NpbmcpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPmlvKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmZjLT51bnVzZWRfbGlzdCk7CiAJCUlOSVRfTElTVF9IRUFEKCZmYy0+YmFja2dyb3VuZCk7Ci0JCXNlbWFfaW5pdCgmZmMtPm91dHN0YW5kaW5nX3NlbSwgMSk7IC8qIE9uZSBmb3IgSU5JVCAqLwogCQlpbml0X3J3c2VtKCZmYy0+c2JwdXRfc2VtKTsKIAkJa29ial9zZXRfa3NldF9zKGZjLCBjb25uZWN0aW9uc19zdWJzeXMpOwogCQlrb2JqZWN0X2luaXQoJmZjLT5rb2JqKTsKIAkJYXRvbWljX3NldCgmZmMtPm51bV93YWl0aW5nLCAwKTsKLQkJZm9yIChpID0gMDsgaSA8IEZVU0VfTUFYX09VVFNUQU5ESU5HOyBpKyspIHsKLQkJCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7Ci0JCQlpZiAoIXJlcSkgewotCQkJCWtvYmplY3RfcHV0KCZmYy0+a29iaik7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlsaXN0X2FkZCgmcmVxLT5saXN0LCAmZmMtPnVudXNlZF9saXN0KTsKLQkJfQogCQlmYy0+YmRpLnJhX3BhZ2VzID0gKFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0KSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJZmMtPmJkaS51bnBsdWdfaW9fZm4gPSBkZWZhdWx0X3VucGx1Z19pb19mbjsKIAkJZmMtPnJlcWN0ciA9IDA7CisJCWZjLT5ibG9ja2VkID0gMTsKIAl9CiAJcmV0dXJuIGZjOwogfQogCi1zdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqZ2V0X2Nvbm4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmM7Ci0JaW50IGVycjsKLQotCWVyciA9IC1FSU5WQUw7Ci0JaWYgKGZpbGUtPmZfb3AgIT0gJmZ1c2VfZGV2X29wZXJhdGlvbnMpCi0JCWdvdG8gb3V0X2VycjsKLQotCWVyciA9IC1FTk9NRU07Ci0JZmMgPSBuZXdfY29ubigpOwotCWlmICghZmMpCi0JCWdvdG8gb3V0X2VycjsKLQotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQllcnIgPSAtRUlOVkFMOwotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWtvYmplY3RfZ2V0KCZmYy0+a29iaik7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmM7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7Ci0JcmV0dXJuIGZjOwotCi0gb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOwotIG91dF9lcnI6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpbm9kZSAqZ2V0X3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbW9kZSkKIHsKIAlzdHJ1Y3QgZnVzZV9hdHRyIGF0dHI7CkBAIC00NjcsNyArNDIxLDYgQEAKIAogc3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKLQlpbnQgaTsKIAlzdHJ1Y3QgZnVzZV9pbml0X291dCAqYXJnID0gJnJlcS0+bWlzYy5pbml0X291dDsKIAogCWlmIChyZXEtPm91dC5oLmVycm9yIHx8IGFyZy0+bWFqb3IgIT0gRlVTRV9LRVJORUxfVkVSU0lPTikKQEAgLTQ4NiwyMiArNDM5LDEzIEBACiAJCWZjLT5taW5vciA9IGFyZy0+bWlub3I7CiAJCWZjLT5tYXhfd3JpdGUgPSBhcmctPm1pbm9yIDwgNSA/IDQwOTYgOiBhcmctPm1heF93cml0ZTsKIAl9Ci0KLQkvKiBBZnRlciBJTklUIHJlcGx5IGlzIHJlY2VpdmVkIG90aGVyIHJlcXVlc3RzIGNhbiBnbwotCSAgIG91dC4gIFNvIGRvIChGVVNFX01BWF9PVVRTVEFORElORyAtIDEpIG51bWJlciBvZgotCSAgIHVwKClzIG9uIG91dHN0YW5kaW5nX3NlbS4gIFRoZSBsYXN0IHVwKCkgaXMgZG9uZSBpbgotCSAgIGZ1c2VfcHV0YmFja19yZXF1ZXN0KCkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgRlVTRV9NQVhfT1VUU1RBTkRJTkc7IGkrKykKLQkJdXAoJmZjLT5vdXRzdGFuZGluZ19zZW0pOwotCiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwlmYy0+YmxvY2tlZCA9IDA7CisJd2FrZV91cF9hbGwoJmZjLT5ibG9ja2VkX3dhaXRxKTsKIH0KIAotc3RhdGljIHZvaWQgZnVzZV9zZW5kX2luaXQoc3RydWN0IGZ1c2VfY29ubiAqZmMpCitzdGF0aWMgdm9pZCBmdXNlX3NlbmRfaW5pdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0JLyogVGhpcyBpcyBjYWxsZWQgZnJvbSBmdXNlX3JlYWRfc3VwZXIoKSBzbyB0aGVyZSdzIGd1YXJhbnRlZWQKLQkgICB0byBiZSBleGFjdGx5IG9uZSByZXF1ZXN0IGF2YWlsYWJsZSAqLwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7CiAJc3RydWN0IGZ1c2VfaW5pdF9pbiAqYXJnID0gJnJlcS0+bWlzYy5pbml0X2luOwogCiAJYXJnLT5tYWpvciA9IEZVU0VfS0VSTkVMX1ZFUlNJT047CkBAIC01MjUsMTIgKzQ2OSw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY29ubl9pZCh2b2lkKQogeworCS8qIEJLTCBpcyBoZWxkIGZvciAtPmdldF9zYigpICovCiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBjdHIgPSAxOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCXZhbCA9IGN0cisrOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCXJldHVybiB2YWw7CisJcmV0dXJuIGN0cisrOwogfQogCiBzdGF0aWMgaW50IGZ1c2VfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQpAQCAtNTQwLDYgKzQ4MSw3IEBACiAJc3RydWN0IGZ1c2VfbW91bnRfZGF0YSBkOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5OworCXN0cnVjdCBmdXNlX3JlcSAqaW5pdF9yZXE7CiAJaW50IGVycjsKIAogCWlmICghcGFyc2VfZnVzZV9vcHQoKGNoYXIgKikgZGF0YSwgJmQpKQpAQCAtNTU1LDEwICs0OTcsMTIgQEAKIAlpZiAoIWZpbGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZmMgPSBnZXRfY29ubihmaWxlLCBzYik7Ci0JZnB1dChmaWxlKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJcmV0dXJuIFBUUl9FUlIoZmMpOworCWlmIChmaWxlLT5mX29wICE9ICZmdXNlX2Rldl9vcGVyYXRpb25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZjID0gbmV3X2Nvbm4oKTsKKwlpZiAoIWZjKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWZjLT5mbGFncyA9IGQuZmxhZ3M7CiAJZmMtPnVzZXJfaWQgPSBkLnVzZXJfaWQ7CkBAIC01NzksMjcgKzUyMyw0OCBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwlpbml0X3JlcSA9IGZ1c2VfcmVxdWVzdF9hbGxvYygpOworCWlmICghaW5pdF9yZXEpCisJCWdvdG8gZXJyX3B1dF9yb290OworCiAJZXJyID0ga29iamVjdF9zZXRfbmFtZSgmZmMtPmtvYmosICIlbGx1IiwgY29ubl9pZCgpKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9wdXRfcm9vdDsKKwkJZ290byBlcnJfZnJlZV9yZXE7CiAKIAllcnIgPSBrb2JqZWN0X2FkZCgmZmMtPmtvYmopOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX3B1dF9yb290OworCQlnb3RvIGVycl9mcmVlX3JlcTsKKworCS8qIFNldHRpbmcgZmlsZS0+cHJpdmF0ZV9kYXRhIGNhbid0IHJhY2Ugd2l0aCBvdGhlciBtb3VudCgpCisJICAgaW5zdGFuY2VzLCBzaW5jZSBCS0wgaXMgaGVsZCBmb3IgLT5nZXRfc2IoKSAqLworCWVyciA9IC1FSU5WQUw7CisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkKKwkJZ290byBlcnJfa29iamVjdF9kZWw7CiAKIAlzYi0+c19yb290ID0gcm9vdF9kZW50cnk7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwogCWZjLT5tb3VudGVkID0gMTsKIAlmYy0+Y29ubmVjdGVkID0gMTsKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlrb2JqZWN0X2dldCgmZmMtPmtvYmopOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZjOworCS8qCisJICogYXRvbWljX2RlY19hbmRfdGVzdCgpIGluIGZwdXQoKSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5CisJICogbWVtb3J5IGJhcnJpZXIgZm9yIGZpbGUtPnByaXZhdGVfZGF0YSB0byBiZSB2aXNpYmxlIG9uIGFsbAorCSAqIENQVXMgYWZ0ZXIgdGhpcworCSAqLworCWZwdXQoZmlsZSk7CiAKLQlmdXNlX3NlbmRfaW5pdChmYyk7CisJZnVzZV9zZW5kX2luaXQoZmMsIGluaXRfcmVxKTsKIAogCXJldHVybiAwOwogCisgZXJyX2tvYmplY3RfZGVsOgorCWtvYmplY3RfZGVsKCZmYy0+a29iaik7CisgZXJyX2ZyZWVfcmVxOgorCWZ1c2VfcmVxdWVzdF9mcmVlKGluaXRfcmVxKTsKICBlcnJfcHV0X3Jvb3Q6CiAJZHB1dChyb290X2RlbnRyeSk7CiAgZXJyOgorCWZwdXQoZmlsZSk7CiAJa29iamVjdF9wdXQoJmZjLT5rb2JqKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzUzLDcgKzcxOCw2IEBACiAJcHJpbnRrKCJmdXNlIGluaXQgKEFQSSB2ZXJzaW9uICVpLiVpKVxuIiwKIAkgICAgICAgRlVTRV9LRVJORUxfVkVSU0lPTiwgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTik7CiAKLQlzcGluX2xvY2tfaW5pdCgmZnVzZV9sb2NrKTsKIAlyZXMgPSBmdXNlX2ZzX2luaXQoKTsKIAlpZiAocmVzKQogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYm5vZGUuYyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwppbmRleCA4ZjA3ZThmLi43NDZhYmM5IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2Jub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9ibm9kZS5jCkBAIC00NjYsOCArNDY2LDcgQEAKIAlmb3IgKHAgPSAmbm9kZS0+dHJlZS0+bm9kZV9oYXNoW2hmc19ibm9kZV9oYXNoKG5vZGUtPnRoaXMpXTsKIAkgICAgICpwICYmICpwICE9IG5vZGU7IHAgPSAmKCpwKS0+bmV4dF9oYXNoKQogCQk7Ci0JaWYgKCEqcCkKLQkJQlVHKCk7CisJQlVHX09OKCEqcCk7CiAJKnAgPSBub2RlLT5uZXh0X2hhc2g7CiAJbm9kZS0+dHJlZS0+bm9kZV9oYXNoX2NudC0tOwogfQpAQCAtNjIyLDggKzYyMSw3IEBACiAKIAkJZHByaW50KERCR19CTk9ERV9SRUZTLCAicHV0X25vZGUoJWQ6JWQpOiAlZFxuIiwKIAkJICAgICAgIG5vZGUtPnRyZWUtPmNuaWQsIG5vZGUtPnRoaXMsIGF0b21pY19yZWFkKCZub2RlLT5yZWZjbnQpKTsKLQkJaWYgKCFhdG9taWNfcmVhZCgmbm9kZS0+cmVmY250KSkKLQkJCUJVRygpOworCQlCVUdfT04oIWF0b21pY19yZWFkKCZub2RlLT5yZWZjbnQpKTsKIAkJaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZub2RlLT5yZWZjbnQsICZ0cmVlLT5oYXNoX2xvY2spKQogCQkJcmV0dXJuOwogCQlmb3IgKGkgPSAwOyBpIDwgdHJlZS0+cGFnZXNfcGVyX2Jub2RlOyBpKyspIHsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuYwppbmRleCBhNjdlZGZhLi5lZmZhODk5IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmMKKysrIGIvZnMvaGZzcGx1cy9idHJlZS5jCkBAIC0yNjksOCArMjY5LDcgQEAKIAl1OCAqZGF0YSwgYnl0ZSwgbTsKIAogCWRwcmludChEQkdfQk5PREVfTU9ELCAiYnRyZWVfZnJlZV9ub2RlOiAldVxuIiwgbm9kZS0+dGhpcyk7Ci0JaWYgKCFub2RlLT50aGlzKQotCQlCVUcoKTsKKwlCVUdfT04oIW5vZGUtPnRoaXMpOwogCXRyZWUgPSBub2RlLT50cmVlOwogCW5pZHggPSBub2RlLT50aGlzOwogCW5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYyBiL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYwppbmRleCAyYmEyMGNkLi41ZTYzNjNiIDEwMDY0NAotLS0gYS9mcy9ocHBmcy9ocHBmc19rZXJuLmMKKysrIGIvZnMvaHBwZnMvaHBwZnNfa2Vybi5jCkBAIC0yMTYsMTAgKzIxNiwxMCBAQAogc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhwcGZzX2ZpbGVfaW9wcyA9IHsKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHJlYWRfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzc2l6ZV90IGNvdW50LAorc3RhdGljIHNzaXplX3QgcmVhZF9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzc2l6ZV90IGNvdW50LAogCQkJIGxvZmZfdCAqcHBvcywgaW50IGlzX3VzZXIpCiB7Ci0Jc3NpemVfdCAoKnJlYWQpKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CisJc3NpemVfdCAoKnJlYWQpKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwogCXNzaXplX3QgbjsKIAogCXJlYWQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9mb3AtPnJlYWQ7CkBAIC0yMzYsNyArMjM2LDcgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIHNzaXplX3QgaHBwZnNfcmVhZF9maWxlKGludCBmZCwgY2hhciAqYnVmLCBzc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgaHBwZnNfcmVhZF9maWxlKGludCBmZCwgY2hhciBfX3VzZXIgKmJ1Ziwgc3NpemVfdCBjb3VudCkKIHsKIAlzc2l6ZV90IG47CiAJaW50IGN1ciwgZXJyOwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGhwcGZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorc3RhdGljIHNzaXplX3QgaHBwZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJICBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGhwcGZzX3ByaXZhdGUgKmhwcGZzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtMzEzLDEyICszMTMsMTIgQEAKIAlyZXR1cm4oY291bnQpOwogfQogCi1zdGF0aWMgc3NpemVfdCBocHBmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorc3RhdGljIHNzaXplX3QgaHBwZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sCiAJCQkgICBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGhwcGZzX3ByaXZhdGUgKmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGZpbGUgKnByb2NfZmlsZSA9IGRhdGEtPnByb2NfZmlsZTsKLQlzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CisJc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKIAlpbnQgZXJyOwogCiAJd3JpdGUgPSBwcm9jX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2ZvcC0+d3JpdGU7CkBAIC02NTgsNyArNjU4LDcgQEAKIAkuc3RhdGZzCQk9IGhwcGZzX3N0YXRmcywKIH07CiAKLXN0YXRpYyBpbnQgaHBwZnNfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCitzdGF0aWMgaW50IGhwcGZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKIHsKIAlzdHJ1Y3QgZmlsZSAqcHJvY19maWxlOwogCXN0cnVjdCBkZW50cnkgKnByb2NfZGVudHJ5OwpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggMzJiN2MzMy4uM2EyNDQ2YSAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xNzIsOCArMTcyLDcgQEAKIAogdm9pZCBkZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpIAogewotCWlmIChpbm9kZV9oYXNfYnVmZmVycyhpbm9kZSkpCi0JCUJVRygpOworCUJVR19PTihpbm9kZV9oYXNfYnVmZmVycyhpbm9kZSkpOwogCXNlY3VyaXR5X2lub2RlX2ZyZWUoaW5vZGUpOwogCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZSkKIAkJaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUoaW5vZGUpOwpAQCAtMjQ5LDEyICsyNDgsOSBAQAogCW1pZ2h0X3NsZWVwKCk7CiAJaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKGlub2RlKTsKICAgICAgICAKLQlpZiAoaW5vZGUtPmlfZGF0YS5ucnBhZ2VzKQotCQlCVUcoKTsKLQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfRlJFRUlORykpCi0JCUJVRygpOwotCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfQ0xFQVIpCi0JCUJVRygpOworCUJVR19PTihpbm9kZS0+aV9kYXRhLm5ycGFnZXMpOworCUJVR19PTighKGlub2RlLT5pX3N0YXRlICYgSV9GUkVFSU5HKSk7CisJQlVHX09OKGlub2RlLT5pX3N0YXRlICYgSV9DTEVBUik7CiAJd2FpdF9vbl9pbm9kZShpbm9kZSk7CiAJRFFVT1RfRFJPUChpbm9kZSk7CiAJaWYgKGlub2RlLT5pX3NiICYmIGlub2RlLT5pX3NiLT5zX29wLT5jbGVhcl9pbm9kZSkKQEAgLTEwNTQsOCArMTA1MCw3IEBACiAJaGxpc3RfZGVsX2luaXQoJmlub2RlLT5pX2hhc2gpOwogCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKIAl3YWtlX3VwX2lub2RlKGlub2RlKTsKLQlpZiAoaW5vZGUtPmlfc3RhdGUgIT0gSV9DTEVBUikKLQkJQlVHKCk7CisJQlVHX09OKGlub2RlLT5pX3N0YXRlICE9IElfQ0xFQVIpOwogCWRlc3Ryb3lfaW5vZGUoaW5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9mcy9pbm90aWZ5LmMgYi9mcy9pbm90aWZ5LmMKaW5kZXggMzY3YzQ4Ny4uNzMyZWM0YiAxMDA2NDQKLS0tIGEvZnMvaW5vdGlmeS5jCisrKyBiL2ZzL2lub3RpZnkuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAJV0FSTl9PTihlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEKTsKIAlzcGluX2xvY2soJmVudHJ5LT5kX2xvY2spOwogCXBhcmVudCA9IGVudHJ5LT5kX3BhcmVudDsKLQlpZiAoaW5vdGlmeV9pbm9kZV93YXRjaGVkKHBhcmVudC0+ZF9pbm9kZSkpCisJaWYgKHBhcmVudC0+ZF9pbm9kZSAmJiBpbm90aWZ5X2lub2RlX3dhdGNoZWQocGFyZW50LT5kX2lub2RlKSkKIAkJZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQ7CiAJc3Bpbl91bmxvY2soJmVudHJ5LT5kX2xvY2spOwogfQpAQCAtODQ4LDcgKzg0OCwxMSBAQAogCQlpbm9kZSA9IHdhdGNoLT5pbm9kZTsKIAkJbXV0ZXhfbG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwogCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLQkJcmVtb3ZlX3dhdGNoX25vX2V2ZW50KHdhdGNoLCBkZXYpOworCisJCS8qIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgcmFjZSB3aXRoIGFub3RoZXIgbGlzdCByZW1vdmFsICovCisJCWlmIChsaWtlbHkoaWRyX2ZpbmQoJmRldi0+aWRyLCB3YXRjaC0+d2QpKSkKKwkJCXJlbW92ZV93YXRjaF9ub19ldmVudCh3YXRjaCwgZGV2KTsKKwogCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCQltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKIAkJcHV0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwpAQCAtODkwLDggKzg5NCw3IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAKIAkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBkaWQgbm90IHJhY2UgKi8KLQl3YXRjaCA9IGlkcl9maW5kKCZkZXYtPmlkciwgd2QpOwotCWlmIChsaWtlbHkod2F0Y2gpKQorCWlmIChsaWtlbHkoaWRyX2ZpbmQoJmRldi0+aWRyLCB3ZCkgPT0gd2F0Y2gpKQogCQlyZW1vdmVfd2F0Y2god2F0Y2gsIGRldik7CiAKIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvYmFja2dyb3VuZC5jIGIvZnMvamZmczIvYmFja2dyb3VuZC5jCmluZGV4IDdiNzdhOTUuLmZmMmE4NzIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2JhY2tncm91bmQuYworKysgYi9mcy9qZmZzMi9iYWNrZ3JvdW5kLmMKQEAgLTM1LDggKzM1LDcgQEAKIAlwaWRfdCBwaWQ7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoYy0+Z2NfdGFzaykKLQkJQlVHKCk7CisJQlVHX09OKGMtPmdjX3Rhc2spOwogCiAJaW5pdF9jb21wbGV0aW9uKCZjLT5nY190aHJlYWRfc3RhcnQpOwogCWluaXRfY29tcGxldGlvbigmYy0+Z2NfdGhyZWFkX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZWxpc3QuYyBiL2ZzL2pmZnMyL25vZGVsaXN0LmMKaW5kZXggZDRkMGM0MS4uMWQ0NjY3NyAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZWxpc3QuYworKysgYi9mcy9qZmZzMi9ub2RlbGlzdC5jCkBAIC00MzgsNyArNDM4LDggQEAKIAlpZiAoYy0+bXRkLT5wb2ludCkgewogCQllcnIgPSBjLT5tdGQtPnBvaW50KGMtPm10ZCwgb2ZzLCBsZW4sICZyZXRsZW4sICZidWZmZXIpOwogCQlpZiAoIWVyciAmJiByZXRsZW4gPCB0bi0+Y3NpemUpIHsKLQkJCUpGRlMyX1dBUk5JTkcoIk1URCBwb2ludCByZXR1cm5lZCBsZW4gdG9vIHNob3J0OiAldSBpbnN0ZWFkIG9mICV1LlxuIiwgcmV0bGVuLCB0bi0+Y3NpemUpOworCQkJSkZGUzJfV0FSTklORygiTVREIHBvaW50IHJldHVybmVkIGxlbiB0b28gc2hvcnQ6ICV6dSAiCisJCQkJCSJpbnN0ZWFkIG9mICV1LlxuIiwgcmV0bGVuLCB0bi0+Y3NpemUpOwogCQkJYy0+bXRkLT51bnBvaW50KGMtPm10ZCwgYnVmZmVyLCBvZnMsIGxlbik7CiAJCX0gZWxzZSBpZiAoZXJyKQogCQkJSkZGUzJfV0FSTklORygiTVREIHBvaW50IGZhaWxlZDogZXJyb3IgY29kZSAlZC5cbiIsIGVycik7CkBAIC00NjEsNyArNDYyLDggQEAKIAkJfQogCiAJCWlmIChyZXRsZW4gIT0gbGVuKSB7Ci0JCQlKRkZTMl9FUlJPUigic2hvcnQgcmVhZCBhdCAlIzA4eDogJWQgaW5zdGVhZCBvZiAlZC5cbiIsIG9mcywgcmV0bGVuLCBsZW4pOworCQkJSkZGUzJfRVJST1IoInNob3J0IHJlYWQgYXQgJSMwOHg6ICV6ZCBpbnN0ZWFkIG9mICVkLlxuIiwKKwkJCQkJb2ZzLCByZXRsZW4sIGxlbik7CiAJCQllcnIgPSAtRUlPOwogCQkJZ290byBmcmVlX291dDsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IGYyODY5NmYuLjJiMjIwZGQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYworKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogc3RhdGljIGludCBtZXRhcGFnZV9yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IG1ldGFwYWdlICptcDsKLQlpbnQgYnVzeSA9IDA7CisJaW50IHJldCA9IDE7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAogCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgUEFHRV9DQUNIRV9TSVpFOyBvZmZzZXQgKz0gUFNJWkUpIHsKQEAgLTU1MiwzMCArNTUyLDIwIEBACiAJCQljb250aW51ZTsKIAogCQlqZnNfaW5mbygibWV0YXBhZ2VfcmVsZWFzZXBhZ2U6IG1wID0gMHglcCIsIG1wKTsKLQkJaWYgKG1wLT5jb3VudCB8fCBtcC0+bm9ob21lb2spIHsKKwkJaWYgKG1wLT5jb3VudCB8fCBtcC0+bm9ob21lb2sgfHwKKwkJICAgIHRlc3RfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZykpIHsKIAkJCWpmc19pbmZvKCJjb3VudCA9ICVsZCwgbm9ob21lb2sgPSAlZCIsIG1wLT5jb3VudCwKIAkJCQkgbXAtPm5vaG9tZW9rKTsKLQkJCWJ1c3kgPSAxOworCQkJcmV0ID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7Ci0JCS8vV0FSTl9PTih0ZXN0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpKTsKLQkJaWYgKHRlc3RfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZykpIHsKLQkJCWR1bXBfbWVtKCJkaXJ0eSBtcCBpbiBtZXRhcGFnZV9yZWxlYXNlcGFnZSIsIG1wLAotCQkJCSBzaXplb2Yoc3RydWN0IG1ldGFwYWdlKSk7Ci0JCQlkdW1wX21lbSgicGFnZSIsIHBhZ2UsIHNpemVvZihzdHJ1Y3QgcGFnZSkpOwotCQkJZHVtcF9zdGFjaygpOwotCQl9CiAJCWlmIChtcC0+bHNuKQogCQkJcmVtb3ZlX2Zyb21fbG9nc3luYyhtcCk7CiAJCXJlbW92ZV9tZXRhcGFnZShwYWdlLCBtcCk7CiAJCUlOQ1JFTUVOVChtcFN0YXQucGFnZWZyZWUpOwogCQlmcmVlX21ldGFwYWdlKG1wKTsKIAl9Ci0JaWYgKGJ1c3kpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG1ldGFwYWdlX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y2xvY2suYyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwppbmRleCBkMmI2NmJhLi4zZWY3MzkxIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmNsb2NrLmMKKysrIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCkBAIC02NTAsNyArNjUwLDcgQEAKIAlzdmNfd2FrZV91cChibG9jay0+Yl9kYWVtb24pOwogfQogCi12b2lkIG5sbXN2Y19ncmFudF9yZWxlYXNlKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBubG1zdmNfZ3JhbnRfcmVsZWFzZSh2b2lkICpkYXRhKQogewogCXN0cnVjdCBubG1fcnFzdAkJKmNhbGwgPSBkYXRhOwogCmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCA0ZDllNzFkLi5hYjYxYThiIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCisrKyBiL2ZzL2xvY2tzLmMKQEAgLTE2OCwxOCArMTY4LDkgQEAKIC8qIEZyZWUgYSBsb2NrIHdoaWNoIGlzIG5vdCBpbiB1c2UuICovCiBzdGF0aWMgdm9pZCBsb2Nrc19mcmVlX2xvY2soc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7Ci0JaWYgKGZsID09IE5VTEwpIHsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmZsLT5mbF93YWl0KSkKLQkJcGFuaWMoIkF0dGVtcHRpbmcgdG8gZnJlZSBsb2NrIHdpdGggYWN0aXZlIHdhaXQgcXVldWUiKTsKLQotCWlmICghbGlzdF9lbXB0eSgmZmwtPmZsX2Jsb2NrKSkKLQkJcGFuaWMoIkF0dGVtcHRpbmcgdG8gZnJlZSBsb2NrIHdpdGggYWN0aXZlIGJsb2NrIGxpc3QiKTsKLQotCWlmICghbGlzdF9lbXB0eSgmZmwtPmZsX2xpbmspKQotCQlwYW5pYygiQXR0ZW1wdGluZyB0byBmcmVlIGxvY2sgb24gYWN0aXZlIGxvY2sgbGlzdCIpOworCUJVR19PTih3YWl0cXVldWVfYWN0aXZlKCZmbC0+Zmxfd2FpdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZmwtPmZsX2Jsb2NrKSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZmbC0+ZmxfbGluaykpOwogCiAJbG9ja3NfcmVsZWFzZV9wcml2YXRlKGZsKTsKIAlrbWVtX2NhY2hlX2ZyZWUoZmlsZWxvY2tfY2FjaGUsIGZsKTsKQEAgLTQ1NSwxNSArNDQ2LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgbGVhc2VfaW5pdChzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IHR5cGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQogIHsKKwlpZiAoYXNzaWduX3R5cGUoZmwsIHR5cGUpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJZmwtPmZsX293bmVyID0gY3VycmVudC0+ZmlsZXM7CiAJZmwtPmZsX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAKIAlmbC0+ZmxfZmlsZSA9IGZpbHA7CiAJZmwtPmZsX2ZsYWdzID0gRkxfTEVBU0U7Ci0JaWYgKGFzc2lnbl90eXBlKGZsLCB0eXBlKSAhPSAwKSB7Ci0JCWxvY2tzX2ZyZWVfbG9jayhmbCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAlmbC0+Zmxfc3RhcnQgPSAwOwogCWZsLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwogCWZsLT5mbF9vcHMgPSBOVUxMOwpAQCAtNDc1LDE2ICs0NjUsMTkgQEAKIHN0YXRpYyBpbnQgbGVhc2VfYWxsb2Moc3RydWN0IGZpbGUgKmZpbHAsIGludCB0eXBlLCBzdHJ1Y3QgZmlsZV9sb2NrICoqZmxwKQogewogCXN0cnVjdCBmaWxlX2xvY2sgKmZsID0gbG9ja3NfYWxsb2NfbG9jaygpOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCiAJaWYgKGZsID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIG91dDsKIAogCWVycm9yID0gbGVhc2VfaW5pdChmaWxwLCB0eXBlLCBmbCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJaWYgKGVycm9yKSB7CisJCWxvY2tzX2ZyZWVfbG9jayhmbCk7CisJCWZsID0gTlVMTDsKKwl9CitvdXQ6CiAJKmZscCA9IGZsOwotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogLyogQ2hlY2sgaWYgdHdvIGxvY2tzIG92ZXJsYXAgZWFjaCBvdGhlci4KQEAgLTczNSw4ICs3MjgsOSBAQAogICogYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIGJ1dCB0aGF0J3Mgc2VjcmV0IGtub3dsZWRnZSBrbm93biBvbmx5IHRvCiAgKiBmbG9ja19sb2NrX2ZpbGUgYW5kIHBvc2l4X2xvY2tfZmlsZS4KICAqLwotc3RhdGljIGludCBmbG9ja19sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKm5ld19mbCkKK3N0YXRpYyBpbnQgZmxvY2tfbG9ja19maWxlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0KQogeworCXN0cnVjdCBmaWxlX2xvY2sgKm5ld19mbCA9IE5VTEw7CiAJc3RydWN0IGZpbGVfbG9jayAqKmJlZm9yZTsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvciA9IDA7CkBAIC03NTEsMTcgKzc0NSwyMCBAQAogCQkJY29udGludWU7CiAJCWlmIChmaWxwICE9IGZsLT5mbF9maWxlKQogCQkJY29udGludWU7Ci0JCWlmIChuZXdfZmwtPmZsX3R5cGUgPT0gZmwtPmZsX3R5cGUpCisJCWlmIChyZXF1ZXN0LT5mbF90eXBlID09IGZsLT5mbF90eXBlKQogCQkJZ290byBvdXQ7CiAJCWZvdW5kID0gMTsKIAkJbG9ja3NfZGVsZXRlX2xvY2soYmVmb3JlKTsKIAkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAotCWlmIChuZXdfZmwtPmZsX3R5cGUgPT0gRl9VTkxDSykKLQkJcmV0dXJuIDA7CisJaWYgKHJlcXVlc3QtPmZsX3R5cGUgPT0gRl9VTkxDSykKKwkJZ290byBvdXQ7CiAKKwllcnJvciA9IC1FTk9NRU07CisJbmV3X2ZsID0gbG9ja3NfYWxsb2NfbG9jaygpOworCWlmIChuZXdfZmwgPT0gTlVMTCkKKwkJZ290byBvdXQ7CiAJLyoKIAkgKiBJZiBhIGhpZ2hlci1wcmlvcml0eSBwcm9jZXNzIHdhcyBibG9ja2VkIG9uIHRoZSBvbGQgZmlsZSBsb2NrLAogCSAqIGdpdmUgaXQgdGhlIG9wcG9ydHVuaXR5IHRvIGxvY2sgdGhlIGZpbGUuCkBAIC03NjksMjYgKzc2NiwyOCBAQAogCWlmIChmb3VuZCkKIAkJY29uZF9yZXNjaGVkKCk7CiAKLQlsb2NrX2tlcm5lbCgpOwogCWZvcl9lYWNoX2xvY2soaW5vZGUsIGJlZm9yZSkgewogCQlzdHJ1Y3QgZmlsZV9sb2NrICpmbCA9ICpiZWZvcmU7CiAJCWlmIChJU19QT1NJWChmbCkpCiAJCQlicmVhazsKIAkJaWYgKElTX0xFQVNFKGZsKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIWZsb2NrX2xvY2tzX2NvbmZsaWN0KG5ld19mbCwgZmwpKQorCQlpZiAoIWZsb2NrX2xvY2tzX2NvbmZsaWN0KHJlcXVlc3QsIGZsKSkKIAkJCWNvbnRpbnVlOwogCQllcnJvciA9IC1FQUdBSU47Ci0JCWlmIChuZXdfZmwtPmZsX2ZsYWdzICYgRkxfU0xFRVApIHsKLQkJCWxvY2tzX2luc2VydF9ibG9jayhmbCwgbmV3X2ZsKTsKLQkJfQorCQlpZiAocmVxdWVzdC0+ZmxfZmxhZ3MgJiBGTF9TTEVFUCkKKwkJCWxvY2tzX2luc2VydF9ibG9jayhmbCwgcmVxdWVzdCk7CiAJCWdvdG8gb3V0OwogCX0KKwlsb2Nrc19jb3B5X2xvY2sobmV3X2ZsLCByZXF1ZXN0KTsKIAlsb2Nrc19pbnNlcnRfbG9jaygmaW5vZGUtPmlfZmxvY2ssIG5ld19mbCk7CisJbmV3X2ZsID0gTlVMTDsKIAllcnJvciA9IDA7CiAKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CisJaWYgKG5ld19mbCkKKwkJbG9ja3NfZnJlZV9sb2NrKG5ld19mbCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMzc3LDYgKzEzNzYsNyBAQAogCQlnb3RvIG91dDsKIAogCWlmIChteV9iZWZvcmUgIT0gTlVMTCkgeworCQkqZmxwID0gKm15X2JlZm9yZTsKIAkJZXJyb3IgPSBsZWFzZS0+ZmxfbG1vcHMtPmZsX2NoYW5nZShteV9iZWZvcmUsIGFyZyk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE1NjksOSArMTU2OSw3IEBACiAJCWVycm9yID0gZmxvY2tfbG9ja19maWxlX3dhaXQoZmlscCwgbG9jayk7CiAKICBvdXRfZnJlZToKLQlpZiAobGlzdF9lbXB0eSgmbG9jay0+ZmxfbGluaykpIHsKLQkJbG9ja3NfZnJlZV9sb2NrKGxvY2spOwotCX0KKwlsb2Nrc19mcmVlX2xvY2sobG9jayk7CiAKICBvdXRfcHV0ZjoKIAlmcHV0KGZpbHApOwpAQCAtMjIzNyw3ICsyMjM1LDEyIEBACiAKIAlsb2NrX2tlcm5lbCgpOwogCWogPSAwOwotCXJjdV9yZWFkX2xvY2soKTsKKworCS8qCisJICogV2UgYXJlIG5vdCB0YWtpbmcgYSByZWYgdG8gdGhlIGZpbGUgc3RydWN0dXJlcywgc28KKwkgKiB3ZSBuZWVkIHRvIGFjcXVpcmUgLT5maWxlX2xvY2suCisJICovCisJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2V0OwpAQCAtMjI1NSw3ICsyMjU4LDcgQEAKIAkJCXNldCA+Pj0gMTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwlzcGluX3VubG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJdW5sb2NrX2tlcm5lbCgpOwogfQogRVhQT1JUX1NZTUJPTChzdGVhbF9sb2Nrcyk7CmRpZmYgLS1naXQgYS9mcy9tc2Rvcy9uYW1laS5jIGIvZnMvbXNkb3MvbmFtZWkuYwppbmRleCA2MjZhMzY3Li41Yjc2Y2NkIDEwMDY0NAotLS0gYS9mcy9tc2Rvcy9uYW1laS5jCisrKyBiL2ZzL21zZG9zL25hbWVpLmMKQEAgLTEyLDE0ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbXNkb3NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCi0vKiBNUy1ET1MgImRldmljZSBzcGVjaWFsIGZpbGVzIiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc2VydmVkX25hbWVzW10gPSB7Ci0JIkNPTiAgICAgIiwgIlBSTiAgICAgIiwgIk5VTCAgICAgIiwgIkFVWCAgICAgIiwKLQkiTFBUMSAgICAiLCAiTFBUMiAgICAiLCAiTFBUMyAgICAiLCAiTFBUNCAgICAiLAotCSJDT00xICAgICIsICJDT00yICAgICIsICJDT00zICAgICIsICJDT000ICAgICIsCi0JTlVMTAotfTsKLQogLyogQ2hhcmFjdGVycyB0aGF0IGFyZSB1bmRlc2lyYWJsZSBpbiBhbiBNUy1ET1MgZmlsZSBuYW1lICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBiYWRfY2hhcnNbXSA9ICIqPzw+fFwiIjsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGJhZF9pZl9zdHJpY3RfcGNbXSA9ICIrPSw7ICI7CkBAIC00MCw3ICszMiw2IEBACiAJICovCiB7CiAJdW5zaWduZWQgY2hhciAqd2FsazsKLQljb25zdCB1bnNpZ25lZCBjaGFyICoqcmVzZXJ2ZWQ7CiAJdW5zaWduZWQgY2hhciBjOwogCWludCBzcGFjZTsKIApAQCAtMTI3LDExICsxMTgsNyBAQAogCX0KIAl3aGlsZSAod2FsayAtIHJlcyA8IE1TRE9TX05BTUUpCiAJCSp3YWxrKysgPSAnICc7Ci0JaWYgKCFvcHRzLT5hdGFyaSkKLQkJLyogR0VNRE9TIGlzIGxlc3Mgc3R1cGlkIGFuZCBoYXMgbm8gcmVzZXJ2ZWQgbmFtZXMgKi8KLQkJZm9yIChyZXNlcnZlZCA9IHJlc2VydmVkX25hbWVzOyAqcmVzZXJ2ZWQ7IHJlc2VydmVkKyspCi0JCQlpZiAoIXN0cm5jbXAocmVzLCAqcmVzZXJ2ZWQsIDgpKQotCQkJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDIyZjZlOGQuLmQ2ZTJlZTIgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTA4MCw4ICsxMDgwLDggQEAKIAluZC0+ZmxhZ3MgPSBmbGFnczsKIAluZC0+ZGVwdGggPSAwOwogCi0JcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJaWYgKCpuYW1lPT0nLycpIHsKKwkJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJCWlmIChjdXJyZW50LT5mcy0+YWx0cm9vdCAmJiAhKG5kLT5mbGFncyAmIExPT0tVUF9OT0FMVCkpIHsKIAkJCW5kLT5tbnQgPSBtbnRnZXQoY3VycmVudC0+ZnMtPmFsdHJvb3RtbnQpOwogCQkJbmQtPmRlbnRyeSA9IGRnZXQoY3VycmVudC0+ZnMtPmFsdHJvb3QpOwpAQCAtMTA5MiwzMyArMTA5MiwzNSBAQAogCQl9CiAJCW5kLT5tbnQgPSBtbnRnZXQoY3VycmVudC0+ZnMtPnJvb3RtbnQpOwogCQluZC0+ZGVudHJ5ID0gZGdldChjdXJyZW50LT5mcy0+cm9vdCk7CisJCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJfSBlbHNlIGlmIChkZmQgPT0gQVRfRkRDV0QpIHsKKwkJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJCW5kLT5tbnQgPSBtbnRnZXQoY3VycmVudC0+ZnMtPnB3ZG1udCk7CiAJCW5kLT5kZW50cnkgPSBkZ2V0KGN1cnJlbnQtPmZzLT5wd2QpOworCQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAogCQlmaWxlID0gZmdldF9saWdodChkZmQsICZmcHV0X25lZWRlZCk7CiAJCXJldHZhbCA9IC1FQkFERjsKIAkJaWYgKCFmaWxlKQotCQkJZ290byB1bmxvY2tfZmFpbDsKKwkJCWdvdG8gb3V0X2ZhaWw7CiAKIAkJZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CiAKIAkJcmV0dmFsID0gLUVOT1RESVI7CiAJCWlmICghU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCi0JCQlnb3RvIGZwdXRfdW5sb2NrX2ZhaWw7CisJCQlnb3RvIGZwdXRfZmFpbDsKIAogCQlyZXR2YWwgPSBmaWxlX3Blcm1pc3Npb24oZmlsZSwgTUFZX0VYRUMpOwogCQlpZiAocmV0dmFsKQotCQkJZ290byBmcHV0X3VubG9ja19mYWlsOworCQkJZ290byBmcHV0X2ZhaWw7CiAKIAkJbmQtPm1udCA9IG1udGdldChmaWxlLT5mX3Zmc21udCk7CiAJCW5kLT5kZW50cnkgPSBkZ2V0KGRlbnRyeSk7CiAKIAkJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CiAJfQotCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJY3VycmVudC0+dG90YWxfbGlua19jb3VudCA9IDA7CiAJcmV0dmFsID0gbGlua19wYXRoX3dhbGsobmFtZSwgbmQpOwogb3V0OgpAQCAtMTEyNywxMyArMTEyOSwxMiBAQAogCQkJCW5kLT5kZW50cnktPmRfaW5vZGUpKQogCQlhdWRpdF9pbm9kZShuYW1lLCBuZC0+ZGVudHJ5LT5kX2lub2RlLCBmbGFncyk7CiAJfQorb3V0X2ZhaWw6CiAJcmV0dXJuIHJldHZhbDsKIAotZnB1dF91bmxvY2tfZmFpbDoKK2ZwdXRfZmFpbDoKIAlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKLXVubG9ja19mYWlsOgotCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7Ci0JcmV0dXJuIHJldHZhbDsKKwlnb3RvIG91dF9mYWlsOwogfQogCiBpbnQgZmFzdGNhbGwgcGF0aF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLApAQCAtMTI1NCw3ICsxMjU1LDcgQEAKIAlyZXR1cm4gZGVudHJ5OwogfQogCi1zdHJ1Y3QgZGVudHJ5ICogbG9va3VwX2hhc2goc3RydWN0IG5hbWVpZGF0YSAqbmQpCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2hhc2goc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJcmV0dXJuIF9fbG9va3VwX2hhc2goJm5kLT5sYXN0LCBuZC0+ZGVudHJ5LCBuZCk7CiB9CkBAIC0yNjk3LDcgKzI2OTgsNiBAQAogRVhQT1JUX1NZTUJPTChnZXRfd3JpdGVfYWNjZXNzKTsgLyogYmluZm10X2FvdXQgKi8KIEVYUE9SVF9TWU1CT0woZ2V0bmFtZSk7CiBFWFBPUlRfU1lNQk9MKGxvY2tfcmVuYW1lKTsKLUVYUE9SVF9TWU1CT0wobG9va3VwX2hhc2gpOwogRVhQT1JUX1NZTUJPTChsb29rdXBfb25lX2xlbik7CiBFWFBPUlRfU1lNQk9MKHBhZ2VfZm9sbG93X2xpbmtfbGlnaHQpOwogRVhQT1JUX1NZTUJPTChwYWdlX3B1dF9saW5rKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCBhMjNmMzQ4Li5jYWU3NGRkIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xMjgsMTUgKzEyOCwxNCBAQAogc3RhdGljIGludAogbmZzX29wZW5kaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IHJlcyA9IDA7CisJaW50IHJlczsKIAogCWRmcHJpbnRrKFZGUywgIk5GUzogb3BlbmRpciglcy8lbGQpXG4iLAogCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CiAKIAlsb2NrX2tlcm5lbCgpOwogCS8qIENhbGwgZ2VuZXJpYyBvcGVuIGNvZGUgaW4gb3JkZXIgdG8gY2FjaGUgY3JlZGVudGlhbHMgKi8KLQlpZiAoIXJlcykKLQkJcmVzID0gbmZzX29wZW4oaW5vZGUsIGZpbHApOworCXJlcyA9IG5mc19vcGVuKGlub2RlLCBmaWxwKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXJlY3QuYyBiL2ZzL25mcy9kaXJlY3QuYwppbmRleCAwZjU4M2NiLi4zYzcyYjBjIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyZWN0LmMKKysrIGIvZnMvbmZzL2RpcmVjdC5jCkBAIC0xMTIsMTAgKzExMiw5IEBACiAgKi8KIHNzaXplX3QgbmZzX2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBpb2NiLT5raV9maWxwLT5mX2RlbnRyeTsKLQogCWRwcmludGsoIk5GUzogbmZzX2RpcmVjdF9JTyAoJXMpIG9mZi9ubyglTGQvJWx1KSBFSU5WQUxcbiIsCi0JCQlkZW50cnktPmRfbmFtZS5uYW1lLCAobG9uZyBsb25nKSBwb3MsIG5yX3NlZ3MpOworCQkJaW9jYi0+a2lfZmlscC0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJKGxvbmcgbG9uZykgcG9zLCBucl9zZWdzKTsKIAogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtNDY4LDcgKzQ2Nyw2IEBACiBzdGF0aWMgdm9pZCBuZnNfZGlyZWN0X2NvbW1pdF9zY2hlZHVsZShzdHJ1Y3QgbmZzX2RpcmVjdF9yZXEgKmRyZXEpCiB7CiAJc3RydWN0IG5mc193cml0ZV9kYXRhICpkYXRhID0gZHJlcS0+Y29tbWl0X2RhdGE7Ci0Jc3RydWN0IHJwY190YXNrICp0YXNrID0gJmRhdGEtPnRhc2s7CiAKIAlkYXRhLT5pbm9kZSA9IGRyZXEtPmlub2RlOwogCWRhdGEtPmNyZWQgPSBkcmVxLT5jdHgtPmNyZWQ7CkBAIC00ODksNyArNDg3LDcgQEAKIAkvKiBOb3RlOiB0YXNrLnRrX29wcy0+cnBjX3JlbGVhc2Ugd2lsbCBmcmVlIGRyZXEtPmNvbW1pdF9kYXRhICovCiAJZHJlcS0+Y29tbWl0X2RhdGEgPSBOVUxMOwogCi0JZHByaW50aygiTkZTOiAlNXUgaW5pdGlhdGVkIGNvbW1pdCBjYWxsXG4iLCB0YXNrLT50a19waWQpOworCWRwcmludGsoIk5GUzogJTV1IGluaXRpYXRlZCBjb21taXQgY2FsbFxuIiwgZGF0YS0+dGFzay50a19waWQpOwogCiAJbG9ja19rZXJuZWwoKTsKIAlycGNfZXhlY3V0ZSgmZGF0YS0+dGFzayk7CmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCBmMWRmMmM4Li5mYWRlMDJjIDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTUzNCwxMCArNTM0LDkgQEAKICAqLwogc3RhdGljIGludCBuZnNfZmxvY2soc3RydWN0IGZpbGUgKmZpbHAsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQogewotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlscC0+Zl9tYXBwaW5nLT5ob3N0OwotCiAJZHByaW50aygiTkZTOiBuZnNfZmxvY2soZj0lcy8lbGQsIHQ9JXgsIGZsPSV4KVxuIiwKLQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8sCisJCQlmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19pZCwKKwkJCWZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubywKIAkJCWZsLT5mbF90eXBlLCBmbC0+ZmxfZmxhZ3MpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggMmY3NjU2Yi4uZDBiOTkxYSAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTcwMCwxMiArNzAwLDkgQEAKIAkvKgogCSAqIERpc3BsYXkgc3VwZXJibG9jayBJL08gY291bnRlcnMKIAkgKi8KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgbmZzX2lvc3RhdHMgKnN0YXRzOwogCi0JCWlmICghY3B1X3Bvc3NpYmxlKGNwdSkpCi0JCQljb250aW51ZTsKLQogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJc3RhdHMgPSBwZXJfY3B1X3B0cihuZnNzLT5pb19zdGF0cywgY3B1KTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA0N2VjZTFkLi5kODZjMGRiIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdm9pZCBuZnM0X2ludGVudF9zZXRfZmlsZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgaW50IG5mczRfaW50ZW50X3NldF9maWxlKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIApAQCAtMTIyNyw4ICsxMjI3LDEwIEBACiAJCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHg7CiAJCWN0eCA9IChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKIAkJY3R4LT5zdGF0ZSA9IHN0YXRlOwotCX0gZWxzZQotCQluZnM0X2Nsb3NlX3N0YXRlKHN0YXRlLCBuZC0+aW50ZW50Lm9wZW4uZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJbmZzNF9jbG9zZV9zdGF0ZShzdGF0ZSwgbmQtPmludGVudC5vcGVuLmZsYWdzKTsKKwlyZXR1cm4gUFRSX0VSUihmaWxwKTsKIH0KIAogc3RydWN0IGRlbnRyeSAqCkBAIC0xODM1LDcgKzE4MzcsNyBAQAogCQkJbmZzX3NldGF0dHJfdXBkYXRlX2lub2RlKHN0YXRlLT5pbm9kZSwgc2F0dHIpOwogCX0KIAlpZiAoc3RhdHVzID09IDAgJiYgbmQgIT0gTlVMTCAmJiAobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pKQotCQluZnM0X2ludGVudF9zZXRfZmlsZShuZCwgZGVudHJ5LCBzdGF0ZSk7CisJCXN0YXR1cyA9IG5mczRfaW50ZW50X3NldF9maWxlKG5kLCBkZW50cnksIHN0YXRlKTsKIAllbHNlCiAJCW5mczRfY2xvc2Vfc3RhdGUoc3RhdGUsIGZsYWdzKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvYXV0aC5jIGIvZnMvbmZzZC9hdXRoLmMKaW5kZXggY2ZlOWNlOC4uNmU5MmIwZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9hdXRoLmMKKysrIGIvZnMvbmZzZC9hdXRoLmMKQEAgLTE0LDQ2ICsxNCw0NiBAQAogCiBpbnQgbmZzZF9zZXR1c2VyKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZXhwb3J0ICpleHApCiB7Ci0Jc3RydWN0IHN2Y19jcmVkCSpjcmVkID0gJnJxc3RwLT5ycV9jcmVkOworCXN0cnVjdCBzdmNfY3JlZAljcmVkID0gcnFzdHAtPnJxX2NyZWQ7CiAJaW50IGk7CiAJaW50IHJldDsKIAogCWlmIChleHAtPmV4X2ZsYWdzICYgTkZTRVhQX0FMTFNRVUFTSCkgewotCQljcmVkLT5jcl91aWQgPSBleHAtPmV4X2Fub25fdWlkOwotCQljcmVkLT5jcl9naWQgPSBleHAtPmV4X2Fub25fZ2lkOwotCQlwdXRfZ3JvdXBfaW5mbyhjcmVkLT5jcl9ncm91cF9pbmZvKTsKLQkJY3JlZC0+Y3JfZ3JvdXBfaW5mbyA9IGdyb3Vwc19hbGxvYygwKTsKKwkJY3JlZC5jcl91aWQgPSBleHAtPmV4X2Fub25fdWlkOworCQljcmVkLmNyX2dpZCA9IGV4cC0+ZXhfYW5vbl9naWQ7CisJCWNyZWQuY3JfZ3JvdXBfaW5mbyA9IGdyb3Vwc19hbGxvYygwKTsKIAl9IGVsc2UgaWYgKGV4cC0+ZXhfZmxhZ3MgJiBORlNFWFBfUk9PVFNRVUFTSCkgewogCQlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ2k7Ci0JCWlmICghY3JlZC0+Y3JfdWlkKQotCQkJY3JlZC0+Y3JfdWlkID0gZXhwLT5leF9hbm9uX3VpZDsKLQkJaWYgKCFjcmVkLT5jcl9naWQpCi0JCQljcmVkLT5jcl9naWQgPSBleHAtPmV4X2Fub25fZ2lkOwotCQlnaSA9IGdyb3Vwc19hbGxvYyhjcmVkLT5jcl9ncm91cF9pbmZvLT5uZ3JvdXBzKTsKKwkJaWYgKCFjcmVkLmNyX3VpZCkKKwkJCWNyZWQuY3JfdWlkID0gZXhwLT5leF9hbm9uX3VpZDsKKwkJaWYgKCFjcmVkLmNyX2dpZCkKKwkJCWNyZWQuY3JfZ2lkID0gZXhwLT5leF9hbm9uX2dpZDsKKwkJZ2kgPSBncm91cHNfYWxsb2MoY3JlZC5jcl9ncm91cF9pbmZvLT5uZ3JvdXBzKTsKIAkJaWYgKGdpKQotCQkJZm9yIChpID0gMDsgaSA8IGNyZWQtPmNyX2dyb3VwX2luZm8tPm5ncm91cHM7IGkrKykgewotCQkJCWlmICghR1JPVVBfQVQoY3JlZC0+Y3JfZ3JvdXBfaW5mbywgaSkpCisJCQlmb3IgKGkgPSAwOyBpIDwgY3JlZC5jcl9ncm91cF9pbmZvLT5uZ3JvdXBzOyBpKyspIHsKKwkJCQlpZiAoIUdST1VQX0FUKGNyZWQuY3JfZ3JvdXBfaW5mbywgaSkpCiAJCQkJCUdST1VQX0FUKGdpLCBpKSA9IGV4cC0+ZXhfYW5vbl9naWQ7CiAJCQkJZWxzZQotCQkJCQlHUk9VUF9BVChnaSwgaSkgPSBHUk9VUF9BVChjcmVkLT5jcl9ncm91cF9pbmZvLCBpKTsKKwkJCQkJR1JPVVBfQVQoZ2ksIGkpID0gR1JPVVBfQVQoY3JlZC5jcl9ncm91cF9pbmZvLCBpKTsKIAkJCX0KLQkJcHV0X2dyb3VwX2luZm8oY3JlZC0+Y3JfZ3JvdXBfaW5mbyk7Ci0JCWNyZWQtPmNyX2dyb3VwX2luZm8gPSBnaTsKLQl9CisJCWNyZWQuY3JfZ3JvdXBfaW5mbyA9IGdpOworCX0gZWxzZQorCQlnZXRfZ3JvdXBfaW5mbyhjcmVkLmNyX2dyb3VwX2luZm8pOwogCi0JaWYgKGNyZWQtPmNyX3VpZCAhPSAodWlkX3QpIC0xKQotCQljdXJyZW50LT5mc3VpZCA9IGNyZWQtPmNyX3VpZDsKKwlpZiAoY3JlZC5jcl91aWQgIT0gKHVpZF90KSAtMSkKKwkJY3VycmVudC0+ZnN1aWQgPSBjcmVkLmNyX3VpZDsKIAllbHNlCiAJCWN1cnJlbnQtPmZzdWlkID0gZXhwLT5leF9hbm9uX3VpZDsKLQlpZiAoY3JlZC0+Y3JfZ2lkICE9IChnaWRfdCkgLTEpCi0JCWN1cnJlbnQtPmZzZ2lkID0gY3JlZC0+Y3JfZ2lkOworCWlmIChjcmVkLmNyX2dpZCAhPSAoZ2lkX3QpIC0xKQorCQljdXJyZW50LT5mc2dpZCA9IGNyZWQuY3JfZ2lkOwogCWVsc2UKIAkJY3VycmVudC0+ZnNnaWQgPSBleHAtPmV4X2Fub25fZ2lkOwogCi0JaWYgKCFjcmVkLT5jcl9ncm91cF9pbmZvKQorCWlmICghY3JlZC5jcl9ncm91cF9pbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBzZXRfY3VycmVudF9ncm91cHMoY3JlZC0+Y3JfZ3JvdXBfaW5mbyk7Ci0JaWYgKChjcmVkLT5jcl91aWQpKSB7CisJcmV0ID0gc2V0X2N1cnJlbnRfZ3JvdXBzKGNyZWQuY3JfZ3JvdXBfaW5mbyk7CisJcHV0X2dyb3VwX2luZm8oY3JlZC5jcl9ncm91cF9pbmZvKTsKKwlpZiAoKGNyZWQuY3JfdWlkKSkgewogCQljYXBfdChjdXJyZW50LT5jYXBfZWZmZWN0aXZlKSAmPSB+Q0FQX05GU0RfTUFTSzsKIAl9IGVsc2UgewogCQljYXBfdChjdXJyZW50LT5jYXBfZWZmZWN0aXZlKSB8PSAoQ0FQX05GU0RfTUFTSyAmCmRpZmYgLS1naXQgYS9mcy9uZnNkL2V4cG9ydC5jIGIvZnMvbmZzZC9leHBvcnQuYwppbmRleCBjMzQwYmUwLi4zZWVjMzAwIDEwMDY0NAotLS0gYS9mcy9uZnNkL2V4cG9ydC5jCisrKyBiL2ZzL25mc2QvZXhwb3J0LmMKQEAgLTQyMiw3ICs0MjIsNyBAQAogCWlmICgobGVuPXF3b3JkX2dldCgmbWVzZywgYnVmLCBQQUdFX1NJWkUpKSA8PSAwKQogCQlnb3RvIG91dDsKIAllcnIgPSBwYXRoX2xvb2t1cChidWYsIDAsICZuZCk7Ci0JaWYgKGVycikgZ290byBvdXQ7CisJaWYgKGVycikgZ290byBvdXRfbm9fcGF0aDsKIAogCWV4cC5oLmZsYWdzID0gMDsKIAlleHAuZXhfY2xpZW50ID0gZG9tOwpAQCAtNDc1LDYgKzQ3NSw3IEBACiAgb3V0OgogCWlmIChuZC5kZW50cnkpCiAJCXBhdGhfcmVsZWFzZSgmbmQpOworIG91dF9ub19wYXRoOgogCWlmIChkb20pCiAJCWF1dGhfZG9tYWluX3B1dChkb20pOwogCWtmcmVlKGJ1Zik7CkBAIC0xMDY1LDkgKzEwNjYsMTEgQEAKIAkJcnYgPSBuZnNlcnJfcGVybTsKIAllbHNlIGlmIChJU19FUlIoZXhwKSkKIAkJcnYgPSBuZnNlcnJubyhQVFJfRVJSKGV4cCkpOwotCWVsc2UKKwllbHNlIHsKIAkJcnYgPSBmaF9jb21wb3NlKGZocCwgZXhwLAogCQkJCWZzaWRfa2V5LT5la19kZW50cnksIE5VTEwpOworCQlleHBfcHV0KGV4cCk7CisJfQogCWNhY2hlX3B1dCgmZnNpZF9rZXktPmgsICZzdmNfZXhwa2V5X2NhY2hlKTsKIAlyZXR1cm4gcnY7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczNwcm9jLmMgYi9mcy9uZnNkL25mczNwcm9jLmMKaW5kZXggNmQyZGZlZC4uZjYxMTQyYSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzcHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzM3Byb2MuYwpAQCAtNjgyLDcgKzY4Miw3IEBACiAgIFBST0MobG9va3VwLAkgZGlyb3AsCQlkaXJvcCwJCWZoYW5kbGUyLCBSQ19OT0NBQ0hFLCBTVCtGSCtwQVQrcEFUKSwKICAgUFJPQyhhY2Nlc3MsCSBhY2Nlc3MsCWFjY2VzcywJCWZoYW5kbGUsICBSQ19OT0NBQ0hFLCBTVCtwQVQrMSksCiAgIFBST0MocmVhZGxpbmssIHJlYWRsaW5rLAlyZWFkbGluaywJZmhhbmRsZSwgIFJDX05PQ0FDSEUsIFNUK3BBVCsxK05GUzNfTUFYUEFUSExFTi80KSwKLSAgUFJPQyhyZWFkLAkgcmVhZCwJCXJlYWQsCQlmaGFuZGxlLCAgUkNfTk9DQUNIRSwgU1QrcEFUKzQrTkZTU1ZDX01BWEJMS1NJWkUpLAorICBQUk9DKHJlYWQsCSByZWFkLAkJcmVhZCwJCWZoYW5kbGUsICBSQ19OT0NBQ0hFLCBTVCtwQVQrNCtORlNTVkNfTUFYQkxLU0laRS80KSwKICAgUFJPQyh3cml0ZSwJIHdyaXRlLAkJd3JpdGUsCQlmaGFuZGxlLCAgUkNfUkVQTEJVRkYsIFNUK1dDKzQpLAogICBQUk9DKGNyZWF0ZSwJIGNyZWF0ZSwJY3JlYXRlLAkJZmhhbmRsZTIsIFJDX1JFUExCVUZGLCBTVCsoMStGSCtwQVQpK1dDKSwKICAgUFJPQyhta2RpciwJIG1rZGlyLAkJY3JlYXRlLAkJZmhhbmRsZTIsIFJDX1JFUExCVUZGLCBTVCsoMStGSCtwQVQpK1dDKSwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGFjbC5jIGIvZnMvbmZzZC9uZnM0YWNsLmMKaW5kZXggNzM5MWY0YS4uZWRiMTA3ZSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0YWNsLmMKKysrIGIvZnMvbmZzZC9uZnM0YWNsLmMKQEAgLTcxMCw5ICs3MTAsOSBAQAogCQkvKiBBbHNvLCB0aGUgcmVtYWluaW5nIGVudHJpZXMgYXJlIGZvciBuYW1lZCB1c2VycyBhbmQKIAkJICogZ3JvdXBzLCBhbmQgY29tZSBpbiB0aHJlZXMgKG1hc2ssIGFsbG93LCBkZW55KTogKi8KIAkJaWYgKG40YWNsLT5uYWNlcyA8IDcpCi0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKChuNGFjbC0+bmFjZXMgLSA3KSAlIDMpCi0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIDQgKyAobjRhY2wtPm5hY2VzIC0gNykvMzsKIAl9CiB9CkBAIC03OTAsNyArNzkwLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWVycm9yID0gbmZzNF9hY2xfYWRkX2FjZShkYWNsLCBhY2UtPnR5cGUsIGFjZS0+ZmxhZywKLQkJCQlhY2UtPmFjY2Vzc19tYXNrLCBhY2UtPndob3R5cGUsIGFjZS0+d2hvKSA9PSAtMTsKKwkJCQlhY2UtPmFjY2Vzc19tYXNrLCBhY2UtPndob3R5cGUsIGFjZS0+d2hvKTsKIAkJaWYgKGVycm9yIDwgMCkKIAkJCWdvdG8gb3V0OwogCkBAIC04NjYsNyArODY2LDcgQEAKIAlzdHJ1Y3QgbmZzNF9hY2UgKmFjZTsKIAogCWlmICgoYWNlID0ga21hbGxvYyhzaXplb2YoKmFjZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJYWNlLT50eXBlID0gdHlwZTsKIAlhY2UtPmZsYWcgPSBmbGFnOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKaW5kZXggYzg3MmJkMC4uZGJhZjNmOSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYworKysgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCkBAIC00NDEsOCArNDQxLDkgQEAKIAkJZ290byBvdXRfY2xudDsKIAl9CiAKLQkvKiB0aGUgdGFzayBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgbmZzNF9jbGllbnQgc3RydWN0ICovCiAJY2ItPmNiX2NsaWVudCA9IGNsbnQ7CisKKwkvKiB0aGUgdGFzayBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgbmZzNF9jbGllbnQgc3RydWN0ICovCiAJYXRvbWljX2luYygmY2xwLT5jbF9jb3VudCk7CiAKIAltc2cucnBjX2NyZWQgPSBuZnNkNF9sb29rdXBjcmVkKGNscCwwKTsKQEAgLTQ2MCwxMyArNDYxLDEyIEBACiBvdXRfcnBjaW9kOgogCWF0b21pY19kZWMoJmNscC0+Y2xfY291bnQpOwogCXJwY2lvZF9kb3duKCk7CisJY2ItPmNiX2NsaWVudCA9IE5VTEw7CiBvdXRfY2xudDoKIAlycGNfc2h1dGRvd25fY2xpZW50KGNsbnQpOwotCWdvdG8gb3V0X2VycjsKIG91dF9lcnI6CiAJZHByaW50aygiTkZTRDogd2FybmluZzogbm8gY2FsbGJhY2sgcGF0aCB0byBjbGllbnQgJS4qc1xuIiwKIAkJKGludCljbHAtPmNsX25hbWUubGVuLCBjbHAtPmNsX25hbWUuZGF0YSk7Ci0JY2ItPmNiX2NsaWVudCA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRwcm9jLmMgYi9mcy9uZnNkL25mczRwcm9jLmMKaW5kZXggNmQ2M2YxZC4uYjBlMDk1ZSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzNHByb2MuYwpAQCAtMjg4LDggKzI4OCw2IEBACiAJZmhfcHV0KGN1cnJlbnRfZmgpOwogCXN0YXR1cyA9IGV4cF9wc2V1ZG9yb290KHJxc3RwLT5ycV9jbGllbnQsIGN1cnJlbnRfZmgsCiAJCQkgICAgICAmcnFzdHAtPnJxX2NoYW5kbGUpOwotCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBuZnNlcnJubyhuZnNkX3NldHVzZXIocnFzdHAsIGN1cnJlbnRfZmgtPmZoX2V4cG9ydCkpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTk3NSw3ICs5NzMsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHN2Y19wcm9jZWR1cmUJCW5mc2RfcHJvY2VkdXJlczRbMl0gPSB7CiAgIFBST0MobnVsbCwJIHZvaWQsCQl2b2lkLAkJdm9pZCwJICBSQ19OT0NBQ0hFLCAxKSwKLSAgUFJPQyhjb21wb3VuZCwgY29tcG91bmQsCWNvbXBvdW5kLAljb21wb3VuZCwgUkNfTk9DQUNIRSwgTkZTRF9CVUZTSVpFKQorICBQUk9DKGNvbXBvdW5kLCBjb21wb3VuZCwJY29tcG91bmQsCWNvbXBvdW5kLCBSQ19OT0NBQ0hFLCBORlNEX0JVRlNJWkUvNCkKIH07CiAKIHN0cnVjdCBzdmNfdmVyc2lvbgluZnNkX3ZlcnNpb240ID0gewpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggNDdlYzExMi4uOTZjNzU3OCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC0xNDcsNiArMTQ3LDQyIEBACiAJa3JlZl9nZXQoJmZpLT5maV9yZWYpOwogfQogCitzdGF0aWMgaW50IG51bV9kZWxlZ2F0aW9uczsKKworLyoKKyAqIE9wZW4gb3duZXIgc3RhdGUgKHNoYXJlIGxvY2tzKQorICovCisKKy8qIGhhc2ggdGFibGVzIGZvciBuZnM0X3N0YXRlb3duZXIgKi8KKyNkZWZpbmUgT1dORVJfSEFTSF9CSVRTICAgICAgICAgICAgICA4CisjZGVmaW5lIE9XTkVSX0hBU0hfU0laRSAgICAgICAgICAgICAoMSA8PCBPV05FUl9IQVNIX0JJVFMpCisjZGVmaW5lIE9XTkVSX0hBU0hfTUFTSyAgICAgICAgICAgICAoT1dORVJfSEFTSF9TSVpFIC0gMSkKKworI2RlZmluZSBvd25lcmlkX2hhc2h2YWwoaWQpIFwKKyAgICAgICAgKChpZCkgJiBPV05FUl9IQVNIX01BU0spCisjZGVmaW5lIG93bmVyc3RyX2hhc2h2YWwoY2xpZW50aWQsIG93bmVybmFtZSkgXAorICAgICAgICAoKChjbGllbnRpZCkgKyBvcGFxdWVfaGFzaHZhbCgob3duZXJuYW1lLmRhdGEpLCAob3duZXJuYW1lLmxlbikpKSAmIE9XTkVSX0hBU0hfTUFTSykKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQJb3duZXJpZF9oYXNodGJsW09XTkVSX0hBU0hfU0laRV07CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZAlvd25lcnN0cl9oYXNodGJsW09XTkVSX0hBU0hfU0laRV07CisKKy8qIGhhc2ggdGFibGUgZm9yIG5mczRfZmlsZSAqLworI2RlZmluZSBGSUxFX0hBU0hfQklUUyAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZJTEVfSEFTSF9TSVpFICAgICAgICAgICAgICAgICAgKDEgPDwgRklMRV9IQVNIX0JJVFMpCisjZGVmaW5lIEZJTEVfSEFTSF9NQVNLICAgICAgICAgICAgICAgICAgKEZJTEVfSEFTSF9TSVpFIC0gMSkKKy8qIGhhc2ggdGFibGUgZm9yIChvcGVuKW5mczRfc3RhdGVpZCAqLworI2RlZmluZSBTVEFURUlEX0hBU0hfQklUUyAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1RBVEVJRF9IQVNIX1NJWkUgICAgICAgICAgICAgICgxIDw8IFNUQVRFSURfSEFTSF9CSVRTKQorI2RlZmluZSBTVEFURUlEX0hBU0hfTUFTSyAgICAgICAgICAgICAgKFNUQVRFSURfSEFTSF9TSVpFIC0gMSkKKworI2RlZmluZSBmaWxlX2hhc2h2YWwoeCkgXAorICAgICAgICBoYXNoX3B0cih4LCBGSUxFX0hBU0hfQklUUykKKyNkZWZpbmUgc3RhdGVpZF9oYXNodmFsKG93bmVyX2lkLCBmaWxlX2lkKSAgXAorICAgICAgICAoKChvd25lcl9pZCkgKyAoZmlsZV9pZCkpICYgU1RBVEVJRF9IQVNIX01BU0spCisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVfaGFzaHRibFtGSUxFX0hBU0hfU0laRV07CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzdGF0ZWlkX2hhc2h0YmxbU1RBVEVJRF9IQVNIX1NJWkVdOworCiBzdGF0aWMgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqCiBhbGxvY19pbml0X2RlbGVnKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZWlkICpzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHUzMiB0eXBlKQogewpAQCAtMTU1LDkgKzE5MSwxMiBAQAogCXN0cnVjdCBuZnM0X2NhbGxiYWNrICpjYiA9ICZzdHAtPnN0X3N0YXRlb3duZXItPnNvX2NsaWVudC0+Y2xfY2FsbGJhY2s7CiAKIAlkcHJpbnRrKCJORlNEIGFsbG9jX2luaXRfZGVsZWdcbiIpOworCWlmIChudW1fZGVsZWdhdGlvbnMgPiBTVEFURUlEX0hBU0hfU0laRSAqIDQpCisJCXJldHVybiBOVUxMOwogCWRwID0ga21lbV9jYWNoZV9hbGxvYyhkZWxlZ19zbGFiLCBHRlBfS0VSTkVMKTsKIAlpZiAoZHAgPT0gTlVMTCkKIAkJcmV0dXJuIGRwOworCW51bV9kZWxlZ2F0aW9ucysrOwogCUlOSVRfTElTVF9IRUFEKCZkcC0+ZGxfcGVyZmlsZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRwLT5kbF9wZXJjbG50KTsKIAlJTklUX0xJU1RfSEVBRCgmZHAtPmRsX3JlY2FsbF9scnUpOwpAQCAtMTkyLDYgKzIzMSw3IEBACiAJCWRwcmludGsoIk5GU0Q6IGZyZWVpbmcgZHAgJXBcbiIsZHApOwogCQlwdXRfbmZzNF9maWxlKGRwLT5kbF9maWxlKTsKIAkJa21lbV9jYWNoZV9mcmVlKGRlbGVnX3NsYWIsIGRwKTsKKwkJbnVtX2RlbGVnYXRpb25zLS07CiAJfQogfQogCkBAIC0zMzAsMjIgKzM3MCwyOSBAQAogfQogCiBzdGF0aWMgdm9pZAorc2h1dGRvd25fY2FsbGJhY2tfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKQoreworCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGNscC0+Y2xfY2FsbGJhY2suY2JfY2xpZW50OworCisJLyogc2h1dGRvd24gcnBjIGNsaWVudCwgZW5kaW5nIGFueSBvdXRzdGFuZGluZyByZWNhbGwgcnBjcyAqLworCWlmIChjbG50KSB7CisJCWNscC0+Y2xfY2FsbGJhY2suY2JfY2xpZW50ID0gTlVMTDsKKwkJcnBjX3NodXRkb3duX2NsaWVudChjbG50KTsKKwkJcnBjaW9kX2Rvd24oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCiBleHBpcmVfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKQogewogCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvcDsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcDsKLQlzdHJ1Y3QgbmZzNF9jYWxsYmFjayAqY2IgPSAmY2xwLT5jbF9jYWxsYmFjazsKLQlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSBjbHAtPmNsX2NhbGxiYWNrLmNiX2NsaWVudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlYXBsaXN0OwogCiAJZHByaW50aygiTkZTRDogZXhwaXJlX2NsaWVudCBjbF9jb3VudCAlZFxuIiwKIAkgICAgICAgICAgICAgICAgICAgIGF0b21pY19yZWFkKCZjbHAtPmNsX2NvdW50KSk7CiAKLQkvKiBzaHV0ZG93biBycGMgY2xpZW50LCBlbmRpbmcgYW55IG91dHN0YW5kaW5nIHJlY2FsbCBycGNzICovCi0JaWYgKGF0b21pY19yZWFkKCZjYi0+Y2Jfc2V0KSA9PSAxICYmIGNsbnQpIHsKLQkJcnBjX3NodXRkb3duX2NsaWVudChjbG50KTsKLQkJY2xudCA9IGNscC0+Y2xfY2FsbGJhY2suY2JfY2xpZW50ID0gTlVMTDsKLQl9CisJc2h1dGRvd25fY2FsbGJhY2tfY2xpZW50KGNscCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmcmVhcGxpc3QpOwogCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwpAQCAtOTM2LDQwICs5ODMsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIAotICogT3BlbiBvd25lciBzdGF0ZSAoc2hhcmUgbG9ja3MpCi0gKi8KLQotLyogaGFzaCB0YWJsZXMgZm9yIG5mczRfc3RhdGVvd25lciAqLwotI2RlZmluZSBPV05FUl9IQVNIX0JJVFMgICAgICAgICAgICAgIDgKLSNkZWZpbmUgT1dORVJfSEFTSF9TSVpFICAgICAgICAgICAgICgxIDw8IE9XTkVSX0hBU0hfQklUUykKLSNkZWZpbmUgT1dORVJfSEFTSF9NQVNLICAgICAgICAgICAgIChPV05FUl9IQVNIX1NJWkUgLSAxKQotCi0jZGVmaW5lIG93bmVyaWRfaGFzaHZhbChpZCkgXAotICAgICAgICAoKGlkKSAmIE9XTkVSX0hBU0hfTUFTSykKLSNkZWZpbmUgb3duZXJzdHJfaGFzaHZhbChjbGllbnRpZCwgb3duZXJuYW1lKSBcCi0gICAgICAgICgoKGNsaWVudGlkKSArIG9wYXF1ZV9oYXNodmFsKChvd25lcm5hbWUuZGF0YSksIChvd25lcm5hbWUubGVuKSkpICYgT1dORVJfSEFTSF9NQVNLKQotCi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZAlvd25lcmlkX2hhc2h0YmxbT1dORVJfSEFTSF9TSVpFXTsKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkCW93bmVyc3RyX2hhc2h0YmxbT1dORVJfSEFTSF9TSVpFXTsKLQotLyogaGFzaCB0YWJsZSBmb3IgbmZzNF9maWxlICovCi0jZGVmaW5lIEZJTEVfSEFTSF9CSVRTICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgRklMRV9IQVNIX1NJWkUgICAgICAgICAgICAgICAgICAoMSA8PCBGSUxFX0hBU0hfQklUUykKLSNkZWZpbmUgRklMRV9IQVNIX01BU0sgICAgICAgICAgICAgICAgICAoRklMRV9IQVNIX1NJWkUgLSAxKQotLyogaGFzaCB0YWJsZSBmb3IgKG9wZW4pbmZzNF9zdGF0ZWlkICovCi0jZGVmaW5lIFNUQVRFSURfSEFTSF9CSVRTICAgICAgICAgICAgICAxMAotI2RlZmluZSBTVEFURUlEX0hBU0hfU0laRSAgICAgICAgICAgICAgKDEgPDwgU1RBVEVJRF9IQVNIX0JJVFMpCi0jZGVmaW5lIFNUQVRFSURfSEFTSF9NQVNLICAgICAgICAgICAgICAoU1RBVEVJRF9IQVNIX1NJWkUgLSAxKQotCi0jZGVmaW5lIGZpbGVfaGFzaHZhbCh4KSBcCi0gICAgICAgIGhhc2hfcHRyKHgsIEZJTEVfSEFTSF9CSVRTKQotI2RlZmluZSBzdGF0ZWlkX2hhc2h2YWwob3duZXJfaWQsIGZpbGVfaWQpICBcCi0gICAgICAgICgoKG93bmVyX2lkKSArIChmaWxlX2lkKSkgJiBTVEFURUlEX0hBU0hfTUFTSykKLQotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZmlsZV9oYXNodGJsW0ZJTEVfSEFTSF9TSVpFXTsKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlaWRfaGFzaHRibFtTVEFURUlEX0hBU0hfU0laRV07Ci0KIC8qIE9QRU4gU2hhcmUgc3RhdGUgaGVscGVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzNF9maWxlICoKIGFsbG9jX2luaXRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlubykKQEAgLTExODYsOCArMTE5OSw3IEBACiB7CiAJZHByaW50aygiTkZTRDogbW92ZV90b19jbG9zZV9scnUgbmZzNF9zdGF0ZW93bmVyICVwXG4iLCBzb3ApOwogCi0JdW5oYXNoX3N0YXRlb3duZXIoc29wKTsKLQlsaXN0X2FkZF90YWlsKCZzb3AtPnNvX2Nsb3NlX2xydSwgJmNsb3NlX2xydSk7CisJbGlzdF9tb3ZlX3RhaWwoJnNvcC0+c29fY2xvc2VfbHJ1LCAmY2xvc2VfbHJ1KTsKIAlzb3AtPnNvX3RpbWUgPSBnZXRfc2Vjb25kcygpOwogfQogCkBAIC0xOTE2LDggKzE5MjgsNyBAQAogCQl9CiAJCWRwcmludGsoIk5GU0Q6IHB1cmdpbmcgdW51c2VkIG9wZW4gc3RhdGVvd25lciAoc29faWQgJWQpXG4iLAogCQkJc29wLT5zb19pZCk7Ci0JCWxpc3RfZGVsKCZzb3AtPnNvX2Nsb3NlX2xydSk7Ci0JCW5mczRfcHV0X3N0YXRlb3duZXIoc29wKTsKKwkJcmVsZWFzZV9zdGF0ZW93bmVyKHNvcCk7CiAJfQogCWlmIChjbGllbnRpZF92YWwgPCBORlNEX0xBVU5EUk9NQVRfTUlOVElNRU9VVCkKIAkJY2xpZW50aWRfdmFsID0gTkZTRF9MQVVORFJPTUFUX01JTlRJTUVPVVQ7CkBAIC0yNDk1LDM2ICsyNTA2LDI3IEBACiAJCWxvY2stPmZsX2VuZCA9IE9GRlNFVF9NQVg7CiB9CiAKLXN0YXRpYyBpbnQKLW5mczRfdmVyaWZ5X2xvY2tfc3RhdGVvd25lcihzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AsIHVuc2lnbmVkIGludCBoYXNodmFsKQotewotCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKmxvY2FsID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQkJCSAgICAgICAgCi0JaWYgKGhhc2h2YWwgPj0gTE9DS19IQVNIX1NJWkUpCi0JCWdvdG8gb3V0OwotCWxpc3RfZm9yX2VhY2hfZW50cnkobG9jYWwsICZsb2NrX293bmVyaWRfaGFzaHRibFtoYXNodmFsXSwgc29faWRoYXNoKSB7Ci0JCWlmIChsb2NhbCA9PSBzb3ApIHsKLQkJCXN0YXR1cyA9IDE7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLW91dDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCisvKiBIYWNrITogRm9yIG5vdywgd2UncmUgZGVmaW5pbmcgdGhpcyBqdXN0IHNvIHdlIGNhbiB1c2UgYSBwb2ludGVyIHRvIGl0CisgKiBhcyBhIHVuaXF1ZSBjb29raWUgdG8gaWRlbnRpZnkgb3VyIChORlN2NCdzKSBwb3NpeCBsb2Nrcy4gKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbmZzZF9wb3NpeF9tbmdfb3BzICA9IHsKK307CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogbmZzNF9zZXRfbG9ja19kZW5pZWQoc3RydWN0IGZpbGVfbG9jayAqZmwsIHN0cnVjdCBuZnNkNF9sb2NrX2RlbmllZCAqZGVueSkKIHsKLQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AgPSAoc3RydWN0IG5mczRfc3RhdGVvd25lciAqKSBmbC0+Zmxfb3duZXI7Ci0JdW5zaWduZWQgaW50IGh2YWwgPSBsb2Nrb3duZXJpZF9oYXNodmFsKHNvcC0+c29faWQpOworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvcDsKKwl1bnNpZ25lZCBpbnQgaHZhbDsKIAotCWRlbnktPmxkX3NvcCA9IE5VTEw7Ci0JaWYgKG5mczRfdmVyaWZ5X2xvY2tfc3RhdGVvd25lcihzb3AsIGh2YWwpKSB7CisJaWYgKGZsLT5mbF9sbW9wcyA9PSAmbmZzZF9wb3NpeF9tbmdfb3BzKSB7CisJCXNvcCA9IChzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICopIGZsLT5mbF9vd25lcjsKKwkJaHZhbCA9IGxvY2tvd25lcmlkX2hhc2h2YWwoc29wLT5zb19pZCk7CiAJCWtyZWZfZ2V0KCZzb3AtPnNvX3JlZik7CiAJCWRlbnktPmxkX3NvcCA9IHNvcDsKIAkJZGVueS0+bGRfY2xpZW50aWQgPSBzb3AtPnNvX2NsaWVudC0+Y2xfY2xpZW50aWQ7CisJfSBlbHNlIHsKKwkJZGVueS0+bGRfc29wID0gTlVMTDsKKwkJZGVueS0+bGRfY2xpZW50aWQuY2xfYm9vdCA9IDA7CisJCWRlbnktPmxkX2NsaWVudGlkLmNsX2lkID0gMDsKIAl9CiAJZGVueS0+bGRfc3RhcnQgPSBmbC0+Zmxfc3RhcnQ7CiAJZGVueS0+bGRfbGVuZ3RoID0gfih1NjQpMDsKQEAgLTI3MzYsNiArMjczOCw3IEBACiAJZmlsZV9sb2NrLmZsX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJZmlsZV9sb2NrLmZsX2ZpbGUgPSBmaWxwOwogCWZpbGVfbG9jay5mbF9mbGFncyA9IEZMX1BPU0lYOworCWZpbGVfbG9jay5mbF9sbW9wcyA9ICZuZnNkX3Bvc2l4X21uZ19vcHM7CiAKIAlmaWxlX2xvY2suZmxfc3RhcnQgPSBsb2NrLT5sa19vZmZzZXQ7CiAJaWYgKChsb2NrLT5sa19sZW5ndGggPT0gfih1NjQpMCkgfHwgCkBAIC0yODQxLDYgKzI4NDQsNyBAQAogCQlmaWxlX2xvY2suZmxfb3duZXIgPSAoZmxfb3duZXJfdClsb2NrdC0+bHRfc3RhdGVvd25lcjsKIAlmaWxlX2xvY2suZmxfcGlkID0gY3VycmVudC0+dGdpZDsKIAlmaWxlX2xvY2suZmxfZmxhZ3MgPSBGTF9QT1NJWDsKKwlmaWxlX2xvY2suZmxfbG1vcHMgPSAmbmZzZF9wb3NpeF9tbmdfb3BzOwogCiAJZmlsZV9sb2NrLmZsX3N0YXJ0ID0gbG9ja3QtPmx0X29mZnNldDsKIAlpZiAoKGxvY2t0LT5sdF9sZW5ndGggPT0gfih1NjQpMCkgfHwgTE9GRl9PVkVSRkxPVyhsb2NrdC0+bHRfb2Zmc2V0LCBsb2NrdC0+bHRfbGVuZ3RoKSkKQEAgLTI5MDAsNiArMjkwNCw3IEBACiAJZmlsZV9sb2NrLmZsX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJZmlsZV9sb2NrLmZsX2ZpbGUgPSBmaWxwOwogCWZpbGVfbG9jay5mbF9mbGFncyA9IEZMX1BPU0lYOyAKKwlmaWxlX2xvY2suZmxfbG1vcHMgPSAmbmZzZF9wb3NpeF9tbmdfb3BzOwogCWZpbGVfbG9jay5mbF9zdGFydCA9IGxvY2t1LT5sdV9vZmZzZXQ7CiAKIAlpZiAoKGxvY2t1LT5sdV9sZW5ndGggPT0gfih1NjQpMCkgfHwgTE9GRl9PVkVSRkxPVyhsb2NrdS0+bHVfb2Zmc2V0LCBsb2NrdS0+bHVfbGVuZ3RoKSkKQEAgLTMyMTEsMTUgKzMyMTYsOCBAQAogCWludCBpOwogCXN0cnVjdCBuZnM0X2NsaWVudCAqY2xwID0gTlVMTDsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IE5VTEw7Ci0Jc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0LCByZWFwbGlzdDsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZjbG9zZV9scnUpIHsKLQkJc29wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBuZnM0X3N0YXRlb3duZXIsIHNvX2Nsb3NlX2xydSk7Ci0JCWxpc3RfZGVsKCZzb3AtPnNvX2Nsb3NlX2xydSk7Ci0JCW5mczRfcHV0X3N0YXRlb3duZXIoc29wKTsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgQ0xJRU5UX0hBU0hfU0laRTsgaSsrKSB7CiAJCXdoaWxlICghbGlzdF9lbXB0eSgmY29uZl9pZF9oYXNodGJsW2ldKSkgewogCQkJY2xwID0gbGlzdF9lbnRyeShjb25mX2lkX2hhc2h0YmxbaV0ubmV4dCwgc3RydWN0IG5mczRfY2xpZW50LCBjbF9pZGhhc2gpOwpAQCAtMzI0NCw4ICszMjQyLDYgQEAKIAl9CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZsYXVuZHJvbWF0X3dvcmspOwotCWZsdXNoX3dvcmtxdWV1ZShsYXVuZHJ5X3dxKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShsYXVuZHJ5X3dxKTsKIAluZnNkNF9zaHV0ZG93bl9yZWNkaXIoKTsKIAluZnM0X2luaXQgPSAwOwogfQpAQCAtMzI1Myw2ICszMjQ5LDggQEAKIHZvaWQKIG5mczRfc3RhdGVfc2h1dGRvd24odm9pZCkKIHsKKwljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUobGF1bmRyeV93cSwgJmxhdW5kcm9tYXRfd29yayk7CisJZGVzdHJveV93b3JrcXVldWUobGF1bmRyeV93cSk7CiAJbmZzNF9sb2NrX3N0YXRlKCk7CiAJbmZzNF9yZWxlYXNlX3JlY2xhaW0oKTsKIAlfX25mczRfc3RhdGVfc2h1dGRvd24oKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHhkci5jIGIvZnMvbmZzZC9uZnM0eGRyLmMKaW5kZXggMDM4NTdmZC4uZGUzOTk4ZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0eGRyLmMKKysrIGIvZnMvbmZzZC9uZnM0eGRyLmMKQEAgLTI5OSwxMSArMjk5LDEwIEBACiAJCQkJCQlidWYsIGR1bW15MzIsICZhY2Uud2hvKTsKIAkJCWlmIChzdGF0dXMpCiAJCQkJZ290byBvdXRfbmZzZXJyOwotCQkJaWYgKG5mczRfYWNsX2FkZF9hY2UoKmFjbCwgYWNlLnR5cGUsIGFjZS5mbGFnLAotCQkJCSBhY2UuYWNjZXNzX21hc2ssIGFjZS53aG90eXBlLCBhY2Uud2hvKSAhPSAwKSB7Ci0JCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCXN0YXR1cyA9IG5mczRfYWNsX2FkZF9hY2UoKmFjbCwgYWNlLnR5cGUsIGFjZS5mbGFnLAorCQkJCSBhY2UuYWNjZXNzX21hc2ssIGFjZS53aG90eXBlLCBhY2Uud2hvKTsKKwkJCWlmIChzdGF0dXMpCiAJCQkJZ290byBvdXRfbmZzZXJyOwotCQkJfQogCQl9CiAJfSBlbHNlCiAJCSphY2wgPSBOVUxMOwpAQCAtMjA4NSwyNyArMjA4NCwyMCBAQAogCVdSSVRFMzIoZW9mKTsKIAlXUklURTMyKG1heGNvdW50KTsKIAlBREpVU1RfQVJHUygpOwotCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9ICgoY2hhciopcmVzcC0+cCkgLSAoY2hhciopcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKLQorCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9IChjaGFyKilwCisJCQkJCS0gKGNoYXIqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7CiAJcmVzcC0+eGJ1Zi0+cGFnZV9sZW4gPSBtYXhjb3VudDsKIAotCS8qIHJlYWQgemVybyBieXRlcyAtPiBkb24ndCBzZXQgdXAgdGFpbCAqLwotCWlmKCFtYXhjb3VudCkKLQkJcmV0dXJuIDA7ICAgICAgICAKLQotCS8qIHNldCB1cCBwYWdlIGZvciByZW1haW5pbmcgcmVzcG9uc2VzICovCi0Jc3ZjX3Rha2VfcGFnZShyZXNwLT5ycXN0cCk7Ci0JcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IAotCQlwYWdlX2FkZHJlc3MocmVzcC0+cnFzdHAtPnJxX3Jlc3BhZ2VzW3Jlc3AtPnJxc3RwLT5ycV9yZXN1c2VkLTFdKTsKLQlyZXNwLT5ycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSByZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xOworCS8qIFVzZSByZXN0IG9mIGhlYWQgZm9yIHBhZGRpbmcgYW5kIHJlbWFpbmluZyBvcHM6ICovCisJcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gMDsKKwlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlID0gcDsKIAlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOwotCXJlc3AtPnAgPSByZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlOwotCXJlc3AtPmVuZCA9IHJlc3AtPnAgKyBQQUdFX1NJWkUvNDsKLQogCWlmIChtYXhjb3VudCYzKSB7Ci0JCSoocmVzcC0+cCkrKyA9IDA7CisJCVJFU0VSVkVfU1BBQ0UoNCk7CisJCVdSSVRFMzIoMCk7CiAJCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgKz0gbWF4Y291bnQmMzsKIAkJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfbGVuID0gNCAtIChtYXhjb3VudCYzKTsKKwkJQURKVVNUX0FSR1MoKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTQyLDIxICsyMTM0LDIwIEBACiAKIAlXUklURTMyKG1heGNvdW50KTsKIAlBREpVU1RfQVJHUygpOwotCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9ICgoY2hhciopcmVzcC0+cCkgLSAoY2hhciopcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKLQotCXN2Y190YWtlX3BhZ2UocmVzcC0+cnFzdHApOwotCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSAKLQkJcGFnZV9hZGRyZXNzKHJlc3AtPnJxc3RwLT5ycV9yZXNwYWdlc1tyZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xXSk7Ci0JcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMTsKLQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOwotCXJlc3AtPnAgPSByZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlOwotCXJlc3AtPmVuZCA9IHJlc3AtPnAgKyBQQUdFX1NJWkUvNDsKLQorCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9IChjaGFyKilwCisJCQkJLSAoY2hhciopcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKIAlyZXNwLT54YnVmLT5wYWdlX2xlbiA9IG1heGNvdW50OworCisJLyogVXNlIHJlc3Qgb2YgaGVhZCBmb3IgcGFkZGluZyBhbmQgcmVtYWluaW5nIG9wczogKi8KKwlyZXNwLT5ycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSAwOworCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSBwOworCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2xlbiA9IDA7CiAJaWYgKG1heGNvdW50JjMpIHsKLQkJKihyZXNwLT5wKSsrID0gMDsKKwkJUkVTRVJWRV9TUEFDRSg0KTsKKwkJV1JJVEUzMigwKTsKIAkJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSArPSBtYXhjb3VudCYzOwogCQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSA0IC0gKG1heGNvdW50JjMpOworCQlBREpVU1RfQVJHUygpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxNjYsNyArMjE1Nyw3IEBACiB7CiAJaW50IG1heGNvdW50OwogCWxvZmZfdCBvZmZzZXQ7Ci0JdTMyICpwYWdlLCAqc2F2ZXA7CisJdTMyICpwYWdlLCAqc2F2ZXAsICp0YWlsYmFzZTsKIAlFTkNPREVfSEVBRDsKIAogCWlmIChuZnNlcnIpCkBAIC0yMTgyLDYgKzIxNzMsNyBAQAogCVdSSVRFMzIoMCk7CiAJQURKVVNUX0FSR1MoKTsKIAlyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9sZW4gPSAoKGNoYXIqKXJlc3AtPnApIC0gKGNoYXIqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7CisJdGFpbGJhc2UgPSBwOwogCiAJbWF4Y291bnQgPSBQQUdFX1NJWkU7CiAJaWYgKG1heGNvdW50ID4gcmVhZGRpci0+cmRfbWF4Y291bnQpCkBAIC0yMjI2LDE0ICsyMjE4LDEyIEBACiAJKnArKyA9IGh0b25sKHJlYWRkaXItPmNvbW1vbi5lcnIgPT0gbmZzZXJyX2VvZik7CiAJcmVzcC0+eGJ1Zi0+cGFnZV9sZW4gPSAoKGNoYXIqKXApIC0gKGNoYXIqKXBhZ2VfYWRkcmVzcyhyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXNbcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMV0pOwogCi0JLyogYWxsb2NhdGUgYSBwYWdlIGZvciB0aGUgdGFpbCAqLwotCXN2Y190YWtlX3BhZ2UocmVzcC0+cnFzdHApOwotCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSAKLQkJcGFnZV9hZGRyZXNzKHJlc3AtPnJxc3RwLT5ycV9yZXNwYWdlc1tyZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xXSk7Ci0JcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMTsKKwkvKiBVc2UgcmVzdCBvZiBoZWFkIGZvciBwYWRkaW5nIGFuZCByZW1haW5pbmcgb3BzOiAqLworCXJlc3AtPnJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IDA7CisJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IHRhaWxiYXNlOwogCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2xlbiA9IDA7CiAJcmVzcC0+cCA9IHJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2U7Ci0JcmVzcC0+ZW5kID0gcmVzcC0+cCArIFBBR0VfU0laRS80OworCXJlc3AtPmVuZCA9IHJlc3AtPnAgKyAoUEFHRV9TSVpFIC0gcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfbGVuKS80OwogCiAJcmV0dXJuIDA7CiBlcnJfbm9fdmVyZjoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzcHJvYy5jIGIvZnMvbmZzZC9uZnNwcm9jLmMKaW5kZXggM2U2Yjc1Yy4uMDZjZDBkYiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnNwcm9jLmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogICBQUk9DKG5vbmUsCSB2b2lkLAkJdm9pZCwJCW5vbmUsCQlSQ19OT0NBQ0hFLCBTVCksCiAgIFBST0MobG9va3VwLAkgZGlyb3BhcmdzLAlkaXJvcHJlcywJZmhhbmRsZSwJUkNfTk9DQUNIRSwgU1QrRkgrQVQpLAogICBQUk9DKHJlYWRsaW5rLCByZWFkbGlua2FyZ3MsCXJlYWRsaW5rcmVzLAlub25lLAkJUkNfTk9DQUNIRSwgU1QrMStORlNfTUFYUEFUSExFTi80KSwKLSAgUFJPQyhyZWFkLAkgcmVhZGFyZ3MsCXJlYWRyZXMsCWZoYW5kbGUsCVJDX05PQ0FDSEUsIFNUK0FUKzErTkZTU1ZDX01BWEJMS1NJWkUpLAorICBQUk9DKHJlYWQsCSByZWFkYXJncywJcmVhZHJlcywJZmhhbmRsZSwJUkNfTk9DQUNIRSwgU1QrQVQrMStORlNTVkNfTUFYQkxLU0laRS80KSwKICAgUFJPQyhub25lLAkgdm9pZCwJCXZvaWQsCQlub25lLAkJUkNfTk9DQUNIRSwgU1QpLAogICBQUk9DKHdyaXRlLAkgd3JpdGVhcmdzLAlhdHRyc3RhdCwJZmhhbmRsZSwJUkNfUkVQTEJVRkYsIFNUK0FUKSwKICAgUFJPQyhjcmVhdGUsCSBjcmVhdGVhcmdzLAlkaXJvcHJlcywJZmhhbmRsZSwJUkNfUkVQTEJVRkYsIFNUK0ZIK0FUKSwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDMxMDE4MzMuLjFkNjVmMTMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMzcxLDcgKzM3MSw2IEBACiBzdGF0aWMgc3NpemVfdCBuZnNkX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqa2V5LCB2b2lkICoqYnVmKQogewogCXNzaXplX3QgYnVmbGVuOwotCWludCBlcnJvcjsKIAogCWJ1ZmxlbiA9IHZmc19nZXR4YXR0cihkZW50cnksIGtleSwgTlVMTCwgMCk7CiAJaWYgKGJ1ZmxlbiA8PSAwKQpAQCAtMzgxLDEwICszODAsNyBAQAogCWlmICghKmJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnJvciA9IHZmc19nZXR4YXR0cihkZW50cnksIGtleSwgKmJ1ZiwgYnVmbGVuKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0JcmV0dXJuIGJ1ZmxlbjsKKwlyZXR1cm4gdmZzX2dldHhhdHRyKGRlbnRyeSwga2V5LCAqYnVmLCBidWZsZW4pOwogfQogI2VuZGlmCiAKQEAgLTE5MjYsMTEgKzE5MjIsMTAgQEAKIAkJdmFsdWUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXNpemUgPSBwb3NpeF9hY2xfdG9feGF0dHIoYWNsLCB2YWx1ZSwgc2l6ZSk7Ci0JCWlmIChzaXplIDwgMCkgewotCQkJZXJyb3IgPSBzaXplOworCQllcnJvciA9IHBvc2l4X2FjbF90b194YXR0cihhY2wsIHZhbHVlLCBzaXplKTsKKwkJaWYgKGVycm9yIDwgMCkKIAkJCWdvdG8gZ2V0b3V0OwotCQl9CisJCXNpemUgPSBlcnJvcjsKIAl9IGVsc2UKIAkJc2l6ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuYyBiL2ZzL29jZnMyL2FvcHMuYwppbmRleCAwZDg1OGQwLi40NzE1MmJmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmMKKysrIGIvZnMvb2NmczIvYW9wcy5jCkBAIC0yNzYsMTMgKzI3NiwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIFRoaXMgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gb2NmczJfd3JpdGVfemVyb19wYWdlKCkgd2hpY2ggaGFzIGRvbmUKKyAqIGl0J3Mgb3duIGNsdXN0ZXIgbG9ja2luZy4gKi8KK2ludCBvY2ZzMl9wcmVwYXJlX3dyaXRlX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3sKKwlpbnQgcmV0OworCisJZG93bl9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKworCXJldCA9IGJsb2NrX3ByZXBhcmVfd3JpdGUocGFnZSwgZnJvbSwgdG8sIG9jZnMyX2dldF9ibG9jayk7CisKKwl1cF9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBvY2ZzMl9wcmVwYXJlX3dyaXRlKCkgY2FuIGJlIGFuIG91dGVyLW1vc3Qgb2NmczIgY2FsbCB3aGVuIGl0IGlzIGNhbGxlZAogICogZnJvbSBsb29wYmFjay4gIEl0IG11c3QgYmUgYWJsZSB0byBwZXJmb3JtIGl0cyBvd24gbG9ja2luZyBhcm91bmQKICAqIG9jZnMyX2dldF9ibG9jaygpLgogICovCi1pbnQgb2NmczJfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQl1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3N0YXRpYyBpbnQgb2NmczJfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJaW50IHJldDsKQEAgLTI5NSwxMSArMzExLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZG93bl9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKLQotCXJldCA9IGJsb2NrX3ByZXBhcmVfd3JpdGUocGFnZSwgZnJvbSwgdG8sIG9jZnMyX2dldF9ibG9jayk7Ci0KLQl1cF9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKwlyZXQgPSBvY2ZzMl9wcmVwYXJlX3dyaXRlX25vbG9jayhpbm9kZSwgcGFnZSwgZnJvbSwgdG8pOwogCiAJb2NmczJfbWV0YV91bmxvY2soaW5vZGUsIDApOwogb3V0OgpAQCAtNjI1LDExICs2MzcsMzEgQEAKIAlpbnQgcmV0OwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CisKKwkvKgorCSAqIFdlIGdldCBQUiBkYXRhIGxvY2tzIGV2ZW4gZm9yIE9fRElSRUNULiAgVGhpcyBhbGxvd3MKKwkgKiBjb25jdXJyZW50IE9fRElSRUNUIEkvTyBidXQgZG9lc24ndCBsZXQgT19ESVJFQ1Qgd2l0aAorCSAqIGV4dGVuZGluZyBhbmQgYnVmZmVyZWQgemVyb2luZyB3cml0ZXMgcmFjZS4gIElmIHRoZXkgZGlkCisJICogcmFjZSB0aGVuIHRoZSBidWZmZXJlZCB6ZXJvaW5nIGNvdWxkIGJlIHdyaXR0ZW4gYmFjayBhZnRlcgorCSAqIHRoZSBPX0RJUkVDVCBJL08uICBJdCdzIG9uZSB0aGluZyB0byB0ZWxsIHBlb3BsZSBub3QgdG8gbWl4CisJICogYnVmZmVyZWQgYW5kIE9fRElSRUNUIHdyaXRlcywgYnV0IGV4cGVjdGluZyB0aGVtIHRvCisJICogdW5kZXJzdGFuZCB0aGF0IGZpbGUgZXh0ZW5zaW9uIGlzIGFsc28gYW4gaW1wbGljaXQgYnVmZmVyZWQKKwkgKiB3cml0ZSBpcyB0b28gbXVjaC4gIEJ5IGdldHRpbmcgdGhlIFBSIHdlIGZvcmNlIHdyaXRlYmFjayBvZgorCSAqIHRoZSBidWZmZXJlZCB6ZXJvaW5nIGJlZm9yZSBwcm9jZWVkaW5nLgorCSAqLworCXJldCA9IG9jZnMyX2RhdGFfbG9jayhpbm9kZSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDApOworCiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX25vX2xvY2tpbmcocncsIGlvY2IsIGlub2RlLAogCQkJCQkgICAgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LCBvZmZzZXQsCiAJCQkJCSAgICBucl9zZWdzLCAKIAkJCQkJICAgIG9jZnMyX2RpcmVjdF9JT19nZXRfYmxvY2tzLAogCQkJCQkgICAgb2NmczJfZGlvX2VuZF9pbyk7CitvdXQ6CiAJbWxvZ19leGl0KHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuaCBiL2ZzL29jZnMyL2FvcHMuaAppbmRleCBkNDA0NTZkLi5lODhjM2YwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmgKKysrIGIvZnMvb2NmczIvYW9wcy5oCkBAIC0yMiw4ICsyMiw4IEBACiAjaWZuZGVmIE9DRlMyX0FPUFNfSAogI2RlZmluZSBPQ0ZTMl9BT1BTX0gKIAotaW50IG9jZnMyX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOworaW50IG9jZnMyX3ByZXBhcmVfd3JpdGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKIAogc3RydWN0IG9jZnMyX2pvdXJuYWxfaGFuZGxlICpvY2ZzMl9zdGFydF93YWxrX3BhZ2VfdHJhbnMoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJCQkgc3RydWN0IHBhZ2UgKnBhZ2UsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwppbmRleCBiZmYwZjBkLi4yMWYzOGFjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogc3RydWN0IG8yaGJfYmlvX3dhaXRfY3R4dCB7CiAJYXRvbWljX3QgICAgICAgICAgd2NfbnVtX3JlcXM7CiAJc3RydWN0IGNvbXBsZXRpb24gd2NfaW9fY29tcGxldGU7CisJaW50ICAgICAgICAgICAgICAgd2NfZXJyb3I7CiB9OwogCiBzdGF0aWMgdm9pZCBvMmhiX3dyaXRlX3RpbWVvdXQodm9pZCAqYXJnKQpAQCAtMTg2LDYgKzE4Nyw3IEBACiB7CiAJYXRvbWljX3NldCgmd2MtPndjX251bV9yZXFzLCBudW1faW9zKTsKIAlpbml0X2NvbXBsZXRpb24oJndjLT53Y19pb19jb21wbGV0ZSk7CisJd2MtPndjX2Vycm9yID0gMDsKIH0KIAogLyogVXNlZCBpbiBlcnJvciBwYXRocyB0b28gKi8KQEAgLTIxOCw4ICsyMjAsMTAgQEAKIHsKIAlzdHJ1Y3QgbzJoYl9iaW9fd2FpdF9jdHh0ICp3YyA9IGJpby0+YmlfcHJpdmF0ZTsKIAotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIklPIEVycm9yICVkXG4iLCBlcnJvcik7CisJCXdjLT53Y19lcnJvciA9IGVycm9yOworCX0KIAogCWlmIChiaW8tPmJpX3NpemUpCiAJCXJldHVybiAxOwpAQCAtMzkwLDYgKzM5NCw4IEBACiAKIGJhaWxfYW5kX3dhaXQ6CiAJbzJoYl93YWl0X29uX2lvKHJlZywgJndjKTsKKwlpZiAod2Mud2NfZXJyb3IgJiYgIXN0YXR1cykKKwkJc3RhdHVzID0gd2Mud2NfZXJyb3I7CiAKIAlpZiAoYmlvcykgewogCQlmb3IoaSA9IDA7IGkgPCBudW1fYmlvczsgaSsrKQpAQCAtNzkwLDIwICs3OTYsMjQgQEAKIAlyZXR1cm4gaGlnaGVzdDsKIH0KIAotc3RhdGljIHZvaWQgbzJoYl9kb19kaXNrX2hlYXJ0YmVhdChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKK3N0YXRpYyBpbnQgbzJoYl9kb19kaXNrX2hlYXJ0YmVhdChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKIHsKIAlpbnQgaSwgcmV0LCBoaWdoZXN0X25vZGUsIGNoYW5nZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBjb25maWd1cmVkX25vZGVzW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKIAlzdHJ1Y3QgYmlvICp3cml0ZV9iaW87CiAJc3RydWN0IG8yaGJfYmlvX3dhaXRfY3R4dCB3cml0ZV93YzsKIAotCWlmIChvMm5tX2NvbmZpZ3VyZWRfbm9kZV9tYXAoY29uZmlndXJlZF9ub2Rlcywgc2l6ZW9mKGNvbmZpZ3VyZWRfbm9kZXMpKSkKLQkJcmV0dXJuOworCXJldCA9IG8ybm1fY29uZmlndXJlZF9ub2RlX21hcChjb25maWd1cmVkX25vZGVzLAorCQkJCSAgICAgICBzaXplb2YoY29uZmlndXJlZF9ub2RlcykpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KIAogCWhpZ2hlc3Rfbm9kZSA9IG8yaGJfaGlnaGVzdF9ub2RlKGNvbmZpZ3VyZWRfbm9kZXMsIE8yTk1fTUFYX05PREVTKTsKIAlpZiAoaGlnaGVzdF9ub2RlID49IE8yTk1fTUFYX05PREVTKSB7CiAJCW1sb2coTUxfTk9USUNFLCAib2NmczJfaGVhcnRiZWF0OiBubyBjb25maWd1cmVkIG5vZGVzIGZvdW5kIVxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogTm8gc2Vuc2UgaW4gcmVhZGluZyB0aGUgc2xvdHMgb2Ygbm9kZXMgdGhhdCBkb24ndCBleGlzdApAQCAtODEzLDcgKzgyMyw3IEBACiAJcmV0ID0gbzJoYl9yZWFkX3Nsb3RzKHJlZywgaGlnaGVzdF9ub2RlICsgMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogV2l0aCBhbiB1cCB0byBkYXRlIHZpZXcgb2YgdGhlIHNsb3RzLCB3ZSBjYW4gY2hlY2sgdGhhdCBubwpAQCAtODMxLDcgKzg0MSw3IEBACiAJcmV0ID0gbzJoYl9pc3N1ZV9ub2RlX3dyaXRlKHJlZywgJndyaXRlX2JpbywgJndyaXRlX3djKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlpID0gLTE7CkBAIC04NDcsNiArODU3LDE1IEBACiAJICovCiAJbzJoYl93YWl0X29uX2lvKHJlZywgJndyaXRlX3djKTsKIAliaW9fcHV0KHdyaXRlX2Jpbyk7CisJaWYgKHdyaXRlX3djLndjX2Vycm9yKSB7CisJCS8qIERvIG5vdCByZS1hcm0gdGhlIHdyaXRlIHRpbWVvdXQgb24gSS9PIGVycm9yIC0gd2UKKwkJICogY2FuJ3QgYmUgc3VyZSB0aGF0IHRoZSBuZXcgYmxvY2sgZXZlciBtYWRlIGl0IHRvCisJCSAqIGRpc2sgKi8KKwkJbWxvZyhNTF9FUlJPUiwgIldyaXRlIGVycm9yICVkIG9uIGRldmljZSBcIiVzXCJcbiIsCisJCSAgICAgd3JpdGVfd2Mud2NfZXJyb3IsIHJlZy0+aHJfZGV2X25hbWUpOworCQlyZXR1cm4gd3JpdGVfd2Mud2NfZXJyb3I7CisJfQorCiAJbzJoYl9hcm1fd3JpdGVfdGltZW91dChyZWcpOwogCiAJLyogbGV0IHRoZSBwZXJzb24gd2hvIGxhdW5jaGVkIHVzIGtub3cgd2hlbiB0aGluZ3MgYXJlIHN0ZWFkeSAqLwpAQCAtODU0LDYgKzg3Myw4IEBACiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZWctPmhyX3N0ZWFkeV9pdGVyYXRpb25zKSkKIAkJCXdha2VfdXAoJm8yaGJfc3RlYWR5X3F1ZXVlKTsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyogU3VidHJhY3QgYiBmcm9tIGEsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBhLiBhICptdXN0KiBoYXZlIGEgbGFyZ2VyCkBAIC05MTMsNyArOTM0LDEwIEBACiAJCSAqIGxpa2VseSB0byB0aW1lIGl0c2VsZiBvdXQuICovCiAJCWRvX2dldHRpbWVvZmRheSgmYmVmb3JlX2hiKTsKIAotCQlvMmhiX2RvX2Rpc2tfaGVhcnRiZWF0KHJlZyk7CisJCWkgPSAwOworCQlkbyB7CisJCQlyZXQgPSBvMmhiX2RvX2Rpc2tfaGVhcnRiZWF0KHJlZyk7CisJCX0gd2hpbGUgKHJldCAmJiArK2kgPCAyKTsKIAogCQlkb19nZXR0aW1lb2ZkYXkoJmFmdGVyX2hiKTsKIAkJZWxhcHNlZF9tc2VjID0gbzJoYl9lbGFwc2VkX21zZWNzKCZiZWZvcmVfaGIsICZhZnRlcl9oYik7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vdXNlcmRsbS5jIGIvZnMvb2NmczIvZGxtL3VzZXJkbG0uYwppbmRleCBjMzc2NGY0Li43NGNhNGU1ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uYworKysgYi9mcy9vY2ZzMi9kbG0vdXNlcmRsbS5jCkBAIC0xMzksNiArMTM5LDEwIEBACiAJCXJldHVybjsKIAl9CiAKKwltbG9nX2J1Z19vbl9tc2cobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPT0gTEtNX0lWTU9ERSwKKwkJCSJMb2NrcmVzICVzLCByZXF1ZXN0ZWQgaXZtb2RlLiBmbGFncyAweCV4XG4iLAorCQkJbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKwogCS8qIHdlJ3JlIGRvd25jb252ZXJ0aW5nLiAqLwogCWlmIChsb2NrcmVzLT5sX3JlcXVlc3RlZCA8IGxvY2tyZXMtPmxfbGV2ZWwpIHsKIAkJaWYgKGxvY2tyZXMtPmxfcmVxdWVzdGVkIDw9CkBAIC0yMjksMjMgKzIzMyw0MiBAQAogCiAJbWxvZygwLCAiVU5MT0NLIEFTVCBjYWxsZWQgb24gbG9jayAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAotCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKKwlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwgJiYgc3RhdHVzICE9IERMTV9DQU5DRUxHUkFOVCkKIAkJbWxvZyhNTF9FUlJPUiwgIkRsbSByZXR1cm5zIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAogCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikKKwkvKiBUaGUgdGVhcmRvd24gZmxhZyBnZXRzIHNldCBlYXJseSBkdXJpbmcgdGhlIHVubG9jayBwcm9jZXNzLAorCSAqIHNvIHRlc3QgdGhlIGNhbmNlbCBmbGFnIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgYXN0IGlzbid0CisJICogZm9yIGEgY29uY3VycmVudCBjYW5jZWwuICovCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04KKwkgICAgJiYgIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpIHsKIAkJbG9ja3Jlcy0+bF9sZXZlbCA9IExLTV9JVk1PREU7Ci0JZWxzZSB7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7CisJCW1sb2coMCwgIkxvY2sgJXMsIGNhbmNlbCBmYWlscywgZmxhZ3MgMHgleFxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZmxhZ3MpOworCQkvKiBXZSB0cmllZCB0byBjYW5jZWwgYSBjb252ZXJ0IHJlcXVlc3QsIGJ1dCBpdCB3YXMKKwkJICogYWxyZWFkeSBncmFudGVkLiBEb24ndCBjbGVhciB0aGUgYnVzeSBmbGFnIC0gdGhlCisJCSAqIGFzdCBzaG91bGQndmUgZG9uZSB0aGlzIGFscmVhZHkuICovCisJCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSk7CisJCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19JTl9DQU5DRUw7CisJCWdvdG8gb3V0X25vY2xlYXI7CisJfSBlbHNlIHsKKwkJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpKTsKKwkJLyogQ2FuY2VsIHN1Y2NlZWRlZCwgd2Ugd2FudCB0byByZS1xdWV1ZSAqLworCQltbG9nKDAsICJMb2NrICVzLCBjYW5jZWwgc3VjY2VlZHMsIGZsYWdzIDB4JXhcbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKIAkJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBMS01fSVZNT0RFOyAvKiBjYW5jZWwgYW4KIAkJCQkJCSAgICAqIHVwY29udmVydAogCQkJCQkJICAgICogcmVxdWVzdC4gKi8KIAkJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0lOX0NBTkNFTDsKIAkJLyogd2Ugd2FudCB0aGUgdW5ibG9jayB0aHJlYWQgdG8gbG9vayBhdCBpdCBhZ2FpbgogCQkgKiBub3cuICovCi0JCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKKwkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkKKwkJCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKIAl9CiAKIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQlVTWTsKK291dF9ub2NsZWFyOgogCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwogCiAJd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7CkBAIC0yNjgsMTMgKzI5MSwyNiBAQAogCiAJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwogCi0JQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSk7Ci0JQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19RVUVVRUQpKTsKKwltbG9nX2J1Z19vbl9tc2coIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX1FVRVVFRCksCisJCQkiTG9ja3JlcyAlcywgZmxhZ3MgMHgleFxuIiwKKwkJCWxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CiAKLQkvKiBub3RpY2UgdGhhdCB3ZSBkb24ndCBjbGVhciBVU0VSX0xPQ0tfQkxPQ0tFRCBoZXJlLiBUaGF0J3MKLQkgKiBmb3IgdXNlcl9hc3QgdG8gZG8uICovCisJLyogbm90aWNlIHRoYXQgd2UgZG9uJ3QgY2xlYXIgVVNFUl9MT0NLX0JMT0NLRUQgaGVyZS4gSWYgaXQncworCSAqIHNldCwgd2Ugd2FudCB1c2VyX2FzdCBjbGVhciBpdC4gKi8KIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfUVVFVUVEOwogCisJLyogSXQncyB2YWxpZCB0byBnZXQgaGVyZSBhbmQgbm8gbG9uZ2VyIGJlIGJsb2NrZWQgLSBpZiB3ZSBnZXQKKwkgKiBzZXZlcmFsIGJhc3RzIGluIGEgcm93LCB3ZSBtaWdodCBiZSBxdWV1ZWQgYnkgdGhlIGZpcnN0CisJICogb25lLCB0aGUgdW5ibG9jayB0aHJlYWQgbWlnaHQgcnVuIGFuZCBjbGVhciB0aGUgcXVldWVkCisJICogZmxhZywgYW5kIGZpbmFsbHkgd2UgbWlnaHQgZ2V0IGFub3RoZXIgYmFzdCB3aGljaCByZS1xdWV1ZXMKKwkgKiB1cyBiZWZvcmUgb3VyIGFzdCBmb3IgdGhlIGRvd25jb252ZXJ0IGlzIGNhbGxlZC4gKi8KKwlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpKSB7CisJCW1sb2coMCwgIkxvY2tyZXMgJXMsIGZsYWdzIDB4JXg6IHF1ZXVlZCBidXQgbm90IGJsb2NraW5nXG4iLAorCQkJbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCWdvdG8gZHJvcF9yZWY7CisJfQorCiAJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04pIHsKIAkJbWxvZygwLCAibG9jayBpcyBpbiB0ZWFyZG93biBzbyB3ZSBkbyBub3RoaW5nXG4iKTsKIAkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CkBAIC0yODIsNyArMzE4LDkgQEAKIAl9CiAKIAlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7Ci0JCW1sb2coMCwgIkJVU1kgZmxhZyBkZXRlY3RlZC4uLlxuIik7CisJCW1sb2coMCwgIkNhbmNlbCBsb2NrICVzLCBmbGFncyAweCV4XG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CisKIAkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSB7CiAJCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIAkJCWdvdG8gZHJvcF9yZWY7CkBAIC0yOTYsMTQgKzMzNCw3IEBACiAJCQkJICAgTEtNX0NBTkNFTCwKIAkJCQkgICB1c2VyX3VubG9ja19hc3QsCiAJCQkJICAgbG9ja3Jlcyk7Ci0JCWlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7Ci0JCQkvKiBJZiB3ZSBnb3QgdGhpcywgdGhlbiB0aGUgYXN0IHdhcyBmaXJlZAotCQkJICogYmVmb3JlIHdlIGNvdWxkIGNhbmNlbC4gV2UgY2xlYW51cCBvdXIKLQkJCSAqIHN0YXRlLCBhbmQgcmVzdGFydCB0aGUgZnVuY3Rpb24uICovCi0JCQlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfSU5fQ0FOQ0VMOwotCQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCX0gZWxzZSBpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpCisJCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKIAkJCXVzZXJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKIAkJZ290byBkcm9wX3JlZjsKIAl9CkBAIC01ODEsNiArNjEyLDE0IEBACiAJbWxvZygwLCAiYXNrZWQgdG8gZGVzdHJveSAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAogCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikgeworCQltbG9nKDAsICJMb2NrIGlzIGFscmVhZHkgdG9ybiBkb3duXG4iKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCXJldHVybiAwOworCX0KKworCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0lOX1RFQVJET1dOOworCiAJd2hpbGUgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQlVTWSkgewogCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIApAQCAtNjA2LDcgKzY0NSw2IEBACiAKIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQVRUQUNIRUQ7CiAJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfQlVTWTsKLQlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19JTl9URUFSRE9XTjsKIAlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIAogCW1sb2coMCwgInVubG9ja2luZyBsb2NrcmVzICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXh0ZW50X21hcC5jIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCmluZGV4IDQ2MDFmYzIuLjFhNWM2OTAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYworKysgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKQEAgLTU2OSw3ICs1NjksNyBAQAogCiAJcmV0ID0gLUVOT01FTTsKIAljdHh0Lm5ld19lbnQgPSBrbWVtX2NhY2hlX2FsbG9jKG9jZnMyX2VtX2VudF9jYWNoZXAsCi0JCQkJCUdGUF9LRVJORUwpOworCQkJCQlHRlBfTk9GUyk7CiAJaWYgKCFjdHh0Lm5ld19lbnQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtNTgzLDE0ICs1ODMsMTQgQEAKIAkJaWYgKGN0eHQubmVlZF9sZWZ0ICYmICFjdHh0LmxlZnRfZW50KSB7CiAJCQljdHh0LmxlZnRfZW50ID0KIAkJCQlrbWVtX2NhY2hlX2FsbG9jKG9jZnMyX2VtX2VudF9jYWNoZXAsCi0JCQkJCQkgR0ZQX0tFUk5FTCk7CisJCQkJCQkgR0ZQX05PRlMpOwogCQkJaWYgKCFjdHh0LmxlZnRfZW50KQogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChjdHh0Lm5lZWRfcmlnaHQgJiYgIWN0eHQucmlnaHRfZW50KSB7CiAJCQljdHh0LnJpZ2h0X2VudCA9CiAJCQkJa21lbV9jYWNoZV9hbGxvYyhvY2ZzMl9lbV9lbnRfY2FjaGVwLAotCQkJCQkJIEdGUF9LRVJORUwpOworCQkJCQkJIEdGUF9OT0ZTKTsKIAkJCWlmICghY3R4dC5yaWdodF9lbnQpCiAJCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCAzNGU5MDNhLi5hOTU1OWM4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0yNjAsNiArMjYwLDE3IEBACiAJaWYgKG5ld19pX3NpemUgPT0gbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpCiAJCWdvdG8gYmFpbDsKIAorCS8qIFRoaXMgZm9yY2VzIG90aGVyIG5vZGVzIHRvIHN5bmMgYW5kIGRyb3AgdGhlaXIgcGFnZXMuIERvCisJICogdGhpcyBldmVuIGlmIHdlIGhhdmUgYSB0cnVuY2F0ZSB3aXRob3V0IGFsbG9jYXRpb24gY2hhbmdlIC0KKwkgKiBvY2ZzMiBjbHVzdGVyIHNpemVzIGNhbiBiZSBtdWNoIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUsIHNvCisJICogd2UgaGF2ZSB0byB0cnVuY2F0ZSB0aGVtIGFueXdheS4gICovCisJc3RhdHVzID0gb2NmczJfZGF0YV9sb2NrKGlub2RlLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisJb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDEpOworCiAJaWYgKGxlMzJfdG9fY3B1KGZlLT5pX2NsdXN0ZXJzKSA9PQogCSAgICBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMob3NiLT5zYiwgbmV3X2lfc2l6ZSkpIHsKIAkJbWxvZygwLCAiZmUtPmlfY2x1c3RlcnMgPSAldSwgc28gd2UgZG8gYSBzaW1wbGUgdHJ1bmNhdGVcbiIsCkBAIC0yNzIsMTQgKzI4Myw2IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQkvKiBUaGlzIGZvcmNlcyBvdGhlciBub2RlcyB0byBzeW5jIGFuZCBkcm9wIHRoZWlyIHBhZ2VzICovCi0Jc3RhdHVzID0gb2NmczJfZGF0YV9sb2NrKGlub2RlLCAxKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0Jb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDEpOwotCiAJLyogYWxyaWdodCwgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBkbyBhIGZ1bGwgYmxvd24gYWxsb2Mgc2l6ZQogCSAqIGNoYW5nZS4gT3JwaGFuIHRoZSBpbm9kZSBzbyB0aGF0IHJlY292ZXJ5IGNhbiBjb21wbGV0ZSB0aGUKIAkgKiB0cnVuY2F0ZSBpZiBuZWNlc3NhcnkuIFRoaXMgZG9lcyB0aGUgdGFzayBvZiBtYXJraW5nCkBAIC02MTAsNyArNjEzLDggQEAKIAogLyogU29tZSBwYXJ0cyBvZiB0aGlzIHRha2VuIGZyb20gZ2VuZXJpY19jb250X2V4cGFuZCwgd2hpY2ggdHVybmVkIG91dAogICogdG8gYmUgdG9vIGZyYWdpbGUgdG8gZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQgd2l0aG91dCB1cyBoYXZpbmcgdG8KLSAqIHdvcnJ5IGFib3V0IHJlY3Vyc2l2ZSBsb2NraW5nIGluIC0+Y29tbWl0X3dyaXRlKCkuICovCisgKiB3b3JyeSBhYm91dCByZWN1cnNpdmUgbG9ja2luZyBpbiAtPnByZXBhcmVfd3JpdGUoKSBhbmQKKyAqIC0+Y29tbWl0X3dyaXRlKCkuICovCiBzdGF0aWMgaW50IG9jZnMyX3dyaXRlX3plcm9fcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSB1NjQgc2l6ZSkKIHsKQEAgLTYzOCw3ICs2NDIsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9wcmVwYXJlX3dyaXRlKE5VTEwsIHBhZ2UsIG9mZnNldCwgb2Zmc2V0KTsKKwlyZXQgPSBvY2ZzMl9wcmVwYXJlX3dyaXRlX25vbG9jayhpbm9kZSwgcGFnZSwgb2Zmc2V0LCBvZmZzZXQpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNjkyLDEzICs2OTYsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiAKKyAqIEEgdGFpbF90b19za2lwIHZhbHVlID4gMCBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBiZWluZyBjYWxsZWQgZnJvbQorICogb2NmczJfZmlsZV9haW9fd3JpdGUoKS4gVGhpcyBoYXMgdGhlIGZvbGxvd2luZyBpbXBsaWNhdGlvbnM6CisgKgorICogLSB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBpX3NpemUKKyAqIC0gZGlfYmggd2lsbCBiZSBOVUxMLCB3aGljaCBpcyBmaW5lIGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgaW4gdGhlCisgKiAgIGNhc2Ugd2hlcmUgd2Ugd2FudCB0byB1cGRhdGUgaV9zaXplLgorICogLSBvY2ZzMl96ZXJvX2V4dGVuZCgpIHdpbGwgdGhlbiBvbmx5IGJlIGZpbGxpbmcgdGhlIGhvbGUgY3JlYXRlZAorICogICBiZXR3ZWVuIGlfc2l6ZSBhbmQgdGhlIHN0YXJ0IG9mIHRoZSB3cml0ZS4KKyAqLwogc3RhdGljIGludCBvY2ZzMl9leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkJICAgICB1NjQgbmV3X2lfc2l6ZSkKKwkJCSAgICAgdTY0IG5ld19pX3NpemUsCisJCQkgICAgIHNpemVfdCB0YWlsX3RvX3NraXApCiB7CiAJaW50IHJldCA9IDA7CiAJdTMyIGNsdXN0ZXJzX3RvX2FkZDsKIAorCUJVR19PTighdGFpbF90b19za2lwICYmICFkaV9iaCk7CisKIAkvKiBzZXRhdHRyIHNvbWV0aW1lcyBjYWxscyB1cyBsaWtlIHRoaXMuICovCiAJaWYgKG5ld19pX3NpemUgPT0gMCkKIAkJZ290byBvdXQ7CkBAIC03MTEsMjcgKzcyOCw0NCBAQAogCQlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnM7CiAKIAlpZiAoY2x1c3RlcnNfdG9fYWRkKSB7CisJCS8qIAorCQkgKiBwcm90ZWN0IHRoZSBwYWdlcyB0aGF0IG9jZnMyX3plcm9fZXh0ZW5kIGlzIGdvaW5nIHRvCisJCSAqIGJlIHB1bGxpbmcgaW50byB0aGUgcGFnZSBjYWNoZS4uIHdlIGRvIHRoaXMgYmVmb3JlIHRoZQorCQkgKiBtZXRhZGF0YSBleHRlbmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaW50byB0aGUgc2l0dWF0aW9uCisJCSAqIHdoZXJlIHdlJ3ZlIGV4dGVuZGVkIHRoZSBtZXRhZGF0YSBidXQgY2FuJ3QgZ2V0IHRoZSBkYXRhCisJCSAqIGxvY2sgdG8gemVyby4KKwkJICovCisJCXJldCA9IG9jZnMyX2RhdGFfbG9jayhpbm9kZSwgMSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCXJldCA9IG9jZnMyX2V4dGVuZF9hbGxvY2F0aW9uKGlub2RlLCBjbHVzdGVyc190b19hZGQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl96ZXJvX2V4dGVuZChpbm9kZSwgbmV3X2lfc2l6ZSk7CisJCXJldCA9IG9jZnMyX3plcm9fZXh0ZW5kKGlub2RlLCAodTY0KW5ld19pX3NpemUgLSB0YWlsX3RvX3NraXApOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KLQl9IAotCi0JLyogTm8gYWxsb2NhdGlvbiByZXF1aXJlZCwgd2UganVzdCB1c2UgdGhpcyBoZWxwZXIgdG8KLQkgKiBkbyBhIHRyaXZpYWwgdXBkYXRlIG9mIGlfc2l6ZS4gKi8KLQlyZXQgPSBvY2ZzMl9zaW1wbGVfc2l6ZV91cGRhdGUoaW5vZGUsIGRpX2JoLCBuZXdfaV9zaXplKTsKLQlpZiAocmV0IDwgMCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0OwogCX0KIAorCWlmICghdGFpbF90b19za2lwKSB7CisJCS8qIFdlJ3JlIGJlaW5nIGNhbGxlZCBmcm9tIG9jZnMyX3NldGF0dHIoKSB3aGljaCB3YW50cworCQkgKiB1cyB0byB1cGRhdGUgaV9zaXplICovCisJCXJldCA9IG9jZnMyX3NpbXBsZV9zaXplX3VwZGF0ZShpbm9kZSwgZGlfYmgsIG5ld19pX3NpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK291dF91bmxvY2s6CisJaWYgKGNsdXN0ZXJzX3RvX2FkZCkgLyogdGhpcyBpcyB0aGUgb25seSBjYXNlIGluIHdoaWNoIHdlIGxvY2sgKi8KKwkJb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDEpOworCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTc5MCw3ICs4MjQsNyBAQAogCQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpID4gYXR0ci0+aWFfc2l6ZSkKIAkJCXN0YXR1cyA9IG9jZnMyX3RydW5jYXRlX2ZpbGUoaW5vZGUsIGJoLCBhdHRyLT5pYV9zaXplKTsKIAkJZWxzZQotCQkJc3RhdHVzID0gb2NmczJfZXh0ZW5kX2ZpbGUoaW5vZGUsIGJoLCBhdHRyLT5pYV9zaXplKTsKKwkJCXN0YXR1cyA9IG9jZnMyX2V4dGVuZF9maWxlKGlub2RlLCBiaCwgYXR0ci0+aWFfc2l6ZSwgMCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTA0NiwyMSArMTA4MCwxMiBAQAogCQlpZiAoIWNsdXN0ZXJzKQogCQkJYnJlYWs7CiAKLQkJcmV0ID0gb2NmczJfZXh0ZW5kX2FsbG9jYXRpb24oaW5vZGUsIGNsdXN0ZXJzKTsKKwkJcmV0ID0gb2NmczJfZXh0ZW5kX2ZpbGUoaW5vZGUsIE5VTEwsIG5ld3NpemUsIGNvdW50KTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWlmIChyZXQgIT0gLUVOT1NQQykKIAkJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQotCi0JCS8qIEZpbGwgYW55IGhvbGVzIHdoaWNoIHdvdWxkJ3ZlIGJlZW4gY3JlYXRlZCBieSB0aGlzCi0JCSAqIHdyaXRlLiBJZiB3ZSdyZSBPX0FQUEVORCwgdGhpcyB3aWxsIHdpbmQgdXAKLQkJICogKGNvcnJlY3RseSkgYmVpbmcgYSBub29wLiAqLwotCQlyZXQgPSBvY2ZzMl96ZXJvX2V4dGVuZChpbm9kZSwgKHU2NCkgbmV3c2l6ZSAtIGNvdW50KTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9CiAJCWJyZWFrOwogCX0KIApAQCAtMTE0Myw2ICsxMTY4LDIyIEBACiAJCW9jZnMyX2lvY2Jfc2V0X3J3X2xvY2tlZChpb2NiKTsKIAl9CiAKKwkvKgorCSAqIFdlJ3JlIGZpbmUgbGV0dGluZyBmb2xrcyByYWNlIHRydW5jYXRlcyBhbmQgZXh0ZW5kaW5nCisJICogd3JpdGVzIHdpdGggcmVhZCBhY3Jvc3MgdGhlIGNsdXN0ZXIsIGp1c3QgbGlrZSB0aGV5IGNhbgorCSAqIGxvY2FsbHkuIEhlbmNlIG5vIHJ3X2xvY2sgZHVyaW5nIHJlYWQuCisJICogCisJICogVGFrZSBhbmQgZHJvcCB0aGUgbWV0YSBkYXRhIGxvY2sgdG8gdXBkYXRlIGlub2RlIGZpZWxkcworCSAqIGxpa2UgaV9zaXplLiBUaGlzIGFsbG93cyB0aGUgY2hlY2tzIGRvd24gYmVsb3cKKwkgKiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoKSBhIGNoYW5jZSBvZiBhY3R1YWxseSB3b3JraW5nLiAKKwkgKi8KKwlyZXQgPSBvY2ZzMl9tZXRhX2xvY2soaW5vZGUsIE5VTEwsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBiYWlsOworCX0KKwlvY2ZzMl9tZXRhX3VubG9jayhpbm9kZSwgMCk7CisKIAlyZXQgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoaW9jYiwgYnVmLCBjb3VudCwgaW9jYi0+a2lfcG9zKTsKIAlpZiAocmV0ID09IC1FSU5WQUwpCiAJCW1sb2coTUxfRVJST1IsICJnZW5lcmljX2ZpbGVfYWlvX3JlYWQgcmV0dXJuZWQgLUVJTlZBTFxuIik7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggNmE2MTBhZS4uZWViYzNjZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtMTE3LDcgKzExNyw3IEBACiB7CiAJc3RydWN0IG9jZnMyX2pvdXJuYWxfaGFuZGxlICpyZXR2YWwgPSBOVUxMOwogCi0JcmV0dmFsID0ga2NhbGxvYygxLCBzaXplb2YoKnJldHZhbCksIEdGUF9LRVJORUwpOworCXJldHZhbCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXR2YWwpLCBHRlBfTk9GUyk7CiAJaWYgKCFyZXR2YWwpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGpvdXJuYWwgIgogCQkgICAgICJoYW5kbGUhXG4iKTsKQEAgLTg3MCw5ICs4NzAsMTEgQEAKIAkJaWYgKHBfYmxvY2tzID4gQ09OQ1VSUkVOVF9KT1VSTkFMX0ZJTEwpCiAJCQlwX2Jsb2NrcyA9IENPTkNVUlJFTlRfSk9VUk5BTF9GSUxMOwogCisJCS8qIFdlIGFyZSByZWFkaW5nIGpvdXJuYWwgZGF0YSB3aGljaCBzaG91bGQgbm90CisJCSAqIGJlIHB1dCBpbiB0aGUgdXB0b2RhdGUgY2FjaGUgKi8KIAkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAogCQkJCQkgICBwX2Jsa25vLCBwX2Jsb2NrcywgYmhzLCAwLAotCQkJCQkgICBpbm9kZSk7CisJCQkJCSAgIE5VTEwpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtOTgyLDcgKzk4NCw3IEBACiB7CiAJc3RydWN0IG9jZnMyX2xhX3JlY292ZXJ5X2l0ZW0gKml0ZW07CiAKLQlpdGVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2xhX3JlY292ZXJ5X2l0ZW0pLCBHRlBfS0VSTkVMKTsKKwlpdGVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2xhX3JlY292ZXJ5X2l0ZW0pLCBHRlBfTk9GUyk7CiAJaWYgKCFpdGVtKSB7CiAJCS8qIFRob3VnaCB3ZSB3aXNoIHRvIGF2b2lkIGl0LCB3ZSBhcmUgaW4gZmFjdCBzYWZlIGluCiAJCSAqIHNraXBwaW5nIGxvY2FsIGFsbG9jIGNsZWFudXAgYXMgZnNjay5vY2ZzMiBpcyBtb3JlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi91cHRvZGF0ZS5jIGIvZnMvb2NmczIvdXB0b2RhdGUuYwppbmRleCAwNGE2ODRkLi5iOGEwMGE3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi91cHRvZGF0ZS5jCisrKyBiL2ZzL29jZnMyL3VwdG9kYXRlLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrLCBleHBhbmRfdHJlZSk7CiAKLQluZXcgPSBrbWVtX2NhY2hlX2FsbG9jKG9jZnMyX3VwdG9kYXRlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJbmV3ID0ga21lbV9jYWNoZV9hbGxvYyhvY2ZzMl91cHRvZGF0ZV9jYWNoZXAsIEdGUF9OT0ZTKTsKIAlpZiAoIW5ldykgewogCQltbG9nX2Vycm5vKC1FTk9NRU0pOwogCQlyZXR1cm47CkBAIC0zNDksNyArMzQ5LDcgQEAKIAkJICogaGFzIG5vIHdheSBvZiB0cmFja2luZyB0aGF0LiAqLwogCQlmb3IoaSA9IDA7IGkgPCBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVk7IGkrKykgewogCQkJdHJlZVtpXSA9IGttZW1fY2FjaGVfYWxsb2Mob2NmczJfdXB0b2RhdGVfY2FjaGVwLAotCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCQkJCQkgICBHRlBfTk9GUyk7CiAJCQlpZiAoIXRyZWVbaV0pIHsKIAkJCQltbG9nX2Vycm5vKC1FTk9NRU0pOwogCQkJCWdvdG8gb3V0X2ZyZWU7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi92b3RlLmMgYi9mcy9vY2ZzMi92b3RlLmMKaW5kZXggNTMwNDlhMi4uZWU0Mjc2NSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvdm90ZS5jCisrKyBiL2ZzL29jZnMyL3ZvdGUuYwpAQCAtNTg2LDcgKzU4Niw3IEBACiB7CiAJc3RydWN0IG9jZnMyX25ldF93YWl0X2N0eHQgKnc7CiAKLQl3ID0ga2NhbGxvYygxLCBzaXplb2YoKncpLCBHRlBfS0VSTkVMKTsKKwl3ID0ga2NhbGxvYygxLCBzaXplb2YoKncpLCBHRlBfTk9GUyk7CiAJaWYgKCF3KSB7CiAJCW1sb2dfZXJybm8oLUVOT01FTSk7CiAJCWdvdG8gYmFpbDsKQEAgLTc0OSw3ICs3NDksNyBAQAogCiAJQlVHX09OKCFvY2ZzMl9pc192YWxpZF92b3RlX3JlcXVlc3QodHlwZSkpOwogCi0JcmVxdWVzdCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJcmVxdWVzdCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX05PRlMpOwogCWlmICghcmVxdWVzdCkgewogCQltbG9nX2Vycm5vKC1FTk9NRU0pOwogCX0gZWxzZSB7CkBAIC0xMTI5LDcgKzExMjksNyBAQAogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gZGF0YTsKIAlzdHJ1Y3Qgb2NmczJfdm90ZV93b3JrICp3b3JrOwogCi0Jd29yayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl92b3RlX3dvcmspLCBHRlBfS0VSTkVMKTsKKwl3b3JrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX3ZvdGVfd29yayksIEdGUF9OT0ZTKTsKIAlpZiAoIXdvcmspIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IGMzMmM4OWQuLjMxN2I3YzcgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTMzMSw3ICszMzEsMTAgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19mdHJ1bmNhdGUodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKIHsKLQlyZXR1cm4gZG9fc3lzX2Z0cnVuY2F0ZShmZCwgbGVuZ3RoLCAxKTsKKwlsb25nIHJldCA9IGRvX3N5c19mdHJ1bmNhdGUoZmQsIGxlbmd0aCwgMSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBMRlMgdmVyc2lvbnMgb2YgdHJ1bmNhdGUgYXJlIG9ubHkgbmVlZGVkIG9uIDMyIGJpdCBtYWNoaW5lcyAqLwpAQCAtMzQzLDcgKzM0NiwxMCBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzX2Z0cnVuY2F0ZTY0KHVuc2lnbmVkIGludCBmZCwgbG9mZl90IGxlbmd0aCkKIHsKLQlyZXR1cm4gZG9fc3lzX2Z0cnVuY2F0ZShmZCwgbGVuZ3RoLCAwKTsKKwlsb25nIHJldCA9IGRvX3N5c19mdHJ1bmNhdGUoZmQsIGxlbmd0aCwgMCk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmCiAKQEAgLTEwOTMsMjIgKzEwOTksMzEgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19vcGVuKGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKIHsKKwlsb25nIHJldDsKKwogCWlmIChmb3JjZV9vX2xhcmdlZmlsZSgpKQogCQlmbGFncyB8PSBPX0xBUkdFRklMRTsKIAotCXJldHVybiBkb19zeXNfb3BlbihBVF9GRENXRCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKwlyZXQgPSBkb19zeXNfb3BlbihBVF9GRENXRCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeXNfb3Blbik7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfb3BlbmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IGZsYWdzLAogCQkJICAgaW50IG1vZGUpCiB7CisJbG9uZyByZXQ7CisKIAlpZiAoZm9yY2Vfb19sYXJnZWZpbGUoKSkKIAkJZmxhZ3MgfD0gT19MQVJHRUZJTEU7CiAKLQlyZXR1cm4gZG9fc3lzX29wZW4oZGZkLCBmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOworCXJldCA9IGRvX3N5c19vcGVuKGRmZCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzeXNfb3BlbmF0KTsKIAogI2lmbmRlZiBfX2FscGhhX18KIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IGFmMGNiNGIuLjdlZjFmMDkgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTMzMSw3ICszMzEsOSBAQAogCWRldmZzX3JlbW92ZSgiJXMvcGFydCVkIiwgZGlzay0+ZGV2ZnNfbmFtZSwgcGFydCk7CiAJaWYgKHAtPmhvbGRlcl9kaXIpCiAJCWtvYmplY3RfdW5yZWdpc3RlcihwLT5ob2xkZXJfZGlyKTsKLQlrb2JqZWN0X3VucmVnaXN0ZXIoJnAtPmtvYmopOworCWtvYmplY3RfdWV2ZW50KCZwLT5rb2JqLCBLT0JKX1JFTU9WRSk7CisJa29iamVjdF9kZWwoJnAtPmtvYmopOworCWtvYmplY3RfcHV0KCZwLT5rb2JqKTsKIH0KIAogdm9pZCBhZGRfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBpbnQgcGFydCwgc2VjdG9yX3Qgc3RhcnQsIHNlY3Rvcl90IGxlbikKQEAgLTM1Nyw3ICszNTksMTAgQEAKIAkJc25wcmludGYocC0+a29iai5uYW1lLEtPQkpfTkFNRV9MRU4sIiVzJWQiLGRpc2stPmtvYmoubmFtZSxwYXJ0KTsKIAlwLT5rb2JqLnBhcmVudCA9ICZkaXNrLT5rb2JqOwogCXAtPmtvYmoua3R5cGUgPSAma3R5cGVfcGFydDsKLQlrb2JqZWN0X3JlZ2lzdGVyKCZwLT5rb2JqKTsKKwlrb2JqZWN0X2luaXQoJnAtPmtvYmopOworCWtvYmplY3RfYWRkKCZwLT5rb2JqKTsKKwlpZiAoIWRpc2stPnBhcnRfdWV2ZW50X3N1cHByZXNzKQorCQlrb2JqZWN0X3VldmVudCgmcC0+a29iaiwgS09CSl9BREQpOwogCXBhcnRpdGlvbl9zeXNmc19hZGRfc3ViZGlyKHApOwogCWRpc2stPnBhcnRbcGFydC0xXSA9IHA7CiB9CkBAIC0zNjcsNiArMzcyLDcgQEAKIAljaGFyICpuYW1lOwogCXN0YXRpYyBjaGFyICpibG9ja19zdHIgPSAiYmxvY2s6IjsKIAlpbnQgc2l6ZTsKKwljaGFyICpzOwogCiAJc2l6ZSA9IHN0cmxlbihibG9ja19zdHIpICsgc3RybGVuKGRpc2stPmRpc2tfbmFtZSkgKyAxOwogCW5hbWUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwpAQCAtMzc0LDYgKzM4MCwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAlzdHJjcHkobmFtZSwgYmxvY2tfc3RyKTsKIAlzdHJjYXQobmFtZSwgZGlzay0+ZGlza19uYW1lKTsKKwkvKiBld3d3Li4uIHNvbWUgb2YgdGhlc2UgYnVnZ2VycyBoYXZlIC8gaW4gbmFtZS4uLiAqLworCXMgPSBzdHJjaHIobmFtZSwgJy8nKTsKKwlpZiAocykKKwkJKnMgPSAnISc7CiAJcmV0dXJuIG5hbWU7CiB9CiAKQEAgLTM5NSw2ICs0MDUsOCBAQAogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJY2hhciAqczsKKwlpbnQgaTsKKwlzdHJ1Y3QgaGRfc3RydWN0ICpwOwogCWludCBlcnI7CiAKIAlzdHJsY3B5KGRpc2stPmtvYmoubmFtZSxkaXNrLT5kaXNrX25hbWUsS09CSl9OQU1FX0xFTik7CkBAIC00MDYsMTMgKzQxOCwxMiBAQAogCQlyZXR1cm47CiAJZGlza19zeXNmc19zeW1saW5rcyhkaXNrKTsKICAJZGlza19zeXNmc19hZGRfc3ViZGlycyhkaXNrKTsKLQlrb2JqZWN0X3VldmVudCgmZGlzay0+a29iaiwgS09CSl9BREQpOwogCiAJLyogTm8gbWlub3JzIHRvIHVzZSBmb3IgcGFydGl0aW9ucyAqLwogCWlmIChkaXNrLT5taW5vcnMgPT0gMSkgewogCQlpZiAoZGlzay0+ZGV2ZnNfbmFtZVswXSAhPSAnXDAnKQogCQkJZGV2ZnNfYWRkX2Rpc2soZGlzayk7Ci0JCXJldHVybjsKKwkJZ290byBleGl0OwogCX0KIAogCS8qIGFsd2F5cyBhZGQgaGFuZGxlIGZvciB0aGUgd2hvbGUgZGlzayAqLwpAQCAtNDIwLDE2ICs0MzEsMzIgQEAKIAogCS8qIE5vIHN1Y2ggZGV2aWNlIChlLmcuLCBtZWRpYSB3ZXJlIGp1c3QgcmVtb3ZlZCkgKi8KIAlpZiAoIWdldF9jYXBhY2l0eShkaXNrKSkKLQkJcmV0dXJuOworCQlnb3RvIGV4aXQ7CiAKIAliZGV2ID0gYmRnZXRfZGlzayhkaXNrLCAwKTsKIAlpZiAoIWJkZXYpCi0JCXJldHVybjsKKwkJZ290byBleGl0OwogCisJLyogc2NhbiBwYXJ0aXRpb24gdGFibGUsIGJ1dCBzdXBwcmVzcyB1ZXZlbnRzICovCiAJYmRldi0+YmRfaW52YWxpZGF0ZWQgPSAxOwotCWlmIChibGtkZXZfZ2V0KGJkZXYsIEZNT0RFX1JFQUQsIDApIDwgMCkKLQkJcmV0dXJuOworCWRpc2stPnBhcnRfdWV2ZW50X3N1cHByZXNzID0gMTsKKwllcnIgPSBibGtkZXZfZ2V0KGJkZXYsIEZNT0RFX1JFQUQsIDApOworCWRpc2stPnBhcnRfdWV2ZW50X3N1cHByZXNzID0gMDsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBleGl0OwogCWJsa2Rldl9wdXQoYmRldik7CisKK2V4aXQ6CisJLyogYW5ub3VuY2UgZGlzayBhZnRlciBwb3NzaWJsZSBwYXJ0aXRpb25zIGFyZSBhbHJlYWR5IGNyZWF0ZWQgKi8KKwlrb2JqZWN0X3VldmVudCgmZGlzay0+a29iaiwgS09CSl9BREQpOworCisJLyogYW5ub3VuY2UgcG9zc2libGUgcGFydGl0aW9ucyAqLworCWZvciAoaSA9IDE7IGkgPCBkaXNrLT5taW5vcnM7IGkrKykgeworCQlwID0gZGlzay0+cGFydFtpLTFdOworCQlpZiAoIXAgfHwgIXAtPm5yX3NlY3RzKQorCQkJY29udGludWU7CisJCWtvYmplY3RfdWV2ZW50KCZwLT5rb2JqLCBLT0JKX0FERCk7CisJfQogfQogCiBpbnQgcmVzY2FuX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCkBAIC01MDYsNiArNTMzLDcgQEAKIAogCWRldmZzX3JlbW92ZV9kaXNrKGRpc2spOwogCisJa29iamVjdF91ZXZlbnQoJmRpc2stPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlpZiAoZGlzay0+aG9sZGVyX2RpcikKIAkJa29iamVjdF91bnJlZ2lzdGVyKGRpc2stPmhvbGRlcl9kaXIpOwogCWlmIChkaXNrLT5zbGF2ZV9kaXIpCkBAIC01MTgsNyArNTQ2LDcgQEAKIAkJCWtmcmVlKGRpc2tfbmFtZSk7CiAJCX0KIAkJcHV0X2RldmljZShkaXNrLT5kcml2ZXJmc19kZXYpOworCQlkaXNrLT5kcml2ZXJmc19kZXYgPSBOVUxMOwogCX0KLQlrb2JqZWN0X3VldmVudCgmZGlzay0+a29iaiwgS09CSl9SRU1PVkUpOwogCWtvYmplY3RfZGVsKCZkaXNrLT5rb2JqKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCAxMDlhMTAyLi41YWNkODk1IDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC0zNiw3ICszNiw3IEBACiAgKi8KIAogLyogRHJvcCB0aGUgaW5vZGUgc2VtYXBob3JlIGFuZCB3YWl0IGZvciBhIHBpcGUgZXZlbnQsIGF0b21pY2FsbHkgKi8KLXZvaWQgcGlwZV93YWl0KHN0cnVjdCBpbm9kZSAqIGlub2RlKQordm9pZCBwaXBlX3dhaXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIApAQCAtNDQsMTUgKzQ0LDE5IEBACiAJICogUGlwZXMgYXJlIHN5c3RlbS1sb2NhbCByZXNvdXJjZXMsIHNvIHNsZWVwaW5nIG9uIHRoZW0KIAkgKiBpcyBjb25zaWRlcmVkIGEgbm9uaW50ZXJhY3RpdmUgd2FpdDoKIAkgKi8KLQlwcmVwYXJlX3RvX3dhaXQoUElQRV9XQUlUKCppbm9kZSksICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEV8VEFTS19OT05JTlRFUkFDVElWRSk7Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJcHJlcGFyZV90b193YWl0KCZwaXBlLT53YWl0LCAmd2FpdCwKKwkJCVRBU0tfSU5URVJSVVBUSUJMRSB8IFRBU0tfTk9OSU5URVJBQ1RJVkUpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfdW5sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAJc2NoZWR1bGUoKTsKLQlmaW5pc2hfd2FpdChQSVBFX1dBSVQoKmlub2RlKSwgJndhaXQpOwotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwlmaW5pc2hfd2FpdCgmcGlwZS0+d2FpdCwgJndhaXQpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfbG9jaygmcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50Ci1waXBlX2lvdl9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbGVuKQorcGlwZV9pb3ZfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCWludCBhdG9taWMpCiB7CiAJdW5zaWduZWQgbG9uZyBjb3B5OwogCkBAIC02MSw4ICs2NSwxMyBAQAogCQkJaW92Kys7CiAJCWNvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4sIGlvdi0+aW92X2xlbik7CiAKLQkJaWYgKGNvcHlfZnJvbV91c2VyKHRvLCBpb3YtPmlvdl9iYXNlLCBjb3B5KSkKLQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoYXRvbWljKSB7CisJCQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh0bywgaW92LT5pb3ZfYmFzZSwgY29weSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIodG8sIGlvdi0+aW92X2Jhc2UsIGNvcHkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9CiAJCXRvICs9IGNvcHk7CiAJCWxlbiAtPSBjb3B5OwogCQlpb3YtPmlvdl9iYXNlICs9IGNvcHk7CkBAIC03Miw3ICs4MSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXBpcGVfaW92X2NvcHlfdG9fdXNlcihzdHJ1Y3QgaW92ZWMgKmlvdiwgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBsZW4pCitwaXBlX2lvdl9jb3B5X3RvX3VzZXIoc3RydWN0IGlvdmVjICppb3YsIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkgICAgICBpbnQgYXRvbWljKQogewogCXVuc2lnbmVkIGxvbmcgY29weTsKIApAQCAtODEsOCArOTEsMTMgQEAKIAkJCWlvdisrOwogCQljb3B5ID0gbWluX3QodW5zaWduZWQgbG9uZywgbGVuLCBpb3YtPmlvdl9sZW4pOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoaW92LT5pb3ZfYmFzZSwgZnJvbSwgY29weSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGF0b21pYykgeworCQkJaWYgKF9fY29weV90b191c2VyX2luYXRvbWljKGlvdi0+aW92X2Jhc2UsIGZyb20sIGNvcHkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9IGVsc2UgeworCQkJaWYgKGNvcHlfdG9fdXNlcihpb3YtPmlvdl9iYXNlLCBmcm9tLCBjb3B5KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQogCQlmcm9tICs9IGNvcHk7CiAJCWxlbiAtPSBjb3B5OwogCQlpb3YtPmlvdl9iYXNlICs9IGNvcHk7CkBAIC05MSw0OSArMTA2LDExNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCisvKgorICogQXR0ZW1wdCB0byBwcmUtZmF1bHQgaW4gdGhlIHVzZXIgbWVtb3J5LCBzbyB3ZSBjYW4gdXNlIGF0b21pYyBjb3BpZXMuCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbm90IGZhdWx0ZWQgaW4uCisgKi8KK3N0YXRpYyBpbnQgaW92X2ZhdWx0X2luX3BhZ2VzX3dyaXRlKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl3aGlsZSAoIWlvdi0+aW92X2xlbikKKwkJaW92Kys7CisKKwl3aGlsZSAobGVuID4gMCkgeworCQl1bnNpZ25lZCBsb25nIHRoaXNfbGVuOworCisJCXRoaXNfbGVuID0gbWluX3QodW5zaWduZWQgbG9uZywgbGVuLCBpb3YtPmlvdl9sZW4pOworCQlpZiAoZmF1bHRfaW5fcGFnZXNfd3JpdGVhYmxlKGlvdi0+aW92X2Jhc2UsIHRoaXNfbGVuKSkKKwkJCWJyZWFrOworCisJCWxlbiAtPSB0aGlzX2xlbjsKKwkJaW92Kys7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIFByZS1mYXVsdCBpbiB0aGUgdXNlciBtZW1vcnksIHNvIHdlIGNhbiB1c2UgYXRvbWljIGNvcGllcy4KKyAqLworc3RhdGljIHZvaWQgaW92X2ZhdWx0X2luX3BhZ2VzX3JlYWQoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXdoaWxlICghaW92LT5pb3ZfbGVuKQorCQlpb3YrKzsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCXVuc2lnbmVkIGxvbmcgdGhpc19sZW47CisKKwkJdGhpc19sZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4sIGlvdi0+aW92X2xlbik7CisJCWZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKGlvdi0+aW92X2Jhc2UsIHRoaXNfbGVuKTsKKwkJbGVuIC09IHRoaXNfbGVuOworCQlpb3YrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFub25fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCSAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidWYtPnBhZ2U7CiAKIAkvKgogCSAqIElmIG5vYm9keSBlbHNlIHVzZXMgdGhpcyBwYWdlLCBhbmQgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEKIAkgKiB0ZW1wb3JhcnkgcGFnZSwgbGV0J3Mga2VlcCB0cmFjayBvZiBpdCBhcyBhIG9uZS1kZWVwCi0JICogYWxsb2NhdGlvbiBjYWNoZQorCSAqIGFsbG9jYXRpb24gY2FjaGUuIChPdGhlcndpc2UganVzdCByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gaXQpCiAJICovCi0JaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSAmJiAhaW5mby0+dG1wX3BhZ2UpIHsKLQkJaW5mby0+dG1wX3BhZ2UgPSBwYWdlOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBPdGhlcndpc2UganVzdCByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gaXQKLQkgKi8KLQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSAmJiAhcGlwZS0+dG1wX3BhZ2UpCisJCXBpcGUtPnRtcF9wYWdlID0gcGFnZTsKKwllbHNlCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgKmFub25fcGlwZV9idWZfbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3ZvaWQgKmdlbmVyaWNfcGlwZV9idWZfbWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiwgaW50IGF0b21pYykKIHsKKwlpZiAoYXRvbWljKSB7CisJCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19BVE9NSUM7CisJCXJldHVybiBrbWFwX2F0b21pYyhidWYtPnBhZ2UsIEtNX1VTRVIwKTsKKwl9CisKIAlyZXR1cm4ga21hcChidWYtPnBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3VubWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQordm9pZCBnZW5lcmljX3BpcGVfYnVmX3VubWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYsIHZvaWQgKm1hcF9kYXRhKQogewotCWt1bm1hcChidWYtPnBhZ2UpOworCWlmIChidWYtPmZsYWdzICYgUElQRV9CVUZfRkxBR19BVE9NSUMpIHsKKwkJYnVmLT5mbGFncyAmPSB+UElQRV9CVUZfRkxBR19BVE9NSUM7CisJCWt1bm1hcF9hdG9taWMobWFwX2RhdGEsIEtNX1VTRVIwKTsKKwl9IGVsc2UKKwkJa3VubWFwKGJ1Zi0+cGFnZSk7CiB9CiAKLXN0YXRpYyBpbnQgYW5vbl9waXBlX2J1Zl9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQoraW50IGdlbmVyaWNfcGlwZV9idWZfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCSAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewotCWJ1Zi0+c3RvbGVuID0gMTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1Zi0+cGFnZTsKKworCWlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpIHsKKwkJbG9ja19wYWdlKHBhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBnZW5lcmljX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3sKKwlwYWdlX2NhY2hlX2dldChidWYtPnBhZ2UpOworfQorCitpbnQgZ2VuZXJpY19waXBlX2J1Zl9waW4oc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBhbm9uX3BpcGVfYnVmX29wcyA9IHsKIAkuY2FuX21lcmdlID0gMSwKLQkubWFwID0gYW5vbl9waXBlX2J1Zl9tYXAsCi0JLnVubWFwID0gYW5vbl9waXBlX2J1Zl91bm1hcCwKKwkubWFwID0gZ2VuZXJpY19waXBlX2J1Zl9tYXAsCisJLnVubWFwID0gZ2VuZXJpY19waXBlX2J1Zl91bm1hcCwKKwkucGluID0gZ2VuZXJpY19waXBlX2J1Zl9waW4sCiAJLnJlbGVhc2UgPSBhbm9uX3BpcGVfYnVmX3JlbGVhc2UsCi0JLnN0ZWFsID0gYW5vbl9waXBlX2J1Zl9zdGVhbCwKKwkuc3RlYWwgPSBnZW5lcmljX3BpcGVfYnVmX3N0ZWFsLAorCS5nZXQgPSBnZW5lcmljX3BpcGVfYnVmX2dldCwKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xNDEsNyArMjIyLDcgQEAKIAkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCWludCBkb193YWtldXA7CiAJc3NpemVfdCByZXQ7CiAJc3RydWN0IGlvdmVjICppb3YgPSAoc3RydWN0IGlvdmVjICopX2lvdjsKQEAgLTE1NCwzMSArMjM1LDQzIEBACiAKIAlkb193YWtldXAgPSAwOwogCXJldCA9IDA7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWluZm8gPSBpbm9kZS0+aV9waXBlOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAlmb3IgKDs7KSB7Ci0JCWludCBidWZzID0gaW5mby0+bnJidWZzOworCQlpbnQgYnVmcyA9IHBpcGUtPm5yYnVmczsKIAkJaWYgKGJ1ZnMpIHsKLQkJCWludCBjdXJidWYgPSBpbmZvLT5jdXJidWY7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBjdXJidWY7CisJCQlpbnQgY3VyYnVmID0gcGlwZS0+Y3VyYnVmOworCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgY3VyYnVmOwogCQkJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wcyA9IGJ1Zi0+b3BzOwogCQkJdm9pZCAqYWRkcjsKIAkJCXNpemVfdCBjaGFycyA9IGJ1Zi0+bGVuOwotCQkJaW50IGVycm9yOworCQkJaW50IGVycm9yLCBhdG9taWM7CiAKIAkJCWlmIChjaGFycyA+IHRvdGFsX2xlbikKIAkJCQljaGFycyA9IHRvdGFsX2xlbjsKIAotCQkJYWRkciA9IG9wcy0+bWFwKGZpbHAsIGluZm8sIGJ1Zik7Ci0JCQlpZiAoSVNfRVJSKGFkZHIpKSB7CisJCQllcnJvciA9IG9wcy0+cGluKHBpcGUsIGJ1Zik7CisJCQlpZiAoZXJyb3IpIHsKIAkJCQlpZiAoIXJldCkKLQkJCQkJcmV0ID0gUFRSX0VSUihhZGRyKTsKKwkJCQkJZXJyb3IgPSByZXQ7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnJvciA9IHBpcGVfaW92X2NvcHlfdG9fdXNlcihpb3YsIGFkZHIgKyBidWYtPm9mZnNldCwgY2hhcnMpOwotCQkJb3BzLT51bm1hcChpbmZvLCBidWYpOworCisJCQlhdG9taWMgPSAhaW92X2ZhdWx0X2luX3BhZ2VzX3dyaXRlKGlvdiwgY2hhcnMpOworcmVkbzoKKwkJCWFkZHIgPSBvcHMtPm1hcChwaXBlLCBidWYsIGF0b21pYyk7CisJCQllcnJvciA9IHBpcGVfaW92X2NvcHlfdG9fdXNlcihpb3YsIGFkZHIgKyBidWYtPm9mZnNldCwgY2hhcnMsIGF0b21pYyk7CisJCQlvcHMtPnVubWFwKHBpcGUsIGJ1ZiwgYWRkcik7CiAJCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCQkJaWYgKCFyZXQpIHJldCA9IC1FRkFVTFQ7CisJCQkJLyoKKwkJCQkgKiBKdXN0IHJldHJ5IHdpdGggdGhlIHNsb3cgcGF0aCBpZiB3ZSBmYWlsZWQuCisJCQkJICovCisJCQkJaWYgKGF0b21pYykgeworCQkJCQlhdG9taWMgPSAwOworCQkJCQlnb3RvIHJlZG87CisJCQkJfQorCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSBlcnJvcjsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJldCArPSBjaGFyczsKQEAgLTE4NiwxMCArMjc5LDEwIEBACiAJCQlidWYtPmxlbiAtPSBjaGFyczsKIAkJCWlmICghYnVmLT5sZW4pIHsKIAkJCQlidWYtPm9wcyA9IE5VTEw7Ci0JCQkJb3BzLT5yZWxlYXNlKGluZm8sIGJ1Zik7CisJCQkJb3BzLT5yZWxlYXNlKHBpcGUsIGJ1Zik7CiAJCQkJY3VyYnVmID0gKGN1cmJ1ZiArIDEpICYgKFBJUEVfQlVGRkVSUy0xKTsKLQkJCQlpbmZvLT5jdXJidWYgPSBjdXJidWY7Ci0JCQkJaW5mby0+bnJidWZzID0gLS1idWZzOworCQkJCXBpcGUtPmN1cmJ1ZiA9IGN1cmJ1ZjsKKwkJCQlwaXBlLT5ucmJ1ZnMgPSAtLWJ1ZnM7CiAJCQkJZG9fd2FrZXVwID0gMTsKIAkJCX0KIAkJCXRvdGFsX2xlbiAtPSBjaGFyczsKQEAgLTE5OCw5ICsyOTEsOSBAQAogCQl9CiAJCWlmIChidWZzKQkvKiBNb3JlIHRvIGRvPyAqLwogCQkJY29udGludWU7Ci0JCWlmICghUElQRV9XUklURVJTKCppbm9kZSkpCisJCWlmICghcGlwZS0+d3JpdGVycykKIAkJCWJyZWFrOwotCQlpZiAoIVBJUEVfV0FJVElOR19XUklURVJTKCppbm9kZSkpIHsKKwkJaWYgKCFwaXBlLT53YWl0aW5nX3dyaXRlcnMpIHsKIAkJCS8qIHN5c2NhbGwgbWVyZ2luZzogVXN1YWxseSB3ZSBtdXN0IG5vdCBzbGVlcAogCQkJICogaWYgT19OT05CTE9DSyBpcyBzZXQsIG9yIGlmIHdlIGdvdCBzb21lIGRhdGEuCiAJCQkgKiBCdXQgaWYgYSB3cml0ZXIgc2xlZXBzIGluIGtlcm5lbCBzcGFjZSwgdGhlbgpAQCAtMjE0LDIwICszMDcsMjIgQEAKIAkJCX0KIAkJfQogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCWlmICghcmV0KSByZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoZG9fd2FrZXVwKSB7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhQSVBFX1dBSVQoKmlub2RlKSk7Ci0gCQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJnBpcGUtPndhaXQpOworIAkJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAkJfQotCQlwaXBlX3dhaXQoaW5vZGUpOworCQlwaXBlX3dhaXQocGlwZSk7CiAJfQotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCS8qIFNpZ25hbCB3cml0ZXJzIGFzeW5jaHJvbm91c2x5IHRoYXQgdGhlcmUgaXMgbW9yZSByb29tLiAgKi8KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCS8qIFNpZ25hbCB3cml0ZXJzIGFzeW5jaHJvbm91c2x5IHRoYXQgdGhlcmUgaXMgbW9yZSByb29tLiAqLwogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJfQogCWlmIChyZXQgPiAwKQogCQlmaWxlX2FjY2Vzc2VkKGZpbHApOwpAQCAtMjM4LDYgKzMzMyw3IEBACiBwaXBlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9IGJ1ZiwgLmlvdl9sZW4gPSBjb3VudCB9OworCiAJcmV0dXJuIHBpcGVfcmVhZHYoZmlscCwgJmlvdiwgMSwgcHBvcyk7CiB9CiAKQEAgLTI0Niw3ICszNDIsNyBAQAogCSAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCXNzaXplX3QgcmV0OwogCWludCBkb193YWtldXA7CiAJc3RydWN0IGlvdmVjICppb3YgPSAoc3RydWN0IGlvdmVjICopX2lvdjsKQEAgLTI2MCwxMCArMzU2LDEwIEBACiAKIAlkb193YWtldXAgPSAwOwogCXJldCA9IDA7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWluZm8gPSBpbm9kZS0+aV9waXBlOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAotCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsKKwlpZiAoIXBpcGUtPnJlYWRlcnMpIHsKIAkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCXJldCA9IC1FUElQRTsKIAkJZ290byBvdXQ7CkBAIC0yNzEsMjcgKzM2NywzNiBAQAogCiAJLyogV2UgdHJ5IHRvIG1lcmdlIHNtYWxsIHdyaXRlcyAqLwogCWNoYXJzID0gdG90YWxfbGVuICYgKFBBR0VfU0laRS0xKTsgLyogc2l6ZSBvZiB0aGUgbGFzdCBidWZmZXIgKi8KLQlpZiAoaW5mby0+bnJidWZzICYmIGNoYXJzICE9IDApIHsKLQkJaW50IGxhc3RidWYgPSAoaW5mby0+Y3VyYnVmICsgaW5mby0+bnJidWZzIC0gMSkgJiAoUElQRV9CVUZGRVJTLTEpOwotCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBsYXN0YnVmOworCWlmIChwaXBlLT5ucmJ1ZnMgJiYgY2hhcnMgIT0gMCkgeworCQlpbnQgbGFzdGJ1ZiA9IChwaXBlLT5jdXJidWYgKyBwaXBlLT5ucmJ1ZnMgLSAxKSAmCisJCQkJCQkJKFBJUEVfQlVGRkVSUy0xKTsKKwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgbGFzdGJ1ZjsKIAkJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wcyA9IGJ1Zi0+b3BzOwogCQlpbnQgb2Zmc2V0ID0gYnVmLT5vZmZzZXQgKyBidWYtPmxlbjsKLQkJaWYgKG9wcy0+Y2FuX21lcmdlICYmIG9mZnNldCArIGNoYXJzIDw9IFBBR0VfU0laRSkgewotCQkJdm9pZCAqYWRkcjsKLQkJCWludCBlcnJvcjsKIAotCQkJYWRkciA9IG9wcy0+bWFwKGZpbHAsIGluZm8sIGJ1Zik7Ci0JCQlpZiAoSVNfRVJSKGFkZHIpKSB7Ci0JCQkJZXJyb3IgPSBQVFJfRVJSKGFkZHIpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJZXJyb3IgPSBwaXBlX2lvdl9jb3B5X2Zyb21fdXNlcihvZmZzZXQgKyBhZGRyLCBpb3YsCi0JCQkJCQkJY2hhcnMpOwotCQkJb3BzLT51bm1hcChpbmZvLCBidWYpOwotCQkJcmV0ID0gZXJyb3I7Ci0JCQlkb193YWtldXAgPSAxOworCQlpZiAob3BzLT5jYW5fbWVyZ2UgJiYgb2Zmc2V0ICsgY2hhcnMgPD0gUEFHRV9TSVpFKSB7CisJCQlpbnQgZXJyb3IsIGF0b21pYyA9IDE7CisJCQl2b2lkICphZGRyOworCisJCQllcnJvciA9IG9wcy0+cGluKHBpcGUsIGJ1Zik7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBvdXQ7CisKKwkJCWlvdl9mYXVsdF9pbl9wYWdlc19yZWFkKGlvdiwgY2hhcnMpOworcmVkbzE6CisJCQlhZGRyID0gb3BzLT5tYXAocGlwZSwgYnVmLCBhdG9taWMpOworCQkJZXJyb3IgPSBwaXBlX2lvdl9jb3B5X2Zyb21fdXNlcihvZmZzZXQgKyBhZGRyLCBpb3YsCisJCQkJCQkJY2hhcnMsIGF0b21pYyk7CisJCQlvcHMtPnVubWFwKHBpcGUsIGJ1ZiwgYWRkcik7CisJCQlyZXQgPSBlcnJvcjsKKwkJCWRvX3dha2V1cCA9IDE7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlpZiAoYXRvbWljKSB7CisJCQkJCWF0b21pYyA9IDA7CisJCQkJCWdvdG8gcmVkbzE7CisJCQkJfQorCQkJCWdvdG8gb3V0OworCQkJfQogCQkJYnVmLT5sZW4gKz0gY2hhcnM7CiAJCQl0b3RhbF9sZW4gLT0gY2hhcnM7CiAJCQlyZXQgPSBjaGFyczsKQEAgLTMwMiwxNyArNDA3LDIwIEBACiAKIAlmb3IgKDs7KSB7CiAJCWludCBidWZzOwotCQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKSB7CisKKwkJaWYgKCFwaXBlLT5yZWFkZXJzKSB7CiAJCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKLQkJCWlmICghcmV0KSByZXQgPSAtRVBJUEU7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVBJUEU7CiAJCQlicmVhazsKIAkJfQotCQlidWZzID0gaW5mby0+bnJidWZzOworCQlidWZzID0gcGlwZS0+bnJidWZzOwogCQlpZiAoYnVmcyA8IFBJUEVfQlVGRkVSUykgewotCQkJaW50IG5ld2J1ZiA9IChpbmZvLT5jdXJidWYgKyBidWZzKSAmIChQSVBFX0JVRkZFUlMtMSk7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBuZXdidWY7Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGluZm8tPnRtcF9wYWdlOwotCQkJaW50IGVycm9yOworCQkJaW50IG5ld2J1ZiA9IChwaXBlLT5jdXJidWYgKyBidWZzKSAmIChQSVBFX0JVRkZFUlMtMSk7CisJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBuZXdidWY7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBpcGUtPnRtcF9wYWdlOworCQkJY2hhciAqc3JjOworCQkJaW50IGVycm9yLCBhdG9taWMgPSAxOwogCiAJCQlpZiAoIXBhZ2UpIHsKIAkJCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIpOwpAQCAtMzIwLDkgKzQyOCw5IEBACiAJCQkJCXJldCA9IHJldCA/IDogLUVOT01FTTsKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJCWluZm8tPnRtcF9wYWdlID0gcGFnZTsKKwkJCQlwaXBlLT50bXBfcGFnZSA9IHBhZ2U7CiAJCQl9Ci0JCQkvKiBBbHdheXMgd2FrZXVwLCBldmVuIGlmIHRoZSBjb3B5IGZhaWxzLiBPdGhlcndpc2UKKwkJCS8qIEFsd2F5cyB3YWtlIHVwLCBldmVuIGlmIHRoZSBjb3B5IGZhaWxzLiBPdGhlcndpc2UKIAkJCSAqIHdlIGxvY2sgdXAgKE9fTk9OQkxPQ0stKXJlYWRlcnMgdGhhdCBzbGVlcCBkdWUgdG8KIAkJCSAqIHN5c2NhbGwgbWVyZ2luZy4KIAkJCSAqIEZJWE1FISBJcyB0aGlzIHJlYWxseSB0cnVlPwpAQCAtMzMyLDEwICs0NDAsMjcgQEAKIAkJCWlmIChjaGFycyA+IHRvdGFsX2xlbikKIAkJCQljaGFycyA9IHRvdGFsX2xlbjsKIAotCQkJZXJyb3IgPSBwaXBlX2lvdl9jb3B5X2Zyb21fdXNlcihrbWFwKHBhZ2UpLCBpb3YsIGNoYXJzKTsKLQkJCWt1bm1hcChwYWdlKTsKKwkJCWlvdl9mYXVsdF9pbl9wYWdlc19yZWFkKGlvdiwgY2hhcnMpOworcmVkbzI6CisJCQlpZiAoYXRvbWljKQorCQkJCXNyYyA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJCWVsc2UKKwkJCQlzcmMgPSBrbWFwKHBhZ2UpOworCisJCQllcnJvciA9IHBpcGVfaW92X2NvcHlfZnJvbV91c2VyKHNyYywgaW92LCBjaGFycywKKwkJCQkJCQlhdG9taWMpOworCQkJaWYgKGF0b21pYykKKwkJCQlrdW5tYXBfYXRvbWljKHNyYywgS01fVVNFUjApOworCQkJZWxzZQorCQkJCWt1bm1hcChwYWdlKTsKKwogCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQkJCWlmICghcmV0KSByZXQgPSAtRUZBVUxUOworCQkJCWlmIChhdG9taWMpIHsKKwkJCQkJYXRvbWljID0gMDsKKwkJCQkJZ290byByZWRvMjsKKwkJCQl9CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IGVycm9yOwogCQkJCWJyZWFrOwogCQkJfQogCQkJcmV0ICs9IGNoYXJzOwpAQCAtMzQ1LDggKzQ3MCw4IEBACiAJCQlidWYtPm9wcyA9ICZhbm9uX3BpcGVfYnVmX29wczsKIAkJCWJ1Zi0+b2Zmc2V0ID0gMDsKIAkJCWJ1Zi0+bGVuID0gY2hhcnM7Ci0JCQlpbmZvLT5ucmJ1ZnMgPSArK2J1ZnM7Ci0JCQlpbmZvLT50bXBfcGFnZSA9IE5VTEw7CisJCQlwaXBlLT5ucmJ1ZnMgPSArK2J1ZnM7CisJCQlwaXBlLT50bXBfcGFnZSA9IE5VTEw7CiAKIAkJCXRvdGFsX2xlbiAtPSBjaGFyczsKIAkJCWlmICghdG90YWxfbGVuKQpAQCAtMzU1LDI3ICs0ODAsMjkgQEAKIAkJaWYgKGJ1ZnMgPCBQSVBFX0JVRkZFUlMpCiAJCQljb250aW51ZTsKIAkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQlpZiAoIXJldCkgcmV0ID0gLUVBR0FJTjsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IC1FQUdBSU47CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCWlmICghcmV0KSByZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoZG9fd2FrZXVwKSB7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCQlraWxsX2Zhc3luYyhQSVBFX0ZBU1lOQ19SRUFERVJTKCppbm9kZSksIFNJR0lPLCBQT0xMX0lOKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZwaXBlLT53YWl0KTsKKwkJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOwogCQkJZG9fd2FrZXVwID0gMDsKIAkJfQotCQlQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpKys7Ci0JCXBpcGVfd2FpdChpbm9kZSk7Ci0JCVBJUEVfV0FJVElOR19XUklURVJTKCppbm9kZSktLTsKKwkJcGlwZS0+d2FpdGluZ193cml0ZXJzKys7CisJCXBpcGVfd2FpdChwaXBlKTsKKwkJcGlwZS0+d2FpdGluZ193cml0ZXJzLS07CiAJfQogb3V0OgotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9JTik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CisJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOwogCX0KIAlpZiAocmV0ID4gMCkKIAkJZmlsZV91cGRhdGVfdGltZShmaWxwKTsKQEAgLTM4Nyw2ICs1MTQsNyBAQAogCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9ICh2b2lkIF9fdXNlciAqKWJ1ZiwgLmlvdl9sZW4gPSBjb3VudCB9OworCiAJcmV0dXJuIHBpcGVfd3JpdGV2KGZpbHAsICZpb3YsIDEsIHBwb3MpOwogfQogCkBAIC0zOTcsNyArNTI1LDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWJhZF9waXBlX3coc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorYmFkX3BpcGVfdyhzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCSAgIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gLUVCQURGOwogfQpAQCAtNDA3LDIxICs1MzYsMjIgQEAKIAkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCWludCBjb3VudCwgYnVmLCBucmJ1ZnM7CiAKIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIEZJT05SRUFEOgotCQkJbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCQkJaW5mbyA9ICBpbm9kZS0+aV9waXBlOworCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkJcGlwZSA9IGlub2RlLT5pX3BpcGU7CiAJCQljb3VudCA9IDA7Ci0JCQlidWYgPSBpbmZvLT5jdXJidWY7Ci0JCQlucmJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7CisJCQlidWYgPSBwaXBlLT5jdXJidWY7CisJCQlucmJ1ZnMgPSBwaXBlLT5ucmJ1ZnM7CiAJCQl3aGlsZSAoLS1ucmJ1ZnMgPj0gMCkgewotCQkJCWNvdW50ICs9IGluZm8tPmJ1ZnNbYnVmXS5sZW47CisJCQkJY291bnQgKz0gcGlwZS0+YnVmc1tidWZdLmxlbjsKIAkJCQlidWYgPSAoYnVmKzEpICYgKFBJUEVfQlVGRkVSUy0xKTsKIAkJCX0KLQkJCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKIAkJCXJldHVybiBwdXRfdXNlcihjb3VudCwgKGludCBfX3VzZXIgKilhcmcpOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MzQsMTcgKzU2NCwxNyBAQAogewogCXVuc2lnbmVkIGludCBtYXNrOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvID0gaW5vZGUtPmlfcGlwZTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAlpbnQgbnJidWZzOwogCi0JcG9sbF93YWl0KGZpbHAsIFBJUEVfV0FJVCgqaW5vZGUpLCB3YWl0KTsKKwlwb2xsX3dhaXQoZmlscCwgJnBpcGUtPndhaXQsIHdhaXQpOwogCiAJLyogUmVhZGluZyBvbmx5IC0tIG5vIG5lZWQgZm9yIGFjcXVpcmluZyB0aGUgc2VtYXBob3JlLiAgKi8KLQlucmJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7CisJbnJidWZzID0gcGlwZS0+bnJidWZzOwogCW1hc2sgPSAwOwogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CiAJCW1hc2sgPSAobnJidWZzID4gMCkgPyBQT0xMSU4gfCBQT0xMUkROT1JNIDogMDsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSAmJiBmaWxwLT5mX3ZlcnNpb24gIT0gUElQRV9XQ09VTlRFUigqaW5vZGUpKQorCQlpZiAoIXBpcGUtPndyaXRlcnMgJiYgZmlscC0+Zl92ZXJzaW9uICE9IHBpcGUtPndfY291bnRlcikKIAkJCW1hc2sgfD0gUE9MTEhVUDsKIAl9CiAKQEAgLTQ1NCw3ICs1ODQsNyBAQAogCQkgKiBNb3N0IFVuaWNlcyBkbyBub3Qgc2V0IFBPTExFUlIgZm9yIEZJRk9zIGJ1dCBvbiBMaW51eCB0aGV5CiAJCSAqIGJlaGF2ZSBleGFjdGx5IGxpa2UgcGlwZXMgZm9yIHBvbGwoKS4KIAkJICovCi0JCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpCisJCWlmICghcGlwZS0+cmVhZGVycykKIAkJCW1hc2sgfD0gUE9MTEVSUjsKIAl9CiAKQEAgLTQ2NCwxNyArNTk0LDIxIEBACiBzdGF0aWMgaW50CiBwaXBlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRlY3IsIGludCBkZWN3KQogewotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQlQSVBFX1JFQURFUlMoKmlub2RlKSAtPSBkZWNyOwotCVBJUEVfV1JJVEVSUygqaW5vZGUpIC09IGRlY3c7Ci0JaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSAmJiAhUElQRV9XUklURVJTKCppbm9kZSkpIHsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXBpcGUgPSBpbm9kZS0+aV9waXBlOworCXBpcGUtPnJlYWRlcnMgLT0gZGVjcjsKKwlwaXBlLT53cml0ZXJzIC09IGRlY3c7CisKKwlpZiAoIXBpcGUtPnJlYWRlcnMgJiYgIXBpcGUtPndyaXRlcnMpIHsKIAkJZnJlZV9waXBlX2luZm8oaW5vZGUpOwogCX0gZWxzZSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfSU4pOwotCQlraWxsX2Zhc3luYyhQSVBFX0ZBU1lOQ19XUklURVJTKCppbm9kZSksIFNJR0lPLCBQT0xMX09VVCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CisJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOworCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJfQotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODUsOSArNjE5LDkgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldHZhbDsKIAotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpKTsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZpbm9kZS0+aV9waXBlLT5mYXN5bmNfcmVhZGVycyk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTUwMiw5ICs2MzYsOSBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmV0dmFsOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCBQSVBFX0ZBU1lOQ19XUklURVJTKCppbm9kZSkpOwotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmlub2RlLT5pX3BpcGUtPmZhc3luY193cml0ZXJzKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNTE3LDE2ICs2NTEsMTcgQEAKIHBpcGVfcmR3cl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAlpbnQgcmV0dmFsOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCBQSVBFX0ZBU1lOQ19SRUFERVJTKCppbm9kZSkpOworCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwogCiAJaWYgKHJldHZhbCA+PSAwKQotCQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpKTsKKwkJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZwaXBlLT5mYXN5bmNfd3JpdGVycyk7CiAKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNTY1LDkgKzcwMCw5IEBACiB7CiAJLyogV2UgY291bGQgaGF2ZSBwZXJoYXBzIHVzZWQgYXRvbWljX3QsIGJ1dCB0aGlzIGFuZCBmcmllbmRzCiAJICAgYmVsb3cgYXJlIHRoZSBvbmx5IHBsYWNlcy4gIFNvIGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aHdoaWxlLiAgKi8KLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JUElQRV9SRUFERVJTKCppbm9kZSkrKzsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NzUsOSArNzEwLDkgQEAKIHN0YXRpYyBpbnQKIHBpcGVfd3JpdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JUElQRV9XUklURVJTKCppbm9kZSkrKzsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01ODUsMTIgKzcyMCwxMiBAQAogc3RhdGljIGludAogcGlwZV9yZHdyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJUElQRV9SRUFERVJTKCppbm9kZSkrKzsKKwkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOwogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJUElQRV9XUklURVJTKCppbm9kZSkrKzsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzMsMzcgKzgwOCwzOCBAQAogCS5mYXN5bmMJCT0gcGlwZV9yZHdyX2Zhc3luYywKIH07CiAKLXZvaWQgZnJlZV9waXBlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSkKK3N0cnVjdCBwaXBlX2lub2RlX2luZm8gKiBhbGxvY19waXBlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvID0gaW5vZGUtPmlfcGlwZTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCi0JaW5vZGUtPmlfcGlwZSA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IFBJUEVfQlVGRkVSUzsgaSsrKSB7Ci0JCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gaW5mby0+YnVmcyArIGk7Ci0JCWlmIChidWYtPm9wcykKLQkJCWJ1Zi0+b3BzLT5yZWxlYXNlKGluZm8sIGJ1Zik7CisJcGlwZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwaXBlX2lub2RlX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAocGlwZSkgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwaXBlLT53YWl0KTsKKwkJcGlwZS0+cl9jb3VudGVyID0gcGlwZS0+d19jb3VudGVyID0gMTsKKwkJcGlwZS0+aW5vZGUgPSBpbm9kZTsKIAl9Ci0JaWYgKGluZm8tPnRtcF9wYWdlKQotCQlfX2ZyZWVfcGFnZShpbmZvLT50bXBfcGFnZSk7Ci0Ja2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gcGlwZTsKIH0KIAotc3RydWN0IGlub2RlKiBwaXBlX25ldyhzdHJ1Y3QgaW5vZGUqIGlub2RlKQordm9pZCBfX2ZyZWVfcGlwZV9pbmZvKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpCiB7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlpbnQgaTsKIAotCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKQotCQlnb3RvIGZhaWxfcGFnZTsKLQlpbm9kZS0+aV9waXBlID0gaW5mbzsKKwlmb3IgKGkgPSAwOyBpIDwgUElQRV9CVUZGRVJTOyBpKyspIHsKKwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgaTsKKwkJaWYgKGJ1Zi0+b3BzKQorCQkJYnVmLT5vcHMtPnJlbGVhc2UocGlwZSwgYnVmKTsKKwl9CisJaWYgKHBpcGUtPnRtcF9wYWdlKQorCQlfX2ZyZWVfcGFnZShwaXBlLT50bXBfcGFnZSk7CisJa2ZyZWUocGlwZSk7Cit9CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQlQSVBFX1JDT1VOVEVSKCppbm9kZSkgPSBQSVBFX1dDT1VOVEVSKCppbm9kZSkgPSAxOwotCi0JcmV0dXJuIGlub2RlOwotZmFpbF9wYWdlOgotCXJldHVybiBOVUxMOwordm9pZCBmcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCV9fZnJlZV9waXBlX2luZm8oaW5vZGUtPmlfcGlwZSk7CisJaW5vZGUtPmlfcGlwZSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnBpcGVfbW50IF9fcmVhZF9tb3N0bHk7CkBAIC03MTEsNiArODQ3LDcgQEAKIHsKIAlyZXR1cm4gMTsKIH0KKwogc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaXBlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlCT0gcGlwZWZzX2RlbGV0ZV9kZW50cnksCiB9OwpAQCAtNzE4LDEzICs4NTUsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKiBnZXRfcGlwZV9pbm9kZSh2b2lkKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUocGlwZV9tbnQtPm1udF9zYik7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAogCWlmICghaW5vZGUpCiAJCWdvdG8gZmFpbF9pbm9kZTsKIAotCWlmKCFwaXBlX25ldyhpbm9kZSkpCisJcGlwZSA9IGFsbG9jX3BpcGVfaW5mbyhpbm9kZSk7CisJaWYgKCFwaXBlKQogCQlnb3RvIGZhaWxfaXB1dDsKLQlQSVBFX1JFQURFUlMoKmlub2RlKSA9IFBJUEVfV1JJVEVSUygqaW5vZGUpID0gMTsKKwlpbm9kZS0+aV9waXBlID0gcGlwZTsKKworCXBpcGUtPnJlYWRlcnMgPSBwaXBlLT53cml0ZXJzID0gMTsKIAlpbm9kZS0+aV9mb3AgPSAmcmR3cl9waXBlX2ZvcHM7CiAKIAkvKgpAQCAtNzM5LDEwICs4ODAsMTIgQEAKIAlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKIAlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfU0laRTsKKwogCXJldHVybiBpbm9kZTsKIAogZmFpbF9pcHV0OgogCWlwdXQoaW5vZGUpOworCiBmYWlsX2lub2RlOgogCXJldHVybiBOVUxMOwogfQpAQCAtNzU1LDcgKzg5OCw3IEBACiAJc3RydWN0IGlub2RlICogaW5vZGU7CiAJc3RydWN0IGZpbGUgKmYxLCAqZjI7CiAJaW50IGVycm9yOwotCWludCBpLGo7CisJaW50IGksIGo7CiAKIAllcnJvciA9IC1FTkZJTEU7CiAJZjEgPSBnZXRfZW1wdHlfZmlscCgpOwpAQCAtNzg4LDYgKzkzMSw3IEBACiAJZGVudHJ5ID0gZF9hbGxvYyhwaXBlX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKIAlpZiAoIWRlbnRyeSkKIAkJZ290byBjbG9zZV9mMTJfaW5vZGVfaV9qOworCiAJZGVudHJ5LT5kX29wID0gJnBpcGVmc19kZW50cnlfb3BlcmF0aW9uczsKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAlmMS0+Zl92ZnNtbnQgPSBmMi0+Zl92ZnNtbnQgPSBtbnRnZXQobW50Z2V0KHBpcGVfbW50KSk7CkBAIC04MTEsNiArOTU1LDcgQEAKIAlmZF9pbnN0YWxsKGosIGYyKTsKIAlmZFswXSA9IGk7CiAJZmRbMV0gPSBqOworCiAJcmV0dXJuIDA7CiAKIGNsb3NlX2YxMl9pbm9kZV9pX2o6CkBAIC04MzUsOCArOTgwLDkgQEAKICAqIGRfbmFtZSAtIHBpcGU6IHdpbGwgZ28gbmljZWx5IGFuZCBraWxsIHRoZSBzcGVjaWFsLWNhc2luZyBpbiBwcm9jZnMuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqcGlwZWZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKLQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQorc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqCitwaXBlZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCisJICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIGdldF9zYl9wc2V1ZG8oZnNfdHlwZSwgInBpcGU6IiwgTlVMTCwgUElQRUZTX01BR0lDKTsKIH0KQEAgLTg1MCw2ICs5OTYsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9waXBlX2ZzKHZvaWQpCiB7CiAJaW50IGVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnBpcGVfZnNfdHlwZSk7CisKIAlpZiAoIWVycikgewogCQlwaXBlX21udCA9IGtlcm5fbW91bnQoJnBpcGVfZnNfdHlwZSk7CiAJCWlmIChJU19FUlIocGlwZV9tbnQpKSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDhmMWY0OWMuLjZjYzc3ZGMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0yOTcsMTYgKzI5NywyMCBAQAogCiAJZmlsZXMgPSBnZXRfZmlsZXNfc3RydWN0KHRhc2spOwogCWlmIChmaWxlcykgewotCQlyY3VfcmVhZF9sb2NrKCk7CisJCS8qCisJCSAqIFdlIGFyZSBub3QgdGFraW5nIGEgcmVmIHRvIHRoZSBmaWxlIHN0cnVjdHVyZSwgc28gd2UgbXVzdAorCQkgKiBob2xkIC0+ZmlsZV9sb2NrLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJZmlsZSA9IGZjaGVja19maWxlcyhmaWxlcywgZmQpOwogCQlpZiAoZmlsZSkgewogCQkJKm1udCA9IG1udGdldChmaWxlLT5mX3Zmc21udCk7CiAJCQkqZGVudHJ5ID0gZGdldChmaWxlLT5mX2RlbnRyeSk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJCXB1dF9maWxlc19zdHJ1Y3QoZmlsZXMpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJcHV0X2ZpbGVzX3N0cnVjdChmaWxlcyk7CiAJfQogCXJldHVybiAtRU5PRU5UOwpAQCAtNTM0LDEyICs1MzgsMTUgQEAKIAogLyogSWYgdGhlIHByb2Nlc3MgYmVpbmcgcmVhZCBpcyBzZXBhcmF0ZWQgYnkgY2hyb290IGZyb20gdGhlIHJlYWRpbmcgcHJvY2VzcywKICAqIGRvbid0IGxldCB0aGUgcmVhZGVyIGFjY2VzcyB0aGUgdGhyZWFkcy4KKyAqCisgKiBub3RlOiB0aGlzIGRvZXMgZHB1dChyb290KSBhbmQgbW50cHV0KHZmc21udCkgb24gZXhpdC4KICAqLwogc3RhdGljIGludCBwcm9jX2NoZWNrX2Nocm9vdChzdHJ1Y3QgZGVudHJ5ICpyb290LCBzdHJ1Y3QgdmZzbW91bnQgKnZmc21udCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZSwgKmJhc2U7CiAJc3RydWN0IHZmc21vdW50ICpvdXJfdmZzbW50LCAqbW50OwogCWludCByZXMgPSAwOworCiAJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJb3VyX3Zmc21udCA9IG1udGdldChjdXJyZW50LT5mcy0+cm9vdG1udCk7CiAJYmFzZSA9IGRnZXQoY3VycmVudC0+ZnMtPnJvb3QpOwpAQCAtNTQ5LDExICs1NTYsMTEgQEAKIAlkZSA9IHJvb3Q7CiAJbW50ID0gdmZzbW50OwogCi0Jd2hpbGUgKHZmc21udCAhPSBvdXJfdmZzbW50KSB7Ci0JCWlmICh2ZnNtbnQgPT0gdmZzbW50LT5tbnRfcGFyZW50KQorCXdoaWxlIChtbnQgIT0gb3VyX3Zmc21udCkgeworCQlpZiAobW50ID09IG1udC0+bW50X3BhcmVudCkKIAkJCWdvdG8gb3V0OwotCQlkZSA9IHZmc21udC0+bW50X21vdW50cG9pbnQ7Ci0JCXZmc21udCA9IHZmc21udC0+bW50X3BhcmVudDsKKwkJZGUgPSBtbnQtPm1udF9tb3VudHBvaW50OworCQltbnQgPSBtbnQtPm1udF9wYXJlbnQ7CiAJfQogCiAJaWYgKCFpc19zdWJkaXIoZGUsIGJhc2UpKQpAQCAtNTY0LDcgKzU3MSw3IEBACiAJZHB1dChiYXNlKTsKIAltbnRwdXQob3VyX3Zmc21udCk7CiAJZHB1dChyb290KTsKLQltbnRwdXQobW50KTsKKwltbnRwdXQodmZzbW50KTsKIAlyZXR1cm4gcmVzOwogb3V0OgogCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKQEAgLTE1MjAsNyArMTUyNywxMiBAQAogCWlmICghZmlsZXMpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlpbm9kZS0+aV9tb2RlID0gU19JRkxOSzsKLQlyY3VfcmVhZF9sb2NrKCk7CisKKwkvKgorCSAqIFdlIGFyZSBub3QgdGFraW5nIGEgcmVmIHRvIHRoZSBmaWxlIHN0cnVjdHVyZSwgc28gd2UgbXVzdAorCSAqIGhvbGQgLT5maWxlX2xvY2suCisJICovCisJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlmaWxlID0gZmNoZWNrX2ZpbGVzKGZpbGVzLCBmZCk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dF91bmxvY2syOwpAQCAtMTUyOCw3ICsxNTQwLDcgQEAKIAkJaW5vZGUtPmlfbW9kZSB8PSBTX0lSVVNSIHwgU19JWFVTUjsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgMikKIAkJaW5vZGUtPmlfbW9kZSB8PSBTX0lXVVNSIHwgU19JWFVTUjsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlzcGluX3VubG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJcHV0X2ZpbGVzX3N0cnVjdChmaWxlcyk7CiAJaW5vZGUtPmlfb3AgPSAmcHJvY19waWRfbGlua19pbm9kZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX3NpemUgPSA2NDsKQEAgLTE1MzgsNyArMTU1MCw3IEBACiAJcmV0dXJuIE5VTEw7CiAKIG91dF91bmxvY2syOgotCXJjdV9yZWFkX3VubG9jaygpOworCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlwdXRfZmlsZXNfc3RydWN0KGZpbGVzKTsKIG91dF91bmxvY2s6CiAJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfbWlzYy5jIGIvZnMvcHJvYy9wcm9jX21pc2MuYwppbmRleCBlZjVhMzMyLi41YzEwZWExIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2NfbWlzYy5jCisrKyBiL2ZzL3Byb2MvcHJvY19taXNjLmMKQEAgLTI0OSwxNTUgKzI0OSw2NCBAQAogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmY3B1aW5mb19vcCk7CiB9CiAKLWVudW0gZGV2aW5mb19zdGF0ZXMgewotCUNIUl9IRFIsCi0JQ0hSX0xJU1QsCi0JQkxLX0hEUiwKLQlCTEtfTElTVCwKLQlERVZJTkZPX0RPTkUKLX07Ci0KLXN0cnVjdCBkZXZpbmZvX3N0YXRlIHsKLQl2b2lkICpjaHJkZXY7Ci0Jdm9pZCAqYmxrZGV2OwotCXVuc2lnbmVkIGludCBudW1fcmVjb3JkczsKLQl1bnNpZ25lZCBpbnQgY3VyX3JlY29yZDsKLQllbnVtIGRldmluZm9fc3RhdGVzIHN0YXRlOwotfTsKLQotc3RhdGljIHZvaWQgKmRldmluZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgZGV2aW5mb19zdGF0ZSAqaW5mbyA9IGYtPnByaXZhdGU7Ci0KLQlpZiAoKnBvcykgewotCQlpZiAoKGluZm8pICYmICgqcG9zIDw9IGluZm8tPm51bV9yZWNvcmRzKSkKLQkJCXJldHVybiBpbmZvOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JZi0+cHJpdmF0ZSA9IGluZm87Ci0JaW5mby0+Y2hyZGV2ID0gYWNxdWlyZV9jaHJkZXZfbGlzdCgpOwotCWluZm8tPmJsa2RldiA9IGFjcXVpcmVfYmxrZGV2X2xpc3QoKTsKLQlpbmZvLT5zdGF0ZSA9IENIUl9IRFI7Ci0JaW5mby0+bnVtX3JlY29yZHMgPSBjb3VudF9jaHJkZXZfbGlzdCgpOwotCWluZm8tPm51bV9yZWNvcmRzICs9IGNvdW50X2Jsa2Rldl9saXN0KCk7Ci0JaW5mby0+bnVtX3JlY29yZHMgKz0gMjsgLyogQ2hhcmFjdGVyIGFuZCBCbG9jayBoZWFkZXJzICovCi0JKnBvcyA9IDE7Ci0JaW5mby0+Y3VyX3JlY29yZCA9ICpwb3M7Ci0JcmV0dXJuIGluZm87Ci19Ci0KLXN0YXRpYyB2b2lkICpkZXZpbmZvX25leHQoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlpbnQgaWR1bW15OwotCWNoYXIgKm5kdW1teTsKLQlzdHJ1Y3QgZGV2aW5mb19zdGF0ZSAqaW5mbyA9IGYtPnByaXZhdGU7Ci0KLQlzd2l0Y2ggKGluZm8tPnN0YXRlKSB7Ci0JCWNhc2UgQ0hSX0hEUjoKLQkJCWluZm8tPnN0YXRlID0gQ0hSX0xJU1Q7Ci0JCQkoKnBvcykrKzsKLQkJCS8qZmFsbHRocm91Z2gqLwotCQljYXNlIENIUl9MSVNUOgotCQkJaWYgKGdldF9jaHJkZXZfaW5mbyhpbmZvLT5jaHJkZXYsJmlkdW1teSwmbmR1bW15KSkgewotCQkJCS8qCi0JCQkJICogVGhlIGNoYXJhY3RlciBkZXYgbGlzdCBpcyBjb21wbGV0ZQotCQkJCSAqLwotCQkJCWluZm8tPnN0YXRlID0gQkxLX0hEUjsKLQkJCX0gZWxzZSB7Ci0JCQkJaW5mby0+Y2hyZGV2ID0gZ2V0X25leHRfY2hyZGV2KGluZm8tPmNocmRldik7Ci0JCQl9Ci0JCQkoKnBvcykrKzsKLQkJCWJyZWFrOwotCQljYXNlIEJMS19IRFI6Ci0JCQlpbmZvLT5zdGF0ZSA9IEJMS19MSVNUOwotCQkJKCpwb3MpKys7Ci0JCQkvKmZhbGx0aHJvdWdoKi8KLQkJY2FzZSBCTEtfTElTVDoKLQkJCWlmIChnZXRfYmxrZGV2X2luZm8oaW5mby0+YmxrZGV2LCZpZHVtbXksJm5kdW1teSkpIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBibG9jayBkZXYgbGlzdCBpcyBjb21wbGV0ZQotCQkJCSAqLwotCQkJCWluZm8tPnN0YXRlID0gREVWSU5GT19ET05FOwotCQkJfSBlbHNlIHsKLQkJCQlpbmZvLT5ibGtkZXYgPSBnZXRfbmV4dF9ibGtkZXYoaW5mby0+YmxrZGV2KTsKLQkJCX0KLQkJCSgqcG9zKSsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVWSU5GT19ET05FOgotCQkJKCpwb3MpKys7Ci0JCQlpbmZvLT5jdXJfcmVjb3JkID0gKnBvczsKLQkJCWluZm8gPSBOVUxMOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQl9Ci0JaWYgKGluZm8pCi0JCWluZm8tPmN1cl9yZWNvcmQgPSAqcG9zOwotCXJldHVybiBpbmZvOwotfQotCi1zdGF0aWMgdm9pZCBkZXZpbmZvX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQotewotCXN0cnVjdCBkZXZpbmZvX3N0YXRlICppbmZvID0gZi0+cHJpdmF0ZTsKLQotCWlmIChpbmZvKSB7Ci0JCXJlbGVhc2VfY2hyZGV2X2xpc3QoaW5mby0+Y2hyZGV2KTsKLQkJcmVsZWFzZV9ibGtkZXZfbGlzdChpbmZvLT5ibGtkZXYpOwotCQlmLT5wcml2YXRlID0gTlVMTDsKLQkJa2ZyZWUoaW5mbyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRldmluZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKmFyZykKLXsKLQlpbnQgbWFqb3I7Ci0JY2hhciAqbmFtZTsKLQlzdHJ1Y3QgZGV2aW5mb19zdGF0ZSAqaW5mbyA9IGYtPnByaXZhdGU7Ci0KLQlzd2l0Y2goaW5mby0+c3RhdGUpIHsKLQkJY2FzZSBDSFJfSERSOgotCQkJc2VxX3ByaW50ZihmLCJDaGFyYWN0ZXIgZGV2aWNlczpcbiIpOwotCQkJLyogZmFsbHRocm91Z2ggKi8KLQkJY2FzZSBDSFJfTElTVDoKLQkJCWlmICghZ2V0X2NocmRldl9pbmZvKGluZm8tPmNocmRldiwmbWFqb3IsJm5hbWUpKQotCQkJCXNlcV9wcmludGYoZiwiJTNkICVzXG4iLG1ham9yLG5hbWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQkxLX0hEUjoKLQkJCXNlcV9wcmludGYoZiwiXG5CbG9jayBkZXZpY2VzOlxuIik7Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwotCQljYXNlIEJMS19MSVNUOgotCQkJaWYgKCFnZXRfYmxrZGV2X2luZm8oaW5mby0+YmxrZGV2LCZtYWpvciwmbmFtZSkpCi0JCQkJc2VxX3ByaW50ZihmLCIlM2QgJXNcbiIsbWFqb3IsbmFtZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZXZpbmZvX29wID0gewotCS5zdGFydCAgPSBkZXZpbmZvX3N0YXJ0LAotCS5uZXh0ICAgPSBkZXZpbmZvX25leHQsCi0JLnN0b3AgICA9IGRldmluZm9fc3RvcCwKLQkuc2hvdyAgID0gZGV2aW5mb19zaG93LAotfTsKLQotc3RhdGljIGludCBkZXZpbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZkZXZpbmZvX29wKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19kZXZpbmZvX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gZGV2aW5mb19vcGVuLAorc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jcHVpbmZvX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gY3B1aW5mb19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NwdWluZm9fb3BlcmF0aW9ucyA9IHsKLQkub3BlbgkJPSBjcHVpbmZvX29wZW4sCitzdGF0aWMgaW50IGRldmluZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCit7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2OworCisJaWYgKGkgPCBDSFJERVZfTUFKT1JfSEFTSF9TSVpFKSB7CisJCWlmIChpID09IDApCisJCQlzZXFfcHJpbnRmKGYsICJDaGFyYWN0ZXIgZGV2aWNlczpcbiIpOworCQljaHJkZXZfc2hvdyhmLCBpKTsKKwl9IGVsc2UgeworCQlpIC09IENIUkRFVl9NQUpPUl9IQVNIX1NJWkU7CisJCWlmIChpID09IDApCisJCQlzZXFfcHJpbnRmKGYsICJcbkJsb2NrIGRldmljZXM6XG4iKTsKKwkJYmxrZGV2X3Nob3coZiwgaSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqZGV2aW5mb19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKQoreworCWlmICgqcG9zIDwgKEJMS0RFVl9NQUpPUl9IQVNIX1NJWkUgKyBDSFJERVZfTUFKT1JfSEFTSF9TSVpFKSkKKwkJcmV0dXJuIHBvczsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmRldmluZm9fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSgqcG9zKSsrOworCWlmICgqcG9zID49IChCTEtERVZfTUFKT1JfSEFTSF9TSVpFICsgQ0hSREVWX01BSk9SX0hBU0hfU0laRSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyB2b2lkIGRldmluZm9fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldmluZm9fb3BzID0geworCS5zdGFydCA9IGRldmluZm9fc3RhcnQsCisJLm5leHQgID0gZGV2aW5mb19uZXh0LAorCS5zdG9wICA9IGRldmluZm9fc3RvcCwKKwkuc2hvdyAgPSBkZXZpbmZvX3Nob3cKK307CisKK3N0YXRpYyBpbnQgZGV2aW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiBzZXFfb3BlbihmaWxwLCAmZGV2aW5mb19vcHMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2RldmluZm9fb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBkZXZpbmZvX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvdm1jb3JlLmMgYi9mcy9wcm9jL3ZtY29yZS5jCmluZGV4IDdlZmE3M2QuLjIwZDRiMjIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvdm1jb3JlLmMKKysrIGIvZnMvcHJvYy92bWNvcmUuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAJCQkJc2l6ZV90IGJ1ZmxlbiwgbG9mZl90ICpmcG9zKQogewogCXNzaXplX3QgYWNjID0gMCwgdG1wOwotCXNpemVfdCB0c3osIG5yX2J5dGVzOwotCXU2NCBzdGFydDsKKwlzaXplX3QgdHN6OworCXU2NCBzdGFydCwgbnJfYnl0ZXM7CiAJc3RydWN0IHZtY29yZSAqY3Vycl9tID0gTlVMTDsKIAogCWlmIChidWZsZW4gPT0gMCB8fCAqZnBvcyA+PSB2bWNvcmVfc2l6ZSkKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCA2MjU2Y2E4Li41YmMwZTkyIDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAkJZ290byBFaW52YWw7CiAKIAlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCWlmIChpbm9kZS0+aV9mbG9jayAmJiBNQU5EQVRPUllfTE9DSyhpbm9kZSkpIHsKKwlpZiAodW5saWtlbHkoaW5vZGUtPmlfZmxvY2sgJiYgTUFOREFUT1JZX0xPQ0soaW5vZGUpKSkgewogCQlpbnQgcmV0dmFsID0gbG9ja3NfbWFuZGF0b3J5X2FyZWEoCiAJCQlyZWFkX3dyaXRlID09IFJFQUQgPyBGTE9DS19WRVJJRllfUkVBRCA6IEZMT0NLX1ZFUklGWV9XUklURSwKIAkJCWlub2RlLCBmaWxlLCBwb3MsIGNvdW50KTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKaW5kZXggNThjNDE4Zi4uOTdhZTFiOSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKQEAgLTQwOCw4ICs0MDgsOSBAQAogCQlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxUKTsKIAkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKIAkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShpbm9kZSk7Ci0JCXJldCA9IGFjbCA/IDEgOiAwOwotCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCQlyZXQgPSAoYWNsICYmICFJU19FUlIoYWNsKSk7CisJCWlmIChyZXQpCisJCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IGIzYTNhMTMuLmE4MTA5YmEgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC0zMTAsMTEgKzMxMCwxMiBAQAogCQkJICAgZmRfc2V0IF9fdXNlciAqZXhwLCBzNjQgKnRpbWVvdXQpCiB7CiAJZmRfc2V0X2JpdHMgZmRzOwotCWNoYXIgKmJpdHM7Ci0JaW50IHJldCwgc2l6ZSwgbWF4X2Zkc2V0OworCXZvaWQgKmJpdHM7CisJaW50IHJldCwgbWF4X2Zkc2V0OworCXVuc2lnbmVkIGludCBzaXplOwogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CiAJLyogQWxsb2NhdGUgc21hbGwgYXJndW1lbnRzIG9uIHRoZSBzdGFjayB0byBzYXZlIG1lbW9yeSBhbmQgYmUgZmFzdGVyICovCi0JY2hhciBzdGFja19mZHNbU0VMRUNUX1NUQUNLX0FMTE9DXTsKKwlsb25nIHN0YWNrX2Zkc1tTRUxFQ1RfU1RBQ0tfQUxMT0Mvc2l6ZW9mKGxvbmcpXTsKIAogCXJldCA9IC1FSU5WQUw7CiAJaWYgKG4gPCAwKQpAQCAtMzMzLDIwICszMzQsMjEgQEAKIAkgKiBzaW5jZSB3ZSB1c2VkIGZkc2V0IHdlIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluIHVuaXRzIG9mCiAJICogbG9uZy13b3Jkcy4gCiAJICovCi0JcmV0ID0gLUVOT01FTTsKIAlzaXplID0gRkRTX0JZVEVTKG4pOwotCWlmICg2KnNpemUgPCBTRUxFQ1RfU1RBQ0tfQUxMT0MpCi0JCWJpdHMgPSBzdGFja19mZHM7Ci0JZWxzZQorCWJpdHMgPSBzdGFja19mZHM7CisJaWYgKHNpemUgPiBzaXplb2Yoc3RhY2tfZmRzKSAvIDYpIHsKKwkJLyogTm90IGVub3VnaCBzcGFjZSBpbiBvbi1zdGFjayBhcnJheTsgbXVzdCB1c2Uga21hbGxvYyAqLworCQlyZXQgPSAtRU5PTUVNOwogCQliaXRzID0ga21hbGxvYyg2ICogc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiaXRzKQotCQlnb3RvIG91dF9ub2ZkczsKLQlmZHMuaW4gICAgICA9ICh1bnNpZ25lZCBsb25nICopICBiaXRzOwotCWZkcy5vdXQgICAgID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAgIHNpemUpOwotCWZkcy5leCAgICAgID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAyKnNpemUpOwotCWZkcy5yZXNfaW4gID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAzKnNpemUpOwotCWZkcy5yZXNfb3V0ID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyA0KnNpemUpOwotCWZkcy5yZXNfZXggID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyA1KnNpemUpOworCQlpZiAoIWJpdHMpCisJCQlnb3RvIG91dF9ub2ZkczsKKwl9CisJZmRzLmluICAgICAgPSBiaXRzOworCWZkcy5vdXQgICAgID0gYml0cyArICAgc2l6ZTsKKwlmZHMuZXggICAgICA9IGJpdHMgKyAyKnNpemU7CisJZmRzLnJlc19pbiAgPSBiaXRzICsgMypzaXplOworCWZkcy5yZXNfb3V0ID0gYml0cyArIDQqc2l6ZTsKKwlmZHMucmVzX2V4ICA9IGJpdHMgKyA1KnNpemU7CiAKIAlpZiAoKHJldCA9IGdldF9mZF9zZXQobiwgaW5wLCBmZHMuaW4pKSB8fAogCSAgICAocmV0ID0gZ2V0X2ZkX3NldChuLCBvdXRwLCBmZHMub3V0KSkgfHwKQEAgLTYzOSw4ICs2NDEsMTAgQEAKICAJc3RydWN0IHBvbGxfbGlzdCAqd2FsazsKIAlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwogCWludCBtYXhfZmRzZXQ7Ci0JLyogQWxsb2NhdGUgc21hbGwgYXJndW1lbnRzIG9uIHRoZSBzdGFjayB0byBzYXZlIG1lbW9yeSBhbmQgYmUgZmFzdGVyICovCi0JY2hhciBzdGFja19wcHNbUE9MTF9TVEFDS19BTExPQ107CisJLyogQWxsb2NhdGUgc21hbGwgYXJndW1lbnRzIG9uIHRoZSBzdGFjayB0byBzYXZlIG1lbW9yeSBhbmQgYmUKKwkgICBmYXN0ZXIgLSB1c2UgbG9uZyB0byBtYWtlIHN1cmUgdGhlIGJ1ZmZlciBpcyBhbGlnbmVkIHByb3Blcmx5CisJICAgb24gNjQgYml0IGFyY2hzIHRvIGF2b2lkIHVuYWxpZ25lZCBhY2Nlc3MgKi8KKwlsb25nIHN0YWNrX3Bwc1tQT0xMX1NUQUNLX0FMTE9DL3NpemVvZihsb25nKV07CiAJc3RydWN0IHBvbGxfbGlzdCAqc3RhY2tfcHAgPSBOVUxMOwogCiAJLyogRG8gYSBzYW5pdHkgY2hlY2sgb24gbmZkcyAuLi4gKi8KZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2Rpci5jIGIvZnMvc21iZnMvZGlyLmMKaW5kZXggMzRjN2ExMS4uNzBkOWM1YSAxMDA2NDQKLS0tIGEvZnMvc21iZnMvZGlyLmMKKysrIGIvZnMvc21iZnMvZGlyLmMKQEAgLTQzNCw2ICs0MzQsMTEgQEAKIAlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gU01CX01BWE5BTUVMRU4pCiAJCWdvdG8gb3V0OwogCisJLyogRG8gbm90IGFsbG93IGxvb2t1cCBvZiBuYW1lcyB3aXRoIGJhY2tzbGFzaGVzIGluICovCisJZXJyb3IgPSAtRUlOVkFMOworCWlmIChtZW1jaHIoZGVudHJ5LT5kX25hbWUubmFtZSwgJ1xcJywgZGVudHJ5LT5kX25hbWUubGVuKSkKKwkJZ290byBvdXQ7CisKIAlsb2NrX2tlcm5lbCgpOwogCWVycm9yID0gc21iX3Byb2NfZ2V0YXR0cihkZW50cnksICZmaW5mbyk7CiAjaWZkZWYgU01CRlNfUEFSQU5PSUEKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2ZpbGUuYyBiL2ZzL3NtYmZzL2ZpbGUuYwppbmRleCBjNTZiZDk5Li5lZDlhMjRkIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9maWxlLmMKKysrIGIvZnMvc21iZnMvZmlsZS5jCkBAIC0xNzgsMTEgKzE3OCw5IEBACiAJdW5zaWduZWQgb2Zmc2V0ID0gUEFHRV9DQUNIRV9TSVpFOwogCWludCBlcnI7CiAKLQlpZiAoIW1hcHBpbmcpCi0JCUJVRygpOworCUJVR19PTighbWFwcGluZyk7CiAJaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCWlmICghaW5vZGUpCi0JCUJVRygpOworCUJVR19PTighaW5vZGUpOwogCiAJZW5kX2luZGV4ID0gaW5vZGUtPmlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9yZXF1ZXN0LmMgYi9mcy9zbWJmcy9yZXF1ZXN0LmMKaW5kZXggYzcxYzM3NS4uYzcxZGQyNyAxMDA2NDQKLS0tIGEvZnMvc21iZnMvcmVxdWVzdC5jCisrKyBiL2ZzL3NtYmZzL3JlcXVlc3QuYwpAQCAtMzM5LDkgKzMzOSwxMSBAQAogCQkvKgogCQkgKiBPbiB0aW1lb3V0IG9yIG9uIGludGVycnVwdCB3ZSB3YW50IHRvIHRyeSBhbmQgcmVtb3ZlIHRoZQogCQkgKiByZXF1ZXN0IGZyb20gdGhlIHJlY3ZxL3htaXRxLgorCQkgKiBGaXJzdCBjaGVjayBpZiB0aGUgcmVxdWVzdCBpcyBzdGlsbCBwYXJ0IG9mIGEgcXVldWUuIChNYXkKKwkJICogaGF2ZSBiZWVuIHJlbW92ZWQgYnkgc29tZSBlcnJvciBjb25kaXRpb24pCiAJCSAqLwogCQlzbWJfbG9ja19zZXJ2ZXIoc2VydmVyKTsKLQkJaWYgKCEocmVxLT5ycV9mbGFncyAmIFNNQl9SRVFfUkVDRUlWRUQpKSB7CisJCWlmICghbGlzdF9lbXB0eSgmcmVxLT5ycV9xdWV1ZSkpIHsKIAkJCWxpc3RfZGVsX2luaXQoJnJlcS0+cnFfcXVldWUpOwogCQkJc21iX3JwdXQocmVxKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA0YTAyNmY5Li5hMjg1ZmQ3IDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtOSwxMSArOSwxMiBAQAogICogdGhhdCB0cmFuc2ZlcnMgZGF0YSBidWZmZXJzIHRvIG9yIGZyb20gYSBwaXBlIGJ1ZmZlci4KICAqCiAgKiBOYW1lZCBieSBMYXJyeSBNY1ZveSwgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gZnJvbSBMaW51cywgZXh0ZW5kZWQgYnkKLSAqIEplbnMgdG8gc3VwcG9ydCBzcGxpY2luZyB0byBmaWxlcyBhbmQgZml4aW5nIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uCi0gKiBidWdzLgorICogSmVucyB0byBzdXBwb3J0IHNwbGljaW5nIHRvIGZpbGVzLCBuZXR3b3JrLCBkaXJlY3Qgc3BsaWNpbmcsIGV0YyBhbmQKKyAqIGZpeGluZyBsb3RzIG9mIGJ1Z3MuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMjIsMTQyICsyMywxOTYgQEAKICNpbmNsdWRlIDxsaW51eC9waXBlX2ZzX2kuaD4KICNpbmNsdWRlIDxsaW51eC9tbV9pbmxpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogCi0vKgotICogUGFzc2VkIHRvIHRoZSBhY3RvcnMKLSAqLwotc3RydWN0IHNwbGljZV9kZXNjIHsKLQl1bnNpZ25lZCBpbnQgbGVuLCB0b3RhbF9sZW47CS8qIGN1cnJlbnQgYW5kIHJlbWFpbmluZyBsZW5ndGggKi8KLQl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBzcGxpY2UgZmxhZ3MgKi8KLQlzdHJ1Y3QgZmlsZSAqZmlsZTsJCS8qIGZpbGUgdG8gcmVhZC93cml0ZSAqLwotCWxvZmZfdCBwb3M7CQkJLyogZmlsZSBwb3NpdGlvbiAqLworc3RydWN0IHBhcnRpYWxfcGFnZSB7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgbGVuOwogfTsKIAotc3RhdGljIGludCBwYWdlX2NhY2hlX3BpcGVfYnVmX3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sCisvKgorICogUGFzc2VkIHRvIHNwbGljZV90b19waXBlCisgKi8KK3N0cnVjdCBzcGxpY2VfcGlwZV9kZXNjIHsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwkJLyogcGFnZSBtYXAgKi8KKwlzdHJ1Y3QgcGFydGlhbF9wYWdlICpwYXJ0aWFsOwkvKiBwYWdlc1tdIG1heSBub3QgYmUgY29udGlnICovCisJaW50IG5yX3BhZ2VzOwkJCS8qIG51bWJlciBvZiBwYWdlcyBpbiBtYXAgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBzcGxpY2UgZmxhZ3MgKi8KKwlzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzOy8qIG9wcyBhc3NvY2lhdGVkIHdpdGggb3V0cHV0IHBpcGUgKi8KK307CisKKy8qCisgKiBBdHRlbXB0IHRvIHN0ZWFsIGEgcGFnZSBmcm9tIGEgcGlwZSBidWZmZXIuIFRoaXMgc2hvdWxkIHBlcmhhcHMgZ28gaW50bworICogYSB2bSBoZWxwZXIgZnVuY3Rpb24sIGl0J3MgYWxyZWFkeSBzaW1wbGlmaWVkIHF1aXRlIGEgYml0IGJ5IHRoZQorICogYWRkaXRpb24gb2YgcmVtb3ZlX21hcHBpbmcoKS4gSWYgc3VjY2VzcyBpcyByZXR1cm5lZCwgdGhlIGNhbGxlciBtYXkKKyAqIGF0dGVtcHQgdG8gcmV1c2UgdGhpcyBwYWdlIGZvciBhbm90aGVyIGRlc3RpbmF0aW9uLgorICovCitzdGF0aWMgaW50IHBhZ2VfY2FjaGVfcGlwZV9idWZfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCQkgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gYnVmLT5wYWdlOwotCi0JV0FSTl9PTighUGFnZUxvY2tlZChwYWdlKSk7Ci0JV0FSTl9PTighUGFnZVVwdG9kYXRlKHBhZ2UpKTsKLQotCWlmICghcmVtb3ZlX21hcHBpbmcocGFnZV9tYXBwaW5nKHBhZ2UpLCBwYWdlKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoUGFnZUxSVShwYWdlKSkgewotCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQotCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCUJVR19PTighUGFnZUxSVShwYWdlKSk7Ci0JCV9fQ2xlYXJQYWdlTFJVKHBhZ2UpOwotCQlkZWxfcGFnZV9mcm9tX2xydSh6b25lLCBwYWdlKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JfQotCi0JYnVmLT5zdG9sZW4gPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwYWdlX2NhY2hlX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywKLQkJCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci0JcGFnZV9jYWNoZV9yZWxlYXNlKGJ1Zi0+cGFnZSk7Ci0JYnVmLT5wYWdlID0gTlVMTDsKLQlidWYtPnN0b2xlbiA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkICpwYWdlX2NhY2hlX3BpcGVfYnVmX21hcChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sCi0JCQkJICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1Zi0+cGFnZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIAogCWxvY2tfcGFnZShwYWdlKTsKIAotCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJV0FSTl9PTighUGFnZVVwdG9kYXRlKHBhZ2UpKTsKKworCS8qCisJICogQXQgbGVhc3QgZm9yIGV4dDIgd2l0aCBub2JoIG9wdGlvbiwgd2UgbmVlZCB0byB3YWl0IG9uIHdyaXRlYmFjaworCSAqIGNvbXBsZXRpbmcgb24gdGhpcyBwYWdlLCBzaW5jZSB3ZSdsbCByZW1vdmUgaXQgZnJvbSB0aGUgcGFnZWNhY2hlLgorCSAqIE90aGVyd2lzZSB0cnVuY2F0ZSB3b250IHdhaXQgb24gdGhlIHBhZ2UsIGFsbG93aW5nIHRoZSBkaXNrCisJICogYmxvY2tzIHRvIGJlIHJldXNlZCBieSBzb21lb25lIGVsc2UgYmVmb3JlIHdlIGFjdHVhbGx5IHdyb3RlIG91cgorCSAqIGRhdGEgdG8gdGhlbS4gZnMgY29ycnVwdGlvbiBlbnN1ZXMuCisJICovCisJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKworCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKKwkJdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKKworCWlmICghcmVtb3ZlX21hcHBpbmcobWFwcGluZywgcGFnZSkpIHsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU8pOworCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9EQVRBKTsKLQl9Ci0KLQlyZXR1cm4ga21hcChidWYtPnBhZ2UpOworCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19MUlU7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBhZ2VfY2FjaGVfcGlwZV9idWZfdW5tYXAoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywKLQkJCQkgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3N0YXRpYyB2b2lkIHBhZ2VfY2FjaGVfcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKLQlpZiAoIWJ1Zi0+c3RvbGVuKQotCQl1bmxvY2tfcGFnZShidWYtPnBhZ2UpOwotCWt1bm1hcChidWYtPnBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShidWYtPnBhZ2UpOworCWJ1Zi0+ZmxhZ3MgJj0gflBJUEVfQlVGX0ZMQUdfTFJVOworfQorCitzdGF0aWMgaW50IHBhZ2VfY2FjaGVfcGlwZV9idWZfcGluKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidWYtPnBhZ2U7CisJaW50IGVycjsKKworCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCWxvY2tfcGFnZShwYWdlKTsKKworCQkvKgorCQkgKiBQYWdlIGdvdCB0cnVuY2F0ZWQvdW5oYXNoZWQuIFRoaXMgd2lsbCBjYXVzZSBhIDAtYnl0ZQorCQkgKiBzcGxpY2UsIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhZ2UuCisJCSAqLworCQlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsKKwkJCWVyciA9IC1FTk9EQVRBOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qCisJCSAqIFVoIG9oLCByZWFkLWVycm9yIGZyb20gZGlzay4KKwkJICovCisJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qCisJCSAqIFBhZ2UgaXMgb2sgYWZ0ZXJhbGwsIHdlIGFyZSBkb25lLgorCQkgKi8KKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfQorCisJcmV0dXJuIDA7CitlcnJvcjoKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgcGFnZV9jYWNoZV9waXBlX2J1Zl9vcHMgPSB7CiAJLmNhbl9tZXJnZSA9IDAsCi0JLm1hcCA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfbWFwLAotCS51bm1hcCA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfdW5tYXAsCisJLm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAorCS51bm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCisJLnBpbiA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfcGluLAogCS5yZWxlYXNlID0gcGFnZV9jYWNoZV9waXBlX2J1Zl9yZWxlYXNlLAogCS5zdGVhbCA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfc3RlYWwsCisJLmdldCA9IGdlbmVyaWNfcGlwZV9idWZfZ2V0LAogfTsKIAotc3RhdGljIHNzaXplX3QgbW92ZV90b19waXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICoqcGFnZXMsCi0JCQkgICAgaW50IG5yX3BhZ2VzLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGxlbikKK3N0YXRpYyBpbnQgdXNlcl9wYWdlX3BpcGVfYnVmX3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm87Ci0JaW50IHJldCwgZG9fd2FrZXVwLCBpOworCWlmICghKGJ1Zi0+ZmxhZ3MgJiBQSVBFX0JVRl9GTEFHX0dJRlQpKQorCQlyZXR1cm4gMTsKKworCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19MUlU7CisJcmV0dXJuIGdlbmVyaWNfcGlwZV9idWZfc3RlYWwocGlwZSwgYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHVzZXJfcGFnZV9waXBlX2J1Zl9vcHMgPSB7CisJLmNhbl9tZXJnZSA9IDAsCisJLm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAorCS51bm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCisJLnBpbiA9IGdlbmVyaWNfcGlwZV9idWZfcGluLAorCS5yZWxlYXNlID0gcGFnZV9jYWNoZV9waXBlX2J1Zl9yZWxlYXNlLAorCS5zdGVhbCA9IHVzZXJfcGFnZV9waXBlX2J1Zl9zdGVhbCwKKwkuZ2V0ID0gZ2VuZXJpY19waXBlX2J1Zl9nZXQsCit9OworCisvKgorICogUGlwZSBvdXRwdXQgd29ya2VyLiBUaGlzIHNldHMgdXAgb3VyIHBpcGUgZm9ybWF0IHdpdGggdGhlIHBhZ2UgY2FjaGUKKyAqIHBpcGUgYnVmZmVyIG9wZXJhdGlvbnMuIE90aGVyd2lzZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHJlZ3VsYXIgcGlwZV93cml0ZXYoKS4KKyAqLworc3RhdGljIHNzaXplX3Qgc3BsaWNlX3RvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCSAgICAgIHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICpzcGQpCit7CisJaW50IHJldCwgZG9fd2FrZXVwLCBwYWdlX25yOwogCiAJcmV0ID0gMDsKIAlkb193YWtldXAgPSAwOwotCWkgPSAwOworCXBhZ2VfbnIgPSAwOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfbG9jaygmcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOwogCi0JaW5mbyA9IGlub2RlLT5pX3BpcGU7CiAJZm9yICg7OykgewotCQlpbnQgYnVmczsKLQotCQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+cmVhZGVycykgewogCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXQgPSAtRVBJUEU7CiAJCQlicmVhazsKIAkJfQogCi0JCWJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7Ci0JCWlmIChidWZzIDwgUElQRV9CVUZGRVJTKSB7Ci0JCQlpbnQgbmV3YnVmID0gKGluZm8tPmN1cmJ1ZiArIGJ1ZnMpICYgKFBJUEVfQlVGRkVSUyAtIDEpOwotCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBpbmZvLT5idWZzICsgbmV3YnVmOwotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpKytdOwotCQkJdW5zaWduZWQgbG9uZyB0aGlzX2xlbjsKKwkJaWYgKHBpcGUtPm5yYnVmcyA8IFBJUEVfQlVGRkVSUykgeworCQkJaW50IG5ld2J1ZiA9IChwaXBlLT5jdXJidWYgKyBwaXBlLT5ucmJ1ZnMpICYgKFBJUEVfQlVGRkVSUyAtIDEpOworCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgbmV3YnVmOwogCi0JCQl0aGlzX2xlbiA9IFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldDsKLQkJCWlmICh0aGlzX2xlbiA+IGxlbikKLQkJCQl0aGlzX2xlbiA9IGxlbjsKKwkJCWJ1Zi0+cGFnZSA9IHNwZC0+cGFnZXNbcGFnZV9ucl07CisJCQlidWYtPm9mZnNldCA9IHNwZC0+cGFydGlhbFtwYWdlX25yXS5vZmZzZXQ7CisJCQlidWYtPmxlbiA9IHNwZC0+cGFydGlhbFtwYWdlX25yXS5sZW47CisJCQlidWYtPm9wcyA9IHNwZC0+b3BzOworCQkJaWYgKHNwZC0+ZmxhZ3MgJiBTUExJQ0VfRl9HSUZUKQorCQkJCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19HSUZUOwogCi0JCQlidWYtPnBhZ2UgPSBwYWdlOwotCQkJYnVmLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQlidWYtPmxlbiA9IHRoaXNfbGVuOwotCQkJYnVmLT5vcHMgPSAmcGFnZV9jYWNoZV9waXBlX2J1Zl9vcHM7Ci0JCQlpbmZvLT5ucmJ1ZnMgPSArK2J1ZnM7Ci0JCQlkb193YWtldXAgPSAxOworCQkJcGlwZS0+bnJidWZzKys7CisJCQlwYWdlX25yKys7CisJCQlyZXQgKz0gYnVmLT5sZW47CiAKLQkJCXJldCArPSB0aGlzX2xlbjsKLQkJCWxlbiAtPSB0aGlzX2xlbjsKLQkJCW9mZnNldCA9IDA7Ci0JCQlpZiAoIS0tbnJfcGFnZXMpCisJCQlpZiAocGlwZS0+aW5vZGUpCisJCQkJZG9fd2FrZXVwID0gMTsKKworCQkJaWYgKCEtLXNwZC0+bnJfcGFnZXMpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoIWxlbikKLQkJCQlicmVhazsKLQkJCWlmIChidWZzIDwgUElQRV9CVUZGRVJTKQorCQkJaWYgKHBpcGUtPm5yYnVmcyA8IFBJUEVfQlVGRkVSUykKIAkJCQljb250aW51ZTsKIAogCQkJYnJlYWs7CiAJCX0KIAorCQlpZiAoc3BkLT5mbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWlmICghcmV0KQogCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKQEAgLTE2NSwxMzcgKzIyMCwyNzIgQEAKIAkJfQogCiAJCWlmIChkb193YWtldXApIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sCi0JCQkJICAgIFBPTExfSU4pOworCQkJc21wX21iKCk7CisJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcGlwZS0+d2FpdCkpCisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJnBpcGUtPndhaXQpOworCQkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJCQlkb193YWtldXAgPSAwOwogCQl9CiAKLQkJUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKSsrOwotCQlwaXBlX3dhaXQoaW5vZGUpOwotCQlQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpLS07CisJCXBpcGUtPndhaXRpbmdfd3JpdGVycysrOworCQlwaXBlX3dhaXQocGlwZSk7CisJCXBpcGUtPndhaXRpbmdfd3JpdGVycy0tOwogCX0KIAotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfdW5sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfSU4pOworCQlzbXBfbWIoKTsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnBpcGUtPndhaXQpKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJfQogCi0Jd2hpbGUgKGkgPCBucl9wYWdlcykKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2krK10pOworCXdoaWxlIChwYWdlX25yIDwgc3BkLT5ucl9wYWdlcykKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHNwZC0+cGFnZXNbcGFnZV9ucisrXSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IGlub2RlICpwaXBlLAotCQkJCSAgICAgIHNpemVfdCBsZW4pCitzdGF0aWMgaW50CitfX2dlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywKKwkJCSAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbi0+Zl9tYXBwaW5nOwotCXVuc2lnbmVkIGludCBvZmZzZXQsIG5yX3BhZ2VzOwotCXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX0JVRkZFUlNdLCAqc2hhZG93W1BJUEVfQlVGRkVSU107CisJdW5zaWduZWQgaW50IGxvZmYsIG5yX3BhZ2VzOworCXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX0JVRkZFUlNdOworCXN0cnVjdCBwYXJ0aWFsX3BhZ2UgcGFydGlhbFtQSVBFX0JVRkZFUlNdOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXBnb2ZmX3QgaW5kZXgsIHBpZHg7Ci0JaW50IGksIGo7CisJcGdvZmZfdCBpbmRleCwgZW5kX2luZGV4OworCWxvZmZfdCBpc2l6ZTsKKwlzaXplX3QgdG90YWxfbGVuOworCWludCBlcnJvciwgcGFnZV9ucjsKKwlzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyBzcGQgPSB7CisJCS5wYWdlcyA9IHBhZ2VzLAorCQkucGFydGlhbCA9IHBhcnRpYWwsCisJCS5mbGFncyA9IGZsYWdzLAorCQkub3BzID0gJnBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzLAorCX07CiAKLQlpbmRleCA9IGluLT5mX3BvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCW9mZnNldCA9IGluLT5mX3BvcyAmIH5QQUdFX0NBQ0hFX01BU0s7Ci0JbnJfcGFnZXMgPSAobGVuICsgb2Zmc2V0ICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlpbmRleCA9ICpwcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJbG9mZiA9ICpwcG9zICYgflBBR0VfQ0FDSEVfTUFTSzsKKwlucl9wYWdlcyA9IChsZW4gKyBsb2ZmICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCWlmIChucl9wYWdlcyA+IFBJUEVfQlVGRkVSUykKIAkJbnJfcGFnZXMgPSBQSVBFX0JVRkZFUlM7CiAKIAkvKgotCSAqIGluaXRpYXRlIHJlYWQtYWhlYWQgb24gdGhpcyBwYWdlIHJhbmdlCisJICogSW5pdGlhdGUgcmVhZC1haGVhZCBvbiB0aGlzIHBhZ2UgcmFuZ2UuIGhvd2V2ZXIsIGRvbid0IGNhbGwgaW50bworCSAqIHJlYWQtYWhlYWQgaWYgdGhpcyBpcyBhIG5vbi16ZXJvIG9mZnNldCAod2UgYXJlIGxpa2VseSBkb2luZyBzbWFsbAorCSAqIGNodW5rIHNwbGljZSBhbmQgdGhlIHBhZ2UgaXMgYWxyZWFkeSB0aGVyZSkgZm9yIGEgc2luZ2xlIHBhZ2UuCiAJICovCi0JZG9fcGFnZV9jYWNoZV9yZWFkYWhlYWQobWFwcGluZywgaW4sIGluZGV4LCBucl9wYWdlcyk7CisJaWYgKCFsb2ZmIHx8IG5yX3BhZ2VzID4gMSkKKwkJcGFnZV9jYWNoZV9yZWFkYWhlYWQobWFwcGluZywgJmluLT5mX3JhLCBpbiwgaW5kZXgsIG5yX3BhZ2VzKTsKIAogCS8qCi0JICogR2V0IGFzIG1hbnkgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBhcyBwb3NzaWJsZS4uCi0JICogU3RhcnQgSU8gb24gdGhlIHBhZ2UgY2FjaGUgZW50cmllcyB3ZSBjcmVhdGUgKHdlCi0JICogY2FuIGFzc3VtZSB0aGF0IGFueSBwcmUtZXhpc3Rpbmcgb25lcyB3ZSBmaW5kIGhhdmUKLQkgKiBhbHJlYWR5IGhhZCBJTyBzdGFydGVkIG9uIHRoZW0pLgorCSAqIE5vdyBmaWxsIGluIHRoZSBob2xlczoKIAkgKi8KLQlpID0gZmluZF9nZXRfcGFnZXMobWFwcGluZywgaW5kZXgsIG5yX3BhZ2VzLCBwYWdlcyk7CisJZXJyb3IgPSAwOworCXRvdGFsX2xlbiA9IDA7CiAKIAkvKgotCSAqIGNvbW1vbiBjYXNlIC0gd2UgZm91bmQgYWxsIHBhZ2VzIGFuZCB0aGV5IGFyZSBjb250aWd1b3VzLAotCSAqIGtpY2sgdGhlbSBvZmYKKwkgKiBMb29rdXAgdGhlIChob3BlZnVsbHkpIGZ1bGwgcmFuZ2Ugb2YgcGFnZXMgd2UgbmVlZC4KIAkgKi8KLQlpZiAoaSAmJiAocGFnZXNbaSAtIDFdLT5pbmRleCA9PSBpbmRleCArIGkgLSAxKSkKLQkJZ290byBzcGxpY2VfdGhlbTsKKwlzcGQubnJfcGFnZXMgPSBmaW5kX2dldF9wYWdlc19jb250aWcobWFwcGluZywgaW5kZXgsIG5yX3BhZ2VzLCBwYWdlcyk7CiAKIAkvKgotCSAqIGZpbGwgc2hhZG93W10gd2l0aCBwYWdlcyBhdCB0aGUgcmlnaHQgbG9jYXRpb25zLCBzbyB3ZSBvbmx5Ci0JICogaGF2ZSB0byBmaWxsIGhvbGVzCisJICogSWYgZmluZF9nZXRfcGFnZXNfY29udGlnKCkgcmV0dXJuZWQgZmV3ZXIgcGFnZXMgdGhhbiB3ZSBuZWVkZWQsCisJICogYWxsb2NhdGUgdGhlIHJlc3QuCiAJICovCi0JbWVtc2V0KHNoYWRvdywgMCwgaSAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7Ci0JZm9yIChqID0gMCwgcGlkeCA9IGluZGV4OyBqIDwgaTsgcGlkeCsrLCBqKyspCi0JCXNoYWRvd1twYWdlc1tqXS0+aW5kZXggLSBwaWR4XSA9IHBhZ2VzW2pdOwotCi0JLyoKLQkgKiBub3cgZmlsbCBpbiB0aGUgaG9sZXMKLQkgKi8KLQlmb3IgKGkgPSAwLCBwaWR4ID0gaW5kZXg7IGkgPCBucl9wYWdlczsgcGlkeCsrLCBpKyspIHsKLQkJaW50IGVycm9yOwotCi0JCWlmIChzaGFkb3dbaV0pCi0JCQljb250aW51ZTsKLQorCWluZGV4ICs9IHNwZC5ucl9wYWdlczsKKwl3aGlsZSAoc3BkLm5yX3BhZ2VzIDwgbnJfcGFnZXMpIHsKIAkJLyoKLQkJICogbm8gcGFnZSB0aGVyZSwgbG9vayBvbmUgdXAgLyBjcmVhdGUgaXQKKwkJICogUGFnZSBjb3VsZCBiZSB0aGVyZSwgZmluZF9nZXRfcGFnZXNfY29udGlnKCkgYnJlYWtzIG9uCisJCSAqIHRoZSBmaXJzdCBob2xlLgogCQkgKi8KLQkJcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UobWFwcGluZywgcGlkeCwKLQkJCQkJCSAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwotCQlpZiAoIXBhZ2UpCi0JCQlicmVhazsKKwkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaW5kZXgpOworCQlpZiAoIXBhZ2UpIHsKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgdGhlIHJlYWQtYWhlYWQgZW5naW5lIGlzIG5vdGlmaWVkCisJCQkgKiBhYm91dCB0aGlzIGZhaWx1cmUuCisJCQkgKi8KKwkJCWhhbmRsZV9yYV9taXNzKG1hcHBpbmcsICZpbi0+Zl9yYSwgaW5kZXgpOwogCi0JCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCi0JCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJZWxzZSB7Ci0JCQllcnJvciA9IG1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShpbiwgcGFnZSk7CisJCQkvKgorCQkJICogcGFnZSBkaWRuJ3QgZXhpc3QsIGFsbG9jYXRlIG9uZS4KKwkJCSAqLworCQkJcGFnZSA9IHBhZ2VfY2FjaGVfYWxsb2NfY29sZChtYXBwaW5nKTsKKwkJCWlmICghcGFnZSkKKwkJCQlicmVhazsKIAorCQkJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywgaW5kZXgsCisJCQkJCSAgICAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlpZiAoZXJyb3IgPT0gLUVFWElTVCkKKwkJCQkJY29udGludWU7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQkvKgorCQkJICogYWRkX3RvX3BhZ2VfY2FjaGUoKSBsb2NrcyB0aGUgcGFnZSwgdW5sb2NrIGl0CisJCQkgKiB0byBhdm9pZCBjb252b2x1dGluZyB0aGUgbG9naWMgYmVsb3cgZXZlbiBtb3JlLgorCQkJICovCisJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQotCQlzaGFkb3dbaV0gPSBwYWdlOwotCX0KIAotCWlmICghaSkgewotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQkJIGlmIChzaGFkb3dbaV0pCi0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHNoYWRvd1tpXSk7Ci0JCX0KLQkJcmV0dXJuIDA7CisJCXBhZ2VzW3NwZC5ucl9wYWdlcysrXSA9IHBhZ2U7CisJCWluZGV4Kys7CiAJfQogCi0JbWVtY3B5KHBhZ2VzLCBzaGFkb3csIGkgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwotCiAJLyoKLQkgKiBOb3cgd2Ugc3BsaWNlIHRoZW0gaW50byB0aGUgcGlwZS4uCisJICogTm93IGxvb3Agb3ZlciB0aGUgbWFwIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBzdGFydCBJTyBvbiBhbnkKKwkgKiBwYWdlcywgZmlsbCBpbiB0aGUgcGFydGlhbCBtYXAsIGV0Yy4KIAkgKi8KLXNwbGljZV90aGVtOgotCXJldHVybiBtb3ZlX3RvX3BpcGUocGlwZSwgcGFnZXMsIGksIG9mZnNldCwgbGVuKTsKKwlpbmRleCA9ICpwcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJbnJfcGFnZXMgPSBzcGQubnJfcGFnZXM7CisJc3BkLm5yX3BhZ2VzID0gMDsKKwlmb3IgKHBhZ2VfbnIgPSAwOyBwYWdlX25yIDwgbnJfcGFnZXM7IHBhZ2VfbnIrKykgeworCQl1bnNpZ25lZCBpbnQgdGhpc19sZW47CisKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKworCQkvKgorCQkgKiB0aGlzX2xlbiBpcyB0aGUgbWF4IHdlJ2xsIHVzZSBmcm9tIHRoaXMgcGFnZQorCQkgKi8KKwkJdGhpc19sZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4sIFBBR0VfQ0FDSEVfU0laRSAtIGxvZmYpOworCQlwYWdlID0gcGFnZXNbcGFnZV9ucl07CisKKwkJLyoKKwkJICogSWYgdGhlIHBhZ2UgaXNuJ3QgdXB0b2RhdGUsIHdlIG1heSBuZWVkIHRvIHN0YXJ0IGlvIG9uIGl0CisJCSAqLworCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgeworCQkJLyoKKwkJCSAqIElmIGluIG5vbmJsb2NrIG1vZGUgdGhlbiBkb250IGJsb2NrIG9uIHdhaXRpbmcKKwkJCSAqIGZvciBhbiBpbi1mbGlnaHQgaW8gcGFnZQorCQkJICovCisJCQlpZiAoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykKKwkJCQlicmVhazsKKworCQkJbG9ja19wYWdlKHBhZ2UpOworCisJCQkvKgorCQkJICogcGFnZSB3YXMgdHJ1bmNhdGVkLCBzdG9wIGhlcmUuIGlmIHRoaXMgaXNuJ3QgdGhlCisJCQkgKiBmaXJzdCBwYWdlLCB3ZSdsbCBqdXN0IGNvbXBsZXRlIHdoYXQgd2UgYWxyZWFkeQorCQkJICogYWRkZWQKKwkJCSAqLworCQkJaWYgKCFwYWdlLT5tYXBwaW5nKSB7CisJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKgorCQkJICogcGFnZSB3YXMgYWxyZWFkeSB1bmRlciBpbyBhbmQgaXMgbm93IGRvbmUsIGdyZWF0CisJCQkgKi8KKwkJCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCQlnb3RvIGZpbGxfaXQ7CisJCQl9CisKKwkJCS8qCisJCQkgKiBuZWVkIHRvIHJlYWQgaW4gdGhlIHBhZ2UKKwkJCSAqLworCQkJZXJyb3IgPSBtYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UoaW4sIHBhZ2UpOworCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQkJCS8qCisJCQkJICogV2UgcmVhbGx5IHNob3VsZCByZS1sb29rdXAgdGhlIHBhZ2UgaGVyZSwKKwkJCQkgKiBidXQgaXQgY29tcGxpY2F0ZXMgdGhpbmdzIGEgbG90LiBJbnN0ZWFkCisJCQkJICogbGV0cyBqdXN0IGRvIHdoYXQgd2UgYWxyZWFkeSBzdG9yZWQsIGFuZAorCQkJCSAqIHdlJ2xsIGdldCBpdCB0aGUgbmV4dCB0aW1lIHdlIGFyZSBjYWxsZWQuCisJCQkJICovCisJCQkJaWYgKGVycm9yID09IEFPUF9UUlVOQ0FURURfUEFHRSkKKwkJCQkJZXJyb3IgPSAwOworCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBpX3NpemUgbXVzdCBiZSBjaGVja2VkIGFmdGVyIC0+cmVhZHBhZ2UoKS4KKwkJCSAqLworCQkJaXNpemUgPSBpX3NpemVfcmVhZChtYXBwaW5nLT5ob3N0KTsKKwkJCWVuZF9pbmRleCA9IChpc2l6ZSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCQlpZiAodW5saWtlbHkoIWlzaXplIHx8IGluZGV4ID4gZW5kX2luZGV4KSkKKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIGlmIHRoaXMgaXMgdGhlIGxhc3QgcGFnZSwgc2VlIGlmIHdlIG5lZWQgdG8gc2hyaW5rCisJCQkgKiB0aGUgbGVuZ3RoIGFuZCBzdG9wCisJCQkgKi8KKwkJCWlmIChlbmRfaW5kZXggPT0gaW5kZXgpIHsKKwkJCQlsb2ZmID0gUEFHRV9DQUNIRV9TSVpFIC0gKGlzaXplICYgflBBR0VfQ0FDSEVfTUFTSyk7CisJCQkJaWYgKHRvdGFsX2xlbiArIGxvZmYgPiBpc2l6ZSkKKwkJCQkJYnJlYWs7CisJCQkJLyoKKwkJCQkgKiBmb3JjZSBxdWl0IGFmdGVyIGFkZGluZyB0aGlzIHBhZ2UKKwkJCQkgKi8KKwkJCQlsZW4gPSB0aGlzX2xlbjsKKwkJCQl0aGlzX2xlbiA9IG1pbih0aGlzX2xlbiwgbG9mZik7CisJCQkJbG9mZiA9IDA7CisJCQl9CisJCX0KK2ZpbGxfaXQ6CisJCXBhcnRpYWxbcGFnZV9ucl0ub2Zmc2V0ID0gbG9mZjsKKwkJcGFydGlhbFtwYWdlX25yXS5sZW4gPSB0aGlzX2xlbjsKKwkJbGVuIC09IHRoaXNfbGVuOworCQl0b3RhbF9sZW4gKz0gdGhpc19sZW47CisJCWxvZmYgPSAwOworCQlzcGQubnJfcGFnZXMrKzsKKwkJaW5kZXgrKzsKKwl9CisKKwkvKgorCSAqIFJlbGVhc2UgYW55IHBhZ2VzIGF0IHRoZSBlbmQsIGlmIHdlIHF1aXQgZWFybHkuICdpJyBpcyBob3cgZmFyCisJICogd2UgZ290LCAnbnJfcGFnZXMnIGlzIGhvdyBtYW55IHBhZ2VzIGFyZSBpbiB0aGUgbWFwLgorCSAqLworCXdoaWxlIChwYWdlX25yIDwgbnJfcGFnZXMpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1twYWdlX25yKytdKTsKKworCWlmIChzcGQubnJfcGFnZXMpCisJCXJldHVybiBzcGxpY2VfdG9fcGlwZShwaXBlLCAmc3BkKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAotc3NpemVfdCBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3QgaW5vZGUgKnBpcGUsCi0JCQkJIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKKy8qKgorICogZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkIC0gc3BsaWNlIGRhdGEgZnJvbSBmaWxlIHRvIGEgcGlwZQorICogQGluOgkJZmlsZSB0byBzcGxpY2UgZnJvbQorICogQHBpcGU6CXBpcGUgdG8gc3BsaWNlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCisgKiBAZmxhZ3M6CXNwbGljZSBtb2RpZmllciBmbGFncworICoKKyAqIFdpbGwgcmVhZCBwYWdlcyBmcm9tIGdpdmVuIGZpbGUgYW5kIGZpbGwgdGhlbSBpbnRvIGEgcGlwZS4KKyAqLworc3NpemVfdCBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCisJCQkJIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCisJCQkJIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzc2l6ZV90IHNwbGljZWQ7CiAJaW50IHJldDsKIAogCXJldCA9IDA7CiAJc3BsaWNlZCA9IDA7CisKIAl3aGlsZSAobGVuKSB7Ci0JCXJldCA9IF9fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKGluLCBwaXBlLCBsZW4pOworCQlyZXQgPSBfX2dlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChpbiwgcHBvcywgcGlwZSwgbGVuLCBmbGFncyk7CiAKLQkJaWYgKHJldCA8PSAwKQorCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOworCQllbHNlIGlmICghcmV0KSB7CisJCQlpZiAoc3BsaWNlZCkKKwkJCQlicmVhazsKKwkJCWlmIChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB7CisJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCi0JCWluLT5mX3BvcyArPSByZXQ7CisJCSpwcG9zICs9IHJldDsKIAkJbGVuIC09IHJldDsKIAkJc3BsaWNlZCArPSByZXQ7CiAJfQpAQCAtMzA2LDM4ICs0OTYsMjggQEAKIAlyZXR1cm4gcmV0OwogfQogCitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCk7CisKIC8qCi0gKiBTZW5kICdsZW4nIGJ5dGVzIHRvIHNvY2tldCBmcm9tICdmaWxlJyBhdCBwb3NpdGlvbiAncG9zJyB1c2luZyBzZW5kcGFnZSgpLgorICogU2VuZCAnc2QtPmxlbicgYnl0ZXMgdG8gc29ja2V0IGZyb20gJ3NkLT5maWxlJyBhdCBwb3NpdGlvbiAnc2QtPnBvcycKKyAqIHVzaW5nIHNlbmRwYWdlKCkuIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQuCiAgKi8KLXN0YXRpYyBpbnQgcGlwZV90b19zZW5kcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLAorc3RhdGljIGludCBwaXBlX3RvX3NlbmRwYWdlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiAJCQkgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBzZC0+ZmlsZTsKIAlsb2ZmX3QgcG9zID0gc2QtPnBvczsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXNzaXplX3QgcmV0OwotCXZvaWQgKnB0cjsKKwlpbnQgcmV0LCBtb3JlOwogCi0JLyoKLQkgKiBzdWItb3B0aW1hbCwgYnV0IHdlIGFyZSBsaW1pdGVkIGJ5IHRoZSBwaXBlIC0+bWFwLiB3ZSBkb24ndAotCSAqIG5lZWQgYSBrbWFwJ2VkIGJ1ZmZlciBoZXJlLCB3ZSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHdlCi0JICogaGF2ZSB0aGUgcGFnZSBwaW5uZWQgaWYgdGhlIHBpcGUgcGFnZSBvcmlnaW5hdGVzIGZyb20gdGhlCi0JICogcGFnZSBjYWNoZQotCSAqLwotCXB0ciA9IGJ1Zi0+b3BzLT5tYXAoZmlsZSwgaW5mbywgYnVmKTsKLQlpZiAoSVNfRVJSKHB0cikpCi0JCXJldHVybiBQVFJfRVJSKHB0cik7CisJcmV0ID0gYnVmLT5vcHMtPnBpbihwaXBlLCBidWYpOworCWlmICghcmV0KSB7CisJCW1vcmUgPSAoc2QtPmZsYWdzICYgU1BMSUNFX0ZfTU9SRSkgfHwgc2QtPmxlbiA8IHNkLT50b3RhbF9sZW47CiAKLQlvZmZzZXQgPSBwb3MgJiB+UEFHRV9DQUNIRV9NQVNLOworCQlyZXQgPSBmaWxlLT5mX29wLT5zZW5kcGFnZShmaWxlLCBidWYtPnBhZ2UsIGJ1Zi0+b2Zmc2V0LAorCQkJCQkgICBzZC0+bGVuLCAmcG9zLCBtb3JlKTsKKwl9CiAKLQlyZXQgPSBmaWxlLT5mX29wLT5zZW5kcGFnZShmaWxlLCBidWYtPnBhZ2UsIG9mZnNldCwgc2QtPmxlbiwgJnBvcywKLQkJCQkJc2QtPmxlbiA8IHNkLT50b3RhbF9sZW4pOwotCi0JYnVmLT5vcHMtPnVubWFwKGluZm8sIGJ1Zik7Ci0JaWYgKHJldCA9PSBzZC0+bGVuKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlPOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0zNTMsNTggKzUzMyw4NyBAQAogICoJLSBEZXN0aW5hdGlvbiBwYWdlIGRvZXMgbm90IGV4aXN0LCB3ZSBjYW4gYWRkIHRoZSBwaXBlIHBhZ2UgdG8KICAqCSAgdGhlIHBhZ2UgY2FjaGUgYW5kIGF2b2lkIHRoZSBjb3B5LgogICoKLSAqIEZvciBub3cgd2UganVzdCBkbyB0aGUgc2xvd2VyIHRoaW5nIGFuZCBhbHdheXMgY29weSBwYWdlcyBvdmVyLCBpdCdzCi0gKiBlYXNpZXIgdGhhbiBtaWdyYXRpbmcgcGFnZXMgZnJvbSB0aGUgcGlwZSB0byB0aGUgdGFyZ2V0IGZpbGUuIEZvciB0aGUKLSAqIGNhc2Ugb2YgZG9pbmcgZmlsZSB8IGZpbGUgc3BsaWNpbmcsIHRoZSBtaWdyYXRlIGFwcHJvYWNoIGhhZCBzb21lIExSVQotICogbmFzdGluZXNzLi4uCisgKiBJZiBhc2tlZCB0byBtb3ZlIHBhZ2VzIHRvIHRoZSBvdXRwdXQgZmlsZSAoU1BMSUNFX0ZfTU9WRSBpcyBzZXQgaW4KKyAqIHNkLT5mbGFncyksIHdlIGF0dGVtcHQgdG8gbWlncmF0ZSBwYWdlcyBmcm9tIHRoZSBwaXBlIHRvIHRoZSBvdXRwdXQKKyAqIGZpbGUgYWRkcmVzcyBzcGFjZSBwYWdlIGNhY2hlLiBUaGlzIGlzIHBvc3NpYmxlIGlmIG5vIG9uZSBlbHNlIGhhcworICogdGhlIHBpcGUgcGFnZSByZWZlcmVuY2VkIG91dHNpZGUgb2YgdGhlIHBpcGUgYW5kIHBhZ2UgY2FjaGUuIElmCisgKiBTUExJQ0VfRl9NT1ZFIGlzbid0IHNldCwgb3Igd2UgY2Fubm90IG1vdmUgdGhlIHBhZ2UsIHdlIHNpbXBseSBjcmVhdGUKKyAqIGEgbmV3IHBhZ2UgaW4gdGhlIG91dHB1dCBmaWxlIHBhZ2UgY2FjaGUgYW5kIGZpbGwvZGlydHkgdGhhdC4KICAqLwotc3RhdGljIGludCBwaXBlX3RvX2ZpbGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywgc3RydWN0IHBpcGVfYnVmZmVyICpidWYsCitzdGF0aWMgaW50IHBpcGVfdG9fZmlsZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiwKIAkJCXN0cnVjdCBzcGxpY2VfZGVzYyAqc2QpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBzZC0+ZmlsZTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWdmcF90IGdmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCB0aGlzX2xlbjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlwZ29mZl90IGluZGV4OwotCWNoYXIgKnNyYzsKIAlpbnQgcmV0OwogCiAJLyoKLQkgKiBhZnRlciB0aGlzLCBwYWdlIHdpbGwgYmUgbG9ja2VkIGFuZCB1bm1hcHBlZAorCSAqIG1ha2Ugc3VyZSB0aGUgZGF0YSBpbiB0aGlzIGJ1ZmZlciBpcyB1cHRvZGF0ZQogCSAqLwotCXNyYyA9IGJ1Zi0+b3BzLT5tYXAoZmlsZSwgaW5mbywgYnVmKTsKLQlpZiAoSVNfRVJSKHNyYykpCi0JCXJldHVybiBQVFJfRVJSKHNyYyk7CisJcmV0ID0gYnVmLT5vcHMtPnBpbihwaXBlLCBidWYpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0OwogCiAJaW5kZXggPSBzZC0+cG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJb2Zmc2V0ID0gc2QtPnBvcyAmIH5QQUdFX0NBQ0hFX01BU0s7CiAKKwl0aGlzX2xlbiA9IHNkLT5sZW47CisJaWYgKHRoaXNfbGVuICsgb2Zmc2V0ID4gUEFHRV9DQUNIRV9TSVpFKQorCQl0aGlzX2xlbiA9IFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldDsKKwogCS8qCi0JICogcmV1c2UgYnVmIHBhZ2UsIGlmIFNQTElDRV9GX01PVkUgaXMgc2V0CisJICogUmV1c2UgYnVmIHBhZ2UsIGlmIFNQTElDRV9GX01PVkUgaXMgc2V0IGFuZCB3ZSBhcmUgZG9pbmcgYSBmdWxsCisJICogcGFnZS4KIAkgKi8KLQlpZiAoc2QtPmZsYWdzICYgU1BMSUNFX0ZfTU9WRSkgewotCQlpZiAoYnVmLT5vcHMtPnN0ZWFsKGluZm8sIGJ1ZikpCisJaWYgKChzZC0+ZmxhZ3MgJiBTUExJQ0VfRl9NT1ZFKSAmJiB0aGlzX2xlbiA9PSBQQUdFX0NBQ0hFX1NJWkUpIHsKKwkJLyoKKwkJICogSWYgc3RlYWwgc3VjY2VlZHMsIGJ1Zi0+cGFnZSBpcyBub3cgcHJ1bmVkIGZyb20gdGhlCisJCSAqIHBhZ2VjYWNoZSBhbmQgd2UgY2FuIHJldXNlIGl0LiBUaGUgcGFnZSB3aWxsIGFsc28gYmUKKwkJICogbG9ja2VkIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuLgorCQkgKi8KKwkJaWYgKGJ1Zi0+b3BzLT5zdGVhbChwaXBlLCBidWYpKQogCQkJZ290byBmaW5kX3BhZ2U7CiAKIAkJcGFnZSA9IGJ1Zi0+cGFnZTsKLQkJaWYgKGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBpbmRleCwKLQkJCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpKQorCQlpZiAoYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgaW5kZXgsIGdmcF9tYXNrKSkgeworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQlnb3RvIGZpbmRfcGFnZTsKKwkJfQorCisJCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOworCisJCWlmICghKGJ1Zi0+ZmxhZ3MgJiBQSVBFX0JVRl9GTEFHX0xSVSkpCisJCQlscnVfY2FjaGVfYWRkKHBhZ2UpOwogCX0gZWxzZSB7CiBmaW5kX3BhZ2U6Ci0JCXJldCA9IC1FTk9NRU07Ci0JCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIGluZGV4LAotCQkJCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7Ci0JCWlmICghcGFnZSkKLQkJCWdvdG8gb3V0OworCQlwYWdlID0gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgaW5kZXgpOworCQlpZiAoIXBhZ2UpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlwYWdlID0gcGFnZV9jYWNoZV9hbGxvY19jb2xkKG1hcHBpbmcpOworCQkJaWYgKHVubGlrZWx5KCFwYWdlKSkKKwkJCQlnb3RvIG91dF9ub21lbTsKKworCQkJLyoKKwkJCSAqIFRoaXMgd2lsbCBhbHNvIGxvY2sgdGhlIHBhZ2UKKwkJCSAqLworCQkJcmV0ID0gYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHBhZ2UsIG1hcHBpbmcsIGluZGV4LAorCQkJCQkJICAgIGdmcF9tYXNrKTsKKwkJCWlmICh1bmxpa2VseShyZXQpKQorCQkJCWdvdG8gb3V0OworCQl9CiAKIAkJLyoKLQkJICogSWYgdGhlIHBhZ2UgaXMgdXB0b2RhdGUsIGl0IGlzIGFsc28gbG9ja2VkLiBJZiBpdCBpc24ndAotCQkgKiB1cHRvZGF0ZSwgd2UgY2FuIG1hcmsgaXQgdXB0b2RhdGUgaWYgd2UgYXJlIGZpbGxpbmcgdGhlCi0JCSAqIGZ1bGwgcGFnZS4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gcmVhZCBpdCBpbiBmaXJzdC4uLgorCQkgKiBXZSBnZXQgaGVyZSB3aXRoIHRoZSBwYWdlIGxvY2tlZC4gSWYgdGhlIHBhZ2UgaXMgYWxzbworCQkgKiB1cHRvZGF0ZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyBtb3JlLiBJZiBpdCBpc24ndCwgd2UKKwkJICogbWF5IG5lZWQgdG8gYnJpbmcgaXQgaW4gaWYgd2UgYXJlIG5vdCBnb2luZyB0byBvdmVyd3JpdGUKKwkJICogdGhlIGZ1bGwgcGFnZS4KIAkJICovCiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7Ci0JCQlpZiAoc2QtPmxlbiA8IFBBR0VfQ0FDSEVfU0laRSkgeworCQkJaWYgKHRoaXNfbGVuIDwgUEFHRV9DQUNIRV9TSVpFKSB7CiAJCQkJcmV0ID0gbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlKGZpbGUsIHBhZ2UpOwogCQkJCWlmICh1bmxpa2VseShyZXQpKQogCQkJCQlnb3RvIG91dDsKQEAgLTQxMyw3ICs2MjIsNyBAQAogCiAJCQkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKIAkJCQkJLyoKLQkJCQkJICogcGFnZSBnb3QgaW52YWxpZGF0ZWQsIHJlcGVhdAorCQkJCQkgKiBQYWdlIGdvdCBpbnZhbGlkYXRlZCwgcmVwZWF0LgogCQkJCQkgKi8KIAkJCQkJaWYgKCFwYWdlLT5tYXBwaW5nKSB7CiAJCQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTQyMyw0OCArNjMyLDczIEBACiAJCQkJCXJldCA9IC1FSU87CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJV0FSTl9PTighUGFnZUxvY2tlZChwYWdlKSk7CisJCQl9IGVsc2UKIAkJCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCQl9CiAJCX0KIAl9CiAKLQlyZXQgPSBtYXBwaW5nLT5hX29wcy0+cHJlcGFyZV93cml0ZShmaWxlLCBwYWdlLCAwLCBzZC0+bGVuKTsKLQlpZiAocmV0KQorCXJldCA9IG1hcHBpbmctPmFfb3BzLT5wcmVwYXJlX3dyaXRlKGZpbGUsIHBhZ2UsIG9mZnNldCwgb2Zmc2V0K3RoaXNfbGVuKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChtYXBwaW5nLT5ob3N0KTsKKworCQlpZiAocmV0ICE9IEFPUF9UUlVOQ0FURURfUEFHRSkKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWlmIChyZXQgPT0gQU9QX1RSVU5DQVRFRF9QQUdFKQorCQkJZ290byBmaW5kX3BhZ2U7CisKKwkJLyoKKwkJICogcHJlcGFyZV93cml0ZSgpIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldyBibG9ja3MKKwkJICogb3V0c2lkZSBpX3NpemUuICBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4KKwkJICovCisJCWlmIChzZC0+cG9zICsgdGhpc19sZW4gPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOworCiAJCWdvdG8gb3V0OwotCi0JaWYgKCFidWYtPnN0b2xlbikgewotCQljaGFyICpkc3QgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0KLQkJbWVtY3B5KGRzdCArIG9mZnNldCwgc3JjICsgYnVmLT5vZmZzZXQsIHNkLT5sZW4pOwotCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJa3VubWFwX2F0b21pYyhkc3QsIEtNX1VTRVIwKTsKIAl9CiAKLQlyZXQgPSBtYXBwaW5nLT5hX29wcy0+Y29tbWl0X3dyaXRlKGZpbGUsIHBhZ2UsIDAsIHNkLT5sZW4pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKKwlpZiAoYnVmLT5wYWdlICE9IHBhZ2UpIHsKKwkJLyoKKwkJICogQ2FyZWZ1bCwgLT5tYXAoKSB1c2VzIEtNX1VTRVIwIQorCQkgKi8KKwkJY2hhciAqc3JjID0gYnVmLT5vcHMtPm1hcChwaXBlLCBidWYsIDEpOworCQljaGFyICpkc3QgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMSk7CiAKLQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQlyZXQgPSB3cml0ZV9vbmVfcGFnZShwYWdlLCAwKTsKLW91dDoKLQlpZiAocmV0IDwgMCkKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JaWYgKCFidWYtPnN0b2xlbikKKwkJbWVtY3B5KGRzdCArIG9mZnNldCwgc3JjICsgYnVmLT5vZmZzZXQsIHRoaXNfbGVuKTsKKwkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJCWt1bm1hcF9hdG9taWMoZHN0LCBLTV9VU0VSMSk7CisJCWJ1Zi0+b3BzLT51bm1hcChwaXBlLCBidWYsIHNyYyk7CisJfQorCisJcmV0ID0gbWFwcGluZy0+YV9vcHMtPmNvbW1pdF93cml0ZShmaWxlLCBwYWdlLCBvZmZzZXQsIG9mZnNldCt0aGlzX2xlbik7CisJaWYgKCFyZXQpIHsKKwkJLyoKKwkJICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBhbmQgbWFyayBwYWdlIGFzCisJCSAqIGFjY2Vzc2VkLCB3ZSBhcmUgbm93IGRvbmUhCisJCSAqLworCQlyZXQgPSB0aGlzX2xlbjsKKwkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOworCQliYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKG1hcHBpbmcpOworCX0gZWxzZSBpZiAocmV0ID09IEFPUF9UUlVOQ0FURURfUEFHRSkgewogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JYnVmLT5vcHMtPnVubWFwKGluZm8sIGJ1Zik7CisJCWdvdG8gZmluZF9wYWdlOworCX0KK291dDoKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CitvdXRfbm9tZW06CiAJcmV0dXJuIHJldDsKIH0KIAotdHlwZWRlZiBpbnQgKHNwbGljZV9hY3Rvcikoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKiwKLQkJCSAgIHN0cnVjdCBzcGxpY2VfZGVzYyAqKTsKLQotc3RhdGljIHNzaXplX3QgbW92ZV9mcm9tX3BpcGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKm91dCwKLQkJCSAgICAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncywKLQkJCSAgICAgIHNwbGljZV9hY3RvciAqYWN0b3IpCisvKgorICogUGlwZSBpbnB1dCB3b3JrZXIuIE1vc3Qgb2YgdGhpcyBsb2dpYyB3b3JrcyBsaWtlIGEgcmVndWxhciBwaXBlLCB0aGUKKyAqIGtleSBoZXJlIGlzIHRoZSAnYWN0b3InIHdvcmtlciBwYXNzZWQgaW4gdGhhdCBhY3R1YWxseSBtb3ZlcyB0aGUgZGF0YQorICogdG8gdGhlIHdhbnRlZCBkZXN0aW5hdGlvbi4gU2VlIHBpcGVfdG9fZmlsZS9waXBlX3RvX3NlbmRwYWdlIGFib3ZlLgorICovCitzc2l6ZV90IHNwbGljZV9mcm9tX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IGZpbGUgKm91dCwKKwkJCSBsb2ZmX3QgKnBwb3MsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSBzcGxpY2VfYWN0b3IgKmFjdG9yKQogewotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm87CiAJaW50IHJldCwgZG9fd2FrZXVwLCBlcnI7CiAJc3RydWN0IHNwbGljZV9kZXNjIHNkOwogCkBAIC00NzQsNTggKzcwOCw2NiBAQAogCXNkLnRvdGFsX2xlbiA9IGxlbjsKIAlzZC5mbGFncyA9IGZsYWdzOwogCXNkLmZpbGUgPSBvdXQ7Ci0Jc2QucG9zID0gb3V0LT5mX3BvczsKKwlzZC5wb3MgPSAqcHBvczsKIAotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwlpZiAocGlwZS0+aW5vZGUpCisJCW11dGV4X2xvY2soJnBpcGUtPmlub2RlLT5pX211dGV4KTsKIAotCWluZm8gPSBpbm9kZS0+aV9waXBlOwogCWZvciAoOzspIHsKLQkJaW50IGJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7Ci0KLQkJaWYgKGJ1ZnMpIHsKLQkJCWludCBjdXJidWYgPSBpbmZvLT5jdXJidWY7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBjdXJidWY7CisJCWlmIChwaXBlLT5ucmJ1ZnMpIHsKKwkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZS0+YnVmcyArIHBpcGUtPmN1cmJ1ZjsKIAkJCXN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHMgPSBidWYtPm9wczsKIAogCQkJc2QubGVuID0gYnVmLT5sZW47CiAJCQlpZiAoc2QubGVuID4gc2QudG90YWxfbGVuKQogCQkJCXNkLmxlbiA9IHNkLnRvdGFsX2xlbjsKIAotCQkJZXJyID0gYWN0b3IoaW5mbywgYnVmLCAmc2QpOwotCQkJaWYgKGVycikgeworCQkJZXJyID0gYWN0b3IocGlwZSwgYnVmLCAmc2QpOworCQkJaWYgKGVyciA8PSAwKSB7CiAJCQkJaWYgKCFyZXQgJiYgZXJyICE9IC1FTk9EQVRBKQogCQkJCQlyZXQgPSBlcnI7CiAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcmV0ICs9IHNkLmxlbjsKLQkJCWJ1Zi0+b2Zmc2V0ICs9IHNkLmxlbjsKLQkJCWJ1Zi0+bGVuIC09IHNkLmxlbjsKKwkJCXJldCArPSBlcnI7CisJCQlidWYtPm9mZnNldCArPSBlcnI7CisJCQlidWYtPmxlbiAtPSBlcnI7CisKKwkJCXNkLmxlbiAtPSBlcnI7CisJCQlzZC5wb3MgKz0gZXJyOworCQkJc2QudG90YWxfbGVuIC09IGVycjsKKwkJCWlmIChzZC5sZW4pCisJCQkJY29udGludWU7CisKIAkJCWlmICghYnVmLT5sZW4pIHsKIAkJCQlidWYtPm9wcyA9IE5VTEw7Ci0JCQkJb3BzLT5yZWxlYXNlKGluZm8sIGJ1Zik7Ci0JCQkJY3VyYnVmID0gKGN1cmJ1ZiArIDEpICYgKFBJUEVfQlVGRkVSUyAtIDEpOwotCQkJCWluZm8tPmN1cmJ1ZiA9IGN1cmJ1ZjsKLQkJCQlpbmZvLT5ucmJ1ZnMgPSAtLWJ1ZnM7Ci0JCQkJZG9fd2FrZXVwID0gMTsKKwkJCQlvcHMtPnJlbGVhc2UocGlwZSwgYnVmKTsKKwkJCQlwaXBlLT5jdXJidWYgPSAocGlwZS0+Y3VyYnVmICsgMSkgJiAoUElQRV9CVUZGRVJTIC0gMSk7CisJCQkJcGlwZS0+bnJidWZzLS07CisJCQkJaWYgKHBpcGUtPmlub2RlKQorCQkJCQlkb193YWtldXAgPSAxOwogCQkJfQogCi0JCQlzZC5wb3MgKz0gc2QubGVuOwotCQkJc2QudG90YWxfbGVuIC09IHNkLmxlbjsKIAkJCWlmICghc2QudG90YWxfbGVuKQogCQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGJ1ZnMpCisJCWlmIChwaXBlLT5ucmJ1ZnMpCiAJCQljb250aW51ZTsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSkKKwkJaWYgKCFwaXBlLT53cml0ZXJzKQogCQkJYnJlYWs7Ci0JCWlmICghUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKSkgeworCQlpZiAoIXBpcGUtPndhaXRpbmdfd3JpdGVycykgewogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJfQogCisJCWlmIChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWlmICghcmV0KQogCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKQEAgLTUzMywxMDUgKzc3NSw0OTcgQEAKIAkJfQogCiAJCWlmIChkb193YWtldXApIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSxTSUdJTyxQT0xMX09VVCk7CisJCQlzbXBfbWIoKTsKKwkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwaXBlLT53YWl0KSkKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmcGlwZS0+d2FpdCk7CisJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJCQlkb193YWtldXAgPSAwOwogCQl9CiAKLQkJcGlwZV93YWl0KGlub2RlKTsKKwkJcGlwZV93YWl0KHBpcGUpOwogCX0KIAotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfdW5sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfT1VUKTsKKwkJc21wX21iKCk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwaXBlLT53YWl0KSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CisJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAl9CiAKLQltdXRleF9sb2NrKCZvdXQtPmZfbWFwcGluZy0+aG9zdC0+aV9tdXRleCk7Ci0Jb3V0LT5mX3BvcyA9IHNkLnBvczsKLQltdXRleF91bmxvY2soJm91dC0+Zl9tYXBwaW5nLT5ob3N0LT5pX211dGV4KTsKIAlyZXR1cm4gcmV0OwotCiB9CiAKLXNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqb3V0LAotCQkJCSAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQorLyoqCisgKiBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlIC0gc3BsaWNlIGRhdGEgZnJvbSBhIHBpcGUgdG8gYSBmaWxlCisgKiBAcGlwZToJcGlwZSBpbmZvCisgKiBAb3V0OglmaWxlIHRvIHdyaXRlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCisgKiBAZmxhZ3M6CXNwbGljZSBtb2RpZmllciBmbGFncworICoKKyAqIFdpbGwgZWl0aGVyIG1vdmUgb3IgY29weSBwYWdlcyAoZGV0ZXJtaW5lZCBieSBAZmxhZ3Mgb3B0aW9ucykgZnJvbQorICogdGhlIGdpdmVuIHBpcGUgaW5vZGUgdG8gdGhlIGdpdmVuIGZpbGUuCisgKgorICovCitzc2l6ZV90CitnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsCisJCQkgIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXJldHVybiBtb3ZlX2Zyb21fcGlwZShpbm9kZSwgb3V0LCBsZW4sIGZsYWdzLCBwaXBlX3RvX2ZpbGUpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb3V0LT5mX21hcHBpbmc7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSBzcGxpY2VfZnJvbV9waXBlKHBpcGUsIG91dCwgcHBvcywgbGVuLCBmbGFncywgcGlwZV90b19maWxlKTsKKwlpZiAocmV0ID4gMCkgeworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKworCQkqcHBvcyArPSByZXQ7CisKKwkJLyoKKwkJICogSWYgZmlsZSBvciBpbm9kZSBpcyBTWU5DIGFuZCB3ZSBhY3R1YWxseSB3cm90ZSBzb21lIGRhdGEsCisJCSAqIHN5bmMgaXQuCisJCSAqLworCQlpZiAodW5saWtlbHkoKG91dC0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7CisJCQlpbnQgZXJyOworCisJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCQllcnIgPSBnZW5lcmljX29zeW5jX2lub2RlKGlub2RlLCBtYXBwaW5nLAorCQkJCQkJICBPU1lOQ19NRVRBREFUQXxPU1lOQ19EQVRBKTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCisJCQlpZiAoZXJyKQorCQkJCXJldCA9IGVycjsKKwkJfQorCX0KKworCXJldHVybiByZXQ7CiB9CiAKLXNzaXplX3QgZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKm91dCwKLQkJCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUpOworCisvKioKKyAqIGdlbmVyaWNfc3BsaWNlX3NlbmRwYWdlIC0gc3BsaWNlIGRhdGEgZnJvbSBhIHBpcGUgdG8gYSBzb2NrZXQKKyAqIEBpbm9kZToJcGlwZSBpbm9kZQorICogQG91dDoJc29ja2V0IHRvIHdyaXRlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCisgKiBAZmxhZ3M6CXNwbGljZSBtb2RpZmllciBmbGFncworICoKKyAqIFdpbGwgc2VuZCBAbGVuIGJ5dGVzIGZyb20gdGhlIHBpcGUgdG8gYSBuZXR3b3JrIHNvY2tldC4gTm8gZGF0YSBjb3B5aW5nCisgKiBpcyBpbnZvbHZlZC4KKyAqCisgKi8KK3NzaXplX3QgZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IGZpbGUgKm91dCwKKwkJCQlsb2ZmX3QgKnBwb3MsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlyZXR1cm4gbW92ZV9mcm9tX3BpcGUoaW5vZGUsIG91dCwgbGVuLCBmbGFncywgcGlwZV90b19zZW5kcGFnZSk7CisJcmV0dXJuIHNwbGljZV9mcm9tX3BpcGUocGlwZSwgb3V0LCBwcG9zLCBsZW4sIGZsYWdzLCBwaXBlX3RvX3NlbmRwYWdlKTsKIH0KIAotc3RhdGljIGxvbmcgZG9fc3BsaWNlX2Zyb20oc3RydWN0IGlub2RlICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LCBzaXplX3QgbGVuLAotCQkJICAgdW5zaWduZWQgaW50IGZsYWdzKQorRVhQT1JUX1NZTUJPTChnZW5lcmljX3NwbGljZV9zZW5kcGFnZSk7CisKKy8qCisgKiBBdHRlbXB0IHRvIGluaXRpYXRlIGEgc3BsaWNlIGZyb20gcGlwZSB0byBmaWxlLgorICovCitzdGF0aWMgbG9uZyBkb19zcGxpY2VfZnJvbShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LAorCQkJICAgbG9mZl90ICpwcG9zLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JbG9mZl90IHBvczsKIAlpbnQgcmV0OwogCi0JaWYgKCFvdXQtPmZfb3AgfHwgIW91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKQorCWlmICh1bmxpa2VseSghb3V0LT5mX29wIHx8ICFvdXQtPmZfb3AtPnNwbGljZV93cml0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEob3V0LT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJaWYgKHVubGlrZWx5KCEob3V0LT5mX21vZGUgJiBGTU9ERV9XUklURSkpKQogCQlyZXR1cm4gLUVCQURGOwogCi0JcG9zID0gb3V0LT5mX3BvczsKLQlyZXQgPSByd192ZXJpZnlfYXJlYShXUklURSwgb3V0LCAmcG9zLCBsZW4pOworCXJldCA9IHJ3X3ZlcmlmeV9hcmVhKFdSSVRFLCBvdXQsIHBwb3MsIGxlbik7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIG91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKHBpcGUsIG91dCwgbGVuLCBmbGFncyk7CisJcmV0dXJuIG91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKHBpcGUsIG91dCwgcHBvcywgbGVuLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBsb25nIGRvX3NwbGljZV90byhzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBpbm9kZSAqcGlwZSwgc2l6ZV90IGxlbiwKKy8qCisgKiBBdHRlbXB0IHRvIGluaXRpYXRlIGEgc3BsaWNlIGZyb20gYSBmaWxlIHRvIGEgcGlwZS4KKyAqLworc3RhdGljIGxvbmcgZG9fc3BsaWNlX3RvKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAorCQkJIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCiAJCQkgdW5zaWduZWQgaW50IGZsYWdzKQogewotCWxvZmZfdCBwb3MsIGlzaXplLCBsZWZ0OworCWxvZmZfdCBpc2l6ZSwgbGVmdDsKIAlpbnQgcmV0OwogCi0JaWYgKCFpbi0+Zl9vcCB8fCAhaW4tPmZfb3AtPnNwbGljZV9yZWFkKQorCWlmICh1bmxpa2VseSghaW4tPmZfb3AgfHwgIWluLT5mX29wLT5zcGxpY2VfcmVhZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEoaW4tPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCWlmICh1bmxpa2VseSghKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkpCiAJCXJldHVybiAtRUJBREY7CiAKLQlwb3MgPSBpbi0+Zl9wb3M7Ci0JcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sICZwb3MsIGxlbik7CisJcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sIHBwb3MsIGxlbik7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlyZXR1cm4gcmV0OwogCiAJaXNpemUgPSBpX3NpemVfcmVhZChpbi0+Zl9tYXBwaW5nLT5ob3N0KTsKLQlpZiAodW5saWtlbHkoaW4tPmZfcG9zID49IGlzaXplKSkKKwlpZiAodW5saWtlbHkoKnBwb3MgPj0gaXNpemUpKQogCQlyZXR1cm4gMDsKIAkKLQlsZWZ0ID0gaXNpemUgLSBpbi0+Zl9wb3M7Ci0JaWYgKGxlZnQgPCBsZW4pCisJbGVmdCA9IGlzaXplIC0gKnBwb3M7CisJaWYgKHVubGlrZWx5KGxlZnQgPCBsZW4pKQogCQlsZW4gPSBsZWZ0OwogCi0JcmV0dXJuIGluLT5mX29wLT5zcGxpY2VfcmVhZChpbiwgcGlwZSwgbGVuLCBmbGFncyk7CisJcmV0dXJuIGluLT5mX29wLT5zcGxpY2VfcmVhZChpbiwgcHBvcywgcGlwZSwgbGVuLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBsb25nIGRvX3NwbGljZShzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBmaWxlICpvdXQsIHNpemVfdCBsZW4sCi0JCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKK2xvbmcgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywgc3RydWN0IGZpbGUgKm91dCwKKwkJICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBpbm9kZSAqcGlwZTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOworCWxvbmcgcmV0LCBieXRlczsKKwlsb2ZmX3Qgb3V0X29mZjsKKwl1bW9kZV90IGlfbW9kZTsKKwlpbnQgaTsKIAotCXBpcGUgPSBpbi0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JaWYgKHBpcGUtPmlfcGlwZSkKLQkJcmV0dXJuIGRvX3NwbGljZV9mcm9tKHBpcGUsIG91dCwgbGVuLCBmbGFncyk7CisJLyoKKwkgKiBXZSByZXF1aXJlIHRoZSBpbnB1dCBiZWluZyBhIHJlZ3VsYXIgZmlsZSwgYXMgd2UgZG9uJ3Qgd2FudCB0bworCSAqIHJhbmRvbWx5IGRyb3AgZGF0YSBmb3IgZWcgc29ja2V0IC0+IHNvY2tldCBzcGxpY2luZy4gVXNlIHRoZQorCSAqIHBpcGVkIHNwbGljaW5nIGZvciB0aGF0IQorCSAqLworCWlfbW9kZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlOworCWlmICh1bmxpa2VseSghU19JU1JFRyhpX21vZGUpICYmICFTX0lTQkxLKGlfbW9kZSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBpcGUgPSBvdXQtPmZfZGVudHJ5LT5kX2lub2RlOwotCWlmIChwaXBlLT5pX3BpcGUpCi0JCXJldHVybiBkb19zcGxpY2VfdG8oaW4sIHBpcGUsIGxlbiwgZmxhZ3MpOworCS8qCisJICogbmVpdGhlciBpbiBub3Igb3V0IGlzIGEgcGlwZSwgc2V0dXAgYW4gaW50ZXJuYWwgcGlwZSBhdHRhY2hlZCB0bworCSAqICdvdXQnIGFuZCB0cmFuc2ZlciB0aGUgd2FudGVkIGRhdGEgZnJvbSAnaW4nIHRvICdvdXQnIHRocm91Z2ggdGhhdAorCSAqLworCXBpcGUgPSBjdXJyZW50LT5zcGxpY2VfcGlwZTsKKwlpZiAodW5saWtlbHkoIXBpcGUpKSB7CisJCXBpcGUgPSBhbGxvY19waXBlX2luZm8oTlVMTCk7CisJCWlmICghcGlwZSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgYW4gaW1tZWRpYXRlIHJlYWRlciwgYnV0IHdlJ2xsIHJlYWQgdGhlIHN0dWZmCisJCSAqIG91dCBvZiB0aGUgcGlwZSByaWdodCBhZnRlciB0aGUgc3BsaWNlX3RvX3BpcGUoKS4gU28gc2V0CisJCSAqIFBJUEVfUkVBREVSUyBhcHByb3ByaWF0ZWx5LgorCQkgKi8KKwkJcGlwZS0+cmVhZGVycyA9IDE7CisKKwkJY3VycmVudC0+c3BsaWNlX3BpcGUgPSBwaXBlOworCX0KKworCS8qCisJICogRG8gdGhlIHNwbGljZS4KKwkgKi8KKwlyZXQgPSAwOworCWJ5dGVzID0gMDsKKwlvdXRfb2ZmID0gMDsKKworCXdoaWxlIChsZW4pIHsKKwkJc2l6ZV90IHJlYWRfbGVuLCBtYXhfcmVhZF9sZW47CisKKwkJLyoKKwkJICogRG8gYXQgbW9zdCBQSVBFX0JVRkZFUlMgcGFnZXMgd29ydGggb2YgdHJhbnNmZXI6CisJCSAqLworCQltYXhfcmVhZF9sZW4gPSBtaW4obGVuLCAoc2l6ZV90KShQSVBFX0JVRkZFUlMqUEFHRV9TSVpFKSk7CisKKwkJcmV0ID0gZG9fc3BsaWNlX3RvKGluLCBwcG9zLCBwaXBlLCBtYXhfcmVhZF9sZW4sIGZsYWdzKTsKKwkJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQkJZ290byBvdXRfcmVsZWFzZTsKKworCQlyZWFkX2xlbiA9IHJldDsKKworCQkvKgorCQkgKiBOT1RFOiBub25ibG9ja2luZyBtb2RlIG9ubHkgYXBwbGllcyB0byB0aGUgaW5wdXQuIFdlCisJCSAqIG11c3Qgbm90IGRvIHRoZSBvdXRwdXQgaW4gbm9uYmxvY2tpbmcgbW9kZSBhcyB0aGVuIHdlCisJCSAqIGNvdWxkIGdldCBzdHVjayBkYXRhIGluIHRoZSBpbnRlcm5hbCBwaXBlOgorCQkgKi8KKwkJcmV0ID0gZG9fc3BsaWNlX2Zyb20ocGlwZSwgb3V0LCAmb3V0X29mZiwgcmVhZF9sZW4sCisJCQkJICAgICBmbGFncyAmIH5TUExJQ0VfRl9OT05CTE9DSyk7CisJCWlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwkJYnl0ZXMgKz0gcmV0OworCQlsZW4gLT0gcmV0OworCisJCS8qCisJCSAqIEluIG5vbmJsb2NraW5nIG1vZGUsIGlmIHdlIGdvdCBiYWNrIGEgc2hvcnQgcmVhZCB0aGVuCisJCSAqIHRoYXQgd2FzIGR1ZSB0byBlaXRoZXIgYW4gSU8gZXJyb3Igb3IgZHVlIHRvIHRoZQorCQkgKiBwYWdlY2FjaGUgZW50cnkgbm90IGJlaW5nIHRoZXJlLiBJbiB0aGUgSU8gZXJyb3IgY2FzZQorCQkgKiB0aGUgX25leHRfIHNwbGljZSBhdHRlbXB0IHdpbGwgcHJvZHVjZSBhIGNsZWFuIElPIGVycm9yCisJCSAqIHJldHVybiB2YWx1ZSAobm90IGEgc2hvcnQgcmVhZCksIHNvIGluIGJvdGggY2FzZXMgaXQncworCQkgKiBjb3JyZWN0IHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBoZXJlOgorCQkgKi8KKwkJaWYgKChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSAmJiAocmVhZF9sZW4gPCBtYXhfcmVhZF9sZW4pKQorCQkJYnJlYWs7CisJfQorCisJcGlwZS0+bnJidWZzID0gcGlwZS0+Y3VyYnVmID0gMDsKKworCXJldHVybiBieXRlczsKKworb3V0X3JlbGVhc2U6CisJLyoKKwkgKiBJZiB3ZSBkaWQgYW4gaW5jb21wbGV0ZSB0cmFuc2ZlciB3ZSBtdXN0IHJlbGVhc2UKKwkgKiB0aGUgcGlwZSBidWZmZXJzIGluIHF1ZXN0aW9uOgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBQSVBFX0JVRkZFUlM7IGkrKykgeworCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBpOworCisJCWlmIChidWYtPm9wcykgeworCQkJYnVmLT5vcHMtPnJlbGVhc2UocGlwZSwgYnVmKTsKKwkJCWJ1Zi0+b3BzID0gTlVMTDsKKwkJfQorCX0KKwlwaXBlLT5ucmJ1ZnMgPSBwaXBlLT5jdXJidWYgPSAwOworCisJLyoKKwkgKiBJZiB3ZSB0cmFuc2ZlcnJlZCBzb21lIGRhdGEsIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzOgorCSAqLworCWlmIChieXRlcyA+IDApCisJCXJldHVybiBieXRlczsKKworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woZG9fc3BsaWNlX2RpcmVjdCk7CisKKy8qCisgKiBEZXRlcm1pbmUgd2hlcmUgdG8gc3BsaWNlIHRvL2Zyb20uCisgKi8KK3N0YXRpYyBsb25nIGRvX3NwbGljZShzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCBfX3VzZXIgKm9mZl9pbiwKKwkJICAgICAgc3RydWN0IGZpbGUgKm91dCwgbG9mZl90IF9fdXNlciAqb2ZmX291dCwKKwkJICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CisJbG9mZl90IG9mZnNldCwgKm9mZjsKKwlsb25nIHJldDsKKworCXBpcGUgPSBpbi0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcGlwZTsKKwlpZiAocGlwZSkgeworCQlpZiAob2ZmX2luKQorCQkJcmV0dXJuIC1FU1BJUEU7CisJCWlmIChvZmZfb3V0KSB7CisJCQlpZiAob3V0LT5mX29wLT5sbHNlZWsgPT0gbm9fbGxzZWVrKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZvZmZzZXQsIG9mZl9vdXQsIHNpemVvZihsb2ZmX3QpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCW9mZiA9ICZvZmZzZXQ7CisJCX0gZWxzZQorCQkJb2ZmID0gJm91dC0+Zl9wb3M7CisKKwkJcmV0ID0gZG9fc3BsaWNlX2Zyb20ocGlwZSwgb3V0LCBvZmYsIGxlbiwgZmxhZ3MpOworCisJCWlmIChvZmZfb3V0ICYmIGNvcHlfdG9fdXNlcihvZmZfb3V0LCBvZmYsIHNpemVvZihsb2ZmX3QpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaXBlID0gb3V0LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCWlmIChwaXBlKSB7CisJCWlmIChvZmZfb3V0KQorCQkJcmV0dXJuIC1FU1BJUEU7CisJCWlmIChvZmZfaW4pIHsKKwkJCWlmIChpbi0+Zl9vcC0+bGxzZWVrID09IG5vX2xsc2VlaykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmb2Zmc2V0LCBvZmZfaW4sIHNpemVvZihsb2ZmX3QpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCW9mZiA9ICZvZmZzZXQ7CisJCX0gZWxzZQorCQkJb2ZmID0gJmluLT5mX3BvczsKKworCQlyZXQgPSBkb19zcGxpY2VfdG8oaW4sIG9mZiwgcGlwZSwgbGVuLCBmbGFncyk7CisKKwkJaWYgKG9mZl9pbiAmJiBjb3B5X3RvX3VzZXIob2ZmX2luLCBvZmYsIHNpemVvZihsb2ZmX3QpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQorLyoKKyAqIE1hcCBhbiBpb3YgaW50byBhbiBhcnJheSBvZiBwYWdlcyBhbmQgb2Zmc2V0L2xlbmd0aCB0dXBwbGVzLiBXaXRoIHRoZQorICogcGFydGlhbF9wYWdlIHN0cnVjdHVyZSwgd2UgY2FuIG1hcCBzZXZlcmFsIG5vbi1jb250aWd1b3VzIHJhbmdlcyBpbnRvCisgKiBvdXIgb25lcyBwYWdlc1tdIG1hcCBpbnN0ZWFkIG9mIHNwbGl0dGluZyB0aGF0IG9wZXJhdGlvbiBpbnRvIHBpZWNlcy4KKyAqIENvdWxkIGVhc2lseSBiZSBleHBvcnRlZCBhcyBhIGdlbmVyaWMgaGVscGVyIGZvciBvdGhlciB1c2VycywgaW4gd2hpY2gKKyAqIGNhc2Ugb25lIHdvdWxkIHByb2JhYmx5IHdhbnQgdG8gYWRkIGEgJ21heF9ucl9wYWdlcycgcGFyYW1ldGVyIGFzIHdlbGwuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2lvdmVjX3BhZ2VfYXJyYXkoY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqaW92LAorCQkJCXVuc2lnbmVkIGludCBucl92ZWNzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkJCXN0cnVjdCBwYXJ0aWFsX3BhZ2UgKnBhcnRpYWwsIGludCBhbGlnbmVkKQoreworCWludCBidWZmZXJzID0gMCwgZXJyb3IgPSAwOworCisJLyoKKwkgKiBJdCdzIG9rIHRvIHRha2UgdGhlIG1tYXBfc2VtIGZvciByZWFkaW5nLCBldmVuCisJICogYWNyb3NzIGEgImdldF91c2VyKCkiLgorCSAqLworCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXdoaWxlIChucl92ZWNzKSB7CisJCXVuc2lnbmVkIGxvbmcgb2ZmLCBucGFnZXM7CisJCXZvaWQgX191c2VyICpiYXNlOworCQlzaXplX3QgbGVuOworCQlpbnQgaTsKKworCQkvKgorCQkgKiBHZXQgdXNlciBhZGRyZXNzIGJhc2UgYW5kIGxlbmd0aCBmb3IgdGhpcyBpb3ZlYy4KKwkJICovCisJCWVycm9yID0gZ2V0X3VzZXIoYmFzZSwgJmlvdi0+aW92X2Jhc2UpOworCQlpZiAodW5saWtlbHkoZXJyb3IpKQorCQkJYnJlYWs7CisJCWVycm9yID0gZ2V0X3VzZXIobGVuLCAmaW92LT5pb3ZfbGVuKTsKKwkJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFNhbml0eSBjaGVjayB0aGlzIGlvdmVjLiAwIHJlYWQgc3VjY2VlZHMuCisJCSAqLworCQlpZiAodW5saWtlbHkoIWxlbikpCisJCQlicmVhazsKKwkJZXJyb3IgPSAtRUZBVUxUOworCQlpZiAodW5saWtlbHkoIWJhc2UpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogR2V0IHRoaXMgYmFzZSBvZmZzZXQgYW5kIG51bWJlciBvZiBwYWdlcywgdGhlbiBtYXAKKwkJICogaW4gdGhlIHVzZXIgcGFnZXMuCisJCSAqLworCQlvZmYgPSAodW5zaWduZWQgbG9uZykgYmFzZSAmIH5QQUdFX01BU0s7CisKKwkJLyoKKwkJICogSWYgYXNrZWQgZm9yIGFsaWdubWVudCwgdGhlIG9mZnNldCBtdXN0IGJlIHplcm8gYW5kIHRoZQorCQkgKiBsZW5ndGggYSBtdWx0aXBsZSBvZiB0aGUgUEFHRV9TSVpFLgorCQkgKi8KKwkJZXJyb3IgPSAtRUlOVkFMOworCQlpZiAoYWxpZ25lZCAmJiAob2ZmIHx8IGxlbiAmIH5QQUdFX01BU0spKQorCQkJYnJlYWs7CisKKwkJbnBhZ2VzID0gKG9mZiArIGxlbiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJCWlmIChucGFnZXMgPiBQSVBFX0JVRkZFUlMgLSBidWZmZXJzKQorCQkJbnBhZ2VzID0gUElQRV9CVUZGRVJTIC0gYnVmZmVyczsKKworCQllcnJvciA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgYmFzZSwgbnBhZ2VzLCAwLCAwLAorCQkJCSAgICAgICAmcGFnZXNbYnVmZmVyc10sIE5VTEwpOworCisJCWlmICh1bmxpa2VseShlcnJvciA8PSAwKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIEZpbGwgdGhpcyBjb250aWd1b3VzIHJhbmdlIGludG8gdGhlIHBhcnRpYWwgcGFnZSBtYXAuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgZXJyb3I7IGkrKykgeworCQkJY29uc3QgaW50IHBsZW4gPSBtaW5fdChzaXplX3QsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTsKKworCQkJcGFydGlhbFtidWZmZXJzXS5vZmZzZXQgPSBvZmY7CisJCQlwYXJ0aWFsW2J1ZmZlcnNdLmxlbiA9IHBsZW47CisKKwkJCW9mZiA9IDA7CisJCQlsZW4gLT0gcGxlbjsKKwkJCWJ1ZmZlcnMrKzsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRpZG4ndCBjb21wbGV0ZSB0aGlzIGlvdiwgc3RvcCBoZXJlIHNpbmNlIGl0IHByb2JhYmx5CisJCSAqIG1lYW5zIHdlIGhhdmUgdG8gbW92ZSBzb21lIG9mIHRoaXMgaW50byBhIHBpcGUgdG8KKwkJICogYmUgYWJsZSB0byBjb250aW51ZS4KKwkJICovCisJCWlmIChsZW4pCisJCQlicmVhazsKKworCQkvKgorCQkgKiBEb24ndCBjb250aW51ZSBpZiB3ZSBtYXBwZWQgZmV3ZXIgcGFnZXMgdGhhbiB3ZSBhc2tlZCBmb3IsCisJCSAqIG9yIGlmIHdlIG1hcHBlZCB0aGUgbWF4IG51bWJlciBvZiBwYWdlcyB0aGF0IHdlIGhhdmUKKwkJICogcm9vbSBmb3IuCisJCSAqLworCQlpZiAoZXJyb3IgPCBucGFnZXMgfHwgYnVmZmVycyA9PSBQSVBFX0JVRkZFUlMpCisJCQlicmVhazsKKworCQlucl92ZWNzLS07CisJCWlvdisrOworCX0KKworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoYnVmZmVycykKKwkJcmV0dXJuIGJ1ZmZlcnM7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB2bXNwbGljZSBzcGxpY2VzIGEgdXNlciBhZGRyZXNzIHJhbmdlIGludG8gYSBwaXBlLiBJdCBjYW4gYmUgdGhvdWdodCBvZgorICogYXMgc3BsaWNlLWZyb20tbWVtb3J5LCB3aGVyZSB0aGUgcmVndWxhciBzcGxpY2UgaXMgc3BsaWNlLWZyb20tZmlsZSAob3IKKyAqIHRvIGZpbGUpLiBJbiBib3RoIGNhc2VzIHRoZSBvdXRwdXQgaXMgYSBwaXBlLCBuYXR1cmFsbHkuCisgKgorICogTm90ZSB0aGF0IHZtc3BsaWNlIG9ubHkgc3VwcG9ydHMgc3BsaWNpbmcgX2Zyb21fIHVzZXIgbWVtb3J5IHRvIGEgcGlwZSwKKyAqIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gU3BsaWNpbmcgZnJvbSB1c2VyIG1lbW9yeSBpcyBhIHNpbXBsZSBvcGVyYXRpb24KKyAqIHRoYXQgY2FuIGJlIHN1cHBvcnRlZCB3aXRob3V0IGFueSBmdW5reSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIG9yIG5hc3R5CisgKiB2bSB0cmlja3MuIFdlIHNpbXBseSBtYXAgaW4gdGhlIHVzZXIgbWVtb3J5IGFuZCBmaWxsIHRoZW0gaW50byBhIHBpcGUuCisgKiBUaGUgcmV2ZXJzZSBpc24ndCBxdWl0ZSBhcyBlYXN5LCB0aG91Z2guIFRoZXJlIGFyZSB0d28gcG9zc2libGUgc29sdXRpb25zCisgKiBmb3IgdGhhdDoKKyAqCisgKgktIG1lbWNweSgpIHRoZSBkYXRhIGludGVybmFsbHksIGF0IHdoaWNoIHBvaW50IHdlIG1pZ2h0IGFzIHdlbGwganVzdAorICoJICBkbyBhIHJlZ3VsYXIgcmVhZCgpIG9uIHRoZSBidWZmZXIgYW55d2F5LgorICoJLSBMb3RzIG9mIG5hc3R5IHZtIHRyaWNrcywgdGhhdCBhcmUgbmVpdGhlciBmYXN0IG5vciBmbGV4aWJsZSAoaXQKKyAqCSAgaGFzIHJlc3RyaWN0aW9uIGxpbWl0YXRpb25zIG9uIGJvdGggZW5kcyBvZiB0aGUgcGlwZSkuCisgKgorICogQWxhcywgaXQgaXNuJ3QgaGVyZS4KKyAqCisgKi8KK3N0YXRpYyBsb25nIGRvX3Ztc3BsaWNlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICppb3YsCisJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcGlwZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3QgcGFydGlhbF9wYWdlIHBhcnRpYWxbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyBzcGQgPSB7CisJCS5wYWdlcyA9IHBhZ2VzLAorCQkucGFydGlhbCA9IHBhcnRpYWwsCisJCS5mbGFncyA9IGZsYWdzLAorCQkub3BzID0gJnVzZXJfcGFnZV9waXBlX2J1Zl9vcHMsCisJfTsKKworCWlmICh1bmxpa2VseSghcGlwZSkpCisJCXJldHVybiAtRUJBREY7CisJaWYgKHVubGlrZWx5KG5yX3NlZ3MgPiBVSU9fTUFYSU9WKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAodW5saWtlbHkoIW5yX3NlZ3MpKQorCQlyZXR1cm4gMDsKKworCXNwZC5ucl9wYWdlcyA9IGdldF9pb3ZlY19wYWdlX2FycmF5KGlvdiwgbnJfc2VncywgcGFnZXMsIHBhcnRpYWwsCisJCQkJCSAgICBmbGFncyAmIFNQTElDRV9GX0dJRlQpOworCWlmIChzcGQubnJfcGFnZXMgPD0gMCkKKwkJcmV0dXJuIHNwZC5ucl9wYWdlczsKKworCXJldHVybiBzcGxpY2VfdG9fcGlwZShwaXBlLCAmc3BkKTsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c192bXNwbGljZShpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKmlvdiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJbG9uZyBlcnJvcjsKKwlpbnQgZnB1dDsKKworCWVycm9yID0gLUVCQURGOworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dCk7CisJaWYgKGZpbGUpIHsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJZXJyb3IgPSBkb192bXNwbGljZShmaWxlLCBpb3YsIG5yX3NlZ3MsIGZsYWdzKTsKKworCQlmcHV0X2xpZ2h0KGZpbGUsIGZwdXQpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkX2luLCBsb2ZmX3QgX191c2VyICpvZmZfaW4sCisJCQkgICBpbnQgZmRfb3V0LCBsb2ZmX3QgX191c2VyICpvZmZfb3V0LAorCQkJICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWxvbmcgZXJyb3I7CiAJc3RydWN0IGZpbGUgKmluLCAqb3V0OwpAQCAtNjQxLDEzICsxMjc1LDE1IEBACiAJCXJldHVybiAwOwogCiAJZXJyb3IgPSAtRUJBREY7Ci0JaW4gPSBmZ2V0X2xpZ2h0KGZkaW4sICZmcHV0X2luKTsKKwlpbiA9IGZnZXRfbGlnaHQoZmRfaW4sICZmcHV0X2luKTsKIAlpZiAoaW4pIHsKIAkJaWYgKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlvdXQgPSBmZ2V0X2xpZ2h0KGZkb3V0LCAmZnB1dF9vdXQpOworCQkJb3V0ID0gZmdldF9saWdodChmZF9vdXQsICZmcHV0X291dCk7CiAJCQlpZiAob3V0KSB7CiAJCQkJaWYgKG91dC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCQkJCWVycm9yID0gZG9fc3BsaWNlKGluLCBvdXQsIGxlbiwgZmxhZ3MpOworCQkJCQllcnJvciA9IGRvX3NwbGljZShpbiwgb2ZmX2luLAorCQkJCQkJCSAgb3V0LCBvZmZfb3V0LAorCQkJCQkJCSAgbGVuLCBmbGFncyk7CiAJCQkJZnB1dF9saWdodChvdXQsIGZwdXRfb3V0KTsKIAkJCX0KIAkJfQpAQCAtNjU3LDMgKzEyOTMsMTk4IEBACiAKIAlyZXR1cm4gZXJyb3I7CiB9CisKKy8qCisgKiBMaW5rIGNvbnRlbnRzIG9mIGlwaXBlIHRvIG9waXBlLgorICovCitzdGF0aWMgaW50IGxpbmtfcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppcGlwZSwKKwkJICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpvcGlwZSwKKwkJICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBpcGVfYnVmZmVyICppYnVmLCAqb2J1ZjsKKwlpbnQgcmV0LCBkb193YWtldXAsIGksIGlwaXBlX2ZpcnN0OworCisJcmV0ID0gZG9fd2FrZXVwID0gaXBpcGVfZmlyc3QgPSAwOworCisJLyoKKwkgKiBQb3RlbnRpYWwgQUJCQSBkZWFkbG9jaywgd29yayBhcm91bmQgaXQgYnkgb3JkZXJpbmcgbG9jaworCSAqIGdyYWJiaW5nIGJ5IGlub2RlIGFkZHJlc3MuIE90aGVyd2lzZSB0d28gZGlmZmVyZW50IHByb2Nlc3NlcworCSAqIGNvdWxkIGRlYWRsb2NrIChvbmUgZG9pbmcgdGVlIGZyb20gQSAtPiBCLCB0aGUgb3RoZXIgZnJvbSBCIC0+IEEpLgorCSAqLworCWlmIChpcGlwZS0+aW5vZGUgPCBvcGlwZS0+aW5vZGUpIHsKKwkJaXBpcGVfZmlyc3QgPSAxOworCQltdXRleF9sb2NrKCZpcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCQltdXRleF9sb2NrKCZvcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCX0gZWxzZSB7CisJCW11dGV4X2xvY2soJm9waXBlLT5pbm9kZS0+aV9tdXRleCk7CisJCW11dGV4X2xvY2soJmlwaXBlLT5pbm9kZS0+aV9tdXRleCk7CisJfQorCisJZm9yIChpID0gMDs7IGkrKykgeworCQlpZiAoIW9waXBlLT5yZWFkZXJzKSB7CisJCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IC1FUElQRTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChpcGlwZS0+bnJidWZzIC0gaSkgeworCQkJaWJ1ZiA9IGlwaXBlLT5idWZzICsgKChpcGlwZS0+Y3VyYnVmICsgaSkgJiAoUElQRV9CVUZGRVJTIC0gMSkpOworCisJCQkvKgorCQkJICogSWYgd2UgaGF2ZSByb29tLCBmaWxsIHRoaXMgYnVmZmVyCisJCQkgKi8KKwkJCWlmIChvcGlwZS0+bnJidWZzIDwgUElQRV9CVUZGRVJTKSB7CisJCQkJaW50IG5idWYgPSAob3BpcGUtPmN1cmJ1ZiArIG9waXBlLT5ucmJ1ZnMpICYgKFBJUEVfQlVGRkVSUyAtIDEpOworCisJCQkJLyoKKwkJCQkgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhpcyBwaXBlIGJ1ZmZlciwKKwkJCQkgKiBzbyB3ZSBjYW4gY29weSB0aGUgY29udGVudHMgb3Zlci4KKwkJCQkgKi8KKwkJCQlpYnVmLT5vcHMtPmdldChpcGlwZSwgaWJ1Zik7CisKKwkJCQlvYnVmID0gb3BpcGUtPmJ1ZnMgKyBuYnVmOworCQkJCSpvYnVmID0gKmlidWY7CisKKwkJCQkvKgorCQkJCSAqIERvbid0IGluaGVyaXQgdGhlIGdpZnQgZmxhZywgd2UgbmVlZCB0bworCQkJCSAqIHByZXZlbnQgbXVsdGlwbGUgc3RlYWxzIG9mIHRoaXMgcGFnZS4KKwkJCQkgKi8KKwkJCQlvYnVmLT5mbGFncyAmPSB+UElQRV9CVUZfRkxBR19HSUZUOworCisJCQkJaWYgKG9idWYtPmxlbiA+IGxlbikKKwkJCQkJb2J1Zi0+bGVuID0gbGVuOworCisJCQkJb3BpcGUtPm5yYnVmcysrOworCQkJCWRvX3dha2V1cCA9IDE7CisJCQkJcmV0ICs9IG9idWYtPmxlbjsKKwkJCQlsZW4gLT0gb2J1Zi0+bGVuOworCisJCQkJaWYgKCFsZW4pCisJCQkJCWJyZWFrOworCQkJCWlmIChvcGlwZS0+bnJidWZzIDwgUElQRV9CVUZGRVJTKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIGhhdmUgaW5wdXQgYXZhaWxhYmxlLCBidXQgbm8gb3V0cHV0IHJvb20uCisJCQkgKiBJZiB3ZSBhbHJlYWR5IGNvcGllZCBkYXRhLCByZXR1cm4gdGhhdC4gSWYgd2UKKwkJCSAqIG5lZWQgdG8gZHJvcCB0aGUgb3BpcGUgbG9jaywgaXQgbXVzdCBiZSBvcmRlcmVkCisJCQkgKiBsYXN0IHRvIGF2b2lkIGRlYWRsb2Nrcy4KKwkJCSAqLworCQkJaWYgKChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB8fCAhaXBpcGVfZmlyc3QpIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZG9fd2FrZXVwKSB7CisJCQkJc21wX21iKCk7CisJCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm9waXBlLT53YWl0KSkKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvcGlwZS0+d2FpdCk7CisJCQkJa2lsbF9mYXN5bmMoJm9waXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOworCQkJCWRvX3dha2V1cCA9IDA7CisJCQl9CisKKwkJCW9waXBlLT53YWl0aW5nX3dyaXRlcnMrKzsKKwkJCXBpcGVfd2FpdChvcGlwZSk7CisJCQlvcGlwZS0+d2FpdGluZ193cml0ZXJzLS07CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIE5vIGlucHV0IGJ1ZmZlcnMsIGRvIHRoZSB1c3VhbCBjaGVja3MgZm9yIGF2YWlsYWJsZQorCQkgKiB3cml0ZXJzIGFuZCBibG9ja2luZyBhbmQgd2FpdCBpZiBuZWNlc3NhcnkKKwkJICovCisJCWlmICghaXBpcGUtPndyaXRlcnMpCisJCQlicmVhazsKKwkJaWYgKCFpcGlwZS0+d2FpdGluZ193cml0ZXJzKSB7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIHBpcGVfd2FpdCgpIGRyb3BzIHRoZSBpcGlwZSBtdXRleC4gVG8gYXZvaWQgZGVhZGxvY2tzCisJCSAqIHdpdGggYW5vdGhlciBwcm9jZXNzLCB3ZSBjYW4gb25seSBzYWZlbHkgZG8gdGhhdCBpZgorCQkgKiB0aGUgaXBpcGUgbG9jayBpcyBvcmRlcmVkIGxhc3QuCisJCSAqLworCQlpZiAoKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spIHx8IGlwaXBlX2ZpcnN0KSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZpcGlwZS0+d2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmaXBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmaXBpcGUtPmZhc3luY193cml0ZXJzLCBTSUdJTywgUE9MTF9PVVQpOworCisJCXBpcGVfd2FpdChpcGlwZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BpcGUtPmlub2RlLT5pX211dGV4KTsKKworCWlmIChkb193YWtldXApIHsKKwkJc21wX21iKCk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZvcGlwZS0+d2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9waXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJm9waXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgdGVlKDEpIGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3Mgb24gcGlwZXMuIEl0IGRvZXNuJ3QgY29weQorICogYW55IGRhdGEsIGl0IHNpbXBseSByZWZlcmVuY2VzIHRoZSAnaW4nIHBhZ2VzIG9uIHRoZSAnb3V0JyBwaXBlLgorICogVGhlICdmbGFncycgdXNlZCBhcmUgdGhlIFNQTElDRV9GXyogdmFyaWFudHMsIGN1cnJlbnRseSB0aGUgb25seQorICogYXBwbGljYWJsZSBvbmUgaXMgU1BMSUNFX0ZfTk9OQkxPQ0suCisgKi8KK3N0YXRpYyBsb25nIGRvX3RlZShzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBmaWxlICpvdXQsIHNpemVfdCBsZW4sCisJCSAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppcGlwZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKm9waXBlID0gb3V0LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCisJLyoKKwkgKiBMaW5rIGlwaXBlIHRvIHRoZSB0d28gb3V0cHV0IHBpcGVzLCBjb25zdW1pbmcgYXMgd2UgZ28gYWxvbmcuCisJICovCisJaWYgKGlwaXBlICYmIG9waXBlKQorCQlyZXR1cm4gbGlua19waXBlKGlwaXBlLCBvcGlwZSwgbGVuLCBmbGFncyk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c190ZWUoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmaWxlICppbjsKKwlpbnQgZXJyb3IsIGZwdXRfaW47CisKKwlpZiAodW5saWtlbHkoIWxlbikpCisJCXJldHVybiAwOworCisJZXJyb3IgPSAtRUJBREY7CisJaW4gPSBmZ2V0X2xpZ2h0KGZkaW4sICZmcHV0X2luKTsKKwlpZiAoaW4pIHsKKwkJaWYgKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCQlpbnQgZnB1dF9vdXQ7CisJCQlzdHJ1Y3QgZmlsZSAqb3V0ID0gZmdldF9saWdodChmZG91dCwgJmZwdXRfb3V0KTsKKworCQkJaWYgKG91dCkgeworCQkJCWlmIChvdXQtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJCQllcnJvciA9IGRvX3RlZShpbiwgb3V0LCBsZW4sIGZsYWdzKTsKKwkJCQlmcHV0X2xpZ2h0KG91dCwgZnB1dF9vdXQpOworCQkJfQorCQl9CisgCQlmcHV0X2xpZ2h0KGluLCBmcHV0X2luKTsKKyAJfQorCisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jCmluZGV4IDk5NDhjYzEuLjBmMjgyZmEgMTAwNjQ0Ci0tLSBhL2ZzL3N0YXQuYworKysgYi9mcy9zdGF0LmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotI2lmbmRlZiBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNpZiAhZGVmaW5lZChfX0FSQ0hfV0FOVF9TVEFUNjQpIHx8IGRlZmluZWQoX19BUkNIX1dBTlRfU1lTX05FV0ZTVEFUQVQpCiBhc21saW5rYWdlIGxvbmcgc3lzX25ld2ZzdGF0YXQoaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLAogCQkJCXN0cnVjdCBzdGF0IF9fdXNlciAqc3RhdGJ1ZiwgaW50IGZsYWcpCiB7CmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiNWZmZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3N5bmMuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIEhpZ2gtbGV2ZWwgc3luYygpLXJlbGF0ZWQgb3BlcmF0aW9ucworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisKKyNkZWZpbmUgVkFMSURfRkxBR1MgKFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRXxTWU5DX0ZJTEVfUkFOR0VfV1JJVEV8IFwKKwkJCVNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSKQorCisvKgorICogc3lzX3N5bmNfZmlsZV9yYW5nZSgpIHBlcm1pdHMgZmluZWx5IGNvbnRyb2xsZWQgc3luY2luZyBvdmVyIGEgc2VnbWVudCBvZgorICogYSBmaWxlIGluIHRoZSByYW5nZSBvZmZzZXQgLi4gKG9mZnNldCtuYnl0ZXMtMSkgaW5jbHVzaXZlLiAgSWYgbmJ5dGVzIGlzCisgKiB6ZXJvIHRoZW4gc3lzX3N5bmNfZmlsZV9yYW5nZSgpIHdpbGwgb3BlcmF0ZSBmcm9tIG9mZnNldCBvdXQgdG8gRU9GLgorICoKKyAqIFRoZSBmbGFnIGJpdHMgYXJlOgorICoKKyAqIFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRTogd2FpdCB1cG9uIHdyaXRlb3V0IG9mIGFsbCBwYWdlcyBpbiB0aGUgcmFuZ2UKKyAqIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSB3cml0ZS4KKyAqCisgKiBTWU5DX0ZJTEVfUkFOR0VfV1JJVEU6IGluaXRpYXRlIHdyaXRlb3V0IG9mIGFsbCB0aG9zZSBkaXJ0eSBwYWdlcyBpbiB0aGUKKyAqIHJhbmdlIHdoaWNoIGFyZSBub3QgcHJlc2VudGx5IHVuZGVyIHdyaXRlYmFjay4KKyAqCisgKiBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUjogd2FpdCB1cG9uIHdyaXRlb3V0IG9mIGFsbCBwYWdlcyBpbiB0aGUgcmFuZ2UKKyAqIGFmdGVyIHBlcmZvcm1pbmcgdGhlIHdyaXRlLgorICoKKyAqIFVzZWZ1bCBjb21iaW5hdGlvbnMgb2YgdGhlIGZsYWcgYml0cyBhcmU6CisgKgorICogU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFfFNZTkNfRklMRV9SQU5HRV9XUklURTogZW5zdXJlcyB0aGF0IGFsbCBwYWdlcworICogaW4gdGhlIHJhbmdlIHdoaWNoIHdlcmUgZGlydHkgb24gZW50cnkgdG8gc3lzX3N5bmNfZmlsZV9yYW5nZSgpIGFyZSBwbGFjZWQKKyAqIHVuZGVyIHdyaXRlb3V0LiAgVGhpcyBpcyBhIHN0YXJ0LXdyaXRlLWZvci1kYXRhLWludGVncml0eSBvcGVyYXRpb24uCisgKgorICogU1lOQ19GSUxFX1JBTkdFX1dSSVRFOiBzdGFydCB3cml0ZW91dCBvZiBhbGwgZGlydHkgcGFnZXMgaW4gdGhlIHJhbmdlIHdoaWNoCisgKiBhcmUgbm90IHByZXNlbnRseSB1bmRlciB3cml0ZW91dC4gIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGZsdXNoLXRvLWRpc2sKKyAqIG9wZXJhdGlvbi4gIE5vdCBzdWl0YWJsZSBmb3IgZGF0YSBpbnRlZ3JpdHkgb3BlcmF0aW9ucy4KKyAqCisgKiBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgKG9yIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSKTogd2FpdCBmb3IKKyAqIGNvbXBsZXRpb24gb2Ygd3JpdGVvdXQgb2YgYWxsIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgd2lsbCBiZSB1c2VkIGFmdGVyIGFuCisgKiBlYXJsaWVyIFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRXxTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgb3BlcmF0aW9uIHRvIHdhaXQKKyAqIGZvciB0aGF0IG9wZXJhdGlvbiB0byBjb21wbGV0ZSBhbmQgdG8gcmV0dXJuIHRoZSByZXN1bHQuCisgKgorICogU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFfFNZTkNfRklMRV9SQU5HRV9XUklURXxTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUjoKKyAqIGEgdHJhZGl0aW9uYWwgc3luYygpIG9wZXJhdGlvbi4gIFRoaXMgaXMgYSB3cml0ZS1mb3ItZGF0YS1pbnRlZ3JpdHkgb3BlcmF0aW9uCisgKiB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IGFsbCBwYWdlcyBpbiB0aGUgcmFuZ2Ugd2hpY2ggd2VyZSBkaXJ0eSBvbiBlbnRyeSB0bworICogc3lzX3N5bmNfZmlsZV9yYW5nZSgpIGFyZSBjb21taXR0ZWQgdG8gZGlzay4KKyAqCisgKgorICogU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFIGFuZCBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUiB3aWxsIGRldGVjdCBhbnkKKyAqIEkvTyBlcnJvcnMgb3IgRU5PU1BDIGNvbmRpdGlvbnMgYW5kIHdpbGwgcmV0dXJuIHRob3NlIHRvIHRoZSBjYWxsZXIsIGFmdGVyCisgKiBjbGVhcmluZyB0aGUgRUlPIGFuZCBFTk9TUEMgZmxhZ3MgaW4gdGhlIGFkZHJlc3Nfc3BhY2UuCisgKgorICogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbm9uZSBvZiB0aGVzZSBvcGVyYXRpb25zIHdyaXRlIG91dCB0aGUgZmlsZSdzCisgKiBtZXRhZGF0YS4gIFNvIHVubGVzcyB0aGUgYXBwbGljYXRpb24gaXMgc3RyaWN0bHkgcGVyZm9ybWluZyBvdmVyd3JpdGVzIG9mCisgKiBhbHJlYWR5LWluc3RhbnRpYXRlZCBkaXNrIGJsb2NrcywgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgaGVyZSB0aGF0IHRoZSBkYXRhCisgKiB3aWxsIGJlIGF2YWlsYWJsZSBhZnRlciBhIGNyYXNoLgorICovCithc21saW5rYWdlIGxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZShpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBuYnl0ZXMsCisJCQkJCXVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBmaWxlICpmaWxlOworCWxvZmZfdCBlbmRieXRlOwkJCS8qIGluY2x1c2l2ZSAqLworCWludCBmcHV0X25lZWRlZDsKKwl1bW9kZV90IGlfbW9kZTsKKworCXJldCA9IC1FSU5WQUw7CisJaWYgKGZsYWdzICYgflZBTElEX0ZMQUdTKQorCQlnb3RvIG91dDsKKworCWVuZGJ5dGUgPSBvZmZzZXQgKyBuYnl0ZXM7CisKKwlpZiAoKHM2NClvZmZzZXQgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAoKHM2NCllbmRieXRlIDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKGVuZGJ5dGUgPCBvZmZzZXQpCisJCWdvdG8gb3V0OworCisJaWYgKHNpemVvZihwZ29mZl90KSA9PSA0KSB7CisJCWlmIChvZmZzZXQgPj0gKDB4MTAwMDAwMDAwVUxMIDw8IFBBR0VfQ0FDSEVfU0hJRlQpKSB7CisJCQkvKgorCQkJICogVGhlIHJhbmdlIHN0YXJ0cyBvdXRzaWRlIGEgMzIgYml0IG1hY2hpbmUncworCQkJICogcGFnZWNhY2hlIGFkZHJlc3NpbmcgY2FwYWJpbGl0aWVzLiAgTGV0IGl0ICJzdWNjZWVkIgorCQkJICovCisJCQlyZXQgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGVuZGJ5dGUgPj0gKDB4MTAwMDAwMDAwVUxMIDw8IFBBR0VfQ0FDSEVfU0hJRlQpKSB7CisJCQkvKgorCQkJICogT3V0IHRvIEVPRgorCQkJICovCisJCQluYnl0ZXMgPSAwOworCQl9CisJfQorCisJaWYgKG5ieXRlcyA9PSAwKQorCQllbmRieXRlID0gLTE7CisJZWxzZQorCQllbmRieXRlLS07CQkvKiBpbmNsdXNpdmUgKi8KKworCXJldCA9IC1FQkFERjsKKwlmaWxlID0gZmdldF9saWdodChmZCwgJmZwdXRfbmVlZGVkKTsKKwlpZiAoIWZpbGUpCisJCWdvdG8gb3V0OworCisJaV9tb2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbW9kZTsKKwlyZXQgPSAtRVNQSVBFOworCWlmICghU19JU1JFRyhpX21vZGUpICYmICFTX0lTQkxLKGlfbW9kZSkgJiYgIVNfSVNESVIoaV9tb2RlKSAmJgorCQkJIVNfSVNMTksoaV9tb2RlKSkKKwkJZ290byBvdXRfcHV0OworCisJcmV0ID0gZG9fc3luY19maWxlX3JhbmdlKGZpbGUsIG9mZnNldCwgZW5kYnl0ZSwgZmxhZ3MpOworb3V0X3B1dDoKKwlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogYGVuZGJ5dGUnIGlzIGluY2x1c2l2ZQorICovCitpbnQgZG9fc3luY19maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgZW5kYnl0ZSwKKwkJCXVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCisJbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKKwlpZiAoIW1hcHBpbmcpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gMDsKKwlpZiAoZmxhZ3MgJiBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUpIHsKKwkJcmV0ID0gd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZShtYXBwaW5nLAorCQkJCQlvZmZzZXQgPj4gUEFHRV9DQUNIRV9TSElGVCwKKwkJCQkJZW5kYnl0ZSA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpIHsKKwkJcmV0ID0gX19maWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UobWFwcGluZywgb2Zmc2V0LCBlbmRieXRlLAorCQkJCQkJV0JfU1lOQ19OT05FKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUikgeworCQlyZXQgPSB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlKG1hcHBpbmcsCisJCQkJCW9mZnNldCA+PiBQQUdFX0NBQ0hFX1NISUZULAorCQkJCQllbmRieXRlID4+IFBBR0VfQ0FDSEVfU0hJRlQpOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG9fc3luY19maWxlX3JhbmdlKTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggZjI2ODgwYS4uNjEwYjViZCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTQzLDYgKzQzLDcgQEAKIAogCW1lbXNldChzZCwgMCwgc2l6ZW9mKCpzZCkpOwogCWF0b21pY19zZXQoJnNkLT5zX2NvdW50LCAxKTsKKwlhdG9taWNfc2V0KCZzZC0+c19ldmVudCwgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJnNkLT5zX2NoaWxkcmVuKTsKIAlsaXN0X2FkZCgmc2QtPnNfc2libGluZywgJnBhcmVudF9zZC0+c19jaGlsZHJlbik7CiAJc2QtPnNfZWxlbWVudCA9IGVsZW1lbnQ7CkBAIC01MCw3ICs1MSw3IEBACiAJcmV0dXJuIHNkOwogfQogCi0vKioKKy8qCiAgKgogICogUmV0dXJuIC1FRVhJU1QgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN5c2ZzIGVsZW1lbnQgd2l0aCB0aGUgc2FtZSBuYW1lIGZvcgogICogdGhlIHNhbWUgcGFyZW50LgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZmlsZS5jIGIvZnMvc3lzZnMvZmlsZS5jCmluZGV4IDgzMGY3NmYuLmNmMzc4NjYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKQEAgLTU3LDYgKzU4LDcgQEAKIAlzdHJ1Y3Qgc3lzZnNfb3BzCSogb3BzOwogCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwogCWludAkJCW5lZWRzX3JlYWRfZmlsbDsKKwlpbnQJCQlldmVudDsKIH07CiAKIApAQCAtNzIsNiArNzQsNyBAQAogICovCiBzdGF0aWMgaW50IGZpbGxfcmVhZF9idWZmZXIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IHN5c2ZzX2J1ZmZlciAqIGJ1ZmZlcikKIHsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyID0gdG9fYXR0cihkZW50cnkpOwogCXN0cnVjdCBrb2JqZWN0ICoga29iaiA9IHRvX2tvYmooZGVudHJ5LT5kX3BhcmVudCk7CiAJc3RydWN0IHN5c2ZzX29wcyAqIG9wcyA9IGJ1ZmZlci0+b3BzOwpAQCAtODMsNiArODYsNyBAQAogCWlmICghYnVmZmVyLT5wYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWJ1ZmZlci0+ZXZlbnQgPSBhdG9taWNfcmVhZCgmc2QtPnNfZXZlbnQpOwogCWNvdW50ID0gb3BzLT5zaG93KGtvYmosYXR0cixidWZmZXItPnBhZ2UpOwogCWJ1ZmZlci0+bmVlZHNfcmVhZF9maWxsID0gMDsKIAlCVUdfT04oY291bnQgPiAoc3NpemVfdClQQUdFX1NJWkUpOwpAQCAtMTgzLDcgKzE4Nyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKLQkJY291bnQgPSBQQUdFX1NJWkU7CisJCWNvdW50ID0gUEFHRV9TSVpFIC0gMTsKIAllcnJvciA9IGNvcHlfZnJvbV91c2VyKGJ1ZmZlci0+cGFnZSxidWYsY291bnQpOwogCWJ1ZmZlci0+bmVlZHNfcmVhZF9maWxsID0gMTsKIAlyZXR1cm4gZXJyb3IgPyAtRUZBVUxUIDogY291bnQ7CkBAIC0zNDgsMTIgKzM1Miw4NCBAQAogCXJldHVybiAwOwogfQogCisvKiBTeXNmcyBhdHRyaWJ1dGUgZmlsZXMgYXJlIHBvbGxhYmxlLiAgVGhlIGlkZWEgaXMgdGhhdCB5b3UgcmVhZAorICogdGhlIGNvbnRlbnQgYW5kIHRoZW4geW91IHVzZSAncG9sbCcgb3IgJ3NlbGVjdCcgdG8gd2FpdCBmb3IKKyAqIHRoZSBjb250ZW50IHRvIGNoYW5nZS4gIFdoZW4gdGhlIGNvbnRlbnQgY2hhbmdlcyAoYXNzdW1pbmcgdGhlCisgKiBtYW5hZ2VyIGZvciB0aGUga29iamVjdCBzdXBwb3J0cyBub3RpZmljYXRpb24pLCBwb2xsIHdpbGwKKyAqIHJldHVybiBQT0xMRVJSfFBPTExQUkksIGFuZCBzZWxlY3Qgd2lsbCByZXR1cm4gdGhlIGZkIHdoZXRoZXIKKyAqIGl0IGlzIHdhaXRpbmcgZm9yIHJlYWQsIHdyaXRlLCBvciBleGNlcHRpb25zLgorICogT25jZSBwb2xsL3NlbGVjdCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIHlvdQorICogbmVlZCB0byBjbG9zZSBhbmQgcmUtb3BlbiB0aGUgZmlsZSwgYXMgc2ltcGx5IHNlZWtpbmcgYW5kIHJlYWRpbmcKKyAqIGFnYWluIHdpbGwgbm90IGdldCBuZXcgZGF0YSwgb3IgcmVzZXQgdGhlIHN0YXRlIG9mICdwb2xsJy4KKyAqIFJlbWluZGVyOiB0aGlzIG9ubHkgd29ya3MgZm9yIGF0dHJpYnV0ZXMgd2hpY2ggYWN0aXZlbHkgc3VwcG9ydAorICogaXQsIGFuZCBpdCBpcyBub3QgcG9zc2libGUgdG8gdGVzdCBhbiBhdHRyaWJ1dGUgZnJvbSB1c2Vyc3BhY2UKKyAqIHRvIHNlZSBpZiBpdCBzdXBwb3J0cyBwb2xsIChOZXRoZXIgJ3BvbGwnIG9yICdzZWxlY3QnIHJldHVybgorICogYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSkuICBXaGVuIGluIGRvdWJ0LCBzZXQgYSBzdWl0YWJsZSB0aW1lb3V0IHZhbHVlLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHN5c2ZzX2J1ZmZlciAqIGJ1ZmZlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qga29iamVjdCAqIGtvYmogPSB0b19rb2JqKGZpbHAtPmZfZGVudHJ5LT5kX3BhcmVudCk7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqIHNkID0gZmlscC0+Zl9kZW50cnktPmRfZnNkYXRhOworCWludCByZXMgPSAwOworCisJcG9sbF93YWl0KGZpbHAsICZrb2JqLT5wb2xsLCB3YWl0KTsKKworCWlmIChidWZmZXItPmV2ZW50ICE9IGF0b21pY19yZWFkKCZzZC0+c19ldmVudCkpIHsKKwkJcmVzID0gUE9MTEVSUnxQT0xMUFJJOworCQlidWZmZXItPm5lZWRzX3JlYWRfZmlsbCA9IDE7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqc3RlcF9kb3duKHN0cnVjdCBkZW50cnkgKmRpciwgY29uc3QgY2hhciAqIG5hbWUpCit7CisJc3RydWN0IGRlbnRyeSAqIGRlOworCisJaWYgKGRpciA9PSBOVUxMIHx8IGRpci0+ZF9pbm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZGUgPSBsb29rdXBfb25lX2xlbihuYW1lLCBkaXIsIHN0cmxlbihuYW1lKSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCWRwdXQoZGlyKTsKKwlpZiAoSVNfRVJSKGRlKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGRlLT5kX2lub2RlID09IE5VTEwpIHsKKwkJZHB1dChkZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gZGU7Cit9CisKK3ZvaWQgc3lzZnNfbm90aWZ5KHN0cnVjdCBrb2JqZWN0ICogaywgY2hhciAqZGlyLCBjaGFyICphdHRyKQoreworCXN0cnVjdCBkZW50cnkgKmRlID0gay0+ZGVudHJ5OworCWlmIChkZSkKKwkJZGdldChkZSk7CisJaWYgKGRlICYmIGRpcikKKwkJZGUgPSBzdGVwX2Rvd24oZGUsIGRpcik7CisJaWYgKGRlICYmIGF0dHIpCisJCWRlID0gc3RlcF9kb3duKGRlLCBhdHRyKTsKKwlpZiAoZGUpIHsKKwkJc3RydWN0IHN5c2ZzX2RpcmVudCAqIHNkID0gZGUtPmRfZnNkYXRhOworCQlpZiAoc2QpCisJCQlhdG9taWNfaW5jKCZzZC0+c19ldmVudCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmay0+cG9sbCk7CisJCWRwdXQoZGUpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX25vdGlmeSk7CisKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3lzZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IHN5c2ZzX3JlYWRfZmlsZSwKIAkud3JpdGUJCT0gc3lzZnNfd3JpdGVfZmlsZSwKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLm9wZW4JCT0gc3lzZnNfb3Blbl9maWxlLAogCS5yZWxlYXNlCT0gc3lzZnNfcmVsZWFzZSwKKwkucG9sbAkJPSBzeXNmc19wb2xsLAogfTsKIAogCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCA0YzI5YWM0Li5mMGIzNDdiIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTE3NSw4ICsxNzUsNyBAQAogCXN0cnVjdCBiaW5fYXR0cmlidXRlICogYmluX2F0dHI7CiAJc3RydWN0IHN5c2ZzX3N5bWxpbmsgICogc2w7CiAKLQlpZiAoIXNkIHx8ICFzZC0+c19lbGVtZW50KQotCQlCVUcoKTsKKwlCVUdfT04oIXNkIHx8ICFzZC0+c19lbGVtZW50KTsKIAogCXN3aXRjaCAoc2QtPnNfdHlwZSkgewogCQljYXNlIFNZU0ZTX0RJUjoKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IDMyOTU4YTcuLjM2NTFmZmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtMTEsNiArMTEsNyBAQAogCiBleHRlcm4gaW50IHN5c2ZzX2FkZF9maWxlKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKiBkaXIsIGNvbnN0IGNoYXIgKiBuYW1lKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19maW5kKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpciwgY29uc3QgY2hhciAqIG5hbWUpOwogCiBleHRlcm4gaW50IHN5c2ZzX2NyZWF0ZV9zdWJkaXIoc3RydWN0IGtvYmplY3QgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgZGVudHJ5ICoqKTsKIGV4dGVybiB2b2lkIHN5c2ZzX3JlbW92ZV9zdWJkaXIoc3RydWN0IGRlbnRyeSAqKTsKZGlmZiAtLWdpdCBhL2ZzL3N5c3YvZGlyLmMgYi9mcy9zeXN2L2Rpci5jCmluZGV4IDhjNjZlOTIuLmQ3MDc0MzQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c3YvZGlyLmMKKysrIGIvZnMvc3lzdi9kaXIuYwpAQCAtMjUzLDggKzI1Myw3IEBACiAKIAlsb2NrX3BhZ2UocGFnZSk7CiAJZXJyID0gbWFwcGluZy0+YV9vcHMtPnByZXBhcmVfd3JpdGUoTlVMTCwgcGFnZSwgZnJvbSwgdG8pOwotCWlmIChlcnIpCi0JCUJVRygpOworCUJVR19PTihlcnIpOwogCWRlLT5pbm9kZSA9IDA7CiAJZXJyID0gZGlyX2NvbW1pdF9jaHVuayhwYWdlLCBmcm9tLCB0byk7CiAJZGlyX3B1dF9wYWdlKHBhZ2UpOwpAQCAtMzUzLDggKzM1Miw3IEBACiAKIAlsb2NrX3BhZ2UocGFnZSk7CiAJZXJyID0gcGFnZS0+bWFwcGluZy0+YV9vcHMtPnByZXBhcmVfd3JpdGUoTlVMTCwgcGFnZSwgZnJvbSwgdG8pOwotCWlmIChlcnIpCi0JCUJVRygpOworCUJVR19PTihlcnIpOwogCWRlLT5pbm9kZSA9IGNwdV90b19mczE2KFNZU1ZfU0IoaW5vZGUtPmlfc2IpLCBpbm9kZS0+aV9pbm8pOwogCWVyciA9IGRpcl9jb21taXRfY2h1bmsocGFnZSwgZnJvbSwgdG8pOwogCWRpcl9wdXRfcGFnZShwYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggODFlMGU4NC4uMjk4M2FmZCAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTMxMiwxMiArMzEyLDEwIEBACiAJZXJyID0gMDsKIAogCWJoID0gaW5vZGVfZ2V0YmxrKGlub2RlLCBibG9jaywgJmVyciwgJnBoeXMsICZuZXcpOwotCWlmIChiaCkKLQkJQlVHKCk7CisJQlVHX09OKGJoKTsKIAlpZiAoZXJyKQogCQlnb3RvIGFib3J0OwotCWlmICghcGh5cykKLQkJQlVHKCk7CisJQlVHX09OKCFwaHlzKTsKIAogCWlmIChuZXcpCiAJCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CmRpZmYgLS1naXQgYS9mcy92ZmF0L25hbWVpLmMgYi9mcy92ZmF0L25hbWVpLmMKaW5kZXggZWY0NjkzOS4uYTU2Y2VjMyAxMDA2NDQKLS0tIGEvZnMvdmZhdC9uYW1laS5jCisrKyBiL2ZzL3ZmYXQvbmFtZWkuYwpAQCAtMTg1LDI0ICsxODUsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobGVuID49IDI1NikKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7Ci0KLQkvKiBNUy1ET1MgImRldmljZSBzcGVjaWFsIGZpbGVzIiAqLwotCWlmIChsZW4gPT0gMyB8fCAobGVuID4gMyAmJiBuYW1lWzNdID09ICcuJykpIHsJLyogYmFzZW5hbWUgPT0gMyAqLwotCQlpZiAoIXN0cm5pY21wKG5hbWUsICJhdXgiLCAzKSB8fAotCQkgICAgIXN0cm5pY21wKG5hbWUsICJjb24iLCAzKSB8fAotCQkgICAgIXN0cm5pY21wKG5hbWUsICJudWwiLCAzKSB8fAotCQkgICAgIXN0cm5pY21wKG5hbWUsICJwcm4iLCAzKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAobGVuID09IDQgfHwgKGxlbiA+IDQgJiYgbmFtZVs0XSA9PSAnLicpKSB7CS8qIGJhc2VuYW1lID09IDQgKi8KLQkJLyogImNvbTEiLCAiY29tMiIsIC4uLiAqLwotCQlpZiAoJzEnIDw9IG5hbWVbM10gJiYgbmFtZVszXSA8PSAnOScpIHsKLQkJCWlmICghc3RybmljbXAobmFtZSwgImNvbSIsIDMpIHx8Ci0JCQkgICAgIXN0cm5pY21wKG5hbWUsICJscHQiLCAzKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggNmNiYmQxNi4uNGQxOTFlZiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtODcwLDEyICs4NzAsMTQgQEAKIAlwZ29mZl90ICAgICAgICAgICAgICAgICBlbmRfaW5kZXgsIGxhc3RfaW5kZXgsIHRsYXN0OwogCXNzaXplX3QJCQlzaXplLCBsZW47CiAJaW50CQkJZmxhZ3MsIGVyciwgaW9tYXBfdmFsaWQgPSAwLCB1cHRvZGF0ZSA9IDE7Ci0JaW50CQkJcGFnZV9kaXJ0eSwgY291bnQgPSAwLCB0cnlsb2NrX2ZsYWcgPSAwOworCWludAkJCXBhZ2VfZGlydHksIGNvdW50ID0gMDsKKwlpbnQJCQl0cnlsb2NrID0gMDsKIAlpbnQJCQlhbGxfYmggPSB1bm1hcHBlZDsKIAotCS8qIHdhaXQgZm9yIG90aGVyIElPIHRocmVhZHM/ICovCi0JaWYgKHN0YXJ0aW8gJiYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSAmJiB3YmMtPm5vbmJsb2NraW5nKSkKLQkJdHJ5bG9ja19mbGFnIHw9IEJNQVBJX1RSWUxPQ0s7CisJaWYgKHN0YXJ0aW8pIHsKKwkJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSAmJiB3YmMtPm5vbmJsb2NraW5nKQorCQkJdHJ5bG9jayB8PSBCTUFQSV9UUllMT0NLOworCX0KIAogCS8qIElzIHRoaXMgcGFnZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZT8gKi8KIAlvZmZzZXQgPSBpX3NpemVfcmVhZChpbm9kZSk7CkBAIC05NTYsMTUgKzk1OCwxMyBAQAogCiAJCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkpIHsKIAkJCQl0eXBlID0gSU9NQVBfVU5XUklUVEVOOwotCQkJCWZsYWdzID0gQk1BUElfV1JJVEV8Qk1BUElfSUdOU1RBVEU7CisJCQkJZmxhZ3MgPSBCTUFQSV9XUklURSB8IEJNQVBJX0lHTlNUQVRFOwogCQkJfSBlbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKSB7CiAJCQkJdHlwZSA9IElPTUFQX0RFTEFZOwotCQkJCWZsYWdzID0gQk1BUElfQUxMT0NBVEU7Ci0JCQkJaWYgKCFzdGFydGlvKQotCQkJCQlmbGFncyB8PSB0cnlsb2NrX2ZsYWc7CisJCQkJZmxhZ3MgPSBCTUFQSV9BTExPQ0FURSB8IHRyeWxvY2s7CiAJCQl9IGVsc2UgewogCQkJCXR5cGUgPSBJT01BUF9ORVc7Ci0JCQkJZmxhZ3MgPSBCTUFQSV9XUklURXxCTUFQSV9NTUFQOworCQkJCWZsYWdzID0gQk1BUElfV1JJVEUgfCBCTUFQSV9NTUFQOwogCQkJfQogCiAJCQlpZiAoIWlvbWFwX3ZhbGlkKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IDlmYjAzMTIuLjI2ZmVkMDcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0xODIsNyArMTgyLDcgQEAKIHsKIAlhX2xpc3RfdAkqYWVudHJ5OwogCi0JYWVudHJ5ID0ga21hbGxvYyhzaXplb2YoYV9saXN0X3QpLCBHRlBfQVRPTUlDICYgfl9fR0ZQX0hJR0gpOworCWFlbnRyeSA9IGttYWxsb2Moc2l6ZW9mKGFfbGlzdF90KSwgR0ZQX05PV0FJVCk7CiAJaWYgKGxpa2VseShhZW50cnkpKSB7CiAJCXNwaW5fbG9jaygmYXNfbG9jayk7CiAJCWFlbnRyeS0+bmV4dCA9IGFzX2ZyZWVfaGVhZDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwppbmRleCA4NTk5N2IxLi5jODQ3NDE2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCkBAIC02OSw3ICs2OSw2IEBACiAJcmV0dXJuIHJ2YWw7CiB9CiAKLQogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX2Fpb19yZWFkKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCkBAIC05MCw3ICs4OSw2IEBACiAJcmV0dXJuIF9feGZzX2ZpbGVfcmVhZChpb2NiLCBidWYsIElPX0lTQUlPfElPX0lOVklTLCBjb3VudCwgcG9zKTsKIH0KIAotCiBTVEFUSUMgaW5saW5lIHNzaXplX3QKIF9feGZzX2ZpbGVfd3JpdGUoCiAJc3RydWN0IGtpb2NiCSppb2NiLApAQCAtMTEzLDcgKzExMSw2IEBACiAJcmV0dXJuIHJ2YWw7CiB9CiAKLQogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX2Fpb193cml0ZSgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLApAQCAtMTM0LDcgKzEzMSw2IEBACiAJcmV0dXJuIF9feGZzX2ZpbGVfd3JpdGUoaW9jYiwgYnVmLCBJT19JU0FJT3xJT19JTlZJUywgY291bnQsIHBvcyk7CiB9CiAKLQogU1RBVElDIGlubGluZSBzc2l6ZV90CiBfX3hmc19maWxlX3JlYWR2KAogCXN0cnVjdCBmaWxlCQkqZmlsZSwKQEAgLTE3OSw3ICsxNzUsNiBAQAogCXJldHVybiBfX3hmc19maWxlX3JlYWR2KGZpbGUsIGlvdiwgSU9fSU5WSVMsIG5yX3NlZ3MsIHBwb3MpOwogfQogCi0KIFNUQVRJQyBpbmxpbmUgc3NpemVfdAogX194ZnNfZmlsZV93cml0ZXYoCiAJc3RydWN0IGZpbGUJCSpmaWxlLApAQCAtMjA0LDcgKzE5OSw2IEBACiAJcmV0dXJuIHJ2YWw7CiB9CiAKLQogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX3dyaXRldigKIAlzdHJ1Y3QgZmlsZQkJKmZpbGUsCkBAIC0yMjgsNyArMjIyLDcgQEAKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9zZW5kZmlsZSgKIAlzdHJ1Y3QgZmlsZQkJKmZpbHAsCi0JbG9mZl90CQkJKnBwb3MsCisJbG9mZl90CQkJKnBvcywKIAlzaXplX3QJCQljb3VudCwKIAlyZWFkX2FjdG9yX3QJCWFjdG9yLAogCXZvaWQJCQkqdGFyZ2V0KQpAQCAtMjM2LDEwICsyMzAsODQgQEAKIAl2bm9kZV90CQkJKnZwID0gdm5fZnJvbV9pbm9kZShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3NpemVfdAkJCXJ2YWw7CiAKLQlWT1BfU0VOREZJTEUodnAsIGZpbHAsIHBwb3MsIDAsIGNvdW50LCBhY3RvciwgdGFyZ2V0LCBOVUxMLCBydmFsKTsKKwlWT1BfU0VOREZJTEUodnAsIGZpbHAsIHBvcywgMCwgY291bnQsIGFjdG9yLCB0YXJnZXQsIE5VTEwsIHJ2YWwpOwogCXJldHVybiBydmFsOwogfQogCitTVEFUSUMgc3NpemVfdAoreGZzX2ZpbGVfc2VuZGZpbGVfaW52aXMoCisJc3RydWN0IGZpbGUJCSpmaWxwLAorCWxvZmZfdAkJCSpwb3MsCisJc2l6ZV90CQkJY291bnQsCisJcmVhZF9hY3Rvcl90CQlhY3RvciwKKwl2b2lkCQkJKnRhcmdldCkKK3sKKwl2bm9kZV90CQkJKnZwID0gdm5fZnJvbV9pbm9kZShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3NpemVfdAkJCXJ2YWw7CisKKwlWT1BfU0VOREZJTEUodnAsIGZpbHAsIHBvcywgSU9fSU5WSVMsIGNvdW50LCBhY3RvciwgdGFyZ2V0LCBOVUxMLCBydmFsKTsKKwlyZXR1cm4gcnZhbDsKK30KKworU1RBVElDIHNzaXplX3QKK3hmc19maWxlX3NwbGljZV9yZWFkKAorCXN0cnVjdCBmaWxlCQkqaW5maWxwLAorCWxvZmZfdAkJCSpwcG9zLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCisJc2l6ZV90CQkJbGVuLAorCXVuc2lnbmVkIGludAkJZmxhZ3MpCit7CisJdm5vZGVfdAkJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5maWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3NpemVfdAkJCXJ2YWw7CisKKwlWT1BfU1BMSUNFX1JFQUQodnAsIGluZmlscCwgcHBvcywgcGlwZSwgbGVuLCBmbGFncywgMCwgTlVMTCwgcnZhbCk7CisJcmV0dXJuIHJ2YWw7Cit9CisKK1NUQVRJQyBzc2l6ZV90Cit4ZnNfZmlsZV9zcGxpY2VfcmVhZF9pbnZpcygKKwlzdHJ1Y3QgZmlsZQkJKmluZmlscCwKKwlsb2ZmX3QJCQkqcHBvcywKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAorCXNpemVfdAkJCWxlbiwKKwl1bnNpZ25lZCBpbnQJCWZsYWdzKQoreworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGluZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOworCXNzaXplX3QJCQlydmFsOworCisJVk9QX1NQTElDRV9SRUFEKHZwLCBpbmZpbHAsIHBwb3MsIHBpcGUsIGxlbiwgZmxhZ3MsIElPX0lOVklTLCBOVUxMLCBydmFsKTsKKwlyZXR1cm4gcnZhbDsKK30KKworU1RBVElDIHNzaXplX3QKK3hmc19maWxlX3NwbGljZV93cml0ZSgKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAorCXN0cnVjdCBmaWxlCQkqb3V0ZmlscCwKKwlsb2ZmX3QJCQkqcHBvcywKKwlzaXplX3QJCQlsZW4sCisJdW5zaWduZWQgaW50CQlmbGFncykKK3sKKwl2bm9kZV90CQkJKnZwID0gdm5fZnJvbV9pbm9kZShvdXRmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3NpemVfdAkJCXJ2YWw7CisKKwlWT1BfU1BMSUNFX1dSSVRFKHZwLCBwaXBlLCBvdXRmaWxwLCBwcG9zLCBsZW4sIGZsYWdzLCAwLCBOVUxMLCBydmFsKTsKKwlyZXR1cm4gcnZhbDsKK30KKworU1RBVElDIHNzaXplX3QKK3hmc19maWxlX3NwbGljZV93cml0ZV9pbnZpcygKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAorCXN0cnVjdCBmaWxlCQkqb3V0ZmlscCwKKwlsb2ZmX3QJCQkqcHBvcywKKwlzaXplX3QJCQlsZW4sCisJdW5zaWduZWQgaW50CQlmbGFncykKK3sKKwl2bm9kZV90CQkJKnZwID0gdm5fZnJvbV9pbm9kZShvdXRmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3NpemVfdAkJCXJ2YWw7CisKKwlWT1BfU1BMSUNFX1dSSVRFKHZwLCBwaXBlLCBvdXRmaWxwLCBwcG9zLCBsZW4sIGZsYWdzLCBJT19JTlZJUywgTlVMTCwgcnZhbCk7CisJcmV0dXJuIHJ2YWw7Cit9CiAKIFNUQVRJQyBpbnQKIHhmc19maWxlX29wZW4oCkBAIC0yNTEsMTMgKzMxOSwxMCBAQAogCiAJaWYgKCEoZmlscC0+Zl9mbGFncyAmIE9fTEFSR0VGSUxFKSAmJiBpX3NpemVfcmVhZChpbm9kZSkgPiBNQVhfTk9OX0xGUykKIAkJcmV0dXJuIC1FRkJJRzsKLQotCUFTU0VSVCh2cCk7CiAJVk9QX09QRU4odnAsIE5VTEwsIGVycm9yKTsKIAlyZXR1cm4gLWVycm9yOwogfQogCi0KIFNUQVRJQyBpbnQKIHhmc19maWxlX3JlbGVhc2UoCiAJc3RydWN0IGlub2RlCSppbm9kZSwKQEAgLTI3MSw3ICszMzYsNiBAQAogCXJldHVybiAtZXJyb3I7CiB9CiAKLQogU1RBVElDIGludAogeGZzX2ZpbGVfZnN5bmMoCiAJc3RydWN0IGZpbGUJKmZpbHAsCkBAIC0yODUsMjEgKzM0OSwxMSBAQAogCiAJaWYgKGRhdGFzeW5jKQogCQlmbGFncyB8PSBGU1lOQ19EQVRBOwotCi0JQVNTRVJUKHZwKTsKIAlWT1BfRlNZTkModnAsIGZsYWdzLCBOVUxMLCAoeGZzX29mZl90KTAsICh4ZnNfb2ZmX3QpLTEsIGVycm9yKTsKIAlyZXR1cm4gLWVycm9yOwogfQogCi0vKgotICogeGZzX2ZpbGVfcmVhZGRpciBtYXBzIHRvIFZPUF9SRUFERElSKCkuCi0gKiBXZSBuZWVkIHRvIGJ1aWxkIGEgdWlvLCBjcmVkLCAuLi4KLSAqLwotCi0jZGVmaW5lIG5leHRkcChkcCkgICAgICAoKHN0cnVjdCB4ZnNfZGlyZW50ICopKChjaGFyICopKGRwKSArIChkcCktPmRfcmVjbGVuKSkKLQogI2lmZGVmIENPTkZJR19YRlNfRE1BUEkKLQogU1RBVElDIHN0cnVjdCBwYWdlICoKIHhmc192bV9ub3BhZ2UoCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0CSphcmVhLApAQCAtMzE5LDEwICszNzMsOCBAQAogCiAJcmV0dXJuIGZpbGVtYXBfbm9wYWdlKGFyZWEsIGFkZHJlc3MsIHR5cGUpOwogfQotCiAjZW5kaWYgLyogQ09ORklHX1hGU19ETUFQSSAqLwogCi0KIFNUQVRJQyBpbnQKIHhmc19maWxlX3JlYWRkaXIoCiAJc3RydWN0IGZpbGUJKmZpbHAsCkBAIC0zMzAsNyArMzgyLDcgQEAKIAlmaWxsZGlyX3QJZmlsbGRpcikKIHsKIAlpbnQJCWVycm9yID0gMDsKLQl2bm9kZV90CQkqdnA7CisJdm5vZGVfdAkJKnZwID0gdm5fZnJvbV9pbm9kZShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJdWlvX3QJCXVpbzsKIAlpb3ZlY190CQlpb3Y7CiAJaW50CQllb2YgPSAwOwpAQCAtMzQwLDkgKzM5Miw2IEBACiAJeGZzX29mZl90CXN0YXJ0X29mZnNldCwgY3Vycl9vZmZzZXQ7CiAJeGZzX2RpcmVudF90CSpkYnAgPSBOVUxMOwogCi0JdnAgPSB2bl9mcm9tX2lub2RlKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKLQlBU1NFUlQodnApOwotCiAJLyogVHJ5IGZhaXJseSBoYXJkIHRvIGdldCBtZW1vcnkgKi8KIAlkbyB7CiAJCWlmICgocmVhZF9idWYgPSAoY2FkZHJfdClrbWFsbG9jKHJsZW4sIEdGUF9LRVJORUwpKSkKQEAgLTM4Nyw3ICs0MzYsNyBAQAogCQkJfQogCQkJc2l6ZSAtPSBkYnAtPmRfcmVjbGVuOwogCQkJY3Vycl9vZmZzZXQgPSAobG9mZl90KWRicC0+ZF9vZmYgLyogJiAweDdmZmZmZmZmICovOwotCQkJZGJwID0gbmV4dGRwKGRicCk7CisJCQlkYnAgPSAoeGZzX2RpcmVudF90ICopKChjaGFyICopZGJwICsgZGJwLT5kX3JlY2xlbik7CiAJCX0KIAl9CiBkb25lOgpAQCAtNDAyLDcgKzQ1MSw2IEBACiAJcmV0dXJuIC1lcnJvcjsKIH0KIAotCiBTVEFUSUMgaW50CiB4ZnNfZmlsZV9tbWFwKAogCXN0cnVjdCBmaWxlCSpmaWxwLApAQCAtNDU3LDExICs1MDUsMTAgQEAKIAl1bnNpZ25lZCBpbnQJY21kLAogCXVuc2lnbmVkIGxvbmcJYXJnKQogewotCWludAkJZXJyb3I7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOworCWludAkJZXJyb3I7CiAKLQlBU1NFUlQodnApOwogCVZPUF9JT0NUTCh2cCwgaW5vZGUsIGZpbHAsIElPX0lOVklTLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZywgZXJyb3IpOwogCVZNT0RJRlkodnApOwogCkBAIC01MzcsNiArNTg0LDggQEAKIAkuYWlvX3JlYWQJPSB4ZnNfZmlsZV9haW9fcmVhZCwKIAkuYWlvX3dyaXRlCT0geGZzX2ZpbGVfYWlvX3dyaXRlLAogCS5zZW5kZmlsZQk9IHhmc19maWxlX3NlbmRmaWxlLAorCS5zcGxpY2VfcmVhZAk9IHhmc19maWxlX3NwbGljZV9yZWFkLAorCS5zcGxpY2Vfd3JpdGUJPSB4ZnNfZmlsZV9zcGxpY2Vfd3JpdGUsCiAJLnVubG9ja2VkX2lvY3RsCT0geGZzX2ZpbGVfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB4ZnNfZmlsZV9jb21wYXRfaW9jdGwsCkBAIC01NTgsNyArNjA3LDkgQEAKIAkud3JpdGV2CQk9IHhmc19maWxlX3dyaXRldl9pbnZpcywKIAkuYWlvX3JlYWQJPSB4ZnNfZmlsZV9haW9fcmVhZF9pbnZpcywKIAkuYWlvX3dyaXRlCT0geGZzX2ZpbGVfYWlvX3dyaXRlX2ludmlzLAotCS5zZW5kZmlsZQk9IHhmc19maWxlX3NlbmRmaWxlLAorCS5zZW5kZmlsZQk9IHhmc19maWxlX3NlbmRmaWxlX2ludmlzLAorCS5zcGxpY2VfcmVhZAk9IHhmc19maWxlX3NwbGljZV9yZWFkX2ludmlzLAorCS5zcGxpY2Vfd3JpdGUJPSB4ZnNfZmlsZV9zcGxpY2Vfd3JpdGVfaW52aXMsCiAJLnVubG9ja2VkX2lvY3RsCT0geGZzX2ZpbGVfaW9jdGxfaW52aXMsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB4ZnNfZmlsZV9jb21wYXRfaW52aXNfaW9jdGwsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggMTQ5MjM3My4uMmUyZTI3NSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtNjczLDggKzY3Myw3IEBACiAJaWYgKGlhX3ZhbGlkICYgQVRUUl9BVElNRSkgewogCQl2YXR0ci52YV9tYXNrIHw9IFhGU19BVF9BVElNRTsKIAkJdmF0dHIudmFfYXRpbWUgPSBhdHRyLT5pYV9hdGltZTsKLQkJaWYgKGlhX3ZhbGlkICYgQVRUUl9BVElNRV9TRVQpCi0JCQlpbm9kZS0+aV9hdGltZSA9IGF0dHItPmlhX2F0aW1lOworCQlpbm9kZS0+aV9hdGltZSA9IGF0dHItPmlhX2F0aW1lOwogCX0KIAlpZiAoaWFfdmFsaWQgJiBBVFRSX01USU1FKSB7CiAJCXZhdHRyLnZhX21hc2sgfD0gWEZTX0FUX01USU1FOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKaW5kZXggMWZlMDlmMi4uZTlmZTQzZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCkBAIC0xMDMsNiArMTAzLDcgQEAKICAqLwogI3VuZGVmICBIQVZFX1JFRkNBQ0hFCS8qIHJlZmVyZW5jZSBjYWNoZSBub3QgbmVlZGVkIGZvciBORlMgaW4gMi42ICovCiAjZGVmaW5lIEhBVkVfU0VOREZJTEUJLyogc2VuZGZpbGUoMikgZXhpc3RzIGluIDIuNiwgYnV0IG5vdCBpbiAyLjQgKi8KKyNkZWZpbmUgSEFWRV9TUExJQ0UJLyogYSBzcGxpY2UoMikgZXhpc3RzIGluIDIuNiwgYnV0IG5vdCBpbiAyLjQgKi8KICNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIEhBVkVfUEVSQ1BVX1NCCS8qIHBlciBjcHUgc3VwZXJibG9jayBjb3VudGVycyBhcmUgYSAyLjYgZmVhdHVyZSAqLwogI2Vsc2UKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggODRkZGYxOC4uNjdlZmUzMyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTMwMSwzNiArMzAxLDIzIEBACiAJdm9pZAkJCSp0YXJnZXQsCiAJY3JlZF90CQkJKmNyZWRwKQogeworCXhmc19pbm9kZV90CQkqaXAgPSBYRlNfQkhWVE9JKGJkcCk7CisJeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OwogCXNzaXplX3QJCQlyZXQ7Ci0JeGZzX2ZzaXplX3QJCW47Ci0JeGZzX2lub2RlX3QJCSppcDsKLQl4ZnNfbW91bnRfdAkJKm1wOwotCXZub2RlX3QJCQkqdnA7Ci0KLQlpcCA9IFhGU19CSFZUT0koYmRwKTsKLQl2cCA9IEJIVl9UT19WTk9ERShiZHApOwotCW1wID0gaXAtPmlfbW91bnQ7CiAKIAlYRlNfU1RBVFNfSU5DKHhzX3JlYWRfY2FsbHMpOwotCi0JbiA9IFhGU19NQVhJT0ZGU0VUKG1wKSAtICpvZmZzZXQ7Ci0JaWYgKChuIDw9IDApIHx8IChjb3VudCA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobiA8IGNvdW50KQotCQljb3VudCA9IG47Ci0KLQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpCisJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gLUVJTzsKIAogCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwogCi0JaWYgKERNX0VWRU5UX0VOQUJMRUQodnAtPnZfdmZzcCwgaXAsIERNX0VWRU5UX1JFQUQpICYmCisJaWYgKERNX0VWRU5UX0VOQUJMRUQoQkhWX1RPX1ZOT0RFKGJkcCktPnZfdmZzcCwgaXAsIERNX0VWRU5UX1JFQUQpICYmCiAJICAgICghKGlvZmxhZ3MgJiBJT19JTlZJUykpKSB7CiAJCXZyd2xvY2tfdCBsb2NrdHlwZSA9IFZSV0xPQ0tfUkVBRDsKIAkJaW50IGVycm9yOwogCi0JCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgQkhWX1RPX1ZOT0RFKGJkcCksICpvZmZzZXQsIGNvdW50LAorCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIEJIVl9UT19WTk9ERShiZHApLAorCQkJCSAgICAgICpvZmZzZXQsIGNvdW50LAogCQkJCSAgICAgIEZJTFBfREVMQVlfRkxBRyhmaWxwKSwgJmxvY2t0eXBlKTsKIAkJaWYgKGVycm9yKSB7CiAJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwpAQCAtMzQwLDEyICszMjcsOTggQEAKIAl4ZnNfcndfZW50ZXJfdHJhY2UoWEZTX1NFTkRGSUxFX0VOVEVSLCAmaXAtPmlfaW9jb3JlLAogCQkgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXRhcmdldCwgY291bnQsICpvZmZzZXQsIGlvZmxhZ3MpOwogCXJldCA9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZShmaWxwLCBvZmZzZXQsIGNvdW50LCBhY3RvciwgdGFyZ2V0KTsKLQotCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0KIAlpZiAocmV0ID4gMCkKIAkJWEZTX1NUQVRTX0FERCh4c19yZWFkX2J5dGVzLCByZXQpOwogCisJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKwlyZXR1cm4gcmV0OworfQorCitzc2l6ZV90Cit4ZnNfc3BsaWNlX3JlYWQoCisJYmh2X2Rlc2NfdAkJKmJkcCwKKwlzdHJ1Y3QgZmlsZQkJKmluZmlscCwKKwlsb2ZmX3QJCQkqcHBvcywKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAorCXNpemVfdAkJCWNvdW50LAorCWludAkJCWZsYWdzLAorCWludAkJCWlvZmxhZ3MsCisJY3JlZF90CQkJKmNyZWRwKQoreworCXhmc19pbm9kZV90CQkqaXAgPSBYRlNfQkhWVE9JKGJkcCk7CisJeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OworCXNzaXplX3QJCQlyZXQ7CisKKwlYRlNfU1RBVFNfSU5DKHhzX3JlYWRfY2FsbHMpOworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKKwkJcmV0dXJuIC1FSU87CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKworCWlmIChETV9FVkVOVF9FTkFCTEVEKEJIVl9UT19WTk9ERShiZHApLT52X3Zmc3AsIGlwLCBETV9FVkVOVF9SRUFEKSAmJgorCSAgICAoIShpb2ZsYWdzICYgSU9fSU5WSVMpKSkgeworCQl2cndsb2NrX3QgbG9ja3R5cGUgPSBWUldMT0NLX1JFQUQ7CisJCWludCBlcnJvcjsKKworCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIEJIVl9UT19WTk9ERShiZHApLAorCQkJCQkqcHBvcywgY291bnQsCisJCQkJCUZJTFBfREVMQVlfRkxBRyhpbmZpbHApLCAmbG9ja3R5cGUpOworCQlpZiAoZXJyb3IpIHsKKwkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CisJCQlyZXR1cm4gLWVycm9yOworCQl9CisJfQorCXhmc19yd19lbnRlcl90cmFjZShYRlNfU1BMSUNFX1JFQURfRU5URVIsICZpcC0+aV9pb2NvcmUsCisJCQkgICBwaXBlLCBjb3VudCwgKnBwb3MsIGlvZmxhZ3MpOworCXJldCA9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChpbmZpbHAsIHBwb3MsIHBpcGUsIGNvdW50LCBmbGFncyk7CisJaWYgKHJldCA+IDApCisJCVhGU19TVEFUU19BREQoeHNfcmVhZF9ieXRlcywgcmV0KTsKKworCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CisJcmV0dXJuIHJldDsKK30KKworc3NpemVfdAoreGZzX3NwbGljZV93cml0ZSgKKwliaHZfZGVzY190CQkqYmRwLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCisJc3RydWN0IGZpbGUJCSpvdXRmaWxwLAorCWxvZmZfdAkJCSpwcG9zLAorCXNpemVfdAkJCWNvdW50LAorCWludAkJCWZsYWdzLAorCWludAkJCWlvZmxhZ3MsCisJY3JlZF90CQkJKmNyZWRwKQoreworCXhmc19pbm9kZV90CQkqaXAgPSBYRlNfQkhWVE9JKGJkcCk7CisJeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OworCXNzaXplX3QJCQlyZXQ7CisKKwlYRlNfU1RBVFNfSU5DKHhzX3dyaXRlX2NhbGxzKTsKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpCisJCXJldHVybiAtRUlPOworCisJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOworCisJaWYgKERNX0VWRU5UX0VOQUJMRUQoQkhWX1RPX1ZOT0RFKGJkcCktPnZfdmZzcCwgaXAsIERNX0VWRU5UX1dSSVRFKSAmJgorCSAgICAoIShpb2ZsYWdzICYgSU9fSU5WSVMpKSkgeworCQl2cndsb2NrX3QgbG9ja3R5cGUgPSBWUldMT0NLX1dSSVRFOworCQlpbnQgZXJyb3I7CisKKwkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9XUklURSwgQkhWX1RPX1ZOT0RFKGJkcCksCisJCQkJCSpwcG9zLCBjb3VudCwKKwkJCQkJRklMUF9ERUxBWV9GTEFHKG91dGZpbHApLCAmbG9ja3R5cGUpOworCQlpZiAoZXJyb3IpIHsKKwkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOworCQkJcmV0dXJuIC1lcnJvcjsKKwkJfQorCX0KKwl4ZnNfcndfZW50ZXJfdHJhY2UoWEZTX1NQTElDRV9XUklURV9FTlRFUiwgJmlwLT5pX2lvY29yZSwKKwkJCSAgIHBpcGUsIGNvdW50LCAqcHBvcywgaW9mbGFncyk7CisJcmV0ID0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZShwaXBlLCBvdXRmaWxwLCBwcG9zLCBjb3VudCwgZmxhZ3MpOworCWlmIChyZXQgPiAwKQorCQlYRlNfU1RBVFNfQUREKHhzX3dyaXRlX2J5dGVzLCByZXQpOworCisJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzYzLDcgKzQzNiw3IEBACiAJeGZzX2ZzaXplX3QJZW5kX3NpemUpCiB7CiAJeGZzX2ZpbGVvZmZfdAlsYXN0X2ZzYjsKLQl4ZnNfbW91bnRfdAkqbXA7CisJeGZzX21vdW50X3QJKm1wID0gaW8tPmlvX21vdW50OwogCWludAkJbmltYXBzOwogCWludAkJemVyb19vZmZzZXQ7CiAJaW50CQl6ZXJvX2xlbjsKQEAgLTM3Myw4ICs0NDYsNiBAQAogCiAJQVNTRVJUKGlzbXJsb2NrZWQoaW8tPmlvX2xvY2ssIE1SX1VQREFURSkgIT0gMCk7CiAKLQltcCA9IGlvLT5pb19tb3VudDsKLQogCXplcm9fb2Zmc2V0ID0gWEZTX0JfRlNCX09GRlNFVChtcCwgaXNpemUpOwogCWlmICh6ZXJvX29mZnNldCA9PSAwKSB7CiAJCS8qCkBAIC00MDUsMTAgKzQ3Niw5IEBACiAJICogZG9uJ3QgZGVhZGxvY2sgd2hlbiB0aGUgYnVmZmVyIGNhY2hlIGNhbGxzIGJhY2sgdG8gdXMuCiAJICovCiAJWEZTX0lVTkxPQ0sobXAsIGlvLCBYRlNfSUxPQ0tfRVhDTHwgWEZTX0VYVFNJWkVfUkQpOworCiAJbG9mZiA9IFhGU19GU0JfVE9fQihtcCwgbGFzdF9mc2IpOwotCiAJemVyb19sZW4gPSBtcC0+bV9zYi5zYl9ibG9ja3NpemUgLSB6ZXJvX29mZnNldDsKLQogCWVycm9yID0geGZzX2lvemVybyhpcCwgbG9mZiArIHplcm9fb2Zmc2V0LCB6ZXJvX2xlbiwgZW5kX3NpemUpOwogCiAJWEZTX0lMT0NLKG1wLCBpbywgWEZTX0lMT0NLX0VYQ0x8WEZTX0VYVFNJWkVfUkQpOwpAQCAtNDQxLDcgKzUxMSw3IEBACiAJeGZzX2ZpbGVvZmZfdAl6ZXJvX2NvdW50X2ZzYjsKIAl4ZnNfZmlsZW9mZl90CWxhc3RfZnNiOwogCXhmc19leHRsZW5fdAlidWZfbGVuX2ZzYjsKLQl4ZnNfbW91bnRfdAkqbXA7CisJeGZzX21vdW50X3QJKm1wID0gaW8tPmlvX21vdW50OwogCWludAkJbmltYXBzOwogCWludAkJZXJyb3IgPSAwOwogCXhmc19ibWJ0X2lyZWNfdAlpbWFwOwpAQCAtNDUwLDggKzUyMCw2IEBACiAJQVNTRVJUKGlzbXJsb2NrZWQoaW8tPmlvX2lvbG9jaywgTVJfVVBEQVRFKSk7CiAJQVNTRVJUKG9mZnNldCA+IGlzaXplKTsKIAotCW1wID0gaW8tPmlvX21vdW50OwotCiAJLyoKIAkgKiBGaXJzdCBoYW5kbGUgemVyb2luZyB0aGUgYmxvY2sgb24gd2hpY2ggaXNpemUgcmVzaWRlcy4KIAkgKiBXZSBvbmx5IHplcm8gYSBwYXJ0IG9mIHRoYXQgYmxvY2sgc28gaXQgaXMgaGFuZGxlZCBzcGVjaWFsbHkuCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCmluZGV4IDM4ODY0YTguLjhmNDUzOTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCkBAIC02MCw2ICs2MCw4IEBACiAjZGVmaW5lCVhGU19JT01BUF9BTExPQ19FTlRFUgkyNQogI2RlZmluZQlYRlNfSU9NQVBfQUxMT0NfTUFQCTI2CiAjZGVmaW5lCVhGU19JT01BUF9VTldSSVRURU4JMjcKKyNkZWZpbmUgWEZTX1NQTElDRV9SRUFEX0VOVEVSCTI4CisjZGVmaW5lIFhGU19TUExJQ0VfV1JJVEVfRU5URVIJMjkKIGV4dGVybiB2b2lkIHhmc19yd19lbnRlcl90cmFjZShpbnQsIHN0cnVjdCB4ZnNfaW9jb3JlICosCiAJCQkJdm9pZCAqLCBzaXplX3QsIGxvZmZfdCwgaW50KTsKIGV4dGVybiB2b2lkIHhmc19pbnZhbF9jYWNoZWRfdHJhY2Uoc3RydWN0IHhmc19pb2NvcmUgKiwKQEAgLTc4LDYgKzgwLDcgQEAKIAkJCXN0cnVjdCB4ZnNfaW9tYXAgKiwgaW50ICopOwogZXh0ZXJuIGludCB4ZnNiZHN0cmF0KHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19idWYgKik7CiBleHRlcm4gaW50IHhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICopOworZXh0ZXJuIGludCB4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CiAKIGV4dGVybiBpbnQgeGZzX3plcm9fZW9mKHN0cnVjdCB2bm9kZSAqLCBzdHJ1Y3QgeGZzX2lvY29yZSAqLCB4ZnNfb2ZmX3QsCiAJCQkJeGZzX2ZzaXplX3QsIHhmc19mc2l6ZV90KTsKQEAgLTkwLDcgKzkzLDExIEBACiBleHRlcm4gc3NpemVfdCB4ZnNfc2VuZGZpbGUoc3RydWN0IGJodl9kZXNjICosIHN0cnVjdCBmaWxlICosCiAJCQkJbG9mZl90ICosIGludCwgc2l6ZV90LCByZWFkX2FjdG9yX3QsCiAJCQkJdm9pZCAqLCBzdHJ1Y3QgY3JlZCAqKTsKLQotZXh0ZXJuIGludCB4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CitleHRlcm4gc3NpemVfdCB4ZnNfc3BsaWNlX3JlYWQoc3RydWN0IGJodl9kZXNjICosIHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLAorCQkJCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc2l6ZV90LCBpbnQsIGludCwKKwkJCQlzdHJ1Y3QgY3JlZCAqKTsKK2V4dGVybiBzc2l6ZV90IHhmc19zcGxpY2Vfd3JpdGUoc3RydWN0IGJodl9kZXNjICosIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwKKwkJCQlzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCBpbnQsIGludCwKKwkJCQlzdHJ1Y3QgY3JlZCAqKTsKIAogI2VuZGlmCS8qIF9fWEZTX0xSV19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDE4ODQzMDAuLjY4ZjQ3OTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtNjcsNyArNjcsOCBAQAogCiBTVEFUSUMgc3RydWN0IHhmc19tb3VudF9hcmdzICoKIHhmc19hcmdzX2FsbG9jYXRlKAotCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IpCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKKwlpbnQJCQlzaWxlbnQpCiB7CiAJc3RydWN0IHhmc19tb3VudF9hcmdzCSphcmdzOwogCkBAIC04MCw4ICs4MSw4IEBACiAJCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9ESVJTWU5DOwogCWlmIChzYi0+c19mbGFncyAmIE1TX1NZTkNIUk9OT1VTKQogCQlhcmdzLT5mbGFncyB8PSBYRlNNTlRfV1NZTkM7Ci0KLQkvKiBEZWZhdWx0IHRvIDMyIGJpdCBpbm9kZXMgb24gTGludXggYWxsIHRoZSB0aW1lICovCisJaWYgKHNpbGVudCkKKwkJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX1FVSUVUOwogCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF8zMkJJVElOT0RFUzsKIAogCXJldHVybiBhcmdzOwpAQCAtNzE5LDcgKzcyMCw3IEBACiAJY2hhcgkJCSpvcHRpb25zKQogewogCXZmc190CQkJKnZmc3AgPSB2ZnNfZnJvbV9zYihzYik7Ci0Jc3RydWN0IHhmc19tb3VudF9hcmdzCSphcmdzID0geGZzX2FyZ3NfYWxsb2NhdGUoc2IpOworCXN0cnVjdCB4ZnNfbW91bnRfYXJncwkqYXJncyA9IHhmc19hcmdzX2FsbG9jYXRlKHNiLCAwKTsKIAlpbnQJCQllcnJvcjsKIAogCVZGU19QQVJTRUFSR1ModmZzcCwgb3B0aW9ucywgYXJncywgMSwgZXJyb3IpOwpAQCAtODI1LDcgKzgyNiw3IEBACiB7CiAJdm5vZGVfdAkJCSpyb290dnA7CiAJc3RydWN0IHZmcwkJKnZmc3AgPSB2ZnNfYWxsb2NhdGUoc2IpOwotCXN0cnVjdCB4ZnNfbW91bnRfYXJncwkqYXJncyA9IHhmc19hcmdzX2FsbG9jYXRlKHNiKTsKKwlzdHJ1Y3QgeGZzX21vdW50X2FyZ3MJKmFyZ3MgPSB4ZnNfYXJnc19hbGxvY2F0ZShzYiwgc2lsZW50KTsKIAlzdHJ1Y3Qga3N0YXRmcwkJc3RhdHZmczsKIAlpbnQJCQllcnJvciwgZXJyb3IyOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAppbmRleCAwNmY1ODQ1Li4yYThlMTZjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKQEAgLTE3Myw2ICsxNzMsMTIgQEAKIHR5cGVkZWYgc3NpemVfdCAoKnZvcF9zZW5kZmlsZV90KShiaHZfZGVzY190ICosIHN0cnVjdCBmaWxlICosCiAJCQkJbG9mZl90ICosIGludCwgc2l6ZV90LCByZWFkX2FjdG9yX3QsCiAJCQkJdm9pZCAqLCBzdHJ1Y3QgY3JlZCAqKTsKK3R5cGVkZWYgc3NpemVfdCAoKnZvcF9zcGxpY2VfcmVhZF90KShiaHZfZGVzY190ICosIHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLAorCQkJCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc2l6ZV90LCBpbnQsIGludCwKKwkJCQlzdHJ1Y3QgY3JlZCAqKTsKK3R5cGVkZWYgc3NpemVfdCAoKnZvcF9zcGxpY2Vfd3JpdGVfdCkoYmh2X2Rlc2NfdCAqLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosCisJCQkJc3RydWN0IGZpbGUgKiwgbG9mZl90ICosIHNpemVfdCwgaW50LCBpbnQsCisJCQkJc3RydWN0IGNyZWQgKik7CiB0eXBlZGVmIGludAkoKnZvcF9pb2N0bF90KShiaHZfZGVzY190ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLAogCQkJCWludCwgdW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKTsKIHR5cGVkZWYgaW50CSgqdm9wX2dldGF0dHJfdCkoYmh2X2Rlc2NfdCAqLCBzdHJ1Y3QgdmF0dHIgKiwgaW50LApAQCAtMjMxLDYgKzIzNyw4IEBACiAJdm9wX3JlYWRfdAkJdm9wX3JlYWQ7CiAJdm9wX3dyaXRlX3QJCXZvcF93cml0ZTsKIAl2b3Bfc2VuZGZpbGVfdAkJdm9wX3NlbmRmaWxlOworCXZvcF9zcGxpY2VfcmVhZF90CXZvcF9zcGxpY2VfcmVhZDsKKwl2b3Bfc3BsaWNlX3dyaXRlX3QJdm9wX3NwbGljZV93cml0ZTsKIAl2b3BfaW9jdGxfdAkJdm9wX2lvY3RsOwogCXZvcF9nZXRhdHRyX3QJCXZvcF9nZXRhdHRyOwogCXZvcF9zZXRhdHRyX3QJCXZvcF9zZXRhdHRyOwpAQCAtMjc2LDYgKzI4NCwxMCBAQAogCXJ2ID0gX1ZPUF8odm9wX3dyaXRlLCB2cCkoKHZwKS0+dl9mYmh2LGZpbGUsaW92LHNlZ3Msb2Zmc2V0LGlvZmxhZ3MsY3IpCiAjZGVmaW5lIFZPUF9TRU5ERklMRSh2cCxmLG9mZixpb2ZsYWdzLGNudCxhY3QsdGFyZyxjcixydikJCVwKIAlydiA9IF9WT1BfKHZvcF9zZW5kZmlsZSwgdnApKCh2cCktPnZfZmJodixmLG9mZixpb2ZsYWdzLGNudCxhY3QsdGFyZyxjcikKKyNkZWZpbmUgVk9QX1NQTElDRV9SRUFEKHZwLGYsbyxwaXBlLGNudCxmbCxpb2ZsLGNyLHJ2KQkJCVwKKwlydiA9IF9WT1BfKHZvcF9zcGxpY2VfcmVhZCwgdnApKCh2cCktPnZfZmJodixmLG8scGlwZSxjbnQsZmwsaW9mbCxjcikKKyNkZWZpbmUgVk9QX1NQTElDRV9XUklURSh2cCxmLG8scGlwZSxjbnQsZmwsaW9mbCxjcixydikJCQlcCisJcnYgPSBfVk9QXyh2b3Bfc3BsaWNlX3dyaXRlLCB2cCkoKHZwKS0+dl9mYmh2LGYsbyxwaXBlLGNudCxmbCxpb2ZsLGNyKQogI2RlZmluZSBWT1BfQk1BUCh2cCxvZixzeixydyxiLG4scnYpCQkJCQlcCiAJcnYgPSBfVk9QXyh2b3BfYm1hcCwgdnApKCh2cCktPnZfZmJodixvZixzeixydyxiLG4pCiAjZGVmaW5lIFZPUF9PUEVOKHZwLCBjciwgcnYpCQkJCQkJXApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5jIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCmluZGV4IDczYzFlNWUuLjdmYjVlY2EgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTI2MjQsNyArMjYyNCw3IEBACiB7CiAJaW50CQllcnJvcjsKIAl4ZnNfbW91bnRfdAkqbXA7Ci0JdWludAkJZGVsYmxrcywgYmxrZmxhZ3M7CisJdWludAkJZGVsYmxrcywgYmxrZmxhZ3MsIHByamZsYWdzID0gMDsKIAl4ZnNfZHF1b3RfdAkqdW5yZXN1ZHEsICp1bnJlc2dkcSwgKmRlbGJsa3N1ZHEsICpkZWxibGtzZ2RxOwogCiAJQVNTRVJUKFhGU19JU0xPQ0tFRF9JTk9ERShpcCkpOwpAQCAtMjY1MCwxMCArMjY1MCwxMyBAQAogCQl9CiAJfQogCWlmIChYRlNfSVNfT1FVT1RBX09OKGlwLT5pX21vdW50KSAmJiBnZHFwKSB7Ci0JCWlmICgoWEZTX0lTX0dRVU9UQV9PTihpcC0+aV9tb3VudCkgJiYKLQkJICAgICBpcC0+aV9kLmRpX2dpZCAhPSBiZTMyX3RvX2NwdShnZHFwLT5xX2NvcmUuZF9pZCkpIHx8Ci0JCSAgICAoWEZTX0lTX1BRVU9UQV9PTihpcC0+aV9tb3VudCkgJiYKLQkJICAgICBpcC0+aV9kLmRpX3Byb2ppZCAhPSBiZTMyX3RvX2NwdShnZHFwLT5xX2NvcmUuZF9pZCkpKSB7CisJCWlmIChYRlNfSVNfUFFVT1RBX09OKGlwLT5pX21vdW50KSAmJgorCQkgICAgIGlwLT5pX2QuZGlfcHJvamlkICE9IGJlMzJfdG9fY3B1KGdkcXAtPnFfY29yZS5kX2lkKSkKKwkJCXByamZsYWdzID0gWEZTX1FNT1BUX0VOT1NQQzsKKworCQlpZiAocHJqZmxhZ3MgfHwKKwkJICAgIChYRlNfSVNfR1FVT1RBX09OKGlwLT5pX21vdW50KSAmJgorCQkgICAgIGlwLT5pX2QuZGlfZ2lkICE9IGJlMzJfdG9fY3B1KGdkcXAtPnFfY29yZS5kX2lkKSkpIHsKIAkJCWRlbGJsa3NnZHEgPSBnZHFwOwogCQkJaWYgKGRlbGJsa3MpIHsKIAkJCQlBU1NFUlQoaXAtPmlfZ2RxdW90KTsKQEAgLTI2NjQsNyArMjY2Nyw3IEBACiAKIAlpZiAoKGVycm9yID0geGZzX3RyYW5zX3Jlc2VydmVfcXVvdGFfYnlkcXVvdHModHAsIGlwLT5pX21vdW50LAogCQkJCWRlbGJsa3N1ZHEsIGRlbGJsa3NnZHEsIGlwLT5pX2QuZGlfbmJsb2NrcywgMSwKLQkJCQlmbGFncyB8IGJsa2ZsYWdzKSkpCisJCQkJZmxhZ3MgfCBibGtmbGFncyB8IHByamZsYWdzKSkpCiAJCXJldHVybiAoZXJyb3IpOwogCiAJLyoKQEAgLTI2ODEsNyArMjY4NCw3IEBACiAJCUFTU0VSVCh1bnJlc3VkcSB8fCB1bnJlc2dkcSk7CiAJCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZV9xdW90YV9ieWRxdW90cyhOVUxMLCBpcC0+aV9tb3VudCwKIAkJCQlkZWxibGtzdWRxLCBkZWxibGtzZ2RxLCAoeGZzX3FjbnRfdClkZWxibGtzLCAwLAotCQkJCWZsYWdzIHwgYmxrZmxhZ3MpKSkKKwkJCQlmbGFncyB8IGJsa2ZsYWdzIHwgcHJqZmxhZ3MpKSkKIAkJCXJldHVybiAoZXJyb3IpOwogCQl4ZnNfdHJhbnNfcmVzZXJ2ZV9xdW90YV9ieWRxdW90cyhOVUxMLCBpcC0+aV9tb3VudCwKIAkJCQl1bnJlc3VkcSwgdW5yZXNnZHEsIC0oKHhmc19xY250X3QpZGVsYmxrcyksIDAsCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKaW5kZXggZDhlMTMxZS4uOTE2ODkxOCAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwpAQCAtNTk1LDEyICs1OTUsMTkgQEAKIAl9CiB9CiAKK1NUQVRJQyBpbnQKK3hmc19xdW90YV9lcnJvcih1aW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFhGU19RTU9QVF9FTk9TUEMpCisJCXJldHVybiBFTk9TUEM7CisJcmV0dXJuIEVEUVVPVDsKK30KKwogLyoKICAqIFRoaXMgcmVzZXJ2ZXMgZGlzayBibG9ja3MgYW5kIGlub2RlcyBhZ2FpbnN0IGEgZHF1b3QuCiAgKiBGbGFncyBpbmRpY2F0ZSBpZiB0aGUgZHF1b3QgaXMgdG8gYmUgbG9ja2VkIGhlcmUgYW5kIGFsc28KICAqIGlmIHRoZSBibGsgcmVzZXJ2YXRpb24gaXMgZm9yIFJUIG9yIHJlZ3VsYXIgYmxvY2tzLgogICogU2VuZGluZyBpbiBYRlNfUU1PUFRfRk9SQ0VfUkVTIGZsYWcgc2tpcHMgdGhlIHF1b3RhIGNoZWNrLgotICogUmV0dXJucyBFRFFVT1QgaWYgcXVvdGEgaXMgZXhjZWVkZWQuCiAgKi8KIFNUQVRJQyBpbnQKIHhmc190cmFuc19kcXJlc3YoCkBAIC02NjYsMTkgKzY3MywxNSBAQAogCQkJICovCiAJCQlpZiAoaGFyZGxpbWl0ID4gMFVMTCAmJgogCQkJICAgICAoaGFyZGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApKSB7Ci0JCQkJZXJyb3IgPSBFRFFVT1Q7CisJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJfQogCiAJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJgogCQkJICAgICAoc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApKSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiB0aW1lciBvciB3YXJuaW5ncyBoYXMgZXhwaXJlZCwKLQkJCQkgKiByZXR1cm4gRURRVU9UCi0JCQkJICovCiAJCQkJaWYgKCh0aW1lciAhPSAwICYmIGdldF9zZWNvbmRzKCkgPiB0aW1lcikgfHwKIAkJCQkgICAgKHdhcm5zICE9IDAgJiYgd2FybnMgPj0gd2FybmxpbWl0KSkgewotCQkJCQllcnJvciA9IEVEUVVPVDsKKwkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CiAJCQl9CkBAIC02OTUsMTYgKzY5OCwxMiBAQAogCQkJaWYgKCFzb2Z0bGltaXQpCiAJCQkJc29mdGxpbWl0ID0gcS0+cWlfaXNvZnRsaW1pdDsKIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmIGNvdW50ID49IGhhcmRsaW1pdCkgewotCQkJCWVycm9yID0gRURRVU9UOworCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKIAkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCX0gZWxzZSBpZiAoc29mdGxpbWl0ID4gMFVMTCAmJiBjb3VudCA+PSBzb2Z0bGltaXQpIHsKLQkJCQkvKgotCQkJCSAqIElmIHRpbWVyIG9yIHdhcm5pbmdzIGhhcyBleHBpcmVkLAotCQkJCSAqIHJldHVybiBFRFFVT1QKLQkJCQkgKi8KIAkJCQlpZiAoKHRpbWVyICE9IDAgJiYgZ2V0X3NlY29uZHMoKSA+IHRpbWVyKSB8fAogCQkJCSAgICAgKHdhcm5zICE9IDAgJiYgd2FybnMgPj0gd2FybmxpbWl0KSkgewotCQkJCQllcnJvciA9IEVEUVVPVDsKKwkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CiAJCQl9CkBAIC03NTEsMTMgKzc1MCwxNCBAQAogCiAKIC8qCi0gKiBHaXZlbiBhIGRxdW90KHMpLCBtYWtlIGRpc2sgYmxvY2sgYW5kL29yIGlub2RlIHJlc2VydmF0aW9ucyBhZ2FpbnN0IHRoZW0uCisgKiBHaXZlbiBkcXVvdChzKSwgbWFrZSBkaXNrIGJsb2NrIGFuZC9vciBpbm9kZSByZXNlcnZhdGlvbnMgYWdhaW5zdCB0aGVtLgogICogVGhlIGZhY3QgdGhhdCB0aGlzIGRvZXMgdGhlIHJlc2VydmF0aW9uIGFnYWluc3QgYm90aCB0aGUgdXNyIGFuZAotICogZ3JwIHF1b3RhcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBmb2xsb3dzIGEgYm90aC1vci1ub3RoaW5nCisgKiBncnAvcHJqIHF1b3RhcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBmb2xsb3dzIGEgYm90aC1vci1ub3RoaW5nCiAgKiBhcHByb2FjaC4KICAqCiAgKiBmbGFncyA9IFhGU19RTU9QVF9EUUxPQ0sgaW5kaWNhdGUgaWYgZHF1b3QocykgbmVlZCB0byBiZSBsb2NrZWQuCiAgKgkgICBYRlNfUU1PUFRfRk9SQ0VfUkVTIGV2YWRlcyBsaW1pdCBlbmZvcmNlbWVudC4gVXNlZCBieSBjaG93bi4KKyAqCSAgIFhGU19RTU9QVF9FTk9TUEMgcmV0dXJucyBFTk9TUEMgbm90IEVEUVVPVC4gIFVzZWQgYnkgcHF1b3RhLgogICoJICAgWEZTX1RSQU5TX0RRX1JFU19CTEtTIHJlc2VydmVzIHJlZ3VsYXIgZGlzayBibG9ja3MKICAqCSAgIFhGU19UUkFOU19EUV9SRVNfUlRCTEtTIHJlc2VydmVzIHJlYWx0aW1lIGRpc2sgYmxvY2tzCiAgKiBkcXVvdHMgYXJlIHVubG9ja2VkIG9uIHJldHVybiwgaWYgdGhleSB3ZXJlIG5vdCBsb2NrZWQgYnkgY2FsbGVyLgpAQCAtNzcyLDI1ICs3NzIsMjcgQEAKIAlsb25nCQluaW5vcywKIAl1aW50CQlmbGFncykKIHsKLQlpbnQJCXJlc3ZkOworCWludAkJcmVzdmQgPSAwLCBlcnJvcjsKIAotCWlmICghIFhGU19JU19RVU9UQV9PTihtcCkpCi0JCXJldHVybiAoMCk7CisJaWYgKCFYRlNfSVNfUVVPVEFfT04obXApKQorCQlyZXR1cm4gMDsKIAogCWlmICh0cCAmJiB0cC0+dF9kcWluZm8gPT0gTlVMTCkKIAkJeGZzX3RyYW5zX2FsbG9jX2RxaW5mbyh0cCk7CiAKIAlBU1NFUlQoZmxhZ3MgJiBYRlNfUU1PUFRfUkVTQkxLX01BU0spOwotCXJlc3ZkID0gMDsKIAogCWlmICh1ZHFwKSB7Ci0JCWlmICh4ZnNfdHJhbnNfZHFyZXN2KHRwLCBtcCwgdWRxcCwgbmJsa3MsIG5pbm9zLCBmbGFncykpCi0JCQlyZXR1cm4gKEVEUVVPVCk7CisJCWVycm9yID0geGZzX3RyYW5zX2RxcmVzdih0cCwgbXAsIHVkcXAsIG5ibGtzLCBuaW5vcywKKwkJCQkJKGZsYWdzICYgflhGU19RTU9QVF9FTk9TUEMpKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCQlyZXN2ZCA9IDE7CiAJfQogCiAJaWYgKGdkcXApIHsKLQkJaWYgKHhmc190cmFuc19kcXJlc3YodHAsIG1wLCBnZHFwLCBuYmxrcywgbmlub3MsIGZsYWdzKSkgeworCQllcnJvciA9IHhmc190cmFuc19kcXJlc3YodHAsIG1wLCBnZHFwLCBuYmxrcywgbmlub3MsIGZsYWdzKTsKKwkJaWYgKGVycm9yKSB7CiAJCQkvKgogCQkJICogY2FuJ3QgZG8gaXQsIHNvIGJhY2tvdXQgcHJldmlvdXMgcmVzZXJ2YXRpb24KIAkJCSAqLwpAQCAtNzk5LDE0ICs4MDEsMTQgQEAKIAkJCQl4ZnNfdHJhbnNfZHFyZXN2KHRwLCBtcCwgdWRxcCwKIAkJCQkJCSAtbmJsa3MsIC1uaW5vcywgZmxhZ3MpOwogCQkJfQotCQkJcmV0dXJuIChFRFFVT1QpOworCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJfQogCiAJLyoKIAkgKiBEaWRuJ3QgY2hhbmdlIGFueXRoaW5nIGNyaXRpY2FsLCBzbywgbm8gbmVlZCB0byBsb2cKIAkgKi8KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiAKQEAgLTgxNCw4ICs4MTYsNiBAQAogICogTG9jayB0aGUgZHF1b3QgYW5kIGNoYW5nZSB0aGUgcmVzZXJ2YXRpb24gaWYgd2UgY2FuLgogICogVGhpcyBkb2Vzbid0IGNoYW5nZSB0aGUgYWN0dWFsIHVzYWdlLCBqdXN0IHRoZSByZXNlcnZhdGlvbi4KICAqIFRoZSBpbm9kZSBzZW50IGluIGlzIGxvY2tlZC4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgRURRVU9UIG9yIG90aGVyIGVycm9ycyBvdGhlcndpc2UKICAqLwogU1RBVElDIGludAogeGZzX3RyYW5zX3Jlc2VydmVfcXVvdGFfbmJsa3MoCkBAIC04MjQsMjAgKzgyNCwyNCBAQAogCXhmc19pbm9kZV90CSppcCwKIAlsb25nCQluYmxrcywKIAlsb25nCQluaW5vcywKLQl1aW50CQl0eXBlKQorCXVpbnQJCWZsYWdzKQogewogCWludAkJZXJyb3I7CiAKIAlpZiAoIVhGU19JU19RVU9UQV9PTihtcCkpCi0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOworCWlmIChYRlNfSVNfUFFVT1RBX09OKG1wKSkKKwkJZmxhZ3MgfD0gWEZTX1FNT1BUX0VOT1NQQzsKIAogCUFTU0VSVChpcC0+aV9pbm8gIT0gbXAtPm1fc2Iuc2JfdXF1b3Rpbm8pOwogCUFTU0VSVChpcC0+aV9pbm8gIT0gbXAtPm1fc2Iuc2JfZ3F1b3Rpbm8pOwogCiAJQVNTRVJUKFhGU19JU0xPQ0tFRF9JTk9ERV9FWENMKGlwKSk7CiAJQVNTRVJUKFhGU19JU19RVU9UQV9SVU5OSU5HKGlwLT5pX21vdW50KSk7Ci0JQVNTRVJUKCh0eXBlICYgflhGU19RTU9QVF9GT1JDRV9SRVMpID09IFhGU19UUkFOU19EUV9SRVNfUlRCTEtTIHx8Ci0JICAgICAgICh0eXBlICYgflhGU19RTU9QVF9GT1JDRV9SRVMpID09IFhGU19UUkFOU19EUV9SRVNfQkxLUyk7CisJQVNTRVJUKChmbGFncyAmIH4oWEZTX1FNT1BUX0ZPUkNFX1JFUyB8IFhGU19RTU9QVF9FTk9TUEMpKSA9PQorCQkJCVhGU19UUkFOU19EUV9SRVNfUlRCTEtTIHx8CisJICAgICAgIChmbGFncyAmIH4oWEZTX1FNT1BUX0ZPUkNFX1JFUyB8IFhGU19RTU9QVF9FTk9TUEMpKSA9PQorCQkJCVhGU19UUkFOU19EUV9SRVNfQkxLUyk7CiAKIAkvKgogCSAqIFJlc2VydmUgbmJsa3MgYWdhaW5zdCB0aGVzZSBkcXVvdHMsIHdpdGggdHJhbnMgYXMgdGhlIG1lZGlhdG9yLgpAQCAtODQ1LDggKzg0OSw4IEBACiAJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZV9xdW90YV9ieWRxdW90cyh0cCwgbXAsCiAJCQkJCQkgaXAtPmlfdWRxdW90LCBpcC0+aV9nZHF1b3QsCiAJCQkJCQkgbmJsa3MsIG5pbm9zLAotCQkJCQkJIHR5cGUpOwotCXJldHVybiAoZXJyb3IpOworCQkJCQkJIGZsYWdzKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggNjRlZTA3ZC4uODU1ODIyNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMTk0Miw4ICsxOTQyLDEwIEBACiAJCS8qCiAJCSAqIEFsbG9jYXRlIGFzIG1hbnkgYmxvY2tzIGFzIHBvc3NpYmxlIGF0IG9uY2UuCiAJCSAqLwotCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2FnX3ZleHRlbnQoJnRhcmdzKSkpCisJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfYWdfdmV4dGVudCgmdGFyZ3MpKSkgeworCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdmbGJwKTsKIAkJCXJldHVybiBlcnJvcjsKKwkJfQogCQkvKgogCQkgKiBTdG9wIGlmIHdlIHJ1biBvdXQuICBXb24ndCBoYXBwZW4gaWYgY2FsbGVycyBhcmUgb2JleWluZwogCQkgKiB0aGUgcmVzdHJpY3Rpb25zIGNvcnJlY3RseS4gIENhbiBoYXBwZW4gZm9yIGZyZWUgY2FsbHMKQEAgLTE5NjAsNiArMTk2Miw3IEBACiAJCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJfQorCXhmc190cmFuc19icmVsc2UodHAsIGFnZmxicCk7CiAJYXJncy0+YWdicCA9IGFnYnA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IGQzODRlNDguLjI2OTM5ZDMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC00NzE5LDE4ICs0NzE5LDE3IEBACiAJCQkJLyoKIAkJCQkgKiBNYWtlIGEgdHJhbnNhY3Rpb24tbGVzcyBxdW90YSByZXNlcnZhdGlvbiBmb3IKIAkJCQkgKiBkZWxheWVkIGFsbG9jYXRpb24gYmxvY2tzLiBUaGlzIG51bWJlciBnZXRzCi0JCQkJICogYWRqdXN0ZWQgbGF0ZXIuCi0JCQkJICogV2UgcmV0dXJuIEVEUVVPVCBpZiB3ZSBoYXZlbid0IGFsbG9jYXRlZAotCQkJCSAqIGJsa3MgYWxyZWFkeSBpbnNpZGUgdGhpcyBsb29wOworCQkJCSAqIGFkanVzdGVkIGxhdGVyLiAgV2UgcmV0dXJuIGlmIHdlIGhhdmVuJ3QKKwkJCQkgKiBhbGxvY2F0ZWQgYmxvY2tzIGFscmVhZHkgaW5zaWRlIHRoaXMgbG9vcC4KIAkJCQkgKi8KLQkJCQlpZiAoWEZTX1RSQU5TX1JFU0VSVkVfUVVPVEFfTkJMS1MoCisJCQkJaWYgKChlcnJvciA9IFhGU19UUkFOU19SRVNFUlZFX1FVT1RBX05CTEtTKAogCQkJCQkJbXAsIE5VTEwsIGlwLCAobG9uZylhbGVuLCAwLAogCQkJCQkJcnQgPyBYRlNfUU1PUFRfUkVTX1JUQkxLUyA6Ci0JCQkJCQkgICAgIFhGU19RTU9QVF9SRVNfUkVHQkxLUykpIHsKKwkJCQkJCSAgICAgWEZTX1FNT1BUX1JFU19SRUdCTEtTKSkpIHsKIAkJCQkJaWYgKG4gPT0gMCkgewogCQkJCQkJKm5tYXAgPSAwOwogCQkJCQkJQVNTRVJUKGN1ciA9PSBOVUxMKTsKLQkJCQkJCXJldHVybiBYRlNfRVJST1IoRURRVU9UKTsKKwkJCQkJCXJldHVybiBlcnJvcjsKIAkJCQkJfQogCQkJCQlicmVhazsKIAkJCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuaCBiL2ZzL3hmcy94ZnNfYm1hcC5oCmluZGV4IGY4MzM5OWMuLjhlMGQ3M2QgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5oCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5oCkBAIC0zNTMsMTAgKzM1MywxMSBAQAogCXhmc19leHRudW1fdAkJbnVtKTsKIAogLyoKLSAqIENhbGwgeGZzX2JtYXBfZG9fc2VhcmNoX2V4dGVudHMoKSB0byBzZWFyY2ggZm9yIHRoZSBleHRlbnQKLSAqIHJlY29yZCBjb250YWluaW5nIGJsb2NrIGJuby4gSWYgaW4gbXVsdGktbGV2ZWwgaW4tY29yZSBleHRlbnQKLSAqIGFsbG9jYXRpb24gbW9kZSwgZmluZCBhbmQgZXh0cmFjdCB0aGUgdGFyZ2V0IGV4dGVudCBidWZmZXIsCi0gKiBvdGhlcndpc2UganVzdCB1c2UgdGhlIGRpcmVjdCBleHRlbnQgbGlzdC4KKyAqIFNlYXJjaCB0aGUgZXh0ZW50IHJlY29yZHMgZm9yIHRoZSBlbnRyeSBjb250YWluaW5nIGJsb2NrIGJuby4KKyAqIElmIGJubyBsaWVzIGluIGEgaG9sZSwgcG9pbnQgdG8gdGhlIG5leHQgZW50cnkuICBJZiBibm8gbGllcworICogcGFzdCBlb2YsICplb2ZwIHdpbGwgYmUgc2V0LCBhbmQgKnByZXZwIHdpbGwgY29udGFpbiB0aGUgbGFzdAorICogZW50cnkgKG51bGwgaWYgbm9uZSkuICBFbHNlLCAqbGFzdHhwIHdpbGwgYmUgc2V0IHRvIHRoZSBpbmRleAorICogb2YgdGhlIGZvdW5kIGVudHJ5OyAqZ290cCB3aWxsIGNvbnRhaW4gdGhlIGVudHJ5LgogICovCiB4ZnNfYm1idF9yZWNfdCAqCiB4ZnNfYm1hcF9zZWFyY2hfbXVsdGlfZXh0ZW50cyhzdHJ1Y3QgeGZzX2lmb3JrICosIHhmc19maWxlb2ZmX3QsIGludCAqLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19jbG50LmggYi9mcy94ZnMveGZzX2NsbnQuaAppbmRleCAwMjJmZmY2Li41YjdlYjgxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2NsbnQuaAorKysgYi9mcy94ZnMveGZzX2NsbnQuaApAQCAtNjgsNiArNjgsNyBAQAogCQkJCQkJICogZW5mb3JjZW1lbnQgKi8KICNkZWZpbmUgWEZTTU5UX1BRVU9UQUVORgkweDAwMDAwMDQwCS8qIElSSVggcHJvamVjdCBxdW90YSBsaW1pdAogCQkJCQkJICogZW5mb3JjZW1lbnQgKi8KKyNkZWZpbmUgWEZTTU5UX1FVSUVUCQkweDAwMDAwMDgwCS8qIGRvbid0IHJlcG9ydCBtb3VudCBlcnJvcnMgKi8KICNkZWZpbmUgWEZTTU5UX05PQUxJR04JCTB4MDAwMDAyMDAJLyogZG9uJ3QgYWxsb2NhdGUgYXQKIAkJCQkJCSAqIHN0cmlwZSBib3VuZGFyaWVzKi8KICNkZWZpbmUgWEZTTU5UX1JFVEVSUgkJMHgwMDAwMDQwMAkvKiByZXR1cm4gZXJyb3IgdG8gdXNlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19lcnJvci5oIGIvZnMveGZzL3hmc19lcnJvci5oCmluZGV4IDI2YjhlNzAuLmJjNDMxNjMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXJyb3IuaAorKysgYi9mcy94ZnMveGZzX2Vycm9yLmgKQEAgLTE4Niw0ICsxODYsNyBAQAogI2RlZmluZSB4ZnNfZnNfcmVwYWlyX2Ntbl9lcnIobGV2ZWwsIG1wLCBmbXQsIGFyZ3MuLi4pIFwKIAl4ZnNfZnNfY21uX2VycihsZXZlbCwgbXAsIGZtdCAiICBVbm1vdW50IGFuZCBydW4geGZzX3JlcGFpci4iLCAjIyBhcmdzKQogCisjZGVmaW5lIHhmc19mc19tb3VudF9jbW5fZXJyKGYsIGZtdCwgYXJncy4uLikgXAorCSgoZiAmIFhGU19NRlNJX1FVSUVUKT8gY21uX2VycihDRV9XQVJOLCAiWEZTOiAiIGZtdCwgIyMgYXJncykgOiAodm9pZCkwKQorCiAjZW5kaWYJLyogX19YRlNfRVJST1JfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCA0ZWViODU2Li5kZWRkYmQwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTE1OCw5ICsxNTgsMTAgQEAKICAJICovCiAJYWdpID0gWEZTX0JVRl9UT19BR0koYWdicCk7CiAJbmV3aW5vID0gYmUzMl90b19jcHUoYWdpLT5hZ2lfbmV3aW5vKTsKLQlpZihsaWtlbHkobmV3aW5vICE9IE5VTExBR0lOTykpIHsKLQkJYXJncy5hZ2JubyA9IFhGU19BR0lOT19UT19BR0JOTyhhcmdzLm1wLCBuZXdpbm8pICsKLQkJCQlYRlNfSUFMTE9DX0JMT0NLUyhhcmdzLm1wKTsKKwlhcmdzLmFnYm5vID0gWEZTX0FHSU5PX1RPX0FHQk5PKGFyZ3MubXAsIG5ld2lubykgKworCQkJWEZTX0lBTExPQ19CTE9DS1MoYXJncy5tcCk7CisJaWYgKGxpa2VseShuZXdpbm8gIT0gTlVMTEFHSU5PICYmCisJCSAgKGFyZ3MuYWdibm8gPCBiZTMyX3RvX2NwdShhZ2ktPmFnaV9sZW5ndGgpKSkpIHsKIAkJYXJncy5mc2JubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MubXAsCiAJCQkJYmUzMl90b19jcHUoYWdpLT5hZ2lfc2Vxbm8pLCBhcmdzLmFnYm5vKTsKIAkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9USElTX0JOTzsKQEAgLTE4Miw4ICsxODMsOCBAQAogCQkgKiBTZXQgdGhlIGFsaWdubWVudCBmb3IgdGhlIGFsbG9jYXRpb24uCiAJCSAqIElmIHN0cmlwZSBhbGlnbm1lbnQgaXMgdHVybmVkIG9uIHRoZW4gYWxpZ24gYXQgc3RyaXBlIHVuaXQKIAkJICogYm91bmRhcnkuCi0JCSAqIElmIHRoZSBjbHVzdGVyIHNpemUgaXMgc21hbGxlciB0aGFuIGEgZmlsZXN5c3RlbSBibG9jayAKLQkJICogdGhlbiB3ZSdyZSBkb2luZyBJL08gZm9yIGlub2RlcyBpbiBmaWxlc3lzdGVtIGJsb2NrIHNpemUgCisJCSAqIElmIHRoZSBjbHVzdGVyIHNpemUgaXMgc21hbGxlciB0aGFuIGEgZmlsZXN5c3RlbSBibG9jaworCQkgKiB0aGVuIHdlJ3JlIGRvaW5nIEkvTyBmb3IgaW5vZGVzIGluIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZQogCQkgKiBwaWVjZXMsIHNvIGRvbid0IG5lZWQgYWxpZ25tZW50IGFueXdheS4KIAkJICovCiAJCWlzYWxpZ25lZCA9IDA7CkBAIC0xOTIsNyArMTkzLDcgQEAKIAkJCWFyZ3MuYWxpZ25tZW50ID0gYXJncy5tcC0+bV9kYWxpZ247CiAJCQlpc2FsaWduZWQgPSAxOwogCQl9IGVsc2UgaWYgKFhGU19TQl9WRVJTSU9OX0hBU0FMSUdOKCZhcmdzLm1wLT5tX3NiKSAmJgotCQkJICAgYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49IAorCQkJICAgYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49CiAJCQkgICBYRlNfQl9UT19GU0JUKGFyZ3MubXAsCiAJCQkgIAlYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKGFyZ3MubXApKSkKIAkJCQlhcmdzLmFsaWdubWVudCA9IGFyZ3MubXAtPm1fc2Iuc2JfaW5vYWxpZ25tdDsKQEAgLTIyMCw3ICsyMjEsNyBAQAogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX3ZleHRlbnQoJmFyZ3MpKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9Ci0gCisKIAkvKgogCSAqIElmIHN0cmlwZSBhbGlnbm1lbnQgaXMgdHVybmVkIG9uLCB0aGVuIHRyeSBhZ2FpbiB3aXRoIGNsdXN0ZXIKIAkgKiBhbGlnbm1lbnQuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IGJiMzMxMTMuLmI1Mzg1NDMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC00MjEsNyArNDIxLDEwIEBACiAJCQlpcC0+aV9jaGFzaCA9IGNobG5ldzsKIAkJCWNobG5ldy0+Y2hsX2lwID0gaXA7CiAJCQljaGxuZXctPmNobF9ibGtubyA9IGlwLT5pX2Jsa25vOworCQkJaWYgKGNoLT5jaF9saXN0KQorCQkJCWNoLT5jaF9saXN0LT5jaGxfcHJldiA9IGNobG5ldzsKIAkJCWNobG5ldy0+Y2hsX25leHQgPSBjaC0+Y2hfbGlzdDsKKwkJCWNobG5ldy0+Y2hsX3ByZXYgPSBOVUxMOwogCQkJY2gtPmNoX2xpc3QgPSBjaGxuZXc7CiAJCQljaGxuZXcgPSBOVUxMOwogCQl9CkBAIC03MjMsMjMgKzcyNiwxNSBAQAogCQlBU1NFUlQoaXAtPmlfY25leHQgPT0gaXAgJiYgaXAtPmlfY3ByZXYgPT0gaXApOwogCQlBU1NFUlQoaXAtPmlfY2hhc2ggIT0gTlVMTCk7CiAJCWNobT1OVUxMOwotCQlmb3IgKGNobCA9IGNoLT5jaF9saXN0OyBjaGwgIT0gTlVMTDsgY2hsID0gY2hsLT5jaGxfbmV4dCkgewotCQkJaWYgKGNobC0+Y2hsX2Jsa25vID09IGlwLT5pX2Jsa25vKSB7Ci0JCQkJaWYgKGNobSA9PSBOVUxMKSB7Ci0JCQkJCS8qIGZpcnN0IGl0ZW0gb24gdGhlIGxpc3QgKi8KLQkJCQkJY2gtPmNoX2xpc3QgPSBjaGwtPmNobF9uZXh0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNobS0+Y2hsX25leHQgPSBjaGwtPmNobF9uZXh0OwotCQkJCX0KLQkJCQlrbWVtX3pvbmVfZnJlZSh4ZnNfY2hhc2hsaXN0X3pvbmUsIGNobCk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCUFTU0VSVChjaGwtPmNobF9pcCAhPSBpcCk7Ci0JCQkJY2htID0gY2hsOwotCQkJfQotCQl9Ci0JCUFTU0VSVF9BTFdBWVMoY2hsICE9IE5VTEwpOwotICAgICAgIH0gZWxzZSB7CisJCWNobCA9IGlwLT5pX2NoYXNoOworCQlpZiAoY2hsLT5jaGxfcHJldikKKwkJCWNobC0+Y2hsX3ByZXYtPmNobF9uZXh0ID0gY2hsLT5jaGxfbmV4dDsKKwkJZWxzZQorCQkJY2gtPmNoX2xpc3QgPSBjaGwtPmNobF9uZXh0OworCQlpZiAoY2hsLT5jaGxfbmV4dCkKKwkJCWNobC0+Y2hsX25leHQtPmNobF9wcmV2ID0gY2hsLT5jaGxfcHJldjsKKwkJa21lbV96b25lX2ZyZWUoeGZzX2NoYXNobGlzdF96b25lLCBjaGwpOworCX0gZWxzZSB7CiAJCS8qIGRlbGV0ZSBvbmUgaW5vZGUgZnJvbSBhIG5vbi1lbXB0eSBsaXN0ICovCiAJCWlxID0gaXAtPmlfY25leHQ7CiAJCWlxLT5pX2NwcmV2ID0gaXAtPmlfY3ByZXY7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggNDgxNDZiZC4uOTRiNjBkZDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTI3MzIsMTYgKzI3MzIsMjkgQEAKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA+IDApOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlwLT5pX3BpbmNvdW50KSkgewotCQl2bm9kZV90CSp2cCA9IFhGU19JVE9WX05VTEwoaXApOworCQkvKgorCQkgKiBJZiB0aGUgaW5vZGUgaXMgY3VycmVudGx5IGJlaW5nIHJlY2xhaW1lZCwgdGhlCisJCSAqIGxpbnV4IGlub2RlIF9hbmRfIHRoZSB4ZnMgdm5vZGUgbWF5IGhhdmUgYmVlbgorCQkgKiBmcmVlZCBzbyB3ZSBjYW5ub3QgcmVmZXJlbmNlIGVpdGhlciBvZiB0aGVtIHNhZmVseS4KKwkJICogSGVuY2Ugd2Ugc2hvdWxkIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgdG8gdGhlbQorCQkgKiBpZiB0aGUgeGZzIGlub2RlIGlzIGN1cnJlbnRseSBpbiB0aGUgcmVjbGFpbQorCQkgKiBwYXRoLgorCQkgKgorCQkgKiBIb3dldmVyLCB3ZSBzdGlsbCBuZWVkIHRvIGlzc3VlIHRoZSB1bnBpbiB3YWtldXAKKwkJICogY2FsbCBhcyB0aGUgaW5vZGUgcmVjbGFpbSBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvcgorCQkgKiB0aGUgaW5vZGUgdG8gYmVjb21lIHVucGlubmVkLgorCQkgKi8KKwkJaWYgKCEoaXAtPmlfZmxhZ3MgJiAoWEZTX0lSRUNMQUlNfFhGU19JUkVDTEFJTUFCTEUpKSkgeworCQkJdm5vZGVfdAkqdnAgPSBYRlNfSVRPVl9OVUxMKGlwKTsKIAotCQkvKiBtYWtlIHN5bmMgY29tZSBiYWNrIGFuZCBmbHVzaCB0aGlzIGlub2RlICovCi0JCWlmICh2cCkgewotCQkJc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKKwkJCS8qIG1ha2Ugc3luYyBjb21lIGJhY2sgYW5kIGZsdXNoIHRoaXMgaW5vZGUgKi8KKwkJCWlmICh2cCkgeworCQkJCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAKLQkJCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKQotCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpCisJCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQl9CiAJCX0KLQogCQl3YWtlX3VwKCZpcC0+aV9pcGluX3dhaXQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAzOWVmOWMzLi4zYjU0NGRiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC0xODksNiArMTg5LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2NoYXNobGlzdCB7CiAJc3RydWN0IHhmc19jaGFzaGxpc3QJKmNobF9uZXh0OworCXN0cnVjdCB4ZnNfY2hhc2hsaXN0CSpjaGxfcHJldjsKIAlzdHJ1Y3QgeGZzX2lub2RlCSpjaGxfaXA7CiAJeGZzX2RhZGRyX3QJCWNobF9ibGtubzsJLyogc3RhcnRpbmcgYmxvY2sgbnVtYmVyIG9mCiAJCQkJCQkgKiB0aGUgY2x1c3RlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDcyZTdlNzguLmMwYjFjMjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTIxMyw3ICsyMTMsOCBAQAogU1RBVElDIGludAogeGZzX21vdW50X3ZhbGlkYXRlX3NiKAogCXhmc19tb3VudF90CSptcCwKLQl4ZnNfc2JfdAkqc2JwKQorCXhmc19zYl90CSpzYnAsCisJaW50CQlmbGFncykKIHsKIAkvKgogCSAqIElmIHRoZSBsb2cgZGV2aWNlIGFuZCBkYXRhIGRldmljZSBoYXZlIHRoZQpAQCAtMjIzLDMzICsyMjQsMjkgQEAKIAkgKiBhIHZvbHVtZSBmaWxlc3lzdGVtIGluIGEgbm9uLXZvbHVtZSBtYW5uZXIuCiAJICovCiAJaWYgKHNicC0+c2JfbWFnaWNudW0gIT0gWEZTX1NCX01BR0lDKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogYmFkIG1hZ2ljIG51bWJlciIpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgImJhZCBtYWdpYyBudW1iZXIiKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFV1JPTkdGUyk7CiAJfQogCiAJaWYgKCFYRlNfU0JfR09PRF9WRVJTSU9OKHNicCkpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBiYWQgdmVyc2lvbiIpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgImJhZCB2ZXJzaW9uIik7CiAJCXJldHVybiBYRlNfRVJST1IoRVdST05HRlMpOwogCX0KIAogCWlmICh1bmxpa2VseSgKIAkgICAgc2JwLT5zYl9sb2dzdGFydCA9PSAwICYmIG1wLT5tX2xvZ2Rldl90YXJncCA9PSBtcC0+bV9kZGV2X3RhcmdwKSkgewotCQljbW5fZXJyKENFX1dBUk4sCi0JIlhGUzogZmlsZXN5c3RlbSBpcyBtYXJrZWQgYXMgaGF2aW5nIGFuIGV4dGVybmFsIGxvZzsgIgotCSJzcGVjaWZ5IGxvZ2RldiBvbiB0aGVcbm1vdW50IGNvbW1hbmQgbGluZS4iKTsKLQkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19tb3VudF92YWxpZGF0ZV9zYigxKSIsCi0JCQkJICAgICBYRlNfRVJSTEVWRUxfSElHSCwgbXAsIHNicCk7Ci0JCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiZmlsZXN5c3RlbSBpcyBtYXJrZWQgYXMgaGF2aW5nIGFuIGV4dGVybmFsIGxvZzsgIgorCQkJInNwZWNpZnkgbG9nZGV2IG9uIHRoZVxubW91bnQgY29tbWFuZCBsaW5lLiIpOworCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQogCiAJaWYgKHVubGlrZWx5KAogCSAgICBzYnAtPnNiX2xvZ3N0YXJ0ICE9IDAgJiYgbXAtPm1fbG9nZGV2X3RhcmdwICE9IG1wLT5tX2RkZXZfdGFyZ3ApKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkiWEZTOiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBhcyBoYXZpbmcgYW4gaW50ZXJuYWwgbG9nOyAiCi0JImRvbid0IHNwZWNpZnkgbG9nZGV2IG9uXG50aGUgbW91bnQgY29tbWFuZCBsaW5lLiIpOwotCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX21vdW50X3ZhbGlkYXRlX3NiKDIpIiwKLQkJCQkgICAgIFhGU19FUlJMRVZFTF9ISUdILCBtcCwgc2JwKTsKLQkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKKwkJCSJmaWxlc3lzdGVtIGlzIG1hcmtlZCBhcyBoYXZpbmcgYW4gaW50ZXJuYWwgbG9nOyAiCisJCQkiZG8gbm90IHNwZWNpZnkgbG9nZGV2IG9uXG50aGUgbW91bnQgY29tbWFuZCBsaW5lLiIpOworCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQogCiAJLyoKQEAgLTI3MywxMCArMjcwLDggQEAKIAkgICAgKHNicC0+c2JfYmxvY2tsb2cgLSBzYnAtPnNiX2lub2RlbG9nICE9IHNicC0+c2JfaW5vcGJsb2cpCXx8CiAJICAgIChzYnAtPnNiX3JleHRzaXplICogc2JwLT5zYl9ibG9ja3NpemUgPiBYRlNfTUFYX1JURVhUU0laRSkJfHwKIAkgICAgKHNicC0+c2JfcmV4dHNpemUgKiBzYnAtPnNiX2Jsb2Nrc2l6ZSA8IFhGU19NSU5fUlRFWFRTSVpFKQl8fAotCSAgICAoc2JwLT5zYl9pbWF4X3BjdCA+IDEwMCB8fCBzYnAtPnNiX2ltYXhfcGN0IDwgMSkpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogU0Igc2FuaXR5IGNoZWNrIDEgZmFpbGVkIik7Ci0JCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfbW91bnRfdmFsaWRhdGVfc2IoMykiLAotCQkJCSAgICAgWEZTX0VSUkxFVkVMX0xPVywgbXAsIHNicCk7CisJICAgIChzYnAtPnNiX2ltYXhfcGN0ID4gMTAwIC8qIHplcm8gc2JfaW1heF9wY3QgaXMgdmFsaWQgKi8pKSkgeworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHNhbml0eSBjaGVjayAxIGZhaWxlZCIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQogCkBAIC0yODksOSArMjg0LDcgQEAKIAkgICAgICh4ZnNfZHJmc2Jub190KXNicC0+c2JfYWdjb3VudCAqIHNicC0+c2JfYWdibG9ja3MgfHwKIAkgICAgc2JwLT5zYl9kYmxvY2tzIDwgKHhmc19kcmZzYm5vX3QpKHNicC0+c2JfYWdjb3VudCAtIDEpICoKIAkJCSAgICAgIHNicC0+c2JfYWdibG9ja3MgKyBYRlNfTUlOX0FHX0JMT0NLUykpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBTQiBzYW5pdHkgY2hlY2sgMiBmYWlsZWQiKTsKLQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX21vdW50X3ZhbGlkYXRlX3NiKDQpIiwKLQkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbXApOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHNhbml0eSBjaGVjayAyIGZhaWxlZCIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQogCkBAIC0zMDcsMTUgKzMwMCwxMyBAQAogCSAgICAoc2JwLT5zYl9kYmxvY2tzIDw8IChzYnAtPnNiX2Jsb2NrbG9nIC0gQkJTSElGVCkpID4gVUlOVF9NQVggfHwKIAkgICAgKHNicC0+c2JfcmJsb2NrcyA8PCAoc2JwLT5zYl9ibG9ja2xvZyAtIEJCU0hJRlQpKSA+IFVJTlRfTUFYKSkgewogI2VuZGlmCi0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkiWEZTOiBGaWxlIHN5c3RlbSBpcyB0b28gbGFyZ2UgdG8gYmUgbW91bnRlZCBvbiB0aGlzIHN5c3RlbS4iKTsKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiZmlsZSBzeXN0ZW0gdG9vIGxhcmdlIHRvIGJlIG1vdW50ZWQgb24gdGhpcyBzeXN0ZW0uIik7CiAJCXJldHVybiBYRlNfRVJST1IoRTJCSUcpOwogCX0KIAogCWlmICh1bmxpa2VseShzYnAtPnNiX2lucHJvZ3Jlc3MpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogZmlsZSBzeXN0ZW0gYnVzeSIpOwotCQlYRlNfRVJST1JfUkVQT1JUKCJ4ZnNfbW91bnRfdmFsaWRhdGVfc2IoNSkiLAotCQkJCSBYRlNfRVJSTEVWRUxfTE9XLCBtcCk7CisJCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLCAiZmlsZSBzeXN0ZW0gYnVzeSIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQogCkBAIC0zMjMsOCArMzE0LDggQEAKIAkgKiBWZXJzaW9uIDEgZGlyZWN0b3J5IGZvcm1hdCBoYXMgbmV2ZXIgd29ya2VkIG9uIExpbnV4LgogCSAqLwogCWlmICh1bmxpa2VseSghWEZTX1NCX1ZFUlNJT05fSEFTRElSVjIoc2JwKSkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCSJYRlM6IEF0dGVtcHRlZCB0byBtb3VudCBmaWxlIHN5c3RlbSB1c2luZyB2ZXJzaW9uIDEgZGlyZWN0b3J5IGZvcm1hdCIpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKKwkJCSJmaWxlIHN5c3RlbSB1c2luZyB2ZXJzaW9uIDEgZGlyZWN0b3J5IGZvcm1hdCIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NZUyk7CiAJfQogCkBAIC0zMzIsMTEgKzMyMywxMSBAQAogCSAqIFVudGlsIHRoaXMgaXMgZml4ZWQgb25seSBwYWdlLXNpemVkIG9yIHNtYWxsZXIgZGF0YSBibG9ja3Mgd29yay4KIAkgKi8KIAlpZiAodW5saWtlbHkoc2JwLT5zYl9ibG9ja3NpemUgPiBQQUdFX1NJWkUpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJIlhGUzogQXR0ZW1wdGVkIHRvIG1vdW50IGZpbGUgc3lzdGVtIHdpdGggYmxvY2tzaXplICVkIGJ5dGVzIiwKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiZmlsZSBzeXN0ZW0gd2l0aCBibG9ja3NpemUgJWQgYnl0ZXMiLAogCQkJc2JwLT5zYl9ibG9ja3NpemUpOwotCQljbW5fZXJyKENFX1dBUk4sCi0JCSJYRlM6IE9ubHkgcGFnZS1zaXplZCAoJWxkKSBvciBsZXNzIGJsb2Nrc2l6ZXMgY3VycmVudGx5IHdvcmsuIiwKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkib25seSBwYWdlc2l6ZSAoJWxkKSBvciBsZXNzIHdpbGwgY3VycmVudGx5IHdvcmsuIiwKIAkJCVBBR0VfU0laRSk7CiAJCXJldHVybiBYRlNfRVJST1IoRU5PU1lTKTsKIAl9CkBAIC00ODQsNyArNDc1LDcgQEAKICAqIERvZXMgdGhlIGluaXRpYWwgcmVhZCBvZiB0aGUgc3VwZXJibG9jay4KICAqLwogaW50Ci14ZnNfcmVhZHNiKHhmc19tb3VudF90ICptcCkKK3hmc19yZWFkc2IoeGZzX21vdW50X3QgKm1wLCBpbnQgZmxhZ3MpCiB7CiAJdW5zaWduZWQgaW50CXNlY3Rvcl9zaXplOwogCXVuc2lnbmVkIGludAlleHRyYV9mbGFnczsKQEAgLTUwNiw3ICs0OTcsNyBAQAogCWJwID0geGZzX2J1Zl9yZWFkX2ZsYWdzKG1wLT5tX2RkZXZfdGFyZ3AsIFhGU19TQl9EQUREUiwKIAkJCQlCVE9CQihzZWN0b3Jfc2l6ZSksIGV4dHJhX2ZsYWdzKTsKIAlpZiAoIWJwIHx8IFhGU19CVUZfSVNFUlJPUihicCkpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBTQiByZWFkIGZhaWxlZCIpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHJlYWQgZmFpbGVkIik7CiAJCWVycm9yID0gYnAgPyBYRlNfQlVGX0dFVEVSUk9SKGJwKSA6IEVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KQEAgLTUyMCw5ICs1MTEsOSBAQAogCXNicCA9IFhGU19CVUZfVE9fU0JQKGJwKTsKIAl4ZnNfeGxhdGVzYihYRlNfQlVGX1BUUihicCksICYobXAtPm1fc2IpLCAxLCBYRlNfU0JfQUxMX0JJVFMpOwogCi0JZXJyb3IgPSB4ZnNfbW91bnRfdmFsaWRhdGVfc2IobXAsICYobXAtPm1fc2IpKTsKKwllcnJvciA9IHhmc19tb3VudF92YWxpZGF0ZV9zYihtcCwgJihtcC0+bV9zYiksIGZsYWdzKTsKIAlpZiAoZXJyb3IpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBTQiB2YWxpZGF0ZSBmYWlsZWQiKTsKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsICJTQiB2YWxpZGF0ZSBmYWlsZWQiKTsKIAkJZ290byBmYWlsOwogCX0KIApAQCAtNTMwLDggKzUyMSw4IEBACiAJICogV2UgbXVzdCBiZSBhYmxlIHRvIGRvIHNlY3Rvci1zaXplZCBhbmQgc2VjdG9yLWFsaWduZWQgSU8uCiAJICovCiAJaWYgKHNlY3Rvcl9zaXplID4gbXAtPm1fc2Iuc2Jfc2VjdHNpemUpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogZGV2aWNlIHN1cHBvcnRzIG9ubHkgJXUgYnl0ZSBzZWN0b3JzIChub3QgJXUpIiwKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiZGV2aWNlIHN1cHBvcnRzIG9ubHkgJXUgYnl0ZSBzZWN0b3JzIChub3QgJXUpIiwKIAkJCXNlY3Rvcl9zaXplLCBtcC0+bV9zYi5zYl9zZWN0c2l6ZSk7CiAJCWVycm9yID0gRU5PU1lTOwogCQlnb3RvIGZhaWw7CkBAIC01NDgsNyArNTM5LDcgQEAKIAkJYnAgPSB4ZnNfYnVmX3JlYWRfZmxhZ3MobXAtPm1fZGRldl90YXJncCwgWEZTX1NCX0RBRERSLAogCQkJCQlCVE9CQihzZWN0b3Jfc2l6ZSksIGV4dHJhX2ZsYWdzKTsKIAkJaWYgKCFicCB8fCBYRlNfQlVGX0lTRVJST1IoYnApKSB7Ci0JCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFNCIHJlLXJlYWQgZmFpbGVkIik7CisJCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHJlLXJlYWQgZmFpbGVkIik7CiAJCQllcnJvciA9IGJwID8gWEZTX0JVRl9HRVRFUlJPUihicCkgOiBFTk9NRU07CiAJCQlnb3RvIGZhaWw7CiAJCX0KQEAgLTY3OCw3ICs2NjksNyBAQAogCWludAkJZXJyb3IgPSAwOwogCiAJaWYgKG1wLT5tX3NiX2JwID09IE5VTEwpIHsKLQkJaWYgKChlcnJvciA9IHhmc19yZWFkc2IobXApKSkgeworCQlpZiAoKGVycm9yID0geGZzX3JlYWRzYihtcCwgbWZzaV9mbGFncykpKSB7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggNjZjYmVlNy4uNjY4YWQyMyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtNTEwLDkgKzUxMCwxMiBAQAogICovCiAjZGVmaW5lIFhGU19NRlNJX1NFQ09ORAkJMHgwMQkvKiBTZWNvbmRhcnkgbW91bnQgLS0gc2tpcCBzdHVmZiAqLwogI2RlZmluZSBYRlNfTUZTSV9DTElFTlQJCTB4MDIJLyogSXMgYSBjbGllbnQgLS0gc2tpcCBsb3RzIG9mIHN0dWZmICovCisvKglYRlNfTUZTSV9SUklOT0RFUwkqLwogI2RlZmluZSBYRlNfTUZTSV9OT1VOTElOSwkweDA4CS8qIFNraXAgdW5saW5rZWQgaW5vZGUgcHJvY2Vzc2luZyBpbiAqLwogCQkJCQkvKiBsb2cgcmVjb3ZlcnkgKi8KICNkZWZpbmUgWEZTX01GU0lfTk9fUVVPVEFDSEVDSwkweDEwCS8qIFNraXAgcXVvdGFjaGVjayBwcm9jZXNzaW5nICovCisvKglYRlNfTUZTSV9DT05WRVJUX1NVTklUCSovCisjZGVmaW5lIFhGU19NRlNJX1FVSUVUCQkweDQwCS8qIEJlIHNpbGVudCBpZiBtb3VudCBlcnJvcnMgZm91bmQgKi8KIAogLyoKICAqIE1hY3JvcyBmb3IgZ2V0dGluZyBmcm9tIG1vdW50IHRvIHZmcyBhbmQgYmFjay4KQEAgLTU4MSw3ICs1ODQsNyBAQAogZXh0ZXJuIGludAl4ZnNfbW9kX2luY29yZV9zYl9iYXRjaCh4ZnNfbW91bnRfdCAqLCB4ZnNfbW9kX3NiX3QgKiwKIAkJCXVpbnQsIGludCk7CiBleHRlcm4gc3RydWN0IHhmc19idWYgKnhmc19nZXRzYih4ZnNfbW91bnRfdCAqLCBpbnQpOwotZXh0ZXJuIGludAl4ZnNfcmVhZHNiKHhmc19tb3VudF90ICptcCk7CitleHRlcm4gaW50CXhmc19yZWFkc2IoeGZzX21vdW50X3QgKiwgaW50KTsKIGV4dGVybiB2b2lkCXhmc19mcmVlc2IoeGZzX21vdW50X3QgKik7CiBleHRlcm4gdm9pZAl4ZnNfZG9fZm9yY2Vfc2h1dGRvd24oYmh2X2Rlc2NfdCAqLCBpbnQsIGNoYXIgKiwgaW50KTsKIGV4dGVybiBpbnQJeGZzX3N5bmNzdWIoeGZzX21vdW50X3QgKiwgaW50LCBpbnQsIGludCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcXVvdGEuaCBiL2ZzL3hmcy94ZnNfcXVvdGEuaAppbmRleCA0ZjZhMDM0Li43ZmJlZjk3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3F1b3RhLmgKKysrIGIvZnMveGZzL3hmc19xdW90YS5oCkBAIC0xOTYsMTAgKzE5NiwxMSBAQAogI2RlZmluZSBYRlNfUU1PUFRfUVVPVEFPRkYJMHgwMDAwMDgwIC8qIHF1b3RhcyBhcmUgYmVpbmcgdHVybmVkIG9mZiAqLwogI2RlZmluZSBYRlNfUU1PUFRfVU1PVU5USU5HCTB4MDAwMDEwMCAvKiBmaWxlc3lzIGlzIGJlaW5nIHVubW91bnRlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfRE9MT0cJCTB4MDAwMDIwMCAvKiBsb2cgYnVmIGNoYW5nZXMgKGluIHF1b3RhY2hlY2spICovCi0jZGVmaW5lIFhGU19RTU9QVF9ET1dBUk4gICAgICAgIDB4MDAwMDQwMCAvKiBpbmNyZWFzZSB3YXJuaW5nIGNudCBpZiBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgWEZTX1FNT1BUX0RPV0FSTiAgICAgICAgMHgwMDAwNDAwIC8qIGluY3JlYXNlIHdhcm5pbmcgY250IGlmIG5lZWRlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfSUxPQ0tFRAkweDAwMDA4MDAgLyogaW5vZGUgaXMgYWxyZWFkeSBsb2NrZWQgKGV4Y2wpICovCi0jZGVmaW5lIFhGU19RTU9QVF9EUVJFUEFJUgkweDAwMDEwMDAgLyogcmVwYWlyIGRxdW90LCBpZiBkYW1hZ2VkLiAqLworI2RlZmluZSBYRlNfUU1PUFRfRFFSRVBBSVIJMHgwMDAxMDAwIC8qIHJlcGFpciBkcXVvdCBpZiBkYW1hZ2VkICovCiAjZGVmaW5lIFhGU19RTU9QVF9HUVVPVEEJMHgwMDAyMDAwIC8qIGdyb3VwIGRxdW90IHJlcXVlc3RlZCAqLworI2RlZmluZSBYRlNfUU1PUFRfRU5PU1BDCTB4MDAwNDAwMCAvKiBlbm9zcGMgaW5zdGVhZCBvZiBlZHF1b3QgKHByaikgKi8KIAogLyoKICAqIGZsYWdzIHRvIHhmc190cmFuc19tb2RfZHF1b3QgdG8gaW5kaWNhdGUgd2hpY2ggZmllbGQgbmVlZHMgdG8gYmUKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcmVuYW1lLmMgYi9mcy94ZnMveGZzX3JlbmFtZS5jCmluZGV4IDgxYTA1Y2YuLjFmMTQ4NzYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcmVuYW1lLmMKKysrIGIvZnMveGZzL3hmc19yZW5hbWUuYwpAQCAtMzE2LDYgKzMxNiwxOCBAQAogCQl9CiAJfQogCisJLyoKKwkgKiBJZiB3ZSBhcmUgdXNpbmcgcHJvamVjdCBpbmhlcml0YW5jZSwgd2Ugb25seSBhbGxvdyByZW5hbWVzCisJICogaW50byBvdXIgdHJlZSB3aGVuIHRoZSBwcm9qZWN0IElEcyBhcmUgdGhlIHNhbWU7IGVsc2UgdGhlCisJICogdHJlZSBxdW90YSBtZWNoYW5pc20gd291bGQgYmUgY2lyY3VtdmVudGVkLgorCSAqLworCWlmICh1bmxpa2VseSgodGFyZ2V0X2RwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKSAmJgorCQkgICAgICh0YXJnZXRfZHAtPmlfZC5kaV9wcm9qaWQgIT0gc3JjX2lwLT5pX2QuZGlfcHJvamlkKSkpIHsKKwkJZXJyb3IgPSBYRlNfRVJST1IoRVhERVYpOworCQl4ZnNfcmVuYW1lX3VubG9jazQoaW5vZGVzLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwkJZ290byByZWxlX3JldHVybjsKKwl9CisKIAluZXdfcGFyZW50ID0gKHNyY19kcCAhPSB0YXJnZXRfZHApOwogCXNyY19pc19kaXJlY3RvcnkgPSAoKHNyY19pcC0+aV9kLmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zmc29wcy5jIGIvZnMveGZzL3hmc192ZnNvcHMuYwppbmRleCA1MDRkMmE4Li4zNmVhMWIyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zmc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdmZzb3BzLmMKQEAgLTQ0Miw2ICs0NDIsOSBAQAogCXAgPSB2ZnNfYmh2X2xvb2t1cCh2ZnNwLCBWRlNfUE9TSVRJT05fSU8pOwogCW1wLT5tX2lvX29wcyA9IHAgPyAqKHhmc19pb29wc190ICopIHZmc19iaHZfY3VzdG9tKHApIDogeGZzX2lvY29yZV94ZnM7CiAKKwlpZiAoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfUVVJRVQpCisJCWZsYWdzIHw9IFhGU19NRlNJX1FVSUVUOworCiAJLyoKIAkgKiBPcGVuIHJlYWwgdGltZSBhbmQgbG9nIGRldmljZXMgLSBvcmRlciBpcyBpbXBvcnRhbnQuCiAJICovCkBAIC00OTIsNyArNDk1LDcgQEAKIAllcnJvciA9IHhmc19zdGFydF9mbGFncyh2ZnNwLCBhcmdzLCBtcCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yMTsKLQllcnJvciA9IHhmc19yZWFkc2IobXApOworCWVycm9yID0geGZzX3JlYWRzYihtcCwgZmxhZ3MpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnJvcjE7CiAJZXJyb3IgPSB4ZnNfZmluaXNoX2ZsYWdzKHZmc3AsIGFyZ3MsIG1wKTsKQEAgLTY2NiwzMSArNjY5LDIyIEBACiAJeGZzX21vdW50X3QJKm1wID0gWEZTX0JIVlRPTShiZHApOwogCWludAkJZXJyb3I7CiAKLQlpZiAoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfQkFSUklFUikKLQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0JBUlJJRVI7Ci0JZWxzZQotCQltcC0+bV9mbGFncyAmPSB+WEZTX01PVU5UX0JBUlJJRVI7Ci0KLQlpZiAoKHZmc3AtPnZmc19mbGFnICYgVkZTX1JET05MWSkgJiYKLQkgICAgISgqZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCXZmc3AtPnZmc19mbGFnICY9IH5WRlNfUkRPTkxZOwotCi0JCWlmIChhcmdzLT5mbGFncyAmIFhGU01OVF9CQVJSSUVSKQorCWlmICghKCpmbGFncyAmIE1TX1JET05MWSkpIHsJCQkvKiBydy9ybyAtPiBydyAqLworCQlpZiAodmZzcC0+dmZzX2ZsYWcgJiBWRlNfUkRPTkxZKQorCQkJdmZzcC0+dmZzX2ZsYWcgJj0gflZGU19SRE9OTFk7CisJCWlmIChhcmdzLT5mbGFncyAmIFhGU01OVF9CQVJSSUVSKSB7CisJCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfQkFSUklFUjsKIAkJCXhmc19tb3VudGZzX2NoZWNrX2JhcnJpZXJzKG1wKTsKLQl9Ci0KLQlpZiAoISh2ZnNwLT52ZnNfZmxhZyAmIFZGU19SRE9OTFkpICYmCi0JICAgICgqZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJCX0gZWxzZSB7CisJCQltcC0+bV9mbGFncyAmPSB+WEZTX01PVU5UX0JBUlJJRVI7CisJCX0KKwl9IGVsc2UgaWYgKCEodmZzcC0+dmZzX2ZsYWcgJiBWRlNfUkRPTkxZKSkgewkvKiBydyAtPiBybyAqLwogCQlWRlNfU1lOQyh2ZnNwLCBTWU5DX0ZTREFUQXxTWU5DX0JERkxVU0h8U1lOQ19BVFRSLCBOVUxMLCBlcnJvcik7Ci0KIAkJeGZzX3F1aWVzY2VfZnMobXApOwotCi0JCS8qIE9rIG5vdyB3cml0ZSBvdXQgYW4gdW5tb3VudCByZWNvcmQgKi8KIAkJeGZzX2xvZ191bm1vdW50X3dyaXRlKG1wKTsKIAkJeGZzX3VubW91bnRmc193cml0ZXNiKG1wKTsKIAkJdmZzcC0+dmZzX2ZsYWcgfD0gVkZTX1JET05MWTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY5Nyw4ICsxNjkxLDkgQEAKIAlpbnQJCQlkc3VuaXQsIGRzd2lkdGgsIHZvbF9kc3VuaXQsIHZvbF9kc3dpZHRoOwogCWludAkJCWlvc2l6ZTsKIAotCWFyZ3MtPmZsYWdzMiB8PSBYRlNNTlQyX0NPTVBBVF9JT1NJWkU7CiAJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0lERUxFVEU7CisJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0JBUlJJRVI7CisJYXJncy0+ZmxhZ3MyIHw9IFhGU01OVDJfQ09NUEFUX0lPU0laRTsKIAogCWlmICghb3B0aW9ucykKIAkJZ290byBkb25lOwpAQCAtMTk0Nyw4ICsxOTQyLDYgQEAKIAkJc2VxX3ByaW50ZihtLCAiLCIgTU5UT1BUX0lLRUVQKTsKIAlpZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9DT01QQVRfSU9TSVpFKSkKIAkJc2VxX3ByaW50ZihtLCAiLCIgTU5UT1BUX0xBUkdFSU8pOwotCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKQotCQlzZXFfcHJpbnRmKG0sICIsIiBNTlRPUFRfQkFSUklFUik7CiAKIAlpZiAoISh2ZnNwLT52ZnNfZmxhZyAmIFZGU18zMkJJVElOT0RFUykpCiAJCXNlcV9wcmludGYobSwgIiwiIE1OVE9QVF82NEJJVElOT0RFKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCBkZTQ5NjAxLi43MDI3YWU2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0yNjYzLDcgKzI2NjMsNyBAQAogCSAqLwogCWlmICh1bmxpa2VseSgodGRwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKSAmJgogCQkgICAgICh0ZHAtPmlfZC5kaV9wcm9qaWQgIT0gc2lwLT5pX2QuZGlfcHJvamlkKSkpIHsKLQkJZXJyb3IgPSBYRlNfRVJST1IoRVBFUk0pOworCQllcnJvciA9IFhGU19FUlJPUihFWERFVik7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIApAQCAtNDY0OSw2ICs0NjQ5LDEwIEBACiAjaWZkZWYgSEFWRV9TRU5ERklMRQogCS52b3Bfc2VuZGZpbGUJCT0geGZzX3NlbmRmaWxlLAogI2VuZGlmCisjaWZkZWYgSEFWRV9TUExJQ0UKKwkudm9wX3NwbGljZV9yZWFkCT0geGZzX3NwbGljZV9yZWFkLAorCS52b3Bfc3BsaWNlX3dyaXRlCT0geGZzX3NwbGljZV93cml0ZSwKKyNlbmRpZgogCS52b3Bfd3JpdGUJCT0geGZzX3dyaXRlLAogCS52b3BfaW9jdGwJCT0geGZzX2lvY3RsLAogCS52b3BfZ2V0YXR0cgkJPSB4ZnNfZ2V0YXR0ciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oIGIvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKaW5kZXggZTI3ZGM4Zi4uYjliZWNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAogLyogQ3VycmVudCBBQ1BJQ0Egc3Vic3lzdGVtIHZlcnNpb24gaW4gWVlZWU1NREQgZm9ybWF0ICovCiAKLSNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDYwMTI3CisjZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAgICAgICAgICAgICAgICAgMHgyMDA2MDYwOAogCiAvKgogICogT1MgbmFtZSwgdXNlZCBmb3IgdGhlIF9PUyBvYmplY3QuICBUaGUgX09TIG9iamVjdCBpcyBlc3NlbnRpYWxseSBvYnNvbGV0ZSwKQEAgLTgxLDYgKzgxLDcgQEAKICNkZWZpbmUgQUNQSV9NQVhfUEFSU0VfQ0FDSEVfREVQVEggICAgICA5NgkvKiBQYXJzZSB0cmVlIG9iamVjdHMgKi8KICNkZWZpbmUgQUNQSV9NQVhfRVhUUEFSU0VfQ0FDSEVfREVQVEggICA5NgkvKiBQYXJzZSB0cmVlIG9iamVjdHMgKi8KICNkZWZpbmUgQUNQSV9NQVhfT0JKRUNUX0NBQ0hFX0RFUFRIICAgICA5NgkvKiBJbnRlcnByZXRlciBvcGVyYW5kIG9iamVjdHMgKi8KKyNkZWZpbmUgQUNQSV9NQVhfTkFNRVNQQUNFX0NBQ0hFX0RFUFRIICA5NgkvKiBOYW1lc3BhY2Ugb2JqZWN0cyAqLwogCiAvKgogICogU2hvdWxkIHRoZSBzdWJzeXN0ZW0gYWJvcnQgdGhlIGxvYWRpbmcgb2YgYW4gQUNQSSB0YWJsZSBpZiB0aGUKQEAgLTEwMiw5ICsxMDMsOSBAQAogCiAjZGVmaW5lIEFDUElfTUFYX1NFTUFQSE9SRV9DT1VOVCAgICAgICAgMjU2CiAKLS8qIE1heCByZWZlcmVuY2UgY291bnQgKGZvciBkZWJ1ZyBvbmx5KSAqLworLyogTWF4aW11bSBvYmplY3QgcmVmZXJlbmNlIGNvdW50IChkZXRlY3RzIG9iamVjdCBkZWxldGlvbiBpc3N1ZXMpICovCiAKLSNkZWZpbmUgQUNQSV9NQVhfUkVGRVJFTkNFX0NPVU5UICAgICAgICAweDQwMAorI2RlZmluZSBBQ1BJX01BWF9SRUZFUkVOQ0VfQ09VTlQgICAgICAgIDB4ODAwCiAKIC8qIFNpemUgb2YgY2FjaGVkIG1lbW9yeSBtYXBwaW5nIGZvciBzeXN0ZW0gbWVtb3J5IG9wZXJhdGlvbiByZWdpb24gKi8KIApAQCAtMTcxLDEyICsxNzIsNyBAQAogCiAvKiBBcnJheSBzaXplcy4gIFVzZWQgZm9yIHJhbmdlIGNoZWNraW5nIGFsc28gKi8KIAotI2RlZmluZSBBQ1BJX05VTV9BQ0NFU1NfVFlQRVMgICAgICAgICAgIDYKLSNkZWZpbmUgQUNQSV9OVU1fVVBEQVRFX1JVTEVTICAgICAgICAgICAzCi0jZGVmaW5lIEFDUElfTlVNX0xPQ0tfUlVMRVMgICAgICAgICAgICAgMgotI2RlZmluZSBBQ1BJX05VTV9NQVRDSF9PUFMgICAgICAgICAgICAgIDYKLSNkZWZpbmUgQUNQSV9OVU1fT1BDT0RFUyAgICAgICAgICAgICAgICAyNTYKLSNkZWZpbmUgQUNQSV9OVU1fRklFTERfTkFNRVMgICAgICAgICAgICAyCisjZGVmaW5lIEFDUElfTUFYX01BVENIX09QQ09ERSAgICAgICAgICAgNQogCiAvKiBSU0RQIGNoZWNrc3VtcyAqLwogCkBAIC0xODcsMTAgKzE4Myw2IEBACiAKICNkZWZpbmUgQUNQSV9TTUJVU19CVUZGRVJfU0laRSAgICAgICAgICAzNAogCi0vKiBOdW1iZXIgb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIF9PU0kgcmVzZXJ2ZWQgbWV0aG9kICovCi0KLSNkZWZpbmUgQUNQSV9OVU1fT1NJX1NUUklOR1MgICAgICAgICAgICAxMAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogQUNQSSBBTUwgRGVidWdnZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2Rpc2FzbS5oIGIvaW5jbHVkZS9hY3BpL2FjZGlzYXNtLmgKaW5kZXggMTFhOGZlMy4uOWE3ZDY5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZGlzYXNtLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjZGlzYXNtLmgKQEAgLTUwLDI2ICs1MCw3MiBAQAogI2RlZmluZSBCTE9DS19QQVJFTiAgICAgICAgICAgICAxCiAjZGVmaW5lIEJMT0NLX0JSQUNFICAgICAgICAgICAgIDIKICNkZWZpbmUgQkxPQ0tfQ09NTUFfTElTVCAgICAgICAgNAorI2RlZmluZSBBQ1BJX0RFRkFVTFRfUkVTTkFNRSAgICAqKHUzMiAqKSAiX19SRCIKIAogc3RydWN0IGFjcGlfZXh0ZXJuYWxfbGlzdCB7CiAJY2hhciAqcGF0aDsKKwljaGFyICppbnRlcm5hbF9wYXRoOwogCXN0cnVjdCBhY3BpX2V4dGVybmFsX2xpc3QgKm5leHQ7CisJdTMyIHZhbHVlOworCXUxNiBsZW5ndGg7CisJdTggdHlwZTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYWNwaV9leHRlcm5hbF9saXN0ICphY3BpX2dibF9leHRlcm5hbF9saXN0OwogCi0vKiBTdHJpbmdzIHVzZWQgZm9yIGRlY29kaW5nIGZsYWdzIHRvIEFTTCBrZXl3b3JkcyAqLwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8geworCXU4IG9wY29kZTsKKwl1OCBvZmZzZXQ7CisJY2hhciAqbmFtZTsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3dvcmRfZGVjb2RlWzRdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2lycV9kZWNvZGVbMl07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbG9ja19ydWxlW0FDUElfTlVNX0xPQ0tfUlVMRVNdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2FjY2Vzc190eXBlc1tBQ1BJX05VTV9BQ0NFU1NfVFlQRVNdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3VwZGF0ZV9ydWxlc1tBQ1BJX05VTV9VUERBVEVfUlVMRVNdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX21hdGNoX29wc1tBQ1BJX05VTV9NQVRDSF9PUFNdOworfSBhY3BpX2RtdGFibGVfaW5mbzsKKworLyoKKyAqIFZhbHVlcyBmb3IgT3Bjb2RlIGFib3ZlLgorICogTm90ZTogMC03IG11c3Qgbm90IGNoYW5nZSwgdXNlZCBhcyBhIGZsYWcgc2hpZnQgdmFsdWUKKyAqLworI2RlZmluZSBBQ1BJX0RNVF9GTEFHMCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9ETVRfRkxBRzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfRE1UX0ZMQUcyICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBQ1BJX0RNVF9GTEFHMyAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQUNQSV9ETVRfRkxBRzQgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFDUElfRE1UX0ZMQUc1ICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBQ1BJX0RNVF9GTEFHNiAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQUNQSV9ETVRfRkxBRzcgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFDUElfRE1UX0ZMQUdTMCAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBQ1BJX0RNVF9GTEFHUzIgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQUNQSV9ETVRfVUlOVDggICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBQ1BJX0RNVF9VSU5UMTYgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEFDUElfRE1UX1VJTlQyNCAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQUNQSV9ETVRfVUlOVDMyICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBQ1BJX0RNVF9VSU5UNTYgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEFDUElfRE1UX1VJTlQ2NCAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQUNQSV9ETVRfU1RSSU5HICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBQ1BJX0RNVF9OQU1FNCAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEFDUElfRE1UX05BTUU2ICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQUNQSV9ETVRfTkFNRTggICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBBQ1BJX0RNVF9DSEtTVU0gICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEFDUElfRE1UX1NQQUNFSUQgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQUNQSV9ETVRfR0FTICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBBQ1BJX0RNVF9NQURUICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEFDUElfRE1UX1NSQVQgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQUNQSV9ETVRfRVhJVCAgICAgICAgICAgICAgICAgICAyNQorCit0eXBlZGVmCit2b2lkICgqQUNQSV9UQUJMRV9IQU5ETEVSKSAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICogdGFibGUpOworCitzdHJ1Y3QgYWNwaV9kbXRhYmxlX2RhdGEgeworCWNoYXIgKnNpZ25hdHVyZTsKKwlzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gKnRhYmxlX2luZm87CisJQUNQSV9UQUJMRV9IQU5ETEVSIHRhYmxlX2hhbmRsZXI7Cit9OwogCiBzdHJ1Y3QgYWNwaV9vcF93YWxrX2luZm8gewogCXUzMiBsZXZlbDsKKwl1MzIgbGFzdF9sZXZlbDsKKwl1MzIgY291bnQ7CiAJdTMyIGJpdF9vZmZzZXQ7CisJdTMyIGZsYWdzOwogCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGU7CiB9OwogCkBAIC03Nyw2ICsxMjMsMTAwIEBACiBhY3BpX3N0YXR1cygqYXNsX3dhbGtfY2FsbGJhY2spICh1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqIG9wLAogCQkJCSB1MzIgbGV2ZWwsIHZvaWQgKmNvbnRleHQpOwogCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV90YWcgeworCXUzMiBiaXRfaW5kZXg7CisJY2hhciAqdGFnOworfTsKKworLyogU3RyaW5ncyB1c2VkIGZvciBkZWNvZGluZyBmbGFncyB0byBBU0wga2V5d29yZHMgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3dvcmRfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfaXJxX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2xvY2tfcnVsZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2FjY2Vzc190eXBlc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3VwZGF0ZV9ydWxlc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX21hdGNoX29wc1tdOworCitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2YwW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2YxW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2YyW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2YzW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2Y0W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2ZfaGRyW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19ib290W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19jcGVwW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19jcGVwMFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fZGJncFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fZWNkdFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fZmFjc1tdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fZmFkdDFbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX2ZhZHQyW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19nYXNbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX2hlYWRlcltdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9faHBldFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdDBbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHQxW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tYWR0MltdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdDNbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHQ0W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tYWR0NVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdDZbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHQ3W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tYWR0OFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdF9oZHJbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21jZmdbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21jZmcwW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19yc2RwMVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fcnNkcDJbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3Nic3RbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NsaXRbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NwY3JbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NwbWlbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NyYXRbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NyYXQwW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19zcmF0MVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fdGNwYVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fd2RydFtdOworCisvKgorICogZG10YWJsZQorICovCit2b2lkIGFjcGlfZG1fZHVtcF9kYXRhX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpOworCit2b2lkCithY3BpX2RtX2R1bXBfdGFibGUodTMyIHRhYmxlX2xlbmd0aCwKKwkJICAgdTMyIHRhYmxlX29mZnNldCwKKwkJICAgdm9pZCAqdGFibGUsCisJCSAgIHUzMiBzdWJfdGFibGVfbGVuZ3RoLCBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gKmluZm8pOworCit2b2lkIGFjcGlfZG1fbGluZV9oZWFkZXIodTMyIG9mZnNldCwgdTMyIGJ5dGVfbGVuZ3RoLCBjaGFyICpuYW1lKTsKKwordm9pZCBhY3BpX2RtX2xpbmVfaGVhZGVyMih1MzIgb2Zmc2V0LCB1MzIgYnl0ZV9sZW5ndGgsIGNoYXIgKm5hbWUsIHUzMiB2YWx1ZSk7CisKKy8qCisgKiBkbXRiZHVtcAorICovCit2b2lkIGFjcGlfZG1fZHVtcF9hc2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX2NwZXAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX2ZhZHQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX3NyYXQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX21jZmcoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX21hZHQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3UzMiBhY3BpX2RtX2R1bXBfcnNkcChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKKwordm9pZCBhY3BpX2RtX2R1bXBfcnNkdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKKwordm9pZCBhY3BpX2RtX2R1bXBfc2xpdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKKwordm9pZCBhY3BpX2RtX2R1bXBfeHNkdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKKwogLyoKICAqIGRtd2FsawogICovCkBAIC04NCw2ICsyMjQsMTEgQEAKIGFjcGlfZG1fZGlzYXNzZW1ibGUoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSwKIAkJICAgIHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcmlnaW4sIHUzMiBudW1fb3Bjb2Rlcyk7CiAKK3ZvaWQKK2FjcGlfZG1fd2Fsa19wYXJzZV90cmVlKHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcCwKKwkJCWFzbF93YWxrX2NhbGxiYWNrIGRlc2NlbmRpbmdfY2FsbGJhY2ssCisJCQlhc2xfd2Fsa19jYWxsYmFjayBhc2NlbmRpbmdfY2FsbGJhY2ssIHZvaWQgKmNvbnRleHQpOworCiAvKgogICogZG1vcGNvZGUKICAqLwpAQCAtMTY2LDYgKzMxMSw3IEBACiAKIHZvaWQKIGFjcGlfZG1fcmVzb3VyY2VfdGVtcGxhdGUoc3RydWN0IGFjcGlfb3Bfd2Fsa19pbmZvICppbmZvLAorCQkJICB1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3AsCiAJCQkgIHU4ICogYnl0ZV9kYXRhLCB1MzIgYnl0ZV9jb3VudCk7CiAKIHU4IGFjcGlfZG1faXNfcmVzb3VyY2VfdGVtcGxhdGUodW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9wKTsKQEAgLTE3Niw2ICszMjIsOCBAQAogCiB2b2lkIGFjcGlfZG1fZGVjb2RlX2F0dHJpYnV0ZSh1OCBhdHRyaWJ1dGUpOwogCit2b2lkIGFjcGlfZG1fZGVzY3JpcHRvcl9uYW1lKHZvaWQpOworCiAvKgogICogZG1yZXNyY2wKICAqLwpAQCAtMjQ4LDYgKzM5NiwxNSBAQAogLyoKICAqIGRtdXRpbHMKICAqLwotdm9pZCBhY3BpX2RtX2FkZF90b19leHRlcm5hbF9saXN0KGNoYXIgKnBhdGgpOwordm9pZCBhY3BpX2RtX2FkZF90b19leHRlcm5hbF9saXN0KGNoYXIgKnBhdGgsIHU4IHR5cGUsIHUzMiB2YWx1ZSk7CisKKy8qCisgKiBkbXJlc3RhZworICovCit2b2lkIGFjcGlfZG1fZmluZF9yZXNvdXJjZXModW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKnJvb3QpOworCit2b2lkCithY3BpX2RtX2NoZWNrX3Jlc291cmNlX3JlZmVyZW5jZSh1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3AsCisJCQkJIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpOwogCiAjZW5kaWYJCQkJLyogX19BQ0RJU0FTTV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2Rpc3BhdC5oIGIvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKaW5kZXggYzQxYTkyNi4uMjg4Zjg0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKQEAgLTE5NCw3ICsxOTQsOSBAQAogYWNwaV9kc19yZXN0YXJ0X2NvbnRyb2xfbWV0aG9kKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUsCiAJCQkgICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2MpOwogCi12b2lkIGFjcGlfZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpOwordm9pZAorYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbWV0aG9kX2Rlc2MsCisJCQkJIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9kc19iZWdpbl9tZXRob2RfZXhlY3V0aW9uKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICptZXRob2Rfbm9kZSwKQEAgLTMwMiw3ICszMDQsNyBAQAogCQkgICAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbWV0aG9kX25vZGUsCiAJCSAgICAgIHU4ICogYW1sX3N0YXJ0LAogCQkgICAgICB1MzIgYW1sX2xlbmd0aCwKLQkJICAgICAgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8sIHU4IHBhc3NfbnVtYmVyKTsKKwkJICAgICAgc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbywgdTggcGFzc19udW1iZXIpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9kc19vYmpfc3RhY2tfcG9wX2FuZF9kZWxldGUodTMyIHBvcF9jb3VudCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2V2ZW50cy5oIGIvaW5jbHVkZS9hY3BpL2FjZXZlbnRzLmgKaW5kZXggZjI3MTdiZS4uMjM0MTQyODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2V2ZW50cy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2V2ZW50cy5oCkBAIC05Myw3ICs5Myw3IEBACiAgKi8KIHU4IGFjcGlfZXZfdmFsaWRfZ3BlX2V2ZW50KHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZXZfd2Fsa19ncGVfbGlzdChBQ1BJX0dQRV9DQUxMQkFDSyBncGVfd2Fsa19jYWxsYmFjayk7CithY3BpX3N0YXR1cyBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9ncGVfY2FsbGJhY2sgZ3BlX3dhbGtfY2FsbGJhY2spOwogCiBhY3BpX3N0YXR1cwogYWNwaV9ldl9kZWxldGVfZ3BlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICpncGVfeHJ1cHRfaW5mbywKQEAgLTEzOCw3ICsxMzgsNyBAQAogYWNwaV9ldl9hZGRyZXNzX3NwYWNlX2Rpc3BhdGNoKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJlZ2lvbl9vYmosCiAJCQkgICAgICAgdTMyIGZ1bmN0aW9uLAogCQkJICAgICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkJICAgICAgIHUzMiBiaXRfd2lkdGgsIHZvaWQgKnZhbHVlKTsKKwkJCSAgICAgICB1MzIgYml0X3dpZHRoLCBhY3BpX2ludGVnZXIgKiB2YWx1ZSk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V2X2F0dGFjaF9yZWdpb24odW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaGFuZGxlcl9vYmosCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNleGNlcC5oIGIvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaAppbmRleCBkYzc2OGFhLi43OTdjYTFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKQEAgLTE2MCw4ICsxNjAsOSBAQAogI2RlZmluZSBBRV9BTUxfQkFEX1JFU09VUkNFX1ZBTFVFICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxRiB8IEFFX0NPREVfQU1MKQogI2RlZmluZSBBRV9BTUxfQ0lSQ1VMQVJfUkVGRVJFTkNFICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAyMCB8IEFFX0NPREVfQU1MKQogI2RlZmluZSBBRV9BTUxfQkFEX1JFU09VUkNFX0xFTkdUSCAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAyMSB8IEFFX0NPREVfQU1MKQorI2RlZmluZSBBRV9BTUxfSUxMRUdBTF9BRERSRVNTICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAyMiB8IEFFX0NPREVfQU1MKQogCi0jZGVmaW5lIEFFX0NPREVfQU1MX01BWCAgICAgICAgICAgICAgICAgMHgwMDIxCisjZGVmaW5lIEFFX0NPREVfQU1MX01BWCAgICAgICAgICAgICAgICAgMHgwMDIyCiAKIC8qCiAgKiBJbnRlcm5hbCBleGNlcHRpb25zIHVzZWQgZm9yIGNvbnRyb2wKQEAgLTI3NSw3ICsyNzYsOCBAQAogCSJBRV9BTUxfTk9fUkVTT1VSQ0VfRU5EX1RBRyIsCiAJIkFFX0FNTF9CQURfUkVTT1VSQ0VfVkFMVUUiLAogCSJBRV9BTUxfQ0lSQ1VMQVJfUkVGRVJFTkNFIiwKLQkiQUVfQU1MX0JBRF9SRVNPVVJDRV9MRU5HVEgiCisJIkFFX0FNTF9CQURfUkVTT1VSQ0VfTEVOR1RIIiwKKwkiQUVfQU1MX0lMTEVHQUxfQUREUkVTUyIKIH07CiAKIGNoYXIgY29uc3QgKmFjcGlfZ2JsX2V4Y2VwdGlvbl9uYW1lc19jdHJsW10gPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNnbG9iYWwuaCBiL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCmluZGV4IDczNGNjNzcuLjE0NTMxZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCkBAIC0xMDcsNiArMTA3LDcgQEAKICAqIDMpIEFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGxvY2Fscy9hcmdzIChhdXRvLWluaXQgdG8gaW50ZWdlciAwKQogICogNCkgQWxsb3cgQU5ZIG9iamVjdCB0eXBlIHRvIGJlIGEgc291cmNlIG9wZXJhbmQgZm9yIHRoZSBTdG9yZSgpIG9wZXJhdG9yCiAgKiA1KSBBbGxvdyB1bnJlc29sdmVkIHJlZmVyZW5jZXMgKGludmFsaWQgdGFyZ2V0IG5hbWUpIGluIHBhY2thZ2Ugb2JqZWN0cworICogNikgRW5hYmxlIHdhcm5pbmcgbWVzc2FnZXMgZm9yIGJlaGF2aW9yIHRoYXQgaXMgbm90IEFDUEkgc3BlYyBjb21wbGlhbnQKICAqLwogQUNQSV9FWFRFUk4gdTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF9lbmFibGVfaW50ZXJwcmV0ZXJfc2xhY2ssIEZBTFNFKTsKIApAQCAtMTE0LDcgKzExNSw3IEBACiAgKiBBdXRvbWF0aWNhbGx5IHNlcmlhbGl6ZSBBTEwgY29udHJvbCBtZXRob2RzPyBEZWZhdWx0IGlzIEZBTFNFLCBtZWFuaW5nCiAgKiB0byB1c2UgdGhlIFNlcmlhbGl6ZWQvbm90X3NlcmlhbGl6ZWQgbWV0aG9kIGZsYWdzIG9uIGEgcGVyIG1ldGhvZCBiYXNpcy4KICAqIE9ubHkgY2hhbmdlIHRoaXMgaWYgdGhlIEFTTCBjb2RlIGlzIHBvb3JseSB3cml0dGVuIGFuZCBjYW5ub3QgaGFuZGxlCi0gKiByZWVudHJhbmN5IGV2ZW4gdGhvdWdoIG1ldGhvZHMgYXJlIG1hcmtlZCAibm90X3NlcmlhbGl6ZWQiLgorICogcmVlbnRyYW5jeSBldmVuIHRob3VnaCBtZXRob2RzIGFyZSBtYXJrZWQgIk5vdFNlcmlhbGl6ZWQiLgogICovCiBBQ1BJX0VYVEVSTiB1OCBBQ1BJX0lOSVRfR0xPQkFMKGFjcGlfZ2JsX2FsbF9tZXRob2RzX3NlcmlhbGl6ZWQsIEZBTFNFKTsKIApAQCAtMTQ5LDEwICsxNTAsMTAgQEAKIEFDUElfRVhURVJOIHUzMiBhY3BpX2dibF90YWJsZV9mbGFnczsKIEFDUElfRVhURVJOIHUzMiBhY3BpX2dibF9yc2R0X3RhYmxlX2NvdW50OwogQUNQSV9FWFRFUk4gc3RydWN0IHJzZHBfZGVzY3JpcHRvciAqYWNwaV9nYmxfUlNEUDsKLUFDUElfRVhURVJOIFhTRFRfREVTQ1JJUFRPUiAqYWNwaV9nYmxfWFNEVDsKLUFDUElfRVhURVJOIEZBRFRfREVTQ1JJUFRPUiAqYWNwaV9nYmxfRkFEVDsKK0FDUElfRVhURVJOIHN0cnVjdCB4c2R0X2Rlc2NyaXB0b3IgKmFjcGlfZ2JsX1hTRFQ7CitBQ1BJX0VYVEVSTiBzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICphY3BpX2dibF9GQURUOwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICphY3BpX2dibF9EU0RUOwotQUNQSV9FWFRFUk4gRkFDU19ERVNDUklQVE9SICphY3BpX2dibF9GQUNTOworQUNQSV9FWFRFUk4gc3RydWN0IGZhY3NfZGVzY3JpcHRvciAqYWNwaV9nYmxfRkFDUzsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX2NvbW1vbl9mYWNzIGFjcGlfZ2JsX2NvbW1vbl9mQUNTOwogLyoKICAqIFNpbmNlIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBTU0RUcyBhbmQgUFNEVHMsIGEgc2luZ2xlIHBvaW50ZXIgaXMgbm90CkBAIC0xNzcsMTUgKzE3OCwxNSBAQAogLyoKICAqIEFDUEkgVGFibGUgaW5mbyBhcnJheXMKICAqLwotZXh0ZXJuIHN0cnVjdCBhY3BpX3RhYmxlX2xpc3QgYWNwaV9nYmxfdGFibGVfbGlzdHNbTlVNX0FDUElfVEFCTEVfVFlQRVNdOwotZXh0ZXJuIHN0cnVjdCBhY3BpX3RhYmxlX3N1cHBvcnQgYWNwaV9nYmxfdGFibGVfZGF0YVtOVU1fQUNQSV9UQUJMRV9UWVBFU107CitleHRlcm4gc3RydWN0IGFjcGlfdGFibGVfbGlzdCBhY3BpX2dibF90YWJsZV9saXN0c1tBQ1BJX1RBQkxFX0lEX01BWCArIDFdOworZXh0ZXJuIHN0cnVjdCBhY3BpX3RhYmxlX3N1cHBvcnQgYWNwaV9nYmxfdGFibGVfZGF0YVtBQ1BJX1RBQkxFX0lEX01BWCArIDFdOwogCiAvKgogICogUHJlZGVmaW5lZCBtdXRleCBvYmplY3RzLiAgVGhpcyBhcnJheSBjb250YWlucyB0aGUKICAqIGFjdHVhbCBPUyBtdXRleCBoYW5kbGVzLCBpbmRleGVkIGJ5IHRoZSBsb2NhbCBBQ1BJX01VVEVYX0hBTkRMRXMuCiAgKiAoVGhlIHRhYmxlIG1hcHMgbG9jYWwgaGFuZGxlcyB0byB0aGUgcmVhbCBPUyBoYW5kbGVzKQogICovCi1BQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9tdXRleF9pbmZvIGFjcGlfZ2JsX211dGV4X2luZm9bTlVNX01VVEVYXTsKK0FDUElfRVhURVJOIHN0cnVjdCBhY3BpX211dGV4X2luZm8gYWNwaV9nYmxfbXV0ZXhfaW5mb1tBQ1BJX05VTV9NVVRFWF07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIwMyw2ICsyMDQsNyBAQAogCiAvKiBPYmplY3QgY2FjaGVzICovCiAKK0FDUElfRVhURVJOIGFjcGlfY2FjaGVfdCAqYWNwaV9nYmxfbmFtZXNwYWNlX2NhY2hlOwogQUNQSV9FWFRFUk4gYWNwaV9jYWNoZV90ICphY3BpX2dibF9zdGF0ZV9jYWNoZTsKIEFDUElfRVhURVJOIGFjcGlfY2FjaGVfdCAqYWNwaV9nYmxfcHNfbm9kZV9jYWNoZTsKIEFDUElfRVhURVJOIGFjcGlfY2FjaGVfdCAqYWNwaV9nYmxfcHNfbm9kZV9leHRfY2FjaGU7CkBAIC0yNDQsNyArMjQ2LDYgQEAKIGV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9oaWdoZXN0X2RzdGF0ZV9uYW1lc1s0XTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWNwaV9vcGNvZGVfaW5mbyBhY3BpX2dibF9hbWxfb3BfaW5mb1tBTUxfTlVNX09QQ09ERVNdOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3JlZ2lvbl90eXBlc1tBQ1BJX05VTV9QUkVERUZJTkVEX1JFR0lPTlNdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3ZhbGlkX29zaV9zdHJpbmdzW0FDUElfTlVNX09TSV9TVFJJTkdTXTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjkxLDE0ICsyOTIsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBQYXJzZXIgZ2xvYmFscwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1BQ1BJX0VYVEVSTiB1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYWNwaV9nYmxfcGFyc2VkX25hbWVzcGFjZV9yb290OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBIYXJkd2FyZSBnbG9iYWxzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMjEsNyArMzE0LDExIEBACiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqYWNwaV9nYmxfZ3BlX3hydXB0X2xpc3RfaGVhZDsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvCiAgICAgKmFjcGlfZ2JsX2dwZV9mYWR0X2Jsb2Nrc1tBQ1BJX01BWF9HUEVfQkxPQ0tTXTsKKworLyogU3BpbmxvY2tzICovCisKIEFDUElfRVhURVJOIGFjcGlfaGFuZGxlIGFjcGlfZ2JsX2dwZV9sb2NrOworQUNQSV9FWFRFUk4gYWNwaV9oYW5kbGUgYWNwaV9nYmxfaGFyZHdhcmVfbG9jazsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaCBiL2luY2x1ZGUvYWNwaS9hY2xvY2FsLmgKaW5kZXggODM2MTgyMC4uMWVlY2E3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNsb2NhbC5oCkBAIC00NCw3ICs0NCwxMCBAQAogI2lmbmRlZiBfX0FDTE9DQUxfSF9fCiAjZGVmaW5lIF9fQUNMT0NBTF9IX18KIAorLyogYWNwaXNyYzpzdHJ1Y3RfZGVmcyAtLSBmb3IgYWNwaXNyYyBjb252ZXJzaW9uICovCisKICNkZWZpbmUgQUNQSV9XQUlUX0ZPUkVWRVIgICAgICAgICAgICAgICAweEZGRkYJLyogdTE2LCBhcyBwZXIgQUNQSSBzcGVjICovCisjZGVmaW5lIEFDUElfSU5GSU5JVEVfQ09OQ1VSUkVOQ1kgICAgICAgMHhGRgogCiB0eXBlZGVmIHZvaWQgKmFjcGlfbXV0ZXg7CiB0eXBlZGVmIHUzMiBhY3BpX211dGV4X2hhbmRsZTsKQEAgLTY5LDUyICs3Miw1NSBAQAogICogUHJlZGVmaW5lZCBoYW5kbGVzIGZvciB0aGUgbXV0ZXggb2JqZWN0cyB1c2VkIHdpdGhpbiB0aGUgc3Vic3lzdGVtCiAgKiBBbGwgbXV0ZXggb2JqZWN0cyBhcmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IGFjcGlfdXRfbXV0ZXhfaW5pdGlhbGl6ZS4KICAqCi0gKiBUaGUgYWNxdWlyZS9yZWxlYXNlIG9yZGVyaW5nIHByb3RvY29sIGlzIGltcGxpZWQgdmlhIHRoaXMgbGlzdC4gIE11dGV4ZXMKKyAqIFRoZSBhY3F1aXJlL3JlbGVhc2Ugb3JkZXJpbmcgcHJvdG9jb2wgaXMgaW1wbGllZCB2aWEgdGhpcyBsaXN0LiBNdXRleGVzCiAgKiB3aXRoIGEgbG93ZXIgdmFsdWUgbXVzdCBiZSBhY3F1aXJlZCBiZWZvcmUgbXV0ZXhlcyB3aXRoIGEgaGlnaGVyIHZhbHVlLgogICoKLSAqIE5PVEU6IGFueSBjaGFuZ2VzIGhlcmUgbXVzdCBiZSByZWZsZWN0ZWQgaW4gdGhlIGFjcGlfZ2JsX211dGV4X25hbWVzIHRhYmxlIGFsc28hCisgKiBOT1RFOiBhbnkgY2hhbmdlcyBoZXJlIG11c3QgYmUgcmVmbGVjdGVkIGluIHRoZSBhY3BpX2dibF9tdXRleF9uYW1lcworICogdGFibGUgYmVsb3cgYWxzbyEKICAqLwotI2RlZmluZSBBQ1BJX01UWF9FWEVDVVRFICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQUNQSV9NVFhfSU5URVJQUkVURVIgICAgICAgICAgICAxCi0jZGVmaW5lIEFDUElfTVRYX1BBUlNFUiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBBQ1BJX01UWF9ESVNQQVRDSEVSICAgICAgICAgICAgIDMKLSNkZWZpbmUgQUNQSV9NVFhfVEFCTEVTICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIEFDUElfTVRYX09QX1JFR0lPTlMgICAgICAgICAgICAgNQotI2RlZmluZSBBQ1BJX01UWF9OQU1FU1BBQ0UgICAgICAgICAgICAgIDYKLSNkZWZpbmUgQUNQSV9NVFhfRVZFTlRTICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEFDUElfTVRYX0hBUkRXQVJFICAgICAgICAgICAgICAgOAotI2RlZmluZSBBQ1BJX01UWF9DQUNIRVMgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgQUNQSV9NVFhfTUVNT1JZICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBBQ1BJX01UWF9ERUJVR19DTURfQ09NUExFVEUgICAgIDExCi0jZGVmaW5lIEFDUElfTVRYX0RFQlVHX0NNRF9SRUFEWSAgICAgICAgMTIKKyNkZWZpbmUgQUNQSV9NVFhfSU5URVJQUkVURVIgICAgICAgICAgICAwCS8qIEFNTCBJbnRlcnByZXRlciwgbWFpbiBsb2NrICovCisjZGVmaW5lIEFDUElfTVRYX0NPTlRST0xfTUVUSE9EICAgICAgICAgMQkvKiBDb250cm9sIG1ldGhvZCB0ZXJtaW5hdGlvbiBbVEJEOiBtYXkgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeV0gKi8KKyNkZWZpbmUgQUNQSV9NVFhfVEFCTEVTICAgICAgICAgICAgICAgICAyCS8qIERhdGEgZm9yIEFDUEkgdGFibGVzICovCisjZGVmaW5lIEFDUElfTVRYX05BTUVTUEFDRSAgICAgICAgICAgICAgMwkvKiBBQ1BJIE5hbWVzcGFjZSAqLworI2RlZmluZSBBQ1BJX01UWF9FVkVOVFMgICAgICAgICAgICAgICAgIDQJLyogRGF0YSBmb3IgQUNQSSBldmVudHMgKi8KKyNkZWZpbmUgQUNQSV9NVFhfQ0FDSEVTICAgICAgICAgICAgICAgICA1CS8qIEludGVybmFsIGNhY2hlcywgZ2VuZXJhbCBwdXJwb3NlcyAqLworI2RlZmluZSBBQ1BJX01UWF9NRU1PUlkgICAgICAgICAgICAgICAgIDYJLyogRGVidWcgbWVtb3J5IHRyYWNraW5nIGxpc3RzICovCisjZGVmaW5lIEFDUElfTVRYX0RFQlVHX0NNRF9DT01QTEVURSAgICAgNwkvKiBBTUwgZGVidWdnZXIgKi8KKyNkZWZpbmUgQUNQSV9NVFhfREVCVUdfQ01EX1JFQURZICAgICAgICA4CS8qIEFNTCBkZWJ1Z2dlciAqLwogCi0jZGVmaW5lIE1BWF9NVVRFWCAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgTlVNX01VVEVYICAgICAgICAgICAgICAgICAgICAgICBNQVhfTVVURVgrMQorI2RlZmluZSBBQ1BJX01BWF9NVVRFWCAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQUNQSV9OVU1fTVVURVggICAgICAgICAgICAgICAgICBBQ1BJX01BWF9NVVRFWCsxCiAKICNpZiBkZWZpbmVkKEFDUElfREVCVUdfT1VUUFVUKSB8fCBkZWZpbmVkKEFDUElfREVCVUdHRVIpCiAjaWZkZWYgREVGSU5FX0FDUElfR0xPQkFMUwogCi0vKiBOYW1lcyBmb3IgdGhlIG11dGV4ZXMgdXNlZCBpbiB0aGUgc3Vic3lzdGVtICovCisvKiBEZWJ1ZyBuYW1lcyBmb3IgdGhlIG11dGV4ZXMgYWJvdmUgKi8KIAotc3RhdGljIGNoYXIgKmFjcGlfZ2JsX211dGV4X25hbWVzW10gPSB7Ci0JIkFDUElfTVRYX0V4ZWN1dGUiLAorc3RhdGljIGNoYXIgKmFjcGlfZ2JsX211dGV4X25hbWVzW0FDUElfTlVNX01VVEVYXSA9IHsKIAkiQUNQSV9NVFhfSW50ZXJwcmV0ZXIiLAotCSJBQ1BJX01UWF9QYXJzZXIiLAotCSJBQ1BJX01UWF9EaXNwYXRjaGVyIiwKKwkiQUNQSV9NVFhfTWV0aG9kIiwKIAkiQUNQSV9NVFhfVGFibGVzIiwKLQkiQUNQSV9NVFhfb3BfcmVnaW9ucyIsCiAJIkFDUElfTVRYX05hbWVzcGFjZSIsCiAJIkFDUElfTVRYX0V2ZW50cyIsCi0JIkFDUElfTVRYX0hhcmR3YXJlIiwKIAkiQUNQSV9NVFhfQ2FjaGVzIiwKIAkiQUNQSV9NVFhfTWVtb3J5IiwKLQkiQUNQSV9NVFhfZGVidWdfY21kX2NvbXBsZXRlIiwKLQkiQUNQSV9NVFhfZGVidWdfY21kX3JlYWR5IiwKKwkiQUNQSV9NVFhfRGVidWdDbWRDb21wbGV0ZSIsCisJIkFDUElfTVRYX0RlYnVnQ21kUmVhZHkiCiB9OwogCiAjZW5kaWYKICNlbmRpZgogCisvKgorICogUHJlZGVmaW5lZCBoYW5kbGVzIGZvciBzcGlubG9ja3MgdXNlZCB3aXRoaW4gdGhlIHN1YnN5c3RlbS4KKyAqIFRoZXNlIHNwaW5sb2NrcyBhcmUgY3JlYXRlZCBieSBhY3BpX3V0X211dGV4X2luaXRpYWxpemUKKyAqLworI2RlZmluZSBBQ1BJX0xPQ0tfR1BFUyAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9MT0NLX0hBUkRXQVJFICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQUNQSV9NQVhfTE9DSyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfTlVNX0xPQ0sgICAgICAgICAgICAgICAgICAgQUNQSV9NQVhfTE9DSysxCisKIC8qIE93bmVyIElEcyBhcmUgdXNlZCB0byB0cmFjayBuYW1lc3BhY2Ugbm9kZXMgZm9yIHNlbGVjdGl2ZSBkZWxldGlvbiAqLwogCiB0eXBlZGVmIHU4IGFjcGlfb3duZXJfaWQ7CkBAIC0xMjksNyArMTM1LDcgQEAKIHN0cnVjdCBhY3BpX211dGV4X2luZm8gewogCWFjcGlfbXV0ZXggbXV0ZXg7CiAJdTMyIHVzZV9jb3VudDsKLQl1MzIgdGhyZWFkX2lkOworCWFjcGlfdGhyZWFkX2lkIHRocmVhZF9pZDsKIH07CiAKIC8qIExvY2sgZmxhZyBwYXJhbWV0ZXIgZm9yIHZhcmlvdXMgaW50ZXJmYWNlcyAqLwpAQCAtMTQ0LDYgKzE1MCw4IEBACiAjZGVmaW5lIEFDUElfRklFTERfRFdPUkRfR1JBTlVMQVJJVFkgICAgNAogI2RlZmluZSBBQ1BJX0ZJRUxEX1FXT1JEX0dSQU5VTEFSSVRZICAgIDgKIAorI2RlZmluZSBBQ1BJX0VOVFJZX05PVF9GT1VORCAgICAgICAgICAgIE5VTEwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogTmFtZXNwYWNlIHR5cGVkZWZzIGFuZCBzdHJ1Y3RzCkBAIC0xNTgsNDkgKzE2Niw1NSBAQAogCUFDUElfSU1PREVfRVhFQ1VURSA9IDB4MEUKIH0gYWNwaV9pbnRlcnByZXRlcl9tb2RlOwogCi0vKgotICogVGhlIE5vZGUgZGVzY3JpYmVzIGEgbmFtZWQgb2JqZWN0IHRoYXQgYXBwZWFycyBpbiB0aGUgQU1MCi0gKiBBbiBhY3BpX25vZGUgaXMgdXNlZCB0byBzdG9yZSBOb2Rlcy4KLSAqCi0gKiBkYXRhX3R5cGUgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgZGVzY3JpcHRvcnMsIGFuZCBNVVNUCi0gKiBiZSB0aGUgZmlyc3QgYnl0ZSBpbiB0aGlzIHN0cnVjdHVyZS4KLSAqLwogdW5pb24gYWNwaV9uYW1lX3VuaW9uIHsKIAl1MzIgaW50ZWdlcjsKIAljaGFyIGFzY2lpWzRdOwogfTsKIAorLyoKKyAqIFRoZSBOYW1lc3BhY2UgTm9kZSBkZXNjcmliZXMgYSBuYW1lZCBvYmplY3QgdGhhdCBhcHBlYXJzIGluIHRoZSBBTUwuCisgKiBkZXNjcmlwdG9yX3R5cGUgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgZGVzY3JpcHRvcnMuCisgKgorICogVGhlIG5vZGUgaXMgb3B0aW1pemVkIGZvciBib3RoIDMyLWJpdCBhbmQgNjQtYml0IHBsYXRmb3JtczoKKyAqIDIwIGJ5dGVzIGZvciB0aGUgMzItYml0IGNhc2UsIDMyIGJ5dGVzIGZvciB0aGUgNjQtYml0IGNhc2UuCisgKgorICogTm90ZTogVGhlIGRlc2NyaXB0b3JfdHlwZSBhbmQgVHlwZSBmaWVsZHMgbXVzdCBhcHBlYXIgaW4gdGhlIGlkZW50aWNhbAorICogcG9zaXRpb24gaW4gYm90aCB0aGUgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgYW5kIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QKKyAqIHN0cnVjdHVyZXMuCisgKi8KIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIHsKLQl1OCBkZXNjcmlwdG9yOwkJLyogVXNlZCB0byBkaWZmZXJlbnRpYXRlIG9iamVjdCBkZXNjcmlwdG9yIHR5cGVzICovCi0JdTggdHlwZTsJCS8qIFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZSAqLwotCXUxNiByZWZlcmVuY2VfY291bnQ7CS8qIEN1cnJlbnQgY291bnQgb2YgcmVmZXJlbmNlcyBhbmQgY2hpbGRyZW4gKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3Q7CS8qIEludGVycHJldGVyIG9iamVjdCAqLworCXU4IGRlc2NyaXB0b3JfdHlwZTsJLyogRGlmZmVyZW50aWF0ZSBvYmplY3QgZGVzY3JpcHRvciB0eXBlcyAqLworCXU4IHR5cGU7CQkvKiBBQ1BJIFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZSAqLworCXU4IGZsYWdzOwkJLyogTWlzY2VsbGFuZW91cyBmbGFncyAqLworCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CS8qIE5vZGUgY3JlYXRvciAqLwogCXVuaW9uIGFjcGlfbmFtZV91bmlvbiBuYW1lOwkvKiBBQ1BJIE5hbWUsIGFsd2F5cyA0IGNoYXJzIHBlciBBQ1BJIHNwZWMgKi8KLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3Q7CS8qIFBvaW50ZXIgdG8gYXR0YWNoZWQgQUNQSSBvYmplY3QgKG9wdGlvbmFsKSAqLwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpjaGlsZDsJLyogRmlyc3QgY2hpbGQgKi8KLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGVlcjsJLyogTmV4dCBwZWVyICovCi0JdTggb3duZXJfaWQ7CQkvKiBXaG8gY3JlYXRlZCB0aGlzIG5vZGUgKi8KLQl1OCBmbGFnczsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGVlcjsJLyogUGVlci4gUGFyZW50IGlmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1Qgc2V0ICovCiAKLQkvKiBGaWVsZHMgdXNlZCBieSB0aGUgQVNMIGNvbXBpbGVyIG9ubHkgKi8KLQotI2lmZGVmIEFDUElfQVNMX0NPTVBJTEVSCi0JdTMyIHZhbHVlOworCS8qCisJICogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHVzZWQgYnkgdGhlIEFTTCBjb21waWxlciBhbmQgZGlzYXNzZW1ibGVyIG9ubHkKKwkgKi8KKyNpZmRlZiBBQ1BJX0xBUkdFX05BTUVTUEFDRV9OT0RFCiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9wOworCXUzMiB2YWx1ZTsKKwl1MzIgbGVuZ3RoOwogI2VuZGlmCiB9OwogCi0jZGVmaW5lIEFDUElfRU5UUllfTk9UX0ZPVU5EICAgICAgICAgICAgTlVMTAorLyogTmFtZXNwYWNlIE5vZGUgZmxhZ3MgKi8KIAotLyogTm9kZSBmbGFncyAqLworI2RlZmluZSBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUICAgICAgICAgIDB4MDEJLyogRW5kLW9mLWxpc3QsIFBlZXIgZmllbGQgcG9pbnRzIHRvIHBhcmVudCAqLworI2RlZmluZSBBTk9CSl9EQVRBX1dJRFRIXzMyICAgICAgICAgICAgIDB4MDIJLyogUGFyZW50IHRhYmxlIHVzZXMgMzItYml0IG1hdGggKi8KKyNkZWZpbmUgQU5PQkpfTUVUSE9EX0FSRyAgICAgICAgICAgICAgICAweDA0CS8qIE5vZGUgaXMgYSBtZXRob2QgYXJndW1lbnQgKi8KKyNkZWZpbmUgQU5PQkpfTUVUSE9EX0xPQ0FMICAgICAgICAgICAgICAweDA4CS8qIE5vZGUgaXMgYSBtZXRob2QgbG9jYWwgKi8KKyNkZWZpbmUgQU5PQkpfU1VCVFJFRV9IQVNfSU5JICAgICAgICAgICAweDEwCS8qIFVzZWQgdG8gb3B0aW1pemUgZGV2aWNlIGluaXRpYWxpemF0aW9uICovCiAKLSNkZWZpbmUgQU5PQkpfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QgICAgICAgICAgMHgwMgotI2RlZmluZSBBTk9CSl9EQVRBX1dJRFRIXzMyICAgICAgICAgICAgIDB4MDQJLyogUGFyZW50IHRhYmxlIGlzIDY0LWJpdHMgKi8KLSNkZWZpbmUgQU5PQkpfTUVUSE9EX0FSRyAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFOT0JKX01FVEhPRF9MT0NBTCAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBBTk9CSl9NRVRIT0RfTk9fUkVUVkFMICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQU5PQkpfTUVUSE9EX1NPTUVfTk9fUkVUVkFMICAgICAweDQwCi0jZGVmaW5lIEFOT0JKX0lTX0JJVF9PRkZTRVQgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBBTk9CSl9JU19FWFRFUk5BTCAgICAgICAgICAgICAgIDB4MDgJLyogaV9hU0wgb25seTogVGhpcyBvYmplY3QgY3JlYXRlZCB2aWEgRXh0ZXJuYWwoKSAqLworI2RlZmluZSBBTk9CSl9NRVRIT0RfTk9fUkVUVkFMICAgICAgICAgIDB4MTAJLyogaV9hU0wgb25seTogTWV0aG9kIGhhcyBubyByZXR1cm4gdmFsdWUgKi8KKyNkZWZpbmUgQU5PQkpfTUVUSE9EX1NPTUVfTk9fUkVUVkFMICAgICAweDIwCS8qIGlfYVNMIG9ubHk6IE1ldGhvZCBoYXMgYXQgbGVhc3Qgb25lIHJldHVybiB2YWx1ZSAqLworI2RlZmluZSBBTk9CSl9JU19CSVRfT0ZGU0VUICAgICAgICAgICAgIDB4NDAJLyogaV9hU0wgb25seTogUmVmZXJlbmNlIGlzIGEgYml0IG9mZnNldCAqLworI2RlZmluZSBBTk9CSl9JU19SRUZFUkVOQ0VEICAgICAgICAgICAgIDB4ODAJLyogaV9hU0wgb25seTogT2JqZWN0IHdhcyByZWZlcmVuY2VkICovCiAKIC8qCiAgKiBBQ1BJIFRhYmxlIERlc2NyaXB0b3IuICBPbmUgcGVyIEFDUEkgdGFibGUKQEAgLTIxMiw4ICsyMjYsOCBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqcG9pbnRlcjsKIAl1OCAqYW1sX3N0YXJ0OwogCXU2NCBwaHlzaWNhbF9hZGRyZXNzOwotCXUzMiBhbWxfbGVuZ3RoOwogCWFjcGlfc2l6ZSBsZW5ndGg7CisJdTMyIGFtbF9sZW5ndGg7CiAJYWNwaV9vd25lcl9pZCBvd25lcl9pZDsKIAl1OCB0eXBlOwogCXU4IGFsbG9jYXRpb247CkBAIC0yNzYsNiArMjkwLDkgQEAKIAl1OCBmaWVsZF90eXBlOwogfTsKIAordHlwZWRlZgorYWNwaV9zdGF0dXMoKkFDUElfSU5URVJOQUxfTUVUSE9EKSAoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqIHdhbGtfc3RhdGUpOworCiAvKgogICogQml0bWFwcGVkIEFDUEkgdHlwZXMuICBVc2VkIGludGVybmFsbHkgb25seQogICovCkBAIC0zNzcsNyArMzk0LDcgQEAKIAlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrOwogfTsKIAotdHlwZWRlZiBhY3BpX3N0YXR1cygqQUNQSV9HUEVfQ0FMTEJBQ0spIChzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqCit0eXBlZGVmIGFjcGlfc3RhdHVzKCphY3BpX2dwZV9jYWxsYmFjaykgKHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICoKIAkJCQkJIGdwZV94cnVwdF9pbmZvLAogCQkJCQkgc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gKgogCQkJCQkgZ3BlX2Jsb2NrKTsKQEAgLTQxNiwxMyArNDMzLDE0IEBACiAjZGVmaW5lIEFDUElfQ09OVFJPTF9QUkVESUNBVEVfRkFMU0UgICAgICAgICAweEMzCiAjZGVmaW5lIEFDUElfQ09OVFJPTF9QUkVESUNBVEVfVFJVRSAgICAgICAgICAweEM0CiAKLSNkZWZpbmUgQUNQSV9TVEFURV9DT01NT04gICAvKiBUd28gMzItYml0IGZpZWxkcyBhbmQgYSBwb2ludGVyICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZTsgIC8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAgIFwKLQl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTsgICAgICBcCi0JdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU7ICAgICAgXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOyAgIFwKLQl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dDsKKyNkZWZpbmUgQUNQSV9TVEFURV9DT01NT04gXAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5leHQ7IFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsgLyogVG8gZGlmZmVyZW50aWF0ZSB2YXJpb3VzIGludGVybmFsIG9ianMgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsgXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7IFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOworCisJLyogVGhlcmUgYXJlIDIgYnl0ZXMgYXZhaWxhYmxlIGhlcmUgdW50aWwgdGhlIG5leHQgbmF0dXJhbCBhbGlnbm1lbnQgYm91bmRhcnkgKi8KIAogc3RydWN0IGFjcGlfY29tbW9uX3N0YXRlIHsKIEFDUElfU1RBVEVfQ09NTU9OfTsKQEAgLTQzOCwxMiArNDU2LDEyIEBACiAgKiBQa2cgc3RhdGUgLSB1c2VkIHRvIHRyYXZlcnNlIG5lc3RlZCBwYWNrYWdlIHN0cnVjdHVyZXMKICAqLwogc3RydWN0IGFjcGlfcGtnX3N0YXRlIHsKLQlBQ1BJX1NUQVRFX0NPTU1PTiB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzb3VyY2Vfb2JqZWN0OworCUFDUElfU1RBVEVfQ09NTU9OIHUxNiBpbmRleDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzb3VyY2Vfb2JqZWN0OwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmRlc3Rfb2JqZWN0OwogCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGU7CiAJdm9pZCAqdGhpc190YXJnZXRfb2JqOwogCXUzMiBudW1fcGFja2FnZXM7Ci0JdTE2IGluZGV4OwogfTsKIAogLyoKQEAgLTQ1MSwxMCArNDY5LDEwIEBACiAgKiBBbGxvd3MgbmVzdGluZyBvZiB0aGVzZSBjb25zdHJ1Y3RzCiAgKi8KIHN0cnVjdCBhY3BpX2NvbnRyb2xfc3RhdGUgewotCUFDUElfU1RBVEVfQ09NTU9OIHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpwcmVkaWNhdGVfb3A7CisJQUNQSV9TVEFURV9DT01NT04gdTE2IG9wY29kZTsKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqcHJlZGljYXRlX29wOwogCXU4ICphbWxfcHJlZGljYXRlX3N0YXJ0OwkvKiBTdGFydCBvZiBpZi93aGlsZSBwcmVkaWNhdGUgKi8KIAl1OCAqcGFja2FnZV9lbmQ7CS8qIEVuZCBvZiBpZi93aGlsZSBibG9jayAqLwotCXUxNiBvcGNvZGU7CiB9OwogCiAvKgpAQCAtNDY1LDExICs0ODMsMTEgQEAKIH07CiAKIHN0cnVjdCBhY3BpX3BzY29wZV9zdGF0ZSB7Ci0JQUNQSV9TVEFURV9DT01NT04gdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9wOwkvKiBDdXJyZW50IG9wIGJlaW5nIHBhcnNlZCAqLworCUFDUElfU1RBVEVfQ09NTU9OIHUzMiBhcmdfY291bnQ7CS8qIE51bWJlciBvZiBmaXhlZCBhcmd1bWVudHMgKi8KKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3A7CS8qIEN1cnJlbnQgb3AgYmVpbmcgcGFyc2VkICovCiAJdTggKmFyZ19lbmQ7CQkvKiBDdXJyZW50IGFyZ3VtZW50IGVuZCAqLwogCXU4ICpwa2dfZW5kOwkJLyogQ3VycmVudCBwYWNrYWdlIGVuZCAqLwogCXUzMiBhcmdfbGlzdDsJCS8qIE5leHQgYXJndW1lbnQgdG8gcGFyc2UgKi8KLQl1MzIgYXJnX2NvdW50OwkJLyogTnVtYmVyIG9mIGZpeGVkIGFyZ3VtZW50cyAqLwogfTsKIAogLyoKQEAgLTQ3NywxMCArNDk1LDEwIEBACiAgKiBzdGF0ZXMgYXJlIGNyZWF0ZWQgd2hlbiB0aGVyZSBhcmUgbmVzdGVkIGNvbnRyb2wgbWV0aG9kcyBleGVjdXRpbmcuCiAgKi8KIHN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSB7Ci0JQUNQSV9TVEFURV9DT01NT04gc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZV9saXN0OwkvKiBIZWFkIG9mIGxpc3Qgb2Ygd2Fsa19zdGF0ZXMgZm9yIHRoaXMgdGhyZWFkICovCisJQUNQSV9TVEFURV9DT01NT04gdTggY3VycmVudF9zeW5jX2xldmVsOwkvKiBNdXRleCBTeW5jIChuZXN0ZWQgYWNxdWlyZSkgbGV2ZWwgKi8KKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlX2xpc3Q7CS8qIEhlYWQgb2YgbGlzdCBvZiB3YWxrX3N0YXRlcyBmb3IgdGhpcyB0aHJlYWQgKi8KIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICphY3F1aXJlZF9tdXRleF9saXN0OwkvKiBMaXN0IG9mIGFsbCBjdXJyZW50bHkgYWNxdWlyZWQgbXV0ZXhlcyAqLwotCXUzMiB0aHJlYWRfaWQ7CQkvKiBSdW5uaW5nIHRocmVhZCBJRCAqLwotCXU4IGN1cnJlbnRfc3luY19sZXZlbDsJLyogTXV0ZXggU3luYyAobmVzdGVkIGFjcXVpcmUpIGxldmVsICovCisJYWNwaV90aHJlYWRfaWQgdGhyZWFkX2lkOwkvKiBSdW5uaW5nIHRocmVhZCBJRCAqLwogfTsKIAogLyoKQEAgLTQ4OCwxMCArNTA2LDkgQEAKICAqIEFNTCBhcmd1bWVudHMKICAqLwogc3RydWN0IGFjcGlfcmVzdWx0X3ZhbHVlcyB7Ci0JQUNQSV9TVEFURV9DT01NT04KLQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2NbQUNQSV9PQkpfTlVNX09QRVJBTkRTXTsKLQl1OCBudW1fcmVzdWx0czsKKwlBQ1BJX1NUQVRFX0NPTU1PTiB1OCBudW1fcmVzdWx0czsKIAl1OCBsYXN0X2luc2VydDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzY1tBQ1BJX09CSl9OVU1fT1BFUkFORFNdOwogfTsKIAogdHlwZWRlZgpAQCAtNTQ2LDcgKzU2Myw3IEBACiAjZW5kaWYKIAl1MzIgcGFyc2VfYXJnczsJCS8qIEdyYW1tYXIvUGFyc2UgdGltZSBhcmd1bWVudHMgKi8KIAl1MzIgcnVudGltZV9hcmdzOwkvKiBJbnRlcnByZXQgdGltZSBhcmd1bWVudHMgKi8KLQl1MzIgZmxhZ3M7CQkvKiBNaXNjIGZsYWdzICovCisJdTE2IGZsYWdzOwkJLyogTWlzYyBmbGFncyAqLwogCXU4IG9iamVjdF90eXBlOwkJLyogQ29ycmVzcG9uZGluZyBpbnRlcm5hbCBvYmplY3QgdHlwZSAqLwogCXU4IGNsYXNzOwkJLyogT3Bjb2RlIGNsYXNzICovCiAJdTggdHlwZTsJCS8qIE9wY29kZSB0eXBlICovCkBAIC01NjMsMjkgKzU4MCwzMSBAQAogfTsKIAogI2RlZmluZSBBQ1BJX1BBUlNFX0NPTU1PTiBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlOyAgICAgIC8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAgICAgICAvKiBUeXBlIG9mIE9wICovXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vcGNvZGU7ICAgICAvKiBBTUwgb3Bjb2RlICovXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vZmZzZXQ7ICAgICAvKiBPZmZzZXQgb2YgZGVjbGFyYXRpb24gaW4gQU1MICovXAotCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgICAgICpwYXJlbnQ7ICAgICAgICAvKiBQYXJlbnQgb3AgKi9cCi0JdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAgICAgKm5leHQ7ICAgICAgICAgIC8qIE5leHQgb3AgKi9cCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqcGFyZW50OyAgICAgICAgLyogUGFyZW50IG9wICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOyAvKiBUbyBkaWZmZXJlbnRpYXRlIHZhcmlvdXMgaW50ZXJuYWwgb2JqcyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAgICAgICAvKiBUeXBlIG9mIE9wICovXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX29wY29kZTsgICAgIC8qIEFNTCBvcGNvZGUgKi9cCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfb2Zmc2V0OyAgICAgLyogT2Zmc2V0IG9mIGRlY2xhcmF0aW9uIGluIEFNTCAqL1wKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpuZXh0OyAgICAgICAgICAvKiBOZXh0IG9wICovXAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGU7ICAgICAgICAgIC8qIEZvciB1c2UgYnkgaW50ZXJwcmV0ZXIgKi9cCisJdW5pb24gYWNwaV9wYXJzZV92YWx1ZSAgICAgICAgICB2YWx1ZTsgICAgICAgICAgLyogVmFsdWUgb3IgYXJncyBhc3NvY2lhdGVkIHdpdGggdGhlIG9wY29kZSAqL1wKIAlBQ1BJX0RJU0FTTV9PTkxZX01FTUJFUlMgKFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhc21fZmxhZ3M7ICAgLyogVXNlZCBkdXJpbmcgQU1MIGRpc2Fzc2VtYmx5ICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FzbV9vcGNvZGU7ICAvKiBTdWJ0eXBlIHVzZWQgZm9yIGRpc2Fzc2VtYmx5ICovXAotCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vcF9uYW1lWzE2XSkgLyogT3AgbmFtZSAoZGVidWcgb25seSkgKi9cCi0JCQkgICAvKiBOT04tREVCVUcgbWVtYmVycyBiZWxvdzogKi9cCi0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgKm5vZGU7ICAgICAgICAgIC8qIEZvciB1c2UgYnkgaW50ZXJwcmV0ZXIgKi9cCi0JdW5pb24gYWNwaV9wYXJzZV92YWx1ZSAgICAgICAgICAgICAgdmFsdWU7CS8qIFZhbHVlIG9yIGFyZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcGNvZGUgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FzbV9mbGFnczsgICAvKiBVc2VkIGR1cmluZyBBTUwgZGlzYXNzZW1ibHkgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhc21fb3Bjb2RlOyAgLyogU3VidHlwZSB1c2VkIGZvciBkaXNhc3NlbWJseSAqL1wKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vcF9uYW1lWzE2XSkJLyogT3AgbmFtZSAoZGVidWcgb25seSkgKi8KIAotI2RlZmluZSBBQ1BJX0RBU01fQlVGRkVSICAgICAgICAweDAwCi0jZGVmaW5lIEFDUElfREFTTV9SRVNPVVJDRSAgICAgIDB4MDEKLSNkZWZpbmUgQUNQSV9EQVNNX1NUUklORyAgICAgICAgMHgwMgotI2RlZmluZSBBQ1BJX0RBU01fVU5JQ09ERSAgICAgICAweDAzCi0jZGVmaW5lIEFDUElfREFTTV9FSVNBSUQgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9EQVNNX01BVENIT1AgICAgICAgMHgwNQorI2RlZmluZSBBQ1BJX0RBU01fQlVGRkVSICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQUNQSV9EQVNNX1JFU09VUkNFICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfREFTTV9TVFJJTkcgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX0RBU01fVU5JQ09ERSAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQUNQSV9EQVNNX0VJU0FJRCAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFDUElfREFTTV9NQVRDSE9QICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBBQ1BJX0RBU01fTE5PVF9QUkVGSVggICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQUNQSV9EQVNNX0xOT1RfU1VGRklYICAgICAgICAgICAweDA3CisjZGVmaW5lIEFDUElfREFTTV9JR05PUkUgICAgICAgICAgICAgICAgMHgwOAogCiAvKgotICogZ2VuZXJpYyBvcGVyYXRpb24gKGZvciBleGFtcGxlOiAgSWYsIFdoaWxlLCBTdG9yZSkKKyAqIEdlbmVyaWMgb3BlcmF0aW9uIChmb3IgZXhhbXBsZTogIElmLCBXaGlsZSwgU3RvcmUpCiAgKi8KIHN0cnVjdCBhY3BpX3BhcnNlX29ial9jb21tb24gewogQUNQSV9QQVJTRV9DT01NT059OwpAQCAtNjAxLDcgKzYyMCw3IEBACiAJdTMyIG5hbWU7CQkvKiA0LWJ5dGUgbmFtZSBvciB6ZXJvIGlmIG5vIG5hbWUgKi8KIH07CiAKLS8qIFRoZSBwYXJzZSBub2RlIGlzIHRoZSBmdW5kYW1lbnRhbCBlbGVtZW50IG9mIHRoZSBwYXJzZSB0cmVlICovCisvKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBieSB0aGUgaV9hU0wgY29tcGlsZXIgb25seSAqLwogCiAjZGVmaW5lIEFDUElfTUFYX1BBUlNFT1BfTkFNRSAgIDIwCiAKQEAgLTY0Myw3ICs2NjIsNiBAQAogICogbWV0aG9kLgogICovCiBzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSB7Ci0JdTMyIGFtbF9zaXplOwogCXU4ICphbWxfc3RhcnQ7CQkvKiBGaXJzdCBBTUwgYnl0ZSAqLwogCXU4ICphbWw7CQkvKiBOZXh0IEFNTCBieXRlICovCiAJdTggKmFtbF9lbmQ7CQkvKiAobGFzdCArIDEpIEFNTCBieXRlICovCkBAIC02NTMsMjIgKzY3MSwyMyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpzdGFydF9ub2RlOwogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGU7CS8qIEN1cnJlbnQgc2NvcGUgKi8KIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqc3RhcnRfc2NvcGU7CisJdTMyIGFtbF9zaXplOwogfTsKIAogLyogUGFyc2Ugb2JqZWN0IGZsYWdzICovCiAKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0dFTkVSSUMgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX05BTUVEICAgICAgICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0RFRkVSUkVEICAgICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0JZVEVMSVNUICAgICAgICAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0lOX0NBQ0hFICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0dFTkVSSUMgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfUEFSU0VPUF9OQU1FRCAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX1BBUlNFT1BfREVGRVJSRUQgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0JZVEVMSVNUICAgICAgICAgICAweDA4CisjZGVmaW5lIEFDUElfUEFSU0VPUF9JTl9DQUNIRSAgICAgICAgICAgMHg4MAogCiAvKiBQYXJzZSBvYmplY3QgZGlzYXNtX2ZsYWdzICovCiAKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0lHTk9SRSAgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX1BBUkFNTElTVCAgICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0VNUFRZX1RFUk1MSVNUICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX1NQRUNJQUwgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0lHTk9SRSAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfUEFSU0VPUF9QQVJBTUxJU1QgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX1BBUlNFT1BfRU1QVFlfVEVSTUxJU1QgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX1NQRUNJQUwgICAgICAgICAgICAweDEwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTY3Niw4ICs2OTUsOCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIFBDSV9ST09UX0hJRF9TVFJJTkcgICAgICAgICAiUE5QMEEwMyIKLSNkZWZpbmUgUENJX0VYUFJFU1NfUk9PVF9ISURfU1RSSU5HICJQTlAwQTA4IgorI2RlZmluZSBQQ0lfUk9PVF9ISURfU1RSSU5HICAgICAgICAgICAgICJQTlAwQTAzIgorI2RlZmluZSBQQ0lfRVhQUkVTU19ST09UX0hJRF9TVFJJTkcgICAgICJQTlAwQTA4IgogCiBzdHJ1Y3QgYWNwaV9iaXRfcmVnaXN0ZXJfaW5mbyB7CiAJdTggcGFyZW50X3JlZ2lzdGVyOwpAQCAtNzEwLDEzICs3MjksMTQgQEAKICNkZWZpbmUgQUNQSV9CSVRNQVNLX1BDSUVYUF9XQUtFX1NUQVRVUyAgICAgICAgIDB4NDAwMAkvKiBBQ1BJIDMuMCAqLwogI2RlZmluZSBBQ1BJX0JJVE1BU0tfV0FLRV9TVEFUVVMgICAgICAgICAgICAgICAgMHg4MDAwCiAKLSNkZWZpbmUgQUNQSV9CSVRNQVNLX0FMTF9GSVhFRF9TVEFUVVMgICAgICAgICAgIChBQ1BJX0JJVE1BU0tfVElNRVJfU1RBVFVTICAgICAgICAgIHwgXAotCQkJIEFDUElfQklUTUFTS19CVVNfTUFTVEVSX1NUQVRVUyAgICAgfCBcCi0JCQkgQUNQSV9CSVRNQVNLX0dMT0JBTF9MT0NLX1NUQVRVUyAgICB8IFwKLQkJCSBBQ1BJX0JJVE1BU0tfUE9XRVJfQlVUVE9OX1NUQVRVUyAgIHwgXAotCQkJIEFDUElfQklUTUFTS19TTEVFUF9CVVRUT05fU1RBVFVTICAgfCBcCi0JCQkgQUNQSV9CSVRNQVNLX1JUX0NMT0NLX1NUQVRVUyAgICAgICB8IFwKLQkJCSBBQ1BJX0JJVE1BU0tfV0FLRV9TVEFUVVMpCisjZGVmaW5lIEFDUElfQklUTUFTS19BTExfRklYRURfU1RBVFVTICAgICAgICAgICAoXAorCUFDUElfQklUTUFTS19USU1FUl9TVEFUVVMgICAgICAgICAgfCBcCisJQUNQSV9CSVRNQVNLX0JVU19NQVNURVJfU1RBVFVTICAgICB8IFwKKwlBQ1BJX0JJVE1BU0tfR0xPQkFMX0xPQ0tfU1RBVFVTICAgIHwgXAorCUFDUElfQklUTUFTS19QT1dFUl9CVVRUT05fU1RBVFVTICAgfCBcCisJQUNQSV9CSVRNQVNLX1NMRUVQX0JVVFRPTl9TVEFUVVMgICB8IFwKKwlBQ1BJX0JJVE1BU0tfUlRfQ0xPQ0tfU1RBVFVTICAgICAgIHwgXAorCUFDUElfQklUTUFTS19XQUtFX1NUQVRVUykKIAogI2RlZmluZSBBQ1BJX0JJVE1BU0tfVElNRVJfRU5BQkxFICAgICAgICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIEFDUElfQklUTUFTS19HTE9CQUxfTE9DS19FTkFCTEUgICAgICAgICAweDAwMjAKQEAgLTgyMCw3ICs4NDAsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIEFDUElfQVNDSUlfWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAweDMwCisjZGVmaW5lIEFDUElfQVNDSUlfWkVSTyAgICAgICAgICAgICAgICAgMHgzMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC04NDIsOSArODYyLDkgQEAKIAl1MzIgb2JqZWN0czsKIH07CiAKLSNkZWZpbmUgQUNQSV9EQl9SRURJUkVDVEFCTEVfT1VUUFVUICAweDAxCi0jZGVmaW5lIEFDUElfREJfQ09OU09MRV9PVVRQVVQgICAgICAgMHgwMgotI2RlZmluZSBBQ1BJX0RCX0RVUExJQ0FURV9PVVRQVVQgICAgIDB4MDMKKyNkZWZpbmUgQUNQSV9EQl9SRURJUkVDVEFCTEVfT1VUUFVUICAgICAweDAxCisjZGVmaW5lIEFDUElfREJfQ09OU09MRV9PVVRQVVQgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX0RCX0RVUExJQ0FURV9PVVRQVVQgICAgICAgIDB4MDMKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtODU0LDE4ICs4NzQsMTggQEAKIAogLyogRW50cnkgZm9yIGEgbWVtb3J5IGFsbG9jYXRpb24gKGRlYnVnIG9ubHkpICovCiAKLSNkZWZpbmUgQUNQSV9NRU1fTUFMTE9DICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQUNQSV9NRU1fQ0FMTE9DICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQUNQSV9NQVhfTU9EVUxFX05BTUUgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFDUElfTUVNX01BTExPQyAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBQ1BJX01FTV9DQUxMT0MgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQUNQSV9NQVhfTU9EVUxFX05BTUUgICAgICAgICAgICAxNgogCiAjZGVmaW5lIEFDUElfQ09NTU9OX0RFQlVHX01FTV9IRUFERVIgXAotCXN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAgICAgICAgICpwcmV2aW91czsgXAotCXN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAgICAgICAgICpuZXh0OyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTsgXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDsgXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU7IFwKLQljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVbQUNQSV9NQVhfTU9EVUxFX05BTUVdOyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NfdHlwZTsKKwlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgICAgICpwcmV2aW91czsgXAorCXN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAgICAgKm5leHQ7IFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU7IFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDsgXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTsgXAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlW0FDUElfTUFYX01PRFVMRV9OQU1FXTsgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NfdHlwZTsKIAogc3RydWN0IGFjcGlfZGVidWdfbWVtX2hlYWRlciB7CiBBQ1BJX0NPTU1PTl9ERUJVR19NRU1fSEVBREVSfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oIGIvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKaW5kZXggZjJiZTJhOC4uMzhmOWFhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKQEAgLTU2LDYgKzU2LDEwIEBACiAjZGVmaW5lIEFDUElfQ0xFQVJfQklUKHRhcmdldCxiaXQpICAgICAgKCh0YXJnZXQpICY9IH4oYml0KSkKICNkZWZpbmUgQUNQSV9NSU4oYSxiKSAgICAgICAgICAgICAgICAgICAoKChhKTwoYikpPyhhKTooYikpCiAKKy8qIFNpemUgY2FsY3VsYXRpb24gKi8KKworI2RlZmluZSBBQ1BJX0FSUkFZX0xFTkdUSCh4KSAgICAgICAgICAgIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkKKwogI2lmIEFDUElfTUFDSElORV9XSURUSCA9PSAxNgogCiAvKgpAQCAtOTksNyArMTAzLDcgQEAKICAqIHByaW50ZigpIGZvcm1hdCBoZWxwZXJzCiAgKi8KIAotLyogU3BsaXQgNjQtYml0IGludGVnZXIgaW50byB0d28gMzItYml0IHZhbHVlcy4gVXNlIHdpdGggJTguOFglOC44WCAqLworLyogU3BsaXQgNjQtYml0IGludGVnZXIgaW50byB0d28gMzItYml0IHZhbHVlcy4gVXNlIHdpdGggJTguOF94JTguOF94ICovCiAKICNkZWZpbmUgQUNQSV9GT1JNQVRfVUlOVDY0KGkpICAgICAgICAgICBBQ1BJX0hJRFdPUkQoaSksQUNQSV9MT0RXT1JEKGkpCiAKQEAgLTEzMCw3ICsxMzQsNiBAQAogI2RlZmluZSBBQ1BJX1RPX1BPSU5URVIoaSkgICAgICAgICAgICAgIEFDUElfQUREX1BUUiAodm9pZCwodm9pZCAqKSBOVUxMLChhY3BpX25hdGl2ZV91aW50KSBpKQogI2RlZmluZSBBQ1BJX1RPX0lOVEVHRVIocCkgICAgICAgICAgICAgIEFDUElfUFRSX0RJRkYgKHAsKHZvaWQgKikgTlVMTCkKICNkZWZpbmUgQUNQSV9PRkZTRVQoZCxmKSAgICAgICAgICAgICAgICAoYWNwaV9zaXplKSBBQ1BJX1BUUl9ESUZGICgmKCgoZCAqKTApLT5mKSwodm9pZCAqKSBOVUxMKQotI2RlZmluZSBBQ1BJX0ZBRFRfT0ZGU0VUKGYpICAgICAgICAgICAgIEFDUElfT0ZGU0VUIChGQURUX0RFU0NSSVBUT1IsIGYpCiAKICNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gMTYKICNkZWZpbmUgQUNQSV9TVE9SRV9QT0lOVEVSKGQscykgICAgICAgICBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKQpAQCAtMTQxLDYgKzE0NCwxMiBAQAogI2RlZmluZSBBQ1BJX1BUUl9UT19QSFlTQUREUihpKSAgICAgICAgIEFDUElfVE9fSU5URUdFUihpKQogI2VuZGlmCiAKKyNpZm5kZWYgQUNQSV9NSVNBTElHTk1FTlRfTk9UX1NVUFBPUlRFRAorI2RlZmluZSBBQ1BJX0NPTVBBUkVfTkFNRShhLGIpICAgICAgICAgICgqQUNQSV9DQVNUX1BUUiAodTMyLChhKSkgPT0gKkFDUElfQ0FTVF9QVFIgKHUzMiwoYikpKQorI2Vsc2UKKyNkZWZpbmUgQUNQSV9DT01QQVJFX05BTUUoYSxiKSAgICAgICAgICAoIUFDUElfU1RSTkNNUCAoQUNQSV9DQVNUX1BUUiAoY2hhciwoYSkpLCBBQ1BJX0NBU1RfUFRSIChjaGFyLChiKSksIEFDUElfTkFNRV9TSVpFKSkKKyNlbmRpZgorCiAvKgogICogTWFjcm9zIGZvciBtb3ZpbmcgZGF0YSBhcm91bmQgdG8vZnJvbSBidWZmZXJzIHRoYXQgYXJlIHBvc3NpYmx5IHVuYWxpZ25lZC4KICAqIElmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgdHJhbnNmZXIgb2YgdW5hbGlnbmVkIGRhdGEsIGp1c3QgZG8gdGhlIHN0b3JlLgpAQCAtMzQxLDI5ICszNTAsMzMgQEAKIC8qCiAgKiBSb3VuZGluZyBtYWNyb3MgKFBvd2VyIG9mIHR3byBib3VuZGFyaWVzIG9ubHkpCiAgKi8KLSNkZWZpbmUgQUNQSV9ST1VORF9ET1dOKHZhbHVlLGJvdW5kYXJ5KSAgICAgICgoKGFjcGlfbmF0aXZlX3VpbnQpKHZhbHVlKSkgJiBcCisjZGVmaW5lIEFDUElfUk9VTkRfRE9XTih2YWx1ZSxib3VuZGFyeSkgICAgICgoKGFjcGlfbmF0aXZlX3VpbnQpKHZhbHVlKSkgJiBcCiAJCQkJCQkJCQkJCQkofigoKGFjcGlfbmF0aXZlX3VpbnQpIGJvdW5kYXJ5KS0xKSkpCiAKLSNkZWZpbmUgQUNQSV9ST1VORF9VUCh2YWx1ZSxib3VuZGFyeSkgICAgICAgICgoKChhY3BpX25hdGl2ZV91aW50KSh2YWx1ZSkpICsgXAorI2RlZmluZSBBQ1BJX1JPVU5EX1VQKHZhbHVlLGJvdW5kYXJ5KSAgICAgICAoKCgoYWNwaV9uYXRpdmVfdWludCkodmFsdWUpKSArIFwKIAkJCQkJCQkJCQkJCSgoKGFjcGlfbmF0aXZlX3VpbnQpIGJvdW5kYXJ5KS0xKSkgJiBcCiAJCQkJCQkJCQkJCQkofigoKGFjcGlfbmF0aXZlX3VpbnQpIGJvdW5kYXJ5KS0xKSkpCiAKLSNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzMyX0JJVFMoYSkgICAgICAgIEFDUElfUk9VTkRfRE9XTihhLDQpCi0jZGVmaW5lIEFDUElfUk9VTkRfRE9XTl9UT182NF9CSVRTKGEpICAgICAgICBBQ1BJX1JPVU5EX0RPV04oYSw4KQotI2RlZmluZSBBQ1BJX1JPVU5EX0RPV05fVE9fTkFUSVZFX1dPUkQoYSkgICAgQUNQSV9ST1VORF9ET1dOKGEsQUxJR05FRF9BRERSRVNTX0JPVU5EQVJZKQorLyogTm90ZTogc2l6ZW9mKGFjcGlfbmF0aXZlX3VpbnQpIGV2YWx1YXRlcyB0byBlaXRoZXIgMiwgNCwgb3IgOCAqLwogCi0jZGVmaW5lIEFDUElfUk9VTkRfVVBfdG9fMzJfYklUUyhhKSAgICAgICAgICBBQ1BJX1JPVU5EX1VQKGEsNCkKLSNkZWZpbmUgQUNQSV9ST1VORF9VUF90b182NF9iSVRTKGEpICAgICAgICAgIEFDUElfUk9VTkRfVVAoYSw4KQotI2RlZmluZSBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKGEpICAgICAgQUNQSV9ST1VORF9VUChhLEFMSUdORURfQUREUkVTU19CT1VOREFSWSkKKyNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzMyQklUKGEpICAgICAgICAgQUNQSV9ST1VORF9ET1dOKGEsNCkKKyNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzY0QklUKGEpICAgICAgICAgQUNQSV9ST1VORF9ET1dOKGEsOCkKKyNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPX05BVElWRV9XT1JEKGEpICAgQUNQSV9ST1VORF9ET1dOKGEsc2l6ZW9mKGFjcGlfbmF0aXZlX3VpbnQpKQogCi0jZGVmaW5lIEFDUElfUk9VTkRfQklUU19VUF9UT19CWVRFUyhhKSAgICAgICBBQ1BJX0RJVl84KChhKSArIDcpCi0jZGVmaW5lIEFDUElfUk9VTkRfQklUU19ET1dOX1RPX0JZVEVTKGEpICAgICBBQ1BJX0RJVl84KChhKSkKKyNkZWZpbmUgQUNQSV9ST1VORF9VUF9UT18zMkJJVChhKSAgICAgICAgICAgQUNQSV9ST1VORF9VUChhLDQpCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fNjRCSVQoYSkgICAgICAgICAgIEFDUElfUk9VTkRfVVAoYSw4KQorI2RlZmluZSBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKGEpICAgICBBQ1BJX1JPVU5EX1VQKGEsc2l6ZW9mKGFjcGlfbmF0aXZlX3VpbnQpKQogCi0jZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fMUsoYSkgICAgICAgICAgICAgICAoKChhKSArIDEwMjMpID4+IDEwKQorI2RlZmluZSBBQ1BJX1JPVU5EX0JJVFNfVVBfVE9fQllURVMoYSkgICAgICBBQ1BJX0RJVl84KChhKSArIDcpCisjZGVmaW5lIEFDUElfUk9VTkRfQklUU19ET1dOX1RPX0JZVEVTKGEpICAgIEFDUElfRElWXzgoKGEpKQorCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fMUsoYSkgICAgICAgICAgICAgICgoKGEpICsgMTAyMykgPj4gMTApCiAKIC8qIEdlbmVyaWMgKG5vbi1wb3dlci1vZi10d28pIHJvdW5kaW5nICovCiAKLSNkZWZpbmUgQUNQSV9ST1VORF9VUF9UTyh2YWx1ZSxib3VuZGFyeSkgICAgICgoKHZhbHVlKSArICgoYm91bmRhcnkpLTEpKSAvIChib3VuZGFyeSkpCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE8odmFsdWUsYm91bmRhcnkpICAgICgoKHZhbHVlKSArICgoYm91bmRhcnkpLTEpKSAvIChib3VuZGFyeSkpCisKKyNkZWZpbmUgQUNQSV9JU19NSVNBTElHTkVEKHZhbHVlKSAgICAgICAgICAgKCgoYWNwaV9uYXRpdmVfdWludCl2YWx1ZSkgJiAoc2l6ZW9mKGFjcGlfbmF0aXZlX3VpbnQpLTEpKQogCiAvKgogICogQml0bWFzayBjcmVhdGlvbgpAQCAtMzcxLDEwICszODQsMTAgQEAKICAqIE1BU0tfQklUU19BQk9WRSBjcmVhdGVzIGEgbWFzayBzdGFydGluZyBBVCB0aGUgcG9zaXRpb24gYW5kIGFib3ZlCiAgKiBNQVNLX0JJVFNfQkVMT1cgY3JlYXRlcyBhIG1hc2sgc3RhcnRpbmcgb25lIGJpdCBCRUxPVyB0aGUgcG9zaXRpb24KICAqLwotI2RlZmluZSBBQ1BJX01BU0tfQklUU19BQk9WRShwb3NpdGlvbikgICAgICAgKH4oKEFDUElfSU5URUdFUl9NQVgpIDw8ICgodTMyKSAocG9zaXRpb24pKSkpCi0jZGVmaW5lIEFDUElfTUFTS19CSVRTX0JFTE9XKHBvc2l0aW9uKSAgICAgICAoKEFDUElfSU5URUdFUl9NQVgpIDw8ICgodTMyKSAocG9zaXRpb24pKSkKKyNkZWZpbmUgQUNQSV9NQVNLX0JJVFNfQUJPVkUocG9zaXRpb24pICAgICAgKH4oKEFDUElfSU5URUdFUl9NQVgpIDw8ICgodTMyKSAocG9zaXRpb24pKSkpCisjZGVmaW5lIEFDUElfTUFTS19CSVRTX0JFTE9XKHBvc2l0aW9uKSAgICAgICgoQUNQSV9JTlRFR0VSX01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKQogCi0jZGVmaW5lIEFDUElfSVNfT0NUQUxfRElHSVQoZCkgICAgICAgICAgICAgICAoKChjaGFyKShkKSA+PSAnMCcpICYmICgoY2hhcikoZCkgPD0gJzcnKSkKKyNkZWZpbmUgQUNQSV9JU19PQ1RBTF9ESUdJVChkKSAgICAgICAgICAgICAgKCgoY2hhcikoZCkgPj0gJzAnKSAmJiAoKGNoYXIpKGQpIDw9ICc3JykpCiAKIC8qIEJpdGZpZWxkcyB3aXRoaW4gQUNQSSByZWdpc3RlcnMgKi8KIApAQCAtMzk2LDggKzQwOSw4IEBACiAgKgogICogVGhlICJEZXNjcmlwdG9yIiBmaWVsZCBpcyB0aGUgZmlyc3QgZmllbGQgaW4gYm90aCBzdHJ1Y3R1cmVzLgogICovCi0jZGVmaW5lIEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkKSAgICAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5kZXNjcmlwdG9yX2lkKQotI2RlZmluZSBBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUoZCx0KSAgICgoKHVuaW9uIGFjcGlfZGVzY3JpcHRvciAqKSh2b2lkICopKGQpKS0+ZGVzY3JpcHRvcl9pZCA9IHQpCisjZGVmaW5lIEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkKSAgICAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5jb21tb24uZGVzY3JpcHRvcl90eXBlKQorI2RlZmluZSBBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUoZCx0KSAgICgoKHVuaW9uIGFjcGlfZGVzY3JpcHRvciAqKSh2b2lkICopKGQpKS0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9IHQpCiAKIC8qIE1hY3JvIHRvIHRlc3QgdGhlIG9iamVjdCB0eXBlICovCiAKQEAgLTQ4Niw3ICs0OTksNiBAQAogI2RlZmluZSBBQ1BJX0VSUk9SKHBsaXN0KQogI2RlZmluZSBBQ1BJX0VSUk9SX05BTUVTUEFDRShzLGUpCiAjZGVmaW5lIEFDUElfRVJST1JfTUVUSE9EKHMsbixwLGUpCi0KICNlbmRpZgogCiAvKgpAQCAtNTE0LDEyICs1MjYsMTIgQEAKICNkZWZpbmUgQUNQSV9HRVRfRlVOQ1RJT05fTkFNRSAgICAgICAgICBfYWNwaV9mdW5jdGlvbl9uYW1lCiAvKgogICogVGhlIE5hbWUgcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgcHJvY2VkdXJlIG5hbWUgYXMgYSBxdW90ZWQgc3RyaW5nLgotICogVGhpcyBpcyBkZWNsYXJlZCBhcyBhIGxvY2FsIHN0cmluZyAoIm15X2Z1bmN0aW9uX25hbWUiKSBzbyB0aGF0IGl0IGNhbgorICogVGhpcyBpcyBkZWNsYXJlZCBhcyBhIGxvY2FsIHN0cmluZyAoIk15RnVuY3Rpb25OYW1lIikgc28gdGhhdCBpdCBjYW4KICAqIGJlIGFsc28gdXNlZCBieSB0aGUgZnVuY3Rpb24gZXhpdCBtYWNyb3MgYmVsb3cuCiAgKiBOb3RlOiAoY29uc3QgY2hhcikgaXMgdXNlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGRlYnVnIGludGVyZmFjZXMKICAqIGFuZCBtYWNyb3Mgc3VjaCBhcyBfX0ZVTkNUSU9OX18uCiAgKi8KLSNkZWZpbmUgQUNQSV9GVU5DVElPTl9OQU1FKG5hbWUpICAgICAgICBjb25zdCBjaGFyICpfYWNwaV9mdW5jdGlvbl9uYW1lID0gbmFtZTsKKyNkZWZpbmUgQUNQSV9GVU5DVElPTl9OQU1FKG5hbWUpICAgICAgICBjb25zdCBjaGFyICpfYWNwaV9mdW5jdGlvbl9uYW1lID0gI25hbWU7CiAKICNlbHNlCiAvKiBDb21waWxlciBzdXBwb3J0cyBfX0ZVTkNUSU9OX18gKG9yIGVxdWl2YWxlbnQpIC0tIElnbm9yZSB0aGlzIG1hY3JvICovCkBAIC01MjgsMTMgKzU0MCwxMyBAQAogI2VuZGlmCiAKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRShhKSAgICAgICAgICBBQ1BJX0ZVTkNUSU9OX05BTUUoYSkgXAotCQkJCQkJCQkJICBhY3BpX3V0X3RyYWNlKEFDUElfREVCVUdfUEFSQU1FVEVSUykKKwkJCSAgYWNwaV91dF90cmFjZShBQ1BJX0RFQlVHX1BBUkFNRVRFUlMpCiAjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGEsYikgICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKLQkJCQkJCQkJCQkJYWNwaV91dF90cmFjZV9wdHIoQUNQSV9ERUJVR19QQVJBTUVURVJTLCh2b2lkICopYikKKwkJCQkJICAgYWNwaV91dF90cmFjZV9wdHIoQUNQSV9ERUJVR19QQVJBTUVURVJTLCh2b2lkICopYikKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoYSxiKSAgICBBQ1BJX0ZVTkNUSU9OX05BTUUoYSkgXAotCQkJCQkJCQkJCQlhY3BpX3V0X3RyYWNlX3UzMihBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsKHUzMiliKQorCQkJCQkJCSBhY3BpX3V0X3RyYWNlX3UzMihBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsKHUzMiliKQogI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihhLGIpICAgIEFDUElfRlVOQ1RJT05fTkFNRShhKSBcCi0JCQkJCQkJCQkJCWFjcGlfdXRfdHJhY2Vfc3RyKEFDUElfREVCVUdfUEFSQU1FVEVSUywoY2hhciAqKWIpCisJCQkJCQkJCQkgIGFjcGlfdXRfdHJhY2Vfc3RyKEFDUElfREVCVUdfUEFSQU1FVEVSUywoY2hhciAqKWIpCiAKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9FTlRSWSgpICAgICAgICAgICBhY3BpX3V0X3RyYWNrX3N0YWNrX3B0cigpCiAKQEAgLTU0Myw3ICs1NTUsNyBAQAogICogV0FSTklORzogVGhlc2UgbWFjcm9zIGluY2x1ZGUgYSByZXR1cm4gc3RhdGVtZW50LiAgVGhpcyBpcyB1c3VhbGx5IGNvbnNpZGVyZWQKICAqIGJhZCBmb3JtLCBidXQgaGF2aW5nIGEgc2VwYXJhdGUgZXhpdCBtYWNybyBpcyB2ZXJ5IHVnbHkgYW5kIGRpZmZpY3VsdCB0byBtYWludGFpbi4KICAqIE9uZSBvZiB0aGUgRlVOQ1RJT05fVFJBQ0UgbWFjcm9zIGFib3ZlIG11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZXNlIG1hY3JvcwotICogc28gdGhhdCAiX2FjcGlfZnVuY3Rpb25fbmFtZSIgaXMgZGVmaW5lZC4KKyAqIHNvIHRoYXQgIl9BY3BpRnVuY3Rpb25OYW1lIiBpcyBkZWZpbmVkLgogICoKICAqIE5vdGU6IHRoZSBET19XSElMRTAgbWFjcm8gaXMgdXNlZCB0byBwcmV2ZW50IHNvbWUgY29tcGlsZXJzIGZyb20gY29tcGxhaW5pbmcKICAqIGFib3V0IHRoZXNlIGNvbnN0cnVjdHMuCkBAIC02NTQsNiArNjY2LDcgQEAKICNkZWZpbmUgQUNQSV9EVU1QX1NUQUNLX0VOVFJZKGEpCiAjZGVmaW5lIEFDUElfRFVNUF9PUEVSQU5EUyhhLGIsYyxkLGUpCiAjZGVmaW5lIEFDUElfRFVNUF9FTlRSWShhLGIpCisjZGVmaW5lIEFDUElfRFVNUF9UQUJMRVMoYSxiKQogI2RlZmluZSBBQ1BJX0RVTVBfUEFUSE5BTUUoYSxiLGMsZCkKICNkZWZpbmUgQUNQSV9EVU1QX1JFU09VUkNFX0xJU1QoYSkKICNkZWZpbmUgQUNQSV9EVU1QX0JVRkZFUihhLGIpCkBAIC03MDksMTkgKzcyMiwxOSBAQAogCiAvKiBNZW1vcnkgYWxsb2NhdGlvbiAqLwogCi0jZGVmaW5lIEFDUElfTUVNX0FMTE9DQVRFKGEpICAgICAgICAgICAgYWNwaV91dF9hbGxvY2F0ZSgoYWNwaV9zaXplKShhKSxfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQotI2RlZmluZSBBQ1BJX01FTV9DQUxMT0NBVEUoYSkgICAgICAgICAgIGFjcGlfdXRfY2FsbG9jYXRlKChhY3BpX3NpemUpKGEpLCBfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQotI2RlZmluZSBBQ1BJX01FTV9GUkVFKGEpICAgICAgICAgICAgICAgIGFjcGlfb3NfZnJlZShhKQorI2RlZmluZSBBQ1BJX0FMTE9DQVRFKGEpICAgICAgICAgICAgYWNwaV91dF9hbGxvY2F0ZSgoYWNwaV9zaXplKShhKSxfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQorI2RlZmluZSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChhKSAgICAgYWNwaV91dF9hbGxvY2F0ZV96ZXJvZWQoKGFjcGlfc2l6ZSkoYSksIF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCisjZGVmaW5lIEFDUElfRlJFRShhKSAgICAgICAgICAgICAgICBhY3BpX29zX2ZyZWUoYSkKICNkZWZpbmUgQUNQSV9NRU1fVFJBQ0tJTkcoYSkKIAogI2Vsc2UKIAogLyogTWVtb3J5IGFsbG9jYXRpb24gKi8KIAotI2RlZmluZSBBQ1BJX01FTV9BTExPQ0FURShhKSAgICAgICAgICAgIGFjcGlfdXRfYWxsb2NhdGVfYW5kX3RyYWNrKChhY3BpX3NpemUpKGEpLF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCi0jZGVmaW5lIEFDUElfTUVNX0NBTExPQ0FURShhKSAgICAgICAgICAgYWNwaV91dF9jYWxsb2NhdGVfYW5kX3RyYWNrKChhY3BpX3NpemUpKGEpLCBfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQotI2RlZmluZSBBQ1BJX01FTV9GUkVFKGEpICAgICAgICAgICAgICAgIGFjcGlfdXRfZnJlZV9hbmRfdHJhY2soYSxfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQotI2RlZmluZSBBQ1BJX01FTV9UUkFDS0lORyhhKSAgICAgICAgICAgIGEKKyNkZWZpbmUgQUNQSV9BTExPQ0FURShhKSAgICAgICAgICAgIGFjcGlfdXRfYWxsb2NhdGVfYW5kX3RyYWNrKChhY3BpX3NpemUpKGEpLF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCisjZGVmaW5lIEFDUElfQUxMT0NBVEVfWkVST0VEKGEpICAgICBhY3BpX3V0X2FsbG9jYXRlX3plcm9lZF9hbmRfdHJhY2soKGFjcGlfc2l6ZSkoYSksIF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCisjZGVmaW5lIEFDUElfRlJFRShhKSAgICAgICAgICAgICAgICBhY3BpX3V0X2ZyZWVfYW5kX3RyYWNrKGEsX0NPTVBPTkVOVCxfYWNwaV9tb2R1bGVfbmFtZSxfX0xJTkVfXykKKyNkZWZpbmUgQUNQSV9NRU1fVFJBQ0tJTkcoYSkgICAgICAgIGEKIAogI2VuZGlmCQkJCS8qIEFDUElfREJHX1RSQUNLX0FMTE9DQVRJT05TICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY25hbWVzcC5oIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKaW5kZXggYjY2N2E4MC4uODNiNTJmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKQEAgLTYzLDYgKzYzLDggQEAKICNkZWZpbmUgQUNQSV9OU19ET05UX09QRU5fU0NPUEUgICAgIDB4MDIKICNkZWZpbmUgQUNQSV9OU19OT19QRUVSX1NFQVJDSCAgICAgIDB4MDQKICNkZWZpbmUgQUNQSV9OU19FUlJPUl9JRl9GT1VORCAgICAgIDB4MDgKKyNkZWZpbmUgQUNQSV9OU19QUkVGSVhfSVNfU0NPUEUgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9OU19FWFRFUk5BTCAgICAgICAgICAgIDB4MjAKIAogI2RlZmluZSBBQ1BJX05TX1dBTEtfVU5MT0NLICAgICAgICAgVFJVRQogI2RlZmluZSBBQ1BJX05TX1dBTEtfTk9fVU5MT0NLICAgICAgRkFMU0UKQEAgLTE3MSwxOSArMTczLDE3IEBACiAvKgogICogbnNldmFsIC0gTmFtZXNwYWNlIGV2YWx1YXRpb24gZnVuY3Rpb25zCiAgKi8KLWFjcGlfc3RhdHVzIGFjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKTsKLQotYWNwaV9zdGF0dXMKLWFjcGlfbnNfZXZhbHVhdGVfYnlfbmFtZShjaGFyICpwYXRobmFtZSwgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pOwotCi1hY3BpX3N0YXR1cwotYWNwaV9uc19ldmFsdWF0ZV9yZWxhdGl2ZShjaGFyICpwYXRobmFtZSwgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pOworYWNwaV9zdGF0dXMgYWNwaV9uc19ldmFsdWF0ZShzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKTsKIAogLyoKICAqIG5zbmFtZXMgLSBOYW1lIGFuZCBTY29wZSBtYW5pcHVsYXRpb24KICAqLwogdTMyIGFjcGlfbnNfb3BlbnNfc2NvcGUoYWNwaV9vYmplY3RfdHlwZSB0eXBlKTsKIAordm9pZAorYWNwaV9uc19idWlsZF9leHRlcm5hbF9wYXRoKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlLAorCQkJICAgIGFjcGlfc2l6ZSBzaXplLCBjaGFyICpuYW1lX2J1ZmZlcik7CisKIGNoYXIgKmFjcGlfbnNfZ2V0X2V4dGVybmFsX3BhdGhuYW1lKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKTsKIAogY2hhciAqYWNwaV9uc19uYW1lX29mX2N1cnJlbnRfc2NvcGUoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSk7CkBAIC0xOTYsOSArMTk2LDkgQEAKIGFjcGlfbnNfcGF0dGVybl9tYXRjaChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqb2JqX25vZGUsIGNoYXIgKnNlYXJjaF9mb3IpOwogCiBhY3BpX3N0YXR1cwotYWNwaV9uc19nZXRfbm9kZV9ieV9wYXRoKGNoYXIgKmV4dGVybmFsX3BhdGhuYW1lLAotCQkJIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICppbl9wcmVmaXhfbm9kZSwKLQkJCSB1MzIgZmxhZ3MsIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoqb3V0X25vZGUpOworYWNwaV9uc19nZXRfbm9kZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcHJlZml4X25vZGUsCisJCSBjaGFyICpleHRlcm5hbF9wYXRobmFtZSwKKwkJIHUzMiBmbGFncywgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipvdXRfbm9kZSk7CiAKIGFjcGlfc2l6ZSBhY3BpX25zX2dldF9wYXRobmFtZV9sZW5ndGgoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUpOwogCkBAIC0yNDEsMTAgKzI0MSwxMCBAQAogCQkJIHUzMiBmbGFncywgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipyZXRfbm9kZSk7CiAKIGFjcGlfc3RhdHVzCi1hY3BpX25zX3NlYXJjaF9ub2RlKHUzMiBlbnRyeV9uYW1lLAotCQkgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCi0JCSAgICBhY3BpX29iamVjdF90eXBlIHR5cGUsCi0JCSAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKnJldF9ub2RlKTsKK2FjcGlfbnNfc2VhcmNoX29uZV9zY29wZSh1MzIgZW50cnlfbmFtZSwKKwkJCSBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKKwkJCSBhY3BpX29iamVjdF90eXBlIHR5cGUsCisJCQkgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipyZXRfbm9kZSk7CiAKIHZvaWQKIGFjcGlfbnNfaW5zdGFsbF9ub2RlKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNvYmplY3QuaCBiL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oCmluZGV4IGQxMzBjZmUuLjE3NDdkOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oCkBAIC0xLDcgKzEsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogTmFtZTogYWNvYmplY3QuaCAtIERlZmluaXRpb24gb2YgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAoSW50ZXJuYWwgb2JqZWN0IG9ubHkpCisgKiBOYW1lOiBhY29iamVjdC5oIC0gRGVmaW5pdGlvbiBvZiB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAoSW50ZXJuYWwgb2JqZWN0IG9ubHkpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00NSwxMCArNDUsMTIgQEAKICNpZm5kZWYgX0FDT0JKRUNUX0gKICNkZWZpbmUgX0FDT0JKRUNUX0gKIAorLyogYWNwaXNyYzpzdHJ1Y3RfZGVmcyAtLSBmb3IgYWNwaXNyYyBjb252ZXJzaW9uICovCisKIC8qCi0gKiBUaGUgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICBpcyB1c2VkIHRvIHBhc3MgQU1MIG9wZXJhbmRzIGZyb20gdGhlIGRpc3BhdGNoZXIKKyAqIFRoZSB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0IGlzIHVzZWQgdG8gcGFzcyBBTUwgb3BlcmFuZHMgZnJvbSB0aGUgZGlzcGF0Y2hlcgogICogdG8gdGhlIGludGVycHJldGVyLCBhbmQgdG8ga2VlcCB0cmFjayBvZiB0aGUgdmFyaW91cyBoYW5kbGVycyBzdWNoIGFzCi0gKiBhZGRyZXNzIHNwYWNlIGhhbmRsZXJzIGFuZCBub3RpZnkgaGFuZGxlcnMuICBUaGUgb2JqZWN0IGlzIGEgY29uc3RhbnQKKyAqIGFkZHJlc3Mgc3BhY2UgaGFuZGxlcnMgYW5kIG5vdGlmeSBoYW5kbGVycy4gVGhlIG9iamVjdCBpcyBhIGNvbnN0YW50CiAgKiBzaXplIGluIG9yZGVyIHRvIGFsbG93IGl0IHRvIGJlIGNhY2hlZCBhbmQgcmV1c2VkLgogICovCiAKQEAgLTYxLDE3ICs2MywyNSBAQAogLyoKICAqIENvbW1vbiBhcmVhIGZvciBhbGwgb2JqZWN0cy4KICAqCi0gKiBkYXRhX3R5cGUgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgZGVzY3JpcHRvcnMsIGFuZCBNVVNUCi0gKiBiZSB0aGUgZmlyc3QgYnl0ZSBpbiB0aGlzIHN0cnVjdHVyZS4KKyAqIGRlc2NyaXB0b3JfdHlwZSBpcyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCBkZXNjcmlwdG9ycywgYW5kCisgKiBtdXN0IGJlIGluIHRoZSBzYW1lIHBsYWNlIGFjcm9zcyBhbGwgZGVzY3JpcHRvcnMKKyAqCisgKiBOb3RlOiBUaGUgZGVzY3JpcHRvcl90eXBlIGFuZCBUeXBlIGZpZWxkcyBtdXN0IGFwcGVhciBpbiB0aGUgaWRlbnRpY2FsCisgKiBwb3NpdGlvbiBpbiBib3RoIHRoZSBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSBhbmQgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdAorICogc3RydWN0dXJlcy4KICAqLwotI2RlZmluZSBBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSICAgLyogU0laRS9BTElHTk1FTlQ6IDMyIGJpdHMsIG9uZSBwdHIgcGx1cyB0cmFpbGluZyA4LWJpdCBmbGFnICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOyAgICAgICAgIC8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qIGFjcGlfb2JqZWN0X3R5cGUgKi9cCi0JdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZV9jb3VudDsgICAgLyogRm9yIG9iamVjdCBkZWxldGlvbiBtYW5hZ2VtZW50ICovXAotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqbmV4dF9vYmplY3Q7ICAgICAgIC8qIE9iamVjdHMgbGlua2VkIHRvIHBhcmVudCBOUyBub2RlICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyNkZWZpbmUgQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiBcCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqbmV4dF9vYmplY3Q7ICAgICAgIC8qIE9iamVjdHMgbGlua2VkIHRvIHBhcmVudCBOUyBub2RlICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOyAgICAvKiBUbyBkaWZmZXJlbnRpYXRlIHZhcmlvdXMgaW50ZXJuYWwgb2JqcyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgLyogYWNwaV9vYmplY3RfdHlwZSAqL1wKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZV9jb3VudDsgICAgLyogRm9yIG9iamVjdCBkZWxldGlvbiBtYW5hZ2VtZW50ICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisJLyoKKwkgKiBOb3RlOiBUaGVyZSBhcmUgMyBieXRlcyBhdmFpbGFibGUgaGVyZSBiZWZvcmUgdGhlCisJICogbmV4dCBuYXR1cmFsIGFsaWdubWVudCBib3VuZGFyeSAoZm9yIGJvdGggMzIvNjQgY2FzZXMpCisJICovCiAKLS8qIFZhbHVlcyBmb3IgZmxhZyBieXRlIGFib3ZlICovCisvKiBWYWx1ZXMgZm9yIEZsYWcgYnl0ZSBhYm92ZSAqLwogCiAjZGVmaW5lIEFPUE9CSl9BTUxfQ09OU1RBTlQgICAgICAgICAweDAxCiAjZGVmaW5lIEFPUE9CSl9TVEFUSUNfUE9JTlRFUiAgICAgICAweDAyCkBAIC03OSwzNiArODksNyBAQAogI2RlZmluZSBBT1BPQkpfT0JKRUNUX0lOSVRJQUxJWkVEICAgMHgwOAogI2RlZmluZSBBT1BPQkpfU0VUVVBfQ09NUExFVEUgICAgICAgMHgxMAogI2RlZmluZSBBT1BPQkpfU0lOR0xFX0RBVFVNICAgICAgICAgMHgyMAotCi0vKgotICogQ29tbW9uIGJpdGZpZWxkIGZvciB0aGUgZmllbGQgb2JqZWN0cwotICogIkZpZWxkIERhdHVtIiAgLS0gYSBkYXR1bSBmcm9tIHRoZSBhY3R1YWwgZmllbGQgb2JqZWN0Ci0gKiAiQnVmZmVyIERhdHVtIiAtLSBhIGRhdHVtIGZyb20gYSB1c2VyIGJ1ZmZlciwgcmVhZCBmcm9tIG9yIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGZpZWxkCi0gKi8KLSNkZWZpbmUgQUNQSV9DT01NT05fRklFTERfSU5GTyAgICAgIC8qIFNJWkUvQUxJR05NRU5UOiAyNCBiaXRzICsgdGhyZWUgMzItYml0IHZhbHVlcyAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZmxhZ3M7ICAgICAgICAvKiBBY2Nlc3MsIHVwZGF0ZSwgYW5kIGxvY2sgYml0cyAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlOyAgICAgICAgICAvKiBGcm9tIGFjY2Vzc19hcyBrZXl3b3JkICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfYnl0ZV93aWR0aDsgIC8qIFJlYWQvV3JpdGUgc2l6ZSBpbiBieXRlcyAqL1wKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X2xlbmd0aDsgICAgICAgICAvKiBMZW5ndGggb2YgZmllbGQgaW4gYml0cyAqL1wKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9ieXRlX29mZnNldDsgICAvKiBCeXRlIG9mZnNldCB3aXRoaW4gY29udGFpbmluZyBvYmplY3QgKi9cCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2ZpZWxkX2JpdF9vZmZzZXQ7LyogQml0IG9mZnNldCB3aXRoaW4gZmlyc3QgZmllbGQgZGF0dW0gKDAtNjMpICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfYml0X3dpZHRoOyAgIC8qIFJlYWQvV3JpdGUgc2l6ZSBpbiBiaXRzICg4LTY0KSAqL1wKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7ICAgICAgICAgICAgICAvKiBWYWx1ZSB0byBzdG9yZSBpbnRvIHRoZSBCYW5rIG9yIEluZGV4IHJlZ2lzdGVyICovXAotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgICAgICAgICAqbm9kZTsJLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCi0KLS8qCi0gKiBGaWVsZHMgY29tbW9uIHRvIGJvdGggU3RyaW5ncyBhbmQgQnVmZmVycwotICovCi0jZGVmaW5lIEFDUElfQ09NTU9OX0JVRkZFUl9JTkZPIFwKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOwotCi0vKgotICogQ29tbW9uIGZpZWxkcyBmb3Igb2JqZWN0cyB0aGF0IHN1cHBvcnQgQVNMIG5vdGlmaWNhdGlvbnMKLSAqLwotI2RlZmluZSBBQ1BJX0NPTU1PTl9OT1RJRllfSU5GTyBcCi0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICpzeXN0ZW1fbm90aWZ5OyAgICAgLyogSGFuZGxlciBmb3Igc3lzdGVtIG5vdGlmaWVzICovXAotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqZGV2aWNlX25vdGlmeTsgICAgIC8qIEhhbmRsZXIgZm9yIGRyaXZlciBub3RpZmllcyAqL1wKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAgICAgKmhhbmRsZXI7CS8qIEhhbmRsZXIgZm9yIEFkZHJlc3Mgc3BhY2UgKi8KKyNkZWZpbmUgQU9QT0JKX0lOVkFMSUQgICAgICAgICAgICAgIDB4NDAJLyogVXNlZCBpZiBob3N0IE9TIHdvbid0IGFsbG93IGFuIG9wX3JlZ2lvbiBhZGRyZXNzICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMjUsMjUgKzEwNiwzMSBAQAogCiAvKgogICogTm90ZTogVGhlIFN0cmluZyBhbmQgQnVmZmVyIG9iamVjdCBtdXN0IGJlIGlkZW50aWNhbCB0aHJvdWdoIHRoZSBQb2ludGVyCi0gKiBlbGVtZW50LiAgVGhlcmUgaXMgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhpcy4KKyAqIGFuZCBsZW5ndGggZWxlbWVudHMuICBUaGVyZSBpcyBjb2RlIHRoYXQgZGVwZW5kcyBvbiB0aGlzLgorICoKKyAqIEZpZWxkcyBjb21tb24gdG8gYm90aCBTdHJpbmdzIGFuZCBCdWZmZXJzCiAgKi8KKyNkZWZpbmUgQUNQSV9DT01NT05fQlVGRkVSX0lORk8oX3R5cGUpIFwKKwlfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2ludGVyOyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisKIHN0cnVjdCBhY3BpX29iamVjdF9zdHJpbmcgewkvKiBOdWxsIHRlcm1pbmF0ZWQsIEFTQ0lJIGNoYXJhY3RlcnMgb25seSAqLwotCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgQUNQSV9DT01NT05fQlVGRkVSX0lORk8gY2hhciAqcG9pbnRlcjsJLyogU3RyaW5nIGluIEFNTCBzdHJlYW0gb3IgYWxsb2NhdGVkIHN0cmluZyAqLworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgQUNQSV9DT01NT05fQlVGRkVSX0lORk8oY2hhcikJLyogU3RyaW5nIGluIEFNTCBzdHJlYW0gb3IgYWxsb2NhdGVkIHN0cmluZyAqLwogfTsKIAogc3RydWN0IGFjcGlfb2JqZWN0X2J1ZmZlciB7Ci0JQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiBBQ1BJX0NPTU1PTl9CVUZGRVJfSU5GTyB1OCAqIHBvaW50ZXI7CS8qIEJ1ZmZlciBpbiBBTUwgc3RyZWFtIG9yIGFsbG9jYXRlZCBidWZmZXIgKi8KLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsJLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCi0JdTggKmFtbF9zdGFydDsKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIEFDUElfQ09NTU9OX0JVRkZFUl9JTkZPKHU4KQkvKiBCdWZmZXIgaW4gQU1MIHN0cmVhbSBvciBhbGxvY2F0ZWQgYnVmZmVyICovCiAJdTMyIGFtbF9sZW5ndGg7CisJdTggKmFtbF9zdGFydDsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsJLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfcGFja2FnZSB7Ci0JQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1MzIgY291bnQ7CS8qICMgb2YgZWxlbWVudHMgaW4gcGFja2FnZSAqLwotCXUzMiBhbWxfbGVuZ3RoOwotCXU4ICphbWxfc3RhcnQ7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CS8qIExpbmsgYmFjayB0byBwYXJlbnQgbm9kZSAqLworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CS8qIExpbmsgYmFjayB0byBwYXJlbnQgbm9kZSAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50czsJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gYWNwaV9vYmplY3RzICovCisJdTggKmFtbF9zdGFydDsKKwl1MzIgYW1sX2xlbmd0aDsKKwl1MzIgY291bnQ7CQkvKiAjIG9mIGVsZW1lbnRzIGluIHBhY2thZ2UgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE1NiwyMyArMTQzLDYgQEAKIAlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHZvaWQgKnNlbWFwaG9yZTsKIH07CiAKLSNkZWZpbmUgQUNQSV9JTkZJTklURV9DT05DVVJSRU5DWSAgIDB4RkYKLQotdHlwZWRlZgotYWNwaV9zdGF0dXMoKkFDUElfSU5URVJOQUxfTUVUSE9EKSAoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqIHdhbGtfc3RhdGUpOwotCi1zdHJ1Y3QgYWNwaV9vYmplY3RfbWV0aG9kIHsKLQlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHU4IG1ldGhvZF9mbGFnczsKLQl1OCBwYXJhbV9jb3VudDsKLQl1MzIgYW1sX2xlbmd0aDsKLQl2b2lkICpzZW1hcGhvcmU7Ci0JdTggKmFtbF9zdGFydDsKLQlBQ1BJX0lOVEVSTkFMX01FVEhPRCBpbXBsZW1lbnRhdGlvbjsKLQl1OCBjb25jdXJyZW5jeTsKLQl1OCB0aHJlYWRfY291bnQ7Ci0JYWNwaV9vd25lcl9pZCBvd25lcl9pZDsKLX07Ci0KIHN0cnVjdCBhY3BpX29iamVjdF9tdXRleCB7CiAJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBzeW5jX2xldmVsOwkvKiAwLTE1LCBzcGVjaWZpZWQgaW4gTXV0ZXgoKSBjYWxsICovCiAJdTE2IGFjcXVpc2l0aW9uX2RlcHRoOwkvKiBBbGxvdyBtdWx0aXBsZSBBY3F1aXJlcywgc2FtZSB0aHJlYWQgKi8KQEAgLTE4NiwxMSArMTU2LDIzIEBACiAKIHN0cnVjdCBhY3BpX29iamVjdF9yZWdpb24gewogCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggc3BhY2VfaWQ7Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaGFuZGxlcjsJLyogSGFuZGxlciBmb3IgcmVnaW9uIGFjY2VzcyAqLwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwkvKiBDb250YWluaW5nIG5hbWVzcGFjZSBub2RlICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaGFuZGxlcjsJLyogSGFuZGxlciBmb3IgcmVnaW9uIGFjY2VzcyAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5leHQ7Ci0JdTMyIGxlbmd0aDsKIAlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzczsKKwl1MzIgbGVuZ3RoOworfTsKKworc3RydWN0IGFjcGlfb2JqZWN0X21ldGhvZCB7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBtZXRob2RfZmxhZ3M7CisJdTggcGFyYW1fY291bnQ7CisJdTggY29uY3VycmVuY3k7CisJdm9pZCAqc2VtYXBob3JlOworCXU4ICphbWxfc3RhcnQ7CisJQUNQSV9JTlRFUk5BTF9NRVRIT0QgaW1wbGVtZW50YXRpb247CisJdTMyIGFtbF9sZW5ndGg7CisJdTggdGhyZWFkX2NvdW50OworCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xOTksNiArMTgxLDE0IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKgorICogQ29tbW9uIGZpZWxkcyBmb3Igb2JqZWN0cyB0aGF0IHN1cHBvcnQgQVNMIG5vdGlmaWNhdGlvbnMKKyAqLworI2RlZmluZSBBQ1BJX0NPTU1PTl9OT1RJRllfSU5GTyBcCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqc3lzdGVtX25vdGlmeTsgICAgIC8qIEhhbmRsZXIgZm9yIHN5c3RlbSBub3RpZmllcyAqL1wKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpkZXZpY2Vfbm90aWZ5OyAgICAgLyogSGFuZGxlciBmb3IgZHJpdmVyIG5vdGlmaWVzICovXAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKmhhbmRsZXI7CS8qIEhhbmRsZXIgZm9yIEFkZHJlc3Mgc3BhY2UgKi8KKwogc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9jb21tb24gewkvKiBDT01NT04gTk9USUZZIGZvciBQT1dFUiwgUFJPQ0VTU09SLCBERVZJQ0UsIGFuZCBUSEVSTUFMICovCiBBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIEFDUElfQ09NTU9OX05PVElGWV9JTkZPfTsKIApAQCAtMjEzLDkgKzIwMyw5IEBACiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfcHJvY2Vzc29yIHsKLQlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIEFDUElfQ09NTU9OX05PVElGWV9JTkZPIHUzMiBwcm9jX2lkOwotCXUzMiBsZW5ndGg7Ci0JYWNwaV9pb19hZGRyZXNzIGFkZHJlc3M7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBwcm9jX2lkOworCXU4IGxlbmd0aDsKKwkgQUNQSV9DT01NT05fTk9USUZZX0lORk8gYWNwaV9pb19hZGRyZXNzIGFkZHJlc3M7CiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfdGhlcm1hbF96b25lIHsKQEAgLTIyNyw5ICsyMTcsMjQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qCisgKiBDb21tb24gYml0ZmllbGQgZm9yIHRoZSBmaWVsZCBvYmplY3RzCisgKiAiRmllbGQgRGF0dW0iICAtLSBhIGRhdHVtIGZyb20gdGhlIGFjdHVhbCBmaWVsZCBvYmplY3QKKyAqICJCdWZmZXIgRGF0dW0iIC0tIGEgZGF0dW0gZnJvbSBhIHVzZXIgYnVmZmVyLCByZWFkIGZyb20gb3IgdG8gYmUgd3JpdHRlbiB0byB0aGUgZmllbGQKKyAqLworI2RlZmluZSBBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2ZsYWdzOyAgICAgICAgLyogQWNjZXNzLCB1cGRhdGUsIGFuZCBsb2NrIGJpdHMgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU7ICAgICAgICAgIC8qIEZyb20gYWNjZXNzX2FzIGtleXdvcmQgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfYnl0ZV93aWR0aDsgIC8qIFJlYWQvV3JpdGUgc2l6ZSBpbiBieXRlcyAqL1wKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlOyAgICAgICAgICAgICAgLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X2xlbmd0aDsgICAgICAgICAvKiBMZW5ndGggb2YgZmllbGQgaW4gYml0cyAqL1wKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfYnl0ZV9vZmZzZXQ7ICAgLyogQnl0ZSBvZmZzZXQgd2l0aGluIGNvbnRhaW5pbmcgb2JqZWN0ICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7ICAgICAgICAgICAgICAvKiBWYWx1ZSB0byBzdG9yZSBpbnRvIHRoZSBCYW5rIG9yIEluZGV4IHJlZ2lzdGVyICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZmllbGRfYml0X29mZnNldDsvKiBCaXQgb2Zmc2V0IHdpdGhpbiBmaXJzdCBmaWVsZCBkYXR1bSAoMC02MykgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfYml0X3dpZHRoOwkvKiBSZWFkL1dyaXRlIHNpemUgaW4gYml0cyAoOC02NCkgKi8KKwogc3RydWN0IGFjcGlfb2JqZWN0X2ZpZWxkX2NvbW1vbiB7CS8qIENPTU1PTiBGSUVMRCAoZm9yIEJVRkZFUiwgUkVHSU9OLCBCQU5LLCBhbmQgSU5ERVggZmllbGRzKSAqLwotCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgQUNQSV9DT01NT05fRklFTERfSU5GTyB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqOwkvKiBDb250YWluaW5nIE9wZXJhdGlvbiBSZWdpb24gb2JqZWN0ICovCi0JLyogKFJFR0lPTi9CQU5LIGZpZWxkcyBvbmx5KSAqLworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgQUNQSV9DT01NT05fRklFTERfSU5GTyB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqOwkvKiBQYXJlbnQgT3BlcmF0aW9uIFJlZ2lvbiBvYmplY3QgKFJFR0lPTi9CQU5LIGZpZWxkcyBvbmx5KSAqLwogfTsKIAogc3RydWN0IGFjcGlfb2JqZWN0X3JlZ2lvbl9maWVsZCB7CkBAIC0yNDQsNyArMjQ5LDcgQEAKIHN0cnVjdCBhY3BpX29iamVjdF9pbmRleF9maWVsZCB7CiAJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiBBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPCiAJICAgIC8qCi0JICAgICAqIE5vICJyZWdpb25fb2JqIiBwb2ludGVyIG5lZWRlZCBzaW5jZSB0aGUgSW5kZXggYW5kIERhdGEgcmVnaXN0ZXJzCisJICAgICAqIE5vICJSZWdpb25PYmoiIHBvaW50ZXIgbmVlZGVkIHNpbmNlIHRoZSBJbmRleCBhbmQgRGF0YSByZWdpc3RlcnMKIAkgICAgICogYXJlIGVhY2ggZmllbGQgZGVmaW5pdGlvbnMgdW50byB0aGVtc2VsdmVzLgogCSAgICAgKi8KIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICppbmRleF9vYmo7CS8qIEluZGV4IHJlZ2lzdGVyICovCkBAIC0yNjksMTMgKzI3NCw5IEBACiAJdm9pZCAqY29udGV4dDsKIH07CiAKLS8qIEZsYWdzIGZvciBhZGRyZXNzIGhhbmRsZXIgKi8KLQotI2RlZmluZSBBQ1BJX0FERFJfSEFORExFUl9ERUZBVUxUX0lOU1RBTExFRCAgMHgxCi0KIHN0cnVjdCBhY3BpX29iamVjdF9hZGRyX2hhbmRsZXIgewogCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggc3BhY2VfaWQ7Ci0JdTE2IGhmbGFnczsKKwl1OCBoYW5kbGVyX2ZsYWdzOwogCWFjcGlfYWRyX3NwYWNlX2hhbmRsZXIgaGFuZGxlcjsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsJLyogUGFyZW50IGRldmljZSAqLwogCXZvaWQgKmNvbnRleHQ7CkBAIC0yODQsNiArMjg1LDEwIEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV4dDsKIH07CiAKKy8qIEZsYWdzIGZvciBhZGRyZXNzIGhhbmRsZXIgKGhhbmRsZXJfZmxhZ3MpICovCisKKyNkZWZpbmUgQUNQSV9BRERSX0hBTkRMRVJfREVGQVVMVF9JTlNUQUxMRUQgIDB4MDEKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNwZWNpYWwgaW50ZXJuYWwgb2JqZWN0cwpAQCAtMjk3LDEwICszMDIsMTAgQEAKIHN0cnVjdCBhY3BpX29iamVjdF9yZWZlcmVuY2UgewogCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggdGFyZ2V0X3R5cGU7CS8qIFVzZWQgZm9yIGluZGV4X29wICovCiAJdTE2IG9wY29kZTsKLQl1MzIgb2Zmc2V0OwkJLyogVXNlZCBmb3IgYXJnX29wLCBsb2NhbF9vcCwgYW5kIGluZGV4X29wICovCi0Jdm9pZCAqb2JqZWN0OwkJLyogbmFtZV9vcD0+SEFORExFIHRvIG9iaiwgaW5kZXhfb3A9PnVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICovCisJdm9pZCAqb2JqZWN0OwkJLyogbmFtZV9vcD0+SEFORExFIHRvIG9iaiwgaW5kZXhfb3A9PnVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKi8KIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqd2hlcmU7CisJdTMyIG9mZnNldDsJCS8qIFVzZWQgZm9yIGFyZ19vcCwgbG9jYWxfb3AsIGFuZCBpbmRleF9vcCAqLwogfTsKIAogLyoKQEAgLTMxMSwxMiArMzE2LDEwIEBACiAgKiBDdXJyZW50bHk6IFJlZ2lvbiBhbmQgZmllbGRfdW5pdCB0eXBlcwogICovCiBzdHJ1Y3QgYWNwaV9vYmplY3RfZXh0cmEgewotCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggYnl0ZV9maWxsMTsKLQl1MTYgd29yZF9maWxsMTsKLQl1MzIgYW1sX2xlbmd0aDsKLQl1OCAqYW1sX3N0YXJ0OwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICptZXRob2RfUkVHOwkvKiBfUkVHIG1ldGhvZCBmb3IgdGhpcyByZWdpb24gKGlmIGFueSkgKi8KKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICptZXRob2RfUkVHOwkvKiBfUkVHIG1ldGhvZCBmb3IgdGhpcyByZWdpb24gKGlmIGFueSkgKi8KIAl2b2lkICpyZWdpb25fY29udGV4dDsJLyogUmVnaW9uLXNwZWNpZmljIGRhdGEgKi8KKwl1OCAqYW1sX3N0YXJ0OworCXUzMiBhbWxfbGVuZ3RoOwogfTsKIAogLyogQWRkaXRpb25hbCBkYXRhIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIG5hbWVzcGFjZSBub2RlcyAqLwpAQCAtMzkxLDggKzM5NCwxMyBAQAogI2RlZmluZSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCAgICAgICAgICAgIDB4MEYKICNkZWZpbmUgQUNQSV9ERVNDX1RZUEVfTUFYICAgICAgICAgICAgICAweDBGCiAKK3N0cnVjdCBhY3BpX2NvbW1vbl9kZXNjcmlwdG9yIHsKKwl2b2lkICpjb21tb25fcG9pbnRlcjsKKwl1OCBkZXNjcmlwdG9yX3R5cGU7CS8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovCit9OworCiB1bmlvbiBhY3BpX2Rlc2NyaXB0b3IgewotCXU4IGRlc2NyaXB0b3JfaWQ7CS8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovCisJc3RydWN0IGFjcGlfY29tbW9uX2Rlc2NyaXB0b3IgY29tbW9uOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3Qgb2JqZWN0OwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIG5vZGU7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3Qgb3A7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNvcGNvZGUuaCBiL2luY2x1ZGUvYWNwaS9hY29wY29kZS5oCmluZGV4IGU2ZDc4YmQuLjc2NTlhNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY29wY29kZS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY29wY29kZS5oCkBAIC05NCw3ICs5NCw3IEBACiAjZGVmaW5lIEFSR1BfQ09OQ0FUX1JFU19PUCAgICAgICAgICAgICAgQVJHUF9MSVNUMyAoQVJHUF9URVJNQVJHLCAgICBBUkdQX1RFUk1BUkcsICAgICAgIEFSR1BfVEFSR0VUKQogI2RlZmluZSBBUkdQX0NPTkRfUkVGX09GX09QICAgICAgICAgICAgIEFSR1BfTElTVDIgKEFSR1BfU1VQRVJOQU1FLCAgQVJHUF9TVVBFUk5BTUUpCiAjZGVmaW5lIEFSR1BfQ09OVElOVUVfT1AgICAgICAgICAgICAgICAgQVJHX05PTkUKLSNkZWZpbmUgQVJHUF9DT1BZX09QICAgICAgICAgICAgICAgICAgICBBUkdQX0xJU1QyIChBUkdQX1NVUEVSTkFNRSwgIEFSR1BfU0lNUExFTkFNRSkKKyNkZWZpbmUgQVJHUF9DT1BZX09QICAgICAgICAgICAgICAgICAgICBBUkdQX0xJU1QyIChBUkdQX1RFUk1BUkcsICAgIEFSR1BfU0lNUExFTkFNRSkKICNkZWZpbmUgQVJHUF9DUkVBVEVfQklUX0ZJRUxEX09QICAgICAgICBBUkdQX0xJU1QzIChBUkdQX1RFUk1BUkcsICAgIEFSR1BfVEVSTUFSRywgICAgICAgQVJHUF9OQU1FKQogI2RlZmluZSBBUkdQX0NSRUFURV9CWVRFX0ZJRUxEX09QICAgICAgIEFSR1BfTElTVDMgKEFSR1BfVEVSTUFSRywgICAgQVJHUF9URVJNQVJHLCAgICAgICBBUkdQX05BTUUpCiAjZGVmaW5lIEFSR1BfQ1JFQVRFX0RXT1JEX0ZJRUxEX09QICAgICAgQVJHUF9MSVNUMyAoQVJHUF9URVJNQVJHLCAgICBBUkdQX1RFUk1BUkcsICAgICAgIEFSR1BfTkFNRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKaW5kZXggNzc4NWQ0OC4uOGQ1MDM5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKQEAgLTUwLDcgKzUwLDcgQEAKICAqIGNvbXBvbmVudCBiYXNpcyBhbmQgYSBwZXItZXhjZXB0aW9uLXR5cGUgYmFzaXMuCiAgKi8KIAotLyogQ29tcG9uZW50IElEcyBhcmUgdXNlZCBpbiB0aGUgZ2xvYmFsICJkZWJ1Z19sYXllciIgKi8KKy8qIENvbXBvbmVudCBJRHMgYXJlIHVzZWQgaW4gdGhlIGdsb2JhbCAiRGVidWdMYXllciIgKi8KIAogI2RlZmluZSBBQ1BJX1VUSUxJVElFUyAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBQ1BJX0hBUkRXQVJFICAgICAgICAgICAgICAgMHgwMDAwMDAwMgpAQCAtMTIxLDcgKzEyMSw3IEBACiAjZGVmaW5lIEFDUElfTFZfSU5URVJSVVBUUyAgICAgICAgICAweDA4MDAwMDAwCiAjZGVmaW5lIEFDUElfTFZfVkVSQk9TSVRZMyAgICAgICAgICAweDBGMDAwMDAwIHwgQUNQSV9MVl9WRVJCT1NJVFkyCiAKLS8qIEV4Y2VwdGlvbmFsbHkgdmVyYm9zZSBvdXRwdXQgLS0gYWxzbyB1c2VkIGluIHRoZSBnbG9iYWwgImRlYnVnX2xldmVsIiAqLworLyogRXhjZXB0aW9uYWxseSB2ZXJib3NlIG91dHB1dCAtLSBhbHNvIHVzZWQgaW4gdGhlIGdsb2JhbCAiRGVidWdMZXZlbCIgICovCiAKICNkZWZpbmUgQUNQSV9MVl9BTUxfRElTQVNTRU1CTEUgICAgIDB4MTAwMDAwMDAKICNkZWZpbmUgQUNQSV9MVl9WRVJCT1NFX0lORk8gICAgICAgIDB4MjAwMDAwMDAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICovCiAjZGVmaW5lIEFDUElfREVCVUdfTEVWRUwoZGwpICAgICAgICAodTMyKSBkbCxBQ1BJX0RFQlVHX1BBUkFNRVRFUlMKIAotLyogRXhjZXB0aW9uIGxldmVsIC0tIHVzZWQgaW4gdGhlIGdsb2JhbCAiZGVidWdfbGV2ZWwiICovCisvKiBFeGNlcHRpb24gbGV2ZWwgLS0gdXNlZCBpbiB0aGUgZ2xvYmFsICJEZWJ1Z0xldmVsIiAqLwogCiAjZGVmaW5lIEFDUElfREJfSU5JVCAgICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0lOSVQpCiAjZGVmaW5lIEFDUElfREJfREVCVUdfT0JKRUNUICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0RFQlVHX09CSkVDVCkKQEAgLTE0NCwxMyArMTQ0LDEzIEBACiAKIC8qCiAgKiBUaGVzZSB0d28gbGV2ZWxzIGFyZSBlc3NlbnRpYWxseSBvYnNvbGV0ZSwgYWxsIGluc3RhbmNlcyBpbiB0aGUKLSAqIEFDUElDQSBjb3JlIGNvZGUgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IFJFUE9SVF9FUlJPUiBhbmQgUkVQT1JUX1dBUk5JTkcKKyAqIEFDUElDQSBjb3JlIGNvZGUgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IEFDUElfRVJST1IgYW5kIEFDUElfV0FSTklORwogICogKEtlcHQgaGVyZSBiZWNhdXNlIHNvbWUgZHJpdmVycyBtYXkgc3RpbGwgdXNlIHRoZW0pCiAgKi8KICNkZWZpbmUgQUNQSV9EQl9FUlJPUiAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfRVJST1IpCiAjZGVmaW5lIEFDUElfREJfV0FSTiAgICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1dBUk4pCiAKLS8qIFRyYWNlIGxldmVsIC0tIGFsc28gdXNlZCBpbiB0aGUgZ2xvYmFsICJkZWJ1Z19sZXZlbCIgKi8KKy8qIFRyYWNlIGxldmVsIC0tIGFsc28gdXNlZCBpbiB0aGUgZ2xvYmFsICJEZWJ1Z0xldmVsIiAqLwogCiAjZGVmaW5lIEFDUElfREJfSU5JVF9OQU1FUyAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0lOSVRfTkFNRVMpCiAjZGVmaW5lIEFDUElfREJfVEhSRUFEUyAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1RIUkVBRFMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwYXJzZXIuaCBiL2luY2x1ZGUvYWNwaS9hY3BhcnNlci5oCmluZGV4IDVhMWZmNDguLjlkNDlkM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BhcnNlci5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BhcnNlci5oCkBAIC00Niw3ICs0Niw3IEBACiAKICNkZWZpbmUgT1BfSEFTX1JFVFVSTl9WQUxVRSAgICAgICAgICAgICAxCiAKLS8qIHZhcmlhYmxlICMgYXJndW1lbnRzICovCisvKiBWYXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLiBUaGlzIGZpZWxkIG11c3QgYmUgMzIgYml0cyAqLwogCiAjZGVmaW5lIEFDUElfVkFSX0FSR1MgICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UMzJfTUFYCiAKQEAgLTcxLDcgKzcxLDcgQEAKIC8qCiAgKiBwc3hmYWNlIC0gUGFyc2VyIGV4dGVybmFsIGludGVyZmFjZXMKICAqLwotYWNwaV9zdGF0dXMgYWNwaV9wc19leGVjdXRlX21ldGhvZChzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbyk7CithY3BpX3N0YXR1cyBhY3BpX3BzX2V4ZWN1dGVfbWV0aG9kKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pOwogCiAvKgogICogcHNhcmdzIC0gUGFyc2UgQU1MIG9wY29kZSBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKaW5kZXggNmRjYTNkNS4uNDNmOGMyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKQEAgLTU5LDcgKzU5LDcgQEAKIAogI2RlZmluZSBBQ1BJX0JVU19GSUxFX1JPT1QJImFjcGkiCiBleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICphY3BpX3Jvb3RfZGlyOwotZXh0ZXJuIEZBRFRfREVTQ1JJUFRPUiBhY3BpX2ZhZHQ7CitleHRlcm4gc3RydWN0IGZhZHRfZGVzY3JpcHRvciBhY3BpX2ZhZHQ7CiAKIGVudW0gYWNwaV9idXNfcmVtb3ZhbF90eXBlIHsKIAlBQ1BJX0JVU19SRU1PVkFMX05PUk1BTCA9IDAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCmluZGV4IDk3MGU5YTYuLjhmNDczYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCkBAIC01MCwxMiArNTAsMTYgQEAKICNpbmNsdWRlICJwbGF0Zm9ybS9hY2Vudi5oIgogI2luY2x1ZGUgImFjdHlwZXMuaCIKIAotLyogUHJpb3JpdGllcyBmb3IgYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uICovCisvKiBUeXBlcyBmb3IgYWNwaV9vc19leGVjdXRlICovCiAKLSNkZWZpbmUgT1NEX1BSSU9SSVRZX0dQRSAgICAgICAgICAgIDEKLSNkZWZpbmUgT1NEX1BSSU9SSVRZX0hJR0ggICAgICAgICAgIDIKLSNkZWZpbmUgT1NEX1BSSU9SSVRZX01FRCAgICAgICAgICAgIDMKLSNkZWZpbmUgT1NEX1BSSU9SSVRZX0xPICAgICAgICAgICAgIDQKK3R5cGVkZWYgZW51bSB7CisJT1NMX0dMT0JBTF9MT0NLX0hBTkRMRVIsCisJT1NMX05PVElGWV9IQU5ETEVSLAorCU9TTF9HUEVfSEFORExFUiwKKwlPU0xfREVCVUdHRVJfVEhSRUFELAorCU9TTF9FQ19QT0xMX0hBTkRMRVIsCisJT1NMX0VDX0JVUlNUX0hBTkRMRVIKK30gYWNwaV9leGVjdXRlX3R5cGU7CiAKICNkZWZpbmUgQUNQSV9OT19VTklUX0xJTUlUICAgICAgICAgICgodTMyKSAtMSkKICNkZWZpbmUgQUNQSV9NVVRFWF9TRU0gICAgICAgICAgICAgIDEKQEAgLTE2MSwxMyArMTY1LDExIEBACiAvKgogICogVGhyZWFkcyBhbmQgU2NoZWR1bGluZwogICovCi11MzIgYWNwaV9vc19nZXRfdGhyZWFkX2lkKHZvaWQpOworYWNwaV90aHJlYWRfaWQgYWNwaV9vc19nZXRfdGhyZWFkX2lkKHZvaWQpOwogCiBhY3BpX3N0YXR1cwotYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uKHUzMiBwcmlvcml0eSwKLQkJCSAgICBhY3BpX29zZF9leGVjX2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICpjb250ZXh0KTsKLQotdm9pZCBhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKHZvaWQgKmNvbnRleHQpOworYWNwaV9vc19leGVjdXRlKGFjcGlfZXhlY3V0ZV90eXBlIHR5cGUsCisJCWFjcGlfb3NkX2V4ZWNfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQpOwogCiB2b2lkIGFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUodm9pZCAqY29udGV4dCk7CiAKQEAgLTIxNCw2ICsyMTYsMTIgQEAKIC8qCiAgKiBNaXNjZWxsYW5lb3VzCiAgKi8KK2FjcGlfc3RhdHVzIGFjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlKGNoYXIgKmludGVyZmFjZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX29zX3ZhbGlkYXRlX2FkZHJlc3ModTggc3BhY2VfaWQsCisJCQkgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsIGFjcGlfc2l6ZSBsZW5ndGgpOworCiB1OCBhY3BpX29zX3JlYWRhYmxlKHZvaWQgKnBvaW50ZXIsIGFjcGlfc2l6ZSBsZW5ndGgpOwogCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKQEAgLTI1NSwxMSArMjYzLDQgQEAKIAogdm9pZCBhY3BpX29zX2Nsb3NlX2RpcmVjdG9yeSh2b2lkICpkaXJfaGFuZGxlKTsKIAotLyoKLSAqIERlYnVnCi0gKi8KLXZvaWQKLWFjcGlfb3NfZGJnX2Fzc2VydCh2b2lkICpmYWlsZWRfYXNzZXJ0aW9uLAotCQkgICB2b2lkICpmaWxlX25hbWUsIHUzMiBsaW5lX251bWJlciwgY2hhciAqbWVzc2FnZSk7Ci0KICNlbmRpZgkJCQkvKiBfX0FDUElPU1hGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCmluZGV4IDY2Y2YyZWMuLjA0OWU5YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKQEAgLTI2OCw3ICsyNjgsNyBAQAogICogUmVzb3VyY2UgaW50ZXJmYWNlcwogICovCiB0eXBlZGVmCi1hY3BpX3N0YXR1cygqQUNQSV9XQUxLX1JFU09VUkNFX0NBTExCQUNLKSAoc3RydWN0IGFjcGlfcmVzb3VyY2UgKiByZXNvdXJjZSwKK2FjcGlfc3RhdHVzKCphY3BpX3dhbGtfcmVzb3VyY2VfY2FsbGJhY2spIChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqIHJlc291cmNlLAogCQkJCQkgICB2b2lkICpjb250ZXh0KTsKIAogYWNwaV9zdGF0dXMKQEAgLTI5MCw3ICsyOTAsNyBAQAogYWNwaV9zdGF0dXMKIGFjcGlfd2Fsa19yZXNvdXJjZXMoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKIAkJICAgIGNoYXIgKm5hbWUsCi0JCSAgICBBQ1BJX1dBTEtfUkVTT1VSQ0VfQ0FMTEJBQ0sgdXNlcl9mdW5jdGlvbiwgdm9pZCAqY29udGV4dCk7CisJCSAgICBhY3BpX3dhbGtfcmVzb3VyY2VfY2FsbGJhY2sgdXNlcl9mdW5jdGlvbiwgdm9pZCAqY29udGV4dCk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX3NldF9jdXJyZW50X3Jlc291cmNlcyhhY3BpX2hhbmRsZSBkZXZpY2VfaGFuZGxlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcmVzcmMuaCBiL2luY2x1ZGUvYWNwaS9hY3Jlc3JjLmgKaW5kZXggZmEwMmU4MC4uYWQxMWZjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcmVzcmMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNyZXNyYy5oCkBAIC0xNjQsMjMgKzE2NCwyNiBAQAogLyoKICAqIHJzdXRpbHMKICAqLwotYWNwaV9zdGF0dXMKLWFjcGlfcnNfZ2V0X3BydF9tZXRob2RfZGF0YShhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcik7CiAKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9jcnNfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpOworYWNwaV9yc19nZXRfcHJ0X21ldGhvZF9kYXRhKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlLAorCQkJICAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcik7CiAKLSNpZmRlZglBQ1BJX0ZVVFVSRV9VU0FHRQogYWNwaV9zdGF0dXMKLWFjcGlfcnNfZ2V0X3Byc19tZXRob2RfZGF0YShhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcik7Ci0jZW5kaWYJCQkJLyogQUNQSV9GVVRVUkVfVVNBR0UgKi8KK2FjcGlfcnNfZ2V0X2Nyc19tZXRob2RfZGF0YShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpOworCithY3BpX3N0YXR1cworYWNwaV9yc19nZXRfcHJzX21ldGhvZF9kYXRhKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlLAorCQkJICAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcik7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX3JzX2dldF9tZXRob2RfZGF0YShhY3BpX2hhbmRsZSBoYW5kbGUsCiAJCQljaGFyICpwYXRoLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpOwogCiBhY3BpX3N0YXR1cwotYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKTsKK2FjcGlfcnNfc2V0X3Nyc19tZXRob2RfZGF0YShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpOwogCiAvKgogICogcnNjYWxjCkBAIC0xOTgsOCArMjAxLDkgQEAKIAkJCQkgICAgIGFjcGlfc2l6ZSAqIGJ1ZmZlcl9zaXplX25lZWRlZCk7CiAKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2NvbnZlcnRfYW1sX3RvX3Jlc291cmNlcyh1OCAqIGFtbF9idWZmZXIsCi0JCQkJIHUzMiBhbWxfYnVmZmVyX2xlbmd0aCwgdTggKiBvdXRwdXRfYnVmZmVyKTsKK2FjcGlfcnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2VzKHU4ICogYW1sLAorCQkJCSB1MzIgbGVuZ3RoLAorCQkJCSB1MzIgb2Zmc2V0LCB1OCByZXNvdXJjZV9pbmRleCwgdm9pZCAqKmNvbnRleHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9yc19jb252ZXJ0X3Jlc291cmNlc190b19hbWwoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2Fjc3RydWN0LmggYi9pbmNsdWRlL2FjcGkvYWNzdHJ1Y3QuaAppbmRleCBkOGMxYzJjLi41ZTgwOTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNzdHJ1Y3QuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNzdHJ1Y3QuaApAQCAtNDQsNiArNDQsOCBAQAogI2lmbmRlZiBfX0FDU1RSVUNUX0hfXwogI2RlZmluZSBfX0FDU1RSVUNUX0hfXwogCisvKiBhY3Bpc3JjOnN0cnVjdF9kZWZzIC0tIGZvciBhY3Bpc3JjIGNvbnZlcnNpb24gKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogVHJlZSB3YWxraW5nIHR5cGVkZWZzIGFuZCBzdHJ1Y3RzCkBAIC01MSw2NyArNTMsNzYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogV2FsayBzdGF0ZSAtIGN1cnJlbnQgc3RhdGUgb2YgYSBwYXJzZSB0cmVlIHdhbGsuICBVc2VkIGZvciBib3RoIGEgbGVpc3VyZWx5IHN0cm9sbCB0aHJvdWdoCi0gKiB0aGUgdHJlZSAoZm9yIHdoYXRldmVyIHJlYXNvbiksIGFuZCBmb3IgY29udHJvbCBtZXRob2QgZXhlY3V0aW9uLgorICogV2FsayBzdGF0ZSAtIGN1cnJlbnQgc3RhdGUgb2YgYSBwYXJzZSB0cmVlIHdhbGsuICBVc2VkIGZvciBib3RoIGEgbGVpc3VyZWx5CisgKiBzdHJvbGwgdGhyb3VnaCB0aGUgdHJlZSAoZm9yIHdoYXRldmVyIHJlYXNvbiksIGFuZCBmb3IgY29udHJvbCBtZXRob2QKKyAqIGV4ZWN1dGlvbi4KICAqLwogI2RlZmluZSBBQ1BJX05FWFRfT1BfRE9XTldBUkQgICAgICAgMQogI2RlZmluZSBBQ1BJX05FWFRfT1BfVVBXQVJEICAgICAgICAgMgogCisvKgorICogR3JvdXBzIG9mIGRlZmluaXRpb25zIGZvciB3YWxrX3R5cGUgdXNlZCBmb3IgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZgorICogd2Fsa2VycyAobmV2ZXIgc2ltdWx0YW5lb3VzbHkpIC0gZmxhZ3MgZm9yIGludGVycHJldGVyOgorICovCiAjZGVmaW5lIEFDUElfV0FMS19OT05fTUVUSE9EICAgICAgICAwCi0jZGVmaW5lIEFDUElfV0FMS19NRVRIT0QgICAgICAgICAgICAxCi0jZGVmaW5lIEFDUElfV0FMS19NRVRIT0RfUkVTVEFSVCAgICAyCi0jZGVmaW5lIEFDUElfV0FMS19DT05TVF9SRVFVSVJFRCAgICAzCi0jZGVmaW5lIEFDUElfV0FMS19DT05TVF9PUFRJT05BTCAgICA0CisjZGVmaW5lIEFDUElfV0FMS19NRVRIT0QgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfV0FMS19NRVRIT0RfUkVTVEFSVCAgICAweDAyCisKKy8qIEZsYWdzIGZvciBpX2FTTCBjb21waWxlciBvbmx5ICovCisKKyNkZWZpbmUgQUNQSV9XQUxLX0NPTlNUX1JFUVVJUkVEICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9XQUxLX0NPTlNUX09QVElPTkFMICAgIDB4MjAKIAogc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSB7Ci0JdTggZGF0YV90eXBlOwkJLyogVG8gZGlmZmVyZW50aWF0ZSB2YXJpb3VzIGludGVybmFsIG9ianMgTVVTVCBCRSBGSVJTVCEgKi8KKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICpuZXh0OwkvKiBOZXh0IHdhbGtfc3RhdGUgaW4gbGlzdCAqLworCXU4IGRlc2NyaXB0b3JfdHlwZTsJLyogVG8gZGlmZmVyZW50aWF0ZSB2YXJpb3VzIGludGVybmFsIG9ianMgKi8KIAl1OCB3YWxrX3R5cGU7Ci0JYWNwaV9vd25lcl9pZCBvd25lcl9pZDsJLyogT3duZXIgb2Ygb2JqZWN0cyBjcmVhdGVkIGR1cmluZyB0aGUgd2FsayAqLwotCXU4IGxhc3RfcHJlZGljYXRlOwkvKiBSZXN1bHQgb2YgbGFzdCBwcmVkaWNhdGUgKi8KLQl1OCBjdXJyZW50X3Jlc3VsdDsJLyogKi8KKwl1MTYgb3Bjb2RlOwkJLyogQ3VycmVudCBBTUwgb3Bjb2RlICovCiAJdTggbmV4dF9vcF9pbmZvOwkvKiBJbmZvIGFib3V0IG5leHRfb3AgKi8KIAl1OCBudW1fb3BlcmFuZHM7CS8qIFN0YWNrIHBvaW50ZXIgZm9yIE9wZXJhbmRzW10gYXJyYXkgKi8KKwlhY3BpX293bmVyX2lkIG93bmVyX2lkOwkvKiBPd25lciBvZiBvYmplY3RzIGNyZWF0ZWQgZHVyaW5nIHRoZSB3YWxrICovCisJdTggbGFzdF9wcmVkaWNhdGU7CS8qIFJlc3VsdCBvZiBsYXN0IHByZWRpY2F0ZSAqLworCXU4IGN1cnJlbnRfcmVzdWx0OwogCXU4IHJldHVybl91c2VkOwotCXUxNiBvcGNvZGU7CQkvKiBDdXJyZW50IEFNTCBvcGNvZGUgKi8KIAl1OCBzY29wZV9kZXB0aDsKIAl1OCBwYXNzX251bWJlcjsJCS8qIFBhcnNlIHBhc3MgZHVyaW5nIHRhYmxlIGxvYWQgKi8KLQl1MzIgYXJnX2NvdW50OwkJLyogcHVzaCBmb3IgZml4ZWQgb3IgdmFyIGFyZ3MgKi8KIAl1MzIgYW1sX29mZnNldDsKIAl1MzIgYXJnX3R5cGVzOwogCXUzMiBtZXRob2RfYnJlYWtwb2ludDsJLyogRm9yIHNpbmdsZSBzdGVwcGluZyAqLwogCXUzMiB1c2VyX2JyZWFrcG9pbnQ7CS8qIFVzZXIgQU1MIGJyZWFrcG9pbnQgKi8KIAl1MzIgcGFyc2VfZmxhZ3M7CisKKwlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSBwYXJzZXJfc3RhdGU7CS8qIEN1cnJlbnQgc3RhdGUgb2YgcGFyc2VyICovCiAJdTMyIHByZXZfYXJnX3R5cGVzOworCXUzMiBhcmdfY291bnQ7CQkvKiBwdXNoIGZvciBmaXhlZCBvciB2YXIgYXJncyAqLworCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgYXJndW1lbnRzW0FDUElfTUVUSE9EX05VTV9BUkdTXTsJLyogQ29udHJvbCBtZXRob2QgYXJndW1lbnRzICovCisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgbG9jYWxfdmFyaWFibGVzW0FDUElfTUVUSE9EX05VTV9MT0NBTFNdOwkvKiBDb250cm9sIG1ldGhvZCBsb2NhbHMgKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcGVyYW5kc1tBQ1BJX09CSl9OVU1fT1BFUkFORFMgKyAxXTsJLyogT3BlcmFuZHMgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlciAoKzEgZm9yIE5VTEwgdGVybWluYXRvcikgKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcGFyYW1zOwogCiAJdTggKmFtbF9sYXN0X3doaWxlOwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIGFyZ3VtZW50c1tBQ1BJX01FVEhPRF9OVU1fQVJHU107CS8qIENvbnRyb2wgbWV0aG9kIGFyZ3VtZW50cyAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipjYWxsZXJfcmV0dXJuX2Rlc2M7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpjb250cm9sX3N0YXRlOwkvKiBMaXN0IG9mIGNvbnRyb2wgc3RhdGVzIChuZXN0ZWQgSUZzKSAqLwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZWZlcnJlZF9ub2RlOwkvKiBVc2VkIHdoZW4gZXhlY3V0aW5nIGRlZmVycmVkIG9wY29kZXMgKi8KIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CS8qIEluZm8gZm9yIEdQRSAoX0x4eC9fRXh4IG1ldGhvZHMgb25seSAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmltcGxpY2l0X3JldHVybl9vYmo7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgbG9jYWxfdmFyaWFibGVzW0FDUElfTUVUSE9EX05VTV9MT0NBTFNdOwkvKiBDb250cm9sIG1ldGhvZCBsb2NhbHMgKi8KIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbWV0aG9kX2NhbGxfbm9kZTsJLyogQ2FsbGVkIG1ldGhvZCBOb2RlICovCiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm1ldGhvZF9jYWxsX29wOwkvKiBtZXRob2RfY2FsbCBPcCBpZiBydW5uaW5nIGEgbWV0aG9kICovCiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbWV0aG9kX2Rlc2M7CS8qIE1ldGhvZCBkZXNjcmlwdG9yIGlmIHJ1bm5pbmcgYSBtZXRob2QgKi8KIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbWV0aG9kX25vZGU7CS8qIE1ldGhvZCBub2RlIGlmIHJ1bm5pbmcgYSBtZXRob2QuICovCiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9wOwkvKiBDdXJyZW50IHBhcnNlciBvcCAqLwotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9wZXJhbmRzW0FDUElfT0JKX05VTV9PUEVSQU5EUyArIDFdOwkvKiBPcGVyYW5kcyBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyICgrMSBmb3IgTlVMTCB0ZXJtaW5hdG9yKSAqLwogCWNvbnN0IHN0cnVjdCBhY3BpX29wY29kZV9pbmZvICpvcF9pbmZvOwkvKiBJbmZvIG9uIGN1cnJlbnQgb3Bjb2RlICovCiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9yaWdpbjsJLyogU3RhcnQgb2Ygd2FsayBbT2Jzb2xldGVdICovCi0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnBhcmFtczsKLQlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSBwYXJzZXJfc3RhdGU7CS8qIEN1cnJlbnQgc3RhdGUgb2YgcGFyc2VyICovCiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVzdWx0X29iajsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnJlc3VsdHM7CS8qIFN0YWNrIG9mIGFjY3VtdWxhdGVkIHJlc3VsdHMgKi8KIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYzsJLyogUmV0dXJuIG9iamVjdCwgaWYgYW55ICovCiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpzY29wZV9pbmZvOwkvKiBTdGFjayBvZiBuZXN0ZWQgc2NvcGVzICovCi0KIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqcHJldl9vcDsJLyogTGFzdCBvcCB0aGF0IHdhcyBwcm9jZXNzZWQgKi8KIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqbmV4dF9vcDsJLyogbmV4dCBvcCB0byBiZSBwcm9jZXNzZWQgKi8KKwlzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKnRocmVhZDsKIAlhY3BpX3BhcnNlX2Rvd253YXJkcyBkZXNjZW5kaW5nX2NhbGxiYWNrOwogCWFjcGlfcGFyc2VfdXB3YXJkcyBhc2NlbmRpbmdfY2FsbGJhY2s7Ci0Jc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICp0aHJlYWQ7Ci0Jc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqbmV4dDsJLyogTmV4dCB3YWxrX3N0YXRlIGluIGxpc3QgKi8KIH07CiAKIC8qIEluZm8gdXNlZCBieSBhY3BpX3BzX2luaXRfb2JqZWN0cyAqLwpAQCAtMTMxLDMyICsxNDIsNiBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgKnRhYmxlX2Rlc2M7CiB9OwogCi0vKiBJbmZvIHVzZWQgYnkgYWNwaV9uc19pbml0aWFsaXplX2RldmljZXMgKi8KLQotc3RydWN0IGFjcGlfZGV2aWNlX3dhbGtfaW5mbyB7Ci0JdTE2IGRldmljZV9jb3VudDsKLQl1MTYgbnVtX1NUQTsKLQl1MTYgbnVtX0lOSTsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOwotfTsKLQotLyogVEJEOiBbUmVzdHJ1Y3R1cmVdIE1lcmdlIHdpdGggc3RydWN0IGFib3ZlICovCi0KLXN0cnVjdCBhY3BpX3dhbGtfaW5mbyB7Ci0JdTMyIGRlYnVnX2xldmVsOwotCXUzMiBjb3VudDsKLQlhY3BpX293bmVyX2lkIG93bmVyX2lkOwotCXU4IGRpc3BsYXlfdHlwZTsKLX07Ci0KLS8qIERpc3BsYXkgVHlwZXMgKi8KLQotI2RlZmluZSBBQ1BJX0RJU1BMQVlfU1VNTUFSWSAgICAodTgpIDAKLSNkZWZpbmUgQUNQSV9ESVNQTEFZX09CSkVDVFMgICAgKHU4KSAxCi0jZGVmaW5lIEFDUElfRElTUExBWV9NQVNLICAgICAgICh1OCkgMQotCi0jZGVmaW5lIEFDUElfRElTUExBWV9TSE9SVCAgICAgICh1OCkgMgotCiBzdHJ1Y3QgYWNwaV9nZXRfZGV2aWNlc19pbmZvIHsKIAlhY3BpX3dhbGtfY2FsbGJhY2sgdXNlcl9mdW5jdGlvbjsKIAl2b2lkICpjb250ZXh0OwpAQCAtMTg5LDE2ICsxNzQsMjEgQEAKIAl9IG1pZDsKIH07CiAKLS8qIEludGVybmFsIG1ldGhvZCBwYXJhbWV0ZXIgbGlzdCAqLwotCi1zdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyB7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CisvKgorICogU3RydWN0dXJlIHVzZWQgdG8gcGFzcyBvYmplY3QgZXZhbHVhdGlvbiBwYXJhbWV0ZXJzLgorICogUHVycG9zZSBpcyB0byByZWR1Y2UgQ1BVIHN0YWNrIHVzZS4KKyAqLworc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyB7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnByZWZpeF9ub2RlOworCWNoYXIgKnBhdGhuYW1lOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipwYXJhbWV0ZXJzOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpyZXNvbHZlZF9ub2RlOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3Q7CiAJdTggcGFzc19udW1iZXI7CiAJdTggcGFyYW1ldGVyX3R5cGU7CiAJdTggcmV0dXJuX29iamVjdF90eXBlOworCXU4IGZsYWdzOwogfTsKIAogLyogVHlwZXMgZm9yIHBhcmFtZXRlcl90eXBlIGFib3ZlICovCkBAIC0yMDYsNCArMTk2LDM1IEBACiAjZGVmaW5lIEFDUElfUEFSQU1fQVJHUyAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBBQ1BJX1BBUkFNX0dQRSAgICAgICAgICAgICAgICAgIDEKIAorLyogVmFsdWVzIGZvciBGbGFncyBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfSUdOT1JFX1JFVFVSTl9WQUxVRSAgICAgICAgMQorCisvKiBJbmZvIHVzZWQgYnkgYWNwaV9uc19pbml0aWFsaXplX2RldmljZXMgKi8KKworc3RydWN0IGFjcGlfZGV2aWNlX3dhbGtfaW5mbyB7CisJdTE2IGRldmljZV9jb3VudDsKKwl1MTYgbnVtX1NUQTsKKwl1MTYgbnVtX0lOSTsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOworCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmV2YWx1YXRlX2luZm87Cit9OworCisvKiBUQkQ6IFtSZXN0cnVjdHVyZV0gTWVyZ2Ugd2l0aCBzdHJ1Y3QgYWJvdmUgKi8KKworc3RydWN0IGFjcGlfd2Fsa19pbmZvIHsKKwl1MzIgZGVidWdfbGV2ZWw7CisJdTMyIGNvdW50OworCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CisJdTggZGlzcGxheV90eXBlOworfTsKKworLyogRGlzcGxheSBUeXBlcyAqLworCisjZGVmaW5lIEFDUElfRElTUExBWV9TVU1NQVJZICAgICAgICAodTgpIDAKKyNkZWZpbmUgQUNQSV9ESVNQTEFZX09CSkVDVFMgICAgICAgICh1OCkgMQorI2RlZmluZSBBQ1BJX0RJU1BMQVlfTUFTSyAgICAgICAgICAgKHU4KSAxCisKKyNkZWZpbmUgQUNQSV9ESVNQTEFZX1NIT1JUICAgICAgICAgICh1OCkgMgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RhYmxlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdGFibGVzLmgKaW5kZXggMzBhNDc1NC4uNGRiYWYwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGFibGVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGFibGVzLmgKQEAgLTEzNiw3ICsxMzYsMTEgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX3RiX3ZlcmlmeV90YWJsZV9jaGVja3N1bShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX2hlYWRlcik7CiAKLXU4IGFjcGlfdGJfZ2VuZXJhdGVfY2hlY2tzdW0odm9pZCAqYnVmZmVyLCB1MzIgbGVuZ3RoKTsKK3U4IGFjcGlfdGJfc3VtX3RhYmxlKHZvaWQgKmJ1ZmZlciwgdTMyIGxlbmd0aCk7CisKK3U4IGFjcGlfdGJfZ2VuZXJhdGVfY2hlY2tzdW0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV90Yl9zZXRfY2hlY2tzdW0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX3RiX3ZhbGlkYXRlX3RhYmxlX2hlYWRlcihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX2hlYWRlcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwuaCBiL2luY2x1ZGUvYWNwaS9hY3RibC5oCmluZGV4IGVkNTNmODQuLmIxMjVjZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIE5hbWU6IGFjdGJsLmggLSBUYWJsZSBkYXRhIHN0cnVjdHVyZXMgZGVmaW5lZCBpbiBBQ1BJIHNwZWNpZmljYXRpb24KKyAqIE5hbWU6IGFjdGJsLmggLSBCYXNpYyBBQ1BJIFRhYmxlIERlZmluaXRpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00NSw2NiArNDUsNDUgQEAKICNkZWZpbmUgX19BQ1RCTF9IX18KIAogLyoKKyAqIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMuIFVzZWZ1bCBiZWNhdXNlIHRoZXkgbWFrZQorICogaXQgbW9yZSBkaWZmaWN1bHQgdG8gaW5hZHZlcnRlbnRseSB0eXBlIGluIHRoZSB3cm9uZyBzaWduYXR1cmUuCisgKi8KKyNkZWZpbmUgRFNEVF9TSUcgICAgICAgICAgICAgICAgIkRTRFQiCS8qIERpZmZlcmVudGlhdGVkIFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLworI2RlZmluZSBGQURUX1NJRyAgICAgICAgICAgICAgICAiRkFDUCIJLyogRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBUYWJsZSAqLworI2RlZmluZSBGQUNTX1NJRyAgICAgICAgICAgICAgICAiRkFDUyIJLyogRmlybXdhcmUgQUNQSSBDb250cm9sIFN0cnVjdHVyZSAqLworI2RlZmluZSBQU0RUX1NJRyAgICAgICAgICAgICAgICAiUFNEVCIJLyogUGVyc2lzdGVudCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgUlNEUF9TSUcgICAgICAgICAgICAgICAgIlJTRCBQVFIgIgkvKiBSb290IFN5c3RlbSBEZXNjcmlwdGlvbiBQb2ludGVyICovCisjZGVmaW5lIFJTRFRfU0lHICAgICAgICAgICAgICAgICJSU0RUIgkvKiBSb290IFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLworI2RlZmluZSBYU0RUX1NJRyAgICAgICAgICAgICAgICAiWFNEVCIJLyogRXh0ZW5kZWQgIFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLworI2RlZmluZSBTU0RUX1NJRyAgICAgICAgICAgICAgICAiU1NEVCIJLyogU2Vjb25kYXJ5IFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLworI2RlZmluZSBSU0RQX05BTUUgICAgICAgICAgICAgICAiUlNEUCIKKworLyoKKyAqIEFsbCB0YWJsZXMgYW5kIHN0cnVjdHVyZXMgbXVzdCBiZSBieXRlLXBhY2tlZCB0byBtYXRjaCB0aGUgQUNQSQorICogc3BlY2lmaWNhdGlvbiwgc2luY2UgdGhlIHRhYmxlcyBhcmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSBCSU9TCisgKi8KKyNwcmFnbWEgcGFjaygxKQorCisvKgorICogVGhlc2UgYXJlIHRoZSBBQ1BJIHRhYmxlcyB0aGF0IGFyZSBkaXJlY3RseSBjb25zdW1lZCBieSB0aGUgc3Vic3lzdGVtLgorICoKKyAqIFRoZSBSU0RQIGFuZCBGQUNTIGRvIG5vdCB1c2UgdGhlIGNvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlci4gQWxsIG90aGVyIEFDUEkKKyAqIHRhYmxlcyB1c2UgdGhlIGhlYWRlci4KKyAqCiAgKiBOb3RlIGFib3V0IGJpdGZpZWxkczogVGhlIHU4IHR5cGUgaXMgdXNlZCBmb3IgYml0ZmllbGRzIGluIEFDUEkgdGFibGVzLgogICogVGhpcyBpcyB0aGUgb25seSB0eXBlIHRoYXQgaXMgZXZlbiByZW1vdGVseSBwb3J0YWJsZS4gQW55dGhpbmcgZWxzZSBpcyBub3QKICAqIHBvcnRhYmxlLCBzbyBkbyBub3QgdXNlIGFueSBvdGhlciBiaXRmaWVsZCB0eXBlcy4KICAqLwogCi0vKgotICogIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMKLSAqLwotI2RlZmluZSBSU0RQX05BTUUgICAgICAgICAgICAgICAiUlNEUCIKLSNkZWZpbmUgUlNEUF9TSUcgICAgICAgICAgICAgICAgIlJTRCBQVFIgIgkvKiBSU0RUIFBvaW50ZXIgc2lnbmF0dXJlICovCi0jZGVmaW5lIEFQSUNfU0lHICAgICAgICAgICAgICAgICJBUElDIgkvKiBNdWx0aXBsZSBBUElDIERlc2NyaXB0aW9uIFRhYmxlICovCi0jZGVmaW5lIERTRFRfU0lHICAgICAgICAgICAgICAgICJEU0RUIgkvKiBEaWZmZXJlbnRpYXRlZCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KLSNkZWZpbmUgRkFEVF9TSUcgICAgICAgICAgICAgICAgIkZBQ1AiCS8qIEZpeGVkIEFDUEkgRGVzY3JpcHRpb24gVGFibGUgKi8KLSNkZWZpbmUgRkFDU19TSUcgICAgICAgICAgICAgICAgIkZBQ1MiCS8qIEZpcm13YXJlIEFDUEkgQ29udHJvbCBTdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgUFNEVF9TSUcgICAgICAgICAgICAgICAgIlBTRFQiCS8qIFBlcnNpc3RlbnQgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlICovCi0jZGVmaW5lIFJTRFRfU0lHICAgICAgICAgICAgICAgICJSU0RUIgkvKiBSb290IFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLwotI2RlZmluZSBYU0RUX1NJRyAgICAgICAgICAgICAgICAiWFNEVCIJLyogRXh0ZW5kZWQgIFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLwotI2RlZmluZSBTU0RUX1NJRyAgICAgICAgICAgICAgICAiU1NEVCIJLyogU2Vjb25kYXJ5IFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLwotI2RlZmluZSBTQlNUX1NJRyAgICAgICAgICAgICAgICAiU0JTVCIJLyogU21hcnQgQmF0dGVyeSBTcGVjaWZpY2F0aW9uIFRhYmxlICovCi0jZGVmaW5lIFNQSUNfU0lHICAgICAgICAgICAgICAgICJTUElDIgkvKiBJT1NBUElDIHRhYmxlICovCi0jZGVmaW5lIEJPT1RfU0lHICAgICAgICAgICAgICAgICJCT09UIgkvKiBCb290IHRhYmxlICovCi0KLSNkZWZpbmUgR0xfT1dORUQgICAgICAgICAgICAgICAgMHgwMgkvKiBPd25lcnNoaXAgb2YgZ2xvYmFsIGxvY2sgaXMgYml0IDEgKi8KLQotLyoKLSAqIENvbW1vbiB0YWJsZSB0eXBlcy4gIFRoZSBiYXNlIGNvZGUgY2FuIHJlbWFpbgotICogY29uc3RhbnQgaWYgdGhlIHVuZGVybHlpbmcgdGFibGVzIGFyZSBjaGFuZ2VkCi0gKi8KLSNkZWZpbmUgUlNEVF9ERVNDUklQVE9SICAgICAgICAgc3RydWN0IHJzZHRfZGVzY3JpcHRvcl9yZXYyCi0jZGVmaW5lIFhTRFRfREVTQ1JJUFRPUiAgICAgICAgIHN0cnVjdCB4c2R0X2Rlc2NyaXB0b3JfcmV2MgotI2RlZmluZSBGQUNTX0RFU0NSSVBUT1IgICAgICAgICBzdHJ1Y3QgZmFjc19kZXNjcmlwdG9yX3JldjIKLSNkZWZpbmUgRkFEVF9ERVNDUklQVE9SICAgICAgICAgc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyCi0KLSNwcmFnbWEgcGFjaygxKQotCi0vKgotICogQUNQSSBWZXJzaW9uLWluZGVwZW5kZW50IHRhYmxlcworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBOT1RFOiBUaGUgdGFibGVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIEFDUEkgdmVyc2lvbnMgKDEuMCwgMi4wLCBldGMuKQotICogYXJlIGluIHNlcGFyYXRlIGZpbGVzLgotICovCi1zdHJ1Y3QgcnNkcF9kZXNjcmlwdG9yIHsJLyogUm9vdCBTeXN0ZW0gRGVzY3JpcHRvciBQb2ludGVyICovCi0JY2hhciBzaWduYXR1cmVbOF07CS8qIEFDUEkgc2lnbmF0dXJlLCBjb250YWlucyAiUlNEIFBUUiAiICovCi0JdTggY2hlY2tzdW07CQkvKiBBQ1BJIDEuMCBjaGVja3N1bSAqLwotCWNoYXIgb2VtX2lkWzZdOwkJLyogT0VNIGlkZW50aWZpY2F0aW9uICovCi0JdTggcmV2aXNpb247CQkvKiBNdXN0IGJlICgwKSBmb3IgQUNQSSAxLjAgb3IgKDIpIGZvciBBQ1BJIDIuMCsgKi8KLQl1MzIgcnNkdF9waHlzaWNhbF9hZGRyZXNzOwkvKiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgUlNEVCAqLwotCXUzMiBsZW5ndGg7CQkvKiBYU0RUIExlbmd0aCBpbiBieXRlcywgaW5jbHVkaW5nIGhlYWRlciAqLwotCXU2NCB4c2R0X3BoeXNpY2FsX2FkZHJlc3M7CS8qIDY0LWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBYU0RUICovCi0JdTggZXh0ZW5kZWRfY2hlY2tzdW07CS8qIENoZWNrc3VtIG9mIGVudGlyZSB0YWJsZSAoQUNQSSAyLjApICovCi0JY2hhciByZXNlcnZlZFszXTsJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotfTsKKyAqIEFDUEkgVGFibGUgSGVhZGVyLiBUaGlzIGNvbW1vbiBoZWFkZXIgaXMgdXNlZCBieSBhbGwgdGFibGVzIGV4Y2VwdCB0aGUKKyAqIFJTRFAgYW5kIEZBQ1MuIFRoZSBkZWZpbmUgaXMgdXNlZCBmb3IgZGlyZWN0IGluY2x1c2lvbiBvZiBoZWFkZXIgaW50bworICogb3RoZXIgQUNQSSB0YWJsZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdHJ1Y3QgYWNwaV9jb21tb25fZmFjcyB7CS8qIENvbW1vbiBGQUNTIGZvciBpbnRlcm5hbCB1c2UgKi8KLQl1MzIgKmdsb2JhbF9sb2NrOwotCXU2NCAqZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsKLQl1OCB2ZWN0b3Jfd2lkdGg7Ci19OwotCi0jZGVmaW5lIEFDUElfVEFCTEVfSEVBREVSX0RFRiAgIC8qIEFDUEkgY29tbW9uIHRhYmxlIGhlYWRlciAqLyBcCisjZGVmaW5lIEFDUElfVEFCTEVfSEVBREVSX0RFRiBcCiAJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVbNF07ICAgICAgICAgICAvKiBBU0NJSSB0YWJsZSBzaWduYXR1cmUgKi9cCiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7ICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGFibGUgaW4gYnl0ZXMsIGluY2x1ZGluZyB0aGlzIGhlYWRlciAqL1wKIAl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOyAgICAgICAgICAgICAgIC8qIEFDUEkgU3BlY2lmaWNhdGlvbiBtaW5vciB2ZXJzaW9uICMgKi9cCkBAIC0xMTIsMTU0ICs5MSwyMzkgQEAKIAljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lbV9pZFs2XTsgICAgICAgICAgICAgIC8qIEFTQ0lJIE9FTSBpZGVudGlmaWNhdGlvbiAqL1wKIAljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lbV90YWJsZV9pZFs4XTsgICAgICAgIC8qIEFTQ0lJIE9FTSB0YWJsZSBpZGVudGlmaWNhdGlvbiAqL1wKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lbV9yZXZpc2lvbjsgICAgICAgICAgIC8qIE9FTSByZXZpc2lvbiBudW1iZXIgKi9cCi0JY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2xfY29tcGlsZXJfaWQgWzRdOyAgICAvKiBBU0NJSSBBU0wgY29tcGlsZXIgdmVuZG9yIElEICovXAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNsX2NvbXBpbGVyX2lkWzRdOyAgICAgLyogQVNDSUkgQVNMIGNvbXBpbGVyIHZlbmRvciBJRCAqL1wKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbF9jb21waWxlcl9yZXZpc2lvbjsJLyogQVNMIGNvbXBpbGVyIHZlcnNpb24gKi8KIAotc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIHsJLyogQUNQSSBjb21tb24gdGFibGUgaGVhZGVyICovCitzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgewogQUNQSV9UQUJMRV9IRUFERVJfREVGfTsKIAogLyoKLSAqIE1BRFQgdmFsdWVzIGFuZCBzdHJ1Y3R1cmVzCisgKiBHQVMgLSBHZW5lcmljIEFkZHJlc3MgU3RydWN0dXJlIChBQ1BJIDIuMCspCiAgKi8KK3N0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB7CisJdTggYWRkcmVzc19zcGFjZV9pZDsJLyogQWRkcmVzcyBzcGFjZSB3aGVyZSBzdHJ1Y3Qgb3IgcmVnaXN0ZXIgZXhpc3RzICovCisJdTggcmVnaXN0ZXJfYml0X3dpZHRoOwkvKiBTaXplIGluIGJpdHMgb2YgZ2l2ZW4gcmVnaXN0ZXIgKi8KKwl1OCByZWdpc3Rlcl9iaXRfb2Zmc2V0OwkvKiBCaXQgb2Zmc2V0IHdpdGhpbiB0aGUgcmVnaXN0ZXIgKi8KKwl1OCBhY2Nlc3Nfd2lkdGg7CS8qIE1pbmltdW0gQWNjZXNzIHNpemUgKEFDUEkgMy4wKSAqLworCXU2NCBhZGRyZXNzOwkJLyogNjQtYml0IGFkZHJlc3Mgb2Ygc3RydWN0IG9yIHJlZ2lzdGVyICovCit9OwogCi0vKiBWYWx1ZXMgZm9yIE1BRFQgUENBVENvbXBhdCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSU0RQIC0gUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gUG9pbnRlciAoU2lnbmF0dXJlIGlzICJSU0QgUFRSICIpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBEVUFMX1BJQyAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1VTFRJUExFX0FQSUMgICAgICAgICAgIDEKK3N0cnVjdCByc2RwX2Rlc2NyaXB0b3IgeworCWNoYXIgc2lnbmF0dXJlWzhdOwkvKiBBQ1BJIHNpZ25hdHVyZSwgY29udGFpbnMgIlJTRCBQVFIgIiAqLworCXU4IGNoZWNrc3VtOwkJLyogQUNQSSAxLjAgY2hlY2tzdW0gKi8KKwljaGFyIG9lbV9pZFs2XTsJCS8qIE9FTSBpZGVudGlmaWNhdGlvbiAqLworCXU4IHJldmlzaW9uOwkJLyogTXVzdCBiZSAoMCkgZm9yIEFDUEkgMS4wIG9yICgyKSBmb3IgQUNQSSAyLjArICovCisJdTMyIHJzZHRfcGh5c2ljYWxfYWRkcmVzczsJLyogMzItYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIFJTRFQgKi8KKwl1MzIgbGVuZ3RoOwkJLyogVGFibGUgbGVuZ3RoIGluIGJ5dGVzLCBpbmNsdWRpbmcgaGVhZGVyIChBQ1BJIDIuMCspICovCisJdTY0IHhzZHRfcGh5c2ljYWxfYWRkcmVzczsJLyogNjQtYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIFhTRFQgKEFDUEkgMi4wKykgKi8KKwl1OCBleHRlbmRlZF9jaGVja3N1bTsJLyogQ2hlY2tzdW0gb2YgZW50aXJlIHRhYmxlIChBQ1BJIDIuMCspICovCisJdTggcmVzZXJ2ZWRbM107CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCit9OwogCi0vKiBNYXN0ZXIgTUFEVCAqLworI2RlZmluZSBBQ1BJX1JTRFBfUkVWMF9TSVpFICAgICAyMAkvKiBTaXplIG9mIG9yaWdpbmFsIEFDUEkgMS4wIFJTRFAgKi8KIAotc3RydWN0IG11bHRpcGxlX2FwaWNfdGFibGUgewotCUFDUElfVEFCTEVfSEVBREVSX0RFRgkvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KLQl1MzIgbG9jYWxfYXBpY19hZGRyZXNzOwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGxvY2FsIEFQSUMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUlNEVC9YU0RUIC0gUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGVzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHJzZHRfZGVzY3JpcHRvciB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHUzMiB0YWJsZV9vZmZzZXRfZW50cnlbMV07CS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIEFDUEkgdGFibGVzICovCit9OworCitzdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yIHsKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTY0IHRhYmxlX29mZnNldF9lbnRyeVsxXTsJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gQUNQSSB0YWJsZXMgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRkFDUyAtIEZpcm13YXJlIEFDUEkgQ29udHJvbCBTdHJ1Y3R1cmUgKEZBQ1MpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGZhY3NfZGVzY3JpcHRvciB7CisJY2hhciBzaWduYXR1cmVbNF07CS8qIEFTQ0lJIHRhYmxlIHNpZ25hdHVyZSAqLworCXUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2Ygc3RydWN0dXJlLCBpbiBieXRlcyAqLworCXUzMiBoYXJkd2FyZV9zaWduYXR1cmU7CS8qIEhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gc2lnbmF0dXJlICovCisJdTMyIGZpcm13YXJlX3dha2luZ192ZWN0b3I7CS8qIDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBGaXJtd2FyZSBXYWtpbmcgVmVjdG9yICovCisJdTMyIGdsb2JhbF9sb2NrOwkvKiBHbG9iYWwgTG9jayBmb3Igc2hhcmVkIGhhcmR3YXJlIHJlc291cmNlcyAqLwogCiAJLyogRmxhZ3MgKDMyIGJpdHMpICovCiAKLQl1OCBQQ0FUY29tcGF0OjE7CS8qIDAwOiAgICBTeXN0ZW0gYWxzbyBoYXMgZHVhbCA4MjU5cyAqLworCXU4IFM0Ymlvc19mOjE7CQkvKiAwMDogICAgUzRCSU9TIHN1cHBvcnQgaXMgcHJlc2VudCAqLwogCSB1ODo3OwkJCS8qIDAxLTA3OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCiAJdTggcmVzZXJ2ZWQxWzNdOwkvKiAwOC0zMTogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCisJdTY0IHhmaXJtd2FyZV93YWtpbmdfdmVjdG9yOwkvKiA2NC1iaXQgdmVyc2lvbiBvZiB0aGUgRmlybXdhcmUgV2FraW5nIFZlY3RvciAoQUNQSSAyLjArKSAqLworCXU4IHZlcnNpb247CQkvKiBWZXJzaW9uIG9mIHRoaXMgdGFibGUgKEFDUEkgMi4wKykgKi8KKwl1OCByZXNlcnZlZFszMV07CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KIH07CiAKLS8qIFZhbHVlcyBmb3IgVHlwZSBpbiBBUElDX0hFQURFUl9ERUYgKi8KLQotI2RlZmluZSBBUElDX1BST0NFU1NPUiAgICAgICAgICAwCi0jZGVmaW5lIEFQSUNfSU8gICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQVBJQ19YUlVQVF9PVkVSUklERSAgICAgMgotI2RlZmluZSBBUElDX05NSSAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEFQSUNfTE9DQUxfTk1JICAgICAgICAgIDQKLSNkZWZpbmUgQVBJQ19BRERSRVNTX09WRVJSSURFICAgNQotI2RlZmluZSBBUElDX0lPX1NBUElDICAgICAgICAgICA2Ci0jZGVmaW5lIEFQSUNfTE9DQUxfU0FQSUMgICAgICAgIDcKLSNkZWZpbmUgQVBJQ19YUlVQVF9TT1VSQ0UgICAgICAgOAotI2RlZmluZSBBUElDX1JFU0VSVkVEICAgICAgICAgICA5CS8qIDkgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCisjZGVmaW5lIEFDUElfR0xPQ0tfUEVORElORyAgICAgIDB4MDEJLyogMDA6IFBlbmRpbmcgZ2xvYmFsIGxvY2sgb3duZXJzaGlwICovCisjZGVmaW5lIEFDUElfR0xPQ0tfT1dORUQgICAgICAgIDB4MDIJLyogMDE6IEdsb2JhbCBsb2NrIGlzIG93bmVkICovCiAKIC8qCi0gKiBNQURUIHN1Yi1zdHJ1Y3R1cmVzIChGb2xsb3cgTVVMVElQTEVfQVBJQ19ERVNDUklQVElPTl9UQUJMRSkKKyAqIENvbW1vbiBGQUNTIC0gVGhpcyBpcyBhIHZlcnNpb24taW5kZXBlbmRlbnQgRkFDUyBzdHJ1Y3R1cmUgdXNlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKICAqLwotI2RlZmluZSBBUElDX0hFQURFUl9ERUYgICAgICAgICAgICAgICAgICAgICAvKiBDb21tb24gQVBJQyBzdWItc3RydWN0dXJlIGhlYWRlciAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7IFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKLQotc3RydWN0IGFwaWNfaGVhZGVyIHsKLUFQSUNfSEVBREVSX0RFRn07Ci0KLS8qIFZhbHVlcyBmb3IgTVBTIElOVEkgZmxhZ3MgKi8KLQotI2RlZmluZSBQT0xBUklUWV9DT05GT1JNUyAgICAgICAwCi0jZGVmaW5lIFBPTEFSSVRZX0FDVElWRV9ISUdIICAgIDEKLSNkZWZpbmUgUE9MQVJJVFlfUkVTRVJWRUQgICAgICAgMgotI2RlZmluZSBQT0xBUklUWV9BQ1RJVkVfTE9XICAgICAzCi0KLSNkZWZpbmUgVFJJR0dFUl9DT05GT1JNUyAgICAgICAgMAotI2RlZmluZSBUUklHR0VSX0VER0UgICAgICAgICAgICAxCi0jZGVmaW5lIFRSSUdHRVJfUkVTRVJWRUQgICAgICAgIDIKLSNkZWZpbmUgVFJJR0dFUl9MRVZFTCAgICAgICAgICAgMwotCi0vKiBDb21tb24gZmxhZyBkZWZpbml0aW9ucyAoMTYgYml0cyBlYWNoKSAqLwotCi0jZGVmaW5lIE1QU19JTlRJX0ZMQUdTIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGFyaXR5ICAgICAgICA6IDI7ICAgIC8qIDAwLTAxOiBQb2xhcml0eSBvZiBBUElDIEkvTyBpbnB1dCBzaWduYWxzICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcl9tb2RlICAgIDogMjsgICAgLyogMDItMDM6IFRyaWdnZXIgbW9kZSBvZiBBUElDIGlucHV0IHNpZ25hbHMgKi9cCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA0OyAgICAvKiAwNC0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMTsJLyogMDgtMTU6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQotI2RlZmluZSBMT0NBTF9BUElDX0ZMQUdTIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nvcl9lbmFibGVkOiAxOyAgIC8qIDAwOiAgICBQcm9jZXNzb3IgaXMgdXNhYmxlIGlmIHNldCAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDc7ICAgIC8qIDAxLTA3OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOwkvKiAwOC0xNTogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCi0vKiBTdWItc3RydWN0dXJlcyBmb3IgTUFEVCAqLwotCi1zdHJ1Y3QgbWFkdF9wcm9jZXNzb3JfYXBpYyB7Ci0JQVBJQ19IRUFERVJfREVGIHU4IHByb2Nlc3Nvcl9pZDsJLyogQUNQSSBwcm9jZXNzb3IgaWQgKi8KLQl1OCBsb2NhbF9hcGljX2lkOwkvKiBQcm9jZXNzb3IncyBsb2NhbCBBUElDIGlkICovCi0gTE9DQUxfQVBJQ19GTEFHU307Ci0KLXN0cnVjdCBtYWR0X2lvX2FwaWMgewotCUFQSUNfSEVBREVSX0RFRiB1OCBpb19hcGljX2lkOwkvKiBJL08gQVBJQyBJRCAqLwotCXU4IHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KLQl1MzIgYWRkcmVzczsJCS8qIEFQSUMgcGh5c2ljYWwgYWRkcmVzcyAqLwotCXUzMiBpbnRlcnJ1cHQ7CQkvKiBHbG9iYWwgc3lzdGVtIGludGVycnVwdCB3aGVyZSBJTlRJCi0JCQkJICogbGluZXMgc3RhcnQgKi8KK3N0cnVjdCBhY3BpX2NvbW1vbl9mYWNzIHsKKwl1MzIgKmdsb2JhbF9sb2NrOworCXU2NCAqZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsKKwl1OCB2ZWN0b3Jfd2lkdGg7CiB9OwogCi1zdHJ1Y3QgbWFkdF9pbnRlcnJ1cHRfb3ZlcnJpZGUgewotCUFQSUNfSEVBREVSX0RFRiB1OCBidXM7CS8qIDAgLSBJU0EgKi8KLQl1OCBzb3VyY2U7CQkvKiBJbnRlcnJ1cHQgc291cmNlIChJUlEpICovCi0JdTMyIGludGVycnVwdDsJCS8qIEdsb2JhbCBzeXN0ZW0gaW50ZXJydXB0ICovCi0gTVBTX0lOVElfRkxBR1N9OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGQURUIC0gRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBUYWJsZSAoU2lnbmF0dXJlICJGQUNQIikKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdHJ1Y3QgbWFkdF9ubWlfc291cmNlIHsKLQlBUElDX0hFQURFUl9ERUYgTVBTX0lOVElfRkxBR1MgdTMyIGludGVycnVwdDsJLyogR2xvYmFsIHN5c3RlbSBpbnRlcnJ1cHQgKi8KLX07CisvKiBGaWVsZHMgY29tbW9uIHRvIGFsbCB2ZXJzaW9ucyBvZiB0aGUgRkFEVCAqLwogCi1zdHJ1Y3QgbWFkdF9sb2NhbF9hcGljX25taSB7Ci0JQVBJQ19IRUFERVJfREVGIHU4IHByb2Nlc3Nvcl9pZDsJLyogQUNQSSBwcm9jZXNzb3IgaWQgKi8KLQlNUFNfSU5USV9GTEFHUyB1OCBsaW50OwkvKiBMSU5UbiB0byB3aGljaCBOTUkgaXMgY29ubmVjdGVkICovCi19OworI2RlZmluZSBBQ1BJX0ZBRFRfQ09NTU9OIFwKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfZmlybXdhcmVfY3RybDsgICAvKiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBGQUNTICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX2RzZHQ7ICAgICAgICAgICAgLyogMzItYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgRFNEVCAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDE7ICAgICAgICAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgTW9kZWwgaXNuJ3QgdXNlZCBpbiBBQ1BJIDIuMCovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcl9QTV9wcm9maWxlOyAgLyogQ29udmV5cyBwcmVmZXJyZWQgcG93ZXIgbWFuYWdlbWVudCBwcm9maWxlIHRvIE9TUE0uICovIFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaV9pbnQ7ICAgICAgICAgICAgLyogU3lzdGVtIHZlY3RvciBvZiBTQ0kgaW50ZXJydXB0ICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtaV9jbWQ7ICAgICAgICAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFNNSSBjb21tYW5kIHBvcnQgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9lbmFibGU7ICAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGVuYWJsZSBBQ1BJICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZGlzYWJsZTsgICAgICAgLyogVmFsdWUgdG8gd3JpdGUgdG8gc21pX2NtZCB0byBkaXNhYmxlIEFDUEkgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUzRiaW9zX3JlcTsgICAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byBTTUkgQ01EIHRvIGVudGVyIFM0QklPUyBzdGF0ZSAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc3RhdGVfY250OyAgICAgICAgIC8qIFByb2Nlc3NvciBwZXJmb3JtYW5jZSBzdGF0ZSBjb250cm9sKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG0xYV9ldnRfYmxrOyAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIEV2ZW50IFJlZyBCbGsgKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG0xYl9ldnRfYmxrOyAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFiIEV2ZW50IFJlZyBCbGsgKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG0xYV9jbnRfYmxrOyAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIENvbnRyb2wgUmVnIEJsayAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbTFiX2NudF9ibGs7ICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWIgQ29udHJvbCBSZWcgQmxrICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMl9jbnRfYmxrOyAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAyIENvbnRyb2wgUmVnIEJsayAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbV90bXJfYmxrOyAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgVGltZXIgQ3RybCBSZWcgQmxrICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX2dwZTBfYmxrOyAgICAgICAgLyogUG9ydCBhZGRyIG9mIEdlbmVyYWwgUHVycG9zZSBhY3BpX2V2ZW50IDAgUmVnIEJsayAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9ncGUxX2JsazsgICAgICAgIC8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAxIFJlZyBCbGsgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0xX2V2dF9sZW47ICAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBwbTFfeF9ldnRfYmxrICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMV9jbnRfbGVuOyAgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgcG0xX3hfY250X2JsayAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTJfY250X2xlbjsgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtMl9jbnRfYmxrICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtX3RtX2xlbjsgICAgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgcG1fdG1fYmxrICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTBfYmxrX2xlbjsgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgZ3BlMF9ibGsgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlMV9ibGtfbGVuOyAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBncGUxX2JsayAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGUxX2Jhc2U7ICAgICAgICAgIC8qIE9mZnNldCBpbiBncGUgbW9kZWwgd2hlcmUgZ3BlMSBldmVudHMgc3RhcnQgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3N0X2NudDsgICAgICAgICAgICAvKiBTdXBwb3J0IGZvciB0aGUgX0NTVCBvYmplY3QgYW5kIEMgU3RhdGVzIGNoYW5nZSBub3RpZmljYXRpb24uKi8gXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx2bDJfbGF0OyAgICAgICAgICAvKiBXb3JzdCBjYXNlIEhXIGxhdGVuY3kgdG8gZW50ZXIvZXhpdCBDMiBzdGF0ZSAqLyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHZsM19sYXQ7ICAgICAgICAgIC8qIFdvcnN0IGNhc2UgSFcgbGF0ZW5jeSB0byBlbnRlci9leGl0IEMzIHN0YXRlICovIFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoX3NpemU7ICAgICAgICAgLyogUHJvY2Vzc29yJ3MgbWVtb3J5IGNhY2hlIGxpbmUgd2lkdGgsIGluIGJ5dGVzICovIFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoX3N0cmlkZTsgICAgICAgLyogTnVtYmVyIG9mIGZsdXNoIHN0cmlkZXMgdGhhdCBuZWVkIHRvIGJlIHJlYWQgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHV0eV9vZmZzZXQ7ICAgICAgICAvKiBQcm9jZXNzb3IncyBkdXR5IGN5Y2xlIGluZGV4IGluIHByb2Nlc3NvcidzIFBfQ05UIHJlZyovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1dHlfd2lkdGg7ICAgICAgICAgLyogUHJvY2Vzc29yJ3MgZHV0eSBjeWNsZSB2YWx1ZSBiaXQgd2lkdGggaW4gUF9DTlQgcmVnaXN0ZXIuKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5X2Fscm07ICAgICAgICAgICAvKiBJbmRleCB0byBkYXktb2YtbW9udGggYWxhcm0gaW4gUlRDIENNT1MgUkFNICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbl9hbHJtOyAgICAgICAgICAgLyogSW5kZXggdG8gbW9udGgtb2YteWVhciBhbGFybSBpbiBSVEMgQ01PUyBSQU0gKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudHVyeTsgICAgICAgICAgICAvKiBJbmRleCB0byBjZW50dXJ5IGluIFJUQyBDTU9TIFJBTSAqLyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYXBjX2Jvb3RfYXJjaDsgICAgIC8qIElBLVBDIEJvb3QgQXJjaGl0ZWN0dXJlIEZsYWdzLiBTZWUgVGFibGUgNS0xMCBmb3IgZGVzY3JpcHRpb24qLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDI7ICAgICAgICAgIC8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KIAotc3RydWN0IG1hZHRfYWRkcmVzc19vdmVycmlkZSB7Ci0JQVBJQ19IRUFERVJfREVGIHUxNiByZXNlcnZlZDsJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCXU2NCBhZGRyZXNzOwkJLyogQVBJQyBwaHlzaWNhbCBhZGRyZXNzICovCi19OworLyoKKyAqIEFDUEkgMi4wKyBGQURUCisgKi8KK3N0cnVjdCBmYWR0X2Rlc2NyaXB0b3IgeworCUFDUElfRkFEVF9DT01NT04KKwkgICAgLyogRmxhZ3MgKDMyIGJpdHMpICovCisJdTggd2JfaW52ZDoxOwkJLyogMDA6ICAgIFRoZSB3YmludmQgaW5zdHJ1Y3Rpb24gd29ya3MgcHJvcGVybHkgKi8KKwl1OCB3Yl9pbnZkX2ZsdXNoOjE7CS8qIDAxOiAgICBUaGUgd2JpbnZkIGZsdXNoZXMgYnV0IGRvZXMgbm90IGludmFsaWRhdGUgKi8KKwl1OCBwcm9jX2MxOjE7CQkvKiAwMjogICAgQWxsIHByb2Nlc3NvcnMgc3VwcG9ydCBDMSBzdGF0ZSAqLworCXU4IHBsdmwyX3VwOjE7CQkvKiAwMzogICAgQzIgc3RhdGUgd29ya3Mgb24gTVAgc3lzdGVtICovCisJdTggcHdyX2J1dHRvbjoxOwkvKiAwNDogICAgUG93ZXIgYnV0dG9uIGlzIGhhbmRsZWQgYXMgYSBnZW5lcmljIGZlYXR1cmUgKi8KKwl1OCBzbGVlcF9idXR0b246MTsJLyogMDU6ICAgIFNsZWVwIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlLCBvciBub3QgcHJlc2VudCAqLworCXU4IGZpeGVkX3JUQzoxOwkJLyogMDY6ICAgIFJUQyB3YWtldXAgc3RhdCBub3QgaW4gZml4ZWQgcmVnaXN0ZXIgc3BhY2UgKi8KKwl1OCBydGNzNDoxOwkJLyogMDc6ICAgIFJUQyB3YWtldXAgc3RhdCBub3QgcG9zc2libGUgZnJvbSBTNCAqLworCXU4IHRtcl92YWxfZXh0OjE7CS8qIDA4OiAgICB0bXJfdmFsIGlzIDMyIGJpdHMgMD0yNC1iaXRzICovCisJdTggZG9ja19jYXA6MTsJCS8qIDA5OiAgICBEb2NraW5nIHN1cHBvcnRlZCAqLworCXU4IHJlc2V0X3JlZ19zdXA6MTsJLyogMTA6ICAgIFN5c3RlbSByZXNldCB2aWEgdGhlIEZBRFQgUkVTRVRfUkVHIHN1cHBvcnRlZCAqLworCXU4IHNlYWxlZF9jYXNlOjE7CS8qIDExOiAgICBObyBpbnRlcm5hbCBleHBhbnNpb24gY2FwYWJpbGl0aWVzIGFuZCBjYXNlIGlzIHNlYWxlZCAqLworCXU4IGhlYWRsZXNzOjE7CQkvKiAxMjogICAgTm8gbG9jYWwgdmlkZW8gY2FwYWJpbGl0aWVzIG9yIGxvY2FsIGlucHV0IGRldmljZXMgKi8KKwl1OCBjcHVfc3dfc2xlZXA6MTsJLyogMTM6ICAgIE11c3QgZXhlY3V0ZSBuYXRpdmUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgd3JpdGluZyBTTFBfVFlQeCByZWdpc3RlciAqLwogCi1zdHJ1Y3QgbWFkdF9pb19zYXBpYyB7Ci0JQVBJQ19IRUFERVJfREVGIHU4IGlvX3NhcGljX2lkOwkvKiBJL08gU0FQSUMgSUQgKi8KLQl1OCByZXNlcnZlZDsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1MzIgaW50ZXJydXB0X2Jhc2U7CS8qIEdsb2NhbCBpbnRlcnJ1cHQgZm9yIFNBUElDIHN0YXJ0ICovCi0JdTY0IGFkZHJlc3M7CQkvKiBTQVBJQyBwaHlzaWNhbCBhZGRyZXNzICovCi19OworCXU4IHBjaV9leHBfd2FrOjE7CS8qIDE0OiAgICBTeXN0ZW0gc3VwcG9ydHMgUENJRVhQX1dBS0UgKFNUUy9FTikgYml0cyAoQUNQSSAzLjApICovCisJdTggdXNlX3BsYXRmb3JtX2Nsb2NrOjE7CS8qIDE1OiAgICBPU1BNIHNob3VsZCB1c2UgcGxhdGZvcm0tcHJvdmlkZWQgdGltZXIgKEFDUEkgMy4wKSAqLworCXU4IFM0cnRjX3N0c192YWxpZDoxOwkvKiAxNjogICAgQ29udGVudHMgb2YgUlRDX1NUUyB2YWxpZCBhZnRlciBTNCB3YWtlIChBQ1BJIDMuMCkgKi8KKwl1OCByZW1vdGVfcG93ZXJfb25fY2FwYWJsZToxOwkvKiAxNzogICAgU3lzdGVtIGlzIGNvbXBhdGlibGUgd2l0aCByZW1vdGUgcG93ZXIgb24gKEFDUEkgMy4wKSAqLworCXU4IGZvcmNlX2FwaWNfY2x1c3Rlcl9tb2RlbDoxOwkvKiAxODogICAgQWxsIGxvY2FsIEFQSUNzIG11c3QgdXNlIGNsdXN0ZXIgbW9kZWwgKEFDUEkgMy4wKSAqLworCXU4IGZvcmNlX2FwaWNfcGh5c2ljYWxfZGVzdGluYXRpb25fbW9kZToxOwkvKiAxOTogICBBbGwgbG9jYWwgeF9hUElDcyBtdXN0IHVzZSBwaHlzaWNhbCBkZXN0IG1vZGUgKEFDUEkgMy4wKSAqLworCSB1ODo0OwkJCS8qIDIwLTIzOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJdTggcmVzZXJ2ZWQzOwkJLyogMjQtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KIAotc3RydWN0IG1hZHRfbG9jYWxfc2FwaWMgewotCUFQSUNfSEVBREVSX0RFRiB1OCBwcm9jZXNzb3JfaWQ7CS8qIEFDUEkgcHJvY2Vzc29yIGlkICovCi0JdTggbG9jYWxfc2FwaWNfaWQ7CS8qIFNBUElDIElEICovCi0JdTggbG9jYWxfc2FwaWNfZWlkOwkvKiBTQVBJQyBFSUQgKi8KLQl1OCByZXNlcnZlZFszXTsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQkgTE9DQUxfQVBJQ19GTEFHUyB1MzIgcHJvY2Vzc29yX3VJRDsJLyogTnVtZXJpYyBVSUQgLSBBQ1BJIDMuMCAqLwotCWNoYXIgcHJvY2Vzc29yX3VJRHN0cmluZ1sxXTsJLyogU3RyaW5nIFVJRCAgLSBBQ1BJIDMuMCAqLwotfTsKLQotc3RydWN0IG1hZHRfaW50ZXJydXB0X3NvdXJjZSB7Ci0JQVBJQ19IRUFERVJfREVGIE1QU19JTlRJX0ZMQUdTIHU4IGludGVycnVwdF90eXBlOwkvKiAxPVBNSSwgMj1JTklULCAzPWNvcnJlY3RlZCAqLwotCXU4IHByb2Nlc3Nvcl9pZDsJLyogUHJvY2Vzc29yIElEICovCi0JdTggcHJvY2Vzc29yX2VpZDsJLyogUHJvY2Vzc29yIEVJRCAqLwotCXU4IGlvX3NhcGljX3ZlY3RvcjsJLyogVmVjdG9yIHZhbHVlIGZvciBQTUkgaW50ZXJydXB0cyAqLwotCXUzMiBpbnRlcnJ1cHQ7CQkvKiBHbG9iYWwgc3lzdGVtIGludGVycnVwdCAqLwotCXUzMiBmbGFnczsJCS8qIEludGVycnVwdCBTb3VyY2UgRmxhZ3MgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgcmVzZXRfcmVnaXN0ZXI7CS8qIFJlc2V0IHJlZ2lzdGVyIGFkZHJlc3MgaW4gR0FTIGZvcm1hdCAqLworCXU4IHJlc2V0X3ZhbHVlOwkJLyogVmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlc2V0X3JlZ2lzdGVyIHBvcnQgdG8gcmVzZXQgdGhlIHN5c3RlbSAqLworCXU4IHJlc2VydmVkNFszXTsJLyogVGhlc2UgdGhyZWUgYnl0ZXMgbXVzdCBiZSB6ZXJvICovCisJdTY0IHhmaXJtd2FyZV9jdHJsOwkvKiA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBGQUNTICovCisJdTY0IFhkc2R0OwkJLyogNjQtYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgRFNEVCAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG0xYV9ldnRfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMWEgYWNwaV9ldmVudCBSZWcgQmxrIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeHBtMWJfZXZ0X2JsazsJLyogRXh0ZW5kZWQgUG93ZXIgTWd0IDFiIGFjcGlfZXZlbnQgUmVnIEJsayBhZGRyZXNzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhwbTFhX2NudF9ibGs7CS8qIEV4dGVuZGVkIFBvd2VyIE1ndCAxYSBDb250cm9sIFJlZyBCbGsgYWRkcmVzcyAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG0xYl9jbnRfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMWIgQ29udHJvbCBSZWcgQmxrIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeHBtMl9jbnRfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMiBDb250cm9sIFJlZyBCbGsgYWRkcmVzcyAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG1fdG1yX2JsazsJLyogRXh0ZW5kZWQgUG93ZXIgTWd0IFRpbWVyIEN0cmwgUmVnIEJsayBhZGRyZXNzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhncGUwX2JsazsJLyogRXh0ZW5kZWQgR2VuZXJhbCBQdXJwb3NlIGFjcGlfZXZlbnQgMCBSZWcgQmxrIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeGdwZTFfYmxrOwkvKiBFeHRlbmRlZCBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAxIFJlZyBCbGsgYWRkcmVzcyAqLwogfTsKIAogLyoKLSAqIFNtYXJ0IEJhdHRlcnkKKyAqICJEb3duLXJldnZlZCIgQUNQSSAyLjAgRkFEVCBkZXNjcmlwdG9yCisgKiBEZWZpbmVkIGhlcmUgdG8gYWxsb3cgY29tcGlsZXIgdG8gZ2VuZXJhdGUgdGhlIGxlbmd0aCBvZiB0aGUgc3RydWN0CiAgKi8KLXN0cnVjdCBzbWFydF9iYXR0ZXJ5X3RhYmxlIHsKLQlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTMyIHdhcm5pbmdfbGV2ZWw7Ci0JdTMyIGxvd19sZXZlbDsKLQl1MzIgY3JpdGljYWxfbGV2ZWw7CitzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjJfbWludXMgeworCUFDUElfRkFEVF9DT01NT04gdTMyIGZsYWdzOworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyByZXNldF9yZWdpc3RlcjsJLyogUmVzZXQgcmVnaXN0ZXIgYWRkcmVzcyBpbiBHQVMgZm9ybWF0ICovCisJdTggcmVzZXRfdmFsdWU7CQkvKiBWYWx1ZSB0byB3cml0ZSB0byB0aGUgcmVzZXRfcmVnaXN0ZXIgcG9ydCB0byByZXNldCB0aGUgc3lzdGVtLiAqLworCXU4IHJlc2VydmVkN1szXTsJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwogfTsKIAorLyoKKyAqIEFDUEkgMS4wIEZBRFQKKyAqIERlZmluZWQgaGVyZSB0byBhbGxvdyBjb21waWxlciB0byBnZW5lcmF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJ1Y3QKKyAqLworc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYxIHsKKwlBQ1BJX0ZBRFRfQ09NTU9OIHUzMiBmbGFnczsKK307CisKKy8qIEZBRFQ6IFByZWZlcmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMgKi8KKworI2RlZmluZSBQTV9VTlNQRUNJRklFRCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUE1fREVTS1RPUCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBNX01PQklMRSAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQTV9XT1JLU1RBVElPTiAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUE1fRU5URVJQUklTRV9TRVJWRVIgICAgICAgICAgICA0CisjZGVmaW5lIFBNX1NPSE9fU0VSVkVSICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBQTV9BUFBMSUFOQ0VfUEMgICAgICAgICAgICAgICAgIDYKKworLyogRkFEVDogQm9vdCBBcmNoIEZsYWdzICovCisKKyNkZWZpbmUgQkFGX0xFR0FDWV9ERVZJQ0VTICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQkFGXzgwNDJfS0VZQk9BUkRfQ09OVFJPTExFUiAgICAweDAwMDIKKworI2RlZmluZSBGQURUMl9SRVZJU0lPTl9JRCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkFEVDJfTUlOVVNfUkVWSVNJT05fSUQgICAgICAgICAyCisKKy8qIFJlc2V0IHRvIGRlZmF1bHQgcGFja2luZyAqLworCiAjcHJhZ21hIHBhY2soKQogCiAvKgorICogVGhpcyBtYWNybyBpcyB0ZW1wb3JhcnkgdW50aWwgdGhlIHRhYmxlIGJpdGZpZWxkIGZsYWcgZGVmaW5pdGlvbnMKKyAqIGFyZSByZW1vdmVkIGFuZCByZXBsYWNlZCBieSBhIEZsYWdzIGZpZWxkLgorICovCisjZGVmaW5lIEFDUElfRkxBR19PRkZTRVQoZCxmLG8pICAgICAgICAgKHU4KSAoQUNQSV9PRkZTRVQgKGQsZikgKyBcCisJCQkgIHNpemVvZigoKGQgKikwKS0+ZikgKyBvKQorLyoKKyAqIEdldCB0aGUgcmVtYWluaW5nIEFDUEkgdGFibGVzCisgKi8KKyNpbmNsdWRlICJhY3RibDEuaCIKKworLyoKICAqIEFDUEkgVGFibGUgaW5mb3JtYXRpb24uICBXZSBzYXZlIHRoZSB0YWJsZSBhZGRyZXNzLCBsZW5ndGgsCiAgKiBhbmQgdHlwZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiAobWFwcGVkIG9yIGFsbG9jYXRlZCkgZm9yIGVhY2gKICAqIHRhYmxlIGZvciAxKSB3aGVuIHdlIGV4aXQsIGFuZCAyKSBpZiBhIG5ldyB0YWJsZSBpcyBpbnN0YWxsZWQKQEAgLTI5MCwyNyArMzU0LDE3IEBACiAJdTggZmxhZ3M7CiB9OwogCi0vKgotICogR2V0IHRoZSBBQ1BJIHZlcnNpb24tc3BlY2lmaWMgdGFibGVzCi0gKi8KLSNpbmNsdWRlICJhY3RibDEuaCIJCS8qIEFjcGkgMS4wIHRhYmxlIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSAiYWN0YmwyLmgiCQkvKiBBY3BpIDIuMCB0YWJsZSBkZWZpbml0aW9ucyAqLwotCiBleHRlcm4gdTggYWNwaV9mYWR0X2lzX3YxOwkvKiBpcyBzZXQgdG8gMSBpZiBGQURUIGlzIHJldmlzaW9uIDEsCiAJCQkJICogbmVlZGVkIGZvciBjZXJ0YWluIHdvcmthcm91bmRzICovCisvKiBNYWNyb3MgdXNlZCB0byBnZW5lcmF0ZSBvZmZzZXRzIHRvIHNwZWNpZmljIHRhYmxlIGZpZWxkcyAqLwogCi0jcHJhZ21hIHBhY2soMSkKLS8qCi0gKiBIaWdoIHBlcmZvcm1hbmNlIHRpbWVyCi0gKi8KLXN0cnVjdCBocGV0X3RhYmxlIHsKLQlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTMyIGhhcmR3YXJlX2lkOwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBiYXNlX2FkZHJlc3M7Ci0JdTggaHBldF9udW1iZXI7Ci0JdTE2IGNsb2NrX3RpY2s7Ci0JdTggYXR0cmlidXRlczsKLX07CisjZGVmaW5lIEFDUElfRkFDU19PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGZhY3NfZGVzY3JpcHRvcixmKQorI2RlZmluZSBBQ1BJX0ZBRFRfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IsIGYpCisjZGVmaW5lIEFDUElfR0FTX09GRlNFVChmKSAgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzLGYpCisjZGVmaW5lIEFDUElfSERSX09GRlNFVChmKSAgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyLGYpCisjZGVmaW5lIEFDUElfUlNEUF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IHJzZHBfZGVzY3JpcHRvcixmKQogCi0jcHJhZ21hIHBhY2soKQorI2RlZmluZSBBQ1BJX0ZBRFRfRkxBR19PRkZTRVQoZixvKSAgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IsZixvKQorI2RlZmluZSBBQ1BJX0ZBQ1NfRkxBR19PRkZTRVQoZixvKSAgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBmYWNzX2Rlc2NyaXB0b3IsZixvKQogCiAjZW5kaWYJCQkJLyogX19BQ1RCTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaAppbmRleCBjZDQyOGQ1Li43NDVhNjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIE5hbWU6IGFjdGJsMS5oIC0gQUNQSSAxLjAgdGFibGVzCisgKiBOYW1lOiBhY3RibDEuaCAtIEFkZGl0aW9uYWwgQUNQSSB0YWJsZSBkZWZpbml0aW9ucwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNDQsOTIgKzQ0LDU5OSBAQAogI2lmbmRlZiBfX0FDVEJMMV9IX18KICNkZWZpbmUgX19BQ1RCTDFfSF9fCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQWRkaXRpb25hbCBBQ1BJIFRhYmxlcworICoKKyAqIFRoZXNlIHRhYmxlcyBhcmUgbm90IGNvbnN1bWVkIGRpcmVjdGx5IGJ5IHRoZSBBQ1BJQ0Egc3Vic3lzdGVtLCBidXQgYXJlCisgKiBpbmNsdWRlZCBoZXJlIHRvIHN1cHBvcnQgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBBTUwgZGlzYXNzZW1ibGVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBWYWx1ZXMgZm9yIGRlc2NyaXB0aW9uIHRhYmxlIGhlYWRlciBzaWduYXR1cmVzLiBVc2VmdWwgYmVjYXVzZSB0aGV5IG1ha2UKKyAqIGl0IG1vcmUgZGlmZmljdWx0IHRvIGluYWR2ZXJ0ZW50bHkgdHlwZSBpbiB0aGUgd3Jvbmcgc2lnbmF0dXJlLgorICovCisjZGVmaW5lIEFDUElfU0lHX0FTRiAgICAgICAgICAgICJBU0YhIgkvKiBBbGVydCBTdGFuZGFyZCBGb3JtYXQgdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfQk9PVCAgICAgICAgICAgIkJPT1QiCS8qIFNpbXBsZSBCb290IEZsYWcgVGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfQ1BFUCAgICAgICAgICAgIkNQRVAiCS8qIENvcnJlY3RlZCBQbGF0Zm9ybSBFcnJvciBQb2xsaW5nIHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX0RCR1AgICAgICAgICAgICJEQkdQIgkvKiBEZWJ1ZyBQb3J0IHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX0VDRFQgICAgICAgICAgICJFQ0RUIgkvKiBFbWJlZGRlZCBDb250cm9sbGVyIEJvb3QgUmVzb3VyY2VzIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX0hQRVQgICAgICAgICAgICJIUEVUIgkvKiBIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19NQURUICAgICAgICAgICAiQVBJQyIJLyogTXVsdGlwbGUgQVBJQyBEZXNjcmlwdGlvbiBUYWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19NQ0ZHICAgICAgICAgICAiTUNGRyIJLyogUENJIE1lbW9yeSBNYXBwZWQgQ29uZmlndXJhdGlvbiB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19TQlNUICAgICAgICAgICAiU0JTVCIJLyogU21hcnQgQmF0dGVyeSBTcGVjaWZpY2F0aW9uIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1NMSVQgICAgICAgICAgICJTTElUIgkvKiBTeXN0ZW0gTG9jYWxpdHkgRGlzdGFuY2UgSW5mb3JtYXRpb24gVGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfU1BDUiAgICAgICAgICAgIlNQQ1IiCS8qIFNlcmlhbCBQb3J0IENvbnNvbGUgUmVkaXJlY3Rpb24gdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfU1BNSSAgICAgICAgICAgIlNQTUkiCS8qIFNlcnZlciBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19TUkFUICAgICAgICAgICAiU1JBVCIJLyogU3lzdGVtIFJlc291cmNlIEFmZmluaXR5IFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1RDUEEgICAgICAgICAgICJUQ1BBIgkvKiBUcnVzdGVkIENvbXB1dGluZyBQbGF0Zm9ybSBBbGxpYW5jZSB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19XRFJUICAgICAgICAgICAiV0RSVCIJLyogV2F0Y2hkb2cgUmVzb3VyY2UgVGFibGUgKi8KKworLyogTGVnYWN5IG5hbWVzICovCisKKyNkZWZpbmUgQVBJQ19TSUcgICAgICAgICAgICAgICAgIkFQSUMiCS8qIE11bHRpcGxlIEFQSUMgRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgQk9PVF9TSUcgICAgICAgICAgICAgICAgIkJPT1QiCS8qIFNpbXBsZSBCb290IEZsYWcgVGFibGUgKi8KKyNkZWZpbmUgU0JTVF9TSUcgICAgICAgICAgICAgICAgIlNCU1QiCS8qIFNtYXJ0IEJhdHRlcnkgU3BlY2lmaWNhdGlvbiBUYWJsZSAqLworCisvKgorICogQWxsIHRhYmxlcyBtdXN0IGJlIGJ5dGUtcGFja2VkIHRvIG1hdGNoIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24sIHNpbmNlCisgKiB0aGUgdGFibGVzIGFyZSBwcm92aWRlZCBieSB0aGUgc3lzdGVtIEJJT1MuCisgKi8KICNwcmFnbWEgcGFjaygxKQogCiAvKgotICogQUNQSSAxLjAgUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKFJTRFQpCisgKiBOb3RlIGFib3V0IGJpdGZpZWxkczogVGhlIHU4IHR5cGUgaXMgdXNlZCBmb3IgYml0ZmllbGRzIGluIEFDUEkgdGFibGVzLgorICogVGhpcyBpcyB0aGUgb25seSB0eXBlIHRoYXQgaXMgZXZlbiByZW1vdGVseSBwb3J0YWJsZS4gQW55dGhpbmcgZWxzZSBpcyBub3QKKyAqIHBvcnRhYmxlLCBzbyBkbyBub3QgdXNlIGFueSBvdGhlciBiaXRmaWVsZCB0eXBlcy4KICAqLwotc3RydWN0IHJzZHRfZGVzY3JpcHRvcl9yZXYxIHsKLQlBQ1BJX1RBQkxFX0hFQURFUl9ERUYJLyogQUNQSSBjb21tb24gdGFibGUgaGVhZGVyICovCi0JdTMyIHRhYmxlX29mZnNldF9lbnRyeVsxXTsJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gQUNQSSB0YWJsZXMgKi8KLX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQVNGIC0gQWxlcnQgU3RhbmRhcmQgRm9ybWF0IHRhYmxlIChTaWduYXR1cmUgIkFTRiEiKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2FzZiB7CitBQ1BJX1RBQkxFX0hFQURFUl9ERUZ9OworCisjZGVmaW5lIEFDUElfQVNGX0hFQURFUl9ERUYgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7IFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKworc3RydWN0IGFjcGlfYXNmX2hlYWRlciB7CitBQ1BJX0FTRl9IRUFERVJfREVGfTsKKworLyogVmFsdWVzIGZvciBUeXBlIGZpZWxkICovCisKKyNkZWZpbmUgQVNGX0lORk8gICAgICAgICAgICAgICAgMAorI2RlZmluZSBBU0ZfQUxFUlQgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFTRl9DT05UUk9MICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVNGX0JPT1QgICAgICAgICAgICAgICAgMworI2RlZmluZSBBU0ZfQUREUkVTUyAgICAgICAgICAgICA0CisjZGVmaW5lIEFTRl9SRVNFUlZFRCAgICAgICAgICAgIDUKIAogLyoKLSAqIEFDUEkgMS4wIEZpcm13YXJlIEFDUEkgQ29udHJvbCBTdHJ1Y3R1cmUgKEZBQ1MpCisgKiBBU0Ygc3VidGFibGVzCiAgKi8KLXN0cnVjdCBmYWNzX2Rlc2NyaXB0b3JfcmV2MSB7Ci0JY2hhciBzaWduYXR1cmVbNF07CS8qIEFTQ0lJIHRhYmxlIHNpZ25hdHVyZSAqLwotCXUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2Ygc3RydWN0dXJlIGluIGJ5dGVzICovCi0JdTMyIGhhcmR3YXJlX3NpZ25hdHVyZTsJLyogSGFyZHdhcmUgY29uZmlndXJhdGlvbiBzaWduYXR1cmUgKi8KLQl1MzIgZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsJLyogQUNQSSBPUyB3YWtpbmcgdmVjdG9yICovCi0JdTMyIGdsb2JhbF9sb2NrOwkvKiBHbG9iYWwgTG9jayAqLworCisvKiAwOiBBU0YgSW5mb3JtYXRpb24gKi8KKworc3RydWN0IGFjcGlfYXNmX2luZm8geworCUFDUElfQVNGX0hFQURFUl9ERUYgdTggbWluX3Jlc2V0X3ZhbHVlOworCXU4IG1pbl9wb2xsX2ludGVydmFsOworCXUxNiBzeXN0ZW1faWQ7CisJdTMyIG1mZ19pZDsKKwl1OCBmbGFnczsKKwl1OCByZXNlcnZlZDJbM107Cit9OworCisvKiAxOiBBU0YgQWxlcnRzICovCisKK3N0cnVjdCBhY3BpX2FzZl9hbGVydCB7CisJQUNQSV9BU0ZfSEVBREVSX0RFRiB1OCBhc3NlcnRfbWFzazsKKwl1OCBkZWFzc2VydF9tYXNrOworCXU4IGFsZXJ0czsKKwl1OCBkYXRhX2xlbmd0aDsKKwl1OCBhcnJheVsxXTsKK307CisKKy8qIDI6IEFTRiBSZW1vdGUgQ29udHJvbCAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfcmVtb3RlIHsKKwlBQ1BJX0FTRl9IRUFERVJfREVGIHU4IGNvbnRyb2xzOworCXU4IGRhdGFfbGVuZ3RoOworCXUxNiByZXNlcnZlZDI7CisJdTggYXJyYXlbMV07Cit9OworCisvKiAzOiBBU0YgUk1DUCBCb290IE9wdGlvbnMgKi8KKworc3RydWN0IGFjcGlfYXNmX3JtY3AgeworCUFDUElfQVNGX0hFQURFUl9ERUYgdTggY2FwYWJpbGl0aWVzWzddOworCXU4IGNvbXBsZXRpb25fY29kZTsKKwl1MzIgZW50ZXJwcmlzZV9pZDsKKwl1OCBjb21tYW5kOworCXUxNiBwYXJhbWV0ZXI7CisJdTE2IGJvb3Rfb3B0aW9uczsKKwl1MTYgb2VtX3BhcmFtZXRlcnM7Cit9OworCisvKiA0OiBBU0YgQWRkcmVzcyAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfYWRkcmVzcyB7CisJQUNQSV9BU0ZfSEVBREVSX0RFRiB1OCBlcHJvbV9hZGRyZXNzOworCXU4IGRldmljZXM7CisJdTggc21idXNfYWRkcmVzc2VzWzFdOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBCT09UIC0gU2ltcGxlIEJvb3QgRmxhZyBUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2Jvb3QgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1OCBjbW9zX2luZGV4OwkvKiBJbmRleCBpbiBDTU9TIFJBTSBmb3IgdGhlIGJvb3QgcmVnaXN0ZXIgKi8KKwl1OCByZXNlcnZlZFszXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ1BFUCAtIENvcnJlY3RlZCBQbGF0Zm9ybSBFcnJvciBQb2xsaW5nIHRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfY3BlcCB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHU2NCByZXNlcnZlZDsKK307CisKKy8qIFN1YnRhYmxlICovCisKK3N0cnVjdCBhY3BpX2NwZXBfcG9sbGluZyB7CisJdTggdHlwZTsKKwl1OCBsZW5ndGg7CisJdTggcHJvY2Vzc29yX2lkOwkvKiBQcm9jZXNzb3IgSUQgKi8KKwl1OCBwcm9jZXNzb3JfZWlkOwkvKiBQcm9jZXNzb3IgRUlEICovCisJdTMyIHBvbGxpbmdfaW50ZXJ2YWw7CS8qIFBvbGxpbmcgaW50ZXJ2YWwgKG1zZWMpICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERCR1AgLSBEZWJ1ZyBQb3J0IHRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfZGJncCB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHU4IGludGVyZmFjZV90eXBlOwkvKiAwPWZ1bGwgMTY1NTAsIDE9c3Vic2V0IG9mIDE2NTUwICovCisJdTggcmVzZXJ2ZWRbM107CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGRlYnVnX3BvcnQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEVDRFQgLSBFbWJlZGRlZCBDb250cm9sbGVyIEJvb3QgUmVzb3VyY2VzIFRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGVjX2Jvb3RfcmVzb3VyY2VzIHsKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGVjX2NvbnRyb2w7CS8qIEFkZHJlc3Mgb2YgRUMgY29tbWFuZC9zdGF0dXMgcmVnaXN0ZXIgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgZWNfZGF0YTsJLyogQWRkcmVzcyBvZiBFQyBkYXRhIHJlZ2lzdGVyICovCisJdTMyIHVpZDsJCS8qIFVuaXF1ZSBJRCAtIG11c3QgYmUgc2FtZSBhcyB0aGUgRUMgX1VJRCBtZXRob2QgKi8KKwl1OCBncGVfYml0OwkJLyogVGhlIEdQRSBmb3IgdGhlIEVDICovCisJdTggZWNfaWRbMV07CQkvKiBGdWxsIG5hbWVwYXRoIG9mIHRoZSBFQyBpbiB0aGUgQUNQSSBuYW1lc3BhY2UgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSFBFVCAtIEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIHRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfaHBldF90YWJsZSB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHUzMiBoYXJkd2FyZV9pZDsJLyogSGFyZHdhcmUgSUQgb2YgZXZlbnQgdGltZXIgYmxvY2sgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgYmFzZV9hZGRyZXNzOwkvKiBBZGRyZXNzIG9mIGV2ZW50IHRpbWVyIGJsb2NrICovCisJdTggaHBldF9udW1iZXI7CQkvKiBIUEVUIHNlcXVlbmNlIG51bWJlciAqLworCXUxNiBjbG9ja190aWNrOwkJLyogTWFpbiBjb3VudGVyIG1pbiB0aWNrLCBwZXJpb2RpYyBtb2RlICovCisJdTggYXR0cmlidXRlczsKK307CisKKyNpZiAwCQkJCS8qIEhQRVQgZmxhZ3MgdG8gYmUgY29udmVydGVkIHRvIG1hY3JvcyAqLworc3RydWN0IHsJCQkvKiBGbGFncyAoOCBiaXRzKSAqLworCXU4IHBhZ2VfcHJvdGVjdDoxOwkvKiAwMDogICAgTm8gcGFnZSBwcm90ZWN0aW9uICovCisJdTggcGFnZV9wcm90ZWN0NDoxOwkvKiAwMTogICAgNF9rQiBwYWdlIHByb3RlY3RlZCAqLworCXU4IHBhZ2VfcHJvdGVjdDY0OjE7CS8qIDAyOiAgICA2NF9rQiBwYWdlIHByb3RlY3RlZCAqLworCSB1ODo1OwkJCS8qIDAzLTA3OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCit9IGZsYWdzOworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTUFEVCAtIE11bHRpcGxlIEFQSUMgRGVzY3JpcHRpb24gVGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgbXVsdGlwbGVfYXBpY190YWJsZSB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHUzMiBsb2NhbF9hcGljX2FkZHJlc3M7CS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgbG9jYWwgQVBJQyAqLwogCiAJLyogRmxhZ3MgKDMyIGJpdHMpICovCiAKLQl1OCBTNGJpb3NfZjoxOwkJLyogMDA6ICAgIFM0QklPUyBzdXBwb3J0IGlzIHByZXNlbnQgKi8KKwl1OCBQQ0FUY29tcGF0OjE7CS8qIDAwOiAgICBTeXN0ZW0gYWxzbyBoYXMgZHVhbCA4MjU5cyAqLwogCSB1ODo3OwkJCS8qIDAxLTA3OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCiAJdTggcmVzZXJ2ZWQxWzNdOwkvKiAwOC0zMTogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCi0JdTggcmVzZXJ2ZWQyWzQwXTsJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwogfTsKIAorLyogVmFsdWVzIGZvciBNQURUIFBDQVRDb21wYXQgKi8KKworI2RlZmluZSBEVUFMX1BJQyAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1VTFRJUExFX0FQSUMgICAgICAgICAgIDEKKworLyogQ29tbW9uIE1BRFQgU3ViLXRhYmxlIGhlYWRlciAqLworCisjZGVmaW5lIEFQSUNfSEVBREVSX0RFRiBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisKK3N0cnVjdCBhcGljX2hlYWRlciB7CitBUElDX0hFQURFUl9ERUZ9OworCisvKiBWYWx1ZXMgZm9yIFR5cGUgaW4gc3RydWN0IGFwaWNfaGVhZGVyICovCisKKyNkZWZpbmUgQVBJQ19QUk9DRVNTT1IgICAgICAgICAgMAorI2RlZmluZSBBUElDX0lPICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQSUNfWFJVUFRfT1ZFUlJJREUgICAgIDIKKyNkZWZpbmUgQVBJQ19OTUkgICAgICAgICAgICAgICAgMworI2RlZmluZSBBUElDX0xPQ0FMX05NSSAgICAgICAgICA0CisjZGVmaW5lIEFQSUNfQUREUkVTU19PVkVSUklERSAgIDUKKyNkZWZpbmUgQVBJQ19JT19TQVBJQyAgICAgICAgICAgNgorI2RlZmluZSBBUElDX0xPQ0FMX1NBUElDICAgICAgICA3CisjZGVmaW5lIEFQSUNfWFJVUFRfU09VUkNFICAgICAgIDgKKyNkZWZpbmUgQVBJQ19SRVNFUlZFRCAgICAgICAgICAgOQkvKiA5IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworCisvKiBGbGFnIGRlZmluaXRpb25zIGZvciBNQURUIHN1Yi10YWJsZXMgKi8KKworI2RlZmluZSBBQ1BJX01BRFRfSUZMQUdTIC8qIElOVEkgZmxhZ3MgKDE2IGJpdHMpICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGFyaXR5ICAgICAgICA6IDI7ICAgIC8qIDAwLTAxOiBQb2xhcml0eSBvZiBBUElDIEkvTyBpbnB1dCBzaWduYWxzICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcl9tb2RlICAgIDogMjsgICAgLyogMDItMDM6IFRyaWdnZXIgbW9kZSBvZiBBUElDIGlucHV0IHNpZ25hbHMgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA0OyAgICAvKiAwNC0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMTsJLyogMDgtMTU6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKworI2RlZmluZSBBQ1BJX01BRFRfTEZMQUdTIC8qIExvY2FsIFNhcGljIGZsYWdzICgzMiBiaXRzKSAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JfZW5hYmxlZDogMTsgICAvKiAwMDogICAgUHJvY2Vzc29yIGlzIHVzYWJsZSBpZiBzZXQgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA3OyAgICAvKiAwMS0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMlszXTsJLyogMDgtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKworLyogVmFsdWVzIGZvciBNUFMgSU5USSBmbGFncyAqLworCisjZGVmaW5lIFBPTEFSSVRZX0NPTkZPUk1TICAgICAgIDAKKyNkZWZpbmUgUE9MQVJJVFlfQUNUSVZFX0hJR0ggICAgMQorI2RlZmluZSBQT0xBUklUWV9SRVNFUlZFRCAgICAgICAyCisjZGVmaW5lIFBPTEFSSVRZX0FDVElWRV9MT1cgICAgIDMKKworI2RlZmluZSBUUklHR0VSX0NPTkZPUk1TICAgICAgICAwCisjZGVmaW5lIFRSSUdHRVJfRURHRSAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJJR0dFUl9SRVNFUlZFRCAgICAgICAgMgorI2RlZmluZSBUUklHR0VSX0xFVkVMICAgICAgICAgICAzCisKIC8qCi0gKiBBQ1BJIDEuMCBGaXhlZCBBQ1BJIERlc2NyaXB0aW9uIFRhYmxlIChGQURUKQorICogTUFEVCBTdWItdGFibGVzLCBjb3JyZXNwb25kIHRvIFR5cGUgaW4gc3RydWN0IGFwaWNfaGVhZGVyCiAgKi8KLXN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MSB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGCS8qIEFDUEkgY29tbW9uIHRhYmxlIGhlYWRlciAqLwotCXUzMiBmaXJtd2FyZV9jdHJsOwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIEZBQ1MgKi8KLQl1MzIgZHNkdDsJCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgRFNEVCAqLwotCXU4IG1vZGVsOwkJLyogU3lzdGVtIEludGVycnVwdCBNb2RlbCAqLwotCXU4IHJlc2VydmVkMTsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1MTYgc2NpX2ludDsJCS8qIFN5c3RlbSB2ZWN0b3Igb2YgU0NJIGludGVycnVwdCAqLwotCXUzMiBzbWlfY21kOwkJLyogUG9ydCBhZGRyZXNzIG9mIFNNSSBjb21tYW5kIHBvcnQgKi8KLQl1OCBhY3BpX2VuYWJsZTsJCS8qIFZhbHVlIHRvIHdyaXRlIHRvIHNtaV9jbWQgdG8gZW5hYmxlIEFDUEkgKi8KLQl1OCBhY3BpX2Rpc2FibGU7CS8qIFZhbHVlIHRvIHdyaXRlIHRvIHNtaV9jbWQgdG8gZGlzYWJsZSBBQ1BJICovCi0JdTggUzRiaW9zX3JlcTsJCS8qIFZhbHVlIHRvIHdyaXRlIHRvIFNNSSBDTUQgdG8gZW50ZXIgUzRCSU9TIHN0YXRlICovCi0JdTggcmVzZXJ2ZWQyOwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCXUzMiBwbTFhX2V2dF9ibGs7CS8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWEgYWNwaV9ldmVudCBSZWcgQmxrICovCi0JdTMyIHBtMWJfZXZ0X2JsazsJLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYiBhY3BpX2V2ZW50IFJlZyBCbGsgKi8KLQl1MzIgcG0xYV9jbnRfYmxrOwkvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIENvbnRyb2wgUmVnIEJsayAqLwotCXUzMiBwbTFiX2NudF9ibGs7CS8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWIgQ29udHJvbCBSZWcgQmxrICovCi0JdTMyIHBtMl9jbnRfYmxrOwkvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDIgQ29udHJvbCBSZWcgQmxrICovCi0JdTMyIHBtX3Rtcl9ibGs7CQkvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IFRpbWVyIEN0cmwgUmVnIEJsayAqLwotCXUzMiBncGUwX2JsazsJCS8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAwIFJlZyBCbGsgKi8KLQl1MzIgZ3BlMV9ibGs7CQkvKiBQb3J0IGFkZHIgb2YgR2VuZXJhbCBQdXJwb3NlIGFjcGlfZXZlbnQgMSBSZWcgQmxrICovCi0JdTggcG0xX2V2dF9sZW47CQkvKiBCeXRlIGxlbmd0aCBvZiBwb3J0cyBhdCBwbTFfeF9ldnRfYmxrICovCi0JdTggcG0xX2NudF9sZW47CQkvKiBCeXRlIGxlbmd0aCBvZiBwb3J0cyBhdCBwbTFfeF9jbnRfYmxrICovCi0JdTggcG0yX2NudF9sZW47CQkvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBwbTJfY250X2JsayAqLwotCXU4IHBtX3RtX2xlbjsJCS8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtX3RtX2JsayAqLwotCXU4IGdwZTBfYmxrX2xlbjsJLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgZ3BlMF9ibGsgKi8KLQl1OCBncGUxX2Jsa19sZW47CS8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IGdwZTFfYmxrICovCi0JdTggZ3BlMV9iYXNlOwkJLyogT2Zmc2V0IGluIGdwZSBtb2RlbCB3aGVyZSBncGUxIGV2ZW50cyBzdGFydCAqLwotCXU4IHJlc2VydmVkMzsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1MTYgcGx2bDJfbGF0OwkJLyogV29yc3QgY2FzZSBIVyBsYXRlbmN5IHRvIGVudGVyL2V4aXQgQzIgc3RhdGUgKi8KLQl1MTYgcGx2bDNfbGF0OwkJLyogV29yc3QgY2FzZSBIVyBsYXRlbmN5IHRvIGVudGVyL2V4aXQgQzMgc3RhdGUgKi8KLQl1MTYgZmx1c2hfc2l6ZTsJCS8qIFNpemUgb2YgYXJlYSByZWFkIHRvIGZsdXNoIGNhY2hlcyAqLwotCXUxNiBmbHVzaF9zdHJpZGU7CS8qIFN0cmlkZSB1c2VkIGluIGZsdXNoaW5nIGNhY2hlcyAqLwotCXU4IGR1dHlfb2Zmc2V0OwkJLyogQml0IGxvY2F0aW9uIG9mIGR1dHkgY3ljbGUgZmllbGQgaW4gcF9jbnQgcmVnICovCi0JdTggZHV0eV93aWR0aDsJCS8qIEJpdCB3aWR0aCBvZiBkdXR5IGN5Y2xlIGZpZWxkIGluIHBfY250IHJlZyAqLwotCXU4IGRheV9hbHJtOwkJLyogSW5kZXggdG8gZGF5LW9mLW1vbnRoIGFsYXJtIGluIFJUQyBDTU9TIFJBTSAqLwotCXU4IG1vbl9hbHJtOwkJLyogSW5kZXggdG8gbW9udGgtb2YteWVhciBhbGFybSBpbiBSVEMgQ01PUyBSQU0gKi8KLQl1OCBjZW50dXJ5OwkJLyogSW5kZXggdG8gY2VudHVyeSBpbiBSVEMgQ01PUyBSQU0gKi8KLQl1OCByZXNlcnZlZDRbM107CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKworLyogMDogcHJvY2Vzc29yIEFQSUMgKi8KKworc3RydWN0IG1hZHRfcHJvY2Vzc29yX2FwaWMgeworCUFQSUNfSEVBREVSX0RFRiB1OCBwcm9jZXNzb3JfaWQ7CS8qIEFDUEkgcHJvY2Vzc29yIGlkICovCisJdTggbG9jYWxfYXBpY19pZDsJLyogUHJvY2Vzc29yJ3MgbG9jYWwgQVBJQyBpZCAqLworIEFDUElfTUFEVF9MRkxBR1N9OworCisvKiAxOiBJTyBBUElDICovCisKK3N0cnVjdCBtYWR0X2lvX2FwaWMgeworCUFQSUNfSEVBREVSX0RFRiB1OCBpb19hcGljX2lkOwkvKiBJL08gQVBJQyBJRCAqLworCXU4IHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKwl1MzIgYWRkcmVzczsJCS8qIEFQSUMgcGh5c2ljYWwgYWRkcmVzcyAqLworCXUzMiBpbnRlcnJ1cHQ7CQkvKiBHbG9iYWwgc3lzdGVtIGludGVycnVwdCB3aGVyZSBJTlRJIGxpbmVzIHN0YXJ0ICovCit9OworCisvKiAyOiBJbnRlcnJ1cHQgT3ZlcnJpZGUgKi8KKworc3RydWN0IG1hZHRfaW50ZXJydXB0X292ZXJyaWRlIHsKKwlBUElDX0hFQURFUl9ERUYgdTggYnVzOwkvKiAwIC0gSVNBICovCisJdTggc291cmNlOwkJLyogSW50ZXJydXB0IHNvdXJjZSAoSVJRKSAqLworCXUzMiBpbnRlcnJ1cHQ7CQkvKiBHbG9iYWwgc3lzdGVtIGludGVycnVwdCAqLworIEFDUElfTUFEVF9JRkxBR1N9OworCisvKiAzOiBOTUkgU291cmNlcyAqLworCitzdHJ1Y3QgbWFkdF9ubWlfc291cmNlIHsKKwlBUElDX0hFQURFUl9ERUYgQUNQSV9NQURUX0lGTEFHUyB1MzIgaW50ZXJydXB0OwkvKiBHbG9iYWwgc3lzdGVtIGludGVycnVwdCAqLworfTsKKworLyogNDogTG9jYWwgQVBJQyBOTUkgKi8KKworc3RydWN0IG1hZHRfbG9jYWxfYXBpY19ubWkgeworCUFQSUNfSEVBREVSX0RFRiB1OCBwcm9jZXNzb3JfaWQ7CS8qIEFDUEkgcHJvY2Vzc29yIGlkICovCisJQUNQSV9NQURUX0lGTEFHUyB1OCBsaW50OwkvKiBMSU5UbiB0byB3aGljaCBOTUkgaXMgY29ubmVjdGVkICovCit9OworCisvKiA1OiBBZGRyZXNzIE92ZXJyaWRlICovCisKK3N0cnVjdCBtYWR0X2FkZHJlc3Nfb3ZlcnJpZGUgeworCUFQSUNfSEVBREVSX0RFRiB1MTYgcmVzZXJ2ZWQ7CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKwl1NjQgYWRkcmVzczsJCS8qIEFQSUMgcGh5c2ljYWwgYWRkcmVzcyAqLworfTsKKworLyogNjogSS9PIFNhcGljICovCisKK3N0cnVjdCBtYWR0X2lvX3NhcGljIHsKKwlBUElDX0hFQURFUl9ERUYgdTggaW9fc2FwaWNfaWQ7CS8qIEkvTyBTQVBJQyBJRCAqLworCXU4IHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCXUzMiBpbnRlcnJ1cHRfYmFzZTsJLyogR2xvY2FsIGludGVycnVwdCBmb3IgU0FQSUMgc3RhcnQgKi8KKwl1NjQgYWRkcmVzczsJCS8qIFNBUElDIHBoeXNpY2FsIGFkZHJlc3MgKi8KK307CisKKy8qIDc6IExvY2FsIFNhcGljICovCisKK3N0cnVjdCBtYWR0X2xvY2FsX3NhcGljIHsKKwlBUElDX0hFQURFUl9ERUYgdTggcHJvY2Vzc29yX2lkOwkvKiBBQ1BJIHByb2Nlc3NvciBpZCAqLworCXU4IGxvY2FsX3NhcGljX2lkOwkvKiBTQVBJQyBJRCAqLworCXU4IGxvY2FsX3NhcGljX2VpZDsJLyogU0FQSUMgRUlEICovCisJdTggcmVzZXJ2ZWRbM107CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJIEFDUElfTUFEVF9MRkxBR1MgdTMyIHByb2Nlc3Nvcl91SUQ7CS8qIE51bWVyaWMgVUlEIC0gQUNQSSAzLjAgKi8KKwljaGFyIHByb2Nlc3Nvcl91SURzdHJpbmdbMV07CS8qIFN0cmluZyBVSUQgIC0gQUNQSSAzLjAgKi8KK307CisKKy8qIDg6IFBsYXRmb3JtIEludGVycnVwdCBTb3VyY2UgKi8KKworc3RydWN0IG1hZHRfaW50ZXJydXB0X3NvdXJjZSB7CisJQVBJQ19IRUFERVJfREVGIEFDUElfTUFEVF9JRkxBR1MgdTggaW50ZXJydXB0X3R5cGU7CS8qIDE9UE1JLCAyPUlOSVQsIDM9Y29ycmVjdGVkICovCisJdTggcHJvY2Vzc29yX2lkOwkvKiBQcm9jZXNzb3IgSUQgKi8KKwl1OCBwcm9jZXNzb3JfZWlkOwkvKiBQcm9jZXNzb3IgRUlEICovCisJdTggaW9fc2FwaWNfdmVjdG9yOwkvKiBWZWN0b3IgdmFsdWUgZm9yIFBNSSBpbnRlcnJ1cHRzICovCisJdTMyIGludGVycnVwdDsJCS8qIEdsb2JhbCBzeXN0ZW0gaW50ZXJydXB0ICovCisJdTMyIGZsYWdzOwkJLyogSW50ZXJydXB0IFNvdXJjZSBGbGFncyAqLworfTsKKworI2lmZGVmIERVUExJQ0FURV9ERUZJTklUSU9OX1dJVEhfTElOVVhfQUNQSV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1DRkcgLSBQQ0kgTWVtb3J5IE1hcHBlZCBDb25maWd1cmF0aW9uIHRhYmxlIGFuZCBzdWItdGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9tY2ZnIHsKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTggcmVzZXJ2ZWRbOF07Cit9OworCitzdHJ1Y3QgYWNwaV9tY2ZnX2FsbG9jYXRpb24geworCXU2NCBiYXNlX2FkZHJlc3M7CS8qIEJhc2UgYWRkcmVzcywgcHJvY2Vzc29yLXJlbGF0aXZlICovCisJdTE2IHBjaV9zZWdtZW50OwkvKiBQQ0kgc2VnbWVudCBncm91cCBudW1iZXIgKi8KKwl1OCBzdGFydF9idXNfbnVtYmVyOwkvKiBTdGFydGluZyBQQ0kgQnVzIG51bWJlciAqLworCXU4IGVuZF9idXNfbnVtYmVyOwkvKiBGaW5hbCBQQ0kgQnVzIG51bWJlciAqLworCXUzMiByZXNlcnZlZDsKK307CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTQlNUIC0gU21hcnQgQmF0dGVyeSBTcGVjaWZpY2F0aW9uIFRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHNtYXJ0X2JhdHRlcnlfdGFibGUgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1MzIgd2FybmluZ19sZXZlbDsKKwl1MzIgbG93X2xldmVsOworCXUzMiBjcml0aWNhbF9sZXZlbDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0xJVCAtIFN5c3RlbSBMb2NhbGl0eSBEaXN0YW5jZSBJbmZvcm1hdGlvbiBUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBzeXN0ZW1fbG9jYWxpdHlfaW5mbyB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHU2NCBsb2NhbGl0eV9jb3VudDsKKwl1OCBlbnRyeVsxXVsxXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU1BDUiAtIFNlcmlhbCBQb3J0IENvbnNvbGUgUmVkaXJlY3Rpb24gdGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9zcGNyIHsKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTggaW50ZXJmYWNlX3R5cGU7CS8qIDA9ZnVsbCAxNjU1MCwgMT1zdWJzZXQgb2YgMTY1NTAgKi8KKwl1OCByZXNlcnZlZFszXTsKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3Mgc2VyaWFsX3BvcnQ7CisJdTggaW50ZXJydXB0X3R5cGU7CisJdTggcGNfaW50ZXJydXB0OworCXUzMiBpbnRlcnJ1cHQ7CisJdTggYmF1ZF9yYXRlOworCXU4IHBhcml0eTsKKwl1OCBzdG9wX2JpdHM7CisJdTggZmxvd19jb250cm9sOworCXU4IHRlcm1pbmFsX3R5cGU7CisJdTggcmVzZXJ2ZWQyOworCXUxNiBwY2lfZGV2aWNlX2lkOworCXUxNiBwY2lfdmVuZG9yX2lkOworCXU4IHBjaV9idXM7CisJdTggcGNpX2RldmljZTsKKwl1OCBwY2lfZnVuY3Rpb247CisJdTMyIHBjaV9mbGFnczsKKwl1OCBwY2lfc2VnbWVudDsKKwl1MzIgcmVzZXJ2ZWQzOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTUE1JIC0gU2VydmVyIFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJmYWNlIHRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfc3BtaSB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHU4IHJlc2VydmVkOworCXU4IGludGVyZmFjZV90eXBlOworCXUxNiBzcGVjX3JldmlzaW9uOwkvKiBWZXJzaW9uIG9mIElQTUkgKi8KKwl1OCBpbnRlcnJ1cHRfdHlwZTsKKwl1OCBncGVfbnVtYmVyOwkJLyogR1BFIGFzc2lnbmVkICovCisJdTggcmVzZXJ2ZWQyOworCXU4IHBjaV9kZXZpY2VfZmxhZzsKKwl1MzIgaW50ZXJydXB0OworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBpcG1pX3JlZ2lzdGVyOworCXU4IHBjaV9zZWdtZW50OworCXU4IHBjaV9idXM7CisJdTggcGNpX2RldmljZTsKKwl1OCBwY2lfZnVuY3Rpb247Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNSQVQgLSBTeXN0ZW0gUmVzb3VyY2UgQWZmaW5pdHkgVGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3Qgc3lzdGVtX3Jlc291cmNlX2FmZmluaXR5IHsKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTMyIHJlc2VydmVkMTsJLyogTXVzdCBiZSB2YWx1ZSAnMScgKi8KKwl1NjQgcmVzZXJ2ZWQyOwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworfTsKKworLyogU1JBVCBjb21tb24gc3ViLXRhYmxlIGhlYWRlciAqLworCisjZGVmaW5lIFNSQVRfU1VCVEFCTEVfSEVBREVSIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7IFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKworLyogVmFsdWVzIGZvciBUeXBlIGFib3ZlICovCisKKyNkZWZpbmUgU1JBVF9DUFVfQUZGSU5JVFkgICAgICAgMAorI2RlZmluZSBTUkFUX01FTU9SWV9BRkZJTklUWSAgICAxCisjZGVmaW5lIFNSQVRfUkVTRVJWRUQgICAgICAgICAgIDIKKworLyogU1JBVCBzdWItdGFibGVzICovCisKK3N0cnVjdCBzdGF0aWNfcmVzb3VyY2VfYWxsb2MgeworCVNSQVRfU1VCVEFCTEVfSEVBREVSIHU4IHByb3hpbWl0eV9kb21haW5fbG87CisJdTggYXBpY19pZDsKIAogCS8qIEZsYWdzICgzMiBiaXRzKSAqLwogCi0JdTggd2JfaW52ZDoxOwkJLyogMDA6ICAgIFRoZSB3YmludmQgaW5zdHJ1Y3Rpb24gd29ya3MgcHJvcGVybHkgKi8KLQl1OCB3Yl9pbnZkX2ZsdXNoOjE7CS8qIDAxOiAgICBUaGUgd2JpbnZkIGZsdXNoZXMgYnV0IGRvZXMgbm90IGludmFsaWRhdGUgKi8KLQl1OCBwcm9jX2MxOjE7CQkvKiAwMjogICAgQWxsIHByb2Nlc3NvcnMgc3VwcG9ydCBDMSBzdGF0ZSAqLwotCXU4IHBsdmwyX3VwOjE7CQkvKiAwMzogICAgQzIgc3RhdGUgd29ya3Mgb24gTVAgc3lzdGVtICovCi0JdTggcHdyX2J1dHRvbjoxOwkvKiAwNDogICAgUG93ZXIgYnV0dG9uIGlzIGhhbmRsZWQgYXMgYSBnZW5lcmljIGZlYXR1cmUgKi8KLQl1OCBzbGVlcF9idXR0b246MTsJLyogMDU6ICAgIFNsZWVwIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlLCBvciBub3QgcHJlc2VudCAqLwotCXU4IGZpeGVkX3JUQzoxOwkJLyogMDY6ICAgIFJUQyB3YWtldXAgc3RhdCBub3QgaW4gZml4ZWQgcmVnaXN0ZXIgc3BhY2UgKi8KLQl1OCBydGNzNDoxOwkJLyogMDc6ICAgIFJUQyB3YWtldXAgc3RhdCBub3QgcG9zc2libGUgZnJvbSBTNCAqLwotCXU4IHRtcl92YWxfZXh0OjE7CS8qIDA4OiAgICB0bXJfdmFsIHdpZHRoIGlzIDMyIGJpdHMgKDAgPSAyNCBiaXRzKSAqLwotCSB1ODo3OwkJCS8qIDA5LTE1OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0JdTggcmVzZXJ2ZWQ1WzJdOwkvKiAxNi0zMTogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCXU4IGVuYWJsZWQ6MTsJCS8qIDAwOiAgICBVc2UgYWZmaW5pdHkgc3RydWN0dXJlICovCisJIHU4Ojc7CQkJLyogMDEtMDc6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKwl1OCByZXNlcnZlZDNbM107CS8qIDA4LTMxOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisKKwl1OCBsb2NhbF9zYXBpY19laWQ7CisJdTggcHJveGltaXR5X2RvbWFpbl9oaVszXTsKKwl1MzIgcmVzZXJ2ZWQ0OwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwogfTsKIAorc3RydWN0IG1lbW9yeV9hZmZpbml0eSB7CisJU1JBVF9TVUJUQUJMRV9IRUFERVIgdTMyIHByb3hpbWl0eV9kb21haW47CisJdTE2IHJlc2VydmVkMzsKKwl1NjQgYmFzZV9hZGRyZXNzOworCXU2NCBhZGRyZXNzX2xlbmd0aDsKKwl1MzIgcmVzZXJ2ZWQ0OworCisJLyogRmxhZ3MgKDMyIGJpdHMpICovCisKKwl1OCBlbmFibGVkOjE7CQkvKiAwMDogICAgVXNlIGFmZmluaXR5IHN0cnVjdHVyZSAqLworCXU4IGhvdF9wbHVnZ2FibGU6MTsJLyogMDE6ICAgIE1lbW9yeSByZWdpb24gaXMgaG90IHBsdWdnYWJsZSAqLworCXU4IG5vbl92b2xhdGlsZToxOwkvKiAwMjogICAgTWVtb3J5IGlzIG5vbi12b2xhdGlsZSAqLworCSB1ODo1OwkJCS8qIDAzLTA3OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJdTggcmVzZXJ2ZWQ1WzNdOwkvKiAwOC0zMTogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCisJdTY0IHJlc2VydmVkNjsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVENQQSAtIFRydXN0ZWQgQ29tcHV0aW5nIFBsYXRmb3JtIEFsbGlhbmNlIHRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfdGNwYSB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHUxNiByZXNlcnZlZDsKKwl1MzIgbWF4X2xvZ19sZW5ndGg7CS8qIE1heGltdW0gbGVuZ3RoIGZvciB0aGUgZXZlbnQgbG9nIGFyZWEgKi8KKwl1NjQgbG9nX2FkZHJlc3M7CS8qIEFkZHJlc3Mgb2YgdGhlIGV2ZW50IGxvZyBhcmVhICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFdEUlQgLSBXYXRjaGRvZyBSZXNvdXJjZSBUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX3dkcnQgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1MzIgaGVhZGVyX2xlbmd0aDsJLyogV2F0Y2hkb2cgSGVhZGVyIExlbmd0aCAqLworCXU4IHBjaV9zZWdtZW50OwkJLyogUENJIFNlZ21lbnQgbnVtYmVyICovCisJdTggcGNpX2J1czsJCS8qIFBDSSBCdXMgbnVtYmVyICovCisJdTggcGNpX2RldmljZTsJCS8qIFBDSSBEZXZpY2UgbnVtYmVyICovCisJdTggcGNpX2Z1bmN0aW9uOwkvKiBQQ0kgRnVuY3Rpb24gbnVtYmVyICovCisJdTMyIHRpbWVyX3BlcmlvZDsJLyogUGVyaW9kIG9mIG9uZSB0aW1lciBjb3VudCAobXNlYykgKi8KKwl1MzIgbWF4X2NvdW50OwkJLyogTWF4aW11bSBjb3VudGVyIHZhbHVlIHN1cHBvcnRlZCAqLworCXUzMiBtaW5fY291bnQ7CQkvKiBNaW5pbXVtIGNvdW50ZXIgdmFsdWUgKi8KKwl1OCBmbGFnczsKKwl1OCByZXNlcnZlZFszXTsKKwl1MzIgZW50cmllczsJCS8qIE51bWJlciBvZiB3YXRjaGRvZyBlbnRyaWVzIHRoYXQgZm9sbG93ICovCit9OworCisjaWYgMAkJCQkvKiBGbGFncywgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gbWFjcm9zICovCit1OCBlbmFibGVkOjE7CQkJLyogMDA6ICAgIFRpbWVyIGVuYWJsZWQgKi8KK3U4OjY7CQkJCS8qIDAxLTA2OiBSZXNlcnZlZCAqLwordTggc2xlZXBfc3RvcDoxOwkJLyogMDc6ICAgIFRpbWVyIHN0b3BwZWQgaW4gc2xlZXAgc3RhdGUgKi8KKyNlbmRpZgorCisvKiBNYWNyb3MgdXNlZCB0byBnZW5lcmF0ZSBvZmZzZXRzIHRvIHNwZWNpZmljIHRhYmxlIGZpZWxkcyAqLworCisjZGVmaW5lIEFDUElfQVNGMF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfYXNmX2luZm8sZikKKyNkZWZpbmUgQUNQSV9BU0YxX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV9hc2ZfYWxlcnQsZikKKyNkZWZpbmUgQUNQSV9BU0YyX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV9hc2ZfcmVtb3RlLGYpCisjZGVmaW5lIEFDUElfQVNGM19PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfYXNmX3JtY3AsZikKKyNkZWZpbmUgQUNQSV9BU0Y0X09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV9hc2ZfYWRkcmVzcyxmKQorI2RlZmluZSBBQ1BJX0JPT1RfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX3RhYmxlX2Jvb3QsZikKKyNkZWZpbmUgQUNQSV9DUEVQX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV90YWJsZV9jcGVwLGYpCisjZGVmaW5lIEFDUElfQ1BFUDBfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfY3BlcF9wb2xsaW5nLGYpCisjZGVmaW5lIEFDUElfREJHUF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfdGFibGVfZGJncCxmKQorI2RlZmluZSBBQ1BJX0VDRFRfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBlY19ib290X3Jlc291cmNlcyxmKQorI2RlZmluZSBBQ1BJX0hQRVRfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBocGV0X3RhYmxlLGYpCisjZGVmaW5lIEFDUElfTUFEVF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG11bHRpcGxlX2FwaWNfdGFibGUsZikKKyNkZWZpbmUgQUNQSV9NQURUMF9PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9wcm9jZXNzb3JfYXBpYyxmKQorI2RlZmluZSBBQ1BJX01BRFQxX09GRlNFVChmKSAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBtYWR0X2lvX2FwaWMsZikKKyNkZWZpbmUgQUNQSV9NQURUMl9PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9pbnRlcnJ1cHRfb3ZlcnJpZGUsZikKKyNkZWZpbmUgQUNQSV9NQURUM19PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9ubWlfc291cmNlLGYpCisjZGVmaW5lIEFDUElfTUFEVDRfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG1hZHRfbG9jYWxfYXBpY19ubWksZikKKyNkZWZpbmUgQUNQSV9NQURUNV9PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9hZGRyZXNzX292ZXJyaWRlLGYpCisjZGVmaW5lIEFDUElfTUFEVDZfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG1hZHRfaW9fc2FwaWMsZikKKyNkZWZpbmUgQUNQSV9NQURUN19PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9sb2NhbF9zYXBpYyxmKQorI2RlZmluZSBBQ1BJX01BRFQ4X09GRlNFVChmKSAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBtYWR0X2ludGVycnVwdF9zb3VyY2UsZikKKyNkZWZpbmUgQUNQSV9NQURUSF9PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYXBpY19oZWFkZXIsZikKKyNkZWZpbmUgQUNQSV9NQ0ZHX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV90YWJsZV9tY2ZnLGYpCisjZGVmaW5lIEFDUElfTUNGRzBfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uLGYpCisjZGVmaW5lIEFDUElfU0JTVF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IHNtYXJ0X2JhdHRlcnlfdGFibGUsZikKKyNkZWZpbmUgQUNQSV9TTElUX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3Qgc3lzdGVtX2xvY2FsaXR5X2luZm8sZikKKyNkZWZpbmUgQUNQSV9TUENSX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV90YWJsZV9zcGNyLGYpCisjZGVmaW5lIEFDUElfU1BNSV9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfdGFibGVfc3BtaSxmKQorI2RlZmluZSBBQ1BJX1NSQVRfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBzeXN0ZW1fcmVzb3VyY2VfYWZmaW5pdHksZikKKyNkZWZpbmUgQUNQSV9TUkFUMF9PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3Qgc3RhdGljX3Jlc291cmNlX2FsbG9jLGYpCisjZGVmaW5lIEFDUElfU1JBVDFfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG1lbW9yeV9hZmZpbml0eSxmKQorI2RlZmluZSBBQ1BJX1RDUEFfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX3RhYmxlX3RjcGEsZikKKyNkZWZpbmUgQUNQSV9XRFJUX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV90YWJsZV93ZHJ0LGYpCisKKyNkZWZpbmUgQUNQSV9IUEVUX0ZMQUdfT0ZGU0VUKGYsbykgICAgICBBQ1BJX0ZMQUdfT0ZGU0VUIChzdHJ1Y3QgaHBldF90YWJsZSxmLG8pCisjZGVmaW5lIEFDUElfU1JBVDBfRkxBR19PRkZTRVQoZixvKSAgICAgQUNQSV9GTEFHX09GRlNFVCAoc3RydWN0IHN0YXRpY19yZXNvdXJjZV9hbGxvYyxmLG8pCisjZGVmaW5lIEFDUElfU1JBVDFfRkxBR19PRkZTRVQoZixvKSAgICAgQUNQSV9GTEFHX09GRlNFVCAoc3RydWN0IG1lbW9yeV9hZmZpbml0eSxmLG8pCisjZGVmaW5lIEFDUElfTUFEVF9GTEFHX09GRlNFVChmLG8pICAgICAgQUNQSV9GTEFHX09GRlNFVCAoc3RydWN0IG11bHRpcGxlX2FwaWNfdGFibGUsZixvKQorI2RlZmluZSBBQ1BJX01BRFQwX0ZMQUdfT0ZGU0VUKGYsbykgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBtYWR0X3Byb2Nlc3Nvcl9hcGljLGYsbykKKyNkZWZpbmUgQUNQSV9NQURUMl9GTEFHX09GRlNFVChmLG8pICAgICBBQ1BJX0ZMQUdfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9pbnRlcnJ1cHRfb3ZlcnJpZGUsZixvKQorI2RlZmluZSBBQ1BJX01BRFQzX0ZMQUdfT0ZGU0VUKGYsbykgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBtYWR0X25taV9zb3VyY2UsZixvKQorI2RlZmluZSBBQ1BJX01BRFQ0X0ZMQUdfT0ZGU0VUKGYsbykgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBtYWR0X2xvY2FsX2FwaWNfbm1pLGYsbykKKyNkZWZpbmUgQUNQSV9NQURUN19GTEFHX09GRlNFVChmLG8pICAgICBBQ1BJX0ZMQUdfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9sb2NhbF9zYXBpYyxmLG8pCisjZGVmaW5lIEFDUElfTUFEVDhfRkxBR19PRkZTRVQoZixvKSAgICAgQUNQSV9GTEFHX09GRlNFVCAoc3RydWN0IG1hZHRfaW50ZXJydXB0X3NvdXJjZSxmLG8pCisKKy8qIFJlc2V0IHRvIGRlZmF1bHQgcGFja2luZyAqLworCiAjcHJhZ21hIHBhY2soKQogCiAjZW5kaWYJCQkJLyogX19BQ1RCTDFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKaW5kZXggZGZjN2FjMS4uNjdlZmU2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaApAQCAtNDQsMjM0ICs0NCw2IEBACiAjaWZuZGVmIF9fQUNUQkwyX0hfXwogI2RlZmluZSBfX0FDVEJMMl9IX18KIAotLyoKLSAqIFByZWZlcmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMKLSAqLwotI2RlZmluZSBQTV9VTlNQRUNJRklFRCAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUE1fREVTS1RPUCAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBNX01PQklMRSAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQTV9XT1JLU1RBVElPTiAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUE1fRU5URVJQUklTRV9TRVJWRVIgICAgICAgICAgICA0Ci0jZGVmaW5lIFBNX1NPSE9fU0VSVkVSICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQTV9BUFBMSUFOQ0VfUEMgICAgICAgICAgICAgICAgIDYKLQotLyoKLSAqIEFDUEkgQm9vdCBBcmNoIEZsYWdzCi0gKi8KLSNkZWZpbmUgQkFGX0xFR0FDWV9ERVZJQ0VTICAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgQkFGXzgwNDJfS0VZQk9BUkRfQ09OVFJPTExFUiAgICAweDAwMDIKLQotI2RlZmluZSBGQURUMl9SRVZJU0lPTl9JRCAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgRkFEVDJfTUlOVVNfUkVWSVNJT05fSUQgICAgICAgICAyCi0KLSNwcmFnbWEgcGFjaygxKQotCi0vKgotICogQUNQSSAyLjAgUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKFJTRFQpCi0gKi8KLXN0cnVjdCByc2R0X2Rlc2NyaXB0b3JfcmV2MiB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGCS8qIEFDUEkgY29tbW9uIHRhYmxlIGhlYWRlciAqLwotCXUzMiB0YWJsZV9vZmZzZXRfZW50cnlbMV07CS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIEFDUEkgdGFibGVzICovCi19OwotCi0vKgotICogQUNQSSAyLjAgRXh0ZW5kZWQgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlIChYU0RUKQotICovCi1zdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yX3JldjIgewotCUFDUElfVEFCTEVfSEVBREVSX0RFRgkvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KLQl1NjQgdGFibGVfb2Zmc2V0X2VudHJ5WzFdOwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBBQ1BJIHRhYmxlcyAqLwotfTsKLQotLyoKLSAqIEFDUEkgMi4wIEZpcm13YXJlIEFDUEkgQ29udHJvbCBTdHJ1Y3R1cmUgKEZBQ1MpCi0gKi8KLXN0cnVjdCBmYWNzX2Rlc2NyaXB0b3JfcmV2MiB7Ci0JY2hhciBzaWduYXR1cmVbNF07CS8qIEFTQ0lJIHRhYmxlIHNpZ25hdHVyZSAqLwotCXUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2Ygc3RydWN0dXJlLCBpbiBieXRlcyAqLwotCXUzMiBoYXJkd2FyZV9zaWduYXR1cmU7CS8qIEhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gc2lnbmF0dXJlICovCi0JdTMyIGZpcm13YXJlX3dha2luZ192ZWN0b3I7CS8qIDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBGaXJtd2FyZSBXYWtpbmcgVmVjdG9yLiAqLwotCXUzMiBnbG9iYWxfbG9jazsJLyogR2xvYmFsIExvY2sgdXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gc2hhcmVkIGhhcmR3YXJlIHJlc291cmNlcyAqLwotCi0JLyogRmxhZ3MgKDMyIGJpdHMpICovCi0KLQl1OCBTNGJpb3NfZjoxOwkJLyogMDA6ICAgIFM0QklPUyBzdXBwb3J0IGlzIHByZXNlbnQgKi8KLQkgdTg6NzsJCQkvKiAwMS0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCXU4IHJlc2VydmVkMVszXTsJLyogMDgtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQotCXU2NCB4ZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsJLyogNjQtYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIEZpcm13YXJlIFdha2luZyBWZWN0b3IuICovCi0JdTggdmVyc2lvbjsJCS8qIFZlcnNpb24gb2YgdGhpcyB0YWJsZSAqLwotCXU4IHJlc2VydmVkM1szMV07CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLX07Ci0KLS8qCi0gKiBBQ1BJIDIuMCsgR2VuZXJpYyBBZGRyZXNzIFN0cnVjdHVyZSAoR0FTKQotICovCi1zdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgewotCXU4IGFkZHJlc3Nfc3BhY2VfaWQ7CS8qIEFkZHJlc3Mgc3BhY2Ugd2hlcmUgc3RydWN0IG9yIHJlZ2lzdGVyIGV4aXN0cy4gKi8KLQl1OCByZWdpc3Rlcl9iaXRfd2lkdGg7CS8qIFNpemUgaW4gYml0cyBvZiBnaXZlbiByZWdpc3RlciAqLwotCXU4IHJlZ2lzdGVyX2JpdF9vZmZzZXQ7CS8qIEJpdCBvZmZzZXQgd2l0aGluIHRoZSByZWdpc3RlciAqLwotCXU4IGFjY2Vzc193aWR0aDsJLyogTWluaW11bSBBY2Nlc3Mgc2l6ZSAoQUNQSSAzLjApICovCi0JdTY0IGFkZHJlc3M7CQkvKiA2NC1iaXQgYWRkcmVzcyBvZiBzdHJ1Y3Qgb3IgcmVnaXN0ZXIgKi8KLX07Ci0KLSNkZWZpbmUgRkFEVF9SRVYyX0NPTU1PTiBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9maXJtd2FyZV9jdHJsOyAgIC8qIDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIEZBQ1MgKi8gXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfZHNkdDsgICAgICAgICAgICAvKiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBEU0RUICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMTsgICAgICAgICAgLyogU3lzdGVtIEludGVycnVwdCBNb2RlbCBpc24ndCB1c2VkIGluIEFDUEkgMi4wKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVyX1BNX3Byb2ZpbGU7ICAvKiBDb252ZXlzIHByZWZlcnJlZCBwb3dlciBtYW5hZ2VtZW50IHByb2ZpbGUgdG8gT1NQTS4gKi8gXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NpX2ludDsgICAgICAgICAgICAvKiBTeXN0ZW0gdmVjdG9yIG9mIFNDSSBpbnRlcnJ1cHQgKi8gXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21pX2NtZDsgICAgICAgICAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgU01JIGNvbW1hbmQgcG9ydCAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2VuYWJsZTsgICAgICAgIC8qIFZhbHVlIHRvIHdyaXRlIHRvIHNtaV9jbWQgdG8gZW5hYmxlIEFDUEkgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9kaXNhYmxlOyAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGRpc2FibGUgQUNQSSAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTNGJpb3NfcmVxOyAgICAgICAgIC8qIFZhbHVlIHRvIHdyaXRlIHRvIFNNSSBDTUQgdG8gZW50ZXIgUzRCSU9TIHN0YXRlICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzdGF0ZV9jbnQ7ICAgICAgICAgLyogUHJvY2Vzc29yIHBlcmZvcm1hbmNlIHN0YXRlIGNvbnRyb2wqLyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbTFhX2V2dF9ibGs7ICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWEgYWNwaV9ldmVudCBSZWcgQmxrICovIFwKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMWJfZXZ0X2JsazsgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYiBhY3BpX2V2ZW50IFJlZyBCbGsgKi8gXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG0xYV9jbnRfYmxrOyAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIENvbnRyb2wgUmVnIEJsayAqLyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbTFiX2NudF9ibGs7ICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWIgQ29udHJvbCBSZWcgQmxrICovIFwKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMl9jbnRfYmxrOyAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAyIENvbnRyb2wgUmVnIEJsayAqLyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbV90bXJfYmxrOyAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgVGltZXIgQ3RybCBSZWcgQmxrICovIFwKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX2dwZTBfYmxrOyAgICAgICAgLyogUG9ydCBhZGRyIG9mIEdlbmVyYWwgUHVycG9zZSBhY3BpX2V2ZW50IDAgUmVnIEJsayAqLyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9ncGUxX2JsazsgICAgICAgIC8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAxIFJlZyBCbGsgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0xX2V2dF9sZW47ICAgICAgICAvKiBCeXRlIGxlbmd0aCBvZiBwb3J0cyBhdCBwbTFfeF9ldnRfYmxrICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMV9jbnRfbGVuOyAgICAgICAgLyogQnl0ZSBsZW5ndGggb2YgcG9ydHMgYXQgcG0xX3hfY250X2JsayAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTJfY250X2xlbjsgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtMl9jbnRfYmxrICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtX3RtX2xlbjsgICAgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgcG1fdG1fYmxrICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTBfYmxrX2xlbjsgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgZ3BlMF9ibGsgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlMV9ibGtfbGVuOyAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBncGUxX2JsayAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGUxX2Jhc2U7ICAgICAgICAgIC8qIE9mZnNldCBpbiBncGUgbW9kZWwgd2hlcmUgZ3BlMSBldmVudHMgc3RhcnQgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3N0X2NudDsgICAgICAgICAgICAvKiBTdXBwb3J0IGZvciB0aGUgX0NTVCBvYmplY3QgYW5kIEMgU3RhdGVzIGNoYW5nZSBub3RpZmljYXRpb24uKi8gXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx2bDJfbGF0OyAgICAgICAgICAvKiBXb3JzdCBjYXNlIEhXIGxhdGVuY3kgdG8gZW50ZXIvZXhpdCBDMiBzdGF0ZSAqLyBcCi0JdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHZsM19sYXQ7ICAgICAgICAgIC8qIFdvcnN0IGNhc2UgSFcgbGF0ZW5jeSB0byBlbnRlci9leGl0IEMzIHN0YXRlICovIFwKLQl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoX3NpemU7ICAgICAgICAgLyogTnVtYmVyIG9mIGZsdXNoIHN0cmlkZXMgdGhhdCBuZWVkIHRvIGJlIHJlYWQgKi8gXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfc3RyaWRlOyAgICAgICAvKiBQcm9jZXNzb3IncyBtZW1vcnkgY2FjaGUgbGluZSB3aWR0aCwgaW4gYnl0ZXMgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHV0eV9vZmZzZXQ7ICAgICAgICAvKiBQcm9jZXNzb3IncyBkdXR5IGN5Y2xlIGluZGV4IGluIHByb2Nlc3NvcidzIFBfQ05UIHJlZyovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1dHlfd2lkdGg7ICAgICAgICAgLyogUHJvY2Vzc29yJ3MgZHV0eSBjeWNsZSB2YWx1ZSBiaXQgd2lkdGggaW4gUF9DTlQgcmVnaXN0ZXIuKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5X2Fscm07ICAgICAgICAgICAvKiBJbmRleCB0byBkYXktb2YtbW9udGggYWxhcm0gaW4gUlRDIENNT1MgUkFNICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbl9hbHJtOyAgICAgICAgICAgLyogSW5kZXggdG8gbW9udGgtb2YteWVhciBhbGFybSBpbiBSVEMgQ01PUyBSQU0gKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudHVyeTsgICAgICAgICAgICAvKiBJbmRleCB0byBjZW50dXJ5IGluIFJUQyBDTU9TIFJBTSAqLyBcCi0JdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYXBjX2Jvb3RfYXJjaDsgICAgIC8qIElBLVBDIEJvb3QgQXJjaGl0ZWN0dXJlIEZsYWdzLiBTZWUgVGFibGUgNS0xMCBmb3IgZGVzY3JpcHRpb24qLwotCi0vKgotICogQUNQSSAyLjArIEZpeGVkIEFDUEkgRGVzY3JpcHRpb24gVGFibGUgKEZBRFQpCi0gKi8KLXN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGCS8qIEFDUEkgY29tbW9uIHRhYmxlIGhlYWRlciAqLwotCUZBRFRfUkVWMl9DT01NT04gdTggcmVzZXJ2ZWQyOwkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0KLQkvKiBGbGFncyAoMzIgYml0cykgKi8KLQotCXU4IHdiX2ludmQ6MTsJCS8qIDAwOiAgICBUaGUgd2JpbnZkIGluc3RydWN0aW9uIHdvcmtzIHByb3Blcmx5ICovCi0JdTggd2JfaW52ZF9mbHVzaDoxOwkvKiAwMTogICAgVGhlIHdiaW52ZCBmbHVzaGVzIGJ1dCBkb2VzIG5vdCBpbnZhbGlkYXRlICovCi0JdTggcHJvY19jMToxOwkJLyogMDI6ICAgIEFsbCBwcm9jZXNzb3JzIHN1cHBvcnQgQzEgc3RhdGUgKi8KLQl1OCBwbHZsMl91cDoxOwkJLyogMDM6ICAgIEMyIHN0YXRlIHdvcmtzIG9uIE1QIHN5c3RlbSAqLwotCXU4IHB3cl9idXR0b246MTsJLyogMDQ6ICAgIFBvd2VyIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlICovCi0JdTggc2xlZXBfYnV0dG9uOjE7CS8qIDA1OiAgICBTbGVlcCBidXR0b24gaXMgaGFuZGxlZCBhcyBhIGdlbmVyaWMgZmVhdHVyZSwgb3Igbm90IHByZXNlbnQgKi8KLQl1OCBmaXhlZF9yVEM6MTsJCS8qIDA2OiAgICBSVEMgd2FrZXVwIHN0YXQgbm90IGluIGZpeGVkIHJlZ2lzdGVyIHNwYWNlICovCi0JdTggcnRjczQ6MTsJCS8qIDA3OiAgICBSVEMgd2FrZXVwIHN0YXQgbm90IHBvc3NpYmxlIGZyb20gUzQgKi8KLQl1OCB0bXJfdmFsX2V4dDoxOwkvKiAwODogICAgdG1yX3ZhbCBpcyAzMiBiaXRzIDA9MjQtYml0cyAqLwotCXU4IGRvY2tfY2FwOjE7CQkvKiAwOTogICAgRG9ja2luZyBzdXBwb3J0ZWQgKi8KLQl1OCByZXNldF9yZWdfc3VwOjE7CS8qIDEwOiAgICBTeXN0ZW0gcmVzZXQgdmlhIHRoZSBGQURUIFJFU0VUX1JFRyBzdXBwb3J0ZWQgKi8KLQl1OCBzZWFsZWRfY2FzZToxOwkvKiAxMTogICAgTm8gaW50ZXJuYWwgZXhwYW5zaW9uIGNhcGFiaWxpdGllcyBhbmQgY2FzZSBpcyBzZWFsZWQgKi8KLQl1OCBoZWFkbGVzczoxOwkJLyogMTI6ICAgIE5vIGxvY2FsIHZpZGVvIGNhcGFiaWxpdGllcyBvciBsb2NhbCBpbnB1dCBkZXZpY2VzICovCi0JdTggY3B1X3N3X3NsZWVwOjE7CS8qIDEzOiAgICBNdXN0IGV4ZWN1dGUgbmF0aXZlIGluc3RydWN0aW9uIGFmdGVyIHdyaXRpbmcgU0xQX1RZUHggcmVnaXN0ZXIgKi8KLQotCXU4IHBjaV9leHBfd2FrOjE7CS8qIDE0OiAgICBTeXN0ZW0gc3VwcG9ydHMgUENJRVhQX1dBS0UgKFNUUy9FTikgYml0cyAoQUNQSSAzLjApICovCi0JdTggdXNlX3BsYXRmb3JtX2Nsb2NrOjE7CS8qIDE1OiAgICBPU1BNIHNob3VsZCB1c2UgcGxhdGZvcm0tcHJvdmlkZWQgdGltZXIgKEFDUEkgMy4wKSAqLwotCXU4IFM0cnRjX3N0c192YWxpZDoxOwkvKiAxNjogICAgQ29udGVudHMgb2YgUlRDX1NUUyB2YWxpZCBhZnRlciBTNCB3YWtlIChBQ1BJIDMuMCkgKi8KLQl1OCByZW1vdGVfcG93ZXJfb25fY2FwYWJsZToxOwkvKiAxNzogICAgU3lzdGVtIGlzIGNvbXBhdGlibGUgd2l0aCByZW1vdGUgcG93ZXIgb24gKEFDUEkgMy4wKSAqLwotCXU4IGZvcmNlX2FwaWNfY2x1c3Rlcl9tb2RlbDoxOwkvKiAxODogICAgQWxsIGxvY2FsIEFQSUNzIG11c3QgdXNlIGNsdXN0ZXIgbW9kZWwgKEFDUEkgMy4wKSAqLwotCXU4IGZvcmNlX2FwaWNfcGh5c2ljYWxfZGVzdGluYXRpb25fbW9kZToxOwkvKiAxOTogICBhbGwgbG9jYWwgeF9hUElDcyBtdXN0IHVzZSBwaHlzaWNhbCBkZXN0IG1vZGUgKEFDUEkgMy4wKSAqLwotCSB1ODo0OwkJCS8qIDIwLTIzOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0JdTggcmVzZXJ2ZWQzOwkJLyogMjQtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyByZXNldF9yZWdpc3RlcjsJLyogUmVzZXQgcmVnaXN0ZXIgYWRkcmVzcyBpbiBHQVMgZm9ybWF0ICovCi0JdTggcmVzZXRfdmFsdWU7CQkvKiBWYWx1ZSB0byB3cml0ZSB0byB0aGUgcmVzZXRfcmVnaXN0ZXIgcG9ydCB0byByZXNldCB0aGUgc3lzdGVtICovCi0JdTggcmVzZXJ2ZWQ0WzNdOwkvKiBUaGVzZSB0aHJlZSBieXRlcyBtdXN0IGJlIHplcm8gKi8KLQl1NjQgeGZpcm13YXJlX2N0cmw7CS8qIDY0LWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIEZBQ1MgKi8KLQl1NjQgWGRzZHQ7CQkvKiA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBEU0RUICovCi0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhwbTFhX2V2dF9ibGs7CS8qIEV4dGVuZGVkIFBvd2VyIE1ndCAxYSBhY3BpX2V2ZW50IFJlZyBCbGsgYWRkcmVzcyAqLwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG0xYl9ldnRfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMWIgYWNwaV9ldmVudCBSZWcgQmxrIGFkZHJlc3MgKi8KLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeHBtMWFfY250X2JsazsJLyogRXh0ZW5kZWQgUG93ZXIgTWd0IDFhIENvbnRyb2wgUmVnIEJsayBhZGRyZXNzICovCi0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhwbTFiX2NudF9ibGs7CS8qIEV4dGVuZGVkIFBvd2VyIE1ndCAxYiBDb250cm9sIFJlZyBCbGsgYWRkcmVzcyAqLwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG0yX2NudF9ibGs7CS8qIEV4dGVuZGVkIFBvd2VyIE1ndCAyIENvbnRyb2wgUmVnIEJsayBhZGRyZXNzICovCi0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhwbV90bXJfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgVGltZXIgQ3RybCBSZWcgQmxrIGFkZHJlc3MgKi8KLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeGdwZTBfYmxrOwkvKiBFeHRlbmRlZCBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAwIFJlZyBCbGsgYWRkcmVzcyAqLwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4Z3BlMV9ibGs7CS8qIEV4dGVuZGVkIEdlbmVyYWwgUHVycG9zZSBhY3BpX2V2ZW50IDEgUmVnIEJsayBhZGRyZXNzICovCi19OwotCi0vKiAiRG93bi1yZXZ2ZWQiIEFDUEkgMi4wIEZBRFQgZGVzY3JpcHRvciAqLwotCi1zdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjJfbWludXMgewotCUFDUElfVEFCTEVfSEVBREVSX0RFRgkvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KLQlGQURUX1JFVjJfQ09NTU9OIHU4IHJlc2VydmVkMjsJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCXUzMiBmbGFnczsKLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgcmVzZXRfcmVnaXN0ZXI7CS8qIFJlc2V0IHJlZ2lzdGVyIGFkZHJlc3MgaW4gR0FTIGZvcm1hdCAqLwotCXU4IHJlc2V0X3ZhbHVlOwkJLyogVmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlc2V0X3JlZ2lzdGVyIHBvcnQgdG8gcmVzZXQgdGhlIHN5c3RlbS4gKi8KLQl1OCByZXNlcnZlZDdbM107CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLX07Ci0KLS8qIEVDRFQgLSBFbWJlZGRlZCBDb250cm9sbGVyIEJvb3QgUmVzb3VyY2VzIFRhYmxlICovCi0KLXN0cnVjdCBlY19ib290X3Jlc291cmNlcyB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBlY19jb250cm9sOwkvKiBBZGRyZXNzIG9mIEVDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCi0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGVjX2RhdGE7CS8qIEFkZHJlc3Mgb2YgRUMgZGF0YSByZWdpc3RlciAqLwotCXUzMiB1aWQ7CQkvKiBVbmlxdWUgSUQgLSBtdXN0IGJlIHNhbWUgYXMgdGhlIEVDIF9VSUQgbWV0aG9kICovCi0JdTggZ3BlX2JpdDsJCS8qIFRoZSBHUEUgZm9yIHRoZSBFQyAqLwotCXU4IGVjX2lkWzFdOwkJLyogRnVsbCBuYW1lcGF0aCBvZiB0aGUgRUMgaW4gdGhlIEFDUEkgbmFtZXNwYWNlICovCi19OwotCi0vKiBTUkFUIC0gU3lzdGVtIFJlc291cmNlIEFmZmluaXR5IFRhYmxlICovCi0KLXN0cnVjdCBzdGF0aWNfcmVzb3VyY2VfYWxsb2MgewotCXU4IHR5cGU7Ci0JdTggbGVuZ3RoOwotCXU4IHByb3hpbWl0eV9kb21haW5fbG87Ci0JdTggYXBpY19pZDsKLQotCS8qIEZsYWdzICgzMiBiaXRzKSAqLwotCi0JdTggZW5hYmxlZDoxOwkJLyogMDA6ICAgIFVzZSBhZmZpbml0eSBzdHJ1Y3R1cmUgKi8KLQkgdTg6NzsJCQkvKiAwMS0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCXU4IHJlc2VydmVkM1szXTsJLyogMDgtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQotCXU4IGxvY2FsX3NhcGljX2VpZDsKLQl1OCBwcm94aW1pdHlfZG9tYWluX2hpWzNdOwotCXUzMiByZXNlcnZlZDQ7CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi19OwotCi1zdHJ1Y3QgbWVtb3J5X2FmZmluaXR5IHsKLQl1OCB0eXBlOwotCXU4IGxlbmd0aDsKLQl1MzIgcHJveGltaXR5X2RvbWFpbjsKLQl1MTYgcmVzZXJ2ZWQzOwotCXU2NCBiYXNlX2FkZHJlc3M7Ci0JdTY0IGFkZHJlc3NfbGVuZ3RoOwotCXUzMiByZXNlcnZlZDQ7Ci0KLQkvKiBGbGFncyAoMzIgYml0cykgKi8KLQotCXU4IGVuYWJsZWQ6MTsJCS8qIDAwOiAgICBVc2UgYWZmaW5pdHkgc3RydWN0dXJlICovCi0JdTggaG90X3BsdWdnYWJsZToxOwkvKiAwMTogICAgTWVtb3J5IHJlZ2lvbiBpcyBob3QgcGx1Z2dhYmxlICovCi0JdTggbm9uX3ZvbGF0aWxlOjE7CS8qIDAyOiAgICBNZW1vcnkgaXMgbm9uLXZvbGF0aWxlICovCi0JIHU4OjU7CQkJLyogMDMtMDc6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1OCByZXNlcnZlZDVbM107CS8qIDA4LTMxOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0KLQl1NjQgcmVzZXJ2ZWQ2OwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotfTsKLQotc3RydWN0IHN5c3RlbV9yZXNvdXJjZV9hZmZpbml0eSB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGIHUzMiByZXNlcnZlZDE7CS8qIE11c3QgYmUgdmFsdWUgJzEnICovCi0JdTY0IHJlc2VydmVkMjsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLX07Ci0KLS8qIFNMSVQgLSBTeXN0ZW0gTG9jYWxpdHkgRGlzdGFuY2UgSW5mb3JtYXRpb24gVGFibGUgKi8KLQotc3RydWN0IHN5c3RlbV9sb2NhbGl0eV9pbmZvIHsKLQlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTY0IGxvY2FsaXR5X2NvdW50OwotCXU4IGVudHJ5WzFdWzFdOwotfTsKLQotI3ByYWdtYSBwYWNrKCkKKy8qIENvZGUgbW92ZWQgdG8gYm90aCBhY3RibC5oIGFuZCBhY3RibDEuaCAqLwogCiAjZW5kaWYJCQkJLyogX19BQ1RCTDJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAppbmRleCA3Y2E4OWNkLi43N2NmMTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTQ0LDYgKzQ0LDggQEAKICNpZm5kZWYgX19BQ1RZUEVTX0hfXwogI2RlZmluZSBfX0FDVFlQRVNfSF9fCiAKKy8qIGFjcGlzcmM6c3RydWN0X2RlZnMgLS0gZm9yIGFjcGlzcmMgY29udmVyc2lvbiAqLworCiAvKgogICogQUNQSV9NQUNISU5FX1dJRFRIIG11c3QgYmUgc3BlY2lmaWVkIGluIGFuIE9TLSBvciBjb21waWxlci1kZXBlbmRlbnQgaGVhZGVyCiAgKiBhbmQgbXVzdCBiZSBlaXRoZXIgMTYsIDMyLCBvciA2NApAQCAtMTU0LDcgKzE1Niw2IEBACiAjZGVmaW5lIEFDUElfTUFYX1BUUiAgICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UNjRfTUFYCiAjZGVmaW5lIEFDUElfU0laRV9NQVggICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UNjRfTUFYCiAKLSNkZWZpbmUgQUxJR05FRF9BRERSRVNTX0JPVU5EQVJZICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIEFDUElfVVNFX05BVElWRV9ESVZJREUJLyogSGFzIG5hdGl2ZSA2NC1iaXQgaW50ZWdlciBzdXBwb3J0ICovCiAKIC8qCkBAIC0xOTUsOCArMTk2LDYgQEAKICNkZWZpbmUgQUNQSV9NQVhfUFRSICAgICAgICAgICAgICAgICAgICBBQ1BJX1VJTlQzMl9NQVgKICNkZWZpbmUgQUNQSV9TSVpFX01BWCAgICAgICAgICAgICAgICAgICBBQ1BJX1VJTlQzMl9NQVgKIAotI2RlZmluZSBBTElHTkVEX0FERFJFU1NfQk9VTkRBUlkgICAgICAgIDB4MDAwMDAwMDQKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBUeXBlcyBzcGVjaWZpYyB0byAxNi1iaXQgdGFyZ2V0cwpAQCAtMjIzLDcgKzIyMiw2IEBACiAjZGVmaW5lIEFDUElfTUFYX1BUUiAgICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UMTZfTUFYCiAjZGVmaW5lIEFDUElfU0laRV9NQVggICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UMTZfTUFYCiAKLSNkZWZpbmUgQUxJR05FRF9BRERSRVNTX0JPVU5EQVJZICAgICAgICAweDAwMDAwMDAyCiAjZGVmaW5lIEFDUElfVVNFX05BVElWRV9ESVZJREUJLyogTm8gNjQtYml0IGludGVnZXJzLCBvayB0byB1c2UgbmF0aXZlIGRpdmlkZSAqLwogCiAvKiA2NC1iaXQgaW50ZWdlcnMgY2Fubm90IGJlIHN1cHBvcnRlZCAqLwpAQCAtMjU0LDcgKzI1Miw3IEBACiAvKiBVc2UgQzk5IHVpbnRwdHJfdCBmb3IgcG9pbnRlciBjYXN0aW5nIGlmIGF2YWlsYWJsZSwgInZvaWQgKiIgb3RoZXJ3aXNlICovCiAKICNpZm5kZWYgYWNwaV91aW50cHRyX3QKLSNkZWZpbmUgYWNwaV91aW50cHRyX3QgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKgorI2RlZmluZSBhY3BpX3VpbnRwdHJfdCAgICAgICAgICAgICAgICAgIHZvaWQgKgogI2VuZGlmCiAKIC8qCkBAIC0yNjMsNyArMjYxLDcgQEAKICAqIG1hbmFnZXIgaW1wbGVtZW50YXRpb24gaXMgdG8gYmUgdXNlZCAoQUNQSV9VU0VfTE9DQUxfQ0FDSEUpCiAgKi8KICNpZm5kZWYgYWNwaV9jYWNoZV90Ci0jZGVmaW5lIGFjcGlfY2FjaGVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWNwaV9tZW1vcnlfbGlzdAorI2RlZmluZSBhY3BpX2NhY2hlX3QgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhY3BpX21lbW9yeV9saXN0CiAjZW5kaWYKIAogLyoKQEAgLTI3MSw3ICsyNjksNyBAQAogICogbG9jayBhbmQgdW5sb2NrIE9TTCBpbnRlcmZhY2VzLgogICovCiAjaWZuZGVmIGFjcGlfY3B1X2ZsYWdzCi0jZGVmaW5lIGFjcGlfY3B1X2ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX25hdGl2ZV91aW50CisjZGVmaW5lIGFjcGlfY3B1X2ZsYWdzICAgICAgICAgICAgICAgICAgYWNwaV9uYXRpdmVfdWludAogI2VuZGlmCiAKIC8qCkBAIC0yOTIsNiArMjkwLDIxIEBACiAjZGVmaW5lIEFDUElfVU5VU0VEX1ZBUgogI2VuZGlmCiAKKy8qCisgKiBBbGwgQUNQSUNBIGZ1bmN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBhcmUKKyAqIHRhZ2dlZCB3aXRoIHRoaXMgbWFjcm8gd2hpY2ggY2FuIGJlIGRlZmluZWQgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBob3N0LgorICovCisjaWZuZGVmIEFDUElfRVhQT1JUX1NZTUJPTAorI2RlZmluZSBBQ1BJX0VYUE9SVF9TWU1CT0woc3ltYm9sKQorI2VuZGlmCisKKy8qCisgKiB0aHJlYWRfaWQgaXMgcmV0dXJuZWQgYnkgYWNwaV9vc19nZXRfdGhyZWFkX2lkLgorICovCisjaWZuZGVmIGFjcGlfdGhyZWFkX2lkCisjZGVmaW5lIGFjcGlfdGhyZWFkX2lkICAgICAgICAgICAgICAgICAgYWNwaV9uYXRpdmVfdWludAorI2VuZGlmCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogSW5kZXBlbmRlbnQgdHlwZXMKQEAgLTQ3NywxNSArNDkwLDE1IEBACiAgKi8KIHR5cGVkZWYgdTMyIGFjcGlfdGFibGVfdHlwZTsKIAotI2RlZmluZSBBQ1BJX1RBQkxFX1JTRFAgICAgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDAKLSNkZWZpbmUgQUNQSV9UQUJMRV9EU0RUICAgICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSAxCi0jZGVmaW5lIEFDUElfVEFCTEVfRkFEVCAgICAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgMgotI2RlZmluZSBBQ1BJX1RBQkxFX0ZBQ1MgICAgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDMKLSNkZWZpbmUgQUNQSV9UQUJMRV9QU0RUICAgICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSA0Ci0jZGVmaW5lIEFDUElfVEFCTEVfU1NEVCAgICAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgNQotI2RlZmluZSBBQ1BJX1RBQkxFX1hTRFQgICAgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDYKLSNkZWZpbmUgQUNQSV9UQUJMRV9NQVggICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIE5VTV9BQ1BJX1RBQkxFX1RZUEVTICAgICAgICAgICAgKEFDUElfVEFCTEVfTUFYKzEpCisjZGVmaW5lIEFDUElfVEFCTEVfSURfUlNEUCAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgMAorI2RlZmluZSBBQ1BJX1RBQkxFX0lEX0RTRFQgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDEKKyNkZWZpbmUgQUNQSV9UQUJMRV9JRF9GQURUICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSAyCisjZGVmaW5lIEFDUElfVEFCTEVfSURfRkFDUyAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgMworI2RlZmluZSBBQ1BJX1RBQkxFX0lEX1BTRFQgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDQKKyNkZWZpbmUgQUNQSV9UQUJMRV9JRF9TU0RUICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSA1CisjZGVmaW5lIEFDUElfVEFCTEVfSURfWFNEVCAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgNgorI2RlZmluZSBBQ1BJX1RBQkxFX0lEX01BWCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQUNQSV9OVU1fVEFCTEVfVFlQRVMgICAgICAgICAgICAoQUNQSV9UQUJMRV9JRF9NQVgrMSkKIAogLyoKICAqIFR5cGVzIGFzc29jaWF0ZWQgd2l0aCBBQ1BJIG5hbWVzIGFuZCBvYmplY3RzLiAgVGhlIGZpcnN0IGdyb3VwIG9mCkBAIC04MTYsNyArODI5LDcgQEAKIAl1MzIgZGVidWdfbGV2ZWw7CiAJdTMyIGRlYnVnX2xheWVyOwogCXUzMiBudW1fdGFibGVfdHlwZXM7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaW5mbyB0YWJsZV9pbmZvW05VTV9BQ1BJX1RBQkxFX1RZUEVTXTsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9pbmZvIHRhYmxlX2luZm9bQUNQSV9UQUJMRV9JRF9NQVggKyAxXTsKIH07CiAKIC8qCkBAIC04NTgsNyArODcxLDcgQEAKIAkJCQkgICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsCiAJCQkJICAgICAgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCi0jZGVmaW5lIEFDUElfREVGQVVMVF9IQU5ETEVSICAgICAgICBOVUxMCisjZGVmaW5lIEFDUElfREVGQVVMVF9IQU5ETEVSICAgICAgICAgICAgTlVMTAogCiB0eXBlZGVmCiBhY3BpX3N0YXR1cygqYWNwaV9hZHJfc3BhY2Vfc2V0dXApIChhY3BpX2hhbmRsZSByZWdpb25faGFuZGxlLApAQCAtOTExLDEyICs5MjQsMTMgQEAKICNkZWZpbmUgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgICAgICAgICAweDAxCiAjZGVmaW5lIEFDUElfU1RBX0RFVklDRV9FTkFCTEVEICAgICAgICAgMHgwMgogI2RlZmluZSBBQ1BJX1NUQV9ERVZJQ0VfVUkgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9TVEFfREVWSUNFX09LICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORyAgICAgMHgwOAorI2RlZmluZSBBQ1BJX1NUQV9ERVZJQ0VfT0sgICAgICAgICAgICAgIDB4MDgJLyogU3lub255bSAqLwogI2RlZmluZSBBQ1BJX1NUQV9CQVRURVJZX1BSRVNFTlQgICAgICAgIDB4MTAKIAogI2RlZmluZSBBQ1BJX0NPTU1PTl9PQkpfSU5GTyBcCi0JYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgIC8qIEFDUEkgb2JqZWN0IHR5cGUgKi8gXAotCWFjcGlfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUJLyogQUNQSSBvYmplY3QgTmFtZSAqLworCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgIC8qIEFDUEkgb2JqZWN0IHR5cGUgKi8gXAorCWFjcGlfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgbmFtZQkvKiBBQ1BJIG9iamVjdCBOYW1lICovCiAKIHN0cnVjdCBhY3BpX29ial9pbmZvX2hlYWRlciB7CiAJQUNQSV9DT01NT05fT0JKX0lORk87CkBAIC05NTcsNyArOTcxLDcgQEAKICAqIERlZmluaXRpb25zIGZvciBSZXNvdXJjZSBBdHRyaWJ1dGVzCiAgKi8KIHR5cGVkZWYgdTE2IGFjcGlfcnNfbGVuZ3RoOwkvKiBSZXNvdXJjZSBMZW5ndGggZmllbGQgaXMgZml4ZWQgYXQgMTYgYml0cyAqLwotdHlwZWRlZiB1MzIgYWNwaV9yc2Rlc2Nfc2l6ZTsJLyogTWF4IFJlc291cmNlIERlc2NyaXB0b3Igc2l6ZSBpcyAobGVuZ3RoKzMpID0gKDY0X2stMSkrMyAqLwordHlwZWRlZiB1MzIgYWNwaV9yc2Rlc2Nfc2l6ZTsJLyogTWF4IFJlc291cmNlIERlc2NyaXB0b3Igc2l6ZSBpcyAoTGVuZ3RoKzMpID0gKDY0X2stMSkrMyAqLwogCiAvKgogICogIE1lbW9yeSBBdHRyaWJ1dGVzCkBAIC05NzIsOCArOTg2LDggQEAKIAogLyoKICAqICBJTyBBdHRyaWJ1dGVzCi0gKiAgVGhlIElTQSBJbyByYW5nZXMgYXJlOiAgICAgbjAwMC1uMF9mZmgsIG40MDAtbjRfZmZoLCBuODAwLW44X2ZmaCwgbl9jMDAtbl9jRkZoLgotICogIFRoZSBub24tSVNBIElvIHJhbmdlcyBhcmU6IG4xMDAtbjNfZmZoLCBuNTAwLW43X2ZmaCwgbjkwMC1uX2JGZmgsIG5fY2QwLW5fZkZGaC4KKyAqICBUaGUgSVNBIElPIHJhbmdlcyBhcmU6ICAgICBuMDAwLW4wX2ZGaCwgbjQwMC1uNF9mRmgsIG44MDAtbjhfZkZoLCBuX2MwMC1uX2NGRmguCisgKiAgVGhlIG5vbi1JU0EgSU8gcmFuZ2VzIGFyZTogbjEwMC1uM19mRmgsIG41MDAtbjdfZkZoLCBuOTAwLW5fYkZGaCwgbl9jZDAtbl9mRkZoLgogICovCiAjZGVmaW5lIEFDUElfTk9OX0lTQV9PTkxZX1JBTkdFUyAgICAgICAgKHU4KSAweDAxCiAjZGVmaW5lIEFDUElfSVNBX09OTFlfUkFOR0VTICAgICAgICAgICAgKHU4KSAweDAyCkBAIC0xMTcxLDEyICsxMTg1LDEyIEBACiAvKiBGaWVsZHMgY29tbW9uIHRvIGFsbCBhZGRyZXNzIGRlc2NyaXB0b3JzLCAxNi8zMi82NCBiaXQgKi8KIAogI2RlZmluZSBBQ1BJX1JFU09VUkNFX0FERFJFU1NfQ09NTU9OIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV90eXBlOyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJfY29uc3VtZXI7IFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGU7IFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fYWRkcmVzc19maXhlZDsgXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9hZGRyZXNzX2ZpeGVkOyBcCi0JdW5pb24gYWNwaV9yZXNvdXJjZV9hdHRyaWJ1dGUgICAgICAgaW5mbzsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3R5cGU7IFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyX2NvbnN1bWVyOyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGU7IFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9hZGRyZXNzX2ZpeGVkOyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYWRkcmVzc19maXhlZDsgXAorCXVuaW9uIGFjcGlfcmVzb3VyY2VfYXR0cmlidXRlICAgaW5mbzsKIAogc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzcyB7CiBBQ1BJX1JFU09VUkNFX0FERFJFU1NfQ09NTU9OfTsKQEAgLTEyOTcsMTYgKzEzMTEsNiBAQAogCiAjZGVmaW5lIEFDUElfTkVYVF9SRVNPVVJDRShyZXMpICAgICAgICAgICAgIChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqKSgodTggKikgcmVzICsgcmVzLT5sZW5ndGgpCiAKLSNpZm5kZWYgQUNQSV9NSVNBTElHTk1FTlRfTk9UX1NVUFBPUlRFRAotI2RlZmluZSBBQ1BJX0FMSUdOX1JFU09VUkNFX1NJWkUobGVuZ3RoKSAgICAobGVuZ3RoKQotI2Vsc2UKLSNkZWZpbmUgQUNQSV9BTElHTl9SRVNPVVJDRV9TSVpFKGxlbmd0aCkgICAgQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRChsZW5ndGgpCi0jZW5kaWYKLQotLyoKLSAqIEVORDogb2YgZGVmaW5pdGlvbnMgZm9yIFJlc291cmNlIEF0dHJpYnV0ZXMKLSAqLwotCiBzdHJ1Y3QgYWNwaV9wY2lfcm91dGluZ190YWJsZSB7CiAJdTMyIGxlbmd0aDsKIAl1MzIgcGluOwpAQCAtMTMxNSw4ICsxMzE5LDQgQEAKIAljaGFyIHNvdXJjZVs0XTsJCS8qIHBhZCB0byA2NCBiaXRzIHNvIHNpemVvZigpIHdvcmtzIGluIGFsbCBjYXNlcyAqLwogfTsKIAotLyoKLSAqIEVORDogb2YgZGVmaW5pdGlvbnMgZm9yIFBDSSBSb3V0aW5nIHRhYmxlcwotICovCi0KICNlbmRpZgkJCQkvKiBfX0FDVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN1dGlscy5oIGIvaW5jbHVkZS9hY3BpL2FjdXRpbHMuaAppbmRleCAwOTI3NzY1Li5iYTAzOWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN1dGlscy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3V0aWxzLmgKQEAgLTUwLDI0ICs1MCwyNCBAQAogCiAjaWYgZGVmaW5lZChBQ1BJX0RJU0FTU0VNQkxFUikgfHwgZGVmaW5lZCAoQUNQSV9ERUJVR0dFUikKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX0JNZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2NvbmZpZ19kZWNvZGVbNF07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfY29uc3VtZV9kZWNvZGVbMl07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfREVDZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX0hFZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2lvX2RlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9MTGRlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9tYXhfZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX01FTWRlY29kZVs0XTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9taW5fZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX01UUGRlY29kZVs0XTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9STkdkZWNvZGVbNF07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfUldkZWNvZGVbMl07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfU0hSZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX1NJWmRlY29kZVs0XTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9UUlNkZWNvZGVbMl07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfVFRQZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX1RZUGRlY29kZVs0XTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9ibV9kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9jb25maWdfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfY29uc3VtZV9kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9kZWNfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfaGVfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfaW9fZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbGxfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbWF4X2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX21lbV9kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9taW5fZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbXRwX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3JuZ19kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9yd19kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9zaHJfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfc2l6X2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3Ryc19kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF90dHBfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfdHlwX2RlY29kZVtdOwogI2VuZGlmCiAKIC8qIFR5cGVzIGZvciBSZXNvdXJjZSBkZXNjcmlwdG9yIGVudHJpZXMgKi8KQEAgLTc4LDYgKzc4LDEyIEBACiAjZGVmaW5lIEFDUElfU01BTExfVkFSSUFCTEVfTEVOR1RIICAgICAgMwogCiB0eXBlZGVmCithY3BpX3N0YXR1cygqYWNwaV93YWxrX2FtbF9jYWxsYmFjaykgKHU4ICogYW1sLAorCQkJCSAgICAgIHUzMiBsZW5ndGgsCisJCQkJICAgICAgdTMyIG9mZnNldCwKKwkJCQkgICAgICB1OCByZXNvdXJjZV9pbmRleCwgdm9pZCAqKmNvbnRleHQpOworCit0eXBlZGVmCiBhY3BpX3N0YXR1cygqYWNwaV9wa2dfY2FsbGJhY2spICh1OCBvYmplY3RfdHlwZSwKIAkJCQkgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqIHNvdXJjZV9vYmplY3QsCiAJCQkJIHVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqIHN0YXRlLApAQCAtMjc3LDYgKzI4Myw4IEBACiAKIHZvaWQgYWNwaV91dF9kdW1wX2J1ZmZlcih1OCAqIGJ1ZmZlciwgdTMyIGNvdW50LCB1MzIgZGlzcGxheSwgdTMyIGNvbXBvbmVudF9pZCk7CiAKK3ZvaWQgYWNwaV91dF9kdW1wX2J1ZmZlcjIodTggKiBidWZmZXIsIHUzMiBjb3VudCwgdTMyIGRpc3BsYXkpOworCiB2b2lkIGFjcGlfdXRfcmVwb3J0X2Vycm9yKGNoYXIgKm1vZHVsZV9uYW1lLCB1MzIgbGluZV9udW1iZXIpOwogCiB2b2lkIGFjcGlfdXRfcmVwb3J0X2luZm8oY2hhciAqbW9kdWxlX25hbWUsIHUzMiBsaW5lX251bWJlcik7CkBAIC00NDUsNiArNDUzLDggQEAKIC8qCiAgKiB1dG1pc2MKICAqLwordTggYWNwaV91dF9pc19hbWxfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKIGFjcGlfc3RhdHVzIGFjcGlfdXRfYWxsb2NhdGVfb3duZXJfaWQoYWNwaV9vd25lcl9pZCAqIG93bmVyX2lkKTsKIAogdm9pZCBhY3BpX3V0X3JlbGVhc2Vfb3duZXJfaWQoYWNwaV9vd25lcl9pZCAqIG93bmVyX2lkKTsKQEAgLTQ2MCw3ICs0NzAsOSBAQAogCiB1OCBhY3BpX3V0X3ZhbGlkX2FjcGlfbmFtZSh1MzIgbmFtZSk7CiAKLXU4IGFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyYWN0ZXIoY2hhciBjaGFyYWN0ZXIpOworYWNwaV9uYW1lIGFjcGlfdXRfcmVwYWlyX25hbWUoYWNwaV9uYW1lIG5hbWUpOworCit1OCBhY3BpX3V0X3ZhbGlkX2FjcGlfY2hhcihjaGFyIGNoYXJhY3RlciwgYWNwaV9uYXRpdmVfdWludCBwb3NpdGlvbik7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX3V0X3N0cnRvdWw2NChjaGFyICpzdHJpbmcsIHUzMiBiYXNlLCBhY3BpX2ludGVnZXIgKiByZXRfaW50ZWdlcik7CkBAIC00NjksNiArNDgxLDI1IEBACiAKICNkZWZpbmUgQUNQSV9BTllfQkFTRSAgICAgICAgMAogCit1MzIgYWNwaV91dF9kd29yZF9ieXRlX3N3YXAodTMyIHZhbHVlKTsKKwordm9pZCBhY3BpX3V0X3NldF9pbnRlZ2VyX3dpZHRoKHU4IHJldmlzaW9uKTsKKworI2lmZGVmIEFDUElfREVCVUdfT1VUUFVUCit2b2lkCithY3BpX3V0X2Rpc3BsYXlfaW5pdF9wYXRobmFtZSh1OCB0eXBlLAorCQkJICAgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm9ial9oYW5kbGUsCisJCQkgICAgICBjaGFyICpwYXRoKTsKKyNlbmRpZgorCisvKgorICogdXRyZXNyYworICovCithY3BpX3N0YXR1cworYWNwaV91dF93YWxrX2FtbF9yZXNvdXJjZXModTggKiBhbWwsCisJCQkgICBhY3BpX3NpemUgYW1sX2xlbmd0aCwKKwkJCSAgIGFjcGlfd2Fsa19hbWxfY2FsbGJhY2sgdXNlcl9mdW5jdGlvbiwgdm9pZCAqKmNvbnRleHQpOworCiBhY3BpX3N0YXR1cyBhY3BpX3V0X3ZhbGlkYXRlX3Jlc291cmNlKHZvaWQgKmFtbCwgdTggKiByZXR1cm5faW5kZXgpOwogCiB1MzIgYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9sZW5ndGgodm9pZCAqYW1sKTsKQEAgLTQ4MywyMCArNTE0LDYgQEAKIGFjcGlfdXRfZ2V0X3Jlc291cmNlX2VuZF90YWcodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCiAJCQkgICAgIHU4ICoqIGVuZF90YWcpOwogCi11OCBhY3BpX3V0X2dlbmVyYXRlX2NoZWNrc3VtKHU4ICogYnVmZmVyLCB1MzIgbGVuZ3RoKTsKLQotdTMyIGFjcGlfdXRfZHdvcmRfYnl0ZV9zd2FwKHUzMiB2YWx1ZSk7Ci0KLXZvaWQgYWNwaV91dF9zZXRfaW50ZWdlcl93aWR0aCh1OCByZXZpc2lvbik7Ci0KLSNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAotdm9pZAotYWNwaV91dF9kaXNwbGF5X2luaXRfcGF0aG5hbWUodTggdHlwZSwKLQkJCSAgICAgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpvYmpfaGFuZGxlLAotCQkJICAgICAgY2hhciAqcGF0aCk7Ci0KLSNlbmRpZgotCiAvKgogICogdXRtdXRleCAtIG11dGV4IHN1cHBvcnQKICAqLwpAQCAtNTIzLDE0ICs1NDAsMTUgQEAKIAogdm9pZCAqYWNwaV91dF9hbGxvY2F0ZShhY3BpX3NpemUgc2l6ZSwgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSk7CiAKLXZvaWQgKmFjcGlfdXRfY2FsbG9jYXRlKGFjcGlfc2l6ZSBzaXplLCB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKTsKK3ZvaWQgKmFjcGlfdXRfYWxsb2NhdGVfemVyb2VkKGFjcGlfc2l6ZSBzaXplLAorCQkJICAgICAgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSk7CiAKICNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwogdm9pZCAqYWNwaV91dF9hbGxvY2F0ZV9hbmRfdHJhY2soYWNwaV9zaXplIHNpemUsCiAJCQkJIHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpOwogCi12b2lkICphY3BpX3V0X2NhbGxvY2F0ZV9hbmRfdHJhY2soYWNwaV9zaXplIHNpemUsCi0JCQkJICB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKTsKK3ZvaWQgKmFjcGlfdXRfYWxsb2NhdGVfemVyb2VkX2FuZF90cmFjayhhY3BpX3NpemUgc2l6ZSwKKwkJCQkJdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSk7CiAKIHZvaWQKIGFjcGlfdXRfZnJlZV9hbmRfdHJhY2sodm9pZCAqYWRkcmVzcywgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSk7CkBAIC01NDAsNiArNTU4LDExIEBACiAjZW5kaWYJCQkJLyogQUNQSV9GVVRVUkVfVVNBR0UgKi8KIAogdm9pZCBhY3BpX3V0X2R1bXBfYWxsb2NhdGlvbnModTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfY3JlYXRlX2xpc3QoY2hhciAqbGlzdF9uYW1lLAorCQkgICAgdTE2IG9iamVjdF9zaXplLCBzdHJ1Y3QgYWNwaV9tZW1vcnlfbGlzdCAqKnJldHVybl9jYWNoZSk7CisKICNlbmRpZgogCiAjZW5kaWYJCQkJLyogX0FDVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FtbGNvZGUuaCBiL2luY2x1ZGUvYWNwaS9hbWxjb2RlLmgKaW5kZXggMzc5NjRhNS4uY2YxODQyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FtbGNvZGUuaAorKysgYi9pbmNsdWRlL2FjcGkvYW1sY29kZS5oCkBAIC0xODAsOCArMTgwLDEwIEBACiAjZGVmaW5lIEFNTF9CQU5LX0ZJRUxEX09QICAgICAgICAgICAodTE2KSAweDViODcKICNkZWZpbmUgQU1MX0RBVEFfUkVHSU9OX09QICAgICAgICAgICh1MTYpIDB4NWI4OAkvKiBBQ1BJIDIuMCAqLwogCi0vKiBCb2d1cyBvcGNvZGVzICh0aGV5IGFyZSBhY3R1YWxseSB0d28gc2VwYXJhdGUgb3Bjb2RlcykgKi8KLQorLyoKKyAqIENvbWJpbmF0aW9uIG9wY29kZXMgKGFjdHVhbGx5IHR3byBvbmUtYnl0ZSBvcGNvZGVzKQorICogVXNlZCBieSB0aGUgZGlzYXNzZW1ibGVyIGFuZCBpX2FTTCBjb21waWxlcgorICovCiAjZGVmaW5lIEFNTF9MR1JFQVRFUkVRVUFMX09QICAgICAgICAodTE2KSAweDkyOTUKICNkZWZpbmUgQU1MX0xMRVNTRVFVQUxfT1AgICAgICAgICAgICh1MTYpIDB4OTI5NAogI2RlZmluZSBBTUxfTE5PVEVRVUFMX09QICAgICAgICAgICAgKHUxNikgMHg5MjkzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYW1scmVzcmMuaCBiL2luY2x1ZGUvYWNwaS9hbWxyZXNyYy5oCmluZGV4IGZiNDczNTMuLmJlMDM4MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hbWxyZXNyYy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hbWxyZXNyYy5oCkBAIC00MiwzOSArNDIsNDUgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCisvKiBhY3Bpc3JjOnN0cnVjdF9kZWZzIC0tIGZvciBhY3Bpc3JjIGNvbnZlcnNpb24gKi8KKwogI2lmbmRlZiBfX0FNTFJFU1JDX0gKICNkZWZpbmUgX19BTUxSRVNSQ19ICiAKLSNkZWZpbmUgQVNMX1JFU05BTUVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICJfQURSIgotI2RlZmluZSBBU0xfUkVTTkFNRV9BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgIl9BTE4iCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0FERFJFU1NTUEFDRSAgICAgICAgICAgICAgICAiX0FTSSIKLSNkZWZpbmUgQVNMX1JFU05BTUVfQUNDRVNTU0laRSAgICAgICAgICAgICAgICAgICJfQVNaIgotI2RlZmluZSBBU0xfUkVTTkFNRV9UWVBFU1BFQ0lGSUNBVFRSSUJVVEVTICAgICAgIl9BVFQiCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0JBU0VBRERSRVNTICAgICAgICAgICAgICAgICAiX0JBUyIKLSNkZWZpbmUgQVNMX1JFU05BTUVfQlVTTUFTVEVSICAgICAgICAgICAgICAgICAgICJfQk1fIgkvKiBNYXN0ZXIoMSksIFNsYXZlKDApICovCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0RFQ09ERSAgICAgICAgICAgICAgICAgICAgICAiX0RFQyIKLSNkZWZpbmUgQVNMX1JFU05BTUVfRE1BICAgICAgICAgICAgICAgICAgICAgICAgICJfRE1BIgotI2RlZmluZSBBU0xfUkVTTkFNRV9ETUFUWVBFICAgICAgICAgICAgICAgICAgICAgIl9UWVAiCS8qIENvbXBhdGlibGUoMCksIEEoMSksIEIoMiksIEYoMykgKi8KLSNkZWZpbmUgQVNMX1JFU05BTUVfR1JBTlVMQVJJVFkgICAgICAgICAgICAgICAgICJfR1JBIgotI2RlZmluZSBBU0xfUkVTTkFNRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgIl9JTlQiCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0lOVEVSUlVQVExFVkVMICAgICAgICAgICAgICAiX0xMXyIJLyogYWN0aXZlX2xvKDEpLCBhY3RpdmVfaGkoMCkgKi8KLSNkZWZpbmUgQVNMX1JFU05BTUVfSU5URVJSVVBUU0hBUkUgICAgICAgICAgICAgICJfU0hSIgkvKiBTaGFyZWFibGUoMSksIG5vX3NoYXJlKDApICovCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0lOVEVSUlVQVFRZUEUgICAgICAgICAgICAgICAiX0hFXyIJLyogRWRnZSgxKSwgTGV2ZWwoMCkgKi8KLSNkZWZpbmUgQVNMX1JFU05BTUVfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICJfTEVOIgotI2RlZmluZSBBU0xfUkVTTkFNRV9NRU1BVFRSSUJVVEVTICAgICAgICAgICAgICAgIl9NVFAiCS8qIE1lbW9yeSgwKSwgUmVzZXJ2ZWQoMSksIEFDUEkoMiksIE5WUygzKSAqLwotI2RlZmluZSBBU0xfUkVTTkFNRV9NRU1UWVBFICAgICAgICAgICAgICAgICAgICAgIl9NRU0iCS8qIG5vbl9jYWNoZSgwKSwgQ2FjaGVhYmxlKDEpIENhY2hlK2NvbWJpbmUoMiksIENhY2hlK3ByZWZldGNoKDMpICovCi0jZGVmaW5lIEFTTF9SRVNOQU1FX01BWEFERFIgICAgICAgICAgICAgICAgICAgICAiX01BWCIKLSNkZWZpbmUgQVNMX1JFU05BTUVfTUlOQUREUiAgICAgICAgICAgICAgICAgICAgICJfTUlOIgotI2RlZmluZSBBU0xfUkVTTkFNRV9NQVhUWVBFICAgICAgICAgICAgICAgICAgICAgIl9NQUYiCi0jZGVmaW5lIEFTTF9SRVNOQU1FX01JTlRZUEUgICAgICAgICAgICAgICAgICAgICAiX01JRiIKLSNkZWZpbmUgQVNMX1JFU05BTUVfUkVHSVNURVJCSVRPRkZTRVQgICAgICAgICAgICJfUkJPIgotI2RlZmluZSBBU0xfUkVTTkFNRV9SRUdJU1RFUkJJVFdJRFRIICAgICAgICAgICAgIl9SQlciCi0jZGVmaW5lIEFTTF9SRVNOQU1FX1JBTkdFVFlQRSAgICAgICAgICAgICAgICAgICAiX1JORyIKLSNkZWZpbmUgQVNMX1JFU05BTUVfUkVBRFdSSVRFVFlQRSAgICAgICAgICAgICAgICJfUldfIgkvKiByZWFkX29ubHkoMCksIFdyaXRlYWJsZSAoMSkgKi8KLSNkZWZpbmUgQVNMX1JFU05BTUVfVFJBTlNMQVRJT04gICAgICAgICAgICAgICAgICJfVFJBIgotI2RlZmluZSBBU0xfUkVTTkFNRV9UUkFOU1RZUEUgICAgICAgICAgICAgICAgICAgIl9UUlMiCS8qIFNwYXJzZSgxKSwgRGVuc2UoMCkgKi8KLSNkZWZpbmUgQVNMX1JFU05BTUVfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICJfVFRQIgkvKiBUcmFuc2xhdGlvbigxKSwgU3RhdGljICgwKSAqLwotI2RlZmluZSBBU0xfUkVTTkFNRV9YRkVSVFlQRSAgICAgICAgICAgICAgICAgICAgIl9TSXoiCS8qIDgoMCksIDhfYW5kMTYoMSksIDE2KDIpICovCisvKgorICogUmVzb3VyY2UgZGVzY3JpcHRvciB0YWdzLCBhcyBkZWZpbmVkIGluIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24uCisgKiBVc2VkIHRvIHN5bWJvbGljYWxseSByZWZlcmVuY2UgZmllbGRzIHdpdGhpbiBhIGRlc2NyaXB0b3IuCisgKi8KKyNkZWZpbmUgQUNQSV9SRVNUQUdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICJfQURSIgorI2RlZmluZSBBQ1BJX1JFU1RBR19BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgIl9BTE4iCisjZGVmaW5lIEFDUElfUkVTVEFHX0FERFJFU1NTUEFDRSAgICAgICAgICAgICAgICAiX0FTSSIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfQUNDRVNTU0laRSAgICAgICAgICAgICAgICAgICJfQVNaIgorI2RlZmluZSBBQ1BJX1JFU1RBR19UWVBFU1BFQ0lGSUNBVFRSSUJVVEVTICAgICAgIl9BVFQiCisjZGVmaW5lIEFDUElfUkVTVEFHX0JBU0VBRERSRVNTICAgICAgICAgICAgICAgICAiX0JBUyIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfQlVTTUFTVEVSICAgICAgICAgICAgICAgICAgICJfQk1fIgkvKiBNYXN0ZXIoMSksIFNsYXZlKDApICovCisjZGVmaW5lIEFDUElfUkVTVEFHX0RFQ09ERSAgICAgICAgICAgICAgICAgICAgICAiX0RFQyIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfRE1BICAgICAgICAgICAgICAgICAgICAgICAgICJfRE1BIgorI2RlZmluZSBBQ1BJX1JFU1RBR19ETUFUWVBFICAgICAgICAgICAgICAgICAgICAgIl9UWVAiCS8qIENvbXBhdGlibGUoMCksIEEoMSksIEIoMiksIEYoMykgKi8KKyNkZWZpbmUgQUNQSV9SRVNUQUdfR1JBTlVMQVJJVFkgICAgICAgICAgICAgICAgICJfR1JBIgorI2RlZmluZSBBQ1BJX1JFU1RBR19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgIl9JTlQiCisjZGVmaW5lIEFDUElfUkVTVEFHX0lOVEVSUlVQVExFVkVMICAgICAgICAgICAgICAiX0xMXyIJLyogYWN0aXZlX2xvKDEpLCBhY3RpdmVfaGkoMCkgKi8KKyNkZWZpbmUgQUNQSV9SRVNUQUdfSU5URVJSVVBUU0hBUkUgICAgICAgICAgICAgICJfU0hSIgkvKiBTaGFyZWFibGUoMSksIG5vX3NoYXJlKDApICovCisjZGVmaW5lIEFDUElfUkVTVEFHX0lOVEVSUlVQVFRZUEUgICAgICAgICAgICAgICAiX0hFXyIJLyogRWRnZSgxKSwgTGV2ZWwoMCkgKi8KKyNkZWZpbmUgQUNQSV9SRVNUQUdfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICJfTEVOIgorI2RlZmluZSBBQ1BJX1JFU1RBR19NRU1BVFRSSUJVVEVTICAgICAgICAgICAgICAgIl9NVFAiCS8qIE1lbW9yeSgwKSwgUmVzZXJ2ZWQoMSksIEFDUEkoMiksIE5WUygzKSAqLworI2RlZmluZSBBQ1BJX1JFU1RBR19NRU1UWVBFICAgICAgICAgICAgICAgICAgICAgIl9NRU0iCS8qIG5vbl9jYWNoZSgwKSwgQ2FjaGVhYmxlKDEpIENhY2hlK2NvbWJpbmUoMiksIENhY2hlK3ByZWZldGNoKDMpICovCisjZGVmaW5lIEFDUElfUkVTVEFHX01BWEFERFIgICAgICAgICAgICAgICAgICAgICAiX01BWCIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfTUlOQUREUiAgICAgICAgICAgICAgICAgICAgICJfTUlOIgorI2RlZmluZSBBQ1BJX1JFU1RBR19NQVhUWVBFICAgICAgICAgICAgICAgICAgICAgIl9NQUYiCisjZGVmaW5lIEFDUElfUkVTVEFHX01JTlRZUEUgICAgICAgICAgICAgICAgICAgICAiX01JRiIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfUkVHSVNURVJCSVRPRkZTRVQgICAgICAgICAgICJfUkJPIgorI2RlZmluZSBBQ1BJX1JFU1RBR19SRUdJU1RFUkJJVFdJRFRIICAgICAgICAgICAgIl9SQlciCisjZGVmaW5lIEFDUElfUkVTVEFHX1JBTkdFVFlQRSAgICAgICAgICAgICAgICAgICAiX1JORyIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfUkVBRFdSSVRFVFlQRSAgICAgICAgICAgICAgICJfUldfIgkvKiByZWFkX29ubHkoMCksIFdyaXRlYWJsZSAoMSkgKi8KKyNkZWZpbmUgQUNQSV9SRVNUQUdfVFJBTlNMQVRJT04gICAgICAgICAgICAgICAgICJfVFJBIgorI2RlZmluZSBBQ1BJX1JFU1RBR19UUkFOU1RZUEUgICAgICAgICAgICAgICAgICAgIl9UUlMiCS8qIFNwYXJzZSgxKSwgRGVuc2UoMCkgKi8KKyNkZWZpbmUgQUNQSV9SRVNUQUdfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICJfVFRQIgkvKiBUcmFuc2xhdGlvbigxKSwgU3RhdGljICgwKSAqLworI2RlZmluZSBBQ1BJX1JFU1RBR19YRkVSVFlQRSAgICAgICAgICAgICAgICAgICAgIl9TSVoiCS8qIDgoMCksIDhfYW5kMTYoMSksIDE2KDIpICovCiAKIC8qIERlZmF1bHQgc2l6ZXMgZm9yICJzbWFsbCIgcmVzb3VyY2UgZGVzY3JpcHRvcnMgKi8KIApAQCAtMTA5LDcgKzExNSw3IEBACiAgKiBTTUFMTCBkZXNjcmlwdG9ycwogICovCiAjZGVmaW5lIEFNTF9SRVNPVVJDRV9TTUFMTF9IRUFERVJfQ09NTU9OIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX3R5cGU7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX3R5cGU7CiAKIHN0cnVjdCBhbWxfcmVzb3VyY2Vfc21hbGxfaGVhZGVyIHsKIEFNTF9SRVNPVVJDRV9TTUFMTF9IRUFERVJfQ09NTU9OfTsKQEAgLTE2Miw4ICsxNjgsOCBAQAogICogTEFSR0UgZGVzY3JpcHRvcnMKICAqLwogI2RlZmluZSBBTUxfUkVTT1VSQ0VfTEFSR0VfSEVBREVSX0NPTU1PTiBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlO1wKLQl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9sZW5ndGg7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX3R5cGU7XAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfbGVuZ3RoOwogCiBzdHJ1Y3QgYW1sX3Jlc291cmNlX2xhcmdlX2hlYWRlciB7CiBBTUxfUkVTT1VSQ0VfTEFSR0VfSEVBREVSX0NPTU1PTn07CkBAIC0xOTQsOSArMjAwLDkgQEAKIH07CiAKICNkZWZpbmUgQU1MX1JFU09VUkNFX0FERFJFU1NfQ09NTU9OIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV90eXBlOyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7IFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY19mbGFnczsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3R5cGU7IFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY19mbGFnczsKIAogc3RydWN0IGFtbF9yZXNvdXJjZV9hZGRyZXNzIHsKIEFNTF9SRVNPVVJDRV9MQVJHRV9IRUFERVJfQ09NTU9OIEFNTF9SRVNPVVJDRV9BRERSRVNTX0NPTU1PTn07CkBAIC0yNjYsNiArMjcyLDcgQEAKIHVuaW9uIGFtbF9yZXNvdXJjZSB7CiAJLyogRGVzY3JpcHRvciBoZWFkZXJzICovCiAKKwl1OCBkZXNjcmlwdG9yX3R5cGU7CiAJc3RydWN0IGFtbF9yZXNvdXJjZV9zbWFsbF9oZWFkZXIgc21hbGxfaGVhZGVyOwogCXN0cnVjdCBhbWxfcmVzb3VyY2VfbGFyZ2VfaGVhZGVyIGxhcmdlX2hlYWRlcjsKIApAQCAtMjk2LDkgKzMwMyw5IEBACiAJLyogVXRpbGl0eSBvdmVybGF5cyAqLwogCiAJc3RydWN0IGFtbF9yZXNvdXJjZV9hZGRyZXNzIGFkZHJlc3M7Ci0JdTMyIHUzMl9pdGVtOwotCXUxNiB1MTZfaXRlbTsKLQl1OCBVOGl0ZW07CisJdTMyIGR3b3JkX2l0ZW07CisJdTE2IHdvcmRfaXRlbTsKKwl1OCBieXRlX2l0ZW07CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZW52LmgKaW5kZXggMjIzZWM2NC4uNDUzYTQ2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZW52LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZW52LmgKQEAgLTQ5LDMzICs0OSw0MSBAQAogICovCiAKICNpZmRlZiBBQ1BJX0xJQlJBUlkKKy8qCisgKiBOb3RlOiBUaGUgbm9uLWRlYnVnIHZlcnNpb24gb2YgdGhlIGFjcGlfbGlicmFyeSBkb2VzIG5vdCBjb250YWluIGFueQorICogZGVidWcgc3VwcG9ydCwgZm9yIG1pbmltaW1hbCBzaXplLiBUaGUgZGVidWcgdmVyc2lvbiB1c2VzIEFDUElfRlVMTF9ERUJVRworICovCiAjZGVmaW5lIEFDUElfVVNFX0xPQ0FMX0NBQ0hFCiAjZW5kaWYKIAotI2lmZGVmIEFDUElfRFVNUF9BUFAKLSNpZm5kZWYgTVNET1MKLSNkZWZpbmUgQUNQSV9ERUJVR19PVVRQVVQKLSNlbmRpZgotI2RlZmluZSBBQ1BJX0FQUExJQ0FUSU9OCi0jZGVmaW5lIEFDUElfRElTQVNTRU1CTEVSCi0jZGVmaW5lIEFDUElfTk9fTUVUSE9EX0VYRUNVVElPTgotI2VuZGlmCi0KLSNpZmRlZiBBQ1BJX0VYRUNfQVBQCi0jdW5kZWYgREVCVUdHRVJfVEhSRUFESU5HCi0jZGVmaW5lIERFQlVHR0VSX1RIUkVBRElORyAgICAgIERFQlVHR0VSX1NJTkdMRV9USFJFQURFRAotI2RlZmluZSBBQ1BJX0RFQlVHX09VVFBVVAotI2RlZmluZSBBQ1BJX0FQUExJQ0FUSU9OCi0jZGVmaW5lIEFDUElfREVCVUdHRVIKLSNkZWZpbmUgQUNQSV9ESVNBU1NFTUJMRVIKLSNkZWZpbmUgQUNQSV9NVVRFWF9ERUJVRwotI2VuZGlmCi0KICNpZmRlZiBBQ1BJX0FTTF9DT01QSUxFUgogI2RlZmluZSBBQ1BJX0RFQlVHX09VVFBVVAogI2RlZmluZSBBQ1BJX0FQUExJQ0FUSU9OCiAjZGVmaW5lIEFDUElfRElTQVNTRU1CTEVSCiAjZGVmaW5lIEFDUElfQ09OU1RBTlRfRVZBTF9PTkxZCisjZGVmaW5lIEFDUElfTEFSR0VfTkFNRVNQQUNFX05PREUKKyNkZWZpbmUgQUNQSV9EQVRBX1RBQkxFX0RJU0FTU0VNQkxZCisjZW5kaWYKKworI2lmZGVmIEFDUElfRVhFQ19BUFAKKyN1bmRlZiBERUJVR0dFUl9USFJFQURJTkcKKyNkZWZpbmUgREVCVUdHRVJfVEhSRUFESU5HICAgICAgREVCVUdHRVJfU0lOR0xFX1RIUkVBREVECisjZGVmaW5lIEFDUElfRlVMTF9ERUJVRworI2RlZmluZSBBQ1BJX0FQUExJQ0FUSU9OCisjZGVmaW5lIEFDUElfREVCVUdHRVIKKyNkZWZpbmUgQUNQSV9NVVRFWF9ERUJVRworI2RlZmluZSBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUworI2VuZGlmCisKKyNpZmRlZiBBQ1BJX0RBU01fQVBQCisjaWZuZGVmIE1TRE9TCisjZGVmaW5lIEFDUElfREVCVUdfT1VUUFVUCisjZW5kaWYKKyNkZWZpbmUgQUNQSV9BUFBMSUNBVElPTgorI2RlZmluZSBBQ1BJX0RJU0FTU0VNQkxFUgorI2RlZmluZSBBQ1BJX05PX01FVEhPRF9FWEVDVVRJT04KKyNkZWZpbmUgQUNQSV9MQVJHRV9OQU1FU1BBQ0VfTk9ERQorI2RlZmluZSBBQ1BJX0RBVEFfVEFCTEVfRElTQVNTRU1CTFkKICNlbmRpZgogCiAjaWZkZWYgQUNQSV9BUFBMSUNBVElPTgpAQCAtODMsNiArOTEsMTIgQEAKICNkZWZpbmUgQUNQSV9VU0VfTE9DQUxfQ0FDSEUKICNlbmRpZgogCisjaWZkZWYgQUNQSV9GVUxMX0RFQlVHCisjZGVmaW5lIEFDUElfREVCVUdHRVIKKyNkZWZpbmUgQUNQSV9ERUJVR19PVVRQVVQKKyNkZWZpbmUgQUNQSV9ESVNBU1NFTUJMRVIKKyNlbmRpZgorCiAvKgogICogRW52aXJvbm1lbnQgY29uZmlndXJhdGlvbi4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBpbnRlcmZhY2UgdG8gdGhlCiAgKiBsb2NhbCBnZW5lcmF0aW9uIGVudmlyb25tZW50LgpAQCAtMTM3LDcgKzE1MSw3IEBACiAjZWxpZiBkZWZpbmVkKE1TRE9TKQkJLyogTXVzdCBhcHBlYXIgYWZ0ZXIgV0lOMzIgYW5kIFdJTjY0IGNoZWNrICovCiAjaW5jbHVkZSAiYWNkb3MxNi5oIgogCi0jZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCiAjaW5jbHVkZSAiYWNmcmVlYnNkLmgiCiAKICNlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKQEAgLTE2MywxNyArMTc3LDYgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBNZW1vcnkgYWxsb2NhdGlvbiB0cmFja2luZy4gIFVzZWQgb25seSBpZgotICogMSkgVGhpcyBpcyB0aGUgZGVidWcgdmVyc2lvbgotICogMikgVGhpcyBpcyBOT1QgYSAxNi1iaXQgdmVyc2lvbiBvZiB0aGUgY29kZSAobm90IGVub3VnaCByZWFsLW1vZGUgbWVtb3J5KQotICovCi0jaWZkZWYgQUNQSV9ERUJVR19PVVRQVVQKLSNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggIT0gMTYKLSNkZWZpbmUgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKLSNlbmRpZgotI2VuZGlmCi0KIC8qISBbRW5kXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAhKi8KIAogLyoKQEAgLTI3MSw4ICsyNzQsOCBAQAogLyoKICAqIFN0b3JhZ2UgYWxpZ25tZW50IHByb3BlcnRpZXMKICAqLwotI2RlZmluZSAgX0FVUEJORCAgICAgICAgICAgICAgICAoc2l6ZW9mIChhY3BpX25hdGl2ZV91aW50KSAtIDEpCi0jZGVmaW5lICBfQUROQk5EICAgICAgICAgICAgICAgIChzaXplb2YgKGFjcGlfbmF0aXZlX3VpbnQpIC0gMSkKKyNkZWZpbmUgIF9BVVBCTkQgICAgICAgICAgICAgICAgKHNpemVvZiAoYWNwaV9uYXRpdmVfaW50KSAtIDEpCisjZGVmaW5lICBfQUROQk5EICAgICAgICAgICAgICAgIChzaXplb2YgKGFjcGlfbmF0aXZlX2ludCkgLSAxKQogCiAvKgogICogVmFyaWFibGUgYXJndW1lbnQgbGlzdCBtYWNybyBkZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKaW5kZXggMmU2ZDU0NS4uYjU2NTVhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCkBAIC01MiwyNyArNTIsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KLQotI2RlZmluZSBzdHJ0b3VsIHNpbXBsZV9zdHJ0b3VsCi0KLSNkZWZpbmUgQUNQSV9NQUNISU5FX1dJRFRIICBCSVRTX1BFUl9MT05HCi0KLS8qIFR5cGUocykgZm9yIHRoZSBPU0wgKi8KLQotI2lmZGVmIEFDUElfVVNFX0xPQ0FMX0NBQ0hFCi0jZGVmaW5lIGFjcGlfY2FjaGVfdAlzdHJ1Y3QgYWNwaV9tZW1vcnlfbGlzdAotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jZGVmaW5lIGFjcGlfY2FjaGVfdAlrbWVtX2NhY2hlX3QKLSNlbmRpZgorCisvKiBIb3N0LWRlcGVuZGVudCB0eXBlcyBhbmQgZGVmaW5lcyAqLworCisjZGVmaW5lIEFDUElfTUFDSElORV9XSURUSCAgICAgICAgICBCSVRTX1BFUl9MT05HCisjZGVmaW5lIGFjcGlfY2FjaGVfdCAgICAgICAgICAgICAgICAgICAgICAgIGttZW1fY2FjaGVfdAorI2RlZmluZSBBQ1BJX0VYUE9SVF9TWU1CT0woc3ltYm9sKSAgRVhQT1JUX1NZTUJPTChzeW1ib2wpOworI2RlZmluZSBzdHJ0b3VsICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX3N0cnRvdWwKIAogLyogRnVsbCBuYW1lc3BhY2UgcGF0aG5hbWUgbGVuZ3RoIGxpbWl0IC0gYXJiaXRyYXJ5ICovCi0KICNkZWZpbmUgQUNQSV9QQVRITkFNRV9NQVggICAgICAgICAgICAgIDI1NgogCiAjZWxzZQkJCQkvKiAhX19LRVJORUxfXyAqLwpAQCAtMTA0LDQgKzk5LDggQEAKIAogI2RlZmluZSBhY3BpX2NwdV9mbGFncyB1bnNpZ25lZCBsb25nCiAKKyNkZWZpbmUgYWNwaV90aHJlYWRfaWQgdTMyCisKK3N0YXRpYyBpbmxpbmUgYWNwaV90aHJlYWRfaWQgYWNwaV9vc19nZXRfdGhyZWFkX2lkKHZvaWQpIHsgcmV0dXJuIDA7IH0KKwogI2VuZGlmCQkJCS8qIF9fQUNMSU5VWF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDQyNTgyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAotI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICi0KLS8qIE1heCAxMjggTm9kZXMgLSBNYXJ2ZWwgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJNwotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc21wLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zbXAuaAppbmRleCA5OTUwNzA2Li5lMTQzMjEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zbXAuaApAQCAtNDUsMTAgKzQ1LDggQEAKICNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJX19oYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQogI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKIAotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcHJlc2VudF9tYXNrOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKIGV4dGVybiBpbnQgc21wX251bV9jcHVzOwotI2RlZmluZSBjcHVfcG9zc2libGVfbWFwCWNwdV9wcmVzZW50X21hc2sKKyNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcAljcHVfcHJlc2VudF9tYXAKIAogaW50IHNtcF9jYWxsX2Z1bmN0aW9uX29uX2NwdSh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLGludCByZXRyeSwgaW50IHdhaXQsIGNwdW1hc2tfdCBjcHUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvdGVybWJpdHMuaAppbmRleCBmNDgzN2ZhLi41NTQxMTAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3Rlcm1iaXRzLmgKQEAgLTE0OCw2ICsxNDgsNyBAQAogI2RlZmluZSBIVVBDTAkwMDA0MDAwMAogCiAjZGVmaW5lIENMT0NBTAkwMDEwMDAwMAorI2RlZmluZSBDTVNQQVIJICAwMTAwMDAwMDAwMDAJCS8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KICNkZWZpbmUgQ1JUU0NUUwkgIDAyMDAwMDAwMDAwMAkJLyogZmxvdyBjb250cm9sICovCiAKIC8qIGNfbGZsYWcgYml0cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL2RlYnVnLW1hY3JvLlMKaW5kZXggZTRmMWZhNS4uN2IxZmNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvZGVidWctbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hYWVjMjAwMC9kZWJ1Zy1tYWNyby5TCkBAIC05LDYgKzksNyBAQAogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlICJoYXJkd2FyZS5oIgogCQkubWFjcm8JYWRkcnVhcnQscngKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL2VudHJ5LW1hY3JvLlMKaW5kZXggZGYzMTMxMy4uMWViMzUwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hYWVjMjAwMC9lbnRyeS1tYWNyby5TCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX21jaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX21jaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODYzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfbWNpLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfbWNpLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CisgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKKyAqCisgKiBNdWx0aU1lZGlhIENhcmQgSW50ZXJmYWNlIChNQ0kpIHJlZ2lzdGVycy4KKyAqIEJhc2VkIG9uIEFUOTFSTTkyMDAgZGF0YXNoZWV0IHJldmlzaW9uIEUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIEFUOTFSTTkyMDBfTUNJX0gKKyNkZWZpbmUgQVQ5MVJNOTIwMF9NQ0lfSAorCisjZGVmaW5lIEFUOTFfTUNJX0NSCQkweDAwCQkvKiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01DSV9NQ0lFTgkJKDEgPDwgIDApCS8qIE11bHRpLU1lZGlhIEludGVyZmFjZSBFbmFibGUgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX01DSURJUwkJKDEgPDwgIDEpCS8qIE11bHRpLU1lZGlhIEludGVyZmFjZSBEaXNhYmxlICovCisjZGVmaW5lCQlBVDkxX01DSV9QV1NFTgkJKDEgPDwgIDIpCS8qIFBvd2VyIFNhdmUgTW9kZSBFbmFibGUgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1BXU0RJUwkJKDEgPDwgIDMpCS8qIFBvd2VyIFNhdmUgTW9kZSBEaXNhYmxlICovCisjZGVmaW5lCQlBVDkxX01DSV9TV1JTVAkJKDEgPDwgIDcpCS8qIFNvZnR3YXJlIFJlc2V0ICovCisKKyNkZWZpbmUgQVQ5MV9NQ0lfTVIJCTB4MDQJCS8qIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0NMS0RJVgkJKDB4ZmYgIDw8ICAwKQkvKiBDbG9jayBEaXZpZGVyICovCisjZGVmaW5lCQlBVDkxX01DSV9QV1NESVYJCSgzICAgICA8PCAgOCkJLyogUG93ZXIgU2F2aW5nIERpdmlkZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1BEQ1BBRFYJKDEgICAgIDw8IDE0KQkvKiBQREMgUGFkZGluZyBWYWx1ZSAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUERDTU9ERQkoMSAgICAgPDwgMTUpCS8qIFBEQy1vcmllbnRhdGVkIE1vZGUgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0JMS0xFTiAJKDB4ZmZmIDw8IDE4KQkvKiBEYXRhIEJsb2NrIExlbmd0aCAqLworCisjZGVmaW5lIEFUOTFfTUNJX0RUT1IJCTB4MDgJCS8qIERhdGEgVGltZW91dCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfRFRPQ1lDCQkoMHhmIDw8IDApCS8qIERhdGEgVGltZW91dCBDeWNsZSBOdW1iZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0RUT01VTAkJKDcgICA8PCA0KQkvKiBEYXRhIFRpbWVvdXQgTXVsdGlwbGllciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfRFRPTVVMXzEJCSgwIDw8ICA0KQorI2RlZmluZQkJQVQ5MV9NQ0lfRFRPTVVMXzE2CQkoMSA8PCAgNCkKKyNkZWZpbmUJCUFUOTFfTUNJX0RUT01VTF8xMjgJCSgyIDw8ICA0KQorI2RlZmluZQkJQVQ5MV9NQ0lfRFRPTVVMXzI1NgkJKDMgPDwgIDQpCisjZGVmaW5lCQlBVDkxX01DSV9EVE9NVUxfMUsJCSg0IDw8ICA0KQorI2RlZmluZQkJQVQ5MV9NQ0lfRFRPTVVMXzRLCQkoNSA8PCAgNCkKKyNkZWZpbmUJCUFUOTFfTUNJX0RUT01VTF82NEsJCSg2IDw8ICA0KQorI2RlZmluZQkJQVQ5MV9NQ0lfRFRPTVVMXzFNCQkoNyA8PCAgNCkKKworI2RlZmluZSBBVDkxX01DSV9TRENSCQkweDBjCQkvKiBTRCBDYXJkIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01DSV9TRENTRUwJCSgweGYgPDwgMCkJLyogU0QgQ2FyZCBTZWxlY3RvciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfU0RDQlVTCQkoMSAgIDw8IDcpCS8qIDEtYml0IG9yIDQtYml0IGJ1cyAqLworCisjZGVmaW5lIEFUOTFfTUNJX0FSR1IJCTB4MTAJCS8qIEFyZ3VtZW50IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgQVQ5MV9NQ0lfQ01EUgkJMHgxNAkJLyogQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfQ01ETkIJCSgweDNmIDw8IDApCS8qIENvbW1hbmQgTnVtYmVyICovCisjZGVmaW5lCQlBVDkxX01DSV9SU1BUWVAJCSgzICAgIDw8IDYpCS8qIFJlc3BvbnNlIFR5cGUgKi8KKyNkZWZpbmUJCQlBVDkxX01DSV9SU1BUWVBfTk9ORQkoMCA8PCAgNikKKyNkZWZpbmUJCQlBVDkxX01DSV9SU1BUWVBfNDgJKDEgPDwgIDYpCisjZGVmaW5lCQkJQVQ5MV9NQ0lfUlNQVFlQXzEzNgkoMiA8PCAgNikKKyNkZWZpbmUJCUFUOTFfTUNJX1NQQ01ECQkoNyAgICA8PCA4KQkvKiBTcGVjaWFsIENvbW1hbmQgKi8KKyNkZWZpbmUJCQlBVDkxX01DSV9TUENNRF9OT05FCSgwIDw8ICA4KQorI2RlZmluZQkJCUFUOTFfTUNJX1NQQ01EX0lOSVQJKDEgPDwgIDgpCisjZGVmaW5lCQkJQVQ5MV9NQ0lfU1BDTURfU1lOQwkoMiA8PCAgOCkKKyNkZWZpbmUJCQlBVDkxX01DSV9TUENNRF9JQ01ECSg0IDw8ICA4KQorI2RlZmluZQkJCUFUOTFfTUNJX1NQQ01EX0lSRVNQCSg1IDw8ICA4KQorI2RlZmluZQkJQVQ5MV9NQ0lfT1BEQ01ECQkoMSA8PCAxMSkJLyogT3BlbiBEcmFpbiBDb21tYW5kICovCisjZGVmaW5lCQlBVDkxX01DSV9NQVhMQVQJCSgxIDw8IDEyKQkvKiBNYXggTGF0ZW5jeSBmb3IgQ29tbWFuZCB0byBSZXNwb25zZSAqLworI2RlZmluZQkJQVQ5MV9NQ0lfVFJDTUQJCSgzIDw8IDE2KQkvKiBUcmFuc2ZlciBDb21tYW5kICovCisjZGVmaW5lCQkJQVQ5MV9NQ0lfVFJDTURfTk9ORQkoMCA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX01DSV9UUkNNRF9TVEFSVAkoMSA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX01DSV9UUkNNRF9TVE9QCSgyIDw8IDE2KQorI2RlZmluZQkJQVQ5MV9NQ0lfVFJESVIJCSgxIDw8IDE4KQkvKiBUcmFuc2ZlciBEaXJlY3Rpb24gKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1RSVFlQCQkoMyA8PCAxOSkJLyogVHJhbnNmZXIgVHlwZSAqLworI2RlZmluZQkJCUFUOTFfTUNJX1RSVFlQX0JMT0NLCSgwIDw8IDE5KQorI2RlZmluZQkJCUFUOTFfTUNJX1RSVFlQX01VTFRJUExFCSgxIDw8IDE5KQorI2RlZmluZQkJCUFUOTFfTUNJX1RSVFlQX1NUUkVBTQkoMiA8PCAxOSkKKworI2RlZmluZSBBVDkxX01DSV9SU1BSKG4pCSgweDIwICsgKChuKSAqIDQpKQkvKiBSZXNwb25zZSBSZWdpc3RlcnMgMC0zICovCisjZGVmaW5lIEFUOTFfTUNSX1JEUgkJMHgzMAkJLyogUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfTUNSX1REUgkJMHgzNAkJLyogVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLworCisjZGVmaW5lIEFUOTFfTUNJX1NSCQkweDQwCQkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0NNRFJEWQkJKDEgPDwgIDApCS8qIENvbW1hbmQgUmVhZHkgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1JYUkRZCQkoMSA8PCAgMSkgCS8qIFJlY2VpdmVyIFJlYWR5ICovCisjZGVmaW5lCQlBVDkxX01DSV9UWFJEWQkJKDEgPDwgIDIpCS8qIFRyYW5zbWl0IFJlYWR5ICovCisjZGVmaW5lCQlBVDkxX01DSV9CTEtFCQkoMSA8PCAgMykJLyogRGF0YSBCbG9jayBFbmRlZCAqLworI2RlZmluZQkJQVQ5MV9NQ0lfRFRJUAkJKDEgPDwgIDQpCS8qIERhdGEgVHJhbnNmZXIgaW4gUHJvZ3Jlc3MgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX05PVEJVU1kJKDEgPDwgIDUpCS8qIERhdGEgTm90IEJ1c3kgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0VORFJYCQkoMSA8PCAgNikJLyogRW5kIG9mIFJYIEJ1ZmZlciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfRU5EVFgJCSgxIDw8ICA3KQkvKiBFbmQgZm8gVFggQnVmZmVyICovCisjZGVmaW5lCQlBVDkxX01DSV9SWEJVRkYJCSgxIDw8IDE0KQkvKiBSWCBCdWZmZXIgRnVsbCAqLworI2RlZmluZQkJQVQ5MV9NQ0lfVFhCVUZFCQkoMSA8PCAxNSkJLyogVFggQnVmZmVyIEVtcHR5ICovCisjZGVmaW5lCQlBVDkxX01DSV9SSU5ERQkJKDEgPDwgMTYpICAJLyogUmVzcG9uc2UgSW5kZXggRXJyb3IgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1JESVJFCQkoMSA8PCAxNykJLyogUmVzcG9uc2UgRGlyZWN0aW9uIEVycm9yICovCisjZGVmaW5lCQlBVDkxX01DSV9SQ1JDRQkJKDEgPDwgMTgpICAgCS8qIFJlc3BvbnNlIENSQyBFcnJvciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUkVOREUJCSgxIDw8IDE5KQkvKiBSZXNwb25zZSBFbmQgQml0IEVycm9yICovCisjZGVmaW5lCQlBVDkxX01DSV9SVE9FCQkoMSA8PCAyMCkJLyogUmVwb25zZSBUaW1lLW91dCBFcnJvciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfRENSQ0UJCSgxIDw8IDIxKQkvKiBEYXRhIENSQyBFcnJvciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfRFRPRQkJKDEgPDwgMjIpCS8qIERhdGEgVGltZS1vdXQgRXJyb3IgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX09WUkUJCSgxIDw8IDMwKQkvKiBPdmVycnVuICovCisjZGVmaW5lCQlBVDkxX01DSV9VTlJFCQkoMSA8PCAzMSkJLyogVW5kZXJydW4gKi8KKworI2RlZmluZSBBVDkxX01DSV9JRVIJCTB4NDQJCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9NQ0lfSURSCQkweDQ4CQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX01DSV9JTVIJCTB4NGMJCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oCmluZGV4IDJlN2QxMTMuLjRmZGVmMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2JvYXJkLmgKQEAgLTM4LDYgKzM4LDggQEAKIGV4dGVybiBpbnQgYXQ5MV9zZXJpYWxfbWFwW0FUOTFfTlJfVUFSVF07CiBleHRlcm4gaW50IGF0OTFfY29uc29sZV9wb3J0OwogCisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKwogIC8qIFVTQiBEZXZpY2UgKi8KIHN0cnVjdCBhdDkxX3VkY19kYXRhIHsKIAl1OAl2YnVzX3BpbjsJCS8qIGhpZ2ggPT0gaG9zdCBwb3dlcmluZyB1cyAqLwpAQCAtNzcsNCArNzksMjYgQEAKIH07CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKTsKIAorIC8qIE5BTkQgLyBTbWFydE1lZGlhICovCitzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgeworCXU4CQllbmFibGVfcGluOwkvKiBjaGlwIGVuYWJsZSAqLworCXU4CQlkZXRfcGluOwkvKiBjYXJkIGRldGVjdCAqLworCXU4CQlyZHlfcGluOwkvKiByZWFkeS9idXN5ICovCisJdTgJCWFsZTsJCS8qIGFkZHJlc3MgbGluZSBudW1iZXIgY29ubmVjdGVkIHRvIEFMRSAqLworCXU4CQljbGU7CQkvKiBhZGRyZXNzIGxpbmUgbnVtYmVyIGNvbm5lY3RlZCB0byBDTEUgKi8KKyAgICAgICAgc3RydWN0IG10ZF9wYXJ0aXRpb24qICgqcGFydGl0aW9uX2luZm8pKGludCwgaW50Kik7Cit9OworZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdDkxX25hbmRfZGF0YSAqZGF0YSk7CisKKyAvKiBJMkMqLwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyh2b2lkKTsKKworIC8qIFJUQyAqLwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0Yyh2b2lkKTsKKworIC8qIExFRHMgKi8KK2V4dGVybiB1OCBhdDkxX2xlZHNfY3B1OworZXh0ZXJuIHU4IGF0OTFfbGVkc190aW1lcjsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2luaXRfbGVkcyh1OCBjcHVfbGVkLCB1OCB0aW1lcl9sZWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaGFyZHdhcmUuaAppbmRleCAyNjQ2YzAxLi41OWU2ZjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oCkBAIC02NSw2ICs2NSw5IEBACiAvKiBTbWFydE1lZGlhICovCiAjZGVmaW5lIEFUOTFfU01BUlRNRURJQV9CQVNFCTB4NDAwMDAwMDAJLyogTkNTMzogU21hcnRtZWRpYSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KIAorLyogQ29tcGFjdCBGbGFzaCAqLworI2RlZmluZSBBVDkxX0NGX0JBU0UJCTB4NTAwMDAwMDAJLyogTkNTNC1OQ1M2OiBDb21wYWN0IEZsYXNoIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCiAvKiBNdWx0aS1NYXN0ZXIgTWVtb3J5IGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgQVQ5MV9VSFBfQkFTRQkJMHgwMDMwMDAwMAkvKiBVU0IgSG9zdCBjb250cm9sbGVyICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKaW5kZXggMjMzOWI3Ni4uMWFkZmQxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKQEAgLTUzLDE2ICs1MywxMiBAQAogI2RlZmluZSBTQ1JFRU5fRU5ECQkweGRmYzAwMDAwCiAjZGVmaW5lIFNDUkVFTl9CQVNFCQkweGRmODAwMDAwCiAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAotCiAjZGVmaW5lIFZJRENfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZTA0MDAwMDAKICNkZWZpbmUgSU9NRF9CQVNFCQlJT01FTSgweGUwMjAwMDAwKQogI2RlZmluZSBJT0NfQkFTRQkJSU9NRU0oMHhlMDIwMDAwMCkKICNkZWZpbmUgRkxPUFBZRE1BX0JBU0UJCUlPTUVNKDB4ZTAwMmEwMDApCiAjZGVmaW5lIFBDSU9fQkFTRQkJSU9NRU0oMHhlMDAxMDAwMCkKIAotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4MDAwMDAwMDAJLyogUk9NICovCi0KICNkZWZpbmUgdmlkY193cml0ZWwodmFsKQlfX3Jhd193cml0ZWwodmFsLCBWSURDX0JBU0UpCiAKIC8qIGluL291dCBiaWFzIGZvciB0aGUgSVNBIHNsb3QgcmVnaW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmgKaW5kZXggMzRmNDBhNi4uMzE3ODE0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9tZW1vcnkuaApAQCAtMjYsNCArMjYsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gUk9NCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMKaW5kZXggZjYxY2FkYS4uOTIxM2JmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZGVidWctbWFjcm8uUwpAQCAtMTgsNCArMTgsNCBAQAogCiAjZGVmaW5lIFVBUlRfU0hJRlQJMgogI2RlZmluZSBGTE9XX0NPTlRST0wKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2hhcmR3YXJlLmgKaW5kZXggNGU0MWMyMy4uM2NlODY0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaGFyZHdhcmUuaApAQCAtNTcsOSArNTcsNiBAQAogLyoKICAqIFJBTSBkZWZpbml0aW9ucwogICovCi0jZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg0MDAwMDAwMAotI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCi0KICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGZmMDAwMDAwCS8qIElSUV9TVEFUICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKaW5kZXggMDJmMTQ0NS4uYzdjNTAwZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9tZW1vcnkuaApAQCAtMjgsNCArMjgsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoeCkKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEgLSBTUkFNCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDQwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCmluZGV4IDY2YjE5YzcuLmFlNWI3NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAKLSNkZWZpbmUgU0VSSUFMX0JBU0UJKCh1bnNpZ25lZCBjaGFyICopMHhmZTAwMGJlMCkKKyNkZWZpbmUgU0VSSUFMX0JBU0UJKCh1bnNpZ25lZCBjaGFyICopMHhmMDAwMGJlMCkKIAogLyoKICAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCmluZGV4IDJlZjIyMDAuLmVjNTFmZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmgKQEAgLTQ4LDkgKzQ4LDYgQEAKICNkZWZpbmUgUENJQ0ZHMF9TSVpFCQkweDAxMDAwMDAwCiAjZGVmaW5lIFBDSUNGRzBfQkFTRQkJMHhmYTAwMDAwMAogCi0jZGVmaW5lIEZMVVNIX1NJWkUJCTB4MDAxMDAwMDAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmOTAwMDAwMAotCiAjZGVmaW5lIFBDSU1FTV9TSVpFCQkweDAxMDAwMDAwCiAjZGVmaW5lIFBDSU1FTV9CQVNFCQkweGYwMDAwMDAwCiAKQEAgLTYxLDkgKzU4LDYgQEAKICNkZWZpbmUgUENJTUVNX1NJWkUJCTB4ODAwMDAwMDAKICNkZWZpbmUgUENJTUVNX0JBU0UJCTB4ODAwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9TSVpFCQkweDAwMTAwMDAwCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4N2UwMDAwMDAKLQogI2RlZmluZSBXRkxVU0hfU0laRQkJMHgwMTAwMDAwMAogI2RlZmluZSBXRkxVU0hfQkFTRQkJMHg3ZDAwMDAwMAogCkBAIC05NCw3ICs4OCw2IEBACiAjZGVmaW5lIFhCVVNfU1dJVENIX0oxN18xMQkoKCpYQlVTX1NXSVRDSCkgJiAoMSA8PCA1KSkKICNkZWZpbmUgWEJVU19TV0lUQ0hfSjE3XzkJKCgqWEJVU19TV0lUQ0gpICYgKDEgPDwgNikpCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDUwMDAwMDAwCiAjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJKEFSTUNTUl9CQVNFICsgMHgxMDgpCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKaW5kZXggMDllMzM1Yy4uOTkxODFmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oCkBAIC00OSwxMiArNDksMjIgQEAKICNkZWZpbmUgVEFTS19TSVpFCQlVTCgweGJmMDAwMDAwKQogI2RlZmluZSBQQUdFX09GRlNFVAkJVUwoMHhjMDAwMDAwMCkKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEuCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmOTAwMDAwMAorCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0NPMjg1KQogCiAvKiBUYXNrIHNpemUgYW5kIHBhZ2Ugb2Zmc2V0IGF0IDEuNUdCICovCiAjZGVmaW5lIFRBU0tfU0laRQkJVUwoMHg1ZjAwMDAwMCkKICNkZWZpbmUgUEFHRV9PRkZTRVQJCVVMKDB4NjAwMDAwMDApCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhLgorICovCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4N2UwMDAwMDAKKwogI2Vsc2UKIAogI2Vycm9yICJVbmRlZmluZWQgZm9vdGJyaWRnZSBhcmNoaXRlY3R1cmUiCkBAIC03Miw0ICs4Miw2IEBACiAgKi8KICNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFICgoVEFTS19TSVpFICsgMHgwMTAwMDAwMCkgLyAzKQogCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg1MDAwMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC90czcyeHguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC90czcyeHguaAppbmRleCA0MTIyMTVlLi5hOTRmNjNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdHM3Mnh4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3RzNzJ4eC5oCkBAIC0xMiw2ICsxMiw4IEBACiAgKiBmZWJmYzAwMAlbNjddMDAwMDAwMAk0SwlOQU5EIGRhdGEgcmVnaXN0ZXIKICAqIGZlYmZiMDAwCVs2N10wNDAwMDAwCTRLCU5BTkQgY29udHJvbCByZWdpc3RlcgogICogZmViZmEwMDAJWzY3XTA4MDAwMDAJNEsJTkFORCBidXN5IHJlZ2lzdGVyCisgKiBmZWJmOTAwMAkxMDgwMDAwMAk0SwlUUy01NjIwIFJUQyBpbmRleCByZWdpc3RlcgorICogZmViZjgwMDAJMTE3MDAwMDAJNEsJVFMtNTYyMCBSVEMgZGF0YSByZWdpc3RlcgogICovCiAKICNkZWZpbmUgVFM3MlhYX01PREVMX1BIWVNfQkFTRQkJMHgyMjAwMDAwMApAQCAtNTgsNiArNjAsMTUgQEAKICNkZWZpbmUgVFM3MlhYX05BTkRfQlVTWV9TSVpFCQkweDAwMDAxMDAwCiAKIAorI2RlZmluZSBUUzcyWFhfUlRDX0lOREVYX1ZJUlRfQkFTRQkweGZlYmY5MDAwCisjZGVmaW5lIFRTNzJYWF9SVENfSU5ERVhfUEhZU19CQVNFCTB4MTA4MDAwMDAKKyNkZWZpbmUgVFM3MlhYX1JUQ19JTkRFWF9TSVpFCQkweDAwMDAxMDAwCisKKyNkZWZpbmUgVFM3MlhYX1JUQ19EQVRBX1ZJUlRfQkFTRQkweGZlYmY4MDAwCisjZGVmaW5lIFRTNzJYWF9SVENfREFUQV9QSFlTX0JBU0UJMHgxMTcwMDAwMAorI2RlZmluZSBUUzcyWFhfUlRDX0RBVEFfU0laRQkJMHgwMDAwMTAwMAorCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RlYnVnLW1hY3JvLlMKaW5kZXggODNmNTUyZi4uYzYxMTg3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RlYnVnLW1hY3JvLlMKQEAgLTE2LDcgKzE2LDcgQEAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDAwMDAwMDAwCUAgcGh5c2ljYWwKIAkJbW92bmUJXHJ4LCAjMHhlMDAwMDAwMAlAIHZpcnR1YWwKLQkJb3JyCVxyeCwgXHJ4LCAjMHgwMDIwMDAwMAorCQlvcnJlcQlccngsIFxyeCwgIzB4MDAyMDAwMDAJQCBwaHlzaWNhbAogCQlvcnIJXHJ4LCBccngsICMweDAwMDA2MDAwCUAgVUFSVDEgb2Zmc2V0CiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9kbWEuaAppbmRleCBiNDVmYTM2Li42MjFmZjJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RtYS5oCkBAIC0xNywyNyArMTcsMTYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KKwogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAotLyoKLSAqIERNQSByZWdpc3RyYXRpb24KLSAqLwotCiB0eXBlZGVmIGVudW0gewogCURNQV9QUklPX0hJR0ggPSAwLAotCURNQV9QUklPX01FRElVTSA9IDMsCi0JRE1BX1BSSU9fTE9XID0gNgorCURNQV9QUklPX01FRElVTSA9IDEsCisJRE1BX1BSSU9fTE9XID0gMgogfSBpbXhfZG1hX3ByaW87CiAKLWludCBpbXhfcmVxdWVzdF9kbWEoY2hhciAqbmFtZSwgaW14X2RtYV9wcmlvIHByaW8sCi0JCSAgICB2b2lkICgqaXJxX2hhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCi0JCSAgICB2b2lkICgqZXJyX2hhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCi0JCSAgICB2b2lkICpkYXRhKTsKLQotdm9pZCBpbXhfZnJlZV9kbWEoaW50IGRtYV9jaCk7Ci0KLQogI2RlZmluZSBETUFfUkVRX1VBUlQzX1QgICAgICAgIDIKICNkZWZpbmUgRE1BX1JFUV9VQVJUM19SICAgICAgICAzCiAjZGVmaW5lIERNQV9SRVFfU1NJMl9UICAgICAgICAgNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwNjNjMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtZG1hLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaW14YWRzL2RtYS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NywxOTk4IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaWZuZGVmIF9fQVNNX0FSQ0hfSU1YX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSU1YX0RNQV9ICisKKyNkZWZpbmUgSU1YX0RNQV9DSEFOTkVMUyAgMTEKKworLyoKKyAqIHN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgLSBpLk1YIHNwZWNpZmljIERNQSBleHRlbnNpb24KKyAqIEBuYW1lOiBuYW1lIHNwZWNpZmllZCBieSBETUEgY2xpZW50CisgKiBAaXJxX2hhbmRsZXI6IGNsaWVudCBjYWxsYmFjayBmb3IgZW5kIG9mIHRyYW5zZmVyCisgKiBAZXJyX2hhbmRsZXI6IGNsaWVudCBjYWxsYmFjayBmb3IgZXJyb3IgY29uZGl0aW9uCisgKiBAZGF0YTogY2xpZW50cyBjb250ZXh0IGRhdGEgZm9yIGNhbGxiYWNrcworICogQGRtYV9tb2RlOiBkaXJlY3Rpb24gb2YgdGhlIHRyYW5zZmVyICVETUFfTU9ERV9SRUFEIG9yICVETUFfTU9ERV9XUklURQorICogQHNnOiBwb2ludGVyIHRvIHRoZSBhY3R1YWwgcmVhZC93cml0dGVuIGNodW5rIGZvciBzY2F0dGVyLWdhdGhlciBlbXVsYXRpb24KKyAqIEBzZ2JjOiBjb3VudGVyIG9mIHByb2Nlc3NlZCBieXRlcyBpbiB0aGUgYWN0dWFsIHJlYWQvd3JpdHRlbiBjaHVuaworICogQHJlc2J5dGVzOiB0b3RhbCByZXNpZHVhbCBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIKKyAqICAgICAgICAgICAgKGl0IGNhbiBiZSBsb3dlciBvciBzYW1lIGFzIHN1bSBvZiBTRyBtYXBwZWQgY2h1bmsgc2l6ZXMpCisgKiBAc2djb3VudDogbnVtYmVyIG9mIGNodW5rcyB0byBiZSByZWFkL3dyaXR0ZW4KKyAqCisgKiBTdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgSU1YIERNQSBwcm9jZXNzaW5nLiBJdCB3b3VsZCBiZSBwcm9iYWJseSBnb29kCisgKiBAc3RydWN0IGRtYV9zdHJ1Y3QgaW4gdGhlIGZ1dHVyZSBmb3IgZXh0ZXJuYWwgaW50ZXJmYWNpbmcgYW5kIHVzZQorICogQHN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgb25seSBhcyBleHRlbnNpb24gdG8gaXQuCisgKi8KKworc3RydWN0IGlteF9kbWFfY2hhbm5lbCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl2b2lkICgqaXJxX2hhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCXZvaWQgKmRhdGE7CisJZG1hbW9kZV90ICBkbWFfbW9kZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBzZ2JjOworCXVuc2lnbmVkIGludCBzZ2NvdW50OworCXVuc2lnbmVkIGludCByZXNieXRlczsKKwlpbnQgZG1hX251bTsKK307CisKK2V4dGVybiBzdHJ1Y3QgaW14X2RtYV9jaGFubmVsIGlteF9kbWFfY2hhbm5lbHNbSU1YX0RNQV9DSEFOTkVMU107CisKKworLyogVGhlIHR5cGUgdG8gZGlzdGluZ3Vpc2ggY2hhbm5lbCBudW1iZXJzIHBhcmFtZXRlciBmcm9tIG9yZGluYWwgaW50IHR5cGUgKi8KK3R5cGVkZWYgaW50IGlteF9kbWFjaF90OworCitpbnQKK2lteF9kbWFfc2V0dXBfc2luZ2xlKGlteF9kbWFjaF90IGRtYV9jaCwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKKwkJdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsIHVuc2lnbmVkIGludCBkZXZfYWRkciwgZG1hbW9kZV90IGRtYW1vZGUpOworCitpbnQKK2lteF9kbWFfc2V0dXBfc2coaW14X2RtYWNoX3QgZG1hX2NoLAorCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnY291bnQsIHVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLAorCQkgdW5zaWduZWQgaW50IGRldl9hZGRyLCBkbWFtb2RlX3QgZG1hbW9kZSk7CisKK2ludAoraW14X2RtYV9zZXR1cF9oYW5kbGVycyhpbXhfZG1hY2hfdCBkbWFfY2gsCisJCXZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB2b2lkICpkYXRhKTsKKwordm9pZCBpbXhfZG1hX2VuYWJsZShpbXhfZG1hY2hfdCBkbWFfY2gpOworCit2b2lkIGlteF9kbWFfZGlzYWJsZShpbXhfZG1hY2hfdCBkbWFfY2gpOworCitpbnQgaW14X2RtYV9yZXF1ZXN0KGlteF9kbWFjaF90IGRtYV9jaCwgY29uc3QgY2hhciAqbmFtZSk7CisKK3ZvaWQgaW14X2RtYV9mcmVlKGlteF9kbWFjaF90IGRtYV9jaCk7CisKK2ludCBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbyhpbXhfZG1hY2hfdCAqcGRtYV9jaCwgY29uc3QgY2hhciAqbmFtZSwgaW14X2RtYV9wcmlvIHByaW8pOworCisKKyNlbmRpZgkvKiBfQVNNX0FSQ0hfSU1YX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW14LXVhcnQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjg1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW14LXVhcnQuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIEFTTUFSTV9BUkNIX1VBUlRfSAorI2RlZmluZSBBU01BUk1fQVJDSF9VQVJUX0gKKworI2RlZmluZSBJTVhVQVJUX0hBVkVfUlRTQ1RTICgxPDwwKQorCitzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9tbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9tbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM3MTUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L21tYy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgQVNNQVJNX0FSQ0hfTU1DX0gKKyNkZWZpbmUgQVNNQVJNX0FSQ0hfTU1DX0gKKworI2luY2x1ZGUgPGxpbnV4L21tYy9wcm90b2NvbC5oPgorCitzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgeworCWludCAoKmNhcmRfcHJlc2VudCkodm9pZCk7Cit9OworCitleHRlcm4gdm9pZCBpbXhfc2V0X21tY19pbmZvKHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSAqaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9kZWJ1Zy1tYWNyby5TCmluZGV4IGViOTlmZDYuLjJiMjVlNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvZGVidWctbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2RlYnVnLW1hY3JvLlMKQEAgLTE3LDYgKzE3LDkgQEAKIAkJdHN0CVxyeCwgIzEJCQkJQCBtbXUgZW5hYmxlZD8KIAkJbGRyZXEJXHJ4LCA9SVhQMjNYWF9QRVJJUEhFUkFMX1BIWVMgCUAgcGh5c2ljYWwKIAkJbGRybmUJXHJ4LCA9SVhQMjNYWF9QRVJJUEhFUkFMX1ZJUlQJQCB2aXJ0dWFsCisjaWZkZWYgX19BUk1FQl9fCisJCW9ycglccngsIFxyeCwgIzB4MDAwMDAwMDMKKyNlbmRpZgogCQkuZW5kbQogCiAjZGVmaW5lIFVBUlRfU0hJRlQJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvbWVtb3J5LmgKaW5kZXggYmViY2YwYS4uYzg1ZmMwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L21lbW9yeS5oCkBAIC0yOCw2ICsyOCw3IEBACiAgKgkJdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KICAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjZGVmaW5lIF9fdmlydF90b19idXModikJCQkJCQlcCiAJKHsgdW5zaWduZWQgaW50IHJldDsJCQkJCQlcCkBAIC00MCw2ICs0MSwyMiBAQAogCWRhdGEgPSAqKCh2b2xhdGlsZSBpbnQgKilJWFAyM1hYX1BDSV9TRFJBTV9CQVIpOwkJXAogCSBfX3BoeXNfdG9fdmlydCgoKChiIC0gKGRhdGEgJiAweGZmZmZmZmYwKSkgKyAweDAwMDAwMDAwKSkpOyB9KQogCisvKgorICogQ29oZXJlbmN5IHN1cHBvcnQuICBPbmx5IHN1cHBvcnRlZCBvbiBBMiBDUFVzIG9yIG9uIEExCisgKiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGUgY2FjaGUgY29oZXJlbmN5IHdvcmthcm91bmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faXhwMjN4eF9hcmNoX2lzX2NvaGVyZW50KHZvaWQpCit7CisJZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9jZXNzb3JfaWQ7CisKKwlpZiAoKChwcm9jZXNzb3JfaWQgJiAxNSkgPj0gNCkgfHwgbWFjaGluZV9pc19yb2FkcnVubmVyKCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgYXJjaF9pc19jb2hlcmVudCgpCV9faXhwMjN4eF9hcmNoX2lzX2NvaGVyZW50KCkKKwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9wbGF0Zm9ybS5oCmluZGV4IGY4NWI0NjguLmU0ZDk5MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L3BsYXRmb3JtLmgKQEAgLTIyLDYgKzIyLDcgQEAKIGludCBpeHAyM3h4X3BjaV9zZXR1cChpbnQsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKik7CiB2b2lkIGl4cDIzeHhfcGNpX3ByZWluaXQodm9pZCk7CiBzdHJ1Y3QgcGNpX2J1cyAqaXhwMjN4eF9wY2lfc2Nhbl9idXMoaW50LCBzdHJ1Y3QgcGNpX3N5c19kYXRhKik7Cit2b2lkIGl4cDIzeHhfcGNpX3NsYXZlX2luaXQodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGl4cDIzeHhfdGltZXI7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC91bmNvbXByZXNzLmgKaW5kZXggNjI2MjNmYS4uMDEzNTc1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC91bmNvbXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC91bmNvbXByZXNzLmgKQEAgLTE2LDI2ICsxNiwyMSBAQAogCiAjZGVmaW5lIFVBUlRfQkFTRQkoKHZvbGF0aWxlIHUzMiAqKUlYUDIzWFhfVUFSVDFfUEhZUykKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBwdXRjKGNoYXIgYykKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGNoYXIgYykKIHsKIAlpbnQgajsKIAogCWZvciAoaiA9IDA7IGogPCAweDEwMDA7IGorKykgewogCQlpZiAoVUFSVF9CQVNFW1VBUlRfTFNSXSAmIFVBUlRfTFNSX1RIUkUpCiAJCQlicmVhazsKKwkJYmFycmllcigpOwogCX0KIAogCVVBUlRfQkFTRVtVQVJUX1RYXSA9IGM7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICpzKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCiB7Ci0Jd2hpbGUgKCpzKSB7Ci0JCXB1dGMoKnMpOwotCQlpZiAoKnMgPT0gJ1xuJykKLQkJCXB1dGMoJ1xyJyk7Ci0JCXMrKzsKLQl9CiB9CiAKICNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaAppbmRleCA5NDJiNjIyLi5iNTk1MjBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaApAQCAtMjYwLDYgKzI2MCwxMiBAQAogCiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfUENJCisKKyNkZWZpbmUJX19pbyh2KQkJdgorCisjZWxzZQorCiAvKgogICogSVhQNHh4IGRvZXMgbm90IGhhdmUgYSB0cmFuc3BhcmVudCBjcHUgLT4gUENJIEkvTyB0cmFuc2xhdGlvbgogICogd2luZG93LiAgSW5zdGVhZCwgaXQgaGFzIGEgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IG11c3QgYmUgdHdlYWtlZApAQCAtNTc4LDYgKzU4NCw3IEBACiAKICNkZWZpbmUJaW9wb3J0X21hcChwb3J0LCBucikJCSgodm9pZCBfX2lvbWVtKikocG9ydCArIFBJT19PRkZTRVQpKQogI2RlZmluZQlpb3BvcnRfdW5tYXAoYWRkcikKKyNlbmRpZgkvLyAhQ09ORklHX1BDSQogCiAjZW5kaWYJLy8gIF9fQVNNX0FSTV9BUkNIX0lPX0gKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L21lbW9yeS5oCmluZGV4IGVlMjExZDIuLmFmOTY2N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbWVtb3J5LmgKQEAgLTE0LDcgKzE0LDcgQEAKICAqLwogI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXworI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgZGVmaW5lZChDT05GSUdfUENJKQogCiB2b2lkIGl4cDR4eF9hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmhvbGVzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2hhcmR3YXJlLmgKaW5kZXggYjc1NTA3OS4uMmFiNDNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oCkBAIC01Miw5ICs1Miw2IEBACiAjZGVmaW5lIElTQV9TSVpFCQkweDIwMDAwMDAwCiAjZGVmaW5lIElTQV9CQVNFCQkweGUwMDAwMDAwCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDQwMDAwMDAwCS8qIFJPTSAqLwotI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCi0KICNkZWZpbmUgUENJT19CQVNFCQlJT19CQVNFCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaAppbmRleCA5ZTUwYTE3Li40MDJkZjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaApAQCAtMjAsNCArMjAsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gUk9NCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDQwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWxfbDcyMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbF9sNzIwMC5oCmluZGV4IDIzOGM1OTUuLmIxMDA4YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbF9sNzIwMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbF9sNzIwMC5oCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIFVBUlREUgkJCTB4MDAJLyogVHgvUnggZGF0YSAqLwogI2RlZmluZSBSWFNUQVQJCQkweDA0CS8qIFJ4IHN0YXR1cyAqLwogI2RlZmluZSBIX1VCUkxDUgkJMHgwOAkvKiBtb2RlIHJlZ2lzdGVyIGhpZ2ggKi8KLSNkZWZpbmUgTV9VQlJMQ1IJCTB4MEMJLyogbW9kZSByZWcgbWlkIChNU0Igb2YgYnVhZCkqLworI2RlZmluZSBNX1VCUkxDUgkJMHgwQwkvKiBtb2RlIHJlZyBtaWQgKE1TQiBvZiBiYXVkKSovCiAjZGVmaW5lIExfVUJSTENSCQkweDEwCS8qIG1vZGUgcmVnIGxvdyAoTFNCIG9mIGJhdWQpKi8KICNkZWZpbmUgVUFSVENPTgkJCTB4MTQJLyogY29udHJvbCByZWdpc3RlciAqLwogI2RlZmluZSBVQVJURkxHCQkJMHgxOAkvKiBmbGFnIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC91bmNvbXByZXNzLmgKaW5kZXggOWZjZDQwYS4uMDRiZTJhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3VuY29tcHJlc3MuaApAQCAtNiw3ICs2LDcgQEAKICAqIENoYW5nZWxvZzoKICAqICAwNS0wMS0yMDAwCVNKSAlDcmVhdGVkCiAgKiAgMDUtMTMtMjAwMAlTSkgJRmlsbGVkIGluIGZ1bmN0aW9uIGJvZGllcwotICogIDA3LTI2LTIwMDAJU0pICVJlbW92ZWQgaGFyZCBjb2RlZCBidWFkIHJhdGUKKyAqICAwNy0yNi0yMDAwCVNKSAlSZW1vdmVkIGhhcmQgY29kZWQgYmF1ZCByYXRlCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmgKaW5kZXggYzkyYmNiOC4uOWYxYTU4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L21lbW9yeS5oCkBAIC0zMSw4ICszMSw2IEBACiAKICNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAKLSNkZWZpbmUgTk9ERVNfU0hJRlQJNAkvKiBVcCB0byAxNiBub2RlcyAqLwotCiAvKgogICogR2l2ZW4gYSBrZXJuZWwgYWRkcmVzcywgZmluZCB0aGUgaG9tZSBub2RlIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9haWMyMy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9haWMyMy5oCmluZGV4IDU5MGJhYzIuLjY1MTMwNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYWljMjMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2FpYzIzLmgKQEAgLTU3LDYgKzU3LDcgQEAKICNkZWZpbmUgTEhWX01JTgkJCQkweDAwMDAKIAogLy8gQW5hbG9nIGF1ZGlvIHBhdGggY29udHJvbCByZWdpc3RlcgorI2RlZmluZSBTVEFfUkVHKHgpCQkJKCh4KTw8NikKICNkZWZpbmUgU1RFX0VOQUJMRUQJCQkweDAwMjAKICNkZWZpbmUgREFDX1NFTEVDVEVECQkJMHgwMDEwCiAjZGVmaW5lIEJZUEFTU19PTgkJCTB4MDAwOApAQCAtMTA5LDQgKzExMCw3IEBACiAjZGVmaW5lIFRMVjMyMEFJQzIzSUQxICAgICAgICAgICAgICAgICAgKDB4MWEpCS8vIGNzIGxvdwogI2RlZmluZSBUTFYzMjBBSUMyM0lEMiAgICAgICAgICAgICAgICAgICgweDFiKQkvLyBjcyBoaWdoCiAKK3ZvaWQgdGx2MzIwYWljMjNfcG93ZXJfdXAodm9pZCk7Cit2b2lkIHRsdjMyMGFpYzIzX3Bvd2VyX2Rvd24odm9pZCk7CisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0FJQzIzX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtYW1zLWRlbHRhLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFtcy1kZWx0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzBmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFtcy1kZWx0YS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFtcy1kZWx0YS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEpvbmF0aGFuIE1jRG93ZWxsIDxub29kbGVzQGVhcnRoLmxpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9BTVNfREVMVEFfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfQU1TX0RFTFRBX0gKKworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0FNU19ERUxUQSkKKworI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gxX1BIWVMJCTB4MDEwMDAwMDAKKyNkZWZpbmUgQU1TX0RFTFRBX0xBVENIMV9WSVJUCQkweEVBMDAwMDAwCisjZGVmaW5lIEFNU19ERUxUQV9NT0RFTV9QSFlTCQkweDA0MDAwMDAwCisjZGVmaW5lIEFNU19ERUxUQV9NT0RFTV9WSVJUCQkweEVCMDAwMDAwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfUEhZUwkJMHgwODAwMDAwMAorI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gyX1ZJUlQJCTB4RUMwMDAwMDAKKworI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gxX0xFRF9DQU1FUkEJMHgwMQorI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gxX0xFRF9BRFZFUlQJMHgwMgorI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gxX0xFRF9FTUFJTAkweDA0CisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDFfTEVEX0hBTkRTRlJFRQkweDA4CisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDFfTEVEX1ZPSUNFTUFJTAkweDEwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDFfTEVEX1ZPSUNFCTB4MjAKKworI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gyX0xDRF9WQkxFTgkweDAwMDEKKyNkZWZpbmUgQU1TX0RFTFRBX0xBVENIMl9MQ0RfTkRJU1AJMHgwMDAyCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OQ0UJMHgwMDA0CisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OUkUJMHgwMDA4CisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV1AJMHgwMDEwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV0UJMHgwMDIwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9BTEUJMHgwMDQwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9DTEUJMHgwMDgwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTU9ERU1fTlJFU0VUCTB4MTAwMAorI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gyX01PREVNX0NPREVDCTB4MjAwMAorCisjZGVmaW5lIEFNU19ERUxUQV9HUElPX1BJTl9OQU5EX1JCCTEyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit2b2lkIGFtc19kZWx0YV9sYXRjaDFfd3JpdGUodTggbWFzaywgdTggdmFsdWUpOwordm9pZCBhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKHUxNiBtYXNrLCB1MTYgdmFsdWUpOworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9BTVNfREVMVEEgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF9BTVNfREVMVEFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1hcG9sbG9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFwb2xsb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBjNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1hcG9sbG9uLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtYXBvbGxvbi5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFNhbXN1bmcgT01BUDI0WFggQXBvbGxvbiBib2FyZC4KKyAqCisgKiBJbml0aWFsIGNyZWF0aW9uIGJ5IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfQVBPTExPTl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9BUE9MTE9OX0gKKworLyogUGxhY2Vob2xkZXIgZm9yIEFQT0xMT04gc3BlY2lmaWMgZGVmaW5lcyAqLworLyogR1BNQyBDUzAgKi8KKyNkZWZpbmUgQVBPTExPTl9DUzBfQkFTRQkJMHgwMDAwMDAwMAorLyogR1BNQyBDUzEgKi8KKyNkZWZpbmUgQVBPTExPTl9DUzFfQkFTRQkJMHgwODAwMDAwMAorI2RlZmluZSBBUE9MTE9OX0VUSFJfU1RBUlQJCShBUE9MTE9OX0NTMV9CQVNFICsgMHgzMDApCisjZGVmaW5lIEFQT0xMT05fRVRIUl9HUElPX0lSUQkJNzQKKy8qIEdQTUMgQ1MyIC0gcmVzZXJ2ZWQgZm9yIE9uZU5BTkQgKi8KKyNkZWZpbmUgQVBPTExPTl9DUzJfQkFTRQkJMHgxMDAwMDAwMAorLyogR1BNQyBDUzMgLSByZXNlcnZlZCBmb3IgTk9SIG9yIE5BTkQgKi8KKyNkZWZpbmUgQVBPTExPTl9DUzNfQkFTRQkJMHgxODAwMDAwMAorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9BUE9MTE9OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMi5oCmluZGV4IDM5Y2E1YTMuLmIyODg4ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgyLmgKQEAgLTM0LDkgKzM0LDUgQEAKIC8qIEF0IE9NQVAxNjEwIElubm92YXRvciB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLwogI2RlZmluZSBPTUFQMTYxMF9FVEhSX1NUQVJUCQkweDA0MDAwMzAwCiAKLS8qIFNhbXN1bmcgTkFORCBmbGFzaCBhdCBDUzJCIG9yIENTMyhOQU5EIEJvb3QpICovCi0jZGVmaW5lIE9NQVBfTkFORF9GTEFTSF9TVEFSVDEgICAgICAgICAgIDB4MEEwMDAwMDAgLyogQ1MyQiAqLwotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyICAgICAgICAgICAweDBDMDAwMDAwIC8qIENTMyAqLwotCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IMl9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDMuaAppbmRleCAxYjEyYzFkLi43NjFlYTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMy5oCkBAIC0zMCwxMCArMzAsNiBAQAogLyogSW4gT01BUDE3MTAgSDMgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KICNkZWZpbmUgT01BUDE3MTBfRVRIUl9TVEFSVAkJMHgwNDAwMDMwMAogCi0vKiBTYW1zdW5nIE5BTkQgZmxhc2ggYXQgQ1MyQiBvciBDUzMoTkFORCBCb290KSAqLwotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQxICAgICAgICAgICAweDBBMDAwMDAwIC8qIENTMkIgKi8KLSNkZWZpbmUgT01BUF9OQU5EX0ZMQVNIX1NUQVJUMiAgICAgICAgICAgMHgwQzAwMDAwMCAvKiBDUzMgKi8KLQogI2RlZmluZSBNQVhJUlFOVU0JCQkoSUhfQk9BUkRfQkFTRSkKICNkZWZpbmUgTUFYRklRTlVNCQkJTUFYSVJRTlVNCiAjZGVmaW5lIE1BWFNXSU5VTQkJCU1BWElSUU5VTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oCmluZGV4IDMzZWEyOWEuLjdlZjY2NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKQEAgLTMzLDEyICszMyw2IEBACiAvKiBHUE1DIENTMSAqLwogI2RlZmluZSBPTUFQMjRYWF9FVEhSX1NUQVJUICAgICAgICAgICAgIDB4MDgwMDAzMDAKICNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJOTIKLQotI2RlZmluZSBINF9DUzBfQkFTRQkJICAgICAweDA0MDAwMDAwCi0KLSNkZWZpbmUgSDRfQ1MwX0JBU0UJCSAgICAgMHgwNDAwMDAwMAotCi0jZGVmaW5lIEg0X0NTMF9CQVNFCQkgICAgIDB4MDQwMDAwMDAKLQorI2RlZmluZSBINF9DUzBfQkFTRQkJCTB4MDQwMDAwMDAKICNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0g0X0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1uZXRzdGFyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW5ldHN0YXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjYzBmYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW5ldHN0YXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgMk4gVGVsZWtvbXVuaWthY2UsIExhZGlzbGF2IE1pY2hsIDxtaWNobEAybi5jej4KLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgT01BUDU5MTAgYmFzZWQgTmV0U3RhciBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9ORVRTVEFSX0gKLSNkZWZpbmUgX19BU01fQVJDSF9ORVRTVEFSX0gKLQotI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+Ci0KLSNkZWZpbmUgT01BUF9OQU5EX0ZMQVNIX1NUQVJUMQkJT01BUF9DUzFfUEhZUyArICgxIDw8IDIzKQotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyCQlPTUFQX0NTMV9QSFlTICsgKDIgPDwgMjMpCi0KLSNlbmRpZiAvKiAgX19BU01fQVJDSF9ORVRTVEFSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtbm9raWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtbm9raWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmRlZWEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1ub2tpYS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1ub2tpYS5oCisgKgorICogIEluZm9ybWF0aW9uIHN0cnVjdHVyZXMgZm9yIE5va2lhLXNwZWNpZmljIGJvYXJkIGNvbmZpZyBkYXRhCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNQlOb2tpYSBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX09NQVBfQk9BUkRfTk9LSUFfSAorI2RlZmluZSBfT01BUF9CT0FSRF9OT0tJQV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE9NQVBfVEFHX05PS0lBX0JUCTB4NGUwMQorI2RlZmluZSBPTUFQX1RBR19XTEFOX0NYMzExMFgJMHg0ZTAyCisjZGVmaW5lIE9NQVBfVEFHX0NCVVMJCTB4NGUwMworI2RlZmluZSBPTUFQX1RBR19FTV9BU0lDX0JCNQkweDRlMDQKKworCisjZGVmaW5lIEJUX0NISVBfQ1NSCQkxCisjZGVmaW5lIEJUX0NISVBfVEkJCTIKKworI2RlZmluZSBCVF9TWVNDTEtfMTIJCTEKKyNkZWZpbmUgQlRfU1lTQ0xLXzM4XzQJCTIKKworc3RydWN0IG9tYXBfYmx1ZXRvb3RoX2NvbmZpZyB7CisJdTggICAgY2hpcF90eXBlOworCXU4ICAgIGJ0X3dha2V1cF9ncGlvOworCXU4ICAgIGhvc3Rfd2FrZXVwX2dwaW87CisJdTggICAgcmVzZXRfZ3BpbzsKKwl1OCAgICBidF91YXJ0OworCXU4ICAgIGJkX2FkZHJbNl07CisJdTggICAgYnRfc3lzY2xrOworfTsKKworc3RydWN0IG9tYXBfd2xhbl9jeDMxMTB4X2NvbmZpZyB7CisJdTggIGNoaXBfdHlwZTsKKwlzMTYgcG93ZXJfZ3BpbzsKKwlzMTYgaXJxX2dwaW87CisJczE2IHNwaV9jc19ncGlvOworfTsKKworc3RydWN0IG9tYXBfY2J1c19jb25maWcgeworCXMxNiBjbGtfZ3BpbzsKKwlzMTYgZGF0X2dwaW87CisJczE2IHNlbF9ncGlvOworfTsKKworc3RydWN0IG9tYXBfZW1fYXNpY19iYjVfY29uZmlnIHsKKwlzMTYgcmV0dV9pcnFfZ3BpbzsKKwlzMTYgdGFodm9faXJxX2dwaW87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtcGVyc2V1czIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtcGVyc2V1czIuaAppbmRleCA2OTFlNTJhLi5lYjc0NDIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXBlcnNldXMyLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1wZXJzZXVzMi5oCkBAIC00Miw4ICs0Miw0IEBACiAKICNkZWZpbmUgTlJfSVJRUwkJCShNQVhJUlFOVU0gKyAxKQogCi0vKiBTYW1zdW5nIE5BTkQgZmxhc2ggYXQgQ1MyQiBvciBDUzMoTkFORCBCb290KSAqLwotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQxCSAgIDB4MEEwMDAwMDAgLyogQ1MyQiAqLwotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyCSAgIDB4MEMwMDAwMDAgLyogQ1MzICovCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCmluZGV4IGEwMDQwY2QuLjZkNjI0MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKQEAgLTIxLDkgKzIxLDEyIEBACiAjZGVmaW5lIE9NQVBfVEFHX0xDRAkJMHg0ZjA1CiAjZGVmaW5lIE9NQVBfVEFHX0dQSU9fU1dJVENICTB4NGYwNgogI2RlZmluZSBPTUFQX1RBR19VQVJUCQkweDRmMDcKKyNkZWZpbmUgT01BUF9UQUdfRkJNRU0JCTB4NGYwOAorI2RlZmluZSBPTUFQX1RBR19TVElfQ09OU09MRQkweDRmMDkKIAogI2RlZmluZSBPTUFQX1RBR19CT09UX1JFQVNPTiAgICAweDRmODAKICNkZWZpbmUgT01BUF9UQUdfRkxBU0hfUEFSVAkweDRmODEKKyNkZWZpbmUgT01BUF9UQUdfVkVSU0lPTl9TVFIJMHg0ZjgyCiAKIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyB7CiAJLyogMCBmb3IgMTIgTUh6LCAxIGZvciAxMyBNSHogYW5kIDIgZm9yIDE5LjIgTUh6ICovCkBAIC01NCw2ICs1NywxMSBAQAogCXUzMiBjb25zb2xlX3NwZWVkOwogfTsKIAorc3RydWN0IG9tYXBfc3RpX2NvbnNvbGVfY29uZmlnIHsKKwl1bnNpZ25lZCBlbmFibGU6MTsKKwl1OCBjaGFubmVsOworfTsKKwogc3RydWN0IG9tYXBfdXNiX2NvbmZpZyB7CiAJLyogQ29uZmlndXJlIGRyaXZlcnMgYWNjb3JkaW5nIHRvIHRoZSBjb25uZWN0b3JzIG9uIHlvdXIgYm9hcmQ6CiAJICogIC0gIkEiIGNvbm5lY3RvciAocmVjdGFndWxhcikKQEAgLTg3LDYgKzk1LDEzIEBACiAJY2hhciBjdHJsX25hbWVbMTZdOwogfTsKIAorc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHsKKwl1MzIgZmJfc3JhbV9zdGFydDsKKwl1MzIgZmJfc3JhbV9zaXplOworCXUzMiBmYl9zZHJhbV9zdGFydDsKKwl1MzIgZmJfc2RyYW1fc2l6ZTsKK307CisKIC8qIENvdmVyOgogICogICAgICBoaWdoIC0+IGNsb3NlZAogICogICAgICBsb3cgIC0+IG9wZW4KQEAgLTEwNiw2ICsxMjEsMTIgQEAKIAlpbnQga2V5X2NvZGU6MjQ7IC8qIExpbnV4IGtleSBjb2RlICovCiB9OwogCitzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyB7CisJLyogQml0IGZpZWxkIG9mIFVBUlRzIHByZXNlbnQ7IGJpdCAwIC0tPiBVQVJUMSAqLworCXVuc2lnbmVkIGludCBlbmFibGVkX3VhcnRzOworfTsKKworCiBzdHJ1Y3Qgb21hcF9mbGFzaF9wYXJ0X2NvbmZpZyB7CiAJY2hhciBwYXJ0X3RhYmxlWzBdOwogfTsKQEAgLTExNCwxMSArMTM1LDE0IEBACiAJY2hhciByZWFzb25fc3RyWzEyXTsKIH07CiAKLXN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIHsKLQkvKiBCaXQgZmllbGQgb2YgVUFSVHMgcHJlc2VudDsgYml0IDAgLS0+IFVBUlQxICovCi0JdW5zaWduZWQgaW50IGVuYWJsZWRfdWFydHM7CitzdHJ1Y3Qgb21hcF92ZXJzaW9uX2NvbmZpZyB7CisJY2hhciBjb21wb25lbnRbMTJdOworCWNoYXIgdmVyc2lvblsxMl07CiB9OwogCisKKyNpbmNsdWRlIDxhc20tYXJtL2FyY2gtb21hcC9ib2FyZC1ub2tpYS5oPgorCiBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgewogCXUxNiB0YWc7CiAJdTE2IGxlbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaAppbmRleCA0NmEwNDAyLi4zYzRlYjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oCkBAIC0xOSw2ICsxOSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAljb25zdCBjaGFyCQkqbmFtZTsKKwlpbnQJCQlpZDsKIAlzdHJ1Y3QgY2xrCQkqcGFyZW50OwogCXVuc2lnbmVkIGxvbmcJCXJhdGU7CiAJX191MzIJCQlmbGFnczsKQEAgLTU3LDYgKzU4LDcgQEAKIGV4dGVybiB2b2lkIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CiBleHRlcm4gdm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwogZXh0ZXJuIHZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIGludCBjbGtfZ2V0X3VzZWNvdW50KHN0cnVjdCBjbGsgKmNsayk7CiAKIC8qIENsb2NrIGZsYWdzICovCiAjZGVmaW5lIFJBVEVfQ0tDVEwJCSgxIDw8IDApCS8qIE1haW4gZml4ZWQgcmF0aW8gY2xvY2tzICovCkBAIC04MCwxMCArODIsMTEgQEAKICNkZWZpbmUgQ01fUExMX1NFTDEJCSgxIDw8IDE4KQogI2RlZmluZSBDTV9QTExfU0VMMgkJKDEgPDwgMTkpCiAjZGVmaW5lIENNX1NZU0NMS09VVF9TRUwxCSgxIDw8IDIwKQotI2RlZmluZSBDTE9DS19JTl9PTUFQNzMwCSgxIDw8IDIxKQotI2RlZmluZSBDTE9DS19JTl9PTUFQMTUxMAkoMSA8PCAyMikKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE2WFgJKDEgPDwgMjMpCi0jZGVmaW5lIENMT0NLX0lOX09NQVAyNDJYCSgxIDw8IDI0KQotI2RlZmluZSBDTE9DS19JTl9PTUFQMjQzWAkoMSA8PCAyNSkKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDMxMAkoMSA8PCAyMSkKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDczMAkoMSA8PCAyMikKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE1MTAJKDEgPDwgMjMpCisjZGVmaW5lIENMT0NLX0lOX09NQVAxNlhYCSgxIDw8IDI0KQorI2RlZmluZSBDTE9DS19JTl9PTUFQMjQyWAkoMSA8PCAyNSkKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDI0M1gJKDEgPDwgMjYpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKaW5kZXggZDRlNzNlZi4uY2ExMjAyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC00MDQsNiArNDA0LDcgQEAKIGV4dGVybiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfZW5hYmxlX2xjZF9kbWEodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3N0b3BfbGNkX2RtYSh2b2lkKTsKK2V4dGVybiBpbnQgIG9tYXBfbGNkX2RtYV9leHRfcnVubmluZyh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfZXh0X2NvbnRyb2xsZXIoaW50IGV4dGVybmFsKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfc2luZ2xlX3RyYW5zZmVyKGludCBzaW5nbGUpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBmYl94cmVzLCB1MTYgZmJfeXJlcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG10aW1lci5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmgKaW5kZXggMTE3NzJjNy4uZTY1MjJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmgKQEAgLTg4LDUgKzg4LDYgQEAKIHZvaWQgb21hcF9kbV90aW1lcl9yZXNldF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CiAKIGludCBvbWFwX2RtX3RpbWVyc19hY3RpdmUodm9pZCk7Cit1MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2sodTMyIGlucHV0bWFzayk7CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZHNwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcC5oCmluZGV4IDU3YmY0ZjMuLjA2ZGFkODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZHNwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3AuaApAQCAtMTgxLDEwICsxODEsMTYgQEAKICNkZWZpbmUgT01BUF9EU1BfTUJDTURfUE1fRU5BQkxFCTB4MDEKIAogI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9LRlVOQ19GQkNUTAkweDAwCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0tGVU5DX0FVRElPX1BXUgkweDAxCiAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfRkJDVExfVVBECTB4MDAwMAogI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9GQkNUTF9FTkFCTEUJMHgwMDAyCiAjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0ZCQ1RMX0RJU0FCTEUJMHgwMDAzCiAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfQVVESU9fUFdSX1VQCTB4MDAwMAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9BVURJT19QV1JfRE9XTjEJMHgwMDAxCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0FVRElPX1BXUl9ET1dOMgkweDAwMDIKKwogI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UREVMX1NBRkUJMHgwMDAwCiAjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RERUxfS0lMTAkweDAwMDEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAppbmRleCA0ZmNjZTY5Li4xNmE0NTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaApAQCAtMjcsMTEgKzI3LDEyIEBACiAjaWZuZGVmIEFTTV9BUkNIX0RTUF9DT01NT05fSAogI2RlZmluZSBBU01fQVJDSF9EU1BfQ09NTU9OX0gKIAotdm9pZCBvbWFwX2RzcF9wbV9zdXNwZW5kKHZvaWQpOwotdm9pZCBvbWFwX2RzcF9wbV9yZXN1bWUodm9pZCk7Ci12b2lkIG9tYXBfZHNwX3JlcXVlc3RfbXB1aSh2b2lkKTsKLXZvaWQgb21hcF9kc3BfcmVsZWFzZV9tcHVpKHZvaWQpOwotaW50IG9tYXBfZHNwX3JlcXVlc3RfbWVtKHZvaWQpOwotaW50IG9tYXBfZHNwX3JlbGVhc2VfbWVtKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVxdWVzdF9tcHVpKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVsZWFzZV9tcHVpKHZvaWQpOworZXh0ZXJuIGludCBvbWFwX2RzcF9yZXF1ZXN0X21lbSh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9kc3BfcmVsZWFzZV9tZW0odm9pZCk7CisKK2V4dGVybiB2b2lkICgqb21hcF9kc3BfYXVkaW9fcHdyX3VwX3JlcXVlc3QpKGludCBzdGFnZSk7CitleHRlcm4gdm9pZCAoKm9tYXBfZHNwX2F1ZGlvX3B3cl9kb3duX3JlcXVlc3QpKGludCBzdGFnZSk7CiAKICNlbmRpZiAvKiBBU01fQVJDSF9EU1BfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpb2V4cGFuZGVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW9leHBhbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDNiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW9leHBhbmRlci5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW9leHBhbmRlci5oCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9HUElPRVhQQU5ERVJfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfR1BJT0VYUEFOREVSX0gKKworLyogRnVuY3Rpb24gUHJvdG90eXBlcyBmb3IgR1BJTyBFeHBhbmRlciBmdW5jdGlvbnMgKi8KKworaW50IHJlYWRfZ3Bpb19leHBhKHU4ICosIGludCk7CitpbnQgd3JpdGVfZ3Bpb19leHBhKHU4ICwgaW50KTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF9HUElPRVhQQU5ERVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCmluZGV4IDU0MDZiODcuLjc5MDliNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKQEAgLTMwNiw2ICszMDYsMTAgQEAKICNpbmNsdWRlICJib2FyZC1oNC5oIgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04KKyNpbmNsdWRlICJib2FyZC1hcG9sbG9uLmgiCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NQUNIX09NQVBfT1NLCiAjaW5jbHVkZSAiYm9hcmQtb3NrLmgiCiAjZW5kaWYKQEAgLTMxNCwxMCArMzE4LDYgQEAKICNpbmNsdWRlICJib2FyZC12b2ljZWJsdWUuaCIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01BQ0hfTkVUU1RBUgotI2luY2x1ZGUgImJvYXJkLW5ldHN0YXIuaCIKLSNlbmRpZgotCiAjZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi8KIAogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lyZGEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNWFlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lyZGEuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJkYS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEtvbWFsIFNoYWggPGtvbWFsX3NoYWg4MDIwMDNAeWFob28uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNQVJNX0FSQ0hfSVJEQV9ICisjZGVmaW5lIEFTTUFSTV9BUkNIX0lSREFfSAorCisvKiBib2FyZCBzcGVjaWZpYyB0cmFuc2NlaXZlciBjYXBhYmlsaXRpZXMgKi8KKworI2RlZmluZSBJUl9TRUwJCTEJLyogU2VsZWN0cyBJckRBICovCisjZGVmaW5lIElSX1NJUk1PREUJMgorI2RlZmluZSBJUl9GSVJNT0RFCTQKKyNkZWZpbmUgSVJfTUlSTU9ERQk4CisKK3N0cnVjdCBvbWFwX2lyZGFfY29uZmlnIHsKKwlpbnQgdHJhbnNjZWl2ZXJfY2FwOworCWludCAoKnRyYW5zY2VpdmVyX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpOworCWludCAoKnNlbGVjdF9pcmRhKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSk7CisJLyogVmVyeSBzcGVjaWZpYyB0byB0aGUgbmVlZHMgb2Ygc29tZSBwbGF0Zm9ybXMgKGgzLGg0KQorCSAqIGhhdmluZyBjYWxscyB3aGljaCBjYW4gc2xlZXAgaW4gaXJkYV9zZXRfc3BlZWQuCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IGdwaW9fZXhwYTsKKwlpbnQgcnhfY2hhbm5lbDsKKwlpbnQgdHhfY2hhbm5lbDsKKwl1bnNpZ25lZCBsb25nIGRlc3Rfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQ7CisJaW50IHR4X3RyaWdnZXI7CisJaW50IHJ4X3RyaWdnZXI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKaW5kZXggNGZmY2UxZC4uNDIwOThkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKQEAgLTI0Miw2ICsyNDIsMTEgQEAKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMgkzMAogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTkszCTMxCiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzQJMzIKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AxX0lSUV9UWAk1OQorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYCTYwCisjZGVmaW5lIElOVF8yNFhYX01DQlNQMl9JUlFfVFgJNjIKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9SWAk2MworI2RlZmluZSBJTlRfMjRYWF9VQVJUM19JUlEJNzQKIAogLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMCkgYW5kCiAgKiAxNiBNUFVJTyBsaW5lcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9rZXlwYWQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAva2V5cGFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwMjNhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAva2V5cGFkLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2tleXBhZC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBLb21hbCBTaGFoIDxrb21hbF9zaGFoODAyMDAzQHlhaG9vLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIEFTTUFSTV9BUkNIX0tFWVBBRF9ICisjZGVmaW5lIEFTTUFSTV9BUkNIX0tFWVBBRF9ICisKK3N0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgeworCWludCByb3dzOworCWludCBjb2xzOworCWludCAqa2V5bWFwOworCXVuc2lnbmVkIGludCByZXA6MTsKKwkvKiBzcGVjaWZpYyB0byBPTUFQMjQyeCovCisJdW5zaWduZWQgaW50ICpyb3dfZ3Bpb3M7CisJdW5zaWduZWQgaW50ICpjb2xfZ3Bpb3M7Cit9OworCisvKiBHcm91cCAoMC4uMykgLS0gd2hlbiBtdWx0aXBsZSBrZXlzIGFyZSBwcmVzc2VkLCBvbmx5IHRoZQorICoga2V5cyBwcmVzc2VkIGluIHRoZSBzYW1lIGdyb3VwIGFyZSBjb25zaWRlcmVkIGFzIHByZXNzZWQuIFRoaXMgaXMKKyAqIGluIG9yZGVyIHRvIHdvcmthcm91bmQgY2VydGFpbiBjcmFwcHkgSFcgZGVzaWducyB0aGF0IHByb2R1Y2UgZ2hvc3QKKyAqIGtleXByZXNzZXMuICovCisjZGVmaW5lIEdST1VQXzAJCSgwIDw8IDE2KQorI2RlZmluZSBHUk9VUF8xCQkoMSA8PCAxNikKKyNkZWZpbmUgR1JPVVBfMgkJKDIgPDwgMTYpCisjZGVmaW5lIEdST1VQXzMJCSgzIDw8IDE2KQorI2RlZmluZSBHUk9VUF9NQVNLCUdST1VQXzMKKworI2RlZmluZSBLRVkoY29sLCByb3csIHZhbCkgKCgoY29sKSA8PCAyOCkgfCAoKHJvdykgPDwgMjQpIHwgKHZhbCkpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2xjZF9scGg4OTIzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2xjZF9scGg4OTIzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0ZTY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbGNkX2xwaDg5MjMuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fTENEX0xQSDg5MjNfSAorI2RlZmluZSBfX0xDRF9MUEg4OTIzX0gKKworZW51bSBsY2RfbHBoODkyM190ZXN0X251bSB7CisJTENEX0xQSDg5MjNfVEVTVF9SR0JfTElORVMsCit9OworCitlbnVtIGxjZF9scGg4OTIzX3Rlc3RfcmVzdWx0IHsKKwlMQ0RfTFBIODkyM19URVNUX1NVQ0NFU1MsCisJTENEX0xQSDg5MjNfVEVTVF9JTlZBTElELAorCUxDRF9MUEg4OTIzX1RFU1RfRkFJTEVELAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21jYnNwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21jYnNwLmgKaW5kZXggZTc5ZDk4YS4uZWQwZGRlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tY2JzcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWNic3AuaApAQCAtMzcsNiArMzcsMTEgQEAKICNkZWZpbmUgT01BUDE2MTBfTUNCU1AyX0JBU0UJMHhmZmZiMTAwMAogI2RlZmluZSBPTUFQMTYxMF9NQ0JTUDNfQkFTRQkweGUxMDE3MDAwCiAKKyNkZWZpbmUgT01BUDI0WFhfTUNCU1AxX0JBU0UJMHg0ODA3NDAwMAorI2RlZmluZSBPTUFQMjRYWF9NQ0JTUDJfQkFTRQkweDQ4MDc2MDAwCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMgkweDAwCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjEJMHgwMgogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EWFIyCTB4MDQKQEAgLTcxLDkgKzc2LDYyIEBACiAKICNkZWZpbmUgT01BUF9NQVhfTUNCU1BfQ09VTlQgMwogCisjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFXUklURQkoT01BUDE1MTBfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxKQorI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBUkVBRAkoT01BUDE1MTBfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxKQorCisjZGVmaW5lIEFVRElPX01DQlNQCQlPTUFQX01DQlNQMQorI2RlZmluZSBBVURJT19ETUFfVFgJCU9NQVBfRE1BX01DQlNQMV9UWAorI2RlZmluZSBBVURJT19ETUFfUlgJCU9NQVBfRE1BX01DQlNQMV9SWAorCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjIJMHgwMAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIxCTB4MDQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFhSMgkweDA4CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RYUjEJMHgwQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19TUENSMgkweDEwCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1NQQ1IxCTB4MTQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNSMgkweDE4CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDUjEJMHgxQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ1IyCTB4MjAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENSMQkweDI0CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1NSR1IyCTB4MjgKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1JHUjEJMHgyQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19NQ1IyCTB4MzAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfTUNSMQkweDM0CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJBCTB4MzgKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkIJMHgzQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSQQkweDQwCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJCCTB4NDQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUENSMAkweDQ4CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJDCTB4NEMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkQJMHg1MAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSQwkweDU0CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJECTB4NTgKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkUJMHg1QworI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ0VSRgkweDYwCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJFCTB4NjQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkYJMHg2OAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ0VSRwkweDZDCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJICTB4NzAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkcJMHg3NAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSSAkweDc4CisKKyNkZWZpbmUgT01BUF9NQVhfTUNCU1BfQ09VTlQgMgorCisjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFXUklURQkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxKQorI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBUkVBRAkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxKQorCisjZGVmaW5lIEFVRElPX01DQlNQCQlPTUFQX01DQlNQMgorI2RlZmluZSBBVURJT19ETUFfVFgJCU9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgKKyNkZWZpbmUgQVVESU9fRE1BX1JYCQlPTUFQMjRYWF9ETUFfTUNCU1AyX1JYCisKKyNlbmRpZgorCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVBRChiYXNlLCByZWcpCQlfX3Jhd19yZWFkdygoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKICNkZWZpbmUgT01BUF9NQ0JTUF9XUklURShiYXNlLCByZWcsIHZhbCkJX19yYXdfd3JpdGV3KCh2YWwpLCAoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU1BDUjEgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBSUlNUCQkJMHgwMDAxCiAjZGVmaW5lIFJSRFkJCQkweDAwMDIKQEAgLTE5NSw2ICsyNTMsMTAgQEAKIAlPTUFQX01DQlNQMywKIH0gb21hcF9tY2JzcF9pZDsKIAordHlwZWRlZiBpbnQgX19iaXR3aXNlIG9tYXBfbWNic3BfaW9fdHlwZV90OworI2RlZmluZSBPTUFQX01DQlNQX0lSUV9JTyAoKF9fZm9yY2Ugb21hcF9tY2JzcF9pb190eXBlX3QpIDEpCisjZGVmaW5lIE9NQVBfTUNCU1BfUE9MTF9JTyAoKF9fZm9yY2Ugb21hcF9tY2JzcF9pb190eXBlX3QpIDIpCisKIHR5cGVkZWYgZW51bSB7CiAJT01BUF9NQ0JTUF9XT1JEXzggPSAwLAogCU9NQVBfTUNCU1BfV09SRF8xMiwKQEAgLTI0Niw2ICszMDgsOSBAQAogCiBpbnQgb21hcF9tY2JzcF94bWl0X2J1ZmZlcih1bnNpZ25lZCBpbnQgaWQsIGRtYV9hZGRyX3QgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKIGludCBvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKHVuc2lnbmVkIGludCBpZCwgZG1hX2FkZHJfdCBidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpOworaW50IG9tYXBfbWNic3Bfc3BpX21hc3Rlcl94bWl0X3dvcmRfcG9sbCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB3b3JkKTsKK2ludCBvbWFwX21jYnNwX3NwaV9tYXN0ZXJfcmVjdl93b3JkX3BvbGwodW5zaWduZWQgaW50IGlkLCB1MzIgKiB3b3JkKTsKKwogCiAvKiBTUEkgc3BlY2lmaWMgQVBJICovCiB2b2lkIG9tYXBfbWNic3Bfc2V0X3NwaV9tb2RlKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3Bfc3BpX2NmZyAqIHNwaV9jZmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tY3NwaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tY3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllN2Y0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21jc3BpLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfT01BUDJfTUNTUElfSAorI2RlZmluZSBfT01BUDJfTUNTUElfSAorCitzdHJ1Y3Qgb21hcDJfbWNzcGlfcGxhdGZvcm1fY29uZmlnIHsKKwl1bnNpZ25lZCBsb25nCWJhc2U7CisJdW5zaWduZWQgc2hvcnQJbnVtX2NzOworfTsKKworc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgeworCXVuc2lnbmVkIHR1cmJvX21vZGU6MTsKKworCS8qIERvIHdlIHdhbnQgb25lIGNoYW5uZWwgZW5hYmxlZCBhdCB0aGUgc2FtZSB0aW1lPyAqLworCXVuc2lnbmVkIHNpbmdsZV9jaGFubmVsOjE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaAppbmRleCA0NmJlOGI4Li44OGNkNGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW5lbGF1cy5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01FTkVMQVVTX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRU5FTEFVU19ICiAKLWV4dGVybiB2b2lkIG1lbmVsYXVzX21tY19yZWdpc3Rlcih2b2lkICgqY2FsbGJhY2spKHU4IGNhcmRfbWFzayksCitleHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfcmVnaXN0ZXIodm9pZCAoKmNhbGxiYWNrKSh1bnNpZ25lZCBsb25nIGRhdGEsIHU4IGNhcmRfbWFzayksCiAJCQkJICB1bnNpZ25lZCBsb25nIGRhdGEpOwogZXh0ZXJuIHZvaWQgbWVuZWxhdXNfbW1jX3JlbW92ZSh2b2lkKTsKIGV4dGVybiB2b2lkIG1lbmVsYXVzX21tY19vcGVuZHJhaW4oaW50IGVuYWJsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAppbmRleCAxMzQxNWE5Li4wZGMyNGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKQEAgLTExMiwxNCArMTEyLDEzIEBACiAgKiAgIGFzIG11eCBjb25maWcKICAqLwogI2RlZmluZSBNVVhfQ0ZHXzczMChkZXNjLCBtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSwJXAotCQkgICBwdWxsX3JlZywgcHVsbF9iaXQsIHB1bGxfc3RhdHVzLAlcCi0JCSAgIHB1X3BkX3JlZywgcHVfcGRfc3RhdHVzLCBkZWJ1Z19zdGF0dXMpXAorCQkgICBwdWxsX2JpdCwgcHVsbF9zdGF0dXMsIGRlYnVnX3N0YXR1cylcCiB7CQkJCQkJCVwKIAkubmFtZSA9CSBkZXNjLAkJCQkJXAogCS5kZWJ1ZyA9IGRlYnVnX3N0YXR1cywJCQkJXAogCU1VWF9SRUdfNzMwKG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKQkJXAogCVBVTExfUkVHXzczMChtdXhfcmVnLCBwdWxsX2JpdCwgcHVsbF9zdGF0dXMpCVwKLQlQVV9QRF9SRUcocHVfcGRfcmVnLCBwdV9wZF9zdGF0dXMpCQlcCisJUFVfUERfUkVHKE5BLCAwKQkJXAogfSwKIAogI2RlZmluZSBNVVhfQ0ZHXzI0WFgoZGVzYywgcmVnX29mZnNldCwgbW9kZSwJCQlcCkBAIC0xNzIsNiArMTcxLDExIEBACiAJRTRfNzMwX0tCQzIsCiAJRjRfNzMwX0tCQzMsCiAJRTNfNzMwX0tCQzQsCisKKwkvKiBVU0IgKi8KKwlBQTE3XzczMF9VU0JfRE0sCisJVzE2XzczMF9VU0JfUFVfRU4sCisJVzE3XzczMF9VU0JfVkJVU0ksCiB9OwogCiBlbnVtIG9tYXAxeHh4X2luZGV4IHsKQEAgLTQwMyw5ICs0MDcsNTMgQEAKIAkvKiAyNHh4IE1lbmVsYXVzIGludGVycnVwdCAqLwogCVcxOV8yNFhYX1NZU19OSVJRLAogCisJLyogMjR4eCBjbG9jayAqLworCVcxNF8yNFhYX1NZU19DTEtPVVQsCisKKwkvKiAyNDJYIE1jQlNQICovCisJWTE1XzI0WFhfTUNCU1AyX0NMS1gsCisJUjE0XzI0WFhfTUNCU1AyX0ZTWCwKKwlXMTVfMjRYWF9NQ0JTUDJfRFIsCisJVjE1XzI0WFhfTUNCU1AyX0RYLAorCiAJLyogMjR4eCBHUElPICovCisJTTIxXzI0MlhfR1BJTzExLAorCUFBMTBfMjQyWF9HUElPMTMsCisJQUE2XzI0MlhfR1BJTzE0LAorCUFBNF8yNDJYX0dQSU8xNSwKKwlZMTFfMjQyWF9HUElPMTYsCisJQUExMl8yNDJYX0dQSU8xNywKKwlBQThfMjQyWF9HUElPNTgsCiAJWTIwXzI0WFhfR1BJTzYwLAorCVc0X18yNFhYX0dQSU83NCwKIAlNMTVfMjRYWF9HUElPOTIsCisJVjE0XzI0WFhfR1BJTzExNywKKworCVAyMF8yNFhYX1RTQ19JUlEsCisKKwkvKiBVQVJUMyAqLworCUsxNV8yNFhYX1VBUlQzX1RYLAorCUsxNF8yNFhYX1VBUlQzX1JYLAorCisJLyogS2V5cGFkIEdQSU8qLworCVQxOV8yNFhYX0tCUjAsCisJUjE5XzI0WFhfS0JSMSwKKwlWMThfMjRYWF9LQlIyLAorCU0yMV8yNFhYX0tCUjMsCisJRTVfXzI0WFhfS0JSNCwKKwlNMThfMjRYWF9LQlI1LAorCVIyMF8yNFhYX0tCQzAsCisJTTE0XzI0WFhfS0JDMSwKKwlIMTlfMjRYWF9LQkMyLAorCVYxN18yNFhYX0tCQzMsCisJUDIxXzI0WFhfS0JDNCwKKwlMMTRfMjRYWF9LQkM1LAorCU4xOV8yNFhYX0tCQzYsCisKKwkvKiAyNHh4IE1lbmVsYXVzIEtleXBhZCBHUElPICovCisJQjNfXzI0WFhfS0JSNSwKKwlBQTRfMjRYWF9LQkMyLAorCUIxM18yNFhYX0tCQzYsCiB9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfTVVYCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAtYWxzYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwLWFsc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ2OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwLWFsc2EuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcC1hbHNhLmgKKyAqCisgKiBBbHNhIERyaXZlciBmb3IgQUlDMjMgYW5kIFRTQzIxMDEgY29kZWNzIG9uIE9NQVAgcGxhdGZvcm0gYm9hcmRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWthIExhaXRpbyA8bGFtaWtyQGNjLmp5dS5maT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEgLSBJTmRUIC0gTWFuYXVzIEJyYXppbAorICogV3JpdHRlbiBieSBEYW5pZWwgUGV0cmluaSwgRGF2aWQgQ29oZW4sIEFuZGVyc29uIEJyaWdsaWEKKyAqICAgICAgICAgICAge2RhbmllbC5wZXRyaW5pLCBkYXZpZC5jb2hlbiwgYW5kZXJzb24uYnJpZ2xpYX1AaW5kdC5vcmcuYnIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICBIaXN0b3J5CisgKiAgLS0tLS0tLQorICoKKyAqICAyMDA1LzA3LzI1IElOZFQtMTBMRSBLZXJuZWwgVGVhbSAtIAlBbHNhIGRyaXZlciBmb3Igb21hcCBvc2ssCisgKiAgCQkJCQlvcmlnaW5hbCB2ZXJzaW9uIGJhc2VkIGluIHNhMTEwMCBkcml2ZXIKKyAqICAJCQkJCWFuZCBvbWFwIG9zcyBkcml2ZXIuCisgKi8KKworI2lmbmRlZiBfX09NQVBfQUxTQV9ICisjZGVmaW5lIF9fT01BUF9BTFNBX0gKKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjZGVmaW5lIERNQV9CVUZfU0laRQkoMTAyNCAqIDgpCisKKy8qCisgKiBCdWZmZXIgbWFuYWdlbWVudCBmb3IgYWxzYSBhbmQgZG1hCisgKi8KK3N0cnVjdCBhdWRpb19zdHJlYW0geworCWNoYXIgKmlkOwkJLyogaWRlbnRpZmljYXRpb24gc3RyaW5nICovCisJaW50IHN0cmVhbV9pZDsJCS8qIG51bWVyaWMgaWRlbnRpZmljYXRpb24gKi8KKwlpbnQgZG1hX2RldjsJCS8qIGRtYSBudW1iZXIgb2YgdGhhdCBkZXZpY2UgKi8KKwlpbnQgKmxjaDsJCS8qIENoYWluIG9mIGNoYW5uZWxzIHRoaXMgc3RyZWFtIGlzIGxpbmtlZCB0byAqLworCWNoYXIgc3RhcnRlZDsJCS8qIHRvIHN0b3JlIGlmIHRoZSBjaGFpbiB3YXMgc3RhcnRlZCBvciBub3QgKi8KKwlpbnQgZG1hX3FfaGVhZDsJCS8qIERNQSBDaGFubmVsIFEgSGVhZCAqLworCWludCBkbWFfcV90YWlsOwkJLyogRE1BIENoYW5uZWwgUSBUYWlsICovCisJY2hhciBkbWFfcV9jb3VudDsJLyogRE1BIENoYW5uZWwgUSBDb3VudCAqLworCWludCBhY3RpdmU6MTsJCS8qIHdlIGFyZSB1c2luZyB0aGlzIHN0cmVhbSBmb3IgdHJhbnNmZXIgbm93ICovCisJaW50IHBlcmlvZDsJCS8qIGN1cnJlbnQgdHJhbnNmZXIgcGVyaW9kICovCisJaW50IHBlcmlvZHM7CQkvKiBjdXJyZW50IGNvdW50IG9mIHBlcmlvZHMgcmVnaXN0ZXJkIGluIHRoZSBETUEgZW5naW5lICovCisJc3BpbmxvY2tfdCBkbWFfbG9jazsJLyogZm9yIGxvY2tpbmcgaW4gRE1BIG9wZXJhdGlvbnMgKi8KKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpzdHJlYW07CS8qIHRoZSBwY20gc3RyZWFtICovCisJdW5zaWduZWQgbGlua2VkOjE7CS8qIGRtYSBjaGFubmVscyBsaW5rZWQgKi8KKwlpbnQgb2Zmc2V0OwkJLyogc3RvcmUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGxhc3QgcGVyaW9kIGluIHRoZSBhbHNhIGJ1ZmZlciAqLworCWludCAoKmh3X3N0YXJ0KSh2b2lkKTsgIC8qIGludGVyZmFjZSB0byBzdGFydCBIVyBpbnRlcmZhY2UsIGUuZy4gTWNCU1AgKi8KKwlpbnQgKCpod19zdG9wKSh2b2lkKTsgICAvKiBpbnRlcmZhY2UgdG8gc3RvcCBIVyBpbnRlcmZhY2UsIGUuZy4gTWNCU1AgKi8KK307CisKKy8qCisgKiBBbHNhIGNhcmQgc3RydWN0dXJlIGZvciBhaWMyMworICovCitzdHJ1Y3Qgc25kX2NhcmRfb21hcF9jb2RlYyB7CisJc25kX2NhcmRfdCAqY2FyZDsKKwlzbmRfcGNtX3QgKnBjbTsKKwlsb25nIHNhbXBsZXJhdGU7CisJc3RydWN0IGF1ZGlvX3N0cmVhbSBzWzJdOwkvKiBwbGF5YmFjayAmIGNhcHR1cmUgKi8KK307CisKKy8qIENvZGVjIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbiBwb2ludGVycy4KKyAqIENvZGVjIChvbWFwLWFsc2EtYWljMjMuYyBhbmQgb21hcC1hbHNhLXRzYzIxMDEuYykKKyAqIGFyZSByZXNwb25zaWJsZSBmb3IgZGVmaW5pbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLgorICovCitzdHJ1Y3Qgb21hcF9hbHNhX2NvZGVjX2NvbmZpZyB7CisJY2hhciAJKm5hbWU7CisJc3RydWN0CW9tYXBfbWNic3BfcmVnX2NmZyAqbWNic3BfcmVnc19hbHNhOworCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0X3QgKmh3X2NvbnN0cmFpbnRzX3JhdGVzOworCXNuZF9wY21faGFyZHdhcmVfdCAqc25kX29tYXBfYWxzYV9wbGF5YmFjazsKKwlzbmRfcGNtX2hhcmR3YXJlX3QgKnNuZF9vbWFwX2Fsc2FfY2FwdHVyZTsKKwl2b2lkCSgqY29kZWNfY29uZmlndXJlX2Rldikodm9pZCk7CisJdm9pZAkoKmNvZGVjX3NldF9zYW1wbGVyYXRlKShsb25nKTsKKwl2b2lkCSgqY29kZWNfY2xvY2tfc2V0dXApKHZvaWQpOworCWludAkoKmNvZGVjX2Nsb2NrX29uKSh2b2lkKTsKKwlpbnQgCSgqY29kZWNfY2xvY2tfb2ZmKSh2b2lkKTsKKwlpbnQJKCpnZXRfZGVmYXVsdF9zYW1wbGVyYXRlKSh2b2lkKTsKK307CisKKy8qKioqKioqKioqKiBNaXhlciBmdW5jdGlvbiBwcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgc25kX29tYXBfbWl4ZXIoc3RydWN0IHNuZF9jYXJkX29tYXBfY29kZWMgKik7Cit2b2lkIHNuZF9vbWFwX2luaXRfbWl4ZXIodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3ZvaWQgc25kX29tYXBfc3VzcGVuZF9taXhlcih2b2lkKTsKK3ZvaWQgc25kX29tYXBfcmVzdW1lX21peGVyKHZvaWQpOworI2VuZGlmCisKK2ludCBzbmRfb21hcF9hbHNhX3Bvc3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IG9tYXBfYWxzYV9jb2RlY19jb25maWcgKmNvbmZpZyk7CitpbnQgc25kX29tYXBfYWxzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisjaWZkZWYgQ09ORklHX1BNCitpbnQgc25kX29tYXBfYWxzYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitpbnQgc25kX29tYXBfYWxzYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisjZWxzZQorI2RlZmluZSBzbmRfb21hcF9hbHNhX3N1c3BlbmQJTlVMTAorI2RlZmluZSBzbmRfb21hcF9hbHNhX3Jlc3VtZQlOVUxMCisjZW5kaWYKKwordm9pZCBjYWxsYmFja19vbWFwX2Fsc2Ffc291bmRfZG1hKHZvaWQgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcGZiLmgKaW5kZXggNGJhMjYyMi4uZmNjZGIzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCkBAIC0zNCw5ICszNCwxMCBAQAogI2RlZmluZSBPTUFQRkJfTUlSUk9SCQlPTUFQX0lPVygzMSwgaW50KQogI2RlZmluZSBPTUFQRkJfU1lOQ19HRlgJCU9NQVBfSU8oMzcpCiAjZGVmaW5lIE9NQVBGQl9WU1lOQwkJT01BUF9JTygzOCkKLSNkZWZpbmUgT01BUEZCX1NFVF9VUERBVEVfTU9ERQlPTUFQX0lPVyg0MCwgZW51bSBvbWFwZmJfdXBkYXRlX21vZGUpCisjZGVmaW5lIE9NQVBGQl9TRVRfVVBEQVRFX01PREUJT01BUF9JT1coNDAsIGludCkKKyNkZWZpbmUgT01BUEZCX1VQREFURV9XSU5ET1dfT0xEIE9NQVBfSU9XKDQxLCBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3dfb2xkKQogI2RlZmluZSBPTUFQRkJfR0VUX0NBUFMJCU9NQVBfSU9SKDQyLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBPTUFQRkJfR0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQzLCBlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSkKKyNkZWZpbmUgT01BUEZCX0dFVF9VUERBVEVfTU9ERQlPTUFQX0lPVyg0MywgaW50KQogI2RlZmluZSBPTUFQRkJfTENEX1RFU1QJCU9NQVBfSU9XKDQ1LCBpbnQpCiAjZGVmaW5lIE9NQVBGQl9DVFJMX1RFU1QJT01BUF9JT1coNDYsIGludCkKICNkZWZpbmUgT01BUEZCX1VQREFURV9XSU5ET1cJT01BUF9JT1coNDcsIHN0cnVjdCBvbWFwZmJfdXBkYXRlX3dpbmRvdykKQEAgLTY2LDkgKzY3LDE0IEBACiB9OwogCiBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cgewotCXUzMiB4LCB5OwotCXUzMiB3aWR0aCwgaGVpZ2h0OwotCXUzMiBmb3JtYXQ7CisJX191MzIgeCwgeTsKKwlfX3UzMiB3aWR0aCwgaGVpZ2h0OworCV9fdTMyIGZvcm1hdDsKK307CisKK3N0cnVjdCBvbWFwZmJfdXBkYXRlX3dpbmRvd19vbGQgeworCV9fdTMyIHgsIHk7CisJX191MzIgd2lkdGgsIGhlaWdodDsKIH07CiAKIGVudW0gb21hcGZiX3BsYW5lIHsKQEAgLTgzLDE3ICs4OSwxNyBAQAogfTsKIAogc3RydWN0IG9tYXBmYl9zZXR1cF9wbGFuZSB7Ci0JdTggIHBsYW5lOwotCXU4ICBjaGFubmVsX291dDsKLQl1MzIgb2Zmc2V0OwotCXUzMiBwb3NfeCwgcG9zX3k7Ci0JdTMyIHdpZHRoLCBoZWlnaHQ7Ci0JdTMyIGNvbG9yX21vZGU7CisJX191OCAgcGxhbmU7CisJX191OCAgY2hhbm5lbF9vdXQ7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIHBvc194LCBwb3NfeTsKKwlfX3UzMiB3aWR0aCwgaGVpZ2h0OworCV9fdTMyIGNvbG9yX21vZGU7CiB9OwogCiBzdHJ1Y3Qgb21hcGZiX2VuYWJsZV9wbGFuZSB7Ci0JdTggIHBsYW5lOwotCXU4ICBlbmFibGU7CisJX191OCAgcGxhbmU7CisJX191OCAgZW5hYmxlOwogfTsKIAogZW51bSBvbWFwZmJfY29sb3Jfa2V5X3R5cGUgewpAQCAtMTAzLDEwICsxMDksMTAgQEAKIH07CiAKIHN0cnVjdCBvbWFwZmJfY29sb3Jfa2V5IHsKLQl1OCAgY2hhbm5lbF9vdXQ7Ci0JdTMyIGJhY2tncm91bmQ7Ci0JdTMyIHRyYW5zX2tleTsKLQl1OCAga2V5X3R5cGU7CisJX191OCAgY2hhbm5lbF9vdXQ7CisJX191MzIgYmFja2dyb3VuZDsKKwlfX3UzMiB0cmFuc19rZXk7CisJX191OCAga2V5X3R5cGU7CiB9OwogCiBlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSB7CkBAIC0xMjAsNiArMTI2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KIAogI2RlZmluZSBPTUFQX0xDRENfSU5WX1ZTWU5DICAgICAgICAgICAgIDB4MDAwMQogI2RlZmluZSBPTUFQX0xDRENfSU5WX0hTWU5DICAgICAgICAgICAgIDB4MDAwMgpAQCAtMTg0LDE5ICsxOTMsMzggQEAKIAlpbnQgcmVfY3ljbGVfdGltZTsKIAlpbnQgY3NfcHVsc2Vfd2lkdGg7CiAJaW50IGFjY2Vzc190aW1lOworCisJaW50IGNsa19kaXY7CisKKwl1MzIgdGltWzVdOwkJLyogc2V0IGJ5IGV4dGlmLT5jb252ZXJ0X3RpbWluZ3MgKi8KKworCWludCBjb252ZXJ0ZWQ7CiB9OwogCiBzdHJ1Y3QgbGNkX2N0cmxfZXh0aWYgewogCWludCAgKCppbml0KQkJKHZvaWQpOwogCXZvaWQgKCpjbGVhbnVwKQkJKHZvaWQpOworCXZvaWQgKCpnZXRfY2xrX2luZm8pCSh1MzIgKmNsa19wZXJpb2QsIHUzMiAqbWF4X2Nsa19kaXYpOworCWludCAgKCpjb252ZXJ0X3RpbWluZ3MpCShzdHJ1Y3QgZXh0aWZfdGltaW5ncyAqdGltaW5ncyk7CiAJdm9pZCAoKnNldF90aW1pbmdzKQkoY29uc3Qgc3RydWN0IGV4dGlmX3RpbWluZ3MgKnRpbWluZ3MpOwotCXZvaWQgKCp3cml0ZV9jb21tYW5kKQkodTMyIGNtZCk7Ci0JdTMyICAoKnJlYWRfZGF0YSkJKHZvaWQpOwotCXZvaWQgKCp3cml0ZV9kYXRhKQkodTMyIGRhdGEpOworCXZvaWQgKCpzZXRfYml0c19wZXJfY3ljbGUpKGludCBicGMpOworCXZvaWQgKCp3cml0ZV9jb21tYW5kKQkoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKKwl2b2lkICgqcmVhZF9kYXRhKQkodm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKKwl2b2lkICgqd3JpdGVfZGF0YSkJKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CiAJdm9pZCAoKnRyYW5zZmVyX2FyZWEpCShpbnQgd2lkdGgsIGludCBoZWlnaHQsCiAJCQkJIHZvaWQgKGNhbGxiYWNrKSh2b2lkICogZGF0YSksIHZvaWQgKmRhdGEpOworCXVuc2lnbmVkIGxvbmcJCW1heF90cmFuc21pdF9zaXplOwogfTsKIAorc3RydWN0IG9tYXBmYl9ub3RpZmllcl9ibG9jayB7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCW5iOworCXZvaWQJCQkqZGF0YTsKK307CisKK3R5cGVkZWYgaW50ICgqb21hcGZiX25vdGlmaWVyX2NhbGxiYWNrX3QpKHN0cnVjdCBvbWFwZmJfbm90aWZpZXJfYmxvY2sgKiwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBldmVudCwKKwkJCQkJICAgc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KTsKKwogc3RydWN0IGxjZF9jdHJsIHsKIAljb25zdCBjaGFyCSpuYW1lOwogCXZvaWQJCSpkYXRhOwpAQCAtMjA0LDkgKzIzMiwxMSBAQAogCWludAkJKCppbml0KQkJICAoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LAogCQkJCQkgICBpbnQgZXh0X21vZGUsIGludCByZXFfdnJhbV9zaXplKTsKIAl2b2lkCQkoKmNsZWFudXApCSAgKHZvaWQpOworCXZvaWQJCSgqYmluZF9jbGllbnQpCSAgKHN0cnVjdCBvbWFwZmJfbm90aWZpZXJfYmxvY2sgKm5iKTsKIAl2b2lkCQkoKmdldF92cmFtX2xheW91dCkodW5zaWduZWQgbG9uZyAqc2l6ZSwKIAkJCQkJICAgdm9pZCAqKnZpcnRfYmFzZSwKIAkJCQkJICAgZG1hX2FkZHJfdCAqcGh5c19iYXNlKTsKKwlpbnQJCSgqbW1hcCkJCSAgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAl1bnNpZ25lZCBsb25nCSgqZ2V0X2NhcHMpCSAgKHZvaWQpOwogCWludAkJKCpzZXRfdXBkYXRlX21vZGUpKGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlIG1vZGUpOwogCWVudW0gb21hcGZiX3VwZGF0ZV9tb2RlICgqZ2V0X3VwZGF0ZV9tb2RlKSh2b2lkKTsKQEAgLTI0MCw3ICsyNzAsNyBAQAogCWludAkJCXN0YXRlOwogCWludCAgICAgICAgICAgICAgICAgICAgIGV4dF9sY2RjOyAgICAgICAgICAgICAgIC8qIFVzaW5nIGV4dGVybmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExDRCBjb250cm9sbGVyICovCi0Jc3RydWN0IHNlbWFwaG9yZQlycXVldWVfc2VtYTsKKwlzdHJ1Y3QgbXV0ZXgJCXJxdWV1ZV9tdXRleDsKIAogCXZvaWQJCQkqdnJhbV92aXJ0X2Jhc2U7CiAJZG1hX2FkZHJfdAkJdnJhbV9waHlzX2Jhc2U7CkBAIC0yNjEsMTIgKzI5MSwxMyBAQAogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiB9OwogCi1leHRlcm4gc3RydWN0IGxjZF9wYW5lbCBoM19wYW5lbDsKLWV4dGVybiBzdHJ1Y3QgbGNkX3BhbmVsIGgyX3BhbmVsOwotZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgcDJfcGFuZWw7Ci1leHRlcm4gc3RydWN0IGxjZF9wYW5lbCBvc2tfcGFuZWw7Ci1leHRlcm4gc3RydWN0IGxjZF9wYW5lbCBpbm5vdmF0b3IxNjEwX3BhbmVsOwotZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgaW5ub3ZhdG9yMTUxMF9wYW5lbDsKK3N0cnVjdCBvbWFwZmJfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IG9tYXBfbGNkX2NvbmZpZyAgIGxjZDsKKwlzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcgZmJtZW07Cit9OworCisjZGVmaW5lIE9NQVBGQl9FVkVOVF9SRUFEWQkxCisjZGVmaW5lIE9NQVBGQl9FVkVOVF9ESVNBQkxFRAkyCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogZXh0ZXJuIHN0cnVjdCBsY2RfY3RybCBvbWFwMV9sY2RfY3RybDsKQEAgLTI3NCw3ICszMDUsMjAgQEAKIGV4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfZGlzcF9jdHJsOwogI2VuZGlmCiAKK2V4dGVybiB2b2lkIG9tYXBmYl9yZWdpc3Rlcl9wYW5lbChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCk7CiBleHRlcm4gdm9pZCBvbWFwZmJfd3JpdGVfZmlyc3RfcGl4ZWwoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LCB1MTYgcGl4dmFsKTsKK2V4dGVybiB2b2lkIG9tYXBmYl9ub3RpZnlfY2xpZW50cyhzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYsCisJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50KTsKK2V4dGVybiBpbnQgIG9tYXBmYl9yZWdpc3Rlcl9jbGllbnQoc3RydWN0IG9tYXBmYl9ub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgIG9tYXBmYl9ub3RpZmllcl9jYWxsYmFja190IGNhbGxiYWNrLAorCQkJCSAgICB2b2lkICpjYWxsYmFja19kYXRhKTsKK2V4dGVybiBpbnQgIG9tYXBmYl91bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3Qgb21hcGZiX25vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50ICBvbWFwZmJfdXBkYXRlX3dpbmRvd19hc3luYyhzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cgKndpbiwKKwkJCQkJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopLAorCQkJCQl2b2lkICpjYWxsYmFja19kYXRhKTsKKworLyogaW4gYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyAqLworZXh0ZXJuIHZvaWQgb21hcGZiX3Jlc2VydmVfbWVtKHZvaWQpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFjZTlhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcGFyYW0uaApAQCAtMCwwICsxLDggQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wYXJhbS5oCisgKgorICovCisKKyNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVJfSFoKKyNkZWZpbmUgSFoJQ09ORklHX09NQVBfMzJLX1RJTUVSX0haCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaAppbmRleCA3Yzc5MDQyLi4wNWIwMDNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCkBAIC00OSw3ICs0OSw3IEBACiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQb3dlcm1hbmFnZW1lbnQgYml0bWFza3MKKyAqIFBvd2VyIG1hbmFnZW1lbnQgYml0bWFza3MKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogI2RlZmluZSBJRExFX1dBSVRfQ1lDTEVTCQkweDAwMDAwZmZmCkBAIC0xMTIsMzIgKzExMiw1OSBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKK2V4dGVybiB2b2lkIHByZXZlbnRfaWRsZV9zbGVlcCh2b2lkKTsKK2V4dGVybiB2b2lkIGFsbG93X2lkbGVfc2xlZXAodm9pZCk7CisKKy8qKgorICogY2xrX2RlbnlfaWRsZSAtIFByZXZlbnRzIHRoZSBjbG9jayBmcm9tIGJlaW5nIGlkbGVkIGR1cmluZyBNUFUgaWRsZQorICogQGNsazogY2xvY2sgc2lnbmFsIGhhbmRsZQorICovCit2b2lkIGNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKKworLyoqCisgKiBjbGtfYWxsb3dfaWRsZSAtIENvdW50ZXJzIHByZXZpb3VzIGNsa19kZW55X2lkbGUKKyAqIEBjbGs6IGNsb2NrIHNpZ25hbCBoYW5kbGUKKyAqLwordm9pZCBjbGtfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7CisKIGV4dGVybiB2b2lkIG9tYXBfcG1faWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfcG1fc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXA3MzBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKIGV4dGVybiB2b2lkIG9tYXAxNTEwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBvbWFwMTYxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuIHZvaWQgb21hcDI0eHhfY3B1X3N1c3BlbmQodTMyIGRsbF9jdHJsLCB1MzIgY3B1X3JldmlzaW9uKTsKIGV4dGVybiB2b2lkIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDI0eHhfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDczMF9jcHVfc3VzcGVuZF9zejsKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE1MTBfY3B1X3N1c3BlbmRfc3o7CitleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNjEwX2NwdV9zdXNwZW5kX3N6OworZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMjR4eF9jcHVfc3VzcGVuZF9zejsKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZF9zejsKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3o7CitleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OworZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZF9zejsKIAogI2lmZGVmIENPTkZJR19PTUFQX1NFUklBTF9XQUtFCiBleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF93YWtlX3RyaWdnZXIoaW50IGVuYWJsZSk7CiAjZWxzZQorI2RlZmluZSBvbWFwX3NlcmlhbF93YWtldXBfaW5pdCgpCXt9CiAjZGVmaW5lIG9tYXBfc2VyaWFsX3dha2VfdHJpZ2dlcih4KQl7fQogI2VuZGlmCS8qIENPTkZJR19PTUFQX1NFUklBTF9XQUtFICovCiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDczMF9jcHVfc3VzcGVuZF9zejsKLWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZF9zejsKLWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE1MTBfY3B1X3N1c3BlbmRfc3o7Ci1leHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OwotZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTYxMF9jcHVfc3VzcGVuZF9zejsKLWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmRfc3o7Ci0KICNkZWZpbmUgQVJNX1NBVkUoeCkgYXJtX3NsZWVwX3NhdmVbQVJNX1NMRUVQX1NBVkVfIyN4XSA9IG9tYXBfcmVhZGwoeCkKICNkZWZpbmUgQVJNX1JFU1RPUkUoeCkgb21hcF93cml0ZWwoKGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFXyMjeF0pLCAoeCkpCiAjZGVmaW5lIEFSTV9TSE9XKHgpIGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFXyMjeF0KIAorI2RlZmluZSBEU1BfU0FWRSh4KSBkc3Bfc2xlZXBfc2F2ZVtEU1BfU0xFRVBfU0FWRV8jI3hdID0gX19yYXdfcmVhZHcoeCkKKyNkZWZpbmUgRFNQX1JFU1RPUkUoeCkgX19yYXdfd3JpdGV3KChkc3Bfc2xlZXBfc2F2ZVtEU1BfU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQorI2RlZmluZSBEU1BfU0hPVyh4KSBkc3Bfc2xlZXBfc2F2ZVtEU1BfU0xFRVBfU0FWRV8jI3hdCisKICNkZWZpbmUgVUxQRF9TQVZFKHgpIHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfIyN4XSA9IG9tYXBfcmVhZHcoeCkKICNkZWZpbmUgVUxQRF9SRVNUT1JFKHgpIG9tYXBfd3JpdGV3KCh1bHBkX3NsZWVwX3NhdmVbVUxQRF9TTEVFUF9TQVZFXyMjeF0pLCAoeCkpCiAjZGVmaW5lIFVMUERfU0hPVyh4KSB1bHBkX3NsZWVwX3NhdmVbVUxQRF9TTEVFUF9TQVZFXyMjeF0KQEAgLTE1NCw2ICsxODEsMTAgQEAKICNkZWZpbmUgTVBVSTE2MTBfUkVTVE9SRSh4KSBvbWFwX3dyaXRlbCgobXB1aTE2MTBfc2xlZXBfc2F2ZVtNUFVJMTYxMF9TTEVFUF9TQVZFXyMjeF0pLCAoeCkpCiAjZGVmaW5lIE1QVUkxNjEwX1NIT1coeCkgbXB1aTE2MTBfc2xlZXBfc2F2ZVtNUFVJMTYxMF9TTEVFUF9TQVZFXyMjeF0KIAorI2RlZmluZSBPTUFQMjRYWF9TQVZFKHgpIG9tYXAyNHh4X3NsZWVwX3NhdmVbT01BUDI0WFhfU0xFRVBfU0FWRV8jI3hdID0geAorI2RlZmluZSBPTUFQMjRYWF9SRVNUT1JFKHgpIHggPSBvbWFwMjR4eF9zbGVlcF9zYXZlW09NQVAyNFhYX1NMRUVQX1NBVkVfIyN4XQorI2RlZmluZSBPTUFQMjRYWF9TSE9XKHgpIG9tYXAyNHh4X3NsZWVwX3NhdmVbT01BUDI0WFhfU0xFRVBfU0FWRV8jI3hdCisKIC8qCiAgKiBMaXN0IG9mIGdsb2JhbCBPTUFQIHJlZ2lzdGVycyB0byBwcmVzZXJ2ZS4KICAqIE1vcmUgb25lcyBsaWtlIENQIGFuZCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQKQEAgLTE3Niw2ICsyMDcsMTUgQEAKIAlBUk1fU0xFRVBfU0FWRV9TSVpFCiB9OwogCitlbnVtIGRzcF9zYXZlX3N0YXRlIHsKKwlEU1BfU0xFRVBfU0FWRV9TVEFSVCA9IDAsCisJLyoKKwkgKiBEU1AgcmVnaXN0ZXJzIDE2IGJpdHMKKwkgKi8KKwlEU1BfU0xFRVBfU0FWRV9EU1BfSURMRUNUMiwKKwlEU1BfU0xFRVBfU0FWRV9TSVpFCit9OworCiBlbnVtIHVscGRfc2F2ZV9zdGF0ZSB7CiAJVUxQRF9TTEVFUF9TQVZFX1NUQVJUID0gMCwKIAkvKgpAQCAtMjU0LDUgKzI5NCwzMCBAQAogI2VuZGlmCiB9OwogCitlbnVtIG9tYXAyNHh4X3NhdmVfc3RhdGUgeworCU9NQVAyNFhYX1NMRUVQX1NBVkVfU1RBUlQgPSAwLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfSU5UQ19NSVIwLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfSU5UQ19NSVIxLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfSU5UQ19NSVIyLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ01fRkNMS0VOMV9DT1JFLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ01fRkNMS0VOMl9DT1JFLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ01fSUNMS0VOMV9DT1JFLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ01fSUNMS0VOMl9DT1JFLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ01fSUNMS0VONF9DT1JFLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfR1BJTzFfSVJRRU5BQkxFMSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0dQSU8yX0lSUUVOQUJMRTEsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9HUElPM19JUlFFTkFCTEUxLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfR1BJTzRfSVJRRU5BQkxFMSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0dQSU8zX09FLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfR1BJTzRfT0UsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9HUElPM19SSVNJTkdERVRFQ1QsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9HUElPM19GQUxMSU5HREVURUNULAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMiwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFgsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DT05UUk9MX1BBRENPTkZfU1NJMV9GTEFHX1RYLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ09OVFJPTF9QQURDT05GX1NZU19OSVJRVzAsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9TSVpFCit9OworCiAjZW5kaWYgLyogQVNTRU1CTEVSICovCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQX1BNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wcmNtLmgKaW5kZXggN2I0OGE1Yy4uN2JjYWY5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wcmNtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wcmNtLmgKQEAgLTEsNSArMSw3IEBACiAvKgotICogcHJjbS5oIC0gQWNjZXNzIGRlZmluYXRpb25zIGZvciB1c2UgaW4gT01BUDI0WFggY2xvY2sgYW5kIHBvd2VyIG1hbmFnZW1lbnQKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oCisgKgorICogQWNjZXNzIGRlZmluYXRpb25zIGZvciB1c2UgaW4gT01BUDI0WFggY2xvY2sgYW5kIHBvd2VyIG1hbmFnZW1lbnQKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KICAqCkBAIC0yMSw0MDUgKzIzLDcgQEAKICNpZm5kZWYgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAogI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICiAKLS8qIFNFVF9QRVJGT1JNQU5DRV9MRVZFTCBQQVJBTUVURVJTICovCi0jZGVmaW5lIFBSQ01fSEFMRl9TUEVFRCAxCi0jZGVmaW5lIFBSQ01fRlVMTF9TUEVFRCAyCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi0jZGVmaW5lIFBSQ01fUkVHMzIob2Zmc2V0KQlfX1JFRzMyKE9NQVAyNFhYX1BSQ01fQkFTRSArIChvZmZzZXQpKQotCi0jZGVmaW5lIFBSQ01fUkVWSVNJT04JCVBSQ01fUkVHMzIoMHgwMDApCi0jZGVmaW5lIFBSQ01fU1lTQ09ORklHCQlQUkNNX1JFRzMyKDB4MDEwKQotI2RlZmluZSBQUkNNX0lSUVNUQVRVU19NUFUJUFJDTV9SRUczMigweDAxOCkKLSNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfTVBVCVBSQ01fUkVHMzIoMHgwMUMpCi0jZGVmaW5lIFBSQ01fVk9MVENUUkwJCVBSQ01fUkVHMzIoMHgwNTApCi0jZGVmaW5lIFBSQ01fVk9MVFNUCQlQUkNNX1JFRzMyKDB4MDU0KQotI2RlZmluZSBQUkNNX0NMS1NSQ19DVFJMCVBSQ01fUkVHMzIoMHgwNjApCi0jZGVmaW5lIFBSQ01fQ0xLT1VUX0NUUkwJUFJDTV9SRUczMigweDA3MCkKLSNkZWZpbmUgUFJDTV9DTEtFTVVMX0NUUkwJUFJDTV9SRUczMigweDA3OCkKLSNkZWZpbmUgUFJDTV9DTEtDRkdfQ1RSTAlQUkNNX1JFRzMyKDB4MDgwKQotI2RlZmluZSBQUkNNX0NMS0NGR19TVEFUVVMJUFJDTV9SRUczMigweDA4NCkKLSNkZWZpbmUgUFJDTV9WT0xUU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTApCi0jZGVmaW5lIFBSQ01fQ0xLU1NFVFVQCQlQUkNNX1JFRzMyKDB4MDk0KQotI2RlZmluZSBQUkNNX1BPTENUUkwJCVBSQ01fUkVHMzIoMHgwOTgpCi0KLS8qIEdFTkVSQUwgUFVSUE9TRSAqLwotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxCVBSQ01fUkVHMzIoMHgwQjApCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIJUFJDTV9SRUczMigweDBCNCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMwlQUkNNX1JFRzMyKDB4MEI4KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U0CVBSQ01fUkVHMzIoMHgwQkMpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTUJUFJDTV9SRUczMigweDBDMCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNglQUkNNX1JFRzMyKDB4MEM0KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U3CVBSQ01fUkVHMzIoMHgwQzgpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTgJUFJDTV9SRUczMigweDBDQykKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOQlQUkNNX1JFRzMyKDB4MEQwKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMAlQUkNNX1JFRzMyKDB4MEQ0KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMQlQUkNNX1JFRzMyKDB4MEQ4KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMglQUkNNX1JFRzMyKDB4MERDKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMwlQUkNNX1JFRzMyKDB4MEUwKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNAlQUkNNX1JFRzMyKDB4MEU0KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNQlQUkNNX1JFRzMyKDB4MEU4KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNglQUkNNX1JFRzMyKDB4MEVDKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNwlQUkNNX1JFRzMyKDB4MEYwKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOAlQUkNNX1JFRzMyKDB4MEY0KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOQlQUkNNX1JFRzMyKDB4MEY4KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UyMAlQUkNNX1JFRzMyKDB4MEZDKQotCi0vKiBNUFUgKi8KLSNkZWZpbmUgQ01fQ0xLU0VMX01QVQkJUFJDTV9SRUczMigweDE0MCkKLSNkZWZpbmUgQ01fQ0xLU1RDVFJMX01QVQlQUkNNX1JFRzMyKDB4MTQ4KQotI2RlZmluZSBSTV9SU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxNTgpCi0jZGVmaW5lIFBNX1dLREVQX01QVQkJUFJDTV9SRUczMigweDFDOCkKLSNkZWZpbmUgUE1fRVZHRU5DVFJMX01QVQlQUkNNX1JFRzMyKDB4MUQ0KQotI2RlZmluZSBQTV9FVkVHRU5PTlRJTV9NUFUJUFJDTV9SRUczMigweDFEOCkKLSNkZWZpbmUgUE1fRVZFR0VOT0ZGVElNX01QVQlQUkNNX1JFRzMyKDB4MURDKQotI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFUJCVBSQ01fUkVHMzIoMHgxRTApCi0jZGVmaW5lIFBNX1BXU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxRTQpCi0KLS8qIENPUkUgKi8KLSNkZWZpbmUgQ01fRkNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjAwKQotI2RlZmluZSBDTV9GQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDQpCi0jZGVmaW5lIENNX0ZDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIwOCkKLSNkZWZpbmUgQ01fSUNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjEwKQotI2RlZmluZSBDTV9JQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTQpCi0jZGVmaW5lIENNX0lDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIxOCkKLSNkZWZpbmUgQ01fSUNMS0VONF9DT1JFCQlQUkNNX1JFRzMyKDB4MjFDKQotI2RlZmluZSBDTV9JRExFU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjApCi0jZGVmaW5lIENNX0lETEVTVDJfQ09SRQkJUFJDTV9SRUczMigweDIyNCkKLSNkZWZpbmUgQ01fSURMRVNUM19DT1JFCQlQUkNNX1JFRzMyKDB4MjI4KQotI2RlZmluZSBDTV9JRExFU1Q0X0NPUkUJCVBSQ01fUkVHMzIoMHgyMkMpCi0jZGVmaW5lIENNX0FVVE9JRExFMV9DT1JFCVBSQ01fUkVHMzIoMHgyMzApCi0jZGVmaW5lIENNX0FVVE9JRExFMl9DT1JFCVBSQ01fUkVHMzIoMHgyMzQpCi0jZGVmaW5lIENNX0FVVE9JRExFM19DT1JFCVBSQ01fUkVHMzIoMHgyMzgpCi0jZGVmaW5lIENNX0FVVE9JRExFNF9DT1JFCVBSQ01fUkVHMzIoMHgyM0MpCi0jZGVmaW5lIENNX0NMS1NFTDFfQ09SRQkJUFJDTV9SRUczMigweDI0MCkKLSNkZWZpbmUgQ01fQ0xLU0VMMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjQ0KQotI2RlZmluZSBDTV9DTEtTVENUUkxfQ09SRQlQUkNNX1JFRzMyKDB4MjQ4KQotI2RlZmluZSBQTV9XS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkEwKQotI2RlZmluZSBQTV9XS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkE0KQotI2RlZmluZSBQTV9XS1NUMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkIwKQotI2RlZmluZSBQTV9XS1NUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkI0KQotI2RlZmluZSBQTV9XS0RFUF9DT1JFCQlQUkNNX1JFRzMyKDB4MkM4KQotI2RlZmluZSBQTV9QV1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyRTApCi0jZGVmaW5lIFBNX1BXU1RTVF9DT1JFCQlQUkNNX1JFRzMyKDB4MkU0KQotCi0vKiBHRlggKi8KLSNkZWZpbmUgQ01fRkNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMwMCkKLSNkZWZpbmUgQ01fSUNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMxMCkKLSNkZWZpbmUgQ01fSURMRVNUX0dGWAkJUFJDTV9SRUczMigweDMyMCkKLSNkZWZpbmUgQ01fQ0xLU0VMX0dGWAkJUFJDTV9SRUczMigweDM0MCkKLSNkZWZpbmUgQ01fQ0xLU1RDVFJMX0dGWAlQUkNNX1JFRzMyKDB4MzQ4KQotI2RlZmluZSBSTV9SU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDM1MCkKLSNkZWZpbmUgUk1fUlNUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzU4KQotI2RlZmluZSBQTV9XS0RFUF9HRlgJCVBSQ01fUkVHMzIoMHgzQzgpCi0jZGVmaW5lIFBNX1BXU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDNFMCkKLSNkZWZpbmUgUE1fUFdTVFNUX0dGWAkJUFJDTV9SRUczMigweDNFNCkKLQotLyogV0FLRS1VUCAqLwotI2RlZmluZSBDTV9GQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQwMCkKLSNkZWZpbmUgQ01fSUNMS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0MTApCi0jZGVmaW5lIENNX0lETEVTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDIwKQotI2RlZmluZSBDTV9BVVRPSURMRV9XS1VQCVBSQ01fUkVHMzIoMHg0MzApCi0jZGVmaW5lIENNX0NMS1NFTF9XS1VQCQlQUkNNX1JFRzMyKDB4NDQwKQotI2RlZmluZSBSTV9SU1RDVFJMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTApCi0jZGVmaW5lIFJNX1JTVFRJTUVfV0tVUAkJUFJDTV9SRUczMigweDQ1NCkKLSNkZWZpbmUgUk1fUlNUU1RfV0tVUAkJUFJDTV9SRUczMigweDQ1OCkKLSNkZWZpbmUgUE1fV0tFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NEEwKQotI2RlZmluZSBQTV9XS1NUX1dLVVAJCVBSQ01fUkVHMzIoMHg0QjApCi0KLS8qIENMT0NLUyAqLwotI2RlZmluZSBDTV9DTEtFTl9QTEwJCVBSQ01fUkVHMzIoMHg1MDApCi0jZGVmaW5lIENNX0lETEVTVF9DS0dFTgkJUFJDTV9SRUczMigweDUyMCkKLSNkZWZpbmUgQ01fQVVUT0lETEVfUExMCQlQUkNNX1JFRzMyKDB4NTMwKQotI2RlZmluZSBDTV9DTEtTRUwxX1BMTAkJUFJDTV9SRUczMigweDU0MCkKLSNkZWZpbmUgQ01fQ0xLU0VMMl9QTEwJCVBSQ01fUkVHMzIoMHg1NDQpCi0KLS8qIERTUCAqLwotI2RlZmluZSBDTV9GQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODAwKQotI2RlZmluZSBDTV9JQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODEwKQotI2RlZmluZSBDTV9JRExFU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODIwKQotI2RlZmluZSBDTV9BVVRPSURMRV9EU1AJCVBSQ01fUkVHMzIoMHg4MzApCi0jZGVmaW5lIENNX0NMS1NFTF9EU1AJCVBSQ01fUkVHMzIoMHg4NDApCi0jZGVmaW5lIENNX0NMS1NUQ1RSTF9EU1AJUFJDTV9SRUczMigweDg0OCkKLSNkZWZpbmUgUk1fUlNUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4NTApCi0jZGVmaW5lIFJNX1JTVFNUX0RTUAkJUFJDTV9SRUczMigweDg1OCkKLSNkZWZpbmUgUE1fV0tFTl9EU1AJCVBSQ01fUkVHMzIoMHg4QTApCi0jZGVmaW5lIFBNX1dLREVQX0RTUAkJUFJDTV9SRUczMigweDhDOCkKLSNkZWZpbmUgUE1fUFdTVENUUkxfRFNQCQlQUkNNX1JFRzMyKDB4OEUwKQotI2RlZmluZSBQTV9QV1NUU1RfRFNQCQlQUkNNX1JFRzMyKDB4OEU0KQotI2RlZmluZSBQUkNNX0lSUVNUQVRVU19EU1AJUFJDTV9SRUczMigweDhGMCkKLSNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfRFNQCVBSQ01fUkVHMzIoMHg4RjQpCi0KLS8qIElWQSAqLwotI2RlZmluZSBQUkNNX0lSUVNUQVRVU19JVkEJUFJDTV9SRUczMigweDhGOCkKLSNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfSVZBCVBSQ01fUkVHMzIoMHg4RkMpCi0KLS8qIE1vZGVtIG9uIDI0MzAgKi8KLSNkZWZpbmUgQ01fRkNMS0VOX01ETQkJUFJDTV9SRUczMigweEMwMCkKLSNkZWZpbmUgQ01fSUNMS0VOX01ETQkJUFJDTV9SRUczMigweEMxMCkKLSNkZWZpbmUgQ01fSURMRVNUX01ETQkJUFJDTV9SRUczMigweEMyMCkKLSNkZWZpbmUgQ01fQ0xLU0VMX01ETQkJUFJDTV9SRUczMigweEM0MCkKLQotLyogRklYTUU6IE1vdmUgdG8gaGVhZGVyIGZvciAyNDMwICovCi0jZGVmaW5lIERJU1BfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg1MDAwMCkKLSNkZWZpbmUgRElTUF9SRUczMihvZmZzZXQpCV9fUkVHMzIoRElTUF9CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgT01BUDI0WFhfR1BNQ19CQVNFCShMM18yNFhYX0JBU0UgKyAweGEwMDApCi0jZGVmaW5lIEdQTUNfQkFTRQkJKE9NQVAyNFhYX0dQTUNfQkFTRSkKLSNkZWZpbmUgR1BNQ19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BNQ19CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgR1BUMV9CQVNFCQkoT01BUDI0WFhfR1BUMSkKLSNkZWZpbmUgR1BUMV9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BUMV9CQVNFICsgKG9mZnNldCkpCi0KLS8qIE1pc2Mgc3lzY29uZmlnICovCi0jZGVmaW5lIERJU1BDX1NZU0NPTkZJRwkJRElTUF9SRUczMigweDQxMCkKLSNkZWZpbmUgU1BJX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTgwMDApCi0jZGVmaW5lIE1DU1BJMV9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSArIDB4MTApCi0jZGVmaW5lIE1DU1BJMl9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSsweDIwMDAgKyAweDEwKQotCi0vLyNkZWZpbmUgRFNQX01NVV9TWVNDT05GSUcJMHg1QTAwMDAxMAotI2RlZmluZSBDQU1FUkFfTU1VX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDJDMTApCi0vLyNkZWZpbmUgSVZBX01NVV9TWVNDT05GSUcJMHg1RDAwMDAxMAotLy8jZGVmaW5lIERTUF9ETUFfU1lTQ09ORklHCTB4MDBGQ0MwMkMKLSNkZWZpbmUgQ0FNRVJBX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHgyODJDKQotI2RlZmluZSBTWVNURU1fRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDYwMkMpCi0jZGVmaW5lIEdQTUNfU1lTQ09ORklHCQlHUE1DX1JFRzMyKDB4MDEwKQotI2RlZmluZSBNQUlMQk9YRVNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDk0MDEwKQotI2RlZmluZSBVQVJUMV9TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZBMDU0KQotI2RlZmluZSBVQVJUMl9TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZDMDU0KQotI2RlZmluZSBVQVJUM19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZFMDU0KQotLy8jZGVmaW5lIElWQV9TWVNDT05GSUcJCTB4NUMwNjAwMTAKLSNkZWZpbmUgU0RSQ19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MTApCi0jZGVmaW5lIFNNU19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfU01TX0JBU0UrMHgxMCkKLSNkZWZpbmUgU1NJX1NZU0NPTkZJRwkJX19SRUczMihESVNQX0JBU0UrMHg4MDEwKQotLy8jZGVmaW5lIFZMWU5RX1NZU0NPTkZJRwkweDY3RkZGRTEwCi0KLS8qIHJrdyAtIGdvb2QgY2FubmlkYXRlcyBmb3IgUE1fIHRvIHN0YXJ0IHdoYXQgbm0gd2FzIHRyeWluZyAqLwotI2RlZmluZSBPTUFQMjRYWF9HUFQyCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDJBMDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQzCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDc4MDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQ0CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdBMDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQ1CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdDMDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQ2CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdFMDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQ3CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDgwMDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQ4CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDgyMDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQ5CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg0MDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQxMAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4NjAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUMTEJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODgwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDEyCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDhBMDAwKQotCi0jZGVmaW5lIEdQVElNRVIxX1NZU0NPTkZJRwlHUFQxX1JFRzMyKDB4MDEwKQotI2RlZmluZSBHUFRJTUVSMl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQyICsgMHgxMCkKLSNkZWZpbmUgR1BUSU1FUjNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMyArIDB4MTApCi0jZGVmaW5lIEdQVElNRVI0X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDQgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSNV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ1ICsgMHgxMCkKLSNkZWZpbmUgR1BUSU1FUjZfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNiArIDB4MTApCi0jZGVmaW5lIEdQVElNRVI3X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDcgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSOF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ4ICsgMHgxMCkKLSNkZWZpbmUgR1BUSU1FUjlfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUOSArIDB4MTApCi0jZGVmaW5lIEdQVElNRVIxMF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMCArIDB4MTApCi0jZGVmaW5lIEdQVElNRVIxMV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMSArIDB4MTApCi0jZGVmaW5lIEdQVElNRVIxMl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMiArIDB4MTApCi0KLSNkZWZpbmUgR1BJT1hfQkFTRShYKQkJKE9NQVAyNFhYX0dQSU9fQkFTRSsoMHgyMDAwKigoWCktMSkpKQotCi0jZGVmaW5lIEdQSU8xX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgxKSsweDEwKSkKLSNkZWZpbmUgR1BJTzJfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDIpKzB4MTApKQotI2RlZmluZSBHUElPM19TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMykrMHgxMCkpCi0jZGVmaW5lIEdQSU80X1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSg0KSsweDEwKSkKLQotLyogR1AgVElNRVIgMSAqLwotI2RlZmluZSBHUFRJTUVSMV9USVNUQVQJCUdQVDFfUkVHMzIoMHgwMTQpCi0jZGVmaW5lIEdQVElNRVIxX1RJU1IJCUdQVDFfUkVHMzIoMHgwMTgpCi0jZGVmaW5lIEdQVElNRVIxX1RJRVIJCUdQVDFfUkVHMzIoMHgwMUMpCi0jZGVmaW5lIEdQVElNRVIxX1RXRVIJCUdQVDFfUkVHMzIoMHgwMjApCi0jZGVmaW5lIEdQVElNRVIxX1RDTFIJCUdQVDFfUkVHMzIoMHgwMjQpCi0jZGVmaW5lIEdQVElNRVIxX1RDUlIJCUdQVDFfUkVHMzIoMHgwMjgpCi0jZGVmaW5lIEdQVElNRVIxX1RMRFIJCUdQVDFfUkVHMzIoMHgwMkMpCi0jZGVmaW5lIEdQVElNRVIxX1RUR1IJCUdQVDFfUkVHMzIoMHgwMzApCi0jZGVmaW5lIEdQVElNRVIxX1RXUFMJCUdQVDFfUkVHMzIoMHgwMzQpCi0jZGVmaW5lIEdQVElNRVIxX1RNQVIJCUdQVDFfUkVHMzIoMHgwMzgpCi0jZGVmaW5lIEdQVElNRVIxX1RDQVIxCQlHUFQxX1JFRzMyKDB4MDNDKQotI2RlZmluZSBHUFRJTUVSMV9UU0lDUgkJR1BUMV9SRUczMigweDA0MCkKLSNkZWZpbmUgR1BUSU1FUjFfVENBUjIJCUdQVDFfUkVHMzIoMHgwNDQpCi0KLS8qIHJrdyAtLSBiYXNlIGZpeCB1cCBwbGVhc2UuLi4gKi8KLSNkZWZpbmUgR1BUSU1FUjNfVElTUgkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMTgpCi0KLS8qIFNEUkMgKi8KLSNkZWZpbmUgU0RSQ19ETExBX0NUUkwJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDYwKQotI2RlZmluZSBTRFJDX0RMTEFfU1RBVFVTCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDY0KQotI2RlZmluZSBTRFJDX0RMTEJfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjgpCi0jZGVmaW5lIFNEUkNfRExMQl9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNkMpCi0jZGVmaW5lIFNEUkNfUE9XRVIJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDcwKQotI2RlZmluZSBTRFJDX01SXzAJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDg0KQotCi0vKiBHUElPIDEgKi8KLSNkZWZpbmUgR1BJTzFfQkFTRQkJR1BJT1hfQkFTRSgxKQotI2RlZmluZSBHUElPMV9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzFfQkFTRSArIChvZmZzZXQpKQotI2RlZmluZSBHUElPMV9JUlFFTkFCTEUxCUdQSU8xX1JFRzMyKDB4MDFDKQotI2RlZmluZSBHUElPMV9JUlFTVEFUVVMxCUdQSU8xX1JFRzMyKDB4MDE4KQotI2RlZmluZSBHUElPMV9JUlFFTkFCTEUyCUdQSU8xX1JFRzMyKDB4MDJDKQotI2RlZmluZSBHUElPMV9JUlFTVEFUVVMyCUdQSU8xX1JFRzMyKDB4MDI4KQotI2RlZmluZSBHUElPMV9XQUtFVVBFTkFCTEUJR1BJTzFfUkVHMzIoMHgwMjApCi0jZGVmaW5lIEdQSU8xX1JJU0lOR0RFVEVDVAlHUElPMV9SRUczMigweDA0OCkKLSNkZWZpbmUgR1BJTzFfREFUQUlOCQlHUElPMV9SRUczMigweDAzOCkKLSNkZWZpbmUgR1BJTzFfT0UJCUdQSU8xX1JFRzMyKDB4MDM0KQotI2RlZmluZSBHUElPMV9EQVRBT1VUCQlHUElPMV9SRUczMigweDAzQykKLQotLyogR1BJTzIgKi8KLSNkZWZpbmUgR1BJTzJfQkFTRQkJR1BJT1hfQkFTRSgyKQotI2RlZmluZSBHUElPMl9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzJfQkFTRSArIChvZmZzZXQpKQotI2RlZmluZSBHUElPMl9JUlFFTkFCTEUxCUdQSU8yX1JFRzMyKDB4MDFDKQotI2RlZmluZSBHUElPMl9JUlFTVEFUVVMxCUdQSU8yX1JFRzMyKDB4MDE4KQotI2RlZmluZSBHUElPMl9JUlFFTkFCTEUyCUdQSU8yX1JFRzMyKDB4MDJDKQotI2RlZmluZSBHUElPMl9JUlFTVEFUVVMyCUdQSU8yX1JFRzMyKDB4MDI4KQotI2RlZmluZSBHUElPMl9XQUtFVVBFTkFCTEUJR1BJTzJfUkVHMzIoMHgwMjApCi0jZGVmaW5lIEdQSU8yX1JJU0lOR0RFVEVDVAlHUElPMl9SRUczMigweDA0OCkKLSNkZWZpbmUgR1BJTzJfREFUQUlOCQlHUElPMl9SRUczMigweDAzOCkKLSNkZWZpbmUgR1BJTzJfT0UJCUdQSU8yX1JFRzMyKDB4MDM0KQotI2RlZmluZSBHUElPMl9EQVRBT1VUCQlHUElPMl9SRUczMigweDAzQykKLQotLyogR1BJTyAzICovCi0jZGVmaW5lIEdQSU8zX0JBU0UJCUdQSU9YX0JBU0UoMykKLSNkZWZpbmUgR1BJTzNfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU8zX0JBU0UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgR1BJTzNfSVJRRU5BQkxFMQlHUElPM19SRUczMigweDAxQykKLSNkZWZpbmUgR1BJTzNfSVJRU1RBVFVTMQlHUElPM19SRUczMigweDAxOCkKLSNkZWZpbmUgR1BJTzNfSVJRRU5BQkxFMglHUElPM19SRUczMigweDAyQykKLSNkZWZpbmUgR1BJTzNfSVJRU1RBVFVTMglHUElPM19SRUczMigweDAyOCkKLSNkZWZpbmUgR1BJTzNfV0FLRVVQRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDIwKQotI2RlZmluZSBHUElPM19SSVNJTkdERVRFQ1QJR1BJTzNfUkVHMzIoMHgwNDgpCi0jZGVmaW5lIEdQSU8zX0ZBTExJTkdERVRFQ1QJR1BJTzNfUkVHMzIoMHgwNEMpCi0jZGVmaW5lIEdQSU8zX0RBVEFJTgkJR1BJTzNfUkVHMzIoMHgwMzgpCi0jZGVmaW5lIEdQSU8zX09FCQlHUElPM19SRUczMigweDAzNCkKLSNkZWZpbmUgR1BJTzNfREFUQU9VVAkJR1BJTzNfUkVHMzIoMHgwM0MpCi0jZGVmaW5lIEdQSU8zX0RFQk9VTkNFTkFCTEUJR1BJTzNfUkVHMzIoMHgwNTApCi0jZGVmaW5lIEdQSU8zX0RFQk9VTkNJTkdUSU1FCUdQSU8zX1JFRzMyKDB4MDU0KQotCi0vKiBHUElPIDQgKi8KLSNkZWZpbmUgR1BJTzRfQkFTRQkJR1BJT1hfQkFTRSg0KQotI2RlZmluZSBHUElPNF9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzRfQkFTRSArIChvZmZzZXQpKQotI2RlZmluZSBHUElPNF9JUlFFTkFCTEUxCUdQSU80X1JFRzMyKDB4MDFDKQotI2RlZmluZSBHUElPNF9JUlFTVEFUVVMxCUdQSU80X1JFRzMyKDB4MDE4KQotI2RlZmluZSBHUElPNF9JUlFFTkFCTEUyCUdQSU80X1JFRzMyKDB4MDJDKQotI2RlZmluZSBHUElPNF9JUlFTVEFUVVMyCUdQSU80X1JFRzMyKDB4MDI4KQotI2RlZmluZSBHUElPNF9XQUtFVVBFTkFCTEUJR1BJTzRfUkVHMzIoMHgwMjApCi0jZGVmaW5lIEdQSU80X1JJU0lOR0RFVEVDVAlHUElPNF9SRUczMigweDA0OCkKLSNkZWZpbmUgR1BJTzRfRkFMTElOR0RFVEVDVAlHUElPNF9SRUczMigweDA0QykKLSNkZWZpbmUgR1BJTzRfREFUQUlOCQlHUElPNF9SRUczMigweDAzOCkKLSNkZWZpbmUgR1BJTzRfT0UJCUdQSU80X1JFRzMyKDB4MDM0KQotI2RlZmluZSBHUElPNF9EQVRBT1VUCQlHUElPNF9SRUczMigweDAzQykKLSNkZWZpbmUgR1BJTzRfREVCT1VOQ0VOQUJMRQlHUElPNF9SRUczMigweDA1MCkKLSNkZWZpbmUgR1BJTzRfREVCT1VOQ0lOR1RJTUUJR1BJTzRfUkVHMzIoMHgwNTQpCi0KLQotLyogSU8gQ09ORklHICovCi0jZGVmaW5lIENPTlRST0xfQkFTRQkJKE9NQVAyNFhYX0NUUkxfQkFTRSkKLSNkZWZpbmUgQ09OVFJPTF9SRUczMihvZmZzZXQpCV9fUkVHMzIoQ09OVFJPTF9CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMglDT05UUk9MX1JFRzMyKDB4MTA0KQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1lTX1hUQUxPVVQJQ09OVFJPTF9SRUczMigweDEzNCkKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQxX1JYCUNPTlRST0xfUkVHMzIoMHgwQzgpCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFgJQ09OVFJPTF9SRUczMigweDEwQykKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNAlDT05UUk9MX1JFRzMyKDB4MDkwKQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q1CQlDT05UUk9MX1JFRzMyKDB4MEI4KQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q5CQlDT05UUk9MX1JFRzMyKDB4MEJDKQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0QxMwkJQ09OVFJPTF9SRUczMigweDBDMCkKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19WU1lOQwlDT05UUk9MX1JFRzMyKDB4MENDKQotCi0vKiBDT05UUk9MICovCi0jZGVmaW5lIENPTlRST0xfREVWQ09ORgkJQ09OVFJPTF9SRUczMigweDI3NCkKLQotLyogSU5URVJSVVBUIENPTlRST0xMRVIgKi8KLSNkZWZpbmUgSU5UQ19CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweGZlMDAwKQotI2RlZmluZSBJTlRDX1JFRzMyKG9mZnNldCkJX19SRUczMihJTlRDX0JBU0UgKyAob2Zmc2V0KSkKLQotI2RlZmluZSBJTlRDMV9VX0JBU0UJCUlOVENfUkVHMzIoMHgwMDApCi0jZGVmaW5lIElOVENfTUlSMAkJSU5UQ19SRUczMigweDA4NCkKLSNkZWZpbmUgSU5UQ19NSVJfU0VUMAkJSU5UQ19SRUczMigweDA4QykKLSNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIwCQlJTlRDX1JFRzMyKDB4MDg4KQotI2RlZmluZSBJTlRDX0lTUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwOTQpCi0jZGVmaW5lIElOVENfTUlSMQkJSU5UQ19SRUczMigweDBBNCkKLSNkZWZpbmUgSU5UQ19NSVJfU0VUMQkJSU5UQ19SRUczMigweDBBQykKLSNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIxCQlJTlRDX1JFRzMyKDB4MEE4KQotI2RlZmluZSBJTlRDX0lTUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQjQpCi0jZGVmaW5lIElOVENfTUlSMgkJSU5UQ19SRUczMigweDBDNCkKLSNkZWZpbmUgSU5UQ19NSVJfU0VUMgkJSU5UQ19SRUczMigweDBDQykKLSNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIyCQlJTlRDX1JFRzMyKDB4MEM4KQotI2RlZmluZSBJTlRDX0lTUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwRDQpCi0jZGVmaW5lIElOVENfU0lSX0lSUQkJSU5UQ19SRUczMigweDA0MCkKLSNkZWZpbmUgSU5UQ19DT05UUk9MCQlJTlRDX1JFRzMyKDB4MDQ4KQotI2RlZmluZSBJTlRDX0lMUjExCQlJTlRDX1JFRzMyKDB4MTJDKQotI2RlZmluZSBJTlRDX0lMUjMyCQlJTlRDX1JFRzMyKDB4MTgwKQotI2RlZmluZSBJTlRDX0lMUjM3CQlJTlRDX1JFRzMyKDB4MTk0KQotI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkJSU5UQ19SRUczMigweDAxMCkKLQotLyogUkFNIEZJUkVXQUxMICovCi0jZGVmaW5lIFJBTUZXX0JBU0UJCSgweDY4MDA1MDAwKQotI2RlZmluZSBSQU1GV19SRUczMihvZmZzZXQpCV9fUkVHMzIoUkFNRldfQkFTRSArIChvZmZzZXQpKQotCi0jZGVmaW5lIFJBTUZXX1JFUUlORk9QRVJNMAlSQU1GV19SRUczMigweDA0OCkKLSNkZWZpbmUgUkFNRldfUkVBRFBFUk0wCQlSQU1GV19SRUczMigweDA1MCkKLSNkZWZpbmUgUkFNRldfV1JJVEVQRVJNMAlSQU1GV19SRUczMigweDA1OCkKLQotLyogR1BNQyBDUzEgRlBHQSBPTiBVU0VSIElOVEVSRkFDRSBNT0RVTEUgKi8KLS8vI2RlZmluZSBERUJVR19CT0FSRF9MRURfUkVHSVNURVIgMHgwNDAwMDAxNAotCi0vKiBHUE1DIENTMCAqLwotI2RlZmluZSBHUE1DX0NPTkZJRzFfMAkJR1BNQ19SRUczMigweDA2MCkKLSNkZWZpbmUgR1BNQ19DT05GSUcyXzAJCUdQTUNfUkVHMzIoMHgwNjQpCi0jZGVmaW5lIEdQTUNfQ09ORklHM18wCQlHUE1DX1JFRzMyKDB4MDY4KQotI2RlZmluZSBHUE1DX0NPTkZJRzRfMAkJR1BNQ19SRUczMigweDA2QykKLSNkZWZpbmUgR1BNQ19DT05GSUc1XzAJCUdQTUNfUkVHMzIoMHgwNzApCi0jZGVmaW5lIEdQTUNfQ09ORklHNl8wCQlHUE1DX1JFRzMyKDB4MDc0KQotI2RlZmluZSBHUE1DX0NPTkZJRzdfMAkJR1BNQ19SRUczMigweDA3OCkKLQotLyogR1BNQyBDUzEgKi8KLSNkZWZpbmUgR1BNQ19DT05GSUcxXzEJCUdQTUNfUkVHMzIoMHgwOTApCi0jZGVmaW5lIEdQTUNfQ09ORklHMl8xCQlHUE1DX1JFRzMyKDB4MDk0KQotI2RlZmluZSBHUE1DX0NPTkZJRzNfMQkJR1BNQ19SRUczMigweDA5OCkKLSNkZWZpbmUgR1BNQ19DT05GSUc0XzEJCUdQTUNfUkVHMzIoMHgwOUMpCi0jZGVmaW5lIEdQTUNfQ09ORklHNV8xCQlHUE1DX1JFRzMyKDB4MGEwKQotI2RlZmluZSBHUE1DX0NPTkZJRzZfMQkJR1BNQ19SRUczMigweDBhNCkKLSNkZWZpbmUgR1BNQ19DT05GSUc3XzEJCUdQTUNfUkVHMzIoMHgwYTgpCi0KLS8qIERTUyAqLwotI2RlZmluZSBEU1NfQ09OVFJPTAkJRElTUF9SRUczMigweDA0MCkKLSNkZWZpbmUgRElTUENfQ09OVFJPTAkJRElTUF9SRUczMigweDQ0MCkKLSNkZWZpbmUgRElTUENfU1lTU1RBVFVTCQlESVNQX1JFRzMyKDB4NDE0KQotI2RlZmluZSBESVNQQ19JUlFTVEFUVVMJCURJU1BfUkVHMzIoMHg0MTgpCi0jZGVmaW5lIERJU1BDX0lSUUVOQUJMRQkJRElTUF9SRUczMigweDQxQykKLSNkZWZpbmUgRElTUENfQ09ORklHCQlESVNQX1JFRzMyKDB4NDQ0KQotI2RlZmluZSBESVNQQ19ERUZBVUxUX0NPTE9SMAlESVNQX1JFRzMyKDB4NDRDKQotI2RlZmluZSBESVNQQ19ERUZBVUxUX0NPTE9SMQlESVNQX1JFRzMyKDB4NDUwKQotI2RlZmluZSBESVNQQ19UUkFOU19DT0xPUjAJRElTUF9SRUczMigweDQ1NCkKLSNkZWZpbmUgRElTUENfVFJBTlNfQ09MT1IxCURJU1BfUkVHMzIoMHg0NTgpCi0jZGVmaW5lIERJU1BDX0xJTkVfTlVNQkVSCURJU1BfUkVHMzIoMHg0NjApCi0jZGVmaW5lIERJU1BDX1RJTUlOR19ICQlESVNQX1JFRzMyKDB4NDY0KQotI2RlZmluZSBESVNQQ19USU1JTkdfVgkJRElTUF9SRUczMigweDQ2OCkKLSNkZWZpbmUgRElTUENfUE9MX0ZSRVEJCURJU1BfUkVHMzIoMHg0NkMpCi0jZGVmaW5lIERJU1BDX0RJVklTT1IJCURJU1BfUkVHMzIoMHg0NzApCi0jZGVmaW5lIERJU1BDX1NJWkVfRElHCQlESVNQX1JFRzMyKDB4NDc4KQotI2RlZmluZSBESVNQQ19TSVpFX0xDRAkJRElTUF9SRUczMigweDQ3QykKLSNkZWZpbmUgRElTUENfR0ZYX0JBMAkJRElTUF9SRUczMigweDQ4MCkKLSNkZWZpbmUgRElTUENfR0ZYX0JBMQkJRElTUF9SRUczMigweDQ4NCkKLSNkZWZpbmUgRElTUENfR0ZYX1BPU0lUSU9OCURJU1BfUkVHMzIoMHg0ODgpCi0jZGVmaW5lIERJU1BDX0dGWF9TSVpFCQlESVNQX1JFRzMyKDB4NDhDKQotI2RlZmluZSBESVNQQ19HRlhfQVRUUklCVVRFUwlESVNQX1JFRzMyKDB4NEEwKQotI2RlZmluZSBESVNQQ19HRlhfRklGT19USFJFU0hPTEQJRElTUF9SRUczMigweDRBNCkKLSNkZWZpbmUgRElTUENfR0ZYX1JPV19JTkMJRElTUF9SRUczMigweDRBQykKLSNkZWZpbmUgRElTUENfR0ZYX1BJWEVMX0lOQwlESVNQX1JFRzMyKDB4NEIwKQotI2RlZmluZSBESVNQQ19HRlhfV0lORE9XX1NLSVAJRElTUF9SRUczMigweDRCNCkKLSNkZWZpbmUgRElTUENfR0ZYX1RBQkxFX0JBCURJU1BfUkVHMzIoMHg0QjgpCi0jZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUxCURJU1BfUkVHMzIoMHg1RDQpCi0jZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUyCURJU1BfUkVHMzIoMHg1RDgpCi0jZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUzCURJU1BfUkVHMzIoMHg1REMpCi0KLS8qIFdha2UgdXAgZGVmaW5lIGZvciBib2FyZCAqLwotI2RlZmluZSBHUElPOTcJCQkoMSA8PCAxKQotI2RlZmluZSBHUElPODgJCQkoMSA8PCAyNCkKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KK3UzMiBvbWFwX3ByY21fZ2V0X3Jlc2V0X3NvdXJjZXModm9pZCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3JhbS5oCmluZGV4IGU3MmNjYmYuLjZmYzBkZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3JhbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3JhbS5oCkBAIC0yMCw2ICsyMCw4IEBACiAJCQkJICAgICAgdTMyIG1lbV90eXBlKTsKIGV4dGVybiB1MzIgb21hcDJfc2V0X3ByY20odTMyIGRwbGxfY3RybF92YWwsIHUzMiBzZHJjX3Jmcl92YWwsIGludCBieXBhc3MpOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwX2ZiX3NyYW1fc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwX2ZiX3NyYW1fc2l6ZTsKIAogLyogRG8gbm90IHVzZSB0aGVzZSAqLwogZXh0ZXJuIHZvaWQgc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGNrY3RsLCB1MzIgZHBsbGN0bCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAppbmRleCA2NzI0YTgxLi42Nzk3MGQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKQEAgLTksMTIgKzksMTMgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcHJjbS5oPgogCiAjaWZuZGVmIENPTkZJR19NQUNIX1ZPSUNFQkxVRQogI2RlZmluZSB2b2ljZWJsdWVfcmVzZXQoKQkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKTsKKwogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCWNwdV9kb19pZGxlKCk7CkBAIC0zOCwyNCArMzksMTIgQEAKIAkJb21hcF93cml0ZXcoMSwgQVJNX1JTVENUMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKLXsKLQl1MzIgcmF0ZTsKLQlzdHJ1Y3QgY2xrICp2Y2xrLCAqc2NsazsKLQotCXZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7Ci0Jc2NsayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOwotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7Ci0JY2xrX3NldF9yYXRlKHZjbGssIHJhdGUpOwkvKiBnbyB0byBieXBhc3MgZm9yIE9NQVAgbGltaXRhdGlvbiAqLwotCVJNX1JTVENUUkxfV0tVUCB8PSAyOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCiB7CiAJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKIAkJb21hcDFfYXJjaF9yZXNldChtb2RlKTsKIAllbHNlCi0JCW9tYXAyX2FyY2hfcmVzZXQobW9kZSk7CisJCW9tYXBfcHJjbV9hcmNoX3Jlc2V0KG1vZGUpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9kbWEuaAppbmRleCAzZTg4YTJhLi5hMDA4MTUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RtYS5oCkBAIC0yNCwyNyArMjQsMjkgQEAKIAl2b2xhdGlsZSB1MzIgZGNtZDsJLyogRENNRCB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KIH0gcHhhX2RtYV9kZXNjOwogCit0eXBlZGVmIGVudW0geworCURNQV9QUklPX0hJR0ggPSAwLAorCURNQV9QUklPX01FRElVTSA9IDEsCisJRE1BX1BSSU9fTE9XID0gMgorfSBweGFfZG1hX3ByaW87CisKICNpZiBkZWZpbmVkKENPTkZJR19QWEEyN3gpCiAKICNkZWZpbmUgUFhBX0RNQV9DSEFOTkVMUwkzMgotI2RlZmluZSBQWEFfRE1BX05CQ0gocHJpbykJKChwcmlvID09IERNQV9QUklPX0xPVykgPyAxNiA6IDgpCiAKLXR5cGVkZWYgZW51bSB7Ci0JRE1BX1BSSU9fSElHSCA9IDAsCi0JRE1BX1BSSU9fTUVESVVNID0gOCwKLQlETUFfUFJJT19MT1cgPSAxNgotfSBweGFfZG1hX3ByaW87CisjZGVmaW5lIHB4YV9mb3JfZWFjaF9kbWFfcHJpbyhjaCwgcHJpbykJCQkJCVwKK2ZvciAoCQkJCQkJCQkJXAorCWNoID0gcHJpbyAqIDQ7CQkJCQkJCVwKKwljaCAhPSAoNCA8PCBwcmlvKSArIDE2OwkJCQkJCVwKKwljaCA9IChjaCArIDEgPT0gKDQgPDwgcHJpbykpID8gKHByaW8gKiA0ICsgMTYpIDogKGNoICsgMSkJXAorKQogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QWEEyNXgpCiAKICNkZWZpbmUgUFhBX0RNQV9DSEFOTkVMUwkxNgotI2RlZmluZSBQWEFfRE1BX05CQ0gocHJpbykJKChwcmlvID09IERNQV9QUklPX0xPVykgPyA4IDogNCkKIAotdHlwZWRlZiBlbnVtIHsKLQlETUFfUFJJT19ISUdIID0gMCwKLQlETUFfUFJJT19NRURJVU0gPSA0LAotCURNQV9QUklPX0xPVyA9IDgKLX0gcHhhX2RtYV9wcmlvOworI2RlZmluZSBweGFfZm9yX2VhY2hfZG1hX3ByaW8oY2gsIHByaW8pCQkJCQlcCisJZm9yIChjaCA9IHByaW8gKiA0OyBjaCAhPSAoNCA8PCBwcmlvKTsgY2grKykKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9vaGNpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oCmluZGV4IDdkYTg5NTYuLmU4NDhhNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9vaGNpLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL29oY2kuaApAQCAtMTEsNiArMTEsOCBAQAogI2RlZmluZSBQTU1fTlBTX01PREUgICAgICAgICAgIDEKICNkZWZpbmUgUE1NX0dMT0JBTF9NT0RFICAgICAgICAyCiAjZGVmaW5lIFBNTV9QRVJQT1JUX01PREUgICAgICAgMworCisJaW50IHBvd2VyX2J1ZGdldDsKIH07CiAKIGV4dGVybiB2b2lkIHB4YV9zZXRfb2hjaV9pbmZvKHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgKmluZm8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAppbmRleCAxNDA5YzViLi5jOGY1M2E3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaApAQCAtNDg1LDcgKzQ4NSw3IEBACiAjZGVmaW5lIFNBQ1IxX0VOTEJGCSgxIDw8IDUpCS8qIEVuYWJsZSBMb29wYmFjayAqLwogI2RlZmluZSBTQUNSMV9EUlBMCSgxIDw8IDQpIAkvKiBEaXNhYmxlIFJlcGxheWluZyBGdW5jdGlvbiAqLwogI2RlZmluZSBTQUNSMV9EUkVDCSgxIDw8IDMpCS8qIERpc2FibGUgUmVjb3JkaW5nIEZ1bmN0aW9uICovCi0jZGVmaW5lIFNBQ1IxX0FNU0wJKDEgPDwgMSkJLyogU3BlY2lmeSBBbHRlcm5hdGUgTW9kZSAqLworI2RlZmluZSBTQUNSMV9BTVNMCSgxIDw8IDApCS8qIFNwZWNpZnkgQWx0ZXJuYXRlIE1vZGUgKi8KIAogI2RlZmluZSBTQVNSMF9JMlNPRkYJKDEgPDwgNykJLyogQ29udHJvbGxlciBTdGF0dXMgKi8KICNkZWZpbmUgU0FTUjBfUk9SCSgxIDw8IDYpCS8qIFJ4IEZJRk8gT3ZlcnJ1biAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTJ4eF9zcGkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHhfc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1NTkwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhMnh4X3NwaS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU3RlcGhlbiBTdHJlZXQgLyBTdHJlZXRGaXJlIFNvdW5kIExhYnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFBYQTJYWF9TUElfSF8KKyNkZWZpbmUgUFhBMlhYX1NQSV9IXworCisjZGVmaW5lIFBYQTJYWF9DU19BU1NFUlQgKDB4MDEpCisjZGVmaW5lIFBYQTJYWF9DU19ERUFTU0VSVCAoMHgwMikKKworI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkKKyNkZWZpbmUgQ0xPQ0tfU1BFRURfSFogMzY4NjQwMAorI2RlZmluZSBTU1AxX1NlckNsa0Rpdih4KSAoKChDTE9DS19TUEVFRF9IWi8yLyh4KzEpKTw8OCkmMHgwMDAwZmYwMCkKKyNkZWZpbmUgU1NQMl9TZXJDbGtEaXYoeCkgKCgoQ0xPQ0tfU1BFRURfSFovKHgrMSkpPDw4KSYweDAwMGZmZjAwKQorI2RlZmluZSBTU1AzX1NlckNsa0Rpdih4KSAoKChDTE9DS19TUEVFRF9IWi8oeCsxKSk8PDgpJjB4MDAwZmZmMDApCisjZGVmaW5lIFNTUF9USU1FT1VUX1NDQUxFICgyNzEyKQorI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KQorI2RlZmluZSBDTE9DS19TUEVFRF9IWiAxMzAwMDAwMAorI2RlZmluZSBTU1AxX1NlckNsa0Rpdih4KSAoKChDTE9DS19TUEVFRF9IWi8oeCsxKSk8PDgpJjB4MDAwZmZmMDApCisjZGVmaW5lIFNTUDJfU2VyQ2xrRGl2KHgpICgoKENMT0NLX1NQRUVEX0haLyh4KzEpKTw8OCkmMHgwMDBmZmYwMCkKKyNkZWZpbmUgU1NQM19TZXJDbGtEaXYoeCkgKCgoQ0xPQ0tfU1BFRURfSFovKHgrMSkpPDw4KSYweDAwMGZmZjAwKQorI2RlZmluZSBTU1BfVElNRU9VVF9TQ0FMRSAoNzY5KQorI2VuZGlmCisKKyNkZWZpbmUgU1NQX1RJTUVPVVQoeCkgKCh4KjEwMDAwKS9TU1BfVElNRU9VVF9TQ0FMRSkKKyNkZWZpbmUgU1NQMV9WSVJUICgodm9pZCAqKShpb19wMnYoX19QUkVHKFNTQ1IwX1AoMSkpKSkpCisjZGVmaW5lIFNTUDJfVklSVCAoKHZvaWQgKikoaW9fcDJ2KF9fUFJFRyhTU0NSMF9QKDIpKSkpKQorI2RlZmluZSBTU1AzX1ZJUlQgKCh2b2lkICopKGlvX3AydihfX1BSRUcoU1NDUjBfUCgzKSkpKSkKKworZW51bSBweGFfc3NwX3R5cGUgeworCVNTUF9VTkRFRklORUQgPSAwLAorCVBYQTI1eF9TU1AsICAvKiBweGEgMjEwLCAyNTAsIDI1NSwgMjZ4ICovCisJUFhBMjV4X05TU1AsIC8qIHB4YSAyNTUsIDI2eCAoaW5jbHVkaW5nIEFTU1ApICovCisJUFhBMjd4X1NTUCwKK307CisKKy8qIGRldmljZS5wbGF0Zm9ybV9kYXRhIGZvciBTU1AgY29udHJvbGxlciBkZXZpY2VzICovCitzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgeworCWVudW0gcHhhX3NzcF90eXBlIHNzcF90eXBlOworCXUzMiBjbG9ja19lbmFibGU7CisJdTE2IG51bV9jaGlwc2VsZWN0OworCXU4IGVuYWJsZV9kbWE7Cit9OworCisvKiBzcGlfYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEgZm9yIFNQSSBzbGF2ZSBkZXZpY2VzLAorICogY29waWVkIHRvIHNwaV9kZXZpY2UucGxhdGZvcm1fZGF0YSAuLi4gbW9zdGx5IGZvciBkbWEgdHVuaW5nCisgKi8KK3N0cnVjdCBweGEyeHhfc3BpX2NoaXAgeworCXU4IHR4X3RocmVzaG9sZDsKKwl1OCByeF90aHJlc2hvbGQ7CisJdTggZG1hX2J1cnN0X3NpemU7CisJdTMyIHRpbWVvdXRfbWljcm9zZWNzOworCXU4IGVuYWJsZV9sb29wYmFjazsKKwl2b2lkICgqY3NfY29udHJvbCkodTMyIGNvbW1hbmQpOworfTsKKworI2VuZGlmIC8qUFhBMlhYX1NQSV9IXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc2hhcnBzbC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaAppbmRleCAwYjQzNDk1Li45NGNiNDk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc2hhcnBzbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zaGFycHNsLmgKQEAgLTI3LDYgKzI3LDggQEAKICAqLwogc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gewogCWludCBtYXhfaW50ZW5zaXR5OworCWludCBkZWZhdWx0X2ludGVuc2l0eTsKKwlpbnQgbGltaXRfbWFzazsKIAl2b2lkICgqc2V0X2JsX2ludGVuc2l0eSkoaW50IGludGVuc2l0eSk7CiB9OwogZXh0ZXJuIHZvaWQgY29yZ2libF9saW1pdF9pbnRlbnNpdHkoaW50IGxpbWl0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKaW5kZXggOWQ3Zjg3My4uNzQ4MGY0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICNkZWZpbmUgU0NSRUVOX0VORAkJMHhkZmMwMDAwMAogI2RlZmluZSBTQ1JFRU5fQkFTRQkJMHhkZjgwMDAwMAogCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGRmMDEwMDAwCiAKIC8qCkBAIC01OSw4ICs1OCw2IEBACiAjZGVmaW5lIFBDSU9fQkFTRQkJSU9NRU0oMHhlMDAxMDAwMCkKICNkZWZpbmUgRkxPUFBZRE1BX0JBU0UJCUlPTUVNKDB4ZTAwMmEwMDApCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCS8qIFJPTSAqLwotCiAjZGVmaW5lIHZpZGNfd3JpdGVsKHZhbCkJX19yYXdfd3JpdGVsKHZhbCwgVklEQ19CQVNFKQogCiAjZGVmaW5lIElPX0VDX0VBU0lfQkFTRQkJMHg4MTQwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL21lbW9yeS5oCmluZGV4IDA1OTJjYjMuLjMwM2M0MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvbWVtb3J5LmgKQEAgLTMwLDQgKzMwLDEwIEBACiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFJPTQorICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHgwMDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9lbnRyeS1tYWNyby5TCmluZGV4IGNjMDZiMWIuLjg5NGMzNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2VudHJ5LW1hY3JvLlMKQEAgLTYsMTE2ICs2LDgzIEBACiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyovCiAKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgICAgMTAtTWFyLTIwMDUgTENWUiAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKLSAqLworLyogV2UgaGF2ZSBhIHByb2JsZW0gdGhhdCB0aGUgSU5UT0ZGU0VUIHJlZ2lzdGVyIGRvZXMgbm90IGFsd2F5cworICogc2hvdyBvbmUgaW50ZXJydXB0LiBPY2Nhc2lvbmFsbHkgd2UgZ2V0IHR3byBpbnRlcnJ1cHRzIHRocm91Z2gKKyAqIHRoZSBwcmlvcml0aXNlciwgYW5kIHRoaXMgY2F1c2VzIHRoZSBJTlRPRkZTRVQgcmVnaXN0ZXIgdG8gc2hvdworICogd2hhdCBsb29rcyBsaWtlIHRoZSBsb2dpY2FsLW9yIG9mIHRoZSB0d28gaW50ZXJydXB0IG51bWJlcnMuCisgKgorICogVGhhbmtzIHRvIEtsYXVzLCBTaGFubm9uLCBldCBhbCBmb3IgaGVscGluZyB0byBkZWJ1ZyB0aGlzIHByb2JsZW0KKyovCisKKyNkZWZpbmUgSU5UUE5ECQkoMHgxMCkKKyNkZWZpbmUgSU5UT0ZGU0VUCSgweDE0KQorI2RlZmluZSBFWFRJTlRQRU5ECSgweGE4KQorI2RlZmluZSBFWFRJTlRNQVNLCSgweGE0KQorCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgogCi0KIAkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAKLQkJbW92CVx0bXAsICNTM0MyNFhYX1ZBX0lSUQotCQlsZHIJXGlycW5yLCBbIFx0bXAsICMweDE0IF0JCUAgZ2V0IGlycSBubwotMzAwMDA6Ci0JCXRlcQlcaXJxbnIsICM0Ci0JCXRlcW5lCVxpcnFuciwgIzUKLQkJYmVxCTEwMDJmCQkJCUAgZXh0ZXJuYWwgaXJxIHJlZworCQltb3YJXGJhc2UsICNTM0MyNFhYX1ZBX0lSUQogCi0JCUAgZGVidWcgY2hlY2sgdG8gc2VlIGlmIGludGVycnVwdCByZXBvcnRlZCBpcyB0aGUgc2FtZQotCQlAIGFzIHRoZSBvZmZzZXQuLi4uCisJCWxkcglcaXJxc3RhdCwgWyBcYmFzZSwgI0lOVFBORF0KKwkJYmljcwlcaXJxbnIsIFxpcnFzdGF0LCAjMzw8NAkJQEAgb25seSBhbiBHUElPIElSUQorCQliZXEJMjAwMGYKIAotCQl0ZXEJXGlycW5yLCAjMAotCQliZXEJMjAwMDJmCi0JCWxkcglcaXJxc3RhdCwgWyBcdG1wLCAjMHgxMCBdCUAgSU5UUE5ECi0JCW1vdglcaXJxc3RhdCwgXGlycXN0YXQsIGxzciBcaXJxbnIKLQkJdHN0CVxpcnFzdGF0LCAjMQotCQlibmUJMjAwMDJmCisJCUBAIHRyeSB0aGUgaW50ZXJydXB0IG9mZnNldCByZWdpc3Rlciwgc2luY2UgaXQgaXMgdGhlcmUKIAotCQkvKiBkZWJ1Zy93YXJuaW5nIGlmIHdlIGdldCBhbiBpbnZhbHVkIHJlc3BvbnNlIGZyb20gdGhlCi0JCSAqIElOVE9GRlNFVCByZWdpc3RlciAqLwotI2lmIDEKLQkJc3RtZmQJcjEzISwgeyByMCAtIHI0ICwgcjgtcjEyLCByMTQgfQotCQlsZHIJcjEsCVsgXHRtcCwgIzB4MTQgXQkJQCBJTlRPRkZTRVQKLQkJbGRyCXIyLAlbIFx0bXAsICMweDEwIF0JCUAgSU5UUE5ECi0JCWxkcglyMywJWyBcdG1wLCAjMHgwMCBdCQlAIFNSQ1BORAotCQlhZHIJcjAsIDIwMDAzZgotCQlibAlwcmludGsKLQkJYgkyMDAwNGYKKwkJbGRyCVxpcnFuciwgWyBcYmFzZSwgI0lOVE9GRlNFVCBdCisJCW1vdglcdG1wLCAjMQorCQl0c3QJXGlycXN0YXQsIFx0bXAsIGxzbCBcaXJxbnIKKwkJYWRkbmUJXGlycW5yLCBcaXJxbnIsICNJUlFfRUlOVDAKKwkJYm5lCTEwMDFmCiAKLTIwMDAzOgotCQkuYXNjaWkJIjw3PmlycTogZXJyIC0gYmFkIG9mZnNldCAlZCwgaW50cG5kPSUwOHgsIHNyY3BuZD0lMDh4XG4iCi0JCS5ieXRlCTAKLQkJLmFsaWduCTQKLTIwMDA0OgotCQltb3YJcjEsICMxCi0JCW1vdglcdG1wLCAjUzNDMjRYWF9WQV9JUlEKLQkJbGRtZmQJcjEzISwgeyByMCAtIHI0ICwgcjgtcjEyLCByMTQgfQotI2VuZGlmCisJCUBAIHRoZSBudW1iZXIgc3BlY2lmaWVkIGlzIG5vdCBhIHZhbGlkIGlycSwgc28gdHJ5CisJCUBAIGFuZCB3b3JrIGl0IG91dCBmb3Igb3Vyc2VsdmVzCiAKLQkJQCB0cnkgd29ya2luZyBvdXQgaW50ZXJydXB0IG51bWJlciBmb3Igb3Vyc2VsdmVzCi0JCW1vdglcaXJxbnIsICMwCi0JCWxkcglcaXJxc3RhdCwgWyBcdG1wLCAjMHgxMCBdCUAgSU5UUE5ECi0xMDAyMToKLQkJbW92cwlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciMxCi0JCWJjcwkzMDAwMGIJCUAgdHJ5IGFuZCByZS1zdGFydCB0aGUgcHJvY2Nlc3MKLQkJYWRkCVxpcnFuciwgXGlycW5yLCAjMQotCQljbXAJXGlycW5yLCAjMzIKLQkJYmxlCTEwMDIxYgorCQltb3YJXGlycW5yLCAjSVJRX0VJTlQwCQlAQCBzdGFydCBoZXJlCisJCWIJMzAwMGYKIAotCQlAIGZvdW5kIG5vIGludGVycnVwdCwgc2V0IFogZmxhZyBhbmQgbGVhdmUKLQkJbW92cwlcaXJxbnIsICMwCi0JCWIJMTAwMWYKKzIwMDA6CisJCUBAIGxvYWQgdGhlIEdQSU8gaW50ZXJydXB0IHJlZ2lzdGVyLCBhbmQgY2hlY2sgaXQKIAotMjAwMDU6Ci0yMDAwMjoJCUAgZXhpdAotCQlAIHdlIGJhc2UgdGhlIHMzYzI0MTB4IGludGVycnVwdHMgYXQgMTYgYW5kIGFib3ZlIHRvIGFsbG93Ci0JCUAgaXNhIHBlcmlwaGVyYWxzIHRvIGhhdmUgdGhlaXIgc3RhbmRhcmQgaW50ZXJydXB0cywgYWxzbwotCQlAIGVuc3VyZSB0aGF0IFogZmxhZyBpcyB1bi1zZXQgb24gZXhpdAorCQlhZGQJXHRtcCwgXGJhc2UsICNTM0MyNFhYX1ZBX0dQSU8gLSBTM0MyNFhYX1ZBX0lSUQorCQlsZHIJXGlycXN0YXQsIFsgXHRtcCwgIyBFWFRJTlRQRU5EIF0KKwkJbGRyCVxpcnFuciwgICBbIFx0bXAsICMgRVhUSU5UTUFTSyBdCisJCWJpY3MJXGlycXN0YXQsIFxpcnFzdGF0LCBcaXJxbnIKKwkJYmVxCTEwMDFmCiAKLQkJQCBub3RlLCB3ZSBjYW5ub3QgYmUgc3VyZSBpZiB3ZSBnZXQgSVJRX0VJTlQwICgwKSB0aGF0Ci0JCUAgdGhlcmUgaXMgc2ltcGx5IG5vIGludGVycnVwdCBwZW5kaW5nLCBzbyBpbiBhbGwgb3RoZXIKLQkJQCBjYXNlcyB3ZSBqdW1wIHRvIHNheSB3ZSBoYXZlIGZvdW5kIHNvbWV0aGluZywgb3RoZXJ3aXNlCi0JCUAgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBpbnRlcnJ1cHQgcmVhbGx5IGlzIGFzc3J0ZWQKLQkJYWRkcwlcaXJxbnIsIFxpcnFuciwgI0lSUV9FSU5UMAotCQl0ZXEJXGlycW5yLCAjSVJRX0VJTlQwCi0JCWJuZQkxMDAxZgkJCQlAIGV4aXQKLQkJbGRyCVxpcnFzdGF0LCBbIFx0bXAsICMweDEwIF0JQCBJTlRQTkQKLQkJdGVxCVxpcnFzdGF0LCAjMAotCQltb3ZlcQlcaXJxbnIsICMwCi0JCWIJMTAwMWYKKwkJbW92CVxpcnFuciwgIyhJUlFfRUlOVDQgLSA0KQogCi0JCUAgd2UgZ2V0IGhlcmUgZnJvbSBubyBtYWluIG9yIGV4dGVybmFsIGludGVycnVwdHMgcGVuZGluZwotMTAwMjoKLQkJYWRkCVx0bXAsIFx0bXAsICNTM0MyNFhYX1ZBX0dQSU8gLSBTM0MyNFhYX1ZBX0lSUQotCQlsZHIJXGlycXN0YXQsIFsgXHRtcCwgIyAweGE4IF0JQCBFWFRJTlRQRU5ECi0JCWxkcglcaXJxbnIsIFsgXHRtcCwgIyAweGE0IF0JQCBFWFRJTlRNQVNLCisJCUBAIHdvcmsgb3V0IHdoaWNoIGlycSAoaWYgYW55KSB3ZSBnb3QKKzMwMDA6CisJCW1vdnMJXHRtcCwgXGlycXN0YXQsIGxzbCMxNgorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzE2CisJCW1vdmVxCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyIzE2CisJCXRzdAlcaXJxc3RhdCwgIzB4ZmYKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICM4CisJCW1vdmVxCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyIzgKKwkJdHN0CVxpcnFzdGF0LCAjMHhmCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjNAorCQltb3ZlcQlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciM0CisJCXRzdAlcaXJxc3RhdCwgIzB4MworCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzIKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IjMgorCQl0c3QJXGlycXN0YXQsICMweDEKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMxCiAKLQkJYmljCVxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCUAgY2xlYXIgbWFza2VkIGlycXMKKwkJQEAgd2UgaGF2ZSB0aGUgdmFsdWUKKwkJbW92cwlcaXJxbnIsIFxpcnFucgogCi0JCW1vdglcaXJxbnIsICNJUlFfRUlOVDQJCUAgc3RhcnQgZXh0aW50IG5vcwotCQltb3YJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IjNAlAIGlnbm9yZSBib3R0b20gNCBiaXRzCi0xMDAyMToKLQkJbW92cwlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciMxCi0JCWJjcwkxMDA0ZgotCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCi0JCWNtcAlcaXJxbnIsICNJUlFfRUlOVDIzCi0JCWJsZQkxMDAyMWIKLQotCQlAIGZvdW5kIG5vIGludGVycnVwdCwgc2V0IFogZmxhZyBhbmQgbGVhdmUKLQkJbW92cwlcaXJxbnIsICMwCi0KLTEwMDQ6CQlAIGVuc3VyZSBaIGZsYWcgY2xlYXIgaW4gY2FzZSBvdXIgTU9WUyBzaGlmdGVkIG91dCB0aGUgbGFzdCBiaXQKLQkJdGVxCVxpcnFuciwgIzAKIDEwMDE6Ci0JCUAgZXhpdCBpcnEgcm91dGluZQotCQkuZW5kbQorCQlAQCBleGl0IGhlcmUsIFogZmxhZyB1bnNldCBpZiBJUlEKIAorCS5lbmRtCiAKIAkJLyogY3VycmVudGx5IGRvbid0IG5lZWQgYW4gZGlzYWJsZV9maXEgbWFjcm8gKi8KIAogCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2xlZHMtZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9sZWRzLWdwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDdlZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9sZWRzLWdwaW8uaApAQCAtMCwwICsxLDI4IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2xlZHMtZ3Bpby5oCisgKgorICogKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0WFggLSBMRURzIEdQSU8gY29ubmVjdG9yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9MRURTR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTEVEU0dQSU9fSCAibGVkcy1ncGlvLmgiCisKKyNkZWZpbmUgUzNDMjRYWF9MRURGX0FDVExPVwkoMTw8MCkJCS8qIExFRCBpcyBvbiB3aGVuIEdQSU8gbG93ICovCisjZGVmaW5lIFMzQzI0WFhfTEVERl9UUklTVEFURQkoMTw8MSkJCS8qIHRyaXN0YXRlIHRvIHR1cm4gb2ZmICovCisKK3N0cnVjdCBzM2MyNHh4X2xlZF9wbGF0ZGF0YSB7CisJdW5zaWduZWQgaW50CQkgZ3BpbzsKKwl1bnNpZ25lZCBpbnQJCSBmbGFnczsKKworCWNoYXIJCQkqbmFtZTsKKwljaGFyCQkJKmRlZl90cmlnZ2VyOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTEVEU0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zcGktZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zcGktZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OGMwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3NwaS1ncGlvLmgKQEAgLTAsMCArMSwzMSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zcGkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIC0gU1BJIENvbnRyb2xsZXIgcGxhdGZyb21fZGV2aWNlIGluZm8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1NQSUdQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX1NQSUdQSU9fSCBfX0ZJTEVfXworCitzdHJ1Y3QgczNjMjQxMF9zcGlncGlvX2luZm87CitzdHJ1Y3Qgc3BpX2JvYXJkX2luZm87CisKK3N0cnVjdCBzM2MyNDEwX3NwaWdwaW9faW5mbyB7CisJdW5zaWduZWQgbG9uZwkJIHBpbl9jbGs7CisJdW5zaWduZWQgbG9uZwkJIHBpbl9tb3NpOworCXVuc2lnbmVkIGxvbmcJCSBwaW5fbWlzbzsKKworCXVuc2lnbmVkIGxvbmcJCSBib2FyZF9zaXplOworCXN0cnVjdCBzcGlfYm9hcmRfaW5mbwkqYm9hcmRfaW5mbzsKKworCXZvaWQgKCpjaGlwX3NlbGVjdCkoc3RydWN0IHMzYzI0MTBfc3BpZ3Bpb19pbmZvICpzcGksIGludCBjcyk7Cit9OworCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1NQSUdQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zcGkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyOWExYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3BpLmgKQEAgLTAsMCArMSwyOSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zcGkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIC0gU1BJIENvbnRyb2xsZXIgcGxhdGZvcm1fZGV2aWNlIGluZm8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1NQSV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1BJX0ggX19GSUxFX18KKworc3RydWN0IHMzYzI0MTBfc3BpX2luZm87CitzdHJ1Y3Qgc3BpX2JvYXJkX2luZm87CisKK3N0cnVjdCBzM2MyNDEwX3NwaV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nCQkgcGluX2NzOwkvKiBzaW1wbGUgZ3BpbyBjcyAqLworCisJdW5zaWduZWQgbG9uZwkJIGJvYXJkX3NpemU7CisJc3RydWN0IHNwaV9ib2FyZF9pbmZvCSpib2FyZF9pbmZvOworCisJdm9pZCAoKnNldF9jcykoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwgaW50IGNzLCBpbnQgcG9sKTsKK307CisKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKaW5kZXggMjg3MTFhYS4uZWUwMDhhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotLyogRmx1c2hpbmcgYXJlYXMgKi8KLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweGUwMDAwMDAwCS8qIFNBMTEwMCB6ZXJvIGJhbmsgKi8KLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmNTAwMDAwMAotI2RlZmluZSBGTFVTSF9CQVNFX01JTklDQUNIRQkweGY1ODAwMDAwCiAjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJMHhmYTA1MDAwMAogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaAppbmRleCAwMThhOWYwLi5hMjlmYWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCkBAIC05MSw0ICs5MSwxMSBAQAogCiAjZW5kaWYKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEgLSBTQTExMDAgemVybyBiYW5rCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweGUwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZjUwMDAwMDAKKyNkZWZpbmUgRkxVU0hfQkFTRV9NSU5JQ0FDSEUJMHhmNTEwMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9oYXJkd2FyZS5oCmluZGV4IDRkMzVmOGMuLmVjYmE0NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaGFyZHdhcmUuaApAQCAtMTcsMTEgKzE3LDYgQEAKICAqLwogI2RlZmluZSBJT19CQVNFCQkJMHhlMDAwMDAwMAogCi0vKgotICogUkFNIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDgwMDAwMDAwCi0KICNlbHNlCiAKICNkZWZpbmUgSU9fQkFTRQkJCTAKQEAgLTMzLDcgKzI4LDYgQEAKICNkZWZpbmUgUk9NQ0FSRF9TSVpFCQkweDA4MDAwMDAwCiAjZGVmaW5lIFJPTUNBUkRfU1RBUlQJCTB4MTAwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCiAjZGVmaW5lIFBDSU9fQkFTRQkJMHhlMDAwMDAwMAogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKaW5kZXggOTVhMjliNC4uNjk2OGQ2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKQEAgLTM5LDQgKzM5LDEwIEBACiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJX192aXJ0X3RvX3BoeXMoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYQorICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg4MDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2J1Zy5oIGIvaW5jbHVkZS9hc20tYXJtL2J1Zy5oCmluZGV4IDdmYjAyMTMuLjVhYjgyMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9BU01BUk1fQlVHX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogCiAjaWZkZWYgQ09ORklHX0JVRwogI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCmluZGV4IGUzZTg1NDEuLjYzY2E3NDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9pc19jb25zaXN0ZW50KGRtYV9hZGRyX3QgaGFuZGxlKQogewotCXJldHVybiAwOworCXJldHVybiAhIWFyY2hfaXNfY29oZXJlbnQoKTsKIH0KIAogLyoKQEAgLTE0NSw3ICsxNDUsOSBAQAogZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsCiAJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQljb25zaXN0ZW50X3N5bmMoY3B1X2FkZHIsIHNpemUsIGRpcik7CisJaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCisJCWNvbnNpc3RlbnRfc3luYyhjcHVfYWRkciwgc2l6ZSwgZGlyKTsKKwogCXJldHVybiB2aXJ0X3RvX2RtYShkZXYsICh1bnNpZ25lZCBsb25nKWNwdV9hZGRyKTsKIH0KICNlbHNlCkBAIC0yNTUsNyArMjU3LDkgQEAKIAogCQlzZy0+ZG1hX2FkZHJlc3MgPSBwYWdlX3RvX2RtYShkZXYsIHNnLT5wYWdlKSArIHNnLT5vZmZzZXQ7CiAJCXZpcnQgPSBwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpICsgc2ctPm9mZnNldDsKLQkJY29uc2lzdGVudF9zeW5jKHZpcnQsIHNnLT5sZW5ndGgsIGRpcik7CisKKwkJaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCisJCQljb25zaXN0ZW50X3N5bmModmlydCwgc2ctPmxlbmd0aCwgZGlyKTsKIAl9CiAKIAlyZXR1cm4gbmVudHM7CkBAIC0zMTAsMTQgKzMxNCwxNiBAQAogZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwgc2l6ZV90IHNpemUsCiAJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JY29uc2lzdGVudF9zeW5jKCh2b2lkICopZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpLCBzaXplLCBkaXIpOworCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQljb25zaXN0ZW50X3N5bmMoKHZvaWQgKilkbWFfdG9fdmlydChkZXYsIGhhbmRsZSksIHNpemUsIGRpcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwgc2l6ZV90IHNpemUsCiAJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JY29uc2lzdGVudF9zeW5jKCh2b2lkICopZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpLCBzaXplLCBkaXIpOworCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQljb25zaXN0ZW50X3N5bmMoKHZvaWQgKilkbWFfdG9fdmlydChkZXYsIGhhbmRsZSksIHNpemUsIGRpcik7CiB9CiAjZWxzZQogZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSosIGRtYV9hZGRyX3QsIHNpemVfdCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwpAQCAtMzQ3LDcgKzM1Myw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKywgc2crKykgewogCQljaGFyICp2aXJ0ID0gcGFnZV9hZGRyZXNzKHNnLT5wYWdlKSArIHNnLT5vZmZzZXQ7Ci0JCWNvbnNpc3RlbnRfc3luYyh2aXJ0LCBzZy0+bGVuZ3RoLCBkaXIpOworCQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKKwkJCWNvbnNpc3RlbnRfc3luYyh2aXJ0LCBzZy0+bGVuZ3RoLCBkaXIpOwogCX0KIH0KIApAQCAtMzU5LDcgKzM2Niw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKywgc2crKykgewogCQljaGFyICp2aXJ0ID0gcGFnZV9hZGRyZXNzKHNnLT5wYWdlKSArIHNnLT5vZmZzZXQ7Ci0JCWNvbnNpc3RlbnRfc3luYyh2aXJ0LCBzZy0+bGVuZ3RoLCBkaXIpOworCQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKKwkJCWNvbnNpc3RlbnRfc3luYyh2aXJ0LCBzZy0+bGVuZ3RoLCBkaXIpOwogCX0KIH0KICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oIGIvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaAppbmRleCA2MjQ2YmY4Li41MmJhZTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKQEAgLTI2LDcgKzI2LDkgQEAKIAogc3RydWN0IHZmcF9oYXJkX3N0cnVjdCB7CiAJX191NjQgZnByZWdzWzE2XTsKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAJX191MzIgZnBteF9zdGF0ZTsKKyNlbmRpZgogCV9fdTMyIGZwZXhjOwogCV9fdTMyIGZwc2NyOwogCS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKaW5kZXggYWZhNWMzZS4uMjA5Mjg5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaApAQCAtMTcyLDEwICsxNzIsMTAgQEAKICAqICB2aXJ0X2FkZHJfdmFsaWQoaykJaW5kaWNhdGVzIHdoZXRoZXIgYSB2aXJ0dWFsIGFkZHJlc3MgaXMgdmFsaWQKICAqLwogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCi0jZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJKFBIWVNfUEZOX09GRlNFVCkKKyNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQlQSFlTX1BGTl9PRkZTRVQKICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBQSFlTX1BGTl9PRkZTRVQgJiYgKHBmbikgPCAoUEhZU19QRk5fT0ZGU0VUICsgbWF4X21hcG5yKSkKIAotI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCShwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCSgodW5zaWduZWQgbG9uZykoa2FkZHIpID49IFBBR0VfT0ZGU0VUICYmICh1bnNpZ25lZCBsb25nKShrYWRkcikgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSkKIAogI2RlZmluZSBQSFlTX1RPX05JRChhZGRyKQkoMCkKQEAgLTE4Nyw4ICsxODcsOCBAQAogICogYXJvdW5kIGluIG1lbW9yeS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KLSNkZWZpbmUgYXJjaF9wZm5fdG9fbmlkKHBmbikJKFBGTl9UT19OSUQocGZuKSkKLSNkZWZpbmUgYXJjaF9sb2NhbF9wYWdlX29mZnNldChwZm4sIG5pZCkgKExPQ0FMX01BUF9OUigocGZuKSA8PCBQQUdFX09GRlNFVCkpCisjZGVmaW5lIGFyY2hfcGZuX3RvX25pZChwZm4pCVBGTl9UT19OSUQocGZuKQorI2RlZmluZSBhcmNoX2xvY2FsX3BhZ2Vfb2Zmc2V0KHBmbiwgbmlkKSBMT0NBTF9NQVBfTlIoKHBmbikgPDwgUEFHRV9TSElGVCkKIAogI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJCQkJCVwKIAkoewkJCQkJCQlcCkBAIC0yMzQsNiArMjM0LDE0IEBACiAjZGVmaW5lIHZpcnRfdG9fZG1hKGRldiwgYWRkcikJCShfX2FyY2hfdmlydF90b19kbWEoZGV2LCBhZGRyKSkKICNlbmRpZgogCisvKgorICogT3B0aW9uYWwgY29oZXJlbmN5IHN1cHBvcnQuICBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IHNlbGVjdGVkCisgKiBJbnRlbCBYU0MzLWJhc2VkIHN5c3RlbXMuCisgKi8KKyNpZm5kZWYgYXJjaF9pc19jb2hlcmVudAorI2RlZmluZSBhcmNoX2lzX2NvaGVyZW50KCkJCTAKKyNlbmRpZgorCiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmMzY4MS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL251bW5vZGVzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotLyogVGhpcyBkZWNsYXJhdGlvbiBmb3IgdGhlIHNpemUgb2YgdGhlIE5VTUEgKENPTkZJR19ESVNDT05USUdNRU0pCi0gKiBtZW1vcnkgbm9kZSB0YWJsZSBpcyB0aGUgZGVmYXVsdC4KLSAqCi0gKiBBIGdvb2QgcGxhY2UgdG8gb3ZlcnJpZGUgdGhpcyB2YWx1ZSBpcyBpbmNsdWRlL2FzbS9hcmNoL21lbW9yeS5oLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJNX05VTU5PREVTX0gKLSNkZWZpbmUgX19BU01fQVJNX05VTU5PREVTX0gKLQotI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KLQotI2lmbmRlZiBOT0RFU19TSElGVAotIyBkZWZpbmUgTk9ERVNfU0hJRlQJMgkvKiBOb3JtYWxseSwgTWF4IDQgTm9kZXMgKi8KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLWh3ZGVmLmggYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS1od2RlZi5oCmluZGV4IDFkMDMzNDkuLjFiYzFmOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLWh3ZGVmLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtaHdkZWYuaApAQCAtNzMsNiArNzMsNyBAQAogI2RlZmluZSBQVEVfRVhUX0FQX1VSV19TUlcJKFBURV9FWFRfQVAxfFBURV9FWFRfQVAwKQogI2RlZmluZSBQVEVfRVhUX1RFWCh4KQkJKCh4KSA8PCA2KQkvKiB2NSAqLwogI2RlZmluZSBQVEVfRVhUX0FQWAkJKDEgPDwgOSkJLyogdjYgKi8KKyNkZWZpbmUgUFRFX0VYVF9DT0hFUkVOVAkoMSA8PCA5KQkvKiBYU2NhbGUzICovCiAjZGVmaW5lIFBURV9FWFRfU0hBUkVECQkoMSA8PCAxMCkJLyogdjYgKi8KICNkZWZpbmUgUFRFX0VYVF9ORwkJKDEgPDwgMTEpCS8qIHY2ICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCmluZGV4IGU1OTVhZTIuLmU4NWMwOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaApAQCAtMTU2LDYgKzE1Niw3IEBACiAjZGVmaW5lIExfUFRFX1dSSVRFCQkoMSA8PCA1KQogI2RlZmluZSBMX1BURV9FWEVDCQkoMSA8PCA2KQogI2RlZmluZSBMX1BURV9ESVJUWQkJKDEgPDwgNykKKyNkZWZpbmUgTF9QVEVfQ09IRVJFTlQJCSgxIDw8IDkpCS8qIEkvTyBjb2hlcmVudCAoeHNjMykgKi8KICNkZWZpbmUgTF9QVEVfU0hBUkVECQkoMSA8PCAxMCkJLyogc2hhcmVkIGJldHdlZW4gQ1BVcyAodjYpICovCiAjZGVmaW5lIExfUFRFX0FTSUQJCSgxIDw8IDExKQkvKiBub24tZ2xvYmFsICh1c2UgQVNJRCwgdjYpICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wcm9jaW5mby5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKaW5kZXggYTljNzViMi4uODQyNTI2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKQEAgLTQ1LDggKzQ1LDYgQEAKIAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIFBST0NfSU5GT19TWgk0OAotCiAjZGVmaW5lIEhXQ0FQX1NXUAkxCiAjZGVmaW5lIEhXQ0FQX0hBTEYJMgogI2RlZmluZSBIV0NBUF9USFVNQgk0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9zcGlubG9jay5oCmluZGV4IDQzYWQ0ZTUuLjQwNmNhOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zcGlubG9jay5oCkBAIC0xNDIsNiArMTQyLDkgQEAKIAk6ICJjYyIpOwogfQogCisvKiB3cml0ZV9jYW5fbG9jayAtIHdvdWxkIHdyaXRlX3RyeWxvY2soKSBzdWNjZWVkPyAqLworI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayh4KQkJKCh4KS0+bG9jayA9PSAweDgwMDAwMDAwKQorCiAvKgogICogUmVhZCBsb2NrcyBhcmUgYSBiaXQgbW9yZSBoYWlyeToKICAqICAtIEV4Y2x1c2l2ZWx5IGxvYWQgdGhlIGxvY2sgdmFsdWUuCkBAIC0xOTgsNCArMjAxLDcgQEAKIAogI2RlZmluZSBfX3Jhd19yZWFkX3RyeWxvY2sobG9jaykgZ2VuZXJpY19fcmF3X3JlYWRfdHJ5bG9jayhsb2NrKQogCisvKiByZWFkX2Nhbl9sb2NrIC0gd291bGQgcmVhZF90cnlsb2NrKCkgc3VjY2VlZD8gKi8KKyNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayh4KQkJKCh4KS0+bG9jayA8IDB4ODAwMDAwMDApCisKICNlbmRpZiAvKiBfX0FTTV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKaW5kZXggOTViM2FiZi4uN2M5NTY4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaApAQCAtMTI3LDYgKzEyNywxMiBAQAogfQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9YU0MzKQorI2RlZmluZQljcHVfaXNfeHNjYWxlKCkJMAorI2Vsc2UKKyNkZWZpbmUJY3B1X2lzX3hzY2FsZSgpCTEKKyNlbmRpZgorCiAjZGVmaW5lIHNldF9jcih4KQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCiAJIm1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDAJQCBzZXQgQ1IiCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAppbmRleCA4ZjMzMWJiLi5jYmYzOWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCkBAIC0zMDgsOCArMzA4LDYgQEAKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjc4KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJCShfX05SX1NZU0NBTExfQkFTRSsyNzkpCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI4MCkKLQotI2lmIGRlZmluZWQoX19BUk1fRUFCSV9fKSAgLyogcmVzZXJ2ZSB0aGVzZSBmb3IgdW4tbXV4aW5nIHNvY2tldGNhbGwgKi8KICNkZWZpbmUgX19OUl9zb2NrZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjgxKQogI2RlZmluZSBfX05SX2JpbmQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjgyKQogI2RlZmluZSBfX05SX2Nvbm5lY3QJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjgzKQpAQCAtMzI3LDkgKzMyNSw2IEBACiAjZGVmaW5lIF9fTlJfZ2V0c29ja29wdAkJCShfX05SX1NZU0NBTExfQkFTRSsyOTUpCiAjZGVmaW5lIF9fTlJfc2VuZG1zZwkJCShfX05SX1NZU0NBTExfQkFTRSsyOTYpCiAjZGVmaW5lIF9fTlJfcmVjdm1zZwkJCShfX05SX1NZU0NBTExfQkFTRSsyOTcpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUk1fRUFCSV9fKSAgLyogcmVzZXJ2ZSB0aGVzZSBmb3IgdW4tbXV4aW5nIGlwYyAqLwogI2RlZmluZSBfX05SX3NlbW9wCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5OCkKICNkZWZpbmUgX19OUl9zZW1nZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjk5KQogI2RlZmluZSBfX05SX3NlbWN0bAkJCShfX05SX1NZU0NBTExfQkFTRSszMDApCkBAIC0zNDEsMTYgKzMzNiwxMCBAQAogI2RlZmluZSBfX05SX3NobWR0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMwNikKICNkZWZpbmUgX19OUl9zaG1nZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzA3KQogI2RlZmluZSBfX05SX3NobWN0bAkJCShfX05SX1NZU0NBTExfQkFTRSszMDgpCi0jZW5kaWYKLQogI2RlZmluZSBfX05SX2FkZF9rZXkJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzA5KQogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CQkoX19OUl9TWVNDQUxMX0JBU0UrMzEwKQogI2RlZmluZSBfX05SX2tleWN0bAkJCShfX05SX1NZU0NBTExfQkFTRSszMTEpCi0KLSNpZiBkZWZpbmVkKF9fQVJNX0VBQklfXykgIC8qIHJlc2VydmVkIGZvciB1bi1tdXhpbmcgaXBjICovCiAjZGVmaW5lIF9fTlJfc2VtdGltZWRvcAkJCShfX05SX1NZU0NBTExfQkFTRSszMTIpCi0jZW5kaWYKLQogI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzEzKQogI2RlZmluZSBfX05SX2lvcHJpb19zZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzE0KQogI2RlZmluZSBfX05SX2lvcHJpb19nZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzE1KQpAQCAtMzcxLDYgKzM2MCwyNCBAQAogI2RlZmluZSBfX0FSTV9OUl91c3IzMgkJCShfX0FSTV9OUl9CQVNFKzQpCiAjZGVmaW5lIF9fQVJNX05SX3NldF90bHMJCShfX0FSTV9OUl9CQVNFKzUpCiAKKy8qCisgKiBUaGUgZm9sbG93aW5nIHN5c2NhbGxzIGFyZSBvYnNvbGV0ZSBhbmQgbm8gbG9uZ2VyIGF2YWlsYWJsZSBmb3IgRUFCSS4KKyAqLworI2lmIGRlZmluZWQoX19BUk1fRUFCSV9fKSAmJiAhZGVmaW5lZChfX0tFUk5FTF9fKQorI3VuZGVmIF9fTlJfdGltZQorI3VuZGVmIF9fTlJfdW1vdW50CisjdW5kZWYgX19OUl9zdGltZQorI3VuZGVmIF9fTlJfYWxhcm0KKyN1bmRlZiBfX05SX3V0aW1lCisjdW5kZWYgX19OUl9nZXRybGltaXQKKyN1bmRlZiBfX05SX3NlbGVjdAorI3VuZGVmIF9fTlJfcmVhZGRpcgorI3VuZGVmIF9fTlJfbW1hcAorI3VuZGVmIF9fTlJfc29ja2V0Y2FsbAorI3VuZGVmIF9fTlJfc3lzY2FsbAorI3VuZGVmIF9fTlJfaXBjCisjZW5kaWYKKwogI2RlZmluZSBfX3N5czIoeCkgI3gKICNkZWZpbmUgX19zeXMxKHgpIF9fc3lzMih4KQogCkBAIC00MDMsNyArNDEwLDggQEAKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKICAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKIAk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKLQk6IF9fU1lTX1JFR19MSVNUKCkgKTsJCQkJCQlcCisJOiBfX1NZU19SRUdfTElTVCgpCQkJCQkJXAorCTogIm1lbW9yeSIgKTsJCQkJCQkJXAogICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAogfQpAQCAtNDE3LDcgKzQyNSw4IEBACiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCiAgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCiAJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCi0JOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSApICk7CQkJCVwKKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApICkJCQkJCVwKKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKICAgX19yZXMgPSBfX3Jlc19yMDsJCQkJCQkJXAogICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKIH0KQEAgLTQzMiw3ICs0NDEsOCBAQAogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAogICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAogCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAotCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSkgKSApOwkJCVwKKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpICkJCQlcCisJOiAibWVtb3J5IiApOwkJCQkJCQlcCiAgIF9fcmVzID0gX19yZXNfcjA7CQkJCQkJCVwKICAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCiB9CkBAIC00NDksNyArNDU5LDggQEAKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKICAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKIAk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKLQk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpICkgKTsJXAorCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMikgKQkJXAorCTogIm1lbW9yeSIgKTsJCQkJCQkJXAogICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAogfQpAQCAtNDY3LDcgKzQ3OCw4IEBACiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCiAgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCiAJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCi0JOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSwgInIiIChfX3IxKSwgInIiIChfX3IyKSwgInIiIChfX3IzKSApICk7IFwKKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpLCAiciIgKF9fcjMpICkgXAorCTogIm1lbW9yeSIgKTsJCQkJCQkJXAogICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAogfQpAQCAtNDg3LDcgKzQ5OSw4IEBACiAgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCiAJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCiAJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSwgInIiIChfX3IxKSwgInIiIChfX3IyKSwJCVwKLQkJCSAgInIiIChfX3IzKSwgInIiIChfX3I0KSApICk7CQkJXAorCQkJICAiciIgKF9fcjMpLCAiciIgKF9fcjQpICkJCQlcCisJOiAibWVtb3J5IiApOwkJCQkJCQlcCiAgIF9fcmVzID0gX19yZXNfcjA7CQkJCQkJCVwKICAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCiB9CkBAIC01MDcsNyArNTIwLDggQEAKICAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKIAk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKIAk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpLAkJXAotCQkJICAiciIgKF9fcjMpLCAiciIgKF9fcjQpLCAiciIgKF9fcjUpICkgKTsJXAorCQkJICAiciIgKF9fcjMpLCAiciIgKF9fcjQpLCAiciIgKF9fcjUpICkJCVwKKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKICAgX19yZXMgPSBfX3Jlc19yMDsJCQkJCQkJXAogICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS92ZnBtYWNyb3MuaCBiL2luY2x1ZGUvYXNtLWFybS92ZnBtYWNyb3MuaAppbmRleCAxNWJkNmU3Li4yN2ZlMDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdmZwbWFjcm9zLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3ZmcG1hY3Jvcy5oCkBAIC0xNiwxMCArMTYsMTggQEAKIAogCUAgcmVhZCBhbGwgdGhlIHdvcmtpbmcgcmVnaXN0ZXJzIGJhY2sgaW50byB0aGUgVkZQCiAJLm1hY3JvCVZGUEZMRE1JQSwgYmFzZQorI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIAlMREMJcDExLCBjcjAsIFtcYmFzZV0sIzMzKjQJCSAgICBAIEZMRE1JQVggXGJhc2UhLCB7ZDAtZDE1fQorI2Vsc2UKKwlMREMJcDExLCBjcjAsIFtcYmFzZV0sIzMyKjQJCSAgICBAIEZMRE1JQUQgXGJhc2UhLCB7ZDAtZDE1fQorI2VuZGlmCiAJLmVuZG0KIAogCUAgd3JpdGUgYWxsIHRoZSB3b3JraW5nIHJlZ2lzdGVycyBvdXQgb2YgdGhlIFZGUAogCS5tYWNybwlWRlBGU1RNSUEsIGJhc2UKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAJU1RDCXAxMSwgY3IwLCBbXGJhc2VdLCMzMyo0CQkgICAgQCBGU1RNSUFYIFxiYXNlISwge2QwLWQxNX0KKyNlbHNlCisJU1RDCXAxMSwgY3IwLCBbXGJhc2VdLCMzMio0CQkgICAgQCBGU1RNSUFEIFxiYXNlISwge2QwLWQxNX0KKyNlbmRpZgogCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zeXN0ZW0uaAppbmRleCAxZDYzYzJhLi5iMWM1OTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc3lzdGVtLmgKQEAgLTgsNyArOCw2IEBACiAgKi8KIAogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqcmVzdW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQpOwotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpICAgICBkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBsYXN0ID0gcmVzdW1lKHByZXYsbmV4dCwgXAogCQkJCQkgKGludCkmKChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikwKS0+dGhyZWFkKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaAppbmRleCAyNjI3YmJkLi5iYjJkZmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaAppbmRleCBmNzJmZjBjLi4xNzM0ZWQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCkBAIC0xOCw4ICsxOCw2IEBACiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0OwogCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkgICAgZG8geyB9IHdoaWxlKDApCi0KIC8qCiAgKiBzd2l0Y2hfdG8ocHJldiwgbmV4dCkgc2hvdWxkIHN3aXRjaCBmcm9tIHRhc2sgYHByZXYnIHRvIGBuZXh0JwogICogYHByZXYnIHdpbGwgbmV2ZXIgYmUgdGhlIHNhbWUgYXMgYG5leHQnLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCmluZGV4IDMyMjUzMWMuLjI2NjJhM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKQEAgLTI4OSw3ICsyODksNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaAppbmRleCBkZTQ2MTQ4Li45MjkxYzI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oCkBAIC03LDggKzcsMTUgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLS8qIEFuIHVuc2lnbmVkIGxvbmcgdHlwZSBmb3Igb3BlcmF0aW9ucyB3aGljaCBhcmUgYXRvbWljIGZvciBhIHNpbmdsZQotICogQ1BVLiAgVXN1YWxseSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggcGVyLWNwdSB2YXJpYWJsZXMuICovCisvKgorICogQSBzaWduZWQgbG9uZyB0eXBlIGZvciBvcGVyYXRpb25zIHdoaWNoIGFyZSBhdG9taWMgZm9yIGEgc2luZ2xlIENQVS4KKyAqIFVzdWFsbHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHBlci1jcHUgdmFyaWFibGVzLgorICoKKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHdoaWNoIHVzZXMgYXRvbWljX2xvbmdfdC4gIFdoaWNoIGlzCisgKiByYXRoZXIgcG9pbnRsZXNzLiAgVGhlIHdob2xlIHBvaW50IGJlaGluZCBsb2NhbF90IGlzIHRoYXQgc29tZSBwcm9jZXNzb3JzCisgKiBjYW4gcGVyZm9ybSBhdG9taWMgYWRkcyBhbmQgc3VidHJhY3RzIGluIGEgbWFubmVyIHdoaWNoIGlzIGF0b21pYyB3cnQgSVJRcworICogcnVubmluZyBvbiB0aGlzIENQVS4gIGxvY2FsX3QgYWxsb3dzIGV4cGxvaXRhdGlvbiBvZiBzdWNoIGNhcGFiaWxpdGllcy4KKyAqLwogCiAvKiBJbXBsZW1lbnQgaW4gdGVybXMgb2YgYXRvbWljcy4gKi8KIApAQCAtMjAsNyArMjcsNyBAQAogCiAjZGVmaW5lIExPQ0FMX0lOSVQoaSkJeyBBVE9NSUNfTE9OR19JTklUKGkpIH0KIAotI2RlZmluZSBsb2NhbF9yZWFkKGwpCSgodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKCYobCktPmEpKQorI2RlZmluZSBsb2NhbF9yZWFkKGwpCWF0b21pY19sb25nX3JlYWQoJihsKS0+YSkKICNkZWZpbmUgbG9jYWxfc2V0KGwsaSkJYXRvbWljX2xvbmdfc2V0KCgmKGwpLT5hKSwoaSkpCiAjZGVmaW5lIGxvY2FsX2luYyhsKQlhdG9taWNfbG9uZ19pbmMoJihsKS0+YSkKICNkZWZpbmUgbG9jYWxfZGVjKGwpCWF0b21pY19sb25nX2RlYygmKGwpLT5hKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC1kZWMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmgKaW5kZXggNDBjNmQxZi4uMjljNmFjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC1kZWMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL211dGV4LWRlYy5oCkBAIC0xNywxMyArMTcsMTQgQEAKICAqIGl0IHdhc24ndCAxIG9yaWdpbmFsbHkuIFRoaXMgZnVuY3Rpb24gTVVTVCBsZWF2ZSB0aGUgdmFsdWUgbG93ZXIgdGhhbgogICogMSBldmVuIHdoZW4gdGhlICIxIiBhc3NlcnRpb24gd2Fzbid0IHRydWUuCiAgKi8KLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF9sb2NrKGNvdW50LCBmYWlsX2ZuKQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybihjb3VudCkgPCAwKSkJCQlcCi0JCWZhaWxfZm4oY291bnQpOwkJCQkJCVwKLQllbHNlCQkJCQkJCQlcCi0JCXNtcF9tYigpOwkJCQkJCVwKLX0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQKK19fbXV0ZXhfZmFzdHBhdGhfbG9jayhhdG9taWNfdCAqY291bnQsIGZhc3RjYWxsIHZvaWQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3sKKwlpZiAodW5saWtlbHkoYXRvbWljX2RlY19yZXR1cm4oY291bnQpIDwgMCkpCisJCWZhaWxfZm4oY291bnQpOworCWVsc2UKKwkJc21wX21iKCk7Cit9CiAKIC8qKgogICogIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwgLSB0cnkgdG8gdGFrZSB0aGUgbG9jayBieSBtb3ZpbmcgdGhlIGNvdW50CkBAIC0zNiw3ICszNyw3IEBACiAgKiBvciBhbnl0aGluZyB0aGUgc2xvdyBwYXRoIGZ1bmN0aW9uIHJldHVybnMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci1fX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsKGF0b21pY190ICpjb3VudCwgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCitfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsKGF0b21pY190ICpjb3VudCwgZmFzdGNhbGwgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCiB7CiAJaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKGNvdW50KSA8IDApKQogCQlyZXR1cm4gZmFpbF9mbihjb3VudCk7CkBAIC01OSwxMiArNjAsMTMgQEAKICAqIF9fbXV0ZXhfc2xvd3BhdGhfbmVlZHNfdG9fdW5sb2NrKCkgbWFjcm8gbmVlZHMgdG8gcmV0dXJuIDEsIGl0IG5lZWRzCiAgKiB0byByZXR1cm4gMCBvdGhlcndpc2UuCiAgKi8KLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF91bmxvY2soY291bnQsIGZhaWxfZm4pCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0Jc21wX21iKCk7CQkJCQkJCVwKLQlpZiAodW5saWtlbHkoYXRvbWljX2luY19yZXR1cm4oY291bnQpIDw9IDApKQkJCVwKLQkJZmFpbF9mbihjb3VudCk7CQkJCQkJXAotfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19tdXRleF9mYXN0cGF0aF91bmxvY2soYXRvbWljX3QgKmNvdW50LCBmYXN0Y2FsbCB2b2lkICgqZmFpbF9mbikoYXRvbWljX3QgKikpCit7CisJc21wX21iKCk7CisJaWYgKHVubGlrZWx5KGF0b21pY19pbmNfcmV0dXJuKGNvdW50KSA8PSAwKSkKKwkJZmFpbF9mbihjb3VudCk7Cit9CiAKICNkZWZpbmUgX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKQkJMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL211dGV4LXhjaGcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oCmluZGV4IDFkMjRmNDcuLjMyYTIxMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIG11dGV4IGZhc3RwYXRoLCBiYXNlZCBvbiB4Y2hnKCkuCiAgKgotICogTk9URTogQW4geGNoZyBiYXNlZCBpbXBsZW1lbnRhdGlvbiBpcyBsZXNzIG9wdGltYWwgdGhhbiBhbiBhdG9taWMKKyAqIE5PVEU6IEFuIHhjaGcgYmFzZWQgaW1wbGVtZW50YXRpb24gbWlnaHQgYmUgbGVzcyBvcHRpbWFsIHRoYW4gYW4gYXRvbWljCiAgKiAgICAgICBkZWNyZW1lbnQvaW5jcmVtZW50IGJhc2VkIGltcGxlbWVudGF0aW9uLiBJZiB5b3VyIGFyY2hpdGVjdHVyZQogICogICAgICAgaGFzIGEgcmVhc29uYWJsZSBhdG9taWMgZGVjL2luYyB0aGVuIHlvdSBzaG91bGQgcHJvYmFibHkgdXNlCiAgKgkgYXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmggaW5zdGVhZCwgb3IgeW91IGNvdWxkIG9wZW4tY29kZSBhbgpAQCAtMjIsMTQgKzIyLDE0IEBACiAgKiB3YXNuJ3QgMSBvcmlnaW5hbGx5LiBUaGlzIGZ1bmN0aW9uIE1VU1QgbGVhdmUgdGhlIHZhbHVlIGxvd2VyIHRoYW4gMQogICogZXZlbiB3aGVuIHRoZSAiMSIgYXNzZXJ0aW9uIHdhc24ndCB0cnVlLgogICovCi0jZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayhjb3VudCwgZmFpbF9mbikJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlpZiAodW5saWtlbHkoYXRvbWljX3hjaGcoY291bnQsIDApICE9IDEpKQkJCVwKLQkJZmFpbF9mbihjb3VudCk7CQkJCQkJXAotCWVsc2UJCQkJCQkJCVwKLQkJc21wX21iKCk7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQorc3RhdGljIGlubGluZSB2b2lkCitfX211dGV4X2Zhc3RwYXRoX2xvY2soYXRvbWljX3QgKmNvdW50LCBmYXN0Y2FsbCB2b2lkICgqZmFpbF9mbikoYXRvbWljX3QgKikpCit7CisJaWYgKHVubGlrZWx5KGF0b21pY194Y2hnKGNvdW50LCAwKSAhPSAxKSkKKwkJZmFpbF9mbihjb3VudCk7CisJZWxzZQorCQlzbXBfbWIoKTsKK30KIAogLyoqCiAgKiAgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbCAtIHRyeSB0byB0YWtlIHRoZSBsb2NrIGJ5IG1vdmluZyB0aGUgY291bnQKQEAgLTQyLDcgKzQyLDcgQEAKICAqIG9yIGFueXRoaW5nIHRoZSBzbG93IHBhdGggZnVuY3Rpb24gcmV0dXJucwogICovCiBzdGF0aWMgaW5saW5lIGludAotX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbChhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQorX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbChhdG9taWNfdCAqY291bnQsIGZhc3RjYWxsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQogewogCWlmICh1bmxpa2VseShhdG9taWNfeGNoZyhjb3VudCwgMCkgIT0gMSkpCiAJCXJldHVybiBmYWlsX2ZuKGNvdW50KTsKQEAgLTY0LDEyICs2NCwxMyBAQAogICogX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKSBtYWNybyBuZWVkcyB0byByZXR1cm4gMSwgaXQgbmVlZHMKICAqIHRvIHJldHVybiAwIG90aGVyd2lzZS4KICAqLwotI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX3VubG9jayhjb3VudCwgZmFpbF9mbikJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlzbXBfbWIoKTsJCQkJCQkJXAotCWlmICh1bmxpa2VseShhdG9taWNfeGNoZyhjb3VudCwgMSkgIT0gMCkpCQkJXAotCQlmYWlsX2ZuKGNvdW50KTsJCQkJCQlcCi19IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkCitfX211dGV4X2Zhc3RwYXRoX3VubG9jayhhdG9taWNfdCAqY291bnQsIGZhc3RjYWxsIHZvaWQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3sKKwlzbXBfbWIoKTsKKwlpZiAodW5saWtlbHkoYXRvbWljX3hjaGcoY291bnQsIDEpICE9IDApKQorCQlmYWlsX2ZuKGNvdW50KTsKK30KIAogI2RlZmluZSBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpCQkwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKaW5kZXggMzU4ZTRkMy4uYzIwNTlhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKQEAgLTE1OSwxNyArMTU5LDggQEAKICNkZWZpbmUgbGF6eV9tbXVfcHJvdF91cGRhdGUocHRlKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2lmbmRlZiBfX0hBVkVfQVJDSF9NVUxUSVBMRV9aRVJPX1BBR0UKKyNpZm5kZWYgX19IQVZFX0FSQ0hfTU9WRV9QVEUKICNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCShwdGUpCi0jZWxzZQotI2RlZmluZSBtb3ZlX3B0ZShwdGUsIHByb3QsIG9sZF9hZGRyLCBuZXdfYWRkcikJCQkJXAotKHsJCQkJCQkJCQlcCi0gCXB0ZV90IG5ld3B0ZSA9IChwdGUpOwkJCQkJCVwKLQlpZiAocHRlX3ByZXNlbnQocHRlKSAmJiBwZm5fdmFsaWQocHRlX3BmbihwdGUpKSAmJgkJXAotCQkJcHRlX3BhZ2UocHRlKSA9PSBaRVJPX1BBR0Uob2xkX2FkZHIpKQkJXAotCQluZXdwdGUgPSBta19wdGUoWkVST19QQUdFKG5ld19hZGRyKSwgKHByb3QpKTsJCVwKLQluZXdwdGU7CQkJCQkJCQlcCi19KQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCmluZGV4IGRmZTk2YzcuLjhlODFjZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCkBAIC00LDggKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiAvKiBnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKLSNkZWZpbmUgcHJlcGFyZV90b19zd2l0Y2goKQlkbyB7IH0gd2hpbGUoMCkKLQogLyoKICAqIHN3aXRjaF90byhuKSBzaG91bGQgc3dpdGNoIHRhc2tzIHRvIHRhc2sgcHRyLCBmaXJzdCBjaGVja2luZyB0aGF0CiAgKiBwdHIgaXNuJ3QgdGhlIGN1cnJlbnQgdGFzaywgaW4gd2hpY2ggY2FzZSBpdCBkb2VzIG5vdGhpbmcuICBUaGlzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oCmluZGV4IDU2YTRhNTYuLmFkYjA1MTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oCkBAIC0yODUsNyArMjg1LDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQotI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjg1ICovCiAjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjg2CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCmluZGV4IGZmOWFjOGQuLjI4ODIzM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCkBAIC0xMzksNiArMTM5LDggQEAKIAogZXh0ZXJuIGludCB0aW1lcl9vdmVyXzgyNTQ7CiAKK2V4dGVybiBpbnQgbW9kZXJuX2FwaWModm9pZCk7CisKICNlbHNlIC8qICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXBpY19zaHV0ZG93bih2b2lkKSB7IH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljZGVmLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWNkZWYuaAppbmRleCAwMzE4NWNlLi45ZjY5OTUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWNkZWYuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWNkZWYuaApAQCAtMzcsNiArMzcsNyBAQAogI2RlZmluZQkJCUFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRAkoMTw8OSkKICNkZWZpbmUJCQlBUElDX1NQSVZfQVBJQ19FTkFCTEVECQkoMTw8OCkKICNkZWZpbmUJCUFQSUNfSVNSCTB4MTAwCisjZGVmaW5lICAgICAgICAgQVBJQ19JU1JfTlIgICAgIDB4OCAgICAgLyogTnVtYmVyIG9mIDMyIGJpdCBJU1IgcmVnaXN0ZXJzLiAqLwogI2RlZmluZQkJQVBJQ19UTVIJMHgxODAKICNkZWZpbmUgCUFQSUNfSVJSCTB4MjAwCiAjZGVmaW5lIAlBUElDX0VTUgkweDI4MApAQCAtMTIwLDcgKzEyMSw2IEBACiAgKi8KICNkZWZpbmUgdTMyIHVuc2lnbmVkIGludAogCi0jZGVmaW5lIGxhcGljICgodm9sYXRpbGUgc3RydWN0IGxvY2FsX2FwaWMgKilBUElDX0JBU0UpCiAKIHN0cnVjdCBsb2NhbF9hcGljIHsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKaW5kZXggMjJkODBlYy4uNGRkY2U1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCkBAIC0xODMsNiArMTgzLDcgQEAKIHsKIAlpbnQgX19pOwogI2lmZGVmIENPTkZJR19NMzg2CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpZih1bmxpa2VseShib290X2NwdV9kYXRhLng4Nj09MykpCiAJCWdvdG8gbm9feGFkZDsKICNlbmRpZgpAQCAtMTk2LDEwICsxOTcsMTAgQEAKIAogI2lmZGVmIENPTkZJR19NMzg2CiBub194YWRkOiAvKiBMZWdhY3kgMzg2IHByb2Nlc3NvciAqLwotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCV9faSA9IGF0b21pY19yZWFkKHYpOwogCWF0b21pY19zZXQodiwgaSArIF9faSk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gaSArIF9faTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmggYi9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaAppbmRleCA1YzBiNTg3Li5iNDRiZmM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaApAQCAtNzEsNiArNzEsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9QNAkJKDMqMzIrIDcpIC8qIFA0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyAoMyozMisgOCkgLyogVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9VUAkJKDMqMzIrIDkpIC8qIHNtcCBrZXJuZWwgcnVubmluZyBvbiB1cCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyAoMyozMisxMCkgLyogRlhTQVZFIGxlYWtzIEZPUC9GSVAvRk9QICovCiAKIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDAxIChlY3gpLCB3b3JkIDQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMwkoNCozMisgMCkgLyogU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucy0zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaCBiL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCmluZGV4IGVkZjY1YmUuLmNhODJhY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCkBAIC0zNSw2ICszNSwxMCBAQAogfTsKIAogZXh0ZXJuIHN0cnVjdCBlODIwbWFwIGU4MjA7CisKK2V4dGVybiBpbnQgZTgyMF9hbGxfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgdW5zaWduZWQgdHlwZSk7CisKICNlbmRpZi8qIV9fQVNTRU1CTFlfXyovCiAKICNlbmRpZi8qX19FODIwX0hFQURFUiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2Zsb3BweS5oIGIvaW5jbHVkZS9hc20taTM4Ni9mbG9wcHkuaAppbmRleCA3OTcyN2FmLi4wMzQwMzA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZmxvcHB5LmgKQEAgLTU2LDcgKzU2LDYgQEAKIAlyZWdpc3RlciB1bnNpZ25lZCBjaGFyIHN0OwogCiAjdW5kZWYgVFJBQ0VfRkxQWV9JTlQKLSNkZWZpbmUgTk9fRkxPUFBZX0FTU0VNQkxFUgogCiAjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKIAlzdGF0aWMgaW50IGNhbGxzPTA7CkBAIC03MSwzOCArNzAsNiBAQAogCQlieXRlcyA9IHZpcnR1YWxfZG1hX2NvdW50OwogI2VuZGlmCiAKLSNpZm5kZWYgTk9fRkxPUFBZX0FTU0VNQkxFUgotCV9fYXNtX18gKAotICAgICAgICJ0ZXN0bCAlMSwlMSIKLQkiamUgM2YiCi0iMToJaW5iICV3NCwlYjAiCi0JImFuZGIgJDE2MCwlYjAiCi0JImNtcGIgJDE2MCwlYjAiCi0JImpuZSAyZiIKLQkiaW5jdyAldzQiCi0JInRlc3RsICUzLCUzIgotCSJqbmUgNGYiCi0JImluYiAldzQsJWIwIgotCSJtb3ZiICUwLCglMikiCi0JImptcCA1ZiIKLSI0OiAgICAJbW92YiAoJTIpLCUwIgotCSJvdXRiICViMCwldzQiCi0iNToJZGVjdyAldzQiCi0JIm91dGIgJTAsJDB4ODAiCi0JImRlY2wgJTEiCi0JImluY2wgJTIiCi0JInRlc3RsICUxLCUxIgotCSJqbmUgMWIiCi0iMzoJaW5iICV3NCwlYjAiCi0iMjoJIgotICAgICAgIDogIj1hIiAoKGNoYXIpIHN0KSwgCi0gICAgICAgIj1jIiAoKGxvbmcpIHZpcnR1YWxfZG1hX2NvdW50KSwgCi0gICAgICAgIj1TIiAoKGxvbmcpIHZpcnR1YWxfZG1hX2FkZHIpCi0gICAgICAgOiAiYiIgKChsb25nKSB2aXJ0dWFsX2RtYV9tb2RlKSwKLSAgICAgICAiZCIgKChzaG9ydCkgdmlydHVhbF9kbWFfcG9ydCs0KSwgCi0gICAgICAgIjEiICgobG9uZykgdmlydHVhbF9kbWFfY291bnQpLAotICAgICAgICIyIiAoKGxvbmcpIHZpcnR1YWxfZG1hX2FkZHIpKTsKLSNlbHNlCQogCXsKIAkJcmVnaXN0ZXIgaW50IGxjb3VudDsKIAkJcmVnaXN0ZXIgY2hhciAqbHB0cjsKQEAgLTEyMiw3ICs4OSw2IEBACiAJCXZpcnR1YWxfZG1hX2FkZHIgPSBscHRyOwogCQlzdCA9IGluYih2aXJ0dWFsX2RtYV9wb3J0KzQpOwogCX0KLSNlbmRpZgogCiAjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKIAljYWxscysrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmggYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaAppbmRleCAxNmVmOWY5Li43ZjFhOGE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaApAQCAtODksNiArODksNyBAQAogICogdGhlbiAzMiBiaXQgSFBFVCBjb3VudGVyIHdyYXBzYXJvdW5kIGluIGxlc3MgdGhhbiAwLjUgc2VjLgogICovCiAjZGVmaW5lIEhQRVRfTUlOX1BFUklPRCAoMTAwMDAwVUwpCisjZGVmaW5lIEhQRVRfVElDS19SQVRFICAoSFogKiAxMDAwMDBVTCkKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHBldF90aWNrOyAgCS8qIGhwZXQgY2xrcyBjb3VudCBwZXIgdGljayAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHBldF9hZGRyZXNzOwkvKiBocGV0IG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pMzg3LmggYi9pbmNsdWRlL2FzbS1pMzg2L2kzODcuaAppbmRleCAxNTJkMGJhLi5iYzFkNmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2kzODcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2kzODcuaApAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgpAQCAtMzgsMTcgKzM5LDM4IEBACiBleHRlcm4gdm9pZCBrZXJuZWxfZnB1X2JlZ2luKHZvaWQpOwogI2RlZmluZSBrZXJuZWxfZnB1X2VuZCgpIGRvIHsgc3R0cygpOyBwcmVlbXB0X2VuYWJsZSgpOyB9IHdoaWxlKDApCiAKKy8qIFdlIG5lZWQgYSBzYWZlIGFkZHJlc3MgdGhhdCBpcyBjaGVhcCB0byBmaW5kIGFuZCB0aGF0IGlzIGFscmVhZHkKKyAgIGluIEwxIGR1cmluZyBjb250ZXh0IHN3aXRjaC4gVGhlIGJlc3QgY2hvaWNlcyBhcmUgdW5mb3J0dW5hdGVseQorICAgZGlmZmVyZW50IGZvciBVUCBhbmQgU01QICovCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzYWZlX2FkZHJlc3MgKF9fcGVyX2NwdV9vZmZzZXRbMF0pCisjZWxzZQorI2RlZmluZSBzYWZlX2FkZHJlc3MgKGtzdGF0X2NwdSgwKS5jcHVzdGF0LnVzZXIpCisjZW5kaWYKKwogLyoKICAqIFRoZXNlIG11c3QgYmUgY2FsbGVkIHdpdGggcHJlZW1wdCBkaXNhYmxlZAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19zYXZlX2luaXRfZnB1KCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayApCiB7CisJLyogVXNlIG1vcmUgbm9wcyB0aGFuIHN0cmljdGx5IG5lZWRlZCBpbiBjYXNlIHRoZSBjb21waWxlcgorCSAgIHZhcmllcyBjb2RlICovCiAJYWx0ZXJuYXRpdmVfaW5wdXQoCi0JCSJmbnNhdmUgJTEgOyBmd2FpdCA7IiBHRU5FUklDX05PUDIsCi0JCSJmeHNhdmUgJTEgOyBmbmNsZXgiLAorCQkiZm5zYXZlICVbZnhdIDtmd2FpdDsiIEdFTkVSSUNfTk9QOCBHRU5FUklDX05PUDQsCisJCSJmeHNhdmUgJVtmeF1cbiIKKwkJImJ0ICQ3LCVbZnN3XSA7IGpuYyAxZiA7IGZuY2xleFxuMToiLAogCQlYODZfRkVBVFVSRV9GWFNSLAotCQkibSIgKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlKQotCQk6Im1lbW9yeSIpOworCQlbZnhdICJtIiAodHNrLT50aHJlYWQuaTM4Ny5meHNhdmUpLAorCQlbZnN3XSAibSIgKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlLnN3ZCkgOiAibWVtb3J5Iik7CisJLyogQU1EIEs3L0s4IENQVXMgZG9uJ3Qgc2F2ZS9yZXN0b3JlIEZEUC9GSVAvRk9QIHVubGVzcyBhbiBleGNlcHRpb24KKwkgICBpcyBwZW5kaW5nLiAgQ2xlYXIgdGhlIHg4NyBzdGF0ZSBoZXJlIGJ5IHNldHRpbmcgaXQgdG8gZml4ZWQKKyAgIAkgICB2YWx1ZXMuIHNhZmVfYWRkcmVzcyBpcyBhIHJhbmRvbSB2YXJpYWJsZSB0aGF0IHNob3VsZCBiZSBpbiBMMSAqLworCWFsdGVybmF0aXZlX2lucHV0KAorCQlHRU5FUklDX05PUDggR0VORVJJQ19OT1AyLAorCQkiZW1tc1xuXHQiCSAgCS8qIGNsZWFyIHN0YWNrIHRhZ3MgKi8KKwkJImZpbGRsICVbYWRkcl0iLCAJLyogc2V0IEY/UCB0byBkZWZpbmVkIHZhbHVlICovCisJCVg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLLAorCQlbYWRkcl0gIm0iIChzYWZlX2FkZHJlc3MpKTsKIAl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pb19hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaAppbmRleCA1MWM0ZTVmLi5kOTJlMjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaApAQCAtMjAwLDYgKzIwMCw3IEBACiBleHRlcm4gaW50IGlvX2FwaWNfZ2V0X3ZlcnNpb24gKGludCBpb2FwaWMpOwogZXh0ZXJuIGludCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzIChpbnQgaW9hcGljKTsKIGV4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKK2V4dGVybiBpbnQgdGltZXJfdXNlc19pb2FwaWNfcGluXzA7CiAjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KIAogZXh0ZXJuIGludCAoKmlvYXBpY19yZW51bWJlcl9pcnEpKGludCBpb2FwaWMsIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9sb2NhbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9sb2NhbC5oCmluZGV4IDAxNzdkYTguLmU2N2ZhMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2xvY2FsLmgKQEAgLTUsNyArNSw3IEBACiAKIHR5cGVkZWYgc3RydWN0CiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb3VudGVyOworCXZvbGF0aWxlIGxvbmcgY291bnRlcjsKIH0gbG9jYWxfdDsKIAogI2RlZmluZSBMT0NBTF9JTklUKGkpCXsgKGkpIH0KQEAgLTI5LDcgKzI5LDcgQEAKIAkJOiJtIiAodi0+Y291bnRlcikpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX2FkZCh1bnNpZ25lZCBsb25nIGksIGxvY2FsX3QgKnYpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX2FkZChsb25nIGksIGxvY2FsX3QgKnYpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJhZGRsICUxLCUwIgpAQCAtMzcsNyArMzcsNyBAQAogCQk6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX3N1Yih1bnNpZ25lZCBsb25nIGksIGxvY2FsX3QgKnYpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX3N1Yihsb25nIGksIGxvY2FsX3QgKnYpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJzdWJsICUxLCUwIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgKaW5kZXggNjIxMTNkMy4uNzcwYmY2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21wc3BlYy5oCkBAIC0xOCw3ICsxOCw2IEBACiBleHRlcm4gdm9pZCBnZXRfc21wX2NvbmZpZyAodm9pZCk7CiBleHRlcm4gaW50IG5yX2lvYXBpY3M7CiBleHRlcm4gaW50IGFwaWNfdmVyc2lvbiBbTUFYX0FQSUNTXTsKLWV4dGVybiBpbnQgbXBfYnVzX2lkX3RvX3R5cGUgW01BWF9NUF9CVVNTRVNdOwogZXh0ZXJuIGludCBtcF9pcnFfZW50cmllczsKIGV4dGVybiBzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgbXBfaXJxcyBbTUFYX0lSUV9TT1VSQ0VTXTsKIGV4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxZjM4Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi0KLS8qIE1heCAxNiBOb2RlcyAqLwotI2RlZmluZSBOT0RFU19TSElGVAk0Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FDUElfU1JBVCkKLQotLyogTWF4IDggTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJMwotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl9OVU1BUSAqLwotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IDI3YmRlOTcuLjI3NTZkNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmgKQEAgLTE4LDYgKzE4LDkgQEAKICNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcHRyLCBwdGV2YWwpIHNldF9wdGUocHRlcHRyLHB0ZXZhbCkKICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IChwbWR2YWwpKQogCisjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHhwKQlkbyB7IHNldF9wdGVfYXQobW0sIGFkZHIsIHhwLCBfX3B0ZSgwKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBtZF9jbGVhcih4cCkJZG8geyBzZXRfcG1kKHhwLCBfX3BtZCgwKSk7IH0gd2hpbGUgKDApCisKICNkZWZpbmUgcHRlcF9nZXRfYW5kX2NsZWFyKG1tLGFkZHIseHApCV9fcHRlKHhjaGcoJih4cCktPnB0ZV9sb3csIDApKQogI2RlZmluZSBwdGVfc2FtZShhLCBiKQkJKChhKS5wdGVfbG93ID09IChiKS5wdGVfbG93KQogI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwuaAppbmRleCAzNmE1YWE2Li5kY2NiMWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTNsZXZlbC5oCkBAIC04NSw2ICs4NSwyNiBAQAogI2RlZmluZSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcykgKChwbWRfdCAqKSBwdWRfcGFnZSgqKHB1ZCkpICsgXAogCQkJcG1kX2luZGV4KGFkZHJlc3MpKQogCisvKgorICogRm9yIFBURXMgYW5kIFBERXMsIHdlIG11c3QgY2xlYXIgdGhlIFAtYml0IGZpcnN0IHdoZW4gY2xlYXJpbmcgYSBwYWdlIHRhYmxlCisgKiBlbnRyeSwgc28gY2xlYXIgdGhlIGJvdHRvbSBoYWxmIGZpcnN0IGFuZCBlbmZvcmNlIG9yZGVyaW5nIHdpdGggYSBjb21waWxlcgorICogYmFycmllci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlwdGVwLT5wdGVfbG93ID0gMDsKKwlzbXBfd21iKCk7CisJcHRlcC0+cHRlX2hpZ2ggPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICpwbWQpCit7CisJdTMyICp0bXAgPSAodTMyICopcG1kOworCSp0bXAgPSAwOworCXNtcF93bWIoKTsKKwkqKHRtcCArIDEpID0gMDsKK30KKwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CiAJcHRlX3QgcmVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAppbmRleCBlZTA1NmM0Li42NzJjM2Y3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaApAQCAtMjA0LDEyICsyMDQsMTAgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBnMFtdOwogCiAjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCSgoeCkucHRlX2xvdyAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpKQotI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkJZG8geyBzZXRfcHRlX2F0KG1tLCBhZGRyLCB4cCwgX19wdGUoMCkpOyB9IHdoaWxlICgwKQogCiAvKiBUbyBhdm9pZCBoYXJtZnVsIHJhY2VzLCBwbWRfbm9uZSh4KSBzaG91bGQgY2hlY2sgb25seSB0aGUgbG93ZXIgd2hlbiBQQUUgKi8KICNkZWZpbmUgcG1kX25vbmUoeCkJKCEodW5zaWduZWQgbG9uZylwbWRfdmFsKHgpKQogI2RlZmluZSBwbWRfcHJlc2VudCh4KQkocG1kX3ZhbCh4KSAmIF9QQUdFX1BSRVNFTlQpCi0jZGVmaW5lIHBtZF9jbGVhcih4cCkJZG8geyBzZXRfcG1kKHhwLCBfX3BtZCgwKSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lCXBtZF9iYWQoeCkJKChwbWRfdmFsKHgpICYgKH5QQUdFX01BU0sgJiB+X1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEUpCiAKIApAQCAtMjY4LDcgKzI2Niw3IEBACiAJcHRlX3QgcHRlOwogCWlmIChmdWxsKSB7CiAJCXB0ZSA9ICpwdGVwOwotCQkqcHRlcCA9IF9fcHRlKDApOworCQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwogCX0gZWxzZSB7CiAJCXB0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlcCk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKaW5kZXggNzg5ZTliZC4uZWI0YjE1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCkBAIC0yODgsNyArMjg4LDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQotI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjg1ICovCiAjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjg2CkBAIC0zMTgsOSArMzE4LDEyIEBACiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJMzEwCiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMxMQogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMTIKLSNkZWZpbmUgX19OUl9zeXNfc3BsaWNlCQkzMTMKKyNkZWZpbmUgX19OUl9zcGxpY2UJCTMxMworI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkzMTQKKyNkZWZpbmUgX19OUl90ZWUJCTMxNQorI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkzMTYKIAotI2RlZmluZSBOUl9zeXNjYWxscyAzMTQKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzE3CiAKIC8qCiAgKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyODogc2VlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmggYi9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmgKaW5kZXggNTZkMmRkYy4uNzM0ZDEzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9hY3BpLWV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS1leHQuaApAQCAtMSwxMiArMSwxNSBAQAogLyoKLSAqIGlhNjQvcGxhdGZvcm0vaHAvY29tbW9uL2hwX2FjcGkuaAorICogKGMpIENvcHlyaWdodCAyMDAzLCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglBbGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkBocC5jb20+CisgKglCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkCi0gKiBDb3B5cmlnaHQgKEMpIEFsZXggV2lsbGlhbXNvbgotICogQ29weXJpZ2h0IChDKSBCam9ybiBIZWxnYWFzCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIFZlbmRvciBzcGVjaWZpYyBleHRlbnNpb25zIHRvIEFDUEkuCiAgKi8KKwogI2lmbmRlZiBfQVNNX0lBNjRfQUNQSV9FWFRfSAogI2RlZmluZSBfQVNNX0lBNjRfQUNQSV9FWFRfSAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2FjcGkuaCBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCmluZGV4IGQ3MzQ1ODUuLjA5YTVkZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCkBAIC0xMTAsOSArMTEwLDggQEAKIGV4dGVybiBpbnQgYWRkaXRpb25hbF9jcHVzOwogCiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQotLyogUHJveGltaXR5IGJpdG1hcCBsZW5ndGg7IF9QWE0gaXMgYXQgbW9zdCAyNTUgKDggYml0KSovCi0jaWZkZWYgQ09ORklHX0lBNjRfTlJfTk9ERVMKLSNkZWZpbmUgTUFYX1BYTV9ET01BSU5TIENPTkZJR19JQTY0X05SX05PREVTCisjaWYgTUFYX05VTU5PREVTID4gMjU2CisjZGVmaW5lIE1BWF9QWE1fRE9NQUlOUyBNQVhfTlVNTk9ERVMKICNlbHNlCiAjZGVmaW5lIE1BWF9QWE1fRE9NQUlOUyAoMjU2KQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaAppbmRleCA5MDkyMWUxLi42Y2M1MTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYml0b3BzLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaAppbmRleCAyMThjNDU4Li5jMTk1YTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKQEAgLTU4LDYgKzU4LDggQEAKIAlESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwKIAlESUVfTUNBX1JFTkRaVk9VU19QUk9DRVNTLAogCURJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLAorCURJRV9NQ0FfTkVXX1RJTUVPVVQsCisJRElFX0lOSVRfRU5URVIsCiAJRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwKIAlESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsCiAJRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlYy5oIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKaW5kZXggYzNlNGVkOC4uYTljOTk1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKQEAgLTM0Nyw5ICszNDcsMTEgQEAKICNlbmRpZgogI2lmbmRlZiBwbGF0Zm9ybV9wY2lfbGVnYWN5X3JlYWQKICMgZGVmaW5lIHBsYXRmb3JtX3BjaV9sZWdhY3lfcmVhZAlpYTY0X3BjaV9sZWdhY3lfcmVhZAorZXh0ZXJuIGludCBpYTY0X3BjaV9sZWdhY3lfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MTYgcG9ydCwgdTMyICp2YWwsIHU4IHNpemUpOwogI2VuZGlmCiAjaWZuZGVmIHBsYXRmb3JtX3BjaV9sZWdhY3lfd3JpdGUKICMgZGVmaW5lIHBsYXRmb3JtX3BjaV9sZWdhY3lfd3JpdGUJaWE2NF9wY2lfbGVnYWN5X3dyaXRlCitleHRlcm4gaW50IGlhNjRfcGNpX2xlZ2FjeV93cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MTYgcG9ydCwgdTMyIHZhbCwgdTggc2l6ZSk7CiAjZW5kaWYKICNpZm5kZWYgcGxhdGZvcm1faW5iCiAjIGRlZmluZSBwbGF0Zm9ybV9pbmIJCV9faWE2NF9pbmIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmggYi9pbmNsdWRlL2FzbS1pYTY0L21jYS5oCmluZGV4IGJmYmJiOGQuLjljNTM4OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tY2EuaApAQCAtMTQ4LDYgKzE0OCwxMSBAQAogZXh0ZXJuIHZvaWQgaWE2NF91bnJlZ19NQ0FfZXh0ZW5zaW9uKHZvaWQpOwogZXh0ZXJuIHU2NCBpYTY0X2dldF9ybmF0KHU2NCAqKTsKIAorc3RydWN0IGlhNjRfbWNhX25vdGlmeV9kaWUgeworCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zOworCWludCAqbW9uYXJjaF9jcHU7Cit9OworCiAjZWxzZQkvKiBfX0FTU0VNQkxZX18gKi8KIAogI2RlZmluZSBJQTY0X01DQV9DT1JSRUNURUQJMHgwCS8qIEVycm9yIGhhcyBiZWVuIGNvcnJlY3RlZCBieSBPU19NQ0EgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaAppbmRleCA1YTMyMjRmLi5iZWQ3M2E2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tdXRleC5oCkBAIC04NCw3ICs4NCw3IEBACiBzdGF0aWMgaW5saW5lIGludAogX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKGF0b21pY190ICpjb3VudCwgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCiB7Ci0JaWYgKGxpa2VseShjbXB4Y2hnX2FjcShjb3VudCwgMSwgMCkpID09IDEpCisJaWYgKGNtcHhjaGdfYWNxKGNvdW50LCAxLCAwKSA9PSAxKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkMzU2Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0jaWZkZWYgQ09ORklHX0lBNjRfRElHCi0vKiBNYXggOCBOb2RlcyAqLwotIyAgZGVmaW5lIE5PREVTX1NISUZUCTMKLSNlbGlmIGRlZmluZWQoQ09ORklHX0lBNjRfSFBfWlgxKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCKQotLyogTWF4IDMyIE5vZGVzICovCi0jICBkZWZpbmUgTk9ERVNfU0hJRlQJNQotI2VsaWYgZGVmaW5lZChDT05GSUdfSUE2NF9TR0lfU04yKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpCi0jICBpZiBDT05GSUdfSUE2NF9OUl9OT0RFUyA9PSAyNTYKLSMgICAgZGVmaW5lIE5PREVTX1NISUZUCTgKLSMgIGVsaWYgQ09ORklHX0lBNjRfTlJfTk9ERVMgPD0gNTEyCi0jICAgIGRlZmluZSBOT0RFU19TSElGVCAgICA5Ci0jICBlbGlmIENPTkZJR19JQTY0X05SX05PREVTIDw9IDEwMjQKLSMgICAgZGVmaW5lIE5PREVTX1NISUZUICAgIDEwCi0jICBlbmRpZgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9wYWwuaAppbmRleCA0ZTdlNmYyLi4zN2U1MmEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKQEAgLTY4LDYgKzY4LDcgQEAKICNkZWZpbmUgUEFMX1NIVVRET1dOCQk0MAkvKiBlbnRlciBwcm9jZXNzb3Igc2h1dGRvd24gc3RhdGUgKi8KICNkZWZpbmUgUEFMX1BSRUZFVENIX1ZJU0lCSUxJVFkJNDEJLyogTWFrZSBQcm9jZXNzb3IgUHJlZmV0Y2hlcyBWaXNpYmxlICovCiAjZGVmaW5lIFBBTF9MT0dJQ0FMX1RPX1BIWVNJQ0FMIDQyCS8qIHJldHVybnMgaW5mb3JtYXRpb24gb24gbG9naWNhbCB0byBwaHlzaWNhbCBwcm9jZXNzb3IgbWFwcGluZyAqLworI2RlZmluZSBQQUxfQ0FDSEVfU0hBUkVEX0lORk8JNDMJLyogcmV0dXJucyBpbmZvcm1hdGlvbiBvbiBjYWNoZXMgc2hhcmVkIGJ5IGxvZ2ljYWwgcHJvY2Vzc29yICovCiAKICNkZWZpbmUgUEFMX0NPUFlfUEFMCQkyNTYJLyogcmVsb2NhdGUgUEFMIHByb2NlZHVyZXMgYW5kIFBBTCBQTUkgKi8KICNkZWZpbmUgUEFMX0hBTFRfSU5GTwkJMjU3CS8qIHJldHVybiB0aGUgbG93IHBvd2VyIGNhcGFiaWxpdGllcyBvZiBwcm9jZXNzb3IgKi8KQEAgLTEzMCw3ICsxMzEsNyBAQAogI2RlZmluZSBQQUxfQ0FDSEVfTElORV9TVEFURV9NT0RJRklFRAkzCS8qIE1vZGlmaWVkICovCiAKIHR5cGVkZWYgc3RydWN0IHBhbF9mcmVxX3JhdGlvIHsKLQl1NjQgZGVuIDogMzIsIG51bSA6IDMyOwkvKiBudW1lcmF0b3IgJiBkZW5vbWluYXRvciAqLworCXUzMiBkZW4sIG51bTsJCS8qIG51bWVyYXRvciAmIGRlbm9taW5hdG9yICovCiB9IGl0Y19yYXRpbywgcHJvY19yYXRpbzsKIAogdHlwZWRlZgl1bmlvbiAgcGFsX2NhY2hlX2NvbmZpZ19pbmZvXzFfcyB7CkBAIC0xNTEsMTAgKzE1MiwxMCBAQAogCiB0eXBlZGVmCXVuaW9uICBwYWxfY2FjaGVfY29uZmlnX2luZm9fMl9zIHsKIAlzdHJ1Y3QgewotCQl1NjQJCWNhY2hlX3NpemUJOiAzMiwJLypjYWNoZSBzaXplIGluIGJ5dGVzKi8KKwkJdTMyCQljYWNoZV9zaXplOwkJLypjYWNoZSBzaXplIGluIGJ5dGVzKi8KIAogCi0JCQkJYWxpYXNfYm91bmRhcnkJOiA4LAkvKiAzOS0zMiBhbGlhc2VkIGFkZHIKKwkJdTMyCQlhbGlhc19ib3VuZGFyeQk6IDgsCS8qIDM5LTMyIGFsaWFzZWQgYWRkcgogCQkJCQkJCSAqIHNlcGFyYXRpb24gZm9yIG1heAogCQkJCQkJCSAqIHBlcmZvcm1hbmNlLgogCQkJCQkJCSAqLwpAQCAtMTY0Nyw2ICsxNjQ4LDMzIEBACiAKIAlyZXR1cm4gaXBydi5zdGF0dXM7CiB9CisKK3R5cGVkZWYgc3RydWN0IHBhbF9jYWNoZV9zaGFyZWRfaW5mb19zCit7CisJdTY0IG51bV9zaGFyZWQ7CisJcGFsX3Byb2Nfbl9sb2dfaW5mbzFfdCBwcGxpMTsKKwlwYWxfcHJvY19uX2xvZ19pbmZvMl90IHBwbGkyOworfSBwYWxfY2FjaGVfc2hhcmVkX2luZm9fdDsKKworLyogR2V0IGluZm9ybWF0aW9uIG9uIGxvZ2ljYWwgdG8gcGh5c2ljYWwgcHJvY2Vzc29yIG1hcHBpbmdzLiAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2NhY2hlX3NoYXJlZF9pbmZvKHU2NCBsZXZlbCwKKwkJdTY0IHR5cGUsCisJCXU2NCBwcm9jX251bWJlciwKKwkJcGFsX2NhY2hlX3NoYXJlZF9pbmZvX3QgKmluZm8pCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCisJUEFMX0NBTEwoaXBydiwgUEFMX0NBQ0hFX1NIQVJFRF9JTkZPLCBsZXZlbCwgdHlwZSwgcHJvY19udW1iZXIpOworCisJaWYgKGlwcnYuc3RhdHVzID09IFBBTF9TVEFUVVNfU1VDQ0VTUykgeworCQlpbmZvLT5udW1fc2hhcmVkID0gaXBydi52MDsKKwkJaW5mby0+cHBsaTEucHBsaTFfZGF0YSA9IGlwcnYudjE7CisJCWluZm8tPnBwbGkyLnBwbGkyX2RhdGEgPSBpcHJ2LnYyOworCX0KKworCXJldHVybiBpcHJ2LnN0YXR1czsKK30KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9QQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbjIvc25faHdwZXJmLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuMi9zbl9od3BlcmYuaAppbmRleCAyOTFlZjNkLi5lNjFlYmFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuMi9zbl9od3BlcmYuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuMi9zbl9od3BlcmYuaApAQCAtNDUsOCArNDUsMTIgQEAKICNkZWZpbmUgU05fSFdQRVJGX0lTX05PREUoeCkJCSgoeCkgJiYgc3Ryc3RyKCh4KS0+bmFtZSwgIlNIdWIiKSkKICNkZWZpbmUgU05fSFdQRVJGX0lTX05PREVfU0hVQjIoeCkJKCh4KSAmJiBzdHJzdHIoKHgpLT5uYW1lLCAiU0h1YiAyLiIpKQogI2RlZmluZSBTTl9IV1BFUkZfSVNfSU9OT0RFKHgpCQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJUSU8iKSkKLSNkZWZpbmUgU05fSFdQRVJGX0lTX1JPVVRFUih4KQkJKCh4KSAmJiBzdHJzdHIoKHgpLT5uYW1lLCAiUm91dGVyIikpCiAjZGVmaW5lIFNOX0hXUEVSRl9JU19OTDNST1VURVIoeCkJKCh4KSAmJiBzdHJzdHIoKHgpLT5uYW1lLCAiTkwzUm91dGVyIikpCisjZGVmaW5lIFNOX0hXUEVSRl9JU19OTDRST1VURVIoeCkJKCh4KSAmJiBzdHJzdHIoKHgpLT5uYW1lLCAiTkw0Um91dGVyIikpCisjZGVmaW5lIFNOX0hXUEVSRl9JU19PTERST1VURVIoeCkJKCh4KSAmJiBzdHJzdHIoKHgpLT5uYW1lLCAiUm91dGVyIikpCisjZGVmaW5lIFNOX0hXUEVSRl9JU19ST1VURVIoeCkJCShTTl9IV1BFUkZfSVNfTkwzUk9VVEVSKHgpIHx8IAkJXAorCQkJCQkgCVNOX0hXUEVSRl9JU19OTDRST1VURVIoeCkgfHwgCVwKKwkJCQkJIAlTTl9IV1BFUkZfSVNfT0xEUk9VVEVSKHgpKQogI2RlZmluZSBTTl9IV1BFUkZfRk9SRUlHTih4KQkJKCh4KSAmJiAhKHgpLT5zbl9od3BfdGhpc19wYXJ0ICYmICEoeCktPnNuX2h3cF9pc19zaGFyZWQpCiAjZGVmaW5lIFNOX0hXUEVSRl9TQU1FX09CSlRZUEUoeCx5KQkoKFNOX0hXUEVSRl9JU19OT0RFKHgpICYmIFNOX0hXUEVSRl9JU19OT0RFKHkpKSB8fFwKIAkJCQkJKFNOX0hXUEVSRl9JU19JT05PREUoeCkgJiYgU05fSFdQRVJGX0lTX0lPTk9ERSh5KSkgfHxcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaAppbmRleCBiZjRjYzg2Li41MWFjYTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKQEAgLTgsNyArOCw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICovCiAKIApAQCAtODUsNiArODUsNyBAQAogCiAjZGVmaW5lICBTTl9TQUxfR0VUX1BST01fRkVBVFVSRV9TRVQJCSAgIDB4MDIwMDAwNjUKICNkZWZpbmUgIFNOX1NBTF9TRVRfT1NfRkVBVFVSRV9TRVQJCSAgIDB4MDIwMDAwNjYKKyNkZWZpbmUgIFNOX1NBTF9JTkpFQ1RfRVJST1IJCQkgICAweDAyMDAwMDY3CiAKIC8qCiAgKiBTZXJ2aWNlLXNwZWNpZmljIGNvbnN0YW50cwpAQCAtNzA1LDEwICs3MDYsOCBAQAogc25fY2hhbmdlX21lbXByb3RlY3QodTY0IHBhZGRyLCB1NjQgbGVuLCB1NjQgcGVybXMsIHU2NCAqbmFzaWRfYXJyYXkpCiB7CiAJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7Ci0JaW50IGNub2RlaWQ7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKLQljbm9kZWlkID0gbmFzaWRfdG9fY25vZGVpZChnZXRfbm9kZV9udW1iZXIocGFkZHIpKTsKIAlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOwogCWlhNjRfc2FsX29lbWNhbGxfbm9sb2NrKCZyZXRfc3R1ZmYsIFNOX1NBTF9NRU1QUk9URUNULCBwYWRkciwgbGVuLAogCQkJCSh1NjQpbmFzaWRfYXJyYXksIHBlcm1zLCAwLCAwLCAwKTsKQEAgLTExNDAsNCArMTEzOSwxNiBAQAogCXJldHVybiBydi5zdGF0dXM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50Citzbl9pbmplY3RfZXJyb3IodTY0IHBhZGRyLCB1NjQgKmRhdGEsIHU2NCAqZWNjKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKKwlpYTY0X3NhbF9vZW1jYWxsX25vbG9jaygmcmV0X3N0dWZmLCBTTl9TQUxfSU5KRUNUX0VSUk9SLCBwYWRkciwgKHU2NClkYXRhLAorCQkJCSh1NjQpZWNjLCAwLCAwLCAwLCAwKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOworCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOworfQogI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9TTl9TQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oCmluZGV4IDU2Mzk0YTIuLmU1MzkyYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKQEAgLTY3LDcgKzY3LDcgQEAKICNkZWZpbmUgZW5kX29mX3N0YWNrKHApICh1bnNpZ25lZCBsb25nICopKCh2b2lkICopKHApICsgSUE2NF9SQlNfT0ZGU0VUKQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1RBU0tfU1RSVUNUX0FMTE9DQVRPUgotI2RlZmluZSBhbGxvY190YXNrX3N0cnVjdCgpCSgodGFza190ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUikpCisjZGVmaW5lIGFsbG9jX3Rhc2tfc3RydWN0KCkJKCh0YXNrX3QgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLCBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUikpCiAjZGVmaW5lIGZyZWVfdGFza19zdHJ1Y3QodHNrKQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSAodHNrKSwgS0VSTkVMX1NUQUNLX1NJWkVfT1JERVIpCiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oCmluZGV4IDNlZTE5ZGYuLjYxNmI1ZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmgKQEAgLTIzLDYgKzIzLDExIEBACiAjZGVmaW5lIFBFTkFMVFlfRk9SX05PREVfV0lUSF9DUFVTIDI1NQogCiAvKgorICogRGlzdGFuY2UgYWJvdmUgd2hpY2ggd2UgYmVnaW4gdG8gdXNlIHpvbmUgcmVjbGFpbQorICovCisjZGVmaW5lIFJFQ0xBSU1fRElTVEFOQ0UgMTUKKworLyoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbm9kZSBjb250YWluaW5nIENQVSAnY3B1JwogICovCiAjZGVmaW5lIGNwdV90b19ub2RlKGNwdSkgKGludCkoY3B1X3RvX25vZGVfbWFwW2NwdV0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaAppbmRleCAzNjA3MGMxLi43MTA3NzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKQEAgLTI4NiwxMiArMjg2LDE3IEBACiAvKiAxMjk0LCAxMjk1IHJlc2VydmVkIGZvciBwc2VsZWN0L3Bwb2xsICovCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCTEyOTYKICNkZWZpbmUgX19OUl9zcGxpY2UJCQkxMjk3CisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQkxMjk4CisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CQkxMjk5CisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCQkxMzAwCisjZGVmaW5lIF9fTlJfdGVlCQkJMTMwMQorI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkJMTMwMgogCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMJCQkyNzQgLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KKyNkZWZpbmUgTlJfc3lzY2FsbHMJCQkyNzkgLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmggYi9pbmNsdWRlL2FzbS1pYTY0L3ZnYS5oCmluZGV4IGJjMzM0OWYuLjA5MTE3N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC92Z2EuaApAQCAtMTcsNyArMTcsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmdhX2NvbnNvbGVfaW9iYXNlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmdhX2NvbnNvbGVfbWVtYmFzZTsKIAotI2RlZmluZSBWR0FfTUFQX01FTSh4KQkoKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAodmdhX2NvbnNvbGVfbWVtYmFzZSArICh4KSwgMCkpCisjZGVmaW5lIFZHQV9NQVBfTUVNKHgpCSgodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKHZnYV9jb25zb2xlX21lbWJhc2UgKyAoeCksIDApKQogCiAjZGVmaW5lIHZnYV9yZWFkYih4KQkoKih4KSkKICNkZWZpbmUgdmdhX3dyaXRlYih4LHkpCSgqKHkpID0gKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYXNzZW1ibGVyLmgKaW5kZXggYjdmNGQ4YS4uMWExYWExNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oCkBAIC0xMDksNiArMTA5LDkgQEAKIAlwdXNoCXIxMwogCW12ZmFjaGkJcjEzCiAJcHVzaAlyMTMKKwlsZGkJcjEzLCAjMAorCXB1c2gJcjEzCQk7IGR1bW15IHB1c2ggYWNjMWgKKwlwdXNoCXIxMwkJOyBkdW1teSBwdXNoIGFjYzFsCiAjZWxzZQogI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpAQCAtMTU2LDYgKzE1OSw4IEBACiAJcG9wCXIxMwogCW12dGFjbG8JcjEzLCBhMQogI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKKwlwb3AJcjEzCQk7IGR1bW15IHBvcCBhY2MxaAorCXBvcAlyMTMJCTsgZHVtbXkgcG9wIGFjYzFsCiAJcG9wCXIxMwogCW12dGFjaGkJcjEzCiAJcG9wCXIxMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tYXBwaTMvbWFwcGkzX3BsZC5oIGIvaW5jbHVkZS9hc20tbTMyci9tYXBwaTMvbWFwcGkzX3BsZC5oCmluZGV4IDFkM2MyNWQuLjAzMTM2OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbWFwcGkzL21hcHBpM19wbGQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL21hcHBpMy9tYXBwaTNfcGxkLmgKQEAgLTUzLDE2ICs1MywxNCBAQAogLyogUG93ZXIgQ29udHJvbCBvZiBNTUMgYW5kIENGICovCiAjZGVmaW5lIFBMRF9DUENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxNDAwMCkKIAotCi0vKj09PT0gSUNVID09PT0qLwotI2RlZmluZSAgTTMyUl9JUlFfUEMxMDQgICAgICAgICg1KSAgIC8qIElOVDQoUEMvMTA0KSAqLwotI2RlZmluZSAgTTMyUl9JUlFfSTJDICAgICAgICAgICgyOCkgIC8qIEkyQy1CVVMgICAgICovCi0jZGVmaW5lICBQTERfSVJRX0NGSVJFUSAgICAgICAoNikgIC8qIElOVDUgQ0ZDIENhcmQgSW50ZXJydXB0ICovCi0jZGVmaW5lICBQTERfSVJRX0NGQ19JTlNFUlQgICAoNykgIC8qIElOVDYgQ0ZDIENhcmQgSW5zZXJ0ICovCi0jZGVmaW5lICBQTERfSVJRX0lERUlSRVEgICAgICAoOCkgIC8qIElOVDcgSURFIEludGVycnVwdCAgICovCi0jZGVmaW5lICBQTERfSVJRX01NQ0NBUkQgICAgICAoNDMpICAvKiBNTUMgQ2FyZCBJbnNlcnQgKi8KLSNkZWZpbmUgIFBMRF9JUlFfTU1DSVJRICAgICAgICg0NCkgIC8qIE1NQyBUcmFuc2ZlciBEb25lICovCi0KKy8qIElDVSAqLworI2RlZmluZSBNMzJSX0lSUV9QQzEwNAkJKDUpCS8qIElOVDQoUEMvMTA0KSAqLworI2RlZmluZSBNMzJSX0lSUV9JMkMJCSgyOCkJLyogSTJDLUJVUyAqLworI2RlZmluZSBQTERfSVJRX0NGSVJFUQkJKDYpCS8qIElOVDUgQ0ZDIENhcmQgSW50ZXJydXB0ICovCisjZGVmaW5lIFBMRF9JUlFfQ0ZDX0lOU0VSVAkoNykJLyogSU5UNiBDRkMgQ2FyZCBJbnNlcnQgJiBFamVjdCAqLworI2RlZmluZSBQTERfSVJRX0lERUlSRVEJCSg4KQkvKiBJTlQ3IElERSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUExEX0lSUV9NTUNDQVJECQkoNDMpCS8qIE1NQyBDYXJkIEluc2VydCAqLworI2RlZmluZSBQTERfSVJRX01NQ0lSUQkJKDQ0KQkvKiBNTUMgVHJhbnNmZXIgRG9uZSAqLwogCiAjaWYgMAogLyogTEVEIENvbnRyb2wKQEAgLTk3LDcgKzk1LDYgQEAKICNkZWZpbmUgUExEX0NSQzE2QURBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDA4KQogI2RlZmluZSBQTERfQ1JDMTZBSU5EQVRBCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDBhKQogCi0KICNpZiAwCiAvKiBSVEMgKi8KICNkZWZpbmUgUExEX1JUQ0NSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxYzAwMCkKQEAgLTE0MCw0ICsxMzcsNyBAQAogCiAjZW5kaWYKIAorLyogUmVzZXQgQ29udHJvbCAqLworI2RlZmluZSBQTERfUkVCT09UCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwMCkKKwogI2VuZGlmCS8qIF9NQVBQSTNfUExELkggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc5YTM5ZDQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX05VTU5PREVTX0hfCi0jZGVmaW5lIF9BU01fTlVNTk9ERVNfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ0hJUF9NMzI3MDApCi0jZGVmaW5lCU5PREVTX1NISUZUCTEJLyogTWF4IDIgTm9kZXMgKi8KLSNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDAgKi8KLQotI2VuZGlmCS8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KLQotI2VuZGlmCS8qIF9BU01fTlVNTk9ERVNfSF8gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKaW5kZXggMGQwNThiMi4uNTNjNzkyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3B0cmFjZS5oCkBAIC00Myw2ICs0MywxNCBAQAogI2RlZmluZSBQVF9BQ0MxTAkxOAogI2RlZmluZSBQVF9BQ0NICQlQVF9BQ0MwSAogI2RlZmluZSBQVF9BQ0NMCQlQVF9BQ0MwTAorI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKKyNkZWZpbmUgUFRfQUNDSAkJMTUKKyNkZWZpbmUgUFRfQUNDTAkJMTYKKyNkZWZpbmUgUFRfRFVNTVlfQUNDMUgJMTcKKyNkZWZpbmUgUFRfRFVNTVlfQUNDMUwJMTgKKyNlbHNlCisjZXJyb3IgdW5rbm93biBpc2EgY29uaWZpZ3VyYXRpb24KKyNlbmRpZgogI2RlZmluZSBQVF9QU1cJCTE5CiAjZGVmaW5lIFBUX0JQQwkJMjAKICNkZWZpbmUgUFRfQkJQU1cJMjEKQEAgLTUyLDIxICs2MCw2IEBACiAjZGVmaW5lIFBUX0xSCQkyNQogI2RlZmluZSBQVF9TUEkJCTI2CiAjZGVmaW5lIFBUX09SSUdSMAkyNwotI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKLSNkZWZpbmUgUFRfQUNDSAkJMTUKLSNkZWZpbmUgUFRfQUNDTAkJMTYKLSNkZWZpbmUgUFRfUFNXCQkxNwotI2RlZmluZSBQVF9CUEMJCTE4Ci0jZGVmaW5lIFBUX0JCUFNXCTE5Ci0jZGVmaW5lIFBUX0JCUEMJCTIwCi0jZGVmaW5lIFBUX1NQVQkJMjEKLSNkZWZpbmUgUFRfRlAJCTIyCi0jZGVmaW5lIFBUX0xSCQkyMwotI2RlZmluZSBQVF9TUEkJCTI0Ci0jZGVmaW5lIFBUX09SSUdSMAkyNQotI2Vsc2UKLSNlcnJvciB1bmtub3duIGlzYSBjb25pZmlndXJhdGlvbgotI2VuZGlmCiAKIC8qIHZpcnR1YWwgcHRfcmVnIGVudHJ5IGZvciBnZGIgKi8KICNkZWZpbmUgUFRfUEMJCTMwCkBAIC0xMjEsNiArMTE0LDggQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgfHwgZGVmaW5lZChDT05GSUdfSVNBX00zMlIpCiAJdW5zaWduZWQgbG9uZyBhY2NoOwogCXVuc2lnbmVkIGxvbmcgYWNjbDsKKwl1bnNpZ25lZCBsb25nIGR1bW15X2FjYzFoOworCXVuc2lnbmVkIGxvbmcgZHVtbXlfYWNjMWw7CiAjZWxzZQogI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKaW5kZXggYmY0NDdjNS4uODE3NTBlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oCkBAIC05LDcgKzksNyBAQAogICogU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4uCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2ICBMaW51cyBUb3J2YWxkcwotICogQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNzcsMjcgKzc3LDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgY291bnQ7Ci0KIAltaWdodF9zbGVlcCgpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIjIGRvd24JCQkJXG5cdCIKLQkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNCIsICIlMSIpCi0JCU0zMlJfTE9DSyIgJTAsIEAlMTsJCVxuXHQiCi0JCSJhZGRpCSUwLCAjLTE7CQlcblx0IgotCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCi0JCTogIj0mciIgKGNvdW50KQotCQk6ICJyIiAoJnNlbS0+Y291bnQpCi0JCTogIm1lbW9yeSIKLSNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCi0JCSwgInI0IgotI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KLQkpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWlmICh1bmxpa2VseShjb3VudCA8IDApKQorCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKSkKIAkJX19kb3duKHNlbSk7CiB9CiAKQEAgLTEwNywyOCArODgsMTAgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGNvdW50OwogCWludCByZXN1bHQgPSAwOwogCiAJbWlnaHRfc2xlZXAoKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiIyBkb3duX2ludGVycnVwdGlibGUJCVxuXHQiCi0JCURDQUNIRV9DTEVBUigiJTAiLCAicjQiLCAiJTEiKQotCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgotCQkiYWRkaQklMCwgIy0xOwkJXG5cdCIKLQkJTTMyUl9VTkxPQ0siICUwLCBAJTE7CQlcblx0IgotCQk6ICI9JnIiIChjb3VudCkKLQkJOiAiciIgKCZzZW0tPmNvdW50KQotCQk6ICJtZW1vcnkiCi0jaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQotCQksICJyNCIKLSNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCi0JKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlpZiAodW5saWtlbHkoY291bnQgPCAwKSkKKwlpZiAodW5saWtlbHkoYXRvbWljX2RlY19yZXR1cm4oJnNlbS0+Y291bnQpIDwgMCkpCiAJCXJlc3VsdCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTc0LDI2ICsxMzcsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgY291bnQ7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiIyB1cAkJCQlcblx0IgotCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI0IiwgIiUxIikKLQkJTTMyUl9MT0NLIiAlMCwgQCUxOwkJXG5cdCIKLQkJImFkZGkJJTAsICMxOwkJCVxuXHQiCi0JCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwkJXG5cdCIKLQkJOiAiPSZyIiAoY291bnQpCi0JCTogInIiICgmc2VtLT5jb3VudCkKLQkJOiAibWVtb3J5IgotI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKLQkJLCAicjQiCi0jZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLwotCSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGNvdW50IDw9IDApKQorCWlmICh1bmxpa2VseShhdG9taWNfaW5jX3JldHVybigmc2VtLT5jb3VudCkgPD0gMCkpCiAJCV9fdXAoc2VtKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaAppbmRleCBjMjMzZTJkLi45NDJiOGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaApAQCAtMzIsNiArMzIsOCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKIAl1bnNpZ25lZCBsb25nIHNjX2FjY2g7CiAJdW5zaWduZWQgbG9uZyBzY19hY2NsOworCXVuc2lnbmVkIGxvbmcgc2NfZHVtbXlfYWNjMWg7CisJdW5zaWduZWQgbG9uZyBzY19kdW1teV9hY2MxbDsKICNlbHNlCiAjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaAppbmRleCA3ODg1YjdkLi4xMTg0MjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKQEAgLTY3LDcgKzY3LDggQEAKICNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwotI2RlZmluZSBjcHVfcG9zc2libGVfbWFwIGNwdV9jYWxsb3V0X21hcAorZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcG9zc2libGVfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcHJlc2VudF9tYXA7CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCmluZGV4IGQ2YTJjNjEuLmU1NTAxM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaApAQCAtNiw4ICs2LDggQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxICBieSBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLCBhbmQgSGl0b3NoaSBZYW1hbW90bwotICogQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMSAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwgYW5kIEhpdG9zaGkgWWFtYW1vdG8KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTksNTMgKzE5LDI4IEBACiAgKiBzd2l0Y2hfdG8ocHJldiwgbmV4dCkgc2hvdWxkIHN3aXRjaCBmcm9tIHRhc2sgYHByZXYnIHRvIGBuZXh0JwogICogYHByZXYnIHdpbGwgbmV2ZXIgYmUgdGhlIHNhbWUgYXMgYG5leHQnLgogICoKLSAqIGBuZXh0JyBhbmQgYHByZXYnIHNob3VsZCBiZSBzdHJ1Y3QgdGFza19zdHJ1Y3QsIGJ1dCBpdCBpc24ndCBhbHdheXMgZGVmaW5lZAorICogYG5leHQnIGFuZCBgcHJldicgc2hvdWxkIGJlIHRhc2tfdCwgYnV0IGl0IGlzbid0IGFsd2F5cyBkZWZpbmVkCiAgKi8KIAotI2lmbmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkgIGRvIHsgfSB3aGlsZSgwKQotI2VuZGlmCS8qIG5vdCBDT05GSUdfU01QICovCi0KICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpICBkbyB7IFwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICBhcmcwIF9fYXNtX18gKCJyMCIpID0gKHVuc2lnbmVkIGxvbmcpcHJldjsgXAotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgIGFyZzEgX19hc21fXyAoInIxIikgPSAodW5zaWduZWQgbG9uZyluZXh0OyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgKm9sZHNwIF9fYXNtX18gKCJyMiIpID0gJihwcmV2LT50aHJlYWQuc3ApOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgKm5ld3NwIF9fYXNtX18gKCJyMyIpID0gJihuZXh0LT50aHJlYWQuc3ApOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgKm9sZGxyIF9fYXNtX18gKCJyNCIpID0gJihwcmV2LT50aHJlYWQubHIpOyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgKm5ld2xyIF9fYXNtX18gKCJyNSIpID0gJihuZXh0LT50aHJlYWQubHIpOyBcCi0JcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICAqX19sYXN0IF9fYXNtX18gKCJyNiIpOyBcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCi0JCSJzdCAgICAgcjgsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic3QgICAgIHI5LCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJInN0ICAgIHIxMCwgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICByMTEsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic3QgICAgcjEyLCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJInN0ICAgIHIxMywgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICByMTQsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic2V0aCAgcjE0LCAjaGlnaCgxZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJIm9yMyAgIHIxNCwgcjE0LCAjbG93KDFmKSAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICByMTQsIEByNCAgICA7IHN0b3JlIG9sZCBMUiAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic3QgICAgcjE1LCBAcjIgICAgOyBzdG9yZSBvbGQgU1AgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgIHIxNSwgQHIzICAgIDsgbG9hZCBuZXcgU1AgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICAgcjAsIEAtcjE1ICA7IHN0b3JlICdwcmV2JyBvbnRvIG5ldyBzdGFjayAgXG5cdCIgXAotCQkibGQgICAgcjE0LCBAcjUgICAgOyBsb2FkIG5ldyBMUiAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImptcCAgIHIxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSIuZmlsbGluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICIgXAotCQkiMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgICByNiwgQHIxNSsgIDsgbG9hZCAncHJldicgZnJvbSBuZXcgc3RhY2sgICBcblx0IiBcCi0JCSJsZCAgICByMTQsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkibGQgICAgcjEzLCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgIHIxMiwgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJsZCAgICByMTEsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkibGQgICAgcjEwLCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgICByOSwgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJsZCAgICAgcjgsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQk6ICI9JnIiIChfX2xhc3QpIFwKLQkJOiAiciIgKGFyZzApLCAiciIgKGFyZzEpLCAiciIgKG9sZHNwKSwgInIiIChuZXdzcCksIFwKLQkJICAiciIgKG9sZGxyKSwgInIiIChuZXdscikgXAotCQk6ICJtZW1vcnkiIFwKKwkJIglzZXRoCWxyLCAjaGlnaCgxZikJCQkJXG4iIFwKKwkJIglvcjMJbHIsIGxyLCAjbG93KDFmKQkJCVxuIiBcCisJCSIJc3QJbHIsIEAlNCAgOyBzdG9yZSBvbGQgTFIJCQlcbiIgXAorCQkiCWxkCWxyLCBAJTUgIDsgbG9hZCBuZXcgTFIJCQlcbiIgXAorCQkiCXN0CXNwLCBAJTIgIDsgc3RvcmUgb2xkIFNQCQkJXG4iIFwKKwkJIglsZAlzcCwgQCUzICA7IGxvYWQgbmV3IFNQCQkJXG4iIFwKKwkJIglwdXNoCSUxICA7IHN0b3JlIGBwcmV2JyBvbiBuZXcgc3RhY2sJCVxuIiBcCisJCSIJam1wCWxyCQkJCQlcbiIgXAorCQkiCS5maWxsaW5zbgkJCQkJXG4iIFwKKwkJIjE6CQkJCQkJCVxuIiBcCisJCSIJcG9wCSUwICA7IHJlc3RvcmUgYF9fbGFzdCcgZnJvbSBuZXcgc3RhY2sJXG4iIFwKKwkJOiAiPXIiIChsYXN0KSBcCisJCTogIjAiIChwcmV2KSwgXAorCQkgICJyIiAoJihwcmV2LT50aHJlYWQuc3ApKSwgInIiICgmKG5leHQtPnRocmVhZC5zcCkpLCBcCisJCSAgInIiICgmKHByZXYtPnRocmVhZC5scikpLCAiciIgKCYobmV4dC0+dGhyZWFkLmxyKSkgXAorCQk6ICJtZW1vcnkiLCAibHIiIFwKIAkpOyBcCi0JbGFzdCA9IF9fbGFzdDsgXAogfSB3aGlsZSgwKQogCiAvKgpAQCAtMTcxLDggKzE0Niw4IEBACiAjZGVmaW5lIERDQUNIRV9DTEVBUihyZWcwLCByZWcxLCBhZGRyKQogI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLAotCWludCBzaXplKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdG1wID0gMDsKQEAgLTIyNCw3ICsxOTksNyBAQAogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcJMQogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIF9fY21weGNoZ191MzIodm9sYXRpbGUgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTgsNyArMjMzLDcgQEAKICAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIGNtcHhjaGcoKS4gICovCiBleHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKIHsKIAlzd2l0Y2ggKHNpemUpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKaW5kZXggZThhZTYxOS4uODE5Y2MyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKQEAgLTUsMTcgKzUsOSBAQAogICogIGxpbnV4L2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oCiAgKgogICogIE0zMlIgdmVyc2lvbi4KLSAqICAgIENvcHlyaWdodCAoQykgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgogICovCiAKLSN1bmRlZiBVQUNDRVNTX0RFQlVHCi0KLSNpZmRlZiBVQUNDRVNTX0RFQlVHCi0jZGVmaW5lIFVBUFJJTlRLKGFyZ3MuLi4pIHByaW50ayhhcmdzKQotI2Vsc2UKLSNkZWZpbmUgVUFQUklOVEsoYXJncy4uLikKLSNlbmRpZiAvKiBVQUNDRVNTX0RFQlVHICovCi0KIC8qCiAgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCiAgKi8KQEAgLTM4LDI3ICszMCwyOSBAQAogI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKIAogI2lmZGVmIENPTkZJR19NTVUKKwogI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKICNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoUEFHRV9PRkZTRVQpCi0jZWxzZQotI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKLSNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKLSNlbmRpZiAvKiBDT05GSUdfTU1VICovCi0KICNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKLSNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIGdldF9mcygpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCiAjZGVmaW5lIHNldF9mcyh4KQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gKHgpKQotI2Vsc2UKKworI2Vsc2UgLyogbm90IENPTkZJR19NTVUgKi8KKworI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoMHhGRkZGRkZGRikKKyNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKKwogc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCiB7Ci0gIHJldHVybiBVU0VSX0RTOworCXJldHVybiBVU0VSX0RTOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCBzKQogewogfQotI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2VuZGlmIC8qIG5vdCBDT05GSUdfTU1VICovCiAKICNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCiAKQEAgLTgzLDkgKzc3LDkgQEAKIAkJIglzdWJ4CSUwLCAlMFxuIgkJCQlcCiAJCSIJY21wdQklNCwgJTFcbiIJCQkJXAogCQkiCXN1YngJJTAsICU1XG4iCQkJCVwKLQkJOiAiPSZyIihmbGFnKSwgIj1yIihzdW0pCQkJCVwKLQkJOiAiMSIoYWRkciksICJyIigoaW50KShzaXplKSksIAkJCQlcCi0JCSAgInIiKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpLCAiciIoMCkJXAorCQk6ICI9JnIiIChmbGFnKSwgIj1yIiAoc3VtKQkJCQlcCisJCTogIjEiIChhZGRyKSwgInIiICgoaW50KShzaXplKSksIAkJCVwKKwkJICAiciIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpLCAiciIgKDApCVwKIAkJOiAiY2JpdCIgKTsJCQkJCQlcCiAJZmxhZzsgfSkKIApAQCAtMTEzLDEwICsxMDcsMTAgQEAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBhY2Nlc3Nfb2soaW50IHR5cGUsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLSAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kOwotICB1bnNpZ25lZCBsb25nIHZhbCA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kOworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKIAotICByZXR1cm4gKCh2YWwgPj0gbWVtb3J5X3N0YXJ0KSAmJiAoKHZhbCArIHNpemUpIDwgbWVtb3J5X2VuZCkpOworCXJldHVybiAoKHZhbCA+PSBtZW1vcnlfc3RhcnQpICYmICgodmFsICsgc2l6ZSkgPCBtZW1vcnlfZW5kKSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogCkBAIC0xNTUsMzkgKzE0OSw2IEBACiAgKiBhY2Nlc3NlcyB0byB0aGUgc2FtZSBhcmVhIG9mIHVzZXIgbWVtb3J5KS4KICAqLwogCi1leHRlcm4gdm9pZCBfX2dldF91c2VyXzEodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2dldF91c2VyXzIodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2dldF91c2VyXzQodm9pZCk7Ci0KLSNpZm5kZWYgTU9EVUxFCi0jZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLHJldCx4LHB0cikgCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkiCW12CXIwLCAlMFxuIgkJCQlcCi0JCSIJbXYJcjEsICUxXG4iIAkJCQlcCi0JCSIJYmwgX19nZXRfdXNlcl8iICNzaXplICJcbiIJCQlcCi0JCSIJbXYJJTAsIHIwXG4iCQkJCVwKLQkJIgltdgklMSwgcjFcbiIgCQkJCVwKLQkJOiAiPXIiKHJldCksICI9ciIoeCkgCQkJCQlcCi0JCTogIjAiKHB0cikJCQkJCQlcCi0JCTogInIwIiwgInIxIiwgInIxNCIgKQotI2Vsc2UgLyogTU9EVUxFICovCi0vKgotICogVXNlICJqbCIgaW5zdGVhZCBvZiAiYmwiIGZvciBNT0RVTEUKLSAqLwotI2RlZmluZSBfX2dldF91c2VyX3goc2l6ZSxyZXQseCxwdHIpIAkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkJIgltdglyMCwgJTBcbiIJCQkJXAotCQkiCW12CXIxLCAlMVxuIiAJCQkJXAotCQkiCXNldGgJbHIsICNoaWdoKF9fZ2V0X3VzZXJfIiAjc2l6ZSAiKVxuIglcCi0JCSIJb3IzCWxyLCBsciwgI2xvdyhfX2dldF91c2VyXyIgI3NpemUgIilcbiIJXAotCQkiCWpsIAlsclxuIgkJCQkJXAotCQkiCW12CSUwLCByMFxuIgkJCQlcCi0JCSIJbXYJJTEsIHIxXG4iIAkJCQlcCi0JCTogIj1yIihyZXQpLCAiPXIiKHgpIAkJCQkJXAotCQk6ICIwIihwdHIpCQkJCQkJXAotCQk6ICJyMCIsICJyMSIsICJyMTQiICkKLSNlbmRpZgotCiAvKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlciBmb3Igc2lnbgogICAgcmVhc29ucyAqLwogLyoqCkBAIC0yMDgsMjAgKzE2OSw3IEBACiAgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgogICovCiAjZGVmaW5lIGdldF91c2VyKHgscHRyKQkJCQkJCQlcCi0oewlpbnQgX19yZXRfZ3U7CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fdmFsX2d1OwkJCQkJCVwKLQlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKLQlzd2l0Y2goc2l6ZW9mICgqKHB0cikpKSB7CQkJCQlcCi0JY2FzZSAxOiAgX19nZXRfdXNlcl94KDEsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JY2FzZSAyOiAgX19nZXRfdXNlcl94KDIsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JY2FzZSA0OiAgX19nZXRfdXNlcl94KDQsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JZGVmYXVsdDogX19nZXRfdXNlcl94KFgsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JfQkJCQkJCQkJXAotCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX192YWxfZ3U7CQkJCVwKLQlfX3JldF9ndTsJCQkJCQkJXAotfSkKLQotZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisJX19nZXRfdXNlcl9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCiAKIC8qKgogICogcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLgpAQCAtMjQwLDggKzE4OCw3IEBACiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KICAqLwogI2RlZmluZSBwdXRfdXNlcih4LHB0cikJCQkJCQkJXAotICBfX3B1dF91c2VyX2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQotCisJX19wdXRfdXNlcl9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKIAogLyoqCiAgKiBfX2dldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KQEAgLTI2NCw4ICsyMTEsNjQgQEAKICAqIE9uIGVycm9yLCB0aGUgdmFyaWFibGUgQHggaXMgc2V0IHRvIHplcm8uCiAgKi8KICNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgXAotICBfX2dldF91c2VyX25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCV9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCiAKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gMDsJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIpOwkJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsID0gMDsJCQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X2FkZHIgPSAocHRyKTsJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCxfX2d1X2FkZHIsc2l6ZSkpCQkJXAorCQlfX2dldF91c2VyX3NpemUoX19ndV92YWwsX19ndV9hZGRyLChzaXplKSxfX2d1X2Vycik7CVwKKwkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCQlcCisJX19ndV9lcnI7CQkJCQkJCVwKK30pCisKK2V4dGVybiBsb25nIF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyZXR2YWwgPSAwOwkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwkgIGNhc2UgMTogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ1YiIpOyBicmVhazsJCVwKKwkgIGNhc2UgMjogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ1aCIpOyBicmVhazsJCVwKKwkgIGNhc2UgNDogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCIiKTsgYnJlYWs7CQlcCisJICBkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlKQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkiCS5maWxsaW5zblxuIgkJCQkJXAorCQkiMToJbGQiaXR5cGUiICUxLEAlMlxuIgkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIyOlxuIgkJCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKKwkJIgkuYmFsaWduIDRcbiIJCQkJCVwKKwkJIjM6CWxkaSAlMCwlM1xuIgkJCQkJXAorCQkiCXNldGggcjE0LCNoaWdoKDJiKVxuIgkJCQlcCisJCSIJb3IzIHIxNCxyMTQsI2xvdygyYilcbiIJCQkJXAorCQkiCWptcCByMTRcbiIJCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiCS5sb25nIDFiLDNiXG4iCQkJCQlcCisJCSIucHJldmlvdXMiCQkJCQkJXAorCQk6ICI9JnIiIChlcnIpLCAiPSZyIiAoeCkJCQkJXAorCQk6ICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKQkJCVwKKwkJOiAicjE0IiwgIm1lbW9yeSIpCiAKIC8qKgogICogX19wdXRfdXNlcjogLSBXcml0ZSBhIHNpbXBsZSB2YWx1ZSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KQEAgLTI4NywxMSArMjkwLDEzIEBACiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KICAqLwogI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSBcCi0gIF9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKwlfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisKIAogI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKICh7CQkJCQkJCQkJXAogCWxvbmcgX19wdV9lcnI7CQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJX19wdXRfdXNlcl9zaXplKCh4KSwocHRyKSwoc2l6ZSksX19wdV9lcnIpOwkJCVwKIAlfX3B1X2VycjsJCQkJCQkJXAogfSkKQEAgLTMwOCwyOCArMzEzLDI4IEBACiB9KQogCiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKLSNkZWZpbmUgX19wdXRfdXNlcl91NjQoeCwgYWRkciwgZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAiMTogICAgIHN0ICVMMSxAJTJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIjI6ICAgICBzdCAlSDEsQCg0LCUyKVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmJhbGlnbiA0XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICI0OiAgICAgbGRpICUwLCUzXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgc2V0aCByMTQsI2hpZ2goM2IpXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgb3IzIHIxNCxyMTQsI2xvdygzYilcbiIgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgam1wIHIxNFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIucHJldmlvdXNcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmJhbGlnbiA0XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmxvbmcgMWIsNGJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmxvbmcgMmIsNGJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIucHJldmlvdXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIDogIj0mciIoZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICA6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCisjZGVmaW5lIF9fcHV0X3VzZXJfdTY0KHgsIGFkZHIsIGVycikJCQkJCVwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIjE6ICAgICBzdCAlTDEsQCUyXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiMjogICAgIHN0ICVIMSxAKDQsJTIpXG4iCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIgkJCQkJXAorICAgICAgICAgICAgICAgICIzOlxuIgkJCQkJCQlcCisgICAgICAgICAgICAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgLmJhbGlnbiA0XG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIjQ6ICAgICBsZGkgJTAsJTNcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIHNldGggcjE0LCNoaWdoKDNiKVxuIgkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICBvcjMgcjE0LHIxNCwjbG93KDNiKVxuIgkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICBqbXAgcjE0XG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIgkJCQkJCVwKKyAgICAgICAgICAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAuYmFsaWduIDRcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5sb25nIDFiLDRiXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAubG9uZyAyYiw0YlxuIgkJCQkJXAorICAgICAgICAgICAgICAgICIucHJldmlvdXMiCQkJCQkJXAorICAgICAgICAgICAgICAgIDogIj0mciIgKGVycikJCQkJCQlcCisgICAgICAgICAgICAgICAgOiAiciIgKHgpLCAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikJCVwKICAgICAgICAgICAgICAgICA6ICJyMTQiLCAibWVtb3J5IikKIAogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fXykKQEAgLTM1MywxMyArMzU4LDE1IEBACiAJCSIJLmxvbmcgMWIsNGJcbiIJCQkJCVwKIAkJIgkubG9uZyAyYiw0YlxuIgkJCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJCVwKLQkJOiAiPSZyIihlcnIpCQkJCQkJXAotCQk6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCisJCTogIj0mciIgKGVycikJCQkJCQlcCisJCTogInIiICh4KSwgInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpCQlcCiAJCTogInIxNCIsICJtZW1vcnkiKQogI2Vsc2UKICNlcnJvciBubyBlbmRpYW4gZGVmaW5lZAogI2VuZGlmCiAKK2V4dGVybiB2b2lkIF9fcHV0X3VzZXJfYmFkKHZvaWQpOworCiAjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlyZXR2YWwgPSAwOwkJCQkJCQlcCkBAIC0zOTgsNTIgKzQwNSw4IEBACiAJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCiAJCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91cyIJCQkJCQlcCi0JCTogIj0mciIoZXJyKQkJCQkJCVwKLQkJOiAiciIoeCksICJyIihhZGRyKSwgImkiKC1FRkFVTFQpLCAiMCIoZXJyKQkJXAotCQk6ICJyMTQiLCAibWVtb3J5IikKLQotI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCWxvbmcgX19ndV9lcnI7CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOwkJCQkJCVwKLQlfX2dldF91c2VyX3NpemUoX19ndV92YWwsKHB0ciksKHNpemUpLF9fZ3VfZXJyKTsJCVwKLQkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCQlcCi0JX19ndV9lcnI7CQkJCQkJCVwKLX0pCi0KLWV4dGVybiBsb25nIF9fZ2V0X3VzZXJfYmFkKHZvaWQpOwotCi0jZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlyZXR2YWwgPSAwOwkJCQkJCQlcCi0JX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCi0Jc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKLQkgIGNhc2UgMTogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ1YiIpOyBicmVhazsJCVwKLQkgIGNhc2UgMjogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ1aCIpOyBicmVhazsJCVwKLQkgIGNhc2UgNDogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCIiKTsgYnJlYWs7CQlcCi0JICBkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlKQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkiCS5maWxsaW5zblxuIgkJCQkJXAotCQkiMToJbGQiaXR5cGUiICUxLEAlMlxuIgkJCQlcCi0JCSIJLmZpbGxpbnNuXG4iCQkJCQlcCi0JCSIyOlxuIgkJCQkJCQlcCi0JCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKLQkJIgkuYmFsaWduIDRcbiIJCQkJCVwKLQkJIjM6CWxkaSAlMCwlM1xuIgkJCQkJXAotCQkiCXNldGggcjE0LCNoaWdoKDJiKVxuIgkJCQlcCi0JCSIJb3IzIHIxNCxyMTQsI2xvdygyYilcbiIJCQkJXAotCQkiCWptcCByMTRcbiIJCQkJCVwKLQkJIi5wcmV2aW91c1xuIgkJCQkJCVwKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAotCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAotCQkiCS5sb25nIDFiLDNiXG4iCQkJCQlcCi0JCSIucHJldmlvdXMiCQkJCQkJXAotCQk6ICI9JnIiKGVyciksICI9JnIiKHgpCQkJCQlcCi0JCTogInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQkJXAorCQk6ICI9JnIiIChlcnIpCQkJCQkJXAorCQk6ICJyIiAoeCksICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKQkJXAogCQk6ICJyMTQiLCAibWVtb3J5IikKIAogLyoKQEAgLTQ1Myw3ICs0MTYsNiBAQAogICogYW55dGhpbmcsIHNvIHRoaXMgaXMgYWNjdXJhdGUuCiAgKi8KIAotCiAvKgogICogQ29weSBUby9Gcm9tIFVzZXJzcGFjZQogICovCkBAIC01MTEsOCArNDczLDkgQEAKIAkJIgkubG9uZyAyYiw5YlxuIgkJCQkJXAogCQkiCS5sb25nIDNiLDliXG4iCQkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJCQlcCi0JCTogIj0mciIoX19kc3QpLCAiPSZyIihfX3NyYyksICI9JnIiKHNpemUpLCAiPSZyIihfX2MpCVwKLQkJOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIihzaXplKSwgIjMiKHNpemUgLyA0KQkJXAorCQk6ICI9JnIiIChfX2RzdCksICI9JnIiIChfX3NyYyksICI9JnIiIChzaXplKSwJCVwKKwkJICAiPSZyIiAoX19jKQkJCQkJCVwKKwkJOiAiMCIgKHRvKSwgIjEiIChmcm9tKSwgIjIiIChzaXplKSwgIjMiIChzaXplIC8gNCkJXAogCQk6ICJyMTQiLCAibWVtb3J5Iik7CQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC01NzMsOCArNTM2LDkgQEAKIAkJIgkubG9uZyAyYiw3YlxuIgkJCQkJXAogCQkiCS5sb25nIDNiLDdiXG4iCQkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJCQlcCi0JCTogIj0mciIoX19kc3QpLCAiPSZyIihfX3NyYyksICI9JnIiKHNpemUpLCAiPSZyIihfX2MpCVwKLQkJOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIihzaXplKSwgIjMiKHNpemUgLyA0KQkJXAorCQk6ICI9JnIiIChfX2RzdCksICI9JnIiIChfX3NyYyksICI9JnIiIChzaXplKSwJCVwKKwkJICAiPSZyIiAoX19jKQkJCQkJCVwKKwkJOiAiMCIgKHRvKSwgIjEiIChmcm9tKSwgIjIiIChzaXplKSwgIjMiIChzaXplIC8gNCkJXAogCQk6ICJyMTQiLCAibWVtb3J5Iik7CQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC02NzYsNyArNjQwLDcgQEAKICNkZWZpbmUgY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKQkJCVwKICh7CQkJCQkJCVwKIAltaWdodF9zbGVlcCgpOwkJCQkJXAotX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKCh0byksKGZyb20pLChuKSk7CVwKKwlfX2dlbmVyaWNfY29weV9mcm9tX3VzZXIoKHRvKSwoZnJvbSksKG4pKTsJXAogfSkKIAogbG9uZyBfX211c3RfY2hlY2sgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmgKaW5kZXggMzliZTg3Yy4uYmUwZWIwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oCkBAIC0yOTIsNyArMjkyLDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQotI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAKICNkZWZpbmUgTlJfc3lzY2FsbHMgMjg1CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9hZGRyc3BhY2UuaAppbmRleCA0MjUyMGNjLi4xMzg2YWYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYWRkcnNwYWNlLmgKQEAgLTEyOSw2ICsxMjksNyBAQAogI2lmIGRlZmluZWQgKENPTkZJR19DUFVfUjQzMDApCQkJCQkJXAogICAgIHx8IGRlZmluZWQgKENPTkZJR19DUFVfUjRYMDApCQkJCQlcCiAgICAgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9SNTAwMCkJCQkJCVwKKyAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1JNNzAwMCkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX05FVkFEQSkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1RYNDlYWCkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX01JUFM2NCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaAppbmRleCAzMGIxOGVhLi5mNTRhYTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oCkBAIC0xNyw3ICsxNywyNiBAQAogI2lmZGVmIENPTkZJR182NEJJVAogI2luY2x1ZGUgPGFzbS9hc21tYWNyby02NC5oPgogI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkubWFjcm8JbG9jYWxfaXJxX2VuYWJsZSByZWc9dDAKKwltZmMwCVxyZWcsIENQMF9UQ1NUQVRVUworCW9yaQlccmVnLCBccmVnLCBUQ1NUQVRVU19JWE1UCisJeG9yaQlccmVnLCBccmVnLCBUQ1NUQVRVU19JWE1UCisJbXRjMAlccmVnLCBDUDBfVENTVEFUVVMKKwllaGIKKwkuZW5kbQorCisJLm1hY3JvCWxvY2FsX2lycV9kaXNhYmxlIHJlZz10MAorCW1mYzAJXHJlZywgQ1AwX1RDU1RBVFVTCisJb3JpCVxyZWcsIFxyZWcsIFRDU1RBVFVTX0lYTVQKKwltdGMwCVxyZWcsIENQMF9UQ1NUQVRVUworCWVoYgorCS5lbmRtCisjZWxzZQogCS5tYWNybwlsb2NhbF9pcnFfZW5hYmxlIHJlZz10MAogCW1mYzAJXHJlZywgQ1AwX1NUQVRVUwogCW9yaQlccmVnLCBccmVnLCAxCkBAIC0zMiw2ICs1MSw3IEBACiAJbXRjMAlccmVnLCBDUDBfU1RBVFVTCiAJaXJxX2Rpc2FibGVfaGF6YXJkCiAJLmVuZG0KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNpZmRlZiBDT05GSUdfQ1BVX1NCMQogCS5tYWNybwlmcHVfZW5hYmxlX2hhemFyZApAQCAtNDgsNCArNjgsMzEgQEAKIAkuZW5kbQogI2VuZGlmCiAKKy8qCisgKiBUZW1wb3JhcnkgdW50aWwgYWxsIGdhcyBoYXZlIE1UIEFTRSBzdXBwb3J0CisgKi8KKwkubWFjcm8JRE1UCXJlZz0wCisJLndvcmQJKDB4NDE2MDBiYzEgfCAoXHJlZyA8PCAxNikpCisJLmVuZG0KKworCS5tYWNybwlFTVQJcmVnPTAKKwkud29yZAkoMHg0MTYwMGJlMSB8IChccmVnIDw8IDE2KSkKKwkuZW5kbQorCisJLm1hY3JvCURWUEUJcmVnPTAKKwkud29yZAkoMHg0MTYwMDAwMSB8IChccmVnIDw8IDE2KSkKKwkuZW5kbQorCisJLm1hY3JvCUVWUEUJcmVnPTAKKwkud29yZAkoMHg0MTYwMDAyMSB8IChccmVnIDw8IDE2KSkKKwkuZW5kbQorCisJLm1hY3JvCU1GVFIJcnQ9MCwgcmQ9MCwgdT0wLCBzZWw9MAorCSAud29yZAkoMHg0MTAwMDAwMCB8IChccnQgPDwgMTYpIHwgKFxyZCA8PCAxMSkgfCAoXHUgPDwgNSkgfCAoXHNlbCkpCisJLmVuZG0KKworCS5tYWNybwlNVFRSCXJ0PTAsIHJkPTAsIHU9MCwgc2VsPTAKKwkgLndvcmQJKDB4NDE4MDAwMDAgfCAoXHJ0IDw8IDE2KSB8IChccmQgPDwgMTEpIHwgKFx1IDw8IDUpIHwgKFxzZWwpKQorCS5lbmRtCisKICNlbmRpZiAvKiBfQVNNX0FTTU1BQ1JPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCmluZGV4IGExNzI4ZjguLmQyZjQ0NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaApAQCAtNDY3LDY0ICs0NjcsNTYgQEAKIH0KIAogLyoKKyAqIGZscyAtIGZpbmQgbGFzdCBiaXQgc2V0LgorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMgZmZzLgorICogTm90ZSBmbHMoMCkgPSAwLCBmbHMoMSkgPSAxLCBmbHMoMHg4MDAwMDAwMCkgPSAzMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmxzKGludCB3b3JkKQoreworCV9fYXNtX18gKCJjbHogJTAsICUxIiA6ICI9ciIgKHdvcmQpIDogInIiICh3b3JkKSk7CisKKwlyZXR1cm4gMzIgLSB3b3JkOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpCitzdGF0aWMgaW5saW5lIGludCBmbHM2NChfX3U2NCB3b3JkKQoreworCV9fYXNtX18gKCJkY2x6ICUwLCAlMSIgOiAiPXIiICh3b3JkKSA6ICJyIiAod29yZCkpOworCisJcmV0dXJuIDY0IC0gd29yZDsKK30KKyNlbHNlCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CisjZW5kaWYKKworLyoKICAqIGZmcyAtIGZpbmQgZmlyc3QgYml0IHNldC4KICAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKICAqCi0gKiBSZXR1cm5zIDEuLlNaTE9ORwotICogUmV0dXJucyAwIGlmIG5vIGJpdCBleGlzdHMKKyAqIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAqIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcyByb3V0aW5lcywgdGhlcmVmb3JlCisgKiBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpLgogICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnModW5zaWduZWQgbG9uZyB3b3JkKQorc3RhdGljIGlubGluZSBpbnQgZmZzKGludCB3b3JkKQogewogCWlmICghd29yZCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gX19mZnMod29yZCkgKyAxOwotfQotCi0vKgotICogZmZ6IC0gZmluZCBmaXJzdCB6ZXJvIGluIHdvcmQuCi0gKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCi0gKgotICogVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQotewotCXJldHVybiBfX2ZmcyAofndvcmQpOwotfQotCi0vKgotICogZmxzIC0gZmluZCBsYXN0IGJpdCBzZXQuCi0gKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCi0gKgotICogUmV0dXJucyAxLi5TWkxPTkcKLSAqIFJldHVybnMgMCBpZiBubyBiaXQgZXhpc3RzCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmbHModW5zaWduZWQgbG9uZyB3b3JkKQotewotI2lmZGVmIENPTkZJR19DUFVfTUlQUzMyCi0JX19hc21fXyAoImNseiAlMCwgJTEiIDogIj1yIiAod29yZCkgOiAiciIgKHdvcmQpKTsKLQotCXJldHVybiAzMiAtIHdvcmQ7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfTUlQUzY0Ci0JX19hc21fXyAoImRjbHogJTAsICUxIiA6ICI9ciIgKHdvcmQpIDogInIiICh3b3JkKSk7Ci0KLQlyZXR1cm4gNjQgLSB3b3JkOwotI2VuZGlmCisJcmV0dXJuIGZscyh3b3JkICYgLXdvcmQpOwogfQogCiAjZWxzZQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL19fZmZzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmcy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnouaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CiAKICNlbmRpZiAvKmRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpICovCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmZ6Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKaW5kZXggYWVhZTlmYS4uNDdiYzhmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKQEAgLTc0LDYgKzc0LDcgQEAKIAogZXh0ZXJuIHZvaWQgKCpmbHVzaF9jYWNoZV9zaWd0cmFtcCkodW5zaWduZWQgbG9uZyBhZGRyKTsKIGV4dGVybiB2b2lkICgqZmx1c2hfaWNhY2hlX2FsbCkodm9pZCk7CitleHRlcm4gdm9pZCAoKmxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSkodm9pZCAqIGFkZHIpOwogZXh0ZXJuIHZvaWQgKCpmbHVzaF9kYXRhX2NhY2hlX3BhZ2UpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaAppbmRleCAzZjJiNmQ5Li4yNTRlMTFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUgY3B1X2hhc19zYjFfY2FjaGUJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9TQjFfQ0FDSEUpCiAjZW5kaWYKICNpZm5kZWYgY3B1X2hhc19mcHUKLSNkZWZpbmUgY3B1X2hhc19mcHUJCShjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfRlBVKQorI2RlZmluZSBjcHVfaGFzX2ZwdQkJKGN1cnJlbnRfY3B1X2RhdGEub3B0aW9ucyAmIE1JUFNfQ1BVX0ZQVSkKICNlbmRpZgogI2lmbmRlZiBjcHVfaGFzXzMyZnByCiAjZGVmaW5lIGNwdV9oYXNfMzJmcHIJCShjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfMzJGUFIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmgKaW5kZXggMTQwYmUxYy4uNjU3MmFjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWluZm8uaApAQCAtNzMsNiArNzMsMTYgQEAKIAlzdHJ1Y3QgY2FjaGVfZGVzYwlkY2FjaGU7CS8qIFByaW1hcnkgRCBvciBjb21iaW5lZCBJL0QgY2FjaGUgKi8KIAlzdHJ1Y3QgY2FjaGVfZGVzYwlzY2FjaGU7CS8qIFNlY29uZGFyeSBjYWNoZSAqLwogCXN0cnVjdCBjYWNoZV9kZXNjCXRjYWNoZTsJLyogVGVydGlhcnkvc3BsaXQgc2Vjb25kYXJ5IGNhY2hlICovCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVRDKQorCS8qCisJICogSW4gdGhlIE1JUFMgTVQgIlNNVEMiIG1vZGVsLCBlYWNoIFRDIGlzIGNvbnNpZGVyZWQKKwkgKiB0byBiZSBhICJDUFUiIGZvciB0aGUgcHVycG9zZXMgb2Ygc2NoZWR1bGluZywgYnV0CisJICogZXhjZXB0aW9uIHJlc291cmNlcywgQVNJRCBzcGFjZXMsIGV0YywgYXJlIGNvbW1vbgorCSAqIHRvIGFsbCBUQ3Mgd2l0aGluIHRoZSBzYW1lIFZQRS4KKwkgKi8KKwlpbnQJCQl2cGVfaWQ7ICAvKiBWaXJ0dWFsIFByb2Nlc3NvciBudW1iZXIgKi8KKwlpbnQJCQl0Y19pZDsgICAvKiBUaHJlYWQgQ29udGV4dCBudW1iZXIgKi8KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVCAqLwogCXZvaWQgCQkJKmRhdGE7CS8qIEFkZGl0aW9uYWwgZGF0YSAqLwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFNNUF9DQUNIRV9CWVRFUykpKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jcHUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LmgKaW5kZXggODE4YjlhOS4uZGZmMmEwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS5oCkBAIC01MSw2ICs1MSw3IEBACiAjZGVmaW5lIFBSSURfSU1QX1I0MzAwCQkweDBiMDAKICNkZWZpbmUgUFJJRF9JTVBfVlI0MVhYCQkweDBjMDAKICNkZWZpbmUgUFJJRF9JTVBfUjEyMDAwCQkweDBlMDAKKyNkZWZpbmUgUFJJRF9JTVBfUjE0MDAwCQkweDBmMDAKICNkZWZpbmUgUFJJRF9JTVBfUjgwMDAJCTB4MTAwMAogI2RlZmluZSBQUklEX0lNUF9QUjQ0NTAJCTB4MTIwMAogI2RlZmluZSBQUklEX0lNUF9SNDYwMAkJMHgyMDAwCkBAIC04Nyw2ICs4OCw3IEBACiAjZGVmaW5lIFBSSURfSU1QXzI0SwkJMHg5MzAwCiAjZGVmaW5lIFBSSURfSU1QXzM0SwkJMHg5NTAwCiAjZGVmaW5lIFBSSURfSU1QXzI0S0UJCTB4OTYwMAorI2RlZmluZSBQUklEX0lNUF83NEsJCTB4OTcwMAogCiAvKgogICogVGhlc2UgYXJlIHRoZSBQUklEJ3MgZm9yIHdoZW4gMjM6MTYgPT0gUFJJRF9DT01QX1NJQllURQpAQCAtMTk2LDcgKzE5OCw5IEBACiAjZGVmaW5lIENQVV8zNEsJCQk2MAogI2RlZmluZSBDUFVfUFI0NDUwCQk2MQogI2RlZmluZSBDUFVfU0IxQQkJNjIKLSNkZWZpbmUgQ1BVX0xBU1QJCTYyCisjZGVmaW5lIENQVV83NEsJCQk2MworI2RlZmluZSBDUFVfUjE0MDAwCQk2NAorI2RlZmluZSBDUFVfTEFTVAkJNjQKIAogLyoKICAqIElTQSBMZXZlbCBlbmNvZGluZ3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaAppbmRleCA2NGRkNDUxLi45MjhmMzBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWxheS5oCkBAIC0xOSwyMCArMTksMjIgQEAKIHsKIAlpZiAoc2l6ZW9mKGxvbmcpID09IDQpCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIi5zZXRcdG5vcmVvcmRlclxuIgotCQkiMTpcdGJuZXpcdCUwLDFiXG5cdCIKLQkJInN1YnVcdCUwLDFcblx0IgotCQkiLnNldFx0cmVvcmRlciIKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKKwkJIgkuYWxpZ24JMwkJCQkJXG4iCisJCSIxOglibmV6CSUwLCAxYgkJCQkJXG4iCisJCSIJc3VidQklMCwgMQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKIAkJOiAiPXIiIChsb29wcykKIAkJOiAiMCIgKGxvb3BzKSk7CiAJZWxzZSBpZiAoc2l6ZW9mKGxvbmcpID09IDgpCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIi5zZXRcdG5vcmVvcmRlclxuIgotCQkiMTpcdGJuZXpcdCUwLDFiXG5cdCIKLQkJImRzdWJ1XHQlMCwxXG5cdCIKLQkJIi5zZXRcdHJlb3JkZXIiCi0JCToiPXIiIChsb29wcykKLQkJOiIwIiAobG9vcHMpKTsKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKKwkJIgkuYWxpZ24JMwkJCQkJXG4iCisJCSIxOglibmV6CSUwLCAxYgkJCQkJXG4iCisJCSIJZHN1YnUJJTAsIDEJCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCisJCTogIj1yIiAobG9vcHMpCisJCTogIjAiIChsb29wcykpOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZHMxNzQyLmggYi9pbmNsdWRlL2FzbS1taXBzL2RzMTc0Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjJjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RzMTc0Mi5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICovCisjaWZuZGVmIF9BU01fRFMxNzQyX0gKKyNkZWZpbmUgX0FTTV9EUzE3NDJfSAorCisjaW5jbHVkZSA8ZHMxNzQyLmg+CisKKyNlbmRpZiAvKiBfQVNNX0RTMTc0Ml9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2VsZi5oIGIvaW5jbHVkZS9hc20tbWlwcy9lbGYuaAppbmRleCA4NTFmMDEzLi5iZGM5ZGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZWxmLmgKQEAgLTExOSw4ICsxMTksNDkgQEAKICNkZWZpbmUgU0hUX01JUFNfQ09ORkxJQ1QJMHg3MDAwMDAwMgogI2RlZmluZSBTSFRfTUlQU19HUFRBQgkJMHg3MDAwMDAwMwogI2RlZmluZSBTSFRfTUlQU19VQ09ERQkJMHg3MDAwMDAwNAorI2RlZmluZSBTSFRfTUlQU19ERUJVRwkJMHg3MDAwMDAwNQorI2RlZmluZSBTSFRfTUlQU19SRUdJTkZPCTB4NzAwMDAwMDYKKyNkZWZpbmUgU0hUX01JUFNfUEFDS0FHRQkweDcwMDAwMDA3CisjZGVmaW5lIFNIVF9NSVBTX1BBQ0tTWU0JMHg3MDAwMDAwOAorI2RlZmluZSBTSFRfTUlQU19SRUxECQkweDcwMDAwMDA5CisjZGVmaW5lIFNIVF9NSVBTX0lGQUNFCQkweDcwMDAwMDBiCisjZGVmaW5lIFNIVF9NSVBTX0NPTlRFTlQJMHg3MDAwMDAwYworI2RlZmluZSBTSFRfTUlQU19PUFRJT05TCTB4NzAwMDAwMGQKKyNkZWZpbmUgU0hUX01JUFNfU0hEUgkJMHg3MDAwMDAxMAorI2RlZmluZSBTSFRfTUlQU19GREVTQwkJMHg3MDAwMDAxMQorI2RlZmluZSBTSFRfTUlQU19FWFRTWU0JCTB4NzAwMDAwMTIKKyNkZWZpbmUgU0hUX01JUFNfREVOU0UJCTB4NzAwMDAwMTMKKyNkZWZpbmUgU0hUX01JUFNfUERFU0MJCTB4NzAwMDAwMTQKKyNkZWZpbmUgU0hUX01JUFNfTE9DU1lNCQkweDcwMDAwMDE1CisjZGVmaW5lIFNIVF9NSVBTX0FVWFNZTQkJMHg3MDAwMDAxNgorI2RlZmluZSBTSFRfTUlQU19PUFRTWU0JCTB4NzAwMDAwMTcKKyNkZWZpbmUgU0hUX01JUFNfTE9DU1RSCQkweDcwMDAwMDE4CisjZGVmaW5lIFNIVF9NSVBTX0xJTkUJCTB4NzAwMDAwMTkKKyNkZWZpbmUgU0hUX01JUFNfUkZERVNDCQkweDcwMDAwMDFhCisjZGVmaW5lIFNIVF9NSVBTX0RFTFRBU1lNCTB4NzAwMDAwMWIKKyNkZWZpbmUgU0hUX01JUFNfREVMVEFJTlNUCTB4NzAwMDAwMWMKKyNkZWZpbmUgU0hUX01JUFNfREVMVEFDTEFTUwkweDcwMDAwMDFkCisjZGVmaW5lIFNIVF9NSVBTX0RXQVJGCQkweDcwMDAwMDFlCisjZGVmaW5lIFNIVF9NSVBTX0RFTFRBREVDTAkweDcwMDAwMDFmCisjZGVmaW5lIFNIVF9NSVBTX1NZTUJPTF9MSUIJMHg3MDAwMDAyMAorI2RlZmluZSBTSFRfTUlQU19FVkVOVFMJCTB4NzAwMDAwMjEKKyNkZWZpbmUgU0hUX01JUFNfVFJBTlNMQVRFCTB4NzAwMDAwMjIKKyNkZWZpbmUgU0hUX01JUFNfUElYSUUJCTB4NzAwMDAwMjMKKyNkZWZpbmUgU0hUX01JUFNfWExBVEUJCTB4NzAwMDAwMjQKKyNkZWZpbmUgU0hUX01JUFNfWExBVEVfREVCVUcJMHg3MDAwMDAyNQorI2RlZmluZSBTSFRfTUlQU19XSElSTAkJMHg3MDAwMDAyNgorI2RlZmluZSBTSFRfTUlQU19FSF9SRUdJT04JMHg3MDAwMDAyNworI2RlZmluZSBTSFRfTUlQU19YTEFURV9PTEQJMHg3MDAwMDAyOAorI2RlZmluZSBTSFRfTUlQU19QRFJfRVhDRVBUSU9OCTB4NzAwMDAwMjkKIAotI2RlZmluZSBTSEZfTUlQU19HUFJFTAkweDEwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX0dQUkVMCQkweDEwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX01FUkdFCQkweDIwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX0FERFIJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0hGX01JUFNfU1RSSU5HCQkweDgwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX05PU1RSSVAJMHgwODAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19MT0NBTAkJMHgwNDAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19OQU1FUwkJMHgwMjAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19OT0RVUEVTCTB4MDEwMDAwMDAKIAogI2lmbmRlZiBFTEZfQVJDSAogLyogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaAppbmRleCA5YzgyOGIxLi5iMGY1MDAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKQEAgLTIxLDYgKzIxLDEwIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorI2luY2x1ZGUgPGFzbS9taXBzX210Lmg+CisjZW5kaWYKKwogc3RydWN0IHNpZ2NvbnRleHQ7CiBzdHJ1Y3Qgc2lnY29udGV4dDMyOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmgKaW5kZXggYTU1NDA4OS4uMTJkMTE4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZnV0ZXguaApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3dhci5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBfX0ZVVEVYX1NNUF9TWU5DICIJc3luYwkJCQkJXG4iCkBAIC0xNiwzMCArMTcsNTggQEAKIAogI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKQkJXAogewkJCQkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JIgkuc2V0CXB1c2gJCQkJCVxuIglcCi0JIgkuc2V0CW5vYXQJCQkJCVxuIglcCi0JIgkuc2V0CW1pcHMzCQkJCQlcbiIJXAotCSIxOglsbAklMSwgKCUzKQkjIF9fZnV0ZXhfYXRvbWljX29wMQlcbiIJXAotCSIJLnNldAltaXBzMAkJCQkJXG4iCVwKLQkiCSIgaW5zbgkiCQkJCQlcbiIJXAotCSIJLnNldAltaXBzMwkJCQkJXG4iCVwKLQkiMjoJc2MJJDEsICglMykJCQkJXG4iCVwKLQkiCWJlcXpsCSQxLCAxYgkJCQkJXG4iCVwKLQlfX0ZVVEVYX1NNUF9TWU5DCQkJCQkJXAotCSIzOgkJCQkJCQlcbiIJXAotCSIJLnNldAlwb3AJCQkJCVxuIglcCi0JIgkuc2V0CW1pcHMwCQkJCQlcbiIJXAotCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIgkJCQlcbiIJXAotCSI0OglsaQklMCwgJTUJCQkJCVxuIglcCi0JIglqCTJiCQkJCQlcbiIJXAotCSIJLnByZXZpb3VzCQkJCQlcbiIJXAotCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJCVxuIglcCi0JIgkiX19VQV9BRERSICJcdDFiLCA0YgkJCQlcbiIJXAotCSIJIl9fVUFfQUREUiAiXHQyYiwgNGIJCQkJXG4iCVwKLQkiCS5wcmV2aW91cwkJCQkJXG4iCVwKLQk6ICI9ciIgKHJldCksICI9ciIgKG9sZHZhbCkJCQkJCVwKLQk6ICIwIiAoMCksICJyIiAodWFkZHIpLCAiSnIiIChvcGFyZyksICJpIiAoLUVGQVVMVCkpOwkJXAorCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSIJLnNldAlwdXNoCQkJCVxuIglcCisJCSIJLnNldAlub2F0CQkJCVxuIglcCisJCSIJLnNldAltaXBzMwkJCQlcbiIJXAorCQkiMToJbGwJJTEsICglMykJIyBfX2Z1dGV4X2F0b21pY19vcAlcbiIgXAorCQkiCS5zZXQJbWlwczAJCQkJXG4iCVwKKwkJIgkiIGluc24JIgkJCQlcbiIJXAorCQkiCS5zZXQJbWlwczMJCQkJXG4iCVwKKwkJIjI6CXNjCSQxLCAoJTMpCQkJXG4iCVwKKwkJIgliZXF6bAkkMSwgMWIJCQkJXG4iCVwKKwkJX19GVVRFWF9TTVBfU1lOQwkJCQkJXAorCQkiMzoJCQkJCQlcbiIJXAorCQkiCS5zZXQJcG9wCQkJCVxuIglcCisJCSIJLnNldAltaXBzMAkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQlcbiIJXAorCQkiNDoJbGkJJTAsICU1CQkJCVxuIglcCisJCSIJagkyYgkJCQlcbiIJXAorCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCVxuIglcCisJCSIJIl9fVUFfQUREUiAiXHQxYiwgNGIJCQlcbiIJXAorCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJXG4iCVwKKwkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJOiAiPXIiIChyZXQpLCAiPXIiIChvbGR2YWwpCQkJCVwKKwkJOiAiMCIgKDApLCAiciIgKHVhZGRyKSwgIkpyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpKTsJXAorCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkiCS5zZXQJcHVzaAkJCQlcbiIJXAorCQkiCS5zZXQJbm9hdAkJCQlcbiIJXAorCQkiCS5zZXQJbWlwczMJCQkJXG4iCVwKKwkJIjE6CWxsCSUxLCAoJTMpCSMgX19mdXRleF9hdG9taWNfb3AJXG4iIFwKKwkJIgkuc2V0CW1pcHMwCQkJCVxuIglcCisJCSIJIiBpbnNuCSIJCQkJXG4iCVwKKwkJIgkuc2V0CW1pcHMzCQkJCVxuIglcCisJCSIyOglzYwkkMSwgKCUzKQkJCVxuIglcCisJCSIJYmVxegkkMSwgMWIJCQkJXG4iCVwKKwkJX19GVVRFWF9TTVBfU1lOQwkJCQkJXAorCQkiMzoJCQkJCQlcbiIJXAorCQkiCS5zZXQJcG9wCQkJCVxuIglcCisJCSIJLnNldAltaXBzMAkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQlcbiIJXAorCQkiNDoJbGkJJTAsICU1CQkJCVxuIglcCisJCSIJagkyYgkJCQlcbiIJXAorCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCVxuIglcCisJCSIJIl9fVUFfQUREUiAiXHQxYiwgNGIJCQlcbiIJXAorCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJXG4iCVwKKwkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJOiAiPXIiIChyZXQpLCAiPXIiIChvbGR2YWwpCQkJCVwKKwkJOiAiMCIgKDApLCAiciIgKHVhZGRyKSwgIkpyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpKTsJXAorCX0gZWxzZQkJCQkJCQkJXAorCQlyZXQgPSAtRU5PU1lTOwkJCQkJCVwKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTEwMiw3ICsxMzEsNjkgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyhpbnQgX191c2VyICp1YWRkciwgaW50IG9sZHZhbCwgaW50IG5ld3ZhbCkKIHsKLQlyZXR1cm4gLUVOT1NZUzsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYwkJCVxuIgorCQkiCS5zZXQJcHVzaAkJCQkJXG4iCisJCSIJLnNldAlub2F0CQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6CWxsCSUwLCAlMgkJCQkJXG4iCisJCSIJYm5lCSUwLCAlejMsIDNmCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJCVxuIgorCQkiCW1vdmUJJDEsICV6NAkJCQkJXG4iCisJCSIJLnNldAltaXBzMwkJCQkJXG4iCisJCSIyOglzYwkkMSwgJTEJCQkJCVxuIgorCQkiCWJlcXpsCSQxLCAxYgkJCQkJXG4iCisJCV9fRlVURVhfU01QX1NZTkMKKwkJIjM6CQkJCQkJCVxuIgorCQkiCS5zZXQJcG9wCQkJCQlcbiIKKwkJIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiCQkJCVxuIgorCQkiNDoJbGkJJTAsICU1CQkJCQlcbiIKKwkJIglqCTNiCQkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCQlcbiIKKwkJIgkiX19VQV9BRERSICJcdDFiLCA0YgkJCQlcbiIKKwkJIgkiX19VQV9BRERSICJcdDJiLCA0YgkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPVIiICgqdWFkZHIpCisJCTogIlIiICgqdWFkZHIpLCAiSnIiIChvbGR2YWwpLCAiSnIiIChuZXd2YWwpLCAiaSIgKC1FRkFVTFQpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYwkJCVxuIgorCQkiCS5zZXQJcHVzaAkJCQkJXG4iCisJCSIJLnNldAlub2F0CQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6CWxsCSUwLCAlMgkJCQkJXG4iCisJCSIJYm5lCSUwLCAlejMsIDNmCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJCVxuIgorCQkiCW1vdmUJJDEsICV6NAkJCQkJXG4iCisJCSIJLnNldAltaXBzMwkJCQkJXG4iCisJCSIyOglzYwkkMSwgJTEJCQkJCVxuIgorCQkiCWJlcXoJJDEsIDFiCQkJCQlcbiIKKwkJX19GVVRFWF9TTVBfU1lOQworCQkiMzoJCQkJCQkJXG4iCisJCSIJLnNldAlwb3AJCQkJCVxuIgorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQkJXG4iCisJCSI0OglsaQklMCwgJTUJCQkJCVxuIgorCQkiCWoJM2IJCQkJCVxuIgorCQkiCS5wcmV2aW91cwkJCQkJXG4iCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJCVxuIgorCQkiCSJfX1VBX0FERFIgIlx0MWIsIDRiCQkJCVxuIgorCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJCVxuIgorCQkiCS5wcmV2aW91cwkJCQkJXG4iCisJCTogIj0mciIgKHJldHZhbCksICI9UiIgKCp1YWRkcikKKwkJOiAiUiIgKCp1YWRkciksICJKciIgKG9sZHZhbCksICJKciIgKG5ld3ZhbCksICJpIiAoLUVGQVVMVCkKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0dXJuIHJldHZhbDsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCmluZGV4IGZlYjI5YTcuLmRhZGMwNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCkBAIC0yODQsNiArMjg0LDggQEAKICNkZWZpbmUgaW5zdHJ1Y3Rpb25faGF6YXJkKCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK2V4dGVybiB2b2lkIG1pcHNfaWhiKHZvaWQpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfQVNNX0hBWkFSRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pbnN0LmggYi9pbmNsdWRlL2FzbS1taXBzL2luc3QuaAppbmRleCBlMDc0NWY0Li4xZWQ4ZDBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2luc3QuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2luc3QuaApAQCAtNiw2ICs2LDcgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2LCAyMDAwIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFRoaWVtbyBTZXVmZXIKICAqLwogI2lmbmRlZiBfQVNNX0lOU1RfSAogI2RlZmluZSBfQVNNX0lOU1RfSApAQCAtMjEsMTQgKzIyLDE0IEBACiAJY29wMF9vcCwgY29wMV9vcCwgY29wMl9vcCwgY29wMXhfb3AsCiAJYmVxbF9vcCwgYm5lbF9vcCwgYmxlemxfb3AsIGJndHpsX29wLAogCWRhZGRpX29wLCBkYWRkaXVfb3AsIGxkbF9vcCwgbGRyX29wLAotCW1ham9yXzFjX29wLCBqYWx4X29wLCBtYWpvcl8xZV9vcCwgbWFqb3JfMWZfb3AsCisJc3BlYzJfb3AsIGphbHhfb3AsIG1kbXhfb3AsIHNwZWMzX29wLAogCWxiX29wLCBsaF9vcCwgbHdsX29wLCBsd19vcCwKIAlsYnVfb3AsIGxodV9vcCwgbHdyX29wLCBsd3Vfb3AsCiAJc2Jfb3AsIHNoX29wLCBzd2xfb3AsIHN3X29wLAogCXNkbF9vcCwgc2RyX29wLCBzd3Jfb3AsIGNhY2hlX29wLAogCWxsX29wLCBsd2MxX29wLCBsd2MyX29wLCBwcmVmX29wLAogCWxsZF9vcCwgbGRjMV9vcCwgbGRjMl9vcCwgbGRfb3AsCi0Jc2Nfb3AsIHN3YzFfb3AsIHN3YzJfb3AsIHJkaHdyX29wLAorCXNjX29wLCBzd2MxX29wLCBzd2MyX29wLCBtYWpvcl8zYl9vcCwKIAlzY2Rfb3AsIHNkYzFfb3AsIHNkYzJfb3AsIHNkX29wCiB9OwogCkBAIC0zNyw3ICszOCw3IEBACiAgKi8KIGVudW0gc3BlY19vcCB7CiAJc2xsX29wLCBtb3ZjX29wLCBzcmxfb3AsIHNyYV9vcCwKLQlzbGx2X29wLCBzcmx2X29wLCBzcmF2X29wLCBzcGVjMV91bnVzZWRfb3AsIC8qIE9wY29kZSAweDA3IGlzIHVudXNlZCAqLworCXNsbHZfb3AsIHBtb25fb3AsIHNybHZfb3AsIHNyYXZfb3AsCiAJanJfb3AsIGphbHJfb3AsIG1vdnpfb3AsIG1vdm5fb3AsCiAJc3lzY2FsbF9vcCwgYnJlYWtfb3AsIHNwaW1fb3AsIHN5bmNfb3AsCiAJbWZoaV9vcCwgbXRoaV9vcCwgbWZsb19vcCwgbXRsb19vcCwKQEAgLTU1LDYgKzU2LDI4IEBACiB9OwogCiAvKgorICogZnVuYyBmaWVsZCBvZiBzcGVjMiBvcGNvZGUuCisgKi8KK2VudW0gc3BlYzJfb3AgeworCW1hZGRfb3AsIG1hZGR1X29wLCBtdWxfb3AsIHNwZWMyXzNfdW51c2VkX29wLAorCW1zdWJfb3AsIG1zdWJ1X29wLCAvKiBtb3JlIHVudXNlZCBvcHMgKi8KKwljbHpfb3AgPSAweDIwLCBjbG9fb3AsCisJZGNsel9vcCA9IDB4MjQsIGRjbG9fb3AsCisJc2RicHBfb3AgPSAweDNmCit9OworCisvKgorICogZnVuYyBmaWVsZCBvZiBzcGVjMyBvcGNvZGUuCisgKi8KK2VudW0gc3BlYzNfb3AgeworCWV4dF9vcCwgZGV4dG1fb3AsIGRleHR1X29wLCBkZXh0X29wLAorCWluc19vcCwgZGluc21fb3AsIGRpbnN1X29wLCBkaW5zX29wLAorCWJzaGZsX29wID0gMHgyMCwKKwlkYnNoZmxfb3AgPSAweDI0LAorCXJkaHdyX29wID0gMHgzZgorfTsKKworLyoKICAqIHJ0IGZpZWxkIG9mIGJjb25kIG9wY29kZXMuCiAgKi8KIGVudW0gcnRfb3AgewpAQCAtMTUxLDggKzE3NCw4IEBACiAgKiBmdW5jIGZpZWxkIGZvciBtYWQgb3Bjb2RlcyAoTUlQUyBJVikuCiAgKi8KIGVudW0gbWFkX2Z1bmMgewotCW1hZGRfb3AgICAgICA9IDB4MDgsIG1zdWJfb3AgICAgICA9IDB4MGEsCi0Jbm1hZGRfb3AgICAgID0gMHgwYywgbm1zdWJfb3AgICAgID0gMHgwZQorCW1hZGRfZnBfb3AgICAgICA9IDB4MDgsIG1zdWJfZnBfb3AgICAgICA9IDB4MGEsCisJbm1hZGRfZnBfb3AgICAgID0gMHgwYywgbm1zdWJfZnBfb3AgICAgID0gMHgwZQogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmggYi9pbmNsdWRlL2FzbS1taXBzL2ludGVycnVwdC5oCmluZGV4IDc3NDM0ODcuLjRiYjljMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pbnRlcnJ1cHQuaApAQCAtMTksNyArMTksMTIgQEAKIAkiCS5zZXQJcHVzaAkJCQkJCVxuIgogCSIJLnNldAlyZW9yZGVyCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJJDEsICQyLCAxCSMgU01UQyAtIGNsZWFyIFRDU3RhdHVzLklYTVQJXG4iCisJIglvcmkJJDEsIDB4NDAwCQkJCQlcbiIKKwkiCXhvcmkJJDEsIDB4NDAwCQkJCQlcbiIKKwkiCW10YzAJJDEsICQyLCAxCQkJCQlcbiIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjIpCiAJIgllaQkJCQkJCQlcbiIKICNlbHNlCiAJIgltZmMwCSQxLCQxMgkJCQkJCVxuIgpAQCAtNjIsNyArNjcsMTIgQEAKIAkiCS5tYWNybwlsb2NhbF9pcnFfZGlzYWJsZVxuIgogCSIJLnNldAlwdXNoCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJJDEsICQyLCAxCQkJCQlcbiIKKwkiCW9yaQkkMSwgMHg0MDAJCQkJCVxuIgorCSIJLnNldAlub3Jlb3JkZXIJCQkJCVxuIgorCSIJbXRjMAkkMSwgJDIsIDEJCQkJCVxuIgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMikKIAkiCWRpCQkJCQkJCVxuIgogI2Vsc2UKIAkiCW1mYzAJJDEsJDEyCQkJCQkJXG4iCkBAIC04OCw3ICs5OCwxMSBAQAogCSIJLm1hY3JvCWxvY2FsX3NhdmVfZmxhZ3MgZmxhZ3MJCQkJXG4iCiAJIgkuc2V0CXB1c2gJCQkJCQlcbiIKIAkiCS5zZXQJcmVvcmRlcgkJCQkJCVxuIgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJXFxmbGFncywgJDIsIDEJCQkJCVxuIgorI2Vsc2UKIAkiCW1mYzAJXFxmbGFncywgJDEyCQkJCQlcbiIKKyNlbmRpZgogCSIJLnNldAlwb3AJCQkJCQlcbiIKIAkiCS5lbmRtCQkJCQkJCVxuIik7CiAKQEAgLTEwMiw3ICsxMTYsMTMgQEAKIAkiCS5zZXQJcHVzaAkJCQkJCVxuIgogCSIJLnNldAlyZW9yZGVyCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJXFxyZXN1bHQsICQyLCAxCQkJCQlcbiIKKwkiCW9yaQkkMSwgXFxyZXN1bHQsIDB4NDAwCQkJCVxuIgorCSIJLnNldAlub3Jlb3JkZXIJCQkJCVxuIgorCSIJbXRjMAkkMSwgJDIsIDEJCQkJCVxuIgorCSIJYW5kaQlcXHJlc3VsdCwgXFxyZXN1bHQsIDB4NDAwCQkJXG4iCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKQogCSIJZGkJXFxyZXN1bHQJCQkJCVxuIgogCSIJYW5kaQlcXHJlc3VsdCwgMQkJCQkJXG4iCiAjZWxzZQpAQCAtMTI4LDcgKzE0OCwxNCBAQAogCSIJLnNldAlwdXNoCQkJCQkJXG4iCiAJIgkuc2V0CW5vcmVvcmRlcgkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKSAmJiBkZWZpbmVkKENPTkZJR19JUlFfQ1BVKQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkibWZjMAkkMSwgJDIsIDEJCQkJCQlcbiIKKwkiYW5kaQlcXGZsYWdzLCAweDQwMAkJCQkJCVxuIgorCSJvcmkJJDEsIDB4NDAwCQkJCQkJXG4iCisJInhvcmkJJDEsIDB4NDAwCQkJCQkJXG4iCisJIm9yCVxcZmxhZ3MsICQxCQkJCQkJXG4iCisJIm10YzAJXFxmbGFncywgJDIsIDEJCQkJCQlcbiIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjIpICYmIGRlZmluZWQoQ09ORklHX0lSUV9DUFUpCiAJLyoKIAkgKiBTbG93LCBidXQgZG9lc24ndCBzdWZmZXIgZnJvbSBhIHJlbGF0aXZseSB1bmxpa2VseSByYWNlCiAJICogY29uZGl0aW9uIHdlJ3JlIGhhdmluZyBzaW5jZSBkYXlzIDEuCkBAIC0xNjcsMTEgKzE5NCwyOSBAQAogCQk6ICJtZW1vcnkiKTsJCQkJCQlcCiB9IHdoaWxlKDApCiAKLSNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQkJXAotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwkJCQkJXAotCSEoZmxhZ3MgJiAxKTsJCQkJCQkJXAotfSkKK3N0YXRpYyBpbmxpbmUgaW50IGlycXNfZGlzYWJsZWQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBTTVRDIG1vZGVsIHVzZXMgVENTdGF0dXMuSVhNVCB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIGEgdGhyZWFkL0NQVQorCSAqLworCXVuc2lnbmVkIGxvbmcgX19yZXN1bHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCS5zZXQJbm9yZW9yZGVyCQkJCQlcbiIKKwkiCW1mYzAJJTAsICQyLCAxCQkJCQlcbiIKKwkiCWFuZGkJJTAsIDB4NDAwCQkJCQlcbiIKKwkiCXNsdAklMCwgJDAsICUwCQkJCQlcbiIKKwkiCS5zZXQJcmVvcmRlcgkJCQkJCVxuIgorCTogIj1yIiAoX19yZXN1bHQpKTsKKworCXJldHVybiBfX3Jlc3VsdDsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKworCXJldHVybiAhKGZsYWdzICYgMSk7CisjZW5kaWYKK30KIAogI2VuZGlmIC8qIF9BU01fSU5URVJSVVBUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCmluZGV4IDhhMzQyY2MuLmRkZTY3N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApAQCAtMTEsNiArMTEsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKwogI2luY2x1ZGUgPGlycS5oPgogCiAjaWZkZWYgQ09ORklHX0k4MjU5CkBAIC0yNiw2ICsyOSwyMyBAQAogCiBleHRlcm4gYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBDbGVhciBpbnRlcnJ1cHQgbWFzayBoYW5kbGluZyAiYmFja3N0b3AiIGlmIGlycV9od21hc2sKKyAqIGVudHJ5IHNvIGluZGljYXRlcy4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGFjaygpIG9yIGVuZCgpCisgKiBmdW5jdGlvbnMgd2lsbCB0YWtlIG92ZXIgcmUtZW5hYmxpbmcgdGhlIGxvdy1sZXZlbCBtYXNrLgorICogT3RoZXJ3aXNlIGl0IHdpbGwgYmUgZG9uZSBvbiByZXR1cm4gZnJvbSBleGNlcHRpb24uCisgKi8KKyNkZWZpbmUgX19ET19JUlFfU01UQ19IT09LKCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChpcnFfaHdtYXNrW2lycV0gJiAweDAwMDBmZjAwKQkJCQlcCisJCXdyaXRlX2MwX3RjY29udGV4dChyZWFkX2MwX3RjY29udGV4dCgpICYJCVwKKwkJICAgICAgICAgICAgICAgICAgIH4oaXJxX2h3bWFza1tpcnFdICYgMHgwMDAwZmYwMCkpOwlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgX19ET19JUlFfU01UQ19IT09LKCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogCiAvKgpAQCAtMzksNiArNTksNyBAQAogI2RlZmluZSBkb19JUlEoaXJxLCByZWdzKQkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaXJxX2VudGVyKCk7CQkJCQkJCVwKKwlfX0RPX0lSUV9TTVRDX0hPT0soKTsJCQkJCQlcCiAJX19kb19JUlEoKGlycSksIChyZWdzKSk7CQkJCQlcCiAJaXJxX2V4aXQoKTsJCQkJCQkJXAogfSB3aGlsZSAoMCkKQEAgLTQ2LDUgKzY3LDE0IEBACiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgYXJjaF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHNwdXJpb3VzX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCitzdHJ1Y3QgaXJxYWN0aW9uOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBpcnFfaHdtYXNrW107CitleHRlcm4gaW50IHNldHVwX2lycV9zbXRjKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKiBuZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaHdtYXNrKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2tzcGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMva3NwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWU3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2tzcGQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9BU01fS1NQRF9ICisjZGVmaW5lIF9BU01fS1NQRF9ICisKK3N0cnVjdCBrc3BkX25vdGlmaWNhdGlvbnMgeworCXZvaWQgKCprc3BkX3NwX2V4aXQpKGludCBzcF9pZCk7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisjaWZkZWYgQ09ORklHX01JUFNfQVBTUF9LU1BECitleHRlcm4gdm9pZCBrc3BkX25vdGlmeShzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zICpub3RpZnkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3BkX25vdGlmeShzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zICpub3RpZnkpCit7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCmluZGV4IDU1MDk3OWEuLmUzMzE1MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCkBAIC0xMDQsNjUgKzEwNCwxMDcgQEAKICNlbmRpZgogCiAvKiBNSVBTIHBvcnQgYW5kIG1lbW9yeS1tYXBwZWQgSS9PIHN0cmluZyBvcGVyYXRpb25zLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9mbHVzaF9wcm9sb2d1ZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzKQorCQlwcmVlbXB0X2Rpc2FibGUoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfZmx1c2hfZXBpbG9ndWUodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykKKwkJcHJlZW1wdF9lbmFibGUoKTsKKyNlbmRpZgorfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMpIHsKIAkJdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgc2l6ZTsKLQkJZm9yICg7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKQotCQkJZmx1c2hfZGNhY2hlX3BhZ2UodmlydF90b19wYWdlKGFkZHIpKTsKKworCQl3aGlsZSAoYWRkciA8IGVuZCkgeworCQkJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKCh2b2lkICopYWRkcik7CisJCQlhZGRyICs9IFBBR0VfU0laRTsKKwkJfQogCX0KIH0KIAorLyoKKyAqIGluc3coKSBhbmQgZ2FuZyBtaWdodCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBzbyB3ZSBjYW4ndAorICogc2VuZCBJUElzIGZvciBmbHVzaGluZyBkdWUgdG8gdGhlIHBvdGVuY2lhbCBvZiBkZWFkbG9ja3MsIHNlZSB0aGUgY29tbWVudAorICogYWJvdmUgc21wX2NhbGxfZnVuY3Rpb24oKSBpbiBhcmNoL21pcHMva2VybmVsL3NtcC5jLiAgV2Ugd29yayBhcm91bmQgdGhlCisgKiBwcm9ibGVtIGJ5IGRpc2FibGluZyBwcmVlbXB0aW9uIHNvIHdlIGtub3cgd2UgYWN0dWFsbHkgcGVyZm9ybSB0aGUgZmx1c2gKKyAqIG9uIHRoZSBwcm9jZXNzb3IgdGhhdCBhY3R1YWxseSBoYXMgdGhlIGxpbmVzIHRvIGJlIGZsdXNoZWQgd2hpY2ggaG9wZWZ1bGx5CisgKiBpcyBldmVuIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgYW55d2F5LgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsCiAJdW5zaWduZWQgaW50IGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJaW5zdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CisJX19pZGVfZmx1c2hfcHJvbG9ndWUoKTsKIAlpbnNsKHBvcnQsIGFkZHIsIGNvdW50KTsKIAlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYWRkciwgY291bnQgKiA0KTsKKwlfX2lkZV9mbHVzaF9lcGlsb2d1ZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLAogCXVuc2lnbmVkIGxvbmcgY291bnQpCiB7CisJX19pZGVfZmx1c2hfcHJvbG9ndWUoKTsKIAlvdXRzdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwKIAl1bnNpZ25lZCBsb25nIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJb3V0c2wocG9ydCwgYWRkciwgY291bnQpOwogCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylhZGRyLCBjb3VudCAqIDQpOworCV9faWRlX2ZsdXNoX2VwaWxvZ3VlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9tbV9pbnN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJcmVhZHN3KHBvcnQsIGFkZHIsIGNvdW50KTsKIAlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYWRkciwgY291bnQgKiAyKTsKKwlfX2lkZV9mbHVzaF9lcGlsb2d1ZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfbW1faW5zbCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKKwlfX2lkZV9mbHVzaF9wcm9sb2d1ZSgpOwogCXJlYWRzbChwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogNCk7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX21tX291dHN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJd3JpdGVzdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX21tX291dHNsKHZvaWQgX19pb21lbSAqIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKKwlfX2lkZV9mbHVzaF9wcm9sb2d1ZSgpOwogCXdyaXRlc2wocG9ydCwgYWRkciwgY291bnQpOwogCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylhZGRyLCBjb3VudCAqIDQpOworCV9faWRlX2ZsdXNoX2VwaWxvZ3VlKCk7CiB9CiAKIC8qIGlkZV9pbnN3IGNhbGxzIGluc3csIG5vdCBfX2lkZV9pbnN3LiAgV2h5PyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWptcjM5MjcvZHMxNzQyLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaAppbmRleCBjZmY2MTkyLi44YThmZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaApAQCAtMywxNCArMywxNCBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDA2IGJ5IFJhbGYgQmFlY2hsZQogICovCiAjaWZuZGVmIF9fQVNNX01BQ0hfSk1SMzkyN19EUzE3NDJfSAogI2RlZmluZSBfX0FTTV9NQUNIX0pNUjM5MjdfRFMxNzQyX0gKIAogI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2ptcjM5MjcuaD4KIAotI2RlZmluZSBydGNfcmVhZChyZWcpCQkoam1yMzkyN19udnJhbV9pbihhZGRyKSkKKyNkZWZpbmUgcnRjX3JlYWQocmVnKQkJKGptcjM5MjdfbnZyYW1faW4ocmVnKSkKICNkZWZpbmUgcnRjX3dyaXRlKGRhdGEsIHJlZykJKGptcjM5MjdfbnZyYW1fb3V0KChkYXRhKSwocmVnKSkpCiAKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0pNUjM5MjdfRFMxNzQyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNWVmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9NSVBTX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NSVBTX1BBUkFNX0gKKworI2RlZmluZSBIWgkJMTAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01JUFNfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYXJ2ZWxsLmggYi9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaAppbmRleCA5MjI1YjMzLi42YmIyMTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaApAQCAtNTMsNCArNTMsNiBAQAogCXVuc2lnbmVkIGxvbmcgICBjb25maWdfdnJlZzsKIH07CiAKK2V4dGVybiB2b2lkIGxsX212NjQzNDBfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogI2VuZGlmCS8qIF9fQVNNX01JUFNfTUFSVkVMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmgKaW5kZXggMDk5ODE1MS4uYThhZTEyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXMuaApAQCAtMzMsMTMgKzMzLDI5IEBACiAjZGVmaW5lIEFUTEFTX1JUQ19BRFJfUkVHICAgICAgIDB4MWYwMDA4MDAKICNkZWZpbmUgQVRMQVNfUlRDX0RBVF9SRUcgICAgICAgMHgxZjAwMDgwOAogCi0KIC8qCiAgKiBBdGxhcyBpbnRlcnJ1cHQgY29udHJvbGxlciByZWdpc3RlciBiYXNlLgogICovCiAjZGVmaW5lIEFUTEFTX0lDVFJMX1JFR1NfQkFTRSAgIDB4MWYwMDAwMDAKIAogLyoKKyAqIEF0bGFzIHJlZ2lzdGVycyBhcmUgbWVtb3J5IG1hcHBlZCBvbiA2NC1iaXQgYWxpZ25lZCBib3VuZGFyaWVzIGFuZAorICogb25seSB3b3JkIGFjY2VzcyBhcmUgYWxsb3dlZC4KKyAqLworc3RydWN0IGF0bGFzX2ljdHJsX3JlZ3MgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRyYXc7CisJaW50IGR1bW15MTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50c2V0ZW47CisJaW50IGR1bW15MjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50cnN0ZW47CisJaW50IGR1bW15MzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50ZW5hYmxlOworCWludCBkdW1teTQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHN0YXR1czsKKwlpbnQgZHVtbXk1OworfTsKKworLyoKICAqIEF0bGFzIFVBUlQgcmVnaXN0ZXIgYmFzZS4KICAqLwogI2RlZmluZSBBVExBU19VQVJUX1JFR1NfQkFTRSAgICAweDFmMDAwOTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmgKaW5kZXggYmJhMzVjMS4uZmQ3ZWJjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhc2ludC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXNpbnQuaApAQCAtNjIsMjMgKzYyLDQgQEAKICNkZWZpbmUgQVRMQVNJTlRfUkVTMzEJCShBVExBU0lOVF9CQVNFKzMxKQogI2RlZmluZSBBVExBU0lOVF9FTkQJCShBVExBU0lOVF9CQVNFKzMxKQogCi0vKgotICogQXRsYXMgcmVnaXN0ZXJzIGFyZSBtZW1vcnkgbWFwcGVkIG9uIDY0LWJpdCBhbGlnbmVkIGJvdW5kYXJpZXMgYW5kCi0gKiBvbmx5IHdvcmQgYWNjZXNzIGFyZSBhbGxvd2VkLgotICovCi1zdHJ1Y3QgYXRsYXNfaWN0cmxfcmVncyB7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRyYXc7Ci0gICAgICAgIGludCBkdW1teTE7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRzZXRlbjsKLSAgICAgICAgaW50IGR1bW15MjsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHJzdGVuOwotICAgICAgICBpbnQgZHVtbXkzOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50ZW5hYmxlOwotICAgICAgICBpbnQgZHVtbXk0OwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50c3RhdHVzOwotICAgICAgICBpbnQgZHVtbXk1OwotfTsKLQotZXh0ZXJuIHZvaWQgYXRsYXNpbnRfaW5pdCh2b2lkKTsKLQogI2VuZGlmIC8qICEoX01JUFNfQVRMQVNJTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKaW5kZXggMjViNmZmYy4uZmE4YjkxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKQEAgLTY3LDYgKzY3LDcgQEAKICNkZWZpbmUgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EyICAgICA3CiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBUjIgICAgOAogI2RlZmluZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTMgICAgIDkKKyNkZWZpbmUgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFXzI0SyAgICAgICAxMAogCiAvKioqKiBBcnRpZmljaWFsIGNvcmlkIGRlZmluZXMgKioqKi8KIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHNfbXQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc19tdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWEzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHNfbXQuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogRGVmaW5pdGlvbnMgYW5kIGRlY2FscmF0aW9ucyBmb3IgTUlQUyBNVCBzdXBwb3J0CisgKiB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiBTTVRDLCBWU01QLCBhbmQvb3IgQVAvU1AKKyAqIGtlcm5lbCBtb2RlbHMuCisgKi8KKyNpZm5kZWYgX19BU01fTUlQU19NVF9ICisjZGVmaW5lIF9fQVNNX01JUFNfTVRfSAorCitleHRlcm4gY3B1bWFza190IG10X2ZwdV9jcHVtYXNrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXRfZnBlbXVsX3RocmVzaG9sZDsKKworZXh0ZXJuIHZvaWQgbWlwc19tdF9yZWdkdW1wKHVuc2lnbmVkIGxvbmcgcHJldmlvdXNfbXZwY29udHJvbF92YWx1ZSk7CitleHRlcm4gdm9pZCBtaXBzX210X3NldF9jcHVvcHRpb25zKHZvaWQpOworCisjZW5kaWYgLyogX19BU01fTUlQU19NVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHNtdHJlZ3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc210cmVncy5oCmluZGV4IGE2NjljMDcuLmY2MzdjZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc210cmVncy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc210cmVncy5oCkBAIC0xNjUsNyArMTY1LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotZXh0ZXJuIHZvaWQgbWlwc19tdF9yZWdkdW1wKHZvaWQpOworZXh0ZXJuIHZvaWQgbWlwc19tdF9yZWdkdW1wKHVuc2lnbmVkIGxvbmcgcHJldmlvdXNfbXZwY29udHJvbF92YWx1ZSk7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGR2cGUodm9pZCkKIHsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSIJLnNldAlub3Jlb3JkZXIJCQkJCVxuIgogCSIJLnNldAltaXBzMzJyMgkJCQkJXG4iCi0JIgllbXQJCQkJCQkJXG4iCisJIgkud29yZAkweDQxNjAwYmUxCQkJIyBlbXQJCVxuIgogCSIJZWhiCQkJCQkJCVxuIgogCSIJLnNldAltaXBzMAkJCQkJCVxuIgogCSIJLnNldAlyZW9yZGVyIik7CkBAIC0yODIsOCArMjgyLDExIEBACiAJCQkJCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAogCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAogCSIJLnNldAltaXBzMzJyMgkJCQlcbiIJXAotCSIJbWZ0Z3ByCSUwLCIgI3J0ICIJCQkJXG4iCVwKKwkiCSMgbWZ0Z3ByICQxLCIgI3J0ICIJCQkJXG4iCVwKKwkiCS53b3JkCTB4NDEwMDA4MjAgfCAoIiAjcnQgIiA8PCAxNikJCVxuIglcCisJIgltb3ZlCSUwLCAkMQkJCQkJXG4iCVwKIAkiCS5zZXQJcG9wCQkJCQlcbiIJXAogCTogIj1yIiAoX19yZXMpKTsJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC0yOTUsOSArMjk4LDcgQEAKIAl1bnNpZ25lZCBsb25nIF9fcmVzOwkJCQkJCVwKIAkJCQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JIi5zZXQgbm9hdFxuXHQiCQkJCQkJCVwKLQkibWZ0clx0JTAsICIgI3J0ICIsICIgI3UgIiwgIiAjc2VsICJcblx0IgkJCVwKLQkiLnNldCBhdFxuXHQiCQkJCQkJCVwKKwkiCW1mdHIJJTAsICIgI3J0ICIsICIgI3UgIiwgIiAjc2VsICIJCVxuIglcCiAJOiAiPXIiIChfX3JlcykpOwkJCQkJCVwKIAkJCQkJCQkJCVwKIAlfX3JlczsJCQkJCQkJCVwKQEAgLTM2NCw2ICszNjUsOSBAQAogI2RlZmluZSByZWFkX3ZwZV9jMF9lYmFzZSgpCQltZnRjMCgxNSwxKQogI2RlZmluZSB3cml0ZV92cGVfYzBfZWJhc2UodmFsKQkJbXR0YzAoMTUsIDEsIHZhbCkKICNkZWZpbmUgd3JpdGVfdnBlX2MwX2NvbXBhcmUodmFsKQltdHRjMCgxMSwgMCwgdmFsKQorI2RlZmluZSByZWFkX3ZwZV9jMF9iYWR2YWRkcigpCQltZnRjMCg4LCAwKQorI2RlZmluZSByZWFkX3ZwZV9jMF9lcGMoKQkJbWZ0YzAoMTQsIDApCisjZGVmaW5lIHdyaXRlX3ZwZV9jMF9lcGModmFsKQkJbXR0YzAoMTQsIDAsIHZhbCkKIAogCiAvKiBUQyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCmluZGV4IDAzNWJhMGEuLjVhZjc1MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKQEAgLTI5MSw3ICsyOTEsNyBAQAogI2RlZmluZSBTVDBfREwJCQkoX1VMQ0FTVF8oMSkgPDwgMjQpCiAKIC8qCi0gKiBFbmFibGUgdGhlIE1JUFMgRFNQIEFTRQorICogRW5hYmxlIHRoZSBNSVBTIE1ETVggYW5kIERTUCBBU0VzCiAgKi8KICNkZWZpbmUgU1QwX01YCQkJMHgwMTAwMDAwMAogCkBAIC04MzYsNiArODM2LDkgQEAKICNkZWZpbmUgcmVhZF9jMF9jYWNoZSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDcsIDApCS8qIFRYMzl4eCAqLwogI2RlZmluZSB3cml0ZV9jMF9jYWNoZSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDcsIDAsIHZhbCkKIAorI2RlZmluZSByZWFkX2MwX2JhZHZhZGRyKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQ4LCAwKQorI2RlZmluZSB3cml0ZV9jMF9iYWR2YWRkcih2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDgsIDAsIHZhbCkKKwogI2RlZmluZSByZWFkX2MwX2NvdW50KCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkOSwgMCkKICNkZWZpbmUgd3JpdGVfYzBfY291bnQodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCAwLCB2YWwpCiAKQEAgLTg1OCw3ICs4NjEsMTkgQEAKICNkZWZpbmUgd3JpdGVfYzBfY29tcGFyZTModmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgNywgdmFsKQogCiAjZGVmaW5lIHJlYWRfYzBfc3RhdHVzKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMiwgMCkKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjZGVmaW5lIHdyaXRlX2MwX3N0YXR1cyh2YWwpCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMiwgMCwgdmFsKTsJCQkJXAorCV9fZWhiKCk7CQkJCQkJCVwKK30gd2hpbGUgKDApCisjZWxzZQorLyoKKyAqIExlZ2FjeSBub24tU01UQyBjb2RlLCB3aGljaCBtYXkgYmUgaGF6YXJkb3VzCisgKiBidXQgd2hpY2ggbWlnaHQgbm90IHN1cHBvcnQgRUhCCisgKi8KICNkZWZpbmUgd3JpdGVfYzBfc3RhdHVzKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTIsIDAsIHZhbCkKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNkZWZpbmUgcmVhZF9jMF9jYXVzZSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDEzLCAwKQogI2RlZmluZSB3cml0ZV9jMF9jYXVzZSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDEzLCAwLCB2YWwpCkBAIC0xMDAxLDYgKzEwMTYsOSBAQAogI2RlZmluZSByZWFkX2MwX3RhZ2xvKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjgsIDApCiAjZGVmaW5lIHdyaXRlX2MwX3RhZ2xvKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjgsIDAsIHZhbCkKIAorI2RlZmluZSByZWFkX2MwX2R0YWdsbygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjgsIDIpCisjZGVmaW5lIHdyaXRlX2MwX2R0YWdsbyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI4LCAyLCB2YWwpCisKICNkZWZpbmUgcmVhZF9jMF90YWdoaSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI5LCAwKQogI2RlZmluZSB3cml0ZV9jMF90YWdoaSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI5LCAwLCB2YWwpCiAKQEAgLTEzNTQsNiArMTM3MiwxMSBAQAogLyoKICAqIE1hbmlwdWxhdGUgYml0cyBpbiBhIGMwIHJlZ2lzdGVyLgogICovCisjaWZuZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBTTVRDIExpbnV4IHJlcXVpcmVzIHNodXR0aW5nLWRvd24gbWljcm90aHJlYWQgc2NoZWR1bGluZworICogZHVyaW5nIENQMCByZWdpc3RlciByZWFkLW1vZGlmeS13cml0ZSBzZXF1ZW5jZXMuCisgKi8KICNkZWZpbmUgX19CVUlMRF9TRVRfQzAobmFtZSkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCiBzZXRfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBzZXQpCQkJCQlcCkBAIC0xMzkyLDYgKzE0MTUsMTE5IEBACiAJcmV0dXJuIHJlczsJCQkJCQlcCiB9CiAKKyNlbHNlIC8qIFNNVEMgdmVyc2lvbnMgdGhhdCBtYW5hZ2UgTVQgc2NoZWR1bGluZyAqLworCisjaW5jbHVkZSA8YXNtL2ludGVycnVwdC5oPgorCisvKgorICogVGhpcyBpcyBhIGR1cGxpY2F0ZSBvZiBkbXQoKSBpbiBtaXBzbXRyZWdzLmggdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAorICogaGVhZGVyIGZpbGUgcmVjdXJzaW9uLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2RtdCh2b2lkKQoreworCWludCByZXM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCS5zZXQJcHVzaAkJCQkJCVxuIgorCSIJLnNldAltaXBzMzJyMgkJCQkJXG4iCisJIgkuc2V0CW5vYXQJCQkJCQlcbiIKKwkiCS53b3JkCTB4NDE2MTBCQzEJCQkjIGRtdCAkMQlcbiIKKwkiCWVoYgkJCQkJCQlcbiIKKwkiCW1vdmUJJTAsICQxCQkJCQkJXG4iCisJIgkuc2V0CXBvcAkJCQkJCVxuIgorCTogIj1yIiAocmVzKSk7CisKKwlpbnN0cnVjdGlvbl9oYXphcmQoKTsKKworCXJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgX19WUEVDT05UUk9MX1RFX1NISUZUCTE1CisjZGVmaW5lIF9fVlBFQ09OVFJPTF9URQkJKDFVTCA8PCBfX1ZQRUNPTlRST0xfVEVfU0hJRlQpCisKKyNkZWZpbmUgX19FTVRfRU5BQkxFCQlfX1ZQRUNPTlRST0xfVEUKKworc3RhdGljIGlubGluZSB2b2lkIF9fZW10KHVuc2lnbmVkIGludCBwcmV2aW91cykKK3sKKwlpZiAoKHByZXZpb3VzICYgX19FTVRfRU5BQkxFKSkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAlub3Jlb3JkZXIJCQkJXG4iCisJCSIJLnNldAltaXBzMzJyMgkJCQlcbiIKKwkJIgkud29yZAkweDQxNjAwYmUxCQkjIGVtdAkJXG4iCisJCSIJZWhiCQkJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19laGIodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWVoYgkJCQkJCQlcbiIpOworfQorCisvKgorICogTm90ZSB0aGF0IGxvY2FsX2lycV9zYXZlL3Jlc3RvcmUgYWZmZWN0IFRDLXNwZWNpZmljIElYTVQgc3RhdGUsCisgKiBub3QgU3RhdHVzLklFIGFzIGluIG5vbi1TTVRDIGtlcm5lbC4KKyAqLworCisjZGVmaW5lIF9fQlVJTERfU0VUX0MwKG5hbWUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorc2V0X2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgc2V0KQkJCQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJb210ID0gX19kbXQoKTsJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgfD0gc2V0OwkJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwlfX2VtdChvbXQpOwkJCQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCVwKKwkJCQkJCQkJXAorCXJldHVybiByZXM7CQkJCQkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorY2xlYXJfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjbGVhcikJCQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJb210ID0gX19kbXQoKTsJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgJj0gfmNsZWFyOwkJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwlfX2VtdChvbXQpOwkJCQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCVwKKwkJCQkJCQkJXAorCXJldHVybiByZXM7CQkJCQkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorY2hhbmdlX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgbmV3KQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJCQkJCQkJCVwKKwlvbXQgPSBfX2RtdCgpOwkJCQkJCVwKKwlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAorCXJlcyAmPSB+Y2hhbmdlOwkJCQkJCVwKKwlyZXMgfD0gKG5ldyAmIGNoYW5nZSk7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJX19lbXQob210KTsJCQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcmVzOwkJCQkJCVwKK30KKyNlbmRpZgorCiBfX0JVSUxEX1NFVF9DMChzdGF0dXMpCiBfX0JVSUxEX1NFVF9DMChjYXVzZSkKIF9fQlVJTERfU0VUX0MwKGNvbmZpZykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaAppbmRleCA2MWNmMjI1Li42ZTA5ZjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCkBAIC0xNyw2ICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgorI2luY2x1ZGUgPGFzbS9zbXRjLmg+CisjZW5kaWYgLyogU01UQyAqLwogCiAvKgogICogRm9yIHRoZSBmYXN0IHRsYiBtaXNzIGhhbmRsZXJzLCB3ZSBrZWVwIGEgcGVyIGNwdSBhcnJheSBvZiBwb2ludGVycwpAQCAtNTQsNiArNTgsMTQgQEAKICNkZWZpbmUgQVNJRF9JTkMJMHgxCiAjZGVmaW5lIEFTSURfTUFTSwkweGZmZgogCisvKiBTTVRDLzM0SyBkZWJ1ZyBoYWNrIC0gYnV0IG1heWJlIHdlJ2xsIGtlZXAgaXQgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01UQykKKworI2RlZmluZSBBU0lEX0lOQwkweDEKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNtdGNfYXNpZF9tYXNrOworI2RlZmluZSBBU0lEX01BU0sJKHNtdGNfYXNpZF9tYXNrKQorI2RlZmluZQlIV19BU0lEX01BU0sJMHhmZgorLyogRW5kIFNNVEMvMzRLIGRlYnVnIGhhY2sgKi8KICNlbHNlIC8qIEZJWE1FOiBub3QgY29ycmVjdCBmb3IgUjYwMDAgKi8KIAogI2RlZmluZSBBU0lEX0lOQwkweDEKQEAgLTc2LDYgKzg4LDggQEAKICNkZWZpbmUgQVNJRF9WRVJTSU9OX01BU0sgICgodW5zaWduZWQgbG9uZyl+KEFTSURfTUFTS3woQVNJRF9NQVNLLTEpKSkKICNkZWZpbmUgQVNJRF9GSVJTVF9WRVJTSU9OICgodW5zaWduZWQgbG9uZykofkFTSURfVkVSU0lPTl9NQVNLKSArIDEpCiAKKyNpZm5kZWYgQ09ORklHX01JUFNfTVRfU01UQworLyogTm9ybWFsLCBjbGFzc2ljIE1JUFMgZ2V0X25ld19tbXVfY29udGV4dCAqLwogc3RhdGljIGlubGluZSB2b2lkCiBnZXRfbmV3X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGNwdSkKIHsKQEAgLTkxLDYgKzEwNSwxMiBAQAogCWNwdV9jb250ZXh0KGNwdSwgbW0pID0gYXNpZF9jYWNoZShjcHUpID0gYXNpZDsKIH0KIAorI2Vsc2UgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCisjZGVmaW5lIGdldF9uZXdfbW11X2NvbnRleHQobW0sY3B1KSBzbXRjX2dldF9uZXdfbW11X2NvbnRleHQoKG1tKSwoY3B1KSkKKworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogLyoKICAqIEluaXRpYWxpemUgdGhlIGNvbnRleHQgcmVsYXRlZCBpbmZvIGZvciBhIG5ldyBtbV9zdHJ1Y3QKICAqIGluc3RhbmNlLgpAQCAtMTExLDE0ICsxMzEsNDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJdW5zaWduZWQgbG9uZyBvbGRhc2lkOworCXVuc2lnbmVkIGxvbmcgbXRmbGFnczsKKwlpbnQgbXl0bGIgPSAoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpID8gMCA6IGNwdV9kYXRhW2NwdV0udnBlX2lkOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwltdGZsYWdzID0gZHZwZSgpOworI2Vsc2UgLyogTm90IFNNVEMgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJLyogQ2hlY2sgaWYgb3VyIEFTSUQgaXMgb2YgYW4gb2xkZXIgdmVyc2lvbiBhbmQgdGh1cyBpbnZhbGlkICovCiAJaWYgKChjcHVfY29udGV4dChjcHUsIG5leHQpIF4gYXNpZF9jYWNoZShjcHUpKSAmIEFTSURfVkVSU0lPTl9NQVNLKQogCQlnZXRfbmV3X21tdV9jb250ZXh0KG5leHQsIGNwdSk7Ci0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBJZiB0aGUgRW50cnlIaSBBU0lEIGJlaW5nIHJlcGxhY2VkIGhhcHBlbnMgdG8gYmUKKwkgKiB0aGUgdmFsdWUgZmxhZ2dlZCBhdCBBU0lEIHJlY3ljbGluZyB0aW1lIGFzIGhhdmluZworCSAqIGFuIGV4dGVuZGVkIGxpZmUsIGNsZWFyIHRoZSBiaXQgc2hvd2luZyBpdCBiZWluZworCSAqIGluIHVzZSBieSB0aGlzICJDUFUiLCBhbmQgaWYgdGhhdCdzIHRoZSBsYXN0IGJpdCwKKwkgKiBmcmVlIHVwIHRoZSBBU0lEIHZhbHVlIGZvciB1c2UgYW5kIGZsdXNoIGFueSBvbGQKKwkgKiBpbnN0YW5jZXMgb2YgaXQgZnJvbSB0aGUgVExCLgorCSAqLworCW9sZGFzaWQgPSAocmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0spOworCWlmKHNtdGNfbGl2ZV9hc2lkW215dGxiXVtvbGRhc2lkXSkgeworCQlzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gJj0gfigweDEgPDwgY3B1KTsKKwkJaWYoc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdID09IDApCisJCQlzbXRjX2ZsdXNoX3RsYl9hc2lkKG9sZGFzaWQpOworCX0KKwkvKgorCSAqIFRyZWFkIHNvZnRseSBvbiBFbnRyeUhpLCBhbmQgc28gbG9uZyBhcyB3ZSBzdXBwb3J0CisJICogaGF2aW5nIEFTSURfTUFTSyBzbWFsbGVyIHRoYW4gdGhlIGhhcmR3YXJlIG1heGltdW0sCisJICogbWFrZSBzdXJlIG5vICJzb2Z0IiBiaXRzIGJlY29tZSAiaGFyZCIuLi4KKwkgKi8KKwl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spCisJCQl8IChjcHVfY29udGV4dChjcHUsIG5leHQpICYgQVNJRF9NQVNLKSk7CisJZWhiKCk7IC8qIE1ha2Ugc3VyZSBpdCBwcm9wYWdhdGVzIHRvIFRDU3RhdHVzICovCisJZXZwZShtdGZsYWdzKTsKKyNlbHNlCiAJd3JpdGVfYzBfZW50cnloaShjcHVfY29udGV4dChjcHUsIG5leHQpKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCiAJLyoKQEAgLTE1MSwxMiArMjAzLDM0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXVuc2lnbmVkIGxvbmcgb2xkYXNpZDsKKwl1bnNpZ25lZCBsb25nIG10ZmxhZ3M7CisJaW50IG15dGxiID0gKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSA/IDAgOiBjcHVfZGF0YVtjcHVdLnZwZV9pZDsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAkvKiBVbmNvbmRpdGlvbmFsbHkgZ2V0IGEgbmV3IEFTSUQuICAqLwogCWdldF9uZXdfbW11X2NvbnRleHQobmV4dCwgY3B1KTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKiBTZWUgY29tbWVudHMgZm9yIHNpbWlsYXIgY29kZSBhYm92ZSAqLworCW10ZmxhZ3MgPSBkdnBlKCk7CisJb2xkYXNpZCA9IHJlYWRfYzBfZW50cnloaSgpICYgQVNJRF9NQVNLOworCWlmKHNtdGNfbGl2ZV9hc2lkW215dGxiXVtvbGRhc2lkXSkgeworCQlzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gJj0gfigweDEgPDwgY3B1KTsKKyAgICAgICAJCWlmKHNtdGNfbGl2ZV9hc2lkW215dGxiXVtvbGRhc2lkXSA9PSAwKQorICAgICAgICAgICAgICAgCQkgc210Y19mbHVzaF90bGJfYXNpZChvbGRhc2lkKTsKKwl9CisJLyogU2VlIGNvbW1lbnRzIGZvciBzaW1pbGFyIGNvZGUgYWJvdmUgKi8KKwl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spIHwKKwkgICAgICAgICAgICAgICAgIChjcHVfY29udGV4dChjcHUsIG5leHQpICYgQVNJRF9NQVNLKSk7CisJZWhiKCk7IC8qIE1ha2Ugc3VyZSBpdCBwcm9wYWdhdGVzIHRvIFRDU3RhdHVzICovCisJZXZwZShtdGZsYWdzKTsKKyNlbHNlCiAJd3JpdGVfYzBfZW50cnloaShjcHVfY29udGV4dChjcHUsIG5leHQpKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCiAJLyogbWFyayBtbXUgb3duZXJzaGlwIGNoYW5nZSAqLwpAQCAtMTc0LDE3ICsyNDgsNDkgQEAKIGRyb3BfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl1bnNpZ25lZCBsb25nIG9sZGFzaWQ7CisJLyogQ2FuJ3QgdXNlIHNwaW5sb2NrIGJlY2F1c2UgY2FsbGVkIGZyb20gVExCIGZsdXNoIHdpdGhpbiBEVlBFICovCisJdW5zaWduZWQgaW50IHByZXZ2cGU7CisJaW50IG15dGxiID0gKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSA/IDAgOiBjcHVfZGF0YVtjcHVdLnZwZV9pZDsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAlpZiAoY3B1X2lzc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKSkgIHsKIAkJZ2V0X25ld19tbXVfY29udGV4dChtbSwgY3B1KTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS8qIFNlZSBjb21tZW50cyBmb3Igc2ltaWxhciBjb2RlIGFib3ZlICovCisJCXByZXZ2cGUgPSBkdnBlKCk7CisJCW9sZGFzaWQgPSAocmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0spOworCQlpZihzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0pIHsKKwkJICBzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gJj0gfigweDEgPDwgY3B1KTsKKwkJICBpZihzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gPT0gMCkKKwkJCXNtdGNfZmx1c2hfdGxiX2FzaWQob2xkYXNpZCk7CisJCX0KKwkJLyogU2VlIGNvbW1lbnRzIGZvciBzaW1pbGFyIGNvZGUgYWJvdmUgKi8KKwkJd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKQorCQkJCXwgY3B1X2FzaWQoY3B1LCBtbSkpOworCQllaGIoKTsgLyogTWFrZSBzdXJlIGl0IHByb3BhZ2F0ZXMgdG8gVENTdGF0dXMgKi8KKwkJZXZwZShwcmV2dnBlKTsKKyNlbHNlIC8qIG5vdCBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2FzaWQoY3B1LCBtbSkpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAl9IGVsc2UgewogCQkvKiB3aWxsIGdldCBhIG5ldyBjb250ZXh0IG5leHQgdGltZSAqLworI2lmbmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCiAJCWNwdV9jb250ZXh0KGNwdSwgbW0pID0gMDsKLQl9CisjZWxzZSAvKiBTTVRDICovCisJCWludCBpOwogCisJCS8qIFNNVEMgc2hhcmVzIHRoZSBUTEIgKGFuZCBBU0lEcykgYWNyb3NzIFZQRXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bV9vbmxpbmVfY3B1cygpOyBpKyspIHsKKwkgICAgCSAgICBpZigoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpCisJICAgIAkgICAgfHwgKGNwdV9kYXRhW2ldLnZwZV9pZCA9PSBjcHVfZGF0YVtjcHVdLnZwZV9pZCkpCisJCQljcHVfY29udGV4dChpLCBtbSkgPSAwOworCQl9CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwMGMxNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAotI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICi0KLS8qIE1heCAxMjggTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJNgotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAppbmRleCBhMWVhYjEzLi40MDM1ZWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaApAQCAtMTM5LDkgKzEzOSwxMSBAQAogCiAjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pCV9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKIAorI2lmbmRlZiBDT05GSUdfU1BBUlNFTUVNCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYKKyNlbmRpZgogCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS0zMi5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKaW5kZXggNGQ2YmM0NS4uMDg3YzIwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKQEAgLTE3Nyw0OCArMTc3LDY3IEBACiAJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEwKSB8ICgob2Zmc2V0KSA8PCAxNSkgfSkKIAogLyoKLSAqIEJpdHMgMCwgMSwgMiwgOSBhbmQgMTAgYXJlIHRha2VuLCBzcGxpdCB1cCB0aGUgMjcgYml0cyBvZiBvZmZzZXQKLSAqIGludG8gdGhpcyByYW5nZToKKyAqIEJpdHMgMCwgNCwgOCwgYW5kIDkgYXJlIHRha2VuLCBzcGxpdCB1cCAyOCBiaXRzIG9mIG9mZnNldCBpbnRvIHRoaXMgcmFuZ2U6CiAgKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjcKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjgKIAotI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkgXAotCSgoKChfcHRlKS5wdGUgPj4gMykgJiAweDNmICkgKyAoKChfcHRlKS5wdGUgPj4gMTEpIDw8IDggKSkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpCSgoKChfcHRlKS5wdGUgPj4gMSApICYgMHgwNykgfCBcCisJCQkJICgoKF9wdGUpLnB0ZSA+PiAyICkgJiAweDM4KSB8IFwKKwkJCQkgKCgoX3B0ZSkucHRlID4+IDEwKSA8PCAgNiApKQogCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIFwKLQkoKHB0ZV90KSB7ICgoKG9mZikgJiAweDNmKSA8PCAzKSArICgoKG9mZikgPj4gOCkgPDwgMTEpICsgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoKHB0ZV90KSB7ICgoKG9mZikgJiAweDA3KSA8PCAxICkgfCBcCisJCQkJCSAgICgoKG9mZikgJiAweDM4KSA8PCAyICkgfCBcCisJCQkJCSAgICgoKG9mZikgPj4gIDYgKSA8PCAxMCkgfCBcCisJCQkJCSAgIF9QQUdFX0ZJTEUgfSkKIAogI2Vsc2UKIAogLyogU3dhcCBlbnRyaWVzIG11c3QgaGF2ZSBWQUxJRCBhbmQgR0xPQkFMIGJpdHMgY2xlYXJlZC4gKi8KLSNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCgoeCkudmFsID4+IDgpICYgMHgxZikKLSNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiAxMykKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCSgoKHgpLnZhbCA+PiAyKSAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KSAJICgoeCkudmFsID4+IDcpCiAjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsb2Zmc2V0KQlcCi0JCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCA4KSB8ICgob2Zmc2V0KSA8PCAxMykgfSkKKwkJKChzd3BfZW50cnlfdCkgIHsgKCh0eXBlKSA8PCAyKSB8ICgob2Zmc2V0KSA8PCA3KSB9KQorI2Vsc2UKKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCgoeCkudmFsID4+IDgpICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpIAkgKCh4KS52YWwgPj4gMTMpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsb2Zmc2V0KQlcCisJCSgoc3dwX2VudHJ5X3QpICB7ICgodHlwZSkgPDwgOCkgfCAoKG9mZnNldCkgPDwgMTMpIH0pCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKQogLyoKLSAqIEJpdHMgMCwgMSwgMiwgNyBhbmQgOCBhcmUgdGFrZW4sIHNwbGl0IHVwIHRoZSAyNyBiaXRzIG9mIG9mZnNldAotICogaW50byB0aGlzIHJhbmdlOgorICogQml0cyAwIGFuZCAxIG9mIHB0ZV9oaWdoIGFyZSB0YWtlbiwgdXNlIHRoZSByZXN0IGZvciB0aGUgcGFnZSBvZmZzZXQuLi4KICAqLwotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyNworI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkzMAogCi0jaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IxKQotCS8qIGZpeG1lICovCi0jZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKSAoKChfcHRlKS5wdGVfaGlnaCA+PiA2KSArICgoX3B0ZSkucHRlX2hpZ2ggJiAweDNmKSkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgXAotCSgocHRlX3QpeygoKG9mZikgJiAweDNmKSArICgob2ZmKSA8PCA2KSArIF9QQUdFX0ZJTEUpfSkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpCSgoX3B0ZSkucHRlX2hpZ2ggPj4gMikKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgCSgocHRlX3QpIHsgX1BBR0VfRklMRSwgKG9mZikgPDwgMiB9KQogCiAjZWxzZQotI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkgXAotCSgoKChfcHRlKS5wdGUgPj4gMykgJiAweDFmICkgKyAoKChfcHRlKS5wdGUgPj4gOSkgPDwgNiApKQorLyoKKyAqIEJpdHMgMCwgNCwgNiwgYW5kIDcgYXJlIHRha2VuLCBzcGxpdCB1cCAyOCBiaXRzIG9mIG9mZnNldCBpbnRvIHRoaXMgcmFuZ2U6CisgKi8KKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjgKIAotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBcCi0JKChwdGVfdCkgeyAoKChvZmYpICYgMHgxZikgPDwgMykgKyAoKChvZmYpID4+IDYpIDw8IDkpICsgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkJKCgoKF9wdGUpLnB0ZSA+PiAxKSAmIDB4NykgfCBcCisJCQkJICgoKF9wdGUpLnB0ZSA+PiAyKSAmIDB4OCkgfCBcCisJCQkJICgoKF9wdGUpLnB0ZSA+PiA4KSA8PCAgNCkpCisKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeyAoKChvZmYpICYgMHg3KSA8PCAxKSB8IFwKKwkJCQkJICAgKCgob2ZmKSAmIDB4OCkgPDwgMikgfCBcCisJCQkJCSAgICgoKG9mZikgPj4gIDQpIDw8IDgpIHwgXAorCQkJCQkgICBfUEFHRV9GSUxFIH0pCiAjZW5kaWYKIAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpICgoc3dwX2VudHJ5X3QpIHsgKHB0ZSkucHRlX2hpZ2ggfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgMCwgKHgpLnZhbCB9KQorI2Vsc2UKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1BHVEFCTEVfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaAppbmRleCA4MjE2NmIyLi4yZmFmNWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaApAQCAtMjI0LDE1ICsyMjQsMTIgQEAKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCiAvKgotICogQml0cyAwLCAxLCAyLCA3IGFuZCA4IGFyZSB0YWtlbiwgc3BsaXQgdXAgdGhlIDMyIGJpdHMgb2Ygb2Zmc2V0Ci0gKiBpbnRvIHRoaXMgcmFuZ2U6CisgKiBCaXRzIDAsIDQsIDYsIGFuZCA3IGFyZSB0YWtlbi4gTGV0J3MgbGVhdmUgYml0cyAxLCAyLCAzLCBhbmQgNSBhbG9uZSB0bworICogbWFrZSB0aGluZ3MgZWFzaWVyLCBhbmQgb25seSB1c2UgdGhlIHVwcGVyIDU2IGJpdHMgZm9yIHRoZSBwYWdlIG9mZnNldC4uLgogICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTMyCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTU2CiAKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpIFwKLQkoKCgoX3B0ZSkucHRlID4+IDMpICYgMHgxZiApICsgKCgoX3B0ZSkucHRlID4+IDkpIDw8IDYgKSkKLQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBcCi0JKChwdGVfdCkgeyAoKChvZmYpICYgMHgxZikgPDwgMykgKyAoKChvZmYpID4+IDYpIDw8IDkpICsgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkJKChfcHRlKS5wdGUgPj4gOCkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeyAoKG9mZikgPDwgOCkgfCBfUEFHRV9GSUxFIH0pCiAKICNlbmRpZiAvKiBfQVNNX1BHVEFCTEVfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAppbmRleCA3MDJhMjhmLi5kMGFmMmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaApAQCAtNzAsNyArNzAsMTUgQEAKICNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSBcCiAJKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UgKyAoKCh1bnNpZ25lZCBsb25nKSh2YWRkcikpICYgemVyb19wYWdlX21hc2spKSkKIAotI2RlZmluZSBfX0hBVkVfQVJDSF9NVUxUSVBMRV9aRVJPX1BBR0UKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTU9WRV9QVEUKKyNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCQkJCVwKKyh7CQkJCQkJCQkJXAorIAlwdGVfdCBuZXdwdGUgPSAocHRlKTsJCQkJCQlcCisJaWYgKHB0ZV9wcmVzZW50KHB0ZSkgJiYgcGZuX3ZhbGlkKHB0ZV9wZm4ocHRlKSkgJiYJCVwKKwkJCXB0ZV9wYWdlKHB0ZSkgPT0gWkVST19QQUdFKG9sZF9hZGRyKSkJCVwKKwkJbmV3cHRlID0gbWtfcHRlKFpFUk9fUEFHRShuZXdfYWRkciksIChwcm90KSk7CQlcCisJbmV3cHRlOwkJCQkJCQkJXAorfSkKIAogZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CiAKQEAgLTgyLDEwICs5MCwxMSBAQAogI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3BoeXMocG1kKSA+PiBQQUdFX1NISUZUKSkKICNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkJcG1kX3ZhbChwbWQpCiAKLSNkZWZpbmUgcHRlX25vbmUocHRlKQkJKCEocHRlX3ZhbChwdGUpICYgfl9QQUdFX0dMT0JBTCkpCi0jZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQpCi0KICNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCisKKyNkZWZpbmUgcHRlX25vbmUocHRlKQkJKCEoKChwdGUpLnB0ZV9sb3cgfCAocHRlKS5wdGVfaGlnaCkgJiB+X1BBR0VfR0xPQkFMKSkKKyNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1BSRVNFTlQpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7CiAJcHRlcC0+cHRlX2hpZ2ggPSBwdGUucHRlX2hpZ2g7CkBAIC05MywyNyArMTAyLDM1IEBACiAJcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OwogCS8vcHJpbnRrKCJwdGVfaGlnaCAleCBwdGVfbG93ICV4XG4iLCBwdGVwLT5wdGVfaGlnaCwgcHRlcC0+cHRlX2xvdyk7CiAKLQlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfR0xPQkFMKSB7CisJaWYgKHB0ZS5wdGVfbG93ICYgX1BBR0VfR0xPQkFMKSB7CiAJCXB0ZV90ICpidWRkeSA9IHB0ZXBfYnVkZHkocHRlcCk7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGUgYnVkZHkgaXMgZ2xvYmFsIHRvbyAoaWYgaXQncyAhbm9uZSwKIAkJICogaXQgYmV0dGVyIGFscmVhZHkgYmUgZ2xvYmFsKQogCQkgKi8KLQkJaWYgKHB0ZV9ub25lKCpidWRkeSkpCi0JCQlidWRkeS0+cHRlX2xvdyB8PSBfUEFHRV9HTE9CQUw7CisJCWlmIChwdGVfbm9uZSgqYnVkZHkpKSB7CisJCQlidWRkeS0+cHRlX2xvdyAgfD0gX1BBR0VfR0xPQkFMOworCQkJYnVkZHktPnB0ZV9oaWdoIHw9IF9QQUdFX0dMT0JBTDsKKwkJfQogCX0KIH0KICNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogeworCXB0ZV90IG51bGwgPSBfX3B0ZSgwKTsKKwogCS8qIFByZXNlcnZlIGdsb2JhbCBzdGF0dXMgZm9yIHRoZSBwYWlyICovCi0JaWYgKHB0ZV92YWwoKnB0ZXBfYnVkZHkocHRlcCkpICYgX1BBR0VfR0xPQkFMKQotCQlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9HTE9CQUwpKTsKLQllbHNlCi0JCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKDApKTsKKwlpZiAocHRlcF9idWRkeShwdGVwKS0+cHRlX2xvdyAmIF9QQUdFX0dMT0JBTCkKKwkJbnVsbC5wdGVfbG93ID0gbnVsbC5wdGVfaGlnaCA9IF9QQUdFX0dMT0JBTDsKKworCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIG51bGwpOwogfQogI2Vsc2UKKworI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoIShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfR0xPQkFMKSkKKyNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVCkKKwogLyoKICAqIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gcHRlJ3MKICAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZwpAQCAtMTc0LDc1ICsxOTEsNzYgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHRlX3VzZXIocHRlX3QgcHRlKQl7IEJVRygpOyByZXR1cm4gMDsgfQogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMl9SMSkKLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1JFQUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCXsgcmV0dXJuIChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9XUklURTsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfQUNDRVNTRUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX0ZJTEU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlLnB0ZV9sb3cgJiBfUEFHRV9SRUFEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX1dSSVRFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX0FDQ0VTU0VEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZS5wdGVfbG93ICYgX1BBR0VfRklMRTsgfQorCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQogewotCShwdGUpLnB0ZV9sb3cgJj0gfihfUEFHRV9XUklURSB8IF9QQUdFX1NJTEVOVF9XUklURSk7Ci0JKHB0ZSkucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9XUklURTsKKwlwdGUucHRlX2xvdyAgJj0gfihfUEFHRV9XUklURSB8IF9QQUdFX1NJTEVOVF9XUklURSk7CisJcHRlLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfV1JJVEU7CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkKIHsKLQkocHRlKS5wdGVfbG93ICY9IH4oX1BBR0VfUkVBRCB8IF9QQUdFX1NJTEVOVF9SRUFEKTsKLQkocHRlKS5wdGVfaGlnaCAmPSB+X1BBR0VfU0lMRU5UX1JFQUQ7CisJcHRlLnB0ZV9sb3cgICY9IH4oX1BBR0VfUkVBRCB8IF9QQUdFX1NJTEVOVF9SRUFEKTsKKwlwdGUucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9SRUFEOwogCXJldHVybiBwdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogewotCShwdGUpLnB0ZV9sb3cgJj0gfihfUEFHRV9NT0RJRklFRHxfUEFHRV9TSUxFTlRfV1JJVEUpOwotCShwdGUpLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfV1JJVEU7CisJcHRlLnB0ZV9sb3cgICY9IH4oX1BBR0VfTU9ESUZJRUQgfCBfUEFHRV9TSUxFTlRfV1JJVEUpOworCXB0ZS5wdGVfaGlnaCAmPSB+X1BBR0VfU0lMRU5UX1dSSVRFOwogCXJldHVybiBwdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKIHsKLQkocHRlKS5wdGVfbG93ICY9IH4oX1BBR0VfQUNDRVNTRUR8X1BBR0VfU0lMRU5UX1JFQUQpOwotCShwdGUpLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfUkVBRDsKKwlwdGUucHRlX2xvdyAgJj0gfihfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1NJTEVOVF9SRUFEKTsKKwlwdGUucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9SRUFEOwogCXJldHVybiBwdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQogewotCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfV1JJVEU7Ci0JaWYgKChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9NT0RJRklFRCkgewotCQkocHRlKS5wdGVfbG93IHw9IF9QQUdFX1NJTEVOVF9XUklURTsKLQkJKHB0ZSkucHRlX2hpZ2ggfD0gX1BBR0VfU0lMRU5UX1dSSVRFOworCXB0ZS5wdGVfbG93IHw9IF9QQUdFX1dSSVRFOworCWlmIChwdGUucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEKSB7CisJCXB0ZS5wdGVfbG93ICB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CisJCXB0ZS5wdGVfaGlnaCB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CiAJfQogCXJldHVybiBwdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9SRUFEOwotCWlmICgocHRlKS5wdGVfbG93ICYgX1BBR0VfQUNDRVNTRUQpIHsKLQkJKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKLQkJKHB0ZSkucHRlX2hpZ2ggfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJcHRlLnB0ZV9sb3cgfD0gX1BBR0VfUkVBRDsKKwlpZiAocHRlLnB0ZV9sb3cgJiBfUEFHRV9BQ0NFU1NFRCkgeworCQlwdGUucHRlX2xvdyAgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJCXB0ZS5wdGVfaGlnaCB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKIAl9CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9NT0RJRklFRDsKLQlpZiAoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1dSSVRFKSB7Ci0JCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfU0lMRU5UX1dSSVRFOwotCQkocHRlKS5wdGVfaGlnaCB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CisJcHRlLnB0ZV9sb3cgfD0gX1BBR0VfTU9ESUZJRUQ7CisJaWYgKHB0ZS5wdGVfbG93ICYgX1BBR0VfV1JJVEUpIHsKKwkJcHRlLnB0ZV9sb3cgIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKKwkJcHRlLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKIAl9CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9BQ0NFU1NFRDsKLQlpZiAoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1JFQUQpCi0JCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7Ci0JCShwdGUpLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCXB0ZS5wdGVfbG93IHw9IF9QQUdFX0FDQ0VTU0VEOworCWlmIChwdGUucHRlX2xvdyAmIF9QQUdFX1JFQUQpCisJCXB0ZS5wdGVfbG93ICB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwkJcHRlLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9SRUFEOwogCXJldHVybiBwdGU7CiB9CiAjZWxzZQpAQCAtMzM1LDggKzM1Myw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IxKQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsKLQlwdGUucHRlX2xvdyAmPSBfUEFHRV9DSEdfTUFTSzsKLQlwdGUucHRlX2xvdyB8PSBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXB0ZS5wdGVfbG93ICAmPSBfUEFHRV9DSEdfTUFTSzsKKwlwdGUucHRlX2hpZ2ggJj0gfjB4M2Y7CisJcHRlLnB0ZV9sb3cgIHw9IHBncHJvdF92YWwobmV3cHJvdCk7CiAJcHRlLnB0ZV9oaWdoIHw9IHBncHJvdF92YWwobmV3cHJvdCkgJiAweDNmOwogCXJldHVybiBwdGU7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaAppbmRleCAzOWQyYmQ1Li4wZmI3NWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgX0FTTV9QUk9DRVNTT1JfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgpAQCAtMTA3LDYgKzEwOCwxMCBAQAogCiAjZGVmaW5lIElOSVRfRFNQIHt7MCx9LH0KIAorI2RlZmluZSBJTklUX0NQVU1BU0sgeyBcCisJezAsfSBcCit9CisKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIHNlZzsKIH0gbW1fc2VnbWVudF90OwpAQCAtMTI5LDYgKzEzNCwxMiBAQAogCiAJLyogU2F2ZWQgZnB1L2ZwdSBlbXVsYXRvciBzdHVmZi4gKi8KIAl1bmlvbiBtaXBzX2ZwdV91bmlvbiBmcHU7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKiBFbXVsYXRlZCBpbnN0cnVjdGlvbiBjb3VudCAqLworCXVuc2lnbmVkIGxvbmcgZW11bGF0ZWRfZnA7CisJLyogU2F2ZWQgcGVyLXRocmVhZCBzY2hlZHVsZXIgYWZmaW5pdHkgbWFzayAqLworCWNwdW1hc2tfdCB1c2VyX2NwdXNfYWxsb3dlZDsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLwogCiAJLyogU2F2ZWQgc3RhdGUgb2YgdGhlIERTUCBBU0UsIGlmIGF2YWlsYWJsZS4gKi8KIAlzdHJ1Y3QgbWlwc19kc3Bfc3RhdGUgZHNwOwpAQCAtMTQyLDYgKzE1Myw3IEBACiAjZGVmaW5lIE1GX0xPR0FERQkyCQkvKiBMb2cgYWRkcmVzcyBlcnJvcnMgdG8gc3lzbG9nICovCiAjZGVmaW5lIE1GXzMyQklUX1JFR1MJNAkJLyogYWxzbyBpbXBsaWVzIDE2LzMyIGZwcnMgKi8KICNkZWZpbmUgTUZfMzJCSVRfQUREUgk4CQkvKiAzMi1iaXQgYWRkcmVzcyBzcGFjZSAobzMyL24zMikgKi8KKyNkZWZpbmUgTUZfRlBVQk9VTkQJMHgxMAkJLyogdGhyZWFkIGJvdW5kIHRvIEZQVS1mdWxsIENQVSBzZXQgKi8KIAl1bnNpZ25lZCBsb25nIG1mbGFnczsKIAl1bnNpZ25lZCBsb25nIGlyaXhfdHJhbXBvbGluZTsgIC8qIFdoZWVlLi4uICovCiAJdW5zaWduZWQgbG9uZyBpcml4X29sZGN0eDsKQEAgLTE1Myw2ICsxNjUsMTIgQEAKICNkZWZpbmUgTUZfTjMyCQlNRl8zMkJJVF9BRERSCiAjZGVmaW5lIE1GX042NAkJMAogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKyNkZWZpbmUgRlBBRkZfSU5JVCAwLCBJTklUX0NQVU1BU0ssCisjZWxzZQorI2RlZmluZSBGUEFGRl9JTklUCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKwogI2RlZmluZSBJTklUX1RIUkVBRCAgeyBcCiAgICAgICAgIC8qIFwKICAgICAgICAgICogc2F2ZWQgbWFpbiBwcm9jZXNzb3IgcmVnaXN0ZXJzIFwKQEAgLTE2OCw2ICsxODYsMTAgQEAKIAkgKi8gXAogCUlOSVRfRlBVLCBcCiAJLyogXAorCSAqIGZwdSBhZmZpbml0eSBzdGF0ZSAobnVsbCBpZiBub3QgRlBBRkYpIFwKKwkgKi8gXAorCUZQQUZGX0lOSVQgXAorCS8qIFwKIAkgKiBzYXZlZCBkc3AvZHNwIGVtdWxhdG9yIHN0dWZmIFwKIAkgKi8gXAogCUlOSVRfRFNQLCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaAppbmRleCA5NWM1ODM5Li5mYTlkODcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKQEAgLTQ1LDYgKzQ1LDEwIEBACiAJdW5zaWduZWQgbG9uZyBjcDBfYmFkdmFkZHI7CiAJdW5zaWduZWQgbG9uZyBjcDBfY2F1c2U7CiAJdW5zaWduZWQgbG9uZyBjcDBfZXBjOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl1bnNpZ25lZCBsb25nIGNwMF90Y3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIHNtdGNfcGFkOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIH07CiAKIC8qIEFyYml0cmFyaWx5IGNob29zZSB0aGUgc2FtZSBwdHJhY2UgbnVtYmVycyBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBjb2RlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9yNGtjYWNoZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9yNGtjYWNoZS5oCmluZGV4IDkwYzM3NDcuLjNjOGUzYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcjRrY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3I0a2NhY2hlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlb3BzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CiAKIC8qCiAgKiBUaGlzIG1hY3JvIHJldHVybiBhIHByb3Blcmx5IHNpZ24tZXh0ZW5kZWQgYWRkcmVzcyBzdWl0YWJsZSBhcyBiYXNlIGFkZHJlc3MKQEAgLTM3LDE2ICszOCwxMjAgQEAKIAkiCWNhY2hlCSUwLCAlMQkJCQkJXG4iCVwKIAkiCS5zZXQJcG9wCQkJCQlcbiIJXAogCToJCQkJCQkJCVwKLQk6ICJpIiAob3ApLCAibSIgKCoodW5zaWduZWQgY2hhciAqKShhZGRyKSkpCisJOiAiaSIgKG9wKSwgIlIiICgqKHVuc2lnbmVkIGNoYXIgKikoYWRkcikpKQorCisjaWZkZWYgQ09ORklHX01JUFNfTVQKKy8qCisgKiBUZW1wb3JhcnkgaGFja3MgZm9yIFNNVEMgZGVidWcuIE9wdGlvbmFsbHkgZm9yY2Ugc2luZ2xlLXRocmVhZGVkCisgKiBleGVjdXRpb24gZHVyaW5nIEktY2FjaGUgZmx1c2hlcy4KKyAqLworCisjZGVmaW5lIFBST1RFQ1RfQ0FDSEVfRkxVU0hFUyAxCisKKyNpZmRlZiBQUk9URUNUX0NBQ0hFX0ZMVVNIRVMKKworZXh0ZXJuIGludCBtdF9wcm90aWZsdXNoOworZXh0ZXJuIGludCBtdF9wcm90ZGZsdXNoOworZXh0ZXJuIHZvaWQgbXRfY2ZsdXNoX2xvY2tkb3duKHZvaWQpOworZXh0ZXJuIHZvaWQgbXRfY2ZsdXNoX3JlbGVhc2Uodm9pZCk7CisKKyNkZWZpbmUgQkVHSU5fTVRfSVBST1QgXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwkJCVwKKwl1bnNpZ25lZCBsb25nIG10ZmxhZ3MgPSAwOwkJCVwKKwlpZihtdF9wcm90aWZsdXNoKSB7CQkJCVwKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCVwKKwkJZWhiKCk7CQkJCQlcCisJCW10ZmxhZ3MgPSBkdnBlKCk7CQkJXAorCQltdF9jZmx1c2hfbG9ja2Rvd24oKTsJCQlcCisJfQorCisjZGVmaW5lIEVORF9NVF9JUFJPVCBcCisJaWYobXRfcHJvdGlmbHVzaCkgewkJCQlcCisJCW10X2NmbHVzaF9yZWxlYXNlKCk7CQkJXAorCQlldnBlKG10ZmxhZ3MpOwkJCQlcCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCVwKKwl9CisKKyNkZWZpbmUgQkVHSU5fTVRfRFBST1QgXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwkJCVwKKwl1bnNpZ25lZCBsb25nIG10ZmxhZ3MgPSAwOwkJCVwKKwlpZihtdF9wcm90ZGZsdXNoKSB7CQkJCVwKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCVwKKwkJZWhiKCk7CQkJCQlcCisJCW10ZmxhZ3MgPSBkdnBlKCk7CQkJXAorCQltdF9jZmx1c2hfbG9ja2Rvd24oKTsJCQlcCisJfQorCisjZGVmaW5lIEVORF9NVF9EUFJPVCBcCisJaWYobXRfcHJvdGRmbHVzaCkgewkJCQlcCisJCW10X2NmbHVzaF9yZWxlYXNlKCk7CQkJXAorCQlldnBlKG10ZmxhZ3MpOwkJCQlcCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCVwKKwl9CisKKyNlbHNlCisKKyNkZWZpbmUgQkVHSU5fTVRfSVBST1QKKyNkZWZpbmUgQkVHSU5fTVRfRFBST1QKKyNkZWZpbmUgRU5EX01UX0lQUk9UCisjZGVmaW5lIEVORF9NVF9EUFJPVAorCisjZW5kaWYgLyogUFJPVEVDVF9DQUNIRV9GTFVTSEVTICovCisKKyNkZWZpbmUgX19pZmx1c2hfcHJvbG9ndWUJCQkJCQlcCisJdW5zaWduZWQgbG9uZyByZWR1bmRhbmNlOwkJCQkJXAorCWV4dGVybiBpbnQgbXRfbl9pZmx1c2hlczsJCQkJCVwKKwlCRUdJTl9NVF9JUFJPVAkJCQkJCQlcCisJZm9yIChyZWR1bmRhbmNlID0gMDsgcmVkdW5kYW5jZSA8IG10X25faWZsdXNoZXM7IHJlZHVuZGFuY2UrKykgeworCisjZGVmaW5lIF9faWZsdXNoX2VwaWxvZ3VlCQkJCQkJXAorCUVORF9NVF9JUFJPVAkJCQkJCQlcCisJfQorCisjZGVmaW5lIF9fZGZsdXNoX3Byb2xvZ3VlCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgcmVkdW5kYW5jZTsJCQkJCVwKKwlleHRlcm4gaW50IG10X25fZGZsdXNoZXM7CQkJCQlcCisJQkVHSU5fTVRfRFBST1QJCQkJCQkJXAorCWZvciAocmVkdW5kYW5jZSA9IDA7IHJlZHVuZGFuY2UgPCBtdF9uX2RmbHVzaGVzOyByZWR1bmRhbmNlKyspIHsKKworI2RlZmluZSBfX2RmbHVzaF9lcGlsb2d1ZSBcCisJRU5EX01UX0RQUk9UCSBcCisJfQorCisjZGVmaW5lIF9faW52X2RmbHVzaF9wcm9sb2d1ZSBfX2RmbHVzaF9wcm9sb2d1ZQorI2RlZmluZSBfX2ludl9kZmx1c2hfZXBpbG9ndWUgX19kZmx1c2hfZXBpbG9ndWUKKyNkZWZpbmUgX19zZmx1c2hfcHJvbG9ndWUgeworI2RlZmluZSBfX3NmbHVzaF9lcGlsb2d1ZSB9CisjZGVmaW5lIF9faW52X3NmbHVzaF9wcm9sb2d1ZSBfX3NmbHVzaF9wcm9sb2d1ZQorI2RlZmluZSBfX2ludl9zZmx1c2hfZXBpbG9ndWUgX19zZmx1c2hfZXBpbG9ndWUKKworI2Vsc2UgLyogQ09ORklHX01JUFNfTVQgKi8KKworI2RlZmluZSBfX2lmbHVzaF9wcm9sb2d1ZSB7CisjZGVmaW5lIF9faWZsdXNoX2VwaWxvZ3VlIH0KKyNkZWZpbmUgX19kZmx1c2hfcHJvbG9ndWUgeworI2RlZmluZSBfX2RmbHVzaF9lcGlsb2d1ZSB9CisjZGVmaW5lIF9faW52X2RmbHVzaF9wcm9sb2d1ZSB7CisjZGVmaW5lIF9faW52X2RmbHVzaF9lcGlsb2d1ZSB9CisjZGVmaW5lIF9fc2ZsdXNoX3Byb2xvZ3VlIHsKKyNkZWZpbmUgX19zZmx1c2hfZXBpbG9ndWUgfQorI2RlZmluZSBfX2ludl9zZmx1c2hfcHJvbG9ndWUgeworI2RlZmluZSBfX2ludl9zZmx1c2hfZXBpbG9ndWUgfQorCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVQgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9saW5lX2luZGV4ZWQodW5zaWduZWQgbG9uZyBhZGRyKQogeworCV9faWZsdXNoX3Byb2xvZ3VlCiAJY2FjaGVfb3AoSW5kZXhfSW52YWxpZGF0ZV9JLCBhZGRyKTsKKwlfX2lmbHVzaF9lcGlsb2d1ZQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZGNhY2hlX2xpbmVfaW5kZXhlZCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisJX19kZmx1c2hfcHJvbG9ndWUKIAljYWNoZV9vcChJbmRleF9Xcml0ZWJhY2tfSW52X0QsIGFkZHIpOworCV9fZGZsdXNoX2VwaWxvZ3VlCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9zY2FjaGVfbGluZV9pbmRleGVkKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTU2LDE3ICsxNjEsMjMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKKwlfX2lmbHVzaF9wcm9sb2d1ZQogCWNhY2hlX29wKEhpdF9JbnZhbGlkYXRlX0ksIGFkZHIpOworCV9faWZsdXNoX2VwaWxvZ3VlCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisJX19kZmx1c2hfcHJvbG9ndWUKIAljYWNoZV9vcChIaXRfV3JpdGViYWNrX0ludl9ELCBhZGRyKTsKKwlfX2RmbHVzaF9lcGlsb2d1ZQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9kY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisJX19kZmx1c2hfcHJvbG9ndWUKIAljYWNoZV9vcChIaXRfSW52YWxpZGF0ZV9ELCBhZGRyKTsKKwlfX2RmbHVzaF9lcGlsb2d1ZQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9zY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0yMzksOSArMzUwLDEzIEBACiAJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmRlc2Mud2F5Yml0OwkJXAogCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CQkJCQkJXAogCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX3Byb2xvZ3VlCQkJCQkJXAorCQkJCQkJCQkJXAogCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKQkJCQlcCiAJCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IGxzaXplICogMzIpCVwKIAkJCWNhY2hlIyNsc2l6ZSMjX3Vucm9sbDMyKGFkZHJ8d3MsaW5kZXhvcCk7CVwKKwkJCQkJCQkJCVwKKwlfXyMjcGZ4IyNmbHVzaF9lcGlsb2d1ZQkJCQkJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxhc3RfIyNwZngjI2NhY2hlIyNsc2l6ZSMjX3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQlcCkBAIC0yNDksMTAgKzM2NCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOwkJCQkJXAogCXVuc2lnbmVkIGxvbmcgZW5kID0gcGFnZSArIFBBR0VfU0laRTsJCQkJXAogCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX3Byb2xvZ3VlCQkJCQkJXAorCQkJCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJY2FjaGUjI2xzaXplIyNfdW5yb2xsMzIoc3RhcnQsaGl0b3ApOwkJCVwKIAkJc3RhcnQgKz0gbHNpemUgKiAzMjsJCQkJCVwKIAl9IHdoaWxlIChzdGFydCA8IGVuZCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX2VwaWxvZ3VlCQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF8jI3BmeCMjY2FjaGUjI2xzaXplIyNfcGFnZV9pbmRleGVkKHVuc2lnbmVkIGxvbmcgcGFnZSkgXApAQCAtMjY1LDkgKzM4NCwxMyBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5kZXNjLndheWJpdDsJCVwKIAl1bnNpZ25lZCBsb25nIHdzLCBhZGRyOwkJCQkJCVwKIAkJCQkJCQkJCVwKKwlfXyMjcGZ4IyNmbHVzaF9wcm9sb2d1ZQkJCQkJCVwKKwkJCQkJCQkJCVwKIAlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykJCQkJXAogCQlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBsc2l6ZSAqIDMyKQlcCiAJCQljYWNoZSMjbHNpemUjI191bnJvbGwzMihhZGRyfHdzLGluZGV4b3ApOwlcCisJCQkJCQkJCQlcCisJX18jI3BmeCMjZmx1c2hfZXBpbG9ndWUJCQkJCQlcCiB9CiAKIF9fQlVJTERfQkxBU1RfQ0FDSEUoZCwgZGNhY2hlLCBJbmRleF9Xcml0ZWJhY2tfSW52X0QsIEhpdF9Xcml0ZWJhY2tfSW52X0QsIDE2KQpAQCAtMjg4LDEyICs0MTEsMTcgQEAKIAl1bnNpZ25lZCBsb25nIGxzaXplID0gY3B1XyMjZGVzYyMjX2xpbmVfc2l6ZSgpOwkJCVwKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydCAmIH4obHNpemUgLSAxKTsJCQlcCiAJdW5zaWduZWQgbG9uZyBhZW5kID0gKGVuZCAtIDEpICYgfihsc2l6ZSAtIDEpOwkJCVwKKwkJCQkJCQkJCVwKKwlfXyMjcGZ4IyNmbHVzaF9wcm9sb2d1ZQkJCQkJCVwKKwkJCQkJCQkJCVwKIAl3aGlsZSAoMSkgewkJCQkJCQlcCiAJCXByb3QjI2NhY2hlX29wKGhpdG9wLCBhZGRyKTsJCQkJXAogCQlpZiAoYWRkciA9PSBhZW5kKQkJCQkJXAogCQkJYnJlYWs7CQkJCQkJXAogCQlhZGRyICs9IGxzaXplOwkJCQkJCVwKIAl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJX18jI3BmeCMjZmx1c2hfZXBpbG9ndWUJCQkJCQlcCiB9CiAKIF9fQlVJTERfQkxBU1RfQ0FDSEVfUkFOR0UoZCwgZGNhY2hlLCBIaXRfV3JpdGViYWNrX0ludl9ELCBwcm90ZWN0ZWRfKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ydGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcnRjLmgKaW5kZXggYTJhYmM0NS4uODJhZDQwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9ydGMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3J0Yy5oCkBAIC0zMiw3ICszMiw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBub3d0aW1lOwogCi0Jbm93dGltZSA9IHJ0Y19nZXRfdGltZSgpOworCW5vd3RpbWUgPSBydGNfbWlwc19nZXRfdGltZSgpOwogCXRvX3RtKG5vd3RpbWUsIHRpbWUpOwogCXRpbWUtPnRtX3llYXIgLT0gMTkwMDsKIApAQCAtNDcsNyArNDcsNyBAQAogCW5vd3RpbWUgPSBta3RpbWUodGltZS0+dG1feWVhcisxOTAwLCB0aW1lLT50bV9tb24rMSwKIAkJCXRpbWUtPnRtX21kYXksIHRpbWUtPnRtX2hvdXIsIHRpbWUtPnRtX21pbiwKIAkJCXRpbWUtPnRtX3NlYyk7Ci0JcmV0ID0gcnRjX3NldF90aW1lKG5vd3RpbWUpOworCXJldCA9IHJ0Y19taXBzX3NldF90aW1lKG5vd3RpbWUpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcnRseC5oIGIvaW5jbHVkZS9hc20tbWlwcy9ydGx4LmgKaW5kZXggMTI5OGMzZi4uNzZjZDUxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9ydGx4LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9ydGx4LmgKQEAgLTMsMzIgKzMsNDYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBfUlRMWF9ICi0jZGVmaW5lIF9SVExYX0hfCisjaWZuZGVmIF9fQVNNX1JUTFhfSAorI2RlZmluZSBfX0FTTV9SVExYX0hfCiAKICNkZWZpbmUgTFhfTk9ERV9CQVNFIDEwCiAKICNkZWZpbmUgTUlQU0NQVV9JTlRfQkFTRSAgICAgICAxNgogI2RlZmluZSBNSVBTX0NQVV9SVExYX0lSUSAwCiAKLSNkZWZpbmUgUlRMWF9WRVJTSU9OIDEKKyNkZWZpbmUgUlRMWF9WRVJTSU9OIDIKICNkZWZpbmUgUlRMWF94SUQgMHgxMjM0NTYwMAogI2RlZmluZSBSVExYX0lEIChSVExYX3hJRCB8IFJUTFhfVkVSU0lPTikKICNkZWZpbmUgUlRMWF9DSEFOTkVMUyA4CiAKLSNkZWZpbmUgUlRMWF9CVUZGRVJfU0laRSAxMDI0CisjZGVmaW5lIFJUTFhfQ0hBTk5FTF9TVERJTwkwCisjZGVmaW5lIFJUTFhfQ0hBTk5FTF9EQkcJMQorI2RlZmluZSBSVExYX0NIQU5ORUxfU1lTSU8JMgogCi0vKgotICogbHhfc3RhdGUgYml0cwotICovCi0jZGVmaW5lIFJUTFhfU1RBVEVfT1BFTkVEIDFVTAorZXh0ZXJuIGludCBydGx4X29wZW4oaW50IGluZGV4LCBpbnQgY2FuX3NsZWVwKTsKK2V4dGVybiBpbnQgcnRseF9yZWxlYXNlKGludCBpbmRleCk7CitleHRlcm4gc3NpemVfdCBydGx4X3JlYWQoaW50IGluZGV4LCB2b2lkICpidWZmLCBzaXplX3QgY291bnQsIGludCB1c2VyKTsKK2V4dGVybiBzc2l6ZV90IHJ0bHhfd3JpdGUoaW50IGluZGV4LCB2b2lkICpidWZmZXIsIHNpemVfdCBjb3VudCwgaW50IHVzZXIpOworZXh0ZXJuIHVuc2lnbmVkIGludCBydGx4X3JlYWRfcG9sbChpbnQgaW5kZXgsIGludCBjYW5fc2xlZXApOworZXh0ZXJuIHVuc2lnbmVkIGludCBydGx4X3dyaXRlX3BvbGwoaW50IGluZGV4KTsKKworZW51bSBydGx4X3N0YXRlIHsKKwlSVExYX1NUQVRFX1VOVVNFRCwKKwlSVExYX1NUQVRFX0lOSVRJQUxJU0VELAorCVJUTFhfU1RBVEVfUkVNT1RFX1JFQURZLAorCVJUTFhfU1RBVEVfT1BFTkVECit9OworCisjZGVmaW5lIFJUTFhfQlVGRkVSX1NJWkUgMTAyNAogCiAvKiBlYWNoIGNoYW5uZWwgc3VwcG9ydHMgcmVhZCBhbmQgd3JpdGUuCiAgICBsaW51eCAodnBlMCkgcmVhZHMgbHhfYnVmZmVyICBhbmQgd3JpdGVzIHJ0X2J1ZmZlcgogICAgU1AgKHZwZTEpIHJlYWRzIHJ0X2J1ZmZlciBhbmQgd3JpdGVzIGx4X2J1ZmZlcgogKi8KIHN0cnVjdCBydGx4X2NoYW5uZWwgewotCXVuc2lnbmVkIGxvbmcgbHhfc3RhdGU7CisJZW51bSBydGx4X3N0YXRlIHJ0X3N0YXRlOworCWVudW0gcnRseF9zdGF0ZSBseF9zdGF0ZTsKIAogCWludCBidWZmZXJfc2l6ZTsKIApAQCAtMzgsMTUgKzUyLDEzIEBACiAKIAlpbnQgbHhfd3JpdGUsIGx4X3JlYWQ7CiAJY2hhciAqbHhfYnVmZmVyOwotCi0Jdm9pZCAqcXVldWVzOwotCiB9OwogCiBzdHJ1Y3QgcnRseF9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIGlkOworCWVudW0gcnRseF9zdGF0ZSBzdGF0ZTsKIAogCXN0cnVjdCBydGx4X2NoYW5uZWwgY2hhbm5lbFtSVExYX0NIQU5ORUxTXTsKIH07CiAKLSNlbmRpZiAvKiBfUlRMWF9IXyAqLworI2VuZGlmIC8qIF9fQVNNX1JUTFhfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCmluZGV4IDdiMjM2NjQuLjcxOTZjZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaApAQCAtNzcsMTUgKzc3LDE1IEBACiAjaW5jbHVkZSA8YXNtL2l0ODcxMi5oPgogI2RlZmluZSBJVEVfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgLmJhdWRfYmFzZSA9IEJBU0VfQkFVRCwgLnBvcnQgPSAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfVUFSVF9CQVNFKSwgXAotICAgICAgLmlycSA9IElUODE3Ml9VQVJUX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnR5cGUgPSAweDMgfSwgXAorICAgICAgLmlycSA9IElUODE3Ml9VQVJUX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sIFwKICAgICB7IC5iYXVkX2Jhc2UgPSAoMjQwMDAwMDAvKDE2KjEzKSksIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUODcxMl9VQVJUMV9QT1JUKSwgXAotICAgICAgLmlycSA9IElUODE3Ml9TRVJJUlFfNCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnR5cGUgPSAweDMgfSwgXAorICAgICAgLmlycSA9IElUODE3Ml9TRVJJUlFfNCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sIFwKICAgICAvKiBTbWFydCBDYXJkIFJlYWRlciAwICovIFwKICAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1NDUjBfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC50eXBlID0gMHgzIH0sIFwKKyAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LCBcCiAgICAgLyogU21hcnQgQ2FyZCBSZWFkZXIgMSAqLyBcCiAgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9TQ1IxX0JBU0UpLCBcCi0gICAgICAuaXJxID0gSVQ4MTcyX1NDUjFfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LAorICAgICAgLmlycSA9IElUODE3Ml9TQ1IxX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sCiAjZWxzZQogI2RlZmluZSBJVEVfU0VSSUFMX1BPUlRfREVGTlMKICNlbmRpZgpAQCAtOTUsMTAgKzk1LDEwIEBACiAjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfaW50Lmg+CiAjZGVmaW5lIElWUl9TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9VQVJUX0JBU0UpLCBcCi0gICAgICAuaXJxID0gSVQ4MTcyX1VBUlRfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LCAgICAgICAgIFwKKyAgICAgIC5pcnEgPSBJVDgxNzJfVUFSVF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LCAgICAgICAgIFwKICAgICAvKiBTbWFydCBDYXJkIFJlYWRlciAxICovIFwKICAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1NDUjFfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMV9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC50eXBlID0gMHgzIH0sCisgICAgICAuaXJxID0gSVQ4MTcyX1NDUjFfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAucG9ydCA9IFBPUlRfMTY1NTAgfSwKICNlbHNlCiAjZGVmaW5lIElWUl9TRVJJQUxfUE9SVF9ERUZOUwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnY29udGV4dC5oCmluZGV4IDhlZGFiYjAuLmNlZmE2NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnY29udGV4dC5oCkBAIC01NSw4ICs1NSwxNCBAQAogc3RydWN0IHNpZ2NvbnRleHQgewogCXVuc2lnbmVkIGxvbmcJc2NfcmVnc1szMl07CiAJdW5zaWduZWQgbG9uZwlzY19mcHJlZ3NbMzJdOwotCXVuc2lnbmVkIGxvbmcJc2NfaGlbNF07Ci0JdW5zaWduZWQgbG9uZwlzY19sb1s0XTsKKwl1bnNpZ25lZCBsb25nCXNjX21kaGk7CisJdW5zaWduZWQgbG9uZwlzY19oaTE7CisJdW5zaWduZWQgbG9uZwlzY19oaTI7CisJdW5zaWduZWQgbG9uZwlzY19oaTM7CisJdW5zaWduZWQgbG9uZwlzY19tZGxvOworCXVuc2lnbmVkIGxvbmcJc2NfbG8xOworCXVuc2lnbmVkIGxvbmcJc2NfbG8yOworCXVuc2lnbmVkIGxvbmcJc2NfbG8zOwogCXVuc2lnbmVkIGxvbmcJc2NfcGM7CiAJdW5zaWduZWQgaW50CXNjX2ZwY19jc3I7CiAJdW5zaWduZWQgaW50CXNjX3VzZWRfbWF0aDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmggYi9pbmNsdWRlL2FzbS1taXBzL3NtcC5oCmluZGV4IDc1YzZmZTcuLmUxNGU0YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbXAuaApAQCAtNDgsNyArNDgsNiBAQAogI2RlZmluZSBTTVBfQ0FMTF9GVU5DVElPTgkweDIKIAogZXh0ZXJuIGNwdW1hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKLWV4dGVybiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CiAjZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAJcGh5c19jcHVfcHJlc2VudF9tYXAKIAogZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7CkBAIC04Niw5ICs4NSw5IEBACiBleHRlcm4gdm9pZCBwbGF0X3NtcF9zZXR1cCh2b2lkKTsKIAogLyoKLSAqIENhbGxlZCBhZnRlciBpbml0X0lSUSBidXQgYmVmb3JlIF9fY3B1X3VwLgorICogQ2FsbGVkIGluIHNtcF9wcmVwYXJlX2NwdXMuCiAgKi8KLWV4dGVybiB2b2lkIHByb21fcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cyk7CitleHRlcm4gdm9pZCBwbGF0X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwogCiAvKgogICogTGFzdCBjaGFuY2UgZm9yIHRoZSBib2FyZCBjb2RlIHRvIGZpbmlzaCBTTVAgaW5pdGlhbGl6YXRpb24gYmVmb3JlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NtdGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc210Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTQxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NtdGMuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIF9BU01fU01UQ19NVF9ICisjZGVmaW5lIF9BU01fU01UQ19NVF9ICisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgU01UQyBtdWx0aXRhc2tpbmcgb24gTUlQUyBNVCBjb3JlcworICovCisKKyNpbmNsdWRlIDxhc20vbWlwc19tdC5oPgorCisvKgorICogU3lzdGVtLXdpZGUgU01UQyBzdGF0dXMgaW5mb3JtYXRpb24KKyAqLworCitleHRlcm4gdW5zaWduZWQgaW50IHNtdGNfc3RhdHVzOworCisjZGVmaW5lIFNNVENfVExCX1NIQVJFRAkweDAwMDAwMDAxCisjZGVmaW5lIFNNVENfTVRDX0FDVElWRQkweDAwMDAwMDAyCisKKy8qCisgKiBUTEIvQVNJRCBNYW5hZ2VtZW50IGluZm9ybWF0aW9uCisgKi8KKworI2RlZmluZSBNQVhfU01UQ19UTEJTIDIKKyNkZWZpbmUgTUFYX1NNVENfQVNJRFMgMjU2CisjaWYgTlJfQ1BVUyA8PSA4Cit0eXBlZGVmIGNoYXIgYXNpZHVzZTsKKyNlbHNlCisjaWYgTlJfQ1BVUyA8PSAxNgordHlwZWRlZiBzaG9ydCBhc2lkdXNlOworI2Vsc2UKK3R5cGVkZWYgbG9uZyBhc2lkdXNlOworI2VuZGlmCisjZW5kaWYKKworZXh0ZXJuIGFzaWR1c2Ugc210Y19saXZlX2FzaWRbTUFYX1NNVENfVExCU11bTUFYX1NNVENfQVNJRFNdOworCit2b2lkIHNtdGNfZ2V0X25ld19tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjcHUpOworCit2b2lkIHNtdGNfZmx1c2hfdGxiX2FzaWQodW5zaWduZWQgbG9uZyBhc2lkKTsKK2V4dGVybiBpbnQgbWlwc210X2J1aWxkX2NwdV9tYXAoaW50IHN0YXJ0c2xvdCk7CitleHRlcm4gdm9pZCBtaXBzbXRfcHJlcGFyZV9jcHVzKHZvaWQpOworZXh0ZXJuIHZvaWQgc210Y19zbXBfZmluaXNoKHZvaWQpOworZXh0ZXJuIHZvaWQgc210Y19ib290X3NlY29uZGFyeShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOworCisvKgorICogU2hhcmluZyB0aGUgVExCIGJldHdlZW4gbXVsdGlwbGUgVlBFcyBtZWFucyB0aGF0IHRoZQorICogInJhbmRvbSIgaW5kZXggc2VsZWN0aW9uIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvCisgKiBzZWxlY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEluZGV4IHJlZ2lzdGVyLiBUbworICogYXZvaWQgYWRkaXRpb25hbCBUTEIgcHJlc3N1cmUsIHRoZSBJbmRleCByZWdpc3RlcnMKKyAqIGFyZSAicGFya2VkIiB3aXRoIGFuIG5vbi1WYWxpZCB2YWx1ZS4KKyAqLworCisjZGVmaW5lIFBBUktFRF9JTkRFWAkoKHVuc2lnbmVkIGludCkweDgwMDAwMDAwKQorCisjZW5kaWYgLyogIF9BU01fU01UQ19NVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NtdGNfaXBpLmggYi9pbmNsdWRlL2FzbS1taXBzL3NtdGNfaXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIyYzNlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc210Y19pcGkuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIERlZmluaXRpb25zIHVzZWQgaW4gTUlQUyBNVCBTTVRDICJJbnRlcnByb2Nlc3NvciBJbnRlcnJ1cHQiIGNvZGUuCisgKi8KKyNpZm5kZWYgX19BU01fU01UQ19JUElfSAorI2RlZmluZSBfX0FTTV9TTVRDX0lQSV9ICisKKy8vI2RlZmluZSBTTVRDX0lQSV9ERUJVRworCisjaWZkZWYgU01UQ19JUElfREVCVUcKKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgorI2VuZGlmIC8qIFNNVENfSVBJX0RFQlVHICovCisKKy8qCisgKiBBbiBJUEkgIm1lc3NhZ2UiCisgKi8KKworc3RydWN0IHNtdGNfaXBpIHsKKwlzdHJ1Y3Qgc210Y19pcGkgKmZsaW5rOworCWludCB0eXBlOworCXZvaWQgKmFyZzsKKwlpbnQgZGVzdDsKKyNpZmRlZglTTVRDX0lQSV9ERUJVRworCWludCBzZW5kZXI7CisJbG9uZyBzdGFtcDsKKyNlbmRpZiAvKiBTTVRDX0lQSV9ERUJVRyAqLworfTsKKworLyoKKyAqIERlZmluZWQgSVBJIFR5cGVzCisgKi8KKworI2RlZmluZSBMSU5VWF9TTVBfSVBJIDEKKyNkZWZpbmUgU01UQ19DTE9DS19USUNLIDIKKworLyoKKyAqIEEgcXVldWUgb2YgSVBJIG1lc3NhZ2VzCisgKi8KKworc3RydWN0IHNtdGNfaXBpX3EgeworCXN0cnVjdCBzbXRjX2lwaSAqaGVhZDsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHNtdGNfaXBpICp0YWlsOworCWludCBkZXB0aDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc210Y19pcGlfcSBJUElRW05SX0NQVVNdOworZXh0ZXJuIHN0cnVjdCBzbXRjX2lwaV9xIGZyZWVJUElxOworCitzdGF0aWMgaW5saW5lIHZvaWQgc210Y19pcGlfbnEoc3RydWN0IHNtdGNfaXBpX3EgKnEsIHN0cnVjdCBzbXRjX2lwaSAqcCkKK3sKKwlsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlpZiAocS0+aGVhZCA9PSBOVUxMKQorCQlxLT5oZWFkID0gcS0+dGFpbCA9IHA7CisJZWxzZQorCQlxLT50YWlsLT5mbGluayA9IHA7CisJcC0+ZmxpbmsgPSBOVUxMOworCXEtPnRhaWwgPSBwOworCXEtPmRlcHRoKys7CisjaWZkZWYJU01UQ19JUElfREVCVUcKKwlwLT5zZW5kZXIgPSByZWFkX2MwX3RjYmluZCgpOworCXAtPnN0YW1wID0gcmVhZF9jMF9jb3VudCgpOworI2VuZGlmIC8qIFNNVENfSVBJX0RFQlVHICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbXRjX2lwaSAqc210Y19pcGlfZHEoc3RydWN0IHNtdGNfaXBpX3EgKnEpCit7CisJc3RydWN0IHNtdGNfaXBpICpwOworCWxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOworCWlmIChxLT5oZWFkID09IE5VTEwpCisJCXAgPSBOVUxMOworCWVsc2UgeworCQlwID0gcS0+aGVhZDsKKwkJcS0+aGVhZCA9IHEtPmhlYWQtPmZsaW5rOworCQlxLT5kZXB0aC0tOworCQkvKiBBcmd1YWJseSB1bm5lY2Vzc2FyeSwgYnV0IGxlYXZlcyBxdWV1ZSBjbGVhbmVyICovCisJCWlmIChxLT5oZWFkID09IE5VTEwpCisJCQlxLT50YWlsID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc210Y19pcGlfcmVxKHN0cnVjdCBzbXRjX2lwaV9xICpxLCBzdHJ1Y3Qgc210Y19pcGkgKnApCit7CisJbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJaWYgKHEtPmhlYWQgPT0gTlVMTCkgeworCQlxLT5oZWFkID0gcS0+dGFpbCA9IHA7CisJCXAtPmZsaW5rID0gTlVMTDsKKwl9IGVsc2UgeworCQlwLT5mbGluayA9IHEtPmhlYWQ7CisJCXEtPmhlYWQgPSBwOworCX0KKwlxLT5kZXB0aCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc210Y19pcGlfcWRlcHRoKHN0cnVjdCBzbXRjX2lwaV9xICpxKQoreworCWxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gcS0+ZGVwdGg7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiB2b2lkIHNtdGNfc2VuZF9pcGkoaW50IGNwdSwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBhY3Rpb24pOworCisjZW5kaWYgLyogX19BU01fU01UQ19JUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbXRjX3Byb2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc210Y19wcm9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkYTY1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc210Y19wcm9jLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBTTVRDIC9wcm9jIGVudHJpZXMKKyAqIENvcHlyaWdodChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzIEluYy4KKyAqLworI2lmbmRlZiBfX0FTTV9TTVRDX1BST0NfSAorI2RlZmluZSBfX0FTTV9TTVRDX1BST0NfSAorCisvKgorICogcGVyLSJDUFUiIHN0YXRpc3RpY3MKKyAqLworCitzdHJ1Y3Qgc210Y19jcHVfcHJvYyB7CisJdW5zaWduZWQgbG9uZyB0aW1lcmludHM7CisJdW5zaWduZWQgbG9uZyBzZWxmaXBpczsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc210Y19jcHVfcHJvYyBzbXRjX2NwdV9zdGF0c1tOUl9DUFVTXTsKKworLyogQ291bnQgb2YgbnVtYmVyIG9mIHJlY292ZXJpZXMgb2YgInN0b2xlbiIgRlBVIGFjY2VzcyByaWdodHMgb24gMzRLICovCisKK2V4dGVybiBhdG9taWNfdCBzbXRjX2ZwdV9yZWNvdmVyaWVzOworCisjZW5kaWYgLyogX19BU01fU01UQ19QUk9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3BhcnNlbWVtLmggYi9pbmNsdWRlL2FzbS1taXBzL3NwYXJzZW1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NWFjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NwYXJzZW1lbS5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX01JUFNfU1BBUlNFTUVNX0gKKyNkZWZpbmUgX01JUFNfU1BBUlNFTUVNX0gKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCisKKy8qCisgKiBTRUNUSU9OX1NJWkVfQklUUwkJMl5OOiBob3cgYmlnIGVhY2ggc2VjdGlvbiB3aWxsIGJlCisgKiBNQVhfUEhZU01FTV9CSVRTCQkyXk46IGhvdyBtdWNoIG1lbW9yeSB3ZSBjYW4gaGF2ZSBpbiB0aGF0IHNwYWNlCisgKi8KKyNkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMgICAgICAgMjgKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUyAgICAgICAgMzUKKworI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KKyNlbmRpZiAvKiBfTUlQU19TUEFSU0VNRU1fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCmluZGV4IDJhY2YzZTguLmM0ODU2YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCkBAIC0xNCw5ICsxNCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogCQkubWFjcm8JU0FWRV9BVAogCQkuc2V0CXB1c2gKIAkJLnNldAlub2F0CkBAIC01NywxMyArNjIsMzAgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJCS5tYWNybwlnZXRfc2F2ZWRfc3AJLyogU01QIHZhcmlhdGlvbiAqLwogI2lmZGVmIENPTkZJR18zMkJJVAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJLnNldAltaXBzMzIKKwkJbWZjMAlrMCwgQ1AwX1RDQklORDsKKwkJLnNldAltaXBzMAorCQlsdWkJazEsICVoaShrZXJuZWxzcCkKKwkJc3JsCWswLCBrMCwgMTkKKwkJLyogTm8gbmVlZCB0byBzaGlmdCBkb3duIGFuZCB1cCB0byBjbGVhciBiaXRzIDAtMSAqLworI2Vsc2UKIAkJbWZjMAlrMCwgQ1AwX0NPTlRFWFQKIAkJbHVpCWsxLCAlaGkoa2VybmVsc3ApCiAJCXNybAlrMCwgazAsIDIzCisjZW5kaWYKIAkJYWRkdQlrMSwgazAKIAkJTE9OR19MCWsxLCAlbG8oa2VybmVsc3ApKGsxKQogI2VuZGlmCiAjaWZkZWYgQ09ORklHXzY0QklUCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkuc2V0CW1pcHM2NAorCQltZmMwCWswLCBDUDBfVENCSU5EOworCQkuc2V0CW1pcHMwCisJCWx1aQlrMCwgJWhpZ2hlc3Qoa2VybmVsc3ApCisJCWRzcmwJazEsIDE5CisJCS8qIE5vIG5lZWQgdG8gc2hpZnQgZG93biBhbmQgdXAgdG8gY2xlYXIgYml0cyAwLTIgKi8KKyNlbHNlCiAJCU1GQzAJazEsIENQMF9DT05URVhUCiAJCWx1aQlrMCwgJWhpZ2hlc3Qoa2VybmVsc3ApCiAJCWRzcmwJazEsIDIzCkBAIC03MSwyMCArOTMsMzEgQEAKIAkJZHNsbAlrMCwgazAsIDE2CiAJCWRhZGRpdQlrMCwgJWhpKGtlcm5lbHNwKQogCQlkc2xsCWswLCBrMCwgMTYKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCWRhZGR1CWsxLCBrMSwgazAKIAkJTE9OR19MCWsxLCAlbG8oa2VybmVsc3ApKGsxKQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNldF9zYXZlZF9zcCBzdGFja3AgdGVtcCB0ZW1wMgogI2lmZGVmIENPTkZJR18zMkJJVAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJbWZjMAlcdGVtcCwgQ1AwX1RDQklORAorCQlzcmwJXHRlbXAsIDE5CisjZWxzZQogCQltZmMwCVx0ZW1wLCBDUDBfQ09OVEVYVAogCQlzcmwJXHRlbXAsIDIzCiAjZW5kaWYKKyNlbmRpZgogI2lmZGVmIENPTkZJR182NEJJVAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJbWZjMAlcdGVtcCwgQ1AwX1RDQklORAorCQlkc3JsCVx0ZW1wLCAxOQorI2Vsc2UKIAkJTUZDMAlcdGVtcCwgQ1AwX0NPTlRFWFQKIAkJZHNybAlcdGVtcCwgMjMKICNlbmRpZgorI2VuZGlmCiAJCUxPTkdfUwlcc3RhY2twLCBrZXJuZWxzcChcdGVtcCkKIAkJLmVuZG0KICNlbHNlCkBAIC0xMjIsMTAgKzE1NSwyNSBAQAogCQlQVFJfU1VCVSBzcCwgazEsIFBUX1NJWkUKIAkJTE9OR19TCWswLCBQVF9SMjkoc3ApCiAJCUxPTkdfUwkkMywgUFRfUjMoc3ApCisJCS8qCisJCSAqIFlvdSBtaWdodCB0aGluayB0aGF0IHlvdSBkb24ndCBuZWVkIHRvIHNhdmUgJDAsCisJCSAqIGJ1dCB0aGUgRlBVIGVtdWxhdG9yIGFuZCBnZGIgcmVtb3RlIGRlYnVnIHN0dWIKKwkJICogbmVlZCBpdCB0byBvcGVyYXRlIGNvcnJlY3RseQorCQkgKi8KIAkJTE9OR19TCSQwLCBQVF9SMChzcCkKIAkJbWZjMAl2MSwgQ1AwX1NUQVRVUwogCQlMT05HX1MJJDIsIFBUX1IyKHNwKQogCQlMT05HX1MJdjEsIFBUX1NUQVRVUyhzcCkKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS8qCisJCSAqIElkZWFsbHksIHRoZXNlIGluc3RydWN0aW9ucyB3b3VsZCBiZSBzaHVmZmxlZCBpbgorCQkgKiB0byBjb3ZlciB0aGUgcGlwZWxpbmUgZGVsYXkuCisJCSAqLworCQkuc2V0CW1pcHMzMgorCQltZmMwCXYxLCBDUDBfVENTVEFUVVMKKwkJLnNldAltaXBzMAorCQlMT05HX1MJdjEsIFBUX1RDU1RBVFVTKHNwKQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJTE9OR19TCSQ0LCBQVF9SNChzcCkKIAkJbWZjMAl2MSwgQ1AwX0NBVVNFCiAJCUxPTkdfUwkkNSwgUFRfUjUoc3ApCkBAIC0yMzQsMTQgKzI4MiwzNiBAQAogCQkuZW5kbQogCiAjZWxzZQorLyoKKyAqIEZvciBTTVRDIGtlcm5lbCwgZ2xvYmFsIElFIHNob3VsZCBiZSBsZWZ0IHNldCwgYW5kIGludGVycnVwdHMKKyAqIGNvbnRyb2xsZWQgZXhjbHVzaXZlbHkgdmlhIElYTVQuCisgKi8KIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyNkZWZpbmUgU1RBVE1BU0sgMHgxZQorI2Vsc2UKKyNkZWZpbmUgU1RBVE1BU0sgMHgxZgorI2VuZGlmCiAJCS5tYWNybwlSRVNUT1JFX1NPTUUKIAkJLnNldAlwdXNoCiAJCS5zZXQJcmVvcmRlcgogCQkuc2V0CW5vYXQKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS5zZXQJbWlwczMycjIKKwkJLyoKKwkJICogVGhpcyBtYXkgbm90IHJlYWxseSBiZSBuZWNlc3NhcnkgaWYgaW50cyBhcmUgYWxyZWFkeQorCQkgKiBpbmhpYml0ZWQgaGVyZS4KKwkJICovCisJCW1mYzAJdjAsIENQMF9UQ1NUQVRVUworCQlvcmkJdjAsIFRDU1RBVFVTX0lYTVQKKwkJbXRjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCWVoYgorCQlETVQJNQkJCQkjIGRtdCBhMQorCQlqYWwJbWlwc19paGIKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCW1mYzAJYTAsIENQMF9TVEFUVVMKLQkJb3JpCWEwLCAweDFmCi0JCXhvcmkJYTAsIDB4MWYKKwkJb3JpCWEwLCBTVEFUTUFTSworCQl4b3JpCWEwLCBTVEFUTUFTSwogCQltdGMwCWEwLCBDUDBfU1RBVFVTCiAJCWxpCXYxLCAweGZmMDAKIAkJYW5kCWEwLCB2MQpAQCAtMjUwLDYgKzMyMCwyNiBAQAogCQlhbmQJdjAsIHYxCiAJCW9yCXYwLCBhMAogCQltdGMwCXYwLCBDUDBfU1RBVFVTCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworLyoKKyAqIE9ubHkgYWZ0ZXIgRVhML0VSTCBoYXZlIGJlZW4gcmVzdG9yZWQgdG8gc3RhdHVzIGNhbiB3ZQorICogcmVzdG9yZSBUQ1N0YXR1cy5JWE1ULgorICovCisJCUxPTkdfTAl2MSwgUFRfVENTVEFUVVMoc3ApCisJCWVoYgorCQltZmMwCXYwLCBDUDBfVENTVEFUVVMKKwkJYW5kaQl2MSwgVENTVEFUVVNfSVhNVAorCQkvKiBXZSBrbm93IHRoYXQgVENTdGF0dWEuSVhNVCBzaG91bGQgYmUgc2V0IGZyb20gYWJvdmUgKi8KKwkJeG9yaQl2MCwgdjAsIFRDU1RBVFVTX0lYTVQKKwkJb3IJdjAsIHYwLCB2MQorCQltdGMwCXYwLCBDUDBfVENTVEFUVVMKKwkJZWhiCisJCWFuZGkJYTEsIGExLCBWUEVDT05UUk9MX1RFCisJCWJlcXoJYTEsIDFmCisJCWVtdAorMToKKwkJLnNldAltaXBzMAorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJTE9OR19MCXYxLCBQVF9FUEMoc3ApCiAJCU1UQzAJdjEsIENQMF9FUEMKIAkJTE9OR19MCSQzMSwgUFRfUjMxKHNwKQpAQCAtMzAyLDExICszOTIsMzMgQEAKICAqIFNldCBjcDAgZW5hYmxlIGJpdCBhcyBzaWduIHRoYXQgd2UncmUgcnVubmluZyBvbiB0aGUga2VybmVsIHN0YWNrCiAgKi8KIAkJLm1hY3JvCUNMSQorI2lmICFkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCiAJCW1mYzAJdDAsIENQMF9TVEFUVVMKIAkJbGkJdDEsIFNUMF9DVTAgfCAweDFmCiAJCW9yCXQwLCB0MQogCQl4b3JpCXQwLCAweDFmCiAJCW10YzAJdDAsIENQMF9TVEFUVVMKKyNlbHNlIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwkJLyoKKwkJICogRm9yIFNNVEMsIHdlIG5lZWQgdG8gc2V0IHByaXZpbGVnZQorCQkgKiBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIG9ubHkgZm9yIHRoZQorCQkgKiBjdXJyZW50IFRDLCB1c2luZyB0aGUgVENTdGF0dXMgcmVnaXN0ZXIuCisJCSAqLworCQltZmMwCXQwLENQMF9UQ1NUQVRVUworCQkvKiBGb3J0dW5hdGVseSBDVSAwIGlzIGluIHRoZSBzYW1lIHBsYWNlIGluIGJvdGggcmVnaXN0ZXJzICovCisJCS8qIFNldCBUQ1UwLCBUTVgsIFRLU1UgKGZvciBsYXRlciBpbnZlcnNpb24pIGFuZCBJWE1UICovCisJCWxpCXQxLCBTVDBfQ1UwIHwgMHgwODAwMWMwMAorCQlvcgl0MCx0MQorCQkvKiBDbGVhciBUS1NVLCBsZWF2ZSBJWE1UICovCisJCXhvcmkJdDAsIDB4MDAwMDE4MDAKKwkJbXRjMAl0MCwgQ1AwX1RDU1RBVFVTCisJCWVoYgorCQkvKiBXZSBuZWVkIHRvIGxlYXZlIHRoZSBnbG9iYWwgSUUgYml0IHNldCwgYnV0IGNsZWFyIEVYTC4uLiovCisJCW1mYzAJdDAsIENQMF9TVEFUVVMKKwkJb3JpCXQwLCBTVDBfRVhMIHwgU1QwX0VSTAorCQl4b3JpCXQwLCBTVDBfRVhMIHwgU1QwX0VSTAorCQltdGMwCXQwLCBDUDBfU1RBVFVTCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlpcnFfZGlzYWJsZV9oYXphcmQKIAkJLmVuZG0KIApAQCAtMzE1LDExICs0MjcsMzUgQEAKICAqIFNldCBjcDAgZW5hYmxlIGJpdCBhcyBzaWduIHRoYXQgd2UncmUgcnVubmluZyBvbiB0aGUga2VybmVsIHN0YWNrCiAgKi8KIAkJLm1hY3JvCVNUSQorI2lmICFkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCiAJCW1mYzAJdDAsIENQMF9TVEFUVVMKIAkJbGkJdDEsIFNUMF9DVTAgfCAweDFmCiAJCW9yCXQwLCB0MQogCQl4b3JpCXQwLCAweDFlCiAJCW10YzAJdDAsIENQMF9TVEFUVVMKKyNlbHNlIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwkJLyoKKwkJICogRm9yIFNNVEMsIHdlIG5lZWQgdG8gc2V0IHByaXZpbGVnZQorCQkgKiBhbmQgZW5hYmxlIGludGVycnVwdHMgb25seSBmb3IgdGhlCisJCSAqIGN1cnJlbnQgVEMsIHVzaW5nIHRoZSBUQ1N0YXR1cyByZWdpc3Rlci4KKwkJICovCisJCWVoYgorCQltZmMwCXQwLENQMF9UQ1NUQVRVUworCQkvKiBGb3J0dW5hdGVseSBDVSAwIGlzIGluIHRoZSBzYW1lIHBsYWNlIGluIGJvdGggcmVnaXN0ZXJzICovCisJCS8qIFNldCBUQ1UwLCBUS1NVIChmb3IgbGF0ZXIgaW52ZXJzaW9uKSBhbmQgSVhNVCAqLworCQlsaQl0MSwgU1QwX0NVMCB8IDB4MDgwMDFjMDAKKwkJb3IJdDAsdDEKKwkJLyogQ2xlYXIgVEtTVSAqYW5kKiBJWE1UICovCisJCXhvcmkJdDAsIDB4MDAwMDFjMDAKKwkJbXRjMAl0MCwgQ1AwX1RDU1RBVFVTCisJCWVoYgorCQkvKiBXZSBuZWVkIHRvIGxlYXZlIHRoZSBnbG9iYWwgSUUgYml0IHNldCwgYnV0IGNsZWFyIEVYTC4uLiovCisJCW1mYzAJdDAsIENQMF9TVEFUVVMKKwkJb3JpCXQwLCBTVDBfRVhMCisJCXhvcmkJdDAsIFNUMF9FWEwKKwkJbXRjMAl0MCwgQ1AwX1NUQVRVUworCQkvKiBpcnFfZW5hYmxlX2hhemFyZCBiZWxvdyBzaG91bGQgZXhwYW5kIHRvIEVIQiBmb3IgMjRLLzM0SyBjcHVzICovCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlpcnFfZW5hYmxlX2hhemFyZAogCQkuZW5kbQogCkBAIC0zMjgsMTEgKzQ2NCw1NiBAQAogICogU2V0IGNwMCBlbmFibGUgYml0IGFzIHNpZ24gdGhhdCB3ZSdyZSBydW5uaW5nIG9uIHRoZSBrZXJuZWwgc3RhY2sKICAqLwogCQkubWFjcm8JS01PREUKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS8qCisJCSAqIFRoaXMgZ2V0cyBiYXJvcXVlIGluIFNNVEMuICBXZSB3YW50IHRvCisJCSAqIHByb3RlY3QgdGhlIG5vbi1hdG9taWMgY2xlYXJpbmcgb2YgRVhMCisJCSAqIHdpdGggRE1UL0VNVCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gdGFrZQorCQkgKiBhbiBpbnRlcnJ1cHQgd2hpbGUgRE1UIGlzIHN0aWxsIGluIGVmZmVjdC4KKwkJICovCisKKwkJLyogS01PREUgZ2V0cyBpbnZva2VkIGZyb20gYm90aCByZW9yZGVyIGFuZCBub3Jlb3JkZXIgY29kZSAqLworCQkuc2V0CXB1c2gKKwkJLnNldAltaXBzMzJyMgorCQkuc2V0CW5vcmVvcmRlcgorCQltZmMwCXYwLCBDUDBfVENTVEFUVVMKKwkJYW5kaQl2MSwgdjAsIFRDU1RBVFVTX0lYTVQKKwkJb3JpCXYwLCBUQ1NUQVRVU19JWE1UCisJCW10YzAJdjAsIENQMF9UQ1NUQVRVUworCQllaGIKKwkJRE1UCTIJCQkJIyBkbXQJdjAKKwkJLyoKKwkJICogV2UgZG9uJ3Qga25vdyBhIHByaW9yaSBpZiByYSBpcyAibGl2ZSIKKwkJICovCisJCW1vdmUJdDAsIHJhCisJCWphbAltaXBzX2loYgorCQlub3AJLyogZGVsYXkgc2xvdCAqLworCQltb3ZlCXJhLCB0MAorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJbWZjMAl0MCwgQ1AwX1NUQVRVUwogCQlsaQl0MSwgU1QwX0NVMCB8IDB4MWUKIAkJb3IJdDAsIHQxCiAJCXhvcmkJdDAsIDB4MWUKIAkJbXRjMAl0MCwgQ1AwX1NUQVRVUworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJZWhiCisJCWFuZGkJdjAsIHYwLCBWUEVDT05UUk9MX1RFCisJCWJlcXoJdjAsIDJmCisJCW5vcAkvKiBkZWxheSBzbG90ICovCisJCWVtdAorMjoKKwkJbWZjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCS8qIENsZWFyIElYTVQsIHRoZW4gT1IgaW4gcHJldmlvdXMgdmFsdWUgKi8KKwkJb3JpCXYwLCBUQ1NUQVRVU19JWE1UCisJCXhvcmkJdjAsIFRDU1RBVFVTX0lYTVQKKwkJb3IJdjAsIHYxLCB2MAorCQltdGMwCXYwLCBDUDBfVENTVEFUVVMKKwkJLyoKKwkJICogaXJxX2Rpc2FibGVfaGF6YXJkIGJlbG93IHNob3VsZCBleHBhbmQgdG8gRUhCCisJCSAqIG9uIDI0Sy8zNEsgQ1BVUworCQkgKi8KKwkJLnNldCBwb3AKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCWlycV9kaXNhYmxlX2hhemFyZAogCQkuZW5kbQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAppbmRleCA0MDk3ZmFjLi4yNjFmNzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKQEAgLTE1NSw2ICsxNTUsMzcgQEAKIAogc3RydWN0IHRhc2tfc3RydWN0OwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKworLyoKKyAqIEhhbmRsZSB0aGUgc2NoZWR1bGVyIHJlc3VtZSBlbmQgb2YgRlBVIGFmZmluaXR5IG1hbmFnZW1lbnQuICBXZSBkbyB0aGlzCisgKiBpbmxpbmUgdG8gdHJ5IHRvIGtlZXAgdGhlIG92ZXJoZWFkIGRvd24uIElmIHdlIGhhdmUgYmVlbiBmb3JjZWQgdG8gcnVuIG9uCisgKiBhICJDUFUiIHdpdGggYW4gRlBVIGJlY2F1c2Ugb2YgYSBwcmV2aW91cyBoaWdoIGxldmVsIG9mIEZQIGNvbXB1dGF0aW9uLAorICogYnV0IGRpZCBub3QgYWN0dWFsbHkgdXNlIHRoZSBGUFUgZHVyaW5nIHRoZSBtb3N0IHJlY2VudCB0aW1lLXNsaWNlIChDVTEKKyAqIGlzbid0IHNldCksIHdlIHVuZG8gdGhlIHJlc3RyaWN0aW9uIG9uIGNwdXNfYWxsb3dlZC4KKyAqCisgKiBXZSdyZSBub3QgY2FsbGluZyBzZXRfY3B1c19hbGxvd2VkKCkgaGVyZSwgYmVjYXVzZSB3ZSBoYXZlIG5vIG5lZWQgdG8KKyAqIGZvcmNlIHByb21wdCBtaWdyYXRpb24gLSB3ZSdyZSBhbHJlYWR5IHN3aXRjaGluZyB0aGUgY3VycmVudCBDUFUgdG8gYQorICogZGlmZmVyZW50IHRocmVhZC4KKyAqLworCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKGNwdV9oYXNfZnB1ICYmCQkJCQkJXAorCSAgICAocHJldi0+dGhyZWFkLm1mbGFncyAmIE1GX0ZQVUJPVU5EKSAmJgkJCVwKKwkgICAgICghKEtTVEtfU1RBVFVTKHByZXYpICYgU1QwX0NVMSkpKSB7CQkJXAorCQlwcmV2LT50aHJlYWQubWZsYWdzICY9IH5NRl9GUFVCT1VORDsJCQlcCisJCXByZXYtPmNwdXNfYWxsb3dlZCA9IHByZXYtPnRocmVhZC51c2VyX2NwdXNfYWxsb3dlZDsJXAorCX0JCQkJCQkJCVwKKwlpZiAoY3B1X2hhc19kc3ApCQkJCQkJXAorCQlfX3NhdmVfZHNwKHByZXYpOwkJCQkJXAorCW5leHQtPnRocmVhZC5lbXVsYXRlZF9mcCA9IDA7CQkJCQlcCisJKGxhc3QpID0gcmVzdW1lKHByZXYsIG5leHQsIG5leHQtPnRocmVhZF9pbmZvKTsJCQlcCisJaWYgKGNwdV9oYXNfZHNwKQkJCQkJCVwKKwkJX19yZXN0b3JlX2RzcChjdXJyZW50KTsJCQkJCVwKK30gd2hpbGUoMCkKKworI2Vsc2UKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlpZiAoY3B1X2hhc19kc3ApCQkJCQkJXApAQCAtMTYzLDYgKzE5NCw3IEBACiAJaWYgKGNwdV9oYXNfZHNwKQkJCQkJCVwKIAkJX19yZXN0b3JlX2RzcChjdXJyZW50KTsJCQkJCVwKIH0gd2hpbGUoMCkKKyNlbmRpZgogCiAvKgogICogT24gU01QIHN5c3RlbXMsIHdoZW4gdGhlIHNjaGVkdWxlciBkb2VzIG1pZ3JhdGlvbi1jb3N0IGF1dG9kZXRlY3Rpb24sCkBAIC00NDAsOCArNDcyLDggQEAKIGV4dGVybiB2b2lkIHNldF9oYW5kbGVyICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOwogZXh0ZXJuIHZvaWQgc2V0X3VuY2FjaGVkX2hhbmRsZXIgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CiBleHRlcm4gdm9pZCAqc2V0X3ZpX2hhbmRsZXIgKGludCBuLCB2b2lkICphZGRyKTsKLWV4dGVybiB2b2lkICpzZXRfdmlfc3JzX2hhbmRsZXIgKGludCBuLCB2b2lkICphZGRyLCBpbnQgcmVnc2V0KTsKIGV4dGVybiB2b2lkICpzZXRfZXhjZXB0X3ZlY3RvcihpbnQgbiwgdm9pZCAqYWRkcik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBlYmFzZTsKIGV4dGVybiB2b2lkIHBlcl9jcHVfdHJhcF9pbml0KHZvaWQpOwogCiBleHRlcm4gTk9SRVRfVFlQRSB2b2lkIGRpZShjb25zdCBjaGFyICosIHN0cnVjdCBwdF9yZWdzICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKaW5kZXggYjVjNzhhNC4uMTA2OGZlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCkBAIC0zMjQsMTYgKzMyNCwxOCBAQAogI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkJKF9fTlJfTGludXggKyAzMDEpCiAjZGVmaW5lIF9fTlJfcHBvbGwJCQkoX19OUl9MaW51eCArIDMwMikKICNkZWZpbmUgX19OUl91bnNoYXJlCQkJKF9fTlJfTGludXggKyAzMDMpCisjZGVmaW5lIF9fTlJfc3BsaWNlCQkJKF9fTlJfTGludXggKyAzMDQpCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCQkoX19OUl9MaW51eCArIDMwNSkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCBvMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzMDMKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzA1CiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCiAKICNkZWZpbmUgX19OUl9PMzJfTGludXgJCQk0MDAwCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMDMKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMJCTMwNQogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAogCkBAIC02MDQsMTYgKzYwNiwxOCBAQAogI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkJKF9fTlJfTGludXggKyAyNjApCiAjZGVmaW5lIF9fTlJfcHBvbGwJCQkoX19OUl9MaW51eCArIDI2MSkKICNkZWZpbmUgX19OUl91bnNoYXJlCQkJKF9fTlJfTGludXggKyAyNjIpCisjZGVmaW5lIF9fTlJfc3BsaWNlCQkJKF9fTlJfTGludXggKyAyNjMpCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCQkoX19OUl9MaW51eCArIDI2NCkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCA2NC1iaXQgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNjIKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjY0CiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCiAKICNkZWZpbmUgX19OUl82NF9MaW51eAkJCTUwMDAKLSNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjYyCisjZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTI2NAogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIApAQCAtODg4LDE2ICs4OTIsMTggQEAKICNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCShfX05SX0xpbnV4ICsgMjY0KQogI2RlZmluZSBfX05SX3Bwb2xsCQkJKF9fTlJfTGludXggKyAyNjUpCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCShfX05SX0xpbnV4ICsgMjY2KQorI2RlZmluZSBfX05SX3NwbGljZQkJCShfX05SX0xpbnV4ICsgMjY3KQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkJKF9fTlJfTGludXggKyAyNjgpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTjMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjY2CisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI2OAogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIgKi8KIAogI2RlZmluZSBfX05SX04zMl9MaW51eAkJCTYwMDAKLSNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI2NgorI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscwkJMjY4CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdnBlLmggYi9pbmNsdWRlL2FzbS1taXBzL3ZwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTFiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ZwZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9WUEVfSAorI2RlZmluZSBfQVNNX1ZQRV9ICisKK3N0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyB7CisJdm9pZCAoKnN0YXJ0KShpbnQgdnBlKTsKKwl2b2lkICgqc3RvcCkoaW50IHZwZSk7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisKK2V4dGVybiBpbnQgdnBlX25vdGlmeShpbnQgaW5kZXgsIHN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyAqbm90aWZ5KTsKKworZXh0ZXJuIHZvaWQgKnZwZV9nZXRfc2hhcmVkKGludCBpbmRleCk7CitleHRlcm4gaW50IHZwZV9nZXR1aWQoaW50IGluZGV4KTsKK2V4dGVybiBpbnQgdnBlX2dldGdpZChpbnQgaW5kZXgpOworZXh0ZXJuIGNoYXIgKnZwZV9nZXRjd2QoaW50IGluZGV4KTsKKworI2VuZGlmIC8qIF9BU01fVlBFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmgKaW5kZXggMjlkYTMxMS4uMjQ0ZjZiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmgKQEAgLTEyNiwyNCArMTI2LDE3IEBACiAKIGV4dGVybiB2b2lkIF9faW9tZW0gKiBfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKKy8qIE1vc3QgbWFjaGluZXMgcmVhY3QgcG9vcmx5IHRvIEkvTy1zcGFjZSBiZWluZyBjYWNoZWFibGUuLi4gSW5zdGVhZCBsZXQncworICogZGVmaW5lIGlvcmVtYXAoKSBpbiB0ZXJtcyBvZiBpb3JlbWFwX25vY2FjaGUoKS4KKyAqLwogZXh0ZXJuIGlubGluZSB2b2lkIF9faW9tZW0gKiBpb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIDApOworCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBfUEFHRV9OT19DQUNIRSk7CiB9Ci0KLS8qCi0gKiBUaGlzIG9uZSBtYXBzIGhpZ2ggYWRkcmVzcyBkZXZpY2UgbWVtb3J5IGFuZCB0dXJucyBvZmYgY2FjaGluZyBmb3IgdGhhdCBhcmVhLgotICogaXQncyB1c2VmdWwgaWYgc29tZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gc3VjaCBhbiBhcmVhIGFuZCB3cml0ZSBjb21iaW5pbmcKLSAqIG9yIHJlYWQgY2FjaGluZyBpcyBub3QgZGVzaXJhYmxlOgotICovCi1leHRlcm4gaW5saW5lIHZvaWQgKiBpb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLSAgICAgICAgcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIF9QQUdFX05PX0NBQ0hFIC8qIF9QQUdFX1BDRCAqLyk7Ci19CisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShvZmYsIHN6KQlpb3JlbWFwKChvZmYpLCAoc3opKQogCiBleHRlcm4gdm9pZCBpb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CiAKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIF9fcmF3X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2ZvcmNlICopIChhZGRyKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzY3NjUxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0vKiBNYXggOCBOb2RlcyAqLwotI2RlZmluZSBOT0RFU19TSElGVAkzCi0KLSNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaAppbmRleCA0NWUwMmFhLi5jMGRkNDYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmgKQEAgLTEsMTMgKzEsMzAgQEAKICNpZm5kZWYgX1BBUklTQ19QQUdFX0gKICNkZWZpbmUgX1BBUklTQ19QQUdFX0gKIAotLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KLSNkZWZpbmUgUEFHRV9TSElGVAkxMgotI2RlZmluZSBQQUdFX1NJWkUJKDFVTCA8PCBQQUdFX1NISUZUKQotI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQorI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pCisvKiB0aGlzIGlzIGZvciB1c2Vyc3BhY2UgYXBwbGljYXRpb25zICg0ayBwYWdlIHNpemUpICovCisjIGRlZmluZSBQQUdFX1NISUZUCTEyCS8qIDRrICovCisjIGRlZmluZSBQQUdFX1NJWkUJKDFVTCA8PCBQQUdFX1NISUZUKQorIyBkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKyNlbmRpZgorCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQikKKyMgZGVmaW5lIFBBR0VfU0hJRlQJMTIJLyogNGsgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfMTZLQikKKyMgZGVmaW5lIFBBR0VfU0hJRlQJMTQJLyogMTZrICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzY0S0IpCisjIGRlZmluZSBQQUdFX1NISUZUCTE2CS8qIDY0ayAqLworI2Vsc2UKKyMgZXJyb3IgInVua25vd24gZGVmYXVsdCBrZXJuZWwgcGFnZSBzaXplIgorI2VuZGlmCisjZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCisKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKaW5kZXggNGUzNGM2Yi4uYWVjMDg5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCkBAIC01OSwxNiArNTksMTUgQEAKICNkZWZpbmUgIElTVEFDS19TSVpFICAzMjc2OCAvKiBJbnRlcnJ1cHQgU3RhY2sgU2l6ZSAqLwogI2RlZmluZSAgSVNUQUNLX09SREVSIDMKIAotLyogVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbGx5IG1hcHBlZCBrZXJuZWwgbWVtb3J5IChpLmUuIGN1cnJlbnRseQotICogMCB0byAxPDwyMyA9PSA4TUIgKi8KKy8qIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGluaXRpYWxseSBtYXBwZWQga2VybmVsIG1lbW9yeSAqLwogI2lmZGVmIENPTkZJR182NEJJVAotI2RlZmluZSBLRVJORUxfSU5JVElBTF9PUkRFUgkyNAorI2RlZmluZSBLRVJORUxfSU5JVElBTF9PUkRFUgkyNAkvKiAwIHRvIDE8PDI0ID0gMTZNQiAqLwogI2Vsc2UKLSNkZWZpbmUgS0VSTkVMX0lOSVRJQUxfT1JERVIJMjMKKyNkZWZpbmUgS0VSTkVMX0lOSVRJQUxfT1JERVIJMjMJLyogMCB0byAxPDwyMyA9IDhNQiAqLwogI2VuZGlmCiAjZGVmaW5lIEtFUk5FTF9JTklUSUFMX1NJWkUJKDEgPDwgS0VSTkVMX0lOSVRJQUxfT1JERVIpCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfUEFSSVNDX1BBR0VfU0laRV80S0IpCiAjZGVmaW5lIFBUX05MRVZFTFMJMwogI2RlZmluZSBQR0RfT1JERVIJMSAvKiBOdW1iZXIgb2YgcGFnZXMgcGVyIHBnZCAqLwogI2RlZmluZSBQTURfT1JERVIJMSAvKiBOdW1iZXIgb2YgcGFnZXMgcGVyIHBtZCAqLwpAQCAtMTExLDExICsxMTAsMTUgQEAKICNkZWZpbmUgTUFYX0FERFJCSVRTCShQR0RJUl9TSElGVCArIEJJVFNfUEVSX1BHRCkKICNkZWZpbmUgTUFYX0FERFJFU1MJKDFVTCA8PCBNQVhfQUREUkJJVFMpCiAKLSNkZWZpbmUgU1BBQ0VJRF9TSElGVCAoTUFYX0FERFJCSVRTIC0gMzIpCisjZGVmaW5lIFNQQUNFSURfU0hJRlQJKE1BWF9BRERSQklUUyAtIDMyKQogCiAvKiBUaGlzIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBpbml0aWFsIHBhZ2VzIHdlIG5lZWQgZm9yIHRoZSBpbml0aWFsCiAgKiBwYWdlIHRhYmxlcyAqLwotI2RlZmluZSBQVF9JTklUSUFMCSgxIDw8IChLRVJORUxfSU5JVElBTF9PUkRFUiAtIFBNRF9TSElGVCkpCisjaWYgKEtFUk5FTF9JTklUSUFMX09SREVSKSA+PSAoUE1EX1NISUZUKQorIyBkZWZpbmUgUFRfSU5JVElBTAkoMSA8PCAoS0VSTkVMX0lOSVRJQUxfT1JERVIgLSBQTURfU0hJRlQpKQorI2Vsc2UKKyMgZGVmaW5lIFBUX0lOSVRJQUwJKDEpICAvKiBhbGwgaW5pdGlhbCBQVEVzIGZpdCBpbnRvIG9uZSBwYWdlICovCisjZW5kaWYKIAogLyoKICAqIHBnZCBlbnRyaWVzIHVzZWQgdXAgYnkgdXNlci9rZXJuZWw6CkBAIC0xNjAsNiArMTYzLDEwIEBACiAgKiB0byB6ZXJvICovCiAjZGVmaW5lIFBURV9TSElGVAkgICAJeGxhdGVfcGFiaXQoX1BBR0VfVVNFUl9CSVQpCiAKKy8qIFBGTl9QVEVfU0hJRlQgZGVmaW5lcyB0aGUgc2hpZnQgb2YgYSBQVEUgdmFsdWUgdG8gYWNjZXNzIHRoZSBQRk4gZmllbGQgKi8KKyNkZWZpbmUgUEZOX1BURV9TSElGVAkJMTIKKworCiAvKiB0aGlzIGlzIGhvdyBtYW55IGJpdHMgbWF5IGJlIHVzZWQgYnkgdGhlIGZpbGUgZnVuY3Rpb25zICovCiAjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCShCSVRTX1BFUl9MT05HIC0gUFRFX1NISUZUKQogCkBAIC0xODgsNyArMTk1LDggQEAKIC8qIFRoZSBwZ2QvcG1kIGNvbnRhaW5zIGEgcHRyIChpbiBwaHlzIGFkZHIgc3BhY2UpOyBzaW5jZSBhbGwgcGdkcy9wbWRzCiAgKiBhcmUgcGFnZS1hbGlnbmVkLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBQQUdFX09GRlNFVCBiaXRzLCBleGNlcHQKICAqIGZvciBhIGZldyBtZXRhLWluZm9ybWF0aW9uIGJpdHMsIHNvIHdlIHNoaWZ0IHRoZSBhZGRyZXNzIHRvIGJlCi0gKiBhYmxlIHRvIGVmZmVjdGl2ZWx5IGFkZHJlc3MgNDAtYml0cyBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqLworICogYWJsZSB0byBlZmZlY3RpdmVseSBhZGRyZXNzIDQwLzQyLzQ0LWJpdHMgb2YgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorICogZGVwZW5kaW5nIG9uIDRrLzE2ay82NGsgUEFHRV9TSVpFICovCiAjZGVmaW5lIF9QeERfUFJFU0VOVF9CSVQgICAzMQogI2RlZmluZSBfUHhEX0FUVEFDSEVEX0JJVCAgMzAKICNkZWZpbmUgX1B4RF9WQUxJRF9CSVQgICAgIDI5CkBAIC0xOTgsNyArMjA2LDcgQEAKICNkZWZpbmUgUHhEX0ZMQUdfVkFMSUQgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1B4RF9WQUxJRF9CSVQpKQogI2RlZmluZSBQeERfRkxBR19NQVNLICAgICAoMHhmKQogI2RlZmluZSBQeERfRkxBR19TSElGVCAgICAoNCkKLSNkZWZpbmUgUHhEX1ZBTFVFX1NISUZUICAgKDgpCisjZGVmaW5lIFB4RF9WQUxVRV9TSElGVCAgICg4KSAvKiAoUEFHRV9TSElGVC1QeERfRkxBR19TSElGVCkgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMjQ2LDYgKzI1NCw3IEBACiAjZGVmaW5lIF9fUzExMCAgUEFHRV9SV1gKICNkZWZpbmUgX19TMTExICBQQUdFX1JXWAogCisKIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltdOyAvKiBkZWNsYXJlZCBpbiBpbml0X3Rhc2suYyAqLwogCiAvKiBpbml0aWFsIHBhZ2UgdGFibGVzIGZvciAwLThNQiBmb3Iga2VybmVsICovCkBAIC0yNzIsNyArMjgxLDcgQEAKICNkZWZpbmUgcGdkX2ZsYWcoeCkJKHBnZF92YWwoeCkgJiBQeERfRkxBR19NQVNLKQogI2RlZmluZSBwZ2RfYWRkcmVzcyh4KQkoKHVuc2lnbmVkIGxvbmcpKHBnZF92YWwoeCkgJn4gUHhEX0ZMQUdfTUFTSykgPDwgUHhEX1ZBTFVFX1NISUZUKQogCi0jaWZkZWYgQ09ORklHXzY0QklUCisjaWYgUFRfTkxFVkVMUyA9PSAzCiAvKiBUaGUgZmlyc3QgZW50cnkgb2YgdGhlIHBlcm1hbmVudCBwbWQgaXMgbm90IHRoZXJlIGlmIGl0IGNvbnRhaW5zCiAgKiB0aGUgZ2F0ZXdheSBtYXJrZXIgKi8KICNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKHgpIHx8IHBtZF9mbGFnKHgpID09IFB4RF9GTEFHX0FUVEFDSEVEKQpAQCAtMjgyLDcgKzI5MSw3IEBACiAjZGVmaW5lIHBtZF9iYWQoeCkJKCEocG1kX2ZsYWcoeCkgJiBQeERfRkxBR19WQUxJRCkpCiAjZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfZmxhZyh4KSAmIFB4RF9GTEFHX1BSRVNFTlQpCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICpwbWQpIHsKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZiBQVF9OTEVWRUxTID09IDMKIAlpZiAocG1kX2ZsYWcoKnBtZCkgJiBQeERfRkxBR19BVFRBQ0hFRCkKIAkJLyogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnRpbmcgdG8gdGhlIHBlcm1hbmVudCBwbWQKIAkJICogYXR0YWNoZWQgdG8gdGhlIHBnZDsgY2Fubm90IGNsZWFyIGl0ICovCkBAIC0zMDMsNyArMzEyLDcgQEAKICNkZWZpbmUgcGdkX2JhZCh4KSAgICAgICghKHBnZF9mbGFnKHgpICYgUHhEX0ZMQUdfVkFMSUQpKQogI2RlZmluZSBwZ2RfcHJlc2VudCh4KSAgKHBnZF9mbGFnKHgpICYgUHhEX0ZMQUdfUFJFU0VOVCkKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKnBnZCkgewotI2lmZGVmIENPTkZJR182NEJJVAorI2lmIFBUX05MRVZFTFMgPT0gMwogCWlmKHBnZF9mbGFnKCpwZ2QpICYgUHhEX0ZMQUdfQVRUQUNIRUQpCiAJCS8qIFRoaXMgaXMgdGhlIHBlcm1hbmVudCBwbWQgYXR0YWNoZWQgdG8gdGhlIHBnZDsgY2Fubm90CiAJCSAqIGZyZWUgaXQgKi8KQEAgLTM1MSw3ICszNjAsNyBAQAogKHsJCQkJCQkJCQlcCiAJcHRlX3QgX19wdGU7CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwdGVfdmFsKF9fcHRlKSA9ICgoYWRkcikrcGdwcm90X3ZhbChwZ3Byb3QpKTsJCQlcCisJcHRlX3ZhbChfX3B0ZSkgPSAoKCgoYWRkcik+PlBBR0VfU0hJRlQpPDxQRk5fUFRFX1NISUZUKSArIHBncHJvdF92YWwocGdwcm90KSk7CVwKIAkJCQkJCQkJCVwKIAlfX3B0ZTsJCQkJCQkJCVwKIH0pCkBAIC0zNjEsMjAgKzM3MCwxNiBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwZ3Byb3QpCiB7CiAJcHRlX3QgcHRlOwotCXB0ZV92YWwocHRlKSA9IChwZm4gPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCk7CisJcHRlX3ZhbChwdGUpID0gKHBmbiA8PCBQRk5fUFRFX1NISUZUKSB8IHBncHJvdF92YWwocGdwcm90KTsKIAlyZXR1cm4gcHRlOwogfQogCi0vKiBUaGlzIHRha2VzIGEgcGh5c2ljYWwgcGFnZSBhZGRyZXNzIHRoYXQgaXMgdXNlZCBieSB0aGUgcmVtYXBwaW5nIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBta19wdGVfcGh5cyhwaHlzcGFnZSwgcGdwcm90KSBcCi0oeyBwdGVfdCBfX3B0ZTsgcHRlX3ZhbChfX3B0ZSkgPSBwaHlzcGFnZSArIHBncHJvdF92YWwocGdwcm90KTsgX19wdGU7IH0pCi0KIGV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCiB7IHB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOyByZXR1cm4gcHRlOyB9CiAKIC8qIFBlcm1hbmVudCBhZGRyZXNzIG9mIGEgcGFnZS4gIE9uIHBhcmlzYyB3ZSBkb24ndCBoYXZlIGhpZ2htZW0uICovCiAKLSNkZWZpbmUgcHRlX3Bmbih4KSAocHRlX3ZhbCh4KSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwdGVfcGZuKHgpCQkocHRlX3ZhbCh4KSA+PiBQRk5fUFRFX1NISUZUKQogCiAjZGVmaW5lIHB0ZV9wYWdlKHB0ZSkJCShwZm5fdG9fcGFnZShwdGVfcGZuKHB0ZSkpKQogCkBAIC00OTksNiArNTA0LDI2IEBACiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKKworLyogVExCIHBhZ2Ugc2l6ZSBlbmNvZGluZyAtIHNlZSB0YWJsZSAzLTEgaW4gcGFyaXNjMjAucGRmICovCisjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfNEsJCTAKKyNkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR18xNksJMQorI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzY0SwkyCisjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfMjU2SwkzCisjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfMU0JCTQKKyNkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR180TQkJNQorI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzE2TQk2CisjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfNjRNCTcKKworI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQorIyBkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxUIF9QQUdFX1NJWkVfRU5DT0RJTkdfNEsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfMTZLQikKKyMgZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfREVGQVVMVCBfUEFHRV9TSVpFX0VOQ09ESU5HXzE2SworI2VsaWYgZGVmaW5lZChDT05GSUdfUEFSSVNDX1BBR0VfU0laRV82NEtCKQorIyBkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxUIF9QQUdFX1NJWkVfRU5DT0RJTkdfNjRLCisjZW5kaWYKKworCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaAppbmRleCBjNTZmY2NiLi4wZTFhMzBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCkBAIC03ODAsOCArNzgwLDE0IEBACiAjZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJKF9fTlJfTGludXggKyAyODUpCiAjZGVmaW5lIF9fTlJfZmNobW9kYXQJCShfX05SX0xpbnV4ICsgMjg2KQogI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJKF9fTlJfTGludXggKyAyODcpCisjZGVmaW5lIF9fTlJfdW5zaGFyZQkJKF9fTlJfTGludXggKyAyODgpCisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CShfX05SX0xpbnV4ICsgMjg5KQorI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkoX19OUl9MaW51eCArIDI5MCkKKyNkZWZpbmUgX19OUl9zcGxpY2UJCShfX05SX0xpbnV4ICsgMjkxKQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkoX19OUl9MaW51eCArIDI5MikKKyNkZWZpbmUgX19OUl90ZWUJCShfX05SX0xpbnV4ICsgMjkzKQogCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgICAgIDI4OAorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzICAgICAyOTQKIAogI2RlZmluZSBIUFVYX0dBVEVXQVlfQUREUiAgICAgICAweEMwMDAwMDA0CiAjZGVmaW5lIExJTlVYX0dBVEVXQVlfQUREUiAgICAgIDB4MTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKaW5kZXggNDMyMTQ4My4uOWZjZjAxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBQUENfRkVBVFVSRV9CT09LRQkJMHgwMDAwODAwMAogI2RlZmluZSBQUENfRkVBVFVSRV9TTVQJCQkweDAwMDA0MDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX0lDQUNIRV9TTk9PUAkweDAwMDAyMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX0FSQ0hfMl8wNQkJMHgwMDAwMTAwMAogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTMyMCw2ICszMjEsMTEgQEAKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAogCSAgICBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSB8IENQVV9GVFJfTE9DS0xFU1NfVExCSUUgfCBcCiAJICAgIENQVV9GVFJfTU1DUkFfU0lIViB8IENQVV9GVFJfUFVSUikKKyNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI2IChDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCisJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IFwKKwkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAorCSAgICBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSB8IENQVV9GVFJfTE9DS0xFU1NfVExCSUUgfCBcCisJICAgIENQVV9GVFJfUFVSUiB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKICNkZWZpbmUgQ1BVX0ZUUlNfQ0VMTAkoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBcCiAJICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXApAQCAtMzMxLDggKzMzNyw4IEBACiAjaWZkZWYgX19wb3dlcnBjNjRfXwogI2RlZmluZSBDUFVfRlRSU19QT1NTSUJMRQlcCiAJICAgIChDUFVfRlRSU19QT1dFUjMgfCBDUFVfRlRSU19SUzY0IHwgQ1BVX0ZUUlNfUE9XRVI0IHwJXAotCSAgICBDUFVfRlRSU19QUEM5NzAgfCBDUFVfRlRSU19QT1dFUjUgfCBDUFVfRlRSU19DRUxMIHwJXAotICAgICAgICAgICAgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFKQorCSAgICBDUFVfRlRSU19QUEM5NzAgfCBDUFVfRlRSU19QT1dFUjUgfCBDUFVfRlRSU19QT1dFUjYgfAlcCisJICAgIENQVV9GVFJTX0NFTEwgfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UpCiAjZWxzZQogZW51bSB7CiAJQ1BVX0ZUUlNfUE9TU0lCTEUgPQpAQCAtMzc2LDggKzM4Miw4IEBACiAjaWZkZWYgX19wb3dlcnBjNjRfXwogI2RlZmluZSBDUFVfRlRSU19BTFdBWVMJCVwKIAkgICAgKENQVV9GVFJTX1BPV0VSMyAmIENQVV9GVFJTX1JTNjQgJiBDUFVfRlRSU19QT1dFUjQgJglcCi0JICAgIENQVV9GVFJTX1BQQzk3MCAmIENQVV9GVFJTX1BPV0VSNSAmIENQVV9GVFJTX0NFTEwgJglcCi0JICAgIENQVV9GVFJTX1BPU1NJQkxFKQorCSAgICBDUFVfRlRSU19QUEM5NzAgJiBDUFVfRlRSU19QT1dFUjUgJiBDUFVfRlRSU19QT1dFUjYgJglcCisJICAgIENQVV9GVFJTX0NFTEwgJiBDUFVfRlRSU19QT1NTSUJMRSkKICNlbHNlCiBlbnVtIHsKIAlDUFVfRlRSU19BTFdBWVMgPQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmgKaW5kZXggNTIwNzc1OC4uODY4YzcxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaC5oCkBAIC02MCwyNCArNjAsMTAgQEAKICAqIGRldmljZSAoaW5jbHVkaW5nIGNvbmZpZyBzcGFjZSBpL28pLiAgQ2FsbCBlZWhfYWRkX2RldmljZV9sYXRlCiAgKiB0byBmaW5pc2ggdGhlIGVlaCBzZXR1cCBmb3IgdGhpcyBkZXZpY2UuCiAgKi8KLXZvaWQgZWVoX2FkZF9kZXZpY2VfZWFybHkoc3RydWN0IGRldmljZV9ub2RlICopOwotdm9pZCBlZWhfYWRkX2RldmljZV9sYXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBlZWhfYWRkX2RldmljZV90cmVlX2Vhcmx5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKIHZvaWQgZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKHN0cnVjdCBwY2lfYnVzICopOwogCiAvKioKLSAqIGVlaF9yZW1vdmVfZGV2aWNlIC0gdW5kbyBFRUggc2V0dXAgZm9yIHRoZSBpbmRpY2F0ZWQgcGNpIGRldmljZQotICogQGRldjogcGNpIGRldmljZSB0byBiZSByZW1vdmVkCi0gKgotICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkIGZyb20KLSAqIGEgcnVubmluZyBzeXN0ZW0gKGUuZy4gYnkgaG90cGx1ZyBvciBkbHBhcikuICBJdCB1bnJlZ2lzdGVycwotICogdGhlIFBDSSBkZXZpY2UgZnJvbSB0aGUgRUVIIHN1YnN5c3RlbS4gIEkvTyBlcnJvcnMgYWZmZWN0aW5nCi0gKiB0aGlzIGRldmljZSB3aWxsIG5vIGxvbmdlciBiZSBkZXRlY3RlZCBhZnRlciB0aGlzIGNhbGw7IHRodXMsCi0gKiBpL28gZXJyb3JzIGFmZmVjdGluZyB0aGlzIHNsb3QgbWF5IGxlYXZlIHRoaXMgZGV2aWNlIHVudXNhYmxlLgotICovCi12b2lkIGVlaF9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICopOwotCi0vKioKICAqIGVlaF9yZW1vdmVfZGV2aWNlX3JlY3Vyc2l2ZSAtIHVuZG8gRUVIIGZvciBkZXZpY2UgJiBjaGlsZHJlbi4KICAqIEBkZXY6IHBjaSBkZXZpY2UgdG8gYmUgcmVtb3ZlZAogICoKQEAgLTExNiwxMiArMTAyLDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHBjaV9hZGRyX2NhY2hlX2J1aWxkKHZvaWQpIHsgfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZWVoX2FkZF9kZXZpY2VfZWFybHkoc3RydWN0IGRldmljZV9ub2RlICpkbikgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlZWhfYWRkX2RldmljZV9sYXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZWVoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikgeyB9Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBlZWhfYWRkX2RldmljZV90cmVlX2Vhcmx5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pIHsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKaW5kZXggYjcyYzA0Zi4uNmNjN2UxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oCkBAIC00LDQ3ICs0LDg4IEBACiAKICNkZWZpbmUgSFZTQwkJCS5sb25nIDB4NDQwMDAwMjIKIAotI2RlZmluZSBIX1N1Y2Nlc3MJMAotI2RlZmluZSBIX0J1c3kJCTEJLyogSGFyZHdhcmUgYnVzeSAtLSByZXRyeSBsYXRlciAqLwotI2RlZmluZSBIX0Nsb3NlZAkyCS8qIFJlc291cmNlIGNsb3NlZCAqLwotI2RlZmluZSBIX0NvbnN0cmFpbmVkCTQJLyogUmVzb3VyY2UgcmVxdWVzdCBjb25zdHJhaW5lZCB0byBtYXggYWxsb3dlZCAqLwotI2RlZmluZSBIX0luUHJvZ3Jlc3MgICAxNAkvKiBLaW5kIG9mIGxpa2UgYnVzeSAqLwotI2RlZmluZSBIX1BlbmRpbmcgICAgICAxNwkvKiByZXR1cm5lZCBmcm9tIEhfUE9MTF9QRU5ESU5HICovCi0jZGVmaW5lIEhfQ29udGludWUgICAgIDE4CS8qIFJldHVybmVkIGZyb20gSF9Kb2luIG9uIHN1Y2Nlc3MgKi8KLSNkZWZpbmUgSF9Mb25nQnVzeVN0YXJ0UmFuZ2UgICA5OTAwICAvKiBTdGFydCBvZiBsb25nIGJ1c3kgcmFuZ2UgKi8KLSNkZWZpbmUgSF9Mb25nQnVzeU9yZGVyMW1zZWMgICA5OTAwICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxbXNlYyBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLwotI2RlZmluZSBIX0xvbmdCdXN5T3JkZXIxMG1zZWMgIDk5MDEgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDEwbXNlYyBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLwotI2RlZmluZSBIX0xvbmdCdXN5T3JkZXIxMDBtc2VjIDk5MDIgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDEwMG1zZWMgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KLSNkZWZpbmUgSF9Mb25nQnVzeU9yZGVyMXNlYyAgICA5OTAzICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxc2VjIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCi0jZGVmaW5lIEhfTG9uZ0J1c3lPcmRlcjEwc2VjICAgOTkwNCAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMTBzZWMgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KLSNkZWZpbmUgSF9Mb25nQnVzeU9yZGVyMTAwc2VjICA5OTA1ICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxMDBzZWMgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KLSNkZWZpbmUgSF9Mb25nQnVzeUVuZFJhbmdlICAgICA5OTA1ICAvKiBFbmQgb2YgbG9uZyBidXN5IHJhbmdlICovCi0jZGVmaW5lIEhfSGFyZHdhcmUJLTEJLyogSGFyZHdhcmUgZXJyb3IgKi8KLSNkZWZpbmUgSF9GdW5jdGlvbgktMgkvKiBGdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIEhfUHJpdmlsZWdlCS0zCS8qIENhbGxlciBub3QgcHJpdmlsZWdlZCAqLwotI2RlZmluZSBIX1BhcmFtZXRlcgktNAkvKiBQYXJhbWV0ZXIgaW52YWxpZCwgb3V0LW9mLXJhbmdlIG9yIGNvbmZsaWN0aW5nICovCi0jZGVmaW5lIEhfQmFkX01vZGUJLTUJLyogSWxsZWdhbCBtc3IgdmFsdWUgKi8KLSNkZWZpbmUgSF9QVEVHX0Z1bGwJLTYJLyogUFRFRyBpcyBmdWxsICovCi0jZGVmaW5lIEhfTm90X0ZvdW5kCS03CS8qIFBURSB3YXMgbm90IGZvdW5kIiAqLwotI2RlZmluZSBIX1Jlc2VydmVkX0RBQlIJLTgJLyogREFCUiBhZGRyZXNzIGlzIHJlc2VydmVkIGJ5IHRoZSBoeXBlcnZpc29yIG9uIHRoaXMgcHJvY2Vzc29yIiAqLwotI2RlZmluZSBIX05vTWVtICAgICAgICAgICAgICAgICAtOQotI2RlZmluZSBIX0F1dGhvcml0eSAgICAgICAgICAgIC0xMAotI2RlZmluZSBIX1Blcm1pc3Npb24gICAgICAgICAgIC0xMQotI2RlZmluZSBIX0Ryb3BwZWQgICAgICAgICAgICAgIC0xMgotI2RlZmluZSBIX1NvdXJjZVBhcm0gICAgICAgICAgIC0xMwotI2RlZmluZSBIX0Rlc3RQYXJtICAgICAgICAgICAgIC0xNAotI2RlZmluZSBIX1JlbW90ZVBhcm0gICAgICAgICAgIC0xNQotI2RlZmluZSBIX1Jlc291cmNlICAgICAgICAgICAgIC0xNgorI2RlZmluZSBIX1NVQ0NFU1MJMAorI2RlZmluZSBIX0JVU1kJCTEJLyogSGFyZHdhcmUgYnVzeSAtLSByZXRyeSBsYXRlciAqLworI2RlZmluZSBIX0NMT1NFRAkyCS8qIFJlc291cmNlIGNsb3NlZCAqLworI2RlZmluZSBIX05PVF9BVkFJTEFCTEUgMworI2RlZmluZSBIX0NPTlNUUkFJTkVECTQJLyogUmVzb3VyY2UgcmVxdWVzdCBjb25zdHJhaW5lZCB0byBtYXggYWxsb3dlZCAqLworI2RlZmluZSBIX1BBUlRJQUwgICAgICAgNQorI2RlZmluZSBIX0lOX1BST0dSRVNTCTE0CS8qIEtpbmQgb2YgbGlrZSBidXN5ICovCisjZGVmaW5lIEhfUEFHRV9SRUdJU1RFUkVEIDE1CisjZGVmaW5lIEhfUEFSVElBTF9TVE9SRSAgIDE2CisjZGVmaW5lIEhfUEVORElORwkxNwkvKiByZXR1cm5lZCBmcm9tIEhfUE9MTF9QRU5ESU5HICovCisjZGVmaW5lIEhfQ09OVElOVUUJMTgJLyogUmV0dXJuZWQgZnJvbSBIX0pvaW4gb24gc3VjY2VzcyAqLworI2RlZmluZSBIX0xPTkdfQlVTWV9TVEFSVF9SQU5HRQkJOTkwMCAgLyogU3RhcnQgb2YgbG9uZyBidXN5IHJhbmdlICovCisjZGVmaW5lIEhfTE9OR19CVVNZX09SREVSXzFfTVNFQwk5OTAwICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxbXNlYyBcCisJCQkJCQkgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KKyNkZWZpbmUgSF9MT05HX0JVU1lfT1JERVJfMTBfTVNFQwk5OTAxICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxMG1zZWMgXAorCQkJCQkJIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCisjZGVmaW5lIEhfTE9OR19CVVNZX09SREVSXzEwMF9NU0VDIAk5OTAyICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxMDBtc2VjIFwKKwkJCQkJCSBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLworI2RlZmluZSBIX0xPTkdfQlVTWV9PUkRFUl8xX1NFQwkJOTkwMyAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMXNlYyBcCisJCQkJCQkgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KKyNkZWZpbmUgSF9MT05HX0JVU1lfT1JERVJfMTBfU0VDCTk5MDQgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDEwc2VjIFwKKwkJCQkJCSBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLworI2RlZmluZSBIX0xPTkdfQlVTWV9PUkRFUl8xMDBfU0VDCTk5MDUgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDEwMHNlYyBcCisJCQkJCQkgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KKyNkZWZpbmUgSF9MT05HX0JVU1lfRU5EX1JBTkdFCQk5OTA1ICAvKiBFbmQgb2YgbG9uZyBidXN5IHJhbmdlICovCisjZGVmaW5lIEhfSEFSRFdBUkUJLTEJLyogSGFyZHdhcmUgZXJyb3IgKi8KKyNkZWZpbmUgSF9GVU5DVElPTgktMgkvKiBGdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIEhfUFJJVklMRUdFCS0zCS8qIENhbGxlciBub3QgcHJpdmlsZWdlZCAqLworI2RlZmluZSBIX1BBUkFNRVRFUgktNAkvKiBQYXJhbWV0ZXIgaW52YWxpZCwgb3V0LW9mLXJhbmdlIG9yIGNvbmZsaWN0aW5nICovCisjZGVmaW5lIEhfQkFEX01PREUJLTUJLyogSWxsZWdhbCBtc3IgdmFsdWUgKi8KKyNkZWZpbmUgSF9QVEVHX0ZVTEwJLTYJLyogUFRFRyBpcyBmdWxsICovCisjZGVmaW5lIEhfTk9UX0ZPVU5ECS03CS8qIFBURSB3YXMgbm90IGZvdW5kIiAqLworI2RlZmluZSBIX1JFU0VSVkVEX0RBQlIJLTgJLyogREFCUiBhZGRyZXNzIGlzIHJlc2VydmVkIGJ5IHRoZSBoeXBlcnZpc29yIG9uIHRoaXMgcHJvY2Vzc29yIiAqLworI2RlZmluZSBIX05PX01FTQktOQorI2RlZmluZSBIX0FVVEhPUklUWQktMTAKKyNkZWZpbmUgSF9QRVJNSVNTSU9OCS0xMQorI2RlZmluZSBIX0RST1BQRUQJLTEyCisjZGVmaW5lIEhfU09VUkNFX1BBUk0JLTEzCisjZGVmaW5lIEhfREVTVF9QQVJNCS0xNAorI2RlZmluZSBIX1JFTU9URV9QQVJNCS0xNQorI2RlZmluZSBIX1JFU09VUkNFCS0xNgorI2RlZmluZSBIX0FEQVBURVJfUEFSTSAgLTE3CisjZGVmaW5lIEhfUkhfUEFSTSAgICAgICAtMTgKKyNkZWZpbmUgSF9SQ1FfUEFSTSAgICAgIC0xOQorI2RlZmluZSBIX1NDUV9QQVJNICAgICAgLTIwCisjZGVmaW5lIEhfRVFfUEFSTSAgICAgICAtMjEKKyNkZWZpbmUgSF9SVF9QQVJNICAgICAgIC0yMgorI2RlZmluZSBIX1NUX1BBUk0gICAgICAgLTIzCisjZGVmaW5lIEhfU0lHVF9QQVJNICAgICAtMjQKKyNkZWZpbmUgSF9UT0tFTl9QQVJNICAgIC0yNQorI2RlZmluZSBIX01MRU5HVEhfUEFSTSAgLTI3CisjZGVmaW5lIEhfTUVNX1BBUk0gICAgICAtMjgKKyNkZWZpbmUgSF9NRU1fQUNDRVNTX1BBUk0gLTI5CisjZGVmaW5lIEhfQVRUUl9QQVJNICAgICAtMzAKKyNkZWZpbmUgSF9QT1JUX1BBUk0gICAgIC0zMQorI2RlZmluZSBIX01DR19QQVJNICAgICAgLTMyCisjZGVmaW5lIEhfVkxfUEFSTSAgICAgICAtMzMKKyNkZWZpbmUgSF9UU0laRV9QQVJNICAgIC0zNAorI2RlZmluZSBIX1RSQUNFX1BBUk0gICAgLTM1CisKKyNkZWZpbmUgSF9NQVNLX1BBUk0gICAgIC0zNworI2RlZmluZSBIX01DR19GVUxMICAgICAgLTM4CisjZGVmaW5lIEhfQUxJQVNfRVhJU1QgICAtMzkKKyNkZWZpbmUgSF9QX0NPVU5URVIgICAgIC00MAorI2RlZmluZSBIX1RBQkxFX0ZVTEwgICAgLTQxCisjZGVmaW5lIEhfQUxUX1RBQkxFICAgICAtNDIKKyNkZWZpbmUgSF9NUl9DT05ESVRJT04gIC00MworI2RlZmluZSBIX05PVF9FTk9VR0hfUkVTT1VSQ0VTIC00NAorI2RlZmluZSBIX1JfU1RBVEUgICAgICAgLTQ1CisjZGVmaW5lIEhfUkVTQ0lOREVORCAgICAtNDYKKwogCiAvKiBMb25nIEJ1c3kgaXMgYSBjb25kaXRpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgYnkgdGhlIGZpcm13YXJlCiAgKiB3aGVuIGEgY2FsbCBjYW5ub3QgYmUgY29tcGxldGVkIG5vdywgYnV0IHRoZSBpZGVudGljYWwgY2FsbAogICogc2hvdWxkIGJlIHJldHJpZWQgbGF0ZXIuICBUaGlzIHByZXZlbnRzIGNhbGxzIGJsb2NraW5nIGluIHRoZQotICogZmlybXdhcmUgZm9yIGxvbmcgcGVyaW9kcyBvZiB0aW1lLiBBbm5veWluZ2x5IHRoZSBmaXJtd2FyZSBjYW4gcmV0dXJuCisgKiBmaXJtd2FyZSBmb3IgbG9uZyBwZXJpb2RzIG9mIHRpbWUuICBBbm5veWluZ2x5IHRoZSBmaXJtd2FyZSBjYW4gcmV0dXJuCiAgKiBhIHJhbmdlIG9mIHJldHVybiBjb2RlcywgaGludGluZyBhdCBob3cgbG9uZyB3ZSBzaG91bGQgd2FpdCBiZWZvcmUKICAqIHJldHJ5aW5nLiAgSWYgeW91IGRvbid0IGNhcmUgZm9yIHRoZSBoaW50LCB0aGUgbWFjcm8gYmVsb3cgaXMgYSBnb29kCiAgKiB3YXkgdG8gY2hlY2sgZm9yIHRoZSBsb25nX2J1c3kgcmV0dXJuIGNvZGVzCiAgKi8KLSNkZWZpbmUgSF9pc0xvbmdCdXN5KHgpICAoKHggPj0gSF9Mb25nQnVzeVN0YXJ0UmFuZ2UpICYmICh4IDw9IEhfTG9uZ0J1c3lFbmRSYW5nZSkpCisjZGVmaW5lIEhfSVNfTE9OR19CVVNZKHgpICAoKHggPj0gSF9MT05HX0JVU1lfU1RBUlRfUkFOR0UpIFwKKwkJCSAgICAgJiYgKHggPD0gSF9MT05HX0JVU1lfRU5EX1JBTkdFKSkKIAogLyogRmxhZ3MgKi8KICNkZWZpbmUgSF9MQVJHRV9QQUdFCQkoMVVMPDwoNjMtMTYpKQpAQCAtNjYsNiArMTA3LDkgQEAKICNkZWZpbmUgSF9EQUJSWF9LRVJORUwJCSgxVUw8PCg2My02MikpCiAjZGVmaW5lIEhfREFCUlhfVVNFUgkJKDFVTDw8KDYzLTYzKSkKIAorLyogRWFjaCBjb250cm9sIGJsb2NrIGhhcyB0byBiZSBvbiBhIDRLIGJvbmRhcnkgKi8KKyNkZWZpbmUgSF9DQl9BTElHTk1FTlQgICAgICAgICAgNDA5NgorCiAvKiBwU2VyaWVzIGh5cGVydmlzb3Igb3Bjb2RlcyAqLwogI2RlZmluZSBIX1JFTU9WRQkJMHgwNAogI2RlZmluZSBIX0VOVEVSCQkJMHgwOApAQCAtOTksMjUgKzE0Myw1MiBAQAogI2RlZmluZSBIX1BFUkZNT04JCTB4N2MKICNkZWZpbmUgSF9NSUdSQVRFX0RNQQkJMHg3OAogI2RlZmluZSBIX1JFR0lTVEVSX1ZQQQkJMHhEQwotI2RlZmluZSBIX0NFREUJCSAgICAgICAgMHhFMAorI2RlZmluZSBIX0NFREUJCQkweEUwCiAjZGVmaW5lIEhfQ09ORkVSCQkweEU0Ci0jZGVmaW5lIEhfUFJPRAkJICAgICAgICAweEU4CisjZGVmaW5lIEhfUFJPRAkJCTB4RTgKICNkZWZpbmUgSF9HRVRfUFBQCQkweEVDCiAjZGVmaW5lIEhfU0VUX1BQUAkJMHhGMAogI2RlZmluZSBIX1BVUlIJCQkweEY0Ci0jZGVmaW5lIEhfUElDCQkgICAgICAgIDB4RjgKKyNkZWZpbmUgSF9QSUMJCQkweEY4CiAjZGVmaW5lIEhfUkVHX0NSUQkJMHhGQwogI2RlZmluZSBIX0ZSRUVfQ1JRCQkweDEwMAogI2RlZmluZSBIX1ZJT19TSUdOQUwJCTB4MTA0CiAjZGVmaW5lIEhfU0VORF9DUlEJCTB4MTA4Ci0jZGVmaW5lIEhfQ09QWV9SRE1BICAgICAgICAgICAgIDB4MTEwCisjZGVmaW5lIEhfQ09QWV9SRE1BCQkweDExMAogI2RlZmluZSBIX1NFVF9YREFCUgkJMHgxMzQKICNkZWZpbmUgSF9TVFVGRl9UQ0UJCTB4MTM4CiAjZGVmaW5lIEhfUFVUX1RDRV9JTkRJUkVDVAkweDEzQwogI2RlZmluZSBIX1ZURVJNX1BBUlRORVJfSU5GTwkweDE1MAogI2RlZmluZSBIX1JFR0lTVEVSX1ZURVJNCTB4MTU0CiAjZGVmaW5lIEhfRlJFRV9WVEVSTQkJMHgxNTgKLSNkZWZpbmUgSF9QT0xMX1BFTkRJTkcJICAgICAgICAweDFEOAorI2RlZmluZSBIX1JFU0VUX0VWRU5UUyAgICAgICAgICAweDE1QworI2RlZmluZSBIX0FMTE9DX1JFU09VUkNFICAgICAgICAweDE2MAorI2RlZmluZSBIX0ZSRUVfUkVTT1VSQ0UgICAgICAgICAweDE2NAorI2RlZmluZSBIX01PRElGWV9RUCAgICAgICAgICAgICAweDE2OAorI2RlZmluZSBIX1FVRVJZX1FQICAgICAgICAgICAgICAweDE2QworI2RlZmluZSBIX1JFUkVHSVNURVJfUE1SICAgICAgICAweDE3MAorI2RlZmluZSBIX1JFR0lTVEVSX1NNUiAgICAgICAgICAweDE3NAorI2RlZmluZSBIX1FVRVJZX01SICAgICAgICAgICAgICAweDE3OAorI2RlZmluZSBIX1FVRVJZX01XICAgICAgICAgICAgICAweDE3QworI2RlZmluZSBIX1FVRVJZX0hDQSAgICAgICAgICAgICAweDE4MAorI2RlZmluZSBIX1FVRVJZX1BPUlQgICAgICAgICAgICAweDE4NAorI2RlZmluZSBIX01PRElGWV9QT1JUICAgICAgICAgICAweDE4OAorI2RlZmluZSBIX0RFRklORV9BUVAxICAgICAgICAgICAweDE4QworI2RlZmluZSBIX0dFVF9UUkFDRV9CVUZGRVIgICAgICAweDE5MAorI2RlZmluZSBIX0RFRklORV9BUVAwICAgICAgICAgICAweDE5NAorI2RlZmluZSBIX1JFU0laRV9NUiAgICAgICAgICAgICAweDE5OAorI2RlZmluZSBIX0FUVEFDSF9NQ1FQICAgICAgICAgICAweDE5QworI2RlZmluZSBIX0RFVEFDSF9NQ1FQICAgICAgICAgICAweDFBMAorI2RlZmluZSBIX0NSRUFURV9SUFQgICAgICAgICAgICAweDFBNAorI2RlZmluZSBIX1JFTU9WRV9SUFQgICAgICAgICAgICAweDFBOAorI2RlZmluZSBIX1JFR0lTVEVSX1JQQUdFUyAgICAgICAweDFBQworI2RlZmluZSBIX0RJU0FCTEVfQU5EX0dFVEMgICAgICAweDFCMAorI2RlZmluZSBIX0VSUk9SX0RBVEEgICAgICAgICAgICAweDFCNAorI2RlZmluZSBIX0dFVF9IQ0FfSU5GTyAgICAgICAgICAweDFCOAorI2RlZmluZSBIX0dFVF9QRVJGX0NPVU5UICAgICAgICAweDFCQworI2RlZmluZSBIX01BTkFHRV9UUkFDRSAgICAgICAgICAweDFDMAorI2RlZmluZSBIX1FVRVJZX0lOVF9TVEFURSAgICAgICAweDFFNAorI2RlZmluZSBIX1BPTExfUEVORElORwkJMHgxRDgKICNkZWZpbmUgSF9KT0lOCQkJMHgyOTgKICNkZWZpbmUgSF9FTkFCTEVfQ1JRCQkweDJCMAogCkBAIC0xNTIsNyArMjIzLDcgQEAKICAqLwogbG9uZyBwbHBhcl9oY2FsbF84YXJnXzJyZXQodW5zaWduZWQgbG9uZyBvcGNvZGUsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCi0JCSAgCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMywKIAkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNCwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNSwKQEAgLTE3Niw2ICsyNDcsNDIgQEAKIAkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0MywKIAkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0NCk7CiAKK2xvbmcgcGxwYXJfaGNhbGxfN2FyZ183cmV0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcxLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmczLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc0LAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc1LAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc2LAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc3LAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0MSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDIsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQzLAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0NCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDUsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQ2LAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0Nyk7CisKK2xvbmcgcGxwYXJfaGNhbGxfOWFyZ185cmV0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcxLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmczLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc0LAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc1LAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc2LAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc3LAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc4LAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmc5LAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0MSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDIsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQzLAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0NCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDUsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQ2LAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0NywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDgsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQ5KTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfSFZDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaW8uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW8uaAppbmRleCA2OGVmYmVhLi5mMWMyNDY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oCkBAIC05LDYgKzksOSBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisvKiBDaGVjayBvZiBleGlzdGVuY2Ugb2YgbGVnYWN5IGRldmljZXMgKi8KK2V4dGVybiBpbnQgY2hlY2tfbGVnYWN5X2lvcG9ydCh1bnNpZ25lZCBsb25nIGJhc2VfcG9ydCk7CisKICNpZm5kZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSA8YXNtLXBwYy9pby5oPgogI2Vsc2UKQEAgLTQzNyw5ICs0NDAsNiBAQAogI2RlZmluZSBkbWFfY2FjaGVfd2JhY2soX3N0YXJ0LF9zaXplKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCxfc2l6ZSkJZG8geyB9IHdoaWxlICgwKQogCi0vKiBDaGVjayBvZiBleGlzdGVuY2Ugb2YgbGVnYWN5IGRldmljZXMgKi8KLWV4dGVybiBpbnQgY2hlY2tfbGVnYWN5X2lvcG9ydCh1bnNpZ25lZCBsb25nIGJhc2VfcG9ydCk7Ci0KIAogLyoKICAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaAppbmRleCBkNTY3N2NiLi4xOGNhMjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCkBAIC03MCwxNyArNzAsMTggQEAKIGV4dGVybiBzdHJ1Y3QgaW9tbXVfdGFibGUgKmlvbW11X2luaXRfdGFibGUoc3RydWN0IGlvbW11X3RhYmxlICogdGJsKTsKIAogZXh0ZXJuIGludCBpb21tdV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLCB1bnNpZ25lZCBsb25nIG1hc2ssCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CiBleHRlcm4gdm9pZCBpb21tdV91bm1hcF9zZyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCiAJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKIGV4dGVybiB2b2lkICppb21tdV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgc2l6ZV90IHNpemUsCi0JCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOworCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG1hc2ssIGdmcF90IGZsYWcpOwogZXh0ZXJuIHZvaWQgaW9tbXVfZnJlZV9jb2hlcmVudChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgc2l6ZV90IHNpemUsCiAJCXZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOwogZXh0ZXJuIGRtYV9hZGRyX3QgaW9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgdm9pZCAqdmFkZHIsCi0JCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCQlzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBtYXNrLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogZXh0ZXJuIHZvaWQgaW9tbXVfdW5tYXBfc2luZ2xlKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCiAJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAppbmRleCA1MWY4N2Q5Li43YmM2ZDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKQEAgLTU0LDYgKzU0LDEzIEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgdmlydF9pcnFfdG9fcmVhbF9tYXBbTlJfSVJRU107CiAKKy8qIFRoZSBtYXhpbXVtIHZpcnR1YWwgSVJRIG51bWJlciB0aGF0IHdlIHN1cHBvcnQuICBUaGlzCisgKiBjYW4gYmUgc2V0IGJ5IHRoZSBwbGF0Zm9ybSBhbmQgd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZQorICogdmFsdWUgb2YgX19pcnFfb2Zmc2V0X3ZhbHVlLiAgSXQgZGVmYXVsdHMgdG8gYW5kIGlzCisgKiBjYXBwZWQgYnkgKE5SX0lSUVMgLSAxKS4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB2aXJ0X2lycV9tYXg7CisKIC8qIENyZWF0ZSBhIG1hcHBpbmcgZm9yIGEgcmVhbF9pcnEgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgogICogUmV0dXJuIHRoZSB2aXJ0dWFsIGlycSBhcyBhIGNvbnZlbmllbmNlLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCmluZGV4IDVlZDg0NzYuLjBmOTI1NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCkBAIC0yNTMsNyArMjUzLDExIEBACiAKICNkZWZpbmUgX19tYWNoaW5lX2Rlc2MgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLm1hY2hpbmUuZGVzYyIpKSkKIAotI2RlZmluZSBkZWZpbmVfbWFjaGluZShuYW1lKSBzdHJ1Y3QgbWFjaGRlcF9jYWxscyBtYWNoXyMjbmFtZSBfX21hY2hpbmVfZGVzYyA9CisjZGVmaW5lIGRlZmluZV9tYWNoaW5lKG5hbWUpCQkJCQlcCisJZXh0ZXJuIHN0cnVjdCBtYWNoZGVwX2NhbGxzIG1hY2hfIyNuYW1lOwkJXAorCUVYUE9SVF9TWU1CT0wobWFjaF8jI25hbWUpOwkJCQlcCisJc3RydWN0IG1hY2hkZXBfY2FsbHMgbWFjaF8jI25hbWUgX19tYWNoaW5lX2Rlc2MgPQorCiAjZGVmaW5lIG1hY2hpbmVfaXMobmFtZSkgXAogCSh7IFwKIAkJZXh0ZXJuIHN0cnVjdCBtYWNoZGVwX2NhbGxzIG1hY2hfIyNuYW1lIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEzOGVkYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX01BWF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fUE9XRVJQQ19NQVhfTlVNTk9ERVNfSAotI2lmZGVmIF9fS0VSTkVMX18KLQotLyogTWF4IDE2IE5vZGVzICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTQKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZV82NC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlXzY0LmgKaW5kZXggM2ZiMDYxYi4uZWFiNzc5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlXzY0LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlXzY0LmgKQEAgLTEwMSw2ICsxMDEsNyBAQAogCQkgICAgICAgICAgICAgICAgICAgICAgLSAoMVUgPDwgR0VUX0hUTEJfQVJFQShhZGRyKSkpICYgMHhmZmZmKQogCiAjZGVmaW5lIEFSQ0hfSEFTX0hVR0VQQUdFX09OTFlfUkFOR0UKKyNkZWZpbmUgQVJDSF9IQVNfSFVHRVRMQl9GUkVFX1BHRF9SQU5HRQogI2RlZmluZSBBUkNIX0hBU19QUkVQQVJFX0hVR0VQQUdFX1JBTkdFCiAjZGVmaW5lIEFSQ0hfSEFTX1NFVENMRUFSX0hVR0VfUFRFCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKaW5kZXggYTAwZWUwMC4uOWYwOTE3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKQEAgLTE3LDExICsxNywxMyBAQAogI2RlZmluZSBQVEVfQ0FDSEVfTlVNCTAKICNkZWZpbmUgUE1EX0NBQ0hFX05VTQkxCiAjZGVmaW5lIFBHRF9DQUNIRV9OVU0JMgorI2RlZmluZSBIVUdFUFRFX0NBQ0hFX05VTSAzCiAjZWxzZQogI2RlZmluZSBQVEVfQ0FDSEVfTlVNCTAKICNkZWZpbmUgUE1EX0NBQ0hFX05VTQkxCiAjZGVmaW5lIFBVRF9DQUNIRV9OVU0JMQogI2RlZmluZSBQR0RfQ0FDSEVfTlVNCTAKKyNkZWZpbmUgSFVHRVBURV9DQUNIRV9OVU0gMgogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaAppbmRleCBmNDMxZDhiMC4uN2NmY2ZmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCkBAIC0xMTcsNiArMTE3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBzY2hlZF9saXN0OwogCWludCBudW1iZXI7CisJaW50IG5pZDsKIAl1MzIgaXNyYzsKIAl1MzIgbm9kZTsKIAl1NjQgZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaAppbmRleCA2NWY1YTdiLi5kMDc1NzI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKQEAgLTM2NSw4ICszNjUsMTEgQEAKICAqIHBvd2VycyBvZiAyIHdyaXRlcyB1bnRpbCBpdCByZWFjaGVzIHN1ZmZpY2llbnQgYWxpZ25tZW50KS4KICAqCiAgKiBCYXNlZCBvbiB0aGlzIHdlIGRpc2FibGUgdGhlIElQIGhlYWRlciBhbGlnbm1lbnQgaW4gbmV0d29yayBkcml2ZXJzLgorICogV2UgYWxzbyBtb2RpZnkgTkVUX1NLQl9QQUQgdG8gYmUgYSBjYWNoZWxpbmUgaW4gc2l6ZSwgdGh1cyBtYWludGFpbmluZworICogY2FjaGVsaW5lIGFsaWdubWVudCBvZiBidWZmZXJzLgogICovCi0jZGVmaW5lIE5FVF9JUF9BTElHTiAgIDAKKyNkZWZpbmUgTkVUX0lQX0FMSUdOCTAKKyNkZWZpbmUgTkVUX1NLQl9QQUQJTDFfQ0FDSEVfQllURVMKICNlbmRpZgogCiAjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Rlcm1iaXRzLmgKaW5kZXggZWJmNjA1NS4uNmQ1MzNiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGVybWJpdHMuaApAQCAtMTUzLDYgKzE1Myw3IEBACiAjZGVmaW5lIEhVUENMCTAwMDQwMDAwCiAKICNkZWZpbmUgQ0xPQ0FMCTAwMTAwMDAwCisjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLwogI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KIAogLyogY19sZmxhZyBiaXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmgKaW5kZXggZmZjNzQ2Mi4uODhiNTUzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaApAQCAtMzcsNiArMzcsOCBAQAogCWludAkJcHJlZW1wdF9jb3VudDsJCS8qIDAgPT4gcHJlZW1wdGFibGUsCiAJCQkJCQkgICA8MCA9PiBCVUcgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayByZXN0YXJ0X2Jsb2NrOworCXVuc2lnbmVkIGxvbmcJbG9jYWxfZmxhZ3M7CQkvKiBwcml2YXRlIGZsYWdzIGZvciB0aHJlYWQgKi8KKwogCS8qIGxvdyBsZXZlbCBmbGFncyAtIGhhcyBhdG9taWMgb3BlcmF0aW9ucyBkb25lIG9uIGl0ICovCiAJdW5zaWduZWQgbG9uZwlmbGFncyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogfTsKQEAgLTE0Myw2ICsxNDUsMTIgQEAKIAkJCQkgX1RJRl9ORUVEX1JFU0NIRUQgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9QRVJTWVNDQUxMX01BU0sJKF9USUZfUkVTVE9SRUFMTHxfVElGX05PRVJST1IpCiAKKy8qIEJpdHMgaW4gbG9jYWxfZmxhZ3MgKi8KKy8qIERvbid0IG1vdmUgVExGX05BUFBJTkcgd2l0aG91dCBhZGp1c3RpbmcgdGhlIGNvZGUgaW4gZW50cnlfMzIuUyAqLworI2RlZmluZSBUTEZfTkFQUElORwkJMAkvKiBpZGxlIHRocmVhZCBlbmFibGVkIE5BUCBtb2RlICovCisKKyNkZWZpbmUgX1RMRl9OQVBQSU5HCQkoMSA8PCBUTEZfTkFQUElORykKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKaW5kZXggMWUxOWNkMC4uODczNjJhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaApAQCAtNCw2ICs0LDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCitzdHJ1Y3Qgc3lzX2RldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKKwogI2lmZGVmIENPTkZJR19OVU1BCiAKICNpbmNsdWRlIDxhc20vbW16b25lLmg+CkBAIC0yNyw2ICszMCw4IEBACiAJcmV0dXJuIGZpcnN0X2NwdSh0bXApOwogfQogCitpbnQgb2Zfbm9kZV90b19uaWQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpOworCiAjZGVmaW5lIHBjaWJ1c190b19ub2RlKG5vZGUpICAgICgtMSkKICNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQkoY3B1X29ubGluZV9tYXApCiAKQEAgLTU3LDEwICs2MiwyOSBAQAogCiBleHRlcm4gdm9pZCBfX2luaXQgZHVtcF9udW1hX2NwdV90b3BvbG9neSh2b2lkKTsKIAorZXh0ZXJuIGludCBzeXNmc19hZGRfZGV2aWNlX3RvX25vZGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgaW50IG5pZCk7CitleHRlcm4gdm9pZCBzeXNmc19yZW1vdmVfZGV2aWNlX2Zyb21fbm9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBpbnQgbmlkKTsKKwogI2Vsc2UKIAorc3RhdGljIGlubGluZSBpbnQgb2Zfbm9kZV90b19uaWQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX251bWFfY3B1X3RvcG9sb2d5KHZvaWQpIHt9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX2FkZF9kZXZpY2VfdG9fbm9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBpbnQgbmlkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcmVtb3ZlX2RldmljZV9mcm9tX25vZGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkJCWludCBuaWQpCit7Cit9CisKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CiAKICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaAppbmRleCAzODcyZTkyLi5kODNmYzI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKICNkZWZpbmUgVkVSSUZZX1JFQUQJMAogI2RlZmluZSBWRVJJRllfV1JJVEUJMQpAQCAtMTc5LDkgKzE4MCwxMSBAQAogI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJCVwKICh7CQkJCQkJCQlcCiAJbG9uZyBfX3B1X2VycjsJCQkJCQlcCi0JbWlnaHRfc2xlZXAoKTsJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wdV9hZGRyID0gKHB0cik7CQlcCisJaWYgKCFpc19rZXJuZWxfYWRkcigodW5zaWduZWQgbG9uZylfX3B1X2FkZHIpKQkJXAorCQltaWdodF9zbGVlcCgpOwkJCQkJXAogCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQlcCi0JX19wdXRfdXNlcl9zaXplKCh4KSwgKHB0ciksIChzaXplKSwgX19wdV9lcnIpOwkJXAorCV9fcHV0X3VzZXJfc2l6ZSgoeCksIF9fcHVfYWRkciwgKHNpemUpLCBfX3B1X2Vycik7CVwKIAlfX3B1X2VycjsJCQkJCQlcCiB9KQogCkBAIC0yNTgsOSArMjYxLDExIEBACiAoewkJCQkJCQkJXAogCWxvbmcgX19ndV9lcnI7CQkJCQkJXAogCXVuc2lnbmVkIGxvbmcgX19ndV92YWw7CQkJCQlcCisJY29uc3QgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19ndV9hZGRyID0gKHB0cik7CVwKIAlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJXAotCW1pZ2h0X3NsZWVwKCk7CQkJCQkJXAotCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwgKHB0ciksIChzaXplKSwgX19ndV9lcnIpOwlcCisJaWYgKCFpc19rZXJuZWxfYWRkcigodW5zaWduZWQgbG9uZylfX2d1X2FkZHIpKQkJXAorCQltaWdodF9zbGVlcCgpOwkJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwgX19ndV9hZGRyLCAoc2l6ZSksIF9fZ3VfZXJyKTsJXAogCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJXAogCV9fZ3VfZXJyOwkJCQkJCVwKIH0pCkBAIC0yNzAsOSArMjc1LDExIEBACiAoewkJCQkJCQkJXAogCWxvbmcgX19ndV9lcnI7CQkJCQkJXAogCWxvbmcgbG9uZyBfX2d1X3ZhbDsJCQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X2FkZHIgPSAocHRyKTsJXAogCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQlcCi0JbWlnaHRfc2xlZXAoKTsJCQkJCQlcCi0JX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCAocHRyKSwgKHNpemUpLCBfX2d1X2Vycik7CVwKKwlpZiAoIWlzX2tlcm5lbF9hZGRyKCh1bnNpZ25lZCBsb25nKV9fZ3VfYWRkcikpCQlcCisJCW1pZ2h0X3NsZWVwKCk7CQkJCQlcCisJX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCBfX2d1X2FkZHIsIChzaXplKSwgX19ndV9lcnIpOwlcCiAJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQlcCiAJX19ndV9lcnI7CQkJCQkJXAogfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oCmluZGV4IDUzNmJhMDguLmVkZGUyNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaApAQCAtMzAyLDggKzMwMiwyOSBAQAogI2RlZmluZSBfX05SX3Bwb2xsCQkyODEKICNkZWZpbmUgX19OUl91bnNoYXJlCQkyODIKICNkZWZpbmUgX19OUl9zcGxpY2UJCTI4MworI2RlZmluZSBfX05SX3RlZQkJMjg0CisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTI4NQorI2RlZmluZSBfX05SX29wZW5hdAkJMjg2CisjZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg3CisjZGVmaW5lIF9fTlJfbWtub2RhdAkJMjg4CisjZGVmaW5lIF9fTlJfZmNob3duYXQJCTI4OQorI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjkwCisjaWZkZWYgX19wb3dlcnBjNjRfXworI2RlZmluZSBfX05SX25ld2ZzdGF0YXQJCTI5MQorI2Vsc2UKKyNkZWZpbmUgX19OUl9mc3RhdGF0NjQJCTI5MQorI2VuZGlmCisjZGVmaW5lIF9fTlJfdW5saW5rYXQJCTI5MgorI2RlZmluZSBfX05SX3JlbmFtZWF0CQkyOTMKKyNkZWZpbmUgX19OUl9saW5rYXQJCTI5NAorI2RlZmluZSBfX05SX3N5bWxpbmthdAkJMjk1CisjZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJMjk2CisjZGVmaW5lIF9fTlJfZmNobW9kYXQJCTI5NworI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJMjk4CisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTI5OQorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDAKIAotI2RlZmluZSBfX05SX3N5c2NhbGxzCQkyODQKKyNkZWZpbmUgX19OUl9zeXNjYWxscwkJMzAxCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fTlJfX2V4aXQgX19OUl9leGl0CkBAIC00NTYsNiArNDc3LDcgQEAKICNpZmRlZiBDT05GSUdfUFBDNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTkVXRlNUQVRBVAogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY29tbXByb2MuaCBiL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oCmluZGV4IDk3M2U2MDkuLjMxZjM2MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIENQTV9DUl9JTklUX1RYCQkoKHVzaG9ydCkweDAwMDIpCiAjZGVmaW5lIENQTV9DUl9IVU5UX01PREUJKCh1c2hvcnQpMHgwMDAzKQogI2RlZmluZSBDUE1fQ1JfU1RPUF9UWAkJKCh1c2hvcnQpMHgwMDA0KQorI2RlZmluZSBDUE1fQ1JfR1JBX1NUT1BfVFgJKCh1c2hvcnQpMHgwMDA1KQogI2RlZmluZSBDUE1fQ1JfUkVTVEFSVF9UWAkoKHVzaG9ydCkweDAwMDYpCiAjZGVmaW5lIENQTV9DUl9DTE9TRV9SWF9CRAkoKHVzaG9ydCkweDAwMDcpCiAjZGVmaW5lIENQTV9DUl9TRVRfR0FERFIJKCh1c2hvcnQpMHgwMDA4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2NwbTIuaCBiL2luY2x1ZGUvYXNtLXBwYy9jcG0yLmgKaW5kZXggYjYzOGI4Ny4uYzcwMzQ0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2NwbTIuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvY3BtMi5oCkBAIC02OSw3ICs2OSw3IEBACiAjZGVmaW5lIENQTV9DUl9JTklUX1RYCQkoKHVzaG9ydCkweDAwMDIpCiAjZGVmaW5lIENQTV9DUl9IVU5UX01PREUJKCh1c2hvcnQpMHgwMDAzKQogI2RlZmluZSBDUE1fQ1JfU1RPUF9UWAkJKCh1c2hvcnQpMHgwMDA0KQotI2RlZmluZSBDUE1fQ1JfR1JBX1NUT1BfVFggICAgICAoKHVzaG9ydCkweDAwMDUpCisjZGVmaW5lIENQTV9DUl9HUkFfU1RPUF9UWAkoKHVzaG9ydCkweDAwMDUpCiAjZGVmaW5lIENQTV9DUl9SRVNUQVJUX1RYCSgodXNob3J0KTB4MDAwNikKICNkZWZpbmUgQ1BNX0NSX1NFVF9HQUREUgkoKHVzaG9ydCkweDAwMDgpCiAjZGVmaW5lIENQTV9DUl9TVEFSVF9JRE1BCSgodXNob3J0KTB4MDAwOSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCmluZGV4IGE3MGJhMmUuLjBmYjY4YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaApAQCAtMjAsNiArMjAsNyBAQAogLyogVGhpcyBtdXN0IG1hdGNoIHdoYXQgaXMgaW4gYXJjaC9wcGMvTWFrZWZpbGUgKi8KICNkZWZpbmUgUEFHRV9PRkZTRVQJQ09ORklHX0tFUk5FTF9TVEFSVAogI2RlZmluZSBLRVJORUxCQVNFCVBBR0VfT0ZGU0VUCisjZGVmaW5lIGlzX2tlcm5lbF9hZGRyKHgpCSgoeCkgPj0gUEFHRV9PRkZTRVQpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmggYi9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oCmluZGV4IDRiOTRmNzAuLjQwZjE5N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaApAQCAtMzksNiArMzksOCBAQAogI2Vycm9yICJuZWVkIGRlZmluaXRpb24gb2YgcHBjX3N5c19kZXZpY2VzIgogI2VuZGlmCiAKKyNkZWZpbmUgUFBDX1NZU19JT1JFU09VUkNFX0ZJWFVQUEVECTB4MDAwMDAwMDEJCisKIHN0cnVjdCBwcGNfc3lzX3NwZWMgewogCS8qIFBQQyBzeXMgaXMgbWF0Y2hlZCB2aWEgKElEICYgbWFzaykgPT0gdmFsdWUsIGlkIGNvdWxkIGJlCiAJICogUFZSLCBTVlIsIElNTVIsICogZXRjLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oIGIvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oCmluZGV4IDAwYWQ5YzcuLjQ5NDRjMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcmVnX2Jvb2tlLmgKQEAgLTIzNyw2ICsyMzcsNyBAQAogI2VuZGlmCiAKIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgQ0NSMS4gKi8KKyNkZWZpbmUJQ0NSMV9EUEMJMHgwMDAwMDEwMCAvKiBEaXNhYmxlIEwxIEktQ2FjaGUvRC1DYWNoZSBwYXJpdHkgY2hlY2tpbmcgKi8KICNkZWZpbmUJQ0NSMV9UQ1MJMHgwMDAwMDA4MCAvKiBUaW1lciBDbG9jayBTZWxlY3QgKi8KIAogLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgTUNTUi4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCmluZGV4IGRlMWQ5OTIuLjM5OWJmMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19BUkNIX1MzOTBfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX1MzOTBfQVRPTUlDX18KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKIC8qCiAgKiAgaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaAogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvY2FjaGUuaAppbmRleCBlMjBjZGQ5Li5jZGY0MzFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jYWNoZS5oCkBAIC0xNiw0ICsxNiw2IEBACiAKICNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCTgKIAorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oIGIvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaAppbmRleCA0Y2JjMzM2Li4xNWZkMmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKQEAgLTE0LDEyICsxNCwxMiBAQAogI2luY2x1ZGUgPHR5cGVzLmg+CiAjZW5kaWYKIAotZXh0ZXJuIF9fdTggX2FzY2ViY181MDBbXTsgICAvKiBBU0NJSSAtPiBFQkNESUMgNTAwIGNvbnZlcnNpb24gdGFibGUgKi8KLWV4dGVybiBfX3U4IF9lYmNhc2NfNTAwW107ICAgLyogRUJDRElDIDUwMCAtPiBBU0NJSSBjb252ZXJzaW9uIHRhYmxlICovCi1leHRlcm4gX191OCBfYXNjZWJjW107ICAgLyogQVNDSUkgLT4gRUJDRElDIGNvbnZlcnNpb24gdGFibGUgKi8KLWV4dGVybiBfX3U4IF9lYmNhc2NbXTsgICAvKiBFQkNESUMgLT4gQVNDSUkgY29udmVyc2lvbiB0YWJsZSAqLwotZXh0ZXJuIF9fdTggX2ViY190b2xvd2VyW107IC8qIEVCQ0RJQyAtPiBsb3dlcmNhc2UgKi8KLWV4dGVybiBfX3U4IF9lYmNfdG91cHBlcltdOyAvKiBFQkNESUMgLT4gdXBwZXJjYXNlICovCitleHRlcm4gX191OCBfYXNjZWJjXzUwMFsyNTZdOyAgIC8qIEFTQ0lJIC0+IEVCQ0RJQyA1MDAgY29udmVyc2lvbiB0YWJsZSAqLworZXh0ZXJuIF9fdTggX2ViY2FzY181MDBbMjU2XTsgICAvKiBFQkNESUMgNTAwIC0+IEFTQ0lJIGNvbnZlcnNpb24gdGFibGUgKi8KK2V4dGVybiBfX3U4IF9hc2NlYmNbMjU2XTsgICAvKiBBU0NJSSAtPiBFQkNESUMgY29udmVyc2lvbiB0YWJsZSAqLworZXh0ZXJuIF9fdTggX2ViY2FzY1syNTZdOyAgIC8qIEVCQ0RJQyAtPiBBU0NJSSBjb252ZXJzaW9uIHRhYmxlICovCitleHRlcm4gX191OCBfZWJjX3RvbG93ZXJbMjU2XTsgLyogRUJDRElDIC0+IGxvd2VyY2FzZSAqLworZXh0ZXJuIF9fdTggX2ViY190b3VwcGVyWzI1Nl07IC8qIEVCQ0RJQyAtPiB1cHBlcmNhc2UgKi8KIAogc3RhdGljIGlubGluZSB2b2lkCiBjb2RlcGFnZV9jb252ZXJ0KGNvbnN0IF9fdTggKmNvZGVwYWdlLCB2b2xhdGlsZSBfX3U4ICogYWRkciwgdW5zaWduZWQgbG9uZyBucikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXMzOTAvZnV0ZXguaAppbmRleCA2YTMzMmE5Li4xODAyNzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCkBAIC0xLDYgKzEsMTIyIEBACi0jaWZuZGVmIF9BU01fRlVURVhfSAotI2RlZmluZSBfQVNNX0ZVVEVYX0gKKyNpZm5kZWYgX0FTTV9TMzkwX0ZVVEVYX0gKKyNkZWZpbmUgX0FTTV9TMzkwX0ZVVEVYX0gKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Z1dGV4Lmg+CisjaWZkZWYgX19LRVJORUxfXwogCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIF9fZnV0ZXhfYXRvbWljX2ZpeHVwIFwKKwkJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkJICAgICAiICAgLmFsaWduIDRcbiIJCQkJCVwKKwkJICAgICAiICAgLmxvbmcgIDBiLDRiLDJiLDRiLDNiLDRiXG4iCQkJXAorCQkgICAgICIucHJldmlvdXMiCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgX19mdXRleF9hdG9taWNfZml4dXAgXAorCQkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCQkgICAgICIgICAuYWxpZ24gOFxuIgkJCQkJXAorCQkgICAgICIgICAucXVhZCAgMGIsNGIsMmIsNGIsM2IsNGJcbiIJCQlcCisJCSAgICAgIi5wcmV2aW91cyIKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpCVwKKwlhc20gdm9sYXRpbGUoIiAgIHNhY2YgMjU2XG4iCQkJCQlcCisJCSAgICAgIjA6IGwgICAlMSwwKCU2KVxuIgkJCQlcCisJCSAgICAgIjE6ICIgaW5zbgkJCQkJCVwKKwkJICAgICAiMjogY3MgICUxLCUyLDAoJTYpXG4iCQkJCVwKKwkJICAgICAiMzogamwgIDFiXG4iCQkJCQlcCisJCSAgICAgIiAgIGxoaSAlMCwwXG4iCQkJCQlcCisJCSAgICAgIjQ6IHNhY2YgMFxuIgkJCQkJXAorCQkgICAgIF9fZnV0ZXhfYXRvbWljX2ZpeHVwCQkJCVwKKwkJICAgICA6ICI9ZCIgKHJldCksICI9JmQiIChvbGR2YWwpLCAiPSZkIiAobmV3dmFsKSwJXAorCQkgICAgICAgIj1tIiAoKnVhZGRyKQkJCQkJXAorCQkgICAgIDogIjAiICgtRUZBVUxUKSwgImQiIChvcGFyZyksICJhIiAodWFkZHIpLAkJXAorCQkgICAgICAgIm0iICgqdWFkZHIpIDogImNjIiApOworCitzdGF0aWMgaW5saW5lIGludCBmdXRleF9hdG9taWNfb3BfaW51c2VyIChpbnQgZW5jb2RlZF9vcCwgaW50IF9fdXNlciAqdWFkZHIpCit7CisJaW50IG9wID0gKGVuY29kZWRfb3AgPj4gMjgpICYgNzsKKwlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CisJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CisJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKKwlpbnQgb2xkdmFsID0gMCwgbmV3dmFsLCByZXQ7CisJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQorCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CisKKwlpZiAoISBhY2Nlc3Nfb2sgKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpbmNfcHJlZW1wdF9jb3VudCgpOworCisJc3dpdGNoIChvcCkgeworCWNhc2UgRlVURVhfT1BfU0VUOgorCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTVcbiIsCisJCQkJICByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FERDoKKwkJX19mdXRleF9hdG9taWNfb3AoImxyICUyLCUxXG5hciAlMiwlNVxuIiwKKwkJCQkgIHJldCwgb2xkdmFsLCBuZXd2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfT1I6CisJCV9fZnV0ZXhfYXRvbWljX29wKCJsciAlMiwlMVxub3IgJTIsJTVcbiIsCisJCQkJICByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FORE46CisJCV9fZnV0ZXhfYXRvbWljX29wKCJsciAlMiwlMVxubnIgJTIsJTVcbiIsCisJCQkJICByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX1hPUjoKKwkJX19mdXRleF9hdG9taWNfb3AoImxyICUyLCUxXG54ciAlMiwlNVxuIiwKKwkJCQkgIHJldCwgb2xkdmFsLCBuZXd2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJfQorCisJZGVjX3ByZWVtcHRfY291bnQoKTsKKworCWlmICghcmV0KSB7CisJCXN3aXRjaCAoY21wKSB7CisJCWNhc2UgRlVURVhfT1BfQ01QX0VROiByZXQgPSAob2xkdmFsID09IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9ORTogcmV0ID0gKG9sZHZhbCAhPSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTFQ6IHJldCA9IChvbGR2YWwgPCBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfR0U6IHJldCA9IChvbGR2YWwgPj0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xFOiByZXQgPSAob2xkdmFsIDw9IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9HVDogcmV0ID0gKG9sZHZhbCA+IGNtcGFyZyk7IGJyZWFrOworCQlkZWZhdWx0OiByZXQgPSAtRU5PU1lTOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyhpbnQgX191c2VyICp1YWRkciwgaW50IG9sZHZhbCwgaW50IG5ld3ZhbCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEgYWNjZXNzX29rIChWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCWFzbSB2b2xhdGlsZSgiICAgY3MgICAlMSwlNCwwKCU1KVxuIgorCQkgICAgICIwOiBsciAgICUwLCUxXG4iCisJCSAgICAgIjE6XG4iCisjaWZuZGVmIF9fczM5MHhfXworCQkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJCSAgICAgIiAgIC5sb25nICAwYiwxYlxuIgorCQkgICAgICIucHJldmlvdXMiCisjZWxzZSAvKiBfX3MzOTB4X18gKi8KKwkJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkgICAgICIgICAuYWxpZ24gOFxuIgorCQkgICAgICIgICAucXVhZCAgMGIsMWJcbiIKKwkJICAgICAiLnByZXZpb3VzIgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCQkgICAgIDogIj1kIiAocmV0KSwgIitkIiAob2xkdmFsKSwgIj1tIiAoKnVhZGRyKQorCQkgICAgIDogIjAiICgtRUZBVUxUKSwgImQiIChuZXd2YWwpLCAiYSIgKHVhZGRyKSwgIm0iICgqdWFkZHIpCisJCSAgICAgOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiBvbGR2YWw7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9TMzkwX0ZVVEVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oIGIvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKaW5kZXggZGIwNjA2Yy4uYmVhNzI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKQEAgLTk4LDggKzk4LDggQEAKICNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHhENTgKICNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweEQ2MAogI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLICAgICAgICAgICAgICAgIDB4RDY4Ci0jZGVmaW5lIF9fTENfQ1BVSUQgICAgICAgICAgICAgICAgICAgICAgMHhEOTAKLSNkZWZpbmUgX19MQ19DUFVBRERSICAgICAgICAgICAgICAgICAgICAweEQ5OAorI2RlZmluZSBfX0xDX0NQVUlECQkJMHhEODAKKyNkZWZpbmUgX19MQ19DUFVBRERSCQkJMHhEODgKICNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweERCOAogI2RlZmluZSBfX0xDX0pJRkZZX1RJTUVSCQkweERDMAogI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEREOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGVyY3B1LmgKaW5kZXggZTEwZWQ4Ny4uNDM2ZDIxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BlcmNwdS5oCkBAIC00Niw3ICs0Niw3IEBACiAjZGVmaW5lIHBlcmNwdV9tb2Rjb3B5KHBjcHVkc3QsIHNyYywgc2l6ZSkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IF9faTsJCQkJCVwKLQlmb3JfZWFjaF9jcHUoX19pKQkJCQkJXAorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShfX2kpCQkJCVwKIAkJbWVtY3B5KChwY3B1ZHN0KStfX3Blcl9jcHVfb2Zmc2V0W19faV0sCQlcCiAJCSAgICAgICAoc3JjKSwgKHNpemUpKTsJCQkJXAogfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCmluZGV4IDY1N2Q1ODIuLjQxYzI3OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaApAQCAtMjk2LDggKzI5NiwxNCBAQAogI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkzMDEKICNkZWZpbmUgX19OUl9wcG9sbAkJMzAyCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJMzAzCisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwNAorI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMDUKKyNkZWZpbmUgX19OUl9zcGxpY2UJCTMwNgorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkzMDcKKyNkZWZpbmUgX19OUl90ZWUJCTMwOAorI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkzMDkKIAotI2RlZmluZSBOUl9zeXNjYWxscyAzMDQKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzEwCiAKIC8qIAogICogVGhlcmUgYXJlIHNvbWUgc3lzdGVtIGNhbGxzIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9uIDY0IGJpdCwgc29tZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLXNoL251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3M2U4NWIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfQVNNX01BWF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fTUFYX05VTU5PREVTX0gKLQotLyogTWF4IDIgTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJMQotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAppbmRleCBmMmM4ZTE0Li4wNTUyMGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaApAQCAtMjkwLDcgKzI5MCw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlICAgIChfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgICAgICAgICAgKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODUKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCmluZGV4IDJhMWNmYTQuLjFmOGYzOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaApAQCAtMzMzLDcgKzMzMyw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlICAgIChfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgICAgICAgICAgKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMzExCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzExCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkzMTIKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkzMTMKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkzMTQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKaW5kZXggNjRlYzY0MC4uNDVhNTc2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgX19OUl9jYXBzZXQJCSAyMiAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwogI2RlZmluZSBfX05SX3NldHVpZCAgICAgICAgICAgICAgMjMgLyogSW1wbGVtZW50ZWQgdmlhIHNldHJldWlkIGluIFN1bk9TICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX2dldHVpZCAgICAgICAgICAgICAgMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX3RpbWUgYWxpYXMJIDI1ICAgIEVOT1NZUyB1bmRlciBTdW5PUwkJCSAgICovCisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJICAgICAgICAgMjUgLyogRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KICNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIDI3IC8qIEltcGxlbWVudGVkIHZpYSBzZXRpdGltZXIgaW4gU3VuT1MgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLwpAQCAtMTgwLDcgKzE4MCw3IEBACiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X2FmZmluaXR5IDE2MSAvKiBMaW51eCBzcGVjaWZpYywgZ2V0ZmggdW5kZXIgU3VuT1MgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfZ2V0ZG9tYWlubmFtZSAgICAgIDE2MiAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAgICAgIDE2MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfbmlfc3lzY2FsbAkxNjQgICAgRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KKy8qICNkZWZpbmUgX19OUl91dHJhcF9pbnN0YWxsICAgMTY0ICAgIExpbnV4IHNwYXJjNjQgc3BlY2lmaWMJCQkgICAqLwogI2RlZmluZSBfX05SX3F1b3RhY3RsICAgICAgICAgICAxNjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAgICAxNjYgLyogTGludXggc3BlY2lmaWMsIGV4cG9ydGZzIHVuZGVyIFN1bk9TICAgICAgICAqLwogI2RlZmluZSBfX05SX21vdW50ICAgICAgICAgICAgICAxNjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgICAgICAgICAgIDIyOSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAgICAgICAgIDIzMCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfdGltZSAgICAgICAgICAgICAgIDIzMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfb2xkc3RhdCAgICAgICAgIDIzMiAgICBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3BsaWNlICAgICAgICAgICAgIDIzMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc3RpbWUgICAgICAgICAgICAgIDIzMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgIDIzNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgIDIzNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNzEsNyArMjcxLDcgQEAKICNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgMjUyCiAjZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIDI1MwogI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAyNTQKLSNkZWZpbmUgX19OUl9hcGxpYiAgICAgICAgICAgICAgMjU1CisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTI1NQogI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU2CiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNTcKICNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjU4CkBAIC0yOTYsNyArMjk2LDcgQEAKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCTI3NwogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJMjc4CiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyNzkKLSNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODAKKyNkZWZpbmUgX19OUl90ZWUJCTI4MAogI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4MQogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4MgogI2RlZmluZSBfX05SX2tleWN0bAkJMjgzCkBAIC0zMTYsMTEgKzMxNiwxMyBAQAogI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkyOTcKICNkZWZpbmUgX19OUl9wcG9sbAkJMjk4CiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJMjk5CisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAorI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMDEKIAotLyogV0FSTklORzogWW91IE1BWSBOT1QgYWRkIHN5c2NhbGwgbnVtYmVycyBsYXJnZXIgdGhhbiAyOTksIHNpbmNlCisvKiBXQVJOSU5HOiBZb3UgTUFZIE5PVCBhZGQgc3lzY2FsbCBudW1iZXJzIGxhcmdlciB0aGFuIDMwMSwgc2luY2UKICAqICAgICAgICAgIGFsbCBvZiB0aGUgc3lzY2FsbCB0YWJsZXMgaW4gdGhlIFNwYXJjIGtlcm5lbCBhcmUKLSAqICAgICAgICAgIHNpemVkIHRvIGhhdmUgMjk5IGVudHJpZXMgKHN0YXJ0aW5nIGF0IHplcm8pLiAgVGhlcmVmb3JlCi0gKiAgICAgICAgICBmaW5kIGEgZnJlZSBzbG90IGluIHRoZSAwLTI5OSByYW5nZS4KKyAqICAgICAgICAgIHNpemVkIHRvIGhhdmUgMzAxIGVudHJpZXMgKHN0YXJ0aW5nIGF0IHplcm8pLiAgVGhlcmVmb3JlCisgKiAgICAgICAgICBmaW5kIGEgZnJlZSBzbG90IGluIHRoZSAwLTMwMSByYW5nZS4KICAqLwogCiAjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLG5hbWUpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3ZnYS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdmdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5ZDViMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3ZnYS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKglBY2Nlc3MgdG8gVkdBIHZpZGVvcmFtCisgKgorICoJKGMpIDE5OTggTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+CisgKi8KKworI2lmbmRlZiBfTElOVVhfQVNNX1ZHQV9IXworI2RlZmluZSBfTElOVVhfQVNNX1ZHQV9IXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgVlRfQlVGX0hBVkVfUlcKKworI3VuZGVmIHNjcl93cml0ZXcKKyN1bmRlZiBzY3JfcmVhZHcKKworc3RhdGljIGlubGluZSB2b2lkIHNjcl93cml0ZXcodTE2IHZhbCwgdTE2ICphZGRyKQoreworCUJVR19PTigobG9uZykgYWRkciA+PSAwKTsKKworCSphZGRyID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBzY3JfcmVhZHcoY29uc3QgdTE2ICphZGRyKQoreworCUJVR19PTigobG9uZykgYWRkciA+PSAwKTsKKworCXJldHVybiAqYWRkcjsKK30KKworI2RlZmluZSBWR0FfTUFQX01FTSh4LHMpICh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaAppbmRleCBjN2Q1ODA0Li5hOGQzOWYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oCkBAIC00LDcgKzQsMTQ2IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUENJCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaD4KKworLyogd2UgaW1wbGVtZW50IHRoZSBBUEkgYmVsb3cgaW4gdGVybXMgb2YgdGhlIGV4aXN0aW5nIFBDSSBvbmUsCisgKiBzbyBpbmNsdWRlIGl0ICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisvKiBuZWVkIHN0cnVjdCBwYWdlIGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlyZXR1cm4gcGNpX2RtYV9zdXBwb3J0ZWQodG9fcGNpX2RldihkZXYpLCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlyZXR1cm4gcGNpX3NldF9kbWFfbWFzayh0b19wY2lfZGV2KGRldiksIGRtYV9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAorCQkgICBnZnBfdCBmbGFnKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXJldHVybiBwY2lfaW9tbXVfb3BzLT5hbGxvY19jb25zaXN0ZW50KHRvX3BjaV9kZXYoZGV2KSwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCisJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudCh0b19wY2lfZGV2KGRldiksIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90CitkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXJldHVybiBwY2lfbWFwX3NpbmdsZSh0b19wY2lfZGV2KGRldiksIGNwdV9hZGRyLCBzaXplLCAoaW50KWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXBjaV91bm1hcF9zaW5nbGUodG9fcGNpX2RldihkZXYpLCBkbWFfYWRkciwgc2l6ZSwgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXJldHVybiBwY2lfbWFwX3BhZ2UodG9fcGNpX2RldihkZXYpLCBwYWdlLCBvZmZzZXQsIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcGNpX3VubWFwX3BhZ2UodG9fcGNpX2RldihkZXYpLCBkbWFfYWRkcmVzcywgc2l6ZSwgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcmV0dXJuIHBjaV9tYXBfc2codG9fcGNpX2RldihkZXYpLCBzZywgbmVudHMsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKKwkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfdW5tYXBfc2codG9fcGNpX2RldihkZXYpLCBzZywgbmh3ZW50cmllcywgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodG9fcGNpX2RldihkZXYpLCBkbWFfaGFuZGxlLAorCQkJCSAgICBzaXplLCAoaW50KWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh0b19wY2lfZGV2KGRldiksIGRtYV9oYW5kbGUsCisJCQkJICAgICAgIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdSh0b19wY2lfZGV2KGRldiksIHNnLCBuZWxlbXMsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZSh0b19wY2lfZGV2KGRldiksIHNnLCBuZWxlbXMsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIHBjaV9kbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcik7Cit9CisKICNlbHNlCiAKIHN0cnVjdCBkZXZpY2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BjaS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wY2kuaAppbmRleCA3YzVhNTg5Li5lMWVhNjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNpLmgKQEAgLTQyLDcgKzQyLDcgQEAKIHN0cnVjdCBwY2lfZGV2OwogCiBzdHJ1Y3QgcGNpX2lvbW11X29wcyB7Ci0Jdm9pZCAqKCphbGxvY19jb25zaXN0ZW50KShzdHJ1Y3QgcGNpX2RldiAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKik7CisJdm9pZCAqKCphbGxvY19jb25zaXN0ZW50KShzdHJ1Y3QgcGNpX2RldiAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgZ2ZwX3QpOwogCXZvaWQgKCpmcmVlX2NvbnNpc3RlbnQpKHN0cnVjdCBwY2lfZGV2ICosIHNpemVfdCwgdm9pZCAqLCBkbWFfYWRkcl90KTsKIAlkbWFfYWRkcl90ICgqbWFwX3NpbmdsZSkoc3RydWN0IHBjaV9kZXYgKiwgdm9pZCAqLCBzaXplX3QsIGludCk7CiAJdm9pZCAoKnVubWFwX3NpbmdsZSkoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwpAQCAtNTksNyArNTksNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKnBjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCiB7Ci0JcmV0dXJuIHBjaV9pb21tdV9vcHMtPmFsbG9jX2NvbnNpc3RlbnQoaHdkZXYsIHNpemUsIGRtYV9oYW5kbGUpOworCXJldHVybiBwY2lfaW9tbXVfb3BzLT5hbGxvY19jb25zaXN0ZW50KGh3ZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBHRlBfQVRPTUlDKTsKIH0KIAogLyogRnJlZSBhbmQgdW5tYXAgYSBjb25zaXN0ZW50IERNQSBidWZmZXIuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaAppbmRleCA4MjAzMmUxLi5iYWVmMTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKQEAgLTI2LDcgKzI2LDcgQEAKICNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKIGRvIHsJCQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAotCWZvcl9lYWNoX2NwdShfX2kpCQkJCQlcCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KF9faSkJCQkJXAogCQltZW1jcHkoKHBjcHVkc3QpK19fcGVyX2NwdV9vZmZzZXQoX19pKSwJCVwKIAkJICAgICAgIChzcmMpLCAoc2l6ZSkpOwkJCQlcCiB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAppbmRleCBjNDRlNzQ2Li5jZDQ2NGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaApAQCAtNjg5LDYgKzY4OSwyMyBAQAogI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQkJXAogCXNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpCiAKKyNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTU9WRV9QVEUKKyNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCQkJCVwKKyh7CQkJCQkJCQkJXAorIAlwdGVfdCBuZXdwdGUgPSAocHRlKTsJCQkJCQlcCisJaWYgKHRsYl90eXBlICE9IGh5cGVydmlzb3IgJiYgcHRlX3ByZXNlbnQocHRlKSkgewkJXAorCQl1bnNpZ25lZCBsb25nIHRoaXNfcGZuID0gcHRlX3BmbihwdGUpOwkJCVwKKwkJCQkJCQkJCVwKKwkJaWYgKHBmbl92YWxpZCh0aGlzX3BmbikgJiYJCQkJXAorCQkgICAgKCgob2xkX2FkZHIpIF4gKG5ld19hZGRyKSkgJiAoMSA8PCAxMykpKQkJXAorCQkJZmx1c2hfZGNhY2hlX3BhZ2VfYWxsKGN1cnJlbnQtPm1tLAkJXAorCQkJCQkgICAgICBwZm5fdG9fcGFnZSh0aGlzX3BmbikpOwlcCisJfQkJCQkJCQkJXAorCW5ld3B0ZTsJCQkJCQkJCVwKK30pCisjZW5kaWYKKwogZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzIwNDhdOwogZXh0ZXJuIHBtZF90IHN3YXBwZXJfbG93X3BtZF9kaXJbMjA0OF07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaAppbmRleCA5YWQ1ZDljLi5lM2E3YzQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCkBAIC0yMiw4ICsyMiw2IEBACiAvKiBMb2NhbCBjcHUgb25seS4gICovCiBleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9hbGwodm9pZCk7CiAKLWV4dGVybiB2b2lkIF9fZmx1c2hfdGxiX3BhZ2UodW5zaWduZWQgbG9uZyBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxvbmcgcik7Ci0KIGV4dGVybiB2b2lkIF9fZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiAKICNpZm5kZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKaW5kZXggYTI4NDk4Ni4uOTk4ZWY0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIF9fTlJfY2Fwc2V0CQkgMjIgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KICNkZWZpbmUgX19OUl9zZXR1aWQgICAgICAgICAgICAgIDIzIC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZXVpZCBpbiBTdW5PUyAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9nZXR1aWQgICAgICAgICAgICAgIDI0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl90aW1lIGFsaWFzCSAyNSAgICBFTk9TWVMgdW5kZXIgU3VuT1MJCQkgICAqLworI2RlZmluZSBfX05SX3Ztc3BsaWNlCSAgICAgICAgIDI1IC8qIEVOT1NZUyB1bmRlciBTdW5PUwkJCSAgICovCiAjZGVmaW5lIF9fTlJfcHRyYWNlICAgICAgICAgICAgICAyNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfYWxhcm0gICAgICAgICAgICAgICAyNyAvKiBJbXBsZW1lbnRlZCB2aWEgc2V0aXRpbWVyIGluIFN1bk9TICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJIDI4IC8qIENvbW1vbgkJCQkJICAgKi8KQEAgLTI1MCw3ICsyNTAsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19OUl90aW1lCQkyMzEgLyogTGludXggc3BhcmMzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2VuZGlmCi0vKiAjZGVmaW5lIF9fTlJfb2xkc3RhdCAgICAgICAgIDIzMiAgICBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3BsaWNlICAgICAgICAgICAgIDIzMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc3RpbWUgICAgICAgICAgICAgIDIzMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgIDIzNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgIDIzNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNzMsNyArMjczLDcgQEAKICNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgMjUyCiAjZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIDI1MwogI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAyNTQKLSNkZWZpbmUgX19OUl9hcGxpYiAgICAgICAgICAgICAgMjU1CisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTI1NQogI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU2CiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNTcKICNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjU4CkBAIC0yOTgsNyArMjk4LDcgQEAKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCTI3NwogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJMjc4CiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyNzkKLS8qI2RlZmluZSBfX05SX3N5c19zZXRhbHRyb290CTI4MCBhdmFpbGFibGUgKHdhcyBzZXRhbHRyb290KSAqLworI2RlZmluZSBfX05SX3RlZQkJMjgwCiAjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjgxCiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgyCiAjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODMKQEAgLTMxOCwxMSArMzE4LDEzIEBACiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTI5NwogI2RlZmluZSBfX05SX3Bwb2xsCQkyOTgKICNkZWZpbmUgX19OUl91bnNoYXJlCQkyOTkKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzAwCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwMQogCi0vKiBXQVJOSU5HOiBZb3UgTUFZIE5PVCBhZGQgc3lzY2FsbCBudW1iZXJzIGxhcmdlciB0aGFuIDI5OSwgc2luY2UKKy8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMzAxLCBzaW5jZQogICogICAgICAgICAgYWxsIG9mIHRoZSBzeXNjYWxsIHRhYmxlcyBpbiB0aGUgU3BhcmMga2VybmVsIGFyZQotICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAyOTkgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKLSAqICAgICAgICAgIGZpbmQgYSBmcmVlIHNsb3QgaW4gdGhlIDAtMjk5IHJhbmdlLgorICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAzMDEgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKKyAqICAgICAgICAgIGZpbmQgYSBmcmVlIHNsb3QgaW4gdGhlIDAtMzAxIHJhbmdlLgogICovCiAKICNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZGVzYy5oIGIvaW5jbHVkZS9hc20tdW0vZGVzYy5oCmluZGV4IGFjMWQyYTIuLjRlYzM0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2Rlc2MuaAorKysgYi9pbmNsdWRlL2FzbS11bS9kZXNjLmgKQEAgLTEsNiArMSwxNiBAQAogI2lmbmRlZiBfX1VNX0RFU0NfSAogI2RlZmluZSBfX1VNX0RFU0NfSAogCi0jaW5jbHVkZSAiYXNtL2FyY2gvZGVzYy5oIgorLyogVGFrZW4gZnJvbSBhc20taTM4Ni9kZXNjLmgsIGl0J3MgdGhlIG9ubHkgdGhpbmcgd2UgbmVlZC4gVGhlIHJlc3Qgd291bGRuJ3QKKyAqIGNvbXBpbGUsIGFuZCBoYXMgbmV2ZXIgYmVlbiB1c2VkLiAqLworI2RlZmluZSBMRFRfZW1wdHkoaW5mbykgKFwKKwkoaW5mbyktPmJhc2VfYWRkcgk9PSAwCSYmIFwKKwkoaW5mbyktPmxpbWl0CQk9PSAwCSYmIFwKKwkoaW5mbyktPmNvbnRlbnRzCT09IDAJJiYgXAorCShpbmZvKS0+cmVhZF9leGVjX29ubHkJPT0gMQkmJiBcCisJKGluZm8pLT5zZWdfMzJiaXQJPT0gMAkmJiBcCisJKGluZm8pLT5saW1pdF9pbl9wYWdlcwk9PSAwCSYmIFwKKwkoaW5mbyktPnNlZ19ub3RfcHJlc2VudAk9PSAxCSYmIFwKKwkoaW5mbyktPnVzZWFibGUJCT09IDAJKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2hvc3RfbGR0LWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL2hvc3RfbGR0LWkzODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjdjYjBhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaG9zdF9sZHQtaTM4Ni5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgX19BU01fSE9TVF9MRFRfSTM4Nl9ICisjZGVmaW5lIF9fQVNNX0hPU1RfTERUX0kzODZfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvbGR0LmgiCisKKy8qCisgKiBtYWNyb3Mgc3RvbGVuIGZyb20gaW5jbHVkZS9hc20taTM4Ni9kZXNjLmgKKyAqLworI2RlZmluZSBMRFRfZW50cnlfYShpbmZvKSBcCisJKCgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwMDBmZmZmKSA8PCAxNikgfCAoKGluZm8pLT5saW1pdCAmIDB4MGZmZmYpKQorCisjZGVmaW5lIExEVF9lbnRyeV9iKGluZm8pIFwKKwkoKChpbmZvKS0+YmFzZV9hZGRyICYgMHhmZjAwMDAwMCkgfCBcCisJKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDBmZjAwMDApID4+IDE2KSB8IFwKKwkoKGluZm8pLT5saW1pdCAmIDB4ZjAwMDApIHwgXAorCSgoKGluZm8pLT5yZWFkX2V4ZWNfb25seSBeIDEpIDw8IDkpIHwgXAorCSgoaW5mbyktPmNvbnRlbnRzIDw8IDEwKSB8IFwKKwkoKChpbmZvKS0+c2VnX25vdF9wcmVzZW50IF4gMSkgPDwgMTUpIHwgXAorCSgoaW5mbyktPnNlZ18zMmJpdCA8PCAyMikgfCBcCisJKChpbmZvKS0+bGltaXRfaW5fcGFnZXMgPDwgMjMpIHwgXAorCSgoaW5mbyktPnVzZWFibGUgPDwgMjApIHwgXAorCTB4NzAwMCkKKworI2RlZmluZSBMRFRfZW1wdHkoaW5mbykgKFwKKwkoaW5mbyktPmJhc2VfYWRkcgk9PSAwCSYmIFwKKwkoaW5mbyktPmxpbWl0CQk9PSAwCSYmIFwKKwkoaW5mbyktPmNvbnRlbnRzCT09IDAJJiYgXAorCShpbmZvKS0+cmVhZF9leGVjX29ubHkJPT0gMQkmJiBcCisJKGluZm8pLT5zZWdfMzJiaXQJPT0gMAkmJiBcCisJKGluZm8pLT5saW1pdF9pbl9wYWdlcwk9PSAwCSYmIFwKKwkoaW5mbyktPnNlZ19ub3RfcHJlc2VudAk9PSAxCSYmIFwKKwkoaW5mbyktPnVzZWFibGUJCT09IDAJKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2hvc3RfbGR0LXg4Nl82NC5oIGIvaW5jbHVkZS9hc20tdW0vaG9zdF9sZHQteDg2XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhNjNmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2hvc3RfbGR0LXg4Nl82NC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX19BU01fSE9TVF9MRFRfWDg2XzY0X0gKKyNkZWZpbmUgX19BU01fSE9TVF9MRFRfWDg2XzY0X0gKKworI2luY2x1ZGUgImFzbS9hcmNoL2xkdC5oIgorCisvKgorICogbWFjcm9zIHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLXg4Nl82NC9kZXNjLmgKKyAqLworI2RlZmluZSBMRFRfZW50cnlfYShpbmZvKSBcCisJKCgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwMDBmZmZmKSA8PCAxNikgfCAoKGluZm8pLT5saW1pdCAmIDB4MGZmZmYpKQorCisvKiBEb24ndCBhbGxvdyBzZXR0aW5nIG9mIHRoZSBsbSBiaXQuIEl0IGlzIHVzZWxlc3MgYW55d2F5cyBiZWNhdXNlCisgKiA2NGJpdCBzeXN0ZW0gY2FsbHMgcmVxdWlyZSBfX1VTRVJfQ1MuICovCisjZGVmaW5lIExEVF9lbnRyeV9iKGluZm8pIFwKKwkoKChpbmZvKS0+YmFzZV9hZGRyICYgMHhmZjAwMDAwMCkgfCBcCisJKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDBmZjAwMDApID4+IDE2KSB8IFwKKwkoKGluZm8pLT5saW1pdCAmIDB4ZjAwMDApIHwgXAorCSgoKGluZm8pLT5yZWFkX2V4ZWNfb25seSBeIDEpIDw8IDkpIHwgXAorCSgoaW5mbyktPmNvbnRlbnRzIDw8IDEwKSB8IFwKKwkoKChpbmZvKS0+c2VnX25vdF9wcmVzZW50IF4gMSkgPDwgMTUpIHwgXAorCSgoaW5mbyktPnNlZ18zMmJpdCA8PCAyMikgfCBcCisJKChpbmZvKS0+bGltaXRfaW5fcGFnZXMgPDwgMjMpIHwgXAorCSgoaW5mbyktPnVzZWFibGUgPDwgMjApIHwgXAorCS8qICgoaW5mbyktPmxtIDw8IDIxKSB8ICovIFwKKwkweDcwMDApCisKKyNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChcCisJKGluZm8pLT5iYXNlX2FkZHIJPT0gMAkmJiBcCisJKGluZm8pLT5saW1pdAkJPT0gMAkmJiBcCisJKGluZm8pLT5jb250ZW50cwk9PSAwCSYmIFwKKwkoaW5mbyktPnJlYWRfZXhlY19vbmx5CT09IDEJJiYgXAorCShpbmZvKS0+c2VnXzMyYml0CT09IDAJJiYgXAorCShpbmZvKS0+bGltaXRfaW5fcGFnZXMJPT0gMAkmJiBcCisJKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJiBcCisJKGluZm8pLT51c2VhYmxlCQk9PSAwCSYmIFwKKwkoaW5mbyktPmxtICAgICAgICAgICAgICA9PSAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS11bS9pcnFmbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OWI5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9pcnFmbGFncy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX0lSUUZMQUdTX0gKKyNkZWZpbmUgX19VTV9JUlFGTEFHU19ICisKKy8qIEVtcHR5IGZvciBub3cgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9sZHQtaTM4Ni5oIGIvaW5jbHVkZS9hc20tdW0vbGR0LWkzODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc1NzIyYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS11bS9sZHQtaTM4Ni5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBGdWppdHN1IFNpZW1lbnMgQ29tcHV0ZXJzIEdtYkgKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqCi0gKiBBdXRob3I6IEJvZG8gU3Ryb2Vzc2VyIDxic3Ryb2Vzc2VyQGZ1aml0c3Utc2llbWVucy5jb20+Ci0gKi8KLQotI2lmbmRlZiBfX0FTTV9MRFRfSTM4Nl9ICi0jZGVmaW5lIF9fQVNNX0xEVF9JMzg2X0gKLQotI2luY2x1ZGUgImFzbS9zZW1hcGhvcmUuaCIKLSNpbmNsdWRlICJhc20vYXJjaC9sZHQuaCIKLQotc3RydWN0IG1tdV9jb250ZXh0X3NrYXM7Ci1leHRlcm4gdm9pZCBsZHRfaG9zdF9pbmZvKHZvaWQpOwotZXh0ZXJuIGxvbmcgaW5pdF9uZXdfbGR0KHN0cnVjdCBtbXVfY29udGV4dF9za2FzICogdG9fbW0sCi0JCQkgc3RydWN0IG1tdV9jb250ZXh0X3NrYXMgKiBmcm9tX21tKTsKLWV4dGVybiB2b2lkIGZyZWVfbGR0KHN0cnVjdCBtbXVfY29udGV4dF9za2FzICogbW0pOwotCi0jZGVmaW5lIExEVF9QQUdFU19NQVggXAotCSgoTERUX0VOVFJJRVMgKiBMRFRfRU5UUllfU0laRSkvUEFHRV9TSVpFKQotI2RlZmluZSBMRFRfRU5UUklFU19QRVJfUEFHRSBcCi0JKFBBR0VfU0laRS9MRFRfRU5UUllfU0laRSkKLSNkZWZpbmUgTERUX0RJUkVDVF9FTlRSSUVTIFwKLQkoKExEVF9QQUdFU19NQVgqc2l6ZW9mKHZvaWQgKikpL0xEVF9FTlRSWV9TSVpFKQotCi1zdHJ1Y3QgbGR0X2VudHJ5IHsKLQlfX3UzMiBhOwotCV9fdTMyIGI7Ci19OwotCi10eXBlZGVmIHN0cnVjdCB1bWxfbGR0IHsKLQlpbnQgZW50cnlfY291bnQ7Ci0Jc3RydWN0IHNlbWFwaG9yZSBzZW1hcGhvcmU7Ci0JdW5pb24gewotCQlzdHJ1Y3QgbGR0X2VudHJ5ICogcGFnZXNbTERUX1BBR0VTX01BWF07Ci0JCXN0cnVjdCBsZHRfZW50cnkgZW50cmllc1tMRFRfRElSRUNUX0VOVFJJRVNdOwotCX0gdTsKLX0gdW1sX2xkdF90OwotCi0vKgotICogbWFjcm9zIHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLWkzODYvZGVzYy5oCi0gKi8KLSNkZWZpbmUgTERUX2VudHJ5X2EoaW5mbykgXAotCSgoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMDAwZmZmZikgPDwgMTYpIHwgKChpbmZvKS0+bGltaXQgJiAweDBmZmZmKSkKLQotI2RlZmluZSBMRFRfZW50cnlfYihpbmZvKSBcCi0JKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4ZmYwMDAwMDApIHwgXAotCSgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNikgfCBcCi0JKChpbmZvKS0+bGltaXQgJiAweGYwMDAwKSB8IFwKLQkoKChpbmZvKS0+cmVhZF9leGVjX29ubHkgXiAxKSA8PCA5KSB8IFwKLQkoKGluZm8pLT5jb250ZW50cyA8PCAxMCkgfCBcCi0JKCgoaW5mbyktPnNlZ19ub3RfcHJlc2VudCBeIDEpIDw8IDE1KSB8IFwKLQkoKGluZm8pLT5zZWdfMzJiaXQgPDwgMjIpIHwgXAotCSgoaW5mbyktPmxpbWl0X2luX3BhZ2VzIDw8IDIzKSB8IFwKLQkoKGluZm8pLT51c2VhYmxlIDw8IDIwKSB8IFwKLQkweDcwMDApCi0KLSNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChcCi0JKGluZm8pLT5iYXNlX2FkZHIJPT0gMAkmJiBcCi0JKGluZm8pLT5saW1pdAkJPT0gMAkmJiBcCi0JKGluZm8pLT5jb250ZW50cwk9PSAwCSYmIFwKLQkoaW5mbyktPnJlYWRfZXhlY19vbmx5CT09IDEJJiYgXAotCShpbmZvKS0+c2VnXzMyYml0CT09IDAJJiYgXAotCShpbmZvKS0+bGltaXRfaW5fcGFnZXMJPT0gMAkmJiBcCi0JKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJiBcCi0JKGluZm8pLT51c2VhYmxlCQk9PSAwCSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9sZHQteDg2XzY0LmggYi9pbmNsdWRlL2FzbS11bS9sZHQteDg2XzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YjM1YWEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tdW0vbGR0LXg4Nl82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBGdWppdHN1IFNpZW1lbnMgQ29tcHV0ZXJzIEdtYkgKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqCi0gKiBBdXRob3I6IEJvZG8gU3Ryb2Vzc2VyIDxic3Ryb2Vzc2VyQGZ1aml0c3Utc2llbWVucy5jb20+Ci0gKi8KLQotI2lmbmRlZiBfX0FTTV9MRFRfWDg2XzY0X0gKLSNkZWZpbmUgX19BU01fTERUX1g4Nl82NF9ICi0KLSNpbmNsdWRlICJhc20vc2VtYXBob3JlLmgiCi0jaW5jbHVkZSAiYXNtL2FyY2gvbGR0LmgiCi0KLXN0cnVjdCBtbXVfY29udGV4dF9za2FzOwotZXh0ZXJuIHZvaWQgbGR0X2hvc3RfaW5mbyh2b2lkKTsKLWV4dGVybiBsb25nIGluaXRfbmV3X2xkdChzdHJ1Y3QgbW11X2NvbnRleHRfc2thcyAqIHRvX21tLAotCQkJIHN0cnVjdCBtbXVfY29udGV4dF9za2FzICogZnJvbV9tbSk7Ci1leHRlcm4gdm9pZCBmcmVlX2xkdChzdHJ1Y3QgbW11X2NvbnRleHRfc2thcyAqIG1tKTsKLQotI2RlZmluZSBMRFRfUEFHRVNfTUFYIFwKLQkoKExEVF9FTlRSSUVTICogTERUX0VOVFJZX1NJWkUpL1BBR0VfU0laRSkKLSNkZWZpbmUgTERUX0VOVFJJRVNfUEVSX1BBR0UgXAotCShQQUdFX1NJWkUvTERUX0VOVFJZX1NJWkUpCi0jZGVmaW5lIExEVF9ESVJFQ1RfRU5UUklFUyBcCi0JKChMRFRfUEFHRVNfTUFYKnNpemVvZih2b2lkICopKS9MRFRfRU5UUllfU0laRSkKLQotc3RydWN0IGxkdF9lbnRyeSB7Ci0JX191MzIgYTsKLQlfX3UzMiBiOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgdW1sX2xkdCB7Ci0JaW50IGVudHJ5X2NvdW50OwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtYXBob3JlOwotCXVuaW9uIHsKLQkJc3RydWN0IGxkdF9lbnRyeSAqIHBhZ2VzW0xEVF9QQUdFU19NQVhdOwotCQlzdHJ1Y3QgbGR0X2VudHJ5IGVudHJpZXNbTERUX0RJUkVDVF9FTlRSSUVTXTsKLQl9IHU7Ci19IHVtbF9sZHRfdDsKLQotLyoKLSAqIG1hY3JvcyBzdG9sZW4gZnJvbSBpbmNsdWRlL2FzbS14ODZfNjQvZGVzYy5oCi0gKi8KLSNkZWZpbmUgTERUX2VudHJ5X2EoaW5mbykgXAotCSgoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMDAwZmZmZikgPDwgMTYpIHwgKChpbmZvKS0+bGltaXQgJiAweDBmZmZmKSkKLQotLyogRG9uJ3QgYWxsb3cgc2V0dGluZyBvZiB0aGUgbG0gYml0LiBJdCBpcyB1c2VsZXNzIGFueXdheXMgYmVjYXVzZQotICogNjRiaXQgc3lzdGVtIGNhbGxzIHJlcXVpcmUgX19VU0VSX0NTLiAqLwotI2RlZmluZSBMRFRfZW50cnlfYihpbmZvKSBcCi0JKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4ZmYwMDAwMDApIHwgXAotCSgoKGluZm8pLT5iYXNlX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNikgfCBcCi0JKChpbmZvKS0+bGltaXQgJiAweGYwMDAwKSB8IFwKLQkoKChpbmZvKS0+cmVhZF9leGVjX29ubHkgXiAxKSA8PCA5KSB8IFwKLQkoKGluZm8pLT5jb250ZW50cyA8PCAxMCkgfCBcCi0JKCgoaW5mbyktPnNlZ19ub3RfcHJlc2VudCBeIDEpIDw8IDE1KSB8IFwKLQkoKGluZm8pLT5zZWdfMzJiaXQgPDwgMjIpIHwgXAotCSgoaW5mbyktPmxpbWl0X2luX3BhZ2VzIDw8IDIzKSB8IFwKLQkoKGluZm8pLT51c2VhYmxlIDw8IDIwKSB8IFwKLQkvKiAoKGluZm8pLT5sbSA8PCAyMSkgfCAqLyBcCi0JMHg3MDAwKQotCi0jZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoXAotCShpbmZvKS0+YmFzZV9hZGRyCT09IDAJJiYgXAotCShpbmZvKS0+bGltaXQJCT09IDAJJiYgXAotCShpbmZvKS0+Y29udGVudHMJPT0gMAkmJiBcCi0JKGluZm8pLT5yZWFkX2V4ZWNfb25seQk9PSAxCSYmIFwKLQkoaW5mbyktPnNlZ18zMmJpdAk9PSAwCSYmIFwKLQkoaW5mbyktPmxpbWl0X2luX3BhZ2VzCT09IDAJJiYgXAotCShpbmZvKS0+c2VnX25vdF9wcmVzZW50CT09IDEJJiYgXAotCShpbmZvKS0+dXNlYWJsZQkJPT0gMAkmJiBcCi0JKGluZm8pLT5sbSAgICAgICAgICAgICAgPT0gMCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9sZHQuaCBiL2luY2x1ZGUvYXNtLXVtL2xkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjgyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9sZHQuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMgR21iSAorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICoKKyAqIEF1dGhvcjogQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNzZXJAZnVqaXRzdS1zaWVtZW5zLmNvbT4KKyAqLworCisjaWZuZGVmIF9fQVNNX0xEVF9ICisjZGVmaW5lIF9fQVNNX0xEVF9ICisKKyNpbmNsdWRlICJhc20vc2VtYXBob3JlLmgiCisjaW5jbHVkZSAiYXNtL2hvc3RfbGR0LmgiCisKK3N0cnVjdCBtbXVfY29udGV4dF9za2FzOworZXh0ZXJuIHZvaWQgbGR0X2hvc3RfaW5mbyh2b2lkKTsKK2V4dGVybiBsb25nIGluaXRfbmV3X2xkdChzdHJ1Y3QgbW11X2NvbnRleHRfc2thcyAqIHRvX21tLAorCQkJIHN0cnVjdCBtbXVfY29udGV4dF9za2FzICogZnJvbV9tbSk7CitleHRlcm4gdm9pZCBmcmVlX2xkdChzdHJ1Y3QgbW11X2NvbnRleHRfc2thcyAqIG1tKTsKKworI2RlZmluZSBMRFRfUEFHRVNfTUFYIFwKKwkoKExEVF9FTlRSSUVTICogTERUX0VOVFJZX1NJWkUpL1BBR0VfU0laRSkKKyNkZWZpbmUgTERUX0VOVFJJRVNfUEVSX1BBR0UgXAorCShQQUdFX1NJWkUvTERUX0VOVFJZX1NJWkUpCisjZGVmaW5lIExEVF9ESVJFQ1RfRU5UUklFUyBcCisJKChMRFRfUEFHRVNfTUFYKnNpemVvZih2b2lkICopKS9MRFRfRU5UUllfU0laRSkKKworc3RydWN0IGxkdF9lbnRyeSB7CisJX191MzIgYTsKKwlfX3UzMiBiOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgdW1sX2xkdCB7CisJaW50IGVudHJ5X2NvdW50OworCXN0cnVjdCBzZW1hcGhvcmUgc2VtYXBob3JlOworCXVuaW9uIHsKKwkJc3RydWN0IGxkdF9lbnRyeSAqIHBhZ2VzW0xEVF9QQUdFU19NQVhdOworCQlzdHJ1Y3QgbGR0X2VudHJ5IGVudHJpZXNbTERUX0RJUkVDVF9FTlRSSUVTXTsKKwl9IHU7Cit9IHVtbF9sZHRfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItaTM4Ni5oIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWkzODYuaAppbmRleCA0MTA4YTU3Li41OTVmMWMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItaTM4Ni5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1pMzg2LmgKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICovCkBAIC02LDIxICs2LDQ4IEBACiAjaWZuZGVmIF9fVU1fUFJPQ0VTU09SX0kzODZfSAogI2RlZmluZSBfX1VNX1BST0NFU1NPUl9JMzg2X0gKIAorI2luY2x1ZGUgImxpbnV4L3N0cmluZy5oIgorI2luY2x1ZGUgImFzbS9ob3N0X2xkdC5oIgorI2luY2x1ZGUgImFzbS9zZWdtZW50LmgiCisKIGV4dGVybiBpbnQgaG9zdF9oYXNfeG1tOwogZXh0ZXJuIGludCBob3N0X2hhc19jbW92OwogCiAvKiBpbmNsdWRlIGZhdWx0aW5mbyBzdHJ1Y3R1cmUgKi8KICNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCiAKK3N0cnVjdCB1bWxfdGxzX3N0cnVjdCB7CisJc3RydWN0IHVzZXJfZGVzYyB0bHM7CisJdW5zaWduZWQgZmx1c2hlZDoxOworCXVuc2lnbmVkIHByZXNlbnQ6MTsKK307CisKIHN0cnVjdCBhcmNoX3RocmVhZCB7CisJc3RydWN0IHVtbF90bHNfc3RydWN0IHRsc19hcnJheVtHRFRfRU5UUllfVExTX0VOVFJJRVNdOwogCXVuc2lnbmVkIGxvbmcgZGVidWdyZWdzWzhdOwogCWludCBkZWJ1Z3JlZ3Nfc2VxOwogCXN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOwogfTsKIAotI2RlZmluZSBJTklUX0FSQ0hfVEhSRUFEIHsgLmRlYnVncmVncyAgCQk9IHsgWyAwIC4uLiA3IF0gPSAwIH0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kZWJ1Z3JlZ3Nfc2VxCT0gMCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZhdWx0aW5mbwkJPSB7IDAsIDAsIDAgfSB9CisjZGVmaW5lIElOSVRfQVJDSF9USFJFQUQgeyBcCisJLnRsc19hcnJheSAgCQk9IHsgWyAwIC4uLiBHRFRfRU5UUllfVExTX0VOVFJJRVMgLSAxIF0gPSBcCisJCQkJICAgIHsgLnByZXNlbnQgPSAwLCAuZmx1c2hlZCA9IDAgfSB9LCBcCisJLmRlYnVncmVncyAgCQk9IHsgWyAwIC4uLiA3IF0gPSAwIH0sIFwKKwkuZGVidWdyZWdzX3NlcQkJPSAwLCBcCisJLmZhdWx0aW5mbwkJPSB7IDAsIDAsIDAgfSBcCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZsdXNoX3RocmVhZChzdHJ1Y3QgYXJjaF90aHJlYWQgKnRocmVhZCkKK3sKKwkvKiBDbGVhciBhbnkgVExTIHN0aWxsIGhhbmdpbmcgKi8KKwltZW1zZXQoJnRocmVhZC0+dGxzX2FycmF5LCAwLCBzaXplb2YodGhyZWFkLT50bHNfYXJyYXkpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfY29weV90aHJlYWQoc3RydWN0IGFyY2hfdGhyZWFkICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFyY2hfdGhyZWFkICp0bykKK3sKKyAgICAgICAgbWVtY3B5KCZ0by0+dGxzX2FycmF5LCAmZnJvbS0+dGxzX2FycmF5LCBzaXplb2YoZnJvbS0+dGxzX2FycmF5KSk7Cit9CiAKICNpbmNsdWRlICJhc20vYXJjaC91c2VyLmgiCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci14ODZfNjQuaAppbmRleCBlMWUxMjU1Li4xMDYwOWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3IteDg2XzY0LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLXg4Nl82NC5oCkBAIC0yOCw2ICsyOCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRlYnVncmVnc19zZXEJPSAwLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmF1bHRpbmZvCQk9IHsgMCwgMCwgMCB9IH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZmx1c2hfdGhyZWFkKHN0cnVjdCBhcmNoX3RocmVhZCAqdGhyZWFkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9jb3B5X3RocmVhZChzdHJ1Y3QgYXJjaF90aHJlYWQgKmZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJjaF90aHJlYWQgKnRvKQoreworfQorCiAjaW5jbHVkZSAiYXNtL2FyY2gvdXNlci5oIgogCiAjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1nZW5lcmljLmgKaW5kZXggNDY1OTlhYy4uNTAzNDg0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWdlbmVyaWMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UtZ2VuZXJpYy5oCkBAIC0yOCw3ICsyOCw3IEBACiAJdW5pb24gdW1sX3B0X3JlZ3MgcmVnczsKIH07CiAKLSNkZWZpbmUgRU1QVFlfUkVHUyB7IHJlZ3MgOiBFTVBUWV9VTUxfUFRfUkVHUyB9CisjZGVmaW5lIEVNUFRZX1JFR1MgeyAucmVncyA9IEVNUFRZX1VNTF9QVF9SRUdTIH0KIAogI2RlZmluZSBQVF9SRUdTX0lQKHIpIFVQVF9JUCgmKHIpLT5yZWdzKQogI2RlZmluZSBQVF9SRUdTX1NQKHIpIFVQVF9TUCgmKHIpLT5yZWdzKQpAQCAtNjAsMTcgKzYwLDkgQEAKIGV4dGVybiB2b2lkIHNlbmRfc2lndHJhcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MsCiAJCQkgaW50IGVycm9yX2NvZGUpOwogCi0jZW5kaWYKK2V4dGVybiBpbnQgYXJjaF9jb3B5X3RscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7CitleHRlcm4gdm9pZCBjbGVhcl9mbHVzaGVkX3RscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1pMzg2LmgKaW5kZXggZmU4ODJiOS4uNmUyNTI4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UtaTM4Ni5oCkBAIC04LDggKzgsMTEgQEAKIAogI2RlZmluZSBIT1NUX0FVRElUX0FSQ0ggQVVESVRfQVJDSF9JMzg2CiAKKyNpbmNsdWRlICJsaW51eC9jb21waWxlci5oIgogI2luY2x1ZGUgInN5c2RlcC9wdHJhY2UuaCIKICNpbmNsdWRlICJhc20vcHRyYWNlLWdlbmVyaWMuaCIKKyNpbmNsdWRlICJhc20vaG9zdF9sZHQuaCIKKyNpbmNsdWRlICJjaG9vc2UtbW9kZS5oIgogCiAjZGVmaW5lIFBUX1JFR1NfRUFYKHIpIFVQVF9FQVgoJihyKS0+cmVncykKICNkZWZpbmUgUFRfUkVHU19FQlgocikgVVBUX0VCWCgmKHIpLT5yZWdzKQpAQCAtMzgsMTUgKzQxLDM0IEBACiAKICNkZWZpbmUgdXNlcl9tb2RlKHIpIFVQVF9JU19VU0VSKCYociktPnJlZ3MpCiAKLSNlbmRpZgorZXh0ZXJuIGludCBwdHJhY2VfZ2V0X3RocmVhZF9hcmVhKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKnVzZXJfZGVzYyk7CiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCitleHRlcm4gaW50IHB0cmFjZV9zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqdXNlcl9kZXNjKTsKKworZXh0ZXJuIGludCBkb19zZXRfdGhyZWFkX2FyZWFfc2thcyhzdHJ1Y3QgdXNlcl9kZXNjICppbmZvKTsKK2V4dGVybiBpbnQgZG9fZ2V0X3RocmVhZF9hcmVhX3NrYXMoc3RydWN0IHVzZXJfZGVzYyAqaW5mbyk7CisKK2V4dGVybiBpbnQgZG9fc2V0X3RocmVhZF9hcmVhX3R0KHN0cnVjdCB1c2VyX2Rlc2MgKmluZm8pOworZXh0ZXJuIGludCBkb19nZXRfdGhyZWFkX2FyZWFfdHQoc3RydWN0IHVzZXJfZGVzYyAqaW5mbyk7CisKK2V4dGVybiBpbnQgYXJjaF9zd2l0Y2hfdGxzX3NrYXMoc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvKTsKK2V4dGVybiBpbnQgYXJjaF9zd2l0Y2hfdGxzX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7CisKK2V4dGVybiB2b2lkIGFyY2hfc3dpdGNoX3RvX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7CitleHRlcm4gdm9pZCBhcmNoX3N3aXRjaF90b19za2FzKHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvX2dldF90aHJlYWRfYXJlYShzdHJ1Y3QgdXNlcl9kZXNjICppbmZvKQoreworCXJldHVybiBDSE9PU0VfTU9ERV9QUk9DKGRvX2dldF90aHJlYWRfYXJlYV90dCwgZG9fZ2V0X3RocmVhZF9hcmVhX3NrYXMsIGluZm8pOworfQorCitzdGF0aWMgaW5saW5lIGludCBkb19zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHVzZXJfZGVzYyAqaW5mbykKK3sKKwlyZXR1cm4gQ0hPT1NFX01PREVfUFJPQyhkb19zZXRfdGhyZWFkX2FyZWFfdHQsIGRvX3NldF90aHJlYWRfYXJlYV9za2FzLCBpbmZvKTsKK30KKworc3RydWN0IHRhc2tfc3RydWN0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS14ODZfNjQuaAppbmRleCBiZTUxMjE5Li5jODk0ZTY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UteDg2XzY0LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcHRyYWNlLXg4Nl82NC5oCkBAIC04LDYgKzgsOCBAQAogI2RlZmluZSBfX1VNX1BUUkFDRV9YODZfNjRfSAogCiAjaW5jbHVkZSAibGludXgvY29tcGlsZXIuaCIKKyNpbmNsdWRlICJhc20vZXJybm8uaCIKKyNpbmNsdWRlICJhc20vaG9zdF9sZHQuaCIKIAogI2RlZmluZSBzaWduYWxfZmF1bHQgc2lnbmFsX2ZhdWx0X3g4Nl82NAogI2RlZmluZSBfX0ZSQU1FX09GRlNFVFMgLyogTmVlZGVkIHRvIGdldCB0aGUgUiogbWFjcm9zICovCkBAIC02MywxNSArNjUsMjYgQEAKIAogI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIFBUX1JFR1NfSVAocmVncykKIAotI2VuZGlmCitzdGF0aWMgaW5saW5lIGludCBwdHJhY2VfZ2V0X3RocmVhZF9hcmVhKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2VyX2Rlc2MgX191c2VyICp1c2VyX2Rlc2MpCit7CisgICAgICAgIHJldHVybiAtRU5PU1lTOworfQogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLworc3RhdGljIGlubGluZSBpbnQgcHRyYWNlX3NldF90aHJlYWRfYXJlYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqdXNlcl9kZXNjKQoreworICAgICAgICByZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3dpdGNoX3RvX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zd2l0Y2hfdG9fc2thcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvKQoreworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLXVtL3NlZ21lbnQuaAppbmRleCA1NWU0MDMwLi40NTE4M2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9zZWdtZW50LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vc2VnbWVudC5oCkBAIC0xLDQgKzEsMTAgQEAKICNpZm5kZWYgX19VTV9TRUdNRU5UX0gKICNkZWZpbmUgX19VTV9TRUdNRU5UX0gKIAorZXh0ZXJuIGludCBob3N0X2dkdF9lbnRyeV90bHNfbWluOworCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfRU5UUklFUyAzCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUlOIGhvc3RfZ2R0X2VudHJ5X3Rsc19taW4KKyNkZWZpbmUgR0RUX0VOVFJZX1RMU19NQVggKEdEVF9FTlRSWV9UTFNfTUlOICsgR0RUX0VOVFJZX1RMU19FTlRSSUVTIC0gMSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaAppbmRleCAxN2I2YjA3Li5mMTY2Yjk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKQEAgLTI3LDE0ICsyNywxNCBAQAogCiAjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKIHsJCQkJCQlcCi0JdGFzazoJCSZ0c2ssCQkJXAotCWV4ZWNfZG9tYWluOgkmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAotCWZsYWdzOgkJMCwJCQlcCi0JY3B1OgkJMCwJCQlcCi0JcHJlZW1wdF9jb3VudDoJMSwJCQlcCi0JYWRkcl9saW1pdDoJS0VSTkVMX0RTLAkJXAotCXJlc3RhcnRfYmxvY2s6ICB7CQkJXAotCQlmbjogIGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCS50YXNrID0JCSZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbiA9CSZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmZsYWdzID0JCTAsCQlcCisJLmNwdSA9CQkwLAkJCVwKKwkucHJlZW1wdF9jb3VudCA9CTEsCQlcCisJLmFkZHJfbGltaXQgPQlLRVJORUxfRFMsCQlcCisJLnJlc3RhcnRfYmxvY2sgPSAgewkJCVwKKwkJLmZuID0gIGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAogCX0sCQkJCQlcCiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXVtL3VhY2Nlc3MuaAppbmRleCA0ZTQ2MGQ2Li4xNmM3MzRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vdWFjY2Vzcy5oCkBAIC00MSwxMSArNDEsMTEgQEAKIAogI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikgXAogKHsgXAotCWNvbnN0IF9fdHlwZW9mX18ocHRyKSBfX3ByaXZhdGVfcHRyID0gcHRyOwlcCisJY29uc3QgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wcml2YXRlX3B0ciA9IChwdHIpOwlcCiAJX190eXBlb2ZfXyh4KSBfX3ByaXZhdGVfdmFsOwkJCVwKIAlpbnQgX19wcml2YXRlX3JldCA9IC1FRkFVTFQ7CQkJXAogCSh4KSA9IChfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpKTA7CQkJCVwKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigodm9pZCAqKSAmX19wcml2YXRlX3ZhbCwgKF9fcHJpdmF0ZV9wdHIpLAlcCisJaWYgKF9fY29weV9mcm9tX3VzZXIoKF9fZm9yY2Ugdm9pZCAqKSZfX3ByaXZhdGVfdmFsLCAoX19wcml2YXRlX3B0ciksXAogCQkJICAgICBzaXplb2YoKihfX3ByaXZhdGVfcHRyKSkpID09IDApIHsJCVwKIAkJKHgpID0gKF9fdHlwZW9mX18oKihfX3ByaXZhdGVfcHRyKSkpIF9fcHJpdmF0ZV92YWw7CVwKIAkJX19wcml2YXRlX3JldCA9IDA7CQkJCQlcCkBAIC01NywxMiArNTcsMTIgQEAKICh7IFwKICAgICAgICAgY29uc3QgX190eXBlb2ZfXygoKihwdHIpKSkgX191c2VyICpwcml2YXRlX3B0ciA9IChwdHIpOyBcCiAgICAgICAgIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHByaXZhdGVfcHRyLCBzaXplb2YoKnByaXZhdGVfcHRyKSkgPyBcCi0JIF9fZ2V0X3VzZXIoeCwgcHJpdmF0ZV9wdHIpIDogKCh4KSA9IDAsIC1FRkFVTFQpKTsgXAorCSBfX2dldF91c2VyKHgsIHByaXZhdGVfcHRyKSA6ICgoeCkgPSAoX190eXBlb2ZfXygqcHRyKSkwLCAtRUZBVUxUKSk7IFwKIH0pCiAKICNkZWZpbmUgX19wdXRfdXNlcih4LCBwdHIpIFwKICh7IFwKLSAgICAgICAgX190eXBlb2ZfXyhwdHIpIF9fcHJpdmF0ZV9wdHIgPSBwdHI7IFwKKyAgICAgICAgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wcml2YXRlX3B0ciA9IHB0cjsgXAogICAgICAgICBfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpIF9fcHJpdmF0ZV92YWw7IFwKICAgICAgICAgaW50IF9fcHJpdmF0ZV9yZXQgPSAtRUZBVUxUOyBcCiAgICAgICAgIF9fcHJpdmF0ZV92YWwgPSAoX190eXBlb2ZfXygqKF9fcHJpdmF0ZV9wdHIpKSkgKHgpOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tdjg1MC9zeXN0ZW0uaAppbmRleCAxMDdkZWNiLi43MDkxYWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmgKQEAgLTE4LDggKzE4LDYgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIAotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpCWRvIHsgfSB3aGlsZSAoMCkKLQogLyoKICAqIHN3aXRjaF90byhuKSBzaG91bGQgc3dpdGNoIHRhc2tzIHRvIHRhc2sgcHRyLCBmaXJzdCBjaGVja2luZyB0aGF0CiAgKiBwdHIgaXNuJ3QgdGhlIGN1cnJlbnQgdGFzaywgaW4gd2hpY2ggY2FzZSBpdCBkb2VzIG5vdGhpbmcuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvYXBpY2RlZi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2FwaWNkZWYuaAppbmRleCA1YTQ4ZTliLi4xZGQ0MDA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYXBpY2RlZi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljZGVmLmgKQEAgLTEzNyw4ICsxMzcsNiBAQAogICovCiAjZGVmaW5lIHUzMiB1bnNpZ25lZCBpbnQKIAotI2RlZmluZSBsYXBpYyAoKHZvbGF0aWxlIHN0cnVjdCBsb2NhbF9hcGljICopQVBJQ19CQVNFKQotCiBzdHJ1Y3QgbG9jYWxfYXBpYyB7CiAKIC8qMDAwKi8Jc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKaW5kZXggYzgwNDNhMS4uZjhkZmYxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKQEAgLTIwLDggKzIwLDggQEAKICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucGFnZV9hbGlnbmVkIikpKQogI2VuZGlmCiAKLSNkZWZpbmUgX19yZWFkX21vc3RseSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucmVhZF9tb3N0bHkiKSkpCi0KICNlbmRpZgogCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHVmZWF0dXJlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY3B1ZmVhdHVyZS5oCmluZGV4IDc2YmI2MTkuLjY2Mjk2NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHVmZWF0dXJlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NwdWZlYXR1cmUuaApAQCAtNjQsNiArNjQsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9SRVBfR09PRAkoMyozMisgNCkgLyogcmVwIG1pY3JvY29kZSB3b3JrcyB3ZWxsIG9uIHRoaXMgQ1BVICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyAoMyozMis1KSAvKiBUU0MgcnVucyBhdCBjb25zdGFudCByYXRlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NZTkNfUkRUU0MgICgzKjMyKzYpICAvKiBSRFRTQyBzeW5jcyBDUFUgY29yZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyAoMyozMis3KSAgLyogRklQL0ZPUC9GRFAgbGVha3MgdGhyb3VnaCBGWFNBVkUgKi8KIAogLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDEgKGVjeCksIHdvcmQgNCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9YTU0zCSg0KjMyKyAwKSAvKiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zLTMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oCmluZGV4IDhkY2MzMjYuLjY3MGEzMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaApAQCAtNDcsNyArNDcsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9lbmRfb2ZfcmFtKHZvaWQpOwogZXh0ZXJuIHZvaWQgZTgyMF9yZXNlcnZlX3Jlc291cmNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobyk7Ci1leHRlcm4gaW50IGU4MjBfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKTsKK2V4dGVybiBpbnQgZTgyMF9hbnlfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKTsKK2V4dGVybiBpbnQgZTgyMF9hbGxfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKTsKIAogZXh0ZXJuIHZvaWQgZTgyMF9ib290bWVtX2ZyZWUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBzdGFydCx1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gdm9pZCBlODIwX3NldHVwX2dhcCh2b2lkKTsKQEAgLTU4LDYgKzU5LDggQEAKIGV4dGVybiB2b2lkIF9faW5pdCBwYXJzZV9tZW1tYXBvcHQoY2hhciAqcCwgY2hhciAqKmVuZCk7CiAKIGV4dGVybiBzdHJ1Y3QgZTgyMG1hcCBlODIwOworCitleHRlcm4gdW5zaWduZWQgZWJkYV9hZGRyLCBlYmRhX3NpemU7CiAjZW5kaWYvKiFfX0FTU0VNQkxZX18qLwogCiAjZW5kaWYvKl9fRTgyMF9IRUFERVIqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2VsZi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2VsZi5oCmluZGV4IGM5ODYzM2EuLmI0ZjhmNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZWxmLmgKQEAgLTE1OSw3ICsxNTksNyBAQAogI2RlZmluZSBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0c2ssIGVsZl9mcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBlbGZfZnByZWdzKQogCiAvKiAxR0IgZm9yIDY0Yml0LCA4TUIgZm9yIDMyYml0ICovCi0jZGVmaW5lIFNUQUNLX1JORF9NQVNLIChpc19jb21wYXRfdGFzaygpID8gMHg3ZmYgOiAweDNmZmZmZikKKyNkZWZpbmUgU1RBQ0tfUk5EX01BU0sgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpID8gMHg3ZmYgOiAweDNmZmZmZikKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9ocGV0LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaHBldC5oCmluZGV4IDA4Yjc1YzEuLjE4ZmY3ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9ocGV0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2hwZXQuaApAQCAtNTEsNiArNTEsOCBAQAogCiAjZGVmaW5lIEhQRVRfVE5fUk9VVEVfU0hJRlQJOQogCisjZGVmaW5lIEhQRVRfVElDS19SQVRFIChIWiAqIDEwMDAwMFVMKQorCiBleHRlcm4gaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKTsKIGV4dGVybiBpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgb2VtX2ZvcmNlX2hwZXRfdGltZXIodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaTM4Ny5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2kzODcuaAppbmRleCA4NzZlYjlhLi5jYmE4YTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaTM4Ny5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pMzg3LmgKQEAgLTcyLDYgKzcyLDIzIEBACiAjZGVmaW5lIHNldF9mcHVfc3dkKHQsdmFsKSAoKHQpLT50aHJlYWQuaTM4Ny5meHNhdmUuc3dkID0gKHZhbCkpCiAjZGVmaW5lIHNldF9mcHVfZnhzcl90d2QodCx2YWwpICgodCktPnRocmVhZC5pMzg3LmZ4c2F2ZS50d2QgPSAodmFsKSkKIAorI2RlZmluZSBYODdfRlNXX0VTICgxIDw8IDcpCS8qIEV4Y2VwdGlvbiBTdW1tYXJ5ICovCisKKy8qIEFNRCBDUFVzIGRvbid0IHNhdmUvcmVzdG9yZSBGRFAvRklQL0ZPUCB1bmxlc3MgYW4gZXhjZXB0aW9uCisgICBpcyBwZW5kaW5nLiBDbGVhciB0aGUgeDg3IHN0YXRlIGhlcmUgYnkgc2V0dGluZyBpdCB0byBmaXhlZAorICAgdmFsdWVzLiBUaGUga2VybmVsIGRhdGEgc2VnbWVudCBjYW4gYmUgc29tZXRpbWVzIDAgYW5kIHNvbWV0aW1lcworICAgbmV3IHVzZXIgdmFsdWUuIEJvdGggc2hvdWxkIGJlIG9rLgorICAgVXNlIHRoZSBQREEgYXMgc2FmZSBhZGRyZXNzIGJlY2F1c2UgaXQgc2hvdWxkIGJlIGFscmVhZHkgaW4gTDEuICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZnB1X3N0YXRlKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmZ4KQoreworCWlmICh1bmxpa2VseShmeC0+c3dkICYgWDg3X0ZTV19FUykpCisJCSBhc20gdm9sYXRpbGUoImZuY2xleCIpOworCWFsdGVybmF0aXZlX2lucHV0KEFTTV9OT1A4IEFTTV9OT1AyLAorCSAgICAgCSAgICAgIiAgICBlbW1zXG4iCQkvKiBjbGVhciBzdGFjayB0YWdzICovCisJICAgICAJICAgICAiICAgIGZpbGRsICUlZ3M6MCIsCS8qIGxvYWQgdG8gY2xlYXIgc3RhdGUgKi8KKwkJICAgICBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHJlc3RvcmVfZnB1X2NoZWNraW5nKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmZ4KSAKIHsgCiAJaW50IGVycjsKQEAgLTExOSw2ICsxMzYsNyBAQAogI2VuZGlmCiAJaWYgKHVubGlrZWx5KGVycikpCiAJCV9fY2xlYXJfdXNlcihmeCwgc2l6ZW9mKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QpKTsKKwkvKiBObyBuZWVkIHRvIGNsZWFyIGhlcmUgYmVjYXVzZSB0aGUgY2FsbGVyIGNsZWFycyBVU0VEX01BVEggKi8KIAlyZXR1cm4gZXJyOwogfSAKIApAQCAtMTQ5LDcgKzE2Nyw3IEBACiAJCQkJImkiIChvZmZzZXRvZihfX3R5cGVvZl9fKCp0c2spLAogCQkJCQkgICAgICB0aHJlYWQuaTM4Ny5meHNhdmUpKSk7CiAjZW5kaWYKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZm5jbGV4Iik7CisJY2xlYXJfZnB1X3N0YXRlKCZ0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxfZnB1X2JlZ2luKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMl91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oCmluZGV4IGVlYjJiY2QuLmI0ZjRiMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oCkBAIC0zMTcsNiArMzE3LDQgQEAKICNkZWZpbmUgX19OUl9pYTMyX3Bwb2xsCQkJMzA5CiAjZGVmaW5lIF9fTlJfaWEzMl91bnNoYXJlCQkzMTAKIAotI2RlZmluZSBJQTMyX05SX3N5c2NhbGxzIDMxNQkvKiBtdXN0IGJlID4gdGhhbiBiaWdnZXN0IHN5c2NhbGwhICovCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl82NF9JQTMyX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lvLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaAppbmRleCBjYWZkZmIzLi5hMDVkYThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaApAQCAtMTc3LDcgKzE3Nyw3IEBACiB7CiAJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSBfX3UxNiAqKWFkZHI7CiB9Ci1zdGF0aWMgaW5saW5lIF9fdTMyIF9fcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3UzMiBfX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTMyICopYWRkcjsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oCmluZGV4IGVlMWJjNjkuLjUyNDg0ZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvX2FwaWMuaApAQCAtMjA1LDYgKzIwNSw3IEBACiBleHRlcm4gaW50IGlvX2FwaWNfZ2V0X3ZlcnNpb24gKGludCBpb2FwaWMpOwogZXh0ZXJuIGludCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzIChpbnQgaW9hcGljKTsKIGV4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCwgaW50KTsKK2V4dGVybiBpbnQgdGltZXJfdXNlc19pb2FwaWNfcGluXzA7CiAjZW5kaWYKIAogZXh0ZXJuIGludCBzaXNfYXBpY19idWc7IC8qIGR1bW15ICovIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2xvY2FsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbG9jYWwuaAppbmRleCBiZjE0ODAzLi5jZDE3OTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbG9jYWwuaApAQCAtNSw3ICs1LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNvdW50ZXI7CisJdm9sYXRpbGUgbG9uZyBjb3VudGVyOwogfSBsb2NhbF90OwogCiAjZGVmaW5lIExPQ0FMX0lOSVQoaSkJeyAoaSkgfQpAQCAtMTMsNyArMTMsNyBAQAogI2RlZmluZSBsb2NhbF9yZWFkKHYpCSgodiktPmNvdW50ZXIpCiAjZGVmaW5lIGxvY2FsX3NldCh2LGkpCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9pbmMobG9jYWxfdCAqdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9pbmMobG9jYWxfdCAqdikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJImluY3EgJTAiCkBAIC0yMSw3ICsyMSw3IEBACiAJCToibSIgKHYtPmNvdW50ZXIpKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9kZWMobG9jYWxfdCAqdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9kZWMobG9jYWxfdCAqdikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJImRlY3EgJTAiCkBAIC0yOSw3ICsyOSw3IEBACiAJCToibSIgKHYtPmNvdW50ZXIpKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9hZGQodW5zaWduZWQgaW50IGksIGxvY2FsX3QgKnYpCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfYWRkKGxvbmcgaSwgbG9jYWxfdCAqdikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJImFkZHEgJTEsJTAiCkBAIC0zNyw3ICszNyw3IEBACiAJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbG9jYWxfc3ViKHVuc2lnbmVkIGludCBpLCBsb2NhbF90ICp2KQorc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3N1Yihsb25nIGksIGxvY2FsX3QgKnYpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJzdWJxICUxLCUwIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21jZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21jZS5oCmluZGV4IDVkMjk4YjcuLjcyMjk3ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbWNlLmgKQEAgLTcwLDYgKzcwLDkgQEAKICNkZWZpbmUgTUNFX1RIUkVTSE9MRF9CQVNFICAgICAgTUNFX0VYVEVOREVEX0JBTksgKyAxIC8qIE1DRV9BTUQgKi8KICNkZWZpbmUgTUNFX1RIUkVTSE9MRF9EUkFNX0VDQyAgTUNFX1RIUkVTSE9MRF9CQVNFICsgNAogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOwogI2lmZGVmIENPTkZJR19YODZfTUNFX0lOVEVMCiB2b2lkIG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKQEAgLTg3LDQgKzkwLDggQEAKIH0KICNlbmRpZgogCitleHRlcm4gYXRvbWljX3QgbWNlX2VudHJ5OworCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmgKaW5kZXggNmIxOGNkOC4uNjk0NGU3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXpvbmUuaApAQCAtMTIsNyArMTIsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCi0jZGVmaW5lIE5PREVNQVBTSVpFIDB4ZmZmCisvKiBTaG91bGQgcmVhbGx5IHN3aXRjaCB0byBkeW5hbWljIGFsbG9jYXRpb24gYXQgc29tZSBwb2ludCAqLworI2RlZmluZSBOT0RFTUFQU0laRSAweDRmZmYKIAogLyogU2ltcGxlIHBlcmZlY3QgaGFzaCB0byBtYXAgcGh5c2ljYWwgYWRkcmVzc2VzIHRvIG5vZGUgbnVtYmVycyAqLwogc3RydWN0IG1lbW5vZGUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L251bWEuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1hLmgKaW5kZXggZjZjYmI0Yy4uMWNjOTJmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L251bWEuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbnVtYS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNX1g4NjY0X05VTUFfSCAxCiAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgotI2luY2x1ZGUgPGFzbS9udW1ub2Rlcy5oPgogCiBzdHJ1Y3QgYm9vdG5vZGUgewogCXU2NCBzdGFydCxlbmQ7IApAQCAtMTgsNiArMTcsOCBAQAogZXh0ZXJuIGludCBudW1hX29mZjsKIAogZXh0ZXJuIHZvaWQgbnVtYV9zZXRfbm9kZShpbnQgY3B1LCBpbnQgbm9kZSk7CitleHRlcm4gdm9pZCBzcmF0X3Jlc2VydmVfYWRkX2FyZWEoaW50IG5vZGVpZCk7CitleHRlcm4gaW50IGhvdGFkZF9wZXJjZW50OwogCiBleHRlcm4gdW5zaWduZWQgY2hhciBhcGljaWRfdG9fbm9kZVsyNTZdOwogI2lmZGVmIENPTkZJR19OVU1BCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmJlMTZiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4NjY0X05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9YODY2NF9OVU1OT0RFU19IIDEKLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaWZkZWYgQ09ORklHX05VTUEKLSNkZWZpbmUgTk9ERVNfU0hJRlQJNgotI2Vsc2UKLSNkZWZpbmUgTk9ERVNfU0hJRlQJMAotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BlcmNwdS5oCmluZGV4IDQ0MDViNGEuLjdmMzNhYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGVyY3B1LmgKQEAgLTI2LDcgKzI2LDcgQEAKICNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKIGRvIHsJCQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAotCWZvcl9lYWNoX2NwdShfX2kpCQkJCQlcCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KF9faSkJCQkJXAogCQltZW1jcHkoKHBjcHVkc3QpK19fcGVyX2NwdV9vZmZzZXQoX19pKSwJCVwKIAkJICAgICAgIChzcmMpLCAoc2l6ZSkpOwkJCQlcCiB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdGltZXguaAppbmRleCBmMTg0NDNmLi5iOWU1MzIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdGltZXguaApAQCAtMzMsNyArMzMsNyBAQAogCXVuc2lnbmVkIGVheDsKIAkvKiBEb24ndCBkbyBhbiBhZGRpdGlvbmFsIHN5bmMgb24gQ1BVcyB3aGVyZSB3ZSBrbm93CiAJICAgUkRUU0MgaXMgYWxyZWFkeSBzeW5jaHJvbm91cy4gKi8KLQlhbHRlcm5hdGl2ZV9pbyhBU01fTk9QMiwgImNwdWlkIiwgWDg2X0ZFQVRVUkVfU1lOQ19SRFRTQywKKwlhbHRlcm5hdGl2ZV9pbygiY3B1aWQiLCBBU01fTk9QMiwgWDg2X0ZFQVRVUkVfU1lOQ19SRFRTQywKIAkJCSAgIj1hIiAoZWF4KSwgIjAiICgxKSA6ICJlYngiLCJlY3giLCJlZHgiLCJtZW1vcnkiKTsKIAlyZHRzY2xsKHJldCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaAppbmRleCBmMjFmZjJjLi5mZWI3N2NiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCkBAIC02MTEsOCArNjExLDE0IEBACiBfX1NZU0NBTEwoX19OUl9nZXRfcm9idXN0X2xpc3QsIHN5c19nZXRfcm9idXN0X2xpc3QpCiAjZGVmaW5lIF9fTlJfc3BsaWNlCQkyNzUKIF9fU1lTQ0FMTChfX05SX3NwbGljZSwgc3lzX3NwbGljZSkKKyNkZWZpbmUgX19OUl90ZWUJCTI3NgorX19TWVNDQUxMKF9fTlJfdGVlLCBzeXNfdGVlKQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkyNzcKK19fU1lTQ0FMTChfX05SX3N5bmNfZmlsZV9yYW5nZSwgc3lzX3N5bmNfZmlsZV9yYW5nZSkKKyNkZWZpbmUgX19OUl92bXNwbGljZQkJMjc4CitfX1NZU0NBTEwoX19OUl92bXNwbGljZSwgc3lzX3Ztc3BsaWNlKQogCi0jZGVmaW5lIF9fTlJfc3lzY2FsbF9tYXggX19OUl9zcGxpY2UKKyNkZWZpbmUgX19OUl9zeXNjYWxsX21heCBfX05SX3Ztc3BsaWNlCiAKICNpZm5kZWYgX19OT19TVFVCUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvaW9jdGxzLmgKaW5kZXggMTBjNDQzNC4uM2I4OWE3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2lvY3Rscy5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9pb2N0bHMuaApAQCAtMTA3LDYgKzEwNyw2IEBACiAjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSBfSU9XKCdUJywgOTEsIHN0cnVjdCBzZXJpYWxfbXVsdGlwb3J0X3N0cnVjdCkgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KIAogI2RlZmluZSBUSU9DTUlXQUlUCV9JTygnVCcsIDkyKSAvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLwotI2RlZmluZSBUSU9DR0lDT1VOVAlfSU9SKCdUJywgOTMsIHN0cnVjdCBhc3luY19pY291bnQpIC8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KIAogI2VuZGlmIC8qIF9YVEVOU0FfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zaWduYWwuaAppbmRleCA1ZDZmYzljLi5hOTljOWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2Evc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3NpZ25hbC5oCkBAIC0xMTgsOSArMTE4LDkgQEAKICAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KICAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgogICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCiAjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAogI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2RlZmluZSBTQV9QUk9CRUlSUQkJMHgwODAwMDAwMAogI2VuZGlmCiAKICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAppbmRleCA5Mjg0ODY3Li5iMjlmN2FlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCkBAIC0xMTEsOCArMTExLDYgQEAKIAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkJZG8geyB9IHdoaWxlKDApCi0KICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KQkJXAogZG8gewkJCQkJCVwKIAljbGVhcl9jcGVuYWJsZSgpOwkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCAxYzQ3YzU5Li5iNzRjMTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC04Myw2ICs4Myw3IEBACiAjZGVmaW5lIEFVRElUX0NPTkZJR19DSEFOR0UJMTMwNQkvKiBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UgKi8KICNkZWZpbmUgQVVESVRfU09DS0FERFIJCTEzMDYJLyogc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnICovCiAjZGVmaW5lIEFVRElUX0NXRAkJMTMwNwkvKiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICovCisjZGVmaW5lIEFVRElUX0lQQ19TRVRfUEVSTQkxMzExCS8qIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUgKi8KIAogI2RlZmluZSBBVURJVF9BVkMJCTE0MDAJLyogU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAqLwogI2RlZmluZSBBVURJVF9TRUxJTlVYX0VSUgkxNDAxCS8qIEludGVybmFsIFNFIExpbnV4IEVycm9ycyAqLwpAQCAtMTQ1LDYgKzE0NiwxMSBAQAogI2RlZmluZSBBVURJVF9QRVJTCTEwCiAjZGVmaW5lIEFVRElUX0FSQ0gJMTEKICNkZWZpbmUgQVVESVRfTVNHVFlQRQkxMgorI2RlZmluZSBBVURJVF9TRV9VU0VSCTEzCS8qIHNlY3VyaXR5IGxhYmVsIHVzZXIgKi8KKyNkZWZpbmUgQVVESVRfU0VfUk9MRQkxNAkvKiBzZWN1cml0eSBsYWJlbCByb2xlICovCisjZGVmaW5lIEFVRElUX1NFX1RZUEUJMTUJLyogc2VjdXJpdHkgbGFiZWwgdHlwZSAqLworI2RlZmluZSBBVURJVF9TRV9TRU4JMTYJLyogc2VjdXJpdHkgbGFiZWwgc2Vuc2l0aXZpdHkgbGFiZWwgKi8KKyNkZWZpbmUgQVVESVRfU0VfQ0xSCTE3CS8qIHNlY3VyaXR5IGxhYmVsIGNsZWFyYW5jZSBsYWJlbCAqLwogCiAJCQkJLyogVGhlc2UgYXJlIE9OTFkgdXNlZnVsIHdoZW4gY2hlY2tpbmcKIAkJCQkgKiBhdCBzeXNjYWxsIGV4aXQgdGltZSAoQVVESVRfQVRfRVhJVCkuICovCkBAIC0yODcsMTAgKzI5MywxMCBAQAogCQkJCS8qIFB1YmxpYyBBUEkgKi8KIGV4dGVybiBpbnQgIGF1ZGl0X2FsbG9jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiBleHRlcm4gdm9pZCBhdWRpdF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci1leHRlcm4gdm9pZCBhdWRpdF9zeXNjYWxsX2VudHJ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGFyY2gsCitleHRlcm4gdm9pZCBhdWRpdF9zeXNjYWxsX2VudHJ5KGludCBhcmNoLAogCQkJCWludCBtYWpvciwgdW5zaWduZWQgbG9uZyBhMCwgdW5zaWduZWQgbG9uZyBhMSwKIAkJCQl1bnNpZ25lZCBsb25nIGEyLCB1bnNpZ25lZCBsb25nIGEzKTsKLWV4dGVybiB2b2lkIGF1ZGl0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBmYWlsZWQsIGxvbmcgcmV0dXJuX2NvZGUpOworZXh0ZXJuIHZvaWQgYXVkaXRfc3lzY2FsbF9leGl0KGludCBmYWlsZWQsIGxvbmcgcmV0dXJuX2NvZGUpOwogZXh0ZXJuIHZvaWQgYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGF1ZGl0X3B1dG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGZsYWdzKTsKQEAgLTMxNCw3ICszMjAsOCBAQAogCQkJICAgICAgc3RydWN0IHRpbWVzcGVjICp0LCB1bnNpZ25lZCBpbnQgKnNlcmlhbCk7CiBleHRlcm4gaW50ICBhdWRpdF9zZXRfbG9naW51aWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1aWRfdCBsb2dpbnVpZCk7CiBleHRlcm4gdWlkX3QgYXVkaXRfZ2V0X2xvZ2ludWlkKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgpOwotZXh0ZXJuIGludCBhdWRpdF9pcGNfcGVybXModW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSwgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApOworZXh0ZXJuIGludCBhdWRpdF9pcGNfb2JqKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKTsKK2V4dGVybiBpbnQgYXVkaXRfaXBjX3NldF9wZXJtKHVuc2lnbmVkIGxvbmcgcWJ5dGVzLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUsIHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKTsKIGV4dGVybiBpbnQgYXVkaXRfc29ja2V0Y2FsbChpbnQgbmFyZ3MsIHVuc2lnbmVkIGxvbmcgKmFyZ3MpOwogZXh0ZXJuIGludCBhdWRpdF9zb2NrYWRkcihpbnQgbGVuLCB2b2lkICphZGRyKTsKIGV4dGVybiBpbnQgYXVkaXRfYXZjX3BhdGgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CkBAIC0zMjMsOCArMzMwLDggQEAKICNlbHNlCiAjZGVmaW5lIGF1ZGl0X2FsbG9jKHQpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X2ZyZWUodCkgZG8geyA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGF1ZGl0X3N5c2NhbGxfZW50cnkodCx0YSxhLGIsYyxkLGUpIGRvIHsgOyB9IHdoaWxlICgwKQotI2RlZmluZSBhdWRpdF9zeXNjYWxsX2V4aXQodCxmLHIpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9zeXNjYWxsX2VudHJ5KHRhLGEsYixjLGQsZSkgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGF1ZGl0X3N5c2NhbGxfZXhpdChmLHIpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9nZXRuYW1lKG4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9wdXRuYW1lKG4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBfX2F1ZGl0X2lub2RlKG4saSxmKSBkbyB7IDsgfSB3aGlsZSAoMCkKQEAgLTMzMyw3ICszNDAsOCBAQAogI2RlZmluZSBhdWRpdF9pbm9kZV9jaGlsZChkLGkscCkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0c2NfZ2V0X3N0YW1wKGMsdCxzKSBkbyB7IEJVRygpOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9nZXRfbG9naW51aWQoYykgKHsgLTE7IH0pCi0jZGVmaW5lIGF1ZGl0X2lwY19wZXJtcyhxLHUsZyxtLGkpICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X2lwY19vYmooaSkgKHsgMDsgfSkKKyNkZWZpbmUgYXVkaXRfaXBjX3NldF9wZXJtKHEsdSxnLG0saSkgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfc29ja2V0Y2FsbChuLGEpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X3NvY2thZGRyKGxlbiwgYWRkcikgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfYXZjX3BhdGgoZGVudHJ5LCBtbnQpICh7IDA7IH0pCkBAIC0zNjYsNyArMzc0LDcgQEAKIGV4dGVybiBpbnQgYXVkaXRfZmlsdGVyX3VzZXIoc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpjYiwgaW50IHR5cGUpOwogZXh0ZXJuIGludCBhdWRpdF9maWx0ZXJfdHlwZShpbnQgdHlwZSk7CiBleHRlcm4gaW50ICBhdWRpdF9yZWNlaXZlX2ZpbHRlcihpbnQgdHlwZSwgaW50IHBpZCwgaW50IHVpZCwgaW50IHNlcSwKLQkJCQkgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFzeiwgdWlkX3QgbG9naW51aWQpOworCQkJIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhc3osIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKTsKICNlbHNlCiAjZGVmaW5lIGF1ZGl0X2xvZyhjLGcsdCxmLC4uLikgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2xvZ19zdGFydChjLGcsdCkgKHsgTlVMTDsgfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCmluZGV4IGJiOWU1NDMuLjc1ZTkxZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaApAQCAtMTksMjAgKzE5LDI1IEBACiBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgewogCS8qIE93bmVyIG1vZHVsZSAqLwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCS8qIEdldCB0aGUgYmFja2xpZ2h0IHBvd2VyIHN0YXR1cyAoMDogZnVsbCBvbiwgMS4uMzogcG93ZXIgc2F2aW5nCi0JICAgbW9kZXM7IDQ6IGZ1bGwgb2ZmKSwgc2VlIEZCX0JMQU5LX1hYWCAqLwotCWludCAoKmdldF9wb3dlcikoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKik7Ci0JLyogRW5hYmxlIG9yIGRpc2FibGUgcG93ZXIgdG8gdGhlIExDRCAoMDogb247IDQ6IG9mZiwgc2VlIEZCX0JMQU5LX1hYWCkgKi8KLQlpbnQgKCpzZXRfcG93ZXIpKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICosIGludCBwb3dlcik7Ci0JLyogTWF4aW1hbCB2YWx1ZSBmb3IgYnJpZ2h0bmVzcyAocmVhZC1vbmx5KSAqLwotCWludCBtYXhfYnJpZ2h0bmVzczsKLQkvKiBHZXQgY3VycmVudCBiYWNrbGlnaHQgYnJpZ2h0bmVzcyAqLworCisJLyogTm90aWZ5IHRoZSBiYWNrbGlnaHQgZHJpdmVyIHNvbWUgcHJvcGVydHkgaGFzIGNoYW5nZWQgKi8KKwlpbnQgKCp1cGRhdGVfc3RhdHVzKShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqKTsKKwkvKiBSZXR1cm4gdGhlIGN1cnJlbnQgYmFja2xpZ2h0IGJyaWdodG5lc3MgKGFjY291bnRpbmcgZm9yIHBvd2VyLAorCSAgIGZiX2JsYW5rIGV0Yy4pICovCiAJaW50ICgqZ2V0X2JyaWdodG5lc3MpKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICopOwotCS8qIFNldCBiYWNrbGlnaHQgYnJpZ2h0bmVzcyAoMC4ubWF4X2JyaWdodG5lc3MpICovCi0JaW50ICgqc2V0X2JyaWdodG5lc3MpKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICosIGludCBicmlnaHRuZXNzKTsKIAkvKiBDaGVjayBpZiBnaXZlbiBmcmFtZWJ1ZmZlciBkZXZpY2UgaXMgdGhlIG9uZSBib3VuZCB0byB0aGlzIGJhY2tsaWdodDsKIAkgICByZXR1cm4gMCBpZiBub3QsICE9MCBpZiBpdCBpcy4gSWYgTlVMTCwgYmFja2xpZ2h0IGFsd2F5cyBtYXRjaGVzIHRoZSBmYi4gKi8KIAlpbnQgKCpjaGVja19mYikoc3RydWN0IGZiX2luZm8gKik7CisKKwkvKiBDdXJyZW50IFVzZXIgcmVxdWVzdGVkIGJyaWdodG5lc3MgKDAgLSBtYXhfYnJpZ2h0bmVzcykgKi8KKwlpbnQgYnJpZ2h0bmVzczsKKwkvKiBNYXhpbWFsIHZhbHVlIGZvciBicmlnaHRuZXNzIChyZWFkLW9ubHkpICovCisJaW50IG1heF9icmlnaHRuZXNzOworCS8qIEN1cnJlbnQgRkIgUG93ZXIgbW9kZSAoMDogZnVsbCBvbiwgMS4uMzogcG93ZXIgc2F2aW5nCisJICAgbW9kZXM7IDQ6IGZ1bGwgb2ZmKSwgc2VlIEZCX0JMQU5LX1hYWCAqLworCWludCBwb3dlcjsKKwkvKiBGQiBCbGFua2luZyBhY3RpdmU/ICh2YWx1ZXMgYXMgZm9yIHBvd2VyKSAqLworCWludCBmYl9ibGFuazsKIH07CiAKIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IGQwY2FjOGIuLjU5ZTEyNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMTcsNiArMTcsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAKK3N0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQ7CisKIHN0cnVjdCByZXF1ZXN0X3F1ZXVlOwogdHlwZWRlZiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSByZXF1ZXN0X3F1ZXVlX3Q7CiBzdHJ1Y3QgZWxldmF0b3JfcXVldWU7CkBAIC02MTEsNiArNjEzLDggQEAKIGV4dGVybiBpbnQgYmxrX3JlbW92ZV9wbHVnKHJlcXVlc3RfcXVldWVfdCAqKTsKIGV4dGVybiB2b2lkIGJsa19yZWNvdW50X3NlZ21lbnRzKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgYmlvICopOwogZXh0ZXJuIGludCBzY3NpX2NtZF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopOworZXh0ZXJuIGludCBzZ19zY3NpX2lvY3RsKHN0cnVjdCBmaWxlICosIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosCisJCXN0cnVjdCBnZW5kaXNrICosIHN0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQgX191c2VyICopOwogZXh0ZXJuIHZvaWQgYmxrX3N0YXJ0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSk7CiBleHRlcm4gdm9pZCBibGtfc3RvcF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3N5bmNfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290bWVtLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAppbmRleCBkZTNlYjhkLi5kYTJkMTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaApAQCAtNDUsNiArNDUsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfYm9vdG1lbSAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG1lbWVuZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgZnJlZV9ib290bWVtICh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW0gKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBnb2FsKTsKK2V4dGVybiB2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljICh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCk7CiBleHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbG93KHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJCSB1bnNpZ25lZCBsb25nIGdvYWwpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggZDEwYmQzMC4uODM2MzI1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0yNzUsNiArMjc1LDcgQEAKIC8qIGFwcGVuZGl4IG1heSBlaXRoZXIgYmUgTlVMTCBvciBiZSB1c2VkIGZvciB0cmFuc25hbWUgc3VmZml4ZXMgKi8KIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogX19kX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2hhc2hfYW5kX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwogCiAvKiB2YWxpZGF0ZSAiaW5zZWN1cmUiIGRlbnRyeSBwb2ludGVyICovCiBleHRlcm4gaW50IGRfdmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmggYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaAppbmRleCAxNzZlMmQzLi4wNDc1NjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaApAQCAtNTgsOSArNTgsOCBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKLQkJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCi0JCQkJCQkgdm9pZCAqZGF0YSwKLQkJCQkJCSBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQorCQkJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCisJCQkJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCiB7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBmNmU3MmE2Li5lOGU1M2I5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTIwMCw2ICsyMDAsNyBAQAogICogQG5vZGU6IGZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIGRyaXZlciBjb3JlIG9ubHkuCiAgKiBAa29iajogZm9yIGludGVybmFsIHVzZSBieSB0aGUgZHJpdmVyIGNvcmUgb25seS4KICAqIEBkZXZ0X2F0dHI6IGZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIGRyaXZlciBjb3JlIG9ubHkuCisgKiBAZ3JvdXBzOiBvcHRpb25hbCBhZGRpdGlvbmFsIGdyb3VwcyB0byBiZSBjcmVhdGVkCiAgKiBAZGV2OiBpZiBzZXQsIGEgc3ltbGluayB0byB0aGUgc3RydWN0IGRldmljZSBpcyBjcmVhdGVkIGluIHRoZSBzeXNmcwogICogZGlyZWN0b3J5IGZvciB0aGlzIHN0cnVjdCBjbGFzcyBkZXZpY2UuCiAgKiBAY2xhc3NfZGF0YTogcG9pbnRlciB0byB3aGF0ZXZlciB5b3Ugd2FudCB0byBzdG9yZSBoZXJlIGZvciB0aGlzIHN0cnVjdApAQCAtMjI4LDYgKzIyOSw3IEBACiAJc3RydWN0IGRldmljZQkJKiBkZXY7CQkvKiBub3QgbmVjZXNzYXJ5LCBidXQgbmljZSB0byBoYXZlICovCiAJdm9pZAkJCSogY2xhc3NfZGF0YTsJLyogY2xhc3Mtc3BlY2lmaWMgZGF0YSAqLwogCXN0cnVjdCBjbGFzc19kZXZpY2UJKnBhcmVudDsJLyogcGFyZW50IG9mIHRoaXMgY2hpbGQgZGV2aWNlLCBpZiB0aGVyZSBpcyBvbmUgKi8KKwlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICAqKiBncm91cHM7CS8qIG9wdGlvbmFsIGdyb3VwcyAqLwogCiAJdm9pZAkoKnJlbGVhc2UpKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldik7CiAJaW50CSgqdWV2ZW50KShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCmluZGV4IDliNDc1MWEuLjYzNTY5MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKQEAgLTE0LDYgKzE0LDcgQEAKIH07CiAKICNkZWZpbmUgRE1BXzY0QklUX01BU0sJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCisjZGVmaW5lIERNQV80OEJJVF9NQVNLCTB4MDAwMGZmZmZmZmZmZmZmZlVMTAogI2RlZmluZSBETUFfNDBCSVRfTUFTSwkweDAwMDAwMGZmZmZmZmZmZmZVTEwKICNkZWZpbmUgRE1BXzM5QklUX01BU0sJMHgwMDAwMDA3ZmZmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8zMkJJVF9NQVNLCTB4MDAwMDAwMDBmZmZmZmZmZlVMTApAQCAtMjEsNyArMjIsNyBAQAogI2RlZmluZSBETUFfMzBCSVRfTUFTSwkweDAwMDAwMDAwM2ZmZmZmZmZVTEwKICNkZWZpbmUgRE1BXzI5QklUX01BU0sJMHgwMDAwMDAwMDFmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8yOEJJVF9NQVNLCTB4MDAwMDAwMDAwZmZmZmZmZlVMTAotI2RlZmluZSBETUFfMjRCSVRfTUFTSyAweDAwMDAwMDAwMDBmZmZmZmZVTEwKKyNkZWZpbmUgRE1BXzI0QklUX01BU0sJMHgwMDAwMDAwMDAwZmZmZmZmVUxMCiAKICNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oIGIvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCmluZGV4IGFkMTMzZmMuLjE3MTNhY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKQEAgLTIxLDcgKzIxLDcgQEAKIHR5cGVkZWYgdm9pZCAoZWxldmF0b3JfYWN0aXZhdGVfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogdHlwZWRlZiB2b2lkIChlbGV2YXRvcl9kZWFjdGl2YXRlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAotdHlwZWRlZiBpbnQgKGVsZXZhdG9yX2luaXRfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgZWxldmF0b3JfdCAqKTsKK3R5cGVkZWYgdm9pZCAqKGVsZXZhdG9yX2luaXRfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgZWxldmF0b3JfdCAqKTsKIHR5cGVkZWYgdm9pZCAoZWxldmF0b3JfZXhpdF9mbikgKGVsZXZhdG9yX3QgKik7CiAKIHN0cnVjdCBlbGV2YXRvcl9vcHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmFkdmlzZS5oIGIvaW5jbHVkZS9saW51eC9mYWR2aXNlLmgKaW5kZXggYjI5MTNiYi4uZThlNzQ3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYWR2aXNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYWR2aXNlLmgKQEAgLTE4LDEwICsxOCw0IEBACiAjZGVmaW5lIFBPU0lYX0ZBRFZfTk9SRVVTRQk1IC8qIERhdGEgd2lsbCBiZSBhY2Nlc3NlZCBvbmNlLiAgKi8KICNlbmRpZgogCi0vKgotICogTGludXgtc3BlY2lmaWMgZmFkdmlzZSgpIGV4dGVuc2lvbnM6Ci0gKi8KLSNkZWZpbmUgTElOVVhfRkFEVl9BU1lOQ19XUklURQkzMgkvKiBTdGFydCB3cml0ZW91dCBvbiByYW5nZSAqLwotI2RlZmluZSBMSU5VWF9GQURWX1dSSVRFX1dBSVQJMzMJLyogV2FpdCB1cG9uIHdyaXRlb3V0IHRvIHJhbmdlICovCi0KICNlbmRpZgkvKiBGQURWSVNFX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCBkMDNmYWRmLi4zMTVkODk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC04MzksMTIgKzgzOSwxMCBAQAogI2RlZmluZSBGQl9MRUZUX1BPUyhicHApICAgICAgICAgICgzMiAtIGJwcCkKICNkZWZpbmUgRkJfU0hJRlRfSElHSCh2YWwsIGJpdHMpICAoKHZhbCkgPj4gKGJpdHMpKQogI2RlZmluZSBGQl9TSElGVF9MT1codmFsLCBiaXRzKSAgICgodmFsKSA8PCAoYml0cykpCi0jZGVmaW5lIEZCX0JJVF9OUihiKSAgICAgICAgICAgICAgKDcgLSAoYikpCiAjZWxzZQogI2RlZmluZSBGQl9MRUZUX1BPUyhicHApICAgICAgICAgICgwKQogI2RlZmluZSBGQl9TSElGVF9ISUdIKHZhbCwgYml0cykgICgodmFsKSA8PCAoYml0cykpCiAjZGVmaW5lIEZCX1NISUZUX0xPVyh2YWwsIGJpdHMpICAgKCh2YWwpID4+IChiaXRzKSkKLSNkZWZpbmUgRkJfQklUX05SKGIpICAgICAgICAgICAgICAoYikKICNlbmRpZgogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlybXdhcmUuaCBiL2luY2x1ZGUvbGludXgvZmlybXdhcmUuaAppbmRleCAyZDcxNjA4Li4zM2Q4ZjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJtd2FyZS5oCkBAIC0xOSw1ICsxOSw0IEBACiAJdm9pZCAoKmNvbnQpKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpKTsKIAogdm9pZCByZWxlYXNlX2Zpcm13YXJlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOwotdm9pZCByZWdpc3Rlcl9maXJtd2FyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMjBmYTVmNi4uZjgxM2JjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMjEzLDYgKzIxMywxMCBAQAogI2RlZmluZSBGSUJNQVAJICAgX0lPKDB4MDAsMSkJLyogYm1hcCBhY2Nlc3MgKi8KICNkZWZpbmUgRklHRVRCU1ogICBfSU8oMHgwMCwyKQkvKiBnZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqLwogCisjZGVmaW5lIFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRQkxCisjZGVmaW5lIFNZTkNfRklMRV9SQU5HRV9XUklURQkJMgorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUgk0CisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CkBAIC03NTcsNiArNzYxLDEwIEBACiBleHRlcm4gaW50IGZjbnRsX3NldGxlYXNlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQgZmNudGxfZ2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApOwogCisvKiBmcy9zeW5jLmMgKi8KK2V4dGVybiBpbnQgZG9fc3luY19maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgZW5kYnl0ZSwKKwkJCXVuc2lnbmVkIGludCBmbGFncyk7CisKIC8qIGZzL2xvY2tzLmMgKi8KIGV4dGVybiB2b2lkIGxvY2tzX2luaXRfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICopOwogZXh0ZXJuIHZvaWQgbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKQEAgLTg1Nyw3ICs4NjUsNyBAQAogCSAqLwogCXN0cnVjdCBtdXRleCBzX3Zmc19yZW5hbWVfbXV0ZXg7CS8qIEtsdWRnZSAqLwogCi0JLyogR3JhbnVhbGl0eSBvZiBjL20vYXRpbWUgaW4gbnMuCisJLyogR3JhbnVsYXJpdHkgb2YgYy9tL2F0aW1lIGluIG5zLgogCSAgIENhbm5vdCBiZSB3b3JzZSB0aGFuIGEgc2Vjb25kICovCiAJdTMyCQkgICBzX3RpbWVfZ3JhbjsKIH07CkBAIC0xMDMyLDggKzEwNDAsOCBAQAogCWludCAoKmNoZWNrX2ZsYWdzKShpbnQpOwogCWludCAoKmRpcl9ub3RpZnkpKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAJaW50ICgqZmxvY2spIChzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7Ci0Jc3NpemVfdCAoKnNwbGljZV93cml0ZSkoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKLQlzc2l6ZV90ICgqc3BsaWNlX3JlYWQpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBpbm9kZSAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CisJc3NpemVfdCAoKnNwbGljZV93cml0ZSkoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworCXNzaXplX3QgKCpzcGxpY2VfcmVhZCkoc3RydWN0IGZpbGUgKiwgbG9mZl90ICosIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwogfTsKIAogc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewpAQCAtMTQxMyw2ICsxNDIxLDcgQEAKICNlbmRpZgogCiAvKiBmcy9jaGFyX2Rldi5jICovCisjZGVmaW5lIENIUkRFVl9NQUpPUl9IQVNIX1NJWkUJMjU1CiBleHRlcm4gaW50IGFsbG9jX2NocmRldl9yZWdpb24oZGV2X3QgKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldl90LCB1bnNpZ25lZCwgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfY2hyZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLApAQCAtMTQyMCwyNSArMTQyOSwxNyBAQAogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X3QsIHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgY2hyZGV2X29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwotZXh0ZXJuIGludCBnZXRfY2hyZGV2X2xpc3QoY2hhciAqKTsKLWV4dGVybiB2b2lkICphY3F1aXJlX2NocmRldl9saXN0KHZvaWQpOwotZXh0ZXJuIGludCBjb3VudF9jaHJkZXZfbGlzdCh2b2lkKTsKLWV4dGVybiB2b2lkICpnZXRfbmV4dF9jaHJkZXYodm9pZCAqKTsKLWV4dGVybiBpbnQgZ2V0X2NocmRldl9pbmZvKHZvaWQgKiwgaW50ICosIGNoYXIgKiopOwotZXh0ZXJuIHZvaWQgcmVsZWFzZV9jaHJkZXZfbGlzdCh2b2lkICopOworZXh0ZXJuIHZvaWQgY2hyZGV2X3Nob3coc3RydWN0IHNlcV9maWxlICosb2ZmX3QpOwogCiAvKiBmcy9ibG9ja19kZXYuYyAqLworI2RlZmluZSBCTEtERVZfTUFKT1JfSEFTSF9TSVpFCTI1NQogI2RlZmluZSBCREVWTkFNRV9TSVpFCTMyCS8qIExhcmdlc3Qgc3RyaW5nIGZvciBhIGJsb2NrZGV2IGlkZW50aWZpZXIgKi8KIGV4dGVybiBjb25zdCBjaGFyICpfX2JkZXZuYW1lKGRldl90LCBjaGFyICpidWZmZXIpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmJkZXZuYW1lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNoYXIgKmJ1ZmZlcik7CiBleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqbG9va3VwX2JkZXYoY29uc3QgY2hhciAqKTsKIGV4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2JkZXZfZXhjbChjb25zdCBjaGFyICosIGludCwgdm9pZCAqKTsKIGV4dGVybiB2b2lkIGNsb3NlX2JkZXZfZXhjbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgKmFjcXVpcmVfYmxrZGV2X2xpc3Qodm9pZCk7Ci1leHRlcm4gaW50IGNvdW50X2Jsa2Rldl9saXN0KHZvaWQpOwotZXh0ZXJuIHZvaWQgKmdldF9uZXh0X2Jsa2Rldih2b2lkICopOwotZXh0ZXJuIGludCBnZXRfYmxrZGV2X2luZm8odm9pZCAqLCBpbnQgKiwgY2hhciAqKik7Ci1leHRlcm4gdm9pZCByZWxlYXNlX2Jsa2Rldl9saXN0KHZvaWQgKik7CitleHRlcm4gdm9pZCBibGtkZXZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKixvZmZfdCk7CiAKIGV4dGVybiB2b2lkIGluaXRfc3BlY2lhbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCwgZGV2X3QpOwogCkBAIC0xNjExLDggKzE2MTIsMTcgQEAKIGV4dGVybiB2b2lkIGRvX2dlbmVyaWNfbWFwcGluZ19yZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCSAgICBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqLCBzdHJ1Y3QgZmlsZSAqLAogCQkJCSAgICBsb2ZmX3QgKiwgcmVhZF9kZXNjcmlwdG9yX3QgKiwgcmVhZF9hY3Rvcl90KTsKLWV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworCisvKiBmcy9zcGxpY2UuYyAqLworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLAorCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLAorCQlzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJc3RydWN0IGZpbGUgKm91dCwgbG9mZl90ICosIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CitleHRlcm4gbG9uZyBkb19zcGxpY2VfZGlyZWN0KHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLCBzdHJ1Y3QgZmlsZSAqb3V0LAorCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCiBleHRlcm4gdm9pZAogZmlsZV9yYV9zdGF0ZV9pbml0KHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWR2KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX3VhcnRfcGQuaCBiL2luY2x1ZGUvbGludXgvZnNfdWFydF9wZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTc1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzX3VhcnRfcGQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogUGxhdGZvcm0gaW5mb3JtYXRpb24gZGVmaW5pdGlvbnMgZm9yIHRoZSBDUE0gVWFydCBkcml2ZXIuCisgKgorICogMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogVml0YWx5IEJvcmR1ZyA8dmJvcmR1Z0BydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBGU19VQVJUX1BEX0gKKyNkZWZpbmUgRlNfVUFSVF9QRF9ICisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK2VudW0gZnNfdWFydF9pZCB7CisJZnNpZF9zbWMxX3VhcnQsCisJZnNpZF9zbWMyX3VhcnQsCisJZnNpZF9zY2MxX3VhcnQsCisJZnNpZF9zY2MyX3VhcnQsCisJZnNpZF9zY2MzX3VhcnQsCisJZnNpZF9zY2M0X3VhcnQsCisJZnNfdWFydF9uciwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGZzX3VhcnRfaWRfc2NjMmZzaWQoaW50IGlkKQoreworICAgIHJldHVybiBmc2lkX3NjYzFfdWFydCArIGlkIC0gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnNfdWFydF9pZF9mc2lkMnNjYyhpbnQgaWQpCit7CisgICAgcmV0dXJuIGlkIC0gZnNpZF9zY2MxX3VhcnQgKyAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBmc191YXJ0X2lkX3NtYzJmc2lkKGludCBpZCkKK3sKKyAgICByZXR1cm4gZnNpZF9zbWMxX3VhcnQgKyBpZCAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZzX3VhcnRfaWRfZnNpZDJzbWMoaW50IGlkKQoreworICAgIHJldHVybiBpZCAtIGZzaWRfc21jMV91YXJ0ICsgMTsKK30KKworc3RydWN0IGZzX3VhcnRfcGxhdGZvcm1faW5mbyB7CisgICAgICAgIHZvaWQoKmluaXRfaW9wb3J0cykodm9pZCk7CisJLyogZGV2aWNlIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJaW50IGZzX25vOwkJLyogY29udHJvbGxlciBpbmRleCAqLworCXUzMiB1YXJ0X2NsazsKKwl1OCB0eF9udW1fZmlmbzsKKwl1OCB0eF9idWZfc2l6ZTsKKwl1OCByeF9udW1fZmlmbzsKKwl1OCByeF9idWZfc2l6ZTsKKwl1OCBicmc7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaCBiL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAppbmRleCBhM2EwZTA3Li4xNmZiZTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCkBAIC0xMTAsNSArMTEwLDE2IEBACiAjZGVmaW5lIEZTTF9VU0IyX1BPUlQwX0VOQUJMRUQJMHgwMDAwMDAwMQogI2RlZmluZSBGU0xfVVNCMl9QT1JUMV9FTkFCTEVECTB4MDAwMDAwMDIKIAorc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSB7CisJdTMyIAlpbml0aWFsX3NwbW9kZTsJLyogaW5pdGlhbCBTUE1PREUgdmFsdWUgKi8KKwl1MTYJYnVzX251bTsKKworCS8qIGJvYXJkIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJdTE2CW1heF9jaGlwc2VsZWN0OworCXZvaWQJKCphY3RpdmF0ZV9jcykodTggY3MsIHU4IHBvbGFyaXR5KTsKKwl2b2lkCSgqZGVhY3RpdmF0ZV9jcykodTggY3MsIHU4IHBvbGFyaXR5KTsKKwl1MzIJc3lzY2xrOworfTsKKwogI2VuZGlmCQkJCS8qIF9GU0xfREVWSUNFX0hfICovCiAjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCmluZGV4IDljOGU2ZGEuLjcxZTdiMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKQEAgLTQwLDcgKzQxLDcgQEAKIAlzdHJ1Y3QgZ2FtZXBvcnQgKnBhcmVudCwgKmNoaWxkOwogCiAJc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2OwotCXN0cnVjdCBzZW1hcGhvcmUgZHJ2X3NlbTsJLyogcHJvdGVjdHMgc2VyaW8tPmRydiBzbyBhdHRyaWJ1dGVzIGNhbiBwaW4gZHJpdmVyICovCisJc3RydWN0IG11dGV4IGRydl9tdXRleDsJCS8qIHByb3RlY3RzIHNlcmlvLT5kcnYgc28gYXR0cmlidXRlcyBjYW4gcGluIGRyaXZlciAqLwogCiAJc3RydWN0IGRldmljZSBkZXY7CiAJdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7CS8qIHBvcnQgaGFzIGJlZW4gZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIGRyaXZlciBjb3JlICovCkBAIC0xMzcsMTIgKzEzOCwxMiBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBnYW1lcG9ydF9waW5fZHJpdmVyKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCiB7Ci0JcmV0dXJuIGRvd25faW50ZXJydXB0aWJsZSgmZ2FtZXBvcnQtPmRydl9zZW0pOworCXJldHVybiBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdhbWVwb3J0LT5kcnZfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfdW5waW5fZHJpdmVyKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCiB7Ci0JdXAoJmdhbWVwb3J0LT5kcnZfc2VtKTsKKwltdXRleF91bmxvY2soJmdhbWVwb3J0LT5kcnZfbXV0ZXgpOwogfQogCiB2b2lkIF9fZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDEwYTI3ZjIuLjJlZjg0NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTEwNSw2ICsxMDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRpc2tzIHRoYXQgY2FuJ3QgYmUgcGFydGl0aW9uZWQuICovCiAJY2hhciBkaXNrX25hbWVbMzJdOwkJLyogbmFtZSBvZiBtYWpvciBkcml2ZXIgKi8KIAlzdHJ1Y3QgaGRfc3RydWN0ICoqcGFydDsJLyogW2luZGV4ZWQgYnkgbWlub3JdICovCisJaW50IHBhcnRfdWV2ZW50X3N1cHByZXNzOwogCXN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqZm9wczsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggNzg1MWU2Yi4uM2FjNDUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC01Nyw2ICs1Nyw4IEBACiAJCQlfX0dGUF9OT0ZBSUx8X19HRlBfTk9SRVRSWXxfX0dGUF9OT19HUk9XfF9fR0ZQX0NPTVB8IFwKIAkJCV9fR0ZQX05PTUVNQUxMT0N8X19HRlBfSEFSRFdBTEwpCiAKKy8qIFRoaXMgZXF1YWxzIDAsIGJ1dCB1c2UgY29uc3RhbnRzIGluIGNhc2UgdGhleSBldmVyIGNoYW5nZSAqLworI2RlZmluZSBHRlBfTk9XQUlUCShHRlBfQVRPTUlDICYgfl9fR0ZQX0hJR0gpCiAvKiBHRlBfQVRPTUlDIG1lYW5zIGJvdGggIXdhaXQgKF9fR0ZQX1dBSVQgbm90IHNldCkgYW5kIHVzZSBlbWVyZ2VuY3kgcG9vbCAqLwogI2RlZmluZSBHRlBfQVRPTUlDCShfX0dGUF9ISUdIKQogI2RlZmluZSBHRlBfTk9JTwkoX19HRlBfV0FJVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggOTM4MzAxNS4uMzA2YWNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTU4LDYgKzU4LDE5IEBACiB9OwogCiAvKioKKyAqIHN0cnVjdCBocnRpbWVyX3NsZWVwZXIgLSBzaW1wbGUgc2xlZXBlciBzdHJ1Y3R1cmUKKyAqCisgKiBAdGltZXI6CWVtYmVkZGVkIHRpbWVyIHN0cnVjdHVyZQorICogQHRhc2s6CXRhc2sgdG8gd2FrZSB1cAorICoKKyAqIHRhc2sgaXMgc2V0IHRvIE5VTEwsIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuCisgKi8KK3N0cnVjdCBocnRpbWVyX3NsZWVwZXIgeworCXN0cnVjdCBocnRpbWVyIHRpbWVyOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKK307CisKKy8qKgogICogc3RydWN0IGhydGltZXJfYmFzZSAtIHRoZSB0aW1lciBiYXNlIGZvciBhIHNwZWNpZmljIGNsb2NrCiAgKgogICogQGluZGV4OgkJY2xvY2sgdHlwZSBpbmRleCBmb3IgcGVyX2NwdSBzdXBwb3J0IHdoZW4gbW92aW5nIGEgdGltZXIKQEAgLTY3LDcgKzgwLDcgQEAKICAqIEBmaXJzdDoJCXBvaW50ZXIgdG8gdGhlIHRpbWVyIG5vZGUgd2hpY2ggZXhwaXJlcyBmaXJzdAogICogQHJlc29sdXRpb246CQl0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2ssIGluIG5hbm9zZWNvbmRzCiAgKiBAZ2V0X3RpbWU6CQlmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBjbG9jawotICogQGdldF9zb2ZpcnFfdGltZToJZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSBzb2Z0aXJxCisgKiBAZ2V0X3NvZnRpcnFfdGltZToJZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSBzb2Z0aXJxCiAgKiBAY3Vycl90aW1lcjoJCXRoZSB0aW1lciB3aGljaCBpcyBleGVjdXRpbmcgYSBjYWxsYmFjayByaWdodCBub3cKICAqIEBzb2Z0aXJxX3RpbWU6CXRoZSB0aW1lIHdoZW4gcnVubmluZyB0aGUgaHJ0aW1lciBxdWV1ZSBpbiB0aGUgc29mdGlycQogICovCkBAIC0xMjcsNiArMTQwLDkgQEAKIAkJCSAgICAgIGNvbnN0IGVudW0gaHJ0aW1lcl9tb2RlIG1vZGUsCiAJCQkgICAgICBjb25zdCBjbG9ja2lkX3QgY2xvY2tpZCk7CiAKK2V4dGVybiB2b2lkIGhydGltZXJfaW5pdF9zbGVlcGVyKHN0cnVjdCBocnRpbWVyX3NsZWVwZXIgKnNsLAorCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKIC8qIFNvZnQgaW50ZXJydXB0IGZ1bmN0aW9uIHRvIHJ1biB0aGUgaHJ0aW1lciBxdWV1ZXM6ICovCiBleHRlcm4gdm9pZCBocnRpbWVyX3J1bl9xdWV1ZXModm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJvLmggYi9pbmNsdWRlL2xpbnV4L2kyby5oCmluZGV4IGRkN2Q2MjcuLmMxMTVlOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJvLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMm8uaApAQCAtMTExNCw4ICsxMTE0LDExIEBACiAKIAltbXNnLT5tZmEgPSByZWFkbChjLT5pbl9wb3J0KTsKIAlpZiAodW5saWtlbHkobW1zZy0+bWZhID49IGMtPmluX3F1ZXVlLmxlbikpIHsKKwkJdTMyIG1mYSA9IG1tc2ctPm1mYTsKKwogCQltZW1wb29sX2ZyZWUobW1zZywgYy0+aW5fbXNnLm1lbXBvb2wpOwotCQlpZihtbXNnLT5tZmEgPT0gSTJPX1FVRVVFX0VNUFRZKQorCisJCWlmIChtZmEgPT0gSTJPX1FVRVVFX0VNUFRZKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggOGQyZGI0MS4uYThiZWYxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC0xMjIwLDcgKzEyMjAsNiBAQAogZW51bSB7CiAJLyogVXNlcyBJU0EgY29udHJvbCBwb3J0cyBub3QgUENJIG9uZXMuICovCiAJSURFUENJX0ZMQUdfSVNBX1BPUlRTCQk9ICgxIDw8IDApLAotCUlERVBDSV9GTEFHX0ZPUkNFX1BEQwkJPSAoMSA8PCAxKSwKIH07CiAKIHR5cGVkZWYgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCBlZDBhYzdjLi45M2RjYmUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtMjQ1LDcgKzI0NSw4IEBACiAjZGVmaW5lIF9fY3B1ZXhpdGRhdGEJX19leGl0ZGF0YQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKKyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykgfHwgZGVmaW5lZChDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUllfTU9EVUxFKQogI2RlZmluZSBfX21lbWluaXQKICNkZWZpbmUgX19tZW1pbml0ZGF0YQogI2RlZmluZSBfX21lbWV4aXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQuaAppbmRleCAxZDRlMzQxLi5jZTFhNzU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCkBAIC0xMiw4ICsxMiw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjZWxzZQogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CkBAIC01OCw2ICs1Niw4IEBACiAKICNkZWZpbmUgRVZJT0NHVkVSU0lPTgkJX0lPUignRScsIDB4MDEsIGludCkJCQkvKiBnZXQgZHJpdmVyIHZlcnNpb24gKi8KICNkZWZpbmUgRVZJT0NHSUQJCV9JT1IoJ0UnLCAweDAyLCBzdHJ1Y3QgaW5wdXRfaWQpCS8qIGdldCBkZXZpY2UgSUQgKi8KKyNkZWZpbmUgRVZJT0NHUkVQCQlfSU9SKCdFJywgMHgwMywgaW50WzJdKQkJCS8qIGdldCByZXBlYXQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRVZJT0NTUkVQCQlfSU9XKCdFJywgMHgwMywgaW50WzJdKQkJCS8qIHNldCByZXBlYXQgc2V0dGluZ3MgKi8KICNkZWZpbmUgRVZJT0NHS0VZQ09ERQkJX0lPUignRScsIDB4MDQsIGludFsyXSkJCQkvKiBnZXQga2V5Y29kZSAqLwogI2RlZmluZSBFVklPQ1NLRVlDT0RFCQlfSU9XKCdFJywgMHgwNCwgaW50WzJdKQkJCS8qIHNldCBrZXljb2RlICovCiAKQEAgLTM0NSw2ICszNDUsOCBAQAogI2RlZmluZSBLRVlfU0FWRQkJMjM0CiAjZGVmaW5lIEtFWV9ET0NVTUVOVFMJCTIzNQogCisjZGVmaW5lIEtFWV9CQVRURVJZCQkyMzYKKwogI2RlZmluZSBLRVlfVU5LTk9XTgkJMjQwCiAKICNkZWZpbmUgQlROX01JU0MJCTB4MTAwCkBAIC00MjEsNyArNDIzLDcgQEAKICNkZWZpbmUgQlROX0dFQVJfVVAJCTB4MTUxCiAKICNkZWZpbmUgS0VZX09LCQkJMHgxNjAKLSNkZWZpbmUgS0VZX1NFTEVDVCAJCTB4MTYxCisjZGVmaW5lIEtFWV9TRUxFQ1QJCTB4MTYxCiAjZGVmaW5lIEtFWV9HT1RPCQkweDE2MgogI2RlZmluZSBLRVlfQ0xFQVIJCTB4MTYzCiAjZGVmaW5lIEtFWV9QT1dFUjIJCTB4MTY0CkBAIC01MTIsNiArNTE0LDE1IEBACiAjZGVmaW5lIEtFWV9GTl9TCQkweDFlMwogI2RlZmluZSBLRVlfRk5fQgkJMHgxZTQKIAorI2RlZmluZSBLRVlfQlJMX0RPVDEJCTB4MWYxCisjZGVmaW5lIEtFWV9CUkxfRE9UMgkJMHgxZjIKKyNkZWZpbmUgS0VZX0JSTF9ET1QzCQkweDFmMworI2RlZmluZSBLRVlfQlJMX0RPVDQJCTB4MWY0CisjZGVmaW5lIEtFWV9CUkxfRE9UNQkJMHgxZjUKKyNkZWZpbmUgS0VZX0JSTF9ET1Q2CQkweDFmNgorI2RlZmluZSBLRVlfQlJMX0RPVDcJCTB4MWY3CisjZGVmaW5lIEtFWV9CUkxfRE9UOAkJMHgxZjgKKwogLyogV2UgYXZvaWQgbG93IGNvbW1vbiBrZXlzIGluIG1vZHVsZSBhbGlhc2VzIHNvIHRoZXkgZG9uJ3QgZ2V0IGh1Z2UuICovCiAjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcJS0VZX01VVEUKICNkZWZpbmUgS0VZX01BWAkJCTB4MWZmCkBAIC01NjgsMTUgKzU3OSwxMCBAQAogICogU3dpdGNoIGV2ZW50cwogICovCiAKLSNkZWZpbmUgU1dfMAkJMHgwMAotI2RlZmluZSBTV18xCQkweDAxCi0jZGVmaW5lIFNXXzIJCTB4MDIKLSNkZWZpbmUgU1dfMwkJMHgwMwotI2RlZmluZSBTV180CQkweDA0Ci0jZGVmaW5lIFNXXzUJCTB4MDUKLSNkZWZpbmUgU1dfNgkJMHgwNgotI2RlZmluZSBTV183CQkweDA3Ci0jZGVmaW5lIFNXX01BWAkJMHgwZgorI2RlZmluZSBTV19MSUQJCQkweDAwICAvKiBzZXQgPSBsaWQgc2h1dCAqLworI2RlZmluZSBTV19UQUJMRVRfTU9ERQkJMHgwMSAgLyogc2V0ID0gdGFibGV0IG1vZGUgKi8KKyNkZWZpbmUgU1dfSEVBRFBIT05FX0lOU0VSVAkweDAyICAvKiBzZXQgPSBpbnNlcnRlZCAqLworI2RlZmluZSBTV19NQVgJCQkweDBmCiAKIC8qCiAgKiBNaXNjIGV2ZW50cwpAQCAtNzk2LDUyICs4MDIsMTYgQEAKIAogI2RlZmluZSBGRl9NQVgJCTB4N2YKIAotc3RydWN0IGlucHV0X2RldmljZV9pZCB7Ci0KLQlrZXJuZWxfdWxvbmdfdCBmbGFnczsKLQotCXN0cnVjdCBpbnB1dF9pZCBpZDsKLQotCWtlcm5lbF91bG9uZ190IGV2Yml0W0VWX01BWC9CSVRTX1BFUl9MT05HKzFdOwotCWtlcm5lbF91bG9uZ190IGtleWJpdFtLRVlfTUFYL0JJVFNfUEVSX0xPTkcrMV07Ci0Ja2VybmVsX3Vsb25nX3QgcmVsYml0W1JFTF9NQVgvQklUU19QRVJfTE9ORysxXTsKLQlrZXJuZWxfdWxvbmdfdCBhYnNiaXRbQUJTX01BWC9CSVRTX1BFUl9MT05HKzFdOwotCWtlcm5lbF91bG9uZ190IG1zY2JpdFtNU0NfTUFYL0JJVFNfUEVSX0xPTkcrMV07Ci0Ja2VybmVsX3Vsb25nX3QgbGVkYml0W0xFRF9NQVgvQklUU19QRVJfTE9ORysxXTsKLQlrZXJuZWxfdWxvbmdfdCBzbmRiaXRbU05EX01BWC9CSVRTX1BFUl9MT05HKzFdOwotCWtlcm5lbF91bG9uZ190IGZmYml0W0ZGX01BWC9CSVRTX1BFUl9MT05HKzFdOwotCWtlcm5lbF91bG9uZ190IHN3Yml0W1NXX01BWC9CSVRTX1BFUl9MT05HKzFdOwotCi0Ja2VybmVsX3Vsb25nX3QgZHJpdmVyX2luZm87Ci19OwotCi0vKgotICogU3RydWN0dXJlIGZvciBob3RwbHVnICYgZGV2aWNlPC0+ZHJpdmVyIG1hdGNoaW5nLgotICovCi0KLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0JVUwkxCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IJMgotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVAk0Ci0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRVJTSU9OCTgKLQotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQJMHgwMTAKLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0tFWUJJVAkweDAyMAotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUkVMQklUCTB4MDQwCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9BQlNCSVQJMHgwODAKLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX01TQ0lUCTB4MTAwCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9MRURCSVQJMHgyMDAKLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1NOREJJVAkweDQwMAotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRkZCSVQJMHg4MDAKLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1NXQklUCTB4MTAwMAotCiAjaWZkZWYgX19LRVJORUxfXwogCiAvKgogICogSW4ta2VybmVsIGRlZmluaXRpb25zLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAKICNkZWZpbmUgTkJJVFMoeCkgKCgoeCkvQklUU19QRVJfTE9ORykrMSkKICNkZWZpbmUgQklUKHgpCSgxVUw8PCgoeCklQklUU19QRVJfTE9ORykpCkBAIC05MjksNyArODk5LDcgQEAKIAogCXN0cnVjdCBpbnB1dF9oYW5kbGUgKmdyYWI7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogc2VyaWFsaXplcyBvcGVuIGFuZCBjbG9zZSBvcGVyYXRpb25zICovCisJc3RydWN0IG11dGV4IG11dGV4OwkvKiBzZXJpYWxpemVzIG9wZW4gYW5kIGNsb3NlIG9wZXJhdGlvbnMgKi8KIAl1bnNpZ25lZCBpbnQgdXNlcnM7CiAKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNkZXY7CkBAIC05NDIsOSArOTEyLDQ5IEBACiB9OwogI2RlZmluZSB0b19pbnB1dF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBpbnB1dF9kZXYsIGNkZXYpCiAKLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0RFVklDRVwKKy8qCisgKiBWZXJpZnkgdGhhdCB3ZSBhcmUgaW4gc3luYyB3aXRoIGlucHV0X2RldmljZV9pZCBtb2RfZGV2aWNldGFibGUuaCAjZGVmaW5lcworICovCisKKyNpZiBFVl9NQVggIT0gSU5QVVRfREVWSUNFX0lEX0VWX01BWAorI2Vycm9yICJFVl9NQVggYW5kIElOUFVUX0RFVklDRV9JRF9FVl9NQVggZG8gbm90IG1hdGNoIgorI2VuZGlmCisKKyNpZiBLRVlfTUFYICE9IElOUFVUX0RFVklDRV9JRF9LRVlfTUFYCisjZXJyb3IgIktFWV9NQVggYW5kIElOUFVUX0RFVklDRV9JRF9LRVlfTUFYIGRvIG5vdCBtYXRjaCIKKyNlbmRpZgorCisjaWYgUkVMX01BWCAhPSBJTlBVVF9ERVZJQ0VfSURfUkVMX01BWAorI2Vycm9yICJSRUxfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfUkVMX01BWCBkbyBub3QgbWF0Y2giCisjZW5kaWYKKworI2lmIEFCU19NQVggIT0gSU5QVVRfREVWSUNFX0lEX0FCU19NQVgKKyNlcnJvciAiQUJTX01BWCBhbmQgSU5QVVRfREVWSUNFX0lEX0FCU19NQVggZG8gbm90IG1hdGNoIgorI2VuZGlmCisKKyNpZiBNU0NfTUFYICE9IElOUFVUX0RFVklDRV9JRF9NU0NfTUFYCisjZXJyb3IgIk1TQ19NQVggYW5kIElOUFVUX0RFVklDRV9JRF9NU0NfTUFYIGRvIG5vdCBtYXRjaCIKKyNlbmRpZgorCisjaWYgTEVEX01BWCAhPSBJTlBVVF9ERVZJQ0VfSURfTEVEX01BWAorI2Vycm9yICJMRURfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfTEVEX01BWCBkbyBub3QgbWF0Y2giCisjZW5kaWYKKworI2lmIFNORF9NQVggIT0gSU5QVVRfREVWSUNFX0lEX1NORF9NQVgKKyNlcnJvciAiU05EX01BWCBhbmQgSU5QVVRfREVWSUNFX0lEX1NORF9NQVggZG8gbm90IG1hdGNoIgorI2VuZGlmCisKKyNpZiBGRl9NQVggIT0gSU5QVVRfREVWSUNFX0lEX0ZGX01BWAorI2Vycm9yICJGRl9NQVggYW5kIElOUFVUX0RFVklDRV9JRF9GRl9NQVggZG8gbm90IG1hdGNoIgorI2VuZGlmCisKKyNpZiBTV19NQVggIT0gSU5QVVRfREVWSUNFX0lEX1NXX01BWAorI2Vycm9yICJTV19NQVggYW5kIElOUFVUX0RFVklDRV9JRF9TV19NQVggZG8gbm90IG1hdGNoIgorI2VuZGlmCisKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0RFVklDRSBcCiAJKElOUFVUX0RFVklDRV9JRF9NQVRDSF9CVVMgfCBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SIHwgSU5QVVRfREVWSUNFX0lEX01BVENIX1BST0RVQ1QpCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT05cCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04gXAogCShJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFUlNJT04pCiAKIHN0cnVjdCBpbnB1dF9oYW5kbGU7CkBAIC05OTUsMTEgKzEwMDUsNiBAQAogCiBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9hbGxvY2F0ZV9kZXZpY2Uodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9mcmVlX2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCi17Ci0Ja2ZyZWUoZGV2KTsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9nZXRfZGV2aWNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAlyZXR1cm4gdG9faW5wdXRfZGV2KGNsYXNzX2RldmljZV9nZXQoJmRldi0+Y2RldikpOwpAQCAtMTAxMCw2ICsxMDE1LDEyIEBACiAJY2xhc3NfZGV2aWNlX3B1dCgmZGV2LT5jZGV2KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlucHV0X2ZyZWVfZGV2aWNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlpZiAoZGV2KQorCQlpbnB1dF9wdXRfZGV2aWNlKGRldik7Cit9CisKIGludCBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGlucHV0X2RldiAqKTsKIHZvaWQgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGlucHV0X2RldiAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oIGIvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oCmluZGV4IDUzNTcxMjguLjZkOWM3ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBtaV9zbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmgKQEAgLTgyLDYgKzgyLDEzIEBACiB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAKKwkvKiBUaGUgbG93LWxldmVsIGludGVyZmFjZSBjYW5ub3Qgc3RhcnQgc2VuZGluZyBtZXNzYWdlcyB0bworCSAgIHRoZSB1cHBlciBsYXllciB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gIFRoaXMgbWF5CisJICAgbm90IGJlIE5VTEwsIHRoZSBsb3dlciBsYXllciBtdXN0IHRha2UgdGhlIGludGVyZmFjZSBmcm9tCisJICAgdGhpcyBjYWxsLiAqLworCWludCAoKnN0YXJ0X3Byb2Nlc3NpbmcpKHZvaWQgICAgICAgKnNlbmRfaW5mbywKKwkJCQlpcG1pX3NtaV90IG5ld19pbnRmKTsKKwogCS8qIENhbGxlZCB0byBlbnF1ZXVlIGFuIFNNSSBtZXNzYWdlIHRvIGJlIHNlbnQuICBUaGlzCiAJICAgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGZhaWwuICBJZiBhbiBlcnJvciBvY2N1cnMsIGl0CiAJICAgc2hvdWxkIHJlcG9ydCBiYWNrIHRoZSBlcnJvciBpbiBhIHJlY2VpdmVkIG1lc3NhZ2UuICBJdCBtYXkKQEAgLTE1NywxMyArMTY0LDE2IEBACiB9CiAKIC8qIEFkZCBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIElQTUkgZHJpdmVyLiAgTm90ZSB0aGF0IGlmIHRoZQotICAgaW50ZXJmYWNlIGRvZXNuJ3Qga25vdyBpdHMgc2xhdmUgYWRkcmVzcywgaXQgc2hvdWxkIHBhc3MgaW4gemVyby4gKi8KKyAgIGludGVyZmFjZSBkb2Vzbid0IGtub3cgaXRzIHNsYXZlIGFkZHJlc3MsIGl0IHNob3VsZCBwYXNzIGluIHplcm8uCisgICBUaGUgbG93LWxldmVsIGludGVyZmFjZSBzaG91bGQgbm90IGRlbGl2ZXIgYW55IG1lc3NhZ2VzIHRvIHRoZQorICAgdXBwZXIgbGF5ZXIgdW50aWwgdGhlIHN0YXJ0X3Byb2Nlc3NpbmcoKSBmdW5jdGlvbiBpbiB0aGUgaGFuZGxlcnMKKyAgIGlzIGNhbGxlZCwgYW5kIHRoZSBsb3dlciBsYXllciBtdXN0IGdldCB0aGUgaW50ZXJmYWNlIGZyb20gdGhhdAorICAgY2FsbC4gKi8KIGludCBpcG1pX3JlZ2lzdGVyX3NtaShzdHJ1Y3QgaXBtaV9zbWlfaGFuZGxlcnMgKmhhbmRsZXJzLAogCQkgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgKnNlbmRfaW5mbywKIAkJICAgICAgc3RydWN0IGlwbWlfZGV2aWNlX2lkICAgICpkZXZpY2VfaWQsCiAJCSAgICAgIHN0cnVjdCBkZXZpY2UgICAgICAgICAgICAqZGV2LAotCQkgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgc2xhdmVfYWRkciwKLQkJICAgICAgaXBtaV9zbWlfdCAgICAgICAgICAgICAgICppbnRmKTsKKwkJICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgIHNsYXZlX2FkZHIpOwogCiAvKgogICogUmVtb3ZlIGEgbG93LWxldmVsIGludGVyZmFjZSBmcm9tIHRoZSBJUE1JIGRyaXZlci4gIFRoaXMgd2lsbApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmggYi9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaAppbmRleCA5OTkwNWUxLi4wNDMzNzY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaApAQCAtMzYsNiArMzYsOCBAQAogLyogTEFUQ0ggaXMgdXNlZCBpbiB0aGUgaW50ZXJ2YWwgdGltZXIgYW5kIGZ0YXBlIHNldHVwLiAqLwogI2RlZmluZSBMQVRDSCAgKChDTE9DS19USUNLX1JBVEUgKyBIWi8yKSAvIEhaKQkvKiBGb3IgZGl2aWRlciAqLwogCisjZGVmaW5lIExBVENIX0hQRVQgKChIUEVUX1RJQ0tfUkFURSArIEhaLzIpIC8gSFopCisKIC8qIFN1cHBvc2Ugd2Ugd2FudCB0byBkZXZpZGUgdHdvIG51bWJlcnMgTk9NIGFuZCBERU46IE5PTS9ERU4sIHRoZSB3ZSBjYW4KICAqIGltcHJvdmUgYWNjdXJhY3kgYnkgc2hpZnRpbmcgTFNIIGJpdHMsIGhlbmNlIGNhbGN1bGF0aW5nOgogICogICAgIChOT00gPDwgTFNIKSAvIERFTgpAQCAtNTEsOSArNTMsMTMgQEAKIC8qIEhaIGlzIHRoZSByZXF1ZXN0ZWQgdmFsdWUuIEFDVEhaIGlzIGFjdHVhbCBIWiAoIjw8IDgiIGlzIGZvciBhY2N1cmFjeSkgKi8KICNkZWZpbmUgQUNUSFogKFNIX0RJViAoQ0xPQ0tfVElDS19SQVRFLCBMQVRDSCwgOCkpCiAKKyNkZWZpbmUgQUNUSFpfSFBFVCAoU0hfRElWIChIUEVUX1RJQ0tfUkFURSwgTEFUQ0hfSFBFVCwgOCkpCisKIC8qIFRJQ0tfTlNFQyBpcyB0aGUgdGltZSBiZXR3ZWVuIHRpY2tzIGluIG5zZWMgYXNzdW1pbmcgcmVhbCBBQ1RIWiAqLwogI2RlZmluZSBUSUNLX05TRUMgKFNIX0RJViAoMTAwMDAwMFVMICogMTAwMCwgQUNUSFosIDgpKQogCisjZGVmaW5lIFRJQ0tfTlNFQ19IUEVUIChTSF9ESVYoMTAwMDAwMFVMICogMTAwMCwgQUNUSFpfSFBFVCwgOCkpCisKIC8qIFRJQ0tfVVNFQyBpcyB0aGUgdGltZSBiZXR3ZWVuIHRpY2tzIGluIHVzZWMgYXNzdW1pbmcgZmFrZSBVU0VSX0haICovCiAjZGVmaW5lIFRJQ0tfVVNFQyAoKDEwMDAwMDBVTCArIFVTRVJfSFovMikgLyBVU0VSX0haKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmggYi9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmgKaW5kZXggZTg3YzMyYS4uNGViODUxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oCisrKyBiL2luY2x1ZGUvbGludXgva2JkX2tlcm4uaApAQCAtMTM1LDYgKzEzNSw4IEBACiAKICNkZWZpbmUgVSh4KSAoKHgpIF4gMHhmMDAwKQogCisjZGVmaW5lIEJSTF9VQ19ST1cgMHgyODAwCisKIC8qIGtleWJvYXJkLmMgKi8KIAogc3RydWN0IGNvbnNvbGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCBhMzcyMGY5Li5mNGZjNTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTEyNCw2ICsxMjQsNyBAQAogZXh0ZXJuIGNoYXIgKmdldF9vcHRpb25zKGNvbnN0IGNoYXIgKnN0ciwgaW50IG5pbnRzLCBpbnQgKmludHMpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1wYXJzZShjaGFyICpwdHIsIGNoYXIgKipyZXRwdHIpOwogCitleHRlcm4gaW50IGNvcmVfa2VybmVsX3RleHQodW5zaWduZWQgbG9uZyBhZGRyKTsKIGV4dGVybiBpbnQgX19rZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gaW50IGtlcm5lbF90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKIGV4dGVybiBpbnQgc2Vzc2lvbl9vZl9wZ3JwKGludCBwZ3JwKTsKQEAgLTE3Niw3ICsxNzcsNyBAQAogCiBleHRlcm4gdm9pZCBidXN0X3NwaW5sb2NrcyhpbnQgeWVzKTsKIGV4dGVybiBpbnQgb29wc19pbl9wcm9ncmVzczsJCS8qIElmIHNldCwgYW4gb29wcywgcGFuaWMoKSwgQlVHKCkgb3IgZGllKCkgaXMgaW4gcHJvZ3Jlc3MgKi8KLWV4dGVybiBfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXMgaW50IHBhbmljX3RpbWVvdXQ7CitleHRlcm4gaW50IHBhbmljX3RpbWVvdXQ7CiBleHRlcm4gaW50IHBhbmljX29uX29vcHM7CiBleHRlcm4gaW50IHRhaW50ZWQ7CiBleHRlcm4gY29uc3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V5Ym9hcmQuaCBiL2luY2x1ZGUvbGludXgva2V5Ym9hcmQuaAppbmRleCAwODQ4ODA0Li5kZTc2ODQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tleWJvYXJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXlib2FyZC5oCkBAIC00NCw2ICs0NCw3IEBACiAjZGVmaW5lIEtUX0FTQ0lJCTkKICNkZWZpbmUgS1RfTE9DSwkJMTAKICNkZWZpbmUgS1RfU0xPQ0sJMTIKKyNkZWZpbmUgS1RfQlJMCQkxNAogCiAjZGVmaW5lIEsodCx2KQkJKCgodCk8PDgpfCh2KSkKICNkZWZpbmUgS1RZUCh4KQkJKCh4KSA+PiA4KQpAQCAtNDI3LDUgKzQyOCwxNyBAQAogCiAjZGVmaW5lIE5SX0xPQ0sJCTgKIAorI2RlZmluZSBLX0JSTF9CTEFOSyAgICAgSyhLVF9CUkwsIDApCisjZGVmaW5lIEtfQlJMX0RPVDEgICAgICBLKEtUX0JSTCwgMSkKKyNkZWZpbmUgS19CUkxfRE9UMiAgICAgIEsoS1RfQlJMLCAyKQorI2RlZmluZSBLX0JSTF9ET1QzICAgICAgSyhLVF9CUkwsIDMpCisjZGVmaW5lIEtfQlJMX0RPVDQgICAgICBLKEtUX0JSTCwgNCkKKyNkZWZpbmUgS19CUkxfRE9UNSAgICAgIEsoS1RfQlJMLCA1KQorI2RlZmluZSBLX0JSTF9ET1Q2ICAgICAgSyhLVF9CUkwsIDYpCisjZGVmaW5lIEtfQlJMX0RPVDcgICAgICBLKEtUX0JSTCwgNykKKyNkZWZpbmUgS19CUkxfRE9UOCAgICAgIEsoS1RfQlJMLCA4KQorCisjZGVmaW5lIE5SX0JSTAkJOQorCiAjZGVmaW5lIE1BWF9ESUFDUgkyNTYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmggYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAppbmRleCA0Y2IxMjE0Li5jMTg3YzUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNkZWZpbmUgS09CSl9OQU1FX0xFTgkJCTIwCkBAIC01Niw2ICs1Nyw3IEBACiAJc3RydWN0IGtzZXQJCSoga3NldDsKIAlzdHJ1Y3Qga29ial90eXBlCSoga3R5cGU7CiAJc3RydWN0IGRlbnRyeQkJKiBkZW50cnk7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcG9sbDsKIH07CiAKIGV4dGVybiBpbnQga29iamVjdF9zZXRfbmFtZShzdHJ1Y3Qga29iamVjdCAqLCBjb25zdCBjaGFyICosIC4uLikKQEAgLTI1NSw5ICsyNTcsOCBAQAogfTsKIAogZXh0ZXJuIGludCBzdWJzeXNfY3JlYXRlX2ZpbGUoc3RydWN0IHN1YnN5c3RlbSAqICwgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgKik7Ci1leHRlcm4gdm9pZCBzdWJzeXNfcmVtb3ZlX2ZpbGUoc3RydWN0IHN1YnN5c3RlbSAqICwgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgKik7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHKSAmJiBkZWZpbmVkKENPTkZJR19ORVQpCisjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykKIHZvaWQga29iamVjdF91ZXZlbnQoc3RydWN0IGtvYmplY3QgKmtvYmosIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uKTsKIAogaW50IGFkZF91ZXZlbnRfdmFyKGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsIGludCAqY3VyX2luZGV4LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzIzYzdjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9sZWRzLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBEcml2ZXIgbW9kZWwgZm9yIGxlZHMgYW5kIGxlZCB0cmlnZ2VycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKb2huIExlbnogPGxlbnpAY3Mud2lzYy5lZHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9MRURTX0hfSU5DTFVERUQKKyNkZWZpbmUgX19MSU5VWF9MRURTX0hfSU5DTFVERUQKKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBjbGFzc19kZXZpY2U7CisvKgorICogTEVEIENvcmUKKyAqLworCitlbnVtIGxlZF9icmlnaHRuZXNzIHsKKwlMRURfT0ZGCQk9IDAsCisJTEVEX0hBTEYJPSAxMjcsCisJTEVEX0ZVTEwJPSAyNTUsCit9OworCitzdHJ1Y3QgbGVkX2NsYXNzZGV2IHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlpbnQJCQkgYnJpZ2h0bmVzczsKKwlpbnQJCQkgZmxhZ3M7CisKKyNkZWZpbmUgTEVEX1NVU1BFTkRFRAkJKDEgPDwgMCkKKworCS8qIFNldCBMRUQgYnJpZ2h0bmVzcyBsZXZlbCAqLworCXZvaWQJCSgqYnJpZ2h0bmVzc19zZXQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCQkgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcyk7CisKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlCSpjbGFzc19kZXY7CisJc3RydWN0IGxpc3RfaGVhZAkgbm9kZTsJCQkvKiBMRUQgRGV2aWNlIGxpc3QgKi8KKwljaGFyCQkJKmRlZmF1bHRfdHJpZ2dlcjsJLyogVHJpZ2dlciB0byB1c2UgKi8KKworI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCisJLyogUHJvdGVjdHMgdGhlIHRyaWdnZXIgZGF0YSBiZWxvdyAqLworCXJ3bG9ja190CQkgdHJpZ2dlcl9sb2NrOworCisJc3RydWN0IGxlZF90cmlnZ2VyCSp0cmlnZ2VyOworCXN0cnVjdCBsaXN0X2hlYWQJIHRyaWdfbGlzdDsKKwl2b2lkCQkJKnRyaWdnZXJfZGF0YTsKKyNlbmRpZgorfTsKKworZXh0ZXJuIGludCBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LAorCQkJCSBzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CitleHRlcm4gdm9pZCBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CitleHRlcm4gdm9pZCBsZWRfY2xhc3NkZXZfc3VzcGVuZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CitleHRlcm4gdm9pZCBsZWRfY2xhc3NkZXZfcmVzdW1lKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKKworLyoKKyAqIExFRCBUcmlnZ2VycworICovCisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKKworI2RlZmluZSBUUklHX05BTUVfTUFYIDUwCisKK3N0cnVjdCBsZWRfdHJpZ2dlciB7CisJLyogVHJpZ2dlciBQcm9wZXJ0aWVzICovCisJY29uc3QgY2hhcgkgKm5hbWU7CisJdm9pZAkJKCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOworCXZvaWQJCSgqZGVhY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOworCisJLyogTEVEcyB1bmRlciBjb250cm9sIGJ5IHRoaXMgdHJpZ2dlciAoZm9yIHNpbXBsZSB0cmlnZ2VycykgKi8KKwlyd2xvY2tfdAkgIGxlZGRldl9saXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCAgbGVkX2NkZXZzOworCisJLyogTGluayB0byBuZXh0IHJlZ2lzdGVyZWQgdHJpZ2dlciAqLworCXN0cnVjdCBsaXN0X2hlYWQgIG5leHRfdHJpZzsKK307CisKKy8qIFJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgZm9yIGNvbXBsZXggdHJpZ2dlcnMgKi8KK2V4dGVybiBpbnQgbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTsKK2V4dGVybiB2b2lkIGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTsKKworLyogUmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBmb3Igc2ltcGxlIHRyaWdnZXJzICovCisjZGVmaW5lIERFRklORV9MRURfVFJJR0dFUih4KQkJc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciAqeDsKKyNkZWZpbmUgREVGSU5FX0xFRF9UUklHR0VSX0dMT0JBTCh4KQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKng7CitleHRlcm4gdm9pZCBsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKip0cmlnZ2VyKTsKK2V4dGVybiB2b2lkIGxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcik7CitleHRlcm4gdm9pZCBsZWRfdHJpZ2dlcl9ldmVudChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIsCisJCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyBldmVudCk7CisKKyNlbHNlCisKKy8qIFRyaWdnZXJzIGFyZW4ndCBhY3RpdmUgLSBudWxsIG1hY3JvcyAqLworI2RlZmluZSBERUZJTkVfTEVEX1RSSUdHRVIoeCkKKyNkZWZpbmUgREVGSU5FX0xFRF9UUklHR0VSX0dMT0JBTCh4KQorI2RlZmluZSBsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoeCwgeSkgZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoeCkgZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgbGVkX3RyaWdnZXJfZXZlbnQoeCwgeSkgZG8ge30gd2hpbGUoMCkKKworI2VuZGlmCisKKy8qIFRyaWdnZXIgc3BlY2lmaWMgZnVuY3Rpb25zICovCisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSworZXh0ZXJuIHZvaWQgbGVkdHJpZ19pZGVfYWN0aXZpdHkodm9pZCk7CisjZWxzZQorI2RlZmluZSBsZWR0cmlnX2lkZV9hY3Rpdml0eSgpIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworI2VuZGlmCQkvKiBfX0xJTlVYX0xFRFNfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggMGQ2MTM1Ny4uYjgwZDJlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC01MjMsNyArNTIzLDYgQEAKIGV4dGVybiBpbnQgYXRhX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCk7CiBleHRlcm4gaW50IGF0YV9zY3NpX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfcXVldWVjbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7Ci1leHRlcm4gaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwogZXh0ZXJuIHZvaWQgYXRhX2VoX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIHZvaWQgYXRhX2VoX3FjX3JldHJ5KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJwczIuaCBiL2luY2x1ZGUvbGludXgvbGlicHMyLmgKaW5kZXggYTcxMGJkZC4uMDhhNDUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJwczIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYnBzMi5oCkBAIC0yOCw3ICsyOCw3IEBACiAJc3RydWN0IHNlcmlvICpzZXJpbzsKIAogCS8qIEVuc3VyZXMgdGhhdCBvbmx5IG9uZSBjb21tYW5kIGlzIGV4ZWN1dGluZyBhdCBhIHRpbWUgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGNtZF9zZW07CisJc3RydWN0IG11dGV4IGNtZF9tdXRleDsKIAogCS8qIFVzZWQgdG8gc2lnbmFsIGNvbXBsZXRpb24gZnJvbSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL2luY2x1ZGUvbGludXgvbGlzdC5oCmluZGV4IDY3MjU4YjQuLjc2ZjA1NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC02MTksNyArNjE5LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2RlbF9pbml0KHN0cnVjdCBobGlzdF9ub2RlICpuKQogewotCWlmIChuLT5wcHJldikgIHsKKwlpZiAoIWhsaXN0X3VuaGFzaGVkKG4pKSB7CiAJCV9faGxpc3RfZGVsKG4pOwogCQlJTklUX0hMSVNUX05PREUobik7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tNDh0ODYuaCBiL2luY2x1ZGUvbGludXgvbTQ4dDg2LmgKaW5kZXggOTA2NTE5OS4uOTE1ZDZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tNDh0ODYuaAorKysgYi9pbmNsdWRlL2xpbnV4L200OHQ4Ni5oCkBAIC0xMSw2ICsxMSw2IEBACiAKIHN0cnVjdCBtNDh0ODZfb3BzCiB7Ci0Jdm9pZCAoKndyaXRlYikodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKLQl1bnNpZ25lZCBjaGFyICgqcmVhZGIpKHVuc2lnbmVkIGxvbmcgYWRkcik7CisJdm9pZCAoKndyaXRlYnl0ZSkodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKKwl1bnNpZ25lZCBjaGFyICgqcmVhZGJ5dGUpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCmluZGV4IDk2OGIxYWEuLjkxMTIwNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKQEAgLTU4LDggKzU4LDYgQEAKIC8qIG5lZWQgc29tZSBkZWZpbmVzIGZvciB0aGVzZSBmb3IgYXJjaHMgdGhhdCBkb24ndCBzdXBwb3J0IGl0ICovCiBleHRlcm4gdm9pZCBvbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAvKiBWTSBpbnRlcmZhY2UgdGhhdCBtYXkgYmUgdXNlZCBieSBmaXJtd2FyZSBpbnRlcmZhY2UgKi8KLWV4dGVybiBpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTsKLWV4dGVybiBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTsKIGV4dGVybiBpbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiByZWFzb25hYmx5IGdlbmVyaWMgaW50ZXJmYWNlIHRvIGV4cGFuZCB0aGUgcGh5c2ljYWwgcGFnZXMgaW4gYSB6b25lICAqLwpAQCAtOTIsMTEgKzkwLDYgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19hZGRfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCi17Ci0JcmV0dXJuIG1ocF9ub3RpbXBsZW1lbnRlZChfX0ZVTkNUSU9OX18pOwotfQogI2VuZGlmIC8qICEgQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiBzdGF0aWMgaW5saW5lIGludCBfX3JlbW92ZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcykKQEAgLTEwNSw0ICs5OCw4IEBACiAJZHVtcF9zdGFjaygpOwogCXJldHVybiAtRU5PU1lTOwogfQorCitleHRlcm4gaW50IGFkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CitleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CisKICNlbmRpZiAvKiBfX0xJTlVYX01FTU9SWV9IT1RQTFVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCmluZGV4IDZhNzYyMWIuLmY1ZmRjYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCmluZGV4IDdkMDk5NjIuLmZmMGE2NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCkBAIC0xMiw3ICsxMiw3IEBACiBleHRlcm4gaW50IG1pZ3JhdGVfcGFnZV9yZW1vdmVfcmVmZXJlbmNlcyhzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQpOwogZXh0ZXJuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIHN0cnVjdCBsaXN0X2hlYWQgKnQsCiAJCXN0cnVjdCBsaXN0X2hlYWQgKm1vdmVkLCBzdHJ1Y3QgbGlzdF9oZWFkICpmYWlsZWQpOwotaW50IG1pZ3JhdGVfcGFnZXNfdG8oc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsCitleHRlcm4gaW50IG1pZ3JhdGVfcGFnZXNfdG8oc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsCiAJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50IGRlc3QpOwogZXh0ZXJuIGludCBmYWlsX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKIApAQCAtMjYsNiArMjYsOSBAQAogc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBzdHJ1Y3QgbGlzdF9oZWFkICp0LAogCXN0cnVjdCBsaXN0X2hlYWQgKm1vdmVkLCBzdHJ1Y3QgbGlzdF9oZWFkICpmYWlsZWQpIHsgcmV0dXJuIC1FTk9TWVM7IH0KIAorc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlc190byhzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgZGVzdCkgeyByZXR1cm4gMDsgfQorCiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3ByZXAodm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfQogCiAvKiBQb3NzaWJsZSBzZXR0aW5ncyBmb3IgdGhlIG1pZ3JhdGVfcGFnZSgpIG1ldGhvZCBpbiBhZGRyZXNzX29wZXJhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA2YWEwMTZmLi4xMTU0Njg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yMjksMTAgKzIyOSw5IEBACiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZTsJCS8qIE1hcHBpbmctcHJpdmF0ZSBvcGFxdWUgZGF0YToKIAkJCQkJIAkgKiB1c3VhbGx5IHVzZWQgZm9yIGJ1ZmZlcl9oZWFkcwogCQkJCQkJICogaWYgUGFnZVByaXZhdGUgc2V0OyB1c2VkIGZvcgotCQkJCQkJICogc3dwX2VudHJ5X3QgaWYgUGFnZVN3YXBDYWNoZS4KLQkJCQkJCSAqIFdoZW4gcGFnZSBpcyBmcmVlLCB0aGlzCisJCQkJCQkgKiBzd3BfZW50cnlfdCBpZiBQYWdlU3dhcENhY2hlOwogCQkJCQkJICogaW5kaWNhdGVzIG9yZGVyIGluIHRoZSBidWRkeQotCQkJCQkJICogc3lzdGVtLgorCQkJCQkJICogc3lzdGVtIGlmIFBHX2J1ZGR5IGlzIHNldC4KIAkJCQkJCSAqLwogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsJLyogSWYgbG93IGJpdCBjbGVhciwgcG9pbnRzIHRvCiAJCQkJCQkgKiBpbm9kZSBhZGRyZXNzX3NwYWNlLCBvciBOVUxMLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oIGIvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCmluZGV4IDMwZGQ5NzguLjk5MWEzNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAl1bnNpZ25lZCBzaG9ydAkJY21kY2xhc3M7CiAJdW5zaWduZWQgc2hvcnQJCXRhY2NfY2xrczsKIAl1bnNpZ25lZCBpbnQJCXRhY2NfbnM7CisJdW5zaWduZWQgaW50CQlyMndfZmFjdG9yOwogCXVuc2lnbmVkIGludAkJbWF4X2R0cjsKIAl1bnNpZ25lZCBpbnQJCXJlYWRfYmxrYml0czsKIAl1bnNpZ25lZCBpbnQJCXdyaXRlX2Jsa2JpdHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaCBiL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCmluZGV4IGJkYzU1NmQuLjAzYTE0YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCkBAIC02OSw2ICs2OSw3IEBACiAJdW5zaWduZWQgaW50CQl0aW1lb3V0X25zOwkvKiBkYXRhIHRpbWVvdXQgKGluIG5zLCBtYXggODBtcykgKi8KIAl1bnNpZ25lZCBpbnQJCXRpbWVvdXRfY2xrczsJLyogZGF0YSB0aW1lb3V0IChpbiBjbG9ja3MpICovCiAJdW5zaWduZWQgaW50CQlibGtzel9iaXRzOwkvKiBkYXRhIGJsb2NrIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQJCWJsa3N6OwkJLyogZGF0YSBibG9jayBzaXplICovCiAJdW5zaWduZWQgaW50CQlibG9ja3M7CQkvKiBudW1iZXIgb2YgYmxvY2tzICovCiAJdW5zaWduZWQgaW50CQllcnJvcjsJCS8qIGRhdGEgZXJyb3IgKi8KIAl1bnNpZ25lZCBpbnQJCWZsYWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggYjVjMjExMi4uMmQ4MzM3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIEZyZWUgbWVtb3J5IG1hbmFnZW1lbnQgLSB6b25lZCBidWRkeSBhbGxvY2F0b3IuICAqLwogI2lmbmRlZiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUgpAQCAtMjIsNiArMjMsNyBAQAogI2Vsc2UKICNkZWZpbmUgTUFYX09SREVSIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSCiAjZW5kaWYKKyNkZWZpbmUgTUFYX09SREVSX05SX1BBR0VTICgxIDw8IChNQVhfT1JERVIgLSAxKSkKIAogc3RydWN0IGZyZWVfYXJlYSB7CiAJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCA3YjA4YzExLi5mNjk3NzcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTI0OSw0ICsyNDksNTIgQEAKIAlfX3UxNiBpZDsKIH07CiAKKy8qIElucHV0ICovCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9FVl9NQVgJCTB4MWYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0tFWV9NQVgJCTB4MWZmCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9SRUxfTUFYCQkweDBmCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9BQlNfTUFYCQkweDNmCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NU0NfTUFYCQkweDA3CisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9MRURfTUFYCQkweDBmCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9TTkRfTUFYCQkweDA3CisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9GRl9NQVgJCTB4N2YKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1NXX01BWAkJMHgwZgorCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9CVVMJMQorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SCTIKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1BST0RVQ1QJNAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVSU0lPTgk4CisKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUCTB4MDAxMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklUCTB4MDAyMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUkVMQklUCTB4MDA0MAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQUJTQklUCTB4MDA4MAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfTVNDSVQJMHgwMTAwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9MRURCSVQJMHgwMjAwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9TTkRCSVQJMHgwNDAwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9GRkJJVAkweDA4MDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1NXQklUCTB4MTAwMAorCitzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkIHsKKworCWtlcm5lbF91bG9uZ190IGZsYWdzOworCisJX191MTYgYnVzdHlwZTsKKwlfX3UxNiB2ZW5kb3I7CisJX191MTYgcHJvZHVjdDsKKwlfX3UxNiB2ZXJzaW9uOworCisJa2VybmVsX3Vsb25nX3QgZXZiaXRbSU5QVVRfREVWSUNFX0lEX0VWX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKwlrZXJuZWxfdWxvbmdfdCBrZXliaXRbSU5QVVRfREVWSUNFX0lEX0tFWV9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07CisJa2VybmVsX3Vsb25nX3QgcmVsYml0W0lOUFVUX0RFVklDRV9JRF9SRUxfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworCWtlcm5lbF91bG9uZ190IGFic2JpdFtJTlBVVF9ERVZJQ0VfSURfQUJTX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKwlrZXJuZWxfdWxvbmdfdCBtc2NiaXRbSU5QVVRfREVWSUNFX0lEX01TQ19NQVggLyBCSVRTX1BFUl9MT05HICsgMV07CisJa2VybmVsX3Vsb25nX3QgbGVkYml0W0lOUFVUX0RFVklDRV9JRF9MRURfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworCWtlcm5lbF91bG9uZ190IHNuZGJpdFtJTlBVVF9ERVZJQ0VfSURfU05EX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKwlrZXJuZWxfdWxvbmdfdCBmZmJpdFtJTlBVVF9ERVZJQ0VfSURfRkZfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworCWtlcm5lbF91bG9uZ190IHN3Yml0W0lOUFVUX0RFVklDRV9JRF9TV19NQVggLyBCSVRTX1BFUl9MT05HICsgMV07CisKKwlrZXJuZWxfdWxvbmdfdCBkcml2ZXJfaW5mbzsKK307CisKICNlbmRpZiAvKiBMSU5VWF9NT0RfREVWSUNFVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvYmxrdHJhbnMuaCBiL2luY2x1ZGUvbGludXgvbXRkL2Jsa3RyYW5zLmgKaW5kZXggZjQ2YWZlYy4uNzJmYzY4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvYmxrdHJhbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9ibGt0cmFucy5oCkBAIC0xMCw3ICsxMCw3IEBACiAjaWZuZGVmIF9fTVREX1RSQU5TX0hfXwogI2RlZmluZSBfX01URF9UUkFOU19IX18KIAotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBzdHJ1Y3QgaGRfZ2VvbWV0cnk7CiBzdHJ1Y3QgbXRkX2luZm87CkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlpbnQgZGV2bnVtOwogCWludCBibGtzaXplOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2RvYzIwMDAuaCBiL2luY2x1ZGUvbGludXgvbXRkL2RvYzIwMDAuaAppbmRleCAzODZhNTJjLi45YWRkZDA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9kb2MyMDAwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvZG9jMjAwMC5oCkBAIC0xNSw3ICsxNSw3IEBACiAjZGVmaW5lIF9fTVREX0RPQzIwMDBfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgRG9DX1NpZzEgMAogI2RlZmluZSBEb0NfU2lnMiAxCkBAIC0xODcsNyArMTg3LDcgQEAKIAlpbnQgbnVtY2hpcHM7CiAJc3RydWN0IE5hbmQgKmNoaXBzOwogCXN0cnVjdCBtdGRfaW5mbyAqbmV4dGRvYzsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiBpbnQgZG9jX2RlY29kZV9lY2ModW5zaWduZWQgY2hhciBzZWN0b3JbNTEyXSwgdW5zaWduZWQgY2hhciBlY2MxWzZdKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9pbmZ0bC5oCmluZGV4IDAyNjgxMjUuLmQ3ZWFhNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvaW5mdGwuaApAQCAtNTIsNiArNTIsMTEgQEAKIGludCBJTkZUTF9tb3VudChzdHJ1Y3QgSU5GVExyZWNvcmQgKnMpOwogaW50IElORlRMX2Zvcm1hdGJsb2NrKHN0cnVjdCBJTkZUTHJlY29yZCAqcywgaW50IGJsb2NrKTsKIAorZXh0ZXJuIGNoYXIgaW5mdGxtb3VudHJldltdOworCit2b2lkIElORlRMX2R1bXB0YWJsZXMoc3RydWN0IElORlRMcmVjb3JkICpzKTsKK3ZvaWQgSU5GVExfZHVtcFZVY2hhaW5zKHN0cnVjdCBJTkZUTHJlY29yZCAqcyk7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfX01URF9JTkZUTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXY2NDN4eC5oIGIvaW5jbHVkZS9saW51eC9tdjY0M3h4LmgKaW5kZXggOTU1ZDMwNi4uZWRmYTAxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdjY0M3h4LmgKKysrIGIvaW5jbHVkZS9saW51eC9tdjY0M3h4LmgKQEAgLTEzLDcgKzEzLDcgQEAKICNpZm5kZWYgX19BU01fTVY2NDNYWF9ICiAjZGVmaW5lIF9fQVNNX01WNjQzWFhfSAogCi0jaWZkZWYgX19NSVBTX18KKyNpZmRlZiBfX21pcHNfXwogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFydmVsbC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKaW5kZXggZTY2OTgwMS4uNThjYjNkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtNzUsNyArNzUsNiBAQAogZXh0ZXJuIHZvaWQgcmVsZWFzZV9vcGVuX2ludGVudChzdHJ1Y3QgbmFtZWlkYXRhICopOwogCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9vbmVfbGVuKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwotZXh0ZXJuIF9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlcyBzdHJ1Y3QgZGVudHJ5ICogbG9va3VwX2hhc2goc3RydWN0IG5hbWVpZGF0YSAqKTsKIAogZXh0ZXJuIGludCBmb2xsb3dfZG93bihzdHJ1Y3QgdmZzbW91bnQgKiosIHN0cnVjdCBkZW50cnkgKiopOwogZXh0ZXJuIGludCBmb2xsb3dfdXAoc3RydWN0IHZmc21vdW50ICoqLCBzdHJ1Y3QgZGVudHJ5ICoqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDk1MGRjNTUuLmY0MTY5YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtNDMzLDggKzQzMyw3IEBACiAKIAkvKiByZWdpc3Rlci91bnJlZ2lzdGVyIHN0YXRlIG1hY2hpbmUgKi8KIAllbnVtIHsgTkVUUkVHX1VOSU5JVElBTElaRUQ9MCwKLQkgICAgICAgTkVUUkVHX1JFR0lTVEVSSU5HLAkvKiBjYWxsZWQgcmVnaXN0ZXJfbmV0ZGV2aWNlICovCi0JICAgICAgIE5FVFJFR19SRUdJU1RFUkVELAkvKiBjb21wbGV0ZWQgcmVnaXN0ZXIgdG9kbyAqLworCSAgICAgICBORVRSRUdfUkVHSVNURVJFRCwJLyogY29tcGxldGVkIHJlZ2lzdGVyX25ldGRldmljZSAqLwogCSAgICAgICBORVRSRUdfVU5SRUdJU1RFUklORywJLyogY2FsbGVkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlICovCiAJICAgICAgIE5FVFJFR19VTlJFR0lTVEVSRUQsCS8qIGNvbXBsZXRlZCB1bnJlZ2lzdGVyIHRvZG8gKi8KIAkgICAgICAgTkVUUkVHX1JFTEVBU0VELAkJLyogY2FsbGVkIGZyZWVfbmV0ZGV2ICovCkBAIC01MDYsNiArNTA1LDggQEAKIAogCS8qIGNsYXNzL25ldC9uYW1lIGVudHJ5ICovCiAJc3RydWN0IGNsYXNzX2RldmljZQljbGFzc19kZXY7CisJLyogc3BhY2UgZm9yIG9wdGlvbmFsIHN0YXRpc3RpY3MgYW5kIHdpcmVsZXNzIHN5c2ZzIGdyb3VwcyAqLworCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgICpzeXNmc19ncm91cHNbM107CiB9OwogCiAjZGVmaW5lCU5FVERFVl9BTElHTgkJMzIKQEAgLTU5OCwyMCArNTk5LDcgQEAKIAogI2RlZmluZSBIQVZFX05FVElGX1FVRVVFCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9TQ0hFRCwgJmRldi0+c3RhdGUpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkOwotCi0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJc2QgPSAmX19nZXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEpOwotCQlkZXYtPm5leHRfc2NoZWQgPSBzZC0+b3V0cHV0X3F1ZXVlOwotCQlzZC0+b3V0cHV0X3F1ZXVlID0gZGV2OwotCQlyYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfVFhfU09GVElSUSk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci19CitleHRlcm4gdm9pZCBfX25ldGlmX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTY3NSwxMyArNjYzLDcgQEAKIC8qIFVzZSB0aGlzIHZhcmlhbnQgaW4gcGxhY2VzIHdoZXJlIGl0IGNvdWxkIGJlIGludm9rZWQKICAqIGVpdGhlciBmcm9tIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfa2ZyZWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWlmIChpbl9pcnEoKSB8fCBpcnFzX2Rpc2FibGVkKCkpCi0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JZWxzZQotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci19CitleHRlcm4gdm9pZCBkZXZfa2ZyZWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogI2RlZmluZSBIQVZFX05FVElGX1JYIDEKIGV4dGVybiBpbnQJCW5ldGlmX3J4KHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtNzY4LDIyICs3NTAsOSBAQAogCXJldHVybiB0ZXN0X2JpdChfX0xJTktfU1RBVEVfUFJFU0VOVCwgJmRldi0+c3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfZGV2aWNlX2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoX19MSU5LX1NUQVRFX1BSRVNFTlQsICZkZXYtPnN0YXRlKSAmJgotCSAgICBuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCX0KLX0KK2V4dGVybiB2b2lkIG5ldGlmX2RldmljZV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9kZXZpY2VfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9QUkVTRU5ULCAmZGV2LT5zdGF0ZSkgJiYKLQkgICAgbmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLSAJCV9fbmV0ZGV2X3dhdGNoZG9nX3VwKGRldik7Ci0JfQotfQorZXh0ZXJuIHZvaWQgbmV0aWZfZGV2aWNlX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyoKICAqIE5ldHdvcmsgaW50ZXJmYWNlIG1lc3NhZ2UgbGV2ZWwgc2V0dGluZ3MKQEAgLTg1MSwyMCArODIwLDcgQEAKICAqIGFscmVhZHkgYmVlbiBjYWxsZWQgYW5kIHJldHVybmVkIDEuCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWRldl9ob2xkKGRldik7Ci0JbGlzdF9hZGRfdGFpbCgmZGV2LT5wb2xsX2xpc3QsICZfX2dldF9jcHVfdmFyKHNvZnRuZXRfZGF0YSkucG9sbF9saXN0KTsKLQlpZiAoZGV2LT5xdW90YSA8IDApCi0JCWRldi0+cXVvdGEgKz0gZGV2LT53ZWlnaHQ7Ci0JZWxzZQotCQlkZXYtPnF1b3RhID0gZGV2LT53ZWlnaHQ7Ci0JX19yYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQorZXh0ZXJuIHZvaWQgX19uZXRpZl9yeF9zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogVHJ5IHRvIHJlc2NoZWR1bGUgcG9sbC4gQ2FsbGVkIGJ5IGlycSBoYW5kbGVyLiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAppbmRleCA0MTJlNTJjLi5iMzFhOWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKQEAgLTExMCw2ICsxMTAsOCBAQAogLyogRnVuY3Rpb24gdG8gcmVnaXN0ZXIvdW5yZWdpc3RlciBob29rIHBvaW50cy4gKi8KIGludCBuZl9yZWdpc3Rlcl9ob29rKHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKTsKIHZvaWQgbmZfdW5yZWdpc3Rlcl9ob29rKHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKTsKK2ludCBuZl9yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgdW5zaWduZWQgaW50IG4pOwordm9pZCBuZl91bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCB1bnNpZ25lZCBpbnQgbik7CiAKIC8qIEZ1bmN0aW9ucyB0byByZWdpc3RlciBnZXQvc2V0c29ja29wdCByYW5nZXMgKG5vbi1pbmNsdXNpdmUpLiAgWW91CiAgICBuZWVkIHRvIGNoZWNrIHBlcm1pc3Npb25zIHlvdXJzZWxmISAqLwpAQCAtMjgxLDE2ICsyODMsNDIgQEAKICAgIFJldHVybnMgdHJ1ZSBvciBmYWxzZS4gKi8KIGV4dGVybiBpbnQgc2tiX21ha2Vfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgd3JpdGFibGVfbGVuKTsKIAotc3RydWN0IG5mX3F1ZXVlX3Jlcm91dGVyIHsKLQl2b2lkICgqc2F2ZSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2luZm8gKmluZm8pOwotCWludCAoKnJlcm91dGUpKHN0cnVjdCBza19idWZmICoqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaW5mbyAqaW5mbyk7Ci0JaW50IHJlcl9zaXplOworc3RydWN0IG5mX2FmaW5mbyB7CisJdW5zaWduZWQgc2hvcnQJZmFtaWx5OworCXVuc2lnbmVkIGludAkoKmNoZWNrc3VtKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTsKKwl2b2lkCQkoKnNhdmVyb3V0ZSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZl9pbmZvICppbmZvKTsKKwlpbnQJCSgqcmVyb3V0ZSkoc3RydWN0IHNrX2J1ZmYgKipza2IsCisJCQkJICAgY29uc3Qgc3RydWN0IG5mX2luZm8gKmluZm8pOworCWludAkJcm91dGVfa2V5X3NpemU7CiB9OwogCi0jZGVmaW5lIG5mX2luZm9fcmVyb3V0ZSh4KSAoKHZvaWQgKil4ICsgc2l6ZW9mKHN0cnVjdCBuZl9pbmZvKSkKK2V4dGVybiBzdHJ1Y3QgbmZfYWZpbmZvICpuZl9hZmluZm9bXTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2FmaW5mbyAqbmZfZ2V0X2FmaW5mbyh1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShuZl9hZmluZm9bZmFtaWx5XSk7Cit9CiAKLWV4dGVybiBpbnQgbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoaW50IHBmLCBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgKnJlcik7Ci1leHRlcm4gaW50IG5mX3VucmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoaW50IHBmKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CituZl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJICAgIHVfaW50OF90IHByb3RvY29sLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvOworCXVuc2lnbmVkIGludCBjc3VtID0gMDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlhZmluZm8gPSBuZl9nZXRfYWZpbmZvKGZhbWlseSk7CisJaWYgKGFmaW5mbykKKwkJY3N1bSA9IGFmaW5mby0+Y2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGNzdW07Cit9CisKK2V4dGVybiBpbnQgbmZfcmVnaXN0ZXJfYWZpbmZvKHN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbyk7CitleHRlcm4gdm9pZCBuZl91bnJlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm8pOworCisjZGVmaW5lIG5mX2luZm9fcmVyb3V0ZSh4KSAoKHZvaWQgKil4ICsgc2l6ZW9mKHN0cnVjdCBuZl9pbmZvKSkKIAogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CiBleHRlcm4gdm9pZCAoKmlwX25hdF9kZWNvZGVfc2Vzc2lvbikoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IGZsb3dpICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggMTM1MGU0Ny4uNDhjYzMyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0xNDIsNiArMTQyLDEyIEBACiAjZGVmaW5lIEFTU0VSVF9XUklURV9MT0NLKHgpCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaD4KIAorI2lmZGVmIENPTkZJR19DT01QQVQKKyNkZWZpbmUgQ09NUEFUX1RPX1VTRVIJCTEKKyNkZWZpbmUgQ09NUEFUX0ZST01fVVNFUgktMQorI2RlZmluZSBDT01QQVRfQ0FMQ19TSVpFCTAKKyNlbmRpZgorCiBzdHJ1Y3QgeHRfbWF0Y2gKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xNzUsNiArMTgxLDkgQEAKIAl2b2lkICgqZGVzdHJveSkoY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLAogCQkJdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUpOwogCisJLyogQ2FsbGVkIHdoZW4gdXNlcnNwYWNlIGFsaWduIGRpZmZlcnMgZnJvbSBrZXJuZWwgc3BhY2Ugb25lICovCisJaW50ICgqY29tcGF0KSh2b2lkICptYXRjaCwgdm9pZCAqKmRzdHB0ciwgaW50ICpzaXplLCBpbnQgY29udmVydCk7CisKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogCkBAIC0yMjAsNiArMjI5LDkgQEAKIAl2b2lkICgqZGVzdHJveSkoY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LCB2b2lkICp0YXJnaW5mbywKIAkJCXVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUpOwogCisJLyogQ2FsbGVkIHdoZW4gdXNlcnNwYWNlIGFsaWduIGRpZmZlcnMgZnJvbSBrZXJuZWwgc3BhY2Ugb25lICovCisJaW50ICgqY29tcGF0KSh2b2lkICp0YXJnZXQsIHZvaWQgKipkc3RwdHIsIGludCAqc2l6ZSwgaW50IGNvbnZlcnQpOworCiAJLyogU2V0IHRoaXMgdG8gVEhJU19NT0RVTEUgaWYgeW91IGFyZSBhIG1vZHVsZSwgb3RoZXJ3aXNlIE5VTEwgKi8KIAlzdHJ1Y3QgbW9kdWxlICptZTsKIApAQCAtMzE0LDYgKzMyNiw3MyBAQAogZXh0ZXJuIHN0cnVjdCB4dF90YWJsZV9pbmZvICp4dF9hbGxvY190YWJsZV9pbmZvKHVuc2lnbmVkIGludCBzaXplKTsKIGV4dGVybiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjaW5jbHVkZSA8bmV0L2NvbXBhdC5oPgorCitzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X21hdGNoCit7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdV9pbnQxNl90IG1hdGNoX3NpemU7CisJCQljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTiAtIDFdOworCQkJdV9pbnQ4X3QgcmV2aXNpb247CisJCX0gdXNlcjsKKwkJc3RydWN0IHsKKwkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCQkJY29tcGF0X3VwdHJfdCBtYXRjaDsKKwkJfSBrZXJuZWw7CisJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCX0gdTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF07Cit9OworCitzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X3RhcmdldAoreworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOIC0gMV07CisJCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJfSB1c2VyOworCQlzdHJ1Y3QgeworCQkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCQkJY29tcGF0X3VwdHJfdCB0YXJnZXQ7CisJCX0ga2VybmVsOworCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJfSB1OworCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKK307CisKKy8qIEZJWE1FOiB0aGlzIHdvcmtzIG9ubHkgb24gMzIgYml0IHRhc2tzCisgKiBuZWVkIHRvIGNoYW5nZSB3aG9sZSBhcHByb2FjaCBpbiBvcmRlciB0byBjYWxjdWxhdGUgYWxpZ24gYXMgZnVuY3Rpb24gb2YKKyAqIGN1cnJlbnQgdGFzayBhbGlnbm1lbnQgKi8KKworc3RydWN0IGNvbXBhdF94dF9jb3VudGVycworeworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKKwl1X2ludDMyX3QgY250WzRdOworI2Vsc2UKKwl1X2ludDY0X3QgY250WzJdOworI2VuZGlmCit9OworCitzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzX2luZm8KK3sKKwljaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07CisJY29tcGF0X3VpbnRfdCBudW1fY291bnRlcnM7CisJc3RydWN0IGNvbXBhdF94dF9jb3VudGVycyBjb3VudGVyc1swXTsKK307CisKKyNkZWZpbmUgQ09NUEFUX1hUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBjb21wYXRfeHRfY291bnRlcnMpLTEpKSBcCisJCSYgfihfX2FsaWdub2ZfXyhzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzKS0xKSkKKworZXh0ZXJuIHZvaWQgeHRfY29tcGF0X2xvY2soaW50IGFmKTsKK2V4dGVybiB2b2lkIHh0X2NvbXBhdF91bmxvY2soaW50IGFmKTsKK2V4dGVybiBpbnQgeHRfY29tcGF0X21hdGNoKHZvaWQgKm1hdGNoLCB2b2lkICoqZHN0cHRyLCBpbnQgKnNpemUsIGludCBjb252ZXJ0KTsKK2V4dGVybiBpbnQgeHRfY29tcGF0X3RhcmdldCh2b2lkICp0YXJnZXQsIHZvaWQgKipkc3RwdHIsIGludCAqc2l6ZSwKKwkJaW50IGNvbnZlcnQpOworCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9YX1RBQkxFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzODBmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9YVF9FU1BfSAorI2RlZmluZSBfWFRfRVNQX0gKKworc3RydWN0IHh0X2VzcAoreworCXVfaW50MzJfdCBzcGlzWzJdOwkvKiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKi8KKwl1X2ludDhfdCAgaW52ZmxhZ3M7CS8qIEludmVyc2UgZmxhZ3MgKi8KK307CisKKy8qIFZhbHVlcyBmb3IgImludmZsYWdzIiBmaWVsZCBpbiBzdHJ1Y3QgeHRfZXNwLiAqLworI2RlZmluZSBYVF9FU1BfSU5WX1NQSQkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2Ygc3BpLiAqLworI2RlZmluZSBYVF9FU1BfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9YVF9FU1BfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWVlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9YVF9NVUxUSVBPUlRfSAorI2RlZmluZSBfWFRfTVVMVElQT1JUX0gKKworZW51bSB4dF9tdWx0aXBvcnRfZmxhZ3MKK3sKKwlYVF9NVUxUSVBPUlRfU09VUkNFLAorCVhUX01VTFRJUE9SVF9ERVNUSU5BVElPTiwKKwlYVF9NVUxUSVBPUlRfRUlUSEVSCit9OworCisjZGVmaW5lIFhUX01VTFRJX1BPUlRTCTE1CisKKy8qIE11c3QgZml0IGluc2lkZSB1bmlvbiB4dF9tYXRjaGluZm86IDE2IGJ5dGVzICovCitzdHJ1Y3QgeHRfbXVsdGlwb3J0Cit7CisJdV9pbnQ4X3QgZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLworCXVfaW50OF90IGNvdW50OwkJCQkvKiBOdW1iZXIgb2YgcG9ydHMgKi8KKwl1X2ludDE2X3QgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworfTsKKworc3RydWN0IHh0X211bHRpcG9ydF92MQoreworCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KKwl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJdV9pbnQxNl90IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KKwl1X2ludDhfdCBwZmxhZ3NbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0IGZsYWdzICovCisJdV9pbnQ4X3QgaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCit9OworCisjZW5kaWYgLypfWFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCmluZGV4IDQzYzA5ZDcuLjg1MzAxYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKQEAgLTgwLDYgKzgwLDggQEAKICNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gaW50IGlwX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpOwogZXh0ZXJuIGludCBpcF94ZnJtX21lX2hhcmRlcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpOworZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9pcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCQkgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpOwogI2VuZGlmIC8qX19LRVJORUxfXyovCiAKICNlbmRpZiAvKl9fTElOVVhfSVBfTkVURklMVEVSX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCmluZGV4IDA5ODdjZWEuLmVhY2U4NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmgKQEAgLTMsNiArMyw4IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oPgorCiAjZGVmaW5lIFJBU19QT1JUIDE3MTkKICNkZWZpbmUgUTkzMV9QT1JUIDE3MjAKICNkZWZpbmUgSDMyM19SVFBfQ0hBTk5FTF9NQVggNAkvKiBBdWRpbywgdmlkZW8sIEZBWCBhbmQgb3RoZXIgKi8KQEAgLTI1LDYgKzI3LDU2IEBACiAJfTsKIH07CiAKK3N0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0OworCitleHRlcm4gaW50IGdldF9oMjI1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpOworZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKK2V4dGVybiB2b2lkIGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpuZXcsCisJCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7CitleHRlcm4gaW50ICgqc2V0X2gyNDVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQkgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKK2V4dGVybiBpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKK2V4dGVybiBpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAorCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKK2V4dGVybiBpbnQgKCpzZXRfcmFzX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAorCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKK2V4dGVybiBpbnQgKCpuYXRfcnRwX3J0Y3BfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQkgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCQkgdV9pbnQxNl90IHBvcnQsIHVfaW50MTZfdCBydHBfcG9ydCwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBydHBfZXhwLAorCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0Y3BfZXhwKTsKK2V4dGVybiBpbnQgKCpuYXRfdDEyMF9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOworZXh0ZXJuIGludCAoKm5hdF9oMjQ1X2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOworZXh0ZXJuIGludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkgICAgIGludCBpZHgsIHVfaW50MTZfdCBwb3J0LAorCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKaW5kZXggMGJkODI4MC4uYzZlOWEwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCkBAIC0yLDcgKzIsNyBAQAogICogaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaCAtIEJFUiBhbmQgUEVSIGRlY29kaW5nIGxpYnJhcnkgZm9yIEguMzIzCiAgKiAJCQkgICAgICAJICAgICBjb25udHJhY2svTkFUIG1vZHVsZS4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgYnkgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AaG90bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgYnkgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICoKICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAppbmRleCBkNWI4YzBkLi5jMGRhYzE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKQEAgLTMxNiw1ICszMTYsMjMgQEAKIAkJCQkgdm9pZCAqdXNlcmRhdGEpOwogCiAjZGVmaW5lIElQVF9BTElHTihzKSBYVF9BTElHTihzKQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KKworc3RydWN0IGNvbXBhdF9pcHRfZW50cnkKK3sKKwlzdHJ1Y3QgaXB0X2lwIGlwOworCWNvbXBhdF91aW50X3QgbmZjYWNoZTsKKwl1X2ludDE2X3QgdGFyZ2V0X29mZnNldDsKKwl1X2ludDE2X3QgbmV4dF9vZmZzZXQ7CisJY29tcGF0X3VpbnRfdCBjb21lZnJvbTsKKwlzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzIGNvdW50ZXJzOworCXVuc2lnbmVkIGNoYXIgZWxlbXNbMF07Cit9OworCisjZGVmaW5lIENPTVBBVF9JUFRfQUxJR04ocykgCUNPTVBBVF9YVF9BTElHTihzKQorCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogI2VuZGlmIC8qX19LRVJORUxfXyovCiAjZW5kaWYgLyogX0lQVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmgKaW5kZXggYzc4MmE4My4uNzgyOTZlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmgKQEAgLTEsMTYgKzEsMTAgQEAKICNpZm5kZWYgX0lQVF9FU1BfSAogI2RlZmluZSBfSVBUX0VTUF9ICiAKLXN0cnVjdCBpcHRfZXNwCi17Ci0JdV9pbnQzMl90IHNwaXNbMl07CQkJLyogU2VjdXJpdHkgUGFyYW1ldGVyIEluZGV4ICovCi0JdV9pbnQ4X3QgIGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KLX07CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oPgogCi0KLQotLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfZXNwLiAqLwotI2RlZmluZSBJUFRfRVNQX0lOVl9TUEkJCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBzcGkuICovCi0jZGVmaW5lIElQVF9FU1BfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisjZGVmaW5lIGlwdF9lc3AgeHRfZXNwCisjZGVmaW5lIElQVF9FU1BfSU5WX1NQSQkJWFRfRVNQX0lOVl9TUEkKKyNkZWZpbmUgSVBUX0VTUF9JTlZfTUFTSwlYVF9FU1BfSU5WX01BU0sKIAogI2VuZGlmIC8qX0lQVF9FU1BfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tdWx0aXBvcnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oCmluZGV4IGU2YjZmZmYuLjU1ZmU4NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oCkBAIC0xLDMwICsxLDE1IEBACiAjaWZuZGVmIF9JUFRfTVVMVElQT1JUX0gKICNkZWZpbmUgX0lQVF9NVUxUSVBPUlRfSAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogCi1lbnVtIGlwdF9tdWx0aXBvcnRfZmxhZ3MKLXsKLQlJUFRfTVVMVElQT1JUX1NPVVJDRSwKLQlJUFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OLAotCUlQVF9NVUxUSVBPUlRfRUlUSEVSCi19OworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaD4KIAotI2RlZmluZSBJUFRfTVVMVElfUE9SVFMJMTUKKyNkZWZpbmUgSVBUX01VTFRJUE9SVF9TT1VSQ0UJCVhUX01VTFRJUE9SVF9TT1VSQ0UKKyNkZWZpbmUgSVBUX01VTFRJUE9SVF9ERVNUSU5BVElPTglYVF9NVUxUSVBPUlRfREVTVElOQVRJT04KKyNkZWZpbmUgSVBUX01VTFRJUE9SVF9FSVRIRVIJCVhUX01VTFRJUE9SVF9FSVRIRVIKIAotLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIGlwdF9tYXRjaGluZm86IDE2IGJ5dGVzICovCi1zdHJ1Y3QgaXB0X211bHRpcG9ydAotewotCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KLQl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCi0JdV9pbnQxNl90IHBvcnRzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCi19OworI2RlZmluZSBJUFRfTVVMVElfUE9SVFMJCQlYVF9NVUxUSV9QT1JUUwogCi1zdHJ1Y3QgaXB0X211bHRpcG9ydF92MQotewotCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KLQl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCi0JdV9pbnQxNl90IHBvcnRzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCi0JdV9pbnQ4X3QgcGZsYWdzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnQgZmxhZ3MgKi8KLQl1X2ludDhfdCBpbnZlcnQ7CQkJLyogSW52ZXJ0IGZsYWcgKi8KLX07CisjZGVmaW5lIGlwdF9tdWx0aXBvcnQJCQl4dF9tdWx0aXBvcnQKKyNkZWZpbmUgaXB0X211bHRpcG9ydF92MQkJeHRfbXVsdGlwb3J0X3YxCisKICNlbmRpZiAvKl9JUFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCmluZGV4IDE0ZjJiZDAuLjUyYTdiOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKQEAgLTczLDYgKzczLDkgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCitleHRlcm4gdW5zaWduZWQgaW50IG5mX2lwNl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTsKKwogZXh0ZXJuIGludCBpcHY2X25ldGZpbHRlcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgaXB2Nl9uZXRmaWx0ZXJfZmluaSh2b2lkKTsKICNlbHNlIC8qIENPTkZJR19ORVRGSUxURVIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaAppbmRleCBhOTFiNmFiLi5mNjJlYWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZXNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2VzcC5oCkBAIC0xLDE0ICsxLDEwIEBACiAjaWZuZGVmIF9JUDZUX0VTUF9ICiAjZGVmaW5lIF9JUDZUX0VTUF9ICiAKLXN0cnVjdCBpcDZ0X2VzcAotewotCXVfaW50MzJfdCBzcGlzWzJdOwkJCS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLwotCXVfaW50OF90ICBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCi19OworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9lc3AuaD4KIAotLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcDZ0X2VzcC4gKi8KLSNkZWZpbmUgSVA2VF9FU1BfSU5WX1NQSQkJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHNwaS4gKi8KLSNkZWZpbmUgSVA2VF9FU1BfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisjZGVmaW5lIGlwNnRfZXNwIHh0X2VzcAorI2RlZmluZSBJUDZUX0VTUF9JTlZfU1BJCVhUX0VTUF9JTlZfU1BJCisjZGVmaW5lIElQNlRfRVNQX0lOVl9NQVNLCVhUX0VTUF9JTlZfTUFTSwogCiAjZW5kaWYgLypfSVA2VF9FU1BfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmgKaW5kZXggZWZlNDk1NC4uMDQyYzkyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X211bHRpcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tdWx0aXBvcnQuaApAQCAtMSwyMSArMSwxNCBAQAogI2lmbmRlZiBfSVA2VF9NVUxUSVBPUlRfSAogI2RlZmluZSBfSVA2VF9NVUxUSVBPUlRfSAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KIAotZW51bSBpcDZ0X211bHRpcG9ydF9mbGFncwotewotCUlQNlRfTVVMVElQT1JUX1NPVVJDRSwKLQlJUDZUX01VTFRJUE9SVF9ERVNUSU5BVElPTiwKLQlJUDZUX01VTFRJUE9SVF9FSVRIRVIKLX07CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oPgogCi0jZGVmaW5lIElQNlRfTVVMVElfUE9SVFMJMTUKKyNkZWZpbmUgSVA2VF9NVUxUSVBPUlRfU09VUkNFCQlYVF9NVUxUSVBPUlRfU09VUkNFCisjZGVmaW5lIElQNlRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCVhUX01VTFRJUE9SVF9ERVNUSU5BVElPTgorI2RlZmluZSBJUDZUX01VTFRJUE9SVF9FSVRIRVIJCVhUX01VTFRJUE9SVF9FSVRIRVIKIAotLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIGlwNnRfbWF0Y2hpbmZvOiAxNiBieXRlcyAqLwotc3RydWN0IGlwNnRfbXVsdGlwb3J0Ci17Ci0JdV9pbnQ4X3QgZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLwotCXVfaW50OF90IGNvdW50OwkJCQkvKiBOdW1iZXIgb2YgcG9ydHMgKi8KLQl1X2ludDE2X3QgcG9ydHNbSVA2VF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCi19OwotI2VuZGlmIC8qX0lQVF9NVUxUSVBPUlRfSCovCisjZGVmaW5lIElQNlRfTVVMVElfUE9SVFMJCVhUX01VTFRJX1BPUlRTCisKKyNkZWZpbmUgaXA2dF9tdWx0aXBvcnQJCQl4dF9tdWx0aXBvcnQKKworI2VuZGlmIC8qX0lQNlRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAppbmRleCBmOGYzZDFjLi44N2I4YTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtMTQzLDYgKzE0Myw3IEBACiAJX191MzIJCQlkc3RfZ3JvdXA7CiAJa2VybmVsX2NhcF90CQllZmZfY2FwOwogCV9fdTMyCQkJbG9naW51aWQ7CS8qIExvZ2luIChhdWRpdCkgdWlkICovCisJX191MzIJCQlzaWQ7CQkvKiBTRUxpbnV4IHNlY3VyaXR5IGlkICovCiB9OwogCiAjZGVmaW5lIE5FVExJTktfQ0Ioc2tiKQkJKCooc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zKikmKChza2IpLT5jYikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L251bWEuaCBiL2luY2x1ZGUvbGludXgvbnVtYS5oCmluZGV4IGYwYzUzOWIuLmU0ODFmZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbnVtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvbnVtYS5oCkBAIC0zLDExICszLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCi0jaWZuZGVmIENPTkZJR19GTEFUTUVNCi0jaW5jbHVkZSA8YXNtL251bW5vZGVzLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBOT0RFU19TSElGVAorI2lmZGVmIENPTkZJR19OT0RFU19TSElGVAorI2RlZmluZSBOT0RFU19TSElGVCAgICAgQ09ORklHX05PREVTX1NISUZUCisjZWxzZQogI2RlZmluZSBOT0RFU19TSElGVCAgICAgMAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggOWVhNjI5Yy4uZDI3NmE0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTQ4LDggKzQ4LDIwIEBACiAKIC8qCiAgKiBEb24ndCB1c2UgdGhlICpfZG9udHVzZSBmbGFncy4gIFVzZSB0aGUgbWFjcm9zLiAgT3RoZXJ3aXNlIHlvdSdsbCBicmVhawotICogbG9ja2VkLSBhbmQgZGlydHktcGFnZSBhY2NvdW50aW5nLiAgVGhlIHRvcCBlaWdodCBiaXRzIG9mIHBhZ2UtPmZsYWdzIGFyZQotICogdXNlZCBmb3IgcGFnZS0+em9uZSwgc28gcHV0dGluZyBmbGFnIGJpdHMgdGhlcmUgZG9lc24ndCB3b3JrLgorICogbG9ja2VkLSBhbmQgZGlydHktcGFnZSBhY2NvdW50aW5nLgorICoKKyAqIFRoZSBwYWdlIGZsYWdzIGZpZWxkIGlzIHNwbGl0IGludG8gdHdvIHBhcnRzLCB0aGUgbWFpbiBmbGFncyBhcmVhCisgKiB3aGljaCBleHRlbmRzIGZyb20gdGhlIGxvdyBiaXRzIHVwd2FyZHMsIGFuZCB0aGUgZmllbGRzIGFyZWEgd2hpY2gKKyAqIGV4dGVuZHMgZnJvbSB0aGUgaGlnaCBiaXRzIGRvd253YXJkcy4KKyAqCisgKiAgfCBGSUVMRCB8IC4uLiB8IEZMQUdTIHwKKyAqICBOLTEgICAgIF4gICAgICAgICAgICAgMAorICogICAgICAgICAgKE4tRkxBR1NfUkVTRVJWRUQpCisgKgorICogVGhlIGZpZWxkcyBhcmVhIGlzIHJlc2VydmVkIGZvciBmaWVsZHMgbWFwcGluZyB6b25lLCBub2RlIGFuZCBTUEFSU0VNRU0KKyAqIHNlY3Rpb24uICBUaGUgYm91bmRyeSBiZXR3ZWVuIHRoZXNlIHR3byBhcmVhcyBpcyBkZWZpbmVkIGJ5CisgKiBGTEFHU19SRVNFUlZFRCB3aGljaCBkZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgZmllbGRzIHNlY3Rpb24KKyAqIChzZWUgbGludXgvbW16b25lLmgpLiAgTmV3IGZsYWdzIG11c3QgX25vdF8gb3ZlcmxhcCB3aXRoIHRoaXMgYXJlYS4KICAqLwogI2RlZmluZSBQR19sb2NrZWQJIAkgMAkvKiBQYWdlIGlzIGxvY2tlZC4gRG9uJ3QgdG91Y2guICovCiAjZGVmaW5lIFBHX2Vycm9yCQkgMQpAQCAtNzQsNyArODYsOSBAQAogI2RlZmluZSBQR19tYXBwZWR0b2Rpc2sJCTE2CS8qIEhhcyBibG9ja3MgYWxsb2NhdGVkIG9uLWRpc2sgKi8KICNkZWZpbmUgUEdfcmVjbGFpbQkJMTcJLyogVG8gYmUgcmVjbGFpbWVkIGFzYXAgKi8KICNkZWZpbmUgUEdfbm9zYXZlX2ZyZWUJCTE4CS8qIEZyZWUsIHNob3VsZCBub3QgYmUgd3JpdHRlbiAqLwotI2RlZmluZSBQR191bmNhY2hlZAkJMTkJLyogUGFnZSBoYXMgYmVlbiBtYXBwZWQgYXMgdW5jYWNoZWQgKi8KKyNkZWZpbmUgUEdfYnVkZHkJCTE5CS8qIFBhZ2UgaXMgZnJlZSwgb24gYnVkZHkgbGlzdHMgKi8KKworI2RlZmluZSBQR191bmNhY2hlZAkJMjAJLyogUGFnZSBoYXMgYmVlbiBtYXBwZWQgYXMgdW5jYWNoZWQgKi8KIAogLyoKICAqIEdsb2JhbCBwYWdlIGFjY291bnRpbmcuICBPbmUgaW5zdGFuY2UgcGVyIENQVS4gIE9ubHkgdW5zaWduZWQgbG9uZ3MgYXJlCkBAIC0zMTcsNiArMzMxLDEwIEBACiAjZGVmaW5lIFNldFBhZ2VOb3NhdmVGcmVlKHBhZ2UpCXNldF9iaXQoUEdfbm9zYXZlX2ZyZWUsICYocGFnZSktPmZsYWdzKQogI2RlZmluZSBDbGVhclBhZ2VOb3NhdmVGcmVlKHBhZ2UpCQljbGVhcl9iaXQoUEdfbm9zYXZlX2ZyZWUsICYocGFnZSktPmZsYWdzKQogCisjZGVmaW5lIFBhZ2VCdWRkeShwYWdlKQkJdGVzdF9iaXQoUEdfYnVkZHksICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBfX1NldFBhZ2VCdWRkeShwYWdlKQlfX3NldF9iaXQoUEdfYnVkZHksICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBfX0NsZWFyUGFnZUJ1ZGR5KHBhZ2UpCV9fY2xlYXJfYml0KFBHX2J1ZGR5LCAmKHBhZ2UpLT5mbGFncykKKwogI2RlZmluZSBQYWdlTWFwcGVkVG9EaXNrKHBhZ2UpCXRlc3RfYml0KFBHX21hcHBlZHRvZGlzaywgJihwYWdlKS0+ZmxhZ3MpCiAjZGVmaW5lIFNldFBhZ2VNYXBwZWRUb0Rpc2socGFnZSkgc2V0X2JpdChQR19tYXBwZWR0b2Rpc2ssICYocGFnZSktPmZsYWdzKQogI2RlZmluZSBDbGVhclBhZ2VNYXBwZWRUb0Rpc2socGFnZSkgY2xlYXJfYml0KFBHX21hcHBlZHRvZGlzaywgJihwYWdlKS0+ZmxhZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDgzOWYwYjMuLjdhMWFmNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCkBAIC03MiwxMiArNzIsMTQgQEAKIAkJCQl1bnNpZ25lZCBsb25nIGluZGV4KTsKIGV4dGVybiBzdHJ1Y3QgcGFnZSAqIGZpbmRfbG9ja19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpOwotZXh0ZXJuIHN0cnVjdCBwYWdlICogZmluZF90cnlsb2NrX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJdW5zaWduZWQgbG9uZyBpbmRleCk7CitleHRlcm4gX19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzIHN0cnVjdCBwYWdlICogZmluZF90cnlsb2NrX3BhZ2UoCisJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgdW5zaWduZWQgbG9uZyBpbmRleCk7CiBleHRlcm4gc3RydWN0IHBhZ2UgKiBmaW5kX29yX2NyZWF0ZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGdmcF90IGdmcF9tYXNrKTsKIHVuc2lnbmVkIGZpbmRfZ2V0X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LAogCQkJdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKK3Vuc2lnbmVkIGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBzdGFydCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpOwogdW5zaWduZWQgZmluZF9nZXRfcGFnZXNfdGFnKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICppbmRleCwKIAkJCWludCB0YWcsIHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaCBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAppbmRleCA0ODc3ZTM1Li45MzZlZjgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC01MCw3ICs1MCw3IEBACiBleHRlcm4gYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBmbGFncyk7CiBleHRlcm4gYWNwaV9zdGF0dXMgcGNpX29zY19zdXBwb3J0X3NldCh1MzIgZmxhZ3MpOwogI2Vsc2UKLSNpZiAhZGVmaW5lZChhY3BpX3N0YXR1cykKKyNpZiAhZGVmaW5lZChBRV9FUlJPUikKIHR5cGVkZWYgdTMyIAkJYWNwaV9zdGF0dXM7CiAjZGVmaW5lIEFFX0VSUk9SICAgICAgCShhY3BpX3N0YXR1cykgKDB4MDAwMSkKICNlbmRpZiAgICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDBhYWQ1YTMuLjNhNmE0ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtOTcsNyArOTcsMTMgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2JpdHdpc2UgcGNpX2J1c19mbGFnc190OwogZW51bSBwY2lfYnVzX2ZsYWdzIHsKLQlQQ0lfQlVTX0ZMQUdTX05PX01TSSA9IChwY2lfYnVzX2ZsYWdzX3QpIDEsCisJUENJX0JVU19GTEFHU19OT19NU0kgPSAoX19mb3JjZSBwY2lfYnVzX2ZsYWdzX3QpIDEsCit9OworCitzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSB7CisJc3RydWN0IGhsaXN0X25vZGUgbmV4dDsKKwljaGFyIGNhcF9ucjsKKwl1MzIgZGF0YVswXTsKIH07CiAKIC8qCkBAIC0xNTksNiArMTY1LDcgQEAKIAl1bnNpZ25lZCBpbnQJYmxvY2tfdWNmZ19hY2Nlc3M6MTsJLyogdXNlcnNwYWNlIGNvbmZpZyBzcGFjZSBhY2Nlc3MgaXMgYmxvY2tlZCAqLwogCiAJdTMyCQlzYXZlZF9jb25maWdfc3BhY2VbMTZdOyAvKiBjb25maWcgc3BhY2Ugc2F2ZWQgYXQgc3VzcGVuZCB0aW1lICovCisJc3RydWN0IGhsaXN0X2hlYWQgc2F2ZWRfY2FwX3NwYWNlOwogCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyb21fYXR0cjsgLyogYXR0cmlidXRlIGRlc2NyaXB0b3IgZm9yIHN5c2ZzIFJPTSBlbnRyeSAqLwogCWludCByb21fYXR0cl9lbmFibGVkOwkJLyogaGFzIGRpc3BsYXkgb2YgdGhlIHJvbSBhdHRyaWJ1dGUgYmVlbiBlbmFibGVkPyAqLwogCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyZXNfYXR0cltERVZJQ0VfQ09VTlRfUkVTT1VSQ0VdOyAvKiBzeXNmcyBmaWxlIGZvciByZXNvdXJjZXMgKi8KQEAgLTE2OSw2ICsxNzYsMzAgQEAKICNkZWZpbmUJdG9fcGNpX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjaV9kZXYsIGRldikKICNkZWZpbmUgZm9yX2VhY2hfcGNpX2RldihkKSB3aGlsZSAoKGQgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkKSkgIT0gTlVMTCkKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqcGNpX2ZpbmRfc2F2ZWRfY2FwKAorCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LGNoYXIgY2FwKQoreworCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICp0bXA7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgcG9zLCAmcGNpX2Rldi0+c2F2ZWRfY2FwX3NwYWNlLCBuZXh0KSB7CisJCWlmICh0bXAtPmNhcF9uciA9PSBjYXApCisJCQlyZXR1cm4gdG1wOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV9hZGRfc2F2ZWRfY2FwKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpuZXdfY2FwKQoreworCWhsaXN0X2FkZF9oZWFkKCZuZXdfY2FwLT5uZXh0LCAmcGNpX2Rldi0+c2F2ZWRfY2FwX3NwYWNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZW1vdmVfc2F2ZWRfY2FwKHN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpjYXApCit7CisJaGxpc3RfZGVsKCZjYXAtPm5leHQpOworfQorCiAvKgogICogIEZvciBQQ0kgZGV2aWNlcywgdGhlIHJlZ2lvbiBudW1iZXJzIGFyZSBhc3NpZ25lZCB0aGlzIHdheToKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDg3MGZlMzguLjU5MGRjNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0zNTYsNiArMzU2LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9TQVRBICAgMHg0MzZlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUJMHg0Mzc2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TQVRBICAgMHg0Mzc5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TQVRBMgkweDQzN2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEJMHg0MzgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9TUkFJRAkweDQzODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERQkweDQzOGMKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZMU0kJCTB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTkyCTB4MDAwNQpAQCAtNDk3LDcgKzUwMSw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfU01CVVMJMHg3NDZiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfQVVESU8JMHg3NDZkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxNTFfMAkweDc0NTQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDICAgICAweDc0NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9CUklER0UJMHg3NDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQVBJQwkweDc0NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSAgICAweDIwOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0ZMQVNIICAweDIwOTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0FVRElPICAweDIwOTMKQEAgLTEyMjYsNiArMTIzMSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzODBfMAkweDAyMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfMzIzOF8wCTB4MDIzOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MAkJMHgwMjU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEJMHgwMzA4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAJMHgwMjU5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMAkweDAyNjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfSzhUODAwUFJPXzAJMHgwMjgyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZC5oIGIvaW5jbHVkZS9saW51eC9waWQuaAppbmRleCA1YjkwODJjLi4yOTk2MGIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGlkLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9MSU5VWF9QSURfSAogI2RlZmluZSBfTElOVVhfUElEX0gKIAorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisKIGVudW0gcGlkX3R5cGUKIHsKIAlQSURUWVBFX1BJRCwKQEAgLTksNDUgKzExLDEwOSBAQAogCVBJRFRZUEVfTUFYCiB9OwogCisvKgorICogV2hhdCBpcyBzdHJ1Y3QgcGlkPworICoKKyAqIEEgc3RydWN0IHBpZCBpcyB0aGUga2VybmVsJ3MgaW50ZXJuYWwgbm90aW9uIG9mIGEgcHJvY2VzcyBpZGVudGlmaWVyLgorICogSXQgcmVmZXJzIHRvIGluZGl2aWR1YWwgdGFza3MsIHByb2Nlc3MgZ3JvdXBzLCBhbmQgc2Vzc2lvbnMuICBXaGlsZQorICogdGhlcmUgYXJlIHByb2Nlc3NlcyBhdHRhY2hlZCB0byBpdCB0aGUgc3RydWN0IHBpZCBsaXZlcyBpbiBhIGhhc2gKKyAqIHRhYmxlLCBzbyBpdCBhbmQgdGhlbiB0aGUgcHJvY2Vzc2VzIHRoYXQgaXQgcmVmZXJzIHRvIGNhbiBiZSBmb3VuZAorICogcXVpY2tseSBmcm9tIHRoZSBudW1lcmljIHBpZCB2YWx1ZS4gIFRoZSBhdHRhY2hlZCBwcm9jZXNzZXMgbWF5IGJlCisgKiBxdWlja2x5IGFjY2Vzc2VkIGJ5IGZvbGxvd2luZyBwb2ludGVycyBmcm9tIHN0cnVjdCBwaWQuCisgKgorICogU3RvcmluZyBwaWRfdCB2YWx1ZXMgaW4gdGhlIGtlcm5lbCBhbmQgcmVmZXJpbmcgdG8gdGhlbSBsYXRlciBoYXMgYQorICogcHJvYmxlbS4gIFRoZSBwcm9jZXNzIG9yaWdpbmFsbHkgd2l0aCB0aGF0IHBpZCBtYXkgaGF2ZSBleGl0ZWQgYW5kIHRoZQorICogcGlkIGFsbG9jYXRvciB3cmFwcGVkLCBhbmQgYW5vdGhlciBwcm9jZXNzIGNvdWxkIGhhdmUgY29tZSBhbG9uZworICogYW5kIGJlZW4gYXNzaWduZWQgdGhhdCBwaWQuCisgKgorICogUmVmZXJyaW5nIHRvIHVzZXIgc3BhY2UgcHJvY2Vzc2VzIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc3RydWN0CisgKiB0YXNrX3N0cnVjdCBoYXMgYSBwcm9ibGVtLiAgV2hlbiB0aGUgdXNlciBzcGFjZSBwcm9jZXNzIGV4aXRzCisgKiB0aGUgbm93IHVzZWxlc3MgdGFza19zdHJ1Y3QgaXMgc3RpbGwga2VwdC4gIEEgdGFza19zdHJ1Y3QgcGx1cyBhCisgKiBzdGFjayBjb25zdW1lcyBhcm91bmQgMTBLIG9mIGxvdyBrZXJuZWwgbWVtb3J5LiAgTW9yZSBwcmVjaXNlbHkKKyAqIHRoaXMgaXMgVEhSRUFEX1NJWkUgKyBzaXplb2Yoc3RydWN0IHRhc2tfc3RydWN0KS4gIEJ5IGNvbXBhcmlzb24KKyAqIGEgc3RydWN0IHBpZCBpcyBhYm91dCA2NCBieXRlcy4KKyAqCisgKiBIb2xkaW5nIGEgcmVmZXJlbmNlIHRvIHN0cnVjdCBwaWQgc29sdmVzIGJvdGggb2YgdGhlc2UgcHJvYmxlbXMuCisgKiBJdCBpcyBzbWFsbCBzbyBob2xkaW5nIGEgcmVmZXJlbmNlIGRvZXMgbm90IGNvbnN1bWUgYSBsb3Qgb2YKKyAqIHJlc291cmNlcywgYW5kIHNpbmNlIGEgbmV3IHN0cnVjdCBwaWQgaXMgYWxsb2NhdGVkIHdoZW4gdGhlIG51bWVyaWMKKyAqIHBpZCB2YWx1ZSBpcyByZXVzZWQgd2UgZG9uJ3QgbWlzdGFrZW5seSByZWZlciB0byBuZXcgcHJvY2Vzc2VzLgorICovCisKIHN0cnVjdCBwaWQKIHsKKwlhdG9taWNfdCBjb3VudDsKIAkvKiBUcnkgdG8ga2VlcCBwaWRfY2hhaW4gaW4gdGhlIHNhbWUgY2FjaGVsaW5lIGFzIG5yIGZvciBmaW5kX3BpZCAqLwogCWludCBucjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBwaWRfY2hhaW47Ci0JLyogbGlzdCBvZiBwaWRzIHdpdGggdGhlIHNhbWUgbnIsIG9ubHkgb25lIG9mIHRoZW0gaXMgaW4gdGhlIGhhc2ggKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHBpZF9saXN0OworCS8qIGxpc3RzIG9mIHRhc2tzIHRoYXQgdXNlIHRoaXMgcGlkICovCisJc3RydWN0IGhsaXN0X2hlYWQgdGFza3NbUElEVFlQRV9NQVhdOworCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCi0jZGVmaW5lIHBpZF90YXNrKGVsZW0sIHR5cGUpIFwKLQlsaXN0X2VudHJ5KGVsZW0sIHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkc1t0eXBlXS5waWRfbGlzdCkKK3N0cnVjdCBwaWRfbGluaworeworCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CisJc3RydWN0IHBpZCAqcGlkOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGlkICpnZXRfcGlkKHN0cnVjdCBwaWQgKnBpZCkKK3sKKwlpZiAocGlkKQorCQlhdG9taWNfaW5jKCZwaWQtPmNvdW50KTsKKwlyZXR1cm4gcGlkOworfQorCitleHRlcm4gdm9pZCBGQVNUQ0FMTChwdXRfcGlkKHN0cnVjdCBwaWQgKnBpZCkpOworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqRkFTVENBTEwocGlkX3Rhc2soc3RydWN0IHBpZCAqcGlkLCBlbnVtIHBpZF90eXBlKSk7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpGQVNUQ0FMTChnZXRfcGlkX3Rhc2soc3RydWN0IHBpZCAqcGlkLAorCQkJCQkJZW51bSBwaWRfdHlwZSkpOwogCiAvKgogICogYXR0YWNoX3BpZCgpIGFuZCBkZXRhY2hfcGlkKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgdGFza2xpc3RfbG9jawogICogd3JpdGUtaGVsZC4KICAqLwotZXh0ZXJuIGludCBGQVNUQ0FMTChhdHRhY2hfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgZW51bSBwaWRfdHlwZSB0eXBlLCBpbnQgbnIpKTsKK2V4dGVybiBpbnQgRkFTVENBTEwoYXR0YWNoX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJZW51bSBwaWRfdHlwZSB0eXBlLCBpbnQgbnIpKTsKIAogZXh0ZXJuIHZvaWQgRkFTVENBTEwoZGV0YWNoX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUpKTsKIAogLyoKICAqIGxvb2sgdXAgYSBQSUQgaW4gdGhlIGhhc2ggdGFibGUuIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHRhc2tsaXN0X2xvY2sKLSAqIGhlbGQuCisgKiBvciByY3VfcmVhZF9sb2NrKCkgaGVsZC4KICAqLwotZXh0ZXJuIHN0cnVjdCBwaWQgKkZBU1RDQUxMKGZpbmRfcGlkKGVudW0gcGlkX3R5cGUsIGludCkpOworZXh0ZXJuIHN0cnVjdCBwaWQgKkZBU1RDQUxMKGZpbmRfcGlkKGludCBucikpOwogCi1leHRlcm4gaW50IGFsbG9jX3BpZG1hcCh2b2lkKTsKLWV4dGVybiB2b2lkIEZBU1RDQUxMKGZyZWVfcGlkbWFwKGludCkpOworLyoKKyAqIExvb2t1cCBhIFBJRCBpbiB0aGUgaGFzaCB0YWJsZSwgYW5kIHJldHVybiB3aXRoIGl0J3MgY291bnQgZWxldmF0ZWQuCisgKi8KK2V4dGVybiBzdHJ1Y3QgcGlkICpmaW5kX2dldF9waWQoaW50IG5yKTsKIAorZXh0ZXJuIHN0cnVjdCBwaWQgKmFsbG9jX3BpZCh2b2lkKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKGZyZWVfcGlkKHN0cnVjdCBwaWQgKnBpZCkpOworCisjZGVmaW5lIHBpZF9uZXh0KHRhc2ssIHR5cGUpCQkJCQlcCisJKCh0YXNrKS0+cGlkc1sodHlwZSldLm5vZGUubmV4dCkKKworI2RlZmluZSBwaWRfbmV4dF90YXNrKHRhc2ssIHR5cGUpIAkJCQlcCisJaGxpc3RfZW50cnkocGlkX25leHQodGFzaywgdHlwZSksIHN0cnVjdCB0YXNrX3N0cnVjdCwJXAorCQkJcGlkc1sodHlwZSldLm5vZGUpCisKKworLyogV2UgY291bGQgdXNlIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSBoZXJlIGJ1dCBpdCB0YWtlcyBtb3JlIGFyZ3VtZW50cworICogdGhhbiB0aGUgZG9fZWFjaF90YXNrX3BpZC93aGlsZV9lYWNoX3Rhc2tfcGlkLiAgU28gd2Ugcm9sbCBvdXIgb3duCisgKiB0byBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlLgorICovCiAjZGVmaW5lIGRvX2VhY2hfdGFza19waWQod2hvLCB0eXBlLCB0YXNrKQkJCQlcCiAJaWYgKCh0YXNrID0gZmluZF90YXNrX2J5X3BpZF90eXBlKHR5cGUsIHdobykpKSB7CQlcCi0JCXByZWZldGNoKCh0YXNrKS0+cGlkc1t0eXBlXS5waWRfbGlzdC5uZXh0KTsJCVwKKwkJcHJlZmV0Y2gocGlkX25leHQodGFzaywgdHlwZSkpOwkJCQlcCiAJCWRvIHsKIAogI2RlZmluZSB3aGlsZV9lYWNoX3Rhc2tfcGlkKHdobywgdHlwZSwgdGFzaykJCQkJXAotCQl9IHdoaWxlICh0YXNrID0gcGlkX3Rhc2soKHRhc2spLT5waWRzW3R5cGVdLnBpZF9saXN0Lm5leHQsXAotCQkJCQkJdHlwZSksCQkJXAotCQkJcHJlZmV0Y2goKHRhc2spLT5waWRzW3R5cGVdLnBpZF9saXN0Lm5leHQpLAlcCi0JCQlobGlzdF91bmhhc2hlZCgmKHRhc2spLT5waWRzW3R5cGVdLnBpZF9jaGFpbikpOwlcCi0JfQkJCQkJCQkJXAorCQl9IHdoaWxlIChwaWRfbmV4dCh0YXNrLCB0eXBlKSAmJiAgKHsJCQlcCisJCQkJdGFzayA9IHBpZF9uZXh0X3Rhc2sodGFzaywgdHlwZSk7CVwKKwkJCQlyY3VfZGVyZWZlcmVuY2UodGFzayk7CQkJXAorCQkJCXByZWZldGNoKHBpZF9uZXh0KHRhc2ssIHR5cGUpKTsJCVwKKwkJCQkxOyB9KSApOwkJCQlcCisJfQogCiAjZW5kaWYgLyogX0xJTlVYX1BJRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaAppbmRleCA3NWM3ZjU1Li5lYTRmN2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgKQEAgLTUsMTkgKzUsMzcgQEAKIAogI2RlZmluZSBQSVBFX0JVRkZFUlMgKDE2KQogCisjZGVmaW5lIFBJUEVfQlVGX0ZMQUdfTFJVCTB4MDEJLyogcGFnZSBpcyBvbiB0aGUgTFJVICovCisjZGVmaW5lIFBJUEVfQlVGX0ZMQUdfQVRPTUlDCTB4MDIJLyogd2FzIGF0b21pY2FsbHkgbWFwcGVkICovCisjZGVmaW5lIFBJUEVfQlVGX0ZMQUdfR0lGVAkweDA0CS8qIHBhZ2UgaXMgYSBnaWZ0ICovCisKIHN0cnVjdCBwaXBlX2J1ZmZlciB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgaW50IG9mZnNldCwgbGVuOwogCXN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHM7Ci0JdW5zaWduZWQgaW50IHN0b2xlbjsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCisvKgorICogTm90ZSBvbiB0aGUgbmVzdGluZyBvZiB0aGVzZSBmdW5jdGlvbnM6CisgKgorICogLT5waW4oKQorICoJLT5zdGVhbCgpCisgKgkuLi4KKyAqCS0+bWFwKCkKKyAqCS4uLgorICoJLT51bm1hcCgpCisgKgorICogVGhhdCBpcywgLT5tYXAoKSBtdXN0IGJlIGNhbGxlZCBvbiBhIHBpbm5lZCBidWZmZXIsIHNhbWUgZ29lcyBmb3IgLT5zdGVhbCgpLgorICovCiBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB7CiAJaW50IGNhbl9tZXJnZTsKLQl2b2lkICogKCptYXApKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICopOwotCXZvaWQgKCp1bm1hcCkoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CisJdm9pZCAqICgqbWFwKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqLCBpbnQpOworCXZvaWQgKCp1bm1hcCkoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKiwgdm9pZCAqKTsKKwlpbnQgKCpwaW4pKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICopOwogCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqKTsKIAlpbnQgKCpzdGVhbCkoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CisJdm9pZCAoKmdldCkoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CiB9OwogCiBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKQEAgLTMzLDMyICs1MSw1MyBAQAogCXVuc2lnbmVkIGludCB3X2NvdW50ZXI7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19yZWFkZXJzOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfd3JpdGVyczsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogfTsKIAogLyogRGlmZmVycyBmcm9tIFBJUEVfQlVGIGluIHRoYXQgUElQRV9TSVpFIGlzIHRoZSBsZW5ndGggb2YgdGhlIGFjdHVhbAogICAgbWVtb3J5IGFsbG9jYXRpb24sIHdoZXJlYXMgUElQRV9CVUYgbWFrZXMgYXRvbWljaXR5IGd1YXJhbnRlZXMuICAqLwogI2RlZmluZSBQSVBFX1NJWkUJCVBBR0VfU0laRQogCi0jZGVmaW5lIFBJUEVfTVVURVgoaW5vZGUpCSgmKGlub2RlKS5pX211dGV4KQotI2RlZmluZSBQSVBFX1dBSVQoaW5vZGUpCSgmKGlub2RlKS5pX3BpcGUtPndhaXQpCi0jZGVmaW5lIFBJUEVfUkVBREVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT5yZWFkZXJzKQotI2RlZmluZSBQSVBFX1dSSVRFUlMoaW5vZGUpCSgoaW5vZGUpLmlfcGlwZS0+d3JpdGVycykKLSNkZWZpbmUgUElQRV9XQUlUSU5HX1dSSVRFUlMoaW5vZGUpCSgoaW5vZGUpLmlfcGlwZS0+d2FpdGluZ193cml0ZXJzKQotI2RlZmluZSBQSVBFX1JDT1VOVEVSKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPnJfY291bnRlcikKLSNkZWZpbmUgUElQRV9XQ09VTlRFUihpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53X2NvdW50ZXIpCi0jZGVmaW5lIFBJUEVfRkFTWU5DX1JFQURFUlMoaW5vZGUpICAgICAoJigoaW5vZGUpLmlfcGlwZS0+ZmFzeW5jX3JlYWRlcnMpKQotI2RlZmluZSBQSVBFX0ZBU1lOQ19XUklURVJTKGlub2RlKSAgICAgKCYoKGlub2RlKS5pX3BpcGUtPmZhc3luY193cml0ZXJzKSkKLQogLyogRHJvcCB0aGUgaW5vZGUgc2VtYXBob3JlIGFuZCB3YWl0IGZvciBhIHBpcGUgZXZlbnQsIGF0b21pY2FsbHkgKi8KLXZvaWQgcGlwZV93YWl0KHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKK3ZvaWQgcGlwZV93YWl0KHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpOwogCi1zdHJ1Y3QgaW5vZGUqIHBpcGVfbmV3KHN0cnVjdCBpbm9kZSogaW5vZGUpOwotdm9pZCBmcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUqIGlub2RlKTsKK3N0cnVjdCBwaXBlX2lub2RlX2luZm8gKiBhbGxvY19waXBlX2luZm8oc3RydWN0IGlub2RlICogaW5vZGUpOwordm9pZCBmcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7Cit2b2lkIF9fZnJlZV9waXBlX2luZm8oc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqKTsKKworLyogR2VuZXJpYyBwaXBlIGJ1ZmZlciBvcHMgZnVuY3Rpb25zICovCit2b2lkICpnZW5lcmljX3BpcGVfYnVmX21hcChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqLCBpbnQpOwordm9pZCBnZW5lcmljX3BpcGVfYnVmX3VubWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICosIHZvaWQgKik7Cit2b2lkIGdlbmVyaWNfcGlwZV9idWZfZ2V0KHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICopOworaW50IGdlbmVyaWNfcGlwZV9idWZfcGluKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICopOworaW50IGdlbmVyaWNfcGlwZV9idWZfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CiAKIC8qCiAgKiBzcGxpY2UgaXMgdGllZCB0byBwaXBlcyBhcyBhIHRyYW5zcG9ydCAoYXQgbGVhc3QgZm9yIG5vdyksIHNvIHdlJ2xsIGp1c3QKICAqIGFkZCB0aGUgc3BsaWNlIGZsYWdzIGhlcmUuCiAgKi8KICNkZWZpbmUgU1BMSUNFX0ZfTU9WRQkoMHgwMSkJLyogbW92ZSBwYWdlcyBpbnN0ZWFkIG9mIGNvcHlpbmcgKi8KKyNkZWZpbmUgU1BMSUNFX0ZfTk9OQkxPQ0sgKDB4MDIpIC8qIGRvbid0IGJsb2NrIG9uIHRoZSBwaXBlIHNwbGljaW5nIChidXQgKi8KKwkJCQkgLyogd2UgbWF5IHN0aWxsIGJsb2NrIG9uIHRoZSBmZCB3ZSBzcGxpY2UgKi8KKwkJCQkgLyogZnJvbS90bywgb2YgY291cnNlICovCisjZGVmaW5lIFNQTElDRV9GX01PUkUJKDB4MDQpCS8qIGV4cGVjdCBtb3JlIGRhdGEgKi8KKyNkZWZpbmUgU1BMSUNFX0ZfR0lGVAkoMHgwOCkJLyogcGFnZXMgcGFzc2VkIGluIGFyZSBhIGdpZnQgKi8KKworLyoKKyAqIFBhc3NlZCB0byB0aGUgYWN0b3JzCisgKi8KK3N0cnVjdCBzcGxpY2VfZGVzYyB7CisJdW5zaWduZWQgaW50IGxlbiwgdG90YWxfbGVuOwkvKiBjdXJyZW50IGFuZCByZW1haW5pbmcgbGVuZ3RoICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkJLyogc3BsaWNlIGZsYWdzICovCisJc3RydWN0IGZpbGUgKmZpbGU7CQkvKiBmaWxlIHRvIHJlYWQvd3JpdGUgKi8KKwlsb2ZmX3QgcG9zOwkJCS8qIGZpbGUgcG9zaXRpb24gKi8KK307CisKK3R5cGVkZWYgaW50IChzcGxpY2VfYWN0b3IpKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICosCisJCQkgICBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKik7CisKK2V4dGVybiBzc2l6ZV90IHNwbGljZV9mcm9tX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgZmlsZSAqLAorCQkJCWxvZmZfdCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCwKKwkJCQlzcGxpY2VfYWN0b3IgKik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDZkZjI1ODUuLjY2YmU1ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTE5OSw2ICsxOTksMTIgQEAKIAogZXh0ZXJuIGludCBkcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKiwgcG1fbWVzc2FnZV90KTsKIGV4dGVybiB2b2lkIGRwbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoY29uc3QgY2hhciAqZnVuY3Rpb24sIHZvaWQgKmZuLCBpbnQgcmV0KTsKKworI2RlZmluZSBzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZm4sIHJldCkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCV9fc3VzcGVuZF9yZXBvcnRfcmVzdWx0KF9fRlVOQ1RJT05fXywgZm4sIHJldCk7CQlcCisJfSB3aGlsZSAoMCkKIAogI2Vsc2UgLyogIUNPTkZJR19QTSAqLwogCkBAIC0yMTksNiArMjI1LDggQEAKIHsKIH0KIAorI2RlZmluZSBzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZm4sIHJldCkgZG8geyB9IHdoaWxlICgwKQorCiAjZW5kaWYKIAogLyogY2hhbmdlcyB0byBkZXZpY2VfbWF5X3dha2V1cCB0YWtlIGVmZmVjdCBvbiB0aGUgbmV4dCBwbSBzdGF0ZSBjaGFuZ2UuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX2xlZ2FjeS5oIGIvaW5jbHVkZS9saW51eC9wbV9sZWdhY3kuaAppbmRleCAxMjUyYjQ1Li4wMDg5MzJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtX2xlZ2FjeS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fbGVnYWN5LmgKQEAgLTE2LDExICsxNiw2IEBACiBwbV9yZWdpc3RlcihwbV9kZXZfdCB0eXBlLCB1bnNpZ25lZCBsb25nIGlkLCBwbV9jYWxsYmFjayBjYWxsYmFjayk7CiAKIC8qCi0gKiBVbnJlZ2lzdGVyIGEgZGV2aWNlIHdpdGggcG93ZXIgbWFuYWdlbWVudAotICovCi12b2lkIF9fZGVwcmVjYXRlZCBwbV91bnJlZ2lzdGVyKHN0cnVjdCBwbV9kZXYgKmRldik7Ci0KLS8qCiAgKiBVbnJlZ2lzdGVyIGFsbCBkZXZpY2VzIHdpdGggbWF0Y2hpbmcgY2FsbGJhY2sKICAqLwogdm9pZCBfX2RlcHJlY2F0ZWQgcG1fdW5yZWdpc3Rlcl9hbGwocG1fY2FsbGJhY2sgY2FsbGJhY2spOwpAQCAtNDEsOCArMzYsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcG1fdW5yZWdpc3RlcihzdHJ1Y3QgcG1fZGV2ICpkZXYpIHt9Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV91bnJlZ2lzdGVyX2FsbChwbV9jYWxsYmFjayBjYWxsYmFjaykge30KIAogc3RhdGljIGlubGluZSBpbnQgcG1fc2VuZF9hbGwocG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IDEzNTg3MWQuLjRiNDdhMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC03OSw3ICs3OSw3IEBACiBzdHJ1Y3Qgdm1jb3JlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdW5zaWduZWQgbG9uZyBsb25nIHBhZGRyOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKIAlsb2ZmX3Qgb2Zmc2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKaW5kZXggNzc0ZTFhYy4uZjFmYmFlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCkBAIC0yMjcsOCArMjI3LDggQEAKIAkJCQkgKi8KIAogCS8qIFRoZXNlIGFyZSBvbmx5IHZhbGlkIHdpdGggZmVhdHVyZSBiaXQgJzQnICovCi0JX191NjQJcmVzaGFwZV9wb3NpdGlvbjsJLyogbmV4dCBhZGRyZXNzIGluIGFycmF5LXNwYWNlIGZvciByZXNoYXBlICovCiAJX191MzIJbmV3X2xldmVsOwkvKiBuZXcgbGV2ZWwgd2UgYXJlIHJlc2hhcGluZyB0bwkJKi8KKwlfX3U2NAlyZXNoYXBlX3Bvc2l0aW9uOwkvKiBuZXh0IGFkZHJlc3MgaW4gYXJyYXktc3BhY2UgZm9yIHJlc2hhcGUgKi8KIAlfX3UzMglkZWx0YV9kaXNrczsJLyogY2hhbmdlIGluIG51bWJlciBvZiByYWlkX2Rpc2tzCQkqLwogCV9fdTMyCW5ld19sYXlvdXQ7CS8qIG5ldyBsYXlvdXQJCQkJCSovCiAJX191MzIJbmV3X2NodW5rOwkvKiBuZXcgY2h1bmsgc2l6ZSAoYnl0ZXMpCQkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCA1NjczMDA4Li45NzAyODRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC0xMzIsNiArMTMyLDcgQEAKIH0KIAogZXh0ZXJuIGludCByY3VfcGVuZGluZyhpbnQgY3B1KTsKK2V4dGVybiBpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KTsKIAogLyoqCiAgKiByY3VfcmVhZF9sb2NrIC0gbWFyayB0aGUgYmVnaW5uaW5nIG9mIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCBkMDQxODZkLi4yOWI3ZDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xMDAsNiArMTAwLDcgQEAKIGV4dGVybiBpbnQgbnJfcHJvY2Vzc2VzKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnJfcnVubmluZyh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5yX3VuaW50ZXJydXB0aWJsZSh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5yX2FjdGl2ZSh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5yX2lvd2FpdCh2b2lkKTsKIAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KQEAgLTQ4Myw2ICs0ODQsNyBAQAogI2RlZmluZSBNQVhfUFJJTwkJKE1BWF9SVF9QUklPICsgNDApCiAKICNkZWZpbmUgcnRfdGFzayhwKQkJKHVubGlrZWx5KChwKS0+cHJpbyA8IE1BWF9SVF9QUklPKSkKKyNkZWZpbmUgYmF0Y2hfdGFzayhwKQkJKHVubGlrZWx5KChwKS0+cG9saWN5ID09IFNDSEVEX0JBVENIKSkKIAogLyoKICAqIFNvbWUgZGF5IHRoaXMgd2lsbCBiZSBhIGZ1bGwtZmxlZGdlZCB1c2VyIHRyYWNraW5nIHN5c3RlbS4uCkBAIC02ODIsNiArNjg0LDE0IEBACiAKIHN0cnVjdCBhdWRpdF9jb250ZXh0OwkJLyogU2VlIGF1ZGl0LmMgKi8KIHN0cnVjdCBtZW1wb2xpY3k7CitzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvOworCitlbnVtIHNsZWVwX3R5cGUgeworCVNMRUVQX05PUk1BTCwKKwlTTEVFUF9OT05JTlRFUkFDVElWRSwKKwlTTEVFUF9JTlRFUkFDVElWRSwKKwlTTEVFUF9JTlRFUlJVUFRFRCwKK307CiAKIHN0cnVjdCB0YXNrX3N0cnVjdCB7CiAJdm9sYXRpbGUgbG9uZyBzdGF0ZTsJLyogLTEgdW5ydW5uYWJsZSwgMCBydW5uYWJsZSwgPjAgc3RvcHBlZCAqLwpAQCAtNzA1LDcgKzcxNSw3IEBACiAJdW5zaWduZWQgbG9uZyBzbGVlcF9hdmc7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVzdGFtcCwgbGFzdF9yYW47CiAJdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX3RpbWU7IC8qIHNjaGVkX2Nsb2NrIHRpbWUgc3BlbnQgcnVubmluZyAqLwotCWludCBhY3RpdmF0ZWQ7CisJZW51bSBzbGVlcF90eXBlIHNsZWVwX3R5cGU7CiAKIAl1bnNpZ25lZCBsb25nIHBvbGljeTsKIAljcHVtYXNrX3QgY3B1c19hbGxvd2VkOwpAQCAtNzUxLDcgKzc2MSw3IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpncm91cF9sZWFkZXI7CS8qIHRocmVhZGdyb3VwIGxlYWRlciAqLwogCiAJLyogUElEL1BJRCBoYXNoIHRhYmxlIGxpbmthZ2UuICovCi0Jc3RydWN0IHBpZCBwaWRzW1BJRFRZUEVfTUFYXTsKKwlzdHJ1Y3QgcGlkX2xpbmsgcGlkc1tQSURUWVBFX01BWF07CiAJc3RydWN0IGxpc3RfaGVhZCB0aHJlYWRfZ3JvdXA7CiAKIAlzdHJ1Y3QgY29tcGxldGlvbiAqdmZvcmtfZG9uZTsJCS8qIGZvciB2Zm9yaygpICovCkBAIC04NzMsNiArODgzLDExIEBACiAKIAlhdG9taWNfdCBmc19leGNsOwkvKiBob2xkaW5nIGZzIGV4Y2x1c2l2ZSByZXNvdXJjZXMgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCisJLyoKKwkgKiBjYWNoZSBsYXN0IHVzZWQgcGlwZSBmb3Igc3BsaWNlCisJICovCisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqc3BsaWNlX3BpcGU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHBpZF90IHByb2Nlc3NfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCkBAIC04OTAsMTggKzkwNSwxOCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBwaWRfYWxpdmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJldHVybiBwLT5waWRzW1BJRFRZUEVfUElEXS5uciAhPSAwOworCXJldHVybiBwLT5waWRzW1BJRFRZUEVfUElEXS5waWQgIT0gTlVMTDsKIH0KIAogZXh0ZXJuIHZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKICNkZWZpbmUgZ2V0X3Rhc2tfc3RydWN0KHRzaykgZG8geyBhdG9taWNfaW5jKCYodHNrKS0+dXNhZ2UpOyB9IHdoaWxlKDApCiAKLWV4dGVybiB2b2lkIF9fcHV0X3Rhc2tfc3RydWN0X2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKTsKK2V4dGVybiB2b2lkIF9fcHV0X3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0KQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0LT51c2FnZSkpCi0JCWNhbGxfcmN1KCZ0LT5yY3UsIF9fcHV0X3Rhc2tfc3RydWN0X2NiKTsKKwkJX19wdXRfdGFza19zdHJ1Y3QodCk7CiB9CiAKIC8qCkBAIC0xMTc3LDggKzExOTIsNyBAQAogI2RlZmluZSByZW1vdmVfcGFyZW50KHApCWxpc3RfZGVsX2luaXQoJihwKS0+c2libGluZykKICNkZWZpbmUgYWRkX3BhcmVudChwKQkJbGlzdF9hZGRfdGFpbCgmKHApLT5zaWJsaW5nLCYocCktPnBhcmVudC0+Y2hpbGRyZW4pCiAKLSNkZWZpbmUgbmV4dF90YXNrKHApCWxpc3RfZW50cnkoKHApLT50YXNrcy5uZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRhc2tzKQotI2RlZmluZSBwcmV2X3Rhc2socCkJbGlzdF9lbnRyeSgocCktPnRhc2tzLnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGFza3MpCisjZGVmaW5lIG5leHRfdGFzayhwKQlsaXN0X2VudHJ5KHJjdV9kZXJlZmVyZW5jZSgocCktPnRhc2tzLm5leHQpLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRhc2tzKQogCiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3MocCkgXAogCWZvciAocCA9ICZpbml0X3Rhc2sgOyAocCA9IG5leHRfdGFzayhwKSkgIT0gJmluaXRfdGFzayA7ICkKQEAgLTExOTMsOSArMTIwNywxMCBAQAogI2RlZmluZSB3aGlsZV9lYWNoX3RocmVhZChnLCB0KSBcCiAJd2hpbGUgKCh0ID0gbmV4dF90aHJlYWQodCkpICE9IGcpCiAKLSNkZWZpbmUgdGhyZWFkX2dyb3VwX2xlYWRlcihwKQkocC0+cGlkID09IHAtPnRnaWQpCisvKiBkZV90aHJlYWQgZGVwZW5kcyBvbiB0aHJlYWRfZ3JvdXBfbGVhZGVyIG5vdCBiZWluZyBhIHBpZCBiYXNlZCBjaGVjayAqLworI2RlZmluZSB0aHJlYWRfZ3JvdXBfbGVhZGVyKHApCShwID09IHAtPmdyb3VwX2xlYWRlcikKIAotc3RhdGljIGlubGluZSB0YXNrX3QgKm5leHRfdGhyZWFkKHRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgdGFza190ICpuZXh0X3RocmVhZChjb25zdCB0YXNrX3QgKnApCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHAtPnRocmVhZF9ncm91cC5uZXh0KSwKIAkJCQl0YXNrX3QsIHRocmVhZF9ncm91cCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmggYi9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmgKaW5kZXggNjMzNjk4Ny4uMjkyNWU2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY3JlZW5faW5mby5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NyZWVuX2luZm8uaApAQCAtNDEsNyArNDEsOCBAQAogCXUxNiB2ZXNhcG1fb2ZmOwkJLyogMHgzMCAqLwogCXUxNiBwYWdlczsJCS8qIDB4MzIgKi8KIAl1MTYgdmVzYV9hdHRyaWJ1dGVzOwkvKiAweDM0ICovCi0JCQkJLyogMHgzNiAtLSAweDNmIHJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdTMyIGNhcGFiaWxpdGllczsgICAgICAgLyogMHgzNiAqLworCQkJCS8qIDB4M2EgLS0gMHgzZiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9hc3kuaCBiL2luY2x1ZGUvbGludXgvc2RsYV9hc3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyMjQyNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFfYXN5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfYXN5LmgJSGVhZGVyIGZpbGUgZm9yIHRoZSBTYW5nb21hIFM1MDgvUzUxNCBhc3luY2hyb25vdXMgY29kZSBBUEkJCi0qCi0qIEF1dGhvcjogCUdpZGVvbiBIYWNrIAkKLSoKLSogQ29weXJpZ2h0OgkoYykgMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIEphbiAyOCwgMjAwMAlHaWRlb24gSGFjayAJSW5pdGlhbCBWZXJzaW9uCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIF9XQU5QSVBFX0FTWU5DX0gKLSNkZWZpbmUgX1dBTlBJUEVfQVNZTkNfSAotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFNFVF9BU1lfQ09ORklHVVJBVElPTgkJMHhFMgkvKiBzZXQgdGhlIGFzeWNocm9ub3VzIG9wZXJhdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUkVBRF9BU1lfQ09ORklHVVJBVElPTgkJMHhFMwkvKiByZWFkIHRoZSBjdXJyZW50IGFzeWNocm9ub3VzIG9wZXJhdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgRU5BQkxFX0FTWV9DT01NVU5JQ0FUSU9OUwkweEU0CS8qIGVuYWJsZSBhc3ljaHJvbm91cyBjb21tdW5pY2F0aW9ucyAqLwotI2RlZmluZSBESVNBQkxFX0FTWV9DT01NVU5JQ0FUSU9OUwkweEU1CS8qIGRpc2FibGUgYXN5Y2hyb25vdXMgY29tbXVuaWNhdGlvbnMgKi8KLSNkZWZpbmUgUkVBRF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMJMHhFNwkvKiByZXRyaWV2ZSB0aGUgYXN5Y2hyb25vdXMgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBGTFVTSF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMJMHhFOAkvKiBmbHVzaCB0aGUgYXN5Y2hyb25vdXMgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBUUkFOU01JVF9BU1lfQlJFQUtfU0lHTkFMCTB4RUMJLyogdHJhbnNtaXQgYW4gYXN5Y2hyb25vdXMgYnJlYWsgc2lnbmFsICovCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgIFJldHVybiBjb2RlcyBmcm9tIGludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIENPTU1BTkRfSU5WQUxJRF9GT1JfUE9SVAkweDUwCS8qIHRoZSBjb21tYW5kIGlzIGludmFsaWQgZm9yIHRoZSBzZWxlY3RlZCBwb3J0ICovCi0jZGVmaW5lIERJU0FCTEVfQVNZX0NPTU1TX0JFRk9SRV9DRkcgCTB4RTEJLyogY29tbXVuaWNhdGlvbnMgbXVzdCBiZSBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBBU1lfQ09NTVNfRU5BQkxFRAkJMHhFMQkvKiBjb21tdW5pY2F0aW9ucyBhcmUgY3VycmVudGx5IGVuYWJsZWQgKi8KLSNkZWZpbmUgQVNZX0NPTU1TX0RJU0FCTEVECQkweEUxCS8qIGNvbW11bmljYXRpb25zIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQgKi8KLSNkZWZpbmUgQVNZX0NGR19CRUZPUkVfQ09NTVNfRU5BQkxFRAkweEUyCS8qIHBlcmZvcm0gYSBTRVRfQVNZX0NPTkZJR1VSQVRJT04gYmVmb3JlIGVuYWJsaW5nIGNvbW1zICovCi0jZGVmaW5lIExHVEhfQVNZX0NGR19EQVRBX0lOVkFMSUQgIAkweEUyCS8qIHRoZSBsZW5ndGggb2YgdGhlIHBhc3NlZCBjb25maWd1cmF0aW9uIGRhdGEgaXMgaW52YWxpZCAqLwotI2RlZmluZSBJTlZBTElEX0FTWV9DRkdfREFUQQkJMHhFMwkvKiB0aGUgcGFzc2VkIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIEFTWV9CUkVBS19TSUdOQUxfQlVTWQkJMHhFQwkvKiBhIGJyZWFrIHNpZ25hbCBpcyBiZWluZyB0cmFuc21pdHRlZCAqLwotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICBDb25zdGFudHMgZm9yIHRoZSBTRVRfQVNZX0NPTkZJR1VSQVRJT04vUkVBRF9BU1lfQ09ORklHVVJBVElPTiBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBhc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGJhdWRfcmF0ZQkJCVBBQ0tFRDsJCQkJCQkJLyogdGhlIGJhdWQgcmF0ZSAqLwkKLQl1bnNpZ25lZCBzaG9ydCBsaW5lX2NvbmZpZ19vcHRpb25zCVBBQ0tFRDsJLyogbGluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBtb2RlbV9jb25maWdfb3B0aW9ucwlQQUNLRUQ7CS8qIG1vZGVtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IGFzeV9BUElfb3B0aW9ucwkJUEFDS0VEOwkvKiBhc3luY2hyb25vdXMgQVBJIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBhc3lfcHJvdG9jb2xfb3B0aW9ucwlQQUNLRUQ7IC8qIGFzeW5jaHJvbm91cyBwcm90b2NvbCBvcHRpb25zICovCi0JdW5zaWduZWQgc2hvcnQgVHhfYml0c19wZXJfY2hhcgkJUEFDS0VEOwkvKiBudW1iZXIgb2YgYml0cyBwZXIgdHggY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgUnhfYml0c19wZXJfY2hhcgkJUEFDS0VEOwkvKiBudW1iZXIgb2YgYml0cyBwZXIgcmVjZWl2ZWQgY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgc3RvcF9iaXRzCQlQQUNLRUQ7CS8qIG51bWJlciBvZiBzdG9wIGJpdHMgcGVyIGNoYXJhY3RlciAqLwotCXVuc2lnbmVkIHNob3J0IHBhcml0eQkJCVBBQ0tFRDsJLyogcGFyaXR5IGRlZmluaXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha190aW1lcgkJUEFDS0VEOwkvKiB0aGUgYnJlYWsgc2lnbmFsIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgYXN5X1J4X2ludGVyX2NoYXJfdGltZXIJUEFDS0VEOwkvKiB0aGUgcmVjZWl2ZSBpbnRlci1jaGFyYWN0ZXIgdGltZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBhc3lfUnhfY29tcGxldGVfbGVuZ3RoCVBBQ0tFRDsJLyogdGhlIHJlY2VpdmUgJ2J1ZmZlciBjb21wbGV0ZScgbGVuZ3RoICovCi0JdW5zaWduZWQgc2hvcnQgWE9OX2NoYXIJCQlQQUNLRUQ7CS8qIHRoZSBYT04gY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgWE9GRl9jaGFyCQlQQUNLRUQ7CS8qIHRoZSBYT0ZGIGNoYXJhY3RlciAqLwotCXVuc2lnbmVkIHNob3J0IGFzeV9zdGF0aXN0aWNzX29wdGlvbnMJUEFDS0VEOwkvKiBhc3luYyBvcGVyYXRpb25hbCBzdGF0IG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0ICAgIFBBQ0tFRDsvKiBwdHIgdG8gdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9hc3lfVHhfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsvKiBwdHIgdG8gdGhlIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi0JdW5zaWduZWQgbG9uZyBwdHJfYXN5X1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCBQQUNLRUQ7LyogcHRyIHRvIHRoZSByZWNlaXZlIHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi19IEFTWV9DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogcGVybWl0dGVkIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGZvciBzZXR0aW5nIHRoZSBhc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNSU5fQVNZX0JBVURfUkFURQkJNTAJLyogbWF4aW11bSBiYXVkIHJhdGUgKi8KLSNkZWZpbmUgTUFYX0FTWV9CQVVEX1JBVEUJCTI1MDAwMAkvKiBtaW5pbXVtIGJhdWQgcmF0ZSAqLwotI2RlZmluZSBNSU5fQVNZX0JJVFNfUEVSX0NIQVIJCTUJLyogbWluaW11bSBudW1iZXIgb2YgYml0cyBwZXIgY2hhcmFjdGVyICovCi0jZGVmaW5lIE1BWF9BU1lfQklUU19QRVJfQ0hBUgkJOAkvKiBtYXhpbXVtIG51bWJlciBvZiBiaXRzIHBlciBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUgTUlOX0JSRUFLX1RNUl9WQUwJCTAJLyogbWluaW11bSBicmVhayBzaWduYWwgdGltZXIgKi8KLSNkZWZpbmUgTUFYX0JSRUFLX1RNUl9WQUwJCTUwMDAJLyogbWF4aW11bSBicmVhayBzaWduYWwgdGltZXIgKi8KLSNkZWZpbmUgTUlOX0FTWV9SWF9JTlRFUl9DSEFSX1RNUgkwCS8qIG1pbmltdW0gcmVjZWl2ZSBpbnRlci1jaGFyYWN0ZXIgdGltZXIgKi8KLSNkZWZpbmUgTUFYX0FTWV9SWF9JTlRFUl9DSEFSX1RNUgkzMDAwMAkvKiBtYXhpbXVtIHJlY2VpdmUgaW50ZXItY2hhcmFjdGVyIHRpbWVyICovCi0jZGVmaW5lIE1JTl9BU1lfUlhfQ1BMVF9MRU5HVEgJCTAJLyogbWluaW11bSByZWNlaXZlICdsZW5ndGggY29tcGxldGUnIHZhbHVlICovCi0jZGVmaW5lIE1BWF9BU1lfUlhfQ1BMVF9MRU5HVEgJCTIwMDAJLyogbWF4aW11bSByZWNlaXZlICdsZW5ndGggY29tcGxldGUnIHZhbHVlICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdhc3lfQVBJX29wdGlvbnMnICovCi0jZGVmaW5lIEFTWV9SWF9EQVRBX1RSQU5TUEFSRU5UCQkweDAwMDEJLyogZG8gbm90IHN0cmlwIHBhcml0eSBhbmQgdW51c2VkIGJpdHMgZnJvbSByZWNlaXZlZCBjaGFyYWN0ZXJzICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdhc3lfcHJvdG9jb2xfb3B0aW9ucycgKi8KLSNkZWZpbmUgQVNZX1JUU19IU19GT1JfUlgJCTB4MDAwMQkvKiBSVFMgaGFuZHNoYWtpbmcgaXMgdXNlZCBmb3IgcmVjZXB0aW9uIGNvbnRyb2wgKi8KLSNkZWZpbmUgQVNZX1hPTl9YT0ZGX0hTX0ZPUl9SWAkJMHgwMDAyCS8qIFhPTi9YT0ZGIGhhbmRzaGFraW5nIGlzIHVzZWQgZm9yIHJlY2VwdGlvbiBjb250cm9sICovCi0jZGVmaW5lIEFTWV9YT05fWE9GRl9IU19GT1JfVFgJCTB4MDAwNAkvKiBYT04vWE9GRiBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotI2RlZmluZSBBU1lfRENEX0hTX0ZPUl9UWAkJMHgwMDA4CS8qIERDRCBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotI2RlZmluZSBBU1lfQ1RTX0hTX0ZPUl9UWAkJMHgwMDIwCS8qIENUUyBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotCi0vKiBiaXQgc2V0dGluZ3MgZm9yIHRoZSAnc3RvcF9iaXRzJyBkZWZpbml0aW9uICovCi0jZGVmaW5lIE9ORV9TVE9QX0JJVAkJCTEJCQkvKiByZXByZXNlbnRhdGlvbiBmb3IgMSBzdG9wIGJpdCAqLwotI2RlZmluZSBUV09fU1RPUF9CSVRTCQkJMgkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciAyIHN0b3AgYml0cyAqLwotI2RlZmluZSBPTkVfQU5EX0FfSEFMRl9TVE9QX0JJVFMJMwkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciAxLjUgc3RvcCBiaXRzICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdwYXJpdHknIGRlZmluaXRpb24gKi8KLSNkZWZpbmUgTk9fUEFSSVRZCQkJMAkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciBubyBwYXJpdHkgKi8KLSNkZWZpbmUgT0REX1BBUklUWQkJCTEJCQkvKiByZXByZXNlbnRhdGlvbiBmb3Igb2RkIHBhcml0eSAqLwotI2RlZmluZSBFVkVOX1BBUklUWQkJCTIJCQkvKiByZXByZXNlbnRhdGlvbiBmb3IgZXZlbiBwYXJpdHkgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgIENvbnN0YW50cyBmb3IgdGhlIFJFQURfQ09NTVNfRVJST1JfU1RBVFMgY29tbWFuZCAoYXN5bmNocm9ub3VzIG1vZGUpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBjb21tdW5pY2F0aW9ucyBlcnJvciBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IFJ4X292ZXJydW5fZXJyX2NvdW50ICAgCVBBQ0tFRDsJLyogcmVjZWl2ZXIgb3ZlcnJ1biBlcnJvciBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X3Bhcml0eV9lcnJfY291bnQJUEFDS0VEOwkvKiBwYXJpdHkgZXJyb3JzIHJlY2VpdmVkIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfZnJhbWluZ19lcnJfY291bnQJUEFDS0VEOwkvKiBmcmFtaW5nIGVycm9ycyByZWNlaXZlZCBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IGNvbW1zX2Vycl9zdGF0X3Jlc2VydmVkXzEgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF8yIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgY29tbXNfZXJyX3N0YXRfcmVzZXJ2ZWRfMyBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIHNob3J0IGNvbW1zX2Vycl9zdGF0X3Jlc2VydmVkXzQgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF81IFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgRENEX3N0YXRlX2NoYW5nZV9jb3VudCAJUEFDS0VEOwkvKiBEQ0Qgc3RhdGUgY2hhbmdlIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgQ1RTX3N0YXRlX2NoYW5nZV9jb3VudAlQQUNLRUQ7CS8qIENUUyBzdGF0ZSBjaGFuZ2UgY291bnQgKi8KLX0gQVNZX0NPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgQ29uc3RhbnRzIGZvciB0aGUgUkVBRF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMgY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0KLQkvKiBEYXRhIHRyYW5zbWlzc2lvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2Jsb2Nrc19UeF9jb3VudCBQQUNLRUQ7LyogbnVtYmVyIG9mIGJsb2NrcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19UeF9jb3VudCAgUEFDS0VEOy8qIG51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9UeF90aHJvdWdocHV0ICAgUEFDS0VEOy8qIHRyYW5zbWl0IHRocm91Z2hwdXQgKi8KLQl1bnNpZ25lZCBsb25nIG5vX21zX2Zvcl9EYXRhX1R4X3RocnVwdXRfY29tcCBQQUNLRUQ7LyogbWlsbGlzZWNvbmQgdGltZSB1c2VkIGZvciB0aGUgVHggdGhyb3VnaHB1dCBjb21wdXRhdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgVHhfRGF0YV9kaXNjYXJkX2xndGhfZXJyX2NvdW50IFBBQ0tFRDsvKiBudW1iZXIgb2YgRGF0YSBibG9ja3MgZGlzY2FyZGVkIChsZW5ndGggZXJyb3IpICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9UeF9zdGF0MSBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fVHhfc3RhdDIgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1R4X3N0YXQzIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBEYXRhIHJlY2VwdGlvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2Jsb2Nrc19SeF9jb3VudCBQQUNLRUQ7LyogbnVtYmVyIG9mIGJsb2NrcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19SeF9jb3VudCAgUEFDS0VEOy8qIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9SeF90aHJvdWdocHV0ICAgUEFDS0VEOy8qIHJlY2VpdmUgdGhyb3VnaHB1dCAqLwotCXVuc2lnbmVkIGxvbmcgbm9fbXNfZm9yX0RhdGFfUnhfdGhydXB1dF9jb21wIFBBQ0tFRDsvKiBtaWxsaXNlY29uZCB0aW1lIHVzZWQgZm9yIHRoZSBSeCB0aHJvdWdocHV0IGNvbXB1dGF0aW9uICovCi0JdW5zaWduZWQgbG9uZyBSeF9EYXRhX2J5dGVzX2Rpc2NhcmRfY291bnQgICAgUEFDS0VEOy8qIHJlY2VpdmVkIERhdGEgYnl0ZXMgZGlzY2FyZGVkICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9SeF9zdGF0MSAgICAgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQotCS8qIGhhbmRzaGFraW5nIHByb3RvY29sIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBYT05fY2hhcnNfVHhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgWE9OIGNoYXJhY3RlcnMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBYT0ZGX2NoYXJzX1R4X2NvdW50CVBBQ0tFRDsJLyogbnVtYmVyIG9mIFhPRkYgY2hhcmFjdGVycyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIHNob3J0IFhPTl9jaGFyc19SeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBYT04gY2hhcmFjdGVycyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIHNob3J0IFhPRkZfY2hhcnNfUnhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgWE9GRiBjaGFyYWN0ZXJzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgc2hvcnQgVHhfaGFsdF9tb2RlbV9sb3dfY291bnQJUEFDS0VEOyAvKiBudW1iZXIgb2YgdGltZXMgVHggaGFsdGVkIChtb2RlbSBsaW5lIGxvdykgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9oYWx0X1JUU19sb3dfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgdGltZXMgUnggaGFsdGVkIGJ5IHNldHRpbmcgUlRTIGxvdyAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfaGFuZHNoYWtpbmdfc3RhdDEgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQotCS8qIGJyZWFrIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha19UeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBicmVhayBzZXF1ZW5jZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha19SeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBicmVhayBzZXF1ZW5jZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX2JyZWFrX3N0YXQxIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBtaXNjZWxsYW5lb3VzIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDEJUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9taXNjX3N0YXQyCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCi19IEFTWV9PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1Q7Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMgZm9yIERhdGEgdHJhbnNtaXNzaW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBEYXRhIGJsb2NrIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQgbnVtYmVyX1R4X3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgdHJhbnNtaXQgc3RhdHVzIGVsZW1lbnRzICovCi0JdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJfVHhfc3RhdHVzX2VsZW1lbnRzIFBBQ0tFRDsJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdCBlbGVtZW50IGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIG5leHRfVHhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgbmV4dCB0cmFuc21pdCBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLX0gQVNZX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUOwotCi0KLS8qIHRoZSBEYXRhIGJsb2NrIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgb3BwX2ZsYWcgUEFDS0VEOwkJCQkJCQkJLyogb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBzaG9ydCBkYXRhX2xlbmd0aCBQQUNLRUQ7CQkJCQkJLyogbGVuZ3RoIG9mIHRoZSBibG9jayB0byBiZSB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSBQQUNLRUQ7CQkJCQkJCS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgUEFDS0VEOwkJCQkJCQkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF8zIFBBQ0tFRDsJCQkJCQkJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJCQkJCQkvKiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgKi8KLX0gQVNZX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSByZWNlcHRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgYmxvY2sgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgICAgUEFDS0VEOy8qIG51bWJlciBvZiByZWNlaXZlIHN0YXR1cyBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1J4X3N0YXR1c19lbGVtZW50cyAgUEFDS0VEOy8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBlbGVtZW50IGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIG5leHRfUnhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsvKiBwb2ludGVyIHRvIHRoZSBuZXh0IHJlY2VpdmUgZWxlbWVudCB0byBiZSB1c2VkICovCi0JdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJfUnhfYnVmZmVyCVBBQ0tFRDsvKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nIGVuZF9hZGRyX1J4X2J1ZmZlciAJUEFDS0VEOy8qIGVuZCBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyICovCi19IEFTWV9SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVDsKLQotLyogdGhlIERhdGEgYmxvY2sgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIG9wcF9mbGFnIAkJUEFDS0VEOwkvKiBvcHAgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGRhdGFfbGVuZ3RoIAlQQUNLRUQ7CS8qIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZGF0YSBibG9jayAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSAJUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgdGltZV9zdGFtcCAJUEFDS0VEOyAvKiByZWNlaXZlIHRpbWUgc3RhbXAgKEhETENfU1RSRUFNSU5HX01PREUpICovCi0JdW5zaWduZWQgc2hvcnQgZGF0YV9idWZmZXJlZCAJUEFDS0VEOwkvKiB0aGUgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgc3RpbGwgYnVmZmVyZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIAlQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIGRhdGEgYXJlYSAqLwotfSBBU1lfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9jaGRsYy5oIGIvaW5jbHVkZS9saW51eC9zZGxhX2NoZGxjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZTM1YTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhX2NoZGxjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSBzZGxhX2NoZGxjLmgJU2FuZ29tYSBDaXNjbyBIRExDIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucwotCi0gQXV0aG9yOiAgICAgIAlHaWRlb24gSGFjawotCQlOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+CQotCi0gQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLQotCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0JCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLQkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0JCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBPY3QgMDQsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBVcGRhdGVkIEFQSSBzdXBwb3J0Ci0gIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIENoYW5nZXMgZm9yIFM1MTQgdXNhZ2UuCi0gIE9jdCAyOCwgMTk5OAlKYXNwcmVldCBTaW5naAlNYWRlIGNoYW5nZXMgZm9yIER1YWwgUG9ydCBDSERMQy4KLSAgSnVuIDExLCAxOTk4CURhdmlkIEZvbmcJSW5pdGlhbCB2ZXJzaW9uLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSBPcmdhbml6YXRpb24KLQktIENvbXBhdGliaWxpdHkgbm90ZXMKLQktIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIChtYWlsYm94KQotCS0gSW50ZXJmYWNlIGNvbW1hbmRzCi0JLSBSZXR1cm4gY29kZSBmcm9tIGludGVyZmFjZSBjb21tYW5kcwotCS0gQ29uc3RhbnRzIGZvciB0aGUgY29tbWFuZHMgKHN0cnVjdHVyZXMgZm9yIGNhc3RpbmcgZGF0YSkKLQktIFVEUCBNYW5hZ2VtZW50IGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcwotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9TRExBX0NIRExDX0gKLSMgIGRlZmluZSBfU0RMQ19DSERMQ19ICi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBOb3RlczoKLQotCUFsbCBzdHJ1Y3RyZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXJlIGJ5dGUtYWxpZ25lZC4gIAotCi0JQ29tcGlsZXIJUGxhdGZvcm0KLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlHTlUgQwkJTGludXgKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmbmRlZglQQUNLRUQKLSNkZWZpbmUJUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZW5kaWYJLyogUEFDS0VEICovCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIChtYWlsYm94KQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUIAkweEUwMDAgCS8qIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggc3RydWN0dXJlIG9uIHRoZSBhZGFwdGVyICovCi0jZGVmaW5lIFNFQ19CQVNFX0FERFJfTUJfU1RSVUNUIAkweEU4MDAgCS8qIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggc3RydWN0dXJlIG9uIHRoZSBhZGFwdGVyICovCi0jZGVmaW5lIFNJWkVPRl9NQl9EQVRBX0JGUgkJMjAzMgkvKiB0aGUgc2l6ZSBvZiB0aGUgYWN0dWFsIG1haWxib3ggZGF0YSBhcmVhICovCi0jZGVmaW5lIE5VTUJFUl9NQl9SRVNFUlZFRF9CWVRFUwkweDBCCS8qIHRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgYnl0ZXMgaW4gdGhlIG1haWxib3ggaGVhZGVyIGFyZWEgKi8KLQotCi0jZGVmaW5lIE1JTl9MR1RIX0NIRExDX0RBVEFfQ0ZHICAJMzAwIAkvKiBtaW4gbGVuZ3RoIG9mIHRoZSBDSERMQyBkYXRhIGZpZWxkIChmb3IgY29uZmlndXJhdGlvbiBwdXJwb3NlcykgKi8KLSNkZWZpbmUgUFJJX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAxNTM1NCAvKiBQUklNQVJZIC0gbWF4IGxlbmd0aCBvZiB0aGUgQ0hETEMgZGF0YSBmaWVsZCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkJLyogdGhlIG9wcCBmbGFnICovCi0JdW5zaWduZWQgY2hhciBjb21tYW5kIFBBQ0tFRDsJCQkvKiB0aGUgdXNlciBjb21tYW5kICovCi0JdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCBQQUNLRUQ7CQkvKiB0aGUgZGF0YSBsZW5ndGggKi8KLSAgCXVuc2lnbmVkIGNoYXIgcmV0dXJuX2NvZGUgUEFDS0VEOwkJLyogdGhlIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciBNQl9yZXNlcnZlZFtOVU1CRVJfTUJfUkVTRVJWRURfQllURVNdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgY2hhciBkYXRhW1NJWkVPRl9NQl9EQVRBX0JGUl0gUEFDS0VEOwkvKiB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX01BSUxCT1hfU1RSVUNUOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIHBpZF90ICAgICAgICAgICAgICAgICAgIHBpZF9udW0gUEFDS0VEOwotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCAgICAgY21kYXJlYSBQQUNLRUQ7Ci0KLX0gQ01EQkxPQ0tfU1RSVUNUOwotCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBnbG9iYWwgaW50ZXJmYWNlIGNvbW1hbmRzICovCi0jZGVmaW5lIFJFQURfR0xPQkFMX0VYQ0VQVElPTl9DT05ESVRJT04JMHgwMQotI2RlZmluZSBTRVRfR0xPQkFMX0NPTkZJR1VSQVRJT04JMHgwMgotI2RlZmluZSBSRUFEX0dMT0JBTF9DT05GSUdVUkFUSU9OCTB4MDMKLSNkZWZpbmUgUkVBRF9HTE9CQUxfU1RBVElTVElDUwkJMHgwNAotI2RlZmluZSBGTFVTSF9HTE9CQUxfU1RBVElTVElDUwkJMHgwNQotI2RlZmluZSBTRVRfTU9ERU1fU1RBVFVTCQkweDA2CS8qIHNldCBzdGF0dXMgb2YgRFRSIG9yIFJUUyAqLwotI2RlZmluZSBSRUFEX01PREVNX1NUQVRVUwkJMHgwNwkvKiByZWFkIHN0YXR1cyBvZiBDVFMgYW5kIERDRCAqLwotI2RlZmluZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTCQkweDA4CQotI2RlZmluZSBGTFVTSF9DT01NU19FUlJPUl9TVEFUUwkJMHgwOQotI2RlZmluZSBTRVRfVFJBQ0VfQ09ORklHVVJBVElPTgkJMHgwQQkvKiBzZXQgdGhlIGxpbmUgdHJhY2UgY29uZmlnICovCi0jZGVmaW5lIFJFQURfVFJBQ0VfQ09ORklHVVJBVElPTgkweDBCCS8qIHJlYWQgdGhlIGxpbmUgdHJhY2UgY29uZmlnICovCi0jZGVmaW5lIFJFQURfVFJBQ0VfU1RBVElTVElDUwkJMHgwQwkvKiByZWFkIHRoZSB0cmFjZSBzdGF0aXN0aWNzICovCi0jZGVmaW5lIEZMVVNIX1RSQUNFX1NUQVRJU1RJQ1MJCTB4MEQJLyogZmx1c2ggdGhlIHRyYWNlIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgRlQxX01PTklUT1JfU1RBVFVTX0NUUkwJCTB4MUMJLyogc2V0IHRoZSBzdGF0dXMgb2YgdGhlIFM1MDgvRlQxIG1vbml0b3JpbmcgKi8KLSNkZWZpbmUgU0VUX0ZUMV9DT05GSUdVUkFUSU9OCQkweDE4CS8qIHNldCB0aGUgRlQxIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUkVBRF9GVDFfQ09ORklHVVJBVElPTgkJMHgxOQkvKiByZWFkIHRoZSBGVDEgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUUkFOU01JVF9BU1lOQ19EQVRBX1RPX0ZUMQkweDFBCS8qIG91dHB1dCBhc3luY2hyb25vdXMgZGF0YSB0byB0aGUgRlQxICovCi0jZGVmaW5lIFJFQ0VJVkVfQVNZTkNfREFUQV9GUk9NX0ZUMQkweDFCCS8qIHJlY2VpdmUgYXN5bmNocm9ub3VzIGRhdGEgZnJvbSB0aGUgRlQxICovCi0jZGVmaW5lIEZUMV9NT05JVE9SX1NUQVRVU19DVFJMCQkweDFDCS8qIHNldCB0aGUgc3RhdHVzIG9mIHRoZSBGVDEgbW9uaXRvcmluZyAqLwotCi0jZGVmaW5lIFJFQURfRlQxX09QRVJBVElPTkFMX1NUQVRTCTB4MUQJLyogcmVhZCB0aGUgUzUwOC9GVDEgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBTRVRfRlQxX01PREUJCQkweDFFCS8qIHNldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiB0aGUgUzUwOC9GVDEgbW9kdWxlICovCi0KLS8qIENIRExDLWxldmVsIGludGVyZmFjZSBjb21tYW5kcyAqLwotI2RlZmluZSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTgkJMHgyMAkKLSNkZWZpbmUgUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OCTB4MjEJLyogcmVhZCBleGNlcHRpb24gY29uZGl0aW9uIGZyb20gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04JCTB4MjIKLSNkZWZpbmUgUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OCTB4MjMKLSNkZWZpbmUgRU5BQkxFX0NIRExDX0NPTU1VTklDQVRJT05TCTB4MjQKLSNkZWZpbmUgRElTQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUwkweDI1Ci0jZGVmaW5lIFJFQURfQ0hETENfTElOS19TVEFUVVMJCTB4MjYKLSNkZWZpbmUgUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUwkweDI3Ci0jZGVmaW5lIEZMVVNIX0NIRExDX09QRVJBVElPTkFMX1NUQVRTCTB4MjgKLSNkZWZpbmUgU0VUX0NIRExDX0lOVEVSUlVQVF9UUklHR0VSUwkweDMwCS8qIHNldCBhcHBsaWNhdGlvbiBpbnRlcnJ1cHQgdHJpZ2dlcnMgKi8KLSNkZWZpbmUgUkVBRF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlMJMHgzMQkvKiByZWFkIGFwcGxpY2F0aW9uIGludGVycnVwdCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogU3BlY2lhbCBVRFAgZHJpdmVycyBtYW5hZ2VtZW50IGNvbW1hbmRzICovCi0jZGVmaW5lIENQSVBFX0VOQUJMRV9UUkFDSU5HCQkJCTB4NTAKLSNkZWZpbmUgQ1BJUEVfRElTQUJMRV9UUkFDSU5HCQkJCTB4NTEKLSNkZWZpbmUgQ1BJUEVfR0VUX1RSQUNFX0lORk8JCQkJMHg1MgotI2RlZmluZSBDUElQRV9HRVRfSUJBX0RBVEEJCQkJMHg1MwotI2RlZmluZSBDUElQRV9GVDFfUkVBRF9TVEFUVVMJCQkJMHg1NAotI2RlZmluZSBDUElQRV9EUklWRVJfU1RBVF9JRlNFTkQJCQkweDU1Ci0jZGVmaW5lIENQSVBFX0RSSVZFUl9TVEFUX0lOVFIJCQkJMHg1NgotI2RlZmluZSBDUElQRV9EUklWRVJfU1RBVF9HRU4JCQkJMHg1NwotI2RlZmluZSBDUElQRV9GTFVTSF9EUklWRVJfU1RBVFMJCQkweDU4Ci0jZGVmaW5lIENQSVBFX1JPVVRFUl9VUF9USU1FCQkJCTB4NTkKLQotLyogRHJpdmVyIHNwZWNpZmljIGNvbW1hbmRzIGZvciBBUEkgKi8KLSNkZWZpbmUJQ0hETENfUkVBRF9UUkFDRV9EQVRBCQkweEU0CS8qIHJlYWQgdHJhY2UgZGF0YSAqLwotI2RlZmluZSBUUkFDRV9BTEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgVFJBQ0VfUFJPVAkJCTB4MDEKLSNkZWZpbmUgVFJBQ0VfREFUQQkJCTB4MDIKLQotI2RlZmluZSBESVNDQVJEX1JYX0VSUk9SX0ZSQU1FUwkweDAwMDEKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgICAgICBSZXR1cm4gY29kZXMgZnJvbSBpbnRlcmZhY2UgY29tbWFuZHMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBDT01NQU5EX09LCQkJCTB4MDAKLQotLyogcmV0dXJuIGNvZGVzIGZyb20gZ2xvYmFsIGludGVyZmFjZSBjb21tYW5kcyAqLwotI2RlZmluZSBOT19HTE9CQUxfRVhDRVBfQ09ORF9UT19SRVBPUlQJCTB4MDEJLyogdGhlcmUgaXMgbm8gQ0hETEMgZXhjZXB0aW9uIGNvbmRpdGlvbiB0byByZXBvcnQgKi8KLSNkZWZpbmUgTEdUSF9HTE9CQUxfQ0ZHX0RBVEFfSU5WQUxJRAkJMHgwMQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIExHVEhfVFJBQ0VfQ0ZHX0RBVEFfSU5WQUxJRAkJMHgwMQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgdHJhY2UgY29uZmlndXJhdGlvbiBkYXRhIGlzIGludmFsaWQgKi8KLSNkZWZpbmUgSVJRX1RJTUVPVVRfVkFMVUVfSU5WQUxJRAkJMHgwMgkvKiBhbiBpbnZhbGlkIGFwcGxpY2F0aW9uIElSUSB0aW1lb3V0IHZhbHVlIHdhcyBzZWxlY3RlZCAqLwotI2RlZmluZSBUUkFDRV9DT05GSUdfSU5WQUxJRAkJCTB4MDIJLyogdGhlIHBhc3NlZCBsaW5lIHRyYWNlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCAqLwotI2RlZmluZSBBREFQVEVSX09QRVJBVElOR19GUkVRX0lOVkFMSUQJCTB4MDMJLyogYW4gaW52YWxpZCBhZGFwdGVyIG9wZXJhdGluZyBmcmVxdWVuY3kgd2FzIHNlbGVjdGVkICovCi0jZGVmaW5lIFRSQ19ERUFDX1RNUl9JTlZBTElECQkJMHgwMwkvKiB0aGUgdHJhY2UgZGVhY3RpdmF0aW9uIHRpbWVyIGlzIGludmFsaWQgKi8KLSNkZWZpbmUgUzUwOF9GVDFfQURQVFJfTk9UX1BSRVNFTlQJCTB4MEMJLyogdGhlIFM1MDgvRlQxIGFkYXB0ZXIgaXMgbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgSU5WQUxJRF9GVDFfU1RBVFVTX1NFTEVDVElPTiAgICAgICAgICAgIDB4MEQgICAgLyogdGhlIFM1MDgvRlQxIHN0YXR1cyBzZWxlY3Rpb24gaXMgaW52YWxpZCAqLwotI2RlZmluZSBGVDFfT1BfU1RBVFNfTk9UX0VOQUJMRUQJCTB4MEQgICAgLyogdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIGhhdmUgbm90IGJlZW4gZW5hYmxlZCAqLwotI2RlZmluZSBGVDFfT1BfU1RBVFNfTk9UX0FWQUlMQUJMRQkJMHgwRSAgICAvKiB0aGUgRlQxIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgYXJlIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlICovCi0jZGVmaW5lIFM1MDhfRlQxX01PREVfU0VMRUNUSU9OX0JVU1kJCTB4MEUJLyogdGhlIFM1MDgvRlQxIGFkYXB0ZXIgaXMgYnVzeSBzZWxlY3RpbmcgdGhlIG9wZXJhdGlvbmFsIG1vZGUgKi8KLQotLyogcmV0dXJuIGNvZGVzIGZyb20gY29tbWFuZCBSRUFEX0dMT0JBTF9FWENFUFRJT05fQ09ORElUSU9OICovCi0jZGVmaW5lIEVYQ0VQX01PREVNX1NUQVRVU19DSEFOR0UJCTB4MTAJCS8qIGEgbW9kZW0gc3RhdHVzIGNoYW5nZSBvY2N1cnJlZCAqLwotI2RlZmluZSBFWENFUF9UUkNfRElTQUJMRUQJCQkweDExCQkvKiB0aGUgdHJhY2UgaGFzIGJlZW4gZGlzYWJsZWQgKi8KLSNkZWZpbmUgRVhDRVBfSVJRX1RJTUVPVVQJCQkweDEyCQkvKiBJUlEgdGltZW91dCAqLwotCi0vKiByZXR1cm4gY29kZXMgZnJvbSBDSERMQy1sZXZlbCBpbnRlcmZhY2UgY29tbWFuZHMgKi8KLSNkZWZpbmUgTk9fQ0hETENfRVhDRVBfQ09ORF9UT19SRVBPUlQJCTB4MjEJLyogdGhlcmUgaXMgbm8gQ0hETEMgZXhjZXB0aW9uIGNvbmRpdGlvbiB0byByZXBvcnQgKi8KLSNkZWZpbmUgQ0hETENfQ09NTVNfRElTQUJMRUQJCQkweDIxCS8qIGNvbW11bmljYXRpb25zIGFyZSBub3QgY3VycmVudGx5IGVuYWJsZWQgKi8KLSNkZWZpbmUgQ0hETENfQ09NTVNfRU5BQkxFRAkJCTB4MjEJLyogY29tbXVuaWNhdGlvbnMgYXJlIGN1cnJlbnRseSBlbmFibGVkICovCi0jZGVmaW5lIERJU0FCTEVfQ0hETENfQ09NTVNfQkVGT1JFX0NGRwkJMHgyMQkvKiBDSERMQyBjb21tdW5pY2F0aW9ucyBtdXN0IGJlIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIEVOQUJMRV9DSERMQ19DT01NU19CRUZPUkVfQ09OTgkJMHgyMQkvKiBjb21tdW5pY2F0aW9ucyBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIHVzaW5nIHRoZSBDSERMQ19DT05ORUNUIGNvbm1tYW5kICovCi0jZGVmaW5lIENIRExDX0NGR19CRUZPUkVfQ09NTVNfRU5BQkxFRAkJMHgyMgkvKiBwZXJmb3JtIGEgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04gYmVmb3JlIGVuYWJsaW5nIGNvbW1zICovCi0jZGVmaW5lIExHVEhfQ0hETENfQ0ZHX0RBVEFfSU5WQUxJRCAJCTB4MjIJLyogdGhlIGxlbmd0aCBvZiB0aGUgcGFzc2VkIENIRExDIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIExHVEhfSU5UX1RSSUdHRVJTX0RBVEFfSU5WQUxJRAkJMHgyMgkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgaW50ZXJydXB0IHRyaWdnZXIgZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIElOVkFMSURfSVJRX1NFTEVDVEVECQkJMHgyMwkvKiBpbiBpbnZhbGlkIElSUSB3YXMgc2VsZWN0ZWQgaW4gdGhlIFNFVF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlMgKi8KLSNkZWZpbmUgSU5WQUxJRF9DSERMQ19DRkdfREFUQQkJCTB4MjMJLyogdGhlIHBhc3NlZCBDSERMQyBjb25maWd1cmF0aW9uIGRhdGEgaXMgaW52YWxpZCAqLwotI2RlZmluZSBJUlFfVE1SX1ZBTFVFX0lOVkFMSUQJCQkweDI0CS8qIGFuIGludmFsaWQgYXBwbGljYXRpb24gSVJRIHRpbWVyIHZhbHVlIHdhcyBzZWxlY3RlZCAqLwotI2RlZmluZSBMQVJHRVJfUEVSQ0VOVF9UWF9CRlJfUkVRVUlSRUQJCTB4MjQJLyogYSBsYXJnZXIgVHggYnVmZmVyIHBlcmNlbnRhZ2UgaXMgcmVxdWlyZWQgKi8KLSNkZWZpbmUgTEFSR0VSX1BFUkNFTlRfUlhfQkZSX1JFUVVJUkVECQkweDI1CS8qIGEgbGFyZ2VyIFJ4IGJ1ZmZlciBwZXJjZW50YWdlIGlzIHJlcXVpcmVkICovCi0jZGVmaW5lIFM1MTRfQk9USF9QT1JUU19TQU1FX0NMS19NT0RFCQkweDI2CS8qIFM1MTQgLSBib3RoIHBvcnRzIG11c3QgaGF2ZSBzYW1lIGNsb2NrIG1vZGUgKi8KLSNkZWZpbmUgSU5WQUxJRF9DTU5EX0hETENfU1RSRUFNX01PREUgICAgICAgICAgIDB4NEUgICAgLyogdGhlIENIRExDIGludGVyZmFjZSBjb21tYW5kIGlzIGludmFsaWQgZm9yIEhETEMgc3RyZWFtaW5nIG1vZGUgKi8KLSNkZWZpbmUgSU5WQUxJRF9DSERMQ19DT01NQU5ECQkJMHg0RgkvKiB0aGUgZGVmaW5lZCBDSERMQyBpbnRlcmZhY2UgY29tbWFuZCBpcyBpbnZhbGlkICovCi0KLS8qIHJldHVybiBjb2RlcyBmcm9tIGNvbW1hbmQgUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OICovCi0jZGVmaW5lIEVYQ0VQX0xJTktfQUNUSVZFCQkJMHgzMAkvKiB0aGUgQ0hETEMgbGluayBoYXMgYmVjb21lIGFjdGl2ZSAqLwotI2RlZmluZSBFWENFUF9MSU5LX0lOQUNUSVZFX01PREVNCQkweDMxCS8qIHRoZSBDSERMQyBsaW5rIGhhcyBiZWNvbWUgaW5hY3RpdmUgKG1vZGVtIHN0YXR1cykgKi8KLSNkZWZpbmUgRVhDRVBfTElOS19JTkFDVElWRV9LUEFMVgkJMHgzMgkvKiB0aGUgQ0hETEMgbGluayBoYXMgYmVjb21lIGluYWN0aXZlIChrZWVwYWxpdmUgc3RhdHVzKSAqLwotI2RlZmluZSBFWENFUF9JUF9BRERSRVNTX0RJU0NPVkVSRUQJCTB4MzMJLyogdGhlIElQIGFkZHJlc3MgaGFzIGJlZW4gZGlzY292ZXJlZCAqLwotI2RlZmluZSBFWENFUF9MT09QQkFDS19DT05ESVRJT04JCTB4MzQJLyogYSBsb29wYmFjayBjb25kaXRpb24gaGFzIG9jY3VycmVkICovCi0KLQotLyogcmV0dXJuIGNvZGUgZnJvbSBjb21tYW5kIENIRExDX1NFTkRfV0FJVCBhbmQgQ0hETENfU0VORF9OT19XQUlUICovCi0jZGVmaW5lIExJTktfRElTQ09OTkVDVEVECQkJMHgyMQotI2RlZmluZSBOT19UWF9CRlJTX0FWQUlMCQkJMHgyNAotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvbnN0YW50cyBmb3IgdGhlIFNFVF9HTE9CQUxfQ09ORklHVVJBVElPTi9SRUFEX0dMT0JBTF9DT05GSUdVUkFUSU9OIGNvbW1hbmRzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBhZGFwdGVyX2NvbmZpZ19vcHRpb25zIFBBQ0tFRDsJLyogYWRhcHRlciBjb25maWcgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IGFwcF9JUlFfdGltZW91dCBQQUNLRUQ7CQkvKiBhcHBsaWNhdGlvbiBJUlEgdGltZW91dCAqLwotCXVuc2lnbmVkIGxvbmcgYWRhcHRlcl9vcGVyYXRpbmdfZnJlcXVlbmN5IFBBQ0tFRDsJLyogYWRhcHRlciBvcGVyYXRpbmcgZnJlcXVlbmN5ICovCi19IEdMT0JBTF9DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnYXBwX0lSUV90aW1lb3V0JyAqLwotI2RlZmluZSBNQVhfQVBQX0lSUV9USU1FT1VUX1ZBTFVFCTUwMDAJLyogdGhlIG1heGltdW0gcGVybWl0dGVkIElSUSB0aW1lb3V0ICovCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0dMT0JBTF9TVEFUSVNUSUNTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGdsb2JhbCBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IGFwcF9JUlFfdGltZW91dF9jb3VudCBQQUNLRUQ7Ci19IEdMT0JBTF9TVEFUU19TVFJVQ1Q7Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGNvbW11bmljYXRpb25zIGVycm9yIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQgUnhfb3ZlcnJ1bl9lcnJfY291bnQgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IENSQ19lcnJfY291bnQgUEFDS0VEOwkvKiByZWNlaXZlciBDUkMgZXJyb3IgY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9hYm9ydF9jb3VudCBQQUNLRUQ7IAkvKiBhYm9ydCBmcmFtZXMgcmVjdmQgY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9kaXNfcHJpX2JmcnNfZnVsbF9jb3VudCBQQUNLRUQ7LyogcmVjZWl2ZXIgZGlzYWJsZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF8xIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBzZWNfVHhfYWJvcnRfbXNkX1R4X2ludF9jb3VudCBQQUNLRUQ7IC8qIHNlY29uZGFyeSAtIGFib3J0IGZyYW1lcyB0cmFuc21pdHRlZCBjb3VudCAobWlzc2VkIFR4IGludGVycnVwdCkgKi8KLQl1bnNpZ25lZCBzaG9ydCBtaXNzZWRfVHhfdW5kX2ludF9jb3VudCBQQUNLRUQ7CS8qIG1pc3NlZCB0eCB1bmRlcnJ1biBpbnRlcnJ1cHQgY291bnQgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VjX1R4X2Fib3J0X2NvdW50IFBBQ0tFRDsgICAvKnNlY29uZGFyeS1hYm9ydCBmcmFtZXMgdHggY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBEQ0Rfc3RhdGVfY2hhbmdlX2NvdW50IFBBQ0tFRDsgLyogRENEIHN0YXRlIGNoYW5nZSAqLwotCXVuc2lnbmVkIHNob3J0IENUU19zdGF0ZV9jaGFuZ2VfY291bnQgUEFDS0VEOyAvKiBDVFMgc3RhdGUgY2hhbmdlICovCi19IENPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzIHVzZWQgZm9yIGxpbmUgdHJhY2luZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgdHJhY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKFNFVF9UUkFDRV9DT05GSUdVUkFUSU9OL1JFQURfVFJBQ0VfQ09ORklHVVJBVElPTiBjb21tYW5kcykgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIHRyYWNlX2NvbmZpZyBQQUNLRUQ7CQkvKiB0cmFjZSBjb25maWd1cmF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgdHJhY2VfZGVhY3RpdmF0aW9uX3RpbWVyIFBBQ0tFRDsJLyogdHJhY2UgZGVhY3RpdmF0aW9uIHRpbWVyICovCi0JdW5zaWduZWQgbG9uZyBwdHJfdHJhY2Vfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSBsaW5lIHRyYWNlIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLX0gTElORV9UUkFDRV9DT05GSUdfU1RSVUNUOwotCi0vKiAndHJhY2VfY29uZmlnJyBiaXQgc2V0dGluZ3MgKi8KLSNkZWZpbmUgVFJBQ0VfSU5BQ1RJVkUJCTB4MDAJLyogdHJhY2UgaXMgaW5hY3RpdmUgKi8KLSNkZWZpbmUgVFJBQ0VfQUNUSVZFCQkweDAxCS8qIHRyYWNlIGlzIGFjdGl2ZSAqLwotI2RlZmluZSBUUkFDRV9ERUxBWV9NT0RFCTB4MDQJLyogb3BlcmF0ZSB0aGUgdHJhY2UgaW4gZGVsYXkgbW9kZSAqLwotI2RlZmluZSBUUkFDRV9EQVRBX0ZSQU1FUwkweDA4CS8qIHRyYWNlIERhdGEgZnJhbWVzICovCi0jZGVmaW5lIFRSQUNFX1NMQVJQX0ZSQU1FUwkweDEwCS8qIHRyYWNlIFNMQVJQIGZyYW1lcyAqLwotI2RlZmluZSBUUkFDRV9DRFBfRlJBTUVTCTB4MjAJLyogdHJhY2UgQ0RQIGZyYW1lcyAqLwotCi0vKiB0aGUgbGluZSB0cmFjZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl90cmFjZV9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBudW1iZXIgb2YgbGluZSB0cmFjZSBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX3RyYWNlX3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhY2UgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X3RyYWNlX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgbmV4dCB0cmFjZSBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl90cmFjZV9idWZmZXIgUEFDS0VEOwkJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFjZSBkYXRhIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHJfdHJhY2VfYnVmZmVyIFBBQ0tFRDsJCS8qIGVuZCBhZGRyZXNzIG9mIHRoZSB0cmFjZSBkYXRhIGJ1ZmZlciAqLwotfSBUUkFDRV9TVEFUVVNfRUxfQ0ZHX1NUUlVDVDsKLQotLyogdGhlIGxpbmUgdHJhY2Ugc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkJLyogb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBzaG9ydCB0cmFjZV9sZW5ndGggUEFDS0VEOwkJLyogdHJhY2UgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciB0cmFjZV90eXBlIFBBQ0tFRDsJCS8qIHRyYWNlIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCB0cmFjZV90aW1lX3N0YW1wIFBBQ0tFRDsJLyogdGltZSBzdGFtcCAqLwotCXVuc2lnbmVkIHNob3J0IHRyYWNlX3Jlc2VydmVkXzEgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgbG9uZyB0cmFjZV9yZXNlcnZlZF8yIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9kYXRhX2JmciBQQUNLRUQ7CQkvKiBwdHIgdG8gdGhlIHRyYWNlIGRhdGEgYnVmZmVyICovCi19IFRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVDsKLQotLyogInRyYWNlX3R5cGUiIGJpdCBzZXR0aW5ncyAqLwotI2RlZmluZSBUUkFDRV9JTkNPTUlORyAJCQkweDAwCi0jZGVmaW5lIFRSQUNFX09VVEdPSU5HSU5HIAkJMHgwMQotI2RlZmluZSBUUkFDRV9JTkNPTUlOR19BQk9SVEVEIAkJMHgxMAotI2RlZmluZSBUUkFDRV9JTkNPTUlOR19DUkNfRVJST1IgCTB4MjAKLSNkZWZpbmUgVFJBQ0VfSU5DT01JTkdfT1ZFUlJVTl9FUlJPUiAJMHg0MAotCi0KLQotLyogdGhlIGxpbmUgdHJhY2Ugc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGZyYW1lc190cmFjZWRfY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgZnJhbWVzIHRyYWNlZCAqLwotCXVuc2lnbmVkIGxvbmcgdHJjX2ZybXNfbm90X3JlY29yZGVkX2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRyYWNlIGZyYW1lcyBkaXNjYXJkZWQgKi8KLX0gTElORV9UUkFDRV9TVEFUU19TVFJVQ1Q7Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBGVDFfTU9OSVRPUl9TVEFUVVNfQ1RSTCBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgRElTQUJMRV9GVDFfU1RBVFVTX1NUQVRJU1RJQ1MJMHgwMCAgICAvKiBkaXNhYmxlIHRoZSBGVDEgc3RhdHVzIGFuZCBzdGF0aXN0aWNzIG1vbml0b3JpbmcgKi8KLSNkZWZpbmUgRU5BQkxFX1JFQURfRlQxX1NUQVRVUwkJMHgwMSAgICAvKiByZWFkIHRoZSBGVDEgb3BlcmF0aW9uYWwgc3RhdHVzICovCi0jZGVmaW5lIEVOQUJMRV9SRUFEX0ZUMV9PUF9TVEFUUwkweDAyICAgIC8qIHJlYWQgdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0jZGVmaW5lIEZMVVNIX0ZUMV9PUF9TVEFUUwkJMHgwNCAJLyogZmx1c2ggdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgQ29uc3RhbnRzIGZvciB0aGUgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04gY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGJhdWRfcmF0ZSBQQUNLRUQ7CQkvKiB0aGUgYmF1ZCByYXRlICovCQotCXVuc2lnbmVkIHNob3J0IGxpbmVfY29uZmlnX29wdGlvbnMgUEFDS0VEOwkvKiBsaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IG1vZGVtX2NvbmZpZ19vcHRpb25zIFBBQ0tFRDsJLyogbW9kZW0gY29uZmlncmF0aW9uIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBtb2RlbV9zdGF0dXNfdGltZXIgUEFDS0VEOwkvKiB0aW1lciBmb3IgbW9uaXRvcmluZyBtb2RlbSBzdGF0dXMgY2hhbmdlcyAqLwotCXVuc2lnbmVkIHNob3J0IENIRExDX0FQSV9vcHRpb25zIFBBQ0tFRDsJLyogQ0hETEMgQVBJIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBDSERMQ19wcm90b2NvbF9vcHRpb25zIFBBQ0tFRDsJLyogQ0hETEMgcHJvdG9jb2wgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IHBlcmNlbnRfZGF0YV9idWZmZXJfZm9yX1R4IFBBQ0tFRDsJLyogcGVyY2VudGFnZSBkYXRhIGJ1ZmZlcmluZyB1c2VkIGZvciBUeCAqLwotCXVuc2lnbmVkIHNob3J0IENIRExDX3N0YXRpc3RpY3Nfb3B0aW9ucyBQQUNLRUQ7CS8qIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IG1heF9DSERMQ19kYXRhX2ZpZWxkX2xlbmd0aCBQQUNLRUQ7CS8qIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgQ0hETEMgRGF0YSBmaWVsZCAqLwotCXVuc2lnbmVkIHNob3J0IHRyYW5zbWl0X2tlZXBhbGl2ZV90aW1lciBQQUNLRUQ7CQkvKiB0aGUgdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgcmVjZWl2ZV9rZWVwYWxpdmVfdGltZXIgUEFDS0VEOwkJLyogdGhlIHJlY2VpdmUga2VlcGFsaXZlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQga2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZSBQQUNLRUQ7CS8qIHRoZSByZWNlaXZlIGtlZXBhbGl2ZSBlcnJvciB0b2xlcmFuY2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBTTEFSUF9yZXF1ZXN0X3RpbWVyIFBBQ0tFRDsJCS8qIHRoZSBTTEFSUCByZXF1ZXN0IHRpbWVyICovCi0JdW5zaWduZWQgbG9uZyBJUF9hZGRyZXNzIFBBQ0tFRDsJCQkvKiB0aGUgSVAgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgSVBfbmV0bWFzayBQQUNLRUQ7CQkJLyogdGhlIElQIG5ldG1hc2sgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi0JdW5zaWduZWQgbG9uZyBwdHJfQ0hETENfVHhfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCBQQUNLRUQ7CS8qIGEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotfSBDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnbGluZV9jb25maWdfb3B0aW9ucycgKi8KLSNkZWZpbmUgSU5URVJGQUNFX0xFVkVMX1YzNQkJCQkJMHgwMDAwIC8qIFYuMzUgaW50ZXJmYWNlIGxldmVsICovCi0jZGVmaW5lIElOVEVSRkFDRV9MRVZFTF9SUzIzMgkJCQkJMHgwMDAxIC8qIFJTLTIzMiBpbnRlcmZhY2UgbGV2ZWwgKi8KLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnbW9kZW1fY29uZmlnX29wdGlvbnMnICovCi0KLSNkZWZpbmUgRE9OVF9SQUlTRV9EVFJfUlRTX09OX0VOX0NPTU1TCQkweDAwMDEKLS8qIGRvbid0IGF1dG9tYXRpY2FsbHkgcmFpc2UgRFRSIGFuZCBSVFMgd2hlbiBwZXJmb3JtaW5nIGFuCi0gICBFTkFCTEVfQ0hETENfQ09NTVVOSUNBVElPTlMgY29tbWFuZCAqLwotCi0jZGVmaW5lIERPTlRfUkVQT1JUX0NIR19JTl9NT0RFTV9TVEFUIAkJMHgwMDAyCi0vKiBkb24ndCByZXBvcnQgY2hhbmdlcyBpbiBtb2RlbSBzdGF0dXMgdG8gdGhlIGFwcGxpY2F0aW9uICovCi0KLQotLyogYml0IHNldHRpbmdzIGZvciB0aGUgJ0NIRExDX3Byb3RvY29sX29wdGlvbnMnIGJ5dGUgKi8KLQotI2RlZmluZSBJR05PUkVfRENEX0ZPUl9MSU5LX1NUQVQJCTB4MDAwMQotLyogaWdub3JlIERDRCBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8KLQotI2RlZmluZSBJR05PUkVfQ1RTX0ZPUl9MSU5LX1NUQVQJCTB4MDAwMgotLyogaWdub3JlIENUUyBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8KLQotI2RlZmluZSBJR05PUkVfS1BBTFZfRk9SX0xJTktfU1RBVAkJMHgwMDA0Ci0vKiBpZ25vcmUga2VlcGFsaXZlIGZyYW1lcyBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8gCi0KLSNkZWZpbmUgU0lOR0xFX1RYX0JVRkZFUgkJCTB4NDAwMCAKLS8qIGNvbmZpZ3VyZSBhIHNpbmdsZSB0cmFuc21pdCBidWZmZXIgKi8KLQotI2RlZmluZSBIRExDX1NUUkVBTUlOR19NT0RFCQkJMHg4MDAwCi0KLS8qICAgc2V0dGluZ3MgZm9yIHRoZSAnQ0hETENfc3RhdGlzdGljc19vcHRpb25zJyAqLwotCi0jZGVmaW5lIENIRExDX1RYX0RBVEFfQllURV9DT1VOVF9TVEFUCQkweDAwMDEKLS8qIHJlY29yZCB0aGUgbnVtYmVyIG9mIERhdGEgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KLQotI2RlZmluZSBDSERMQ19SWF9EQVRBX0JZVEVfQ09VTlRfU1RBVAkJMHgwMDAyCi0vKiByZWNvcmQgdGhlIG51bWJlciBvZiBEYXRhIGJ5dGVzIHJlY2VpdmVkICovCi0KLSNkZWZpbmUgQ0hETENfVFhfVEhST1VHSFBVVF9TVEFUCQkweDAwMDQKLS8qIGNvbXB1dGUgdGhlIERhdGEgZnJhbWUgdHJhbnNtaXQgdGhyb3VnaHB1dCAqLwotCi0jZGVmaW5lIENIRExDX1JYX1RIUk9VR0hQVVRfU1RBVAkJMHgwMDA4Ci0vKiBjb21wdXRlIHRoZSBEYXRhIGZyYW1lIHJlY2VpdmUgdGhyb3VnaHB1dCAqLwotCi0KLS8qIHBlcm1pdHRlZCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3Igc2V0dGluZyB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBQUklfTUFYX0JBVURfUkFURV9TNTA4CTI2NjY2NjYgLyogUFJJTUFSWSAgIC0gbWF4aW11bSBiYXVkIHJhdGUgKFM1MDgpICovCi0jZGVmaW5lIFNFQ19NQVhfQkFVRF9SQVRFX1M1MDgJMjU4MDY0IAkvKiBTRUNPTkRBUlkgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSNkZWZpbmUgUFJJX01BWF9CQVVEX1JBVEVfUzUxNCAgMjc1MDAwMCAvKiBQUklNQVJZICAgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSNkZWZpbmUgU0VDX01BWF9CQVVEX1JBVEVfUzUxNCAgNTE1NjI1ICAvKiBTRUNPTkRBUlkgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSAKLSNkZWZpbmUgTUlOX01PREVNX1RJTUVSCTAJCQkvKiBtaW5pbXVtIG1vZGVtIHN0YXR1cyB0aW1lciAqLwotI2RlZmluZSBNQVhfTU9ERU1fVElNRVIJNTAwMAkJCS8qIG1heGltdW0gbW9kZW0gc3RhdHVzIHRpbWVyICovCi0KLSNkZWZpbmUgU0VDX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAyMDQ4IC8qIFNFQ09OREFSWSAtIG1heCBsZW5ndGggb2YgdGhlIENIRExDIGRhdGEgZmllbGQgKi8KLQotI2RlZmluZSBNSU5fVHhfS1BBTFZfVElNRVIJMAkgIC8qIG1pbmltdW0gdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0jZGVmaW5lIE1BWF9UeF9LUEFMVl9USU1FUgk2MDAwMAkgIC8qIG1heGltdW0gdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0jZGVmaW5lIERFRkFVTFRfVHhfS1BBTFZfVElNRVIJMTAwMDAJICAvKiBkZWZhdWx0IHRyYW5zbWl0IGtlZXBhbGl2ZSB0aW1lciAqLwotCi0jZGVmaW5lIE1JTl9SeF9LUEFMVl9USU1FUgkxMAkgIC8qIG1pbmltdW0gcmVjZWl2ZSBrZWVwYWxpdmUgdGltZXIgKi8KLSNkZWZpbmUgTUFYX1J4X0tQQUxWX1RJTUVSCTYwMDAwCSAgLyogbWF4aW11bSByZWNlaXZlIGtlZXBhbGl2ZSB0aW1lciAqLwotI2RlZmluZSBERUZBVUxUX1J4X0tQQUxWX1RJTUVSCTEwMDAwCSAgLyogZGVmYXVsdCByZWNlaXZlIGtlZXBhbGl2ZSB0aW1lciAqLwotCi0jZGVmaW5lIE1JTl9LUEFMVl9FUlJfVE9MCTEJICAvKiBtaW4ga3BhbHYgZXJyb3IgdG9sZXJhbmNlIGNvdW50ICovCi0jZGVmaW5lIE1BWF9LUEFMVl9FUlJfVE9MCTIwCSAgLyogbWF4IGtwYWx2IGVycm9yIHRvbGVyYW5jZSBjb3VudCAqLwotI2RlZmluZSBERUZBVUxUX0tQQUxWX0VSUl9UT0wJMwkgIC8qIGRlZmF1bHQgdmFsdWUgKi8KLQotI2RlZmluZSBNSU5fU0xBUlBfUkVRX1RJTUVSCTAJICAvKiBtaW4gdHJhbnNtaXQgU0xBUlAgUmVxdWVzdCB0aW1lciAqLwotI2RlZmluZSBNQVhfU0xBUlBfUkVRX1RJTUVSCTYwMDAwCSAgLyogbWF4IHRyYW5zbWl0IFNMQVJQIFJlcXVlc3QgdGltZXIgKi8KLSNkZWZpbmUgREVGQVVMVF9TTEFSUF9SRVFfVElNRVIJMAkgIC8qIGRlZmF1bHQgdmFsdWUgLS0gbm8gU0xBUlAgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgdGhlIFJFQURfQ0hETENfTElOS19TVEFUVVMgY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgQ0hETEMgc3RhdHVzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgQ0hETENfbGlua19zdGF0dXMgUEFDS0VEOwkvKiBDSERMQyBsaW5rIHN0YXR1cyAqLwotCXVuc2lnbmVkIGNoYXIgbm9fRGF0YV9mcm1zX2Zvcl9hcHAgUEFDS0VEOwkvKiBudW1iZXIgb2YgRGF0YSBmcmFtZXMgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyIHJlY2VpdmVyX3N0YXR1cyBQQUNLRUQ7CS8qIGVuYWJsZWQvZGlzYWJsZWQgKi8KLQl1bnNpZ25lZCBjaGFyIFNMQVJQX3N0YXRlIFBBQ0tFRDsJLyogaW50ZXJuYWwgU0xBUlAgc3RhdGUgKi8KLX0gQ0hETENfTElOS19TVEFUVVNfU1RSVUNUOwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdDSERMQ19saW5rX3N0YXR1cycgdmFyaWFibGUgKi8KLSNkZWZpbmUgQ0hETENfTElOS19JTkFDVElWRQkJMHgwMAkvKiB0aGUgQ0hETEMgbGluayBpcyBpbmFjdGl2ZSAqLwotI2RlZmluZSBDSERMQ19MSU5LX0FDVElWRQkJMHgwMQkvKiB0aGUgQ0hETEMgbGluayBpcyBhY3RpdmUgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NIRExDX09QRVJBVElPTkFMX1NUQVRTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0KLQkvKiBEYXRhIGZyYW1lIHRyYW5zbWlzc2lvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2ZyYW1lc19UeF9jb3VudCBQQUNLRUQ7CS8qICMgb2YgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2J5dGVzX1R4X2NvdW50IFBBQ0tFRDsgCS8qICMgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIERhdGFfVHhfdGhyb3VnaHB1dCBQQUNLRUQ7CS8qIHRyYW5zbWl0IHRocm91Z2hwdXQgKi8KLQl1bnNpZ25lZCBsb25nIG5vX21zX2Zvcl9EYXRhX1R4X3RocnVwdXRfY29tcCBQQUNLRUQ7CS8qIG1pbGxpc2Vjb25kIHRpbWUgdXNlZCBmb3IgdGhlIFR4IHRocm91Z2hwdXQgY29tcHV0YXRpb24gKi8KLQl1bnNpZ25lZCBsb25nIFR4X0RhdGFfZGlzY2FyZF9sZ3RoX2Vycl9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBEYXRhIGZyYW1lcyBkaXNjYXJkZWQgKGxlbmd0aCBlcnJvcikgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1R4X3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9UeF9zdGF0MiBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fVHhfc3RhdDMgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQotCS8qIERhdGEgZnJhbWUgcmVjZXB0aW9uIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIERhdGFfZnJhbWVzX1J4X2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19SeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9SeF90aHJvdWdocHV0IFBBQ0tFRDsJLyogcmVjZWl2ZSB0aHJvdWdocHV0ICovCi0JdW5zaWduZWQgbG9uZyBub19tc19mb3JfRGF0YV9SeF90aHJ1cHV0X2NvbXAgUEFDS0VEOwkvKiBtaWxsaXNlY29uZCB0aW1lIHVzZWQgZm9yIHRoZSBSeCB0aHJvdWdocHV0IGNvbXB1dGF0aW9uICovCi0JdW5zaWduZWQgbG9uZyBSeF9EYXRhX2Rpc2NhcmRfc2hvcnRfY291bnQgUEFDS0VEOwkvKiByZWNlaXZlZCBEYXRhIGZyYW1lcyBkaXNjYXJkZWQgKHRvbyBzaG9ydCkgKi8KLQl1bnNpZ25lZCBsb25nIFJ4X0RhdGFfZGlzY2FyZF9sb25nX2NvdW50IFBBQ0tFRDsJLyogcmVjZWl2ZWQgRGF0YSBmcmFtZXMgZGlzY2FyZGVkICh0b28gbG9uZykgKi8KLQl1bnNpZ25lZCBsb25nIFJ4X0RhdGFfZGlzY2FyZF9pbmFjdGl2ZV9jb3VudCBQQUNLRUQ7CS8qIHJlY2VpdmVkIERhdGEgZnJhbWVzIGRpc2NhcmRlZCAobGluayBpbmFjdGl2ZSkgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1J4X3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0KLQkvKiBTTEFSUCBmcmFtZSB0cmFuc21pc3Npb24vcmVjZXB0aW9uIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUV9UeF9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgU0xBUlAgUmVxdWVzdCBmcmFtZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUV9SeF9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgU0xBUlAgUmVxdWVzdCBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUExZX1R4X2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIFNMQVJQIFJlcGx5IGZyYW1lcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgQ0hETENfU0xBUlBfUkVQTFlfUnhfY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgU0xBUlAgUmVwbHkgZnJhbWVzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19TTEFSUF9LUEFMVl9UeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBTTEFSUCBrZWVwYWxpdmUgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19TTEFSUF9LUEFMVl9SeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBTTEFSUCBrZWVwYWxpdmUgZnJhbWVzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9TTEFSUF9zdGF0MSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX1NMQVJQX3N0YXQyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0RQIGZyYW1lIHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGxvbmcgQ0hETENfQ0RQX1R4X2NvdW50IFBBQ0tFRDsJCS8qIG51bWJlciBvZiBDRFAgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19DRFBfUnhfY291bnQgUEFDS0VEOwkJLyogbnVtYmVyIG9mIENEUCBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MyBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NCBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQotCS8qIEluY29taW5nIGZyYW1lcyB3aXRoIGEgZm9ybWF0IGVycm9yIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9mcm1faW5jb21wX0NIRExDX2hkcl9jb3VudCBQQUNLRUQ7CS8qIGZyYW1lcyByZWNlaXZlZCBvZiB3aXRoIGluY29tcGxldGUgQ2lzY28gSERMQyBoZWFkZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9mcm1zX3Rvb19sb25nX2NvdW50IFBBQ0tFRDsJCS8qIGZyYW1lcyByZWNlaXZlZCBvZiBleGNlc3NpdmUgbGVuZ3RoIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ19hZGRyX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBDSERMQyBhZGRyZXNzIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ19jdHJsX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBDSERMQyBjb250cm9sIGZpZWxkIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ190eXBlX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIG9mIGFuIGludmFsaWQgQ0hETEMgZnJhbWUgdHlwZSBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX2ludmFsaWRfY29kZV9jb3VudCBQQUNLRUQ7CS8qIFNMQVJQIGZyYW1lIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBwYWNrZXQgY29kZSAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX1JlcGx5X2JhZF9JUF9hZGRyIFBBQ0tFRDsJLyogU0xBUlAgUmVwbHkgcmVjZWl2ZWQgLSBiYWQgSVAgYWRkcmVzcyAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX1JlcGx5X2JhZF9uZXRtYXNrIFBBQ0tFRDsJLyogU0xBUlAgUmVwbHkgcmVjZWl2ZWQgLSBiYWQgbmV0bWFzayAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIxIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIzIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnI0IFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0hETEMgdGltZW91dC9yZXRyeSBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgc2hvcnQgU0xBUlBfUnhfa2VlcGFsaXZlX1RPX2NvdW50IFBBQ0tFRDsJLyogdGltZW91dCBjb3VudCBmb3IgaW5jb21pbmcgU0xBUlAgZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgU0xBUlBfUmVxdWVzdF9UT19jb3VudCBQQUNLRUQ7CQkvKiB0aW1lb3V0IGNvdW50IGZvciBTTEFSUCBSZXF1ZXN0IGZyYW1lcyAqLwotCXVuc2lnbmVkIGxvbmcgVG9fcmV0cnlfcmVzZXJ2ZWRfc3RhdDEgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyBUb19yZXRyeV9yZXNlcnZlZF9zdGF0MiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIFRvX3JldHJ5X3Jlc2VydmVkX3N0YXQzIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0hETEMgbGluayBhY3RpdmUvaW5hY3RpdmUgYW5kIGxvb3BiYWNrIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBsaW5rX2FjdGl2ZV9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgbGluayB3ZW50IGFjdGl2ZSAqLwotCXVuc2lnbmVkIHNob3J0IGxpbmtfaW5hY3RpdmVfbW9kZW1fY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgbGluayB3ZW50IGluYWN0aXZlIChtb2RlbSBmYWlsdXJlKSAqLwotCXVuc2lnbmVkIHNob3J0IGxpbmtfaW5hY3RpdmVfa2VlcGFsaXZlX2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGxpbmsgd2VudCBpbmFjdGl2ZSAoa2VlcGFsaXZlIGZhaWx1cmUpICovCi0JdW5zaWduZWQgc2hvcnQgbGlua19sb29wZWRfY291bnQgUEFDS0VEOwkJLyogbGluayBsb29wZWQgY291bnQgKi8KLQl1bnNpZ25lZCBsb25nIGxpbmtfc3RhdHVzX3Jlc2VydmVkX3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgbGlua19zdGF0dXNfcmVzZXJ2ZWRfc3RhdDIgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBtaXNjZWxsYW5lb3VzIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDEgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9taXNjX3N0YXQyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWlzY19zdGF0MyBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDQgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0KLX0gQ0hETENfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUOwotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgdXNpbmcgYXBwbGljYXRpb24gaW50ZXJydXB0cwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSBTRVRfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTL1JFQURfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTIGNvbW1hbmQgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIENIRExDX2ludGVycnVwdF90cmlnZ2VycyBQQUNLRUQ7CS8qIENIRExDIGludGVycnVwdCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyIElSUSBQQUNLRUQ7CQkJLyogSVJRIHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfdGltZXIgUEFDS0VEOwkJLyogaW50ZXJydXB0IHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgbWlzY19pbnRlcnJ1cHRfYml0cyBQQUNLRUQ7CS8qIG1pc2NlbGxhbmVvdXMgYml0cyAqLwotfSBDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUOwotCi0vKiAnQ0hETENfaW50ZXJydXB0X3RyaWdnZXJzJyBiaXQgc2V0dGluZ3MgKi8KLSNkZWZpbmUgQVBQX0lOVF9PTl9SWF9GUkFNRQkJMHgwMQkvKiBpbnRlcnJ1cHQgb24gRGF0YSBmcmFtZSByZWNlcHRpb24gKi8KLSNkZWZpbmUgQVBQX0lOVF9PTl9UWF9GUkFNRQkJMHgwMgkvKiBpbnRlcnJ1cHQgd2hlbiBhbiBEYXRhIGZyYW1lIG1heSBiZSB0cmFuc21pdHRlZCAqLwotI2RlZmluZSBBUFBfSU5UX09OX0NPTU1BTkRfQ09NUExFVEUJMHgwNAkvKiBpbnRlcnJ1cHQgd2hlbiBhbiBpbnRlcmZhY2UgY29tbWFuZCBpcyBjb21wbGV0ZSAqLwotI2RlZmluZSBBUFBfSU5UX09OX1RJTUVSCQkweDA4CS8qIGludGVycnVwdCBvbiBhIGRlZmluZWQgbWlsbGlzZWNvbmQgdGltZW91dCAqLwotI2RlZmluZSBBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIAkweDEwCS8qIGludGVycnVwdCBvbiBhIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uICovCi0jZGVmaW5lIEFQUF9JTlRfT05fQ0hETENfRVhDRVBfQ09ORAkweDIwCS8qIGludGVycnVwdCBvbiBhbiBDSERMQyBleGNlcHRpb24gY29uZGl0aW9uICovCi0jZGVmaW5lIEFQUF9JTlRfT05fVFJBQ0VfREFUQV9BVkFJTAkweDgwCS8qIGludGVycnVwdCB3aGVuIHRyYWNlIGRhdGEgaXMgYXZhaWxhYmxlICovCi0KLS8qIGludGVycnVwdCB0eXBlcyBpbmRpY2F0ZWQgYXQgJ2ludGVycnVwdF90eXBlJyBieXRlIG9mIHRoZSBJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUICovCi0jZGVmaW5lIE5PX0FQUF9JTlRTX1BFTkQJCTB4MDAJLyogbm8gaW50ZXJydXBzIGFyZSBwZW5kaW5nICovCi0jZGVmaW5lIFJYX0FQUF9JTlRfUEVORAkJCTB4MDEJLyogYSByZWNlaXZlIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIFRYX0FQUF9JTlRfUEVORAkJCTB4MDIJLyogYSB0cmFuc21pdCBpbnRlcnJ1cHQgaXMgcGVuZGluZyAqLwotI2RlZmluZSBDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORAkweDA0CS8qIGEgJ2NvbW1hbmQgY29tcGxldGUnIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIFRJTUVSX0FQUF9JTlRfUEVORAkJMHgwOAkvKiBhIHRpbWVyIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIEdMT0JBTF9FWENFUF9DT05EX0FQUF9JTlRfUEVORCAJMHgxMAkvKiBhIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIENIRExDX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EIAkweDIwCS8qIGFuIENIRExDIGV4Y2VwdGlvbiBjb25kaXRpb24gaW50ZXJydXB0IGlzIHBlbmRpbmcgKi8KLSNkZWZpbmUgVFJBQ0VfREFUQV9BVkFJTF9BUFBfSU5UX1BFTkQJMHg4MAkvKiBhIHRyYWNlIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0KLQotLyogbW9kZW0gc3RhdHVzIGNoYW5nZXMgKi8KLSNkZWZpbmUgRENEX0hJR0gJCQkweDA4Ci0jZGVmaW5lIENUU19ISUdICQkJMHgyMAotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSBmcmFtZSB0cmFuc21pc3Npb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgZnJhbWUgdHJhbnNtaXQgc3RhdHVzIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBudW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhbnNtaXQgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgdHJhbnNtaXQgZWxlbWVudCB0byBiZSB1c2VkICovCi19IENIRExDX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUOwotCi0vKiB0aGUgRGF0YSBmcmFtZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIG9wcF9mbGFnIFBBQ0tFRDsJCS8qIG9wcCBmbGFnICovCi0JdW5zaWduZWQgc2hvcnQgZnJhbWVfbGVuZ3RoIFBBQ0tFRDsJLyogbGVuZ3RoIG9mIHRoZSBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF8zIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSBmcmFtZSByZWNlcHRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgZnJhbWUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBudW1iZXIgb2YgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudHMgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgcmVjZWl2ZSBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9idWZmZXIgUEFDS0VEOwkJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyICovCi0JdW5zaWduZWQgbG9uZyBlbmRfYWRkcl9SeF9idWZmZXIgUEFDS0VEOwkJLyogZW5kIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZGF0YSBidWZmZXIgKi8KLX0gQ0hETENfUlhfU1RBVFVTX0VMX0NGR19TVFJVQ1Q7Ci0KLS8qIHRoZSBEYXRhIGZyYW1lIHJlY2VpdmUgc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkvKiBvcHAgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGZyYW1lX2xlbmd0aCBQQUNLRUQ7ICAgLyogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBmcmFtZSAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yX2ZsYWcgUEFDS0VEOyAvKiBmcmFtZSBlcnJvcnMgKEhETENfU1RSRUFNSU5HX01PREUpKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgdGltZV9zdGFtcCBQQUNLRUQ7IC8qIHJlY2VpdmUgdGltZSBzdGFtcCAoSERMQ19TVFJFQU1JTkdfTU9ERSkgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZF8xIFBBQ0tFRDsgCS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWRfMiBQQUNLRUQ7IAkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBzaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uIGFyZWEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGdsb2JhbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAJdW5zaWduZWQgY2hhciBnbG9iYWxfc3RhdHVzIFBBQ0tFRDsJCS8qIGdsb2JhbCBzdGF0dXMgKi8KLSAJdW5zaWduZWQgY2hhciBtb2RlbV9zdGF0dXMgUEFDS0VEOwkJLyogY3VycmVudCBtb2RlbSBzdGF0dXMgKi8KLSAJdW5zaWduZWQgY2hhciBnbG9iYWxfZXhjZXBfY29uZGl0aW9ucyBQQUNLRUQ7CS8qIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgZ2xvYl9pbmZvX3Jlc2VydmVkWzVdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIGNvZGVuYW1lWzRdIFBBQ0tFRDsJCS8qIEZpcm13YXJlIG5hbWUgKi8KLQl1bnNpZ25lZCBjaGFyIGNvZGV2ZXJzaW9uWzRdIFBBQ0tFRDsJCS8qIEZpcm13YXJlIHZlcnNpb24gKi8KLX0gR0xPQkFMX0lORk9STUFUSU9OX1NUUlVDVDsKLQotLyogdGhlIENIRExDIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgQ0hETENfc3RhdHVzIFBBQ0tFRDsJCS8qIENIRExDIHN0YXR1cyAqLwotIAl1bnNpZ25lZCBjaGFyIENIRExDX2V4Y2VwX2NvbmRpdGlvbnMgUEFDS0VEOwkvKiBDSERMQyBleGNlcHRpb24gY29uZGl0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgQ0hETENfaW5mb19yZXNlcnZlZFsxNF0gUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBDSERMQ19JTkZPUk1BVElPTl9TVFJVQ1Q7Ci0KLS8qIHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0X3R5cGUgUEFDS0VEOwkJLyogdHlwZSBvZiBpbnRlcnJ1cHQgdHJpZ2dlcmVkICovCi0gCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0X3Blcm1pc3Npb24gUEFDS0VEOwkvKiBpbnRlcnJ1cHQgcGVybWlzc2lvbiBtYXNrICovCi0JdW5zaWduZWQgY2hhciBpbnRfaW5mb19yZXNlcnZlZFsxNF0gUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUOwotCi0vKiB0aGUgUzUwOC9GVDEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gCXVuc2lnbmVkIGNoYXIgcGFyYWxsZWxfcG9ydF9BX2lucHV0IFBBQ0tFRDsJLyogaW5wdXQgLSBwYXJhbGxlbCBwb3J0IEEgKi8KLSAJdW5zaWduZWQgY2hhciBwYXJhbGxlbF9wb3J0X0JfaW5wdXQgUEFDS0VEOwkvKiBpbnB1dCAtIHBhcmFsbGVsIHBvcnQgQiAqLwotCXVuc2lnbmVkIGNoYXIgRlQxX2luZm9fcmVzZXJ2ZWRbMTRdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KLX0gRlQxX0lORk9STUFUSU9OX1NUUlVDVDsKLQotLyogdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlHTE9CQUxfSU5GT1JNQVRJT05fU1RSVUNUIGdsb2JhbF9pbmZvX3N0cnVjdCBQQUNLRUQ7CQkvKiB0aGUgZ2xvYmFsIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotCUNIRExDX0lORk9STUFUSU9OX1NUUlVDVCBDSERMQ19pbmZvX3N0cnVjdCBQQUNLRUQ7CQkvKiB0aGUgQ0hETEMgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi0JSU5URVJSVVBUX0lORk9STUFUSU9OX1NUUlVDVCBpbnRlcnJ1cHRfaW5mb19zdHJ1Y3QgUEFDS0VEOwkvKiB0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotCUZUMV9JTkZPUk1BVElPTl9TVFJVQ1QgRlQxX2luZm9fc3RydWN0IFBBQ0tFRDsJCQkvKiB0aGUgUzUwOC9GVDEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi19IFNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1Q7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICBVRFAgTWFuYWdlbWVudCBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMgCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFRoZSBlbWJlZGRlZCBjb250cm9sIGJsb2NrIGZvciBVRFAgbWdtdCAKLSAgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBtYWlsYm94IHN0cnVjdHVyZSwgd2l0aG91dCB0aGUgbGFyZ2UgZGF0YSBmaWVsZCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgIG9wcF9mbGFnIFBBQ0tFRDsgICAgICAgICAgICAgICAgICAvKiB0aGUgb3BwIGZsYWcgKi8KLSAgICAgICAgdW5zaWduZWQgY2hhciAgY29tbWFuZCBQQUNLRUQ7ICAgICAgICAgICAgICAgICAgIC8qIHRoZSB1c2VyIGNvbW1hbmQgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCBQQUNLRUQ7ICAgICAgICAgICAgIC8qIHRoZSBkYXRhIGxlbmd0aCAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICByZXR1cm5fY29kZSBQQUNLRUQ7ICAgICAgICAgICAgICAgLyogdGhlIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciAgTUJfcmVzZXJ2ZWRbTlVNQkVSX01CX1JFU0VSVkVEX0JZVEVTXSBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotfSBjYmxvY2tfdDsKLQotCi0vKiBVRFAgbWFuYWdlbWVudCBwYWNrZXQgbGF5b3V0IChkYXRhIGFyZWEgb2YgaXAgcGFja2V0KSAqLwotLyoKLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCQlzaWduYXR1cmVbOF0JUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJCXJlcXVlc3RfcmVwbHkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJCWlkCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcgkJcmVzZXJ2ZWRbNl0JUEFDS0VEOwotCWNibG9ja190CQljYmxvY2sJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCQludW1fZnJhbWVzCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCQlpc21vcmVkYXRhCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIAkJZGF0YVtTSVpFT0ZfTUJfREFUQV9CRlJdIAlQQUNLRUQ7Ci19IHVkcF9tYW5hZ2VtZW50X3BhY2tldF90OwotCi0qLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgkJbnVtX2ZyYW1lcwlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcgkJaXNtb3JlZGF0YQlQQUNLRUQ7Ci19IHRyYWNlX2luZm9fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWlwX3BrdF90IAkJaXBfcGt0CQlQQUNLRUQ7Ci0JdWRwX3BrdF90CQl1ZHBfcGt0CQlQQUNLRUQ7Ci0Jd3BfbWdtdF90CQl3cF9tZ210CQlQQUNLRUQ7Ci0JY2Jsb2NrX3QgICAgICAgICAgICAgICAgY2Jsb2NrICAgICAgICAgIFBBQ0tFRDsKLQl0cmFjZV9pbmZvX3QgICAgICAgCXRyYWNlX2luZm8gICAgICBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgZGF0YVtTSVpFT0ZfTUJfREFUQV9CRlJdICAgICAgUEFDS0VEOwotfSBjaGRsY191ZHBfcGt0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGZ0MV9leGVjX2NtZHsKLQl1bnNpZ25lZCBjaGFyICBjb21tYW5kIFBBQ0tFRDsgICAgICAgICAgICAgICAgICAgLyogdGhlIHVzZXIgY29tbWFuZCAqLwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBidWZmZXJfbGVuZ3RoIFBBQ0tFRDsgICAgICAgICAgICAgLyogdGhlIGRhdGEgbGVuZ3RoICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgIHJldHVybl9jb2RlIFBBQ0tFRDsgICAgICAgICAgICAgICAvKiB0aGUgcmV0dXJuIGNvZGUgKi8KLQl1bnNpZ25lZCBjaGFyICBNQl9yZXNlcnZlZFtOVU1CRVJfTUJfUkVTRVJWRURfQllURVNdIFBBQ0tFRDsKLX0gZnQxX2V4ZWNfY21kX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyICBvcHBfZmxhZyAJCQlQQUNLRUQ7Ci0JZnQxX2V4ZWNfY21kX3QgY21kCQkJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICBkYXRhW1NJWkVPRl9NQl9EQVRBX0JGUl0gICAgICAJUEFDS0VEOwotfSBmdDFfZXhlY190OwotCi0jZGVmaW5lIFVEUE1HTVRfU0lHTkFUVVJFCSJDVFBJUEVBQiIKLQotCi0vKiBVRFAvSVAgcGFja2V0IChmb3IgVURQIG1hbmFnZW1lbnQpIGxheW91dCAqLwotLyoKLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzJdCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAlpcF9sZW5ndGgJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWQyWzRdCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWlwX3R0bAkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJaXBfcHJvdG9jb2wJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CWlwX2NoZWNrc3VtCVBBQ0tFRDsKLQl1bnNpZ25lZCBsb25nCWlwX3NyY19hZGRyZXNzCVBBQ0tFRDsKLQl1bnNpZ25lZCBsb25nCWlwX2RzdF9hZGRyZXNzCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl1ZHBfc3JjX3BvcnQJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXVkcF9kc3RfcG9ydAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdWRwX2xlbmd0aAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdWRwX2NoZWNrc3VtCVBBQ0tFRDsKLQl1ZHBfbWFuYWdlbWVudF9wYWNrZXRfdCB1bV9wYWNrZXQgUEFDS0VEOwotfSBpcF9wYWNrZXRfdDsKLSovCi0KLS8qIHZhbGlkIGlwX3Byb3RvY29sIGZvciBVRFAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBVRFBNR01UX1VEUF9QUk9UT0NPTCAweDExCi0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIJc3RhdHVzCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcglkYXRhX2F2YWlsCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAlyZWFsX2xlbmd0aAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdGltZV9zdGFtcAlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcglkYXRhWzFdCQlQQUNLRUQ7Ci19IHRyYWNlX3BrdF90OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgllcnJvcl9mbGFnCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl0aW1lX3N0YW1wCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzEzXQlQQUNLRUQ7Ci19IGFwaV9yeF9oZHJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICBhcGlfcnhfaGRyX3QJYXBpX3J4X2hkciAgICAgIFBBQ0tFRDsKLSAgICAgICAgdm9pZCAqICAgCWRhdGEgICAgCVBBQ0tFRDsKLX0gYXBpX3J4X2VsZW1lbnRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgCWF0dHIJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICAJcmVzZXJ2ZWRbMTVdCVBBQ0tFRDsKLX0gYXBpX3R4X2hkcl90OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JYXBpX3R4X2hkcl90IAlhcGlfdHhfaGRyCVBBQ0tFRDsKLQl2b2lkICoJCWRhdGEJCVBBQ0tFRDsKLX0gYXBpX3R4X2VsZW1lbnRfdDsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICBDb25zdGFudHMgZm9yIHRoZSBTRVRfRlQxX0NPTkZJR1VSQVRJT04vUkVBRF9GVDFfQ09ORklHVVJBVElPTiBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBGVDEgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBmcmFtaW5nX21vZGU7Ci0JdW5zaWduZWQgc2hvcnQgZW5jb2RpbmdfbW9kZTsKLQl1bnNpZ25lZCBzaG9ydCBsaW5lX2J1aWxkX291dDsKLQl1bnNpZ25lZCBzaG9ydCBjaGFubmVsX2Jhc2U7Ci0JdW5zaWduZWQgc2hvcnQgYmF1ZF9yYXRlX2ticHM7CQkJCQkvKiB0aGUgYmF1ZCByYXRlIChpbiBrYnBzKSAqLwkKLQl1bnNpZ25lZCBzaG9ydCBjbG9ja19tb2RlOwotfSBmdDFfY29uZmlnX3Q7Ci0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2ZyYW1pbmdfbW9kZScgKi8KLSNkZWZpbmUgRVNGX0ZSQU1JTkcgCTB4MDAJLyogRVNGIGZyYW1pbmcgKi8KLSNkZWZpbmUgRDRfRlJBTUlORyAgCTB4MDEJLyogRDQgZnJhbWluZyAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdlbmNvZGluZ19tb2RlJyAqLwotI2RlZmluZSBCOFpTX0VOQ09ESU5HIAkweDAwCS8qIEI4WlMgZW5jb2RpbmcgKi8KLSNkZWZpbmUgQU1JX0VOQ09ESU5HCTB4MDEJLyogQU1JIGVuY29kaW5nICovCi0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2xpbmVfYnVpbGRfb3V0JyAqLwotI2RlZmluZSBMTl9CTERfQ1NVXzBkQl9EU1gxXzBfdG9fMTMzCTB4MDAJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKDBkYikgb3IgRFNYLTEgKDAtMTMzZnQpICovCi0jZGVmaW5lIExOX0JMRF9EU1gxXzEzM190b18yNjYJCTB4MDEJLyogc2V0IGJ1aWxkIG91dCBEU1gtMSAoMTMzLTI2NmZ0KSAqLwotI2RlZmluZSBMTl9CTERfRFNYMV8yNjZfdG9fMzk5CQkweDAyCS8qIHNldCBidWlsZCBvdXQgRFNYLTEgKDI2Ni0zOTlmdCkgKi8KLSNkZWZpbmUgTE5fQkxEX0RTWDFfMzk5X3RvXzUzMwkJMHgwMwkvKiBzZXQgYnVpbGQgb3V0IERTWC0xICgzOTktNTMzZnQpICovCi0jZGVmaW5lIExOX0JMRF9EU1gxXzUzM190b182NTUJCTB4MDQJLyogc2V0IGJ1aWxkIG91dCBEU1gtMSAoNTMzLTY1NWZ0KSAqLwotI2RlZmluZSBMTl9CTERfQ1NVX05FR183ZEIJCTB4MDUJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKC03LjVkYikgKi8KLSNkZWZpbmUgTE5fQkxEX0NTVV9ORUdfMTVkQgkJMHgwNgkvKiBzZXQgYnVpbGQgb3V0IHRvIENTVSAoLTE1ZGIpICovCi0jZGVmaW5lIExOX0JMRF9DU1VfTkVHXzIyZEIJCTB4MDcJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKC0yMi41ZGIpICovCi0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2NoYW5uZWxfYmFzZScgKi8KLSNkZWZpbmUgTUlOX0NIQU5ORUxfQkFTRV9WQUxVRQkJMQkJLyogdGhlIG1pbmltdW0gcGVybWl0dGVkIGNoYW5uZWwgYmFzZSB2YWx1ZSAqLwotI2RlZmluZSBNQVhfQ0hBTk5FTF9CQVNFX1ZBTFVFCQkyNAkJLyogdGhlIG1heGltdW0gcGVybWl0dGVkIGNoYW5uZWwgYmFzZSB2YWx1ZSAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdiYXVkX3JhdGVfa2JwcycgKi8KLSNkZWZpbmUgTUlOX0JBVURfUkFURV9LQlBTCQkwCQkvKiB0aGUgbWluaW11bSBwZXJtaXR0ZWQgYmF1ZCByYXRlIChrYnBzKSAqLwotI2RlZmluZSBNQVhfQkFVRF9SQVRFX0tCUFMgCQkxNTM2CS8qIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBiYXVkIHJhdGUgKGticHMpICovCi0jZGVmaW5lIEJBVURfUkFURV9GVDFfQVVUT19DT05GSUcJMHhGRkZGIC8qIHRoZSBiYXVkIHJhdGUgdXNlZCB0byB0cmlnZ2VyIGFuIGF1dG9tYXRpYyBGVDEgY29uZmlndXJhdGlvbiAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdjbG9ja19tb2RlJyAqLwotI2RlZmluZSBDTE9DS19NT0RFX05PUk1BTAkJMHgwMAkvKiBjbG9jayBtb2RlIHNldCB0byBub3JtYWwgKHNsYXZlKSAqLwotI2RlZmluZSBDTE9DS19NT0RFX01BU1RFUgkJMHgwMQkvKiBjbG9jayBtb2RlIHNldCB0byBtYXN0ZXIgKi8KLQotCi0jZGVmaW5lIEJBVURfUkFURV9GVDFfQVVUT19DT05GSUcgICAJMHhGRkZGCi0jZGVmaW5lIEFVVE9fRlQxX0NPTkZJR19OT1RfQ09NUExFVEUJMHgwOAotI2RlZmluZSBBVVRPX0ZUMV9DRkdfRkFJTF9PUF9NT0RFCTB4MEMKLSNkZWZpbmUgQVVUT19GVDFfQ0ZHX0ZBSUxfSU5WQUxJRF9MSU5FIAkweDBECi0KLSAKLSNpZmRlZgkJX01TQ18KLSMgIHByYWdtYQlwYWNrKCkKLSNlbmRpZgotI2VuZGlmCS8qIF9TRExBX0NIRExDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9wcHAuaCBiL2luY2x1ZGUvbGludXgvc2RsYV9wcHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzOTIzMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFfcHBwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfcHBwLmgJU2FuZ29tYSBQUFAgZmlybXdhcmUgQVBJIGRlZmluaXRpb25zLgotKgotKiBBdXRob3I6CU5lbmFkIENvcmJpYwk8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0xOTk3IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRmViIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgdjIuMS4yCi0qIEphbiAwNiwgMTk5NwlHZW5lIEtvemluCXYyLjAKLSogQXByIDExLCAxOTk2CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBX1BQUF9ICi0jZGVmaW5lCV9TRExBX1BQUF9ICi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTm90ZXM6Ci0gKiAtLS0tLS0KLSAqIDEuIEFsbCBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gdGhpcyBmaWxlIGFyZSBieXRlLWFsaW5lZC4gIAotICoKLSAqCUNvbXBpbGVyCVBsYXRmb3JtCi0gKgktLS0tLS0tLQktLS0tLS0tLQotICoJR05VIEMJCUxpbnV4CQkKLSAqLwotCi0jaWZuZGVmCVBBQ0tFRAotIyAgICBkZWZpbmUJUEFDS0VECV9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZW5kaWYJLyogUEFDS0VEICovCi0KLS8qIEFkYXB0ZXIgbWVtb3J5IGxheW91dCBhbmQgaW1wb3J0YW50IGNvbnN0YW50cyAqLwotI2RlZmluZQlQUFA1MDhfTUJfVkVDVAkweEUwMDAJLyogbWFpbGJveCB3aW5kb3cgdmVjdG9yICovCi0jZGVmaW5lCVBQUDUwOF9NQl9PRkZTCTAJCS8qIG1haWxib3ggb2Zmc2V0ICovCi0jZGVmaW5lCVBQUDUwOF9GTEdfT0ZGUwkweDEwMDAJLyogc3RhdHVzIGZsYWdzIG9mZnNldCAqLwotI2RlZmluZQlQUFA1MDhfQlVGX09GRlMJMHgxMTAwCS8qIGJ1ZmZlciBpbmZvIGJsb2NrIG9mZnNldCAqLwotI2RlZmluZSBQUFA1MTRfTUJfT0ZGUyAgMHhFMDAwICAvKiBtYWlsYm94IG9mZnNldCAqLwotI2RlZmluZSBQUFA1MTRfRkxHX09GRlMgMHhGMDAwICAvKiBzdGF0dXMgZmxhZ3Mgb2Zmc2V0ICovCi0jZGVmaW5lIFBQUDUxNF9CVUZfT0ZGUyAweEYxMDAgIC8qIGJ1ZmZlciBpbmZvIGJsb2NrIG9mZnNldCAqLwotCi0jZGVmaW5lIFBQUF9NQVhfREFUQQkxMDA4CS8qIGNvbW1hbmQgYmxvY2sgZGF0YSBidWZmZXIgbGVuZ3RoICovCi0KLS8qKioqKiogRGF0YSBTdHJ1Y3R1cmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBQUCBDb21tYW5kIEJsb2NrLgotICovCi10eXBlZGVmIHN0cnVjdCBwcHBfY21kewotCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiBsZW5ndGggb2YgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwkvKiByZXR1cm4gY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgIHJzcnZbMTFdCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KLX0gcHBwX2NtZF90OwotCi10eXBlZGVmIHN0cnVjdCBjYmxvY2t7Ci0JdW5zaWduZWQgY2hhciAgb3BwX2ZsYWcJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiBsZW5ndGggb2YgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwkvKiByZXR1cm4gY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgIHJzcnZbMTFdCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KLX0gY2Jsb2NrX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBwcF91ZHBfcGt0ewotCWlwX3BrdF90IAlpcF9wa3QJUEFDS0VEOwotCXVkcF9wa3RfdAl1ZHBfcGt0CVBBQ0tFRDsKLQl3cF9tZ210X3QJd3BfbWdtdCBQQUNLRUQ7Ci0JY2Jsb2NrX3QJY2Jsb2NrICBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgIGRhdGFbTUFYX0xHVEhfVURQX01HTlRfUEtUXSBQQUNLRUQ7Ci19IHBwcF91ZHBfcGt0X3Q7CQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcglzdGF0dXMJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWRhdGFfYXZhaWwJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXJlYWxfbGVuZ3RoCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl0aW1lX3N0YW1wCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWRhdGFbMV0JCVBBQ0tFRDsKLX0gdHJhY2VfcGt0X3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgCW9wcF9mbGFnCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXRyYWNlX3R5cGUJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IAl0cmFjZV9sZW5ndGgJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IAl0cmFjZV9kYXRhX3B0cglQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgIHRyYWNlX3RpbWVfc3RhbXAgUEFDS0VEOwotfSB0cmFjZV9lbGVtZW50X3Q7Ci0KLS8qICdjb21tYW5kJyBmaWVsZCBkZWZpbmVzICovCi0jZGVmaW5lIFBQUF9SRUFEX0NPREVfVkVSU0lPTgkweDEwCS8qIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBQX1NFVF9DT05GSUcJCTB4MDUKLSNkZWZpbmUgUFBQX1JFQURfQ09ORklHCQkweDA2Ci0jZGVmaW5lCVBQUF9TRVRfSU5UUl9GTEFHUwkweDIwCi0jZGVmaW5lCVBQUF9SRUFEX0lOVFJfRkxBR1MJMHgyMQotI2RlZmluZQlQUFBfU0VUX0lOQk9VTkRfQVVUSAkweDMwCi0jZGVmaW5lCVBQUF9TRVRfT1VUQk9VTkRfQVVUSAkweDMxCi0jZGVmaW5lCVBQUF9HRVRfQ09OTkVDVElPTl9JTkZPCTB4MzIKLQotI2RlZmluZSBQUFBfQ09NTV9FTkFCTEUJCTB4MDMJLyogb3BlcmF0aW9uYWwgY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBQX0NPTU1fRElTQUJMRQkweDA0Ci0jZGVmaW5lCVBQUF9TRU5EX1NJR05fRlJBTUUJMHgyMwotI2RlZmluZQlQUFBfUkVBRF9TSUdOX1JFU1BPTlNFCTB4MjQKLSNkZWZpbmUJUFBQX0RBVEFMSU5FX01PTklUT1IJMHgzMwotCi0jZGVmaW5lIFBQUF9SRUFEX1NUQVRJU1RJQ1MJMHgwNwkvKiBzdGF0aXN0aWNzIGNvbW1hbmRzICovCi0jZGVmaW5lIFBQUF9GTFVTSF9TVEFUSVNUSUNTCTB4MDgKLSNkZWZpbmUgUFBQX1JFQURfRVJST1JfU1RBVFMJMHgwOQotI2RlZmluZSBQUFBfRkxVU0hfRVJST1JfU1RBVFMJMHgwQQotI2RlZmluZSBQUFBfUkVBRF9QQUNLRVRfU1RBVFMJMHgxMgotI2RlZmluZSBQUFBfRkxVU0hfUEFDS0VUX1NUQVRTCTB4MTMKLSNkZWZpbmUgUFBQX1JFQURfTENQX1NUQVRTCTB4MTQKLSNkZWZpbmUgUFBQX0ZMVVNIX0xDUF9TVEFUUwkweDE1Ci0jZGVmaW5lIFBQUF9SRUFEX0xQQktfU1RBVFMJMHgxNgotI2RlZmluZSBQUFBfRkxVU0hfTFBCS19TVEFUUwkweDE3Ci0jZGVmaW5lIFBQUF9SRUFEX0lQQ1BfU1RBVFMJMHgxOAotI2RlZmluZSBQUFBfRkxVU0hfSVBDUF9TVEFUUwkweDE5Ci0jZGVmaW5lIFBQUF9SRUFEX0lQWENQX1NUQVRTCTB4MUEKLSNkZWZpbmUgUFBQX0ZMVVNIX0lQWENQX1NUQVRTCTB4MUIKLSNkZWZpbmUgUFBQX1JFQURfUEFQX1NUQVRTCTB4MUMKLSNkZWZpbmUgUFBQX0ZMVVNIX1BBUF9TVEFUUwkweDFECi0jZGVmaW5lIFBQUF9SRUFEX0NIQVBfU1RBVFMJMHgxRQotI2RlZmluZSBQUFBfRkxVU0hfQ0hBUF9TVEFUUwkweDFGCi0KLS8qICdyZXN1bHQnIGZpZWxkIGRlZmluZXMgKi8KLSNkZWZpbmUgUFBQUkVTX09LCQkweDAwCS8qIGNvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5ICovCi0jZGVmaW5lCVBQUFJFU19JTlZBTElEX1NUQVRFCTB4MDkJLyogaW52YWxpZCBjb21tYW5kIGluIHRoaXMgY29udGV4dCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBQUCBNYWlsYm94LgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgUFBQPz8/X01CX09GRlMgaW50byBQUFA/Pz9fTUJfVkVDVAotICovCi10eXBlZGVmIHN0cnVjdCBwcHBfbWJveAotewotCXVuc2lnbmVkIGNoYXIgZmxhZwlQQUNLRUQ7CS8qIDAwaDogY29tbWFuZCBleGVjdXRpb24gZmxhZyAqLwotCXBwcF9jbWRfdCAgICAgY21kCVBBQ0tFRDsgLyogMDFoOiBjb21tYW5kIGJsb2NrICovCi0JdW5zaWduZWQgY2hhciBkYXRhWzFdCVBBQ0tFRDsJLyogMTBoOiB2YXJpYWJsZSBsZW5ndGggZGF0YSBidWZmZXIgKi8KLX0gcHBwX21ib3hfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQUFAgU3RhdHVzIEZsYWdzLgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgUFBQPz8/X0ZMR19PRkZTIGludG8KLSAqCVBQUD8/P19NQl9WRUNULgotICovCi10eXBlZGVmIHN0cnVjdAlwcHBfZmxhZ3MKLXsKLQl1bnNpZ25lZCBjaGFyIGlmbGFnCQlQQUNLRUQ7CS8qIDAwOiBpbnRlcnJ1cHQgZmxhZyAqLwotCXVuc2lnbmVkIGNoYXIgaW1hc2sJCVBBQ0tFRDsJLyogMDE6IGludGVycnVwdCBtYXNrICovCi0JdW5zaWduZWQgY2hhciByZXNydgkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgbXN0YXR1cwkJUEFDS0VEOwkvKiAwMzogbW9kZW0gc3RhdHVzICovCi0JdW5zaWduZWQgY2hhciBsY3Bfc3RhdGUJCVBBQ0tFRDsgLyogMDQ6IExDUCBzdGF0ZSAqLwotCXVuc2lnbmVkIGNoYXIgcHBwX3BoYXNlCQlQQUNLRUQ7CS8qIDA1OiBQUFAgcGhhc2UgKi8KLQl1bnNpZ25lZCBjaGFyIGlwX3N0YXRlCQlQQUNLRUQ7IC8qIDA2OiBJUENQIHN0YXRlICovCi0JdW5zaWduZWQgY2hhciBpcHhfc3RhdGUJCVBBQ0tFRDsgLyogMDc6IElQWENQIHN0YXRlICovCi0JdW5zaWduZWQgY2hhciBwYXBfc3RhdGUJCVBBQ0tFRDsgLyogMDg6IFBBUCBzdGF0ZSAqLwotCXVuc2lnbmVkIGNoYXIgY2hhcF9zdGF0ZQlQQUNLRUQ7IC8qIDA5OiBDSEFQIHN0YXRlICovCi0JdW5zaWduZWQgc2hvcnQgZGlzY19jYXVzZQlQQUNLRUQ7CS8qIDBBOiBkaXNjb25uZWN0aW9uIGNhdXNlICovCi19IHBwcF9mbGFnc190OwotCi0vKiAnaWZsYWcnIGRlZmluZXMgKi8KLSNkZWZpbmUJUFBQX0lOVFJfUlhSRFkJCTB4MDEJLyogUnggcmVhZHkgKi8KLSNkZWZpbmUJUFBQX0lOVFJfVFhSRFkJCTB4MDIJLyogVHggcmVhZHkgKi8KLSNkZWZpbmUJUFBQX0lOVFJfTU9ERU0JCTB4MDQJLyogbW9kZW0gc3RhdHVzIGNoYW5nZSAoRENELCBDVFMpICovCi0jZGVmaW5lCVBQUF9JTlRSX0NNRAkJMHgwOAkvKiBpbnRlcmZhY2UgY29tbWFuZCBjb21wbGV0ZWQgKi8KLSNkZWZpbmUJUFBQX0lOVFJfRElTQwkJMHgxMAkvKiBkYXRhIGxpbmsgZGlzY29ubmVjdGVkICovCi0jZGVmaW5lCVBQUF9JTlRSX09QRU4JCTB4MjAJLyogZGF0YSBsaW5rIG9wZW4gKi8KLSNkZWZpbmUJUFBQX0lOVFJfRFJPUF9EVFIJMHg0MAkvKiBEVFIgZHJvcCB0aW1lb3V0IGV4cGlyZWQgKi8KLSNkZWZpbmUgUFBQX0lOVFJfVElNRVIgICAgICAgICAgMHg4MCAgICAvKiB0aW1lciBpbnRlcnJ1cHQgKi8KLQotCi0vKiAnbXN0YXR1cycgZGVmaW5lcyAqLwotI2RlZmluZQlQUFBfTURNX0RDRAkJMHgwOAkvKiBtZG1fc3RhdHVzOiBEQ0QgKi8KLSNkZWZpbmUJUFBQX01ETV9DVFMJCTB4MjAJLyogbWRtX3N0YXR1czogQ1RTICovCi0KLS8qICdkaXNjX2NhdXNlJyBkZWZpbmVzICovCi0jZGVmaW5lIFBQUF9MT0NBTF9URVJNSU5BVElPTiAgIDB4MDAwMQkvKiBMb2NhbCBSZXF1ZXN0IGJ5IFBQUCB0ZXJtaW5hdGlvbiBwaGFzZSAqLwotI2RlZmluZSBQUFBfRENEX0NUU19EUk9QICAgICAgICAweDAwMDIgIC8qIERDRCBhbmQvb3IgQ1RTIGRyb3BwZWQuIExpbmsgZG93biAqLwotI2RlZmluZSBQUFBfUkVNT1RFX1RFUk1JTkFUSU9OCTB4MDgwMAkvKiBSZW1vdGUgUmVxdWVzdCBieSBQUFAgdGVybWluYXRpb24gcGhhc2UgKi8KLQotLyogJ21pc2NfY29uZmlnX2JpdHMnIGRlZmluZXMgKi8KLSNkZWZpbmUgRE9OVF9SRV9UWF9BQk9SVEVEX0lfRlJBTUVTIAkweDAxCi0jZGVmaW5lIFRYX0ZSTV9CWVRFX0NPVU5UX1NUQVRTICAgICAgICAgMHgwMgotI2RlZmluZSBSWF9GUk1fQllURV9DT1VOVF9TVEFUUyAgICAgICAgIDB4MDQKLSNkZWZpbmUgVElNRV9TVEFNUF9JTl9SWF9GUkFNRVMgICAgICAgICAweDA4Ci0jZGVmaW5lIE5PTl9TVERfQURQVFJfRlJFUSAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBJTlRFUkZBQ0VfTEVWRUxfUlMyMzIgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQVVUT19MSU5LX1JFQ09WRVJZICAgICAgICAgICAgICAweDEwMAotI2RlZmluZSBET05UX1RFUk1JTkFURV9MTktfTUFYX0NPTkZJRyAgIDB4MjAwICAgICAgICAgICAgICAgICAgICAKLQotLyogJ2F1dGhlbnRpY2F0aW9uIG9wdGlvbnMnIGRlZmluZXMgKi8KLSNkZWZpbmUgTk9fQVVUSEVOVElDQVRJT04JMHgwMAotI2RlZmluZSBJTkJPVU5EX0FVVEgJCTB4ODAKLSNkZWZpbmUgUEFQX0FVVEgJCTB4MDEKLSNkZWZpbmUgQ0hBUF9BVVRICQkweDAyCQkKLQotLyogJ2lwIG9wdGlvbnMnIGRlZmluZXMgKi8KLSNkZWZpbmUgTF9BTkRfUl9JUF9OT19BU1NJRwkweDAwCi0jZGVmaW5lIExfSVBfTE9DQUxfQVNTSUcgICAgCTB4MDEKLSNkZWZpbmUgTF9JUF9SRU1PVEVfQVNTSUcgICAJMHgwMgotI2RlZmluZSBSX0lQX0xPQ0FMX0FTU0lHICAgICAgICAweDA0Ci0jZGVmaW5lIFJfSVBfUkVNT1RFX0FTU0lHICAgICAgIDB4MDgKLSNkZWZpbmUgRU5BQkxFX0lQCQkweDgwCi0KLS8qICdpcHggb3B0aW9ucycgZGVmaW5lcyAqLwotI2RlZmluZSBST1VUSU5HX1BST1RfREVGQVVMVCAgICAweDIwCi0jZGVmaW5lIEVOQUJMRV9JUFgJCTB4ODAKLSNkZWZpbmUgRElTQUJMRV9JUFgJCTB4MDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQUFAgQnVmZmVyIEluZm8uCi0gKglUaGlzIHN0cnVjdHVyZSBpcyBsb2NhdGVkIGF0IG9mZnNldCBQUFA1MDhfQlVGX09GRlMgaW50bwotICoJUFBQNTA4X01CX1ZFQ1QuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcDUwOF9idWZfaW5mbwotewotCXVuc2lnbmVkIHNob3J0IHR4Yl9udW0JUEFDS0VEOwkvKiAwMDogbnVtYmVyIG9mIHRyYW5zbWl0IGJ1ZmZlcnMgKi8KLQl1bnNpZ25lZCBsb25nICB0eGJfcHRyCVBBQ0tFRDsJLyogMDI6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBjdGwuICovCi0JdW5zaWduZWQgbG9uZyAgdHhiX254dCAgUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgIHJzcnYxWzIyXSBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgcnhiX251bQlQQUNLRUQ7CS8qIDIwOiBudW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJzICovCi0JdW5zaWduZWQgbG9uZyAgcnhiX3B0cglQQUNLRUQ7CS8qIDIyOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgY3RsLiAqLwotCXVuc2lnbmVkIGxvbmcgIHJ4YjFfcHRyCVBBQ0tFRDsJLyogMjY6IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ1Zi5jdGwuICovCi0JdW5zaWduZWQgbG9uZyAgcnhiX2Jhc2UJUEFDS0VEOwkvKiAyQTogcG9pbnRlciB0byB0aGUgYnVmZmVyIGJhc2UgKi8KLQl1bnNpZ25lZCBjaGFyICByc3J2MlsyXQlQQUNLRUQ7Ci0JdW5zaWduZWQgbG9uZyAgcnhiX2VuZAlQQUNLRUQ7CS8qIDMwOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgZW5kICovCi19IHBwcDUwOF9idWZfaW5mb190OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRyYW5zbWl0L1JlY2VpdmUgQnVmZmVyIENvbnRyb2wgQmxvY2suCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9idWZfY3RsCi17Ci0JdW5zaWduZWQgY2hhciAgZmxhZwkJUEFDS0VEOwkvKiAwMDogJ2J1ZmZlciByZWFkeScgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGxlbmd0aAkJUEFDS0VEOwkvKiAwMTogbGVuZ3RoIG9mIGRhdGEgKi8KLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDFbMV0JUEFDS0VEOwkvKiAwMzogKi8KLQl1bnNpZ25lZCBjaGFyICBwcm90bwkJUEFDS0VEOwkvKiAwNDogcHJvdG9jb2wgKi8KLQl1bnNpZ25lZCBzaG9ydCB0aW1lc3RhbXAJUEFDS0VEOwkvKiAwNTogdGltZSBzdGFtcCAoUnggb25seSkgKi8KLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDJbNV0JUEFDS0VEOwkvKiAwNzogKi8KLQl1bmlvbgotCXsKLQkJdW5zaWduZWQgc2hvcnQgb19wWzJdOwkvKiAxQzogYnVmZmVyIG9mZnNldCAmIHBhZ2UgKFM1MDIpICovCi0JCXVuc2lnbmVkIGxvbmcgIHB0cjsJLyogMUM6IGJ1ZmZlciBwb2ludGVyIChTNTA4KSAqLwotCX0gYnVmCQkJCVBBQ0tFRDsKLX0gcHBwX2J1Zl9jdGxfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTNTA4IEFkYXB0ZXIgQ29uZmlndXJhdGlvbiBCbG9jayAocGFzc2VkIHRvIHRoZSBQUFBfU0VUX0NPTkZJRyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwNTA4X2NvbmYKLXsKLQl1bnNpZ25lZCBsb25nICBsaW5lX3NwZWVkCVBBQ0tFRDsJLyogMDA6IGJhdWQgcmF0ZSwgYnBzICovCi0JdW5zaWduZWQgc2hvcnQgdHhidWZfcGVyY2VudAlQQUNLRUQ7CS8qIDA0OiAlIG9mIFR4IGJ1ZmZlciAqLwotCXVuc2lnbmVkIHNob3J0IGNvbmZfZmxhZ3MJUEFDS0VEOwkvKiAwNjogY29uZmlndXJhdGlvbiBiaXRzICovCi0JdW5zaWduZWQgc2hvcnQgbXR1X2xvY2FsCVBBQ0tFRDsJLyogMDg6IGxvY2FsIE1UVSAqLwotCXVuc2lnbmVkIHNob3J0IG10dV9yZW1vdGUJUEFDS0VEOwkvKiAwQTogcmVtb3RlIE1UVSAqLwotCXVuc2lnbmVkIHNob3J0IHJlc3RhcnRfdG1yCVBBQ0tFRDsJLyogMEM6IHJlc3RhcnQgdGltZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBhdXRoX3JzcnRfdG1yCVBBQ0tFRDsJLyogMEU6IGF1dGhlbnRpY2F0aW9uIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgYXV0aF93YWl0X3RtcglQQUNLRUQ7CS8qIDEwOiBhdXRoZW50aWNhdGlvbiB0aW1lciAqLwotCXVuc2lnbmVkIHNob3J0IG1kbV9mYWlsX3RtcglQQUNLRUQ7CS8qIDEyOiBtb2RlbSBmYWlsdXJlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgZHRyX2Ryb3BfdG1yCVBBQ0tFRDsJLyogMTQ6IERUUiBkcm9wIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgY29ubmVjdF90bW91dAlQQUNLRUQ7CS8qIDE2OiBjb25uZWN0aW9uIHRpbWVvdXQgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb25mX3JldHJ5CVBBQ0tFRDsJLyogMTg6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCB0ZXJtX3JldHJ5CVBBQ0tFRDsJLyogMUE6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCBmYWlsX3JldHJ5CVBBQ0tFRDsJLyogMUM6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCBhdXRoX3JldHJ5CVBBQ0tFRDsJLyogMUU6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBjaGFyICBhdXRoX29wdGlvbnMJUEFDS0VEOwkvKiAyMDogYXV0aGVudGljYXRpb24gb3B0LiAqLwotCXVuc2lnbmVkIGNoYXIgIGlwX29wdGlvbnMJUEFDS0VEOwkvKiAyMTogSVAgb3B0aW9ucyAqLwotCXVuc2lnbmVkIGxvbmcgIGlwX2xvY2FsCQlQQUNLRUQ7CS8qIDIyOiBsb2NhbCBJUCBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZyAgaXBfcmVtb3RlCVBBQ0tFRDsJLyogMjY6IHJlbW90ZSBJUCBhZGRyZXNzICovCi0JdW5zaWduZWQgY2hhciAgaXB4X29wdGlvbnMJUEFDS0VEOwkvKiAyQTogSVBYIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfbmV0bm9bNF0JUEFDS0VEOwkvKiAyQjogSVBYIG5ldCBudW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfbG9jYWxbNl0JUEFDS0VEOwkvKiAyRjogbG9jYWwgSVBYIG5vZGUgbnVtYmVyKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMzU6IHJlbW90ZSBJUFggbm9kZSBudW0uKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcm91dGVyWzQ4XQlQQUNLRUQ7CS8qIDNCOiBJUFggcm91dGVyIG5hbWUqLwotCXVuc2lnbmVkIGxvbmcgIGFsdF9jcHVfY2xvY2sJUEFDS0VEOwkvKiA2QjogICovCi19IHBwcDUwOF9jb25mX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUzUwOCBBZGFwdGVyIFJlYWQgQ29ubmVjdGlvbiBJbmZvcm1hdGlvbiBCbG9jayAKLSAqICAgIFJldHVybmVkIGJ5IHRoZSBQUFBfR0VUX0NPTk5FQ1RJT05fSU5GTyBjb21tYW5kCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcDUwOF9jb25uZWN0X2luZm8KLXsKLQl1bnNpZ25lZCBzaG9ydCAJbXJ1CQlQQUNLRUQ7CS8qIDAwLTAxIFJlbW90ZSBNYXggUmVjJyBVbml0ICovCi0JdW5zaWduZWQgY2hhciAgCWlwX29wdGlvbnMgCVBBQ0tFRDsgLyogMDI6IE5lZ290aWF0ZWQgaXAgb3B0aW9ucyAgKi8KLQl1bnNpZ25lZCBsb25nICAJaXBfbG9jYWwJUEFDS0VEOwkvKiAwMy0wNjogbG9jYWwgSVAgYWRkcmVzcyAgICAqLwotCXVuc2lnbmVkIGxvbmcgIAlpcF9yZW1vdGUJUEFDS0VEOwkvKiAwNy0wQTogcmVtb3RlIElQIGFkZHJlc3MgICAqLwotCXVuc2lnbmVkIGNoYXIJaXB4X29wdGlvbnMJUEFDS0VEOyAvKiAwQjogTmVnb3RpYXRlZCBpcHggb3B0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfbmV0bm9bNF0JUEFDS0VEOwkvKiAwQy0wRjogSVBYIG5ldCBudW1iZXIgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfbG9jYWxbNl0JUEFDS0VEOwkvKiAxMC0xRjogbG9jYWwgSVBYIG5vZGUgIyAgICAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMTYtMUI6IHJlbW90ZSBJUFggbm9kZSAjICAgKi8KLQl1bnNpZ25lZCBjaGFyICAJaXB4X3JvdXRlcls0OF0JUEFDS0VEOwkvKiAxQy00QjogSVBYIHJvdXRlciBuYW1lICAgICAqLwotCXVuc2lnbmVkIGNoYXIJYXV0aF9zdGF0dXMJUEFDS0VEOyAvKiA0QzogQXV0aGVudGljYXRpb24gU3RhdHVzICAqLwotCXVuc2lnbmVkIGNoYXIgCWluYmRfYXV0aF9wZWVySURbMV0gUEFDS0VEOyAvKiA0RDogdmFyaWFibGUgbGVuZ3RoIGluYm91bmQgYXV0aGVudGljYXRlZCBwZWVyIElEICovCi19IHBwcDUwOF9jb25uZWN0X2luZm9fdDsKLQotLyogJ2xpbmVfc3BlZWQnIGZpZWxkICovCi0jZGVmaW5lCVBQUF9CSVRSQVRFXzEyMDAJMHgwMQotI2RlZmluZQlQUFBfQklUUkFURV8yNDAwCTB4MDIKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNDgwMAkweDAzCi0jZGVmaW5lCVBQUF9CSVRSQVRFXzk2MDAJMHgwNAotI2RlZmluZQlQUFBfQklUUkFURV8xOTIwMAkweDA1Ci0jZGVmaW5lCVBQUF9CSVRSQVRFXzM4NDAwCTB4MDYKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNDUwMDAJMHgwNwotI2RlZmluZQlQUFBfQklUUkFURV81NjAwMAkweDA4Ci0jZGVmaW5lCVBQUF9CSVRSQVRFXzY0MDAwCTB4MDkKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNzQwMDAJMHgwQQotI2RlZmluZQlQUFBfQklUUkFURV8xMTIwMDAJMHgwQgotI2RlZmluZQlQUFBfQklUUkFURV8xMjgwMDAJMHgwQwotI2RlZmluZQlQUFBfQklUUkFURV8xNTYwMDAJMHgwRAotCi0vKiBEZWZpbmVzIGZvciB0aGUgJ2NvbmZfZmxhZ3MnIGZpZWxkICovCi0jZGVmaW5lCVBQUF9JR05PUkVfVFhfQUJPUlQJMHgwMQkvKiBkb24ndCByZS10cmFuc21pdCBhYm9ydGVkIGZyYW1lcyAqLwotI2RlZmluZQlQUFBfRU5BQkxFX1RYX1NUQVRTCTB4MDIJLyogZW5hYmxlIFR4IHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJUFBQX0VOQUJMRV9SWF9TVEFUUwkweDA0CS8qIGVuYWJsZSBSeCBzdGF0aXN0aWNzICovCi0jZGVmaW5lCVBQUF9FTkFCTEVfVElNRVNUQU1QCTB4MDgJLyogZW5hYmxlIHRpbWVzdGFtcCAqLwotCi0vKiAnaXBfb3B0aW9ucycgZGVmaW5lcyAqLwotI2RlZmluZQlQUFBfTE9DQUxfSVBfTE9DQUwJMHgwMQotI2RlZmluZQlQUFBfTE9DQUxfSVBfUkVNT1RFCTB4MDIKLSNkZWZpbmUJUFBQX1JFTU9URV9JUF9MT0NBTAkweDA0Ci0jZGVmaW5lCVBQUF9SRU1PVEVfSVBfUkVNT1RFCTB4MDgKLQotLyogJ2lweF9vcHRpb25zJyBkZWZpbmVzICovCi0jZGVmaW5lCVBQUF9SRU1PVEVfSVBYX05FVE5PCTB4MDEKLSNkZWZpbmUJUFBQX1JFTU9URV9JUFhfTE9DQUwJMHgwMgotI2RlZmluZQlQUFBfUkVNT1RFX0lQWF9SRU1PVEUJMHgwNAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX1JJUF9TQVAJMHgwOAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX05MU1AJMHgxMAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX0RFRkFVTFQJMHgyMAotI2RlZmluZQlQUFBfSVBYX0NPTkZfQ09NUExFVEUJMHg0MAotI2RlZmluZQlQUFBfSVBYX0VOQUJMRQkJMHg4MAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFM1MDggQWRhcHRlciBDb25maWd1cmF0aW9uIEJsb2NrIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfQ09ORklHIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdAlwcHA1MDhfZ2V0X2NvbmYKLXsKLQl1bnNpZ25lZCBsb25nICBicHMJUEFDS0VEOwkvKiAwMDogYmF1ZCByYXRlLCBicHMgKi8KLQlwcHA1MDhfY29uZl90ICBjb25mCVBBQ0tFRDsJLyogMDQ6IHJlcXVlc3RlZCBjb25maWcuICovCi0JdW5zaWduZWQgc2hvcnQgdHhiX251bQlQQUNLRUQ7CS8qIDZGOiBudW1iZXIgb2YgVHggYnVmZmVycyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Yl9udW0JUEFDS0VEOwkvKiA3MTogbnVtYmVyIG9mIFJ4IGJ1ZmZlcnMgKi8KLX0gcHBwNTA4X2dldF9jb25mX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUzUwOCBPcGVyYXRpb25hbCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfU1RBVElTVElDIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdCBwcHA1MDhfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDEJUEFDS0VEOwkvKiAwMDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfbGVuCVBBQ0tFRDsJLyogMDI6ICovCi0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQyCVBBQ0tFRDsJLyogMDQ6ICovCi0JdW5zaWduZWQgbG9uZyAgdHhfZnJhbWVzCVBBQ0tFRDsJLyogMDY6ICovCi0JdW5zaWduZWQgbG9uZyAgdHhfYnl0ZXMJUEFDS0VEOwkvKiAwQTogKi8KLQl1bnNpZ25lZCBsb25nICByeF9mcmFtZXMJUEFDS0VEOwkvKiAwRTogKi8KLQl1bnNpZ25lZCBsb25nICByeF9ieXRlcwlQQUNLRUQ7CS8qIDEyOiAqLwotfSBwcHA1MDhfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBBZGFwdGVyIEVycm9yIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9FUlJPUl9TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2Vycl9zdGF0cwotewotCXVuc2lnbmVkIGNoYXIJIHJ4X292ZXJydW4JUEFDS0VEOwkvKiAwMDogUnggb3ZlcnJ1biBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyCSByeF9iYWRfY3JjCVBBQ0tFRDsJLyogMDE6IFJ4IENSQyBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyCSByeF9hYm9ydAlQQUNLRUQ7CS8qIDAyOiBSeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIJIHJ4X2xvc3QJUEFDS0VEOwkvKiAwMzogUnggZnJhbWVzIGxvc3QgKi8KLQl1bnNpZ25lZCBjaGFyCSB0eF9hYm9ydAlQQUNLRUQ7CS8qIDA0OiBUeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIJIHR4X3VuZGVycnVuCVBBQ0tFRDsJLyogMDU6IFR4IHVuZGVycnVuIGVycm9ycyAqLwotCXVuc2lnbmVkIGNoYXIJIHR4X21pc3NlZF9pbnRyCVBBQ0tFRDsJLyogMDY6IFR4IHVuZGVycnVucyBtaXNzZWQgKi8KLQl1bnNpZ25lZCBjaGFyCSByZXNlcnZlZAlQQUNLRUQ7CS8qIDA3OiBUeCB1bmRlcnJ1bnMgbWlzc2VkICovCi0JdW5zaWduZWQgY2hhcgkgZGNkX3RyYW5zCVBBQ0tFRDsJLyogMDg6IERDRCB0cmFuc2l0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIJIGN0c190cmFucwlQQUNLRUQ7CS8qIDA5OiBDVFMgdHJhbnNpdGlvbnMgKi8KLX0gcHBwX2Vycl9zdGF0c190OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBhY2tldCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfUEFDS0VUX1NUQVRTIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdAlwcHBfcGt0X3N0YXRzCi17Ci0JdW5zaWduZWQgc2hvcnQgcnhfYmFkX2hlYWRlcglQQUNLRUQ7CS8qIDAwOiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Byb3RfdW5rbnduCVBBQ0tFRDsJLyogMDI6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfdG9vX2xhcmdlCVBBQ0tFRDsJLyogMDQ6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfbGNwCQlQQUNLRUQ7CS8qIDA2OiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2xjcAkJUEFDS0VEOwkvKiAwODogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcGNwCQlQQUNLRUQ7CS8qIDBBOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2lwY3AJCVBBQ0tFRDsJLyogMEM6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfaXB4Y3AJCVBBQ0tFRDsJLyogMEU6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfaXB4Y3AJCVBBQ0tFRDsJLyogMTA6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcGFwCQlQQUNLRUQ7CS8qIDEyOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X3BhcAkJUEFDS0VEOwkvKiAxNDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jaGFwCQlQQUNLRUQ7CS8qIDE2OiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NoYXAJCVBBQ0tFRDsJLyogMTg6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfbHFyCQlQQUNLRUQ7CS8qIDFBOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2xxcgkJUEFDS0VEOwkvKiAxQzogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcAkJUEFDS0VEOwkvKiAxRTogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9pcAkJUEFDS0VEOwkvKiAyMDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcHgJCVBBQ0tFRDsJLyogMjI6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfaXB4CQlQQUNLRUQ7CS8qIDI0OiAqLwotfSBwcHBfcGt0X3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTENQIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9MQ1BfU1RBVFMgY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9sY3Bfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gTENQIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAwMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX2FjawlQQUNLRUQ7CS8qIDA0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29uZl9uYWsJUEFDS0VEOwkvKiAwNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMDg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAwQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX2FjawlQQUNLRUQ7CS8qIDBDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29kZV9yZWoJUEFDS0VEOwkvKiAwRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9wcm90b19yZWoJUEFDS0VEOwkvKiAxMDogUHJvdG9jb2wtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfZWNob19ycXN0CVBBQ0tFRDsJLyogMTI6IEVjaG8tUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2VjaG9fcmVwbHkJUEFDS0VEOwkvKiAxNDogRWNoby1SZXBseSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2Rpc2NfcnFzdAlQQUNLRUQ7CS8qIDE2OiBEaXNjYXJkLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAxODogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX2FjawlQQUNLRUQ7CS8qIDFBOiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29uZl9uYWsJUEFDS0VEOwkvKiAxQzogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMUU6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAyMDogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX2FjawlQQUNLRUQ7CS8qIDIyOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29kZV9yZWoJUEFDS0VEOwkvKiAyNDogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9wcm90b19yZWoJUEFDS0VEOwkvKiAyNjogUHJvdG9jb2wtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfZWNob19ycXN0CVBBQ0tFRDsJLyogMjg6IEVjaG8tUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2VjaG9fcmVwbHkJUEFDS0VEOwkvKiAyQTogRWNoby1SZXBseSAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2Rpc2NfcnFzdAlQQUNLRUQ7CS8qIDJFOiBEaXNjYXJkLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAzMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hY2tfaW52YWwJUEFDS0VEOwkvKiAzMjogaW52YWxpZCBDb25mLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlal9pbnZhbAlQQUNLRUQ7CS8qIDM0OiBpbnZhbGlkIENvbmYtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcmVqX2JhZGlkCVBBQ0tFRDsJLyogMzY6IENvbmYtUmVqZWN0IHcvYmFkIElEICovCi19IHBwcF9sY3Bfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb29wYmFjayBFcnJvciBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfTFBCS19TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2xwYmtfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCBjb25mX21hZ2ljCVBBQ0tFRDsJLyogMDA6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvY19lY2hvX3Jxc3QJUEFDS0VEOwkvKiAwMjogICovCi0JdW5zaWduZWQgc2hvcnQgcmVtX2VjaG9fcnFzdAlQQUNLRUQ7CS8qIDA0OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb2NfZWNob19yZXBseQlQQUNLRUQ7CS8qIDA2OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCByZW1fZWNob19yZXBseQlQQUNLRUQ7CS8qIDA4OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb2NfZGlzY19ycXN0CVBBQ0tFRDsJLyogMEE6ICAqLwotCXVuc2lnbmVkIHNob3J0IHJlbV9kaXNjX3Jxc3QJUEFDS0VEOwkvKiAwQzogICovCi0JdW5zaWduZWQgc2hvcnQgZWNob190eF9jb2xsc24JUEFDS0VEOwkvKiAwRTogICovCi0JdW5zaWduZWQgc2hvcnQgZWNob19yeF9jb2xsc24JUEFDS0VEOwkvKiAxMDogICovCi19IHBwcF9scGJrX3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUHJvdG9jb2wgU3RhdGlzdGljcyAocmV0dXJuZWQgYnkgdGhlIFBQUF9SRUFEX0lQQ1BfU1RBVFMgYW5kCi0gKiBQUFBfUkVBRF9JUFhDUF9TVEFUUyBjb21tYW5kcykuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9wcm90X3N0YXRzCi17Ci0JdW5zaWduZWQgc2hvcnQgcnhfdW5rbm93bglQQUNLRUQ7CS8qIDAwOiB1bmtub3duIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAwMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX2FjawlQQUNLRUQ7CS8qIDA0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29uZl9uYWsJUEFDS0VEOwkvKiAwNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMDg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAwQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX2FjawlQQUNLRUQ7CS8qIDBDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29kZV9yZWoJUEFDS0VEOwkvKiAwRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZAkJUEFDS0VEOwkvKiAxMDogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAxMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX2FjawlQQUNLRUQ7CS8qIDE0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29uZl9uYWsJUEFDS0VEOwkvKiAxNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMTg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAxQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX2FjawlQQUNLRUQ7CS8qIDFDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29kZV9yZWoJUEFDS0VEOwkvKiAxRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAyMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hY2tfaW52YWwJUEFDS0VEOwkvKiAyMjogaW52YWxpZCBDb25mLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlal9pbnZhbAlQQUNLRUQ7CS8qIDI0OiBpbnZhbGlkIENvbmYtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcmVqX2JhZGlkCVBBQ0tFRDsJLyogMjY6IENvbmYtUmVqZWN0IHcvYmFkIElEICovCi19IHBwcF9wcm90X3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUEFQIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9QQVBfU1RBVFMgY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9wYXBfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gdHlwZSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2F1dGhfcnFzdAlQQUNLRUQ7CS8qIDAyOiBBdXRoZW50aWNhdGUtUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2F1dGhfYWNrCVBBQ0tFRDsJLyogMDQ6IEF1dGhlbnRpY2F0ZS1BY2sgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hdXRoX25hawlQQUNLRUQ7CS8qIDA2OiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQJCVBBQ0tFRDsJLyogMDg6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfYXV0aF9ycXN0CVBBQ0tFRDsJLyogMEE6IEF1dGhlbnRpY2F0ZS1SZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfYXV0aF9hY2sJUEFDS0VEOwkvKiAwQzogQXV0aGVudGljYXRlLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2F1dGhfbmFrCVBBQ0tFRDsJLyogMEU6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAxMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfcGVlcmlkCVBBQ0tFRDsJLyogMTI6IGludmFsaWQgcGVlciBJRCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9wYXNzd2QJUEFDS0VEOwkvKiAxNDogaW52YWxpZCBwYXNzd29yZCAqLwotfSBwcHBfcGFwX3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ0hBUCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfQ0hBUF9TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2NoYXBfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gdHlwZSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NoYWxsZW5nZQlQQUNLRUQ7CS8qIDAyOiBBdXRoZW50aWNhdGUtUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlc3BvbnNlCVBBQ0tFRDsJLyogMDQ6IEF1dGhlbnRpY2F0ZS1BY2sgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9zdWNjZXNzCVBBQ0tFRDsJLyogMDY6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9mYWlsdXJlCVBBQ0tFRDsJLyogMDg6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZAkJUEFDS0VEOwkvKiAwQTogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jaGFsbGVuZ2UJUEFDS0VEOwkvKiAwQzogQXV0aGVudGljYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9yZXNwb25zZQlQQUNLRUQ7CS8qIDBFOiBBdXRoZW50aWNhdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfc3VjY2VzcwlQQUNLRUQ7CS8qIDEwOiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfZmFpbHVyZQlQQUNLRUQ7CS8qIDEyOiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfdG9vX2xhcmdlCVBBQ0tFRDsJLyogMTQ6IHBhY2tldHMgdG9vIGxhcmdlICovCi0JdW5zaWduZWQgc2hvcnQgcnhfYmFkX3BlZXJpZAlQQUNLRUQ7CS8qIDE2OiBpbnZhbGlkIHBlZXIgSUQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfcGFzc3dkCVBBQ0tFRDsJLyogMTg6IGludmFsaWQgcGFzc3dvcmQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfbWQ1CVBBQ0tFRDsJLyogMUE6IGludmFsaWQgTUQ1IGZvcm1hdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9yZXNwCVBBQ0tFRDsJLyogMUM6IGludmFsaWQgcmVzcG9uc2UgKi8KLX0gcHBwX2NoYXBfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDb25uZWN0aW9uIEluZm9ybWF0aW9uIChyZXR1cm5lZCBieSB0aGUgUFBQX0dFVF9DT05ORUNUSU9OX0lORk8gY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9jb25uX2luZm8KLXsKLQl1bnNpZ25lZCBzaG9ydCByZW1vdGVfbXJ1CVBBQ0tFRDsJLyogMDA6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlwX29wdGlvbnMJUEFDS0VEOwkvKiAwMjogICovCi0JdW5zaWduZWQgY2hhciAgaXBfbG9jYWxbNF0JUEFDS0VEOwkvKiAwMzogICovCi0JdW5zaWduZWQgY2hhciAgaXBfcmVtb3RlWzRdCVBBQ0tFRDsJLyogMDc6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9vcHRpb25zCVBBQ0tFRDsJLyogMEI6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9uZXR3b3JrWzRdCVBBQ0tFRDsJLyogMEM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9sb2NhbFs2XQlQQUNLRUQ7CS8qIDEwOiAgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMTY6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9yb3V0ZXJbNDhdCVBBQ0tFRDsJLyogMUM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGF1dGhfc3RhdHVzCVBBQ0tFRDsJLyogNEM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIHBlZXJfaWRbMF0JUEFDS0VEOwkvKiA0RDogICovCi19IHBwcF9jb25uX2luZm9fdDsKLQotLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIFNFVF9UUklHR0VSX0lOVFIgY29tbWFuZAotICovCi0KLXR5cGVkZWYgc3RydWN0IHBwcF9pbnRyX2luZm97Ci0JdW5zaWduZWQgY2hhciAgaV9lbmFibGUJCVBBQ0tFRDsgLyogMCBJbnRlcnJ1cHQgZW5hYmxlIGJpdHMgKi8KLQl1bnNpZ25lZCBjaGFyICBpcnEgICAgICAgICAgICAgIFBBQ0tFRDsgLyogMSBJcnEgbnVtYmVyICovCi0JdW5zaWduZWQgc2hvcnQgdGltZXJfbGVuICAgICAgICBQQUNLRUQ7IC8qIDIgVGltZXIgZGVsYXkgKi8KLX0gcHBwX2ludHJfaW5mb190OwotCi0KLSNkZWZpbmUgRlQxX01PTklUT1JfU1RBVFVTX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MAotI2RlZmluZSBTRVRfRlQxX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxCi0KLQotCi0vKiBTcGVjaWFsIFVEUCBkcml2ZXJzIG1hbmFnZW1lbnQgY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBJUEVfRU5BQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAotI2RlZmluZSBQUElQRV9ESVNBQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxCi0jZGVmaW5lIFBQSVBFX0dFVF9UUkFDRV9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKLSNkZWZpbmUgUFBJUEVfR0VUX0lCQV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMwotI2RlZmluZSBQUElQRV9LSUxMX0JPQVJEICAgICAJCQkJMHgyNAotI2RlZmluZSBQUElQRV9GVDFfUkVBRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1Ci0jZGVmaW5lIFBQSVBFX0RSSVZFUl9TVEFUX0lGU0VORCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjYKLSNkZWZpbmUgUFBJUEVfRFJJVkVSX1NUQVRfSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNwotI2RlZmluZSBQUElQRV9EUklWRVJfU1RBVF9HRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4Ci0jZGVmaW5lIFBQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkKLSNkZWZpbmUgUFBJUEVfUk9VVEVSX1VQX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMAotCi0jZGVmaW5lIERJU0FCTEVfVFJBQ0lORyAJCQkJMHgwMAotI2RlZmluZSBUUkFDRV9TSUdOQUxMSU5HX0ZSQU1FUwkJCQkweDAxCi0jZGVmaW5lIFRSQUNFX0RBVEFfRlJBTUVTCQkJCTB4MDIKLQotCi0KLSNpZmRlZgkJX01TQ18KLSMgIHByYWdtYQlwYWNrKCkKLSNlbmRpZgotI2VuZGlmCS8qIF9TRExBX1BQUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NkbGFfeDI1LmggYi9pbmNsdWRlL2xpbnV4L3NkbGFfeDI1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZGI5ODAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhX3gyNS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhX3gyNS5oCVNhbmdvbWEgWC4yNSBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMuCi0qCi0qIEF1dGhvcjoJTmVuYWQgQ29yYmljCTxuY29yYmljQHNhbmdvbWEuY29tPgotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIEZlYiAyOCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIFVwZGF0ZWQgZm9yIHNvY2tldCBiYXNlZCB4MjVhcGkKLSogRGVjIDEzLCAxOTk2CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYJX1NETEFfWDI1X0gKLSNkZWZpbmUJX1NETEFfWDI1X0gKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBOb3RlczoKLSAqIC0tLS0tLQotICogMS4gQWxsIHN0cnVjdHVyZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXJlIGJ5dGUtYWxpbmVkLiAgCi0gKglDb21waWxlcglQbGF0Zm9ybQkKLSAqCS0tLS0tLS0tCS0tLS0tLS0tCi0gKglHTlUgQwkJTGludXgKLSAqCi0gKi8KLQotI2lmbmRlZglQQUNLRUQKLSMJZGVmaW5lCVBBQ0tFRAlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQotI2VuZGlmCS8qIFBBQ0tFRCAqLwotCi0vKioqKioqCUNPTlNUQU5UUyBERUZJTklUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlYMjVfTUFYX0NIQU4JMjU1CS8qIG1heCBudW1iZXIgb2Ygb3BlbiBYLjI1IGNpcmN1aXRzICovCi0jZGVmaW5lCVgyNV9NQVhfREFUQQkxMDI0CS8qIG1heCBsZW5ndGggb2YgWC4yNSBkYXRhIGJ1ZmZlciAqLwotLyoKLSAqIFguMjUgc2hhcmVkIG1lbW9yeSBsYXlvdXQuCi0gKi8KLSNkZWZpbmUJWDI1X01CT1hfT0ZGUwkweDE2QjAJLyogZ2VuZXJhbCBtYWlsYm94IGJsb2NrICovCi0jZGVmaW5lCVgyNV9SWE1CT1hfT0ZGUwkweDFBRDAJLyogcmVjZWl2ZSBtYWlsYm94ICovCi0jZGVmaW5lCVgyNV9TVEFUVVNfT0ZGUwkweDFFRjAJLyogWC4yNSBzdGF0dXMgc3RydWN0dXJlICovCi0jZGVmaW5lIFgyNV9NQl9WRUNUT1IJMHhFMDAwCS8qIFM1MTQgbWFpbGJveCB3aW5kb3cgdmVjb3RyICovCi0jZGVmaW5lIFgyNV9NSVNDX0hETENfQklUUyAweDFGMDAgLypYLjI1IG1pc2NhbGxhbmVvdXMgSERMQyBiaXRzICovCi0KLS8qIGNvZGUgbGV2ZWxzICovCi0jZGVmaW5lIEhETENfTEVWRUwgMHgwMQotI2RlZmluZSBYMjVfTEVWRUwgIDB4MDIKLSNkZWZpbmUgWDI1X0FORF9IRExDX0xFVkVMIDB4MDMKLSNkZWZpbmUgRE9fSERMQ19MRVZFTF9FUlJPUl9DSEVDS0lORyAweDA0Ci0KLS8qKioqKiogREFUQSBTVFJVQ1RVUkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgQ29tbWFuZCBCbG9jay4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgWDI1Q21kCi17Ci0JdW5zaWduZWQgY2hhciBjb21tYW5kCVBBQ0tFRDsJLyogY29tbWFuZCBjb2RlICovCi0JdW5zaWduZWQgc2hvcnQgbGVuZ3RoCVBBQ0tFRDsJLyogdHJhbnNmZXIgZGF0YSBsZW5ndGggKi8KLQl1bnNpZ25lZCBjaGFyIHJlc3VsdAlQQUNLRUQ7CS8qIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciBwZglQQUNLRUQ7CS8qIFAvRiBiaXQgKi8KLQl1bnNpZ25lZCBzaG9ydCBsY24JUEFDS0VEOwkvKiBsb2dpY2FsIGNoYW5uZWwgKi8KLQl1bnNpZ25lZCBjaGFyIHFkbQlQQUNLRUQ7CS8qIFEvRC9NIGJpdHMgKi8KLQl1bnNpZ25lZCBjaGFyIGNhdXNlCVBBQ0tFRDsJLyogY2F1c2UgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyIGRpYWduCVBBQ0tFRDsJLyogZGlhZ25vc3RpY3MgKi8KLQl1bnNpZ25lZCBjaGFyIHBrdFR5cGUJUEFDS0VEOwkvKiBwYWNrZXQgdHlwZSAqLwotCXVuc2lnbmVkIGNoYXIgcmVzcnZbNF0JUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBUWDI1Q21kOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdjb21tYW5kJyBmaWVsZC4KLSAqLwotLyotLS0tLSBHZW5lcmFsIGNvbW1hbmRzIC0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgWDI1X1NFVF9HTE9CQUxfVkFSUwkweDBCICAgCS8qIHNldCBnbG9iYWwgdmFyaWFibGVzICovIAotI2RlZmluZSBYMjVfUkVBRF9NT0RFTV9TVEFUVVMJMHgwQyAJLyogcmVhZCBtb2RlbSBzdGF0dXMgKi8KLSNkZWZpbmUgWDI1X1JFQURfQ09ERV9WRVJTSU9OCTB4MTUJLyogcmVhZCBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlciAqLwotI2RlZmluZSBYMjVfVFJBQ0VfQ09ORklHVVJFCTB4MTQJLyogY29uZmlndXJlIHRyYWNlIGZhY2lsaXR5ICovCi0jZGVmaW5lIFgyNV9SRUFEX1RSQUNFX0RBVEEJMHgxNgkvKiByZWFkIHRyYWNlIGRhdGEgKi8KLSNkZWZpbmUJWDI1X1NFVF9JTlRFUlJVUFRfTU9ERQkweDE3CS8qIHNldCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBtb2RlICovCi0jZGVmaW5lCVgyNV9SRUFEX0lOVEVSUlVQVF9NT0RFCTB4MTgJLyogcmVhZCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBtb2RlICovCi0vKi0tLS0tIEhETEMtbGV2ZWwgY29tbWFuZHMgLS0tLS0tLS0tLS0qLwotI2RlZmluZSBYMjVfSERMQ19MSU5LX0NPTkZJR1VSRQkweDAxCS8qIGNvbmZpZ3VyZSBIRExDIGxpbmsgbGV2ZWwgKi8gICAKLSNkZWZpbmUgWDI1X0hETENfTElOS19PUEVOCTB4MDIJLyogb3BlbiBIRExDIGxpbmsgKi8gICAgICAgICAJCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfQ0xPU0UJMHgwMwkvKiBjbG9zZSBIRExDIGxpbmsgKi8KLSNkZWZpbmUgWDI1X0hETENfTElOS19TRVRVUAkweDA0CS8qIHNldCB1cCBIRExDIGxpbmsgKi8gCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfRElTQwkweDA1CS8qIGRpc2Nvbm5lY3QgREhMQyBsaW5rICovCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfU1RBVFVTCTB4MDYJLyogcmVhZCBESExDIGxpbmsgc3RhdHVzICovCi0jZGVmaW5lIFgyNV9IRExDX1JFQURfU1RBVFMJMHgwNwkvKiByZWFkIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgWDI1X0hETENfRkxVU0hfU1RBVFMJMHgwOCAJLyogZmx1c2ggb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBYMjVfSERMQ19SRUFEX0NPTU1fRVJSCTB4MDkgCS8qIHJlYWQgZXJyb3Igc3RhdGlzdGljcyAqLwotI2RlZmluZSBYMjVfSERMQ19GTFVTSF9DT01NX0VSUgkweDBBCS8qIGZsdXNoIGVycm9yIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgWDI1X0hETENfRkxVU0hfQlVGRkVSUwkweDBECS8qIGZsdXNoIEhETEMtbGV2ZWwgZGF0YSBidWZmZXJzICovCi0jZGVmaW5lIFgyNV9IRExDX1NQUlZTX0NOVF9TVEFUIDB4MEYJLyogcmVhZCBzdXJlcnZpc29yeSBjb3VudCBzdGF0dXMgKi8KLSNkZWZpbmUgWDI1X0hETENfU0VORF9VSV9GUkFNRQkweDEwCS8qIHNlbmQgdW5udW1iZXJlZCBpbmZvcm1hdGlvbiBmcmFtZSAqLwotI2RlZmluZSBYMjVfSERMQ19XUklURQkJMHgxMQkvKiBzZW5kIEhETEMgaW5mb3JtYXRpb24gZnJhbWUgKi8KLSNkZWZpbmUgWDI1X0hETENfUkVBRAkJMHgyMQkvKiByZWFkIEhETEMgaW5mb3JtYXRpb24gZnJhbWUgKi8KLSNkZWZpbmUgWDI1X0hETENfUkVBRF9DT05GSUcJMHgxMgkvKiByZWFkIEhETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBYMjVfSERMQ19TRVRfQ09ORklHCTB4MTMJLyogc2V0IEhETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBTRVRfUFJPVE9DT0xfTEVWRUwJMHgxRgkvKiBzZXQgcHJvdG9jb2wgbGV2ZWwgKi8KLS8qLS0tLS0gWC4yNS1sZXZlbCBjb21tYW5kcyAtLS0tLS0tLS0tLSovCi0jZGVmaW5lIFgyNV9SRUFECQkweDIyCS8qIHJlYWQgWC4yNSBwYWNrZXQgKi8KLSNkZWZpbmUgWDI1X1dSSVRFCQkweDIzCS8qIHNlbmQgWC4yNSBwYWNrZXQgKi8KLSNkZWZpbmUgWDI1X1BMQUNFX0NBTEwJCTB4MzAJLyogcGxhY2UgYSBjYWxsIG9uIFNWQyAqLwotI2RlZmluZSBYMjVfQUNDRVBUX0NBTEwJCTB4MzEJLyogYWNjZXB0IGluY29tbWluZyBjYWxsICovCi0jZGVmaW5lIFgyNV9DTEVBUl9DQUxMCQkweDMyCS8qIGNsZWFyIGNhbGwgKi8KLSNkZWZpbmUgWDI1X0NMRUFSX0NPTkZSTQkweDMzCS8qIHNlbmQgY2xlYXIgY29uZmlybWF0aW9uIHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTRVQJCTB4MzQJLyogc2VuZCByZXNldCByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTRVRfQ09ORlJNCTB4MzUJLyogc2VuZCByZXNldCBjb25maXJtYXRpb24gcGFja2V0ICovCi0jZGVmaW5lIFgyNV9SRVNUQVJUCQkweDM2CS8qIHNlbmQgcmVzdGFydCByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTVEFSVF9DT05GUk0JMHgzNwkvKiBzZW5kIHJlc3RhcnQgY29uZmlybWF0aW9uIHBhY2tldCAqLwotI2RlZmluZSBYMjVfSU5URVJSVVBUCQkweDM4CS8qIHNlbmQgaW50ZXJydXB0IHJlcXVlc3QgcGFja2V0ICovCi0jZGVmaW5lIFgyNV9JTlRFUlJVUFRfQ09ORlJNCTB4MzkJLyogc2VuZCBpbnRlcnJ1cHQgY29uZmlybWF0aW9uIHBrdCAqLwotI2RlZmluZSBYMjVfUkVHSVNUUkFUSU9OX1JRU1QJMHgzQQkvKiBzZW5kIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVHSVNUUkFUSU9OX0NPTkZSTQkweDNCCS8qIHNlbmQgcmVnaXN0cmF0aW9uIGNvbmZpcm1hdGlvbiAqLwotI2RlZmluZSBYMjVfSVNfREFUQV9BVkFJTEFCTEUJMHg0MAkvKiBxdWVycnkgcmVjZWl2ZSBxdWV1ZSAqLwotI2RlZmluZSBYMjVfSU5DT01NSU5HX0NBTExfQ1RMCTB4NDEJLyogc2VsZWN0IGluY29tbWluZyBjYWxsIG9wdGlvbnMgKi8KLSNkZWZpbmUgWDI1X0NPTkZJR1VSRV9QVkMJMHg0MgkvKiBjb25maWd1cmUgUFZDICovCi0jZGVmaW5lIFgyNV9HRVRfQUNUSVZFX0NIQU5ORUxTCTB4NDMJLyogZ2V0IGEgbGlzdCBvZiBhY3RpdmUgY2lyY3VpdHMgKi8KLSNkZWZpbmUgWDI1X1JFQURfQ0hBTk5FTF9DT05GSUcJMHg0NAkvKiByZWFkIHZpcnQuIGNpcmN1aXQgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBYMjVfRkxVU0hfREFUQV9CVUZGRVJTCTB4NDUJLyogZmx1c2ggWC4yNS1sZXZlbCBkYXRhIGJ1ZmZlcnMgKi8KLSNkZWZpbmUgWDI1X1JFQURfSElTVE9SWV9UQUJMRQkweDQ2CS8qIHJlYWQgYXN5bmNocm9ub3VzIGV2ZW50IGxvZyAqLwotI2RlZmluZSBYMjVfSElTVE9SWV9UQUJMRV9DVEwJMHg0NwkvKiBjb250cm9sIGFzeW5jaHJvbm91cyBldmVudCBsb2cgKi8KLSNkZWZpbmUJWDI1X0dFVF9UWF9EX0JJVF9TVEFUVVMJMHg0OAkvKiBpcyBwYWNrZXQgd2l0aCBELWJpdCBhY2tub3dsZWdlZCAqLwotI2RlZmluZQlYMjVfUkVBRF9TVEFUSVNUSUNTCTB4NDkJLyogcmVhZCBYLjI1LWxldmVsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJWDI1X0ZMVVNIX1NUQVRJU1RJQ1MJMHg0QQkvKiBmbHVzaCBYLjI1LWxldmVsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJWDI1X1JFQURfQ09ORklHVVJBVElPTgkweDUwCS8qIHJlYWQgSERMQyAmIFguMjUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZQlYMjVfU0VUX0NPTkZJR1VSQVRJT04JMHg1MQkvKiBzZXQgSERMQyAmIFguMjUgY29uZmlndXJhdGlvbiAqLwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdyZXN1bHQnIGZpZWxkLgotICovCi0vKi0tLS0tIEdlbmVyYWwgcmVzdWx0cyAtLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBYMjVSRVNfT0sJCTB4MDAKLSNkZWZpbmUgWDI1UkVTX0VSUk9SCQkweDAxCi0jZGVmaW5lIFgyNVJFU19MSU5LX05PVF9JTl9BQk0JMHgwMgkvKiBsaW5rIGlzIG5vdCBpbiBBQk0gbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfTElOS19DTE9TRUQJMHgwMwotI2RlZmluZSBYMjVSRVNfSU5WQUxfTEVOR1RICTB4MDQKLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NNRAkweDA1Ci0jZGVmaW5lIFgyNVJFU19VTk5VTUJFUkVEX0ZSQU1FCTB4MDYJLyogdW5udW5iZXJlZCBmcmFtZSByZWNlaXZlZCAqLwotI2RlZmluZSBYMjVSRVNfRlJNX1JFSkVDVF9NT0RFCTB4MDcJLyogbGluayBpcyBpbiBGcmFtZSBSZWplY3QgbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfTU9ERU1fRkFJTFVSRQkweDA4CS8qIERDRCBhbmQvb3IgQ1RTIGRyb3BwZWQgKi8KLSNkZWZpbmUgWDI1UkVTX04yX1JFVFJZX0xJTUlUCTB4MDkJLyogTjIgcmV0cnkgbGltaXQgaGFzIGJlZW4gZXhjZWVkZWQgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0xDTgkweDMwCS8qIGludmFsaWQgbG9naWNhbCBjaGFubmVsIG51bWJlciAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfU1RBVEUJMHgzMQkvKiBjaGFubmVsIGlzIG5vdCBpbiBkYXRhIHhmZXIgbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfREFUQV9MRU4JMHgzMgkvKiBpbnZhbGlkIGRhdGEgbGVuZ3RoICovCi0jZGVmaW5lIFgyNVJFU19OT1RfUkVBRFkJMHgzMwkvKiBubyBkYXRhIGF2YWlsYWJsZSAvIGJ1ZmZlcnMgZnVsbCAqLwotI2RlZmluZSBYMjVSRVNfTkVUV09SS19ET1dOCTB4MzQKLSNkZWZpbmUgWDI1UkVTX0NIQU5ORUxfSU5fVVNFCTB4MzUJLyogdGhlcmUgaXMgZGF0YSBxdWV1ZWQgb24gdGhpcyBMQ04gKi8KLSNkZWZpbmUgWDI1UkVTX1JFR1NUX05PVF9TVVBQUlQJMHgzNgkvKiByZWdpc3RyYXRpb24gbm90IHN1cHBvcnRlZCAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfRk9STUFUCTB4MzcJLyogaW52YWxpZCBwYWNrZXQgZm9ybWF0ICovCi0jZGVmaW5lIFgyNVJFU19EX0JJVF9OT1RfU1VQUFJUCTB4MzgJLyogRC1iaXQgcHJhZ21hdGljcyBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIFgyNVJFU19GQUNJTF9OT1RfU1VQUFJUCTB4MzkJLyogQ2FsbCBmYWNpbGl0eSBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIFgyNVJFU19JTlZBTF9DQUxMX0FSRwkweDNBCS8qIGVycm9ybmVvdXMgY2FsbCBhcmd1bWVudHMgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NBTExfREFUQQkweDNCCS8qIGVycm9ybmVvdXMgY2FsbCB1c2VyIGRhdGEgKi8KLSNkZWZpbmUgWDI1UkVTX0FTWU5DX1BBQ0tFVAkweDQwCS8qIGFzeW5jaHJvbm91cyBwYWNrZXQgcmVjZWl2ZWQgKi8KLSNkZWZpbmUgWDI1UkVTX1BST1RPX1ZJT0xBVElPTgkweDQxCS8qIHByb3RvY29sIHZpb2xhdGlvbiBvY2N1cnJlZCAqLwotI2RlZmluZSBYMjVSRVNfUEtUX1RJTUVPVVQJMHg0MgkvKiBYLjI1IHBhY2tldCB0aW1lIG91dCAqLwotI2RlZmluZSBYMjVSRVNfUEtUX1JFVFJZX0xJTUlUCTB4NDMJLyogWC4yNSBwYWNrZXQgcmV0cnkgbGltaXQgZXhjZWVkZWQgKi8KLS8qLS0tLS0gQ29tbWFuZC1kZXBlbmRlbnQgcmVzdWx0cyAtLS0tLSovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0RJU0MJMHgwMAkvKiBIRExDX0xJTktfU1RBVFVTICovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0lOX0FCTQkweDAxCS8qIEhETENfTElOS19TVEFUVVMgKi8KLSNkZWZpbmUgWDI1UkVTX05PX0RBVEEJCTB4MDEJLyogSERMQ19SRUFEL1JFQURfVFJBQ0VfREFUQSovCi0jZGVmaW5lIFgyNVJFU19UUkFDRV9JTkFDVElWRQkweDAyCS8qIFJFQURfVFJBQ0VfREFUQSAqLwotI2RlZmluZSBYMjVSRVNfTElOS19JU19PUEVOCTB4MDEJLyogSERMQ19MSU5LX09QRU4gKi8KLSNkZWZpbmUgWDI1UkVTX0xJTktfSVNfRElTQwkweDAyCS8qIEhETENfTElOS19ESVNDICovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0lTX0NMT1NFRAkweDAzCS8qIEhETENfTElOS19DTE9TRSAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfUEFSQU0JMHgzMQkvKiBJTkNPTU1JTkdfQ0FMTF9DVEwgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NPTkZJRwkweDM1CS8qIFJFR0lTVFJfUlFTVC9DT05GUk0gKi8KLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAncWRtX2JpdHMnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNUNNRF9RX0JJVF9NQVNLCTB4MDQKLSNkZWZpbmUgWDI1Q01EX0RfQklUX01BU0sJMHgwMgotI2RlZmluZSBYMjVDTURfTV9CSVRfTUFTSwkweDAxCi0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3BrdF90eXBlJyBmaWVsZC4KLSAqLwotLyotLS0tLSBBc3luY2hyb25vdXMgZXZlbnRzIC0tLS0tLSovCi0jZGVmaW5lIEFTRV9DTEVBUl9SUVNUCQkweDAyCi0jZGVmaW5lIEFTRV9SRVNFVF9SUVNUCQkweDA0Ci0jZGVmaW5lIEFTRV9SRVNUQVJUX1JRU1QJMHgwOAotI2RlZmluZSBBU0VfSU5URVJSVVBUCQkweDEwCi0jZGVmaW5lIEFTRV9EVEVfUkVHSVNUUl9SUVNUCTB4MjAKLSNkZWZpbmUgQVNFX0NBTExfUlFTVAkJMHgzMAotI2RlZmluZSBBU0VfQ0FMTF9BQ0NFUFRFRAkweDMxCi0jZGVmaW5lIEFTRV9DTEVBUl9DT05GUk0JMHgzMgotI2RlZmluZSBBU0VfUkVTRVRfQ09ORlJNCTB4MzMKLSNkZWZpbmUgQVNFX1JFU1RBUlRfQ09ORlJNCTB4MzQKLSNkZWZpbmUgQVNFX0lOVEVSUlVQVF9DT05GUk0JMHgzNQotI2RlZmluZSBBU0VfRENFX1JFR0lTVFJfQ09ORlJNCTB4MzYKLSNkZWZpbmUgQVNFX0RJQUdOT1NUSUMJCTB4MzcKLSNkZWZpbmUgQVNFX0NBTExfQVVUT19DTEVBUgkweDM4Ci0jZGVmaW5lIEFVVE9fUkVTUE9OU0VfRkxBRwkweDgwCi0vKi0tLS0tIFRpbWUtT3V0IGV2ZW50cyAtLS0tLS0tLS0tKi8KLSNkZWZpbmUgVE9FX1JFU1RBUlRfUlFTVAkweDAzCi0jZGVmaW5lIFRPRV9DQUxMX1JRU1QJCTB4MDUKLSNkZWZpbmUgVE9FX0NMRUFSX1JRU1QJCTB4MDgKLSNkZWZpbmUgVE9FX1JFU0VUX1JRU1QJCTB4MEEKLS8qLS0tLS0gUHJvdG9jb2wgVmlvbGF0aW9uIGV2ZW50cyAqLwotI2RlZmluZSBQVkVfQ0xFQVJfUlFTVAkJMHgzMgotI2RlZmluZSBQVkVfUkVTRVRfUlFTVAkJMHgzMwotI2RlZmluZSBQVkVfUkVTVEFSVF9SUVNUCTB4MzQKLSNkZWZpbmUgUFZFX0RJQUdOT1NUSUMJCTB4MzcKLQotI2RlZmluZSBJTlRSX09OX1JYX0ZSQU1FICAgICAgICAgICAgMHgwMQotI2RlZmluZSBJTlRSX09OX1RYX0ZSQU1FICAgICAgICAgICAgMHgwMgotI2RlZmluZSBJTlRSX09OX01PREVNX1NUQVRVU19DSEFOR0UgMHgwNAotI2RlZmluZSBJTlRSX09OX0NPTU1BTkRfQ09NUExFVEUgICAgMHgwOAotI2RlZmluZSBJTlRSX09OX1gyNV9BU1lfVFJBTlNBQ1RJT04gMHgxMAotI2RlZmluZSBJTlRSX09OX1RJTUVSCQkgICAgMHg0MAotI2RlZmluZSBESVJFQ1RfUlhfSU5UUl9VU0FHRSAgICAgICAgMHg4MAotCi0jZGVmaW5lIE5PX0lOVFJfUEVORElORyAgCSAgICAgICAgMHgwMAotI2RlZmluZSBSWF9JTlRSX1BFTkRJTkcJCQkweDAxCQotI2RlZmluZSBUWF9JTlRSX1BFTkRJTkcJCQkweDAyCi0jZGVmaW5lIE1PREVNX0lOVFJfUEVORElORwkJMHgwNAotI2RlZmluZSBDT01NQU5EX0NPTVBMRVRFX0lOVFJfUEVORElORyAJMHgwOAotI2RlZmluZSBYMjVfQVNZX1RSQU5TX0lOVFJfUEVORElORwkweDEwCi0jZGVmaW5lIFRJTUVSX0lOVFJfUEVORElORwkJMHg0MAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgTWFpbGJveC4KLSAqCVRoaXMgc3RydWN0dXJlIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0cyBYMjVfTUJPWF9PRkZTIGFuZCBYMjVfUlhNQk9YX09GRlMKLSAqCWludG8gc2hhcmVkIG1lbW9yeSB3aW5kb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNU1ib3gKLXsKLQl1bnNpZ25lZCBjaGFyIG9wZmxhZwlQQUNLRUQ7CS8qIDAwaDogZXhlY3V0aW9uIGZsYWcgKi8KLQlUWDI1Q21kIGNtZAkJUEFDS0VEOwkvKiAwMWg6IGNvbW1hbmQgYmxvY2sgKi8KLQl1bnNpZ25lZCBjaGFyIGRhdGFbMV0JUEFDS0VEOwkvKiAxMGg6IGRhdGEgYnVmZmVyICovCi19IFRYMjVNYm94OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgVGltZSBTdGFtcCBTdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRpbWVTdGFtcAotewotCXVuc2lnbmVkIGNoYXIgbW9udGgJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgZGF0ZQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBzZWMJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgbWluCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIGhvdXIJUEFDS0VEOwotfSBUWDI1VGltZVN0YW1wOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgU3RhdHVzIEJsb2NrLgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgWDI1X1NUQVRVU19PRkYgaW50byBzaGFyZWQgbWVtb3J5Ci0gKgl3aW5kb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVN0YXR1cwotewotCXVuc2lnbmVkIHNob3J0IHB2Y19tYXAJUEFDS0VEOwkvKiAwMGg6IFBWQyBtYXAgKi8KLQl1bnNpZ25lZCBzaG9ydCBpY2NfbWFwCVBBQ0tFRDsJLyogMDJoOiBJbmNvbW1pbmcgQ2hhbi4gbWFwICovCi0JdW5zaWduZWQgc2hvcnQgdHdjX21hcAlQQUNLRUQ7CS8qIDA0aDogVHdvLXdheSBDbmFuLiBtYXAgKi8KLQl1bnNpZ25lZCBzaG9ydCBvZ2NfbWFwCVBBQ0tFRDsJLyogMDZoOiBPdXRnb2luZyBDaGFuLiBtYXAgKi8KLQlUWDI1VGltZVN0YW1wIHRzdGFtcAlQQUNLRUQ7CS8qIDA4aDogdGltZXN0YW1wIChCQ0QpICovCi0JdW5zaWduZWQgY2hhciBpZmxhZ3MJUEFDS0VEOwkvKiAwRGg6IGludGVycnVwdCBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgaW1hc2sgICAgIFBBQ0tFRDsgLyogMEVoOiBpbnRlcnJ1cHQgbWFzayAgKi8KLQl1bnNpZ25lZCBjaGFyIHJlc3J2CVBBQ0tFRDsJLyogMEVoOiAqLwotCXVuc2lnbmVkIGNoYXIgZ2ZsYWdzCVBBQ0tFRDsJLyogMTBoOiBtaXNjLiBIRExDL1gyNSBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgY2ZsYWdzW1gyNV9NQVhfQ0hBTl0gUEFDS0VEOyAvKiBjaGFubmVsIHN0YXR1cyBieXRlcyAqLwotfSBUWDI1U3RhdHVzOwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnaWZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfUlhfSU5UUgkweDAxCS8qIHJlY2VpdmUgaW50ZXJydXB0ICovCi0jZGVmaW5lIFgyNV9UWF9JTlRSCTB4MDIJLyogdHJhbnNtaXQgaW50ZXJydXB0ICovCi0jZGVmaW5lIFgyNV9NT0RFTV9JTlRSCTB4MDQJLyogbW9kZW0gc3RhdHVzIGludGVycnVwdCAoQ1RTL0RDRCkgKi8KLSNkZWZpbmUgWDI1X0VWRU5UX0lOVFIJMHgxMAkvKiBhc3luY3Jvbm91cyBldmVudCBlbmNvdW50ZXJlZCAqLwotI2RlZmluZSBYMjVfQ01EX0lOVFIJMHgwOAkvKiBpbnRlcmZhY2UgY29tbWFuZCBjb21wbGV0ZSAqLwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnZ2ZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfSERMQ19BQk0JMHgwMQkvKiBIRExDIGlzIGluIEFCTSBtb2RlICovCi0jZGVmaW5lIFgyNV9SWF9SRUFEWQkweDAyCS8qIFguMjUgZGF0YSBhdmFpbGFibGUgKi8KLSNkZWZpbmUgWDI1X1RSQUNFX1JFQURZCTB4MDgJLyogdHJhY2UgZGF0YSBhdmFpbGFibGUgKi8KLSNkZWZpbmUgWDI1X0VWRU5UX0lORAkweDIwCS8qIGFzeW5jaHJvbm91cyBldmVudCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgWDI1X1RYX1JFQURZCTB4NDAJLyogc3BhY2UgaXMgYXZhaWxhYmxlIGluIFR4IGJ1Zi4qLwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnY2ZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfWEZFUl9NT0RFCTB4ODAJLyogY2hhbm5lbCBpcyBpbiBkYXRhIHRyYW5zZmVyIG1vZGUgKi8KLSNkZWZpbmUgWDI1X1RYV0lOX09QRU4JMHg0MAkvKiB0cmFuc21pdCB3aW5kb3cgb3BlbiAqLwotI2RlZmluZSBYMjVfUlhCVUZfTUFTSwkweDNGCS8qIG51bWJlciBvZiBkYXRhIGJ1ZmZlcnMgYXZhaWxhYmxlICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRm9sbG93aW5nIGRlZmluaXRpb25zIHN0cnVjdHVyaXplIGNvbnRlbnRzIG9mIHRoZSBUWDI1TWJveC5kYXRhIGZpZWxkIGZvcgotICogZGlmZmVyZW50IFguMjUgaW50ZXJmYWNlIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogWDI1X1NFVF9HTE9CQUxfVkFSUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVHbG9iYWxWYXJzCi17Ci0JdW5zaWduZWQgY2hhciByZXNydglQQUNLRUQ7CS8qIDAwaDogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIGR0ckN0bAlQQUNLRUQ7CS8qIDAxaDogRFRSIGNvbnRyb2wgY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgcmVzRXJyCVBBQ0tFRDsJLyogMDFoOiAnMScgLSByZXNldCBtb2RlbSBlcnJvciAqLwotfSBUWDI1R2xvYmFsVmFyczsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAnZHRyQ3RsJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfUkFJU0VfRFRSCTB4MDEKLSNkZWZpbmUgWDI1X0RST1BfRFRSCTB4MDIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9NT0RFTV9TVEFUVVMgQ29tbWFuZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgWDI1TW9kZW1TdGF0dXMKLXsKLQl1bnNpZ25lZCBjaGFyCXN0YXR1cwlQQUNLRUQ7CQkvKiAwMGg6IG1vZGVtIHN0YXR1cyAqLwotfSBUWDI1TW9kZW1TdGF0dXM7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3N0YXR1cycgZmllbGQuCi0gKi8KLSNkZWZpbmUgWDI1X0NUU19NQVNLCTB4MjAKLSNkZWZpbmUgWDI1X0RDRF9NQVNLCTB4MDgKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19MSU5LX1NUQVRVUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVMaW5rU3RhdHVzCi17Ci0JdW5zaWduZWQgY2hhciB0eFF1ZXVlZAlQQUNLRUQ7CS8qIDAwaDogcXVldWVkIFR4IEktZnJhbWVzKi8KLQl1bnNpZ25lZCBjaGFyIHJ4UXVldWVkCVBBQ0tFRDsJLyogMDFoOiBxdWV1ZWQgUnggSS1mcmFtZXMqLwotCXVuc2lnbmVkIGNoYXIgc3RhdGlvbglQQUNLRUQ7CS8qIDAyaDogRFRFL0RDRSBjb25maWcuICovCi0JdW5zaWduZWQgY2hhciByZXNlcnZlZAlQQUNLRUQ7CS8qIDAzaDogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIHNmVGFsbHkJUEFDS0VEOwkvKiAwNGg6IHN1cGVydmlzb3J5IGZyYW1lIHRhbGx5ICovCi19IFRYMjVMaW5rU3RhdHVzOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdzdGF0aW9uJyBmaWVsZC4KLSAqLwotI2RlZmluZQlYMjVfU1RBVElPTl9EVEUJMHgwMQkvKiBzdGF0aW9uIGNvbmZpZ3VyZWQgYXMgRFRFICovCi0jZGVmaW5lIFgyNV9TVEFUSU9OX0RDRQkweDAyCS8qIHN0YXRpb24gY29uZmlndXJlZCBhcyBEQ0UgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19SRUFEX1NUQVRTIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IEhkbGNTdGF0cwotewkJCQkJCS8qCWEgbnVtYmVyIG9mIC4uLiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4SUZyYW1lcwlQQUNLRUQ7CS8qIDAwaDogcmVhZHkgUnggSS1mcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCByeE5vc2VxCQlQQUNLRUQ7CS8qIDAyaDogZnJtcyBvdXQtb2Ytc2VxdWVuY2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeE5vZGF0YQkJUEFDS0VEOwkvKiAwNGg6IEktZnJtcyB3aXRob3V0IGRhdGEgKi8KLQl1bnNpZ25lZCBzaG9ydCByeERpc2NhcmRlZAlQQUNLRUQ7CS8qIDA2aDogZGlzY2FyZGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4VG9vTG9uZwlQQUNLRUQ7CS8qIDA4aDogZnJhbWVzIHRvbyBsb25nICovCi0JdW5zaWduZWQgc2hvcnQgcnhCYWRBZGRyCVBBQ0tFRDsJLyogMEFoOiBmcm1zIHdpdGggaW52YWwuYWRkciovCi0JdW5zaWduZWQgc2hvcnQgdHhBY2tlZAkJUEFDS0VEOwkvKiAwQ2g6IGFja25vd2xlZGdlZCBJLWZybXMgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJldHJhbnNtCVBBQ0tFRDsJLyogMEVoOiByZS10cmFuc21pdC4gSS1mcm1zICovCi0JdW5zaWduZWQgc2hvcnQgdDFUaW1lb3V0CVBBQ0tFRDsJLyogMTBoOiBUMSB0aW1lb3V0cyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4U0FCTQkJUEFDS0VEOwkvKiAxMmg6IHJlY2VpdmVkIFNBQk0gZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgcnhESVNDCQlQQUNLRUQ7CS8qIDE0aDogcmVjZWl2ZWQgRElTQyBmcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCByeERNCQlQQUNLRUQ7CS8qIDE2aDogcmVjZWl2ZWQgRE0gZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgcnhGUk1SCQlQQUNLRUQ7CS8qIDE4aDogRlJNUiBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFNBQk0JCVBBQ0tFRDsJLyogMUFoOiB0cmFuc20uIFNBQk0gZnJhbWVzKi8KLQl1bnNpZ25lZCBzaG9ydCB0eERJU0MJCVBBQ0tFRDsJLyogMUNoOiB0cmFuc20uIERJU0MgZnJhbWVzKi8KLQl1bnNpZ25lZCBzaG9ydCB0eERNCQlQQUNLRUQ7CS8qIDFFaDogdHJhbnNtLiBETSBmcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eEZSTVIJCVBBQ0tFRDsJLyogMjBoOiB0cmFuc20uIEZSTVIgZnJhbWVzKi8KLX0gVEhkbGNTdGF0czsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19SRUFEX0NPTU1fRVJSIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IEhkbGNDb21tRXJyCi17CQkJCQkJLyoJYSBudW1iZXIgb2YgLi4uICovCi0JdW5zaWduZWQgY2hhciByeE92ZXJydW4JCVBBQ0tFRDsJLyogMDBoOiBSeCBvdmVycnVuIGVycm9ycyAqLwotCXVuc2lnbmVkIGNoYXIgcnhCYWRDcmMJCVBBQ0tFRDsJLyogMDFoOiBSeCBDUkMgZXJyb3JzICovCi0JdW5zaWduZWQgY2hhciByeEFib3J0ZWQJCVBBQ0tFRDsJLyogMDJoOiBSeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIgcnhEcm9wcGVkCQlQQUNLRUQ7CS8qIDAzaDogZnJhbWVzIGxvc3QgKi8KLQl1bnNpZ25lZCBjaGFyIHR4QWJvcnRlZAkJUEFDS0VEOwkvKiAwNGg6IFR4IGFib3J0ZWQgZnJhbWVzICovCi0JdW5zaWduZWQgY2hhciB0eFVuZGVycnVuCVBBQ0tFRDsJLyogMDVoOiBUeCB1bmRlcnJ1biBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyIHR4TWlzc0ludHIJUEFDS0VEOwkvKiAwNmg6IG1pc3NlZCB1bmRlcnJ1biBpbnRzICovCi0JdW5zaWduZWQgY2hhciByZXNlcnZlZAkJUEFDS0VEOwkvKiAwN2g6IHJlc2VydmVkICovCi0JdW5zaWduZWQgY2hhciBkcm9wcGVkRENECVBBQ0tFRDsJLyogMDhoOiB0aW1lcyBEQ0QgZHJvcHBlZCAqLwotCXVuc2lnbmVkIGNoYXIgZHJvcHBlZENUUwlQQUNLRUQ7CS8qIDA5aDogdGltZXMgQ1RTIGRyb3BwZWQgKi8KLX0gVEhkbGNDb21tRXJyOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFgyNV9TRVRfQ09ORklHVVJBVElPTiAmIFgyNV9SRUFEX0NPTkZJR1VSQVRJT04gQ29tbWFuZHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNUNvbmZpZwotewotdW5zaWduZWQgY2hhciBiYXVkUmF0ZQkJUEFDS0VEOwkvKiAwMGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDEJCVBBQ0tFRDsJLyogMDFoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQyCQlQQUNLRUQ7CS8qIDAyaDogICovCi0JdW5zaWduZWQgY2hhciBuMgkJUEFDS0VEOwkvKiAwM2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGhkbGNNVFUJCVBBQ0tFRDsJLyogMDRoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGhkbGNXaW5kb3cJUEFDS0VEOwkvKiAwNmg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDQJCVBBQ0tFRDsJLyogMDdoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGF1dG9Nb2RlbQkJUEFDS0VEOwkvKiAwOGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgYXV0b0hkbGMJCVBBQ0tFRDsJLyogMDloOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGhkbGNPcHRpb25zCVBBQ0tFRDsJLyogMEFoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHN0YXRpb24JCVBBQ0tFRDsJLyogMEJoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHBrdFdpbmRvdwkJUEFDS0VEOwkvKiAwQ2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGRlZlBrdFNpemUJUEFDS0VEOwkvKiAwRGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IHBrdE1UVQkJUEFDS0VEOwkvKiAwRmg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvUFZDCQlQQUNLRUQ7CS8qIDExaDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlQVkMJCVBBQ0tFRDsJLyogMTNoOiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb0luY29tbWluZ1NWQwlQQUNLRUQ7CS8qIDE1aDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlJbmNvbW1pbmdTVkMJUEFDS0VEOwkvKiAxN2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvVHdvV2F5U1ZDCVBBQ0tFRDsJLyogMTloOiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaVR3b1dheVNWQwlQQUNLRUQ7CS8qIDFCaDogICovCi0JdW5zaWduZWQgc2hvcnQgbG9PdXRnb2luZ1NWQwlQQUNLRUQ7CS8qIDFEaDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlPdXRnb2luZ1NWQwlQQUNLRUQ7CS8qIDFGaDogICovCi0JdW5zaWduZWQgc2hvcnQgb3B0aW9ucwkJUEFDS0VEOwkvKiAyMWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgcmVzcG9uc2VPcHQJUEFDS0VEOwkvKiAyM2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGZhY2lsMQkJUEFDS0VEOwkvKiAyNGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGZhY2lsMgkJUEFDS0VEOwkvKiAyNmg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGNjaXR0RmFjaWwJUEFDS0VEOwkvKiAyOGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IG90aGVyRmFjaWwJUEFDS0VEOwkvKiAyQWg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGNjaXR0Q29tcGF0CVBBQ0tFRDsJLyogMkNoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQxMHQyMAkJUEFDS0VEOwkvKiAyRWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDExdDIxCQlQQUNLRUQ7CS8qIDJGaDogICovCi0JdW5zaWduZWQgY2hhciB0MTJ0MjIJCVBBQ0tFRDsJLyogMzBoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQxM3QyMwkJUEFDS0VEOwkvKiAzMWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDE2dDI2CQlQQUNLRUQ7CS8qIDMySDogICovCi0JdW5zaWduZWQgY2hhciB0MjgJCVBBQ0tFRDsJLyogMzNoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHIxMHIyMAkJUEFDS0VEOwkvKiAzNGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgcjEycjIyCQlQQUNLRUQ7CS8qIDM1aDogICovCi0JdW5zaWduZWQgY2hhciByMTNyMjMJCVBBQ0tFRDsJLyogMzZoOiAgKi8KLX0gVFgyNUNvbmZpZzsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9DSEFOTkVMX0NPTkZJRyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVDaGFuQWxsb2MJCQkvKi0tLS0tIENoYW5uZWwgYWxsb2NhdGlvbiAtKi8KLXsKLQl1bnNpZ25lZCBzaG9ydCBsb1BWQwkJUEFDS0VEOwkvKiAwMGg6IGxvd2VzdCBQVkMgbnVtYmVyICovCi0JdW5zaWduZWQgc2hvcnQgaGlQVkMJCVBBQ0tFRDsJLyogMDJoOiBoaWdoZXN0IFBWQyBudW1iZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb0luY29tbWluZ1NWQwlQQUNLRUQ7CS8qIDA0aDogbG93ZXN0IGluY29taW5nIFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGhpSW5jb21taW5nU1ZDCVBBQ0tFRDsJLyogMDZoOiBoaWdoZXN0IGluY29taW5nIFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGxvVHdvV2F5U1ZDCVBBQ0tFRDsJLyogMDhoOiBsb3dlc3QgdHdvLXdheSBTVkMgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaVR3b1dheVNWQwlQQUNLRUQ7CS8qIDBBaDogaGlnaGVzdCB0d28td2F5IFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGxvT3V0Z29pbmdTVkMJUEFDS0VEOwkvKiAwQ2g6IGxvd2VzdCBvdXRnb2luZyBTVkMgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaU91dGdvaW5nU1ZDCVBBQ0tFRDsJLyogMEVoOiBoaWdoZXN0IG91dGdvaW5nIFNWQyAqLwotfSBUWDI1Q2hhbkFsbG9jOwotCi10eXBlZGVmIHN0cnVjdCBYMjVDaGFuQ2ZnCQkvKi0tLS0tLSBDaGFubmVsIGNvbmZpZ3VyYXRpb24gLS0tLS0qLwotewotCXVuc2lnbmVkIGNoYXIgdHlwZQlQQUNLRUQ7CS8qIDAwaDogY2hhbm5lbCB0eXBlICovCi0JdW5zaWduZWQgY2hhciB0eENvbmYJUEFDS0VEOwkvKiAwMWg6IFR4IHBhY2tldCBhbmQgd2luZG93IHNpemVzICovCi0JdW5zaWduZWQgY2hhciByeENvbmYJUEFDS0VEOwkvKiAwMWg6IFJ4IHBhY2tldCBhbmQgd2luZG93IHNpemVzICovCi19IFRYMjVDaGFuQ2ZnOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICd0eXBlJyBmaWVsZC4KLSAqLwotI2RlZmluZQlYMjVfUFZDICAJMHgwMQkvKiBQVkMgKi8KLSNkZWZpbmUJWDI1X1NWQ19JTgkweDAzCS8qIEluY29taW5nIFNWQyAqLwotI2RlZmluZQlYMjVfU1ZDX1RXT1dBWQkweDA3CS8qIFR3by13YXkgU1ZDICovCi0jZGVmaW5lCVgyNV9TVkNfT1VUCTB4MEIJLyogT3V0Z29pbmcgU1ZDICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogWDI1X1JFQURfU1RBVElTVElDUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVTdGF0cwotewkJCQkJCS8qIG51bWJlciBvZiBwYWNrZXRzIFR4L1J4J2VkICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZXN0YXJ0UnFzdAlQQUNLRUQ7CS8qIDAwaDogUmVzdGFydCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXN0YXJ0UnFzdAlQQUNLRUQ7CS8qIDAyaDogUmVzdGFydCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZXN0YXJ0Q29uZglQQUNLRUQ7CS8qIDA0aDogUmVzdGFydCBDb25maXJtYXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCByeFJlc3RhcnRDb25mCVBBQ0tFRDsJLyogMDZoOiBSZXN0YXJ0IENvbmZpcm1hdGlvbiAqLwotCXVuc2lnbmVkIHNob3J0IHR4UmVzZXRScXN0CVBBQ0tFRDsJLyogMDhoOiBSZXNldCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXNldFJxc3QJUEFDS0VEOwkvKiAwQWg6IFJlc2V0IFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJlc2V0Q29uZglQQUNLRUQ7CS8qIDBDaDogUmVzZXQgQ29uZmlybWF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXNldENvbmYJUEFDS0VEOwkvKiAwRWg6IFJlc2V0IENvbmZpcm1hdGlvbiAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2FsbFJlcXVlc3QJUEFDS0VEOwkvKiAxMGg6IENhbGwgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Q2FsbFJlcXVlc3QJUEFDS0VEOwkvKiAxMmg6IENhbGwgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2FsbEFjY2VwdAlQQUNLRUQ7CS8qIDE0aDogQ2FsbCBBY2NlcHQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeENhbGxBY2NlcHQJUEFDS0VEOwkvKiAxNmg6IENhbGwgQWNjZXB0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhDbGVhclJxc3QJUEFDS0VEOwkvKiAxOGg6IENsZWFyIFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeENsZWFyUnFzdAlQQUNLRUQ7CS8qIDFBaDogQ2xlYXIgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2xlYXJDb25mCVBBQ0tFRDsJLyogMUNoOiBDbGVhciBDb25maXJtYXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCByeENsZWFyQ29uZglQQUNLRUQ7CS8qIDFFaDogQ2xlYXIgQ29uZmlybWF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgdHhEaWFnbm9zdGljCVBBQ0tFRDsJLyogMjBoOiBEaWFnbm9zdGljICovCi0JdW5zaWduZWQgc2hvcnQgcnhEaWFnbm9zdGljCVBBQ0tFRDsJLyogMjJoOiBEaWFnbm9zdGljICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZWdScXN0CVBBQ0tFRDsJLyogMjRoOiBSZWdpc3RyYXRpb24gUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4UmVnUnFzdAlQQUNLRUQ7CS8qIDI2aDogUmVnaXN0cmF0aW9uIFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJlZ0NvbmYJUEFDS0VEOwkvKiAyOGg6IFJlZ2lzdHJhdGlvbiBDb25maXJtLiovCi0JdW5zaWduZWQgc2hvcnQgcnhSZWdDb25mCVBBQ0tFRDsJLyogMkFoOiBSZWdpc3RyYXRpb24gQ29uZmlybS4qLwotCXVuc2lnbmVkIHNob3J0IHR4SW50ZXJydXB0CVBBQ0tFRDsJLyogMkNoOiBJbnRlcnJ1cHQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeEludGVycnVwdAlQQUNLRUQ7CS8qIDJFaDogSW50ZXJydXB0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhJbnRyQ29uZglQQUNLRUQ7CS8qIDMwaDogSW50ZXJydXB0IENvbmZpcm0uICovCi0JdW5zaWduZWQgc2hvcnQgcnhJbnRyQ29uZglQQUNLRUQ7CS8qIDMyaDogSW50ZXJydXB0IENvbmZpcm0uICovCi0JdW5zaWduZWQgc2hvcnQgdHhEYXRhCQlQQUNLRUQ7CS8qIDM0aDogRGF0YSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4RGF0YQkJUEFDS0VEOwkvKiAzNmg6IERhdGEgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJSCQlQQUNLRUQ7CS8qIDM4aDogUlIgKi8KLQl1bnNpZ25lZCBzaG9ydCByeFJSCQlQQUNLRUQ7CS8qIDNBaDogUlIgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJOUgkJUEFDS0VEOwkvKiAzQ2g6IFJOUiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Uk5SCQlQQUNLRUQ7CS8qIDNFaDogUk5SICovCi19IFRYMjVTdGF0czsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9ISVNUT1JZX1RBQkxFIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNUV2ZW50TG9nCi17Ci0JdW5zaWduZWQgY2hhcgl0eXBlCVBBQ0tFRDsJLyogMDBoOiB0cmFuc2FjdGlvbiB0eXBlICovCi0JdW5zaWduZWQgc2hvcnQJbGNuCVBBQ0tFRDsJLyogMDFoOiBsb2dpY2FsIGNoYW5uZWwgbnVtICovCi0JdW5zaWduZWQgY2hhcglwYWNrZXQJUEFDS0VEOwkvKiAwM2g6IGFzeW5jIHBhY2tldCB0eXBlICovCi0JdW5zaWduZWQgY2hhcgljYXVzZQlQQUNLRUQ7CS8qIDA0aDogWC4yNSBjYXVzZSBmaWVsZCAqLwotCXVuc2lnbmVkIGNoYXIJZGlhZwlQQUNLRUQ7CS8qIDA1aDogWC4yNSBkaWFnIGZpZWxkICovCi0JVFgyNVRpbWVTdGFtcAl0cwlQQUNLRUQ7CS8qIDA2aDogdGltZSBzdGFtcCAqLwotfSBUWDI1RXZlbnRMb2c7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNUxPR19JTkNPTU1JTkcJMHgwMAotI2RlZmluZSBYMjVMT0dfQVBQTElDQVRJT04gCTB4MDEKLSNkZWZpbmUgWDI1TE9HX0FVVE9NQVRJQwkweDAyCi0jZGVmaW5lIFgyNUxPR19FUlJPUgkJMHgwNAotI2RlZmluZSBYMjVMT0dfVElNRU9VVAkJMHgwOAotI2RlZmluZSBYMjVMT0dfUkVDT1ZFUlkJCTB4MTAKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAncGFja2V0JyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVMT0dfQ0FMTF9SUVNUCTB4MEIKLSNkZWZpbmUgWDI1TE9HX0NBTExfQUNDRVBURUQJMHgwRgotI2RlZmluZSBYMjVMT0dfQ0xFQVJfUlFTVAkweDEzCi0jZGVmaW5lIFgyNUxPR19DTEVBUl9DT05GUk0JMHgxNwotI2RlZmluZSBYMjVMT0dfUkVTRVRfUlFTVAkweDFCCi0jZGVmaW5lIFgyNUxPR19SRVNFVF9DT05GUk0JMHgxRgotI2RlZmluZSBYMjVMT0dfUkVTVEFSVF9SUVNUCTB4RkIKLSNkZWZpbmUgWDI1TE9HX1JFU1RBUlRfQ09NRlJNCTB4RkYKLSNkZWZpbmUgWDI1TE9HX0RJQUdOT1NUSUMJMHhGMQotI2RlZmluZSBYMjVMT0dfRFRFX1JFR19SUVNUCTB4RjMKLSNkZWZpbmUgWDI1TE9HX0RURV9SRUdfQ09NRlJNCTB4RjcKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfVFJBQ0VfQ09ORklHVVJFIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRyYWNlQ2ZnCi17Ci0JdW5zaWduZWQgY2hhciBmbGFncwlQQUNLRUQ7CS8qIDAwaDogdHJhY2UgY29uZmlndXJhdGlvbiBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgdGltZW91dAlQQUNLRUQ7CS8qIDAxaDogdGltZW91dCBmb3IgdHJhY2UgZGVsYXkgbW9kZSovCi19IFRYMjVUcmFjZUNmZzsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAnZmxhZ3MnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNV9UUkNfRU5BQkxFCQkweDAxCS8qIGJpdDA6ICcxJyAtIHRyYWNlIGVuYWJsZWQgKi8KLSNkZWZpbmUgWDI1X1RSQ19USU1FU1RBTVAJMHgwMgkvKiBiaXQxOiAnMScgLSB0aW1lIHN0YW1waW5nIGVuYWJsZWQqLwotI2RlZmluZSBYMjVfVFJDX0RFTEFZCQkweDA0CS8qIGJpdDI6ICcxJyAtIHRyYWNlIGRlbGF5IGVuYWJsZWQgKi8KLSNkZWZpbmUgWDI1X1RSQ19EQVRBCQkweDA4CS8qIGJpdDM6ICcxJyAtIHRyYWNlIGRhdGEgcGFja2V0cyAqLwotI2RlZmluZSBYMjVfVFJDX1NVUEVSVklTT1JZCTB4MTAgICAgLyogYml0NDogJzEnIC0gdHJhY2Ugc3VwcnZpc29yeSBwa3RzKi8KLSNkZWZpbmUgWDI1X1RSQ19BU1lOQ0hST05PVVMJMHgyMAkvKiBiaXQ1OiAnMScgLSB0cmFjZSBhc3luY2guIHBhY2tldHMqLwotI2RlZmluZSBYMjVfVFJDX0hETEMJCTB4NDAJLyogYml0NjogJzEnIC0gdHJhY2UgYWxsIHBhY2tldHMgKi8KLSNkZWZpbmUgWDI1X1RSQ19SRUFECQkweDgwCS8qIGJpdDc6ICcxJyAtIGdldCBjdXJyZW50IGNvbmZpZy4gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9UUkFDRV9EQVRBIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRyYWNlCQkJLyotLS0tLSBUcmFjZSBkYXRhIHN0cnVjdHVyZSAtLS0tLS0tKi8KLXsKLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiAwMGg6IHRyYWNlIGRhdGEgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciB0eXBlCVBBQ0tFRDsJLyogMDJoOiB0cmFjZSB0eXBlICovCi0JdW5zaWduZWQgY2hhciBsb3N0X2NudAlQQUNLRUQ7CS8qIDAzaDogTiBvZiB0cmFjZXMgbG9zdCAqLwotCVRYMjVUaW1lU3RhbXAgdHN0YW1wCVBBQ0tFRDsJLyogMDRoOiBtb24vZGF0ZS9zZWMvbWluL2hvdXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBtaWxsaXNlYwlQQUNLRUQ7CS8qIDA5aDogbXMgdGltZSBzdGFtcCAqLwotCXVuc2lnbmVkIGNoYXIgZGF0YVswXQlQQUNLRUQ7CS8qIDBCaDogdHJhY2VkIGZyYW1lICovCi19IFRYMjVUcmFjZTsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAndHlwZScgZmllbGQuCi0gKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX01BU0sJMHgwRgkvKiBiaXRzIDAuLjM6IHRyYWNlIHR5cGUgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX1JYX0ZSQU1FCTB4MDAJLyogcmVjZWl2ZWQgZnJhbWUgdHJhY2UgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX1RYX0ZSQU1FCTB4MDEJLyogdHJhbnNtaXR0ZWQgZnJhbWUgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX0VSUl9GUkFNRQkweDAyCS8qIGVycm9yIGZyYW1lICovCi0KLSNkZWZpbmUgWDI1X1RSQ19FUlJPUl9NQVNLCTB4RjAJLyogYml0cyA0Li43OiBlcnJvciBjb2RlICovCi0jZGVmaW5lIFgyNV9UUkNFUlJfUlhfQUJPUlQJMHgxMAkvKiByZWNlaXZlIGFib3J0IGVycm9yICovCi0jZGVmaW5lIFgyNV9UUkNFUlJfUlhfQkFEQ1JDCTB4MjAJLyogcmVjZWl2ZSBDUkMgZXJyb3IgKi8KLSNkZWZpbmUgWDI1X1RSQ0VSUl9SWF9PVkVSUlVOCTB4MzAJLyogcmVjZWl2ZXIgb3ZlcnJ1biBlcnJvciAqLwotI2RlZmluZSBYMjVfVFJDRVJSX1JYX1RPT19MT05HCTB4NDAJLyogZXhjZXNzaXZlIGZyYW1lIGxlbmd0aCBlcnJvciAqLwotI2RlZmluZSBYMjVfVFJDRVJSX1RYX0FCT1JUCTB4NzAJLyogYWJvcnRlZCBmcmFtZSB0cmFuc21pdHRpb24gZXJyb3IgKi8KLSNkZWZpbmUgWDI1X1RSQ0VSUl9UWF9VTkRFUlJVTgkweDgwCS8qIHRyYW5zbWl0IHVuZGVycnVuIGVycm9yICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRm9sbG93aW5nIGRlZmluaXRpb25zIGRlc2NyaWJlIEhETEMgZnJhbWUgYW5kIFguMjUgcGFja2V0IGZvcm1hdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlwZWRlZiBzdHJ1Y3QgSERMQ0ZyYW1lCQkvKi0tLS0tIERITEMgRnJhbWUgRm9ybWF0IC0tLS0tLS0tLS0qLwotewotCXVuc2lnbmVkIGNoYXIgYWRkcglQQUNLRUQ7CS8qIGFkZHJlc3MgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyIGNudGwJUEFDS0VEOwkvKiBjb250cm9sIGZpZWxkICovCi0JdW5zaWduZWQgY2hhciBkYXRhWzBdCVBBQ0tFRDsKLX0gVEhETENGcmFtZTsKLQotdHlwZWRlZiBzdHJ1Y3QgWDI1UGt0CQkJLyotLS0tLSBYLjI1IFBha2V0IEZvcm1hdCAtLS0tLS0tLS0tKi8KLXsKLQl1bnNpZ25lZCBjaGFyIGxjbl9oaQlQQUNLRUQ7CS8qIDQgTVNCIG9mIExvZ2ljYWwgQ2hhbm5lbCBOdW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyIGxjbl9sbwlQQUNLRUQ7CS8qIDggTFNCIG9mIExvZ2ljYWwgQ2hhbm5lbCBOdW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyIHR5cGUJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgZGF0YVswXQlQQUNLRUQ7Ci19IFRYMjVQa3Q7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ2xjbl9oaScgZmllbGQuCi0gKi8KLSNkZWZpbmUJWDI1X1FfQklUX01BU0sJCTB4ODAJLyogRGF0YSBRdWFsaWZpZXIgQml0IG1hc2sgKi8KLSNkZWZpbmUJWDI1X0RfQklUX01BU0sJCTB4NDAJLyogRGVsaXZlcnkgQ29uZmlybWF0aW9uIEJpdCBtYXNrICovCi0jZGVmaW5lCVgyNV9NX0JJVFNfTUFTSwkJMHgzMAkvKiBNb2R1bG8gQml0cyBtYXNrICovCi0jZGVmaW5lCVgyNV9MQ05fTVNCX01BU0sJMHgwRgkvKiBMQ04gbW9zdCBzaWduaWZpY2FudCBiaXRzIG1hc2sgKi8KLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAndHlwZScgZmllbGQuCi0gKi8KLSNkZWZpbmUJWDI1UEtUX0RBVEEJCTB4MDEJLyogRGF0YSBwYWNrZXQgbWFzayAqLwotI2RlZmluZQlYMjVQS1RfU1VQRVJWSVNPUlkJMHgwMgkvKiBTdXBlcnZpc29yeSBwYWNrZXQgbWFzayAqLwotI2RlZmluZQlYMjVQS1RfQ0FMTF9SUVNUCTB4MEIJLyogQ2FsbCBSZXF1ZXN0L0luY29taW5nICovCi0jZGVmaW5lCVgyNVBLVF9DQUxMX0FDQ0VQVEVECTB4MEYJLyogQ2FsbCBBY2NlcHRlZC9Db25uZWN0ZWQgKi8KLSNkZWZpbmUJWDI1UEtUX0NMRUFSX1JRU1QJMHgxMwkvKiBDbGVhciBSZXF1ZXN0L0luZGljYXRpb24gKi8KLSNkZWZpbmUJWDI1UEtUX0NMRUFSX0NPTkZSTQkweDE3CS8qIENsZWFyIENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTRVRfUlFTVAkweDFCCS8qIFJlc2V0IFJlcXVlc3QvSW5kaWNhdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTRVRfQ09ORlJNCTB4MUYJLyogUmVzZXQgQ29uZmlybWF0aW9uICovCi0jZGVmaW5lCVgyNVBLVF9SRVNUQVJUX1JRU1QJMHhGQgkvKiBSZXN0YXJ0IFJlcXVlc3QvSW5kaWNhdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTVEFSVF9DT05GUk0JMHhGRgkvKiBSZXN0YXJ0IENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfSU5URVJSVVBUCTB4MjMJLyogSW50ZXJydXB0ICovCi0jZGVmaW5lCVgyNVBLVF9JTlRFUlJVUFRfQ09ORlJNCTB4MjcJLyogSW50ZXJydXB0IENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfRElBR05PU1RJQwkweEYxCS8qIERpYWdub3N0aWMgKi8KLSNkZWZpbmUJWDI1UEtUX1JFR0lTVFJfUlFTVAkweEYzCS8qIFJlZ2lzdHJhdGlvbiBSZXF1ZXN0ICovCi0jZGVmaW5lCVgyNVBLVF9SRUdJU1RSX0NPTkZSTQkweEY3CS8qIFJlZ2lzdHJhdGlvbiBDb25maXJtYXRpb24gKi8KLSNkZWZpbmUJWDI1UEtUX1JSX01BU0tFRAkweDAxCS8qIFJlY2VpdmUgUmVhZHkgcGFja2V0IGFmdGVyIG1hc2tpbmcgKi8KLSNkZWZpbmUJWDI1UEtUX1JOUl9NQVNLRUQJMHgwNQkvKiBSZWNlaXZlIE5vdCBSZWFkeSBhZnRlciBtYXNraW5nICAqLwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlUWDI1Q21kIGNtZAkJUEFDS0VEOwotCWNoYXIgZGF0YVtYMjVfTUFYX0RBVEFdCVBBQ0tFRDsKLX0gbWJveF9jbWRfdDsKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciAgcWRtCVBBQ0tFRDsJLyogUS9EL00gYml0cyAqLwotCXVuc2lnbmVkIGNoYXIgIGNhdXNlCVBBQ0tFRDsJLyogY2F1c2UgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyICBkaWFnbglQQUNLRUQ7CS8qIGRpYWdub3N0aWNzICovCi0JdW5zaWduZWQgY2hhciAgcGt0VHlwZSAgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGxlbmd0aCAgIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGxjbglQQUNLRUQ7Ci0JY2hhciByZXNlcnZlZFs3XQlQQUNLRUQ7Ci19eDI1YXBpX2hkcl90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl4MjVhcGlfaGRyX3QgaGRyCVBBQ0tFRDsKLQljaGFyIGRhdGFbWDI1X01BWF9EQVRBXQlQQUNLRUQ7Ci19eDI1YXBpX3Q7Ci0KLQotLyogCi0gKiBYUElQRU1PTiBEZWZpbml0aW9ucwotICovCi0KLS8qIHZhbGlkIGlwX3Byb3RvY29sIGZvciBVRFAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBVRFBNR01UX1VEUF9QUk9UT0NPTCAweDExCi0jZGVmaW5lIFVEUE1HTVRfWFBJUEVfU0lHTkFUVVJFICAgICAgICAgIlhMSU5LOE5EIgotI2RlZmluZSBVRFBNR01UX0RSVlJTVEFUU19TSUdOQVRVUkUgICAgICJEUlZTVEFUUyIKLQotLyogdmFsdWVzIGZvciByZXF1ZXN0L3JlcGx5IGJ5dGUgKi8KLSNkZWZpbmUgVURQTUdNVF9SRVFVRVNUCTB4MDEKLSNkZWZpbmUgVURQTUdNVF9SRVBMWQkweDAyCi0jZGVmaW5lIFVEUF9PRkZTRVQJMTIKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyAgUEFDS0VEOyAvKiB0aGUgb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBjaGFyIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiB0cmFuc2ZlciBkYXRhIGxlbmd0aCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzdWx0CVBBQ0tFRDsJLyogcmV0dXJuIGNvZGUgKi8KLQl1bnNpZ25lZCBjaGFyIHBmCVBBQ0tFRDsJLyogUC9GIGJpdCAqLwotCXVuc2lnbmVkIHNob3J0IGxjbglQQUNLRUQ7CS8qIGxvZ2ljYWwgY2hhbm5lbCAqLwotCXVuc2lnbmVkIGNoYXIgcWRtCVBBQ0tFRDsJLyogUS9EL00gYml0cyAqLwotCXVuc2lnbmVkIGNoYXIgY2F1c2UJUEFDS0VEOwkvKiBjYXVzZSBmaWVsZCAqLwotCXVuc2lnbmVkIGNoYXIgZGlhZ24JUEFDS0VEOwkvKiBkaWFnbm9zdGljcyAqLwotCXVuc2lnbmVkIGNoYXIgcGt0VHlwZQlQQUNLRUQ7CS8qIHBhY2tldCB0eXBlICovCi0JdW5zaWduZWQgY2hhciByZXNydls0XQlQQUNLRUQ7CS8qIHJlc2VydmVkICovCi19IGNibG9ja190OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JaXBfcGt0X3QgCQlpcF9wa3QJCVBBQ0tFRDsKLQl1ZHBfcGt0X3QJCXVkcF9wa3QJCVBBQ0tFRDsKLQl3cF9tZ210X3QgCQl3cF9tZ210ICAgICAgIAlQQUNLRUQ7Ci0gICAgICAgIGNibG9ja190ICAgICAgICAgICAgICAgIGNibG9jayAgICAgICAgICBQQUNLRUQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIGRhdGFbNDA4MF0gICAgICBQQUNLRUQ7Ci19IHgyNV91ZHBfcGt0X3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgcmVhZF9oZGxjX3N0YXQgewotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfb2sgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X291dF9vZl9zZXEgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfbm9fZGF0YSBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc19yeF9kcm9wcGVkIFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X2RhdGFfdG9vX2xvbmcgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfaW52YWxpZF9hZGRyIFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3R4X29rIFBBQ0tFRDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc190eF9yZXRyYW5zbWl0IFBBQ0tFRDsKLSAgICAgICAJdW5zaWduZWQgc2hvcnQgVDFfdGltZW91dHMgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IFNBQk1fZnJhbWVzX3J4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBESVNDX2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgRE1fZnJhbWVzX3J4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBGUk1SX2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgU0FCTV9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IERJU0NfZnJhbWVzX3R4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBETV9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IEZSTVJfZnJhbWVzX3R4IFBBQ0tFRDsKLX0gcmVhZF9oZGxjX3N0YXRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVhZF9jb21tc19lcnJfc3RhdHN7Ci0JdW5zaWduZWQgY2hhciBvdmVycnVuX2Vycl9yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBDUkNfZXJyIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIGFib3J0X2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBmcmFtZXNfZHJvcHBlZF9idWZfZnVsbCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBhYm9ydF9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNtaXRfdW5kZXJydW5zIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIG1pc3NlZF90eF91bmRlcnJ1bnNfaW50ciBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciByZXNlcnZlZCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBEQ0RfZHJvcCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBDVFNfZHJvcCBQQUNLRUQ7Ci19IHJlYWRfY29tbXNfZXJyX3N0YXRzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHRyYWNlX2RhdGEgewotCXVuc2lnbmVkIHNob3J0IGxlbmd0aCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgdHlwZSBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgdHJhY2VfZHJvcHBlZCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWRbNV0gUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IHRpbWVzdGFtcCBQQUNLRUQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgIGRhdGEgUEFDS0VEOwotfSB0cmFjZV9kYXRhX3Q7Ci0KLWVudW0ge1VEUF9YUElQRV9UWVBFfTsKLQotI2RlZmluZSBYUElQRV9FTkFCTEVfVFJBQ0lORyAgICAgICAgICAgICAgICAgICAgMHgxNAotI2RlZmluZSBYUElQRV9ESVNBQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgMHgxNAotI2RlZmluZSBYUElQRV9HRVRfVFJBQ0VfSU5GTyAgICAgICAgICAgICAgICAgICAgMHgxNgotI2RlZmluZSBYUElQRV9GVDFfUkVBRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgMHg3NAotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9JRlNFTkQgICAgICAgICAgICAgICAgMHg3NQotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9JTlRSICAgICAgICAgICAgICAgICAgMHg3NgotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9HRU4gICAgICAgICAgICAgICAgICAgMHg3NwotI2RlZmluZSBYUElQRV9GTFVTSF9EUklWRVJfU1RBVFMgICAgICAgICAgICAgICAgMHg3OAotI2RlZmluZSBYUElQRV9ST1VURVJfVVBfVElNRSAgICAgICAgICAgICAgICAgICAgMHg3OSAgICAgICAgCi0jZGVmaW5lIFhQSVBFX1NFVF9GVDFfTU9ERQkJCTB4ODEKLSNkZWZpbmUgWFBJUEVfRlQxX1NUQVRVU19DVFJMCQkJMHg4MAotCi0KLS8qIGVycm9yIG1lc3NhZ2VzICovCi0jZGVmaW5lIE5PX0JVRkZTX09SX0NMT1NFRF9XSU4gIDB4MzMKLSNkZWZpbmUgREFUQV9MRU5HVEhfVE9PX0JJRyAgICAgMHgzMgotI2RlZmluZSBOT19EQVRBX0FWQUlMQUJMRSAgICAgICAweDMzCi0jZGVmaW5lIFo4MF9USU1FT1VUX0VSUk9SICAgICAgIDB4MGEgICAKLSNkZWZpbmUJTk9fQlVGRlMJCTB4MDgKLQotCi0vKiBUcmFjZSBvcHRpb25zICovCi0jZGVmaW5lIFRSQUNFX0RFRkFVTFQJCTB4MDMKLSNkZWZpbmUgVFJBQ0VfU1VQRVJWSVNPUl9GUk1TCTB4MTAKLSNkZWZpbmUgVFJBQ0VfQVNZTkNfRlJNUwkweDIwCi0jZGVmaW5lIFRSQUNFX0FMTF9IRExDX0ZSTVMJMHg0MAotI2RlZmluZSBUUkFDRV9EQVRBX0ZSTVMJCTB4MDgKLQotCi0jZW5kaWYJLyogX1NETEFfWDI1X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYWRydi5oIGIvaW5jbHVkZS9saW51eC9zZGxhZHJ2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NWUxMDMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhZHJ2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYWRydi5oCVNETEEgU3VwcG9ydCBNb2R1bGUuICBLZXJuZWwgQVBJIERlZmluaXRpb25zLgotKgotKiBBdXRob3I6IAlHaWRlb24gSGFjawkKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogSnVuIDAyLCAxOTk5IAlHaWRlb24gSGFjawlBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBQQ0kgYWRhcHRlci4KLSogRGVjIDExLCAxOTk2CUdlbmUgS296aW4JQ29tcGxldGUgb3ZlcmhhdWwuCi0qIE9jdCAxNywgMTk5NglHZW5lIEtvemluCU1pbm9yIGJ1ZyBmaXhlcy4KLSogSnVuIDEyLCAxOTk2CUdlbmUgS296aW4gCUFkZGVkIHN1cHBvcnQgZm9yIFM1MDMgY2FyZC4KLSogRGVjIDA2LCAxOTk1CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBRFJWX0gKLSNkZWZpbmUJX1NETEFEUlZfSAotCi0KLSNkZWZpbmUJU0RMQV9NQVhJT1JBTkdFCTQJLyogbWF4aW11bSBJL08gcG9ydCByYW5nZSAqLwotI2RlZmluZQlTRExBX1dJTkRPV1NJWkUJMHgyMDAwCS8qIGRlZmF1bHQgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgc2l6ZSAqLwotLyoqKioqKiBEYXRhIFN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQWRhcHRlciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBQb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byBhbGwKLSAqIEFQSXMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHNkbGFodwotewotCXVuc2lnbmVkIHR5cGU7CQkJLyogYWRhcHRlciB0eXBlICovCi0JdW5zaWduZWQgZndpZDsJCQkvKiBmaXJtd2FyZSBJRCAqLwotCXVuc2lnbmVkIHBvcnQ7CQkJLyogYWRhcHRlciBJL08gcG9ydCBiYXNlICovCi0JaW50IGlycTsJCQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCBsZXZlbCAqLwotCWNoYXIgUzUxNF9jcHVfbm9bMV07CQkvKiBQQ0kgQ1BVIE51bWJlciAqLwotCXVuc2lnbmVkIGNoYXIgUzUxNF9zbG90X25vOwkvKiBQQ0kgU2xvdCBOdW1iZXIgKi8KLQljaGFyIGF1dG9fcGNpX2NmZzsJCS8qIEF1dG9kZXRlY3QgUENJIFNsb3QgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLwotCXZvaWQgKiBkcG1iYXNlOwkJCS8qIGR1YWwtcG9ydCBtZW1vcnkgYmFzZSAqLwotCXVuc2lnbmVkIGRwbXNpemU7CQkvKiBkdWFsLXBvcnQgbWVtb3J5IHNpemUgKi8KLQl1bnNpZ25lZCBwY2xrOwkJCS8qIENQVSBjbG9jayByYXRlLCBrSHogKi8KLQl1bnNpZ25lZCBsb25nIG1lbW9yeTsJCS8qIG1lbW9yeSBzaXplICovCi0JdW5zaWduZWQgbG9uZyB2ZWN0b3I7CQkvKiBsb2NhbCBvZmZzZXQgb2YgdGhlIERQTSB3aW5kb3cgKi8KLQl1bnNpZ25lZCBpb19yYW5nZTsJCS8qIEkvTyBwb3J0IHJhbmdlICovCi0JdW5zaWduZWQgY2hhciByZWdzW1NETEFfTUFYSU9SQU5HRV07IC8qIHdhcyB3cml0dGVuIHRvIHJlZ2lzdGVycyAqLwotCXVuc2lnbmVkIHJlc2VydmVkWzVdOwotfSBzZGxhaHdfdDsKLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWV4dGVybiBpbnQgc2RsYV9zZXR1cAkoc2RsYWh3X3QqIGh3LCB2b2lkKiBzZm0sIHVuc2lnbmVkIGxlbik7Ci1leHRlcm4gaW50IHNkbGFfZG93bgkoc2RsYWh3X3QqIGh3KTsKLWV4dGVybiB2b2lkIFM1MTRfaW50YWNrICAoc2RsYWh3X3QqIGh3LCB1MzIgaW50X3N0YXR1cyk7Ci1leHRlcm4gdm9pZCByZWFkX1M1MTRfaW50X3N0YXQgKHNkbGFod190KiBodywgdTMyKiBpbnRfc3RhdHVzKTsKLWV4dGVybiBpbnQgc2RsYV9tYXBtZW0JKHNkbGFod190KiBodywgdW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiBpbnQgc2RsYV9wZWVrCShzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCogYnVmLAotCQkJIHVuc2lnbmVkIGxlbik7Ci1leHRlcm4gaW50IHNkbGFfcG9rZQkoc2RsYWh3X3QqIGh3LCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQqIGJ1ZiwKLQkJCSB1bnNpZ25lZCBsZW4pOwotZXh0ZXJuIGludCBzZGxhX2V4ZWMJKHZvaWQqIG9wZmxhZyk7Ci0KLWV4dGVybiB1bnNpZ25lZCB3YW5waXBlX2h3X3Byb2JlKHZvaWQpOwotCi0jZW5kaWYJLyogX1NETEFEUlZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZGxhcGNpLmggYi9pbmNsdWRlL2xpbnV4L3NkbGFwY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY3YzkwNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFwY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhcGNpLmgJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuCi0qCQlEZWZpbml0aW9ucyBmb3IgdGhlIFNETEEgUENJIGFkYXB0ZXIuCi0qCi0qIEF1dGhvcjoJR2lkZW9uIEhhY2sJPGdoYWNrQHNhbmdvbWEuY29tPgotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk5LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBKdW4gMDIsIDE5OTkJR2lkZW9uIEhhY2sJSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBUENJX0gKLSNkZWZpbmUJX1NETEFQQ0lfSAotCi0vKioqKioqIERlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRGVmaW5pdGlvbnMgZm9yIGlkZW50aWZ5aW5nIGFuZCBmaW5kaW5nIFM1MTQgUENJIGFkYXB0ZXJzICovCi0jZGVmaW5lIFYzX1ZFTkRPUl9JRAkJMHgxMUIwCQkvKiBWMyB2ZW5kb3IgSUQgbnVtYmVyICovCi0jZGVmaW5lIFYzX0RFVklDRV9JRCAgCQkweDAwMDIJCS8qIFYzIGRldmljZSBJRCBudW1iZXIgKi8KLSNkZWZpbmUgU0FOR09NQV9TVUJTWVNfVkVORE9SIAkweDQ3NTMJCS8qIElEIGZvciBTYW5nb21hICovCi0jZGVmaW5lIFBDSV9ERVZfU0xPVF9NQVNLCTB4MUYJCS8qIG1hc2sgZm9yIHNsb3QgbnVtYmVyaW5nICovCi0jZGVmaW5lIFBDSV9JUlFfTk9UX0FMTE9DQVRFRAkweEZGCQkvKiBpbnRlcnJ1cHQgbGluZSBmb3Igbm8gSVJRICovCi0KLS8qIExvY2FsIFBDSSByZWdpc3RlciBvZmZzZXRzICovIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1dPUkQJMHgwMAkJLyogdmVuZG9yIElEICovCi0jZGVmaW5lIFBDSV9JT19CQVNFX0RXT1JECTB4MTAJCS8qIElPIGJhc2UgKi8JCi0jZGVmaW5lIFBDSV9NRU1fQkFTRTBfRFdPUkQJMHgxNAkJLyogbWVtb3J5IGJhc2UgLSBhcHBlcnR1cmUgMCAqLwotI2RlZmluZSBQQ0lfTUVNX0JBU0UxX0RXT1JEICAgICAweDE4CQkvKiBtZW1vcnkgYmFzZSAtIGFwcGVydHVyZSAxICovCi0jZGVmaW5lIFBDSV9TVUJTWVNfVkVORE9SX1dPUkQgCTB4MkMJCS8qIHN1YnN5c3RlbSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgUENJX0lOVF9MSU5FX0JZVEUJMHgzQwkJLyogaW50ZXJydXB0IGxpbmUgKi8KLSNkZWZpbmUgUENJX0lOVF9QSU5fQllURQkweDNECQkvKiBpbnRlcnJ1cHQgcGluICovCi0jZGVmaW5lIFBDSV9NQVAwX0RXT1JECQkweDQwCQkvKiBQQ0kgdG8gbG9jYWwgYnVzIGFkZHJlc3MgMCAqLwotI2RlZmluZSBQQ0lfTUFQMV9EV09SRCAgICAgICAgICAweDQ0CQkvKiBQQ0kgdG8gbG9jYWwgYnVzIGFkZHJlc3MgMSAqLwotI2RlZmluZSBQQ0lfSU5UX1NUQVRVUyAgICAgICAgICAweDQ4CQkvKiBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lIFBDSV9JTlRfQ09ORklHCQkweDRDCQkvKiBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiAqLwotICAKLS8qIExvY2FsIFBDSSByZWdpc3RlciB1c2FnZSAqLwotI2RlZmluZSBQQ0lfTUVNT1JZX0VOQUJMRQkweDAwMDAwMDAzCS8qIGVuYWJsZSBQQ0kgbWVtb3J5ICovCi0jZGVmaW5lIFBDSV9DUFVfQV9NRU1fRElTQUJMRQkweDAwMDAwMDAyCS8qIGRpc2FibGUgQ1BVIEEgbWVtb3J5ICovCi0jZGVmaW5lIFBDSV9DUFVfQl9NRU1fRElTQUJMRSAgCTB4MDAxMDAwMDIJLyogZGlzYWJsZSBDUFUgQiBtZW1vcnkgKi8KLSNkZWZpbmUgUENJX0VOQUJMRV9JUlFfQ1BVX0EJMHgwMDVBMDAwNAkvKiBlbmFibGUgSVJRIGZvciBDUFUgQSAqLwotI2RlZmluZSBQQ0lfRU5BQkxFX0lSUV9DUFVfQiAgICAweDAwNUEwMDA4CS8qIGVuYWJsZSBJUlEgZm9yIENQVSBCICovCi0jZGVmaW5lIFBDSV9ESVNBQkxFX0lSUV9DUFVfQSAgIDB4MDAwMDAwMDQJLyogZGlzYWJsZSBJUlEgZm9yIENQVSBBICovCi0jZGVmaW5lIFBDSV9ESVNBQkxFX0lSUV9DUFVfQiAgIDB4MDAwMDAwMDgJLyogZGlzYWJsZSBJUlEgZm9yIENQVSBCICovCi0gCi0vKiBTZXR0aW5nIGZvciB0aGUgSW50ZXJydXB0IFN0YXR1cyByZWdpc3RlciAqLyAgCi0jZGVmaW5lIElSUV9DUFVfQSAgICAgICAgICAgICAgIDB4MDQgICAgICAgICAgICAvKiBJUlEgZm9yIENQVSBBICovCi0jZGVmaW5lIElSUV9DUFVfQiAgICAgICAgICAgICAgIDB4MDgJCS8qIElSUSBmb3IgQ1BVIEIgKi8KLQotLyogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgUzUxNCBtZW1vcnkgKi8KLSNkZWZpbmUgTUFYX1NJWkVPRl9TNTE0X01FTU9SWQkoMjU2ICogMTAyNCkKLQotLyogUzUxNCBjb250cm9sIHJlZ2lzdGVyIG9mZnNldHMgd2l0aGluIHRoZSBtZW1vcnkgYWRkcmVzcyBzcGFjZSAqLwotI2RlZmluZSBTNTE0X0NUUkxfUkVHX0JZVEUJMHg4MDAwMAotIAotLyogUzUxNCBhZGFwdGVyIGNvbnRyb2wgYnl0ZXMgKi8KLSNkZWZpbmUgUzUxNF9DUFVfSEFMVCAJCTB4MDAKLSNkZWZpbmUgUzUxNF9DUFVfU1RBUlQJCTB4MDEKLQotLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIFM1MTQgYWRhcHRlcnMgc3VwcG9ydGVkICovCi0jZGVmaW5lIE1BWF9TNTE0X0NBUkRTCQkyMAkKLQotI2RlZmluZSBQQ0lfQ0FSRF9UWVBFCQkweDJFCi0jZGVmaW5lIFM1MTRfRFVBTF9DUFUJCTB4MTIKLSNkZWZpbmUgUzUxNF9TSU5HTEVfQ1BVCQkweDExCi0KLSNlbmRpZgkvKiBfU0RMQVBDSV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYXNmbS5oIGIvaW5jbHVkZS9saW51eC9zZGxhc2ZtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YWFhOGEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhc2ZtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFzZm0uaAlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4KLSoJCURlZmluaXRpb25zIGZvciB0aGUgU0RMQSBGaXJtd2FyZSBNb2R1bGUgKFNGTSkuCi0qCi0qIEF1dGhvcjogCUdpZGVvbiBIYWNrIAkKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0xOTk5IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogSnVuIDAyLCAxOTk5ICBHaWRlb24gSGFjawlBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKiBEZWMgMTEsIDE5OTYJR2VuZSBLb3ppbglDb3NtZXRpYyBjaGFuZ2VzCi0qIEFwciAxNiwgMTk5NglHZW5lIEtvemluCUNoYW5nZWQgYWRhcHRlciAmIGZpcm13YXJlIElEcy4gVmVyc2lvbiAyCi0qIERlYyAxNSwgMTk5NQlHZW5lIEtvemluCVN0cnVjdHVyZXMgY2hhbmVkCi0qIE5vdiAwOSwgMTk5NQlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZglfU0RMQVNGTV9ICi0jZGVmaW5lCV9TRExBU0ZNX0gKLQotLyoqKioqKiBEZWZpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUJU0ZNX1ZFUlNJT04JMgotI2RlZmluZQlTRk1fU0lHTkFUVVJFCSJTRk0gLSBTYW5nb21hIFNETEEgRmlybXdhcmUgTW9kdWxlIgotCi0vKiBtaW4vbWF4ICovCi0jZGVmaW5lCVNGTV9JTUFHRV9TSVpFCTB4ODAwMAkvKiBtYXggc2l6ZSBvZiBTRExBIGNvZGUgaW1hZ2UgZmlsZSAqLwotI2RlZmluZQlTRk1fREVTQ1JfTEVOCTI1NgkvKiBtYXggbGVuZ3RoIG9mIGRlc2NyaXB0aW9uIHN0cmluZyAqLwotI2RlZmluZQlTRk1fTUFYX1NETEEJMTYJLyogbWF4IG51bWJlciBvZiBjb21wYXRpYmxlIGFkYXB0ZXJzICovCi0KLS8qIEFkYXB0ZXIgdHlwZXMgKi8KLSNkZWZpbmUgU0RMQV9TNTAyQQk1MDIwCi0jZGVmaW5lIFNETEFfUzUwMkUJNTAyMQotI2RlZmluZSBTRExBX1M1MDMJNTAzMAotI2RlZmluZSBTRExBX1M1MDgJNTA4MAotI2RlZmluZSBTRExBX1M1MDcJNTA3MAotI2RlZmluZSBTRExBX1M1MDkJNTA5MAotI2RlZmluZSBTRExBX1M1MTQJNTE0MAotCi0vKiBTNTE0IFBDSSBhZGFwdGVyIENQVSBudW1iZXJzICovCi0jZGVmaW5lIFM1MTRfQ1BVX0EJJ0EnCi0jZGVmaW5lIFM1MTRfQ1BVX0IJJ0InCi0KLQotLyogRmlybXdhcmUgaWRlbnRpZmljYXRpb24gbnVtYmVyczoKLSAqICAgIDAgIC4uICA5OTkJVGVzdCAmIERpYWdub3N0aWNzCi0gKiAgMTAwMCAuLiAxOTk5CVN0cmVhbWluZyBIRExDCi0gKiAgMjAwMCAuLiAyOTk5CUJpc3luYwotICogIDMwMDAgLi4gMzk5OQlTRExDCi0gKiAgNDAwMCAuLiA0OTk5CUhETEMKLSAqICA1MDAwIC4uIDU5OTkJWC4yNQotICogIDYwMDAgLi4gNjk5OQlGcmFtZSBSZWxheQotICogIDcwMDAgLi4gNzk5OQlQUFAKLSAqICA4MDAwIC4uIDg5OTkgICAgICAgIENpc2NvIEhETEMKLSAqLwotI2RlZmluZQlTRklEX0NBTElCNTAyCSAyMDAKLSNkZWZpbmUJU0ZJRF9TVFJNNTAyCTEyMDAKLSNkZWZpbmUJU0ZJRF9TVFJNNTA4CTE4MDAKLSNkZWZpbmUJU0ZJRF9CU0M1MDIJMjIwMAotI2RlZmluZQlTRklEX1NETEM1MDIJMzIwMAotI2RlZmluZQlTRklEX0hETEM1MDIJNDIwMAotI2RlZmluZQlTRklEX0hETEM1MDgJNDgwMAotI2RlZmluZQlTRklEX1gyNV81MDIJNTIwMAotI2RlZmluZQlTRklEX1gyNV81MDgJNTgwMAotI2RlZmluZQlTRklEX0ZSNTAyCTYyMDAKLSNkZWZpbmUJU0ZJRF9GUjUwOAk2ODAwCi0jZGVmaW5lCVNGSURfUFBQNTAyCTcyMDAKLSNkZWZpbmUJU0ZJRF9QUFA1MDgJNzgwMAotI2RlZmluZSBTRklEX1BQUDUxNAk3MTQwCi0jZGVmaW5lCVNGSURfQ0hETEM1MDgJODgwMAotI2RlZmluZSBTRklEX0NIRExDNTE0CTgxNDAKLQotLyoqKioqKiBEYXRhIFR5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgc3RydWN0CXNmbV9pbmZvCQkvKiBmaXJtd2FyZSBtb2R1bGUgaW5mb3JtYXRpb24gKi8KLXsKLQl1bnNpZ25lZCBzaG9ydAljb2RlaWQ7CQkvKiBmaXJtd2FyZSBJRCAqLwotCXVuc2lnbmVkIHNob3J0CXZlcnNpb247CS8qIGZpcm1hd2FyZSB2ZXJzaW9uIG51bWJlciAqLwotCXVuc2lnbmVkIHNob3J0CWFkYXB0ZXJbU0ZNX01BWF9TRExBXTsgLyogY29tcGF0aWJsZSBhZGFwdGVyIHR5cGVzICovCi0JdW5zaWduZWQgbG9uZwltZW1zaXplOwkvKiBtaW5pbXVtIG1lbW9yeSBzaXplICovCi0JdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWRbMl07CS8qIHJlc2VydmVkICovCi0JdW5zaWduZWQgc2hvcnQJc3RhcnRvZmZzOwkvKiBlbnRyeSBwb2ludCBvZmZzZXQgKi8KLQl1bnNpZ25lZCBzaG9ydAl3aW5vZmZzOwkvKiBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBvZmZzZXQgKi8KLQl1bnNpZ25lZCBzaG9ydAljb2Rlb2ZmczsJLyogY29kZSBsb2FkIG9mZnNldCAqLwotCXVuc2lnbmVkIHNob3J0CWNvZGVzaXplOwkvKiBjb2RlIHNpemUgKi8KLQl1bnNpZ25lZCBzaG9ydAlkYXRhb2ZmczsJLyogY29uZmlndXJhdGlvbiBkYXRhIGxvYWQgb2Zmc2V0ICovCi0JdW5zaWduZWQgc2hvcnQJZGF0YXNpemU7CS8qIGNvbmZpZ3VyYXRpb24gZGF0YSBzaXplICovCi19IHNmbV9pbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHNmbQkJCS8qIFNETEEgZmlybXdhcmUgZmlsZSBzdHJ1Y3RpcmUgKi8KLXsKLQljaGFyCQlzaWduYXR1cmVbODBdOwkvKiBTRk0gZmlsZSBzaWduYXR1cmUgKi8KLQl1bnNpZ25lZCBzaG9ydAl2ZXJzaW9uOwkvKiBmaWxlIGZvcm1hdCB2ZXJzaW9uICovCi0JdW5zaWduZWQgc2hvcnQJY2hlY2tzdW07CS8qIGluZm8gKyBpbWFnZSAqLwotCXVuc2lnbmVkIHNob3J0CXJlc2VydmVkWzZdOwkvKiByZXNlcnZlZCAqLwotCWNoYXIJCWRlc2NyW1NGTV9ERVNDUl9MRU5dOyAvKiBkZXNjcmlwdGlvbiBzdHJpbmcgKi8KLQlzZm1faW5mb190CWluZm87CQkvKiBmaXJtd2FyZSBtb2R1bGUgaW5mbyAqLwotCXVuc2lnbmVkIGNoYXIJaW1hZ2VbMV07CS8qIGNvZGUgaW1hZ2UgKHZhcmlhYmxlIHNpemUpICovCi19IHNmbV90OwotCi0jZW5kaWYJLyogX1NETEFTRk1fSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggYWFhMGE1Yy4uMWJhYjQ4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtODY5LDExICs4NjksNiBAQAogICoJQGlwY3AgY29udGFpbnMgdGhlIGtlcm5lbCBJUEMgcGVybWlzc2lvbiBzdHJ1Y3R1cmUKICAqCUBmbGFnIGNvbnRhaW5zIHRoZSBkZXNpcmVkIChyZXF1ZXN0ZWQpIHBlcm1pc3Npb24gc2V0CiAgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCi0gKiBAaXBjX2dldHNlY3VyaXR5OgotICogICAgICBDb3B5IHRoZSBzZWN1cml0eSBsYWJlbCBhc3NvY2lhdGVkIHdpdGggdGhlIGlwYyBvYmplY3QgaW50bwotICogICAgICBAYnVmZmVyLiAgQGJ1ZmZlciBtYXkgYmUgTlVMTCB0byByZXF1ZXN0IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgCi0gKiAgICAgIHJlcXVpcmVkLiAgQHNpemUgaW5kaWNhdGVzIHRoZSBzaXplIG9mIEBidWZmZXIgaW4gYnl0ZXMuIFJldHVybiAKLSAqICAgICAgbnVtYmVyIG9mIGJ5dGVzIHVzZWQvcmVxdWlyZWQgb24gc3VjY2Vzcy4KICAqCiAgKiBTZWN1cml0eSBob29rcyBmb3IgaW5kaXZpZHVhbCBtZXNzYWdlcyBoZWxkIGluIFN5c3RlbSBWIElQQyBtZXNzYWdlIHF1ZXVlcwogICogQG1zZ19tc2dfYWxsb2Nfc2VjdXJpdHk6CkBAIC0xMjIzLDcgKzEyMTgsNiBAQAogCXZvaWQgKCp0YXNrX3RvX2lub2RlKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAJaW50ICgqaXBjX3Blcm1pc3Npb24pIChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqIGlwY3AsIHNob3J0IGZsYWcpOwotCWludCAoKmlwY19nZXRzZWN1cml0eSkoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwogCiAJaW50ICgqbXNnX21zZ19hbGxvY19zZWN1cml0eSkgKHN0cnVjdCBtc2dfbXNnICogbXNnKTsKIAl2b2lkICgqbXNnX21zZ19mcmVlX3NlY3VyaXR5KSAoc3RydWN0IG1zZ19tc2cgKiBtc2cpOwpAQCAtMTg4NywxMSArMTg4MSw2IEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aXBjX3Blcm1pc3Npb24gKGlwY3AsIGZsYWcpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pcGNfZ2V0c2VjdXJpdHkoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCi17Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+aXBjX2dldHNlY3VyaXR5KGlwY3AsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21zZ19tc2dfYWxsb2MgKHN0cnVjdCBtc2dfbXNnICogbXNnKQogewogCXJldHVybiBzZWN1cml0eV9vcHMtPm1zZ19tc2dfYWxsb2Nfc2VjdXJpdHkgKG1zZyk7CkBAIC0yNTMyLDExICsyNTIxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaXBjX2dldHNlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX21zZ19hbGxvYyAoc3RydWN0IG1zZ19tc2cgKiBtc2cpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXguaCBiL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNDdiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbGludXguaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIFNFTGludXggc2VydmljZXMgZXhwb3J0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4KKyAqCisgKiBBdXRob3I6IEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLiA8ZGdvZWRkZWxAdHJ1c3RlZGNzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJQk0gQ29ycG9yYXRpb24sIFRpbW90aHkgUi4gQ2hhdmV6IDx0aW55dGltQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX1NFTElOVVhfSAorI2RlZmluZSBfTElOVVhfU0VMSU5VWF9ICisKK3N0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGU7CitzdHJ1Y3QgYXVkaXRfY29udGV4dDsKK3N0cnVjdCBpbm9kZTsKK3N0cnVjdCBrZXJuX2lwY19wZXJtOworCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgKKworLyoqCisgKglzZWxpbnV4X2F1ZGl0X3J1bGVfaW5pdCAtIGFsbG9jL2luaXQgYW4gc2VsaW51eCBhdWRpdCBydWxlIHN0cnVjdHVyZS4KKyAqCUBmaWVsZDogdGhlIGZpZWxkIHRoaXMgcnVsZSByZWZlcnMgdG8KKyAqCUBvcDogdGhlIG9wZXJhdGVyIHRoZSBydWxlIHVzZXMKKyAqCUBydWxlc3RyOiB0aGUgdGV4dCAidGFyZ2V0IiBvZiB0aGUgcnVsZQorICoJQHJ1bGU6IHBvaW50ZXIgdG8gdGhlIG5ldyBydWxlIHN0cnVjdHVyZSByZXR1cm5lZCB2aWEgdGhpcworICoKKyAqCVJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtZXJybm8gaWYgbm90LiAgT24gc3VjY2VzcywgdGhlIHJ1bGUgc3RydWN0dXJlCisgKgl3aWxsIGJlIGFsbG9jYXRlZCBpbnRlcm5hbGx5LiAgVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhpcyBzdHJ1Y3R1cmUgd2l0aAorICoJc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUoKSBhZnRlciB1c2UuCisgKi8KK2ludCBzZWxpbnV4X2F1ZGl0X3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICoqcnVsZSk7CisKKy8qKgorICoJc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUgLSBmcmVlIGFuIHNlbGludXggYXVkaXQgcnVsZSBzdHJ1Y3R1cmUuCisgKglAcnVsZTogcG9pbnRlciB0byB0aGUgYXVkaXQgcnVsZSB0byBiZSBmcmVlZAorICoKKyAqCVRoaXMgd2lsbCBmcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBydWxlLgorICoJSWYgQHJ1bGUgaXMgTlVMTCwgbm8gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KKyAqLwordm9pZCBzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZShzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICpydWxlKTsKKworLyoqCisgKglzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2ggLSBkZXRlcm1pbmUgaWYgYSBjb250ZXh0IElEIG1hdGNoZXMgYSBydWxlLgorICoJQGN0eGlkOiB0aGUgY29udGV4dCBJRCB0byBjaGVjaworICoJQGZpZWxkOiB0aGUgZmllbGQgdGhpcyBydWxlIHJlZmVycyB0bworICoJQG9wOiB0aGUgb3BlcmF0ZXIgdGhlIHJ1bGUgdXNlcworICoJQHJ1bGU6IHBvaW50ZXIgdG8gdGhlIGF1ZGl0IHJ1bGUgdG8gY2hlY2sgYWdhaW5zdAorICoJQGFjdHg6IHRoZSBhdWRpdCBjb250ZXh0IChjYW4gYmUgTlVMTCkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGVjaworICoKKyAqCVJldHVybnMgMSBpZiB0aGUgY29udGV4dCBpZCBtYXRjaGVzIHRoZSBydWxlLCAwIGlmIGl0IGRvZXMgbm90LCBhbmQKKyAqCS1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKHUzMiBjdHhpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKnJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KTsKKworLyoqCisgKglzZWxpbnV4X2F1ZGl0X3NldF9jYWxsYmFjayAtIHNldCB0aGUgY2FsbGJhY2sgZm9yIHBvbGljeSByZWxvYWRzLgorICoJQGNhbGxiYWNrOiB0aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBwb2xpY3kgaXMgcmVsb2FkZWQKKyAqCisgKglUaGlzIHNldHMgdGhlIGZ1bmN0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCB1cGRhdGUgdGhlIHJ1bGVzCisgKgl1cG9uIHBvbGljeSByZWxvYWRzLiAgVGhpcyBjYWxsYmFjayBzaG91bGQgcmVidWlsZCBhbGwgZXhpc3RpbmcgcnVsZXMKKyAqCXVzaW5nIHNlbGludXhfYXVkaXRfcnVsZV9pbml0KCkuCisgKi8KK3ZvaWQgc2VsaW51eF9hdWRpdF9zZXRfY2FsbGJhY2soaW50ICgqY2FsbGJhY2spKHZvaWQpKTsKKworLyoqCisgKglzZWxpbnV4X3Rhc2tfY3R4aWQgLSBkZXRlcm1pbmUgYSBjb250ZXh0IElEIGZvciBhIHByb2Nlc3MuCisgKglAdHNrOiB0aGUgdGFzayBvYmplY3QKKyAqCUBjdHhpZDogSUQgdmFsdWUgcmV0dXJuZWQgdmlhIHRoaXMKKyAqCisgKglPbiByZXR1cm4sIGN0eGlkIHdpbGwgY29udGFpbiBhbiBJRCBmb3IgdGhlIGNvbnRleHQuICBUaGlzIHZhbHVlCisgKglzaG91bGQgb25seSBiZSB1c2VkIG9wYXF1ZWx5LgorICovCit2b2lkIHNlbGludXhfdGFza19jdHhpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTMyICpjdHhpZCk7CisKKy8qKgorICogICAgIHNlbGludXhfY3R4aWRfdG9fc3RyaW5nIC0gbWFwIGEgc2VjdXJpdHkgY29udGV4dCBJRCB0byBhIHN0cmluZworICogICAgIEBjdHhpZDogc2VjdXJpdHkgY29udGV4dCBJRCB0byBiZSBjb252ZXJ0ZWQuCisgKiAgICAgQGN0eDogYWRkcmVzcyBvZiBjb250ZXh0IHN0cmluZyB0byBiZSByZXR1cm5lZAorICogICAgIEBjdHhsZW46IGxlbmd0aCBvZiByZXR1cm5lZCBjb250ZXh0IHN0cmluZy4KKyAqCisgKiAgICAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1lcnJubyBpZiBub3QuICBPbiBzdWNjZXNzLCB0aGUgY29udGV4dAorICogICAgIHN0cmluZyB3aWxsIGJlIGFsbG9jYXRlZCBpbnRlcm5hbGx5LCBhbmQgdGhlIGNhbGxlciBtdXN0IGNhbGwKKyAqICAgICBrZnJlZSgpIG9uIGl0IGFmdGVyIHVzZS4KKyAqLworaW50IHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKHUzMiBjdHhpZCwgY2hhciAqKmN0eCwgdTMyICpjdHhsZW4pOworCisvKioKKyAqICAgICBzZWxpbnV4X2dldF9pbm9kZV9zaWQgLSBnZXQgdGhlIGlub2RlJ3Mgc2VjdXJpdHkgY29udGV4dCBJRAorICogICAgIEBpbm9kZTogaW5vZGUgc3RydWN0dXJlIHRvIGdldCB0aGUgc2lkIGZyb20uCisgKiAgICAgQHNpZDogcG9pbnRlciB0byBzZWN1cml0eSBjb250ZXh0IElEIHRvIGJlIGZpbGxlZCBpbi4KKyAqCisgKiAgICAgUmV0dXJucyBub3RoaW5nCisgKi8KK3ZvaWQgc2VsaW51eF9nZXRfaW5vZGVfc2lkKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqc2lkKTsKKworLyoqCisgKiAgICAgc2VsaW51eF9nZXRfaXBjX3NpZCAtIGdldCB0aGUgaXBjIHNlY3VyaXR5IGNvbnRleHQgSUQKKyAqICAgICBAaXBjcDogaXBjIHN0cnVjdHVyZSB0byBnZXQgdGhlIHNpZCBmcm9tLgorICogICAgIEBzaWQ6IHBvaW50ZXIgdG8gc2VjdXJpdHkgY29udGV4dCBJRCB0byBiZSBmaWxsZWQgaW4uCisgKgorICogICAgIFJldHVybnMgbm90aGluZworICovCit2b2lkIHNlbGludXhfZ2V0X2lwY19zaWQoY29uc3Qgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHUzMiAqc2lkKTsKKworLyoqCisgKiAgICAgc2VsaW51eF9nZXRfdGFza19zaWQgLSByZXR1cm4gdGhlIFNJRCBvZiB0YXNrCisgKiAgICAgQHRzazogdGhlIHRhc2sgd2hvc2UgU0lEIHdpbGwgYmUgcmV0dXJuZWQKKyAqICAgICBAc2lkOiBwb2ludGVyIHRvIHNlY3VyaXR5IGNvbnRleHQgSUQgdG8gYmUgZmlsbGVkIGluLgorICoKKyAqICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqLwordm9pZCBzZWxpbnV4X2dldF90YXNrX3NpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTMyICpzaWQpOworCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfYXVkaXRfcnVsZV9pbml0KHUzMiBmaWVsZCwgdTMyIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcnVsZXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKipydWxlKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZShzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICpydWxlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKHUzMiBjdHhpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqcnVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYWN0eCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfYXVkaXRfc2V0X2NhbGxiYWNrKGludCAoKmNhbGxiYWNrKSh2b2lkKSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X3Rhc2tfY3R4aWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqY3R4aWQpCit7CisJKmN0eGlkID0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9jdHhpZF90b19zdHJpbmcodTMyIGN0eGlkLCBjaGFyICoqY3R4LCB1MzIgKmN0eGxlbikKK3sKKyAgICAgICAqY3R4ID0gTlVMTDsKKyAgICAgICAqY3R4bGVuID0gMDsKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfZ2V0X2lub2RlX3NpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNpZCkKK3sKKwkqc2lkID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfZ2V0X2lwY19zaWQoY29uc3Qgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHUzMiAqc2lkKQoreworCSpzaWQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9nZXRfdGFza19zaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqc2lkKQoreworCSpzaWQgPSAwOworfQorCisjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVggKi8KKworI2VuZGlmIC8qIF9MSU5VWF9TRUxJTlVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggZmNhOWIwZi4uNWEwOTU1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTczLDcgKzczLDcgQEAKIH0KIAogLyogU3RhcnQgb2YgcmVhZCBjYWxjdWxhdGlvbiAtLSBmZXRjaCBsYXN0IGNvbXBsZXRlIHdyaXRlciB0b2tlbiAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCByZWFkX3NlcWJlZ2luKGNvbnN0IHNlcWxvY2tfdCAqc2wpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIHJlYWRfc2VxYmVnaW4oY29uc3Qgc2VxbG9ja190ICpzbCkKIHsKIAl1bnNpZ25lZCByZXQgPSBzbC0+c2VxdWVuY2U7CiAJc21wX3JtYigpOwpAQCAtODgsNyArODgsNyBAQAogICogICAgCiAgKiBVc2luZyB4b3Igc2F2ZXMgb25lIGNvbmRpdGlvbmFsIGJyYW5jaC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgcmVhZF9zZXFyZXRyeShjb25zdCBzZXFsb2NrX3QgKnNsLCB1bnNpZ25lZCBpdikKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlYWRfc2VxcmV0cnkoY29uc3Qgc2VxbG9ja190ICpzbCwgdW5zaWduZWQgaXYpCiB7CiAJc21wX3JtYigpOwogCXJldHVybiAoaXYgJiAxKSB8IChzbC0+c2VxdWVuY2UgXiBpdik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggYzMyZTYwZS4uYmQxNDg1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMjU0LDYgKzI1NCw3IEBACiAjZGVmaW5lIFVQRl9DT05TX0ZMT1cJCSgoX19mb3JjZSB1cGZfdCkgKDEgPDwgMjMpKQogI2RlZmluZSBVUEZfU0hBUkVfSVJRCQkoKF9fZm9yY2UgdXBmX3QpICgxIDw8IDI0KSkKICNkZWZpbmUgVVBGX0JPT1RfQVVUT0NPTkYJKChfX2ZvcmNlIHVwZl90KSAoMSA8PCAyOCkpCisjZGVmaW5lIFVQRl9ERUFECQkoKF9fZm9yY2UgdXBmX3QpICgxIDw8IDMwKSkKICNkZWZpbmUgVVBGX0lPUkVNQVAJCSgoX19mb3JjZSB1cGZfdCkgKDEgPDwgMzEpKQogCiAjZGVmaW5lIFVQRl9DSEFOR0VfTUFTSwkJKChfX2ZvcmNlIHVwZl90KSAoMHgxN2ZmZikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlvLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKaW5kZXggNjkwYWFiYy4uNjM0OGU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpby5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaW8uaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAKQEAgLTQyLDcgKzQzLDcgQEAKIAlzdHJ1Y3Qgc2VyaW8gKnBhcmVudCwgKmNoaWxkOwogCiAJc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2OwkvKiBhY2Nlc3NlZCBmcm9tIGludGVycnVwdCwgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgc2VyaW8tPmxvY2sgYW5kIHNlcmlvLT5zZW0gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGRydl9zZW07CS8qIHByb3RlY3RzIHNlcmlvLT5kcnYgc28gYXR0cmlidXRlcyBjYW4gcGluIGRyaXZlciAqLworCXN0cnVjdCBtdXRleCBkcnZfbXV0ZXg7CQkvKiBwcm90ZWN0cyBzZXJpby0+ZHJ2IHNvIGF0dHJpYnV0ZXMgY2FuIHBpbiBkcml2ZXIgKi8KIAogCXN0cnVjdCBkZXZpY2UgZGV2OwogCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwkvKiBwb3J0IGhhcyBiZWVuIGZ1bGx5IHJlZ2lzdGVyZWQgd2l0aCBkcml2ZXIgY29yZSAqLwpAQCAtMTUxLDE3ICsxNTIsMTcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgc2VyaW9fcGluX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewotCXJldHVybiBkb3duX2ludGVycnVwdGlibGUoJnNlcmlvLT5kcnZfc2VtKTsKKwlyZXR1cm4gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzZXJpby0+ZHJ2X211dGV4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNlcmlvX3Bpbl9kcml2ZXJfdW5pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZXJpbyAqc2VyaW8pCiB7Ci0JZG93bigmc2VyaW8tPmRydl9zZW0pOworCW11dGV4X2xvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VyaW9fdW5waW5fZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8pCiB7Ci0JdXAoJnNlcmlvLT5kcnZfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCmluZGV4IDE2MmE4ZmQuLjcwNzM5ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaApAQCAtMTQsMTAgKzE0LDEyIEBACiAgKgogICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgogICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCisgKiBTQV9QUk9CRUlSUSBpcyBzZXQgYnkgY2FsbGVycyB3aGVuIHRoZXkgZXhwZWN0IHNoYXJpbmcgbWlzbWF0Y2hlcyB0byBvY2N1cgogICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCiAjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAogI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2RlZmluZSBTQV9QUk9CRUlSUQkJMHgwODAwMDAwMAorCiAvKgogICogQXMgYWJvdmUsIHRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIElPUkVTT1VSQ0VfSVJRXyogZGVmaW5lcyBpbgogICogbGludXgvaW9wb3J0LmggdG8gc2VsZWN0IHRoZSBpbnRlcnJ1cHQgbGluZSBiZWhhdmlvdXIuICBXaGVuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA2MTNiOTUxLi5mOGYyMzQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTM0NCw2ICszNDQsMTMgQEAKIAkJCQkgICAgIHZvaWQgKmhlcmUpOwogZXh0ZXJuIHZvaWQJICAgICAgc2tiX3VuZGVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4sCiAJCQkJICAgICAgdm9pZCAqaGVyZSk7CitleHRlcm4gdm9pZAkgICAgICBza2JfdHJ1ZXNpemVfYnVnKHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3RydWVzaXplX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHVubGlrZWx5KChpbnQpc2tiLT50cnVlc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikgKyBza2ItPmxlbikpCisJCXNrYl90cnVlc2l6ZV9idWcoc2tiKTsKK30KIAogZXh0ZXJuIGludCBza2JfYXBwZW5kX2RhdGF0b19mcmFncyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwKQEAgLTk0MSw2ICs5NDgsMjUgQEAKICNkZWZpbmUgTkVUX0lQX0FMSUdOCTIKICNlbmRpZgogCisvKgorICogVGhlIG5ldHdvcmtpbmcgbGF5ZXIgcmVzZXJ2ZXMgc29tZSBoZWFkcm9vbSBpbiBza2IgZGF0YSAodmlhCisgKiBkZXZfYWxsb2Nfc2tiKS4gVGhpcyBpcyB1c2VkIHRvIGF2b2lkIGhhdmluZyB0byByZWFsbG9jYXRlIHNrYiBkYXRhIHdoZW4KKyAqIHRoZSBoZWFkZXIgaGFzIHRvIGdyb3cuIEluIHRoZSBkZWZhdWx0IGNhc2UsIGlmIHRoZSBoZWFkZXIgaGFzIHRvIGdyb3cKKyAqIDE2IGJ5dGVzIG9yIGxlc3Mgd2UgYXZvaWQgdGhlIHJlYWxsb2NhdGlvbi4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5IHRoaXMgaGVhZHJvb20gY2hhbmdlcyB0aGUgRE1BIGFsaWdubWVudCBvZiB0aGUgcmVzdWx0aW5nCisgKiBuZXR3b3JrIHBhY2tldC4gQXMgZm9yIE5FVF9JUF9BTElHTiwgdGhpcyB1bmFsaWduZWQgRE1BIGlzIGV4cGVuc2l2ZQorICogb24gc29tZSBhcmNoaXRlY3R1cmVzLiBBbiBhcmNoaXRlY3R1cmUgY2FuIG92ZXJyaWRlIHRoaXMgdmFsdWUsCisgKiBwZXJoYXBzIHNldHRpbmcgaXQgdG8gYSBjYWNoZWxpbmUgaW4gc2l6ZSAoc2luY2UgdGhhdCB3aWxsIG1haW50YWluCisgKiBjYWNoZWxpbmUgYWxpZ25tZW50IG9mIHRoZSBETUEpLiBJdCBtdXN0IGJlIGEgcG93ZXIgb2YgMi4KKyAqCisgKiBWYXJpb3VzIHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIGxheWVyIGV4cGVjdCBhdCBsZWFzdCAxNiBieXRlcyBvZgorICogaGVhZHJvb20sIHlvdSBzaG91bGQgbm90IHJlZHVjZSB0aGlzLgorICovCisjaWZuZGVmIE5FVF9TS0JfUEFECisjZGVmaW5lIE5FVF9TS0JfUEFECTE2CisjZW5kaWYKKwogZXh0ZXJuIGludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbiwgaW50IHJlYWxsb2MpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtMTAzMCw5ICsxMDU2LDkgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fZGV2X2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgbGVuZ3RoLAogCQkJCQkgICAgICBnZnBfdCBnZnBfbWFzaykKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIDE2LCBnZnBfbWFzayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBORVRfU0tCX1BBRCwgZ2ZwX21hc2spOwogCWlmIChsaWtlbHkoc2tiKSkKLQkJc2tiX3Jlc2VydmUoc2tiLCAxNik7CisJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX1NLQl9QQUQpOwogCXJldHVybiBza2I7CiB9CiAjZWxzZQpAQCAtMTA3MCwxMyArMTA5NiwxNSBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBza2JfY293KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSkKIHsKLQlpbnQgZGVsdGEgPSAoaGVhZHJvb20gPiAxNiA/IGhlYWRyb29tIDogMTYpIC0gc2tiX2hlYWRyb29tKHNrYik7CisJaW50IGRlbHRhID0gKGhlYWRyb29tID4gTkVUX1NLQl9QQUQgPyBoZWFkcm9vbSA6IE5FVF9TS0JfUEFEKSAtCisJCQlza2JfaGVhZHJvb20oc2tiKTsKIAogCWlmIChkZWx0YSA8IDApCiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSB8fCBza2JfY2xvbmVkKHNrYikpCi0JCXJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgKGRlbHRhICsgMTUpICYgfjE1LCAwLCBHRlBfQVRPTUlDKTsKKwkJcmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAoZGVsdGEgKyAoTkVUX1NLQl9QQUQtMSkpICYKKwkJCQl+KE5FVF9TS0JfUEFELTEpLCAwLCBHRlBfQVRPTUlDKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCAzYWYwM2IxLi4yZDk4NWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApAQCAtMTUwLDYgKzE1MCw3IEBACiAKIGV4dGVybiB2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKik7CiBleHRlcm4gdW5zaWduZWQgaW50IGtzaXplKGNvbnN0IHZvaWQgKik7CitleHRlcm4gaW50IHNsYWJfaXNfYXZhaWxhYmxlKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX05VTUEKIGV4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICosIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9hZHM3ODQ2LmggYi9pbmNsdWRlL2xpbnV4L3NwaS9hZHM3ODQ2LmgKaW5kZXggNzIyNjFlMGYuLmFkYjNkYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL2Fkczc4NDYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9hZHM3ODQ2LmgKQEAgLTE0LDUgKzE0LDEyIEBACiAJdTE2CXhfbWluLCB4X21heDsKIAl1MTYJeV9taW4sIHlfbWF4OwogCXUxNglwcmVzc3VyZV9taW4sIHByZXNzdXJlX21heDsKKworCXUxNglkZWJvdW5jZV9tYXg7CQkvKiBtYXggbnVtYmVyIG9mIGFkZGl0aW9uYWwgcmVhZGluZ3MKKwkJCQkJICogcGVyIHNhbXBsZSAqLworCXUxNglkZWJvdW5jZV90b2w7CQkvKiB0b2xlcmFuY2UgdXNlZCBmb3IgZmlsdGVyaW5nICovCisJdTE2CWRlYm91bmNlX3JlcDsJCS8qIGFkZGl0aW9uYWwgY29uc2VjdXRpdmUgZ29vZCByZWFkaW5ncworCQkJCQkgKiByZXF1aXJlZCBhZnRlciB0aGUgZmlyc3QgdHdvICovCisJaW50CSgqZ2V0X3BlbmRvd25fc3RhdGUpKHZvaWQpOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaAppbmRleCBiMDVmMTQ2Li5lOTI4YzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaApAQCAtMzEsMTggKzMxLDIzIEBACiAgKiBAbWFzdGVyOiBTUEkgY29udHJvbGxlciB1c2VkIHdpdGggdGhlIGRldmljZS4KICAqIEBtYXhfc3BlZWRfaHo6IE1heGltdW0gY2xvY2sgcmF0ZSB0byBiZSB1c2VkIHdpdGggdGhpcyBjaGlwCiAgKgkob24gdGhpcyBib2FyZCk7IG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBkZXZpY2UncyBkcml2ZXIuCisgKglUaGUgc3BpX3RyYW5zZmVyLnNwZWVkX2h6IGNhbiBvdmVycmlkZSB0aGlzIGZvciBlYWNoIHRyYW5zZmVyLgogICogQGNoaXAtc2VsZWN0OiBDaGlwc2VsZWN0LCBkaXN0aW5ndWlzaGluZyBjaGlwcyBoYW5kbGVkIGJ5ICJtYXN0ZXIiLgogICogQG1vZGU6IFRoZSBzcGkgbW9kZSBkZWZpbmVzIGhvdyBkYXRhIGlzIGNsb2NrZWQgb3V0IGFuZCBpbi4KICAqCVRoaXMgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIGRldmljZSdzIGRyaXZlci4KKyAqCVRoZSAiYWN0aXZlIGxvdyIgZGVmYXVsdCBmb3IgY2hpcHNlbGVjdCBtb2RlIGNhbiBiZSBvdmVycmlkZGVuLAorICoJYXMgY2FuIHRoZSAiTVNCIGZpcnN0IiBkZWZhdWx0IGZvciBlYWNoIHdvcmQgaW4gYSB0cmFuc2Zlci4KICAqIEBiaXRzX3Blcl93b3JkOiBEYXRhIHRyYW5zZmVycyBpbnZvbHZlIG9uZSBvciBtb3JlIHdvcmRzOyB3b3JkIHNpemVzCi0gKiAJbGlrZSBlaWdodCBvciAxMiBiaXRzIGFyZSBjb21tb24uICBJbi1tZW1vcnkgd29yZHNpemVzIGFyZQorICoJbGlrZSBlaWdodCBvciAxMiBiaXRzIGFyZSBjb21tb24uICBJbi1tZW1vcnkgd29yZHNpemVzIGFyZQogICoJcG93ZXJzIG9mIHR3byBieXRlcyAoZS5nLiAyMCBiaXQgc2FtcGxlcyB1c2UgMzIgYml0cykuCi0gKglUaGlzIG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBkZXZpY2UncyBkcml2ZXIuCisgKglUaGlzIG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBkZXZpY2UncyBkcml2ZXIsIG9yIGxlZnQgYXQgdGhlCisgKglkZWZhdWx0ICgwKSBpbmRpY2F0aW5nIHByb3RvY29sIHdvcmRzIGFyZSBlaWdodCBiaXQgYnl0ZXMuCisgKglUaGUgc3BpX3RyYW5zZmVyLmJpdHNfcGVyX3dvcmQgY2FuIG92ZXJyaWRlIHRoaXMgZm9yIGVhY2ggdHJhbnNmZXIuCiAgKiBAaXJxOiBOZWdhdGl2ZSwgb3IgdGhlIG51bWJlciBwYXNzZWQgdG8gcmVxdWVzdF9pcnEoKSB0byByZWNlaXZlCi0gKiAJaW50ZXJydXB0cyBmcm9tIHRoaXMgZGV2aWNlLgorICoJaW50ZXJydXB0cyBmcm9tIHRoaXMgZGV2aWNlLgogICogQGNvbnRyb2xsZXJfc3RhdGU6IENvbnRyb2xsZXIncyBydW50aW1lIHN0YXRlCiAgKiBAY29udHJvbGxlcl9kYXRhOiBCb2FyZC1zcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgY29udHJvbGxlciwgc3VjaCBhcwotICogCUZJRk8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyczsgZnJvbSBib2FyZF9pbmZvLmNvbnRyb2xsZXJfZGF0YQorICoJRklGTyBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzOyBmcm9tIGJvYXJkX2luZm8uY29udHJvbGxlcl9kYXRhCiAgKgogICogQW4gc3BpX2RldmljZSBpcyB1c2VkIHRvIGludGVyY2hhbmdlIGRhdGEgYmV0d2VlbiBhbiBTUEkgc2xhdmUKICAqICh1c3VhbGx5IGEgZGlzY3JldGUgY2hpcCkgYW5kIENQVSBtZW1vcnkuCkBAIC02NSw2ICs3MCw3IEBACiAjZGVmaW5lCVNQSV9NT0RFXzIJKFNQSV9DUE9MfDApCiAjZGVmaW5lCVNQSV9NT0RFXzMJKFNQSV9DUE9MfFNQSV9DUEhBKQogI2RlZmluZQlTUElfQ1NfSElHSAkweDA0CQkJLyogY2hpcHNlbGVjdCBhY3RpdmUgaGlnaD8gKi8KKyNkZWZpbmUJU1BJX0xTQl9GSVJTVAkweDA4CQkJLyogcGVyLXdvcmQgYml0cy1vbi13aXJlICovCiAJdTgJCQliaXRzX3Blcl93b3JkOwogCWludAkJCWlycTsKIAl2b2lkCQkJKmNvbnRyb2xsZXJfc3RhdGU7CkBAIC03Myw3ICs3OSw2IEBACiAKIAkvLyBsaWtlbHkgbmVlZCBtb3JlIGhvb2tzIGZvciBtb3JlIHByb3RvY29sIG9wdGlvbnMgYWZmZWN0aW5nIGhvdwogCS8vIHRoZSBjb250cm9sbGVyIHRhbGtzIHRvIGVhY2ggY2hpcCwgbGlrZToKLQkvLyAgLSBiaXQgb3JkZXIgKGRlZmF1bHQgaXMgd29yZHdpc2UgbXNiLWZpcnN0KQogCS8vICAtIG1lbW9yeSBwYWNraW5nICgxMiBiaXQgc2FtcGxlcyBpbnRvIGxvdyBiaXRzLCBvdGhlcnMgemVyb2VkKQogCS8vICAtIHByaW9yaXR5CiAJLy8gIC0gZHJvcCBjaGlwc2VsZWN0IGFmdGVyIGVhY2ggd29yZApAQCAtMTQzLDEzICsxNDgsMTMgQEAKICAqIHN0cnVjdCBzcGlfbWFzdGVyIC0gaW50ZXJmYWNlIHRvIFNQSSBtYXN0ZXIgY29udHJvbGxlcgogICogQGNkZXY6IGNsYXNzIGludGVyZmFjZSB0byB0aGlzIGRyaXZlcgogICogQGJ1c19udW06IGJvYXJkLXNwZWNpZmljIChhbmQgb2Z0ZW4gU09DLXNwZWNpZmljKSBpZGVudGlmaWVyIGZvciBhCi0gKiAJZ2l2ZW4gU1BJIGNvbnRyb2xsZXIuCisgKglnaXZlbiBTUEkgY29udHJvbGxlci4KICAqIEBudW1fY2hpcHNlbGVjdDogY2hpcHNlbGVjdHMgYXJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaW5kaXZpZHVhbAotICogCVNQSSBzbGF2ZXMsIGFuZCBhcmUgbnVtYmVyZWQgZnJvbSB6ZXJvIHRvIG51bV9jaGlwc2VsZWN0cy4KLSAqIAllYWNoIHNsYXZlIGhhcyBhIGNoaXBzZWxlY3Qgc2lnbmFsLCBidXQgaXQncyBjb21tb24gdGhhdCBub3QKLSAqIAlldmVyeSBjaGlwc2VsZWN0IGlzIGNvbm5lY3RlZCB0byBhIHNsYXZlLgorICoJU1BJIHNsYXZlcywgYW5kIGFyZSBudW1iZXJlZCBmcm9tIHplcm8gdG8gbnVtX2NoaXBzZWxlY3RzLgorICoJZWFjaCBzbGF2ZSBoYXMgYSBjaGlwc2VsZWN0IHNpZ25hbCwgYnV0IGl0J3MgY29tbW9uIHRoYXQgbm90CisgKglldmVyeSBjaGlwc2VsZWN0IGlzIGNvbm5lY3RlZCB0byBhIHNsYXZlLgogICogQHNldHVwOiB1cGRhdGVzIHRoZSBkZXZpY2UgbW9kZSBhbmQgY2xvY2tpbmcgcmVjb3JkcyB1c2VkIGJ5IGEKLSAqIAlkZXZpY2UncyBTUEkgY29udHJvbGxlcjsgcHJvdG9jb2wgY29kZSBtYXkgY2FsbCB0aGlzLgorICoJZGV2aWNlJ3MgU1BJIGNvbnRyb2xsZXI7IHByb3RvY29sIGNvZGUgbWF5IGNhbGwgdGhpcy4KICAqIEB0cmFuc2ZlcjogYWRkcyBhIG1lc3NhZ2UgdG8gdGhlIGNvbnRyb2xsZXIncyB0cmFuc2ZlciBxdWV1ZS4KICAqIEBjbGVhbnVwOiBmcmVlcyBjb250cm9sbGVyLXNwZWNpZmljIHN0YXRlCiAgKgpAQCAtMTY3LDEzICsxNzIsMTMgQEAKIHN0cnVjdCBzcGlfbWFzdGVyIHsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlCWNkZXY7CiAKLQkvKiBvdGhlciB0aGFuIHplcm8gKD09IGFzc2lnbiBvbmUgZHluYW1pY2FsbHkpLCBidXNfbnVtIGlzIGZ1bGx5CisJLyogb3RoZXIgdGhhbiBuZWdhdGl2ZSAoPT0gYXNzaWduIG9uZSBkeW5hbWljYWxseSksIGJ1c19udW0gaXMgZnVsbHkKIAkgKiBib2FyZC1zcGVjaWZpYy4gIHVzdWFsbHkgdGhhdCBzaW1wbGlmaWVzIHRvIGJlaW5nIFNPQy1zcGVjaWZpYy4KLQkgKiBleGFtcGxlOiAgb25lIFNPQyBoYXMgdGhyZWUgU1BJIGNvbnRyb2xsZXJzLCBudW1iZXJlZCAxLi4zLAorCSAqIGV4YW1wbGU6ICBvbmUgU09DIGhhcyB0aHJlZSBTUEkgY29udHJvbGxlcnMsIG51bWJlcmVkIDAuLjIsCiAJICogYW5kIG9uZSBib2FyZCdzIHNjaGVtYXRpY3MgbWlnaHQgc2hvdyBpdCB1c2luZyBTUEktMi4gIHNvZnR3YXJlCiAJICogd291bGQgbm9ybWFsbHkgdXNlIGJ1c19udW09MiBmb3IgdGhhdCBjb250cm9sbGVyLgogCSAqLwotCXUxNgkJCWJ1c19udW07CisJczE2CQkJYnVzX251bTsKIAogCS8qIGNoaXBzZWxlY3RzIHdpbGwgYmUgaW50ZWdyYWwgdG8gbWFueSBjb250cm9sbGVyczsgc29tZSBvdGhlcnMKIAkgKiBtaWdodCB1c2UgYm9hcmQtc3BlY2lmaWMgR1BJT3MuCkBAIC0yNjgsMTAgKzI3MywxNCBAQAogICogQHR4X2RtYTogRE1BIGFkZHJlc3Mgb2YgdHhfYnVmLCBpZiBzcGlfbWVzc2FnZS5pc19kbWFfbWFwcGVkCiAgKiBAcnhfZG1hOiBETUEgYWRkcmVzcyBvZiByeF9idWYsIGlmIHNwaV9tZXNzYWdlLmlzX2RtYV9tYXBwZWQKICAqIEBsZW46IHNpemUgb2YgcnggYW5kIHR4IGJ1ZmZlcnMgKGluIGJ5dGVzKQorICogQHNwZWVkX2h6OiBTZWxlY3QgYSBzcGVlZCBvdGhlciB0aGVuIHRoZSBkZXZpY2UgZGVmYXVsdCBmb3IgdGhpcworICogICAgICB0cmFuc2Zlci4gSWYgMCB0aGUgZGVmYXVsdCAoZnJvbSBzcGlfZGV2aWNlKSBpcyB1c2VkLgorICogQGJpdHNfcGVyX3dvcmQ6IHNlbGVjdCBhIGJpdHNfcGVyX3dvcmQgb3RoZXIgdGhlbiB0aGUgZGV2aWNlIGRlZmF1bHQKKyAqICAgICAgZm9yIHRoaXMgdHJhbnNmZXIuIElmIDAgdGhlIGRlZmF1bHQgKGZyb20gc3BpX2RldmljZSkgaXMgdXNlZC4KICAqIEBjc19jaGFuZ2U6IGFmZmVjdHMgY2hpcHNlbGVjdCBhZnRlciB0aGlzIHRyYW5zZmVyIGNvbXBsZXRlcwogICogQGRlbGF5X3VzZWNzOiBtaWNyb3NlY29uZHMgdG8gZGVsYXkgYWZ0ZXIgdGhpcyB0cmFuc2ZlciBiZWZvcmUKLSAqIAkob3B0aW9uYWxseSkgY2hhbmdpbmcgdGhlIGNoaXBzZWxlY3Qgc3RhdHVzLCB0aGVuIHN0YXJ0aW5nCi0gKiAJdGhlIG5leHQgdHJhbnNmZXIgb3IgY29tcGxldGluZyB0aGlzIHNwaV9tZXNzYWdlLgorICoJKG9wdGlvbmFsbHkpIGNoYW5naW5nIHRoZSBjaGlwc2VsZWN0IHN0YXR1cywgdGhlbiBzdGFydGluZworICoJdGhlIG5leHQgdHJhbnNmZXIgb3IgY29tcGxldGluZyB0aGlzIHNwaV9tZXNzYWdlLgogICogQHRyYW5zZmVyX2xpc3Q6IHRyYW5zZmVycyBhcmUgc2VxdWVuY2VkIHRocm91Z2ggc3BpX21lc3NhZ2UudHJhbnNmZXJzCiAgKgogICogU1BJIHRyYW5zZmVycyBhbHdheXMgd3JpdGUgdGhlIHNhbWUgbnVtYmVyIG9mIGJ5dGVzIGFzIHRoZXkgcmVhZC4KQEAgLTMyMiw3ICszMzEsOSBAQAogCWRtYV9hZGRyX3QJcnhfZG1hOwogCiAJdW5zaWduZWQJY3NfY2hhbmdlOjE7CisJdTgJCWJpdHNfcGVyX3dvcmQ7CiAJdTE2CQlkZWxheV91c2VjczsKKwl1MzIJCXNwZWVkX2h6OwogCiAJc3RydWN0IGxpc3RfaGVhZCB0cmFuc2Zlcl9saXN0OwogfTsKQEAgLTM1Niw3ICszNjcsNyBAQAogICogYW5kIGl0cyB0cmFuc2ZlcnMsIGlnbm9yZSB0aGVtIHVudGlsIGl0cyBjb21wbGV0aW9uIGNhbGxiYWNrLgogICovCiBzdHJ1Y3Qgc3BpX21lc3NhZ2UgewotCXN0cnVjdCBsaXN0X2hlYWQgCXRyYW5zZmVyczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRyYW5zZmVyczsKIAogCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CiAKQEAgLTM3NCw3ICszODUsNyBAQAogCSAqLwogCiAJLyogY29tcGxldGlvbiBpcyByZXBvcnRlZCB0aHJvdWdoIGEgY2FsbGJhY2sgKi8KLQl2b2lkIAkJCSgqY29tcGxldGUpKHZvaWQgKmNvbnRleHQpOworCXZvaWQJCQkoKmNvbXBsZXRlKSh2b2lkICpjb250ZXh0KTsKIAl2b2lkCQkJKmNvbnRleHQ7CiAJdW5zaWduZWQJCWFjdHVhbF9sZW5ndGg7CiAJaW50CQkJc3RhdHVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvc3BpX2JpdGJhbmcuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NwaV9iaXRiYW5nLmgKaW5kZXggYzk2MWZlOS4uMTZjZTE3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc3BpX2JpdGJhbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfYml0YmFuZy5oCkBAIC0zMCw2ICszMCwxMiBAQAogCiAJc3RydWN0IHNwaV9tYXN0ZXIJKm1hc3RlcjsKIAorCS8qIHNldHVwX3RyYW5zZmVyKCkgY2hhbmdlcyBjbG9jayBhbmQvb3Igd29yZHNpemUgdG8gbWF0Y2ggc2V0dGluZ3MKKwkgKiBmb3IgdGhpcyB0cmFuc2ZlcjsgemVyb2VzIHJlc3RvcmUgZGVmYXVsdHMgZnJvbSBzcGlfZGV2aWNlLgorCSAqLworCWludAkoKnNldHVwX3RyYW5zZmVyKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqdCk7CisKIAl2b2lkCSgqY2hpcHNlbGVjdCkoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGlzX29uKTsKICNkZWZpbmUJQklUQkFOR19DU19BQ1RJVkUJMQkvKiBub3JtYWxseSBuQ1MsIGFjdGl2ZSBsb3cgKi8KICNkZWZpbmUJQklUQkFOR19DU19JTkFDVElWRQkwCkBAIC01MSw2ICs1Nyw4IEBACiBleHRlcm4gaW50IHNwaV9iaXRiYW5nX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOwogZXh0ZXJuIHZvaWQgc3BpX2JpdGJhbmdfY2xlYW51cChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKIGV4dGVybiBpbnQgc3BpX2JpdGJhbmdfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptKTsKK2V4dGVybiBpbnQgc3BpX2JpdGJhbmdfc2V0dXBfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkgICAgICBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KTsKIAogLyogc3RhcnQgb3Igc3RvcCBxdWV1ZSBwcm9jZXNzaW5nICovCiBleHRlcm4gaW50IHNwaV9iaXRiYW5nX3N0YXJ0KHN0cnVjdCBzcGlfYml0YmFuZyAqc3BpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IGRlZTIyMTQuLmM2MTMwNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtMTMsMTEgKzEzLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLWV4dGVybiBjaGFyICogc3RycGJyayhjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKLWV4dGVybiBjaGFyICogc3Ryc2VwKGNoYXIgKiosY29uc3QgY2hhciAqKTsKLWV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOwotZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJjc3BuKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOwotCiBleHRlcm4gY2hhciAqc3RybmR1cF91c2VyKGNvbnN0IGNoYXIgX191c2VyICosIGxvbmcpOwogCiAvKgpAQCAtNzAsNiArNjUsMTggQEAKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSTkxFTgogZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKixfX2tlcm5lbF9zaXplX3QpOwogI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlBCUksKK2V4dGVybiBjaGFyICogc3RycGJyayhjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJTRVAKK2V4dGVybiBjaGFyICogc3Ryc2VwKGNoYXIgKiosY29uc3QgY2hhciAqKTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJTUE4KK2V4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOworI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUkNTUE4KK2V4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKKyNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX01FTVNFVAogZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvbWV0cmljcy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbWV0cmljcy5oCmluZGV4IDhmOTZlOWQuLjc3Zjc4ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tZXRyaWNzLmgKQEAgLTY5LDkgKzY5LDIxIEBACiAvKgogICogRVhQT1JUZWQgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBycGNfaW9zdGF0cyBzdHJ1Y3R1cmVzCiAgKi8KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKIHN0cnVjdCBycGNfaW9zdGF0cyAqCXJwY19hbGxvY19pb3N0YXRzKHN0cnVjdCBycGNfY2xudCAqKTsKIHZvaWQJCQlycGNfY291bnRfaW9zdGF0cyhzdHJ1Y3QgcnBjX3Rhc2sgKik7CiB2b2lkCQkJcnBjX3ByaW50X2lvc3RhdHMoc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCBycGNfY2xudCAqKTsKIHZvaWQJCQlycGNfZnJlZV9pb3N0YXRzKHN0cnVjdCBycGNfaW9zdGF0cyAqKTsKIAorI2Vsc2UgIC8qICBDT05GSUdfUFJPQ19GUyAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnBjX2lvc3RhdHMgKnJwY19hbGxvY19pb3N0YXRzKHN0cnVjdCBycGNfY2xudCAqY2xudCkgeyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSB2b2lkIHJwY19jb3VudF9pb3N0YXRzKHN0cnVjdCBycGNfdGFzayAqdGFzaykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBycGNfcHJpbnRfaW9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHJwY19jbG50ICpjbG50KSB7fQorc3RhdGljIGlubGluZSB2b2lkIHJwY19mcmVlX2lvc3RhdHMoc3RydWN0IHJwY19pb3N0YXRzICpzdGF0cykge30KKworI2VuZGlmICAvKiAgQ09ORklHX1BST0NfRlMgICovCisKICNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX01FVFJJQ1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAppbmRleCA1MGNhYjJhLi41MDM1NjQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaApAQCAtMTk3LDE1ICsxOTcsMTYgQEAKIAlyZXR1cm4gcnFzdHAtPnJxX3Jlc3BhZ2VzW3Jxc3RwLT5ycV9yZXN1c2VkKytdOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzdmNfdGFrZV9wYWdlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCitzdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3Rha2VfcGFnZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogewotCWlmIChycXN0cC0+cnFfYXJnaGkgPD0gcnFzdHAtPnJxX2FyZ3VzZWQpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChycXN0cC0+cnFfYXJnaGkgPD0gcnFzdHAtPnJxX2FyZ3VzZWQpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KIAlycXN0cC0+cnFfYXJnaGktLTsKIAlycXN0cC0+cnFfcmVzcGFnZXNbcnFzdHAtPnJxX3Jlc3VzZWRdID0KIAkJcnFzdHAtPnJxX2FyZ3BhZ2VzW3Jxc3RwLT5ycV9hcmdoaV07CiAJcnFzdHAtPnJxX3Jlc3VzZWQrKzsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN2Y19wdXNoYmFja19hbGxwYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCmluZGV4IDdlZWJiYWIuLmU4YmJlODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKQEAgLTUzLDYgKzUzLDcgQEAKIAogc3RydWN0IHJwY190YXNrOwogc3RydWN0IHJwY194cHJ0Oworc3RydWN0IHNlcV9maWxlOwogCiAvKgogICogVGhpcyBkZXNjcmliZXMgYSBjb21wbGV0ZSBSUEMgcmVxdWVzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA1NGVhYzhhLi5mMDNjMjQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMTU1LDYgKzE1NSw3IEBACiAvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmFtX3BhZ2VzOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxoaWdoX3BhZ2VzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzOwogZXh0ZXJuIGxvbmcgbnJfc3dhcF9wYWdlczsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbnJfZnJlZV9wYWdlcyh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbnJfZnJlZV9wYWdlc19wZ2RhdChwZ19kYXRhX3QgKnBnZGF0KTsKQEAgLTI5NSw3ICsyOTYsNyBAQAogI2RlZmluZSByZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3dwLHZtYSxhZGRyKQlOVUxMCiAjZGVmaW5lIGxvb2t1cF9zd2FwX2NhY2hlKHN3cCkJCQlOVUxMCiAjZGVmaW5lIHZhbGlkX3N3YXBoYW5kbGVzKHN3cCwgb2ZmKQkJMAotI2RlZmluZSBjYW5fc2hhcmVfc3dhcF9wYWdlKHApCQkJMAorI2RlZmluZSBjYW5fc2hhcmVfc3dhcF9wYWdlKHApCQkJKHBhZ2VfbWFwY291bnQocCkgPT0gMSkKICNkZWZpbmUgbW92ZV90b19zd2FwX2NhY2hlKHAsIHN3cCkJCTEKICNkZWZpbmUgbW92ZV9mcm9tX3N3YXBfY2FjaGUocCwgaSwgbSkJCTEKICNkZWZpbmUgX19kZWxldGVfZnJvbV9zd2FwX2NhY2hlKHApCQkvKk5PVEhJTkcqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IGU3OGZmYzcuLjYwZDQ5ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTUyLDYgKzUyLDcgQEAKIHN0cnVjdCBtcV9hdHRyOwogc3RydWN0IGNvbXBhdF9zdGF0Owogc3RydWN0IGNvbXBhdF90aW1ldmFsOworc3RydWN0IHJvYnVzdF9saXN0X2hlYWQ7CiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNTY5LDcgKzU3MCwyMiBAQAogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfb3BlbmF0KHVuc2lnbmVkIGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCQkgICBpbnQgZmxhZ3MsIGludCBtb2RlKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdW5zaGFyZSh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MpOwotYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwKLQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOworCithc21saW5rYWdlIGxvbmcgc3lzX3NwbGljZShpbnQgZmRfaW4sIGxvZmZfdCBfX3VzZXIgKm9mZl9pbiwKKwkJCSAgIGludCBmZF9vdXQsIGxvZmZfdCBfX3VzZXIgKm9mZl9vdXQsCisJCQkgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCithc21saW5rYWdlIGxvbmcgc3lzX3Ztc3BsaWNlKGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqaW92LAorCQkJICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHVuc2lnbmVkIGludCBmbGFncyk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdGVlKGludCBmZGluLCBpbnQgZmRvdXQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3luY19maWxlX3JhbmdlKGludCBmZCwgbG9mZl90IG9mZnNldCwgbG9mZl90IG5ieXRlcywKKwkJCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0X3JvYnVzdF9saXN0KGludCBwaWQsCisJCQkJICAgIHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqKmhlYWRfcHRyLAorCQkJCSAgICBzaXplX3QgX191c2VyICpsZW5fcHRyKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0X3JvYnVzdF9saXN0KHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqaGVhZCwKKwkJCQkgICAgc2l6ZV90IGxlbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDM5MmRhNWEuLjFlYTVkM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTc0LDYgKzc0LDcgQEAKIAl1bW9kZV90CQkJc19tb2RlOwogCXN0cnVjdCBkZW50cnkJCSogc19kZW50cnk7CiAJc3RydWN0IGlhdHRyCQkqIHNfaWF0dHI7CisJYXRvbWljX3QJCXNfZXZlbnQ7CiB9OwogCiAjZGVmaW5lIFNZU0ZTX1JPT1QJCTB4MDAwMQpAQCAtMTE3LDYgKzExOCw3IEBACiAKIGludCBzeXNmc19jcmVhdGVfZ3JvdXAoc3RydWN0IGtvYmplY3QgKiwgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKTsKIHZvaWQgc3lzZnNfcmVtb3ZlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKik7Cit2b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqIGssIGNoYXIgKmRpciwgY2hhciAqYXR0cik7CiAKICNlbHNlIC8qIENPTkZJR19TWVNGUyAqLwogCkBAIC0xODUsNiArMTg3LDEwIEBACiAJOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfbm90aWZ5KHN0cnVjdCBrb2JqZWN0ICogaywgY2hhciAqZGlyLCBjaGFyICphdHRyKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKICNlbmRpZiAvKiBfU1lTRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCBiNWNhYWJjLi4wYTQ4NWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAKLXN0cnVjdCB0aW1lcl9iYXNlX3M7CitzdHJ1Y3QgdHZlY190X2Jhc2VfczsKIAogc3RydWN0IHRpbWVyX2xpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CkBAIC0xNSwxNiArMTUsMTYgQEAKIAl2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpOwogCXVuc2lnbmVkIGxvbmcgZGF0YTsKIAotCXN0cnVjdCB0aW1lcl9iYXNlX3MgKmJhc2U7CisJc3RydWN0IHR2ZWNfdF9iYXNlX3MgKmJhc2U7CiB9OwogCi1leHRlcm4gc3RydWN0IHRpbWVyX2Jhc2VfcyBfX2luaXRfdGltZXJfYmFzZTsKK2V4dGVybiBzdHJ1Y3QgdHZlY190X2Jhc2VfcyBib290X3R2ZWNfYmFzZXM7CiAKICNkZWZpbmUgVElNRVJfSU5JVElBTElaRVIoX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpIHsJCVwKIAkJLmZ1bmN0aW9uID0gKF9mdW5jdGlvbiksCQkJXAogCQkuZXhwaXJlcyA9IChfZXhwaXJlcyksCQkJCVwKIAkJLmRhdGEgPSAoX2RhdGEpLAkJCQlcCi0JCS5iYXNlID0gJl9faW5pdF90aW1lcl9iYXNlLAkJCVwKKwkJLmJhc2UgPSAmYm9vdF90dmVjX2Jhc2VzLAkJCVwKIAl9CiAKICNkZWZpbmUgREVGSU5FX1RJTUVSKF9uYW1lLCBfZnVuY3Rpb24sIF9leHBpcmVzLCBfZGF0YSkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGlvY2wuaCBiL2luY2x1ZGUvbGludXgvdGlvY2wuaAppbmRleCAyYzllODQ3Li40NzU2ODYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Rpb2NsLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW9jbC5oCkBAIC0zNCw1ICszNCw2IEBACiAjZGVmaW5lIFRJT0NMX1NDUk9MTENPTlNPTEUJMTMJLyogc2Nyb2xsIGNvbnNvbGUgKi8KICNkZWZpbmUgVElPQ0xfQkxBTktTQ1JFRU4JMTQJLyoga2VlcCBzY3JlZW4gYmxhbmsgZXZlbiBpZiBhIGtleSBpcyBwcmVzc2VkICovCiAjZGVmaW5lIFRJT0NMX0JMQU5LRURTQ1JFRU4JMTUJLyogcmV0dXJuIHdoaWNoIHZ0IHdhcyBibGFua2VkICovCisjZGVmaW5lIFRJT0NMX0dFVEtNU0dSRURJUkVDVAkxNwkvKiBnZXQgdGhlIHZ0IHRoZSBrZXJuZWwgbWVzc2FnZXMgYXJlIHJlc3RyaWN0ZWQgdG8gKi8KIAogI2VuZGlmIC8qIF9MSU5VWF9USU9DTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmgKaW5kZXggMDk3NmExNi4uMzE1NDgzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaApAQCAtNiw5ICs2LDEwIEBACiBleHRlcm4gaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIGNvbnN0IGNoYXIgKmZsYWdzLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKipjaGFycywgc2l6ZV90IHNpemUpOwogZXh0ZXJuIGludCB0dHlfcHJlcGFyZV9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICoqY2hhcnMsIGNoYXIgKipmbGFncywgc2l6ZV90IHNpemUpOwordm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogc3RhdGljIGlubGluZSBpbnQgdHR5X2luc2VydF9mbGlwX2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCQkgICAgICAgdW5zaWduZWQgY2hhciBjaCwgY2hhciBmbGFnKQorCQkJCQl1bnNpZ25lZCBjaGFyIGNoLCBjaGFyIGZsYWcpCiB7CiAJc3RydWN0IHR0eV9idWZmZXIgKnRiID0gdHR5LT5idWYudGFpbDsKIAlpZiAodGIgJiYgdGItPmFjdGl2ZSAmJiB0Yi0+dXNlZCA8IHRiLT5zaXplKSB7CkBAIC0xOSwyNiArMjAsNCBAQAogCXJldHVybiB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHR0eSwgJmNoLCAmZmxhZywgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKSB7Ci0JCXR0eS0+YnVmLnRhaWwtPmFjdGl2ZSA9IDA7Ci0JCXR0eS0+YnVmLnRhaWwtPmNvbW1pdCA9IHR0eS0+YnVmLnRhaWwtPnVzZWQ7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOwotfQotCi0jdW5kZWYgX0lOTElORV8KLQotCiAjZW5kaWYgLyogX0xJTlVYX1RUWV9GTElQX0ggKi8KLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW5wdXQuaCBiL2luY2x1ZGUvbGludXgvdWlucHV0LmgKaW5kZXggMGZmN2NhNi4uNzE2ODMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VpbnB1dC5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICoKICAqIEF1dGhvcjogQXJpc3RldSBTZXJnaW8gUm96YW5za2kgRmlsaG8gPGFyaXNAY2F0aGVkcmFsbGFicy5vcmc+Ci0gKiAKKyAqCiAgKiBDaGFuZ2VzL1JldmlzaW9uczoKICAqCTAuMgkxNi8xMC8yMDA0IChNaWNhaCBEb3d0eSA8bWljYWhAbmF2aS5jeD4pCiAgKgkJLSBhZGRlZCBmb3JjZSBmZWVkYmFjayBzdXBwb3J0CkBAIC01MSw3ICs1MSw3IEBACiAKIHN0cnVjdCB1aW5wdXRfZGV2aWNlIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSpkZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZQlzZW07CisJc3RydWN0IG11dGV4CQltdXRleDsKIAllbnVtIHVpbnB1dF9zdGF0ZQlzdGF0ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0cTsKIAl1bnNpZ25lZCBjaGFyCQlyZWFkeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL25ldDIyODAuaCBiL2luY2x1ZGUvbGludXgvdXNiL25ldDIyODAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjAyZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvbmV0MjI4MC5oCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogTmV0Q2hpcCAyMjgwIGhpZ2gvZnVsbCBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXIuCisgKiBVbmxpa2UgbWFueSBzdWNoIGNvbnRyb2xsZXJzLCB0aGlzIG9uZSB0YWxrcyBQQ0kuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9VU0JfTkVUMjI4MF9ICisjZGVmaW5lIF9fTElOVVhfVVNCX05FVDIyODBfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIE5ldENoaXAgVGVjaG5vbG9neSwgSW5jLiAoaHR0cDovL3d3dy5uZXRjaGlwLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBORVQyMjgwIE1FTU9SWSBNQVBQRUQgUkVHSVNURVJTCisgKgorICogVGhlIHJlZ2lzdGVyIGxheW91dCBjYW1lIGZyb20gdGhlIGNoaXAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoZSBiaXQKKyAqIG51bWJlciBkZWZpbml0aW9ucyB3ZXJlIGV4dHJhY3RlZCBmcm9tIGNoaXAgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBVc2UgdGhlIHNoaWZ0IG9wZXJhdG9yICgnPDwnKSB0byBidWlsZCBiaXQgbWFza3MsIHdpdGggcmVhZGwvd3JpdGVsCisgKiB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVycyB0aHJvdWdoIFBDSS4KKyAqLworCisvKiBtYWluIHJlZ2lzdGVycywgQkFSMCArIDB4MDAwMCAqLworc3RydWN0IG5ldDIyODBfcmVncyB7CisJLy8gb2Zmc2V0IDB4MDAwMAorCXUzMgkJZGV2aW5pdDsKKyNkZWZpbmUgICAgIExPQ0FMX0NMT0NLX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBGT1JDRV9QQ0lfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgUENJX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFBDSV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBGSUZPX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgQ0ZHX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFBDSV9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBVU0JfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgTTgwNTFfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVlY3RsOworI2RlZmluZSAgICAgRUVQUk9NX0FERFJFU1NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBFRVBST01fQ0hJUF9TRUxFQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIEVFUFJPTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgRUVQUk9NX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBFRVBST01fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIEVFUFJPTV9DSElQX1NFTEVDVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSAgICAgRUVQUk9NX0JZVEVfUkVBRF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBFRVBST01fQllURV9XUklURV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEVFUFJPTV9SRUFEX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBFRVBST01fV1JJVEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZWVjbGtmcmVxOworCXUzMgkJX3VudXNlZDA7CisJLy8gb2Zmc2V0IDB4MDAxMAorCisJdTMyCQlwY2lpcnFlbmIwOwkJLyogaW50ZXJydXB0IFBDSSBtYXN0ZXIgLi4uICovCisjZGVmaW5lICAgICBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRU5EUE9JTlRfRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEVORFBPSU5UX0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBFTkRQT0lOVF9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgRU5EUE9JTlRfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEVORFBPSU5UX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBFTkRQT0lOVF9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgRU5EUE9JTlRfMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXBjaWlycWVuYjE7CisjZGVmaW5lICAgICBQQ0lfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX0FTU0VSVEVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTgKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWNwdV9pcnFlbmIwOwkJLyogLi4uIG9yIG9uYm9hcmQgODA1MSAqLworI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQljcHVfaXJxZW5iMTsKKyNkZWZpbmUgICAgIENQVV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisJLy8gb2Zmc2V0IDB4MDAyMAorCXUzMgkJX3VudXNlZDE7CisJdTMyCQl1c2JpcnFlbmIxOworI2RlZmluZSAgICAgVVNCX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgorI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlpcnFzdGF0MDsKKyNkZWZpbmUgICAgIElOVEFfQVNTRVJURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlpcnFzdGF0MTsKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBTT0ZfRE9XTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCS8vIG9mZnNldCAweDAwMzAKKwl1MzIJCWlkeGFkZHI7CisJdTMyCQlpZHhkYXRhOworCXUzMgkJZmlmb2N0bDsKKyNkZWZpbmUgICAgIFBDSV9CQVNFMl9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgSUdOT1JFX0ZJRk9fQVZBSUxBQklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFBDSV9CQVNFMl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBGSUZPX0NPTkZJR1VSQVRJT05fU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJX3VudXNlZDI7CisJLy8gb2Zmc2V0IDB4MDA0MAorCXUzMgkJbWVtYWRkcjsKKyNkZWZpbmUgICAgIFNUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSAgICAgRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBGSUZPX0RJQUdOT1NUSUNfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIE1FTU9SWV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQltZW1kYXRhMDsKKwl1MzIJCW1lbWRhdGExOworCXUzMgkJX3VudXNlZDM7CisJLy8gb2Zmc2V0IDB4MDA1MAorCXUzMgkJZ3Bpb2N0bDsKKyNkZWZpbmUgICAgIEdQSU8zX0xFRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgR1BJTzNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBHUElPMl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEdQSU8xX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBHUElPMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgR1BJTzNfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEdQSU8yX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBHUElPMV9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgR1BJTzBfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEdQSU8zX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBHUElPMl9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgR1BJTzFfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEdQSU8wX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlncGlvc3RhdDsKKyNkZWZpbmUgICAgIEdQSU8zX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBHUElPMl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgR1BJTzFfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEdQSU8wX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogdXNiIGNvbnRyb2wsIEJBUjAgKyAweDAwODAgKi8KK3N0cnVjdCBuZXQyMjgwX3VzYl9yZWdzIHsKKwkvLyBvZmZzZXQgMHgwMDgwCisJdTMyCQlzdGRyc3A7CisjZGVmaW5lICAgICBTVEFMTF9VTlNVUFBPUlRFRF9SRVFVRVNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFNFVF9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR0VUX09USEVSX1NQRUVEX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lICAgICBHRVRfREVWSUNFX1FVQUxJRklFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgICAgIFNFVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRU5EUE9JTlRfU0VUX0NMRUFSX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBERVZJQ0VfU0VUX0NMRUFSX0RFVklDRV9SRU1PVEVfV0FLRVVQICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBHRVRfU0VUX0lOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgR0VUX1NFVF9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEdFVF9DT05GSUdVUkFUSU9OX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBHRVRfREVWSUNFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgR0VUX0VORFBPSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEdFVF9JTlRFUkZBQ0VfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBHRVRfREVWSUNFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJcHJvZHZlbmRpZDsKKyNkZWZpbmUgICAgIFBST0RVQ1RfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgVkVORE9SX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXJlbG51bTsKKwl1MzIJCXVzYmN0bDsKKyNkZWZpbmUgICAgIFNFUklBTF9OVU1CRVJfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgUFJPRFVDVF9JRF9TVFJJTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBWRU5ET1JfSURfU1RSSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFVTQl9ST09UX1BPUlRfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgVkJVU19QSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBUSU1FRF9ESVNDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgU1VTUEVORF9JTU1FRElBVEVMWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIFNFTEZfUE9XRVJFRF9VU0JfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBSRU1PVEVfV0FLRVVQX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgUE1FX1BPTEFSSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFVTQl9ERVRFQ1RfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBQTUVfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREVWSUNFX1JFTU9URV9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNFTEZfUE9XRVJFRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJLy8gb2Zmc2V0IDB4MDA5MAorCXUzMgkJdXNic3RhdDsKKyNkZWZpbmUgICAgIEhJR0hfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBGVUxMX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgR0VORVJBVEVfUkVTVU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEdFTkVSQVRFX0RFVklDRV9SRU1PVEVfV0FLRVVQICAgICAgICAgICAgICAgICAgICAgICA0CisJdTMyCQl4Y3ZyZGlhZzsKKyNkZWZpbmUgICAgIEZPUkNFX0hJR0hfU1BFRURfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgRk9SQ0VfRlVMTF9TUEVFRF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lICAgICBVU0JfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIExJTkVfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgVFJBTlNDRUlWRVJfT1BFUkFUSU9OX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFRSQU5TQ0VJVkVSX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBURVJNSU5BVElPTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJc2V0dXAwMTIzOworCXUzMgkJc2V0dXA0NTY3OworCS8vIG9mZnNldCAweDAwOTAKKwl1MzIJCV91bnVzZWQwOworCXUzMgkJb3VyYWRkcjsKKyNkZWZpbmUgICAgIEZPUkNFX0lNTUVESUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBPVVJfVVNCX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJb3VyY29uZmlnOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHBjaSBjb250cm9sLCBCQVIwICsgMHgwMTAwICovCitzdHJ1Y3QgbmV0MjI4MF9wY2lfcmVncyB7CisJLy8gb2Zmc2V0IDB4MDEwMAorCXUzMgkJIHBjaW1zdGN0bDsKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1BBUktfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgUENJX01VTFRJIExFVkVMX0FSQklURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9NRU1PUllfV1JJVEVfQU5EX0lOVkFMSURBVEVfRU5BQkxFICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX1JFQURfTVVMVElQTEVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIERNQV9SRUFEX0xJTkVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NPTU1BTkRfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgICAgIE1FTV9SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICAgICAgICAgSU9fUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgICAgICBDRkdfUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUENJX01BU1RFUl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfUkVBRF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICAgICAgUENJX01BU1RFUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgICAgICAgICBQQ0lfTUFTVEVSX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9CWVRFX1dSSVRFX0VOQUJMRVMgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCSBwY2ltc3RhZGRyOworCXUzMgkJIHBjaW1zdGRhdGE7CisJdTMyCQkgcGNpbXN0c3RhdDsKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX0NMRUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBQQ0lfRVhURVJOQUxfQVJCSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgUENJX0hPU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBkbWEgY29udHJvbCwgQkFSMCArIDB4MDE4MCAuLi4gYXJyYXkgb2YgZm91ciBzdHJ1Y3RzIGxpa2UgdGhpcywKKyAqIGZvciBjaGFubmVscyAwLi4zLiAgc2VlIGFsc28gc3RydWN0IG5ldDIyODBfZG1hOiAgZGVzY3JpcHRvcgorICogdGhhdCBjYW4gYmUgbG9hZGVkIGludG8gc29tZSBvZiB0aGVzZSByZWdpc3RlcnMuCisgKi8KK3N0cnVjdCBuZXQyMjgwX2RtYV9yZWdzIHsJLyogWzExLjddICovCisJLy8gb2Zmc2V0IDB4MDE4MCwgMHgwMWEwLCAweDAxYzAsIDB4MDFlMCwKKwl1MzIJCWRtYWN0bDsKKyNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgRE1BX0NMRUFSX0NPVU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBERVNDUklQVE9SX1BPTExJTkdfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgICAgICBQT0xMX0NPTlRJTlVPVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgICAgIFBPTExfMV9VU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICAgICAgUE9MTF8xMDBfVVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgICAgICBQT0xMXzFfTVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRE1BX1ZBTElEX0JJVF9QT0xMSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lICAgICBETUFfVkFMSURfQklUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgRE1BX09VVF9BVVRPX1NUQVJUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIERNQV9QUkVFTVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBETUFfRklGT19WQUxJREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRE1BX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERNQV9BRERSRVNTX0hPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlkbWFzdGF0OworI2RlZmluZSAgICAgRE1BX0FCT1JUX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBETUFfU0NBVFRFUl9HQVRIRVJfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIERNQV9UUkFOU0FDVElPTl9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgRE1BX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERNQV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlfdW51c2VkMCBbMl07CisJLy8gb2Zmc2V0IDB4MDE5MCwgMHgwMWIwLCAweDAxZDAsIDB4MDFmMCwKKwl1MzIJCWRtYWNvdW50OworI2RlZmluZSAgICAgVkFMSURfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBETUFfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgICAgIERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSAgICAgRU5EX09GX0NIQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lICAgICAgICAgRE1BX0JZVEVfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoMTw8MjQpLTEpCisjZGVmaW5lICAgICBETUFfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZG1hYWRkcjsKKwl1MzIJCWRtYWRlc2M7CisJdTMyCQlfdW51c2VkMTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBkZWRpY2F0ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzLCBCQVIwICsgMHgwMjAwICovCisKK3N0cnVjdCBuZXQyMjgwX2RlcF9yZWdzIHsJLyogWzExLjhdICovCisJLy8gb2Zmc2V0IDB4MDIwMCwgMHgwMjEwLCAweDIyMCwgMHgyMzAsIDB4MjQwCisJdTMyCQlkZXBfY2ZnOworCS8vIG9mZnNldCAweDAyMDQsIDB4MDIxNCwgMHgyMjQsIDB4MjM0LCAweDI0NAorCXUzMgkJZGVwX3JzcDsKKwl1MzIJCV91bnVzZWQgWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGNvbmZpZ3VyYWJsZSBlbmRwb2ludCByZWdpc3RlcnMsIEJBUjAgKyAweDAzMDAgLi4uIGFycmF5IG9mIHNldmVuIHN0cnVjdHMKKyAqIGxpa2UgdGhpcywgZm9yIGVwMCB0aGVuIHRoZSBjb25maWd1cmFibGUgZW5kcG9pbnRzIEEuLkYKKyAqIGVwMCByZXNlcnZlZCBmb3IgY29udHJvbDsgRSBhbmQgRiBoYXZlIG9ubHkgNjQgYnl0ZXMgb2YgZmlmbworICovCitzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzIHsJLyogWzExLjldICovCisJLy8gb2Zmc2V0IDB4MDMwMCwgMHgwMzIwLCAweDAzNDAsIDB4MDM2MCwgMHgwMzgwLCAweDAzYTAsIDB4MDNjMAorCXUzMgkJZXBfY2ZnOworI2RlZmluZSAgICAgRU5EUE9JTlRfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEVORFBPSU5UX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBFTkRQT0lOVF9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRU5EUE9JTlRfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVwX3JzcDsKKyNkZWZpbmUgICAgIFNFVF9OQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSAgICAgU0VUX0VQX0hJREVfU1RBVFVTX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lICAgICBTRVRfRVBfRk9SQ0VfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIFNFVF9JTlRFUlJVUFRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgU0VUX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIFNFVF9FTkRQT0lOVF9UT0dHTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBTRVRfRU5EUE9JTlRfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgQ0xFQVJfTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENMRUFSX0VQX0hJREVfU1RBVFVTX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBDTEVBUl9FUF9GT1JDRV9DUkNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgQ0xFQVJfSU5URVJSVVBUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIENMRUFSX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBDTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgQ0xFQVJfRU5EUE9JTlRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIENMRUFSX0VORFBPSU5UX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllcF9pcnFlbmI7CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERBVEFfSU5fVE9LRU5fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllcF9zdGF0OworI2RlZmluZSAgICAgRklGT19WQUxJRF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBISUdIX0JBTkRXSURUSF9PVVRfVFJBTlNBQ1RJT05fUElEICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFRJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgVVNCX1NUQUxMX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBVU0JfSU5fTkFLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFVTQl9JTl9BQ0tfUkNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSAgICAgVVNCX09VVF9QSU5HX05BS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBVU0JfT1VUX0FDS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEZJRk9fT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRklGT19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBGSUZPX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIEZJRk9fRU1QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRklGT19GTFVTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERBVEFfSU5fVE9LRU5fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJLy8gb2Zmc2V0IDB4MDMxMCwgMHgwMzMwLCAweDAzNTAsIDB4MDM3MCwgMHgwMzkwLCAweDAzYjAsIDB4MDNkMAorCXUzMgkJZXBfYXZhaWw7CisJdTMyCQllcF9kYXRhOworCXUzMgkJX3VudXNlZDAgWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9ORVQyMjgwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaCBiL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaAppbmRleCBmYWRjNTM1Li5kYzdjNjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Zlcm1hZ2ljLmgKKysrIGIvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oCkBAIC0xMiw2ICsxMiwxMSBAQAogI2Vsc2UKICNkZWZpbmUgTU9EVUxFX1ZFUk1BR0lDX1BSRUVNUFQgIiIKICNlbmRpZgorI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEICJtb2RfdW5sb2FkICIKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEICIiCisjZW5kaWYKICNpZm5kZWYgTU9EVUxFX0FSQ0hfVkVSTUFHSUMKICNkZWZpbmUgTU9EVUxFX0FSQ0hfVkVSTUFHSUMgIiIKICNlbmRpZgpAQCAtMTksNSArMjQsNSBAQAogI2RlZmluZSBWRVJNQUdJQ19TVFJJTkcgCQkJCQkJXAogCVVUU19SRUxFQVNFICIgIgkJCQkJCQlcCiAJTU9EVUxFX1ZFUk1BR0lDX1NNUCBNT0RVTEVfVkVSTUFHSUNfUFJFRU1QVCAJCQlcCi0JTU9EVUxFX0FSQ0hfVkVSTUFHSUMgCQkJCQkJXAorCU1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEIE1PRFVMRV9BUkNIX1ZFUk1BR0lDIAkJXAogCSJnY2MtIiBfX3N0cmluZ2lmeShfX0dOVUNfXykgIi4iIF9fc3RyaW5naWZ5KF9fR05VQ19NSU5PUl9fKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggYWYyZDYxNS4uYWQ3ZmE5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC05NjYsNjYgKzk2NiwxNyBAQAogCiAvKiBUZWxldGV4dCBXb3JsZCBTeXN0ZW0gVGVsZXRleHQKICAgIChXU1QpLCBkZWZpbmVkIG9uIElUVS1SIEJULjY1My0yICovCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9CICAgICAgKDB4MDAwMDAxKQotI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQyAgICAgICgweDAwMDAwMikKLSNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19CICAgICAoMHgwMDAwMTApCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1NFQ0FNICAgICAgKDB4MDAwMDIwKQotCi0vKiBUZWxldGV4dCBOb3J0aCBBbWVyaWNhbiBCcm9hZGNhc3QgVGVsZXRleHQgU3BlY2lmaWNhdGlvbgotICAgKE5BQlRTKSwgZGVmaW5lZCBvbiBJVFUtUiBCVC42NTMtMiAqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0MgICAgICgweDAwMDA0MCkKLSNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19EICAgICAoMHgwMDAwODApCi0KKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAgICAgICAgICAoMHgwMDAxKQogLyogVmlkZW8gUHJvZ3JhbSBTeXN0ZW0sIGRlZmluZWQgb24gRVRTIDMwMCAyMzEqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgICAgICgweDAwMDQwMCkKLQorI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgICAgICgweDA0MDApCiAvKiBDbG9zZWQgQ2FwdGlvbiwgZGVmaW5lZCBvbiBFSUEtNjA4ICovCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICAgICAgKDB4MDAxMDAwKQotI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzYyNSAgICAgICAgICgweDAwMjAwMCkKLQorI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSAgICAgICAgICgweDEwMDApCiAvKiBXaWRlIFNjcmVlbiBTeXN0ZW0sIGRlZmluZWQgb24gSVRVLVIgQlQxMTE5LjEgKi8KLSNkZWZpbmUgVjRMMl9TTElDRURfV1NTXzYyNSAgICAgICAgICAgICAoMHgwMDQwMDApCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU182MjUgICAgICAgICAgICAgKDB4NDAwMCkKIAotLyogV2lkZSBTY3JlZW4gU3lzdGVtLCBkZWZpbmVkIG9uIElFQyA2MTg4MCAqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9XU1NfNTI1ICAgICAgICAgICAgICgweDAwODAwMCkKKyNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQogCi0vKiBWZXJ0aWNhbCBJbnRlcnZhbCBUaW1lY29kZSAoVklUQyksIGRlZmluZWQgb24gU01QVEUgMTJNICovCi0jZGVmaW5lIFY0bDJfU0xJQ0VEX1ZJVENfNjI1CQkoMHgwMTAwMDApCi0jZGVmaW5lIFY0bDJfU0xJQ0VEX1ZJVENfNTI1CQkoMHgwMjAwMDApCi0KLSNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQgkJKFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9CICB8XAotCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19CKQotCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUCQkoVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IgIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQyAgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1NFQ0FNICB8XAotCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19CIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0MgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfRCkKLQotI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OCQkoVjRMMl9TTElDRURfQ0FQVElPTl81MjUgICAgIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9DQVBUSU9OXzYyNSkKLQotI2RlZmluZSBWNEwyX1NMSUNFRF9XU1MJCQkoVjRMMl9TTElDRURfV1NTXzUyNSAgICAgICAgIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9XU1NfNjI1KQotCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1ZJVEMJCShWNEwyX1NMSUNFRF9WSVRDXzUyNSAgICAgICAgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX1ZJVENfNjI1KQotCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV81MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfQiB8XAotCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19DIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0QgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICB8XAotCQkJCQkgVjRMMl9TTElDRURfV1NTXzUyNSAgICAgICAgIHxcCi0JCQkJCSBWNGwyX1NMSUNFRF9WSVRDXzUyNSkKLQotI2RlZmluZSBWNEwyX1NMSUNFRF9WQklfNjI1ICAgICAgICAgICAgIChWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQiAgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9DICB8XAotCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfU0VDQU0gIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX0NBUFRJT05fNjI1ICAgICB8XAotCQkJCQkgVjRMMl9TTElDRURfV1NTXzYyNSAgICAgICAgIHxcCi0JCQkJCSBWNGwyX1NMSUNFRF9WSVRDXzYyNSkKIAogc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAKIHsKQEAgLTExOTAsOCArMTE0MSwxMyBAQAogLyogIENvbXBhdGliaWxpdHkgbGF5ZXIgaW50ZXJmYWNlICAtLSAgdjRsMS1jb21wYXQgbW9kdWxlICovCiB0eXBlZGVmIGludCAoKnY0bDJfa2lvY3RsKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIGludCB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICAgICBpbnQgY21kLCB2b2lkICphcmcsIHY0bDJfa2lvY3RsIGRyaXZlcl9pb2N0bCk7CisjZWxzZQorI2RlZmluZSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsaW9jdGwpIC1FSU5WQUwKKyNlbmRpZgogCiAvKiAzMiBCaXRzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIDY0IGJpdHMgcHJvY2Vzc29ycyAqLwogZXh0ZXJuIGxvbmcgdjRsX2NvbXBhdF9pb2N0bDMyKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmggYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAppbmRleCA1MzBhZTNmLi5mYWI1YWVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaApAQCAtNzMsMTEgKzczLDYgQEAKIGludCB2dF93YWl0YWN0aXZlKGludCB2dCk7CiB2b2lkIGNoYW5nZV9jb25zb2xlKHN0cnVjdCB2Y19kYXRhICpuZXdfdmMpOwogdm9pZCByZXNldF92YyhzdHJ1Y3QgdmNfZGF0YSAqdmMpOwotI2lmZGVmIENPTkZJR19WVAotaW50IGlzX2NvbnNvbGVfc3VzcGVuZF9zYWZlKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NvbnNvbGVfc3VzcGVuZF9zYWZlKHZvaWQpIHsgcmV0dXJuIDE7IH0KLSNlbmRpZgogCiAvKgogICogdmNfc2NyZWVuLmMgc2hhcmVzIHRoaXMgdGVtcG9yYXJ5IGJ1ZmZlciB3aXRoIHRoZSBjb25zb2xlIHdyaXRlIGNvZGUgc28gdGhhdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YW5waXBlLmggYi9pbmNsdWRlL2xpbnV4L3dhbnBpcGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlOTg2MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhbnBpcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogd2FucGlwZS5oCVdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIExpbmsgRHJpdmVyLgotKgkJVXNlci1sZXZlbCBBUEkgZGVmaW5pdGlvbnMuCi0qCi0qIEF1dGhvcjogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoJCUdpZGVvbiBIYWNrICAJCi0qCi0qIENvcHlyaWdodDoJKGMpIDE5OTUtMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIE5vdiAzLCAgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIGNvbmZpZ19pZCB0byBzZGxhX3Qgc3RydWN0dXJlLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGRldGVybWluZSB0aGUgcHJvdG9jb2wgcnVubmluZy4KLSogSnVsIDEzLCAyMDAwICBOZW5hZCBDb3JiaWMJQWRkZWQgU3luY1BQUCBTdXBwb3J0Ci0qIEZlYiAyNCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIHN1cHBvcnQgZm9yIHgyNWFwaSBkcml2ZXIKLSogT2N0IDA0LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgTmV3IENIRExDIGFuZCBGUkFNRSBSRUxBWSBjb2RlLCBTTVAgc3VwcG9ydAotKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrCUFkZGVkICd1cGRhdGVfY2FsbF9jb3VudCcgZm9yIENpc2NvIEhETEMgCi0qCQkJCXN1cHBvcnQKLSogSnVuIDI2LCAxOTk4CURhdmlkIEZvbmcJQWRkZWQgJ2lwX21vZGUnIGluIHNkbGFfdC51LnAgZm9yIGR5bmFtaWMgSVAKLSoJCQkJcm91dGluZyBtb2RlIGNvbmZpZ3VyYXRpb24KLSogSnVuIDEyLCAxOTk4CURhdmlkIEZvbmcJQWRkZWQgQ2lzY28gSERMQyB1bmlvbiBtZW1iZXIgaW4gc2RsYV90Ci0qIERlYyAwOCwgMTk5NwlKYXNwcmVldCBTaW5naCAgQWRkZWQgJ2F1dGhlbnRpY2F0b3InIGluIHVuaW9uIG9mICdzZGxhX3QnIAotKiBOb3YgMjYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ2xvYWRfc2hhcmluZycgc3RydWN0dXJlLiAgQWxzbyBhZGRlZCAKLSoJCQkJJ2RldnNfc3RydWN0JywnZGV2X3RvX2RldnRpbnRfbmV4dCcgdG8gJ3NkbGFfdCcJCi0qIE5vdiAyNCwgMTk5NwlKYXNwcmVldCBTaW5naAlBZGRlZCAnaXJxX2Rpc19pZl9zZW5kX2NvdW50JywgCi0qCQkJCSdpcnFfZGlzX3BvbGxfY291bnQnIHRvICdzZGxhX3QnLgotKiBOb3YgMDYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgYSBkZWZpbmUgY2FsbGVkICdJTlRSX1RFU1RfTU9ERScKLSogT2N0IDIwLCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkICdidWZmX2ludHJfbW9kZV91bmJ1c3knIGFuZCAKLSoJCQkJJ2RsY2lfaW50cl9tb2RlX3VuYnVzeScgdG8gJ3NkbGFfdCcKLSogT2N0IDE4LCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkIHN0cnVjdHVyZSB0byBtYWludGFpbiBnbG9iYWwgZHJpdmVyCi0qCQkJCXN0YXRpc3RpY3MuCi0qIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKLSoJCQkJIG8gYWRkZWQgVURQIG1hbmFnZW1lbnQgc3R1ZmYKLSogSmFuIDAyLCAxOTk3CUdlbmUgS296aW4JVmVyc2lvbiAzLjAuMAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9XQU5QSVBFX0gKLSNkZWZpbmUJX1dBTlBJUEVfSAotCi0jaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+Ci0KLS8qIERlZmluZXMgKi8KLQotI2lmbmRlZglQQUNLRUQKLSNkZWZpbmUJUEFDS0VECV9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZW5kaWYKLQotI2RlZmluZQlXQU5QSVBFX01BR0lDCTB4NDE0QzQ0NTNMCS8qIHNpZ25hdHVyZTogJ1NETEEnIHJldmVyc2VkICovCi0KLS8qIElPQ1RMIG51bWJlcnMgKHVwIHRvIDE2KSAqLwotI2RlZmluZQlXQU5QSVBFX0RVTVAJKFJPVVRFUl9VU0VSKzApCS8qIGR1bXAgYWRhcHRlcidzIG1lbW9yeSAqLwotI2RlZmluZQlXQU5QSVBFX0VYRUMJKFJPVVRFUl9VU0VSKzEpCS8qIGV4ZWN1dGUgZmlybXdhcmUgY29tbWFuZCAqLwotCi0jZGVmaW5lIFRSQUNFX0FMTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBUUkFDRV9QUk9UCQkJMHgwMQotI2RlZmluZSBUUkFDRV9EQVRBCQkJMHgwMgotCi0vKiB2YWx1ZXMgZm9yIHJlcXVlc3QvcmVwbHkgYnl0ZSAqLwotI2RlZmluZSBVRFBNR01UX1JFUVVFU1QJMHgwMQotI2RlZmluZSBVRFBNR01UX1JFUExZCTB4MDIKLSNkZWZpbmUgVURQX09GRlNFVAkxMgotCi0jZGVmaW5lIE1BWF9DTURfQlVGRiAJMTAKLSNkZWZpbmUgTUFYX1gyNV9MQ04gCTI1NQkvKiBNYXhpbXVtIG51bWJlciBvZiB4MjUgY2hhbm5lbHMgKi8KLSNkZWZpbmUgTUFYX0xDTl9OVU0JNDA5NQkvKiBNYXhpbXVtIGxjbiBudW1iZXIgKi8KLSNkZWZpbmUgTUFYX0ZUMV9SRVRSWSAJMTAwCi0KLSNpZm5kZWYgQUZfV0FOUElQRQotCSNkZWZpbmUgQUZfV0FOUElQRSAyNQotCSNpZm5kZWYgUEZfV0FOUElQRQotCQkjZGVmaW5lIFBGX1dBTlBJUEUgQUZfV0FOUElQRQotCSNlbmRpZgotI2VuZGlmCi0KLQotI2RlZmluZSBUWF9USU1FT1VUIDUqSFoKLQotLyogR2VuZXJhbCBDcml0aWNhbCBGbGFncyAqLwotI2RlZmluZSBTRU5EX0NSSVQJMHgwMAotI2RlZmluZSBQRVJJX0NSSVQJMHgwMQotCi0vKiBDaGRsYyBhbmQgUFBQIHBvbGxpbmcgY3JpdGljYWwgZmxhZyAqLwotI2RlZmluZSBQT0xMX0NSSVQJMHgwMwotCi0vKiBGcmFtZSBSZWxheSBUeCBJUlEgc2VuZCBjcml0aWNhbCBmbGFnICovCi0jZGVmaW5lIFNFTkRfVFhJUlFfQ1JJVCAweDAyCi0KLS8qIEZyYW1lIFJlbGF5IEFSUCBjcml0aWNhbCBmbGFnICovCi0jZGVmaW5lIEFSUF9DUklUCTB4MDMKLQotLyogQml0IG1hcHMgZm9yIGR5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24KLSAqIERZTl9PUFRfT04gOiB0dXJucyB0aGlzIG9wdGlvbiBvbi9vZmYgCi0gKiBERVZfRE9XTiAgIDogZGV2aWNlIHdhcyBzaHV0ZG93biBieSB0aGUgZHJpdmVyIG5vdAotICogICAgICAgICAgICAgIGJ5IHVzZXIgCi0gKi8KLSNkZWZpbmUgRFlOX09QVF9PTgkweDAwCi0jZGVmaW5lIERFVl9ET1dOCTB4MDEKLQotLyoKLSAqIERhdGEgc3RydWN0dXJlcyBmb3IgSU9DVEwgY2FsbHMuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc2RsYV9kdW1wCS8qIFdBTlBJUEVfRFVNUCAqLwotewotCXVuc2lnbmVkIGxvbmcgbWFnaWM7CS8qIGZvciB2ZXJpZmljYXRpb24gKi8KLQl1bnNpZ25lZCBsb25nIG9mZnNldDsJLyogYWJzb2x1dGUgYWRhcHRlciBtZW1vcnkgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOwkvKiBibG9jayBsZW5ndGggKi8KLQl2b2lkKiBwdHI7CQkvKiAtPiBidWZmZXIgKi8KLX0gc2RsYV9kdW1wX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHNkbGFfZXhlYwkvKiBXQU5QSVBFX0VYRUMgKi8KLXsKLQl1bnNpZ25lZCBsb25nIG1hZ2ljOwkvKiBmb3IgdmVyaWZpY2F0aW9uICovCi0Jdm9pZCogY21kOwkJLyogLT4gY29tbWFuZCBzdHJ1Y3R1cmUgKi8KLQl2b2lkKiBkYXRhOwkJLyogLT4gZGF0YSBidWZmZXIgKi8KLX0gc2RsYV9leGVjX3Q7Ci0KLS8qIFVEUCBtYW5hZ2VtZW50IHN0dWZmICovCi0KLXR5cGVkZWYgc3RydWN0IHd1bV9oZWFkZXIKLXsKLQl1bnNpZ25lZCBjaGFyIHNpZ25hdHVyZVs4XTsJLyogMDBoOiBzaWduYXR1cmUgKi8KLQl1bnNpZ25lZCBjaGFyIHR5cGU7CQkvKiAwOGg6IHJlcXVlc3QvcmVwbHkgKi8KLQl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CQkvKiAwOWg6IGNvbW1uYW5kICovCi0JdW5zaWduZWQgY2hhciByZXNlcnZlZFs2XTsJLyogMEFoOiByZXNlcnZlZCAqLwotfSB3dW1faGVhZGVyX3Q7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gRGF0YSBTdHJ1Y3R1cmUgZm9yIGdsb2JhbCBzdGF0aXN0aWNzCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi10eXBlZGVmIHN0cnVjdCBnbG9iYWxfc3RhdHMKLXsKLQl1bnNpZ25lZCBsb25nIGlzcl9lbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlzcl9hbHJlYWR5X2NyaXRpY2FsOwkJCi0JdW5zaWduZWQgbG9uZyBpc3Jfcng7Ci0JdW5zaWduZWQgbG9uZyBpc3JfdHg7Ci0JdW5zaWduZWQgbG9uZyBpc3JfaW50cl90ZXN0OwotCXVuc2lnbmVkIGxvbmcgaXNyX3NwdXJpb3VzOwotCXVuc2lnbmVkIGxvbmcgaXNyX2VuYWJsZV90eF9pbnQ7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRyX2NvcnJ1cHRfcnhfYmZyOwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9vbl9vcnBoYW5lZF9ETENJOwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7Ci0JdW5zaWduZWQgbG9uZyB0eF9pbnRyX2Rldl9ub3Rfc3RhcnRlZDsKLQl1bnNpZ25lZCBsb25nIHBvbGxfZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBwb2xsX2FscmVhZHlfY3JpdGljYWw7Ci0JdW5zaWduZWQgbG9uZyBwb2xsX3Byb2Nlc3NlZDsKLQl1bnNpZ25lZCBsb25nIHBvbGxfdGJ1c3lfYmFkX3N0YXR1czsKLQl1bnNpZ25lZCBsb25nIHBvbGxfaG9zdF9kaXNhYmxlX2lycTsKLQl1bnNpZ25lZCBsb25nIHBvbGxfaG9zdF9lbmFibGVfaXJxOwotCi19IGdsb2JhbF9zdGF0c190OwotCi0KLXR5cGVkZWYgc3RydWN0ewotCXVuc2lnbmVkIHNob3J0CXVkcF9zcmNfcG9ydAkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXVkcF9kc3RfcG9ydAkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXVkcF9sZW5ndGgJCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl1ZHBfY2hlY2tzdW0JCVBBQ0tFRDsKLX0gdWRwX3BrdF90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCXZlcl9pbmV0X2hkcl9sZW5ndGgJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJc2VydmljZV90eXBlCQlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdG90YWxfbGVuZ3RoCQlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJaWRlbnRpZmllcgkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CWZsYWdzX2ZyYWdfb2Zmc2V0CVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXR0bAkJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXByb3RvY29sCQlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJaGRyX2NoZWNrc3VtCQlQQUNLRUQ7Ci0JdW5zaWduZWQgbG9uZwlpcF9zcmNfYWRkcmVzcwkJUEFDS0VEOwotCXVuc2lnbmVkIGxvbmcJaXBfZHN0X2FkZHJlc3MJCVBBQ0tFRDsKLX0gaXBfcGt0X3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBzaWduYXR1cmVbOF0gICAgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICByZXF1ZXN0X3JlcGx5ICAgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBpZCAgICAgICAgICAgICAgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICByZXNlcnZlZFs2XSAgICAgUEFDS0VEOwotfSB3cF9tZ210X3Q7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gRGF0YSBTdHJ1Y3R1cmUgZm9yIGlmX3NlbmQgIHN0YXRpc3RpY3MKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAKLXR5cGVkZWYgc3RydWN0IGlmX3NlbmRfc3RhdHsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX3NrYl9udWxsOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9icm9hZGNhc3Q7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX211bHRpY2FzdDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfY3JpdGljYWxfSVNSOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9jcml0aWNhbF9ub25fSVNSOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF90YnVzeTsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfdGJ1c3lfdGltZW91dDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfUElQRV9yZXF1ZXN0OwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF93YW5fZGlzY29ubmVjdGVkOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9kbGNpX2Rpc2Nvbm5lY3RlZDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfbm9fYmZyczsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfYWRwdHJfYmZyc19mdWxsOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9iZnJfcGFzc2VkX3RvX2FkcHRyOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9wcm90b2NvbF9lcnJvcjsKLSAgICAgICAJdW5zaWduZWQgbG9uZyBpZl9zZW5kX2Jmcl9ub3RfcGFzc2VkX3RvX2FkcHRyOwotICAgICAgIAl1bnNpZ25lZCBsb25nIGlmX3NlbmRfdHhfaW50X2VuYWJsZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaWZfc2VuZF9jb25zZWNfc2VuZF9mYWlsOyAKLX0gaWZfc2VuZF9zdGF0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHJ4X2ludHJfc3RhdHsKLQl1bnNpZ25lZCBsb25nIHJ4X2ludHJfbm9fc29ja2V0OwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRyX1BJUEVfcmVxdWVzdDsKLQl1bnNpZ25lZCBsb25nIHJ4X2ludHJfYmZyX25vdF9wYXNzZWRfdG9fc3RhY2s7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7Ci19IHJ4X2ludHJfc3RhdF90OwkKLQotdHlwZWRlZiBzdHJ1Y3QgcGlwZV9tZ210X3N0YXR7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyOwotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9kaXJlY3Rpb25fZXJyOwotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9hZHB0cl90eXBlX2VycjsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF9PSzsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF90aW1lb3V0OwotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9hZHB0cl9zZW5kX3Bhc3NlZDsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9mYWlsZWQ7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X25vdF9wYXNzZWRfdG9fc3RhY2s7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X3Bhc3NlZF90b19zdGFjazsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfbm9fc29ja2V0OwotICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfcGFzc2VkX3RvX2FkcHRyOwotfSBwaXBlX21nbXRfc3RhdF90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotfSBiaF9kYXRhX3QsIGNtZF9kYXRhX3Q7Ci0KLSNkZWZpbmUgTUFYX0xHVEhfVURQX01HTlRfUEtUIDIwMDAKLSAKLQotLyogVGhpcyBpcyB1c2VkIGZvciBpbnRlcnJ1cHQgdGVzdGluZyAqLwotI2RlZmluZSBJTlRSX1RFU1RfTU9ERQkweDAyCi0KLSNkZWZpbmUJV1VNX1NJR05BVFVSRV9MCTB4NTA0OTUwNDYKLSNkZWZpbmUJV1VNX1NJR05BVFVSRV9ICTB4NDQ0RTM4NDUKLQotI2RlZmluZQlXVU1fS0lMTAkweDUwCi0jZGVmaW5lCVdVTV9FWEVDCTB4NTEKLQotI2RlZmluZSBXQU5QSVBFCQkweDAwCi0jZGVmaW5lIEFQSQkJMHgwMQotI2RlZmluZSBCUklER0UJCTB4MDIKLSNkZWZpbmUgQlJJREdFX05PREUJMHgwMwotCi0jaWZkZWYJX19LRVJORUxfXwotLyoqKioqKiBLZXJuZWwgSW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9zZGxhZHJ2Lmg+CS8qIFNETEEgc3VwcG9ydCBtb2R1bGUgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvc2RsYXNmbS5oPgkvKiBTRExBIGZpcm13YXJlIG1vZHVsZSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbFAuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+Ci0jaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgotCi0vKioqKioqIERhdGEgU3RydWN0dXJlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQWRhcHRlciBEYXRhIFNwYWNlLgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgaGFuZGxlIG11bHRpcGxlIGNhcmRzLCBvdGhlcndpc2UKLSAqIHN0YXRpYyBkYXRhIHdvdWxkIGRvIGl0LgotICovCi10eXBlZGVmIHN0cnVjdCBzZGxhCi17Ci0JY2hhciBkZXZuYW1lW1dBTl9EUlZOQU1FX1NaKzFdOwkvKiBjYXJkIG5hbWUgKi8KLQlzZGxhaHdfdCBodzsJCQkvKiBoYXJkd2FyZSBjb25maWd1cmF0aW9uICovCi0Jc3RydWN0IHdhbl9kZXZpY2Ugd2FuZGV2OwkvKiBXQU4gZGV2aWNlIGRhdGEgc3BhY2UgKi8KLQkKLQl1bnNpZ25lZCBvcGVuX2NudDsJCS8qIG51bWJlciBvZiBvcGVuIGludGVyZmFjZXMgKi8KLQl1bnNpZ25lZCBsb25nIHN0YXRlX3RpY2s7CS8qIGxpbmsgc3RhdGUgdGltZXN0YW1wICovCi0JdW5zaWduZWQgaW50cl9tb2RlOwkJLyogVHlwZSBvZiBJbnRlcnJ1cHQgTW9kZSAqLwotCWNoYXIgaW5faXNyOwkJCS8qIGludGVycnVwdC1pbi1zZXJ2aWNlIGZsYWcgKi8KLQljaGFyIGJ1ZmZfaW50X21vZGVfdW5idXN5OwkvKiBmbGFnIGZvciBjYXJyeWluZyBvdXQgZGV2X3RpbnQgKi8gIAotCWNoYXIgZGxjaV9pbnRfbW9kZV91bmJ1c3k7CS8qIGZsYWcgZm9yIGNhcnJ5aW5nIG91dCBkZXZfdGludCAqLwotCWxvbmcgY29uZmlndXJlZDsJCS8qIGZsYWcgZm9yIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zICovCi0JCi0JdW5zaWduZWQgc2hvcnQgaXJxX2Rpc19pZl9zZW5kX2NvdW50OyAvKiBEaXNhYmxpbmcgaXJxcyBpbiBpZl9zZW5kKi8KLQl1bnNpZ25lZCBzaG9ydCBpcnFfZGlzX3BvbGxfY291bnQ7ICAgLyogRGlzYWJsaW5nIGlycXMgaW4gcG9sbCByb3V0aW5lKi8KLQl1bnNpZ25lZCBzaG9ydCBmb3JjZV9lbmFibGVfaXJxOwotCWNoYXIgVHJhY2luZ0VuYWJsZWQ7CQkvKiBmbGFnIGZvciBlbmFibGluZyB0cmFjZSAqLwotCWdsb2JhbF9zdGF0c190IHN0YXRpc3RpY3M7CS8qIGdsb2JhbCBzdGF0aXN0aWNzICovCi0Jdm9pZCogbWJveDsJCQkvKiAtPiBtYWlsYm94ICovCi0Jdm9pZCogcnhtYjsJCQkvKiAtPiByZWNlaXZlIG1haWxib3ggKi8KLQl2b2lkKiBmbGFnczsJCQkvKiAtPiBhZGFwdGVyIHN0YXR1cyBmbGFncyAqLwotCXZvaWQgKCppc3IpKHN0cnVjdCBzZGxhKiBjYXJkKTsJLyogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLwotCXZvaWQgKCpwb2xsKShzdHJ1Y3Qgc2RsYSogY2FyZCk7IC8qIHBvbGxpbmcgcm91dGluZSAqLwotCWludCAoKmV4ZWMpKHN0cnVjdCBzZGxhKiBjYXJkLCB2b2lkKiB1X2NtZCwgdm9pZCogdV9kYXRhKTsKLQkJCQkJLyogVXNlZCBieSB0aGUgbGlzdGVuKCkgc3lzdGVtIGNhbGwgKi8JCQotCS8qIFdhbnBpcGUgU29ja2V0IEludGVyZmFjZSAqLwotCWludCAgICgqZnVuYykgKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBzb2NrICopOwotCXN0cnVjdCBzb2NrICpzazsKLQotCS8qIFNodXRkb3duIGZ1bmN0aW9uICovCi0Jdm9pZCAoKmRpc2FibGVfY29tbSkgKHN0cnVjdCBzZGxhICpjYXJkKTsKLQotCS8qIFNlY29uZGFyeSBQb3J0IERldmljZTogUGlnZ2liYWNraW5nICovCi0Jc3RydWN0IHNkbGEgKm5leHQ7Ci0KLQkvKiBUVFkgZHJpdmVyIHZhcmlhYmxlcyAqLwotCXVuc2lnbmVkIGNoYXIgdHR5X29wdDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXVuc2lnbmVkIGludCB0dHlfbWlub3I7Ci0JdW5zaWduZWQgaW50IHR0eV9vcGVuOwotCXVuc2lnbmVkIGNoYXIgKnR0eV9idWY7Ci0JdW5zaWduZWQgY2hhciAqdHR5X3J4OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0dHlfd29yazsKLQkKLQl1bmlvbgotCXsKLQkJc3RydWN0Ci0JCXsJCQkvKioqKioqIFguMjUgc3BlY2lmaWMgZGF0YSAqKioqKioqKioqLwotCQkJdTMyIGxvX3B2YzsKLQkJCXUzMiBoaV9wdmM7Ci0JCQl1MzIgbG9fc3ZjOwotCQkJdTMyIGhpX3N2YzsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpzdmNfdG9fZGV2X21hcFtNQVhfWDI1X0xDTl07Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqcHZjX3RvX2Rldl9tYXBbTUFYX1gyNV9MQ05dOwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnR4X2RldjsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpjbWRfZGV2OwotCQkJdTMyIG5vX2RldjsKLQkJCXZvbGF0aWxlIHU4ICpoZGxjX2J1Zl9zdGF0dXM7Ci0JCQl1MzIgdHhfaW50ZXJydXB0c19wZW5kaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHRpbWVyX2ludF9lbmFibGVkOwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnBvbGxfZGV2aWNlOwotCQkJYXRvbWljX3QgY29tbWFuZF9idXN5OwotCi0JCQl1MTYgdWRwX3BrdF9sZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHVkcF90eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgdTggIHVkcF9wa3Rfc3JjOwotCQkJdTMyIHVkcF9sY247Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqdWRwX2RldjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHM4IHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotCi0JCSAJdTggTEFQQl9oZGxjOwkJLyogT3B0aW9uIHRvIHR1cm4gb2ZmIFgyNSBhbmQgcnVuIG9ubHkgTEFQQiAqLwotCQkJdTggbG9nZ2luZzsJCS8qIE9wdGlvbiB0byBsb2cgY2FsbCBtZXNzYWdlcyAqLwotCQkJdTggb29iX29uX21vZGVtOwkvKiBPcHRpb24gdG8gc2VuZCBtb2RlbSBzdGF0dXMgdG8gdGhlIGFwaSAqLwotCQkJdTE2IG51bV9vZl9jaDsJCS8qIE51bWJlciBvZiBjaGFubmVscyBjb25maWd1cmVkIGJ5IHRoZSB1c2VyICovCi0KLQkJCXN0cnVjdCB3b3JrX3N0cnVjdCB4MjVfcG9sbF93b3JrOwotCQkJc3RydWN0IHRpbWVyX2xpc3QgeDI1X3RpbWVyOwotCQl9IHg7Ci0JCXN0cnVjdAotCQl7CQkJLyoqKioqKiBmcmFtZSByZWxheSBzcGVjaWZpYyBkYXRhICoqKi8KLQkJCXZvaWQqIHJ4bWJfYmFzZTsJLyogLT4gZmlyc3QgUnggYnVmZmVyICovCi0JCQl2b2lkKiByeG1iX2xhc3Q7CS8qIC0+IGxhc3QgUnggYnVmZmVyICovCi0JCQl1bnNpZ25lZCByeF9iYXNlOwkvKiBTNTA4IHJlY2VpdmUgYnVmZmVyIGJhc2UgKi8KLQkJCXVuc2lnbmVkIHJ4X3RvcDsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBlbmQgKi8KLQkJCXVuc2lnbmVkIHNob3J0IG5vZGVfZGxjaVsxMDBdOwotCQkJdW5zaWduZWQgc2hvcnQgZGxjaV9udW07Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGxjaV90b19kZXZfbWFwWzk5MSArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdHhfaW50ZXJydXB0c19wZW5kaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdGltZXJfaW50X2VuYWJsZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB1ZHBfcGt0X2xndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgdWRwX3R5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHVkcF9wa3Rfc3JjOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdWRwX2RsY2k7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogdHJjX2VsX2Jhc2U7ICAgICAgCQkvKiBmaXJzdCB0cmFjZSBlbGVtZW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiB0cmNfZWxfbGFzdDsgICAgICAJCS8qIGxhc3QgdHJhY2UgZWxlbWVudCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3Vycl90cmNfZWw7ICAgICAgCQkvKiBjdXJyZW50IHRyYWNlIGVsZW1lbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRyY19iZnJfc3BhY2U7IAkJLyogdHJhY2UgYnVmZmVyIHNwYWNlICovCi0JCQl1bnNpZ25lZCBjaGFyICB1cGRhdGVfY29tbXNfc3RhdHM7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqYXJwX2RldjsKLQkJCXNwaW5sb2NrX3QgaWZfc2VuZF9sb2NrOwotCQl9IGY7Ci0JCXN0cnVjdAkJCS8qKioqKiogUFBQLXNwZWNpZmljIGRhdGEgKioqKioqKioqKiovCi0JCXsKLQkJCWNoYXIgaWZfbmFtZVtXQU5fSUZOQU1FX1NaKzFdOwkvKiBpbnRlcmZhY2UgbmFtZSAqLwotCQkJdm9pZCogdHhidWY7CQkvKiAtPiBjdXJyZW50IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHhidWZfYmFzZTsJLyogLT4gZmlyc3QgVHggYnVmZmVyICovCi0JCQl2b2lkKiB0eGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogcnhidWZfYmFzZTsJLyogLT4gZmlyc3QgUnggYnVmZmVyICovCi0JCQl2b2lkKiByeGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFJ4IGJ1ZmZlciAqLwotCQkJdW5zaWduZWQgcnhfYmFzZTsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBiYXNlICovCi0JCQl1bnNpZ25lZCByeF90b3A7CS8qIFM1MDggcmVjZWl2ZSBidWZmZXIgZW5kICovCi0JCQljaGFyIGlwX21vZGU7CQkvKiBTVEFUSUMvSE9TVC9QRUVSIElQIE1vZGUgKi8KLQkJCWNoYXIgYXV0aGVudGljYXRvcjsJLyogQXV0aGVudGljYXRvciBmb3IgUEFQL0NIQVAgKi8KLQkJCXVuc2lnbmVkIGNoYXIgY29tbV9lbmFibGVkOyAvKiBJcyBjb21tIGVuYWJsZWQgb3Igbm90ICovCi0JCQl1bnNpZ25lZCBjaGFyIHBlZXJfcm91dGU7ICAgLyogUHJvY2VzcyBQZWVyIFJvdXRlICovCQotCQkJdW5zaWduZWQgbG9uZyAqdHhidWZfbmV4dDsgIC8qIE5leHQgVHggYnVmZmVyIHRvIHVzZSAqLyAKLQkJCXVuc2lnbmVkIGxvbmcgKnJ4YnVmX25leHQ7ICAvKiBOZXh0IFJ4IGJ1ZmZlciB0byB1c2UgKi8KLQkJfSBwOwotCQlzdHJ1Y3QJCQkvKiBDaXNjbyBIRExDLXNwZWNpZmljIGRhdGEgKi8KLQkJewotCQkJY2hhciBpZl9uYW1lW1dBTl9JRk5BTUVfU1orMV07CS8qIGludGVyZmFjZSBuYW1lICovCi0JCQl1bnNpZ25lZCBjaGFyIGNvbW1fcG9ydDsvKiBDb21tdW5pY2F0aW9uIFBvcnQgTyBvciAxICovCi0JCQl1bnNpZ25lZCBjaGFyIHVzZWRieTsgIC8qIFVzZWQgYnkgV0FOUElQRSBvciBBUEkgKi8KLQkJCXZvaWQqIHJ4bWI7CQkvKiBSZWNlaXZlIG1haWwgYm94ICovCi0JCQl2b2lkKiBmbGFnczsJCS8qIGZsYWdzICovCi0JCQl2b2lkKiB0eF9zdGF0dXM7CS8qIFR4IHN0YXR1cyBlbGVtZW50ICovCi0JCQl2b2lkKiByeF9zdGF0dXM7CS8qIFJ4IHN0YXR1cyBlbGVtZW50ICovCi0JCQl2b2lkKiB0eGJ1ZjsJCS8qIC0+IGN1cnJlbnQgVHggYnVmZmVyICovCi0JCQl2b2lkKiB0eGJ1Zl9iYXNlOwkvKiAtPiBmaXJzdCBUeCBidWZmZXIgKi8KLQkJCXZvaWQqIHR4YnVmX2xhc3Q7CS8qIC0+IGxhc3QgVHggYnVmZmVyICovCi0JCQl2b2lkKiByeGJ1Zl9iYXNlOwkvKiAtPiBmaXJzdCBSeCBidWZmZXIgKi8KLQkJCXZvaWQqIHJ4YnVmX2xhc3Q7CS8qIC0+IGxhc3QgUnggYnVmZmVyICovCi0JCQl1bnNpZ25lZCByeF9iYXNlOwkvKiBTNTA4IHJlY2VpdmUgYnVmZmVyIGJhc2UgKi8KLQkJCXVuc2lnbmVkIHJ4X3RvcDsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBlbmQgKi8KLQkJCXVuc2lnbmVkIGNoYXIgcmVjZWl2ZV9vbmx5OyAvKiBoaWdoIHNwZWVkIHJlY2VpdmVycyAqLwotCQkJdW5zaWduZWQgc2hvcnQgcHJvdG9jb2xfb3B0aW9uczsKLQkJCXVuc2lnbmVkIHNob3J0IGtwYWx2X3R4OwkvKiBUeCBrcGFsdiB0aW1lciAqLwotCQkJdW5zaWduZWQgc2hvcnQga3BhbHZfcng7CS8qIFJ4IGtwYWx2IHRpbWVyICovCi0JCQl1bnNpZ25lZCBzaG9ydCBrcGFsdl9lcnI7CS8qIEVycm9yIHRvbGVyYW5jZSAqLwotCQkJdW5zaWduZWQgc2hvcnQgc2xhcnBfdGltZXI7CS8qIFNMQVJQIHJlcSB0aW1lciAqLwotCQkJdW5zaWduZWQgc3RhdGU7CQkJLyogc3RhdGUgb2YgdGhlIGxpbmsgKi8KLQkJCXVuc2lnbmVkIGNoYXIgYXBpX3N0YXR1czsKLQkJCXVuc2lnbmVkIGNoYXIgdXBkYXRlX2NhbGxfY291bnQ7Ci0JCQl1bnNpZ25lZCBzaG9ydCBhcGlfb3B0aW9uczsJLyogZm9yIGFzeW5jIGNvbmZpZyAqLwotCQkJdW5zaWduZWQgY2hhciAgYXN5bmNfbW9kZTsKLQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eF9iaXRzX3Blcl9jaGFyOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHJ4X2JpdHNfcGVyX2NoYXI7Ci0JCSAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RvcF9iaXRzOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHBhcml0eTsKLQkJCXVuc2lnbmVkIHNob3J0IGJyZWFrX3RpbWVyOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IGludGVyX2NoYXJfdGltZXI7Ci0JCSAgICAgICAgdW5zaWduZWQgc2hvcnQgcnhfY29tcGxldGVfbGVuZ3RoOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHhvbl9jaGFyOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHhvZmZfY2hhcjsKLQkJCXVuc2lnbmVkIGNoYXIgY29tbV9lbmFibGVkOyAvKiBJcyBjb21tIGVuYWJsZWQgb3Igbm90ICovCi0JCQl1bnNpZ25lZCBjaGFyIGJhY2t1cDsKLQkJfSBjOwotCQlzdHJ1Y3QKLQkJewotCQkJdm9pZCogdHhfc3RhdHVzOwkvKiBUeCBzdGF0dXMgZWxlbWVudCAqLwotCQkJdm9pZCogcnhfc3RhdHVzOwkvKiBSeCBzdGF0dXMgZWxlbWVudCAqLwotCQkJdm9pZCogdHJhY2Vfc3RhdHVzOwkvKiBUcmFjZSBzdGF0dXMgZWxlbWVudCAqLwotCQkJdm9pZCogdHhidWY7CQkvKiAtPiBjdXJyZW50IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHhidWZfYmFzZTsJLyogLT4gZmlyc3QgVHggYnVmZmVyICovCi0JCQl2b2lkKiB0eGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogcnhidWZfYmFzZTsJLyogLT4gZmlyc3QgUnggYnVmZmVyICovCi0JCQl2b2lkKiByeGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFJ4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHJhY2VidWY7CQkvKiAtPiBjdXJyZW50IFRyYWNlIGJ1ZmZlciAqLwotCQkJdm9pZCogdHJhY2VidWZfYmFzZTsJLyogLT4gY3VycmVudCBUcmFjZSBidWZmZXIgKi8KLQkJCXZvaWQqIHRyYWNlYnVmX2xhc3Q7CS8qIC0+IGN1cnJlbnQgVHJhY2UgYnVmZmVyICovCi0JCQl1bnNpZ25lZCByeF9iYXNlOwkvKiByZWNlaXZlIGJ1ZmZlciBiYXNlICovCi0JCQl1bnNpZ25lZCByeF9lbmQ7CS8qIHJlY2VpdmUgYnVmZmVyIGVuZCAqLwotCQkJdW5zaWduZWQgdHJhY2VfYmFzZTsJLyogdHJhY2UgYnVmZmVyIGJhc2UgKi8KLQkJCXVuc2lnbmVkIHRyYWNlX2VuZDsJLyogdHJhY2UgYnVmZmVyIGVuZCAqLwotCi0JCX0gaDsKLQl9IHU7Ci19IHNkbGFfdDsKLQotLyoqKioqKiBQdWJsaWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgd2FucGlwZV9vcGVuICAgICAgKHNkbGFfdCogY2FyZCk7CQkJLyogd3BtYWluLmMgKi8KLXZvaWQgd2FucGlwZV9jbG9zZSAgICAgKHNkbGFfdCogY2FyZCk7CQkJLyogd3BtYWluLmMgKi8KLXZvaWQgd2FucGlwZV9zZXRfc3RhdGUgKHNkbGFfdCogY2FyZCwgaW50IHN0YXRlKTsJLyogd3BtYWluLmMgKi8KLQotaW50IHdweF9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiB3cHguYyAqLwotaW50IHdwZl9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiB3cGYuYyAqLwotaW50IHdwcF9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiB3cHAuYyAqLwotaW50IHdwY19pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOyAvKiBDaXNjbyBIRExDICovCi1pbnQgYnNjX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7CS8qIEJTQyBzdHJlYW1pbmcgKi8KLWludCBoZGxjX2luaXQoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsJLyogSERMQyBzdXBwb3J0ICovCi1pbnQgd3BmdDFfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsgICAgIC8qIEZUMSBDb25maWcgc3VwcG9ydCAqLwotaW50IHdzcHBwX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7CS8qIFN5bmMgUFBQIG9uIHRvcCBvZiBSQVcgQ0hETEMgKi8KLQotZXh0ZXJuIHNkbGFfdCAqIHdhbnBpcGVfZmluZF9jYXJkKGNoYXIgKik7Ci1leHRlcm4gc2RsYV90ICogd2FucGlwZV9maW5kX2NhcmRfbnVtIChpbnQpOwotCi1leHRlcm4gdm9pZCB3YW5waXBlX3F1ZXVlX3dvcmsgKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKLWV4dGVybiB2b2lkIHdhbnBpcGVfbWFya19iaCAodm9pZCk7Ci1leHRlcm4gdm9pZCB3YWtldXBfc2tfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IGNoYW5nZV9kZXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgZmxhZ3MpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2lwX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG9wdGlvbik7Ci1leHRlcm4gdm9pZCBhZGRfZ2F0ZXdheShzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0KLSNlbmRpZgkvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYJLyogX1dBTlBJUEVfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaCBiL2luY2x1ZGUvbWVkaWEvY3gyNTg0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlN2U1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaApAQCAtMCwwICsxLDY0IEBACisvKgorICAgIGN4MjU4NDAuaCAtIGRlZmluaXRpb24gZm9yIGN4MjU4NDAvMS8yLzMgaW5wdXRzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX0NYMjU4NDBfSF8KKyNkZWZpbmUgX0NYMjU4NDBfSF8KKworZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0IHsKKwkvKiBDb21wb3NpdGUgdmlkZW8gaW5wdXRzIEluMS1JbjggKi8KKwlDWDI1ODQwX0NPTVBPU0lURTEgPSAxLAorCUNYMjU4NDBfQ09NUE9TSVRFMiwKKwlDWDI1ODQwX0NPTVBPU0lURTMsCisJQ1gyNTg0MF9DT01QT1NJVEU0LAorCUNYMjU4NDBfQ09NUE9TSVRFNSwKKwlDWDI1ODQwX0NPTVBPU0lURTYsCisJQ1gyNTg0MF9DT01QT1NJVEU3LAorCUNYMjU4NDBfQ09NUE9TSVRFOCwKKworCS8qIFMtVmlkZW8gaW5wdXRzIGNvbnNpc3Qgb2Ygb25lIGx1bWEgaW5wdXQgKEluMS1JbjQpIE9SZWQgd2l0aCBvbmUKKwkgICBjaHJvbWEgaW5wdXQgKEluNS1JbjgpICovCisJQ1gyNTg0MF9TVklERU9fTFVNQTEgPSAweDEwLAorCUNYMjU4NDBfU1ZJREVPX0xVTUEyID0gMHgyMCwKKwlDWDI1ODQwX1NWSURFT19MVU1BMyA9IDB4MzAsCisJQ1gyNTg0MF9TVklERU9fTFVNQTQgPSAweDQwLAorCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTQgPSAweDQwMCwKKwlDWDI1ODQwX1NWSURFT19DSFJPTUE1ID0gMHg1MDAsCisJQ1gyNTg0MF9TVklERU9fQ0hST01BNiA9IDB4NjAwLAorCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTcgPSAweDcwMCwKKwlDWDI1ODQwX1NWSURFT19DSFJPTUE4ID0gMHg4MDAsCisKKwkvKiBTLVZpZGVvIGFsaWFzZXMgZm9yIGNvbW1vbiBsdW1hL2Nocm9tYSBjb21iaW5hdGlvbnMgKi8KKwlDWDI1ODQwX1NWSURFTzEgPSAweDUxMCwKKwlDWDI1ODQwX1NWSURFTzIgPSAweDYyMCwKKwlDWDI1ODQwX1NWSURFTzMgPSAweDczMCwKKwlDWDI1ODQwX1NWSURFTzQgPSAweDg0MCwKK307CisKK2VudW0gY3gyNTg0MF9hdWRpb19pbnB1dCB7CisJLyogQXVkaW8gaW5wdXRzOiBzZXJpYWwgb3IgSW40LUluOCAqLworCUNYMjU4NDBfQVVESU9fU0VSSUFMLAorCUNYMjU4NDBfQVVESU80ID0gNCwKKwlDWDI1ODQwX0FVRElPNSwKKwlDWDI1ODQwX0FVRElPNiwKKwlDWDI1ODQwX0FVRElPNywKKwlDWDI1ODQwX0FVRElPOCwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9tc3AzNDAwLmggYi9pbmNsdWRlL21lZGlhL21zcDM0MDAuaAppbmRleCAwYmU2MWEwLi42YWI4NTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL21zcDM0MDAuaAorKysgYi9pbmNsdWRlL21lZGlhL21zcDM0MDAuaApAQCAtODAsMTYgKzgwLDE2IEBACiAgKi8KIAogLyogU0NBUlQgaW5wdXQgdG8gRFNQIHNlbGVjdGlvbiAqLwotI2RlZmluZSBNU1BfSU5fU0NBUlRfMSAgCTAgIC8qIFBpbiBTQzFfSU4gKi8KLSNkZWZpbmUgTVNQX0lOX1NDQVJUXzIgIAkxICAvKiBQaW4gU0MyX0lOICovCi0jZGVmaW5lIE1TUF9JTl9TQ0FSVF8zICAJMiAgLyogUGluIFNDM19JTiAqLwotI2RlZmluZSBNU1BfSU5fU0NBUlRfNCAgCTMgIC8qIFBpbiBTQzRfSU4gKi8KKyNkZWZpbmUgTVNQX0lOX1NDQVJUMSAgCQkwICAvKiBQaW4gU0MxX0lOICovCisjZGVmaW5lIE1TUF9JTl9TQ0FSVDIgIAkJMSAgLyogUGluIFNDMl9JTiAqLworI2RlZmluZSBNU1BfSU5fU0NBUlQzICAJCTIgIC8qIFBpbiBTQzNfSU4gKi8KKyNkZWZpbmUgTVNQX0lOX1NDQVJUNCAgCQkzICAvKiBQaW4gU0M0X0lOICovCiAjZGVmaW5lIE1TUF9JTl9NT05PICAgICAJNiAgLyogUGluIE1PTk9fSU4gKi8KICNkZWZpbmUgTVNQX0lOX01VVEUgICAgIAk3ICAvKiBNdXRlIERTUCBpbnB1dCAqLwogI2RlZmluZSBNU1BfU0NBUlRfVE9fRFNQKGluKSAJKGluKQogLyogVHVuZXIgaW5wdXQgdG8gZGVtb2R1bGF0b3IgYW5kIERTUCBzZWxlY3Rpb24gKi8KLSNkZWZpbmUgTVNQX0lOX1RVTkVSXzEgCQkwICAvKiBBbmFsb2cgU291bmQgSUYgaW5wdXQgcGluIEFOQV9JTjEgKi8KLSNkZWZpbmUgTVNQX0lOX1RVTkVSXzIgIAkxICAvKiBBbmFsb2cgU291bmQgSUYgaW5wdXQgcGluIEFOQV9JTjIgKi8KKyNkZWZpbmUgTVNQX0lOX1RVTkVSMSAJCTAgIC8qIEFuYWxvZyBTb3VuZCBJRiBpbnB1dCBwaW4gQU5BX0lOMSAqLworI2RlZmluZSBNU1BfSU5fVFVORVIyIAkJMSAgLyogQW5hbG9nIFNvdW5kIElGIGlucHV0IHBpbiBBTkFfSU4yICovCiAjZGVmaW5lIE1TUF9UVU5FUl9UT19EU1AoaW4pIAkoKGluKSA8PCAzKQogCiAvKiBUaGUgbXNwIGhhcyB1cCB0byA1IERTUCBvdXRwdXRzLCBlYWNoIG91dHB1dCBjYW4gaW5kZXBlbmRlbnRseSBzZWxlY3QKQEAgLTEwOSwxNCArMTA5LDE0IEBACiAgICBEU1AuIFRoaXMgaXMgY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4gQWxzbyBub3QgaW1wbGVtZW50ZWQgaXMgdGhlCiAgICBtdWx0aS1jaGFubmVsIGNhcGFibGUgSTJTMyBpbnB1dCBvZiB0aGUgNDR4MEcuIElmIHNvbWVvbmUgY2FuIGRlbW9uc3RyYXRlCiAgICBhIG5lZWQgZm9yIG9uZSBvZiB0aG9zZSBmZWF0dXJlcyB0aGVuIGFkZGl0aW9uYWwgc3VwcG9ydCBjYW4gYmUgYWRkZWQuICovCi0jZGVmaW5lIE1TUF9EU1BfT1VUX1RVTkVSIAkwICAvKiBUdW5lciBvdXRwdXQgKi8KLSNkZWZpbmUgTVNQX0RTUF9PVVRfU0NBUlQgCTIgIC8qIFNDQVJUIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9JMlMxIAk1ICAvKiBJMlMxIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9JMlMyIAk2ICAvKiBJMlMyIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9JMlMzICAgIAk3ICAvKiBJMlMzIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9NQUlOX0FWQyAJMTEgLyogTUFJTiBBVkMgcHJvY2Vzc2VkIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9NQUlOIAkxMiAvKiBNQUlOIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9BVVggCTEzIC8qIEFVWCBvdXRwdXQgKi8KKyNkZWZpbmUgTVNQX0RTUF9JTl9UVU5FUiAJMCAgLyogVHVuZXIgRFNQIGlucHV0ICovCisjZGVmaW5lIE1TUF9EU1BfSU5fU0NBUlQgCTIgIC8qIFNDQVJUIERTUCBpbnB1dCAqLworI2RlZmluZSBNU1BfRFNQX0lOX0kyUzEgCTUgIC8qIEkyUzEgRFNQIGlucHV0ICovCisjZGVmaW5lIE1TUF9EU1BfSU5fSTJTMiAJNiAgLyogSTJTMiBEU1AgaW5wdXQgKi8KKyNkZWZpbmUgTVNQX0RTUF9JTl9JMlMzICAgIAk3ICAvKiBJMlMzIERTUCBpbnB1dCAqLworI2RlZmluZSBNU1BfRFNQX0lOX01BSU5fQVZDIAkxMSAvKiBNQUlOIEFWQyBwcm9jZXNzZWQgRFNQIGlucHV0ICovCisjZGVmaW5lIE1TUF9EU1BfSU5fTUFJTiAJMTIgLyogTUFJTiBEU1AgaW5wdXQgKi8KKyNkZWZpbmUgTVNQX0RTUF9JTl9BVVggCQkxMyAvKiBBVVggRFNQIGlucHV0ICovCiAjZGVmaW5lIE1TUF9EU1BfVE9fTUFJTihpbikgICAJKChpbikgPDwgNCkKICNkZWZpbmUgTVNQX0RTUF9UT19BVVgoaW4pICAgIAkoKGluKSA8PCA4KQogI2RlZmluZSBNU1BfRFNQX1RPX1NDQVJUMShpbikgCSgoaW4pIDw8IDEyKQpAQCAtMTI1LDE2ICsxMjUsMTYgQEAKIAogLyogT3V0cHV0IFNDQVJUIHNlbGVjdDogdGhlIFNDQVJUIG91dHB1dHMgY2FuIHNlbGVjdCB3aGljaCBpbnB1dAogICAgdG8gdXNlLiAqLwotI2RlZmluZSBNU1BfT1VUX1NDQVJUMSAJCTAgIC8qIFNDQVJUMSBpbnB1dCwgYnlwYXNzaW5nIHRoZSBEU1AgKi8KLSNkZWZpbmUgTVNQX09VVF9TQ0FSVDIgCQkxICAvKiBTQ0FSVDIgaW5wdXQsIGJ5cGFzc2luZyB0aGUgRFNQICovCi0jZGVmaW5lIE1TUF9PVVRfU0NBUlQzIAkJMiAgLyogU0NBUlQzIGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLwotI2RlZmluZSBNU1BfT1VUX1NDQVJUNCAJCTMgIC8qIFNDQVJUNCBpbnB1dCwgYnlwYXNzaW5nIHRoZSBEU1AgKi8KLSNkZWZpbmUgTVNQX09VVF9TQ0FSVDFfREEgCTQgIC8qIERTUCBTQ0FSVDEgb3V0cHV0ICovCi0jZGVmaW5lIE1TUF9PVVRfU0NBUlQyX0RBIAk1ICAvKiBEU1AgU0NBUlQyIG91dHB1dCAqLwotI2RlZmluZSBNU1BfT1VUX01PTk8gCQk2ICAvKiBNT05PIGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLwotI2RlZmluZSBNU1BfT1VUX01VVEUgCQk3ICAvKiBNVVRFIG91dHB1dCAqLwotI2RlZmluZSBNU1BfT1VUX1RPX1NDQVJUMShpbikgICAJKGluKQotI2RlZmluZSBNU1BfT1VUX1RPX1NDQVJUMihpbikgICAJKChpbikgPDwgNCkKKyNkZWZpbmUgTVNQX1NDX0lOX1NDQVJUMSAJMCAgLyogU0NBUlQxIGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLworI2RlZmluZSBNU1BfU0NfSU5fU0NBUlQyIAkxICAvKiBTQ0FSVDIgaW5wdXQsIGJ5cGFzc2luZyB0aGUgRFNQICovCisjZGVmaW5lIE1TUF9TQ19JTl9TQ0FSVDMgCTIgIC8qIFNDQVJUMyBpbnB1dCwgYnlwYXNzaW5nIHRoZSBEU1AgKi8KKyNkZWZpbmUgTVNQX1NDX0lOX1NDQVJUNCAJMyAgLyogU0NBUlQ0IGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLworI2RlZmluZSBNU1BfU0NfSU5fRFNQX1NDQVJUMSAJNCAgLyogRFNQIFNDQVJUMSBpbnB1dCAqLworI2RlZmluZSBNU1BfU0NfSU5fRFNQX1NDQVJUMiAJNSAgLyogRFNQIFNDQVJUMiBpbnB1dCAqLworI2RlZmluZSBNU1BfU0NfSU5fTU9OTyAJCTYgIC8qIE1PTk8gaW5wdXQsIGJ5cGFzc2luZyB0aGUgRFNQICovCisjZGVmaW5lIE1TUF9TQ19JTl9NVVRFIAkJNyAgLyogTVVURSBvdXRwdXQgKi8KKyNkZWZpbmUgTVNQX1NDX1RPX1NDQVJUMShpbikJKGluKQorI2RlZmluZSBNU1BfU0NfVE9fU0NBUlQyKGluKQkoKGluKSA8PCA0KQogCiAvKiBTaG9ydGN1dCBtYWNyb3MgKi8KICNkZWZpbmUgTVNQX0lOUFVUKHNjLCB0LCBtYWluX2F1eF9zcmMsIHNjX2kyc19zcmMpIFwKQEAgLTE0NSwxNCArMTQ1LDE0IEBACiAJIE1TUF9EU1BfVE9fU0NBUlQxKHNjX2kyc19zcmMpIHwgXAogCSBNU1BfRFNQX1RPX1NDQVJUMihzY19pMnNfc3JjKSB8IFwKIAkgTVNQX0RTUF9UT19JMlMoc2NfaTJzX3NyYykpCi0jZGVmaW5lIE1TUF9JTlBVVF9ERUZBVUxUIE1TUF9JTlBVVChNU1BfSU5fU0NBUlRfMSwgTVNQX0lOX1RVTkVSXzEsIFwKLQkJCQkgICAgTVNQX0RTUF9PVVRfVFVORVIsIE1TUF9EU1BfT1VUX1RVTkVSKQorI2RlZmluZSBNU1BfSU5QVVRfREVGQVVMVCBNU1BfSU5QVVQoTVNQX0lOX1NDQVJUMSwgTVNQX0lOX1RVTkVSMSwgXAorCQkJCSAgICBNU1BfRFNQX0lOX1RVTkVSLCBNU1BfRFNQX0lOX1RVTkVSKQogI2RlZmluZSBNU1BfT1VUUFVUKHNjKSBcCi0JKE1TUF9PVVRfVE9fU0NBUlQxKHNjKSB8IFwKLQkgTVNQX09VVF9UT19TQ0FSVDIoc2MpKQorCShNU1BfU0NfVE9fU0NBUlQxKHNjKSB8IFwKKwkgTVNQX1NDX1RPX1NDQVJUMihzYykpCiAvKiBUaGlzIGVxdWFscyB0aGUgUkVTRVQgcG9zaXRpb24gb2YgdGhlIG1zcDM0MDAgQUNCIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1TUF9PVVRQVVRfREVGQVVMVCAoTVNQX09VVF9UT19TQ0FSVDEoTVNQX09VVF9TQ0FSVDMpIHwgXAotCQkJICAgIE1TUF9PVVRfVE9fU0NBUlQyKE1TUF9PVVRfU0NBUlQxX0RBKSkKKyNkZWZpbmUgTVNQX09VVFBVVF9ERUZBVUxUIChNU1BfU0NfVE9fU0NBUlQxKE1TUF9TQ19JTl9TQ0FSVDMpIHwgXAorCQkJICAgIE1TUF9TQ19UT19TQ0FSVDIoTVNQX1NDX0lOX0RTUF9TQ0FSVDEpKQogCiAvKiBUdW5lciBpbnB1dHMgdnMuIG1zcCB2ZXJzaW9uICovCiAvKiBDaGlwICAgICAgVFVORVJfMSAgIFRVTkVSXzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzExNS5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTE1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0ODM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzExNS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICAgc2FhNzExNS5oIC0gZGVmaW5pdGlvbiBmb3Igc2FhNzExMy80LzUgaW5wdXRzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX1NBQTcxMTVfSF8KKyNkZWZpbmUgX1NBQTcxMTVfSF8KKworLyogU0FBNzExMy80LzUgSFcgaW5wdXRzICovCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMCAwCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMSAxCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMiAyCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMyAzCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFNCA0IC8qIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBzYWE3MTEzICovCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFNSA1IC8qIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBzYWE3MTEzICovCisjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMCAgICA2CisjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMSAgICA3CisjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMiAgICA4CisjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMyAgICA5CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxMjcuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzEyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiY2Y4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxMjcuaApAQCAtMCwwICsxLDQxIEBACisvKgorICAgIHNhYTcxMjcuaCAtIGRlZmluaXRpb24gZm9yIHNhYTcxMjYvNy84LzkgaW5wdXRzL291dHB1dHMKKworICAgIENvcHlyaWdodCAoQykgMjAwNiBIYW5zIFZlcmt1aWwgKGh2ZXJrdWlsQHhzNGFsbC5ubCkKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfU0FBNzEyN19IXworI2RlZmluZSBfU0FBNzEyN19IXworCisvKiBFbnVtZXJhdGlvbiBmb3IgdGhlIHN1cHBvcnRlZCBpbnB1dCB0eXBlcyAqLworZW51bSBzYWE3MTI3X2lucHV0X3R5cGUgeworCVNBQTcxMjdfSU5QVVRfVFlQRV9OT1JNQUwsCisJU0FBNzEyN19JTlBVVF9UWVBFX1RFU1RfSU1BR0UKK307CisKKy8qIEVudW1lcmF0aW9uIGZvciB0aGUgc3VwcG9ydGVkIG91dHB1dCBzaWduYWwgdHlwZXMgKi8KK2VudW0gc2FhNzEyN19vdXRwdXRfdHlwZSB7CisJU0FBNzEyN19PVVRQVVRfVFlQRV9CT1RILAorCVNBQTcxMjdfT1VUUFVUX1RZUEVfQ09NUE9TSVRFLAorCVNBQTcxMjdfT1VUUFVUX1RZUEVfU1ZJREVPLAorCVNBQTcxMjdfT1VUUFVUX1RZUEVfUkdCLAorCVNBQTcxMjdfT1VUUFVUX1RZUEVfWVVWX0MsCisJU0FBNzEyN19PVVRQVVRfVFlQRV9ZVVZfVgorfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdXBkNjQwMzFhLmggYi9pbmNsdWRlL21lZGlhL3VwZDY0MDMxYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDZhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3VwZDY0MDMxYS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiB1cGQ2NDAzMWEgLSBORUMgRWxlY3Ryb25pY3MgR2hvc3QgUmVkdWN0aW9uIGlucHV0IGRlZmluZXMKKyAqCisgKiAyMDA2IGJ5IEhhbnMgVmVya3VpbCAoaHZlcmt1aWxAeHM0YWxsLm5sKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9VUEQ2NDAzMUFfSF8KKyNkZWZpbmUgX1VQRDY0MDMxQV9IXworCisvKiBHaG9zdCByZWR1Y3Rpb24gbW9kZXMgKi8KKyNkZWZpbmUgVVBENjQwMzFBX0dSX09OIAkwCisjZGVmaW5lIFVQRDY0MDMxQV9HUl9PRkYgCTEKKyNkZWZpbmUgVVBENjQwMzFBX0dSX1RIUk9VR0ggCTMKKworLyogRGlyZWN0IDNEL1lDUyBDb25uZWN0aW9uICovCisjZGVmaW5lIFVQRDY0MDMxQV8zRFlDU19ESVNBQkxFICAgKDAgPDwgMikKKyNkZWZpbmUgVVBENjQwMzFBXzNEWUNTX0NPTVBPU0lURSAoMiA8PCAyKQorI2RlZmluZSBVUEQ2NDAzMUFfM0RZQ1NfU1ZJREVPICAgICgzIDw8IDIpCisKKy8qIENvbXBvc2l0ZSBzeW5jIGRpZ2l0YWwgc2VwYXJhdGlvbiBjaXJjdWl0ICovCisjZGVmaW5lIFVQRDY0MDMxQV9DT01QT1NJVEVfRVhURVJOQUwgKDEgPDwgNCkKKworLyogVmVydGljYWwgc3luYyBkaWdpdGFsIHNlcGFyYXRpb24gY2lyY3VpdCAqLworI2RlZmluZSBVUEQ2NDAzMUFfVkVSVElDQUxfRVhURVJOQUwgKDEgPDwgNSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3VwZDY0MDgzLmggYi9pbmNsdWRlL21lZGlhL3VwZDY0MDgzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliNmYzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvdXBkNjQwODMuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogdXBkNjQwOHggLSBORUMgRWxlY3Ryb25pY3MgMy1EaW1lbnNpb25hbCBZL0Mgc2VwYXJhdGlvbiBpbnB1dCBkZWZpbmVzCisgKgorICogMjAwNiBieSBIYW5zIFZlcmt1aWwgKGh2ZXJrdWlsQHhzNGFsbC5ubCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfVVBENjQwODNfSF8KKyNkZWZpbmUgX1VQRDY0MDgzX0hfCisKKy8qIFRoZXJlIGFyZSB0d28gYml0cyBvZiBpbmZvcm1hdGlvbiB0aGF0IHRoZSBkcml2ZXIgbmVlZHMgaW4gb3JkZXIKKyAgIHRvIHNlbGVjdCB0aGUgY29ycmVjdCByb3V0aW5nOiB0aGUgb3BlcmF0aW5nIG1vZGUgYW5kIHRoZSBzZWxlY3Rpb24KKyAgIG9mIHRoZSBZIGlucHV0IChleHRlcm5hbCBvciBpbnRlcm5hbCkuCisKKyAgIFRoZSBmaXJzdCB0d28gb3BlcmF0aW5nIG1vZGVzIGV4cGVjdCBhIGNvbXBvc2l0ZSBzaWduYWwgb24gdGhlIFkgaW5wdXQsCisgICB0aGUgc2Vjb25kIHR3byBvcGVyYXRpbmcgbW9kZXMgdXNlIGJvdGggdGhlIFkgYW5kIEMgaW5wdXRzLgorCisgICBOb3JtYWxseSBZQ1NfTU9ERSBpcyB1c2VkIGZvciB0dW5lciBhbmQgY29tcG9zaXRlIGlucHV0cywgYW5kIHRoZQorICAgWUNOUiBtb2RlIGlzIHVzZWQgZm9yIFMtVmlkZW8gaW5wdXRzLgorCisgICBUaGUgZXh0ZXJuYWwgWS1BREMgaXMgc2VsZWN0ZWQgd2hlbiB0aGUgY29tcG9zaXRlIGlucHV0IGNvbWVzIGZyb20gYQorICAgdXBkNjQwMzFhIGdob3N0IHJlZHVjdGlvbiBkZXZpY2UuIElmIHRoaXMgZGV2aWNlIGlzIG5vdCBwcmVzZW50LCBvcgorICAgdGhlIGlucHV0IGlzIGEgUy1WaWRlbyBzaWduYWwsIHRoZW4gdGhlIGludGVybmFsIFktQURDIGlucHV0IHNob3VsZAorICAgYmUgdXNlZC4gKi8KKworLyogT3BlcmF0aW5nIG1vZGVzOiAqLworCisvKiBZQ1MgbW9kZTogWS9DIHNlcGFyYXRpb24gKGJ1cnN0IGxvY2tlZCBjbG9ja2luZykgKi8KKyNkZWZpbmUgVVBENjQwODNfWUNTX01PREUgICAgICAwCisvKiBZQ1MrIG1vZGU6IDJEIFkvQyBzZXBhcmF0aW9uIGFuZCBZQ05SIChidXJzdCBsb2NrZWQgY2xvY2tpbmcpICovCisjZGVmaW5lIFVQRDY0MDgzX1lDU19QTFVTX01PREUgMQorCisvKiBOb3RlOiB0aGUgZm9sbG93aW5nIHR3byBtb2RlcyBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorICAgZXh0ZXJuYWwgWS1BREMuICovCisvKiBNTk5SIG1vZGU6IGZyYW1lIGNvbWIgdHlwZSBZTlIrQyBkZWxheSAobGluZSBsb2NrZWQgY2xvY2tpbmcpICovCisjZGVmaW5lIFVQRDY0MDgzX01OTlJfTU9ERSAgICAgMgorLyogWUNOUiBtb2RlOiBmcmFtZSByZWN1cnNpdmUgWUNOUiAoYnVyc3QgbG9ja2VkIGNsb2NraW5nKSAqLworI2RlZmluZSBVUEQ2NDA4M19ZQ05SX01PREUgICAgIDMKKworLyogU2VsZWN0IGV4dGVybmFsIFktQURDOiB0aGlzIHNob3VsZCBiZSBzZXQgaWYgdGhpcyBkZXZpY2UgaXMgdXNlZCBpbgorICAgY29tYmluYXRpb24gd2l0aCB0aGUgdXBkNjQwMzFhIGdob3N0IHJlZHVjdGlvbiBkZXZpY2UuCisgICBPdGhlcndpc2UgbGVhdmUgYXQgMCAodXNlIGludGVybmFsIFktQURDKS4gKi8KKyNkZWZpbmUgVVBENjQwODNfRVhUX1lfQURDICAgICAoMSA8PCAyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FycC5oIGIvaW5jbHVkZS9uZXQvYXJwLmgKaW5kZXggYTEzZTMwYy4uNjQzYmRlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXJwLmgKKysrIGIvaW5jbHVkZS9uZXQvYXJwLmgKQEAgLTEwLDggKzEwLDYgQEAKIGV4dGVybiBzdHJ1Y3QgbmVpZ2hfdGFibGUgYXJwX3RibDsKIAogZXh0ZXJuIHZvaWQJYXJwX2luaXQodm9pZCk7Ci1leHRlcm4gaW50CWFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CiBleHRlcm4gaW50CWFycF9maW5kKHVuc2lnbmVkIGNoYXIgKmhhZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJYXJwX2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIHZvaWQgICAgIGFycF9zZW5kKGludCB0eXBlLCBpbnQgcHR5cGUsIHUzMiBkZXN0X2lwLCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4MjUuaCBiL2luY2x1ZGUvbmV0L2F4MjUuaAppbmRleCBkMDUyYjIyLi41YmQ5OTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9heDI1LmgKKysrIGIvaW5jbHVkZS9uZXQvYXgyNS5oCkBAIC0xNDUsMTQgKzE0NSwxNCBAQAogI2RlZmluZQlBWDI1X0RFRl9DT05NT0RFCTIJCQkvKiBDb25uZWN0ZWQgbW9kZSBhbGxvd2VkICovCiAjZGVmaW5lCUFYMjVfREVGX1dJTkRPVwkJMgkJCS8qIFdpbmRvdz0yICovCiAjZGVmaW5lCUFYMjVfREVGX0VXSU5ET1cJMzIJCQkvKiBNb2R1bGUtMTI4IFdpbmRvdz0zMiAqLwotI2RlZmluZQlBWDI1X0RFRl9UMQkJKDEwICogSFopCQkvKiBUMT0xMHMgKi8KLSNkZWZpbmUJQVgyNV9ERUZfVDIJCSgzICogSFopCQkvKiBUMj0zcyAgKi8KLSNkZWZpbmUJQVgyNV9ERUZfVDMJCSgzMDAgKiBIWikJCS8qIFQzPTMwMHMgKi8KKyNkZWZpbmUJQVgyNV9ERUZfVDEJCTEwMDAwCQkJLyogVDE9MTBzICovCisjZGVmaW5lCUFYMjVfREVGX1QyCQkzMDAwCQkJLyogVDI9M3MgICovCisjZGVmaW5lCUFYMjVfREVGX1QzCQkzMDAwMDAJCQkvKiBUMz0zMDBzICovCiAjZGVmaW5lCUFYMjVfREVGX04yCQkxMAkJCS8qIE4yPTEwICovCi0jZGVmaW5lIEFYMjVfREVGX0lETEUJCSgwICogNjAgKiBIWikJCS8qIElkbGU9Tm9uZSAqLworI2RlZmluZSBBWDI1X0RFRl9JRExFCQkwCQkJLyogSWRsZT1Ob25lICovCiAjZGVmaW5lIEFYMjVfREVGX1BBQ0xFTgkJMjU2CQkJLyogUGFjbGVuPTI1NiAqLwogI2RlZmluZQlBWDI1X0RFRl9QUk9UT0NPTAlBWDI1X1BST1RPX1NURF9TSU1QTEVYCS8qIFN0YW5kYXJkIEFYLjI1ICovCi0jZGVmaW5lIEFYMjVfREVGX0RTX1RJTUVPVVQJKDMgKiA2MCAqIEhaKQkJLyogREFNQSB0aW1lb3V0IDMgbWludXRlcyAqLworI2RlZmluZSBBWDI1X0RFRl9EU19USU1FT1VUCTE4MDAwMAkJCS8qIERBTUEgdGltZW91dCAzIG1pbnV0ZXMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgYXgyNV91aWRfYXNzb2MgewogCXN0cnVjdCBobGlzdF9ub2RlCXVpZF9ub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29tcGF0LmggYi9pbmNsdWRlL25ldC9jb21wYXQuaAppbmRleCA4NjYyYjhmLi5lNjVjYmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb21wYXQuaAorKysgYi9pbmNsdWRlL25ldC9jb21wYXQuaApAQCAtMyw2ICszLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCitzdHJ1Y3Qgc29jazsKKwogI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgpAQCAtMjMsNyArMjUsNiBAQAogCWNvbXBhdF9pbnRfdAljbXNnX3R5cGU7CiB9OwogCi1zdHJ1Y3Qgc29jazsKIGV4dGVybiBpbnQgY29tcGF0X3NvY2tfZ2V0X3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKik7CiAKICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKaW5kZXggNDcyNWZmOC4uZDU5MjZiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKQEAgLTk1NSwxMSArOTU1LDEzIEBACiAKICNkZWZpbmUgSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMIDEKICNkZWZpbmUgSUVFRTgwMjExXzI0R0haX01BWF9DSEFOTkVMIDE0Ci0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9DSEFOTkVMUyAgICAxNAorI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCAtIFwKKwkJCQkgIElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTCArIDEpCiAKICNkZWZpbmUgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMIDM0CiAjZGVmaW5lIElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAxNjUKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTICAgIDEzMQorI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAtIFwKKwkJCQkgIElFRUU4MDIxMV81MkdIWl9NSU5fQ0hBTk5FTCArIDEpCiAKIGVudW0gewogCUlFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPSAoMSA8PCAwKSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaAppbmRleCBiOTcxZDhjLi4wNTJlZDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCkBAIC05NiwxMCArOTYsMTMgQEAKIAkgKgogCSAqIGJzc3ZhbGlkIGlzIHRydWUgaWYgd2UgZm91bmQgYSBtYXRjaGluZyBuZXR3b3JrCiAJICogYW5kIHNhdmVkIGl0J3MgQlNTSUQgaW50byB0aGUgYnNzaWQgYWJvdmUuCisJICoKKwkgKiBic3NmaXhlZCBpcyB1c2VkIGZvciBTSU9DU0lXQVAuCiAJICovCiAJdTggc3RhdGljX2Vzc2lkOjEsCiAJICAgYXNzb2NpYXRpbmc6MSwKLQkgICBic3N2YWxpZDoxOworCSAgIGJzc3ZhbGlkOjEsCisJICAgYnNzZml4ZWQ6MTsKIAogCS8qIFNjYW4gcmV0cmllcyByZW1haW5pbmcgKi8KIAlpbnQgc2Nhbl9yZXRyeTsKQEAgLTIwMSw3ICsyMDQsOCBAQAogCQogCS8qIGNvdXBsZSBvZiBmbGFncyAqLwogCXU4IHNjYW5uaW5nOjEsIC8qIHByb3RlY3RzIHNjYW5uaW5nIGZyb20gYmVpbmcgZG9uZSBtdWx0aXBsZSB0aW1lcyBhdCBvbmNlICovCi0JICAgYXNzb2NpYXRlZDoxOworCSAgIGFzc29jaWF0ZWQ6MSwKKwkgICBydW5uaW5nOjE7CiAJCiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfc2NhbmluZm8gKnNjYW5pbmZvOwogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX2luZm8gYXNzb2NpbmZvOwpAQCAtMjY3LDggKzI3MSw5IEBACiAjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9GQUlMRUQJCTUKICNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BVVRIX1RJTUVPVVQJCTYKICNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfTkVUX05PVF9GT1VORAk3CisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfRElTQVNTT0NJQVRFRAkJOAogLyoga2VlcCB0aGlzIHVwZGF0ZWQhICovCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfTEFTVAkJCTcKKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9MQVNUCQkJOAogLyoKICAqIElmIHlvdSB3YW50IHRvIGJlIG5vdGlmaWVkIG9mIGNlcnRhaW4gZXZlbnRzLCB5b3UgY2FuIGNhbGwKICAqIGllZWU4MDIxMXNvZnRtYWNfbm90aWZ5W19hdG9taWNdIHdpdGgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaCBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaAppbmRleCAyNWY3MDhmLi41OWYwYzgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCkBAIC00OCwzMSArNDgsNyBAQAogCXJldHVybiBpbmV0Nl9laGFzaGZuKGxhZGRyLCBscG9ydCwgZmFkZHIsIGZwb3J0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW5ldDZfaGFzaChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCQkJc3RydWN0IHNvY2sgKnNrKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0OwotCXJ3bG9ja190ICpsb2NrOwotCi0JQlVHX1RSQVAoc2tfdW5oYXNoZWQoc2spKTsKLQotCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgewotCQlsaXN0ID0gJmhhc2hpbmZvLT5saXN0ZW5pbmdfaGFzaFtpbmV0X3NrX2xpc3Rlbl9oYXNoZm4oc2spXTsKLQkJbG9jayA9ICZoYXNoaW5mby0+bGhhc2hfbG9jazsKLQkJaW5ldF9saXN0ZW5fd2xvY2soaGFzaGluZm8pOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBoYXNoOwotCQlzay0+c2tfaGFzaCA9IGhhc2ggPSBpbmV0Nl9za19laGFzaGZuKHNrKTsKLQkJaGFzaCAmPSAoaGFzaGluZm8tPmVoYXNoX3NpemUgLSAxKTsKLQkJbGlzdCA9ICZoYXNoaW5mby0+ZWhhc2hbaGFzaF0uY2hhaW47Ci0JCWxvY2sgPSAmaGFzaGluZm8tPmVoYXNoW2hhc2hdLmxvY2s7Ci0JCXdyaXRlX2xvY2sobG9jayk7Ci0JfQotCi0JX19za19hZGRfbm9kZShzaywgbGlzdCk7Ci0Jc29ja19wcm90X2luY191c2Uoc2stPnNrX3Byb3QpOwotCXdyaXRlX3VubG9jayhsb2NrKTsKLX0KK2V4dGVybiB2b2lkIF9faW5ldDZfaGFzaChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sIHN0cnVjdCBzb2NrICpzayk7CiAKIC8qCiAgKiBTb2NrZXRzIGluIFRDUF9DTE9TRSBzdGF0ZSBhcmUgX2Fsd2F5c18gdGFrZW4gb3V0IG9mIHRoZSBoYXNoLCBzbwpAQCAtODAsNTIgKzU2LDEyIEBACiAgKgogICogVGhlIHNvY2toYXNoIGxvY2sgbXVzdCBiZSBoZWxkIGFzIGEgcmVhZGVyIGhlcmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKgotCQlfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCitleHRlcm4gc3RydWN0IHNvY2sgKl9faW5ldDZfbG9va3VwX2VzdGFibGlzaGVkKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKIAkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCQkJICAgY29uc3QgdTE2IHNwb3J0LAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICBjb25zdCB1MTYgaG51bSwKLQkJCQkJICAgY29uc3QgaW50IGRpZikKLXsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0JY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JY29uc3QgX191MzIgcG9ydHMgPSBJTkVUX0NPTUJJTkVEX1BPUlRTKHNwb3J0LCBobnVtKTsKLQkvKiBPcHRpbWl6ZSBoZXJlIGZvciBkaXJlY3QgaGl0LCBvbmx5IGxpc3RlbmluZyBjb25uZWN0aW9ucyBjYW4KLQkgKiBoYXZlIHdpbGRjYXJkcyBhbnl3YXlzLgotCSAqLwotCXVuc2lnbmVkIGludCBoYXNoID0gaW5ldDZfZWhhc2hmbihkYWRkciwgaG51bSwgc2FkZHIsIHNwb3J0KTsKLQlzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmhlYWQgPSBpbmV0X2VoYXNoX2J1Y2tldChoYXNoaW5mbywgaGFzaCk7Ci0KLQlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7Ci0JcmVhZF9sb2NrKCZoZWFkLT5sb2NrKTsKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJmhlYWQtPmNoYWluKSB7Ci0JCS8qIEZvciBJUFY2IGRvIHRoZSBjaGVhcGVyIHBvcnQgYW5kIGZhbWlseSB0ZXN0cyBmaXJzdC4gKi8KLQkJaWYgKElORVQ2X01BVENIKHNrLCBoYXNoLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQotCQkJZ290byBoaXQ7IC8qIFlvdSBzdW5rIG15IGJhdHRsZXNoaXAhICovCi0JfQotCS8qIE11c3QgY2hlY2sgZm9yIGEgVElNRV9XQUlUJ2VyIGJlZm9yZSBnb2luZyB0byBsaXN0ZW5lciBoYXNoLiAqLwotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmKGhlYWQgKyBoYXNoaW5mby0+ZWhhc2hfc2l6ZSktPmNoYWluKSB7Ci0JCWNvbnN0IHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gaW5ldF90d3NrKHNrKTsKLQotCQlpZigqKChfX3UzMiAqKSYodHctPnR3X2Rwb3J0KSkJPT0gcG9ydHMJJiYKLQkJICAgc2stPnNrX2ZhbWlseQkJPT0gUEZfSU5FVDYpIHsKLQkJCWNvbnN0IHN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzYgPSBpbmV0Nl90d3NrKHNrKTsKLQotCQkJaWYgKGlwdjZfYWRkcl9lcXVhbCgmdHc2LT50d192Nl9kYWRkciwgc2FkZHIpCSYmCi0JCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZ0dzYtPnR3X3Y2X3Jjdl9zYWRkciwgZGFkZHIpCSYmCi0JCQkgICAgKCFzay0+c2tfYm91bmRfZGV2X2lmIHx8IHNrLT5za19ib3VuZF9kZXZfaWYgPT0gZGlmKSkKLQkJCQlnb3RvIGhpdDsKLQkJfQotCX0KLQlyZWFkX3VubG9jaygmaGVhZC0+bG9jayk7Ci0JcmV0dXJuIE5VTEw7Ci0KLWhpdDoKLQlzb2NrX2hvbGQoc2spOwotCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKLQlyZXR1cm4gc2s7Ci19CisJCQkJCSAgIGNvbnN0IGludCBkaWYpOwogCiBleHRlcm4gc3RydWN0IHNvY2sgKmluZXQ2X2xvb2t1cF9saXN0ZW5lcihzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCiAJCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKaW5kZXggMWRhMjk0Yy4uZTgzN2Y5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBpbmV0X3R3c2tfZGVhZF9oYXNoZWQoY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcpCiB7Ci0JcmV0dXJuIHR3LT50d19kZWF0aF9ub2RlLnBwcmV2ICE9IE5VTEw7CisJcmV0dXJuICFobGlzdF91bmhhc2hlZCgmdHctPnR3X2RlYXRoX25vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF90d3NrX2RlYWRfbm9kZV9pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggOGZlNjE1Ni4uM2QyZTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC05NSw2ICs5NSw3IEBACiBleHRlcm4gaW50CQlpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCWlwX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCWlwX21jX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCWlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKikpOwogZXh0ZXJuIGludAkJaXBfZG9fbmF0KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQJCWlwX3NlbmRfY2hlY2soc3RydWN0IGlwaGRyICppcCk7CiBleHRlcm4gaW50CQlpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIGludCBpcGZyYWdvayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggNmQ2ZjA2My4uNGFiZWRiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtMjMwLDcgKzIzMCw3IEBACiAJCQkJCSAgICAgICB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNvY2sgKikpOwogCiAKLWV4dGVybiBpbnQJCQlpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50KTsKK2V4dGVybiBpbnQJCQlpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIGV4dGVybiBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKiAgaXB2Nl9kdXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KTsKIGV4dGVybiBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKglpcHY2X3JlbmV3X29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaAppbmRleCA4NmFlZmIxLi5jMGM4OTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwogCi0JSVJMTVBfU1RBVEUgICAgIGxzYXBfc3RhdGU7ICAvKiBDb25uZWN0aW9uIHN0YXRlICovCisJTFNBUF9TVEFURSAgICAgIGxzYXBfc3RhdGU7ICAvKiBDb25uZWN0aW9uIHN0YXRlICovCiAJbm90aWZ5X3QgICAgICAgIG5vdGlmeTsgICAgICAvKiBJbmRpY2F0aW9uL0NvbmZpcm0gZW50cnkgcG9pbnRzICovCiAJc3RydWN0IHFvc19pbmZvIHFvczsgICAgICAgICAvKiBRb1MgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCmluZGV4IGIwNjY2ZDYuLjQ5MDFlZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCkBAIC0yMTEsNiArMjExLDcgQEAKICNkZWZpbmUgTkVJR0hfVVBEQVRFX0ZfQURNSU4JCQkweDgwMDAwMDAwCiAKIGV4dGVybiB2b2lkCQkJbmVpZ2hfdGFibGVfaW5pdChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCk7CitleHRlcm4gdm9pZAkJCW5laWdoX3RhYmxlX2luaXRfbm9fbmV0bGluayhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCk7CiBleHRlcm4gaW50CQkJbmVpZ2hfdGFibGVfY2xlYXIoc3RydWN0IG5laWdoX3RhYmxlICp0YmwpOwogZXh0ZXJuIHN0cnVjdCBuZWlnaGJvdXIgKgluZWlnaF9sb29rdXAoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsCiAJCQkJCSAgICAgY29uc3Qgdm9pZCAqcGtleSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldHJvbS5oIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKaW5kZXggYTVlZTUzYi4uZTBjYTExMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0cm9tLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKQEAgLTQyLDExICs0MiwxMSBAQAogI2RlZmluZQlOUl9DT05EX1BFRVJfUlhfQlVTWQkJMHgwNAogI2RlZmluZQlOUl9DT05EX09XTl9SWF9CVVNZCQkweDA4CiAKLSNkZWZpbmUgTlJfREVGQVVMVF9UMQkJCSgxMjAgKiBIWikJLyogT3V0c3RhbmRpbmcgZnJhbWVzIC0gMTIwIHNlY29uZHMgKi8KLSNkZWZpbmUgTlJfREVGQVVMVF9UMgkJCSg1ICAgKiBIWikJLyogUmVzcG9uc2UgZGVsYXkgICAgIC0gNSBzZWNvbmRzICovCisjZGVmaW5lIE5SX0RFRkFVTFRfVDEJCQkxMjAwMDAJCS8qIE91dHN0YW5kaW5nIGZyYW1lcyAtIDEyMCBzZWNvbmRzICovCisjZGVmaW5lIE5SX0RFRkFVTFRfVDIJCQk1MDAwCQkvKiBSZXNwb25zZSBkZWxheSAgICAgLSA1IHNlY29uZHMgKi8KICNkZWZpbmUgTlJfREVGQVVMVF9OMgkJCTMJCS8qIE51bWJlciBvZiBSZXRyaWVzIC0gMyAqLwotI2RlZmluZQlOUl9ERUZBVUxUX1Q0CQkJKDE4MCAqIEhaKQkvKiBCdXN5IERlbGF5IC0gMTgwIHNlY29uZHMgKi8KLSNkZWZpbmUJTlJfREVGQVVMVF9JRExFCQkJKDAgKiA2MCAqIEhaKQkvKiBObyBBY3Rpdml0eSBUaW1lb3V0IC0gbm9uZSAqLworI2RlZmluZQlOUl9ERUZBVUxUX1Q0CQkJMTgwMDAwCQkvKiBCdXN5IERlbGF5IC0gMTgwIHNlY29uZHMgKi8KKyNkZWZpbmUJTlJfREVGQVVMVF9JRExFCQkJMAkJLyogTm8gQWN0aXZpdHkgVGltZW91dCAtIG5vbmUgKi8KICNkZWZpbmUJTlJfREVGQVVMVF9XSU5ET1cJCTQJCS8qIERlZmF1bHQgV2luZG93IFNpemUgLSA0ICovCiAjZGVmaW5lCU5SX0RFRkFVTFRfT0JTCQkJNgkJLyogRGVmYXVsdCBPYnNvbGVzY2VuY2UgQ291bnQgLSA2ICovCiAjZGVmaW5lCU5SX0RFRkFVTFRfUVVBTAkJCTEwCQkvKiBEZWZhdWx0IE5laWdoYm91ciBRdWFsaXR5IC0gMTAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jvc2UuaCBiL2luY2x1ZGUvbmV0L3Jvc2UuaAppbmRleCAzMjQ5Yjk3Li4wMTJiMDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3NlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm9zZS5oCkBAIC00OSwxNCArNDksMTQgQEAKIAlST1NFX1NUQVRFXzUJCQkvKiBEZWZlcnJlZCBDYWxsIEFjY2VwdGFuY2UgKi8KIH07CiAKLSNkZWZpbmUgUk9TRV9ERUZBVUxUX1QwCQkJKDE4MCAqIEhaKQkvKiBEZWZhdWx0IFQxMCBUMjAgdmFsdWUgKi8KLSNkZWZpbmUgUk9TRV9ERUZBVUxUX1QxCQkJKDIwMCAqIEhaKQkvKiBEZWZhdWx0IFQxMSBUMjEgdmFsdWUgKi8KLSNkZWZpbmUgUk9TRV9ERUZBVUxUX1QyCQkJKDE4MCAqIEhaKQkvKiBEZWZhdWx0IFQxMiBUMjIgdmFsdWUgKi8KLSNkZWZpbmUJUk9TRV9ERUZBVUxUX1QzCQkJKDE4MCAqIEhaKQkvKiBEZWZhdWx0IFQxMyBUMjMgdmFsdWUgKi8KLSNkZWZpbmUJUk9TRV9ERUZBVUxUX0hCCQkJKDUgKiBIWikJLyogRGVmYXVsdCBIb2xkYmFjayB2YWx1ZSAqLwotI2RlZmluZQlST1NFX0RFRkFVTFRfSURMRQkJKDAgKiA2MCAqIEhaKQkvKiBObyBBY3Rpdml0eSBUaW1lb3V0IC0gbm9uZSAqLworI2RlZmluZSBST1NFX0RFRkFVTFRfVDAJCQkxODAwMDAJCS8qIERlZmF1bHQgVDEwIFQyMCB2YWx1ZSAqLworI2RlZmluZSBST1NFX0RFRkFVTFRfVDEJCQkyMDAwMDAJCS8qIERlZmF1bHQgVDExIFQyMSB2YWx1ZSAqLworI2RlZmluZSBST1NFX0RFRkFVTFRfVDIJCQkxODAwMDAJCS8qIERlZmF1bHQgVDEyIFQyMiB2YWx1ZSAqLworI2RlZmluZQlST1NFX0RFRkFVTFRfVDMJCQkxODAwMDAJCS8qIERlZmF1bHQgVDEzIFQyMyB2YWx1ZSAqLworI2RlZmluZQlST1NFX0RFRkFVTFRfSEIJCQk1MDAwCQkvKiBEZWZhdWx0IEhvbGRiYWNrIHZhbHVlICovCisjZGVmaW5lCVJPU0VfREVGQVVMVF9JRExFCQkwCQkvKiBObyBBY3Rpdml0eSBUaW1lb3V0IC0gbm9uZSAqLwogI2RlZmluZQlST1NFX0RFRkFVTFRfUk9VVElORwkJMQkJLyogRGVmYXVsdCByb3V0aW5nIGZsYWcgKi8KLSNkZWZpbmUJUk9TRV9ERUZBVUxUX0ZBSUxfVElNRU9VVAkoMTIwICogSFopCS8qIFRpbWUgdW50aWwgbGluayBjb25zaWRlcmVkIHVzYWJsZSAqLworI2RlZmluZQlST1NFX0RFRkFVTFRfRkFJTF9USU1FT1VUCTEyMDAwMAkJLyogVGltZSB1bnRpbCBsaW5rIGNvbnNpZGVyZWQgdXNhYmxlICovCiAjZGVmaW5lCVJPU0VfREVGQVVMVF9NQVhWQwkJNTAJCS8qIE1heGltdW0gbnVtYmVyIG9mIFZDcyBwZXIgbmVpZ2hib3VyICovCiAjZGVmaW5lCVJPU0VfREVGQVVMVF9XSU5ET1dfU0laRQk3CQkvKiBEZWZhdWx0IHdpbmRvdyBzaXplICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKaW5kZXggMzRhMWEwOS4uODA3ZDZmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKQEAgLTk5LDYgKzk5LDcgQEAKIAlTQ1RQX0NNRF9ERUxfTk9OX1BSSU1BUlksIC8qIFJlbW92ZXMgbm9uLXByaW1hcnkgcGVlciB0cmFuc3BvcnRzLiAqLwogCVNDVFBfQ01EX1QzX1JUWF9USU1FUlNfU1RPUCwgLyogU3RvcHMgVDMtcnR4IHBlbmRpbmcgdGltZXJzICovCiAJU0NUUF9DTURfRk9SQ0VfUFJJTV9SRVRSQU4sICAvKiBGb3JjZXMgcmV0cmFucy4gb3ZlciBwcmltYXJ5IHBhdGguICovCisJU0NUUF9DTURfU0VUX1NLX0VSUiwJIC8qIFNldCBza19lcnIgKi8KIAlTQ1RQX0NNRF9MQVNUCiB9IHNjdHBfdmVyYl90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IGU2NzNiMmMuLmFhNjAzM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC00NjEsMTIgKzQ2MSwxMiBAQAogICogdGhlcmUgaXMgcm9vbSBmb3IgYSBwYXJhbSBoZWFkZXIgdG9vLgogICovCiAjZGVmaW5lIHNjdHBfd2Fsa19wYXJhbXMocG9zLCBjaHVuaywgbWVtYmVyKVwKLV9zY3RwX3dhbGtfcGFyYW1zKChwb3MpLCAoY2h1bmspLCBXT1JEX1JPVU5EKG50b2hzKChjaHVuayktPmNodW5rX2hkci5sZW5ndGgpKSwgbWVtYmVyKQorX3NjdHBfd2Fsa19wYXJhbXMoKHBvcyksIChjaHVuayksIG50b2hzKChjaHVuayktPmNodW5rX2hkci5sZW5ndGgpLCBtZW1iZXIpCiAKICNkZWZpbmUgX3NjdHBfd2Fsa19wYXJhbXMocG9zLCBjaHVuaywgZW5kLCBtZW1iZXIpXAogZm9yIChwb3MudiA9IGNodW5rLT5tZW1iZXI7XAogICAgICBwb3MudiA8PSAodm9pZCAqKWNodW5rICsgZW5kIC0gc2l6ZW9mKHNjdHBfcGFyYW1oZHJfdCkgJiZcCi0gICAgIHBvcy52IDw9ICh2b2lkICopY2h1bmsgKyBlbmQgLSBXT1JEX1JPVU5EKG50b2hzKHBvcy5wLT5sZW5ndGgpKSAmJlwKKyAgICAgcG9zLnYgPD0gKHZvaWQgKiljaHVuayArIGVuZCAtIG50b2hzKHBvcy5wLT5sZW5ndGgpICYmXAogICAgICBudG9ocyhwb3MucC0+bGVuZ3RoKSA+PSBzaXplb2Yoc2N0cF9wYXJhbWhkcl90KTtcCiAgICAgIHBvcy52ICs9IFdPUkRfUk9VTkQobnRvaHMocG9zLnAtPmxlbmd0aCkpKQogCkBAIC00NzcsNyArNDc3LDcgQEAKIGZvciAoZXJyID0gKHNjdHBfZXJyaGRyX3QgKikoKHZvaWQgKiljaHVua19oZHIgKyBcCiAJICAgIHNpemVvZihzY3RwX2NodW5raGRyX3QpKTtcCiAgICAgICh2b2lkICopZXJyIDw9ICh2b2lkICopY2h1bmtfaGRyICsgZW5kIC0gc2l6ZW9mKHNjdHBfZXJyaGRyX3QpICYmXAotICAgICAodm9pZCAqKWVyciA8PSAodm9pZCAqKWNodW5rX2hkciArIGVuZCAtIFdPUkRfUk9VTkQobnRvaHMoZXJyLT5sZW5ndGgpKSAmJlwKKyAgICAgKHZvaWQgKillcnIgPD0gKHZvaWQgKiljaHVua19oZHIgKyBlbmQgLSBudG9ocyhlcnItPmxlbmd0aCkgJiZcCiAgICAgIG50b2hzKGVyci0+bGVuZ3RoKSA+PSBzaXplb2Yoc2N0cF9lcnJoZHJfdCk7IFwKICAgICAgZXJyID0gKHNjdHBfZXJyaGRyX3QgKikoKHZvaWQgKillcnIgKyBXT1JEX1JPVU5EKG50b2hzKGVyci0+bGVuZ3RoKSkpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IGViYTk5ZjMuLjdmNGZlYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC03MTIsNiArNzEyLDcgQEAKIAlfX3U4IHRzbl9nYXBfYWNrZWQ7CS8qIElzIHRoaXMgY2h1bmsgYWNrZWQgYnkgYSBHQVAgQUNLPyAqLwogCV9fczggZmFzdF9yZXRyYW5zbWl0OwkgLyogSXMgdGhpcyBjaHVuayBmYXN0IHJldHJhbnNtaXR0ZWQ/ICovCiAJX191OCB0c25fbWlzc2luZ19yZXBvcnQ7IC8qIERhdGEgY2h1bmsgbWlzc2luZyBjb3VudGVyLiAqLworCV9fdTggZGF0YV9hY2NlcHRlZDsgCS8qIEF0IGxlYXN0IDEgY2h1bmsgaW4gdGhpcyBwYWNrZXQgYWNjZXB0ZWQgKi8KIH07CiAKIHZvaWQgc2N0cF9jaHVua19ob2xkKHN0cnVjdCBzY3RwX2NodW5rICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGFmMmIwNTQuLmM5ZmFkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTI3OSw3ICsyNzksNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBza19oYXNoZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiBzay0+c2tfbm9kZS5wcHJldiAhPSBOVUxMOworCXJldHVybiAhc2tfdW5oYXNoZWQoc2spOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNrX25vZGVfaW5pdChzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKQEAgLTQ1NCw2ICs0NTQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tfc3RyZWFtX2ZyZWVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlza2JfdHJ1ZXNpemVfY2hlY2soc2tiKTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1FVRVVFX1NIUlVOSyk7CiAJc2stPnNrX3dtZW1fcXVldWVkICAgLT0gc2tiLT50cnVlc2l6ZTsKIAlzay0+c2tfZm9yd2FyZF9hbGxvYyArPSBza2ItPnRydWVzaXplOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA5NDE4ZjRkLi4zYzk4OWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNDA1LDkgKzQwNSw2IEBACiAKIGV4dGVybiB2b2lkCQkJdGNwX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spOwogCi1leHRlcm4gaW50CQkJdGNwX3Y0X2hhc2hfY29ubmVjdGluZyhzdHJ1Y3Qgc29jayAqc2spOwotCi0KIC8qIEZyb20gc3luY29va2llcy5jICovCiBleHRlcm4gc3RydWN0IHNvY2sgKmNvb2tpZV92NF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIAogCQkJCSAgICBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3gyNWRldmljZS5oIGIvaW5jbHVkZS9uZXQveDI1ZGV2aWNlLmgKaW5kZXggMWEzMTgzNy4uMWQxMGM4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveDI1ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9uZXQveDI1ZGV2aWNlLmgKQEAgLTgsNiArOCw3IEBACiBzdGF0aWMgaW5saW5lIF9fYmUxNiB4MjVfdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKwlza2ItPmRldiA9IGRldjsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJCiAJcmV0dXJuIGh0b25zKEVUSF9QX1gyNSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmgKaW5kZXggZTEwMDI5MS4uYWZhNTA4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtMTQzLDYgKzE0MywxMSBAQAogCS8qIFJlcGxheSBkZXRlY3Rpb24gc3RhdGUgYXQgdGhlIHRpbWUgd2Ugc2VudCB0aGUgbGFzdCBub3RpZmljYXRpb24gKi8KIAlzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUgcHJlcGxheTsKIAorCS8qIGludGVybmFsIGZsYWcgdGhhdCBvbmx5IGhvbGRzIHN0YXRlIGZvciBkZWxheWVkIGFldmVudCBhdCB0aGUKKwkgKiBtb21lbnQKKwkqLworCXUzMgkJCXhmbGFnczsKKwogCS8qIFJlcGxheSBkZXRlY3Rpb24gbm90aWZpY2F0aW9uIHNldHRpbmdzICovCiAJdTMyCQkJcmVwbGF5X21heGFnZTsKIAl1MzIJCQlyZXBsYXlfbWF4ZGlmZjsKQEAgLTE2OCw2ICsxNzMsOSBAQAogCXZvaWQJCQkqZGF0YTsKIH07CiAKKy8qIHhmbGFncyAtIG1ha2UgZW51bSBpZiBtb3JlIHNob3cgdXAgKi8KKyNkZWZpbmUgWEZSTV9USU1FX0RFRkVSCTEKKwogZW51bSB7CiAJWEZSTV9TVEFURV9WT0lELAogCVhGUk1fU1RBVEVfQUNRLApAQCAtMjQyLDcgKzI1MCw2IEBACiAKIGV4dGVybiB2b2lkIHhmcm1fc3RhdGVfZGVsZXRlX3R1bm5lbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiAKLXN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlOwogc3RydWN0IHhmcm1fdHlwZQogewogCWNoYXIJCQkqZGVzY3JpcHRpb247CkBAIC0yNTEsNyArMjU4LDcgQEAKIAogCWludAkJCSgqaW5pdF9zdGF0ZSkoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogCXZvaWQJCQkoKmRlc3RydWN0b3IpKHN0cnVjdCB4ZnJtX3N0YXRlICopOwotCWludAkJCSgqaW5wdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICosIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICosIHN0cnVjdCBza19idWZmICpza2IpOworCWludAkJCSgqaW5wdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICosIHN0cnVjdCBza19idWZmICpza2IpOwogCWludAkJCSgqb3V0cHV0KShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqcHNrYik7CiAJLyogRXN0aW1hdGUgbWF4aW1hbCBzaXplIG9mIHJlc3VsdCBvZiB0cmFuc2Zvcm1hdGlvbiBvZiBhIGRncmFtICovCiAJdTMyCQkJKCpnZXRfbWF4X3NpemUpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCBzaXplKTsKQEAgLTYwNiwyNSArNjEzLDExIEBACiAKIGV4dGVybiB2b2lkIHhmcm1fZHN0X2lmZG93bihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0vKiBEZWNhcHN1bGF0aW9uIHN0YXRlLCB1c2VkIGJ5IHRoZSBpbnB1dCB0byBzdG9yZSBkYXRhIGR1cmluZwotICogZGVjYXBzdWxhdGlvbiBwcm9jZWR1cmUsIHRvIGJlIHVzZWQgbGF0ZXIgKGR1cmluZyB0aGUgcG9saWN5Ci0gKiBjaGVjawotICovCi1zdHJ1Y3QgeGZybV9kZWNhcF9zdGF0ZSB7Ci0JY2hhcglkZWNhcF9kYXRhWzIwXTsKLQlfX3UxNglkZWNhcF90eXBlOwotfTsgICAKLQotc3RydWN0IHNlY19kZWNhcF9zdGF0ZSB7Ci0Jc3RydWN0IHhmcm1fc3RhdGUJKnh2ZWM7Ci0Jc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgZGVjYXA7Ci19OwotCiBzdHJ1Y3Qgc2VjX3BhdGgKIHsKIAlhdG9taWNfdAkJcmVmY250OwogCWludAkJCWxlbjsKLQlzdHJ1Y3Qgc2VjX2RlY2FwX3N0YXRlCXhbWEZSTV9NQVhfREVQVEhdOworCXN0cnVjdCB4ZnJtX3N0YXRlCSp4dmVjW1hGUk1fTUFYX0RFUFRIXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNlY19wYXRoICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2J1bGttZW0uaCBiL2luY2x1ZGUvcGNtY2lhL2J1bGttZW0uaAppbmRleCBiNTNiNzhkLi42YmM3NDcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9idWxrbWVtLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvYnVsa21lbS5oCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIFJFR0lPTl9CQVJfTUFTSwkJMHhlMDAwCiAjZGVmaW5lIFJFR0lPTl9CQVJfU0hJRlQJMTMKIAotaW50IHBjbWNpYV9nZXRfZmlyc3RfcmVnaW9uKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHJlZ2lvbl9pbmZvX3QgKnJnbik7Ci1pbnQgcGNtY2lhX2dldF9uZXh0X3JlZ2lvbihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCByZWdpb25faW5mb190ICpyZ24pOworaW50IHBjbWNpYV9nZXRfZmlyc3RfcmVnaW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHJlZ2lvbl9pbmZvX3QgKnJnbik7CitpbnQgcGNtY2lhX2dldF9uZXh0X3JlZ2lvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCByZWdpb25faW5mb190ICpyZ24pOwogCiAjZW5kaWYgLyogX0xJTlVYX0JVTEtNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY2lzY29kZS5oIGIvaW5jbHVkZS9wY21jaWEvY2lzY29kZS5oCmluZGV4IGRhMTljMjkuLmMxZGE4NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2Npc2NvZGUuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jaXNjb2RlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogY2lzY29kZS5oIC0tIERlZmluaXRpb25zIGZvciBidWxrIG1lbW9yeSBzZXJ2aWNlcworICogY2lzY29kZS5oCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMjIsNCArMTIyLDcgQEAKIAogI2RlZmluZSBNQU5GSURfWElSQ09NCQkJMHgwMTA1CiAKKyNkZWZpbmUgTUFORklEX1BPU1NJTwkJCTB4MDMwYworI2RlZmluZSBQUk9ESURfUE9TU0lPX0dDQwkJMHgwMDAzCisKICNlbmRpZiAvKiBfTElOVVhfQ0lTQ09ERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaCBiL2luY2x1ZGUvcGNtY2lhL2Npc3RwbC5oCmluZGV4IGM2YTA2OTUuLmQzYmJiMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2Npc3RwbC5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2Npc3RwbC5oCkBAIC01ODYsMTIgKzU4Niw3IEBACiAgICAgY2lzZGF0YV90CURhdGFbQ0lTVFBMX01BWF9DSVNfU0laRV07CiB9IGNpc2R1bXBfdDsKIAotaW50IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUpOwotaW50IHBjbWNpYV9nZXRfbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSk7Ci1pbnQgcGNtY2lhX2dldF90dXBsZV9kYXRhKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlKTsKLWludCBwY21jaWFfcGFyc2VfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKTsKIAotaW50IHBjbWNpYV92YWxpZGF0ZV9jaXMoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgY2lzaW5mb190ICppbmZvKTsKIGludCBwY21jaWFfcmVwbGFjZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGNpc2R1bXBfdCAqY2lzKTsKIAogLyogZG9uJ3QgdXNlIG91dHNpZGUgb2YgUENNQ0lBIGNvcmUgeWV0ICovCkBAIC02MDIsNCArNTk3LDIwIEBACiAKIGludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIGNpc2luZm9fdCAqaW5mbyk7CiAKKy8qIC4uLiBidXQgdXNlIHRoZXNlIHdyYXBwZXJzIGluc3RlYWQgKi8KKyNkZWZpbmUgcGNtY2lhX2dldF9maXJzdF90dXBsZShwX2RldiwgdHVwbGUpIFwKKwkJcGNjYXJkX2dldF9maXJzdF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpCisKKyNkZWZpbmUgcGNtY2lhX2dldF9uZXh0X3R1cGxlKHBfZGV2LCB0dXBsZSkgXAorCQlwY2NhcmRfZ2V0X25leHRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsIHR1cGxlKQorCisjZGVmaW5lIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShwX2RldiwgdHVwbGUpIFwKKwkJcGNjYXJkX2dldF90dXBsZV9kYXRhKHBfZGV2LT5zb2NrZXQsIHR1cGxlKQorCisjZGVmaW5lIHBjbWNpYV9wYXJzZV90dXBsZShwX2RldiwgdHVwbGUsIHBhcnNlKSBcCisJCXBjY2FyZF9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpCisKKyNkZWZpbmUgcGNtY2lhX3ZhbGlkYXRlX2NpcyhwX2RldiwgaW5mbykgXAorCQlwY2NhcmRfdmFsaWRhdGVfY2lzKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBpbmZvKQorCiAjZW5kaWYgLyogTElOVVhfQ0lTVFBMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2NzLmggYi9pbmNsdWRlL3BjbWNpYS9jcy5oCmluZGV4IDUyNjYwZjMuLmQ1ODM4YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2NzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvY3MuaApAQCAtMTA5LDE3ICsxMDksNiBAQAogCiAjZGVmaW5lIENMSUVOVF9USElTX1NPQ0tFVAkweDAxCiAKLS8qIEZvciBSZWdpc3RlckNsaWVudCAqLwotdHlwZWRlZiBzdHJ1Y3QgY2xpZW50X3JlZ190IHsKLSAgICBkZXZfaW5mb190CSpkZXZfaW5mbzsKLSAgICB1X2ludAlBdHRyaWJ1dGVzOyAgLyogVU5VU0VEICovCi0gICAgdV9pbnQJRXZlbnRNYXNrOwotICAgIGludAkJKCpldmVudF9oYW5kbGVyKShldmVudF90IGV2ZW50LCBpbnQgcHJpb3JpdHksCi0JCQkJIGV2ZW50X2NhbGxiYWNrX2FyZ3NfdCAqKTsKLSAgICBldmVudF9jYWxsYmFja19hcmdzX3QgZXZlbnRfY2FsbGJhY2tfYXJnczsKLSAgICB1X2ludAlWZXJzaW9uOwotfSBjbGllbnRfcmVnX3Q7Ci0KIC8qIE1vZGlmeUNvbmZpZ3VyYXRpb24gKi8KIHR5cGVkZWYgc3RydWN0IG1vZGNvbmZfdCB7CiAgICAgdV9pbnQJQXR0cmlidXRlczsKQEAgLTEyNywxNSArMTE2LDE2IEBACiB9IG1vZGNvbmZfdDsKIAogLyogQXR0cmlidXRlcyBmb3IgTW9kaWZ5Q29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBDT05GX0lSUV9DSEFOR0VfVkFMSUQJMHgxMDAKLSNkZWZpbmUgQ09ORl9WQ0NfQ0hBTkdFX1ZBTElECTB4MjAwCi0jZGVmaW5lIENPTkZfVlBQMV9DSEFOR0VfVkFMSUQJMHg0MDAKLSNkZWZpbmUgQ09ORl9WUFAyX0NIQU5HRV9WQUxJRAkweDgwMAorI2RlZmluZSBDT05GX0lSUV9DSEFOR0VfVkFMSUQJMHgwMTAwCisjZGVmaW5lIENPTkZfVkNDX0NIQU5HRV9WQUxJRAkweDAyMDAKKyNkZWZpbmUgQ09ORl9WUFAxX0NIQU5HRV9WQUxJRAkweDA0MDAKKyNkZWZpbmUgQ09ORl9WUFAyX0NIQU5HRV9WQUxJRAkweDA4MDAKKyNkZWZpbmUgQ09ORl9JT19DSEFOR0VfV0lEVEgJMHgxMDAwCiAKIC8qIEZvciBSZXF1ZXN0Q29uZmlndXJhdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgY29uZmlnX3JlcV90IHsKICAgICB1X2ludAlBdHRyaWJ1dGVzOwotICAgIHVfaW50CVZjYywgVnBwMSwgVnBwMjsKKyAgICB1X2ludAlWcHA7IC8qIGJvdGggVnBwMSBhbmQgVnBwMiAqLwogICAgIHVfaW50CUludFR5cGU7CiAgICAgdV9pbnQJQ29uZmlnQmFzZTsKICAgICB1X2NoYXIJU3RhdHVzLCBQaW4sIENvcHksIEV4dFN0YXR1czsKQEAgLTM4OSwyMyArMzc5LDI3IEBACiBpbnQgcGNtY2lhX2dldF9tZW1fcGFnZSh3aW5kb3dfaGFuZGxlX3Qgd2luLCBtZW1yZXFfdCAqcmVxKTsKIGludCBwY21jaWFfbWFwX21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpOwogaW50IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIG1vZGNvbmZfdCAqbW9kKTsKLWludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci1pbnQgcGNtY2lhX3JlbGVhc2VfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKTsKLWludCBwY21jaWFfcmVsZWFzZV9pcnEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpcnFfcmVxX3QgKnJlcSk7CiBpbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHdpbmRvd19oYW5kbGVfdCB3aW4pOwogaW50IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjb25maWdfcmVxX3QgKnJlcSk7CiBpbnQgcGNtY2lhX3JlcXVlc3RfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKTsKIGludCBwY21jaWFfcmVxdWVzdF9pcnEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpcnFfcmVxX3QgKnJlcSk7CiBpbnQgcGNtY2lhX3JlcXVlc3Rfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICoqcF9kZXYsIHdpbl9yZXFfdCAqcmVxLCB3aW5kb3dfaGFuZGxlX3QgKndoKTsKLWludCBwY21jaWFfcmVzZXRfY2FyZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNsaWVudF9yZXFfdCAqcmVxKTsKIGludCBwY21jaWFfc3VzcGVuZF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogaW50IHBjbWNpYV9yZXN1bWVfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIGludCBwY21jaWFfZWplY3RfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIGludCBwY21jaWFfaW5zZXJ0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CitpbnQgcGNjYXJkX3Jlc2V0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CisKK3N0cnVjdCBwY21jaWFfZGV2aWNlICogcGNtY2lhX2Rldl9wcmVzZW50KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Cit2b2lkIHBjbWNpYV9kaXNhYmxlX2RldmljZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCiBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqIHBjbWNpYV9nZXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogdm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIAorLyogY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgcGNtY2lhX3Jlc2V0X2NhcmQocF9kZXYsIHJlcSkgXAorCQlwY2NhcmRfcmVzZXRfY2FyZChwX2Rldi0+c29ja2V0KQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2RzLmggYi9pbmNsdWRlL3BjbWNpYS9kcy5oCmluZGV4IDhlMmE5NjMuLjhjMzM5ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2RzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvZHMuaApAQCAtMzksNyArMzksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgYmluZF9pbmZvX3QgewogICAgIGRldl9pbmZvX3QJCWRldl9pbmZvOwogICAgIHVfY2hhcgkJZnVuY3Rpb247Ci0gICAgc3RydWN0IGRldl9saW5rX3QJKmluc3RhbmNlOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICppbnN0YW5jZTsKICAgICBjaGFyCQluYW1lW0RFVl9OQU1FX0xFTl07CiAgICAgdV9zaG9ydAkJbWFqb3IsIG1pbm9yOwogICAgIHZvaWQJCSpuZXh0OwpAQCAtOTYsNiArOTYsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogCiB0eXBlZGVmIHN0cnVjdCBkZXZfbm9kZV90IHsKICAgICBjaGFyCQlkZXZfbmFtZVtERVZfTkFNRV9MRU5dOwpAQCAtMTAzLDM0ICsxMDQsOSBAQAogICAgIHN0cnVjdCBkZXZfbm9kZV90CSpuZXh0OwogfSBkZXZfbm9kZV90OwogCi10eXBlZGVmIHN0cnVjdCBkZXZfbGlua190IHsKLSAgICBkZXZfbm9kZV90CQkqZGV2OwotICAgIHVfaW50CQlzdGF0ZSwgb3BlbjsKLSAgICB3YWl0X3F1ZXVlX2hlYWRfdAlwZW5kaW5nOwotICAgIGNsaWVudF9oYW5kbGVfdAloYW5kbGU7Ci0gICAgaW9fcmVxX3QJCWlvOwotICAgIGlycV9yZXFfdAkJaXJxOwotICAgIGNvbmZpZ19yZXFfdAljb25mOwotICAgIHdpbmRvd19oYW5kbGVfdAl3aW47Ci0gICAgdm9pZAkJKnByaXY7Ci0gICAgc3RydWN0IGRldl9saW5rX3QJKm5leHQ7Ci19IGRldl9saW5rX3Q7Ci0KLS8qIEZsYWdzIGZvciBkZXZpY2Ugc3RhdGUgKi8KLSNkZWZpbmUgREVWX1BSRVNFTlQJCTB4MDEKLSNkZWZpbmUgREVWX0NPTkZJRwkJMHgwMgotI2RlZmluZSBERVZfU1RBTEVfQ09ORklHCTB4MDQJLyogcmVsZWFzZSBvbiBjbG9zZSAqLwotI2RlZmluZSBERVZfU1RBTEVfTElOSwkJMHgwOAkvKiBkZXRhY2ggb24gcmVsZWFzZSAqLwotI2RlZmluZSBERVZfQ09ORklHX1BFTkRJTkcJMHgxMAotI2RlZmluZSBERVZfUkVMRUFTRV9QRU5ESU5HCTB4MjAKLSNkZWZpbmUgREVWX1NVU1BFTkQJCTB4NDAKLSNkZWZpbmUgREVWX0JVU1kJCTB4ODAKLQotI2RlZmluZSBERVZfT0sobCkgXAotICAgICgobCkgJiYgKChsLT5zdGF0ZSAmIH5ERVZfQlVTWSkgPT0gKERFVl9DT05GSUd8REVWX1BSRVNFTlQpKSkKLQogCiBzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKK3N0cnVjdCBjb25maWdfdDsKIAogc3RydWN0IHBjbWNpYV9kcml2ZXIgewogCWludCAoKnByb2JlKQkJKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpOwpAQCAtMTQ4LDYgKzEyNCw3IEBACiBpbnQgcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqZHJpdmVyKTsKIHZvaWQgcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpOwogCisKIHN0cnVjdCBwY21jaWFfZGV2aWNlIHsKIAkvKiB0aGUgc29ja2V0IGFuZCB0aGUgZGV2aWNlX25vIFtmb3IgbXVsdGlmdW5jdGlvbiBkZXZpY2VzXQogCSAgIHVuaXF1ZWx5IGRlZmluZSBhIHBjbWNpYV9kZXZpY2UgKi8KQEAgLTE2MCwyMSArMTM3LDQwIEBACiAJLyogdGhlIGhhcmR3YXJlICJmdW5jdGlvbiIgZGV2aWNlOyBjZXJ0YWluIHN1YmRldmljZXMgY2FuCiAJICogc2hhcmUgb25lIGhhcmR3YXJlICJmdW5jdGlvbiIgZGV2aWNlLiAqLwogCXU4CQkJZnVuYzsKKwlzdHJ1Y3QgY29uZmlnX3QqCWZ1bmN0aW9uX2NvbmZpZzsKIAogCXN0cnVjdCBsaXN0X2hlYWQJc29ja2V0X2RldmljZV9saXN0OwogCi0JLyogZGVwcmVjYXRlZCwgYSBjbGVhbmVkIHVwIHZlcnNpb24gd2lsbCBiZSBtb3ZlZCBpbnRvIHRoaXMKLQkgICBzdHJ1Y3Qgc29vbiAqLwotCWRldl9saW5rX3QJCSppbnN0YW5jZTsKLQl1X2ludAkJCXN0YXRlOworCS8qIGRlcHJlY2F0ZWQsIHdpbGwgYmUgY2xlYW5lZCB1cCBzb29uICovCisJZGV2X25vZGVfdAkJKmRldl9ub2RlOworCXVfaW50CQkJb3BlbjsKKwlpb19yZXFfdAkJaW87CisJaXJxX3JlcV90CQlpcnE7CisJY29uZmlnX3JlcV90CQljb25mOworCXdpbmRvd19oYW5kbGVfdAkJd2luOworCisJLyogSXMgdGhlIGRldmljZSBzdXNwZW5kZWQsIG9yIGluIHRoZSBwcm9jZXNzIG9mCisJICogYmVpbmcgcmVtb3ZlZD8gKi8KKwl1MTYJCQlzdXNwZW5kZWQ6MTsKKwl1MTYJCQlfcmVtb3ZlZDoxOworCisJLyogRmxhZ3Mgd2hldGhlciBpbywgaXJxLCB3aW4gY29uZmlndXJhdGlvbnMgd2VyZQorCSAqIHJlcXVlc3RlZCwgYW5kIHdoZXRoZXIgdGhlIGNvbmZpZ3VyYXRpb24gaXMgImxvY2tlZCIgKi8KKwl1MTYJCQlfaXJxOjE7CisJdTE2CQkJX2lvOjE7CisJdTE2CQkJX3dpbjo0OworCXUxNgkJCV9sb2NrZWQ6MTsKKworCS8qIEZsYWcgd2hldGhlciBhICJmdXp6eSIgZnVuY19pZCBiYXNlZCBtYXRjaCBpcworCSAqIGFsbG93ZWQuICovCisJdTE2CQkJYWxsb3dfZnVuY19pZF9tYXRjaDoxOwogCiAJLyogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkZXZpY2UgKi8KLQl1OAkJCWhhc19tYW5mX2lkOjE7Ci0JdTgJCQloYXNfY2FyZF9pZDoxOwotCXU4CQkJaGFzX2Z1bmNfaWQ6MTsKKwl1MTYJCQloYXNfbWFuZl9pZDoxOworCXUxNgkJCWhhc19jYXJkX2lkOjE7CisJdTE2CQkJaGFzX2Z1bmNfaWQ6MTsKIAotCXU4CQkJYWxsb3dfZnVuY19pZF9tYXRjaDoxOwotCXU4CQkJcmVzZXJ2ZWQ6NDsKKwl1MTYJCQlyZXNlcnZlZDozOwogCiAJdTgJCQlmdW5jX2lkOwogCXUxNgkJCW1hbmZfaWQ7CkBAIC0xODIsMjIgKzE3OCwyNCBAQAogCiAJY2hhciAqCQkJcHJvZF9pZFs0XTsKIAorCXN0cnVjdCBkZXZpY2UJCWRldjsKKworI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIAkvKiBkZXZpY2UgZHJpdmVyIHdhbnRlZCBieSBjYXJkbWdyICovCiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKgljYXJkbWdyOworI2VuZGlmCiAKLQlzdHJ1Y3QgZGV2aWNlCQlkZXY7CisJLyogZGF0YSBwcml2YXRlIHRvIGRyaXZlcnMgKi8KKwl2b2lkCQkJKnByaXY7CiB9OwogCiAjZGVmaW5lIHRvX3BjbWNpYV9kZXYobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBwY21jaWFfZGV2aWNlLCBkZXYpCiAjZGVmaW5lIHRvX3BjbWNpYV9kcnYobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBwY21jaWFfZHJpdmVyLCBkcnYpCiAKLSNkZWZpbmUgaGFuZGxlX3RvX3BkZXYoaGFuZGxlKSAoaGFuZGxlKQogI2RlZmluZSBoYW5kbGVfdG9fZGV2KGhhbmRsZSkgKGhhbmRsZS0+ZGV2KQogCi0jZGVmaW5lIGRldl90b19pbnN0YW5jZShkZXYpIChkZXYtPmluc3RhbmNlKQotCiAvKiBlcnJvciByZXBvcnRpbmcgKi8KLXZvaWQgY3NfZXJyb3IoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgaW50IGZ1bmMsIGludCByZXQpOwordm9pZCBjc19lcnJvcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCBpbnQgZnVuYywgaW50IHJldCk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX0RTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL3NzLmggYi9pbmNsdWRlL3BjbWNpYS9zcy5oCmluZGV4IDI4ODlhNjkuLjVlMGEwMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL3NzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvc3MuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIHRhc2tfc3RydWN0LCBjb21wbGV0aW9uICovCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpAQCAtMTQ2LDE0ICsxNDcsMTUgQEAKIC8qICFTU19DQVBfU1RBVElDX01BUCAqLwogZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9ub25zdGF0aWNfb3BzOwogCisvKiBzdGF0aWMgbWVtLCBkeW5hbWljIElPIHNvY2tldHMgKi8KK2V4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfaW9keW5fb3BzOworCiAvKgogICogIENhbGxzIHRvIHNldCB1cCBsb3ctbGV2ZWwgIlNvY2tldCBTZXJ2aWNlcyIgZHJpdmVycwogICovCiBzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKIAogdHlwZWRlZiBzdHJ1Y3QgaW9fd2luZG93X3QgewotCXVfaW50CQkJQXR0cmlidXRlczsKLQlraW9fYWRkcl90CQlCYXNlUG9ydCwgTnVtUG9ydHM7CiAJa2lvX2FkZHJfdAkJSW5Vc2UsIENvbmZpZzsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CiB9IGlvX3dpbmRvd190OwpAQCAtMTYyLDcgKzE2NCw3IEBACiB0eXBlZGVmIHN0cnVjdCB3aW5kb3dfdCB7CiAJdV9zaG9ydAkJCW1hZ2ljOwogCXVfc2hvcnQJCQlpbmRleDsKLQljbGllbnRfaGFuZGxlX3QJCWhhbmRsZTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqaGFuZGxlOwogCXN0cnVjdCBwY21jaWFfc29ja2V0IAkqc29jazsKIAlwY2NhcmRfbWVtX21hcAkJY3RsOwogfSB3aW5kb3dfdDsKQEAgLTE4Niw3ICsxODgsNiBAQAogCXVfc2hvcnQJCQkJbG9ja19jb3VudDsKIAlwY2NhcmRfbWVtX21hcAkJCWNpc19tZW07CiAJdm9pZCBfX2lvbWVtIAkJCSpjaXNfdmlydDsKLQlzdHJ1Y3QgY29uZmlnX3QJCQkqY29uZmlnOwogCXN0cnVjdCB7CiAJCXVfaW50CQkJQXNzaWduZWRJUlE7CiAJCXVfaW50CQkJQ29uZmlnOwpAQCAtMjQxLDcgKzI0Miw3IEBACiAjZW5kaWYKIAogCS8qIHN0YXRlIHRocmVhZCAqLwotCXN0cnVjdCBzZW1hcGhvcmUJCXNrdF9zZW07CS8qIHByb3RlY3RzIHNvY2tldCBoL3cgc3RhdGUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlza3RfbXV0ZXg7CS8qIHByb3RlY3RzIHNvY2tldCBoL3cgc3RhdGUgKi8KIAogCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJdGhyZWFkX2RvbmU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfc2EuaCBiL2luY2x1ZGUvcmRtYS9pYl9zYS5oCmluZGV4IGY0MDRmZTIuLmFkNjNjMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9zYS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9zYS5oCkBAIC05MSwzNCArOTEsNiBAQAogCUlCX1NBX0JFU1QgPSAzCiB9OwogCi1lbnVtIGliX3NhX3JhdGUgewotCUlCX1NBX1JBVEVfMl81X0dCUFMgPSAyLAotCUlCX1NBX1JBVEVfNV9HQlBTICAgPSA1LAotCUlCX1NBX1JBVEVfMTBfR0JQUyAgPSAzLAotCUlCX1NBX1JBVEVfMjBfR0JQUyAgPSA2LAotCUlCX1NBX1JBVEVfMzBfR0JQUyAgPSA0LAotCUlCX1NBX1JBVEVfNDBfR0JQUyAgPSA3LAotCUlCX1NBX1JBVEVfNjBfR0JQUyAgPSA4LAotCUlCX1NBX1JBVEVfODBfR0JQUyAgPSA5LAotCUlCX1NBX1JBVEVfMTIwX0dCUFMgPSAxMAotfTsKLQotc3RhdGljIGlubGluZSBpbnQgaWJfc2FfcmF0ZV9lbnVtX3RvX2ludChlbnVtIGliX3NhX3JhdGUgcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIElCX1NBX1JBVEVfMl81X0dCUFM6IHJldHVybiAgMTsKLQljYXNlIElCX1NBX1JBVEVfNV9HQlBTOiAgIHJldHVybiAgMjsKLQljYXNlIElCX1NBX1JBVEVfMTBfR0JQUzogIHJldHVybiAgNDsKLQljYXNlIElCX1NBX1JBVEVfMjBfR0JQUzogIHJldHVybiAgODsKLQljYXNlIElCX1NBX1JBVEVfMzBfR0JQUzogIHJldHVybiAxMjsKLQljYXNlIElCX1NBX1JBVEVfNDBfR0JQUzogIHJldHVybiAxNjsKLQljYXNlIElCX1NBX1JBVEVfNjBfR0JQUzogIHJldHVybiAyNDsKLQljYXNlIElCX1NBX1JBVEVfODBfR0JQUzogIHJldHVybiAzMjsKLQljYXNlIElCX1NBX1JBVEVfMTIwX0dCUFM6IHJldHVybiA0ODsKLQlkZWZhdWx0OiAJICAgICAgICAgIHJldHVybiAtMTsKLQl9Ci19Ci0KIC8qCiAgKiBTdHJ1Y3R1cmVzIGZvciBTQSByZWNvcmRzIGFyZSBuYW1lZCAic3RydWN0IGliX3NhX3h4eF9yZWMuIiAgTm8KICAqIGF0dGVtcHQgaXMgbWFkZSB0byBwYWNrIHN0cnVjdHVyZXMgdG8gbWF0Y2ggdGhlIHBoeXNpY2FsIGxheW91dCBvZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCBjMWFkNjI3Li42YmJmMWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtMzE0LDYgKzMxNCwzNCBAQAogCUlCX0FIX0dSSAk9IDEKIH07CiAKK2VudW0gaWJfcmF0ZSB7CisJSUJfUkFURV9QT1JUX0NVUlJFTlQgPSAwLAorCUlCX1JBVEVfMl81X0dCUFMgPSAyLAorCUlCX1JBVEVfNV9HQlBTICAgPSA1LAorCUlCX1JBVEVfMTBfR0JQUyAgPSAzLAorCUlCX1JBVEVfMjBfR0JQUyAgPSA2LAorCUlCX1JBVEVfMzBfR0JQUyAgPSA0LAorCUlCX1JBVEVfNDBfR0JQUyAgPSA3LAorCUlCX1JBVEVfNjBfR0JQUyAgPSA4LAorCUlCX1JBVEVfODBfR0JQUyAgPSA5LAorCUlCX1JBVEVfMTIwX0dCUFMgPSAxMAorfTsKKworLyoqCisgKiBpYl9yYXRlX3RvX211bHQgLSBDb252ZXJ0IHRoZSBJQiByYXRlIGVudW0gdG8gYSBtdWx0aXBsZSBvZiB0aGUKKyAqIGJhc2UgcmF0ZSBvZiAyLjUgR2JpdC9zZWMuICBGb3IgZXhhbXBsZSwgSUJfUkFURV81X0dCUFMgd2lsbCBiZQorICogY29udmVydGVkIHRvIDIsIHNpbmNlIDUgR2JpdC9zZWMgaXMgMiAqIDIuNSBHYml0L3NlYy4KKyAqIEByYXRlOiByYXRlIHRvIGNvbnZlcnQuCisgKi8KK2ludCBpYl9yYXRlX3RvX211bHQoZW51bSBpYl9yYXRlIHJhdGUpIF9fYXR0cmlidXRlX2NvbnN0X187CisKKy8qKgorICogbXVsdF90b19pYl9yYXRlIC0gQ29udmVydCBhIG11bHRpcGxlIG9mIDIuNSBHYml0L3NlYyB0byBhbiBJQiByYXRlCisgKiBlbnVtLgorICogQG11bHQ6IG11bHRpcGxlIHRvIGNvbnZlcnQuCisgKi8KK2VudW0gaWJfcmF0ZSBtdWx0X3RvX2liX3JhdGUoaW50IG11bHQpIF9fYXR0cmlidXRlX2NvbnN0X187CisKIHN0cnVjdCBpYl9haF9hdHRyIHsKIAlzdHJ1Y3QgaWJfZ2xvYmFsX3JvdXRlCWdyaDsKIAl1MTYJCQlkbGlkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aW5mby5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aW5mby5oCmluZGV4IDE3NDEwMWIuLmQzMWIxNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmluZm8uaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpbmZvLmgKQEAgLTI4LDQgKzI4LDUgQEAKICNkZWZpbmUgQkxJU1RfTk9fVUxEX0FUVEFDSAkweDEwMDAwMCAvKiBkZXZpY2UgaXMgYWN0dWFsbHkgZm9yIFJBSUQgY29uZmlnICovCiAjZGVmaW5lIEJMSVNUX1NFTEVDVF9OT19BVE4JMHgyMDAwMDAgLyogc2VsZWN0IHdpdGhvdXQgQVROICovCiAjZGVmaW5lIEJMSVNUX1JFVFJZX0hXRVJST1IJMHg0MDAwMDAgLyogcmV0cnkgSEFSRFdBUkVfRVJST1IgKi8KKyNkZWZpbmUgQkxJU1RfTUFYXzUxMgkJMHg4MDAwMDAgLyogbWF4aW11bSA1MTIgc2VjdG9yIGNkYiBsZW5ndGggKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCmluZGV4IGRjNjg2MmQuLmRlNmNlNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTE0MCw3ICsxNDAsNiBAQAogCSAqCiAJICogU3RhdHVzOiBSRVFVSVJFRAkoYXQgbGVhc3Qgb25lIG9mIHRoZW0pCiAJICovCi0JaW50ICgqIGVoX3N0cmF0ZWd5X2hhbmRsZXIpKHN0cnVjdCBTY3NpX0hvc3QgKik7CiAJaW50ICgqIGVoX2Fib3J0X2hhbmRsZXIpKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAJaW50ICgqIGVoX2RldmljZV9yZXNldF9oYW5kbGVyKShzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCWludCAoKiBlaF9idXNfcmVzZXRfaGFuZGxlcikoc3RydWN0IHNjc2lfY21uZCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9pb2N0bC5oCmluZGV4IGQ0YmU0ZDkuLmVkYjk1MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaApAQCAtNDEsOCArNDEsNiBAQAogfSBTY3NpX0ZDVGFyZ0FkZHJlc3M7CiAKIGV4dGVybiBpbnQgc2NzaV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50LCB2b2lkIF9fdXNlciAqKTsKLWV4dGVybiBpbnQgc2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoc3RydWN0IHNjc2lfZGV2aWNlICosCi0JCQkJICAgc3RydWN0IHNjc2lfaW9jdGxfY29tbWFuZCBfX3VzZXIgKik7CiBleHRlcm4gaW50IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGNtZCwKIAkJCQkgICB2b2lkIF9fdXNlciAqYXJnLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKaW5kZXggYjM2NTdmMS4uY2NhMWQ0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKQEAgLTUwLDYgKzUwLDExIEBACiAJdW5zaWduZWQgaW50IGNyZWF0ZV93b3JrX3F1ZXVlIDogMTsKIAogCS8qCisJICogQWxsb3dzIGEgdHJhbnNwb3J0IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIuCisJICovCisJdm9pZCAoKiBlaF9zdHJhdGVneV9oYW5kbGVyKShzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCisJLyoKIAkgKiBUaGlzIGlzIGFuIG9wdGlvbmFsIHJvdXRpbmUgdGhhdCBhbGxvd3MgdGhlIHRyYW5zcG9ydCB0byBiZWNvbWUKIAkgKiBpbnZvbHZlZCB3aGVuIGEgc2NzaSBpbyB0aW1lciBmaXJlcy4gVGhlIHJldHVybiB2YWx1ZSB0ZWxscyB0aGUKIAkgKiB0aW1lciByb3V0aW5lIGhvdyB0byBmaW5pc2ggdGhlIGlvIHRpbWVvdXQgaGFuZGxpbmc6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCmluZGV4IGNmM2ZlYzguLjU2MjYyMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCkBAIC0yMDIsMTIgKzIwMiwxOSBAQAogCS8qIGludGVybmFsIGRhdGEgKi8KIAl1bnNpZ25lZCBpbnQgY2hhbm5lbDsKIAl1MzIgbnVtYmVyOworCXU4IGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgcGVlcnM7CiAJc3RydWN0IGRldmljZSBkZXY7CiAgCXN0cnVjdCB3b3JrX3N0cnVjdCBkZXZfbG9zc193b3JrOwogIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Nhbl93b3JrOworIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RndF9kZWxldGVfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnBvcnRfZGVsZXRlX3dvcms7CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpOwogCisvKiBiaXQgZmllbGQgdmFsdWVzIGZvciBzdHJ1Y3QgZmNfcnBvcnQgImZsYWdzIiBmaWVsZDogKi8KKyNkZWZpbmUgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HCTB4MDEKKyNkZWZpbmUgRkNfUlBPUlRfU0NBTl9QRU5ESU5HCQkweDAyCisKICNkZWZpbmUJZGV2X3RvX3Jwb3J0KGQpCQkJCVwKIAljb250YWluZXJfb2YoZCwgc3RydWN0IGZjX3Jwb3J0LCBkZXYpCiAjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChjbGFzc2RldikJXApAQCAtMzI3LDEzICszMzQsMTYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJwb3J0X2JpbmRpbmdzOwogCXUzMiBuZXh0X3Jwb3J0X251bWJlcjsKIAl1MzIgbmV4dF90YXJnZXRfaWQ7Ci0JdTggZmxhZ3M7Ci0gCXN0cnVjdCB3b3JrX3N0cnVjdCBycG9ydF9kZWxfd29yazsKKworCS8qIHdvcmsgcXVldWVzIGZvciBycG9ydCBzdGF0ZSBtYW5pcHVsYXRpb24gKi8KKwljaGFyIHdvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3E7CisJY2hhciBkZXZsb3NzX3dvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZXZsb3NzX3dvcmtfcTsKIH07CiAKLS8qIHZhbHVlcyBmb3Igc3RydWN0IGZjX2hvc3RfYXR0cnMgImZsYWdzIiBmaWVsZDogKi8KLSNkZWZpbmUgRkNfU0hPU1RfUlBPUlRfREVMX1NDSEVEVUxFRAkweDAxCi0KKyNkZWZpbmUgc2hvc3RfdG9fZmNfaG9zdCh4KSBcCisJKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSkKIAogI2RlZmluZSBmY19ob3N0X25vZGVfbmFtZSh4KSBcCiAJKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT5ub2RlX25hbWUpCkBAIC0zNzUsMTAgKzM4NSwxNCBAQAogCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+bmV4dF9ycG9ydF9udW1iZXIpCiAjZGVmaW5lIGZjX2hvc3RfbmV4dF90YXJnZXRfaWQoeCkgXAogCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+bmV4dF90YXJnZXRfaWQpCi0jZGVmaW5lIGZjX2hvc3RfZmxhZ3MoeCkgXAotCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+ZmxhZ3MpCi0jZGVmaW5lIGZjX2hvc3RfcnBvcnRfZGVsX3dvcmsoeCkgXAotCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+cnBvcnRfZGVsX3dvcmspCisjZGVmaW5lIGZjX2hvc3Rfd29ya19xX25hbWUoeCkgXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+d29ya19xX25hbWUpCisjZGVmaW5lIGZjX2hvc3Rfd29ya19xKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPndvcmtfcSkKKyNkZWZpbmUgZmNfaG9zdF9kZXZsb3NzX3dvcmtfcV9uYW1lKHgpIFwKKwkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPmRldmxvc3Nfd29ya19xX25hbWUpCisjZGVmaW5lIGZjX2hvc3RfZGV2bG9zc193b3JrX3EoeCkgXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+ZGV2bG9zc193b3JrX3EpCiAKIAogLyogVGhlIGZ1bmN0aW9ucyBieSB3aGljaCB0aGUgdHJhbnNwb3J0IGNsYXNzIGFuZCB0aGUgZHJpdmVyIGNvbW11bmljYXRlICovCkBAIC00NjEsMTAgKzQ3NSwxNSBAQAogCiAJc3dpdGNoIChycG9ydC0+cG9ydF9zdGF0ZSkgewogCWNhc2UgRkNfUE9SVFNUQVRFX09OTElORToKLQkJcmVzdWx0ID0gMDsKKwkJaWYgKHJwb3J0LT5yb2xlcyAmIEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVCkKKwkJCXJlc3VsdCA9IDA7CisJCWVsc2UgaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORykKKwkJCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWVsc2UKKwkJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQlicmVhazsKIAljYXNlIEZDX1BPUlRTVEFURV9CTE9DS0VEOgotCQlyZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3NycC5oIGIvaW5jbHVkZS9zY3NpL3NycC5oCmluZGV4IDZjMjY4MWQuLjYzN2Y3N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zcnAuaAorKysgYi9pbmNsdWRlL3Njc2kvc3JwLmgKQEAgLTk1LDE0ICs5NSwxNSBAQAogCiAvKgogICogV2UgbmVlZCB0aGUgcGFja2VkIGF0dHJpYnV0ZSBiZWNhdXNlIHRoZSBTUlAgc3BlYyBwdXRzIHRoZSBsaXN0IG9mCi0gKiBkZXNjcmlwdG9ycyBhdCBhbiBvZmZzZXQgb2YgMjAsIHdoaWNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoZSBzaXplCi0gKiBvZiBzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYuCisgKiBkZXNjcmlwdG9ycyBhdCBhbiBvZmZzZXQgb2YgMjAsIHdoaWNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoZSBzaXplIG9mCisgKiBzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYuICBUaGUgd2hvbGUgc3RydWN0dXJlIG11c3QgYmUgcGFja2VkIHRvIGF2b2lkCisgKiBoYXZpbmcgdGhlIDIwLWJ5dGUgc3RydWN0dXJlIHBhZGRlZCB0byAyNCBieXRlcyBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcy4KICAqLwogc3RydWN0IHNycF9pbmRpcmVjdF9idWYgewogCXN0cnVjdCBzcnBfZGlyZWN0X2J1Zgl0YWJsZV9kZXNjOwogCV9fYmUzMgkJCWxlbjsKLQlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYJZGVzY19saXN0WzBdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotfTsKKwlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYJZGVzY19saXN0WzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogZW51bSB7CiAJU1JQX01VTFRJQ0hBTl9TSU5HTEUgPSAwLApAQCAtMTIyLDYgKzEyMywxMSBAQAogCXU4CXRhcmdldF9wb3J0X2lkWzE2XTsKIH07CiAKKy8qCisgKiBUaGUgU1JQIHNwZWMgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgTE9HSU5fUlNQIHN0cnVjdHVyZSB0byBiZSA1MgorICogYnl0ZXMsIHNvIGl0IG5lZWRzIHRvIGJlIHBhY2tlZCB0byBhdm9pZCBoYXZpbmcgaXQgcGFkZGVkIHRvIDU2CisgKiBieXRlcyBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcy4KKyAqLwogc3RydWN0IHNycF9sb2dpbl9yc3AgewogCXU4CW9wY29kZTsKIAl1OAlyZXNlcnZlZDFbM107CkBAIC0xMzIsNyArMTM4LDcgQEAKIAlfX2JlMTYJYnVmX2ZtdDsKIAl1OAlyc3BfZmxhZ3M7CiAJdTgJcmVzZXJ2ZWQyWzI1XTsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3Qgc3JwX2xvZ2luX3JlaiB7CiAJdTgJb3Bjb2RlOwpAQCAtMjA3LDYgKzIxMywxMSBAQAogCVNSUF9SU1BfRkxBR19ESVVOREVSICA9IDEgPDwgNQogfTsKIAorLyoKKyAqIFRoZSBTUlAgc3BlYyBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBSU1Agc3RydWN0dXJlIHRvIGJlIDM2IGJ5dGVzLAorICogc28gaXQgbmVlZHMgdG8gYmUgcGFja2VkIHRvIGF2b2lkIGhhdmluZyBpdCBwYWRkZWQgdG8gNDAgYnl0ZXMgb24KKyAqIDY0LWJpdCBhcmNoaXRlY3R1cmVzLgorICovCiBzdHJ1Y3Qgc3JwX3JzcCB7CiAJdTgJb3Bjb2RlOwogCXU4CXNvbF9ub3Q7CkBAIC0yMjEsNiArMjMyLDYgQEAKIAlfX2JlMzIJc2Vuc2VfZGF0YV9sZW47CiAJX19iZTMyCXJlc3BfZGF0YV9sZW47CiAJdTgJZGF0YVswXTsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogU0NTSV9TUlBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb3JlLmggYi9pbmNsdWRlL3NvdW5kL2NvcmUuaAppbmRleCA3ZjMyYzEyLi41MTM1MTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvcmUuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvcmUuaApAQCAtMTcwLDEzICsxNzAsMTMgQEAKIH0KIAogLyogaW5pdC5jICovCi1pbnQgc25kX3Bvd2VyX3dhaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCB1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK2ludCBzbmRfcG93ZXJfd2FpdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSk7CiAKICNlbHNlIC8qICEgQ09ORklHX1BNICovCiAKICNkZWZpbmUgc25kX3Bvd2VyX2xvY2soY2FyZCkJCWRvIHsgKHZvaWQpKGNhcmQpOyB9IHdoaWxlICgwKQogI2RlZmluZSBzbmRfcG93ZXJfdW5sb2NrKGNhcmQpCQlkbyB7ICh2b2lkKShjYXJkKTsgfSB3aGlsZSAoMCkKLXN0YXRpYyBpbmxpbmUgaW50IHNuZF9wb3dlcl93YWl0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IHN0YXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgc25kX3Bvd2VyX3dhaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCB1bnNpZ25lZCBpbnQgc3RhdGUpIHsgcmV0dXJuIDA7IH0KICNkZWZpbmUgc25kX3Bvd2VyX2dldF9zdGF0ZShjYXJkKQlTTkRSVl9DVExfUE9XRVJfRDAKICNkZWZpbmUgc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBzdGF0ZSkJZG8geyAodm9pZCkoY2FyZCk7IH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IDE1Yjg4NTYuLjM3MzQyNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtMzY3LDI3ICszNjcsMjcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ncm91cCBzZWxmX2dyb3VwOwkvKiBmYWtlIGdyb3VwIGZvciBub24gbGlua2VkIHN1YnN0cmVhbSAod2l0aCBzdWJzdHJlYW0gbG9jayBpbnNpZGUpICovCiAJc3RydWN0IHNuZF9wY21fZ3JvdXAgKmdyb3VwOwkJLyogcG9pbnRlciB0byBjdXJyZW50IGdyb3VwICovCiAJLyogLS0gYXNzaWduZWQgZmlsZXMgLS0gKi8KLQlzdHJ1Y3Qgc25kX3BjbV9maWxlICpmaWxlOworCXZvaWQgKmZpbGU7CiAJc3RydWN0IGZpbGUgKmZmaWxlOworCXZvaWQgKCpwY21fcmVsZWFzZSkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICopOwogI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCiAJLyogLS0gT1NTIHRoaW5ncyAtLSAqLwogCXN0cnVjdCBzbmRfcGNtX29zc19zdWJzdHJlYW0gb3NzOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19yb290OwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19pbmZvX2VudHJ5OwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19od19wYXJhbXNfZW50cnk7CiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX3N3X3BhcmFtc19lbnRyeTsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2Nfc3RhdHVzX2VudHJ5OwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19wcmVhbGxvY19lbnRyeTsKKyNlbmRpZgogCS8qIG1pc2MgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQgbm9fbW1hcF9jdHJsOiAxOworCXVuc2lnbmVkIGludCBod19vcGVuZWQ6IDE7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTX01PRFVMRSkKLSNkZWZpbmUgU1VCU1RSRUFNX0JVU1koc3Vic3RyZWFtKSAoKHN1YnN0cmVhbSktPmZpbGUgIT0gTlVMTCB8fCAoKHN1YnN0cmVhbSktPm9zcy5maWxlICE9IE5VTEwpKQotI2Vsc2UKICNkZWZpbmUgU1VCU1RSRUFNX0JVU1koc3Vic3RyZWFtKSAoKHN1YnN0cmVhbSktPmZpbGUgIT0gTlVMTCkKLSNlbmRpZgogCiAKIHN0cnVjdCBzbmRfcGNtX3N0ciB7CkBAIC00MDIsMTIgKzQwMiwxNCBAQAogCXN0cnVjdCBzbmRfcGNtX29zc19zdHJlYW0gb3NzOwogI2VuZGlmCiAJc3RydWN0IHNuZF9wY21fZmlsZSAqZmlsZXM7CisjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19yb290OwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19pbmZvX2VudHJ5OwotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCiAJdW5zaWduZWQgaW50IHhydW5fZGVidWc7CS8qIDAgPSBkaXNhYmxlZCwgMSA9IHZlcmJvc2UsIDIgPSBzdGFja3RyYWNlICovCiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX3hydW5fZGVidWdfZW50cnk7CiAjZW5kaWYKKyNlbmRpZgogfTsKIAogc3RydWN0IHNuZF9wY20gewpAQCAtNDYwLDcgKzQ2Miw2IEBACiAJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2luZm8gX191c2VyICppbmZvKTsKIGludCBzbmRfcGNtX3N0YXR1cyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJICAgc3RydWN0IHNuZF9wY21fc3RhdHVzICpzdGF0dXMpOwotaW50IHNuZF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX3BjbV9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX3BjbV9zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgc3RhdHVzKTsKIGludCBzbmRfcGNtX2RyYWluX2RvbmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwpAQCAtNDY4LDExICs0NjksMTMgQEAKIGludCBzbmRfcGNtX3N1c3BlbmQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogaW50IHNuZF9wY21fc3VzcGVuZF9hbGwoc3RydWN0IHNuZF9wY20gKnBjbSk7CiAjZW5kaWYKLWludCBzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLWludCBzbmRfcGNtX2tlcm5lbF9jYXB0dXJlX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogaW50IHNuZF9wY21fa2VybmVsX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotaW50IHNuZF9wY21fb3Blbl9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSwgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICoqcnN1YnN0cmVhbSk7CitpbnQgc25kX3BjbV9vcGVuX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKnJzdWJzdHJlYW0pOwogdm9pZCBzbmRfcGNtX3JlbGVhc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK2ludCBzbmRfcGNtX2F0dGFjaF9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKnJzdWJzdHJlYW0pOwordm9pZCBzbmRfcGNtX2RldGFjaF9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogdm9pZCBzbmRfcGNtX3ZtYV9ub3RpZnlfZGF0YSh2b2lkICpjbGllbnQsIHZvaWQgKmRhdGEpOwogaW50IHNuZF9wY21fbW1hcF9kYXRhKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKTsKIApAQCAtODk5LDcgKzkwMiw2IEBACiBjb25zdCB1bnNpZ25lZCBjaGFyICpzbmRfcGNtX2Zvcm1hdF9zaWxlbmNlXzY0KHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKIGludCBzbmRfcGNtX2Zvcm1hdF9zZXRfc2lsZW5jZShzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgZnJhbWVzKTsKIHNuZF9wY21fZm9ybWF0X3Qgc25kX3BjbV9idWlsZF9saW5lYXJfZm9ybWF0KGludCB3aWR0aCwgaW50IHVuc2lnbmQsIGludCBiaWdfZW5kaWFuKTsKLWNvbnN0IGNoYXIgKnNuZF9wY21fZm9ybWF0X25hbWUoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpOwogCiB2b2lkIHNuZF9wY21fc2V0X29wcyhzdHJ1Y3Qgc25kX3BjbSAqIHBjbSwgaW50IGRpcmVjdGlvbiwgc3RydWN0IHNuZF9wY21fb3BzICpvcHMpOwogdm9pZCBzbmRfcGNtX3NldF9zeW5jKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtX29zcy5oIGIvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKaW5kZXggYmZmMDc3OGUuLmM4NTQ2NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCisrKyBiL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCkBAIC02OSwxNCArNjksMTUgQEAKIAogc3RydWN0IHNuZF9wY21fb3NzX3N1YnN0cmVhbSB7CiAJdW5zaWduZWQgb3NzOiAxOwkJCS8qIG9zcyBtb2RlICovCi0Jc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cDsJCS8qIGFjdGl2ZSBzZXR1cCAqLwotCXN0cnVjdCBzbmRfcGNtX29zc19maWxlICpmaWxlOworCXN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCBzZXR1cDsJCS8qIGFjdGl2ZSBzZXR1cCAqLwogfTsKIAogc3RydWN0IHNuZF9wY21fb3NzX3N0cmVhbSB7CiAJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cF9saXN0OwkvKiBzZXR1cCBsaXN0ICovCiAJc3RydWN0IG11dGV4IHNldHVwX211dGV4OworI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBzbmRfcGNtX29zcyB7CmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuYwppbmRleCBhZGI3Y2FkLi5mNGI3YjlkMjcgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzLmMKKysrIGIvaW5pdC9kb19tb3VudHMuYwpAQCAtMzEwLDYgKzMxMCwxMSBAQAogCiAJCXBhbmljKCJWRlM6IFVuYWJsZSB0byBtb3VudCByb290IGZzIG9uICVzIiwgYik7CiAJfQorCisJcHJpbnRrKCJObyBmaWxlc3lzdGVtIGNvdWxkIG1vdW50IHJvb3QsIHRyaWVkOiAiKTsKKwlmb3IgKHAgPSBmc19uYW1lczsgKnA7IHAgKz0gc3RybGVuKHApKzEpCisJCXByaW50aygiICVzIiwgcCk7CisJcHJpbnRrKCJcbiIpOwogCXBhbmljKCJWRlM6IFVuYWJsZSB0byBtb3VudCByb290IGZzIG9uICVzIiwgX19iZGV2bmFtZShST09UX0RFViwgYikpOwogb3V0OgogCXB1dG5hbWUoZnNfbmFtZXMpOwpkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggNjc5ZDg3MC4uZjgxY2ZhNCAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC0yNiwxMCArMjYsMTIgQEAKIAogLyogbGluayBoYXNoICovCiAKKyNkZWZpbmUgTl9BTElHTihsZW4pICgoKChsZW4pICsgMSkgJiB+MykgKyAyKQorCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3QgaGFzaCB7CiAJaW50IGlubywgbWlub3IsIG1ham9yOwogCXN0cnVjdCBoYXNoICpuZXh0OwotCWNoYXIgKm5hbWU7CisJY2hhciBuYW1lW05fQUxJR04oUEFUSF9NQVgpXTsKIH0gKmhlYWRbMzJdOwogCiBzdGF0aWMgaW5saW5lIGludCBoYXNoKGludCBtYWpvciwgaW50IG1pbm9yLCBpbnQgaW5vKQpAQCAtNTcsNyArNTksNyBAQAogCXEtPmlubyA9IGlubzsKIAlxLT5taW5vciA9IG1pbm9yOwogCXEtPm1ham9yID0gbWFqb3I7Ci0JcS0+bmFtZSA9IG5hbWU7CisJc3RyY3B5KHEtPm5hbWUsIG5hbWUpOwogCXEtPm5leHQgPSBOVUxMOwogCSpwID0gcTsKIAlyZXR1cm4gTlVMTDsKQEAgLTEzMyw4ICsxMzUsNiBAQAogCWNvdW50IC09IG47CiB9CiAKLSNkZWZpbmUgTl9BTElHTihsZW4pICgoKChsZW4pICsgMSkgJiB+MykgKyAyKQotCiBzdGF0aWMgX19pbml0ZGF0YSBjaGFyICpjb2xsZWN0ZWQ7CiBzdGF0aWMgX19pbml0ZGF0YSBpbnQgcmVtYWluczsKIHN0YXRpYyBfX2luaXRkYXRhIGNoYXIgKmNvbGxlY3Q7CmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDRhMmYwODkuLmY3MTViOWIgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC01ODIsNyArNTgyLDcgQEAKIAogCQlyZXN1bHQgPSAoKmNhbGwpKCk7CiAKLQkJaWYgKHJlc3VsdCAmJiAocmVzdWx0ICE9IC1FTk9ERVYgfHwgaW5pdGNhbGxfZGVidWcpKSB7CisJCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYgJiYgaW5pdGNhbGxfZGVidWcpIHsKIAkJCXNwcmludGYobXNnYnVmLCAiZXJyb3IgY29kZSAlZCIsIHJlc3VsdCk7CiAJCQltc2cgPSBtc2didWY7CiAJCX0KZGlmZiAtLWdpdCBhL2lwYy9tc2cuYyBiL2lwYy9tc2cuYwppbmRleCA0OGE3ZjE3Li43ZDEzNDBjIDEwMDY0NAotLS0gYS9pcGMvbXNnLmMKKysrIGIvaXBjL21zZy5jCkBAIC0xMyw2ICsxMyw5IEBACiAgKiBtb3N0bHkgcmV3cml0dGVuLCB0aHJlYWRlZCBhbmQgd2FrZS1vbmUgc2VtYW50aWNzIGFkZGVkCiAgKiBNU0dNQVggbGltaXQgcmVtb3ZlZCwgc3lzY3RsJ3MgYWRkZWQKICAqIChjKSAxOTk5IE1hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+CisgKgorICogc3VwcG9ydCBmb3IgYXVkaXQgb2YgaXBjIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBwZXJtaXNzaW9uIGNoYW5nZXMKKyAqIER1c3RpbiBLaXJrbGFuZCA8ZHVzdGluLmtpcmtsYW5kQHVzLmlibS5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KQEAgLTQ0Nyw2ICs0NTAsMTEgQEAKIAlpZiAobXNnX2NoZWNraWQobXNxLG1zcWlkKSkKIAkJZ290byBvdXRfdW5sb2NrX3VwOwogCWlwY3AgPSAmbXNxLT5xX3Blcm07CisKKwllcnIgPSBhdWRpdF9pcGNfb2JqKGlwY3ApOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3VubG9ja191cDsKKwogCWVyciA9IC1FUEVSTTsKIAlpZiAoY3VycmVudC0+ZXVpZCAhPSBpcGNwLT5jdWlkICYmIAogCSAgICBjdXJyZW50LT5ldWlkICE9IGlwY3AtPnVpZCAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTQ2MCw3ICs0NjgsOCBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJUENfU0VUOgogCXsKLQkJaWYgKChlcnIgPSBhdWRpdF9pcGNfcGVybXMoc2V0YnVmLnFieXRlcywgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsIGlwY3ApKSkKKwkJZXJyID0gYXVkaXRfaXBjX3NldF9wZXJtKHNldGJ1Zi5xYnl0ZXMsIHNldGJ1Zi51aWQsIHNldGJ1Zi5naWQsIHNldGJ1Zi5tb2RlLCBpcGNwKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X3VubG9ja191cDsKIAogCQllcnIgPSAtRVBFUk07CmRpZmYgLS1naXQgYS9pcGMvc2VtLmMgYi9pcGMvc2VtLmMKaW5kZXggNjQyNjU5Yy4uNzkxOWY4ZSAxMDA2NDQKLS0tIGEvaXBjL3NlbS5jCisrKyBiL2lwYy9zZW0uYwpAQCAtNjEsNiArNjEsOSBAQAogICogKGMpIDIwMDEgUmVkIEhhdCBJbmMgPGFsYW5AcmVkaGF0LmNvbT4KICAqIExvY2tsZXNzIHdha2V1cAogICogKGMpIDIwMDMgTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KKyAqCisgKiBzdXBwb3J0IGZvciBhdWRpdCBvZiBpcGMgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHBlcm1pc3Npb24gY2hhbmdlcworICogRHVzdGluIEtpcmtsYW5kIDxkdXN0aW4ua2lya2xhbmRAdXMuaWJtLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC04MjAsNiArODIzLDExIEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CQogCWlwY3AgPSAmc21hLT5zZW1fcGVybTsKKworCWVyciA9IGF1ZGl0X2lwY19vYmooaXBjcCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5sb2NrOworCiAJaWYgKGN1cnJlbnQtPmV1aWQgIT0gaXBjcC0+Y3VpZCAmJiAKIAkgICAgY3VycmVudC0+ZXVpZCAhPSBpcGNwLT51aWQgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkgICAgCWVycj0tRVBFUk07CkBAIC04MzYsNyArODQ0LDggQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJUENfU0VUOgotCQlpZiAoKGVyciA9IGF1ZGl0X2lwY19wZXJtcygwLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSwgaXBjcCkpKQorCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsIGlwY3ApOworCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrOwogCQlpcGNwLT51aWQgPSBzZXRidWYudWlkOwogCQlpcGNwLT5naWQgPSBzZXRidWYuZ2lkOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IGY4MDZhMmUuLjgwOTg5NjggMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTEzLDYgKzEzLDggQEAKICAqIFNoYXJlZCAvZGV2L3plcm8gc3VwcG9ydCwgS2Fub2ogU2FyY2FyIDxrYW5vakBzZ2kuY29tPgogICogTW92ZSB0aGUgbW0gZnVuY3Rpb25hbGl0eSBvdmVyIHRvIG1tL3NobWVtLmMsIENocmlzdG9waCBSb2hsYW5kIDxjckBzYXAuY29tPgogICoKKyAqIHN1cHBvcnQgZm9yIGF1ZGl0IG9mIGlwYyBvYmplY3QgcHJvcGVydGllcyBhbmQgcGVybWlzc2lvbiBjaGFuZ2VzCisgKiBEdXN0aW4gS2lya2xhbmQgPGR1c3Rpbi5raXJrbGFuZEB1cy5pYm0uY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTkxLDggKzkzLDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaG1faW5jIChpbnQgaWQpIHsKIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7CiAKLQlpZighKHNocCA9IHNobV9sb2NrKGlkKSkpCi0JCUJVRygpOworCXNocCA9IHNobV9sb2NrKGlkKTsKKwlCVUdfT04oIXNocCk7CiAJc2hwLT5zaG1fYXRpbSA9IGdldF9zZWNvbmRzKCk7CiAJc2hwLT5zaG1fbHByaWQgPSBjdXJyZW50LT50Z2lkOwogCXNocC0+c2htX25hdHRjaCsrOwpAQCAtMTQyLDggKzE0NCw4IEBACiAKIAltdXRleF9sb2NrKCZzaG1faWRzLm11dGV4KTsKIAkvKiByZW1vdmUgZnJvbSB0aGUgbGlzdCBvZiBhdHRhY2hlcyBvZiB0aGUgc2htIHNlZ21lbnQgKi8KLQlpZighKHNocCA9IHNobV9sb2NrKGlkKSkpCi0JCUJVRygpOworCXNocCA9IHNobV9sb2NrKGlkKTsKKwlCVUdfT04oIXNocCk7CiAJc2hwLT5zaG1fbHByaWQgPSBjdXJyZW50LT50Z2lkOwogCXNocC0+c2htX2R0aW0gPSBnZXRfc2Vjb25kcygpOwogCXNocC0+c2htX25hdHRjaC0tOwpAQCAtMTYyLDYgKzE2NCw4IEBACiAJcmV0ID0gc2htZW1fbW1hcChmaWxlLCB2bWEpOwogCWlmIChyZXQgPT0gMCkgewogCQl2bWEtPnZtX29wcyA9ICZzaG1fdm1fb3BzOworCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQorCQkJdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CiAJCXNobV9pbmMoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKIAl9CiAKQEAgLTI4Myw4ICsyODcsNyBAQAogCQllcnIgPSAtRUVYSVNUOwogCX0gZWxzZSB7CiAJCXNocCA9IHNobV9sb2NrKGlkKTsKLQkJaWYoc2hwPT1OVUxMKQotCQkJQlVHKCk7CisJCUJVR19PTihzaHA9PU5VTEwpOwogCQlpZiAoc2hwLT5zaG1fc2Vnc3ogPCBzaXplKQogCQkJZXJyID0gLUVJTlZBTDsKIAkJZWxzZSBpZiAoaXBjcGVybXMoJnNocC0+c2htX3Blcm0sIHNobWZsZykpCkBAIC01NDEsNiArNTQ0LDEwIEBACiAJCWlmKGVycikKIAkJCWdvdG8gb3V0X3VubG9jazsKIAorCQllcnIgPSBhdWRpdF9pcGNfb2JqKCYoc2hwLT5zaG1fcGVybSkpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfdW5sb2NrOworCiAJCWlmICghY2FwYWJsZShDQVBfSVBDX0xPQ0spKSB7CiAJCQllcnIgPSAtRVBFUk07CiAJCQlpZiAoY3VycmVudC0+ZXVpZCAhPSBzaHAtPnNobV9wZXJtLnVpZCAmJgpAQCAtNTkzLDYgKzYwMCwxMCBAQAogCQlpZihlcnIpCiAJCQlnb3RvIG91dF91bmxvY2tfdXA7CiAKKwkJZXJyID0gYXVkaXRfaXBjX29iaigmKHNocC0+c2htX3Blcm0pKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3VubG9ja191cDsKKwogCQlpZiAoY3VycmVudC0+ZXVpZCAhPSBzaHAtPnNobV9wZXJtLnVpZCAmJgogCQkgICAgY3VycmVudC0+ZXVpZCAhPSBzaHAtPnNobV9wZXJtLmN1aWQgJiYgCiAJCSAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewpAQCAtNjI2LDEyICs2MzcsMTUgQEAKIAkJZXJyPS1FSU5WQUw7CiAJCWlmKHNocD09TlVMTCkKIAkJCWdvdG8gb3V0X3VwOwotCQlpZiAoKGVyciA9IGF1ZGl0X2lwY19wZXJtcygwLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLAotCQkJCQlzZXRidWYubW9kZSwgJihzaHAtPnNobV9wZXJtKSkpKQotCQkJZ290byBvdXRfdW5sb2NrX3VwOwogCQllcnIgPSBzaG1fY2hlY2tpZChzaHAsc2htaWQpOwogCQlpZihlcnIpCiAJCQlnb3RvIG91dF91bmxvY2tfdXA7CisJCWVyciA9IGF1ZGl0X2lwY19vYmooJihzaHAtPnNobV9wZXJtKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF91bmxvY2tfdXA7CisJCWVyciA9IGF1ZGl0X2lwY19zZXRfcGVybSgwLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSwgJihzaHAtPnNobV9wZXJtKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF91bmxvY2tfdXA7CiAJCWVycj0tRVBFUk07CiAJCWlmIChjdXJyZW50LT5ldWlkICE9IHNocC0+c2htX3Blcm0udWlkICYmCiAJCSAgICBjdXJyZW50LT5ldWlkICE9IHNocC0+c2htX3Blcm0uY3VpZCAmJiAKQEAgLTc3NCw4ICs3ODgsOCBAQAogCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCiAJbXV0ZXhfbG9jaygmc2htX2lkcy5tdXRleCk7Ci0JaWYoIShzaHAgPSBzaG1fbG9jayhzaG1pZCkpKQotCQlCVUcoKTsKKwlzaHAgPSBzaG1fbG9jayhzaG1pZCk7CisJQlVHX09OKCFzaHApOwogCXNocC0+c2htX25hdHRjaC0tOwogCWlmKHNocC0+c2htX25hdHRjaCA9PSAwICYmCiAJICAgc2hwLT5zaG1fcGVybS5tb2RlICYgU0hNX0RFU1QpCmRpZmYgLS1naXQgYS9pcGMvdXRpbC5jIGIvaXBjL3V0aWwuYwppbmRleCAyMzE1MWVmLi44MTkzMjk5IDEwMDY0NAotLS0gYS9pcGMvdXRpbC5jCisrKyBiL2lwYy91dGlsLmMKQEAgLTEwLDYgKzEwLDggQEAKICAqCSAgICAgIE1hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+CiAgKiBPY3QgMjAwMiAtIE9uZSBsb2NrIHBlciBJUEMgaWQuIFJDVSBpcGNfZnJlZSBmb3IgbG9jay1mcmVlIGdyb3dfYXJ5KCkuCiAgKiAgICAgICAgICAgIE1pbmdtaW5nIENhbyA8Y21tQHVzLmlibS5jb20+CisgKiBNYXIgMjAwNiAtIHN1cHBvcnQgZm9yIGF1ZGl0IG9mIGlwYyBvYmplY3QgcHJvcGVydGllcworICogICAgICAgICAgICBEdXN0aW4gS2lya2xhbmQgPGR1c3Rpbi5raXJrbGFuZEB1cy5pYm0uY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTI3LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogCiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCkBAIC0xODMsOCArMTg2LDcgQEAKIAlpZihuZXcgPT0gTlVMTCkKIAkJcmV0dXJuIHNpemU7CiAJbmV3LT5zaXplID0gbmV3c2l6ZTsKLQltZW1jcHkobmV3LT5wLCBpZHMtPmVudHJpZXMtPnAsIHNpemVvZihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqKSpzaXplICsKLQkJCQkJc2l6ZW9mKHN0cnVjdCBpcGNfaWRfYXJ5KSk7CisJbWVtY3B5KG5ldy0+cCwgaWRzLT5lbnRyaWVzLT5wLCBzaXplb2Yoc3RydWN0IGtlcm5faXBjX3Blcm0gKikqc2l6ZSk7CiAJZm9yKGk9c2l6ZTtpPG5ld3NpemU7aSsrKSB7CiAJCW5ldy0+cFtpXSA9IE5VTEw7CiAJfQpAQCAtMjY2LDggKzI2OCw3IEBACiB7CiAJc3RydWN0IGtlcm5faXBjX3Blcm0qIHA7CiAJaW50IGxpZCA9IGlkICUgU0VRX01VTFRJUExJRVI7Ci0JaWYobGlkID49IGlkcy0+ZW50cmllcy0+c2l6ZSkKLQkJQlVHKCk7CisJQlVHX09OKGxpZCA+PSBpZHMtPmVudHJpZXMtPnNpemUpOwogCiAJLyogCiAJICogZG8gbm90IG5lZWQgYSByY3VfZGVyZWZlcmVuY2UoKSgpIGhlcmUgdG8gZm9yY2Ugb3JkZXJpbmcKQEAgLTI3NSw4ICsyNzYsNyBAQAogCSAqLwkKIAlwID0gaWRzLT5lbnRyaWVzLT5wW2xpZF07CiAJaWRzLT5lbnRyaWVzLT5wW2xpZF0gPSBOVUxMOwotCWlmKHA9PU5VTEwpCi0JCUJVRygpOworCUJVR19PTihwPT1OVUxMKTsKIAlpZHMtPmluX3VzZS0tOwogCiAJaWYgKGxpZCA9PSBpZHMtPm1heF9pZCkgewpAQCAtNDY3LDggKzQ2NywxMCBAQAogIAogaW50IGlwY3Blcm1zIChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgc2hvcnQgZmxhZykKIHsJLyogZmxhZyB3aWxsIG1vc3QgcHJvYmFibHkgYmUgMCBvciBTXy4uLlVHTyBmcm9tIDxsaW51eC9zdGF0Lmg+ICovCi0JaW50IHJlcXVlc3RlZF9tb2RlLCBncmFudGVkX21vZGU7CisJaW50IHJlcXVlc3RlZF9tb2RlLCBncmFudGVkX21vZGUsIGVycjsKIAorCWlmICh1bmxpa2VseSgoZXJyID0gYXVkaXRfaXBjX29iaihpcGNwKSkpKQorCQlyZXR1cm4gZXJyOwogCXJlcXVlc3RlZF9tb2RlID0gKGZsYWcgPj4gNikgfCAoZmxhZyA+PiAzKSB8IGZsYWc7CiAJZ3JhbnRlZF9tb2RlID0gaXBjcC0+bW9kZTsKIAlpZiAoY3VycmVudC0+ZXVpZCA9PSBpcGNwLT5jdWlkIHx8IGN1cnJlbnQtPmV1aWQgPT0gaXBjcC0+dWlkKQpkaWZmIC0tZ2l0IGEva2VybmVsL2FjY3QuYyBiL2tlcm5lbC9hY2N0LmMKaW5kZXggMDY1ZDhiNC4uYjMyN2Y0ZCAxMDA2NDQKLS0tIGEva2VybmVsL2FjY3QuYworKysgYi9rZXJuZWwvYWNjdC5jCkBAIC00NDksOCArNDQ5LDggQEAKIAkvKiBjYWxjdWxhdGUgcnVuX3RpbWUgaW4gbnNlYyovCiAJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7CiAJcnVuX3RpbWUgPSAodTY0KXVwdGltZS50dl9zZWMqTlNFQ19QRVJfU0VDICsgdXB0aW1lLnR2X25zZWM7Ci0JcnVuX3RpbWUgLT0gKHU2NCljdXJyZW50LT5zdGFydF90aW1lLnR2X3NlYypOU0VDX1BFUl9TRUMKLQkJCQkJKyBjdXJyZW50LT5zdGFydF90aW1lLnR2X25zZWM7CisJcnVuX3RpbWUgLT0gKHU2NCljdXJyZW50LT5ncm91cF9sZWFkZXItPnN0YXJ0X3RpbWUudHZfc2VjICogTlNFQ19QRVJfU0VDCisJCSAgICAgICArIGN1cnJlbnQtPmdyb3VwX2xlYWRlci0+c3RhcnRfdGltZS50dl9uc2VjOwogCS8qIGNvbnZlcnQgbnNlYyAtPiBBSFogKi8KIAllbGFwc2VkID0gbnNlY190b19BSFoocnVuX3RpbWUpOwogI2lmIEFDQ1RfVkVSU0lPTj09MwpAQCAtNDY5LDEwICs0NjksMTAgQEAKICNlbmRpZgogCWRvX2RpdihlbGFwc2VkLCBBSFopOwogCWFjLmFjX2J0aW1lID0geHRpbWUudHZfc2VjIC0gZWxhcHNlZDsKLQlqaWZmaWVzID0gY3B1dGltZV90b19qaWZmaWVzKGNwdXRpbWVfYWRkKGN1cnJlbnQtPmdyb3VwX2xlYWRlci0+dXRpbWUsCisJamlmZmllcyA9IGNwdXRpbWVfdG9famlmZmllcyhjcHV0aW1lX2FkZChjdXJyZW50LT51dGltZSwKIAkJCQkJCSBjdXJyZW50LT5zaWduYWwtPnV0aW1lKSk7CiAJYWMuYWNfdXRpbWUgPSBlbmNvZGVfY29tcF90KGppZmZpZXNfdG9fQUhaKGppZmZpZXMpKTsKLQlqaWZmaWVzID0gY3B1dGltZV90b19qaWZmaWVzKGNwdXRpbWVfYWRkKGN1cnJlbnQtPmdyb3VwX2xlYWRlci0+c3RpbWUsCisJamlmZmllcyA9IGNwdXRpbWVfdG9famlmZmllcyhjcHV0aW1lX2FkZChjdXJyZW50LT5zdGltZSwKIAkJCQkJCSBjdXJyZW50LT5zaWduYWwtPnN0aW1lKSk7CiAJYWMuYWNfc3RpbWUgPSBlbmNvZGVfY29tcF90KGppZmZpZXNfdG9fQUhaKGppZmZpZXMpKTsKIAkvKiB3ZSByZWFsbHkgbmVlZCB0byBiaXRlIHRoZSBidWxsZXQgYW5kIGNoYW5nZSBsYXlvdXQgKi8KQEAgLTUyMiw5ICs1MjIsOSBAQAogCWFjLmFjX2lvID0gZW5jb2RlX2NvbXBfdCgwIC8qIGN1cnJlbnQtPmlvX3VzYWdlICovKTsJLyogJSUgKi8KIAlhYy5hY19ydyA9IGVuY29kZV9jb21wX3QoYWMuYWNfaW8gLyAxMDI0KTsKIAlhYy5hY19taW5mbHQgPSBlbmNvZGVfY29tcF90KGN1cnJlbnQtPnNpZ25hbC0+bWluX2ZsdCArCi0JCQkJICAgICBjdXJyZW50LT5ncm91cF9sZWFkZXItPm1pbl9mbHQpOworCQkJCSAgICAgY3VycmVudC0+bWluX2ZsdCk7CiAJYWMuYWNfbWFqZmx0ID0gZW5jb2RlX2NvbXBfdChjdXJyZW50LT5zaWduYWwtPm1hal9mbHQgKwotCQkJCSAgICAgY3VycmVudC0+Z3JvdXBfbGVhZGVyLT5tYWpfZmx0KTsKKwkJCQkgICAgIGN1cnJlbnQtPm1hal9mbHQpOwogCWFjLmFjX3N3YXBzID0gZW5jb2RlX2NvbXBfdCgwKTsKIAlhYy5hY19leGl0Y29kZSA9IGV4aXRjb2RlOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXQuYyBiL2tlcm5lbC9hdWRpdC5jCmluZGV4IDA0ZmUyZTMuLmRmNTdiNDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5jCisrKyBiL2tlcm5lbC9hdWRpdC5jCkBAIC01NSw2ICs1NSw5IEBACiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgorCisjaW5jbHVkZSAiYXVkaXQuaCIKIAogLyogTm8gYXVkaXRpbmcgd2lsbCB0YWtlIHBsYWNlIHVudGlsIGF1ZGl0X2luaXRpYWxpemVkICE9IDAuCiAgKiAoSW5pdGlhbGl6YXRpb24gaGFwcGVucyBhZnRlciBza2JfaW5pdCBpcyBjYWxsZWQuKSAqLwpAQCAtMjI3LDQ5ICsyMzAsMTAzIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGF1ZGl0X3NldF9yYXRlX2xpbWl0KGludCBsaW1pdCwgdWlkX3QgbG9naW51aWQpCitzdGF0aWMgaW50IGF1ZGl0X3NldF9yYXRlX2xpbWl0KGludCBsaW1pdCwgdWlkX3QgbG9naW51aWQsIHUzMiBzaWQpCiB7Ci0JaW50IG9sZAkJID0gYXVkaXRfcmF0ZV9saW1pdDsKLQlhdWRpdF9yYXRlX2xpbWl0ID0gbGltaXQ7Ci0JYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsIAorCWludCBvbGQJPSBhdWRpdF9yYXRlX2xpbWl0OworCisJaWYgKHNpZCkgeworCQljaGFyICpjdHggPSBOVUxMOworCQl1MzIgbGVuOworCQlpbnQgcmM7CisJCWlmICgocmMgPSBzZWxpbnV4X2N0eGlkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKSkKKwkJCXJldHVybiByYzsKKwkJZWxzZQorCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCQkJImF1ZGl0X3JhdGVfbGltaXQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUgc3Viaj0lcyIsCisJCQkJbGltaXQsIG9sZCwgbG9naW51aWQsIGN0eCk7CisJCWtmcmVlKGN0eCk7CisJfSBlbHNlCisJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAogCQkJImF1ZGl0X3JhdGVfbGltaXQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAotCQkJYXVkaXRfcmF0ZV9saW1pdCwgb2xkLCBsb2dpbnVpZCk7CisJCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCk7CisJYXVkaXRfcmF0ZV9saW1pdCA9IGxpbWl0OwogCXJldHVybiBvbGQ7CiB9CiAKLXN0YXRpYyBpbnQgYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCkKK3N0YXRpYyBpbnQgYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKIHsKLQlpbnQgb2xkCQkgPSBhdWRpdF9iYWNrbG9nX2xpbWl0OwotCWF1ZGl0X2JhY2tsb2dfbGltaXQgPSBsaW1pdDsKLQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwlpbnQgb2xkCT0gYXVkaXRfYmFja2xvZ19saW1pdDsKKworCWlmIChzaWQpIHsKKwkJY2hhciAqY3R4ID0gTlVMTDsKKwkJdTMyIGxlbjsKKwkJaW50IHJjOworCQlpZiAoKHJjID0gc2VsaW51eF9jdHhpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkpCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJICAgICJhdWRpdF9iYWNrbG9nX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IHN1Ymo9JXMiLAorCQkJCWxpbWl0LCBvbGQsIGxvZ2ludWlkLCBjdHgpOworCQlrZnJlZShjdHgpOworCX0gZWxzZQorCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKIAkJCSJhdWRpdF9iYWNrbG9nX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKLQkJCWF1ZGl0X2JhY2tsb2dfbGltaXQsIG9sZCwgbG9naW51aWQpOworCQkJbGltaXQsIG9sZCwgbG9naW51aWQpOworCWF1ZGl0X2JhY2tsb2dfbGltaXQgPSBsaW1pdDsKIAlyZXR1cm4gb2xkOwogfQogCi1zdGF0aWMgaW50IGF1ZGl0X3NldF9lbmFibGVkKGludCBzdGF0ZSwgdWlkX3QgbG9naW51aWQpCitzdGF0aWMgaW50IGF1ZGl0X3NldF9lbmFibGVkKGludCBzdGF0ZSwgdWlkX3QgbG9naW51aWQsIHUzMiBzaWQpCiB7Ci0JaW50IG9sZAkJID0gYXVkaXRfZW5hYmxlZDsKKwlpbnQgb2xkID0gYXVkaXRfZW5hYmxlZDsKKwogCWlmIChzdGF0ZSAhPSAwICYmIHN0YXRlICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwotCWF1ZGl0X2VuYWJsZWQgPSBzdGF0ZTsKLQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKworCWlmIChzaWQpIHsKKwkJY2hhciAqY3R4ID0gTlVMTDsKKwkJdTMyIGxlbjsKKwkJaW50IHJjOworCQlpZiAoKHJjID0gc2VsaW51eF9jdHhpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkpCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCSJhdWRpdF9lbmFibGVkPSVkIG9sZD0lZCBieSBhdWlkPSV1IHN1Ymo9JXMiLAorCQkJCXN0YXRlLCBvbGQsIGxvZ2ludWlkLCBjdHgpOworCQlrZnJlZShjdHgpOworCX0gZWxzZQorCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKIAkJCSJhdWRpdF9lbmFibGVkPSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKLQkJCWF1ZGl0X2VuYWJsZWQsIG9sZCwgbG9naW51aWQpOworCQkJc3RhdGUsIG9sZCwgbG9naW51aWQpOworCWF1ZGl0X2VuYWJsZWQgPSBzdGF0ZTsKIAlyZXR1cm4gb2xkOwogfQogCi1zdGF0aWMgaW50IGF1ZGl0X3NldF9mYWlsdXJlKGludCBzdGF0ZSwgdWlkX3QgbG9naW51aWQpCitzdGF0aWMgaW50IGF1ZGl0X3NldF9mYWlsdXJlKGludCBzdGF0ZSwgdWlkX3QgbG9naW51aWQsIHUzMiBzaWQpCiB7Ci0JaW50IG9sZAkJID0gYXVkaXRfZmFpbHVyZTsKKwlpbnQgb2xkID0gYXVkaXRfZmFpbHVyZTsKKwogCWlmIChzdGF0ZSAhPSBBVURJVF9GQUlMX1NJTEVOVAogCSAgICAmJiBzdGF0ZSAhPSBBVURJVF9GQUlMX1BSSU5USwogCSAgICAmJiBzdGF0ZSAhPSBBVURJVF9GQUlMX1BBTklDKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlhdWRpdF9mYWlsdXJlID0gc3RhdGU7Ci0JYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisKKwlpZiAoc2lkKSB7CisJCWNoYXIgKmN0eCA9IE5VTEw7CisJCXUzMiBsZW47CisJCWludCByYzsKKwkJaWYgKChyYyA9IHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbikpKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkiYXVkaXRfZmFpbHVyZT0lZCBvbGQ9JWQgYnkgYXVpZD0ldSBzdWJqPSVzIiwKKwkJCQlzdGF0ZSwgb2xkLCBsb2dpbnVpZCwgY3R4KTsKKwkJa2ZyZWUoY3R4KTsKKwl9IGVsc2UKKwkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCiAJCQkiYXVkaXRfZmFpbHVyZT0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCi0JCQlhdWRpdF9mYWlsdXJlLCBvbGQsIGxvZ2ludWlkKTsKKwkJCXN0YXRlLCBvbGQsIGxvZ2ludWlkKTsKKwlhdWRpdF9mYWlsdXJlID0gc3RhdGU7CiAJcmV0dXJuIG9sZDsKIH0KIApAQCAtMzg3LDcgKzQ0NCw3IEBACiAKIHN0YXRpYyBpbnQgYXVkaXRfcmVjZWl2ZV9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgpCiB7Ci0JdTMyCQkJdWlkLCBwaWQsIHNlcTsKKwl1MzIJCQl1aWQsIHBpZCwgc2VxLCBzaWQ7CiAJdm9pZAkJCSpkYXRhOwogCXN0cnVjdCBhdWRpdF9zdGF0dXMJKnN0YXR1c19nZXQsIHN0YXR1c19zZXQ7CiAJaW50CQkJZXJyOwpAQCAtNDEzLDYgKzQ3MCw3IEBACiAJcGlkICA9IE5FVExJTktfQ1JFRFMoc2tiKS0+cGlkOwogCXVpZCAgPSBORVRMSU5LX0NSRURTKHNrYiktPnVpZDsKIAlsb2dpbnVpZCA9IE5FVExJTktfQ0Ioc2tiKS5sb2dpbnVpZDsKKwlzaWQgID0gTkVUTElOS19DQihza2IpLnNpZDsKIAlzZXEgID0gbmxoLT5ubG1zZ19zZXE7CiAJZGF0YSA9IE5MTVNHX0RBVEEobmxoKTsKIApAQCAtNDMzLDI1ICs0OTEsNDMgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlzdGF0dXNfZ2V0ICAgPSAoc3RydWN0IGF1ZGl0X3N0YXR1cyAqKWRhdGE7CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX0VOQUJMRUQpIHsKLQkJCWVyciA9IGF1ZGl0X3NldF9lbmFibGVkKHN0YXR1c19nZXQtPmVuYWJsZWQsIGxvZ2ludWlkKTsKKwkJCWVyciA9IGF1ZGl0X3NldF9lbmFibGVkKHN0YXR1c19nZXQtPmVuYWJsZWQsCisJCQkJCQkJbG9naW51aWQsIHNpZCk7CiAJCQlpZiAoZXJyIDwgMCkgcmV0dXJuIGVycjsKIAkJfQogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19GQUlMVVJFKSB7Ci0JCQllcnIgPSBhdWRpdF9zZXRfZmFpbHVyZShzdGF0dXNfZ2V0LT5mYWlsdXJlLCBsb2dpbnVpZCk7CisJCQllcnIgPSBhdWRpdF9zZXRfZmFpbHVyZShzdGF0dXNfZ2V0LT5mYWlsdXJlLAorCQkJCQkJCSBsb2dpbnVpZCwgc2lkKTsKIAkJCWlmIChlcnIgPCAwKSByZXR1cm4gZXJyOwogCQl9CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX1BJRCkgewogCQkJaW50IG9sZCAgID0gYXVkaXRfcGlkOworCQkJaWYgKHNpZCkgeworCQkJCWNoYXIgKmN0eCA9IE5VTEw7CisJCQkJdTMyIGxlbjsKKwkJCQlpbnQgcmM7CisJCQkJaWYgKChyYyA9IHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKAorCQkJCQkJc2lkLCAmY3R4LCAmbGVuKSkpCisJCQkJCXJldHVybiByYzsKKwkJCQllbHNlCisJCQkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLAorCQkJCQkJQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkJCSJhdWRpdF9waWQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUgc3Viaj0lcyIsCisJCQkJCQlzdGF0dXNfZ2V0LT5waWQsIG9sZCwKKwkJCQkJCWxvZ2ludWlkLCBjdHgpOworCQkJCWtmcmVlKGN0eCk7CisJCQl9IGVsc2UKKwkJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkJImF1ZGl0X3BpZD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCisJCQkJCSAgc3RhdHVzX2dldC0+cGlkLCBvbGQsIGxvZ2ludWlkKTsKIAkJCWF1ZGl0X3BpZCA9IHN0YXR1c19nZXQtPnBpZDsKLQkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAotCQkJCSJhdWRpdF9waWQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAotCQkJCSAgYXVkaXRfcGlkLCBvbGQsIGxvZ2ludWlkKTsKIAkJfQogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19SQVRFX0xJTUlUKQotCQkJYXVkaXRfc2V0X3JhdGVfbGltaXQoc3RhdHVzX2dldC0+cmF0ZV9saW1pdCwgbG9naW51aWQpOworCQkJYXVkaXRfc2V0X3JhdGVfbGltaXQoc3RhdHVzX2dldC0+cmF0ZV9saW1pdCwKKwkJCQkJCQkgbG9naW51aWQsIHNpZCk7CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX0JBQ0tMT0dfTElNSVQpCiAJCQlhdWRpdF9zZXRfYmFja2xvZ19saW1pdChzdGF0dXNfZ2V0LT5iYWNrbG9nX2xpbWl0LAotCQkJCQkJCWxvZ2ludWlkKTsKKwkJCQkJCQlsb2dpbnVpZCwgc2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9VU0VSOgogCWNhc2UgQVVESVRfRklSU1RfVVNFUl9NU0cuLi5BVURJVF9MQVNUX1VTRVJfTVNHOgpAQCAtNDY1LDggKzU0MSwyMyBAQAogCQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgbXNnX3R5cGUpOwogCQkJaWYgKGFiKSB7CiAJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKLQkJCQkJCSAidXNlciBwaWQ9JWQgdWlkPSV1IGF1aWQ9JXUgbXNnPSclLjEwMjRzJyIsCi0JCQkJCQkgcGlkLCB1aWQsIGxvZ2ludWlkLCAoY2hhciAqKWRhdGEpOworCQkJCQkJICJ1c2VyIHBpZD0lZCB1aWQ9JXUgYXVpZD0ldSIsCisJCQkJCQkgcGlkLCB1aWQsIGxvZ2ludWlkKTsKKwkJCQlpZiAoc2lkKSB7CisJCQkJCWNoYXIgKmN0eCA9IE5VTEw7CisJCQkJCXUzMiBsZW47CisJCQkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZygKKwkJCQkJCQlzaWQsICZjdHgsICZsZW4pKSB7CisJCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAKKwkJCQkJCQkiIHNzaWQ9JXUiLCBzaWQpOworCQkJCQkJLyogTWF5YmUgY2FsbCBhdWRpdF9wYW5pYz8gKi8KKwkJCQkJfSBlbHNlCisJCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAKKwkJCQkJCQkiIHN1Ymo9JXMiLCBjdHgpOworCQkJCQlrZnJlZShjdHgpOworCQkJCX0KKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG1zZz0nJS4xMDI0cyciLAorCQkJCQkgKGNoYXIgKilkYXRhKTsKIAkJCQlhdWRpdF9zZXRfcGlkKGFiLCBwaWQpOwogCQkJCWF1ZGl0X2xvZ19lbmQoYWIpOwogCQkJfQpAQCAtNDgwLDcgKzU3MSw3IEBACiAJY2FzZSBBVURJVF9MSVNUOgogCQllcnIgPSBhdWRpdF9yZWNlaXZlX2ZpbHRlcihubGgtPm5sbXNnX3R5cGUsIE5FVExJTktfQ0Ioc2tiKS5waWQsCiAJCQkJCSAgIHVpZCwgc2VxLCBkYXRhLCBubG1zZ19sZW4obmxoKSwKLQkJCQkJICAgbG9naW51aWQpOworCQkJCQkgICBsb2dpbnVpZCwgc2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9BRERfUlVMRToKIAljYXNlIEFVRElUX0RFTF9SVUxFOgpAQCAtNDkwLDcgKzU4MSw3IEBACiAJY2FzZSBBVURJVF9MSVNUX1JVTEVTOgogCQllcnIgPSBhdWRpdF9yZWNlaXZlX2ZpbHRlcihubGgtPm5sbXNnX3R5cGUsIE5FVExJTktfQ0Ioc2tiKS5waWQsCiAJCQkJCSAgIHVpZCwgc2VxLCBkYXRhLCBubG1zZ19sZW4obmxoKSwKLQkJCQkJICAgbG9naW51aWQpOworCQkJCQkgICBsb2dpbnVpZCwgc2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9TSUdOQUxfSU5GTzoKIAkJc2lnX2RhdGEudWlkID0gYXVkaXRfc2lnX3VpZDsKQEAgLTU2NCw2ICs2NTUsMTEgQEAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZhdWRpdF9za2JfcXVldWUpOwogCWF1ZGl0X2luaXRpYWxpemVkID0gMTsKIAlhdWRpdF9lbmFibGVkID0gYXVkaXRfZGVmYXVsdDsKKworCS8qIFJlZ2lzdGVyIHRoZSBjYWxsYmFjayB3aXRoIHNlbGludXguICBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZAorCSAqIHdoZW4gYSBuZXcgcG9saWN5IGlzIGxvYWRlZC4gKi8KKwlzZWxpbnV4X2F1ZGl0X3NldF9jYWxsYmFjaygmc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSk7CisKIAlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfS0VSTkVMLCAiaW5pdGlhbGl6ZWQiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU3OCw3ICs2NzQsNyBAQAogCSAgICAgICBhdWRpdF9pbml0aWFsaXplZCA/ICIiIDogIiAoYWZ0ZXIgaW5pdGlhbGl6YXRpb24pIik7CiAJaWYgKGF1ZGl0X2luaXRpYWxpemVkKQogCQlhdWRpdF9lbmFibGVkID0gYXVkaXRfZGVmYXVsdDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgiYXVkaXQ9IiwgYXVkaXRfZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5oIGIva2VybmVsL2F1ZGl0LmgKaW5kZXggYmM1MzkyMC4uNmY3MzM5MiAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmgKKysrIGIva2VybmVsL2F1ZGl0LmgKQEAgLTU0LDkgKzU0LDExIEBACiAKIC8qIFJ1bGUgbGlzdHMgKi8KIHN0cnVjdCBhdWRpdF9maWVsZCB7Ci0JdTMyCQkJdHlwZTsKLQl1MzIJCQl2YWw7Ci0JdTMyCQkJb3A7CisJdTMyCQkJCXR5cGU7CisJdTMyCQkJCXZhbDsKKwl1MzIJCQkJb3A7CisJY2hhcgkJCQkqc2Vfc3RyOworCXN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUJKnNlX3J1bGU7CiB9OwogCiBzdHJ1Y3QgYXVkaXRfa3J1bGUgewpAQCAtODYsMyArODgsNSBAQAogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2dfbG9zdChjb25zdCBjaGFyICptZXNzYWdlKTsKIGV4dGVybiB2b2lkCQkgICAgYXVkaXRfcGFuaWMoY29uc3QgY2hhciAqbWVzc2FnZSk7CiBleHRlcm4gc3RydWN0IG11dGV4IGF1ZGl0X25ldGxpbmtfbXV0ZXg7CisKK2V4dGVybiBpbnQgc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdGZpbHRlci5jIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKaW5kZXggZDNhODUzOS4uN2MxMzQ5MCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMKKysrIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogI2luY2x1ZGUgImF1ZGl0LmgiCiAKIC8qIFRoZXJlIGFyZSB0aHJlZSBsaXN0cyBvZiBydWxlcyAtLSBvbmUgdG8gc2VhcmNoIGF0IHRhc2sgY3JlYXRpb24KQEAgLTQyLDYgKzQzLDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9mcmVlX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplKQogeworCWludCBpOworCWlmIChlLT5ydWxlLmZpZWxkcykKKwkJZm9yIChpID0gMDsgaSA8IGUtPnJ1bGUuZmllbGRfY291bnQ7IGkrKykgeworCQkJc3RydWN0IGF1ZGl0X2ZpZWxkICpmID0gJmUtPnJ1bGUuZmllbGRzW2ldOworCQkJa2ZyZWUoZi0+c2Vfc3RyKTsKKwkJCXNlbGludXhfYXVkaXRfcnVsZV9mcmVlKGYtPnNlX3J1bGUpOworCQl9CiAJa2ZyZWUoZS0+cnVsZS5maWVsZHMpOwogCWtmcmVlKGUpOwogfQpAQCAtNTIsOSArNjAsMjkgQEAKIAlhdWRpdF9mcmVlX3J1bGUoZSk7CiB9CiAKKy8qIEluaXRpYWxpemUgYW4gYXVkaXQgZmlsdGVybGlzdCBlbnRyeS4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9pbml0X2VudHJ5KHUzMiBmaWVsZF9jb3VudCkKK3sKKwlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OworCXN0cnVjdCBhdWRpdF9maWVsZCAqZmllbGRzOworCisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWVudHJ5KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmaWVsZHMgPSBremFsbG9jKHNpemVvZigqZmllbGRzKSAqIGZpZWxkX2NvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWZpZWxkcykpIHsKKwkJa2ZyZWUoZW50cnkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZW50cnktPnJ1bGUuZmllbGRzID0gZmllbGRzOworCisJcmV0dXJuIGVudHJ5OworfQorCiAvKiBVbnBhY2sgYSBmaWx0ZXIgZmllbGQncyBzdHJpbmcgcmVwcmVzZW50YXRpb24gZnJvbSB1c2VyLXNwYWNlCiAgKiBidWZmZXIuICovCi1zdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgY2hhciAqYXVkaXRfdW5wYWNrX3N0cmluZyh2b2lkICoqYnVmcCwgc2l6ZV90ICpyZW1haW4sIHNpemVfdCBsZW4pCitzdGF0aWMgY2hhciAqYXVkaXRfdW5wYWNrX3N0cmluZyh2b2lkICoqYnVmcCwgc2l6ZV90ICpyZW1haW4sIHNpemVfdCBsZW4pCiB7CiAJY2hhciAqc3RyOwogCkBAIC04NCw3ICsxMTIsNiBAQAogewogCXVuc2lnbmVkIGxpc3RucjsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBhdWRpdF9maWVsZCAqZmllbGRzOwogCWludCBpLCBlcnI7CiAKIAllcnIgPSAtRUlOVkFMOwpAQCAtMTA4LDIzICsxMzUsMTQgQEAKIAkJZ290byBleGl0X2VycjsKIAogCWVyciA9IC1FTk9NRU07Ci0JZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoIWVudHJ5KSkKKwllbnRyeSA9IGF1ZGl0X2luaXRfZW50cnkocnVsZS0+ZmllbGRfY291bnQpOworCWlmICghZW50cnkpCiAJCWdvdG8gZXhpdF9lcnI7Ci0JZmllbGRzID0ga21hbGxvYyhzaXplb2YoKmZpZWxkcykgKiBydWxlLT5maWVsZF9jb3VudCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KCFmaWVsZHMpKSB7Ci0JCWtmcmVlKGVudHJ5KTsKLQkJZ290byBleGl0X2VycjsKLQl9Ci0KLQltZW1zZXQoJmVudHJ5LT5ydWxlLCAwLCBzaXplb2Yoc3RydWN0IGF1ZGl0X2tydWxlKSk7Ci0JbWVtc2V0KGZpZWxkcywgMCwgc2l6ZW9mKHN0cnVjdCBhdWRpdF9maWVsZCkpOwogCiAJZW50cnktPnJ1bGUuZmxhZ3MgPSBydWxlLT5mbGFncyAmIEFVRElUX0ZJTFRFUl9QUkVQRU5EOwogCWVudHJ5LT5ydWxlLmxpc3RuciA9IGxpc3RucjsKIAllbnRyeS0+cnVsZS5hY3Rpb24gPSBydWxlLT5hY3Rpb247CiAJZW50cnktPnJ1bGUuZmllbGRfY291bnQgPSBydWxlLT5maWVsZF9jb3VudDsKLQllbnRyeS0+cnVsZS5maWVsZHMgPSBmaWVsZHM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVESVRfQklUTUFTS19TSVpFOyBpKyspCiAJCWVudHJ5LT5ydWxlLm1hc2tbaV0gPSBydWxlLT5tYXNrW2ldOwpAQCAtMTUwLDE1ICsxNjgsMjAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcnVsZS0+ZmllbGRfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmZW50cnktPnJ1bGUuZmllbGRzW2ldOwogCi0JCWlmIChydWxlLT5maWVsZHNbaV0gJiBBVURJVF9VTlVTRURfQklUUykgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gZXhpdF9mcmVlOwotCQl9Ci0KIAkJZi0+b3AgPSBydWxlLT5maWVsZHNbaV0gJiAoQVVESVRfTkVHQVRFfEFVRElUX09QRVJBVE9SUyk7CiAJCWYtPnR5cGUgPSBydWxlLT5maWVsZHNbaV0gJiB+KEFVRElUX05FR0FURXxBVURJVF9PUEVSQVRPUlMpOwogCQlmLT52YWwgPSBydWxlLT52YWx1ZXNbaV07CiAKKwkJaWYgKGYtPnR5cGUgJiBBVURJVF9VTlVTRURfQklUUyB8fAorCQkgICAgZi0+dHlwZSA9PSBBVURJVF9TRV9VU0VSIHx8CisJCSAgICBmLT50eXBlID09IEFVRElUX1NFX1JPTEUgfHwKKwkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfVFlQRSB8fAorCQkgICAgZi0+dHlwZSA9PSBBVURJVF9TRV9TRU4gfHwKKwkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfQ0xSKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBleGl0X2ZyZWU7CisJCX0KKwogCQllbnRyeS0+cnVsZS52ZXJzX29wcyA9IChmLT5vcCAmIEFVRElUX09QRVJBVE9SUykgPyAyIDogMTsKIAogCQkvKiBTdXBwb3J0IGZvciBsZWdhY3kgb3BlcmF0b3JzIHdoZXJlCkBAIC0xODgsOCArMjExLDkgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwogCXZvaWQgKmJ1ZnA7Ci0JLyogc2l6ZV90IHJlbWFpbiA9IGRhdGFzeiAtIHNpemVvZihzdHJ1Y3QgYXVkaXRfcnVsZV9kYXRhKTsgKi8KKwlzaXplX3QgcmVtYWluID0gZGF0YXN6IC0gc2l6ZW9mKHN0cnVjdCBhdWRpdF9ydWxlX2RhdGEpOwogCWludCBpOworCWNoYXIgKnN0cjsKIAogCWVudHJ5ID0gYXVkaXRfdG9fZW50cnlfY29tbW9uKChzdHJ1Y3QgYXVkaXRfcnVsZSAqKWRhdGEpOwogCWlmIChJU19FUlIoZW50cnkpKQpAQCAtMjA3LDEwICsyMzEsMzUgQEAKIAogCQlmLT5vcCA9IGRhdGEtPmZpZWxkZmxhZ3NbaV0gJiBBVURJVF9PUEVSQVRPUlM7CiAJCWYtPnR5cGUgPSBkYXRhLT5maWVsZHNbaV07CisJCWYtPnZhbCA9IGRhdGEtPnZhbHVlc1tpXTsKKwkJZi0+c2Vfc3RyID0gTlVMTDsKKwkJZi0+c2VfcnVsZSA9IE5VTEw7CiAJCXN3aXRjaChmLT50eXBlKSB7Ci0JCS8qIGNhbGwgdHlwZS1zcGVjaWZpYyBjb252ZXJzaW9uIHJvdXRpbmVzIGhlcmUgKi8KLQkJZGVmYXVsdDoKLQkJCWYtPnZhbCA9IGRhdGEtPnZhbHVlc1tpXTsKKwkJY2FzZSBBVURJVF9TRV9VU0VSOgorCQljYXNlIEFVRElUX1NFX1JPTEU6CisJCWNhc2UgQVVESVRfU0VfVFlQRToKKwkJY2FzZSBBVURJVF9TRV9TRU46CisJCWNhc2UgQVVESVRfU0VfQ0xSOgorCQkJc3RyID0gYXVkaXRfdW5wYWNrX3N0cmluZygmYnVmcCwgJnJlbWFpbiwgZi0+dmFsKTsKKwkJCWlmIChJU19FUlIoc3RyKSkKKwkJCQlnb3RvIGV4aXRfZnJlZTsKKwkJCWVudHJ5LT5ydWxlLmJ1ZmxlbiArPSBmLT52YWw7CisKKwkJCWVyciA9IHNlbGludXhfYXVkaXRfcnVsZV9pbml0KGYtPnR5cGUsIGYtPm9wLCBzdHIsCisJCQkJCQkgICAgICAmZi0+c2VfcnVsZSk7CisJCQkvKiBLZWVwIGN1cnJlbnRseSBpbnZhbGlkIGZpZWxkcyBhcm91bmQgaW4gY2FzZSB0aGV5CisJCQkgKiBiZWNvbWUgdmFsaWQgYWZ0ZXIgYSBwb2xpY3kgcmVsb2FkLiAqLworCQkJaWYgKGVyciA9PSAtRUlOVkFMKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXVkaXQgcnVsZSBmb3Igc2VsaW51eCAiCisJCQkJICAgICAgICJcJyVzXCcgaXMgaW52YWxpZFxuIiwgIHN0cik7CisJCQkJZXJyID0gMDsKKwkJCX0KKwkJCWlmIChlcnIpIHsKKwkJCQlrZnJlZShzdHIpOworCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJfSBlbHNlCisJCQkJZi0+c2Vfc3RyID0gc3RyOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTI4Niw3ICszMzUsMTQgQEAKIAkJZGF0YS0+ZmllbGRzW2ldID0gZi0+dHlwZTsKIAkJZGF0YS0+ZmllbGRmbGFnc1tpXSA9IGYtPm9wOwogCQlzd2l0Y2goZi0+dHlwZSkgewotCQkvKiBjYWxsIHR5cGUtc3BlY2lmaWMgY29udmVyc2lvbiByb3V0aW5lcyBoZXJlICovCisJCWNhc2UgQVVESVRfU0VfVVNFUjoKKwkJY2FzZSBBVURJVF9TRV9ST0xFOgorCQljYXNlIEFVRElUX1NFX1RZUEU6CisJCWNhc2UgQVVESVRfU0VfU0VOOgorCQljYXNlIEFVRElUX1NFX0NMUjoKKwkJCWRhdGEtPmJ1ZmxlbiArPSBkYXRhLT52YWx1ZXNbaV0gPQorCQkJCWF1ZGl0X3BhY2tfc3RyaW5nKCZidWZwLCBmLT5zZV9zdHIpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkYXRhLT52YWx1ZXNbaV0gPSBmLT52YWw7CiAJCX0KQEAgLTMxNCw3ICszNzAsMTQgQEAKIAkJCXJldHVybiAxOwogCiAJCXN3aXRjaChhLT5maWVsZHNbaV0udHlwZSkgewotCQkvKiBjYWxsIHR5cGUtc3BlY2lmaWMgY29tcGFyaXNvbiByb3V0aW5lcyBoZXJlICovCisJCWNhc2UgQVVESVRfU0VfVVNFUjoKKwkJY2FzZSBBVURJVF9TRV9ST0xFOgorCQljYXNlIEFVRElUX1NFX1RZUEU6CisJCWNhc2UgQVVESVRfU0VfU0VOOgorCQljYXNlIEFVRElUX1NFX0NMUjoKKwkJCWlmIChzdHJjbXAoYS0+ZmllbGRzW2ldLnNlX3N0ciwgYi0+ZmllbGRzW2ldLnNlX3N0cikpCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChhLT5maWVsZHNbaV0udmFsICE9IGItPmZpZWxkc1tpXS52YWwpCiAJCQkJcmV0dXJuIDE7CkBAIC0zMjgsNiArMzkxLDgxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIER1cGxpY2F0ZSBzZWxpbnV4IGZpZWxkIGluZm9ybWF0aW9uLiAgVGhlIHNlX3J1bGUgaXMgb3BhcXVlLCBzbyBtdXN0IGJlCisgKiByZS1pbml0aWFsaXplZC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2R1cGVfc2VsaW51eF9maWVsZChzdHJ1Y3QgYXVkaXRfZmllbGQgKmRmLAorCQkJCQkgICBzdHJ1Y3QgYXVkaXRfZmllbGQgKnNmKQoreworCWludCByZXQgPSAwOworCWNoYXIgKnNlX3N0cjsKKworCS8qIG91ciBvd24gY29weSBvZiBzZV9zdHIgKi8KKwlzZV9zdHIgPSBrc3RyZHVwKHNmLT5zZV9zdHIsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseShJU19FUlIoc2Vfc3RyKSkpCisJICAgIHJldHVybiAtRU5PTUVNOworCWRmLT5zZV9zdHIgPSBzZV9zdHI7CisKKwkvKiBvdXIgb3duIChyZWZyZXNoZWQpIGNvcHkgb2Ygc2VfcnVsZSAqLworCXJldCA9IHNlbGludXhfYXVkaXRfcnVsZV9pbml0KGRmLT50eXBlLCBkZi0+b3AsIGRmLT5zZV9zdHIsCisJCQkJICAgICAgJmRmLT5zZV9ydWxlKTsKKwkvKiBLZWVwIGN1cnJlbnRseSBpbnZhbGlkIGZpZWxkcyBhcm91bmQgaW4gY2FzZSB0aGV5CisJICogYmVjb21lIHZhbGlkIGFmdGVyIGEgcG9saWN5IHJlbG9hZC4gKi8KKwlpZiAocmV0ID09IC1FSU5WQUwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXVkaXQgcnVsZSBmb3Igc2VsaW51eCBcJyVzXCcgaXMgIgorCQkgICAgICAgImludmFsaWRcbiIsIGRmLT5zZV9zdHIpOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIER1cGxpY2F0ZSBhbiBhdWRpdCBydWxlLiAgVGhpcyB3aWxsIGJlIGEgZGVlcCBjb3B5IHdpdGggdGhlIGV4Y2VwdGlvbgorICogb2YgdGhlIHdhdGNoIC0gdGhhdCBwb2ludGVyIGlzIGNhcnJpZWQgb3Zlci4gIFRoZSBzZWxpbnV4IHNwZWNpZmljIGZpZWxkcworICogd2lsbCBiZSB1cGRhdGVkIGluIHRoZSBjb3B5LiAgVGhlIHBvaW50IGlzIHRvIGJlIGFibGUgdG8gcmVwbGFjZSB0aGUgb2xkCisgKiBydWxlIHdpdGggdGhlIG5ldyBydWxlIGluIHRoZSBmaWx0ZXJsaXN0LCB0aGVuIGZyZWUgdGhlIG9sZCBydWxlLiAqLworc3RhdGljIHN0cnVjdCBhdWRpdF9lbnRyeSAqYXVkaXRfZHVwZV9ydWxlKHN0cnVjdCBhdWRpdF9rcnVsZSAqb2xkKQoreworCXUzMiBmY291bnQgPSBvbGQtPmZpZWxkX2NvdW50OworCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGF1ZGl0X2tydWxlICpuZXc7CisJaW50IGksIGVyciA9IDA7CisKKwllbnRyeSA9IGF1ZGl0X2luaXRfZW50cnkoZmNvdW50KTsKKwlpZiAodW5saWtlbHkoIWVudHJ5KSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwluZXcgPSAmZW50cnktPnJ1bGU7CisJbmV3LT52ZXJzX29wcyA9IG9sZC0+dmVyc19vcHM7CisJbmV3LT5mbGFncyA9IG9sZC0+ZmxhZ3M7CisJbmV3LT5saXN0bnIgPSBvbGQtPmxpc3RucjsKKwluZXctPmFjdGlvbiA9IG9sZC0+YWN0aW9uOworCWZvciAoaSA9IDA7IGkgPCBBVURJVF9CSVRNQVNLX1NJWkU7IGkrKykKKwkJbmV3LT5tYXNrW2ldID0gb2xkLT5tYXNrW2ldOworCW5ldy0+YnVmbGVuID0gb2xkLT5idWZsZW47CisJbmV3LT5maWVsZF9jb3VudCA9IG9sZC0+ZmllbGRfY291bnQ7CisJbWVtY3B5KG5ldy0+ZmllbGRzLCBvbGQtPmZpZWxkcywgc2l6ZW9mKHN0cnVjdCBhdWRpdF9maWVsZCkgKiBmY291bnQpOworCisJLyogZGVlcCBjb3B5IHRoaXMgaW5mb3JtYXRpb24sIHVwZGF0aW5nIHRoZSBzZV9ydWxlIGZpZWxkcywgYmVjYXVzZQorCSAqIHRoZSBvcmlnaW5hbHMgd2lsbCBhbGwgYmUgZnJlZWQgd2hlbiB0aGUgb2xkIHJ1bGUgaXMgZnJlZWQuICovCisJZm9yIChpID0gMDsgaSA8IGZjb3VudDsgaSsrKSB7CisJCXN3aXRjaCAobmV3LT5maWVsZHNbaV0udHlwZSkgeworCQljYXNlIEFVRElUX1NFX1VTRVI6CisJCWNhc2UgQVVESVRfU0VfUk9MRToKKwkJY2FzZSBBVURJVF9TRV9UWVBFOgorCQljYXNlIEFVRElUX1NFX1NFTjoKKwkJY2FzZSBBVURJVF9TRV9DTFI6CisJCQllcnIgPSBhdWRpdF9kdXBlX3NlbGludXhfZmllbGQoJm5ldy0+ZmllbGRzW2ldLAorCQkJCQkJICAgICAgICZvbGQtPmZpZWxkc1tpXSk7CisJCX0KKwkJaWYgKGVycikgeworCQkJYXVkaXRfZnJlZV9ydWxlKGVudHJ5KTsKKwkJCXJldHVybiBFUlJfUFRSKGVycik7CisJCX0KKwl9CisKKwlyZXR1cm4gZW50cnk7Cit9CisKIC8qIEFkZCBydWxlIHRvIGdpdmVuIGZpbHRlcmxpc3QgaWYgbm90IGEgZHVwbGljYXRlLiAgUHJvdGVjdGVkIGJ5CiAgKiBhdWRpdF9uZXRsaW5rX211dGV4LiAqLwogc3RhdGljIGlubGluZSBpbnQgYXVkaXRfYWRkX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeSwKQEAgLTQ0OCw5ICs1ODYsMTAgQEAKICAqIEBkYXRhOiBwYXlsb2FkIGRhdGEKICAqIEBkYXRhc3o6IHNpemUgb2YgcGF5bG9hZCBkYXRhCiAgKiBAbG9naW51aWQ6IGxvZ2ludWlkIG9mIHNlbmRlcgorICogQHNpZDogU0UgTGludXggU2VjdXJpdHkgSUQgb2Ygc2VuZGVyCiAgKi8KIGludCBhdWRpdF9yZWNlaXZlX2ZpbHRlcihpbnQgdHlwZSwgaW50IHBpZCwgaW50IHVpZCwgaW50IHNlcSwgdm9pZCAqZGF0YSwKLQkJCSBzaXplX3QgZGF0YXN6LCB1aWRfdCBsb2dpbnVpZCkKKwkJCSBzaXplX3QgZGF0YXN6LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAlpbnQgKmRlc3Q7CkBAIC00OTMsOSArNjMyLDIzIEBACiAKIAkJZXJyID0gYXVkaXRfYWRkX3J1bGUoZW50cnksCiAJCQkJICAgICAmYXVkaXRfZmlsdGVyX2xpc3RbZW50cnktPnJ1bGUubGlzdG5yXSk7Ci0JCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAotCQkJImF1aWQ9JXUgYWRkIHJ1bGUgdG8gbGlzdD0lZCByZXM9JWRcbiIsCi0JCQlsb2dpbnVpZCwgZW50cnktPnJ1bGUubGlzdG5yLCAhZXJyKTsKKwkJaWYgKHNpZCkgeworCQkJY2hhciAqY3R4ID0gTlVMTDsKKwkJCXUzMiBsZW47CisJCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkgeworCQkJCS8qIE1heWJlIGNhbGwgYXVkaXRfcGFuaWM/ICovCisJCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCQkJICJhdWlkPSV1IHNzaWQ9JXUgYWRkIHJ1bGUgdG8gbGlzdD0lZCByZXM9JWQiLAorCQkJCSBsb2dpbnVpZCwgc2lkLCBlbnRyeS0+cnVsZS5saXN0bnIsICFlcnIpOworCQkJfSBlbHNlCisJCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCQkJICJhdWlkPSV1IHN1Ymo9JXMgYWRkIHJ1bGUgdG8gbGlzdD0lZCByZXM9JWQiLAorCQkJCSBsb2dpbnVpZCwgY3R4LCBlbnRyeS0+cnVsZS5saXN0bnIsICFlcnIpOworCQkJa2ZyZWUoY3R4KTsKKwkJfSBlbHNlCisJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkiYXVpZD0ldSBhZGQgcnVsZSB0byBsaXN0PSVkIHJlcz0lZCIsCisJCQkJbG9naW51aWQsIGVudHJ5LT5ydWxlLmxpc3RuciwgIWVycik7CiAKIAkJaWYgKGVycikKIAkJCWF1ZGl0X2ZyZWVfcnVsZShlbnRyeSk7CkBAIC01MTEsOSArNjY0LDI0IEBACiAKIAkJZXJyID0gYXVkaXRfZGVsX3J1bGUoZW50cnksCiAJCQkJICAgICAmYXVkaXRfZmlsdGVyX2xpc3RbZW50cnktPnJ1bGUubGlzdG5yXSk7Ci0JCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAotCQkJImF1aWQ9JXUgcmVtb3ZlIHJ1bGUgZnJvbSBsaXN0PSVkIHJlcz0lZFxuIiwKLQkJCWxvZ2ludWlkLCBlbnRyeS0+cnVsZS5saXN0bnIsICFlcnIpOworCisJCWlmIChzaWQpIHsKKwkJCWNoYXIgKmN0eCA9IE5VTEw7CisJCQl1MzIgbGVuOworCQkJaWYgKHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbikpIHsKKwkJCQkvKiBNYXliZSBjYWxsIGF1ZGl0X3BhbmljPyAqLworCQkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCQkiYXVpZD0ldSBzc2lkPSV1IHJlbW92ZSBydWxlIGZyb20gbGlzdD0lZCByZXM9JWQiLAorCQkJCQkgbG9naW51aWQsIHNpZCwgZW50cnktPnJ1bGUubGlzdG5yLCAhZXJyKTsKKwkJCX0gZWxzZQorCQkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCQkiYXVpZD0ldSBzdWJqPSVzIHJlbW92ZSBydWxlIGZyb20gbGlzdD0lZCByZXM9JWQiLAorCQkJCQkgbG9naW51aWQsIGN0eCwgZW50cnktPnJ1bGUubGlzdG5yLCAhZXJyKTsKKwkJCWtmcmVlKGN0eCk7CisJCX0gZWxzZQorCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCQkJImF1aWQ9JXUgcmVtb3ZlIHJ1bGUgZnJvbSBsaXN0PSVkIHJlcz0lZCIsCisJCQkJbG9naW51aWQsIGVudHJ5LT5ydWxlLmxpc3RuciwgIWVycik7CiAKIAkJYXVkaXRfZnJlZV9ydWxlKGVudHJ5KTsKIAkJYnJlYWs7CkBAIC02MjgsMyArNzk2LDYyIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KKworLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBydWxlIGNvbnRhaW5zIGFueSBzZWxpbnV4IGZpZWxkcy4gIFJldHVybnMgMSBpZiB0aGVyZQorICAgYXJlIHNlbGludXggZmllbGRzIHNwZWNpZmllZCBpbiB0aGUgcnVsZSwgMCBvdGhlcndpc2UuICovCitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9ydWxlX2hhc19zZWxpbnV4KHN0cnVjdCBhdWRpdF9rcnVsZSAqcnVsZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBydWxlLT5maWVsZF9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBhdWRpdF9maWVsZCAqZiA9ICZydWxlLT5maWVsZHNbaV07CisJCXN3aXRjaCAoZi0+dHlwZSkgeworCQljYXNlIEFVRElUX1NFX1VTRVI6CisJCWNhc2UgQVVESVRfU0VfUk9MRToKKwkJY2FzZSBBVURJVF9TRV9UWVBFOgorCQljYXNlIEFVRElUX1NFX1NFTjoKKwkJY2FzZSBBVURJVF9TRV9DTFI6CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmUtaW5pdGlhbGl6ZSB0aGUgc2VfcnVsZSBmaWVsZCBvZiBhbGwgYXBwbGljYWJsZSBydWxlcy4KKyAqIEl0IHdpbGwgdHJhdmVyc2UgdGhlIGZpbHRlciBsaXN0cyBzZXJhcmNoaW5nIGZvciBydWxlcyB0aGF0IGNvbnRhaW4gc2VsaW51eAorICogc3BlY2lmaWMgZmlsdGVyIGZpZWxkcy4gIFdoZW4gc3VjaCBhIHJ1bGUgaXMgZm91bmQsIGl0IGlzIGNvcGllZCwgdGhlCisgKiBzZWxpbnV4IGZpZWxkIGlzIHJlLWluaXRpYWxpemVkLCBhbmQgdGhlIG9sZCBydWxlIGlzIHJlcGxhY2VkIHdpdGggdGhlCisgKiB1cGRhdGVkIHJ1bGUuICovCitpbnQgc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSh2b2lkKQoreworCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnksICpuLCAqbmVudHJ5OworCWludCBpLCBlcnIgPSAwOworCisJLyogYXVkaXRfbmV0bGlua19tdXRleCBzeW5jaHJvbml6ZXMgdGhlIHdyaXRlcnMgKi8KKwltdXRleF9sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKKworCWZvciAoaSA9IDA7IGkgPCBBVURJVF9OUl9GSUxURVJTOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuLCAmYXVkaXRfZmlsdGVyX2xpc3RbaV0sIGxpc3QpIHsKKwkJCWlmICghYXVkaXRfcnVsZV9oYXNfc2VsaW51eCgmZW50cnktPnJ1bGUpKQorCQkJCWNvbnRpbnVlOworCisJCQluZW50cnkgPSBhdWRpdF9kdXBlX3J1bGUoJmVudHJ5LT5ydWxlKTsKKwkJCWlmICh1bmxpa2VseShJU19FUlIobmVudHJ5KSkpIHsKKwkJCQkvKiBzYXZlIHRoZSBmaXJzdCBlcnJvciBlbmNvdW50ZXJlZCBmb3IgdGhlCisJCQkJICogcmV0dXJuIHZhbHVlICovCisJCQkJaWYgKCFlcnIpCisJCQkJCWVyciA9IFBUUl9FUlIobmVudHJ5KTsKKwkJCQlhdWRpdF9wYW5pYygiZXJyb3IgdXBkYXRpbmcgc2VsaW51eCBmaWx0ZXJzIik7CisJCQkJbGlzdF9kZWxfcmN1KCZlbnRyeS0+bGlzdCk7CisJCQl9IGVsc2UgeworCQkJCWxpc3RfcmVwbGFjZV9yY3UoJmVudHJ5LT5saXN0LCAmbmVudHJ5LT5saXN0KTsKKwkJCX0KKwkJCWNhbGxfcmN1KCZlbnRyeS0+cmN1LCBhdWRpdF9mcmVlX3J1bGVfcmN1KTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmYXVkaXRfbmV0bGlua19tdXRleCk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggN2YxNjBkZi4uMWMwM2E0ZSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogCiAjaW5jbHVkZSAiYXVkaXQuaCIKIApAQCAtODksNyArOTAsNyBAQAogCXVpZF90CQl1aWQ7CiAJZ2lkX3QJCWdpZDsKIAlkZXZfdAkJcmRldjsKLQljaGFyCQkqY3R4OworCXUzMgkJb3NpZDsKIH07CiAKIHN0cnVjdCBhdWRpdF9hdXhfZGF0YSB7CkBAIC0xMDYsNyArMTA3LDcgQEAKIAl1aWRfdAkJCXVpZDsKIAlnaWRfdAkJCWdpZDsKIAltb2RlX3QJCQltb2RlOwotCWNoYXIgCQkJKmN0eDsKKwl1MzIJCQlvc2lkOwogfTsKIAogc3RydWN0IGF1ZGl0X2F1eF9kYXRhX3NvY2tldGNhbGwgewpAQCAtMTY3LDcgKzE2OCw4IEBACiAJCQkgICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LAogCQkJICAgICAgZW51bSBhdWRpdF9zdGF0ZSAqc3RhdGUpCiB7Ci0JaW50IGksIGo7CisJaW50IGksIGosIG5lZWRfc2lkID0gMTsKKwl1MzIgc2lkOwogCiAJZm9yIChpID0gMDsgaSA8IHJ1bGUtPmZpZWxkX2NvdW50OyBpKyspIHsKIAkJc3RydWN0IGF1ZGl0X2ZpZWxkICpmID0gJnJ1bGUtPmZpZWxkc1tpXTsKQEAgLTI1Nyw2ICsyNTksMjcgQEAKIAkJCWlmIChjdHgpCiAJCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcihjdHgtPmxvZ2ludWlkLCBmLT5vcCwgZi0+dmFsKTsKIAkJCWJyZWFrOworCQljYXNlIEFVRElUX1NFX1VTRVI6CisJCWNhc2UgQVVESVRfU0VfUk9MRToKKwkJY2FzZSBBVURJVF9TRV9UWVBFOgorCQljYXNlIEFVRElUX1NFX1NFTjoKKwkJY2FzZSBBVURJVF9TRV9DTFI6CisJCQkvKiBOT1RFOiB0aGlzIG1heSByZXR1cm4gbmVnYXRpdmUgdmFsdWVzIGluZGljYXRpbmcKKwkJCSAgIGEgdGVtcG9yYXJ5IGVycm9yLiAgV2Ugc2ltcGx5IHRyZWF0IHRoaXMgYXMgYQorCQkJICAgbWF0Y2ggZm9yIG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24gdGhhdAorCQkJICAgbWF5IGJlIHdhbnRlZC4gICBBbiBlcnJvciBtZXNzYWdlIHdpbGwgYWxzbyBiZQorCQkJICAgbG9nZ2VkIHVwb24gZXJyb3IgKi8KKwkJCWlmIChmLT5zZV9ydWxlKSB7CisJCQkJaWYgKG5lZWRfc2lkKSB7CisJCQkJCXNlbGludXhfdGFza19jdHhpZCh0c2ssICZzaWQpOworCQkJCQluZWVkX3NpZCA9IDA7CisJCQkJfQorCQkJCXJlc3VsdCA9IHNlbGludXhfYXVkaXRfcnVsZV9tYXRjaChzaWQsIGYtPnR5cGUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPm9wLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5zZV9ydWxlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgpOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfQVJHMDoKIAkJY2FzZSBBVURJVF9BUkcxOgogCQljYXNlIEFVRElUX0FSRzI6CkBAIC0zMjksNyArMzUyLDYgQEAKIAlyZXR1cm4gQVVESVRfQlVJTERfQ09OVEVYVDsKIH0KIAotLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGFza19sb2NrKCkgaGVsZC4gKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmF1ZGl0X2dldF9jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCQkJICAgICAgaW50IHJldHVybl92YWxpZCwKIAkJCQkJCSAgICAgIGludCByZXR1cm5fY29kZSkKQEAgLTM5MSw5ICs0MTMsNiBAQAogI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgY29udGV4dC0+bmFtZV9jb3VudDsgaSsrKSB7Ci0JCWNoYXIgKnAgPSBjb250ZXh0LT5uYW1lc1tpXS5jdHg7Ci0JCWNvbnRleHQtPm5hbWVzW2ldLmN0eCA9IE5VTEw7Ci0JCWtmcmVlKHApOwogCQlpZiAoY29udGV4dC0+bmFtZXNbaV0ubmFtZSkKIAkJCV9fcHV0bmFtZShjb250ZXh0LT5uYW1lc1tpXS5uYW1lKTsKIAl9CkBAIC00MTYsMTEgKzQzNSw2IEBACiAJCQlkcHV0KGF4aS0+ZGVudHJ5KTsKIAkJCW1udHB1dChheGktPm1udCk7CiAJCX0KLQkJaWYgKCBhdXgtPnR5cGUgPT0gQVVESVRfSVBDICkgewotCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXhpID0gKHZvaWQgKilhdXg7Ci0JCQlpZiAoYXhpLT5jdHgpCi0JCQkJa2ZyZWUoYXhpLT5jdHgpOwotCQl9CiAKIAkJY29udGV4dC0+YXV4ID0gYXV4LT5uZXh0OwogCQlrZnJlZShhdXgpOwpAQCAtNTA2LDcgKzUyMCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiYXVkaXQ6IGZyZWVkICVkIGNvbnRleHRzXG4iLCBjb3VudCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF1ZGl0X2xvZ190YXNrX2NvbnRleHQoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIHZvaWQgYXVkaXRfbG9nX3Rhc2tfY29udGV4dChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYikKIHsKIAljaGFyICpjdHggPSBOVUxMOwogCXNzaXplX3QgbGVuID0gMDsKQEAgLTUxOCw3ICs1MzIsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JY3R4ID0ga21hbGxvYyhsZW4sIGdmcF9tYXNrKTsKKwljdHggPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjdHgpCiAJCWdvdG8gZXJyb3JfcGF0aDsKIApAQCAtNTM2LDQ3ICs1NTAsNDYgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGF1ZGl0X2xvZ190YXNrX2luZm8oc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIHZvaWQgYXVkaXRfbG9nX3Rhc2tfaW5mbyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JY2hhciBuYW1lW3NpemVvZihjdXJyZW50LT5jb21tKV07Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwljaGFyIG5hbWVbc2l6ZW9mKHRzay0+Y29tbSldOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAotCWdldF90YXNrX2NvbW0obmFtZSwgY3VycmVudCk7CisJLyogdHNrID09IGN1cnJlbnQgKi8KKworCWdldF90YXNrX2NvbW0obmFtZSwgdHNrKTsKIAlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGNvbW09Iik7CiAJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgbmFtZSk7CiAKLQlpZiAoIW1tKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIHRoaXMgaXMgYnJpdHRsZTsgYWxsIGNhbGxlcnMgdGhhdCBwYXNzIEdGUF9BVE9NSUMgd2lsbCBoYXZlCi0JICogTlVMTCBjdXJyZW50LT5tbSBhbmQgd2Ugd29uJ3QgZ2V0IGhlcmUuCi0JICovCi0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXZtYSA9IG1tLT5tbWFwOwotCXdoaWxlICh2bWEpIHsKLQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkgJiYKLQkJICAgIHZtYS0+dm1fZmlsZSkgewotCQkJYXVkaXRfbG9nX2RfcGF0aChhYiwgImV4ZT0iLAotCQkJCQkgdm1hLT52bV9maWxlLT5mX2RlbnRyeSwKLQkJCQkJIHZtYS0+dm1fZmlsZS0+Zl92ZnNtbnQpOwotCQkJYnJlYWs7CisJaWYgKG1tKSB7CisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJdm1hID0gbW0tPm1tYXA7CisJCXdoaWxlICh2bWEpIHsKKwkJCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpICYmCisJCQkgICAgdm1hLT52bV9maWxlKSB7CisJCQkJYXVkaXRfbG9nX2RfcGF0aChhYiwgImV4ZT0iLAorCQkJCQkJIHZtYS0+dm1fZmlsZS0+Zl9kZW50cnksCisJCQkJCQkgdm1hLT52bV9maWxlLT5mX3Zmc21udCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQl2bWEgPSB2bWEtPnZtX25leHQ7CiAJCX0KLQkJdm1hID0gdm1hLT52bV9uZXh0OworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCX0KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWF1ZGl0X2xvZ190YXNrX2NvbnRleHQoYWIsIGdmcF9tYXNrKTsKKwlhdWRpdF9sb2dfdGFza19jb250ZXh0KGFiKTsKIH0KIAotc3RhdGljIHZvaWQgYXVkaXRfbG9nX2V4aXQoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQsIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIHZvaWQgYXVkaXRfbG9nX2V4aXQoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCWludCBpOworCWludCBpLCBjYWxsX3BhbmljID0gMDsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEgKmF1eDsKIAljb25zdCBjaGFyICp0dHk7CiAKLQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBnZnBfbWFzaywgQVVESVRfU1lTQ0FMTCk7CisJLyogdHNrID09IGN1cnJlbnQgKi8KKworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIEdGUF9LRVJORUwsIEFVRElUX1NZU0NBTEwpOwogCWlmICghYWIpCiAJCXJldHVybjsJCS8qIGF1ZGl0X3BhbmljIGhhcyBiZWVuIGNhbGxlZCAqLwogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhcmNoPSV4IHN5c2NhbGw9JWQiLApAQCAtNTg3LDggKzYwMCw4IEBACiAJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgc3VjY2Vzcz0lcyBleGl0PSVsZCIsIAogCQkJCSAoY29udGV4dC0+cmV0dXJuX3ZhbGlkPT1BVURJVFNDX1NVQ0NFU1MpPyJ5ZXMiOiJubyIsCiAJCQkJIGNvbnRleHQtPnJldHVybl9jb2RlKTsKLQlpZiAoY3VycmVudC0+c2lnbmFsLT50dHkgJiYgY3VycmVudC0+c2lnbmFsLT50dHktPm5hbWUpCi0JCXR0eSA9IGN1cnJlbnQtPnNpZ25hbC0+dHR5LT5uYW1lOworCWlmICh0c2stPnNpZ25hbCAmJiB0c2stPnNpZ25hbC0+dHR5ICYmIHRzay0+c2lnbmFsLT50dHktPm5hbWUpCisJCXR0eSA9IHRzay0+c2lnbmFsLT50dHktPm5hbWU7CiAJZWxzZQogCQl0dHkgPSAiKG5vbmUpIjsKIAlhdWRpdF9sb2dfZm9ybWF0KGFiLApAQCAtNjA3LDEyICs2MjAsMTIgQEAKIAkJICBjb250ZXh0LT5naWQsCiAJCSAgY29udGV4dC0+ZXVpZCwgY29udGV4dC0+c3VpZCwgY29udGV4dC0+ZnN1aWQsCiAJCSAgY29udGV4dC0+ZWdpZCwgY29udGV4dC0+c2dpZCwgY29udGV4dC0+ZnNnaWQsIHR0eSk7Ci0JYXVkaXRfbG9nX3Rhc2tfaW5mbyhhYiwgZ2ZwX21hc2spOworCWF1ZGl0X2xvZ190YXNrX2luZm8oYWIsIHRzayk7CiAJYXVkaXRfbG9nX2VuZChhYik7CiAKIAlmb3IgKGF1eCA9IGNvbnRleHQtPmF1eDsgYXV4OyBhdXggPSBhdXgtPm5leHQpIHsKIAotCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBnZnBfbWFzaywgYXV4LT50eXBlKTsKKwkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgR0ZQX0tFUk5FTCwgYXV4LT50eXBlKTsKIAkJaWYgKCFhYikKIAkJCWNvbnRpbnVlOyAvKiBhdWRpdF9wYW5pYyBoYXMgYmVlbiBjYWxsZWQgKi8KIApAQCAtNjIwLDggKzYzMywzOSBAQAogCQljYXNlIEFVRElUX0lQQzogewogCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXhpID0gKHZvaWQgKilhdXg7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAKLQkJCQkJICIgcWJ5dGVzPSVseCBpdWlkPSV1IGlnaWQ9JXUgbW9kZT0leCBvYmo9JXMiLAotCQkJCQkgYXhpLT5xYnl0ZXMsIGF4aS0+dWlkLCBheGktPmdpZCwgYXhpLT5tb2RlLCBheGktPmN0eCk7CisJCQkJICIgcWJ5dGVzPSVseCBpdWlkPSV1IGlnaWQ9JXUgbW9kZT0leCIsCisJCQkJIGF4aS0+cWJ5dGVzLCBheGktPnVpZCwgYXhpLT5naWQsIGF4aS0+bW9kZSk7CisJCQlpZiAoYXhpLT5vc2lkICE9IDApIHsKKwkJCQljaGFyICpjdHggPSBOVUxMOworCQkJCXUzMiBsZW47CisJCQkJaWYgKHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKAorCQkJCQkJYXhpLT5vc2lkLCAmY3R4LCAmbGVuKSkgeworCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9zaWQ9JXUiLAorCQkJCQkJCWF4aS0+b3NpZCk7CisJCQkJCWNhbGxfcGFuaWMgPSAxOworCQkJCX0gZWxzZQorCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9iaj0lcyIsIGN0eCk7CisJCQkJa2ZyZWUoY3R4KTsKKwkJCX0KKwkJCWJyZWFrOyB9CisKKwkJY2FzZSBBVURJVF9JUENfU0VUX1BFUk06IHsKKwkJCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9pcGNjdGwgKmF4aSA9ICh2b2lkICopYXV4OworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKKwkJCQkiIG5ldyBxYnl0ZXM9JWx4IG5ldyBpdWlkPSV1IG5ldyBpZ2lkPSV1IG5ldyBtb2RlPSV4IiwKKwkJCQlheGktPnFieXRlcywgYXhpLT51aWQsIGF4aS0+Z2lkLCBheGktPm1vZGUpOworCQkJaWYgKGF4aS0+b3NpZCAhPSAwKSB7CisJCQkJY2hhciAqY3R4ID0gTlVMTDsKKwkJCQl1MzIgbGVuOworCQkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZygKKwkJCQkJCWF4aS0+b3NpZCwgJmN0eCwgJmxlbikpIHsKKwkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvc2lkPSV1IiwKKwkJCQkJCQlheGktPm9zaWQpOworCQkJCQljYWxsX3BhbmljID0gMTsKKwkJCQl9IGVsc2UKKwkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvYmo9JXMiLCBjdHgpOworCQkJCWtmcmVlKGN0eCk7CisJCQl9CiAJCQlicmVhazsgfQogCiAJCWNhc2UgQVVESVRfU09DS0VUQ0FMTDogewpAQCAtNjQ5LDcgKzY5Myw3IEBACiAJfQogCiAJaWYgKGNvbnRleHQtPnB3ZCAmJiBjb250ZXh0LT5wd2RtbnQpIHsKLQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgZ2ZwX21hc2ssIEFVRElUX0NXRCk7CisJCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIEdGUF9LRVJORUwsIEFVRElUX0NXRCk7CiAJCWlmIChhYikgewogCQkJYXVkaXRfbG9nX2RfcGF0aChhYiwgImN3ZD0iLCBjb250ZXh0LT5wd2QsIGNvbnRleHQtPnB3ZG1udCk7CiAJCQlhdWRpdF9sb2dfZW5kKGFiKTsKQEAgLTY1OSw3ICs3MDMsNyBAQAogCQl1bnNpZ25lZCBsb25nIGlubyAgPSBjb250ZXh0LT5uYW1lc1tpXS5pbm87CiAJCXVuc2lnbmVkIGxvbmcgcGlubyA9IGNvbnRleHQtPm5hbWVzW2ldLnBpbm87CiAKLQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgZ2ZwX21hc2ssIEFVRElUX1BBVEgpOworCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBHRlBfS0VSTkVMLCBBVURJVF9QQVRIKTsKIAkJaWYgKCFhYikKIAkJCWNvbnRpbnVlOyAvKiBhdWRpdF9wYW5pYyBoYXMgYmVlbiBjYWxsZWQgKi8KIApAQCAtNjg1LDMyICs3MjksMzUgQEAKIAkJCQkJIGNvbnRleHQtPm5hbWVzW2ldLmdpZCwgCiAJCQkJCSBNQUpPUihjb250ZXh0LT5uYW1lc1tpXS5yZGV2KSwgCiAJCQkJCSBNSU5PUihjb250ZXh0LT5uYW1lc1tpXS5yZGV2KSk7Ci0JCWlmIChjb250ZXh0LT5uYW1lc1tpXS5jdHgpIHsKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2JqPSVzIiwKLQkJCQkJY29udGV4dC0+bmFtZXNbaV0uY3R4KTsKKwkJaWYgKGNvbnRleHQtPm5hbWVzW2ldLm9zaWQgIT0gMCkgeworCQkJY2hhciAqY3R4ID0gTlVMTDsKKwkJCXUzMiBsZW47CisJCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCisJCQkJY29udGV4dC0+bmFtZXNbaV0ub3NpZCwgJmN0eCwgJmxlbikpIHsKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9zaWQ9JXUiLAorCQkJCQkJY29udGV4dC0+bmFtZXNbaV0ub3NpZCk7CisJCQkJY2FsbF9wYW5pYyA9IDI7CisJCQl9IGVsc2UKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9iaj0lcyIsIGN0eCk7CisJCQlrZnJlZShjdHgpOwogCQl9CiAKIAkJYXVkaXRfbG9nX2VuZChhYik7CiAJfQorCWlmIChjYWxsX3BhbmljKQorCQlhdWRpdF9wYW5pYygiZXJyb3IgY29udmVydGluZyBzaWQgdG8gc3RyaW5nIik7CiB9CiAKIC8qKgogICogYXVkaXRfZnJlZSAtIGZyZWUgYSBwZXItdGFzayBhdWRpdCBjb250ZXh0CiAgKiBAdHNrOiB0YXNrIHdob3NlIGF1ZGl0IGNvbnRleHQgYmxvY2sgdG8gZnJlZQogICoKLSAqIENhbGxlZCBmcm9tIGNvcHlfcHJvY2VzcyBhbmQgX19wdXRfdGFza19zdHJ1Y3QuCisgKiBDYWxsZWQgZnJvbSBjb3B5X3Byb2Nlc3MgYW5kIGRvX2V4aXQKICAqLwogdm9pZCBhdWRpdF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0OwogCi0JLyoKLQkgKiBObyBuZWVkIHRvIGxvY2sgdGhlIHRhc2sgLSB3aGVuIHdlIGV4ZWN1dGUgYXVkaXRfZnJlZSgpCi0JICogdGhlbiB0aGUgdGFzayBoYXMgbm8gZXh0ZXJuYWwgcmVmZXJlbmNlcyBhbnltb3JlLCBhbmQKLQkgKiB3ZSBhcmUgdGVhcmluZyBpdCBkb3duLiAoVGhlIGxvY2tpbmcgYWxzbyBjb25mdXNlcwotCSAqIERFQlVHX0xPQ0tERVAgLSB0aGlzIGZyZWVpbmcgbWF5IG9jY3VyIGluIHNvZnRpcnEKLQkgKiBjb250ZXh0cyBhcyB3ZWxsLCB2aWEgUkNVLikKLQkgKi8KIAljb250ZXh0ID0gYXVkaXRfZ2V0X2NvbnRleHQodHNrLCAwLCAwKTsKIAlpZiAobGlrZWx5KCFjb250ZXh0KSkKIAkJcmV0dXJuOwpAQCAtNzE5LDggKzc2Niw5IEBACiAJICogZnVuY3Rpb24gKGUuZy4sIGV4aXRfZ3JvdXApLCB0aGVuIGZyZWUgY29udGV4dCBibG9jay4gCiAJICogV2UgdXNlIEdGUF9BVE9NSUMgaGVyZSBiZWNhdXNlIHdlIG1pZ2h0IGJlIGRvaW5nIHRoaXMgCiAJICogaW4gdGhlIGNvbnRleHQgb2YgdGhlIGlkbGUgdGhyZWFkICovCisJLyogdGhhdCBjYW4gaGFwcGVuIG9ubHkgaWYgd2UgYXJlIGNhbGxlZCBmcm9tIGRvX2V4aXQoKSAqLwogCWlmIChjb250ZXh0LT5pbl9zeXNjYWxsICYmIGNvbnRleHQtPmF1ZGl0YWJsZSkKLQkJYXVkaXRfbG9nX2V4aXQoY29udGV4dCwgR0ZQX0FUT01JQyk7CisJCWF1ZGl0X2xvZ19leGl0KGNvbnRleHQsIHRzayk7CiAKIAlhdWRpdF9mcmVlX2NvbnRleHQoY29udGV4dCk7CiB9CkBAIC03NDMsMTAgKzc5MSwxMSBAQAogICogd2lsbCBvbmx5IGJlIHdyaXR0ZW4gaWYgYW5vdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwgcmVxdWVzdHMgdGhhdCBpdAogICogYmUgd3JpdHRlbikuCiAgKi8KLXZvaWQgYXVkaXRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGFyY2gsIGludCBtYWpvciwKK3ZvaWQgYXVkaXRfc3lzY2FsbF9lbnRyeShpbnQgYXJjaCwgaW50IG1ham9yLAogCQkJIHVuc2lnbmVkIGxvbmcgYTEsIHVuc2lnbmVkIGxvbmcgYTIsCiAJCQkgdW5zaWduZWQgbG9uZyBhMywgdW5zaWduZWQgbG9uZyBhNCkKIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSB0c2stPmF1ZGl0X2NvbnRleHQ7CiAJZW51bSBhdWRpdF9zdGF0ZSAgICAgc3RhdGU7CiAKQEAgLTgyNCwyMiArODczLDE4IEBACiAgKiBtZXNzYWdlKSwgdGhlbiB3cml0ZSBvdXQgdGhlIHN5c2NhbGwgaW5mb3JtYXRpb24uICBJbiBjYWxsIGNhc2VzLAogICogZnJlZSB0aGUgbmFtZXMgc3RvcmVkIGZyb20gZ2V0bmFtZSgpLgogICovCi12b2lkIGF1ZGl0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHZhbGlkLCBsb25nIHJldHVybl9jb2RlKQordm9pZCBhdWRpdF9zeXNjYWxsX2V4aXQoaW50IHZhbGlkLCBsb25nIHJldHVybl9jb2RlKQogeworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dDsKIAotCWdldF90YXNrX3N0cnVjdCh0c2spOwotCXRhc2tfbG9jayh0c2spOwogCWNvbnRleHQgPSBhdWRpdF9nZXRfY29udGV4dCh0c2ssIHZhbGlkLCByZXR1cm5fY29kZSk7Ci0JdGFza191bmxvY2sodHNrKTsKIAotCS8qIE5vdCBoYXZpbmcgYSBjb250ZXh0IGhlcmUgaXMgb2ssIHNpbmNlIHRoZSBwYXJlbnQgbWF5IGhhdmUKLQkgKiBjYWxsZWQgX19wdXRfdGFza19zdHJ1Y3QuICovCiAJaWYgKGxpa2VseSghY29udGV4dCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAKIAlpZiAoY29udGV4dC0+aW5fc3lzY2FsbCAmJiBjb250ZXh0LT5hdWRpdGFibGUpCi0JCWF1ZGl0X2xvZ19leGl0KGNvbnRleHQsIEdGUF9LRVJORUwpOworCQlhdWRpdF9sb2dfZXhpdChjb250ZXh0LCB0c2spOwogCiAJY29udGV4dC0+aW5fc3lzY2FsbCA9IDA7CiAJY29udGV4dC0+YXVkaXRhYmxlICA9IDA7CkBAIC04NTQsOCArODk5LDYgQEAKIAkJYXVkaXRfZnJlZV9hdXgoY29udGV4dCk7CiAJCXRzay0+YXVkaXRfY29udGV4dCA9IGNvbnRleHQ7CiAJfQotIG91dDoKLQlwdXRfdGFza19zdHJ1Y3QodHNrKTsKIH0KIAogLyoqCkBAIC05MzYsNDAgKzk3OSwxMSBAQAogI2VuZGlmCiB9CiAKLXZvaWQgYXVkaXRfaW5vZGVfY29udGV4dChpbnQgaWR4LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgYXVkaXRfaW5vZGVfY29udGV4dChpbnQgaWR4LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKLQljb25zdCBjaGFyICpzdWZmaXggPSBzZWN1cml0eV9pbm9kZV94YXR0cl9nZXRzdWZmaXgoKTsKLQljaGFyICpjdHggPSBOVUxMOwotCWludCBsZW4gPSAwOwogCi0JaWYgKCFzdWZmaXgpCi0JCWdvdG8gcmV0OwotCi0JbGVuID0gc2VjdXJpdHlfaW5vZGVfZ2V0c2VjdXJpdHkoaW5vZGUsIHN1ZmZpeCwgTlVMTCwgMCwgMCk7Ci0JaWYgKGxlbiA9PSAtRU9QTk9UU1VQUCkKLQkJZ290byByZXQ7Ci0JaWYgKGxlbiA8IDApIAotCQlnb3RvIGVycm9yX3BhdGg7Ci0KLQljdHggPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHgpIAotCQlnb3RvIGVycm9yX3BhdGg7Ci0KLQlsZW4gPSBzZWN1cml0eV9pbm9kZV9nZXRzZWN1cml0eShpbm9kZSwgc3VmZml4LCBjdHgsIGxlbiwgMCk7Ci0JaWYgKGxlbiA8IDApCi0JCWdvdG8gZXJyb3JfcGF0aDsKLQotCWtmcmVlKGNvbnRleHQtPm5hbWVzW2lkeF0uY3R4KTsKLQljb250ZXh0LT5uYW1lc1tpZHhdLmN0eCA9IGN0eDsKLQlnb3RvIHJldDsKLQotZXJyb3JfcGF0aDoKLQlpZiAoY3R4KQotCQlrZnJlZShjdHgpOwotCWF1ZGl0X3BhbmljKCJlcnJvciBpbiBhdWRpdF9pbm9kZV9jb250ZXh0Iik7Ci1yZXQ6Ci0JcmV0dXJuOworCXNlbGludXhfZ2V0X2lub2RlX3NpZChpbm9kZSwgJmNvbnRleHQtPm5hbWVzW2lkeF0ub3NpZCk7CiB9CiAKIApAQCAtMTE1NSw0MCArMTE2OSwzNyBAQAogCXJldHVybiBjdHggPyBjdHgtPmxvZ2ludWlkIDogLTE7CiB9CiAKLXN0YXRpYyBjaGFyICphdWRpdF9pcGNfY29udGV4dChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCkKKy8qKgorICogYXVkaXRfaXBjX29iaiAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBpcGMgb2JqZWN0CisgKiBAaXBjcDogaXBjIHBlcm1pc3Npb25zCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIE5VTEwgY29udGV4dCBvciA8IDAgb24gZXJyb3IuCisgKi8KK2ludCBhdWRpdF9pcGNfb2JqKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQogeworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9pcGNjdGwgKmF4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKLQljaGFyICpjdHggPSBOVUxMOwotCWludCBsZW4gPSAwOwogCiAJaWYgKGxpa2VseSghY29udGV4dCkpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gMDsKIAotCWxlbiA9IHNlY3VyaXR5X2lwY19nZXRzZWN1cml0eShpcGNwLCBOVUxMLCAwKTsKLQlpZiAobGVuID09IC1FT1BOT1RTVVBQKQotCQlnb3RvIHJldDsKLQlpZiAobGVuIDwgMCkKLQkJZ290byBlcnJvcl9wYXRoOworCWF4ID0ga21hbGxvYyhzaXplb2YoKmF4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFheCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQljdHggPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFjdHgpCi0JCWdvdG8gZXJyb3JfcGF0aDsKKwlheC0+dWlkID0gaXBjcC0+dWlkOworCWF4LT5naWQgPSBpcGNwLT5naWQ7CisJYXgtPm1vZGUgPSBpcGNwLT5tb2RlOworCXNlbGludXhfZ2V0X2lwY19zaWQoaXBjcCwgJmF4LT5vc2lkKTsKIAotCWxlbiA9IHNlY3VyaXR5X2lwY19nZXRzZWN1cml0eShpcGNwLCBjdHgsIGxlbik7Ci0JaWYgKGxlbiA8IDApCi0JCWdvdG8gZXJyb3JfcGF0aDsKLQotCXJldHVybiBjdHg7Ci0KLWVycm9yX3BhdGg6Ci0Ja2ZyZWUoY3R4KTsKLQlhdWRpdF9wYW5pYygiZXJyb3IgaW4gYXVkaXRfaXBjX2NvbnRleHQiKTsKLXJldDoKLQlyZXR1cm4gTlVMTDsKKwlheC0+ZC50eXBlID0gQVVESVRfSVBDOworCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CisJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBhdWRpdF9pcGNfcGVybXMgLSByZWNvcmQgYXVkaXQgZGF0YSBmb3IgaXBjCisgKiBhdWRpdF9pcGNfc2V0X3Blcm0gLSByZWNvcmQgYXVkaXQgZGF0YSBmb3IgbmV3IGlwYyBwZXJtaXNzaW9ucwogICogQHFieXRlczogbXNncSBieXRlcwogICogQHVpZDogbXNncSB1c2VyIGlkCiAgKiBAZ2lkOiBtc2dxIGdyb3VwIGlkCkBAIC0xMTk2LDcgKzEyMDcsNyBAQAogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBOVUxMIGNvbnRleHQgb3IgPCAwIG9uIGVycm9yLgogICovCi1pbnQgYXVkaXRfaXBjX3Blcm1zKHVuc2lnbmVkIGxvbmcgcWJ5dGVzLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUsIHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQoraW50IGF1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCkKIHsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfaXBjY3RsICpheDsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CkBAIC0xMjEyLDkgKzEyMjMsOSBAQAogCWF4LT51aWQgPSB1aWQ7CiAJYXgtPmdpZCA9IGdpZDsKIAlheC0+bW9kZSA9IG1vZGU7Ci0JYXgtPmN0eCA9IGF1ZGl0X2lwY19jb250ZXh0KGlwY3ApOworCXNlbGludXhfZ2V0X2lwY19zaWQoaXBjcCwgJmF4LT5vc2lkKTsKIAotCWF4LT5kLnR5cGUgPSBBVURJVF9JUEM7CisJYXgtPmQudHlwZSA9IEFVRElUX0lQQ19TRVRfUEVSTTsKIAlheC0+ZC5uZXh0ID0gY29udGV4dC0+YXV4OwogCWNvbnRleHQtPmF1eCA9ICh2b2lkICopYXg7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggMThhZWExYi4uYWI4MWZkZCAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtNjE2LDEyICs2MTYsMTAgQEAKICAqIGN1cnJlbnQtPmNwdXNldCBpZiBhIHRhc2sgaGFzIGl0cyBtZW1vcnkgcGxhY2VtZW50IGNoYW5nZWQuCiAgKiBEbyBub3QgY2FsbCB0aGlzIHJvdXRpbmUgaWYgaW5faW50ZXJydXB0KCkuCiAgKgotICogQ2FsbCB3aXRob3V0IGNhbGxiYWNrX211dGV4IG9yIHRhc2tfbG9jaygpIGhlbGQuICBNYXkgYmUgY2FsbGVkCi0gKiB3aXRoIG9yIHdpdGhvdXQgbWFuYWdlX211dGV4IGhlbGQuICBEb2Vzbid0IG5lZWQgdGFza19sb2NrIHRvIGd1YXJkCi0gKiBhZ2FpbnN0IGFub3RoZXIgdGFzayBjaGFuZ2luZyBhIG5vbi1OVUxMIGNwdXNldCBwb2ludGVyIHRvIE5VTEwsCi0gKiBhcyB0aGF0IGlzIG9ubHkgZG9uZSBieSBhIHRhc2sgb24gaXRzZWxmLCBhbmQgaWYgdGhlIGN1cnJlbnQgdGFzawotICogaXMgaGVyZSwgaXQgaXMgbm90IHNpbXVsdGFuZW91c2x5IGluIHRoZSBleGl0IGNvZGUgTlVMTCdpbmcgaXRzCi0gKiBjcHVzZXQgcG9pbnRlci4gIFRoaXMgcm91dGluZSBhbHNvIG1pZ2h0IGFjcXVpcmUgY2FsbGJhY2tfbXV0ZXggYW5kCisgKiBDYWxsIHdpdGhvdXQgY2FsbGJhY2tfbXV0ZXggb3IgdGFza19sb2NrKCkgaGVsZC4gIE1heSBiZQorICogY2FsbGVkIHdpdGggb3Igd2l0aG91dCBtYW5hZ2VfbXV0ZXggaGVsZC4gIFRoYW5rcyBpbiBwYXJ0IHRvCisgKiAndGhlX3RvcF9jcHVzZXRfaGFjaycsIHRoZSB0YXNrcyBjcHVzZXQgcG9pbnRlciB3aWxsIG5ldmVyCisgKiBiZSBOVUxMLiAgVGhpcyByb3V0aW5lIGFsc28gbWlnaHQgYWNxdWlyZSBjYWxsYmFja19tdXRleCBhbmQKICAqIGN1cnJlbnQtPm1tLT5tbWFwX3NlbSBkdXJpbmcgY2FsbC4KICAqCiAgKiBSZWFkaW5nIGN1cnJlbnQtPmNwdXNldC0+bWVtc19nZW5lcmF0aW9uIGRvZXNuJ3QgbmVlZCB0YXNrX2xvY2sKQEAgLTgzNiw2ICs4MzQsNTUgQEAKIH0KIAogLyoKKyAqIGNwdXNldF9taWdyYXRlX21tCisgKgorICogICAgTWlncmF0ZSBtZW1vcnkgcmVnaW9uIGZyb20gb25lIHNldCBvZiBub2RlcyB0byBhbm90aGVyLgorICoKKyAqICAgIFRlbXBvcmFyaWxseSBzZXQgdGFza3MgbWVtc19hbGxvd2VkIHRvIHRhcmdldCBub2RlcyBvZiBtaWdyYXRpb24sCisgKiAgICBzbyB0aGF0IHRoZSBtaWdyYXRpb24gY29kZSBjYW4gYWxsb2NhdGUgcGFnZXMgb24gdGhlc2Ugbm9kZXMuCisgKgorICogICAgQ2FsbCBob2xkaW5nIG1hbmFnZV9tdXRleCwgc28gb3VyIGN1cnJlbnQtPmNwdXNldCB3b24ndCBjaGFuZ2UKKyAqICAgIGR1cmluZyB0aGlzIGNhbGwsIGFzIG1hbmFnZV9tdXRleCBob2xkcyBvZmYgYW55IGF0dGFjaF90YXNrKCkKKyAqICAgIGNhbGxzLiAgVGhlcmVmb3JlIHdlIGRvbid0IG5lZWQgdG8gdGFrZSB0YXNrX2xvY2sgYXJvdW5kIHRoZQorICogICAgY2FsbCB0byBndWFyYW50ZWVfb25saW5lX21lbXMoKSwgYXMgd2Uga25vdyBubyBvbmUgaXMgY2hhbmdpbmcKKyAqICAgIG91ciB0YXNrcyBjcHVzZXQuCisgKgorICogICAgSG9sZCBjYWxsYmFja19tdXRleCBhcm91bmQgdGhlIHR3byBtb2RpZmljYXRpb25zIG9mIG91ciB0YXNrcworICogICAgbWVtc19hbGxvd2VkIHRvIHN5bmNocm9uaXplIHdpdGggY3B1c2V0X21lbXNfYWxsb3dlZCgpLgorICoKKyAqICAgIFdoaWxlIHRoZSBtbV9zdHJ1Y3Qgd2UgYXJlIG1pZ3JhdGluZyBpcyB0eXBpY2FsbHkgZnJvbSBzb21lCisgKiAgICBvdGhlciB0YXNrLCB0aGUgdGFza19zdHJ1Y3QgbWVtc19hbGxvd2VkIHRoYXQgd2UgYXJlIGhhY2tpbmcKKyAqICAgIGlzIGZvciBvdXIgY3VycmVudCB0YXNrLCB3aGljaCBtdXN0IGFsbG9jYXRlIG5ldyBwYWdlcyBmb3IgdGhhdAorICogICAgbWlncmF0aW5nIG1lbW9yeSByZWdpb24uCisgKgorICogICAgV2UgY2FsbCBjcHVzZXRfdXBkYXRlX3Rhc2tfbWVtb3J5X3N0YXRlKCkgYmVmb3JlIGhhY2tpbmcKKyAqICAgIG91ciB0YXNrcyBtZW1zX2FsbG93ZWQsIHNvIHRoYXQgd2UgYXJlIGFzc3VyZWQgb2YgYmVpbmcgaW4KKyAqICAgIHN5bmMgd2l0aCBvdXIgdGFza3MgY3B1c2V0LCBhbmQgaW4gcGFydGljdWxhciwgY2FsbGJhY2tzIHRvCisgKiAgICBjcHVzZXRfdXBkYXRlX3Rhc2tfbWVtb3J5X3N0YXRlKCkgZnJvbSBuZXN0ZWQgcGFnZSBhbGxvY2F0aW9ucworICogICAgd29uJ3Qgc2VlIGFueSBtaXNtYXRjaCBvZiBvdXIgY3B1c2V0IGFuZCB0YXNrIG1lbXNfZ2VuZXJhdGlvbgorICogICAgdmFsdWVzLCBzbyB3b24ndCBvdmVyd3JpdGUgb3VyIGhhY2tlZCB0YXNrcyBtZW1zX2FsbG93ZWQKKyAqICAgIG5vZGVtYXNrLgorICovCisKK3N0YXRpYyB2b2lkIGNwdXNldF9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLAorCQkJCQkJCWNvbnN0IG5vZGVtYXNrX3QgKnRvKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCWNwdXNldF91cGRhdGVfdGFza19tZW1vcnlfc3RhdGUoKTsKKworCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKKwl0c2stPm1lbXNfYWxsb3dlZCA9ICp0bzsKKwltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKKworCWRvX21pZ3JhdGVfcGFnZXMobW0sIGZyb20sIHRvLCBNUE9MX01GX01PVkVfQUxMKTsKKworCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKKwlndWFyYW50ZWVfb25saW5lX21lbXModHNrLT5jcHVzZXQsICZ0c2stPm1lbXNfYWxsb3dlZCk7CisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7Cit9CisKKy8qCiAgKiBIYW5kbGUgdXNlciByZXF1ZXN0IHRvIGNoYW5nZSB0aGUgJ21lbXMnIG1lbW9yeSBwbGFjZW1lbnQKICAqIG9mIGEgY3B1c2V0LiAgTmVlZHMgdG8gdmFsaWRhdGUgdGhlIHJlcXVlc3QsIHVwZGF0ZSB0aGUKICAqIGNwdXNldHMgbWVtc19hbGxvd2VkIGFuZCBtZW1zX2dlbmVyYXRpb24sIGFuZCBmb3IgZWFjaApAQCAtOTQ3LDEwICs5OTQsOCBAQAogCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IG1tYXJyYXlbaV07CiAKIAkJbXBvbF9yZWJpbmRfbW0obW0sICZjcy0+bWVtc19hbGxvd2VkKTsKLQkJaWYgKG1pZ3JhdGUpIHsKLQkJCWRvX21pZ3JhdGVfcGFnZXMobW0sICZvbGRtZW0sICZjcy0+bWVtc19hbGxvd2VkLAotCQkJCQkJCU1QT0xfTUZfTU9WRV9BTEwpOwotCQl9CisJCWlmIChtaWdyYXRlKQorCQkJY3B1c2V0X21pZ3JhdGVfbW0obW0sICZvbGRtZW0sICZjcy0+bWVtc19hbGxvd2VkKTsKIAkJbW1wdXQobW0pOwogCX0KIApAQCAtMTE4NSwxMSArMTIzMCwxMSBAQAogCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKIAlpZiAobW0pIHsKIAkJbXBvbF9yZWJpbmRfbW0obW0sICZ0byk7CisJCWlmIChpc19tZW1vcnlfbWlncmF0ZShjcykpCisJCQljcHVzZXRfbWlncmF0ZV9tbShtbSwgJmZyb20sICZ0byk7CiAJCW1tcHV0KG1tKTsKIAl9CiAKLQlpZiAoaXNfbWVtb3J5X21pZ3JhdGUoY3MpKQotCQlkb19taWdyYXRlX3BhZ2VzKHRzay0+bW0sICZmcm9tLCAmdG8sIE1QT0xfTUZfTU9WRV9BTEwpOwogCXB1dF90YXNrX3N0cnVjdCh0c2spOwogCXN5bmNocm9uaXplX3JjdSgpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvbGRjcy0+Y291bnQpKQpAQCAtMjE4NiwxOSArMjIzMSwyNSBAQAogICogU28gb25seSBHRlBfS0VSTkVMIGFsbG9jYXRpb25zLCBpZiBhbGwgbm9kZXMgaW4gdGhlIGNwdXNldCBhcmUKICAqIHNob3J0IG9mIG1lbW9yeSwgbWlnaHQgcmVxdWlyZSB0YWtpbmcgdGhlIGNhbGxiYWNrX211dGV4IG11dGV4LgogICoKLSAqIFRoZSBmaXJzdCBsb29wIG92ZXIgdGhlIHpvbmVsaXN0IGluIG1tL3BhZ2VfYWxsb2MuYzpfX2FsbG9jX3BhZ2VzKCkKLSAqIGNhbGxzIGhlcmUgd2l0aCBfX0dGUF9IQVJEV0FMTCBhbHdheXMgc2V0IGluIGdmcF9tYXNrLCBlbmZvcmNpbmcKLSAqIGhhcmR3YWxsIGNwdXNldHMgLSBubyBhbGxvY2F0aW9uIG9uIGEgbm9kZSBvdXRzaWRlIHRoZSBjcHVzZXQgaXMKLSAqIGFsbG93ZWQgKHVubGVzcyBpbiBpbnRlcnJ1cHQsIG9mIGNvdXJzZSkuCisgKiBUaGUgZmlyc3QgY2FsbCBoZXJlIGZyb20gbW0vcGFnZV9hbGxvYzpnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkKKyAqIGhhcyBfX0dGUF9IQVJEV0FMTCBzZXQgaW4gZ2ZwX21hc2ssIGVuZm9yY2luZyBoYXJkd2FsbCBjcHVzZXRzLCBzbworICogbm8gYWxsb2NhdGlvbiBvbiBhIG5vZGUgb3V0c2lkZSB0aGUgY3B1c2V0IGlzIGFsbG93ZWQgKHVubGVzcyBpbgorICogaW50ZXJydXB0LCBvZiBjb3Vyc2UpLgogICoKLSAqIFRoZSBzZWNvbmQgbG9vcCBkb2Vzbid0IGV2ZW4gY2FsbCBoZXJlIGZvciBHRlBfQVRPTUlDIHJlcXVlc3RzCi0gKiAoaWYgdGhlIF9fYWxsb2NfcGFnZXMoKSBsb2NhbCB2YXJpYWJsZSAnd2FpdCcgaXMgc2V0KS4gIFRoYXQgY2hlY2sKLSAqIGFuZCB0aGUgY2hlY2tzIGJlbG93IGhhdmUgdGhlIGNvbWJpbmVkIGFmZmVjdCBpbiB0aGUgc2Vjb25kIGxvb3Agb2YKLSAqIHRoZSBfX2FsbG9jX3BhZ2VzKCkgcm91dGluZSB0aGF0OgorICogVGhlIHNlY29uZCBwYXNzIHRocm91Z2ggZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpIGRvZXNuJ3QgZXZlbiBjYWxsCisgKiBoZXJlIGZvciBHRlBfQVRPTUlDIGNhbGxzLiAgRm9yIHRob3NlIGNhbGxzLCB0aGUgX19hbGxvY19wYWdlcygpCisgKiB2YXJpYWJsZSAnd2FpdCcgaXMgbm90IHNldCwgYW5kIHRoZSBiaXQgQUxMT0NfQ1BVU0VUIGlzIG5vdCBzZXQKKyAqIGluIGFsbG9jX2ZsYWdzLiAgVGhhdCBsb2dpYyBhbmQgdGhlIGNoZWNrcyBiZWxvdyBoYXZlIHRoZSBjb21iaW5lZAorICogYWZmZWN0IHRoYXQ6CiAgKglpbl9pbnRlcnJ1cHQgLSBhbnkgbm9kZSBvayAoY3VycmVudCB0YXNrIGNvbnRleHQgaXJyZWxldmFudCkKICAqCUdGUF9BVE9NSUMgICAtIGFueSBub2RlIG9rCiAgKglHRlBfS0VSTkVMICAgLSBhbnkgbm9kZSBpbiBlbmNsb3NpbmcgbWVtX2V4Y2x1c2l2ZSBjcHVzZXQgb2sKICAqCUdGUF9VU0VSICAgICAtIG9ubHkgbm9kZXMgaW4gY3VycmVudCB0YXNrcyBtZW1zIGFsbG93ZWQgb2suCisgKgorICogUnVsZToKKyAqICAgIERvbid0IGNhbGwgY3B1c2V0X3pvbmVfYWxsb3dlZCgpIGlmIHlvdSBjYW4ndCBzbGVlcCwgdW5sZXNzIHlvdQorICogICAgcGFzcyBpbiB0aGUgX19HRlBfSEFSRFdBTEwgZmxhZyBzZXQgaW4gZ2ZwX2ZsYWcsIHdoaWNoIGRpc2FibGVzCisgKiAgICB0aGUgY29kZSB0aGF0IG1pZ2h0IHNjYW4gdXAgYW5jZXN0b3IgY3B1c2V0cyBhbmQgc2xlZXAuCiAgKiovCiAKIGludCBfX2NwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQpAQCAtMjIxMCw2ICsyMjYxLDcgQEAKIAlpZiAoaW5faW50ZXJydXB0KCkpCiAJCXJldHVybiAxOwogCW5vZGUgPSB6LT56b25lX3BnZGF0LT5ub2RlX2lkOworCW1pZ2h0X3NsZWVwX2lmKCEoZ2ZwX21hc2sgJiBfX0dGUF9IQVJEV0FMTCkpOwogCWlmIChub2RlX2lzc2V0KG5vZGUsIGN1cnJlbnQtPm1lbXNfYWxsb3dlZCkpCiAJCXJldHVybiAxOwogCWlmIChnZnBfbWFzayAmIF9fR0ZQX0hBUkRXQUxMKQkvKiBJZiBoYXJkd2FsbCByZXF1ZXN0LCBzdG9wIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IGJjMGVjNjcuLmU5NWI5MzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9waXBlX2ZzX2kuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPiAvKiBmb3IgYXVkaXRfZnJlZSgpICovCiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTU1LDcgKzU3LDcgQEAKIAkJZGV0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQpOwogCQlkZXRhY2hfcGlkKHAsIFBJRFRZUEVfU0lEKTsKIAotCQlsaXN0X2RlbF9pbml0KCZwLT50YXNrcyk7CisJCWxpc3RfZGVsX3JjdSgmcC0+dGFza3MpOwogCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKS0tOwogCX0KIAlsaXN0X2RlbF9yY3UoJnAtPnRocmVhZF9ncm91cCk7CkBAIC0xMjcsNiArMTI5LDExIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBkZWxheWVkX3B1dF90YXNrX3N0cnVjdChzdHJ1Y3QgcmN1X2hlYWQgKnJocCkKK3sKKwlwdXRfdGFza19zdHJ1Y3QoY29udGFpbmVyX29mKHJocCwgc3RydWN0IHRhc2tfc3RydWN0LCByY3UpKTsKK30KKwogdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICogcCkKIHsKIAlpbnQgemFwX2xlYWRlcjsKQEAgLTE2OCw3ICsxNzUsNyBAQAogCXNwaW5fdW5sb2NrKCZwLT5wcm9jX2xvY2spOwogCXByb2NfcGlkX2ZsdXNoKHByb2NfZGVudHJ5KTsKIAlyZWxlYXNlX3RocmVhZChwKTsKLQlwdXRfdGFza19zdHJ1Y3QocCk7CisJY2FsbF9yY3UoJnAtPnJjdSwgZGVsYXllZF9wdXRfdGFza19zdHJ1Y3QpOwogCiAJcCA9IGxlYWRlcjsKIAlpZiAodW5saWtlbHkoemFwX2xlYWRlcikpCkBAIC05MDQsNiArOTExLDggQEAKIAlpZiAodW5saWtlbHkodHNrLT5jb21wYXRfcm9idXN0X2xpc3QpKQogCQljb21wYXRfZXhpdF9yb2J1c3RfbGlzdCh0c2spOwogI2VuZGlmCisJaWYgKHVubGlrZWx5KHRzay0+YXVkaXRfY29udGV4dCkpCisJCWF1ZGl0X2ZyZWUodHNrKTsKIAlleGl0X21tKHRzayk7CiAKIAlleGl0X3NlbSh0c2spOwpAQCAtOTM2LDYgKzk0NSw5IEBACiAJaWYgKHRzay0+aW9fY29udGV4dCkKIAkJZXhpdF9pb19jb250ZXh0KCk7CiAKKwlpZiAodHNrLT5zcGxpY2VfcGlwZSkKKwkJX19mcmVlX3BpcGVfaW5mbyh0c2stPnNwbGljZV9waXBlKTsKKwogCS8qIFBGX0RFQUQgY2F1c2VzIGZpbmFsIHB1dF90YXNrX3N0cnVjdCBhZnRlciB3ZSBzY2hlZHVsZS4gKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlCVUdfT04odHNrLT5mbGFncyAmIFBGX0RFQUQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4dGFibGUuYyBiL2tlcm5lbC9leHRhYmxlLmMKaW5kZXggNzUwMWI1My4uN2ZlMjYyOCAxMDA2NDQKLS0tIGEva2VybmVsL2V4dGFibGUuYworKysgYi9rZXJuZWwvZXh0YWJsZS5jCkBAIC00MCw3ICs0MCw3IEBACiAJcmV0dXJuIGU7CiB9CiAKLXN0YXRpYyBpbnQgY29yZV9rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIGFkZHIpCitpbnQgY29yZV9rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3N0ZXh0ICYmCiAJICAgIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpX2V0ZXh0KQpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggYjNmN2ExYi4uYWM4MTAwZSAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0xMDgsMTYgKzEwOCwxMiBAQAogfQogRVhQT1JUX1NZTUJPTChmcmVlX3Rhc2spOwogCi12b2lkIF9fcHV0X3Rhc2tfc3RydWN0X2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKQordm9pZCBfX3B1dF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGNvbnRhaW5lcl9vZihyaHAsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcmN1KTsKLQogCVdBUk5fT04oISh0c2stPmV4aXRfc3RhdGUgJiAoRVhJVF9ERUFEIHwgRVhJVF9aT01CSUUpKSk7CiAJV0FSTl9PTihhdG9taWNfcmVhZCgmdHNrLT51c2FnZSkpOwogCVdBUk5fT04odHNrID09IGN1cnJlbnQpOwogCi0JaWYgKHVubGlrZWx5KHRzay0+YXVkaXRfY29udGV4dCkpCi0JCWF1ZGl0X2ZyZWUodHNrKTsKIAlzZWN1cml0eV90YXNrX2ZyZWUodHNrKTsKIAlmcmVlX3VpZCh0c2stPnVzZXIpOwogCXB1dF9ncm91cF9pbmZvKHRzay0+Z3JvdXBfaW5mbyk7CkBAIC0xODIsNiArMTc4LDcgQEAKIAlhdG9taWNfc2V0KCZ0c2stPnVzYWdlLDIpOwogCWF0b21pY19zZXQoJnRzay0+ZnNfZXhjbCwgMCk7CiAJdHNrLT5idHJhY2Vfc2VxID0gMDsKKwl0c2stPnNwbGljZV9waXBlID0gTlVMTDsKIAlyZXR1cm4gdHNrOwogfQogCkBAIC03MjEsNyArNzE4LDcgQEAKIAlmcmVlX2Zkc2V0IChuZXdfZmR0LT5vcGVuX2ZkcywgbmV3X2ZkdC0+bWF4X2Zkc2V0KTsKIAlmcmVlX2ZkX2FycmF5KG5ld19mZHQtPmZkLCBuZXdfZmR0LT5tYXhfZmRzKTsKIAlrbWVtX2NhY2hlX2ZyZWUoZmlsZXNfY2FjaGVwLCBuZXdmKTsKLQlnb3RvIG91dDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBjb3B5X2ZpbGVzKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaykKQEAgLTEyMDYsNyArMTIwMyw3IEBACiAJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCwgcHJvY2Vzc19ncm91cChwKSk7CiAJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfU0lELCBwLT5zaWduYWwtPnNlc3Npb24pOwogCi0JCQlsaXN0X2FkZF90YWlsKCZwLT50YXNrcywgJmluaXRfdGFzay50YXNrcyk7CisJCQlsaXN0X2FkZF90YWlsX3JjdSgmcC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOwogCQkJX19nZXRfY3B1X3Zhcihwcm9jZXNzX2NvdW50cykrKzsKIAkJfQogCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUElELCBwLT5waWQpOwpAQCAtMTMxMSwxNyArMTMwOCwxOSBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAlpbnQgdHJhY2UgPSAwOwotCWxvbmcgcGlkID0gYWxsb2NfcGlkbWFwKCk7CisJc3RydWN0IHBpZCAqcGlkID0gYWxsb2NfcGlkKCk7CisJbG9uZyBucjsKIAotCWlmIChwaWQgPCAwKQorCWlmICghcGlkKQogCQlyZXR1cm4gLUVBR0FJTjsKKwluciA9IHBpZC0+bnI7CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPnB0cmFjZSkpIHsKIAkJdHJhY2UgPSBmb3JrX3RyYWNlZmxhZyAoY2xvbmVfZmxhZ3MpOwogCQlpZiAodHJhY2UpCiAJCQljbG9uZV9mbGFncyB8PSBDTE9ORV9QVFJBQ0U7CiAJfQogCi0JcCA9IGNvcHlfcHJvY2VzcyhjbG9uZV9mbGFncywgc3RhY2tfc3RhcnQsIHJlZ3MsIHN0YWNrX3NpemUsIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0ciwgcGlkKTsKKwlwID0gY29weV9wcm9jZXNzKGNsb25lX2ZsYWdzLCBzdGFja19zdGFydCwgcmVncywgc3RhY2tfc2l6ZSwgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyLCBucik7CiAJLyoKIAkgKiBEbyB0aGlzIHByaW9yIHdha2luZyB1cCB0aGUgbmV3IHRocmVhZCAtIHRoZSB0aHJlYWQgcG9pbnRlcgogCSAqIG1pZ2h0IGdldCBpbnZhbGlkIGFmdGVyIHRoYXQgcG9pbnQsIGlmIHRoZSB0aHJlYWQgZXhpdHMgcXVpY2tseS4KQEAgLTEzNDgsNyArMTM0Nyw3IEBACiAJCQlwLT5zdGF0ZSA9IFRBU0tfU1RPUFBFRDsKIAogCQlpZiAodW5saWtlbHkgKHRyYWNlKSkgewotCQkJY3VycmVudC0+cHRyYWNlX21lc3NhZ2UgPSBwaWQ7CisJCQljdXJyZW50LT5wdHJhY2VfbWVzc2FnZSA9IG5yOwogCQkJcHRyYWNlX25vdGlmeSAoKHRyYWNlIDw8IDgpIHwgU0lHVFJBUCk7CiAJCX0KIApAQCAtMTM1OCwxMCArMTM1NywxMCBAQAogCQkJCXB0cmFjZV9ub3RpZnkgKChQVFJBQ0VfRVZFTlRfVkZPUktfRE9ORSA8PCA4KSB8IFNJR1RSQVApOwogCQl9CiAJfSBlbHNlIHsKLQkJZnJlZV9waWRtYXAocGlkKTsKLQkJcGlkID0gUFRSX0VSUihwKTsKKwkJZnJlZV9waWQocGlkKTsKKwkJbnIgPSBQVFJfRVJSKHApOwogCX0KLQlyZXR1cm4gcGlkOworCXJldHVybiBucjsKIH0KIAogI2lmbmRlZiBBUkNIX01JTl9NTVNUUlVDVF9BTElHTgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCA5YzliMmI2Li41Njk5YzUxIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtMTAzOSw5ICsxMDM5LDExIEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CiAJaW50IHZhbDIgPSAwOwogCi0JaWYgKChvcCA9PSBGVVRFWF9XQUlUKSAmJiB1dGltZSkgeworCWlmICh1dGltZSAmJiAob3AgPT0gRlVURVhfV0FJVCkpIHsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0LCB1dGltZSwgc2l6ZW9mKHQpKSAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICghdGltZXNwZWNfdmFsaWQoJnQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXRpbWVvdXQgPSB0aW1lc3BlY190b19qaWZmaWVzKCZ0KSArIDE7CiAJfQogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXhfY29tcGF0LmMgYi9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKaW5kZXggNTQyNzRmYy4uMWFiNmEwZSAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4X2NvbXBhdC5jCisrKyBiL2tlcm5lbC9mdXRleF9jb21wYXQuYwpAQCAtMTI5LDkgKzEyOSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCWludCB2YWwyID0gMDsKIAotCWlmICgob3AgPT0gRlVURVhfV0FJVCkgJiYgdXRpbWUpIHsKKwlpZiAodXRpbWUgJiYgKG9wID09IEZVVEVYX1dBSVQpKSB7CiAJCWlmIChnZXRfY29tcGF0X3RpbWVzcGVjKCZ0LCB1dGltZSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKCF0aW1lc3BlY192YWxpZCgmdCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJdGltZW91dCA9IHRpbWVzcGVjX3RvX2ppZmZpZXMoJnQpICsgMTsKIAl9CiAJaWYgKG9wID49IEZVVEVYX1JFUVVFVUUpCmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCAwMjM3YTU1Li4wMWZhMmFlIDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTQ1Niw2ICs0NTYsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfc3RhcnQpOwogCiAvKioKICAqIGhydGltZXJfdHJ5X3RvX2NhbmNlbCAtIHRyeSB0byBkZWFjdGl2YXRlIGEgdGltZXIKQEAgLTQ4NCw2ICs0ODUsNyBAQAogCXJldHVybiByZXQ7CiAKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfdHJ5X3RvX2NhbmNlbCk7CiAKIC8qKgogICogaHJ0aW1lcl9jYW5jZWwgLSBjYW5jZWwgYSB0aW1lciBhbmQgd2FpdCBmb3IgdGhlIGhhbmRsZXIgdG8gZmluaXNoLgpAQCAtNTAxLDggKzUwMywxMCBAQAogCiAJCWlmIChyZXQgPj0gMCkKIAkJCXJldHVybiByZXQ7CisJCWNwdV9yZWxheCgpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfY2FuY2VsKTsKIAogLyoqCiAgKiBocnRpbWVyX2dldF9yZW1haW5pbmcgLSBnZXQgcmVtYWluaW5nIHRpbWUgZm9yIHRoZSB0aW1lcgpAQCAtNTIxLDYgKzUyNSw3IEBACiAKIAlyZXR1cm4gcmVtOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9nZXRfcmVtYWluaW5nKTsKIAogI2lmZGVmIENPTkZJR19OT19JRExFX0haCiAvKioKQEAgLTU3OSw2ICs1ODQsNyBAQAogCXRpbWVyLT5iYXNlID0gJmJhc2VzW2Nsb2NrX2lkXTsKIAl0aW1lci0+bm9kZS5yYl9wYXJlbnQgPSBIUlRJTUVSX0lOQUNUSVZFOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9pbml0KTsKIAogLyoqCiAgKiBocnRpbWVyX2dldF9yZXMgLSBnZXQgdGhlIHRpbWVyIHJlc29sdXRpb24gZm9yIGEgY2xvY2sKQEAgLTU5OCw2ICs2MDQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX2dldF9yZXMpOwogCiAvKgogICogRXhwaXJlIHRoZSBwZXIgYmFzZSBocnRpbWVyLXF1ZXVlOgpAQCAtNjA2LDYgKzYxMyw5IEBACiB7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CiAKKwlpZiAoIWJhc2UtPmZpcnN0KQorCQlyZXR1cm47CisKIAlpZiAoYmFzZS0+Z2V0X3NvZnRpcnFfdGltZSkKIAkJYmFzZS0+c29mdGlycV90aW1lID0gYmFzZS0+Z2V0X3NvZnRpcnFfdGltZSgpOwogCkBAIC02NTUsMjkgKzY2NSwyOCBAQAogLyoKICAqIFNsZWVwIHJlbGF0ZWQgZnVuY3Rpb25zOgogICovCi0KLXN0cnVjdCBzbGVlcF9ocnRpbWVyIHsKLQlzdHJ1Y3QgaHJ0aW1lciB0aW1lcjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0JaW50IGV4cGlyZWQ7Ci19OwotCi1zdGF0aWMgaW50IG5hbm9zbGVlcF93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKQorc3RhdGljIGludCBocnRpbWVyX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7Ci0Jc3RydWN0IHNsZWVwX2hydGltZXIgKnQgPQotCQljb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBzbGVlcF9ocnRpbWVyLCB0aW1lcik7CisJc3RydWN0IGhydGltZXJfc2xlZXBlciAqdCA9CisJCWNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IGhydGltZXJfc2xlZXBlciwgdGltZXIpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IHQtPnRhc2s7CiAKLQl0LT5leHBpcmVkID0gMTsKLQl3YWtlX3VwX3Byb2Nlc3ModC0+dGFzayk7CisJdC0+dGFzayA9IE5VTEw7CisJaWYgKHRhc2spCisJCXdha2VfdXBfcHJvY2Vzcyh0YXNrKTsKIAogCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIAotc3RhdGljIGludCBfX3NjaGVkIGRvX25hbm9zbGVlcChzdHJ1Y3Qgc2xlZXBfaHJ0aW1lciAqdCwgZW51bSBocnRpbWVyX21vZGUgbW9kZSkKK3ZvaWQgaHJ0aW1lcl9pbml0X3NsZWVwZXIoc3RydWN0IGhydGltZXJfc2xlZXBlciAqc2wsIHRhc2tfdCAqdGFzaykKIHsKLQl0LT50aW1lci5mdW5jdGlvbiA9IG5hbm9zbGVlcF93YWtldXA7Ci0JdC0+dGFzayA9IGN1cnJlbnQ7Ci0JdC0+ZXhwaXJlZCA9IDA7CisJc2wtPnRpbWVyLmZ1bmN0aW9uID0gaHJ0aW1lcl93YWtldXA7CisJc2wtPnRhc2sgPSB0YXNrOworfQorCitzdGF0aWMgaW50IF9fc2NoZWQgZG9fbmFub3NsZWVwKHN0cnVjdCBocnRpbWVyX3NsZWVwZXIgKnQsIGVudW0gaHJ0aW1lcl9tb2RlIG1vZGUpCit7CisJaHJ0aW1lcl9pbml0X3NsZWVwZXIodCwgY3VycmVudCk7CiAKIAlkbyB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC02ODUsMTggKzY5NCwxNyBAQAogCiAJCXNjaGVkdWxlKCk7CiAKLQkJaWYgKHVubGlrZWx5KCF0LT5leHBpcmVkKSkgewotCQkJaHJ0aW1lcl9jYW5jZWwoJnQtPnRpbWVyKTsKLQkJCW1vZGUgPSBIUlRJTUVSX0FCUzsKLQkJfQotCX0gd2hpbGUgKCF0LT5leHBpcmVkICYmICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSk7CisJCWhydGltZXJfY2FuY2VsKCZ0LT50aW1lcik7CisJCW1vZGUgPSBIUlRJTUVSX0FCUzsKIAotCXJldHVybiB0LT5leHBpcmVkOworCX0gd2hpbGUgKHQtPnRhc2sgJiYgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKworCXJldHVybiB0LT50YXNrID09IE5VTEw7CiB9CiAKIHN0YXRpYyBsb25nIF9fc2NoZWQgbmFub3NsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQpCiB7Ci0Jc3RydWN0IHNsZWVwX2hydGltZXIgdDsKKwlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHQ7CiAJc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqcm10cDsKIAlzdHJ1Y3QgdGltZXNwZWMgdHU7CiAJa3RpbWVfdCB0aW1lOwpAQCAtNzI5LDcgKzczNyw3IEBACiAJCSAgICAgICBjb25zdCBlbnVtIGhydGltZXJfbW9kZSBtb2RlLCBjb25zdCBjbG9ja2lkX3QgY2xvY2tpZCkKIHsKIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydDsKLQlzdHJ1Y3Qgc2xlZXBfaHJ0aW1lciB0OworCXN0cnVjdCBocnRpbWVyX3NsZWVwZXIgdDsKIAlzdHJ1Y3QgdGltZXNwZWMgdHU7CiAJa3RpbWVfdCByZW07CiAKQEAgLTgzNCw3ICs4NDIsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBocnRpbWVyX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorc3RhdGljIGludCBocnRpbWVyX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlsb25nIGNwdSA9IChsb25nKWhjcHU7CkBAIC04NTgsNyArODY2LDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fZGV2aW5pdGRhdGEgaHJ0aW1lcnNfbmIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGhydGltZXJzX25iID0gewogCS5ub3RpZmllcl9jYWxsID0gaHJ0aW1lcl9jcHVfbm90aWZ5LAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9NYWtlZmlsZSBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKaW5kZXggMmIzM2Y4NS4uOWY3N2Y1MCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9NYWtlZmlsZQorKysgYi9rZXJuZWwvaXJxL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogCi1vYmoteSA6PSBoYW5kbGUubyBtYW5hZ2UubyBzcHVyaW91cy5vIG1pZ3JhdGlvbi5vCitvYmoteSA6PSBoYW5kbGUubyBtYW5hZ2UubyBzcHVyaW91cy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19JUlFfUFJPQkUpICs9IGF1dG9wcm9iZS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCitvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IGFjNzY2YWQuLjEyNzllMzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMjQ2LDggKzI0NiwxMCBAQAogCiBtaXNtYXRjaDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogaXJxIGhhbmRsZXIgbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JZHVtcF9zdGFjaygpOworCWlmICghKG5ldy0+ZmxhZ3MgJiBTQV9QUk9CRUlSUSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXJxIGhhbmRsZXIgbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWR1bXBfc3RhY2soKTsKKwl9CiAJcmV0dXJuIC1FQlVTWTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9taWdyYXRpb24uYyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKaW5kZXggNTJhODY1NS4uMTM0ZjlmMiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9taWdyYXRpb24uYworKysgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCkBAIC0xLDYgKzEsNSBAQAotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogdm9pZCBzZXRfcGVuZGluZ19pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCiB7CkBAIC02MSw1ICs2MCwzIEBACiAJfQogCWNwdXNfY2xlYXIocGVuZGluZ19pcnFfY3B1bWFza1tpcnFdKTsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCAxMTU2ZWIwLi4xZmJmNDY2IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTU4NSw2ICs1ODUsOSBAQAogCWludCBpOwogCiAJcnAtPmtwLnByZV9oYW5kbGVyID0gcHJlX2hhbmRsZXJfa3JldHByb2JlOworCXJwLT5rcC5wb3N0X2hhbmRsZXIgPSBOVUxMOworCXJwLT5rcC5mYXVsdF9oYW5kbGVyID0gTlVMTDsKKwlycC0+a3AuYnJlYWtfaGFuZGxlciA9IE5VTEw7CiAKIAkvKiBQcmUtYWxsb2NhdGUgbWVtb3J5IGZvciBtYXgga3JldHByb2JlIGluc3RhbmNlcyAqLwogCWlmIChycC0+bWF4YWN0aXZlIDw9IDApIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCBiZDA4OGE3Li5iYmUwNDg2IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC03MDUsMTQgKzcwNSwxNCBAQAogCiB2b2lkIHN5bWJvbF9wdXRfYWRkcih2b2lkICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1vZHVsZSAqbW9kYWRkcjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtb2RsaXN0X2xvY2ssIGZsYWdzKTsKLQlpZiAoIWtlcm5lbF90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpYWRkcikpCisJaWYgKGNvcmVfa2VybmVsX3RleHQoKHVuc2lnbmVkIGxvbmcpYWRkcikpCisJCXJldHVybjsKKworCWlmICghKG1vZGFkZHIgPSBtb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKWFkZHIpKSkKIAkJQlVHKCk7Ci0KLQltb2R1bGVfcHV0KG1vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpYWRkcikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1vZGxpc3RfbG9jaywgZmxhZ3MpOworCW1vZHVsZV9wdXQobW9kYWRkcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW1ib2xfcHV0X2FkZHIpOwogCkBAIC0xMjU0LDYgKzEyNTQsNyBAQAogCQl8fCBzdHJjbXAobGljZW5zZSwgIkdQTCB2MiIpID09IDAKIAkJfHwgc3RyY21wKGxpY2Vuc2UsICJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIikgPT0gMAogCQl8fCBzdHJjbXAobGljZW5zZSwgIkR1YWwgQlNEL0dQTCIpID09IDAKKwkJfHwgc3RyY21wKGxpY2Vuc2UsICJEdWFsIE1JVC9HUEwiKSA9PSAwCiAJCXx8IHN0cmNtcChsaWNlbnNlLCAiRHVhbCBNUEwvR1BMIikgPT0gMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggZjg5NWM3Yy4uY2MyYTRjOSAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTI3LDcgKzI3LDYgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGF1c2Vfb25fb29wc19sb2NrKTsKIAogaW50IHBhbmljX3RpbWVvdXQ7Ci1FWFBPUlRfU1lNQk9MKHBhbmljX3RpbWVvdXQpOwogCiBBVE9NSUNfTk9USUZJRVJfSEVBRChwYW5pY19ub3RpZmllcl9saXN0KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3BpZC5jIGIva2VybmVsL3BpZC5jCmluZGV4IGE5ZjJkZmQuLmVlYjgzNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9waWQuYworKysgYi9rZXJuZWwvcGlkLmMKQEAgLTI4LDggKzI4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAKICNkZWZpbmUgcGlkX2hhc2hmbihucikgaGFzaF9sb25nKCh1bnNpZ25lZCBsb25nKW5yLCBwaWRoYXNoX3NoaWZ0KQotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpwaWRfaGFzaFtQSURUWVBFX01BWF07CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnBpZF9oYXNoOwogc3RhdGljIGludCBwaWRoYXNoX3NoaWZ0Oworc3RhdGljIGttZW1fY2FjaGVfdCAqcGlkX2NhY2hlcDsKIAogaW50IHBpZF9tYXggPSBQSURfTUFYX0RFRkFVTFQ7CiBpbnQgbGFzdF9waWQ7CkBAIC02MCw5ICs2MSwyMiBAQAogc3RhdGljIHBpZG1hcF90IHBpZG1hcF9hcnJheVtQSURNQVBfRU5UUklFU10gPQogCSB7IFsgMCAuLi4gUElETUFQX0VOVFJJRVMtMSBdID0geyBBVE9NSUNfSU5JVChCSVRTX1BFUl9QQUdFKSwgTlVMTCB9IH07CiAKKy8qCisgKiBOb3RlOiBkaXNhYmxlIGludGVycnVwdHMgd2hpbGUgdGhlIHBpZG1hcF9sb2NrIGlzIGhlbGQgYXMgYW4KKyAqIGludGVycnVwdCBtaWdodCBjb21lIGluIGFuZCBkbyByZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spLgorICoKKyAqIElmIHdlIGRvbid0IGRpc2FibGUgaW50ZXJydXB0cyB0aGVyZSBpcyBhIG5hc3R5IGRlYWRsb2NrIGJldHdlZW4KKyAqIGRldGFjaF9waWQoKS0+ZnJlZV9waWQoKSBhbmQgYW5vdGhlciBjcHUgdGhhdCBkb2VzCisgKiBzcGluX2xvY2soJnBpZG1hcF9sb2NrKSBmb2xsb3dlZCBieSBhbiBpbnRlcnJ1cHQgcm91dGluZSB0aGF0IGRvZXMKKyAqIHJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisgKgorICogQWZ0ZXIgd2UgY2xlYW4gdXAgdGhlIHRhc2tsaXN0X2xvY2sgYW5kIGtub3cgdGhlcmUgYXJlIG5vCisgKiBpcnEgaGFuZGxlcnMgdGhhdCB0YWtlIGl0IHdlIGNhbiBsZWF2ZSB0aGUgaW50ZXJydXB0cyBlbmFibGVkLgorICogRm9yIG5vdyBpdCBpcyBlYXNpZXIgdG8gYmUgc2FmZSB0aGFuIHRvIHByb3ZlIGl0IGNhbid0IGhhcHBlbi4KKyAqLwogc3RhdGljICBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0socGlkbWFwX2xvY2spOwogCi1mYXN0Y2FsbCB2b2lkIGZyZWVfcGlkbWFwKGludCBwaWQpCitzdGF0aWMgZmFzdGNhbGwgdm9pZCBmcmVlX3BpZG1hcChpbnQgcGlkKQogewogCXBpZG1hcF90ICptYXAgPSBwaWRtYXBfYXJyYXkgKyBwaWQgLyBCSVRTX1BFUl9QQUdFOwogCWludCBvZmZzZXQgPSBwaWQgJiBCSVRTX1BFUl9QQUdFX01BU0s7CkBAIC03MSw3ICs4NSw3IEBACiAJYXRvbWljX2luYygmbWFwLT5ucl9mcmVlKTsKIH0KIAotaW50IGFsbG9jX3BpZG1hcCh2b2lkKQorc3RhdGljIGludCBhbGxvY19waWRtYXAodm9pZCkKIHsKIAlpbnQgaSwgb2Zmc2V0LCBtYXhfc2NhbiwgcGlkLCBsYXN0ID0gbGFzdF9waWQ7CiAJcGlkbWFwX3QgKm1hcDsKQEAgLTg5LDEyICsxMDMsMTIgQEAKIAkJCSAqIEZyZWUgdGhlIHBhZ2UgaWYgc29tZW9uZSByYWNlZCB3aXRoIHVzCiAJCQkgKiBpbnN0YWxsaW5nIGl0OgogCQkJICovCi0JCQlzcGluX2xvY2soJnBpZG1hcF9sb2NrKTsKKwkJCXNwaW5fbG9ja19pcnEoJnBpZG1hcF9sb2NrKTsKIAkJCWlmIChtYXAtPnBhZ2UpCiAJCQkJZnJlZV9wYWdlKHBhZ2UpOwogCQkJZWxzZQogCQkJCW1hcC0+cGFnZSA9ICh2b2lkICopcGFnZTsKLQkJCXNwaW5fdW5sb2NrKCZwaWRtYXBfbG9jayk7CisJCQlzcGluX3VubG9ja19pcnEoJnBpZG1hcF9sb2NrKTsKIAkJCWlmICh1bmxpa2VseSghbWFwLT5wYWdlKSkKIAkJCQlicmVhazsKIAkJfQpAQCAtMTMxLDEzICsxNDUsNzMgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0cnVjdCBwaWQgKiBmYXN0Y2FsbCBmaW5kX3BpZChlbnVtIHBpZF90eXBlIHR5cGUsIGludCBucikKK2Zhc3RjYWxsIHZvaWQgcHV0X3BpZChzdHJ1Y3QgcGlkICpwaWQpCit7CisJaWYgKCFwaWQpCisJCXJldHVybjsKKwlpZiAoKGF0b21pY19yZWFkKCZwaWQtPmNvdW50KSA9PSAxKSB8fAorCSAgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcGlkLT5jb3VudCkpCisJCWttZW1fY2FjaGVfZnJlZShwaWRfY2FjaGVwLCBwaWQpOworfQorCitzdGF0aWMgdm9pZCBkZWxheWVkX3B1dF9waWQoc3RydWN0IHJjdV9oZWFkICpyaHApCit7CisJc3RydWN0IHBpZCAqcGlkID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHBpZCwgcmN1KTsKKwlwdXRfcGlkKHBpZCk7Cit9CisKK2Zhc3RjYWxsIHZvaWQgZnJlZV9waWQoc3RydWN0IHBpZCAqcGlkKQoreworCS8qIFdlIGNhbiBiZSBjYWxsZWQgd2l0aCB3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jaykgaGVsZCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGlkbWFwX2xvY2ssIGZsYWdzKTsKKwlobGlzdF9kZWxfcmN1KCZwaWQtPnBpZF9jaGFpbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGlkbWFwX2xvY2ssIGZsYWdzKTsKKworCWZyZWVfcGlkbWFwKHBpZC0+bnIpOworCWNhbGxfcmN1KCZwaWQtPnJjdSwgZGVsYXllZF9wdXRfcGlkKTsKK30KKworc3RydWN0IHBpZCAqYWxsb2NfcGlkKHZvaWQpCit7CisJc3RydWN0IHBpZCAqcGlkOworCWVudW0gcGlkX3R5cGUgdHlwZTsKKwlpbnQgbnIgPSAtMTsKKworCXBpZCA9IGttZW1fY2FjaGVfYWxsb2MocGlkX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaWQpCisJCWdvdG8gb3V0OworCisJbnIgPSBhbGxvY19waWRtYXAoKTsKKwlpZiAobnIgPCAwKQorCQlnb3RvIG91dF9mcmVlOworCisJYXRvbWljX3NldCgmcGlkLT5jb3VudCwgMSk7CisJcGlkLT5uciA9IG5yOworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBQSURUWVBFX01BWDsgKyt0eXBlKQorCQlJTklUX0hMSVNUX0hFQUQoJnBpZC0+dGFza3NbdHlwZV0pOworCisJc3Bpbl9sb2NrX2lycSgmcGlkbWFwX2xvY2spOworCWhsaXN0X2FkZF9oZWFkX3JjdSgmcGlkLT5waWRfY2hhaW4sICZwaWRfaGFzaFtwaWRfaGFzaGZuKHBpZC0+bnIpXSk7CisJc3Bpbl91bmxvY2tfaXJxKCZwaWRtYXBfbG9jayk7CisKK291dDoKKwlyZXR1cm4gcGlkOworCitvdXRfZnJlZToKKwlrbWVtX2NhY2hlX2ZyZWUocGlkX2NhY2hlcCwgcGlkKTsKKwlwaWQgPSBOVUxMOworCWdvdG8gb3V0OworfQorCitzdHJ1Y3QgcGlkICogZmFzdGNhbGwgZmluZF9waWQoaW50IG5yKQogewogCXN0cnVjdCBobGlzdF9ub2RlICplbGVtOwogCXN0cnVjdCBwaWQgKnBpZDsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwaWQsIGVsZW0sCi0JCQkmcGlkX2hhc2hbdHlwZV1bcGlkX2hhc2hmbihucildLCBwaWRfY2hhaW4pIHsKKwkJCSZwaWRfaGFzaFtwaWRfaGFzaGZuKG5yKV0sIHBpZF9jaGFpbikgewogCQlpZiAocGlkLT5uciA9PSBucikKIAkJCXJldHVybiBwaWQ7CiAJfQpAQCAtMTQ2LDc3ICsyMjAsODIgQEAKIAogaW50IGZhc3RjYWxsIGF0dGFjaF9waWQodGFza190ICp0YXNrLCBlbnVtIHBpZF90eXBlIHR5cGUsIGludCBucikKIHsKLQlzdHJ1Y3QgcGlkICpwaWQsICp0YXNrX3BpZDsKKwlzdHJ1Y3QgcGlkX2xpbmsgKmxpbms7CisJc3RydWN0IHBpZCAqcGlkOwogCi0JdGFza19waWQgPSAmdGFzay0+cGlkc1t0eXBlXTsKLQlwaWQgPSBmaW5kX3BpZCh0eXBlLCBucik7Ci0JdGFza19waWQtPm5yID0gbnI7Ci0JaWYgKHBpZCA9PSBOVUxMKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZ0YXNrX3BpZC0+cGlkX2xpc3QpOwotCQlobGlzdF9hZGRfaGVhZF9yY3UoJnRhc2tfcGlkLT5waWRfY2hhaW4sCi0JCQkJICAgJnBpZF9oYXNoW3R5cGVdW3BpZF9oYXNoZm4obnIpXSk7Ci0JfSBlbHNlIHsKLQkJSU5JVF9ITElTVF9OT0RFKCZ0YXNrX3BpZC0+cGlkX2NoYWluKTsKLQkJbGlzdF9hZGRfdGFpbF9yY3UoJnRhc2tfcGlkLT5waWRfbGlzdCwgJnBpZC0+cGlkX2xpc3QpOwotCX0KKwlXQVJOX09OKCF0YXNrLT5waWQpOyAvKiB0byBiZSByZW1vdmVkIHNvb24gKi8KKwlXQVJOX09OKCFucik7IC8qIHRvIGJlIHJlbW92ZWQgc29vbiAqLworCisJbGluayA9ICZ0YXNrLT5waWRzW3R5cGVdOworCWxpbmstPnBpZCA9IHBpZCA9IGZpbmRfcGlkKG5yKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJmxpbmstPm5vZGUsICZwaWQtPnRhc2tzW3R5cGVdKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgaW50IF9fZGV0YWNoX3BpZCh0YXNrX3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSkKLXsKLQlzdHJ1Y3QgcGlkICpwaWQsICpwaWRfbmV4dDsKLQlpbnQgbnIgPSAwOwotCi0JcGlkID0gJnRhc2stPnBpZHNbdHlwZV07Ci0JaWYgKCFobGlzdF91bmhhc2hlZCgmcGlkLT5waWRfY2hhaW4pKSB7Ci0KLQkJaWYgKGxpc3RfZW1wdHkoJnBpZC0+cGlkX2xpc3QpKSB7Ci0JCQluciA9IHBpZC0+bnI7Ci0JCQlobGlzdF9kZWxfcmN1KCZwaWQtPnBpZF9jaGFpbik7Ci0JCX0gZWxzZSB7Ci0JCQlwaWRfbmV4dCA9IGxpc3RfZW50cnkocGlkLT5waWRfbGlzdC5uZXh0LAotCQkJCQkJc3RydWN0IHBpZCwgcGlkX2xpc3QpOwotCQkJLyogaW5zZXJ0IG5leHQgcGlkIGZyb20gcGlkX2xpc3QgdG8gaGFzaCAqLwotCQkJaGxpc3RfcmVwbGFjZV9yY3UoJnBpZC0+cGlkX2NoYWluLAotCQkJCQkgICZwaWRfbmV4dC0+cGlkX2NoYWluKTsKLQkJfQotCX0KLQotCWxpc3RfZGVsX3JjdSgmcGlkLT5waWRfbGlzdCk7Ci0JcGlkLT5uciA9IDA7Ci0KLQlyZXR1cm4gbnI7Ci19Ci0KIHZvaWQgZmFzdGNhbGwgZGV0YWNoX3BpZCh0YXNrX3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSkKIHsKLQlpbnQgdG1wLCBucjsKKwlzdHJ1Y3QgcGlkX2xpbmsgKmxpbms7CisJc3RydWN0IHBpZCAqcGlkOworCWludCB0bXA7CiAKLQluciA9IF9fZGV0YWNoX3BpZCh0YXNrLCB0eXBlKTsKLQlpZiAoIW5yKQotCQlyZXR1cm47CisJbGluayA9ICZ0YXNrLT5waWRzW3R5cGVdOworCXBpZCA9IGxpbmstPnBpZDsKKworCWhsaXN0X2RlbF9yY3UoJmxpbmstPm5vZGUpOworCWxpbmstPnBpZCA9IE5VTEw7CiAKIAlmb3IgKHRtcCA9IFBJRFRZUEVfTUFYOyAtLXRtcCA+PSAwOyApCi0JCWlmICh0bXAgIT0gdHlwZSAmJiBmaW5kX3BpZCh0bXAsIG5yKSkKKwkJaWYgKCFobGlzdF9lbXB0eSgmcGlkLT50YXNrc1t0bXBdKSkKIAkJCXJldHVybjsKIAotCWZyZWVfcGlkbWFwKG5yKTsKKwlmcmVlX3BpZChwaWQpOwogfQogCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBmYXN0Y2FsbCBwaWRfdGFzayhzdHJ1Y3QgcGlkICpwaWQsIGVudW0gcGlkX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlc3VsdCA9IE5VTEw7CisJaWYgKHBpZCkgeworCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3Q7CisJCWZpcnN0ID0gcmN1X2RlcmVmZXJlbmNlKHBpZC0+dGFza3NbdHlwZV0uZmlyc3QpOworCQlpZiAoZmlyc3QpCisJCQlyZXN1bHQgPSBobGlzdF9lbnRyeShmaXJzdCwgc3RydWN0IHRhc2tfc3RydWN0LCBwaWRzWyh0eXBlKV0ubm9kZSk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgb3Igd2l0aCB0YXNrbGlzdF9sb2NrIHJlYWQtaGVsZC4KKyAqLwogdGFza190ICpmaW5kX3Rhc2tfYnlfcGlkX3R5cGUoaW50IHR5cGUsIGludCBucikKIHsKLQlzdHJ1Y3QgcGlkICpwaWQ7Ci0KLQlwaWQgPSBmaW5kX3BpZCh0eXBlLCBucik7Ci0JaWYgKCFwaWQpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHBpZF90YXNrKCZwaWQtPnBpZF9saXN0LCB0eXBlKTsKKwlyZXR1cm4gcGlkX3Rhc2soZmluZF9waWQobnIpLCB0eXBlKTsKIH0KIAogRVhQT1JUX1NZTUJPTChmaW5kX3Rhc2tfYnlfcGlkX3R5cGUpOwogCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhc3RjYWxsIGdldF9waWRfdGFzayhzdHJ1Y3QgcGlkICpwaWQsIGVudW0gcGlkX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlc3VsdDsKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmVzdWx0ID0gcGlkX3Rhc2socGlkLCB0eXBlKTsKKwlpZiAocmVzdWx0KQorCQlnZXRfdGFza19zdHJ1Y3QocmVzdWx0KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgcGlkICpmaW5kX2dldF9waWQocGlkX3QgbnIpCit7CisJc3RydWN0IHBpZCAqcGlkOworCisJcmN1X3JlYWRfbG9jaygpOworCXBpZCA9IGdldF9waWQoZmluZF9waWQobnIpKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBwaWQ7Cit9CisKIC8qCiAgKiBUaGUgcGlkIGhhc2ggdGFibGUgaXMgc2NhbGVkIGFjY29yZGluZyB0byB0aGUgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUKICAqIG1hY2hpbmUuICBGcm9tIGEgbWluaW11bSBvZiAxNiBzbG90cyB1cCB0byA0MDk2IHNsb3RzIGF0IG9uZSBnaWdhYnl0ZSBvcgpAQCAtMjI0LDcgKzMwMyw3IEBACiAgKi8KIHZvaWQgX19pbml0IHBpZGhhc2hfaW5pdCh2b2lkKQogewotCWludCBpLCBqLCBwaWRoYXNoX3NpemU7CisJaW50IGksIHBpZGhhc2hfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIG1lZ2FieXRlcyA9IG5yX2tlcm5lbF9wYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKTsKIAogCXBpZGhhc2hfc2hpZnQgPSBtYXgoNCwgZmxzKG1lZ2FieXRlcyAqIDQpKTsKQEAgLTIzMywxNiArMzEyLDEzIEBACiAKIAlwcmludGsoIlBJRCBoYXNoIHRhYmxlIGVudHJpZXM6ICVkIChvcmRlcjogJWQsICVaZCBieXRlcylcbiIsCiAJCXBpZGhhc2hfc2l6ZSwgcGlkaGFzaF9zaGlmdCwKLQkJUElEVFlQRV9NQVggKiBwaWRoYXNoX3NpemUgKiBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKTsKKwkJcGlkaGFzaF9zaXplICogc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUElEVFlQRV9NQVg7IGkrKykgewotCQlwaWRfaGFzaFtpXSA9IGFsbG9jX2Jvb3RtZW0ocGlkaGFzaF9zaXplICoKLQkJCQkJc2l6ZW9mKCoocGlkX2hhc2hbaV0pKSk7Ci0JCWlmICghcGlkX2hhc2hbaV0pCi0JCQlwYW5pYygiQ291bGQgbm90IGFsbG9jIHBpZGhhc2ghXG4iKTsKLQkJZm9yIChqID0gMDsgaiA8IHBpZGhhc2hfc2l6ZTsgaisrKQotCQkJSU5JVF9ITElTVF9IRUFEKCZwaWRfaGFzaFtpXVtqXSk7Ci0JfQorCXBpZF9oYXNoID0gYWxsb2NfYm9vdG1lbShwaWRoYXNoX3NpemUgKglzaXplb2YoKihwaWRfaGFzaCkpKTsKKwlpZiAoIXBpZF9oYXNoKQorCQlwYW5pYygiQ291bGQgbm90IGFsbG9jIHBpZGhhc2ghXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGlkaGFzaF9zaXplOyBpKyspCisJCUlOSVRfSExJU1RfSEVBRCgmcGlkX2hhc2hbaV0pOwogfQogCiB2b2lkIF9faW5pdCBwaWRtYXBfaW5pdCh2b2lkKQpAQCAtMjUxLDQgKzMyNyw4IEBACiAJLyogUmVzZXJ2ZSBQSUQgMC4gV2UgbmV2ZXIgY2FsbCBmcmVlX3BpZG1hcCgwKSAqLwogCXNldF9iaXQoMCwgcGlkbWFwX2FycmF5LT5wYWdlKTsKIAlhdG9taWNfZGVjKCZwaWRtYXBfYXJyYXktPm5yX2ZyZWUpOworCisJcGlkX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwaWQiLCBzaXplb2Yoc3RydWN0IHBpZCksCisJCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwaWQpLAorCQkJCQlTTEFCX1BBTklDLCBOVUxMLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggOWZkOGQ0Zi4uY2UwZGZiOCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTQxLDcgKzQxLDcgQEAKIAlkZXBlbmRzIG9uIFBNICYmIFNXQVAgJiYgKFg4NiAmJiAoIVNNUCB8fCBTVVNQRU5EX1NNUCkpIHx8ICgoRlJWIHx8IFBQQzMyKSAmJiAhU01QKQogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSB0aGUgcG9zc2liaWxpdHkgb2Ygc3VzcGVuZGluZyB0aGUgbWFjaGluZS4KLQkgIEl0IGRvZXNuJ3QgbmVlZCBBUE0uCisJICBJdCBkb2Vzbid0IG5lZWQgQUNQSSBvciBBUE0uCiAJICBZb3UgbWF5IHN1c3BlbmQgeW91ciBtYWNoaW5lIGJ5ICdzd3N1c3AnIG9yICdzaHV0ZG93biAteiA8dGltZT4nIAogCSAgKHBhdGNoIGZvciBzeXN2aW5pdCBuZWVkZWQpLiAKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggZWUzNzFmNS4uYTZkOWVmNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAkJaWYgKCpzICYmICFzdHJuY21wKGJ1ZiwgKnMsIGxlbikpCiAJCQlicmVhazsKIAl9Ci0JaWYgKCpzKQorCWlmIChzdGF0ZSA8IFBNX1NVU1BFTkRfTUFYICYmICpzKQogCQllcnJvciA9IGVudGVyX3N0YXRlKHN0YXRlKTsKIAllbHNlCiAJCWVycm9yID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wbS5jIGIva2VybmVsL3Bvd2VyL3BtLmMKaW5kZXggMGY2OTA4Yy4uODQwNjNhYyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3BtLmMKKysrIGIva2VybmVsL3Bvd2VyL3BtLmMKQEAgLTc1LDI1ICs3NSw2IEBACiAJcmV0dXJuIGRldjsKIH0KIAotLyoqCi0gKglwbV91bnJlZ2lzdGVyIC0gIHVucmVnaXN0ZXIgYSBkZXZpY2Ugd2l0aCBwb3dlciBtYW5hZ2VtZW50Ci0gKglAZGV2OiBkZXZpY2UgdG8gdW5yZWdpc3RlcgotICoKLSAqCVJlbW92ZSBhIGRldmljZSBmcm9tIHRoZSBwb3dlciBtYW5hZ2VtZW50IG5vdGlmaWNhdGlvbiBsaXN0cy4gVGhlCi0gKglkZXYgcGFzc2VkIG11c3QgYmUgYSBoYW5kbGUgcHJldmlvdXNseSByZXR1cm5lZCBieSBwbV9yZWdpc3Rlci4KLSAqLwotIAotdm9pZCBwbV91bnJlZ2lzdGVyKHN0cnVjdCBwbV9kZXYgKmRldikKLXsKLQlpZiAoZGV2KSB7Ci0JCW11dGV4X2xvY2soJnBtX2RldnNfbG9jayk7Ci0JCWxpc3RfZGVsKCZkZXYtPmVudHJ5KTsKLQkJbXV0ZXhfdW5sb2NrKCZwbV9kZXZzX2xvY2spOwotCi0JCWtmcmVlKGRldik7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBfX3BtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KQogewogCWlmIChkZXYpIHsKQEAgLTI1OCw3ICsyMzksNiBAQAogfQogCiBFWFBPUlRfU1lNQk9MKHBtX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wocG1fdW5yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKHBtX3VucmVnaXN0ZXJfYWxsKTsKIEVYUE9SVF9TWU1CT0wocG1fc2VuZF9hbGwpOwogRVhQT1JUX1NZTUJPTChwbV9hY3RpdmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggOGFjN2MzNWYuLmIyYTVmNjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKKysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtMjYsOCArMjYsNyBAQAogCSAgICAocC0+ZmxhZ3MgJiBQRl9OT0ZSRUVaRSkgfHwKIAkgICAgKHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHx8CiAJICAgIChwLT5leGl0X3N0YXRlID09IEVYSVRfREVBRCkgfHwKLQkgICAgKHAtPnN0YXRlID09IFRBU0tfU1RPUFBFRCkgfHwKLQkgICAgKHAtPnN0YXRlID09IFRBU0tfVFJBQ0VEKSkKKwkgICAgKHAtPnN0YXRlID09IFRBU0tfU1RPUFBFRCkpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCBjNTg2M2QwLi4zZWVlZGJiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMjQwLDE0ICsyNDAsMTUgQEAKICAqCWZyZWVfcGFnZWRpciAtIGZyZWUgcGFnZXMgYWxsb2NhdGVkIHdpdGggYWxsb2NfcGFnZWRpcigpCiAgKi8KIAotc3RhdGljIHZvaWQgZnJlZV9wYWdlZGlyKHN0cnVjdCBwYmUgKnBibGlzdCkKK3N0YXRpYyB2b2lkIGZyZWVfcGFnZWRpcihzdHJ1Y3QgcGJlICpwYmxpc3QsIGludCBjbGVhcl9ub3NhdmVfZnJlZSkKIHsKIAlzdHJ1Y3QgcGJlICpwYmU7CiAKIAl3aGlsZSAocGJsaXN0KSB7CiAJCXBiZSA9IChwYmxpc3QgKyBQQl9QQUdFX1NLSVApLT5uZXh0OwogCQlDbGVhclBhZ2VOb3NhdmUodmlydF90b19wYWdlKHBibGlzdCkpOwotCQlDbGVhclBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShwYmxpc3QpKTsKKwkJaWYgKGNsZWFyX25vc2F2ZV9mcmVlKQorCQkJQ2xlYXJQYWdlTm9zYXZlRnJlZSh2aXJ0X3RvX3BhZ2UocGJsaXN0KSk7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYmxpc3QpOwogCQlwYmxpc3QgPSBwYmU7CiAJfQpAQCAtMzg5LDcgKzM5MCw3IEBACiAJCXBiZS0+bmV4dCA9IGFsbG9jX2ltYWdlX3BhZ2UoZ2ZwX21hc2ssIHNhZmVfbmVlZGVkKTsKIAl9CiAJaWYgKCFwYmUpIHsgLyogZ2V0X3plcm9lZF9wYWdlKCkgZmFpbGVkICovCi0JCWZyZWVfcGFnZWRpcihwYmxpc3QpOworCQlmcmVlX3BhZ2VkaXIocGJsaXN0LCAxKTsKIAkJcGJsaXN0ID0gTlVMTDsKICAgICAgICAgfSBlbHNlCiAJCWNyZWF0ZV9wYmVfbGlzdChwYmxpc3QsIG5yX3BhZ2VzKTsKQEAgLTczNiw3ICs3MzcsNyBAQAogCQlwYmxpc3QgPSBhbGxvY19wYWdlZGlyKG5yX2NvcHlfcGFnZXMsIEdGUF9BVE9NSUMsIDEpOwogCQlpZiAocGJsaXN0KQogCQkJY29weV9wYWdlX2JhY2t1cF9saXN0KHBibGlzdCwgcCk7Ci0JCWZyZWVfcGFnZWRpcihwKTsKKwkJZnJlZV9wYWdlZGlyKHAsIDApOwogCQlpZiAoIXBibGlzdCkKIAkJCWVycm9yID0gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggOGNjMTk0My4uYzA1NmYzMyAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMzYwLDggKzM2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBjdXJfaW5kZXgsIHN0YXJ0X3ByaW50OwogCXN0YXRpYyBpbnQgbXNnX2xldmVsID0gLTE7CiAKLQlpZiAoKChsb25nKShzdGFydCAtIGVuZCkpID4gMCkKLQkJQlVHKCk7CisJQlVHX09OKCgobG9uZykoc3RhcnQgLSBlbmQpKSA+IDApOwogCiAJY3VyX2luZGV4ID0gc3RhcnQ7CiAJc3RhcnRfcHJpbnQgPSBzdGFydDsKQEAgLTcwOCw4ICs3MDcsNyBAQAogICovCiB2b2lkIGFjcXVpcmVfY29uc29sZV9zZW0odm9pZCkKIHsKLQlpZiAoaW5faW50ZXJydXB0KCkpCi0JCUJVRygpOworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAJZG93bigmY29uc29sZV9zZW0pOwogCWNvbnNvbGVfbG9ja2VkID0gMTsKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDE7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJvZmlsZS5jIGIva2VybmVsL3Byb2ZpbGUuYwppbmRleCA1YTczMGZkLi42OGFmZTEyIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJvZmlsZS5jCisrKyBiL2tlcm5lbC9wcm9maWxlLmMKQEAgLTI5OSw3ICsyOTksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwcm9maWxlX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmluZm8sCitzdGF0aWMgaW50IHByb2ZpbGVfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqaW5mbywKIAkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKl9fY3B1KQogewogCWludCBub2RlLCBjcHUgPSAodW5zaWduZWQgbG9uZylfX2NwdTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4NmE3ZjZjLi45MjFjMjJhIDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0zMCw4ICszMCw3IEBACiAgKi8KIHZvaWQgX19wdHJhY2VfbGluayh0YXNrX3QgKmNoaWxkLCB0YXNrX3QgKm5ld19wYXJlbnQpCiB7Ci0JaWYgKCFsaXN0X2VtcHR5KCZjaGlsZC0+cHRyYWNlX2xpc3QpKQotCQlCVUcoKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmNoaWxkLT5wdHJhY2VfbGlzdCkpOwogCWlmIChjaGlsZC0+cGFyZW50ID09IG5ld19wYXJlbnQpCiAJCXJldHVybjsKIAlsaXN0X2FkZCgmY2hpbGQtPnB0cmFjZV9saXN0LCAmY2hpbGQtPnBhcmVudC0+cHRyYWNlX2NoaWxkcmVuKTsKQEAgLTU3LDEwICs1Niw2IEBACiAJCQlzaWduYWxfd2FrZV91cChjaGlsZCwgMSk7CiAJCX0KIAl9Ci0JaWYgKGNoaWxkLT5zaWduYWwtPmZsYWdzICYgU0lHTkFMX0dST1VQX0VYSVQpIHsKLQkJc2lnYWRkc2V0KCZjaGlsZC0+cGVuZGluZy5zaWduYWwsIFNJR0tJTEwpOwotCQlzaWduYWxfd2FrZV91cChjaGlsZCwgMSk7Ci0JfQogCXNwaW5fdW5sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiB9CiAKQEAgLTgyLDcgKzc3LDggQEAKIAkJYWRkX3BhcmVudChjaGlsZCk7CiAJfQogCi0JcHRyYWNlX3VudHJhY2UoY2hpbGQpOworCWlmIChjaGlsZC0+c3RhdGUgPT0gVEFTS19UUkFDRUQpCisJCXB0cmFjZV91bnRyYWNlKGNoaWxkKTsKIH0KIAogLyoKQEAgLTE1MiwxMiArMTQ4LDM0IEBACiBpbnQgcHRyYWNlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJaW50IHJldHZhbDsKLQl0YXNrX2xvY2sodGFzayk7CisKIAlyZXR2YWwgPSAtRVBFUk07CiAJaWYgKHRhc2stPnBpZCA8PSAxKQotCQlnb3RvIGJhZDsKKwkJZ290byBvdXQ7CiAJaWYgKHRhc2stPnRnaWQgPT0gY3VycmVudC0+dGdpZCkKLQkJZ290byBiYWQ7CisJCWdvdG8gb3V0OworCityZXBlYXQ6CisJLyoKKwkgKiBOYXN0eSwgbmFzdHkuCisJICoKKwkgKiBXZSB3YW50IHRvIGhvbGQgYm90aCB0aGUgdGFzay1sb2NrIGFuZCB0aGUKKwkgKiB0YXNrbGlzdF9sb2NrIGZvciB3cml0aW5nIGF0IHRoZSBzYW1lIHRpbWUuCisJICogQnV0IHRoYXQncyBhZ2FpbnN0IHRoZSBydWxlcyAodGFza2xpc3RfbG9jaworCSAqIGlzIHRha2VuIGZvciByZWFkaW5nIGJ5IGludGVycnVwdHMgb24gb3RoZXIKKwkgKiBjcHUncyB0aGF0IG1heSBoYXZlIHRhc2tfbG9jaykuCisJICovCisJdGFza19sb2NrKHRhc2spOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKCF3cml0ZV90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXRhc2tfdW5sb2NrKHRhc2spOworCQlkbyB7CisJCQljcHVfcmVsYXgoKTsKKwkJfSB3aGlsZSAoIXdyaXRlX2Nhbl9sb2NrKCZ0YXNrbGlzdF9sb2NrKSk7CisJCWdvdG8gcmVwZWF0OworCX0KKwogCS8qIHRoZSBzYW1lIHByb2Nlc3MgY2Fubm90IGJlIGF0dGFjaGVkIG1hbnkgdGltZXMgKi8KIAlpZiAodGFzay0+cHRyYWNlICYgUFRfUFRSQUNFRCkKIAkJZ290byBiYWQ7CkBAIC0xNzAsMTcgKzE4OCwxNSBAQAogCQkJCSAgICAgID8gUFRfQVRUQUNIRUQgOiAwKTsKIAlpZiAoY2FwYWJsZShDQVBfU1lTX1BUUkFDRSkpCiAJCXRhc2stPnB0cmFjZSB8PSBQVF9QVFJBQ0VfQ0FQOwotCXRhc2tfdW5sb2NrKHRhc2spOwogCi0Jd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCV9fcHRyYWNlX2xpbmsodGFzaywgY3VycmVudCk7Ci0Jd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKIAlmb3JjZV9zaWdfc3BlY2lmaWMoU0lHU1RPUCwgdGFzayk7Ci0JcmV0dXJuIDA7CiAKIGJhZDoKKwl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAl0YXNrX3VubG9jayh0YXNrKTsKK291dDoKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00MjEsMjEgKzQzNywyMiBAQAogICovCiBpbnQgcHRyYWNlX3RyYWNlbWUodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRVBFUk07CiAKIAkvKgogCSAqIEFyZSB3ZSBhbHJlYWR5IGJlaW5nIHRyYWNlZD8KIAkgKi8KLQlpZiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkKLQkJcmV0dXJuIC1FUEVSTTsKLQlyZXQgPSBzZWN1cml0eV9wdHJhY2UoY3VycmVudC0+cGFyZW50LCBjdXJyZW50KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gLUVQRVJNOwotCS8qCi0JICogU2V0IHRoZSBwdHJhY2UgYml0IGluIHRoZSBwcm9jZXNzIHB0cmFjZSBmbGFncy4KLQkgKi8KLQljdXJyZW50LT5wdHJhY2UgfD0gUFRfUFRSQUNFRDsKLQlyZXR1cm4gMDsKKwl0YXNrX2xvY2soY3VycmVudCk7CisJaWYgKCEoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpIHsKKwkJcmV0ID0gc2VjdXJpdHlfcHRyYWNlKGN1cnJlbnQtPnBhcmVudCwgY3VycmVudCk7CisJCS8qCisJCSAqIFNldCB0aGUgcHRyYWNlIGJpdCBpbiB0aGUgcHJvY2VzcyBwdHJhY2UgZmxhZ3MuCisJCSAqLworCQlpZiAoIXJldCkKKwkJCWN1cnJlbnQtPnB0cmFjZSB8PSBQVF9QVFJBQ0VEOworCX0KKwl0YXNrX3VubG9jayhjdXJyZW50KTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggMTM0NThiYi4uMjA1OGY4OCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTQ3OSwxMiArNDc5LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGltbWVkaWF0ZSBSQ1UtcmVsYXRlZCB3b3JrIHRvIGJlIGRvbmUKKyAqIGJ5IHRoZSBjdXJyZW50IENQVSwgcmV0dXJuaW5nIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlCisgKiBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KKyAqLwogaW50IHJjdV9wZW5kaW5nKGludCBjcHUpCiB7CiAJcmV0dXJuIF9fcmN1X3BlbmRpbmcoJnJjdV9jdHJsYmxrLCAmcGVyX2NwdShyY3VfZGF0YSwgY3B1KSkgfHwKIAkJX19yY3VfcGVuZGluZygmcmN1X2JoX2N0cmxibGssICZwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpKTsKIH0KIAorLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZnV0dXJlIFJDVS1yZWxhdGVkIHdvcmsgd2lsbCBuZWVkIHRvIGJlIGRvbmUKKyAqIGJ5IHRoZSBjdXJyZW50IENQVSwgZXZlbiBpZiBub25lIG5lZWQgYmUgZG9uZSBpbW1lZGlhdGVseSwgcmV0dXJuaW5nCisgKiAxIGlmIHNvLiAgVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtCisgKiBhbiBleHBvcnRlZCBtZW1iZXIgb2YgdGhlIFJDVSBBUEkuCisgKi8KK2ludCByY3VfbmVlZHNfY3B1KGludCBjcHUpCit7CisJc3RydWN0IHJjdV9kYXRhICpyZHAgPSAmcGVyX2NwdShyY3VfZGF0YSwgY3B1KTsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcF9iaCA9ICZwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpOworCisJcmV0dXJuICghIXJkcC0+Y3VybGlzdCB8fCAhIXJkcF9iaC0+Y3VybGlzdCB8fCByY3VfcGVuZGluZyhjcHUpKTsKK30KKwogdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQogewogCWlmICh1c2VyIHx8IApAQCAtNTIwLDcgKzUzOSw3IEBACiAJdGFza2xldF9pbml0KCZwZXJfY3B1KHJjdV90YXNrbGV0LCBjcHUpLCByY3VfcHJvY2Vzc19jYWxsYmFja3MsIDBVTCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgCitzdGF0aWMgaW50IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlsb25nIGNwdSA9IChsb25nKWhjcHU7CkBAIC01MzcsNyArNTU2LDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fZGV2aW5pdGRhdGEgcmN1X25iID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayByY3VfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSByY3VfY3B1X25vdGlmeSwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggYTllY2FjMy4uYzEzZjFiZCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTY2Nyw5ICs2NjcsMTMgQEAKIC8qCiAgKiBfX2FjdGl2YXRlX3Rhc2sgLSBtb3ZlIGEgdGFzayB0byB0aGUgcnVucXVldWUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3Rhc2sodGFza190ICpwLCBydW5xdWV1ZV90ICpycSkKK3N0YXRpYyB2b2lkIF9fYWN0aXZhdGVfdGFzayh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxKQogewotCWVucXVldWVfdGFzayhwLCBycS0+YWN0aXZlKTsKKwlwcmlvX2FycmF5X3QgKnRhcmdldCA9IHJxLT5hY3RpdmU7CisKKwlpZiAoYmF0Y2hfdGFzayhwKSkKKwkJdGFyZ2V0ID0gcnEtPmV4cGlyZWQ7CisJZW5xdWV1ZV90YXNrKHAsIHRhcmdldCk7CiAJcnEtPm5yX3J1bm5pbmcrKzsKIH0KIApAQCAtNjg4LDcgKzY5Miw3IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIF9fc2xlZXBfdGltZSA9IG5vdyAtIHAtPnRpbWVzdGFtcDsKIAl1bnNpZ25lZCBsb25nIHNsZWVwX3RpbWU7CiAKLQlpZiAodW5saWtlbHkocC0+cG9saWN5ID09IFNDSEVEX0JBVENIKSkKKwlpZiAoYmF0Y2hfdGFzayhwKSkKIAkJc2xlZXBfdGltZSA9IDA7CiAJZWxzZSB7CiAJCWlmIChfX3NsZWVwX3RpbWUgPiBOU19NQVhfU0xFRVBfQVZHKQpAQCAtNzAwLDIxICs3MDQsMjUgQEAKIAlpZiAobGlrZWx5KHNsZWVwX3RpbWUgPiAwKSkgewogCQkvKgogCQkgKiBVc2VyIHRhc2tzIHRoYXQgc2xlZXAgYSBsb25nIHRpbWUgYXJlIGNhdGVnb3Jpc2VkIGFzCi0JCSAqIGlkbGUgYW5kIHdpbGwgZ2V0IGp1c3QgaW50ZXJhY3RpdmUgc3RhdHVzIHRvIHN0YXkgYWN0aXZlICYKLQkJICogcHJldmVudCB0aGVtIHN1ZGRlbmx5IGJlY29taW5nIGNwdSBob2dzIGFuZCBzdGFydmluZwotCQkgKiBvdGhlciBwcm9jZXNzZXMuCisJCSAqIGlkbGUuIFRoZXkgd2lsbCBvbmx5IGhhdmUgdGhlaXIgc2xlZXBfYXZnIGluY3JlYXNlZCB0byBhCisJCSAqIGxldmVsIHRoYXQgbWFrZXMgdGhlbSBqdXN0IGludGVyYWN0aXZlIHByaW9yaXR5IHRvIHN0YXkKKwkJICogYWN0aXZlIHlldCBwcmV2ZW50IHRoZW0gc3VkZGVubHkgYmVjb21pbmcgY3B1IGhvZ3MgYW5kCisJCSAqIHN0YXJ2aW5nIG90aGVyIHByb2Nlc3Nlcy4KIAkJICovCi0JCWlmIChwLT5tbSAmJiBwLT5hY3RpdmF0ZWQgIT0gLTEgJiYKLQkJCXNsZWVwX3RpbWUgPiBJTlRFUkFDVElWRV9TTEVFUChwKSkgewotCQkJCXAtPnNsZWVwX2F2ZyA9IEpJRkZJRVNfVE9fTlMoTUFYX1NMRUVQX0FWRyAtCi0JCQkJCQlERUZfVElNRVNMSUNFKTsKKwkJaWYgKHAtPm1tICYmIHNsZWVwX3RpbWUgPiBJTlRFUkFDVElWRV9TTEVFUChwKSkgeworCQkJCXVuc2lnbmVkIGxvbmcgY2VpbGluZzsKKworCQkJCWNlaWxpbmcgPSBKSUZGSUVTX1RPX05TKE1BWF9TTEVFUF9BVkcgLQorCQkJCQlERUZfVElNRVNMSUNFKTsKKwkJCQlpZiAocC0+c2xlZXBfYXZnIDwgY2VpbGluZykKKwkJCQkJcC0+c2xlZXBfYXZnID0gY2VpbGluZzsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBUYXNrcyB3YWtpbmcgZnJvbSB1bmludGVycnVwdGlibGUgc2xlZXAgYXJlCiAJCQkgKiBsaW1pdGVkIGluIHRoZWlyIHNsZWVwX2F2ZyByaXNlIGFzIHRoZXkKIAkJCSAqIGFyZSBsaWtlbHkgdG8gYmUgd2FpdGluZyBvbiBJL08KIAkJCSAqLwotCQkJaWYgKHAtPmFjdGl2YXRlZCA9PSAtMSAmJiBwLT5tbSkgeworCQkJaWYgKHAtPnNsZWVwX3R5cGUgPT0gU0xFRVBfTk9OSU5URVJBQ1RJVkUgJiYgcC0+bW0pIHsKIAkJCQlpZiAocC0+c2xlZXBfYXZnID49IElOVEVSQUNUSVZFX1NMRUVQKHApKQogCQkJCQlzbGVlcF90aW1lID0gMDsKIAkJCQllbHNlIGlmIChwLT5zbGVlcF9hdmcgKyBzbGVlcF90aW1lID49CkBAIC03NjksNyArNzc3LDcgQEAKIAkgKiBUaGlzIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQncyBub3QgYW4gdW5pbnRlcnJ1cHRpYmxlIHRhc2sKIAkgKiB0aGF0IGlzIG5vdyB3YWtpbmcgdXAuCiAJICovCi0JaWYgKCFwLT5hY3RpdmF0ZWQpIHsKKwlpZiAocC0+c2xlZXBfdHlwZSA9PSBTTEVFUF9OT1JNQUwpIHsKIAkJLyoKIAkJICogVGFza3Mgd2hpY2ggd2VyZSB3b2tlbiB1cCBieSBpbnRlcnJ1cHRzIChpZS4gaHcgZXZlbnRzKQogCQkgKiBhcmUgbW9zdCBsaWtlbHkgb2YgaW50ZXJhY3RpdmUgbmF0dXJlLiBTbyB3ZSBnaXZlIHRoZW0KQEAgLTc3OCwxMyArNzg2LDEzIEBACiAJCSAqIG9uIGEgQ1BVLCBmaXJzdCB0aW1lIGFyb3VuZDoKIAkJICovCiAJCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJCXAtPmFjdGl2YXRlZCA9IDI7CisJCQlwLT5zbGVlcF90eXBlID0gU0xFRVBfSU5URVJSVVBURUQ7CiAJCWVsc2UgewogCQkJLyoKIAkJCSAqIE5vcm1hbCBmaXJzdC10aW1lIHdha2V1cHMgZ2V0IGEgY3JlZGl0IHRvbyBmb3IKIAkJCSAqIG9uLXJ1bnF1ZXVlIHRpbWUsIGJ1dCBpdCB3aWxsIGJlIHdlaWdodGVkIGRvd246CiAJCQkgKi8KLQkJCXAtPmFjdGl2YXRlZCA9IDE7CisJCQlwLT5zbGVlcF90eXBlID0gU0xFRVBfSU5URVJBQ1RJVkU7CiAJCX0KIAl9CiAJcC0+dGltZXN0YW1wID0gbm93OwpAQCAtMTI3MiwxOSArMTI4MCwxOSBAQAogCQkgKiBUYXNrcyBvbiBpbnZvbHVudGFyeSBzbGVlcCBkb24ndCBlYXJuCiAJCSAqIHNsZWVwX2F2ZyBiZXlvbmQganVzdCBpbnRlcmFjdGl2ZSBzdGF0ZS4KIAkJICovCi0JCXAtPmFjdGl2YXRlZCA9IC0xOwotCX0KKwkJcC0+c2xlZXBfdHlwZSA9IFNMRUVQX05PTklOVEVSQUNUSVZFOworCX0gZWxzZQogCiAJLyoKIAkgKiBUYXNrcyB0aGF0IGhhdmUgbWFya2VkIHRoZWlyIHNsZWVwIGFzIG5vbmludGVyYWN0aXZlIGdldAotCSAqIHdva2VuIHVwIHdpdGhvdXQgdXBkYXRpbmcgdGhlaXIgc2xlZXAgYXZlcmFnZS4gKGkuZS4gdGhlaXIKLQkgKiBzbGVlcCBpcyBoYW5kbGVkIGluIGEgcHJpb3JpdHktbmV1dHJhbCBtYW5uZXIsIG5vIHByaW9yaXR5Ci0JICogYm9vc3QgYW5kIG5vIHBlbmFsdHkuKQorCSAqIHdva2VuIHVwIHdpdGggdGhlaXIgc2xlZXAgYXZlcmFnZSBub3Qgd2VpZ2h0ZWQgaW4gYW4KKwkgKiBpbnRlcmFjdGl2ZSB3YXkuCiAJICovCi0JaWYgKG9sZF9zdGF0ZSAmIFRBU0tfTk9OSU5URVJBQ1RJVkUpCi0JCV9fYWN0aXZhdGVfdGFzayhwLCBycSk7Ci0JZWxzZQotCQlhY3RpdmF0ZV90YXNrKHAsIHJxLCBjcHUgPT0gdGhpc19jcHUpOworCQlpZiAob2xkX3N0YXRlICYgVEFTS19OT05JTlRFUkFDVElWRSkKKwkJCXAtPnNsZWVwX3R5cGUgPSBTTEVFUF9OT05JTlRFUkFDVElWRTsKKworCisJYWN0aXZhdGVfdGFzayhwLCBycSwgY3B1ID09IHRoaXNfY3B1KTsKIAkvKgogCSAqIFN5bmMgd2FrZXVwcyAoaS5lLiB0aG9zZSB0eXBlcyBvZiB3YWtldXBzIHdoZXJlIHRoZSB3YWtlcgogCSAqIGhhcyBpbmRpY2F0ZWQgdGhhdCBpdCB3aWxsIGxlYXZlIHRoZSBDUFUgaW4gc2hvcnQgb3JkZXIpCkBAIC0xNjU4LDYgKzE2NjYsMjEgQEAKIAlyZXR1cm4gc3VtOwogfQogCit1bnNpZ25lZCBsb25nIG5yX2FjdGl2ZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaSwgcnVubmluZyA9IDAsIHVuaW50ZXJydXB0aWJsZSA9IDA7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJcnVubmluZyArPSBjcHVfcnEoaSktPm5yX3J1bm5pbmc7CisJCXVuaW50ZXJydXB0aWJsZSArPSBjcHVfcnEoaSktPm5yX3VuaW50ZXJydXB0aWJsZTsKKwl9CisKKwlpZiAodW5saWtlbHkoKGxvbmcpdW5pbnRlcnJ1cHRpYmxlIDwgMCkpCisJCXVuaW50ZXJydXB0aWJsZSA9IDA7CisKKwlyZXR1cm4gcnVubmluZyArIHVuaW50ZXJydXB0aWJsZTsKK30KKwogI2lmZGVmIENPTkZJR19TTVAKIAogLyoKQEAgLTI4NjAsNiArMjg4MywxMiBAQAogCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBpbnQgaW50ZXJhY3RpdmVfc2xlZXAoZW51bSBzbGVlcF90eXBlIHNsZWVwX3R5cGUpCit7CisJcmV0dXJuIChzbGVlcF90eXBlID09IFNMRUVQX0lOVEVSQUNUSVZFIHx8CisJCXNsZWVwX3R5cGUgPT0gU0xFRVBfSU5URVJSVVBURUQpOworfQorCiAvKgogICogc2NoZWR1bGUoKSBpcyB0aGUgbWFpbiBzY2hlZHVsZXIgZnVuY3Rpb24uCiAgKi8KQEAgLTI5ODMsMTIgKzMwMTIsMTIgQEAKIAlxdWV1ZSA9IGFycmF5LT5xdWV1ZSArIGlkeDsKIAluZXh0ID0gbGlzdF9lbnRyeShxdWV1ZS0+bmV4dCwgdGFza190LCBydW5fbGlzdCk7CiAKLQlpZiAoIXJ0X3Rhc2sobmV4dCkgJiYgbmV4dC0+YWN0aXZhdGVkID4gMCkgeworCWlmICghcnRfdGFzayhuZXh0KSAmJiBpbnRlcmFjdGl2ZV9zbGVlcChuZXh0LT5zbGVlcF90eXBlKSkgewogCQl1bnNpZ25lZCBsb25nIGxvbmcgZGVsdGEgPSBub3cgLSBuZXh0LT50aW1lc3RhbXA7CiAJCWlmICh1bmxpa2VseSgobG9uZyBsb25nKShub3cgLSBuZXh0LT50aW1lc3RhbXApIDwgMCkpCiAJCQlkZWx0YSA9IDA7CiAKLQkJaWYgKG5leHQtPmFjdGl2YXRlZCA9PSAxKQorCQlpZiAobmV4dC0+c2xlZXBfdHlwZSA9PSBTTEVFUF9JTlRFUkFDVElWRSkKIAkJCWRlbHRhID0gZGVsdGEgKiAoT05fUlVOUVVFVUVfV0VJR0hUICogMTI4IC8gMTAwKSAvIDEyODsKIAogCQlhcnJheSA9IG5leHQtPmFycmF5OwpAQCAtMjk5OCwxMCArMzAyNyw5IEBACiAJCQlkZXF1ZXVlX3Rhc2sobmV4dCwgYXJyYXkpOwogCQkJbmV4dC0+cHJpbyA9IG5ld19wcmlvOwogCQkJZW5xdWV1ZV90YXNrKG5leHQsIGFycmF5KTsKLQkJfSBlbHNlCi0JCQlyZXF1ZXVlX3Rhc2sobmV4dCwgYXJyYXkpOworCQl9CiAJfQotCW5leHQtPmFjdGl2YXRlZCA9IDA7CisJbmV4dC0+c2xlZXBfdHlwZSA9IFNMRUVQX05PUk1BTDsKIHN3aXRjaF90YXNrczoKIAlpZiAobmV4dCA9PSBycS0+aWRsZSkKIAkJc2NoZWRzdGF0X2luYyhycSwgc2NoZWRfZ29pZGxlKTsKQEAgLTQ3NjAsNyArNDc4OCw3IEBACiAvKiBSZWdpc3RlciBhdCBoaWdoZXN0IHByaW9yaXR5IHNvIHRoYXQgdGFzayBtaWdyYXRpb24gKG1pZ3JhdGVfYWxsX3Rhc2tzKQogICogaGFwcGVucyBiZWZvcmUgZXZlcnl0aGluZyBlbHNlLgogICovCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fZGV2aW5pdGRhdGEgbWlncmF0aW9uX25vdGlmaWVyID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBtaWdyYXRpb25fbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBtaWdyYXRpb25fY2FsbCwKIAkucHJpb3JpdHkgPSAxMAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCA0OTIyOTI4Li5lNWY4YWVhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC03NjksOCArNzY5LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaXJxc19kaXNhYmxlZCgpKQotCQlCVUcoKTsKKwlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAogCS8qIFNob3J0LWNpcmN1aXQgaWdub3JlZCBzaWduYWxzLiAgKi8KQEAgLTg2OSw3ICs4NjgsNiBAQAogCQlpZiAodCA9PSBOVUxMKQogCQkJLyogcmVzdGFydCBiYWxhbmNpbmcgYXQgdGhpcyB0aHJlYWQgKi8KIAkJCXQgPSBwLT5zaWduYWwtPmN1cnJfdGFyZ2V0ID0gcDsKLQkJQlVHX09OKHQtPnRnaWQgIT0gcC0+dGdpZCk7CiAKIAkJd2hpbGUgKCF3YW50c19zaWduYWwoc2lnLCB0KSkgewogCQkJdCA9IG5leHRfdGhyZWFkKHQpOwpAQCAtMTM4NCw4ICsxMzgyLDcgQEAKIAkJICogdGhlIG92ZXJydW4gY291bnQuICBPdGhlciB1c2VzIHNob3VsZCBub3QgdHJ5IHRvCiAJCSAqIHNlbmQgdGhlIHNpZ25hbCBtdWx0aXBsZSB0aW1lcy4KIAkJICovCi0JCWlmIChxLT5pbmZvLnNpX2NvZGUgIT0gU0lfVElNRVIpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHEtPmluZm8uc2lfY29kZSAhPSBTSV9USU1FUik7CiAJCXEtPmluZm8uc2lfb3ZlcnJ1bisrOwogCQlnb3RvIG91dDsKIAl9IApAQCAtMTU2MCw2ICsxNTU3LDcgQEAKIAkvKiBMZXQgdGhlIGRlYnVnZ2VyIHJ1bi4gICovCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19UUkFDRUQpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJdHJ5X3RvX2ZyZWV6ZSgpOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKGxpa2VseShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSAmJgogCSAgICBsaWtlbHkoY3VycmVudC0+cGFyZW50ICE9IGN1cnJlbnQtPnJlYWxfcGFyZW50IHx8CkBAIC0xNzU2LDkgKzE3NTQsOSBAQAogCQkJLyogTGV0IHRoZSBkZWJ1Z2dlciBydW4uICAqLwogCQkJcHRyYWNlX3N0b3Aoc2lnbnIsIHNpZ25yLCBpbmZvKTsKIAotCQkJLyogV2UncmUgYmFjay4gIERpZCB0aGUgZGVidWdnZXIgY2FuY2VsIHRoZSBzaWcgb3IgZ3JvdXBfZXhpdD8gKi8KKwkJCS8qIFdlJ3JlIGJhY2suICBEaWQgdGhlIGRlYnVnZ2VyIGNhbmNlbCB0aGUgc2lnPyAgKi8KIAkJCXNpZ25yID0gY3VycmVudC0+ZXhpdF9jb2RlOwotCQkJaWYgKHNpZ25yID09IDAgfHwgY3VycmVudC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9HUk9VUF9FWElUKQorCQkJaWYgKHNpZ25yID09IDApCiAJCQkJY29udGludWU7CiAKIAkJCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCBlYzhmZWQ0Li4zMzZmOTJkIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IGNwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAogCQkJCSAgdm9pZCAqaGNwdSkKIHsKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19kZXZpbml0ZGF0YSBjcHVfbmZiID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcHVfbmZiID0gewogCS5ub3RpZmllcl9jYWxsID0gY3B1X2NhbGxiYWNrCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGxvY2t1cC5jIGIva2VybmVsL3NvZnRsb2NrdXAuYwppbmRleCBjZWQ5MWUxLi4xNGM3ZmFmIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGxvY2t1cC5jCisrKyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogLyoKICAqIENyZWF0ZS9kZXN0cm95IHdhdGNoZG9nIHRocmVhZHMgYXMgQ1BVcyBjb21lIGFuZCBnbzoKICAqLwotc3RhdGljIGludCBfX2RldmluaXQKK3N0YXRpYyBpbnQKIGNwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJaW50IGhvdGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CkBAIC0xNDAsNyArMTQwLDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fZGV2aW5pdGRhdGEgY3B1X25mYiA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1X25mYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IGNwdV9jYWxsYmFjawogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDdlZjdmNjAuLjBiNmVjMGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTEzNzIsMTggKzEzNzIsMjkgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0c2lkKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpncm91cF9sZWFkZXIgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7Ci0Jc3RydWN0IHBpZCAqcGlkOworCXBpZF90IHNlc3Npb247CiAJaW50IGVyciA9IC1FUEVSTTsKIAogCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CiAJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCi0JcGlkID0gZmluZF9waWQoUElEVFlQRV9QR0lELCBncm91cF9sZWFkZXItPnBpZCk7Ci0JaWYgKHBpZCkKKwkvKiBGYWlsIGlmIEkgYW0gYWxyZWFkeSBhIHNlc3Npb24gbGVhZGVyICovCisJaWYgKGdyb3VwX2xlYWRlci0+c2lnbmFsLT5sZWFkZXIpCisJCWdvdG8gb3V0OworCisJc2Vzc2lvbiA9IGdyb3VwX2xlYWRlci0+cGlkOworCS8qIEZhaWwgaWYgYSBwcm9jZXNzIGdyb3VwIGlkIGFscmVhZHkgZXhpc3RzIHRoYXQgZXF1YWxzIHRoZQorCSAqIHByb3Bvc2VkIHNlc3Npb24gaWQuCisJICoKKwkgKiBEb24ndCBjaGVjayBpZiBzZXNzaW9uIGlkID09IDEgYmVjYXVzZSBrZXJuZWwgdGhyZWFkcyB1c2UgdGhpcworCSAqIHNlc3Npb24gaWQgYW5kIHNvIHRoZSBjaGVjayB3aWxsIGFsd2F5cyBmYWlsIGFuZCBtYWtlIGl0IHNvCisJICogaW5pdCBjYW5ub3Qgc3VjY2Vzc2Z1bGx5IGNhbGwgc2V0c2lkLgorCSAqLworCWlmIChzZXNzaW9uID4gMSAmJiBmaW5kX3Rhc2tfYnlfcGlkX3R5cGUoUElEVFlQRV9QR0lELCBzZXNzaW9uKSkKIAkJZ290byBvdXQ7CiAKIAlncm91cF9sZWFkZXItPnNpZ25hbC0+bGVhZGVyID0gMTsKLQlfX3NldF9zcGVjaWFsX3BpZHMoZ3JvdXBfbGVhZGVyLT5waWQsIGdyb3VwX2xlYWRlci0+cGlkKTsKKwlfX3NldF9zcGVjaWFsX3BpZHMoc2Vzc2lvbiwgc2Vzc2lvbik7CiAJZ3JvdXBfbGVhZGVyLT5zaWduYWwtPnR0eSA9IE5VTEw7CiAJZ3JvdXBfbGVhZGVyLT5zaWduYWwtPnR0eV9vbGRfcGdycCA9IDA7CiAJZXJyID0gcHJvY2Vzc19ncm91cChncm91cF9sZWFkZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c19uaS5jIGIva2VybmVsL3N5c19uaS5jCmluZGV4IGQ4Mjg2NGMuLjU0MzMxOTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNfbmkuYworKysgYi9rZXJuZWwvc3lzX25pLmMKQEAgLTEyMCwzICsxMjAsMTUgQEAKIGNvbmRfc3lzY2FsbChwcGNfcnRhcyk7CiBjb25kX3N5c2NhbGwoc3lzX3NwdV9ydW4pOwogY29uZF9zeXNjYWxsKHN5c19zcHVfY3JlYXRlKTsKKworLyogbW11IGRlcGVuZGluZyB3ZWFrIHN5c2NhbGwgZW50cmllcyAqLworY29uZF9zeXNjYWxsKHN5c19tcHJvdGVjdCk7Citjb25kX3N5c2NhbGwoc3lzX21zeW5jKTsKK2NvbmRfc3lzY2FsbChzeXNfbWxvY2spOworY29uZF9zeXNjYWxsKHN5c19tdW5sb2NrKTsKK2NvbmRfc3lzY2FsbChzeXNfbWxvY2thbGwpOworY29uZF9zeXNjYWxsKHN5c19tdW5sb2NrYWxsKTsKK2NvbmRfc3lzY2FsbChzeXNfbWluY29yZSk7Citjb25kX3N5c2NhbGwoc3lzX21hZHZpc2UpOworY29uZF9zeXNjYWxsKHN5c19tcmVtYXApOworY29uZF9zeXNjYWxsKHN5c19yZW1hcF9maWxlX3BhZ2VzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lLmMgYi9rZXJuZWwvdGltZS5jCmluZGV4IGZmOGU3MDEuLmIwMGRkYzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lLmMKKysrIGIva2VybmVsL3RpbWUuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAgKiBjdXJyZW50X2ZzX3RpbWUgLSBSZXR1cm4gRlMgdGltZQogICogQHNiOiBTdXBlcmJsb2NrLgogICoKLSAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIHRydW5jYXRlZCB0byB0aGUgdGltZSBncmFudWFsaXR5IHN1cHBvcnRlZCBieQorICogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgdHJ1bmNhdGVkIHRvIHRoZSB0aW1lIGdyYW51bGFyaXR5IHN1cHBvcnRlZCBieQogICogdGhlIGZzLgogICovCiBzdHJ1Y3QgdGltZXNwZWMgY3VycmVudF9mc190aW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC00MjEsMTEgKzQyMSwxMSBAQAogRVhQT1JUX1NZTUJPTChjdXJyZW50X2ZzX3RpbWUpOwogCiAvKioKLSAqIHRpbWVzcGVjX3RydW5jIC0gVHJ1bmNhdGUgdGltZXNwZWMgdG8gYSBncmFudWFsaXR5CisgKiB0aW1lc3BlY190cnVuYyAtIFRydW5jYXRlIHRpbWVzcGVjIHRvIGEgZ3JhbnVsYXJpdHkKICAqIEB0OiBUaW1lc3BlYwotICogQGdyYW46IEdyYW51YWxpdHkgaW4gbnMuCisgKiBAZ3JhbjogR3JhbnVsYXJpdHkgaW4gbnMuCiAgKgotICogVHJ1bmNhdGUgYSB0aW1lc3BlYyB0byBhIGdyYW51YWxpdHkuIGdyYW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gYSBzZWNvbmQuCisgKiBUcnVuY2F0ZSBhIHRpbWVzcGVjIHRvIGEgZ3JhbnVsYXJpdHkuIGdyYW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gYSBzZWNvbmQuCiAgKiBBbHdheXMgcm91bmRzIGRvd24uCiAgKgogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb25seSB1c2VkIGZvciB0aW1lc3RhbXBzIHJldHVybmVkIGJ5CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IGFiMTg5ZGQuLjllNDlkZWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC01NCw3ICs1NCw2IEBACiAvKgogICogcGVyLUNQVSB0aW1lciB2ZWN0b3IgZGVmaW5pdGlvbnM6CiAgKi8KLQogI2RlZmluZSBUVk5fQklUUyAoQ09ORklHX0JBU0VfU01BTEwgPyA0IDogNikKICNkZWZpbmUgVFZSX0JJVFMgKENPTkZJR19CQVNFX1NNQUxMID8gNiA6IDgpCiAjZGVmaW5lIFRWTl9TSVpFICgxIDw8IFRWTl9CSVRTKQpAQCAtNjIsMTEgKzYxLDYgQEAKICNkZWZpbmUgVFZOX01BU0sgKFRWTl9TSVpFIC0gMSkKICNkZWZpbmUgVFZSX01BU0sgKFRWUl9TSVpFIC0gMSkKIAotc3RydWN0IHRpbWVyX2Jhc2VfcyB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCB0aW1lcl9saXN0ICpydW5uaW5nX3RpbWVyOwotfTsKLQogdHlwZWRlZiBzdHJ1Y3QgdHZlY19zIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZlY1tUVk5fU0laRV07CiB9IHR2ZWNfdDsKQEAgLTc2LDcgKzcwLDggQEAKIH0gdHZlY19yb290X3Q7CiAKIHN0cnVjdCB0dmVjX3RfYmFzZV9zIHsKLQlzdHJ1Y3QgdGltZXJfYmFzZV9zIHRfYmFzZTsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHRpbWVyX2xpc3QgKnJ1bm5pbmdfdGltZXI7CiAJdW5zaWduZWQgbG9uZyB0aW1lcl9qaWZmaWVzOwogCXR2ZWNfcm9vdF90IHR2MTsKIAl0dmVjX3QgdHYyOwpAQCAtODYsMTQgKzgxLDE2IEBACiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKIHR5cGVkZWYgc3RydWN0IHR2ZWNfdF9iYXNlX3MgdHZlY19iYXNlX3Q7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodHZlY19iYXNlX3QgKiwgdHZlY19iYXNlcyk7Ci1zdGF0aWMgdHZlY19iYXNlX3QgYm9vdF90dmVjX2Jhc2VzOworCit0dmVjX2Jhc2VfdCBib290X3R2ZWNfYmFzZXM7CitFWFBPUlRfU1lNQk9MKGJvb3RfdHZlY19iYXNlcyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodHZlY19iYXNlX3QgKiwgdHZlY19iYXNlcykgPSB7ICZib290X3R2ZWNfYmFzZXMgfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9ydW5uaW5nX3RpbWVyKHR2ZWNfYmFzZV90ICpiYXNlLAogCQkJCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCWJhc2UtPnRfYmFzZS5ydW5uaW5nX3RpbWVyID0gdGltZXI7CisJYmFzZS0+cnVubmluZ190aW1lciA9IHRpbWVyOwogI2VuZGlmCiB9CiAKQEAgLTEzOSwxNSArMTM2LDYgQEAKIAlsaXN0X2FkZF90YWlsKCZ0aW1lci0+ZW50cnksIHZlYyk7CiB9CiAKLXR5cGVkZWYgc3RydWN0IHRpbWVyX2Jhc2VfcyB0aW1lcl9iYXNlX3Q7Ci0vKgotICogVXNlZCBieSBUSU1FUl9JTklUSUFMSVpFUiwgd2UgY2FuJ3QgdXNlIHBlcl9jcHUodHZlY19iYXNlcykKLSAqIGF0IGNvbXBpbGUgdGltZSwgYW5kIHdlIG5lZWQgdGltZXItPmJhc2UgdG8gbG9jayB0aGUgdGltZXIuCi0gKi8KLXRpbWVyX2Jhc2VfdCBfX2luaXRfdGltZXJfYmFzZQotCV9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSB7IC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEIH07Ci1FWFBPUlRfU1lNQk9MKF9faW5pdF90aW1lcl9iYXNlKTsKLQogLyoqKgogICogaW5pdF90aW1lciAtIGluaXRpYWxpemUgYSB0aW1lci4KICAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGluaXRpYWxpemVkCkBAIC0xNTgsNyArMTQ2LDcgQEAKIHZvaWQgZmFzdGNhbGwgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiB7CiAJdGltZXItPmVudHJ5Lm5leHQgPSBOVUxMOwotCXRpbWVyLT5iYXNlID0gJnBlcl9jcHUodHZlY19iYXNlcywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSktPnRfYmFzZTsKKwl0aW1lci0+YmFzZSA9IHBlcl9jcHUodHZlY19iYXNlcywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGluaXRfdGltZXIpOwogCkBAIC0xNzQsNyArMTYyLDcgQEAKIH0KIAogLyoKLSAqIFdlIGFyZSB1c2luZyBoYXNoZWQgbG9ja2luZzogaG9sZGluZyBwZXJfY3B1KHR2ZWNfYmFzZXMpLnRfYmFzZS5sb2NrCisgKiBXZSBhcmUgdXNpbmcgaGFzaGVkIGxvY2tpbmc6IGhvbGRpbmcgcGVyX2NwdSh0dmVjX2Jhc2VzKS5sb2NrCiAgKiBtZWFucyB0aGF0IGFsbCB0aW1lcnMgd2hpY2ggYXJlIHRpZWQgdG8gdGhpcyBiYXNlIHZpYSB0aW1lci0+YmFzZSBhcmUKICAqIGxvY2tlZCwgYW5kIHRoZSBiYXNlIGl0c2VsZiBpcyBsb2NrZWQgdG9vLgogICoKQEAgLTE4NSwxMCArMTczLDEwIEBACiAgKiBwb3NzaWJsZSB0byBzZXQgdGltZXItPmJhc2UgPSBOVUxMIGFuZCBkcm9wIHRoZSBsb2NrOiB0aGUgdGltZXIgcmVtYWlucwogICogbG9ja2VkLgogICovCi1zdGF0aWMgdGltZXJfYmFzZV90ICpsb2NrX3RpbWVyX2Jhc2Uoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorc3RhdGljIHR2ZWNfYmFzZV90ICpsb2NrX3RpbWVyX2Jhc2Uoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAogCQkJCQl1bnNpZ25lZCBsb25nICpmbGFncykKIHsKLQl0aW1lcl9iYXNlX3QgKmJhc2U7CisJdHZlY19iYXNlX3QgKmJhc2U7CiAKIAlmb3IgKDs7KSB7CiAJCWJhc2UgPSB0aW1lci0+YmFzZTsKQEAgLTIwNSw4ICsxOTMsNyBAQAogCiBpbnQgX19tb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCiB7Ci0JdGltZXJfYmFzZV90ICpiYXNlOwotCXR2ZWNfYmFzZV90ICpuZXdfYmFzZTsKKwl0dmVjX2Jhc2VfdCAqYmFzZSwgKm5ld19iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKQEAgLTIyMSw3ICsyMDgsNyBAQAogCiAJbmV3X2Jhc2UgPSBfX2dldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOwogCi0JaWYgKGJhc2UgIT0gJm5ld19iYXNlLT50X2Jhc2UpIHsKKwlpZiAoYmFzZSAhPSBuZXdfYmFzZSkgewogCQkvKgogCQkgKiBXZSBhcmUgdHJ5aW5nIHRvIHNjaGVkdWxlIHRoZSB0aW1lciBvbiB0aGUgbG9jYWwgQ1BVLgogCQkgKiBIb3dldmVyIHdlIGNhbid0IGNoYW5nZSB0aW1lcidzIGJhc2Ugd2hpbGUgaXQgaXMgcnVubmluZywKQEAgLTIyOSwyMSArMjE2LDE5IEBACiAJCSAqIGhhbmRsZXIgeWV0IGhhcyBub3QgZmluaXNoZWQuIFRoaXMgYWxzbyBndWFyYW50ZWVzIHRoYXQKIAkJICogdGhlIHRpbWVyIGlzIHNlcmlhbGl6ZWQgd3J0IGl0c2VsZi4KIAkJICovCi0JCWlmICh1bmxpa2VseShiYXNlLT5ydW5uaW5nX3RpbWVyID09IHRpbWVyKSkgewotCQkJLyogVGhlIHRpbWVyIHJlbWFpbnMgb24gYSBmb3JtZXIgYmFzZSAqLwotCQkJbmV3X2Jhc2UgPSBjb250YWluZXJfb2YoYmFzZSwgdHZlY19iYXNlX3QsIHRfYmFzZSk7Ci0JCX0gZWxzZSB7CisJCWlmIChsaWtlbHkoYmFzZS0+cnVubmluZ190aW1lciAhPSB0aW1lcikpIHsKIAkJCS8qIFNlZSB0aGUgY29tbWVudCBpbiBsb2NrX3RpbWVyX2Jhc2UoKSAqLwogCQkJdGltZXItPmJhc2UgPSBOVUxMOwogCQkJc3Bpbl91bmxvY2soJmJhc2UtPmxvY2spOwotCQkJc3Bpbl9sb2NrKCZuZXdfYmFzZS0+dF9iYXNlLmxvY2spOwotCQkJdGltZXItPmJhc2UgPSAmbmV3X2Jhc2UtPnRfYmFzZTsKKwkJCWJhc2UgPSBuZXdfYmFzZTsKKwkJCXNwaW5fbG9jaygmYmFzZS0+bG9jayk7CisJCQl0aW1lci0+YmFzZSA9IGJhc2U7CiAJCX0KIAl9CiAKIAl0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7Ci0JaW50ZXJuYWxfYWRkX3RpbWVyKG5ld19iYXNlLCB0aW1lcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmV3X2Jhc2UtPnRfYmFzZS5sb2NrLCBmbGFncyk7CisJaW50ZXJuYWxfYWRkX3RpbWVyKGJhc2UsIHRpbWVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjYzLDEwICsyNDgsMTAgQEAKICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICAgCUJVR19PTih0aW1lcl9wZW5kaW5nKHRpbWVyKSB8fCAhdGltZXItPmZ1bmN0aW9uKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+dF9iYXNlLmxvY2ssIGZsYWdzKTsKLQl0aW1lci0+YmFzZSA9ICZiYXNlLT50X2Jhc2U7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKwl0aW1lci0+YmFzZSA9IGJhc2U7CiAJaW50ZXJuYWxfYWRkX3RpbWVyKGJhc2UsIHRpbWVyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT50X2Jhc2UubG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC0zMTksNyArMzA0LDcgQEAKICAqLwogaW50IGRlbF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiB7Ci0JdGltZXJfYmFzZV90ICpiYXNlOworCXR2ZWNfYmFzZV90ICpiYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKQEAgLTM0Niw3ICszMzEsNyBAQAogICovCiBpbnQgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIHsKLQl0aW1lcl9iYXNlX3QgKmJhc2U7CisJdHZlY19iYXNlX3QgKmJhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gLTE7CiAKQEAgLTQxMCw3ICszOTUsNyBAQAogCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdG1wOwogCiAJCXRtcCA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IHRpbWVyX2xpc3QsIGVudHJ5KTsKLQkJQlVHX09OKHRtcC0+YmFzZSAhPSAmYmFzZS0+dF9iYXNlKTsKKwkJQlVHX09OKHRtcC0+YmFzZSAhPSBiYXNlKTsKIAkJY3VyciA9IGN1cnItPm5leHQ7CiAJCWludGVybmFsX2FkZF90aW1lcihiYXNlLCB0bXApOwogCX0KQEAgLTQzMiw3ICs0MTcsNyBAQAogewogCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcjsKIAotCXNwaW5fbG9ja19pcnEoJmJhc2UtPnRfYmFzZS5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZiYXNlLT5sb2NrKTsKIAl3aGlsZSAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBiYXNlLT50aW1lcl9qaWZmaWVzKSkgewogCQlzdHJ1Y3QgbGlzdF9oZWFkIHdvcmtfbGlzdCA9IExJU1RfSEVBRF9JTklUKHdvcmtfbGlzdCk7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmd29ya19saXN0OwpAQCAtNDU4LDcgKzQ0Myw3IEBACiAKIAkJCXNldF9ydW5uaW5nX3RpbWVyKGJhc2UsIHRpbWVyKTsKIAkJCWRldGFjaF90aW1lcih0aW1lciwgMSk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmJhc2UtPnRfYmFzZS5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmYmFzZS0+bG9jayk7CiAJCQl7CiAJCQkJaW50IHByZWVtcHRfY291bnQgPSBwcmVlbXB0X2NvdW50KCk7CiAJCQkJZm4oZGF0YSk7CkBAIC00NzEsMTEgKzQ1NiwxMSBAQAogCQkJCQlCVUcoKTsKIAkJCQl9CiAJCQl9Ci0JCQlzcGluX2xvY2tfaXJxKCZiYXNlLT50X2Jhc2UubG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZiYXNlLT5sb2NrKTsKIAkJfQogCX0KIAlzZXRfcnVubmluZ190aW1lcihiYXNlLCBOVUxMKTsKLQlzcGluX3VubG9ja19pcnEoJmJhc2UtPnRfYmFzZS5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmJhc2UtPmxvY2spOwogfQogCiAjaWZkZWYgQ09ORklHX05PX0lETEVfSFoKQEAgLTUwNiw3ICs0OTEsNyBAQAogCWhyX2V4cGlyZXMgKz0gamlmZmllczsKIAogCWJhc2UgPSBfX2dldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOwotCXNwaW5fbG9jaygmYmFzZS0+dF9iYXNlLmxvY2spOworCXNwaW5fbG9jaygmYmFzZS0+bG9jayk7CiAJZXhwaXJlcyA9IGJhc2UtPnRpbWVyX2ppZmZpZXMgKyAoTE9OR19NQVggPj4gMSk7CiAJbGlzdCA9IE5VTEw7CiAKQEAgLTU1NCw3ICs1MzksMjMgQEAKIAkJCQlleHBpcmVzID0gbnRlLT5leHBpcmVzOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZiYXNlLT50X2Jhc2UubG9jayk7CisJc3Bpbl91bmxvY2soJmJhc2UtPmxvY2spOworCisJLyoKKwkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgb3RoZXIgQ1BVcyBzZXJ2aWNlIHRpbWVyIElSUXMgYW5kIGluY3JlbWVudAorCSAqIGppZmZpZXMsIGJ1dCB3ZSBoYXZlIG5vdCB5ZXQgZ290IGEgbG9jYWwgdGltZXIgdGljayB0byBwcm9jZXNzCisJICogdGhlIHRpbWVyIHdoZWVscy4gIEluIHRoYXQgY2FzZSwgdGhlIGV4cGlyeSB0aW1lIGNhbiBiZSBiZWZvcmUKKwkgKiBqaWZmaWVzLCBidXQgc2luY2UgdGhlIGhpZ2gtcmVzb2x1dGlvbiB0aW1lciBoZXJlIGlzIHJlbGF0aXZlIHRvCisJICogamlmZmllcywgdGhlIGRlZmF1bHQgZXhwcmVzc2lvbiB3aGVuIGhpZ2gtcmVzb2x1dGlvbiB0aW1lcnMgYXJlCisJICogbm90IGFjdGl2ZSwKKwkgKgorCSAqICAgdGltZV9iZWZvcmUoTUFYX0pJRkZZX09GRlNFVCArIGppZmZpZXMsIGV4cGlyZXMpCisJICoKKwkgKiB3b3VsZCBmYWxzZWx5IGV2YWx1YXRlIHRvIHRydWUuICBJZiB0aGF0IGlzIHRoZSBjYXNlLCBqdXN0CisJICogcmV0dXJuIGppZmZpZXMgc28gdGhhdCB3ZSBjYW4gaW1tZWRpYXRlbHkgZmlyZSB0aGUgbG9jYWwgdGltZXIKKwkgKi8KKwlpZiAodGltZV9iZWZvcmUoZXhwaXJlcywgamlmZmllcykpCisJCXJldHVybiBqaWZmaWVzOwogCiAJaWYgKHRpbWVfYmVmb3JlKGhyX2V4cGlyZXMsIGV4cGlyZXMpKQogCQlyZXR1cm4gaHJfZXhwaXJlczsKQEAgLTg0MSw3ICs4NDIsNyBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9hY3RpdmVfdGFza3Modm9pZCkKIHsKLQlyZXR1cm4gKG5yX3J1bm5pbmcoKSArIG5yX3VuaW50ZXJydXB0aWJsZSgpKSAqIEZJWEVEXzE7CisJcmV0dXJuIG5yX2FjdGl2ZSgpICogRklYRURfMTsKIH0KIAogLyoKQEAgLTEyNDAsMjkgKzEyNDEsMzcgQEAKIHsKIAlpbnQgajsKIAl0dmVjX2Jhc2VfdCAqYmFzZTsKKwlzdGF0aWMgY2hhciBfX2RldmluaXRkYXRhIHR2ZWNfYmFzZV9kb25lW05SX0NQVVNdOwogCi0JYmFzZSA9IHBlcl9jcHUodHZlY19iYXNlcywgY3B1KTsKLQlpZiAoIWJhc2UpIHsKKwlpZiAoIXR2ZWNfYmFzZV9kb25lW2NwdV0pIHsKIAkJc3RhdGljIGNoYXIgYm9vdF9kb25lOwogCi0JCS8qCi0JCSAqIENhbm5vdCBkbyBhbGxvY2F0aW9uIGluIGluaXRfdGltZXJzIGFzIHRoYXQgcnVucyBiZWZvcmUgdGhlCi0JCSAqIGFsbG9jYXRvciBpbml0aWFsaXplcyAoYW5kIHdvdWxkIHdhc3RlIG1lbW9yeSBpZiB0aGVyZSBhcmUKLQkJICogbW9yZSBwb3NzaWJsZSBDUFVzIHRoYW4gd2lsbCBldmVyIGJlIGluc3RhbGxlZC9icm91Z2h0IHVwKS4KLQkJICovCiAJCWlmIChib290X2RvbmUpIHsKKwkJCS8qCisJCQkgKiBUaGUgQVBzIHVzZSB0aGlzIHBhdGggbGF0ZXIgaW4gYm9vdAorCQkJICovCiAJCQliYXNlID0ga21hbGxvY19ub2RlKHNpemVvZigqYmFzZSksIEdGUF9LRVJORUwsCiAJCQkJCQljcHVfdG9fbm9kZShjcHUpKTsKIAkJCWlmICghYmFzZSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCW1lbXNldChiYXNlLCAwLCBzaXplb2YoKmJhc2UpKTsKKwkJCXBlcl9jcHUodHZlY19iYXNlcywgY3B1KSA9IGJhc2U7CiAJCX0gZWxzZSB7Ci0JCQliYXNlID0gJmJvb3RfdHZlY19iYXNlczsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGZvciB0aGUgYm9vdCBDUFUgLSB3ZSB1c2UgY29tcGlsZS10aW1lCisJCQkgKiBzdGF0aWMgaW5pdGlhbGlzYXRpb24gYmVjYXVzZSBwZXItY3B1IG1lbW9yeSBpc24ndAorCQkJICogcmVhZHkgeWV0IGFuZCBiZWNhdXNlIHRoZSBtZW1vcnkgYWxsb2NhdG9ycyBhcmUgbm90CisJCQkgKiBpbml0aWFsaXNlZCBlaXRoZXIuCisJCQkgKi8KIAkJCWJvb3RfZG9uZSA9IDE7CisJCQliYXNlID0gJmJvb3RfdHZlY19iYXNlczsKIAkJfQotCQlwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSkgPSBiYXNlOworCQl0dmVjX2Jhc2VfZG9uZVtjcHVdID0gMTsKKwl9IGVsc2UgeworCQliYXNlID0gcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpOwogCX0KLQlzcGluX2xvY2tfaW5pdCgmYmFzZS0+dF9iYXNlLmxvY2spOworCisJc3Bpbl9sb2NrX2luaXQoJmJhc2UtPmxvY2spOwogCWZvciAoaiA9IDA7IGogPCBUVk5fU0laRTsgaisrKSB7CiAJCUlOSVRfTElTVF9IRUFEKGJhc2UtPnR2NS52ZWMgKyBqKTsKIAkJSU5JVF9MSVNUX0hFQUQoYmFzZS0+dHY0LnZlYyArIGopOwpAQCAtMTI4NCw3ICsxMjkzLDcgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJdGltZXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCB0aW1lcl9saXN0LCBlbnRyeSk7CiAJCWRldGFjaF90aW1lcih0aW1lciwgMCk7Ci0JCXRpbWVyLT5iYXNlID0gJm5ld19iYXNlLT50X2Jhc2U7CisJCXRpbWVyLT5iYXNlID0gbmV3X2Jhc2U7CiAJCWludGVybmFsX2FkZF90aW1lcihuZXdfYmFzZSwgdGltZXIpOwogCX0KIH0KQEAgLTEzMDAsMTEgKzEzMDksMTEgQEAKIAluZXdfYmFzZSA9IGdldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlzcGluX2xvY2soJm5ld19iYXNlLT50X2Jhc2UubG9jayk7Ci0Jc3Bpbl9sb2NrKCZvbGRfYmFzZS0+dF9iYXNlLmxvY2spOworCXNwaW5fbG9jaygmbmV3X2Jhc2UtPmxvY2spOworCXNwaW5fbG9jaygmb2xkX2Jhc2UtPmxvY2spOwogCi0JaWYgKG9sZF9iYXNlLT50X2Jhc2UucnVubmluZ190aW1lcikKLQkJQlVHKCk7CisJQlVHX09OKG9sZF9iYXNlLT5ydW5uaW5nX3RpbWVyKTsKKwogCWZvciAoaSA9IDA7IGkgPCBUVlJfU0laRTsgaSsrKQogCQltaWdyYXRlX3RpbWVyX2xpc3QobmV3X2Jhc2UsIG9sZF9iYXNlLT50djEudmVjICsgaSk7CiAJZm9yIChpID0gMDsgaSA8IFRWTl9TSVpFOyBpKyspIHsKQEAgLTEzMTQsMTQgKzEzMjMsMTQgQEAKIAkJbWlncmF0ZV90aW1lcl9saXN0KG5ld19iYXNlLCBvbGRfYmFzZS0+dHY1LnZlYyArIGkpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZvbGRfYmFzZS0+dF9iYXNlLmxvY2spOwotCXNwaW5fdW5sb2NrKCZuZXdfYmFzZS0+dF9iYXNlLmxvY2spOworCXNwaW5fdW5sb2NrKCZvbGRfYmFzZS0+bG9jayk7CisJc3Bpbl91bmxvY2soJm5ld19iYXNlLT5sb2NrKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcHV0X2NwdV92YXIodHZlY19iYXNlcyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHRpbWVyX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCAKK3N0YXRpYyBpbnQgdGltZXJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJbG9uZyBjcHUgPSAobG9uZyloY3B1OwpAQCAtMTM0MSw3ICsxMzUwLDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fZGV2aW5pdGRhdGEgdGltZXJzX25iID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0aW1lcnNfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSB0aW1lcl9jcHVfbm90aWZ5LAogfTsKIApAQCAtMTQ3MSw3ICsxNDgwLDcgQEAKIAkgKi8KIAlpZiAoamlmZmllcyAlIElOVEVSUE9MQVRPUl9BREpVU1QgPT0gMCkKIAl7Ci0JCWlmICh0aW1lX2ludGVycG9sYXRvci0+c2tpcHMgPT0gMCAmJiB0aW1lX2ludGVycG9sYXRvci0+b2Zmc2V0ID4gVElDS19OU0VDKQorCQlpZiAodGltZV9pbnRlcnBvbGF0b3ItPnNraXBzID09IDAgJiYgdGltZV9pbnRlcnBvbGF0b3ItPm9mZnNldCA+IHRpY2tfbnNlYykKIAkJCXRpbWVfaW50ZXJwb2xhdG9yLT5uc2VjX3Blcl9jeWMtLTsKIAkJaWYgKHRpbWVfaW50ZXJwb2xhdG9yLT5uc19za2lwcGVkID4gSU5URVJQT0xBVE9SX01BWF9TS0lQICYmIHRpbWVfaW50ZXJwb2xhdG9yLT5vZmZzZXQgPT0gMCkKIAkJCXRpbWVfaW50ZXJwb2xhdG9yLT5uc2VjX3Blcl9jeWMrKzsKQEAgLTE0OTUsOCArMTUwNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICh0aS0+ZnJlcXVlbmN5ID09IDAgfHwgdGktPm1hc2sgPT0gMCkKLQkJQlVHKCk7CisJQlVHX09OKHRpLT5mcmVxdWVuY3kgPT0gMCB8fCB0aS0+bWFzayA9PSAwKTsKIAogCXRpLT5uc2VjX3Blcl9jeWMgPSAoKHU2NClOU0VDX1BFUl9TRUMgPDwgdGktPnNoaWZ0KSAvIHRpLT5mcmVxdWVuY3k7CiAJc3Bpbl9sb2NrKCZ0aW1lX2ludGVycG9sYXRvcl9sb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC91aWQxNi5jIGIva2VybmVsL3VpZDE2LmMKaW5kZXggYWEyNTYwNS4uMTg3ZTJhNCAxMDA2NDQKLS0tIGEva2VybmVsL3VpZDE2LmMKKysrIGIva2VybmVsL3VpZDE2LmMKQEAgLTIwLDQzICsyMCw2NyBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzX2Nob3duMTYoY29uc3QgY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwgb2xkX3VpZF90IHVzZXIsIG9sZF9naWRfdCBncm91cCkKIHsKLQlyZXR1cm4gc3lzX2Nob3duKGZpbGVuYW1lLCBsb3cyaGlnaHVpZCh1c2VyKSwgbG93MmhpZ2hnaWQoZ3JvdXApKTsKKwlsb25nIHJldCA9IHN5c19jaG93bihmaWxlbmFtZSwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX2xjaG93bjE2KGNvbnN0IGNoYXIgX191c2VyICogZmlsZW5hbWUsIG9sZF91aWRfdCB1c2VyLCBvbGRfZ2lkX3QgZ3JvdXApCiB7Ci0JcmV0dXJuIHN5c19sY2hvd24oZmlsZW5hbWUsIGxvdzJoaWdodWlkKHVzZXIpLCBsb3cyaGlnaGdpZChncm91cCkpOworCWxvbmcgcmV0ID0gc3lzX2xjaG93bihmaWxlbmFtZSwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG93bjE2KHVuc2lnbmVkIGludCBmZCwgb2xkX3VpZF90IHVzZXIsIG9sZF9naWRfdCBncm91cCkKIHsKLQlyZXR1cm4gc3lzX2ZjaG93bihmZCwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJbG9uZyByZXQgPSBzeXNfZmNob3duKGZkLCBsb3cyaGlnaHVpZCh1c2VyKSwgbG93MmhpZ2hnaWQoZ3JvdXApKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmVnaWQxNihvbGRfZ2lkX3QgcmdpZCwgb2xkX2dpZF90IGVnaWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRyZWdpZChsb3cyaGlnaGdpZChyZ2lkKSwgbG93MmhpZ2hnaWQoZWdpZCkpOworCWxvbmcgcmV0ID0gc3lzX3NldHJlZ2lkKGxvdzJoaWdoZ2lkKHJnaWQpLCBsb3cyaGlnaGdpZChlZ2lkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldGdpZDE2KG9sZF9naWRfdCBnaWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0Z2lkKGxvdzJoaWdoZ2lkKGdpZCkpOworCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLworCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRyZXVpZDE2KG9sZF91aWRfdCBydWlkLCBvbGRfdWlkX3QgZXVpZCkKIHsKLQlyZXR1cm4gc3lzX3NldHJldWlkKGxvdzJoaWdodWlkKHJ1aWQpLCBsb3cyaGlnaHVpZChldWlkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0cmV1aWQobG93MmhpZ2h1aWQocnVpZCksIGxvdzJoaWdodWlkKGV1aWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0dWlkMTYob2xkX3VpZF90IHVpZCkKIHsKLQlyZXR1cm4gc3lzX3NldHVpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwlsb25nIHJldCA9IHN5c19zZXR1aWQobG93MmhpZ2h1aWQodWlkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldHJlc3VpZDE2KG9sZF91aWRfdCBydWlkLCBvbGRfdWlkX3QgZXVpZCwgb2xkX3VpZF90IHN1aWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRyZXN1aWQobG93MmhpZ2h1aWQocnVpZCksIGxvdzJoaWdodWlkKGV1aWQpLAotCQlsb3cyaGlnaHVpZChzdWlkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0cmVzdWlkKGxvdzJoaWdodWlkKHJ1aWQpLCBsb3cyaGlnaHVpZChldWlkKSwKKwkJCQkgbG93MmhpZ2h1aWQoc3VpZCkpOworCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLworCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogYXNtbGlua2FnZSBsb25nIHN5c19nZXRyZXN1aWQxNihvbGRfdWlkX3QgX191c2VyICpydWlkLCBvbGRfdWlkX3QgX191c2VyICpldWlkLCBvbGRfdWlkX3QgX191c2VyICpzdWlkKQpAQCAtNzIsOCArOTYsMTEgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRyZXNnaWQxNihvbGRfZ2lkX3QgcmdpZCwgb2xkX2dpZF90IGVnaWQsIG9sZF9naWRfdCBzZ2lkKQogewotCXJldHVybiBzeXNfc2V0cmVzZ2lkKGxvdzJoaWdoZ2lkKHJnaWQpLCBsb3cyaGlnaGdpZChlZ2lkKSwKLQkJbG93MmhpZ2hnaWQoc2dpZCkpOworCWxvbmcgcmV0ID0gc3lzX3NldHJlc2dpZChsb3cyaGlnaGdpZChyZ2lkKSwgbG93MmhpZ2hnaWQoZWdpZCksCisJCQkJIGxvdzJoaWdoZ2lkKHNnaWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cmVzZ2lkMTYob2xkX2dpZF90IF9fdXNlciAqcmdpZCwgb2xkX2dpZF90IF9fdXNlciAqZWdpZCwgb2xkX2dpZF90IF9fdXNlciAqc2dpZCkKQEAgLTg5LDEyICsxMTYsMTggQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRmc3VpZDE2KG9sZF91aWRfdCB1aWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRmc3VpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwlsb25nIHJldCA9IHN5c19zZXRmc3VpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0ZnNnaWQxNihvbGRfZ2lkX3QgZ2lkKQogewotCXJldHVybiBzeXNfc2V0ZnNnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0ZnNnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGdyb3VwczE2X3RvX3VzZXIob2xkX2dpZF90IF9fdXNlciAqZ3JvdXBsaXN0LApkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IGU5ZTQ2NGEuLjg4MGZiNDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogfQogCiAvKiBXZSdyZSBob2xkaW5nIHRoZSBjcHVjb250cm9sIG11dGV4IGhlcmUgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHdvcmtxdWV1ZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IHdvcmtxdWV1ZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwKIAkJCQkgIHZvaWQgKmhjcHUpCiB7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IGQ1N2ZkOTEuLmNjYjBjMWYgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogY29uZmlnIERFQlVHX01VVEVYRVMKIAlib29sICJNdXRleCBkZWJ1Z2dpbmcsIGRlYWRsb2NrIGRldGVjdGlvbiIKLQlkZWZhdWx0IHkKKwlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWhlbHAKIAkgVGhpcyBhbGxvd3MgbXV0ZXggc2VtYW50aWNzIHZpb2xhdGlvbnMgYW5kIG11dGV4IHJlbGF0ZWQgZGVhZGxvY2tzCkBAIC0xODksNyArMTg5LDcgQEAKIGNvbmZpZyBVTldJTkRfSU5GTwogCWJvb2wgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHVud2luZCBpbmZvcm1hdGlvbiIKIAlkZXBlbmRzIG9uICFJQTY0Ci0JZGVwZW5kcyBvbiAhTU9EVUxFUyB8fCAhKE1JUFMgfHwgUEFSSVNDIHx8IFBQQyB8fCBTVVBFUkggfHwgU1BBUkM2NCB8fCBWODUwKQorCWRlcGVuZHMgb24gIU1PRFVMRVMgfHwgIShNSVBTIHx8IFBBUklTQyB8fCBQUEMgfHwgU1VQRVJIIHx8IFY4NTApCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlIHJlc3VsdGluZyBrZXJuZWwgaW1hZ2Ugd2lsbCBiZSBzbGlnaHRseSBsYXJnZXIKIAkgIGJ1dCBub3Qgc2xvd2VyLCBhbmQgaXQgd2lsbCBnaXZlIHZlcnkgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDI1MjA0YTQuLjY4N2FiNDEgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiB7CiAJa3JlZl9pbml0KCZrb2JqLT5rcmVmKTsKIAlJTklUX0xJU1RfSEVBRCgma29iai0+ZW50cnkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmtvYmotPnBvbGwpOwogCWtvYmotPmtzZXQgPSBrc2V0X2dldChrb2JqLT5rc2V0KTsKIH0KIApAQCAtMTk3LDE0ICsxOTgsMTQgQEAKIAogCQkvKiBiZSBub2lzeSBvbiBlcnJvciBpc3N1ZXMgKi8KIAkJaWYgKGVycm9yID09IC1FRVhJU1QpCi0JCQlwcmludGsoImtvYmplY3RfYWRkIGZhaWxlZCBmb3IgJXMgd2l0aCAtRUVYSVNULCAiCisJCQlwcl9kZWJ1Zygia29iamVjdF9hZGQgZmFpbGVkIGZvciAlcyB3aXRoIC1FRVhJU1QsICIKIAkJCSAgICAgICAiZG9uJ3QgdHJ5IHRvIHJlZ2lzdGVyIHRoaW5ncyB3aXRoIHRoZSAiCiAJCQkgICAgICAgInNhbWUgbmFtZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4iLAogCQkJICAgICAgIGtvYmplY3RfbmFtZShrb2JqKSk7CiAJCWVsc2UKLQkJCXByaW50aygia29iamVjdF9hZGQgZmFpbGVkIGZvciAlcyAoJWQpXG4iLAorCQkJcHJfZGVidWcoImtvYmplY3RfYWRkIGZhaWxlZCBmb3IgJXMgKCVkKVxuIiwKIAkJCSAgICAgICBrb2JqZWN0X25hbWUoa29iaiksIGVycm9yKTsKLQkJZHVtcF9zdGFjaygpOworCQkvKiBkdW1wX3N0YWNrKCk7ICovCiAJfQogCiAJcmV0dXJuIGVycm9yOwpAQCAtNDIxLDcgKzQyMiw2IEBACiAKIAlyZXR1cm4gazsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGtvYmplY3RfYWRkX2Rpcik7CiAKIC8qKgogICoJa3NldF9pbml0IC0gaW5pdGlhbGl6ZSBhIGtzZXQgZm9yIHVzZQpAQCAtNTY4LDcgKzU2OCw3IEBACiAgKglAczoJc3Vic3lzdGVtLgogICoJQGE6CWF0dHJpYnV0ZSBkZXNjaXB0b3IuCiAgKi8KLQorI2lmIDAKIHZvaWQgc3Vic3lzX3JlbW92ZV9maWxlKHN0cnVjdCBzdWJzeXN0ZW0gKiBzLCBzdHJ1Y3Qgc3Vic3lzX2F0dHJpYnV0ZSAqIGEpCiB7CiAJaWYgKHN1YnN5c19nZXQocykpIHsKQEAgLTU3Niw2ICs1NzYsNyBAQAogCQlzdWJzeXNfcHV0KHMpOwogCX0KIH0KKyNlbmRpZiAgLyogIDAgICovCiAKIEVYUE9SVF9TWU1CT0woa29iamVjdF9pbml0KTsKIEVYUE9SVF9TWU1CT0woa29iamVjdF9yZWdpc3Rlcik7CkBAIC01ODcsMTAgKzU4OCw3IEBACiAKIEVYUE9SVF9TWU1CT0woa3NldF9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKGtzZXRfdW5yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGtzZXRfZmluZF9vYmopOwogCi1FWFBPUlRfU1lNQk9MKHN1YnN5c3RlbV9pbml0KTsKIEVYUE9SVF9TWU1CT0woc3Vic3lzdGVtX3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0woc3Vic3lzdGVtX3VucmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChzdWJzeXNfY3JlYXRlX2ZpbGUpOwotRVhQT1JUX1NZTUJPTChzdWJzeXNfcmVtb3ZlX2ZpbGUpOwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCA5ODIyMjZkLi43ZjIwZTdiIDEwMDY0NAotLS0gYS9saWIva29iamVjdF91ZXZlbnQuYworKysgYi9saWIva29iamVjdF91ZXZlbnQuYwpAQCAtMjUsMTEgKzI1LDEzIEBACiAjZGVmaW5lIEJVRkZFUl9TSVpFCTIwNDgJLyogYnVmZmVyIGZvciB0aGUgdmFyaWFibGVzICovCiAjZGVmaW5lIE5VTV9FTlZQCTMyCS8qIG51bWJlciBvZiBlbnYgcG9pbnRlcnMgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUcpICYmIGRlZmluZWQoQ09ORklHX05FVCkKKyNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHKQogdTY0IHVldmVudF9zZXFudW07CiBjaGFyIHVldmVudF9oZWxwZXJbVUVWRU5UX0hFTFBFUl9QQVRIX0xFTl0gPSAiL3NiaW4vaG90cGx1ZyI7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNlcXVlbmNlX2xvY2spOworI2lmIGRlZmluZWQoQ09ORklHX05FVCkKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdWV2ZW50X3NvY2s7CisjZW5kaWYKIAogc3RhdGljIGNoYXIgKmFjdGlvbl90b19zdHJpbmcoZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24pCiB7CkBAIC0xNTUsNiArMTU3LDcgQEAKIAlzcGluX3VubG9jaygmc2VxdWVuY2VfbG9jayk7CiAJc3ByaW50ZihzZXFfYnVmZiwgIlNFUU5VTT0lbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZXEpOwogCisjaWYgZGVmaW5lZChDT05GSUdfTkVUKQogCS8qIHNlbmQgbmV0bGluayBtZXNzYWdlICovCiAJaWYgKHVldmVudF9zb2NrKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xNzksNiArMTgyLDcgQEAKIAkJCW5ldGxpbmtfYnJvYWRjYXN0KHVldmVudF9zb2NrLCBza2IsIDAsIDEsIEdGUF9LRVJORUwpOwogCQl9CiAJfQorI2VuZGlmCiAKIAkvKiBjYWxsIHVldmVudF9oZWxwZXIsIHVzdWFsbHkgb25seSBlbmFibGVkIGR1cmluZyBlYXJseSBib290ICovCiAJaWYgKHVldmVudF9oZWxwZXJbMF0pIHsKQEAgLTI0OSw2ICsyNTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3VldmVudF92YXIpOwogCisjaWYgZGVmaW5lZChDT05GSUdfTkVUKQogc3RhdGljIGludCBfX2luaXQga29iamVjdF91ZXZlbnRfaW5pdCh2b2lkKQogewogCXVldmVudF9zb2NrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfS09CSkVDVF9VRVZFTlQsIDEsIE5VTEwsCkBAIC0yNjQsNSArMjY5LDYgQEAKIH0KIAogcG9zdGNvcmVfaW5pdGNhbGwoa29iamVjdF91ZXZlbnRfaW5pdCk7CisjZW5kaWYKIAogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHICovCmRpZmYgLS1naXQgYS9saWIvc3RyaW5nLmMgYi9saWIvc3RyaW5nLmMKaW5kZXggYjNjMjhhMy4uMDY0ZjYzMSAxMDA2NDQKLS0tIGEvbGliL3N0cmluZy5jCisrKyBiL2xpYi9zdHJpbmcuYwpAQCAtMzYyLDYgKzM2Miw3IEBACiBFWFBPUlRfU1lNQk9MKHN0cnNwbik7CiAjZW5kaWYKIAorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJDU1BOCiAvKioKICAqIHN0cmNzcG4gLSBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCBzdWJzdHJpbmcgb2YgQHMgd2hpY2ggZG9lcwogICogCW5vdCBjb250YWluIGxldHRlcnMgaW4gQHJlamVjdApAQCAtMzg0LDYgKzM4NSw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogRVhQT1JUX1NZTUJPTChzdHJjc3BuKTsKKyNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlBCUksKIC8qKgpAQCAtNDAzLDYgKzQwNSw3IEBACiAJfQogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKICNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlNFUApAQCAtNDY3LDcgKzQ3MCw3IEBACiB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCiB7CiAJY2hhciAqdG1wID0gZGVzdDsKLQljaGFyICpzID0gc3JjOworCWNvbnN0IGNoYXIgKnMgPSBzcmM7CiAKIAl3aGlsZSAoY291bnQtLSkKIAkJKnRtcCsrID0gKnMrKzsKZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCBkM2UzYmQyLi5kMjEzZmVkIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAlyZXR1cm4oZnJlZV9hbGxfYm9vdG1lbV9jb3JlKE5PREVfREFUQSgwKSkpOwogfQogCi12b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3ZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtX25vcGFuaWModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpCiB7CiAJYm9vdG1lbV9kYXRhX3QgKmJkYXRhOwogCXZvaWQgKnB0cjsKQEAgLTQwOSw3ICs0MDksMTQgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkYXRhLCAmYmRhdGFfbGlzdCwgbGlzdCkKIAkJaWYgKChwdHIgPSBfX2FsbG9jX2Jvb3RtZW1fY29yZShiZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIDApKSkKIAkJCXJldHVybihwdHIpOworCXJldHVybiBOVUxMOworfQogCit2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3sKKwl2b2lkICptZW0gPSBfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyhzaXplLGFsaWduLGdvYWwpOworCWlmIChtZW0pCisJCXJldHVybiBtZW07CiAJLyoKIAkgKiBXaG9vcHMsIHdlIGNhbm5vdCBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuCiAJICovCmRpZmYgLS1naXQgYS9tbS9mYWR2aXNlLmMgYi9tbS9mYWR2aXNlLmMKaW5kZXggOTA3YzM5Mi4uMGEwMzM1NyAxMDA2NDQKLS0tIGEvbW0vZmFkdmlzZS5jCisrKyBiL21tL2ZhZHZpc2UuYwpAQCAtMzUsMTcgKzM1LDYgQEAKICAqCiAgKiBMSU5VWF9GQURWX0FTWU5DX1dSSVRFOiBwdXNoIHNvbWUgb3IgYWxsIG9mIHRoZSBkaXJ0eSBwYWdlcyBhdCB0aGUgZGlzay4KICAqCi0gKiBMSU5VWF9GQURWX1dSSVRFX1dBSVQsIExJTlVYX0ZBRFZfQVNZTkNfV1JJVEU6IHB1c2ggYWxsIG9mIHRoZSBjdXJyZW50bHkKLSAqIGRpcnR5IHBhZ2VzIGF0IHRoZSBkaXNrLgotICoKLSAqIExJTlVYX0ZBRFZfV1JJVEVfV0FJVCwgTElOVVhfRkFEVl9BU1lOQ19XUklURSwgTElOVVhfRkFEVl9XUklURV9XQUlUOiBwdXNoCi0gKiBhbGwgb2YgdGhlIGN1cnJlbnRseSBkaXJ0eSBwYWdlcyBhdCB0aGUgZGlzaywgd2FpdCB1bnRpbCB0aGV5IGhhdmUgYmVlbgotICogd3JpdHRlbi4KLSAqCi0gKiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub25lIG9mIHRoZXNlIG9wZXJhdGlvbnMgd3JpdGUgb3V0IHRoZSBmaWxlJ3MKLSAqIG1ldGFkYXRhLiAgU28gdW5sZXNzIHRoZSBhcHBsaWNhdGlvbiBpcyBzdHJpY3RseSBwZXJmb3JtaW5nIG92ZXJ3cml0ZXMgb2YKLSAqIGFscmVhZHktaW5zdGFudGlhdGVkIGRpc2sgYmxvY2tzLCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBoZXJlIHRoYXQgdGhlIGRhdGEKLSAqIHdpbGwgYmUgYXZhaWxhYmxlIGFmdGVyIGEgY3Jhc2guCiAgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfZmFkdmlzZTY0XzY0KGludCBmZCwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbiwgaW50IGFkdmljZSkKIHsKQEAgLTEyOSwxNSArMTE4LDYgQEAKIAkJCWludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhtYXBwaW5nLCBzdGFydF9pbmRleCwKIAkJCQkJCWVuZF9pbmRleCk7CiAJCWJyZWFrOwotCWNhc2UgTElOVVhfRkFEVl9BU1lOQ19XUklURToKLQkJcmV0ID0gX19maWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UobWFwcGluZywgb2Zmc2V0LCBlbmRieXRlLAotCQkJCQkJV0JfU1lOQ19OT05FKTsKLQkJYnJlYWs7Ci0JY2FzZSBMSU5VWF9GQURWX1dSSVRFX1dBSVQ6Ci0JCXJldCA9IHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UobWFwcGluZywKLQkJCQkJb2Zmc2V0ID4+IFBBR0VfQ0FDSEVfU0hJRlQsCi0JCQkJCWVuZGJ5dGUgPj4gUEFHRV9DQUNIRV9TSElGVCk7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDNlZjIwNzMuLmZkNTc0NDIgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTY5Nyw2ICs2OTcsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZyAtIGdhbmcgY29udGlndW91cyBwYWdlY2FjaGUgbG9va3VwCisgKiBAbWFwcGluZzoJVGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoCisgKiBAaW5kZXg6CVRoZSBzdGFydGluZyBwYWdlIGluZGV4CisgKiBAbnJfcGFnZXM6CVRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWdlcworICogQHBhZ2VzOglXaGVyZSB0aGUgcmVzdWx0aW5nIHBhZ2VzIGFyZSBwbGFjZWQKKyAqCisgKiBmaW5kX2dldF9wYWdlc19jb250aWcoKSB3b3JrcyBleGFjdGx5IGxpa2UgZmluZF9nZXRfcGFnZXMoKSwgZXhjZXB0CisgKiB0aGF0IHRoZSByZXR1cm5lZCBudW1iZXIgb2YgcGFnZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgY29udGlndW91cy4KKyAqCisgKiBmaW5kX2dldF9wYWdlc19jb250aWcoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgd2hpY2ggd2VyZSBmb3VuZC4KKyAqLwordW5zaWduZWQgZmluZF9nZXRfcGFnZXNfY29udGlnKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJcmVhZF9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwlyZXQgPSByYWRpeF90cmVlX2dhbmdfbG9va3VwKCZtYXBwaW5nLT5wYWdlX3RyZWUsCisJCQkJKHZvaWQgKiopcGFnZXMsIGluZGV4LCBucl9wYWdlcyk7CisJZm9yIChpID0gMDsgaSA8IHJldDsgaSsrKSB7CisJCWlmIChwYWdlc1tpXS0+bWFwcGluZyA9PSBOVUxMIHx8IHBhZ2VzW2ldLT5pbmRleCAhPSBpbmRleCkKKwkJCWJyZWFrOworCisJCXBhZ2VfY2FjaGVfZ2V0KHBhZ2VzW2ldKTsKKwkJaW5kZXgrKzsKKwl9CisJcmVhZF91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCXJldHVybiBpOworfQorCiAvKgogICogTGlrZSBmaW5kX2dldF9wYWdlcywgZXhjZXB0IHdlIG9ubHkgcmV0dXJuIHBhZ2VzIHdoaWNoIGFyZSB0YWdnZWQgd2l0aAogICogYHRhZycuICAgV2UgdXBkYXRlICppbmRleCB0byBpbmRleCB0aGUgbmV4dCBwYWdlIGZvciB0aGUgdHJhdmVyc2FsLgpkaWZmIC0tZ2l0IGEvbW0vaGlnaG1lbS5jIGIvbW0vaGlnaG1lbS5jCmluZGV4IDU1ODg1ZjYuLjliMjc0ZmRmIDEwMDY0NAotLS0gYS9tbS9oaWdobWVtLmMKKysrIGIvbW0vaGlnaG1lbS5jCkBAIC03NCw4ICs3NCw3IEBACiAJCXBrbWFwX2NvdW50W2ldID0gMDsKIAogCQkvKiBzYW5pdHkgY2hlY2sgKi8KLQkJaWYgKHB0ZV9ub25lKHBrbWFwX3BhZ2VfdGFibGVbaV0pKQotCQkJQlVHKCk7CisJCUJVR19PTihwdGVfbm9uZShwa21hcF9wYWdlX3RhYmxlW2ldKSk7CiAKIAkJLyoKIAkJICogRG9uJ3QgbmVlZCBhbiBhdG9taWMgZmV0Y2gtYW5kLWNsZWFyIG9wIGhlcmU7CkBAIC0xNTgsOCArMTU3LDcgQEAKIAlpZiAoIXZhZGRyKQogCQl2YWRkciA9IG1hcF9uZXdfdmlydHVhbChwYWdlKTsKIAlwa21hcF9jb3VudFtQS01BUF9OUih2YWRkcildKys7Ci0JaWYgKHBrbWFwX2NvdW50W1BLTUFQX05SKHZhZGRyKV0gPCAyKQotCQlCVUcoKTsKKwlCVUdfT04ocGttYXBfY291bnRbUEtNQVBfTlIodmFkZHIpXSA8IDIpOwogCXNwaW5fdW5sb2NrKCZrbWFwX2xvY2spOwogCXJldHVybiAodm9pZCopIHZhZGRyOwogfQpAQCAtMTc0LDggKzE3Miw3IEBACiAKIAlzcGluX2xvY2soJmttYXBfbG9jayk7CiAJdmFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7Ci0JaWYgKCF2YWRkcikKLQkJQlVHKCk7CisJQlVHX09OKCF2YWRkcik7CiAJbnIgPSBQS01BUF9OUih2YWRkcik7CiAKIAkvKgpAQCAtMjIwLDggKzIxNyw3IEBACiAJCXJldHVybiAwOwogCiAJcGFnZV9wb29sID0gbWVtcG9vbF9jcmVhdGVfcGFnZV9wb29sKFBPT0xfU0laRSwgMCk7Ci0JaWYgKCFwYWdlX3Bvb2wpCi0JCUJVRygpOworCUJVR19PTighcGFnZV9wb29sKTsKIAlwcmludGsoImhpZ2htZW0gYm91bmNlIHBvb2wgc2l6ZTogJWQgcGFnZXNcbiIsIFBPT0xfU0laRSk7CiAKIAlyZXR1cm4gMDsKQEAgLTI2NCw4ICsyNjAsNyBAQAogCiAJaXNhX3BhZ2VfcG9vbCA9IG1lbXBvb2xfY3JlYXRlKElTQV9QT09MX1NJWkUsIG1lbXBvb2xfYWxsb2NfcGFnZXNfaXNhLAogCQkJCSAgICAgICBtZW1wb29sX2ZyZWVfcGFnZXMsICh2b2lkICopIDApOwotCWlmICghaXNhX3BhZ2VfcG9vbCkKLQkJQlVHKCk7CisJQlVHX09OKCFpc2FfcGFnZV9wb29sKTsKIAogCXByaW50aygiaXNhIGJvdW5jZSBwb29sIHNpemU6ICVkIHBhZ2VzXG4iLCBJU0FfUE9PTF9TSVpFKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBlYmFkNmJiLi44MzJmNjc2IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0zMzQsNiArMzM0LDcgQEAKIAkJcmV0dXJuIG5yX2h1Z2VfcGFnZXM7CiAKIAlzcGluX2xvY2soJmh1Z2V0bGJfbG9jayk7CisJY291bnQgPSBtYXgoY291bnQsIHJlc2VydmVkX2h1Z2VfcGFnZXMpOwogCXRyeV90b19mcmVlX2xvdyhjb3VudCk7CiAJd2hpbGUgKGNvdW50IDwgbnJfaHVnZV9wYWdlcykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlKE5VTEwsIDApOwpAQCAtNjk3LDkgKzY5OCwxMCBAQAogCQlwZm5fb2Zmc2V0ID0gKHZhZGRyICYgfkhQQUdFX01BU0spID4+IFBBR0VfU0hJRlQ7CiAJCXBhZ2UgPSBwdGVfcGFnZSgqcHRlKTsKIHNhbWVfcGFnZToKLQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCWlmIChwYWdlcykKKwkJaWYgKHBhZ2VzKSB7CisJCQlnZXRfcGFnZShwYWdlKTsKIAkJCXBhZ2VzW2ldID0gcGFnZSArIHBmbl9vZmZzZXQ7CisJCX0KIAogCQlpZiAodm1hcykKIAkJCXZtYXNbaV0gPSB2bWE7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggYWYzZDU3My4uNGUxOTYxNSAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCisrKyBiL21tL21hZHZpc2UuYwpAQCAtMTY4LDYgKzE2OCw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fU0hBUkVEfFZNX1dSSVRFKSkgIT0gKFZNX1NIQVJFRHxWTV9XUklURSkpCisJCXJldHVybiAtRUFDQ0VTOworCiAJbWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOwogCiAJb2Zmc2V0ID0gKGxvZmZfdCkoc3RhcnQgLSB2bWEtPnZtX3N0YXJ0KQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA4ZDhmNTI1Li4wZWM3YmM2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtODcsNyArODcsNyBAQAogc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9yYW5kbWFwcyhjaGFyICpzKQogewogCXJhbmRvbWl6ZV92YV9zcGFjZSA9IDA7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub3JhbmRtYXBzIiwgZGlzYWJsZV9yYW5kbWFwcyk7CiAKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDFmZTc2ZDkuLjcwZGY1YzAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtNjksMTIgKzY5LDE2IEBACiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpICs9IFBBR0VTX1BFUl9TRUNUSU9OKSB7CiAJCWVyciA9IF9fYWRkX3NlY3Rpb24oem9uZSwgcGh5c19zdGFydF9wZm4gKyBpKTsKIAotCQlpZiAoZXJyKQorCQkvKiBXZSB3YW50IHRvIGtlZXAgYWRkaW5nIHRoZSByZXN0IG9mIHRoZQorCQkgKiBzZWN0aW9ucyBpZiB0aGUgZmlyc3Qgb25lcyBhbHJlYWR5IGV4aXN0CisJCSAqLworCQlpZiAoZXJyICYmIChlcnIgIT0gLUVFWElTVCkpCiAJCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19hZGRfcGFnZXMpOwogCiBzdGF0aWMgdm9pZCBncm93X3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKQEAgLTg3LDggKzkxLDggQEAKIAlpZiAoc3RhcnRfcGZuIDwgem9uZS0+em9uZV9zdGFydF9wZm4pCiAJCXpvbmUtPnpvbmVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOwogCi0JaWYgKGVuZF9wZm4gPiBvbGRfem9uZV9lbmRfcGZuKQotCQl6b25lLT5zcGFubmVkX3BhZ2VzID0gZW5kX3BmbiAtIHpvbmUtPnpvbmVfc3RhcnRfcGZuOworCXpvbmUtPnNwYW5uZWRfcGFnZXMgPSBtYXgob2xkX3pvbmVfZW5kX3BmbiwgZW5kX3BmbikgLQorCQkJCXpvbmUtPnpvbmVfc3RhcnRfcGZuOwogCiAJem9uZV9zcGFuX3dyaXRldW5sb2NrKHpvbmUpOwogfQpAQCAtMTAyLDggKzEwNiw4IEBACiAJaWYgKHN0YXJ0X3BmbiA8IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbikKIAkJcGdkYXQtPm5vZGVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOwogCi0JaWYgKGVuZF9wZm4gPiBvbGRfcGdkYXRfZW5kX3BmbikKLQkJcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IGVuZF9wZm4gLSBwZ2RhdC0+bm9kZV9zdGFydF9wZm47CisJcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IG1heChvbGRfcGdkYXRfZW5kX3BmbiwgZW5kX3BmbikgLQorCQkJCQlwZ2RhdC0+bm9kZV9zdGFydF9wZm47CiB9CiAKIGludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IGRlYzgyNDkuLjg3NzhmNTggMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC0xNzYxLDcgKzE3NjEsNiBAQAogCQltZC0+bWFwY291bnRfbWF4ID0gY291bnQ7CiAKIAltZC0+bm9kZVtwYWdlX3RvX25pZChwYWdlKV0rKzsKLQljb25kX3Jlc2NoZWQoKTsKIH0KIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAwOWY2ZTRhLi4xYzI1MDQwIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC0xNiw4ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkvKiBmb3IgdHJ5X3RvX3JlbGVhc2VfcGFnZSgpLAotCQkJCQlidWZmZXJfaGVhZHNfb3Zlcl9saW1pdCAqLworI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KQEAgLTI4LDggKzI3LDYgQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLSNpbmNsdWRlICJpbnRlcm5hbC5oIgotCiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgdG8gdGFrZSBvZmYgdGhlIExSVSBmb3IgbWlncmF0aW9uICovCiAjZGVmaW5lIE1JR1JBVEVfQ0hVTktfU0laRSAyNTYKIApAQCAtMTc2LDcgKzE3Myw2IEBACiByZXRyeToKIAlyZXR1cm4gLUVBR0FJTjsKIH0KLUVYUE9SVF9TWU1CT0woc3dhcF9wYWdlKTsKIAogLyoKICAqIFJlbW92ZSByZWZlcmVuY2VzIGZvciBhIHBhZ2UgYW5kIGVzdGFibGlzaCB0aGUgbmV3IHBhZ2Ugd2l0aCB0aGUgY29ycmVjdApAQCAtMjM0LDcgKzIzMCw3IEBACiAJaWYgKCFwYWdlX21hcHBpbmcocGFnZSkgfHwgcGFnZV9jb3VudChwYWdlKSAhPSBucl9yZWZzIHx8CiAJCQkqcmFkaXhfcG9pbnRlciAhPSBwYWdlKSB7CiAJCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAkvKgpAQCAtNDQzLDYgKzQzOSwxNyBAQAogCQkJZ290byB1bmxvY2tfYm90aDsKICAgICAgICAgICAgICAgICB9CiAKKwkJLyogTWFrZSBzdXJlIHRoZSBkaXJ0eSBiaXQgaXMgdXAgdG8gZGF0ZSAqLworCQlpZiAodHJ5X3RvX3VubWFwKHBhZ2UsIDEpID09IFNXQVBfRkFJTCkgeworCQkJcmMgPSAtRVBFUk07CisJCQlnb3RvIHVubG9ja19ib3RoOworCQl9CisKKwkJaWYgKHBhZ2VfbWFwY291bnQocGFnZSkpIHsKKwkJCXJjID0gLUVBR0FJTjsKKwkJCWdvdG8gdW5sb2NrX2JvdGg7CisJCX0KKwogCQkvKgogCQkgKiBEZWZhdWx0IGhhbmRsaW5nIGlmIGEgZmlsZXN5c3RlbSBkb2VzIG5vdCBwcm92aWRlCiAJCSAqIGEgbWlncmF0aW9uIGZ1bmN0aW9uLiBXZSBjYW4gb25seSBtaWdyYXRlIGNsZWFuCmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggNGY1YjU3MC4uZTZlZTEyMyAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMTIxLDE0ICsxMjEsMjYgQEAKIAkJICogb25seSBjYWxsIGlmIHdlJ3JlIGFib3V0IHRvIGZhaWwuCiAJCSAqLwogCQluID0gbnJfZnJlZV9wYWdlcygpOworCisJCS8qCisJCSAqIExlYXZlIHJlc2VydmVkIHBhZ2VzLiBUaGUgcGFnZXMgYXJlIG5vdCBmb3IgYW5vbnltb3VzIHBhZ2VzLgorCQkgKi8KKwkJaWYgKG4gPD0gdG90YWxyZXNlcnZlX3BhZ2VzKQorCQkJZ290byBlcnJvcjsKKwkJZWxzZQorCQkJbiAtPSB0b3RhbHJlc2VydmVfcGFnZXM7CisKKwkJLyoKKwkJICogTGVhdmUgdGhlIGxhc3QgMyUgZm9yIHJvb3QKKwkJICovCiAJCWlmICghY2FwX3N5c19hZG1pbikKIAkJCW4gLT0gbiAvIDMyOwogCQlmcmVlICs9IG47CiAKIAkJaWYgKGZyZWUgPiBwYWdlcykKIAkJCXJldHVybiAwOwotCQl2bV91bmFjY3RfbWVtb3J5KHBhZ2VzKTsKLQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZ290byBlcnJvcjsKIAl9CiAKIAlhbGxvd2VkID0gKHRvdGFscmFtX3BhZ2VzIC0gaHVnZXRsYl90b3RhbF9wYWdlcygpKQpAQCAtMTUwLDcgKzE2Miw3IEBACiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZ2bV9jb21taXR0ZWRfc3BhY2UpIDwgKGxvbmcpYWxsb3dlZCkKIAkJcmV0dXJuIDA7Ci0KK2Vycm9yOgogCXZtX3VuYWNjdF9tZW1vcnkocGFnZXMpOwogCiAJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjAsNiArMjMyLDE3IEBACiAKIAlpZiAoYnJrIDwgbW0tPmVuZF9jb2RlKQogCQlnb3RvIG91dDsKKworCS8qCisJICogQ2hlY2sgYWdhaW5zdCBybGltaXQgaGVyZS4gSWYgdGhpcyBjaGVjayBpcyBkb25lIGxhdGVyIGFmdGVyIHRoZSB0ZXN0CisJICogb2Ygb2xkYnJrIHdpdGggbmV3YnJrIHRoZW4gaXQgY2FuIGVzY2FwZSB0aGUgdGVzdCBhbmQgbGV0IHRoZSBkYXRhCisJICogc2VnbWVudCBncm93IGJleW9uZCBpdHMgc2V0IGxpbWl0IHRoZSBpbiBjYXNlIHdoZXJlIHRoZSBsaW1pdCBpcworCSAqIG5vdCBwYWdlIGFsaWduZWQgLVJhbSBHdXB0YQorCSAqLworCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCWlmIChybGltIDwgUkxJTV9JTkZJTklUWSAmJiBicmsgLSBtbS0+c3RhcnRfZGF0YSA+IHJsaW0pCisJCWdvdG8gb3V0OworCiAJbmV3YnJrID0gUEFHRV9BTElHTihicmspOwogCW9sZGJyayA9IFBBR0VfQUxJR04obW0tPmJyayk7CiAJaWYgKG9sZGJyayA9PSBuZXdicmspCkBAIC0yMzIsMTEgKzI1NSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIENoZWNrIGFnYWluc3QgcmxpbWl0Li4gKi8KLQlybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9EQVRBXS5ybGltX2N1cjsKLQlpZiAocmxpbSA8IFJMSU1fSU5GSU5JVFkgJiYgYnJrIC0gbW0tPnN0YXJ0X2RhdGEgPiBybGltKQotCQlnb3RvIG91dDsKLQogCS8qIENoZWNrIGFnYWluc3QgZXhpc3RpbmcgbW1hcCBtYXBwaW5ncy4gKi8KIAlpZiAoZmluZF92bWFfaW50ZXJzZWN0aW9uKG1tLCBvbGRicmssIG5ld2JyaytQQUdFX1NJWkUpKQogCQlnb3RvIG91dDsKQEAgLTI5NCw4ICszMTIsNyBAQAogCWkgPSBicm93c2VfcmIoJm1tLT5tbV9yYik7CiAJaWYgKGkgIT0gbW0tPm1hcF9jb3VudCkKIAkJcHJpbnRrKCJtYXBfY291bnQgJWQgcmIgJWRcbiIsIG1tLT5tYXBfY291bnQsIGkpLCBidWcgPSAxOwotCWlmIChidWcpCi0JCUJVRygpOworCUJVR19PTihidWcpOwogfQogI2Vsc2UKICNkZWZpbmUgdmFsaWRhdGVfbW0obW0pIGRvIHsgfSB3aGlsZSAoMCkKQEAgLTQzMiw4ICs0NDksNyBAQAogCXN0cnVjdCByYl9ub2RlICoqIHJiX2xpbmssICogcmJfcGFyZW50OwogCiAJX192bWEgPSBmaW5kX3ZtYV9wcmVwYXJlKG1tLCB2bWEtPnZtX3N0YXJ0LCZwcmV2LCAmcmJfbGluaywgJnJiX3BhcmVudCk7Ci0JaWYgKF9fdm1hICYmIF9fdm1hLT52bV9zdGFydCA8IHZtYS0+dm1fZW5kKQotCQlCVUcoKTsKKwlCVUdfT04oX192bWEgJiYgX192bWEtPnZtX3N0YXJ0IDwgdm1hLT52bV9lbmQpOwogCV9fdm1hX2xpbmsobW0sIHZtYSwgcHJldiwgcmJfbGluaywgcmJfcGFyZW50KTsKIAltbS0+bWFwX2NvdW50Kys7CiB9CkBAIC04MTMsOCArODI5LDcgQEAKIAkgKiAoZS5nLiBzdGFzaCBpbmZvIGluIG5leHQncyBhbm9uX3ZtYV9ub2RlIHdoZW4gYXNzaWduaW5nCiAJICogYW4gYW5vbl92bWEsIG9yIHdoZW4gdHJ5aW5nIHZtYV9tZXJnZSkuICBBbm90aGVyIHRpbWUuCiAJICovCi0JaWYgKGZpbmRfdm1hX3ByZXYodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCwgJm5lYXIpICE9IHZtYSkKLQkJQlVHKCk7CisJQlVHX09OKGZpbmRfdm1hX3ByZXYodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCwgJm5lYXIpICE9IHZtYSk7CiAJaWYgKCFuZWFyKQogCQlnb3RvIG5vbmU7CiAKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IGRiNDVlZmEuLjAyOWZhZGEgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTE0NywxNCArMTE0NywyNiBAQAogCQkgKiBvbmx5IGNhbGwgaWYgd2UncmUgYWJvdXQgdG8gZmFpbC4KIAkJICovCiAJCW4gPSBucl9mcmVlX3BhZ2VzKCk7CisKKwkJLyoKKwkJICogTGVhdmUgcmVzZXJ2ZWQgcGFnZXMuIFRoZSBwYWdlcyBhcmUgbm90IGZvciBhbm9ueW1vdXMgcGFnZXMuCisJCSAqLworCQlpZiAobiA8PSB0b3RhbHJlc2VydmVfcGFnZXMpCisJCQlnb3RvIGVycm9yOworCQllbHNlCisJCQluIC09IHRvdGFscmVzZXJ2ZV9wYWdlczsKKworCQkvKgorCQkgKiBMZWF2ZSB0aGUgbGFzdCAzJSBmb3Igcm9vdAorCQkgKi8KIAkJaWYgKCFjYXBfc3lzX2FkbWluKQogCQkJbiAtPSBuIC8gMzI7CiAJCWZyZWUgKz0gbjsKIAogCQlpZiAoZnJlZSA+IHBhZ2VzKQogCQkJcmV0dXJuIDA7Ci0JCXZtX3VuYWNjdF9tZW1vcnkocGFnZXMpOwotCQlyZXR1cm4gLUVOT01FTTsKKworCQlnb3RvIGVycm9yOwogCX0KIAogCWFsbG93ZWQgPSB0b3RhbHJhbV9wYWdlcyAqIHN5c2N0bF9vdmVyY29tbWl0X3JhdGlvIC8gMTAwOwpAQCAtMTE3NSw3ICsxMTg3LDcgQEAKIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJnZtX2NvbW1pdHRlZF9zcGFjZSkgPCAobG9uZylhbGxvd2VkKQogCQlyZXR1cm4gMDsKLQorZXJyb3I6CiAJdm1fdW5hY2N0X21lbW9yeShwYWdlcyk7CiAKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDc4NzQ3YWYuLjA0MmU2NDMgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtNDYsMTUgKzQ2LDI1IEBACiB1bnNpZ25lZCBsb25nIGJhZG5lc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHVwdGltZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvaW50cywgY3B1X3RpbWUsIHJ1bl90aW1lLCBzOwotCXN0cnVjdCBsaXN0X2hlYWQgKnRzazsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkOwogCi0JaWYgKCFwLT5tbSkKKwl0YXNrX2xvY2socCk7CisJbW0gPSBwLT5tbTsKKwlpZiAoIW1tKSB7CisJCXRhc2tfdW5sb2NrKHApOwogCQlyZXR1cm4gMDsKKwl9CiAKIAkvKgogCSAqIFRoZSBtZW1vcnkgc2l6ZSBvZiB0aGUgcHJvY2VzcyBpcyB0aGUgYmFzaXMgZm9yIHRoZSBiYWRuZXNzLgogCSAqLwotCXBvaW50cyA9IHAtPm1tLT50b3RhbF92bTsKKwlwb2ludHMgPSBtbS0+dG90YWxfdm07CisKKwkvKgorCSAqIEFmdGVyIHRoaXMgdW5sb2NrIHdlIGNhbiBubyBsb25nZXIgZGVyZWZlcmVuY2UgbG9jYWwgdmFyaWFibGUgYG1tJworCSAqLworCXRhc2tfdW5sb2NrKHApOwogCiAJLyoKIAkgKiBQcm9jZXNzZXMgd2hpY2ggZm9yayBhIGxvdCBvZiBjaGlsZCBwcm9jZXNzZXMgYXJlIGxpa2VseQpAQCAtNjQsMTEgKzc0LDExIEBACiAJICogY2hpbGQgaXMgZWF0aW5nIHRoZSB2YXN0IG1ham9yaXR5IG9mIG1lbW9yeSwgYWRkaW5nIG9ubHkgaGFsZgogCSAqIHRvIHRoZSBwYXJlbnRzIHdpbGwgbWFrZSB0aGUgY2hpbGQgb3VyIGtpbGwgY2FuZGlkYXRlIG9mIGNob2ljZS4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoKHRzaywgJnAtPmNoaWxkcmVuKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hsZDsKLQkJY2hsZCA9IGxpc3RfZW50cnkodHNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNpYmxpbmcpOwotCQlpZiAoY2hsZC0+bW0gIT0gcC0+bW0gJiYgY2hsZC0+bW0pCi0JCQlwb2ludHMgKz0gY2hsZC0+bW0tPnRvdGFsX3ZtLzIgKyAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZwLT5jaGlsZHJlbiwgc2libGluZykgeworCQl0YXNrX2xvY2soY2hpbGQpOworCQlpZiAoY2hpbGQtPm1tICE9IG1tICYmIGNoaWxkLT5tbSkKKwkJCXBvaW50cyArPSBjaGlsZC0+bW0tPnRvdGFsX3ZtLzIgKyAxOworCQl0YXNrX3VubG9jayhjaGlsZCk7CiAJfQogCiAJLyoKQEAgLTI0NCwxNyArMjU0LDI0IEBACiAJZm9yY2Vfc2lnKFNJR0tJTEwsIHApOwogfQogCi1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqb29tX2tpbGxfdGFzayh0YXNrX3QgKnAsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCitzdGF0aWMgaW50IG9vbV9raWxsX3Rhc2sodGFza190ICpwLCBjb25zdCBjaGFyICptZXNzYWdlKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ2V0X3Rhc2tfbW0ocCk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdGFza190ICogZywgKiBxOwogCi0JaWYgKCFtbSkKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKG1tID09ICZpbml0X21tKSB7Ci0JCW1tcHV0KG1tKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCW1tID0gcC0+bW07CisKKwkvKiBXQVJOSU5HOiBtbSBtYXkgbm90IGJlIGRlcmVmZXJlbmNlZCBzaW5jZSB3ZSBkaWQgbm90IG9idGFpbiBpdHMKKwkgKiB2YWx1ZSBmcm9tIGdldF90YXNrX21tKHApLiAgVGhpcyBpcyBPSyBzaW5jZSBhbGwgd2UgbmVlZCB0byBkbyBpcworCSAqIGNvbXBhcmUgbW0gdG8gcS0+bW0gYmVsb3cuCisJICoKKwkgKiBGdXJ0aGVybW9yZSwgZXZlbiBpZiBtbSBjb250YWlucyBhIG5vbi1OVUxMIHZhbHVlLCBwLT5tbSBtYXkKKwkgKiBjaGFuZ2UgdG8gTlVMTCBhdCBhbnkgdGltZSBzaW5jZSB3ZSBkbyBub3QgaG9sZCB0YXNrX2xvY2socCkuCisJICogSG93ZXZlciwgdGhpcyBpcyBvZiBubyBjb25jZXJuIHRvIHVzLgorCSAqLworCisJaWYgKG1tID09IE5VTEwgfHwgbW0gPT0gJmluaXRfbW0pCisJCXJldHVybiAxOwogCiAJX19vb21fa2lsbF90YXNrKHAsIG1lc3NhZ2UpOwogCS8qCkBAIC0yNjYsMTMgKzI4MywxMiBAQAogCQkJX19vb21fa2lsbF90YXNrKHEsIG1lc3NhZ2UpOwogCXdoaWxlX2VhY2hfdGhyZWFkKGcsIHEpOwogCi0JcmV0dXJuIG1tOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCQkJdW5zaWduZWQgbG9uZyBwb2ludHMsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCitzdGF0aWMgaW50IG9vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHBvaW50cywKKwkJY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLSAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRzazsKIApAQCAtMjgzLDkgKzI5OSw4IEBACiAJCWMgPSBsaXN0X2VudHJ5KHRzaywgc3RydWN0IHRhc2tfc3RydWN0LCBzaWJsaW5nKTsKIAkJaWYgKGMtPm1tID09IHAtPm1tKQogCQkJY29udGludWU7Ci0JCW1tID0gb29tX2tpbGxfdGFzayhjLCBtZXNzYWdlKTsKLQkJaWYgKG1tKQotCQkJcmV0dXJuIG1tOworCQlpZiAoIW9vbV9raWxsX3Rhc2soYywgbWVzc2FnZSkpCisJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIG9vbV9raWxsX3Rhc2socCwgbWVzc2FnZSk7CiB9CkBAIC0zMDAsNyArMzE1LDYgQEAKICAqLwogdm9pZCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOwogCXRhc2tfdCAqcDsKIAl1bnNpZ25lZCBsb25nIHBvaW50cyA9IDA7CiAKQEAgLTMyMCwxMiArMzM0LDEyIEBACiAJICovCiAJc3dpdGNoIChjb25zdHJhaW5lZF9hbGxvYyh6b25lbGlzdCwgZ2ZwX21hc2spKSB7CiAJY2FzZSBDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1k6Ci0JCW1tID0gb29tX2tpbGxfcHJvY2VzcyhjdXJyZW50LCBwb2ludHMsCisJCW9vbV9raWxsX3Byb2Nlc3MoY3VycmVudCwgcG9pbnRzLAogCQkJCSJObyBhdmFpbGFibGUgbWVtb3J5IChNUE9MX0JJTkQpIik7CiAJCWJyZWFrOwogCiAJY2FzZSBDT05TVFJBSU5UX0NQVVNFVDoKLQkJbW0gPSBvb21fa2lsbF9wcm9jZXNzKGN1cnJlbnQsIHBvaW50cywKKwkJb29tX2tpbGxfcHJvY2VzcyhjdXJyZW50LCBwb2ludHMsCiAJCQkJIk5vIGF2YWlsYWJsZSBtZW1vcnkgaW4gY3B1c2V0Iik7CiAJCWJyZWFrOwogCkBAIC0zNDcsOCArMzYxLDcgQEAKIAkJCXBhbmljKCJPdXQgb2YgbWVtb3J5IGFuZCBubyBraWxsYWJsZSBwcm9jZXNzZXMuLi5cbiIpOwogCQl9CiAKLQkJbW0gPSBvb21fa2lsbF9wcm9jZXNzKHAsIHBvaW50cywgIk91dCBvZiBtZW1vcnkiKTsKLQkJaWYgKCFtbSkKKwkJaWYgKG9vbV9raWxsX3Byb2Nlc3MocCwgcG9pbnRzLCAiT3V0IG9mIG1lbW9yeSIpKQogCQkJZ290byByZXRyeTsKIAogCQlicmVhazsKQEAgLTM1Nyw4ICszNzAsNiBAQAogb3V0OgogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAljcHVzZXRfdW5sb2NrKCk7Ci0JaWYgKG1tKQotCQltbXB1dChtbSk7CiAKIAkvKgogCSAqIEdpdmUgInAiIGEgZ29vZCBjaGFuY2Ugb2Yga2lsbGluZyBpdHNlbGYgYmVmb3JlIHdlCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCA4OTNkNzY3Li43NWQ3ZjQ4IDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTcyLDEzICs3MiwxMiBAQAogaW50IHZtX2RpcnR5X3JhdGlvID0gNDA7CiAKIC8qCi0gKiBUaGUgaW50ZXJ2YWwgYmV0d2VlbiBga3VwZGF0ZSctc3R5bGUgd3JpdGViYWNrcywgaW4gY2VudGlzZWNvbmRzCi0gKiAoaHVuZHJlZHRocyBvZiBhIHNlY29uZCkKKyAqIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIGBrdXBkYXRlJy1zdHlsZSB3cml0ZWJhY2tzLCBpbiBqaWZmaWVzCiAgKi8KIGludCBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgPSA1ICogSFo7CiAKIC8qCi0gKiBUaGUgbG9uZ2VzdCBudW1iZXIgb2YgY2VudGlzZWNvbmRzIGZvciB3aGljaCBkYXRhIGlzIGFsbG93ZWQgdG8gcmVtYWluIGRpcnR5CisgKiBUaGUgbG9uZ2VzdCBudW1iZXIgb2YgamlmZmllcyBmb3Igd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIHJlbWFpbiBkaXJ0eQogICovCiBpbnQgZGlydHlfZXhwaXJlX2ludGVydmFsID0gMzAgKiBIWjsKIApAQCAtMjU4LDcgKzI1Nyw3IEBACiAvKioKICAqIGJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIgLSBiYWxhbmNlIGRpcnR5IG1lbW9yeSBzdGF0ZQogICogQG1hcHBpbmc6IGFkZHJlc3Nfc3BhY2Ugd2hpY2ggd2FzIGRpcnRpZWQKLSAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIHRoZSBjYWxsZXIgaGFzIGp1c3QgZGlydGllZAorICogQG5yX3BhZ2VzX2RpcnRpZWQ6IG51bWJlciBvZiBwYWdlcyB3aGljaCB0aGUgY2FsbGVyIGhhcyBqdXN0IGRpcnRpZWQKICAqCiAgKiBQcm9jZXNzZXMgd2hpY2ggYXJlIGRpcnR5aW5nIG1lbW9yeSBzaG91bGQgY2FsbCBpbiBoZXJlIG9uY2UgZm9yIGVhY2ggcGFnZQogICogd2hpY2ggd2FzIG5ld2x5IGRpcnRpZWQuICBUaGUgZnVuY3Rpb24gd2lsbCBwZXJpb2RpY2FsbHkgY2hlY2sgdGhlIHN5c3RlbSdzCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggZGM1MjNhMS4uMjUzYTQ1MCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyoKQEAgLTUxLDYgKzUyLDcgQEAKIEVYUE9SVF9TWU1CT0wobm9kZV9wb3NzaWJsZV9tYXApOwogdW5zaWduZWQgbG9uZyB0b3RhbHJhbV9wYWdlcyBfX3JlYWRfbW9zdGx5OwogdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2hfcGFnZXMgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CiBsb25nIG5yX3N3YXBfcGFnZXM7CiBpbnQgcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uOwogCkBAIC0xNTEsNyArMTUzLDggQEAKIAkJCTEgPDwgUEdfcmVjbGFpbSB8CiAJCQkxIDw8IFBHX3NsYWIgICAgfAogCQkJMSA8PCBQR19zd2FwY2FjaGUgfAotCQkJMSA8PCBQR193cml0ZWJhY2sgKTsKKwkJCTEgPDwgUEdfd3JpdGViYWNrIHwKKwkJCTEgPDwgUEdfYnVkZHkgKTsKIAlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKIAlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOwogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwpAQCAtMjMwLDE4ICsyMzMsMjAgQEAKICAqIHpvbmUtPmxvY2sgaXMgYWxyZWFkeSBhY3F1aXJlZCB3aGVuIHdlIHVzZSB0aGVzZS4KICAqIFNvLCB3ZSBkb24ndCBuZWVkIGF0b21pYyBwYWdlLT5mbGFncyBvcGVyYXRpb25zIGhlcmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKSB7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKIAlyZXR1cm4gcGFnZV9wcml2YXRlKHBhZ2UpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeworc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCit7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7Ci0JX19TZXRQYWdlUHJpdmF0ZShwYWdlKTsKKwlfX1NldFBhZ2VCdWRkeShwYWdlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJtdl9wYWdlX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKQogewotCV9fQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKKwlfX0NsZWFyUGFnZUJ1ZGR5KHBhZ2UpOwogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CiB9CiAKQEAgLTI4MCwxMSArMjg1LDEzIEBACiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGEgcGFnZSBpcyBmcmVlICYmIGlzIHRoZSBidWRkeQogICogd2UgY2FuIGRvIGNvYWxlc2NlIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGlmCiAgKiAoYSkgdGhlIGJ1ZGR5IGlzIG5vdCBpbiBhIGhvbGUgJiYKLSAqIChiKSB0aGUgYnVkZHkgaXMgZnJlZSAmJgotICogKGMpIHRoZSBidWRkeSBpcyBvbiB0aGUgYnVkZHkgc3lzdGVtICYmCi0gKiAoZCkgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaGF2ZSB0aGUgc2FtZSBvcmRlci4KLSAqIGZvciByZWNvcmRpbmcgcGFnZSdzIG9yZGVyLCB3ZSB1c2UgcGFnZV9wcml2YXRlKHBhZ2UpIGFuZCBQR19wcml2YXRlLgorICogKGIpIHRoZSBidWRkeSBpcyBpbiB0aGUgYnVkZHkgc3lzdGVtICYmCisgKiAoYykgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaGF2ZSB0aGUgc2FtZSBvcmRlci4KICAqCisgKiBGb3IgcmVjb3JkaW5nIHdoZXRoZXIgYSBwYWdlIGlzIGluIHRoZSBidWRkeSBzeXN0ZW0sIHdlIHVzZSBQR19idWRkeS4KKyAqIFNldHRpbmcsIGNsZWFyaW5nLCBhbmQgdGVzdGluZyBQR19idWRkeSBpcyBzZXJpYWxpemVkIGJ5IHpvbmUtPmxvY2suCisgKgorICogRm9yIHJlY29yZGluZyBwYWdlJ3Mgb3JkZXIsIHdlIHVzZSBwYWdlX3ByaXZhdGUocGFnZSkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfaXNfYnVkZHkoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKIHsKQEAgLTI5MywxMSArMzAwLDExIEBACiAJCXJldHVybiAwOwogI2VuZGlmCiAKLSAgICAgICBpZiAoUGFnZVByaXZhdGUocGFnZSkgICAgICAgICAgICYmCi0gICAgICAgICAgIChwYWdlX29yZGVyKHBhZ2UpID09IG9yZGVyKSAmJgotICAgICAgICAgICAgcGFnZV9jb3VudChwYWdlKSA9PSAwKQotICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgcmV0dXJuIDA7CisJaWYgKFBhZ2VCdWRkeShwYWdlKSAmJiBwYWdlX29yZGVyKHBhZ2UpID09IG9yZGVyKSB7CisJCUJVR19PTihwYWdlX2NvdW50KHBhZ2UpICE9IDApOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zMTMsNyArMzIwLDcgQEAKICAqIGFzIG5lY2Vzc2FyeSwgcGx1cyBzb21lIGFjY291bnRpbmcgbmVlZGVkIHRvIHBsYXkgbmljZWx5IHdpdGggb3RoZXIKICAqIHBhcnRzIG9mIHRoZSBWTSBzeXN0ZW0uCiAgKiBBdCBlYWNoIGxldmVsLCB3ZSBrZWVwIGEgbGlzdCBvZiBwYWdlcywgd2hpY2ggYXJlIGhlYWRzIG9mIGNvbnRpbnVvdXMKLSAqIGZyZWUgcGFnZXMgb2YgbGVuZ3RoIG9mICgxIDw8IG9yZGVyKSBhbmQgbWFya2VkIHdpdGggUEdfUHJpdmF0ZS5QYWdlJ3MKKyAqIGZyZWUgcGFnZXMgb2YgbGVuZ3RoIG9mICgxIDw8IG9yZGVyKSBhbmQgbWFya2VkIHdpdGggUEdfYnVkZHkuIFBhZ2UncwogICogb3JkZXIgaXMgcmVjb3JkZWQgaW4gcGFnZV9wcml2YXRlKHBhZ2UpIGZpZWxkLgogICogU28gd2hlbiB3ZSBhcmUgYWxsb2NhdGluZyBvciBmcmVlaW5nIG9uZSwgd2UgY2FuIGRlcml2ZSB0aGUgc3RhdGUgb2YgdGhlCiAgKiBvdGhlci4gIFRoYXQgaXMsIGlmIHdlIGFsbG9jYXRlIGEgc21hbGwgYmxvY2ssIGFuZCBib3RoIHdlcmUgICAKQEAgLTM3Niw3ICszODMsOCBAQAogCQkJMSA8PCBQR19zbGFiCXwKIAkJCTEgPDwgUEdfc3dhcGNhY2hlIHwKIAkJCTEgPDwgUEdfd3JpdGViYWNrIHwKLQkJCTEgPDwgUEdfcmVzZXJ2ZWQgKSkpKQorCQkJMSA8PCBQR19yZXNlcnZlZCB8CisJCQkxIDw8IFBHX2J1ZGR5ICkpKSkKIAkJYmFkX3BhZ2UocGFnZSk7CiAJaWYgKFBhZ2VEaXJ0eShwYWdlKSkKIAkJX19DbGVhclBhZ2VEaXJ0eShwYWdlKTsKQEAgLTUyNCw3ICs1MzIsOCBAQAogCQkJMSA8PCBQR19zbGFiICAgIHwKIAkJCTEgPDwgUEdfc3dhcGNhY2hlIHwKIAkJCTEgPDwgUEdfd3JpdGViYWNrIHwKLQkJCTEgPDwgUEdfcmVzZXJ2ZWQgKSkpKQorCQkJMSA8PCBQR19yZXNlcnZlZCB8CisJCQkxIDw8IFBHX2J1ZGR5ICkpKSkKIAkJYmFkX3BhZ2UocGFnZSk7CiAKIAkvKgpAQCAtOTQyLDcgKzk1MSw3IEBACiAJCWdvdG8gZ290X3BnOwogCiAJZG8gewotCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZCgqeiwgZ2ZwX21hc2spKQorCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZCgqeiwgZ2ZwX21hc2t8X19HRlBfSEFSRFdBTEwpKQogCQkJd2FrZXVwX2tzd2FwZCgqeiwgb3JkZXIpOwogCX0gd2hpbGUgKCooKyt6KSk7CiAKQEAgLTk2MSw3ICs5NzAsOCBAQAogCQlhbGxvY19mbGFncyB8PSBBTExPQ19IQVJERVI7CiAJaWYgKGdmcF9tYXNrICYgX19HRlBfSElHSCkKIAkJYWxsb2NfZmxhZ3MgfD0gQUxMT0NfSElHSDsKLQlhbGxvY19mbGFncyB8PSBBTExPQ19DUFVTRVQ7CisJaWYgKHdhaXQpCisJCWFsbG9jX2ZsYWdzIHw9IEFMTE9DX0NQVVNFVDsKIAogCS8qCiAJICogR28gdGhyb3VnaCB0aGUgem9uZWxpc3QgYWdhaW4uIExldCBfX0dGUF9ISUdIIGFuZCBhbGxvY2F0aW9ucwpAQCAtMTk1NCw3ICsxOTY0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IHBhZ2VzZXRfY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IHBhZ2VzZXRfY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAogCQl2b2lkICpoY3B1KQogewpAQCAtMjExNSwxNCArMjEyNSwyMiBAQAogI2lmZGVmIENPTkZJR19GTEFUX05PREVfTUVNX01BUAogCS8qIGlhNjQgZ2V0cyBpdHMgb3duIG5vZGVfbWVtX21hcCwgYmVmb3JlIHRoaXMsIHdpdGhvdXQgYm9vdG1lbSAqLwogCWlmICghcGdkYXQtPm5vZGVfbWVtX21hcCkgewotCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RhcnQsIGVuZDsKIAkJc3RydWN0IHBhZ2UgKm1hcDsKIAotCQlzaXplID0gKHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJCS8qCisJCSAqIFRoZSB6b25lJ3MgZW5kcG9pbnRzIGFyZW4ndCByZXF1aXJlZCB0byBiZSBNQVhfT1JERVIKKwkJICogYWxpZ25lZCBidXQgdGhlIG5vZGVfbWVtX21hcCBlbmRwb2ludHMgbXVzdCBiZSBpbiBvcmRlcgorCQkgKiBmb3IgdGhlIGJ1ZGR5IGFsbG9jYXRvciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCisJCSAqLworCQlzdGFydCA9IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiAmIH4oTUFYX09SREVSX05SX1BBR0VTIC0gMSk7CisJCWVuZCA9IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXM7CisJCWVuZCA9IEFMSUdOKGVuZCwgTUFYX09SREVSX05SX1BBR0VTKTsKKwkJc2l6ZSA9ICAoZW5kIC0gc3RhcnQpICogc2l6ZW9mKHN0cnVjdCBwYWdlKTsKIAkJbWFwID0gYWxsb2NfcmVtYXAocGdkYXQtPm5vZGVfaWQsIHNpemUpOwogCQlpZiAoIW1hcCkKIAkJCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgc2l6ZSk7Ci0JCXBnZGF0LT5ub2RlX21lbV9tYXAgPSBtYXA7CisJCXBnZGF0LT5ub2RlX21lbV9tYXAgPSBtYXAgKyAocGdkYXQtPm5vZGVfc3RhcnRfcGZuIC0gc3RhcnQpOwogCX0KICNpZmRlZiBDT05GSUdfRkxBVE1FTQogCS8qCkBAIC0yNDcyLDYgKzI0OTAsMzggQEAKIH0KIAogLyoKKyAqIGNhbGN1bGF0ZV90b3RhbHJlc2VydmVfcGFnZXMgLSBjYWxsZWQgd2hlbiBzeXNjdGxfbG93ZXJfem9uZV9yZXNlcnZlX3JhdGlvCisgKglvciBtaW5fZnJlZV9rYnl0ZXMgY2hhbmdlcy4KKyAqLworc3RhdGljIHZvaWQgY2FsY3VsYXRlX3RvdGFscmVzZXJ2ZV9wYWdlcyh2b2lkKQoreworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlX3BhZ2VzID0gMDsKKwlpbnQgaSwgajsKKworCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKKwkJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBpOworCQkJdW5zaWduZWQgbG9uZyBtYXggPSAwOworCisJCQkvKiBGaW5kIHZhbGlkIGFuZCBtYXhpbXVtIGxvd21lbV9yZXNlcnZlIGluIHRoZSB6b25lICovCisJCQlmb3IgKGogPSBpOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKKwkJCQlpZiAoem9uZS0+bG93bWVtX3Jlc2VydmVbal0gPiBtYXgpCisJCQkJCW1heCA9IHpvbmUtPmxvd21lbV9yZXNlcnZlW2pdOworCQkJfQorCisJCQkvKiB3ZSB0cmVhdCBwYWdlc19oaWdoIGFzIHJlc2VydmVkIHBhZ2VzLiAqLworCQkJbWF4ICs9IHpvbmUtPnBhZ2VzX2hpZ2g7CisKKwkJCWlmIChtYXggPiB6b25lLT5wcmVzZW50X3BhZ2VzKQorCQkJCW1heCA9IHpvbmUtPnByZXNlbnRfcGFnZXM7CisJCQlyZXNlcnZlX3BhZ2VzICs9IG1heDsKKwkJfQorCX0KKwl0b3RhbHJlc2VydmVfcGFnZXMgPSByZXNlcnZlX3BhZ2VzOworfQorCisvKgogICogc2V0dXBfcGVyX3pvbmVfbG93bWVtX3Jlc2VydmUgLSBjYWxsZWQgd2hlbmV2ZXIKICAqCXN5c2N0bF9sb3dlcl96b25lX3Jlc2VydmVfcmF0aW8gY2hhbmdlcy4gIEVuc3VyZXMgdGhhdCBlYWNoIHpvbmUKICAqCWhhcyBhIGNvcnJlY3QgcGFnZXMgcmVzZXJ2ZWQgdmFsdWUsIHNvIGFuIGFkZXF1YXRlIG51bWJlciBvZgpAQCAtMjUwMiw2ICsyNTUyLDkgQEAKIAkJCX0KIAkJfQogCX0KKworCS8qIHVwZGF0ZSB0b3RhbHJlc2VydmVfcGFnZXMgKi8KKwljYWxjdWxhdGVfdG90YWxyZXNlcnZlX3BhZ2VzKCk7CiB9CiAKIC8qCkBAIC0yNTIzLDkgKzI1NzYsMTEgQEAKIAl9CiAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKLQkJdW5zaWduZWQgbG9uZyB0bXA7CisJCXU2NCB0bXA7CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7Ci0JCXRtcCA9IChwYWdlc19taW4gKiB6b25lLT5wcmVzZW50X3BhZ2VzKSAvIGxvd21lbV9wYWdlczsKKwkJdG1wID0gKHU2NClwYWdlc19taW4gKiB6b25lLT5wcmVzZW50X3BhZ2VzOworCQlkb19kaXYodG1wLCBsb3dtZW1fcGFnZXMpOwogCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkgewogCQkJLyoKIAkJCSAqIF9fR0ZQX0hJR0ggYW5kIFBGX01FTUFMTE9DIGFsbG9jYXRpb25zIHVzdWFsbHkgZG9uJ3QKQEAgLTI1NTIsMTAgKzI2MDcsMTMgQEAKIAkJCXpvbmUtPnBhZ2VzX21pbiA9IHRtcDsKIAkJfQogCi0JCXpvbmUtPnBhZ2VzX2xvdyAgID0gem9uZS0+cGFnZXNfbWluICsgdG1wIC8gNDsKLQkJem9uZS0+cGFnZXNfaGlnaCAgPSB6b25lLT5wYWdlc19taW4gKyB0bXAgLyAyOworCQl6b25lLT5wYWdlc19sb3cgICA9IHpvbmUtPnBhZ2VzX21pbiArICh0bXAgPj4gMik7CisJCXpvbmUtPnBhZ2VzX2hpZ2ggID0gem9uZS0+cGFnZXNfbWluICsgKHRtcCA+PiAxKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKIAl9CisKKwkvKiB1cGRhdGUgdG90YWxyZXNlcnZlX3BhZ2VzICovCisJY2FsY3VsYXRlX3RvdGFscmVzZXJ2ZV9wYWdlcygpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggMzdlYWY0MmUuLjFlNDNjOGEgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtNDYsNiArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CisKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0xNzc4LDYgKzE3ODAsNyBAQAogCWlmICghc2ltcGxlX2VtcHR5KGRlbnRyeSkpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCisJZGVudHJ5LT5kX2lub2RlLT5pX25saW5rLS07CiAJZGlyLT5pX25saW5rLS07CiAJcmV0dXJuIHNobWVtX3VubGluayhkaXIsIGRlbnRyeSk7CiB9CkBAIC0yMTAwLDYgKzIxMDMsNyBAQAogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9DQUNIRV9TSElGVDsKIAlzYi0+c19tYWdpYyA9IFRNUEZTX01BR0lDOwogCXNiLT5zX29wID0gJnNobWVtX29wczsKKwlzYi0+c190aW1lX2dyYW4gPSAxOwogCiAJaW5vZGUgPSBzaG1lbV9nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCBtb2RlLCAwKTsKIAlpZiAoIWlub2RlKQpAQCAtMjE3Myw2ICsyMTc3LDcgQEAKIAkucHJlcGFyZV93cml0ZQk9IHNobWVtX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IHNpbXBsZV9jb21taXRfd3JpdGUsCiAjZW5kaWYKKwkubWlncmF0ZXBhZ2UJPSBtaWdyYXRlX3BhZ2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG1lbV9maWxlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggNGNiZjhiYi4uZjFiNjQ0ZSAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtMjA3LDExICsyMDcsNiBAQAogI2RlZmluZQlCVUZDVExfQUNUSVZFCSgoKGttZW1fYnVmY3RsX3QpKH4wVSkpLTIpCiAjZGVmaW5lCVNMQUJfTElNSVQJKCgoa21lbV9idWZjdGxfdCkofjBVKSktMykKIAotLyogTWF4IG51bWJlciBvZiBvYmpzLXBlci1zbGFiIGZvciBjYWNoZXMgd2hpY2ggdXNlIG9mZi1zbGFiIHNsYWJzLgotICogTmVlZGVkIHRvIGF2b2lkIGEgcG9zc2libGUgbG9vcGluZyBjb25kaXRpb24gaW4gY2FjaGVfZ3JvdygpLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvZmZzbGFiX2xpbWl0OwotCiAvKgogICogc3RydWN0IHNsYWIKICAqCkBAIC00MjAsNiArNDE1LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9mcmVlYWJsZTsKIAl1bnNpZ25lZCBsb25nIG5vZGVfYWxsb2NzOwogCXVuc2lnbmVkIGxvbmcgbm9kZV9mcmVlczsKKwl1bnNpZ25lZCBsb25nIG5vZGVfb3ZlcmZsb3c7CiAJYXRvbWljX3QgYWxsb2NoaXQ7CiAJYXRvbWljX3QgYWxsb2NtaXNzOwogCWF0b21pY190IGZyZWVoaXQ7CkBAIC00NjUsNiArNDYxLDcgQEAKICNkZWZpbmUJU1RBVFNfSU5DX0VSUih4KQkoKHgpLT5lcnJvcnMrKykKICNkZWZpbmUJU1RBVFNfSU5DX05PREVBTExPQ1MoeCkJKCh4KS0+bm9kZV9hbGxvY3MrKykKICNkZWZpbmUJU1RBVFNfSU5DX05PREVGUkVFUyh4KQkoKHgpLT5ub2RlX2ZyZWVzKyspCisjZGVmaW5lIFNUQVRTX0lOQ19BQ09WRVJGTE9XKHgpICAgKCh4KS0+bm9kZV9vdmVyZmxvdysrKQogI2RlZmluZQlTVEFUU19TRVRfRlJFRUFCTEUoeCwgaSkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICgoeCktPm1heF9mcmVlYWJsZSA8IGkpCQkJCVwKQEAgLTQ4NCw2ICs0ODEsNyBAQAogI2RlZmluZQlTVEFUU19JTkNfRVJSKHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUJU1RBVFNfSU5DX05PREVBTExPQ1MoeCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19JTkNfTk9ERUZSRUVTKHgpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU1RBVFNfSU5DX0FDT1ZFUkZMT1coeCkgICBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX1NFVF9GUkVFQUJMRSh4LCBpKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRTX0lOQ19BTExPQ0hJVCh4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRTX0lOQ19BTExPQ01JU1MoeCkJZG8geyB9IHdoaWxlICgwKQpAQCAtNjk3LDYgKzY5NSwxNCBAQAogCUZVTEwKIH0gZ19jcHVjYWNoZV91cDsKIAorLyoKKyAqIHVzZWQgYnkgYm9vdCBjb2RlIHRvIGRldGVybWluZSBpZiBpdCBjYW4gdXNlIHNsYWIgYmFzZWQgYWxsb2NhdG9yCisgKi8KK2ludCBzbGFiX2lzX2F2YWlsYWJsZSh2b2lkKQoreworCXJldHVybiBnX2NwdWNhY2hlX3VwID09IEZVTEw7Cit9CisKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgd29ya19zdHJ1Y3QsIHJlYXBfd29yayk7CiAKIHN0YXRpYyB2b2lkIGZyZWVfYmxvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqKm9ianBwLCBpbnQgbGVuLApAQCAtOTc2LDcgKzk4Miw4IEBACiAJCSAqIFRoYXQgd2F5IHdlIGNvdWxkIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBwdXR0aW5nIHRoZSBvYmplY3RzCiAJCSAqIGludG8gdGhlIGZyZWUgbGlzdHMgYW5kIGdldHRpbmcgdGhlbSBiYWNrIGxhdGVyLgogCQkgKi8KLQkJdHJhbnNmZXJfb2JqZWN0cyhybDMtPnNoYXJlZCwgYWMsIGFjLT5saW1pdCk7CisJCWlmIChybDMtPnNoYXJlZCkKKwkJCXRyYW5zZmVyX29iamVjdHMocmwzLT5zaGFyZWQsIGFjLCBhYy0+bGltaXQpOwogCiAJCWZyZWVfYmxvY2soY2FjaGVwLCBhYy0+ZW50cnksIGFjLT5hdmFpbCwgbm9kZSk7CiAJCWFjLT5hdmFpbCA9IDA7CkBAIC0xMDMzLDcgKzEwNDAsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IGNwdXVwX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlsb25nIGNwdSA9IChsb25nKWhjcHU7CkBAIC0xMjk3LDggKzEzMDQsNyBAQAogCQlpZiAoY2FjaGVfY2FjaGUubnVtKQogCQkJYnJlYWs7CiAJfQotCWlmICghY2FjaGVfY2FjaGUubnVtKQotCQlCVUcoKTsKKwlCVUdfT04oIWNhY2hlX2NhY2hlLm51bSk7CiAJY2FjaGVfY2FjaGUuZ2Zwb3JkZXIgPSBvcmRlcjsKIAljYWNoZV9jYWNoZS5jb2xvdXIgPSBsZWZ0X292ZXIgLyBjYWNoZV9jYWNoZS5jb2xvdXJfb2ZmOwogCWNhY2hlX2NhY2hlLnNsYWJfc2l6ZSA9IEFMSUdOKGNhY2hlX2NhY2hlLm51bSAqIHNpemVvZihrbWVtX2J1ZmN0bF90KSArCkBAIC0xMzQ1LDEyICsxMzUxLDYgQEAKIAkJCQkJTlVMTCwgTlVMTCk7CiAJCX0KIAotCQkvKiBJbmMgb2ZmLXNsYWIgYnVmY3RsIGxpbWl0IHVudGlsIHRoZSBjZWlsaW5nIGlzIGhpdC4gKi8KLQkJaWYgKCEoT0ZGX1NMQUIoc2l6ZXMtPmNzX2NhY2hlcCkpKSB7Ci0JCQlvZmZzbGFiX2xpbWl0ID0gc2l6ZXMtPmNzX3NpemUgLSBzaXplb2Yoc3RydWN0IHNsYWIpOwotCQkJb2Zmc2xhYl9saW1pdCAvPSBzaXplb2Yoa21lbV9idWZjdGxfdCk7Ci0JCX0KLQogCQlzaXplcy0+Y3NfZG1hY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUobmFtZXMtPm5hbWVfZG1hLAogCQkJCQlzaXplcy0+Y3Nfc2l6ZSwKIAkJCQkJQVJDSF9LTUFMTE9DX01JTkFMSUdOLApAQCAtMTQ1NCw3ICsxNDU0LDE0IEBACiAJaW50IGk7CiAKIAlmbGFncyB8PSBjYWNoZXAtPmdmcGZsYWdzOworI2lmbmRlZiBDT05GSUdfTU1VCisJLyogbm9tbXUgdXNlcyBzbGFiJ3MgZm9yIHByb2Nlc3MgYW5vbnltb3VzIG1lbW9yeSBhbGxvY2F0aW9ucywgc28KKwkgKiByZXF1aXJlcyBfX0dGUF9DT01QIHRvIHByb3Blcmx5IHJlZmNvdW50IGhpZ2hlciBvcmRlciBhbGxvY2F0aW9ucyIKKwkgKi8KKwlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlaWQsIChmbGFncyB8IF9fR0ZQX0NPTVApLCBjYWNoZXAtPmdmcG9yZGVyKTsKKyNlbHNlCiAJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZWlkLCBmbGFncywgY2FjaGVwLT5nZnBvcmRlcik7CisjZW5kaWYKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiBOVUxMOwogCWFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CkBAIC0xNzYyLDYgKzE3NjksNyBAQAogc3RhdGljIHNpemVfdCBjYWxjdWxhdGVfc2xhYl9vcmRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAogCQkJc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwl1bnNpZ25lZCBsb25nIG9mZnNsYWJfbGltaXQ7CiAJc2l6ZV90IGxlZnRfb3ZlciA9IDA7CiAJaW50IGdmcG9yZGVyOwogCkBAIC0xNzczLDkgKzE3ODEsMTggQEAKIAkJaWYgKCFudW0pCiAJCQljb250aW51ZTsKIAotCQkvKiBNb3JlIHRoYW4gb2Zmc2xhYl9saW1pdCBvYmplY3RzIHdpbGwgY2F1c2UgcHJvYmxlbXMgKi8KLQkJaWYgKChmbGFncyAmIENGTEdTX09GRl9TTEFCKSAmJiBudW0gPiBvZmZzbGFiX2xpbWl0KQotCQkJYnJlYWs7CisJCWlmIChmbGFncyAmIENGTEdTX09GRl9TTEFCKSB7CisJCQkvKgorCQkJICogTWF4IG51bWJlciBvZiBvYmpzLXBlci1zbGFiIGZvciBjYWNoZXMgd2hpY2gKKwkJCSAqIHVzZSBvZmYtc2xhYiBzbGFicy4gTmVlZGVkIHRvIGF2b2lkIGEgcG9zc2libGUKKwkJCSAqIGxvb3BpbmcgY29uZGl0aW9uIGluIGNhY2hlX2dyb3coKS4KKwkJCSAqLworCQkJb2Zmc2xhYl9saW1pdCA9IHNpemUgLSBzaXplb2Yoc3RydWN0IHNsYWIpOworCQkJb2Zmc2xhYl9saW1pdCAvPSBzaXplb2Yoa21lbV9idWZjdGxfdCk7CisKKyAJCQlpZiAobnVtID4gb2Zmc2xhYl9saW1pdCkKKwkJCQlicmVhazsKKwkJfQogCiAJCS8qIEZvdW5kIHNvbWV0aGluZyBhY2NlcHRhYmxlIC0gc2F2ZSBpdCBhd2F5ICovCiAJCWNhY2hlcC0+bnVtID0gbnVtOwpAQCAtMTk3NCw4ICsxOTkxLDcgQEAKIAkgKiBBbHdheXMgY2hlY2tzIGZsYWdzLCBhIGNhbGxlciBtaWdodCBiZSBleHBlY3RpbmcgZGVidWcgc3VwcG9ydCB3aGljaAogCSAqIGlzbid0IGF2YWlsYWJsZS4KIAkgKi8KLQlpZiAoZmxhZ3MgJiB+Q1JFQVRFX01BU0spCi0JCUJVRygpOworCUJVR19PTihmbGFncyAmIH5DUkVBVEVfTUFTSyk7CiAKIAkvKgogCSAqIENoZWNrIHRoYXQgc2l6ZSBpcyBpbiB0ZXJtcyBvZiB3b3Jkcy4gIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkCkBAIC0yMTgzLDExICsyMTk5LDE0IEBACiAJY2hlY2tfaXJxX29uKCk7CiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdOwotCQlpZiAobDMpIHsKKwkJaWYgKGwzICYmIGwzLT5hbGllbikKKwkJCWRyYWluX2FsaWVuX2NhY2hlKGNhY2hlcCwgbDMtPmFsaWVuKTsKKwl9CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07CisJCWlmIChsMykKIAkJCWRyYWluX2FycmF5KGNhY2hlcCwgbDMsIGwzLT5zaGFyZWQsIDEsIG5vZGUpOwotCQkJaWYgKGwzLT5hbGllbikKLQkJCQlkcmFpbl9hbGllbl9jYWNoZShjYWNoZXAsIGwzLT5hbGllbik7Ci0JCX0KIAl9CiB9CiAKQEAgLTIyMDYsOCArMjIyNSw3IEBACiAKIAkJc2xhYnAgPSBsaXN0X2VudHJ5KGwzLT5zbGFic19mcmVlLnByZXYsIHN0cnVjdCBzbGFiLCBsaXN0KTsKICNpZiBERUJVRwotCQlpZiAoc2xhYnAtPmludXNlKQotCQkJQlVHKCk7CisJCUJVR19PTihzbGFicC0+aW51c2UpOwogI2VuZGlmCiAJCWxpc3RfZGVsKCZzbGFicC0+bGlzdCk7CiAKQEAgLTIyNDgsOCArMjI2Niw3IEBACiAgKi8KIGludCBrbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQogewotCWlmICghY2FjaGVwIHx8IGluX2ludGVycnVwdCgpKQotCQlCVUcoKTsKKwlCVUdfT04oIWNhY2hlcCB8fCBpbl9pbnRlcnJ1cHQoKSk7CiAKIAlyZXR1cm4gX19jYWNoZV9zaHJpbmsoY2FjaGVwKTsKIH0KQEAgLTIyNzcsOCArMjI5NCw3IEBACiAJaW50IGk7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzOwogCi0JaWYgKCFjYWNoZXAgfHwgaW5faW50ZXJydXB0KCkpCi0JCUJVRygpOworCUJVR19PTighY2FjaGVwIHx8IGluX2ludGVycnVwdCgpKTsKIAogCS8qIERvbid0IGxldCBDUFVzIHRvIGNvbWUgYW5kIGdvICovCiAJbG9ja19jcHVfaG90cGx1ZygpOwpAQCAtMjMyMywxMyArMjMzOSwxNSBAQAogCiAvKiBHZXQgdGhlIG1lbW9yeSBmb3IgYSBzbGFiIG1hbmFnZW1lbnQgb2JqLiAqLwogc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY19zbGFibWdtdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwLAotCQkJCSAgIGludCBjb2xvdXJfb2ZmLCBnZnBfdCBsb2NhbF9mbGFncykKKwkJCQkgICBpbnQgY29sb3VyX29mZiwgZ2ZwX3QgbG9jYWxfZmxhZ3MsCisJCQkJICAgaW50IG5vZGVpZCkKIHsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYnA7CiAKIAlpZiAoT0ZGX1NMQUIoY2FjaGVwKSkgewogCQkvKiBTbGFiIG1hbmFnZW1lbnQgb2JqIGlzIG9mZi1zbGFiLiAqLwotCQlzbGFicCA9IGttZW1fY2FjaGVfYWxsb2MoY2FjaGVwLT5zbGFicF9jYWNoZSwgbG9jYWxfZmxhZ3MpOworCQlzbGFicCA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAtPnNsYWJwX2NhY2hlLAorCQkJCQkgICAgICBsb2NhbF9mbGFncywgbm9kZWlkKTsKIAkJaWYgKCFzbGFicCkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CkBAIC0yMzM5LDYgKzIzNTcsNyBAQAogCXNsYWJwLT5pbnVzZSA9IDA7CiAJc2xhYnAtPmNvbG91cm9mZiA9IGNvbG91cl9vZmY7CiAJc2xhYnAtPnNfbWVtID0gb2JqcCArIGNvbG91cl9vZmY7CisJc2xhYnAtPm5vZGVpZCA9IG5vZGVpZDsKIAlyZXR1cm4gc2xhYnA7CiB9CiAKQEAgLTI0NzcsOCArMjQ5Niw3IEBACiAJICogQmUgbGF6eSBhbmQgb25seSBjaGVjayBmb3IgdmFsaWQgZmxhZ3MgaGVyZSwgIGtlZXBpbmcgaXQgb3V0IG9mIHRoZQogCSAqIGNyaXRpY2FsIHBhdGggaW4ga21lbV9jYWNoZV9hbGxvYygpLgogCSAqLwotCWlmIChmbGFncyAmIH4oU0xBQl9ETUEgfCBTTEFCX0xFVkVMX01BU0sgfCBTTEFCX05PX0dST1cpKQotCQlCVUcoKTsKKwlCVUdfT04oZmxhZ3MgJiB+KFNMQUJfRE1BIHwgU0xBQl9MRVZFTF9NQVNLIHwgU0xBQl9OT19HUk9XKSk7CiAJaWYgKGZsYWdzICYgU0xBQl9OT19HUk9XKQogCQlyZXR1cm4gMDsKIApAQCAtMjUyNSw3ICsyNTQzLDcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAkvKiBHZXQgc2xhYiBtYW5hZ2VtZW50LiAqLwotCXNsYWJwID0gYWxsb2Nfc2xhYm1nbXQoY2FjaGVwLCBvYmpwLCBvZmZzZXQsIGxvY2FsX2ZsYWdzKTsKKwlzbGFicCA9IGFsbG9jX3NsYWJtZ210KGNhY2hlcCwgb2JqcCwgb2Zmc2V0LCBsb2NhbF9mbGFncywgbm9kZWlkKTsKIAlpZiAoIXNsYWJwKQogCQlnb3RvIG9wcHMxOwogCkBAIC0zMDg2LDkgKzMxMDQsMTEgQEAKIAkJCWlmIChsMy0+YWxpZW4gJiYgbDMtPmFsaWVuW25vZGVpZF0pIHsKIAkJCQlhbGllbiA9IGwzLT5hbGllbltub2RlaWRdOwogCQkJCXNwaW5fbG9jaygmYWxpZW4tPmxvY2spOwotCQkJCWlmICh1bmxpa2VseShhbGllbi0+YXZhaWwgPT0gYWxpZW4tPmxpbWl0KSkKKwkJCQlpZiAodW5saWtlbHkoYWxpZW4tPmF2YWlsID09IGFsaWVuLT5saW1pdCkpIHsKKwkJCQkJU1RBVFNfSU5DX0FDT1ZFUkZMT1coY2FjaGVwKTsKIAkJCQkJX19kcmFpbl9hbGllbl9jYWNoZShjYWNoZXAsCiAJCQkJCQkJICAgIGFsaWVuLCBub2RlaWQpOworCQkJCX0KIAkJCQlhbGllbi0+ZW50cnlbYWxpZW4tPmF2YWlsKytdID0gb2JqcDsKIAkJCQlzcGluX3VubG9jaygmYWxpZW4tPmxvY2spOwogCQkJfSBlbHNlIHsKQEAgLTM3NjYsNyArMzc4Niw3IEBACiAJc2VxX3B1dHMobSwgIiA6IHNsYWJkYXRhIDxhY3RpdmVfc2xhYnM+IDxudW1fc2xhYnM+IDxzaGFyZWRhdmFpbD4iKTsKICNpZiBTVEFUUwogCXNlcV9wdXRzKG0sICIgOiBnbG9iYWxzdGF0IDxsaXN0YWxsb2NzPiA8bWF4b2Jqcz4gPGdyb3duPiA8cmVhcGVkPiAiCi0JCSAiPGVycm9yPiA8bWF4ZnJlZWFibGU+IDxub2RlYWxsb2NzPiA8cmVtb3RlZnJlZXM+Iik7CisJCSAiPGVycm9yPiA8bWF4ZnJlZWFibGU+IDxub2RlYWxsb2NzPiA8cmVtb3RlZnJlZXM+IDxhbGllbm92ZXJmbG93PiIpOwogCXNlcV9wdXRzKG0sICIgOiBjcHVzdGF0IDxhbGxvY2hpdD4gPGFsbG9jbWlzcz4gPGZyZWVoaXQ+IDxmcmVlbWlzcz4iKTsKICNlbmRpZgogCXNlcV9wdXRjKG0sICdcbicpOwpAQCAtMzg4MCwxMSArMzkwMCwxMiBAQAogCQl1bnNpZ25lZCBsb25nIG1heF9mcmVlYWJsZSA9IGNhY2hlcC0+bWF4X2ZyZWVhYmxlOwogCQl1bnNpZ25lZCBsb25nIG5vZGVfYWxsb2NzID0gY2FjaGVwLT5ub2RlX2FsbG9jczsKIAkJdW5zaWduZWQgbG9uZyBub2RlX2ZyZWVzID0gY2FjaGVwLT5ub2RlX2ZyZWVzOworCQl1bnNpZ25lZCBsb25nIG92ZXJmbG93cyA9IGNhY2hlcC0+bm9kZV9vdmVyZmxvdzsKIAogCQlzZXFfcHJpbnRmKG0sICIgOiBnbG9iYWxzdGF0ICU3bHUgJTZsdSAlNWx1ICU0bHUgXAotCQkJCSU0bHUgJTRsdSAlNGx1ICU0bHUiLCBhbGxvY3MsIGhpZ2gsIGdyb3duLAorCQkJCSU0bHUgJTRsdSAlNGx1ICU0bHUgJTRsdSIsIGFsbG9jcywgaGlnaCwgZ3Jvd24sCiAJCQkJcmVhcGVkLCBlcnJvcnMsIG1heF9mcmVlYWJsZSwgbm9kZV9hbGxvY3MsCi0JCQkJbm9kZV9mcmVlcyk7CisJCQkJbm9kZV9mcmVlcywgb3ZlcmZsb3dzKTsKIAl9CiAJLyogY3B1IHN0YXRzICovCiAJewpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDliY2M3ZTIuLmE2ODI1NWIgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTM1NCw5ICszNTQsNyBAQAogCWlmICghcGRhdGEpCiAJCXJldHVybiBOVUxMOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNwdV9wb3NzaWJsZShpKSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXBkYXRhLT5wdHJzW2ldID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwZGF0YS0+cHRyc1tpXSkKIAkJCWdvdG8gdW53aW5kX29vbTsKQEAgLTM4MywxMSArMzgxLDkgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcGVyY3B1X2RhdGEgKnAgPSAoc3RydWN0IHBlcmNwdV9kYXRhICopICh+KHVuc2lnbmVkIGxvbmcpIG9ianApOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNwdV9wb3NzaWJsZShpKSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlrZnJlZShwLT5wdHJzW2ldKTsKLQl9CisKIAlrZnJlZShwKTsKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9wZXJjcHUpOwpkaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLmMgYi9tbS9zcGFyc2UuYwppbmRleCAwYTUxZjM2Li4xMDAwNDBjIDEwMDY0NAotLS0gYS9tbS9zcGFyc2UuYworKysgYi9tbS9zcGFyc2UuYwpAQCAtMzIsNyArMzIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGFycmF5X3NpemUgPSBTRUNUSU9OU19QRVJfUk9PVCAqCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBtZW1fc2VjdGlvbik7CiAKLQlzZWN0aW9uID0gYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBhcnJheV9zaXplKTsKKwlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkKKwkJc2VjdGlvbiA9IGttYWxsb2Nfbm9kZShhcnJheV9zaXplLCBHRlBfS0VSTkVMLCBuaWQpOworCWVsc2UKKwkJc2VjdGlvbiA9IGFsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwgYXJyYXlfc2l6ZSk7CiAKIAlpZiAoc2VjdGlvbikKIAkJbWVtc2V0KHNlY3Rpb24sIDAsIGFycmF5X3NpemUpOwpAQCAtODQsMTEgKzg3LDggQEAKIAl1bnNpZ25lZCBsb25nIHJvb3RfbnI7CiAJc3RydWN0IG1lbV9zZWN0aW9uKiByb290OwogCi0JZm9yIChyb290X25yID0gMDsKLQkgICAgIHJvb3RfbnIgPCBOUl9NRU1fU0VDVElPTlM7Ci0JICAgICByb290X25yICs9IFNFQ1RJT05TX1BFUl9ST09UKSB7Ci0JCXJvb3QgPSBfX25yX3RvX3NlY3Rpb24ocm9vdF9ucik7Ci0KKwlmb3IgKHJvb3RfbnIgPSAwOyByb290X25yIDwgTlJfU0VDVElPTl9ST09UUzsgcm9vdF9ucisrKSB7CisJCXJvb3QgPSBfX25yX3RvX3NlY3Rpb24ocm9vdF9uciAqIFNFQ1RJT05TX1BFUl9ST09UKTsKIAkJaWYgKCFyb290KQogCQkJY29udGludWU7CiAKQEAgLTI4MSw5ICsyODEsOSBAQAogCiAJcmV0ID0gc3BhcnNlX2luaXRfb25lX3NlY3Rpb24obXMsIHNlY3Rpb25fbnIsIG1lbW1hcCk7CiAKLQlpZiAocmV0IDw9IDApCi0JCV9fa2ZyZWVfc2VjdGlvbl9tZW1tYXAobWVtbWFwLCBucl9wYWdlcyk7CiBvdXQ6CiAJcGdkYXRfcmVzaXplX3VubG9jayhwZ2RhdCwgJmZsYWdzKTsKKwlpZiAocmV0IDw9IDApCisJCV9fa2ZyZWVfc2VjdGlvbl9tZW1tYXAobWVtbWFwLCBucl9wYWdlcyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCBkN2FmMjk2Li5lMGUxNTgzIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKKysrIGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0xNDgsOCArMTQ4LDcgQEAKIAlzd3BfZW50cnlfdCBlbnRyeTsKIAlpbnQgZXJyOwogCi0JaWYgKCFQYWdlTG9ja2VkKHBhZ2UpKQotCQlCVUcoKTsKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCiAJZm9yICg7OykgewogCQllbnRyeSA9IGdldF9zd2FwX3BhZ2UoKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDM5YWE5ZDEuLmU1ZmQ1MzggMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMzk3LDE4ICszOTcsMjQgQEAKIAogCXAgPSBzd2FwX2luZm9fZ2V0KGVudHJ5KTsKIAlpZiAocCkgewotCQlpZiAoc3dhcF9lbnRyeV9mcmVlKHAsIHN3cF9vZmZzZXQoZW50cnkpKSA9PSAxKQotCQkJcGFnZSA9IGZpbmRfdHJ5bG9ja19wYWdlKCZzd2FwcGVyX3NwYWNlLCBlbnRyeS52YWwpOworCQlpZiAoc3dhcF9lbnRyeV9mcmVlKHAsIHN3cF9vZmZzZXQoZW50cnkpKSA9PSAxKSB7CisJCQlwYWdlID0gZmluZF9nZXRfcGFnZSgmc3dhcHBlcl9zcGFjZSwgZW50cnkudmFsKTsKKwkJCWlmIChwYWdlICYmIHVubGlrZWx5KFRlc3RTZXRQYWdlTG9ja2VkKHBhZ2UpKSkgeworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlwYWdlID0gTlVMTDsKKwkJCX0KKwkJfQogCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAl9CiAJaWYgKHBhZ2UpIHsKIAkJaW50IG9uZV91c2VyOwogCiAJCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSk7Ci0JCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOwogCQlvbmVfdXNlciA9IChwYWdlX2NvdW50KHBhZ2UpID09IDIpOwogCQkvKiBPbmx5IGNhY2hlIHVzZXIgKCt1cyksIG9yIHN3YXAgc3BhY2UgZnVsbD8gRnJlZSBpdCEgKi8KLQkJaWYgKCFQYWdlV3JpdGViYWNrKHBhZ2UpICYmIChvbmVfdXNlciB8fCB2bV9zd2FwX2Z1bGwoKSkpIHsKKwkJLyogQWxzbyByZWNoZWNrIFBhZ2VTd2FwQ2FjaGUgYWZ0ZXIgcGFnZSBpcyBsb2NrZWQgKGFib3ZlKSAqLworCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSAmJiAhUGFnZVdyaXRlYmFjayhwYWdlKSAmJgorCQkJCQkob25lX3VzZXIgfHwgdm1fc3dhcF9mdWxsKCkpKSB7CiAJCQlkZWxldGVfZnJvbV9zd2FwX2NhY2hlKHBhZ2UpOwogCQkJU2V0UGFnZURpcnR5KHBhZ2UpOwogCQl9CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggNzI5ZWIzZS4uYzA1MDRmMSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtMzIxLDggKzMyMSw3IEBACiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBhcmVhLT5ucl9wYWdlczsgaSsrKSB7Ci0JCQlpZiAodW5saWtlbHkoIWFyZWEtPnBhZ2VzW2ldKSkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighYXJlYS0+cGFnZXNbaV0pOwogCQkJX19mcmVlX3BhZ2UoYXJlYS0+cGFnZXNbaV0pOwogCQl9CiAKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYWNkZjAwMS4uNDQwYTczMyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTEwNjEsNyArMTA2MSw3IEBACiBsb29wX2FnYWluOgogCXRvdGFsX3NjYW5uZWQgPSAwOwogCW5yX3JlY2xhaW1lZCA9IDA7Ci0Jc2MubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKKwlzYy5tYXlfd3JpdGVwYWdlID0gIWxhcHRvcF9tb2RlOwogCXNjLm5yX21hcHBlZCA9IHJlYWRfcGFnZV9zdGF0ZShucl9tYXBwZWQpOwogCiAJaW5jX3BhZ2Vfc3RhdGUocGFnZW91dHJ1bik7CkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogICAgbm90IHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcy4gIFNvIGlmIHRoZSBsYXN0IGNwdSBpbiBhIG5vZGUgZ29lcwogICAgYXdheSwgd2UgZ2V0IGNoYW5nZWQgdG8gcnVuIGFueXdoZXJlOiBhcyB0aGUgZmlyc3Qgb25lIGNvbWVzIGJhY2ssCiAgICByZXN0b3JlIHRoZWlyIGNwdSBiaW5kaW5ncy4gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGNwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKK3N0YXRpYyBpbnQgY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJcGdfZGF0YV90ICpwZ2RhdDsKZGlmZiAtLWdpdCBhL25ldC84MDIvdHIuYyBiL25ldC84MDIvdHIuYwppbmRleCBhZmQ4Mzg1Li5lOWRjODAzIDEwMDY0NAotLS0gYS9uZXQvODAyL3RyLmMKKysrIGIvbmV0LzgwMi90ci5jCkBAIC02NDMsNiArNjQzLDUgQEAKIAogbW9kdWxlX2luaXQocmlmX2luaXQpOwogCi1FWFBPUlRfU1lNQk9MKHRyX3NvdXJjZV9yb3V0ZSk7CiBFWFBPUlRfU1lNQk9MKHRyX3R5cGVfdHJhbnMpOwogRVhQT1JUX1NZTUJPTChhbGxvY190cmRldik7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NsaXAuYyBiL25ldC9hdG0vY2xpcC5jCmluZGV4IDNhYjRlNzkuLjcyZDg1MjkgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY2xpcC5jCisrKyBiL25ldC9hdG0vY2xpcC5jCkBAIC0yLDcgKzIsNiBAQAogCiAvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLwogCi0KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNTQsMjQgKzUzLDI0IEBACiBzdGF0aWMgc3RydWN0IGF0bV92Y2MgKmF0bWFycGQ7CiBzdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlIGNsaXBfdGJsOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGlkbGVfdGltZXI7Ci1zdGF0aWMgaW50IHN0YXJ0X3RpbWVyID0gMTsKIAotCi1zdGF0aWMgaW50IHRvX2F0bWFycGQoZW51bSBhdG1hcnBfY3RybF90eXBlIHR5cGUsaW50IGl0Zix1bnNpZ25lZCBsb25nIGlwKQorc3RhdGljIGludCB0b19hdG1hcnBkKGVudW0gYXRtYXJwX2N0cmxfdHlwZSB0eXBlLCBpbnQgaXRmLCB1bnNpZ25lZCBsb25nIGlwKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgYXRtYXJwX2N0cmwgKmN0cmw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCURQUklOVEsoInRvX2F0bWFycGQoJWQpXG4iLHR5cGUpOwotCWlmICghYXRtYXJwZCkgcmV0dXJuIC1FVU5BVENIOworCURQUklOVEsoInRvX2F0bWFycGQoJWQpXG4iLCB0eXBlKTsKKwlpZiAoIWF0bWFycGQpCisJCXJldHVybiAtRVVOQVRDSDsKIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1hcnBfY3RybCksR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpIHJldHVybiAtRU5PTUVNOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKIAljdHJsID0gKHN0cnVjdCBhdG1hcnBfY3RybCAqKSBza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGF0bWFycF9jdHJsKSk7CiAJY3RybC0+dHlwZSA9IHR5cGU7CiAJY3RybC0+aXRmX251bSA9IGl0ZjsKIAljdHJsLT5pcCA9IGlwOwotCWF0bV9mb3JjZV9jaGFyZ2UoYXRtYXJwZCxza2ItPnRydWVzaXplKTsKKwlhdG1fZm9yY2VfY2hhcmdlKGF0bWFycGQsIHNrYi0+dHJ1ZXNpemUpOwogCiAJc2sgPSBza19hdG0oYXRtYXJwZCk7CiAJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwpAQCAtNzksMjYgKzc4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIHZvaWQgbGlua192Y2Moc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYyxzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplbnRyeSkKK3N0YXRpYyB2b2lkIGxpbmtfdmNjKHN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2MsIHN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5KQogewotCURQUklOVEsoImxpbmtfdmNjICVwIHRvIGVudHJ5ICVwIChuZWlnaCAlcClcbiIsY2xpcF92Y2MsZW50cnksCi0JICAgIGVudHJ5LT5uZWlnaCk7CisJRFBSSU5USygibGlua192Y2MgJXAgdG8gZW50cnkgJXAgKG5laWdoICVwKVxuIiwgY2xpcF92Y2MsIGVudHJ5LAorCQllbnRyeS0+bmVpZ2gpOwogCWNsaXBfdmNjLT5lbnRyeSA9IGVudHJ5OwotCWNsaXBfdmNjLT54b2ZmID0gMDsgLyogQEBAIG1heSBvdmVycnVuIGJ1ZmZlciBieSBvbmUgcGFja2V0ICovCisJY2xpcF92Y2MtPnhvZmYgPSAwOwkvKiBAQEAgbWF5IG92ZXJydW4gYnVmZmVyIGJ5IG9uZSBwYWNrZXQgKi8KIAljbGlwX3ZjYy0+bmV4dCA9IGVudHJ5LT52Y2NzOwogCWVudHJ5LT52Y2NzID0gY2xpcF92Y2M7CiAJZW50cnktPm5laWdoLT51c2VkID0gamlmZmllczsKIH0KIAotCiBzdGF0aWMgdm9pZCB1bmxpbmtfY2xpcF92Y2Moc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYykKIHsKIAlzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplbnRyeSA9IGNsaXBfdmNjLT5lbnRyeTsKIAlzdHJ1Y3QgY2xpcF92Y2MgKip3YWxrOwogCiAJaWYgKCFlbnRyeSkgewotCQlwcmludGsoS0VSTl9DUklUICIhY2xpcF92Y2MtPmVudHJ5IChjbGlwX3ZjYyAlcClcbiIsY2xpcF92Y2MpOworCQlwcmludGsoS0VSTl9DUklUICIhY2xpcF92Y2MtPmVudHJ5IChjbGlwX3ZjYyAlcClcbiIsIGNsaXBfdmNjKTsKIAkJcmV0dXJuOwogCX0KIAlzcGluX2xvY2tfYmgoJmVudHJ5LT5uZWlnaC0+ZGV2LT54bWl0X2xvY2spOwkvKiBibG9jayBjbGlwX3N0YXJ0X3htaXQoKSAqLwpAQCAtMTA3LDI0ICsxMDQsMjQgQEAKIAkJaWYgKCp3YWxrID09IGNsaXBfdmNjKSB7CiAJCQlpbnQgZXJyb3I7CiAKLQkJCSp3YWxrID0gY2xpcF92Y2MtPm5leHQ7IC8qIGF0b21pYyAqLworCQkJKndhbGsgPSBjbGlwX3ZjYy0+bmV4dDsJLyogYXRvbWljICovCiAJCQljbGlwX3ZjYy0+ZW50cnkgPSBOVUxMOwogCQkJaWYgKGNsaXBfdmNjLT54b2ZmKQogCQkJCW5ldGlmX3dha2VfcXVldWUoZW50cnktPm5laWdoLT5kZXYpOwogCQkJaWYgKGVudHJ5LT52Y2NzKQogCQkJCWdvdG8gb3V0OwotCQkJZW50cnktPmV4cGlyZXMgPSBqaWZmaWVzLTE7Ci0JCQkJLyogZm9yY2UgcmVzb2x1dGlvbiBvciBleHBpcmF0aW9uICovCisJCQllbnRyeS0+ZXhwaXJlcyA9IGppZmZpZXMgLSAxOworCQkJLyogZm9yY2UgcmVzb2x1dGlvbiBvciBleHBpcmF0aW9uICovCiAJCQllcnJvciA9IG5laWdoX3VwZGF0ZShlbnRyeS0+bmVpZ2gsIE5VTEwsIE5VRF9OT05FLAogCQkJCQkgICAgIE5FSUdIX1VQREFURV9GX0FETUlOKTsKIAkJCWlmIChlcnJvcikKIAkJCQlwcmludGsoS0VSTl9DUklUICJ1bmxpbmtfY2xpcF92Y2M6ICIKLQkJCQkgICAgIm5laWdoX3VwZGF0ZSBmYWlsZWQgd2l0aCAlZFxuIixlcnJvcik7CisJCQkJICAgICAgICJuZWlnaF91cGRhdGUgZmFpbGVkIHdpdGggJWRcbiIsIGVycm9yKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJcHJpbnRrKEtFUk5fQ1JJVCAiQVRNQVJQOiB1bmxpbmtfY2xpcF92Y2MgZmFpbGVkIChlbnRyeSAlcCwgdmNjICIKLQkgICIweCVwKVxuIixlbnRyeSxjbGlwX3ZjYyk7Ci1vdXQ6CisJICAgICAgICIweCVwKVxuIiwgZW50cnksIGNsaXBfdmNjKTsKKyAgICAgIG91dDoKIAlzcGluX3VubG9ja19iaCgmZW50cnktPm5laWdoLT5kZXYtPnhtaXRfbG9jayk7CiB9CiAKQEAgLTE1MywxMyArMTUwLDEzIEBACiAJCURQUklOVEsoImRlc3RydWN0aW9uIHBvc3Rwb25lZCB3aXRoIHJlZiAlZFxuIiwKIAkJCWF0b21pY19yZWFkKCZuLT5yZWZjbnQpKTsKIAotCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZuLT5hcnBfcXVldWUpKSAhPSBOVUxMKSAKKwkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbi0+YXJwX3F1ZXVlKSkgIT0gTlVMTCkKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCQlyZXR1cm4gMDsKIAl9CiAKLQlEUFJJTlRLKCJleHBpcmVkIG5laWdoICVwXG4iLG4pOworCURQUklOVEsoImV4cGlyZWQgbmVpZ2ggJXBcbiIsIG4pOwogCXJldHVybiAxOwogfQogCkBAIC0xNjcsNyArMTY0LDcgQEAKIHsKIAl3cml0ZV9sb2NrKCZjbGlwX3RibC5sb2NrKTsKIAlfX25laWdoX2Zvcl9lYWNoX3JlbGVhc2UoJmNsaXBfdGJsLCBuZWlnaF9jaGVja19jYik7Ci0JbW9kX3RpbWVyKCZpZGxlX3RpbWVyLCBqaWZmaWVzK0NMSVBfQ0hFQ0tfSU5URVJWQUwqSFopOworCW1vZF90aW1lcigmaWRsZV90aW1lciwgamlmZmllcyArIENMSVBfQ0hFQ0tfSU5URVJWQUwgKiBIWik7CiAJd3JpdGVfdW5sb2NrKCZjbGlwX3RibC5sb2NrKTsKIH0KIApAQCAtMTc3LDEzICsxNzQsMTMgQEAKIAogCURQUklOVEsoImNsaXBfYXJwX3JjdlxuIik7CiAJdmNjID0gQVRNX1NLQihza2IpLT52Y2M7Ci0JaWYgKCF2Y2MgfHwgIWF0bV9jaGFyZ2UodmNjLHNrYi0+dHJ1ZXNpemUpKSB7CisJaWYgKCF2Y2MgfHwgIWF0bV9jaGFyZ2UodmNjLCBza2ItPnRydWVzaXplKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gMDsKIAl9Ci0JRFBSSU5USygicHVzaGluZyB0byAlcFxuIix2Y2MpOwotCURQUklOVEsoInVzaW5nICVwXG4iLENMSVBfVkNDKHZjYyktPm9sZF9wdXNoKTsKLQlDTElQX1ZDQyh2Y2MpLT5vbGRfcHVzaCh2Y2Msc2tiKTsKKwlEUFJJTlRLKCJwdXNoaW5nIHRvICVwXG4iLCB2Y2MpOworCURQUklOVEsoInVzaW5nICVwXG4iLCBDTElQX1ZDQyh2Y2MpLT5vbGRfcHVzaCk7CisJQ0xJUF9WQ0ModmNjKS0+b2xkX3B1c2godmNjLCBza2IpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTMsMzQgKzE5MCwzOCBAQAogCTB4MDMsCS8qIEN0cmw6IFVubnVtYmVyZWQgSW5mb3JtYXRpb24gQ29tbWFuZCBQRFUgKi8KIAkweDAwLAkvKiBPVUk6IEV0aGVyVHlwZSAqLwogCTB4MDAsCi0JMHgwMCB9OworCTB4MDAKK307CiAKLXN0YXRpYyB2b2lkIGNsaXBfcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBjbGlwX3B1c2goc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjID0gQ0xJUF9WQ0ModmNjKTsKIAogCURQUklOVEsoImNsaXAgcHVzaFxuIik7CiAJaWYgKCFza2IpIHsKLQkJRFBSSU5USygicmVtb3ZpbmcgVkNDICVwXG4iLGNsaXBfdmNjKTsKLQkJaWYgKGNsaXBfdmNjLT5lbnRyeSkgdW5saW5rX2NsaXBfdmNjKGNsaXBfdmNjKTsKLQkJY2xpcF92Y2MtPm9sZF9wdXNoKHZjYyxOVUxMKTsgLyogcGFzcyBvbiB0aGUgYmFkIG5ld3MgKi8KKwkJRFBSSU5USygicmVtb3ZpbmcgVkNDICVwXG4iLCBjbGlwX3ZjYyk7CisJCWlmIChjbGlwX3ZjYy0+ZW50cnkpCisJCQl1bmxpbmtfY2xpcF92Y2MoY2xpcF92Y2MpOworCQljbGlwX3ZjYy0+b2xkX3B1c2godmNjLCBOVUxMKTsJLyogcGFzcyBvbiB0aGUgYmFkIG5ld3MgKi8KIAkJa2ZyZWUoY2xpcF92Y2MpOwogCQlyZXR1cm47CiAJfQotCWF0bV9yZXR1cm4odmNjLHNrYi0+dHJ1ZXNpemUpOworCWF0bV9yZXR1cm4odmNjLCBza2ItPnRydWVzaXplKTsKIAlza2ItPmRldiA9IGNsaXBfdmNjLT5lbnRyeSA/IGNsaXBfdmNjLT5lbnRyeS0+bmVpZ2gtPmRldiA6IGNsaXBfZGV2czsKLQkJLyogY2xpcF92Y2MtPmVudHJ5ID09IE5VTEwgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBJUCBhZGRyZXNzIHlldCAqLworCS8qIGNsaXBfdmNjLT5lbnRyeSA9PSBOVUxMIGlmIHdlIGRvbid0IGhhdmUgYW4gSVAgYWRkcmVzcyB5ZXQgKi8KIAlpZiAoIXNrYi0+ZGV2KSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybjsKIAl9CiAJQVRNX1NLQihza2IpLT52Y2MgPSB2Y2M7CiAJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotCWlmICghY2xpcF92Y2MtPmVuY2FwIHx8IHNrYi0+bGVuIDwgUkZDMTQ4M0xMQ19MRU4gfHwgbWVtY21wKHNrYi0+ZGF0YSwKLQkgICAgbGxjX291aSxzaXplb2YobGxjX291aSkpKSBza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCWlmICghY2xpcF92Y2MtPmVuY2FwCisJICAgIHx8IHNrYi0+bGVuIDwgUkZDMTQ4M0xMQ19MRU4KKwkgICAgfHwgbWVtY21wKHNrYi0+ZGF0YSwgbGxjX291aSwgc2l6ZW9mIChsbGNfb3VpKSkpCisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CiAJZWxzZSB7CiAJCXNrYi0+cHJvdG9jb2wgPSAoKHUxNiAqKSBza2ItPmRhdGEpWzNdOwotCQlza2JfcHVsbChza2IsUkZDMTQ4M0xMQ19MRU4pOworCQlza2JfcHVsbChza2IsIFJGQzE0ODNMTENfTEVOKTsKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSkgewogCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTIzNSw1OCArMjM2LDU0IEBACiAJbmV0aWZfcngoc2tiKTsKIH0KIAotCiAvKgogICogTm90ZTogdGhlc2Ugc3BpbmxvY2tzIF9tdXN0X25vdF8gYmxvY2sgb24gbm9uLVNNUC4gVGhlIG9ubHkgZ29hbCBpcyB0aGF0CiAgKiBjbGlwX3BvcCBpcyBhdG9taWMgd2l0aCByZXNwZWN0IHRvIHRoZSBjcml0aWNhbCBzZWN0aW9uIGluIGNsaXBfc3RhcnRfeG1pdC4KICAqLwogCi0KLXN0YXRpYyB2b2lkIGNsaXBfcG9wKHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGNsaXBfcG9wKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYyA9IENMSVBfVkNDKHZjYyk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwogCWludCBvbGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVEsoImNsaXBfcG9wKHZjYyAlcClcbiIsdmNjKTsKLQljbGlwX3ZjYy0+b2xkX3BvcCh2Y2Msc2tiKTsKKwlEUFJJTlRLKCJjbGlwX3BvcCh2Y2MgJXApXG4iLCB2Y2MpOworCWNsaXBfdmNjLT5vbGRfcG9wKHZjYywgc2tiKTsKIAkvKiBza2ItPmRldiA9PSBOVUxMIGluIG91dGJvdW5kIEFSUCBwYWNrZXRzICovCi0JaWYgKCFkZXYpIHJldHVybjsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmUFJJVihkZXYpLT54b2ZmX2xvY2ssZmxhZ3MpOwotCWlmIChhdG1fbWF5X3NlbmQodmNjLDApKSB7Ci0JCW9sZCA9IHhjaGcoJmNsaXBfdmNjLT54b2ZmLDApOwotCQlpZiAob2xkKSBuZXRpZl93YWtlX3F1ZXVlKGRldik7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmUFJJVihkZXYpLT54b2ZmX2xvY2ssIGZsYWdzKTsKKwlpZiAoYXRtX21heV9zZW5kKHZjYywgMCkpIHsKKwkJb2xkID0geGNoZygmY2xpcF92Y2MtPnhvZmYsIDApOworCQlpZiAob2xkKQorCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZQUklWKGRldiktPnhvZmZfbG9jayxmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUFJJVihkZXYpLT54b2ZmX2xvY2ssIGZsYWdzKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBjbGlwX25laWdoX2Rlc3Ryb3koc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCiB7Ci0JRFBSSU5USygiY2xpcF9uZWlnaF9kZXN0cm95IChuZWlnaCAlcClcbiIsbmVpZ2gpOworCURQUklOVEsoImNsaXBfbmVpZ2hfZGVzdHJveSAobmVpZ2ggJXApXG4iLCBuZWlnaCk7CiAJaWYgKE5FSUdIMkVOVFJZKG5laWdoKS0+dmNjcykKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiY2xpcF9uZWlnaF9kZXN0cm95OiB2Y2NzICE9IE5VTEwgISEhXG4iKTsKIAlORUlHSDJFTlRSWShuZWlnaCktPnZjY3MgPSAodm9pZCAqKSAweGRlYWRiZWVmOwogfQogCi0KLXN0YXRpYyB2b2lkIGNsaXBfbmVpZ2hfc29saWNpdChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgY2xpcF9uZWlnaF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCURQUklOVEsoImNsaXBfbmVpZ2hfc29saWNpdCAobmVpZ2ggJXAsIHNrYiAlcClcbiIsbmVpZ2gsc2tiKTsKLQl0b19hdG1hcnBkKGFjdF9uZWVkLFBSSVYobmVpZ2gtPmRldiktPm51bWJlcixORUlHSDJFTlRSWShuZWlnaCktPmlwKTsKKwlEUFJJTlRLKCJjbGlwX25laWdoX3NvbGljaXQgKG5laWdoICVwLCBza2IgJXApXG4iLCBuZWlnaCwgc2tiKTsKKwl0b19hdG1hcnBkKGFjdF9uZWVkLCBQUklWKG5laWdoLT5kZXYpLT5udW1iZXIsIE5FSUdIMkVOVFJZKG5laWdoKS0+aXApOwogfQogCi0KLXN0YXRpYyB2b2lkIGNsaXBfbmVpZ2hfZXJyb3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGNsaXBfbmVpZ2hfZXJyb3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZuZGVmIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QCi0JaWNtcF9zZW5kKHNrYixJQ01QX0RFU1RfVU5SRUFDSCxJQ01QX0hPU1RfVU5SRUFDSCwwKTsKKwlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9IT1NUX1VOUkVBQ0gsIDApOwogI2VuZGlmCiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgY2xpcF9uZWlnaF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAogCS5zb2xpY2l0ID0JCWNsaXBfbmVpZ2hfc29saWNpdCwKQEAgLTI5Nyw3ICsyOTQsNiBAQAogCS5xdWV1ZV94bWl0ID0JCWRldl9xdWV1ZV94bWl0LAogfTsKIAotCiBzdGF0aWMgaW50IGNsaXBfY29uc3RydWN0b3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCiB7CiAJc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnkgPSBORUlHSDJFTlRSWShuZWlnaCk7CkBAIC0zMDUsOSArMzAxLDEwIEBACiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXM7CiAKLQlEUFJJTlRLKCJjbGlwX2NvbnN0cnVjdG9yIChuZWlnaCAlcCwgZW50cnkgJXApXG4iLG5laWdoLGVudHJ5KTsKKwlEUFJJTlRLKCJjbGlwX2NvbnN0cnVjdG9yIChuZWlnaCAlcCwgZW50cnkgJXApXG4iLCBuZWlnaCwgZW50cnkpOwogCW5laWdoLT50eXBlID0gaW5ldF9hZGRyX3R5cGUoZW50cnktPmlwKTsKLQlpZiAobmVpZ2gtPnR5cGUgIT0gUlROX1VOSUNBU1QpIHJldHVybiAtRUlOVkFMOworCWlmIChuZWlnaC0+dHlwZSAhPSBSVE5fVU5JQ0FTVCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwpAQCAtMzI2LDEzICszMjMsMTMgQEAKIAkgICAgbmVpZ2gtPm9wcy0+Y29ubmVjdGVkX291dHB1dCA6IG5laWdoLT5vcHMtPm91dHB1dDsKIAllbnRyeS0+bmVpZ2ggPSBuZWlnaDsKIAllbnRyeS0+dmNjcyA9IE5VTEw7Ci0JZW50cnktPmV4cGlyZXMgPSBqaWZmaWVzLTE7CisJZW50cnktPmV4cGlyZXMgPSBqaWZmaWVzIC0gMTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHUzMiBjbGlwX2hhc2goY29uc3Qgdm9pZCAqcGtleSwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gamhhc2hfMndvcmRzKCoodTMyICopcGtleSwgZGV2LT5pZmluZGV4LCBjbGlwX3RibC5oYXNoX3JuZCk7CisJcmV0dXJuIGpoYXNoXzJ3b3JkcygqKHUzMiAqKSBwa2V5LCBkZXYtPmlmaW5kZXgsIGNsaXBfdGJsLmhhc2hfcm5kKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZWlnaF90YWJsZSBjbGlwX3RibCA9IHsKQEAgLTM2Niw3ICszNjMsNiBAQAogCS5nY190aHJlc2gzIAk9IDEwMjQsCiB9OwogCi0KIC8qIEBAQCBjb3B5IGJoIGxvY2tpbmcgZnJvbSBhcnAuYyAtLSBuZWVkIHRvIGJoLWVuYWJsZSBhdG0gY29kZSBiZWZvcmUgKi8KIAogLyoKQEAgLTM3NiwxNSArMzcyLDEzIEBACiAgKiBjbGlwX3NldGVudHJ5LgogICovCiAKLQotc3RhdGljIGludCBjbGlwX2VuY2FwKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IG1vZGUpCitzdGF0aWMgaW50IGNsaXBfZW5jYXAoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IG1vZGUpCiB7CiAJQ0xJUF9WQ0ModmNjKS0+ZW5jYXAgPSBtb2RlOwogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgY2xpcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2Isc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY2xpcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNsaXBfcHJpdiAqY2xpcF9wcml2ID0gUFJJVihkZXYpOwogCXN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5OwpAQCAtMzkyLDcgKzM4Niw3IEBACiAJaW50IG9sZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5USygiY2xpcF9zdGFydF94bWl0IChza2IgJXApXG4iLHNrYik7CisJRFBSSU5USygiY2xpcF9zdGFydF94bWl0IChza2IgJXApXG4iLCBza2IpOwogCWlmICghc2tiLT5kc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjbGlwX3N0YXJ0X3htaXQ6IHNrYi0+ZHN0ID09IE5VTExcbiIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC00MDEsOSArMzk1LDkgQEAKIAl9CiAJaWYgKCFza2ItPmRzdC0+bmVpZ2hib3VyKSB7CiAjaWYgMAotCQlza2ItPmRzdC0+bmVpZ2hib3VyID0gY2xpcF9maW5kX25laWdoYm91cihza2ItPmRzdCwxKTsKKwkJc2tiLT5kc3QtPm5laWdoYm91ciA9IGNsaXBfZmluZF9uZWlnaGJvdXIoc2tiLT5kc3QsIDEpOwogCQlpZiAoIXNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsgLyogbG9zdCB0aGF0IG9uZSAqLworCQkJZGV2X2tmcmVlX3NrYihza2IpOwkvKiBsb3N0IHRoYXQgb25lICovCiAJCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCXJldHVybiAwOwogCQl9CkBAIC00MTcsNzMgKzQxMSw3MyBAQAogCWlmICghZW50cnktPnZjY3MpIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZW50cnktPmV4cGlyZXMpKSB7CiAJCQkvKiBzaG91bGQgYmUgcmVzb2x2ZWQgKi8KLQkJCWVudHJ5LT5leHBpcmVzID0gamlmZmllcytBVE1BUlBfUkVUUllfREVMQVkqSFo7Ci0JCQl0b19hdG1hcnBkKGFjdF9uZWVkLFBSSVYoZGV2KS0+bnVtYmVyLGVudHJ5LT5pcCk7CisJCQllbnRyeS0+ZXhwaXJlcyA9IGppZmZpZXMgKyBBVE1BUlBfUkVUUllfREVMQVkgKiBIWjsKKwkJCXRvX2F0bWFycGQoYWN0X25lZWQsIFBSSVYoZGV2KS0+bnVtYmVyLCBlbnRyeS0+aXApOwogCQl9CiAJCWlmIChlbnRyeS0+bmVpZ2gtPmFycF9xdWV1ZS5xbGVuIDwgQVRNQVJQX01BWF9VTlJFU19QQUNLRVRTKQotCQkJc2tiX3F1ZXVlX3RhaWwoJmVudHJ5LT5uZWlnaC0+YXJwX3F1ZXVlLHNrYik7CisJCQlza2JfcXVldWVfdGFpbCgmZW50cnktPm5laWdoLT5hcnBfcXVldWUsIHNrYik7CiAJCWVsc2UgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQotCURQUklOVEsoIm5laWdoICVwLCB2Y2NzICVwXG4iLGVudHJ5LGVudHJ5LT52Y2NzKTsKKwlEUFJJTlRLKCJuZWlnaCAlcCwgdmNjcyAlcFxuIiwgZW50cnksIGVudHJ5LT52Y2NzKTsKIAlBVE1fU0tCKHNrYiktPnZjYyA9IHZjYyA9IGVudHJ5LT52Y2NzLT52Y2M7Ci0JRFBSSU5USygidXNpbmcgbmVpZ2hib3VyICVwLCB2Y2MgJXBcbiIsc2tiLT5kc3QtPm5laWdoYm91cix2Y2MpOworCURQUklOVEsoInVzaW5nIG5laWdoYm91ciAlcCwgdmNjICVwXG4iLCBza2ItPmRzdC0+bmVpZ2hib3VyLCB2Y2MpOwogCWlmIChlbnRyeS0+dmNjcy0+ZW5jYXApIHsKIAkJdm9pZCAqaGVyZTsKIAotCQloZXJlID0gc2tiX3B1c2goc2tiLFJGQzE0ODNMTENfTEVOKTsKLQkJbWVtY3B5KGhlcmUsbGxjX291aSxzaXplb2YobGxjX291aSkpOworCQloZXJlID0gc2tiX3B1c2goc2tiLCBSRkMxNDgzTExDX0xFTik7CisJCW1lbWNweShoZXJlLCBsbGNfb3VpLCBzaXplb2YobGxjX291aSkpOwogCQkoKHUxNiAqKSBoZXJlKVszXSA9IHNrYi0+cHJvdG9jb2w7CiAJfQogCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZSwgJnNrX2F0bSh2Y2MpLT5za193bWVtX2FsbG9jKTsKIAlBVE1fU0tCKHNrYiktPmF0bV9vcHRpb25zID0gdmNjLT5hdG1fb3B0aW9uczsKIAllbnRyeS0+dmNjcy0+bGFzdF91c2UgPSBqaWZmaWVzOwotCURQUklOVEsoImF0bV9za2IoJXApLT52Y2MoJXApLT5kZXYoJXApXG4iLHNrYix2Y2MsdmNjLT5kZXYpOwotCW9sZCA9IHhjaGcoJmVudHJ5LT52Y2NzLT54b2ZmLDEpOyAvKiBhc3N1bWUgWE9GRiAuLi4gKi8KKwlEUFJJTlRLKCJhdG1fc2tiKCVwKS0+dmNjKCVwKS0+ZGV2KCVwKVxuIiwgc2tiLCB2Y2MsIHZjYy0+ZGV2KTsKKwlvbGQgPSB4Y2hnKCZlbnRyeS0+dmNjcy0+eG9mZiwgMSk7CS8qIGFzc3VtZSBYT0ZGIC4uLiAqLwogCWlmIChvbGQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xpcF9zdGFydF94bWl0OiBYT0ZGLT5YT0ZGIHRyYW5zaXRpb25cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJY2xpcF9wcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJY2xpcF9wcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkodm9pZCkgdmNjLT5zZW5kKHZjYyxza2IpOwotCWlmIChhdG1fbWF5X3NlbmQodmNjLDApKSB7CisJdmNjLT5zZW5kKHZjYywgc2tiKTsKKwlpZiAoYXRtX21heV9zZW5kKHZjYywgMCkpIHsKIAkJZW50cnktPnZjY3MtPnhvZmYgPSAwOwogCQlyZXR1cm4gMDsKIAl9Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsaXBfcHJpdi0+eG9mZl9sb2NrLGZsYWdzKTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7IC8qIFhPRkYgLT4gdGhyb3R0bGUgaW1tZWRpYXRlbHkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpcF9wcml2LT54b2ZmX2xvY2ssIGZsYWdzKTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CS8qIFhPRkYgLT4gdGhyb3R0bGUgaW1tZWRpYXRlbHkgKi8KIAliYXJyaWVyKCk7CiAJaWYgKCFlbnRyeS0+dmNjcy0+eG9mZikKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJLyogT2gsIHdlIGp1c3QgcmFjZWQgd2l0aCBjbGlwX3BvcC4gbmV0aWZfc3RhcnRfcXVldWUgc2hvdWxkIGJlCi0JCSAgIGdvb2QgZW5vdWdoLCBiZWNhdXNlIG5vdGhpbmcgc2hvdWxkIHJlYWxseSBiZSBhc2xlZXAgYmVjYXVzZQotCQkgICBvZiB0aGUgYnJpZWYgbmV0aWZfc3RvcF9xdWV1ZS4gSWYgdGhpcyBpc24ndCB0cnVlIG9yIGlmIGl0Ci0JCSAgIGNoYW5nZXMsIHVzZSBuZXRpZl93YWtlX3F1ZXVlIGluc3RlYWQuICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpcF9wcml2LT54b2ZmX2xvY2ssZmxhZ3MpOworCS8qIE9oLCB3ZSBqdXN0IHJhY2VkIHdpdGggY2xpcF9wb3AuIG5ldGlmX3N0YXJ0X3F1ZXVlIHNob3VsZCBiZQorCSAgIGdvb2QgZW5vdWdoLCBiZWNhdXNlIG5vdGhpbmcgc2hvdWxkIHJlYWxseSBiZSBhc2xlZXAgYmVjYXVzZQorCSAgIG9mIHRoZSBicmllZiBuZXRpZl9zdG9wX3F1ZXVlLiBJZiB0aGlzIGlzbid0IHRydWUgb3IgaWYgaXQKKwkgICBjaGFuZ2VzLCB1c2UgbmV0aWZfd2FrZV9xdWV1ZSBpbnN0ZWFkLiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaXBfcHJpdi0+eG9mZl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjbGlwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiAmUFJJVihkZXYpLT5zdGF0czsKIH0KIAotCi1zdGF0aWMgaW50IGNsaXBfbWtpcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLGludCB0aW1lb3V0KQorc3RhdGljIGludCBjbGlwX21raXAoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IHRpbWVvdXQpCiB7CiAJc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGNvcHk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWlmICghdmNjLT5wdXNoKSByZXR1cm4gLUVCQURGRDsKLQljbGlwX3ZjYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGlwX3ZjYyksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGlwX3ZjYykgcmV0dXJuIC1FTk9NRU07Ci0JRFBSSU5USygibWtpcCBjbGlwX3ZjYyAlcCB2Y2MgJXBcbiIsY2xpcF92Y2MsdmNjKTsKKwlpZiAoIXZjYy0+cHVzaCkKKwkJcmV0dXJuIC1FQkFERkQ7CisJY2xpcF92Y2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2xpcF92Y2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsaXBfdmNjKQorCQlyZXR1cm4gLUVOT01FTTsKKwlEUFJJTlRLKCJta2lwIGNsaXBfdmNjICVwIHZjYyAlcFxuIiwgY2xpcF92Y2MsIHZjYyk7CiAJY2xpcF92Y2MtPnZjYyA9IHZjYzsKIAl2Y2MtPnVzZXJfYmFjayA9IGNsaXBfdmNjOwogCXNldF9iaXQoQVRNX1ZGX0lTX0NMSVAsICZ2Y2MtPmZsYWdzKTsKQEAgLTQ5MSw3ICs0ODUsNyBAQAogCWNsaXBfdmNjLT54b2ZmID0gMDsKIAljbGlwX3ZjYy0+ZW5jYXAgPSAxOwogCWNsaXBfdmNjLT5sYXN0X3VzZSA9IGppZmZpZXM7Ci0JY2xpcF92Y2MtPmlkbGVfdGltZW91dCA9IHRpbWVvdXQqSFo7CisJY2xpcF92Y2MtPmlkbGVfdGltZW91dCA9IHRpbWVvdXQgKiBIWjsKIAljbGlwX3ZjYy0+b2xkX3B1c2ggPSB2Y2MtPnB1c2g7CiAJY2xpcF92Y2MtPm9sZF9wb3AgPSB2Y2MtPnBvcDsKIAl2Y2MtPnB1c2ggPSBjbGlwX3B1c2g7CkBAIC01MDEsMjcgKzQ5NSwyNSBAQAogCS8qIHJlLXByb2Nlc3MgZXZlcnl0aGluZyByZWNlaXZlZCBiZXR3ZWVuIGNvbm5lY3Rpb24gc2V0dXAgYW5kIE1LSVAgKi8KIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjb3B5KSkgIT0gTlVMTCkKIAkJaWYgKCFjbGlwX2RldnMpIHsKLQkJCWF0bV9yZXR1cm4odmNjLHNrYi0+dHJ1ZXNpemUpOworCQkJYXRtX3JldHVybih2Y2MsIHNrYi0+dHJ1ZXNpemUpOwogCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CiAKLQkJCWNsaXBfcHVzaCh2Y2Msc2tiKTsKKwkJCWNsaXBfcHVzaCh2Y2MsIHNrYik7CiAJCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cy0tOwogCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzIC09IGxlbjsKIAkJfQogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgY2xpcF9zZXRlbnRyeShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHUzMiBpcCkKK3N0YXRpYyBpbnQgY2xpcF9zZXRlbnRyeShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCB1MzIgaXApCiB7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnk7CiAJaW50IGVycm9yOwogCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2M7Ci0Jc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmlwNF91ID0geyAuZGFkZHIgPSBpcCwgLnRvcyA9IDEgfSB9IH07CisJc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmlwNF91ID0geyAuZGFkZHIgPSBpcCwgLnRvcyA9IDF9fSB9OwogCXN0cnVjdCBydGFibGUgKnJ0OwogCiAJaWYgKHZjYy0+cHVzaCAhPSBjbGlwX3B1c2gpIHsKQEAgLTUzOCwyOCArNTMwLDI5IEBACiAJCXVubGlua19jbGlwX3ZjYyhjbGlwX3ZjYyk7CiAJCXJldHVybiAwOwogCX0KLQllcnJvciA9IGlwX3JvdXRlX291dHB1dF9rZXkoJnJ0LCZmbCk7Ci0JaWYgKGVycm9yKSByZXR1cm4gZXJyb3I7Ci0JbmVpZ2ggPSBfX25laWdoX2xvb2t1cCgmY2xpcF90YmwsJmlwLHJ0LT51LmRzdC5kZXYsMSk7CisJZXJyb3IgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KCZydCwgJmZsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwluZWlnaCA9IF9fbmVpZ2hfbG9va3VwKCZjbGlwX3RibCwgJmlwLCBydC0+dS5kc3QuZGV2LCAxKTsKIAlpcF9ydF9wdXQocnQpOwogCWlmICghbmVpZ2gpCiAJCXJldHVybiAtRU5PTUVNOwogCWVudHJ5ID0gTkVJR0gyRU5UUlkobmVpZ2gpOwogCWlmIChlbnRyeSAhPSBjbGlwX3ZjYy0+ZW50cnkpIHsKLQkJaWYgKCFjbGlwX3ZjYy0+ZW50cnkpIERQUklOVEsoInNldGVudHJ5OiBhZGRcbiIpOworCQlpZiAoIWNsaXBfdmNjLT5lbnRyeSkKKwkJCURQUklOVEsoInNldGVudHJ5OiBhZGRcbiIpOwogCQllbHNlIHsKIAkJCURQUklOVEsoInNldGVudHJ5OiB1cGRhdGVcbiIpOwogCQkJdW5saW5rX2NsaXBfdmNjKGNsaXBfdmNjKTsKIAkJfQotCQlsaW5rX3ZjYyhjbGlwX3ZjYyxlbnRyeSk7CisJCWxpbmtfdmNjKGNsaXBfdmNjLCBlbnRyeSk7CiAJfQotCWVycm9yID0gbmVpZ2hfdXBkYXRlKG5laWdoLCBsbGNfb3VpLCBOVURfUEVSTUFORU5ULCAKLQkJCSAgICAgTkVJR0hfVVBEQVRFX0ZfT1ZFUlJJREV8TkVJR0hfVVBEQVRFX0ZfQURNSU4pOworCWVycm9yID0gbmVpZ2hfdXBkYXRlKG5laWdoLCBsbGNfb3VpLCBOVURfUEVSTUFORU5ULAorCQkJICAgICBORUlHSF9VUERBVEVfRl9PVkVSUklERSB8IE5FSUdIX1VQREFURV9GX0FETUlOKTsKIAluZWlnaF9yZWxlYXNlKG5laWdoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQogc3RhdGljIHZvaWQgY2xpcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY2xpcF9zdGFydF94bWl0OwpAQCAtNTY4LDE1ICs1NjEsMTQgQEAKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVRNOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gUkZDMTQ4M0xMQ19MRU47CiAJZGV2LT5tdHUgPSBSRkMxNjI2X01UVTsKLQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsgLyogIm5vcm1hbCIgcXVldWUgKHBhY2tldHMpICovCi0JICAgIC8qIFdoZW4gdXNpbmcgYSAicmVhbCIgcWRpc2MsIHRoZSBxZGlzYyBkZXRlcm1pbmVzIHRoZSBxdWV1ZSAqLwotCSAgICAvKiBsZW5ndGguIHR4X3F1ZXVlX2xlbiBpcyBvbmx5IHVzZWQgZm9yIHRoZSBkZWZhdWx0IGNhc2UsICovCi0JICAgIC8qIHdpdGhvdXQgYW55IG1vcmUgZWxhYm9yYXRlIHF1ZXVpbmcuIDEwMCBpcyBhIHJlYXNvbmFibGUgKi8KLQkgICAgLyogY29tcHJvbWlzZSBiZXR3ZWVuIGRlY2VudCBidXJzdC10b2xlcmFuY2UgYW5kIHByb3RlY3Rpb24gKi8KLQkgICAgLyogYWdhaW5zdCBtZW1vcnkgaG9ncy4gKi8KKwlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsJLyogIm5vcm1hbCIgcXVldWUgKHBhY2tldHMpICovCisJLyogV2hlbiB1c2luZyBhICJyZWFsIiBxZGlzYywgdGhlIHFkaXNjIGRldGVybWluZXMgdGhlIHF1ZXVlICovCisJLyogbGVuZ3RoLiB0eF9xdWV1ZV9sZW4gaXMgb25seSB1c2VkIGZvciB0aGUgZGVmYXVsdCBjYXNlLCAqLworCS8qIHdpdGhvdXQgYW55IG1vcmUgZWxhYm9yYXRlIHF1ZXVpbmcuIDEwMCBpcyBhIHJlYXNvbmFibGUgKi8KKwkvKiBjb21wcm9taXNlIGJldHdlZW4gZGVjZW50IGJ1cnN0LXRvbGVyYW5jZSBhbmQgcHJvdGVjdGlvbiAqLworCS8qIGFnYWluc3QgbWVtb3J5IGhvZ3MuICovCiB9CiAKLQogc3RhdGljIGludCBjbGlwX2NyZWF0ZShpbnQgbnVtYmVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC01ODUsMTkgKzU3NywxOSBAQAogCiAJaWYgKG51bWJlciAhPSAtMSkgewogCQlmb3IgKGRldiA9IGNsaXBfZGV2czsgZGV2OyBkZXYgPSBQUklWKGRldiktPm5leHQpCi0JCQlpZiAoUFJJVihkZXYpLT5udW1iZXIgPT0gbnVtYmVyKSByZXR1cm4gLUVFWElTVDsKLQl9Ci0JZWxzZSB7CisJCQlpZiAoUFJJVihkZXYpLT5udW1iZXIgPT0gbnVtYmVyKQorCQkJCXJldHVybiAtRUVYSVNUOworCX0gZWxzZSB7CiAJCW51bWJlciA9IDA7CiAJCWZvciAoZGV2ID0gY2xpcF9kZXZzOyBkZXY7IGRldiA9IFBSSVYoZGV2KS0+bmV4dCkKIAkJCWlmIChQUklWKGRldiktPm51bWJlciA+PSBudW1iZXIpCi0JCQkJbnVtYmVyID0gUFJJVihkZXYpLT5udW1iZXIrMTsKKwkJCQludW1iZXIgPSBQUklWKGRldiktPm51bWJlciArIDE7CiAJfQogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGNsaXBfcHJpdiksICIiLCBjbGlwX3NldHVwKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJY2xpcF9wcml2ID0gUFJJVihkZXYpOwotCXNwcmludGYoZGV2LT5uYW1lLCJhdG0lZCIsbnVtYmVyKTsKKwlzcHJpbnRmKGRldi0+bmFtZSwgImF0bSVkIiwgbnVtYmVyKTsKIAlzcGluX2xvY2tfaW5pdCgmY2xpcF9wcml2LT54b2ZmX2xvY2spOwogCWNsaXBfcHJpdi0+bnVtYmVyID0gbnVtYmVyOwogCWVycm9yID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC02MDcsNTMgKzU5OSw0OCBAQAogCX0KIAljbGlwX3ByaXYtPm5leHQgPSBjbGlwX2RldnM7CiAJY2xpcF9kZXZzID0gZGV2OwotCURQUklOVEsoInJlZ2lzdGVyZWQgKG5ldDolcylcbiIsZGV2LT5uYW1lKTsKKwlEUFJJTlRLKCJyZWdpc3RlcmVkIChuZXQ6JXMpXG4iLCBkZXYtPm5hbWUpOwogCXJldHVybiBudW1iZXI7CiB9CiAKLQotc3RhdGljIGludCBjbGlwX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsdW5zaWduZWQgbG9uZyBldmVudCwKLSAgICB2b2lkICpkZXYpCitzdGF0aWMgaW50IGNsaXBfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKKwkJCSAgICAgdm9pZCAqYXJnKQogewotCS8qIGlnbm9yZSBub24tQ0xJUCBkZXZpY2VzICovCi0JaWYgKCgoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2KS0+dHlwZSAhPSBBUlBIUkRfQVRNIHx8Ci0JICAgICgoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2KS0+aGFyZF9zdGFydF94bWl0ICE9IGNsaXBfc3RhcnRfeG1pdCkKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOworCisJaWYgKGV2ZW50ID09IE5FVERFVl9VTlJFR0lTVEVSKSB7CisJCW5laWdoX2lmZG93bigmY2xpcF90YmwsIGRldik7CiAJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9CisKKwkvKiBpZ25vcmUgbm9uLUNMSVAgZGV2aWNlcyAqLworCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0FUTSB8fCBkZXYtPmhhcmRfc3RhcnRfeG1pdCAhPSBjbGlwX3N0YXJ0X3htaXQpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKwogCXN3aXRjaCAoZXZlbnQpIHsKLQkJY2FzZSBORVRERVZfVVA6Ci0JCQlEUFJJTlRLKCJjbGlwX2RldmljZV9ldmVudCBORVRERVZfVVBcbiIpOwotCQkJKHZvaWQpIHRvX2F0bWFycGQoYWN0X3VwLFBSSVYoZGV2KS0+bnVtYmVyLDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkVUREVWX0dPSU5HX0RPV046Ci0JCQlEUFJJTlRLKCJjbGlwX2RldmljZV9ldmVudCBORVRERVZfRE9XTlxuIik7Ci0JCQkodm9pZCkgdG9fYXRtYXJwZChhY3RfZG93bixQUklWKGRldiktPm51bWJlciwwKTsKLQkJCWJyZWFrOwotCQljYXNlIE5FVERFVl9DSEFOR0U6Ci0JCWNhc2UgTkVUREVWX0NIQU5HRU1UVToKLQkJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9DSEFOR0UqXG4iKTsKLQkJCSh2b2lkKSB0b19hdG1hcnBkKGFjdF9jaGFuZ2UsUFJJVihkZXYpLT5udW1iZXIsMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBORVRERVZfUkVCT09UOgotCQljYXNlIE5FVERFVl9SRUdJU1RFUjoKLQkJY2FzZSBORVRERVZfRE9XTjoKLQkJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50ICVsZFxuIixldmVudCk7Ci0JCQkvKiBpZ25vcmUgKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xpcF9kZXZpY2VfZXZlbnQ6IHVua25vd24gZXZlbnQgIgotCQkJICAgICIlbGRcbiIsZXZlbnQpOwotCQkJYnJlYWs7CisJY2FzZSBORVRERVZfVVA6CisJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9VUFxuIik7CisJCXRvX2F0bWFycGQoYWN0X3VwLCBQUklWKGRldiktPm51bWJlciwgMCk7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX0dPSU5HX0RPV046CisJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9ET1dOXG4iKTsKKwkJdG9fYXRtYXJwZChhY3RfZG93biwgUFJJVihkZXYpLT5udW1iZXIsIDApOworCQlicmVhazsKKwljYXNlIE5FVERFVl9DSEFOR0U6CisJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgorCQlEUFJJTlRLKCJjbGlwX2RldmljZV9ldmVudCBORVRERVZfQ0hBTkdFKlxuIik7CisJCXRvX2F0bWFycGQoYWN0X2NoYW5nZSwgUFJJVihkZXYpLT5udW1iZXIsIDApOworCQlicmVhazsKIAl9CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi0KLXN0YXRpYyBpbnQgY2xpcF9pbmV0X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyx1bnNpZ25lZCBsb25nIGV2ZW50LAotICAgIHZvaWQgKmlmYSkKK3N0YXRpYyBpbnQgY2xpcF9pbmV0X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKKwkJCSAgIHZvaWQgKmlmYSkKIHsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAKLQlpbl9kZXYgPSAoKHN0cnVjdCBpbl9pZmFkZHIgKikgaWZhKS0+aWZhX2RldjsKKwlpbl9kZXYgPSAoKHN0cnVjdCBpbl9pZmFkZHIgKilpZmEpLT5pZmFfZGV2OwogCWlmICghaW5fZGV2IHx8ICFpbl9kZXYtPmRldikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX2luZXRfZXZlbnQ6IG5vIGRldmljZVxuIik7CiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTY2MiwyMyArNjQ5LDIwIEBACiAJICogVHJhbnNpdGlvbnMgYXJlIG9mIHRoZSBkb3duLWNoYW5nZS11cCB0eXBlLCBzbyBpdCdzIHN1ZmZpY2llbnQgdG8KIAkgKiBoYW5kbGUgdGhlIGNoYW5nZSBvbiB1cC4KIAkgKi8KLQlpZiAoZXZlbnQgIT0gTkVUREVWX1VQKSByZXR1cm4gTk9USUZZX0RPTkU7Ci0JcmV0dXJuIGNsaXBfZGV2aWNlX2V2ZW50KHRoaXMsTkVUREVWX0NIQU5HRSxpbl9kZXYtPmRldik7CisJaWYgKGV2ZW50ICE9IE5FVERFVl9VUCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCXJldHVybiBjbGlwX2RldmljZV9ldmVudCh0aGlzLCBORVRERVZfQ0hBTkdFLCBpbl9kZXYtPmRldik7CiB9CiAKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbGlwX2Rldl9ub3RpZmllciA9IHsKLQljbGlwX2RldmljZV9ldmVudCwKLQlOVUxMLAotCTAKKwkubm90aWZpZXJfY2FsbCA9IGNsaXBfZGV2aWNlX2V2ZW50LAogfTsKIAogCiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2xpcF9pbmV0X25vdGlmaWVyID0gewotCWNsaXBfaW5ldF9ldmVudCwKLQlOVUxMLAotCTAKKwkubm90aWZpZXJfY2FsbCA9IGNsaXBfaW5ldF9ldmVudCwKIH07CiAKIApAQCAtNjg2LDE0ICs2NzAsMTIgQEAKIHN0YXRpYyB2b2lkIGF0bWFycGRfY2xvc2Uoc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKIAlEUFJJTlRLKCJhdG1hcnBkX2Nsb3NlXG4iKTsKLQlhdG1hcnBkID0gTlVMTDsgLyogYXNzdW1lZCB0byBiZSBhdG9taWMgKi8KLQliYXJyaWVyKCk7Ci0JdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmY2xpcF9pbmV0X25vdGlmaWVyKTsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY2xpcF9kZXZfbm90aWZpZXIpOwotCWlmIChza2JfcGVlaygmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUpKQotCQlwcmludGsoS0VSTl9FUlIgImF0bWFycGRfY2xvc2U6IGNsb3Npbmcgd2l0aCByZXF1ZXN0cyAiCi0JCSAgICAicGVuZGluZ1xuIik7CisKKwlydG5sX2xvY2soKTsKKwlhdG1hcnBkID0gTlVMTDsKIAlza2JfcXVldWVfcHVyZ2UoJnNrX2F0bSh2Y2MpLT5za19yZWNlaXZlX3F1ZXVlKTsKKwlydG5sX3VubG9jaygpOworCiAJRFBSSU5USygiKGRvbmUpXG4iKTsKIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KQEAgLTcxNCwxNCArNjk2LDE0IEBACiAKIHN0YXRpYyBpbnQgYXRtX2luaXRfYXRtYXJwKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7Ci0JaWYgKGF0bWFycGQpIHJldHVybiAtRUFERFJJTlVTRTsKLQlpZiAoc3RhcnRfdGltZXIpIHsKLQkJc3RhcnRfdGltZXIgPSAwOwotCQlpbml0X3RpbWVyKCZpZGxlX3RpbWVyKTsKLQkJaWRsZV90aW1lci5leHBpcmVzID0gamlmZmllcytDTElQX0NIRUNLX0lOVEVSVkFMKkhaOwotCQlpZGxlX3RpbWVyLmZ1bmN0aW9uID0gaWRsZV90aW1lcl9jaGVjazsKLQkJYWRkX3RpbWVyKCZpZGxlX3RpbWVyKTsKKwlydG5sX2xvY2soKTsKKwlpZiAoYXRtYXJwZCkgeworCQlydG5sX3VubG9jaygpOworCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJfQorCisJbW9kX3RpbWVyKCZpZGxlX3RpbWVyLCBqaWZmaWVzK0NMSVBfQ0hFQ0tfSU5URVJWQUwqSFopOworCiAJYXRtYXJwZCA9IHZjYzsKIAlzZXRfYml0KEFUTV9WRl9NRVRBLCZ2Y2MtPmZsYWdzKTsKIAlzZXRfYml0KEFUTV9WRl9SRUFEWSwmdmNjLT5mbGFncyk7CkBAIC03MzEsMTAgKzcxMyw3IEBACiAJdmNjLT5wdXNoID0gTlVMTDsKIAl2Y2MtPnBvcCA9IE5VTEw7IC8qIGNyYXNoICovCiAJdmNjLT5wdXNoX29hbSA9IE5VTEw7IC8qIGNyYXNoICovCi0JaWYgKHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY2xpcF9kZXZfbm90aWZpZXIpKQotCQlwcmludGsoS0VSTl9FUlIgInJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllciBmYWlsZWRcbiIpOwotCWlmIChyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmY2xpcF9pbmV0X25vdGlmaWVyKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllciBmYWlsZWRcbiIpOworCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc0NCw1MyArNzIzLDUzIEBACiAJaW50IGVyciA9IDA7CiAKIAlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFNJT0NNS0NMSVA6Ci0JCWNhc2UgQVRNQVJQRF9DVFJMOgotCQljYXNlIEFUTUFSUF9NS0lQOgotCQljYXNlIEFUTUFSUF9TRVRFTlRSWToKLQkJY2FzZSBBVE1BUlBfRU5DQVA6Ci0JCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQkJcmV0dXJuIC1FUEVSTTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwljYXNlIFNJT0NNS0NMSVA6CisJY2FzZSBBVE1BUlBEX0NUUkw6CisJY2FzZSBBVE1BUlBfTUtJUDoKKwljYXNlIEFUTUFSUF9TRVRFTlRSWToKKwljYXNlIEFUTUFSUF9FTkNBUDoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAKIAlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFNJT0NNS0NMSVA6Ci0JCQllcnIgPSBjbGlwX2NyZWF0ZShhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNQVJQRF9DVFJMOgotCQkJZXJyID0gYXRtX2luaXRfYXRtYXJwKHZjYyk7Ci0JCQlpZiAoIWVycikgewotCQkJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOwotCQkJCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1BUlBfTUtJUDoKLQkJCWVyciA9IGNsaXBfbWtpcCh2Y2MgLGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1BUlBfU0VURU5UUlk6Ci0JCQllcnIgPSBjbGlwX3NldGVudHJ5KHZjYywgYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUTUFSUF9FTkNBUDoKLQkJCWVyciA9IGNsaXBfZW5jYXAodmNjLCBhcmcpOwotCQkJYnJlYWs7CisJY2FzZSBTSU9DTUtDTElQOgorCQllcnIgPSBjbGlwX2NyZWF0ZShhcmcpOworCQlicmVhazsKKwljYXNlIEFUTUFSUERfQ1RSTDoKKwkJZXJyID0gYXRtX2luaXRfYXRtYXJwKHZjYyk7CisJCWlmICghZXJyKSB7CisJCQlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKKwkJCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBVE1BUlBfTUtJUDoKKwkJZXJyID0gY2xpcF9ta2lwKHZjYywgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBBVE1BUlBfU0VURU5UUlk6CisJCWVyciA9IGNsaXBfc2V0ZW50cnkodmNjLCBhcmcpOworCQlicmVhazsKKwljYXNlIEFUTUFSUF9FTkNBUDoKKwkJZXJyID0gY2xpcF9lbmNhcCh2Y2MsIGFyZyk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IGF0bV9pb2N0bCBjbGlwX2lvY3RsX29wcyA9IHsKLQkub3duZXIgCT0gVEhJU19NT0RVTEUsCi0JLmlvY3RsCT0gY2xpcF9pb2N0bCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuaW9jdGwgPSBjbGlwX2lvY3RsLAogfTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKIHN0YXRpYyB2b2lkIHN2Y19hZGRyKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICphZGRyKQogewotCXN0YXRpYyBpbnQgY29kZVtdID0geyAxLDIsMTAsNiwxLDAgfTsKLQlzdGF0aWMgaW50IGUxNjRbXSA9IHsgMSw4LDQsNiwxLDAgfTsKKwlzdGF0aWMgaW50IGNvZGVbXSA9IHsgMSwgMiwgMTAsIDYsIDEsIDAgfTsKKwlzdGF0aWMgaW50IGUxNjRbXSA9IHsgMSwgOCwgNCwgNiwgMSwgMCB9OwogCiAJaWYgKCphZGRyLT5zYXNfYWRkci5wdWIpIHsKIAkJc2VxX3ByaW50ZihzZXEsICIlcyIsIGFkZHItPnNhc19hZGRyLnB1Yik7CkBAIC04MDksNyArNzg4LDcgQEAKIAkJZm9yIChpID0gMDsgZmllbGRzW2ldOyBpKyspIHsKIAkJCWZvciAoaiA9IGZpZWxkc1tpXTsgajsgai0tKQogCQkJCXNlcV9wcmludGYoc2VxLCAiJTAyWCIsICpwcnYrKyk7Ci0JCQlpZiAoZmllbGRzW2krMV0pCisJCQlpZiAoZmllbGRzW2kgKyAxXSkKIAkJCQlzZXFfcHV0YyhzZXEsICcuJyk7CiAJCX0KIAl9CkBAIC04MjgsOCArODA3LDcgQEAKIAlzdmMgPSAoKGNsaXBfdmNjID09IFNFUV9OT19WQ0NfVE9LRU4pIHx8CiAJICAgICAgIChza19hdG0oY2xpcF92Y2MtPnZjYyktPnNrX2ZhbWlseSA9PSBBRl9BVE1TVkMpKTsKIAotCWxsYyA9ICgoY2xpcF92Y2MgPT0gU0VRX05PX1ZDQ19UT0tFTikgfHwKLQkgICAgICAgY2xpcF92Y2MtPmVuY2FwKTsKKwlsbGMgPSAoKGNsaXBfdmNjID09IFNFUV9OT19WQ0NfVE9LRU4pIHx8IGNsaXBfdmNjLT5lbmNhcCk7CiAKIAlpZiAoY2xpcF92Y2MgPT0gU0VRX05PX1ZDQ19UT0tFTikKIAkJZXhwID0gZW50cnktPm5laWdoLT51c2VkOwpAQCAtODM5LDEwICs4MTcsNyBAQAogCWV4cCA9IChqaWZmaWVzIC0gZXhwKSAvIEhaOwogCiAJc2VxX3ByaW50ZihzZXEsICIlLTZzJS00cyUtNHMlNWxkICIsCi0JCSAgIGRldi0+bmFtZSwKLQkJICAgc3ZjID8gIlNWQyIgOiAiUFZDIiwKLQkJICAgbGxjID8gIkxMQyIgOiAiTlVMTCIsCi0JCSAgIGV4cCk7CisJCSAgIGRldi0+bmFtZSwgc3ZjID8gIlNWQyIgOiAiUFZDIiwgbGxjID8gIkxMQyIgOiAiTlVMTCIsIGV4cCk7CiAKIAlvZmYgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICIlZC4lZC4lZC4lZCIsCiAJCQlOSVBRVUFEKGVudHJ5LT5pcCkpOwpAQCAtODYwLDggKzgzNSw3IEBACiAJfSBlbHNlIGlmICghc3ZjKSB7CiAJCXNlcV9wcmludGYoc2VxLCAiJWQuJWQuJWRcbiIsCiAJCQkgICBjbGlwX3ZjYy0+dmNjLT5kZXYtPm51bWJlciwKLQkJCSAgIGNsaXBfdmNjLT52Y2MtPnZwaSwKLQkJCSAgIGNsaXBfdmNjLT52Y2MtPnZjaSk7CisJCQkgICBjbGlwX3ZjYy0+dmNjLT52cGksIGNsaXBfdmNjLT52Y2MtPnZjaSk7CiAJfSBlbHNlIHsKIAkJc3ZjX2FkZHIoc2VxLCAmY2xpcF92Y2MtPnZjYy0+cmVtb3RlKTsKIAkJc2VxX3B1dGMoc2VxLCAnXG4nKTsKQEAgLTg5NCw3ICs4NjgsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqY2xpcF9zZXFfdmNjX3dhbGsoc3RydWN0IGNsaXBfc2VxX3N0YXRlICpzdGF0ZSwKLQkJCSAgICAgICBzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplLCBsb2ZmX3QgKnBvcykKKwkJCSAgICAgICBzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplLCBsb2ZmX3QgKiBwb3MpCiB7CiAJc3RydWN0IGNsaXBfdmNjICp2Y2MgPSBzdGF0ZS0+dmNjOwogCkBAIC05MTEsMjQgKzg4NSwyNCBAQAogCiAJcmV0dXJuIHZjYzsKIH0KLSAgCisKIHN0YXRpYyB2b2lkICpjbGlwX3NlcV9zdWJfaXRlcihzdHJ1Y3QgbmVpZ2hfc2VxX3N0YXRlICpfc3RhdGUsCi0JCQkgICAgICAgc3RydWN0IG5laWdoYm91ciAqbiwgbG9mZl90ICpwb3MpCisJCQkgICAgICAgc3RydWN0IG5laWdoYm91ciAqbiwgbG9mZl90ICogcG9zKQogewotCXN0cnVjdCBjbGlwX3NlcV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGNsaXBfc2VxX3N0YXRlICopIF9zdGF0ZTsKKwlzdHJ1Y3QgY2xpcF9zZXFfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBjbGlwX3NlcV9zdGF0ZSAqKV9zdGF0ZTsKIAogCXJldHVybiBjbGlwX3NlcV92Y2Nfd2FsayhzdGF0ZSwgTkVJR0gyRU5UUlkobiksIHBvcyk7CiB9CiAKLXN0YXRpYyB2b2lkICpjbGlwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCitzdGF0aWMgdm9pZCAqY2xpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqIHBvcykKIHsKIAlyZXR1cm4gbmVpZ2hfc2VxX3N0YXJ0KHNlcSwgcG9zLCAmY2xpcF90YmwsIE5FSUdIX1NFUV9ORUlHSF9PTkxZKTsKIH0KIAogc3RhdGljIGludCBjbGlwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCXN0YXRpYyBjaGFyIGF0bV9hcnBfYmFubmVyW10gPSAKLQkJIklQaXRmIFR5cGVFbmNwIElkbGUgSVAgYWRkcmVzcyAgICAgIEFUTSBhZGRyZXNzXG4iOworCXN0YXRpYyBjaGFyIGF0bV9hcnBfYmFubmVyW10gPQorCSAgICAiSVBpdGYgVHlwZUVuY3AgSWRsZSBJUCBhZGRyZXNzICAgICAgQVRNIGFkZHJlc3NcbiI7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJc2VxX3B1dHMoc2VxLCBhdG1fYXJwX2Jhbm5lcik7CkBAIC05MzksNyArOTEzLDcgQEAKIAogCQlhdG1hcnBfaW5mbyhzZXEsIG4tPmRldiwgTkVJR0gyRU5UUlkobiksIHZjYyk7CiAJfQotICAJcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYXJwX3NlcV9vcHMgPSB7CkBAIC05ODgsMjAgKzk2MiwxOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdG1fY2xpcF9pbml0KHZvaWQpCiB7Ci0JbmVpZ2hfdGFibGVfaW5pdCgmY2xpcF90YmwpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKKwluZWlnaF90YWJsZV9pbml0X25vX25ldGxpbmsoJmNsaXBfdGJsKTsKIAogCWNsaXBfdGJsX2hvb2sgPSAmY2xpcF90Ymw7CiAJcmVnaXN0ZXJfYXRtX2lvY3RsKCZjbGlwX2lvY3RsX29wcyk7CisJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjbGlwX2Rldl9ub3RpZmllcik7CisJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJmNsaXBfaW5ldF9ub3RpZmllcik7CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKKwlzZXR1cF90aW1lcigmaWRsZV90aW1lciwgaWRsZV90aW1lcl9jaGVjaywgMCk7CiAKIAlwID0gY3JlYXRlX3Byb2NfZW50cnkoImFycCIsIFNfSVJVR08sIGF0bV9wcm9jX3Jvb3QpOwogCWlmIChwKQogCQlwLT5wcm9jX2ZvcHMgPSAmYXJwX3NlcV9mb3BzOwotfQotI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMTIsMTMgKzk4NSwxNSBAQAogCiAJcmVtb3ZlX3Byb2NfZW50cnkoImFycCIsIGF0bV9wcm9jX3Jvb3QpOwogCisJdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmY2xpcF9pbmV0X25vdGlmaWVyKTsKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY2xpcF9kZXZfbm90aWZpZXIpOworCiAJZGVyZWdpc3Rlcl9hdG1faW9jdGwoJmNsaXBfaW9jdGxfb3BzKTsKIAogCS8qIEZpcnN0LCBzdG9wIHRoZSBpZGxlIHRpbWVyLCBzbyBpdCBzdG9wcyBiYW5naW5nCiAJICogb24gdGhlIHRhYmxlLgogCSAqLwotCWlmIChzdGFydF90aW1lciA9PSAwKQotCQlkZWxfdGltZXIoJmlkbGVfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZpZGxlX3RpbWVyKTsKIAogCS8qIE5leHQsIHB1cmdlIHRoZSB0YWJsZSwgc28gdGhhdCB0aGUgZGV2aWNlCiAJICogdW5yZWdpc3RlciBsb29wIGJlbG93IGRvZXMgbm90IGhhbmcgZHVlIHRvCkBAIC0xMDQyLDUgKzEwMTcsNiBAQAogCiBtb2R1bGVfaW5pdChhdG1fY2xpcF9pbml0KTsKIG1vZHVsZV9leGl0KGF0bV9jbGlwX2V4aXQpOwotCitNT0RVTEVfQVVUSE9SKCJXZXJuZXIgQWxtZXNiZXJnZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ2xhc3NpY2FsL0lQIG92ZXIgQVRNIGludGVyZmFjZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IGRiZjliNDcuLmEyZTBkZDAgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTIyOCw2ICsyMjgsOCBAQAogCXJldHVybiBOVUxMOwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVfZmluZF9jYik7CisKIHZvaWQgYXgyNV9zZW5kX3RvX3JhdyhheDI1X2FkZHJlc3MgKmFkZHIsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bykKIHsKIAlheDI1X2NiICpzOwpAQCAtNDI0LDYgKzQyNiwyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBheDI1X2ZpbGxpbl9jYl9mcm9tX2RldihheDI1X2NiICpheDI1LCBheDI1X2RldiAqYXgyNV9kZXYpCit7CisJYXgyNS0+cnR0ICAgICA9IG1zZWNzX3RvX2ppZmZpZXMoYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19UMV0pIC8gMjsKKwlheDI1LT50MSAgICAgID0gbXNlY3NfdG9famlmZmllcyhheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1QxXSk7CisJYXgyNS0+dDIgICAgICA9IG1zZWNzX3RvX2ppZmZpZXMoYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19UMl0pOworCWF4MjUtPnQzICAgICAgPSBtc2Vjc190b19qaWZmaWVzKGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfVDNdKTsKKwlheDI1LT5uMiAgICAgID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19OMl07CisJYXgyNS0+cGFjbGVuICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfUEFDTEVOXTsKKwlheDI1LT5pZGxlICAgID0gbXNlY3NfdG9famlmZmllcyhheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX0lETEVdKTsKKwlheDI1LT5iYWNrb2ZmID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19CQUNLT0ZGXTsKKworCWlmIChheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX0FYREVGTU9ERV0pIHsKKwkJYXgyNS0+bW9kdWx1cyA9IEFYMjVfRU1PRFVMVVM7CisJCWF4MjUtPndpbmRvdyAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX0VXSU5ET1ddOworCX0gZWxzZSB7CisJCWF4MjUtPm1vZHVsdXMgPSBBWDI1X01PRFVMVVM7CisJCWF4MjUtPndpbmRvdyAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1dJTkRPV107CisJfQorfQorCiAvKgogICoJRmlsbCBpbiBhIGNyZWF0ZWQgQVguMjUgY3JlYXRlZCBjb250cm9sIGJsb2NrIHdpdGggdGhlIGRlZmF1bHQKICAqCXZhbHVlcyBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZS4KQEAgLTQzMywzOSArNDU1LDI4IEBACiAJYXgyNS0+YXgyNV9kZXYgPSBheDI1X2RldjsKIAogCWlmIChheDI1LT5heDI1X2RldiAhPSBOVUxMKSB7Ci0JCWF4MjUtPnJ0dCAgICAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1QxXSAvIDI7Ci0JCWF4MjUtPnQxICAgICAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1QxXTsKLQkJYXgyNS0+dDIgICAgICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfVDJdOwotCQlheDI1LT50MyAgICAgID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19UM107Ci0JCWF4MjUtPm4yICAgICAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX04yXTsKLQkJYXgyNS0+cGFjbGVuICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfUEFDTEVOXTsKLQkJYXgyNS0+aWRsZSAgICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfSURMRV07Ci0JCWF4MjUtPmJhY2tvZmYgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX0JBQ0tPRkZdOworCQlheDI1X2ZpbGxpbl9jYl9mcm9tX2RldihheDI1LCBheDI1X2Rldik7CisJCXJldHVybjsKKwl9CiAKLQkJaWYgKGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfQVhERUZNT0RFXSkgewotCQkJYXgyNS0+bW9kdWx1cyA9IEFYMjVfRU1PRFVMVVM7Ci0JCQlheDI1LT53aW5kb3cgID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19FV0lORE9XXTsKLQkJfSBlbHNlIHsKLQkJCWF4MjUtPm1vZHVsdXMgPSBBWDI1X01PRFVMVVM7Ci0JCQlheDI1LT53aW5kb3cgID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19XSU5ET1ddOwotCQl9CisJLyoKKwkgKiBObyBkZXZpY2UsIHVzZSBrZXJuZWwgLyBBWC4yNSBzcGVjIGRlZmF1bHQgdmFsdWVzCisJICovCisJYXgyNS0+cnR0ICAgICA9IG1zZWNzX3RvX2ppZmZpZXMoQVgyNV9ERUZfVDEpIC8gMjsKKwlheDI1LT50MSAgICAgID0gbXNlY3NfdG9famlmZmllcyhBWDI1X0RFRl9UMSk7CisJYXgyNS0+dDIgICAgICA9IG1zZWNzX3RvX2ppZmZpZXMoQVgyNV9ERUZfVDIpOworCWF4MjUtPnQzICAgICAgPSBtc2Vjc190b19qaWZmaWVzKEFYMjVfREVGX1QzKTsKKwlheDI1LT5uMiAgICAgID0gQVgyNV9ERUZfTjI7CisJYXgyNS0+cGFjbGVuICA9IEFYMjVfREVGX1BBQ0xFTjsKKwlheDI1LT5pZGxlICAgID0gbXNlY3NfdG9famlmZmllcyhBWDI1X0RFRl9JRExFKTsKKwlheDI1LT5iYWNrb2ZmID0gQVgyNV9ERUZfQkFDS09GRjsKKworCWlmIChBWDI1X0RFRl9BWERFRk1PREUpIHsKKwkJYXgyNS0+bW9kdWx1cyA9IEFYMjVfRU1PRFVMVVM7CisJCWF4MjUtPndpbmRvdyAgPSBBWDI1X0RFRl9FV0lORE9XOwogCX0gZWxzZSB7Ci0JCWF4MjUtPnJ0dCAgICAgPSBBWDI1X0RFRl9UMSAvIDI7Ci0JCWF4MjUtPnQxICAgICAgPSBBWDI1X0RFRl9UMTsKLQkJYXgyNS0+dDIgICAgICA9IEFYMjVfREVGX1QyOwotCQlheDI1LT50MyAgICAgID0gQVgyNV9ERUZfVDM7Ci0JCWF4MjUtPm4yICAgICAgPSBBWDI1X0RFRl9OMjsKLQkJYXgyNS0+cGFjbGVuICA9IEFYMjVfREVGX1BBQ0xFTjsKLQkJYXgyNS0+aWRsZSAgICA9IEFYMjVfREVGX0lETEU7Ci0JCWF4MjUtPmJhY2tvZmYgPSBBWDI1X0RFRl9CQUNLT0ZGOwotCi0JCWlmIChBWDI1X0RFRl9BWERFRk1PREUpIHsKLQkJCWF4MjUtPm1vZHVsdXMgPSBBWDI1X0VNT0RVTFVTOwotCQkJYXgyNS0+d2luZG93ICA9IEFYMjVfREVGX0VXSU5ET1c7Ci0JCX0gZWxzZSB7Ci0JCQlheDI1LT5tb2R1bHVzID0gQVgyNV9NT0RVTFVTOwotCQkJYXgyNS0+d2luZG93ICA9IEFYMjVfREVGX1dJTkRPVzsKLQkJfQorCQlheDI1LT5tb2R1bHVzID0gQVgyNV9NT0RVTFVTOworCQlheDI1LT53aW5kb3cgID0gQVgyNV9ERUZfV0lORE9XOwogCX0KIH0KIApAQCAtMTk3OSwyNCArMTk5MCw2IEBACiAJLm5vdGlmaWVyX2NhbGwgPWF4MjVfZGV2aWNlX2V2ZW50LAogfTsKIAotRVhQT1JUX1NZTUJPTChheDI1X2hhcmRfaGVhZGVyKTsKLUVYUE9SVF9TWU1CT0woYXgyNV9yZWJ1aWxkX2hlYWRlcik7Ci1FWFBPUlRfU1lNQk9MKGF4MjVfZmluZGJ5dWlkKTsKLUVYUE9SVF9TWU1CT0woYXgyNV9maW5kX2NiKTsKLUVYUE9SVF9TWU1CT0woYXgyNV9saW5rZmFpbF9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGF4MjVfbGlua2ZhaWxfcmVsZWFzZSk7Ci1FWFBPUlRfU1lNQk9MKGF4MjVfbGlzdGVuX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woYXgyNV9saXN0ZW5fcmVsZWFzZSk7Ci1FWFBPUlRfU1lNQk9MKGF4MjVfcHJvdG9jb2xfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChheDI1X3Byb3RvY29sX3JlbGVhc2UpOwotRVhQT1JUX1NZTUJPTChheDI1X3NlbmRfZnJhbWUpOwotRVhQT1JUX1NZTUJPTChheDI1X3VpZF9wb2xpY3kpOwotRVhQT1JUX1NZTUJPTChheDI1Y21wKTsKLUVYUE9SVF9TWU1CT0woYXgyYXNjKTsKLUVYUE9SVF9TWU1CT0woYXNjMmF4KTsKLUVYUE9SVF9TWU1CT0wobnVsbF9heDI1X2FkZHJlc3MpOwotRVhQT1JUX1NZTUJPTChheDI1X2Rpc3BsYXlfdGltZXIpOwotCiBzdGF0aWMgaW50IF9faW5pdCBheDI1X2luaXQodm9pZCkKIHsKIAlpbnQgcmMgPSBwcm90b19yZWdpc3RlcigmYXgyNV9wcm90bywgMCk7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2FkZHIuYyBiL25ldC9heDI1L2F4MjVfYWRkci5jCmluZGV4IDAxNjRhMTUuLjVmMDg5NmEgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfYWRkci5jCisrKyBiL25ldC9heDI1L2F4MjVfYWRkci5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0zMyw2ICszNCw4IEBACiAgKi8KIGF4MjVfYWRkcmVzcyBudWxsX2F4MjVfYWRkcmVzcyA9IHt7MHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHgwMH19OwogCitFWFBPUlRfU1lNQk9MKG51bGxfYXgyNV9hZGRyZXNzKTsKKwogLyoKICAqCWF4MjUgLT4gYXNjaWkgY29udmVyc2lvbgogICovCkBAIC02NCw2ICs2Nyw4IEBACiAKIH0KIAorRVhQT1JUX1NZTUJPTChheDJhc2MpOworCiAvKgogICoJYXNjaWkgLT4gYXgyNSBjb252ZXJzaW9uCiAgKi8KQEAgLTk3LDYgKzEwMiw4IEBACiAJYWRkci0+YXgyNV9jYWxsWzZdICY9IDB4MUU7CiB9CiAKK0VYUE9SVF9TWU1CT0woYXNjMmF4KTsKKwogLyoKICAqCUNvbXBhcmUgdHdvIGF4LjI1IGFkZHJlc3NlcwogICovCkBAIC0xMTYsNiArMTIzLDggQEAKICAJcmV0dXJuIDI7CQkJLyogUGFydGlhbCBtYXRjaCAqLwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVjbXApOworCiAvKgogICoJQ29tcGFyZSB0d28gQVguMjUgZGlnaXBlYXRlciBwYXRocy4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9kc190aW1lci5jIGIvbmV0L2F4MjUvYXgyNV9kc190aW1lci5jCmluZGV4IDA2MTA4M2UuLjU5NjE0NTkgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfZHNfdGltZXIuYworKysgYi9uZXQvYXgyNS9heDI1X2RzX3RpbWVyLmMKQEAgLTYxLDcgKzYxLDggQEAKIAkJcmV0dXJuOwogCiAJZGVsX3RpbWVyKCZheDI1X2Rldi0+ZGFtYS5zbGF2ZV90aW1lcik7Ci0JYXgyNV9kZXYtPmRhbWEuc2xhdmVfdGltZW91dCA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfRFNfVElNRU9VVF0gLyAxMDsKKwlheDI1X2Rldi0+ZGFtYS5zbGF2ZV90aW1lb3V0ID0KKwkJbXNlY3NfdG9famlmZmllcyhheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX0RTX1RJTUVPVVRdKSAvIDEwOwogCWF4MjVfZHNfYWRkX3RpbWVyKGF4MjVfZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9pZmFjZS5jIGIvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCmluZGV4IGQ2OGFmZjEuLjNiYjE1MjcgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfaWZhY2UuYworKysgYi9uZXQvYXgyNS9heDI1X2lmYWNlLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtNzQsNiArNzUsOCBAQAogCXJldHVybiAxOwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVfcHJvdG9jb2xfcmVnaXN0ZXIpOworCiB2b2lkIGF4MjVfcHJvdG9jb2xfcmVsZWFzZSh1bnNpZ25lZCBpbnQgcGlkKQogewogCXN0cnVjdCBwcm90b2NvbF9zdHJ1Y3QgKnMsICpwcm90b2NvbDsKQEAgLTEwNiw2ICsxMDksOCBAQAogCXdyaXRlX3VubG9jaygmcHJvdG9jb2xfbGlzdF9sb2NrKTsKIH0KIAorRVhQT1JUX1NZTUJPTChheDI1X3Byb3RvY29sX3JlbGVhc2UpOworCiBpbnQgYXgyNV9saW5rZmFpbF9yZWdpc3Rlcih2b2lkICgqZnVuYykoYXgyNV9jYiAqLCBpbnQpKQogewogCXN0cnVjdCBsaW5rZmFpbF9zdHJ1Y3QgKmxpbmtmYWlsOwpAQCAtMTIzLDYgKzEyOCw4IEBACiAJcmV0dXJuIDE7CiB9CiAKK0VYUE9SVF9TWU1CT0woYXgyNV9saW5rZmFpbF9yZWdpc3Rlcik7CisKIHZvaWQgYXgyNV9saW5rZmFpbF9yZWxlYXNlKHZvaWQgKCpmdW5jKShheDI1X2NiICosIGludCkpCiB7CiAJc3RydWN0IGxpbmtmYWlsX3N0cnVjdCAqcywgKmxpbmtmYWlsOwpAQCAtMTU1LDYgKzE2Miw4IEBACiAJc3Bpbl91bmxvY2tfYmgoJmxpbmtmYWlsX2xvY2spOwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVfbGlua2ZhaWxfcmVsZWFzZSk7CisKIGludCBheDI1X2xpc3Rlbl9yZWdpc3RlcihheDI1X2FkZHJlc3MgKmNhbGxzaWduLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBsaXN0ZW5fc3RydWN0ICpsaXN0ZW47CkBAIC0xNzYsNiArMTg1LDggQEAKIAlyZXR1cm4gMTsKIH0KIAorRVhQT1JUX1NZTUJPTChheDI1X2xpc3Rlbl9yZWdpc3Rlcik7CisKIHZvaWQgYXgyNV9saXN0ZW5fcmVsZWFzZShheDI1X2FkZHJlc3MgKmNhbGxzaWduLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBsaXN0ZW5fc3RydWN0ICpzLCAqbGlzdGVuOwpAQCAtMjA4LDYgKzIxOSw4IEBACiAJc3Bpbl91bmxvY2tfYmgoJmxpc3Rlbl9sb2NrKTsKIH0KIAorRVhQT1JUX1NZTUJPTChheDI1X2xpc3Rlbl9yZWxlYXNlKTsKKwogaW50ICgqYXgyNV9wcm90b2NvbF9mdW5jdGlvbih1bnNpZ25lZCBpbnQgcGlkKSkoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKQogewogCWludCAoKnJlcykoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKSA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2lwLmMgYi9uZXQvYXgyNS9heDI1X2lwLmMKaW5kZXggZDY0M2RhYy4uYTBiNTM0ZiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9pcC5jCisrKyBiL25ldC9heDI1L2F4MjVfaXAuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjIxLDMgKzIyMiw1IEBACiAKICNlbmRpZgogCitFWFBPUlRfU1lNQk9MKGF4MjVfaGFyZF9oZWFkZXIpOworRVhQT1JUX1NZTUJPTChheDI1X3JlYnVpbGRfaGVhZGVyKTsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfb3V0LmMgYi9uZXQvYXgyNS9heDI1X291dC5jCmluZGV4IDVmYzA0OGQuLjVkOTk4NTIgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfb3V0LmMKKysrIGIvbmV0L2F4MjUvYXgyNV9vdXQuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMTA0LDYgKzEwNSw4IEBACiAJcmV0dXJuIGF4MjU7CQkJLyogV2UgaGFkIHRvIGNyZWF0ZSBpdCAqLwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVfc2VuZF9mcmFtZSk7CisKIC8qCiAgKglBbGwgb3V0Z29pbmcgQVguMjUgSSBmcmFtZXMgcGFzcyB2aWEgdGhpcyByb3V0aW5lLiBUaGVyZWZvcmUgdGhpcyBpcwogICoJd2hlcmUgdGhlIGZyYWdtZW50YXRpb24gb2YgZnJhbWVzIHRha2VzIHBsYWNlLiBJZiBmcmFnbWVudCBpcyBzZXQgdG8KZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfcm91dGUuYyBiL25ldC9heDI1L2F4MjVfcm91dGUuYwppbmRleCBmMDRmODYzLi41YWM5ODI1IDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X3JvdXRlLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9yb3V0ZS5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIC8qCiAgKglGaW5kIEFYLjI1IHJvdXRlCiAgKgotICoJT25seSByb3V0ZXMgd2l0aCBhIHJlZmVybmNlIHJvdXQgb2YgemVybyBjYW4gYmUgZGVzdHJveWVkLgorICoJT25seSByb3V0ZXMgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZiB6ZXJvIGNhbiBiZSBkZXN0cm95ZWQuCiAgKi8KIHN0YXRpYyBheDI1X3JvdXRlICpheDI1X2dldF9yb3V0ZShheDI1X2FkZHJlc3MgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X3RpbWVyLmMgYi9uZXQvYXgyNS9heDI1X3RpbWVyLmMKaW5kZXggN2E2YjUwYS4uZWMyNTQwNSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV90aW1lci5jCisrKyBiL25ldC9heDI1L2F4MjVfdGltZXIuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xMzcsNiArMTM4LDggQEAKIAlyZXR1cm4gdGltZXItPmV4cGlyZXMgLSBqaWZmaWVzOwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVfZGlzcGxheV90aW1lcik7CisKIHN0YXRpYyB2b2lkIGF4MjVfaGVhcnRiZWF0X2V4cGlyeSh1bnNpZ25lZCBsb25nIHBhcmFtKQogewogCWludCBwcm90byA9IEFYMjVfUFJPVE9fU1REX1NJTVBMRVg7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X3VpZC5jIGIvbmV0L2F4MjUvYXgyNV91aWQuYwppbmRleCBiOGI1ODU0Li41ZTlhODFlIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X3VpZC5jCisrKyBiL25ldC9heDI1L2F4MjVfdWlkLmMKQEAgLTQ5LDYgKzQ5LDggQEAKIAogaW50IGF4MjVfdWlkX3BvbGljeSA9IDA7CiAKK0VYUE9SVF9TWU1CT0woYXgyNV91aWRfcG9saWN5KTsKKwogYXgyNV91aWRfYXNzb2MgKmF4MjVfZmluZGJ5dWlkKHVpZF90IHVpZCkKIHsKIAlheDI1X3VpZF9hc3NvYyAqYXgyNV91aWQsICpyZXMgPSBOVUxMOwpAQCAtNjcsNiArNjksOCBAQAogCXJldHVybiByZXM7CiB9CiAKK0VYUE9SVF9TWU1CT0woYXgyNV9maW5kYnl1aWQpOworCiBpbnQgYXgyNV91aWRfaW9jdGwoaW50IGNtZCwgc3RydWN0IHNvY2thZGRyX2F4MjUgKnNheCkKIHsKIAlheDI1X3VpZF9hc3NvYyAqYXgyNV91aWQ7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9zeXNjdGxfbmV0X2F4MjUuYyBiL25ldC9heDI1L3N5c2N0bF9uZXRfYXgyNS5jCmluZGV4IDg5NGEyMjUuLmJkYjY0YzMgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L3N5c2N0bF9uZXRfYXgyNS5jCisrKyBiL25ldC9heDI1L3N5c2N0bF9uZXRfYXgyNS5jCkBAIC0xOCwxNCArMTgsMTQgQEAKIHN0YXRpYyBpbnQgbWluX2Nvbm1vZGVbMV0sCQltYXhfY29ubW9kZVtdID0gezJ9Owogc3RhdGljIGludCBtaW5fd2luZG93W10gPSB7MX0sCQltYXhfd2luZG93W10gPSB7N307CiBzdGF0aWMgaW50IG1pbl9ld2luZG93W10gPSB7MX0sCQltYXhfZXdpbmRvd1tdID0gezYzfTsKLXN0YXRpYyBpbnQgbWluX3QxW10gPSB7MX0sCQltYXhfdDFbXSA9IHszMCAqIEhafTsKLXN0YXRpYyBpbnQgbWluX3QyW10gPSB7MX0sCQltYXhfdDJbXSA9IHsyMCAqIEhafTsKLXN0YXRpYyBpbnQgbWluX3QzWzFdLCAgIAkJbWF4X3QzW10gPSB7MzYwMCAqIEhafTsKLXN0YXRpYyBpbnQgbWluX2lkbGVbMV0sICAJCW1heF9pZGxlW10gPSB7NjU1MzUgKiBIWn07CitzdGF0aWMgaW50IG1pbl90MVtdID0gezF9LAkJbWF4X3QxW10gPSB7MzAwMDB9Oworc3RhdGljIGludCBtaW5fdDJbXSA9IHsxfSwJCW1heF90MltdID0gezIwMDAwfTsKK3N0YXRpYyBpbnQgbWluX3QzWzFdLAkJCW1heF90M1tdID0gezM2MDAwMDB9Oworc3RhdGljIGludCBtaW5faWRsZVsxXSwJCQltYXhfaWRsZVtdID0gezY1NTM1MDAwfTsKIHN0YXRpYyBpbnQgbWluX24yW10gPSB7MX0sCQltYXhfbjJbXSA9IHszMX07CiBzdGF0aWMgaW50IG1pbl9wYWNsZW5bXSA9IHsxfSwJCW1heF9wYWNsZW5bXSA9IHs1MTJ9Owogc3RhdGljIGludCBtaW5fcHJvdG9bMV0sCQltYXhfcHJvdG9bXSA9IHsgQVgyNV9QUk9UT19NQVggfTsKLXN0YXRpYyBpbnQgbWluX2RzX3RpbWVvdXRbMV0sICAgCW1heF9kc190aW1lb3V0W10gPSB7NjU1MzUgKiBIWn07CitzdGF0aWMgaW50IG1pbl9kc190aW1lb3V0WzFdLAkJbWF4X2RzX3RpbWVvdXRbXSA9IHs2NTUzNTAwMH07CiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqYXgyNV90YWJsZV9oZWFkZXI7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IDZiNjEzMjMuLjBjMmQxM2EgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJfQogCiAJaWYgKChlcnIgPSBoY2lfc2VuZF9zY28oY29ubi0+aGNvbiwgc2tiKSkgPCAwKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CiAKIAlyZXR1cm4gY291bnQ7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnIuYyBiL25ldC9icmlkZ2UvYnIuYwppbmRleCAyMmQ4MDZjLi4xMmRhMjFhIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyLmMKKysrIGIvbmV0L2JyaWRnZS9ici5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBicl9kZWluaXQodm9pZCkKIHsKLQlsbGNfc2FwX2Nsb3NlKGJyX3N0cF9zYXApOworCXJjdV9hc3NpZ25fcG9pbnRlcihicl9zdHBfc2FwLT5yY3ZfZnVuYywgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCWJyX25ldGZpbHRlcl9maW5pKCk7CkBAIC02Nyw2ICs2Nyw3IEBACiAKIAlzeW5jaHJvbml6ZV9uZXQoKTsKIAorCWxsY19zYXBfcHV0KGJyX3N0cF9zYXApOwogCWJyX2ZkYl9nZXRfaG9vayA9IE5VTEw7CiAJYnJfZmRiX3B1dF9ob29rID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMgYi9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYwppbmRleCAyZDI0ZmI0Li41NmYzYWE0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg+CiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgogCkBAIC0yOSwxMCArMzAsMTUgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwYWNrZXRfbGVuZ3RoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+bGVuIC0gKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpID8gVkxBTl9ITEVOIDogMCk7Cit9CisKIGludCBicl9kZXZfcXVldWVfcHVzaF94bWl0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyogZHJvcCBtdHUgb3ZlcnNpemVkIHBhY2tldHMgZXhjZXB0IHRzbyAqLwotCWlmIChza2ItPmxlbiA+IHNrYi0+ZGV2LT5tdHUgJiYgIXNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUpCisJaWYgKHBhY2tldF9sZW5ndGgoc2tiKSA+IHNrYi0+ZGV2LT5tdHUgJiYgIXNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUpCiAJCWtmcmVlX3NrYihza2IpOwogCWVsc2UgewogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggNTllZWY0Mi4uZjVkNDdiZiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtMzAwLDM0ICszMDAsMjIgQEAKIAlydG5sX2xvY2soKTsKIAlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkgewogCQlyZXQgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnIxOworCQlpZiAocmV0IDwgMCkgeworCQkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJCWdvdG8gb3V0OworCQl9CiAJfQogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJaWYgKHJldCkKLQkJZ290byBlcnIyOwotCi0JLyogbmV0d29yayBkZXZpY2Uga29iamVjdCBpcyBub3Qgc2V0dXAgdW50aWwKLQkgKiBhZnRlciBydG5sX3VubG9jayBkb2VzIGl0J3MgaG90cGx1ZyBtYWdpYy4KLQkgKiBzbyBob2xkIHJlZmVyZW5jZSB0byBhdm9pZCByYWNlLgotCSAqLwotCWRldl9ob2xkKGRldik7Ci0JcnRubF91bmxvY2soKTsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBicl9zeXNmc19hZGRicihkZXYpOwotCWRldl9wdXQoZGV2KTsKLQotCWlmIChyZXQpIAotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyZXQpCisJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAgb3V0OgotCXJldHVybiByZXQ7Ci0KLSBlcnIyOgotCWZyZWVfbmV0ZGV2KGRldik7Ci0gZXJyMToKIAlydG5sX3VubG9jaygpOwotCWdvdG8gb3V0OworCXJldHVybiByZXQ7CiB9CiAKIGludCBicl9kZWxfYnJpZGdlKGNvbnN0IGNoYXIgKm5hbWUpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggYjc3NjY1Ni4uYmZhNGQ4YyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtNjYsNiArNjYsNyBAQAogCX0KIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkZXN0KSkgeworCQlici0+c3RhdGlzdGljcy5tdWx0aWNhc3QrKzsKIAkJYnJfZmxvb2RfZm9yd2FyZChiciwgc2tiLCAhcGFzc2VkdXApOwogCQlpZiAoIXBhc3NlZHVwKQogCQkJYnJfcGFzc19mcmFtZV91cChiciwgc2tiKTsKQEAgLTEyNSw5ICsxMjYsNiBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkZXN0ID0gZXRoX2hkcihza2IpLT5oX2Rlc3Q7CiAKLQlpZiAocC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpCi0JCWdvdG8gZXJyOwotCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UpKQogCQlnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggZjI5NDUwYi4uM2RhOTI2NCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC03NjUsNiArNzY1LDE1IEBACiAJcmV0dXJuIE5GX1NUT0xFTjsKIH0KIAorc3RhdGljIGludCBicl9uZl9kZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSAmJgorCSAgICBza2ItPmxlbiA+IHNrYi0+ZGV2LT5tdHUgJiYKKwkgICAgIShza2Jfc2hpbmZvKHNrYiktPnVmb19zaXplIHx8IHNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUpKQorCQlyZXR1cm4gaXBfZnJhZ21lbnQoc2tiLCBicl9kZXZfcXVldWVfcHVzaF94bWl0KTsKKwllbHNlCisJCXJldHVybiBicl9kZXZfcXVldWVfcHVzaF94bWl0KHNrYik7Cit9CiAKIC8qIFBGX0JSSURHRS9QT1NUX1JPVVRJTkcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3Bvc3Rfcm91dGluZyh1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IHNrX2J1ZmYgKipwc2tiLApAQCAtODI0LDcgKzgzMyw3IEBACiAJCXJlYWxvdXRkZXYgPSBuZl9icmlkZ2UtPm5ldG91dGRldjsKICNlbmRpZgogCU5GX0hPT0socGYsIE5GX0lQX1BPU1RfUk9VVElORywgc2tiLCBOVUxMLCByZWFsb3V0ZGV2LAotCQlicl9kZXZfcXVldWVfcHVzaF94bWl0KTsKKwkJYnJfbmZfZGV2X3F1ZXVlX3htaXQpOwogCiAJcmV0dXJuIE5GX1NUT0xFTjsKIApAQCAtODY5LDcgKzg3OCw3IEBACiAKIAlpZiAoKG91dC0+aGFyZF9zdGFydF94bWl0ID09IGJyX2Rldl94bWl0ICYmCiAJICAgICBva2ZuICE9IGJyX25mX2ZvcndhcmRfZmluaXNoICYmCi0JICAgICBva2ZuICE9IGJyX25mX2xvY2FsX291dF9maW5pc2ggJiYgb2tmbiAhPSBicl9kZXZfcXVldWVfcHVzaF94bWl0KQorCSAgICAgb2tmbiAhPSBicl9uZl9sb2NhbF9vdXRfZmluaXNoICYmIG9rZm4gIT0gYnJfbmZfZGV2X3F1ZXVlX3htaXQpCiAjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCiAJICAgIHx8ICgob3V0LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKSAmJgogCQlWTEFOX0RFVl9JTkZPKG91dCktPnJlYWxfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPT0gYnJfZGV2X3htaXQpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKaW5kZXggZDE1OWM5Mi4uNDY2ZWQzNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAKIAlpZiAoaW5mby0+Yml0bWFzayAmIEVCVF9MT0dfTkZMT0cpCiAJCW5mX2xvZ19wYWNrZXQoUEZfQlJJREdFLCBob29rbnIsIHNrYiwgaW4sIG91dCwgJmxpLAotCQkgICAgICAgICAgICAgIGluZm8tPnByZWZpeCk7CisJCSAgICAgICAgICAgICAgIiVzIiwgaW5mby0+cHJlZml4KTsKIAllbHNlCiAJCWVidF9sb2dfcGFja2V0KFBGX0JSSURHRSwgaG9va25yLCBza2IsIGluLCBvdXQsICZsaSwKIAkJICAgICAgICAgICAgICAgaW5mby0+cHJlZml4KTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDAxZWFlOTcuLjNhMTNlZDYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtODI0LDE0ICs4MjQsMTQgQEAKIAlpZiAodWRjX2NudCkgewogCQkvKiB0aGlzIHdpbGwgZ2V0IGZyZWUnZCBpbiBkb19yZXBsYWNlKCkvZWJ0X3JlZ2lzdGVyX3RhYmxlKCkKIAkJICAgaWYgYW4gZXJyb3Igb2NjdXJzICovCi0JCW5ld2luZm8tPmNoYWluc3RhY2sgPSAoc3RydWN0IGVidF9jaGFpbnN0YWNrICoqKQotCQkgICB2bWFsbG9jKChoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpIAotCQkJCSAgIAkJKiBzaXplb2Yoc3RydWN0IGVidF9jaGFpbnN0YWNrKSk7CisJCW5ld2luZm8tPmNoYWluc3RhY2sgPQorCQkJdm1hbGxvYygoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKQorCQkJCSAgIAkqIHNpemVvZigqKG5ld2luZm8tPmNoYWluc3RhY2spKSk7CiAJCWlmICghbmV3aW5mby0+Y2hhaW5zdGFjaykKIAkJCXJldHVybiAtRU5PTUVNOwotCQlmb3JfZWFjaF9jcHUoaSkgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQkJbmV3aW5mby0+Y2hhaW5zdGFja1tpXSA9Ci0JCQkgICB2bWFsbG9jKHVkY19jbnQgKiBzaXplb2Yoc3RydWN0IGVidF9jaGFpbnN0YWNrKSk7CisJCQkgIHZtYWxsb2ModWRjX2NudCAqIHNpemVvZigqKG5ld2luZm8tPmNoYWluc3RhY2tbMF0pKSk7CiAJCQlpZiAoIW5ld2luZm8tPmNoYWluc3RhY2tbaV0pIHsKIAkJCQl3aGlsZSAoaSkKIAkJCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1stLWldKTsKQEAgLTg0MSw4ICs4NDEsNyBAQAogCQkJfQogCQl9CiAKLQkJY2xfcyA9IChzdHJ1Y3QgZWJ0X2NsX3N0YWNrICopCi0JCSAgIHZtYWxsb2ModWRjX2NudCAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NsX3N0YWNrKSk7CisJCWNsX3MgPSB2bWFsbG9jKHVkY19jbnQgKiBzaXplb2YoKmNsX3MpKTsKIAkJaWYgKCFjbF9zKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWkgPSAwOyAvKiB0aGUgaSd0aCB1ZGMgKi8KQEAgLTkwMSw3ICs5MDAsNyBAQAogCSAgICAgICBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSAqIG5lbnRyaWVzKTsKIAogCS8qIGFkZCBvdGhlciBjb3VudGVycyB0byB0aG9zZSBvZiBjcHUgMCAqLwotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQljb3VudGVyX2Jhc2UgPSBDT1VOVEVSX0JBU0Uob2xkY291bnRlcnMsIG5lbnRyaWVzLCBjcHUpOwpAQCAtOTQ0LDggKzk0Myw3IEBACiAKIAljb3VudGVyc2l6ZSA9IENPVU5URVJfT0ZGU0VUKHRtcC5uZW50cmllcykgKiAKIAkJCQkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSk7Ci0JbmV3aW5mbyA9IChzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKikKLQkgICB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pICsgY291bnRlcnNpemUpOworCW5ld2luZm8gPSB2bWFsbG9jKHNpemVvZigqbmV3aW5mbykgKyBjb3VudGVyc2l6ZSk7CiAJaWYgKCFuZXdpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtOTY3LDggKzk2NSw3IEBACiAJLyogdGhlIHVzZXIgd2FudHMgY291bnRlcnMgYmFjawogCSAgIHRoZSBjaGVjayBvbiB0aGUgc2l6ZSBpcyBkb25lIGxhdGVyLCB3aGVuIHdlIGhhdmUgdGhlIGxvY2sgKi8KIAlpZiAodG1wLm51bV9jb3VudGVycykgewotCQljb3VudGVyc3RtcCA9IChzdHJ1Y3QgZWJ0X2NvdW50ZXIgKikKLQkJICAgdm1hbGxvYyh0bXAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpOworCQljb3VudGVyc3RtcCA9IHZtYWxsb2ModG1wLm51bV9jb3VudGVycyAqIHNpemVvZigqY291bnRlcnN0bXApKTsKIAkJaWYgKCFjb3VudGVyc3RtcCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZnJlZV9lbnRyaWVzOwpAQCAtMTAzNiw3ICsxMDMzLDcgQEAKIAogCXZmcmVlKHRhYmxlLT5lbnRyaWVzKTsKIAlpZiAodGFibGUtPmNoYWluc3RhY2spIHsKLQkJZm9yX2VhY2hfY3B1KGkpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQkJdmZyZWUodGFibGUtPmNoYWluc3RhY2tbaV0pOwogCQl2ZnJlZSh0YWJsZS0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTA1NCw3ICsxMDUxLDcgQEAKIAl2ZnJlZShjb3VudGVyc3RtcCk7CiAJLyogY2FuIGJlIGluaXRpYWxpemVkIGluIHRyYW5zbGF0ZV90YWJsZSgpICovCiAJaWYgKG5ld2luZm8tPmNoYWluc3RhY2spIHsKLQkJZm9yX2VhY2hfY3B1KGkpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1tpXSk7CiAJCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2spOwogCX0KQEAgLTExNDgsOCArMTE0NSw3IEBACiAKIAljb3VudGVyc2l6ZSA9IENPVU5URVJfT0ZGU0VUKHRhYmxlLT50YWJsZS0+bmVudHJpZXMpICoKIAkJCQkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSk7Ci0JbmV3aW5mbyA9IChzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKikKLQkgICB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pICsgY291bnRlcnNpemUpOworCW5ld2luZm8gPSB2bWFsbG9jKHNpemVvZigqbmV3aW5mbykgKyBjb3VudGVyc2l6ZSk7CiAJcmV0ID0gLUVOT01FTTsKIAlpZiAoIW5ld2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTIwMSw3ICsxMTk3LDcgQEAKIAltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiBmcmVlX2NoYWluc3RhY2s6CiAJaWYgKG5ld2luZm8tPmNoYWluc3RhY2spIHsKLQkJZm9yX2VhY2hfY3B1KGkpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1tpXSk7CiAJCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2spOwogCX0KQEAgLTEyMjQsNyArMTIyMCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCXZmcmVlKHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzKTsKIAlpZiAodGFibGUtPnByaXZhdGUtPmNoYWluc3RhY2spIHsKLQkJZm9yX2VhY2hfY3B1KGkpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQkJdmZyZWUodGFibGUtPnByaXZhdGUtPmNoYWluc3RhY2tbaV0pOwogCQl2ZnJlZSh0YWJsZS0+cHJpdmF0ZS0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTI0Nyw4ICsxMjQzLDcgQEAKIAlpZiAoaGxwLm51bV9jb3VudGVycyA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICggISh0bXAgPSAoc3RydWN0IGVidF9jb3VudGVyICopCi0JICAgdm1hbGxvYyhobHAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKSApeworCWlmICghKHRtcCA9IHZtYWxsb2MoaGxwLm51bV9jb3VudGVycyAqIHNpemVvZigqdG1wKSkpKSB7CiAJCU1FTVBSSU5UKCJVcGRhdGVfY291bnRlcnMgJiYgbm9tZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xMzc3LDggKzEzNzIsNyBAQAogCQkJQlVHUFJJTlQoIk51bV9jb3VudGVycyB3cm9uZ1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQljb3VudGVyc3RtcCA9IChzdHJ1Y3QgZWJ0X2NvdW50ZXIgKikKLQkJICAgdm1hbGxvYyhuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKTsKKwkJY291bnRlcnN0bXAgPSB2bWFsbG9jKG5lbnRyaWVzICogc2l6ZW9mKCpjb3VudGVyc3RtcCkpOwogCQlpZiAoIWNvdW50ZXJzdG1wKSB7CiAJCQlNRU1QUklOVCgiQ291bGRuJ3QgY29weSBjb3VudGVycywgb3V0IG9mIG1lbW9yeVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuYwppbmRleCA4ZmQzN2NkLi5kNWQ2OWZhIDEwMDY0NAotLS0gYS9uZXQvY29tcGF0LmMKKysrIGIvbmV0L2NvbXBhdC5jCkBAIC00NzYsOCArNDc2LDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAKLQkvKiBTT19TRVRfUkVQTEFDRSBzZWVtcyB0byBiZSB0aGUgc2FtZSBpbiBhbGwgbGV2ZWxzICovCi0JaWYgKG9wdG5hbWUgPT0gSVBUX1NPX1NFVF9SRVBMQUNFKQorCWlmIChsZXZlbCA9PSBTT0xfSVBWNiAmJiBvcHRuYW1lID09IElQVF9TT19TRVRfUkVQTEFDRSkKIAkJcmV0dXJuIGRvX25ldGZpbHRlcl9yZXBsYWNlKGZkLCBsZXZlbCwgb3B0bmFtZSwKIAkJCQkJICAgIG9wdHZhbCwgb3B0bGVuKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhM2FiMTFmLi40ZmJhNTQ5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAgKiAgICAgICAgICAgICBzdXJlIHdoaWNoIHNob3VsZCBnbyBmaXJzdCwgYnV0IEkgYmV0IGl0IHdvbid0IG1ha2UgbXVjaAogICogICAgICAgICAgICAgZGlmZmVyZW5jZSBpZiB3ZSBhcmUgcnVubmluZyBWTEFOcy4gIFRoZSBnb29kIG5ld3MgaXMgdGhhdAogICogICAgICAgICAgICAgdGhpcyBwcm90b2NvbCB3b24ndCBiZSBpbiB0aGUgbGlzdCB1bmxlc3MgY29tcGlsZWQgaW4sIHNvCi0gKiAgICAgICAgICAgICB0aGUgYXZlcmFnZSB1c2VyICh3L291dCBWTEFOcykgd2lsbCBub3QgYmUgYWR2ZXJzbHkgYWZmZWN0ZWQuCisgKiAgICAgICAgICAgICB0aGUgYXZlcmFnZSB1c2VyICh3L291dCBWTEFOcykgd2lsbCBub3QgYmUgYWR2ZXJzZWx5IGFmZmVjdGVkLgogICogICAgICAgICAgICAgLS1CTEcKICAqCiAgKgkJMDgwMAlJUApAQCAtMTQ5LDcgKzE0OSw3IEBACiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBwdHlwZV9hbGw7CQkvKiBUYXBzICovCiAKIC8qCi0gKiBUaGUgQGRldl9iYXNlIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IEBkZXZfYmFzZV9sb2NrIGFuZCB0aGUgcnRsbgorICogVGhlIEBkZXZfYmFzZSBsaXN0IGlzIHByb3RlY3RlZCBieSBAZGV2X2Jhc2VfbG9jayBhbmQgdGhlIHJ0bmwKICAqIHNlbWFwaG9yZS4KICAqCiAgKiBQdXJlIHJlYWRlcnMgaG9sZCBkZXZfYmFzZV9sb2NrIGZvciByZWFkaW5nLgpAQCAtMTkzLDcgKzE5Myw3IEBACiAgKglPdXIgbm90aWZpZXIgbGlzdAogICovCiAKLXN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKG5ldGRldl9jaGFpbik7CitzdGF0aWMgUkFXX05PVElGSUVSX0hFQUQobmV0ZGV2X2NoYWluKTsKIAogLyoKICAqCURldmljZSBkcml2ZXJzIGNhbGwgb3VyIHJvdXRpbmVzIHRvIHF1ZXVlIHBhY2tldHMgaGVyZS4gV2UgZW1wdHkgdGhlCkBAIC02NDEsMTAgKzY0MSwxMiBAQAogICoJQG5hbWU6IG5hbWUgZm9ybWF0IHN0cmluZwogICoKICAqCVBhc3NlZCBhIGZvcm1hdCBzdHJpbmcgLSBlZyAibHQlZCIgaXQgd2lsbCB0cnkgYW5kIGZpbmQgYSBzdWl0YWJsZQotICoJaWQuIE5vdCBlZmZpY2llbnQgZm9yIG1hbnkgZGV2aWNlcywgbm90IGNhbGxlZCBhIGxvdC4gVGhlIGNhbGxlcgotICoJbXVzdCBob2xkIHRoZSBkZXZfYmFzZSBvciBydG5sIGxvY2sgd2hpbGUgYWxsb2NhdGluZyB0aGUgbmFtZSBhbmQKLSAqCWFkZGluZyB0aGUgZGV2aWNlIGluIG9yZGVyIHRvIGF2b2lkIGR1cGxpY2F0ZXMuIFJldHVybnMgdGhlIG51bWJlcgotICoJb2YgdGhlIHVuaXQgYXNzaWduZWQgb3IgYSBuZWdhdGl2ZSBlcnJubyBjb2RlLgorICoJaWQuIEl0IHNjYW5zIGxpc3Qgb2YgZGV2aWNlcyB0byBidWlsZCB1cCBhIGZyZWUgbWFwLCB0aGVuIGNob29zZXMKKyAqCXRoZSBmaXJzdCBlbXB0eSBzbG90LiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgZGV2X2Jhc2Ugb3IgcnRubCBsb2NrCisgKgl3aGlsZSBhbGxvY2F0aW5nIHRoZSBuYW1lIGFuZCBhZGRpbmcgdGhlIGRldmljZSBpbiBvcmRlciB0byBhdm9pZAorICoJZHVwbGljYXRlcy4KKyAqCUxpbWl0ZWQgdG8gYml0c19wZXJfYnl0ZSAqIHBhZ2Ugc2l6ZSBkZXZpY2VzIChpZSAzMksgb24gbW9zdCBwbGF0Zm9ybXMpLgorICoJUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSB1bml0IGFzc2lnbmVkIG9yIGEgbmVnYXRpdmUgZXJybm8gY29kZS4KICAqLwogCiBpbnQgZGV2X2FsbG9jX25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKQEAgLTczNiw3ICs3MzgsNyBAQAogCWlmICghZXJyKSB7CiAJCWhsaXN0X2RlbCgmZGV2LT5uYW1lX2hsaXN0KTsKIAkJaGxpc3RfYWRkX2hlYWQoJmRldi0+bmFtZV9obGlzdCwgZGV2X25hbWVfaGFzaChkZXYtPm5hbWUpKTsKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAorCQlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAogCQkJCU5FVERFVl9DSEFOR0VOQU1FLCBkZXYpOwogCX0KIApAQCAtNzQ0LDE0ICs3NDYsMTQgQEAKIH0KIAogLyoqCi0gKgluZXRkZXZfZmVhdHVyZXNfY2hhbmdlIC0gZGV2aWNlIGNoYW5nZXMgZmF0dXJlcworICoJbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZSAtIGRldmljZSBjaGFuZ2VzIGZlYXR1cmVzCiAgKglAZGV2OiBkZXZpY2UgdG8gY2F1c2Ugbm90aWZpY2F0aW9uCiAgKgogICoJQ2FsbGVkIHRvIGluZGljYXRlIGEgZGV2aWNlIGhhcyBjaGFuZ2VkIGZlYXR1cmVzLgogICovCiB2b2lkIG5ldGRldl9mZWF0dXJlc19jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIE5FVERFVl9GRUFUX0NIQU5HRSwgZGV2KTsKKwlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLCBORVRERVZfRkVBVF9DSEFOR0UsIGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKG5ldGRldl9mZWF0dXJlc19jaGFuZ2UpOwogCkBAIC03NjYsNyArNzY4LDcgQEAKIHZvaWQgbmV0ZGV2X3N0YXRlX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwKKwkJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwKIAkJCQlORVRERVZfQ0hBTkdFLCBkZXYpOwogCQlydG1zZ19pZmluZm8oUlRNX05FV0xJTkssIGRldiwgMCk7CiAJfQpAQCAtODY0LDcgKzg2Niw3IEBACiAJCS8qCiAJCSAqCS4uLiBhbmQgYW5ub3VuY2UgbmV3IGludGVyZmFjZS4KIAkJICovCi0JCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX1VQLCBkZXYpOworCQlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLCBORVRERVZfVVAsIGRldik7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC04ODcsNyArODg5LDcgQEAKIAkgKglUZWxsIHBlb3BsZSB3ZSBhcmUgZ29pbmcgZG93biwgc28gdGhhdCB0aGV5IGNhbgogCSAqCXByZXBhcmUgdG8gZGVhdGgsIHdoZW4gZGV2aWNlIGlzIHN0aWxsIG9wZXJhdGluZy4KIAkgKi8KLQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIE5FVERFVl9HT0lOR19ET1dOLCBkZXYpOworCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIE5FVERFVl9HT0lOR19ET1dOLCBkZXYpOwogCiAJZGV2X2RlYWN0aXZhdGUoZGV2KTsKIApAQCAtOTI0LDcgKzkyNiw3IEBACiAJLyoKIAkgKiBUZWxsIHBlb3BsZSB3ZSBhcmUgZG93bgogCSAqLwotCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX0RPV04sIGRldik7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX0RPV04sIGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk1NSw3ICs5NTcsNyBAQAogCWludCBlcnI7CiAKIAlydG5sX2xvY2soKTsKLQllcnIgPSBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbmV0ZGV2X2NoYWluLCBuYik7CisJZXJyID0gcmF3X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuZXRkZXZfY2hhaW4sIG5iKTsKIAlpZiAoIWVycikgewogCQlmb3IgKGRldiA9IGRldl9iYXNlOyBkZXY7IGRldiA9IGRldi0+bmV4dCkgewogCQkJbmItPm5vdGlmaWVyX2NhbGwobmIsIE5FVERFVl9SRUdJU1RFUiwgZGV2KTsKQEAgLTk4Myw3ICs5ODUsNyBAQAogCWludCBlcnI7CiAKIAlydG5sX2xvY2soKTsKLQllcnIgPSBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuZXRkZXZfY2hhaW4sIG5iKTsKKwllcnIgPSByYXdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmV0ZGV2X2NoYWluLCBuYik7CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTk0LDEyICs5OTYsMTIgQEAKICAqICAgICAgQHY6ICAgcG9pbnRlciBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgogICoKICAqCUNhbGwgYWxsIG5ldHdvcmsgbm90aWZpZXIgYmxvY2tzLiAgUGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlCi0gKglhcmUgYXMgZm9yIGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oKS4KKyAqCWFyZSBhcyBmb3IgcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oKS4KICAqLwogCiBpbnQgY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQogewotCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIHZhbCwgdik7CisJcmV0dXJuIHJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIHZhbCwgdik7CiB9CiAKIC8qIFdoZW4gPiAwIHRoZXJlIGFyZSBjb25zdW1lcnMgb2Ygcnggc2tiIHRpbWUgc3RhbXBzICovCkBAIC0xMDgwLDYgKzEwODIsNzAgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAorCit2b2lkIF9fbmV0aWZfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoX19MSU5LX1NUQVRFX1NDSEVELCAmZGV2LT5zdGF0ZSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHNvZnRuZXRfZGF0YSAqc2Q7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlzZCA9ICZfX2dldF9jcHVfdmFyKHNvZnRuZXRfZGF0YSk7CisJCWRldi0+bmV4dF9zY2hlZCA9IHNkLT5vdXRwdXRfcXVldWU7CisJCXNkLT5vdXRwdXRfcXVldWUgPSBkZXY7CisJCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9UWF9TT0ZUSVJRKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woX19uZXRpZl9zY2hlZHVsZSk7CisKK3ZvaWQgX19uZXRpZl9yeF9zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZGV2X2hvbGQoZGV2KTsKKwlsaXN0X2FkZF90YWlsKCZkZXYtPnBvbGxfbGlzdCwgJl9fZ2V0X2NwdV92YXIoc29mdG5ldF9kYXRhKS5wb2xsX2xpc3QpOworCWlmIChkZXYtPnF1b3RhIDwgMCkKKwkJZGV2LT5xdW90YSArPSBkZXYtPndlaWdodDsKKwllbHNlCisJCWRldi0+cXVvdGEgPSBkZXYtPndlaWdodDsKKwlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9SWF9TT0ZUSVJRKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKF9fbmV0aWZfcnhfc2NoZWR1bGUpOworCit2b2lkIGRldl9rZnJlZV9za2JfYW55KHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKGluX2lycSgpIHx8IGlycXNfZGlzYWJsZWQoKSkKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwllbHNlCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woZGV2X2tmcmVlX3NrYl9hbnkpOworCisKKy8qIEhvdC1wbHVnZ2luZy4gKi8KK3ZvaWQgbmV0aWZfZGV2aWNlX2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoX19MSU5LX1NUQVRFX1BSRVNFTlQsICZkZXYtPnN0YXRlKSAmJgorCSAgICBuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCX0KK30KK0VYUE9SVF9TWU1CT0wobmV0aWZfZGV2aWNlX2RldGFjaCk7CisKK3ZvaWQgbmV0aWZfZGV2aWNlX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX0xJTktfU1RBVEVfUFJFU0VOVCwgJmRldi0+c3RhdGUpICYmCisJICAgIG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisgCQlfX25ldGRldl93YXRjaGRvZ191cChkZXYpOworCX0KK30KK0VYUE9SVF9TWU1CT0wobmV0aWZfZGV2aWNlX2F0dGFjaCk7CisKKwogLyoKICAqIEludmFsaWRhdGUgaGFyZHdhcmUgY2hlY2tzdW0gd2hlbiBwYWNrZXQgaXMgdG8gYmUgbWFuZ2xlZCwgYW5kCiAgKiBjb21wbGV0ZSBjaGVja3N1bSBtYW51YWxseSBvbiBvdXRnb2luZyBwYXRoLgpAQCAtMjEzMiw3ICsyMTk4LDcgQEAKICAqCUBkZXY6IGRldmljZQogICoJQGluYzogbW9kaWZpZXIKICAqCi0gKglBZGQgb3IgcmVtb3ZlIHByb21zaWN1aXR5IGZyb20gYSBkZXZpY2UuIFdoaWxlIHRoZSBjb3VudCBpbiB0aGUgZGV2aWNlCisgKglBZGQgb3IgcmVtb3ZlIHByb21pc2N1aXR5IGZyb20gYSBkZXZpY2UuIFdoaWxlIHRoZSBjb3VudCBpbiB0aGUgZGV2aWNlCiAgKglyZW1haW5zIGFib3ZlIHplcm8gdGhlIGludGVyZmFjZSByZW1haW5zIHByb21pc2N1b3VzLiBPbmNlIGl0IGhpdHMgemVybwogICoJdGhlIGRldmljZSByZXZlcnRzIGJhY2sgdG8gbm9ybWFsIGZpbHRlcmluZyBvcGVyYXRpb24uIEEgbmVnYXRpdmUgaW5jCiAgKgl2YWx1ZSBpcyB1c2VkIHRvIGRyb3AgcHJvbWlzY3VpdHkgb24gdGhlIGRldmljZS4KQEAgLTIyNDQsNyArMjMxMCw3IEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVAgJiYKIAkgICAgKChvbGRfZmxhZ3MgXiBkZXYtPmZsYWdzKSAmfiAoSUZGX1VQIHwgSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkgfAogCQkJCQkgIElGRl9WT0xBVElMRSkpKQotCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCisJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCiAJCQkJTkVUREVWX0NIQU5HRSwgZGV2KTsKIAogCWlmICgoZmxhZ3MgXiBkZXYtPmdmbGFncykgJiBJRkZfUFJPTUlTQykgewpAQCAtMjI4OSw3ICsyMzU1LDcgQEAKIAllbHNlCiAJCWRldi0+bXR1ID0gbmV3X210dTsKIAlpZiAoIWVyciAmJiBkZXYtPmZsYWdzICYgSUZGX1VQKQotCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCisJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCiAJCQkJTkVUREVWX0NIQU5HRU1UVSwgZGV2KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjMwNiw3ICsyMzcyLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZXJyID0gZGV2LT5zZXRfbWFjX2FkZHJlc3MoZGV2LCBzYSk7CiAJaWYgKCFlcnIpCi0JCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwKKwkJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwKIAkJCQlORVRERVZfQ0hBTkdFQUREUiwgZGV2KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjM2Myw3ICsyNDI5LDcgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsCiAJCQkgICAgICAgbWluKHNpemVvZiBpZnItPmlmcl9od2FkZHIuc2FfZGF0YSwgKHNpemVfdCkgZGV2LT5hZGRyX2xlbikpOwotCQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAorCQkJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwKIAkJCQkJICAgIE5FVERFVl9DSEFOR0VBRERSLCBkZXYpOwogCQkJcmV0dXJuIDA7CiAKQEAgLTI2MzQsNyArMjcwMCw4IEBACiAJCQkJLyogSWYgY29tbWFuZCBpcyBgc2V0IGEgcGFyYW1ldGVyJywgb3IKIAkJCQkgKiBgZ2V0IHRoZSBlbmNvZGluZyBwYXJhbWV0ZXJzJywgY2hlY2sgaWYKIAkJCQkgKiB0aGUgdXNlciBoYXMgdGhlIHJpZ2h0IHRvIGRvIGl0ICovCi0JCQkJaWYgKElXX0lTX1NFVChjbWQpIHx8IGNtZCA9PSBTSU9DR0lXRU5DT0RFKSB7CisJCQkJaWYgKElXX0lTX1NFVChjbWQpIHx8IGNtZCA9PSBTSU9DR0lXRU5DT0RFCisJCQkJICAgIHx8IGNtZCA9PSBTSU9DR0lXRU5DT0RFRVhUKSB7CiAJCQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCQkJCXJldHVybiAtRVBFUk07CiAJCQkJfQpAQCAtMjcxMiw2ICsyNzc5LDggQEAKIAlCVUdfT04oZGV2X2Jvb3RfcGhhc2UpOwogCUFTU0VSVF9SVE5MKCk7CiAKKwltaWdodF9zbGVlcCgpOworCiAJLyogV2hlbiBuZXRfZGV2aWNlJ3MgYXJlIHBlcnNpc3RlbnQsIHRoaXMgd2lsbCBiZSBmYXRhbC4gKi8KIAlCVUdfT04oZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1VOSU5JVElBTElaRUQpOwogCkBAIC0yNzk4LDYgKzI4NjcsMTEgQEAKIAlpZiAoIWRldi0+cmVidWlsZF9oZWFkZXIpCiAJCWRldi0+cmVidWlsZF9oZWFkZXIgPSBkZWZhdWx0X3JlYnVpbGRfaGVhZGVyOwogCisJcmV0ID0gbmV0ZGV2X3JlZ2lzdGVyX3N5c2ZzKGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZXJyOworCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1JFR0lTVEVSRUQ7CisKIAkvKgogCSAqCURlZmF1bHQgaW5pdGlhbCBzdGF0ZSBhdCByZWdpc3RyeSBpcyB0aGF0IHRoZQogCSAqCWRldmljZSBpcyBwcmVzZW50LgpAQCAtMjgxMywxNCArMjg4NywxMSBAQAogCWhsaXN0X2FkZF9oZWFkKCZkZXYtPm5hbWVfaGxpc3QsIGhlYWQpOwogCWhsaXN0X2FkZF9oZWFkKCZkZXYtPmluZGV4X2hsaXN0LCBkZXZfaW5kZXhfaGFzaChkZXYtPmlmaW5kZXgpKTsKIAlkZXZfaG9sZChkZXYpOwotCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1JFR0lTVEVSSU5HOwogCXdyaXRlX3VubG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7CiAKIAkvKiBOb3RpZnkgcHJvdG9jb2xzLCB0aGF0IGEgbmV3IGRldmljZSBhcHBlYXJlZC4gKi8KLQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIE5FVERFVl9SRUdJU1RFUiwgZGV2KTsKKwlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLCBORVRERVZfUkVHSVNURVIsIGRldik7CiAKLQkvKiBGaW5pc2ggcmVnaXN0cmF0aW9uIGFmdGVyIHVubG9jayAqLwotCW5ldF9zZXRfdG9kbyhkZXYpOwogCXJldCA9IDA7CiAKIG91dDoKQEAgLTI4OTYsNyArMjk2Nyw3IEBACiAJCQlydG5sX2xvY2soKTsKIAogCQkJLyogUmVicm9hZGNhc3QgdW5yZWdpc3RlciBub3RpZmljYXRpb24gKi8KLQkJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwKKwkJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCiAJCQkJCSAgICBORVRERVZfVU5SRUdJU1RFUiwgZGV2KTsKIAogCQkJaWYgKHRlc3RfYml0KF9fTElOS19TVEFURV9MSU5LV0FUQ0hfUEVORElORywKQEAgLTI5NDMsNyArMzAxNCw3IEBACiAgKgogICogV2UgYXJlIGludm9rZWQgYnkgcnRubF91bmxvY2soKSBhZnRlciBpdCBkcm9wcyB0aGUgc2VtYXBob3JlLgogICogVGhpcyBhbGxvd3MgdXMgdG8gZGVhbCB3aXRoIHByb2JsZW1zOgotICogMSkgV2UgY2FuIGNyZWF0ZS9kZWxldGUgc3lzZnMgb2JqZWN0cyB3aGljaCBpbnZva2UgaG90cGx1ZworICogMSkgV2UgY2FuIGRlbGV0ZSBzeXNmcyBvYmplY3RzIHdoaWNoIGludm9rZSBob3RwbHVnCiAgKiAgICB3aXRob3V0IGRlYWRsb2NraW5nIHdpdGggbGlua3dhdGNoIHZpYSBrZXZlbnRkLgogICogMikgU2luY2Ugd2UgcnVuIHdpdGggdGhlIFJUTkwgc2VtYXBob3JlIG5vdCBoZWxkLCB3ZSBjYW4gc2xlZXAKICAqICAgIHNhZmVseSBpbiBvcmRlciB0byB3YWl0IGZvciB0aGUgbmV0ZGV2IHJlZmNudCB0byBkcm9wIHRvIHplcm8uCkBAIC0yOTUyLDggKzMwMjMsNiBAQAogdm9pZCBuZXRkZXZfcnVuX3RvZG8odm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3QgPSBMSVNUX0hFQURfSU5JVChsaXN0KTsKLQlpbnQgZXJyOwotCiAKIAkvKiBOZWVkIHRvIGd1YXJkIGFnYWluc3QgbXVsdGlwbGUgY3B1J3MgZ2V0dGluZyBvdXQgb2Ygb3JkZXIuICovCiAJbXV0ZXhfbG9jaygmbmV0X3RvZG9fcnVuX211dGV4KTsKQEAgLTI5NzYsNDAgKzMwNDUsMjkgQEAKIAkJCT0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBuZXRfZGV2aWNlLCB0b2RvX2xpc3QpOwogCQlsaXN0X2RlbCgmZGV2LT50b2RvX2xpc3QpOwogCi0JCXN3aXRjaChkZXYtPnJlZ19zdGF0ZSkgewotCQljYXNlIE5FVFJFR19SRUdJU1RFUklORzoKLQkJCWVyciA9IG5ldGRldl9yZWdpc3Rlcl9zeXNmcyhkZXYpOwotCQkJaWYgKGVycikKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgc3lzZnMgcmVnaXN0cmF0aW9uICglZClcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1JFR0lTVEVSRUQ7Ci0JCQlicmVhazsKLQotCQljYXNlIE5FVFJFR19VTlJFR0lTVEVSSU5HOgotCQkJbmV0ZGV2X3VucmVnaXN0ZXJfc3lzZnMoZGV2KTsKLQkJCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1VOUkVHSVNURVJFRDsKLQotCQkJbmV0ZGV2X3dhaXRfYWxscmVmcyhkZXYpOwotCi0JCQkvKiBwYXJhbm9pYSAqLwotCQkJQlVHX09OKGF0b21pY19yZWFkKCZkZXYtPnJlZmNudCkpOwotCQkJQlVHX1RSQVAoIWRldi0+aXBfcHRyKTsKLQkJCUJVR19UUkFQKCFkZXYtPmlwNl9wdHIpOwotCQkJQlVHX1RSQVAoIWRldi0+ZG5fcHRyKTsKLQotCi0JCQkvKiBJdCBtdXN0IGJlIHRoZSB2ZXJ5IGxhc3QgYWN0aW9uLCAKLQkJCSAqIGFmdGVyIHRoaXMgJ2RldicgbWF5IHBvaW50IHRvIGZyZWVkIHVwIG1lbW9yeS4KLQkJCSAqLwotCQkJaWYgKGRldi0+ZGVzdHJ1Y3RvcikKLQkJCQlkZXYtPmRlc3RydWN0b3IoZGV2KTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6CisJCWlmICh1bmxpa2VseShkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAibmV0d29yayB0b2RvICclcycgYnV0IHN0YXRlICVkXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5yZWdfc3RhdGUpOwotCQkJYnJlYWs7CisJCQlkdW1wX3N0YWNrKCk7CisJCQljb250aW51ZTsKIAkJfQorCisJCW5ldGRldl91bnJlZ2lzdGVyX3N5c2ZzKGRldik7CisJCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1VOUkVHSVNURVJFRDsKKworCQluZXRkZXZfd2FpdF9hbGxyZWZzKGRldik7CisKKwkJLyogcGFyYW5vaWEgKi8KKwkJQlVHX09OKGF0b21pY19yZWFkKCZkZXYtPnJlZmNudCkpOworCQlCVUdfVFJBUCghZGV2LT5pcF9wdHIpOworCQlCVUdfVFJBUCghZGV2LT5pcDZfcHRyKTsKKwkJQlVHX1RSQVAoIWRldi0+ZG5fcHRyKTsKKworCQkvKiBJdCBtdXN0IGJlIHRoZSB2ZXJ5IGxhc3QgYWN0aW9uLAorCQkgKiBhZnRlciB0aGlzICdkZXYnIG1heSBwb2ludCB0byBmcmVlZCB1cCBtZW1vcnkuCisJCSAqLworCQlpZiAoZGV2LT5kZXN0cnVjdG9yKQorCQkJZGV2LT5kZXN0cnVjdG9yKGRldik7CiAJfQogCiBvdXQ6CkBAIC0zMDM2LDEyICszMDk0LDExIEBACiAJYWxsb2Nfc2l6ZSA9IChzaXplb2YoKmRldikgKyBORVRERVZfQUxJR05fQ09OU1QpICYgfk5FVERFVl9BTElHTl9DT05TVDsKIAlhbGxvY19zaXplICs9IHNpemVvZl9wcml2ICsgTkVUREVWX0FMSUdOX0NPTlNUOwogCi0JcCA9IGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJcCA9IGt6YWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NfZGV2OiBVbmFibGUgdG8gYWxsb2NhdGUgZGV2aWNlLlxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQocCwgMCwgYWxsb2Nfc2l6ZSk7CiAKIAlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikKIAkJKCgobG9uZylwICsgTkVUREVWX0FMSUdOX0NPTlNUKSAmIH5ORVRERVZfQUxJR05fQ09OU1QpOwpAQCAtMzA2Nyw3ICszMTI0LDcgQEAKIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBDT05GSUdfU1lTRlMKLQkvKiAgQ29tcGF0aWFibGl0eSB3aXRoIGVycm9yIGhhbmRsaW5nIGluIGRyaXZlcnMgKi8KKwkvKiAgQ29tcGF0aWJpbGl0eSB3aXRoIGVycm9yIGhhbmRsaW5nIGluIGRyaXZlcnMgKi8KIAlpZiAoZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1VOSU5JVElBTElaRUQpIHsKIAkJa2ZyZWUoKGNoYXIgKilkZXYgLSBkZXYtPnBhZGRlZCk7CiAJCXJldHVybjsKQEAgLTMxNTIsNyArMzIwOSw3IEBACiAJLyogTm90aWZ5IHByb3RvY29scywgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gZGVzdHJveQogCSAgIHRoaXMgZGV2aWNlLiBUaGV5IHNob3VsZCBjbGVhbiBhbGwgdGhlIHRoaW5ncy4KIAkqLwotCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX1VOUkVHSVNURVIsIGRldik7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX1VOUkVHSVNURVIsIGRldik7CiAJCiAJLyoKIAkgKglGbHVzaCB0aGUgbXVsdGljYXN0IGNoYWluCkBAIC0zMjgzLDcgKzMzNDAsNyBAQAogCSAqCUluaXRpYWxpc2UgdGhlIHBhY2tldCByZWNlaXZlIHF1ZXVlcy4KIAkgKi8KIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IHNvZnRuZXRfZGF0YSAqcXVldWU7CiAKIAkJcXVldWUgPSAmcGVyX2NwdShzb2Z0bmV0X2RhdGEsIGkpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHYuYyBiL25ldC9jb3JlL2R2LmMKaW5kZXggY2Y1ODE0MC4uMjllZTc3ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZHYuYworKysgYi9uZXQvY29yZS9kdi5jCkBAIC01NSwxNSArNTUsMTIgQEAKIAogCWRldi0+ZGl2ZXJ0ID0gTlVMTDsKIAlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewotCQlkZXYtPmRpdmVydCA9IChzdHJ1Y3QgZGl2ZXJ0X2JsayAqKQotCQkJa21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKwkJZGV2LT5kaXZlcnQgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoZGV2LT5kaXZlcnQgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiZGl2ZXJ0OiB1bmFibGUgdG8gYWxsb2NhdGUgZGl2ZXJ0X2JsayBmb3IgJXNcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0KLQkJbWVtc2V0KGRldi0+ZGl2ZXJ0LCAwLCBzaXplb2Yoc3RydWN0IGRpdmVydF9ibGspKTsKIAkJZGV2X2hvbGQoZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggOTNmYmQwMS4uNWI0NDg2YSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKKysrIGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxsaW51eC9maWx0ZXIuaD4KIAogLyogTm8gaHVycnkgaW4gdGhpcyBicmFuY2ggKi8KQEAgLTE3Nyw3ICsxNzgsNyBAQAogbG9hZF93OgogCQkJcHRyID0gbG9hZF9wb2ludGVyKHNrYiwgaywgNCwgJnRtcCk7CiAJCQlpZiAocHRyICE9IE5VTEwpIHsKLQkJCQlBID0gbnRvaGwoKih1MzIgKilwdHIpOworCQkJCUEgPSBudG9obChnZXRfdW5hbGlnbmVkKCh1MzIgKilwdHIpKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTg2LDcgKzE4Nyw3IEBACiBsb2FkX2g6CiAJCQlwdHIgPSBsb2FkX3BvaW50ZXIoc2tiLCBrLCAyLCAmdG1wKTsKIAkJCWlmIChwdHIgIT0gTlVMTCkgewotCQkJCUEgPSBudG9ocygqKHUxNiAqKXB0cik7CisJCQkJQSA9IG50b2hzKGdldF91bmFsaWduZWQoKHUxNiAqKXB0cikpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9mbG93LmMgYi9uZXQvY29yZS9mbG93LmMKaW5kZXggNTU3ODlmOC4uMjE5MWFmNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmxvdy5jCisrKyBiL25ldC9jb3JlL2Zsb3cuYwpAQCAtNzksNyArNzksNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCWZsb3dfaGFzaF9ybmRfcmVjYWxjKGkpID0gMTsKIAogCWZsb3dfaGFzaF9ybmRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBGTE9XX0hBU0hfUk5EX1BFUklPRDsKQEAgLTMxOCwxMiArMzE4LDEwIEBACiAJCS8qIE5PVEhJTkcgKi87CiAKIAlmbG93X3RhYmxlKGNwdSkgPSAoc3RydWN0IGZsb3dfY2FjaGVfZW50cnkgKiopCi0JCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOworCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfWkVSTywgb3JkZXIpOwogCWlmICghZmxvd190YWJsZShjcHUpKQogCQlwYW5pYygiTkVUOiBmYWlsZWQgdG8gYWxsb2NhdGUgZmxvdyBjYWNoZSBvcmRlciAlbHVcbiIsIG9yZGVyKTsKIAotCW1lbXNldChmbG93X3RhYmxlKGNwdSksIDAsIFBBR0VfU0laRSA8PCBvcmRlcik7Ci0KIAlmbG93X2hhc2hfcm5kX3JlY2FsYyhjcHUpID0gMTsKIAlmbG93X2NvdW50KGNwdSkgPSAwOwogCkBAIC0zNjMsNyArMzYxLDcgQEAKIAlmbG93X2hhc2hfcm5kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgRkxPV19IQVNIX1JORF9QRVJJT0Q7CiAJYWRkX3RpbWVyKCZmbG93X2hhc2hfcm5kX3RpbWVyKTsKIAotCWZvcl9lYWNoX2NwdShpKQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlmbG93X2NhY2hlX2NwdV9wcmVwYXJlKGkpOwogCiAJaG90Y3B1X25vdGlmaWVyKGZsb3dfY2FjaGVfY3B1LCAwKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYyBiL25ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYwppbmRleCBiMDdjMDI5Li4zY2FkMDI2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMKKysrIGIvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jCkBAIC0xNTksMTEgKzE1OSwxMCBAQAogCWlmIChwYXJtLT5pbnRlcnZhbCA8IC0yIHx8IHBhcm0tPmludGVydmFsID4gMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllc3QgPSBrbWFsbG9jKHNpemVvZigqZXN0KSwgR0ZQX0tFUk5FTCk7CisJZXN0ID0ga3phbGxvYyhzaXplb2YoKmVzdCksIEdGUF9LRVJORUwpOwogCWlmIChlc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JbWVtc2V0KGVzdCwgMCwgc2l6ZW9mKCplc3QpKTsKIAllc3QtPmludGVydmFsID0gcGFybS0+aW50ZXJ2YWwgKyAyOwogCWVzdC0+YnN0YXRzID0gYnN0YXRzOwogCWVzdC0+cmF0ZV9lc3QgPSByYXRlX2VzdDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2xpbmtfd2F0Y2guYyBiL25ldC9jb3JlL2xpbmtfd2F0Y2guYwppbmRleCAzNDFkZTQ0Li42NDY5MzdjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9saW5rX3dhdGNoLmMKKysrIGIvbmV0L2NvcmUvbGlua193YXRjaC5jCkBAIC0xNzAsMTMgKzE3MCwxMyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsd2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KExXX1JVTk5JTkcsICZsaW5rd2F0Y2hfZmxhZ3MpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHRoaXNldmVudCA9IGppZmZpZXM7CisJCQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gbGlua3dhdGNoX25leHRldmVudCAtIGppZmZpZXM7CiAKLQkJCWlmICh0aGlzZXZlbnQgPj0gbGlua3dhdGNoX25leHRldmVudCkgeworCQkJLyogSWYgd2Ugd3JhcCBhcm91bmQgd2UnbGwgZGVsYXkgaXQgYnkgYXQgbW9zdCBIWi4gKi8KKwkJCWlmICghZGVsYXkgfHwgZGVsYXkgPiBIWikKIAkJCQlzY2hlZHVsZV93b3JrKCZsaW5rd2F0Y2hfd29yayk7Ci0JCQl9IGVsc2UgewotCQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbGlua3dhdGNoX3dvcmssIGxpbmt3YXRjaF9uZXh0ZXZlbnQgLSB0aGlzZXZlbnQpOwotCQkJfQorCQkJZWxzZQorCQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbGlua3dhdGNoX3dvcmssIGRlbGF5KTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMGM4NjY2OC4uNTBhOGM3MyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTI4NCwxNCArMjg0LDExIEBACiAJc3RydWN0IG5laWdoYm91ciAqKnJldDsKIAogCWlmIChzaXplIDw9IFBBR0VfU0laRSkgewotCQlyZXQgPSBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworCQlyZXQgPSBremFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOwogCX0gZWxzZSB7CiAJCXJldCA9IChzdHJ1Y3QgbmVpZ2hib3VyICoqKQotCQkJX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDLCBnZXRfb3JkZXIoc2l6ZSkpOworCQkgICAgICBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUN8X19HRlBfWkVSTywgZ2V0X29yZGVyKHNpemUpKTsKIAl9Ci0JaWYgKHJldCkKLQkJbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDg5LDggKzEwODYsNyBAQAogCQlpZiAoaGgtPmhoX3R5cGUgPT0gcHJvdG9jb2wpCiAJCQlicmVhazsKIAotCWlmICghaGggJiYgKGhoID0ga21hbGxvYyhzaXplb2YoKmhoKSwgR0ZQX0FUT01JQykpICE9IE5VTEwpIHsKLQkJbWVtc2V0KGhoLCAwLCBzaXplb2Yoc3RydWN0IGhoX2NhY2hlKSk7CisJaWYgKCFoaCAmJiAoaGggPSBremFsbG9jKHNpemVvZigqaGgpLCBHRlBfQVRPTUlDKSkgIT0gTlVMTCkgewogCQlyd2xvY2tfaW5pdCgmaGgtPmhoX2xvY2spOwogCQloaC0+aGhfdHlwZSA9IHByb3RvY29sOwogCQlhdG9taWNfc2V0KCZoaC0+aGhfcmVmY250LCAwKTsKQEAgLTEzMzAsOCArMTMyNiw3IEBACiAJa2ZyZWUocGFybXMpOwogfQogCi0KLXZvaWQgbmVpZ2hfdGFibGVfaW5pdChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCkKK3ZvaWQgbmVpZ2hfdGFibGVfaW5pdF9ub19uZXRsaW5rKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKQogewogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAl1bnNpZ25lZCBsb25nIHBoc2l6ZTsKQEAgLTEzNjYsMTMgKzEzNjEsMTEgQEAKIAl0YmwtPmhhc2hfYnVja2V0cyA9IG5laWdoX2hhc2hfYWxsb2ModGJsLT5oYXNoX21hc2sgKyAxKTsKIAogCXBoc2l6ZSA9IChQTkVJR0hfSEFTSE1BU0sgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcG5laWdoX2VudHJ5ICopOwotCXRibC0+cGhhc2hfYnVja2V0cyA9IGttYWxsb2MocGhzaXplLCBHRlBfS0VSTkVMKTsKKwl0YmwtPnBoYXNoX2J1Y2tldHMgPSBremFsbG9jKHBoc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXRibC0+aGFzaF9idWNrZXRzIHx8ICF0YmwtPnBoYXNoX2J1Y2tldHMpCiAJCXBhbmljKCJjYW5ub3QgYWxsb2NhdGUgbmVpZ2hib3VyIGNhY2hlIGhhc2hlcyIpOwogCi0JbWVtc2V0KHRibC0+cGhhc2hfYnVja2V0cywgMCwgcGhzaXplKTsKLQogCWdldF9yYW5kb21fYnl0ZXMoJnRibC0+aGFzaF9ybmQsIHNpemVvZih0YmwtPmhhc2hfcm5kKSk7CiAKIAlyd2xvY2tfaW5pdCgmdGJsLT5sb2NrKTsKQEAgLTEzODksMTAgKzEzODIsMjcgQEAKIAogCXRibC0+bGFzdF9mbHVzaCA9IG5vdzsKIAl0YmwtPmxhc3RfcmFuZAk9IG5vdyArIHRibC0+cGFybXMucmVhY2hhYmxlX3RpbWUgKiAyMDsKK30KKwordm9pZCBuZWlnaF90YWJsZV9pbml0KHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKQoreworCXN0cnVjdCBuZWlnaF90YWJsZSAqdG1wOworCisJbmVpZ2hfdGFibGVfaW5pdF9ub19uZXRsaW5rKHRibCk7CiAJd3JpdGVfbG9jaygmbmVpZ2hfdGJsX2xvY2spOworCWZvciAodG1wID0gbmVpZ2hfdGFibGVzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgeworCQlpZiAodG1wLT5mYW1pbHkgPT0gdGJsLT5mYW1pbHkpCisJCQlicmVhazsKKwl9CiAJdGJsLT5uZXh0CT0gbmVpZ2hfdGFibGVzOwogCW5laWdoX3RhYmxlcwk9IHRibDsKIAl3cml0ZV91bmxvY2soJm5laWdoX3RibF9sb2NrKTsKKworCWlmICh1bmxpa2VseSh0bXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTkVJR0g6IFJlZ2lzdGVyaW5nIG11bHRpcGxlIHRhYmxlcyBmb3IgIgorCQkgICAgICAgImZhbWlseSAlZFxuIiwgdGJsLT5mYW1pbHkpOworCQlkdW1wX3N0YWNrKCk7CisJfQogfQogCiBpbnQgbmVpZ2hfdGFibGVfY2xlYXIoc3RydWN0IG5laWdoX3RhYmxlICp0YmwpCkBAIC0xNjMzLDcgKzE2NDMsNyBAQAogCiAJCW1lbXNldCgmbmRzdCwgMCwgc2l6ZW9mKG5kc3QpKTsKIAotCQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCSpzdDsKIAogCQkJc3QgPSBwZXJfY3B1X3B0cih0YmwtPnN0YXRzLCBjcHUpOwpAQCAtMjY2Myw2ICsyNjczLDcgQEAKIEVYUE9SVF9TWU1CT0wobmVpZ2hfcmVzb2x2ZV9vdXRwdXQpOwogRVhQT1JUX1NZTUJPTChuZWlnaF90YWJsZV9jbGVhcik7CiBFWFBPUlRfU1lNQk9MKG5laWdoX3RhYmxlX2luaXQpOworRVhQT1JUX1NZTUJPTChuZWlnaF90YWJsZV9pbml0X25vX25ldGxpbmspOwogRVhQT1JUX1NZTUJPTChuZWlnaF91cGRhdGUpOwogRVhQT1JUX1NZTUJPTChuZWlnaF91cGRhdGVfaGhzKTsKIEVYUE9SVF9TWU1CT0wocG5laWdoX2VucXVldWUpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwppbmRleCAyMWI2ODQ2Li40N2E2ZmNlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuYworKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwpAQCAtMjksNyArMjksNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBkZXZfaXNhbGl2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSAKIHsKLQlyZXR1cm4gZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQ7CisJcmV0dXJuIGRldi0+cmVnX3N0YXRlIDw9IE5FVFJFR19SRUdJU1RFUkVEOwogfQogCiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqLwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJCW9wZXJzdGF0ZSA9IElGX09QRVJfRE9XTjsKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAKLQlpZiAob3BlcnN0YXRlID49IHNpemVvZihvcGVyc3RhdGVzKSkKKwlpZiAob3BlcnN0YXRlID49IEFSUkFZX1NJWkUob3BlcnN0YXRlcykpCiAJCXJldHVybiAtRUlOVkFMOyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG9wZXJzdGF0ZXNbb3BlcnN0YXRlXSk7CkBAIC00NDUsNTggKzQ0NSwzMyBAQAogCiB2b2lkIG5ldGRldl91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBuZXRfZGV2aWNlICogbmV0KQogewotCXN0cnVjdCBjbGFzc19kZXZpY2UgKiBjbGFzc19kZXYgPSAmKG5ldC0+Y2xhc3NfZGV2KTsKLQotCWlmIChuZXQtPmdldF9zdGF0cykKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGFzc19kZXYtPmtvYmosICZuZXRzdGF0X2dyb3VwKTsKLQotI2lmZGVmIFdJUkVMRVNTX0VYVAotCWlmIChuZXQtPmdldF93aXJlbGVzc19zdGF0cyB8fCAobmV0LT53aXJlbGVzc19oYW5kbGVycyAmJgotCQkJbmV0LT53aXJlbGVzc19oYW5kbGVycy0+Z2V0X3dpcmVsZXNzX3N0YXRzKSkKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGFzc19kZXYtPmtvYmosICZ3aXJlbGVzc19ncm91cCk7Ci0jZW5kaWYKLQljbGFzc19kZXZpY2VfZGVsKGNsYXNzX2Rldik7Ci0KKwljbGFzc19kZXZpY2VfZGVsKCYobmV0LT5jbGFzc19kZXYpKTsKIH0KIAogLyogQ3JlYXRlIHN5c2ZzIGVudHJpZXMgZm9yIG5ldHdvcmsgZGV2aWNlLiAqLwogaW50IG5ldGRldl9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9ICYobmV0LT5jbGFzc19kZXYpOwotCWludCByZXQ7CisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3VwcyA9IG5ldC0+c3lzZnNfZ3JvdXBzOwogCisJY2xhc3NfZGV2aWNlX2luaXRpYWxpemUoY2xhc3NfZGV2KTsKIAljbGFzc19kZXYtPmNsYXNzID0gJm5ldF9jbGFzczsKIAljbGFzc19kZXYtPmNsYXNzX2RhdGEgPSBuZXQ7CisJY2xhc3NfZGV2LT5ncm91cHMgPSBncm91cHM7CiAKKwlCVUlMRF9CVUdfT04oQlVTX0lEX1NJWkUgPCBJRk5BTVNJWik7CiAJc3RybGNweShjbGFzc19kZXYtPmNsYXNzX2lkLCBuZXQtPm5hbWUsIEJVU19JRF9TSVpFKTsKLQlpZiAoKHJldCA9IGNsYXNzX2RldmljZV9yZWdpc3RlcihjbGFzc19kZXYpKSkKLQkJZ290byBvdXQ7CiAKLQlpZiAobmV0LT5nZXRfc3RhdHMgJiYKLQkgICAgKHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xhc3NfZGV2LT5rb2JqLCAmbmV0c3RhdF9ncm91cCkpKQotCQlnb3RvIG91dF91bnJlZzsgCisJaWYgKG5ldC0+Z2V0X3N0YXRzKQorCQkqZ3JvdXBzKysgPSAmbmV0c3RhdF9ncm91cDsKIAogI2lmZGVmIFdJUkVMRVNTX0VYVAotCWlmIChuZXQtPmdldF93aXJlbGVzc19zdGF0cyB8fCAobmV0LT53aXJlbGVzc19oYW5kbGVycyAmJgotCQkJbmV0LT53aXJlbGVzc19oYW5kbGVycy0+Z2V0X3dpcmVsZXNzX3N0YXRzKSkgewotCQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsYXNzX2Rldi0+a29iaiwgJndpcmVsZXNzX2dyb3VwKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0X2NsZWFudXA7Ci0JfQotCXJldHVybiAwOwotb3V0X2NsZWFudXA6Ci0JaWYgKG5ldC0+Z2V0X3N0YXRzKQotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsYXNzX2Rldi0+a29iaiwgJm5ldHN0YXRfZ3JvdXApOwotI2Vsc2UKLQlyZXR1cm4gMDsKKwlpZiAobmV0LT5nZXRfd2lyZWxlc3Nfc3RhdHMKKwkgICAgfHwgKG5ldC0+d2lyZWxlc3NfaGFuZGxlcnMgJiYgbmV0LT53aXJlbGVzc19oYW5kbGVycy0+Z2V0X3dpcmVsZXNzX3N0YXRzKSkKKwkJKmdyb3VwcysrID0gJndpcmVsZXNzX2dyb3VwOwogI2VuZGlmCiAKLW91dF91bnJlZzoKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc3lzZnMgYXR0cmlidXRlIHJlZ2lzdHJhdGlvbiBmYWlsZWQgJWRcbiIsCi0JICAgICAgIG5ldC0+bmFtZSwgcmV0KTsKLQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcihjbGFzc19kZXYpOwotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIGNsYXNzX2RldmljZV9hZGQoY2xhc3NfZGV2KTsKIH0KIAogaW50IG5ldGRldl9zeXNmc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYyBiL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCmluZGV4IDFlNDRlZGEuLjc5ZWJkNzUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCisrKyBiL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCkBAIC0zOCwxMyArMzgsMTEgQEAKIHsKIAljb25zdCBpbnQgbG9wdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsaXN0ZW5fc29jaykgKwogCQkJICAgICAgbnJfdGFibGVfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF9zb2NrICopOwotCXN0cnVjdCBsaXN0ZW5fc29jayAqbG9wdCA9IGttYWxsb2MobG9wdF9zaXplLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgbGlzdGVuX3NvY2sgKmxvcHQgPSBremFsbG9jKGxvcHRfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAobG9wdCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChsb3B0LCAwLCBsb3B0X3NpemUpOwotCiAJZm9yIChsb3B0LT5tYXhfcWxlbl9sb2cgPSA2OwogCSAgICAgKDEgPDwgbG9wdC0+bWF4X3FsZW5fbG9nKSA8IHN5c2N0bF9tYXhfc3luX2JhY2tsb2c7CiAJICAgICBsb3B0LT5tYXhfcWxlbl9sb2crKyk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDA5NDY0ZmEuLmZiMzc3MGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0xMTIsNiArMTEyLDE0IEBACiAJQlVHKCk7CiB9CiAKK3ZvaWQgc2tiX3RydWVzaXplX2J1ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXByaW50ayhLRVJOX0VSUiAiU0tCIEJVRzogSW52YWxpZCB0cnVlc2l6ZSAoJXUpICIKKwkgICAgICAgImxlbj0ldSwgc2l6ZW9mKHNrX2J1ZmYpPSVaZFxuIiwKKwkgICAgICAgc2tiLT50cnVlc2l6ZSwgc2tiLT5sZW4sIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOworfQorRVhQT1JUX1NZTUJPTChza2JfdHJ1ZXNpemVfYnVnKTsKKwogLyogCUFsbG9jYXRlIGEgbmV3IHNrYnVmZi4gV2UgZG8gdGhpcyBvdXJzZWx2ZXMgc28gd2UgY2FuIGZpbGwgaW4gYSBmZXcKICAqCSdwcml2YXRlJyBmaWVsZHMgYW5kIGFsc28gZG8gbWVtb3J5IHN0YXRpc3RpY3MgdG8gZmluZCBhbGwgdGhlCiAgKglbQkVFUF0gbGVha3MuCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggYTk2ZWE3ZC4uZWQyYWZkYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMzg1LDcgKzM4NSwyMSBAQAogCQkJCXZhbCA9IHN5c2N0bF9ybWVtX21heDsKIHNldF9yY3ZidWY6CiAJCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7Ci0JCQkvKiBGSVhNRTogaXMgdGhpcyBsb3dlciBib3VuZCB0aGUgcmlnaHQgb25lPyAqLworCQkJLyoKKwkJCSAqIFdlIGRvdWJsZSBpdCBvbiB0aGUgd2F5IGluIHRvIGFjY291bnQgZm9yCisJCQkgKiAic3RydWN0IHNrX2J1ZmYiIGV0Yy4gb3ZlcmhlYWQuICAgQXBwbGljYXRpb25zCisJCQkgKiBhc3N1bWUgdGhhdCB0aGUgU09fUkNWQlVGIHNldHRpbmcgdGhleSBtYWtlIHdpbGwKKwkJCSAqIGFsbG93IHRoYXQgbXVjaCBhY3R1YWwgZGF0YSB0byBiZSByZWNlaXZlZCBvbiB0aGF0CisJCQkgKiBzb2NrZXQuCisJCQkgKgorCQkJICogQXBwbGljYXRpb25zIGFyZSB1bmF3YXJlIHRoYXQgInN0cnVjdCBza19idWZmIiBhbmQKKwkJCSAqIG90aGVyIG92ZXJoZWFkcyBhbGxvY2F0ZSBmcm9tIHRoZSByZWNlaXZlIGJ1ZmZlcgorCQkJICogZHVyaW5nIHNvY2tldCBidWZmZXIgYWxsb2NhdGlvbi4KKwkJCSAqCisJCQkgKiBBbmQgYWZ0ZXIgY29uc2lkZXJpbmcgdGhlIHBvc3NpYmxlIGFsdGVybmF0aXZlcywKKwkJCSAqIHJldHVybmluZyB0aGUgdmFsdWUgd2UgYWN0dWFsbHkgdXNlZCBpbiBnZXRzb2Nrb3B0CisJCQkgKiBpcyB0aGUgbW9zdCBkZXNpcmFibGUgYmVoYXZpb3IuCisJCQkgKi8KIAkJCWlmICgodmFsICogMikgPCBTT0NLX01JTl9SQ1ZCVUYpCiAJCQkJc2stPnNrX3JjdmJ1ZiA9IFNPQ0tfTUlOX1JDVkJVRjsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N0cmVhbS5jIGIvbmV0L2NvcmUvc3RyZWFtLmMKaW5kZXggMzVlMjUyNS4uZTk0ODk2OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3RyZWFtLmMKKysrIGIvbmV0L2NvcmUvc3RyZWFtLmMKQEAgLTE3Niw2ICsxNzYsNyBAQAogewogCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CiAKKwlza2JfdHJ1ZXNpemVfY2hlY2soc2tiKTsKIAlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZzay0+c2tfcm1lbV9hbGxvYyk7CiAJc2stPnNrX2ZvcndhcmRfYWxsb2MgKz0gc2tiLT50cnVlc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IGZkYzRmMzguLjRmOTZmMzggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBucm5kX3N0YXRlICpzdGF0ZSA9ICZwZXJfY3B1KG5ldF9yYW5kX3N0YXRlLGkpOwogCQlfX25ldF9zcmFuZG9tKHN0YXRlLCBpK2ppZmZpZXMpOwogCX0KQEAgLTEzMyw3ICsxMzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2VlZFtOUl9DUFVTXTsKIAogCWdldF9yYW5kb21fYnl0ZXMoc2VlZCwgc2l6ZW9mKHNlZWQpKTsKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBucm5kX3N0YXRlICpzdGF0ZSA9ICZwZXJfY3B1KG5ldF9yYW5kX3N0YXRlLGkpOwogCQlfX25ldF9zcmFuZG9tKHN0YXRlLCBzZWVkW2ldKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS93aXJlbGVzcy5jIGIvbmV0L2NvcmUvd2lyZWxlc3MuYwppbmRleCA4MWQ2OTk1Li5kMmJjNzJkIDEwMDY0NAotLS0gYS9uZXQvY29yZS93aXJlbGVzcy5jCisrKyBiL25ldC9jb3JlL3dpcmVsZXNzLmMKQEAgLTE3MjYsNiArMTcyNiwxNCBAQAogCWlmKCFJV19JU19HRVQocmVxdWVzdC0+Y21kKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJLyogSWYgY29tbWFuZCBpcyBgZ2V0IHRoZSBlbmNvZGluZyBwYXJhbWV0ZXJzJywgY2hlY2sgaWYKKwkgKiB0aGUgdXNlciBoYXMgdGhlIHJpZ2h0IHRvIGRvIGl0ICovCisJaWYgKHJlcXVlc3QtPmNtZCA9PSBTSU9DR0lXRU5DT0RFIHx8CisJICAgIHJlcXVlc3QtPmNtZCA9PSBTSU9DR0lXRU5DT0RFRVhUKSB7CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJfQorCiAJLyogU3BlY2lhbCBjYXNlcyAqLwogCWlmKHJlcXVlc3QtPmNtZCA9PSBTSU9DR0lXU1RBVFMpCiAJCS8qIEdldCBXaXJlbGVzcyBTdGF0cyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmMgYi9uZXQvZGNjcC9hY2t2ZWMuYwppbmRleCBiNTk4MWU1Li44YzIxMWM1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuYworKysgYi9uZXQvZGNjcC9hY2t2ZWMuYwpAQCAtNDUyLDYgKzQ1Miw3IEBACiAJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkJCSAgICAgIGF2ci0+ZGNjcGF2cl9hY2tfYWNrbm8pOwogCQkJCWRjY3BfYWNrdmVjX3Rocm93X3JlY29yZChhdiwgYXZyKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJCS8qCiAJCQkgKiBJZiBpdCB3YXNuJ3QgcmVjZWl2ZWQsIGNvbnRpbnVlIHNjYW5uaW5nLi4uIHdlIG1pZ2h0CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9mZWF0LmMgYi9uZXQvZGNjcC9mZWF0LmMKaW5kZXggZTNkZDMwZC4uYjM5ZTJhNSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZmVhdC5jCisrKyBiL25ldC9kY2NwL2ZlYXQuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJaWYgKHJjKSB7CiAJCWtmcmVlKG9wdC0+ZGNjcG9wX3NjLT5kY2Nwb2NfdmFsKTsKIAkJa2ZyZWUob3B0LT5kY2Nwb3Bfc2MpOwotCQlvcHQtPmRjY3BvcF9zYyA9IDA7CisJCW9wdC0+ZGNjcG9wX3NjID0gTlVMTDsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMzIyLDcgKzMyMiw3IEBACiAJb3B0LT5kY2Nwb3BfdHlwZSA9IHR5cGUgPT0gRENDUE9fQ0hBTkdFX0wgPyBEQ0NQT19DT05GSVJNX1IgOgogCQkJCQkJICAgIERDQ1BPX0NPTkZJUk1fTDsKIAlvcHQtPmRjY3BvcF9mZWF0ID0gZmVhdHVyZTsKLQlvcHQtPmRjY3BvcF92YWwJID0gMDsKKwlvcHQtPmRjY3BvcF92YWwJID0gTlVMTDsKIAlvcHQtPmRjY3BvcF9sZW4JID0gMDsKIAogCS8qIGNoYW5nZSBmZWF0dXJlICovCkBAIC01MjMsNyArNTIzLDcgQEAKIAkJICogb25jZS4uLgogCQkgKi8KIAkJLyogdGhlIG1hc3RlciBzb2NrZXQgbm8gbG9uZ2VyIG5lZWRzIHRvIHdvcnJ5IGFib3V0IGNvbmZpcm1zICovCi0JCW9wdC0+ZGNjcG9wX3NjID0gMDsgLyogaXQncyBub3QgYSBtZW1sZWFrLS0tbmV3IHNvY2tldCBoYXMgaXQgKi8KKwkJb3B0LT5kY2Nwb3Bfc2MgPSBOVUxMOyAvKiBpdCdzIG5vdCBhIG1lbWxlYWstLS1uZXcgc29ja2V0IGhhcyBpdCAqLwogCiAJCS8qIHJlc2V0IHN0YXRlIGZvciBhIG5ldyBzb2NrZXQgKi8KIAkJb3B0LT5kY2Nwb3BfY29uZiA9IDA7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY0LmMgYi9uZXQvZGNjcC9pcHY0LmMKaW5kZXggMjkwNDc5OS4uZjJjMDExZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2NC5jCisrKyBiL25ldC9kY2NwL2lwdjQuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJCWdvdG8gZHJvcDsKIAogCWlmIChkY2NwX3BhcnNlX29wdGlvbnMoc2ssIHNrYikpCi0JCWdvdG8gZHJvcDsKKwkJZ290byBkcm9wX2FuZF9mcmVlOwogCiAJZGNjcF9vcGVucmVxX2luaXQocmVxLCAmZHAsIHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDFmZjczMjguLjJlMGVlODMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtODQ4LDYgKzg0OCw3IEBACiB2b2lkIGRjY3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgc3RhdGU7CiAKIAlsb2NrX3NvY2soc2spOwogCkBAIC04ODIsNiArODgzLDExIEBACiAJc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc2ssIHRpbWVvdXQpOwogCiBhZGp1ZGdlX3RvX2RlYXRoOgorCXN0YXRlID0gc2stPnNrX3N0YXRlOworCXNvY2tfaG9sZChzayk7CisJc29ja19vcnBoYW4oc2spOworCWF0b21pY19pbmMoc2stPnNrX3Byb3QtPm9ycGhhbl9jb3VudCk7CisKIAkvKgogCSAqIEl0IGlzIHRoZSBsYXN0IHJlbGVhc2Vfc29jayBpbiBpdHMgbGlmZS4gSXQgd2lsbCByZW1vdmUgYmFja2xvZy4KIAkgKi8KQEAgLTg5NCw4ICs5MDAsOSBAQAogCWJoX2xvY2tfc29jayhzayk7CiAJQlVHX1RSQVAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpOwogCi0Jc29ja19ob2xkKHNrKTsKLQlzb2NrX29ycGhhbihzayk7CisJLyogSGF2ZSB3ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIGJ5IGEgc29mdGlycSBvciBiYWNrbG9nPyAqLworCWlmIChzdGF0ZSAhPSBEQ0NQX0NMT1NFRCAmJiBzay0+c2tfc3RhdGUgPT0gRENDUF9DTE9TRUQpCisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBUaGUgbGFzdCByZWxlYXNlX3NvY2sgbWF5IGhhdmUgcHJvY2Vzc2VkIHRoZSBDTE9TRSBvciBSRVNFVApAQCAtOTE1LDEyICs5MjIsMTIgQEAKICNlbmRpZgogCX0KIAotCWF0b21pY19pbmMoc2stPnNrX3Byb3QtPm9ycGhhbl9jb3VudCk7CiAJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX0NMT1NFRCkKIAkJaW5ldF9jc2tfZGVzdHJveV9zb2NrKHNrKTsKIAogCS8qIE90aGVyd2lzZSwgc29ja2V0IGlzIHJlcHJpZXZlZCB1bnRpbCBwcm90b2NvbCBjbG9zZS4gKi8KIAorb3V0OgogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIAlzb2NrX3B1dChzayk7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCBkMmFlOTg5Li5hMjZmZjlmIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTYyMCw3ICs2MjAsNyBAQAogCX0KIAl3cml0ZV91bmxvY2soJmRuZGV2X2xvY2spOwogCWlmIChvbGQpCi0JCWRldl9wdXQoZGV2KTsKKwkJZGV2X3B1dChvbGQpOwogCXJldHVybiBydjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9uZWlnaC5jIGIvbmV0L2RlY25ldC9kbl9uZWlnaC5jCmluZGV4IDdjODY5MmMuLjY2ZTIzMGMgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbmVpZ2guYworKysgYi9uZXQvZGVjbmV0L2RuX25laWdoLmMKQEAgLTQ5Myw3ICs0OTMsNiBAQAogc3RhdGljIHZvaWQgbmVpZ2hfZWxpc3RfY2Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHZvaWQgKl9pbmZvKQogewogCXN0cnVjdCBlbGlzdF9jYl9zdGF0ZSAqcyA9IF9pbmZvOwotCXN0cnVjdCBkbl9kZXYgKmRuX2RiOwogCXN0cnVjdCBkbl9uZWlnaCAqZG47CiAKIAlpZiAobmVpZ2gtPmRldiAhPSBzLT5kZXYpCkBAIC01MDMsMTAgKzUwMiw2IEBACiAJaWYgKCEoZG4tPmZsYWdzICYgKEROX05ERkxBR19SMXxETl9OREZMQUdfUjIpKSkKIAkJcmV0dXJuOwogCi0JZG5fZGIgPSAoc3RydWN0IGRuX2RldiAqKSBzLT5kZXYtPmRuX3B0cjsKLQlpZiAoZG5fZGItPnBhcm1zLmZvcndhcmRpbmcgPT0gMSAmJiAoZG4tPmZsYWdzICYgRE5fTkRGTEFHX1IyKSkKLQkJcmV0dXJuOwotCiAJaWYgKHMtPnQgPT0gcy0+bikKIAkJcy0+cnMgPSBkbl9maW5kX3Nsb3Qocy0+cHRyLCBzLT5uLCBkbi0+cHJpb3JpdHkpOwogCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9ldGhlcm5ldC9NYWtlZmlsZSBiL25ldC9ldGhlcm5ldC9NYWtlZmlsZQppbmRleCA2OWI3NGE5Li43Y2VmMWQ4IDEwMDY0NAotLS0gYS9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKKysrIGIvbmV0L2V0aGVybmV0L01ha2VmaWxlCkBAIC0zLDYgKzMsNSBAQAogIwogCiBvYmoteQkJCQkJKz0gZXRoLm8KLW9iai0kKENPTkZJR19TWVNDVEwpCQkJKz0gc3lzY3RsX25ldF9ldGhlci5vCiBvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBYKSkJCSs9IHBlMi5vCiBvYmotJChzdWJzdCBtLHksJChDT05GSUdfQVRBTEspKQkrPSBwZTIubwpkaWZmIC0tZ2l0IGEvbmV0L2V0aGVybmV0L3N5c2N0bF9uZXRfZXRoZXIuYyBiL25ldC9ldGhlcm5ldC9zeXNjdGxfbmV0X2V0aGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YjM5ZmMuLjAwMDAwMDAKLS0tIGEvbmV0L2V0aGVybmV0L3N5c2N0bF9uZXRfZXRoZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIC0qLSBsaW51eC1jIC0qLQotICogc3lzY3RsX25ldF9ldGhlci5jOiBzeXNjdGwgaW50ZXJmYWNlIHRvIG5ldCBFdGhlcm5ldCBzdWJzeXN0ZW0uCi0gKgotICogQmVndW4gQXByaWwgMSwgMTk5NiwgTWlrZSBTaGF2ZXIuCi0gKiBBZGRlZCAvcHJvYy9zeXMvbmV0L2V0aGVyIGRpcmVjdG9yeSBlbnRyeSAoZW1wdHkgPSkgKS4gW01TXQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0KLWN0bF90YWJsZSBldGhlcl90YWJsZVtdID0gewotCXswfQotfTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9LY29uZmlnIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcKaW5kZXggNmNkOWYzNC4uZjJhMjdjYyAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgSUVFRTgwMjExX1NPRlRNQUMKIAl0cmlzdGF0ZSAiU29mdHdhcmUgTUFDIGFkZC1vbiB0byB0aGUgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayIKIAlkZXBlbmRzIG9uIElFRUU4MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJLS0taGVscC0tLQogCVRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IHNvZnR3YXJlIE1BQyBhZGRvbgogCWZvciB0aGUgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjay4KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCmluZGV4IGJlNjFkZTc4Li41N2VhOWY2IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKQEAgLTUxLDExICs1MSwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDE7CiAJbWFjLT5hc3NvY2lhdGVkID0gMDsgLyoganVzdCB0byBtYWtlIHN1cmUgKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFNldCBhIHRpbWVyIGZvciB0aW1lb3V0ICovCiAJLyogRklYTUU6IG1ha2UgdGltZW91dCBjb25maWd1cmFibGUgKi8KLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1hYy0+YXNzb2NpbmZvLnRpbWVvdXQsIDUgKiBIWik7CisJaWYgKGxpa2VseShtYWMtPnJ1bm5pbmcpKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1hYy0+YXNzb2NpbmZvLnRpbWVvdXQsIDUgKiBIWik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQKQEAgLTEwMSw2ICsxMDIsNyBAQAogCS8qIERvIE5PVCBjbGVhciBic3N2YWxpZCBhcyB0aGF0IHdpbGwgYnJlYWsgaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrISAqLwogCW1hYy0+YXNzb2NpYXRlZCA9IDA7CiAJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOworCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9ESVNBU1NPQ0lBVEVELCBOVUxMKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTQzLDYgKzE0NSwxMiBAQAogCWlmICghd2Vfc3VwcG9ydF9hbGxfYmFzaWNfcmF0ZXMobWFjLCBuZXQtPnJhdGVzX2V4LCBuZXQtPnJhdGVzX2V4X2xlbikpCiAJCXJldHVybiAwOwogCisJLyogYXNzdW1lIHRoYXQgdXNlcnMga25vdyB3aGF0IHRoZXkncmUgZG9pbmcgLi4uCisJICogKG5vdGUgd2UgZG9uJ3QgbGV0IHRoZW0gc2VsZWN0IGEgbmV0IHdlJ3JlIGluY29tcGF0aWJsZSB3aXRoKSAqLworCWlmIChtYWMtPmFzc29jaW5mby5ic3NmaXhlZCkgeworCQlyZXR1cm4gIW1lbWNtcChtYWMtPmFzc29jaW5mby5ic3NpZCwgbmV0LT5ic3NpZCwgRVRIX0FMRU4pOworCX0KKwogCS8qIGlmICdBTlknIG5ldHdvcmsgcmVxdWVzdGVkLCB0YWtlIGFueSB0aGF0IGRvZXNuJ3QgaGF2ZSBwcml2YWN5IGVuYWJsZWQgKi8KIAlpZiAobWFjLT5hc3NvY2luZm8ucmVxX2Vzc2lkLmxlbiA9PSAwIAogCSAgICAmJiAhKG5ldC0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKQEAgLTE3NSw3ICsxODMsNyBAQAogCQlpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKG1hYywgV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKTsKIAogCS8qIHRyeSB0byBmaW5kIHRoZSByZXF1ZXN0ZWQgbmV0d29yayBpbiBvdXIgbGlzdCwgaWYgd2UgZm91bmQgb25lIGFscmVhZHkgKi8KLQlpZiAobWFjLT5hc3NvY2luZm8uYnNzdmFsaWQpCisJaWYgKG1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkIHx8IG1hYy0+YXNzb2NpbmZvLmJzc2ZpeGVkKQogCQlmb3VuZCA9IGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWQobWFjLCBtYWMtPmFzc29jaW5mby5ic3NpZCk7CQogCQogCS8qIFNlYXJjaCB0aGUgaWVlZTgwMjExIG5ldHdvcmtzIGZvciB0aGlzIG5ldHdvcmsgaWYgd2UgZGlkbid0IGZpbmQgaXQgYnkgYnNzaWQsCkBAIC0yNDAsMTkgKzI0OCwyNSBAQAogCQkJaWYgKGllZWU4MDIxMXNvZnRtYWNfc3RhcnRfc2NhbihtYWMpKQogCQkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiQXNzb2NpYXRlOiBmYWlsZWQgdG8gaW5pdGlhdGUgc2Nhbi4gSXMgZGV2aWNlIHVwP1xuIik7CiAJCQlyZXR1cm47Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CiAJCQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7CiAJCQltYWMtPmFzc29jaWF0ZWQgPSAwOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CiAKIAkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiVW5hYmxlIHRvIGZpbmQgbWF0Y2hpbmcgbmV0d29yayBhZnRlciBzY2FuIVxuIik7CisJCQkvKiByZXNldCB0aGUgcmV0cnkgY291bnRlciBmb3IgdGhlIG5leHQgdXNlciByZXF1ZXN0IHNpbmNlIHdlCisJCQkgKiBicmVhayBvdXQgYW5kIGRvbid0IHJlc2NoZWR1bGUgb3Vyc2VsdmVzIGFmdGVyIHRoaXMgcG9pbnQuICovCisJCQltYWMtPmFzc29jaW5mby5zY2FuX3JldHJ5ID0gSUVFRTgwMjExU09GVE1BQ19BU1NPQ19TQ0FOX1JFVFJZX0xJTUlUOwogCQkJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX05FVF9OT1RfRk9VTkQsIE5VTEwpOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCQorCisJLyogcmVzZXQgdGhlIHJldHJ5IGNvdW50ZXIgZm9yIHRoZSBuZXh0IHVzZXIgcmVxdWVzdCBzaW5jZSB3ZQorCSAqIG5vdyBmb3VuZCBhIG5ldCBhbmQgd2lsbCB0cnkgdG8gYXNzb2NpYXRlIHRvIGl0LCBidXQgbm90CisJICogc2NoZWR1bGUgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4gKi8KKwltYWMtPmFzc29jaW5mby5zY2FuX3JldHJ5ID0gSUVFRTgwMjExU09GVE1BQ19BU1NPQ19TQ0FOX1JFVFJZX0xJTUlUOwogCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMTsKIAltZW1jcHkobWFjLT5hc3NvY2luZm8uYnNzaWQsIGZvdW5kLT5ic3NpZCwgRVRIX0FMRU4pOwogCS8qIGNvcHkgdGhlIEVTU0lEIGZvciBkaXNwbGF5aW5nIGl0ICovCkBAIC0zMDYsNiArMzIwLDkgQEAKIAl1MTYgc3RhdHVzID0gbGUxNl90b19jcHVwKCZyZXNwLT5zdGF0dXMpOwogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoIW1hYy0+cnVubmluZykpCisJCXJldHVybiAtRU5PREVWOwogCQogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIApAQCAtMzY0LDE1ICszODEsMjIgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1bmxpa2VseSghbWFjLT5ydW5uaW5nKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAobWVtY21wKGRpc2Fzc29jLT5oZWFkZXIuYWRkcjIsIG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBFVEhfQUxFTikpCiAJCXJldHVybiAwOworCiAJaWYgKG1lbWNtcChkaXNhc3NvYy0+aGVhZGVyLmFkZHIxLCBtYWMtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKIAkJcmV0dXJuIDA7CisKIAlkcHJpbnRrKEtFUk5fSU5GTyBQRlggImdvdCBkaXNhc3NvYyBmcmFtZVxuIik7CiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CiAJbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAwOwogCW1hYy0+YXNzb2NpYXRlZCA9IDA7CisJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQsIE5VTEwpOwogCXNjaGVkdWxlX3dvcmsoJm1hYy0+YXNzb2NpbmZvLndvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCQpAQCAtMzg2LDExICs0MTAsMTUgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0d29yazsKIAorCWlmICh1bmxpa2VseSghbWFjLT5ydW5uaW5nKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAluZXR3b3JrID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChtYWMsIHJlc3AtPmhlYWRlci5hZGRyMyk7CiAJaWYgKCFuZXR3b3JrKSB7CiAJCWRwcmludGtsKEtFUk5fSU5GTyBQRlggInJlYXNzb2MgcmVxdWVzdCBmcm9tIHVua25vd24gbmV0d29ya1xuIik7CiAJCXJldHVybiAwOwogCX0KLQlpZWVlODAyMTFzb2Z0bWFjX2Fzc29jKG1hYywgbmV0d29yayk7CisJc2NoZWR1bGVfd29yaygmbWFjLT5hc3NvY2luZm8ud29yayk7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYwppbmRleCA5YTBlYWM2Li4wNmUzMzI2IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hdXRoLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jCkBAIC04Niw2ICs4NiwxMSBAQAogCQkKIAkJLyogTG9jayBhbmQgc2V0IGZsYWdzICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHVubGlrZWx5KCFtYWMtPnJ1bm5pbmcpKSB7CisJCQkvKiBQcmV2ZW50IHJlc2NoZWR1bGUgb24gd29ya3F1ZXVlIGZsdXNoICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQogCQluZXQtPmF1dGhlbnRpY2F0ZWQgPSAwOwogCQluZXQtPmF1dGhlbnRpY2F0aW5nID0gMTsKIAkJLyogYWRkIGEgdGltZW91dCBjYWxsIHNvIHdlIGV2ZW50dWFsbHkgZ2l2ZSB1cCB3YWl0aW5nIGZvciBhbiBhdXRoIHJlcGx5ICovCkBAIC0xMjQsNiArMTI5LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4ICogZGF0YTsKIAkKKwlpZiAodW5saWtlbHkoIW1hYy0+cnVubmluZykpCisJCXJldHVybiAtRU5PREVWOworCiAJLyogRmluZCBjb3JyZWN0IGF1dGggcXVldWUgaXRlbSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoKGxpc3RfcHRyLCAmbWFjLT5hdXRoX3F1ZXVlKSB7CkBAIC0yOTgsOCArMzA2LDYgQEAKIAkKIAkvKiBjYW4ndCB0cmFuc21pdCBkYXRhIHJpZ2h0IG5vdy4uLiAqLwogCW5ldGlmX2NhcnJpZXJfb2ZmKG1hYy0+ZGV2KTsKLQkvKiBsZXQncyB0cnkgdG8gcmUtYXNzb2NpYXRlICovCi0Jc2NoZWR1bGVfd29yaygmbWFjLT5hc3NvY2luZm8ud29yayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTMzOCw2ICszNDQsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCQorCWlmICh1bmxpa2VseSghbWFjLT5ydW5uaW5nKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoIWRlYXV0aCkgewogCQlkcHJpbnRrKCJkZWF1dGggd2l0aG91dCBkZWF1dGggcGFja2V0LiBlZWshXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC0zNjAsNSArMzY5LDggQEAKIAl9CiAKIAlpZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9mcm9tX25ldChtYWMsIG5ldCk7CisKKwkvKiBsZXQncyB0cnkgdG8gcmUtYXNzb2NpYXRlICovCisJc2NoZWR1bGVfd29yaygmbWFjLT5hc3NvY2luZm8ud29yayk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfZXZlbnQuYwppbmRleCAwYTUyYmJkLi44Y2M4ZjNmIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMKQEAgLTY3LDYgKzY3LDcgQEAKIAkiYXV0aGVudGljYXRpbmcgZmFpbGVkIiwKIAkiYXV0aGVudGljYXRpbmcgdGltZWQgb3V0IiwKIAkiYXNzb2NpYXRpbmcgZmFpbGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUgbmV0d29yayB3YXMgZm91bmQiLAorCSJkaXNhc3NvY2lhdGVkIiwKIH07CiAKIApAQCAtMTI4LDEzICsxMjksNDIgQEAKIGllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBpbnQgZXZlbnQsIHZvaWQgKmV2ZW50X2N0eCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ldmVudCAqZXZlbnRwdHIsICp0bXA7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWNoYXIgKm1zZzsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXR3b3JrOwogCQogCWlmIChldmVudCA+PSAwKSB7Ci0JCW1zZyA9IGV2ZW50X2Rlc2NyaXB0aW9uc1tldmVudF07Ci0JCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKLQkJd2lyZWxlc3Nfc2VuZF9ldmVudChtYWMtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIG1zZyk7CisJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwkJaW50IHdlX2V2ZW50OworCQljaGFyICptc2cgPSBOVUxMOworCisJCXN3aXRjaChldmVudCkgeworCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFRDoKKwkJCW5ldHdvcmsgPSAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKWV2ZW50X2N0eDsKKwkJCXdycXUuZGF0YS5sZW5ndGggPSAwOworCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJm5ldHdvcmstPmJzc2lkWzBdLCBFVEhfQUxFTik7CisJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJd2VfZXZlbnQgPSBTSU9DR0lXQVA7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQ6CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCXdycXUuZGF0YS5mbGFncyA9IDA7CisJCQltZW1zZXQoJndycXUsICdcMCcsIHNpemVvZiAodW5pb24gaXdyZXFfZGF0YSkpOworCQkJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCXdlX2V2ZW50ID0gU0lPQ0dJV0FQOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9TQ0FOX0ZJTklTSEVEOgorCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJbWVtc2V0KCZ3cnF1LCAnXDAnLCBzaXplb2YgKHVuaW9uIGl3cmVxX2RhdGEpKTsKKwkJCXdlX2V2ZW50ID0gU0lPQ0dJV1NDQU47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1zZyA9IGV2ZW50X2Rlc2NyaXB0aW9uc1tldmVudF07CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CisJCQl3ZV9ldmVudCA9IElXRVZDVVNUT007CisJCQlicmVhazsKKwkJfQorCQl3aXJlbGVzc19zZW5kX2V2ZW50KG1hYy0+ZGV2LCB3ZV9ldmVudCwgJndycXUsIG1zZyk7CiAJfQogCiAJaWYgKCFsaXN0X2VtcHR5KCZtYWMtPmV2ZW50cykpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYwppbmRleCBmZWJjNTFkLi5jYzZjZDU2IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKQEAgLTE4MCw5ICsxODAsMjEgQEAKIAlpZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihtYWMsICYoKCpwa3QpLT5oZWFkZXIpLCBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKIAogCS8qIEZpbGwgaW4gY2FwYWJpbGl0eSBJbmZvICovCi0JKCpwa3QpLT5jYXBhYmlsaXR5ID0gKG1hYy0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikgfHwgKG1hYy0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKSA/Ci0JCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9FU1MpIDoKLQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0lCU1MpOworCXN3aXRjaCAobWFjLT5pZWVlLT5pd19tb2RlKSB7CisJY2FzZSBJV19NT0RFX0lORlJBOgorCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfRVNTKTsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9BVVRPOgorCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBuZXQtPmNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTfFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogYmxlaC4gd2UgZG9uJ3QgZXZlciBnbyB0byB0aGVzZSBtb2RlcyAqLworCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIGl3X21vZGUhXG4iKTsKKwkJYnJlYWs7CisJfQogCS8qIE5lZWQgdG8gYWRkIHRoaXMKIAkoKnBrdCktPmNhcGFiaWxpdHkgfD0gbWFjLT5pZWVlLT5zaG9ydF9zbG90ID8gCiAJCQljcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKSA6IDA7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCmluZGV4IDYwZjA2YTMxLi42MjUyYmUyIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYwpAQCAtNDUsNiArNDUsOCBAQAogCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9kaXNhc3NvYyA9IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Rpc2Fzc29jOwogCXNvZnRtYWMtPnNjYW5pbmZvID0gTlVMTDsKIAorCXNvZnRtYWMtPmFzc29jaW5mby5zY2FuX3JldHJ5ID0gSUVFRTgwMjExU09GVE1BQ19BU1NPQ19TQ0FOX1JFVFJZX0xJTUlUOworCiAJLyogVE9ETzogaW5pdGlhbGlzZSBhbGwgdGhlIG90aGVyIGNhbGxiYWNrcyBpbiB0aGUgaWVlZSBzdHJ1Y3QKIAkgKgkgKG9uY2UgdGhleSdyZSB3cml0dGVuKQogCSAqLwpAQCAtODcsNiArODksOCBAQAogCWllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2NhbihzbSk7CiAJCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CisJc20tPnJ1bm5pbmcgPSAwOworCiAJLyogRnJlZSBhbGwgcGVuZGluZyBhc3NvYyB3b3JrIGl0ZW1zICovCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmc20tPmFzc29jaW5mby53b3JrKTsKIAkKQEAgLTIwMiw2ICsyMDYsOCBAQAogCQlhc3NlcnQoMCk7CiAJaWYgKG1hYy0+dHhyYXRlc19jaGFuZ2UpCiAJCW1hYy0+dHhyYXRlc19jaGFuZ2UoZGV2LCBjaGFuZ2UsICZvbGRyYXRlcyk7CisKKwltYWMtPnJ1bm5pbmcgPSAxOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY19zdGFydCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3NjYW4uYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3NjYW4uYwppbmRleCBiYjlhYjhiLi5kMzFjZjc3IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19zY2FuLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfc2Nhbi5jCkBAIC00Nyw2ICs0Nyw3IEBACiAJc20tPnNjYW5uaW5nID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwogCisJbmV0aWZfdHhfZGlzYWJsZShzbS0+aWVlZS0+ZGV2KTsKIAlyZXQgPSBzbS0+c3RhcnRfc2NhbihzbS0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOwpAQCAtMTE0LDcgKzExNSwxNSBAQAogCQkJLy8gVE9ETzogaXMgdGhpcyBpZiBjb3JyZWN0LCBvciBzaG91bGQgd2UgZG8gdGhpcyBvbmx5IGlmIHNjYW5uaW5nIGZyb20gYXNzb2MgcmVxdWVzdD8KIAkJCWlmIChzbS0+YXNzb2NpbmZvLnJlcV9lc3NpZC5sZW4pCiAJCQkJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShzbSwgJnNtLT5hc3NvY2luZm8ucmVxX2Vzc2lkLCBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRLCAwKTsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CisJCQlpZiAodW5saWtlbHkoIXNtLT5ydW5uaW5nKSkgeworCQkJCS8qIFByZXZlbnQgcmVzY2hlZHVsZSBvbiB3b3JrcXVldWUgZmx1c2ggKi8KKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCQkJCWJyZWFrOworCQkJfQogCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzaS0+c29mdG1hY19zY2FuLCBJRUVFODAyMTFTT0ZUTUFDX1BST0JFX0RFTEFZKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSB7CiAJCQlkcHJpbnRrKFBGWCAiTm90IHByb2JpbmcgQ2hhbm5lbCAlZCAobm90IGFsbG93ZWQgaGVyZSlcbiIsIHNpLT5jaGFubmVsc1tjdXJyZW50X2NoYW5uZWxfaWR4XS5jaGFubmVsKTsKQEAgLTIzOSw2ICsyNDgsNyBAQAogCQlpZiAobmV0KQogCQkJc20tPnNldF9jaGFubmVsKHNtLT5kZXYsIG5ldC0+Y2hhbm5lbCk7CiAJfQorCW5ldGlmX3dha2VfcXVldWUoc20tPmllZWUtPmRldik7CiAJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhzbSwgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9TQ0FOX0ZJTklTSEVELCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZCk7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwppbmRleCBiNTU5YWE5Li4yN2VkYjJiIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKQEAgLTI3LDcgKzI3LDggQEAKICNpbmNsdWRlICJpZWVlODAyMTFzb2Z0bWFjX3ByaXYuaCIKIAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0KKy8qIGZvciBpc19icm9hZGNhc3RfZXRoZXJfYWRkciBhbmQgaXNfemVyb19ldGhlcl9hZGRyICovCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KIAogaW50CiBpZWVlODAyMTFzb2Z0bWFjX3d4X3RyaWdnZXJfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKQEAgLTQxLDEzICs0MiwyMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF90cmlnZ2VyX3NjYW4pOwogCiAKKy8qIGlmIHdlJ3JlIHN0aWxsIHNjYW5uaW5nLCByZXR1cm4gLUVBR0FJTiBzbyB0aGF0IHVzZXJzcGFjZSB0b29scworICogY2FuIGdldCB0aGUgY29tcGxldGUgc2NhbiByZXN1bHRzLCBvdGhlcndpc2UgcmV0dXJuIDAuICovCiBpbnQKIGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3NjYW5fcmVzdWx0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKIAkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAogCQkJCSAgICAgY2hhciAqZXh0cmEpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwlpZiAoc20tPnNjYW5uaW5nKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc20tPmllZWUsIGluZm8sIGRhdGEsIGV4dHJhKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3NjYW5fcmVzdWx0cyk7CkBAIC03Myw3ICs4NCw2IEBACiAJCQlzbS0+YXNzb2NpbmZvLnN0YXRpY19lc3NpZCA9IDE7CiAJCX0KIAl9Ci0Jc20tPmFzc29jaW5mby5zY2FuX3JldHJ5ID0gSUVFRTgwMjExU09GVE1BQ19BU1NPQ19TQ0FOX1JFVFJZX0xJTUlUOwogCiAJLyogc2V0IG91ciByZXF1ZXN0ZWQgRVNTSUQgbGVuZ3RoLgogCSAqIElmIGFwcGxpY2FibGUsIHdlIGhhdmUgYWxyZWFkeSBjb3BpZWQgdGhlIGRhdGEgaW4gKi8KQEAgLTMwMCw4ICszMTAsNiBAQAogCQkJICAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYW55W10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb2ZmW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIHNhbml0eSBjaGVjayAqLwpAQCAtMzEwLDEwICszMTgsMTcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFtZW1jbXAoYW55LCBkYXRhLT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKSB8fAotCSAgICAhbWVtY21wKG9mZiwgZGF0YS0+YXBfYWRkci5zYV9kYXRhLCBFVEhfQUxFTikpIHsKLQkJc2NoZWR1bGVfd29yaygmbWFjLT5hc3NvY2luZm8ud29yayk7Ci0JCWdvdG8gb3V0OworCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihkYXRhLT5hcF9hZGRyLnNhX2RhdGEpKSB7CisJCS8qIHRoZSBic3NpZCB3ZSBoYXZlIGlzIG5vdCB0byBiZSBmaXhlZCBhbnkgbG9uZ2VyLAorCQkgKiBhbmQgd2Ugc2hvdWxkIHJlYXNzb2NpYXRlIHRvIHRoZSBiZXN0IEFQLiAqLworCQltYWMtPmFzc29jaW5mby5ic3NmaXhlZCA9IDA7CisJCS8qIGZvcmNlIHJlYXNzb2NpYXRpb24gKi8KKwkJbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAwOworCQlpZiAobWFjLT5hc3NvY2lhdGVkKQorCQkJc2NoZWR1bGVfd29yaygmbWFjLT5hc3NvY2luZm8ud29yayk7CisJfSBlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoZGF0YS0+YXBfYWRkci5zYV9kYXRhKSkgeworCQkvKiB0aGUgYnNzaWQgd2UgaGF2ZSBpcyBubyBsb25nZXIgZml4ZWQgKi8KKwkJbWFjLT5hc3NvY2luZm8uYnNzZml4ZWQgPSAwOwogICAgICAgICB9IGVsc2UgewogCQlpZiAoIW1lbWNtcChtYWMtPmFzc29jaW5mby5ic3NpZCwgZGF0YS0+YXBfYWRkci5zYV9kYXRhLCBFVEhfQUxFTikpIHsKIAkJCWlmIChtYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyB8fCBtYWMtPmFzc29jaWF0ZWQpIHsKQEAgLTMyMywxMiArMzM4LDE0IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBjb3B5IG5ldyB2YWx1ZSBpbiBkYXRhLT5hcF9hZGRyLnNhX2RhdGEgdG8gYnNzaWQgKi8KIAkJCW1lbWNweShtYWMtPmFzc29jaW5mby5ic3NpZCwgZGF0YS0+YXBfYWRkci5zYV9kYXRhLCBFVEhfQUxFTik7Ci0JCX0JCisJCX0KKwkJLyogdGVsbCB0aGUgb3RoZXIgY29kZSB0aGF0IHRoaXMgYnNzaWQgc2hvdWxkIGJlIHVzZWQgbm8gbWF0dGVyIHdoYXQgKi8KKwkJbWFjLT5hc3NvY2luZm8uYnNzZml4ZWQgPSAxOwogCQkvKiBxdWV1ZSBhc3NvY2lhdGUgaWYgbmV3IGJzc2lkIG9yIChvbGQgb25lIGFnYWluIGFuZCBub3QgYXNzb2NpYXRlZCkgKi8KIAkJc2NoZWR1bGVfd29yaygmbWFjLT5hc3NvY2luZm8ud29yayk7CiAgICAgICAgIH0KIAotb3V0OgorIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCBkYzIwNmYxLi4wYTI3NzQ1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC0xMjU3LDcgKzEyNTcsNyBAQAogCWdvdG8gb3V0OwogfQogCi1tb2R1bGVfaW5pdChpbmV0X2luaXQpOworZnNfaW5pdGNhbGwoaW5ldF9pbml0KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FoNC5jIGIvbmV0L2lwdjQvYWg0LmMKaW5kZXggZTE2ZDhiNC4uZTJlNDc3MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWg0LmMKKysrIGIvbmV0L2lwdjQvYWg0LmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYWhfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgYWhfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGFoX2hsZW47CiAJc3RydWN0IGlwaGRyICppcGg7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IDA0MWRhZGQuLjQ3NDlkNTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC05MjgsNyArOTI4LDggQEAKICAqCVJlY2VpdmUgYW4gYXJwIHJlcXVlc3QgZnJvbSB0aGUgZGV2aWNlIGxheWVyLgogICovCiAKLWludCBhcnBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3N0YXRpYyBpbnQgYXJwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CiAJc3RydWN0IGFycGhkciAqYXJwOwogCkBAIC0xNDE3LDcgKzE0MTgsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGFycF9icm9rZW5fb3BzKTsKIEVYUE9SVF9TWU1CT0woYXJwX2ZpbmQpOwotRVhQT1JUX1NZTUJPTChhcnBfcmN2KTsKIEVYUE9SVF9TWU1CT0woYXJwX2NyZWF0ZSk7CiBFWFBPUlRfU1lNQk9MKGFycF94bWl0KTsKIEVYUE9SVF9TWU1CT0woYXJwX3NlbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDgxYzJmNzguLjU0NDE5YjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTE1NTYsNyArMTU1Niw2IEBACiAjZW5kaWYKIH0KIAotRVhQT1JUX1NZTUJPTChkZXZpbmV0X2lvY3RsKTsKIEVYUE9SVF9TWU1CT0woaW5fZGV2X2ZpbmlzaF9kZXN0cm95KTsKIEVYUE9SVF9TWU1CT0woaW5ldF9zZWxlY3RfYWRkcik7CiBFWFBPUlRfU1lNQk9MKGluZXRkZXZfYnlfaW5kZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNC5jIGIvbmV0L2lwdjQvZXNwNC5jCmluZGV4IGJmODhjNjIuLjlkMTg4MWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2VzcDQuYworKysgYi9uZXQvaXB2NC9lc3A0LmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogICogZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHN1cHBvcnQgdHJ1bmNhdGVkIGRhdGEsIHdoaWNoIGlzIHRoZSByZWNvbW1lbmRlZAogICogYW5kIGNvbW1vbiBjYXNlLgogICovCi1zdGF0aWMgaW50IGVzcF9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKmRlY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBlc3BfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwX2VzcF9oZHIgKmVzcGg7CkBAIC0yMDgsOSArMjA4LDYgQEAKIAkJc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXAgPSB4LT5lbmNhcDsKIAkJc3RydWN0IHVkcGhkciAqdWg7CiAKLQkJaWYgKGVuY2FwLT5lbmNhcF90eXBlICE9IGRlY2FwLT5kZWNhcF90eXBlKQotCQkJZ290byBvdXQ7Ci0KIAkJdWggPSAoc3RydWN0IHVkcGhkciAqKShpcGggKyAxKTsKIAkJZW5jYXBfbGVuID0gKHZvaWQqKWVzcGggLSAodm9pZCopdWg7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKaW5kZXggNGUzZDM4MS4uY2RkZTk2MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTY2Niw0ICs2NjYsMyBAQAogfQogCiBFWFBPUlRfU1lNQk9MKGluZXRfYWRkcl90eXBlKTsKLUVYUE9SVF9TWU1CT0woaXBfcnRfaW9jdGwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3RyaWUuYyBiL25ldC9pcHY0L2ZpYl90cmllLmMKaW5kZXggY2NkM2VmYy4uOTVhNjM5ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3RyaWUuYworKysgYi9uZXQvaXB2NC9maWJfdHJpZS5jCkBAIC01MCw3ICs1MCw3IEBACiAgKgkJUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+CiAgKi8KIAotI2RlZmluZSBWRVJTSU9OICIwLjQwNiIKKyNkZWZpbmUgVkVSU0lPTiAiMC40MDciCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzE0LDExICszMTQsNiBAQAogCWtmcmVlKGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbGVhZiwgcmN1KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2xlYWYoc3RydWN0IGxlYWYgKmxlYWYpCi17Ci0JY2FsbF9yY3UoJmxlYWYtPnJjdSwgX19sZWFmX2ZyZWVfcmN1KTsKLX0KLQogc3RhdGljIHZvaWQgX19sZWFmX2luZm9fZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewogCWtmcmVlKGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbGVhZl9pbmZvLCByY3UpKTsKQEAgLTM1Nyw3ICszNTIsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHRub2RlX2ZyZWUoc3RydWN0IHRub2RlICp0bikKIHsKLQljYWxsX3JjdSgmdG4tPnJjdSwgX190bm9kZV9mcmVlX3JjdSk7CisJaWYoSVNfTEVBRih0bikpIHsKKwkJc3RydWN0IGxlYWYgKmwgPSAoc3RydWN0IGxlYWYgKikgdG47CisJCWNhbGxfcmN1X2JoKCZsLT5yY3UsIF9fbGVhZl9mcmVlX3JjdSk7CisJfQorICAgICAgICBlbHNlCisJCWNhbGxfcmN1KCZ0bi0+cmN1LCBfX3Rub2RlX2ZyZWVfcmN1KTsKIH0KIAogc3RhdGljIHN0cnVjdCBsZWFmICpsZWFmX25ldyh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IDk4MzFmZDIuLjJhMDQ1NTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTExMDcsNyArMTEwNyw3IEBACiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaW50IGVycjsKIAogCQllcnIgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVAsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCmluZGV4IGVmNzM2NmYuLmVlOWI1NTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCkBAIC00Myw4ICs0Myw2IEBACiAJcmV0dXJuIHRiOwogfQogCi1FWFBPUlRfU1lNQk9MKGluZXRfYmluZF9idWNrZXRfY3JlYXRlKTsKLQogLyoKICAqIENhbGxlciBtdXN0IGhvbGQgaGFzaGJ1Y2tldCBsb2NrIGZvciB0aGlzIHRiIHdpdGggbG9jYWwgQkggZGlzYWJsZWQKICAqLwpAQCAtNjQsOCArNjIsNiBAQAogCWluZXRfY3NrKHNrKS0+aWNza19iaW5kX2hhc2ggPSB0YjsKIH0KIAotRVhQT1JUX1NZTUJPTChpbmV0X2JpbmRfaGFzaCk7Ci0KIC8qCiAgKiBHZXQgcmlkIG9mIGFueSByZWZlcmVuY2VzIHRvIGEgbG9jYWwgcG9ydCBoZWxkIGJ5IHRoZSBnaXZlbiBzb2NrLgogICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggMDkyM2FkZC4uOWYwYmI1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtMTE2LDYgKzExNiw3IEBACiAKIHRvb19tYW55X2hvcHM6CiAgICAgICAgIC8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi8KKyAgICAgICAgSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKICAgICAgICAgaWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApOwogZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDJhOGFkZGEuLmRhNzM0YzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtMzA0LDEzICszMDQsMTcgQEAKIAogLyogQ3JlYXRpb24gcHJpbWl0aXZlcy4gKi8KIAotc3RhdGljIHN0cnVjdCBpcHEgKmlwX2ZyYWdfaW50ZXJuKHVuc2lnbmVkIGludCBoYXNoLCBzdHJ1Y3QgaXBxICpxcF9pbikKK3N0YXRpYyBzdHJ1Y3QgaXBxICppcF9mcmFnX2ludGVybihzdHJ1Y3QgaXBxICpxcF9pbikKIHsKIAlzdHJ1Y3QgaXBxICpxcDsKICNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwogCXdyaXRlX2xvY2soJmlwZnJhZ19sb2NrKTsKKwloYXNoID0gaXBxaGFzaGZuKHFwX2luLT5pZCwgcXBfaW4tPnNhZGRyLCBxcF9pbi0+ZGFkZHIsCisJCQkgcXBfaW4tPnByb3RvY29sKTsKICNpZmRlZiBDT05GSUdfU01QCiAJLyogV2l0aCBTTVAgcmFjZSB3ZSBoYXZlIHRvIHJlY2hlY2sgaGFzaCB0YWJsZSwgYmVjYXVzZQogCSAqIHN1Y2ggZW50cnkgY291bGQgYmUgY3JlYXRlZCBvbiBvdGhlciBjcHUsIHdoaWxlIHdlCkBAIC0zNDUsNyArMzQ5LDcgQEAKIH0KIAogLyogQWRkIGFuIGVudHJ5IHRvIHRoZSAnaXBxJyBxdWV1ZSBmb3IgYSBuZXdseSByZWNlaXZlZCBJUCBkYXRhZ3JhbS4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXBxICppcF9mcmFnX2NyZWF0ZSh1bnNpZ25lZCBoYXNoLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdTMyIHVzZXIpCitzdGF0aWMgc3RydWN0IGlwcSAqaXBfZnJhZ19jcmVhdGUoc3RydWN0IGlwaGRyICppcGgsIHUzMiB1c2VyKQogewogCXN0cnVjdCBpcHEgKnFwOwogCkBAIC0zNzEsNyArMzc1LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcXAtPmxvY2spOwogCWF0b21pY19zZXQoJnFwLT5yZWZjbnQsIDEpOwogCi0JcmV0dXJuIGlwX2ZyYWdfaW50ZXJuKGhhc2gsIHFwKTsKKwlyZXR1cm4gaXBfZnJhZ19pbnRlcm4ocXApOwogCiBvdXRfbm9tZW06CiAJTElNSVRfTkVUREVCVUcoS0VSTl9FUlIgImlwX2ZyYWdfY3JlYXRlOiBubyBtZW1vcnkgbGVmdCAhXG4iKTsKQEAgLTM4NywxMSArMzkxLDEyIEBACiAJX191MzIgc2FkZHIgPSBpcGgtPnNhZGRyOwogCV9fdTMyIGRhZGRyID0gaXBoLT5kYWRkcjsKIAlfX3U4IHByb3RvY29sID0gaXBoLT5wcm90b2NvbDsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGlwcWhhc2hmbihpZCwgc2FkZHIsIGRhZGRyLCBwcm90b2NvbCk7CisJdW5zaWduZWQgaW50IGhhc2g7CiAJc3RydWN0IGlwcSAqcXA7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAKIAlyZWFkX2xvY2soJmlwZnJhZ19sb2NrKTsKKwloYXNoID0gaXBxaGFzaGZuKGlkLCBzYWRkciwgZGFkZHIsIHByb3RvY29sKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShxcCwgbiwgJmlwcV9oYXNoW2hhc2hdLCBsaXN0KSB7CiAJCWlmKHFwLT5pZCA9PSBpZAkJJiYKIAkJICAgcXAtPnNhZGRyID09IHNhZGRyCSYmCkBAIC00MDUsNyArNDEwLDcgQEAKIAl9CiAJcmVhZF91bmxvY2soJmlwZnJhZ19sb2NrKTsKIAotCXJldHVybiBpcF9mcmFnX2NyZWF0ZShoYXNoLCBpcGgsIHVzZXIpOworCXJldHVybiBpcF9mcmFnX2NyZWF0ZShpcGgsIHVzZXIpOwogfQogCiAvKiBJcyB0aGUgZnJhZ21lbnQgdG9vIGZhciBhaGVhZCB0byBiZSBwYXJ0IG9mIGlwcT8gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggOTk4MWRjZC4uYWI5OWJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQlyZWFkX3VubG9jaygmaXBncmVfbG9jayk7CiAJCXJldHVybigwKTsKIAl9Ci0JaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUFJPVF9VTlJFQUNILCAwKTsKKwlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApOwogCiBkcm9wOgogCXJlYWRfdW5sb2NrKCZpcGdyZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2lucHV0LmMgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCmluZGV4IDE4ZDdmYWQuLmM5MDI2ZGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfaW5wdXQuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJICoJSW5pdGlhbGlzZSB0aGUgdmlydHVhbCBwYXRoIGNhY2hlIGZvciB0aGUgcGFja2V0LiBJdCBkZXNjcmliZXMKIAkgKglob3cgdGhlIHBhY2tldCB0cmF2ZWxzIGluc2lkZSBMaW51eCBuZXR3b3JraW5nLgogCSAqLyAKLQlpZiAobGlrZWx5KHNrYi0+ZHN0ID09IE5VTEwpKSB7CisJaWYgKHNrYi0+ZHN0ID09IE5VTEwpIHsKIAkJaW50IGVyciA9IGlwX3JvdXRlX2lucHV0KHNrYiwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwgaXBoLT50b3MsCiAJCQkJCSBza2ItPmRldik7CiAJCWlmICh1bmxpa2VseShlcnIpKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggOWJlYmFkMC4uY2JjYWU2NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKIHZvaWQgaXBfb3B0aW9uc19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikgCiB7Ci0JdW5zaWduZWQgY2hhciAqIG9wdHB0ciA9IHNrYi0+bmgucmF3OworCXVuc2lnbmVkIGNoYXIgKiBvcHRwdHIgPSBza2ItPm5oLnJhdyArIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCXN0cnVjdCBpcF9vcHRpb25zICogb3B0ID0gJihJUENCKHNrYiktPm9wdCk7CiAJaW50ICBsID0gb3B0LT5vcHRsZW47CiAJaW50ICBvcHRsZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IGY3NWZmMWQuLmNmZjljM2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC04Niw4ICs4Niw2IEBACiAKIGludCBzeXNjdGxfaXBfZGVmYXVsdF90dGwgPSBJUERFRlRUTDsKIAotc3RhdGljIGludCBpcF9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmKikpOwotCiAvKiBHZW5lcmF0ZSBhIGNoZWNrc3VtIGZvciBhbiBvdXRnb2luZyBJUCBkYXRhZ3JhbS4gKi8KIF9faW5saW5lX18gdm9pZCBpcF9zZW5kX2NoZWNrKHN0cnVjdCBpcGhkciAqaXBoKQogewpAQCAtNDIxLDcgKzQxOSw3IEBACiAgKglzaW5nbGUgZGV2aWNlIGZyYW1lLCBhbmQgcXVldWUgc3VjaCBhIGZyYW1lIGZvciBzZW5kaW5nLgogICovCiAKLXN0YXRpYyBpbnQgaXBfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiopKQoraW50IGlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYqKSkKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgcmF3ID0gMDsKQEAgLTY3Myw2ICs2NzEsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKK0VYUE9SVF9TWU1CT0woaXBfZnJhZ21lbnQpOworCiBpbnQKIGlwX2dlbmVyaWNfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTkwNCw3ICs5MDQsNyBAQAogCQkJICogYmVjYXVzZSB3ZSBoYXZlIG5vIGlkZWEgd2hhdCBmcmFnbWVudCB3aWxsIGJlCiAJCQkgKiB0aGUgbGFzdC4KIAkJCSAqLwotCQkJaWYgKGRhdGFsZW4gPT0gbGVuZ3RoKQorCQkJaWYgKGRhdGFsZW4gPT0gbGVuZ3RoICsgZnJhZ2dhcCkKIAkJCQlhbGxvY2xlbiArPSBydC0+dS5kc3QudHJhaWxlcl9sZW47CiAKIAkJCWlmICh0cmFuc2hkcmxlbikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb21wLmMgYi9uZXQvaXB2NC9pcGNvbXAuYwppbmRleCBjOTUwMjBmLi45NTI3OGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbXAuYworKysgYi9uZXQvaXB2NC9pcGNvbXAuYwpAQCAtODEsOCArODEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgaXBjb21wX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKmRlY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBpcGNvbXBfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTggbmV4dGhkcjsKIAlpbnQgZXJyID0gMDsKQEAgLTIxMSw3ICsyMTAsNyBAQAogCSAgICBza2ItPmguaWNtcGgtPmNvZGUgIT0gSUNNUF9GUkFHX05FRURFRCkKIAkJcmV0dXJuOwogCi0Jc3BpID0gbnRvaGwobnRvaHMoaXBjaC0+Y3BpKSk7CisJc3BpID0gaHRvbmwobnRvaHMoaXBjaC0+Y3BpKSk7CiAJeCA9IHhmcm1fc3RhdGVfbG9va3VwKCh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLAogCSAgICAgICAgICAgICAgICAgICAgICBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVCk7CiAJaWYgKCF4KQpAQCAtMjkxLDExICsyOTAsOCBAQAogCWlmICghc2NyYXRjaGVzKQogCQlyZXR1cm47CiAKLQlmb3JfZWFjaF9jcHUoaSkgewotCQl2b2lkICpzY3JhdGNoID0gKnBlcl9jcHVfcHRyKHNjcmF0Y2hlcywgaSk7Ci0JCWlmIChzY3JhdGNoKQotCQkJdmZyZWUoc2NyYXRjaCk7Ci0JfQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQl2ZnJlZSgqcGVyX2NwdV9wdHIoc2NyYXRjaGVzLCBpKSk7CiAKIAlmcmVlX3BlcmNwdShzY3JhdGNoZXMpOwogfQpAQCAtMzE0LDcgKzMxMCw3IEBACiAKIAlpcGNvbXBfc2NyYXRjaGVzID0gc2NyYXRjaGVzOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQl2b2lkICpzY3JhdGNoID0gdm1hbGxvYyhJUENPTVBfU0NSQVRDSF9TSVpFKTsKIAkJaWYgKCFzY3JhdGNoKQogCQkJcmV0dXJuIE5VTEw7CkBAIC0zNDUsNyArMzQxLDcgQEAKIAlpZiAoIXRmbXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSAqcGVyX2NwdV9wdHIodGZtcywgY3B1KTsKIAkJY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CiAJfQpAQCAtMzg1LDcgKzM4MSw3IEBACiAJaWYgKCF0Zm1zKQogCQlnb3RvIGVycm9yOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsIDApOwogCQlpZiAoIXRmbSkKIAkJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggZWVmMDdiMC4uZWEzOThlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtNDc0LDkgKzQ3NCw2IEBACiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQotCQlnb3RvIG91dDsKLQogCWlwaCA9IHNrYi0+bmguaXBoOwogCiAJcmVhZF9sb2NrKCZpcGlwX2xvY2spOwpAQCAtNTA4LDcgKzUwNSw2IEBACiAJfQogCXJlYWRfdW5sb2NrKCZpcGlwX2xvY2spOwogCi1vdXQ6CiAJcmV0dXJuIC0xOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci5jCmluZGV4IGI1YWQ5YWMuLjZhOWUzNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1X2ludDhfdCB0b3M7CiB9OwogCi1zdGF0aWMgdm9pZCBxdWV1ZV9zYXZlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgbmZfaXBfc2F2ZXJvdXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpcF9ydF9pbmZvICpydF9pbmZvID0gbmZfaW5mb19yZXJvdXRlKGluZm8pOwogCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcXVldWVfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIGludCBuZl9pcF9yZXJvdXRlKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IG5mX2luZm8gKmluZm8pCiB7CiAJY29uc3Qgc3RydWN0IGlwX3J0X2luZm8gKnJ0X2luZm8gPSBuZl9pbmZvX3Jlcm91dGUoaW5mbyk7CiAKQEAgLTE2MSwyMCArMTYxLDU0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgaXBfcmVyb3V0ZSA9IHsKLQkucmVyX3NpemUJPSBzaXplb2Yoc3RydWN0IGlwX3J0X2luZm8pLAotCS5zYXZlCQk9IHF1ZXVlX3NhdmUsCi0JLnJlcm91dGUJPSBxdWV1ZV9yZXJvdXRlLAordW5zaWduZWQgaW50IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOworCXVuc2lnbmVkIGludCBjc3VtID0gMDsKKworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoaG9vayAhPSBORl9JUF9QUkVfUk9VVElORyAmJiBob29rICE9IE5GX0lQX0xPQ0FMX0lOKQorCQkJYnJlYWs7CisJCWlmICgocHJvdG9jb2wgPT0gMCAmJiAhKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkgfHwKKwkJICAgICFjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJICAgIAkgICAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBwcm90b2NvbCwKKwkJCQkgICAgICAgc2tiLT5jc3VtKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJaWYgKHByb3RvY29sID09IDApCisJCQlza2ItPmNzdW0gPSAwOworCQllbHNlCisJCQlza2ItPmNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsCisJCQkJCQkgICAgICAgcHJvdG9jb2wsIDApOworCQljc3VtID0gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKKwl9CisJcmV0dXJuIGNzdW07Cit9CisKK0VYUE9SVF9TWU1CT0wobmZfaXBfY2hlY2tzdW0pOworCitzdGF0aWMgc3RydWN0IG5mX2FmaW5mbyBuZl9pcF9hZmluZm8gPSB7CisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5jaGVja3N1bQk9IG5mX2lwX2NoZWNrc3VtLAorCS5zYXZlcm91dGUJPSBuZl9pcF9zYXZlcm91dGUsCisJLnJlcm91dGUJPSBuZl9pcF9yZXJvdXRlLAorCS5yb3V0ZV9rZXlfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXBfcnRfaW5mbyksCiB9OwogCiBzdGF0aWMgaW50IGlwdjRfbmV0ZmlsdGVyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoUEZfSU5FVCwgJmlwX3Jlcm91dGUpOworCXJldHVybiBuZl9yZWdpc3Rlcl9hZmluZm8oJm5mX2lwX2FmaW5mbyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdjRfbmV0ZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKFBGX0lORVQpOworCW5mX3VucmVnaXN0ZXJfYWZpbmZvKCZuZl9pcF9hZmluZm8pOwogfQogCiBtb2R1bGVfaW5pdChpcHY0X25ldGZpbHRlcl9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggODgyYjg0Mi4uZDQwNzI1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTY5LDYgKzY5LDcgQEAKIAl0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSAoRVhQRVJJTUVOVEFMKScKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBJUF9ORl9DT05OVFJBQ0sgJiYgTkVURklMVEVSX05FVExJTksKIAlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyE9eSB8fCBORVRGSUxURVJfTkVUTElOSyE9bQorCWRlcGVuZHMgb24gSVBfTkZfTkFUPW4gfHwgSVBfTkZfTkFUCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZQogCkBAIC0xNjksOCArMTcwLDggQEAKIAkgIERvY3VtZW50YXRpb24vbW9kdWxlcy50eHQuICBJZiB1bnN1cmUsIHNheSBgTicuCiAKIGNvbmZpZyBJUF9ORl9IMzIzCi0JdHJpc3RhdGUgICdILjMyMyBwcm90b2NvbCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLCisJdHJpc3RhdGUgICdILjMyMyBwcm90b2NvbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpJworCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIEguMzIzIGlzIGEgVm9JUCBzaWduYWxsaW5nIHByb3RvY29sIGZyb20gSVRVLVQuIEFzIG9uZSBvZiB0aGUgbW9zdAogCSAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmQKQEAgLTIyMSwxNiArMjIyLDYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUF9ORl9NQVRDSF9NVUxUSVBPUlQKLQl0cmlzdGF0ZSAiTXVsdGlwbGUgcG9ydCBtYXRjaCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMKLQloZWxwCi0JICBNdWx0aXBvcnQgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBUQ1Agb3IgVURQIHBhY2tldHMgYmFzZWQgb24KLQkgIGEgc2VyaWVzIG9mIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwb3J0czogbm9ybWFsbHkgYSBydWxlIGNhbiBvbmx5Ci0JICBtYXRjaCBhIHNpbmdsZSByYW5nZSBvZiBwb3J0cy4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBJUF9ORl9NQVRDSF9UT1MKIAl0cmlzdGF0ZSAiVE9TIG1hdGNoIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUwpAQCAtMjcyLDEyICsyNjMsMTIgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUF9ORl9NQVRDSF9BSF9FU1AKLQl0cmlzdGF0ZSAiQUgvRVNQIG1hdGNoIHN1cHBvcnQiCitjb25maWcgSVBfTkZfTUFUQ0hfQUgKKwl0cmlzdGF0ZSAiQUggbWF0Y2ggc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTCiAJaGVscAotCSAgVGhlc2UgdHdvIG1hdGNoIGV4dGVuc2lvbnMgKGBhaCcgYW5kIGBlc3AnKSBhbGxvdyB5b3UgdG8gbWF0Y2ggYQotCSAgcmFuZ2Ugb2YgU1BJcyBpbnNpZGUgQUggb3IgRVNQIGhlYWRlcnMgb2YgSVBTZWMgcGFja2V0cy4KKwkgIFRoaXMgbWF0Y2ggZXh0ZW5zaW9uIGFsbG93cyB5b3UgdG8gbWF0Y2ggYSByYW5nZSBvZiBTUElzCisJICBpbnNpZGUgQUggaGVhZGVyIG9mIElQU2VjIHBhY2tldHMuCiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0zNTQsNyArMzQ1LDcgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSVBfTkZfVEFSR0VUX1VMT0cKLQl0cmlzdGF0ZSAiVUxPRyB0YXJnZXQgc3VwcG9ydCAoT0JTT0xFVEUpIgorCXRyaXN0YXRlICJVTE9HIHRhcmdldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMKIAktLS1oZWxwLS0tCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCBmMmNkOWE2Li40NjFjYjFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC01MywxMyArNTMsMTIgQEAKICMgbWF0Y2hlcwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVCkgKz0gaXB0X2hhc2hsaW1pdC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRSkgKz0gaXB0X2lwcmFuZ2Uubwotb2JqLSQoQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVCkgKz0gaXB0X211bHRpcG9ydC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVIpICs9IGlwdF9vd25lci5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfVE9TKSArPSBpcHRfdG9zLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQpICs9IGlwdF9yZWNlbnQubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0VDTikgKz0gaXB0X2Vjbi5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUCkgKz0gaXB0X2RzY3Aubwotb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0FIX0VTUCkgKz0gaXB0X2FoLm8gaXB0X2VzcC5vCitvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUgpICs9IGlwdF9haC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfVFRMKSArPSBpcHRfdHRsLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSkgKz0gaXB0X2FkZHJ0eXBlLm8KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggYTQ0YTVkNy4uZDBkMTkxOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC02NDYsNyArNjQ2LDcgQEAKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKG5ld2luZm8tPmVudHJpZXNbaV0gJiYgbmV3aW5mby0+ZW50cmllc1tpXSAhPSBlbnRyeTApCiAJCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tpXSwgZW50cnkwLCBuZXdpbmZvLT5zaXplKTsKIAl9CkBAIC02OTYsNyArNjk2LDcgQEAKIAkJCSAgIGNvdW50ZXJzLAogCQkJICAgJmkpOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSBjdXJjcHUpCiAJCQljb250aW51ZTsKIAkJaSA9IDA7CkBAIC05NDgsNyArOTQ4LDcgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwotCWlmIChwcml2YXRlLT5udW1iZXIgIT0gcGFkZGMtPm51bV9jb3VudGVycykgeworCWlmIChwcml2YXRlLT5udW1iZXIgIT0gdG1wLm51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwppbmRleCBkMGQzNzljLi5kN2M0NzJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCkBAIC0xODEsMzMgKzE4MSwyNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhcnB0YWJsZV9maWx0ZXJfaW5pdCh2b2lkKQogewotCWludCByZXQsIGk7CisJaW50IHJldDsKIAogCS8qIFJlZ2lzdGVyIHRhYmxlICovCiAJcmV0ID0gYXJwdF9yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlciwgJmluaXRpYWxfdGFibGUucmVwbCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnB0X29wcyk7IGkrKykKLQkJaWYgKChyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZhcnB0X29wc1tpXSkpIDwgMCkKLQkJCWdvdG8gY2xlYW51cF9ob29rczsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhhcnB0X29wcywgQVJSQVlfU0laRShhcnB0X29wcykpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfdGFibGU7CiAJcmV0dXJuIHJldDsKIAotY2xlYW51cF9ob29rczoKLQl3aGlsZSAoLS1pID49IDApCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmYXJwdF9vcHNbaV0pOwotCitjbGVhbnVwX3RhYmxlOgogCWFycHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFycHRhYmxlX2ZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnB0X29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZhcnB0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGFycHRfb3BzLCBBUlJBWV9TSVpFKGFycHRfb3BzKSk7CiAJYXJwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwppbmRleCBjZWFhYmMxLi5hMjk3ZGE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJc3RydWN0IGlwX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJZWNhY2hlID0gJnBlcl9jcHUoaXBfY29ubnRyYWNrX2VjYWNoZSwgY3B1KTsKIAkJaWYgKGVjYWNoZS0+Y3QpCiAJCQlpcF9jb25udHJhY2tfcHV0KGVjYWNoZS0+Y3QpOwpAQCAtMTMxOCw2ICsxMzE4LDcgQEAKIAkJCS50dXBsZS5kc3QudS50Y3AucG9ydDsKIAkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQogCQkJLnR1cGxlLmRzdC5pcDsKKwkJbWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpOwogCiAJCURFQlVHUCgiU09fT1JJR0lOQUxfRFNUOiAldS4ldS4ldS4ldSAldVxuIiwKIAkJICAgICAgIE5JUFFVQUQoc2luLnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi5zaW5fcG9ydCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCmluZGV4IGRhZWIxMzkuLjUxOGY1ODEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKQEAgLTksMzcgKzksNiBAQAogICogSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PgogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8KLSAqCi0gKiBDaGFuZ2VzOgotICogCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCi0gKgotICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCi0gKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCi0gKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCi0gKgkgIDMuIE1pbm9yIGZpeGVzCi0gKgotICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMwotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICAyLiBBdm9pZCBleGNlc3NpdmUgc3RhY2sgdXNhZ2UgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQotICogCSAgMy4gQWRkZWQgc3VwcG9ydCBmb3Igbm9uLWxpbmVhciBza2IgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQotICogCSAgNC4gRml4ZWQgbWlzc2luZyBILjI0NSBtb2R1bGUgb3duZXIgKFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDUuIEF2b2lkIGxvbmcgUkFTIGV4cGVjdGF0aW9uIGNoYWlucyAoUGF0cmljayBNY0hhcmR5KQotICogCSAgNi4gRml4ZWQgaW5jb3JyZWN0IF9fZXhpdCBhdHRyaWJ1dGUgKFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDcuIEVsaW1pbmF0ZWQgdW5uZWNlc3NhcnkgcmV0dXJuIGNvZGUKLSAqIAkgIDguIEZpeGVkIGluY29ycmVjdCB1c2Ugb2YgTkFUIGRhdGEgZnJvbSBjb25udHJhY2sgY29kZSAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICA5LiBGaXhlZCBUVEwgY2FsY3VsYXRpb24gZXJyb3IgaW4gUkNGCi0gKiAJICAxMC4gQWRkZWQgVFRMIHN1cHBvcnQgaW4gUlJRCi0gKiAJICAxMS4gQmV0dGVyIHN1cHBvcnQgZm9yIHNlcGFyYXRlIFRQS1QgaGVhZGVyIGFuZCBkYXRhCi0gKgotICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKLSAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQotICogCSAgMy4gU3BsaXR0ZWQgQVNOLjEgY29kZSBhbmQgZGF0YSAoc3VnZ2VzdGVkIGJ5IFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDQuIFNvcnQgQVNOLjEgZGF0YSB0byBhdm9pZCBmb3J3YXJkaW5nIGRlY2xhcmF0aW9ucyAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICA1LiBSZXNldCBuZXh0IFRQS1QgZGF0YSBsZW5ndGggaW4gZ2V0X3Rwa3RfZGF0YSgpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNTQsOCArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIAotI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgiCi0KICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKICNlbHNlCkBAIC02Myw2ICszMCwxMCBAQAogI2VuZGlmCiAKIC8qIFBhcmFtZXRlcnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9ycnFfdHRsID0gMzAwOworbW9kdWxlX3BhcmFtKGRlZmF1bHRfcnJxX3R0bCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfcnJxX3R0bCwgInVzZSB0aGlzIFRUTCBpZiBpdCdzIG1pc3NpbmcgaW4gUlJRIik7CisKIHN0YXRpYyBpbnQgZ2tyb3V0ZWRfb25seSA9IDE7CiBtb2R1bGVfcGFyYW0oZ2tyb3V0ZWRfb25seSwgaW50LCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZ2tyb3V0ZWRfb25seSwgIm9ubHkgYWNjZXB0IGNhbGxzIGZyb20gZ2F0ZWtlZXBlciIpOwpAQCAtMTkxLDYgKzE2Miw4IEBACiAKIAkvKiBWYWxpZGF0ZSBUUEtUIGxlbmd0aCAqLwogCXRwa3RsZW4gPSB0cGt0WzJdICogMjU2ICsgdHBrdFszXTsKKwlpZiAodHBrdGxlbiA8IDQpCisJCWdvdG8gY2xlYXJfb3V0OwogCWlmICh0cGt0bGVuID4gdGNwZGF0YWxlbikgewogCQlpZiAodGNwZGF0YWxlbiA9PSA0KSB7CS8qIFNlcGFyYXRlIFRQS1QgaGVhZGVyICovCiAJCQkvKiBOZXRtZWV0aW5nIHNlbmRzIFRQS1QgaGVhZGVyIGFuZCBkYXRhIHNlcGFyYXRlbHkgKi8KQEAgLTIyMiw4ICsxOTUsOCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBnZXRfaDI0NV9hZGRyKHVuc2lnbmVkIGNoYXIgKmRhdGEsIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCSAgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpCitzdGF0aWMgaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCkKIHsKIAl1bnNpZ25lZCBjaGFyICpwOwogCkBAIC0xMzAyLDcgKzEyNzUsNyBAQAogCQlERUJVR1AoImlwX2N0X3JhczogUlJRIFRUTCA9ICV1IHNlY29uZHNcbiIsIHJycS0+dGltZVRvTGl2ZSk7CiAJCWluZm8tPnRpbWVvdXQgPSBycnEtPnRpbWVUb0xpdmU7CiAJfSBlbHNlCi0JCWluZm8tPnRpbWVvdXQgPSAwOworCQlpbmZvLT50aW1lb3V0ID0gZGVmYXVsdF9ycnFfdHRsOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzEzLDE4ICsxNjg2LDE3IEBACiBtb2R1bGVfaW5pdChpbml0KTsKIG1vZHVsZV9leGl0KGZpbmkpOwogCi1FWFBPUlRfU1lNQk9MKGdldF9oMjQ1X2FkZHIpOwotRVhQT1JUX1NZTUJPTChnZXRfaDIyNV9hZGRyKTsKLUVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KTsKLUVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KTsKLUVYUE9SVF9TWU1CT0woc2V0X2gyNDVfYWRkcl9ob29rKTsKLUVYUE9SVF9TWU1CT0woc2V0X2gyMjVfYWRkcl9ob29rKTsKLUVYUE9SVF9TWU1CT0woc2V0X3NpZ19hZGRyX2hvb2spOwotRVhQT1JUX1NZTUJPTChzZXRfcmFzX2FkZHJfaG9vayk7Ci1FWFBPUlRfU1lNQk9MKG5hdF9ydHBfcnRjcF9ob29rKTsKLUVYUE9SVF9TWU1CT0wobmF0X3QxMjBfaG9vayk7Ci1FWFBPUlRfU1lNQk9MKG5hdF9oMjQ1X2hvb2spOwotRVhQT1JUX1NZTUJPTChuYXRfcTkzMV9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9oMjI1X2FkZHIpOworRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdCk7CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfaDI0NV9hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoc2V0X2gyMjVfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9zaWdfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9yYXNfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hdF9ydHBfcnRjcF9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hdF90MTIwX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X2gyNDVfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChuYXRfcTkzMV9ob29rKTsKIAogTU9EVUxFX0FVVEhPUigiSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYwppbmRleCBhZmE1MjUxLi4yNmRmZWNhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmMgLSBCRVIgYW5kIFBFUiBkZWNvZGluZyBsaWJyYXJ5IGZvciBILjMyMwogICogCQkJICAgICAgCSAgICAgY29ubnRyYWNrL05BVCBtb2R1bGUuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA2IGJ5IEppbmcgTWluIFpoYW8gPHpoYW9qaW5nbWluQGhvdG1haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA2IGJ5IEppbmcgTWluIFpoYW8gPHpoYW9qaW5nbWluQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAqCiAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgogICoKQEAgLTE1LDcgKzE1LDcgQEAKICNlbHNlCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNlbmRpZgotI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgiCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaD4KIAogLyogVHJhY2UgRmxhZyAqLwogI2lmbmRlZiBIMzIzX1RSQUNFCkBAIC01MjgsMTQgKzUyOCwxNSBAQAogCiAJCQkvKiBEZWNvZGUgKi8KIAkJCWlmICgoZXJyID0gKERlY29kZXJzW3Nvbi0+dHlwZV0pIChicywgc29uLCBiYXNlLAotCQkJCQkJCSAgbGV2ZWwgKyAxKSkgPgotCQkJICAgIEgzMjNfRVJST1JfU1RPUCkKKwkJCQkJCQkgIGxldmVsICsgMSkpIDwKKwkJCSAgICBIMzIzX0VSUk9SX05PTkUpCiAJCQkJcmV0dXJuIGVycjsKIAogCQkJYnMtPmN1ciA9IGJlZyArIGxlbjsKIAkJCWJzLT5iaXQgPSAwOwogCQl9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsCi0JCQkJCQkJIGxldmVsICsgMSkpKQorCQkJCQkJCSBsZXZlbCArIDEpKSA8CisJCQkgICBIMzIzX0VSUk9SX05PTkUpCiAJCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTU0LDcgKzU1NSw3IEBACiAKIAkvKiBEZWNvZGUgdGhlIGV4dGVuc2lvbiBjb21wb25lbnRzICovCiAJZm9yIChvcHQgPSAwOyBvcHQgPCBibXAyX2xlbjsgb3B0KyssIGkrKywgc29uKyspIHsKLQkJaWYgKHNvbi0+YXR0ciAmIFNUT1ApIHsKKwkJaWYgKGkgPCBmLT51YiAmJiBzb24tPmF0dHIgJiBTVE9QKSB7CiAJCQlQUklOVCgiJSoucyVzXG4iLCAobGV2ZWwgKyAxKSAqIFRBQl9TSVpFLCAiICIsCiAJCQkgICAgICBzb24tPm5hbWUpOwogCQkJcmV0dXJuIEgzMjNfRVJST1JfU1RPUDsKQEAgLTU4NCw4ICs1ODUsOCBAQAogCQliZWcgPSBicy0+Y3VyOwogCiAJCWlmICgoZXJyID0gKERlY29kZXJzW3Nvbi0+dHlwZV0pIChicywgc29uLCBiYXNlLAotCQkJCQkJICBsZXZlbCArIDEpKSA+Ci0JCSAgICBIMzIzX0VSUk9SX1NUT1ApCisJCQkJCQkgIGxldmVsICsgMSkpIDwKKwkJICAgIEgzMjNfRVJST1JfTk9ORSkKIAkJCXJldHVybiBlcnI7CiAKIAkJYnMtPmN1ciA9IGJlZyArIGxlbjsKQEAgLTY2MCwxOCArNjYxLDIwIEBACiAJCQkJCQkJICBpIDwKIAkJCQkJCQkgIGVmZmVjdGl2ZV9jb3VudCA/CiAJCQkJCQkJICBiYXNlIDogTlVMTCwKLQkJCQkJCQkgIGxldmVsICsgMSkpID4KLQkJCSAgICBIMzIzX0VSUk9SX1NUT1ApCisJCQkJCQkJICBsZXZlbCArIDEpKSA8CisJCQkgICAgSDMyM19FUlJPUl9OT05FKQogCQkJCXJldHVybiBlcnI7CiAKIAkJCWJzLT5jdXIgPSBiZWcgKyBsZW47CiAJCQlicy0+Yml0ID0gMDsKIAkJfSBlbHNlCi0JCSAgICBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tPnR5cGVdKSAoYnMsIHNvbiwKLQkJCQkJCSAgICAgIGkgPCBlZmZlY3RpdmVfY291bnQgPwotCQkJCQkJICAgICAgYmFzZSA6IE5VTEwsCi0JCQkJCQkgICAgICBsZXZlbCArIDEpKSkKLQkJCXJldHVybiBlcnI7CisJCQlpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tPnR5cGVdKSAoYnMsIHNvbiwKKwkJCQkJCQkgIGkgPAorCQkJCQkJCSAgZWZmZWN0aXZlX2NvdW50ID8KKwkJCQkJCQkgIGJhc2UgOiBOVUxMLAorCQkJCQkJCSAgbGV2ZWwgKyAxKSkgPAorCQkJICAgIEgzMjNfRVJST1JfTk9ORSkKKwkJCQlyZXR1cm4gZXJyOwogCiAJCWlmIChiYXNlKQogCQkJYmFzZSArPSBzb24tPm9mZnNldDsKQEAgLTcwMyw2ICs3MDYsMTAgQEAKIAkJdHlwZSA9IGdldF9iaXRzKGJzLCBmLT5zeik7CiAJfQogCisJLyogV3JpdGUgVHlwZSAqLworCWlmIChiYXNlKQorCQkqKHVuc2lnbmVkICopIGJhc2UgPSB0eXBlOworCiAJLyogQ2hlY2sgUmFuZ2UgKi8KIAlpZiAodHlwZSA+PSBmLT51YikgewkvKiBOZXdlciB2ZXJzaW9uPyAqLwogCQlCWVRFX0FMSUdOKGJzKTsKQEAgLTcxMiwxMCArNzE5LDYgQEAKIAkJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKIAl9CiAKLQkvKiBXcml0ZSBUeXBlICovCi0JaWYgKGJhc2UpCi0JCSoodW5zaWduZWQgKikgYmFzZSA9IHR5cGU7Ci0KIAkvKiBUcmFuc2ZlciB0byBzb24gbGV2ZWwgKi8KIAlzb24gPSAmZi0+ZmllbGRzW3R5cGVdOwogCWlmIChzb24tPmF0dHIgJiBTVE9QKSB7CkBAIC03MzUsMTMgKzczOCwxNCBAQAogCQl9CiAJCWJlZyA9IGJzLT5jdXI7CiAKLQkJaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpID4KLQkJICAgIEgzMjNfRVJST1JfU1RPUCkKKwkJaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIDwKKwkJICAgIEgzMjNfRVJST1JfTk9ORSkKIAkJCXJldHVybiBlcnI7CiAKIAkJYnMtPmN1ciA9IGJlZyArIGxlbjsKIAkJYnMtPmJpdCA9IDA7Ci0JfSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi0+dHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCArIDEpKSkKKwl9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIDwKKwkJICAgSDMyM19FUlJPUl9OT05FKQogCQlyZXR1cm4gZXJyOwogCiAJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYwppbmRleCA3ZDNiYTQzLi44Y2NmZTE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jCkBAIC00NjksOCArNDY5LDggQEAKIAkJCURFQlVHUCgiJXMgYnV0IG5vIHNlc3Npb25cbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVAKLQkJICAgICYmIGluZm8tPnNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fQ09ORikgeworCQlpZiAoaW5mby0+Y3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVAKKwkJICAgICYmIGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fQ09ORikgewogCQkJREVCVUdQKCIlcyBidXQgbmV2ZXIgc2VudCBJTl9DQUxMX1JFUExZXG4iLAogCQkJCXBwdHBfbXNnX25hbWVbbXNnXSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggOWI2ZTE5Yi4uMDFiZDdjYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTE2NTgsNyArMTY1OCw3IEBACiAJcHJpbnRrKCJjdG5ldGxpbms6IHVucmVnaXN0ZXJpbmcgZnJvbSBuZm5ldGxpbmsuXG4iKTsKIAogI2lmZGVmIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTCi0JaXBfY29ubnRyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoJmN0bmxfbm90aWZpZXJfZXhwKTsKKwlpcF9jb25udHJhY2tfZXhwZWN0X3VucmVnaXN0ZXJfbm90aWZpZXIoJmN0bmxfbm90aWZpZXJfZXhwKTsKIAlpcF9jb25udHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcigmY3RubF9ub3RpZmllcik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCAzMDIxYWYwLi5kOGIxNGE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjI0LDI1ICsyMjQsMTQgQEAKIAl9CiAKIAkvKiBTZWUgaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jICovCi0JaWYgKGhvb2tudW0gIT0gTkZfSVBfUFJFX1JPVVRJTkcpCi0JCWdvdG8gY2hlY2tzdW1fc2tpcHBlZDsKLQotCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKLQljYXNlIENIRUNLU1VNX0hXOgotCQlpZiAoISh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSkpIAotCQkJYnJlYWs7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLT5jc3VtID0gMDsKLQkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKLQkJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQotCQkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQkgICAgICAiaXBfY3RfaWNtcDogYmFkIElDTVAgY2hlY2tzdW0gIik7Ci0JCQlyZXR1cm4gLU5GX0FDQ0VQVDsKLQkJfQorCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgc2tiLT5uaC5pcGgtPmlobCAqIDQsIDApKSB7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgImlwX2N0X2ljbXA6IGJhZCBJQ01QIGNoZWNrc3VtICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLWNoZWNrc3VtX3NraXBwZWQ6CiAJLyoKIAkgKgkxOCBpcyB0aGUgaGlnaGVzdCAna25vd24nIElDTVAgdHlwZS4gQW55dGhpbmcgZWxzZSBpcyBhIG15c3RlcnkKIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA1MjU5YWJkLi4wNDE2MDczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwpAQCAtMjM1LDEyICsyMzUsMTUgQEAKIAkJCWZsYWcgPSAxOwogCQl9CiAKLQkJLyogQ29va2llIEFjay9FY2hvIGNodW5rcyBub3QgdGhlIGZpcnN0IE9SIAotCQkgICBJbml0IC8gSW5pdCBBY2sgLyBTaHV0ZG93biBjb21wbCBjaHVua3Mgbm90IHRoZSBvbmx5IGNodW5rcyAqLwotCQlpZiAoKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9DT09LSUVfQUNLIAorCQkvKgorCQkgKiBDb29raWUgQWNrL0VjaG8gY2h1bmtzIG5vdCB0aGUgZmlyc3QgT1IKKwkJICogSW5pdCAvIEluaXQgQWNrIC8gU2h1dGRvd24gY29tcGwgY2h1bmtzIG5vdCB0aGUgb25seSBjaHVua3MKKwkJICogT1IgemVyby1sZW5ndGguCisJCSAqLworCQlpZiAoKChzY2gtPnR5cGUgPT0gU0NUUF9DSURfQ09PS0lFX0FDSwogCQkJfHwgc2NoLT50eXBlID09IFNDVFBfQ0lEX0NPT0tJRV9FQ0hPCiAJCQl8fCBmbGFnKQotCQkgICAgICYmIGNvdW50ICE9MCApIHsKKwkJICAgICAgJiYgY291bnQgIT0wKSB8fCAhc2NoLT5sZW5ndGgpIHsKIAkJCURFQlVHUCgiQmFzaWMgY2hlY2tzIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZTBkYzM3MC4uMDYyYjI1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC04NzAsMTEgKzg3MCw4IEBACiAJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KIAkgKi8KIAkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KLQlpZiAoaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORwotCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQotCSAgICAmJiBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB0Y3BsZW4sIElQUFJPVE9fVENQLAotCQkJICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KLQkJCSAgICAgIAkgOiBza2JfY2hlY2tzdW0oc2tiLCBpcGgtPmlobCo0LCB0Y3BsZW4sIDApKSkgeworCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgaXBoLT5paGwgKiA0LCBJUFBST1RPX1RDUCkpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgImlwX2N0X3RjcDogYmFkIFRDUCBjaGVja3N1bSAiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDU1YjdkMzIuLjcwODk5ODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMTIwLDExICsxMjAsOCBAQAogCSAqIGJlY2F1c2UgdGhlIHNlbWFudGljIG9mIENIRUNLU1VNX0hXIGlzIGRpZmZlcmVudCB0aGVyZSAKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HCi0JICAgICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZCi0JICAgICYmIGNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIHVkcGxlbiwgSVBQUk9UT19VRFAsCi0JCQkgICAgICAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IHNrYi0+Y3N1bQotCQkJICAgICAgCSA6IHNrYl9jaGVja3N1bShza2IsIGlwaC0+aWhsKjQsIHVkcGxlbiwgMCkpKSB7CisJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBpcGgtPmlobCAqIDQsIElQUFJPVE9fVURQKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19VRFApKQogCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJICAiaXBfY3RfdWRwOiBiYWQgVURQIGNoZWNrc3VtICIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCA1MjA3NjAyLi45MjlkNjFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtNDY5LDcwICs0NjksNjMgQEAKIAogLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCiAgICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcF9jb25udHJhY2tfZGVmcmFnLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19pbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29ubnRyYWNrX2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19sb2NhbCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKLX07Ci0KLS8qIGhlbHBlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19oZWxwLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCi19OwotCi0vKiBSZWZyYWdtZW50ZXI7IGxhc3QgY2hhbmNlLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19sb2NhbF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwX2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwX2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCisJfSwKIH07CiAKIC8qIFN5c2N0bCBzdXBwb3J0ICovCkBAIC03ODMsMTIyICs3NzYsNiBAQAogRVhQT1JUX1NZTUJPTChpcF9jdF9sb2dfaW52YWxpZCk7CiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKLXsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2NfZXhwLCAqcHJvY19zdGF0OwotI2VuZGlmCi0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWluaXQpIGdvdG8gY2xlYW51cDsKLQotCXJldCA9IGlwX2Nvbm50cmFja19pbml0KCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZXQgPSAtRU5PTUVNOwotCXByb2MgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrIiwgMDQ0MCwgJmN0X2ZpbGVfb3BzKTsKLQlpZiAoIXByb2MpIGdvdG8gY2xlYW51cF9pbml0OwotCi0JcHJvY19leHAgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIsIDA0NDAsCi0JCQkJCSZleHBfZmlsZV9vcHMpOwotCWlmICghcHJvY19leHApIGdvdG8gY2xlYW51cF9wcm9jOwotCi0JcHJvY19zdGF0ID0gY3JlYXRlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIFNfSVJVR08sIHByb2NfbmV0X3N0YXQpOwotCWlmICghcHJvY19zdGF0KQotCQlnb3RvIGNsZWFudXBfcHJvY19leHA7Ci0KLQlwcm9jX3N0YXQtPnByb2NfZm9wcyA9ICZjdF9jcHVfc2VxX2ZvcHM7Ci0JcHJvY19zdGF0LT5vd25lciA9IFRISVNfTU9EVUxFOwotI2VuZGlmCi0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfZGVmcmFnX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGRlZnJhZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsX291dCBkZWZyYWcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfZGVmcmFnb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgb3V0IGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhlbHBlciBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaGVscGVyX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciBwb3N0cm91dGluZyBoZWxwZXIgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaGVscGVyaW5vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcG9zdC1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2hlbHBlcm91dG9wczsKLQl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2xvY2FsX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM7Ci0JfQotI2lmZGVmIENPTkZJR19TWVNDVEwKLQlpcF9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwX2N0X25ldF90YWJsZSwgMCk7Ci0JaWYgKGlwX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cF9sb2NhbGlub3BzOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLQotIGNsZWFudXA6Ci0Jc3luY2hyb25pemVfbmV0KCk7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcF9jdF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6Ci0jZW5kaWYKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9pbl9vcHMpOwotIGNsZWFudXBfaW5vdXRhbmRsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcm91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7Ci0gY2xlYW51cF9oZWxwZXJpbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19oZWxwZXJfaW5fb3BzKTsKLSBjbGVhbnVwX2luYW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9pbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19pbl9vcHMpOwotIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOwotIGNsZWFudXBfZGVmcmFnb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2RlZnJhZ19vcHMpOwotIGNsZWFudXBfcHJvY19zdGF0OgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOwotIGNsZWFudXBfcHJvY19leHA6Ci0JcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7Ci0gY2xlYW51cF9wcm9jOgotCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7Ci0gY2xlYW51cF9pbml0OgotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0JaXBfY29ubnRyYWNrX2NsZWFudXAoKTsKLSBjbGVhbnVwX25vdGhpbmc6Ci0JcmV0dXJuIHJldDsKLX0KLQogLyogRklYTUU6IEFsbG93IE5VTEwgZnVuY3Rpb25zIGFuZCBzdWIgaW4gcG9pbnRlcnMgdG8gZ2VuZXJpYyBmb3IKICAgIHRoZW0uIC0tUlIgKi8KIGludCBpcF9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCkBAIC05MjEsNyArNzk4LDcgQEAKIAl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJaXBfY3RfcHJvdG9zW3Byb3RvLT5wcm90b10gPSAmaXBfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CiAJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7Ci0JCisKIAkvKiBTb21lYm9keSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBwcm90byBpbiBiaC4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKIApAQCAtOTMxLDEyICs4MDgsNzcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXBfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKQogewotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MsICpwcm9jX2V4cCwgKnByb2Nfc3RhdDsKKyNlbmRpZgorCWludCByZXQgPSAwOworCisJcmV0ID0gaXBfY29ubnRyYWNrX2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmV0ID0gLUVOT01FTTsKKwlwcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoImlwX2Nvbm50cmFjayIsIDA0NDAsICZjdF9maWxlX29wcyk7CisJaWYgKCFwcm9jKSBnb3RvIGNsZWFudXBfaW5pdDsKKworCXByb2NfZXhwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoImlwX2Nvbm50cmFja19leHBlY3QiLCAwNDQwLAorCQkJCQkmZXhwX2ZpbGVfb3BzKTsKKwlpZiAoIXByb2NfZXhwKSBnb3RvIGNsZWFudXBfcHJvYzsKKworCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpcF9jb25udHJhY2siLCBTX0lSVUdPLCBwcm9jX25ldF9zdGF0KTsKKwlpZiAoIXByb2Nfc3RhdCkKKwkJZ290byBjbGVhbnVwX3Byb2NfZXhwOworCisJcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOworCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKKyNlbmRpZgorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXBfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcF9jb25udHJhY2tfb3BzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGhvb2tzLlxuIik7CisJCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7CisJfQorI2lmZGVmIENPTkZJR19TWVNDVEwKKwlpcF9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwX2N0X25ldF90YWJsZSwgMCk7CisJaWYgKGlwX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgeworCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9ob29rczsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorIGNsZWFudXBfaG9va3M6CisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcF9jb25udHJhY2tfb3BzLCBBUlJBWV9TSVpFKGlwX2Nvbm50cmFja19vcHMpKTsKKyNlbmRpZgorIGNsZWFudXBfcHJvY19zdGF0OgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworIGNsZWFudXBfcHJvY19leHA6CisJcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7CisgY2xlYW51cF9wcm9jOgorCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7CisgY2xlYW51cF9pbml0OgorI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisJaXBfY29ubnRyYWNrX2NsZWFudXAoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBfY3Rfc3lzY3RsX2hlYWRlcik7CisjZW5kaWYKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwX2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXBfY29ubnRyYWNrX29wcykpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIpOworCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKwlpcF9jb25udHJhY2tfY2xlYW51cCgpOwogfQogCiBtb2R1bGVfaW5pdChpcF9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYwppbmRleCBhMGJjODgzLi5kNDU2NjNkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jCkBAIC03LDI0ICs3LDYgQEAKICAqCiAgKiBCYXNlZCBvbiB0aGUgJ2JydXRlIGZvcmNlJyBILjMyMyBOQVQgbW9kdWxlIGJ5CiAgKiBKb3pzZWYgS2FkbGVjc2lrIDxrYWRsZWNAYmxhY2tob2xlLmtma2kuaHU+Ci0gKgotICogQ2hhbmdlczoKLSAqCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCi0gKgotICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCi0gKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCi0gKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCi0gKgkgIDMuIE1pbm9yIGZpeGVzCi0gKgotICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMwotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICAyLiBBZGRlZCBzdXBwb3J0IGZvciBub24tbGluZWFyIHNrYiAoYmFzZWQgb24gUGF0cmljayBNY0hhcmR5J3MgcGF0Y2gpCi0gKiAJICAzLiBFbGltaW5hdGVkIHVubmVjZXNzYXJ5IHJldHVybiBjb2RlCi0gKgotICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKLSAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQxLDY1ICsyMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgogCi0jaW5jbHVkZSAiaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaCIKLQogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awogI2Vsc2UKICNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCi1leHRlcm4gaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCk7Ci1leHRlcm4gaW50IGdldF9oMjI1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpOwotZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKLQkJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKLWV4dGVybiB2b2lkIGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpuZXcsCi0JCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7Ci1leHRlcm4gaW50ICgqc2V0X2gyNDVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKLQkJCQkgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKLQkJCQkgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKLWV4dGVybiBpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAotCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKLWV4dGVybiBpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgKCpzZXRfcmFzX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgKCpuYXRfcnRwX3J0Y3BfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKLQkJCQkgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCQkgdV9pbnQxNl90IHBvcnQsIHVfaW50MTZfdCBydHBfcG9ydCwKLQkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBydHBfZXhwLAotCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0Y3BfZXhwKTsKLWV4dGVybiBpbnQgKCpuYXRfdDEyMF9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAotCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKLQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwotZXh0ZXJuIGludCAoKm5hdF9oMjQ1X2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCi0JCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCi0JCQkgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKLQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwotZXh0ZXJuIGludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCi0JCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkgICAgIGludCBpZHgsIHVfaW50MTZfdCBwb3J0LAotCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHNldF9hZGRyKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX2dyZS5jCmluZGV4IDZjNDg5OWQuLjk2Y2VhYmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fZ3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19ncmUuYwpAQCAtNDksMTUgKzQ5LDE1IEBACiAJICAgICBjb25zdCB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gKm1pbiwKIAkgICAgIGNvbnN0IHVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byAqbWF4KQogewotCXVfaW50MzJfdCBrZXk7CisJX19iZTE2IGtleTsKIAogCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKIAkJa2V5ID0gdHVwbGUtPnNyYy51LmdyZS5rZXk7CiAJZWxzZQogCQlrZXkgPSB0dXBsZS0+ZHN0LnUuZ3JlLmtleTsKIAotCXJldHVybiBudG9obChrZXkpID49IG50b2hsKG1pbi0+Z3JlLmtleSkKLQkJJiYgbnRvaGwoa2V5KSA8PSBudG9obChtYXgtPmdyZS5rZXkpOworCXJldHVybiBudG9ocyhrZXkpID49IG50b2hzKG1pbi0+Z3JlLmtleSkKKwkJJiYgbnRvaHMoa2V5KSA8PSBudG9ocyhtYXgtPmdyZS5rZXkpOwogfQogCiAvKiBnZW5lcmF0ZSB1bmlxdWUgdHVwbGUgLi4uICovCkBAIC04MSwxNCArODEsMTQgQEAKIAkJbWluID0gMTsKIAkJcmFuZ2Vfc2l6ZSA9IDB4ZmZmZjsKIAl9IGVsc2UgewotCQltaW4gPSBudG9obChyYW5nZS0+bWluLmdyZS5rZXkpOwotCQlyYW5nZV9zaXplID0gbnRvaGwocmFuZ2UtPm1heC5ncmUua2V5KSAtIG1pbiArIDE7CisJCW1pbiA9IG50b2hzKHJhbmdlLT5taW4uZ3JlLmtleSk7CisJCXJhbmdlX3NpemUgPSBudG9ocyhyYW5nZS0+bWF4LmdyZS5rZXkpIC0gbWluICsgMTsKIAl9CiAKIAlERUJVR1AoIm1pbiA9ICV1LCByYW5nZV9zaXplID0gJXVcbiIsIG1pbiwgcmFuZ2Vfc2l6ZSk7IAogCiAJZm9yIChpID0gMDsgaSA8IHJhbmdlX3NpemU7IGkrKywga2V5KyspIHsKLQkJKmtleXB0ciA9IGh0b25sKG1pbiArIGtleSAlIHJhbmdlX3NpemUpOworCQkqa2V5cHRyID0gaHRvbnMobWluICsga2V5ICUgcmFuZ2Vfc2l6ZSk7CiAJCWlmICghaXBfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGNvbm50cmFjaykpCiAJCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3J1bGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jCmluZGV4IGVmYmE4YzQuLjFhYmE5MjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAkudGFyZ2V0CQk9IGlwdF9kbmF0X3RhcmdldCwKIAkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdCksCiAJLnRhYmxlCQk9ICJuYXQiLAotCS5ob29rcwkJPSAxIDw8IE5GX0lQX1BSRV9ST1VUSU5HLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9MT0NBTF9PVVQpLAogCS5jaGVja2VudHJ5CT0gaXB0X2RuYXRfY2hlY2tlbnRyeSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggYzYyMjUzOC4uYzMzMjQ0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTc2OCw2ICs3NjgsNyBAQAogCQkJbGVuICo9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKIAkJCSpvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpICsgbGVuLCBHRlBfQVRPTUlDKTsKIAkJCWlmICgqb2JqID09IE5VTEwpIHsKKwkJCQlrZnJlZShscCk7CiAJCQkJa2ZyZWUoaWQpOwogCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCXByaW50aygiT09NIGluIGJzYWxnICglZClcbiIsIF9fTElORV9fKTsKQEAgLTEwMDMsMTIgKzEwMDQsMTIgQEAKIAkJCiAJcmV0dXJuIDE7CiAKK2Vycl9hZGRyX2ZyZWU6CisJa2ZyZWUoKHVuc2lnbmVkIGxvbmcgKil0cmFwLT5pcF9hZGRyZXNzKTsKKwogZXJyX2lkX2ZyZWU6CiAJa2ZyZWUodHJhcC0+aWQpOwogCi1lcnJfYWRkcl9mcmVlOgotCWtmcmVlKCh1bnNpZ25lZCBsb25nICopdHJhcC0+aXBfYWRkcmVzcyk7Ci0JCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMjYsMTEgKzExMjcsMTAgQEAKIAkJc3RydWN0IHNubXBfdjFfdHJhcCB0cmFwOwogCQl1bnNpZ25lZCBjaGFyIHJldCA9IHNubXBfdHJhcF9kZWNvZGUoJmN0eCwgJnRyYXAsIG1hcCwgY2hlY2spOwogCQkKLQkJLyogRGlzY2FyZCB0cmFwIGFsbG9jYXRpb25zIHJlZ2FyZGxlc3MgKi8KLQkJa2ZyZWUodHJhcC5pZCk7Ci0JCWtmcmVlKCh1bnNpZ25lZCBsb25nICopdHJhcC5pcF9hZGRyZXNzKTsKLQkJCi0JCWlmICghcmV0KQorCQlpZiAocmV0KSB7CisJCQlrZnJlZSh0cmFwLmlkKTsKKwkJCWtmcmVlKCh1bnNpZ25lZCBsb25nICopdHJhcC5pcF9hZGRyZXNzKTsKKwkJfSBlbHNlIAogCQkJcmV0dXJuIHJldDsKIAkJCiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKaW5kZXggMzUwNWIwZC4uNjdlNjc2NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKQEAgLTIxOSw4ICsyMTksMTAgQEAKIAkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogeworI2lmZGVmIENPTkZJR19YRlJNCiAJc3RydWN0IGlwX2Nvbm50cmFjayAqY3Q7CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgcmV0OwogCiAJLyogcm9vdCBpcyBwbGF5aW5nIHdpdGggcmF3IHNvY2tldHMuICovCkBAIC0yOTksNjkgKzMwMSw2MyBAQAogCiAvKiBXZSBtdXN0IGJlIGFmdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLiAqLwogCi0vKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfbmF0X2luLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfb3BzW10gPSB7CisJLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLworCXsKKwkJLmhvb2sJCT0gaXBfbmF0X2luLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKKwl9LAorCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBzb3VyY2UgKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9vdXQsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKKwl9LAorCS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLworCXsKKwkJLmhvb2sJCT0gaXBfbmF0X2FkanVzdCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCwKKwl9LAorCS8qIEJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2UgZGVzdGluYXRpb24gKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9sb2NhbF9mbiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAorCX0sCisJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqLworCXsKKwkJLmhvb2sJCT0gaXBfbmF0X2ZuLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKKwl9LAorCS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLworCXsKKwkJLmhvb2sJCT0gaXBfbmF0X2FkanVzdCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAorCX0sCiB9OwogCi0vKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9vdXQsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU1JDLAotfTsKLQotLyogQWZ0ZXIgY29ubnRyYWNrLCBhZGp1c3Qgc2VxdWVuY2UgbnVtYmVyICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9hZGp1c3Rfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9uYXRfYWRqdXN0LAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NFUV9BREpVU1QsCi19OwotCi0vKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9sb2NhbF9mbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9EU1QsCi19OwotCi0vKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlIGZvciByZXBseSBwYWNrZXRzIG9mIExPQ0FMX09VVCBETkFUICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9sb2NhbF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfbmF0X2ZuLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU1JDLAotfTsKLQotLyogQWZ0ZXIgY29ubnRyYWNrLCBhZGp1c3Qgc2VxdWVuY2UgbnVtYmVyICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9hZGp1c3RfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9hZGp1c3QsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAotfTsKLQotCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IGlwX25hdF9zdGFuZGFsb25lX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAogCW5lZWRfY29ubnRyYWNrKCk7CiAKLQlpZiAoIWluaXQpIGdvdG8gY2xlYW51cDsKLQogI2lmZGVmIENPTkZJR19YRlJNCiAJQlVHX09OKGlwX25hdF9kZWNvZGVfc2Vzc2lvbiAhPSBOVUxMKTsKIAlpcF9uYXRfZGVjb2RlX3Nlc3Npb24gPSBuYXRfZGVjb2RlX3Nlc3Npb247CkBAIC0zNzEsNTAgKzM2NywxMyBAQAogCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCBzZXR1cCBydWxlcy5cbiIpOwogCQlnb3RvIGNsZWFudXBfZGVjb2RlX3Nlc3Npb247CiAJfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9pbl9vcHMpOworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwX25hdF9vcHMsIEFSUkFZX1NJWkUoaXBfbmF0X29wcykpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGluIGhvb2suXG4iKTsKKwkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKIAkJZ290byBjbGVhbnVwX3J1bGVfaW5pdDsKIAl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm9wczsKLQl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2FkanVzdF9pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGFkanVzdCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9vdXRvcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9hZGp1c3Rfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgYWRqdXN0IG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9hZGp1c3Rpbl9vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfYWRqdXN0b3V0X29wczsKLQl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2xvY2FsX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgaW4gaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfbG9jYWxvdXRvcHM7Ci0JfQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2xvY2FsX2luX29wcyk7Ci0gY2xlYW51cF9sb2NhbG91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2FkanVzdG91dF9vcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9uYXRfYWRqdXN0X291dF9vcHMpOwotIGNsZWFudXBfYWRqdXN0aW5fb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2FkanVzdF9pbl9vcHMpOwotIGNsZWFudXBfb3V0b3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X291dF9vcHMpOwotIGNsZWFudXBfaW5vcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9uYXRfaW5fb3BzKTsKICBjbGVhbnVwX3J1bGVfaW5pdDoKIAlpcF9uYXRfcnVsZV9jbGVhbnVwKCk7CiAgY2xlYW51cF9kZWNvZGVfc2Vzc2lvbjoKQEAgLTQyNSwxNCArMzg0LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaXBfbmF0X3N0YW5kYWxvbmVfaW5pdCh2b2lkKQotewotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBpcF9uYXRfc3RhbmRhbG9uZV9maW5pKHZvaWQpCiB7Ci0JaW5pdF9vcl9jbGVhbnVwKDApOworCW5mX3VucmVnaXN0ZXJfaG9va3MoaXBfbmF0X29wcywgQVJSQVlfU0laRShpcF9uYXRfb3BzKSk7CisJaXBfbmF0X3J1bGVfY2xlYW51cCgpOworI2lmZGVmIENPTkZJR19YRlJNCisJaXBfbmF0X2RlY29kZV9zZXNzaW9uID0gTlVMTDsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyNlbmRpZgogfQogCiBtb2R1bGVfaW5pdChpcF9uYXRfc3RhbmRhbG9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggODk2YTI0NC4uYjkzZjA0OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTY2MiwxNSArNjYyLDExIEBACiAJLm91dGZuCT0gJmlwcV9lbnF1ZXVlX3BhY2tldCwKIH07CiAKLXN0YXRpYyBpbnQKLWluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IGlwX3F1ZXVlX2luaXQodm9pZCkKIHsKIAlpbnQgc3RhdHVzID0gLUVOT01FTTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CiAJCi0JaWYgKCFpbml0KQotCQlnb3RvIGNsZWFudXA7Ci0KIAluZXRsaW5rX3JlZ2lzdGVyX25vdGlmaWVyKCZpcHFfbmxfbm90aWZpZXIpOwogCWlwcW5sID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfRklSRVdBTEwsIDAsIGlwcV9yY3Zfc2ssCiAJCQkJICAgICAgVEhJU19NT0RVTEUpOwpAQCAtNjk3LDExICs2OTMsNiBAQAogCX0KIAlyZXR1cm4gc3RhdHVzOwogCi1jbGVhbnVwOgotCW5mX3VucmVnaXN0ZXJfcXVldWVfaGFuZGxlcnMoJm5mcWgpOwotCXN5bmNocm9uaXplX25ldCgpOwotCWlwcV9mbHVzaChORl9EUk9QKTsKLQkKIGNsZWFudXBfc3lzY3RsOgogCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwcV9zeXNjdGxfaGVhZGVyKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBxX2Rldl9ub3RpZmllcik7CkBAIC03MTcsMTUgKzcwOCwyMSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGlwX3F1ZXVlX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfcXVldWVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKwlpcHFfZmx1c2goTkZfRFJPUCk7CisKKwl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcHFfc3lzY3RsX2hlYWRlcik7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwcV9kZXZfbm90aWZpZXIpOworCXByb2NfbmV0X3JlbW92ZShJUFFfUFJPQ19GU19OQU1FKTsKKworCXNvY2tfcmVsZWFzZShpcHFubC0+c2tfc29ja2V0KTsKKwltdXRleF9sb2NrKCZpcHFubF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpcHFubF9tdXRleCk7CisKKwluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJmlwcV9ubF9ub3RpZmllcik7CiB9CiAKIE1PRFVMRV9ERVNDUklQVElPTigiSVB2NCBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IDQ2MGZkOTAuLmNlZTMzOTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L2NvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC03MzQsNyArNzM1LDcgQEAKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKG5ld2luZm8tPmVudHJpZXNbaV0gJiYgbmV3aW5mby0+ZW50cmllc1tpXSAhPSBlbnRyeTApCiAJCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tpXSwgZW50cnkwLCBuZXdpbmZvLT5zaXplKTsKIAl9CkBAIC03ODcsNyArNzg4LDcgQEAKIAkJCSAgY291bnRlcnMsCiAJCQkgICZpKTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gY3VyY3B1KQogCQkJY29udGludWU7CiAJCWkgPSAwOwpAQCAtNzk5LDE3ICs4MDAsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLWNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAotCQkgICAgIHN0cnVjdCBpcHRfdGFibGUgKnRhYmxlLAotCQkgICAgIHZvaWQgX191c2VyICp1c2VycHRyKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgeHRfY291bnRlcnMgKiBhbGxvY19jb3VudGVycyhzdHJ1Y3QgaXB0X3RhYmxlICp0YWJsZSkKIHsKLQl1bnNpZ25lZCBpbnQgb2ZmLCBudW0sIGNvdW50ZXJzaXplOwotCXN0cnVjdCBpcHRfZW50cnkgKmU7CisJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKLQlpbnQgcmV0ID0gMDsKLQl2b2lkICpsb2NfY3B1X2VudHJ5OwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtODE4LDEzICs4MTMsMzIgQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCS8qIEZpcnN0LCBzdW0gY291bnRlcnMuLi4gKi8KIAl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJZ2V0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKIAl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKIAorCXJldHVybiBjb3VudGVyczsKK30KKworc3RhdGljIGludAorY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCisJCSAgICAgc3RydWN0IGlwdF90YWJsZSAqdGFibGUsCisJCSAgICAgdm9pZCBfX3VzZXIgKnVzZXJwdHIpCit7CisJdW5zaWduZWQgaW50IG9mZiwgbnVtOworCXN0cnVjdCBpcHRfZW50cnkgKmU7CisJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCWludCByZXQgPSAwOworCXZvaWQgKmxvY19jcHVfZW50cnk7CisKKwljb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTsKKwlpZiAoSVNfRVJSKGNvdW50ZXJzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY291bnRlcnMpOworCiAJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUvY3B1LCAuLi4KIAkgKiBUaGlzIGNob2ljZSBpcyBsYXp5IChiZWNhdXNlIGN1cnJlbnQgdGhyZWFkIGlzCiAJICogYWxsb3dlZCB0byBtaWdyYXRlIHRvIGFub3RoZXIgY3B1KQpAQCAtODg0LDI1ICs4OTgsMjczIEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfZGVsdGEgeworCXN0cnVjdCBjb21wYXRfZGVsdGEgKm5leHQ7CisJdV9pbnQxNl90IG9mZnNldDsKKwlzaG9ydCBkZWx0YTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29tcGF0X2RlbHRhICpjb21wYXRfb2Zmc2V0cyA9IE5VTEw7CisKK3N0YXRpYyBpbnQgY29tcGF0X2FkZF9vZmZzZXQodV9pbnQxNl90IG9mZnNldCwgc2hvcnQgZGVsdGEpCit7CisJc3RydWN0IGNvbXBhdF9kZWx0YSAqdG1wOworCisJdG1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbXBhdF9kZWx0YSksIEdGUF9LRVJORUwpOworCWlmICghdG1wKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0bXAtPm9mZnNldCA9IG9mZnNldDsKKwl0bXAtPmRlbHRhID0gZGVsdGE7CisJaWYgKGNvbXBhdF9vZmZzZXRzKSB7CisJCXRtcC0+bmV4dCA9IGNvbXBhdF9vZmZzZXRzLT5uZXh0OworCQljb21wYXRfb2Zmc2V0cy0+bmV4dCA9IHRtcDsKKwl9IGVsc2UgeworCQljb21wYXRfb2Zmc2V0cyA9IHRtcDsKKwkJdG1wLT5uZXh0ID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBhdF9mbHVzaF9vZmZzZXRzKHZvaWQpCit7CisJc3RydWN0IGNvbXBhdF9kZWx0YSAqdG1wLCAqbmV4dDsKKworCWlmIChjb21wYXRfb2Zmc2V0cykgeworCQlmb3IodG1wID0gY29tcGF0X29mZnNldHM7IHRtcDsgdG1wID0gbmV4dCkgeworCQkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJCWtmcmVlKHRtcCk7CisJCX0KKwkJY29tcGF0X29mZnNldHMgPSBOVUxMOworCX0KK30KKworc3RhdGljIHNob3J0IGNvbXBhdF9jYWxjX2p1bXAodV9pbnQxNl90IG9mZnNldCkKK3sKKwlzdHJ1Y3QgY29tcGF0X2RlbHRhICp0bXA7CisJc2hvcnQgZGVsdGE7CisKKwlmb3IodG1wID0gY29tcGF0X29mZnNldHMsIGRlbHRhID0gMDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJCWlmICh0bXAtPm9mZnNldCA8IG9mZnNldCkKKwkJCWRlbHRhICs9IHRtcC0+ZGVsdGE7CisJcmV0dXJuIGRlbHRhOworfQorCitzdHJ1Y3QgY29tcGF0X2lwdF9zdGFuZGFyZF90YXJnZXQKK3sKKwlzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X3RhcmdldCB0YXJnZXQ7CisJY29tcGF0X2ludF90IHZlcmRpY3Q7Cit9OworCitzdHJ1Y3QgY29tcGF0X2lwdF9zdGFuZGFyZAoreworCXN0cnVjdCBjb21wYXRfaXB0X2VudHJ5IGVudHJ5OworCXN0cnVjdCBjb21wYXRfaXB0X3N0YW5kYXJkX3RhcmdldCB0YXJnZXQ7Cit9OworCisjZGVmaW5lIElQVF9TVF9MRU4JCVhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCkpCisjZGVmaW5lIElQVF9TVF9DT01QQVRfTEVOCUNPTVBBVF9YVF9BTElHTihzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfc3RhbmRhcmRfdGFyZ2V0KSkKKyNkZWZpbmUgSVBUX1NUX09GRlNFVAkJKElQVF9TVF9MRU4gLSBJUFRfU1RfQ09NUEFUX0xFTikKKworc3RhdGljIGludCBjb21wYXRfaXB0X3N0YW5kYXJkX2ZuKHZvaWQgKnRhcmdldCwKKwkJdm9pZCAqKmRzdHB0ciwgaW50ICpzaXplLCBpbnQgY29udmVydCkKK3sKKwlzdHJ1Y3QgY29tcGF0X2lwdF9zdGFuZGFyZF90YXJnZXQgY29tcGF0X3N0LCAqcGNvbXBhdF9zdDsKKwlzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCBzdCwgKnBzdDsKKwlpbnQgcmV0OworCisJcmV0ID0gMDsKKwlzd2l0Y2ggKGNvbnZlcnQpIHsKKwkJY2FzZSBDT01QQVRfVE9fVVNFUjoKKwkJCXBzdCA9IHRhcmdldDsKKwkJCW1lbWNweSgmY29tcGF0X3N0LnRhcmdldCwgJnBzdC0+dGFyZ2V0LAorCQkJCXNpemVvZihjb21wYXRfc3QudGFyZ2V0KSk7CisJCQljb21wYXRfc3QudmVyZGljdCA9IHBzdC0+dmVyZGljdDsKKwkJCWlmIChjb21wYXRfc3QudmVyZGljdCA+IDApCisJCQkJY29tcGF0X3N0LnZlcmRpY3QgLT0KKwkJCQkJY29tcGF0X2NhbGNfanVtcChjb21wYXRfc3QudmVyZGljdCk7CisJCQljb21wYXRfc3QudGFyZ2V0LnUudXNlci50YXJnZXRfc2l6ZSA9IElQVF9TVF9DT01QQVRfTEVOOworCQkJaWYgKGNvcHlfdG9fdXNlcigqZHN0cHRyLCAmY29tcGF0X3N0LCBJUFRfU1RfQ09NUEFUX0xFTikpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCSpzaXplIC09IElQVF9TVF9PRkZTRVQ7CisJCQkqZHN0cHRyICs9IElQVF9TVF9DT01QQVRfTEVOOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUEFUX0ZST01fVVNFUjoKKwkJCXBjb21wYXRfc3QgPSB0YXJnZXQ7CisJCQltZW1jcHkoJnN0LnRhcmdldCwgJnBjb21wYXRfc3QtPnRhcmdldCwgSVBUX1NUX0NPTVBBVF9MRU4pOworCQkJc3QudmVyZGljdCA9IHBjb21wYXRfc3QtPnZlcmRpY3Q7CisJCQlpZiAoc3QudmVyZGljdCA+IDApCisJCQkJc3QudmVyZGljdCArPSBjb21wYXRfY2FsY19qdW1wKHN0LnZlcmRpY3QpOworCQkJc3QudGFyZ2V0LnUudXNlci50YXJnZXRfc2l6ZSA9IElQVF9TVF9MRU47CisJCQltZW1jcHkoKmRzdHB0ciwgJnN0LCBJUFRfU1RfTEVOKTsKKwkJCSpzaXplICs9IElQVF9TVF9PRkZTRVQ7CisJCQkqZHN0cHRyICs9IElQVF9TVF9MRU47CisJCQlicmVhazsKKwkJY2FzZSBDT01QQVRfQ0FMQ19TSVpFOgorCQkJKnNpemUgKz0gSVBUX1NUX09GRlNFVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOT1BST1RPT1BUOworCQkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citjb21wYXRfY2FsY19tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLCBpbnQgKiBzaXplKQoreworCWlmIChtLT51Lmtlcm5lbC5tYXRjaC0+Y29tcGF0KQorCQltLT51Lmtlcm5lbC5tYXRjaC0+Y29tcGF0KG0sIE5VTEwsIHNpemUsIENPTVBBVF9DQUxDX1NJWkUpOworCWVsc2UKKwkJeHRfY29tcGF0X21hdGNoKG0sIE5VTEwsIHNpemUsIENPTVBBVF9DQUxDX1NJWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsIHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAorCQl2b2lkICpiYXNlLCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKK3sKKwlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKKwl1X2ludDE2X3QgZW50cnlfb2Zmc2V0OworCWludCBvZmYsIGksIHJldDsKKworCW9mZiA9IDA7CisJZW50cnlfb2Zmc2V0ID0gKHZvaWQgKillIC0gYmFzZTsKKwlJUFRfTUFUQ0hfSVRFUkFURShlLCBjb21wYXRfY2FsY19tYXRjaCwgJm9mZik7CisJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCWlmICh0LT51Lmtlcm5lbC50YXJnZXQtPmNvbXBhdCkKKwkJdC0+dS5rZXJuZWwudGFyZ2V0LT5jb21wYXQodCwgTlVMTCwgJm9mZiwgQ09NUEFUX0NBTENfU0laRSk7CisJZWxzZQorCQl4dF9jb21wYXRfdGFyZ2V0KHQsIE5VTEwsICZvZmYsIENPTVBBVF9DQUxDX1NJWkUpOworCW5ld2luZm8tPnNpemUgLT0gb2ZmOworCXJldCA9IGNvbXBhdF9hZGRfb2Zmc2V0KGVudHJ5X29mZnNldCwgb2ZmKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaTwgTkZfSVBfTlVNSE9PS1M7IGkrKykgeworCQlpZiAoaW5mby0+aG9va19lbnRyeVtpXSAmJiAoZSA8IChzdHJ1Y3QgaXB0X2VudHJ5ICopCisJCQkJKGJhc2UgKyBpbmZvLT5ob29rX2VudHJ5W2ldKSkpCisJCQluZXdpbmZvLT5ob29rX2VudHJ5W2ldIC09IG9mZjsKKwkJaWYgKGluZm8tPnVuZGVyZmxvd1tpXSAmJiAoZSA8IChzdHJ1Y3QgaXB0X2VudHJ5ICopCisJCQkJKGJhc2UgKyBpbmZvLT51bmRlcmZsb3dbaV0pKSkKKwkJCW5ld2luZm8tPnVuZGVyZmxvd1tpXSAtPSBvZmY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAorCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKK3sKKwl2b2lkICpsb2NfY3B1X2VudHJ5OworCWludCBpOworCisJaWYgKCFuZXdpbmZvIHx8ICFpbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChuZXdpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHh0X3RhYmxlX2luZm8pKTsKKwluZXdpbmZvLT5zaXplID0gaW5mby0+c2l6ZTsKKwluZXdpbmZvLT5udW1iZXIgPSBpbmZvLT5udW1iZXI7CisJZm9yIChpID0gMDsgaSA8IE5GX0lQX05VTUhPT0tTOyBpKyspIHsKKwkJbmV3aW5mby0+aG9va19lbnRyeVtpXSA9IGluZm8tPmhvb2tfZW50cnlbaV07CisJCW5ld2luZm8tPnVuZGVyZmxvd1tpXSA9IGluZm8tPnVuZGVyZmxvd1tpXTsKKwl9CisJbG9jX2NwdV9lbnRyeSA9IGluZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisJcmV0dXJuIElQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIGluZm8tPnNpemUsCisJCQljb21wYXRfY2FsY19lbnRyeSwgaW5mbywgbG9jX2NwdV9lbnRyeSwgbmV3aW5mbyk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBnZXRfaW5mbyh2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4sIGludCBjb21wYXQpCit7CisJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKwlzdHJ1Y3QgaXB0X3RhYmxlICp0OworCWludCByZXQ7CisKKwlpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGlwdF9nZXRpbmZvKSkgeworCQlkdXByaW50ZigibGVuZ3RoICV1ICE9ICV1XG4iLCAqbGVuLAorCQkJKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IGlwdF9nZXRpbmZvKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCB1c2VyLCBzaXplb2YobmFtZSkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOworCisJbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTi0xXSA9ICdcMCc7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWlmIChjb21wYXQpCisJCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQpOworI2VuZGlmCisJdCA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCBuYW1lKSwKKwkJCSJpcHRhYmxlXyVzIiwgbmFtZSk7CisJaWYgKHQgJiYgIUlTX0VSUih0KSkgeworCQlzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbzsKKwkJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOworCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQlpZiAoY29tcGF0KSB7CisJCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7CisJCQlyZXQgPSBjb21wYXRfdGFibGVfaW5mbyhwcml2YXRlLCAmdG1wKTsKKwkJCWNvbXBhdF9mbHVzaF9vZmZzZXRzKCk7CisJCQlwcml2YXRlID0gICZ0bXA7CisJCX0KKyNlbmRpZgorCQlpbmZvLnZhbGlkX2hvb2tzID0gdC0+dmFsaWRfaG9va3M7CisJCW1lbWNweShpbmZvLmhvb2tfZW50cnksIHByaXZhdGUtPmhvb2tfZW50cnksCisJCQkJc2l6ZW9mKGluZm8uaG9va19lbnRyeSkpOworCQltZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtPnVuZGVyZmxvdywKKwkJCQlzaXplb2YoaW5mby51bmRlcmZsb3cpKTsKKwkJaW5mby5udW1fZW50cmllcyA9IHByaXZhdGUtPm51bWJlcjsKKwkJaW5mby5zaXplID0gcHJpdmF0ZS0+c2l6ZTsKKwkJc3RyY3B5KGluZm8ubmFtZSwgbmFtZSk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmaW5mbywgKmxlbikgIT0gMCkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldCA9IDA7CisKKwkJeHRfdGFibGVfdW5sb2NrKHQpOworCQltb2R1bGVfcHV0KHQtPm1lKTsKKwl9IGVsc2UKKwkJcmV0ID0gdCA/IFBUUl9FUlIodCkgOiAtRU5PRU5UOworI2lmZGVmIENPTkZJR19DT01QQVQKKwlpZiAoY29tcGF0KQorCQl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludAotZ2V0X2VudHJpZXMoY29uc3Qgc3RydWN0IGlwdF9nZXRfZW50cmllcyAqZW50cmllcywKLQkgICAgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIpCitnZXRfZW50cmllcyhzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwgaW50ICpsZW4pCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgaXB0X3RhYmxlICp0OwogCi0JdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCBlbnRyaWVzLT5uYW1lKTsKKwlpZiAoKmxlbiA8IHNpemVvZihnZXQpKSB7CisJCWR1cHJpbnRmKCJnZXRfZW50cmllczogJXUgPCAlZFxuIiwgKmxlbiwKKwkJCQkodW5zaWduZWQgaW50KXNpemVvZihnZXQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcigmZ2V0LCB1cHRyLCBzaXplb2YoZ2V0KSkgIT0gMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKCpsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMpICsgZ2V0LnNpemUpIHsKKwkJZHVwcmludGYoImdldF9lbnRyaWVzOiAldSAhPSAldVxuIiwgKmxlbiwKKwkJCQkodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IGlwdF9nZXRfZW50cmllcykgKworCQkJCWdldC5zaXplKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXQgPSB4dF9maW5kX3RhYmxlX2xvY2soQUZfSU5FVCwgZ2V0Lm5hbWUpOwogCWlmICh0ICYmICFJU19FUlIodCkpIHsKIAkJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOwogCQlkdXByaW50ZigidC0+cHJpdmF0ZS0+bnVtYmVyID0gJXVcbiIsCiAJCQkgcHJpdmF0ZS0+bnVtYmVyKTsKLQkJaWYgKGVudHJpZXMtPnNpemUgPT0gcHJpdmF0ZS0+c2l6ZSkKKwkJaWYgKGdldC5zaXplID09IHByaXZhdGUtPnNpemUpCiAJCQlyZXQgPSBjb3B5X2VudHJpZXNfdG9fdXNlcihwcml2YXRlLT5zaXplLAogCQkJCQkJICAgdCwgdXB0ci0+ZW50cnl0YWJsZSk7CiAJCWVsc2UgewogCQkJZHVwcmludGYoImdldF9lbnRyaWVzOiBJJ3ZlIGdvdCAldSBub3QgJXUhXG4iLAogCQkJCSBwcml2YXRlLT5zaXplLAotCQkJCSBlbnRyaWVzLT5zaXplKTsKKwkJCQkgZ2V0LnNpemUpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJfQogCQltb2R1bGVfcHV0KHQtPm1lKTsKQEAgLTkxNCwxNCArMTE3Niw4MSBAQAogfQogCiBzdGF0aWMgaW50CitfX2RvX3JlcGxhY2UoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAorCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywKKwkJdm9pZCBfX3VzZXIgKmNvdW50ZXJzX3B0cikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpcHRfdGFibGUgKnQ7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKm9sZGluZm87CisJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKKwl2b2lkICpsb2NfY3B1X29sZF9lbnRyeTsKKworCXJldCA9IDA7CisJY291bnRlcnMgPSB2bWFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKTsKKwlpZiAoIWNvdW50ZXJzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhYmxlX2xvY2soQUZfSU5FVCwgbmFtZSksCisJCQkJICAgICJpcHRhYmxlXyVzIiwgbmFtZSk7CisJaWYgKCF0IHx8IElTX0VSUih0KSkgeworCQlyZXQgPSB0ID8gUFRSX0VSUih0KSA6IC1FTk9FTlQ7CisJCWdvdG8gZnJlZV9uZXdpbmZvX2NvdW50ZXJzX3VudHJhbnM7CisJfQorCisJLyogWW91IGxpZWQhICovCisJaWYgKHZhbGlkX2hvb2tzICE9IHQtPnZhbGlkX2hvb2tzKSB7CisJCWR1cHJpbnRmKCJWYWxpZCBob29rIGNyYXA6ICUwOFggdnMgJTA4WFxuIiwKKwkJCSB2YWxpZF9ob29rcywgdC0+dmFsaWRfaG9va3MpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHB1dF9tb2R1bGU7CisJfQorCisJb2xkaW5mbyA9IHh0X3JlcGxhY2VfdGFibGUodCwgbnVtX2NvdW50ZXJzLCBuZXdpbmZvLCAmcmV0KTsKKwlpZiAoIW9sZGluZm8pCisJCWdvdG8gcHV0X21vZHVsZTsKKworCS8qIFVwZGF0ZSBtb2R1bGUgdXNhZ2UgY291bnQgYmFzZWQgb24gbnVtYmVyIG9mIHJ1bGVzICovCisJZHVwcmludGYoImRvX3JlcGxhY2U6IG9sZG51bT0ldSwgaW5pdG51bT0ldSwgbmV3bnVtPSV1XG4iLAorCQlvbGRpbmZvLT5udW1iZXIsIG9sZGluZm8tPmluaXRpYWxfZW50cmllcywgbmV3aW5mby0+bnVtYmVyKTsKKwlpZiAoKG9sZGluZm8tPm51bWJlciA+IG9sZGluZm8tPmluaXRpYWxfZW50cmllcykgfHwKKwkgICAgKG5ld2luZm8tPm51bWJlciA8PSBvbGRpbmZvLT5pbml0aWFsX2VudHJpZXMpKQorCQltb2R1bGVfcHV0KHQtPm1lKTsKKwlpZiAoKG9sZGluZm8tPm51bWJlciA+IG9sZGluZm8tPmluaXRpYWxfZW50cmllcykgJiYKKwkgICAgKG5ld2luZm8tPm51bWJlciA8PSBvbGRpbmZvLT5pbml0aWFsX2VudHJpZXMpKQorCQltb2R1bGVfcHV0KHQtPm1lKTsKKworCS8qIEdldCB0aGUgb2xkIGNvdW50ZXJzLiAqLworCWdldF9jb3VudGVycyhvbGRpbmZvLCBjb3VudGVycyk7CisJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJjZSAqLworCWxvY19jcHVfb2xkX2VudHJ5ID0gb2xkaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsKKwl4dF9mcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CisJaWYgKGNvcHlfdG9fdXNlcihjb3VudGVyc19wdHIsIGNvdW50ZXJzLAorCQkJIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpICogbnVtX2NvdW50ZXJzKSAhPSAwKQorCQlyZXQgPSAtRUZBVUxUOworCXZmcmVlKGNvdW50ZXJzKTsKKwl4dF90YWJsZV91bmxvY2sodCk7CisJcmV0dXJuIHJldDsKKworIHB1dF9tb2R1bGU6CisJbW9kdWxlX3B1dCh0LT5tZSk7CisJeHRfdGFibGVfdW5sb2NrKHQpOworIGZyZWVfbmV3aW5mb19jb3VudGVyc191bnRyYW5zOgorCXZmcmVlKGNvdW50ZXJzKTsKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAogZG9fcmVwbGFjZSh2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBpcHRfcmVwbGFjZSB0bXA7Ci0Jc3RydWN0IGlwdF90YWJsZSAqdDsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgKm9sZGluZm87Ci0Jc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQl2b2lkICpsb2NfY3B1X2VudHJ5LCAqbG9jX2NwdV9vbGRfZW50cnk7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm87CisJdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC05NDksNjkgKzEyNzgsMjMgQEAKIAkJZ290byBmcmVlX25ld2luZm87CiAJfQogCi0JY291bnRlcnMgPSB2bWFsbG9jKHRtcC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSk7Ci0JaWYgKCFjb3VudGVycykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfbmV3aW5mbzsKLQl9Ci0KIAlyZXQgPSB0cmFuc2xhdGVfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKIAkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHRtcC5zaXplLCB0bXAubnVtX2VudHJpZXMsCiAJCQkgICAgICB0bXAuaG9va19lbnRyeSwgdG1wLnVuZGVyZmxvdyk7CiAJaWYgKHJldCAhPSAwKQotCQlnb3RvIGZyZWVfbmV3aW5mb19jb3VudGVyczsKKwkJZ290byBmcmVlX25ld2luZm87CiAKIAlkdXByaW50ZigiaXBfdGFibGVzOiBUcmFuc2xhdGVkIHRhYmxlXG4iKTsKIAotCXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhYmxlX2xvY2soQUZfSU5FVCwgdG1wLm5hbWUpLAotCQkJCSAgICAiaXB0YWJsZV8lcyIsIHRtcC5uYW1lKTsKLQlpZiAoIXQgfHwgSVNfRVJSKHQpKSB7Ci0JCXJldCA9IHQgPyBQVFJfRVJSKHQpIDogLUVOT0VOVDsKLQkJZ290byBmcmVlX25ld2luZm9fY291bnRlcnNfdW50cmFuczsKLQl9CisJcmV0ID0gX19kb19yZXBsYWNlKHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCisJCQkgICAgICBuZXdpbmZvLCB0bXAubnVtX2NvdW50ZXJzLAorCQkJICAgICAgdG1wLmNvdW50ZXJzKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfbmV3aW5mb191bnRyYW5zOworCXJldHVybiAwOwogCi0JLyogWW91IGxpZWQhICovCi0JaWYgKHRtcC52YWxpZF9ob29rcyAhPSB0LT52YWxpZF9ob29rcykgewotCQlkdXByaW50ZigiVmFsaWQgaG9vayBjcmFwOiAlMDhYIHZzICUwOFhcbiIsCi0JCQkgdG1wLnZhbGlkX2hvb2tzLCB0LT52YWxpZF9ob29rcyk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gcHV0X21vZHVsZTsKLQl9Ci0KLQlvbGRpbmZvID0geHRfcmVwbGFjZV90YWJsZSh0LCB0bXAubnVtX2NvdW50ZXJzLCBuZXdpbmZvLCAmcmV0KTsKLQlpZiAoIW9sZGluZm8pCi0JCWdvdG8gcHV0X21vZHVsZTsKLQotCS8qIFVwZGF0ZSBtb2R1bGUgdXNhZ2UgY291bnQgYmFzZWQgb24gbnVtYmVyIG9mIHJ1bGVzICovCi0JZHVwcmludGYoImRvX3JlcGxhY2U6IG9sZG51bT0ldSwgaW5pdG51bT0ldSwgbmV3bnVtPSV1XG4iLAotCQlvbGRpbmZvLT5udW1iZXIsIG9sZGluZm8tPmluaXRpYWxfZW50cmllcywgbmV3aW5mby0+bnVtYmVyKTsKLQlpZiAoKG9sZGluZm8tPm51bWJlciA+IG9sZGluZm8tPmluaXRpYWxfZW50cmllcykgfHwgCi0JICAgIChuZXdpbmZvLT5udW1iZXIgPD0gb2xkaW5mby0+aW5pdGlhbF9lbnRyaWVzKSkgCi0JCW1vZHVsZV9wdXQodC0+bWUpOwotCWlmICgob2xkaW5mby0+bnVtYmVyID4gb2xkaW5mby0+aW5pdGlhbF9lbnRyaWVzKSAmJgotCSAgICAobmV3aW5mby0+bnVtYmVyIDw9IG9sZGluZm8tPmluaXRpYWxfZW50cmllcykpCi0JCW1vZHVsZV9wdXQodC0+bWUpOwotCi0JLyogR2V0IHRoZSBvbGQgY291bnRlcnMuICovCi0JZ2V0X2NvdW50ZXJzKG9sZGluZm8sIGNvdW50ZXJzKTsKLQkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlICovCi0JbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwotCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfb2xkX2VudHJ5LCBvbGRpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LE5VTEwpOwotCXh0X2ZyZWVfdGFibGVfaW5mbyhvbGRpbmZvKTsKLQlpZiAoY29weV90b191c2VyKHRtcC5jb3VudGVycywgY291bnRlcnMsCi0JCQkgc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycykgKiB0bXAubnVtX2NvdW50ZXJzKSAhPSAwKQotCQlyZXQgPSAtRUZBVUxUOwotCXZmcmVlKGNvdW50ZXJzKTsKLQl4dF90YWJsZV91bmxvY2sodCk7Ci0JcmV0dXJuIHJldDsKLQotIHB1dF9tb2R1bGU6Ci0JbW9kdWxlX3B1dCh0LT5tZSk7Ci0JeHRfdGFibGVfdW5sb2NrKHQpOwotIGZyZWVfbmV3aW5mb19jb3VudGVyc191bnRyYW5zOgorIGZyZWVfbmV3aW5mb191bnRyYW5zOgogCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksTlVMTCk7Ci0gZnJlZV9uZXdpbmZvX2NvdW50ZXJzOgotCXZmcmVlKGNvdW50ZXJzKTsKICBmcmVlX25ld2luZm86CiAJeHRfZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogCXJldHVybiByZXQ7CkBAIC0xMDQwLDMxICsxMzIzLDU5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRvX2FkZF9jb3VudGVycyh2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKK2RvX2FkZF9jb3VudGVycyh2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgeHRfY291bnRlcnNfaW5mbyB0bXAsICpwYWRkYzsKKwlzdHJ1Y3QgeHRfY291bnRlcnNfaW5mbyB0bXA7CisJc3RydWN0IHh0X2NvdW50ZXJzICpwYWRkYzsKKwl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOworCWNoYXIgKm5hbWU7CisJaW50IHNpemU7CisJdm9pZCAqcHRtcDsKIAlzdHJ1Y3QgaXB0X3RhYmxlICp0OwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCWludCByZXQgPSAwOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCXN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyBjb21wYXRfdG1wOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSAhPSAwKQorCWlmIChjb21wYXQpIHsKKwkJcHRtcCA9ICZjb21wYXRfdG1wOworCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCXB0bXAgPSAmdG1wOworCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVyc19pbmZvKTsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIocHRtcCwgdXNlciwgc2l6ZSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAobGVuICE9IHNpemVvZih0bXApICsgdG1wLm51bV9jb3VudGVycypzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSkKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJaWYgKGNvbXBhdCkgeworCQludW1fY291bnRlcnMgPSBjb21wYXRfdG1wLm51bV9jb3VudGVyczsKKwkJbmFtZSA9IGNvbXBhdF90bXAubmFtZTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJbnVtX2NvdW50ZXJzID0gdG1wLm51bV9jb3VudGVyczsKKwkJbmFtZSA9IHRtcC5uYW1lOworCX0KKworCWlmIChsZW4gIT0gc2l6ZSArIG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBhZGRjID0gdm1hbGxvY19ub2RlKGxlbiwgbnVtYV9ub2RlX2lkKCkpOworCXBhZGRjID0gdm1hbGxvY19ub2RlKGxlbiAtIHNpemUsIG51bWFfbm9kZV9pZCgpKTsKIAlpZiAoIXBhZGRjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihwYWRkYywgdXNlciwgbGVuKSAhPSAwKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKHBhZGRjLCB1c2VyICsgc2l6ZSwgbGVuIC0gc2l6ZSkgIT0gMCkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIGZyZWU7CiAJfQogCi0JdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCB0bXAubmFtZSk7CisJdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCBuYW1lKTsKIAlpZiAoIXQgfHwgSVNfRVJSKHQpKSB7CiAJCXJldCA9IHQgPyBQVFJfRVJSKHQpIDogLUVOT0VOVDsKIAkJZ290byBmcmVlOwpAQCAtMTA3Miw3ICsxMzgzLDcgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwotCWlmIChwcml2YXRlLT5udW1iZXIgIT0gcGFkZGMtPm51bV9jb3VudGVycykgeworCWlmIChwcml2YXRlLT5udW1iZXIgIT0gbnVtX2NvdW50ZXJzKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrX3VwX2ZyZWU7CiAJfQpAQCAtMTA4Myw3ICsxMzk0LDcgQEAKIAlJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LAogCQkJICBwcml2YXRlLT5zaXplLAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKLQkJCSAgcGFkZGMtPmNvdW50ZXJzLAorCQkJICBwYWRkYywKIAkJCSAgJmkpOwogIHVubG9ja191cF9mcmVlOgogCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CkBAIC0xMDk1LDYgKzE0MDYsNjA5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfaXB0X3JlcGxhY2UgeworCWNoYXIJCQluYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKwl1MzIJCQl2YWxpZF9ob29rczsKKwl1MzIJCQludW1fZW50cmllczsKKwl1MzIJCQlzaXplOworCXUzMgkJCWhvb2tfZW50cnlbTkZfSVBfTlVNSE9PS1NdOworCXUzMgkJCXVuZGVyZmxvd1tORl9JUF9OVU1IT09LU107CisJdTMyCQkJbnVtX2NvdW50ZXJzOworCWNvbXBhdF91cHRyX3QJCWNvdW50ZXJzOwkvKiBzdHJ1Y3QgaXB0X2NvdW50ZXJzICogKi8KKwlzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeQllbnRyaWVzWzBdOworfTsKKworc3RhdGljIGlubGluZSBpbnQgY29tcGF0X2NvcHlfbWF0Y2hfdG9fdXNlcihzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLAorCQl2b2lkIF9fdXNlciAqKmRzdHB0ciwgY29tcGF0X3VpbnRfdCAqc2l6ZSkKK3sKKwlpZiAobS0+dS5rZXJuZWwubWF0Y2gtPmNvbXBhdCkKKwkJcmV0dXJuIG0tPnUua2VybmVsLm1hdGNoLT5jb21wYXQobSwgZHN0cHRyLCBzaXplLAorCQkJCUNPTVBBVF9UT19VU0VSKTsKKwllbHNlCisJCXJldHVybiB4dF9jb21wYXRfbWF0Y2gobSwgZHN0cHRyLCBzaXplLCBDT01QQVRfVE9fVVNFUik7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2NvcHlfZW50cnlfdG9fdXNlcihzdHJ1Y3QgaXB0X2VudHJ5ICplLAorCQl2b2lkIF9fdXNlciAqKmRzdHB0ciwgY29tcGF0X3VpbnRfdCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCBfX3VzZXIgKnQ7CisJc3RydWN0IGNvbXBhdF9pcHRfZW50cnkgX191c2VyICpjZTsKKwl1X2ludDE2X3QgdGFyZ2V0X29mZnNldCwgbmV4dF9vZmZzZXQ7CisJY29tcGF0X3VpbnRfdCBvcmlnc2l6ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gLUVGQVVMVDsKKwlvcmlnc2l6ZSA9ICpzaXplOworCWNlID0gKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5IF9fdXNlciAqKSpkc3RwdHI7CisJaWYgKGNvcHlfdG9fdXNlcihjZSwgZSwgc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpKSkKKwkJZ290byBvdXQ7CisKKwkqZHN0cHRyICs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSk7CisJcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NvcHlfbWF0Y2hfdG9fdXNlciwgZHN0cHRyLCBzaXplKTsKKwl0YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwl0ID0gaXB0X2dldF90YXJnZXQoZSk7CisJaWYgKHQtPnUua2VybmVsLnRhcmdldC0+Y29tcGF0KQorCQlyZXQgPSB0LT51Lmtlcm5lbC50YXJnZXQtPmNvbXBhdCh0LCBkc3RwdHIsIHNpemUsCisJCQkJQ09NUEFUX1RPX1VTRVIpOworCWVsc2UKKwkJcmV0ID0geHRfY29tcGF0X3RhcmdldCh0LCBkc3RwdHIsIHNpemUsIENPTVBBVF9UT19VU0VSKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXQgPSAtRUZBVUxUOworCW5leHRfb2Zmc2V0ID0gZS0+bmV4dF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7CisJaWYgKHB1dF91c2VyKHRhcmdldF9vZmZzZXQsICZjZS0+dGFyZ2V0X29mZnNldCkpCisJCWdvdG8gb3V0OworCWlmIChwdXRfdXNlcihuZXh0X29mZnNldCwgJmNlLT5uZXh0X29mZnNldCkpCisJCWdvdG8gb3V0OworCXJldHVybiAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citjb21wYXRfY2hlY2tfY2FsY19tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLAorCSAgICBjb25zdCBjaGFyICpuYW1lLAorCSAgICBjb25zdCBzdHJ1Y3QgaXB0X2lwICppcCwKKwkgICAgdW5zaWduZWQgaW50IGhvb2ttYXNrLAorCSAgICBpbnQgKnNpemUsIGludCAqaSkKK3sKKwlzdHJ1Y3QgaXB0X21hdGNoICptYXRjaDsKKworCW1hdGNoID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeHRfZmluZF9tYXRjaChBRl9JTkVULCBtLT51LnVzZXIubmFtZSwKKwkJCQkJCSAgIG0tPnUudXNlci5yZXZpc2lvbiksCisJCQkJCSJpcHRfJXMiLCBtLT51LnVzZXIubmFtZSk7CisJaWYgKElTX0VSUihtYXRjaCkgfHwgIW1hdGNoKSB7CisJCWR1cHJpbnRmKCJjb21wYXRfY2hlY2tfY2FsY19tYXRjaDogYCVzJyBub3QgZm91bmRcbiIsCisJCQkJbS0+dS51c2VyLm5hbWUpOworCQlyZXR1cm4gbWF0Y2ggPyBQVFJfRVJSKG1hdGNoKSA6IC1FTk9FTlQ7CisJfQorCW0tPnUua2VybmVsLm1hdGNoID0gbWF0Y2g7CisKKwlpZiAobS0+dS5rZXJuZWwubWF0Y2gtPmNvbXBhdCkKKwkJbS0+dS5rZXJuZWwubWF0Y2gtPmNvbXBhdChtLCBOVUxMLCBzaXplLCBDT01QQVRfQ0FMQ19TSVpFKTsKKwllbHNlCisJCXh0X2NvbXBhdF9tYXRjaChtLCBOVUxMLCBzaXplLCBDT01QQVRfQ0FMQ19TSVpFKTsKKworCSgqaSkrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2NoZWNrX2NvbXBhdF9lbnRyeV9zaXplX2FuZF9ob29rcyhzdHJ1Y3QgaXB0X2VudHJ5ICplLAorCQkJICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCisJCQkgICB1bnNpZ25lZCBpbnQgKnNpemUsCisJCQkgICB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJICAgdW5zaWduZWQgY2hhciAqbGltaXQsCisJCQkgICB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKKwkJCSAgIHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKKwkJCSAgIHVuc2lnbmVkIGludCAqaSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJc3RydWN0IGlwdF90YXJnZXQgKnRhcmdldDsKKwl1X2ludDE2X3QgZW50cnlfb2Zmc2V0OworCWludCByZXQsIG9mZiwgaCwgajsKKworCWR1cHJpbnRmKCJjaGVja19jb21wYXRfZW50cnlfc2l6ZV9hbmRfaG9va3MgJXBcbiIsIGUpOworCWlmICgodW5zaWduZWQgbG9uZyllICUgX19hbGlnbm9mX18oc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpICE9IDAKKwkgICAgfHwgKHVuc2lnbmVkIGNoYXIgKillICsgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5KSA+PSBsaW1pdCkgeworCQlkdXByaW50ZigiQmFkIG9mZnNldCAlcCwgbGltaXQgPSAlcFxuIiwgZSwgbGltaXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZS0+bmV4dF9vZmZzZXQgPCBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpICsKKwkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X3RhcmdldCkpIHsKKwkJZHVwcmludGYoImNoZWNraW5nOiBlbGVtZW50ICVwIHNpemUgJXVcbiIsCisJCQkgZSwgZS0+bmV4dF9vZmZzZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWlwX2NoZWNrZW50cnkoJmUtPmlwKSkgeworCQlkdXByaW50ZigiaXBfdGFibGVzOiBpcCBjaGVjayBmYWlsZWQgJXAgJXMuXG4iLCBlLCBuYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb2ZmID0gMDsKKwllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSAodm9pZCAqKWJhc2U7CisJaiA9IDA7CisJcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NoZWNrX2NhbGNfbWF0Y2gsIG5hbWUsICZlLT5pcCwKKwkJCWUtPmNvbWVmcm9tLCAmb2ZmLCAmaik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKKworCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKKwl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVULAorCQkJCQkJICAgICB0LT51LnVzZXIubmFtZSwKKwkJCQkJCSAgICAgdC0+dS51c2VyLnJldmlzaW9uKSwKKwkJCQkJICJpcHRfJXMiLCB0LT51LnVzZXIubmFtZSk7CisJaWYgKElTX0VSUih0YXJnZXQpIHx8ICF0YXJnZXQpIHsKKwkJZHVwcmludGYoImNoZWNrX2VudHJ5OiBgJXMnIG5vdCBmb3VuZFxuIiwgdC0+dS51c2VyLm5hbWUpOworCQlyZXQgPSB0YXJnZXQgPyBQVFJfRVJSKHRhcmdldCkgOiAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJdC0+dS5rZXJuZWwudGFyZ2V0ID0gdGFyZ2V0OworCisJaWYgKHQtPnUua2VybmVsLnRhcmdldC0+Y29tcGF0KQorCQl0LT51Lmtlcm5lbC50YXJnZXQtPmNvbXBhdCh0LCBOVUxMLCAmb2ZmLCBDT01QQVRfQ0FMQ19TSVpFKTsKKwllbHNlCisJCXh0X2NvbXBhdF90YXJnZXQodCwgTlVMTCwgJm9mZiwgQ09NUEFUX0NBTENfU0laRSk7CisJKnNpemUgKz0gb2ZmOworCXJldCA9IGNvbXBhdF9hZGRfb2Zmc2V0KGVudHJ5X29mZnNldCwgb2ZmKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIENoZWNrIGhvb2tzICYgdW5kZXJmbG93cyAqLworCWZvciAoaCA9IDA7IGggPCBORl9JUF9OVU1IT09LUzsgaCsrKSB7CisJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IGhvb2tfZW50cmllc1toXSkKKwkJCW5ld2luZm8tPmhvb2tfZW50cnlbaF0gPSBob29rX2VudHJpZXNbaF07CisJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IHVuZGVyZmxvd3NbaF0pCisJCQluZXdpbmZvLT51bmRlcmZsb3dbaF0gPSB1bmRlcmZsb3dzW2hdOworCX0KKworCS8qIENsZWFyIGNvdW50ZXJzIGFuZCBjb21lZnJvbSAqLworCWUtPmNvdW50ZXJzID0gKChzdHJ1Y3QgaXB0X2NvdW50ZXJzKSB7IDAsIDAgfSk7CisJZS0+Y29tZWZyb20gPSAwOworCisJKCppKSsrOworCXJldHVybiAwOworb3V0OgorCUlQVF9NQVRDSF9JVEVSQVRFKGUsIGNsZWFudXBfbWF0Y2gsICZqKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBjb21wYXRfY29weV9tYXRjaF9mcm9tX3VzZXIoc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwKKwl2b2lkICoqZHN0cHRyLCBjb21wYXRfdWludF90ICpzaXplLCBjb25zdCBjaGFyICpuYW1lLAorCWNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwLCB1bnNpZ25lZCBpbnQgaG9va21hc2spCit7CisJc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqZG07CisJc3RydWN0IGlwdF9tYXRjaCAqbWF0Y2g7CisJaW50IHJldDsKKworCWRtID0gKHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKikqZHN0cHRyOworCW1hdGNoID0gbS0+dS5rZXJuZWwubWF0Y2g7CisJaWYgKG1hdGNoLT5jb21wYXQpCisJCW1hdGNoLT5jb21wYXQobSwgZHN0cHRyLCBzaXplLCBDT01QQVRfRlJPTV9VU0VSKTsKKwllbHNlCisJCXh0X2NvbXBhdF9tYXRjaChtLCBkc3RwdHIsIHNpemUsIENPTVBBVF9GUk9NX1VTRVIpOworCisJcmV0ID0geHRfY2hlY2tfbWF0Y2gobWF0Y2gsIEFGX0lORVQsIGRtLT51Lm1hdGNoX3NpemUgLSBzaXplb2YoKmRtKSwKKwkJCSAgICAgbmFtZSwgaG9va21hc2ssIGlwLT5wcm90bywKKwkJCSAgICAgaXAtPmludmZsYWdzICYgSVBUX0lOVl9QUk9UTyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChtLT51Lmtlcm5lbC5tYXRjaC0+Y2hlY2tlbnRyeQorCSAgICAmJiAhbS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkobmFtZSwgaXAsIG1hdGNoLCBkbS0+ZGF0YSwKKwkJCQkJICAgICAgZG0tPnUubWF0Y2hfc2l6ZSAtIHNpemVvZigqZG0pLAorCQkJCQkgICAgICBob29rbWFzaykpIHsKKwkJZHVwcmludGYoImlwX3RhYmxlczogY2hlY2sgZmFpbGVkIGZvciBgJXMnLlxuIiwKKwkJCSBtLT51Lmtlcm5lbC5tYXRjaC0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfY29weV9lbnRyeV9mcm9tX3VzZXIoc3RydWN0IGlwdF9lbnRyeSAqZSwgdm9pZCAqKmRzdHB0ciwKKwl1bnNpZ25lZCBpbnQgKnNpemUsIGNvbnN0IGNoYXIgKm5hbWUsCisJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIHVuc2lnbmVkIGNoYXIgKmJhc2UpCit7CisJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJc3RydWN0IGlwdF90YXJnZXQgKnRhcmdldDsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICpkZTsKKwl1bnNpZ25lZCBpbnQgb3JpZ3NpemU7CisJaW50IHJldCwgaDsKKworCXJldCA9IDA7CisJb3JpZ3NpemUgPSAqc2l6ZTsKKwlkZSA9IChzdHJ1Y3QgaXB0X2VudHJ5ICopKmRzdHB0cjsKKwltZW1jcHkoZGUsIGUsIHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSk7CisKKwkqZHN0cHRyICs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSk7CisJcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NvcHlfbWF0Y2hfZnJvbV91c2VyLCBkc3RwdHIsIHNpemUsCisJCQluYW1lLCAmZGUtPmlwLCBkZS0+Y29tZWZyb20pOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCWRlLT50YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKKwl0ID0gaXB0X2dldF90YXJnZXQoZSk7CisJdGFyZ2V0ID0gdC0+dS5rZXJuZWwudGFyZ2V0OworCWlmICh0YXJnZXQtPmNvbXBhdCkKKwkJdGFyZ2V0LT5jb21wYXQodCwgZHN0cHRyLCBzaXplLCBDT01QQVRfRlJPTV9VU0VSKTsKKwllbHNlCisJCXh0X2NvbXBhdF90YXJnZXQodCwgZHN0cHRyLCBzaXplLCBDT01QQVRfRlJPTV9VU0VSKTsKKworCWRlLT5uZXh0X29mZnNldCA9IGUtPm5leHRfb2Zmc2V0IC0gKG9yaWdzaXplIC0gKnNpemUpOworCWZvciAoaCA9IDA7IGggPCBORl9JUF9OVU1IT09LUzsgaCsrKSB7CisJCWlmICgodW5zaWduZWQgY2hhciAqKWRlIC0gYmFzZSA8IG5ld2luZm8tPmhvb2tfZW50cnlbaF0pCisJCQluZXdpbmZvLT5ob29rX2VudHJ5W2hdIC09IG9yaWdzaXplIC0gKnNpemU7CisJCWlmICgodW5zaWduZWQgY2hhciAqKWRlIC0gYmFzZSA8IG5ld2luZm8tPnVuZGVyZmxvd1toXSkKKwkJCW5ld2luZm8tPnVuZGVyZmxvd1toXSAtPSBvcmlnc2l6ZSAtICpzaXplOworCX0KKworCXQgPSBpcHRfZ2V0X3RhcmdldChkZSk7CisJdGFyZ2V0ID0gdC0+dS5rZXJuZWwudGFyZ2V0OworCXJldCA9IHh0X2NoZWNrX3RhcmdldCh0YXJnZXQsIEFGX0lORVQsIHQtPnUudGFyZ2V0X3NpemUgLSBzaXplb2YoKnQpLAorCQkJICAgICAgbmFtZSwgZS0+Y29tZWZyb20sIGUtPmlwLnByb3RvLAorCQkJICAgICAgZS0+aXAuaW52ZmxhZ3MgJiBJUFRfSU5WX1BST1RPKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FSU5WQUw7CisJaWYgKHQtPnUua2VybmVsLnRhcmdldCA9PSAmaXB0X3N0YW5kYXJkX3RhcmdldCkgeworCQlpZiAoIXN0YW5kYXJkX2NoZWNrKHQsICpzaXplKSkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5CisJCSAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkobmFtZSwgZGUsIHRhcmdldCwKKwkJCQl0LT5kYXRhLCB0LT51LnRhcmdldF9zaXplIC0gc2l6ZW9mKCp0KSwKKwkJCQlkZS0+Y29tZWZyb20pKSB7CisJCWR1cHJpbnRmKCJpcF90YWJsZXM6IGNvbXBhdDogY2hlY2sgZmFpbGVkIGZvciBgJXMnLlxuIiwKKwkJCSB0LT51Lmtlcm5lbC50YXJnZXQtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cit0cmFuc2xhdGVfY29tcGF0X3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKKwkJc3RydWN0IHh0X3RhYmxlX2luZm8gKipwaW5mbywKKwkJdm9pZCAqKnBlbnRyeTAsCisJCXVuc2lnbmVkIGludCB0b3RhbF9zaXplLAorCQl1bnNpZ25lZCBpbnQgbnVtYmVyLAorCQl1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKKwkJdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCAqaW5mbzsKKwl2b2lkICpwb3MsICplbnRyeTAsICplbnRyeTE7CisJdW5zaWduZWQgaW50IHNpemU7CisJaW50IHJldDsKKworCWluZm8gPSAqcGluZm87CisJZW50cnkwID0gKnBlbnRyeTA7CisJc2l6ZSA9IHRvdGFsX3NpemU7CisJaW5mby0+bnVtYmVyID0gbnVtYmVyOworCisJLyogSW5pdCBhbGwgaG9va3MgdG8gaW1wb3NzaWJsZSB2YWx1ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTkZfSVBfTlVNSE9PS1M7IGkrKykgeworCQlpbmZvLT5ob29rX2VudHJ5W2ldID0gMHhGRkZGRkZGRjsKKwkJaW5mby0+dW5kZXJmbG93W2ldID0gMHhGRkZGRkZGRjsKKwl9CisKKwlkdXByaW50ZigidHJhbnNsYXRlX2NvbXBhdF90YWJsZTogc2l6ZSAldVxuIiwgaW5mby0+c2l6ZSk7CisJaSA9IDA7CisJeHRfY29tcGF0X2xvY2soQUZfSU5FVCk7CisJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCisJcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLAorCQkJCWNoZWNrX2NvbXBhdF9lbnRyeV9zaXplX2FuZF9ob29rcywKKwkJCQlpbmZvLCAmc2l6ZSwgZW50cnkwLAorCQkJCWVudHJ5MCArIHRvdGFsX3NpemUsCisJCQkJaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCAmaSwgbmFtZSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlyZXQgPSAtRUlOVkFMOworCWlmIChpICE9IG51bWJlcikgeworCQlkdXByaW50ZigidHJhbnNsYXRlX2NvbXBhdF90YWJsZTogJXUgbm90ICV1IGVudHJpZXNcbiIsCisJCQkgaSwgbnVtYmVyKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIENoZWNrIGhvb2tzIGFsbCBhc3NpZ25lZCAqLworCWZvciAoaSA9IDA7IGkgPCBORl9JUF9OVU1IT09LUzsgaSsrKSB7CisJCS8qIE9ubHkgaG9va3Mgd2hpY2ggYXJlIHZhbGlkICovCisJCWlmICghKHZhbGlkX2hvb2tzICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWlmIChpbmZvLT5ob29rX2VudHJ5W2ldID09IDB4RkZGRkZGRkYpIHsKKwkJCWR1cHJpbnRmKCJJbnZhbGlkIGhvb2sgZW50cnkgJXUgJXVcbiIsCisJCQkJIGksIGhvb2tfZW50cmllc1tpXSk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwkJaWYgKGluZm8tPnVuZGVyZmxvd1tpXSA9PSAweEZGRkZGRkZGKSB7CisJCQlkdXByaW50ZigiSW52YWxpZCB1bmRlcmZsb3cgJXUgJXVcbiIsCisJCQkJIGksIHVuZGVyZmxvd3NbaV0pOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorCisJcmV0ID0gLUVOT01FTTsKKwluZXdpbmZvID0geHRfYWxsb2NfdGFibGVfaW5mbyhzaXplKTsKKwlpZiAoIW5ld2luZm8pCisJCWdvdG8gb3V0X3VubG9jazsKKworCW5ld2luZm8tPm51bWJlciA9IG51bWJlcjsKKwlmb3IgKGkgPSAwOyBpIDwgTkZfSVBfTlVNSE9PS1M7IGkrKykgeworCQluZXdpbmZvLT5ob29rX2VudHJ5W2ldID0gaW5mby0+aG9va19lbnRyeVtpXTsKKwkJbmV3aW5mby0+dW5kZXJmbG93W2ldID0gaW5mby0+dW5kZXJmbG93W2ldOworCX0KKwllbnRyeTEgPSBuZXdpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCXBvcyA9IGVudHJ5MTsKKwlzaXplID0gIHRvdGFsX3NpemU7CisJcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLAorCQkJY29tcGF0X2NvcHlfZW50cnlfZnJvbV91c2VyLCAmcG9zLCAmc2l6ZSwKKwkJCW5hbWUsIG5ld2luZm8sIGVudHJ5MSk7CisJY29tcGF0X2ZsdXNoX29mZnNldHMoKTsKKwl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9uZXdpbmZvOworCisJcmV0ID0gLUVMT09QOworCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHZhbGlkX2hvb2tzLCBlbnRyeTEpKQorCQlnb3RvIGZyZWVfbmV3aW5mbzsKKworCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCisJZm9yX2VhY2hfY3B1KGkpCisJCWlmIChuZXdpbmZvLT5lbnRyaWVzW2ldICYmIG5ld2luZm8tPmVudHJpZXNbaV0gIT0gZW50cnkxKQorCQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbaV0sIGVudHJ5MSwgbmV3aW5mby0+c2l6ZSk7CisKKwkqcGluZm8gPSBuZXdpbmZvOworCSpwZW50cnkwID0gZW50cnkxOworCXh0X2ZyZWVfdGFibGVfaW5mbyhpbmZvKTsKKwlyZXR1cm4gMDsKKworZnJlZV9uZXdpbmZvOgorCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKK291dDoKKwlyZXR1cm4gcmV0Oworb3V0X3VubG9jazoKKwl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgaW50Citjb21wYXRfZG9fcmVwbGFjZSh2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21wYXRfaXB0X3JlcGxhY2UgdG1wOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOworCXZvaWQgKmxvY19jcHVfZW50cnk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOworCisJLyogSGFjazogQ2F1c2VzIGlwY2hhaW5zIHRvIGdpdmUgY29ycmVjdCBlcnJvciBtc2cgLS1SUiAqLworCWlmIChsZW4gIT0gc2l6ZW9mKHRtcCkgKyB0bXAuc2l6ZSkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCS8qIG92ZXJmbG93IGNoZWNrICovCisJaWYgKHRtcC5zaXplID49IChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCB4dF90YWJsZV9pbmZvKSkgLyBOUl9DUFVTIC0KKwkJCVNNUF9DQUNIRV9CWVRFUykKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHRtcC5udW1fY291bnRlcnMgPj0gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5ld2luZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHRtcC5zaXplKTsKKwlpZiAoIW5ld2luZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb3VyIG5vZGUvY3B1ICovCisJbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaWYgKGNvcHlfZnJvbV91c2VyKGxvY19jcHVfZW50cnksIHVzZXIgKyBzaXplb2YodG1wKSwKKwkJCSAgIHRtcC5zaXplKSAhPSAwKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZnJlZV9uZXdpbmZvOworCX0KKworCXJldCA9IHRyYW5zbGF0ZV9jb21wYXRfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKKwkJCSAgICAgICZuZXdpbmZvLCAmbG9jX2NwdV9lbnRyeSwgdG1wLnNpemUsCisJCQkgICAgICB0bXAubnVtX2VudHJpZXMsIHRtcC5ob29rX2VudHJ5LCB0bXAudW5kZXJmbG93KTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZnJlZV9uZXdpbmZvOworCisJZHVwcmludGYoImNvbXBhdF9kb19yZXBsYWNlOiBUcmFuc2xhdGVkIHRhYmxlXG4iKTsKKworCXJldCA9IF9fZG9fcmVwbGFjZSh0bXAubmFtZSwgdG1wLnZhbGlkX2hvb2tzLAorCQkJICAgICAgbmV3aW5mbywgdG1wLm51bV9jb3VudGVycywKKwkJCSAgICAgIGNvbXBhdF9wdHIodG1wLmNvdW50ZXJzKSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX25ld2luZm9fdW50cmFuczsKKwlyZXR1cm4gMDsKKworIGZyZWVfbmV3aW5mb191bnRyYW5zOgorCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksTlVMTCk7CisgZnJlZV9uZXdpbmZvOgorCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citjb21wYXRfZG9faXB0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLAlpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwKKwkJdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElQVF9TT19TRVRfUkVQTEFDRToKKwkJcmV0ID0gY29tcGF0X2RvX3JlcGxhY2UodXNlciwgbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIElQVF9TT19TRVRfQUREX0NPVU5URVJTOgorCQlyZXQgPSBkb19hZGRfY291bnRlcnModXNlciwgbGVuLCAxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkdXByaW50ZigiZG9faXB0X3NldF9jdGw6ICB1bmtub3duIHJlcXVlc3QgJWlcbiIsIGNtZCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMKK3sKKwljaGFyIG5hbWVbSVBUX1RBQkxFX01BWE5BTUVMRU5dOworCWNvbXBhdF91aW50X3Qgc2l6ZTsKKwlzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSBlbnRyeXRhYmxlWzBdOworfTsKKworc3RhdGljIGludCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCisJCSAgICAgc3RydWN0IGlwdF90YWJsZSAqdGFibGUsIHZvaWQgX191c2VyICp1c2VycHRyKQoreworCXVuc2lnbmVkIGludCBvZmYsIG51bTsKKwlzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSBlOworCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwl2b2lkIF9fdXNlciAqcG9zOworCXVuc2lnbmVkIGludCBzaXplOworCWludCByZXQgPSAwOworCXZvaWQgKmxvY19jcHVfZW50cnk7CisKKwljb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTsKKwlpZiAoSVNfRVJSKGNvdW50ZXJzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY291bnRlcnMpOworCisJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUvY3B1LCAuLi4KKwkgKiBUaGlzIGNob2ljZSBpcyBsYXp5IChiZWNhdXNlIGN1cnJlbnQgdGhyZWFkIGlzCisJICogYWxsb3dlZCB0byBtaWdyYXRlIHRvIGFub3RoZXIgY3B1KQorCSAqLworCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCXBvcyA9IHVzZXJwdHI7CisJc2l6ZSA9IHRvdGFsX3NpemU7CisJcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgdG90YWxfc2l6ZSwKKwkJCWNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIsICZwb3MsICZzaXplKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfY291bnRlcnM7CisKKwkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCisJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgPCBzaXplOyBvZmYgKz0gZS5uZXh0X29mZnNldCwgbnVtKyspIHsKKwkJdW5zaWduZWQgaW50IGk7CisJCXN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggbTsKKwkJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgdDsKKworCQlyZXQgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmUsIHVzZXJwdHIgKyBvZmYsCisJCQkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSkpKQorCQkJZ290byBmcmVlX2NvdW50ZXJzOworCQlpZiAoY29weV90b191c2VyKHVzZXJwdHIgKyBvZmYgKworCQkJb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnksIGNvdW50ZXJzKSwKKwkJCSAmY291bnRlcnNbbnVtXSwgc2l6ZW9mKGNvdW50ZXJzW251bV0pKSkKKwkJCWdvdG8gZnJlZV9jb3VudGVyczsKKworCQlmb3IgKGkgPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOworCQkJCWkgPCBlLnRhcmdldF9vZmZzZXQ7IGkgKz0gbS51Lm1hdGNoX3NpemUpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmbSwgdXNlcnB0ciArIG9mZiArIGksCisJCQkJCXNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoKSkpCisJCQkJZ290byBmcmVlX2NvdW50ZXJzOworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgaSArCisJCQkJb2Zmc2V0b2Yoc3RydWN0IGlwdF9lbnRyeV9tYXRjaCwgdS51c2VyLm5hbWUpLAorCQkJCW0udS5rZXJuZWwubWF0Y2gtPm5hbWUsCisJCQkJc3RybGVuKG0udS5rZXJuZWwubWF0Y2gtPm5hbWUpICsgMSkpCisJCQkJZ290byBmcmVlX2NvdW50ZXJzOworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0LCB1c2VycHRyICsgb2ZmICsgZS50YXJnZXRfb2Zmc2V0LAorCQkJCQlzaXplb2Yoc3RydWN0IGlwdF9lbnRyeV90YXJnZXQpKSkKKwkJCWdvdG8gZnJlZV9jb3VudGVyczsKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgZS50YXJnZXRfb2Zmc2V0ICsKKwkJCW9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0LCB1LnVzZXIubmFtZSksCisJCQl0LnUua2VybmVsLnRhcmdldC0+bmFtZSwKKwkJCXN0cmxlbih0LnUua2VybmVsLnRhcmdldC0+bmFtZSkgKyAxKSkKKwkJCWdvdG8gZnJlZV9jb3VudGVyczsKKwl9CisJcmV0ID0gMDsKK2ZyZWVfY291bnRlcnM6CisJdmZyZWUoY291bnRlcnMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsIGludCAqbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgZ2V0OworCXN0cnVjdCBpcHRfdGFibGUgKnQ7CisKKworCWlmICgqbGVuIDwgc2l6ZW9mKGdldCkpIHsKKwkJZHVwcmludGYoImNvbXBhdF9nZXRfZW50cmllczogJXUgPCAldVxuIiwKKwkJCQkqbGVuLCAodW5zaWduZWQgaW50KXNpemVvZihnZXQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKCZnZXQsIHVwdHIsIHNpemVvZihnZXQpKSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcykgKyBnZXQuc2l6ZSkgeworCQlkdXByaW50ZigiY29tcGF0X2dldF9lbnRyaWVzOiAldSAhPSAldVxuIiwgKmxlbiwKKwkJCSh1bnNpZ25lZCBpbnQpKHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcykgKworCQkJZ2V0LnNpemUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJeHRfY29tcGF0X2xvY2soQUZfSU5FVCk7CisJdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCBnZXQubmFtZSk7CisJaWYgKHQgJiYgIUlTX0VSUih0KSkgeworCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtPnByaXZhdGU7CisJCXN0cnVjdCB4dF90YWJsZV9pbmZvIGluZm87CisJCWR1cHJpbnRmKCJ0LT5wcml2YXRlLT5udW1iZXIgPSAldVxuIiwKKwkJCSBwcml2YXRlLT5udW1iZXIpOworCQlyZXQgPSBjb21wYXRfdGFibGVfaW5mbyhwcml2YXRlLCAmaW5mbyk7CisJCWlmICghcmV0ICYmIGdldC5zaXplID09IGluZm8uc2l6ZSkgeworCQkJcmV0ID0gY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHByaXZhdGUtPnNpemUsCisJCQkJCQkgICB0LCB1cHRyLT5lbnRyeXRhYmxlKTsKKwkJfSBlbHNlIGlmICghcmV0KSB7CisJCQlkdXByaW50ZigiY29tcGF0X2dldF9lbnRyaWVzOiBJJ3ZlIGdvdCAldSBub3QgJXUhXG4iLAorCQkJCSBwcml2YXRlLT5zaXplLAorCQkJCSBnZXQuc2l6ZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCWNvbXBhdF9mbHVzaF9vZmZzZXRzKCk7CisJCW1vZHVsZV9wdXQodC0+bWUpOworCQl4dF90YWJsZV91bmxvY2sodCk7CisJfSBlbHNlCisJCXJldCA9IHQgPyBQVFJfRVJSKHQpIDogLUVOT0VOVDsKKworCXh0X2NvbXBhdF91bmxvY2soQUZfSU5FVCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY29tcGF0X2RvX2lwdF9nZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSVBUX1NPX0dFVF9JTkZPOgorCQlyZXQgPSBnZXRfaW5mbyh1c2VyLCBsZW4sIDEpOworCQlicmVhazsKKwljYXNlIElQVF9TT19HRVRfRU5UUklFUzoKKwkJcmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHVzZXIsIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWR1cHJpbnRmKCJjb21wYXRfZG9faXB0X2dldF9jdGw6IHVua25vd24gcmVxdWVzdCAlaVxuIiwgY21kKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50CiBkb19pcHRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssCWludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQogewpAQCAtMTEwOSw3ICsyMDIzLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElQVF9TT19TRVRfQUREX0NPVU5URVJTOgotCQlyZXQgPSBkb19hZGRfY291bnRlcnModXNlciwgbGVuKTsKKwkJcmV0ID0gZG9fYWRkX2NvdW50ZXJzKHVzZXIsIGxlbiwgMCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTExMjksNjUgKzIwNDMsMTMgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBJUFRfU09fR0VUX0lORk86IHsKLQkJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKLQkJc3RydWN0IGlwdF90YWJsZSAqdDsKLQotCQlpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGlwdF9nZXRpbmZvKSkgewotCQkJZHVwcmludGYoImxlbmd0aCAldSAhPSAldVxuIiwgKmxlbiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHRfZ2V0aW5mbykpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsIHVzZXIsIHNpemVvZihuYW1lKSkgIT0gMCkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0JCW5hbWVbSVBUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAnXDAnOwotCi0JCXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhYmxlX2xvY2soQUZfSU5FVCwgbmFtZSksCi0JCQkJCSAgICAiaXB0YWJsZV8lcyIsIG5hbWUpOwotCQlpZiAodCAmJiAhSVNfRVJSKHQpKSB7Ci0JCQlzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbzsKLQkJCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKLQotCQkJaW5mby52YWxpZF9ob29rcyA9IHQtPnZhbGlkX2hvb2tzOwotCQkJbWVtY3B5KGluZm8uaG9va19lbnRyeSwgcHJpdmF0ZS0+aG9va19lbnRyeSwKLQkJCSAgICAgICBzaXplb2YoaW5mby5ob29rX2VudHJ5KSk7Ci0JCQltZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtPnVuZGVyZmxvdywKLQkJCSAgICAgICBzaXplb2YoaW5mby51bmRlcmZsb3cpKTsKLQkJCWluZm8ubnVtX2VudHJpZXMgPSBwcml2YXRlLT5udW1iZXI7Ci0JCQlpbmZvLnNpemUgPSBwcml2YXRlLT5zaXplOwotCQkJbWVtY3B5KGluZm8ubmFtZSwgbmFtZSwgc2l6ZW9mKGluZm8ubmFtZSkpOwotCi0JCQlpZiAoY29weV90b191c2VyKHVzZXIsICZpbmZvLCAqbGVuKSAhPSAwKQotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQllbHNlCi0JCQkJcmV0ID0gMDsKLQkJCXh0X3RhYmxlX3VubG9jayh0KTsKLQkJCW1vZHVsZV9wdXQodC0+bWUpOwotCQl9IGVsc2UKLQkJCXJldCA9IHQgPyBQVFJfRVJSKHQpIDogLUVOT0VOVDsKLQl9Ci0JYnJlYWs7Ci0KLQljYXNlIElQVF9TT19HRVRfRU5UUklFUzogewotCQlzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDsKLQotCQlpZiAoKmxlbiA8IHNpemVvZihnZXQpKSB7Ci0JCQlkdXByaW50ZigiZ2V0X2VudHJpZXM6ICV1IDwgJXVcbiIsICpsZW4sIHNpemVvZihnZXQpKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmdldCwgdXNlciwgc2l6ZW9mKGdldCkpICE9IDApIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0gZWxzZSBpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGlwdF9nZXRfZW50cmllcykgKyBnZXQuc2l6ZSkgewotCQkJZHVwcmludGYoImdldF9lbnRyaWVzOiAldSAhPSAldVxuIiwgKmxlbiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMpICsgZ2V0LnNpemUpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJfSBlbHNlCi0JCQlyZXQgPSBnZXRfZW50cmllcygmZ2V0LCB1c2VyKTsKKwljYXNlIElQVF9TT19HRVRfSU5GTzoKKwkJcmV0ID0gZ2V0X2luZm8odXNlciwgbGVuLCAwKTsKIAkJYnJlYWs7Ci0JfQorCisJY2FzZSBJUFRfU09fR0VUX0VOVFJJRVM6CisJCXJldCA9IGdldF9lbnRyaWVzKHVzZXIsIGxlbik7CisJCWJyZWFrOwogCiAJY2FzZSBJUFRfU09fR0VUX1JFVklTSU9OX01BVENIOgogCWNhc2UgSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQ6IHsKQEAgLTEzMzYsNiArMjE5OCw5IEBACiAJLm5hbWUJCT0gSVBUX1NUQU5EQVJEX1RBUkdFVCwKIAkudGFyZ2V0c2l6ZQk9IHNpemVvZihpbnQpLAogCS5mYW1pbHkJCT0gQUZfSU5FVCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdAkJPSAmY29tcGF0X2lwdF9zdGFuZGFyZF9mbiwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9lcnJvcl90YXJnZXQgPSB7CkBAIC0xMzUwLDkgKzIyMTUsMTUgQEAKIAkuc2V0X29wdG1pbgk9IElQVF9CQVNFX0NUTCwKIAkuc2V0X29wdG1heAk9IElQVF9TT19TRVRfTUFYKzEsCiAJLnNldAkJPSBkb19pcHRfc2V0X2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXQJPSBjb21wYXRfZG9faXB0X3NldF9jdGwsCisjZW5kaWYKIAkuZ2V0X29wdG1pbgk9IElQVF9CQVNFX0NUTCwKIAkuZ2V0X29wdG1heAk9IElQVF9TT19HRVRfTUFYKzEsCiAJLmdldAkJPSBkb19pcHRfZ2V0X2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9nZXQJPSBjb21wYXRfZG9faXB0X2dldF9jdGwsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIGljbXBfbWF0Y2hzdHJ1Y3QgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCBlNDc2OGEzLi5hYWQ5ZDI4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTcyNSwyMiArNzI1LDE3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgZmluaSkKK3N0YXRpYyBpbnQgX19pbml0IGlwdF9jbHVzdGVyaXBfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlpZiAoZmluaSkKLQkJZ290byBjbGVhbnVwOworCXJldCA9IGlwdF9yZWdpc3Rlcl90YXJnZXQoJmNsdXN0ZXJpcF90Z3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCi0JaWYgKGlwdF9yZWdpc3Rlcl90YXJnZXQoJmNsdXN0ZXJpcF90Z3QpKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gY2xlYW51cF9ub25lOwotCX0KLQotCWlmIChuZl9yZWdpc3Rlcl9ob29rKCZjaXBfYXJwX29wcykgPCAwKSB7Ci0JCXJldCA9IC1FSU5WQUw7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFyZ2V0OwotCX0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJY2x1c3RlcmlwX3Byb2NkaXIgPSBwcm9jX21rZGlyKCJpcHRfQ0xVU1RFUklQIiwgcHJvY19uZXQpOwpAQCAtNzUzLDMxICs3NDgsMjQgQEAKIAogCXByaW50ayhLRVJOX05PVElDRSAiQ2x1c3RlcklQIFZlcnNpb24gJXMgbG9hZGVkIHN1Y2Nlc3NmdWxseVxuIiwKIAkJQ0xVU1RFUklQX1ZFUlNJT04pOwotCiAJcmV0dXJuIDA7CiAKLWNsZWFudXA6CitjbGVhbnVwX2hvb2s6CisJbmZfdW5yZWdpc3Rlcl9ob29rKCZjaXBfYXJwX29wcyk7CitjbGVhbnVwX3RhcmdldDoKKwlpcHRfdW5yZWdpc3Rlcl90YXJnZXQoJmNsdXN0ZXJpcF90Z3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcHRfY2x1c3RlcmlwX2Zpbmkodm9pZCkKK3sKIAlwcmludGsoS0VSTl9OT1RJQ0UgIkNsdXN0ZXJJUCBWZXJzaW9uICVzIHVubG9hZGluZ1xuIiwKIAkJQ0xVU1RFUklQX1ZFUlNJT04pOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcmVtb3ZlX3Byb2NfZW50cnkoY2x1c3RlcmlwX3Byb2NkaXItPm5hbWUsIGNsdXN0ZXJpcF9wcm9jZGlyLT5wYXJlbnQpOwogI2VuZGlmCi1jbGVhbnVwX2hvb2s6CiAJbmZfdW5yZWdpc3Rlcl9ob29rKCZjaXBfYXJwX29wcyk7Ci1jbGVhbnVwX3RhcmdldDoKIAlpcHRfdW5yZWdpc3Rlcl90YXJnZXQoJmNsdXN0ZXJpcF90Z3QpOwotY2xlYW51cF9ub25lOgotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpcHRfY2x1c3RlcmlwX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXB0X2NsdXN0ZXJpcF9maW5pKHZvaWQpCi17Ci0JaW5pdF9vcl9jbGVhbnVwKDEpOwogfQogCiBtb2R1bGVfaW5pdChpcHRfY2x1c3RlcmlwX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKaW5kZXggMzlmZDRjMi4uYjk4ZjdiMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAogCWlmIChsb2dpbmZvLT5sb2dmbGFncyAmIElQVF9MT0dfTkZMT0cpCiAJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgaG9va251bSwgKnBza2IsIGluLCBvdXQsICZsaSwKLQkJICAgICAgICAgICAgICBsb2dpbmZvLT5wcmVmaXgpOworCQkgICAgICAgICAgICAgICIlcyIsIGxvZ2luZm8tPnByZWZpeCk7CiAJZWxzZQogCQlpcHRfbG9nX3BhY2tldChQRl9JTkVULCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAogCQkgICAgICAgICAgICAgICBsb2dpbmZvLT5wcmVmaXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKaW5kZXggNDI2OWE1NC4uMGJiYTNjMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCkBAIC0xMDYsNyArMTA2LDYgQEAKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAl1X2ludDE2X3QgdG1wX3BvcnQ7CiAJdV9pbnQzMl90IHRtcF9hZGRyOwotCXVuc2lnbmVkIGludCB0Y3BsZW47CiAJaW50IG5lZWRzX2FjazsKIAlpbnQgaGhfbGVuOwogCkBAIC0xMjQsMTMgKzEyMyw3IEBACiAJCXJldHVybjsKIAogCS8qIENoZWNrIGNoZWNrc3VtICovCi0JdGNwbGVuID0gb2xkc2tiLT5sZW4gLSBpcGgtPmlobCAqIDQ7Ci0JaWYgKCgoaG9vayAhPSBORl9JUF9MT0NBTF9JTiAmJiBvbGRza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9IVykgfHwKLQkgICAgIChob29rID09IE5GX0lQX0xPQ0FMX0lOICYmCi0JICAgICAgb2xkc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpKSAmJgotCSAgICBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB0Y3BsZW4sIElQUFJPVE9fVENQLAotCSAgICAgICAgICAgICAgICAgICAgICBvbGRza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IG9sZHNrYi0+Y3N1bSA6Ci0JICAgICAgICAgICAgICAgICAgICAgIHNrYl9jaGVja3N1bShvbGRza2IsIGlwaC0+aWhsICogNCwgdGNwbGVuLCAwKSkpCisJaWYgKG5mX2lwX2NoZWNrc3VtKG9sZHNrYiwgaG9vaywgaXBoLT5paGwgKiA0LCBJUFBST1RPX1RDUCkpCiAJCXJldHVybjsKIAogCWlmICgocnQgPSByb3V0ZV9yZXZlcnNlKG9sZHNrYiwgb3RoLCBob29rKSkgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZXNwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2VzcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQwYjQxLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZXNwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyogS2VybmVsIG1vZHVsZSB0byBtYXRjaCBFU1AgcGFyYW1ldGVycy4gKi8KLQotLyogKEMpIDE5OTktMjAwMCBZb24gVXJpYXJ0ZSA8eW9uQGFzdGFyby5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJZb24gVXJpYXJ0ZSA8eW9uQGFzdGFyby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiaXB0YWJsZXMgRVNQIFNQSSBtYXRjaCBtb2R1bGUiKTsKLQotI2lmZGVmIERFQlVHX0NPTk5UUkFDSwotI2RlZmluZSBkdXByaW50Zihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQgLCAjIyBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgZHVwcmludGYoZm9ybWF0LCBhcmdzLi4uKQotI2VuZGlmCi0KLS8qIFJldHVybnMgMSBpZiB0aGUgc3BpIGlzIG1hdGNoZWQgYnkgdGhlIHJhbmdlLCAwIG90aGVyd2lzZSAqLwotc3RhdGljIGlubGluZSBpbnQKLXNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBpbnQgaW52ZXJ0KQotewotCWludCByPTA7Ci0gICAgICAgIGR1cHJpbnRmKCJlc3Agc3BpX21hdGNoOiVjIDB4JXggPD0gMHgleCA8PSAweCV4IixpbnZlcnQ/ICchJzonICcsCi0gICAgICAgIAltaW4sc3BpLG1heCk7Ci0Jcj0oc3BpID49IG1pbiAmJiBzcGkgPD0gbWF4KSBeIGludmVydDsKLQlkdXByaW50ZigiIHJlc3VsdCAlc1xuIixyPyAiUEFTUyIgOiAiRkFJTEVEIik7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQKLW1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0gICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0gICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKLSAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKLSAgICAgIGludCBvZmZzZXQsCi0gICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKLSAgICAgIGludCAqaG90ZHJvcCkKLXsKLQlzdHJ1Y3QgaXBfZXNwX2hkciBfZXNwLCAqZWg7Ci0JY29uc3Qgc3RydWN0IGlwdF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0KLQkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwotCWlmIChvZmZzZXQpCi0JCXJldHVybiAwOwotCi0JZWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b2ZmLAotCQkJCXNpemVvZihfZXNwKSwgJl9lc3ApOwotCWlmIChlaCA9PSBOVUxMKSB7Ci0JCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCi0JCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KLQkJICovCi0JCWR1cHJpbnRmKCJEcm9wcGluZyBldmlsIEVTUCB0aW55Z3JhbS5cbiIpOwotCQkqaG90ZHJvcCA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBzcGlfbWF0Y2goZXNwaW5mby0+c3Bpc1swXSwgZXNwaW5mby0+c3Bpc1sxXSwKLQkJCSBudG9obChlaC0+c3BpKSwKLQkJCSAhIShlc3BpbmZvLT5pbnZmbGFncyAmIElQVF9FU1BfSU5WX1NQSSkpOwotfQotCi0vKiBDYWxsZWQgd2hlbiB1c2VyIHRyaWVzIHRvIGluc2VydCBhbiBlbnRyeSBvZiB0aGlzIHR5cGUuICovCi1zdGF0aWMgaW50Ci1jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkgICBjb25zdCB2b2lkICppcF92b2lkLAotCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCi0JICAgdm9pZCAqbWF0Y2hpbmZvLAotCSAgIHVuc2lnbmVkIGludCBtYXRjaGluZm9zaXplLAotCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JY29uc3Qgc3RydWN0IGlwdF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0KLQkvKiBNdXN0IHNwZWNpZnkgbm8gdW5rbm93biBpbnZmbGFncyAqLwotCWlmIChlc3BpbmZvLT5pbnZmbGFncyAmIH5JUFRfRVNQX0lOVl9NQVNLKSB7Ci0JCWR1cHJpbnRmKCJpcHRfZXNwOiB1bmtub3duIGZsYWdzICVYXG4iLCBlc3BpbmZvLT5pbnZmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggZXNwX21hdGNoID0gewotCS5uYW1lCQk9ICJlc3AiLAotCS5tYXRjaAkJPSBtYXRjaCwKLQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfZXNwKSwKLQkucHJvdG8JCT0gSVBQUk9UT19FU1AsCi0JLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAotCS5tZQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlwdF9lc3BfaW5pdCh2b2lkKQotewotCXJldHVybiBpcHRfcmVnaXN0ZXJfbWF0Y2goJmVzcF9tYXRjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcHRfZXNwX2Zpbmkodm9pZCkKLXsKLQlpcHRfdW5yZWdpc3Rlcl9tYXRjaCgmZXNwX21hdGNoKTsKLX0KLQotbW9kdWxlX2luaXQoaXB0X2VzcF9pbml0KTsKLW1vZHVsZV9leGl0KGlwdF9lc3BfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X211bHRpcG9ydC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9tdWx0aXBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5NWQ4My4uMDAwMDAwMAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X211bHRpcG9ydC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8qIEtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggb25lIG9mIGEgbGlzdCBvZiBUQ1AvVURQIHBvcnRzOiBwb3J0cyBhcmUgaW4KLSAgIHRoZSBzYW1lIHBsYWNlIHNvIHdlIGNhbiB0cmVhdCB0aGVtIGFzIGVxdWFsLiAqLwotCi0vKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCi0gKiAoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC91ZHAuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tdWx0aXBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiaXB0YWJsZXMgbXVsdGlwbGUgcG9ydCBtYXRjaCBtb2R1bGUiKTsKLQotI2lmIDAKLSNkZWZpbmUgZHVwcmludGYoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0ICwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIGR1cHJpbnRmKGZvcm1hdCwgYXJncy4uLikKLSNlbmRpZgotCi0vKiBSZXR1cm5zIDEgaWYgdGhlIHBvcnQgaXMgbWF0Y2hlZCBieSB0aGUgdGVzdCwgMCBvdGhlcndpc2UuICovCi1zdGF0aWMgaW5saW5lIGludAotcG9ydHNfbWF0Y2goY29uc3QgdV9pbnQxNl90ICpwb3J0bGlzdCwgZW51bSBpcHRfbXVsdGlwb3J0X2ZsYWdzIGZsYWdzLAotCSAgICB1X2ludDhfdCBjb3VudCwgdV9pbnQxNl90IHNyYywgdV9pbnQxNl90IGRzdCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlmb3IgKGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0JCWlmIChmbGFncyAhPSBJUFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCi0JCSAgICAmJiBwb3J0bGlzdFtpXSA9PSBzcmMpCi0JCQlyZXR1cm4gMTsKLQotCQlpZiAoZmxhZ3MgIT0gSVBUX01VTFRJUE9SVF9TT1VSQ0UKLQkJICAgICYmIHBvcnRsaXN0W2ldID09IGRzdCkKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBSZXR1cm5zIDEgaWYgdGhlIHBvcnQgaXMgbWF0Y2hlZCBieSB0aGUgdGVzdCwgMCBvdGhlcndpc2UuICovCi1zdGF0aWMgaW5saW5lIGludAotcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IGlwdF9tdWx0aXBvcnRfdjEgKm1pbmZvLAotCSAgICAgICB1X2ludDE2X3Qgc3JjLCB1X2ludDE2X3QgZHN0KQotewotCXVuc2lnbmVkIGludCBpOwotCXVfaW50MTZfdCBzLCBlOwotCi0JZm9yIChpPTA7IGkgPCBtaW5mby0+Y291bnQ7IGkrKykgewotCQlzID0gbWluZm8tPnBvcnRzW2ldOwotCi0JCWlmIChtaW5mby0+cGZsYWdzW2ldKSB7Ci0JCQkvKiByYW5nZSBwb3J0IG1hdGNoaW5nICovCi0JCQllID0gbWluZm8tPnBvcnRzWysraV07Ci0JCQlkdXByaW50Zigic3JjIG9yIGRzdCBtYXRjaGVzIHdpdGggJWQtJWQ/XG4iLCBzLCBlKTsKLQotCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBJUFRfTVVMVElQT1JUX1NPVVJDRQotCQkJICAgICYmIHNyYyA+PSBzICYmIHNyYyA8PSBlKQotCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKLQkJCWlmIChtaW5mby0+ZmxhZ3MgPT0gSVBUX01VTFRJUE9SVF9ERVNUSU5BVElPTgotCQkJICAgICYmIGRzdCA+PSBzICYmIGRzdCA8PSBlKQotCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKLQkJCWlmIChtaW5mby0+ZmxhZ3MgPT0gSVBUX01VTFRJUE9SVF9FSVRIRVIKLQkJCSAgICAmJiAoKGRzdCA+PSBzICYmIGRzdCA8PSBlKQotCQkJCXx8IChzcmMgPj0gcyAmJiBzcmMgPD0gZSkpKQotCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKLQkJfSBlbHNlIHsKLQkJCS8qIGV4YWN0IHBvcnQgbWF0Y2hpbmcgKi8KLQkJCWR1cHJpbnRmKCJzcmMgb3IgZHN0IG1hdGNoZXMgd2l0aCAlZD9cbiIsIHMpOwotCi0JCQlpZiAobWluZm8tPmZsYWdzID09IElQVF9NVUxUSVBPUlRfU09VUkNFCi0JCQkgICAgJiYgc3JjID09IHMpCi0JCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OwotCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBJUFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCi0JCQkgICAgJiYgZHN0ID09IHMpCi0JCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OwotCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBJUFRfTVVMVElQT1JUX0VJVEhFUgotCQkJICAgICYmIChzcmMgPT0gcyB8fCBkc3QgPT0gcykpCi0JCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OwotCQl9Ci0JfQotIAotIAlyZXR1cm4gbWluZm8tPmludmVydDsKLX0KLQotc3RhdGljIGludAotbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgaW50IG9mZnNldCwKLSAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgaW50ICpob3Rkcm9wKQotewotCXUxNiBfcG9ydHNbMl0sICpwcHRyOwotCWNvbnN0IHN0cnVjdCBpcHRfbXVsdGlwb3J0ICptdWx0aWluZm8gPSBtYXRjaGluZm87Ci0KLQlpZiAob2Zmc2V0KQotCQlyZXR1cm4gMDsKLQotCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b2ZmLAotCQkJCSAgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7Ci0JaWYgKHBwdHIgPT0gTlVMTCkgewotCQkvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQotCQkgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCi0JCSAqLwotCQlkdXByaW50ZigiaXB0X211bHRpcG9ydDoiCi0JCQkgIiBEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxuIik7Ci0JCSpob3Rkcm9wID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIHBvcnRzX21hdGNoKG11bHRpaW5mby0+cG9ydHMsCi0JCQkgICBtdWx0aWluZm8tPmZsYWdzLCBtdWx0aWluZm8tPmNvdW50LAotCQkJICAgbnRvaHMocHB0clswXSksIG50b2hzKHBwdHJbMV0pKTsKLX0KLQotc3RhdGljIGludAotbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotCSBjb25zdCB2b2lkICptYXRjaGluZm8sCi0JIGludCBvZmZzZXQsCi0JIHVuc2lnbmVkIGludCBwcm90b2ZmLAotCSBpbnQgKmhvdGRyb3ApCi17Ci0JdTE2IF9wb3J0c1syXSwgKnBwdHI7Ci0JY29uc3Qgc3RydWN0IGlwdF9tdWx0aXBvcnRfdjEgKm11bHRpaW5mbyA9IG1hdGNoaW5mbzsKLQotCWlmIChvZmZzZXQpCi0JCXJldHVybiAwOwotCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvZmYsCi0JCQkJICBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKLQlpZiAocHB0ciA9PSBOVUxMKSB7Ci0JCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCi0JCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KLQkJICovCi0JCWR1cHJpbnRmKCJpcHRfbXVsdGlwb3J0OiIKLQkJCSAiIERyb3BwaW5nIGV2aWwgb2Zmc2V0PTAgdGlueWdyYW0uXG4iKTsKLQkJKmhvdGRyb3AgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gcG9ydHNfbWF0Y2hfdjEobXVsdGlpbmZvLCBudG9ocyhwcHRyWzBdKSwgbnRvaHMocHB0clsxXSkpOwotfQotCi1zdGF0aWMgc3RydWN0IGlwdF9tYXRjaCBtdWx0aXBvcnRfbWF0Y2ggPSB7Ci0JLm5hbWUJCT0gIm11bHRpcG9ydCIsCi0JLnJldmlzaW9uCT0gMCwKLQkubWF0Y2gJCT0gbWF0Y2gsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X211bHRpcG9ydCksCi0JLm1lCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggbXVsdGlwb3J0X21hdGNoX3YxID0gewotCS5uYW1lCQk9ICJtdWx0aXBvcnQiLAotCS5yZXZpc2lvbgk9IDEsCi0JLm1hdGNoCQk9IG1hdGNoX3YxLAotCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9tdWx0aXBvcnRfdjEpLAotCS5tZQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlwdF9tdWx0aXBvcnRfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBpcHRfcmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaCk7Ci0JaWYgKCFlcnIpIHsKLQkJZXJyID0gaXB0X3JlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2hfdjEpOwotCQlpZiAoZXJyKQotCQkJaXB0X3VucmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlwdF9tdWx0aXBvcnRfZmluaSh2b2lkKQotewotCWlwdF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2gpOwotCWlwdF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2hfdjEpOwotfQotCi1tb2R1bGVfaW5pdChpcHRfbXVsdGlwb3J0X2luaXQpOwotbW9kdWxlX2V4aXQoaXB0X211bHRpcG9ydF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCmluZGV4IDE0Mzg0MzIuLmI4NDdlZTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYwpAQCAtODIxLDYgKzgyMSw3IEBACiAJLyogQ3JlYXRlIG91ciBwcm9jICdzdGF0dXMnIGVudHJ5LiAqLwogCWN1cnJfdGFibGUtPnN0YXR1c19wcm9jID0gY3JlYXRlX3Byb2NfZW50cnkoY3Vycl90YWJsZS0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcHJvY19uZXRfaXB0X3JlY2VudCk7CiAJaWYgKCFjdXJyX3RhYmxlLT5zdGF0dXNfcHJvYykgeworCQl2ZnJlZShob2xkKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiB1bmFibGUgdG8gYWxsb2NhdGUgZm9yIC9wcm9jIGVudHJ5LlxuIik7CiAJCS8qIERlc3Ryb3kgdGhlIGNyZWF0ZWQgdGFibGUgKi8KIAkJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7CkBAIC04NDUsNyArODQ2LDYgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKIAkJdmZyZWUoY3Vycl90YWJsZS0+dGltZV9pbmZvKTsKIAkJdmZyZWUoY3Vycl90YWJsZS0+aGFzaF90YWJsZSk7Ci0JCXZmcmVlKGhvbGQpOwogCQl2ZnJlZShjdXJyX3RhYmxlLT50YWJsZSk7CiAJCXZmcmVlKGN1cnJfdGFibGUpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKaW5kZXggM2Q4MGFlZi4uN2Y0MTc0OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKQEAgLTE1NywzNyArMTU3LDIwIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMF0pOworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFibGU7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzFdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2swOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1syXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMTsKLQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwX2hvb2sxOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1sxXSk7Ci0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMF0pOwogIGNsZWFudXBfdGFibGU6CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9maWx0ZXIpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXB0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzW2ldKTsKLQorCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9maWx0ZXIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCmluZGV4IDQxMmZjOTYuLjM5N2I5NWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCkBAIC0yMTEsNDkgKzIxMSwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMl0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazE7Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzNdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2syOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1s0XSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMzsKLQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwX2hvb2szOgotICAgICAgICBuZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbM10pOwotIGNsZWFudXBfaG9vazI6Ci0gICAgICAgIG5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1syXSk7Ci0gY2xlYW51cF9ob29rMToKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMV0pOwotIGNsZWFudXBfaG9vazA6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfbWFuZ2xlcik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXB0YWJsZV9tYW5nbGVfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcHRfb3BzKS9zaXplb2Yoc3RydWN0IG5mX2hvb2tfb3BzKTsgaSsrKQotCQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpcHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X21hbmdsZXIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IDAzY2M3OWEuLjc5MTJjY2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC0xMDEsMTggKzEwMSwxOCBAQAogLyogJ3JhdycgaXMgdGhlIHZlcnkgZmlyc3QgdGFibGUuICovCiBzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdF9vcHNbXSA9IHsKIAl7Ci0JICAuaG9vayA9IGlwdF9ob29rLCAKLQkgIC5wZiA9IFBGX0lORVQsIAotCSAgLmhvb2tudW0gPSBORl9JUF9QUkVfUk9VVElORywgCi0JICAucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5ob29rID0gaXB0X2hvb2ssCisJCS5wZiA9IFBGX0lORVQsCisJCS5ob29rbnVtID0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewotCSAgLmhvb2sgPSBpcHRfaG9vaywgCi0JICAucGYgPSBQRl9JTkVULCAKLQkgIC5ob29rbnVtID0gTkZfSVBfTE9DQUxfT1VULCAKLQkgIC5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLmhvb2sgPSBpcHRfaG9vaywKKwkJLnBmID0gUEZfSU5FVCwKKwkJLmhvb2tudW0gPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0xMjYsMzEgKzEyNiwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwX2hvb2swOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1swXSk7CiAgY2xlYW51cF90YWJsZToKIAlpcHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXB0YWJsZV9yYXdfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcHRfb3BzKS9zaXplb2Yoc3RydWN0IG5mX2hvb2tfb3BzKTsgaSsrKQotCQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpcHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IDRhZmJjNjkuLjc3ZDk3NDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMjEwLDcxICsyMTAsNjMgQEAKIAogLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCiAgICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19kZWZyYWdfb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2luLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rICAgICAgICAgICA9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKLQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkucGYgICAgICAgICAgICAgPSBQRl9JTkVULAotCS5ob29rbnVtICAgICAgICA9IE5GX0lQX0xPQ0FMX09VVCwKLQkucHJpb3JpdHkgICAgICAgPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19sb2NhbCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKLX07Ci0KLS8qIGhlbHBlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfaGVscGVyX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKLX07Ci0KLQotLyogUmVmcmFnbWVudGVyOyBsYXN0IGNoYW5jZS4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2NvbmZpcm0sCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX29wc1tdID0geworCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfZGVmcmFnLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rICAgICAgICAgICA9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJCS5wZiAgICAgICAgICAgICA9IFBGX0lORVQsCisJCS5ob29rbnVtICAgICAgICA9IE5GX0lQX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5ICAgICAgID0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19oZWxwLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY0X2NvbmZpcm0sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSwKKwl9LAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTM1Niw2ICszNDgsNyBAQAogCQkJLnR1cGxlLmRzdC51LnRjcC5wb3J0OwogCQlzaW4uc2luX2FkZHIuc19hZGRyID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdCiAJCQkudHVwbGUuZHN0LnUzLmlwOworCQltZW1zZXQoc2luLnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLnNpbl96ZXJvKSk7CiAKIAkJREVCVUdQKCJTT19PUklHSU5BTF9EU1Q6ICV1LiV1LiV1LiV1ICV1XG4iLAogCQkgICAgICAgTklQUVVBRChzaW4uc2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLnNpbl9wb3J0KSk7CkBAIC00NDAsMTYgKzQzMywyMCBAQAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQ7CiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNDsKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wOwotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCisKK01PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOworCW5lZWRfY29ubnRyYWNrKCk7CiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBuZXRmaWx0ZXIgc29ja2V0IG9wdGlvblxuIik7Ci0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQpOwpAQCAtNDc2LDg0ICs0NzMsMjYgQEAKIAkJZ290byBjbGVhbnVwX2ljbXA7CiAJfQogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfZGVmcmFnX29wcyk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB2NF9jb25udHJhY2tfb3BzLAorCQkJCUFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgZGVmcmFnIGhvb2suXG4iKTsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKIAkJZ290byBjbGVhbnVwX2lwdjQ7CiAJfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbF9vdXQgZGVmcmFnIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ29wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2xvY2FsX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBoZWxwZXIgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5hbmRsb2NhbG9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgcG9zdHJvdXRpbmcgaGVscGVyIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2hlbHBlcmlub3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHBvc3Qtcm91dGluZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9oZWxwZXJvdXRvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOwotCX0KLQogI2lmZGVmIENPTkZJR19TWVNDVEwKIAluZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKIAlpZiAobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfbG9jYWxpbm9wczsKKwkJZ290byBjbGVhbnVwX2hvb2tzOwogCX0KICNlbmRpZgogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCXN5bmNocm9uaXplX25ldCgpOwogI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6CisgY2xlYW51cF9ob29rczoKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjRfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTsKICNlbmRpZgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLSBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcm91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcmlub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7Ci0gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9pbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2luX29wcyk7Ci0gY2xlYW51cF9kZWZyYWdsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2RlZnJhZ29wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19vcHMpOwogIGNsZWFudXBfaXB2NDoKIAluZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDNwcm90b19pcHY0KTsKICBjbGVhbnVwX2ljbXA6CkBAIC01NjQsMjIgKzUwMywyMSBAQAogCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CiAgY2xlYW51cF9zb2Nrb3B0OgogCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmc29fZ2V0b3JpZ2RzdCk7Ci0gY2xlYW51cF9ub3RoaW5nOgogCXJldHVybiByZXQ7CiB9CiAKLU1PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2luaXQodm9pZCkKLXsKLQluZWVkX2Nvbm50cmFjaygpOwotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJc3luY2hyb25pemVfbmV0KCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIpOworI2VuZGlmCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY0X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CisJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NCk7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wKTsKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQpOworCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CisJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIH0KIAogbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggNTJkYzE3NS4uNGIwZDM2MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTIzNSwzMCArMjM1LDE0IEBACiAJfQogCiAJLyogU2VlIGlwX2Nvbm50cmFja19wcm90b190Y3AuYyAqLwotCWlmIChob29rbnVtICE9IE5GX0lQX1BSRV9ST1VUSU5HKQotCQlnb3RvIGNoZWNrc3VtX3NraXBwZWQ7Ci0KLQlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7Ci0JY2FzZSBDSEVDS1NVTV9IVzoKLQkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKQotCQkJYnJlYWs7CisJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCAwKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgICAgICJuZl9jdF9pY21wOiBiYWQgSFcgSUNNUCBjaGVja3N1bSAiKTsKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7Ci0JY2FzZSBDSEVDS1NVTV9OT05FOgotCQlpZiAoKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkgewotCQkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCi0JCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsCi0JCQkJCSAgICAgIE5VTEwsCi0JCQkJCSAgICAgICJuZl9jdF9pY21wOiBiYWQgSUNNUCBjaGVja3N1bSAiKTsKLQkJCXJldHVybiAtTkZfQUNDRVBUOwotCQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQogCi1jaGVja3N1bV9za2lwcGVkOgogCS8qCiAJICoJMTggaXMgdGhlIGhpZ2hlc3QgJ2tub3duJyBJQ01QIHR5cGUuIEFueXRoaW5nIGVsc2UgaXMgYSBteXN0ZXJ5CiAJICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCAxYjE2N2M0Yi4uZDYxZTJhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvYy5jCisrKyBiL25ldC9pcHY0L3Byb2MuYwpAQCAtNDksNyArNDksNyBAQAogCWludCByZXMgPSAwOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXJlcyArPSBwcm90by0+c3RhdHNbY3B1XS5pbnVzZTsKIAogCXJldHVybiByZXM7CkBAIC05MSw3ICs5MSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXMgPSAwOwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlyZXMgKz0gKigoKHVuc2lnbmVkIGxvbmcgKikgcGVyX2NwdV9wdHIobWliWzBdLCBpKSkgKyBvZmZ0KTsKIAkJcmVzICs9ICooKCh1bnNpZ25lZCBsb25nICopIHBlcl9jcHVfcHRyKG1pYlsxXSwgaSkpICsgb2ZmdCk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTRmY2JjNS4uY2M5NDIzZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yNzQxLDcgKzI3NDEsMTAgQEAKIAkvKiBSZXNlcnZlIHJvb20gZm9yIGR1bW15IGhlYWRlcnMsIHRoaXMgc2tiIGNhbiBwYXNzCiAJICAgdGhyb3VnaCBnb29kIGNodW5rIG9mIHJvdXRpbmcgZW5naW5lLgogCSAqLwotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKwlza2ItPm1hYy5yYXcgPSBza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKKworCS8qIEJ1Z2ZpeDogbmVlZCB0byBnaXZlIGlwX3JvdXRlX2lucHV0IGVub3VnaCBvZiBhbiBJUCBoZWFkZXIgdG8gbm90IGdhZy4gKi8KKwlza2ItPm5oLmlwaC0+cHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7CiAJc2tiX3Jlc2VydmUoc2tiLCBNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCiAJaWYgKHJ0YVtSVEFfU1JDIC0gMV0pCkBAIC0zMDgzLDcgKzMwODYsNyBAQAogCQltZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCk7CiAKIAkJLyogQWRkIHRoZSBvdGhlciBjcHVzIGluLCBvbmUgaW50IGF0IGEgdGltZSAqLwotCQlmb3JfZWFjaF9jcHUoaSkgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQkJdW5zaWduZWQgaW50IGo7CiAKIAkJCXNyYyA9ICgodTMyICopIElQX1JUX0FDQ1RfQ1BVKGkpKSArIG9mZnNldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggODdmNjhlNy4uZTJiN2I4MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTE0NjgsNiArMTQ2OCw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZGF0YV93YXNfdW5yZWFkID0gMDsKKwlpbnQgc3RhdGU7CiAKIAlsb2NrX3NvY2soc2spOwogCXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7CkBAIC0xNTQ0LDYgKzE1NDUsMTEgQEAKIAlza19zdHJlYW1fd2FpdF9jbG9zZShzaywgdGltZW91dCk7CiAKIGFkanVkZ2VfdG9fZGVhdGg6CisJc3RhdGUgPSBzay0+c2tfc3RhdGU7CisJc29ja19ob2xkKHNrKTsKKwlzb2NrX29ycGhhbihzayk7CisJYXRvbWljX2luYyhzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KTsKKwogCS8qIEl0IGlzIHRoZSBsYXN0IHJlbGVhc2Vfc29jayBpbiBpdHMgbGlmZS4gSXQgd2lsbCByZW1vdmUgYmFja2xvZy4gKi8KIAlyZWxlYXNlX3NvY2soc2spOwogCkBAIC0xNTU1LDggKzE1NjEsOSBAQAogCWJoX2xvY2tfc29jayhzayk7CiAJQlVHX1RSQVAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpOwogCi0Jc29ja19ob2xkKHNrKTsKLQlzb2NrX29ycGhhbihzayk7CisJLyogSGF2ZSB3ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIGJ5IGEgc29mdGlycSBvciBiYWNrbG9nPyAqLworCWlmIChzdGF0ZSAhPSBUQ1BfQ0xPU0UgJiYgc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkKKwkJZ290byBvdXQ7CiAKIAkvKglUaGlzIGlzIGEgKHVzZWZ1bCkgQlNEIHZpb2xhdGluZyBvZiB0aGUgUkZDLiBUaGVyZSBpcyBhCiAJICoJcHJvYmxlbSB3aXRoIFRDUCBhcyBzcGVjaWZpZWQgaW4gdGhhdCB0aGUgb3RoZXIgZW5kIGNvdWxkCkBAIC0xNTg0LDcgKzE1OTEsNiBAQAogCQkJaWYgKHRtbyA+IFRDUF9USU1FV0FJVF9MRU4pIHsKIAkJCQlpbmV0X2Nza19yZXNldF9rZWVwYWxpdmVfdGltZXIoc2ssIHRjcF9maW5fdGltZShzaykpOwogCQkJfSBlbHNlIHsKLQkJCQlhdG9taWNfaW5jKHNrLT5za19wcm90LT5vcnBoYW5fY291bnQpOwogCQkJCXRjcF90aW1lX3dhaXQoc2ssIFRDUF9GSU5fV0FJVDIsIHRtbyk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0xNjAzLDcgKzE2MDksNiBAQAogCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7CiAJCX0KIAl9Ci0JYXRvbWljX2luYyhzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KTsKIAogCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKQogCQlpbmV0X2Nza19kZXN0cm95X3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCmluZGV4IGUwZTlkMTMuLmJhN2M2M2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYworKysgYi9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKQEAgLTEzNSwxMCArMTM1LDExIEBACiAKIAkJLyogRG8gYWRkaXRpdmUgaW5jcmVhc2UgKi8KIAkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkgewotCQkJdHAtPnNuZF9jd25kX2NudCArPSBjYS0+YWk7CisJCQkvKiBjd25kID0gY3duZCArIGEodykgLyBjd25kICovCisJCQl0cC0+c25kX2N3bmRfY250ICs9IGNhLT5haSArIDE7CiAJCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKLQkJCQl0cC0+c25kX2N3bmQrKzsKIAkJCQl0cC0+c25kX2N3bmRfY250IC09IHRwLT5zbmRfY3duZDsKKwkJCQl0cC0+c25kX2N3bmQrKzsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMTk1ZDgzNS4uYjU1MjFhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJICogSGVuY2UsIHdlIGNhbiBkZXRlY3QgdGltZWQgb3V0IHBhY2tldHMgZHVyaW5nIGZhc3QKIAkgKiByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgogCSAqLwotCWlmICh0Y3BfaGVhZF90aW1lZG91dChzaywgdHApKSB7CisJaWYgKCFJc1Jlbm8odHApICYmIHRjcF9oZWFkX3RpbWVkb3V0KHNrLCB0cCkpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCQlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludCA/IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50CkBAIC00NTU5LDcgKzQ1NTksNiBAQAogCiBFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfZWNuKTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9yZW9yZGVyaW5nKTsKLUVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9hYmMpOwogRVhQT1JUX1NZTUJPTCh0Y3BfcGFyc2Vfb3B0aW9ucyk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3ZfZXN0YWJsaXNoZWQpOwogRVhQT1JUX1NZTUJPTCh0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggOWU4NWMwNC4uNjcyOTUwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xODU5LDUgKzE4NTksNCBAQAogI2VuZGlmCiBFWFBPUlRfU1lNQk9MKHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlKTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9sb3dfbGF0ZW5jeSk7Ci1FWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfdHdfcmV1c2UpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggOWQ3OTU0Ni4uZjMzYzlkZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNTksOSArNTksNiBAQAogaW50IHN5c2N0bF90Y3BfbXR1X3Byb2JpbmcgPSAwOwogaW50IHN5c2N0bF90Y3BfYmFzZV9tc3MgPSA1MTI7CiAKLUVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9tdHVfcHJvYmluZyk7Ci1FWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfYmFzZV9tc3MpOwotCiBzdGF0aWMgdm9pZCB1cGRhdGVfc2VuZF9oZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCwKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTQ2OCw3ICs0NjUsNyBAQAogCVRDUF9JTkNfU1RBVFMoVENQX01JQl9PVVRTRUdTKTsKIAogCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgMCk7Ci0JaWYgKHVubGlrZWx5KGVyciA8PSAwKSkKKwlpZiAobGlrZWx5KGVyciA8PSAwKSkKIAkJcmV0dXJuIGVycjsKIAogCXRjcF9lbnRlcl9jd3Ioc2spOwpAQCAtNTM2LDYgKzUzMyw3IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZmY7CiAJaW50IG5zaXplLCBvbGRfZmFjdG9yOworCWludCBubGVuOwogCXUxNiBmbGFnczsKIAogCUJVR19PTihsZW4gPiBza2ItPmxlbik7CkBAIC01NTQsNyArNTUyLDExIEBACiAJYnVmZiA9IHNrX3N0cmVhbV9hbGxvY19za2Ioc2ssIG5zaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoYnVmZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsgLyogV2UnbGwganVzdCB0cnkgYWdhaW4gbGF0ZXIuICovCisKIAlza19jaGFyZ2Vfc2tiKHNrLCBidWZmKTsKKwlubGVuID0gc2tiLT5sZW4gLSBsZW4gLSBuc2l6ZTsKKwlidWZmLT50cnVlc2l6ZSArPSBubGVuOworCXNrYi0+dHJ1ZXNpemUgLT0gbmxlbjsKIAogCS8qIENvcnJlY3QgdGhlIHNlcXVlbmNlIG51bWJlcnMuICovCiAJVENQX1NLQl9DQihidWZmKS0+c2VxID0gVENQX1NLQl9DQihza2IpLT5zZXEgKyBsZW47CkBAIC02NDAsNyArNjQyLDcgQEAKICAqIGV2ZW50dWFsbHkpLiBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHB1bGxlZCBkYXRhIG5vdCBjb3BpZWQsIGJ1dAogICogaW1tZWRpYXRlbHkgZGlzY2FyZGVkLgogICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciAqX19wc2tiX3RyaW1faGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgX19wc2tiX3RyaW1faGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQogewogCWludCBpLCBrLCBlYXQ7CiAKQEAgLTY2NSw3ICs2NjcsNiBAQAogCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YTsKIAlza2ItPmRhdGFfbGVuIC09IGxlbjsKIAlza2ItPmxlbiA9IHNrYi0+ZGF0YV9sZW47Ci0JcmV0dXJuIHNrYi0+dGFpbDsKIH0KIAogaW50IHRjcF90cmltX2hlYWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGVuKQpAQCAtNjc0LDEyICs2NzUsMTEgQEAKIAkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChsZW4gPD0gc2tiX2hlYWRsZW4oc2tiKSkgeworCS8qIElmIGxlbiA9PSBoZWFkbGVuLCB3ZSBhdm9pZCBfX3NrYl9wdWxsIHRvIHByZXNlcnZlIGFsaWdubWVudC4gKi8KKwlpZiAodW5saWtlbHkobGVuIDwgc2tiX2hlYWRsZW4oc2tiKSkpCiAJCV9fc2tiX3B1bGwoc2tiLCBsZW4pOwotCX0gZWxzZSB7Ci0JCWlmIChfX3Bza2JfdHJpbV9oZWFkKHNrYiwgbGVuLXNrYl9oZWFkbGVuKHNrYikpID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJZWxzZQorCQlfX3Bza2JfdHJpbV9oZWFkKHNrYiwgbGVuIC0gc2tiX2hlYWRsZW4oc2tiKSk7CiAKIAlUQ1BfU0tCX0NCKHNrYiktPnNlcSArPSBsZW47CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9IVzsKQEAgLTEwNDAsNyArMTA0MCw4IEBACiAJaWYgKHVubGlrZWx5KGJ1ZmYgPT0gTlVMTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYnVmZi0+dHJ1ZXNpemUgPSBubGVuOworCXNrX2NoYXJnZV9za2Ioc2ssIGJ1ZmYpOworCWJ1ZmYtPnRydWVzaXplICs9IG5sZW47CiAJc2tiLT50cnVlc2l6ZSAtPSBubGVuOwogCiAJLyogQ29ycmVjdCB0aGUgc2VxdWVuY2UgbnVtYmVycy4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3R1bm5lbDQuYyBiL25ldC9pcHY0L3R1bm5lbDQuYwppbmRleCAwZDdkMzg2Li44ZDMwYzQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90dW5uZWw0LmMKKysrIGIvbmV0L2lwdjQvdHVubmVsNC5jCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bmV0L2ljbXAuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCkBAIC03MCwxMCArNzIsMTYgQEAKIHsKIAlzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXI7CiAKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCisJCWdvdG8gZHJvcDsKKwogCWZvciAoaGFuZGxlciA9IHR1bm5lbDRfaGFuZGxlcnM7IGhhbmRsZXI7IGhhbmRsZXIgPSBoYW5kbGVyLT5uZXh0KQogCQlpZiAoIWhhbmRsZXItPmhhbmRsZXIoc2tiKSkKIAkJCXJldHVybiAwOwogCisJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTsKKworZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCmluZGV4IDg1MGQ5MTkuLjNlMTc0YzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtMzcsOCArMzcsNiBAQAogewogCXN3aXRjaCAobmV4dGhkcikgewogCWNhc2UgSVBQUk9UT19JUElQOgotCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKIAkJKnNwaSA9IHNrYi0+bmguaXBoLT5zYWRkcjsKIAkJKnNlcSA9IDA7CiAJCXJldHVybiAwOwpAQCAtNjgsNyArNjYsNyBAQAogewogCWludCBlcnI7CiAJdTMyIHNwaSwgc2VxOwotCXN0cnVjdCBzZWNfZGVjYXBfc3RhdGUgeGZybV92ZWNbWEZSTV9NQVhfREVQVEhdOworCXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3ZlY1tYRlJNX01BWF9ERVBUSF07CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAJaW50IHhmcm1fbnIgPSAwOwogCWludCBkZWNhcHMgPSAwOwpAQCAtOTAsMTQgKzg4LDE2IEBACiAJCWlmICh1bmxpa2VseSh4LT5rbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKKwkJaWYgKCh4LT5lbmNhcCA/IHgtPmVuY2FwLT5lbmNhcF90eXBlIDogMCkgIT0gZW5jYXBfdHlwZSkKKwkJCWdvdG8gZHJvcF91bmxvY2s7CisKIAkJaWYgKHgtPnByb3BzLnJlcGxheV93aW5kb3cgJiYgeGZybV9yZXBsYXlfY2hlY2soeCwgc2VxKSkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKIAkJaWYgKHhmcm1fc3RhdGVfY2hlY2tfZXhwaXJlKHgpKQogCQkJZ290byBkcm9wX3VubG9jazsKIAotCQl4ZnJtX3ZlY1t4ZnJtX25yXS5kZWNhcC5kZWNhcF90eXBlID0gZW5jYXBfdHlwZTsKLQkJaWYgKHgtPnR5cGUtPmlucHV0KHgsICYoeGZybV92ZWNbeGZybV9ucl0uZGVjYXApLCBza2IpKQorCQlpZiAoeC0+dHlwZS0+aW5wdXQoeCwgc2tiKSkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKIAkJLyogb25seSB0aGUgZmlyc3QgeGZybSBnZXRzIHRoZSBlbmNhcCB0eXBlICovCkBAIC0xMTEsNyArMTExLDcgQEAKIAogCQlzcGluX3VubG9jaygmeC0+bG9jayk7CiAKLQkJeGZybV92ZWNbeGZybV9ucisrXS54dmVjID0geDsKKwkJeGZybV92ZWNbeGZybV9ucisrXSA9IHg7CiAKIAkJaXBoID0gc2tiLT5uaC5pcGg7CiAKQEAgLTE1Myw3ICsxNTMsOCBAQAogCWlmICh4ZnJtX25yICsgc2tiLT5zcC0+bGVuID4gWEZSTV9NQVhfREVQVEgpCiAJCWdvdG8gZHJvcDsKIAotCW1lbWNweShza2ItPnNwLT54K3NrYi0+c3AtPmxlbiwgeGZybV92ZWMsIHhmcm1fbnIqc2l6ZW9mKHN0cnVjdCBzZWNfZGVjYXBfc3RhdGUpKTsKKwltZW1jcHkoc2tiLT5zcC0+eHZlYyArIHNrYi0+c3AtPmxlbiwgeGZybV92ZWMsCisJICAgICAgIHhmcm1fbnIgKiBzaXplb2YoeGZybV92ZWNbMF0pKTsKIAlza2ItPnNwLT5sZW4gKz0geGZybV9ucjsKIAogCW5mX3Jlc2V0KHNrYik7CkBAIC0xODQsNyArMTg1LDcgQEAKIAl4ZnJtX3N0YXRlX3B1dCh4KTsKIGRyb3A6CiAJd2hpbGUgKC0teGZybV9uciA+PSAwKQotCQl4ZnJtX3N0YXRlX3B1dCh4ZnJtX3ZlY1t4ZnJtX25yXS54dmVjKTsKKwkJeGZybV9zdGF0ZV9wdXQoeGZybV92ZWNbeGZybV9ucl0pOwogCiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYyBiL25ldC9pcHY0L3hmcm00X291dHB1dC5jCmluZGV4IDMyYWQyMjkuLjRlZjhlZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X291dHB1dC5jCisrKyBiL25ldC9pcHY0L3hmcm00X291dHB1dC5jCkBAIC02Miw3ICs2Miw3IEBACiAJdG9wX2lwaC0+ZnJhZ19vZmYgPSAoZmxhZ3MgJiBYRlJNX1NUQVRFX05PUE1UVURJU0MpID8KIAkJMCA6IChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKTsKIAlpZiAoIXRvcF9pcGgtPmZyYWdfb2ZmKQotCQlfX2lwX3NlbGVjdF9pZGVudCh0b3BfaXBoLCBkc3QsIDApOworCQlfX2lwX3NlbGVjdF9pZGVudCh0b3BfaXBoLCBkc3QtPmNoaWxkLCAwKTsKIAogCXRvcF9pcGgtPnR0bCA9IGRzdF9tZXRyaWMoZHN0LT5jaGlsZCwgUlRBWF9IT1BMSU1JVCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggZjI4NWJiZi4uODYwNGM3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQkJaWYgKHBza2JfbWF5X3B1bGwoc2tiLCB4cHJ0aCArIDQgLSBza2ItPmRhdGEpKSB7CiAJCQkJdTE2ICppcGNvbXBfaGRyID0gKHUxNiAqKXhwcnRoOwogCi0JCQkJZmwtPmZsX2lwc2VjX3NwaSA9IG50b2hsKG50b2hzKGlwY29tcF9oZHJbMV0pKTsKKwkJCQlmbC0+ZmxfaXBzZWNfc3BpID0gaHRvbmwobnRvaHMoaXBjb21wX2hkclsxXSkpOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF90dW5uZWwuYyBiL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCmluZGV4IDJkNjcwOTMuLmY4Y2VhYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCisrKyBiL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCkBAIC0yMSw3ICsyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXBpcF94ZnJtX3JjdihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKmRlY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBpcGlwX3hmcm1fcmN2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuYwppbmRleCBjZjU4MjUxLi42Nzc4MTczIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9haDYuYworKysgYi9uZXQvaXB2Ni9haDYuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBhaDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgYWg2X2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qCiAJICogQmVmb3JlIHByb2Nlc3MgQUgKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCAzZGNhYWM3Li4yMmYwNDYwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGVzcDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgZXNwNl9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoOwogCXN0cnVjdCBpcHY2X2VzcF9oZHIgKmVzcGg7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggMmExZTdlNC4uYTE4ZDQyNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCisrKyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtNDg1LDE1ICs0ODUsMjcgQEAKIAl7IC0xLCB9CiB9OwogCi1pbnQgaXB2Nl9wYXJzZV9ob3BvcHRzKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZikKK2ludCBpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7CiAKKwkvKgorCSAqIHNrYi0+bmgucmF3IGlzIGVxdWFsIHRvIHNrYi0+ZGF0YSwgYW5kCisJICogc2tiLT5oLnJhdyAtIHNrYi0+bmgucmF3IGlzIGFsd2F5cyBlcXVhbCB0bworCSAqIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgYnkgZGVmaW5pdGlvbiBvZgorCSAqIGhvcC1ieS1ob3Agb3B0aW9ucy4KKwkgKi8KKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgOCkgfHwKKwkgICAgIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgKChza2ItPmgucmF3WzFdICsgMSkgPDwgMykpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLTE7CisJfQorCiAJb3B0LT5ob3AgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwogCWlmIChpcDZfcGFyc2VfdGx2KHRsdnByb2Nob3BvcHRfbHN0LCBza2IpKSB7CiAJCXNrYi0+aC5yYXcgKz0gKHNrYi0+aC5yYXdbMV0rMSk8PDM7CiAJCW9wdC0+bmhvZmYgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKwkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCAyMWViNzI1Li4xMDQ0YjZmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKKysrIGIvbmV0L2lwdjYvaWNtcC5jCkBAIC03MTcsNyArNzE3LDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGVyciwgaSwgajsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fSUNNUFY2LAogCQkJCSAgICAgICAmcGVyX2NwdShfX2ljbXB2Nl9zb2NrZXQsIGkpKTsKIAkJaWYgKGVyciA8IDApIHsKQEAgLTc2Myw3ICs3NjMsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzb2NrX3JlbGVhc2UocGVyX2NwdShfX2ljbXB2Nl9zb2NrZXQsIGkpKTsKIAl9CiAJaW5ldDZfZGVsX3Byb3RvY29sKCZpY21wdjZfcHJvdG9jb2wsIElQUFJPVE9fSUNNUFY2KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggZjhmM2EzNy4uZWIyODY1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTE3Myw2ICsxNzMsNyBAQAogCiAJCWlmIChlcnIpIHsKIAkJCXNrLT5za19lcnJfc29mdCA9IC1lcnI7CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtMTgxLDYgKzE4Miw3IEBACiAKIAkJaWYgKChlcnIgPSB4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKSkgPCAwKSB7CiAJCQlzay0+c2tfcm91dGVfY2FwcyA9IDA7CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCmluZGV4IGJiOGZmYjguLjJhZTg0YzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKQEAgLTIzLDYgKzIzLDg2IEBACiAjaW5jbHVkZSA8bmV0L2luZXQ2X2hhc2h0YWJsZXMuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIAordm9pZCBfX2luZXQ2X2hhc2goc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorCQkJCXN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdDsKKwlyd2xvY2tfdCAqbG9jazsKKworCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7CisKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKKwkJbGlzdCA9ICZoYXNoaW5mby0+bGlzdGVuaW5nX2hhc2hbaW5ldF9za19saXN0ZW5faGFzaGZuKHNrKV07CisJCWxvY2sgPSAmaGFzaGluZm8tPmxoYXNoX2xvY2s7CisJCWluZXRfbGlzdGVuX3dsb2NrKGhhc2hpbmZvKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgaGFzaDsKKwkJc2stPnNrX2hhc2ggPSBoYXNoID0gaW5ldDZfc2tfZWhhc2hmbihzayk7CisJCWhhc2ggJj0gKGhhc2hpbmZvLT5laGFzaF9zaXplIC0gMSk7CisJCWxpc3QgPSAmaGFzaGluZm8tPmVoYXNoW2hhc2hdLmNoYWluOworCQlsb2NrID0gJmhhc2hpbmZvLT5laGFzaFtoYXNoXS5sb2NrOworCQl3cml0ZV9sb2NrKGxvY2spOworCX0KKworCV9fc2tfYWRkX25vZGUoc2ssIGxpc3QpOworCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKKwl3cml0ZV91bmxvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9faW5ldDZfaGFzaCk7CisKKy8qCisgKiBTb2NrZXRzIGluIFRDUF9DTE9TRSBzdGF0ZSBhcmUgX2Fsd2F5c18gdGFrZW4gb3V0IG9mIHRoZSBoYXNoLCBzbworICogd2UgbmVlZCBub3QgY2hlY2sgaXQgZm9yIFRDUCBsb29rdXBzIGFueW1vcmUsIHRoYW5rcyBBbGV4ZXkuIC1EYXZlTQorICoKKyAqIFRoZSBzb2NraGFzaCBsb2NrIG11c3QgYmUgaGVsZCBhcyBhIHJlYWRlciBoZXJlLgorICovCitzdHJ1Y3Qgc29jayAqX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgICBjb25zdCB1MTYgc3BvcnQsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgIGNvbnN0IHUxNiBobnVtLAorCQkJCQkgICBjb25zdCBpbnQgZGlmKQoreworCXN0cnVjdCBzb2NrICpzazsKKwljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoc3BvcnQsIGhudW0pOworCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgorCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCisJICovCisJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBobnVtLCBzYWRkciwgc3BvcnQpOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhhc2hpbmZvLCBoYXNoKTsKKworCXByZWZldGNoKGhlYWQtPmNoYWluLmZpcnN0KTsKKwlyZWFkX2xvY2soJmhlYWQtPmxvY2spOworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKKwkJLyogRm9yIElQVjYgZG8gdGhlIGNoZWFwZXIgcG9ydCBhbmQgZmFtaWx5IHRlc3RzIGZpcnN0LiAqLworCQlpZiAoSU5FVDZfTUFUQ0goc2ssIGhhc2gsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCisJCQlnb3RvIGhpdDsgLyogWW91IHN1bmsgbXkgYmF0dGxlc2hpcCEgKi8KKwl9CisJLyogTXVzdCBjaGVjayBmb3IgYSBUSU1FX1dBSVQnZXIgYmVmb3JlIGdvaW5nIHRvIGxpc3RlbmVyIGhhc2guICovCisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICYoaGVhZCArIGhhc2hpbmZvLT5laGFzaF9zaXplKS0+Y2hhaW4pIHsKKwkJY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOworCisJCWlmKCooKF9fdTMyICopJih0dy0+dHdfZHBvcnQpKQk9PSBwb3J0cwkmJgorCQkgICBzay0+c2tfZmFtaWx5CQk9PSBQRl9JTkVUNikgeworCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOworCisJCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZ0dzYtPnR3X3Y2X2RhZGRyLCBzYWRkcikJJiYKKwkJCSAgICBpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfcmN2X3NhZGRyLCBkYWRkcikJJiYKKwkJCSAgICAoIXNrLT5za19ib3VuZF9kZXZfaWYgfHwgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBkaWYpKQorCQkJCWdvdG8gaGl0OworCQl9CisJfQorCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwlyZXR1cm4gTlVMTDsKKworaGl0OgorCXNvY2tfaG9sZChzayk7CisJcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOworCXJldHVybiBzazsKK30KK0VYUE9SVF9TWU1CT0woX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQpOworCiBzdHJ1Y3Qgc29jayAqaW5ldDZfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCSAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGhudW0sIGNvbnN0IGludCBkaWYpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IDI5ZjczNTkuLmFjZWVlMjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC0xMTQsMTEgKzExNCwxMCBAQAogCX0KIAogCWlmIChoZHItPm5leHRoZHIgPT0gTkVYVEhEUl9IT1ApIHsKLQkJaWYgKGlwdjZfcGFyc2VfaG9wb3B0cyhza2IsIElQNkNCKHNrYiktPm5ob2ZmKSA8IDApIHsKKwkJaWYgKGlwdjZfcGFyc2VfaG9wb3B0cyhza2IpIDwgMCkgewogCQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQloZHIgPSBza2ItPm5oLmlwdjZoOwogCX0KIAogCXJldHVybiBORl9IT09LKFBGX0lORVQ2LE5GX0lQNl9QUkVfUk9VVElORywgc2tiLCBkZXYsIE5VTEwsIGlwNl9yY3ZfZmluaXNoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCBmZjkwNDBjLi5hOTk1Nzk2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC01MTksOSArNTE5LDYgQEAKIAlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CiAJc3RydWN0IGlwNl90bmwgKnQ7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YgKCppcHY2aCkpKQotCQlnb3RvIGRpc2NhcmQ7Ci0KIAlpcHY2aCA9IHNrYi0+bmguaXB2Nmg7CiAKIAlyZWFkX2xvY2soJmlwNmlwNl9sb2NrKTsKQEAgLTUyOSw4ICs1MjYsNyBAQAogCWlmICgodCA9IGlwNmlwNl90bmxfbG9va3VwKCZpcHY2aC0+c2FkZHIsICZpcHY2aC0+ZGFkZHIpKSAhPSBOVUxMKSB7CiAJCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7CiAJCQlyZWFkX3VubG9jaygmaXA2aXA2X2xvY2spOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gZGlzY2FyZDsKIAkJfQogCiAJCWlmICghKHQtPnBhcm1zLmZsYWdzICYgSVA2X1ROTF9GX0NBUF9SQ1YpKSB7CkBAIC01NTcsOSArNTUzLDExIEBACiAJCXJldHVybiAwOwogCX0KIAlyZWFkX3VubG9jaygmaXA2aXA2X2xvY2spOwotCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X0FERFJfVU5SRUFDSCwgMCwgc2tiLT5kZXYpOwotZGlzY2FyZDoKIAlyZXR1cm4gMTsKKworZGlzY2FyZDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKmNyZWF0ZV90ZWwoX191OCBlbmNhcF9saW1pdCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwY29tcDYuYyBiL25ldC9pcHY2L2lwY29tcDYuYwppbmRleCBkNGNmZWMzLi40ODYzNjQzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcGNvbXA2LmMKKysrIGIvbmV0L2lwdjYvaXBjb21wNi5jCkBAIC02Myw3ICs2Myw3IEBACiBzdGF0aWMgaW50IGlwY29tcDZfc2NyYXRjaF91c2VyczsKIHN0YXRpYyBMSVNUX0hFQUQoaXBjb21wNl90Zm1zX2xpc3QpOwogCi1zdGF0aWMgaW50IGlwY29tcDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgaXBjb21wNl9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgZXJyID0gMDsKIAl1OCBuZXh0aGRyID0gMDsKQEAgLTIwOCw3ICsyMDgsNyBAQAogCWlmICh0eXBlICE9IElDTVBWNl9ERVNUX1VOUkVBQ0ggJiYgdHlwZSAhPSBJQ01QVjZfUEtUX1RPT0JJRykKIAkJcmV0dXJuOwogCi0Jc3BpID0gbnRvaGwobnRvaHMoaXBjb21waC0+Y3BpKSk7CisJc3BpID0gaHRvbmwobnRvaHMoaXBjb21waC0+Y3BpKSk7CiAJeCA9IHhmcm1fc3RhdGVfbG9va3VwKCh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVDYpOwogCWlmICgheCkKIAkJcmV0dXJuOwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJaWYgKCFzY3JhdGNoZXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdm9pZCAqc2NyYXRjaCA9ICpwZXJfY3B1X3B0cihzY3JhdGNoZXMsIGkpOwogCiAJCXZmcmVlKHNjcmF0Y2gpOwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKIAlpcGNvbXA2X3NjcmF0Y2hlcyA9IHNjcmF0Y2hlczsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdm9pZCAqc2NyYXRjaCA9IHZtYWxsb2MoSVBDT01QX1NDUkFUQ0hfU0laRSk7CiAJCWlmICghc2NyYXRjaCkKIAkJCXJldHVybiBOVUxMOwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJaWYgKCF0Zm1zKQogCQlyZXR1cm47CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gKnBlcl9jcHVfcHRyKHRmbXMsIGNwdSk7CiAJCWNyeXB0b19mcmVlX3RmbSh0Zm0pOwogCX0KQEAgLTM4NCw3ICszODQsNyBAQAogCWlmICghdGZtcykKIAkJZ290byBlcnJvcjsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAwKTsKIAkJaWYgKCF0Zm0pCiAJCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIuYwppbmRleCBkNzUwY2ZjLi4zOTVhNDE3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9pcDZfcm91dGUuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KIAogaW50IGlwNl9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTU0LDcgKzU1LDcgQEAKIAlzdHJ1Y3QgaW42X2FkZHIgc2FkZHI7CiB9OwogCi1zdGF0aWMgdm9pZCBzYXZlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgbmZfaXA2X3NhdmVyb3V0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaXA2X3J0X2luZm8gKnJ0X2luZm8gPSBuZl9pbmZvX3Jlcm91dGUoaW5mbyk7CiAKQEAgLTY2LDcgKzY3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIGludCBuZl9pcDZfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpcDZfcnRfaW5mbyAqcnRfaW5mbyA9IG5mX2luZm9fcmVyb3V0ZShpbmZvKTsKIApAQCAtNzksMTUgKzgwLDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgaXA2X3Jlcm91dGUgPSB7Ci0JLnJlcl9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZfcnRfaW5mbyksCi0JLnNhdmUgCQk9ICZzYXZlLAotCS5yZXJvdXRlCT0gJnJlcm91dGUsCit1bnNpZ25lZCBpbnQgbmZfaXA2X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBza2ItPm5oLmlwdjZoOworCXVuc2lnbmVkIGludCBjc3VtID0gMDsKKworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoaG9vayAhPSBORl9JUDZfUFJFX1JPVVRJTkcgJiYgaG9vayAhPSBORl9JUDZfTE9DQUxfSU4pCisJCQlicmVhazsKKwkJaWYgKCFjc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCisJCQkgICAgCSAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBwcm90b2NvbCwKKwkJCQkgICAgIGNzdW1fc3ViKHNrYi0+Y3N1bSwKKwkJCQkJICAgICAgc2tiX2NoZWNrc3VtKHNrYiwgMCwKKwkJCQkJCQkgICBkYXRhb2ZmLCAwKSkpKSB7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBDSEVDS1NVTV9OT05FOgorCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAorCQkJCQkgICAgIHNrYi0+bGVuIC0gZGF0YW9mZiwKKwkJCQkJICAgICBwcm90b2NvbCwKKwkJCQkJICAgICBjc3VtX3N1YigwLAorCQkJCQkJICAgICAgc2tiX2NoZWNrc3VtKHNrYiwgMCwKKwkJCQkJCQkgICAgICAgICAgIGRhdGFvZmYsIDApKSk7CisJCWNzdW0gPSBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOworCX0KKwlyZXR1cm4gY3N1bTsKK30KKworRVhQT1JUX1NZTUJPTChuZl9pcDZfY2hlY2tzdW0pOworCitzdGF0aWMgc3RydWN0IG5mX2FmaW5mbyBuZl9pcDZfYWZpbmZvID0geworCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLmNoZWNrc3VtCT0gbmZfaXA2X2NoZWNrc3VtLAorCS5zYXZlcm91dGUJPSBuZl9pcDZfc2F2ZXJvdXRlLAorCS5yZXJvdXRlCT0gbmZfaXA2X3Jlcm91dGUsCisJLnJvdXRlX2tleV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZfcnRfaW5mbyksCiB9OwogCiBpbnQgX19pbml0IGlwdjZfbmV0ZmlsdGVyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoUEZfSU5FVDYsICZpcDZfcmVyb3V0ZSk7CisJcmV0dXJuIG5mX3JlZ2lzdGVyX2FmaW5mbygmbmZfaXA2X2FmaW5mbyk7CiB9CiAKIC8qIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGluZXQ2X2luaXQoKSBvbiBlcnJvcnMsIHNvIGl0IGNhbm5vdApAQCAtOTUsNSArMTMxLDUgQEAKICAqLwogdm9pZCBpcHY2X25ldGZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JbmZfdW5yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihQRl9JTkVUNik7CisJbmZfdW5yZWdpc3Rlcl9hZmluZm8oJm5mX2lwNl9hZmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA5OGY3ODc1Li40YmM0ZTViIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtODcsMTYgKzg3LDYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUDZfTkZfTUFUQ0hfTVVMVElQT1JUCi0JdHJpc3RhdGUgIk11bHRpcGxlIHBvcnQgbWF0Y2ggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFUwotCWhlbHAKLQkgIE11bHRpcG9ydCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIFRDUCBvciBVRFAgcGFja2V0cyBiYXNlZCBvbgotCSAgYSBzZXJpZXMgb2Ygc291cmNlIG9yIGRlc3RpbmF0aW9uIHBvcnRzOiBub3JtYWxseSBhIHJ1bGUgY2FuIG9ubHkKLQkgIG1hdGNoIGEgc2luZ2xlIHJhbmdlIG9mIHBvcnRzLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIElQNl9ORl9NQVRDSF9PV05FUgogCXRyaXN0YXRlICJPd25lciBtYXRjaCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVA2X05GX0lQVEFCTEVTCkBAIC0xMTUsMTEgKzEwNSwxMSBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIElQNl9ORl9NQVRDSF9BSEVTUAotCXRyaXN0YXRlICJBSC9FU1AgbWF0Y2ggc3VwcG9ydCIKK2NvbmZpZyBJUDZfTkZfTUFUQ0hfQUgKKwl0cmlzdGF0ZSAiQUggbWF0Y2ggc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFUwogCWhlbHAKLQkgIFRoaXMgbW9kdWxlIGFsbG93cyBvbmUgdG8gbWF0Y2ggQUggYW5kIEVTUCBwYWNrZXRzLgorCSAgVGhpcyBtb2R1bGUgYWxsb3dzIG9uZSB0byBtYXRjaCBBSCBwYWNrZXRzLgogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDg0MzZhMWEuLmVlZWI1N2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTgsOSArOCw4IEBACiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX09QVFMpICs9IGlwNnRfaGJoLm8gaXA2dF9kc3Qubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSKSArPSBpcDZ0X2lwdjZoZWFkZXIubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHKSArPSBpcDZ0X2ZyYWcubwotb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUCkgKz0gaXA2dF9lc3AubyBpcDZ0X2FoLm8KK29iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfQUgpICs9IGlwNnRfYWgubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2NCkgKz0gaXA2dF9ldWk2NC5vCi1vYmotJChDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVCkgKz0gaXA2dF9tdWx0aXBvcnQubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUikgKz0gaXA2dF9vd25lci5vCiBvYmotJChDT05GSUdfSVA2X05GX0ZJTFRFUikgKz0gaXA2dGFibGVfZmlsdGVyLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFOR0xFKSArPSBpcDZ0YWJsZV9tYW5nbGUubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IGU4MWM2YTkuLmI0YjdkNDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTY1OCwxNSArNjU4LDExIEBACiAJLm91dGZuCT0gJmlwcV9lbnF1ZXVlX3BhY2tldCwKIH07CiAKLXN0YXRpYyBpbnQKLWluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IGlwNl9xdWV1ZV9pbml0KHZvaWQpCiB7CiAJaW50IHN0YXR1cyA9IC1FTk9NRU07CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJbmV0bGlua19yZWdpc3Rlcl9ub3RpZmllcigmaXBxX25sX25vdGlmaWVyKTsKIAlpcHFubCA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShORVRMSU5LX0lQNl9GVywgMCwgaXBxX3Jjdl9zaywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSElTX01PRFVMRSk7CkBAIC02OTMsMTEgKzY4OSw2IEBACiAJfQogCXJldHVybiBzdGF0dXM7CiAKLWNsZWFudXA6Ci0JbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7Ci0Jc3luY2hyb25pemVfbmV0KCk7Ci0JaXBxX2ZsdXNoKE5GX0RST1ApOwotCQogY2xlYW51cF9zeXNjdGw6CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBxX3N5c2N0bF9oZWFkZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHFfZGV2X25vdGlmaWVyKTsKQEAgLTcxMywxNSArNzA0LDIxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaXA2X3F1ZXVlX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2X3F1ZXVlX2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7CisJc3luY2hyb25pemVfbmV0KCk7CisJaXBxX2ZsdXNoKE5GX0RST1ApOworCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBxX3N5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHFfZGV2X25vdGlmaWVyKTsKKwlwcm9jX25ldF9yZW1vdmUoSVBRX1BST0NfRlNfTkFNRSk7CisKKwlzb2NrX3JlbGVhc2UoaXBxbmwtPnNrX3NvY2tldCk7CisJbXV0ZXhfbG9jaygmaXBxbmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaXBxbmxfbXV0ZXgpOworCisJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZpcHFfbmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjYgcGFja2V0IHF1ZXVlIGhhbmRsZXIiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDNlY2YyZGIuLjJlNzJmODkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjg4LDE5ICsyODgsNiBAQAogCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCi0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCS8qIENoZWNrIG5vb25lIGVsc2UgdXNpbmcgb3VyIHRhYmxlICovCi0JaWYgKCgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20gIT0gMHhkZWFkNTdhYwotCSAgICAmJiAoKHN0cnVjdCBpcDZ0X2VudHJ5ICopdGFibGVfYmFzZSktPmNvbWVmcm9tICE9IDB4ZWVlZWVlZWMpIHsKLQkJcHJpbnRrKCJBU1NFUlQ6IENQVSAjJXUsICVzIGNvbWVmcm9tKCVwKSA9ICVYXG4iLAotCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLAotCQkgICAgICAgdGFibGUtPm5hbWUsCi0JCSAgICAgICAmKChzdHJ1Y3QgaXA2dF9lbnRyeSAqKXRhYmxlX2Jhc2UpLT5jb21lZnJvbSwKLQkJICAgICAgICgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20pOwotCX0KLQkoKHN0cnVjdCBpcDZ0X2VudHJ5ICopdGFibGVfYmFzZSktPmNvbWVmcm9tID0gMHg1N2FjYzAwMTsKLSNlbmRpZgotCiAJLyogRm9yIHJldHVybiBmcm9tIGJ1aWx0aW4gY2hhaW4gKi8KIAliYWNrID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPnVuZGVyZmxvd1tob29rXSk7CiAKQEAgLTc4OCw3ICs3NzUsNyBAQAogCX0KIAogCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlpZiAobmV3aW5mby0+ZW50cmllc1tpXSAmJiBuZXdpbmZvLT5lbnRyaWVzW2ldICE9IGVudHJ5MCkKIAkJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2ldLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpOwogCX0KQEAgLTg0MSw3ICs4MjgsNyBAQAogCQkJICAgY291bnRlcnMsCiAJCQkgICAmaSk7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGN1cmNwdSkKIAkJCWNvbnRpbnVlOwogCQlpID0gMDsKQEAgLTExMTYsNyArMTEwMyw3IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKLQlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IHBhZGRjLT5udW1fY291bnRlcnMpIHsKKwlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IHRtcC5udW1fY291bnRlcnMpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2tfdXBfZnJlZTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IGE5NmMwZGUuLjczYzYzMDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC00MzksNyArNDM5LDcgQEAKIAogCWlmIChsb2dpbmZvLT5sb2dmbGFncyAmIElQNlRfTE9HX05GTE9HKQogCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAotCQkgICAgICAgICAgICAgIGxvZ2luZm8tPnByZWZpeCk7CisJCSAgICAgICAgICAgICAgIiVzIiwgbG9naW5mby0+cHJlZml4KTsKIAllbHNlCiAJCWlwNnRfbG9nX3BhY2tldChQRl9JTkVUNiwgaG9va251bSwgKnBza2IsIGluLCBvdXQsICZsaSwKIAkJICAgICAgICAgICAgICAgIGxvZ2luZm8tPnByZWZpeCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9lc3AuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmJlZGFkLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qIEtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggRVNQIHBhcmFtZXRlcnMuICovCi0vKiAoQykgMjAwMS0yMDAyIEFuZHJhcyBLaXMtU3phYm8gPGtpc3phQHNjaC5ibWUuaHU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgotI2luY2x1ZGUgPG5ldC9pcHY2Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaD4KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IEVTUCBtYXRjaCIpOwotTU9EVUxFX0FVVEhPUigiQW5kcmFzIEtpcy1TemFibyA8a2lzemFAc2NoLmJtZS5odT4iKTsKLQotI2lmIDAKLSNkZWZpbmUgREVCVUdQIHByaW50awotI2Vsc2UKLSNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKLSNlbmRpZgotCi0vKiBSZXR1cm5zIDEgaWYgdGhlIHNwaSBpcyBtYXRjaGVkIGJ5IHRoZSByYW5nZSwgMCBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1zcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgaW50IGludmVydCkKLXsKLQlpbnQgcj0wOwotCURFQlVHUCgiZXNwIHNwaV9tYXRjaDolYyAweCV4IDw9IDB4JXggPD0gMHgleCIsaW52ZXJ0PyAnISc6JyAnLAotCSAgICAgICBtaW4sc3BpLG1heCk7Ci0Jcj0oc3BpID49IG1pbiAmJiBzcGkgPD0gbWF4KSBeIGludmVydDsKLQlERUJVR1AoIiByZXN1bHQgJXNcbiIscj8gIlBBU1NcbiIgOiAiRkFJTEVEXG4iKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludAotbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgaW50IG9mZnNldCwKLSAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgaW50ICpob3Rkcm9wKQotewotCXN0cnVjdCBpcF9lc3BfaGRyIF9lc3AsICplaDsKLQljb25zdCBzdHJ1Y3QgaXA2dF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0JdW5zaWduZWQgaW50IHB0cjsKLQotCS8qIE1ha2Ugc3VyZSB0aGlzIGlzbid0IGFuIGV2aWwgcGFja2V0ICovCi0JLypERUJVR1AoImlwdjZfZXNwIGVudGVyZWQgXG4iKTsqLwotCi0JaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX0VTUCwgTlVMTCkgPCAwKQotCQlyZXR1cm4gMDsKLQotCWVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2VzcCksICZfZXNwKTsKLQlpZiAoZWggPT0gTlVMTCkgewotCQkqaG90ZHJvcCA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCURFQlVHUCgiSVB2NiBFU1AgU1BJICV1ICUwOFhcbiIsIG50b2hsKGVoLT5zcGkpLCBudG9obChlaC0+c3BpKSk7Ci0KLQlyZXR1cm4gKGVoICE9IE5VTEwpCi0JCSYmIHNwaV9tYXRjaChlc3BpbmZvLT5zcGlzWzBdLCBlc3BpbmZvLT5zcGlzWzFdLAotCQkJICAgICAgbnRvaGwoZWgtPnNwaSksCi0JCQkgICAgICAhIShlc3BpbmZvLT5pbnZmbGFncyAmIElQNlRfRVNQX0lOVl9TUEkpKTsKLX0KLQotLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLwotc3RhdGljIGludAotY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0JICAgY29uc3Qgdm9pZCAqaXAsCi0JICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKLQkgICB2b2lkICptYXRjaGluZm8sCi0JICAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCi0JICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQljb25zdCBzdHJ1Y3QgaXA2dF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0KLQlpZiAoZXNwaW5mby0+aW52ZmxhZ3MgJiB+SVA2VF9FU1BfSU5WX01BU0spIHsKLQkJREVCVUdQKCJpcDZ0X2VzcDogdW5rbm93biBmbGFncyAlWFxuIiwKLQkJCSBlc3BpbmZvLT5pbnZmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcDZ0X21hdGNoIGVzcF9tYXRjaCA9IHsKLQkubmFtZQkJPSAiZXNwIiwKLQkubWF0Y2gJCT0gbWF0Y2gsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9lc3ApLAotCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcDZ0X2VzcF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlwNnRfcmVnaXN0ZXJfbWF0Y2goJmVzcF9tYXRjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0X2VzcF9maW5pKHZvaWQpCi17Ci0JaXA2dF91bnJlZ2lzdGVyX21hdGNoKCZlc3BfbWF0Y2gpOwotfQotCi1tb2R1bGVfaW5pdChpcDZ0X2VzcF9pbml0KTsKLW1vZHVsZV9leGl0KGlwNnRfZXNwX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXVpNjQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2V1aTY0LmMKaW5kZXggOTRkYmRiOC4uNGY2Yjg0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXVpNjQuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ldWk2NC5jCkBAIC00MCw3ICs0MCw3IEBACiAKIAltZW1zZXQoZXVpNjQsIDAsIHNpemVvZihldWk2NCkpOwogCi0JaWYgKGV0aF9oZHIoc2tiKS0+aF9wcm90byA9PSBudG9ocyhFVEhfUF9JUFY2KSkgeworCWlmIChldGhfaGRyKHNrYiktPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKIAkJaWYgKHNrYi0+bmguaXB2NmgtPnZlcnNpb24gPT0gMHg2KSB7CiAJCQltZW1jcHkoZXVpNjQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIDMpOwogCQkJbWVtY3B5KGV1aTY0ICsgNSwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSArIDMsIDMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbXVsdGlwb3J0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9tdWx0aXBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjNDhiYS4uMDAwMDAwMAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9tdWx0aXBvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKiBLZXJuZWwgbW9kdWxlIHRvIG1hdGNoIG9uZSBvZiBhIGxpc3Qgb2YgVENQL1VEUCBwb3J0czogcG9ydHMgYXJlIGluCi0gICB0aGUgc2FtZSBwbGFjZSBzbyB3ZSBjYW4gdHJlYXQgdGhlbSBhcyBlcXVhbC4gKi8KLQotLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAotICogKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdWRwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJpcDZ0YWJsZXMgbWF0Y2ggZm9yIG11bHRpcGxlIHBvcnRzIik7Ci0KLSNpZiAwCi0jZGVmaW5lIGR1cHJpbnRmKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKGZvcm1hdCAsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBkdXByaW50Zihmb3JtYXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQotLyogUmV0dXJucyAxIGlmIHRoZSBwb3J0IGlzIG1hdGNoZWQgYnkgdGhlIHRlc3QsIDAgb3RoZXJ3aXNlLiAqLwotc3RhdGljIGlubGluZSBpbnQKLXBvcnRzX21hdGNoKGNvbnN0IHVfaW50MTZfdCAqcG9ydGxpc3QsIGVudW0gaXA2dF9tdWx0aXBvcnRfZmxhZ3MgZmxhZ3MsCi0JICAgIHVfaW50OF90IGNvdW50LCB1X2ludDE2X3Qgc3JjLCB1X2ludDE2X3QgZHN0KQotewotCXVuc2lnbmVkIGludCBpOwotCWZvciAoaT0wOyBpPGNvdW50OyBpKyspIHsKLQkJaWYgKGZsYWdzICE9IElQNlRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCi0JCSAgICAmJiBwb3J0bGlzdFtpXSA9PSBzcmMpCi0JCQlyZXR1cm4gMTsKLQotCQlpZiAoZmxhZ3MgIT0gSVA2VF9NVUxUSVBPUlRfU09VUkNFCi0JCSAgICAmJiBwb3J0bGlzdFtpXSA9PSBkc3QpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgaW50IG9mZnNldCwKLSAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgaW50ICpob3Rkcm9wKQotewotCXUxNiBfcG9ydHNbMl0sICpwcHRyOwotCWNvbnN0IHN0cnVjdCBpcDZ0X211bHRpcG9ydCAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOwotCi0JLyogTXVzdCBub3QgYmUgYSBmcmFnbWVudC4gKi8KLQlpZiAob2Zmc2V0KQotCQlyZXR1cm4gMDsKLQotCS8qIE11c3QgYmUgYmlnIGVub3VnaCB0byByZWFkIHBvcnRzIChib3RoIFVEUCBhbmQgVENQIGhhdmUKLQkgICB0aGVtIGF0IHRoZSBzdGFydCkuICovCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvZmYsIHNpemVvZihfcG9ydHMpLCAmX3BvcnRzWzBdKTsKLQlpZiAocHB0ciA9PSBOVUxMKSB7Ci0JCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCi0JCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KLQkJICovCi0JCWR1cHJpbnRmKCJpcDZ0X211bHRpcG9ydDoiCi0JCQkgIiBEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxuIik7Ci0JCSpob3Rkcm9wID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIHBvcnRzX21hdGNoKG11bHRpaW5mby0+cG9ydHMsCi0JCQkgICBtdWx0aWluZm8tPmZsYWdzLCBtdWx0aWluZm8tPmNvdW50LAotCQkJICAgbnRvaHMocHB0clswXSksIG50b2hzKHBwdHJbMV0pKTsKLX0KLQotLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLwotc3RhdGljIGludAotY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0JICAgY29uc3Qgdm9pZCAqaW5mbywKLQkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotCSAgIHZvaWQgKm1hdGNoaW5mbywKLQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfaXA2ICppcCA9IGluZm87Ci0JY29uc3Qgc3RydWN0IGlwNnRfbXVsdGlwb3J0ICptdWx0aWluZm8gPSBtYXRjaGluZm87Ci0KLQkvKiBNdXN0IHNwZWNpZnkgcHJvdG8gPT0gVENQL1VEUCwgbm8gdW5rbm93biBmbGFncyBvciBiYWQgY291bnQgKi8KLQlyZXR1cm4gKGlwLT5wcm90byA9PSBJUFBST1RPX1RDUCB8fCBpcC0+cHJvdG8gPT0gSVBQUk9UT19VRFApCi0JCSYmICEoaXAtPmludmZsYWdzICYgSVA2VF9JTlZfUFJPVE8pCi0JCSYmIChtdWx0aWluZm8tPmZsYWdzID09IElQNlRfTVVMVElQT1JUX1NPVVJDRQotCQkgICAgfHwgbXVsdGlpbmZvLT5mbGFncyA9PSBJUDZUX01VTFRJUE9SVF9ERVNUSU5BVElPTgotCQkgICAgfHwgbXVsdGlpbmZvLT5mbGFncyA9PSBJUDZUX01VTFRJUE9SVF9FSVRIRVIpCi0JCSYmIG11bHRpaW5mby0+Y291bnQgPD0gSVA2VF9NVUxUSV9QT1JUUzsKLX0KLQotc3RhdGljIHN0cnVjdCBpcDZ0X21hdGNoIG11bHRpcG9ydF9tYXRjaCA9IHsKLQkubmFtZQkJPSAibXVsdGlwb3J0IiwKLQkubWF0Y2gJCT0gbWF0Y2gsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9tdWx0aXBvcnQpLAotCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcDZ0X211bHRpcG9ydF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlwNnRfcmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0X211bHRpcG9ydF9maW5pKHZvaWQpCi17Ci0JaXA2dF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2gpOwotfQotCi1tb2R1bGVfaW5pdChpcDZ0X211bHRpcG9ydF9pbml0KTsKLW1vZHVsZV9leGl0KGlwNnRfbXVsdGlwb3J0X2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCmluZGV4IGU1ZTcyNGQuLjYwOTc2YzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKQEAgLTE3NywzNyArMTc3LDIwIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFibGU7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzJdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2sxOwotCiAJcmV0dXJuIHJldDsKIAotIGNsZWFudXBfaG9vazE6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXA2dF9vcHMpL3NpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpOyBpKyspCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwppbmRleCBlMWYwZjZhLi4wM2ExM2VhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCkBAIC0yMzgsNDkgKzIzOCwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1syXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMTsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzNdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2syOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbNF0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazM7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMzoKLSAgICAgICAgbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1szXSk7Ci0gY2xlYW51cF9ob29rMjoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzJdKTsKLSBjbGVhbnVwX2hvb2sxOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotIGNsZWFudXBfaG9vazA6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CiAgY2xlYW51cF90YWJsZToKIAlpcDZ0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9tYW5nbGVyKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0YWJsZV9tYW5nbGVfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcDZ0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CiAJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfbWFuZ2xlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwppbmRleCA1NGQxZmZmLi42MWE3YzU4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCkBAIC0xNTIsMzEgKzE1MiwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfcmF3X2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXA2dF9vcHMpL3NpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpOyBpKyspCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IGM4YjVhOTYuLjkzYmFlMzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjg2LDU1ICsyODYsNDkgQEAKIAlyZXR1cm4gaXB2Nl9jb25udHJhY2tfaW4oaG9va251bSwgcHNrYiwgaW4sIG91dCwgb2tmbik7CiB9CiAKLS8qIENvbm5lY3Rpb24gdHJhY2tpbmcgbWF5IGRyb3AgcGFja2V0cywgYnV0IG5ldmVyIGFsdGVycyB0aGVtLCBzbwotICAgbWFrZSBpdCB0aGUgZmlyc3QgaG9vay4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcHY2X2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQ2LAotCS5ob29rbnVtCT0gTkZfSVA2X1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjZfY29ubnRyYWNrX2luLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfUFJFX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfbG9jYWwsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVUNiwKLQkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwdjZfZGVmcmFnLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfT1VULAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLS8qIFJlZnJhZ21lbnRlcjsgbGFzdCBjaGFuY2UuICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjZfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQ2LAotCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX0lOLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVC0xLAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwdjZfZGVmcmFnLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjZfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0xBU1QsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjZfY29uZmlybSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVDYsCisJCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0xBU1QtMSwKKwl9LAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTQ3MCwxNiArNDY0LDIxIEBACiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2OwogZXh0ZXJuIGludCBuZl9jdF9mcmFnNl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZfY3RfZnJhZzZfY2xlYW51cCh2b2lkKTsKLXN0YXRpYyBpbnQgaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQorCitNT0RVTEVfQUxJQVMoIm5mX2Nvbm50cmFjay0iIF9fc3RyaW5naWZ5KEFGX0lORVQ2KSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJZYXN1eXVraSBLT1pBS0FJIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPiIpOworCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOworCW5lZWRfY29ubnRyYWNrKCk7CiAKIAlyZXQgPSBuZl9jdF9mcmFnNl9pbml0KCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgaW5pdGlhbGl6ZSBmcmFnNi5cbiIpOwotCQlnb3RvIGNsZWFudXBfbm90aGluZzsKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gbmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTUwNSw3MSArNTA0LDI3IEBACiAJCWdvdG8gY2xlYW51cF9pY21wdjY7CiAJfQogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB2Nl9jb25udHJhY2tfb3BzLAorCQkJCUFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgZGVmcmFnICIKIAkJICAgICAgICJob29rLlxuIik7CiAJCWdvdG8gY2xlYW51cF9pcHY2OwogCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbF9vdXQgZGVmcmFnICIKLQkJICAgICAgICJob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9kZWZyYWdvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBwcmUtcm91dGluZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9kZWZyYWdsb2NhbG9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbCBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5vcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgcG9zdC1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2luYW5kbG9jYWxvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOwotCX0KLQogI2lmZGVmIENPTkZJR19TWVNDVEwKIAluZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKIAlpZiAobmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfbG9jYWxpbm9wczsKKwkJZ290byBjbGVhbnVwX2hvb2tzOwogCX0KICNlbmRpZgogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCXN5bmNocm9uaXplX25ldCgpOwogI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6CisgY2xlYW51cF9ob29rczoKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjZfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTsKICNlbmRpZgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLSBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2luYW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2lub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfaW5fb3BzKTsKLSBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOwotIGNsZWFudXBfZGVmcmFnb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyk7CiAgY2xlYW51cF9pcHY2OgogCW5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYpOwogIGNsZWFudXBfaWNtcHY2OgpAQCAtNTgwLDIzICs1MzUsMjEgQEAKIAluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDYpOwogIGNsZWFudXBfZnJhZzY6CiAJbmZfY3RfZnJhZzZfY2xlYW51cCgpOwotIGNsZWFudXBfbm90aGluZzoKIAlyZXR1cm4gcmV0OwogfQogCi1NT0RVTEVfQUxJQVMoIm5mX2Nvbm50cmFjay0iIF9fc3RyaW5naWZ5KEFGX0lORVQ2KSk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJZYXN1eXVraSBLT1pBS0FJIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPiIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2luaXQodm9pZCkKLXsKLQluZWVkX2Nvbm50cmFjaygpOwotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJc3luY2hyb25pemVfbmV0KCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIpOworI2VuZGlmCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY2X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7CisJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Nik7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wdjYpOworCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNik7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2KTsKKwluZl9jdF9mcmFnNl9jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjZfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCAwOTk0NWMzLi44NmM2NzAzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTIzMywyMSArMjMzLDEzIEBACiAJCXJldHVybiAtTkZfQUNDRVBUOwogCX0KIAotCWlmIChob29rbnVtICE9IE5GX0lQNl9QUkVfUk9VVElORykKLQkJZ290byBza2lwcGVkOwotCi0JLyogSWdub3JlIGl0IGlmIHRoZSBjaGVja3N1bSdzIGJvZ3VzLiAqLwotCWlmIChjc3VtX2lwdjZfbWFnaWMoJnNrYi0+bmguaXB2NmgtPnNhZGRyLCAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCi0JCQkgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX0lDTVBWNiwKLQkJCSAgICBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLAotCQkJCQkgc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKSkpIHsKKwlpZiAoaG9va251bSA9PSBORl9JUDZfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXA2X2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgSVBQUk9UT19JQ01QVjYpKSB7CiAJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVDYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCSAgICAgICJuZl9jdF9pY21wdjY6IElDTVB2NiBjaGVja3N1bSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLXNraXBwZWQ6Ci0KIAkvKiBpcyBub3QgZXJyb3IgbWVzc2FnZSA/ICovCiAJaWYgKGljbXA2aC0+aWNtcDZfdHlwZSA+PSAxMjgpCiAJCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggNDIzOGIxZS4uNzc5ZGRmNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtMzgsNyArMzgsNyBAQAogCWludCByZXMgPSAwOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXJlcyArPSBwcm90by0+c3RhdHNbY3B1XS5pbnVzZTsKIAogCXJldHVybiByZXM7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyByZXMgPSAwOwogICAgICAgICBpbnQgaTsKICAKLSAgICAgICAgZm9yX2VhY2hfY3B1KGkpIHsKKyAgICAgICAgZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKICAgICAgICAgICAgICAgICByZXMgKz0gKigoKHVuc2lnbmVkIGxvbmcgKilwZXJfY3B1X3B0cihtaWJbMF0sIGkpKSArIG9mZnQpOwogICAgICAgICAgICAgICAgIHJlcyArPSAqKCgodW5zaWduZWQgbG9uZyAqKXBlcl9jcHVfcHRyKG1pYlsxXSwgaSkpICsgb2ZmdCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwppbmRleCBiNjdhNDVmLi5lZWY5ODVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKKysrIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCkBAIC0xMjEsNiArMTIxLDEwIEBACiAJd3JpdGVfdW5sb2NrKCZpcDZfZnJhZ19sb2NrKTsKIH0KIAorLyoKKyAqIGNhbGxlcnMgc2hvdWxkIGJlIGNhcmVmdWwgbm90IHRvIHVzZSB0aGUgaGFzaCB2YWx1ZSBvdXRzaWRlIHRoZSBpcGZyYWdfbG9jaworICogYXMgZG9pbmcgc28gY291bGQgcmFjZSB3aXRoIGlwZnJhZ19oYXNoX3JuZCBiZWluZyByZWNhbGN1bGF0ZWQuCisgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2cWhhc2hmbih1MzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkcikKIHsKQEAgLTMyNCwxNSArMzI4LDE2IEBACiAvKiBDcmVhdGlvbiBwcmltaXRpdmVzLiAqLwogCiAKLXN0YXRpYyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqaXA2X2ZyYWdfaW50ZXJuKHVuc2lnbmVkIGludCBoYXNoLAotCQkJCQkgIHN0cnVjdCBmcmFnX3F1ZXVlICpmcV9pbikKK3N0YXRpYyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqaXA2X2ZyYWdfaW50ZXJuKHN0cnVjdCBmcmFnX3F1ZXVlICpmcV9pbikKIHsKIAlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnE7CisJdW5zaWduZWQgaW50IGhhc2g7CiAjaWZkZWYgQ09ORklHX1NNUAogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogI2VuZGlmCiAKIAl3cml0ZV9sb2NrKCZpcDZfZnJhZ19sb2NrKTsKKwloYXNoID0gaXA2cWhhc2hmbihmcV9pbi0+aWQsICZmcV9pbi0+c2FkZHIsICZmcV9pbi0+ZGFkZHIpOwogI2lmZGVmIENPTkZJR19TTVAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShmcSwgbiwgJmlwNl9mcmFnX2hhc2hbaGFzaF0sIGxpc3QpIHsKIAkJaWYgKGZxLT5pZCA9PSBmcV9pbi0+aWQgJiYgCkBAIC0zNjIsNyArMzY3LDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IGZyYWdfcXVldWUgKgotaXA2X2ZyYWdfY3JlYXRlKHVuc2lnbmVkIGludCBoYXNoLCB1MzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKK2lwNl9mcmFnX2NyZWF0ZSh1MzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKIHsKIAlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnE7CiAKQEAgLTM3OSw3ICszODQsNyBAQAogCXNwaW5fbG9ja19pbml0KCZmcS0+bG9jayk7CiAJYXRvbWljX3NldCgmZnEtPnJlZmNudCwgMSk7CiAKLQlyZXR1cm4gaXA2X2ZyYWdfaW50ZXJuKGhhc2gsIGZxKTsKKwlyZXR1cm4gaXA2X2ZyYWdfaW50ZXJuKGZxKTsKIAogb29tOgogCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CkBAIC0zOTEsOSArMzk2LDEwIEBACiB7CiAJc3RydWN0IGZyYWdfcXVldWUgKmZxOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwotCXVuc2lnbmVkIGludCBoYXNoID0gaXA2cWhhc2hmbihpZCwgc3JjLCBkc3QpOworCXVuc2lnbmVkIGludCBoYXNoOwogCiAJcmVhZF9sb2NrKCZpcDZfZnJhZ19sb2NrKTsKKwloYXNoID0gaXA2cWhhc2hmbihpZCwgc3JjLCBkc3QpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZxLCBuLCAmaXA2X2ZyYWdfaGFzaFtoYXNoXSwgbGlzdCkgewogCQlpZiAoZnEtPmlkID09IGlkICYmIAogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKHNyYywgJmZxLT5zYWRkcikgJiYKQEAgLTQwNSw3ICs0MTEsNyBAQAogCX0KIAlyZWFkX3VubG9jaygmaXA2X2ZyYWdfbG9jayk7CiAKLQlyZXR1cm4gaXA2X2ZyYWdfY3JlYXRlKGhhc2gsIGlkLCBzcmMsIGRzdCk7CisJcmV0dXJuIGlwNl9mcmFnX2NyZWF0ZShpZCwgc3JjLCBkc3QpOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDc5MDc4NzQuLjhhNzc3OTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMjgwLDEwICsyODAsMTMgQEAKIHsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IHJ0LT5ydDZpX25leHRob3A7CiAJaW50IG0gPSAwOwotCWlmIChuZWlnaCkgeworCWlmIChydC0+cnQ2aV9mbGFncyAmIFJURl9OT05FWFRIT1AgfHwKKwkgICAgIShydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSkKKwkJbSA9IDE7CisJZWxzZSBpZiAobmVpZ2gpIHsKIAkJcmVhZF9sb2NrX2JoKCZuZWlnaC0+bG9jayk7CiAJCWlmIChuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKQotCQkJbSA9IDE7CisJCQltID0gMjsKIAkJcmVhZF91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAl9CiAJcmV0dXJuIG07CkBAIC0yOTIsMTUgKzI5NSwxOCBAQAogc3RhdGljIGludCBydDZfc2NvcmVfcm91dGUoc3RydWN0IHJ0Nl9pbmZvICpydCwgaW50IG9pZiwKIAkJCSAgIGludCBzdHJpY3QpCiB7Ci0JaW50IG0gPSBydDZfY2hlY2tfZGV2KHJ0LCBvaWYpOworCWludCBtLCBuOworCQkKKwltID0gcnQ2X2NoZWNrX2RldihydCwgb2lmKTsKIAlpZiAoIW0gJiYgKHN0cmljdCAmIFJUNl9TRUxFQ1RfRl9JRkFDRSkpCiAJCXJldHVybiAtMTsKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRgogCW0gfD0gSVBWNl9ERUNPREVfUFJFRihJUFY2X0VYVFJBQ1RfUFJFRihydC0+cnQ2aV9mbGFncykpIDw8IDI7CiAjZW5kaWYKLQlpZiAocnQ2X2NoZWNrX25laWdoKHJ0KSkKKwluID0gcnQ2X2NoZWNrX25laWdoKHJ0KTsKKwlpZiAobiA+IDEpCiAJCW0gfD0gMTY7Ci0JZWxzZSBpZiAoc3RyaWN0ICYgUlQ2X1NFTEVDVF9GX1JFQUNIQUJMRSkKKwllbHNlIGlmICghbiAmJiBzdHJpY3QgJiBSVDZfU0VMRUNUX0ZfUkVBQ0hBQkxFKQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIG07CiB9CkBAIC0zMTcsNyArMzIzLDcgQEAKIAkJICBfX0ZVTkNUSU9OX18sIGhlYWQsIGhlYWQgPyAqaGVhZCA6IE5VTEwsIG9pZik7CiAKIAlmb3IgKHJ0ID0gcnQwLCBtZXRyaWMgPSBydDAtPnJ0NmlfbWV0cmljOwotCSAgICAgcnQgJiYgcnQtPnJ0NmlfbWV0cmljID09IG1ldHJpYzsKKwkgICAgIHJ0ICYmIHJ0LT5ydDZpX21ldHJpYyA9PSBtZXRyaWMgJiYgKCFsYXN0IHx8IHJ0ICE9IHJ0MCk7CiAJICAgICBydCA9IHJ0LT51Lm5leHQpIHsKIAkJaW50IG07CiAKQEAgLTM0Myw5ICszNDksMTIgQEAKIAkgICAgKHN0cmljdCAmIFJUNl9TRUxFQ1RfRl9SRUFDSEFCTEUpICYmCiAJICAgIGxhc3QgJiYgbGFzdCAhPSBydDApIHsKIAkJLyogbm8gZW50cmllcyBtYXRjaGVkOyBkbyByb3VuZC1yb2JpbiAqLworCQlzdGF0aWMgc3BpbmxvY2tfdCBsb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCQlzcGluX2xvY2soJmxvY2spOwogCQkqaGVhZCA9IHJ0MC0+dS5uZXh0OwogCQlydDAtPnUubmV4dCA9IGxhc3QtPnUubmV4dDsKIAkJbGFzdC0+dS5uZXh0ID0gcnQwOworCQlzcGluX3VubG9jaygmbG9jayk7CiAJfQogCiAJUlQ2X1RSQUNFKCIlcygpID0+ICVwLCBzY29yZT0lZFxuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggYzJkM2UxNy4uNjU3OGMzMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QUk9UX1VOUkVBQ0gsIDApOworCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmVhZF91bmxvY2soJmlwaXA2X2xvY2spOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdHVubmVsNi5jIGIvbmV0L2lwdjYvdHVubmVsNi5jCmluZGV4IDU2NTliNTIuLjBlZjlhMzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3R1bm5lbDYuYworKysgYi9uZXQvaXB2Ni90dW5uZWw2LmMKQEAgLTE5LDExICsxOSwxMyBAQAogICogCQlZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIApAQCAtODcsMTAgKzg5LDE2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCXN0cnVjdCB4ZnJtNl90dW5uZWwgKmhhbmRsZXI7CiAKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKKwkJZ290byBkcm9wOworCiAJZm9yIChoYW5kbGVyID0gdHVubmVsNl9oYW5kbGVyczsgaGFuZGxlcjsgaGFuZGxlciA9IGhhbmRsZXItPm5leHQpCiAJCWlmICghaGFuZGxlci0+aGFuZGxlcihza2IpKQogCQkJcmV0dXJuIDA7CiAKKwlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDAsIHNrYi0+ZGV2KTsKKworZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCmluZGV4IGNjY2Y4YjcuLjAwY2ZkZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwpAQCAtMzIsNyArMzIsNyBAQAogewogCWludCBlcnI7CiAJdTMyIHNlcTsKLQlzdHJ1Y3Qgc2VjX2RlY2FwX3N0YXRlIHhmcm1fdmVjW1hGUk1fTUFYX0RFUFRIXTsKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV92ZWNbWEZSTV9NQVhfREVQVEhdOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCWludCB4ZnJtX25yID0gMDsKIAlpbnQgZGVjYXBzID0gMDsKQEAgLTY1LDcgKzY1LDcgQEAKIAkJaWYgKHhmcm1fc3RhdGVfY2hlY2tfZXhwaXJlKHgpKQogCQkJZ290byBkcm9wX3VubG9jazsKIAotCQluZXh0aGRyID0geC0+dHlwZS0+aW5wdXQoeCwgJih4ZnJtX3ZlY1t4ZnJtX25yXS5kZWNhcCksIHNrYik7CisJCW5leHRoZHIgPSB4LT50eXBlLT5pbnB1dCh4LCBza2IpOwogCQlpZiAobmV4dGhkciA8PSAwKQogCQkJZ290byBkcm9wX3VubG9jazsKIApAQCAtNzksNyArNzksNyBAQAogCiAJCXNwaW5fdW5sb2NrKCZ4LT5sb2NrKTsKIAotCQl4ZnJtX3ZlY1t4ZnJtX25yKytdLnh2ZWMgPSB4OworCQl4ZnJtX3ZlY1t4ZnJtX25yKytdID0geDsKIAogCQlpZiAoeC0+cHJvcHMubW9kZSkgeyAvKiBYWFggKi8KIAkJCWlmIChuZXh0aGRyICE9IElQUFJPVE9fSVBWNikKQEAgLTExOCw3ICsxMTgsOCBAQAogCWlmICh4ZnJtX25yICsgc2tiLT5zcC0+bGVuID4gWEZSTV9NQVhfREVQVEgpCiAJCWdvdG8gZHJvcDsKIAotCW1lbWNweShza2ItPnNwLT54K3NrYi0+c3AtPmxlbiwgeGZybV92ZWMsIHhmcm1fbnIqc2l6ZW9mKHN0cnVjdCBzZWNfZGVjYXBfc3RhdGUpKTsKKwltZW1jcHkoc2tiLT5zcC0+eHZlYyArIHNrYi0+c3AtPmxlbiwgeGZybV92ZWMsCisJICAgICAgIHhmcm1fbnIgKiBzaXplb2YoeGZybV92ZWNbMF0pKTsKIAlza2ItPnNwLT5sZW4gKz0geGZybV9ucjsKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKQEAgLTE0OSw3ICsxNTAsNyBAQAogCXhmcm1fc3RhdGVfcHV0KHgpOwogZHJvcDoKIAl3aGlsZSAoLS14ZnJtX25yID49IDApCi0JCXhmcm1fc3RhdGVfcHV0KHhmcm1fdmVjW3hmcm1fbnJdLnh2ZWMpOworCQl4ZnJtX3N0YXRlX3B1dCh4ZnJtX3ZlY1t4ZnJtX25yXSk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCA5MWNjZThiLi44OGM4NDBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTkxLDE2ICsxOTEsMTggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogX2RlY29kZV9zZXNzaW9uNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKQogewotCXUxNiBvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworCXUxNiBvZmZzZXQgPSBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXc7CiAJc3RydWN0IGlwdjZoZHIgKmhkciA9IHNrYi0+bmguaXB2Nmg7Ci0Jc3RydWN0IGlwdjZfb3B0X2hkciAqZXh0aGRyID0gKHN0cnVjdCBpcHY2X29wdF9oZHIqKShza2ItPm5oLnJhdyArIG9mZnNldCk7Ci0JdTggbmV4dGhkciA9IHNrYi0+bmguaXB2NmgtPm5leHRoZHI7CisJc3RydWN0IGlwdjZfb3B0X2hkciAqZXh0aGRyOworCXU4IG5leHRoZHIgPSBza2ItPm5oLnJhd1tJUDZDQihza2IpLT5uaG9mZl07CiAKIAltZW1zZXQoZmwsIDAsIHNpemVvZihzdHJ1Y3QgZmxvd2kpKTsKIAlpcHY2X2FkZHJfY29weSgmZmwtPmZsNl9kc3QsICZoZHItPmRhZGRyKTsKIAlpcHY2X2FkZHJfY29weSgmZmwtPmZsNl9zcmMsICZoZHItPnNhZGRyKTsKIAogCXdoaWxlIChwc2tiX21heV9wdWxsKHNrYiwgc2tiLT5uaC5yYXcgKyBvZmZzZXQgKyAxIC0gc2tiLT5kYXRhKSkgeworCQlleHRoZHIgPSAoc3RydWN0IGlwdjZfb3B0X2hkciopKHNrYi0+bmgucmF3ICsgb2Zmc2V0KTsKKwogCQlzd2l0Y2ggKG5leHRoZHIpIHsKIAkJY2FzZSBORVhUSERSX1JPVVRJTkc6CiAJCWNhc2UgTkVYVEhEUl9IT1A6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCmluZGV4IGE4ZjY3NzYuLmQzNzc2OGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB4ZnJtNl90dW5uZWxfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgeGZybTZfdHVubmVsX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lweC9hZl9pcHguYyBiL25ldC9pcHgvYWZfaXB4LmMKaW5kZXggMmRiZjEzNC4uODExZDk5OCAxMDA2NDQKLS0tIGEvbmV0L2lweC9hZl9pcHguYworKysgYi9uZXQvaXB4L2FmX2lweC5jCkBAIC05NDQsOSArOTQ0LDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgaXB4X21hcF9mcmFtZV90eXBlKHVuc2lnbmVkIGNoYXIgdHlwZSkKK3N0YXRpYyBfX2JlMTYgaXB4X21hcF9mcmFtZV90eXBlKHVuc2lnbmVkIGNoYXIgdHlwZSkKIHsKLQlpbnQgcmMgPSAwOworCV9fYmUxNiByYyA9IDA7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIElQWF9GUkFNRV9FVEhFUklJOglyYyA9IGh0b25zKEVUSF9QX0lQWCk7CQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHgvaXB4X3JvdXRlLmMgYi9uZXQvaXB4L2lweF9yb3V0ZS5jCmluZGV4IDY3Nzc0NDQuLmEzOTRjNmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvaXB4X3JvdXRlLmMKKysrIGIvbmV0L2lweC9pcHhfcm91dGUuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGlweHJ0cl9kZWxldGUobG9uZyBuZXQpCitzdGF0aWMgaW50IGlweHJ0cl9kZWxldGUoX191MzIgbmV0KQogewogCXN0cnVjdCBpcHhfcm91dGUgKnIsICp0bXA7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJpYXAuYyBiL25ldC9pcmRhL2lyaWFwLmMKaW5kZXggMjU0ZjkwNy4uMmQyZTJiMSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJpYXAuYworKysgYi9uZXQvaXJkYS9pcmlhcC5jCkBAIC01NDQsNyArNTQ0LDggQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwogCWludCBuOwotCV9fdTMyIHRtcF9iZTMyLCB0bXBfYmUxNjsKKwlfX3UzMiB0bXBfYmUzMjsKKwlfX2JlMTYgdG1wX2JlMTY7CiAJX191OCAqZnA7CiAKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMgYi9uZXQvaXJkYS9pcmlhc19vYmplY3QuYwppbmRleCBjNmQxNjlmLi44MmU2NjVjIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmlhc19vYmplY3QuYworKysgYi9uZXQvaXJkYS9pcmlhc19vYmplY3QuYwpAQCAtMjU3LDcgKzI1Nyw2IEBACiAJLyogVW5zYWZlIChsb2NraW5nKSwgYXR0cmliIG1pZ2h0IGNoYW5nZSAqLwogCXJldHVybiBhdHRyaWI7CiB9Ci1FWFBPUlRfU1lNQk9MKGlyaWFzX2ZpbmRfYXR0cmliKTsKIAogLyoKICAqIEZ1bmN0aW9uIGlyaWFzX2FkZF9hdHRyaWJ1dGUgKG9iaiwgYXR0cmliKQpAQCAtNDg0LDcgKzQ4Myw2IEBACiAKIAlyZXR1cm4gdmFsdWU7CiB9Ci1FWFBPUlRfU1lNQk9MKGlyaWFzX25ld19zdHJpbmdfdmFsdWUpOwogCiAvKgogICogRnVuY3Rpb24gaXJpYXNfbmV3X29jdHNlcV92YWx1ZSAob2N0ZXRzLCBsZW4pCkBAIC01MTksNyArNTE3LDYgQEAKIAltZW1jcHkodmFsdWUtPnQub2N0X3NlcSwgb2N0c2VxICwgbGVuKTsKIAlyZXR1cm4gdmFsdWU7CiB9Ci1FWFBPUlRfU1lNQk9MKGlyaWFzX25ld19vY3RzZXFfdmFsdWUpOwogCiBzdHJ1Y3QgaWFzX3ZhbHVlICppcmlhc19uZXdfbWlzc2luZ192YWx1ZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXAuYyBiL25ldC9pcmRhL2lybGFwLmMKaW5kZXggNzAyOTYxOC4uYTE2NTI4NiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXAuYworKysgYi9uZXQvaXJkYS9pcmxhcC5jCkBAIC04ODQsNyArODg0LDggQEAKIAlpZiAobm93KSB7CiAJCS8qIFNlbmQgZG93biBlbXB0eSBmcmFtZSB0byB0cmlnZ2VyIHNwZWVkIGNoYW5nZSAqLwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKDApOwotCQlpcmxhcF9xdWV1ZV94bWl0KHNlbGYsIHNrYik7CisJCWlmIChza2IpCisJCQlpcmxhcF9xdWV1ZV94bWl0KHNlbGYsIHNrYik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19pbnB1dC5jIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwppbmRleCA4ZjNhZGRmLi5kNjJlMGY5IDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19pbnB1dC5jCisrKyBiL25ldC9sbGMvbGxjX2lucHV0LmMKQEAgLTExOCw3ICsxMTgsOCBAQAogCQl1MTYgcGR1bGVuID0gZXRoX2hkcihza2IpLT5oX3Byb3RvLAogCQkgICAgZGF0YV9zaXplID0gbnRvaHMocGR1bGVuKSAtIGxsY19sZW47CiAKLQkJc2tiX3RyaW0oc2tiLCBkYXRhX3NpemUpOworCQlpZiAodW5saWtlbHkocHNrYl90cmltX3Jjc3VtKHNrYiwgZGF0YV9zaXplKSkpCisJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggMzMyYWNiMy4uZTI4OTNlZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMjMxLDYgKzIzMSwxNSBAQAogCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dD4uICBJZiB1bnN1cmUsIHNheSBgTicuCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfRVNQCisJdHJpc3RhdGUgJyJFU1AiIG1hdGNoIHN1cHBvcnQnCisJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUworCWhlbHAKKwkgIFRoaXMgbWF0Y2ggZXh0ZW5zaW9uIGFsbG93cyB5b3UgdG8gbWF0Y2ggYSByYW5nZSBvZiBTUElzCisJICBpbnNpZGUgRVNQIGhlYWRlciBvZiBJUFNlYyBwYWNrZXRzLgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIKIAl0cmlzdGF0ZSAnImhlbHBlciIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCkBAIC0yODksNiArMjk4LDE2IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVAorCXRyaXN0YXRlICJNdWx0aXBsZSBwb3J0IG1hdGNoIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUworCWhlbHAKKwkgIE11bHRpcG9ydCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIFRDUCBvciBVRFAgcGFja2V0cyBiYXNlZCBvbgorCSAgYSBzZXJpZXMgb2Ygc291cmNlIG9yIGRlc3RpbmF0aW9uIHBvcnRzOiBub3JtYWxseSBhIHJ1bGUgY2FuIG9ubHkKKwkgIG1hdGNoIGEgc2luZ2xlIHJhbmdlIG9mIHBvcnRzLgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWCiAJdHJpc3RhdGUgJyJwaHlzZGV2IiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMgJiYgQlJJREdFX05FVEZJTFRFUgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggOTU1ODcyNy4uOTViN2U0MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC0zNSwxMSArMzUsMTMgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUkspICs9IHh0X2Nvbm5tYXJrLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLKSArPSB4dF9jb25udHJhY2subwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQKSArPSB4dF9kY2NwLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQKSArPSB4dF9lc3Aubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIpICs9IHh0X2hlbHBlci5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCkgKz0geHRfbGVuZ3RoLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQpICs9IHh0X2xpbWl0Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDKSArPSB4dF9tYWMubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLKSArPSB4dF9tYXJrLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUKSArPSB4dF9tdWx0aXBvcnQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kpICs9IHh0X3BvbGljeS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUpICs9IHh0X3BrdHR5cGUubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSkgKz0geHRfcmVhbG0ubwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwppbmRleCAxY2ViMWE2Li44NDU1YTMyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwpAQCAtMjcsNiArMjcsMjkgQEAKIAogI2luY2x1ZGUgIm5mX2ludGVybmFscy5oIgogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFmaW5mb19sb2NrKTsKKworc3RydWN0IG5mX2FmaW5mbyAqbmZfYWZpbmZvW05QUk9UT107CitFWFBPUlRfU1lNQk9MKG5mX2FmaW5mbyk7CisKK2ludCBuZl9yZWdpc3Rlcl9hZmluZm8oc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvKQoreworCXNwaW5fbG9jaygmYWZpbmZvX2xvY2spOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9hZmluZm9bYWZpbmZvLT5mYW1pbHldLCBhZmluZm8pOworCXNwaW5fdW5sb2NrKCZhZmluZm9fbG9jayk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9yZWdpc3Rlcl9hZmluZm8pOworCit2b2lkIG5mX3VucmVnaXN0ZXJfYWZpbmZvKHN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbykKK3sKKwlzcGluX2xvY2soJmFmaW5mb19sb2NrKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSwgTlVMTCk7CisJc3Bpbl91bmxvY2soJmFmaW5mb19sb2NrKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX3VucmVnaXN0ZXJfYWZpbmZvKTsKKwogLyogSW4gdGhpcyBjb2RlLCB3ZSBjYW4gYmUgd2FpdGluZyBpbmRlZmluaXRlbHkgZm9yIHVzZXJzcGFjZSB0bwogICogc2VydmljZSBhIHBhY2tldCBpZiBhIGhvb2sgcmV0dXJucyBORl9RVUVVRS4gIFdlIGNvdWxkIGtlZXAgYSBjb3VudAogICogb2Ygc2tidWZmcyBxdWV1ZWQgZm9yIHVzZXJzcGFjZSwgYW5kIG5vdCBkZXJlZ2lzdGVyIGEgaG9vayB1bmxlc3MKQEAgLTYzLDYgKzg2LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfaG9vayk7CiAKK2ludCBuZl9yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWVyciA9IG5mX3JlZ2lzdGVyX2hvb2soJnJlZ1tpXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycjsKKwl9CisJcmV0dXJuIGVycjsKKworZXJyOgorCWlmIChpID4gMCkKKwkJbmZfdW5yZWdpc3Rlcl9ob29rcyhyZWcsIGkpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG5mX3JlZ2lzdGVyX2hvb2tzKTsKKwordm9pZCBuZl91bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCW5mX3VucmVnaXN0ZXJfaG9vaygmcmVnW2ldKTsKK30KK0VYUE9SVF9TWU1CT0wobmZfdW5yZWdpc3Rlcl9ob29rcyk7CisKIHVuc2lnbmVkIGludCBuZl9pdGVyYXRlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKIAkJCWludCBob29rLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDU2Mzg5YzguLmY5YjgzZjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGU7CiAJaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWVjYWNoZSA9ICZwZXJfY3B1KG5mX2Nvbm50cmFja19lY2FjaGUsIGNwdSk7CiAJCWlmIChlY2FjaGUtPmN0KQogCQkJbmZfY3RfcHV0KGVjYWNoZS0+Y3QpOwpAQCAtMTc4LDkgKzE3OCw2IEBACiAJLyogYWxsb2NhdGVkIHNsYWIgY2FjaGUgKyBtb2R1bGVzIHdoaWNoIHVzZXMgdGhpcyBzbGFiIGNhY2hlICovCiAJaW50IHVzZTsKIAotCS8qIEluaXRpYWxpemF0aW9uICovCi0JaW50ICgqaW5pdF9jb25udHJhY2spKHN0cnVjdCBuZl9jb25uICosIHVfaW50MzJfdCk7Ci0KIH0gbmZfY3RfY2FjaGVbTkZfQ1RfRl9OVU1dOwogCiAvKiBwcm90ZWN0IG1lbWJlcnMgb2YgbmZfY3RfY2FjaGUgZXhjZXB0IG9mICJ1c2UiICovCkBAIC0yMDgsMTAgKzIwNSw4IEBACiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlwID0gX19uZl9jdF9wcm90b19maW5kKGwzcHJvdG8sIHByb3RvY29sKTsKLQlpZiAocCkgewotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKLQkJCXAgPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7Ci0JfQorCWlmICghdHJ5X21vZHVsZV9nZXQocC0+bWUpKQorCQlwID0gJm5mX2Nvbm50cmFja19nZW5lcmljX3Byb3RvY29sOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJCiAJcmV0dXJuIHA7CkBAIC0yMjksMTAgKzIyNCw4IEBACiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlwID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQobDNwcm90byk7Ci0JaWYgKHApIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChwLT5tZSkpCi0JCQlwID0gJm5mX2Nvbm50cmFja19nZW5lcmljX2wzcHJvdG87Ci0JfQorCWlmICghdHJ5X21vZHVsZV9nZXQocC0+bWUpKQorCQlwID0gJm5mX2Nvbm50cmFja19nZW5lcmljX2wzcHJvdG87CiAJcHJlZW1wdF9lbmFibGUoKTsKIAogCXJldHVybiBwOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYwppbmRleCA3ZGU0ZjA2Li4zZmM1OGU0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYwpAQCAtOTQsNSArOTQsNCBAQAogCS5wcmludF9jb25udHJhY2sgPSBnZW5lcmljX3ByaW50X2Nvbm50cmFjaywKIAkucHJlcGFyZQkgPSBnZW5lcmljX3ByZXBhcmUsCiAJLmdldF9mZWF0dXJlcwkgPSBnZW5lcmljX2dldF9mZWF0dXJlcywKLQkubWUJCSA9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCAwZTBlOWQ3Li5iZDEwZWI5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xMDIyLDcgKzEwMjIsNyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSykKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykKIAlpZiAoY2RhW0NUQV9NQVJLLTFdKQogCQljdC0+bWFyayA9IG50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9NQVJLLTFdKSk7CiAjZW5kaWYKQEAgLTEwNjIsNyArMTA2Miw3IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLKQorI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKQogCWlmIChjZGFbQ1RBX01BUkstMV0pCiAJCWN0LT5tYXJrID0gbnRvaGwoKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX01BUkstMV0pKTsKICNlbmRpZgpAQCAtMTY4Nyw3ICsxNjg3LDcgQEAKIAlwcmludGsoImN0bmV0bGluazogdW5yZWdpc3RlcmluZyBmcm9tIG5mbmV0bGluay5cbiIpOwogCiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMKLQluZl9jb25udHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcigmY3RubF9ub3RpZmllcl9leHApOworCW5mX2Nvbm50cmFja19leHBlY3RfdW5yZWdpc3Rlcl9ub3RpZmllcigmY3RubF9ub3RpZmllcl9leHApOwogCW5mX2Nvbm50cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKCZjdG5sX25vdGlmaWVyKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKaW5kZXggOWNjY2MzMi4uMGM2ZGE0OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwpAQCAtMjQwLDEyICsyNDAsMTUgQEAKIAkJCWZsYWcgPSAxOwogCQl9CiAKLQkJLyogQ29va2llIEFjay9FY2hvIGNodW5rcyBub3QgdGhlIGZpcnN0IE9SIAotCQkgICBJbml0IC8gSW5pdCBBY2sgLyBTaHV0ZG93biBjb21wbCBjaHVua3Mgbm90IHRoZSBvbmx5IGNodW5rcyAqLwotCQlpZiAoKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9DT09LSUVfQUNLIAorCQkvKgorCQkgKiBDb29raWUgQWNrL0VjaG8gY2h1bmtzIG5vdCB0aGUgZmlyc3QgT1IKKwkJICogSW5pdCAvIEluaXQgQWNrIC8gU2h1dGRvd24gY29tcGwgY2h1bmtzIG5vdCB0aGUgb25seSBjaHVua3MKKwkJICogT1IgemVyby1sZW5ndGguCisJCSAqLworCQlpZiAoKChzY2gtPnR5cGUgPT0gU0NUUF9DSURfQ09PS0lFX0FDSwogCQkJfHwgc2NoLT50eXBlID09IFNDVFBfQ0lEX0NPT0tJRV9FQ0hPCiAJCQl8fCBmbGFnKQotCQkgICAgICYmIGNvdW50ICE9MCApIHsKKwkJICAgICAgJiYgY291bnQgIT0wKSB8fCAhc2NoLT5sZW5ndGgpIHsKIAkJCURFQlVHUCgiQmFzaWMgY2hlY2tzIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCA2NDkyZWQ2Li42OTg5OWYyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNzk5LDggKzc5OSw3IEBACiAJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgICAgIGludCBwZiwKLQkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKLQkJICAgICBpbnQoKmNzdW0pKGNvbnN0IHN0cnVjdCBza19idWZmICosdW5zaWduZWQgaW50KSkKKwkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7CiAJdW5zaWduZWQgaW50IHRjcGxlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZjsKQEAgLTgzMCw5ICs4MjksOCBAQAogCSAqLwogCS8qIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwogCWlmICgoKHBmID09IFBGX0lORVQgJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORykgfHwKLQkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtICA9PSBORl9JUDZfUFJFX1JPVVRJTkcpKQotCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQotCSAgICAmJiBjc3VtKHNrYiwgZGF0YW9mZikpIHsKKwkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtICA9PSBORl9JUDZfUFJFX1JPVVRJTkcpKSAmJgorCSAgICBuZl9jaGVja3N1bShza2IsIGhvb2tudW0sIGRhdGFvZmYsIElQUFJPVE9fVENQLCBwZikpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkgICJuZl9jdF90Y3A6IGJhZCBUQ1AgY2hlY2tzdW0gIik7CkBAIC04NTEsNDQgKzg0OSw2IEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBjc3VtNChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZikKLXsKLQlyZXR1cm4gY3N1bV90Y3B1ZHBfbWFnaWMoc2tiLT5uaC5pcGgtPnNhZGRyLCBza2ItPm5oLmlwaC0+ZGFkZHIsCi0JCQkJIHNrYi0+bGVuIC0gZGF0YW9mZiwgSVBQUk9UT19UQ1AsCi0JCQkgICAgICAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IHNrYi0+Y3N1bQotCQkJICAgICAgCSA6IHNrYl9jaGVja3N1bShza2IsIGRhdGFvZmYsCi0JCQkJCQlza2ItPmxlbiAtIGRhdGFvZmYsIDApKTsKLX0KLQotc3RhdGljIGludCBjc3VtNihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZikKLXsKLQlyZXR1cm4gY3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJICAgICAgIHNrYi0+bGVuIC0gZGF0YW9mZiwgSVBQUk9UT19UQ1AsCi0JCQkgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcKLQkJCSAgICAgICA/IGNzdW1fc3ViKHNrYi0+Y3N1bSwKLQkJCQkJICBza2JfY2hlY2tzdW0oc2tiLCAwLCBkYXRhb2ZmLCAwKSkKLQkJCSAgICAgICA6IHNrYl9jaGVja3N1bShza2IsIGRhdGFvZmYsIHNrYi0+bGVuIC0gZGF0YW9mZiwKLQkJCQkJICAgICAgMCkpOwotfQotCi1zdGF0aWMgaW50IHRjcF9lcnJvcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKLQkJICAgICAgaW50IHBmLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKLXsKLQlyZXR1cm4gdGNwX2Vycm9yKHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBwZiwgaG9va251bSwgY3N1bTQpOwotfQotCi1zdGF0aWMgaW50IHRjcF9lcnJvcjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKLQkJICAgICAgaW50IHBmLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKLXsKLQlyZXR1cm4gdGNwX2Vycm9yKHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBwZiwgaG9va251bSwgY3N1bTYpOwotfQotCiAvKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovCiBzdGF0aWMgaW50IHRjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywKIAkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEyMTgsNyArMTE3OCw3IEBACiAJLnByaW50X2Nvbm50cmFjayAJPSB0Y3BfcHJpbnRfY29ubnRyYWNrLAogCS5wYWNrZXQgCQk9IHRjcF9wYWNrZXQsCiAJLm5ldyAJCQk9IHRjcF9uZXcsCi0JLmVycm9yCQkJPSB0Y3BfZXJyb3I0LAorCS5lcnJvcgkJCT0gdGNwX2Vycm9yLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudG9fbmZhdHRyCQk9IHRjcF90b19uZmF0dHIsCkBAIC0xMjM5LDcgKzExOTksNyBAQAogCS5wcmludF9jb25udHJhY2sgCT0gdGNwX3ByaW50X2Nvbm50cmFjaywKIAkucGFja2V0IAkJPSB0Y3BfcGFja2V0LAogCS5uZXcgCQkJPSB0Y3BfbmV3LAotCS5lcnJvcgkJCT0gdGNwX2Vycm9yNiwKKwkuZXJyb3IJCQk9IHRjcF9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25mYXR0cgkJPSB0Y3BfdG9fbmZhdHRyLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCA4MzFkMjA2Li5kOTNlZGJmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMTAzLDggKzEwMyw3IEBACiBzdGF0aWMgaW50IHVkcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCiAJCSAgICAgaW50IHBmLAotCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAotCQkgICAgIGludCAoKmNzdW0pKGNvbnN0IHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkIGludCkpCisJCSAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJdW5zaWduZWQgaW50IHVkcGxlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZjsKIAlzdHJ1Y3QgdWRwaGRyIF9oZHIsICpoZHI7CkBAIC0xMzYsOSArMTM1LDggQEAKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwogCWlmICgoKHBmID09IFBGX0lORVQgJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORykgfHwKLQkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtID09IE5GX0lQNl9QUkVfUk9VVElORykpCi0JICAgICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZCi0JICAgICYmIGNzdW0oc2tiLCBkYXRhb2ZmKSkgeworCSAgICAgKHBmID09IFBGX0lORVQ2ICYmIGhvb2tudW0gPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkgJiYKKwkgICAgbmZfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCBJUFBST1RPX1VEUCwgcGYpKSB7CiAJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1VEUCkpCiAJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJIm5mX2N0X3VkcDogYmFkIFVEUCBjaGVja3N1bSAiKTsKQEAgLTE0OCw0NCArMTQ2LDYgQEAKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCi1zdGF0aWMgaW50IGNzdW00KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmKQotewotCXJldHVybiBjc3VtX3RjcHVkcF9tYWdpYyhza2ItPm5oLmlwaC0+c2FkZHIsIHNrYi0+bmguaXBoLT5kYWRkciwKLQkJCQkgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX1VEUCwKLQkJCQkgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KLQkJCQkgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLAotCQkJCQkJc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY3N1bTYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYpCi17Ci0JcmV0dXJuIGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkciwKLQkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fVURQLAotCQkJICAgICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXCi0JCQkgICAgICAgPyBjc3VtX3N1Yihza2ItPmNzdW0sCi0JCQkJCSAgc2tiX2NoZWNrc3VtKHNrYiwgMCwgZGF0YW9mZiwgMCkpCi0JCQkgICAgICAgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLCBza2ItPmxlbiAtIGRhdGFvZmYsCi0JCQkJCSAgICAgIDApKTsKLX0KLQotc3RhdGljIGludCB1ZHBfZXJyb3I0KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCi0JCSAgICAgIGludCBwZiwKLQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCi17Ci0JcmV0dXJuIHVkcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW00KTsKLX0KLQotc3RhdGljIGludCB1ZHBfZXJyb3I2KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCi0JCSAgICAgIGludCBwZiwKLQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCi17Ci0JcmV0dXJuIHVkcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW02KTsKLX0KLQogc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNCA9CiB7CiAJLmwzcHJvdG8JCT0gUEZfSU5FVCwKQEAgLTE5Nyw3ICsxNTcsNyBAQAogCS5wcmludF9jb25udHJhY2sJPSB1ZHBfcHJpbnRfY29ubnRyYWNrLAogCS5wYWNrZXQJCQk9IHVkcF9wYWNrZXQsCiAJLm5ldwkJCT0gdWRwX25ldywKLQkuZXJyb3IJCQk9IHVkcF9lcnJvcjQsCisJLmVycm9yCQkJPSB1ZHBfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19uZmF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0ciwKQEAgLTIxNiw3ICsxNzYsNyBAQAogCS5wcmludF9jb25udHJhY2sJPSB1ZHBfcHJpbnRfY29ubnRyYWNrLAogCS5wYWNrZXQJCQk9IHVkcF9wYWNrZXQsCiAJLm5ldwkJCT0gdWRwX25ldywKLQkuZXJyb3IJCQk9IHVkcF9lcnJvcjYsCisJLmVycm9yCQkJPSB1ZHBfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19uZmF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0ciwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBjNzJhYTNjLi40MDg5NjBjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC02NDksNjMgKzY0OSw2IEBACiBFWFBPUlRfU1lNQk9MKG5mX2N0X2xvZ19pbnZhbGlkKTsKICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCiAKLXN0YXRpYyBpbnQgaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQotewotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jLCAqcHJvY19leHAsICpwcm9jX3N0YXQ7Ci0jZW5kaWYKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOwotCi0JcmV0ID0gbmZfY29ubnRyYWNrX2luaXQoKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX25vdGhpbmc7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2MgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgibmZfY29ubnRyYWNrIiwgMDQ0MCwgJmN0X2ZpbGVfb3BzKTsKLQlpZiAoIXByb2MpIGdvdG8gY2xlYW51cF9pbml0OwotCi0JcHJvY19leHAgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgibmZfY29ubnRyYWNrX2V4cGVjdCIsIDA0NDAsCi0JCQkJCSZleHBfZmlsZV9vcHMpOwotCWlmICghcHJvY19leHApIGdvdG8gY2xlYW51cF9wcm9jOwotCi0JcHJvY19zdGF0ID0gY3JlYXRlX3Byb2NfZW50cnkoIm5mX2Nvbm50cmFjayIsIFNfSVJVR08sIHByb2NfbmV0X3N0YXQpOwotCWlmICghcHJvY19zdGF0KQotCQlnb3RvIGNsZWFudXBfcHJvY19leHA7Ci0KLQlwcm9jX3N0YXQtPnByb2NfZm9wcyA9ICZjdF9jcHVfc2VxX2ZvcHM7Ci0JcHJvY19zdGF0LT5vd25lciA9IFRISVNfTU9EVUxFOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCW5mX2N0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKLQlpZiAobmZfY3Rfc3lzY3RsX2hlYWRlciA9PSBOVUxMKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciB0byBzeXNjdGwuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBjbGVhbnVwX3Byb2Nfc3RhdDsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiByZXQ7Ci0KLSBjbGVhbnVwOgotI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3Rfc3lzY3RsX2hlYWRlcik7Ci0gY2xlYW51cF9wcm9jX3N0YXQ6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBwcm9jX25ldF9zdGF0KTsKLSBjbGVhbnVwX3Byb2NfZXhwOgotCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrX2V4cGVjdCIpOwotIGNsZWFudXBfcHJvYzoKLQlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFjayIpOwotIGNsZWFudXBfaW5pdDoKLSNlbmRpZiAvKiBDTkZJR19QUk9DX0ZTICovCi0JbmZfY29ubnRyYWNrX2NsZWFudXAoKTsKLSBjbGVhbnVwX25vdGhpbmc6Ci0JcmV0dXJuIHJldDsKLX0KLQogaW50IG5mX2Nvbm50cmFja19sM3Byb3RvX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcHJvdG8pCiB7CiAJaW50IHJldCA9IDA7CkBAIC04MDgsMTIgKzc1MSw2NiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgxKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2NfZXhwLCAqcHJvY19zdGF0OworI2VuZGlmCisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBuZl9jb25udHJhY2tfaW5pdCgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlwcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoIm5mX2Nvbm50cmFjayIsIDA0NDAsICZjdF9maWxlX29wcyk7CisJaWYgKCFwcm9jKSBnb3RvIGNsZWFudXBfaW5pdDsKKworCXByb2NfZXhwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoIm5mX2Nvbm50cmFja19leHBlY3QiLCAwNDQwLAorCQkJCQkmZXhwX2ZpbGVfb3BzKTsKKwlpZiAoIXByb2NfZXhwKSBnb3RvIGNsZWFudXBfcHJvYzsKKworCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBTX0lSVUdPLCBwcm9jX25ldF9zdGF0KTsKKwlpZiAoIXByb2Nfc3RhdCkKKwkJZ290byBjbGVhbnVwX3Byb2NfZXhwOworCisJcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOworCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNDVEwKKwluZl9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X25ldF90YWJsZSwgMCk7CisJaWYgKG5mX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7CisJfQorI2VuZGlmCisJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKKyBjbGVhbnVwX3Byb2Nfc3RhdDoKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoIm5mX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworIGNsZWFudXBfcHJvY19leHA6CisJcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2tfZXhwZWN0Iik7CisgY2xlYW51cF9wcm9jOgorCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrIik7CisgY2xlYW51cF9pbml0OgorI2VuZGlmIC8qIENORklHX1BST0NfRlMgKi8KKwluZl9jb25udHJhY2tfY2xlYW51cCgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pKHZvaWQpCiB7Ci0JaW5pdF9vcl9jbGVhbnVwKDApOworI2lmZGVmIENPTkZJR19TWVNDVEwKKyAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3Rfc3lzY3RsX2hlYWRlcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXJlbW92ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBwcm9jX25ldF9zdGF0KTsKKwlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFja19leHBlY3QiKTsKKwlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFjayIpOworI2VuZGlmIC8qIENORklHX1BST0NfRlMgKi8KKwluZl9jb25udHJhY2tfY2xlYW51cCgpOwogfQogCiBtb2R1bGVfaW5pdChuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYwppbmRleCBkOWYwZDdlLi5lZThmNzA4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiBmb3IgcXVldWVpbmcgYW5kIG11c3QgcmVpbmplY3QgYWxsIHBhY2tldHMgaXQgcmVjZWl2ZXMsIG5vIG1hdHRlciB3aGF0LgogICovCiBzdGF0aWMgc3RydWN0IG5mX3F1ZXVlX2hhbmRsZXIgKnF1ZXVlX2hhbmRsZXJbTlBST1RPXTsKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgKnF1ZXVlX3Jlcm91dGVyW05QUk9UT107CiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKHF1ZXVlX2hhbmRsZXJfbG9jayk7CiAKQEAgLTU5LDMyICs1OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfcXVldWVfaGFuZGxlcik7CiAKLWludCBuZl9yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihpbnQgcGYsIHN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcmVyKQotewotCWlmIChwZiA+PSBOUFJPVE8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfbG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQlyY3VfYXNzaWduX3BvaW50ZXIocXVldWVfcmVyb3V0ZXJbcGZdLCByZXIpOwotCXdyaXRlX3VubG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIpOwotCi1pbnQgbmZfdW5yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihpbnQgcGYpCi17Ci0JaWYgKHBmID49IE5QUk9UTykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwotCXJjdV9hc3NpZ25fcG9pbnRlcihxdWV1ZV9yZXJvdXRlcltwZl0sIE5VTEwpOwotCXdyaXRlX3VubG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mX3VucmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIpOwotCiB2b2lkIG5mX3VucmVnaXN0ZXJfcXVldWVfaGFuZGxlcnMoc3RydWN0IG5mX3F1ZXVlX2hhbmRsZXIgKnFoKQogewogCWludCBwZjsKQEAgLTExNiw3ICs4OSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNpbmRldiA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNvdXRkZXYgPSBOVUxMOwogI2VuZGlmCi0Jc3RydWN0IG5mX3F1ZXVlX3Jlcm91dGVyICpyZXJvdXRlcjsKKwlzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm87CiAKIAkvKiBRVUVVRSA9PSBEUk9QIGlmIG5vb25lIGlzIHdhaXRpbmcsIHRvIGJlIHNhZmUuICovCiAJcmVhZF9sb2NrKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwpAQCAtMTI2LDcgKzk5LDE0IEBACiAJCXJldHVybiAxOwogCX0KIAotCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbykrcXVldWVfcmVyb3V0ZXJbcGZdLT5yZXJfc2l6ZSwgR0ZQX0FUT01JQyk7CisJYWZpbmZvID0gbmZfZ2V0X2FmaW5mbyhwZik7CisJaWYgKCFhZmluZm8pIHsKKwkJcmVhZF91bmxvY2soJnF1ZXVlX2hhbmRsZXJfbG9jayk7CisJCWtmcmVlX3NrYigqc2tiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSArIGFmaW5mby0+cm91dGVfa2V5X3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghaW5mbykgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fRVJSICJPT00gcXVldWVpbmcgcGFja2V0ICVwXG4iLApAQCAtMTU4LDEwICsxMzgsNyBAQAogCQlpZiAocGh5c291dGRldikgZGV2X2hvbGQocGh5c291dGRldik7CiAJfQogI2VuZGlmCi0JcmVyb3V0ZXIgPSByY3VfZGVyZWZlcmVuY2UocXVldWVfcmVyb3V0ZXJbcGZdKTsKLQlpZiAocmVyb3V0ZXIpCi0JCXJlcm91dGVyLT5zYXZlKCpza2IsIGluZm8pOwotCisJYWZpbmZvLT5zYXZlcm91dGUoKnNrYiwgaW5mbyk7CiAJc3RhdHVzID0gcXVldWVfaGFuZGxlcltwZl0tPm91dGZuKCpza2IsIGluZm8sIHF1ZXVlbnVtLAogCQkJCQkgIHF1ZXVlX2hhbmRsZXJbcGZdLT5kYXRhKTsKIApAQCAtMTkwLDcgKzE2Nyw3IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbSA9ICZpbmZvLT5lbGVtLT5saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgKmk7Ci0Jc3RydWN0IG5mX3F1ZXVlX3Jlcm91dGVyICpyZXJvdXRlcjsKKwlzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm87CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKQEAgLTIyOCw4ICsyMDUsOCBAQAogCX0KIAogCWlmICh2ZXJkaWN0ID09IE5GX0FDQ0VQVCkgewotCQlyZXJvdXRlciA9IHJjdV9kZXJlZmVyZW5jZShxdWV1ZV9yZXJvdXRlcltpbmZvLT5wZl0pOwotCQlpZiAocmVyb3V0ZXIgJiYgcmVyb3V0ZXItPnJlcm91dGUoJnNrYiwgaW5mbykgPCAwKQorCQlhZmluZm8gPSBuZl9nZXRfYWZpbmZvKGluZm8tPnBmKTsKKwkJaWYgKCFhZmluZm8gfHwgYWZpbmZvLT5yZXJvdXRlKCZza2IsIGluZm8pIDwgMCkKIAkJCXZlcmRpY3QgPSBORl9EUk9QOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCAzZTNmNTQ0Li42MWNkZGE0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiBuZnVsbmxfc2V0X2ZsYWdzKHN0cnVjdCBuZnVsbmxfaW5zdGFuY2UgKmluc3QsIHVfaW50MTZfdCBmbGFncykKIHsKIAlzcGluX2xvY2tfYmgoJmluc3QtPmxvY2spOwotCWluc3QtPmZsYWdzID0gbnRvaHMoZmxhZ3MpOworCWluc3QtPmZsYWdzID0gZmxhZ3M7CiAJc3Bpbl91bmxvY2tfYmgoJmluc3QtPmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC05MDIsNyArOTAyLDcgQEAKIAlpZiAobmZ1bGFbTkZVTEFfQ0ZHX0ZMQUdTLTFdKSB7CiAJCXVfaW50MTZfdCBmbGFncyA9CiAJCQkqKHVfaW50MTZfdCAqKU5GQV9EQVRBKG5mdWxhW05GVUxBX0NGR19GTEFHUy0xXSk7Ci0JCW5mdWxubF9zZXRfZmxhZ3MoaW5zdCwgbnRvaGwoZmxhZ3MpKTsKKwkJbmZ1bG5sX3NldF9mbGFncyhpbnN0LCBudG9ocyhmbGFncykpOwogCX0KIAogb3V0X3B1dDoKQEAgLTEwMzMsMTcgKzEwMzMsMTMgQEAKIAogI2VuZGlmIC8qIFBST0NfRlMgKi8KIAotc3RhdGljIGludAotaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQorc3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2xvZ19pbml0KHZvaWQpCiB7CiAJaW50IGksIHN0YXR1cyA9IC1FTk9NRU07CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmZ1bDsKICNlbmRpZgogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJZm9yIChpID0gMDsgaSA8IElOU1RBTkNFX0JVQ0tFVFM7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZpbnN0YW5jZV90YWJsZVtpXSk7CiAJCkBAIC0xMDY2LDMwICsxMDYyLDI1IEBACiAJCWdvdG8gY2xlYW51cF9zdWJzeXM7CiAJcHJvY19uZnVsLT5wcm9jX2ZvcHMgPSAmbmZ1bF9maWxlX29wczsKICNlbmRpZgotCiAJcmV0dXJuIHN0YXR1czsKIAotY2xlYW51cDoKLQluZl9sb2dfdW5yZWdpc3Rlcl9sb2dnZXIoJm5mdWxubF9sb2dnZXIpOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoIm5mbmV0bGlua19sb2ciLCBwcm9jX25ldF9uZXRmaWx0ZXIpOwogY2xlYW51cF9zdWJzeXM6Ci0jZW5kaWYKIAluZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoJm5mdWxubF9zdWJzeXMpOworI2VuZGlmCiBjbGVhbnVwX25ldGxpbmtfbm90aWZpZXI6CiAJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZuZnVsbmxfcnRubF9ub3RpZmllcik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2xvZ19pbml0KHZvaWQpCi17Ci0JCi0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgxKTsKLX0KLQogc3RhdGljIHZvaWQgX19leGl0IG5mbmV0bGlua19sb2dfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl9sb2dfdW5yZWdpc3Rlcl9sb2dnZXIoJm5mdWxubF9sb2dnZXIpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoIm5mbmV0bGlua19sb2ciLCBwcm9jX25ldF9uZXRmaWx0ZXIpOworI2VuZGlmCisJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZuZnVsbmxfc3Vic3lzKTsKKwluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mdWxubF9ydG5sX25vdGlmaWVyKTsKIH0KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJuZXRmaWx0ZXIgdXNlcnNwYWNlIGxvZ2dpbmciKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCmluZGV4IGQwZTYyZjYuLjg2YTRhYzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtMTA3MSwxNyArMTA3MSwxMyBAQAogCiAjZW5kaWYgLyogUFJPQ19GUyAqLwogCi1zdGF0aWMgaW50Ci1pbml0X29yX2NsZWFudXAoaW50IGluaXQpCitzdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfcXVldWVfaW5pdCh2b2lkKQogewogCWludCBpLCBzdGF0dXMgPSAtRU5PTUVNOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX25mcXVldWU7CiAjZW5kaWYKIAkKLQlpZiAoIWluaXQpCi0JCWdvdG8gY2xlYW51cDsKLQogCWZvciAoaSA9IDA7IGkgPCBJTlNUQU5DRV9CVUNLRVRTOyBpKyspCiAJCUlOSVRfSExJU1RfSEVBRCgmaW5zdGFuY2VfdGFibGVbaV0pOwogCkBAIC0xMTAxLDMxICsxMDk3LDI2IEBACiAjZW5kaWYKIAogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZxbmxfZGV2X25vdGlmaWVyKTsKLQogCXJldHVybiBzdGF0dXM7CiAKLWNsZWFudXA6Ci0JbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5mcW5sX2Rldl9ub3RpZmllcik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZW1vdmVfcHJvY19lbnRyeSgibmZuZXRsaW5rX3F1ZXVlIiwgcHJvY19uZXRfbmV0ZmlsdGVyKTsKIGNsZWFudXBfc3Vic3lzOgotI2VuZGlmCQogCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZxbmxfc3Vic3lzKTsKKyNlbmRpZgogY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOgogCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZxbmxfcnRubF9ub3RpZmllcik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX3F1ZXVlX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZuZXRsaW5rX3F1ZXVlX2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5mcW5sX2Rldl9ub3RpZmllcik7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlyZW1vdmVfcHJvY19lbnRyeSgibmZuZXRsaW5rX3F1ZXVlIiwgcHJvY19uZXRfbmV0ZmlsdGVyKTsKKyNlbmRpZgorCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZxbmxfc3Vic3lzKTsKKwluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mcW5sX3J0bmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIm5ldGZpbHRlciBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IGE2NTdhYjUuLjk5MjkzYzYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1hdGNoOwogCXN0cnVjdCBsaXN0X2hlYWQgdGFyZ2V0OwogCXN0cnVjdCBsaXN0X2hlYWQgdGFibGVzOworCXN0cnVjdCBtdXRleCBjb21wYXRfbXV0ZXg7CiB9OwogCiBzdGF0aWMgc3RydWN0IHh0X2FmICp4dDsKQEAgLTI3Miw2ICsyNzMsNTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NoZWNrX21hdGNoKTsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKK2ludCB4dF9jb21wYXRfbWF0Y2godm9pZCAqbWF0Y2gsIHZvaWQgKipkc3RwdHIsIGludCAqc2l6ZSwgaW50IGNvbnZlcnQpCit7CisJc3RydWN0IHh0X21hdGNoICptOworCXN0cnVjdCBjb21wYXRfeHRfZW50cnlfbWF0Y2ggKnBjb21wYXRfbTsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKnBtOworCXVfaW50MTZfdCBtc2l6ZTsKKwlpbnQgb2ZmLCByZXQ7CisKKwlyZXQgPSAwOworCW0gPSAoKHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqKW1hdGNoKS0+dS5rZXJuZWwubWF0Y2g7CisJb2ZmID0gWFRfQUxJR04obS0+bWF0Y2hzaXplKSAtIENPTVBBVF9YVF9BTElHTihtLT5tYXRjaHNpemUpOworCXN3aXRjaCAoY29udmVydCkgeworCQljYXNlIENPTVBBVF9UT19VU0VSOgorCQkJcG0gPSAoc3RydWN0IHh0X2VudHJ5X21hdGNoICopbWF0Y2g7CisJCQltc2l6ZSA9IHBtLT51LnVzZXIubWF0Y2hfc2l6ZTsKKwkJCWlmIChjb3B5X3RvX3VzZXIoKmRzdHB0ciwgcG0sIG1zaXplKSkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQltc2l6ZSAtPSBvZmY7CisJCQlpZiAocHV0X3VzZXIobXNpemUsICh1X2ludDE2X3QgKikqZHN0cHRyKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJKnNpemUgLT0gb2ZmOworCQkJKmRzdHB0ciArPSBtc2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIENPTVBBVF9GUk9NX1VTRVI6CisJCQlwY29tcGF0X20gPSAoc3RydWN0IGNvbXBhdF94dF9lbnRyeV9tYXRjaCAqKW1hdGNoOworCQkJcG0gPSAoc3RydWN0IHh0X2VudHJ5X21hdGNoICopKmRzdHB0cjsKKwkJCW1zaXplID0gcGNvbXBhdF9tLT51LnVzZXIubWF0Y2hfc2l6ZTsKKwkJCW1lbWNweShwbSwgcGNvbXBhdF9tLCBtc2l6ZSk7CisJCQltc2l6ZSArPSBvZmY7CisJCQlwbS0+dS51c2VyLm1hdGNoX3NpemUgPSBtc2l6ZTsKKwkJCSpzaXplICs9IG9mZjsKKwkJCSpkc3RwdHIgKz0gbXNpemU7CisJCQlicmVhazsKKwkJY2FzZSBDT01QQVRfQ0FMQ19TSVpFOgorCQkJKnNpemUgKz0gb2ZmOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF9tYXRjaCk7CisjZW5kaWYKKwogaW50IHh0X2NoZWNrX3RhcmdldChjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsIHVuc2lnbmVkIHNob3J0IGZhbWlseSwKIAkJICAgIHVuc2lnbmVkIGludCBzaXplLCBjb25zdCBjaGFyICp0YWJsZSwgdW5zaWduZWQgaW50IGhvb2tfbWFzaywKIAkJICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBpbnQgaW52X3Byb3RvKQpAQCAtMzAxLDYgKzM1MCw1NCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY2hlY2tfdGFyZ2V0KTsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKK2ludCB4dF9jb21wYXRfdGFyZ2V0KHZvaWQgKnRhcmdldCwgdm9pZCAqKmRzdHB0ciwgaW50ICpzaXplLCBpbnQgY29udmVydCkKK3sKKwlzdHJ1Y3QgeHRfdGFyZ2V0ICp0OworCXN0cnVjdCBjb21wYXRfeHRfZW50cnlfdGFyZ2V0ICpwY29tcGF0OworCXN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKnB0OworCXVfaW50MTZfdCB0c2l6ZTsKKwlpbnQgb2ZmLCByZXQ7CisKKwlyZXQgPSAwOworCXQgPSAoKHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKil0YXJnZXQpLT51Lmtlcm5lbC50YXJnZXQ7CisJb2ZmID0gWFRfQUxJR04odC0+dGFyZ2V0c2l6ZSkgLSBDT01QQVRfWFRfQUxJR04odC0+dGFyZ2V0c2l6ZSk7CisJc3dpdGNoIChjb252ZXJ0KSB7CisJCWNhc2UgQ09NUEFUX1RPX1VTRVI6CisJCQlwdCA9IChzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICopdGFyZ2V0OworCQkJdHNpemUgPSBwdC0+dS51c2VyLnRhcmdldF9zaXplOworCQkJaWYgKGNvcHlfdG9fdXNlcigqZHN0cHRyLCBwdCwgdHNpemUpKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXRzaXplIC09IG9mZjsKKwkJCWlmIChwdXRfdXNlcih0c2l6ZSwgKHVfaW50MTZfdCAqKSpkc3RwdHIpKQorCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkqc2l6ZSAtPSBvZmY7CisJCQkqZHN0cHRyICs9IHRzaXplOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUEFUX0ZST01fVVNFUjoKKwkJCXBjb21wYXQgPSAoc3RydWN0IGNvbXBhdF94dF9lbnRyeV90YXJnZXQgKil0YXJnZXQ7CisJCQlwdCA9IChzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICopKmRzdHB0cjsKKwkJCXRzaXplID0gcGNvbXBhdC0+dS51c2VyLnRhcmdldF9zaXplOworCQkJbWVtY3B5KHB0LCBwY29tcGF0LCB0c2l6ZSk7CisJCQl0c2l6ZSArPSBvZmY7CisJCQlwdC0+dS51c2VyLnRhcmdldF9zaXplID0gdHNpemU7CisJCQkqc2l6ZSArPSBvZmY7CisJCQkqZHN0cHRyICs9IHRzaXplOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUEFUX0NBTENfU0laRToKKwkJCSpzaXplICs9IG9mZjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOT1BST1RPT1BUOworCQkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4dF9jb21wYXRfdGFyZ2V0KTsKKyNlbmRpZgorCiBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqeHRfYWxsb2NfdGFibGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbzsKQEAgLTMxNiw3ICs0MTMsNyBAQAogCiAJbmV3aW5mby0+c2l6ZSA9IHNpemU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCiAJCQluZXdpbmZvLT5lbnRyaWVzW2NwdV0gPSBrbWFsbG9jX25vZGUoc2l6ZSwKIAkJCQkJCQlHRlBfS0VSTkVMLApAQCAtMzM5LDcgKzQzNiw3IEBACiB7CiAJaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChpbmZvLT5zaXplIDw9IFBBR0VfU0laRSkKIAkJCWtmcmVlKGluZm8tPmVudHJpZXNbY3B1XSk7CiAJCWVsc2UKQEAgLTM3MSw2ICs0NjgsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X3RhYmxlX3VubG9jayk7CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCit2b2lkIHh0X2NvbXBhdF9sb2NrKGludCBhZikKK3sKKwltdXRleF9sb2NrKCZ4dFthZl0uY29tcGF0X211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF9sb2NrKTsKKwordm9pZCB4dF9jb21wYXRfdW5sb2NrKGludCBhZikKK3sKKwltdXRleF91bmxvY2soJnh0W2FmXS5jb21wYXRfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X3VubG9jayk7CisjZW5kaWYKIAogc3RydWN0IHh0X3RhYmxlX2luZm8gKgogeHRfcmVwbGFjZV90YWJsZShzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLApAQCAtNDE5LDYgKzUyOSw3IEBACiAKIAkvKiBTaW1wbGlmaWVzIHJlcGxhY2VfdGFibGUgY29kZS4gKi8KIAl0YWJsZS0+cHJpdmF0ZSA9IGJvb3RzdHJhcDsKKwlyd2xvY2tfaW5pdCgmdGFibGUtPmxvY2spOwogCWlmICgheHRfcmVwbGFjZV90YWJsZSh0YWJsZSwgMCwgbmV3aW5mbywgJnJldCkpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC00MjgsNyArNTM5LDYgQEAKIAkvKiBzYXZlIG51bWJlciBvZiBpbml0aWFsIGVudHJpZXMgKi8KIAlwcml2YXRlLT5pbml0aWFsX2VudHJpZXMgPSBwcml2YXRlLT5udW1iZXI7CiAKLQlyd2xvY2tfaW5pdCgmdGFibGUtPmxvY2spOwogCWxpc3RfcHJlcGVuZCgmeHRbdGFibGUtPmFmXS50YWJsZXMsIHRhYmxlKTsKIAogCXJldCA9IDA7CkBAIC02NzEsNiArNzgxLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBOUFJPVE87IGkrKykgewogCQltdXRleF9pbml0KCZ4dFtpXS5tdXRleCk7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQltdXRleF9pbml0KCZ4dFtpXS5jb21wYXRfbXV0ZXgpOworI2VuZGlmCiAJCUlOSVRfTElTVF9IRUFEKCZ4dFtpXS50YXJnZXQpOwogCQlJTklUX0xJU1RfSEVBRCgmeHRbaV0ubWF0Y2gpOwogCQlJTklUX0xJU1RfSEVBRCgmeHRbaV0udGFibGVzKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWQ2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jCkBAIC0wLDAgKzEsMTM2IEBACisvKiBLZXJuZWwgbW9kdWxlIHRvIG1hdGNoIEVTUCBwYXJhbWV0ZXJzLiAqLworCisvKiAoQykgMTk5OS0yMDAwIFlvbiBVcmlhcnRlIDx5b25AYXN0YXJvLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9lc3AuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiWW9uIFVyaWFydGUgPHlvbkBhc3Rhcm8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInhfdGFibGVzIEVTUCBTUEkgbWF0Y2ggbW9kdWxlIik7CitNT0RVTEVfQUxJQVMoImlwdF9lc3AiKTsKK01PRFVMRV9BTElBUygiaXA2dF9lc3AiKTsKKworI2lmIDAKKyNkZWZpbmUgZHVwcmludGYoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIGR1cHJpbnRmKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisvKiBSZXR1cm5zIDEgaWYgdGhlIHNwaSBpcyBtYXRjaGVkIGJ5IHRoZSByYW5nZSwgMCBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgaW50IGludmVydCkKK3sKKwlpbnQgciA9IDA7CisJZHVwcmludGYoImVzcCBzcGlfbWF0Y2g6JWMgMHgleCA8PSAweCV4IDw9IDB4JXgiLCBpbnZlcnQgPyAnIScgOiAnICcsCisJCSBtaW4sIHNwaSwgbWF4KTsKKwlyID0gKHNwaSA+PSBtaW4gJiYgc3BpIDw9IG1heCkgXiBpbnZlcnQ7CisJZHVwcmludGYoIiByZXN1bHQgJXNcbiIsIHIgPyAiUEFTUyIgOiAiRkFJTEVEIik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQKK21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKKyAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKKyAgICAgIGludCBvZmZzZXQsCisgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKyAgICAgIGludCAqaG90ZHJvcCkKK3sKKwlzdHJ1Y3QgaXBfZXNwX2hkciBfZXNwLCAqZWg7CisJY29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IG1hdGNoaW5mbzsKKworCS8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovCisJaWYgKG9mZnNldCkKKwkJcmV0dXJuIDA7CisKKwllaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvZmYsIHNpemVvZihfZXNwKSwgJl9lc3ApOworCWlmIChlaCA9PSBOVUxMKSB7CisJCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCisJCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KKwkJICovCisJCWR1cHJpbnRmKCJEcm9wcGluZyBldmlsIEVTUCB0aW55Z3JhbS5cbiIpOworCQkqaG90ZHJvcCA9IDE7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBzcGlfbWF0Y2goZXNwaW5mby0+c3Bpc1swXSwgZXNwaW5mby0+c3Bpc1sxXSwgbnRvaGwoZWgtPnNwaSksCisJCQkgISEoZXNwaW5mby0+aW52ZmxhZ3MgJiBYVF9FU1BfSU5WX1NQSSkpOworfQorCisvKiBDYWxsZWQgd2hlbiB1c2VyIHRyaWVzIHRvIGluc2VydCBhbiBlbnRyeSBvZiB0aGlzIHR5cGUuICovCitzdGF0aWMgaW50CitjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKKwkgICBjb25zdCB2b2lkICppcF92b2lkLAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisJICAgdm9pZCAqbWF0Y2hpbmZvLAorCSAgIHVuc2lnbmVkIGludCBtYXRjaGluZm9zaXplLAorCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJY29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IG1hdGNoaW5mbzsKKworCWlmIChlc3BpbmZvLT5pbnZmbGFncyAmIH5YVF9FU1BfSU5WX01BU0spIHsKKwkJZHVwcmludGYoInh0X2VzcDogdW5rbm93biBmbGFncyAlWFxuIiwgZXNwaW5mby0+aW52ZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBlc3BfbWF0Y2ggPSB7CisJLm5hbWUJCT0gImVzcCIsCisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5wcm90bwkJPSBJUFBST1RPX0VTUCwKKwkubWF0Y2gJCT0gJm1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2VzcCksCisJLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIGVzcDZfbWF0Y2ggPSB7CisJLm5hbWUJCT0gImVzcCIsCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkucHJvdG8JCT0gSVBQUk9UT19FU1AsCisJLm1hdGNoCQk9ICZtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9lc3ApLAorCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfZXNwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZlc3BfbWF0Y2gpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmZXNwNl9tYXRjaCk7CisJaWYgKHJldCkKKwkJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmZXNwX21hdGNoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4dF9lc3BfY2xlYW51cCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmVzcF9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmZXNwNl9tYXRjaCk7Cit9CisKK21vZHVsZV9pbml0KHh0X2VzcF9pbml0KTsKK21vZHVsZV9leGl0KHh0X2VzcF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NmNkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCkBAIC0wLDAgKzEsMzE0IEBACisvKiBLZXJuZWwgbW9kdWxlIHRvIG1hdGNoIG9uZSBvZiBhIGxpc3Qgb2YgVENQL1VEUCBwb3J0czogcG9ydHMgYXJlIGluCisgICB0aGUgc2FtZSBwbGFjZSBzbyB3ZSBjYW4gdHJlYXQgdGhlbSBhcyBlcXVhbC4gKi8KKworLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInhfdGFibGVzIG11bHRpcGxlIHBvcnQgbWF0Y2ggbW9kdWxlIik7CitNT0RVTEVfQUxJQVMoImlwdF9tdWx0aXBvcnQiKTsKK01PRFVMRV9BTElBUygiaXA2dF9tdWx0aXBvcnQiKTsKKworI2lmIDAKKyNkZWZpbmUgZHVwcmludGYoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIGR1cHJpbnRmKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisvKiBSZXR1cm5zIDEgaWYgdGhlIHBvcnQgaXMgbWF0Y2hlZCBieSB0aGUgdGVzdCwgMCBvdGhlcndpc2UuICovCitzdGF0aWMgaW5saW5lIGludAorcG9ydHNfbWF0Y2goY29uc3QgdV9pbnQxNl90ICpwb3J0bGlzdCwgZW51bSB4dF9tdWx0aXBvcnRfZmxhZ3MgZmxhZ3MsCisJICAgIHVfaW50OF90IGNvdW50LCB1X2ludDE2X3Qgc3JjLCB1X2ludDE2X3QgZHN0KQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChmbGFncyAhPSBYVF9NVUxUSVBPUlRfREVTVElOQVRJT04gJiYgcG9ydGxpc3RbaV0gPT0gc3JjKQorCQkJcmV0dXJuIDE7CisKKwkJaWYgKGZsYWdzICE9IFhUX01VTFRJUE9SVF9TT1VSQ0UgJiYgcG9ydGxpc3RbaV0gPT0gZHN0KQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgMSBpZiB0aGUgcG9ydCBpcyBtYXRjaGVkIGJ5IHRoZSB0ZXN0LCAwIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50Citwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbywKKwkgICAgICAgdV9pbnQxNl90IHNyYywgdV9pbnQxNl90IGRzdCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1X2ludDE2X3QgcywgZTsKKworCWZvciAoaSA9IDA7IGkgPCBtaW5mby0+Y291bnQ7IGkrKykgeworCQlzID0gbWluZm8tPnBvcnRzW2ldOworCisJCWlmIChtaW5mby0+cGZsYWdzW2ldKSB7CisJCQkvKiByYW5nZSBwb3J0IG1hdGNoaW5nICovCisJCQllID0gbWluZm8tPnBvcnRzWysraV07CisJCQlkdXByaW50Zigic3JjIG9yIGRzdCBtYXRjaGVzIHdpdGggJWQtJWQ/XG4iLCBzLCBlKTsKKworCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBYVF9NVUxUSVBPUlRfU09VUkNFCisJCQkgICAgJiYgc3JjID49IHMgJiYgc3JjIDw9IGUpCisJCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OworCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBYVF9NVUxUSVBPUlRfREVTVElOQVRJT04KKwkJCSAgICAmJiBkc3QgPj0gcyAmJiBkc3QgPD0gZSkKKwkJCQlyZXR1cm4gMSBeIG1pbmZvLT5pbnZlcnQ7CisJCQlpZiAobWluZm8tPmZsYWdzID09IFhUX01VTFRJUE9SVF9FSVRIRVIKKwkJCSAgICAmJiAoKGRzdCA+PSBzICYmIGRzdCA8PSBlKQorCQkJCXx8IChzcmMgPj0gcyAmJiBzcmMgPD0gZSkpKQorCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKKwkJfSBlbHNlIHsKKwkJCS8qIGV4YWN0IHBvcnQgbWF0Y2hpbmcgKi8KKwkJCWR1cHJpbnRmKCJzcmMgb3IgZHN0IG1hdGNoZXMgd2l0aCAlZD9cbiIsIHMpOworCisJCQlpZiAobWluZm8tPmZsYWdzID09IFhUX01VTFRJUE9SVF9TT1VSQ0UKKwkJCSAgICAmJiBzcmMgPT0gcykKKwkJCQlyZXR1cm4gMSBeIG1pbmZvLT5pbnZlcnQ7CisJCQlpZiAobWluZm8tPmZsYWdzID09IFhUX01VTFRJUE9SVF9ERVNUSU5BVElPTgorCQkJICAgICYmIGRzdCA9PSBzKQorCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKKwkJCWlmIChtaW5mby0+ZmxhZ3MgPT0gWFRfTVVMVElQT1JUX0VJVEhFUgorCQkJICAgICYmIChzcmMgPT0gcyB8fCBkc3QgPT0gcykpCisJCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OworCQl9CisJfQorCisgCXJldHVybiBtaW5mby0+aW52ZXJ0OworfQorCitzdGF0aWMgaW50CittYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCisgICAgICBpbnQgb2Zmc2V0LAorICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCisgICAgICBpbnQgKmhvdGRyb3ApCit7CisJdTE2IF9wb3J0c1syXSwgKnBwdHI7CisJY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydCAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOworCisJaWYgKG9mZnNldCkKKwkJcmV0dXJuIDA7CisKKwlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CisJaWYgKHBwdHIgPT0gTlVMTCkgeworCQkvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQorCQkgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCisJCSAqLworCQlkdXByaW50ZigieHRfbXVsdGlwb3J0OiBEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxuIik7CisJCSpob3Rkcm9wID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHBvcnRzX21hdGNoKG11bHRpaW5mby0+cG9ydHMsCisJCQkgICBtdWx0aWluZm8tPmZsYWdzLCBtdWx0aWluZm8tPmNvdW50LAorCQkJICAgbnRvaHMocHB0clswXSksIG50b2hzKHBwdHJbMV0pKTsKK30KKworc3RhdGljIGludAorbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCSBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAorCSBjb25zdCB2b2lkICptYXRjaGluZm8sCisJIGludCBvZmZzZXQsCisJIHVuc2lnbmVkIGludCBwcm90b2ZmLAorCSBpbnQgKmhvdGRyb3ApCit7CisJdTE2IF9wb3J0c1syXSwgKnBwdHI7CisJY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOworCisJaWYgKG9mZnNldCkKKwkJcmV0dXJuIDA7CisKKwlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CisJaWYgKHBwdHIgPT0gTlVMTCkgeworCQkvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQorCQkgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCisJCSAqLworCQlkdXByaW50ZigieHRfbXVsdGlwb3J0OiBEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxuIik7CisJCSpob3Rkcm9wID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHBvcnRzX21hdGNoX3YxKG11bHRpaW5mbywgbnRvaHMocHB0clswXSksIG50b2hzKHBwdHJbMV0pKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2NoZWNrKHVfaW50MTZfdCBwcm90bywKKyAgICAgIHVfaW50OF90IGlwX2ludmZsYWdzLAorICAgICAgdV9pbnQ4X3QgbWF0Y2hfZmxhZ3MsCisgICAgICB1X2ludDhfdCBjb3VudCkKK3sKKwkvKiBNdXN0IHNwZWNpZnkgcHJvdG8gPT0gVENQL1VEUCwgbm8gdW5rbm93biBmbGFncyBvciBiYWQgY291bnQgKi8KKwlyZXR1cm4gKHByb3RvID09IElQUFJPVE9fVENQIHx8IHByb3RvID09IElQUFJPVE9fVURQKQorCQkmJiAhKGlwX2ludmZsYWdzICYgWFRfSU5WX1BST1RPKQorCQkmJiAobWF0Y2hfZmxhZ3MgPT0gWFRfTVVMVElQT1JUX1NPVVJDRQorCQkgICAgfHwgbWF0Y2hfZmxhZ3MgPT0gWFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCisJCSAgICB8fCBtYXRjaF9mbGFncyA9PSBYVF9NVUxUSVBPUlRfRUlUSEVSKQorCQkmJiBjb3VudCA8PSBYVF9NVUxUSV9QT1JUUzsKK30KKworLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLworc3RhdGljIGludAorY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJICAgY29uc3Qgdm9pZCAqaW5mbywKKwkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAorCSAgIHZvaWQgKm1hdGNoaW5mbywKKwkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAorCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJY29uc3Qgc3RydWN0IGlwdF9pcCAqaXAgPSBpbmZvOworCWNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnQgKm11bHRpaW5mbyA9IG1hdGNoaW5mbzsKKworCXJldHVybiBjaGVjayhpcC0+cHJvdG8sIGlwLT5pbnZmbGFncywgbXVsdGlpbmZvLT5mbGFncywKKwkJICAgICBtdWx0aWluZm8tPmNvdW50KTsKK30KKworc3RhdGljIGludAorY2hlY2tlbnRyeV92MShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJICAgICAgY29uc3Qgdm9pZCAqaW5mbywKKwkgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAorCSAgICAgIHZvaWQgKm1hdGNoaW5mbywKKwkgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAorCSAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJY29uc3Qgc3RydWN0IGlwdF9pcCAqaXAgPSBpbmZvOworCWNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm11bHRpaW5mbyA9IG1hdGNoaW5mbzsKKworCXJldHVybiBjaGVjayhpcC0+cHJvdG8sIGlwLT5pbnZmbGFncywgbXVsdGlpbmZvLT5mbGFncywKKwkJICAgICBtdWx0aWluZm8tPmNvdW50KTsKK30KKworc3RhdGljIGludAorY2hlY2tlbnRyeTYoY29uc3QgY2hhciAqdGFibGVuYW1lLAorCSAgICBjb25zdCB2b2lkICppbmZvLAorCSAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAorCSAgICB2b2lkICptYXRjaGluZm8sCisJICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCisJICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJY29uc3Qgc3RydWN0IGlwNnRfaXA2ICppcCA9IGluZm87CisJY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydCAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOworCisJcmV0dXJuIGNoZWNrKGlwLT5wcm90bywgaXAtPmludmZsYWdzLCBtdWx0aWluZm8tPmZsYWdzLAorCQkgICAgIG11bHRpaW5mby0+Y291bnQpOworfQorCitzdGF0aWMgaW50CitjaGVja2VudHJ5Nl92MShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJICAgICAgIGNvbnN0IHZvaWQgKmluZm8sCisJICAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisJICAgICAgIHZvaWQgKm1hdGNoaW5mbywKKwkgICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKKwkgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKK3sKKwljb25zdCBzdHJ1Y3QgaXA2dF9pcDYgKmlwID0gaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptdWx0aWluZm8gPSBtYXRjaGluZm87CisKKwlyZXR1cm4gY2hlY2soaXAtPnByb3RvLCBpcC0+aW52ZmxhZ3MsIG11bHRpaW5mby0+ZmxhZ3MsCisJCSAgICAgbXVsdGlpbmZvLT5jb3VudCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggbXVsdGlwb3J0X21hdGNoID0geworCS5uYW1lCQk9ICJtdWx0aXBvcnQiLAorCS5yZXZpc2lvbgk9IDAsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfbXVsdGlwb3J0KSwKKwkubWF0Y2gJCT0gJm1hdGNoLAorCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggbXVsdGlwb3J0X21hdGNoX3YxID0geworCS5uYW1lCQk9ICJtdWx0aXBvcnQiLAorCS5yZXZpc2lvbgk9IDEsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxKSwKKwkubWF0Y2gJCT0gJm1hdGNoX3YxLAorCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnlfdjEsCisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggbXVsdGlwb3J0Nl9tYXRjaCA9IHsKKwkubmFtZQkJPSAibXVsdGlwb3J0IiwKKwkucmV2aXNpb24JPSAwLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X211bHRpcG9ydCksCisJLm1hdGNoCQk9ICZtYXRjaCwKKwkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5NiwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggbXVsdGlwb3J0Nl9tYXRjaF92MSA9IHsKKwkubmFtZQkJPSAibXVsdGlwb3J0IiwKKwkucmV2aXNpb24JPSAxLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X211bHRpcG9ydF92MSksCisJLm1hdGNoCQk9ICZtYXRjaF92MSwKKwkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5Nl92MSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHh0X211bHRpcG9ydF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaF92MSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5yZWdfbXVsdGlfdjA7CisKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmbXVsdGlwb3J0Nl9tYXRjaCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5yZWdfbXVsdGlfdjE7CisKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmbXVsdGlwb3J0Nl9tYXRjaF92MSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5yZWdfbXVsdGk2X3YwOworCisJcmV0dXJuIHJldDsKKworb3V0X3VucmVnX211bHRpNl92MDoKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnQ2X21hdGNoKTsKK291dF91bnJlZ19tdWx0aV92MToKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2hfdjEpOworb3V0X3VucmVnX211bHRpX3YwOgorCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X211bHRpcG9ydF9maW5pKHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmbXVsdGlwb3J0X21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2hfdjEpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydDZfbWF0Y2gpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydDZfbWF0Y2hfdjEpOworfQorCittb2R1bGVfaW5pdCh4dF9tdWx0aXBvcnRfaW5pdCk7Cittb2R1bGVfZXhpdCh4dF9tdWx0aXBvcnRfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3BvbGljeS5jIGIvbmV0L25ldGZpbHRlci94dF9wb2xpY3kuYwppbmRleCAxMDk5Y2IwLi5hM2FhNjJmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3BvbGljeS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcG9saWN5LmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkJCXJldHVybiAwOwogCQllID0gJmluZm8tPnBvbFtwb3NdOwogCi0JCWlmIChtYXRjaF94ZnJtX3N0YXRlKHNwLT54W2ldLnh2ZWMsIGUsIGZhbWlseSkpIHsKKwkJaWYgKG1hdGNoX3hmcm1fc3RhdGUoc3AtPnh2ZWNbaV0sIGUsIGZhbWlseSkpIHsKIAkJCWlmICghc3RyaWN0KQogCQkJCXJldHVybiAxOwogCQl9IGVsc2UgaWYgKHN0cmljdCkKZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCAyYTIzM2ZmLi4zODYyZTczIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC01NiwxMiArNTYsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9zY20uaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogCi0jZGVmaW5lIE5wcmludGsoYS4uLikKICNkZWZpbmUgTkxHUlBTWih4KQkoQUxJR04oeCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCkgLyA4KQogCiBzdHJ1Y3QgbmV0bGlua19zb2NrIHsKQEAgLTExNTcsNiArMTE1Nyw3IEBACiAJTkVUTElOS19DQihza2IpLmRzdF9waWQgPSBkc3RfcGlkOwogCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXAgPSBkc3RfZ3JvdXA7CiAJTkVUTElOS19DQihza2IpLmxvZ2ludWlkID0gYXVkaXRfZ2V0X2xvZ2ludWlkKGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpOworCXNlbGludXhfZ2V0X3Rhc2tfc2lkKGN1cnJlbnQsICYoTkVUTElOS19DQihza2IpLnNpZCkpOwogCW1lbWNweShORVRMSU5LX0NSRURTKHNrYiksICZzaW9jYi0+c2NtLT5jcmVkcywgc2l6ZW9mKHN0cnVjdCB1Y3JlZCkpOwogCiAJLyogV2hhdCBjYW4gSSBkbz8gTmV0bGluayBpcyBhc3luY2hyb25vdXMsIHNvIHRoYXQKZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vYWZfbmV0cm9tLmMgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCmluZGV4IGQ0NDk4MWYuLjM2NjljYjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKKysrIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwpAQCAtNDI1LDExICs0MjUsMTYgQEAKIAogCW5yX2luaXRfdGltZXJzKHNrKTsKIAotCW5yLT50MSAgICAgPSBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF90aW1lb3V0OwotCW5yLT50MiAgICAgPSBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9hY2tub3dsZWRnZV9kZWxheTsKLQluci0+bjIgICAgID0gc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfbWF4aW11bV90cmllczsKLQluci0+dDQgICAgID0gc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfYnVzeV9kZWxheTsKLQluci0+aWRsZSAgID0gc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfbm9fYWN0aXZpdHlfdGltZW91dDsKKwluci0+dDEgICAgID0KKwkJbXNlY3NfdG9famlmZmllcyhzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF90aW1lb3V0KTsKKwluci0+dDIgICAgID0KKwkJbXNlY3NfdG9famlmZmllcyhzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9hY2tub3dsZWRnZV9kZWxheSk7CisJbnItPm4yICAgICA9CisJCW1zZWNzX3RvX2ppZmZpZXMoc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfbWF4aW11bV90cmllcyk7CisJbnItPnQ0ICAgICA9CisJCW1zZWNzX3RvX2ppZmZpZXMoc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfYnVzeV9kZWxheSk7CisJbnItPmlkbGUgICA9CisJCW1zZWNzX3RvX2ppZmZpZXMoc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfbm9fYWN0aXZpdHlfdGltZW91dCk7CiAJbnItPndpbmRvdyA9IHN5c2N0bF9uZXRyb21fdHJhbnNwb3J0X3JlcXVlc3RlZF93aW5kb3dfc2l6ZTsKIAogCW5yLT5icHFleHQgPSAxOwpAQCAtMTM2NSw4ICsxMzcwLDYgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2X25yOwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPICJHNEtMWCBORVQvUk9NIGZvciBMaW51eC4gVmVyc2lvbiAwLjcgZm9yIEFYMjUuMDM3IExpbnV4IDIuNFxuIjsKLQogc3RhdGljIGludCBfX2luaXQgbnJfcHJvdG9faW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMTQxNCw3ICsxNDE3LDYgQEAKIAl9CiAJCQogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbnJfZGV2X25vdGlmaWVyKTsKLQlwcmludGsoYmFubmVyKTsKIAogCWF4MjVfcHJvdG9jb2xfcmVnaXN0ZXIoQVgyNV9QX05FVFJPTSwgbnJfcm91dGVfZnJhbWUpOwogCWF4MjVfbGlua2ZhaWxfcmVnaXN0ZXIobnJfbGlua19mYWlsZWQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9ucl9kZXYuYyBiL25ldC9uZXRyb20vbnJfZGV2LmMKaW5kZXggNTA5YWZkZC4uNjIxZTU1OCAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9ucl9kZXYuYworKysgYi9uZXQvbmV0cm9tL25yX2Rldi5jCkBAIC0xODUsNyArMTg1LDYgQEAKIAogdm9pZCBucl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlkZXYtPm10dQkJPSBOUl9NQVhfUEFDS0VUX1NJWkU7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBucl94bWl0OwogCWRldi0+b3BlbgkJPSBucl9vcGVuOwpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2UvYWZfcm9zZS5jIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCmluZGV4IGVhNjUzOTYuLjU1NTY0ZWYgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL2FmX3Jvc2UuYworKysgYi9uZXQvcm9zZS9hZl9yb3NlLmMKQEAgLTUxOCwxMSArNTE4LDExIEBACiAJaW5pdF90aW1lcigmcm9zZS0+dGltZXIpOwogCWluaXRfdGltZXIoJnJvc2UtPmlkbGV0aW1lcik7CiAKLQlyb3NlLT50MSAgID0gc3lzY3RsX3Jvc2VfY2FsbF9yZXF1ZXN0X3RpbWVvdXQ7Ci0Jcm9zZS0+dDIgICA9IHN5c2N0bF9yb3NlX3Jlc2V0X3JlcXVlc3RfdGltZW91dDsKLQlyb3NlLT50MyAgID0gc3lzY3RsX3Jvc2VfY2xlYXJfcmVxdWVzdF90aW1lb3V0OwotCXJvc2UtPmhiICAgPSBzeXNjdGxfcm9zZV9hY2tfaG9sZF9iYWNrX3RpbWVvdXQ7Ci0Jcm9zZS0+aWRsZSA9IHN5c2N0bF9yb3NlX25vX2FjdGl2aXR5X3RpbWVvdXQ7CisJcm9zZS0+dDEgICA9IG1zZWNzX3RvX2ppZmZpZXMoc3lzY3RsX3Jvc2VfY2FsbF9yZXF1ZXN0X3RpbWVvdXQpOworCXJvc2UtPnQyICAgPSBtc2Vjc190b19qaWZmaWVzKHN5c2N0bF9yb3NlX3Jlc2V0X3JlcXVlc3RfdGltZW91dCk7CisJcm9zZS0+dDMgICA9IG1zZWNzX3RvX2ppZmZpZXMoc3lzY3RsX3Jvc2VfY2xlYXJfcmVxdWVzdF90aW1lb3V0KTsKKwlyb3NlLT5oYiAgID0gbXNlY3NfdG9famlmZmllcyhzeXNjdGxfcm9zZV9hY2tfaG9sZF9iYWNrX3RpbWVvdXQpOworCXJvc2UtPmlkbGUgPSBtc2Vjc190b19qaWZmaWVzKHN5c2N0bF9yb3NlX25vX2FjdGl2aXR5X3RpbWVvdXQpOwogCiAJcm9zZS0+c3RhdGUgPSBST1NFX1NUQVRFXzA7CiAKQEAgLTE0NjksOCArMTQ2OSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldl9yb3NlOwogCi1zdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSA9IEtFUk5fSU5GTyAiRjZGQkIvRzRLTFggUk9TRSBmb3IgTGludXguIFZlcnNpb24gMC42MiBmb3IgQVgyNS4wMzcgTGludXggMi40XG4iOwotCiBzdGF0aWMgaW50IF9faW5pdCByb3NlX3Byb3RvX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTE1MTksNyArMTUxNyw2IEBACiAKIAlzb2NrX3JlZ2lzdGVyKCZyb3NlX2ZhbWlseV9vcHMpOwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcm9zZV9kZXZfbm90aWZpZXIpOwotCXByaW50ayhiYW5uZXIpOwogCiAJYXgyNV9wcm90b2NvbF9yZWdpc3RlcihBWDI1X1BfUk9TRSwgcm9zZV9yb3V0ZV9mcmFtZSk7CiAJYXgyNV9saW5rZmFpbF9yZWdpc3Rlcihyb3NlX2xpbmtfZmFpbGVkKTsKZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2VfZGV2LmMgYi9uZXQvcm9zZS9yb3NlX2Rldi5jCmluZGV4IGQyOTdhZjcuLjJhMWJmOGUgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2VfZGV2LmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9kZXYuYwpAQCAtMTM1LDcgKzEzNSw2IEBACiAKIHZvaWQgcm9zZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlkZXYtPm10dQkJPSBST1NFX01BWF9QQUNLRVRfU0laRSAtIDI7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSByb3NlX3htaXQ7CiAJZGV2LT5vcGVuCQk9IHJvc2Vfb3BlbjsKZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2VfbGluay5jIGIvbmV0L3Jvc2Uvcm9zZV9saW5rLmMKaW5kZXggMDllOWU5ZC4uYmQ4NmE2MyAxMDA2NDQKLS0tIGEvbmV0L3Jvc2Uvcm9zZV9saW5rLmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9saW5rLmMKQEAgLTQwLDcgKzQwLDggQEAKIAogCW5laWdoLT5mdGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZyluZWlnaDsKIAluZWlnaC0+ZnRpbWVyLmZ1bmN0aW9uID0gJnJvc2VfZnRpbWVyX2V4cGlyeTsKLQluZWlnaC0+ZnRpbWVyLmV4cGlyZXMgID0gamlmZmllcyArIHN5c2N0bF9yb3NlX2xpbmtfZmFpbF90aW1lb3V0OworCW5laWdoLT5mdGltZXIuZXhwaXJlcyAgPQorCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhzeXNjdGxfcm9zZV9saW5rX2ZhaWxfdGltZW91dCk7CiAKIAlhZGRfdGltZXIoJm5laWdoLT5mdGltZXIpOwogfQpAQCAtNTEsNyArNTIsOCBAQAogCiAJbmVpZ2gtPnQwdGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZyluZWlnaDsKIAluZWlnaC0+dDB0aW1lci5mdW5jdGlvbiA9ICZyb3NlX3QwdGltZXJfZXhwaXJ5OwotCW5laWdoLT50MHRpbWVyLmV4cGlyZXMgID0gamlmZmllcyArIHN5c2N0bF9yb3NlX3Jlc3RhcnRfcmVxdWVzdF90aW1lb3V0OworCW5laWdoLT50MHRpbWVyLmV4cGlyZXMgID0KKwkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoc3lzY3RsX3Jvc2VfcmVzdGFydF9yZXF1ZXN0X3RpbWVvdXQpOwogCiAJYWRkX3RpbWVyKCZuZWlnaC0+dDB0aW1lcik7CiB9CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9yb3NlX3JvdXRlLmMgYi9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKaW5kZXggODYzMWI2NS4uYTIyNTQyZiAxMDA2NDQKLS0tIGEvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCisrKyBiL25ldC9yb3NlL3Jvc2Vfcm91dGUuYwpAQCAtNDgsOCArNDgsNiBAQAogCiBzdHJ1Y3Qgcm9zZV9uZWlnaCAqcm9zZV9sb29wYmFja19uZWlnaDsKIAotc3RhdGljIHZvaWQgcm9zZV9yZW1vdmVfbmVpZ2goc3RydWN0IHJvc2VfbmVpZ2ggKik7Ci0KIC8qCiAgKglBZGQgYSBuZXcgcm91dGUgdG8gYSBub2RlLCBhbmQgaW4gdGhlIHByb2Nlc3MgYWRkIHRoZSBub2RlIGFuZCB0aGUKICAqCW5laWdoYm91ciBpZiBpdCBpcyBuZXcuCkBAIC0yMzUsMTEgKzIzMyw4IEBACiAKIAlza2JfcXVldWVfcHVyZ2UoJnJvc2VfbmVpZ2gtPnF1ZXVlKTsKIAotCXNwaW5fbG9ja19iaCgmcm9zZV9uZWlnaF9saXN0X2xvY2spOwotCiAJaWYgKChzID0gcm9zZV9uZWlnaF9saXN0KSA9PSByb3NlX25laWdoKSB7CiAJCXJvc2VfbmVpZ2hfbGlzdCA9IHJvc2VfbmVpZ2gtPm5leHQ7Ci0JCXNwaW5fdW5sb2NrX2JoKCZyb3NlX25laWdoX2xpc3RfbG9jayk7CiAJCWtmcmVlKHJvc2VfbmVpZ2gtPmRpZ2lwZWF0KTsKIAkJa2ZyZWUocm9zZV9uZWlnaCk7CiAJCXJldHVybjsKQEAgLTI0OCw3ICsyNDMsNiBAQAogCXdoaWxlIChzICE9IE5VTEwgJiYgcy0+bmV4dCAhPSBOVUxMKSB7CiAJCWlmIChzLT5uZXh0ID09IHJvc2VfbmVpZ2gpIHsKIAkJCXMtPm5leHQgPSByb3NlX25laWdoLT5uZXh0OwotCQkJc3Bpbl91bmxvY2tfYmgoJnJvc2VfbmVpZ2hfbGlzdF9sb2NrKTsKIAkJCWtmcmVlKHJvc2VfbmVpZ2gtPmRpZ2lwZWF0KTsKIAkJCWtmcmVlKHJvc2VfbmVpZ2gpOwogCQkJcmV0dXJuOwpAQCAtMjU2LDcgKzI1MCw2IEBACiAKIAkJcyA9IHMtPm5leHQ7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZyb3NlX25laWdoX2xpc3RfbG9jayk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lwdC5jIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwppbmRleCA2MDU2ZDIwLi4zNzY0MGM2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lwdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKQEAgLTY5LDYgKzY5LDExIEBACiAJRFBSSU5USygiaXB0X2luaXRfdGFyZ2V0OiBmb3VuZCAlc1xuIiwgdGFyZ2V0LT5uYW1lKTsKIAl0LT51Lmtlcm5lbC50YXJnZXQgPSB0YXJnZXQ7CiAKKwlyZXQgPSB4dF9jaGVja190YXJnZXQodGFyZ2V0LCBBRl9JTkVULCB0LT51LnRhcmdldF9zaXplIC0gc2l6ZW9mKCp0KSwKKwkJCSAgICAgIHRhYmxlLCBob29rLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJaWYgKHQtPnUua2VybmVsLnRhcmdldC0+Y2hlY2tlbnRyeQogCSAgICAmJiAhdC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5KHRhYmxlLCBOVUxMLAogCQkgICAgCQkJICAgICAgIHQtPnUua2VybmVsLnRhcmdldCwgdC0+ZGF0YSwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCmluZGV4IGZhODc3ZjguLjI0YzM0OGYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwpAQCAtNjYsNyArNjYsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCi1zdGF0aWMgaW50IHRjZl9nZW5lcmljX3dhbGtlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCitzdGF0aWMgaW50IHRjZl9hY3RfcG9saWNlX3dhbGtlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgc3RydWN0IHRjX2FjdGlvbiAqYSkKIHsKIAlzdHJ1Y3QgdGNmX3BvbGljZSAqcDsKQEAgLTExMyw3ICsxMTMsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotdGNmX2hhc2hfc2VhcmNoKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHUzMiBpbmRleCkKK3RjZl9hY3RfcG9saWNlX2hhc2hfc2VhcmNoKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHUzMiBpbmRleCkKIHsKIAlzdHJ1Y3QgdGNmX3BvbGljZSAqcCA9IHRjZl9wb2xpY2VfbG9va3VwKGluZGV4KTsKIApAQCAtMzg3LDkgKzM4Nyw5IEBACiAJLmFjdAkJPQl0Y2ZfYWN0X3BvbGljZSwKIAkuZHVtcAkJPQl0Y2ZfYWN0X3BvbGljZV9kdW1wLAogCS5jbGVhbnVwCT0JdGNmX2FjdF9wb2xpY2VfY2xlYW51cCwKLQkubG9va3VwCQk9CXRjZl9oYXNoX3NlYXJjaCwKKwkubG9va3VwCQk9CXRjZl9hY3RfcG9saWNlX2hhc2hfc2VhcmNoLAogCS5pbml0CQk9CXRjZl9hY3RfcG9saWNlX2xvY2F0ZSwKLQkud2FsawkJPQl0Y2ZfZ2VuZXJpY193YWxrZXIKKwkud2FsawkJPQl0Y2ZfYWN0X3BvbGljZV93YWxrZXIKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCmluZGV4IDMxZWI4MzcuLjEzOGVhOTIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCkBAIC0xOTMsOCArMTkzLDEwIEBACiAJCSAgICBuZXRpZl9ydW5uaW5nKGRldikgJiYKIAkJICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJgotCQkJICAgIChqaWZmaWVzIC0gZGV2LT50cmFuc19zdGFydCkgPiBkZXYtPndhdGNoZG9nX3RpbWVvKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiTkVUREVWIFdBVENIRE9HOiAlczogdHJhbnNtaXQgdGltZWQgb3V0XG4iLCBkZXYtPm5hbWUpOworCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2LT50cmFuc19zdGFydCArIGRldi0+d2F0Y2hkb2dfdGltZW8pKSB7CisKKwkJCQlwcmludGsoS0VSTl9JTkZPICJORVRERVYgV0FUQ0hET0c6ICVzOiB0cmFuc21pdCB0aW1lZCBvdXRcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQkJZGV2LT50eF90aW1lb3V0KGRldik7CiAJCQl9CiAJCQlpZiAoIW1vZF90aW1lcigmZGV2LT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIGRldi0+d2F0Y2hkb2dfdGltZW8pKQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwppbmRleCA5MTEzMmY2Li5mMWM3YmQyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuYworKysgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwpAQCAtOTc0LDEwICs5NzQsMTAgQEAKIAlkbyB7CiAJCWxldmVsID0gMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2wtPmNoaWxkcmVuLCBzaWJsaW5ncykgewotCQkJaWYgKHAtPmxldmVsID4gbGV2ZWwpCi0JCQkJbGV2ZWwgPSBwLT5sZXZlbDsKKwkJCWlmIChwLT5sZXZlbCA+PSBsZXZlbCkKKwkJCQlsZXZlbCA9IHAtPmxldmVsICsgMTsKIAkJfQotCQljbC0+bGV2ZWwgPSBsZXZlbCArIDE7CisJCWNsLT5sZXZlbCA9IGxldmVsOwogCX0gd2hpbGUgKChjbCA9IGNsLT5jbF9wYXJlbnQpICE9IE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKaW5kZXggNzIyOGQzMC4uNWE0YTRkMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJaWYgKGNvdW50ID09IDApIHsKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiBORVRfWE1JVF9EUk9QOworCQlyZXR1cm4gTkVUX1hNSVRfQllQQVNTOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnB1dC5jIGIvbmV0L3NjdHAvaW5wdXQuYwppbmRleCBkMTE3ZWJjLi4xNjYyZjljIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnB1dC5jCisrKyBiL25ldC9zY3RwL2lucHV0LmMKQEAgLTczLDYgKzczLDggQEAKIAkJCQkJY29uc3QgdW5pb24gc2N0cF9hZGRyICpwZWVyLAogCQkJCQlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKipwdCk7CiAKK3N0YXRpYyB2b2lkIHNjdHBfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwogCiAvKiBDYWxjdWxhdGUgdGhlIFNDVFAgY2hlY2tzdW0gb2YgYW4gU0NUUCBwYWNrZXQuICAqLwogc3RhdGljIGlubGluZSBpbnQgc2N0cF9yY3ZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE4Niw3ICsxODgsNiBAQAogCSAqLwogCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmIChzay0+c2tfYm91bmRfZGV2X2lmICE9IGFmLT5za2JfaWlmKHNrYikpKQogCXsKLQkJc29ja19wdXQoc2spOwogCQlpZiAoYXNvYykgewogCQkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CiAJCQlhc29jID0gTlVMTDsKQEAgLTE5Nyw3ICsxOTgsNiBAQAogCQlzayA9IHNjdHBfZ2V0X2N0bF9zb2NrKCk7CiAJCWVwID0gc2N0cF9zayhzayktPmVwOwogCQlzY3RwX2VuZHBvaW50X2hvbGQoZXApOwotCQlzb2NrX2hvbGQoc2spOwogCQlyY3ZyID0gJmVwLT5iYXNlOwogCX0KIApAQCAtMjUzLDI1ICsyNTMsMTggQEAKIAkgKi8KIAlzY3RwX2JoX2xvY2tfc29jayhzayk7CiAKLQkvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBhc3NvY2lhdGlvbiBjb3VsZCBoYXZlIG1vdmVkIHRvIGEgZGlmZmVyZW50Ci0JICogc29ja2V0IGlmIGl0IGlzIHBlZWxlZCBvZmYuIElmIHNvLCB1cGRhdGUgdGhlIHNrLgotCSAqLyAKLQlpZiAoc2sgIT0gcmN2ci0+c2spIHsKLQkJc2N0cF9iaF9sb2NrX3NvY2socmN2ci0+c2spOwotCQlzY3RwX2JoX3VubG9ja19zb2NrKHNrKTsKLQkJc2sgPSByY3ZyLT5zazsKLQl9Ci0KIAlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkKLQkJc2tfYWRkX2JhY2tsb2coc2ssIHNrYik7CisJCXNjdHBfYWRkX2JhY2tsb2coc2ssIHNrYik7CiAJZWxzZQotCQlzY3RwX2JhY2tsb2dfcmN2KHNrLCBza2IpOworCQlzY3RwX2lucV9wdXNoKCZjaHVuay0+cmN2ci0+aW5xdWV1ZSwgY2h1bmspOwogCi0JLyogUmVsZWFzZSB0aGUgc29jayBhbmQgdGhlIHNvY2sgcmVmIHdlIHRvb2sgaW4gdGhlIGxvb2t1cCBjYWxscy4KLQkgKiBUaGUgYXNvYy9lcCByZWYgd2lsbCBiZSByZWxlYXNlZCBpbiBzY3RwX2JhY2tsb2dfcmN2LgotCSAqLwogCXNjdHBfYmhfdW5sb2NrX3NvY2soc2spOwotCXNvY2tfcHV0KHNrKTsKKworCS8qIFJlbGVhc2UgdGhlIGFzb2MvZXAgcmVmIHdlIHRvb2sgaW4gdGhlIGxvb2t1cCBjYWxscy4gKi8KKwlpZiAoYXNvYykKKwkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CisJZWxzZQorCQlzY3RwX2VuZHBvaW50X3B1dChlcCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjgwLDggKzI3Myw3IEBACiAJcmV0dXJuIDA7CiAKIGRpc2NhcmRfcmVsZWFzZToKLQkvKiBSZWxlYXNlIGFueSBzdHJ1Y3R1cmVzIHdlIG1heSBiZSBob2xkaW5nLiAqLwotCXNvY2tfcHV0KHNrKTsKKwkvKiBSZWxlYXNlIHRoZSBhc29jL2VwIHJlZiB3ZSB0b29rIGluIHRoZSBsb29rdXAgY2FsbHMuICovCiAJaWYgKGFzb2MpCiAJCXNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpOwogCWVsc2UKQEAgLTI5MCw1NiArMjgyLDg3IEBACiAJZ290byBkaXNjYXJkX2l0OwogfQogCi0vKiBIYW5kbGUgc2Vjb25kIGhhbGYgb2YgaW5ib3VuZCBza2IgcHJvY2Vzc2luZy4gIElmIHRoZSBzb2NrIHdhcyBidXN5LAotICogd2UgbWF5IGhhdmUgbmVlZCB0byBkZWxheSBwcm9jZXNzaW5nIHVudGlsIGxhdGVyIHdoZW4gdGhlIHNvY2sgaXMKLSAqIHJlbGVhc2VkIChvbiB0aGUgYmFja2xvZykuICAgSWYgbm90IGJ1c3ksIHdlIGNhbGwgdGhpcyByb3V0aW5lCi0gKiBkaXJlY3RseSBmcm9tIHRoZSBib3R0b20gaGFsZi4KKy8qIFByb2Nlc3MgdGhlIGJhY2tsb2cgcXVldWUgb2YgdGhlIHNvY2tldC4gIEV2ZXJ5IHNrYiBvbgorICogdGhlIGJhY2tsb2cgaG9sZHMgYSByZWYgb24gYW4gYXNzb2NpYXRpb24gb3IgZW5kcG9pbnQuCisgKiBXZSBob2xkIHRoaXMgcmVmIHRocm91Z2hvdXQgdGhlIHN0YXRlIG1hY2hpbmUgdG8gbWFrZQorICogc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgd2UgbmVlZCBpcyBzdGlsbCBhcm91bmQuCiAgKi8KIGludCBzY3RwX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBTQ1RQX0lOUFVUX0NCKHNrYiktPmNodW5rOwotIAlzdHJ1Y3Qgc2N0cF9pbnEgKmlucXVldWUgPSBOVUxMOworIAlzdHJ1Y3Qgc2N0cF9pbnEgKmlucXVldWUgPSAmY2h1bmstPnJjdnItPmlucXVldWU7CiAgCXN0cnVjdCBzY3RwX2VwX2NvbW1vbiAqcmN2ciA9IE5VTEw7CisJaW50IGJhY2tsb2dlZCA9IDA7CiAKICAJcmN2ciA9IGNodW5rLT5yY3ZyOwogCi0JQlVHX1RSQVAocmN2ci0+c2sgPT0gc2spOworCS8qIElmIHRoZSByY3ZyIGlzIGRlYWQgdGhlbiB0aGUgYXNzb2NpYXRpb24gb3IgZW5kcG9pbnQKKwkgKiBoYXMgYmVlbiBkZWxldGVkIGFuZCB3ZSBjYW4gc2FmZWx5IGRyb3AgdGhlIGNodW5rCisJICogYW5kIHJlZnMgdGhhdCB3ZSBhcmUgaG9sZGluZy4KKwkgKi8KKwlpZiAocmN2ci0+ZGVhZCkgeworCQlzY3RwX2NodW5rX2ZyZWUoY2h1bmspOworCQlnb3RvIGRvbmU7CisJfQogCi0gCWlmIChyY3ZyLT5kZWFkKSB7Ci0gCQlzY3RwX2NodW5rX2ZyZWUoY2h1bmspOwotIAl9IGVsc2UgewotIAkJaW5xdWV1ZSA9ICZjaHVuay0+cmN2ci0+aW5xdWV1ZTsKLSAJCXNjdHBfaW5xX3B1c2goaW5xdWV1ZSwgY2h1bmspOwotIAl9CisJaWYgKHVubGlrZWx5KHJjdnItPnNrICE9IHNrKSkgeworCQkvKiBJbiB0aGlzIGNhc2UsIHRoZSBhc3NvY2lhdGlvbiBtb3ZlZCBmcm9tIG9uZSBzb2NrZXQgdG8KKwkJICogYW5vdGhlci4gIFdlIGFyZSBjdXJyZW50bHkgc2l0dGluZyBvbiB0aGUgYmFja2xvZyBvZiB0aGUKKwkJICogb2xkIHNvY2tldCwgc28gd2UgbmVlZCB0byBtb3ZlLgorCQkgKiBIb3dldmVyLCBzaW5jZSB3ZSBhcmUgaGVyZSBpbiB0aGUgcHJvY2VzcyBjb250ZXh0IHdlCisJCSAqIG5lZWQgdG8gdGFrZSBtYWtlIHN1cmUgdGhhdCB0aGUgdXNlciBkb2Vzbid0IG93bgorCQkgKiB0aGUgbmV3IHNvY2tldCB3aGVuIHdlIHByb2Nlc3MgdGhlIHBhY2tldC4KKwkJICogSWYgdGhlIG5ldyBzb2NrZXQgaXMgdXNlci1vd25lZCwgcXVldWUgdGhlIGNodW5rIHRvIHRoZQorCQkgKiBiYWNrbG9nIG9mIHRoZSBuZXcgc29ja2V0IHdpdGhvdXQgZHJvcHBpbmcgYW55IHJlZnMuCisJCSAqIE90aGVyd2lzZSwgd2UgY2FuIHNhZmVseSBwdXNoIHRoZSBjaHVuayBvbiB0aGUgaW5xdWV1ZS4KKwkJICovCiAKLQkvKiBSZWxlYXNlIHRoZSBhc29jL2VwIHJlZiB3ZSB0b29rIGluIHRoZSBsb29rdXAgY2FsbHMgaW4gc2N0cF9yY3YuICovIAotIAlpZiAoU0NUUF9FUF9UWVBFX0FTU09DSUFUSU9OID09IHJjdnItPnR5cGUpCi0gCQlzY3RwX2Fzc29jaWF0aW9uX3B1dChzY3RwX2Fzc29jKHJjdnIpKTsKLSAJZWxzZQotIAkJc2N0cF9lbmRwb2ludF9wdXQoc2N0cF9lcChyY3ZyKSk7Ci0gIAorCQlzayA9IHJjdnItPnNrOworCQlzY3RwX2JoX2xvY2tfc29jayhzayk7CisKKwkJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKKwkJCXNrX2FkZF9iYWNrbG9nKHNrLCBza2IpOworCQkJYmFja2xvZ2VkID0gMTsKKwkJfSBlbHNlCisJCQlzY3RwX2lucV9wdXNoKGlucXVldWUsIGNodW5rKTsKKworCQlzY3RwX2JoX3VubG9ja19zb2NrKHNrKTsKKworCQkvKiBJZiB0aGUgY2h1bmsgd2FzIGJhY2tsb2dlZCBhZ2FpbiwgZG9uJ3QgZHJvcCByZWZzICovCisJCWlmIChiYWNrbG9nZWQpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlzY3RwX2lucV9wdXNoKGlucXVldWUsIGNodW5rKTsKKwl9CisKK2RvbmU6CisJLyogUmVsZWFzZSB0aGUgcmVmcyB3ZSB0b29rIGluIHNjdHBfYWRkX2JhY2tsb2cgKi8KKwlpZiAoU0NUUF9FUF9UWVBFX0FTU09DSUFUSU9OID09IHJjdnItPnR5cGUpCisJCXNjdHBfYXNzb2NpYXRpb25fcHV0KHNjdHBfYXNzb2MocmN2cikpOworCWVsc2UgaWYgKFNDVFBfRVBfVFlQRV9TT0NLRVQgPT0gcmN2ci0+dHlwZSkKKwkJc2N0cF9lbmRwb2ludF9wdXQoc2N0cF9lcChyY3ZyKSk7CisJZWxzZQorCQlCVUcoKTsKKwogICAgICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBzY3RwX2JhY2tsb2dfbWlncmF0ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNzb2MsIAotCQkJICBzdHJ1Y3Qgc29jayAqb2xkc2ssIHN0cnVjdCBzb2NrICpuZXdzaykKK3N0YXRpYyB2b2lkIHNjdHBfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOworCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IFNDVFBfSU5QVVRfQ0Ioc2tiKS0+Y2h1bms7CisJc3RydWN0IHNjdHBfZXBfY29tbW9uICpyY3ZyID0gY2h1bmstPnJjdnI7CiAKLQlza2IgPSBvbGRzay0+c2tfYmFja2xvZy5oZWFkOwotCW9sZHNrLT5za19iYWNrbG9nLmhlYWQgPSBvbGRzay0+c2tfYmFja2xvZy50YWlsID0gTlVMTDsKLQl3aGlsZSAoc2tiICE9IE5VTEwpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKm5leHQgPSBza2ItPm5leHQ7CisJLyogSG9sZCB0aGUgYXNzb2MvZXAgd2hpbGUgaGFuZ2luZyBvbiB0aGUgYmFja2xvZyBxdWV1ZS4KKwkgKiBUaGlzIHdheSwgd2Uga25vdyBzdHJ1Y3R1cmVzIHdlIG5lZWQgd2lsbCBub3QgZGlzYXBwZWFyIGZyb20gdXMKKwkgKi8KKwlpZiAoU0NUUF9FUF9UWVBFX0FTU09DSUFUSU9OID09IHJjdnItPnR5cGUpCisJCXNjdHBfYXNzb2NpYXRpb25faG9sZChzY3RwX2Fzc29jKHJjdnIpKTsKKwllbHNlIGlmIChTQ1RQX0VQX1RZUEVfU09DS0VUID09IHJjdnItPnR5cGUpCisJCXNjdHBfZW5kcG9pbnRfaG9sZChzY3RwX2VwKHJjdnIpKTsKKwllbHNlCisJCUJVRygpOwogCi0JCWNodW5rID0gU0NUUF9JTlBVVF9DQihza2IpLT5jaHVuazsKLQkJc2tiLT5uZXh0ID0gTlVMTDsKLQkJaWYgKCZhc3NvYy0+YmFzZSA9PSBjaHVuay0+cmN2cikKLQkJCXNrX2FkZF9iYWNrbG9nKG5ld3NrLCBza2IpOwotCQllbHNlCi0JCQlza19hZGRfYmFja2xvZyhvbGRzaywgc2tiKTsKLQkJc2tiID0gbmV4dDsKLQl9CisJc2tfYWRkX2JhY2tsb2coc2ssIHNrYik7CiB9CiAKIC8qIEhhbmRsZSBpY21wIGZyYWcgbmVlZGVkIGVycm9yLiAqLwpAQCAtNDEyLDcgKzQzNSw3IEBACiAJdW5pb24gc2N0cF9hZGRyIGRhZGRyOwogCXN0cnVjdCBzY3RwX2FmICphZjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMOwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IE5VTEw7CiAKIAkqYXBwID0gTlVMTDsgKnRwcCA9IE5VTEw7CkBAIC00NTMsNyArNDc2LDYgQEAKIAlyZXR1cm4gc2s7CiAKIG91dDoKLQlzb2NrX3B1dChzayk7CiAJaWYgKGFzb2MpCiAJCXNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpOwogCXJldHVybiBOVUxMOwpAQCAtNDYzLDcgKzQ4NSw2IEBACiB2b2lkIHNjdHBfZXJyX2ZpbmlzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewogCXNjdHBfYmhfdW5sb2NrX3NvY2soc2spOwotCXNvY2tfcHV0KHNrKTsKIAlpZiAoYXNvYykKIAkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CiB9CkBAIC00OTAsNyArNTExLDcgQEAKIAlpbnQgdHlwZSA9IHNrYi0+aC5pY21waC0+dHlwZTsKIAlpbnQgY29kZSA9IHNrYi0+aC5pY21waC0+Y29kZTsKIAlzdHJ1Y3Qgc29jayAqc2s7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSBOVUxMOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7CiAJY2hhciAqc2F2ZWlwLCAqc2F2ZXNjdHA7CkBAIC03MTYsNyArNzM3LDYgQEAKIAogaGl0OgogCXNjdHBfZW5kcG9pbnRfaG9sZChlcCk7Ci0Jc29ja19ob2xkKGVwYi0+c2spOwogCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKIAlyZXR1cm4gZXA7CiB9CkBAIC04MTgsNyArODM4LDYgQEAKIGhpdDoKIAkqcHQgPSB0cmFuc3BvcnQ7CiAJc2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpOwotCXNvY2tfaG9sZChlcGItPnNrKTsKIAlyZWFkX3VubG9jaygmaGVhZC0+bG9jayk7CiAJcmV0dXJuIGFzb2M7CiB9CkBAIC04NDYsNyArODY1LDYgQEAKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAogCWlmICgoYXNvYyA9IHNjdHBfbG9va3VwX2Fzc29jaWF0aW9uKGxhZGRyLCBwYWRkciwgJnRyYW5zcG9ydCkpKSB7Ci0JCXNvY2tfcHV0KGFzb2MtPmJhc2Uuc2spOwogCQlzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5xdWV1ZS5jIGIvbmV0L3NjdHAvaW5xdWV1ZS5jCmluZGV4IDI5N2I4OTUuLmNmMGM3NjcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucXVldWUuYworKysgYi9uZXQvc2N0cC9pbnF1ZXVlLmMKQEAgLTE0OSw2ICsxNDksNyBAQAogCQkvKiBUaGlzIGlzIHRoZSBmaXJzdCBjaHVuayBpbiB0aGUgcGFja2V0LiAgKi8KIAkJY2h1bmstPnNpbmdsZXRvbiA9IDE7CiAJCWNoID0gKHNjdHBfY2h1bmtoZHJfdCAqKSBjaHVuay0+c2tiLT5kYXRhOworCQljaHVuay0+ZGF0YV9hY2NlcHRlZCA9IDA7CiAJfQogCiAgICAgICAgIGNodW5rLT5jaHVua19oZHIgPSBjaDsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb2MuYyBiL25ldC9zY3RwL3Byb2MuYwppbmRleCBkNDdhNTJjLi41YjNiMGUwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm9jLmMKKysrIGIvbmV0L3NjdHAvcHJvYy5jCkBAIC02OSw3ICs2OSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXMgPSAwOwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlyZXMgKz0KIAkJICAgICooKHVuc2lnbmVkIGxvbmcgKikgKCgodm9pZCAqKSBwZXJfY3B1X3B0cihtaWJbMF0sIGkpKSArCiAJCQkJCSBzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogbnIpKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwppbmRleCA4ZDFkYzI0Li5jNWJlYjJhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKKysrIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCkBAIC00OTgsMTAgKzQ5OCw2IEBACiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsCiAJCQlTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfQ0xPU0VEKSk7CiAKLQkvKiBTZXQgc2tfZXJyIHRvIEVDT05OUkVTRVQgb24gYSAxLTEgc3R5bGUgc29ja2V0LiAqLwotCWlmICghc2N0cF9zdHlsZShhc29jLT5iYXNlLnNrLCBVRFApKQotCQlhc29jLT5iYXNlLnNrLT5za19lcnIgPSBFQ09OTlJFU0VUOyAKLQogCS8qIFNFTkRfRkFJTEVEIHNlbnQgbGF0ZXIgd2hlbiBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRpb24uICovCiAJYXNvYy0+b3V0cXVldWUuZXJyb3IgPSBlcnJvcjsKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0RFTEVURV9UQ0IsIFNDVFBfTlVMTCgpKTsKQEAgLTgzOCw2ICs4MzQsMTUgQEAKIAlyZXR1cm47CiB9CiAKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgc2tfZXJyIG9uIGEgMS0xIHN0eWxlIHNvY2tldC4gKi8KK3N0YXRpYyB2b2lkIHNjdHBfY21kX3NldF9za19lcnIoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBhc29jLT5iYXNlLnNrOworCisJaWYgKCFzY3RwX3N0eWxlKHNrLCBVRFApKQorCQlzay0+c2tfZXJyID0gZXJyb3I7Cit9CisKIC8qIFRoZXNlIHRocmVlIG1hY3JvcyBhbGxvdyB1cyB0byBwdWxsIHRoZSBkZWJ1Z2dpbmcgY29kZSBvdXQgb2YgdGhlCiAgKiBtYWluIGZsb3cgb2Ygc2N0cF9kb19zbSgpIHRvIGtlZXAgYXR0ZW50aW9uIGZvY3VzZWQgb24gdGhlIHJlYWwKICAqIGZ1bmN0aW9uYWxpdHkgdGhlcmUuCkBAIC0xNDU4LDYgKzE0NjMsOSBAQAogCQkJbG9jYWxfY29yayA9IDA7CiAJCQlhc29jLT5wZWVyLnJldHJhbl9wYXRoID0gdDsKIAkJCWJyZWFrOworCQljYXNlIFNDVFBfQ01EX1NFVF9TS19FUlI6CisJCQlzY3RwX2NtZF9zZXRfc2tfZXJyKGFzb2MsIGNtZC0+b2JqLmVycm9yKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW1wb3NzaWJsZSBjb21tYW5kOiAldSwgJXBcbiIsCiAJCQkgICAgICAgY21kLT52ZXJiLCBjbWQtPm9iai5wdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCAyYjlhODMyLi44YmMyNzkyIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwpAQCAtOTMsNyArOTMsNyBAQAogc3RhdGljIHN0cnVjdCBzY3RwX3NhY2toZHIgKnNjdHBfc21fcHVsbF9zYWNrKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayk7CiAKIHN0YXRpYyBzY3RwX2Rpc3Bvc2l0aW9uX3Qgc2N0cF9zdG9wX3QxX2FuZF9hYm9ydChzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMsCi0JCQkJCSAgIF9fdTE2IGVycm9yLAorCQkJCQkgICBfX3UxNiBlcnJvciwgaW50IHNrX2VyciwKIAkJCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJCSAgIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIApAQCAtNDQ4LDcgKzQ0OCw3IEBACiAJX191MzIgaW5pdF90YWc7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmVycl9jaHVuazsKIAlzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldDsKLQlzY3RwX2Rpc3Bvc2l0aW9uX3QgcmV0OworCV9fdTE2IGVycm9yOwogCiAJaWYgKCFzY3RwX3Z0YWdfdmVyaWZ5KGNodW5rLCBhc29jKSkKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwpAQCAtNDgwLDExICs0ODAsOSBAQAogCQkJZ290byBub21lbTsKIAogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKHJlcGx5KSk7Ci0JCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfTkVXX1NUQVRFLAotCQkJCVNDVFBfU1RBVEUoU0NUUF9TVEFURV9DTE9TRUQpKTsKLQkJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfQUJPUlRFRFMpOwotCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0RFTEVURV9UQ0IsIFNDVFBfTlVMTCgpKTsKLQkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fREVMRVRFX1RDQjsKKwkJcmV0dXJuIHNjdHBfc3RvcF90MV9hbmRfYWJvcnQoY29tbWFuZHMsIFNDVFBfRVJST1JfSU5WX1BBUkFNLAorCQkJCQkgICAgICBFQ09OTlJFRlVTRUQsIGFzb2MsCisJCQkJCSAgICAgIGNodW5rLT50cmFuc3BvcnQpOwogCX0KIAogCS8qIFZlcmlmeSB0aGUgSU5JVCBjaHVuayBiZWZvcmUgcHJvY2Vzc2luZyBpdC4gKi8KQEAgLTUxMSwyNyArNTA5LDE2IEBACiAJCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRU5EX1BLVCwKIAkJCQkJCVNDVFBfUEFDS0VUKHBhY2tldCkpOwogCQkJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX09VVENUUkxDSFVOS1MpOwotCQkJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfTkVXX1NUQVRFLAotCQkJCQkJU0NUUF9TVEFURShTQ1RQX1NUQVRFX0NMT1NFRCkpOwotCQkJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfREVMRVRFX1RDQiwKLQkJCQkJCVNDVFBfTlVMTCgpKTsKLQkJCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOworCQkJCWVycm9yID0gU0NUUF9FUlJPUl9JTlZfUEFSQU07CiAJCQl9IGVsc2UgewotCQkJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfTkVXX1NUQVRFLAotCQkJCQkJU0NUUF9TVEFURShTQ1RQX1NUQVRFX0NMT1NFRCkpOwotCQkJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfREVMRVRFX1RDQiwKLQkJCQkJCVNDVFBfTlVMTCgpKTsKLQkJCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKKwkJCQllcnJvciA9IFNDVFBfRVJST1JfTk9fUkVTT1VSQ0U7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSBzY3RwX3NmX3RhYm9ydF84XzRfOChlcCwgYXNvYywgdHlwZSwgYXJnLAotCQkJCQkJICAgY29tbWFuZHMpOwotCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsCi0JCQkJCVNDVFBfU1RBVEUoU0NUUF9TVEFURV9DTE9TRUQpKTsKLQkJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfREVMRVRFX1RDQiwKLQkJCQkJU0NUUF9OVUxMKCkpOwotCQkJcmV0dXJuIHJldDsKKwkJCXNjdHBfc2ZfdGFib3J0XzhfNF84KGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKKwkJCWVycm9yID0gU0NUUF9FUlJPUl9JTlZfUEFSQU07CiAJCX0KKwkJcmV0dXJuIHNjdHBfc3RvcF90MV9hbmRfYWJvcnQoY29tbWFuZHMsIGVycm9yLCBFQ09OTlJFRlVTRUQsCisJCQkJCQlhc29jLCBjaHVuay0+dHJhbnNwb3J0KTsKIAl9CiAKIAkvKiBUYWcgdGhlIHZhcmlhYmxlIGxlbmd0aCBwYXJhbWV0ZXJzLiAgTm90ZSB0aGF0IHdlIG5ldmVyCkBAIC02MzYsOCArNjIzLDkgQEAKIAkgKi8KICAgICAgICAgY2h1bmstPnN1YmguY29va2llX2hkciA9CiAJCShzdHJ1Y3Qgc2N0cF9zaWduZWRfY29va2llICopY2h1bmstPnNrYi0+ZGF0YTsKLQlza2JfcHVsbChjaHVuay0+c2tiLAotCQkgbnRvaHMoY2h1bmstPmNodW5rX2hkci0+bGVuZ3RoKSAtIHNpemVvZihzY3RwX2NodW5raGRyX3QpKTsKKwlpZiAoIXBza2JfcHVsbChjaHVuay0+c2tiLCBudG9ocyhjaHVuay0+Y2h1bmtfaGRyLT5sZW5ndGgpIC0KKwkJCQkJIHNpemVvZihzY3RwX2NodW5raGRyX3QpKSkKKwkJZ290byBub21lbTsKIAogCS8qIDUuMSBEKSBVcG9uIHJlY2VwdGlvbiBvZiB0aGUgQ09PS0lFIEVDSE8gY2h1bmssIEVuZHBvaW50CiAJICogIloiIHdpbGwgcmVwbHkgd2l0aCBhIENPT0tJRSBBQ0sgY2h1bmsgYWZ0ZXIgYnVpbGRpbmcgYSBUQ0IKQEAgLTg4NSw2ICs4NzMsOCBAQAogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKSBhcmc7CiAKIAlpZiAoYXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA+PSBhc29jLT5tYXhfcmV0cmFucykgeworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAkJLyogQ01EX0FTU09DX0ZBSUxFRCBjYWxscyBDTURfREVMRVRFX1RDQi4gKi8KIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9OT19FUlJPUikpOwpAQCAtOTY1LDcgKzk1NSw4IEBACiAJICovCiAJY2h1bmstPnN1YmguaGJfaGRyID0gKHNjdHBfaGVhcnRiZWF0aGRyX3QgKikgY2h1bmstPnNrYi0+ZGF0YTsKIAlwYXlsZW4gPSBudG9ocyhjaHVuay0+Y2h1bmtfaGRyLT5sZW5ndGgpIC0gc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCk7Ci0Jc2tiX3B1bGwoY2h1bmstPnNrYiwgcGF5bGVuKTsKKwlpZiAoIXBza2JfcHVsbChjaHVuay0+c2tiLCBwYXlsZW4pKQorCQlnb3RvIG5vbWVtOwogCiAJcmVwbHkgPSBzY3RwX21ha2VfaGVhcnRiZWF0X2Fjayhhc29jLCBjaHVuaywKIAkJCQkJY2h1bmstPnN1YmguaGJfaGRyLCBwYXlsZW4pOwpAQCAtMTAyOCw2ICsxMDE5LDEyIEBACiAJCQkJCQkgIGNvbW1hbmRzKTsKIAogCWhiaW5mbyA9IChzY3RwX3NlbmRlcl9oYl9pbmZvX3QgKikgY2h1bmstPnNrYi0+ZGF0YTsKKwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXJhbWV0ZXIgaXMgd2hhdCB3ZSBleHBlY3QgKi8KKwlpZiAobnRvaHMoaGJpbmZvLT5wYXJhbV9oZHIubGVuZ3RoKSAhPQorCQkJCSAgICBzaXplb2Yoc2N0cF9zZW5kZXJfaGJfaW5mb190KSkgeworCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOworCX0KKwogCWZyb21fYWRkciA9IGhiaW5mby0+ZGFkZHI7CiAJbGluayA9IHNjdHBfYXNzb2NfbG9va3VwX3BhZGRyKGFzb2MsICZmcm9tX2FkZHIpOwogCkBAIC0xODYwLDggKzE4NTcsOSBAQAogCSAqIGFyZSBpbiBnb29kIHNoYXBlLgogCSAqLwogICAgICAgICBjaHVuay0+c3ViaC5jb29raWVfaGRyID0gKHN0cnVjdCBzY3RwX3NpZ25lZF9jb29raWUgKiljaHVuay0+c2tiLT5kYXRhOwotCXNrYl9wdWxsKGNodW5rLT5za2IsIG50b2hzKGNodW5rLT5jaHVua19oZHItPmxlbmd0aCkgLQotCQkgc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCkpOworCWlmICghcHNrYl9wdWxsKGNodW5rLT5za2IsIG50b2hzKGNodW5rLT5jaHVua19oZHItPmxlbmd0aCkgLQorCQkJCQlzaXplb2Yoc2N0cF9jaHVua2hkcl90KSkpCisJCWdvdG8gbm9tZW07CiAKIAkvKiBJbiBSRkMgMjk2MCA1LjIuNCAzLCBpZiBib3RoIFZlcmlmaWNhdGlvbiBUYWdzIGluIHRoZSBTdGF0ZSBDb29raWUKIAkgKiBvZiBhIGR1cGxpY2F0ZSBDT09LSUUgRUNITyBtYXRjaCB0aGUgVmVyaWZpY2F0aW9uIFRhZ3Mgb2YgdGhlCkBAIC0yMTIzLDYgKzIxMjEsOCBAQAogCWludCBhdHRlbXB0cyA9IGFzb2MtPmluaXRfZXJyX2NvdW50ZXIgKyAxOwogCiAJaWYgKGF0dGVtcHRzID4gYXNvYy0+bWF4X2luaXRfYXR0ZW1wdHMpIHsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJCVNDVFBfRVJST1IoRVRJTUVET1VUKSk7CiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfSU5JVF9GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9TVEFMRV9DT09LSUUpKTsKIAkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fREVMRVRFX1RDQjsKQEAgLTIyNTksNiArMjI1OSw3IEBACiAJaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2VycmhkcikpCiAJCWVycm9yID0gKChzY3RwX2Vycmhkcl90ICopY2h1bmstPnNrYi0+ZGF0YSktPmNhdXNlOwogCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLCBTQ1RQX0VSUk9SKEVDT05OUkVTRVQpKTsKICAJLyogQVNTT0NfRkFJTEVEIHdpbGwgREVMRVRFX1RDQi4gKi8KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwgU0NUUF9VMzIoZXJyb3IpKTsKIAlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7CkBAIC0yMzAzLDcgKzIzMDQsOCBAQAogCWlmIChsZW4gPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJoZHIpKQogCQllcnJvciA9ICgoc2N0cF9lcnJoZHJfdCAqKWNodW5rLT5za2ItPmRhdGEpLT5jYXVzZTsKIAotCXJldHVybiBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KGNvbW1hbmRzLCBlcnJvciwgYXNvYywgY2h1bmstPnRyYW5zcG9ydCk7CisJcmV0dXJuIHNjdHBfc3RvcF90MV9hbmRfYWJvcnQoY29tbWFuZHMsIGVycm9yLCBFQ09OTlJFRlVTRUQsIGFzb2MsCisJCQkJICAgICAgY2h1bmstPnRyYW5zcG9ydCk7CiB9CiAKIC8qCkBAIC0yMzE1LDcgKzIzMTcsOCBAQAogCQkJCQl2b2lkICphcmcsCiAJCQkJCXNjdHBfY21kX3NlcV90ICpjb21tYW5kcykKIHsKLQlyZXR1cm4gc2N0cF9zdG9wX3QxX2FuZF9hYm9ydChjb21tYW5kcywgU0NUUF9FUlJPUl9OT19FUlJPUiwgYXNvYywKKwlyZXR1cm4gc2N0cF9zdG9wX3QxX2FuZF9hYm9ydChjb21tYW5kcywgU0NUUF9FUlJPUl9OT19FUlJPUiwKKwkJCQkgICAgICBFTk9QUk9UT09QVCwgYXNvYywKIAkJCQkgICAgICAoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopYXJnKTsKIH0KIApAQCAtMjM0MCw3ICsyMzQzLDcgQEAKICAqIFRoaXMgaXMgY29tbW9uIGNvZGUgY2FsbGVkIGJ5IHNldmVyYWwgc2N0cF9zZl8qX2Fib3J0KCkgZnVuY3Rpb25zIGFib3ZlLgogICovCiBzdGF0aWMgc2N0cF9kaXNwb3NpdGlvbl90IHNjdHBfc3RvcF90MV9hbmRfYWJvcnQoc2N0cF9jbWRfc2VxX3QgKmNvbW1hbmRzLAotCQkJCQkgICBfX3UxNiBlcnJvciwKKwkJCQkJICAgX191MTYgZXJyb3IsIGludCBza19lcnIsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJCQkgICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCkKIHsKQEAgLTIzNTAsNiArMjM1Myw3IEBACiAJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfQUJPUlRFRFMpOwogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVElNRVJfU1RPUCwKIAkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1QxX0lOSVQpKTsKKwlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsIFNDVFBfRVJST1Ioc2tfZXJyKSk7CiAJLyogQ01EX0lOSVRfRkFJTEVEIHdpbGwgREVMRVRFX1RDQi4gKi8KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0lOSVRfRkFJTEVELAogCQkJU0NUUF9VMzIoZXJyb3IpKTsKQEAgLTMzMzMsNiArMzMzNyw4IEBACiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVElNRVJfU1RPUCwKIAkJCQlTQ1RQX1RPKFNDVFBfRVZFTlRfVElNRU9VVF9UNF9SVE8pKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ESVNDQVJEX1BBQ0tFVCxTQ1RQX05VTEwoKSk7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCSAgICAgICAgU0NUUF9FUlJPUihFQ09OTkFCT1JURUQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9BU0NPTkZfQUNLKSk7CiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX0FCT1JURURTKTsKQEAgLTMzNTksNiArMzM2NSw4IEBACiAJCSAqIHByb2Nlc3NpbmcgdGhlIHJlc3Qgb2YgdGhlIGNodW5rcyBpbiB0aGUgcGFja2V0LgogCQkgKi8KIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ESVNDQVJEX1BBQ0tFVCxTQ1RQX05VTEwoKSk7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCSAgICAgICAgU0NUUF9FUlJPUihFQ09OTkFCT1JURUQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9BU0NPTkZfQUNLKSk7CiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX0FCT1JURURTKTsKQEAgLTM3MTEsOSArMzcxOSwxMyBAQAogCWlmIChhc29jLT5zdGF0ZSA8PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpIHsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9TVE9QLAogCQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1QxX0lOSVQpKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJCVNDVFBfRVJST1IoRUNPTk5SRUZVU0VEKSk7CiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfSU5JVF9GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9QUk9UT19WSU9MQVRJT04pKTsKIAl9IGVsc2UgeworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkgICAgICAgIFNDVFBfRVJST1IoRUNPTk5BQk9SVEVEKSk7CiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfQVNTT0NfRkFJTEVELAogCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfUFJPVE9fVklPTEFUSU9OKSk7CiAJCVNDVFBfREVDX1NUQVRTKFNDVFBfTUlCX0NVUlJFU1RBQik7CkBAIC00MDMxLDYgKzQwNDMsOCBAQAogCSAqIFRDQi4gIFRoaXMgaXMgYSBkZXBhcnR1cmUgZnJvbSBvdXIgdHlwaWNhbCBOT01FTSBoYW5kbGluZy4KIAkgKi8KIAorCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCVNDVFBfRVJST1IoRUNPTk5BQk9SVEVEKSk7CiAJLyogRGVsZXRlIHRoZSBlc3RhYmxpc2hlZCBhc3NvY2lhdGlvbi4gKi8KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKIAkJCVNDVFBfVTMyKFNDVFBfRVJST1JfVVNFUl9BQk9SVCkpOwpAQCAtNDE3Miw2ICs0MTg2LDggQEAKIAkgKiBUQ0IuICBUaGlzIGlzIGEgZGVwYXJ0dXJlIGZyb20gb3VyIHR5cGljYWwgTk9NRU0gaGFuZGxpbmcuCiAJICovCiAKKwlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQlTQ1RQX0VSUk9SKEVDT05OUkVGVVNFRCkpOwogCS8qIERlbGV0ZSB0aGUgZXN0YWJsaXNoZWQgYXNzb2NpYXRpb24uICovCiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0ZBSUxFRCwKIAkJCVNDVFBfVTMyKFNDVFBfRVJST1JfVVNFUl9BQk9SVCkpOwpAQCAtNDU0MCw2ICs0NTU2LDggQEAKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IGFyZzsKIAogCWlmIChhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50ID49IGFzb2MtPm1heF9yZXRyYW5zKSB7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQkvKiBDTURfQVNTT0NfRkFJTEVEIGNhbGxzIENNRF9ERUxFVEVfVENCLiAqLwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CkBAIC00NjU5LDYgKzQ2NzcsOCBAQAogCQlTQ1RQX0RFQlVHX1BSSU5USygiR2l2aW5nIHVwIG9uIElOSVQsIGF0dGVtcHRzOiAlZCIKIAkJCQkgICIgbWF4X2luaXRfYXR0ZW1wdHM6ICVkXG4iLAogCQkJCSAgYXR0ZW1wdHMsIGFzb2MtPm1heF9pbml0X2F0dGVtcHRzKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJCVNDVFBfRVJST1IoRVRJTUVET1VUKSk7CiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfSU5JVF9GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9OT19FUlJPUikpOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ERUxFVEVfVENCOwpAQCAtNDcwOCw2ICs0NzI4LDggQEAKIAogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKHJlcGwpKTsKIAl9IGVsc2UgeworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RFTEVURV9UQ0I7CkBAIC00NzM5LDYgKzQ3NjEsOCBAQAogCiAJU0NUUF9ERUJVR19QUklOVEsoIlRpbWVyIFQyIGV4cGlyZWQuXG4iKTsKIAlpZiAoYXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA+PSBhc29jLT5tYXhfcmV0cmFucykgeworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAkJLyogTm90ZTogIENNRF9BU1NPQ19GQUlMRUQgY2FsbHMgQ01EX0RFTEVURV9UQ0IuICovCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfQVNTT0NfRkFJTEVELAogCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKQEAgLTQ4MTQsNiArNDgzOCw4IEBACiAJaWYgKGFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPj0gYXNvYy0+bWF4X3JldHJhbnMpIHsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9TVE9QLAogCQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1Q0X1JUTykpOworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9OT19FUlJPUikpOwogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7CkBAIC00ODY3LDYgKzQ4OTMsOCBAQAogCQlnb3RvIG5vbWVtOwogCiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9SRVBMWSwgU0NUUF9DSFVOSyhyZXBseSkpOworCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCVNDVFBfRVJST1IoRVRJTUVET1VUKSk7CiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCiAJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CiAKQEAgLTUxNTEsNyArNTE3OSw5IEBACiAJaW50IHRtcDsKIAlfX3UzMiB0c247CiAJaW50IGFjY291bnRfdmFsdWU7CisJc3RydWN0IHNjdHBfdHNubWFwICptYXAgPSAoc3RydWN0IHNjdHBfdHNubWFwICopJmFzb2MtPnBlZXIudHNuX21hcDsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBhc29jLT5iYXNlLnNrOworCWludCByY3ZidWZfb3ZlciA9IDA7CiAKIAlkYXRhX2hkciA9IGNodW5rLT5zdWJoLmRhdGFfaGRyID0gKHNjdHBfZGF0YWhkcl90ICopY2h1bmstPnNrYi0+ZGF0YTsKIAlza2JfcHVsbChjaHVuay0+c2tiLCBzaXplb2Yoc2N0cF9kYXRhaGRyX3QpKTsKQEAgLTUxNjIsMTAgKzUxOTIsMTYgQEAKIAkvKiBBU1NFUlQ6ICBOb3cgc2tiLT5kYXRhIGlzIHJlYWxseSB0aGUgdXNlciBkYXRhLiAgKi8KIAogCS8qCi0JICogaWYgd2UgYXJlIGVzdGFibGlzaGVkLCBhbmQgd2UgaGF2ZSB1c2VkIHVwIG91ciByZWNlaXZlCi0JICogYnVmZmVyIG1lbW9yeSwgZHJvcCB0aGUgZnJhbWUKKwkgKiBJZiB3ZSBhcmUgZXN0YWJsaXNoZWQsIGFuZCB3ZSBoYXZlIHVzZWQgdXAgb3VyIHJlY2VpdmUgYnVmZmVyCisJICogbWVtb3J5LCB0aGluayBhYm91dCBkcm9waW5nIHRoZSBmcmFtZS4KKwkgKiBOb3RlIHRoYXQgd2UgaGF2ZSBhbiBvcHBvcnR1bml0eSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGhlcmUuCisJICogSWYgd2UgYWNjZXB0IG9uZSBjaHVuayBmcm9tIGFuIHNrYnVmZiwgd2UgaGF2ZSB0byBrZWVwIGFsbCB0aGUKKwkgKiBtZW1vcnkgb2YgdGhhdCBza2J1ZmYgYXJvdW5kIHVudGlsIHRoZSBjaHVuayBpcyByZWFkIGludG8gdXNlcgorCSAqIHNwYWNlLiBUaGVyZWZvcmUsIG9uY2Ugd2UgYWNjZXB0IDEgY2h1bmsgd2UgbWF5IGFzIHdlbGwgYWNjZXB0IGFsbAorCSAqIHJlbWFpbmluZyBjaHVua3MgaW4gdGhlIHNrYnVmZi4gVGhlIGRhdGFfYWNjZXB0ZWQgZmxhZyBoZWxwcyB1cyBkbworCSAqIHRoYXQuCiAJICovCi0JaWYgKGFzb2MtPnN0YXRlID09IFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpIHsKKwlpZiAoKGFzb2MtPnN0YXRlID09IFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpICYmICghY2h1bmstPmRhdGFfYWNjZXB0ZWQpKSB7CiAJCS8qCiAJCSAqIElmIHRoZSByZWNlaXZlIGJ1ZmZlciBwb2xpY3kgaXMgMSwgdGhlbiBlYWNoCiAJCSAqIGFzc29jaWF0aW9uIGNhbiBhbGxvY2F0ZSB1cCB0byBza19yY3ZidWYgYnl0ZXMKQEAgLTUxNzYsOSArNTIxMiwyNSBAQAogCQkJYWNjb3VudF92YWx1ZSA9IGF0b21pY19yZWFkKCZhc29jLT5ybWVtX2FsbG9jKTsKIAkJZWxzZQogCQkJYWNjb3VudF92YWx1ZSA9IGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYyk7CisJCWlmIChhY2NvdW50X3ZhbHVlID4gc2stPnNrX3JjdmJ1ZikgeworCQkJLyoKKwkJCSAqIFdlIG5lZWQgdG8gbWFrZSBmb3J3YXJkIHByb2dyZXNzLCBldmVuIHdoZW4gd2UgYXJlCisJCQkgKiB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIHNvIHdlIGFsd2F5cyBhbGxvdyB0aGUKKwkJCSAqIG5leHQgdHNuIGFmdGVyIHRoZSBjdHNuIGFjayBwb2ludCB0byBiZSBhY2NlcHRlZC4KKwkJCSAqIFRoaXMgbGV0cyB1cyBhdm9pZCBkZWFkbG9ja3MgaW4gd2hpY2ggd2UgaGF2ZSB0bworCQkJICogZHJvcCBmcmFtZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgbGV0IHVzIGRyYWluIHRoZQorCQkJICogcmVjZWl2ZSBxdWV1ZS4KKwkJCSAqLworCQkJaWYgKChzY3RwX3Rzbm1hcF9nZXRfY3RzbihtYXApICsgMSkgIT0gdHNuKQorCQkJCXJldHVybiBTQ1RQX0lFUlJPUl9JR05PUkVfVFNOOwogCi0JCWlmIChhY2NvdW50X3ZhbHVlID4gc2stPnNrX3JjdmJ1ZikKLQkJCXJldHVybiBTQ1RQX0lFUlJPUl9JR05PUkVfVFNOOworCQkJLyoKKwkJCSAqIFdlJ3JlIGdvaW5nIHRvIGFjY2VwdCB0aGUgZnJhbWUgYnV0IHdlIHNob3VsZCByZW5lZ2UKKwkJCSAqIHRvIG1ha2Ugc3BhY2UgZm9yIGl0LiBUaGlzIHdpbGwgc2VuZCB1cyBkb3duIHRoYXQKKwkJCSAqIHBhdGggbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbi4KKwkJCSAqLworCQkJcmN2YnVmX292ZXIgPSAxOworCQl9CiAJfQogCiAJLyogUHJvY2VzcyBFQ04gYmFzZWQgY29uZ2VzdGlvbi4KQEAgLTUyMjYsNiArNTI3OCw3IEBACiAJZGF0YWxlbiAtPSBzaXplb2Yoc2N0cF9kYXRhX2NodW5rX3QpOwogCiAJZGVsaXZlciA9IFNDVFBfQ01EX0NIVU5LX1VMUDsKKwljaHVuay0+ZGF0YV9hY2NlcHRlZCA9IDE7CiAKIAkvKiBUaGluayBhYm91dCBwYXJ0aWFsIGRlbGl2ZXJ5LiAqLwogCWlmICgoZGF0YWxlbiA+PSBhc29jLT5yd25kKSAmJiAoIWFzb2MtPnVscHEucGRfbW9kZSkpIHsKQEAgLTUyNDIsNyArNTI5NSw4IEBACiAJICogbGFyZ2Ugc3BpbGwgb3Zlci4KIAkgKi8KIAlpZiAoIWFzb2MtPnJ3bmQgfHwgYXNvYy0+cnduZF9vdmVyIHx8Ci0JICAgIChkYXRhbGVuID4gYXNvYy0+cnduZCArIGFzb2MtPmZyYWdfcG9pbnQpKSB7CisJICAgIChkYXRhbGVuID4gYXNvYy0+cnduZCArIGFzb2MtPmZyYWdfcG9pbnQpIHx8CisJICAgIHJjdmJ1Zl9vdmVyKSB7CiAKIAkJLyogSWYgdGhpcyBpcyB0aGUgbmV4dCBUU04sIGNvbnNpZGVyIHJlbmVnaW5nIHRvIG1ha2UKIAkJICogcm9vbS4gICBOb3RlOiBQbGF5aW5nIG5pY2Ugd2l0aCBhIGNvbmZ1c2VkIHNlbmRlci4gIEEKQEAgLTUyNTAsOCArNTMwNCw4IEBACiAJCSAqIHNwYWNlIGFuZCBpbiB0aGUgZnV0dXJlIHdlIG1heSB3YW50IHRvIGRldGVjdCBhbmQKIAkJICogZG8gbW9yZSBkcmFzdGljIHJlbmVnaW5nLgogCQkgKi8KLQkJaWYgKHNjdHBfdHNubWFwX2hhc19nYXAoJmFzb2MtPnBlZXIudHNuX21hcCkgJiYKLQkJICAgIChzY3RwX3Rzbm1hcF9nZXRfY3RzbigmYXNvYy0+cGVlci50c25fbWFwKSArIDEpID09IHRzbikgeworCQlpZiAoc2N0cF90c25tYXBfaGFzX2dhcChtYXApICYmCisJCSAgICAoc2N0cF90c25tYXBfZ2V0X2N0c24obWFwKSArIDEpID09IHRzbikgewogCQkJU0NUUF9ERUJVR19QUklOVEsoIlJlbmVnaW5nIGZvciB0c246JXVcbiIsIHRzbik7CiAJCQlkZWxpdmVyID0gU0NUUF9DTURfUkVORUdFOwogCQl9IGVsc2UgewpAQCAtNTI4MCw2ICs1MzM0LDggQEAKIAkJICogcHJvY2Vzc2luZyB0aGUgcmVzdCBvZiB0aGUgY2h1bmtzIGluIHRoZSBwYWNrZXQuCiAJCSAqLwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0RJU0NBUkRfUEFDS0VULFNDVFBfTlVMTCgpKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJCVNDVFBfRVJST1IoRUNPTk5BQk9SVEVEKSk7CiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfQVNTT0NfRkFJTEVELAogCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fREFUQSkpOwogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMKaW5kZXggNzVlZjEwNC4uOGJjY2E1NiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYwpAQCAtMzY2LDkgKzM2Niw5IEBACiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCiAJey5mbiA9IHNjdHBfc2Zfb290YiwgLm5hbWUgPSAic2N0cF9zZl9vb3RiIn0sIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCiAJey5mbiA9IHNjdHBfc2ZfZG9fZWNuZSwgLm5hbWUgPSAic2N0cF9zZl9kb19lY25lIn0sIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKQEAgLTM4MCw3ICszODAsNyBAQAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAogCXsuZm4gPSBzY3RwX3NmX2RvX2VjbmUsIC5uYW1lID0gInNjdHBfc2ZfZG9fZWNuZSJ9LCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKIH0gLyogVFlQRV9TQ1RQX0VDTl9FQ05FICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VDTl9DV1IgeyBcCkBAIC00MDEsNyArNDAxLDcgQEAKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKIAl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCiB9IC8qIFRZUEVfU0NUUF9FQ05fQ1dSICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1NIVVRET1dOX0NPTVBMRVRFIHsgXApAQCAtNjQ3LDcgKzY0Nyw3IEBACiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCiAJey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCXsuZm4gPSBzY3RwX3NmX2Vycm9yX2Nsb3NlZCwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9jbG9zZWQifSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAogCXsuZm4gPSBzY3RwX3NmX2RvX3BybV9yZXF1ZXN0aGVhcnRiZWF0LAkJICAgICAgXAogCSAubmFtZSA9ICJzY3RwX3NmX2RvX3BybV9yZXF1ZXN0aGVhcnRiZWF0In0sICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggYjZlNGI4OS4uMTc0ZDRkMyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTEwNTcsNiArMTA1Nyw3IEBACiAJaW5ldF9zayhzayktPmRwb3J0ID0gaHRvbnMoYXNvYy0+cGVlci5wb3J0KTsKIAlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHRvLnNhLnNhX2ZhbWlseSk7CiAJYWYtPnRvX3NrX2RhZGRyKCZ0bywgc2spOworCXNrLT5za19lcnIgPSAwOwogCiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBzay0+c2tfc29ja2V0LT5maWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiAJZXJyID0gc2N0cF93YWl0X2Zvcl9jb25uZWN0KGFzb2MsICZ0aW1lbyk7CkBAIC0xMjI4LDcgKzEyMjksNyBAQAogCiAJZXAgPSBzY3RwX3NrKHNrKS0+ZXA7CiAKLQkvKiBXYWxrIGFsbCBhc3NvY2lhdGlvbnMgb24gYSBzb2NrZXQsIG5vdCBvbiBhbiBlbmRwb2ludC4gICovCisJLyogV2FsayBhbGwgYXNzb2NpYXRpb25zIG9uIGFuIGVuZHBvaW50LiAgKi8KIAlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0ZW1wLCAmZXAtPmFzb2NzKSB7CiAJCWFzb2MgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24sIGFzb2NzKTsKIApAQCAtMTI0MSwxMyArMTI0MiwxMyBAQAogCQkJaWYgKHNjdHBfc3RhdGUoYXNvYywgQ0xPU0VEKSkgewogCQkJCXNjdHBfdW5oYXNoX2VzdGFibGlzaGVkKGFzb2MpOwogCQkJCXNjdHBfYXNzb2NpYXRpb25fZnJlZShhc29jKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQogCi0JCQl9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19MSU5HRVIpICYmCi0JCQkJICAgIXNrLT5za19saW5nZXJ0aW1lKQotCQkJCXNjdHBfcHJpbWl0aXZlX0FCT1JUKGFzb2MsIE5VTEwpOwotCQkJZWxzZQotCQkJCXNjdHBfcHJpbWl0aXZlX1NIVVRET1dOKGFzb2MsIE5VTEwpOwotCQl9IGVsc2UKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19MSU5HRVIpICYmICFzay0+c2tfbGluZ2VydGltZSkKKwkJCXNjdHBfcHJpbWl0aXZlX0FCT1JUKGFzb2MsIE5VTEwpOworCQllbHNlCiAJCQlzY3RwX3ByaW1pdGl2ZV9TSFVURE9XTihhc29jLCBOVUxMKTsKIAl9CiAKQEAgLTUzMTcsNiArNTMxOCw3IEBACiAJCSAqLwogCQlzY3RwX3JlbGVhc2Vfc29jayhzayk7CiAJCWN1cnJlbnRfdGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KGN1cnJlbnRfdGltZW8pOworCQlCVUdfT04oc2sgIT0gYXNvYy0+YmFzZS5zayk7CiAJCXNjdHBfbG9ja19zb2NrKHNrKTsKIAogCQkqdGltZW9fcCA9IGN1cnJlbnRfdGltZW87CkBAIC01NjA0LDEyICs1NjA2LDE0IEBACiAJICovCiAJbmV3c3AtPnR5cGUgPSB0eXBlOwogCi0Jc3Bpbl9sb2NrX2JoKCZvbGRzay0+c2tfbG9jay5zbG9jayk7Ci0JLyogTWlncmF0ZSB0aGUgYmFja2xvZyBmcm9tIG9sZHNrIHRvIG5ld3NrLiAqLwotCXNjdHBfYmFja2xvZ19taWdyYXRlKGFzc29jLCBvbGRzaywgbmV3c2spOwotCS8qIE1pZ3JhdGUgdGhlIGFzc29jaWF0aW9uIHRvIHRoZSBuZXcgc29ja2V0LiAqLworCS8qIE1hcmsgdGhlIG5ldyBzb2NrZXQgImluLXVzZSIgYnkgdGhlIHVzZXIgc28gdGhhdCBhbnkgcGFja2V0cworCSAqIHRoYXQgbWF5IGFycml2ZSBvbiB0aGUgYXNzb2NpYXRpb24gYWZ0ZXIgd2UndmUgbW92ZWQgaXQgYXJlCisJICogcXVldWVkIHRvIHRoZSBiYWNrbG9nLiAgVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlIGJldHdlZW4KKwkgKiBiYWNrbG9nIHByb2Nlc3Npbmcgb24gdGhlIG9sZCBzb2NrZXQgYW5kIG5ldy1wYWNrZXQgcHJvY2Vzc2luZworCSAqIG9uIHRoZSBuZXcgc29ja2V0LgorCSAqLworCXNjdHBfbG9ja19zb2NrKG5ld3NrKTsKIAlzY3RwX2Fzc29jX21pZ3JhdGUoYXNzb2MsIG5ld3NrKTsKLQlzcGluX3VubG9ja19iaCgmb2xkc2stPnNrX2xvY2suc2xvY2spOwogCiAJLyogSWYgdGhlIGFzc29jaWF0aW9uIG9uIHRoZSBuZXdzayBpcyBhbHJlYWR5IGNsb3NlZCBiZWZvcmUgYWNjZXB0KCkKIAkgKiBpcyBjYWxsZWQsIHNldCBSQ1ZfU0hVVERPV04gZmxhZy4KQEAgLTU2MTgsNiArNTYyMiw3IEBACiAJCW5ld3NrLT5za19zaHV0ZG93biB8PSBSQ1ZfU0hVVERPV047CiAKIAluZXdzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0VTVEFCTElTSEVEOworCXNjdHBfcmVsZWFzZV9zb2NrKG5ld3NrKTsKIH0KIAogLyogVGhpcyBwcm90byBzdHJ1Y3QgZGVzY3JpYmVzIHRoZSBVTFAgaW50ZXJmYWNlIGZvciBTQ1RQLiAgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscHF1ZXVlLmMgYi9uZXQvc2N0cC91bHBxdWV1ZS5jCmluZGV4IDIwODBiMmQuLjU3NWU1NTYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvdWxwcXVldWUuYwpAQCAtMjc5LDYgKzI3OSw3IEBACiBzdGF0aWMgc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfbWFrZV9yZWFzc2VtYmxlZF9ldmVudChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKmZfZnJhZywgc3RydWN0IHNrX2J1ZmYgKmxfZnJhZykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcG9zOworCXN0cnVjdCBza19idWZmICpuZXcgPSBOVUxMOwogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcG5leHQsICpsYXN0OwogCXN0cnVjdCBza19idWZmICpsaXN0ID0gc2tiX3NoaW5mbyhmX2ZyYWcpLT5mcmFnX2xpc3Q7CkBAIC0yOTcsMTEgKzI5OCwzMyBAQAogCSAqLwogCWlmIChsYXN0KQogCQlsYXN0LT5uZXh0ID0gcG9zOwotCWVsc2UKLQkJc2tiX3NoaW5mbyhmX2ZyYWcpLT5mcmFnX2xpc3QgPSBwb3M7CisgCWVsc2UgeworIAkJaWYgKHNrYl9jbG9uZWQoZl9mcmFnKSkgeworIAkJCS8qIFRoaXMgaXMgYSBjbG9uZWQgc2tiLCB3ZSBjYW4ndCBqdXN0IG1vZGlmeQorIAkJCSAqIHRoZSBmcmFnX2xpc3QuICBXZSBuZWVkIGEgbmV3IHNrYiB0byBkbyB0aGF0LgorIAkJCSAqIEluc3RlYWQgb2YgY2FsbGluZyBza2JfdW5zaGFyZSgpLCB3ZSdsbCBkbyBpdAorIAkJCSAqIG91cnNlbHZlcyBzaW5jZSB3ZSBuZWVkIHRvIGRlbGF5IHRoZSBmcmVlLgorIAkJCSAqLworIAkJCW5ldyA9IHNrYl9jb3B5KGZfZnJhZywgR0ZQX0FUT01JQyk7CisgCQkJaWYgKCFuZXcpCisgCQkJCXJldHVybiBOVUxMOwkvKiB0cnkgYWdhaW4gbGF0ZXIgKi8KKworIAkJCW5ldy0+c2sgPSBmX2ZyYWctPnNrOworCisgCQkJc2tiX3NoaW5mbyhuZXcpLT5mcmFnX2xpc3QgPSBwb3M7CisgCQl9IGVsc2UKKyAJCQlza2Jfc2hpbmZvKGZfZnJhZyktPmZyYWdfbGlzdCA9IHBvczsKKyAJfQogCiAJLyogUmVtb3ZlIHRoZSBmaXJzdCBmcmFnbWVudCBmcm9tIHRoZSByZWFzc2VtYmx5IHF1ZXVlLiAgKi8KIAlfX3NrYl91bmxpbmsoZl9mcmFnLCBxdWV1ZSk7CisKKyAJLyogaWYgd2UgZGlkIHVuc2hhcmUsIHRoZW4gZnJlZSB0aGUgb2xkIHNrYiBhbmQgcmUtYXNzaWduICovCisgCWlmIChuZXcpIHsKKyAJCWtmcmVlX3NrYihmX2ZyYWcpOworIAkJZl9mcmFnID0gbmV3OworIAl9CisKIAl3aGlsZSAocG9zKSB7CiAKIAkJcG5leHQgPSBwb3MtPm5leHQ7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggYjEzMDQyZi4uMDI5NDhiNiAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTE5LDEwICsxMTksNiBAQAogc3RhdGljIHNzaXplX3Qgc29ja19zZW5kcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICAgIGludCBvZmZzZXQsIHNpemVfdCBzaXplLCBsb2ZmX3QgKnBwb3MsIGludCBtb3JlKTsKIAotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKm91dCwKLQkJCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCi0KIC8qCiAgKglTb2NrZXQgZmlsZXMgaGF2ZSBhIHNldCBvZiAnc3BlY2lhbCcgb3BlcmF0aW9ucyBhcyB3ZWxsIGFzIHRoZSBnZW5lcmljIGZpbGUgb25lcy4gVGhlc2UgZG9uJ3QgYXBwZWFyCiAgKglpbiB0aGUgb3BlcmF0aW9uIHN0cnVjdHVyZXMgYnV0IGFyZSBkb25lIGRpcmVjdGx5IHZpYSB0aGUgc29ja2V0Y2FsbCgpIG11bHRpcGxleG9yLgpAQCAtMjcxLDYgKzI2Nyw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmKGxlbikKIAl7CisJCWlmIChhdWRpdF9zb2NrYWRkcihrbGVuLCBrYWRkcikpCisJCQlyZXR1cm4gLUVOT01FTTsKIAkJaWYoY29weV90b191c2VyKHVhZGRyLGthZGRyLGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC00OTQsNiArNDkyLDcgQEAKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCisJKmVyciA9IC1FQkFERjsKIAlmaWxlID0gZmdldF9saWdodChmZCwgZnB1dF9uZWVkZWQpOwogCWlmIChmaWxlKSB7CiAJCXNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlLCBlcnIpOwpAQCAtMTQxOCw3ICsxNDE3LDggQEAKIAluZXdmZCA9IHNvY2tfYWxsb2NfZmQoJm5ld2ZpbGUpOwogCWlmICh1bmxpa2VseShuZXdmZCA8IDApKSB7CiAJCWVyciA9IG5ld2ZkOwotCQlnb3RvIG91dF9yZWxlYXNlOworCQlzb2NrX3JlbGVhc2UobmV3c29jayk7CisJCWdvdG8gb3V0X3B1dDsKIAl9CiAKIAllcnIgPSBzb2NrX2F0dGFjaF9mZChuZXdzb2NrLCBuZXdmaWxlKTsKQEAgLTE0NTUsMTAgKzE0NTUsOCBAQAogb3V0OgogCXJldHVybiBlcnI7CiBvdXRfZmQ6Ci0JcHV0X2ZpbHAobmV3ZmlsZSk7CisJZnB1dChuZXdmaWxlKTsKIAlwdXRfdW51c2VkX2ZkKG5ld2ZkKTsKLW91dF9yZWxlYXNlOgotCXNvY2tfcmVsZWFzZShuZXdzb2NrKTsKIAlnb3RvIG91dF9wdXQ7CiB9CiAKQEAgLTIxMzcsNyArMjEzNSw3IEBACiAJaW50IGNwdTsKIAlpbnQgY291bnRlciA9IDA7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCWNvdW50ZXIgKz0gcGVyX2NwdShzb2NrZXRzX2luX3VzZSwgY3B1KTsKIAogCS8qIEl0IGNhbiBiZSBuZWdhdGl2ZSwgYnkgdGhlIHdheS4gOCkgKi8KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCA5MDBlZjMxLi41MTllYmMxIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC03OTQsNyArNzk0LDYgQEAKIAogb3V0X2VycjoKIAlkcHJpbnRrKCJSUEM6ICAgICAgZ3NzX2NyZWF0ZV9jcmVkIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCBlcnIpOwotCWlmIChjcmVkKSBnc3NfZGVzdHJveV9jcmVkKCZjcmVkLT5nY19iYXNlKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYwppbmRleCA5N2M5ODFmLi43NmI5NjllIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMKQEAgLTIxMiw3ICsyMTIsNiBAQAogCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNrc3VtbmFtZTsKIAlzdHJ1Y3QgY3J5cHRvX3RmbSAgICAgICAgICAgICAgICp0Zm0gPSBOVUxMOyAvKiBYWFggYWRkIHRvIGN0eD8gKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgICAgICAgICAgICAgIHNnWzFdOwotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IEdTU19TX0ZBSUxVUkU7CiAKIAlzd2l0Y2ggKGNrc3VtdHlwZSkgewogCQljYXNlIENLU1VNVFlQRV9SU0FfTUQ1OgpAQCAtMjIxLDEzICsyMjAsMTEgQEAKIAkJZGVmYXVsdDoKIAkJCWRwcmludGsoIlJQQzogICAgICBrcmI1X21ha2VfY2hlY2tzdW06IgogCQkJCSIgdW5zdXBwb3J0ZWQgY2hlY2tzdW0gJWQiLCBja3N1bXR5cGUpOwotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAl9CiAJaWYgKCEodGZtID0gY3J5cHRvX2FsbG9jX3RmbShja3N1bW5hbWUsIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCkpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7CiAJY2tzdW0tPmxlbiA9IGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUodGZtKTsKLQlpZiAoKGNrc3VtLT5kYXRhID0ga21hbGxvYyhja3N1bS0+bGVuLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLQkJZ290byBvdXQ7CiAKIAljcnlwdG9fZGlnZXN0X2luaXQodGZtKTsKIAlzZ19zZXRfYnVmKHNnLCBoZWFkZXIsIGhkcmxlbik7CkBAIC0yMzUsMTAgKzIzMiw4IEBACiAJcHJvY2Vzc194ZHJfYnVmKGJvZHksIGJvZHlfb2Zmc2V0LCBib2R5LT5sZW4gLSBib2R5X29mZnNldCwKIAkJCWNoZWNrc3VtbWVyLCB0Zm0pOwogCWNyeXB0b19kaWdlc3RfZmluYWwodGZtLCBja3N1bS0+ZGF0YSk7Ci0JY29kZSA9IDA7Ci1vdXQ6CiAJY3J5cHRvX2ZyZWVfdGZtKHRmbSk7Ci0JcmV0dXJuIGNvZGU7CisJcmV0dXJuIDA7CiB9CiAKIEVYUE9SVF9TWU1CT0wobWFrZV9jaGVja3N1bSk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggNGQ3ZWI5ZS4uZDUxZTMxNiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtMTEyMiwxOCArMTEyMiwyMCBAQAogCQkJCQlpbnRlZ19sZW4pKQogCQkJQlVHKCk7CiAJCWlmIChyZXNidWYtPnBhZ2VfbGVuID09IDAKLQkJCSYmIHJlc2J1Zi0+dGFpbFswXS5pb3ZfbGVuICsgUlBDX01BWF9BVVRIX1NJWkUKKwkJCSYmIHJlc2J1Zi0+aGVhZFswXS5pb3ZfbGVuICsgUlBDX01BWF9BVVRIX1NJWkUKIAkJCQk8IFBBR0VfU0laRSkgewogCQkJQlVHX09OKHJlc2J1Zi0+dGFpbFswXS5pb3ZfbGVuKTsKIAkJCS8qIFVzZSBoZWFkIGZvciBldmVyeXRoaW5nICovCiAJCQlyZXN2ID0gJnJlc2J1Zi0+aGVhZFswXTsKIAkJfSBlbHNlIGlmIChyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgPT0gTlVMTCkgewotCQkJLyogY29waWVkIGZyb20gbmZzZDRfZW5jb2RlX3JlYWQgKi8KLQkJCXN2Y190YWtlX3BhZ2UocnFzdHApOwotCQkJcmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlID0gcGFnZV9hZGRyZXNzKHJxc3RwCi0JCQkJCS0+cnFfcmVzcGFnZXNbcnFzdHAtPnJxX3Jlc3VzZWQtMV0pOwotCQkJcnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gcnFzdHAtPnJxX3Jlc3VzZWQtMTsKKwkJCWlmIChyZXNidWYtPmhlYWRbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFCisJCQkJCT4gUEFHRV9TSVpFKQorCQkJCWdvdG8gb3V0X2VycjsKKwkJCXJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9CisJCQkJcmVzYnVmLT5oZWFkWzBdLmlvdl9iYXNlCisJCQkJKyByZXNidWYtPmhlYWRbMF0uaW92X2xlbjsKIAkJCXJlc2J1Zi0+dGFpbFswXS5pb3ZfbGVuID0gMDsKKwkJCXJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IDA7CiAJCQlyZXN2ID0gJnJlc2J1Zi0+dGFpbFswXTsKIAkJfSBlbHNlIHsKIAkJCXJlc3YgPSAmcmVzYnVmLT50YWlsWzBdOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jYWNoZS5jIGIvbmV0L3N1bnJwYy9jYWNoZS5jCmluZGV4IDNhYzQxOTMuLjcwMjZiMDggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2FjaGUuYworKysgYi9uZXQvc3VucnBjL2NhY2hlLmMKQEAgLTE1OSw2ICsxNTksNyBAQAogCQlkZXRhaWwtPnVwZGF0ZSh0bXAsIG5ldyk7CiAJdG1wLT5uZXh0ID0gKmhlYWQ7CiAJKmhlYWQgPSB0bXA7CisJZGV0YWlsLT5lbnRyaWVzKys7CiAJY2FjaGVfZ2V0KHRtcCk7CiAJaXNfbmV3ID0gY2FjaGVfZnJlc2hfbG9ja2VkKHRtcCwgbmV3LT5leHBpcnlfdGltZSk7CiAJY2FjaGVfZnJlc2hfbG9ja2VkKG9sZCwgMCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N0YXRzLmMgYi9uZXQvc3VucnBjL3N0YXRzLmMKaW5kZXggZGVhNTI5Ni4uMTVjMmRiMiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdGF0cy5jCisrKyBiL25ldC9zdW5ycGMvc3RhdHMuYwpAQCAtMTc2LDcgKzE3Niw4IEBACiAJb3BfbWV0cmljcy0+b21fZXhlY3V0ZSArPSBleGVjdXRlOwogfQogCi12b2lkIF9wcmludF9uYW1lKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB1bnNpZ25lZCBpbnQgb3AsIHN0cnVjdCBycGNfcHJvY2luZm8gKnByb2NzKQorc3RhdGljIHZvaWQgX3ByaW50X25hbWUoc3RydWN0IHNlcV9maWxlICpzZXEsIHVuc2lnbmVkIGludCBvcCwKKwkJCXN0cnVjdCBycGNfcHJvY2luZm8gKnByb2NzKQogewogCWlmIChwcm9jc1tvcF0ucF9uYW1lKQogCQlzZXFfcHJpbnRmKHNlcSwgIlx0JTEyczogIiwgcHJvY3Nbb3BdLnBfbmFtZSk7CmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuYwppbmRleCA1NTUzOGY2Li41OGExYjZiIDEwMDY0NAotLS0gYS9uZXQvc3lzY3RsX25ldC5jCisrKyBiL25ldC9zeXNjdGxfbmV0LmMKQEAgLTM3LDE0ICszNyw2IEBACiAJCS5tb2RlCQk9IDA1NTUsCiAJCS5jaGlsZAkJPSBjb3JlX3RhYmxlLAogCX0sCi0jaWZkZWYgQ09ORklHX05FVAotCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0VUSEVSLAotCQkucHJvY25hbWUJPSAiZXRoZXJuZXQiLAotCQkubW9kZQkJPSAwNTU1LAotCQkuY2hpbGQJCT0gZXRoZXJfdGFibGUsCi0JfSwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19JTkVUCiAJewogCQkuY3RsX25hbWUJPSBORVRfSVBWNCwKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwppbmRleCA5NTMzMDdhLi5hM2JiYzg5IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCkBAIC0yMjksOCArMjI5LDcgQEAKIAkJCQkgICAgIHB1YmwtPm5vZGUsIHB1YmwtPnJlZiwgcHVibC0+a2V5KTsKICAgICAgICAgYXNzZXJ0KHAgPT0gcHVibCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7Ci0JaWYgKHB1YmwpCi0JCWtmcmVlKHB1YmwpOworCWtmcmVlKHB1YmwpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvYWZfd2FucGlwZS5jIGIvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKaW5kZXggOGI5YmY0YS4uYjEyNjUxOCAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKKysrIGIvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKQEAgLTU1LDEyICs1NSwxMCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhbnBpcGUuaD4KICNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlLmg+CiAjaW5jbHVkZSA8bGludXgvcGt0X3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwX3N0YXRlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvc2RsYV94MjUuaD4KIAogI2lmZGVmIENPTkZJR19JTkVUCiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV90aW1lci5jIGIvbmV0L3gyNS94MjVfdGltZXIuYwppbmRleCAwYTkyZTFkLi43MWZmMzA4IDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV90aW1lci5jCisrKyBiL25ldC94MjUveDI1X3RpbWVyLmMKQEAgLTExNCw4ICsxMTQsOSBAQAogCQkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERVNUUk9ZKSB8fAogCQkJICAgIChzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTiAmJgogCQkJICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7CisJCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJCXgyNV9kZXN0cm95X3NvY2tldChzayk7Ci0JCQkJZ290byB1bmxvY2s7CisJCQkJcmV0dXJuOwogCQkJfQogCQkJYnJlYWs7CiAKQEAgLTEyOCw3ICsxMjksNiBAQAogCX0KIHJlc3RhcnRfaGVhcnRiZWF0OgogCXgyNV9zdGFydF9oZWFydGJlYXQoc2spOwotdW5sb2NrOgogCWJoX3VubG9ja19zb2NrKHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCmluZGV4IDI0MDdhNzAuLjg5MWE2MDkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuYworKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKQEAgLTE4LDcgKzE4LDcgQEAKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgc3AtPmxlbjsgaSsrKQotCQl4ZnJtX3N0YXRlX3B1dChzcC0+eFtpXS54dmVjKTsKKwkJeGZybV9zdGF0ZV9wdXQoc3AtPnh2ZWNbaV0pOwogCWttZW1fY2FjaGVfZnJlZShzZWNwYXRoX2NhY2hlcCwgc3ApOwogfQogRVhQT1JUX1NZTUJPTChfX3NlY3BhdGhfZGVzdHJveSk7CkBAIC0zNyw3ICszNyw3IEBACiAKIAkJbWVtY3B5KHNwLCBzcmMsIHNpemVvZigqc3ApKTsKIAkJZm9yIChpID0gMDsgaSA8IHNwLT5sZW47IGkrKykKLQkJCXhmcm1fc3RhdGVfaG9sZChzcC0+eFtpXS54dmVjKTsKKwkJCXhmcm1fc3RhdGVfaG9sZChzcC0+eHZlY1tpXSk7CiAJfQogCWF0b21pY19zZXQoJnNwLT5yZWZjbnQsIDEpOwogCXJldHVybiBzcDsKQEAgLTYyLDcgKzYyLDcgQEAKIAljYXNlIElQUFJPVE9fQ09NUDoKIAkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcF9jb21wX2hkcikpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCSpzcGkgPSBudG9obChudG9ocygqKHUxNiopKHNrYi0+aC5yYXcgKyAyKSkpOworCQkqc3BpID0gaHRvbmwobnRvaHMoKih1MTYqKShza2ItPmgucmF3ICsgMikpKTsKIAkJKnNlcSA9IDA7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCBmNWVhZTlmLi5iNDY5YzhiIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTU3LDEyICs1NywxMiBAQAogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAl0eXBlbWFwID0gYWZpbmZvLT50eXBlX21hcDsKIAotCXdyaXRlX2xvY2soJnR5cGVtYXAtPmxvY2spOworCXdyaXRlX2xvY2tfYmgoJnR5cGVtYXAtPmxvY2spOwogCWlmIChsaWtlbHkodHlwZW1hcC0+bWFwW3R5cGUtPnByb3RvXSA9PSBOVUxMKSkKIAkJdHlwZW1hcC0+bWFwW3R5cGUtPnByb3RvXSA9IHR5cGU7CiAJZWxzZQogCQllcnIgPSAtRUVYSVNUOwotCXdyaXRlX3VubG9jaygmdHlwZW1hcC0+bG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZ0eXBlbWFwLT5sb2NrKTsKIAl4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKGFmaW5mbyk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc4LDEyICs3OCwxMiBAQAogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAl0eXBlbWFwID0gYWZpbmZvLT50eXBlX21hcDsKIAotCXdyaXRlX2xvY2soJnR5cGVtYXAtPmxvY2spOworCXdyaXRlX2xvY2tfYmgoJnR5cGVtYXAtPmxvY2spOwogCWlmICh1bmxpa2VseSh0eXBlbWFwLT5tYXBbdHlwZS0+cHJvdG9dICE9IHR5cGUpKQogCQllcnIgPSAtRU5PRU5UOwogCWVsc2UKIAkJdHlwZW1hcC0+bWFwW3R5cGUtPnByb3RvXSA9IE5VTEw7Ci0Jd3JpdGVfdW5sb2NrKCZ0eXBlbWFwLT5sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnR5cGVtYXAtPmxvY2spOwogCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTQzLDkgKzk0Myw5IEBACiAJfSBlbHNlCiAJCXN0YXJ0ID0gLTE7CiAJZm9yICg7IGlkeCA8IHNwLT5sZW47IGlkeCsrKSB7Ci0JCWlmICh4ZnJtX3N0YXRlX29rKHRtcGwsIHNwLT54W2lkeF0ueHZlYywgZmFtaWx5KSkKKwkJaWYgKHhmcm1fc3RhdGVfb2sodG1wbCwgc3AtPnh2ZWNbaWR4XSwgZmFtaWx5KSkKIAkJCXJldHVybiArK2lkeDsKLQkJaWYgKHNwLT54W2lkeF0ueHZlYy0+cHJvcHMubW9kZSkKKwkJaWYgKHNwLT54dmVjW2lkeF0tPnByb3BzLm1vZGUpCiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIHN0YXJ0OwpAQCAtOTY4LDcgKzk2OCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBzZWNwYXRoX2hhc190dW5uZWwoc3RydWN0IHNlY19wYXRoICpzcCwgaW50IGspCiB7CiAJZm9yICg7IGsgPCBzcC0+bGVuOyBrKyspIHsKLQkJaWYgKHNwLT54W2tdLnh2ZWMtPnByb3BzLm1vZGUpCisJCWlmIChzcC0+eHZlY1trXS0+cHJvcHMubW9kZSkKIAkJCXJldHVybiAxOwogCX0KIApAQCAtOTk0LDggKzk5NCw4IEBACiAJCWludCBpOwogCiAJCWZvciAoaT1za2ItPnNwLT5sZW4tMTsgaT49MDsgaS0tKSB7Ci0JCQlzdHJ1Y3Qgc2VjX2RlY2FwX3N0YXRlICp4dmVjID0gJihza2ItPnNwLT54W2ldKTsKLQkJCWlmICgheGZybV9zZWxlY3Rvcl9tYXRjaCgmeHZlYy0+eHZlYy0+c2VsLCAmZmwsIGZhbWlseSkpCisJCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IHNrYi0+c3AtPnh2ZWNbaV07CisJCQlpZiAoIXhmcm1fc2VsZWN0b3JfbWF0Y2goJngtPnNlbCwgJmZsLCBmYW1pbHkpKQogCQkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTI1MSw3ICsxMjUxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHVubGlrZWx5KGFmaW5mby0+ZmFtaWx5ID49IE5QUk9UTykpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCXdyaXRlX2xvY2soJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CiAJaWYgKHVubGlrZWx5KHhmcm1fcG9saWN5X2FmaW5mb1thZmluZm8tPmZhbWlseV0gIT0gTlVMTCkpCiAJCWVyciA9IC1FTk9CVUZTOwogCWVsc2UgewpAQCAtMTI2OCw3ICsxMjY4LDcgQEAKIAkJCWFmaW5mby0+Z2FyYmFnZV9jb2xsZWN0ID0gX194ZnJtX2dhcmJhZ2VfY29sbGVjdDsKIAkJeGZybV9wb2xpY3lfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSA9IGFmaW5mbzsKIAl9Ci0Jd3JpdGVfdW5sb2NrKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKTsKQEAgLTEyODAsNyArMTI4MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICh1bmxpa2VseShhZmluZm8tPmZhbWlseSA+PSBOUFJPVE8pKQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKLQl3cml0ZV9sb2NrKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CisJd3JpdGVfbG9ja19iaCgmeGZybV9wb2xpY3lfYWZpbmZvX2xvY2spOwogCWlmIChsaWtlbHkoeGZybV9wb2xpY3lfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSAhPSBOVUxMKSkgewogCQlpZiAodW5saWtlbHkoeGZybV9wb2xpY3lfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSAhPSBhZmluZm8pKQogCQkJZXJyID0gLUVJTlZBTDsKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAJCQlhZmluZm8tPmdhcmJhZ2VfY29sbGVjdCA9IE5VTEw7CiAJCX0KIAl9Ci0Jd3JpdGVfdW5sb2NrKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfdW5yZWdpc3Rlcl9hZmluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IGE4ZTE0ZGMuLjkzYTJmMzYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTgwNSwxNiArODA1LDIyIEBACiAJY2FzZSBYRlJNX1JFUExBWV9VUERBVEU6CiAJCWlmICh4LT5yZXBsYXlfbWF4ZGlmZiAmJgogCQkgICAgKHgtPnJlcGxheS5zZXEgLSB4LT5wcmVwbGF5LnNlcSA8IHgtPnJlcGxheV9tYXhkaWZmKSAmJgotCQkgICAgKHgtPnJlcGxheS5vc2VxIC0geC0+cHJlcGxheS5vc2VxIDwgeC0+cmVwbGF5X21heGRpZmYpKQotCQkJcmV0dXJuOworCQkgICAgKHgtPnJlcGxheS5vc2VxIC0geC0+cHJlcGxheS5vc2VxIDwgeC0+cmVwbGF5X21heGRpZmYpKSB7CisJCQlpZiAoeC0+eGZsYWdzICYgWEZSTV9USU1FX0RFRkVSKQorCQkJCWV2ZW50ID0gWEZSTV9SRVBMQVlfVElNRU9VVDsKKwkJCWVsc2UKKwkJCQlyZXR1cm47CisJCX0KIAogCQlicmVhazsKIAogCWNhc2UgWEZSTV9SRVBMQVlfVElNRU9VVDoKIAkJaWYgKCh4LT5yZXBsYXkuc2VxID09IHgtPnByZXBsYXkuc2VxKSAmJgogCQkgICAgKHgtPnJlcGxheS5iaXRtYXAgPT0geC0+cHJlcGxheS5iaXRtYXApICYmCi0JCSAgICAoeC0+cmVwbGF5Lm9zZXEgPT0geC0+cHJlcGxheS5vc2VxKSkKKwkJICAgICh4LT5yZXBsYXkub3NlcSA9PSB4LT5wcmVwbGF5Lm9zZXEpKSB7CisJCQl4LT54ZmxhZ3MgfD0gWEZSTV9USU1FX0RFRkVSOwogCQkJcmV0dXJuOworCQl9CiAKIAkJYnJlYWs7CiAJfQpAQCAtODI1LDggKzgzMSwxMCBAQAogCWttX3N0YXRlX25vdGlmeSh4LCAmYyk7CiAKIAlpZiAoeC0+cmVwbGF5X21heGFnZSAmJgotCSAgICAhbW9kX3RpbWVyKCZ4LT5ydGltZXIsIGppZmZpZXMgKyB4LT5yZXBsYXlfbWF4YWdlKSkKKwkgICAgIW1vZF90aW1lcigmeC0+cnRpbWVyLCBqaWZmaWVzICsgeC0+cmVwbGF5X21heGFnZSkpIHsKIAkJeGZybV9zdGF0ZV9ob2xkKHgpOworCQl4LT54ZmxhZ3MgJj0gflhGUk1fVElNRV9ERUZFUjsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fcmVwbGF5X25vdGlmeSk7CiAKQEAgLTgzNiwxMCArODQ0LDE1IEBACiAKIAlzcGluX2xvY2soJngtPmxvY2spOwogCi0JaWYgKHhmcm1fYWV2ZW50X2lzX29uKCkgJiYgeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkKLQkJeGZybV9yZXBsYXlfbm90aWZ5KHgsIFhGUk1fUkVQTEFZX1RJTUVPVVQpOworCWlmICh4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX1ZBTElEKSB7CisJCWlmICh4ZnJtX2FldmVudF9pc19vbigpKQorCQkJeGZybV9yZXBsYXlfbm90aWZ5KHgsIFhGUk1fUkVQTEFZX1RJTUVPVVQpOworCQllbHNlCisJCQl4LT54ZmxhZ3MgfD0gWEZSTV9USU1FX0RFRkVSOworCX0KIAogCXNwaW5fdW5sb2NrKCZ4LT5sb2NrKTsKKwl4ZnJtX3N0YXRlX3B1dCh4KTsKIH0KIAogaW50IHhmcm1fcmVwbGF5X2NoZWNrKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgc2VxKQpAQCAtMTA0OCw3ICsxMDYxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHVubGlrZWx5KGFmaW5mby0+ZmFtaWx5ID49IE5QUk9UTykpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCXdyaXRlX2xvY2soJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOwogCWlmICh1bmxpa2VseSh4ZnJtX3N0YXRlX2FmaW5mb1thZmluZm8tPmZhbWlseV0gIT0gTlVMTCkpCiAJCWVyciA9IC1FTk9CVUZTOwogCWVsc2UgewpAQCAtMTA1Niw3ICsxMDY5LDcgQEAKIAkJYWZpbmZvLT5zdGF0ZV9ieXNwaSA9IHhmcm1fc3RhdGVfYnlzcGk7CiAJCXhmcm1fc3RhdGVfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSA9IGFmaW5mbzsKIAl9Ci0Jd3JpdGVfdW5sb2NrKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfcmVnaXN0ZXJfYWZpbmZvKTsKQEAgLTEwNjgsNyArMTA4MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICh1bmxpa2VseShhZmluZm8tPmZhbWlseSA+PSBOUFJPVE8pKQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKLQl3cml0ZV9sb2NrKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKIAlpZiAobGlrZWx5KHhmcm1fc3RhdGVfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSAhPSBOVUxMKSkgewogCQlpZiAodW5saWtlbHkoeGZybV9zdGF0ZV9hZmluZm9bYWZpbmZvLT5mYW1pbHldICE9IGFmaW5mbykpCiAJCQllcnIgPSAtRUlOVkFMOwpAQCAtMTA3OCw3ICsxMDkxLDcgQEAKIAkJCWFmaW5mby0+c3RhdGVfYnlkc3QgPSBOVUxMOwogCQl9CiAJfQotCXdyaXRlX3VubG9jaygmeGZybV9zdGF0ZV9hZmluZm9fbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3VucmVnaXN0ZXJfYWZpbmZvKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCmluZGV4IDU5NjIwYjEuLmIwZDA2N2IgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKKysrIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQpAQCAtODcsNiArODcsMTEgQEAKICMgJChRKSQoTUFLRSkgJChidWlsZCk9ZGlyCiBidWlsZCA6PSAtZiAkKGlmICQoS0JVSUxEX1NSQyksJChzcmN0cmVlKS8pc2NyaXB0cy9NYWtlZmlsZS5idWlsZCBvYmoKIAorIyBQcmVmaXggLUkgd2l0aCAkKHNyY3RyZWUpIGlmIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoCithZGR0cmVlID0gJChpZiAkKGZpbHRlci1vdXQgLUkvJSwkKDEpKSwkKHBhdHN1YnN0IC1JJSwtSSQoc3JjdHJlZSkvJSwkKDEpKSkgJCgxKQorIyBGaW5kIGFsbCAtSSBvcHRpb25zIGFuZCBjYWxsIGFkZHRyZWUKK2ZsYWdzID0gJChmb3JlYWNoIG8sJCgkKDEpKSwkKGlmICQoZmlsdGVyIC1JJSwkKG8pKSwkKGNhbGwgYWRkdHJlZSwkKG8pKSwkKG8pKSkKKwogIyBJZiBxdWlldCBpcyBzZXQsIG9ubHkgcHJpbnQgc2hvcnQgdmVyc2lvbiBvZiBjb21tYW5kCiBjbWQgPSBAJChlY2hvLWNtZCkgJChjbWRfJCgxKSkKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5saWIgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgppbmRleCA1NTA3OThmLi4yY2I0OTM1IDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmxpYgorKysgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgpAQCAtOTksMTEgKzk5LDYgQEAKIF9fY3BwX2ZsYWdzICAgICA9ICQoX2NwcF9mbGFncykKIGVsc2UKIAotIyBQcmVmaXggLUkgd2l0aCAkKHNyY3RyZWUpIGlmIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoCi1hZGR0cmVlID0gJChpZiAkKGZpbHRlci1vdXQgLUkvJSwkKDEpKSwkKHBhdHN1YnN0IC1JJSwtSSQoc3JjdHJlZSkvJSwkKDEpKSkgJCgxKQotIyBGaW5kIGFsbCAtSSBvcHRpb25zIGFuZCBjYWxsIGFkZHRyZWUKLWZsYWdzID0gJChmb3JlYWNoIG8sJCgkKDEpKSwkKGlmICQoZmlsdGVyIC1JJSwkKG8pKSwkKGNhbGwgYWRkdHJlZSwkKG8pKSwkKG8pKSkKLQogIyAtSSQob2JqKSBsb2NhdGVzIGdlbmVyYXRlZCAuaCBmaWxlcwogIyAkKGNhbGwgYWRkdHJlZSwtSSQob2JqKSkgbG9jYXRlcyAuaCBmaWxlcyBpbiBzcmN0cmVlLCBmcm9tIGdlbmVyYXRlZCAuYyBmaWxlcwogIyAgIGFuZCBsb2NhdGVzIGdlbmVyYXRlZCAuaCBmaWxlcwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ibG9hdC1vLW1ldGVyIGIvc2NyaXB0cy9ibG9hdC1vLW1ldGVyCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2tzdGFjay5wbCBiL3NjcmlwdHMvY2hlY2tzdGFjay5wbApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaCBiL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCmluZGV4IDZkNDExMTYuLjMzMWMwNzkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCisrKyBiL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCkBAIC0xLDIyICsxLDU1IEBACiAjIS9iaW4vYmFzaAogIyBDb3B5cmlnaHQgKEMpIE1hcnRpbiBTY2hsZW1tZXIgPGF6YXJhaEBub3NmZXJhdHUuemEub3JnPgorIyBDb3B5cmlnaHQgKGMpIDIwMDYgICAgICAgICAgIFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KKyMKICMgUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMCiAjCi0jIEdlbmVyYXRlIGEgbmV3bGluZSBzZXBhcmF0ZWQgbGlzdCBvZiBlbnRyaWVzIGZyb20gdGhlIGZpbGUvZGlyZWN0b3J5Ci0jIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50LgotIwotIyBJZiBhIGZpbGUvZGlyZWN0b3J5IGlzIG5vdCBzdXBwbGllZCB0aGVuIGdlbmVyYXRlIGEgc21hbGwgZHVtbXkgZmlsZS4KLSMKLSMgVGhlIG91dHB1dCBpcyBzdWl0YWJsZSBmb3IgZ2VuX2luaXRfY3BpbyBidWlsdCBmcm9tIHVzci9nZW5faW5pdF9jcGlvLmMuCi0jCisjIEdlbmVyYXRlIGEgY3BpbyBwYWNrZWQgaW5pdHJhbWZzLiBJdCB1c2VzIGdlbl9pbml0X2NwaW8gdG8gZ2VuZXJhdGUKKyMgdGhlIGNwaW8gYXJjaGl2ZSwgYW5kIGd6aXAgdG8gcGFjayBpdC4KKyMgVGhlIHNjcmlwdCBtYXkgYWxzbyBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbnB1dGZpbGUgdXNlZCBmb3IgZ2VuX2luaXRfY3BpbworIyBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgZ2VuX2luaXRfY3BpbyBpcyBsb2NhdGVkIGluIHVzci8gZGlyZWN0b3J5CisKKyMgZXJyb3Igb3V0IG9uIGVycm9ycworc2V0IC1lCisKK3VzYWdlKCkgeworY2F0IDw8IEVPRgorVXNhZ2U6CiskMCBbLW8gPGZpbGU+XSBbLXUgPHVpZD5dIFstZyA8Z2lkPl0gey1kIHwgPGNwaW9fc291cmNlPn0gLi4uCisJLW8gPGZpbGU+ICAgICAgQ3JlYXRlIGd6aXBwZWQgaW5pdHJhbWZzIGZpbGUgbmFtZWQgPGZpbGU+IHVzaW5nCisJICAgICAgICAgICAgICAgZ2VuX2luaXRfY3BpbyBhbmQgZ3ppcAorCS11IDx1aWQ+ICAgICAgIFVzZXIgSUQgdG8gbWFwIHRvIHVzZXIgSUQgMCAocm9vdCkuCisJICAgICAgICAgICAgICAgPHVpZD4gaXMgb25seSBtZWFuaW5nZnVsIGlmIDxjcGlvX3NvdXJjZT4KKwkgICAgICAgICAgICAgICBpcyBhIGRpcmVjdG9yeS4KKwktZyA8Z2lkPiAgICAgICBHcm91cCBJRCB0byBtYXAgdG8gZ3JvdXAgSUQgMCAocm9vdCkuCisJICAgICAgICAgICAgICAgPGdpZD4gaXMgb25seSBtZWFuaW5nZnVsIGlmIDxjcGlvX3NvdXJjZT4KKwkgICAgICAgICAgICAgICBpcyBhIGRpcmVjdG9yeS4KKwk8Y3Bpb19zb3VyY2U+ICBGaWxlIGxpc3Qgb3IgZGlyZWN0b3J5IGZvciBjcGlvIGFyY2hpdmUuCisJICAgICAgICAgICAgICAgSWYgPGNwaW9fc291cmNlPiBpcyBhIC5jcGlvIGZpbGUgaXQgd2lsbCBiZSB1c2VkCisJCSAgICAgICBhcyBkaXJlY3QgaW5wdXQgdG8gaW5pdHJhbWZzLgorCS1kICAgICAgICAgICAgIE91dHB1dCB0aGUgZGVmYXVsdCBjcGlvIGxpc3QuCisKK0FsbCBvcHRpb25zIGV4Y2VwdCAtbyBhbmQgLWwgbWF5IGJlIHJlcGVhdGVkIGFuZCBhcmUgaW50ZXJwcmV0ZWQKK3NlcXVlbnRpYWxseSBhbmQgaW1tZWRpYXRlbHkuICAtdSBhbmQgLWcgc3RhdGVzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzCis8Y3Bpb19zb3VyY2U+IG9wdGlvbnMgc28gYW4gZXhwbGljaXQgIi11IDAgLWcgMCIgaXMgcmVxdWlyZWQKK3RvIHJlc2V0IHRoZSByb290L2dyb3VwIG1hcHBpbmcuCitFT0YKK30KKworbGlzdF9kZWZhdWx0X2luaXRyYW1mcygpIHsKKwkjIGVjaG8gdXNyL2tpbml0L2tpbml0CisJOgorfQogCiBkZWZhdWx0X2luaXRyYW1mcygpIHsKLQljYXQgPDwtRU9GCisJY2F0IDw8LUVPRiA+PiAke291dHB1dH0KIAkJIyBUaGlzIGlzIGEgdmVyeSBzaW1wbGUsIGRlZmF1bHQgaW5pdHJhbWZzCiAKIAkJZGlyIC9kZXYgMDc1NSAwIDAKIAkJbm9kIC9kZXYvY29uc29sZSAwNjAwIDAgMCBjIDUgMQogCQlkaXIgL3Jvb3QgMDcwMCAwIDAKKwkJIyBmaWxlIC9raW5pdCB1c3Iva2luaXQva2luaXQgMDc1NSAwIDAKKwkJIyBzbGluayAvaW5pdCBraW5pdCAwNzU1IDAgMAogCUVPRgogfQogCkBAIC00MiwxOCArNzUsMjggQEAKIAlyZXR1cm4gMAogfQogCi1wcmludF9tdGltZSgpIHsKLQlsb2NhbCBhcmd2MT0iJDEiCi0JbG9jYWwgbXlfbXRpbWU9IjAiCi0KLQlpZiBbIC1lICIke2FyZ3YxfSIgXTsgdGhlbgotCQlteV9tdGltZT0kKGZpbmQgIiR7YXJndjF9IiAtcHJpbnRmICIlVEBcbiIgfCBzb3J0IC1yIHwgaGVhZCAtbiAxKQotCWZpCi0JCi0JZWNobyAiIyBMYXN0IG1vZGlmaWVkOiAke215X210aW1lfSIKLQllY2hvCitsaXN0X3ByaW50X210aW1lKCkgeworCToKIH0KIAorcHJpbnRfbXRpbWUoKSB7CisJbG9jYWwgbXlfbXRpbWU9IjAiCisKKwlpZiBbIC1lICIkMSIgXTsgdGhlbgorCQlteV9tdGltZT0kKGZpbmQgIiQxIiAtcHJpbnRmICIlVEBcbiIgfCBzb3J0IC1yIHwgaGVhZCAtbiAxKQorCWZpCisKKwllY2hvICIjIExhc3QgbW9kaWZpZWQ6ICR7bXlfbXRpbWV9IiA+PiAke291dHB1dH0KKwllY2hvICIiID4+ICR7b3V0cHV0fQorfQorCitsaXN0X3BhcnNlKCkgeworCWVjaG8gIiQxIFxcIgorfQorCisjIGZvciBlYWNoIGZpbGUgcHJpbnQgYSBsaW5lIGluIGZvbGxvd2luZyBmb3JtYXQKKyMgPGZpbGV0eXBlPiA8bmFtZT4gPHBhdGggdG8gZmlsZT4gPG9jdGFsIG1vZGU+IDx1aWQ+IDxnaWQ+CisjIGZvciBsaW5rcywgZGV2aWNlcyBldGMgdGhlIGZvcm1hdCBkaWZmZXJzLiBTZWUgZ2VuX2luaXRfY3BpbyBmb3IgZGV0YWlscwogcGFyc2UoKSB7CiAJbG9jYWwgbG9jYXRpb249IiQxIgogCWxvY2FsIG5hbWU9IiR7bG9jYXRpb24vJHtzcmNkaXJ9Ly99IgpAQCAtOTksODAgKzE0MiwxMTYgQEAKIAkJCTs7CiAJZXNhYwogCi0JZWNobyAiJHtzdHJ9IgorCWVjaG8gIiR7c3RyfSIgPj4gJHtvdXRwdXR9CiAKIAlyZXR1cm4gMAogfQogCi11c2FnZSgpIHsKLQlwcmludGYgICAgIlVzYWdlOlxuIgotCXByaW50ZiAgICAiJDAgWyBbLXUgPHJvb3RfdWlkPl0gWy1nIDxyb290X2dpZD5dIFstZCB8IDxjcGlvX3NvdXJjZT5dIF0gLiAuIC5cbiIKLQlwcmludGYgICAgIlxuIgotCXByaW50ZiAtLSAiLXUgPHJvb3RfdWlkPiAgVXNlciBJRCB0byBtYXAgdG8gdXNlciBJRCAwIChyb290KS5cbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIDxyb290X3VpZD4gaXMgb25seSBtZWFuaW5nZnVsIGlmIDxjcGlvX3NvdXJjZT5cbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIGlzIGEgZGlyZWN0b3J5LlxuIgotCXByaW50ZiAtLSAiLWcgPHJvb3RfZ2lkPiAgR3JvdXAgSUQgdG8gbWFwIHRvIGdyb3VwIElEIDAgKHJvb3QpLlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgPHJvb3RfZ2lkPiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgPGNwaW9fc291cmNlPlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgaXMgYSBkaXJlY3RvcnkuXG4iCi0JcHJpbnRmICAgICI8Y3Bpb19zb3VyY2U+ICBGaWxlIGxpc3Qgb3IgZGlyZWN0b3J5IGZvciBjcGlvIGFyY2hpdmUuXG4iCi0JcHJpbnRmICAgICIgICAgICAgICAgICAgICBJZiA8Y3Bpb19zb3VyY2U+IGlzIG5vdCBwcm92aWRlZCB0aGVuIGFcbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIGEgZGVmYXVsdCBsaXN0IHdpbGwgYmUgb3V0cHV0LlxuIgotCXByaW50ZiAtLSAiLWQgICAgICAgICAgICAgT3V0cHV0IHRoZSBkZWZhdWx0IGNwaW8gbGlzdC4gIElmIG5vIDxjcGlvX3NvdXJjZT5cbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIGlzIGdpdmVuIHRoZW4gdGhlIGRlZmF1bHQgY3BpbyBsaXN0IHdpbGwgYmUgb3V0cHV0LlxuIgotCXByaW50ZiAgICAiXG4iCi0JcHJpbnRmICAgICJBbGwgb3B0aW9ucyBtYXkgYmUgcmVwZWF0ZWQgYW5kIGFyZSBpbnRlcnByZXRlZCBzZXF1ZW50aWFsbHlcbiIKLQlwcmludGYgICAgImFuZCBpbW1lZGlhdGVseS4gIC11IGFuZCAtZyBzdGF0ZXMgYXJlIHByZXNlcnZlZCBhY3Jvc3NcbiIKLQlwcmludGYgICAgIjxjcGlvX3NvdXJjZT4gb3B0aW9ucyBzbyBhbiBleHBsaWNpdCBcIi11IDAgLWcgMFwiIGlzIHJlcXVpcmVkXG4iCi0JcHJpbnRmICAgICJ0byByZXNldCB0aGUgcm9vdC9ncm91cCBtYXBwaW5nLlxuIgordW5rbm93bl9vcHRpb24oKSB7CisJcHJpbnRmICJFUlJPUjogdW5rbm93biBvcHRpb24gXCIkYXJnXCJcbiIgPiYyCisJcHJpbnRmICJJZiB0aGUgZmlsZW5hbWUgdmFsaWRseSBiZWdpbnMgd2l0aCAnLScsICIgPiYyCisJcHJpbnRmICJ0aGVuIGl0IG11c3QgYmUgcHJlZml4ZWRcbiIgPiYyCisJcHJpbnRmICJieSAnLi8nIHNvIHRoYXQgaXQgd29uJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gb3B0aW9uLiIgPiYyCisJcHJpbnRmICJcbiIgPiYyCisJdXNhZ2UgPiYyCisJZXhpdCAxCiB9CiAKLWJ1aWxkX2xpc3QoKSB7Ci0JcHJpbnRmICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIyAkY3Bpb19zb3VyY2VcbiIKK2xpc3RfaGVhZGVyKCkgeworCWVjaG8gImRlcHNfaW5pdHJhbWZzIDo9IFxcIgorfQogCi0JaWYgWyAtZiAiJGNwaW9fc291cmNlIiBdOyB0aGVuCi0JCXByaW50X210aW1lICIkY3Bpb19zb3VyY2UiCi0JCWNhdCAiJGNwaW9fc291cmNlIgotCWVsaWYgWyAtZCAiJGNwaW9fc291cmNlIiBdOyB0aGVuCi0JCXNyY2Rpcj0kKGVjaG8gIiRjcGlvX3NvdXJjZSIgfCBzZWQgLWUgJ3M6Ly8qOi86ZycpCi0JCWRpcmxpc3Q9JChmaW5kICIke3NyY2Rpcn0iIC1wcmludGYgIiVwICVtICVVICVHXG4iIDI+L2Rldi9udWxsKQoraGVhZGVyKCkgeworCXByaW50ZiAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiMgJDFcbiIgPj4gJHtvdXRwdXR9Cit9CiAKLQkJIyBJZiAkZGlybGlzdCBpcyBvbmx5IG9uZSBsaW5lLCB0aGVuIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHkKLQkJaWYgWyAgIiQoZWNobyAiJHtkaXJsaXN0fSIgfCB3YyAtbCkiIC1ndCAxIF07IHRoZW4KLQkJCXByaW50X210aW1lICIkY3Bpb19zb3VyY2UiCi0JCQotCQkJZWNobyAiJHtkaXJsaXN0fSIgfCBcCi0JCQl3aGlsZSByZWFkIHg7IGRvCi0JCQkJcGFyc2UgJHt4fQotCQkJZG9uZQotCQllbHNlCi0JCQkjIEZhaWxzYWZlIGluIGNhc2UgZGlyZWN0b3J5IGlzIGVtcHR5Ci0JCQlkZWZhdWx0X2luaXRyYW1mcworIyBwcm9jZXNzIG9uZSBkaXJlY3RvcnkgKGluY2wgc3ViLWRpcmVjdG9yaWVzKQorZGlyX2ZpbGVsaXN0KCkgeworCSR7ZGVwX2xpc3R9aGVhZGVyICIkMSIKKworCXNyY2Rpcj0kKGVjaG8gIiQxIiB8IHNlZCAtZSAnczovLyo6LzpnJykKKwlkaXJsaXN0PSQoZmluZCAiJHtzcmNkaXJ9IiAtcHJpbnRmICIlcCAlbSAlVSAlR1xuIiAyPi9kZXYvbnVsbCkKKworCSMgSWYgJGRpcmxpc3QgaXMgb25seSBvbmUgbGluZSwgdGhlbiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5CisJaWYgWyAgIiQoZWNobyAiJHtkaXJsaXN0fSIgfCB3YyAtbCkiIC1ndCAxIF07IHRoZW4KKwkJJHtkZXBfbGlzdH1wcmludF9tdGltZSAiJDEiCisKKwkJZWNobyAiJHtkaXJsaXN0fSIgfCBcCisJCXdoaWxlIHJlYWQgeDsgZG8KKwkJCSR7ZGVwX2xpc3R9cGFyc2UgJHt4fQorCQlkb25lCisJZmkKK30KKworIyBpZiBvbmx5IG9uZSBmaWxlIGlzIHNwZWNpZmllZCBhbmQgaXQgaXMgLmNwaW8gZmlsZSB0aGVuIHVzZSBpdCBkaXJlY3QgYXMgZnMKKyMgaWYgYSBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIHRoZW4gYWRkIGFsbCBmaWxlcyBpbiBnaXZlbiBkaXJlY290cnkgdG8gZnMKKyMgaWYgYSByZWd1bGFyIGZpbGUgaXMgc3BlY2lmaWVkIGFzc3VtZSBpdCBpcyBpbiBnZW5faW5pdHJhbWZzIGZvcm1hdAoraW5wdXRfZmlsZSgpIHsKKwlzb3VyY2U9IiQxIgorCWlmIFsgLWYgIiQxIiBdOyB0aGVuCisJCSR7ZGVwX2xpc3R9aGVhZGVyICIkMSIKKwkJaXNfY3Bpbz0iJChlY2hvICIkMSIgfCBzZWQgJ3MvXi4qXC5jcGlvL2NwaW8vJykiCisJCWlmIFsgJDIgLWVxIDAgLWEgJHtpc19jcGlvfSA9PSAiY3BpbyIgXTsgdGhlbgorCQkJY3Bpb19maWxlPSQxCisJCQlbICEgLXogJHtkZXBfbGlzdH0gXSAmJiBlY2hvICIkMSIKKwkJCXJldHVybiAwCiAJCWZpCisJCWlmIFsgLXogJHtkZXBfbGlzdH0gXTsgdGhlbgorCQkJcHJpbnRfbXRpbWUgIiQxIiA+PiAke291dHB1dH0KKwkJCWNhdCAiJDEiICAgICAgICAgPj4gJHtvdXRwdXR9CisJCWVsc2UKKwkJCWNhdCAiJDEiIHwgd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlIHBlcm0gOyBkbworCQkJCWlmIFsgIiR0eXBlIiA9PSAiZmlsZSIgXTsgdGhlbgorCQkJCQllY2hvICIkZmlsZSBcXCI7CisJCQkJZmkKKwkJCWRvbmUKKwkJZmkKKwllbGlmIFsgLWQgIiQxIiBdOyB0aGVuCisJCWRpcl9maWxlbGlzdCAiJDEiCiAJZWxzZQotCQllY2hvICIgICQwOiBDYW5ub3Qgb3BlbiAnJGNwaW9fc291cmNlJyIgPiYyCisJCWVjaG8gIiAgJHtwcm9nfTogQ2Fubm90IG9wZW4gJyQxJyIgPiYyCiAJCWV4aXQgMQogCWZpCiB9CiAKLQorcHJvZz0kMAogcm9vdF91aWQ9MAogcm9vdF9naWQ9MAorZGVwX2xpc3Q9CitjcGlvX2ZpbGU9CitjcGlvX2xpc3Q9CitvdXRwdXQ9Ii9kZXYvc3Rkb3V0Igorb3V0cHV0X2ZpbGU9IiIKIAorYXJnPSIkMSIKK2Nhc2UgIiRhcmciIGluCisJIi1sIikJIyBmaWxlcyBpbmNsdWRlZCBpbiBpbml0cmFtZnMgLSB1c2VkIGJ5IGtidWlsZAorCQlkZXBfbGlzdD0ibGlzdF8iCisJCXNoaWZ0CisJCTs7CisJIi1vIikJIyBnZW5lcmF0ZSBnemlwcGVkIGNwaW8gaW1hZ2UgbmFtZWQgJDEKKwkJc2hpZnQKKwkJb3V0cHV0X2ZpbGU9IiQxIgorCQljcGlvX2xpc3Q9IiQobWt0ZW1wICR7VE1QRElSOi0vdG1wfS9jcGlvbGlzdC5YWFhYWFgpIgorCQlvdXRwdXQ9JHtjcGlvX2xpc3R9CisJCXNoaWZ0CisJCTs7Citlc2FjCiB3aGlsZSBbICQjIC1ndCAwIF07IGRvCiAJYXJnPSIkMSIKIAlzaGlmdAogCWNhc2UgIiRhcmciIGluCi0JCSItdSIpCisJCSItdSIpCSMgbWFwICQxIHRvIHVpZD0wIChyb290KQogCQkJcm9vdF91aWQ9IiQxIgogCQkJc2hpZnQKIAkJCTs7Ci0JCSItZyIpCisJCSItZyIpCSMgbWFwICQxIHRvIGdpZD0wIChyb290KQogCQkJcm9vdF9naWQ9IiQxIgogCQkJc2hpZnQKIAkJCTs7Ci0JCSItZCIpCisJCSItZCIpCSMgZGlzcGxheSBkZWZhdWx0IGluaXRyYW1mcyBsaXN0CiAJCQlkZWZhdWx0X2xpc3Q9IiRhcmciCi0JCQlkZWZhdWx0X2luaXRyYW1mcworCQkJJHtkZXBfbGlzdH1kZWZhdWx0X2luaXRyYW1mcwogCQkJOzsKIAkJIi1oIikKIAkJCXVzYWdlCkBAIC0xODEsMjMgKzI2MCwyNyBAQAogCQkqKQogCQkJY2FzZSAiJGFyZyIgaW4KIAkJCQkiLSIqKQotCQkJCQlwcmludGYgIkVSUk9SOiB1bmtub3duIG9wdGlvbiBcIiRhcmdcIlxuIiA+JjIKLQkJCQkJcHJpbnRmICJJZiB0aGUgZmlsZW5hbWUgdmFsaWRseSBiZWdpbnMgd2l0aCAnLScsIHRoZW4gaXQgbXVzdCBiZSBwcmVmaXhlZFxuIiA+JjIKLQkJCQkJcHJpbnRmICJieSAnLi8nIHNvIHRoYXQgaXQgd29uJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gb3B0aW9uLiIgPiYyCi0JCQkJCXByaW50ZiAiXG4iID4mMgotCQkJCQl1c2FnZSA+JjIKLQkJCQkJZXhpdCAxCisJCQkJCXVua25vd25fb3B0aW9uCiAJCQkJCTs7Ci0JCQkJKikKLQkJCQkJY3Bpb19zb3VyY2U9IiRhcmciCi0JCQkJCWJ1aWxkX2xpc3QKKwkJCQkqKQkjIGlucHV0IGZpbGUvZGlyIC0gcHJvY2VzcyBpdAorCQkJCQlpbnB1dF9maWxlICIkYXJnIiAiJCMiCiAJCQkJCTs7CiAJCQllc2FjCiAJCQk7OwogCWVzYWMKIGRvbmUKIAotIyBzcGl0IG91dCB0aGUgZGVmYXVsdCBjcGlvIGxpc3QgaWYgYSBzb3VyY2UgaGFzbid0IGJlZW4gc3BlY2lmaWVkCi1bIC16ICIkY3Bpb19zb3VyY2UiIC1hIC16ICIkZGVmYXVsdF9saXN0IiBdICYmIGRlZmF1bHRfaW5pdHJhbWZzCi0KKyMgSWYgb3V0cHV0X2ZpbGUgaXMgc2V0IHdlIHdpbGwgZ2VuZXJhdGUgY3BpbyBhcmNoaXZlIGFuZCBnemlwIGl0CisjIHdlIGFyZSBjYXJlZnVsbCB0byBkZWxldGUgdG1wIGZpbGVzCitpZiBbICEgLXogJHtvdXRwdXRfZmlsZX0gXTsgdGhlbgorCWlmIFsgLXogJHtjcGlvX2ZpbGV9IF07IHRoZW4KKwkJY3Bpb190ZmlsZT0iJChta3RlbXAgJHtUTVBESVI6LS90bXB9L2NwaW9maWxlLlhYWFhYWCkiCisJCXVzci9nZW5faW5pdF9jcGlvICR7Y3Bpb19saXN0fSA+ICR7Y3Bpb190ZmlsZX0KKwllbHNlCisJCWNwaW9fdGZpbGU9JHtjcGlvX2ZpbGV9CisJZmkKKwlybSAke2NwaW9fbGlzdH0KKwljYXQgJHtjcGlvX3RmaWxlfSB8IGd6aXAgLWYgLTkgLSA+ICR7b3V0cHV0X2ZpbGV9CisJWyAteiAke2NwaW9fZmlsZX0gXSAmJiBybSAke2NwaW9fdGZpbGV9CitmaQogZXhpdCAwCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwppbmRleCAxMGVlYWU1Li44MDEyZDEwIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvY29uZi5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8dGltZS5oPgpAQCAtNjMsMjAgKzY0LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBjaGFyICpmZ2V0c19jaGVja19zdHJlYW0oY2hhciAqcywgaW50IHNpemUsIEZJTEUgKnN0cmVhbSkKLXsKLQljaGFyICpyZXQgPSBmZ2V0cyhzLCBzaXplLCBzdHJlYW0pOwotCi0JaWYgKHJldCA9PSBOVUxMICYmIGZlb2Yoc3RyZWFtKSkgewotCQlwcmludGYoXygiYWJvcnRlZCFcblxuIikpOwotCQlwcmludGYoXygiQ29uc29sZSBpbnB1dCBpcyBjbG9zZWQuICIpKTsKLQkJcHJpbnRmKF8oIlJ1biAnbWFrZSBvbGRjb25maWcnIHRvIHVwZGF0ZSBjb25maWd1cmF0aW9uLlxuXG4iKSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgY29uZl9hc2t2YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKmRlZikKIHsKIAllbnVtIHN5bWJvbF90eXBlIHR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKQEAgLTExNCw3ICsxMDEsNyBAQAogCQljaGVja19zdGRpbigpOwogCWNhc2UgYXNrX2FsbDoKIAkJZmZsdXNoKHN0ZG91dCk7Ci0JCWZnZXRzX2NoZWNrX3N0cmVhbShsaW5lLCAxMjgsIHN0ZGluKTsKKwkJZmdldHMobGluZSwgMTI4LCBzdGRpbik7CiAJCXJldHVybjsKIAljYXNlIHNldF9kZWZhdWx0OgogCQlwcmludGYoIiVzXG4iLCBkZWYpOwpAQCAtMzI4LDggKzMxNSw3IEBACiAJCXByaW50ZigiJSpzJXNcbiIsIGluZGVudCAtIDEsICIiLCBtZW51X2dldF9wcm9tcHQobWVudSkpOwogCQlkZWZfc3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsKIAkJY250ID0gZGVmID0gMDsKLQkJbGluZVswXSA9ICcwJzsKLQkJbGluZVsxXSA9IDA7CisJCWxpbmVbMF0gPSAwOwogCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKIAkJCWlmICghbWVudV9pc192aXNpYmxlKGNoaWxkKSkKIAkJCQljb250aW51ZTsKQEAgLTM3MCw3ICszNTYsNyBAQAogCQkJY2hlY2tfc3RkaW4oKTsKIAkJY2FzZSBhc2tfYWxsOgogCQkJZmZsdXNoKHN0ZG91dCk7Ci0JCQlmZ2V0c19jaGVja19zdHJlYW0obGluZSwgMTI4LCBzdGRpbik7CisJCQlmZ2V0cyhsaW5lLCAxMjgsIHN0ZGluKTsKIAkJCXN0cmlwKGxpbmUpOwogCQkJaWYgKGxpbmVbMF0gPT0gJz8nKSB7CiAJCQkJcHJpbnRmKCJcbiVzXG4iLCBtZW51LT5zeW0tPmhlbHAgPwpAQCAtNTQ2LDcgKzUzMiw3IEBACiAJCQlicmVhazsKIAkJY2FzZSAnaCc6CiAJCWNhc2UgJz8nOgotCQkJcHJpbnRmKCIlcyBbLW98LXNdIGNvbmZpZ1xuIiwgYXZbMF0pOworCQkJZnByaW50ZihzdGRlcnIsICJTZWUgUkVBRE1FIGZvciB1c2FnZSBpbmZvXG4iKTsKIAkJCWV4aXQoMCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYyBiL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCmluZGV4IDFiODg4MmQuLjFiNWRmNTggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJCQlzeW0tPmZsYWdzIHw9IGUtPnJpZ2h0LnN5bS0+ZmxhZ3MgJiBTWU1CT0xfTkVXOwogCX0KIAotCXN5bV9jaGFuZ2VfY291bnQgPSBjb25mX3dhcm5pbmdzICYmIGNvbmZfdW5zYXZlZDsKKwlzeW1fY2hhbmdlX2NvdW50ID0gY29uZl93YXJuaW5ncyB8fCBjb25mX3Vuc2F2ZWQ7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYwppbmRleCBkYjA3YWU3Li5iZTAyMDBlIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jCkBAIC0xOTYsOCArMTk2LDggQEAKIAogCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKIAotCXdub3V0cmVmcmVzaChsaXN0KTsKIAl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwl3bm91dHJlZnJlc2gobGlzdCk7CiAJZG91cGRhdGUoKTsKIAogCXdoaWxlIChrZXkgIT0gRVNDKSB7CkBAIC0yMjUsMTIgKzIyNSwxMSBAQAogCQkJCQl9CiAJCQkJCXNjcm9sbC0tOwogCQkJCQlwcmludF9pdGVtKGxpc3QsIGl0ZW1zW3Njcm9sbCAqIDMgKyAxXSwgc3RhdHVzW3Njcm9sbF0sIDAsIFRSVUUpOwotCQkJCQl3bm91dHJlZnJlc2gobGlzdCk7Ci0KIAkJCQkJcHJpbnRfYXJyb3dzKGRpYWxvZywgY2hvaWNlLCBpdGVtX25vLAogCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7CiAKLQkJCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJCQkJCXdyZWZyZXNoKGxpc3QpOwogCiAJCQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBwcmVzcyAqLwogCQkJCX0gZWxzZQpAQCAtMjUyLDEyICsyNTEsMTIgQEAKIAkJCQkJc2Nyb2xsKys7CiAJCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbKHNjcm9sbCArIG1heF9jaG9pY2UgLSAxKSAqIDMgKyAxXSwKIAkJCQkJCSAgIHN0YXR1c1tzY3JvbGwgKyBtYXhfY2hvaWNlIC0gMV0sIG1heF9jaG9pY2UgLSAxLCBUUlVFKTsKLQkJCQkJd25vdXRyZWZyZXNoKGxpc3QpOwogCiAJCQkJCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9ubywKIAkJCQkJCSAgICAgc2Nyb2xsLCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOwogCi0JCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCQl3cmVmcmVzaChsaXN0KTsKIAogCQkJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KIAkJCQl9IGVsc2UKQEAgLTI3MSw4ICsyNzAsOCBAQAogCQkJCWNob2ljZSA9IGk7CiAJCQkJcHJpbnRfaXRlbShsaXN0LCBpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDMgKyAxXSwKIAkJCQkJICAgc3RhdHVzW3Njcm9sbCArIGNob2ljZV0sIGNob2ljZSwgVFJVRSk7Ci0JCQkJd25vdXRyZWZyZXNoKGxpc3QpOwotCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJCQkJd3JlZnJlc2gobGlzdCk7CiAJCQl9CiAJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KIAkJfQpAQCAtMzA2LDggKzMwNSw4IEBACiAJCQkJCQlwcmludF9pdGVtKGxpc3QsIGl0ZW1zWyhzY3JvbGwgKyBpKSAqIDMgKyAxXSwKIAkJCQkJCQkgICBzdGF0dXNbc2Nyb2xsICsgaV0sIGksIGkgPT0gY2hvaWNlKTsKIAkJCQl9Ci0JCQkJd25vdXRyZWZyZXNoKGxpc3QpOwotCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJCQkJd3JlZnJlc2gobGlzdCk7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgaXRlbV9ubzsgaSsrKQogCQkJCQlpZiAoc3RhdHVzW2ldKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9tZW51Ym94LmMKaW5kZXggMDk1MTJiNS4uYmY4MDUyZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYworKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jCkBAIC01OCw4ICs1OCw3IEBACiAKICNpbmNsdWRlICJkaWFsb2cuaCIKIAotI2RlZmluZSBJVEVNX0lERU5UIDEgICAvKiBJbmRlbnQgb2YgbWVudSBlbnRyaWVzLiBGaXhlZCBmb3IgYWxsIG1lbnVzICovCi1zdGF0aWMgaW50IG1lbnVfd2lkdGg7CitzdGF0aWMgaW50IG1lbnVfd2lkdGgsIGl0ZW1feDsKIAogLyoKICAqIFByaW50IG1lbnUgaXRlbQpAQCAtNzAsNyArNjksNyBAQAogCWludCBqOwogCWNoYXIgKm1lbnVfaXRlbSA9IG1hbGxvYyhtZW51X3dpZHRoICsgMSk7CiAKLQlzdHJuY3B5KG1lbnVfaXRlbSwgaXRlbSwgbWVudV93aWR0aCAtIElURU1fSURFTlQpOworCXN0cm5jcHkobWVudV9pdGVtLCBpdGVtLCBtZW51X3dpZHRoIC0gaXRlbV94KTsKIAltZW51X2l0ZW1bbWVudV93aWR0aF0gPSAwOwogCWogPSBmaXJzdF9hbHBoYShtZW51X2l0ZW0sICJZeU5uTW1IaCIpOwogCkBAIC04NywxMyArODYsMTMgQEAKIAl3Y2xydG9lb2wod2luKTsKICNlbmRpZgogCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBpdGVtX3NlbGVjdGVkX2F0dHIgOiBpdGVtX2F0dHIpOwotCW12d2FkZHN0cih3aW4sIGNob2ljZSwgSVRFTV9JREVOVCwgbWVudV9pdGVtKTsKKwltdndhZGRzdHIod2luLCBjaG9pY2UsIGl0ZW1feCwgbWVudV9pdGVtKTsKIAlpZiAoaG90a2V5KSB7CiAJCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyB0YWdfa2V5X3NlbGVjdGVkX2F0dHIgOiB0YWdfa2V5X2F0dHIpOwotCQltdndhZGRjaCh3aW4sIGNob2ljZSwgSVRFTV9JREVOVCArIGosIG1lbnVfaXRlbVtqXSk7CisJCW12d2FkZGNoKHdpbiwgY2hvaWNlLCBpdGVtX3ggKyBqLCBtZW51X2l0ZW1bal0pOwogCX0KIAlpZiAoc2VsZWN0ZWQpIHsKLQkJd21vdmUod2luLCBjaG9pY2UsIElURU1fSURFTlQgKyAxKTsKKwkJd21vdmUod2luLCBjaG9pY2UsIGl0ZW1feCArIDEpOwogCX0KIAlmcmVlKG1lbnVfaXRlbSk7CiAJd3JlZnJlc2god2luKTsKQEAgLTIyNyw2ICsyMjYsOCBAQAogCWRyYXdfYm94KGRpYWxvZywgYm94X3ksIGJveF94LCBtZW51X2hlaWdodCArIDIsIG1lbnVfd2lkdGggKyAyLAogCQkgbWVudWJveF9ib3JkZXJfYXR0ciwgbWVudWJveF9hdHRyKTsKIAorCWl0ZW1feCA9IChtZW51X3dpZHRoIC0gNzApIC8gMjsKKwogCS8qIFNldCBjaG9pY2UgdG8gZGVmYXVsdCBpdGVtICovCiAJZm9yIChpID0gMDsgaSA8IGl0ZW1fbm87IGkrKykKIAkJaWYgKHN0cmNtcChjdXJyZW50LCBpdGVtc1tpICogMl0pID09IDApCkBAIC0yNjMsMTAgKzI2NCwxMCBAQAogCXdub3V0cmVmcmVzaChtZW51KTsKIAogCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fbm8sIHNjcm9sbCwKLQkJICAgICBib3hfeSwgYm94X3ggKyBJVEVNX0lERU5UICsgMSwgbWVudV9oZWlnaHQpOworCQkgICAgIGJveF95LCBib3hfeCArIGl0ZW1feCArIDEsIG1lbnVfaGVpZ2h0KTsKIAogCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKLQl3bW92ZShtZW51LCBjaG9pY2UsIElURU1fSURFTlQgKyAxKTsKKwl3bW92ZShtZW51LCBjaG9pY2UsIGl0ZW1feCArIDEpOwogCXdyZWZyZXNoKG1lbnUpOwogCiAJd2hpbGUgKGtleSAhPSBFU0MpIHsKQEAgLTM0OSw3ICszNTAsNyBAQAogCQkJcHJpbnRfaXRlbShzY3JvbGwgKyBjaG9pY2UsIGNob2ljZSwgVFJVRSk7CiAKIAkJCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fbm8sIHNjcm9sbCwKLQkJCQkgICAgIGJveF95LCBib3hfeCArIElURU1fSURFTlQgKyAxLCBtZW51X2hlaWdodCk7CisJCQkJICAgICBib3hfeSwgYm94X3ggKyBpdGVtX3ggKyAxLCBtZW51X2hlaWdodCk7CiAKIAkJCXdub3V0cmVmcmVzaChkaWFsb2cpOwogCQkJd3JlZnJlc2gobWVudSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21rbWFrZWZpbGUgYi9zY3JpcHRzL21rbWFrZWZpbGUKaW5kZXggYTIyY2JlZC4uN2Y5ZDU0NCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9ta21ha2VmaWxlCisrKyBiL3NjcmlwdHMvbWttYWtlZmlsZQpAQCAtMTAsNyArMTAsMTAgQEAKICMgJDQgLSBwYXRjaGxldmVsCiAKIAotY2F0IDw8IEVPRgordGVzdCAhIC1yICQyL01ha2VmaWxlIC1vIC1PICQyL01ha2VmaWxlIHx8IGV4aXQgMAorZWNobyAiICBHRU4gICAgICQyL01ha2VmaWxlIgorCitjYXQgPDwgRU9GID4gJDIvTWFrZWZpbGUKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgJDA6IGRvbid0IGVkaXQKIAogVkVSU0lPTiA9ICQzCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKaW5kZXggODRlMjEyMC4uMzdmNjdjMiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCisrKyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwpAQCAtMzc0LDEwICszNzQsMTAgQEAKIAkJICAgICBrZXJuZWxfdWxvbmdfdCAqYXJyLCB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KQogewogCXVuc2lnbmVkIGludCBpOwotCWZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKSB7Ci0JCWlmIChhcnJbaS9CSVRTX1BFUl9MT05HXSAmICgxIDw8IChpJUJJVFNfUEVSX0xPTkcpKSkKLQkJCXNwcmludGYoYWxpYXMrc3RybGVuKGFsaWFzKSwgIiVYLCoiLCBpKTsKLQl9CisKKwlmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKwkJaWYgKGFycltpIC8gQklUU19QRVJfTE9OR10gJiAoMSA8PCAoaSVCSVRTX1BFUl9MT05HKSkpCisJCQlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgIiVYLCoiLCBpKTsKIH0KIAogLyogaW5wdXQ6YjB2MHAwZTAtZVhrWHJYYVhtWGxYc1hmWHdYIHdoZXJlIFggaXMgY29tbWEtc2VwYXJhdGVkICUwMlguICovCkBAIC0zODYsMzkgKzM4NiwzNyBAQAogewogCXNwcmludGYoYWxpYXMsICJpbnB1dDoiKTsKIAotCUFERChhbGlhcywgImIiLCBpZC0+ZmxhZ3MmSU5QVVRfREVWSUNFX0lEX01BVENIX0JVUywgaWQtPmlkLmJ1c3R5cGUpOwotCUFERChhbGlhcywgInYiLCBpZC0+ZmxhZ3MmSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFTkRPUiwgaWQtPmlkLnZlbmRvcik7Ci0JQUREKGFsaWFzLCAicCIsIGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCwKLQkgICAgaWQtPmlkLnByb2R1Y3QpOwotCUFERChhbGlhcywgImUiLCBpZC0+ZmxhZ3MmSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFUlNJT04sCi0JICAgIGlkLT5pZC52ZXJzaW9uKTsKKwlBREQoYWxpYXMsICJiIiwgaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX0JVUywgaWQtPmJ1c3R5cGUpOworCUFERChhbGlhcywgInYiLCBpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SLCBpZC0+dmVuZG9yKTsKKwlBREQoYWxpYXMsICJwIiwgaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX1BST0RVQ1QsIGlkLT5wcm9kdWN0KTsKKwlBREQoYWxpYXMsICJlIiwgaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFUlNJT04sIGlkLT52ZXJzaW9uKTsKIAogCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAiLWUqIik7Ci0JaWYgKGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQpCisJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCkKIAkJZG9faW5wdXQoYWxpYXMsIGlkLT5ldmJpdCwgMCwgRVZfTUFYKTsKIAlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgImsqIik7Ci0JaWYgKGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklUKQorCWlmIChpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklUKQogCQlkb19pbnB1dChhbGlhcywgaWQtPmtleWJpdCwgS0VZX01JTl9JTlRFUkVTVElORywgS0VZX01BWCk7CiAJc3ByaW50ZihhbGlhcyArIHN0cmxlbihhbGlhcyksICJyKiIpOwotCWlmIChpZC0+ZmxhZ3MmSU5QVVRfREVWSUNFX0lEX01BVENIX1JFTEJJVCkKKwlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX1JFTEJJVCkKIAkJZG9faW5wdXQoYWxpYXMsIGlkLT5yZWxiaXQsIDAsIFJFTF9NQVgpOwogCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAiYSoiKTsKLQlpZiAoaWQtPmZsYWdzJklOUFVUX0RFVklDRV9JRF9NQVRDSF9BQlNCSVQpCisJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9BQlNCSVQpCiAJCWRvX2lucHV0KGFsaWFzLCBpZC0+YWJzYml0LCAwLCBBQlNfTUFYKTsKIAlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgIm0qIik7Ci0JaWYgKGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfTVNDSVQpCisJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9NU0NJVCkKIAkJZG9faW5wdXQoYWxpYXMsIGlkLT5tc2NiaXQsIDAsIE1TQ19NQVgpOwogCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAibCoiKTsKLQlpZiAoaWQtPmZsYWdzJklOUFVUX0RFVklDRV9JRF9NQVRDSF9MRURCSVQpCisJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9MRURCSVQpCiAJCWRvX2lucHV0KGFsaWFzLCBpZC0+bGVkYml0LCAwLCBMRURfTUFYKTsKIAlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgInMqIik7Ci0JaWYgKGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU05EQklUKQorCWlmIChpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU05EQklUKQogCQlkb19pbnB1dChhbGlhcywgaWQtPnNuZGJpdCwgMCwgU05EX01BWCk7CiAJc3ByaW50ZihhbGlhcyArIHN0cmxlbihhbGlhcyksICJmKiIpOwotCWlmIChpZC0+ZmxhZ3MmSU5QVVRfREVWSUNFX0lEX01BVENIX0ZGQklUKQorCWlmIChpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRkZCSVQpCiAJCWRvX2lucHV0KGFsaWFzLCBpZC0+ZmZiaXQsIDAsIEZGX01BWCk7CiAJc3ByaW50ZihhbGlhcyArIHN0cmxlbihhbGlhcyksICJ3KiIpOwotCWlmIChpZC0+ZmxhZ3MmSU5QVVRfREVWSUNFX0lEX01BVENIX1NXQklUKQorCWlmIChpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU1dCSVQpCiAJCWRvX2lucHV0KGFsaWFzLCBpZC0+c3diaXQsIDAsIFNXX01BWCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggMGI5MmRkZi4uZDBmODZlZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtNDg3LDIyICs0ODcsMjQgQEAKICAqICAgYXRzeW0gICA9X19wYXJhbSoKICAqCiAgKiBQYXR0ZXJuIDI6Ci0gKiAgIE1hbnkgZHJpdmVycyB1dGlsaXNlIGEgKl9kcml2ZXIgY29udGFpbmVyIHdpdGggcmVmZXJlbmNlcyB0bworICogICBNYW55IGRyaXZlcnMgdXRpbGlzZSBhICpkcml2ZXIgY29udGFpbmVyIHdpdGggcmVmZXJlbmNlcyB0bwogICogICBhZGQsIHJlbW92ZSwgcHJvYmUgZnVuY3Rpb25zIGV0Yy4KICAqICAgVGhlc2UgZnVuY3Rpb25zIG1heSBvZnRlbiBiZSBtYXJrZWQgX19pbml0IGFuZCB3ZSBkbyBub3Qgd2FudCB0bwogICogICB3YXJuIGhlcmUuCiAgKiAgIHRoZSBwYXR0ZXJuIGlzIGlkZW50aWZpZWQgYnk6Ci0gKiAgIHRvc2VjICAgPSAuaW5pdC50ZXh0IHwgLmV4aXQudGV4dAorICogICB0b3NlYyAgID0gLmluaXQudGV4dCB8IC5leGl0LnRleHQgfCAuaW5pdC5kYXRhCiAgKiAgIGZyb21zZWMgPSAuZGF0YQotICogICBhdHN5bSA9ICpfZHJpdmVyLCAqX29wcywgKl9wcm9iZSwgKnByb2JlX29uZQorICogICBhdHN5bSA9ICpkcml2ZXIsICpfdGVtcGxhdGUsICpfc2h0LCAqX29wcywgKl9wcm9iZSwgKnByb2JlX29uZQogICoqLwogc3RhdGljIGludCBzZWNyZWZfd2hpdGVsaXN0KGNvbnN0IGNoYXIgKnRvc2VjLCBjb25zdCBjaGFyICpmcm9tc2VjLAotCQkJICBjb25zdCBjaGFyICphdHN5bSkKKwkJCSAgICBjb25zdCBjaGFyICphdHN5bSkKIHsKIAlpbnQgZjEgPSAxLCBmMiA9IDE7CiAJY29uc3QgY2hhciAqKnM7CiAJY29uc3QgY2hhciAqcGF0MnN5bVtdID0gewotCQkiX2RyaXZlciIsCisJCSJkcml2ZXIiLAorCQkiX3RlbXBsYXRlIiwgLyogc2NzaSB1c2VzICpfdGVtcGxhdGUgYSBsb3QgKi8KKwkJIl9zaHQiLCAgICAgIC8qIHNjc2kgYWxzbyB1c2VkICpfc2h0IHRvIHNvbWUgZXh0ZW50ICovCiAJCSJfb3BzIiwKIAkJIl9wcm9iZSIsCiAJCSJfcHJvYmVfb25lIiwKQEAgLTUyMiw3ICs1MjQsOCBAQAogCiAJLyogQ2hlY2sgZm9yIHBhdHRlcm4gMiAqLwogCWlmICgoc3RyY21wKHRvc2VjLCAiLmluaXQudGV4dCIpICE9IDApICYmCi0JICAgIChzdHJjbXAodG9zZWMsICIuZXhpdC50ZXh0IikgIT0gMCkpCisJICAgIChzdHJjbXAodG9zZWMsICIuZXhpdC50ZXh0IikgIT0gMCkgJiYKKwkgICAgKHN0cmNtcCh0b3NlYywgIi5pbml0LmRhdGEiKSAhPSAwKSkKIAkJZjIgPSAwOwogCWlmIChzdHJjbXAoZnJvbXNlYywgIi5kYXRhIikgIT0gMCkKIAkJZjIgPSAwOwpAQCAtNjU4LDcgKzY2MSw3IEBACiAJCXdhcm4oIiVzIC0gU2VjdGlvbiBtaXNtYXRjaDogcmVmZXJlbmNlIHRvICVzOiVzIGZyb20gJXMgIgogCQkgICAgICJiZWZvcmUgJyVzJyAoYXQgb2Zmc2V0IC0weCVsbHgpXG4iLAogCQkgICAgIG1vZG5hbWUsIHNlY25hbWUsIHJlZnN5bW5hbWUsIGZyb21zZWMsCi0JCSAgICAgZWxmLT5zdHJ0YWIgKyBiZWZvcmUtPnN0X25hbWUsCisJCSAgICAgZWxmLT5zdHJ0YWIgKyBhZnRlci0+c3RfbmFtZSwKIAkJICAgICAobG9uZyBsb25nKXIucl9vZmZzZXQpOwogCX0gZWxzZSB7CiAJCXdhcm4oIiVzIC0gU2VjdGlvbiBtaXNtYXRjaDogcmVmZXJlbmNlIHRvICVzOiVzIGZyb20gJXMgIgpAQCAtNjk0LDI5ICs2OTcsNzkgQEAKIAogCS8qIFdhbGsgdGhyb3VnaCBhbGwgc2VjdGlvbnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQkJRWxmX1JlbGEgKnJlbGE7Ci0JCUVsZl9SZWxhICpzdGFydCA9ICh2b2lkICopaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7Ci0JCUVsZl9SZWxhICpzdG9wICA9ICh2b2lkKilzdGFydCArIHNlY2hkcnNbaV0uc2hfc2l6ZTsKLQkJY29uc3QgY2hhciAqbmFtZSA9IHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUgKwotCQkJCQkJc3RybGVuKCIucmVsYSIpOworCQljb25zdCBjaGFyICpuYW1lID0gc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZTsKKwkJY29uc3QgY2hhciAqc2VjbmFtZTsKKwkJRWxmX1JlbGEgcjsKKwkJdW5zaWduZWQgaW50IHJfc3ltOwogCQkvKiBXZSB3YW50IHRvIHByb2Nlc3Mgb25seSByZWxvY2F0aW9uIHNlY3Rpb25zIGFuZCBub3QgLmluaXQgKi8KLQkJaWYgKHNlY3Rpb25fcmVmX29rKG5hbWUpIHx8IChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX1JFTEEpKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChyZWxhID0gc3RhcnQ7IHJlbGEgPCBzdG9wOyByZWxhKyspIHsKLQkJCUVsZl9SZWxhIHI7Ci0JCQljb25zdCBjaGFyICpzZWNuYW1lOwotCQkJci5yX29mZnNldCA9IFRPX05BVElWRShyZWxhLT5yX29mZnNldCk7Ci0JCQlyLnJfaW5mbyAgID0gVE9fTkFUSVZFKHJlbGEtPnJfaW5mbyk7Ci0JCQlyLnJfYWRkZW5kID0gVE9fTkFUSVZFKHJlbGEtPnJfYWRkZW5kKTsKLQkJCXN5bSA9IGVsZi0+c3ltdGFiX3N0YXJ0ICsgRUxGX1JfU1lNKHIucl9pbmZvKTsKLQkJCS8qIFNraXAgc3BlY2lhbCBzZWN0aW9ucyAqLwotCQkJaWYgKHN5bS0+c3Rfc2huZHggPj0gU0hOX0xPUkVTRVJWRSkKKwkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfUkVMQSkgeworCQkJRWxmX1JlbGEgKnJlbGE7CisJCQlFbGZfUmVsYSAqc3RhcnQgPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaV0uc2hfb2Zmc2V0OworCQkJRWxmX1JlbGEgKnN0b3AgID0gKHZvaWQqKXN0YXJ0ICsgc2VjaGRyc1tpXS5zaF9zaXplOworCQkJbmFtZSArPSBzdHJsZW4oIi5yZWxhIik7CisJCQlpZiAoc2VjdGlvbl9yZWZfb2sobmFtZSkpCiAJCQkJY29udGludWU7CiAKLQkJCXNlY25hbWUgPSBzZWNzdHJpbmdzICsgc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9uYW1lOwotCQkJaWYgKHNlY3Rpb24oc2VjbmFtZSkpCi0JCQkJd2Fybl9zZWNfbWlzbWF0Y2gobW9kbmFtZSwgbmFtZSwgZWxmLCBzeW0sIHIpOworCQkJZm9yIChyZWxhID0gc3RhcnQ7IHJlbGEgPCBzdG9wOyByZWxhKyspIHsKKwkJCQlyLnJfb2Zmc2V0ID0gVE9fTkFUSVZFKHJlbGEtPnJfb2Zmc2V0KTsKKyNpZiBLRVJORUxfRUxGQ0xBU1MgPT0gRUxGQ0xBU1M2NAorCQkJCWlmIChoZHItPmVfbWFjaGluZSA9PSBFTV9NSVBTKSB7CisJCQkJCXJfc3ltID0gRUxGNjRfTUlQU19SX1NZTShyZWxhLT5yX2luZm8pOworCQkJCQlyX3N5bSA9IFRPX05BVElWRShyX3N5bSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJci5yX2luZm8gPSBUT19OQVRJVkUocmVsYS0+cl9pbmZvKTsKKwkJCQkJcl9zeW0gPSBFTEZfUl9TWU0oci5yX2luZm8pOworCQkJCX0KKyNlbHNlCisJCQkJci5yX2luZm8gPSBUT19OQVRJVkUocmVsYS0+cl9pbmZvKTsKKwkJCQlyX3N5bSA9IEVMRl9SX1NZTShyLnJfaW5mbyk7CisjZW5kaWYKKwkJCQlyLnJfYWRkZW5kID0gVE9fTkFUSVZFKHJlbGEtPnJfYWRkZW5kKTsKKwkJCQlzeW0gPSBlbGYtPnN5bXRhYl9zdGFydCArIHJfc3ltOworCQkJCS8qIFNraXAgc3BlY2lhbCBzZWN0aW9ucyAqLworCQkJCWlmIChzeW0tPnN0X3NobmR4ID49IFNITl9MT1JFU0VSVkUpCisJCQkJCWNvbnRpbnVlOworCisJCQkJc2VjbmFtZSA9IHNlY3N0cmluZ3MgKworCQkJCQlzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX25hbWU7CisJCQkJaWYgKHNlY3Rpb24oc2VjbmFtZSkpCisJCQkJCXdhcm5fc2VjX21pc21hdGNoKG1vZG5hbWUsIG5hbWUsCisJCQkJCQkJICBlbGYsIHN5bSwgcik7CisJCQl9CisJCX0gZWxzZSBpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUwpIHsKKwkJCUVsZl9SZWwgKnJlbDsKKwkJCUVsZl9SZWwgKnN0YXJ0ID0gKHZvaWQgKiloZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldDsKKwkJCUVsZl9SZWwgKnN0b3AgID0gKHZvaWQqKXN0YXJ0ICsgc2VjaGRyc1tpXS5zaF9zaXplOworCQkJbmFtZSArPSBzdHJsZW4oIi5yZWwiKTsKKwkJCWlmIChzZWN0aW9uX3JlZl9vayhuYW1lKSkKKwkJCQljb250aW51ZTsKKworCQkJZm9yIChyZWwgPSBzdGFydDsgcmVsIDwgc3RvcDsgcmVsKyspIHsKKwkJCQlyLnJfb2Zmc2V0ID0gVE9fTkFUSVZFKHJlbC0+cl9vZmZzZXQpOworI2lmIEtFUk5FTF9FTEZDTEFTUyA9PSBFTEZDTEFTUzY0CisJCQkJaWYgKGhkci0+ZV9tYWNoaW5lID09IEVNX01JUFMpIHsKKwkJCQkJcl9zeW0gPSBFTEY2NF9NSVBTX1JfU1lNKHJlbC0+cl9pbmZvKTsKKwkJCQkJcl9zeW0gPSBUT19OQVRJVkUocl9zeW0pOworCQkJCX0gZWxzZSB7CisJCQkJCXIucl9pbmZvID0gVE9fTkFUSVZFKHJlbC0+cl9pbmZvKTsKKwkJCQkJcl9zeW0gPSBFTEZfUl9TWU0oci5yX2luZm8pOworCQkJCX0KKyNlbHNlCisJCQkJci5yX2luZm8gPSBUT19OQVRJVkUocmVsLT5yX2luZm8pOworCQkJCXJfc3ltID0gRUxGX1JfU1lNKHIucl9pbmZvKTsKKyNlbmRpZgorCQkJCXIucl9hZGRlbmQgPSAwOworCQkJCXN5bSA9IGVsZi0+c3ltdGFiX3N0YXJ0ICsgcl9zeW07CisJCQkJLyogU2tpcCBzcGVjaWFsIHNlY3Rpb25zICovCisJCQkJaWYgKHN5bS0+c3Rfc2huZHggPj0gU0hOX0xPUkVTRVJWRSkKKwkJCQkJY29udGludWU7CisKKwkJCQlzZWNuYW1lID0gc2Vjc3RyaW5ncyArCisJCQkJCXNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfbmFtZTsKKwkJCQlpZiAoc2VjdGlvbihzZWNuYW1lKSkKKwkJCQkJd2Fybl9zZWNfbWlzbWF0Y2gobW9kbmFtZSwgbmFtZSwKKwkJCQkJCQkgIGVsZiwgc3ltLCByKTsKKwkJCX0KIAkJfQogCX0KIH0KQEAgLTgyMCw2ICs4NzMsNyBAQAogICogRm9yIG91ciBmdXR1cmUge2lufXNhbml0eSwgYWRkIGEgY29tbWVudCB0aGF0IHRoaXMgaXMgdGhlIHBwYyAub3BkCiAgKiBzZWN0aW9uLCBub3QgdGhlIGlhNjQgLm9wZCBzZWN0aW9uLgogICogaWE2NCAub3BkIHNob3VsZCBub3QgcG9pbnQgdG8gZGlzY2FyZGVkIHNlY3Rpb25zLgorICogWy5yb2RhdGFdIGxpa2UgZm9yIC5pbml0LnRleHQgd2UgaWdub3JlIC5yb2RhdGEgcmVmZXJlbmNlcyAtc2FtZSByZWFzb24KICAqKi8KIHN0YXRpYyBpbnQgZXhpdF9zZWN0aW9uX3JlZl9vayhjb25zdCBjaGFyICpuYW1lKQogewpAQCAtODI5LDYgKzg4Myw3IEBACiAJCSIuZXhpdC50ZXh0IiwKIAkJIi5leGl0LmRhdGEiLAogCQkiLmluaXQudGV4dCIsCisJCSIucm9kYXRhIiwKIAkJIi5vcGQiLCAvKiBTZWUgY29tbWVudCBbT1BEXSAqLwogCQkiLnRvYzEiLCAgLyogdXNlZCBieSBwcGM2NCAqLwogCQkiLmFsdGluc3RydWN0aW9ucyIsCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmggYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKaW5kZXggYjE0MjU1Yy4uODYxZDg2NiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBFTEZfU1RfQklORCBFTEYzMl9TVF9CSU5ECiAjZGVmaW5lIEVMRl9TVF9UWVBFIEVMRjMyX1NUX1RZUEUKIAorI2RlZmluZSBFbGZfUmVsICAgICBFbGYzMl9SZWwKICNkZWZpbmUgRWxmX1JlbGEgICAgRWxmMzJfUmVsYQogI2RlZmluZSBFTEZfUl9TWU0gICBFTEYzMl9SX1NZTQogI2RlZmluZSBFTEZfUl9UWVBFICBFTEYzMl9SX1RZUEUKQEAgLTM0LDExICszNSwzMSBAQAogI2RlZmluZSBFTEZfU1RfQklORCBFTEY2NF9TVF9CSU5ECiAjZGVmaW5lIEVMRl9TVF9UWVBFIEVMRjY0X1NUX1RZUEUKIAorI2RlZmluZSBFbGZfUmVsICAgICBFbGY2NF9SZWwKICNkZWZpbmUgRWxmX1JlbGEgICAgRWxmNjRfUmVsYQogI2RlZmluZSBFTEZfUl9TWU0gICBFTEY2NF9SX1NZTQogI2RlZmluZSBFTEZfUl9UWVBFICBFTEY2NF9SX1RZUEUKICNlbmRpZgogCisvKiBUaGUgNjQtYml0IE1JUFMgRUxGIEFCSSB1c2VzIGFuIHVudXN1YWwgcmVsb2MgZm9ybWF0LiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlFbGYzMl9Xb3JkICAgIHJfc3ltOwkvKiBTeW1ib2wgaW5kZXggKi8KKwl1bnNpZ25lZCBjaGFyIHJfc3N5bTsJLyogU3BlY2lhbCBzeW1ib2wgZm9yIDJuZCByZWxvY2F0aW9uICovCisJdW5zaWduZWQgY2hhciByX3R5cGUzOwkvKiAzcmQgcmVsb2NhdGlvbiB0eXBlICovCisJdW5zaWduZWQgY2hhciByX3R5cGUyOwkvKiAybmQgcmVsb2NhdGlvbiB0eXBlICovCisJdW5zaWduZWQgY2hhciByX3R5cGUxOwkvKiAxc3QgcmVsb2NhdGlvbiB0eXBlICovCit9IF9FbGY2NF9NaXBzX1JfSW5mbzsKKwordHlwZWRlZiB1bmlvbgoreworCUVsZjY0X1h3b3JkCQlyX2luZm9fbnVtYmVyOworCV9FbGY2NF9NaXBzX1JfSW5mbwlyX2luZm9fZmllbGRzOworfSBfRWxmNjRfTWlwc19SX0luZm9fdW5pb247CisKKyNkZWZpbmUgRUxGNjRfTUlQU19SX1NZTShpKSBcCisgICgoX19leHRlbnNpb25fXyAoX0VsZjY0X01pcHNfUl9JbmZvX3VuaW9uKShpKSkucl9pbmZvX2ZpZWxkcy5yX3N5bSkKKwogI2lmIEtFUk5FTF9FTEZEQVRBICE9IEhPU1RfRUxGREFUQQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19lbmRpYW4oY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkZXN0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKQEAgLTQ4LDggKzY5LDYgQEAKIAkJKCh1bnNpZ25lZCBjaGFyKilkZXN0KVtpXSA9ICgodW5zaWduZWQgY2hhciopc3JjKVtzaXplIC0gaS0xXTsKIH0KIAotCi0KICNkZWZpbmUgVE9fTkFUSVZFKHgpCQkJCQkJXAogKHsJCQkJCQkJCVwKIAl0eXBlb2YoeCkgX194OwkJCQkJCVwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbmFtZXNwYWNlLnBsIGIvc2NyaXB0cy9uYW1lc3BhY2UucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9zaG93X2RlbHRhIGIvc2NyaXB0cy9zaG93X2RlbHRhCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvdmVyX2xpbnV4IGIvc2NyaXB0cy92ZXJfbGludXgKaW5kZXggYmViNDNlZjcuLjg0OTk5ZjYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvdmVyX2xpbnV4CisrKyBiL3NjcmlwdHMvdmVyX2xpbnV4CkBAIC0zOSwxMCArMzksMTAgQEAKIGZzY2suamZzIC1WIDI+JjEgfCBncmVwIHZlcnNpb24gfCBzZWQgJ3MvLC8vJyB8ICBhd2sgXAogJ05SPT0xIHtwcmludCAiamZzdXRpbHMgICAgICAgICAgICAgICIsICQzfScKIAotcmVpc2VyZnNjayAtViAyPiYxIHwgZ3JlcCByZWlzZXJmc2NrIHwgYXdrIFwKK3JlaXNlcmZzY2sgLVYgMj4mMSB8IGdyZXAgXnJlaXNlcmZzY2sgfCBhd2sgXAogJ05SPT0xe3ByaW50ICJyZWlzZXJmc3Byb2dzICAgICAgICAgIiwgJDJ9JwogCi1mc2NrLnJlaXNlcjQgLVYgMj4mMSB8IGdyZXAgZnNjay5yZWlzZXI0IHwgYXdrIFwKK2ZzY2sucmVpc2VyNCAtViAyPiYxIHwgZ3JlcCBeZnNjay5yZWlzZXI0IHwgYXdrIFwKICdOUj09MXtwcmludCAicmVpc2VyNHByb2dzICAgICAgICAgICIsICQyfScKIAogeGZzX2RiIC1WIDI+JjEgfCBncmVwIHZlcnNpb24gfCBhd2sgXApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvZHVtbXkuYyBiL3NlY3VyaXR5L2R1bW15LmMKaW5kZXggZmQ5OTQyOS4uOGNjY2NjYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvZHVtbXkuYworKysgYi9zZWN1cml0eS9kdW1teS5jCkBAIC01NjMsMTEgKzU2Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfaXBjX2dldHNlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQogc3RhdGljIGludCBkdW1teV9tc2dfbXNnX2FsbG9jX3NlY3VyaXR5IChzdHJ1Y3QgbXNnX21zZyAqbXNnKQogewogCXJldHVybiAwOwpAQCAtOTc2LDcgKzk3MSw2IEBACiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB0YXNrX3JlcGFyZW50X3RvX2luaXQpOwogIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfdG9faW5vZGUpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgaXBjX3Blcm1pc3Npb24pOwotCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgaXBjX2dldHNlY3VyaXR5KTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIG1zZ19tc2dfYWxsb2Nfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgbXNnX21zZ19mcmVlX3NlY3VyaXR5KTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIG1zZ19xdWV1ZV9hbGxvY19zZWN1cml0eSk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuYwppbmRleCBhMDU3ZTMzLi5iNjA2MWZhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5LmMKQEAgLTc4NSw2ICs3ODUsMTAgQEAKIAogCWtleV9jaGVjayhrZXlyaW5nKTsKIAorCWtleV9yZWYgPSBFUlJfUFRSKC1FTk9URElSKTsKKwlpZiAoa2V5cmluZy0+dHlwZSAhPSAma2V5X3R5cGVfa2V5cmluZykKKwkJZ290byBlcnJvcl8yOworCiAJZG93bl93cml0ZSgma2V5cmluZy0+c2VtKTsKIAogCS8qIGlmIHdlJ3JlIGdvaW5nIHRvIGFsbG9jYXRlIGEgbmV3IGtleSwgd2UncmUgZ29pbmcgdG8gaGF2ZQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwppbmRleCBkNjVhMTgwLi5iZmZhOTI0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYworKysgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwpAQCAtNDM3LDYgKzQzNyw3IEBACiAvKgogICogc2VhcmNoIHRoZSBnaXZlbiBrZXlyaW5nIG9ubHkgKG5vIHJlY3Vyc2lvbikKICAqIC0ga2V5cmluZyBtdXN0IGJlIGxvY2tlZCBieSBjYWxsZXIKKyAqIC0gY2FsbGVyIG11c3QgZ3VhcmFudGVlIHRoYXQgdGhlIGtleXJpbmcgaXMgYSBrZXlyaW5nCiAgKi8KIGtleV9yZWZfdCBfX2tleXJpbmdfc2VhcmNoX29uZShrZXlfcmVmX3Qga2V5cmluZ19yZWYsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGtleV90eXBlICprdHlwZSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCmluZGV4IGY2OTQwNjEuLjIxN2EwYmUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwpAQCAtMTY4LDExICsxNjgsMTIgQEAKICAqLwogaW50IGluc3RhbGxfcHJvY2Vzc19rZXlyaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtleSAqa2V5cmluZzsKIAljaGFyIGJ1ZlsyMF07CiAJaW50IHJldDsKIAorCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAoIXRzay0+c2lnbmFsLT5wcm9jZXNzX2tleXJpbmcpIHsKIAkJc3ByaW50ZihidWYsICJfcGlkLiV1IiwgdHNrLT50Z2lkKTsKIApAQCAtMTgzLDEyICsxODQsMTIgQEAKIAkJfQogCiAJCS8qIGF0dGFjaCBrZXlyaW5nICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJaWYgKCF0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nKSB7CiAJCQl0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nID0ga2V5cmluZzsKIAkJCWtleXJpbmcgPSBOVUxMOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAkJa2V5X3B1dChrZXlyaW5nKTsKIAl9CkBAIC0yMDcsMzggKzIwOCwzNyBAQAogc3RhdGljIGludCBpbnN0YWxsX3Nlc3Npb25fa2V5cmluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkgICBzdHJ1Y3Qga2V5ICprZXlyaW5nKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtleSAqb2xkOwogCWNoYXIgYnVmWzIwXTsKLQlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKIAogCS8qIGNyZWF0ZSBhbiBlbXB0eSBzZXNzaW9uIGtleXJpbmcgKi8KIAlpZiAoIWtleXJpbmcpIHsKIAkJc3ByaW50ZihidWYsICJfc2VzLiV1IiwgdHNrLT50Z2lkKTsKIAogCQlrZXlyaW5nID0ga2V5cmluZ19hbGxvYyhidWYsIHRzay0+dWlkLCB0c2stPmdpZCwgMSwgTlVMTCk7Ci0JCWlmIChJU19FUlIoa2V5cmluZykpIHsKLQkJCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9CisJCWlmIChJU19FUlIoa2V5cmluZykpCisJCQlyZXR1cm4gUFRSX0VSUihrZXlyaW5nKTsKIAl9CiAJZWxzZSB7CiAJCWF0b21pY19pbmMoJmtleXJpbmctPnVzYWdlKTsKIAl9CiAKIAkvKiBpbnN0YWxsIHRoZSBrZXlyaW5nICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCW9sZCA9IHJjdV9kZXJlZmVyZW5jZSh0c2stPnNpZ25hbC0+c2Vzc2lvbl9rZXlyaW5nKTsKKwlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCW9sZCA9IHRzay0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmc7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHRzay0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmcsIGtleXJpbmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCXJldCA9IDA7CisJLyogd2UncmUgdXNpbmcgUkNVIG9uIHRoZSBwb2ludGVyLCBidXQgdGhlcmUncyBubyBwb2ludCBzeW5jaHJvbmlzaW5nCisJICogb24gaXQgaWYgaXQgZGlkbid0IHByZXZpb3VzbHkgcG9pbnQgdG8gYW55dGhpbmcgKi8KKwlpZiAob2xkKSB7CisJCXN5bmNocm9uaXplX3JjdSgpOworCQlrZXlfcHV0KG9sZCk7CisJfQogCi0JLyogd2UncmUgdXNpbmcgUkNVIG9uIHRoZSBwb2ludGVyICovCi0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2V5X3B1dChvbGQpOwotZXJyb3I6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogfSAvKiBlbmQgaW5zdGFsbF9zZXNzaW9uX2tleXJpbmcoKSAqLwogCkBAIC0zMTEsNyArMzExLDYgQEAKICAqLwogaW50IGV4ZWNfa2V5cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBrZXkgKm9sZDsKIAogCS8qIG5ld2x5IGV4ZWMnZCB0YXNrcyBkb24ndCBnZXQgYSB0aHJlYWQga2V5cmluZyAqLwpAQCAtMzIzLDEwICszMjIsMTAgQEAKIAlrZXlfcHV0KG9sZCk7CiAKIAkvKiBkaXNjYXJkIHRoZSBwcm9jZXNzIGtleXJpbmcgZnJvbSBhIG5ld2x5IGV4ZWMnZCB0YXNrICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJb2xkID0gdHNrLT5zaWduYWwtPnByb2Nlc3Nfa2V5cmluZzsKIAl0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAlrZXlfcHV0KG9sZCk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUgYi9zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlCmluZGV4IDY4OGMwYTIuLmZhZjJlMDIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpIDo9IHNlbGludXgubyBzcy8KIAotc2VsaW51eC15IDo9IGF2Yy5vIGhvb2tzLm8gc2VsaW51eGZzLm8gbmV0bGluay5vIG5sbXNndGFiLm8gbmV0aWYubworc2VsaW51eC15IDo9IGF2Yy5vIGhvb2tzLm8gc2VsaW51eGZzLm8gbmV0bGluay5vIG5sbXNndGFiLm8gbmV0aWYubyBleHBvcnRzLm8KIAogc2VsaW51eC0kKENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0pICs9IHhmcm0ubwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwppbmRleCBhYzVkNjliLi5hMzAwNzAyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTgwMCw3ICs4MDAsNyBAQAogaW50IGF2Y19zc19yZXNldCh1MzIgc2Vxbm8pCiB7CiAJc3RydWN0IGF2Y19jYWxsYmFja19ub2RlICpjOwotCWludCBpLCByYyA9IDA7CisJaW50IGksIHJjID0gMCwgdG1wcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKIApAQCAtODEzLDE1ICs4MTMsMTYgQEAKIAogCWZvciAoYyA9IGF2Y19jYWxsYmFja3M7IGM7IGMgPSBjLT5uZXh0KSB7CiAJCWlmIChjLT5ldmVudHMgJiBBVkNfQ0FMTEJBQ0tfUkVTRVQpIHsKLQkJCXJjID0gYy0+Y2FsbGJhY2soQVZDX0NBTExCQUNLX1JFU0VULAotCQkJCQkgMCwgMCwgMCwgMCwgTlVMTCk7Ci0JCQlpZiAocmMpCi0JCQkJZ290byBvdXQ7CisJCQl0bXByYyA9IGMtPmNhbGxiYWNrKEFWQ19DQUxMQkFDS19SRVNFVCwKKwkJCSAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgTlVMTCk7CisJCQkvKiBzYXZlIHRoZSBmaXJzdCBlcnJvciBlbmNvdW50ZXJlZCBmb3IgdGhlIHJldHVybgorCQkJICAgdmFsdWUgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGNhbGxiYWNrcyAqLworCQkJaWYgKCFyYykKKwkJCQlyYyA9IHRtcHJjOwogCQl9CiAJfQogCiAJYXZjX2xhdGVzdF9ub3RpZl91cGRhdGUoc2Vxbm8sIDApOwotb3V0OgogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2V4cG9ydHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRjNzNlCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIFNFTGludXggc2VydmljZXMgZXhwb3J0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4KKyAqCisgKiBBdXRob3I6IEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLiA8ZGdvZWRkZWxAdHJ1c3RlZGNzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJQk0gQ29ycG9yYXRpb24sIFRpbW90aHkgUi4gQ2hhdmV6IDx0aW55dGltQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgorCisjaW5jbHVkZSAic2VjdXJpdHkuaCIKKyNpbmNsdWRlICJvYmpzZWMuaCIKKwordm9pZCBzZWxpbnV4X3Rhc2tfY3R4aWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqY3R4aWQpCit7CisJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gdHNrLT5zZWN1cml0eTsKKwlpZiAoc2VsaW51eF9lbmFibGVkKQorCQkqY3R4aWQgPSB0c2VjLT5zaWQ7CisJZWxzZQorCQkqY3R4aWQgPSAwOworfQorCitpbnQgc2VsaW51eF9jdHhpZF90b19zdHJpbmcodTMyIGN0eGlkLCBjaGFyICoqY3R4LCB1MzIgKmN0eGxlbikKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKQorCQlyZXR1cm4gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHQoY3R4aWQsIGN0eCwgY3R4bGVuKTsKKwllbHNlIHsKKwkJKmN0eCA9IE5VTEw7CisJCSpjdHhsZW4gPSAwOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHNlbGludXhfZ2V0X2lub2RlX3NpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNpZCkKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKSB7CisJCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKKwkJKnNpZCA9IGlzZWMtPnNpZDsKKwkJcmV0dXJuOworCX0KKwkqc2lkID0gMDsKK30KKwordm9pZCBzZWxpbnV4X2dldF9pcGNfc2lkKGNvbnN0IHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB1MzIgKnNpZCkKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKSB7CisJCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaXBjcC0+c2VjdXJpdHk7CisJCSpzaWQgPSBpc2VjLT5zaWQ7CisJCXJldHVybjsKKwl9CisJKnNpZCA9IDA7Cit9CisKK3ZvaWQgc2VsaW51eF9nZXRfdGFza19zaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqc2lkKQoreworCWlmIChzZWxpbnV4X2VuYWJsZWQpIHsKKwkJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gdHNrLT5zZWN1cml0eTsKKwkJKnNpZCA9IHRzZWMtPnNpZDsKKwkJcmV0dXJuOworCX0KKwkqc2lkID0gMDsKK30KKwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGI2MWI5NTU0Li45MGI0Y2RjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xMDEsNiArMTAxLDggQEAKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoInNlbGludXg9Iiwgc2VsaW51eF9lbmFibGVkX3NldHVwKTsKKyNlbHNlCitpbnQgc2VsaW51eF9lbmFibGVkID0gMTsKICNlbmRpZgogCiAvKiBPcmlnaW5hbCAoZHVtbXkpIHNlY3VyaXR5IG1vZHVsZS4gKi8KQEAgLTMyMjksNyArMzIzMSw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogSGFuZGxlIG1hcHBlZCBJUHY0IHBhY2tldHMgYXJyaXZpbmcgdmlhIElQdjYgc29ja2V0cyAqLwotCWlmIChmYW1pbHkgPT0gUEZfSU5FVDYgJiYgc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUCkpCisJaWYgKGZhbWlseSA9PSBQRl9JTkVUNiAmJiBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJZmFtaWx5ID0gUEZfSU5FVDsKIAogIAlyZWFkX2xvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKQEAgLTQwNTIsMTMgKzQwNTQsNiBAQAogCXJldHVybiBpcGNfaGFzX3Blcm0oaXBjcCwgYXYpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaXBjX2dldHNlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaXBjcC0+c2VjdXJpdHk7Ci0KLQlyZXR1cm4gc2VsaW51eF9nZXRzZWN1cml0eShpc2VjLT5zaWQsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KIC8qIG1vZHVsZSBzdGFja2luZyBvcGVyYXRpb25zICovCiBzdGF0aWMgaW50IHNlbGludXhfcmVnaXN0ZXJfc2VjdXJpdHkgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpCiB7CkBAIC00MzIxLDcgKzQzMTYsNiBAQAogCS50YXNrX3RvX2lub2RlID0gICAgICAgICAgICAgICAgc2VsaW51eF90YXNrX3RvX2lub2RlLAogCiAJLmlwY19wZXJtaXNzaW9uID0JCXNlbGludXhfaXBjX3Blcm1pc3Npb24sCi0JLmlwY19nZXRzZWN1cml0eSA9CQlzZWxpbnV4X2lwY19nZXRzZWN1cml0eSwKIAogCS5tc2dfbXNnX2FsbG9jX3NlY3VyaXR5ID0Jc2VsaW51eF9tc2dfbXNnX2FsbG9jX3NlY3VyaXR5LAogCS5tc2dfbXNnX2ZyZWVfc2VjdXJpdHkgPQlzZWxpbnV4X21zZ19tc2dfZnJlZV9zZWN1cml0eSwKQEAgLTQ0MjgsNiArNDQyMiw3IEBACiAKIAkvKiBTZXQgdXAgYW55IHN1cGVyYmxvY2tzIGluaXRpYWxpemVkIHByaW9yIHRvIHRoZSBwb2xpY3kgbG9hZC4gKi8KIAlwcmludGsoS0VSTl9JTkZPICJTRUxpbnV4OiAgU2V0dGluZyB1cCBleGlzdGluZyBzdXBlcmJsb2Nrcy5cbiIpOworCXNwaW5fbG9jaygmc2JfbG9jayk7CiAJc3Bpbl9sb2NrKCZzYl9zZWN1cml0eV9sb2NrKTsKIG5leHRfc2I6CiAJaWYgKCFsaXN0X2VtcHR5KCZzdXBlcmJsb2NrX3NlY3VyaXR5X2hlYWQpKSB7CkBAIC00NDM2LDE5ICs0NDMxLDIwIEBACiAJCQkJICAgICAgICAgICBzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QsCiAJCQkJICAgICAgICAgICBsaXN0KTsKIAkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNic2VjLT5zYjsKLQkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIAkJc2ItPnNfY291bnQrKzsKLQkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwogCQlzcGluX3VubG9jaygmc2Jfc2VjdXJpdHlfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKIAkJZG93bl9yZWFkKCZzYi0+c191bW91bnQpOwogCQlpZiAoc2ItPnNfcm9vdCkKIAkJCXN1cGVyYmxvY2tfZG9pbml0KHNiLCBOVUxMKTsKIAkJZHJvcF9zdXBlcihzYik7CisJCXNwaW5fbG9jaygmc2JfbG9jayk7CiAJCXNwaW5fbG9jaygmc2Jfc2VjdXJpdHlfbG9jayk7CiAJCWxpc3RfZGVsX2luaXQoJnNic2VjLT5saXN0KTsKIAkJZ290byBuZXh0X3NiOwogCX0KIAlzcGluX3VubG9jaygmc2Jfc2VjdXJpdHlfbG9jayk7CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOwogfQogCiAvKiBTRUxpbnV4IHJlcXVpcmVzIGVhcmx5IGluaXRpYWxpemF0aW9uIGluIG9yZGVyIHRvIGxhYmVsCkBAIC00NTQzLDYgKzQ1MzksNyBAQAogCXByaW50ayhLRVJOX0lORk8gIlNFTGludXg6ICBEaXNhYmxlZCBhdCBydW50aW1lLlxuIik7CiAKIAlzZWxpbnV4X2Rpc2FibGVkID0gMTsKKwlzZWxpbnV4X2VuYWJsZWQgPSAwOwogCiAJLyogUmVzZXQgc2VjdXJpdHlfb3BzIHRvIHRoZSBzZWNvbmRhcnkgbW9kdWxlLCBkdW1teSBvciBjYXBhYmlsaXR5LiAqLwogCXNlY3VyaXR5X29wcyA9IHNlY29uZGFyeV9vcHM7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCmluZGV4IDVmMDE2YzkuLjA2M2FmNDcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCkBAIC0yOSwxMiArMjksNyBAQAogI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX01JTiAgIFBPTElDWURCX1ZFUlNJT05fQkFTRQogI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX01BWCAgIFBPTElDWURCX1ZFUlNJT05fQVZUQUIKIAotI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTQogZXh0ZXJuIGludCBzZWxpbnV4X2VuYWJsZWQ7Ci0jZWxzZQotI2RlZmluZSBzZWxpbnV4X2VuYWJsZWQgMQotI2VuZGlmCi0KIGV4dGVybiBpbnQgc2VsaW51eF9tbHNfZW5hYmxlZDsKIAogaW50IHNlY3VyaXR5X2xvYWRfcG9saWN5KHZvaWQgKiBkYXRhLCBzaXplX3QgbGVuKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCmluZGV4IDY0MGQwYmYuLjdiYzViNjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKglTdXBwb3J0IGZvciBlbmhhbmNlZCBNTFMgaW5mcmFzdHJ1Y3R1cmUuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgVHJ1c3RlZCBDb21wdXRlciBTb2x1dGlvbnMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFRydXN0ZWQgQ29tcHV0ZXIgU29sdXRpb25zLCBJbmMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIAlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpIHsKIAkJaWYgKGRlZl9zaWQgIT0gU0VDU0lEX05VTEwgJiYgb2xkYykKLQkJCSpzY29udGV4dCArPSBzdHJsZW4oKnNjb250ZXh0KTsKKwkJCSpzY29udGV4dCArPSBzdHJsZW4oKnNjb250ZXh0KSsxOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM4NSw2ICszODUsMzQgQEAKIH0KIAogLyoKKyAqIFNldCB0aGUgTUxTIGZpZWxkcyBpbiB0aGUgc2VjdXJpdHkgY29udGV4dCBzdHJ1Y3R1cmUKKyAqIGBjb250ZXh0JyBiYXNlZCBvbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluCisgKiB0aGUgc3RyaW5nIGBzdHInLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRlbXBvcmFyeSBtZW1vcnkgd2l0aCB0aGUKKyAqIGdpdmVuIGNvbnN0cmFpbnRzIG9mIGdmcF9tYXNrLgorICovCitpbnQgbWxzX2Zyb21fc3RyaW5nKGNoYXIgKnN0ciwgc3RydWN0IGNvbnRleHQgKmNvbnRleHQsIGdmcF90IGdmcF9tYXNrKQoreworCWNoYXIgKnRtcHN0ciwgKmZyZWVzdHI7CisJaW50IHJjOworCisJaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHdlIG5lZWQgZnJlZXN0ciBiZWNhdXNlIG1sc19jb250ZXh0X3RvX3NpZCB3aWxsIGNoYW5nZQorCSAgIHRoZSB2YWx1ZSBvZiB0bXBzdHIgKi8KKwl0bXBzdHIgPSBmcmVlc3RyID0ga3N0cmR1cChzdHIsIGdmcF9tYXNrKTsKKwlpZiAoIXRtcHN0cikgeworCQlyYyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJcmMgPSBtbHNfY29udGV4dF90b19zaWQoJzonLCAmdG1wc3RyLCBjb250ZXh0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBTRUNTSURfTlVMTCk7CisJCWtmcmVlKGZyZWVzdHIpOworCX0KKworCXJldHVybiByYzsKK30KKworLyoKICAqIENvcGllcyB0aGUgZWZmZWN0aXZlIE1MUyByYW5nZSBmcm9tIGBzcmMnIGludG8gYGRzdCcuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG1sc19zY29weV9jb250ZXh0KHN0cnVjdCBjb250ZXh0ICpkc3QsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaAppbmRleCAwM2RlNjk3Li5mYmI0MmYwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmgKQEAgLTgsNyArOCw3IEBACiAgKgogICoJU3VwcG9ydCBmb3IgZW5oYW5jZWQgTUxTIGluZnJhc3RydWN0dXJlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFRydXN0ZWQgQ29tcHV0ZXIgU29sdXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgogICovCiAKICNpZm5kZWYgX1NTX01MU19IXwpAQCAtMjcsNiArMjcsOCBAQAogCQkgICAgICAgc3RydWN0IHNpZHRhYiAqcywKIAkJICAgICAgIHUzMiBkZWZfc2lkKTsKIAoraW50IG1sc19mcm9tX3N0cmluZyhjaGFyICpzdHIsIHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LCBnZnBfdCBnZnBfbWFzayk7CisKIGludCBtbHNfY29udmVydF9jb250ZXh0KHN0cnVjdCBwb2xpY3lkYiAqb2xkcCwKIAkJCXN0cnVjdCBwb2xpY3lkYiAqbmV3cCwKIAkJCXN0cnVjdCBjb250ZXh0ICpjb250ZXh0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCA2MTQ5MjQ4Li5jMjg0ZGJiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC03LDEyICs3LDEzIEBACiAgKiBVcGRhdGVkOiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLiA8ZGdvZWRkZWxAdHJ1c3RlZGNzLmNvbT4KICAqCiAgKglTdXBwb3J0IGZvciBlbmhhbmNlZCBNTFMgaW5mcmFzdHJ1Y3R1cmUuCisgKglTdXBwb3J0IGZvciBjb250ZXh0IGJhc2VkIGF1ZGl0IGZpbHRlcnMuCiAgKgogICogVXBkYXRlZDogRnJhbmsgTWF5ZXIgPG1heWVyZkB0cmVzeXMuY29tPiBhbmQgS2FybCBNYWNNaWxsYW4gPGttYWNtaWxsYW5AdHJlc3lzLmNvbT4KICAqCiAgKiAJQWRkZWQgY29uZGl0aW9uYWwgcG9saWN5IGxhbmd1YWdlIGV4dGVuc2lvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgVHJ1c3RlZCBDb21wdXRlciBTb2x1dGlvbnMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDQgVHJlc3lzIFRlY2hub2xvZ3ksIExMQwogICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTU5Myw2ICs1OTQsMTAgQEAKIAogCQkJKnNjb250ZXh0X2xlbiA9IHN0cmxlbihpbml0aWFsX3NpZF90b19zdHJpbmdbc2lkXSkgKyAxOwogCQkJc2NvbnRleHRwID0ga21hbGxvYygqc2NvbnRleHRfbGVuLEdGUF9BVE9NSUMpOworCQkJaWYgKCFzY29udGV4dHApIHsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCQlzdHJjcHkoc2NvbnRleHRwLCBpbml0aWFsX3NpZF90b19zdHJpbmdbc2lkXSk7CiAJCQkqc2NvbnRleHQgPSBzY29udGV4dHA7CiAJCQlnb3RvIG91dDsKQEAgLTE4MTEsMyArMTgxNiwyMzUgQEAKIAlQT0xJQ1lfUkRVTkxPQ0s7CiAJcmV0dXJuIHJjOwogfQorCitzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlIHsKKwl1MzIgYXVfc2Vxbm87CisJc3RydWN0IGNvbnRleHQgYXVfY3R4dDsKK307CisKK3ZvaWQgc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUoc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqcnVsZSkKK3sKKwlpZiAocnVsZSkgeworCQljb250ZXh0X2Rlc3Ryb3koJnJ1bGUtPmF1X2N0eHQpOworCQlrZnJlZShydWxlKTsKKwl9Cit9CisKK2ludCBzZWxpbnV4X2F1ZGl0X3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICoqcnVsZSkKK3sKKwlzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICp0bXBydWxlOworCXN0cnVjdCByb2xlX2RhdHVtICpyb2xlZGF0dW07CisJc3RydWN0IHR5cGVfZGF0dW0gKnR5cGVkYXR1bTsKKwlzdHJ1Y3QgdXNlcl9kYXR1bSAqdXNlcmRhdHVtOworCWludCByYyA9IDA7CisKKwkqcnVsZSA9IE5VTEw7CisKKwlpZiAoIXNzX2luaXRpYWxpemVkKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgQVVESVRfU0VfVVNFUjoKKwljYXNlIEFVRElUX1NFX1JPTEU6CisJY2FzZSBBVURJVF9TRV9UWVBFOgorCQkvKiBvbmx5ICdlcXVhbHMnIGFuZCAnbm90IGVxdWFscycgZml0IHVzZXIsIHJvbGUsIGFuZCB0eXBlICovCisJCWlmIChvcCAhPSBBVURJVF9FUVVBTCAmJiBvcCAhPSBBVURJVF9OT1RfRVFVQUwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBBVURJVF9TRV9TRU46CisJY2FzZSBBVURJVF9TRV9DTFI6CisJCS8qIHdlIGRvIG5vdCBhbGxvdyBhIHJhbmdlLCBpbmRpY2F0ZWQgYnkgdGhlIHByZXNlbnNlIG9mICctJyAqLworCQlpZiAoc3RyY2hyKHJ1bGVzdHIsICctJykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogb25seSB0aGUgYWJvdmUgZmllbGRzIGFyZSB2YWxpZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl0bXBydWxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSksIEdGUF9LRVJORUwpOworCWlmICghdG1wcnVsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb250ZXh0X2luaXQoJnRtcHJ1bGUtPmF1X2N0eHQpOworCisJUE9MSUNZX1JETE9DSzsKKworCXRtcHJ1bGUtPmF1X3NlcW5vID0gbGF0ZXN0X2dyYW50aW5nOworCisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgQVVESVRfU0VfVVNFUjoKKwkJdXNlcmRhdHVtID0gaGFzaHRhYl9zZWFyY2gocG9saWN5ZGIucF91c2Vycy50YWJsZSwgcnVsZXN0cik7CisJCWlmICghdXNlcmRhdHVtKQorCQkJcmMgPSAtRUlOVkFMOworCQllbHNlCisJCQl0bXBydWxlLT5hdV9jdHh0LnVzZXIgPSB1c2VyZGF0dW0tPnZhbHVlOworCQlicmVhazsKKwljYXNlIEFVRElUX1NFX1JPTEU6CisJCXJvbGVkYXR1bSA9IGhhc2h0YWJfc2VhcmNoKHBvbGljeWRiLnBfcm9sZXMudGFibGUsIHJ1bGVzdHIpOworCQlpZiAoIXJvbGVkYXR1bSkKKwkJCXJjID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJdG1wcnVsZS0+YXVfY3R4dC5yb2xlID0gcm9sZWRhdHVtLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBBVURJVF9TRV9UWVBFOgorCQl0eXBlZGF0dW0gPSBoYXNodGFiX3NlYXJjaChwb2xpY3lkYi5wX3R5cGVzLnRhYmxlLCBydWxlc3RyKTsKKwkJaWYgKCF0eXBlZGF0dW0pCisJCQlyYyA9IC1FSU5WQUw7CisJCWVsc2UKKwkJCXRtcHJ1bGUtPmF1X2N0eHQudHlwZSA9IHR5cGVkYXR1bS0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgQVVESVRfU0VfU0VOOgorCWNhc2UgQVVESVRfU0VfQ0xSOgorCQlyYyA9IG1sc19mcm9tX3N0cmluZyhydWxlc3RyLCAmdG1wcnVsZS0+YXVfY3R4dCwgR0ZQX0FUT01JQyk7CisJCWJyZWFrOworCX0KKworCVBPTElDWV9SRFVOTE9DSzsKKworCWlmIChyYykgeworCQlzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZSh0bXBydWxlKTsKKwkJdG1wcnVsZSA9IE5VTEw7CisJfQorCisJKnJ1bGUgPSB0bXBydWxlOworCisJcmV0dXJuIHJjOworfQorCitpbnQgc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKHUzMiBjdHhpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKnJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KQoreworCXN0cnVjdCBjb250ZXh0ICpjdHh0OworCXN0cnVjdCBtbHNfbGV2ZWwgKmxldmVsOworCWludCBtYXRjaCA9IDA7CisKKwlpZiAoIXJ1bGUpIHsKKwkJYXVkaXRfbG9nKGFjdHgsIEdGUF9BVE9NSUMsIEFVRElUX1NFTElOVVhfRVJSLAorCQkgICAgICAgICAgInNlbGludXhfYXVkaXRfcnVsZV9tYXRjaDogbWlzc2luZyBydWxlXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJUE9MSUNZX1JETE9DSzsKKworCWlmIChydWxlLT5hdV9zZXFubyA8IGxhdGVzdF9ncmFudGluZykgeworCQlhdWRpdF9sb2coYWN0eCwgR0ZQX0FUT01JQywgQVVESVRfU0VMSU5VWF9FUlIsCisJCSAgICAgICAgICAic2VsaW51eF9hdWRpdF9ydWxlX21hdGNoOiBzdGFsZSBydWxlXG4iKTsKKwkJbWF0Y2ggPSAtRVNUQUxFOworCQlnb3RvIG91dDsKKwl9CisKKwljdHh0ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCBjdHhpZCk7CisJaWYgKCFjdHh0KSB7CisJCWF1ZGl0X2xvZyhhY3R4LCBHRlBfQVRPTUlDLCBBVURJVF9TRUxJTlVYX0VSUiwKKwkJICAgICAgICAgICJzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2g6IHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCSAgICAgICAgICBjdHhpZCk7CisJCW1hdGNoID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogYSBmaWVsZC9vcCBwYWlyIHRoYXQgaXMgbm90IGNhdWdodCBoZXJlIHdpbGwgc2ltcGx5IGZhbGwgdGhyb3VnaAorCSAgIHdpdGhvdXQgYSBtYXRjaCAqLworCXN3aXRjaCAoZmllbGQpIHsKKwljYXNlIEFVRElUX1NFX1VTRVI6CisJCXN3aXRjaCAob3ApIHsKKwkJY2FzZSBBVURJVF9FUVVBTDoKKwkJCW1hdGNoID0gKGN0eHQtPnVzZXIgPT0gcnVsZS0+YXVfY3R4dC51c2VyKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElUX05PVF9FUVVBTDoKKwkJCW1hdGNoID0gKGN0eHQtPnVzZXIgIT0gcnVsZS0+YXVfY3R4dC51c2VyKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgQVVESVRfU0VfUk9MRToKKwkJc3dpdGNoIChvcCkgeworCQljYXNlIEFVRElUX0VRVUFMOgorCQkJbWF0Y2ggPSAoY3R4dC0+cm9sZSA9PSBydWxlLT5hdV9jdHh0LnJvbGUpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfTk9UX0VRVUFMOgorCQkJbWF0Y2ggPSAoY3R4dC0+cm9sZSAhPSBydWxlLT5hdV9jdHh0LnJvbGUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBVURJVF9TRV9UWVBFOgorCQlzd2l0Y2ggKG9wKSB7CisJCWNhc2UgQVVESVRfRVFVQUw6CisJCQltYXRjaCA9IChjdHh0LT50eXBlID09IHJ1bGUtPmF1X2N0eHQudHlwZSk7CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9OT1RfRVFVQUw6CisJCQltYXRjaCA9IChjdHh0LT50eXBlICE9IHJ1bGUtPmF1X2N0eHQudHlwZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEFVRElUX1NFX1NFTjoKKwljYXNlIEFVRElUX1NFX0NMUjoKKwkJbGV2ZWwgPSAob3AgPT0gQVVESVRfU0VfU0VOID8KKwkJICAgICAgICAgJmN0eHQtPnJhbmdlLmxldmVsWzBdIDogJmN0eHQtPnJhbmdlLmxldmVsWzFdKTsKKwkJc3dpdGNoIChvcCkgeworCQljYXNlIEFVRElUX0VRVUFMOgorCQkJbWF0Y2ggPSBtbHNfbGV2ZWxfZXEoJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0sCisJCQkgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9OT1RfRVFVQUw6CisJCQltYXRjaCA9ICFtbHNfbGV2ZWxfZXEoJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0sCisJCQkgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfTEVTU19USEFOOgorCQkJbWF0Y2ggPSAobWxzX2xldmVsX2RvbSgmcnVsZS0+YXVfY3R4dC5yYW5nZS5sZXZlbFswXSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpICYmCisJCQkgICAgICAgICAhbWxzX2xldmVsX2VxKCZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCkpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfTEVTU19USEFOX09SX0VRVUFMOgorCQkJbWF0Y2ggPSBtbHNfbGV2ZWxfZG9tKCZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdLAorCQkJICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElUX0dSRUFURVJfVEhBTjoKKwkJCW1hdGNoID0gKG1sc19sZXZlbF9kb20obGV2ZWwsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0pICYmCisJCQkgICAgICAgICAhbWxzX2xldmVsX2VxKGxldmVsLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAmcnVsZS0+YXVfY3R4dC5yYW5nZS5sZXZlbFswXSkpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfR1JFQVRFUl9USEFOX09SX0VRVUFMOgorCQkJbWF0Y2ggPSBtbHNfbGV2ZWxfZG9tKGxldmVsLAorCQkJICAgICAgICAgICAgICAgICAgICAgICZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdKTsKKwkJCWJyZWFrOworCQl9CisJfQorCitvdXQ6CisJUE9MSUNZX1JEVU5MT0NLOworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCAoKmF1cnVsZV9jYWxsYmFjaykodm9pZCkgPSBOVUxMOworCitzdGF0aWMgaW50IGF1cnVsZV9hdmNfY2FsbGJhY2sodTMyIGV2ZW50LCB1MzIgc3NpZCwgdTMyIHRzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNsYXNzLCB1MzIgcGVybXMsIHUzMiAqcmV0YWluZWQpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZXZlbnQgPT0gQVZDX0NBTExCQUNLX1JFU0VUICYmIGF1cnVsZV9jYWxsYmFjaykKKwkJZXJyID0gYXVydWxlX2NhbGxiYWNrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgYXVydWxlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYXZjX2FkZF9jYWxsYmFjayhhdXJ1bGVfYXZjX2NhbGxiYWNrLCBBVkNfQ0FMTEJBQ0tfUkVTRVQsCisJICAgICAgICAgICAgICAgICAgICAgICBTRUNTSURfTlVMTCwgU0VDU0lEX05VTEwsIFNFQ0NMQVNTX05VTEwsIDApOworCWlmIChlcnIpCisJCXBhbmljKCJhdmNfYWRkX2NhbGxiYWNrKCkgZmFpbGVkLCBlcnJvciAlZFxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CitfX2luaXRjYWxsKGF1cnVsZV9pbml0KTsKKwordm9pZCBzZWxpbnV4X2F1ZGl0X3NldF9jYWxsYmFjayhpbnQgKCpjYWxsYmFjaykodm9pZCkpCit7CisJYXVydWxlX2NhbGxiYWNrID0gY2FsbGJhY2s7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3hmcm0uYyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCmluZGV4IGRmYWI2YzguLmFiZTk5ZDggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCkBAIC0yODEsNyArMjgxLDcgQEAKIAkJaW50IGk7CiAKIAkJZm9yIChpID0gc3AtPmxlbi0xOyBpID49IDA7IGktLSkgewotCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBzcC0+eFtpXS54dmVjOworCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBzcC0+eHZlY1tpXTsKIAkJCWlmIChzZWxpbnV4X2F1dGhvcml6YWJsZV94ZnJtKHgpKSB7CiAJCQkJc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0geC0+c2VjdXJpdHk7CiAJCQkJcmV0dXJuIGN0eC0+Y3R4X3NpZDsKQEAgLTMxNCw3ICszMTQsNyBAQAogCQkgKiAgT25seSBuZWVkIHRvIHZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIGFuIGF1dGhvcml6YWJsZSBzcC4KIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBzcC0+bGVuOyBpKyspIHsKLQkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gc3AtPnhbaV0ueHZlYzsKKwkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gc3AtPnh2ZWNbaV07CiAKIAkJCWlmICh4ICYmIHNlbGludXhfYXV0aG9yaXphYmxlX3hmcm0oeCkpCiAJCQkJZ290byBhY2NlcHQ7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL0tjb25maWcgYi9zb3VuZC9jb3JlL0tjb25maWcKaW5kZXggOWRkMTIxYi4uNDI2MmExYyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9LY29uZmlnCisrKyBiL3NvdW5kL2NvcmUvS2NvbmZpZwpAQCAtOTIsOCArOTIsOSBAQAogCiAJICBNYW55IHByb2dyYW1zIHN0aWxsIHVzZSB0aGUgT1NTIEFQSSwgc28gc2F5IFkuCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1zZXEtb3NzLgorCSAgSWYgeW91IGNob29zZSBNIGluICJTZXF1ZW5jZXIgc3VwcG9ydCIgKFNORF9TRVFVRU5DRVIpLAorCSAgdGhpcyB3aWxsIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCisJICBzbmQtc2VxLW9zcy4KIAogY29uZmlnIFNORF9SVENUSU1FUgogCXRyaXN0YXRlICJSVEMgVGltZXIgc3VwcG9ydCIKQEAgLTE0MSw3ICsxNDIsNyBAQAogCiBjb25maWcgU05EX1ZFUkJPU0VfUFJPQ0ZTCiAJYm9vbCAiVmVyYm9zZSBwcm9jZnMgY29udGVudHMiCi0JZGVwZW5kcyBvbiBTTkQKKwlkZXBlbmRzIG9uIFNORCAmJiBQUk9DX0ZTCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGNvZGUgZm9yIHZlcmJvc2UgcHJvY2ZzIGNvbnRlbnRzIChwcm92aWRlcwpAQCAtMTcwLDMgKzE3MSwxMyBAQAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGV4dHJhLXZlcmJvc2UgbG9nIG1lc3NhZ2VzIHByaW50ZWQgd2hlbgogCSAgZGV0ZWN0aW5nIGRldmljZXMuCisKK2NvbmZpZyBTTkRfUENNX1hSVU5fREVCVUcKKwlib29sICJFbmFibGUgUENNIHJpbmcgYnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZGVidWdnaW5nIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gU05EX0RFQlVHICYmIFNORF9WRVJCT1NFX1BST0NGUworCWhlbHAKKwkgIFNheSBZIHRvIGVuYWJsZSB0aGUgUENNIHJpbmcgYnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZGVidWdnaW5nLgorCSAgSXQgaXMgdXN1YWxseSBub3QgcmVxdWlyZWQsIGJ1dCBpZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGgKKwkgIHNvdW5kIGNsaWNraW5nIHdoZW4gc3lzdGVtIGlzIGxvYWRlZCwgaXQgbWF5IGhlbHAgdG8gZGV0ZXJtaW5lCisJICB0aGUgcHJvY2VzcyBvciBkcml2ZXIgd2hpY2ggY2F1c2VzIHRoZSBzY2hlZHVsaW5nIGdhcHMuCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IDU3NDc0NTMuLjIyNTY1YzliIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtNjY0LDcgKzY2NCw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCBfaW5mbywgc2l6ZW9mKGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJc25kX3Bvd2VyX2xvY2soY3RsLT5jYXJkKTsKLQlyZXN1bHQgPSBzbmRfcG93ZXJfd2FpdChjdGwtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY3RsLT5jYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwogCWlmIChyZXN1bHQgPj0gMCkKIAkJcmVzdWx0ID0gc25kX2N0bF9lbGVtX2luZm8oY3RsLCAmaW5mbyk7CiAJc25kX3Bvd2VyX3VubG9jayhjdGwtPmNhcmQpOwpAQCAtNzE4LDcgKzcxOCw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAlzbmRfcG93ZXJfbG9jayhjYXJkKTsKLQlyZXN1bHQgPSBzbmRfcG93ZXJfd2FpdChjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDAsIE5VTEwpOworCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CiAJaWYgKHJlc3VsdCA+PSAwKQogCQlyZXN1bHQgPSBzbmRfY3RsX2VsZW1fcmVhZChjYXJkLCBjb250cm9sKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwpAQCAtNzgzLDcgKzc4Myw3IEBACiAJfQogCWNhcmQgPSBmaWxlLT5jYXJkOwogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwotCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAlpZiAocmVzdWx0ID49IDApCiAJCXJlc3VsdCA9IHNuZF9jdGxfZWxlbV93cml0ZShjYXJkLCBmaWxlLCBjb250cm9sKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sX2NvbXBhdC5jIGIvc291bmQvY29yZS9jb250cm9sX2NvbXBhdC5jCmluZGV4IDg0ZmVmNTAuLjNjMDE2MWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbF9jb21wYXQuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2xfY29tcGF0LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCQlnb3RvIGVycm9yOwogCiAJc25kX3Bvd2VyX2xvY2soY3RsLT5jYXJkKTsKLQllcnIgPSBzbmRfcG93ZXJfd2FpdChjdGwtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJZXJyID0gc25kX3Bvd2VyX3dhaXQoY3RsLT5jYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwogCWlmIChlcnIgPj0gMCkKIAkJZXJyID0gc25kX2N0bF9lbGVtX2luZm8oY3RsLCBkYXRhKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGN0bC0+Y2FyZCk7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAkJZ290byBlcnJvcjsKIAogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwotCWVyciA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJZXJyID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAlpZiAoZXJyID49IDApCiAJCWVyciA9IHNuZF9jdGxfZWxlbV9yZWFkKGNhcmQsIGRhdGEpOwogCXNuZF9wb3dlcl91bmxvY2soY2FyZCk7CkBAIC0zMjAsNyArMzIwLDcgQEAKIAkJZ290byBlcnJvcjsKIAogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwotCWVyciA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJZXJyID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAlpZiAoZXJyID49IDApCiAJCWVyciA9IHNuZF9jdGxfZWxlbV93cml0ZShjYXJkLCBmaWxlLCBkYXRhKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCA1YmI4YThiLi4zOWVkMmU1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtNzIyLDEzICs3MjIsMTIgQEAKICAqICBzbmRfcG93ZXJfd2FpdCAtIHdhaXQgdW50aWwgdGhlIHBvd2VyLXN0YXRlIGlzIGNoYW5nZWQuCiAgKiAgQGNhcmQ6IHNvdW5kY2FyZCBzdHJ1Y3R1cmUKICAqICBAcG93ZXJfc3RhdGU6IGV4cGVjdGVkIHBvd2VyIHN0YXRlCi0gKiAgQGZpbGU6IGZpbGUgc3RydWN0dXJlIGZvciB0aGUgT19OT05CTE9DSyBjaGVjayAob3B0aW9uYWwpCiAgKgogICogIFdhaXRzIHVudGlsIHRoZSBwb3dlci1zdGF0ZSBpcyBjaGFuZ2VkLgogICoKICAqICBOb3RlOiB0aGUgcG93ZXIgbG9jayBtdXN0IGJlIGFjdGl2ZSBiZWZvcmUgY2FsbC4KICAqLwotaW50IHNuZF9wb3dlcl93YWl0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IHBvd2VyX3N0YXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK2ludCBzbmRfcG93ZXJfd2FpdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSkKIHsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTc0NSwxMiArNzQ0LDYgQEAKIAkJfQogCQlpZiAoc25kX3Bvd2VyX2dldF9zdGF0ZShjYXJkKSA9PSBwb3dlcl9zdGF0ZSkKIAkJCWJyZWFrOwotI2lmIDAgLyogYmxvY2sgYWxsIGRldmljZXMgKi8KLQkJaWYgKGZpbGUgJiYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewotCQkJcmVzdWx0ID0gLUVBR0FJTjsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwogCQlzY2hlZHVsZV90aW1lb3V0KDMwICogSFopOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCmluZGV4IGY4MzAyYjcuLmFjOTkwYmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTIwOCw5ICsyMDgsOCBAQAogCQkJb3NzX2J1ZmZlcl9zaXplID0gcnVudGltZS0+b3NzLm1tYXBfYnl0ZXM7CiAJfQogCi0JaWYgKHN1YnN0cmVhbS0+b3NzLnNldHVwICYmCi0JICAgIHN1YnN0cmVhbS0+b3NzLnNldHVwLT5wZXJpb2Rfc2l6ZSA+IDE2KQotCQlvc3NfcGVyaW9kX3NpemUgPSBzdWJzdHJlYW0tPm9zcy5zZXR1cC0+cGVyaW9kX3NpemU7CisJaWYgKHN1YnN0cmVhbS0+b3NzLnNldHVwLnBlcmlvZF9zaXplID4gMTYpCisJCW9zc19wZXJpb2Rfc2l6ZSA9IHN1YnN0cmVhbS0+b3NzLnNldHVwLnBlcmlvZF9zaXplOwogCWVsc2UgaWYgKHJ1bnRpbWUtPm9zcy5mcmFnc2hpZnQpIHsKIAkJb3NzX3BlcmlvZF9zaXplID0gMSA8PCBydW50aW1lLT5vc3MuZnJhZ3NoaWZ0OwogCQlpZiAob3NzX3BlcmlvZF9zaXplID4gb3NzX2J1ZmZlcl9zaXplIC8gMikKQEAgLTI1MiwxMCArMjUxLDggQEAKIAogCW9zc19wZXJpb2RzID0gb3NzX2J1ZmZlcl9zaXplIC8gb3NzX3BlcmlvZF9zaXplOwogCi0JaWYgKHN1YnN0cmVhbS0+b3NzLnNldHVwKSB7Ci0JCWlmIChzdWJzdHJlYW0tPm9zcy5zZXR1cC0+cGVyaW9kcyA+IDEpCi0JCQlvc3NfcGVyaW9kcyA9IHN1YnN0cmVhbS0+b3NzLnNldHVwLT5wZXJpb2RzOwotCX0KKwlpZiAoc3Vic3RyZWFtLT5vc3Muc2V0dXAucGVyaW9kcyA+IDEpCisJCW9zc19wZXJpb2RzID0gc3Vic3RyZWFtLT5vc3Muc2V0dXAucGVyaW9kczsKIAogCXMgPSBzbmRfcGNtX2h3X3BhcmFtX3ZhbHVlX21heChzbGF2ZV9wYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTLCBOVUxMKTsKIAlpZiAocnVudGltZS0+b3NzLm1heGZyYWdzICYmIHMgPiBydW50aW1lLT5vc3MubWF4ZnJhZ3MpCkBAIC0zNDEsMTIgKzMzOCwxMCBAQAogCQlnb3RvIGZhaWx1cmU7CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZydW50aW1lLT5tbWFwX2NvdW50KSkgeworCWlmIChhdG9taWNfcmVhZCgmcnVudGltZS0+bW1hcF9jb3VudCkpCiAJCWRpcmVjdCA9IDE7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCA9IHN1YnN0cmVhbS0+b3NzLnNldHVwOwotCQlkaXJlY3QgPSAoc2V0dXAgIT0gTlVMTCAmJiBzZXR1cC0+ZGlyZWN0KTsKLQl9CisJZWxzZQorCQlkaXJlY3QgPSBzdWJzdHJlYW0tPm9zcy5zZXR1cC5kaXJlY3Q7CiAKIAlfc25kX3BjbV9od19wYXJhbXNfYW55KHNwYXJhbXMpOwogCV9zbmRfcGNtX2h3X3BhcmFtX3NldGludGVnZXIoc3BhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwpAQCAtNDgyLDcgKzQ3Nyw3IEBACiAJCTEgOiBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKIAlzd19wYXJhbXMtPnhmZXJfYWxpZ24gPSAxOwogCWlmIChhdG9taWNfcmVhZCgmcnVudGltZS0+bW1hcF9jb3VudCkgfHwKLQkgICAgKHN1YnN0cmVhbS0+b3NzLnNldHVwICYmIHN1YnN0cmVhbS0+b3NzLnNldHVwLT5ub3NpbGVuY2UpKSB7CisJICAgIHN1YnN0cmVhbS0+b3NzLnNldHVwLm5vc2lsZW5jZSkgewogCQlzd19wYXJhbXMtPnNpbGVuY2VfdGhyZXNob2xkID0gMDsKIAkJc3dfcGFyYW1zLT5zaWxlbmNlX3NpemUgPSAwOwogCX0gZWxzZSB7CkBAIC04NDMsNyArODM4LDcgQEAKIAkJCWJ1ZiArPSB0bXA7CiAJCQlieXRlcyAtPSB0bXA7CiAJCQl4ZmVyICs9IHRtcDsKLQkJCWlmICgoc3Vic3RyZWFtLT5vc3Muc2V0dXAgIT0gTlVMTCAmJiBzdWJzdHJlYW0tPm9zcy5zZXR1cC0+cGFydGlhbGZyYWcpIHx8CisJCQlpZiAoc3Vic3RyZWFtLT5vc3Muc2V0dXAucGFydGlhbGZyYWcgfHwKIAkJCSAgICBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQgPT0gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcykgewogCQkJCXRtcCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sIHJ1bnRpbWUtPm9zcy5idWZmZXIgKyBydW50aW1lLT5vc3MucGVyaW9kX3B0ciwgCiAJCQkJCQkJIHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCAtIHJ1bnRpbWUtPm9zcy5wZXJpb2RfcHRyLCAxKTsKQEAgLTk1OSwxMiArOTU0LDEyIEBACiAKIAlzdWJzdHJlYW0gPSBwY21fb3NzX2ZpbGUtPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CiAJaWYgKHN1YnN0cmVhbSAhPSBOVUxMKSB7Ci0JCXNuZF9wY21fa2VybmVsX3BsYXliYWNrX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RST1AsIE5VTEwpOworCQlzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUk9QLCBOVUxMKTsKIAkJc3Vic3RyZWFtLT5ydW50aW1lLT5vc3MucHJlcGFyZSA9IDE7CiAJfQogCXN1YnN0cmVhbSA9IHBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdOwogCWlmIChzdWJzdHJlYW0gIT0gTlVMTCkgewotCQlzbmRfcGNtX2tlcm5lbF9jYXB0dXJlX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RST1AsIE5VTEwpOworCQlzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUk9QLCBOVUxMKTsKIAkJc3Vic3RyZWFtLT5ydW50aW1lLT5vc3MucHJlcGFyZSA9IDE7CiAJfQogCXJldHVybiAwOwpAQCAtOTc5LDcgKzk3NCw3IEBACiAJaWYgKHN1YnN0cmVhbSAhPSBOVUxMKSB7CiAJCWlmICgoZXJyID0gc25kX3BjbV9vc3NfbWFrZV9yZWFkeShzdWJzdHJlYW0pKSA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQlzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9TVEFSVCwgTlVMTCk7CisJCXNuZF9wY21fa2VybmVsX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX1NUQVJULCBOVUxMKTsKIAl9CiAJLyogbm90ZTogYWxsIGVycm9ycyBmcm9tIHRoZSBzdGFydCBhY3Rpb24gYXJlIGlnbm9yZWQgKi8KIAkvKiBPU1MgYXBwcyBkbyBub3Qga25vdywgaG93IHRvIGhhbmRsZSB0aGVtICovCkBAIC0xMTA4LDcgKzExMDMsNyBAQAogCSAgICAgIF9fZGlyZWN0OgogCQlzYXZlZF9mX2ZsYWdzID0gc3Vic3RyZWFtLT5mZmlsZS0+Zl9mbGFnczsKIAkJc3Vic3RyZWFtLT5mZmlsZS0+Zl9mbGFncyAmPSB+T19OT05CTE9DSzsKLQkJZXJyID0gc25kX3BjbV9rZXJuZWxfcGxheWJhY2tfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJBSU4sIE5VTEwpOworCQllcnIgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUkFJTiwgTlVMTCk7CiAJCXN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgPSBzYXZlZF9mX2ZsYWdzOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC0xMTIwLDcgKzExMTUsNyBAQAogCQlpZiAoKGVyciA9IHNuZF9wY21fb3NzX21ha2VfcmVhZHkoc3Vic3RyZWFtKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQkJZXJyID0gc25kX3BjbV9rZXJuZWxfY2FwdHVyZV9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUk9QLCBOVUxMKTsKKwkJZXJyID0gc25kX3BjbV9rZXJuZWxfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJPUCwgTlVMTCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID0gMDsKQEAgLTEyMTQsMTIgKzEyMDksMTAgQEAKIAogCWlmICgoZXJyID0gc25kX3BjbV9vc3NfZ2V0X2FjdGl2ZV9zdWJzdHJlYW0ocGNtX29zc19maWxlLCAmc3Vic3RyZWFtKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmIChhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5ydW50aW1lLT5tbWFwX2NvdW50KSkgeworCWlmIChhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5ydW50aW1lLT5tbWFwX2NvdW50KSkKIAkJZGlyZWN0ID0gMTsKLQl9IGVsc2UgewotCQlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwID0gc3Vic3RyZWFtLT5vc3Muc2V0dXA7Ci0JCWRpcmVjdCA9IChzZXR1cCAhPSBOVUxMICYmIHNldHVwLT5kaXJlY3QpOwotCX0KKwllbHNlCisJCWRpcmVjdCA9IHN1YnN0cmVhbS0+b3NzLnNldHVwLmRpcmVjdDsKIAlpZiAoIWRpcmVjdCkKIAkJcmV0dXJuIEFGTVRfTVVfTEFXIHwgQUZNVF9VOCB8CiAJCSAgICAgICBBRk1UX1MxNl9MRSB8IEFGTVRfUzE2X0JFIHwKQEAgLTEyNDksNiArMTI0Miw4IEBACiAJCiAJaWYgKGZvcm1hdCAhPSBBRk1UX1FVRVJZKSB7CiAJCWZvcm1hdHMgPSBzbmRfcGNtX29zc19nZXRfZm9ybWF0cyhwY21fb3NzX2ZpbGUpOworCQlpZiAoZm9ybWF0cyA8IDApCisJCQlyZXR1cm4gZm9ybWF0czsKIAkJaWYgKCEoZm9ybWF0cyAmIGZvcm1hdCkpCiAJCQlmb3JtYXQgPSBBRk1UX1U4OwogCQlmb3IgKGlkeCA9IDE7IGlkeCA+PSAwOyAtLWlkeCkgewpAQCAtMTQzNyw3ICsxNDMyLDcgQEAKIAkJCWNtZCA9IFNORFJWX1BDTV9JT0NUTF9EUk9QOwogCQkJcnVudGltZS0+b3NzLnByZXBhcmUgPSAxOwogCQl9Ci0JCWVyciA9IHNuZF9wY21fa2VybmVsX3BsYXliYWNrX2lvY3RsKHBzdWJzdHJlYW0sIGNtZCwgTlVMTCk7CisJCWVyciA9IHNuZF9wY21fa2VybmVsX2lvY3RsKHBzdWJzdHJlYW0sIGNtZCwgTlVMTCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNDU4LDcgKzE0NTMsNyBAQAogCQkJY21kID0gU05EUlZfUENNX0lPQ1RMX0RST1A7CiAJCQlydW50aW1lLT5vc3MucHJlcGFyZSA9IDE7CiAJCX0KLQkJZXJyID0gc25kX3BjbV9rZXJuZWxfY2FwdHVyZV9pb2N0bChjc3Vic3RyZWFtLCBjbWQsIE5VTEwpOworCQllcnIgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChjc3Vic3RyZWFtLCBjbWQsIE5VTEwpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTQ5NSw3ICsxNDkwLDcgQEAKIAlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWlmIChydW50aW1lLT5vc3MucGFyYW1zIHx8IHJ1bnRpbWUtPm9zcy5wcmVwYXJlKQogCQlyZXR1cm4gMDsKLQllcnIgPSBzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9ERUxBWSwgJmRlbGF5KTsKKwllcnIgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9ERUxBWSwgJmRlbGF5KTsKIAlpZiAoZXJyID09IC1FUElQRSkKIAkJZGVsYXkgPSAwOwkvKiBoYWNrIGZvciBicm9rZW4gT1NTIGFwcGxpY2F0aW9ucyAqLwogCWVsc2UgaWYgKGVyciA8IDApCkBAIC0xNTU1LDggKzE1NTAsNyBAQAogCX0gZWxzZSB7CiAJCWRlbGF5ID0gc25kX3BjbV9vc3NfYnl0ZXMoc3Vic3RyZWFtLCBkZWxheSk7CiAJCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCA9IHN1YnN0cmVhbS0+b3NzLnNldHVwOwotCQkJaWYgKHNldHVwICYmIHNldHVwLT5idWdneXB0cikKKwkJCWlmIChzdWJzdHJlYW0tPm9zcy5zZXR1cC5idWdneXB0cikKIAkJCQlpbmZvLmJsb2NrcyA9IChydW50aW1lLT5vc3MuYnVmZmVyX2J5dGVzIC0gZGVsYXkgLSBmaXh1cCkgLyBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzOwogCQkJZWxzZQogCQkJCWluZm8uYmxvY2tzID0gKGRlbGF5ICsgZml4dXApIC8gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlczsKQEAgLTE2MzgsMzcgKzE2MzIsNDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqc25kX3BjbV9vc3NfbG9va19mb3Jfc2V0dXAoc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSwgY29uc3QgY2hhciAqdGFza19uYW1lKQorc3RhdGljIGNvbnN0IGNoYXIgKnN0cmlwX3Rhc2tfcGF0aChjb25zdCBjaGFyICpwYXRoKQogewotCWNvbnN0IGNoYXIgKnB0ciwgKnB0cmw7CisJY29uc3QgY2hhciAqcHRyLCAqcHRybCA9IE5VTEw7CisJZm9yIChwdHIgPSBwYXRoOyAqcHRyOyBwdHIrKykgeworCQlpZiAoKnB0ciA9PSAnLycpCisJCQlwdHJsID0gcHRyICsgMTsKKwl9CisJcmV0dXJuIHB0cmw7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9wY21fb3NzX2xvb2tfZm9yX3NldHVwKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0sCisJCQkJICAgICAgY29uc3QgY2hhciAqdGFza19uYW1lLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqcnNldHVwKQorewogCXN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqc2V0dXA7CiAKIAltdXRleF9sb2NrKCZwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbXV0ZXgpOwotCWZvciAoc2V0dXAgPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbGlzdDsgc2V0dXA7IHNldHVwID0gc2V0dXAtPm5leHQpIHsKLQkJaWYgKCFzdHJjbXAoc2V0dXAtPnRhc2tfbmFtZSwgdGFza19uYW1lKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbXV0ZXgpOwotCQkJcmV0dXJuIHNldHVwOworCWRvIHsKKwkJZm9yIChzZXR1cCA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLm9zcy5zZXR1cF9saXN0OyBzZXR1cDsKKwkJICAgICBzZXR1cCA9IHNldHVwLT5uZXh0KSB7CisJCQlpZiAoIXN0cmNtcChzZXR1cC0+dGFza19uYW1lLCB0YXNrX25hbWUpKQorCQkJCWdvdG8gb3V0OwogCQl9Ci0JfQotCXB0ciA9IHB0cmwgPSB0YXNrX25hbWU7Ci0Jd2hpbGUgKCpwdHIpIHsKLQkJaWYgKCpwdHIgPT0gJy8nKQotCQkJcHRybCA9IHB0ciArIDE7Ci0JCXB0cisrOwotCX0KLQlpZiAocHRybCA9PSB0YXNrX25hbWUpIHsKLQkJZ290byBfX25vdF9mb3VuZDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWZvciAoc2V0dXAgPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbGlzdDsgc2V0dXA7IHNldHVwID0gc2V0dXAtPm5leHQpIHsKLQkJaWYgKCFzdHJjbXAoc2V0dXAtPnRhc2tfbmFtZSwgcHRybCkpIHsKLQkJCW11dGV4X3VubG9jaygmcGNtLT5zdHJlYW1zW3N0cmVhbV0ub3NzLnNldHVwX211dGV4KTsKLQkJCXJldHVybiBzZXR1cDsKLQkJfQotCX0KLSAgICAgIF9fbm90X2ZvdW5kOgorCX0gd2hpbGUgKCh0YXNrX25hbWUgPSBzdHJpcF90YXNrX3BhdGgodGFza19uYW1lKSkgIT0gTlVMTCk7Cisgb3V0OgorCWlmIChzZXR1cCkKKwkJKnJzZXR1cCA9ICpzZXR1cDsKIAltdXRleF91bmxvY2soJnBjbS0+c3RyZWFtc1tzdHJlYW1dLm9zcy5zZXR1cF9tdXRleCk7Ci0JcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9wY21fb3NzX3JlbGVhc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl2ZnJlZShydW50aW1lLT5vc3MuYnVmZmVyKTsKKwlydW50aW1lLT5vc3MuYnVmZmVyID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUworCXNuZF9wY21fb3NzX3BsdWdpbl9jbGVhcihzdWJzdHJlYW0pOworI2VuZGlmCisJc3Vic3RyZWFtLT5vc3Mub3NzID0gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3BjbV9vc3NfaW5pdF9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCkBAIC0xNjc4LDcgKzE2ODEsMTEgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwogCiAJc3Vic3RyZWFtLT5vc3Mub3NzID0gMTsKLQlzdWJzdHJlYW0tPm9zcy5zZXR1cCA9IHNldHVwOworCXN1YnN0cmVhbS0+b3NzLnNldHVwID0gKnNldHVwOworCWlmIChzZXR1cC0+bm9uYmxvY2spCisJCXN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwllbHNlIGlmIChzZXR1cC0+YmxvY2spCisJCXN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7CiAJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlydW50aW1lLT5vc3MucGFyYW1zID0gMTsKIAlydW50aW1lLT5vc3MudHJpZ2dlciA9IDE7CkBAIC0xNjk3LDE4ICsxNzA0LDcgQEAKIAlydW50aW1lLT5vc3MuZnJhZ3NoaWZ0ID0gMDsKIAlydW50aW1lLT5vc3MubWF4ZnJhZ3MgPSAwOwogCXJ1bnRpbWUtPm9zcy5zdWJkaXZpc2lvbiA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF9wY21fb3NzX3JlbGVhc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7Ci0JcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQl2ZnJlZShydW50aW1lLT5vc3MuYnVmZmVyKTsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUwotCXNuZF9wY21fb3NzX3BsdWdpbl9jbGVhcihzdWJzdHJlYW0pOwotI2VuZGlmCi0Jc3Vic3RyZWFtLT5vc3MuZmlsZSA9IE5VTEw7Ci0Jc3Vic3RyZWFtLT5vc3Mub3NzID0gMDsKKwlzdWJzdHJlYW0tPnBjbV9yZWxlYXNlID0gc25kX3BjbV9vc3NfcmVsZWFzZV9zdWJzdHJlYW07CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHN0cnVjdCBzbmRfcGNtX29zc19maWxlICpwY21fb3NzX2ZpbGUpCkBAIC0xNzE3LDIzICsxNzEzLDggQEAKIAlzbmRfYXNzZXJ0KHBjbV9vc3NfZmlsZSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlmb3IgKGNpZHggPSAwOyBjaWR4IDwgMjsgKytjaWR4KSB7CiAJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtX29zc19maWxlLT5zdHJlYW1zW2NpZHhdOwotCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCQlpZiAoc3Vic3RyZWFtID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQkJCi0JCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7Ci0JCWlmIChzbmRfcGNtX3J1bm5pbmcoc3Vic3RyZWFtKSkKLQkJCXNuZF9wY21fc3RvcChzdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9TRVRVUCk7Ci0JCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQkJaWYgKHN1YnN0cmVhbS0+ZmZpbGUgIT0gTlVMTCkgewotCQkJaWYgKHN1YnN0cmVhbS0+b3BzLT5od19mcmVlICE9IE5VTEwpCi0JCQkJc3Vic3RyZWFtLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtKTsKLQkJCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQkJc3Vic3RyZWFtLT5mZmlsZSA9IE5VTEw7Ci0JCX0KLQkJc25kX3BjbV9vc3NfcmVsZWFzZV9zdWJzdHJlYW0oc3Vic3RyZWFtKTsKLQkJc25kX3BjbV9yZWxlYXNlX3N1YnN0cmVhbShzdWJzdHJlYW0pOworCQlpZiAoc3Vic3RyZWFtKQorCQkJc25kX3BjbV9yZWxlYXNlX3N1YnN0cmVhbShzdWJzdHJlYW0pOwogCX0KIAlrZnJlZShwY21fb3NzX2ZpbGUpOwogCXJldHVybiAwOwpAQCAtMTc0MywxMiArMTcyNCwxMSBAQAogCQkJCSBzdHJ1Y3Qgc25kX3BjbSAqcGNtLAogCQkJCSBzdHJ1Y3Qgc25kX3BjbV9vc3NfZmlsZSAqKnJwY21fb3NzX2ZpbGUsCiAJCQkJIGludCBtaW5vciwKLQkJCQkgc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpwc2V0dXAsCi0JCQkJIHN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqY3NldHVwKQorCQkJCSBzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwKQogewotCWludCBlcnIgPSAwOworCWludCBpZHgsIGVycjsKIAlzdHJ1Y3Qgc25kX3BjbV9vc3NfZmlsZSAqcGNtX29zc19maWxlOwotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcHN1YnN0cmVhbSA9IE5VTEwsICpjc3Vic3RyZWFtID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAl1bnNpZ25lZCBpbnQgZl9tb2RlID0gZmlsZS0+Zl9tb2RlOwogCiAJc25kX2Fzc2VydChycGNtX29zc19maWxlICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKQEAgLTE3NjEsNzMgKzE3NDEsMzIgQEAKIAlpZiAoKGZfbW9kZSAmIChGTU9ERV9XUklURXxGTU9ERV9SRUFEKSkgPT0gKEZNT0RFX1dSSVRFfEZNT0RFX1JFQUQpICYmCiAJICAgIChwY20tPmluZm9fZmxhZ3MgJiBTTkRSVl9QQ01fSU5GT19IQUxGX0RVUExFWCkpCiAJCWZfbW9kZSA9IEZNT0RFX1dSSVRFOwotCWlmICgoZl9tb2RlICYgRk1PREVfV1JJVEUpICYmICEocHNldHVwICYmIHBzZXR1cC0+ZGlzYWJsZSkpIHsKLQkJaWYgKChlcnIgPSBzbmRfcGNtX29wZW5fc3Vic3RyZWFtKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKLQkJCQkJICAgICAgICZwc3Vic3RyZWFtKSkgPCAwKSB7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7CisJCWlmIChzZXR1cFtpZHhdLmRpc2FibGUpCisJCQljb250aW51ZTsKKwkJaWYgKGlkeCA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCQlpZiAoISAoZl9tb2RlICYgRk1PREVfV1JJVEUpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKCEgKGZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVyciA9IHNuZF9wY21fb3Blbl9zdWJzdHJlYW0ocGNtLCBpZHgsIGZpbGUsICZzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkgewogCQkJc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHBjbV9vc3NfZmlsZSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHBzdWJzdHJlYW07Ci0JfQotCWlmICgoZl9tb2RlICYgRk1PREVfUkVBRCkgJiYgIShjc2V0dXAgJiYgY3NldHVwLT5kaXNhYmxlKSkgewotCQlpZiAoKGVyciA9IHNuZF9wY21fb3Blbl9zdWJzdHJlYW0ocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsIAotCQkJCQkgICAgICAgJmNzdWJzdHJlYW0pKSA8IDApIHsKLQkJCWlmICghKGZfbW9kZSAmIEZNT0RFX1dSSVRFKSB8fCBlcnIgIT0gLUVOT0RFVikgewotCQkJCXNuZF9wY21fb3NzX3JlbGVhc2VfZmlsZShwY21fb3NzX2ZpbGUpOwotCQkJCXJldHVybiBlcnI7Ci0JCQl9IGVsc2UgewotCQkJCWNzdWJzdHJlYW0gPSBOVUxMOwotCQkJfQotCQl9Ci0JCXBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gY3N1YnN0cmVhbTsKKworCQlwY21fb3NzX2ZpbGUtPnN0cmVhbXNbaWR4XSA9IHN1YnN0cmVhbTsKKwkJc3Vic3RyZWFtLT5maWxlID0gcGNtX29zc19maWxlOworCQlzbmRfcGNtX29zc19pbml0X3N1YnN0cmVhbShzdWJzdHJlYW0sICZzZXR1cFtpZHhdLCBtaW5vcik7CiAJfQogCQotCWlmIChwc3Vic3RyZWFtID09IE5VTEwgJiYgY3N1YnN0cmVhbSA9PSBOVUxMKSB7CisJaWYgKCFwY21fb3NzX2ZpbGUtPnN0cmVhbXNbMF0gJiYgIXBjbV9vc3NfZmlsZS0+c3RyZWFtc1sxXSkgewogCQlzbmRfcGNtX29zc19yZWxlYXNlX2ZpbGUocGNtX29zc19maWxlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChwc3Vic3RyZWFtICE9IE5VTEwpIHsKLQkJcHN1YnN0cmVhbS0+b3NzLmZpbGUgPSBwY21fb3NzX2ZpbGU7Ci0JCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdChwc3Vic3RyZWFtKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludF9pbml0IGZhaWxlZFxuIik7Ci0JCQlzbmRfcGNtX29zc19yZWxlYXNlX2ZpbGUocGNtX29zc19maWxlKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJaWYgKChlcnIgPSBwc3Vic3RyZWFtLT5vcHMtPm9wZW4ocHN1YnN0cmVhbSkpIDwgMCkgewotCQkJc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHBjbV9vc3NfZmlsZSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCXBzdWJzdHJlYW0tPmZmaWxlID0gZmlsZTsKLQkJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50c19jb21wbGV0ZShwc3Vic3RyZWFtKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludF9jb21wbGV0ZSBmYWlsZWRcbiIpOwotCQkJc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHBjbV9vc3NfZmlsZSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCXNuZF9wY21fb3NzX2luaXRfc3Vic3RyZWFtKHBzdWJzdHJlYW0sIHBzZXR1cCwgbWlub3IpOwotCX0KLQlpZiAoY3N1YnN0cmVhbSAhPSBOVUxMKSB7Ci0JCWNzdWJzdHJlYW0tPm9zcy5maWxlID0gcGNtX29zc19maWxlOwotCQllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRzX2luaXQoY3N1YnN0cmVhbSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRkKCJzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW5pdCBmYWlsZWRcbiIpOwotCQkJc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHBjbV9vc3NfZmlsZSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWlmICgoZXJyID0gY3N1YnN0cmVhbS0+b3BzLT5vcGVuKGNzdWJzdHJlYW0pKSA8IDApIHsKLQkJCXNuZF9wY21fb3NzX3JlbGVhc2VfZmlsZShwY21fb3NzX2ZpbGUpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQljc3Vic3RyZWFtLT5mZmlsZSA9IGZpbGU7Ci0JCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfY29tcGxldGUoY3N1YnN0cmVhbSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRkKCJzbmRfcGNtX2h3X2NvbnN0cmFpbnRfY29tcGxldGUgZmFpbGVkXG4iKTsKLQkJCXNuZF9wY21fb3NzX3JlbGVhc2VfZmlsZShwY21fb3NzX2ZpbGUpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQlzbmRfcGNtX29zc19pbml0X3N1YnN0cmVhbShjc3Vic3RyZWFtLCBjc2V0dXAsIG1pbm9yKTsKLQl9CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwY21fb3NzX2ZpbGU7CiAJKnJwY21fb3NzX2ZpbGUgPSBwY21fb3NzX2ZpbGU7CkBAIC0xODUyLDcgKzE3OTEsNyBAQAogCWNoYXIgdGFza19uYW1lWzMyXTsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBzbmRfcGNtX29zc19maWxlICpwY21fb3NzX2ZpbGU7Ci0Jc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpwc2V0dXAgPSBOVUxMLCAqY3NldHVwID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgc2V0dXBbMl07CiAJaW50IG5vbmJsb2NrOwogCXdhaXRfcXVldWVfdCB3YWl0OwogCkBAIC0xODczLDIzICsxODEyLDE1IEBACiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gX19lcnJvcjsKIAl9CisJbWVtc2V0KHNldHVwLCAwLCBzaXplb2Yoc2V0dXApKTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCXBzZXR1cCA9IHNuZF9wY21fb3NzX2xvb2tfZm9yX3NldHVwKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgdGFza19uYW1lKTsKKwkJc25kX3BjbV9vc3NfbG9va19mb3Jfc2V0dXAocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJCQkgICB0YXNrX25hbWUsICZzZXR1cFswXSk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCWNzZXR1cCA9IHNuZF9wY21fb3NzX2xvb2tfZm9yX3NldHVwKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCB0YXNrX25hbWUpOworCQlzbmRfcGNtX29zc19sb29rX2Zvcl9zZXR1cChwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCQkJICAgdGFza19uYW1lLCAmc2V0dXBbMV0pOwogCiAJbm9uYmxvY2sgPSAhIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JaWYgKHBzZXR1cCAmJiAhcHNldHVwLT5kaXNhYmxlKSB7Ci0JCWlmIChwc2V0dXAtPm5vbmJsb2NrKQotCQkJbm9uYmxvY2sgPSAxOwotCQllbHNlIGlmIChwc2V0dXAtPmJsb2NrKQotCQkJbm9uYmxvY2sgPSAwOwotCX0gZWxzZSBpZiAoY3NldHVwICYmICFjc2V0dXAtPmRpc2FibGUpIHsKLQkJaWYgKGNzZXR1cC0+bm9uYmxvY2spCi0JCQlub25ibG9jayA9IDE7Ci0JCWVsc2UgaWYgKGNzZXR1cC0+YmxvY2spCi0JCQlub25ibG9jayA9IDA7Ci0JfQogCWlmICghbm9uYmxvY2spCiAJCW5vbmJsb2NrID0gbm9uYmxvY2tfb3BlbjsKIApAQCAtMTg5OCw3ICsxODI5LDcgQEAKIAltdXRleF9sb2NrKCZwY20tPm9wZW5fbXV0ZXgpOwogCXdoaWxlICgxKSB7CiAJCWVyciA9IHNuZF9wY21fb3NzX29wZW5fZmlsZShmaWxlLCBwY20sICZwY21fb3NzX2ZpbGUsCi0JCQkJCSAgICBpbWlub3IoaW5vZGUpLCBwc2V0dXAsIGNzZXR1cCk7CisJCQkJCSAgICBpbWlub3IoaW5vZGUpLCBzZXR1cCk7CiAJCWlmIChlcnIgPj0gMCkKIAkJCWJyZWFrOwogCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKQEAgLTIyODMsNyArMjIxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMKIC8qCiAgKiAgL3Byb2MgaW50ZXJmYWNlCiAgKi8KQEAgLTIzMTIsMTMgKzIyNDMsOCBAQAogCiBzdGF0aWMgdm9pZCBzbmRfcGNtX29zc19wcm9jX2ZyZWVfc2V0dXBfbGlzdChzdHJ1Y3Qgc25kX3BjbV9zdHIgKiBwc3RyKQogewotCXVuc2lnbmVkIGludCBpZHg7Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCwgKnNldHVwbjsKIAotCWZvciAoaWR4ID0gMCwgc3Vic3RyZWFtID0gcHN0ci0+c3Vic3RyZWFtOwotCSAgICAgaWR4IDwgcHN0ci0+c3Vic3RyZWFtX2NvdW50OyBpZHgrKywgc3Vic3RyZWFtID0gc3Vic3RyZWFtLT5uZXh0KQotCQlzdWJzdHJlYW0tPm9zcy5zZXR1cCA9IE5VTEw7CiAJZm9yIChzZXR1cCA9IHBzdHItPm9zcy5zZXR1cF9saXN0LCBwc3RyLT5vc3Muc2V0dXBfbGlzdCA9IE5VTEw7CiAJICAgICBzZXR1cDsgc2V0dXAgPSBzZXR1cG4pIHsKIAkJc2V0dXBuID0gc2V0dXAtPm5leHQ7CkBAIC0yMzc5LDIxICsyMzA1LDI4IEBACiAJCQl9CiAJCX0gd2hpbGUgKCpzdHIpOwogCQlpZiAoc2V0dXAgPT0gTlVMTCkgewotCQkJc2V0dXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXApLCBHRlBfS0VSTkVMKTsKLQkJCWlmIChzZXR1cCkgewotCQkJCWlmIChwc3RyLT5vc3Muc2V0dXBfbGlzdCA9PSBOVUxMKSB7Ci0JCQkJCXBzdHItPm9zcy5zZXR1cF9saXN0ID0gc2V0dXA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZm9yIChzZXR1cDEgPSBwc3RyLT5vc3Muc2V0dXBfbGlzdDsgc2V0dXAxLT5uZXh0OyBzZXR1cDEgPSBzZXR1cDEtPm5leHQpOwotCQkJCQlzZXR1cDEtPm5leHQgPSBzZXR1cDsKLQkJCQl9Ci0JCQkJdGVtcGxhdGUudGFza19uYW1lID0ga3N0cmR1cCh0YXNrX25hbWUsIEdGUF9LRVJORUwpOwotCQkJfSBlbHNlIHsKKwkJCXNldHVwID0ga21hbGxvYyhzaXplb2YoKnNldHVwKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoISBzZXR1cCkgewogCQkJCWJ1ZmZlci0+ZXJyb3IgPSAtRU5PTUVNOworCQkJCW11dGV4X2xvY2soJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKHBzdHItPm9zcy5zZXR1cF9saXN0ID09IE5VTEwpCisJCQkJcHN0ci0+b3NzLnNldHVwX2xpc3QgPSBzZXR1cDsKKwkJCWVsc2UgeworCQkJCWZvciAoc2V0dXAxID0gcHN0ci0+b3NzLnNldHVwX2xpc3Q7CisJCQkJICAgICBzZXR1cDEtPm5leHQ7IHNldHVwMSA9IHNldHVwMS0+bmV4dCk7CisJCQkJc2V0dXAxLT5uZXh0ID0gc2V0dXA7CisJCQl9CisJCQl0ZW1wbGF0ZS50YXNrX25hbWUgPSBrc3RyZHVwKHRhc2tfbmFtZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoISB0ZW1wbGF0ZS50YXNrX25hbWUpIHsKKwkJCQlrZnJlZShzZXR1cCk7CisJCQkJYnVmZmVyLT5lcnJvciA9IC1FTk9NRU07CisJCQkJbXV0ZXhfbG9jaygmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCX0KLQkJaWYgKHNldHVwKQotCQkJKnNldHVwID0gdGVtcGxhdGU7CisJCSpzZXR1cCA9IHRlbXBsYXRlOwogCQltdXRleF91bmxvY2soJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CiAJfQogfQpAQCAtMjQzNSwxMCArMjM2OCwxMCBAQAogCQl9CiAJfQogfQotI2Vsc2UgLyogIUNPTkZJR19QUk9DX0ZTICovCisjZWxzZSAvKiAhQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyAqLwogI2RlZmluZSBzbmRfcGNtX29zc19wcm9jX2luaXQocGNtKQogI2RlZmluZSBzbmRfcGNtX29zc19wcm9jX2RvbmUocGNtKQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisjZW5kaWYgLyogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyAqLwogCiAvKgogICogIEVOVFJZIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggM2RhNmEzOC4uODRiMDAwMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykgJiYgZGVmaW5lZChDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTKQorI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMKIAogI2RlZmluZSBTVEFURSh2KSBbU05EUlZfUENNX1NUQVRFXyMjdl0gPSAjdgogI2RlZmluZSBTVFJFQU0odikgW1NORFJWX1BDTV9TVFJFQU1fIyN2XSA9ICN2CkBAIC0xOTYsNyArMTk2LDcgQEAKIAlGT1JNQVQoVTE4XzNCRSksCiB9OwogCi1jb25zdCBjaGFyICpzbmRfcGNtX2Zvcm1hdF9uYW1lKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQorc3RhdGljIGNvbnN0IGNoYXIgKnNuZF9wY21fZm9ybWF0X25hbWUoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpCiB7CiAJcmV0dXJuIHNuZF9wY21fZm9ybWF0X25hbWVzW2Zvcm1hdF07CiB9CkBAIC00MzYsNyArNDM2LDcgQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICJhcHBsX3B0ciAgICA6ICVsZFxuIiwgcnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHIpOwogfQogCi0jaWZkZWYgQ09ORklHX1NORF9ERUJVRworI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKIHN0YXRpYyB2b2lkIHNuZF9wY21feHJ1bl9kZWJ1Z19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCiAJCQkJICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCX0KIAlwc3RyLT5wcm9jX2luZm9fZW50cnkgPSBlbnRyeTsKIAotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCiAJaWYgKChlbnRyeSA9IHNuZF9pbmZvX2NyZWF0ZV9jYXJkX2VudHJ5KHBjbS0+Y2FyZCwgInhydW5fZGVidWciLAogCQkJCQkJcHN0ci0+cHJvY19yb290KSkgIT0gTlVMTCkgewogCQllbnRyeS0+Yy50ZXh0LnJlYWRfc2l6ZSA9IDY0OwpAQCAtNTAxLDcgKzUwMSw3IEBACiAKIHN0YXRpYyBpbnQgc25kX3BjbV9zdHJlYW1fcHJvY19kb25lKHN0cnVjdCBzbmRfcGNtX3N0ciAqcHN0cikKIHsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwogCWlmIChwc3RyLT5wcm9jX3hydW5fZGVidWdfZW50cnkpIHsKIAkJc25kX2luZm9fdW5yZWdpc3Rlcihwc3RyLT5wcm9jX3hydW5fZGVidWdfZW50cnkpOwogCQlwc3RyLT5wcm9jX3hydW5fZGVidWdfZW50cnkgPSBOVUxMOwpAQCAtNTk5LDEyICs1OTksMTIgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZSAvKiAhQ09ORklHX1BST0NfRlMgKi8KKyNlbHNlIC8qICFDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTICovCiBzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3N0cmVhbV9wcm9jX2luaXQoc3RydWN0IHNuZF9wY21fc3RyICpwc3RyKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3N0cmVhbV9wcm9jX2RvbmUoc3RydWN0IHNuZF9wY21fc3RyICpwc3RyKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3N1YnN0cmVhbV9wcm9jX2luaXQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fc3Vic3RyZWFtX3Byb2NfZG9uZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkgeyByZXR1cm4gMDsgfQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisjZW5kaWYgLyogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyAqLwogCiAvKioKICAqIHNuZF9wY21fbmV3X3N0cmVhbSAtIGNyZWF0ZSBhIG5ldyBQQ00gc3RyZWFtCkBAIC03NzcsOCArNzc3LDkgQEAKIAlzbmRfcGNtX3RpY2tfZWxhcHNlZChzdWJzdHJlYW0pOwogfQogCi1pbnQgc25kX3BjbV9vcGVuX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtLAotCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICoqcnN1YnN0cmVhbSkKK2ludCBzbmRfcGNtX2F0dGFjaF9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSwKKwkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKnJzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fc3RyICogcHN0cjsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKQEAgLTc5Myw3ICs3OTQsNyBAQAogCSpyc3Vic3RyZWFtID0gTlVMTDsKIAlzbmRfYXNzZXJ0KHBjbSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlwc3RyID0gJnBjbS0+c3RyZWFtc1tzdHJlYW1dOwotCWlmIChwc3RyLT5zdWJzdHJlYW0gPT0gTlVMTCkKKwlpZiAocHN0ci0+c3Vic3RyZWFtID09IE5VTEwgfHwgcHN0ci0+c3Vic3RyZWFtX2NvdW50ID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2FyZCA9IHBjbS0+Y2FyZDsKQEAgLTgwNyw4ICs4MDgsNiBAQAogCX0KIAl1cF9yZWFkKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CiAKLQlpZiAocHN0ci0+c3Vic3RyZWFtX2NvdW50ID09IDApCi0JCXJldHVybiAtRU5PREVWOwogCXN3aXRjaCAoc3RyZWFtKSB7CiAJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOgogCQlpZiAocGNtLT5pbmZvX2ZsYWdzICYgU05EUlZfUENNX0lORk9fSEFMRl9EVVBMRVgpIHsKQEAgLTg3NCwxMiArODczLDEzIEBACiAKIAlzdWJzdHJlYW0tPnJ1bnRpbWUgPSBydW50aW1lOwogCXN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gcGNtLT5wcml2YXRlX2RhdGE7CisJc3Vic3RyZWFtLT5mZmlsZSA9IGZpbGU7CiAJcHN0ci0+c3Vic3RyZWFtX29wZW5lZCsrOwogCSpyc3Vic3RyZWFtID0gc3Vic3RyZWFtOwogCXJldHVybiAwOwogfQogCi12b2lkIHNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit2b2lkIHNuZF9wY21fZGV0YWNoX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwogCXN1YnN0cmVhbS0+ZmlsZSA9IE5VTEw7CkBAIC0xMTExLDggKzExMTEsNiBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX3N1c3BlbmQpOwogRVhQT1JUX1NZTUJPTChzbmRfcGNtX3N1c3BlbmRfYWxsKTsKICNlbmRpZgotRVhQT1JUX1NZTUJPTChzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bCk7Ci1FWFBPUlRfU1lNQk9MKHNuZF9wY21fa2VybmVsX2NhcHR1cmVfaW9jdGwpOwogRVhQT1JUX1NZTUJPTChzbmRfcGNtX2tlcm5lbF9pb2N0bCk7CiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbW1hcF9kYXRhKTsKICNpZiBTTkRSVl9QQ01fSU5GT19NTUFQX0lPTUVNCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IGVlYmEyZjAuLmVlZGM2Y2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIHN0YXRpYyB2b2lkIHhydW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX3BjbV9zdG9wKHN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOwotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCiAJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgewogCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgIlhSVU46IHBjbUMlZEQlZCVjXG4iLAogCQkJICAgc3Vic3RyZWFtLT5wY20tPmNhcmQtPm51bWJlciwKQEAgLTIwNCw3ICsyMDQsNyBAQAogCWRlbHRhID0gaHdfcHRyX2ludGVycnVwdCAtIG5ld19od19wdHI7CiAJaWYgKGRlbHRhID4gMCkgewogCQlpZiAoKHNuZF9wY21fdWZyYW1lc190KWRlbHRhIDwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKSB7Ci0jaWZkZWYgQ09ORklHX1NORF9ERUJVRworI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKIAkJCWlmIChydW50aW1lLT5wZXJpb2RzID4gMSAmJiBzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKIAkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzFdIChzdHJlYW0gPSAlaSwgZGVsdGE6IC0lbGQsIG1heCBqaXR0ZXIgPSAlbGQpOiB3cm9uZyBpbnRlcnJ1cHQgYWNrbm93bGVkZ2U/XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpIGRlbHRhLCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpOwogCQkJCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJZGVsdGEgPSBvbGRfaHdfcHRyIC0gbmV3X2h3X3B0cjsKIAlpZiAoZGVsdGEgPiAwKSB7CiAJCWlmICgoc25kX3BjbV91ZnJhbWVzX3QpZGVsdGEgPCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpIHsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnBlcmlvZHMgPiAyICYmIHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgewogCQkJCXNuZF9wcmludGQoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSBbMl0gKHN0cmVhbSA9ICVpLCBkZWx0YTogLSVsZCwgbWF4IGppdHRlciA9ICVsZCk6IHdyb25nIGludGVycnVwdCBhY2tub3dsZWRnZT9cbiIsIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZykgZGVsdGEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMik7CiAJCQkJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZyA+IDEpCkBAIC0yMjk5LDE5ICsyMjk5LDcgQEAKIAlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfT1BFTikKIAkJcmV0dXJuIC1FQkFERkQ7CiAKLQlzbmRfYXNzZXJ0KHN1YnN0cmVhbS0+ZmZpbGUgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAJbm9uYmxvY2sgPSAhIShzdWJzdHJlYW0tPmZmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0jaWYgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTX01PRFVMRSkKLQlpZiAoc3Vic3RyZWFtLT5vc3Mub3NzKSB7Ci0JCXN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqc2V0dXAgPSBzdWJzdHJlYW0tPm9zcy5zZXR1cDsKLQkJaWYgKHNldHVwICE9IE5VTEwpIHsKLQkJCWlmIChzZXR1cC0+bm9uYmxvY2spCi0JCQkJbm9uYmxvY2sgPSAxOwotCQkJZWxzZSBpZiAoc2V0dXAtPmJsb2NrKQotCQkJCW5vbmJsb2NrID0gMDsKLQkJfQotCX0KLSNlbmRpZgogCiAJaWYgKHJ1bnRpbWUtPmFjY2VzcyAhPSBTTkRSVl9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEICYmCiAJICAgIHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkKQEAgLTIzNzQsMTkgKzIzNjIsNyBAQAogCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9PUEVOKQogCQlyZXR1cm4gLUVCQURGRDsKIAotCXNuZF9hc3NlcnQoc3Vic3RyZWFtLT5mZmlsZSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlub25ibG9jayA9ICEhKHN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQotCWlmIChzdWJzdHJlYW0tPm9zcy5vc3MpIHsKLQkJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCA9IHN1YnN0cmVhbS0+b3NzLnNldHVwOwotCQlpZiAoc2V0dXAgIT0gTlVMTCkgewotCQkJaWYgKHNldHVwLT5ub25ibG9jaykKLQkJCQlub25ibG9jayA9IDE7Ci0JCQllbHNlIGlmIChzZXR1cC0+YmxvY2spCi0JCQkJbm9uYmxvY2sgPSAwOwotCQl9Ci0JfQotI2VuZGlmCiAKIAlpZiAocnVudGltZS0+YWNjZXNzICE9IFNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjU5NiwxOSArMjU3Miw3IEBACiAJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX09QRU4pCiAJCXJldHVybiAtRUJBREZEOwogCi0Jc25kX2Fzc2VydChzdWJzdHJlYW0tPmZmaWxlICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCW5vbmJsb2NrID0gISEoc3Vic3RyZWFtLT5mZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCi0JaWYgKHN1YnN0cmVhbS0+b3NzLm9zcykgewotCQlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwID0gc3Vic3RyZWFtLT5vc3Muc2V0dXA7Ci0JCWlmIChzZXR1cCAhPSBOVUxMKSB7Ci0JCQlpZiAoc2V0dXAtPm5vbmJsb2NrKQotCQkJCW5vbmJsb2NrID0gMTsKLQkJCWVsc2UgaWYgKHNldHVwLT5ibG9jaykKLQkJCQlub25ibG9jayA9IDA7Ci0JCX0KLQl9Ci0jZW5kaWYKIAlpZiAocnVudGltZS0+YWNjZXNzICE9IFNORFJWX1BDTV9BQ0NFU1NfUldfSU5URVJMRUFWRUQpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBzbmRfcGNtX2xpYl9yZWFkMShzdWJzdHJlYW0sICh1bnNpZ25lZCBsb25nKWJ1Ziwgc2l6ZSwgbm9uYmxvY2ssIHNuZF9wY21fbGliX3JlYWRfdHJhbnNmZXIpOwpAQCAtMjY2NSwyMCArMjYyOSw3IEBACiAJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX09QRU4pCiAJCXJldHVybiAtRUJBREZEOwogCi0Jc25kX2Fzc2VydChzdWJzdHJlYW0tPmZmaWxlICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCW5vbmJsb2NrID0gISEoc3Vic3RyZWFtLT5mZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCi0JaWYgKHN1YnN0cmVhbS0+b3NzLm9zcykgewotCQlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwID0gc3Vic3RyZWFtLT5vc3Muc2V0dXA7Ci0JCWlmIChzZXR1cCAhPSBOVUxMKSB7Ci0JCQlpZiAoc2V0dXAtPm5vbmJsb2NrKQotCQkJCW5vbmJsb2NrID0gMTsKLQkJCWVsc2UgaWYgKHNldHVwLT5ibG9jaykKLQkJCQlub25ibG9jayA9IDA7Ci0JCX0KLQl9Ci0jZW5kaWYKLQogCWlmIChydW50aW1lLT5hY2Nlc3MgIT0gU05EUlZfUENNX0FDQ0VTU19SV19OT05JTlRFUkxFQVZFRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIHNuZF9wY21fbGliX3JlYWQxKHN1YnN0cmVhbSwgKHVuc2lnbmVkIGxvbmcpYnVmcywgZnJhbWVzLCBub25ibG9jaywgc25kX3BjbV9saWJfcmVhZHZfdHJhbnNmZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbWVtb3J5LmMgYi9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwppbmRleCBhMDExOWFlLi40MjhmOGMxIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYworKysgYi9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwpAQCAtMTAwLDggKzEwMCwxMCBAQAogaW50IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZG1hX2ZyZWUoc3Vic3RyZWFtKTsKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTCiAJc25kX2luZm9fdW5yZWdpc3RlcihzdWJzdHJlYW0tPnByb2NfcHJlYWxsb2NfZW50cnkpOwogCXN1YnN0cmVhbS0+cHJvY19wcmVhbGxvY19lbnRyeSA9IE5VTEw7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI0LDcgKzEyNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMKIC8qCiAgKiByZWFkIGNhbGxiYWNrIGZvciBwcmVhbGxvYyBwcm9jIGZpbGUKICAqCkBAIC0yMDMsOSArMjA1LDkgQEAKIAlzdWJzdHJlYW0tPnByb2NfcHJlYWxsb2NfZW50cnkgPSBlbnRyeTsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19QUk9DX0ZTICovCisjZWxzZSAvKiAhQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyAqLwogI2RlZmluZSBwcmVhbGxvY2F0ZV9pbmZvX2luaXQocykKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgKi8KIAogLyoKICAqIHByZS1hbGxvY2F0ZSB0aGUgYnVmZmVyIGFuZCBjcmVhdGUgYSBwcm9jIGZpbGUgZm9yIHRoZSBzdWJzdHJlYW0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggMDFmMTUwZi4uMDg2MGM1YSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTExNzAsNyArMTE3MCw3IEBACiAJaW50IHJlczsKIAogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwotCWlmICgocmVzID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwLCBzdWJzdHJlYW0tPmZmaWxlKSkgPj0gMCkKKwlpZiAoKHJlcyA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCkpID49IDApCiAJCXJlcyA9IHNuZF9wY21fYWN0aW9uX2xvY2tfaXJxKCZzbmRfcGNtX2FjdGlvbl9yZXN1bWUsIHN1YnN0cmVhbSwgMCk7CiAJc25kX3Bvd2VyX3VubG9jayhjYXJkKTsKIAlyZXR1cm4gcmVzOwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwogCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKLQkJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwLCBzdWJzdHJlYW0tPmZmaWxlKTsKKwkJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAkJaWYgKHJlc3VsdCA8IDApCiAJCQlnb3RvIF91bmxvY2s7CiAJfQpAQCAtMTMxMywxMyArMTMxMywxMyBAQAogICoKICAqIFByZXBhcmUgdGhlIFBDTSBzdWJzdHJlYW0gdG8gYmUgdHJpZ2dlcmFibGUuCiAgKi8KLWludCBzbmRfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IHNuZF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlpbnQgcmVzOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHN1YnN0cmVhbS0+cGNtLT5jYXJkOwogCiAJc25kX3Bvd2VyX2xvY2soY2FyZCk7Ci0JaWYgKChyZXMgPSBzbmRfcG93ZXJfd2FpdChjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDAsIHN1YnN0cmVhbS0+ZmZpbGUpKSA+PSAwKQorCWlmICgocmVzID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKSkgPj0gMCkKIAkJcmVzID0gc25kX3BjbV9hY3Rpb25fbm9uYXRvbWljKCZzbmRfcGNtX2FjdGlvbl9wcmVwYXJlLCBzdWJzdHJlYW0sIDApOwogCXNuZF9wb3dlcl91bmxvY2soY2FyZCk7CiAJcmV0dXJuIHJlczsKQEAgLTE0MTAsNyArMTQxMCw3IEBACiAKIAlzbmRfcG93ZXJfbG9jayhjYXJkKTsKIAlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7Ci0JCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgc3Vic3RyZWFtLT5mZmlsZSk7CisJCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CiAJCWlmIChyZXN1bHQgPCAwKSB7CiAJCQlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwogCQkJcmV0dXJuIHJlc3VsdDsKQEAgLTE1MzMsNyArMTUzMyw3IEBACiAKIAlzbmRfcG93ZXJfbG9jayhjYXJkKTsKIAlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7Ci0JCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgc3Vic3RyZWFtLT5mZmlsZSk7CisJCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZ290byBfdW5sb2NrOwogCX0KQEAgLTE5OTUsMjggKzE5OTUsNjUgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc25kX3BjbV9yZWxlYXNlX2ZpbGUoc3RydWN0IHNuZF9wY21fZmlsZSAqIHBjbV9maWxlKQorc3RhdGljIHZvaWQgcGNtX3JlbGVhc2VfcHJpdmF0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfcGNtX3N0ciAqIHN0cjsKKwlzdHJ1Y3Qgc25kX3BjbV9maWxlICpwY21fZmlsZSA9IHN1YnN0cmVhbS0+ZmlsZTsKIAotCXNuZF9hc3NlcnQocGNtX2ZpbGUgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7Ci0Jc3Vic3RyZWFtID0gcGNtX2ZpbGUtPnN1YnN0cmVhbTsKLQlzbmRfYXNzZXJ0KHN1YnN0cmVhbSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKLQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0ciA9IHN1YnN0cmVhbS0+cHN0cjsKIAlzbmRfcGNtX3VubGluayhzdWJzdHJlYW0pOwotCWlmIChzdWJzdHJlYW0tPmZmaWxlICE9IE5VTEwpIHsKKwlzbmRfcGNtX3JlbW92ZV9maWxlKHN1YnN0cmVhbS0+cHN0ciwgcGNtX2ZpbGUpOworCWtmcmVlKHBjbV9maWxlKTsKK30KKwordm9pZCBzbmRfcGNtX3JlbGVhc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXNuZF9wY21fZHJvcChzdWJzdHJlYW0pOworCWlmIChzdWJzdHJlYW0tPmh3X29wZW5lZCkgewogCQlpZiAoc3Vic3RyZWFtLT5vcHMtPmh3X2ZyZWUgIT0gTlVMTCkKIAkJCXN1YnN0cmVhbS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSk7CiAJCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQlzdWJzdHJlYW0tPmZmaWxlID0gTlVMTDsKKwkJc3Vic3RyZWFtLT5od19vcGVuZWQgPSAwOwogCX0KLQlzbmRfcGNtX3JlbW92ZV9maWxlKHN0ciwgcGNtX2ZpbGUpOwotCXNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3Vic3RyZWFtKTsKLQlrZnJlZShwY21fZmlsZSk7CisJaWYgKHN1YnN0cmVhbS0+cGNtX3JlbGVhc2UpIHsKKwkJc3Vic3RyZWFtLT5wY21fcmVsZWFzZShzdWJzdHJlYW0pOworCQlzdWJzdHJlYW0tPnBjbV9yZWxlYXNlID0gTlVMTDsKKwl9CisJc25kX3BjbV9kZXRhY2hfc3Vic3RyZWFtKHN1YnN0cmVhbSk7Cit9CisKK2ludCBzbmRfcGNtX29wZW5fc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0sCisJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKnJzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJaW50IGVycjsKKworCWVyciA9IHNuZF9wY21fYXR0YWNoX3N1YnN0cmVhbShwY20sIHN0cmVhbSwgZmlsZSwgJnN1YnN0cmVhbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc3Vic3RyZWFtLT5ub19tbWFwX2N0cmwgPSAwOworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdChzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmICgoZXJyID0gc3Vic3RyZWFtLT5vcHMtPm9wZW4oc3Vic3RyZWFtKSkgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3Vic3RyZWFtLT5od19vcGVuZWQgPSAxOworCisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50c19jb21wbGV0ZShzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludHNfY29tcGxldGUgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkqcnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKIAlyZXR1cm4gMDsKKworIGVycm9yOgorCXNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3Vic3RyZWFtKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNuZF9wY21fb3Blbl9maWxlKHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMjAyNCw1MiArMjA2MSwyOSBAQAogCQkJICAgICBpbnQgc3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9maWxlICoqcnBjbV9maWxlKQogewotCWludCBlcnIgPSAwOwogCXN0cnVjdCBzbmRfcGNtX2ZpbGUgKnBjbV9maWxlOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXN0cnVjdCBzbmRfcGNtX3N0ciAqc3RyOworCWludCBlcnI7CiAKIAlzbmRfYXNzZXJ0KHJwY21fZmlsZSAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CiAJKnJwY21fZmlsZSA9IE5VTEw7CiAKKwllcnIgPSBzbmRfcGNtX29wZW5fc3Vic3RyZWFtKHBjbSwgc3RyZWFtLCBmaWxlLCAmc3Vic3RyZWFtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXBjbV9maWxlID0ga3phbGxvYyhzaXplb2YoKnBjbV9maWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBjbV9maWxlID09IE5VTEwpIHsKKwkJc25kX3BjbV9yZWxlYXNlX3N1YnN0cmVhbShzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0KLQlpZiAoKGVyciA9IHNuZF9wY21fb3Blbl9zdWJzdHJlYW0ocGNtLCBzdHJlYW0sICZzdWJzdHJlYW0pKSA8IDApIHsKLQkJa2ZyZWUocGNtX2ZpbGUpOwotCQlyZXR1cm4gZXJyOwotCX0KLQogCXN0ciA9IHN1YnN0cmVhbS0+cHN0cjsKIAlzdWJzdHJlYW0tPmZpbGUgPSBwY21fZmlsZTsKLQlzdWJzdHJlYW0tPm5vX21tYXBfY3RybCA9IDA7Ci0KKwlzdWJzdHJlYW0tPnBjbV9yZWxlYXNlID0gcGNtX3JlbGVhc2VfcHJpdmF0ZTsKIAlwY21fZmlsZS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwotCiAJc25kX3BjbV9hZGRfZmlsZShzdHIsIHBjbV9maWxlKTsKIAotCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdChzdWJzdHJlYW0pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdCBmYWlsZWRcbiIpOwotCQlzbmRfcGNtX3JlbGVhc2VfZmlsZShwY21fZmlsZSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JaWYgKChlcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pKSA8IDApIHsKLQkJc25kX3BjbV9yZWxlYXNlX2ZpbGUocGNtX2ZpbGUpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlzdWJzdHJlYW0tPmZmaWxlID0gZmlsZTsKLQotCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfY29tcGxldGUoc3Vic3RyZWFtKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRkKCJzbmRfcGNtX2h3X2NvbnN0cmFpbnRzX2NvbXBsZXRlIGZhaWxlZFxuIik7Ci0JCXNuZF9wY21fcmVsZWFzZV9maWxlKHBjbV9maWxlKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwY21fZmlsZTsKIAkqcnBjbV9maWxlID0gcGNtX2ZpbGU7CiAJcmV0dXJuIDA7CkBAIC0yMTU4LDEwICsyMTcyLDkgQEAKIAlzbmRfYXNzZXJ0KHN1YnN0cmVhbSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlzbmRfYXNzZXJ0KCFhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5ydW50aW1lLT5tbWFwX2NvdW50KSwgKTsKIAlwY20gPSBzdWJzdHJlYW0tPnBjbTsKLQlzbmRfcGNtX2Ryb3Aoc3Vic3RyZWFtKTsKIAlmYXN5bmNfaGVscGVyKC0xLCBmaWxlLCAwLCAmc3Vic3RyZWFtLT5ydW50aW1lLT5mYXN5bmMpOwogCW11dGV4X2xvY2soJnBjbS0+b3Blbl9tdXRleCk7Ci0Jc25kX3BjbV9yZWxlYXNlX2ZpbGUocGNtX2ZpbGUpOworCXNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3Vic3RyZWFtKTsKIAltdXRleF91bmxvY2soJnBjbS0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcGNtLT5vcGVuX3dhaXQpOwogCW1vZHVsZV9wdXQocGNtLT5jYXJkLT5tb2R1bGUpOwpAQCAtMjQ4MCwxMSArMjQ5Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAJCQotc3RhdGljIGludCBzbmRfcGNtX3BsYXliYWNrX2lvY3RsMShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKLXN0YXRpYyBpbnQgc25kX3BjbV9jYXB0dXJlX2lvY3RsMShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwotCiBzdGF0aWMgaW50IHNuZF9wY21fY29tbW9uX2lvY3RsMShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKQEAgLTI3MzYsNDEgKzI3NDQsMjggQEAKIAlyZXR1cm4gc25kX3BjbV9jYXB0dXJlX2lvY3RsMShwY21fZmlsZS0+c3Vic3RyZWFtLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiB9CiAKLWludCBzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQltbV9zZWdtZW50X3QgZnM7Ci0JaW50IHJlc3VsdDsKLQkKLQlmcyA9IHNuZF9lbnRlcl91c2VyKCk7Ci0JcmVzdWx0ID0gc25kX3BjbV9wbGF5YmFja19pb2N0bDEoc3Vic3RyZWFtLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0Jc25kX2xlYXZlX3VzZXIoZnMpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBzbmRfcGNtX2tlcm5lbF9jYXB0dXJlX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JbW1fc2VnbWVudF90IGZzOwotCWludCByZXN1bHQ7Ci0JCi0JZnMgPSBzbmRfZW50ZXJfdXNlcigpOwotCXJlc3VsdCA9IHNuZF9wY21fY2FwdHVyZV9pb2N0bDEoc3Vic3RyZWFtLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0Jc25kX2xlYXZlX3VzZXIoZnMpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KIGludCBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CisJbW1fc2VnbWVudF90IGZzOworCWludCByZXN1bHQ7CisJCisJZnMgPSBzbmRfZW50ZXJfdXNlcigpOwogCXN3aXRjaCAoc3Vic3RyZWFtLT5zdHJlYW0pIHsKIAljYXNlIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s6Ci0JCXJldHVybiBzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdWJzdHJlYW0sIGNtZCwgYXJnKTsKKwkJcmVzdWx0ID0gc25kX3BjbV9wbGF5YmFja19pb2N0bDEoc3Vic3RyZWFtLAorCQkJCQkJIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkU6Ci0JCXJldHVybiBzbmRfcGNtX2tlcm5lbF9jYXB0dXJlX2lvY3RsKHN1YnN0cmVhbSwgY21kLCBhcmcpOworCQlyZXN1bHQgPSBzbmRfcGNtX2NhcHR1cmVfaW9jdGwxKHN1YnN0cmVhbSwKKwkJCQkJCWNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWJyZWFrOwogCX0KKwlzbmRfbGVhdmVfdXNlcihmcyk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc25kX3BjbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggZTM1ZmQ1Ny4uYWUwZGY1NCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtNjc1LDEwICs2NzUsOCBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0RVTU1ZX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7Ci0JCX0KKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CiAJfQpAQCAtNjg2LDE0ICs2ODQsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSICJEdW1teSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2R1bW15X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfZHVtbXlfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2R1bW15X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKaW5kZXggOWVhMzA1OS4uNzdiMDYwMCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc25kX21wdTQwMV9wbnBpZHMpOwogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfbXB1NDAxX3BucChpbnQgZGV2LCBzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlLAorc3RhdGljIGludCBfX2RldmluaXQgc25kX21wdTQwMV9wbnAoaW50IGRldiwgc3RydWN0IHBucF9kZXYgKmRldmljZSwKIAkJCQkgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmlkKQogewogCWlmICghcG5wX3BvcnRfdmFsaWQoZGV2aWNlLCAwKSB8fApAQCAtMjUxLDEwICsyNTEsOCBAQAogI2VuZGlmCiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX01QVTQwMV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OwotCQl9CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOwogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQlzbmRfbXB1NDAxX2RldmljZXMrKzsKIAl9CkBAIC0yNjYsMTQgKzI2NCwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgIk1QVS00MDEgZGV2aWNlIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9tcHU0MDFfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9tcHU0MDFfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX21wdTQwMV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxX3VhcnQuYwppbmRleCA4Njg3YWUzLi5iNDlhNDVjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKQEAgLTE4Myw3ICsxODMsOCBAQAogCiAgKi8KIAotc3RhdGljIHZvaWQgc25kX21wdTQwMV91YXJ0X2NtZChzdHJ1Y3Qgc25kX21wdTQwMSAqIG1wdSwgdW5zaWduZWQgY2hhciBjbWQsIGludCBhY2spCitzdGF0aWMgaW50IHNuZF9tcHU0MDFfdWFydF9jbWQoc3RydWN0IHNuZF9tcHU0MDEgKiBtcHUsIHVuc2lnbmVkIGNoYXIgY21kLAorCQlpbnQgYWNrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRpbWVvdXQsIG9rOwpAQCAtMjE4LDkgKzIxOSwxMSBAQAogCQlvayA9IDE7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCWlmICghIG9rKQorCWlmICghb2spIHsKIAkJc25kX3ByaW50aygiY21kOiAweCV4IGZhaWxlZCBhdCAweCVseCAoc3RhdHVzID0gMHgleCwgZGF0YSA9IDB4JXgpXG4iLCBjbWQsIG1wdS0+cG9ydCwgbXB1LT5yZWFkKG1wdSwgTVBVNDAxQyhtcHUpKSwgbXB1LT5yZWFkKG1wdSwgTVBVNDAxRChtcHUpKSk7Ci0JLy8gc25kX3ByaW50aygiY21kOiAweCV4IGF0IDB4JWx4IChzdGF0dXMgPSAweCV4LCBkYXRhID0gMHgleClcbiIsIGNtZCwgbXB1LT5wb3J0LCBtcHUtPnJlYWQobXB1LCBNUFU0MDFDKG1wdSkpLCBtcHUtPnJlYWQobXB1LCBNUFU0MDFEKG1wdSkpKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjM1LDEyICsyMzgsMTkgQEAKIAlpZiAobXB1LT5vcGVuX2lucHV0ICYmIChlcnIgPSBtcHUtPm9wZW5faW5wdXQobXB1KSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWlmICghIHRlc3RfYml0KE1QVTQwMV9NT0RFX0JJVF9PVVRQVVQsICZtcHUtPm1vZGUpKSB7Ci0JCXNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfUkVTRVQsIDEpOwotCQlzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX0VOVEVSX1VBUlQsIDEpOworCQlpZiAoc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMSkpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKHNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfRU5URVJfVUFSVCwgMSkpCisJCQlnb3RvIGVycm9yX291dDsKIAl9CiAJbXB1LT5zdWJzdHJlYW1faW5wdXQgPSBzdWJzdHJlYW07CiAJc2V0X2JpdChNUFU0MDFfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpOwogCXJldHVybiAwOworCitlcnJvcl9vdXQ6CisJaWYgKG1wdS0+b3Blbl9pbnB1dCAmJiBtcHUtPmNsb3NlX2lucHV0KQorCQltcHUtPmNsb3NlX2lucHV0KG1wdSk7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgc25kX21wdTQwMV91YXJ0X291dHB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTI1MiwzOSArMjYyLDUyIEBACiAJaWYgKG1wdS0+b3Blbl9vdXRwdXQgJiYgKGVyciA9IG1wdS0+b3Blbl9vdXRwdXQobXB1KSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWlmICghIHRlc3RfYml0KE1QVTQwMV9NT0RFX0JJVF9JTlBVVCwgJm1wdS0+bW9kZSkpIHsKLQkJc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMSk7Ci0JCXNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfRU5URVJfVUFSVCwgMSk7CisJCWlmIChzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX1JFU0VULCAxKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlpZiAoc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9FTlRFUl9VQVJULCAxKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAltcHUtPnN1YnN0cmVhbV9vdXRwdXQgPSBzdWJzdHJlYW07CiAJc2V0X2JpdChNUFU0MDFfTU9ERV9CSVRfT1VUUFVULCAmbXB1LT5tb2RlKTsKIAlyZXR1cm4gMDsKKworZXJyb3Jfb3V0OgorCWlmIChtcHUtPm9wZW5fb3V0cHV0ICYmIG1wdS0+Y2xvc2Vfb3V0cHV0KQorCQltcHUtPmNsb3NlX291dHB1dChtcHUpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IHNuZF9tcHU0MDFfdWFydF9pbnB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9tcHU0MDEgKm1wdTsKKwlpbnQgZXJyID0gMDsKIAogCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKIAljbGVhcl9iaXQoTVBVNDAxX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKTsKIAltcHUtPnN1YnN0cmVhbV9pbnB1dCA9IE5VTEw7CiAJaWYgKCEgdGVzdF9iaXQoTVBVNDAxX01PREVfQklUX09VVFBVVCwgJm1wdS0+bW9kZSkpCi0JCXNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfUkVTRVQsIDApOworCQllcnIgPSBzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX1JFU0VULCAwKTsKIAlpZiAobXB1LT5jbG9zZV9pbnB1dCkKIAkJbXB1LT5jbG9zZV9pbnB1dChtcHUpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9tcHU0MDFfdWFydF9vdXRwdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfbXB1NDAxICptcHU7CisJaW50IGVyciA9IDA7CiAKIAltcHUgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CiAJY2xlYXJfYml0KE1QVTQwMV9NT0RFX0JJVF9PVVRQVVQsICZtcHUtPm1vZGUpOwogCW1wdS0+c3Vic3RyZWFtX291dHB1dCA9IE5VTEw7CiAJaWYgKCEgdGVzdF9iaXQoTVBVNDAxX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKSkKLQkJc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMCk7CisJCWVyciA9IHNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfUkVTRVQsIDApOwogCWlmIChtcHUtPmNsb3NlX291dHB1dCkKIAkJbXB1LT5jbG9zZV9vdXRwdXQobXB1KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE2LDYgKzMzOSw3IEBACiAJCQlzbmRfbXB1NDAxX3VhcnRfcmVtb3ZlX3RpbWVyKG1wdSwgMSk7CiAJCWNsZWFyX2JpdChNUFU0MDFfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwgJm1wdS0+bW9kZSk7CiAJfQorCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYyBiL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCmluZGV4IDFhN2ZiZWYuLmMwMWI0YzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCkBAIC05OTYsMTAgKzk5Niw4IEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0VSSUFMX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7Ci0JCX0KKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CiAJfQpAQCAtMTAwNywxNCArMTAwNSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgInNlcmlhbCBtaWRpIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfc2VyaWFsX3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfc2VyaWFsX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9zZXJpYWxfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwppbmRleCBhM2VlMzA2Li4yNmViMjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwpAQCAtMTY5LDEwICsxNjksOCBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1ZJUk1JRElfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKLQkJfQorCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKIAl9CkBAIC0xODAsMTQgKzE3OCwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgIkNhcmQtVmlyTUlESSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX3Zpcm1pZGlfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF92aXJtaWRpX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF92aXJtaWRpX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9LY29uZmlnIGIvc291bmQvaXNhL0tjb25maWcKaW5kZXggZmY4ZmVmOS4uNTU3YzRkZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL0tjb25maWcKKysrIGIvc291bmQvaXNhL0tjb25maWcKQEAgLTExLDYgKzExLDE1IEBACiAgICAgICAgIHRyaXN0YXRlCiAgICAgICAgIHNlbGVjdCBTTkRfUENNCiAKK2NvbmZpZyBTTkRfQURMSUIKKwl0cmlzdGF0ZSAiQWRMaWIgRk0gY2FyZCIKKwlzZWxlY3QgU05EX09QTDNfTElCCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEFkTGliIEZNIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWRsaWIuCisKIGNvbmZpZyBTTkRfQUQxODE2QQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBTb3VuZFBvcnQgQUQxODE2QSIKIAlkZXBlbmRzIG9uIFNORCAmJiBQTlAgJiYgSVNBCkBAIC0yOTIsNiArMzAxLDIwIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtb3B0aTkzeC4KIAorY29uZmlnIFNORF9NSVJPCisJdHJpc3RhdGUgIk1pcm8gbWlyb1NPVU5EIFBDTTFwcm8vUENNMTIvUENNMjByYWRpbyBkcml2ZXIiCisJZGVwZW5kcyBvbiBTTkQKKwlzZWxlY3QgU05EX09QTDRfTElCCisJc2VsZWN0IFNORF9DUzQyMzFfTElCCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBNaXJvIG1pcm9TT1VORCBQQ00xIHBybywgCisJICBtaXJvU09VTkQgUENNMTIgYW5kIG1pcm9TT1VORCBQQ00yMCBSYWRpbyBzb3VuZGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbWlyby4KKwogY29uZmlnIFNORF9TQjgKIAl0cmlzdGF0ZSAiU291bmQgQmxhc3RlciAxLjAvMi4wL1BybyAoOC1iaXQpIgogCWRlcGVuZHMgb24gU05ECmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvTWFrZWZpbGUgYi9zb3VuZC9pc2EvTWFrZWZpbGUKaW5kZXggMDU3MjRlYi4uYmIzMTdjYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL01ha2VmaWxlCisrKyBiL3NvdW5kL2lzYS9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKICMgQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KICMKIAorc25kLWFkbGliLW9ianMgOj0gYWRsaWIubwogc25kLWFsczEwMC1vYmpzIDo9IGFsczEwMC5vCiBzbmQtYXp0MjMyMC1vYmpzIDo9IGF6dDIzMjAubwogc25kLWNtaTgzMzAtb2JqcyA6PSBjbWk4MzMwLm8KQEAgLTEzLDYgKzE0LDcgQEAKIHNuZC1zc2NhcGUtb2JqcyA6PSBzc2NhcGUubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CitvYmotJChDT05GSUdfU05EX0FETElCKSArPSBzbmQtYWRsaWIubwogb2JqLSQoQ09ORklHX1NORF9BTFMxMDApICs9IHNuZC1hbHMxMDAubwogb2JqLSQoQ09ORklHX1NORF9BWlQyMzIwKSArPSBzbmQtYXp0MjMyMC5vCiBvYmotJChDT05GSUdfU05EX0NNSTgzMzApICs9IHNuZC1jbWk4MzMwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDMyNmEwNTcuLjk5OTA4ZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtMTkzLDkgKzE5MywxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0FEMTg0OF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTIwNCwxNCArMjA2LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiQUQxODQ4IHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfYWQxODQ4X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfYWQxODQ4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9hZDE4NDhfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkbGliLmMgYi9zb3VuZC9pc2EvYWRsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTI0MzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL2FkbGliLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBBZExpYiBGTSBjYXJkIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisKKyNkZWZpbmUgQ1JEX05BTUUgIkFkTGliIEZNIgorI2RlZmluZSBEUlZfTkFNRSAic25kX2FkbGliIgorCitNT0RVTEVfREVTQ1JJUFRJT04oQ1JEX05BTUUpOworTU9EVUxFX0FVVEhPUigiUmVuZSBIZXJtYW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOworc3RhdGljIGxvbmcgcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShwb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbU05EUlZfQ0FSRFNdOworCitzdGF0aWMgdm9pZCBzbmRfYWRsaWJfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjYXJkLT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWRsaWJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CisKKwlpbnQgZXJyb3IsIGkgPSBkZXZpY2UtPmlkOworCisJaWYgKHBvcnRbaV0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogcGxlYXNlIHNwZWNpZnkgcG9ydFxuIik7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byBvdXQwOworCX0KKworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCk7CisJaWYgKCFjYXJkKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IGNyZWF0ZSBjYXJkXG4iKTsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIG91dDA7CisJfQorCisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gcmVxdWVzdF9yZWdpb24ocG9ydFtpXSwgNCwgQ1JEX05BTUUpOworCWlmICghY2FyZC0+cHJpdmF0ZV9kYXRhKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IGdyYWIgcG9ydHNcbiIpOworCQllcnJvciA9IC1FQlVTWTsKKwkJZ290byBvdXQxOworCX0KKwljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfYWRsaWJfZnJlZTsKKworCWVycm9yID0gc25kX29wbDNfY3JlYXRlKGNhcmQsIHBvcnRbaV0sIHBvcnRbaV0gKyAyLCBPUEwzX0hXX0FVVE8sIDEsICZvcGwzKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IGNyZWF0ZSBPUExcbiIpOworCQlnb3RvIG91dDE7CisJfQorCisJZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMCwgTlVMTCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNvdWxkIG5vdCBjcmVhdGUgRk1cbiIpOworCQlnb3RvIG91dDE7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJWX05BTUUpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIENSRF9OQU1FKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCBDUkRfTkFNRSAiIGF0ICUjbHgiLCBwb3J0W2ldKTsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldmljZS0+ZGV2KTsKKworCWVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNvdWxkIG5vdCByZWdpc3RlciBjYXJkXG4iKTsKKwkJZ290byBvdXQxOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldmljZSwgY2FyZCk7CisJcmV0dXJuIDA7CisKK291dDE6CXNuZF9jYXJkX2ZyZWUoY2FyZCk7CitvdXQwOglyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9hZGxpYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQoreworCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX2FkbGliX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gc25kX2FkbGliX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2FkbGliX3JlbW92ZSksCisKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUlZfTkFNRQorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9hZGxpYl9pbml0KHZvaWQpCit7CisJaW50IGksIGNhcmRzOworCisJaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2FkbGliX2RyaXZlcikgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IHJlZ2lzdGVyIGRyaXZlclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZvciAoY2FyZHMgPSAwLCBpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCisJCWlmICghZW5hYmxlW2ldKQorCQkJY29udGludWU7CisKKwkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZfTkFNRSwgaSwgTlVMTCwgMCk7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGV2aWNlc1tpXSA9IGRldmljZTsKKwkJY2FyZHMrKzsKKwl9CisKKwlpZiAoIWNhcmRzKSB7CisjaWZkZWYgTU9EVUxFCisJCXByaW50ayhLRVJOX0VSUiBDUkRfTkFNRSAiIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOworI2VuZGlmCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfYWRsaWJfZHJpdmVyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2FkbGliX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKQorCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2VzW2ldKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX2FkbGliX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFsc2FfY2FyZF9hZGxpYl9pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9hZGxpYl9leGl0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jbWk4MzMwLmMgYi9zb3VuZC9pc2EvY21pODMzMC5jCmluZGV4IGZhNjMwNDguLjNjMWU5ZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jbWk4MzMwLmMKKysrIGIvc291bmQvaXNhL2NtaTgzMzAuYwpAQCAtNjkzLDE1ICs2OTMsMTcgQEAKIAlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2NtaTgzMzBfZHJpdmVyKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCQlpZiAoaXNfaXNhcG5wX3NlbGVjdGVkKGkpKQorCQlpZiAoISBlbmFibGVbaV0gfHwgaXNfaXNhcG5wX3NlbGVjdGVkKGkpKQogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoQ01JODMzMF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTcxOSwxNCArNzIxLDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNNSTgzMzAgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2NtaTgzMzBfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9jbWk4MzMwX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9jbWk4MzMwX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCmluZGV4IGEzMGRjZDkuLjM5NzMxMGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwpAQCAtMjA5LDkgKzIwOSwxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0NTNDIzMV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTIyMCwxNCArMjIyLDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiQ1M0MjMxIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfY3M0MjMxX3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfY3M0MjMxX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9jczQyMzFfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKaW5kZXggMzgyYmIxNy4uZjdmYTc3OSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCkBAIC03ODAsOSArNzgwLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShDUzQyM1hfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCXBsYXRmb3JtX2RldmljZXNbaV0gPSBkZXZpY2U7CiAJCXNuZF9jczQyM3hfZGV2aWNlcysrOwpAQCAtODAyLDE0ICs4MDQsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSIElERU5UICIgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9jczQyM3hfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9jczQyM3hfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2NzNDIzeF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwppbmRleCAyYjY5ZmM4Li5lOTA2ODllIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCisrKyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKQEAgLTIxMyw5ICsyMTMsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEVTMTY4OF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTIyNCwxNCArMjI2LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiRVNTIEF1ZGlvRHJpdmUgRVMxNjg4IHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfZXMxNjg4X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfZXMxNjg4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9lczE2ODhfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTh4eC5jIGIvc291bmQvaXNhL2VzMTh4eC5jCmluZGV4IDlmYmMxODUuLmU2OTQ1ZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE4eHguYworKysgYi9zb3VuZC9pc2EvZXMxOHh4LmMKQEAgLTg1LDYgKzg1LDggQEAKICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KICNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMjM5MSw5ICsyMzkzLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShFUzE4WFhfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCSAgICAgICAJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtMjQxMSwxNCArMjQxNSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJFU1MgQXVkaW9Ecml2ZSBFUzE4eHggc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9lczE4eHhfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9lczE4eHhfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2VzMTh4eF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCmluZGV4IDI2ZGNjZmUuLjM3MDU3YTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCkBAIC0yNTMsOSArMjUzLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShHVVNDTEFTU0lDX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlkZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtMjY0LDE0ICsyNjYsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSICJHVVMgQ2xhc3NpYyBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2d1c2NsYXNzaWNfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9ndXNjbGFzc2ljX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9ndXNjbGFzc2ljX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jIGIvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKaW5kZXggMzFkYzIwNS4uMDU4NTJmYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKQEAgLTM2Myw5ICszNjMsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEdVU0VYVFJFTUVfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC0zNzQsMTQgKzM3NiwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgIkdVUyBFeHRyZW1lIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfZ3VzZXh0cmVtZV91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX2d1c2V4dHJlbWVfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2d1c2V4dHJlbWVfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNtYXguYyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKaW5kZXggY2FmYjliNi4uZmNmMmM4ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNtYXguYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCkBAIC0zOTAsOSArMzkwLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShHVVNNQVhfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC00MDEsMTQgKzQwMywxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgIkdVUyBNQVggc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9ndXNtYXhfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9ndXNtYXhfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2d1c21heF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwppbmRleCBkZTcxYjdhLi40Mjk4ZDMzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKQEAgLTk0Nyw5ICs5NDcsMTEgQEAKICNlbmRpZgogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKElOVEVSV0FWRV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTk2NiwxNCArOTY4LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiSW50ZXJXYXZlIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfaW50ZXJ3YXZlX3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfaW50ZXJ3YXZlX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9pbnRlcndhdmVfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wbDNzYTIuYyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKaW5kZXggYzkwNmUyMC4uNmQ4ODkwNSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wbDNzYTIuYworKysgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCkBAIC05NjIsOSArOTYyLDExIEBACiAjZW5kaWYKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShPUEwzU0EyX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQlzbmRfb3BsM3NhMl9kZXZpY2VzKys7CkBAIC05ODMsMTQgKzk4NSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJZYW1haGEgT1BMMy1TQSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX29wbDNzYTJfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9vcGwzc2EyX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9vcGwzc2EyX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L01ha2VmaWxlIGIvc291bmQvaXNhL29wdGk5eHgvTWFrZWZpbGUKaW5kZXggMjhjNjQwNy4uMGU0MWJmZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL29wdGk5eHgvTWFrZWZpbGUKQEAgLTYsOCArNiwxMCBAQAogc25kLW9wdGk5MngtYWQxODQ4LW9ianMgOj0gb3B0aTkyeC1hZDE4NDgubwogc25kLW9wdGk5MngtY3M0MjMxLW9ianMgOj0gb3B0aTkyeC1jczQyMzEubwogc25kLW9wdGk5M3gtb2JqcyA6PSBvcHRpOTN4Lm8KK3NuZC1taXJvLW9ianMgOj0gbWlyby5vCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKIG9iai0kKENPTkZJR19TTkRfT1BUSTkyWF9BRDE4NDgpICs9IHNuZC1vcHRpOTJ4LWFkMTg0OC5vCiBvYmotJChDT05GSUdfU05EX09QVEk5MlhfQ1M0MjMxKSArPSBzbmQtb3B0aTkyeC1jczQyMzEubwogb2JqLSQoQ09ORklHX1NORF9PUFRJOTNYKSArPSBzbmQtb3B0aTkzeC5vCitvYmotJChDT05GSUdfU05EX01JUk8pICs9IHNuZC1taXJvLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmJmY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCkBAIC0wLDAgKzEsMTQ1NSBAQAorLyoKKyAqICAgQUxTQSBzb3VuZGNhcmQgZHJpdmVyIGZvciBNaXJvIG1pcm9TT1VORCBQQ00xIHBybworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlyb1NPVU5EIFBDTTEyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXJvU09VTkQgUENNMjAgUmFkaW8KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPgorICoKKyAqICAgQmFzZWQgb24gT1NTIEFDSSBhbmQgQUxTQSBPUFRpOXh4IGRyaXZlcnMKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY3M0MjMxLmg+CisjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CisjaW5jbHVkZSA8c291bmQvb3BsNC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjZGVmaW5lIFNORFJWX0xFR0FDWV9GSU5EX0ZSRUVfSVJRCisjZGVmaW5lIFNORFJWX0xFR0FDWV9GSU5EX0ZSRUVfRE1BCisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgIm1pcm8uaCIKKworTU9EVUxFX0FVVEhPUigiTWFydGluIExhbmdlciA8bWFydGluLWxhbmdlckBnbXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1pcm8gbWlyb1NPVU5EIFBDTTEgcHJvLCBQQ00xMiwgUENNMjAgUmFkaW8iKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e01pcm8sbWlyb1NPVU5EIFBDTTEgcHJvfSwgIgorCQkJIntNaXJvLG1pcm9TT1VORCBQQ00xMn0sICIKKwkJCSJ7TWlybyxtaXJvU09VTkQgUENNMjAgUmFkaW99fSIpOworCitzdGF0aWMgaW50IGluZGV4ID0gU05EUlZfREVGQVVMVF9JRFgxOwkJLyogSW5kZXggMC1NQVggKi8KK3N0YXRpYyBjaGFyICppZCA9IFNORFJWX0RFRkFVTFRfU1RSMTsJCS8qIElEIGZvciB0aGlzIGNhcmQgKi8KK3N0YXRpYyBsb25nIHBvcnQgPSBTTkRSVl9ERUZBVUxUX1BPUlQxOyAJLyogMHg1MzAsMHhlODAsMHhmNDAsMHg2MDQgKi8KK3N0YXRpYyBsb25nIG1wdV9wb3J0ID0gU05EUlZfREVGQVVMVF9QT1JUMTsJLyogMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzAgKi8KK3N0YXRpYyBsb25nIGZtX3BvcnQgPSBTTkRSVl9ERUZBVUxUX1BPUlQxOwkvKiAweDM4OCAqLworc3RhdGljIGludCBpcnEgPSBTTkRSVl9ERUZBVUxUX0lSUTE7CQkvKiA1LDcsOSwxMCwxMSAqLworc3RhdGljIGludCBtcHVfaXJxID0gU05EUlZfREVGQVVMVF9JUlExOwkvKiA1LDcsOSwxMCAqLworc3RhdGljIGludCBkbWExID0gU05EUlZfREVGQVVMVF9ETUExOwkJLyogMCwxLDMgKi8KK3N0YXRpYyBpbnQgZG1hMiA9IFNORFJWX0RFRkFVTFRfRE1BMTsJCS8qIDAsMSwzICovCitzdGF0aWMgaW50IHdzczsKK3N0YXRpYyBpbnQgaWRlOworCittb2R1bGVfcGFyYW0oaW5kZXgsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIG1pcm8gc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtKGlkLCBjaGFycCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBtaXJvIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbShwb3J0LCBsb25nLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIldTUyBwb3J0ICMgZm9yIG1pcm8gZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtKG1wdV9wb3J0LCBsb25nLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X3BvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgbWlybyBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW0oZm1fcG9ydCwgbG9uZywgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtX3BvcnQsICJGTSBQb3J0ICMgZm9yIG1pcm8gZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtKGlycSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiV1NTIGlycSAjIGZvciBtaXJvIGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbShtcHVfaXJxLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVfaXJxLCAiTVBVLTQwMSBpcnEgIyBmb3IgbWlybyBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW0oZG1hMSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMSwgIjFzdCBkbWEgIyBmb3IgbWlybyBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW0oZG1hMiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMiwgIjJuZCBkbWEgIyBmb3IgbWlybyBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW0od3NzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh3c3MsICJ3c3MgbW9kZSIpOworbW9kdWxlX3BhcmFtKGlkZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWRlLCAiZW5hYmxlIGlkZSBwb3J0Iik7CisKKyNkZWZpbmUgT1BUaTlYWF9IV19ERVRFQ1QJMAorI2RlZmluZSBPUFRpOVhYX0hXXzgyQzkyOAkxCisjZGVmaW5lIE9QVGk5WFhfSFdfODJDOTI5CTIKKyNkZWZpbmUgT1BUaTlYWF9IV184MkM5MjQJMworI2RlZmluZSBPUFRpOVhYX0hXXzgyQzkyNQk0CisjZGVmaW5lIE9QVGk5WFhfSFdfODJDOTMwCTUKKyNkZWZpbmUgT1BUaTlYWF9IV184MkM5MzEJNgorI2RlZmluZSBPUFRpOVhYX0hXXzgyQzkzMwk3CisjZGVmaW5lIE9QVGk5WFhfSFdfTEFTVAkJT1BUaTlYWF9IV184MkM5MzMKKworI2RlZmluZSBPUFRpOVhYX01DX1JFRyhuKQluCisKKworc3RydWN0IHNuZF9taXJvIHsKKwl1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZTsKKwl1bnNpZ25lZCBjaGFyIHBhc3N3b3JkOworCWNoYXIgbmFtZVs3XTsKKworCXN0cnVjdCByZXNvdXJjZSAqcmVzX21jX2Jhc2U7CisJc3RydWN0IHJlc291cmNlICpyZXNfYWNpX3BvcnQ7CisKKwl1bnNpZ25lZCBsb25nIG1jX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBtY19iYXNlX3NpemU7CisJdW5zaWduZWQgbG9uZyBwd2RfcmVnOworCisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCisJbG9uZyB3c3NfYmFzZTsKKwlpbnQgaXJxOworCWludCBkbWExOworCWludCBkbWEyOworCisJbG9uZyBmbV9wb3J0OworCisJbG9uZyBtcHVfcG9ydDsKKwlpbnQgbXB1X2lycTsKKworCXVuc2lnbmVkIGxvbmcgYWNpX3BvcnQ7CisJaW50IGFjaV92ZW5kb3I7CisJaW50IGFjaV9wcm9kdWN0OworCWludCBhY2lfdmVyc2lvbjsKKwlpbnQgYWNpX2FtcDsKKwlpbnQgYWNpX3ByZWFtcDsKKwlpbnQgYWNpX3NvbG9tb2RlOworCisJc3RydWN0IG11dGV4IGFjaV9tdXRleDsKK307CisKK3N0YXRpYyB2b2lkIHNuZF9taXJvX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX21pcm8gKiBtaXJvKTsKKworI2RlZmluZSBEUklWRVJfTkFNRSAic25kLW1pcm8iCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7CisKK3N0YXRpYyBjaGFyICogc25kX29wdGk5eHhfbmFtZXNbXSA9IHsKKwkidW5rb3duIiwKKwkiODJDOTI4IiwgIjgyQzkyOSIsCisJIjgyQzkyNCIsICI4MkM5MjUiLAorCSI4MkM5MzAiLCAiODJDOTMxIiwgIjgyQzkzMyIKK307CisKKy8qIAorICogIEFDSSBjb250cm9sCisgKi8KKworc3RhdGljIGludCBhY2lfYnVzeV93YWl0KHN0cnVjdCBzbmRfbWlybyAqIG1pcm8pCit7CisJbG9uZyB0aW1lb3V0OworCXVuc2lnbmVkIGNoYXIgYnl0ZTsKKworCWZvciAodGltZW91dCA9IDE7IHRpbWVvdXQgPD0gQUNJX01JTlRJTUUrMzA7IHRpbWVvdXQrKykgeworCQlpZiAoKChieXRlPWluYihtaXJvLT5hY2lfcG9ydCArIEFDSV9SRUdfQlVTWSkpICYgMSkgPT0gMCkgeworCQkJaWYgKHRpbWVvdXQgPj0gQUNJX01JTlRJTUUpCisJCQkJc25kX3ByaW50ZCgiYWNpIHJlYWR5IGluIHJvdW5kICVsZC5cbiIsCisJCQkJCSAgIHRpbWVvdXQtQUNJX01JTlRJTUUpOworCQkJcmV0dXJuIGJ5dGU7CisJCX0KKwkJaWYgKHRpbWVvdXQgPj0gQUNJX01JTlRJTUUpIHsKKwkJCWxvbmcgb3V0PTEwKkhaOworCQkJc3dpdGNoICh0aW1lb3V0LUFDSV9NSU5USU1FKSB7CisJCQljYXNlIDAgLi4uIDk6CisJCQkJb3V0IC89IDEwOworCQkJY2FzZSAxMCAuLi4gMTk6CisJCQkJb3V0IC89IDEwOworCQkJY2FzZSAyMCAuLi4gMzA6CisJCQkJb3V0IC89IDEwOworCQkJZGVmYXVsdDoKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQkJc2NoZWR1bGVfdGltZW91dChvdXQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXNuZF9wcmludGsoS0VSTl9FUlIgImFjaV9idXN5X3dhaXQoKSB0aW1lIG91dFxuIik7CisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWNpX3dyaXRlKHN0cnVjdCBzbmRfbWlybyAqIG1pcm8sIHVuc2lnbmVkIGNoYXIgYnl0ZSkKK3sKKwlpZiAoYWNpX2J1c3lfd2FpdChtaXJvKSA+PSAwKSB7CisJCW91dGIoYnl0ZSwgbWlyby0+YWNpX3BvcnQgKyBBQ0lfUkVHX0NPTU1BTkQpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2kgYnVzeSwgYWNpX3dyaXRlKDB4JXgpIHN0b3BwZWQuXG4iLCBieXRlKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFjaV9yZWFkKHN0cnVjdCBzbmRfbWlybyAqIG1pcm8pCit7CisJdW5zaWduZWQgY2hhciBieXRlOworCisJaWYgKGFjaV9idXN5X3dhaXQobWlybykgPj0gMCkgeworCQlieXRlPWluYihtaXJvLT5hY2lfcG9ydCArIEFDSV9SRUdfU1RBVFVTKTsKKwkJcmV0dXJuIGJ5dGU7CisJfSBlbHNlIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpIGJ1c3ksIGFjaV9yZWFkKCkgc3RvcHBlZC5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KK30KKworc3RhdGljIGludCBhY2lfY21kKHN0cnVjdCBzbmRfbWlybyAqIG1pcm8sIGludCB3cml0ZTEsIGludCB3cml0ZTIsIGludCB3cml0ZTMpCit7CisJaW50IHdyaXRlW10gPSB7d3JpdGUxLCB3cml0ZTIsIHdyaXRlM307CisJaW50IHZhbHVlLCBpOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbWlyby0+YWNpX211dGV4KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWZvciAoaT0wOyBpPDM7IGkrKykgeworCQlpZiAod3JpdGVbaV08IDAgfHwgd3JpdGVbaV0gPiAyNTUpCisJCQlicmVhazsKKwkJZWxzZSB7CisJCQl2YWx1ZSA9IGFjaV93cml0ZShtaXJvLCB3cml0ZVtpXSk7CisJCQlpZiAodmFsdWUgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCisJdmFsdWUgPSBhY2lfcmVhZChtaXJvKTsKKworb3V0OgltdXRleF91bmxvY2soJm1pcm8tPmFjaV9tdXRleCk7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50IGFjaV9nZXR2YWx1ZShzdHJ1Y3Qgc25kX21pcm8gKiBtaXJvLCB1bnNpZ25lZCBjaGFyIGluZGV4KQoreworCXJldHVybiBhY2lfY21kKG1pcm8sIEFDSV9TVEFUVVMsIGluZGV4LCAtMSk7Cit9CisKK3N0YXRpYyBpbnQgYWNpX3NldHZhbHVlKHN0cnVjdCBzbmRfbWlybyAqIG1pcm8sIHVuc2lnbmVkIGNoYXIgaW5kZXgsIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gYWNpX2NtZChtaXJvLCBpbmRleCwgdmFsdWUsIC0xKTsKK30KKworLyoKKyAqICBNSVhFUiBwYXJ0CisgKi8KKworc3RhdGljIGludCBzbmRfbWlyb19pbmZvX2NhcHR1cmUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX2dldF9jYXB0dXJlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbWlybyAqbWlybyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgdmFsdWU7CisKKwlpZiAoKHZhbHVlID0gYWNpX2dldHZhbHVlKG1pcm8sIEFDSV9TX0dFTkVSQUwpKSA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic25kX21pcm9fZ2V0X2NhcHR1cmUoKSBmYWlsZWQ6ICVkXG4iLCB2YWx1ZSk7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHZhbHVlICYgMHgyMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX3B1dF9jYXB0dXJlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbWlybyAqbWlybyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlLCB2YWx1ZSwgZXJyb3I7CisKKwl2YWx1ZSA9ICEodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCisJaWYgKChlcnJvciA9IGFjaV9zZXR2YWx1ZShtaXJvLCBBQ0lfU0VUX1NPTE9NT0RFLCB2YWx1ZSkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzbmRfbWlyb19wdXRfY2FwdHVyZSgpIGZhaWxlZDogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWNoYW5nZSA9ICh2YWx1ZSAhPSBtaXJvLT5hY2lfc29sb21vZGUpOworCW1pcm8tPmFjaV9zb2xvbW9kZSA9IHZhbHVlOworCQorCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgc25kX21pcm9faW5mb19wcmVhbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX2dldF9wcmVhbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCB2YWx1ZTsKKworCWlmIChtaXJvLT5hY2lfdmVyc2lvbiA8PSAxNzYpIHsKKworCQkvKiAKKwkJICAgT1NTIHNheXMgaXQncyBub3QgcmVhZGFibGUgd2l0aCB2ZXJzaW9ucyA8IDE3Ni4KKwkJICAgQnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBteSBjYXJkLAorCQkgICB3aGljaCBpcyBhIFBDTTEyIHdpdGggYWNpX3ZlcnNpb24gPSAxNzYuCisJCSovCisKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtaXJvLT5hY2lfcHJlYW1wOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKHZhbHVlID0gYWNpX2dldHZhbHVlKG1pcm8sIEFDSV9HRVRfUFJFQU1QKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNuZF9taXJvX2dldF9wcmVhbXAoKSBmYWlsZWQ6ICVkXG4iLCB2YWx1ZSk7CisJCXJldHVybiB2YWx1ZTsKKwl9CisJCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWx1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX3B1dF9wcmVhbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBlcnJvciwgdmFsdWUsIGNoYW5nZTsKKworCXZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIEFDSV9TRVRfUFJFQU1QLCB2YWx1ZSkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzbmRfbWlyb19wdXRfcHJlYW1wKCkgZmFpbGVkOiAlZFxuIiwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJY2hhbmdlID0gKHZhbHVlICE9IG1pcm8tPmFjaV9wcmVhbXApOworCW1pcm8tPmFjaV9wcmVhbXAgPSB2YWx1ZTsKKworCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgc25kX21pcm9faW5mb19hbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX2dldF9hbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbWlyby0+YWNpX2FtcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX3B1dF9hbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBlcnJvciwgdmFsdWUsIGNoYW5nZTsKKworCXZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIEFDSV9TRVRfUE9XRVJBTVAsIHZhbHVlKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNuZF9taXJvX3B1dF9hbXAoKSB0byAlZCBmYWlsZWQ6ICVkXG4iLCB2YWx1ZSwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJY2hhbmdlID0gKHZhbHVlICE9IG1pcm8tPmFjaV9hbXApOworCW1pcm8tPmFjaV9hbXAgPSB2YWx1ZTsKKworCXJldHVybiBjaGFuZ2U7Cit9CisKKyNkZWZpbmUgTUlST19ET1VCTEUoY3RsX25hbWUsIGN0bF9pbmRleCwgZ2V0X3JpZ2h0X3JlZywgc2V0X3JpZ2h0X3JlZykgXAoreyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorICAubmFtZSA9IGN0bF9uYW1lLCBcCisgIC5pbmRleCA9IGN0bF9pbmRleCwgXAorICAuaW5mbyA9IHNuZF9taXJvX2luZm9fZG91YmxlLCBcCisgIC5nZXQgPSBzbmRfbWlyb19nZXRfZG91YmxlLCBcCisgIC5wdXQgPSBzbmRfbWlyb19wdXRfZG91YmxlLCBcCisgIC5wcml2YXRlX3ZhbHVlID0gZ2V0X3JpZ2h0X3JlZyB8IChzZXRfcmlnaHRfcmVnIDw8IDgpIFwKK30KKworc3RhdGljIGludCBzbmRfbWlyb19pbmZvX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlpbnQgcmVnID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKworCWlmICgocmVnID49IEFDSV9HRVRfRVExKSAmJiAocmVnIDw9IEFDSV9HRVRfRVE3KSkgeworCisJCS8qIGVxdWFsaXplciBlbGVtZW50cyAqLworCisJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IC0gMHg3ZjsKKwkJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMHg3ZjsKKwl9IGVsc2UgeworCisJCS8qIG5vbi1lcXVhbGl6ZXIgZWxlbWVudHMgKi8KKworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAweDIwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX2dldF9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVpbmZvKQoreworCXN0cnVjdCBzbmRfbWlybyAqbWlybyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgbGVmdF92YWwsIHJpZ2h0X3ZhbDsKKworCWludCByaWdodF9yZWcgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJaW50IGxlZnRfcmVnID0gcmlnaHRfcmVnICsgMTsKKworCWlmICgocmlnaHRfdmFsID0gYWNpX2dldHZhbHVlKG1pcm8sIHJpZ2h0X3JlZykpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfZ2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsIHJpZ2h0X3JlZywgcmlnaHRfdmFsKTsKKwkJcmV0dXJuIHJpZ2h0X3ZhbDsKKwl9CisKKwlpZiAoKGxlZnRfdmFsID0gYWNpX2dldHZhbHVlKG1pcm8sIGxlZnRfcmVnKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImFjaV9nZXR2YWx1ZSglZCkgZmFpbGVkOiAlZFxuIiwgbGVmdF9yZWcsIGxlZnRfdmFsKTsKKwkJcmV0dXJuIGxlZnRfdmFsOworCX0KKworCWlmICgocmlnaHRfcmVnID49IEFDSV9HRVRfRVExKSAmJiAocmlnaHRfcmVnIDw9IEFDSV9HRVRfRVE3KSkgeworCisJCS8qIGVxdWFsaXplciBlbGVtZW50cyAqLworCisJCWlmIChsZWZ0X3ZhbCA8IDB4ODApIHsKKwkJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbGVmdF92YWw7CisJCX0gZWxzZSB7CisJCQl1aW5mby0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IDB4ODAgLSBsZWZ0X3ZhbDsKKwkJfQorCisJCWlmIChyaWdodF92YWwgPCAweDgwKSB7CisJCQl1aW5mby0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IHJpZ2h0X3ZhbDsKKwkJfSBlbHNlIHsKKwkJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gMHg4MCAtIHJpZ2h0X3ZhbDsKKwkJfQorCisJfSBlbHNlIHsKKworCQkvKiBub24tZXF1YWxpemVyIGVsZW1lbnRzICovCisKKwkJdWluZm8tPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAweDIwIC0gbGVmdF92YWw7CisJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gMHgyMCAtIHJpZ2h0X3ZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbWlyb19wdXRfZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCAKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21pcm8gKm1pcm8gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGxlZnQsIHJpZ2h0LCBsZWZ0X29sZCwgcmlnaHRfb2xkOworCWludCBzZXRyZWdfbGVmdCwgc2V0cmVnX3JpZ2h0LCBnZXRyZWdfbGVmdCwgZ2V0cmVnX3JpZ2h0OworCWludCBjaGFuZ2UsIGVycm9yOworCisJbGVmdCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCXJpZ2h0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV07CisKKwlzZXRyZWdfcmlnaHQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGZmOworCWlmIChzZXRyZWdfcmlnaHQgPT0gQUNJX1NFVF9NQVNURVIpIHsKKwkJc2V0cmVnX2xlZnQgPSBzZXRyZWdfcmlnaHQgKyAxOworCX0gZWxzZSB7CisJCXNldHJlZ19sZWZ0ID0gc2V0cmVnX3JpZ2h0ICsgODsKKwl9CisKKwlnZXRyZWdfcmlnaHQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJZ2V0cmVnX2xlZnQgPSBnZXRyZWdfcmlnaHQgKyAxOworCisJaWYgKChsZWZ0X29sZCA9IGFjaV9nZXR2YWx1ZShtaXJvLCBnZXRyZWdfbGVmdCkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfZ2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsIGdldHJlZ19sZWZ0LCBsZWZ0X29sZCk7CisJCXJldHVybiBsZWZ0X29sZDsKKwl9CisKKwlpZiAoKHJpZ2h0X29sZCA9IGFjaV9nZXR2YWx1ZShtaXJvLCBnZXRyZWdfcmlnaHQpKSA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpX2dldHZhbHVlKCVkKSBmYWlsZWQ6ICVkXG4iLCBnZXRyZWdfcmlnaHQsIHJpZ2h0X29sZCk7CisJCXJldHVybiByaWdodF9vbGQ7CisJfQorCisJaWYgKChnZXRyZWdfcmlnaHQgPj0gQUNJX0dFVF9FUTEpICYmIChnZXRyZWdfcmlnaHQgPD0gQUNJX0dFVF9FUTcpKSB7CisKKwkJLyogZXF1YWxpemVyIGVsZW1lbnRzICovCisKKwkJaWYgKGxlZnRfb2xkID4gMHg4MCkgCisJCQlsZWZ0X29sZCA9IDB4ODAgLSBsZWZ0X29sZDsKKwkJaWYgKHJpZ2h0X29sZCA+IDB4ODApIAorCQkJcmlnaHRfb2xkID0gMHg4MCAtIHJpZ2h0X29sZDsKKworCQlpZiAobGVmdCA+PSAwKSB7CisJCQlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIHNldHJlZ19sZWZ0LCBsZWZ0KSkgPCAwKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpX3NldHZhbHVlKCVkKSBmYWlsZWQ6ICVkXG4iLAorCQkJCQkgICBsZWZ0LCBlcnJvcik7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChlcnJvciA9IGFjaV9zZXR2YWx1ZShtaXJvLCBzZXRyZWdfbGVmdCwgMHg4MCAtIGxlZnQpKSA8IDApIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfc2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsCisJCQkJCSAgIDB4ODAgLSBsZWZ0LCBlcnJvcik7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQorCQl9CisKKwkJaWYgKHJpZ2h0ID49IDApIHsKKwkJCWlmICgoZXJyb3IgPSBhY2lfc2V0dmFsdWUobWlybywgc2V0cmVnX3JpZ2h0LCByaWdodCkpIDwgMCkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgImFjaV9zZXR2YWx1ZSglZCkgZmFpbGVkOiAlZFxuIiwKKwkJCQkJICAgcmlnaHQsIGVycm9yKTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIHNldHJlZ19yaWdodCwgMHg4MCAtIHJpZ2h0KSkgPCAwKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpX3NldHZhbHVlKCVkKSBmYWlsZWQ6ICVkXG4iLAorCQkJCQkgICAweDgwIC0gcmlnaHQsIGVycm9yKTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisKKwkJLyogbm9uLWVxdWFsaXplciBlbGVtZW50cyAqLworCisJCWxlZnRfb2xkID0gMHgyMCAtIGxlZnRfb2xkOworCQlyaWdodF9vbGQgPSAweDIwIC0gcmlnaHRfb2xkOworCisJCWlmICgoZXJyb3IgPSBhY2lfc2V0dmFsdWUobWlybywgc2V0cmVnX2xlZnQsIDB4MjAgLSBsZWZ0KSkgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfc2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsCisJCQkJICAgMHgyMCAtIGxlZnQsIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIHNldHJlZ19yaWdodCwgMHgyMCAtIHJpZ2h0KSkgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfc2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsCisJCQkJICAgMHgyMCAtIHJpZ2h0LCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwl9CisKKwljaGFuZ2UgPSAobGVmdCAhPSBsZWZ0X29sZCkgfHwgKHJpZ2h0ICE9IHJpZ2h0X29sZCk7CisKKwlyZXR1cm4gY2hhbmdlOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21pcm9fY29udHJvbHNbXSA9IHsKK01JUk9fRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMCwgQUNJX0dFVF9NQVNURVIsIEFDSV9TRVRfTUFTVEVSKSwKK01JUk9fRE9VQkxFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMSwgQUNJX0dFVF9NSUMsIEFDSV9TRVRfTUlDKSwKK01JUk9fRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDEsIEFDSV9HRVRfTElORSwgQUNJX1NFVF9MSU5FKSwKK01JUk9fRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAwLCBBQ0lfR0VUX0NELCBBQ0lfU0VUX0NEKSwKK01JUk9fRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCAwLCBBQ0lfR0VUX1NZTlRILCBBQ0lfU0VUX1NZTlRIKSwKK01JUk9fRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMSwgQUNJX0dFVF9QQ00sIEFDSV9TRVRfUENNKSwKK01JUk9fRE9VQkxFKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMiwgQUNJX0dFVF9MSU5FMiwgQUNJX1NFVF9MSU5FMiksCit9OworCisvKiBFcXVhbGl6ZXIgd2l0aCBzZXZlbiBiYW5kcyAob25seSBQQ00yMCkgCisgICBmcm9tIC0xMmRCIHVwIHRvICsxMmRCIG9uIGVhY2ggYmFuZCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9taXJvX2VxX2NvbnRyb2xzW10gPSB7CitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gMjggSHoiLCAwLCBBQ0lfR0VUX0VRMSwgQUNJX1NFVF9FUTEpLAorTUlST19ET1VCTEUoIlRvbmUgQ29udHJvbCAtIDE2MCBIeiIsIDAsIEFDSV9HRVRfRVEyLCBBQ0lfU0VUX0VRMiksCitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gNDAwIEh6IiwgMCwgQUNJX0dFVF9FUTMsIEFDSV9TRVRfRVEzKSwKK01JUk9fRE9VQkxFKCJUb25lIENvbnRyb2wgLSAxIGtIeiIsIDAsIEFDSV9HRVRfRVE0LCBBQ0lfU0VUX0VRNCksCitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gMi41IGtIeiIsIDAsIEFDSV9HRVRfRVE1LCBBQ0lfU0VUX0VRNSksCitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gNi4zIGtIeiIsIDAsIEFDSV9HRVRfRVE2LCBBQ0lfU0VUX0VRNiksCitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gMTYga0h6IiwgMCwgQUNJX0dFVF9FUTcsIEFDSV9TRVRfRVE3KSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19yYWRpb19jb250cm9sW10gPSB7CitNSVJPX0RPVUJMRSgiUmFkaW8gUGxheWJhY2sgVm9sdW1lIiwgMCwgQUNJX0dFVF9MSU5FMSwgQUNJX1NFVF9MSU5FMSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21pcm9fbGluZV9jb250cm9sW10gPSB7CitNSVJPX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAyLCBBQ0lfR0VUX0xJTkUxLCBBQ0lfU0VUX0xJTkUxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19wcmVhbXBfY29udHJvbFtdID0geworeworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIk1pYyBCb29zdCIsCisJLmluZGV4ID0gMSwKKwkuaW5mbyA9IHNuZF9taXJvX2luZm9fcHJlYW1wLAorCS5nZXQgPSBzbmRfbWlyb19nZXRfcHJlYW1wLAorCS5wdXQgPSBzbmRfbWlyb19wdXRfcHJlYW1wLAorfX07CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19hbXBfY29udHJvbFtdID0geworeworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkxpbmUgQm9vc3QiLAorCS5pbmRleCA9IDAsCisJLmluZm8gPSBzbmRfbWlyb19pbmZvX2FtcCwKKwkuZ2V0ID0gc25kX21pcm9fZ2V0X2FtcCwKKwkucHV0ID0gc25kX21pcm9fcHV0X2FtcCwKK319OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21pcm9fY2FwdHVyZV9jb250cm9sW10gPSB7Cit7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiUENNIENhcHR1cmUgU3dpdGNoIiwKKwkuaW5kZXggPSAwLAorCS5pbmZvID0gc25kX21pcm9faW5mb19jYXB0dXJlLAorCS5nZXQgPSBzbmRfbWlyb19nZXRfY2FwdHVyZSwKKwkucHV0ID0gc25kX21pcm9fcHV0X2NhcHR1cmUsCit9fTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYWNpX2luaXRfdmFsdWVzW11bMl0gX19pbml0ZGF0YSA9IHsKKwl7IEFDSV9TRVRfTVVURSwgMHgwMCB9LAorCXsgQUNJX1NFVF9QT1dFUkFNUCwgMHgwMCB9LAorCXsgQUNJX1NFVF9QUkVBTVAsIDB4MDAgfSwKKwl7IEFDSV9TRVRfU09MT01PREUsIDB4MDAgfSwKKwl7IEFDSV9TRVRfTUlDICsgMCwgMHgyMCB9LAorCXsgQUNJX1NFVF9NSUMgKyA4LCAweDIwIH0sCisJeyBBQ0lfU0VUX0xJTkUgKyAwLCAweDIwIH0sCisJeyBBQ0lfU0VUX0xJTkUgKyA4LCAweDIwIH0sCisJeyBBQ0lfU0VUX0NEICsgMCwgMHgyMCB9LAorCXsgQUNJX1NFVF9DRCArIDgsIDB4MjAgfSwKKwl7IEFDSV9TRVRfUENNICsgMCwgMHgyMCB9LAorCXsgQUNJX1NFVF9QQ00gKyA4LCAweDIwIH0sCisJeyBBQ0lfU0VUX0xJTkUxICsgMCwgMHgyMCB9LAorCXsgQUNJX1NFVF9MSU5FMSArIDgsIDB4MjAgfSwKKwl7IEFDSV9TRVRfTElORTIgKyAwLCAweDIwIH0sCisJeyBBQ0lfU0VUX0xJTkUyICsgOCwgMHgyMCB9LAorCXsgQUNJX1NFVF9TWU5USCArIDAsIDB4MjAgfSwKKwl7IEFDSV9TRVRfU1lOVEggKyA4LCAweDIwIH0sCisJeyBBQ0lfU0VUX01BU1RFUiArIDAsIDB4MjAgfSwKKwl7IEFDSV9TRVRfTUFTVEVSICsgMSwgMHgyMCB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc25kX3NldF9hY2lfaW5pdF92YWx1ZXMoc3RydWN0IHNuZF9taXJvICptaXJvKQoreworCWludCBpZHgsIGVycm9yOworCisJLyogZW5hYmxlIFdTUyBvbiBQQ00xICovCisKKwlpZiAoKG1pcm8tPmFjaV9wcm9kdWN0ID09ICdBJykgJiYgd3NzKSB7CisJCWlmICgoZXJyb3IgPSBhY2lfc2V0dmFsdWUobWlybywgQUNJX1NFVF9XU1MsIHdzcykpIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZW5hYmxpbmcgV1NTIG1vZGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KKworCS8qIGVuYWJsZSBJREUgcG9ydCAqLworCisJaWYgKGlkZSkgeworCQlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIEFDSV9TRVRfSURFLCBpZGUpKSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVuYWJsaW5nIElERSBwb3J0IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwl9CisKKwkvKiBzZXQgY29tbW9uIGFjaSB2YWx1ZXMgKi8KKworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShhY2lfaW5pdF92YWx1ZXMpOyBpZHgrKykKKyAgICAgICAgICAgICAgICBpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIGFjaV9pbml0X3ZhbHVlc1tpZHhdWzBdLCAKKwkJCQkJICBhY2lfaW5pdF92YWx1ZXNbaWR4XVsxXSkpIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpX3NldHZhbHVlKCVkKSBmYWlsZWQ6ICVkXG4iLCAKKwkJCQkgICBhY2lfaW5pdF92YWx1ZXNbaWR4XVswXSwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICAgICAgICAgIH0KKworCW1pcm8tPmFjaV9hbXAgPSAwOworCW1pcm8tPmFjaV9wcmVhbXAgPSAwOworCW1pcm8tPmFjaV9zb2xvbW9kZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbWlyb19taXhlcihzdHJ1Y3Qgc25kX21pcm8gKm1pcm8pCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IGVycjsKKworCXNuZF9hc3NlcnQobWlybyAhPSBOVUxMICYmIG1pcm8tPmNhcmQgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOworCisJY2FyZCA9IG1pcm8tPmNhcmQ7CisKKwlzd2l0Y2ggKG1pcm8tPmhhcmR3YXJlKSB7CisJY2FzZSBPUFRpOVhYX0hXXzgyQzkyNDoKKwkJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkFDSSAmIE9QVGk5MjQiKTsKKwkJYnJlYWs7CisJY2FzZSBPUFRpOVhYX0hXXzgyQzkyOToKKwkJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkFDSSAmIE9QVGk5MjkiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX0JVRygpOworCQlicmVhazsKKwl9CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX21pcm9fY29udHJvbHMpOyBpZHgrKykgeworCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX21pcm9fY29udHJvbHNbaWR4XSwgbWlybykpKSA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgobWlyby0+YWNpX3Byb2R1Y3QgPT0gJ0EnKSB8fCAobWlyby0+YWNpX3Byb2R1Y3QgPT0gJ0InKSkgeworCQkvKiBQQ00xL1BDTTEyIHdpdGggcG93ZXItYW1wIGFuZCBMaW5lIDIgKi8KKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9taXJvX2xpbmVfY29udHJvbFswXSwgbWlybykpKSA8IDApCisJCQlyZXR1cm4gZXJyOworCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX21pcm9fYW1wX2NvbnRyb2xbMF0sIG1pcm8pKSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoKG1pcm8tPmFjaV9wcm9kdWN0ID09ICdCJykgfHwgKG1pcm8tPmFjaV9wcm9kdWN0ID09ICdDJykpIHsKKwkJLyogUENNMTIvUENNMjAgd2l0aCBtaWMtcHJlYW1wICovCisJCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfbWlyb19wcmVhbXBfY29udHJvbFswXSwgbWlybykpKSA8IDApCisJCQlyZXR1cm4gZXJyOworCQlpZiAobWlyby0+YWNpX3ZlcnNpb24gPj0gMTc2KQorCQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9taXJvX2NhcHR1cmVfY29udHJvbFswXSwgbWlybykpKSA8IDApCisJCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAobWlyby0+YWNpX3Byb2R1Y3QgPT0gJ0MnKSB7CisJCS8qIFBDTTIwIHdpdGggcmFkaW8gYW5kIDcgYmFuZCBlcXVhbGl6ZXIgKi8KKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9taXJvX3JhZGlvX2NvbnRyb2xbMF0sIG1pcm8pKSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9taXJvX2VxX2NvbnRyb2xzKTsgaWR4KyspIHsKKwkJCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfbWlyb19lcV9jb250cm9sc1tpZHhdLCBtaXJvKSkpIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChsb25nICpwb3J0X3RhYmxlLCBsb25nIHNpemUpCit7CisJd2hpbGUgKCpwb3J0X3RhYmxlICE9IC0xKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCQlpZiAoKHJlcyA9IHJlcXVlc3RfcmVnaW9uKCpwb3J0X3RhYmxlLCBzaXplLCAKKwkJCQkJICAiQUxTQSB0ZXN0IikpICE9IE5VTEwpIHsKKwkJCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UocmVzKTsKKwkJCXJldHVybiAqcG9ydF90YWJsZTsKKwkJfQorCQlwb3J0X3RhYmxlKys7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBfX2luaXQgc25kX21pcm9faW5pdChzdHJ1Y3Qgc25kX21pcm8gKmNoaXAsIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlKQoreworCXN0YXRpYyBpbnQgb3B0aTl4eF9tY19zaXplW10gPSB7NywgNywgMTAsIDEwLCAyLCAyLCAyfTsKKworCWNoaXAtPmhhcmR3YXJlID0gaGFyZHdhcmU7CisJc3RyY3B5KGNoaXAtPm5hbWUsIHNuZF9vcHRpOXh4X25hbWVzW2hhcmR3YXJlXSk7CisKKwljaGlwLT5tY19iYXNlX3NpemUgPSBvcHRpOXh4X21jX3NpemVbaGFyZHdhcmVdOyAgCisKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisKKwljaGlwLT53c3NfYmFzZSA9IC0xOworCWNoaXAtPmlycSA9IC0xOworCWNoaXAtPmRtYTEgPSAtMTsKKwljaGlwLT5kbWEyID0gLTE7CisJY2hpcC0+Zm1fcG9ydCA9IC0xOworCWNoaXAtPm1wdV9wb3J0ID0gLTE7CisJY2hpcC0+bXB1X2lycSA9IC0xOworCisJc3dpdGNoIChoYXJkd2FyZSkgeworCWNhc2UgT1BUaTlYWF9IV184MkM5Mjk6CisJCWNoaXAtPm1jX2Jhc2UgPSAweGY4YzsKKwkJY2hpcC0+cGFzc3dvcmQgPSAweGUzOworCQljaGlwLT5wd2RfcmVnID0gMzsKKwkJYnJlYWs7CisKKwljYXNlIE9QVGk5WFhfSFdfODJDOTI0OgorCQljaGlwLT5tY19iYXNlID0gMHhmOGM7CisJCWNoaXAtPnBhc3N3b3JkID0gMHhlNTsKKwkJY2hpcC0+cHdkX3JlZyA9IDM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic29ycnksIG5vIHN1cHBvcnQgZm9yICVkXG4iLCBoYXJkd2FyZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfbWlyb19yZWFkKHN0cnVjdCBzbmRfbWlybyAqY2hpcCwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgcmV0dmFsID0gMHhmZjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJb3V0YihjaGlwLT5wYXNzd29yZCwgY2hpcC0+bWNfYmFzZSArIGNoaXAtPnB3ZF9yZWcpOworCisJc3dpdGNoIChjaGlwLT5oYXJkd2FyZSkgeworCWNhc2UgT1BUaTlYWF9IV184MkM5MjQ6CisJCWlmIChyZWcgPiA3KSB7CisJCQlvdXRiKHJlZywgY2hpcC0+bWNfYmFzZSArIDgpOworCQkJb3V0YihjaGlwLT5wYXNzd29yZCwgY2hpcC0+bWNfYmFzZSArIGNoaXAtPnB3ZF9yZWcpOworCQkJcmV0dmFsID0gaW5iKGNoaXAtPm1jX2Jhc2UgKyA5KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIE9QVGk5WFhfSFdfODJDOTI5OgorCQlyZXR2YWwgPSBpbmIoY2hpcC0+bWNfYmFzZSArIHJlZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic29ycnksIG5vIHN1cHBvcnQgZm9yICVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9taXJvX3dyaXRlKHN0cnVjdCBzbmRfbWlybyAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsCisJCQkgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCW91dGIoY2hpcC0+cGFzc3dvcmQsIGNoaXAtPm1jX2Jhc2UgKyBjaGlwLT5wd2RfcmVnKTsKKworCXN3aXRjaCAoY2hpcC0+aGFyZHdhcmUpIHsKKwljYXNlIE9QVGk5WFhfSFdfODJDOTI0OgorCQlpZiAocmVnID4gNykgeworCQkJb3V0YihyZWcsIGNoaXAtPm1jX2Jhc2UgKyA4KTsKKwkJCW91dGIoY2hpcC0+cGFzc3dvcmQsIGNoaXAtPm1jX2Jhc2UgKyBjaGlwLT5wd2RfcmVnKTsKKwkJCW91dGIodmFsdWUsIGNoaXAtPm1jX2Jhc2UgKyA5KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIE9QVGk5WFhfSFdfODJDOTI5OgorCQlvdXRiKHZhbHVlLCBjaGlwLT5tY19iYXNlICsgcmVnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzb3JyeSwgbm8gc3VwcG9ydCBmb3IgJWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7Cit9CisKKworI2RlZmluZSBzbmRfbWlyb193cml0ZV9tYXNrKGNoaXAsIHJlZywgdmFsdWUsIG1hc2spCVwKKwlzbmRfbWlyb193cml0ZShjaGlwLCByZWcsCQkJXAorCQkoc25kX21pcm9fcmVhZChjaGlwLCByZWcpICYgfihtYXNrKSkgfCAoKHZhbHVlKSAmIChtYXNrKSkpCisKKy8qCisgKiAgUHJvYyBJbnRlcmZhY2UKKyAqLworCitzdGF0aWMgdm9pZCBzbmRfbWlyb19wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICogZW50cnksIAorCQkJICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX21pcm8gKm1pcm8gPSAoc3RydWN0IHNuZF9taXJvICopIGVudHJ5LT5wcml2YXRlX2RhdGE7CisJY2hhciogbW9kZWwgPSAidW5rbm93biI7CisKKwkvKiBtaXJvU09VTkQgUENNMSBwcm8sIGVhcmx5IFBDTTEyICovCisKKwlpZiAoKG1pcm8tPmhhcmR3YXJlID09IE9QVGk5WFhfSFdfODJDOTI5KSAmJgorCSAgICAobWlyby0+YWNpX3ZlbmRvciA9PSAnbScpICYmIAorCSAgICAobWlyby0+YWNpX3Byb2R1Y3QgPT0gJ0EnKSkgeworCQlzd2l0Y2gobWlyby0+YWNpX3ZlcnNpb24pIHsKKwkJY2FzZSAzOgorCQkJbW9kZWwgPSAibWlyb1NPVU5EIFBDTTEgcHJvIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbW9kZWwgPSAibWlyb1NPVU5EIFBDTTEgcHJvIC8gKGVhcmx5KSBQQ00xMiI7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIG1pcm9TT1VORCBQQ00xMiwgUENNMTIgKFJldi4gRSksIFBDTTEyIHBucCAqLworCisJaWYgKChtaXJvLT5oYXJkd2FyZSA9PSBPUFRpOVhYX0hXXzgyQzkyNCkgJiYKKwkgICAgKG1pcm8tPmFjaV92ZW5kb3IgPT0gJ20nKSAmJiAKKwkgICAgKG1pcm8tPmFjaV9wcm9kdWN0ID09ICdCJykpIHsKKwkJc3dpdGNoKG1pcm8tPmFjaV92ZXJzaW9uKSB7CisJCWNhc2UgNDoKKwkJCW1vZGVsID0gIm1pcm9TT1VORCBQQ00xMiI7CisJCQlicmVhazsKKwkJY2FzZSAxNzY6CisJCQltb2RlbCA9ICJtaXJvU09VTkQgUENNMTIgKFJldi4gRSkiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltb2RlbCA9ICJtaXJvU09VTkQgUENNMTIgLyBQQ00xMiBwbnAiOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBtaXJvU09VTkQgUENNMjAgcmFkaW8gKi8KKworCWlmICgobWlyby0+aGFyZHdhcmUgPT0gT1BUaTlYWF9IV184MkM5MjQpICYmCisJICAgIChtaXJvLT5hY2lfdmVuZG9yID09ICdtJykgJiYgCisJICAgIChtaXJvLT5hY2lfcHJvZHVjdCA9PSAnQycpKSB7CisJCXN3aXRjaChtaXJvLT5hY2lfdmVyc2lvbikgeworCQljYXNlIDc6CisJCQltb2RlbCA9ICJtaXJvU09VTkQgUENNMjAgcmFkaW8gKFJldi4gRSkiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltb2RlbCA9ICJtaXJvU09VTkQgUENNMjAgcmFkaW8iOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbkdlbmVyYWwgaW5mb3JtYXRpb246XG4iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIG1vZGVsICAgOiAlc1xuIiwgbW9kZWwpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgb3B0aSAgICA6ICVzXG4iLCBtaXJvLT5uYW1lKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIGNvZGVjICAgOiAlc1xuIiwgbWlyby0+cGNtLT5uYW1lKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIHBvcnQgICAgOiAweCVseFxuIiwgbWlyby0+d3NzX2Jhc2UpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgaXJxICAgICA6ICVkXG4iLCBtaXJvLT5pcnEpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgZG1hICAgICA6ICVkLCVkXG5cbiIsIG1pcm8tPmRtYTEsIG1pcm8tPmRtYTIpOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiTVBVLTQwMTpcbiIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgcG9ydCAgICA6IDB4JWx4XG4iLCBtaXJvLT5tcHVfcG9ydCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBpcnEgICAgIDogJWRcblxuIiwgbWlyby0+bXB1X2lycSk7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJBQ0kgaW5mb3JtYXRpb246XG4iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIHZlbmRvciAgOiAiKTsKKwlzd2l0Y2gobWlyby0+YWNpX3ZlbmRvcikgeworCWNhc2UgJ20nOgorCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXJvXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX2lwcmludGYoYnVmZmVyLCAidW5rbm93biAoMHgleClcbiIsIG1pcm8tPmFjaV92ZW5kb3IpOworCQlicmVhazsKKwl9CisKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIHByb2R1Y3QgOiAiKTsKKwlzd2l0Y2gobWlyby0+YWNpX3Byb2R1Y3QpIHsKKwljYXNlICdBJzoKKwkJc25kX2lwcmludGYoYnVmZmVyLCAibWlyb1NPVU5EIFBDTTEgcHJvIC8gKGVhcmx5KSBQQ00xMlxuIik7CisJCWJyZWFrOworCWNhc2UgJ0InOgorCQlzbmRfaXByaW50ZihidWZmZXIsICJtaXJvU09VTkQgUENNMTJcbiIpOworCQlicmVhazsKKwljYXNlICdDJzoKKwkJc25kX2lwcmludGYoYnVmZmVyLCAibWlyb1NPVU5EIFBDTTIwIHJhZGlvXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX2lwcmludGYoYnVmZmVyLCAidW5rbm93biAoMHgleClcbiIsIG1pcm8tPmFjaV9wcm9kdWN0KTsKKwkJYnJlYWs7CisJfQorCisJc25kX2lwcmludGYoYnVmZmVyLCAiICBmaXJtd2FyZTogJWQgKDB4JXgpXG4iLAorCQkgICAgbWlyby0+YWNpX3ZlcnNpb24sIG1pcm8tPmFjaV92ZXJzaW9uKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIHBvcnQgICAgOiAweCVseC0weCVseFxuIiwgCisJCSAgICBtaXJvLT5hY2lfcG9ydCwgbWlyby0+YWNpX3BvcnQrMik7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICB3c3MgICAgIDogMHgleFxuIiwgd3NzKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIGlkZSAgICAgOiAweCV4XG4iLCBpZGUpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgc29sb21vZGU6IDB4JXhcbiIsIG1pcm8tPmFjaV9zb2xvbW9kZSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBhbXAgICAgIDogMHgleFxuIiwgbWlyby0+YWNpX2FtcCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBwcmVhbXAgIDogMHgleFxuIiwgbWlyby0+YWNpX3ByZWFtcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbmRfbWlyb19wcm9jX2luaXQoc3RydWN0IHNuZF9taXJvICogbWlybykKK3sKKwlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OworCisJaWYgKCEgc25kX2NhcmRfcHJvY19uZXcobWlyby0+Y2FyZCwgIm1pcm8iLCAmZW50cnkpKQorCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIG1pcm8sIDEwMjQsIHNuZF9taXJvX3Byb2NfcmVhZCk7Cit9CisKKy8qCisgKiAgSW5pdAorICovCisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9taXJvX2NvbmZpZ3VyZShzdHJ1Y3Qgc25kX21pcm8gKmNoaXApCit7CisJdW5zaWduZWQgY2hhciB3c3NfYmFzZV9iaXRzOworCXVuc2lnbmVkIGNoYXIgaXJxX2JpdHM7CisJdW5zaWduZWQgY2hhciBkbWFfYml0czsKKwl1bnNpZ25lZCBjaGFyIG1wdV9wb3J0X2JpdHMgPSAwOworCXVuc2lnbmVkIGNoYXIgbXB1X2lycV9iaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBPUFRpOVhYX0hXXzgyQzkyNDoKKwkJc25kX21pcm9fd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg2KSwgMHgwMiwgMHgwMik7CisJCXNuZF9taXJvX3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMSksIDB4ODAsIDB4ODApOworCQlzbmRfbWlyb193cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDIpLCAweDIwLCAweDIwKTsgLyogT1BMNCAqLworCQlzbmRfbWlyb193cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDMpLCAweGYwLCAweGZmKTsKKwkJc25kX21pcm9fd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg1KSwgMHgwMiwgMHgwMik7CisJCWJyZWFrOworCWNhc2UgT1BUaTlYWF9IV184MkM5Mjk6CisJCS8qIHVudGVzdGVkIGluaXQgY29tbWFuZHMgZm9yIE9QVGk5MjkgKi8KKwkJc25kX21pcm9fd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRygxKSwgMHg4MCwgMHg4MCk7CisJCXNuZF9taXJvX3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMiksIDB4MjAsIDB4MjApOyAvKiBPUEw0ICovCisJCXNuZF9taXJvX3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoNCksIDB4MDAsIDB4MGMpOworCQlzbmRfbWlyb193cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDUpLCAweDAyLCAweDAyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoY2hpcC0+d3NzX2Jhc2UpIHsKKwljYXNlIDB4NTMwOgorCQl3c3NfYmFzZV9iaXRzID0gMHgwMDsKKwkJYnJlYWs7CisJY2FzZSAweDYwNDoKKwkJd3NzX2Jhc2VfYml0cyA9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgMHhlODA6CisJCXdzc19iYXNlX2JpdHMgPSAweDAxOworCQlicmVhazsKKwljYXNlIDB4ZjQwOgorCQl3c3NfYmFzZV9iaXRzID0gMHgwMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiV1NTIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLCBjaGlwLT53c3NfYmFzZSk7CisJCWdvdG8gX19za2lwX2Jhc2U7CisJfQorCXNuZF9taXJvX3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMSksIHdzc19iYXNlX2JpdHMgPDwgNCwgMHgzMCk7CisKK19fc2tpcF9iYXNlOgorCXN3aXRjaCAoY2hpcC0+aXJxKSB7CisJY2FzZSA1OgorCQlpcnFfYml0cyA9IDB4MDU7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJaXJxX2JpdHMgPSAweDAxOworCQlicmVhazsKKwljYXNlIDk6CisJCWlycV9iaXRzID0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJaXJxX2JpdHMgPSAweDAzOworCQlicmVhazsKKwljYXNlIDExOgorCQlpcnFfYml0cyA9IDB4MDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIldTUyBpcnEgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmlycSk7CisJCWdvdG8gX19za2lwX3Jlc291cmNlczsKKwl9CisKKwlzd2l0Y2ggKGNoaXAtPmRtYTEpIHsKKwljYXNlIDA6CisJCWRtYV9iaXRzID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkbWFfYml0cyA9IDB4MDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZG1hX2JpdHMgPSAweDAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJXU1MgZG1hMSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+ZG1hMSk7CisJCWdvdG8gX19za2lwX3Jlc291cmNlczsKKwl9CisKKwlpZiAoY2hpcC0+ZG1hMSA9PSBjaGlwLT5kbWEyKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvbid0IHdhbnQgdG8gc2hhcmUgZG1hc1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3dpdGNoIChjaGlwLT5kbWEyKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiV1NTIGRtYTIgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmRtYTIpOworCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CisJfQorCWRtYV9iaXRzIHw9IDB4MDQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCW91dGIoaXJxX2JpdHMgPDwgMyB8IGRtYV9iaXRzLCBjaGlwLT53c3NfYmFzZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCitfX3NraXBfcmVzb3VyY2VzOgorCWlmIChjaGlwLT5oYXJkd2FyZSA+IE9QVGk5WFhfSFdfODJDOTI4KSB7CisJCXN3aXRjaCAoY2hpcC0+bXB1X3BvcnQpIHsKKwkJY2FzZSAwOgorCQljYXNlIC0xOgorCQkJYnJlYWs7CisJCWNhc2UgMHgzMDA6CisJCQltcHVfcG9ydF9iaXRzID0gMHgwMzsKKwkJCWJyZWFrOworCQljYXNlIDB4MzEwOgorCQkJbXB1X3BvcnRfYml0cyA9IDB4MDI7CisJCQlicmVhazsKKwkJY2FzZSAweDMyMDoKKwkJCW1wdV9wb3J0X2JpdHMgPSAweDAxOworCQkJYnJlYWs7CisJCWNhc2UgMHgzMzA6CisJCQltcHVfcG9ydF9iaXRzID0gMHgwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVBVLTQwMSBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKKwkJCQkgICBjaGlwLT5tcHVfcG9ydCk7CisJCQlnb3RvIF9fc2tpcF9tcHU7CisJCX0KKworCQlzd2l0Y2ggKGNoaXAtPm1wdV9pcnEpIHsKKwkJY2FzZSA1OgorCQkJbXB1X2lycV9iaXRzID0gMHgwMjsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQltcHVfaXJxX2JpdHMgPSAweDAzOworCQkJYnJlYWs7CisJCWNhc2UgOToKKwkJCW1wdV9pcnFfYml0cyA9IDB4MDA7CisJCQlicmVhazsKKwkJY2FzZSAxMDoKKwkJCW1wdV9pcnFfYml0cyA9IDB4MDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIk1QVS00MDEgaXJxICMgJWQgbm90IHZhbGlkXG4iLAorCQkJCSAgIGNoaXAtPm1wdV9pcnEpOworCQkJZ290byBfX3NraXBfbXB1OworCQl9CisKKwkJc25kX21pcm9fd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg2KSwKKwkJCShjaGlwLT5tcHVfcG9ydCA8PSAwKSA/IDB4MDAgOgorCQkJCTB4ODAgfCBtcHVfcG9ydF9iaXRzIDw8IDUgfCBtcHVfaXJxX2JpdHMgPDwgMywKKwkJCTB4ZjgpOworCX0KK19fc2tpcF9tcHU6CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgc25kX2NhcmRfbWlyb19kZXRlY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX21pcm8gKmNoaXApCit7CisJaW50IGksIGVycjsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCisJZm9yIChpID0gT1BUaTlYWF9IV184MkM5Mjk7IGkgPD0gT1BUaTlYWF9IV184MkM5MjQ7IGkrKykgeworCisJCWlmICgoZXJyID0gc25kX21pcm9faW5pdChjaGlwLCBpKSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoKGNoaXAtPnJlc19tY19iYXNlID0gcmVxdWVzdF9yZWdpb24oY2hpcC0+bWNfYmFzZSwgY2hpcC0+bWNfYmFzZV9zaXplLCAiT1BUaTl4eCBNQyIpKSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJdmFsdWUgPSBzbmRfbWlyb19yZWFkKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDEpKTsKKwkJaWYgKCh2YWx1ZSAhPSAweGZmKSAmJiAodmFsdWUgIT0gaW5iKGNoaXAtPm1jX2Jhc2UgKyAxKSkpCisJCQlpZiAodmFsdWUgPT0gc25kX21pcm9fcmVhZChjaGlwLCBPUFRpOVhYX01DX1JFRygxKSkpCisJCQkJcmV0dXJuIDE7CisKKwkJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfbWNfYmFzZSk7CisJCWNoaXAtPnJlc19tY19iYXNlID0gTlVMTDsKKworCX0KKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzbmRfY2FyZF9taXJvX2FjaV9kZXRlY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX21pcm8gKiBtaXJvKQoreworCXVuc2lnbmVkIGNoYXIgcmVndmFsOworCWludCBpOworCisJbXV0ZXhfaW5pdCgmbWlyby0+YWNpX211dGV4KTsKKworCS8qIGdldCBBQ0kgcG9ydCBmcm9tIE9QVGk5eHggTUMgNCAqLworCisJbWlyby0+bWNfYmFzZSA9IDB4ZjhjOworCXJlZ3ZhbD1pbmIobWlyby0+bWNfYmFzZSArIDQpOworCW1pcm8tPmFjaV9wb3J0ID0gKHJlZ3ZhbCAmIDB4MTApID8gMHgzNDQ6IDB4MzU0OworCisJaWYgKChtaXJvLT5yZXNfYWNpX3BvcnQgPSByZXF1ZXN0X3JlZ2lvbihtaXJvLT5hY2lfcG9ydCwgMywgIm1pcm8gYWNpIikpID09IE5VTEwpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpIGkvbyBhcmVhIDB4JWx4LTB4JWx4IGFscmVhZHkgdXNlZC5cbiIsIAorCQkJICAgbWlyby0+YWNpX3BvcnQsIG1pcm8tPmFjaV9wb3J0KzIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKyAgICAgICAgLyogZm9yY2UgQUNJIGludG8gYSBrbm93biBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWlmIChhY2lfY21kKG1pcm8sIEFDSV9FUlJPUl9PUCwgLTEsIC0xKSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGZvcmNlIGFjaSBpbnRvIGtub3duIHN0YXRlLlxuIik7CisJCQlyZXR1cm4gLUVOWElPOworCQl9CisKKwlpZiAoKG1pcm8tPmFjaV92ZW5kb3I9YWNpX2NtZChtaXJvLCBBQ0lfUkVBRF9JRENPREUsIC0xLCAtMSkpIDwgMCB8fAorCSAgICAobWlyby0+YWNpX3Byb2R1Y3Q9YWNpX2NtZChtaXJvLCBBQ0lfUkVBRF9JRENPREUsIC0xLCAtMSkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWFkIGFjaSBpZCBvbiAweCVseC5cbiIsIG1pcm8tPmFjaV9wb3J0KTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoKG1pcm8tPmFjaV92ZXJzaW9uPWFjaV9jbWQobWlybywgQUNJX1JFQURfVkVSU0lPTiwgLTEsIC0xKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IHJlYWQgYWNpIHZlcnNpb24gb24gMHglbHguXG4iLCAKKwkJCSAgIG1pcm8tPmFjaV9wb3J0KTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoYWNpX2NtZChtaXJvLCBBQ0lfSU5JVCwgLTEsIC0xKSA8IDAgfHwKKwkgICAgYWNpX2NtZChtaXJvLCBBQ0lfRVJST1JfT1AsIEFDSV9FUlJPUl9PUCwgQUNJX0VSUk9SX09QKSA8IDAgfHwKKwkgICAgYWNpX2NtZChtaXJvLCBBQ0lfRVJST1JfT1AsIEFDSV9FUlJPUl9PUCwgQUNJX0VSUk9SX09QKSA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgaW5pdGlhbGl6ZSBhY2kuXG4iKTsgCisJCXJldHVybiAtRU5YSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9jYXJkX21pcm9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworICAgICAgICAKKwlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKG1pcm8tPnJlc19hY2lfcG9ydCk7CisJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShtaXJvLT5yZXNfbWNfYmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9taXJvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3sKKwlzdGF0aWMgbG9uZyBwb3NzaWJsZV9wb3J0c1tdID0gezB4NTMwLCAweGU4MCwgMHhmNDAsIDB4NjA0LCAtMX07CisJc3RhdGljIGxvbmcgcG9zc2libGVfbXB1X3BvcnRzW10gPSB7MHgzMzAsIDB4MzAwLCAweDMxMCwgMHgzMjAsIC0xfTsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHsxMSwgOSwgMTAsIDcsIC0xfTsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX21wdV9pcnFzW10gPSB7MTAsIDUsIDksIDcsIC0xfTsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX2RtYTFzW10gPSB7MywgMSwgMCwgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hMnNbXVsyXSA9IHt7MSwtMX0sIHswLC0xfSwgey0xLC0xfSwgezAsLTF9fTsKKworCWludCBlcnJvcjsKKwlzdHJ1Y3Qgc25kX21pcm8gKm1pcm87CisJc3RydWN0IHNuZF9jczQyMzEgKmNvZGVjOworCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisKKwlpZiAoIShjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsCisJCQkJICBzaXplb2Yoc3RydWN0IHNuZF9taXJvKSkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX21pcm9fZnJlZTsKKwltaXJvID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCW1pcm8tPmNhcmQgPSBjYXJkOworCisJaWYgKChlcnJvciA9IHNuZF9jYXJkX21pcm9fYWNpX2RldGVjdChjYXJkLCBtaXJvKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBkZXRlY3QgYWNpIGNoaXBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBpbml0IHByb2MgaW50ZXJmYWNlICovCisJc25kX21pcm9fcHJvY19pbml0KG1pcm8pOworCisJaWYgKChlcnJvciA9IHNuZF9jYXJkX21pcm9fZGV0ZWN0KGNhcmQsIG1pcm8pKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGRldGVjdCBPUFRpOXh4IGNoaXBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoISBtaXJvLT5yZXNfbWNfYmFzZSAmJgorCSAgICAobWlyby0+cmVzX21jX2Jhc2UgPSByZXF1ZXN0X3JlZ2lvbihtaXJvLT5tY19iYXNlLCBtaXJvLT5tY19iYXNlX3NpemUsCisJCQkJCQkibWlybyAoT1BUaTl4eCBNQykiKSkgPT0gTlVMTCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJyZXF1ZXN0IGZvciBPUFRJOXh4IE1DIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1pcm8tPndzc19iYXNlID0gcG9ydDsKKwltaXJvLT5mbV9wb3J0ID0gZm1fcG9ydDsKKwltaXJvLT5tcHVfcG9ydCA9IG1wdV9wb3J0OworCW1pcm8tPmlycSA9IGlycTsKKwltaXJvLT5tcHVfaXJxID0gbXB1X2lycTsKKwltaXJvLT5kbWExID0gZG1hMTsKKwltaXJvLT5kbWEyID0gZG1hMjsKKworCWlmIChtaXJvLT53c3NfYmFzZSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJaWYgKChtaXJvLT53c3NfYmFzZSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChwb3NzaWJsZV9wb3J0cywgNCkpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBXU1MgcG9ydFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJaWYgKG1pcm8tPm1wdV9wb3J0ID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAoKG1pcm8tPm1wdV9wb3J0ID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaW9wb3J0KHBvc3NpYmxlX21wdV9wb3J0cywgMikpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBNUFU0MDEgcG9ydFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCWlmIChtaXJvLT5pcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKKwkJaWYgKChtaXJvLT5pcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcykpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwlpZiAobWlyby0+bXB1X2lycSA9PSBTTkRSVl9BVVRPX0lSUSkgeworCQlpZiAoKG1pcm8tPm1wdV9pcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfbXB1X2lycXMpKSA8IDApIHsKKwkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgTVBVNDAxIElSUVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCWlmIChtaXJvLT5kbWExID09IFNORFJWX0FVVE9fRE1BKSB7CisJCWlmICgobWlyby0+ZG1hMSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWExcykpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUExXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJaWYgKG1pcm8tPmRtYTIgPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJaWYgKChtaXJvLT5kbWEyID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYTJzW21pcm8tPmRtYTEgJSA0XSkpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEyXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlpZiAoKGVycm9yID0gc25kX21pcm9fY29uZmlndXJlKG1pcm8pKSkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJaWYgKChlcnJvciA9IHNuZF9jczQyMzFfY3JlYXRlKGNhcmQsIG1pcm8tPndzc19iYXNlICsgNCwgLTEsCisJCQkJICAgICAgIG1pcm8tPmlycSwgbWlyby0+ZG1hMSwgbWlyby0+ZG1hMiwKKwkJCQkgICAgICAgQ1M0MjMxX0hXX0FEMTg0NSwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgJmNvZGVjKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAoKGVycm9yID0gc25kX2NzNDIzMV9wY20oY29kZWMsIDAsICZwY20pKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwlpZiAoKGVycm9yID0gc25kX2NzNDIzMV9taXhlcihjb2RlYykpIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCWlmICgoZXJyb3IgPSBzbmRfY3M0MjMxX3RpbWVyKGNvZGVjLCAwLCAmdGltZXIpKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCW1pcm8tPnBjbSA9IHBjbTsKKworCWlmICgoZXJyb3IgPSBzbmRfbWlyb19taXhlcihtaXJvKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAobWlyby0+YWNpX3ZlbmRvciA9PSAnbScpIHsKKwkJLyogSXQgbG9va3MgbGlrZSBhIG1pcm8gc291bmQgY2FyZC4gKi8KKwkJc3dpdGNoIChtaXJvLT5hY2lfcHJvZHVjdCkgeworCQljYXNlICdBJzoKKwkJCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAKKwkJCQkibWlyb1NPVU5EIFBDTTEgcHJvIC8gUENNMTIiKTsKKwkJCWJyZWFrOworCQljYXNlICdCJzoKKwkJCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAKKwkJCQkibWlyb1NPVU5EIFBDTTEyIik7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgCisJCQkJIm1pcm9TT1VORCBQQ00yMCByYWRpbyIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgCisJCQkJInVua25vd24gbWlybyIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gInVua25vd24gbWlybyBhY2kgaWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZm91bmQgdW5zdXBwb3J0ZWQgYWNpIGNhcmRcbiIpOworCQlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgInVua25vd24gQ2FyZGluYWwgVGVjaG5vbG9naWVzIik7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIm1pcm8iKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXM6IE9QVGklcywgJXMgYXQgMHglbHgsIGlycSAlZCwgZG1hICVkJiVkIiwKKwkJY2FyZC0+c2hvcnRuYW1lLCBtaXJvLT5uYW1lLCBwY20tPm5hbWUsIG1pcm8tPndzc19iYXNlICsgNCwKKwkJbWlyby0+aXJxLCBtaXJvLT5kbWExLCBtaXJvLT5kbWEyKTsKKworCWlmIChtaXJvLT5tcHVfcG9ydCA8PSAwIHx8IG1pcm8tPm1wdV9wb3J0ID09IFNORFJWX0FVVE9fUE9SVCkKKwkJcm1pZGkgPSBOVUxMOworCWVsc2UKKwkJaWYgKChlcnJvciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKKwkJCQltaXJvLT5tcHVfcG9ydCwgMCwgbWlyby0+bXB1X2lycSwgU0FfSU5URVJSVVBULAorCQkJCSZybWlkaSkpKQorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIm5vIE1QVS00MDEgZGV2aWNlIGF0IDB4JWx4P1xuIiwgbWlyby0+bXB1X3BvcnQpOworCisJaWYgKG1pcm8tPmZtX3BvcnQgPiAwICYmIG1pcm8tPmZtX3BvcnQgIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXN0cnVjdCBzbmRfb3BsMyAqb3BsMyA9IE5VTEw7CisJCXN0cnVjdCBzbmRfb3BsNCAqb3BsNDsKKwkJaWYgKHNuZF9vcGw0X2NyZWF0ZShjYXJkLCBtaXJvLT5mbV9wb3J0LCBtaXJvLT5mbV9wb3J0IC0gOCwgCisJCQkJICAgIDIsICZvcGwzLCAmb3BsNCkgPCAwKQorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIm5vIE9QTDQgZGV2aWNlIGF0IDB4JWx4XG4iLCBtaXJvLT5mbV9wb3J0KTsKKwl9CisKKwlpZiAoKGVycm9yID0gc25kX3NldF9hY2lfaW5pdF92YWx1ZXMobWlybykpIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZwdHItPmRldik7CisKKwlpZiAoKGVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIGNhcmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfbWlyb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQoreworCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX21pcm9fZHJpdmVyID0geworCS5wcm9iZQkJPSBzbmRfbWlyb19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9taXJvX3JlbW92ZSksCisJLyogRklYTUU6IHN1c3BlbmQvcmVzdW1lICovCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX21pcm9faW5pdCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWlmICgoZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9taXJvX2RyaXZlcikpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKKwlpZiAoISBJU19FUlIoZGV2aWNlKSkgeworCQlpZiAocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkKKwkJCXJldHVybiAwOworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCX0KKyNpZmRlZiBNT0RVTEUKKwlwcmludGsoS0VSTl9FUlIgIm5vIG1pcm8gc291bmRjYXJkIGZvdW5kXG4iKTsKKyNlbmRpZgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfbWlyb19kcml2ZXIpOworCXJldHVybiBQVFJfRVJSKGRldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfbWlyb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX21pcm9fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWxzYV9jYXJkX21pcm9faW5pdCkKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9taXJvX2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmggYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxMzg1YgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9NSVJPX0hfCisjZGVmaW5lIF9NSVJPX0hfCisKKyNkZWZpbmUgQUNJX1JFR19DT01NQU5ECQkwCS8qIHdyaXRlIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBBQ0lfUkVHX1NUQVRVUwkJMQkvKiByZWFkIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBBQ0lfUkVHX0JVU1kJCTIJLyogYnVzeSByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQUNJX1JFR19SRFMJCTIJLyogUENNMjA6IFJEUyByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQUNJX01JTlRJTUUJCTUwMAkvKiBBQ0kgdGltZSBvdXQgbGltaXQgKi8KKworI2RlZmluZSBBQ0lfU0VUX01VVEUJCTB4MGQKKyNkZWZpbmUgQUNJX1NFVF9QT1dFUkFNUAkweDBmCisjZGVmaW5lIEFDSV9TRVRfVFVORVJNVVRFCTB4YTMKKyNkZWZpbmUgQUNJX1NFVF9UVU5FUk1PTk8JMHhhNAorI2RlZmluZSBBQ0lfU0VUX0lERQkJMHhkMAorI2RlZmluZSBBQ0lfU0VUX1dTUwkJMHhkMQorI2RlZmluZSBBQ0lfU0VUX1NPTE9NT0RFCTB4ZDIKKyNkZWZpbmUgQUNJX1NFVF9QUkVBTVAJCTB4MDMKKyNkZWZpbmUgQUNJX0dFVF9QUkVBTVAJCTB4MjEKKyNkZWZpbmUgQUNJX1dSSVRFX1RVTkUJCTB4YTcKKyNkZWZpbmUgQUNJX1JFQURfVFVORVJTVEVSRU8JMHhhOAorI2RlZmluZSBBQ0lfUkVBRF9UVU5FUlNUQVRJT04JMHhhOQorI2RlZmluZSBBQ0lfUkVBRF9WRVJTSU9OCTB4ZjEKKyNkZWZpbmUgQUNJX1JFQURfSURDT0RFCQkweGYyCisjZGVmaW5lIEFDSV9JTklUCQkweGZmCisjZGVmaW5lIEFDSV9TVEFUVVMJCTB4ZjAKKyNkZWZpbmUgQUNJX1NfR0VORVJBTAkJMHgwMAorI2RlZmluZSBBQ0lfRVJST1JfT1AJCTB4ZGYKKworLyogQUNJIE1peGVyICovCisKKy8qIFRoZXNlIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgcmlnaHQgY2hhbm5lbCBHRVQgcmVnaXN0ZXJzLgorICAgQWRkIGFuIG9mZnNldCBvZiAweDAxIGZvciB0aGUgbGVmdCBjaGFubmVsIHJlZ2lzdGVyLgorICAgKGxlZnQ9cmlnaHQrMHgwMSkgKi8KKworI2RlZmluZSBBQ0lfR0VUX01BU1RFUgkJMHgwMworI2RlZmluZSBBQ0lfR0VUX01JQwkJMHgwNQorI2RlZmluZSBBQ0lfR0VUX0xJTkUJCTB4MDcKKyNkZWZpbmUgQUNJX0dFVF9DRAkJMHgwOQorI2RlZmluZSBBQ0lfR0VUX1NZTlRICQkweDBiCisjZGVmaW5lIEFDSV9HRVRfUENNCQkweDBkCisjZGVmaW5lIEFDSV9HRVRfTElORTEJCTB4MTAJLyogUmFkaW8gb24gUENNMjAgKi8KKyNkZWZpbmUgQUNJX0dFVF9MSU5FMgkJMHgxMgorCisjZGVmaW5lIEFDSV9HRVRfRVExCQkweDIyCS8qIGZyb20gQmFzcyAuLi4gKi8KKyNkZWZpbmUgQUNJX0dFVF9FUTIJCTB4MjQKKyNkZWZpbmUgQUNJX0dFVF9FUTMJCTB4MjYKKyNkZWZpbmUgQUNJX0dFVF9FUTQJCTB4MjgKKyNkZWZpbmUgQUNJX0dFVF9FUTUJCTB4MmEKKyNkZWZpbmUgQUNJX0dFVF9FUTYJCTB4MmMKKyNkZWZpbmUgQUNJX0dFVF9FUTcJCTB4MmUJLyogLi4uIHRvIFRyZWJsZSAqLworCisvKiBBbmQgdGhlc2UgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSByaWdodCBjaGFubmVsIFNFVCByZWdpc3RlcnMuCisgICBGb3IgbGVmdCBjaGFubmVsIGFjY2VzcyB5b3UgaGF2ZSB0byBhZGQgYW4gb2Zmc2V0IG9mIDB4MDguCisgICBNQVNURVIgaXMgYW4gZXhjZXB0aW9uLCB3aGljaCBuZWVkcyBhbiBvZmZzZXQgb2YgMHgwMSAqLworCisjZGVmaW5lIEFDSV9TRVRfTUFTVEVSCQkweDAwCisjZGVmaW5lIEFDSV9TRVRfTUlDCQkweDMwCisjZGVmaW5lIEFDSV9TRVRfTElORQkJMHgzMQorI2RlZmluZSBBQ0lfU0VUX0NECQkweDM0CisjZGVmaW5lIEFDSV9TRVRfU1lOVEgJCTB4MzMKKyNkZWZpbmUgQUNJX1NFVF9QQ00JCTB4MzIKKyNkZWZpbmUgQUNJX1NFVF9MSU5FMQkJMHgzNQkvKiBSYWRpbyBvbiBQQ00yMCAqLworI2RlZmluZSBBQ0lfU0VUX0xJTkUyCQkweDM2CisKKyNkZWZpbmUgQUNJX1NFVF9FUTEJCTB4NDAJLyogZnJvbSBCYXNzIC4uLiAqLworI2RlZmluZSBBQ0lfU0VUX0VRMgkJMHg0MQorI2RlZmluZSBBQ0lfU0VUX0VRMwkJMHg0MgorI2RlZmluZSBBQ0lfU0VUX0VRNAkJMHg0MworI2RlZmluZSBBQ0lfU0VUX0VRNQkJMHg0NAorI2RlZmluZSBBQ0lfU0VUX0VRNgkJMHg0NQorI2RlZmluZSBBQ0lfU0VUX0VRNwkJMHg0NgkvKiAuLi4gdG8gVHJlYmxlICovCisKKyNlbmRpZiAgLyogX01JUk9fSF8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCmluZGV4IDY1YjI4Y2IuLjhlZTBkNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwpAQCAtMjA5OSw4ICsyMDk5LDExIEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKIAkJaWYgKCFJU19FUlIoZGV2aWNlKSkgewotCQkJc25kX29wdGk5eHhfcGxhdGZvcm1fZGV2aWNlID0gZGV2aWNlOwotCQkJcmV0dXJuIDA7CisJCQlpZiAocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJCXNuZF9vcHRpOXh4X3BsYXRmb3JtX2RldmljZSA9IGRldmljZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CiAJCX0KIAkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9vcHRpOXh4X2RyaXZlcik7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiMTYuYyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKaW5kZXggMjFlYTY1OS4uNjMzM2Y5MCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiMTYuYworKysgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCkBAIC03MjAsOSArNzIwLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0IxNl9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTc0NSwxNCArNzQ3LDEwIEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkluIGNhc2UsIGlmIHlvdSBoYXZlIEFXRSBjYXJkLCB0cnkgc25kLXNiYXdlIG1vZHVsZVxuIik7CiAjZW5kaWYKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX3NiMTZfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9zYjE2X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9zYjE2X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjguYyBiL3NvdW5kL2lzYS9zYi9zYjguYwppbmRleCAzZWZhMjNkLi4xNDE0MDBjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4LmMKKysrIGIvc291bmQvaXNhL3NiL3NiOC5jCkBAIC0yNjQsOSArMjY0LDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0I4X0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlkZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtMjc1LDE0ICsyNzcsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiU291bmQgQmxhc3RlciBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX3NiOF91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX3NiOF91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfc2I4X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCmluZGV4IGE2MGU2NmEuLjA5YzhlOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMKKysrIGIvc291bmQvaXNhL3NnYWxheHkuYwpAQCAtMzY2LDkgKzM2NiwxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1NHQUxBWFlfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC0zNzcsMTQgKzM3OSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJTb3VuZCBHYWxheHkgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9zZ2FsYXh5X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfc2dhbGF4eV91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfc2dhbGF4eV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc3NjYXBlLmMgYi9zb3VuZC9pc2Evc3NjYXBlLmMKaW5kZXggNDhlNTU1Mi4uZDJhODU2ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NzY2FwZS5jCisrKyBiL3NvdW5kL2lzYS9zc2NhcGUuYwpAQCAtMTQyNyw4ICsxNDI3LDggQEAKIAkJICAgIGRtYVtpXSA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJzc2NhcGU6IGluc3VmZmljaWVudCBwYXJhbWV0ZXJzLCBuZWVkIElPLCBJUlEsIE1QVS1JUlEgYW5kIERNQVxuIik7Ci0JCQlyZXQgPSAtRU5YSU87Ci0JCQlnb3RvIGVycm91dDsKKwkJCXNzY2FwZV91bnJlZ2lzdGVyX2FsbCgpOworCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCiAJCS8qCkBAIC0xNDM2LDE3ICsxNDM2LDE1IEBACiAJCSAqLwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNTQ0FQRV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCXJldCA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc3NjYXBlX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc3NjYXBlX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCmluZGV4IDJmMTNjZDUuLjdhZTg2ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwpAQCAtNzIyLDkgKzcyMiwxMSBAQAogI2VuZGlmCiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoV0FWRUZST05UX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtNzQyLDE0ICs3NDQsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrIChLRVJOX0VSUiAiTm8gV2F2ZUZyb250IGNhcmRzIGZvdW5kIG9yIGRldmljZXMgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF93YXZlZnJvbnRfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF93YXZlZnJvbnRfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX3dhdmVmcm9udF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvS2NvbmZpZyBiL3NvdW5kL29zcy9LY29uZmlnCmluZGV4IDg4ZTUyZGMuLjU1OGM2ZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9LY29uZmlnCisrKyBiL3NvdW5kL29zcy9LY29uZmlnCkBAIC01LDIzICs1LDkgQEAKICMKICMgUHJvbXB0IHVzZXIgZm9yIHByaW1hcnkgZHJpdmVycy4KIAotY29uZmlnIE9CU09MRVRFX09TU19EUklWRVIKLQlib29sICJPYnNvbGV0ZSBPU1MgZHJpdmVycyIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBvYnNvbGV0ZSBPU1MgZHJpdmVycyB0aGF0Ci0JICBhcmUgc2NoZWR1bGVkIGZvciByZW1vdmFsIGluIHRoZSBuZWFyIGZ1dHVyZSBzaW5jZSB0aGVyZQotCSAgYXJlIEFMU0EgZHJpdmVycyBmb3IgdGhlIHNhbWUgaGFyZHdhcmUuCi0KLQkgIFBsZWFzZSBjb250YWN0IEFkcmlhbiBCdW5rIDxidW5rQHN0dXN0YS5kZT4gaWYgeW91IGhhZCB0bwotCSAgc2F5IFkgaGVyZSBiZWNhdXNlIHlvdXIgc291bmRjYXJkIGlzIG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQKLQkgIGJ5IEFMU0EuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBTT1VORF9CVDg3OAogCXRyaXN0YXRlICJCVDg3OCBhdWRpbyBkbWEiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCiAJLS0taGVscC0tLQogCSAgQXVkaW8gRE1BIHN1cHBvcnQgZm9yIGJ0ODc4IGJhc2VkIGdyYWJiZXIgYm9hcmRzLiAgQXMgeW91IG1pZ2h0IGhhdmUKIAkgIGFscmVhZHkgbm90aWNlZCwgYnQ4NzggaXMgbGlzdGVkIHdpdGggdHdvIGZ1bmN0aW9ucyBpbiAvcHJvYy9wY2kuCkBAIC0zNSw0OCArMjEsOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgYnRhdWRpby4KIAotY29uZmlnIFNPVU5EX0NNUENJCi0JdHJpc3RhdGUgIkMtTWVkaWEgUENJIChDTUk4MzM4Lzg3MzgpIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXNpbmcgdGhlIENNSTgzMzgKLQkgIG9yIHRoZSBDTUk4NzM4IGNoaXBzZXQuICBEYXRhIG9uIHRoZXNlIGNoaXBzIGFyZSBhdmFpbGFibGUgYXQKLQkgIDxodHRwOi8vd3d3LmNtZWRpYS5jb20udHcvPi4KLQotCSAgQSB1c2Vyc3BhY2UgdXRpbGl0eSB0byBjb250cm9sIHNvbWUgaW50ZXJuYWwgcmVnaXN0ZXJzIG9mIHRoZXNlCi0JICBjaGlwcyBpcyBhdmFpbGFibGUgYXQKLQkgIDxodHRwOi8vbWVtYmVyLm5pZnR5Lm5lLmpwL0JyZWV6ZS9zb2Z0d2FyZXMvdW5peC9jbWljdGwtZS5odG1sPi4KLQotY29uZmlnIFNPVU5EX0NNUENJX0ZNCi0JYm9vbCAiRW5hYmxlIGxlZ2FjeSBGTSIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBsZWdhY3kgRk0gKGZyZXF1ZW5jeS1tb2R1bGF0aW9uKSBzeW50aGVzaXplcgotCSAgc3VwcG9ydCBvbiBhIGNhcmQgdXNpbmcgdGhlIENNSTgzMzggb3IgQ01JODM3OCBjaGlwc2V0LiBFdmVuIGl0IGlzCi0JICBlbmFibGVkLCB5b3UgbmVlZCB0byBzZXQgZm1pbyBhcyBwcm9wZXIgdmFsdWUgdG8gZW5hYmxlIGl0LgotCSAgU2F5IE4gaGVyZSBpZiB5b3UgZG9uJ3QgbmVlZCB0aGlzLgotCi1jb25maWcgU09VTkRfQ01QQ0lfTUlESQotCWJvb2wgIkVuYWJsZSBsZWdhY3kgTVBVLTQwMSIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBsZWdhY3kgTVBVNDAxIE1JREkgc3ludGhlc2l6ZXIgc3VwcG9ydCBvbiBhCi0JICBjYXJkIHVzaW5nIHRoZSBDTUk4MzM4IG9yIENNSTgzNzggY2hpcHNldC4gRXZlbiBpdCBpcyBlbmFibGVkLAotCSAgeW91IG5lZWQgdG8gc2V0IG1wdWlvIGFzIHByb3BlciB2YWx1ZSB0byBlbmFibGUgaXQuCi0JICBTYXkgTiBoZXJlIGlmIHlvdSBkb24ndCBuZWVkIHRoaXMuCi0KLWNvbmZpZyBTT1VORF9DTVBDSV9KT1lTVElDSwotCWJvb2wgIkVuYWJsZSBqb3lzdGljayIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NiAmJiAoR0FNRVBPUlQ9eSB8fCBTT1VORF9DTVBDST1HQU1FUE9SVCkKLQloZWxwCi0JICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGVuYWJsZSB0aGUgam95c3RpY2sgcG9ydCBvbiBhIHNvdW5kIGNhcmQgdXNpbmcKLQkgIHRoZSBDTUk4MzM4IG9yIHRoZSBDTUk4NzM4IGNoaXBzZXQuICBZb3UgbmVlZCB0byBjb25maWcgdGhlCi0JICBnYW1lcG9ydCBzdXBwb3J0IGFuZCBzZXQgam95c3RpY2sgcGFyYW1ldGVyIGFzIDEgdG8gdXNlIGl0LgotCSAgU2F5IE4gaGVyZSBpZiB5b3UgZG9uJ3QgbmVlZCB0aGlzLgotCiBjb25maWcgU09VTkRfRU1VMTBLMQogCXRyaXN0YXRlICJDcmVhdGl2ZSBTQkxpdmUhIChFTVUxMEsxKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXNpbmcgdGhlIEVNVTEwSzEgY2hpcHNldCwKIAkgIHN1Y2ggYXMgdGhlIENyZWF0aXZlIFNCTGl2ZSEsIFNCIFBDSTUxMiBvciBFbXUtQVBTLgpAQCAtMTA4LDEzICs1NSw2IEBACiAJICBzZXJpZXMpIHdoZW4gd2lyZWQgYXMgbmF0aXZlIHNvdW5kIGRyaXZlcnMgd2l0aCBBQzk3IGNvZGVjcy4gIElmCiAJICB0aGlzIGRyaXZlciBkb2VzIG5vdCB3b3JrIHRyeSB0aGUgQ1M0MjMyIGRyaXZlci4KIAotY29uZmlnIFNPVU5EX0NTNDI4MQotCXRyaXN0YXRlICJDcnlzdGFsIFNvdW5kIENTNDI4MSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgUGljdHVyZSBhbmQgZmVhdHVyZSBsaXN0IGF0Ci0JICA8aHR0cDovL3d3dy5wY2Jyb2tlci5jb20vY3J5c3RhbDQyODEuaHRtbD4uCi0KIGNvbmZpZyBTT1VORF9CQ01fQ1M0Mjk3QQogCXRyaXN0YXRlICJDcnlzdGFsIFNvdW5kIENTNDI5N2EgKGZvciBTd2FybSkiCiAJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBTSUJZVEVfU1dBUk0KQEAgLTEyNSwyMiArNjUsOSBAQAogCSAgbm90ZSB0aGF0IENPTkZJR19LR0RCIHNob3VsZCBub3QgYmUgZW5hYmxlZCBhdCB0aGUgc2FtZQogCSAgdGltZSwgc2luY2UgaXQgYWxzbyBhdHRlbXB0cyB0byB1c2UgdGhpcyBVQVJUIHBvcnQuCiAKLWNvbmZpZyBTT1VORF9FUzEzNzAKLQl0cmlzdGF0ZSAiRW5zb25pcSBBdWRpb1BDSSAoRVMxMzcwKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFBDSSBzb3VuZCBjYXJkIHV0aWxpemluZyB0aGUgRW5zb25pcQotCSAgRVMxMzcwIGNoaXBzZXQsIHN1Y2ggYXMgRW5zb25pcSdzIEF1ZGlvUENJIChub24tOTcpLiBUbyBmaW5kCi0JICBvdXQgaWYgeW91ciBzb3VuZCBjYXJkIHVzZXMgYW4gRVMxMzcwIHdpdGhvdXQgcmVtb3ZpbmcgeW91cgotCSAgY29tcHV0ZXIncyBjb3ZlciwgdXNlIGxzcGNpIC1uIGFuZCBsb29rIGZvciB0aGUgUENJIElECi0JICAxMjc0OjUwMDAuIFNpbmNlIEVuc29uaXEgd2FzIGJvdWdodCBieSBDcmVhdGl2ZSBMYWJzLAotCSAgU291bmQgQmxhc3RlciA2NC9QQ0kgbW9kZWxzIGFyZSBlaXRoZXIgRVMxMzcwIG9yIEVTMTM3MSBiYXNlZC4KLQkgIFRoaXMgZHJpdmVyIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MD4uCi0KIGNvbmZpZyBTT1VORF9FUzEzNzEKIAl0cmlzdGF0ZSAiQ3JlYXRpdmUgRW5zb25pcSBBdWRpb1BDSSA5NyAoRVMxMzcxKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBFbnNvbmlxCiAJICBFUzEzNzEgY2hpcHNldCwgc3VjaCBhcyBFbnNvbmlxJ3MgQXVkaW9QQ0k5Ny4gVG8gZmluZCBvdXQgaWYKQEAgLTE1MSwzMyArNzgsNiBAQAogCSAgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MT4uCiAKLWNvbmZpZyBTT1VORF9FU1NTT0xPMQotCXRyaXN0YXRlICJFU1MgVGVjaG5vbG9neSBTb2xvMSIgCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBQQ0kgc291bmQgY2FyZCB1dGlsaXppbmcgdGhlIEVTUyBUZWNobm9sb2d5Ci0JICBTb2xvMSBjaGlwLiBUbyBmaW5kIG91dCBpZiB5b3VyIHNvdW5kIGNhcmQgdXNlcyBhCi0JICBTb2xvMSBjaGlwIHdpdGhvdXQgcmVtb3ZpbmcgeW91ciBjb21wdXRlcidzIGNvdmVyLCB1c2UKLQkgIGxzcGNpIC1uIGFuZCBsb29rIGZvciB0aGUgUENJIElEIDEyNUQ6MTk2OS4gVGhpcyBkcml2ZXIKLQkgIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbG8xPi4KLQotY29uZmlnIFNPVU5EX01BRVNUUk8KLQl0cmlzdGF0ZSAiRVNTIE1hZXN0cm8sIE1hZXN0cm8yLCBNYWVzdHJvMkUgZHJpdmVyIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgc291bmQgc3lzdGVtIGRyaXZlbiBieSBFU1MncyBNYWVzdHJvIGxpbmUKLQkgIG9mIFBDSSBzb3VuZCBjaGlwcy4gIFRoZXNlIGluY2x1ZGUgdGhlIE1hZXN0cm8gMSwgTWFlc3RybyAyLCBhbmQKLQkgIE1hZXN0cm8gMkUuICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTWFlc3Rybz4gZm9yIG1vcmUKLQkgIGRldGFpbHMuCi0KLWNvbmZpZyBTT1VORF9NQUVTVFJPMwotCXRyaXN0YXRlICJFU1MgTWFlc3RybzMvQWxsZWdybyBkcml2ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgc291bmQgc3lzdGVtIGRyaXZlbiBieSBFU1MncyBNYWVzdHJvIDMKLQkgIFBDSSBzb3VuZCBjaGlwLgotCiBjb25maWcgU09VTkRfSUNICiAJdHJpc3RhdGUgIkludGVsIElDSCAoaTh4eCkgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQpAQCAtMTg1LDI0ICs4NSw2IEBACiAJICBTdXBwb3J0IGZvciBpbnRlZ3JhbCBhdWRpbyBpbiBJbnRlbCdzIEkvTyBDb250cm9sbGVyIEh1YiAoSUNIKQogCSAgY2hpcHNldCwgYXMgdXNlZCBvbiB0aGUgODEwLzgyMC84NDAgbW90aGVyYm9hcmRzLgogCi1jb25maWcgU09VTkRfSEFSTU9OWQotCXRyaXN0YXRlICJQQSBIYXJtb255IGF1ZGlvIGRyaXZlciIKLQlkZXBlbmRzIG9uIEdTQ19MQVNJICYmIFNPVU5EX1BSSU1FICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEhhcm1vbnkgc291bmRjaGlwCi0JICBvbiBIUCA3MTIsIDcxNS9uZXcgYW5kIG1hbnkgb3RoZXIgR1NDIGJhc2VkIG1hY2hpbmVzLgotCi1jb25maWcgU09VTkRfU09OSUNWSUJFUwotCXRyaXN0YXRlICJTMyBTb25pY1ZpYmVzIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBTMwotCSAgU29uaWNWaWJlcyBjaGlwc2V0LiBUbyBmaW5kIG91dCBpZiB5b3VyIHNvdW5kIGNhcmQgdXNlcyBhCi0JICBTb25pY1ZpYmVzIGNoaXAgd2l0aG91dCByZW1vdmluZyB5b3VyIGNvbXB1dGVyJ3MgY292ZXIsIHVzZQotCSAgbHNwY2kgLW4gYW5kIGxvb2sgZm9yIHRoZSBQQ0kgSUQgNTMzMzpDQTAwLiBUaGlzIGRyaXZlcgotCSAgZGlmZmVycyBzbGlnaHRseSBmcm9tIE9TUy9GcmVlLCBzbyBQTEVBU0UgUkVBRAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29uaWN2aWJlcz4uCi0KIGNvbmZpZyBTT1VORF9WV1NORAogCXRyaXN0YXRlICJTR0kgVmlzdWFsIFdvcmtzdGF0aW9uIFNvdW5kIgogCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgWDg2X1ZJU1dTCkBAIC0yMzEsMTAgKzExMyw2IEBACiAJICBpbnRlZ3JhdGVkLCBtdWx0aS1mdW5jdGlvbiBjb250cm9sbGVyIGNoaXAgZm9yIE1JUFMgQ1BVcy4gIFdvcmtzCiAJICB3aXRoIHRoZSBBQzk3IGNvZGVjLgogCi1jb25maWcgU09VTkRfQVUxMDAwCi0JdHJpc3RhdGUgIkF1MTAwMCBTb3VuZCIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIChTT0NfQVUxMDAwIHx8IFNPQ19BVTExMDAgfHwgU09DX0FVMTUwMCkgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCiBjb25maWcgU09VTkRfQVUxNTUwX0FDOTcKIAl0cmlzdGF0ZSAiQXUxNTUwIEFDOTcgU291bmQiCiAJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBTT0NfQVUxNTUwCkBAIC01MDcsNyArMzg1LDcgQEAKIAogY29uZmlnIFNPVU5EX1ZJQTgyQ1hYWAogCXRyaXN0YXRlICJWSUEgODJDNjg2IEF1ZGlvIENvZGVjIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgYXVkaW8gY29kZWMgZm91bmQgb24gVklBCiAJICA4MkN4eHgtYmFzZWQgY2hpcHMuIFR5cGljYWxseSB0aGVzZSBhcmUgYnVpbHQgaW50byBhIG1vdGhlcmJvYXJkLgpAQCAtNTc2LDE4ICs0NTQsNiBAQAogCSAgU2F5IE0gaGVyZSBpZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQgYmFzZWQgb24gdGhlIEFuYWxvZyBEZXZpY2VzCiAJICBBRDE4ODkgY2hpcC4KIAotY29uZmlnIFNPVU5EX1NHQUxBWFkKLQl0cmlzdGF0ZSAiQXp0ZWNoIFNvdW5kIEdhbGF4eSAobm9uLVBuUCkgY2FyZHMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFRoaXMgbW9kdWxlIGluaXRpYWxpemVzIHRoZSBvbGRlciBub24gUGx1ZyBhbmQgUGxheSBzb3VuZCBnYWxheHkKLQkgIGNhcmRzIGZyb20gQXp0ZWNoLiBJdCBzdXBwb3J0cyB0aGUgV2F2ZXJpZGVyIFBybyAzMiAtIDNEIGFuZCB0aGUKLQkgIEdhbGF4eSBXYXNoaW5ndG9uIDE2LgotCi0JICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCi0JICAic2dhbGF4eT08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2diYXNlPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kCi0JICBsaW5lLgotCiBjb25maWcgU09VTkRfQURMSUIKIAl0cmlzdGF0ZSAiQWRsaWIgQ2FyZHMiCiAJZGVwZW5kcyBvbiBTT1VORF9PU1MKQEAgLTYxNCw3ICs0ODAsNyBAQAogCiBjb25maWcgU09VTkRfQ1M0MjMyCiAJdHJpc3RhdGUgIkNyeXN0YWwgQ1M0MjMyIGJhc2VkIChQblApIGNhcmRzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKKwlkZXBlbmRzIG9uIFNPVU5EX09TUwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBjYXJkIGJhc2VkIG9uIHRoZSBDcnlzdGFsIENTNDIzMiBjaGlwIHNldCwKIAkgIHdoaWNoIHVzZXMgaXRzIG93biBQbHVnIGFuZCBQbGF5IHByb3RvY29sLgpAQCAtNjI2LDQyICs0OTIsNiBAQAogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMj4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KIAkgIGNvbmZpZ3VyaW5nIHRoaXMgY2FyZC4KIAotY29uZmlnIFNPVU5EX1NTQ0FQRQotCXRyaXN0YXRlICJFbnNvbmlxIFNvdW5kU2NhcGUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgQW5zd2VyIFkgaWYgeW91IGhhdmUgYSBzb3VuZCBjYXJkIGJhc2VkIG9uIHRoZSBFbnNvbmlxIFNvdW5kU2NhcGUKLQkgIGNoaXBzZXQuIFN1Y2ggY2FyZHMgYXJlIGJlaW5nIG1hbnVmYWN0dXJlZCBhdCBsZWFzdCBieSBFbnNvbmlxLCBTcGVhCi0JICBhbmQgUmV2ZWFsIChSZXZlYWwgbWFrZXMgYWxzbyBvdGhlciBjYXJkcykuCi0KLQkgIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsLCB5b3UgaGF2ZSB0byBhZGQKLQkgICJzc2NhcGU9PGlvPiw8aXJxPiw8ZG1hPiw8bXB1aW8+LDxtcHVpcnE+IiB0byB0aGUga2VybmVsIGNvbW1hbmQKLQkgIGxpbmUuCi0KLWNvbmZpZyBTT1VORF9HVVMKLQl0cmlzdGF0ZSAiR3JhdmlzIFVsdHJhc291bmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgaGVyZSBmb3IgYW55IHR5cGUgb2YgR3JhdmlzIFVsdHJhc291bmQgY2FyZCwgaW5jbHVkaW5nIHRoZSBHVVMKLQkgIG9yIEdVUyBNQVguICBTZWUgYWxzbyA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy91bHRyYXNvdW5kPiBmb3IgbW9yZQotCSAgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhpcyBjYXJkIHdpdGggbW9kdWxlcy4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgImd1cz08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0KLWNvbmZpZyBTT1VORF9HVVMxNgotCWJvb2wgIjE2IGJpdCBzYW1wbGluZyBvcHRpb24gb2YgR1VTIChfTk9UXyBHVVMgTUFYKSIKLQlkZXBlbmRzIG9uIFNPVU5EX0dVUwotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIEdyYXZpcyBVbHN0cmFzb3VuZCAoR1VTKSBjYXJkcyAob3RoZXIgdGhhbiB0aGUgR1VTKSwKLQkgIHNhbXBsaW5nIGF0IDE2LWJpdCB3aWR0aC4KLQotY29uZmlnIFNPVU5EX0dVU01BWAotCWJvb2wgIkdVUyBNQVggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX0dVUwotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIEdyYXZpcyBVbHN0cmFzb3VuZCBNQVguCi0KIGNvbmZpZyBTT1VORF9WTUlESQogCXRyaXN0YXRlICJMb29wYmFjayBNSURJIGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09VTkRfT1NTCkBAIC03NDIsNyArNTcyLDcgQEAKIAogY29uZmlnIFNPVU5EX05NMjU2CiAJdHJpc3RhdGUgIk5NMjU2QVYvTk0yNTZaWCBhdWRpbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKKwlkZXBlbmRzIG9uIFNPVU5EX09TUwogCWhlbHAKIAkgIFNheSBNIGhlcmUgdG8gaW5jbHVkZSBhdWRpbyBzdXBwb3J0IGZvciB0aGUgTmVvTWFnaWMgMjU2QVYvMjU2WlgKIAkgIGNoaXBzZXRzLiBUaGVzZSBhcmUgdGhlIGF1ZGlvIGNoaXBzZXRzIGZvdW5kIGluIHRoZSBTb255CkBAIC03NTIsMzUgKzU4Miw2IEBACiAKIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9OTTI1Nj4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCiAKLWNvbmZpZyBTT1VORF9NQUQxNgotCXRyaXN0YXRlICJPUFRpIE1BRDE2IGFuZC9vciBNb3phcnQgYmFzZWQgY2FyZHMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCS0tLWhlbHAtLS0KLQkgIEFuc3dlciBZIGlmIHlvdXIgY2FyZCBoYXMgYSBNb3phcnQgKE9BSyBPVEktNjAxKSBvciBNQUQxNiAoT1BUaQotCSAgODJDOTI4IG9yIDgyQzkyOSBvciA4MkM5MzEpIGF1ZGlvIGludGVyZmFjZSBjaGlwLiBUaGVzZSBjaGlwcyBhcmUKLQkgIHF1aXRlIGNvbW1vbiBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgbWFueSBuby1uYW1lIGNhcmRzIGhhdmUgb25lIG9mCi0JICB0aGVtLiBJbiBhZGRpdGlvbiB0aGUgTUFEMTYgY2hpcCBpcyB1c2VkIGluIHNvbWUgY2FyZHMgbWFkZSBieSBrbm93bgotCSAgbWFudWZhY3R1cmVycyBzdWNoIGFzIFR1cnRsZSBCZWFjaCAoVHJvcGV6KSwgUmV2ZWFsIChzb21lIG1vZGVscykKLQkgIGFuZCBEaWFtb25kIChsYXRlc3Qgb25lcykuIE5vdGUgaG93ZXZlciB0aGF0IHRoZSBUcm9wZXogc291bmQgY2FyZHMKLQkgIGhhdmUgdGhlaXIgb3duIGRyaXZlcjsgaWYgeW91IGhhdmUgb25lIG9mIHRob3NlLCBzYXkgTiBoZXJlIGFuZCBZIG9yCi0JICBNIHRvICJGdWxsIHN1cHBvcnQgZm9yIFR1cnRsZSBCZWFjaCBXYXZlRnJvbnQiLCBiZWxvdy4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgIm1hZDE2PTxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxtcHVpbz4sPG1wdWlycT4iIHRvIHRoZQotCSAga2VybmVsIGNvbW1hbmQgbGluZS4KLQotCSAgU2VlIGFsc28gPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT3B0aT4gYW5kCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NQUQxNj4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZwotCSAgdGhlc2UgY2FyZHMgdXAgYXMgbW9kdWxlcy4KLQotY29uZmlnIE1BRDE2X09MRENBUkQKLQlib29sICJTdXBwb3J0IE1JREkgaW4gb2xkZXIgTUFEMTYgYmFzZWQgY2FyZHMgKHJlcXVpcmVzIFNCKSIKLQlkZXBlbmRzIG9uIFNPVU5EX01BRDE2Ci0JaGVscAotCSAgQW5zd2VyIFkgKG9yIE0pIGlmIHlvdSBoYXZlIGFuIG9sZGVyIGNhcmQgYmFzZWQgb24gdGhlIEM5Mjggb3IKLQkgIE1vemFydCBjaGlwc2V0IGFuZCB5b3Ugd2FudCB0byBoYXZlIE1JREkgc3VwcG9ydC4gSWYgeW91IGVuYWJsZSB0aGlzCi0JICBvcHRpb24geW91IGFsc28gbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgU291bmQgQmxhc3Rlci4KLQogY29uZmlnIFNPVU5EX1BBUwogCXRyaXN0YXRlICJQcm9BdWRpb1NwZWN0cnVtIDE2IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT1VORF9PU1MKQEAgLTg3Myw1MyArNjc0LDkgQEAKIAkgIFlvdSBjYW4gc2F5IE0gaGVyZSB0byBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlOyB0aGUgbW9kdWxlIGlzCiAJICBjYWxsZWQgc2IuCiAKLWNvbmZpZyBTT1VORF9BV0UzMl9TWU5USAotCXRyaXN0YXRlICJBV0UzMiBzeW50aCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFNvdW5kIEJsYXN0ZXIgU0IzMiwgQVdFMzItUG5QLCBTQiBBV0U2NCBvcgotCSAgc2ltaWxhciBzb3VuZCBjYXJkLiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLmF3ZT4sCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BV0UzMj4gYW5kIHRoZSBTb3VuZGJsYXN0ZXItQVdFCi0JICBtaW5pLUhPV1RPLCBhdmFpbGFibGUgZnJvbSA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+Ci0JICBmb3IgbW9yZSBpbmZvLgotCi1jb25maWcgU09VTkRfV0FWRUZST05UCi0JdHJpc3RhdGUgIkZ1bGwgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIFdhdmVGcm9udCAoVHJvcGV6IFBsdXMsIFRyb3BleiwgTWF1aSkgc3ludGgvc291bmRjYXJkcyIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBtICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBBbnN3ZXIgWSBvciBNIGlmIHlvdSBoYXZlIGEgVHJvcGV6IFBsdXMsIFRyb3BleiBvciBNYXVpIHNvdW5kIGNhcmQKLQkgIGFuZCByZWFkIHRoZSBmaWxlcyA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9XYXZlZnJvbnQ+IGFuZAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvVHJvcGV6Kz4uCi0KLWNvbmZpZyBTT1VORF9NQVVJCi0JdHJpc3RhdGUgIkxpbWl0ZWQgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIFdhdmUgRnJvbnQgKE1hdWksIFRyb3Bleikgc3ludGhlc2l6ZXJzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgVHVydGxlIEJlYWNoIFdhdmUgRnJvbnQsIE1hdWksIG9yIFRyb3BlegotCSAgc291bmQgY2FyZC4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgIm1hdWk9PGlvPiw8aXJxPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0KLWNvbmZpZyBNQVVJX0hBVkVfQk9PVAotCWJvb2wgIkhhdmUgT1NXRi5NT1QgZmlybXdhcmUgZmlsZSIKLQlkZXBlbmRzIG9uIFNPVU5EX01BVUk9eSAmJiAhU1RBTkRBTE9ORQotCWhlbHAKLQkgIFR1cnRsZSBCZWFjaCBNYXVpIGFuZCBUcm9wZXogc291bmQgY2FyZHMgaGF2ZSBhIG1pY3JvY29udHJvbGxlcgotCSAgd2hpY2ggbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLiBPU1dGLk1PVCBpcyBhIGZpbGUKLQkgIGRpc3RyaWJ1dGVkIHdpdGggdGhlIGNhcmQncyBET1MvV2luZG93cyBkcml2ZXJzLiBBbnN3ZXIgWSBpZiB5b3UKLQkgIGhhdmUgdGhpcyBmaWxlLgotCi1jb25maWcgTUFVSV9CT09UX0ZJTEUKLQlzdHJpbmcgIkZ1bGwgcGF0aG5hbWUgb2YgT1NXRi5NT1QgZmlybXdhcmUgZmlsZSIKLQlkZXBlbmRzIG9uIE1BVUlfSEFWRV9CT09UCi0JZGVmYXVsdCAiL2V0Yy9zb3VuZC9vc3dmLm1vdCIKLQloZWxwCi0JICBFbnRlciB0aGUgZnVsbCBwYXRobmFtZSBvZiB5b3VyIE9TV0YuTU9UIGZpbGUsIHN0YXJ0aW5nIGZyb20gLy4KLQogY29uZmlnIFNPVU5EX1lNMzgxMgogCXRyaXN0YXRlICJZYW1haGEgRk0gc3ludGhlc2l6ZXIgKFlNMzgxMi9PUEwtMykgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCisJZGVwZW5kcyBvbiBTT1VORF9PU1MKIAktLS1oZWxwLS0tCiAJICBBbnN3ZXIgWSBpZiB5b3VyIGNhcmQgaGFzIGEgRk0gY2hpcCBtYWRlIGJ5IFlhbWFoYSAoT1BMMi9PUEwzL09QTDQpLgogCSAgQW5zd2VyaW5nIFkgaXMgdXN1YWxseSBhIHNhZmUgYW5kIHJlY29tbWVuZGVkIGNob2ljZSwgaG93ZXZlciBzb21lCkBAIC05MzMsMTggKzY5MCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKLWNvbmZpZyBTT1VORF9PUEwzU0ExCi0JdHJpc3RhdGUgIllhbWFoYSBPUEwzLVNBMSBhdWRpbyBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgWWFtYWhhIE9QTDMtU0ExIHNvdW5kIGNoaXAsIHdoaWNoIGlzCi0JICB1c3VhbGx5IGJ1aWx0IGludG8gbW90aGVyYm9hcmRzLiBSZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzLVNBPiBmb3IgZGV0YWlscy4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgIm9wbDNzYT08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8bXB1aW8+LDxtcHVpcnE+IiB0byB0aGUga2VybmVsCi0JICBjb21tYW5kIGxpbmUuCi0KIGNvbmZpZyBTT1VORF9PUEwzU0EyCiAJdHJpc3RhdGUgIllhbWFoYSBPUEwzLVNBMiBhbmQgU0EzIGJhc2VkIFBuUCBjYXJkcyIKIAlkZXBlbmRzIG9uIFNPVU5EX09TUwpAQCAtOTU5LDE5ICs3MDQsNiBAQAogCSAgIm9wbDNzYTI9PGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1zc2lvPiw8bXB1aW8+IiB0byB0aGUga2VybmVsCiAJICBjb21tYW5kIGxpbmUuCiAKLWNvbmZpZyBTT1VORF9ZTUZQQ0kKLQl0cmlzdGF0ZSAiWWFtYWhhIFlNRjd4eCBQQ0kgYXVkaW8gKG5hdGl2ZSBtb2RlKSIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFlhbWFoYSBjYXJkcyBpbmNsdWRpbmcgdGhlIFlNRjcxMSwgWU1GNzE1LCBZTUY3MTgsCi0JICBZTUY3MTksIFlNRjcyNCwgV2F2ZWZvcmNlIDE5MlhHLCBhbmQgV2F2ZWZvcmNlIDE5MiBEaWdpdGFsLgotCi1jb25maWcgU09VTkRfWU1GUENJX0xFR0FDWQotCWJvb2wgIllhbWFoYSBQQ0kgbGVnYWN5IHBvcnRzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9ZTUZQQ0kKLQloZWxwCi0JICBTdXBwb3J0IGZvciBZTUY3eHggUENJIGNhcmRzIGVtdWxhdGluZyBhbiBNUDQwMS4KLQogY29uZmlnIFNPVU5EX1VBUlQ2ODUwCiAJdHJpc3RhdGUgIjY4NTAgVUFSVCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09VTkRfT1NTCkBAIC0xMTAxLDMwICs4MzMsNiBAQAogCXRyaXN0YXRlICJYcHJlc3NBdWRpbyBTb3VuZCBCbGFzdGVyIGVtdWxhdGlvbiIKIAlkZXBlbmRzIG9uIFNPVU5EX1NCCiAKLWNvbmZpZyBTT1VORF9BTEk1NDU1Ci0JdHJpc3RhdGUgIkFMaTU0NTUgYXVkaW8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0KLWNvbmZpZyBTT1VORF9GT1JURQotCXRyaXN0YXRlICJGb3J0ZU1lZGlhIEZNODAxIGRyaXZlciIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCBkcml2ZXIgc3VwcG9ydCBmb3IgdGhlIEZvcnRlTWVkaWEgRk04MDEgUENJCi0JICBhdWRpbyBjb250cm9sbGVyIChBYml0IEFVMTAsIEdlbml1cyBTb3VuZCBNYWtlciwgSFAgV29ya3N0YXRpb24KLQkgIHp4MjAwMCwgYW5kIG90aGVycykuCi0KLWNvbmZpZyBTT1VORF9STUU5NlhYCi0JdHJpc3RhdGUgIlJNRSBIYW1tZXJmYWxsIChSTUU5NlhYKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgSGFtbWVyZmFsbCBvciBIYW1tZXJmYWxsIGxpZ2h0Ci0JICBtdWx0aWNoYW5uZWwgY2FyZCBmcm9tIFJNRS4gSWYgeW91IHdhbnQgdG8gYWNjZXNzIGFkdmFuY2VkCi0JICBmZWF0dXJlcyBvZiB0aGUgY2FyZCwgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ybWU5Nnh4Pi4KLQotY29uZmlnIFNPVU5EX0FEMTk4MAotCXRyaXN0YXRlICJBRDE5ODAgZnJvbnQvYmFjayBzd2l0Y2ggcGx1Z2luIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCiBjb25maWcgU09VTkRfU0hfREFDX0FVRElPCiAJdHJpc3RhdGUgIlN1cGVySCBEQUMgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIENQVV9TSDMKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4NDguYyBiL3NvdW5kL29zcy9hZDE4NDguYwppbmRleCA0OTc5NmJlLi5lMDRmYTQ5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODQ4LmMKKysrIGIvc291bmQvb3NzL2FkMTg0OC5jCkBAIC0yMDI2LDcgKzIwMjYsOCBAQAogCWlmIChpcnEgPiAwKQogCXsKIAkJZGV2Yy0+ZGV2X25vID0gbXlfZGV2OwotCQlpZiAocmVxdWVzdF9pcnEoZGV2Yy0+aXJxLCBhZGludHIsIDAsIGRldmMtPm5hbWUsICh2b2lkICopbXlfZGV2KSA8IDApCisJCWlmIChyZXF1ZXN0X2lycShkZXZjLT5pcnEsIGFkaW50ciwgMCwgZGV2Yy0+bmFtZSwKKwkJCQkodm9pZCAqKShsb25nKW15X2RldikgPCAwKQogCQl7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZDE4NDg6IFVuYWJsZSB0byBhbGxvY2F0ZSBJUlFcbiIpOwogCQkJLyogRG9uJ3QgZnJlZSBpdCBlaXRoZXIgdGhlbi4uICovCkBAIC0yMTc1LDcgKzIxNzYsNyBAQAogCQlpZiAoIXNoYXJlX2RtYSkKIAkJewogCQkJaWYgKGRldmMtPmlycSA+IDApIC8qIFRoZXJlIGlzIG5vIHBvaW50IGluIGZyZWVpbmcgaXJxLCBpZiBpdCB3YXNuJ3QgYWxsb2NhdGVkICovCi0JCQkJZnJlZV9pcnEoZGV2Yy0+aXJxLCAodm9pZCAqKWRldmMtPmRldl9ubyk7CisJCQkJZnJlZV9pcnEoZGV2Yy0+aXJxLCAodm9pZCAqKShsb25nKWRldmMtPmRldl9ubyk7CiAKIAkJCXNvdW5kX2ZyZWVfZG1hKGRtYV9wbGF5YmFjayk7CiAKQEAgLTIyMDQsNyArMjIwNSw3IEBACiAJdW5zaWduZWQgY2hhciBjOTMwX3N0YXQgPSAwOwogCWludCBjbnQgPSAwOwogCi0JZGV2ID0gKGludClkZXZfaWQ7CisJZGV2ID0gKGxvbmcpZGV2X2lkOwogCWRldmMgPSAoYWQxODQ4X2luZm8gKikgYXVkaW9fZGV2c1tkZXZdLT5kZXZjOwogCiBpbnRlcnJ1cHRfYWdhaW46CQkvKiBKdW1wIGJhY2sgaGVyZSBpZiBpbnQgc3RhdHVzIGRvZXNuJ3QgcmVzZXQgKi8KQEAgLTI5MDAsNyArMjkwMSw4IEBACiAJcmV0dXJuKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcG5wX2RldiAqYWQxODQ4X2luaXRfZ2VuZXJpYyhzdHJ1Y3QgcG5wX2NhcmQgKmJ1cywgc3RydWN0IGFkZHJlc3NfaW5mbyAqaHdfY29uZmlnLCBpbnQgc2xvdCkKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RldiBfX2luaXQgKmFkMTg0OF9pbml0X2dlbmVyaWMoc3RydWN0IHBucF9jYXJkICpidXMsCisJCQkJc3RydWN0IGFkZHJlc3NfaW5mbyAqaHdfY29uZmlnLCBpbnQgc2xvdCkKIHsKIAogCS8qIENvbmZpZ3VyZSBBdWRpbyBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4ODkuYyBiL3NvdW5kL29zcy9hZDE4ODkuYwppbmRleCA1NGRhYmY4Li5hNGNhNzU2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODg5LmMKKysrIGIvc291bmQvb3NzL2FkMTg4OS5jCkBAIC03NSw3ICs3NSw3IEBACiAKIAlEQkcoIlNldHRpbmcgV0FWIHJhdGUgdG8gJWRcbiIsIHJhdGUpOwogCWRldi0+c3RhdGVbQURfV0FWX1NUQVRFXS5kbWFidWYucmF0ZSA9IHJhdGU7Ci0JQUQxODg5X1dSSVRFVyhkZXYsIEFEX0RTV0FTLCByYXRlKTsKKwlBRDE4ODlfV1JJVEVXKGRldiwgQURfRFNfV0FTLCByYXRlKTsKIAogCS8qIEN5Y2xlIHRoZSBEQUMgdG8gZW5hYmxlIHRoZSBuZXcgcmF0ZSAqLwogCWFjOTdfY29kZWMtPmNvZGVjX3dyaXRlKGRldi0+YWM5N19jb2RlYywgQUM5N19QT1dFUl9DT05UUk9MLCAweDAyMDApOwpAQCAtODksMTQgKzg5LDE0IEBACiAKIAlEQkcoIlNldHRpbmcgV0FWIGZvcm1hdCB0byAweCV4XG4iLCBmbXQpOwogCi0JdG1wID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTV1NNQyk7CisJdG1wID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTX1dTTUMpOwogCWlmIChmbXQgJiBBRk1UX1MxNl9MRSkgewogCQkvL3RtcCB8PSAweDAxMDA7IC8qIHNldCBXQTE2ICovCiAJCXRtcCB8PSAweDAzMDA7IC8qIHNldCBXQTE2IHN0ZXJlbyAqLwogCX0gZWxzZSBpZiAoZm10ICYgQUZNVF9VOCkgewogCQl0bXAgJj0gfjB4MDEwMDsgLyogY2xlYXIgV0ExNiAqLwogCX0gCi0JQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMsIHRtcCk7CisJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DLCB0bXApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWQxODg5X3NldF9hZGNfZm10KGFkMTg4OV9kZXZfdCAqZGV2LCBpbnQgZm10KQpAQCAtMTA1LDEzICsxMDUsMTMgQEAKIAogCURCRygiU2V0dGluZyBBREMgZm9ybWF0IHRvIDB4JXhcbiIsIGZtdCk7CiAKLQl0bXAgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNSQU1DKTsKKwl0bXAgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNfUkFNQyk7CiAJaWYgKGZtdCAmIEFGTVRfUzE2X0xFKSB7CiAJCXRtcCB8PSAweDAxMDA7IC8qIHNldCBXQTE2ICovCiAJfSBlbHNlIGlmIChmbXQgJiBBRk1UX1U4KSB7CiAJCXRtcCAmPSB+MHgwMTAwOyAvKiBjbGVhciBXQTE2ICovCiAJfSAKLQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTUkFNQywgdG1wKTsKKwlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTX1JBTUMsIHRtcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkMTg4OV9zdGFydF93YXYoYWQxODg5X3N0YXRlX3QgKnN0YXRlKQpAQCAtMTQ1LDIxICsxNDUsMjEgQEAKIAkgICAgZG1hYnVmLT5yZF9wdHIsIGRtYWJ1Zi0+ZG1hX2xlbik7CiAKICAgICAgICAgLyogbG9hZCB1cCB0aGUgY3VycmVudCByZWdpc3RlciBzZXQgKi8KLQlBRDE4ODlfV1JJVEVMKGFkMTg4OV9kZXYsIEFEX0RNQVdBVkNDLCBjbnQpOwotCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BV0FWSUNDLCBjbnQpOwotCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BV0FWQ0EsIGRtYWJ1Zi0+ZG1hX2hhbmRsZSk7CisJQUQxODg5X1dSSVRFTChhZDE4ODlfZGV2LCBBRF9ETUFfV0FWQ0MsIGNudCk7CisJQUQxODg5X1dSSVRFTChhZDE4ODlfZGV2LCBBRF9ETUFfV0FWSUNDLCBjbnQpOworCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BX1dBVkNBLCBkbWFidWYtPmRtYV9oYW5kbGUpOwogCiAJLyogVE9ETzogZm9yIG5vdyB3ZSBsb2FkIHRoZSBiYXNlIHJlZ2lzdGVycyB3aXRoIHRoZSBzYW1lIHRoaW5nICovCi0JQUQxODg5X1dSSVRFTChhZDE4ODlfZGV2LCBBRF9ETUFXQVZCQywgY250KTsKLQlBRDE4ODlfV1JJVEVMKGFkMTg4OV9kZXYsIEFEX0RNQVdBVklCQywgY250KTsKLQlBRDE4ODlfV1JJVEVMKGFkMTg4OV9kZXYsIEFEX0RNQVdBVkJBLCBkbWFidWYtPmRtYV9oYW5kbGUpOworCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BX1dBVkJDLCBjbnQpOworCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BX1dBVklCQywgY250KTsKKwlBRDE4ODlfV1JJVEVMKGFkMTg4OV9kZXYsIEFEX0RNQV9XQVZCQSwgZG1hYnVmLT5kbWFfaGFuZGxlKTsKIAogCS8qIGFuZCB3ZSdyZSBvZmYgdG8gdGhlIHJhY2VzLi4uICovCi0JQUQxODg5X1dSSVRFTChhZDE4ODlfZGV2LCBBRF9ETUFDSFNTLCAweDgpOwotCXRtcCA9IEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMpOworCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BX0NIU1MsIDB4OCk7CisJdG1wID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTX1dTTUMpOwogCXRtcCB8PSAweDA0MDA7IC8qIHNldCBXQUVOICovCi0JQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMsIHRtcCk7Ci0JKHZvaWQpIEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMpOyAvKiBmbHVzaCBwb3N0ZWQgUENJIHdyaXRlICovCisJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DLCB0bXApOworCSh2b2lkKSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNfV1NNQyk7IC8qIGZsdXNoIHBvc3RlZCBQQ0kgd3JpdGUgKi8KIAogCWRtYWJ1Zi0+ZW5hYmxlIHw9IERBQ19SVU5OSU5HOwogCkBAIC0xNzksMTAgKzE3OSwxMCBAQAogCQl1MTYgdG1wOwogCQl1bnNpZ25lZCBsb25nIGNudCA9IGRtYWJ1Zi0+ZG1hX2xlbjsKIAotCQl0bXAgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNXU01DKTsKKwkJdG1wID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTX1dTTUMpOwogCQl0bXAgJj0gfjB4MDQwMDsgLyogY2xlYXIgV0FFTiAqLwotCQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTV1NNQywgdG1wKTsKLQkJKHZvaWQpIEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMpOyAvKiBmbHVzaCBwb3N0ZWQgUENJIHdyaXRlICovCisJCUFEMTg4OV9XUklURVcoYWQxODg5X2RldiwgQURfRFNfV1NNQywgdG1wKTsKKwkJKHZvaWQpIEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DKTsgLyogZmx1c2ggcG9zdGVkIFBDSSB3cml0ZSAqLwogCQlwY2lfdW5tYXBfc2luZ2xlKGFkMTg4OV9kZXYtPnBjaSwgZG1hYnVmLT5kbWFfaGFuZGxlLCAKIAkJCQljbnQsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCkBAIC0yMTEsNyArMjExLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOwogCQotCXRtcCA9IEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU1JBTUMpOworCXRtcCA9IEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU19SQU1DKTsKIAlpZiAoc3RhcnQpIHsKIAkJc3RhdGUtPmRtYWJ1Zi5lbmFibGUgfD0gQURDX1JVTk5JTkc7CiAJCXRtcCB8PSAweDAwMDQ7IC8qIHNldCBBREVOICovCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJc3RhdGUtPmRtYWJ1Zi5lbmFibGUgJj0gfkFEQ19SVU5OSU5HOwogCQl0bXAgJj0gfjB4MDAwNDsgLyogY2xlYXIgQURFTiAqLwogCX0KLQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTUkFNQywgdG1wKTsKKwlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTX1JBTUMsIHRtcCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMzAxLDUzICszMDEsNTMgQEAKIAlpbnQgbGVuLCBpOwogCWFkMTg4OV9kZXZfdCAqZGV2ID0gZGF0YTsKIAlhZDE4ODlfcmVnX3QgcmVnc1tdID0gewotCQl7ICJXU01DIiwgQURfRFNXU01DLCAxNiB9LAotCQl7ICJSQU1DIiwgQURfRFNSQU1DLCAxNiB9LAotCQl7ICJXQURBIiwgQURfRFNXQURBLCAxNiB9LAotCQl7ICJTWURBIiwgQURfRFNTWURBLCAxNiB9LAotCQl7ICJXQVMiLCBBRF9EU1dBUywgMTYgfSwKLQkJeyAiUkVTIiwgQURfRFNSRVMsIDE2IH0sCi0JCXsgIkNDUyIsIEFEX0RTQ0NTLCAxNiB9LAotCQl7ICJBRENCQSIsIEFEX0RNQUFEQ0JBLCAzMiB9LAotCQl7ICJBRENDQSIsIEFEX0RNQUFEQ0NBLCAzMiB9LAotCQl7ICJBRENCQyIsIEFEX0RNQUFEQ0JDLCAzMiB9LAotCQl7ICJBRENDQyIsIEFEX0RNQUFEQ0NDLCAzMiB9LAotCQl7ICJBRENJQkMiLCBBRF9ETUFBRENJQkMsIDMyIH0sCi0JCXsgIkFEQ0lDQyIsIEFEX0RNQUFEQ0lDQywgMzIgfSwKLQkJeyAiQURDQ1RSTCIsIEFEX0RNQUFEQ0NUUkwsIDE2IH0sCi0JCXsgIldBVkJBIiwgQURfRE1BV0FWQkEsIDMyIH0sCi0JCXsgIldBVkNBIiwgQURfRE1BV0FWQ0EsIDMyIH0sCi0JCXsgIldBVkJDIiwgQURfRE1BV0FWQkMsIDMyIH0sCi0JCXsgIldBVkNDIiwgQURfRE1BV0FWQ0MsIDMyIH0sCi0JCXsgIldBVklCQyIsIEFEX0RNQVdBVklCQywgMzIgfSwKLQkJeyAiV0FWSUNDIiwgQURfRE1BV0FWSUNDLCAzMiB9LAotCQl7ICJXQVZDVFJMIiwgQURfRE1BV0FWQ1RSTCwgMTYgfSwKLQkJeyAiRElTUiIsIEFEX0RNQURJU1IsIDMyIH0sCi0JCXsgIkNIU1MiLCBBRF9ETUFDSFNTLCAzMiB9LAotCQl7ICJJUEMiLCBBRF9HUElPSVBDLCAxNiB9LAotCQl7ICJPUCIsIEFEX0dQSU9PUCwgMTYgfSwKLQkJeyAiSVAiLCBBRF9HUElPSVAsIDE2IH0sCi0JCXsgIkFDSUMiLCBBRF9BQ0lDLCAxNiB9LAotCQl7ICJBQzk3X1JFU0VUIiwgMHgxMDAgKyBBQzk3X1JFU0VULCAxNiB9LAotCQl7ICJBQzk3X01BU1RFUl9WT0xfU1RFUkVPIiwgMHgxMDAgKyBBQzk3X01BU1RFUl9WT0xfU1RFUkVPLCAxNiB9LAotCQl7ICJBQzk3X0hFQURQSE9ORV9WT0wiLCAweDEwMCArIEFDOTdfSEVBRFBIT05FX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19NQVNURVJfVk9MX01PTk8iLCAweDEwMCArIEFDOTdfTUFTVEVSX1ZPTF9NT05PLCAxNiB9LAotCQl7ICJBQzk3X01BU1RFUl9UT05FIiwgMHgxMDAgKyBBQzk3X01BU1RFUl9UT05FLCAxNiB9LAotCQl7ICJBQzk3X1BDQkVFUF9WT0wiLCAweDEwMCArIEFDOTdfUENCRUVQX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19QSE9ORV9WT0wiLCAweDEwMCArIEFDOTdfUEhPTkVfVk9MLCAxNiB9LAotCQl7ICJBQzk3X01JQ19WT0wiLCAweDEwMCArIEFDOTdfTUlDX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19MSU5FSU5fVk9MIiwgMHgxMDAgKyBBQzk3X0xJTkVJTl9WT0wsIDE2IH0sCi0JCXsgIkFDOTdfQ0RfVk9MIiwgMHgxMDAgKyBBQzk3X0NEX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19WSURFT19WT0wiLCAweDEwMCArIEFDOTdfVklERU9fVk9MLCAxNiB9LAotCQl7ICJBQzk3X0FVWF9WT0wiLCAweDEwMCArIEFDOTdfQVVYX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19QQ01PVVRfVk9MIiwgMHgxMDAgKyBBQzk3X1BDTU9VVF9WT0wsIDE2IH0sCi0JCXsgIkFDOTdfUkVDT1JEX1NFTEVDVCIsIDB4MTAwICsgQUM5N19SRUNPUkRfU0VMRUNULCAxNiB9LAotCQl7ICJBQzk3X1JFQ09SRF9HQUlOIiwgMHgxMDAgKyBBQzk3X1JFQ09SRF9HQUlOLCAxNiB9LAotCQl7ICJBQzk3X1JFQ09SRF9HQUlOX01JQyIsIDB4MTAwICsgQUM5N19SRUNPUkRfR0FJTl9NSUMsIDE2IH0sCi0JCXsgIkFDOTdfR0VORVJBTF9QVVJQT1NFIiwgMHgxMDAgKyBBQzk3X0dFTkVSQUxfUFVSUE9TRSwgMTYgfSwKLQkJeyAiQUM5N18zRF9DT05UUk9MIiwgMHgxMDAgKyBBQzk3XzNEX0NPTlRST0wsIDE2IH0sCi0JCXsgIkFDOTdfTU9ERU1fUkFURSIsIDB4MTAwICsgQUM5N19NT0RFTV9SQVRFLCAxNiB9LAotCQl7ICJBQzk3X1BPV0VSX0NPTlRST0wiLCAweDEwMCArIEFDOTdfUE9XRVJfQ09OVFJPTCwgMTYgfSwKKwkJeyAiV1NNQyIsIEFEX0RTX1dTTUMsIDE2IH0sCisJCXsgIlJBTUMiLCBBRF9EU19SQU1DLCAxNiB9LAorCQl7ICJXQURBIiwgQURfRFNfV0FEQSwgMTYgfSwKKwkJeyAiU1lEQSIsIEFEX0RTX1NZREEsIDE2IH0sCisJCXsgIldBUyIsIEFEX0RTX1dBUywgMTYgfSwKKwkJeyAiUkVTIiwgQURfRFNfUkVTLCAxNiB9LAorCQl7ICJDQ1MiLCBBRF9EU19DQ1MsIDE2IH0sCisJCXsgIkFEQ0JBIiwgQURfRE1BX0FEQ0JBLCAzMiB9LAorCQl7ICJBRENDQSIsIEFEX0RNQV9BRENDQSwgMzIgfSwKKwkJeyAiQURDQkMiLCBBRF9ETUFfQURDQkMsIDMyIH0sCisJCXsgIkFEQ0NDIiwgQURfRE1BX0FEQ0NDLCAzMiB9LAorCQl7ICJBRENJQkMiLCBBRF9ETUFfQURDSUJDLCAzMiB9LAorCQl7ICJBRENJQ0MiLCBBRF9ETUFfQURDSUNDLCAzMiB9LAorCQl7ICJBRENDVFJMIiwgQURfRE1BX0FEQ0NUUkwsIDE2IH0sCisJCXsgIldBVkJBIiwgQURfRE1BX1dBVkJBLCAzMiB9LAorCQl7ICJXQVZDQSIsIEFEX0RNQV9XQVZDQSwgMzIgfSwKKwkJeyAiV0FWQkMiLCBBRF9ETUFfV0FWQkMsIDMyIH0sCisJCXsgIldBVkNDIiwgQURfRE1BX1dBVkNDLCAzMiB9LAorCQl7ICJXQVZJQkMiLCBBRF9ETUFfV0FWSUJDLCAzMiB9LAorCQl7ICJXQVZJQ0MiLCBBRF9ETUFfV0FWSUNDLCAzMiB9LAorCQl7ICJXQVZDVFJMIiwgQURfRE1BX1dBVkNUUkwsIDE2IH0sCisJCXsgIkRJU1IiLCBBRF9ETUFfRElTUiwgMzIgfSwKKwkJeyAiQ0hTUyIsIEFEX0RNQV9DSFNTLCAzMiB9LAorCQl7ICJJUEMiLCBBRF9HUElPX0lQQywgMTYgfSwKKwkJeyAiT1AiLCBBRF9HUElPX09QLCAxNiB9LAorCQl7ICJJUCIsIEFEX0dQSU9fSVAsIDE2IH0sCisJCXsgIkFDSUMiLCBBRF9BQzk3X0FDSUMsIDE2IH0sCisJCXsgIkFDOTdfUkVTRVQiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X1JFU0VULCAxNiB9LAorCQl7ICJBQzk3X01BU1RFUl9WT0xfU1RFUkVPIiwgQURfQUM5N19CQVNFICsgQUM5N19NQVNURVJfVk9MX1NURVJFTywgMTYgfSwKKwkJeyAiQUM5N19IRUFEUEhPTkVfVk9MIiwgQURfQUM5N19CQVNFICsgQUM5N19IRUFEUEhPTkVfVk9MLCAxNiB9LAorCQl7ICJBQzk3X01BU1RFUl9WT0xfTU9OTyIsIEFEX0FDOTdfQkFTRSArIEFDOTdfTUFTVEVSX1ZPTF9NT05PLCAxNiB9LAorCQl7ICJBQzk3X01BU1RFUl9UT05FIiwgQURfQUM5N19CQVNFICsgQUM5N19NQVNURVJfVE9ORSwgMTYgfSwKKwkJeyAiQUM5N19QQ0JFRVBfVk9MIiwgQURfQUM5N19CQVNFICsgQUM5N19QQ0JFRVBfVk9MLCAxNiB9LAorCQl7ICJBQzk3X1BIT05FX1ZPTCIsIEFEX0FDOTdfQkFTRSArIEFDOTdfUEhPTkVfVk9MLCAxNiB9LAorCQl7ICJBQzk3X01JQ19WT0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X01JQ19WT0wsIDE2IH0sCisJCXsgIkFDOTdfTElORUlOX1ZPTCIsIEFEX0FDOTdfQkFTRSArIEFDOTdfTElORUlOX1ZPTCwgMTYgfSwKKwkJeyAiQUM5N19DRF9WT0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X0NEX1ZPTCwgMTYgfSwKKwkJeyAiQUM5N19WSURFT19WT0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X1ZJREVPX1ZPTCwgMTYgfSwKKwkJeyAiQUM5N19BVVhfVk9MIiwgQURfQUM5N19CQVNFICsgQUM5N19BVVhfVk9MLCAxNiB9LAorCQl7ICJBQzk3X1BDTU9VVF9WT0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X1BDTU9VVF9WT0wsIDE2IH0sCisJCXsgIkFDOTdfUkVDT1JEX1NFTEVDVCIsIEFEX0FDOTdfQkFTRSArIEFDOTdfUkVDT1JEX1NFTEVDVCwgMTYgfSwKKwkJeyAiQUM5N19SRUNPUkRfR0FJTiIsIEFEX0FDOTdfQkFTRSArIEFDOTdfUkVDT1JEX0dBSU4sIDE2IH0sCisJCXsgIkFDOTdfUkVDT1JEX0dBSU5fTUlDIiwgQURfQUM5N19CQVNFICsgQUM5N19SRUNPUkRfR0FJTl9NSUMsIDE2IH0sCisJCXsgIkFDOTdfR0VORVJBTF9QVVJQT1NFIiwgQURfQUM5N19CQVNFICsgQUM5N19HRU5FUkFMX1BVUlBPU0UsIDE2IH0sCisJCXsgIkFDOTdfM0RfQ09OVFJPTCIsIEFEX0FDOTdfQkFTRSArIEFDOTdfM0RfQ09OVFJPTCwgMTYgfSwKKwkJeyAiQUM5N19NT0RFTV9SQVRFIiwgQURfQUM5N19CQVNFICsgQUM5N19NT0RFTV9SQVRFLCAxNiB9LAorCQl7ICJBQzk3X1BPV0VSX0NPTlRST0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X1BPV0VSX0NPTlRST0wsIDE2IH0sCiAJCXsgTlVMTCB9CiAJfTsKIApAQCAtNDAwLDkgKzQwMCw5IEBACiAJfQogCQogCWlmIChkbWFidWYtPmVuYWJsZSAmIERBQ19SVU5OSU5HKQotCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShBRDE4ODlfUkVBREwoc3RhdGUtPmNhcmQsIEFEX0RNQVdBVkJBKSk7CisJCW9mZnNldCA9IGxlMzJfdG9fY3B1KEFEMTg4OV9SRUFETChzdGF0ZS0+Y2FyZCwgQURfRE1BX1dBVkJBKSk7CiAJZWxzZQotCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShBRDE4ODlfUkVBREwoc3RhdGUtPmNhcmQsIEFEX0RNQUFEQ0JBKSk7CisJCW9mZnNldCA9IGxlMzJfdG9fY3B1KEFEMTg4OV9SRUFETChzdGF0ZS0+Y2FyZCwgQURfRE1BX0FEQ0JBKSk7CiAKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnVzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpb2Zmc2V0KSAtICh1bnNpZ25lZCBsb25nKWRtYWJ1Zi0+cmF3YnVmOwogfQpAQCAtNjM5LDkgKzYzOSw5IEBACiAJCWlmICh2YWwgPiA1NDAwICYmIHZhbCA8IDQ4MDAwKQogCQl7CiAJCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCQkJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU1dBUywgdmFsKTsKKwkJCQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTX1dBUywgdmFsKTsKIAkJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQkJCUFEMTg4OV9XUklURVcoYWQxODg5X2RldiwgQURfRFNSRVMsIHZhbCk7CisJCQkJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU19SRVMsIHZhbCk7CiAJCX0KIAkJcmV0dXJuIDA7CiAKQEAgLTY0OSwyMiArNjQ5LDIyIEBACiAJCWlmIChnZXRfdXNlcih2YWwsIHApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQl2YWwgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNXU01DKTsKKwkJCXZhbCA9IEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DKTsKIAkJCWlmICh2YWwpIHsKIAkJCQl2YWwgfD0gMHgwMjAwOyAgLyogc2V0IFdBU1QgKi8KIAkJCX0gZWxzZSB7CiAJCQkJdmFsICY9IH4weDAyMDA7IC8qIGNsZWFyIFdBU1QgKi8KIAkJCX0KLQkJCUFEMTg4OV9XUklURVcoYWQxODg5X2RldiwgQURfRFNXU01DLCB2YWwpOworCQkJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DLCB2YWwpOwogCQl9CiAJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJdmFsID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTUkFNQyk7CisJCQl2YWwgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNfUkFNQyk7CiAJCQlpZiAodmFsKSB7CiAJCQkJdmFsIHw9IDB4MDAwMjsgIC8qIHNldCBBRFNUICovCiAJCQl9IGVsc2UgewogCQkJCXZhbCAmPSB+MHgwMDAyOyAvKiBjbGVhciBBRFNUICovCiAJCQl9Ci0JCQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTUkFNQywgdmFsKTsKKwkJCUFEMTg4OV9XUklURVcoYWQxODg5X2RldiwgQURfRFNfUkFNQywgdmFsKTsKIAkJfQogCiAJCXJldHVybiAwOwpAQCAtNzM5LDcgKzczOSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTT1VORF9QQ01fUkVBRF9SQVRFOgotCQlyZXR1cm4gcHV0X3VzZXIoQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTV0FTKSwgcCk7CisJCXJldHVybiBwdXRfdXNlcihBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNfV0FTKSwgcCk7CiAKIAljYXNlIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTOgogCWNhc2UgU09VTkRfUENNX1JFQURfQklUUzoKQEAgLTc2OSw3ICs3NjksNyBAQAogCiAJYWQxODg5X3NldF93YXZfcmF0ZShhZDE4ODlfZGV2LCA0ODAwMCk7CiAJYWQxODg5X3NldF93YXZfZm10KGFkMTg4OV9kZXYsIEFGTVRfUzE2X0xFKTsKLQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTV0FEQSwgMHgwNDA0KTsgLyogYXR0ZW51YXRpb24gKi8KKwlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTX1dBREEsIDB4MDQwNCk7IC8qIGF0dGVudWF0aW9uICovCiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCkBAIC04MjYsMTUgKzgyNiwxNSBAQAogewogCWFkMTg4OV9kZXZfdCAqZGV2ID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwogCi0JLy9EQkcoIldyaXRpbmcgMHgleCB0byAweCVseFxuIiwgdmFsLCBkZXYtPnJlZ2Jhc2UgKyAweDEwMCArIHJlZyk7Ci0JQUQxODg5X1dSSVRFVyhkZXYsIDB4MTAwICsgcmVnLCB2YWwpOworCS8vREJHKCJXcml0aW5nIDB4JXggdG8gMHglbHhcbiIsIHZhbCwgZGV2LT5yZWdiYXNlICsgQURfQUM5N19CQVNFICsgcmVnKTsKKwlBRDE4ODlfV1JJVEVXKGRldiwgQURfQUM5N19CQVNFICsgcmVnLCB2YWwpOwogfQogCiBzdGF0aWMgdTE2IGFkMTg4OV9jb2RlY19yZWFkKHN0cnVjdCBhYzk3X2NvZGVjICphYzk3LCB1OCByZWcpCiB7CiAJYWQxODg5X2Rldl90ICpkZXYgPSBhYzk3LT5wcml2YXRlX2RhdGE7Ci0JLy9EQkcoIlJlYWRpbmcgZnJvbSAweCVseFxuIiwgZGV2LT5yZWdiYXNlICsgMHgxMDAgKyByZWcpOwotCXJldHVybiBBRDE4ODlfUkVBRFcoZGV2LCAweDEwMCArIHJlZyk7CisJLy9EQkcoIlJlYWRpbmcgZnJvbSAweCVseFxuIiwgZGV2LT5yZWdiYXNlICsgQURfQUM5N19CQVNFICsgcmVnKTsKKwlyZXR1cm4gQUQxODg5X1JFQURXKGRldiwgQURfQUM5N19CQVNFICsgcmVnKTsKIH0JCiAKIHN0YXRpYyBpbnQgYWQxODg5X2FjOTdfaW5pdChhZDE4ODlfZGV2X3QgKmRldiwgaW50IGlkKQpAQCAtODgzLDI0ICs4ODMsMjQgQEAKIAlpbnQgcmV0cnkgPSAyMDA7CiAJYWQxODg5X2Rldl90ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKIAotCUFEMTg4OV9XUklURVcoZGV2LCBBRF9EU0NDUywgMHg4MDAwKTsgLyogdHVybiBvbiBjbG9jayAqLwotCUFEMTg4OV9SRUFEVyhkZXYsIEFEX0RTQ0NTKTsgCisJQUQxODg5X1dSSVRFVyhkZXYsIEFEX0RTX0NDUywgMHg4MDAwKTsgLyogdHVybiBvbiBjbG9jayAqLworCUFEMTg4OV9SRUFEVyhkZXYsIEFEX0RTX0NDUyk7CiAKIAlXQUlUXzEwTVMoKTsKIAotCXN0YXQgPSBBRDE4ODlfUkVBRFcoZGV2LCBBRF9BQ0lDKTsKKwlzdGF0ID0gQUQxODg5X1JFQURXKGRldiwgQURfQUM5N19BQ0lDKTsKIAlzdGF0IHw9IDB4MDAwMjsJCQkJLyogUmVzZXQgRGlzYWJsZSAqLwotCUFEMTg4OV9XUklURVcoZGV2LCBBRF9BQ0lDLCBzdGF0KTsKLQkodm9pZCkgQUQxODg5X1JFQURXKGRldiwgQURfQUNJQyk7CS8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLworCUFEMTg4OV9XUklURVcoZGV2LCBBRF9BQzk3X0FDSUMsIHN0YXQpOworCSh2b2lkKSBBRDE4ODlfUkVBRFcoZGV2LCBBRF9BQzk3X0FDSUMpOwkvKiBmbHVzaCBwb3N0ZWQgd3JpdGUgKi8KIAogCXVkZWxheSgxMCk7CiAKLQlzdGF0ID0gQUQxODg5X1JFQURXKGRldiwgQURfQUNJQyk7CisJc3RhdCA9IEFEMTg4OV9SRUFEVyhkZXYsIEFEX0FDOTdfQUNJQyk7CiAJc3RhdCB8PSAweDAwMDE7CQkJCS8qIEludGVyZmFjZSBFbmFibGUgKi8KLQlBRDE4ODlfV1JJVEVXKGRldiwgQURfQUNJQywgc3RhdCk7CisJQUQxODg5X1dSSVRFVyhkZXYsIEFEX0FDOTdfQUNJQywgc3RhdCk7CiAKIAlkbyB7Ci0JCWlmIChBRDE4ODlfUkVBRFcoZGV2LCBBRF9BQ0lDKSAmIDB4ODAwMCkJLyogUmVhZHkgKi8KKwkJaWYgKEFEMTg4OV9SRUFEVyhkZXYsIEFEX0FDOTdfQUNJQykgJiAweDgwMDApCS8qIFJlYWR5ICovCiAJCQlicmVhazsKIAkJV0FJVF8xME1TKCk7CiAJCXJldHJ5LS07CkBAIC05MDgsMTYgKzkwOCwxNiBAQAogCiAJaWYgKCFyZXRyeSkgewogCQlwcmludGsoS0VSTl9FUlIgImFkMTg4OV9hY2xpbmtfcmVzZXQ6IGNvZGVjIGlzIG5vdCByZWFkeSBbMHgleF1cbiIsCi0JCQkgICAgQUQxODg5X1JFQURXKGRldiwgQURfQUNJQykpOworCQkJICAgIEFEMTg4OV9SRUFEVyhkZXYsIEFEX0FDOTdfQUNJQykpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCS8qIFRPRE8gcmVzZXQgQUM5NyBjb2RlYyAqLwogCS8qIFRPRE8gc2V0IHdhdmUvYWRjIHBjaSBjdHJsIHN0YXR1cyAqLwogCi0Jc3RhdCA9IEFEMTg4OV9SRUFEVyhkZXYsIEFEX0FDSUMpOworCXN0YXQgPSBBRDE4ODlfUkVBRFcoZGV2LCBBRF9BQzk3X0FDSUMpOwogCXN0YXQgfD0gMHgwMDA0OwkJCQkvKiBBdWRpbyBTdHJlYW0gT3V0cHV0IEVuYWJsZSAqLwotCUFEMTg4OV9XUklURVcoZGV2LCBBRF9BQ0lDLCBzdGF0KTsKKwlBRDE4ODlfV1JJVEVXKGRldiwgQURfQUM5N19BQ0lDLCBzdGF0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTM1LDEwICs5MzUsMTAgQEAKIAl1MzIgc3RhdDsKIAlhZDE4ODlfZGV2X3QgKmRldiA9IChhZDE4ODlfZGV2X3QgKilkZXZfaWQ7CiAKLQlzdGF0ID0gQUQxODg5X1JFQURMKGRldiwgQURfRE1BRElTUik7CisJc3RhdCA9IEFEMTg4OV9SRUFETChkZXYsIEFEX0RNQV9ESVNSKTsKIAogCS8qIGNsZWFyIElTUiAqLwotCUFEMTg4OV9XUklURUwoZGV2LCBBRF9ETUFESVNSLCBzdGF0KTsKKwlBRDE4ODlfV1JJVEVMKGRldiwgQURfRE1BX0RJU1IsIHN0YXQpOwogCiAJaWYgKHN0YXQgJiAweDgpIHsJCS8qIFdBVkkgKi8KIAkJREJHKCJXQVYgaW50ZXJydXB0XG4iKTsKQEAgLTk2NCwxNSArOTY0LDE1IEBACiAJdTMyIHRtcDMyOwogCiAJLyogbWFrZSBzdXJlIHRoZSBpbnRlcnJ1cHQgYml0cyBhcmUgc2V0dXAgdGhlIHdheSB3ZSB3YW50ICovCi0JdG1wMzIgPSBBRDE4ODlfUkVBREwoZGV2LCBBRF9ETUFXQVZDVFJMKTsKKwl0bXAzMiA9IEFEMTg4OV9SRUFETChkZXYsIEFEX0RNQV9XQVZDVFJMKTsKIAl0bXAzMiAmPSB+MHhmZjsgLyogZmxhdCBkbWEsIG5vIHNnLCBtYXNrIG91dCB0aGUgaW50ciBiaXRzICovCiAJdG1wMzIgfD0gMHg2OyAgLyogaW50ciBvbiBjb3VudCwgbG9vcCAqLwotCUFEMTg4OV9XUklURUwoZGV2LCBBRF9ETUFXQVZDVFJMLCB0bXAzMik7CisJQUQxODg5X1dSSVRFTChkZXYsIEFEX0RNQV9XQVZDVFJMLCB0bXAzMik7CiAKIAkvKiB1bm11dGUuLi4gKi8KLQl0bXAxNiA9IEFEMTg4OV9SRUFEVyhkZXYsIEFEX0RTV0FEQSk7CisJdG1wMTYgPSBBRDE4ODlfUkVBRFcoZGV2LCBBRF9EU19XQURBKTsKIAl0bXAxNiAmPSB+MHg4MDgwOwotCUFEMTg4OV9XUklURVcoZGV2LCBBRF9EU1dBREEsIHRtcDE2KTsKKwlBRDE4ODlfV1JJVEVXKGRldiwgQURfRFNfV0FEQSwgdG1wMTYpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDE4ODlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTEwMDUsNyArMTAwNSw3IEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLQlkZXYtPnJlZ2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoYmFyLCBBRF9EU0lPTUVNU0laRSk7CisJZGV2LT5yZWdiYXNlID0gaW9yZW1hcF9ub2NhY2hlKGJhciwgQURfRFNfSU9NRU1TSVpFKTsKIAlpZiAoIWRldi0+cmVnYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgREVWTkFNRSAiOiB1bmFibGUgdG8gcmVtYXAgaW9tZW1cbiIpOwogCQlnb3RvIG91dDI7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWQxODg5LmggYi9zb3VuZC9vc3MvYWQxODg5LmgKaW5kZXggODYxYjMyMS4uMDk5MTM3NiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FkMTg4OS5oCisrKyBiL3NvdW5kL29zcy9hZDE4ODkuaApAQCAtMSw1NyArMSw1OCBAQAogI2lmbmRlZiBfQUQxODg5X0hfCiAjZGVmaW5lIF9BRDE4ODlfSF8KIAotI2RlZmluZSBBRF9EU1dTTUMJMHgwMAkvKiBETUEgaW5wdXQgd2F2ZS9zeW4gbWl4ZXIgY29udHJvbCAqLwotI2RlZmluZSBBRF9EU1JBTUMJMHgwMgkvKiBETUEgb3V0cHV0IHJlc2FtcC9BREMgbWl4ZXIgY29udHJvbCAqLwotI2RlZmluZSBBRF9EU1dBREEJMHgwNAkvKiBETUEgaW5wdXQgd2F2ZSBhdHRlbnVhdGlvbiAqLwotI2RlZmluZSBBRF9EU1NZREEJMHgwNgkvKiBETUEgaW5wdXQgc3luIGF0dGVudHVhdGlvbiAqLwotI2RlZmluZSBBRF9EU1dBUwkweDA4CS8qIHdhdmUgaW5wdXQgc2FtcGxlIHJhdGUgKi8KLSNkZWZpbmUgQURfRFNSRVMJMHgwYQkvKiByZXNhbXBsZXIgb3V0cHV0IHNhbXBsZSByYXRlICovCi0jZGVmaW5lIEFEX0RTQ0NTCTB4MGMJLyogY2hpcCBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSBBRF9EU19XU01DCTB4MDAJLyogRE1BIGlucHV0IHdhdmUvc3luIG1peGVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgQURfRFNfUkFNQwkweDAyCS8qIERNQSBvdXRwdXQgcmVzYW1wL0FEQyBtaXhlciBjb250cm9sICovCisjZGVmaW5lIEFEX0RTX1dBREEJMHgwNAkvKiBETUEgaW5wdXQgd2F2ZSBhdHRlbnVhdGlvbiAqLworI2RlZmluZSBBRF9EU19TWURBCTB4MDYJLyogRE1BIGlucHV0IHN5biBhdHRlbnR1YXRpb24gKi8KKyNkZWZpbmUgQURfRFNfV0FTCTB4MDgJLyogd2F2ZSBpbnB1dCBzYW1wbGUgcmF0ZSAqLworI2RlZmluZSBBRF9EU19SRVMJMHgwYQkvKiByZXNhbXBsZXIgb3V0cHV0IHNhbXBsZSByYXRlICovCisjZGVmaW5lIEFEX0RTX0NDUwkweDBjCS8qIGNoaXAgY29udHJvbC9zdGF0dXMgKi8KIAotI2RlZmluZSBBRF9ETUFSRVNCQQkweDQwCS8qIFJFUyBiYXNlIGFkZHIgKi8KLSNkZWZpbmUgQURfRE1BUkVTQ0EJMHg0NAkvKiBSRVMgY3VycmVudCBhZGRyICovCi0jZGVmaW5lIEFEX0RNQVJFU0JDCTB4NDgJLyogUkVTIGJhc2UgY250ICovCi0jZGVmaW5lIEFEX0RNQVJFU0NDCTB4NGMJLyogUkVTIGN1cnJlbnQgY291bnQgKi8KLSNkZWZpbmUgQURfRE1BQURDQkEJMHg1MAkvKiBBREMgKi8KLSNkZWZpbmUgQURfRE1BQURDQ0EJMHg1NAotI2RlZmluZSBBRF9ETUFBRENCQwkweDU4Ci0jZGVmaW5lIEFEX0RNQUFEQ0NDCTB4NWMKLSNkZWZpbmUgQURfRE1BU1lOQkEJMHg2MAkvKiBTWU4gKi8KLSNkZWZpbmUgQURfRE1BU1lOQ0EJMHg2NAotI2RlZmluZSBBRF9ETUFTWU5CQwkweDY4Ci0jZGVmaW5lIEFEX0RNQVNZTkNDCTB4NmMKLSNkZWZpbmUgQURfRE1BV0FWQkEJMHg3MAkvKiBXQVYgKi8KLSNkZWZpbmUgQURfRE1BV0FWQ0EJMHg3NAotI2RlZmluZSBBRF9ETUFXQVZCQwkweDc4Ci0jZGVmaW5lIEFEX0RNQVdBVkNDCTB4N2MKLSNkZWZpbmUgQURfRE1BUkVTSUNDCTB4ODAJLyogUkVTIGludGVycnVwdCBjdXJyZW50IGNvdW50ICovCi0jZGVmaW5lIEFEX0RNQVJFU0lCQwkweDg0CS8qIFJFUyBpbnRlcnJ1cHQgYmFzZSBjb3VudCAqLwotI2RlZmluZSBBRF9ETUFBRENJQ0MJMHg4OAkvKiBBREMgaW50ZXJydXB0IGN1cnJlbnQgY291bnQgKi8KLSNkZWZpbmUgQURfRE1BQURDSUJDCTB4OGMJLyogQURDIGludGVycnVwdCBiYXNlIGNvdW50ICovCi0jZGVmaW5lIEFEX0RNQVNZTklDQwkweDkwCS8qIFNZTiBpbnRlcnJ1cHQgY3VycmVudCBjb3VudCAqLwotI2RlZmluZSBBRF9ETUFTWU5JQkMJMHg5NAkvKiBTWU4gaW50ZXJydXB0IGJhc2UgY291bnQgKi8KLSNkZWZpbmUgQURfRE1BV0FWSUNDCTB4OTgJLyogV0FWIGludGVycnVwdCBjdXJyZW50IGNvdW50ICovCi0jZGVmaW5lIEFEX0RNQVdBVklCQwkweDljCS8qIFdBViBpbnRlcnJ1cHQgYmFzZSBjb3VudCAqLwotI2RlZmluZSBBRF9ETUFSRVNDVFJMCTB4YTAJLyogUkVTIFBDSSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFBRENDVFJMCTB4YTgJLyogQURDIFBDSSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFTWU5DVFJMCTB4YjAJLyogU1lOIFBDSSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFXQVZDVFJMCTB4YjgJLyogV0FWIFBDSSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFESVNSCTB4YzAJLyogUENJIERNQSBpbnRyIHN0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFDSFNTCTB4YzQJLyogUENJIERNQSBjaGFubmVsIHN0b3Agc3RhdHVzICovCisjZGVmaW5lIEFEX0RNQV9SRVNCQQkweDQwCS8qIFJFUyBiYXNlIGFkZHIgKi8KKyNkZWZpbmUgQURfRE1BX1JFU0NBCTB4NDQJLyogUkVTIGN1cnJlbnQgYWRkciAqLworI2RlZmluZSBBRF9ETUFfUkVTQkMJMHg0OAkvKiBSRVMgYmFzZSBjbnQgKi8KKyNkZWZpbmUgQURfRE1BX1JFU0NDCTB4NGMJLyogUkVTIGN1cnJlbnQgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX0FEQ0JBCTB4NTAJLyogQURDICovCisjZGVmaW5lIEFEX0RNQV9BRENDQQkweDU0CisjZGVmaW5lIEFEX0RNQV9BRENCQwkweDU4CisjZGVmaW5lIEFEX0RNQV9BRENDQwkweDVjCisjZGVmaW5lIEFEX0RNQV9TWU5CQQkweDYwCS8qIFNZTiAqLworI2RlZmluZSBBRF9ETUFfU1lOQ0EJMHg2NAorI2RlZmluZSBBRF9ETUFfU1lOQkMJMHg2OAorI2RlZmluZSBBRF9ETUFfU1lOQ0MJMHg2YworI2RlZmluZSBBRF9ETUFfV0FWQkEJMHg3MAkvKiBXQVYgKi8KKyNkZWZpbmUgQURfRE1BX1dBVkNBCTB4NzQKKyNkZWZpbmUgQURfRE1BX1dBVkJDCTB4NzgKKyNkZWZpbmUgQURfRE1BX1dBVkNDCTB4N2MKKyNkZWZpbmUgQURfRE1BX1JFU0lDQwkweDgwCS8qIFJFUyBpbnRlcnJ1cHQgY3VycmVudCBjb3VudCAqLworI2RlZmluZSBBRF9ETUFfUkVTSUJDCTB4ODQJLyogUkVTIGludGVycnVwdCBiYXNlIGNvdW50ICovCisjZGVmaW5lIEFEX0RNQV9BRENJQ0MJMHg4OAkvKiBBREMgaW50ZXJydXB0IGN1cnJlbnQgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX0FEQ0lCQwkweDhjCS8qIEFEQyBpbnRlcnJ1cHQgYmFzZSBjb3VudCAqLworI2RlZmluZSBBRF9ETUFfU1lOSUNDCTB4OTAJLyogU1lOIGludGVycnVwdCBjdXJyZW50IGNvdW50ICovCisjZGVmaW5lIEFEX0RNQV9TWU5JQkMJMHg5NAkvKiBTWU4gaW50ZXJydXB0IGJhc2UgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX1dBVklDQwkweDk4CS8qIFdBViBpbnRlcnJ1cHQgY3VycmVudCBjb3VudCAqLworI2RlZmluZSBBRF9ETUFfV0FWSUJDCTB4OWMJLyogV0FWIGludGVycnVwdCBiYXNlIGNvdW50ICovCisjZGVmaW5lIEFEX0RNQV9SRVNDVFJMCTB4YTAJLyogUkVTIFBDSSBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSBBRF9ETUFfQURDQ1RSTAkweGE4CS8qIEFEQyBQQ0kgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUgQURfRE1BX1NZTkNUUkwJMHhiMAkvKiBTWU4gUENJIGNvbnRyb2wvc3RhdHVzICovCisjZGVmaW5lIEFEX0RNQV9XQVZDVFJMCTB4YjgJLyogV0FWIFBDSSBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSBBRF9ETUFfRElTUgkweGMwCS8qIFBDSSBETUEgaW50ciBzdGF0dXMgKi8KKyNkZWZpbmUgQURfRE1BX0NIU1MJMHhjNAkvKiBQQ0kgRE1BIGNoYW5uZWwgc3RvcCBzdGF0dXMgKi8KIAotI2RlZmluZSBBRF9HUElPSVBDCTB4YzgJLyogSU8gcG9ydCBjdHJsICovCi0jZGVmaW5lIEFEX0dQSU9PUAkweGNhCS8qIElPIG91dHB1dCBzdGF0dXMgKi8KLSNkZWZpbmUgQURfR1BJT0lQCTB4Y2MJLyogSU8gaW5wdXQgc3RhdHVzICovCisjZGVmaW5lIEFEX0dQSU9fSVBDCTB4YzgJLyogSU8gcG9ydCBjdHJsICovCisjZGVmaW5lIEFEX0dQSU9fT1AJMHhjYQkvKiBJTyBvdXRwdXQgc3RhdHVzICovCisjZGVmaW5lIEFEX0dQSU9fSVAJMHhjYwkvKiBJTyBpbnB1dCBzdGF0dXMgKi8KIAogLyogQUM5NyByZWdpc3RlcnMsIDB4MTAwIC0gMHgxN2Y7IHNlZSBhYzk3LmggKi8KLSNkZWZpbmUgQURfQUNJQwkJMHgxODAJLyogQUMgTGluayBpbnRlcmZhY2UgY3RybCAqLworI2RlZmluZSBBRF9BQzk3X0JBU0UgICAgMHgxMDAgICAvKiBhYzk3IGJhc2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURfQUM5N19BQ0lDCTB4MTgwCS8qIEFDIExpbmsgaW50ZXJmYWNlIGN0cmwgKi8KIAogLyogT1BMMzsgQkFSMSAqLwotI2RlZmluZSBBRF9PUExNMEFTCTB4MDAJLyogTXVzaWMwIGFkZHJlc3Mvc3RhdHVzICovCi0jZGVmaW5lIEFEX09QTE0wREFUQQkweDAxCS8qIE11c2ljMCBkYXRhICovCi0jZGVmaW5lIEFEX09QTE0xQQkweDAyCS8qIE11c2ljMSBhZGRyZXNzICovCi0jZGVmaW5lIEFEX09QTE0xREFUQQkweDAzCS8qIE11c2ljMSBkYXRhICovCisjZGVmaW5lIEFEX09QTF9NMEFTCTB4MDAJLyogTXVzaWMwIGFkZHJlc3Mvc3RhdHVzICovCisjZGVmaW5lIEFEX09QTF9NMERBVEEJMHgwMQkvKiBNdXNpYzAgZGF0YSAqLworI2RlZmluZSBBRF9PUExfTTFBCTB4MDIJLyogTXVzaWMxIGFkZHJlc3MgKi8KKyNkZWZpbmUgQURfT1BMX00xREFUQQkweDAzCS8qIE11c2ljMSBkYXRhICovCiAvKiAweDA0LTB4MGYgcmVzZXJ2ZWQgKi8KIAogLyogTUlESTsgQkFSMiAqLwpAQCAtNTksOSArNjAsOSBAQAogI2RlZmluZSBBRF9NSVNDCQkweDAxCS8qIE1JREkgc3RhdHVzL2NtZCAqLwogLyogMHgwMi0weGZmIHJlc2VydmVkICovCiAKLSNkZWZpbmUgQURfRFNJT01FTVNJWkUJNTEyCi0jZGVmaW5lIEFEX09QTE1FTVNJWkUJMTYKLSNkZWZpbmUgQURfTUlESU1FTVNJWkUJMTYKKyNkZWZpbmUgQURfRFNfSU9NRU1TSVpFCTUxMgorI2RlZmluZSBBRF9PUExfTUVNU0laRQkxNgorI2RlZmluZSBBRF9NSURJX01FTVNJWkUJMTYKIAogI2RlZmluZSBBRF9XQVZfU1RBVEUJMAogI2RlZmluZSBBRF9BRENfU1RBVEUJMQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19jb21tb24uYyBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfY29tbW9uLmMKaW5kZXggODEzMTU5OS4uODgyYWU5OCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19jb21tb24uYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvdGFzX2NvbW1vbi5jCkBAIC0xOTUsOCArMTk1LDggQEAKIAogCXByaW50ayhLRVJOX0lORk8gInRhcyBkcml2ZXIgWyVzXSlcbiIsIGRyaXZlcl9uYW1lKTsKIAotI2lmbmRlZiBDT05GSUdfSTJDX0tFWVdFU1QKLQlyZXF1ZXN0X21vZHVsZSgiaTJjLWtleXdlc3QiKTsKKyNpZm5kZWYgQ09ORklHX0kyQ19QT1dFUk1BQworCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKICNlbmRpZgogCXRhc19ub2RlID0gZmluZF9kZXZpY2VzKCJkZXEiKTsKIAlpZiAodGFzX25vZGUgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYyBiL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYwppbmRleCAwY2Q0NGE2Li4zNzIxYzU4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZW11MTBrMS9tYWluLmMKKysrIGIvc291bmQvb3NzL2VtdTEwazEvbWFpbi5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlICJod2FjY2Vzcy5oIgogI2luY2x1ZGUgIjgwMTAuaCIKQEAgLTExOSw3ICsxMjAsNyBAQAogIAogCiAvKiB0aGUgZW11MTBrMSBfc2VlbXNfIHRvIG9ubHkgc3VwcG9ydHMgMjkgYml0ICg1MTJNaUIpIGJpdCBidXMgbWFzdGVyICovCi0jZGVmaW5lIEVNVTEwSzFfRE1BX01BU0sgICAgICAgICAgICAgICAgMHgxZmZmZmZmZgkvKiBETUEgYnVmZmVyIG1hc2sgZm9yIHBjaV9hbGxvY19jb25zaXN0ICovCisjZGVmaW5lIEVNVTEwSzFfRE1BX01BU0sgRE1BXzI5QklUX01BU0sJLyogRE1BIGJ1ZmZlciBtYXNrIGZvciBwY2lfYWxsb2NfY29uc2lzdCAqLwogCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DUkVBVElWRSAweDExMDIKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9ubTI1Nl9hdWRpby5jIGIvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKaW5kZXggN2RlMDc5Yi4uNmU2NjJhYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKQEAgLTk2MCw3ICs5NjAsNyBAQAogCiAKIC8qIEluc3RhbGxzIHRoZSBBQzk3IG1peGVyIGludG8gQ0FSRC4gICovCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIG5tMjU2X2luc3RhbGxfbWl4ZXIgKHN0cnVjdCBubTI1Nl9pbmZvICpjYXJkKQogewogICAgIGludCBtaXhlcjsKQEAgLTk5NSw3ICs5OTUsNyBAQAogICogUkFNLgogICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19kZXZpbml0CiBubTI1Nl9wZWVrX2Zvcl9zaWcgKHN0cnVjdCBubTI1Nl9pbmZvICpjYXJkKQogewogICAgIHUzMiBwb3J0MW9mZnNldCAKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAgICAgY2FyZC0+cGxheWluZyAgPSAwOwogICAgIGNhcmQtPnJlY29yZGluZyA9IDA7CiAgICAgY2FyZC0+cmV2ID0gcmV2OwotCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKKyAgICBzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CiAKICAgICAvKiBJbml0IHRoZSBtZW1vcnkgcG9ydCBpbmZvLiAgKi8KICAgICBmb3IgKHggPSAwOyB4IDwgMjsgeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDFlMmUxOTMuLmEyMDgxODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC0xNSw2ICsxNSwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWQxODg5LgogCitjb25maWcgU05EX0FMUzMwMAorICAgICAgICB0cmlzdGF0ZSAiQXZhbmNlIExvZ2ljIEFMUzMwMC9BTFMzMDArIgorICAgICAgICBkZXBlbmRzIG9uIFNORAorICAgICAgICBzZWxlY3QgU05EX1BDTQorICAgICAgICBzZWxlY3QgU05EX0FDOTdfQ09ERUMKKyAgICAgICAgc2VsZWN0IFNORF9PUEwzX0xJQgorICAgICAgICBoZWxwCisgICAgICAgICAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBdmFuY2UgTG9naWMgQUxTMzAwL0FMUzMwMCsKKworICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKyAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBzbmQtYWxzMzAwCisKIGNvbmZpZyBTTkRfQUxTNDAwMAogCXRyaXN0YXRlICJBdmFuY2UgTG9naWMgQUxTNDAwMCIKIAlkZXBlbmRzIG9uIFNORCAmJiBJU0FfRE1BX0FQSQpAQCAtMTk1LDggKzIwNyw5IEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0Nnh4LgogCiBjb25maWcgU05EX0NTNDZYWF9ORVdfRFNQCi0JYm9vbCAiQ2lycnVzIExvZ2ljIChTb3VuZCBGdXNpb24pIE5ldyBEU1Agc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNORF9DUzQ2WFggJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiQ2lycnVzIExvZ2ljIChTb3VuZCBGdXNpb24pIE5ldyBEU1Agc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNORF9DUzQ2WFgKKyAgICAgICAgZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byB1c2UgYSBuZXcgRFNQIGltYWdlIGZvciBTUERJRiBhbmQgZHVhbCBjb2RlY3MuCiAKQEAgLTQ2Niw2ICs0NzksMTkgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1wY3hoci4KIAorY29uZmlnIFNORF9SSVBUSURFCisJdHJpc3RhdGUgIkNvbmV4YW50IFJpcHRpZGUiCisJZGVwZW5kcyBvbiBTTkQKKwlkZXBlbmRzIG9uIEZXX0xPQURFUgorCXNlbGVjdCBTTkRfT1BMM19MSUIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCisJc2VsZWN0IFNORF9BQzk3X0NPREVDCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBDb25leGFudCBSaXB0aWRlIGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1yaXB0aWRlCisKIGNvbmZpZyBTTkRfUk1FMzIKIAl0cmlzdGF0ZSAiUk1FIERpZ2kzMiwgMzIvOCwgMzIgUFJPIgogCWRlcGVuZHMgb24gU05ECmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvTWFrZWZpbGUgYi9zb3VuZC9wY2kvTWFrZWZpbGUKaW5kZXggYTZjM2NkNS4uY2JhNTEwNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL01ha2VmaWxlCisrKyBiL3NvdW5kL3BjaS9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKICMKIAogc25kLWFkMTg4OS1vYmpzIDo9IGFkMTg4OS5vCitzbmQtYWxzMzAwLW9ianMgOj0gYWxzMzAwLm8KIHNuZC1hbHM0MDAwLW9ianMgOj0gYWxzNDAwMC5vCiBzbmQtYXRpaXhwLW9ianMgOj0gYXRpaXhwLm8KIHNuZC1hdGlpeHAtbW9kZW0tb2JqcyA6PSBhdGlpeHBfbW9kZW0ubwpAQCAtMjcsNiArMjgsNyBAQAogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX0FEMTg4OSkgKz0gc25kLWFkMTg4OS5vCitvYmotJChDT05GSUdfU05EX0FMUzMwMCkgKz0gc25kLWFsczMwMC5vCiBvYmotJChDT05GSUdfU05EX0FMUzQwMDApICs9IHNuZC1hbHM0MDAwLm8KIG9iai0kKENPTkZJR19TTkRfQVRJSVhQKSArPSBzbmQtYXRpaXhwLm8KIG9iai0kKENPTkZJR19TTkRfQVRJSVhQX01PREVNKSArPSBzbmQtYXRpaXhwLW1vZGVtLm8KQEAgLTYyLDYgKzY0LDcgQEAKIAltaXhhcnQvIFwKIAlubTI1Ni8gXAogCXBjeGhyLyBcCisJcmlwdGlkZS8gXAogCXJtZTk2NTIvIFwKIAl0cmlkZW50LyBcCiAJeW1mcGNpLyBcCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKaW5kZXggMjc4MzE5Yi4uZDA1MjAwNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwpAQCAtMTYwLDYgKzE2MCw3IEBACiB7IDB4NTQ1ODRlMjAsIDB4ZmZmZmZmZmYsICJUTEMzMjBBRDl4QyIsCU5VTEwsCQlOVUxMIH0sCiB7IDB4NTY0OTQxNjEsIDB4ZmZmZmZmZmYsICJWSUExNjEyQSIsCQlOVUxMLAkJTlVMTCB9LCAvLyBtb2RpZmllZCBJQ0UxMjMyIHdpdGggUy9QRElGCiB7IDB4NTY0OTQxNzAsIDB4ZmZmZmZmZmYsICJWSUExNjE3QSIsCQlwYXRjaF92dDE2MTdhLAlOVUxMIH0sIC8vIG1vZGlmaWVkIFZUMTYxNiB3aXRoIFMvUERJRgoreyAweDU2NDk0MTgyLCAweGZmZmZmZmZmLCAiVklBMTYxOCIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDU3NDU0MzAxLCAweGZmZmZmZmZmLCAiVzgzOTcxRCIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDU3NGQ0YzAwLCAweGZmZmZmZmZmLCAiV005NzAxQSIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDU3NGQ0QzAzLCAweGZmZmZmZmZmLCAiV005NzAzLFdNOTcwNyxXTTk3MDgsV005NzE3IiwgcGF0Y2hfd29sZnNvbjAzLCBOVUxMfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCBjNmM4MzMzLi5lZWNlMWM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC0xMDUyLDcgKzEwNTEsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FkMTg4OV9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWQxODg5X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU5BTE9HX0RFVklDRVMsIFBDSV9ERVZJQ0VfSURfQUQxODg5SlMpIH0sCiAJeyAwLCB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBmYzkyYjY4Li5lMmRiYzIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yNzksNyArMjc5LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hbGlfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FsaV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTU0NTEpLCAwLCAwLCAwfSwKIAl7MCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFiMDhhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC0wLDAgKzEsODY3IEBACisvKgorICogIGFsczMwMC5jIC0gZHJpdmVyIGZvciBBdmFuY2UgTG9naWMgQUxTMzAwL0FMUzMwMCsgc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgYnkgQXNoIFdpbGxpcyA8YXNod2lsbGlzQHByb2dyYW1tZXIubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogIFRPRE8KKyAqICA0IGNoYW5uZWwgcGxheWJhY2sgZm9yIEFMUzMwMCsKKyAqICBnYW1lcG9ydAorICogIG1wdTQwMQorICogIG9wbDMKKyAqCisgKiAgTk9URVMKKyAqICBUaGUgQkxPQ0tfQ09VTlRFUiByZWdpc3RlcnMgZm9yIHRoZSBBTFMzMDAoKykgcmV0dXJuIGEgZmlndXJlIHJlbGF0ZWQgdG8KKyAqICB0aGUgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgcGVyaW9kLCBOT1QgdGhlIHdob2xlIGJ1ZmZlci4gSXQgaXMgaW1wb3J0YW50CisgKiAgdG8ga25vdyB3aGljaCBwZXJpb2Qgd2UgYXJlIGluIHNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgcG9pbnRlci4KKyAqICBUaGlzIGlzIHdoeSB3ZSBhbHdheXMgdXNlIDIgcGVyaW9kcy4gV2UgY2FuIHRoZW4gdXNlIGEgZmxpcC1mbG9wIHZhcmlhYmxlCisgKiAgdG8ga2VlcCB0cmFjayBvZiB3aGF0IHBlcmlvZCB3ZSBhcmUgaW4uCisgKi8KKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisjaW5jbHVkZSA8c291bmQvb3BsMy5oPgorCisvKiBzbmRfYWxzMzAwX3NldF9pcnFfZmxhZyAqLworI2RlZmluZSBJUlFfRElTQUJMRQkJMAorI2RlZmluZSBJUlFfRU5BQkxFCQkxCisKKy8qIEkvTyBwb3J0IGxheW91dCAqLworI2RlZmluZSBBQzk3X0FDQ0VTUwkJMHgwMAorI2RlZmluZSBBQzk3X1JFQUQJCTB4MDQKKyNkZWZpbmUgQUM5N19TVEFUVVMJCTB4MDYKKyNkZWZpbmUgICBBQzk3X0RBVEFfQVZBSUwJCSgxPDw2KQorI2RlZmluZSAgIEFDOTdfQlVTWQkJCSgxPDw3KQorI2RlZmluZSBBTFMzMDBfSVJRX1NUQVRVUwkweDA3CQkvKiBBTFMzMDAgT25seSAqLworI2RlZmluZSAgIElSUV9QTEFZQkFDSwkJCSgxPDwzKQorI2RlZmluZSAgIElSUV9DQVBUVVJFCQkJKDE8PDIpCisjZGVmaW5lIEdDUl9EQVRBCQkweDA4CisjZGVmaW5lIEdDUl9JTkRFWAkJMHgwQworI2RlZmluZSBBTFMzMDBQX0RSQU1fSVJRX1NUQVRVUwkweDBECQkvKiBBTFMzMDArIE9ubHkgKi8KKyNkZWZpbmUgTVBVX0lSUV9TVEFUVVMJCTB4MEUJCS8qIEFMUzMwMCBSZXYuIEUrLCBBTFMzMDArICovCisjZGVmaW5lIEFMUzMwMFBfSVJRX1NUQVRVUwkweDBGCQkvKiBBTFMzMDArIE9ubHkgKi8KKworLyogR2VuZXJhbCBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBQTEFZQkFDS19TVEFSVAkJMHg4MAorI2RlZmluZSBQTEFZQkFDS19FTkQJCTB4ODEKKyNkZWZpbmUgUExBWUJBQ0tfQ09OVFJPTAkweDgyCisjZGVmaW5lICAgVFJBTlNGRVJfU1RBUlQJCSgxPDwxNikKKyNkZWZpbmUgICBGSUZPX1BBVVNFCQkJKDE8PDE3KQorI2RlZmluZSBSRUNPUkRfU1RBUlQJCTB4ODMKKyNkZWZpbmUgUkVDT1JEX0VORAkJMHg4NAorI2RlZmluZSBSRUNPUkRfQ09OVFJPTAkJMHg4NQorI2RlZmluZSBEUkFNX1dSSVRFX0NPTlRST0wJMHg4QgorI2RlZmluZSAgIFdSSVRFX1RSQU5TX1NUQVJUCQkoMTw8MTYpCisjZGVmaW5lICAgRFJBTV9NT0RFXzIJCQkoMTw8MTcpCisjZGVmaW5lIE1JU0NfQ09OVFJPTAkJMHg4QworI2RlZmluZSAgIElSUV9TRVRfQklUCQkJKDE8PDE1KQorI2RlZmluZSAgIFZNVVRFX05PUk1BTAkJCSgxPDwyMCkKKyNkZWZpbmUgICBNTVVURV9OT1JNQUwJCQkoMTw8MjEpCisjZGVmaW5lIE1VU19WT0NfVk9MCQkweDhFCisjZGVmaW5lIFBMQVlCQUNLX0JMT0NLX0NPVU5URVIJMHg5QQorI2RlZmluZSBSRUNPUkRfQkxPQ0tfQ09VTlRFUgkweDlCCisKKyNkZWZpbmUgREVCVUdfQ0FMTFMJMQorI2RlZmluZSBERUJVR19QTEFZX1JFQwkxCisKKyNpZiBERUJVR19DQUxMUworI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxzKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpIHByaW50ayhLRVJOX0VSUiAiLS0+ICVzXG4iLCBfX0ZVTkNUSU9OX18pCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCkgcHJpbnRrKEtFUk5fRVJSICI8LS0gJXNcbiIsIF9fRlVOQ1RJT05fXykKKyNlbHNlCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKQorI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCkKKyNlbmRpZgorCisjaWYgREVCVUdfUExBWV9SRUMKKyNkZWZpbmUgc25kX2FsczMwMF9kYmdwbGF5KGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgc25kX2FsczMwMF9kYmdwbGF5KGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgkJCisKK2VudW0ge0RFVklDRV9BTFMzMDAsIERFVklDRV9BTFMzMDBfUExVU307CisKK01PRFVMRV9BVVRIT1IoIkFzaCBXaWxsaXMgPGFzaHdpbGxpc0Bwcm9ncmFtbWVyLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXZhbmNlIExvZ2ljIEFMUzMwMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7QXZhbmNlIExvZ2ljLEFMUzMwMH0se0F2YW5jZSBMb2dpYyxBTFMzMDArfX0iKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKKworc3RydWN0IHNuZF9hbHMzMDAgeworCXVuc2lnbmVkIGxvbmcgcG9ydDsKKwlzcGlubG9ja190IHJlZ19sb2NrOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmNhcHR1cmVfc3Vic3RyZWFtOworCisJc3RydWN0IHNuZF9hYzk3ICphYzk3OworCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKKworCXN0cnVjdCByZXNvdXJjZSAqcmVzX3BvcnQ7CisKKwlpbnQgaXJxOworCisJaW50IGNoaXBfdHlwZTsgLyogQUxTMzAwIG9yIEFMUzMwMCsgKi8KKworCWNoYXIgcmV2aXNpb247CQorfTsKKworc3RydWN0IHNuZF9hbHMzMDBfc3Vic3RyZWFtX2RhdGEgeworCWludCBwZXJpb2RfZmxpcGZsb3A7CisJaW50IGNvbnRyb2xfcmVnaXN0ZXI7CisJaW50IGJsb2NrX2NvdW50ZXJfcmVnaXN0ZXI7Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FsczMwMF9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsgMHg0MDA1LCAweDAzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERFVklDRV9BTFMzMDAgfSwKKwl7IDB4NDAwNSwgMHgwMzA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfQUxTMzAwX1BMVVMgfSwKKwl7IDAsIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbmRfYWxzMzAwX2lkcyk7CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNuZF9hbHMzMDBfZ2NyX3JlYWQodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBzaG9ydCByZWcpCit7CisJb3V0YihyZWcsIHBvcnQrR0NSX0lOREVYKTsKKwlyZXR1cm4gaW5sKHBvcnQrR0NSX0RBVEEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2FsczMwMF9nY3Jfd3JpdGUodW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCQkJdW5zaWduZWQgc2hvcnQgcmVnLCB1MzIgdmFsKQoreworCW91dGIocmVnLCBwb3J0K0dDUl9JTkRFWCk7CisJb3V0bCh2YWwsIHBvcnQrR0NSX0RBVEEpOworfQorCisvKiBFbmFibGUvRGlzYWJsZSBJbnRlcnJ1cHRzICovCitzdGF0aWMgdm9pZCBzbmRfYWxzMzAwX3NldF9pcnFfZmxhZyhzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCwgaW50IGNtZCkKK3sKKwl1MzIgdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCBNSVNDX0NPTlRST0wpOworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisKKwkvKiBib29sZWFuIFhPUiBjaGVjaywgc2luY2Ugb2xkIHZzLiBuZXcgaGFyZHdhcmUgaGF2ZQorCSAgIGRpcmVjdGx5IHJldmVyc2VkIGJpdCBzZXR0aW5nIGZvciBFTkFCTEUgYW5kIERJU0FCTEUuCisJICAgQUxTMzAwKyBhY3RzIGxpa2UgbmV3ZXIgdmVyc2lvbnMgb2YgQUxTMzAwICovCisJaWYgKCgoY2hpcC0+cmV2aXNpb24gPiA1IHx8IGNoaXAtPmNoaXBfdHlwZSA9PSBERVZJQ0VfQUxTMzAwX1BMVVMpIF4KKwkJCQkJCShjbWQgPT0gSVJRX0VOQUJMRSkpID09IDApCisJCXRtcCB8PSBJUlFfU0VUX0JJVDsKKwllbHNlCisJCXRtcCAmPSB+SVJRX1NFVF9CSVQ7CisJc25kX2FsczMwMF9nY3Jfd3JpdGUoY2hpcC0+cG9ydCwgTUlTQ19DT05UUk9MLCB0bXApOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9mcmVlKHN0cnVjdCBzbmRfYWxzMzAwICpjaGlwKQoreworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJc25kX2FsczMwMF9zZXRfaXJxX2ZsYWcoY2hpcCwgSVJRX0RJU0FCTEUpOworCWlmIChjaGlwLT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKwlrZnJlZShjaGlwKTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisJcmV0dXJuIHNuZF9hbHMzMDBfZnJlZShjaGlwKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNuZF9hbHMzMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXU4IHN0YXR1czsKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGRldl9pZDsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YTsKKworCXN0YXR1cyA9IGluYihjaGlwLT5wb3J0K0FMUzMwMF9JUlFfU1RBVFVTKTsKKwlpZiAoIXN0YXR1cykgLyogc2hhcmVkIElSUSwgZm9yIGRpZmZlcmVudCBkZXZpY2U/PyBFeGl0IEFTQVAhICovCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIEFDSyBldmVyeXRoaW5nIEFTQVAgKi8KKwlvdXRiKHN0YXR1cywgY2hpcC0+cG9ydCtBTFMzMDBfSVJRX1NUQVRVUyk7CisJaWYgKHN0YXR1cyAmIElSUV9QTEFZQkFDSykgeworCQlpZiAoY2hpcC0+cGNtICYmIGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSkgeworCQkJZGF0YSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJZGF0YS0+cGVyaW9kX2ZsaXBmbG9wIF49IDE7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSk7CisJCQlzbmRfYWxzMzAwX2RiZ3BsYXkoIklSUV9QTEFZQkFDS1xuIik7CisJCX0KKwl9CisJaWYgKHN0YXR1cyAmIElSUV9DQVBUVVJFKSB7CisJCWlmIChjaGlwLT5wY20gJiYgY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pIHsKKwkJCWRhdGEgPSBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJZGF0YS0+cGVyaW9kX2ZsaXBmbG9wIF49IDE7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKKwkJCXNuZF9hbHMzMDBfZGJncGxheSgiSVJRX0NBUFRVUkVcbiIpOworCQl9CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHNuZF9hbHMzMDBwbHVzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1OCBnZW5lcmFsLCBtcHUsIGRyYW07CisJc3RydWN0IHNuZF9hbHMzMDAgKmNoaXAgPSBkZXZfaWQ7CisJc3RydWN0IHNuZF9hbHMzMDBfc3Vic3RyZWFtX2RhdGEgKmRhdGE7CisJCisJZ2VuZXJhbCA9IGluYihjaGlwLT5wb3J0K0FMUzMwMFBfSVJRX1NUQVRVUyk7CisJbXB1ID0gaW5iKGNoaXAtPnBvcnQrTVBVX0lSUV9TVEFUVVMpOworCWRyYW0gPSBpbmIoY2hpcC0+cG9ydCtBTFMzMDBQX0RSQU1fSVJRX1NUQVRVUyk7CisKKwkvKiBzaGFyZWQgSVJRLCBmb3IgZGlmZmVyZW50IGRldmljZT8/IEV4aXQgQVNBUCEgKi8KKwlpZiAoKGdlbmVyYWwgPT0gMCkgJiYgKChtcHUgJiAweDgwKSA9PSAwKSAmJiAoKGRyYW0gJiAweDAxKSA9PSAwKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKGdlbmVyYWwgJiBJUlFfUExBWUJBQ0spIHsKKwkJaWYgKGNoaXAtPnBjbSAmJiBjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pIHsKKwkJCW91dGIoSVJRX1BMQVlCQUNLLCBjaGlwLT5wb3J0K0FMUzMwMFBfSVJRX1NUQVRVUyk7CisJCQlkYXRhID0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJCQlkYXRhLT5wZXJpb2RfZmxpcGZsb3AgXj0gMTsKKwkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKTsKKwkJCXNuZF9hbHMzMDBfZGJncGxheSgiSVJRX1BMQVlCQUNLXG4iKTsKKwkJfQorCX0KKwlpZiAoZ2VuZXJhbCAmIElSUV9DQVBUVVJFKSB7CisJCWlmIChjaGlwLT5wY20gJiYgY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pIHsKKwkJCW91dGIoSVJRX0NBUFRVUkUsIGNoaXAtPnBvcnQrQUxTMzAwUF9JUlFfU1RBVFVTKTsKKwkJCWRhdGEgPSBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJZGF0YS0+cGVyaW9kX2ZsaXBmbG9wIF49IDE7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKKwkJCXNuZF9hbHMzMDBfZGJncGxheSgiSVJRX0NBUFRVUkVcbiIpOworCQl9CisJfQorCS8qIEZJWE1FOiBBY2sgb3RoZXIgaW50ZXJydXB0IHR5cGVzLiBOb3QgaW1wb3J0YW50IHJpZ2h0IG5vdyBhcworCSAqIHRob3NlIG90aGVyIGRldmljZXMgYXJlbid0IGVuYWJsZWQuICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2FsczMwMF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCXNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfYWxzMzAwX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJCQkJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCWludCBpOworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQlpZiAoKGluYihjaGlwLT5wb3J0K0FDOTdfU1RBVFVTKSAmIChBQzk3X0JVU1kpKSA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCW91dGwoKHJlZyA8PCAyNCkgfCAoMSA8PCAzMSksIGNoaXAtPnBvcnQrQUM5N19BQ0NFU1MpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQlpZiAoKGluYihjaGlwLT5wb3J0K0FDOTdfU1RBVFVTKSAmIChBQzk3X0RBVEFfQVZBSUwpKSAhPSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCXJldHVybiBpbncoY2hpcC0+cG9ydCtBQzk3X1JFQUQpOworfQorCitzdGF0aWMgdm9pZCBzbmRfYWxzMzAwX2FjOTdfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorCQkJCXVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCWludCBpOworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQlpZiAoKGluYihjaGlwLT5wb3J0K0FDOTdfU1RBVFVTKSAmIChBQzk3X0JVU1kpKSA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCW91dGwoKHJlZyA8PCAyNCkgfCB2YWwsIGNoaXAtPnBvcnQrQUM5N19BQ0NFU1MpOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfYWM5NyhzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTdfYnVzICpidXM7CisJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIGFjOTc7CisJaW50IGVycjsKKwlzdGF0aWMgc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgb3BzID0geworCQkud3JpdGUgPSBzbmRfYWxzMzAwX2FjOTdfd3JpdGUsCisJCS5yZWFkID0gc25kX2FsczMwMF9hYzk3X3JlYWQsCisJfTsKKworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJaWYgKChlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgTlVMTCwgJmJ1cykpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCW1lbXNldCgmYWM5NywgMCwgc2l6ZW9mKGFjOTcpKTsKKwlhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiBzbmRfYWM5N19taXhlcihidXMsICZhYzk3LCAmY2hpcC0+YWM5Nyk7Cit9CisKKy8qIGhhcmR3YXJlIGRlZmluaXRpb24KKyAqCisgKiBJbiBBQzk3IG1vZGUsIHdlIGFsd2F5cyB1c2UgNDhrLzE2Yml0L3N0ZXJlby4KKyAqIEFueSByZXF1ZXN0IHRvIGNoYW5nZSBkYXRhIHR5cGUgaXMgaWdub3JlZCBieQorICogdGhlIGNhcmQgd2hlbiBpdCBpcyBydW5uaW5nIG91dHNpZGUgb2YgbGVnYWN5CisgKiBtb2RlLgorICovCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2FsczMwMF9wbGF5YmFja19odyA9Cit7CisJLmluZm8gPQkJCShTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzE2LAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPQkJNDgwMDAsCisJLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5jaGFubmVsc19taW4gPQkJMiwKKwkuY2hhbm5lbHNfbWF4ID0JCTIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPQk2NCAqIDEwMjQsCisJLnBlcmlvZF9ieXRlc19taW4gPQk2NCwKKwkucGVyaW9kX2J5dGVzX21heCA9CTMyICogMTAyNCwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfYWxzMzAwX2NhcHR1cmVfaHcgPQoreworCS5pbmZvID0JCQkoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1MxNiwKKwkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfNDgwMDAsCisJLnJhdGVfbWluID0JCTQ4MDAwLAorCS5yYXRlX21heCA9CQk0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0JCTIsCisJLmNoYW5uZWxzX21heCA9CQkyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JNjQgKiAxMDI0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0JNjQsCisJLnBlcmlvZF9ieXRlc19tYXggPQkzMiAqIDEwMjQsCisJLnBlcmlvZHNfbWluID0JCTIsCisJLnBlcmlvZHNfbWF4ID0JCTIsCit9OworCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfYWxzMzAwX3N1YnN0cmVhbV9kYXRhICpkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX2FsczMwMF9wbGF5YmFja19odzsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCWRhdGEtPmNvbnRyb2xfcmVnaXN0ZXIgPSBQTEFZQkFDS19DT05UUk9MOworCWRhdGEtPmJsb2NrX2NvdW50ZXJfcmVnaXN0ZXIgPSBQTEFZQkFDS19CTE9DS19DT1VOVEVSOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YTsKKworCWRhdGEgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCWtmcmVlKGRhdGEpOworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSA9IE5VTEw7CisJc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9hbHMzMDAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX2FsczMwMF9jYXB0dXJlX2h3OworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGRhdGE7CisJZGF0YS0+Y29udHJvbF9yZWdpc3RlciA9IFJFQ09SRF9DT05UUk9MOworCWRhdGEtPmJsb2NrX2NvdW50ZXJfcmVnaXN0ZXIgPSBSRUNPUkRfQkxPQ0tfQ09VTlRFUjsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YTsKKworCWRhdGEgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCWtmcmVlKGRhdGEpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gTlVMTDsKKwlzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisJc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWxzMzAwX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXNuZF9wY21faHdfcGFyYW1zX3QgKiBod19wYXJhbXMpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfcGxheWJhY2tfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwl1MzIgdG1wOworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgc2hvcnQgcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgc2hvcnQgYnVmZmVyX2J5dGVzID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJCisJc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKTsKKwlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CisJdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCBQTEFZQkFDS19DT05UUk9MKTsKKwl0bXAgJj0gflRSQU5TRkVSX1NUQVJUOworCisJc25kX2FsczMwMF9kYmdwbGF5KCJQZXJpb2QgYnl0ZXM6ICVkIEJ1ZmZlciBieXRlcyAlZFxuIiwKKwkJCQkJCXBlcmlvZF9ieXRlcywgYnVmZmVyX2J5dGVzKTsKKwkKKwkvKiBzZXQgYmxvY2sgc2l6ZSAqLworCXRtcCAmPSAweGZmZmYwMDAwOworCXRtcCB8PSBwZXJpb2RfYnl0ZXMgLSAxOworCXNuZF9hbHMzMDBfZ2NyX3dyaXRlKGNoaXAtPnBvcnQsIFBMQVlCQUNLX0NPTlRST0wsIHRtcCk7CisKKwkvKiBzZXQgZG1hIGFyZWEgKi8KKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBQTEFZQkFDS19TVEFSVCwKKwkJCQkJcnVudGltZS0+ZG1hX2FkZHIpOworCXNuZF9hbHMzMDBfZ2NyX3dyaXRlKGNoaXAtPnBvcnQsIFBMQVlCQUNLX0VORCwKKwkJCQkJcnVudGltZS0+ZG1hX2FkZHIgKyBidWZmZXJfYnl0ZXMgLSAxKTsKKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXUzMiB0bXA7CisJc3RydWN0IHNuZF9hbHMzMDAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBzaG9ydCBwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBzaG9ydCBidWZmZXJfYnl0ZXMgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOworCXRtcCA9IHNuZF9hbHMzMDBfZ2NyX3JlYWQoY2hpcC0+cG9ydCwgUkVDT1JEX0NPTlRST0wpOworCXRtcCAmPSB+VFJBTlNGRVJfU1RBUlQ7CisKKwlzbmRfYWxzMzAwX2RiZ3BsYXkoIlBlcmlvZCBieXRlczogJWQgQnVmZmVyIGJ5dGVzICVkXG4iLCBwZXJpb2RfYnl0ZXMsCisJCQkJCQkJYnVmZmVyX2J5dGVzKTsKKworCS8qIHNldCBibG9jayBzaXplICovCisJdG1wICY9IDB4ZmZmZjAwMDA7CisJdG1wIHw9IHBlcmlvZF9ieXRlcyAtIDE7CisKKwkvKiBzZXQgZG1hIGFyZWEgKi8KKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBSRUNPUkRfQ09OVFJPTCwgdG1wKTsKKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBSRUNPUkRfU1RBUlQsCisJCQkJCXJ1bnRpbWUtPmRtYV9hZGRyKTsKKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBSRUNPUkRfRU5ELAorCQkJCQlydW50aW1lLT5kbWFfYWRkciArIGJ1ZmZlcl9ieXRlcyAtIDEpOworCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXUzMiB0bXA7CisJc3RydWN0IHNuZF9hbHMzMDBfc3Vic3RyZWFtX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgc2hvcnQgcmVnOworCWludCByZXQgPSAwOworCisJZGF0YSA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXJlZyA9IGRhdGEtPmNvbnRyb2xfcmVnaXN0ZXI7CisKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCByZWcpOworCQlkYXRhLT5wZXJpb2RfZmxpcGZsb3AgPSAxOworCQlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCByZWcsIHRtcCB8IFRSQU5TRkVSX1NUQVJUKTsKKwkJc25kX2FsczMwMF9kYmdwbGF5KCJUUklHR0VSIFNUQVJUXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCByZWcpOworCQlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCByZWcsIHRtcCAmIH5UUkFOU0ZFUl9TVEFSVCk7CisJCXNuZF9hbHMzMDBfZGJncGxheSgiVFJJR0dFUiBTVE9QXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQl0bXAgPSBzbmRfYWxzMzAwX2djcl9yZWFkKGNoaXAtPnBvcnQsIHJlZyk7CisJCXNuZF9hbHMzMDBfZ2NyX3dyaXRlKGNoaXAtPnBvcnQsIHJlZywgdG1wIHwgRklGT19QQVVTRSk7CisJCXNuZF9hbHMzMDBfZGJncGxheSgiVFJJR0dFUiBQQVVTRVxuIik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCByZWcpOworCQlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCByZWcsIHRtcCAmIH5GSUZPX1BBVVNFKTsKKwkJc25kX2FsczMwMF9kYmdwbGF5KCJUUklHR0VSIFJFTEVBU0VcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbmRfYWxzMzAwX2RiZ3BsYXkoIlRSSUdHRVIgSU5WQUxJRFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisJc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX2FsczMwMF9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXUxNiBjdXJyZW50X3B0cjsKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBzaG9ydCBwZXJpb2RfYnl0ZXM7CisKKwlkYXRhID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJCisJc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKTsKKwlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKKwljdXJyZW50X3B0ciA9ICh1MTYpIHNuZF9hbHMzMDBfZ2NyX3JlYWQoY2hpcC0+cG9ydCwKKwkJCQkJZGF0YS0+YmxvY2tfY291bnRlcl9yZWdpc3RlcikgKyA0OworCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisJaWYgKGN1cnJlbnRfcHRyID4gcGVyaW9kX2J5dGVzKQorCQljdXJyZW50X3B0ciA9IDA7CisJZWxzZQorCQljdXJyZW50X3B0ciA9IHBlcmlvZF9ieXRlcyAtIGN1cnJlbnRfcHRyOworCisJaWYgKGRhdGEtPnBlcmlvZF9mbGlwZmxvcCA9PSAwKQorCQljdXJyZW50X3B0ciArPSBwZXJpb2RfYnl0ZXM7CisJc25kX2FsczMwMF9kYmdwbGF5KCJQb2ludGVyIChieXRlcyk6ICVkXG4iLCBjdXJyZW50X3B0cik7CisJc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKTsKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgY3VycmVudF9wdHIpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9hbHMzMDBfcGxheWJhY2tfb3BzID0geworCS5vcGVuID0JCXNuZF9hbHMzMDBfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPQlzbmRfYWxzMzAwX3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPQlzbmRfYWxzMzAwX3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPQlzbmRfYWxzMzAwX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0Jc25kX2FsczMwMF9wbGF5YmFja19wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX2FsczMwMF90cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX2FsczMwMF9wb2ludGVyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfYWxzMzAwX2NhcHR1cmVfb3BzID0geworCS5vcGVuID0JCXNuZF9hbHMzMDBfY2FwdHVyZV9vcGVuLAorCS5jbG9zZSA9CXNuZF9hbHMzMDBfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0Jc25kX2FsczMwMF9wY21faHdfcGFyYW1zLAorCS5od19mcmVlID0Jc25kX2FsczMwMF9wY21faHdfZnJlZSwKKwkucHJlcGFyZSA9CXNuZF9hbHMzMDBfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX2FsczMwMF90cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX2FsczMwMF9wb2ludGVyLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2FsczMwMF9uZXdfcGNtKHN0cnVjdCBzbmRfYWxzMzAwICpjaGlwKQoreworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IGVycjsKKworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIkFMUzMwMCIsIDAsIDEsIDEsICZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlzdHJjcHkocGNtLT5uYW1lLCAiQUxTMzAwIik7CisJY2hpcC0+cGNtID0gcGNtOworCisJLyogc2V0IG9wZXJhdG9ycyAqLworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisJCQkJJnNuZF9hbHMzMDBfcGxheWJhY2tfb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkJJnNuZF9hbHMzMDBfY2FwdHVyZV9vcHMpOworCisJLyogcHJlLWFsbG9jYXRpb24gb2YgYnVmZmVycyAqLworCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLCA2NCoxMDI0LCA2NCoxMDI0KTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfYWxzMzAwX2luaXQoc3RydWN0IHNuZF9hbHMzMDAgKmNoaXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG1wOworCQorCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJY2hpcC0+cmV2aXNpb24gPSAoc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCBNSVNDX0NPTlRST0wpID4+IDE2KQorCQkJCQkJCQkmIDB4MDAwMDAwMEY7CisJLyogU2V0dXAgRFJBTSAqLworCXRtcCA9IHNuZF9hbHMzMDBfZ2NyX3JlYWQoY2hpcC0+cG9ydCwgRFJBTV9XUklURV9DT05UUk9MKTsKKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBEUkFNX1dSSVRFX0NPTlRST0wsCisJCQkJCQkodG1wIHwgRFJBTV9NT0RFXzIpCisJCQkJCQkmIH5XUklURV9UUkFOU19TVEFSVCk7CisKKwkvKiBFbmFibGUgSVJRIG91dHB1dCAqLworCXNuZF9hbHMzMDBfc2V0X2lycV9mbGFnKGNoaXAsIElSUV9FTkFCTEUpOworCisJLyogVW5tdXRlIGhhcmR3YXJlIGRldmljZXMgc28gdGhlaXIgb3V0cHV0cyBnZXQgcm91dGVkIHRvCisJICogdGhlIG9uYm9hcmQgbWl4ZXIgKi8KKwl0bXAgPSBzbmRfYWxzMzAwX2djcl9yZWFkKGNoaXAtPnBvcnQsIE1JU0NfQ09OVFJPTCk7CisJc25kX2FsczMwMF9nY3Jfd3JpdGUoY2hpcC0+cG9ydCwgTUlTQ19DT05UUk9MLAorCQkJdG1wIHwgVk1VVEVfTk9STUFMIHwgTU1VVEVfTk9STUFMKTsKKworCS8qIFJlc2V0IHZvbHVtZXMgKi8KKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBNVVNfVk9DX1ZPTCwgMCk7CisKKwkvKiBNYWtlIHN1cmUgcGxheWJhY2sgdHJhbnNmZXIgaXMgc3RvcHBlZCAqLworCXRtcCA9IHNuZF9hbHMzMDBfZ2NyX3JlYWQoY2hpcC0+cG9ydCwgUExBWUJBQ0tfQ09OVFJPTCk7CisJc25kX2FsczMwMF9nY3Jfd3JpdGUoY2hpcC0+cG9ydCwgUExBWUJBQ0tfQ09OVFJPTCwKKwkJCXRtcCAmIH5UUkFOU0ZFUl9TVEFSVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWxzMzAwX2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLAorCQkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgY2hpcF90eXBlLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2FsczMwMCAqKnJjaGlwKQoreworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwOworCXZvaWQgKmlycV9oYW5kbGVyOworCWludCBlcnI7CisKKwlzdGF0aWMgc25kX2RldmljZV9vcHNfdCBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF9hbHMzMDBfZGV2X2ZyZWUsCisJfTsKKwkqcmNoaXAgPSBOVUxMOworCisJc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKTsKKwlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCB8fAorCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZXJyb3Igc2V0dGluZyAyOGJpdCBETUEgbWFza1xuIik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlwY2lfc2V0X21hc3RlcihwY2kpOworCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisJY2hpcC0+cGNpID0gcGNpOworCWNoaXAtPmlycSA9IC0xOworCWNoaXAtPmNoaXBfdHlwZSA9IGNoaXBfdHlwZTsKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOworCisJaWYgKChlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgIkFMUzMwMCIpKSA8IDApIHsKKwkJa2ZyZWUoY2hpcCk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQlyZXR1cm4gZXJyOworCX0KKwljaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CisKKwlpZiAoY2hpcC0+Y2hpcF90eXBlID09IERFVklDRV9BTFMzMDBfUExVUykKKwkJaXJxX2hhbmRsZXIgPSBzbmRfYWxzMzAwcGx1c19pbnRlcnJ1cHQ7CisJZWxzZQorCQlpcnFfaGFuZGxlciA9IHNuZF9hbHMzMDBfaW50ZXJydXB0OworCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBpcnFfaGFuZGxlciwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCQkJCQljYXJkLT5zaG9ydG5hbWUsICh2b2lkICopY2hpcCkpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CisJCXNuZF9hbHMzMDBfZnJlZShjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY2hpcC0+aXJxID0gcGNpLT5pcnE7CisKKworCXNuZF9hbHMzMDBfaW5pdChjaGlwKTsKKworCWlmIChzbmRfYWxzMzAwX2FjOTcoY2hpcCkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZCBub3QgY3JlYXRlIGFjOTdcbiIpOworCQlzbmRfYWxzMzAwX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKChlcnIgPSBzbmRfYWxzMzAwX25ld19wY20oY2hpcCkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGQgbm90IGNyZWF0ZSBQQ01cbiIpOworCQlzbmRfYWxzMzAwX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsCisJCQkJCQljaGlwLCAmb3BzKSkgPCAwKSB7CisJCXNuZF9hbHMzMDBfZnJlZShjaGlwKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CisKKwkqcmNoaXAgPSBjaGlwOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc25kX2FsczMwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKwlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CisJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3KTsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CisJcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfc2V0X21hc3RlcihwY2kpOworCisJc25kX2FsczMwMF9pbml0KGNoaXApOworCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3KTsKKworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWxzMzAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CisJc3RhdGljIGludCBkZXY7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwOworCWludCBlcnIsIGNoaXBfdHlwZTsKKworCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZW5hYmxlW2Rldl0pIHsKKwkJZGV2Kys7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCisJaWYgKGNhcmQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGlwX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOworCisJaWYgKChlcnIgPSBzbmRfYWxzMzAwX2NyZWF0ZShjYXJkLCBwY2ksIGNoaXBfdHlwZSwgJmNoaXApKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBTFMzMDAiKTsKKwlpZiAoY2hpcC0+Y2hpcF90eXBlID09IERFVklDRV9BTFMzMDBfUExVUykKKwkJLyogZG9uJ3Qga25vdyBtdWNoIGFib3V0IEFMUzMwMCsgeWV0CisJCSAqIHByaW50IHJldmlzaW9uIG51bWJlciBmb3Igbm93ICovCisJCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAiQUxTMzAwKyAoUmV2LiAlZCkiLCBjaGlwLT5yZXZpc2lvbik7CisJZWxzZQorCQlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgIkFMUzMwMCAoUmV2LiAlYykiLCAnQScgKworCQkJCQkJCWNoaXAtPnJldmlzaW9uIC0gMSk7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCisJCQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5wb3J0LCBjaGlwLT5pcnEpOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIGNhcmQpOworCWRldisrOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworCS5uYW1lID0gIkFMUzMwMCIsCisJLmlkX3RhYmxlID0gc25kX2FsczMwMF9pZHMsCisJLnByb2JlID0gc25kX2FsczMwMF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2FsczMwMF9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc25kX2FsczMwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbmRfYWxzMzAwX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2FsczMwMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfYWxzMzAwX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFsc2FfY2FyZF9hbHMzMDBfaW5pdCkKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9hbHMzMDBfZXhpdCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IDEwMGQ4MTIuLjYwNDIzYjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHM0MDAwLmMKKysrIGIvc291bmQvcGNpL2FsczQwMDAuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWxzNDAwMF9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWxzNDAwMF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHg0MDA1LCAweDQwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sICAgLyogQUxTNDAwMCAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCAxMmU2MTg4Li5kMGY3NTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAogLyoKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hdGlpeHBfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F0aWl4cF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMDAyLCAweDQzNDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgLyogU0IyMDAgKi8KIAl7IDB4MTAwMiwgMHg0MzYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sIC8qIFNCMzAwICovCiAJeyAweDEwMDIsIDB4NDM3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAvKiBTQjQwMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDFkMzc2NjAuLjEyYTM0YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiAvKgogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F0aWl4cF9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXRpaXhwX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDEwMDIsIDB4NDM0ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAvKiBTQjIwMCAqLwogCXsgMHgxMDAyLCAweDQzNzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgLyogU0I0MDAgKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgxMC5jCmluZGV4IGZjZTIyYzcuLmJkMzM1MjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MTAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MTAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9BVVJFQUwsIFBDSV9ERVZJQ0VfSURfQVVSRUFMX0FEVkFOVEFHRSwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSx9LAogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5jCmluZGV4IGQxZmJjY2UuLjdlM2ZkODMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MjAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MjAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9BVVJFQUwsIFBDSV9ERVZJQ0VfSURfQVVSRUFMX1ZPUlRFWF8xLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLH0sCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODMwLmMKaW5kZXggZDRmMjcxNy4uYjg0MGY2NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgzMC5jCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgImF1ODgzMC5oIgogI2luY2x1ZGUgImF1ODh4MC5oIgotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZvcnRleF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX0FVUkVBTCwgUENJX0RFVklDRV9JRF9BVVJFQUxfVk9SVEVYXzIsCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsfSwKIAl7MCx9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaAppbmRleCBkNjVjY2IxLi5mMDc4YjcxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmgKQEAgLTE5LDcgKzE5LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMjc3LDE0ICsyNzYsMTQgQEAKICNlbmRpZgogCiAvKiBEcml2ZXIgc3R1ZmYuICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB2b3J0ZXhfZ2FtZXBvcnRfcmVnaXN0ZXIodm9ydGV4X3QgKiBjYXJkKTsKK3N0YXRpYyBpbnQgdm9ydGV4X2dhbWVwb3J0X3JlZ2lzdGVyKHZvcnRleF90ICogY2FyZCk7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfZ2FtZXBvcnRfdW5yZWdpc3Rlcih2b3J0ZXhfdCAqIGNhcmQpOwogI2lmbmRlZiBDSElQX0FVODgyMAotc3RhdGljIGludCBfX2RldmluaXQgdm9ydGV4X2VxX2luaXQodm9ydGV4X3QgKiB2b3J0ZXgpOwotc3RhdGljIGludCBfX2RldmV4aXQgdm9ydGV4X2VxX2ZyZWUodm9ydGV4X3QgKiB2b3J0ZXgpOworc3RhdGljIGludCB2b3J0ZXhfZXFfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCk7CitzdGF0aWMgaW50IHZvcnRleF9lcV9mcmVlKHZvcnRleF90ICogdm9ydGV4KTsKICNlbmRpZgogLyogQUxTQSBzdHVmZi4gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF92b3J0ZXhfbmV3X3BjbSh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGlkeCwgaW50IG5yKTsKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF92b3J0ZXhfbWl4ZXIodm9ydGV4X3QgKiB2b3J0ZXgpOwotc3RhdGljIGludCBfX2RldmluaXQgc25kX3ZvcnRleF9taWRpKHZvcnRleF90ICogdm9ydGV4KTsKK3N0YXRpYyBpbnQgc25kX3ZvcnRleF9uZXdfcGNtKHZvcnRleF90ICogdm9ydGV4LCBpbnQgaWR4LCBpbnQgbnIpOworc3RhdGljIGludCBzbmRfdm9ydGV4X21peGVyKHZvcnRleF90ICogdm9ydGV4KTsKK3N0YXRpYyBpbnQgc25kX3ZvcnRleF9taWRpKHZvcnRleF90ICogdm9ydGV4KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCmluZGV4IDljYWMwMmUuLjQzNDdlNmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKQEAgLTI2NTgsNyArMjY1OCw3IEBACiAKIC8qIEluaXRpYWxpemF0aW9uICovCiAKLXN0YXRpYyBpbnQgdm9ydGV4X2NvcmVfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZvcnRleF9jb3JlX2luaXQodm9ydGV4X3QgKiB2b3J0ZXgpCiB7CiAKIAlwcmludGsoS0VSTl9JTkZPICJWb3J0ZXg6IGluaXQuLi4uICIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2VxLmMKaW5kZXggNjRmYmZiYi4uMGM4NmEzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcS5jCkBAIC04ODUsNyArODg1LDcgQEAKIH07CiAKIC8qIEFMU0EgZHJpdmVyIGVudHJ5IHBvaW50cy4gSW5pdCBhbmQgZXhpdC4gKi8KLXN0YXRpYyBpbnQgdm9ydGV4X2VxX2luaXQodm9ydGV4X3QgKiB2b3J0ZXgpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2b3J0ZXhfZXFfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbDsKIAlpbnQgZXJyLCBpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfcGNtLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYwppbmRleCA2YTEzY2ExLi43YjViYWExIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAJaW50IGk7CiAJaW50IGVyciwgbnJfY2FwdDsKIAotCWlmICgoY2hpcCA9PSAwKSB8fCAoaWR4IDwgMCkgfHwgKGlkeCA+IFZPUlRFWF9QQ01fTEFTVCkpCisJaWYgKChjaGlwID09IDApIHx8IChpZHggPCAwKSB8fCAoaWR4ID49IFZPUlRFWF9QQ01fTEFTVCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogaWR4IGluZGljYXRlcyB3aGljaCBraW5kIG9mIFBDTSBkZXZpY2UuIEFEQiwgU1BESUYsIEkyUyBhbmQgQTNEIHNoYXJlIHRoZSAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDY4MDA3N2UuLjUyYTM2NDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJaW50IGlycTsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXpmMzMyOF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXpmMzMyOF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMjJELCAweDUwREMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiBQQ0kxNjgvMzMyOCAqLwogCXsgMHgxMjJELCAweDgwREEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiAzMzI4ICovCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDdiNDRhOGQuLjllZTA3ZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC03NzQsNyArNzc0LDcgQEAKIAkgIC5kcml2ZXJfZGF0YSA9IHJhdGUgfQogCiAvKiBkcml2ZXJfZGF0YSBpcyB0aGUgZGVmYXVsdCBkaWdpdGFsX3JhdGUgdmFsdWUgZm9yIHRoYXQgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2J0ODd4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCS8qIEhhdXBwYXVnZSBXaW5UViBzZXJpZXMgKi8KIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDAwNzAsIDB4MTNlYiwgMzIwMDApLAogCS8qIEhhdXBwYXVnZSBXaW5UViBzZXJpZXMgKi8KQEAgLTkxMSw3ICs5MTEsNyBAQAogCiAvKiBkZWZhdWx0IGVudHJpZXMgZm9yIGFsbCBCdDg3eCBjYXJkcyAtIGl0J3Mgbm90IGV4cG9ydGVkICovCiAvKiBkcml2ZXJfZGF0YSBpcyBzZXQgdG8gMCB0byBjYWxsIGRldGVjdGlvbiAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9kZWZhdWx0X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9kZWZhdWx0X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCksCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCksCiAJeyB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggOTQ3NzgzOC4uZmQ4YmZlYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMTU2MSw3ICsxNTYxLDcgQEAKIH0KIAogLy8gUENJIElEcwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jYTAxMDZfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NhMDEwNl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMTAyLCAweDAwMDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwJLyogQXVkaWd5IExTIG9yIExpdmUgMjRiaXQgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggMmVjYmRkYi4uZTVjZTJkYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMjYwOSw3ICsyNjA5LDcgQEAKICNlbmRpZgogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY21pcGNpX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jbWlwY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9DTUVESUEsIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX0NNRURJQSwgUENJX0RFVklDRV9JRF9DTUVESUFfQ004MzM4QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfQ01FRElBLCBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTg3MzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDI4MS5jIGIvc291bmQvcGNpL2NzNDI4MS5jCmluZGV4IDRmNjVlYzUuLmIzYzk0ZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQyODEuYworKysgYi9zb3VuZC9wY2kvY3M0MjgxLmMKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2NzNDI4MV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M0MjgxX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczQyODFfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTAxMywgMHg2MDA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAkvKiBDUzQyODEgKi8KIAl7IDAsIH0KIH07CkBAIC0xMDQ2LDcgKzEwNDYsNyBAQAogCQlzbmRfY3M0MjgxX3Bva2VCQTAoY2hpcCwgcmVnTCwgdm9sTCk7CiAJCWNoYW5nZSA9IDE7CiAJfQotCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAhPSB2b2xMKSB7CisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICE9IHZvbFIpIHsKIAkJdm9sUiA9IENTX1ZPTF9NQVNLIC0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICYgQ1NfVk9MX01BU0spOwogCQlzbmRfY3M0MjgxX3Bva2VCQTAoY2hpcCwgcmVnUiwgdm9sUik7CiAJCWNoYW5nZSA9IDE7CkBAIC0xNDE2LDcgKzE0MTYsNyBAQAogc3RhdGljIGludCBzbmRfY3M0MjgxX2NoaXBfaW5pdChzdHJ1Y3QgY3M0MjgxICpjaGlwKQogewogCXVuc2lnbmVkIGludCB0bXA7Ci0JaW50IHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKIAlpbnQgcmV0cnlfY291bnQgPSAyOwogCiAJLyogSGF2aW5nIEVQUE1DLkZQRE49MSBwcmV2ZW50IHByb3BlciBjaGlwIGluaXRpYWxpc2F0aW9uICovCkBAIC0xNDk2LDcgKzE0OTYsNyBAQAogCS8qCiAJICogV2FpdCBmb3IgdGhlIERMTCByZWFkeSBzaWduYWwgZnJvbSB0aGUgY2xvY2sgbG9naWMuCiAJICovCi0JdGltZW91dCA9IDEwMDsKKwllbmRfdGltZSA9IGppZmZpZXMgKyBIWjsKIAlkbyB7CiAJCS8qCiAJCSAqICBSZWFkIHRoZSBBQzk3IHN0YXR1cyByZWdpc3RlciB0byBzZWUgaWYgd2UndmUgc2VlbiBhIENPREVDCkBAIC0xNTA0LDggKzE1MDQsOCBAQAogCQkgKi8KIAkJaWYgKHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBCQTBfQ0xLQ1IxKSAmIEJBMF9DTEtDUjFfRExMUkRZKQogCQkJZ290byBfX29rMDsKLQkJbXNsZWVwKDEpOwotCX0gd2hpbGUgKHRpbWVvdXQtLSA+IDApOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKGVuZF90aW1lLCBqaWZmaWVzKSk7CiAKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJETExSRFkgbm90IHNlZW5cbiIpOwogCXJldHVybiAtRUlPOwpAQCAtMTUyMiw3ICsxNTIyLDcgQEAKIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBjb2RlYyByZWFkeSBzaWduYWwgZnJvbSB0aGUgQUM5NyBjb2RlYy4KIAkgKi8KLQl0aW1lb3V0ID0gMTAwOworCWVuZF90aW1lID0gamlmZmllcyArIEhaOwogCWRvIHsKIAkJLyoKIAkJICogIFJlYWQgdGhlIEFDOTcgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlZSBpZiB3ZSd2ZSBzZWVuIGEgQ09ERUMKQEAgLTE1MzAsMjAgKzE1MzAsMjAgQEAKIAkJICovCiAJCWlmIChzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgQkEwX0FDU1RTKSAmIEJBMF9BQ1NUU19DUkRZKQogCQkJZ290byBfX29rMTsKLQkJbXNsZWVwKDEpOwotCX0gd2hpbGUgKHRpbWVvdXQtLSA+IDApOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKGVuZF90aW1lLCBqaWZmaWVzKSk7CiAKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJuZXZlciByZWFkIGNvZGVjIHJlYWR5IGZyb20gQUMnOTcgKDB4JXgpXG4iLCBzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgQkEwX0FDU1RTKSk7CiAJcmV0dXJuIC1FSU87CiAKICAgICAgIF9fb2sxOgogCWlmIChjaGlwLT5kdWFsX2NvZGVjKSB7Ci0JCXRpbWVvdXQgPSAxMDA7CisJCWVuZF90aW1lID0gamlmZmllcyArIEhaOwogCQlkbyB7CiAJCQlpZiAoc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIEJBMF9BQ1NUUzIpICYgQkEwX0FDU1RTX0NSRFkpCiAJCQkJZ290byBfX2NvZGVjMl9vazsKLQkJCW1zbGVlcCgxKTsKLQkJfSB3aGlsZSAodGltZW91dC0tID4gMCk7CisJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJfSB3aGlsZSAodGltZV9hZnRlcl9lcShlbmRfdGltZSwgamlmZmllcykpOwogCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAic2Vjb25kYXJ5IGNvZGVjIGRvZXNuJ3QgcmVzcG9uZC4gZGlzYWJsZSBpdC4uLlxuIik7CiAJCWNoaXAtPmR1YWxfY29kZWMgPSAwOwogCV9fY29kZWMyX29rOiA7CkBAIC0xNTYxLDcgKzE1NjEsNyBAQAogCSAqICB0aGUgY29kZWMgaXMgcHVtcGluZyBBREMgZGF0YSBhY3Jvc3MgdGhlIEFDLWxpbmsuCiAJICovCiAKLQl0aW1lb3V0ID0gMTAwOworCWVuZF90aW1lID0gamlmZmllcyArIEhaOwogCWRvIHsKIAkJLyoKIAkJICogIFJlYWQgdGhlIGlucHV0IHNsb3QgdmFsaWQgcmVnaXN0ZXIgYW5kIHNlZSBpZiBpbnB1dCBzbG90cyAzCkBAIC0xNTY5LDggKzE1NjksOCBAQAogCQkgKi8KICAgICAgICAgICAgICAgICBpZiAoKHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBCQTBfQUNJU1YpICYgKEJBMF9BQ0lTVl9TTFYoMykgfCBCQTBfQUNJU1ZfU0xWKDQpKSkgPT0gKEJBMF9BQ0lTVl9TTFYoMykgfCBCQTBfQUNJU1ZfU0xWKDQpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gX19vazI7Ci0JCW1zbGVlcCgxKTsKLQl9IHdoaWxlICh0aW1lb3V0LS0gPiAwKTsKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJfSB3aGlsZSAodGltZV9hZnRlcl9lcShlbmRfdGltZSwgamlmZmllcykpOwogCiAJaWYgKC0tcmV0cnlfY291bnQgPiAwKQogCQlnb3RvIF9fcmV0cnk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwppbmRleCBjNTkwNjAyLi44NDhkNzcyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKQEAgLTY1LDcgKzY1LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShtbWFwX3ZhbGlkLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobW1hcF92YWxpZCwgIlN1cHBvcnQgT1NTIG1tYXAuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M0Nnh4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczQ2eHhfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKICAgICAgICAgeyAweDEwMTMsIDB4NjAwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBDUzQyODAgKi8KICAgICAgICAgeyAweDEwMTMsIDB4NjAwMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBDUzQ2MTIgKi8KICAgICAgICAgeyAweDEwMTMsIDB4NjAwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBDUzQ2MTUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggOWZjN2YzOC4uMmMxMjEzYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczU1MzVhdWRpb19pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M1NTM1YXVkaW9faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0FVRElPLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKIAl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfQVVESU8sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggMmRmYTkzMi4uNDJiMTFiYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtNzcsNyArNzcsNyBAQAogLyoKICAqIENsYXNzIDA0MDE6IDExMDI6MDAwOCAocmV2IDAwKSBTdWJzeXN0ZW06IDExMDI6MTAwMSAtPiBBdWRpZ3kyIFZhbHVlICBNb2RlbDpTQjA0MDAKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDExMDIsIDB4MDAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAkvKiBFTVUxMEsxICovCiAJeyAweDExMDIsIDB4MDAwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSB9LAkvKiBBdWRpZ3kgKi8KIAl7IDB4MTEwMiwgMHgwMDA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCS8qIEF1ZGlneSAyIFZhbHVlIFNCMDQwMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCAzMWNiOWI0Li42YmZhMDg0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtODQzLDggKzg0MywxMSBAQAogCSAuc3BkaWZfYnVnID0gMSwKIAkgLmFjOTdfY2hpcCA9IDF9ICwKIAkvKiBUZXN0ZWQgYnkgc2hhbmUtYWxzYUBjbS5udSA1dGggTm92IDIwMDUgKi8KKwkvKiBUaGUgMHgyMDA2MTEwMiBkb2VzIGhhdmUgU0IwMzUwIHdyaXR0ZW4gb24gaXQKKwkgKiBKdXN0IGxpa2UgMHgyMDAyMTEwMgorCSAqLwogCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDA0LCAuc3Vic3lzdGVtID0gMHgyMDA2MTEwMiwKLQkgLmRyaXZlciA9ICJBdWRpZ3kyIiwgLm5hbWUgPSAiQXVkaWd5IDIgWzIwMDZdIiwgCisJIC5kcml2ZXIgPSAiQXVkaWd5MiIsIC5uYW1lID0gIkF1ZGlneSAyIFtTQjAzNTBiXSIsIAogCSAuaWQgPSAiQXVkaWd5MiIsCiAJIC5lbXUxMGsyX2NoaXAgPSAxLAogCSAuY2EwMTAyX2NoaXAgPSAxLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggM2UzMzJmMy4uZDUxMjkwYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0xNTk2LDcgKzE1OTUsNyBAQAogfQogCiAvLyBQQ0kgSURzCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VtdTEwazF4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxeF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMTAyLCAweDAwMDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwJLyogRGVsbCBPRU0gdmVyc2lvbiAoRU1VMTBLMSkgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCBhNTUzM2M4Li5jYTllMzRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2F1ZGlvcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hdWRpb3BjaV9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXVkaW9wY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKICNpZmRlZiBDSElQMTM3MAogCXsgMHgxMjc0LCAweDUwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCS8qIEVTMTM3MCAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTM4LmMgYi9zb3VuZC9wY2kvZXMxOTM4LmMKaW5kZXggNGQ2MmZlNC4uNmY5MDk0YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTkzOC5jCisrKyBiL3NvdW5kL3BjaS9lczE5MzguYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfZXMxOTM4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lczE5MzhfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VzMTkzOF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogICAgICAgICB7IDB4MTI1ZCwgMHgxOTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIFNvbG8tMSAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBlM2FkMTdmLi41ZmY0MTc1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC0xMDQsNyArMTA0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZ2FtZXBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KQEAgLTU5Myw3ICs1OTIsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2VzMTk2OF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZXMxOTY4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lczE5NjhfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAkvKiBNYWVzdHJvIDEgKi8KICAgICAgICAgeyAweDEyODUsIDB4MDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIFRZUEVfTUFFU1RSTyB9LAogCS8qIE1hZXN0cm8gMiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCA2YWI0YWVmLi5kNzJmYzI4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZm04MDFfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ZtODAxX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDEzMTksIDB4MDgwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDAsIH0sICAgLyogRk04MDEgKi8KIAl7IDB4NTIxMywgMHgwNTEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMCwgfSwgICAvKiBHYWxsYW50IE9keXNzZXkgU291bmQgNCAqLwogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggYjQyZGZmNy4uNWJlZTNiNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW4ndCBhbGxvY2F0ZSB1bnNvbGljaXRlZCBxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQl1bnNvbC0+d29ya3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJoZGFfY29kZWMiKTsKKwl1bnNvbC0+d29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaGRhX2NvZGVjIik7CiAJaWYgKCEgdW5zb2wtPndvcmtxKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2FuJ3QgY3JlYXRlIHdvcmtxdWV1ZVxuIik7CiAJCWtmcmVlKHVuc29sKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGMwOTY2MDYuLmU4MjFkNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtODEsNiArODEsNyBAQAogCQkJICJ7SW50ZWwsIEVTQjJ9LCIKIAkJCSAie0ludGVsLCBJQ0g4fSwiCiAJCQkgIntBVEksIFNCNDUwfSwiCisJCQkgIntBVEksIFNCNjAwfSwiCiAJCQkgIntWSUEsIFZUODI1MX0sIgogCQkJICJ7VklBLCBWVDgyMzdBfSwiCiAJCQkgIntTaVMsIFNJUzk2Nn0sIgpAQCAtMTYxMywxMiArMTYxNCwxMyBAQAogfQogCiAvKiBQQ0kgSURzICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXp4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF6eF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHg4MDg2LCAweDI2NjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfSUNIIH0sIC8qIElDSDYgKi8KIAl7IDB4ODA4NiwgMHgyN2Q4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX0lDSCB9LCAvKiBJQ0g3ICovCiAJeyAweDgwODYsIDB4MjY5YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9JQ0ggfSwgLyogRVNCMiAqLwogCXsgMHg4MDg2LCAweDI4NGIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfSUNIIH0sIC8qIElDSDggKi8KIAl7IDB4MTAwMiwgMHg0MzdiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX0FUSSB9LCAvKiBBVEkgU0I0NTAgKi8KKwl7IDB4MTAwMiwgMHg0MzgzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX0FUSSB9LCAvKiBBVEkgU0I2MDAgKi8KIAl7IDB4MTEwNiwgMHgzMjg4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX1ZJQSB9LCAvKiBWSUEgVlQ4MjUxL1ZUODIzN0EgKi8KIAl7IDB4MTAzOSwgMHg3NTAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX1NJUyB9LCAvKiBTSVM5NjYgKi8KIAl7IDB4MTBiOSwgMHg1NDYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX1VMSSB9LCAvKiBVTEkgTTU0NjEgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IDMyNDAxYmQuLjQwZjAwMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtNDQsNiArNDQsNyBAQAogCQkJCQkgKiBkaWdfb3V0X25pZCBhbmQgaHBfbmlkIGFyZSBvcHRpb25hbAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyX2VhcGQ7CisJdW5zaWduZWQgaW50IG5lZWRfZGFjX2ZpeDsKIAogCS8qIGNhcHR1cmUgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwpAQCAtNzk4LDggKzc5OSwxNiBAQAogCXsgLm1vZGVsbmFtZSA9ICJsYXB0b3AtZWFwZCIsCS5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTQ0ZCwgLnBjaV9zdWJkZXZpY2UgPSAweGMwMjQsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBTYW1zdW5nIFI2NS1UMjMwMCBDaGFyaXMgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTE1MywKKwkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgTTkgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTIxMywKIAkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgQTZKICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDExZjcsCisJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBBU1VTIFU1QSAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxMjk3LAorCSAgLmNvbmZpZyA9IEFEMTk4NkFfTEFQVE9QX0VBUEQgfSwgLyogQVNVUyBaNjJGICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDMwYWYsCisJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBIUCBDb21wYXEgUHJlc2FyaW8gQjI4MDAgKi8KIAl7fQogfTsKIApAQCAtODM2LDEwICs4NDUsMTQgQEAKIAljYXNlIEFEMTk4NkFfM1NUQUNLOgogCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKIAkJc3BlYy0+bWl4ZXJzWzFdID0gYWQxOTg2YV8zc3RfbWl4ZXJzOwotCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7CisJCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMzsKIAkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGFkMTk4NmFfM3N0X2luaXRfdmVyYnM7CisJCXNwZWMtPmluaXRfdmVyYnNbMl0gPSBhZDE5ODZhX2NoMl9pbml0OwogCQlzcGVjLT5jaGFubmVsX21vZGUgPSBhZDE5ODZhX21vZGVzOwogCQlzcGVjLT5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhZDE5ODZhX21vZGVzKTsKKwkJc3BlYy0+bmVlZF9kYWNfZml4ID0gMTsKKwkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwogCQlicmVhazsKIAljYXNlIEFEMTk4NkFfTEFQVE9QOgogCQlzcGVjLT5taXhlcnNbMF0gPSBhZDE5ODZhX2xhcHRvcF9taXhlcnM7CkBAIC0xMzIxLDEwICsxMzM0LDggQEAKIAogc3RhdGljIHN0cnVjdCBoZGFfYm9hcmRfY29uZmlnIGFkMTk4MV9jZmdfdGJsW10gPSB7CiAJeyAubW9kZWxuYW1lID0gImhwIiwgLmNvbmZpZyA9IEFEMTk4MV9IUCB9LAotCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwM2MsIC5wY2lfc3ViZGV2aWNlID0gMHgzMGFhLAotCSAgLmNvbmZpZyA9IEFEMTk4MV9IUCB9LCAvKiBIUCBueDYzMjAgKi8KLQl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAucGNpX3N1YmRldmljZSA9IDB4MzA5ZiwKLQkgIC5jb25maWcgPSBBRDE5ODFfSFAgfSwgLyogSFAgbng5NDIwIEFuZ2VsRmlyZSAqLworCS8qIEFsbCBIUCBtb2RlbHMgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAuY29uZmlnID0gQUQxOTgxX0hQIH0sCiAJeyAubW9kZWxuYW1lID0gImJhc2ljIiwgLmNvbmZpZyA9IEFEMTk4MV9CQVNJQyB9LAogCXt9CiB9OwpAQCAtMTU1NSw2ICsxNTY2LDggQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpZiAoc3BlYy0+bmVlZF9kYWNfZml4KQorCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IHNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyAvIDI7CiAJcmV0dXJuIHNuZF9oZGFfY2hfbW9kZV9wdXQoY29kZWMsIHVjb250cm9sLCBzcGVjLT5jaGFubmVsX21vZGUsCiAJCQkJICAgc3BlYy0+bnVtX2NoYW5uZWxfbW9kZSwgJnNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyk7CiB9CkBAIC0yNjEwLDUgKzI2MjMsNiBAQAogCXsgLmlkID0gMHgxMWQ0MTk4MywgLm5hbWUgPSAiQUQxOTgzIiwgLnBhdGNoID0gcGF0Y2hfYWQxOTgzIH0sCiAJeyAuaWQgPSAweDExZDQxOTg2LCAubmFtZSA9ICJBRDE5ODZBIiwgLnBhdGNoID0gcGF0Y2hfYWQxOTg2YSB9LAogCXsgLmlkID0gMHgxMWQ0MTk4OCwgLm5hbWUgPSAiQUQxOTg4IiwgLnBhdGNoID0gcGF0Y2hfYWQxOTg4IH0sCisJeyAuaWQgPSAweDExZDQxOThiLCAubmFtZSA9ICJBRDE5ODhCIiwgLnBhdGNoID0gcGF0Y2hfYWQxOTg4IH0sCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggNGM2YzllYy4uZjBlOWE5YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAlBTEM4ODBfQ0xFVk8sCiAJQUxDODgwX1RDTF9TNzAwLAogCUFMQzg4MF9MRywKKwlBTEM4ODBfTEdfTFcsCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCUFMQzg4MF9URVNULAogI2VuZGlmCkBAIC0xMzEsNiArMTMyLDcgQEAKIAloZGFfbmlkX3QgZGlnX2luX25pZDsJCS8qIGRpZ2l0YWwtaW4gTklEOyBvcHRpb25hbCAqLwogCiAJLyogY2FwdHVyZSBzb3VyY2UgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX211eF9kZWZzOwogCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbnB1dF9tdXg7CiAJdW5zaWduZWQgaW50IGN1cl9tdXhbM107CiAKQEAgLTE3Miw2ICsxNzQsNyBAQAogCWhkYV9uaWRfdCBkaWdfaW5fbmlkOwogCXVuc2lnbmVkIGludCBudW1fY2hhbm5lbF9tb2RlOwogCWNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlICpjaGFubmVsX21vZGU7CisJdW5zaWduZWQgaW50IG51bV9tdXhfZGVmczsKIAljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW5wdXRfbXV4OwogCXZvaWQgKCp1bnNvbF9ldmVudCkoc3RydWN0IGhkYV9jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogCXZvaWQgKCppbml0X2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKik7CkBAIC0xODUsNyArMTg4LDEwIEBACiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X2luZm8oc3BlYy0+aW5wdXRfbXV4LCB1aW5mbyk7CisJdW5zaWduZWQgaW50IG11eF9pZHggPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWluZm8tPmlkKTsKKwlpZiAobXV4X2lkeCA+PSBzcGVjLT5udW1fbXV4X2RlZnMpCisJCW11eF9pZHggPSAwOworCXJldHVybiBzbmRfaGRhX2lucHV0X211eF9pbmZvKCZzcGVjLT5pbnB1dF9tdXhbbXV4X2lkeF0sIHVpbmZvKTsKIH0KIAogc3RhdGljIGludCBhbGNfbXV4X2VudW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKQEAgLTIwMyw3ICsyMDksOCBAQAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBhZGNfaWR4ID0gc25kX2N0bF9nZXRfaW9mZmlkeChrY29udHJvbCwgJnVjb250cm9sLT5pZCk7Ci0JcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X3B1dChjb2RlYywgc3BlYy0+aW5wdXRfbXV4LCB1Y29udHJvbCwKKwl1bnNpZ25lZCBpbnQgbXV4X2lkeCA9IGFkY19pZHggPj0gc3BlYy0+bnVtX211eF9kZWZzID8gMCA6IGFkY19pZHg7CisJcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X3B1dChjb2RlYywgJnNwZWMtPmlucHV0X211eFttdXhfaWR4XSwgdWNvbnRyb2wsCiAJCQkJICAgICBzcGVjLT5hZGNfbmlkc1thZGNfaWR4XSwgJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF0pOwogfQogCkBAIC0yNDUsNyArMjUyLDggQEAKICAqIHN0YXRlcyBvdGhlciB0aGFuIEhpWiAoZWc6IFBJTl9WUkVGeHgpIGFuZCByZXZlcnQgdG8gSGlaIGlmIGFueSBvZiB0aGVzZQogICogYXJlIHJlcXVlc3RlZC4gIFRoZXJlZm9yZSBvcmRlciB0aGlzIGxpc3Qgc28gdGhhdCB0aGlzIGJlaGF2aW91ciB3aWxsIG5vdAogICogY2F1c2UgcHJvYmxlbXMgd2hlbiBtaXhlciBjbGllbnRzIG1vdmUgdGhyb3VnaCB0aGUgZW51bSBzZXF1ZW50aWFsbHkuCi0gKiBOSURzIDB4MGYgYW5kIDB4MTAgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGhhdmUgdGhpcyBiZWhhdmlvdXIuCisgKiBOSURzIDB4MGYgYW5kIDB4MTAgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGhhdmUgdGhpcyBiZWhhdmlvdXIgYXMgb2YKKyAqIE1hcmNoIDIwMDYuCiAgKi8KIHN0YXRpYyBjaGFyICphbGNfcGluX21vZGVfbmFtZXNbXSA9IHsKIAkiTWljIDUwcGMgYmlhcyIsICJNaWMgODBwYyBiaWFzIiwKQEAgLTI1NSwxOSArMjYzLDI3IEBACiAJUElOX1ZSRUY1MCwgUElOX1ZSRUY4MCwgUElOX0lOLCBQSU5fT1VULCBQSU5fSFAsCiB9OwogLyogVGhlIGNvbnRyb2wgY2FuIHByZXNlbnQgYWxsIDUgb3B0aW9ucywgb3IgaXQgY2FuIGxpbWl0IHRoZSBvcHRpb25zIGJhc2VkCi0gKiBpbiB0aGUgcGluIGJlaW5nIGFzc3VtZWQgdG8gYmUgZXhjbHVzaXZlbHkgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IHBpbi4KKyAqIGluIHRoZSBwaW4gYmVpbmcgYXNzdW1lZCB0byBiZSBleGNsdXNpdmVseSBhbiBpbnB1dCBvciBhbiBvdXRwdXQgcGluLiAgSW4KKyAqIGFkZGl0aW9uLCAiaW5wdXQiIHBpbnMgbWF5IG9yIG1heSBub3QgcHJvY2VzcyB0aGUgbWljIGJpYXMgb3B0aW9uCisgKiBkZXBlbmRpbmcgb24gYWN0dWFsIHdpZGdldCBjYXBhYmlsaXR5IChOSURzIDB4MGYgYW5kIDB4MTAgZG9uJ3Qgc2VlbSB0bworICogYWNjZXB0IHJlcXVlc3RzIGZvciBiaWFzIGFzIG9mIGNoaXAgdmVyc2lvbnMgdXAgdG8gTWFyY2ggMjAwNikgYW5kL29yCisgKiB3aXJpbmcgaW4gdGhlIGNvbXB1dGVyLgogICovCi0jZGVmaW5lIEFMQ19QSU5fRElSX0lOICAgIDB4MDAKLSNkZWZpbmUgQUxDX1BJTl9ESVJfT1VUICAgMHgwMQotI2RlZmluZSBBTENfUElOX0RJUl9JTk9VVCAweDAyCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFMQ19QSU5fRElSX09VVCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOT1VUICAgICAgICAgICAweDAyCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOX05PTUlDQklBUyAgICAweDAzCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOT1VUX05PTUlDQklBUyAweDA0CiAKLS8qIEluZm8gYWJvdXQgdGhlIHBpbiBtb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIHRocmVlIGRpZmZlcmVudCBwaW4gZGlyZWN0aW9ucy4gCisvKiBJbmZvIGFib3V0IHRoZSBwaW4gbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBkaWZmZXJlbnQgcGluIGRpcmVjdGlvbiBtb2Rlcy4gCiAgKiBGb3IgZWFjaCBkaXJlY3Rpb24gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGFyZSBnaXZlbi4KICAqLwotc3RhdGljIHNpZ25lZCBjaGFyIGFsY19waW5fbW9kZV9kaXJfaW5mb1szXVsyXSA9IHsKK3N0YXRpYyBzaWduZWQgY2hhciBhbGNfcGluX21vZGVfZGlyX2luZm9bNV1bMl0gPSB7CiAJeyAwLCAyIH0sICAgIC8qIEFMQ19QSU5fRElSX0lOICovCiAJeyAzLCA0IH0sICAgIC8qIEFMQ19QSU5fRElSX09VVCAqLwogCXsgMCwgNCB9LCAgICAvKiBBTENfUElOX0RJUl9JTk9VVCAqLworCXsgMiwgMiB9LCAgICAvKiBBTENfUElOX0RJUl9JTl9OT01JQ0JJQVMgKi8KKwl7IDIsIDQgfSwgICAgLyogQUxDX1BJTl9ESVJfSU5PVVRfTk9NSUNCSUFTICovCiB9OwogI2RlZmluZSBhbGNfcGluX21vZGVfbWluKF9kaXIpIChhbGNfcGluX21vZGVfZGlyX2luZm9bX2Rpcl1bMF0pCiAjZGVmaW5lIGFsY19waW5fbW9kZV9tYXgoX2RpcikgKGFsY19waW5fbW9kZV9kaXJfaW5mb1tfZGlyXVsxXSkKQEAgLTMyOSw5ICszNDUsMTAgQEAKIAkJICogaW5wdXQgbW9kZXMuCiAJCSAqCiAJCSAqIER5bmFtaWNhbGx5IHN3aXRjaGluZyB0aGUgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMgcHJvYmFibHkKLQkJICogcmVkdWNlcyBub2lzZSBzbGlnaHRseSwgcGFydGljdWxhcmx5IG9uIGlucHV0LiAgSG93ZXZlciwKLQkJICogaGF2aW5nYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgZW5hYmxlZAotCQkgKiBzaW11bHRhbmVvdXNseSBkb2Vzbid0IHNlZW0gdG8gYmUgcHJvYmxlbWF0aWMuCisJCSAqIHJlZHVjZXMgbm9pc2Ugc2xpZ2h0bHkgKHBhcnRpY3VsYXJseSBvbiBpbnB1dCkgc28gd2UnbGwKKwkJICogZG8gaXQuICBIb3dldmVyLCBoYXZpbmcgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMKKwkJICogZW5hYmxlZCBzaW11bHRhbmVvdXNseSBkb2Vzbid0IHNlZW0gdG8gYmUgcHJvYmxlbWF0aWMgaWYKKwkJICogdGhpcyB0dXJucyBvdXQgdG8gYmUgbmVjZXNzYXJ5IGluIHRoZSBmdXR1cmUuCiAJCSAqLwogCQlpZiAodmFsIDw9IDIpIHsKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsbmlkLDAsQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKQEAgLTQ4Myw2ICs1MDAsOSBAQAogCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gcHJlc2V0LT5kaWdfb3V0X25pZDsKIAlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBwcmVzZXQtPmhwX25pZDsKIAkKKwlzcGVjLT5udW1fbXV4X2RlZnMgPSBwcmVzZXQtPm51bV9tdXhfZGVmczsKKwlpZiAoISBzcGVjLT5udW1fbXV4X2RlZnMpCisJCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gcHJlc2V0LT5pbnB1dF9tdXg7CiAKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBwcmVzZXQtPm51bV9hZGNfbmlkczsKQEAgLTE0MjcsNiArMTQ0Nyw4MiBAQAogfQogCiAvKgorICogTEcgTFcyMAorICoKKyAqIFBpbiBhc3NpZ25tZW50OgorICogICBTcGVha2VyLW91dDogMHgxNAorICogICBNaWMtSW46IDB4MTgKKyAqICAgQnVpbHQtaW4gTWljLUluOiAweDE5ICg/KQorICogICBIUC1PdXQ6IDB4MWIKKyAqICAgU1BESUYtT3V0OiAweDFlCisgKi8KKworLyogc2VlbXMgYW5hbG9nIENEIGlzIG5vdCB3b3JraW5nICovCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwX2xnX2x3X2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAyLAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIiwgMHgwIH0sCisJCXsgIkludGVybmFsIE1pYyIsIDB4MSB9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX2xnX2x3X21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfbGdfbHdfaW5pdF92ZXJic1tdID0geworCS8qIHNldCBjYXB0dXJlIHNvdXJjZSB0byBtaWMtaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg3KX0sCisJLyogc3BlYWtlci1vdXQgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogSFAtb3V0ICovCisJezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogbWljLWluIHRvIGlucHV0ICovCisJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBidWlsdC1pbiBtaWMgKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIGphY2sgc2Vuc2UgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IDB4MX0sCisJeyB9Cit9OworCisvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCitzdGF0aWMgdm9pZCBhbGM4ODBfbGdfbHdfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE0LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNCwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKK30KKworc3RhdGljIHZvaWQgYWxjODgwX2xnX2x3X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQoreworCS8qIExvb2tzIGxpa2UgdGhlIHVuc29sIGV2ZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZAorCSAqIGRlZmluaXRpb24uICA0Yml0IHRhZyBpcyBwbGFjZWQgYXQgMjggYml0IQorCSAqLworCWlmICgocmVzID4+IDI4KSA9PSAweDAxKQorCQlhbGM4ODBfbGdfbHdfYXV0b211dGUoY29kZWMpOworfQorCisvKgogICogQ29tbW9uIGNhbGxiYWNrcwogICovCiAKQEAgLTIwNTIsNiArMjE0OCw3IEBACiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAyNSwgLnBjaV9zdWJkZXZpY2UgPSAweDAwODcsIC5jb25maWcgPSBBTEM4ODBfNlNUX0RJRyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEyOTcsIC5wY2lfc3ViZGV2aWNlID0gMHhjNzkwLCAuY29uZmlnID0gQUxDODgwXzZTVF9ESUcgfSwgLyogU2h1dHRsZSBTVDIwRzUgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxNTA5LCAucGNpX3N1YmRldmljZSA9IDB4OTI1ZCwgLmNvbmZpZyA9IEFMQzg4MF82U1RfRElHIH0sIC8qIEZJQyBQNE0tOTE1R0QxICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTY5NSwgLnBjaV9zdWJkZXZpY2UgPSAweDQwMTIsIC5jb25maWcgPSBBTEM4ODBfNVNUX0RJRyB9LCAvKiBFcG94IEVQLTVMREErIEdMaSAqLwogCiAJeyAubW9kZWxuYW1lID0gImFzdXMiLCAuY29uZmlnID0gQUxDODgwX0FTVVMgfSwKIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTk2NCwgLmNvbmZpZyA9IEFMQzg4MF9BU1VTX0RJRyB9LApAQCAtMjA3OCw2ICsyMTc1LDkgQEAKIAl7IC5tb2RlbG5hbWUgPSAibGciLCAuY29uZmlnID0gQUxDODgwX0xHIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTg1NCwgLnBjaV9zdWJkZXZpY2UgPSAweDAwM2IsIC5jb25maWcgPSBBTEM4ODBfTEcgfSwKIAorCXsgLm1vZGVsbmFtZSA9ICJsZy1sdyIsIC5jb25maWcgPSBBTEM4ODBfTEdfTFcgfSwKKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxODU0LCAucGNpX3N1YmRldmljZSA9IDB4MDAxOCwgLmNvbmZpZyA9IEFMQzg4MF9MR19MVyB9LAorCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCXsgLm1vZGVsbmFtZSA9ICJ0ZXN0IiwgLmNvbmZpZyA9IEFMQzg4MF9URVNUIH0sCiAjZW5kaWYKQEAgLTIyNjgsNiArMjM2OCwxOSBAQAogCQkudW5zb2xfZXZlbnQgPSBhbGM4ODBfbGdfdW5zb2xfZXZlbnQsCiAJCS5pbml0X2hvb2sgPSBhbGM4ODBfbGdfYXV0b211dGUsCiAJfSwKKwlbQUxDODgwX0xHX0xXXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODgwX2xnX2x3X21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCisJCQkJYWxjODgwX2xnX2x3X2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gMSwgCisJCS5kYWNfbmlkcyA9IGFsYzg4MF9kYWNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgwX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODBfMl9qYWNrX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4MF8yX2phY2tfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjODgwX2xnX2x3X2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGM4ODBfbGdfbHdfdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGM4ODBfbGdfbHdfYXV0b211dGUsCisJfSwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzg4MF9URVNUXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX3Rlc3RfbWl4ZXIgfSwKQEAgLTI1OTMsNiArMjcwNiw3IEBACiAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzOwogCisJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OwogCiAJcmV0dXJuIDE7CkBAIC0yNzIyLDMwICsyODM2LDU2IEBACiB9OwogCiAvKiBPbiBGdWppdHN1IFM3MDJ4IGxhcHRvcHMgY2FwdHVyZSBvbmx5IG1ha2VzIHNlbnNlIGZyb20gTWljL0xpbmVJbiBqYWNrLAotICogaGVhZHBob25lIGphY2sgYW5kIHRoZSBpbnRlcm5hbCBDRCBsaW5lcy4KKyAqIGhlYWRwaG9uZSBqYWNrIGFuZCB0aGUgaW50ZXJuYWwgQ0QgbGluZXMgc2luY2UgdGhlc2UgYXJlIHRoZSBvbmx5IHBpbnMgYXQKKyAqIHdoaWNoIGF1ZGlvIGNhbiBhcHBlYXIuICBGb3IgZmxleGliaWxpdHksIGFsc28gYWxsb3cgdGhlIG9wdGlvbiBvZgorICogcmVjb3JkaW5nIHRoZSBtaXhlciBvdXRwdXQgb24gdGhlIHNlY29uZCBBREMgKEFEQzAgZG9lc24ndCBoYXZlIGEKKyAqIGNvbm5lY3Rpb24gdG8gdGhlIG1peGVyIG91dHB1dCkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjBfZnVqaXRzdV9jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMywKLQkuaXRlbXMgPSB7Ci0JCXsgIk1pYy9MaW5lIiwgMHgwIH0sCi0JCXsgIkNEIiwgMHg0IH0sCi0JCXsgIkhlYWRwaG9uZSIsIDB4MiB9LAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9mdWppdHN1X2NhcHR1cmVfc291cmNlc1syXSA9IHsKKwl7CisJCS5udW1faXRlbXMgPSAzLAorCQkuaXRlbXMgPSB7CisJCQl7ICJNaWMvTGluZSIsIDB4MCB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJCXsgIkhlYWRwaG9uZSIsIDB4MiB9LAorCQl9LAogCX0sCisJeworCQkubnVtX2l0ZW1zID0gNCwKKwkJLml0ZW1zID0geworCQkJeyAiTWljL0xpbmUiLCAweDAgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCQl7ICJIZWFkcGhvbmUiLCAweDIgfSwKKwkJCXsgIk1peGVyIiwgMHg1IH0sCisJCX0sCisJfSwKKwogfTsKIAotLyogQWNlciBUcmF2ZWxNYXRlKC9FeHRlbnNhL0FzcGlyZSkgbm90ZWJvb2tzIGhhdmUgc2ltaWxhciBjb25maWd1dGF0aW9uIHRvCi0gKiB0aGUgRnVqaXRzdSBTNzAyeCwgYnV0IGphY2tzIGFyZSBtYXJrZWQgZGlmZmVyZW50bHkuIFdlIHdvbid0IGFsbG93Ci0gKiByZXRhc2tpbmcgdGhlIEhlYWRwaG9uZSBqYWNrLCBzbyBpdCB3b24ndCBiZSBhdmFpbGFibGUgaGVyZS4KKy8qIEFjZXIgVHJhdmVsTWF0ZSgvRXh0ZW5zYS9Bc3BpcmUpIG5vdGVib29rcyBoYXZlIHNpbWlsYXIgY29uZmlndXJhdGlvbiB0bworICogdGhlIEZ1aml0c3UgUzcwMngsIGJ1dCBqYWNrcyBhcmUgbWFya2VkIGRpZmZlcmVudGx5LgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDMsCi0JLml0ZW1zID0gewotCQl7ICJNaWMiLCAweDAgfSwKLQkJeyAiTGluZSIsIDB4MiB9LAotCQl7ICJDRCIsIDB4NCB9LAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlc1syXSA9IHsKKwl7CisJCS5udW1faXRlbXMgPSA0LAorCQkuaXRlbXMgPSB7CisJCQl7ICJNaWMiLCAweDAgfSwKKwkJCXsgIkxpbmUiLCAweDIgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCQl7ICJIZWFkcGhvbmUiLCAweDUgfSwKKwkJfSwKKwl9LAorCXsKKwkJLm51bV9pdGVtcyA9IDUsCisJCS5pdGVtcyA9IHsKKwkJCXsgIk1pYyIsIDB4MCB9LAorCQkJeyAiTGluZSIsIDB4MiB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJCXsgIkhlYWRwaG9uZSIsIDB4NiB9LAorCQkJeyAiTWl4ZXIiLCAweDUgfSwKKwkJfSwKIAl9LAogfTsKLQogLyoKICAqIFRoaXMgaXMganVzdCBwbGFjZS1ob2xkZXIsIHNvIHRoZXJlJ3Mgc29tZXRoaW5nIGZvciBhbGNfYnVpbGRfcGNtcyB0byBsb29rCiAgKiBhdCB3aGVuIGl0IGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzLiBBTEMyNjAgaGFzIG5vIG1peGVyCkBAIC0yODA2LDYgKzI5NDYsOSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qIEZ1aml0c3UgUzcwMnggc2VyaWVzIGxhcHRvcHMuICBBTEMyNjAgcGluIHVzYWdlOiBNaWMvTGluZSBqYWNrID0gMHgxMiwgCisgKiBIUCBqYWNrID0gMHgxNCwgQ0QgYXVkaW8gPSAgMHgxNiwgaW50ZXJuYWwgc3BlYWtlciA9IDB4MTAuCisgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfZnVqaXRzdV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLApAQCAtMjgyMiw5ICsyOTY1LDI4IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorLyogTWl4ZXIgZm9yIEFjZXIgVHJhdmVsTWF0ZSgvRXh0ZW5zYS9Bc3BpcmUpIG5vdGVib29rcy4gIE5vdGUgdGhhdCBjdXJyZW50CisgKiB2ZXJzaW9ucyBvZiB0aGUgQUxDMjYwIGRvbid0IGFjdCBvbiByZXF1ZXN0cyB0byBlbmFibGUgbWljIGJpYXMgZnJvbSBOSUQKKyAqIDB4MGYgKHVzZWQgdG8gZHJpdmUgdGhlIGhlYWRwaG9uZSBqYWNrIGluIHRoZXNlIGxhcHRvcHMpLiAgVGhlIEFMQzI2MAorICogZGF0YXNoZWV0IGRvZXNuJ3QgbWVudGlvbiB0aGlzIHJlc3RyaWN0aW9uLiAgQXQgdGhpcyBzdGFnZSBpdCdzIG5vdCBjbGVhcgorICogd2hldGhlciB0aGlzIGJlaGF2aW91ciBpcyBpbnRlbnRpb25hbCBvciBpcyBhIGhhcmR3YXJlIGJ1ZyBpbiBjaGlwCisgKiByZXZpc2lvbnMgYXZhaWxhYmxlIGluIGVhcmx5IDIwMDYuICBUaGVyZWZvcmUgZm9yIG5vdyBhbGxvdyB0aGUKKyAqICJIZWFkcGhvbmUgSmFjayBNb2RlIiBjb250cm9sIHRvIHNwYW4gYWxsIGNob2ljZXMsIGJ1dCBpZiBpdCB0dXJucyBvdXQKKyAqIHRoYXQgdGhlIGxhY2sgb2YgbWljIGJpYXMgZm9yIHRoaXMgTklEIGlzIGludGVudGlvbmFsIHdlIGNvdWxkIGNoYW5nZSB0aGUKKyAqIG1vZGUgZnJvbSBBTENfUElOX0RJUl9JTk9VVCB0byBBTENfUElOX0RJUl9JTk9VVF9OT01JQ0JJQVMuCisgKgorICogSW4gYWRkaXRpb24sIEFjZXIgVHJhdmVsTWF0ZSgvRXh0ZW5zYS9Bc3BpcmUpIG5vdGVib29rcyBpbiBlYXJseSAyMDA2CisgKiBkb24ndCBhcHBlYXIgdG8gbWFrZSB0aGUgbWljIGJpYXMgYXZhaWxhYmxlIGZyb20gdGhlICJsaW5lIiBqYWNrLCBldmVuCisgKiB0aG91Z2ggdGhlIE5JRCB1c2VkIGZvciB0aGlzIGphY2sgKDB4MTQpIGNhbiBzdXBwbHkgaXQuICBUaGUgdGhlb3J5IGlzCisgKiB0aGF0IHBlcmhhcHMgQWNlciBoYXZlIGluY2x1ZGVkIGJsb2NraW5nIGNhcGFjaXRvcnMgYmV0d2VlbiB0aGUgQUxDMjYwCisgKiBhbmQgdGhlIG91dHB1dCBqYWNrLiAgSWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgdGhlIGNhc2UgZm9yIGFsbCBzdWNoCisgKiBtb2RlbHMgdGhlICJMaW5lIEphY2sgTW9kZSIgbW9kZSBjb3VsZCBiZSBjaGFuZ2VkIGZyb20gQUxDX1BJTl9ESVJfSU5PVVQKKyAqIHRvIEFMQ19QSU5fRElSX0lOT1VUX05PTUlDQklBUy4KKyAqLwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9hY2VyX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDgsIDIsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJIZWFkcGhvbmUgSmFjayBNb2RlIiwgMHgwZiwgQUxDX1BJTl9ESVJfSU5PVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTMwMzgsNyArMzIwMCw4IEBACiB9OwogCiAvKiBJbml0aWFsaXNhdGlvbiBzZXF1ZW5jZSBmb3IgQUxDMjYwIGFzIGNvbmZpZ3VyZWQgaW4gRnVqaXRzdSBTNzAyeAotICogbGFwdG9wcy4KKyAqIGxhcHRvcHMuICBBTEMyNjAgcGluIHVzYWdlOiBNaWMvTGluZSBqYWNrID0gMHgxMiwgSFAgamFjayA9IDB4MTQsIENECisgKiBhdWRpbyA9IDB4MTYsIGludGVybmFsIHNwZWFrZXIgPSAweDEwLgogICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9mdWppdHN1X2luaXRfdmVyYnNbXSA9IHsKIAkvKiBEaXNhYmxlIGFsbCBHUElPcyAqLwpAQCAtMzE4NSwxMCArMzM0OCwxMCBAQAogCXsweDA0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAKIAkvKiBEbyBzaW1pbGFyIHdpdGggdGhlIHNlY29uZCBBREM6IG11dGUgY2FwdHVyZSBpbnB1dCBhbXAgYW5kCi0JICogc2V0IEFEQyBjb25uZWN0aW9uIHRvIGxpbmUgKG9uIGxpbmUxIHBpbikKKwkgKiBzZXQgQURDIGNvbm5lY3Rpb24gdG8gbWljIHRvIG1hdGNoIEFMU0EncyBkZWZhdWx0IHN0YXRlLgogCSAqLwogCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MDUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwKKwl7MHgwNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCiAJLyogTXV0ZSBhbGwgaW5wdXRzIHRvIG1peGVyIHdpZGdldCAoZXZlbiB1bmNvbm5lY3RlZCBvbmVzKSAqLwogCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIG1pYzEgcGluICovCkBAIC0zMjEzLDI2ICszMzc2LDM1IEBACiBzdGF0aWMgaGRhX25pZF90IGFsYzI2MF90ZXN0X2FkY19uaWRzWzJdID0gewogCTB4MDQsIDB4MDUsCiB9OwotLyogVGhpcyBpcyBhIGJpdCBtZXNzeSBzaW5jZSB0aGUgdHdvIGlucHV0IG11eGVzIGluIHRoZSBBTEMyNjAgaGF2ZSBzbGlnaHQKLSAqIHZhcmlhdGlvbnMgaW4gdGhlaXIgc2lnbmFsIGFzc2lnbm1lbnRzLiAgVGhlIGlkZWFsIHdheSB0byBkZWFsIHdpdGggdGhpcwotICogaXMgdG8gZXh0ZW5kIGFsY19zcGVjLmlucHV0X211eCB0byBhbGxvdyBhIGRpZmZlcmVudCBpbnB1dCBNVVggZm9yIGVhY2gKLSAqIEFEQy4gIEZvciB0aGUgcHVycG9zZXMgb2YgdGhlIHRlc3QgbW9kZWwgaXQncyBzdWZmaWNpZW50IHRvIGp1c3QgbGlzdAotICogYm90aCBvcHRpb25zIGZvciBhZmZlY3RlZCBzaWduYWwgaW5kaWNlcy4gIFRoZSBzZXBhcmF0ZSBpbnB1dCBtdXgKLSAqIGZ1bmN0aW9uYWxpdHkgb25seSBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGlmIGEgbW9kZWwgY29tZXMgYWxvbmcgd2hpY2gKLSAqIGFjdHVhbGx5IHVzZXMgc2lnbmFscyAweDUsIDB4NiBhbmQgMHg3IGZvciBzb21ldGhpbmcgd2hpY2ggbWFrZXMgc2Vuc2UgdG8KLSAqIHJlY29yZC4KKy8qIEZvciB0ZXN0aW5nIHRoZSBBTEMyNjAsIGVhY2ggaW5wdXQgTVVYIG5lZWRzIGl0cyBvd24gZGVmaW5pdGlvbiBzaW5jZQorICogdGhlIHNpZ25hbCBhc3NpZ25tZW50cyBhcmUgZGlmZmVyZW50LiAgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIGZpcnN0IEFEQyAKKyAqIGlzIE5JRCAweDA0LgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX3Rlc3RfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDgsCi0JLml0ZW1zID0gewotCQl7ICJNSUMxIHBpbiIsIDB4MCB9LAotCQl7ICJNSUMyIHBpbiIsIDB4MSB9LAotCQl7ICJMSU5FMSBwaW4iLCAweDIgfSwKLQkJeyAiTElORTIgcGluIiwgMHgzIH0sCi0JCXsgIkNEIHBpbiIsIDB4NCB9LAotCQl7ICJMSU5FLU9VVCBwaW4gKGNhcDEpLCBNaXhlciAoY2FwMikiLCAweDUgfSwKLQkJeyAiSFAtT1VUIHBpbiAoY2FwMSksIExJTkUtT1VUIHBpbiAoY2FwMikiLCAweDYgfSwKLQkJeyAiSFAtT1VUIHBpbiAoY2FwMiBvbmx5KSIsIDB4NyB9LAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF90ZXN0X2NhcHR1cmVfc291cmNlc1syXSA9IHsKKwl7CisJCS5udW1faXRlbXMgPSA3LAorCQkuaXRlbXMgPSB7CisJCQl7ICJNSUMxIHBpbiIsIDB4MCB9LAorCQkJeyAiTUlDMiBwaW4iLCAweDEgfSwKKwkJCXsgIkxJTkUxIHBpbiIsIDB4MiB9LAorCQkJeyAiTElORTIgcGluIiwgMHgzIH0sCisJCQl7ICJDRCBwaW4iLCAweDQgfSwKKwkJCXsgIkxJTkUtT1VUIHBpbiIsIDB4NSB9LAorCQkJeyAiSFAtT1VUIHBpbiIsIDB4NiB9LAorCQl9LAorICAgICAgICB9LAorCXsKKwkJLm51bV9pdGVtcyA9IDgsCisJCS5pdGVtcyA9IHsKKwkJCXsgIk1JQzEgcGluIiwgMHgwIH0sCisJCQl7ICJNSUMyIHBpbiIsIDB4MSB9LAorCQkJeyAiTElORTEgcGluIiwgMHgyIH0sCisJCQl7ICJMSU5FMiBwaW4iLCAweDMgfSwKKwkJCXsgIkNEIHBpbiIsIDB4NCB9LAorCQkJeyAiTWl4ZXIiLCAweDUgfSwKKwkJCXsgIkxJTkUtT1VUIHBpbiIsIDB4NiB9LAorCQkJeyAiSFAtT1VUIHBpbiIsIDB4NyB9LAorCQl9LAogICAgICAgICB9LAogfTsKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfdGVzdF9taXhlcltdID0gewpAQCAtMzI0NCw3ICszNDE2LDE3IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTE9VVDEgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJMT1VUMSBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLAogCi0JLyogTW9kZXMgZm9yIHJldGFza2luZyBwaW4gd2lkZ2V0cyAqLworCS8qIE1vZGVzIGZvciByZXRhc2tpbmcgcGluIHdpZGdldHMKKwkgKiBOb3RlOiB0aGUgQUxDMjYwIGRvZXNuJ3Qgc2VlbSB0byBhY3Qgb24gcmVxdWVzdHMgdG8gZW5hYmxlIG1pYworICAgICAgICAgKiBiaWFzIGZyb20gTklEcyAweDBmIGFuZCAweDEwLiAgVGhlIEFMQzI2MCBkYXRhc2hlZXQgZG9lc24ndAorICAgICAgICAgKiBtZW50aW9uIHRoaXMgcmVzdHJpY3Rpb24uICBBdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIKKyAgICAgICAgICogdGhpcyBiZWhhdmlvdXIgaXMgaW50ZW50aW9uYWwgb3IgaXMgYSBoYXJkd2FyZSBidWcgaW4gY2hpcAorICAgICAgICAgKiByZXZpc2lvbnMgYXZhaWxhYmxlIGF0IGxlYXN0IHVwIHVudGlsIGVhcmx5IDIwMDYuICBUaGVyZWZvcmUgZm9yCisgICAgICAgICAqIG5vdyBhbGxvdyB0aGUgIkhQLU9VVCIgYW5kICJMSU5FLU9VVCIgTW9kZSBjb250cm9scyB0byBzcGFuIGFsbAorICAgICAgICAgKiBjaG9pY2VzLCBidXQgaWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlIGxhY2sgb2YgbWljIGJpYXMgZm9yIHRoZXNlCisgICAgICAgICAqIE5JRHMgaXMgaW50ZW50aW9uYWwgd2UgY291bGQgY2hhbmdlIHRoZWlyIG1vZGVzIGZyb20KKyAgICAgICAgICogQUxDX1BJTl9ESVJfSU5PVVQgdG8gQUxDX1BJTl9ESVJfSU5PVVRfTk9NSUNCSUFTLgorCSAqLwogCUFMQ19QSU5fTU9ERSgiSFAtT1VUIHBpbiBtb2RlIiwgMHgxMCwgQUxDX1BJTl9ESVJfSU5PVVQpLAogCUFMQ19QSU5fTU9ERSgiTElORS1PVVQgcGluIG1vZGUiLCAweDBmLCBBTENfUElOX0RJUl9JTk9VVCksCiAJQUxDX1BJTl9NT0RFKCJMSU5FMiBwaW4gbW9kZSIsIDB4MTUsIEFMQ19QSU5fRElSX0lOT1VUKSwKQEAgLTM2MDYsNiArMzc4OCw3IEBACiAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gYWxjMjYwX3ZvbHVtZV9pbml0X3ZlcmJzOwogCisJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OwogCiAJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNCBpcyB2YWxpZCAqLwpAQCAtMzcxMSw3ICszODk0LDggQEAKIAkJLmFkY19uaWRzID0gYWxjMjYwX2R1YWxfYWRjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzI2MF9mdWppdHN1X2NhcHR1cmVfc291cmNlLAorCQkubnVtX211eF9kZWZzID0gQVJSQVlfU0laRShhbGMyNjBfZnVqaXRzdV9jYXB0dXJlX3NvdXJjZXMpLAorCQkuaW5wdXRfbXV4ID0gYWxjMjYwX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2VzLAogCX0sCiAJW0FMQzI2MF9BQ0VSXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYwX2FjZXJfbWl4ZXIsCkBAIC0zNzIzLDcgKzM5MDcsOCBAQAogCQkuYWRjX25pZHMgPSBhbGMyNjBfZHVhbF9hZGNfbmlkcywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2MF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjBfbW9kZXMsCi0JCS5pbnB1dF9tdXggPSAmYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2UsCisJCS5udW1fbXV4X2RlZnMgPSBBUlJBWV9TSVpFKGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlcyksCisJCS5pbnB1dF9tdXggPSBhbGMyNjBfYWNlcl9jYXB0dXJlX3NvdXJjZXMsCiAJfSwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzI2MF9URVNUXSA9IHsKQEAgLTM3MzYsNyArMzkyMSw4IEBACiAJCS5hZGNfbmlkcyA9IGFsYzI2MF90ZXN0X2FkY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYwX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2MF9tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGMyNjBfdGVzdF9jYXB0dXJlX3NvdXJjZSwKKwkJLm51bV9tdXhfZGVmcyA9IEFSUkFZX1NJWkUoYWxjMjYwX3Rlc3RfY2FwdHVyZV9zb3VyY2VzKSwKKwkJLmlucHV0X211eCA9IGFsYzI2MF90ZXN0X2NhcHR1cmVfc291cmNlcywKIAl9LAogI2VuZGlmCiB9OwpAQCAtMzgyOCw3ICs0MDE0LDYgQEAKIAkJeyAiQ0QiLCAweDQgfSwKIAl9LAogfTsKLQogI2RlZmluZSBhbGM4ODJfbXV4X2VudW1faW5mbyBhbGNfbXV4X2VudW1faW5mbwogI2RlZmluZSBhbGM4ODJfbXV4X2VudW1fZ2V0IGFsY19tdXhfZW51bV9nZXQKIApAQCAtNDczMCw2ICs0OTE1LDcgQEAKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBzcGVjLT5rY3RsX2FsbG9jOwogCiAJc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faW5pdF92ZXJicysrXSA9IGFsYzI2Ml92b2x1bWVfaW5pdF92ZXJiczsKKwlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CiAKIAlyZXR1cm4gMTsKQEAgLTU0MDYsNiArNTU5Miw3IEBACiAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gYWxjODYxX2F1dG9faW5pdF92ZXJiczsKIAorCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKIAogCXNwZWMtPmFkY19uaWRzID0gYWxjODYxX2FkY19uaWRzOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IGI1NmNhNDAuLjhjNDQwZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTMxMCw2ICszMTAsOSBAQAogCSAgLnBjaV9zdWJkZXZpY2UgPSAweDBiMGIsCiAJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQMyB9LAkvKiBJbnRlbCBEOTQ1UFNOIC0gMyBTdGFjaywgOTIyMSBBMSAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCSAgLnBjaV9zdWJkZXZpY2UgPSAweDA3MDcsCisJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQNSB9LAkvKiBJbnRlbCBEOTQ1UFNWIC0gNSBTdGFjayAqLworICAgICAgIHsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAogCSAgLnBjaV9zdWJkZXZpY2UgPSAweDA0MDQsCiAJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQNSB9LAkvKiBJbnRlbCBEOTQ1R1RQIC0gNSBTdGFjayAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLApAQCAtNTM0LDYgKzUzNywyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5Mnh4X2dldF92cmVmKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwKKwkJCQkJCSBBQ19QQVJfUElOX0NBUCk7CisJcGluY2FwID0gKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGKSA+PiBBQ19QSU5DQVBfVlJFRl9TSElGVDsKKwlpZiAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUZfMTAwKQorCQlyZXR1cm4gQUNfUElOQ1RMX1ZSRUZfMTAwOworCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl84MCkKKwkJcmV0dXJuIEFDX1BJTkNUTF9WUkVGXzgwOworCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl81MCkKKwkJcmV0dXJuIEFDX1BJTkNUTF9WUkVGXzUwOworCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl9HUkQpCisJCXJldHVybiBBQ19QSU5DVExfVlJFRl9HUkQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IHBpbl90eXBlKQogCiB7CkBAIC01NzEsOSArNTkwLDEyIEBACiAKIAlpZiAodmFsKQogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIG5pZCwgQUNfUElOQ1RMX09VVF9FTik7Ci0JZWxzZQotCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIG5pZCwgQUNfUElOQ1RMX0lOX0VOKTsKLQorCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgcGluY3RsID0gQUNfUElOQ1RMX0lOX0VOOworCQlpZiAoaW9faWR4KSAvKiBzZXQgVlJFRiBmb3IgbWljICovCisJCQlwaW5jdGwgfD0gc3RhYzkyeHhfZ2V0X3ZyZWYoY29kZWMsIG5pZCk7CisJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgbmlkLCBwaW5jdGwpOworCX0KICAgICAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTc2NywxMyArNzg5LDggQEAKIAkJcmV0dXJuIDA7CiAKIAl3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgcGluKTsKLQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkgewotCQkvKiBFbmFibGUgdW5zb2xpY2l0ZWQgcmVzcG9uc2VzIG9uIHRoZSBIUCB3aWRnZXQgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluLCAwLAotCQkJCUFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKLQkJCQlTVEFDX1VOU09MX0VOQUJMRSk7CisJaWYgKHdpZF9jYXBzICYgQUNfV0NBUF9VTlNPTF9DQVApCiAJCXNwZWMtPmhwX2RldGVjdCA9IDE7Ci0JfQogCiAJbmlkID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW4sIDAsIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfTElTVCwgMCkgJiAweGZmOwogCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CkBAIC04OTYsMTMgKzkxMyw4IEBACiAJCXJldHVybiAwOwogCiAJd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIHBpbik7Ci0JaWYgKHdpZF9jYXBzICYgQUNfV0NBUF9VTlNPTF9DQVApIHsKLQkJLyogRW5hYmxlIHVuc29saWNpdGVkIHJlc3BvbnNlcyBvbiB0aGUgSFAgd2lkZ2V0ICovCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbiwgMCwKLQkJCQlBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCi0JCQkJU1RBQ19VTlNPTF9FTkFCTEUpOworCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKQogCQlzcGVjLT5ocF9kZXRlY3QgPSAxOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtOTQ0LDYgKzk1NiwxMCBAQAogCiAJLyogc2V0IHVwIHBpbnMgKi8KIAlpZiAoc3BlYy0+aHBfZGV0ZWN0KSB7CisJCS8qIEVuYWJsZSB1bnNvbGljaXRlZCByZXNwb25zZXMgb24gdGhlIEhQIHdpZGdldCAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPmhwX3BpbiwgMCwKKwkJCQlBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCisJCQkJU1RBQ19VTlNPTF9FTkFCTEUpOwogCQkvKiBmYWtlIGV2ZW50IHRvIHNldCB1cCBwaW5zICovCiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQoY29kZWMsIFNUQUNfSFBfRVZFTlQgPDwgMjYpOwogCX0gZWxzZSB7CkBAIC05NTEsOSArOTY3LDEzIEBACiAJCXN0YWM5Mnh4X2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCWlmIChjZmctPmlucHV0X3BpbnNbaV0pCi0JCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKLQkJCQkJCSBBQ19QSU5DVExfSU5fRU4pOworCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dF9waW5zW2ldOworCQlpZiAobmlkKSB7CisJCQl1bnNpZ25lZCBpbnQgcGluY3RsID0gQUNfUElOQ1RMX0lOX0VOOworCQkJaWYgKGkgPT0gQVVUT19QSU5fTUlDIHx8IGkgPT0gQVVUT19QSU5fRlJPTlRfTUlDKQorCQkJCXBpbmN0bCB8PSBzdGFjOTJ4eF9nZXRfdnJlZihjb2RlYywgbmlkKTsKKwkJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgbmlkLCBwaW5jdGwpOworCQl9CiAJfQogCWlmIChjZmctPmRpZ19vdXRfcGluKQogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW4sCkBAIC0xMTkyLDggKzEyMTIsOCBAQAogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHZhaW9fbXV4ID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKLQkJLyogeyAiSFAiLCAweDAgfSwKLQkJICAgeyAiVW5rbm93biIsIDB4MSB9LCAqLworCQkvKiB7ICJIUCIsIDB4MCB9LCAqLworCQl7ICJMaW5lIiwgMHgxIH0sCiAJCXsgIk1pYyIsIDB4MiB9LAogCQl7ICJQQ00iLCAweDMgfSwKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCmluZGV4IDdlNjYwOGIuLjMzNmRjNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCkBAIC04Nyw3ICs4NywxNTEgQEAKICNkZWZpbmUgQ1M4NDE1X0NfQlVGRkVSCTB4MjAKICNkZWZpbmUgQ1M4NDE1X0lECQkweDdGCiAKLXN0YXRpYyB2b2lkIGF1cmVvbl9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkgeworLyogUENBOTU1NCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUENBOTU1NF9ERVYgICAgIDB4NDAgICAgICAgICAgICAvKiBJMkMgZGV2aWNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUENBOTU1NF9JTiAgICAgIDB4MDAgICAgICAgICAgICAvKiBpbnB1dCBwb3J0ICovCisjZGVmaW5lIFBDQTk1NTRfT1VUICAgICAweDAxICAgICAgICAgICAgLyogb3V0cHV0IHBvcnQgKi8KKyNkZWZpbmUgUENBOTU1NF9JTlZFUlQgIDB4MDIgICAgICAgICAgICAvKiBpbnB1dCBpbnZlcnQgKi8KKyNkZWZpbmUgUENBOTU1NF9ESVIgICAgIDB4MDMgICAgICAgICAgICAvKiBwb3J0IGRpcmVjdGlvbnMgKi8KKworLyoKKyAqIEF1cmVvbiBVbml2ZXJzZSBhZGRpdGlvbmFsIGNvbnRyb2xzIHVzaW5nIFBDQTk1NTQKKyAqLworCisvKgorICogU2VuZCBkYXRhIHRvIHBjYTk1NTQKKyAqLworc3RhdGljIHZvaWQgYXVyZW9uX3BjYTk1NTRfd3JpdGUoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkJCSB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBjaGFyIGRldiA9IFBDQTk1NTRfREVWOyAgLyogSUQgMDEwMDAwMCwgd3JpdGUgKi8KKwl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7CisKKwl0bXAgPSBzbmRfaWNlMTcxMl9ncGlvX3JlYWQoaWNlKTsKKworCXNuZF9pY2UxNzEyX2dwaW9fc2V0X21hc2soaWNlLCB+KEFVUkVPTl9TUElfTU9TSXxBVVJFT05fU1BJX0NMS3wKKwkJCQkJIEFVUkVPTl9XTV9SV3xBVVJFT05fV01fQ1N8CisJCQkJCSBBVVJFT05fQ1M4NDE1X0NTKSk7CisJdG1wIHw9IEFVUkVPTl9XTV9SVzsKKwl0bXAgfD0gQVVSRU9OX0NTODQxNV9DUyB8IEFVUkVPTl9XTV9DUzsgLyogZGlzYWJsZSBTUEkgZGV2aWNlcyAqLworCisJdG1wICY9IH5BVVJFT05fU1BJX01PU0k7CisJdG1wICY9IH5BVVJFT05fU1BJX0NMSzsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoNTApOworCisJLyogCisJICogc2VuZCBpMmMgc3RvcCBjb25kaXRpb24gYW5kIHN0YXJ0IGNvbmRpdGlvbgorCSAqIHRvIG9idGFpbiBzYW5lIHN0YXRlCisJICovCisJdG1wIHw9IEFVUkVPTl9TUElfQ0xLOworCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCXVkZWxheSg1MCk7CisJdG1wIHw9IEFVUkVPTl9TUElfTU9TSTsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoMTAwKTsKKwl0bXAgJj0gfkFVUkVPTl9TUElfTU9TSTsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoNTApOworCXRtcCAmPSB+QVVSRU9OX1NQSV9DTEs7CisJc25kX2ljZTE3MTJfZ3Bpb193cml0ZShpY2UsIHRtcCk7CisJdWRlbGF5KDEwMCk7CisJLyoKKwkgKiBzZW5kIGRldmljZSBhZGRyZXNzLCBjb21tYW5kIGFuZCB2YWx1ZSwKKwkgKiBza2lwcGluZyBhY2sgY3ljbGVzIGluYmV0d2VlbgorCSAqLworCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKKwkJc3dpdGNoKGopIHsKKwkJY2FzZSAwOiB2YWwgPSBkZXY7IGJyZWFrOworCQljYXNlIDE6IHZhbCA9IHJlZzsgYnJlYWs7CisJCWNhc2UgMjogdmFsID0gZGF0YTsgYnJlYWs7CisJCX0KKwkJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJCXRtcCAmPSB+QVVSRU9OX1NQSV9DTEs7CisJCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwkJCXVkZWxheSg0MCk7CisJCQlpZiAodmFsICYgKDEgPDwgaSkpCisJCQkJdG1wIHw9IEFVUkVPTl9TUElfTU9TSTsKKwkJCWVsc2UKKwkJCQl0bXAgJj0gfkFVUkVPTl9TUElfTU9TSTsKKwkJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCQkJdWRlbGF5KDQwKTsKKwkJCXRtcCB8PSBBVVJFT05fU1BJX0NMSzsKKwkJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCQkJdWRlbGF5KDQwKTsKKwkJfQorICAgICAgICAgICAgICAgIHRtcCAmPSB+QVVSRU9OX1NQSV9DTEs7CisJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCQl1ZGVsYXkoNDApOworCQl0bXAgfD0gQVVSRU9OX1NQSV9DTEs7CisJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCQl1ZGVsYXkoNDApOworCQl0bXAgJj0gfkFVUkVPTl9TUElfQ0xLOworCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwkJdWRlbGF5KDQwKTsKKwl9CisJdG1wICY9IH5BVVJFT05fU1BJX0NMSzsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoNDApOworCXRtcCAmPSB+QVVSRU9OX1NQSV9NT1NJOworCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCXVkZWxheSg0MCk7CisJdG1wIHw9IEFVUkVPTl9TUElfQ0xLOworCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCXVkZWxheSg1MCk7CisJdG1wIHw9IEFVUkVPTl9TUElfTU9TSTsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoMTAwKTsKK30KKworc3RhdGljIGludCBhdXJlb25fdW5pdmVyc2VfaW5tdXhfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCWNoYXIgKnRleHRzWzNdID0geyJJbnRlcm5hbCBBdXgiLCAiV2F2ZXRhYmxlIiwgIlJlYXIgTGluZS1JbiJ9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisJaWYodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1cmVvbl91bml2ZXJzZV9pbm11eF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGljZS0+c3BlYy5hdXJlb24ucGNhOTU1NF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXVyZW9uX3VuaXZlcnNlX2lubXV4X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGNoYXIgb3ZhbCwgbnZhbDsKKwlpbnQgY2hhbmdlOworCisJc25kX2ljZTE3MTJfc2F2ZV9ncGlvX3N0YXR1cyhpY2UpOworCQorCW92YWwgPSBpY2UtPnNwZWMuYXVyZW9uLnBjYTk1NTRfb3V0OworCW52YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpZiAoKGNoYW5nZSA9IChvdmFsICE9IG52YWwpKSkgeworCQlhdXJlb25fcGNhOTU1NF93cml0ZShpY2UsIFBDQTk1NTRfT1VULCBudmFsKTsKKwkJaWNlLT5zcGVjLmF1cmVvbi5wY2E5NTU0X291dCA9IG52YWw7CisJfQorCXNuZF9pY2UxNzEyX3Jlc3RvcmVfZ3Bpb19zdGF0dXMoaWNlKTsKKwkKKwlyZXR1cm4gY2hhbmdlOworfQorCisKK3N0YXRpYyB2b2lkIGF1cmVvbl9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCQkgICAgICB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CiAJdW5zaWduZWQgaW50IHRtcDsKIAogCS8qIFNlbmQgYWRkcmVzcyB0byBYSUxJTlggY2hpcCAqLwpAQCAtMTQ2LDcgKzI5MCw4IEBACiAvKgogICogSW5pdGlhbGl6ZSBTVEFDOTc0NCBjaGlwCiAgKi8KLXN0YXRpYyBpbnQgYXVyZW9uX2FjOTdfaW5pdCAoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpIHsKK3N0YXRpYyBpbnQgYXVyZW9uX2FjOTdfaW5pdCAoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCit7CiAJaW50IGk7CiAJc3RhdGljIHVuc2lnbmVkIHNob3J0IGFjOTdfZGVmYXVsdHNbXSA9IHsKIAkJMHgwMCwgMHg5NjQwLApAQCAtMTU5OCw3ICsxNzQzLDE1IEBACiAgCQkuZ2V0ID0gYXVyZW9uX2FjOTdfdm9sX2dldCwKICAJCS5wdXQgPSBhdXJlb25fYWM5N192b2xfcHV0LAogIAkJLnByaXZhdGVfdmFsdWUgPSBBQzk3X1ZJREVPfEFVUkVPTl9BQzk3X1NURVJFTwotIAl9CisgCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQXV4IFNvdXJjZSIsCisJCS5pbmZvID0gYXVyZW9uX3VuaXZlcnNlX2lubXV4X2luZm8sCisJCS5nZXQgPSBhdXJlb25fdW5pdmVyc2VfaW5tdXhfZ2V0LAorCQkucHV0ID0gYXVyZW9uX3VuaXZlcnNlX2lubXV4X3B1dAorCX0KKwogfTsKIAogCQpAQCAtMTg1Niw2ICsyMDA5LDEwIEBACiAJfQogCiAJc25kX2ljZTE3MTJfcmVzdG9yZV9ncGlvX3N0YXR1cyhpY2UpOworCisgICAgICAgIC8qIGluaXRpYWxpemUgUENBOTU1NCBwaW4gZGlyZWN0aW9ucyAmIHNldCBkZWZhdWx0IGlucHV0Ki8KKwlhdXJlb25fcGNhOTU1NF93cml0ZShpY2UsIFBDQTk1NTRfRElSLCAweDAwKTsKKwlhdXJlb25fcGNhOTU1NF93cml0ZShpY2UsIFBDQTk1NTRfT1VULCAweDAwKTsgICAvKiBpbnRlcm5hbCBBVVggKi8KIAkKIAlpY2UtPnNwZWMuYXVyZW9uLm1hc3RlclswXSA9IFdNX1ZPTF9NVVRFOwogCWljZS0+c3BlYy5hdXJlb24ubWFzdGVyWzFdID0gV01fVk9MX01VVEU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKaW5kZXggYjg4ZWViYS4uYzU2NzkzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMTA4LDcgKzEwNyw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGR4cl9lbmFibGUsICJFbmFibGUgRFhSIHN1cHBvcnQgZm9yIFRlcnJhdGVjIERNWDZGSVJFLiIpOwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaWNlMTcxMl9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaWNlMTcxMl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF9JQ0UsIFBDSV9ERVZJQ0VfSURfSUNFXzE3MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiBJQ0UxNzEyICovCiAJeyAwLCB9CiB9OwpAQCAtMjQwMiw3ICsyNDAxLDcgQEAKIAlpZiAoaWNlLT5lZXByb20uc3VidmVuZG9yID09IElDRTE3MTJfU1VCREVWSUNFX0RNWDZGSVJFICYmICFpY2UtPmR4cl9lbmFibGUpIHsKICAgICAgICAgICAgICAgICAvKiBMaW1pdCBhY3RpdmUgQURDcyBhbmQgREFDcyB0byA2OyAgKi8KICAgICAgICAgICAgICAgICAvKiBOb3RlOiBEWFIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgKi8KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGljZS0+cGNpLCAweDYwLCAweDBhKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGljZS0+cGNpLCAweDYwLCAweDJhKTsKIAl9IGVsc2UgewogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaWNlLT5wY2ksIDB4NjAsIGljZS0+ZWVwcm9tLmRhdGFbSUNFX0VFUDFfQ09ERUNdKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKaW5kZXggZjliMjJkNC4uMDUzZjhlNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaApAQCAtMzczLDYgKzM3Myw3IEBACiAJCQl1bnNpZ25lZCBpbnQgY3M4NDE1X211eDsKIAkJCXVuc2lnbmVkIHNob3J0IG1hc3RlclsyXTsKIAkJCXVuc2lnbmVkIHNob3J0IHZvbFs4XTsKKwkJCXVuc2lnbmVkIGNoYXIgcGNhOTU1NF9vdXQ7CiAJCX0gYXVyZW9uOwogCQkvKiBBQzk3IHJlZ2lzdGVyIGNhY2hlIGZvciBQaGFzZTI4ICovCiAJCXN0cnVjdCBwaGFzZTI4X3NwZWMgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IGZjZTYxNmMuLmIxYzAwN2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTg2LDcgKzg2LDcgQEAKIAogCiAvKiBCb3RoIFZUMTcyMCBhbmQgVlQxNzI0IGhhdmUgdGhlIHNhbWUgUENJIElEcyAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92dDE3MjRfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3Z0MTcyNF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF9JQ0UsIFBDSV9ERVZJQ0VfSURfVlQxNzI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCBlYmJmMmNmLi4wZGY3NjAyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJdTMyIGludF9zdGFfbWFzazsJCS8qIGludGVycnVwdCBzdGF0dXMgbWFzayAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9pbnRlbDh4MF9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaW50ZWw4eDBfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4ODA4NiwgMHgyNDE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfSU5URUwgfSwJLyogODI4MDFBQSAqLwogCXsgMHg4MDg2LCAweDI0MjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERFVklDRV9JTlRFTCB9LAkvKiA4MjkwMUFCICovCiAJeyAweDgwODYsIDB4MjQ0NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREVWSUNFX0lOVEVMIH0sCS8qIDgyODAxQkEgKi8KQEAgLTEyOTMsNiArMTI5Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiAwIC8vIE5ZSQogc3RhdGljIGludCBzbmRfaW50ZWw4eDBfYWxpX3NwZGlmaW5fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CkBAIC0xMzA4LDcgKzEzMDksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMCAvLyBOWUkKIHN0YXRpYyBpbnQgc25kX2ludGVsOHgwX2FsaV9zcGRpZm91dF9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBpbnRlbDh4MCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKQEAgLTE0MzUsNiArMTQzNSw3IEBACiAJLnBvaW50ZXIgPQlzbmRfaW50ZWw4eDBfcGNtX3BvaW50ZXIsCiB9OwogCisjaWYgMCAvLyBOWUkKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2ludGVsOHgwX2FsaV9zcGRpZmluX29wcyA9IHsKIAkub3BlbiA9CQlzbmRfaW50ZWw4eDBfYWxpX3NwZGlmaW5fb3BlbiwKIAkuY2xvc2UgPQlzbmRfaW50ZWw4eDBfYWxpX3NwZGlmaW5fY2xvc2UsCkBAIC0xNDQ2LDcgKzE0NDcsNiBAQAogCS5wb2ludGVyID0Jc25kX2ludGVsOHgwX3BjbV9wb2ludGVyLAogfTsKIAotI2lmIDAgLy8gTllJCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9pbnRlbDh4MF9hbGlfc3BkaWZvdXRfb3BzID0gewogCS5vcGVuID0JCXNuZF9pbnRlbDh4MF9hbGlfc3BkaWZvdXRfb3BlbiwKIAkuY2xvc2UgPQlzbmRfaW50ZWw4eDBfYWxpX3NwZGlmb3V0X2Nsb3NlLApAQCAtMTU4Miw3ICsxNTgyLDcgQEAKIAl7CiAJCS5zdWZmaXggPSAiSUVDOTU4IiwKIAkJLnBsYXliYWNrX29wcyA9ICZzbmRfaW50ZWw4eDBfYWxpX2FjOTdzcGRpZm91dF9vcHMsCi0JCS5jYXB0dXJlX29wcyA9ICZzbmRfaW50ZWw4eDBfYWxpX3NwZGlmaW5fb3BzLAorCQkvKiAuY2FwdHVyZV9vcHMgPSAmc25kX2ludGVsOHgwX2FsaV9zcGRpZmluX29wcywgKi8KIAkJLnByZWFsbG9jX3NpemUgPSA2NCAqIDEwMjQsCiAJCS5wcmVhbGxvY19tYXhfc2l6ZSA9IDEyOCAqIDEwMjQsCiAJCS5hYzk3X2lkeCA9IEFMSURfQUM5N1NQRElGT1VULApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IDQ3ZTI2YWEuLjcyMDYzNWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCXVuc2lnbmVkIGludCBwY21fcG9zX3NoaWZ0OwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9pbnRlbDh4MG1faWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ludGVsOHgwbV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHg4MDg2LCAweDI0MTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUFBICovCiAJeyAweDgwODYsIDB4MjQyNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREVWSUNFX0lOVEVMIH0sCS8qIDgyOTAxQUIgKi8KIAl7IDB4ODA4NiwgMHgyNDQ2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfSU5URUwgfSwJLyogODI4MDFCQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwppbmRleCA0NzIxYzA5Li5lMzlmYWQxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYworKysgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwpAQCAtNDI0LDcgKzQyNCw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBLb3JnIDEyMTIgc291bmRjYXJkLiIpOwogTU9EVUxFX0FVVEhPUigiSGFyb2xkbyBHYW1hbCA8Z2FtYWxAYWx0ZXJuZXguY29tLmJyPiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2tvcmcxMjEyX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9rb3JnMTIxMl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnZlbmRvcgkgICA9IDB4MTBiNSwKIAkJLmRldmljZQkgICA9IDB4OTA2ZCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggNDQzOTNlMS4uMTkyOGUwNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21hZXN0cm8zLmMKKysrIGIvc291bmQvcGNpL21hZXN0cm8zLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTgzMSw4ICs4MzAsOCBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpOwotCXN0cnVjdCBtM19xdWlyayAqcXVpcms7Ci0Jc3RydWN0IG0zX2h2X3F1aXJrICpodl9xdWlyazsKKwljb25zdCBzdHJ1Y3QgbTNfcXVpcmsgKnF1aXJrOworCWNvbnN0IHN0cnVjdCBtM19odl9xdWlyayAqaHZfcXVpcms7CiAKIAlpbnQgZGFjc19hY3RpdmU7CiAJaW50IHRpbWVyX3VzZXJzOwpAQCAtODcwLDcgKzg2OSw3IEBACiAvKgogICogcGNpIGlkcwogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX20zX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9tM19pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdST18xLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApAQCAtODkyLDcgKzg5MSw3IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbmRfbTNfaWRzKTsKIAotc3RhdGljIHN0cnVjdCBtM19xdWlyayBtM19xdWlya19saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG0zX3F1aXJrIG0zX3F1aXJrX2xpc3RbXSA9IHsKIAkvKiBwYW5hc29uaWMgQ0YtMjggInRvdWdoYm9vayIgKi8KIAl7CiAJCS5uYW1lID0gIlBhbmFzb25pYyBDRi0yOCIsCkBAIC05NTAsNyArOTQ5LDcgQEAKIH07CiAKIC8qIFRoZXNlIHZhbHVlcyBjYW1lIGZyb20gdGhlIFdpbmRvd3MgZHJpdmVyLiAqLwotc3RhdGljIHN0cnVjdCBtM19odl9xdWlyayBtM19odl9xdWlya19saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG0zX2h2X3F1aXJrIG0zX2h2X3F1aXJrX2xpc3RbXSA9IHsKIAkvKiBBbGxlZ3JvIGNoaXBzICovCiAJeyAweDEyNUQsIDB4MTk4OCwgMHgwRTExLCAweDAwMkUsIEhWX0NUUkxfRU5BQkxFIHwgSFZfQlVUVE9OX0ZST01fR0QsIDAgfSwKIAl7IDB4MTI1RCwgMHgxOTg4LCAweDBFMTEsIDB4MDA5NCwgSFZfQ1RSTF9FTkFCTEUgfCBIVl9CVVRUT05fRlJPTV9HRCwgMCB9LApAQCAtMTM2MSw3ICsxMzYwLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBsYXlfdmFscyB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXlfdmFscyB7CiAJdTE2IGFkZHIsIHZhbDsKIH0gcHZbXSA9IHsKIAl7Q0RBVEFfTEVGVF9WT0xVTUUsIEFSQl9WT0xVTUV9LApAQCAtMTQyOCw3ICsxNDI3LDcgQEAKIC8qCiAgKiAgICBOYXRpdmUgcmVjb3JkIGRyaXZlciAKICAqLwotc3RhdGljIHN0cnVjdCByZWNfdmFscyB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlY192YWxzIHsKIAl1MTYgYWRkciwgdmFsOwogfSBydltdID0gewogCXtDREFUQV9MRUZUX1ZPTFVNRSwgQVJCX1ZPTFVNRX0sCkBAIC0xNTk4LDEyICsxNTk3LDI2IEBACiAJaWYgKCEgcy0+cnVubmluZykKIAkJcmV0dXJuOwogCi0JaHdwdHIgPSBzbmRfbTNfZ2V0X3BvaW50ZXIoY2hpcCwgcywgc3VicykgJSBzLT5kbWFfc2l6ZTsKLQlkaWZmID0gKHMtPmRtYV9zaXplICsgaHdwdHIgLSBzLT5od3B0cikgJSBzLT5kbWFfc2l6ZTsKKwlod3B0ciA9IHNuZF9tM19nZXRfcG9pbnRlcihjaGlwLCBzLCBzdWJzKTsKKworCS8qIHRyeSB0byBhdm9pZCBleHBlbnNpdmUgbW9kdWxvIGRpdmlzaW9ucyAqLworCWlmIChod3B0ciA+PSBzLT5kbWFfc2l6ZSkKKwkJaHdwdHIgJT0gcy0+ZG1hX3NpemU7CisKKwlkaWZmID0gcy0+ZG1hX3NpemUgKyBod3B0ciAtIHMtPmh3cHRyOworCWlmIChkaWZmID49IHMtPmRtYV9zaXplKQorCQlkaWZmICU9IHMtPmRtYV9zaXplOworCiAJcy0+aHdwdHIgPSBod3B0cjsKIAlzLT5jb3VudCArPSBkaWZmOworCiAJaWYgKHMtPmNvdW50ID49IChzaWduZWQpcy0+cGVyaW9kX3NpemUpIHsKLQkJcy0+Y291bnQgJT0gcy0+cGVyaW9kX3NpemU7CisKKwkJaWYgKHMtPmNvdW50IDwgMiAqIChzaWduZWQpcy0+cGVyaW9kX3NpemUpCisJCQlzLT5jb3VudCAtPSAoc2lnbmVkKXMtPnBlcmlvZF9zaXplOworCQllbHNlCisJCQlzLT5jb3VudCAlPSBzLT5wZXJpb2Rfc2l6ZTsKKwogCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnMpOwogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKQEAgLTE5NDIsNiArMTk1NSw3IEBACiAJZG8gewogCQlpZiAoISAoc25kX20zX2luYihjaGlwLCAweDMwKSAmIDEpKQogCQkJcmV0dXJuIDA7CisJCWNwdV9yZWxheCgpOwogCX0gd2hpbGUgKGktLSA+IDApOwogCiAJc25kX3ByaW50ayhLRVJOX0VSUiAiYWM5NyBzZXJpYWwgYnVzIGJ1c3lcbiIpOwpAQCAtMTk1MywxNiArMTk2NywxOCBAQAogewogCXN0cnVjdCBzbmRfbTMgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBkYXRhOworCXVuc2lnbmVkIHNob3J0IGRhdGEgPSAweGZmZmY7CiAKIAlpZiAoc25kX20zX2FjOTdfd2FpdChjaGlwKSkKLQkJcmV0dXJuIDB4ZmZmZjsKKwkJZ290byBmYWlsOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5hYzk3X2xvY2ssIGZsYWdzKTsKIAlzbmRfbTNfb3V0YihjaGlwLCAweDgwIHwgKHJlZyAmIDB4N2YpLCBDT0RFQ19DT01NQU5EKTsKIAlpZiAoc25kX20zX2FjOTdfd2FpdChjaGlwKSkKLQkJcmV0dXJuIDB4ZmZmZjsKKwkJZ290byBmYWlsX3VubG9jazsKIAlkYXRhID0gc25kX20zX2ludyhjaGlwLCBDT0RFQ19EQVRBKTsKK2ZhaWxfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmFjOTdfbG9jaywgZmxhZ3MpOworZmFpbDoKIAlyZXR1cm4gZGF0YTsKIH0KIApAQCAtMjEyMSw3ICsyMTM3LDcgQEAKICAqIERTUCBDb2RlIGltYWdlcwogICovCiAKLXN0YXRpYyB1MTYgYXNzcF9rZXJuZWxfaW1hZ2VbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHUxNiBhc3NwX2tlcm5lbF9pbWFnZVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAgICAgMHg3OTgwLCAweDAwMzAsIDB4Nzk4MCwgMHgwM0I0LCAweDc5ODAsIDB4MDNCNCwgMHg3OTgwLCAweDAwRkIsIDB4Nzk4MCwgMHgwMERELCAweDc5ODAsIDB4MDNCNCwgCiAgICAgMHg3OTgwLCAweDAzMzIsIDB4Nzk4MCwgMHgwMjg3LCAweDc5ODAsIDB4MDNCNCwgMHg3OTgwLCAweDAzQjQsIDB4Nzk4MCwgMHgwM0I0LCAweDc5ODAsIDB4MDNCNCwgCiAgICAgMHg3OTgwLCAweDAzMUEsIDB4Nzk4MCwgMHgwM0I0LCAweDc5ODAsIDB4MDIyRiwgMHg3OTgwLCAweDAzQjQsIDB4Nzk4MCwgMHgwM0I0LCAweDc5ODAsIDB4MDNCNCwgCkBAIC0yMjA4LDcgKzIyMjQsNyBAQAogICogTWluaSBzYW1wbGUgcmF0ZSBjb252ZXJ0ZXIgY29kZSBpbWFnZQogICogdGhhdCBpcyB0byBiZSBsb2FkZWQgYXQgMHg0MDAgb24gdGhlIERTUC4KICAqLwotc3RhdGljIHUxNiBhc3NwX21pbmlzcmNfaW1hZ2VbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHUxNiBhc3NwX21pbmlzcmNfaW1hZ2VbXSBfX2RldmluaXRkYXRhID0gewogCiAgICAgMHhCRjgwLCAweDEwMUUsIDB4OTA2RSwgMHgwMDZFLCAweDhCODgsIDB4Njk4MCwgMHhFRjg4LCAweDkwNkYsIDB4MEQ2RiwgMHg2OTAwLCAweEVCMDgsIDB4MDQxMiwgCiAgICAgMHhCQzIwLCAweDY5NkUsIDB4QjgwMSwgMHg5MDZFLCAweDc5ODAsIDB4MDQwMywgMHhCOTBFLCAweDg4MDcsIDB4QkU0MywgMHhCRjAxLCAweEJFNDcsIDB4QkU0MSwgCkBAIC0yMjUxLDcgKzIyNjcsNyBAQAogICovCiAKICNkZWZpbmUgTUlOSVNSQ19MUEZfTEVOIDEwCi1zdGF0aWMgdTE2IG1pbmlzcmNfbHBmW01JTklTUkNfTFBGX0xFTl0gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgbWluaXNyY19scGZbTUlOSVNSQ19MUEZfTEVOXSBfX2RldmluaXRkYXRhID0gewogCTBYMDc0MywgMFgxMTA0LCAwWDBBNEMsIDBYRjg4RCwgMFgyNDJDLAogCTBYMTAyMywgMFgxQUE5LCAwWDBCNjAsIDBYRUZERCwgMFgxODZGCiB9OwpAQCAtMjM1OCw3ICsyMzc0LDcgQEAKIAkgKi8KIAogCS8qCi0JICogYWxpZ24gaW5zdGFuY2UgYWRkcmVzcyB0byAyNTYgYnl0ZXMgc28gdGhhdCBpdCdzCisJICogYWxpZ24gaW5zdGFuY2UgYWRkcmVzcyB0byAyNTYgYnl0ZXMgc28gdGhhdCBpdHMKIAkgKiBzaGlmdGVkIGxpc3QgYWRkcmVzcyBpcyBhbGlnbmVkLgogCSAqIGxpc3QgYWRkcmVzcyA9IChtZW0gYWRkcmVzcyA+PiAxKSA+PiA3OwogCSAqLwpAQCAtMjY0Nyw4ICsyNjYzLDggQEAKIHsKIAlzdHJ1Y3Qgc25kX20zICpjaGlwOwogCWludCBpLCBlcnI7Ci0Jc3RydWN0IG0zX3F1aXJrICpxdWlyazsKLQlzdHJ1Y3QgbTNfaHZfcXVpcmsgKmh2X3F1aXJrOworCWNvbnN0IHN0cnVjdCBtM19xdWlyayAqcXVpcms7CisJY29uc3Qgc3RydWN0IG0zX2h2X3F1aXJrICpodl9xdWlyazsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0Jc25kX20zX2Rldl9mcmVlLAogCX07CkBAIC0yODQzLDEyICsyODU5LDEyIEBACiAJfQogCiAjaWYgMCAvKiBUT0RPOiBub3Qgc3VwcG9ydGVkIHlldCAqLwotCS8qIFRPRE8gZW5hYmxlIG1pZGkgaXJxIGFuZCBpL28gKi8KKwkvKiBUT0RPIGVuYWJsZSBNSURJIElSUSBhbmQgSS9PICovCiAJZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjaGlwLT5jYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLAogCQkJCSAgY2hpcC0+aW9iYXNlICsgTVBVNDAxX0RBVEFfUE9SVCwgMSwKIAkJCQkgIGNoaXAtPmlycSwgMCwgJmNoaXAtPnJtaWRpKTsKIAlpZiAoZXJyIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWFlc3RybzM6IG5vIG1pZGkgc3VwcG9ydC5cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYWVzdHJvMzogbm8gTUlESSBzdXBwb3J0LlxuIik7CiAjZW5kaWYKIAogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggYjVhMDk1MC4uMDljYzA3OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CkBAIC02Miw3ICs2MSw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbWl4YXJ0X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9taXhhcnRfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTA1NywgMHgwMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAvKiBNQzgyNDAgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCmluZGV4IGNjMjk3YWIuLmI5MmQ2NjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCisrKyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIC8qCiAgKiBQQ0kgaWRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbm0yNTZfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX25tMjU2X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJe1BDSV9WRU5ET1JfSURfTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZBVl9BVURJTywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZaWF9BVURJTywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZYTF9QTFVTX0FVRElPLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKaW5kZXggMzU4NzVjOC4uZGFmYTIyMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTc0LDcgKzczLDcgQEAKIAlQQ0lfSURfTEFTVAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjeGhyX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjeGhyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDEwYjUsIDB4OTY1NiwgMHgxMzY5LCAweGIwMDEsIDAsIDAsIFBDSV9JRF9WWDg4MkhSLCB9LCAgIC8qIFZYODgySFIgKi8KIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjEwMSwgMCwgMCwgUENJX0lEX1BDWDg4MkhSLCB9LCAgLyogUENYODgySFIgKi8KIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjIwMSwgMCwgMCwgUENJX0lEX1ZYODgxSFIsIH0sICAgLyogVlg4ODFIUiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmMKaW5kZXggZmRjNjUyYy4uYzQwZjU5MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5jCkBAIC0yNzQsMTIgKzI3NCw5IEBACiAKIAkvKiB0ZXN0IGZpcnN0IHhpbGlueCAqLwogCWNoaXBzYyA9IFBDWEhSX0lOUEwobWdyLCBQQ1hIUl9QTFhfQ0hJUFNDKTsKLQlpZiAoIXNlY29uZCkgewotCQlpZiAoY2hpcHNjICYgUENYSFJfQ0hJUFNDX0dQSV9VU0VSSSkgewotCQkJc25kX3ByaW50ZGQoIm5vIG5lZWQgdG8gbG9hZCBmaXJzdCB4aWxpbnhcbiIpOwotCQkJcmV0dXJuIDA7IC8qIGZpcnN0IHhpbGlueCBpcyBhbHJlYWR5IHByZXNlbnQgYW5kIGNhbm5vdCBiZSByZXNldCAqLwotCQl9Ci0JfSBlbHNlIHsKKwkvKiBSRVYwMSBjYXJkcyBkbyBub3Qgc3VwcG9ydCB0aGUgUENYSFJfQ0hJUFNDX0dQSV9VU0VSSSBiaXQgYW55bW9yZSAqLworCS8qIHRoaXMgYml0IHdpbGwgYWx3YXlzIGJlIDE7IG5vIHBvc3NpYmlsaXR5IHRvIHRlc3QgcHJlc2VuY2Ugb2YgZmlyc3QgeGlsaW54ICovCisJaWYoc2Vjb25kKSB7CiAJCWlmICgoY2hpcHNjICYgUENYSFJfQ0hJUFNDX0dQSV9VU0VSSSkgPT0gMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZXJyb3IgbG9hZGluZyBmaXJzdCB4aWxpbnhcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCmluZGV4IDAzNTE3YzEuLjM2OWMxOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCkBAIC0zODUsOCArMzg1LDggQEAKIAlmdy5zaXplID0gZHNwLT5sZW5ndGg7CiAJZncuZGF0YSA9IHZtYWxsb2MoZncuc2l6ZSk7CiAJaWYgKCEgZncuZGF0YSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwY3hocjogY2Fubm90IGFsbG9jYXRlIGRzcCBpbWFnZSAoJWQgYnl0ZXMpXG4iLAotCQkJICAgZncuc2l6ZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBjeGhyOiBjYW5ub3QgYWxsb2NhdGUgZHNwIGltYWdlICglbHUgYnl0ZXMpXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZncuc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoZncuZGF0YSwgZHNwLT5pbWFnZSwgZHNwLT5sZW5ndGgpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9NYWtlZmlsZSBiL3NvdW5kL3BjaS9yaXB0aWRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZDJlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvcmlwdGlkZS9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK3NuZC1yaXB0aWRlLW9ianMgOj0gcmlwdGlkZS5vCisKK29iai0kKENPTkZJR19TTkRfUklQVElERSkgKz0gc25kLXJpcHRpZGUubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2M5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKQEAgLTAsMCArMSwyMjIzIEBACisvKgorICogICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBSaXB0aWRlIFNvdW5kY2hpcAorICoKKyAqCUNvcHlyaWdodCAoYykgMjAwNCBQZXRlciBHcnViZXIgPG5va29zQGdteC5uZXQ+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworLyoKKyAgSGlzdG9yeToKKyAgIC0gMDIvMTUvMjAwNCBmaXJzdCByZWxlYXNlCisgICAKKyAgVGhpcyBEcml2ZXIgaXMgYmFzZWQgb24gdGhlIE9TUyBEcml2ZXIgdmVyc2lvbiBmcm9tIExpbnV4YW50IChyaXB0aWRlLTAuNmxueHRiZXRhMDMxMTExMDApCisgIGNyZWRpdHMgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZXM6CisgIAorICBNT0RVTEUgTkFNRTogICAgICAgIGNueHRfcnQuaCAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgICAgSy4gTGF6YXJldiAgKFRyYW5zY3JpYmVkIGJ5IEtOTCkKKyAgSElTVE9SWTogICAgICAgICBNYWpvciBSZXZpc2lvbiAgICAgICAgICAgICAgIERhdGUgICAgICAgIEJ5CisgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgLS0tLS0tLS0gICAgIC0tLS0tCisgICAgICAgICAgICBDcmVhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgMDIvMS8yMDAwICAgICBLTkwKKworICBNT0RVTEUgTkFNRTogICAgIGludF9tZGwuYyAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgS29uc3RhbnRpbiBMYXphcmV2ICAgIChUcmFuc2NyaWJlZCBieSBLTkwpCisgIEhJU1RPUlk6ICAgICAgICAgTWFqb3IgUmV2aXNpb24gICAgICAgICAgICAgICBEYXRlICAgICAgICBCeQorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tICAgICAtLS0tLQorICAgICAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLzAxLzk5ICAgICAgS05MCisJICAgIAorICBNT0RVTEUgTkFNRTogICAgICAgIHJpcHRpZGUuaCAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgICAgTy4gRHJ1emhpbmluICAoVHJhbnNjcmliZWQgYnkgT0xEKQorICBISVNUT1JZOiAgICAgICAgIE1ham9yIFJldmlzaW9uICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgQnkKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLSAgICAgLS0tLS0KKyAgICAgICAgICAgIENyZWF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC8xNi85NyAgICAgIE9MRAorCisgIE1PRFVMRSBOQU1FOiAgICAgICAgUnBfQ21kaWYuY3BwICAgICAgICAgICAgICAgICAgICAgICAKKyAgQVVUSE9SOiAgICAgICAgICAgICBPLiBEcnV6aGluaW4gIChUcmFuc2NyaWJlZCBieSBPTEQpCisgICAgICAgICAgICAgICAgICAgICAgSy4gTGF6YXJldiAgICAoVHJhbnNjcmliZWQgYnkgS05MKQorICBISVNUT1JZOiAgICAgICAgIE1ham9yIFJldmlzaW9uICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgQnkKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLSAgICAgLS0tLS0KKyAgICAgICAgICAgIEFkb3B0ZWQgZnJvbSBOVDQgZHJpdmVyICAgICAgICAgICAgNi8yMi85OSAgICAgIE9MRAorICAgICAgICAgICAgUG9ydGVkIHRvIExpbnV4ICAgICAgICAgICAgICAgICAgICA5LzAxLzk5ICAgICAgS05MCisKKyAgTU9EVUxFIE5BTUU6ICAgICAgICBydF9ody5jICAgICAgICAgICAgICAgICAgICAgICAKKyAgQVVUSE9SOiAgICAgICAgICAgICBPLiBEcnV6aGluaW4gIChUcmFuc2NyaWJlZCBieSBPTEQpCisgICAgICAgICAgICAgICAgICAgICAgQy4gTGF6YXJldiAgICAoVHJhbnNjcmliZWQgYnkgQ05MKQorICBISVNUT1JZOiAgICAgICAgIE1ham9yIFJldmlzaW9uICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgQnkKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLSAgICAgLS0tLS0KKyAgICAgICAgICAgIENyZWF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS8xOC85NyAgICAgIE9MRAorICAgICAgICAgICAgSGFyZHdhcmUgZnVuY3Rpb25zIGZvciBSaXBUaWRlICAgIDExLzI0Lzk3ICAgICAgQ05MCisgICAgICAgICAgICAoRVMxKSBhcmUgY29kZWQKKyAgICAgICAgICAgIEhhcmR3YXJlIGZ1bmN0aW9ucyBmb3IgUmlwVGlkZSAgICAxMi8yNC85NyAgICAgIENOTAorICAgICAgICAgICAgKEEwKSBhcmUgY29kZWQKKyAgICAgICAgICAgIEhhcmR3YXJlIGZ1bmN0aW9ucyBmb3IgUmlwVGlkZSAgICAwMy8yMC85OCAgICAgIENOTAorICAgICAgICAgICAgKEExKSBhcmUgY29kZWQKKyAgICAgICAgICAgIEJvb3QgbG9hZGVyIGlzIGluY2x1ZGVkICAgICAgICAgICAwNS8wNy85OCAgICAgIENOTAorICAgICAgICAgICAgUmVkZXNpZ25lZCBmb3IgV0RNICAgICAgICAgICAgICAgIDA3LzI3Lzk4ICAgICAgQ05MCisgICAgICAgICAgICBSZWRlc2lnbmVkIGZvciBMaW51eCAgICAgICAgICAgICAgMDkvMDEvOTkgICAgICBDTkwKKworICBNT0RVTEUgTkFNRTogICAgICAgIHJ0X2h3LmgKKyAgQVVUSE9SOiAgICAgICAgICAgICBDLiBMYXphcmV2ICAgIChUcmFuc2NyaWJlZCBieSBDTkwpCisgIEhJU1RPUlk6ICAgICAgICAgTWFqb3IgUmV2aXNpb24gICAgICAgICAgICAgICBEYXRlICAgICAgICBCeQorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tICAgICAtLS0tLQorICAgICAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLzE4Lzk3ICAgICAgQ05MCisKKyAgTU9EVUxFIE5BTUU6ICAgICBydF9tZGwuYyAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgS29uc3RhbnRpbiBMYXphcmV2ICAgIChUcmFuc2NyaWJlZCBieSBLTkwpCisgIEhJU1RPUlk6ICAgICAgICAgTWFqb3IgUmV2aXNpb24gICAgICAgICAgICAgICBEYXRlICAgICAgICBCeQorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tICAgICAtLS0tLQorICAgICAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLzAxLzk5ICAgICAgS05MCisKKyAgTU9EVUxFIE5BTUU6ICAgICAgICBtaXhlci5oICAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgICAgSy4gS2VubmV5CisgIEhJU1RPUlk6ICAgICAgICAgTWFqb3IgUmV2aXNpb24gICAgICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgICBCeQorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgLS0tLS0tLS0gICAgIC0tLS0tCisgICAgICAgICAgICBDcmVhdGVkIGZyb20gTVMgVzk1IFNhbXBsZSAgICAgICAgICAgICAxMS8yOC85NSAgICAgIEtSUworICAgICAgICAgICAgUmlwVGlkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAvMTUvOTcgICAgICBLUlMKKyAgICAgICAgICAgIEFkb3B0ZWQgZm9yIFdpbmRvd3MgTlQgZHJpdmVyICAgICAgICAgIDAxLzIwLzk4ICAgICAgQ05MCisqLworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfR0FNRVBPUlQpIHx8IChkZWZpbmVkKE1PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfR0FNRVBPUlRfTU9EVUxFKSkKKyNkZWZpbmUgU1VQUE9SVF9KT1lTVElDSyAxCisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiUGV0ZXIgR3J1YmVyIDxub2tvc0BnbXgubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJyaXB0aWRlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tDb25leGFudCxSaXB0aWRlfX0iKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOworCisjaWZkZWYgU1VQUE9SVF9KT1lTVElDSworc3RhdGljIGludCBqb3lzdGlja19wb3J0W1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDB4MjAwIH07CisjZW5kaWYKK3N0YXRpYyBpbnQgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0geyBbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMHgzMzAgfTsKK3N0YXRpYyBpbnQgb3BsM19wb3J0W1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDB4Mzg4IH07CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgUmlwdGlkZSBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIFJpcHRpZGUgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBSaXB0aWRlIHNvdW5kY2FyZC4iKTsKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCittb2R1bGVfcGFyYW1fYXJyYXkoam95c3RpY2tfcG9ydCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moam95c3RpY2tfcG9ydCwgIkpveXN0aWNrIHBvcnQgIyBmb3IgUmlwdGlkZSBzb3VuZGNhcmQuIik7CisjZW5kaWYKK21vZHVsZV9wYXJhbV9hcnJheShtcHVfcG9ydCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X3BvcnQsICJNUFU0MDEgcG9ydCAjIGZvciBSaXB0aWRlIGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShvcGwzX3BvcnQsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG9wbDNfcG9ydCwgIk9QTDMgcG9ydCAjIGZvciBSaXB0aWRlIGRyaXZlci4iKTsKKworLyoKKyAqLworCisjZGVmaW5lIE1QVTQwMV9IV19SSVBUSURFIE1QVTQwMV9IV19NUFU0MDEKKyNkZWZpbmUgT1BMM19IV19SSVBUSURFICAgT1BMM19IV19PUEwzCisKKyNkZWZpbmUgUENJX0VYVF9DYXBJZCAgICAgICAweDQwCisjZGVmaW5lIFBDSV9FWFRfTmV4dENhcFBydCAgMHg0MQorI2RlZmluZSBQQ0lfRVhUX1BXTUMgICAgICAgIDB4NDIKKyNkZWZpbmUgUENJX0VYVF9QV1NDUiAgICAgICAweDQ0CisjZGVmaW5lIFBDSV9FWFRfRGF0YTAwICAgICAgMHg0NgorI2RlZmluZSBQQ0lfRVhUX1BNU0NSX0JTRSAgIDB4NDcKKyNkZWZpbmUgUENJX0VYVF9TQl9CYXNlICAgICAweDQ4CisjZGVmaW5lIFBDSV9FWFRfRk1fQmFzZSAgICAgMHg0YQorI2RlZmluZSBQQ0lfRVhUX01QVV9CYXNlICAgIDB4NEMKKyNkZWZpbmUgUENJX0VYVF9HYW1lX0Jhc2UgICAweDRFCisjZGVmaW5lIFBDSV9FWFRfTGVnYWN5X01hc2sgMHg1MAorI2RlZmluZSBQQ0lfRVhUX0FzaWNSZXYgICAgIDB4NTIKKyNkZWZpbmUgUENJX0VYVF9SZXNlcnZlZDMgICAweDUzCisKKyNkZWZpbmUgTEVHQUNZX0VOQUJMRV9BTEwgICAgICAweDgwMDAJLyogbGVnYWN5IGRldmljZSBvcHRpb25zICovCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfU0IgICAgICAgMHg0MDAwCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfRk0gICAgICAgMHgyMDAwCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfTVBVX0lOVCAgMHgxMDAwCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfTVBVICAgICAgMHgwODAwCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfR0FNRVBPUlQgMHgwNDAwCisKKyNkZWZpbmUgTUFYX1dSSVRFX1JFVFJZICAxMAkvKiBjbWQgaW50ZXJmYWNlIGxpbWl0cyAqLworI2RlZmluZSBNQVhfRVJST1JfQ09VTlQgIDEwCisjZGVmaW5lIENNRElGX1RJTUVPVVQgICAgNTAwMDAwCisjZGVmaW5lIFJFU0VUX1RSSUVTICAgICAgNQorCisjZGVmaW5lIFJFQURfUE9SVF9VTE9ORyhwKSAgICAgaW5sKCh1bnNpZ25lZCBsb25nKSYocCkpCisjZGVmaW5lIFdSSVRFX1BPUlRfVUxPTkcocCx4KSAgb3V0bCh4LCh1bnNpZ25lZCBsb25nKSYocCkpCisKKyNkZWZpbmUgUkVBRF9BVURJT19DT05UUk9MKHApICAgICBSRUFEX1BPUlRfVUxPTkcocC0+YXVkaW9fY29udHJvbCkKKyNkZWZpbmUgV1JJVEVfQVVESU9fQ09OVFJPTChwLHgpICBXUklURV9QT1JUX1VMT05HKHAtPmF1ZGlvX2NvbnRyb2wseCkKKyNkZWZpbmUgVU1BU0tfQVVESU9fQ09OVFJPTChwLHgpICBXUklURV9QT1JUX1VMT05HKHAtPmF1ZGlvX2NvbnRyb2wsUkVBRF9QT1JUX1VMT05HKHAtPmF1ZGlvX2NvbnRyb2wpfHgpCisjZGVmaW5lIE1BU0tfQVVESU9fQ09OVFJPTChwLHgpICAgV1JJVEVfUE9SVF9VTE9ORyhwLT5hdWRpb19jb250cm9sLFJFQURfUE9SVF9VTE9ORyhwLT5hdWRpb19jb250cm9sKSZ4KQorI2RlZmluZSBSRUFEX0FVRElPX1NUQVRVUyhwKSAgICAgIFJFQURfUE9SVF9VTE9ORyhwLT5hdWRpb19zdGF0dXMpCisKKyNkZWZpbmUgU0VUX0dSRVNFVChwKSAgICAgVU1BU0tfQVVESU9fQ09OVFJPTChwLDB4MDAwMSkJLyogZ2xvYmFsIHJlc2V0IHN3aXRjaCAqLworI2RlZmluZSBVTlNFVF9HUkVTRVQocCkgICBNQVNLX0FVRElPX0NPTlRST0wocCx+MHgwMDAxKQorI2RlZmluZSBTRVRfQUlFKHApICAgICAgICBVTUFTS19BVURJT19DT05UUk9MKHAsMHgwMDA0KQkvKiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFVOU0VUX0FJRShwKSAgICAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwMDQpCisjZGVmaW5lIFNFVF9BSUFDSyhwKSAgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwMDgpCS8qIGludGVycnVwdCBhY2tub3dsZWRnZSAqLworI2RlZmluZSBVTlNFVF9BSUFDS1QocCkgICBNQVNLQVVESU9fQ09OVFJPTChwLH4weDAwMDgpCisjZGVmaW5lIFNFVF9FQ01EQUUocCkgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwMTApCisjZGVmaW5lIFVOU0VUX0VDTURBRShwKSAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwMTApCisjZGVmaW5lIFNFVF9FQ01EQkUocCkgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwMjApCisjZGVmaW5lIFVOU0VUX0VDTURCRShwKSAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwMjApCisjZGVmaW5lIFNFVF9FREFUQUYocCkgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwNDApCisjZGVmaW5lIFVOU0VUX0VEQVRBRihwKSAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwNDApCisjZGVmaW5lIFNFVF9FREFUQkYocCkgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwODApCisjZGVmaW5lIFVOU0VUX0VEQVRCRihwKSAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwODApCisjZGVmaW5lIFNFVF9FU0JJUlFPTihwKSAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAxMDApCisjZGVmaW5lIFVOU0VUX0VTQklSUU9OKHApIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAxMDApCisjZGVmaW5lIFNFVF9FTVBVSVJRKHApICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAyMDApCisjZGVmaW5lIFVOU0VUX0VNUFVJUlEocCkgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAyMDApCisjZGVmaW5lIElTX0NNREUoYSkgICAgICAgIChSRUFEX1BPUlRfVUxPTkcoYS0+c3RhdCkmMHgxKQkvKiBjbWQgZW1wdHkgKi8KKyNkZWZpbmUgSVNfREFURihhKSAgICAgICAgKFJFQURfUE9SVF9VTE9ORyhhLT5zdGF0KSYweDIpCS8qIGRhdGEgZmlsbGVkICovCisjZGVmaW5lIElTX1JFQURZKHApICAgICAgIChSRUFEX0FVRElPX1NUQVRVUyhwKSYweDAwMDEpCisjZGVmaW5lIElTX0RMUkVBRFkocCkgICAgIChSRUFEX0FVRElPX1NUQVRVUyhwKSYweDAwMDIpCisjZGVmaW5lIElTX0RMRVJSKHApICAgICAgIChSRUFEX0FVRElPX1NUQVRVUyhwKSYweDAwMDQpCisjZGVmaW5lIElTX0dFUlIocCkgICAgICAgIChSRUFEX0FVRElPX1NUQVRVUyhwKSYweDAwMDgpCS8qIGVycm9yICEgKi8KKyNkZWZpbmUgSVNfQ01EQUVJUlEocCkgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDAxMCkKKyNkZWZpbmUgSVNfQ01EQkVJUlEocCkgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDAyMCkKKyNkZWZpbmUgSVNfREFUQUZJUlEocCkgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDA0MCkKKyNkZWZpbmUgSVNfREFUQkZJUlEocCkgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDA4MCkKKyNkZWZpbmUgSVNfRU9CSVJRKHApICAgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDEwMCkJLyogaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBJU19FT1NJUlEocCkgICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgwMjAwKQorI2RlZmluZSBJU19FT0NJUlEocCkgICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgwNDAwKQorI2RlZmluZSBJU19VTlNMSVJRKHApICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgwODAwKQorI2RlZmluZSBJU19TQklSUShwKSAgICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgxMDAwKQorI2RlZmluZSBJU19NUFVJUlEocCkgICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgyMDAwKQorCisjZGVmaW5lIFJFU1AgMHgwMDAwMDAwMQkJLyogY29tbWFuZCBmbGFncyAqLworI2RlZmluZSBQQVJNIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ01EQSAweDAwMDAwMDA0CisjZGVmaW5lIENNREIgMHgwMDAwMDAwOAorI2RlZmluZSBOSUxMIDB4MDAwMDAwMDAKKworI2RlZmluZSBMT05HMChhKSAgICgodTMyKWEpCS8qIHNoaWZ0cyBhbmQgbWFza3MgKi8KKyNkZWZpbmUgQllURTAoYSkgICAoTE9ORzAoYSkmMHhmZikKKyNkZWZpbmUgQllURTEoYSkgICAoQllURTAoYSk8PDgpCisjZGVmaW5lIEJZVEUyKGEpICAgKEJZVEUwKGEpPDwxNikKKyNkZWZpbmUgQllURTMoYSkgICAoQllURTAoYSk8PDI0KQorI2RlZmluZSBXT1JEMChhKSAgIChMT05HMChhKSYweGZmZmYpCisjZGVmaW5lIFdPUkQxKGEpICAgKFdPUkQwKGEpPDw4KQorI2RlZmluZSBXT1JEMihhKSAgIChXT1JEMChhKTw8MTYpCisjZGVmaW5lIFRSSU5JQjAoYSkgKExPTkcwKGEpJjB4ZmZmZmZmKQorI2RlZmluZSBUUklOSUIxKGEpIChUUklOSUIwKGEpPDw4KQorCisjZGVmaW5lIFJFVChhKSAgICAgKCh1bmlvbiBjbWRyZXQgKikoYSkpCisKKyNkZWZpbmUgU0VORF9HRVRWKHAsYikgICAgICAgICAgICAgc2VuZGNtZChwLFJFU1AsR0VUViwwLFJFVChiKSkJLyogZ2V0IHZlcnNpb24gKi8KKyNkZWZpbmUgU0VORF9HRVRDKHAsYixjKSAgICAgICAgICAgc2VuZGNtZChwLFBBUk18UkVTUCxHRVRDLGMsUkVUKGIpKQorI2RlZmluZSBTRU5EX0dVTlMocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUkVTUCxHVU5TLDAsUkVUKGIpKQorI2RlZmluZSBTRU5EX1NDSUQocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUkVTUCxTQ0lELDAsUkVUKGIpKQorI2RlZmluZSBTRU5EX1JNRU0ocCxiLGMsZCkgICAgICAgICBzZW5kY21kKHAsUEFSTXxSRVNQLFJNRU18QllURTEoYiksTE9ORzAoYyksUkVUKGQpKQkvKiBtZW1vcnkgYWNjZXNzIGZvciBmaXJtd2FyZSB3cml0ZSAqLworI2RlZmluZSBTRU5EX1NNRU0ocCxiLGMpICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxTTUVNfEJZVEUxKGIpLExPTkcwKGMpLFJFVCgwKSkJLyogbWVtb3J5IGFjY2VzcyBmb3IgZmlybXdhcmUgd3JpdGUgKi8KKyNkZWZpbmUgU0VORF9XTUVNKHAsYixjKSAgICAgICAgICAgc2VuZGNtZChwLFBBUk0sV01FTXxCWVRFMShiKSxMT05HMChjKSxSRVQoMCkpCS8qIG1lbW9yeSBhY2Nlc3MgZm9yIGZpcm13YXJlIHdyaXRlICovCisjZGVmaW5lIFNFTkRfU0RUTShwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNfFJFU1AsU0RUTXxUUklOSUIxKGIpLDAsUkVUKGMpKQkvKiBtZW1vcnkgYWNjZXNzIGZvciBmaXJtd2FyZSB3cml0ZSAqLworI2RlZmluZSBTRU5EX0dPVE8ocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxHT1RPLExPTkcwKGIpLFJFVCgwKSkJLyogbWVtb3J5IGFjY2VzcyBmb3IgZmlybXdhcmUgd3JpdGUgKi8KKyNkZWZpbmUgU0VORF9TRVREUExMKHApCSAgICAgICAgICAgc2VuZGNtZChwLDAsQVJNX1NFVERQTEwsMCxSRVQoMCkpCisjZGVmaW5lIFNFTkRfU1NUUihwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFNTVFJ8QllURTMoYiksTE9ORzAoYyksUkVUKDApKQkvKiBzdGFydCBzdHJlYW0gKi8KKyNkZWZpbmUgU0VORF9QU1RSKHAsYikgICAgICAgICAgICAgc2VuZGNtZChwLFBBUk0sUFNUUixCWVRFMyhiKSxSRVQoMCkpCS8qIHBhdXNlIHN0cmVhbSAqLworI2RlZmluZSBTRU5EX0tTVFIocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxLU1RSLEJZVEUzKGIpLFJFVCgwKSkJLyogc3RvcCBzdHJlYW0gKi8KKyNkZWZpbmUgU0VORF9LRE1BKHApICAgICAgICAgICAgICAgc2VuZGNtZChwLDAsS0RNQSwwLFJFVCgwKSkJLyogc3RvcCBhbGwgZG1hICovCisjZGVmaW5lIFNFTkRfR1BPUyhwLGIsYyxkKSAgICAgICAgIHNlbmRjbWQocCxQQVJNfFJFU1AsR1BPUyxCWVRFMyhjKXxCWVRFMihiKSxSRVQoZCkpCS8qIGdldCBwb3NpdGlvbiBpbiBkbWEgKi8KKyNkZWZpbmUgU0VORF9TRVRGKHAsYixjLGQsZSxmLGcpICAgc2VuZGNtZChwLFBBUk0sU0VURnxXT1JEMShiKXxCWVRFMyhjKSxkfEJZVEUxKGUpfEJZVEUyKGYpfEJZVEUzKGcpLFJFVCgwKSkJLyogc2V0IHNhbXBsZSBmb3JtYXQgYXQgbWl4ZXIgKi8KKyNkZWZpbmUgU0VORF9HU1RTKHAsYixjLGQpICAgICAgICAgc2VuZGNtZChwLFBBUk18UkVTUCxHU1RTLEJZVEUzKGMpfEJZVEUyKGIpLFJFVChkKSkKKyNkZWZpbmUgU0VORF9OR1BPUyhwLGIsYyxkKSAgICAgICAgc2VuZGNtZChwLFBBUk18UkVTUCxOR1BPUyxCWVRFMyhjKXxCWVRFMihiKSxSRVQoZCkpCisjZGVmaW5lIFNFTkRfUFNFTChwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFBTRUwsQllURTIoYil8QllURTMoYyksUkVUKDApKQkvKiBhY3RpdmF0ZSBsYnVzIHBhdGggKi8KKyNkZWZpbmUgU0VORF9QQ0xSKHAsYixjKSAgICAgICAgICAgc2VuZGNtZChwLFBBUk0sUENMUixCWVRFMihiKXxCWVRFMyhjKSxSRVQoMCkpCS8qIGRlYWN0aXZhdGUgbGJ1cyBwYXRoICovCisjZGVmaW5lIFNFTkRfUExTVChwLGIpICAgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFBMU1QsQllURTMoYiksUkVUKDApKQorI2RlZmluZSBTRU5EX1JTU1YocCxiLGMsZCkgICAgICAgICBzZW5kY21kKHAsUEFSTXxSRVNQLFJTU1YsQllURTIoYil8QllURTMoYyksUkVUKGQpKQorI2RlZmluZSBTRU5EX0xTRUwocCxiLGMsZCxlLGYsZyxoKSBzZW5kY21kKHAsUEFSTSxMU0VMfEJZVEUxKGIpfEJZVEUyKGMpfEJZVEUzKGQpLEJZVEUwKGUpfEJZVEUxKGYpfEJZVEUyKGcpfEJZVEUzKGgpLFJFVCgwKSkJLyogc2VsZWN0IHBhdGhzIGZvciBpbnRlcm5hbCBjb25uZWN0aW9ucyAqLworI2RlZmluZSBTRU5EX1NTUkMocCxiLGMsZCxlKSAgICAgICBzZW5kY21kKHAsUEFSTSxTU1JDfEJZVEUxKGIpfFdPUkQyKGMpLFdPUkQwKGQpfFdPUkQyKGUpLFJFVCgwKSkJLyogY29uZmlndXJlIHNvdXJjZSAqLworI2RlZmluZSBTRU5EX1NMU1QocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxTTFNULEJZVEUzKGIpLFJFVCgwKSkKKyNkZWZpbmUgU0VORF9SU1JDKHAsYixjKSAgICAgICAgICAgc2VuZGNtZChwLFJFU1AsUlNSQ3xCWVRFMShiKSwwLFJFVChjKSkJLyogcmVhZCBzb3VyY2UgY29uZmlnICovCisjZGVmaW5lIFNFTkRfU1NSQihwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFNTUkJ8QllURTEoYiksV09SRDIoYyksUkVUKDApKQorI2RlZmluZSBTRU5EX1NER1YocCxiLGMsZCxlKSAgICAgICBzZW5kY21kKHAsUEFSTSxTREdWfEJZVEUyKGIpfEJZVEUzKGMpLFdPUkQwKGQpfFdPUkQyKGUpLFJFVCgwKSkJLyogc2V0IGRpZ2l0YWwgbWl4ZXIgKi8KKyNkZWZpbmUgU0VORF9SREdWKHAsYixjLGQpICAgICAgICAgc2VuZGNtZChwLFBBUk18UkVTUCxSREdWfEJZVEUyKGIpfEJZVEUzKGMpLDAsUkVUKGQpKQkvKiByZWFkIGRpZ2l0YWwgbWl4ZXIgKi8KKyNkZWZpbmUgU0VORF9ETFNUKHAsYikgICAgICAgICAgICAgc2VuZGNtZChwLFBBUk0sRExTVCxCWVRFMyhiKSxSRVQoMCkpCisjZGVmaW5lIFNFTkRfU0FDUihwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFNBQ1IsV09SRDAoYil8V09SRDIoYyksUkVUKDApKQkvKiBzZXQgQUM5NyByZWdpc3RlciAqLworI2RlZmluZSBTRU5EX1JBQ1IocCxiLGMpICAgICAgICAgICBzZW5kY21kKHAsUEFSTXxSRVNQLFJBQ1IsV09SRDIoYiksUkVUKGMpKQkvKiBnZXQgQUM5NyByZWdpc3RlciAqLworI2RlZmluZSBTRU5EX0FMU1QocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxBTFNULEJZVEUzKGIpLFJFVCgwKSkKKyNkZWZpbmUgU0VORF9UWEFDKHAsYixjLGQsZSxmKSAgICAgc2VuZGNtZChwLFBBUk0sVFhBQ3xCWVRFMShiKXxXT1JEMihjKSxXT1JEMChkKXxCWVRFMihlKXxCWVRFMyhmKSxSRVQoMCkpCisjZGVmaW5lIFNFTkRfUlhBQyhwLGIsYyxkKSAgICAgICAgIHNlbmRjbWQocCxQQVJNfFJFU1AsUlhBQyxCWVRFMihiKXxCWVRFMyhjKSxSRVQoZCkpCisjZGVmaW5lIFNFTkRfU0kyUyhwLGIpICAgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFNJMlMsV09SRDIoYiksUkVUKDApKQorCisjZGVmaW5lIEVPQl9TVEFUVVMgICAgICAgICAweDgwMDAwMDAwCS8qIHN0YXR1cyBmbGFncyA6IGJsb2NrIGJvdW5kYXJ5ICovCisjZGVmaW5lIEVPU19TVEFUVVMgICAgICAgICAweDQwMDAwMDAwCS8qICAgICAgICAgICAgICA6IHN0b3BwcGVkICovCisjZGVmaW5lIEVPQ19TVEFUVVMgICAgICAgICAweDIwMDAwMDAwCS8qICAgICAgICAgICAgICA6IHN0cmVhbSBlbmQgKi8KKyNkZWZpbmUgRVJSX1NUQVRVUyAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRU1QVFlfU1RBVFVTICAgICAgIDB4MDgwMDAwMDAKKworI2RlZmluZSBJRU9CX0VOQUJMRSAgICAgICAgMHgxCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBzdGF0dXMgbm90aWZpY2F0aW9uIGFib3ZlICovCisjZGVmaW5lIElFT1NfRU5BQkxFICAgICAgICAweDIKKyNkZWZpbmUgSUVPQ19FTkFCTEUgICAgICAgIDB4NAorI2RlZmluZSBSRE9OQ0UgICAgICAgICAgICAgMHg4CisjZGVmaW5lIERFU0NfTUFYX01BU0sgICAgICAweGZmCisKKyNkZWZpbmUgU1RfUExBWSAgMHgxCQkvKiBzdHJlYW0gc3RhdGVzICovCisjZGVmaW5lIFNUX1NUT1AgIDB4MgorI2RlZmluZSBTVF9QQVVTRSAweDQKKworI2RlZmluZSBJMlNfSU5UREVDICAgICAzCS8qIGNvbmZpZyBmb3IgSTJTIGxpbmsgKi8KKyNkZWZpbmUgSTJTX01FUkdFUiAgICAgMAorI2RlZmluZSBJMlNfU1BMSVRURVIgICAwCisjZGVmaW5lIEkyU19NSVhFUiAgICAgIDcKKyNkZWZpbmUgSTJTX1JBVEUgICAgICAgNDQxMDAKKworI2RlZmluZSBNT0RFTV9JTlRERUMgICA0CS8qIGNvbmZpZyBmb3IgbW9kZW0gbGluayAqLworI2RlZmluZSBNT0RFTV9NRVJHRVIgICAzCisjZGVmaW5lIE1PREVNX1NQTElUVEVSIDAKKyNkZWZpbmUgTU9ERU1fTUlYRVIgICAgMTEKKworI2RlZmluZSBGTV9JTlRERUMgICAgICAzCS8qIGNvbmZpZyBmb3IgRk0vT1BMMyBsaW5rICovCisjZGVmaW5lIEZNX01FUkdFUiAgICAgIDAKKyNkZWZpbmUgRk1fU1BMSVRURVIgICAgMAorI2RlZmluZSBGTV9NSVhFUiAgICAgICA5CisKKyNkZWZpbmUgU1BMSVRfUEFUSCAgMHg4MAkvKiBwYXRoIHNwbGl0dGluZyBmbGFnICovCisKK2VudW0gRklSTVdBUkUgeworCURBVEFfUkVDID0gMCwgRVhUX0VORF9PRl9GSUxFLCBFWFRfU0VHX0FERFJfUkVDLCBFWFRfR09UT19DTURfUkVDLAorCUVYVF9MSU5fQUREUl9SRUMsCit9OworCitlbnVtIENNRFMgeworCUdFVFYgPSAweDAwLCBHRVRDLCBHVU5TLCBTQ0lELCBSTUVNID0KKwkgICAgMHgxMCwgU01FTSwgV01FTSwgU0RUTSwgR09UTywgU1NUUiA9CisJICAgIDB4MjAsIFBTVFIsIEtTVFIsIEtETUEsIEdQT1MsIFNFVEYsIEdTVFMsIE5HUE9TLCBQU0VMID0KKwkgICAgMHgzMCwgUENMUiwgUExTVCwgUlNTViwgTFNFTCwgU1NSQyA9IDB4NDAsIFNMU1QsIFJTUkMsIFNTUkIsIFNER1YgPQorCSAgICAweDUwLCBSREdWLCBETFNULCBTQUNSID0gMHg2MCwgUkFDUiwgQUxTVCwgVFhBQywgUlhBQywgU0kyUyA9CisJICAgIDB4NzAsIEFSTV9TRVREUExMID0gMHg3MiwKK307CisKK2VudW0gRTFTT1VSQ0UgeworCUFSTTJMQlVTX0ZJRk8wID0gMCwgQVJNMkxCVVNfRklGTzEsIEFSTTJMQlVTX0ZJRk8yLCBBUk0yTEJVU19GSUZPMywKKwlBUk0yTEJVU19GSUZPNCwgQVJNMkxCVVNfRklGTzUsIEFSTTJMQlVTX0ZJRk82LCBBUk0yTEJVU19GSUZPNywKKwlBUk0yTEJVU19GSUZPOCwgQVJNMkxCVVNfRklGTzksIEFSTTJMQlVTX0ZJRk8xMCwgQVJNMkxCVVNfRklGTzExLAorCUFSTTJMQlVTX0ZJRk8xMiwgQVJNMkxCVVNfRklGTzEzLCBBUk0yTEJVU19GSUZPMTQsIEFSTTJMQlVTX0ZJRk8xNSwKKwlJTlRFUjBfT1VULCBJTlRFUjFfT1VULCBJTlRFUjJfT1VULCBJTlRFUjNfT1VULCBJTlRFUjRfT1VULAorCUlOVEVSTTBfT1VULCBJTlRFUk0xX09VVCwgSU5URVJNMl9PVVQsIElOVEVSTTNfT1VULCBJTlRFUk00X09VVCwKKwlJTlRFUk01X09VVCwgSU5URVJNNl9PVVQsIERFQ0lNTTBfT1VULCBERUNJTU0xX09VVCwgREVDSU1NMl9PVVQsCisJREVDSU1NM19PVVQsIERFQ0lNMF9PVVQsIFNSM180X09VVCwgT1BMM19TQU1QTEUsIEFTUkMwLCBBU1JDMSwKKwlBQ0xOSzJQQURDLCBBQ0xOSzJNT0RFTTBSWCwgQUNMTksyTUlDLCBBQ0xOSzJNT0RFTTFSWCwgQUNMTksySE5ETUlDLAorCURJR0lUQUxfTUlYRVJfT1VUMCwgR0FJTkZVTkMwX09VVCwgR0FJTkZVTkMxX09VVCwgR0FJTkZVTkMyX09VVCwKKwlHQUlORlVOQzNfT1VULCBHQUlORlVOQzRfT1VULCBTT0ZUTU9ERU1UWCwgU1BMSVRURVIwX09VVEwsCisJU1BMSVRURVIwX09VVFIsIFNQTElUVEVSMV9PVVRMLCBTUExJVFRFUjFfT1VUUiwgU1BMSVRURVIyX09VVEwsCisJU1BMSVRURVIyX09VVFIsIFNQTElUVEVSM19PVVRMLCBTUExJVFRFUjNfT1VUUiwgTUVSR0VSMF9PVVQsCisJTUVSR0VSMV9PVVQsIE1FUkdFUjJfT1VULCBNRVJHRVIzX09VVCwgQVJNMkxCVVNfRklGT19ESVJFQ1QsIE5PX09VVAorfTsKKworZW51bSBFMlNJTksgeworCUxCVVMyQVJNX0ZJRk8wID0gMCwgTEJVUzJBUk1fRklGTzEsIExCVVMyQVJNX0ZJRk8yLCBMQlVTMkFSTV9GSUZPMywKKwlMQlVTMkFSTV9GSUZPNCwgTEJVUzJBUk1fRklGTzUsIExCVVMyQVJNX0ZJRk82LCBMQlVTMkFSTV9GSUZPNywKKwlJTlRFUjBfSU4sIElOVEVSMV9JTiwgSU5URVIyX0lOLCBJTlRFUjNfSU4sIElOVEVSNF9JTiwgSU5URVJNMF9JTiwKKwlJTlRFUk0xX0lOLCBJTlRFUk0yX0lOLCBJTlRFUk0zX0lOLCBJTlRFUk00X0lOLCBJTlRFUk01X0lOLCBJTlRFUk02X0lOLAorCURFQ0lNTTBfSU4sIERFQ0lNTTFfSU4sIERFQ0lNTTJfSU4sIERFQ0lNTTNfSU4sIERFQ0lNMF9JTiwgU1IzXzRfSU4sCisJUERBQzJBQ0xOSywgTU9ERU0wVFgyQUNMTkssIE1PREVNMVRYMkFDTE5LLCBITkRTUEsyQUNMTkssCisJRElHSVRBTF9NSVhFUl9JTjAsIERJR0lUQUxfTUlYRVJfSU4xLCBESUdJVEFMX01JWEVSX0lOMiwKKwlESUdJVEFMX01JWEVSX0lOMywgRElHSVRBTF9NSVhFUl9JTjQsIERJR0lUQUxfTUlYRVJfSU41LAorCURJR0lUQUxfTUlYRVJfSU42LCBESUdJVEFMX01JWEVSX0lONywgRElHSVRBTF9NSVhFUl9JTjgsCisJRElHSVRBTF9NSVhFUl9JTjksIERJR0lUQUxfTUlYRVJfSU4xMCwgRElHSVRBTF9NSVhFUl9JTjExLAorCUdBSU5GVU5DMF9JTiwgR0FJTkZVTkMxX0lOLCBHQUlORlVOQzJfSU4sIEdBSU5GVU5DM19JTiwgR0FJTkZVTkM0X0lOLAorCVNPRlRNT0RFTVJYLCBTUExJVFRFUjBfSU4sIFNQTElUVEVSMV9JTiwgU1BMSVRURVIyX0lOLCBTUExJVFRFUjNfSU4sCisJTUVSR0VSMF9JTkwsIE1FUkdFUjBfSU5SLCBNRVJHRVIxX0lOTCwgTUVSR0VSMV9JTlIsIE1FUkdFUjJfSU5MLAorCU1FUkdFUjJfSU5SLCBNRVJHRVIzX0lOTCwgTUVSR0VSM19JTlIsIEUyU0lOS19NQVgKK307CisKK2VudW0gTEJVU19TSU5LIHsKKwlMU19TUkNfSU5URVJQT0xBVE9SID0gMCwgTFNfU1JDX0lOVEVSUE9MQVRPUk0sIExTX1NSQ19ERUNJTUFUT1IsCisJTFNfU1JDX0RFQ0lNQVRPUk0sIExTX01JWEVSX0lOLCBMU19NSVhFUl9HQUlOX0ZVTkNUSU9OLAorCUxTX1NSQ19TUExJVFRFUiwgTFNfU1JDX01FUkdFUiwgTFNfTk9ORTEsIExTX05PTkUyLAorfTsKKworZW51bSBSVF9DSEFOTkVMX0lEUyB7CisJTTBUWCA9IDAsIE0xVFgsIFRBTVRYLCBIU1NQS1IsIFBEQUMsIERTTkRUWDAsIERTTkRUWDEsIERTTkRUWDIsCisJRFNORFRYMywgRFNORFRYNCwgRFNORFRYNSwgRFNORFRYNiwgRFNORFRYNywgV1ZTVFJUWCwgQ09QM0RUWCwgU1BBUkUsCisJTTBSWCwgSFNNSUMsIE0xUlgsIENMRUFOUlgsIE1JQ0FEQywgUEFEQywgQ09QUlgxLCBDT1BSWDIsCisJQ0hBTk5FTF9JRF9DT1VOVEVSCit9OworCitlbnVtIHsgU0JfQ01EID0gMCwgTU9ERU1fQ01ELCBJMlNfQ01EMCwgSTJTX0NNRDEsIEZNX0NNRCwgTUFYX0NNRCB9OworCitzdHJ1Y3QgbGJ1c3BhdGggeworCXVuc2lnbmVkIGNoYXIgKm5vY29udjsKKwl1bnNpZ25lZCBjaGFyICpzdGVyZW87CisJdW5zaWduZWQgY2hhciAqbW9ubzsKK307CisKK3N0cnVjdCBjbWRwb3J0IHsKKwl1MzIgZGF0YTE7CQkvKiBjbWQscGFyYW0gKi8KKwl1MzIgZGF0YTI7CQkvKiBwYXJhbSAqLworCXUzMiBzdGF0OwkJLyogc3RhdHVzICovCisJdTMyIHBhZFs1XTsKK307CisKK3N0cnVjdCByaXB0aWRlcG9ydCB7CisJdTMyIGF1ZGlvX2NvbnRyb2w7CS8qIHN0YXR1cyByZWdpc3RlcnMgKi8KKwl1MzIgYXVkaW9fc3RhdHVzOworCXUzMiBwYWRbMl07CisJc3RydWN0IGNtZHBvcnQgcG9ydFsyXTsJLyogY29tbWFuZCBwb3J0cyAqLworfTsKKworc3RydWN0IGNtZGlmIHsKKwlzdHJ1Y3QgcmlwdGlkZXBvcnQgKmh3cG9ydDsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50IGNtZGNudDsJLyogY21kIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBpbnQgY21kdGltZTsKKwl1bnNpZ25lZCBpbnQgY21kdGltZW1heDsKKwl1bnNpZ25lZCBpbnQgY21kdGltZW1pbjsKKwl1bnNpZ25lZCBpbnQgZXJyY250OworCWludCBpc19yZXNldDsKK307CisKK3N0cnVjdCByaXB0aWRlX2Zpcm13YXJlIHsKKwl1MTYgQVNJQzsKKwl1MTYgQ09ERUM7CisJdTE2IEFVWERTUDsKKwl1MTYgUFJPRzsKK307CisKK3VuaW9uIGNtZHJldCB7CisJdTggcmV0Ynl0ZXNbOF07CisJdTE2IHJldHdvcmRzWzRdOworCXUzMiByZXRsb25nc1syXTsKK307CisKK3VuaW9uIGZpcm13YXJlX3ZlcnNpb24geworCXVuaW9uIGNtZHJldCByZXQ7CisJc3RydWN0IHJpcHRpZGVfZmlybXdhcmUgZmlybXdhcmU7Cit9OworCisjZGVmaW5lIGdldF9wY21od2RldihzdWJzdHJlYW0pIChzdHJ1Y3QgcGNtaHcgKikoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEpCisKKyNkZWZpbmUgUExBWUJBQ0tfU1VCU1RSRUFNUyAzCitzdHJ1Y3Qgc25kX3JpcHRpZGUgeworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisKKwlzdHJ1Y3QgY21kaWYgKmNpZjsKKworCXN0cnVjdCBzbmRfcGNtICpwY207CisJc3RydWN0IHNuZF9wY20gKnBjbV9pMnM7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKwlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CisJc3RydWN0IHNuZF9hYzk3ICphYzk3OworCXN0cnVjdCBzbmRfYWM5N19idXMgKmFjOTdfYnVzOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwbGF5YmFja19zdWJzdHJlYW1bUExBWUJBQ0tfU1VCU1RSRUFNU107CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpjYXB0dXJlX3N1YnN0cmVhbTsKKworCWludCBvcGVuc3RyZWFtczsKKworCWludCBpcnE7CisJdW5zaWduZWQgbG9uZyBwb3J0OworCXVuc2lnbmVkIHNob3J0IG1wdWFkZHI7CisJdW5zaWduZWQgc2hvcnQgb3BsYWRkcjsKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCisJdW5zaWduZWQgc2hvcnQgZ2FtZWFkZHI7CisjZW5kaWYKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19wb3J0OworCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOworCisJdW5pb24gZmlybXdhcmVfdmVyc2lvbiBmaXJtd2FyZTsKKworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcmlwdGlkZV90cTsKKwlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CisKKwl1bnNpZ25lZCBsb25nIHJlY2VpdmVkX2lycXM7CisJdW5zaWduZWQgbG9uZyBoYW5kbGVkX2lycXM7CisjaWZkZWYgQ09ORklHX1BNCisJaW50IGluX3N1c3BlbmQ7CisjZW5kaWYKK307CisKK3N0cnVjdCBzZ2QgewkJCS8qIHNjYXR0ZXIgZ2F0aGVyIGRlc3JpcHRvciAqLworCXUzMiBkd05leHRMaW5rOworCXUzMiBkd1NlZ1B0clBoeXM7CisJdTMyIGR3U2VnTGVuOworCXUzMiBkd1N0YXRfQ3RsOworfTsKKworc3RydWN0IHBjbWh3IHsJCQkvKiBwY20gZGVzY3JpcHRvciAqLworCXN0cnVjdCBsYnVzcGF0aCBwYXRoczsKKwl1bnNpZ25lZCBjaGFyICpsYnVzcGF0aDsKKwl1bnNpZ25lZCBjaGFyIHNvdXJjZTsKKwl1bnNpZ25lZCBjaGFyIGludGRlY1syXTsKKwl1bnNpZ25lZCBjaGFyIG1peGVyOworCXVuc2lnbmVkIGNoYXIgaWQ7CisJdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CisJc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQ7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyIHNnZGxpc3Q7CisJc3RydWN0IHNnZCAqc2dkYnVmOworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGludCBwYWdlczsKKwl1bnNpZ25lZCBpbnQgb2xkcG9zOworCXVuc2lnbmVkIGludCBwb2ludGVyOworfTsKKworI2RlZmluZSBDTURSRVRfWkVSTyAodW5pb24gY21kcmV0KXt7KHUzMikwLCAodTMyKSAwfX0KKworc3RhdGljIGludCBzZW5kY21kKHN0cnVjdCBjbWRpZiAqY2lmLCB1MzIgZmxhZ3MsIHUzMiBjbWQsIHUzMiBwYXJtLAorCQkgICB1bmlvbiBjbWRyZXQgKnJldCk7CitzdGF0aWMgaW50IGdldHNvdXJjZXNpbmsoc3RydWN0IGNtZGlmICpjaWYsIHVuc2lnbmVkIGNoYXIgc291cmNlLAorCQkJIHVuc2lnbmVkIGNoYXIgc2luaywgdW5zaWduZWQgY2hhciAqYSwKKwkJCSB1bnNpZ25lZCBjaGFyICpiKTsKK3N0YXRpYyBpbnQgc25kX3JpcHRpZGVfaW5pdGlhbGl6ZShzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXApOworc3RhdGljIGludCByaXB0aWRlX3Jlc2V0KHN0cnVjdCBjbWRpZiAqY2lmLCBzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXApOworCisvKgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcmlwdGlkZV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkgLnZlbmRvciA9IDB4MTI3YSwuZGV2aWNlID0gMHg0MzEwLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIC52ZW5kb3IgPSAweDEyN2EsLmRldmljZSA9IDB4NDMyMCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJeworCSAudmVuZG9yID0gMHgxMjdhLC5kZXZpY2UgPSAweDQzMzAsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSB9LAorCXsKKwkgLnZlbmRvciA9IDB4MTI3YSwuZGV2aWNlID0gMHg0MzQwLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7MCx9LAorfTsKKworI2lmZGVmIFNVUFBPUlRfSk9ZU1RJQ0sKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcmlwdGlkZV9qb3lzdGlja19pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkgLnZlbmRvciA9IDB4MTI3YSwuZGV2aWNlID0gMHg0MzEyLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIC52ZW5kb3IgPSAweDEyN2EsLmRldmljZSA9IDB4NDMyMiwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJey52ZW5kb3IgPSAweDEyN2EsLmRldmljZSA9IDB4NDMzMiwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJey52ZW5kb3IgPSAweDEyN2EsLmRldmljZSA9IDB4NDM0MiwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJezAsfSwKK307CisjZW5kaWYKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNuZF9yaXB0aWRlX2lkcyk7CisKKy8qCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c2luMm91dFtFMlNJTktfTUFYICsgMV1bMl0gPSB7CisJe05PX09VVCwgTFNfTk9ORTF9LCB7Tk9fT1VULCBMU19OT05FMn0sIHtOT19PVVQsIExTX05PTkUxfSwge05PX09VVCwKKwkJCQkJCQkJICAgICBMU19OT05FMn0sCisJe05PX09VVCwgTFNfTk9ORTF9LCB7Tk9fT1VULCBMU19OT05FMn0sIHtOT19PVVQsIExTX05PTkUxfSwge05PX09VVCwKKwkJCQkJCQkJICAgICBMU19OT05FMn0sCisJe0lOVEVSMF9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1J9LCB7SU5URVIxX09VVCwgTFNfU1JDX0lOVEVSUE9MQVRPUn0sCisJe0lOVEVSMl9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1J9LCB7SU5URVIzX09VVCwgTFNfU1JDX0lOVEVSUE9MQVRPUn0sCisJe0lOVEVSNF9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1J9LCB7SU5URVJNMF9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1JNfSwKKwl7SU5URVJNMV9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1JNfSwge0lOVEVSTTJfT1VULAorCQkJCQkgICAgICBMU19TUkNfSU5URVJQT0xBVE9STX0sCisJe0lOVEVSTTNfT1VULCBMU19TUkNfSU5URVJQT0xBVE9STX0sIHtJTlRFUk00X09VVCwKKwkJCQkJICAgICAgTFNfU1JDX0lOVEVSUE9MQVRPUk19LAorCXtJTlRFUk01X09VVCwgTFNfU1JDX0lOVEVSUE9MQVRPUk19LCB7SU5URVJNNl9PVVQsCisJCQkJCSAgICAgIExTX1NSQ19JTlRFUlBPTEFUT1JNfSwKKwl7REVDSU1NMF9PVVQsIExTX1NSQ19ERUNJTUFUT1JNfSwge0RFQ0lNTTFfT1VULCBMU19TUkNfREVDSU1BVE9STX0sCisJe0RFQ0lNTTJfT1VULCBMU19TUkNfREVDSU1BVE9STX0sIHtERUNJTU0zX09VVCwgTFNfU1JDX0RFQ0lNQVRPUk19LAorCXtERUNJTTBfT1VULCBMU19TUkNfREVDSU1BVE9SfSwge1NSM180X09VVCwgTFNfTk9ORTF9LCB7Tk9fT1VULAorCQkJCQkJCQlMU19OT05FMn0sCisJe05PX09VVCwgTFNfTk9ORTF9LCB7Tk9fT1VULCBMU19OT05FMn0sIHtOT19PVVQsIExTX05PTkUxfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7R0FJTkZVTkMwX09VVCwgTFNfTUlYRVJfR0FJTl9GVU5DVElPTn0sIHtHQUlORlVOQzFfT1VULAorCQkJCQkJICBMU19NSVhFUl9HQUlOX0ZVTkNUSU9OfSwKKwl7R0FJTkZVTkMyX09VVCwgTFNfTUlYRVJfR0FJTl9GVU5DVElPTn0sIHtHQUlORlVOQzNfT1VULAorCQkJCQkJICBMU19NSVhFUl9HQUlOX0ZVTkNUSU9OfSwKKwl7R0FJTkZVTkM0X09VVCwgTFNfTUlYRVJfR0FJTl9GVU5DVElPTn0sIHtTT0ZUTU9ERU1UWCwgTFNfTk9ORTF9LAorCXtTUExJVFRFUjBfT1VUTCwgTFNfU1JDX1NQTElUVEVSfSwge1NQTElUVEVSMV9PVVRMLCBMU19TUkNfU1BMSVRURVJ9LAorCXtTUExJVFRFUjJfT1VUTCwgTFNfU1JDX1NQTElUVEVSfSwge1NQTElUVEVSM19PVVRMLCBMU19TUkNfU1BMSVRURVJ9LAorCXtNRVJHRVIwX09VVCwgTFNfU1JDX01FUkdFUn0sIHtNRVJHRVIwX09VVCwgTFNfU1JDX01FUkdFUn0sCisJe01FUkdFUjFfT1VULCBMU19TUkNfTUVSR0VSfSwKKwl7TUVSR0VSMV9PVVQsIExTX1NSQ19NRVJHRVJ9LCB7TUVSR0VSMl9PVVQsIExTX1NSQ19NRVJHRVJ9LAorCXtNRVJHRVIyX09VVCwgTFNfU1JDX01FUkdFUn0sCisJe01FUkdFUjNfT1VULCBMU19TUkNfTUVSR0VSfSwge01FUkdFUjNfT1VULCBMU19TUkNfTUVSR0VSfSwge05PX09VVCwKKwkJCQkJCQkJICAgICBMU19OT05FMn0sCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfb3BsM1tdID0geworCURJR0lUQUxfTUlYRVJfSU4wICsgRk1fTUlYRVIsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfbW9kZW1bXSA9IHsKKwlESUdJVEFMX01JWEVSX0lOMCArIE1PREVNX01JWEVSLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X2kyc1tdID0geworCUlOVEVSMF9JTiArIEkyU19JTlRERUMsIERJR0lUQUxfTUlYRVJfSU4wICsgSTJTX01JWEVSLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X291dFtdID0geworCVBEQUMyQUNMTkssIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfb3V0aHBbXSA9IHsKKwlITkRTUEsyQUNMTkssIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfbm9jb252MVtdID0geworCURJR0lUQUxfTUlYRVJfSU4wLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X3N0ZXJlbzFbXSA9IHsKKwlJTlRFUjBfSU4sIERJR0lUQUxfTUlYRVJfSU4wLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X21vbm8xW10gPSB7CisJSU5URVJNMF9JTiwgRElHSVRBTF9NSVhFUl9JTjAsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfbm9jb252MltdID0geworCURJR0lUQUxfTUlYRVJfSU4xLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X3N0ZXJlbzJbXSA9IHsKKwlJTlRFUjFfSU4sIERJR0lUQUxfTUlYRVJfSU4xLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X21vbm8yW10gPSB7CisJSU5URVJNMV9JTiwgRElHSVRBTF9NSVhFUl9JTjEsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfbm9jb252M1tdID0geworCURJR0lUQUxfTUlYRVJfSU4yLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X3N0ZXJlbzNbXSA9IHsKKwlJTlRFUjJfSU4sIERJR0lUQUxfTUlYRVJfSU4yLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X21vbm8zW10gPSB7CisJSU5URVJNMl9JTiwgRElHSVRBTF9NSVhFUl9JTjIsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3JlY19ub2NvbnYxW10gPSB7CisJTEJVUzJBUk1fRklGTzUsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3JlY19zdGVyZW8xW10gPSB7CisJREVDSU0wX0lOLCBMQlVTMkFSTV9GSUZPNSwgMHhmZgorfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGxidXNfcmVjX21vbm8xW10gPSB7CisJREVDSU1NM19JTiwgTEJVUzJBUk1fRklGTzUsIDB4ZmYKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBsYXlfaWRzW10gPSB7IDQsIDEsIDIsIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBwbGF5X3NvdXJjZXNbXSA9IHsKKwlBUk0yTEJVU19GSUZPNCwgQVJNMkxCVVNfRklGTzEsIEFSTTJMQlVTX0ZJRk8yLAorfTsKK3N0YXRpYyBzdHJ1Y3QgbGJ1c3BhdGggbGJ1c19wbGF5X3BhdGhzW10gPSB7CisJeworCSAubm9jb252ID0gbGJ1c19wbGF5X25vY29udjEsCisJIC5zdGVyZW8gPSBsYnVzX3BsYXlfc3RlcmVvMSwKKwkgLm1vbm8gPSBsYnVzX3BsYXlfbW9ubzEsCisJIH0sCisJeworCSAubm9jb252ID0gbGJ1c19wbGF5X25vY29udjIsCisJIC5zdGVyZW8gPSBsYnVzX3BsYXlfc3RlcmVvMiwKKwkgLm1vbm8gPSBsYnVzX3BsYXlfbW9ubzIsCisJIH0sCisJeworCSAubm9jb252ID0gbGJ1c19wbGF5X25vY29udjMsCisJIC5zdGVyZW8gPSBsYnVzX3BsYXlfc3RlcmVvMywKKwkgLm1vbm8gPSBsYnVzX3BsYXlfbW9ubzMsCisJIH0sCit9Oworc3RhdGljIHN0cnVjdCBsYnVzcGF0aCBsYnVzX3JlY19wYXRoID0geworCS5ub2NvbnYgPSBsYnVzX3JlY19ub2NvbnYxLAorCS5zdGVyZW8gPSBsYnVzX3JlY19zdGVyZW8xLAorCS5tb25vID0gbGJ1c19yZWNfbW9ubzEsCit9OworCisjZGVmaW5lIEZJUk1XQVJFX1ZFUlNJT05TIDEKK3N0YXRpYyB1bmlvbiBmaXJtd2FyZV92ZXJzaW9uIGZpcm13YXJlX3ZlcnNpb25zW10gPSB7CisJeworCSAuZmlybXdhcmUuQVNJQyA9IDMsLmZpcm13YXJlLkNPREVDID0gMiwKKwkgLmZpcm13YXJlLkFVWERTUCA9IDMsLmZpcm13YXJlLlBST0cgPSA3NzMsCisJIH0sCit9OworCitzdGF0aWMgdTMyIGF0b2godW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBsZW4pCit7CisJdTMyIHN1bSA9IDA7CisJdW5zaWduZWQgaW50IG11bHQgPSAxOworCXVuc2lnbmVkIGNoYXIgYzsKKworCXdoaWxlIChsZW4pIHsKKwkJYyA9IGluW2xlbiAtIDFdOworCQlpZiAoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKQorCQkJc3VtICs9IG11bHQgKiAoYyAtICcwJyk7CisJCWVsc2UgaWYgKChjID49ICdBJykgJiYgKGMgPD0gJ0YnKSkKKwkJCXN1bSArPSBtdWx0ICogKGMgLSAoJ0EnIC0gMTApKTsKKwkJZWxzZSBpZiAoKGMgPj0gJ2EnKSAmJiAoYyA8PSAnZicpKQorCQkJc3VtICs9IG11bHQgKiAoYyAtICgnYScgLSAxMCkpOworCQltdWx0ICo9IDE2OworCQktLWxlbjsKKwl9CisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIGludCBzZW5kZGF0YShzdHJ1Y3QgY21kaWYgKmNpZiwgdW5zaWduZWQgY2hhciAqaW4sIHUzMiBvZmZzZXQpCit7CisJdTMyIGFkZHI7CisJdTMyIGRhdGE7CisJdTMyIGk7CisJdW5zaWduZWQgY2hhciAqcDsKKworCWkgPSBhdG9oKCZpblsxXSwgMik7CisJYWRkciA9IG9mZnNldCArIGF0b2goJmluWzNdLCA0KTsKKwlpZiAoU0VORF9TTUVNKGNpZiwgMCwgYWRkcikgIT0gMCkKKwkJcmV0dXJuIC1FQUNDRVM7CisJcCA9IGluICsgOTsKKwl3aGlsZSAoaSkgeworCQlkYXRhID0gYXRvaChwLCA4KTsKKwkJaWYgKFNFTkRfV01FTShjaWYsIDIsCisJCQkgICAgICAoKGRhdGEgJiAweDBmMGYwZjBmKSA8PCA0KSB8ICgoZGF0YSAmIDB4ZjBmMGYwZjApCisJCQkJCQkJICAgID4+IDQpKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCQlpIC09IDQ7CisJCXAgKz0gODsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9hZGZpcm13YXJlKHN0cnVjdCBjbWRpZiAqY2lmLCB1bnNpZ25lZCBjaGFyICppbWcsCisJCQl1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICppbjsKKwl1MzIgbGFkZHIsIHNhZGRyLCB0LCB2YWw7CisJaW50IGVyciA9IDA7CisKKwlsYWRkciA9IHNhZGRyID0gMDsKKwl3aGlsZSAoc2l6ZSA+IDAgJiYgZXJyID09IDApIHsKKwkJaW4gPSBpbWc7CisJCWlmIChpblswXSA9PSAnOicpIHsKKwkJCXQgPSBhdG9oKCZpbls3XSwgMik7CisJCQlzd2l0Y2ggKHQpIHsKKwkJCWNhc2UgREFUQV9SRUM6CisJCQkJZXJyID0gc2VuZGRhdGEoY2lmLCBpbiwgbGFkZHIgKyBzYWRkcik7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYVF9TRUdfQUREUl9SRUM6CisJCQkJc2FkZHIgPSBhdG9oKCZpbls5XSwgNCkgPDwgNDsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUX0xJTl9BRERSX1JFQzoKKwkJCQlsYWRkciA9IGF0b2goJmluWzldLCA0KSA8PCAxNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUX0dPVE9fQ01EX1JFQzoKKwkJCQl2YWwgPSBhdG9oKCZpbls5XSwgOCk7CisJCQkJaWYgKFNFTkRfR09UTyhjaWYsIHZhbCkgIT0gMCkKKwkJCQkJZXJyID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUX0VORF9PRl9GSUxFOgorCQkJCXNpemUgPSAwOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCXdoaWxlIChzaXplID4gMCkgeworCQkJCXNpemUtLTsKKwkJCQlpZiAoKmltZysrID09ICdcbicpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXNuZF9wcmludGRkKCJsb2FkIGZpcm13YXJlIHJldHVybiAlZFxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorYWxsb2NsYnVzcGF0aChzdHJ1Y3QgY21kaWYgKmNpZiwgdW5zaWduZWQgY2hhciBzb3VyY2UsCisJICAgICAgdW5zaWduZWQgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqbWl4ZXIsIHVuc2lnbmVkIGNoYXIgKnMpCit7CisJd2hpbGUgKCpwYXRoICE9IDB4ZmYpIHsKKwkJdW5zaWduZWQgY2hhciBzaW5rLCB0eXBlOworCisJCXNpbmsgPSAqcGF0aCAmICh+U1BMSVRfUEFUSCk7CisJCWlmIChzaW5rICE9IEUyU0lOS19NQVgpIHsKKwkJCXNuZF9wcmludGRkKCJhbGxvYyBwYXRoIDB4JXgtPjB4JXhcbiIsIHNvdXJjZSwgc2luayk7CisJCQlTRU5EX1BTRUwoY2lmLCBzb3VyY2UsIHNpbmspOworCQkJc291cmNlID0gbGJ1c2luMm91dFtzaW5rXVswXTsKKwkJCXR5cGUgPSBsYnVzaW4yb3V0W3NpbmtdWzFdOworCQkJaWYgKHR5cGUgPT0gTFNfTUlYRVJfSU4pIHsKKwkJCQlpZiAobWl4ZXIpCisJCQkJCSptaXhlciA9IHNpbmsgLSBESUdJVEFMX01JWEVSX0lOMDsKKwkJCX0KKwkJCWlmICh0eXBlID09IExTX1NSQ19ERUNJTUFUT1JNIHx8CisJCQkgICAgdHlwZSA9PSBMU19TUkNfREVDSU1BVE9SIHx8CisJCQkgICAgdHlwZSA9PSBMU19TUkNfSU5URVJQT0xBVE9STSB8fAorCQkJICAgIHR5cGUgPT0gTFNfU1JDX0lOVEVSUE9MQVRPUikgeworCQkJCWlmIChzKSB7CisJCQkJCWlmIChzWzBdICE9IDB4ZmYpCisJCQkJCQlzWzFdID0gc2luazsKKwkJCQkJZWxzZQorCQkJCQkJc1swXSA9IHNpbms7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICgqcGF0aCsrICYgU1BMSVRfUEFUSCkgeworCQkJdW5zaWduZWQgY2hhciAqbnBhdGggPSBwYXRoOworCisJCQl3aGlsZSAoKm5wYXRoICE9IDB4ZmYpCisJCQkJbnBhdGgrKzsKKwkJCWFsbG9jbGJ1c3BhdGgoY2lmLCBzb3VyY2UgKyAxLCArK25wYXRoLCBtaXhlciwgcyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlbGJ1c3BhdGgoc3RydWN0IGNtZGlmICpjaWYsIHVuc2lnbmVkIGNoYXIgc291cmNlLCB1bnNpZ25lZCBjaGFyICpwYXRoKQoreworCXdoaWxlICgqcGF0aCAhPSAweGZmKSB7CisJCXVuc2lnbmVkIGNoYXIgc2luazsKKworCQlzaW5rID0gKnBhdGggJiAoflNQTElUX1BBVEgpOworCQlpZiAoc2luayAhPSBFMlNJTktfTUFYKSB7CisJCQlzbmRfcHJpbnRkZCgiZnJlZSBwYXRoIDB4JXgtPjB4JXhcbiIsIHNvdXJjZSwgc2luayk7CisJCQlTRU5EX1BDTFIoY2lmLCBzb3VyY2UsIHNpbmspOworCQkJc291cmNlID0gbGJ1c2luMm91dFtzaW5rXVswXTsKKwkJfQorCQlpZiAoKnBhdGgrKyAmIFNQTElUX1BBVEgpIHsKKwkJCXVuc2lnbmVkIGNoYXIgKm5wYXRoID0gcGF0aDsKKworCQkJd2hpbGUgKCpucGF0aCAhPSAweGZmKQorCQkJCW5wYXRoKys7CisJCQlmcmVlbGJ1c3BhdGgoY2lmLCBzb3VyY2UgKyAxLCArK25wYXRoKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCB3cml0ZWFybShzdHJ1Y3QgY21kaWYgKmNpZiwgdTMyIGFkZHIsIHUzMiBkYXRhLCB1MzIgbWFzaykKK3sKKwl1bmlvbiBjbWRyZXQgcnB0ciA9IENNRFJFVF9aRVJPOworCXVuc2lnbmVkIGludCBpID0gTUFYX1dSSVRFX1JFVFJZOworCWludCBmbGFnID0gMTsKKworCVNFTkRfUk1FTShjaWYsIDB4MDIsIGFkZHIsICZycHRyKTsKKwlycHRyLnJldGxvbmdzWzBdICY9ICh+bWFzayk7CisKKwl3aGlsZSAoLS1pKSB7CisJCVNFTkRfU01FTShjaWYsIDB4MDEsIGFkZHIpOworCQlTRU5EX1dNRU0oY2lmLCAweDAyLCAocnB0ci5yZXRsb25nc1swXSB8IGRhdGEpKTsKKwkJU0VORF9STUVNKGNpZiwgMHgwMiwgYWRkciwgJnJwdHIpOworCQlpZiAoKHJwdHIucmV0bG9uZ3NbMF0gJiBkYXRhKSA9PSBkYXRhKSB7CisJCQlmbGFnID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXJwdHIucmV0bG9uZ3NbMF0gJj0gfm1hc2s7CisJfQorCXNuZF9wcmludGRkKCJzZW5kIGFybSAweCV4IDB4JXggMHgleCByZXR1cm4gJWRcbiIsIGFkZHIsIGRhdGEsIG1hc2ssCisJCSAgICBmbGFnKTsKKwlyZXR1cm4gZmxhZzsKK30KKworc3RhdGljIGludCBzZW5kY21kKHN0cnVjdCBjbWRpZiAqY2lmLCB1MzIgZmxhZ3MsIHUzMiBjbWQsIHUzMiBwYXJtLAorCQkgICB1bmlvbiBjbWRyZXQgKnJldCkKK3sKKwlpbnQgaSwgajsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCB0aW1lID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCByaXB0aWRlcG9ydCAqaHdwb3J0OworCXN0cnVjdCBjbWRwb3J0ICpjbWRwb3J0ID0gTlVMTDsKKworCXNuZF9hc3NlcnQoY2lmLCByZXR1cm4gLUVJTlZBTCk7CisKKwlod3BvcnQgPSBjaWYtPmh3cG9ydDsKKwlpZiAoY2lmLT5lcnJjbnQgPiBNQVhfRVJST1JfQ09VTlQpIHsKKwkJaWYgKGNpZi0+aXNfcmVzZXQpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCQkgICAiUmlwdGlkZTogVG9vIG1hbnkgZmFpbGVkIGNtZHMsIHJlaW5pdGlhbGl6aW5nXG4iKTsKKwkJCWlmIChyaXB0aWRlX3Jlc2V0KGNpZiwgTlVMTCkgPT0gMCkgeworCQkJCWNpZi0+ZXJyY250ID0gMDsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJSaXB0aWRlOiBJbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZXQpIHsKKwkJcmV0LT5yZXRsb25nc1swXSA9IDA7CisJCXJldC0+cmV0bG9uZ3NbMV0gPSAwOworCX0KKwlpID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2lmLT5sb2NrLCBpcnFmbGFncyk7CisJd2hpbGUgKGkrKyA8IENNRElGX1RJTUVPVVQgJiYgIUlTX1JFQURZKGNpZi0+aHdwb3J0KSkKKwkJdWRlbGF5KDEwKTsKKwlpZiAoaSA+PSBDTURJRl9USU1FT1VUKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJZXJyID0gMDsKKwlmb3IgKGogPSAwLCB0aW1lID0gMDsgdGltZSA8IENNRElGX1RJTUVPVVQ7IGorKywgdGltZSArPSAyKSB7CisJCWNtZHBvcnQgPSAmKGh3cG9ydC0+cG9ydFtqICUgMl0pOworCQlpZiAoSVNfREFURihjbWRwb3J0KSkgewkvKiBmcmVlIHBlbmRpbmcgZGF0YSAqLworCQkJUkVBRF9QT1JUX1VMT05HKGNtZHBvcnQtPmRhdGExKTsKKwkJCVJFQURfUE9SVF9VTE9ORyhjbWRwb3J0LT5kYXRhMik7CisJCX0KKwkJaWYgKElTX0NNREUoY21kcG9ydCkpIHsKKwkJCWlmIChmbGFncyAmIFBBUk0pCS8qIHB1dCBkYXRhICovCisJCQkJV1JJVEVfUE9SVF9VTE9ORyhjbWRwb3J0LT5kYXRhMiwgcGFybSk7CisJCQlXUklURV9QT1JUX1VMT05HKGNtZHBvcnQtPmRhdGExLCBjbWQpOwkvKiB3cml0ZSBjbWQgKi8KKwkJCWlmICgoZmxhZ3MgJiBSRVNQKSAmJiByZXQpIHsKKwkJCQl3aGlsZSAoIUlTX0RBVEYoY21kcG9ydCkgJiYKKwkJCQkgICAgICAgdGltZSsrIDwgQ01ESUZfVElNRU9VVCkKKwkJCQkJdWRlbGF5KDEwKTsKKwkJCQlpZiAodGltZSA8IENNRElGX1RJTUVPVVQpIHsJLyogcmVhZCByZXNwb25zZSAqLworCQkJCQlyZXQtPnJldGxvbmdzWzBdID0KKwkJCQkJICAgIFJFQURfUE9SVF9VTE9ORyhjbWRwb3J0LT5kYXRhMSk7CisJCQkJCXJldC0+cmV0bG9uZ3NbMV0gPQorCQkJCQkgICAgUkVBRF9QT1JUX1VMT05HKGNtZHBvcnQtPmRhdGEyKTsKKwkJCQl9IGVsc2UgeworCQkJCQllcnIgPSAtRU5PU1lTOworCQkJCQlnb3RvIGVycm91dDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMjApOworCX0KKwlpZiAodGltZSA9PSBDTURJRl9USU1FT1VUKSB7CisJCWVyciA9IC1FTk9EQVRBOworCQlnb3RvIGVycm91dDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2lmLT5sb2NrLCBpcnFmbGFncyk7CisKKwljaWYtPmNtZGNudCsrOwkJLyogdXBkYXRlIGNvbW1hbmQgc3RhdGlzdGljcyAqLworCWNpZi0+Y21kdGltZSArPSB0aW1lOworCWlmICh0aW1lID4gY2lmLT5jbWR0aW1lbWF4KQorCQljaWYtPmNtZHRpbWVtYXggPSB0aW1lOworCWlmICh0aW1lIDwgY2lmLT5jbWR0aW1lbWluKQorCQljaWYtPmNtZHRpbWVtaW4gPSB0aW1lOworCWlmICgoY2lmLT5jbWRjbnQpICUgMTAwMCA9PSAwKQorCQlzbmRfcHJpbnRkZAorCQkgICAgKCJzZW5kIGNtZCAlZCB0aW1lOiAlZCBtaW50aW1lOiAlZCBtYXh0aW1lICVkIGVycjogJWRcbiIsCisJCSAgICAgY2lmLT5jbWRjbnQsIGNpZi0+Y21kdGltZSwgY2lmLT5jbWR0aW1lbWluLAorCQkgICAgIGNpZi0+Y21kdGltZW1heCwgY2lmLT5lcnJjbnQpOworCXJldHVybiAwOworCisgICAgICBlcnJvdXQ6CisJY2lmLT5lcnJjbnQrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaWYtPmxvY2ssIGlycWZsYWdzKTsKKwlzbmRfcHJpbnRkZAorCSAgICAoInNlbmQgY21kICVkIGh3OiAweCV4IGZsYWc6IDB4JXggY21kOiAweCV4IHBhcm06IDB4JXggcmV0OiAweCV4IDB4JXggQ01ERTogJWQgREFURjogJWQgZmFpbGVkICVkXG4iLAorCSAgICAgY2lmLT5jbWRjbnQsIChpbnQpKCh2b2lkICopJihjbWRwb3J0LT5zdGF0KSAtICh2b2lkICopaHdwb3J0KSwKKwkgICAgIGZsYWdzLCBjbWQsIHBhcm0sIHJldCA/IHJldC0+cmV0bG9uZ3NbMF0gOiAwLAorCSAgICAgcmV0ID8gcmV0LT5yZXRsb25nc1sxXSA6IDAsIElTX0NNREUoY21kcG9ydCksIElTX0RBVEYoY21kcG9ydCksCisJICAgICBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3NldG1peGVyKHN0cnVjdCBjbWRpZiAqY2lmLCBzaG9ydCBudW0sIHVuc2lnbmVkIHNob3J0IHJ2YWwsIHVuc2lnbmVkIHNob3J0IGx2YWwpCit7CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKwlpbnQgaSA9IDA7CisKKwlzbmRfcHJpbnRkZCgic2VudCBtaXhlciAlZDogMHglZCAweCVkXG4iLCBudW0sIHJ2YWwsIGx2YWwpOworCWRvIHsKKwkJU0VORF9TREdWKGNpZiwgbnVtLCBudW0sIHJ2YWwsIGx2YWwpOworCQlTRU5EX1JER1YoY2lmLCBudW0sIG51bSwgJnJwdHIpOworCQlpZiAocnB0ci5yZXR3b3Jkc1swXSA9PSBsdmFsICYmIHJwdHIucmV0d29yZHNbMV0gPT0gcnZhbCkKKwkJCXJldHVybiAwOworCX0gd2hpbGUgKGkrKyA8IE1BWF9XUklURV9SRVRSWSk7CisJc25kX3ByaW50ZGQoInNlbnQgbWl4ZXIgZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBnZXRwYXRocyhzdHJ1Y3QgY21kaWYgKmNpZiwgdW5zaWduZWQgY2hhciAqbykKK3sKKwl1bnNpZ25lZCBjaGFyIHNyY1tFMlNJTktfTUFYXTsKKwl1bnNpZ25lZCBjaGFyIHNpbmtbRTJTSU5LX01BWF07CisJaW50IGksIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IEUyU0lOS19NQVg7IGkrKykgeworCQlnZXRzb3VyY2VzaW5rKGNpZiwgaSwgaSwgJnNyY1tpXSwgJnNpbmtbaV0pOworCQlpZiAoc2lua1tpXSA8IEUyU0lOS19NQVgpIHsKKwkJCW9baisrXSA9IHNpbmtbaV07CisJCQlvW2orK10gPSBpOworCQl9CisJfQorCXJldHVybiBqOworfQorCitzdGF0aWMgaW50CitnZXRzb3VyY2VzaW5rKHN0cnVjdCBjbWRpZiAqY2lmLCB1bnNpZ25lZCBjaGFyIHNvdXJjZSwgdW5zaWduZWQgY2hhciBzaW5rLAorCSAgICAgIHVuc2lnbmVkIGNoYXIgKmEsIHVuc2lnbmVkIGNoYXIgKmIpCit7CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKworCWlmIChTRU5EX1JTU1YoY2lmLCBzb3VyY2UsIHNpbmssICZycHRyKSAmJgorCSAgICBTRU5EX1JTU1YoY2lmLCBzb3VyY2UsIHNpbmssICZycHRyKSkKKwkJcmV0dXJuIC1FSU87CisJKmEgPSBycHRyLnJldGJ5dGVzWzBdOworCSpiID0gcnB0ci5yZXRieXRlc1sxXTsKKwlzbmRfcHJpbnRkZCgiZ2V0c291cmNlc2luayAweCV4IDB4JXhcbiIsICphLCAqYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldHNhbXBsZXJhdGUoc3RydWN0IGNtZGlmICpjaWYsIHVuc2lnbmVkIGNoYXIgKmludGRlYywgdW5zaWduZWQgaW50ICpyYXRlKQoreworCXVuc2lnbmVkIGNoYXIgKnM7CisJdW5zaWduZWQgaW50IHBbMl0gPSB7IDAsIDAgfTsKKwlpbnQgaTsKKwl1bmlvbiBjbWRyZXQgcnB0ciA9IENNRFJFVF9aRVJPOworCisJcyA9IGludGRlYzsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmICgqcyAhPSAweGZmKSB7CisJCQlpZiAoU0VORF9SU1JDKGNpZiwgKnMsICZycHRyKSAmJgorCQkJICAgIFNFTkRfUlNSQyhjaWYsICpzLCAmcnB0cikpCisJCQkJcmV0dXJuIC1FSU87CisJCQlwW2ldICs9IHJwdHIucmV0d29yZHNbMV07CisJCQlwW2ldICo9IHJwdHIucmV0d29yZHNbMl07CisJCQlwW2ldICs9IHJwdHIucmV0d29yZHNbM107CisJCQlwW2ldIC89IDY1NTM2OworCQl9CisJCXMrKzsKKwl9CisJaWYgKHBbMF0pIHsKKwkJaWYgKHBbMV0gIT0gcFswXSkKKwkJCXNuZF9wcmludGRkKCJyYXRlcyBkaWZmZXIgJWQgJWRcbiIsIHBbMF0sIHBbMV0pOworCQkqcmF0ZSA9ICh1bnNpZ25lZCBpbnQpcFswXTsKKwl9IGVsc2UKKwkJKnJhdGUgPSAodW5zaWduZWQgaW50KXBbMV07CisJc25kX3ByaW50ZGQoImdldHNhbXBsZWZvcm1hdCAlZCAlZCAlZFxuIiwgaW50ZGVjWzBdLCBpbnRkZWNbMV0sICpyYXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0c2FtcGxlZm9ybWF0KHN0cnVjdCBjbWRpZiAqY2lmLAorCQl1bnNpZ25lZCBjaGFyIG1peGVyLCB1bnNpZ25lZCBjaGFyIGlkLAorCQl1bnNpZ25lZCBjaGFyIGNoYW5uZWxzLCB1bnNpZ25lZCBjaGFyIGZvcm1hdCkKK3sKKwl1bnNpZ25lZCBjaGFyIHcsIGNoLCBzaWcsIG9yZGVyOworCisJc25kX3ByaW50ZGQKKwkgICAgKCJzZXRzYW1wbGVmb3JtYXQgbWl4ZXI6ICVkIGlkOiAlZCBjaGFubmVsczogJWQgZm9ybWF0OiAlZFxuIiwKKwkgICAgIG1peGVyLCBpZCwgY2hhbm5lbHMsIGZvcm1hdCk7CisJY2ggPSBjaGFubmVscyA9PSAxOworCXcgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChmb3JtYXQpID09IDg7CisJc2lnID0gc25kX3BjbV9mb3JtYXRfdW5zaWduZWQoZm9ybWF0KSAhPSAwOworCW9yZGVyID0gc25kX3BjbV9mb3JtYXRfYmlnX2VuZGlhbihmb3JtYXQpICE9IDA7CisKKwlpZiAoU0VORF9TRVRGKGNpZiwgbWl4ZXIsIHcsIGNoLCBvcmRlciwgc2lnLCBpZCkgJiYKKwkgICAgU0VORF9TRVRGKGNpZiwgbWl4ZXIsIHcsIGNoLCBvcmRlciwgc2lnLCBpZCkpIHsKKwkJc25kX3ByaW50ZGQoInNldHNhbXBsZWZvcm1hdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldHNhbXBsZXJhdGUoc3RydWN0IGNtZGlmICpjaWYsIHVuc2lnbmVkIGNoYXIgKmludGRlYywgdW5zaWduZWQgaW50IHJhdGUpCit7CisJdTMyIEQsIE0sIE47CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKwlpbnQgaTsKKworCXNuZF9wcmludGRkKCJzZXRzYW1wbGVyYXRlIGludGRlYzogJWQsJWQgcmF0ZTogJWRcbiIsIGludGRlY1swXSwKKwkJICAgIGludGRlY1sxXSwgcmF0ZSk7CisJRCA9IDQ4MDAwOworCU0gPSAoKHJhdGUgPT0gNDgwMDApID8gNDc5OTkgOiByYXRlKSAqIDY1NTM2OworCU4gPSBNICUgRDsKKwlNIC89IEQ7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAoKmludGRlYyAhPSAweGZmKSB7CisJCQlkbyB7CisJCQkJU0VORF9TU1JDKGNpZiwgKmludGRlYywgRCwgTSwgTik7CisJCQkJU0VORF9SU1JDKGNpZiwgKmludGRlYywgJnJwdHIpOworCQkJfSB3aGlsZSAocnB0ci5yZXR3b3Jkc1sxXSAhPSBEICYmCisJCQkJIHJwdHIucmV0d29yZHNbMl0gIT0gTSAmJgorCQkJCSBycHRyLnJldHdvcmRzWzNdICE9IE4gJiYKKwkJCQkgaSsrIDwgTUFYX1dSSVRFX1JFVFJZKTsKKwkJCWlmIChpID09IE1BWF9XUklURV9SRVRSWSkgeworCQkJCXNuZF9wcmludGRkKCJzZW50IHNhbXBsZXJhdGUgJWQ6ICVkIGZhaWxlZFxuIiwKKwkJCQkJICAgICppbnRkZWMsIHJhdGUpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJCWludGRlYysrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0bWl4ZXIoc3RydWN0IGNtZGlmICpjaWYsIHNob3J0IG51bSwgdW5zaWduZWQgc2hvcnQgKnJ2YWwsCisJIHVuc2lnbmVkIHNob3J0ICpsdmFsKQoreworCXVuaW9uIGNtZHJldCBycHRyID0gQ01EUkVUX1pFUk87CisKKwlpZiAoU0VORF9SREdWKGNpZiwgbnVtLCBudW0sICZycHRyKSAmJiBTRU5EX1JER1YoY2lmLCBudW0sIG51bSwgJnJwdHIpKQorCQlyZXR1cm4gLUVJTzsKKwkqcnZhbCA9IHJwdHIucmV0d29yZHNbMF07CisJKmx2YWwgPSBycHRyLnJldHdvcmRzWzFdOworCXNuZF9wcmludGRkKCJnb3QgbWl4ZXIgJWQ6IDB4JWQgMHglZFxuIiwgbnVtLCAqcnZhbCwgKmx2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByaXB0aWRlX2hhbmRsZWlycSh1bnNpZ25lZCBsb25nIGRldl9pZCkKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSAodm9pZCAqKWRldl9pZDsKKwlzdHJ1Y3QgY21kaWYgKmNpZiA9IGNoaXAtPmNpZjsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbVtQTEFZQkFDS19TVUJTVFJFQU1TICsgMV07CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwlzdHJ1Y3QgcGNtaHcgKmRhdGEgPSBOVUxMOworCXVuc2lnbmVkIGludCBwb3MsIHBlcmlvZF9ieXRlczsKKwlzdHJ1Y3Qgc2dkICpjOworCWludCBpLCBqOworCXVuc2lnbmVkIGludCBmbGFnOworCisJaWYgKCFjaWYpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBQTEFZQkFDS19TVUJTVFJFQU1TOyBpKyspCisJCXN1YnN0cmVhbVtpXSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbVtpXTsKKwlzdWJzdHJlYW1baV0gPSBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbTsKKwlmb3IgKGkgPSAwOyBpIDwgUExBWUJBQ0tfU1VCU1RSRUFNUyArIDE7IGkrKykgeworCQlpZiAoc3Vic3RyZWFtW2ldICYmCisJCSAgICAocnVudGltZSA9IHN1YnN0cmVhbVtpXS0+cnVudGltZSkgJiYKKwkJICAgIChkYXRhID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhKSAmJiBkYXRhLT5zdGF0ZSAhPSBTVF9TVE9QKSB7CisJCQlwb3MgPSAwOworCQkJZm9yIChqID0gMDsgaiA8IGRhdGEtPnBhZ2VzOyBqKyspIHsKKwkJCQljID0gJmRhdGEtPnNnZGJ1ZltqXTsKKwkJCQlmbGFnID0gbGUzMl90b19jcHUoYy0+ZHdTdGF0X0N0bCk7CisJCQkJaWYgKGZsYWcgJiBFT0JfU1RBVFVTKQorCQkJCQlwb3MgKz0gbGUzMl90b19jcHUoYy0+ZHdTZWdMZW4pOworCQkJCWlmIChmbGFnICYgRU9DX1NUQVRVUykKKwkJCQkJcG9zICs9IGxlMzJfdG9fY3B1KGMtPmR3U2VnTGVuKTsKKwkJCQlpZiAoKGZsYWcgJiBFT1NfU1RBVFVTKQorCQkJCSAgICAmJiAoZGF0YS0+c3RhdGUgPT0gU1RfUExBWSkpIHsKKwkJCQkJZGF0YS0+c3RhdGUgPSBTVF9TVE9QOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkgICAiUmlwdGlkZTogRE1BIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4iKTsKKwkJCQl9CisJCQkJYy0+ZHdTdGF0X0N0bCA9CisJCQkJICAgIGNwdV90b19sZTMyKGZsYWcgJgorCQkJCQkJfihFT1NfU1RBVFVTIHwgRU9CX1NUQVRVUyB8CisJCQkJCQkgIEVPQ19TVEFUVVMpKTsKKwkJCX0KKwkJCWRhdGEtPnBvaW50ZXIgKz0gcG9zOworCQkJcG9zICs9IGRhdGEtPm9sZHBvczsKKwkJCWlmIChkYXRhLT5zdGF0ZSAhPSBTVF9TVE9QKSB7CisJCQkJcGVyaW9kX2J5dGVzID0KKwkJCQkgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsCisJCQkJCQkgICAgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQkJCXNuZF9wcmludGRkCisJCQkJICAgICgiaW50ZXJydXB0IDB4JXggYWZ0ZXIgMHglbHggb2YgMHglbHggZnJhbWVzIGluIHBlcmlvZFxuIiwKKwkJCQkgICAgIFJFQURfQVVESU9fU1RBVFVTKGNpZi0+aHdwb3J0KSwKKwkJCQkgICAgIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBwb3MpLAorCQkJCSAgICAgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQkJCWogPSAwOworCQkJCWlmIChwb3MgPj0gcGVyaW9kX2J5dGVzKSB7CisJCQkJCWorKzsKKwkJCQkJd2hpbGUgKHBvcyA+PSBwZXJpb2RfYnl0ZXMpCisJCQkJCQlwb3MgLT0gcGVyaW9kX2J5dGVzOworCQkJCX0KKwkJCQlkYXRhLT5vbGRwb3MgPSBwb3M7CisJCQkJaWYgKGogPiAwKQorCQkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbVtpXSk7CisJCQl9CisJCX0KKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcmlwdGlkZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwljaGlwLT5pbl9zdXNwZW5kID0gMTsKKwlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOworCXNuZF9hYzk3X3N1c3BlbmQoY2hpcC0+YWM5Nyk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByaXB0aWRlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CisJcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfc2V0X21hc3RlcihwY2kpOworCXNuZF9yaXB0aWRlX2luaXRpYWxpemUoY2hpcCk7CisJc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTcpOworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKwljaGlwLT5pbl9zdXNwZW5kID0gMDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHJpcHRpZGVfcmVzZXQoc3RydWN0IGNtZGlmICpjaWYsIHN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCkKK3sKKwlpbnQgdGltZW91dCwgdHJpZXM7CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKwl1bmlvbiBmaXJtd2FyZV92ZXJzaW9uIGZpcm13YXJlOworCWludCBpLCBqLCBlcnIsIGhhc19maXJtd2FyZTsKKworCWlmICghY2lmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNpZi0+Y21kY250ID0gMDsKKwljaWYtPmNtZHRpbWUgPSAwOworCWNpZi0+Y21kdGltZW1heCA9IDA7CisJY2lmLT5jbWR0aW1lbWluID0gMHhmZmZmZmZmZjsKKwljaWYtPmVycmNudCA9IDA7CisJY2lmLT5pc19yZXNldCA9IDA7CisKKwl0cmllcyA9IFJFU0VUX1RSSUVTOworCWhhc19maXJtd2FyZSA9IDA7CisJd2hpbGUgKGhhc19maXJtd2FyZSA9PSAwICYmIHRyaWVzLS0gPiAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCVdSSVRFX1BPUlRfVUxPTkcoY2lmLT5od3BvcnQtPnBvcnRbaV0uZGF0YTEsIDApOworCQkJV1JJVEVfUE9SVF9VTE9ORyhjaWYtPmh3cG9ydC0+cG9ydFtpXS5kYXRhMiwgMCk7CisJCX0KKwkJU0VUX0dSRVNFVChjaWYtPmh3cG9ydCk7CisJCXVkZWxheSgxMDApOworCQlVTlNFVF9HUkVTRVQoY2lmLT5od3BvcnQpOworCQl1ZGVsYXkoMTAwKTsKKworCQlmb3IgKHRpbWVvdXQgPSAxMDAwMDA7IC0tdGltZW91dDsgdWRlbGF5KDEwKSkgeworCQkJaWYgKElTX1JFQURZKGNpZi0+aHdwb3J0KSAmJiAhSVNfR0VSUihjaWYtPmh3cG9ydCkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCSAgICJSaXB0aWRlOiBkZXZpY2Ugbm90IHJlYWR5LCBhdWRpbyBzdGF0dXM6IDB4JXggcmVhZHk6ICVkIGdlcnI6ICVkXG4iLAorCQkJCSAgIFJFQURfQVVESU9fU1RBVFVTKGNpZi0+aHdwb3J0KSwKKwkJCQkgICBJU19SRUFEWShjaWYtPmh3cG9ydCksIElTX0dFUlIoY2lmLT5od3BvcnQpKTsKKwkJCXJldHVybiAtRUlPOworCQl9IGVsc2UgeworCQkJc25kX3ByaW50ZGQKKwkJCSAgICAoIlJpcHRpZGU6IGF1ZGlvIHN0YXR1czogMHgleCByZWFkeTogJWQgZ2VycjogJWRcbiIsCisJCQkgICAgIFJFQURfQVVESU9fU1RBVFVTKGNpZi0+aHdwb3J0KSwKKwkJCSAgICAgSVNfUkVBRFkoY2lmLT5od3BvcnQpLCBJU19HRVJSKGNpZi0+aHdwb3J0KSk7CisJCX0KKworCQlTRU5EX0dFVFYoY2lmLCAmcnB0cik7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQlmaXJtd2FyZS5yZXQucmV0d29yZHNbaV0gPSBycHRyLnJldHdvcmRzW2ldOworCisJCXNuZF9wcmludGRkCisJCSAgICAoIkZpcm13YXJlIHZlcnNpb246IEFTSUM6ICVkIENPREVDICVkIEFVWERTUCAlZCBQUk9HICVkXG4iLAorCQkgICAgIGZpcm13YXJlLmZpcm13YXJlLkFTSUMsIGZpcm13YXJlLmZpcm13YXJlLkNPREVDLAorCQkgICAgIGZpcm13YXJlLmZpcm13YXJlLkFVWERTUCwgZmlybXdhcmUuZmlybXdhcmUuUFJPRyk7CisKKwkJZm9yIChqID0gMDsgaiA8IEZJUk1XQVJFX1ZFUlNJT05TOyBqKyspIHsKKwkJCWhhc19maXJtd2FyZSA9IDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkJaWYgKGZpcm13YXJlX3ZlcnNpb25zW2pdLnJldC5yZXR3b3Jkc1tpXSAhPQorCQkJCSAgICBmaXJtd2FyZS5yZXQucmV0d29yZHNbaV0pCisJCQkJCWhhc19maXJtd2FyZSA9IDA7CisJCQl9CisJCQlpZiAoaGFzX2Zpcm13YXJlKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNoaXAgIT0gTlVMTCAmJiBoYXNfZmlybXdhcmUgPT0gMCkgeworCQkJc25kX3ByaW50ZGQoIldyaXRpbmcgRmlybXdhcmVcbiIpOworCQkJaWYgKCFjaGlwLT5md19lbnRyeSkgeworCQkJCWlmICgoZXJyID0KKwkJCQkgICAgIHJlcXVlc3RfZmlybXdhcmUoJmNoaXAtPmZ3X2VudHJ5LAorCQkJCQkJICAgICAgInJpcHRpZGUuaGV4IiwKKwkJCQkJCSAgICAgICZjaGlwLT5wY2ktPmRldikpICE9IDApIHsKKwkJCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCQkJICAgIlJpcHRpZGU6IEZpcm13YXJlIG5vdCBhdmFpbGFibGUgJWRcbiIsCisJCQkJCQkgICBlcnIpOworCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQl9CisJCQl9CisJCQllcnIgPSBsb2FkZmlybXdhcmUoY2lmLCBjaGlwLT5md19lbnRyeS0+ZGF0YSwKKwkJCQkJICAgY2hpcC0+ZndfZW50cnktPnNpemUpOworCQkJaWYgKGVycikKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICJSaXB0aWRlOiBDb3VsZCBub3QgbG9hZCBmaXJtd2FyZSAlZFxuIiwKKwkJCQkJICAgZXJyKTsKKwkJfQorCX0KKworCVNFTkRfU0FDUihjaWYsIDAsIEFDOTdfUkVTRVQpOworCVNFTkRfUkFDUihjaWYsIEFDOTdfUkVTRVQsICZycHRyKTsKKwlzbmRfcHJpbnRkZCgiQUM5NzogMHgleCAweCV4XG4iLCBycHRyLnJldGxvbmdzWzBdLCBycHRyLnJldGxvbmdzWzFdKTsKKworCVNFTkRfUExTVChjaWYsIDApOworCVNFTkRfU0xTVChjaWYsIDApOworCVNFTkRfRExTVChjaWYsIDApOworCVNFTkRfQUxTVChjaWYsIDApOworCVNFTkRfS0RNQShjaWYpOworCisJd3JpdGVhcm0oY2lmLCAweDMwMUY4LCAxLCAxKTsKKwl3cml0ZWFybShjaWYsIDB4MzAxRjQsIDEsIDEpOworCisJU0VORF9MU0VMKGNpZiwgTU9ERU1fQ01ELCAwLCAwLCBNT0RFTV9JTlRERUMsIE1PREVNX01FUkdFUiwKKwkJICBNT0RFTV9TUExJVFRFUiwgTU9ERU1fTUlYRVIpOworCXNldG1peGVyKGNpZiwgTU9ERU1fTUlYRVIsIDB4N2ZmZiwgMHg3ZmZmKTsKKwlhbGxvY2xidXNwYXRoKGNpZiwgQVJNMkxCVVNfRklGTzEzLCBsYnVzX3BsYXlfbW9kZW0sIE5VTEwsIE5VTEwpOworCisJU0VORF9MU0VMKGNpZiwgRk1fQ01ELCAwLCAwLCBGTV9JTlRERUMsIEZNX01FUkdFUiwgRk1fU1BMSVRURVIsCisJCSAgRk1fTUlYRVIpOworCXNldG1peGVyKGNpZiwgRk1fTUlYRVIsIDB4N2ZmZiwgMHg3ZmZmKTsKKwl3cml0ZWFybShjaWYsIDB4MzA2NDggKyBGTV9NSVhFUiAqIDQsIDB4MDEsIDB4MDAwMDAwMDUpOworCXdyaXRlYXJtKGNpZiwgMHgzMDFBOCwgMHgwMiwgMHgwMDAwMDAwMik7CisJd3JpdGVhcm0oY2lmLCAweDMwMjY0LCAweDA4LCAweGZmZmZmZmZmKTsKKwlhbGxvY2xidXNwYXRoKGNpZiwgT1BMM19TQU1QTEUsIGxidXNfcGxheV9vcGwzLCBOVUxMLCBOVUxMKTsKKworCVNFTkRfU1NSQyhjaWYsIEkyU19JTlRERUMsIDQ4MDAwLAorCQkgICgodTMyKSBJMlNfUkFURSAqIDY1NTM2KSAvIDQ4MDAwLAorCQkgICgodTMyKSBJMlNfUkFURSAqIDY1NTM2KSAlIDQ4MDAwKTsKKwlTRU5EX0xTRUwoY2lmLCBJMlNfQ01EMCwgMCwgMCwgSTJTX0lOVERFQywgSTJTX01FUkdFUiwgSTJTX1NQTElUVEVSLAorCQkgIEkyU19NSVhFUik7CisJU0VORF9TSTJTKGNpZiwgMSk7CisJYWxsb2NsYnVzcGF0aChjaWYsIEFSTTJMQlVTX0ZJRk8wLCBsYnVzX3BsYXlfaTJzLCBOVUxMLCBOVUxMKTsKKwlhbGxvY2xidXNwYXRoKGNpZiwgRElHSVRBTF9NSVhFUl9PVVQwLCBsYnVzX3BsYXlfb3V0LCBOVUxMLCBOVUxMKTsKKwlhbGxvY2xidXNwYXRoKGNpZiwgRElHSVRBTF9NSVhFUl9PVVQwLCBsYnVzX3BsYXlfb3V0aHAsIE5VTEwsIE5VTEwpOworCisJU0VUX0FJQUNLKGNpZi0+aHdwb3J0KTsKKwlTRVRfQUlFKGNpZi0+aHdwb3J0KTsKKwlTRVRfQUlBQ0soY2lmLT5od3BvcnQpOworCWNpZi0+aXNfcmVzZXQgPSAxOworCWlmIChjaGlwKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQljaGlwLT5maXJtd2FyZS5yZXQucmV0d29yZHNbaV0gPQorCQkJICAgIGZpcm13YXJlLnJldC5yZXR3b3Jkc1tpXTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9yaXB0aWRlX3BsYXliYWNrID0geworCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorCS5mb3JtYXRzID0KKwkgICAgU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TOAorCSAgICB8IFNORFJWX1BDTV9GTVRCSVRfVTE2X0xFLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0tOT1QgfCBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9IDU1MDAsCisJLnJhdGVfbWF4ID0gNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAoNjQgKiAxMDI0KSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IFBBR0VfU0laRSA+PiAxLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gUEFHRV9TSVpFIDw8IDgsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSA2NCwKKwkuZmlmb19zaXplID0gMCwKK307CitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3JpcHRpZGVfY2FwdHVyZSA9IHsKKwkuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuZm9ybWF0cyA9CisJICAgIFNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzgKKwkgICAgfCBTTkRSVl9QQ01fRk1UQklUX1UxNl9MRSwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9LTk9UIHwgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4gPSA1NTAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gKDY0ICogMTAyNCksCisJLnBlcmlvZF9ieXRlc19taW4gPSBQQUdFX1NJWkUgPj4gMSwKKwkucGVyaW9kX2J5dGVzX21heCA9IFBBR0VfU0laRSA8PCAzLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gNjQsCisJLmZpZm9fc2l6ZSA9IDAsCit9OworCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3JpcHRpZGVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0KKwkJCQkJICAgICAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBwY21odyAqZGF0YSA9IGdldF9wY21od2RldihzdWJzdHJlYW0pOworCXN0cnVjdCBjbWRpZiAqY2lmID0gY2hpcC0+Y2lmOworCXVuaW9uIGNtZHJldCBycHRyID0gQ01EUkVUX1pFUk87CisJc25kX3BjbV91ZnJhbWVzX3QgcmV0OworCisJU0VORF9HUE9TKGNpZiwgMCwgZGF0YS0+aWQsICZycHRyKTsKKwlpZiAoZGF0YS0+c2l6ZSAmJiBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlzbmRfcHJpbnRkZAorCQkgICAgKCJwb2ludGVyIHN0cmVhbSAlZCBwb3NpdGlvbiAweCV4KDB4JXggaW4gYnVmZmVyKSBieXRlcyAweCVseCgweCVseCBpbiBwZXJpb2QpIGZyYW1lc1xuIiwKKwkJICAgICBkYXRhLT5pZCwgcnB0ci5yZXRsb25nc1sxXSwgcnB0ci5yZXRsb25nc1sxXSAlIGRhdGEtPnNpemUsCisJCSAgICAgYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIHJwdHIucmV0bG9uZ3NbMV0pLAorCQkgICAgIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLAorCQkJCSAgICAgcnB0ci5yZXRsb25nc1sxXSkgJSBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCWlmIChycHRyLnJldGxvbmdzWzFdID4gZGF0YS0+cG9pbnRlcikKKwkJCXJldCA9CisJCQkgICAgYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsCisJCQkJCSAgICBycHRyLnJldGxvbmdzWzFdICUgZGF0YS0+c2l6ZSk7CisJCWVsc2UKKwkJCXJldCA9CisJCQkgICAgYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsCisJCQkJCSAgICBkYXRhLT5wb2ludGVyICUgZGF0YS0+c2l6ZSk7CisJfSBlbHNlIHsKKwkJc25kX3ByaW50ZGQoInN0cmVhbSBub3Qgc3RhcnRlZCBvciBzdHJhbmdlIHBhcm1zICglZCAlbGQpXG4iLAorCQkJICAgIGRhdGEtPnNpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJcmV0ID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIDApOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNuZF9yaXB0aWRlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJaW50IGksIGo7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBwY21odyAqZGF0YSA9IGdldF9wY21od2RldihzdWJzdHJlYW0pOworCXN0cnVjdCBjbWRpZiAqY2lmID0gY2hpcC0+Y2lmOworCXVuaW9uIGNtZHJldCBycHRyID0gQ01EUkVUX1pFUk87CisKKwlzcGluX2xvY2soJmNoaXAtPmxvY2spOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJaWYgKCEoZGF0YS0+c3RhdGUgJiBTVF9QTEFZKSkgeworCQkJU0VORF9TU1RSKGNpZiwgZGF0YS0+aWQsIGRhdGEtPnNnZGxpc3QuYWRkcik7CisJCQlTRVRfQUlFKGNpZi0+aHdwb3J0KTsKKwkJCWRhdGEtPnN0YXRlID0gU1RfUExBWTsKKwkJCWlmIChkYXRhLT5taXhlciAhPSAweGZmKQorCQkJCXNldG1peGVyKGNpZiwgZGF0YS0+bWl4ZXIsIDB4N2ZmZiwgMHg3ZmZmKTsKKwkJCWNoaXAtPm9wZW5zdHJlYW1zKys7CisJCQlkYXRhLT5vbGRwb3MgPSAwOworCQkJZGF0YS0+cG9pbnRlciA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJaWYgKGRhdGEtPm1peGVyICE9IDB4ZmYpCisJCQlzZXRtaXhlcihjaWYsIGRhdGEtPm1peGVyLCAwLCAwKTsKKwkJc2V0bWl4ZXIoY2lmLCBkYXRhLT5taXhlciwgMCwgMCk7CisJCVNFTkRfS1NUUihjaWYsIGRhdGEtPmlkKTsKKwkJZGF0YS0+c3RhdGUgPSBTVF9TVE9QOworCQljaGlwLT5vcGVuc3RyZWFtcy0tOworCQlqID0gMDsKKwkJZG8geworCQkJaSA9IHJwdHIucmV0bG9uZ3NbMV07CisJCQlTRU5EX0dQT1MoY2lmLCAwLCBkYXRhLT5pZCwgJnJwdHIpOworCQkJdWRlbGF5KDEpOworCQl9IHdoaWxlIChpICE9IHJwdHIucmV0bG9uZ3NbMV0gJiYgaisrIDwgTUFYX1dSSVRFX1JFVFJZKTsKKwkJaWYgKGogPj0gTUFYX1dSSVRFX1JFVFJZKQorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiUmlwdGlkZTogQ291bGQgbm90IHN0b3Agc3RyZWFtISIpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWlmICghKGRhdGEtPnN0YXRlICYgU1RfUEFVU0UpKSB7CisJCQlTRU5EX1BTVFIoY2lmLCBkYXRhLT5pZCk7CisJCQlkYXRhLT5zdGF0ZSB8PSBTVF9QQVVTRTsKKwkJCWNoaXAtPm9wZW5zdHJlYW1zLS07CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoZGF0YS0+c3RhdGUgJiBTVF9QQVVTRSkgeworCQkJU0VORF9TU1RSKGNpZiwgZGF0YS0+aWQsIGRhdGEtPnNnZGxpc3QuYWRkcik7CisJCQlkYXRhLT5zdGF0ZSAmPSB+U1RfUEFVU0U7CisJCQljaGlwLT5vcGVuc3RyZWFtcysrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcmlwdGlkZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc2dfYnVmICpzZ2J1ZiA9IHNuZF9wY21fc3Vic3RyZWFtX3NnYnVmKHN1YnN0cmVhbSk7CisJc3RydWN0IHBjbWh3ICpkYXRhID0gZ2V0X3BjbWh3ZGV2KHN1YnN0cmVhbSk7CisJc3RydWN0IGNtZGlmICpjaWYgPSBjaGlwLT5jaWY7CisJdW5zaWduZWQgY2hhciAqbGJ1c3BhdGggPSBOVUxMOworCXVuc2lnbmVkIGludCByYXRlLCBjaGFubmVsczsKKwlpbnQgZXJyID0gMDsKKwlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDsKKworCXNuZF9hc3NlcnQoY2lmICYmIGRhdGEsIHJldHVybiAtRUlOVkFMKTsKKworCXNuZF9wcmludGRkKCJwcmVwYXJlIGlkICVkIGNoOiAlZCBmOjB4JXggcjolZFxuIiwgZGF0YS0+aWQsCisJCSAgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5yYXRlKTsKKworCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCWNoYW5uZWxzID0gcnVudGltZS0+Y2hhbm5lbHM7CisJZm9ybWF0ID0gcnVudGltZS0+Zm9ybWF0OworCXJhdGUgPSBydW50aW1lLT5yYXRlOworCXN3aXRjaCAoY2hhbm5lbHMpIHsKKwljYXNlIDE6CisJCWlmIChyYXRlID09IDQ4MDAwICYmIGZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRSkKKwkJCWxidXNwYXRoID0gZGF0YS0+cGF0aHMubm9jb252OworCQllbHNlCisJCQlsYnVzcGF0aCA9IGRhdGEtPnBhdGhzLm1vbm87CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKHJhdGUgPT0gNDgwMDAgJiYgZm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFKQorCQkJbGJ1c3BhdGggPSBkYXRhLT5wYXRocy5ub2NvbnY7CisJCWVsc2UKKwkJCWxidXNwYXRoID0gZGF0YS0+cGF0aHMuc3RlcmVvOworCQlicmVhazsKKwl9CisJc25kX3ByaW50ZGQoInVzZSBzZ2RsaXN0IGF0IDB4JXAgYW5kIGJ1ZmZlciBhdCAweCVwXG4iLAorCQkgICAgZGF0YS0+c2dkbGlzdC5hcmVhLCBzZ2J1Zik7CisJaWYgKGRhdGEtPnNnZGxpc3QuYXJlYSAmJiBzZ2J1ZikgeworCQl1bnNpZ25lZCBpbnQgaSwgaiwgc2l6ZSwgcGFnZXMsIGYsIHB0LCBwZXJpb2Q7CisJCXN0cnVjdCBzZ2QgKmMsICpwID0gTlVMTDsKKworCQlzaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKKwkJcGVyaW9kID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJZiA9IFBBR0VfU0laRTsKKwkJd2hpbGUgKChzaXplICsgKGYgPj4gMSkgLSAxKSA8PSAoZiA8PCA3KSAmJiAoZiA8PCAxKSA+IHBlcmlvZCkKKwkJCWYgPSBmID4+IDE7CisJCXBhZ2VzID0gKHNpemUgKyBmIC0gMSkgLyBmOworCQlkYXRhLT5zaXplID0gc2l6ZTsKKwkJZGF0YS0+cGFnZXMgPSBwYWdlczsKKwkJc25kX3ByaW50ZGQKKwkJICAgICgiY3JlYXRlIHNnZCBzaXplOiAweCV4IHBhZ2VzICVkIG9mIHNpemUgMHgleCBmb3IgcGVyaW9kIDB4JXhcbiIsCisJCSAgICAgc2l6ZSwgcGFnZXMsIGYsIHBlcmlvZCk7CisJCXB0ID0gMDsKKwkJaiA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCQljID0gJmRhdGEtPnNnZGJ1ZltpXTsKKwkJCWlmIChwKQorCQkJCXAtPmR3TmV4dExpbmsgPSBjcHVfdG9fbGUzMihkYXRhLT5zZ2RsaXN0LmFkZHIgKworCQkJCQkJCSAgICAoaSAqCisJCQkJCQkJICAgICBzaXplb2Yoc3RydWN0CisJCQkJCQkJCSAgICBzZ2QpKSk7CisJCQljLT5kd05leHRMaW5rID0gY3B1X3RvX2xlMzIoZGF0YS0+c2dkbGlzdC5hZGRyKTsKKwkJCWMtPmR3U2VnUHRyUGh5cyA9CisJCQkgICAgY3B1X3RvX2xlMzIoc2didWYtPnRhYmxlW2pdLmFkZHIgKyBwdCk7CisJCQlwdCA9IChwdCArIGYpICUgUEFHRV9TSVpFOworCQkJaWYgKHB0ID09IDApCisJCQkJaisrOworCQkJYy0+ZHdTZWdMZW4gPSBjcHVfdG9fbGUzMihmKTsKKwkJCWMtPmR3U3RhdF9DdGwgPQorCQkJICAgIGNwdV90b19sZTMyKElFT0JfRU5BQkxFIHwgSUVPU19FTkFCTEUgfAorCQkJCQlJRU9DX0VOQUJMRSk7CisJCQlwID0gYzsKKwkJCXNpemUgLT0gZjsKKwkJfQorCQlkYXRhLT5zZ2RidWZbaV0uZHdTZWdMZW4gPSBjcHVfdG9fbGUzMihzaXplKTsKKwl9CisJaWYgKGxidXNwYXRoICYmIGxidXNwYXRoICE9IGRhdGEtPmxidXNwYXRoKSB7CisJCWlmIChkYXRhLT5sYnVzcGF0aCkKKwkJCWZyZWVsYnVzcGF0aChjaWYsIGRhdGEtPnNvdXJjZSwgZGF0YS0+bGJ1c3BhdGgpOworCQlhbGxvY2xidXNwYXRoKGNpZiwgZGF0YS0+c291cmNlLCBsYnVzcGF0aCwKKwkJCSAgICAgICZkYXRhLT5taXhlciwgZGF0YS0+aW50ZGVjKTsKKwkJZGF0YS0+bGJ1c3BhdGggPSBsYnVzcGF0aDsKKwkJZGF0YS0+cmF0ZSA9IDA7CisJfQorCWlmIChkYXRhLT5yYXRlICE9IHJhdGUgfHwgZGF0YS0+Zm9ybWF0ICE9IGZvcm1hdCB8fAorCSAgICBkYXRhLT5jaGFubmVscyAhPSBjaGFubmVscykgeworCQlkYXRhLT5yYXRlID0gcmF0ZTsKKwkJZGF0YS0+Zm9ybWF0ID0gZm9ybWF0OworCQlkYXRhLT5jaGFubmVscyA9IGNoYW5uZWxzOworCQlpZiAoc2V0c2FtcGxlZm9ybWF0CisJCSAgICAoY2lmLCBkYXRhLT5taXhlciwgZGF0YS0+aWQsIGNoYW5uZWxzLCBmb3JtYXQpCisJCSAgICB8fCBzZXRzYW1wbGVyYXRlKGNpZiwgZGF0YS0+aW50ZGVjLCByYXRlKSkKKwkJCWVyciA9IC1FSU87CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorc25kX3JpcHRpZGVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBjbWh3ICpkYXRhID0gZ2V0X3BjbWh3ZGV2KHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpzZ2RsaXN0ID0gJmRhdGEtPnNnZGxpc3Q7CisJaW50IGVycjsKKworCXNuZF9wcmludGRkKCJodyBwYXJhbXMgaWQgJWQgKHNnZGxpc3Q6IDB4JXAgMHglbHggJWQpXG4iLCBkYXRhLT5pZCwKKwkJICAgIHNnZGxpc3QtPmFyZWEsICh1bnNpZ25lZCBsb25nKXNnZGxpc3QtPmFkZHIsCisJCSAgICAoaW50KXNnZGxpc3QtPmJ5dGVzKTsKKwlpZiAoc2dkbGlzdC0+YXJlYSkKKwkJc25kX2RtYV9mcmVlX3BhZ2VzKHNnZGxpc3QpOworCWlmICgoZXJyID0gc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkJICAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzZ2QpICogKERFU0NfTUFYX01BU0sgKyAxKSwKKwkJCQkgICAgICAgc2dkbGlzdCkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJSaXB0aWRlOiBmYWlsZWQgdG8gYWxsb2MgJWQgZG1hIGJ5dGVzXG4iLAorCQkJICAgKGludClzaXplb2Yoc3RydWN0IHNnZCkgKiAoREVTQ19NQVhfTUFTSyArIDEpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZGF0YS0+c2dkYnVmID0gKHN0cnVjdCBzZ2QgKilzZ2RsaXN0LT5hcmVhOworCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworfQorCitzdGF0aWMgaW50IHNuZF9yaXB0aWRlX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBwY21odyAqZGF0YSA9IGdldF9wY21od2RldihzdWJzdHJlYW0pOworCXN0cnVjdCBjbWRpZiAqY2lmID0gY2hpcC0+Y2lmOworCisJaWYgKGNpZiAmJiBkYXRhKSB7CisJCWlmIChkYXRhLT5sYnVzcGF0aCkKKwkJCWZyZWVsYnVzcGF0aChjaWYsIGRhdGEtPnNvdXJjZSwgZGF0YS0+bGJ1c3BhdGgpOworCQlkYXRhLT5sYnVzcGF0aCA9IE5VTEw7CisJCWRhdGEtPnNvdXJjZSA9IDB4ZmY7CisJCWRhdGEtPmludGRlY1swXSA9IDB4ZmY7CisJCWRhdGEtPmludGRlY1sxXSA9IDB4ZmY7CisKKwkJaWYgKGRhdGEtPnNnZGxpc3QuYXJlYSkgeworCQkJc25kX2RtYV9mcmVlX3BhZ2VzKCZkYXRhLT5zZ2RsaXN0KTsKKwkJCWRhdGEtPnNnZGxpc3QuYXJlYSA9IE5VTEw7CisJCX0KKwl9CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBzbmRfcmlwdGlkZV9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBwY21odyAqZGF0YTsKKwlpbnQgaW5kZXggPSBzdWJzdHJlYW0tPm51bWJlcjsKKworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbVtpbmRleF0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+aHcgPSBzbmRfcmlwdGlkZV9wbGF5YmFjazsKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjbWh3KSwgR0ZQX0tFUk5FTCk7CisJZGF0YS0+cGF0aHMgPSBsYnVzX3BsYXlfcGF0aHNbaW5kZXhdOworCWRhdGEtPmlkID0gcGxheV9pZHNbaW5kZXhdOworCWRhdGEtPnNvdXJjZSA9IHBsYXlfc291cmNlc1tpbmRleF07CisJZGF0YS0+aW50ZGVjWzBdID0gMHhmZjsKKwlkYXRhLT5pbnRkZWNbMV0gPSAweGZmOworCWRhdGEtPnN0YXRlID0gU1RfU1RPUDsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLAorCQkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKK30KKworc3RhdGljIGludCBzbmRfcmlwdGlkZV9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHBjbWh3ICpkYXRhOworCisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+aHcgPSBzbmRfcmlwdGlkZV9jYXB0dXJlOworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNtaHcpLCBHRlBfS0VSTkVMKTsKKwlkYXRhLT5wYXRocyA9IGxidXNfcmVjX3BhdGg7CisJZGF0YS0+aWQgPSBQQURDOworCWRhdGEtPnNvdXJjZSA9IEFDTE5LMlBBREM7CisJZGF0YS0+aW50ZGVjWzBdID0gMHhmZjsKKwlkYXRhLT5pbnRkZWNbMV0gPSAweGZmOworCWRhdGEtPnN0YXRlID0gU1RfU1RPUDsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLAorCQkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKK30KKworc3RhdGljIGludCBzbmRfcmlwdGlkZV9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBjbWh3ICpkYXRhID0gZ2V0X3BjbWh3ZGV2KHN1YnN0cmVhbSk7CisJaW50IGluZGV4ID0gc3Vic3RyZWFtLT5udW1iZXI7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtW2luZGV4XSA9IE5VTEw7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3JpcHRpZGVfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBjbWh3ICpkYXRhID0gZ2V0X3BjbWh3ZGV2KHN1YnN0cmVhbSk7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBOVUxMOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9yaXB0aWRlX3BsYXliYWNrX29wcyA9IHsKKwkub3BlbiA9IHNuZF9yaXB0aWRlX3BsYXliYWNrX29wZW4sCisJLmNsb3NlID0gc25kX3JpcHRpZGVfcGxheWJhY2tfY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHNuZF9yaXB0aWRlX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHNuZF9yaXB0aWRlX2h3X2ZyZWUsCisJLnByZXBhcmUgPSBzbmRfcmlwdGlkZV9wcmVwYXJlLAorCS5wYWdlID0gc25kX3BjbV9zZ2J1Zl9vcHNfcGFnZSwKKwkudHJpZ2dlciA9IHNuZF9yaXB0aWRlX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBzbmRfcmlwdGlkZV9wb2ludGVyLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3JpcHRpZGVfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gPSBzbmRfcmlwdGlkZV9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0gc25kX3JpcHRpZGVfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gc25kX3JpcHRpZGVfaHdfcGFyYW1zLAorCS5od19mcmVlID0gc25kX3JpcHRpZGVfaHdfZnJlZSwKKwkucHJlcGFyZSA9IHNuZF9yaXB0aWRlX3ByZXBhcmUsCisJLnBhZ2UgPSBzbmRfcGNtX3NnYnVmX29wc19wYWdlLAorCS50cmlnZ2VyID0gc25kX3JpcHRpZGVfdHJpZ2dlciwKKwkucG9pbnRlciA9IHNuZF9yaXB0aWRlX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX3JpcHRpZGVfcGNtKHN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKQoreworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IGVycjsKKworCWlmIChycGNtKQorCQkqcnBjbSA9IE5VTEw7CisJaWYgKChlcnIgPQorCSAgICAgc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIlJJUFRJREUiLCBkZXZpY2UsIFBMQVlCQUNLX1NVQlNUUkVBTVMsIDEsCisJCQkgJnBjbSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJJnNuZF9yaXB0aWRlX3BsYXliYWNrX29wcyk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJJnNuZF9yaXB0aWRlX2NhcHR1cmVfb3BzKTsKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlzdHJjcHkocGNtLT5uYW1lLCAiUklQVElERSIpOworCWNoaXAtPnBjbSA9IHBjbTsKKwlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWX1NHLAorCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisJCQkJCSAgICAgIDY0ICogMTAyNCwgMTI4ICogMTAyNCk7CisJaWYgKHJwY20pCisJCSpycGNtID0gcGNtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3NuZF9yaXB0aWRlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IGRldl9pZDsKKwlzdHJ1Y3QgY21kaWYgKmNpZiA9IGNoaXAtPmNpZjsKKworCWlmIChjaWYpIHsKKwkJY2hpcC0+cmVjZWl2ZWRfaXJxcysrOworCQlpZiAoSVNfRU9CSVJRKGNpZi0+aHdwb3J0KSB8fCBJU19FT1NJUlEoY2lmLT5od3BvcnQpIHx8CisJCSAgICBJU19FT0NJUlEoY2lmLT5od3BvcnQpKSB7CisJCQljaGlwLT5oYW5kbGVkX2lycXMrKzsKKwkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmNoaXAtPnJpcHRpZGVfdHEpOworCQl9CisJCWlmIChjaGlwLT5ybWlkaSAmJiBJU19NUFVJUlEoY2lmLT5od3BvcnQpKSB7CisJCQljaGlwLT5oYW5kbGVkX2lycXMrKzsKKwkJCXNuZF9tcHU0MDFfdWFydF9pbnRlcnJ1cHQoaXJxLAorCQkJCQkJICBjaGlwLT5ybWlkaS0+cHJpdmF0ZV9kYXRhLAorCQkJCQkJICByZWdzKTsKKwkJfQorCQlTRVRfQUlBQ0soY2lmLT5od3BvcnQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkCitzbmRfcmlwdGlkZV9jb2RlY193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNtZGlmICpjaWYgPSBjaGlwLT5jaWY7CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKwlpbnQgaSA9IDA7CisKKwlzbmRfYXNzZXJ0KGNpZiwgcmV0dXJuKTsKKworCXNuZF9wcmludGRkKCJXcml0ZSBBQzk3IHJlZyAweCV4IDB4JXhcbiIsIHJlZywgdmFsKTsKKwlkbyB7CisJCVNFTkRfU0FDUihjaWYsIHZhbCwgcmVnKTsKKwkJU0VORF9SQUNSKGNpZiwgcmVnLCAmcnB0cik7CisJfSB3aGlsZSAocnB0ci5yZXR3b3Jkc1sxXSAhPSB2YWwgJiYgaSsrIDwgTUFYX1dSSVRFX1JFVFJZKTsKKwlpZiAoaSA9PSBNQVhfV1JJVEVfUkVUUlkpCisJCXNuZF9wcmludGRkKCJXcml0ZSBBQzk3IHJlZyBmYWlsZWRcbiIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX3JpcHRpZGVfY29kZWNfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY21kaWYgKmNpZiA9IGNoaXAtPmNpZjsKKwl1bmlvbiBjbWRyZXQgcnB0ciA9IENNRFJFVF9aRVJPOworCisJc25kX2Fzc2VydChjaWYsIHJldHVybiAwKTsKKworCWlmIChTRU5EX1JBQ1IoY2lmLCByZWcsICZycHRyKSAhPSAwKQorCQlTRU5EX1JBQ1IoY2lmLCByZWcsICZycHRyKTsKKwlzbmRfcHJpbnRkZCgiUmVhZCBBQzk3IHJlZyAweCV4IGdvdCAweCV4XG4iLCByZWcsIHJwdHIucmV0d29yZHNbMV0pOworCXJldHVybiBycHRyLnJldHdvcmRzWzFdOworfQorCitzdGF0aWMgaW50IHNuZF9yaXB0aWRlX2luaXRpYWxpemUoc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwKQoreworCXN0cnVjdCBjbWRpZiAqY2lmOworCXVuc2lnbmVkIGludCBkZXZpY2VfaWQ7CisJaW50IGVycjsKKworCXNuZF9hc3NlcnQoY2hpcCwgcmV0dXJuIC1FSU5WQUwpOworCisJY2lmID0gY2hpcC0+Y2lmOworCWlmICghY2lmKSB7CisJCWlmICgoY2lmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZGlmKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJY2lmLT5od3BvcnQgPSAoc3RydWN0IHJpcHRpZGVwb3J0ICopY2hpcC0+cG9ydDsKKwkJc3Bpbl9sb2NrX2luaXQoJmNpZi0+bG9jayk7CisJCWNoaXAtPmNpZiA9IGNpZjsKKwl9CisJY2lmLT5pc19yZXNldCA9IDA7CisJaWYgKChlcnIgPSByaXB0aWRlX3Jlc2V0KGNpZiwgY2hpcCkpICE9IDApCisJCXJldHVybiBlcnI7CisJZGV2aWNlX2lkID0gY2hpcC0+ZGV2aWNlX2lkOworCXN3aXRjaCAoZGV2aWNlX2lkKSB7CisJY2FzZSAweDQzMTA6CisJY2FzZSAweDQzMjA6CisJY2FzZSAweDQzMzA6CisJCXNuZF9wcmludGRkKCJNb2RlbSBlbmFibGU/XG4iKTsKKwkJU0VORF9TRVREUExMKGNpZik7CisJCWJyZWFrOworCX0KKwlzbmRfcHJpbnRkZCgiRW5hYmxpbmcgTVBVIElSUXNcbiIpOworCWlmIChjaGlwLT5ybWlkaSkKKwkJU0VUX0VNUFVJUlEoY2lmLT5od3BvcnQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc25kX3JpcHRpZGVfZnJlZShzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXApCit7CisJc3RydWN0IGNtZGlmICpjaWY7CisKKwlzbmRfYXNzZXJ0KGNoaXAsIHJldHVybiAwKTsKKworCWlmICgoY2lmID0gY2hpcC0+Y2lmKSkgeworCQlTRVRfR1JFU0VUKGNpZi0+aHdwb3J0KTsKKwkJdWRlbGF5KDEwMCk7CisJCVVOU0VUX0dSRVNFVChjaWYtPmh3cG9ydCk7CisJCWtmcmVlKGNoaXAtPmNpZik7CisJfQorCWlmIChjaGlwLT5md19lbnRyeSkKKwkJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5md19lbnRyeSk7CisJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CisJaWYgKGNoaXAtPmlycSA+PSAwKQorCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCWtmcmVlKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9yaXB0aWRlX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKworCXJldHVybiBzbmRfcmlwdGlkZV9mcmVlKGNoaXApOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX3JpcHRpZGVfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJICAgc3RydWN0IHNuZF9yaXB0aWRlICoqcmNoaXApCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwOworCXN0cnVjdCByaXB0aWRlcG9ydCAqaHdwb3J0OworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF9yaXB0aWRlX2Rldl9mcmVlLAorCX07CisKKwkqcmNoaXAgPSBOVUxMOworCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICghKGNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3JpcHRpZGUpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCWNoaXAtPmNhcmQgPSBjYXJkOworCWNoaXAtPnBjaSA9IHBjaTsKKwljaGlwLT5pcnEgPSAtMTsKKwljaGlwLT5vcGVuc3RyZWFtcyA9IDA7CisJY2hpcC0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOworCWNoaXAtPnJlY2VpdmVkX2lycXMgPSAwOworCWNoaXAtPmhhbmRsZWRfaXJxcyA9IDA7CisJY2hpcC0+Y2lmID0gTlVMTDsKKwl0YXNrbGV0X2luaXQoJmNoaXAtPnJpcHRpZGVfdHEsIHJpcHRpZGVfaGFuZGxlaXJxLCAodW5zaWduZWQgbG9uZyljaGlwKTsKKworCWlmICgoY2hpcC0+cmVzX3BvcnQgPQorCSAgICAgcmVxdWVzdF9yZWdpb24oY2hpcC0+cG9ydCwgNjQsICJSSVBUSURFIikpID09IE5VTEwpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIlJpcHRpZGU6IHVuYWJsZSB0byBncmFiIHJlZ2lvbiAweCVseC0weCVseFxuIiwKKwkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyA2NCAtIDEpOworCQlzbmRfcmlwdGlkZV9mcmVlKGNoaXApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlod3BvcnQgPSAoc3RydWN0IHJpcHRpZGVwb3J0ICopY2hpcC0+cG9ydDsKKwlVTlNFVF9BSUUoaHdwb3J0KTsKKworCWlmIChyZXF1ZXN0X2lycQorCSAgICAocGNpLT5pcnEsIHNuZF9yaXB0aWRlX2ludGVycnVwdCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsCisJICAgICAiUklQVElERSIsIGNoaXApKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlJpcHRpZGU6IHVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwKKwkJCSAgIHBjaS0+aXJxKTsKKwkJc25kX3JpcHRpZGVfZnJlZShjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY2hpcC0+aXJxID0gcGNpLT5pcnE7CisJY2hpcC0+ZGV2aWNlX2lkID0gcGNpLT5kZXZpY2U7CisJcGNpX3NldF9tYXN0ZXIocGNpKTsKKwlpZiAoKGVyciA9IHNuZF9yaXB0aWRlX2luaXRpYWxpemUoY2hpcCkpIDwgMCkgeworCQlzbmRfcmlwdGlkZV9mcmVlKGNoaXApOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKSkgPCAwKSB7CisJCXNuZF9yaXB0aWRlX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCisJKnJjaGlwID0gY2hpcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3NuZF9yaXB0aWRlX3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGNtaHcgKmRhdGE7CisJaW50IGk7CisJc3RydWN0IGNtZGlmICpjaWYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgcFsyNTZdOworCXVuc2lnbmVkIHNob3J0IHJ2YWwgPSAwLCBsdmFsID0gMDsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKworCWlmICghY2hpcCkKKwkJcmV0dXJuOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiJXNcblxuIiwgY2hpcC0+Y2FyZC0+bG9uZ25hbWUpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRldmljZSBJRDogMHgleFxuUmVjZWl2ZWQgSVJRczogKCVsZCklbGRcblBvcnRzOiIsCisJCSAgICBjaGlwLT5kZXZpY2VfaWQsIGNoaXAtPmhhbmRsZWRfaXJxcywgY2hpcC0+cmVjZWl2ZWRfaXJxcyk7CisJZm9yIChpID0gMDsgaSA8IDY0OyBpICs9IDQpCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVjJTAyeDogJTA4eCIsCisJCQkgICAgKGkgJSAxNikgPyAnICcgOiAnXG4nLCBpLCBpbmwoY2hpcC0+cG9ydCArIGkpKTsKKwlpZiAoKGNpZiA9IGNoaXAtPmNpZikpIHsKKwkJc25kX2lwcmludGYoYnVmZmVyLAorCQkJICAgICJcblZlcnNpb246IEFTSUM6ICVkIENPREVDOiAlZCBBVVhEU1A6ICVkIFBST0c6ICVkIiwKKwkJCSAgICBjaGlwLT5maXJtd2FyZS5maXJtd2FyZS5BU0lDLAorCQkJICAgIGNoaXAtPmZpcm13YXJlLmZpcm13YXJlLkNPREVDLAorCQkJICAgIGNoaXAtPmZpcm13YXJlLmZpcm13YXJlLkFVWERTUCwKKwkJCSAgICBjaGlwLT5maXJtd2FyZS5maXJtd2FyZS5QUk9HKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiXG5EaWdpdGFsIG1peGVyOiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCQkJZ2V0bWl4ZXIoY2lmLCBpLCAmcnZhbCwgJmx2YWwpOworCQkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4gJWQ6ICVkICVkIiwgaSwgcnZhbCwgbHZhbCk7CisJCX0KKwkJc25kX2lwcmludGYoYnVmZmVyLAorCQkJICAgICJcbkFSTSBDb21tYW5kcyBudW06ICVkIGZhaWxlZDogJWQgdGltZTogJWQgbWF4OiAlZCBtaW46ICVkIiwKKwkJCSAgICBjaWYtPmNtZGNudCwgY2lmLT5lcnJjbnQsCisJCQkgICAgY2lmLT5jbWR0aW1lLCBjaWYtPmNtZHRpbWVtYXgsIGNpZi0+Y21kdGltZW1pbik7CisJfQorCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuT3BlbiBzdHJlYW1zICVkOlxuIiwgY2hpcC0+b3BlbnN0cmVhbXMpOworCWZvciAoaSA9IDA7IGkgPCBQTEFZQkFDS19TVUJTVFJFQU1TOyBpKyspIHsKKwkJaWYgKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbVtpXQorCQkgICAgJiYgY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtW2ldLT5ydW50aW1lCisJCSAgICAmJiAoZGF0YSA9CisJCQljaGlwLT5wbGF5YmFja19zdWJzdHJlYW1baV0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSkpIHsKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwKKwkJCQkgICAgInN0cmVhbTogJWQgbWl4ZXI6ICVkIHNvdXJjZTogJWQgKCVkLCVkKVxuIiwKKwkJCQkgICAgZGF0YS0+aWQsIGRhdGEtPm1peGVyLCBkYXRhLT5zb3VyY2UsCisJCQkJICAgIGRhdGEtPmludGRlY1swXSwgZGF0YS0+aW50ZGVjWzFdKTsKKwkJCWlmICghKGdldHNhbXBsZXJhdGUoY2lmLCBkYXRhLT5pbnRkZWMsICZyYXRlKSkpCisJCQkJc25kX2lwcmludGYoYnVmZmVyLCAicmF0ZTogJWRcbiIsIHJhdGUpOworCQl9CisJfQorCWlmIChjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbQorCSAgICAmJiBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbS0+cnVudGltZQorCSAgICAmJiAoZGF0YSA9IGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEpKSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwKKwkJCSAgICAic3RyZWFtOiAlZCBtaXhlcjogJWQgc291cmNlOiAlZCAoJWQsJWQpXG4iLAorCQkJICAgIGRhdGEtPmlkLCBkYXRhLT5taXhlciwKKwkJCSAgICBkYXRhLT5zb3VyY2UsIGRhdGEtPmludGRlY1swXSwgZGF0YS0+aW50ZGVjWzFdKTsKKwkJaWYgKCEoZ2V0c2FtcGxlcmF0ZShjaWYsIGRhdGEtPmludGRlYywgJnJhdGUpKSkKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgInJhdGU6ICVkXG4iLCByYXRlKTsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiUGF0aHM6XG4iKTsKKwlpID0gZ2V0cGF0aHMoY2lmLCBwKTsKKwl3aGlsZSAoaS0tKSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiV4LT4leCAiLCBwW2kgLSAxXSwgcFtpXSk7CisJCWktLTsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF9yaXB0aWRlX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXApCit7CisJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKKworCWlmICghc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgInJpcHRpZGUiLCAmZW50cnkpKQorCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIDQwOTYsIHNuZF9yaXB0aWRlX3Byb2NfcmVhZCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9yaXB0aWRlX21peGVyKHN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTdfYnVzICpwYnVzOworCXN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSBhYzk3OworCWludCBlcnIgPSAwOworCXN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBvcHMgPSB7CisJCS53cml0ZSA9IHNuZF9yaXB0aWRlX2NvZGVjX3dyaXRlLAorCQkucmVhZCA9IHNuZF9yaXB0aWRlX2NvZGVjX3JlYWQsCisJfTsKKworCW1lbXNldCgmYWM5NywgMCwgc2l6ZW9mKGFjOTcpKTsKKwlhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisJYWM5Ny5zY2FwcyA9IEFDOTdfU0NBUF9TS0lQX01PREVNOworCisJaWYgKChlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgY2hpcCwgJnBidXMpKSA8IDApCisJCXJldHVybiBlcnI7CisKKwljaGlwLT5hYzk3X2J1cyA9IHBidXM7CisJYWM5Ny5wY2kgPSBjaGlwLT5wY2k7CisJaWYgKChlcnIgPSBzbmRfYWM5N19taXhlcihwYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpKSA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIFNVUFBPUlRfSk9ZU1RJQ0sKK3N0YXRpYyBpbnQgaGF2ZV9qb3lzdGljazsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqcmlwdGlkZV9nYW1lcG9ydF9wY2k7CitzdGF0aWMgc3RydWN0IGdhbWVwb3J0ICpyaXB0aWRlX2dhbWVwb3J0OworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX3JpcHRpZGVfam95c3RpY2tfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0YXRpYyBpbnQgZGV2OworCisJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFlbmFibGVbZGV2XSkgeworCQlkZXYrKzsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKGpveXN0aWNrX3BvcnRbZGV2XSkgeworCQlyaXB0aWRlX2dhbWVwb3J0ID0gZ2FtZXBvcnRfYWxsb2NhdGVfcG9ydCgpOworCQlpZiAocmlwdGlkZV9nYW1lcG9ydCkgeworCQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbgorCQkJICAgIChqb3lzdGlja19wb3J0W2Rldl0sIDgsICJSaXB0aWRlIGdhbWVwb3J0IikpIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAiUmlwdGlkZTogY2Fubm90IGdyYWIgZ2FtZXBvcnQgMHgleFxuIiwKKwkJCQkJICAgam95c3RpY2tfcG9ydFtkZXZdKTsKKwkJCQlnYW1lcG9ydF9mcmVlX3BvcnQocmlwdGlkZV9nYW1lcG9ydCk7CisJCQkJcmlwdGlkZV9nYW1lcG9ydCA9IE5VTEw7CisJCQl9IGVsc2UgeworCQkJCXJpcHRpZGVfZ2FtZXBvcnRfcGNpID0gcGNpOworCQkJCXJpcHRpZGVfZ2FtZXBvcnQtPmlvID0gam95c3RpY2tfcG9ydFtkZXZdOworCQkJCWdhbWVwb3J0X3JlZ2lzdGVyX3BvcnQocmlwdGlkZV9nYW1lcG9ydCk7CisJCQl9CisJCX0KKwl9CisJZGV2Kys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfcmlwdGlkZV9qb3lzdGlja19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlpZiAocmlwdGlkZV9nYW1lcG9ydCkgeworCQlpZiAocmlwdGlkZV9nYW1lcG9ydF9wY2kgPT0gcGNpKSB7CisJCQlyZWxlYXNlX3JlZ2lvbihyaXB0aWRlX2dhbWVwb3J0LT5pbywgOCk7CisJCQlyaXB0aWRlX2dhbWVwb3J0X3BjaSA9IE5VTEw7CisJCQlnYW1lcG9ydF91bnJlZ2lzdGVyX3BvcnQocmlwdGlkZV9nYW1lcG9ydCk7CisJCQlyaXB0aWRlX2dhbWVwb3J0ID0gTlVMTDsKKwkJfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX2NhcmRfcmlwdGlkZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQoreworCXN0YXRpYyBpbnQgZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXA7CisJdW5zaWduZWQgc2hvcnQgYWRkcjsKKwlpbnQgZXJyID0gMDsKKworCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZW5hYmxlW2Rldl0pIHsKKwkJZGV2Kys7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCWlmIChjYXJkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWlmICgoZXJyID0gc25kX3JpcHRpZGVfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlpZiAoKGVyciA9IHNuZF9yaXB0aWRlX3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCWlmICgoZXJyID0gc25kX3JpcHRpZGVfbWl4ZXIoY2hpcCkpIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfRVhUX0xlZ2FjeV9NYXNrLCBMRUdBQ1lfRU5BQkxFX0FMTAorCQkJICAgICAgfCAob3BsM19wb3J0W2Rldl0gPyBMRUdBQ1lfRU5BQkxFX0ZNIDogMCkKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCisJCQkgICAgICB8IChqb3lzdGlja19wb3J0W2Rldl0gPyBMRUdBQ1lfRU5BQkxFX0dBTUVQT1JUIDoKKwkJCQkgMCkKKyNlbmRpZgorCQkJICAgICAgfCAobXB1X3BvcnRbZGV2XQorCQkJCSA/IChMRUdBQ1lfRU5BQkxFX01QVV9JTlQgfCBMRUdBQ1lfRU5BQkxFX01QVSkgOgorCQkJCSAwKQorCQkJICAgICAgfCAoKGNoaXAtPmlycSA8PCA0KSAmIDB4RjApKTsKKwlpZiAoKGFkZHIgPSBtcHVfcG9ydFtkZXZdKSAhPSAwKSB7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9FWFRfTVBVX0Jhc2UsIGFkZHIpOworCQlpZiAoKGVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX1JJUFRJREUsCisJCQkJCSAgICAgICBhZGRyLCAwLCBjaGlwLT5pcnEsIDAsCisJCQkJCSAgICAgICAmY2hpcC0+cm1pZGkpKSA8IDApCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICJSaXB0aWRlOiBDYW4ndCBBbGxvY2F0ZSBNUFUgYXQgMHgleFxuIiwKKwkJCQkgICBhZGRyKTsKKwkJZWxzZQorCQkJY2hpcC0+bXB1YWRkciA9IGFkZHI7CisJfQorCWlmICgoYWRkciA9IG9wbDNfcG9ydFtkZXZdKSAhPSAwKSB7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9FWFRfRk1fQmFzZSwgYWRkcik7CisJCWlmICgoZXJyID0gc25kX29wbDNfY3JlYXRlKGNhcmQsIGFkZHIsIGFkZHIgKyAyLAorCQkJCQkgICBPUEwzX0hXX1JJUFRJREUsIDAsCisJCQkJCSAgICZjaGlwLT5vcGwzKSkgPCAwKQorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiUmlwdGlkZTogQ2FuJ3QgQWxsb2NhdGUgT1BMMyBhdCAweCV4XG4iLAorCQkJCSAgIGFkZHIpOworCQllbHNlIHsKKwkJCWNoaXAtPm9wbGFkZHIgPSBhZGRyOworCQkJaWYgKChlcnIgPQorCQkJICAgICBzbmRfb3BsM19od2RlcF9uZXcoY2hpcC0+b3BsMywgMCwgMSwgTlVMTCkpIDwgMCkKKwkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAiUmlwdGlkZTogQ2FuJ3QgQWxsb2NhdGUgT1BMMy1IV0RFUFxuIik7CisJCX0KKwl9CisjaWZkZWYgU1VQUE9SVF9KT1lTVElDSworCWlmICgoYWRkciA9IGpveXN0aWNrX3BvcnRbZGV2XSkgIT0gMCkgeworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfRVhUX0dhbWVfQmFzZSwgYWRkcik7CisJCWNoaXAtPmdhbWVhZGRyID0gYWRkcjsKKwl9CisjZW5kaWYKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJSSVBUSURFIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlJpcHRpZGUiKTsKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCisJc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJCSAiJXMgYXQgMHglbHgsIGlycSAlaSBtcHUgMHgleCBvcGwzIDB4JXggZ2FtZXBvcnQgMHgleCIsCisJCSBjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPnBvcnQsIGNoaXAtPmlycSwgY2hpcC0+bXB1YWRkciwKKwkJIGNoaXAtPm9wbGFkZHIsIGNoaXAtPmdhbWVhZGRyKTsKKyNlbHNlCisJc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJCSAiJXMgYXQgMHglbHgsIGlycSAlaSBtcHUgMHgleCBvcGwzIDB4JXgiLAorCQkgY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5wb3J0LCBjaGlwLT5pcnEsIGNoaXAtPm1wdWFkZHIsCisJCSBjaGlwLT5vcGxhZGRyKTsKKyNlbmRpZgorCXNuZF9yaXB0aWRlX3Byb2NfaW5pdChjaGlwKTsKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisJZGV2Kys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfY2FyZF9yaXB0aWRlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQoreworCXNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworCS5uYW1lID0gIlJJUFRJREUiLAorCS5pZF90YWJsZSA9IHNuZF9yaXB0aWRlX2lkcywKKwkucHJvYmUgPSBzbmRfY2FyZF9yaXB0aWRlX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9yaXB0aWRlX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSByaXB0aWRlX3N1c3BlbmQsCisJLnJlc3VtZSA9IHJpcHRpZGVfcmVzdW1lLAorI2VuZGlmCit9OworCisjaWZkZWYgU1VQUE9SVF9KT1lTVElDSworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGpveXN0aWNrX2RyaXZlciA9IHsKKwkubmFtZSA9ICJSaXB0aWRlIEpveXN0aWNrIiwKKwkuaWRfdGFibGUgPSBzbmRfcmlwdGlkZV9qb3lzdGlja19pZHMsCisJLnByb2JlID0gc25kX3JpcHRpZGVfam95c3RpY2tfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9yaXB0aWRlX2pveXN0aWNrX3JlbW92ZSksCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9yaXB0aWRlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCWlmICgoZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKSkgPCAwKQorCQlyZXR1cm4gZXJyOworI2lmIGRlZmluZWQoU1VQUE9SVF9KT1lTVElDSykKKwlpZiAocGNpX3JlZ2lzdGVyX2RyaXZlcigmam95c3RpY2tfZHJpdmVyKSA8IDApIHsKKwkJaGF2ZV9qb3lzdGljayA9IDA7CisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJubyBqb3lzdGljayBmb3VuZFxuIik7CisJfSBlbHNlCisJCWhhdmVfam95c3RpY2sgPSAxOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfcmlwdGlkZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworI2lmIGRlZmluZWQoU1VQUE9SVF9KT1lTVElDSykKKwlpZiAoaGF2ZV9qb3lzdGljaykKKwkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZqb3lzdGlja19kcml2ZXIpOworI2VuZGlmCit9CisKK21vZHVsZV9pbml0KGFsc2FfY2FyZF9yaXB0aWRlX2luaXQpOworbW9kdWxlX2V4aXQoYWxzYV9jYXJkX3JpcHRpZGVfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lMzIuYyBiL3NvdW5kL3BjaS9ybWUzMi5jCmluZGV4IGFiNzg1NDQuLjU1YjFkNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpzcGRpZl9jdGw7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTMyX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9ybWUzMl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX1hJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMiwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCx9LAogCXtQQ0lfVkVORE9SX0lEX1hJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl84LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2LmMgYi9zb3VuZC9wY2kvcm1lOTYuYwppbmRleCA2YzJhOWY0Li4zYzFiYzUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTYuYworKysgYi9zb3VuZC9wY2kvcm1lOTYuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAgICpzcGRpZl9jdGw7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9ybWU5Nl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF9YSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NiwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1hJTElOWCwgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzgsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggZWJmN2EyYi4uNjFmODJmMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtNTY4LDcgKzU2OCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9YSUxJTlgsCiAJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwgCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCBiNTUzOGVmLi43MjJiOWU2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2hkc3BtX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwbV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfWElMSU5YLAogCSAuZGV2aWNlID0gUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1BfTUFESSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCBhNjg3ZWI2Li43NWQ2NDA2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2NTJfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2NTJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS52ZW5kb3IJICAgPSAweDEwZWUsCiAJCS5kZXZpY2UJICAgPSAweDNmYzQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCAyZDY2YTA5Li45MWY4YmYzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3NvbmljX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9zb25pY19pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHg1MzMzLCAweGNhMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCiAgICAgICAgIHsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCBiNDUzODA0Li45NjI0YTVmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC02Myw3ICs2Myw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkod2F2ZXRhYmxlX3NpemUsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdhdmV0YWJsZV9zaXplLCAiTWF4aW11bSBtZW1vcnkgc2l6ZSBpbiBrQiBmb3Igd2F2ZXRhYmxlIHN5bnRoLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3RyaWRlbnRfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3RyaWRlbnRfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RSSURFTlQsIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgpLCAKIAkJUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVFJJREVOVCwgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9OWCksIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggMTk1N2QyOS4uMzlkYWY2MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0xMjMsNiArMTIzLDcgQEAKICNkZWZpbmUgVklBX1JFVl84MjMzQQkJMHg0MAkvKiAxIHJlYywgMSBtdWx0aS1wYiwgc3BkZiAqLwogI2RlZmluZSBWSUFfUkVWXzgyMzUJCTB4NTAJLyogMiByZWMsIDQgcGIsIDEgbXVsdGktcGIsIHNwZGlmICovCiAjZGVmaW5lIFZJQV9SRVZfODIzNwkJMHg2MAorI2RlZmluZSBWSUFfUkVWXzgyNTEJCTB4NzAKIAogLyoKICAqICBEaXJlY3QgcmVnaXN0ZXJzCkBAIC0zOTUsNyArMzk2LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92aWE4Mnh4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92aWE4Mnh4X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJLyogMHgxMTA2LCAweDMwNTggKi8KIAl7IFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgVFlQRV9DQVJEX1ZJQTY4NiwgfSwJLyogNjg2QSAqLwogCS8qIDB4MTEwNiwgMHgzMDU5ICovCkBAIC04NjIsNiArODYzLDExIEBACiAJaWYgKCFzdGF0dXMpCiAJCXN0YXR1cyA9IGluYihWSUFERVZfUkVHKHZpYWRldiwgT0ZGU0VUX1NUQVRVUykpOwogCisJLyogQW4gYXBwYXJlbnQgYnVnIGluIHRoZSA4MjUxIGlzIHdvcmtlZCBhcm91bmQgYnkgc2VuZGluZyBhIAorCSAqIFJFR19DVFJMX1NUQVJULiAqLworCWlmIChjaGlwLT5yZXZpc2lvbiA9PSBWSUFfUkVWXzgyNTEgJiYgKHN0YXR1cyAmIFZJQV9SRUdfU1RBVF9FT0wpKQorCQlzbmRfdmlhODJ4eF9wY21fdHJpZ2dlcihzdWJzdHJlYW0sIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKTsKKwogCWlmICghKHN0YXR1cyAmIFZJQV9SRUdfU1RBVF9BQ1RJVkUpKSB7CiAJCXJlcyA9IDA7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMjMxMyw2ICsyMzE5LDcgQEAKIAl7IFZJQV9SRVZfODIzM0EsICJWSUEgODIzM0EiLCBUWVBFX1ZJQTgyMzNBIH0sCiAJeyBWSUFfUkVWXzgyMzUsICJWSUEgODIzNSIsIFRZUEVfVklBODIzMyB9LAogCXsgVklBX1JFVl84MjM3LCAiVklBIDgyMzciLCBUWVBFX1ZJQTgyMzMgfSwKKwl7IFZJQV9SRVZfODI1MSwgIlZJQSA4MjUxIiwgVFlQRV9WSUE4MjMzIH0sCiB9OwogCiAvKgpAQCAtMjMyNSw3ICsyMzMyLDcgQEAKIAlzaG9ydCBhY3Rpb247CS8qIG5ldyBkeHNfc3VwcG9ydCB2YWx1ZSAqLwogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgY2hlY2tfZHhzX2xpc3Qoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNoZWNrX2R4c19saXN0KHN0cnVjdCBwY2lfZGV2ICpwY2ksIGludCByZXZpc2lvbikKIHsKIAlzdGF0aWMgc3RydWN0IGR4c193aGl0ZWxpc3Qgd2hpdGVsaXN0W10gPSB7CiAJCXsgLnN1YnZlbmRvciA9IDB4MTAwNSwgLnN1YmRldmljZSA9IDB4NDcxMCwgLmFjdGlvbiA9IFZJQV9EWFNfRU5BQkxFIH0sIC8qIEF2YW5jZSBMb2dpYyBNb2JvICovCkBAIC0yMzMzLDYgKzIzNDAsNyBAQAogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweDBhODEsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBFQ1MgSzdWVEEzIHY4LjAgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDE5LCAuc3ViZGV2aWNlID0gMHgwYTg1LCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogRUNTIEw3Vk1NMiAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweGExMDEsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LAorCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweGFhMDEsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LCAvKiBFQ1MgSzhUODkwLUEgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDI1LCAuc3ViZGV2aWNlID0gMHgwMDMzLCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogQWNlciBJbnNwaXJlIDEzNTNMTSAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMjUsIC5zdWJkZXZpY2UgPSAweDAwNDYsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LCAvKiBBY2VyIEFzcGlyZSAxNTI0IFdMTWkgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDQzLCAuc3ViZGV2aWNlID0gMHg4MDk1LCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogQVNVUyBBN1Y4WCAoRklYTUU6IHBvc3NpYmx5IFZJQV9EWFNfRU5BQkxFPykqLwpAQCAtMjM0MSw2ICsyMzQ5LDcgQEAKIAkJeyAuc3VidmVuZG9yID0gMHgxMDQzLCAuc3ViZGV2aWNlID0gMHg4MTBkLCAuYWN0aW9uID0gVklBX0RYU19TUkMgfSwgLyogQVNVUyAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwNDMsIC5zdWJkZXZpY2UgPSAweDgxMmEsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyAgICB9LCAvKiBBU1VTIEE4ViBEZWx1eGUgKi8gCiAJCXsgLnN1YnZlbmRvciA9IDB4MTA0MywgLnN1YmRldmljZSA9IDB4ODE3NCwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDICAgIH0sIC8qIEFTVVMgKi8KKwkJeyAuc3VidmVuZG9yID0gMHgxMDQzLCAuc3ViZGV2aWNlID0gMHg4MWI5LCAuYWN0aW9uID0gVklBX0RYU19TUkMgICAgfSwgLyogQVNVUyBBOFYtTVggKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDcxLCAuc3ViZGV2aWNlID0gMHg4Mzc1LCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogVm9iaXMvWWFrdW1vL01pdGFjIG5vdGVib29rICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTA3MSwgLnN1YmRldmljZSA9IDB4ODM5OSwgLmFjdGlvbiA9IFZJQV9EWFNfTk9fVlJBIH0sIC8qIFVtYXggQUIgNTk1VCAoVklBIEs4TjgwMEEgLSBWVDgyMzcpICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTBjZiwgLnN1YmRldmljZSA9IDB4MTE4ZSwgLmFjdGlvbiA9IFZJQV9EWFNfRU5BQkxFIH0sIC8qIEZTQyBsYXB0b3AgKi8KQEAgLTIzNzMsNiArMjM4Miw3IEBACiAJCXsgLnN1YnZlbmRvciA9IDB4MTYxZiwgLnN1YmRldmljZSA9IDB4MjAzMiwgLmFjdGlvbiA9IFZJQV9EWFNfNDhLIH0sIC8qIG02ODB4IG1hY2hpbmVzICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTYzMSwgLnN1YmRldmljZSA9IDB4ZTAwNCwgLmFjdGlvbiA9IFZJQV9EWFNfRU5BQkxFIH0sIC8qIEVhc3kgTm90ZSAzMTc0LCBQYWNrYXJkIEJlbGwgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxNjk1LCAuc3ViZGV2aWNlID0gMHgzMDA1LCAuYWN0aW9uID0gVklBX0RYU19FTkFCTEUgfSwgLyogRVBvWCBFUC04SzlBICovCisJCXsgLnN1YnZlbmRvciA9IDB4MTY5NSwgLnN1YmRldmljZSA9IDB4MzAwYywgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEVQb1ggRVAtOEtSQUkgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxNjk1LCAuc3ViZGV2aWNlID0gMHgzMDBlLCAuYWN0aW9uID0gVklBX0RYU19TUkMgfSwgLyogRVBvWCA5SEVBSSAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDE2ZjMsIC5zdWJkZXZpY2UgPSAweDY0MDUsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LCAvKiBKZXR3YXkgSzhNOE1TICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTczNCwgLnN1YmRldmljZSA9IDB4MTA3OCwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEZTQyBBbWlsbyBMNzMwMCAqLwpAQCAtMjQwMyw2ICsyNDEzLDEwIEBACiAJCX0KIAl9CiAKKwkvKiBmb3IgbmV3ZXIgcmV2aXNpb24sIGRlZmF1bHQgdG8gRFhTX1NSQyAqLworCWlmIChyZXZpc2lvbiA+PSBWSUFfUkVWXzgyMzUpCisJCXJldHVybiBWSUFfRFhTX1NSQzsKKwogCS8qCiAJICogbm90IGRldGVjdGVkLCB0cnkgNDhrIHJhdGUgb25seSB0byBiZSBzdXJlLgogCSAqLwpAQCAtMjQ0Nyw3ICsyNDYxLDcgQEAKIAkJfQogCQlpZiAoY2hpcF90eXBlICE9IFRZUEVfVklBODIzM0EpIHsKIAkJCWlmIChkeHNfc3VwcG9ydCA9PSBWSUFfRFhTX0FVVE8pCi0JCQkJZHhzX3N1cHBvcnQgPSBjaGVja19keHNfbGlzdChwY2kpOworCQkJCWR4c19zdXBwb3J0ID0gY2hlY2tfZHhzX2xpc3QocGNpLCByZXZpc2lvbik7CiAJCQkvKiBmb3JjZSB0byB1c2UgVklBODIzMyBvciA4MjMzQSBtb2RlbCBhY2NvcmRpbmcgdG8KIAkJCSAqIGR4c19zdXBwb3J0IG1vZHVsZSBvcHRpb24KIAkJCSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKaW5kZXggMjJjZTRkMy4uZWY5N2U1MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZpYTgyeHhfbW9kZW1faWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZpYTgyeHhfbW9kZW1faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTEwNiwgMHgzMDY4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBUWVBFX0NBUkRfVklBODJYWF9NT0RFTSwgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCmluZGV4IGM4MTZkZGYuLjBmMWViYjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCisrKyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCkBAIC02MCw3ICs2MCw3IEBACiAJVlhfUENJX1ZYMjIyX05FVwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92eDIyMl9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdngyMjJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTBiNSwgMHg5MDUwLCAweDEzNjksIFBDSV9BTllfSUQsIDAsIDAsIFZYX1BDSV9WWDIyMl9PTEQsIH0sICAgLyogUExYICovCiAJeyAweDEwYjUsIDB4OTAzMCwgMHgxMzY5LCBQQ0lfQU5ZX0lELCAwLCAwLCBWWF9QQ0lfVlgyMjJfTkVXLCB9LCAgIC8qIFBMWCAqLwogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKaW5kZXggZGI1N2NlOS4uNjVlYmY1ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCkBAIC03MCw3ICs3MCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkocmVhcl9zd2FwLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVhcl9zd2FwLCAiU3dhcCByZWFyIGNoYW5uZWxzIChtdXN0IGJlIGVuYWJsZWQgZm9yIGNvcnJlY3QgSUVDOTU4IChTL1BESUYpKSBvdXRwdXQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF95bWZwY2lfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ltZnBjaV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogICAgICAgICB7IDB4MTA3MywgMHgwMDA0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIFlNRjcyNCAqLwogICAgICAgICB7IDB4MTA3MywgMHgwMDBkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIFlNRjcyNEYgKi8KICAgICAgICAgeyAweDEwNzMsIDB4MDAwYSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBZTUY3NDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9LY29uZmlnIGIvc291bmQvcGNtY2lhL0tjb25maWcKaW5kZXggNWQxYjBiNy4uYzlmYTFhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL0tjb25maWcKKysrIGIvc291bmQvcGNtY2lhL0tjb25maWcKQEAgLTUsNyArNSw3IEBACiAKIGNvbmZpZyBTTkRfVlhQT0NLRVQKIAl0cmlzdGF0ZSAiRGlnaWdyYW0gVlhwb2NrZXQiCi0JZGVwZW5kcyBvbiBTTkQgJiYgUENNQ0lBICYmIElTQQorCWRlcGVuZHMgb24gU05EICYmIFBDTUNJQQogCXNlbGVjdCBTTkRfVlhfTElCCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIERpZ2lncmFtIFZYcG9ja2V0IGFuZApAQCAtMTYsNyArMTYsNyBAQAogCiBjb25maWcgU05EX1BEQVVESU9DRgogCXRyaXN0YXRlICJTb3VuZCBDb3JlIFBEQXVkaW9DRiIKLQlkZXBlbmRzIG9uIFNORCAmJiBQQ01DSUEgJiYgSVNBCisJZGVwZW5kcyBvbiBTTkQgJiYgUENNQ0lBCiAJc2VsZWN0IFNORF9QQ00KIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgU291bmQgQ29yZSBQREF1ZGlvQ0YKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IDc3Y2FmNDMuLmFkZmRjZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtNTcsMTggKzU3LDEyIEBACiAvKgogICogcHJvdG90eXBlcwogICovCi1zdGF0aWMgdm9pZCBwZGFjZl9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IHBkYWNmX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBzbmRfcGRhY2ZfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKLXN0YXRpYyB2b2lkIHBkYWNmX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHBkYWNmX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQkvKiByZWxlYXNlIGNzIHJlc291cmNlcyAqLwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0JCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwotCX0KKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKIC8qCkBAIC03Niw3ICs3MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3BkYWNmX2ZyZWUoc3RydWN0IHNuZF9wZGFjZiAqcGRhY2YpCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9ICZwZGFjZi0+bGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IHBkYWNmLT5wX2RldjsKIAogCXBkYWNmX3JlbGVhc2UobGluayk7CiAKQEAgLTk2LDEwICs5MCw5IEBACiAvKgogICogc25kX3BkYWNmX2F0dGFjaCAtIGF0dGFjaCBjYWxsYmFjayBmb3IgY3MKICAqLwotc3RhdGljIGludCBzbmRfcGRhY2ZfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc25kX3BkYWNmX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWludCBpOwotCWRldl9saW5rX3QgKmxpbms7ICAgICAgICAgICAgICAgLyogSW5mbyBmb3IgY2FyZG1nciAqLwogCXN0cnVjdCBzbmRfcGRhY2YgKnBkYWNmOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKQEAgLTEzOSw3ICsxMzIsNyBAQAogCXBkYWNmLT5pbmRleCA9IGk7CiAJY2FyZF9saXN0W2ldID0gY2FyZDsKIAotCWxpbmsgPSAmcGRhY2YtPmxpbms7CisJcGRhY2YtPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gcGRhY2Y7CiAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwpAQCAtMTU2LDEzICsxNDksNyBAQAogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0JLyogQ2hhaW4gZHJpdmVycyAqLwotCWxpbmstPm5leHQgPSBOVUxMOwotCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcGRhY2ZfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHBkYWNmX2NvbmZpZyhsaW5rKTsKIH0KIAogCkBAIC0yMDksOSArMTk2LDggQEAKIC8qCiAgKiBzbmRfcGRhY2ZfZGV0YWNoIC0gZGV0YWNoIGNhbGxiYWNrIGZvciBjcwogICovCi1zdGF0aWMgdm9pZCBzbmRfcGRhY2ZfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHNuZF9wZGFjZl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IHNuZF9wZGFjZiAqY2hpcCA9IGxpbmstPnByaXY7CiAKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJwZGFjZl9kZXRhY2ggY2FsbGVkXG4iKTsKQEAgLTIzMCwxMyArMjE2LDExIEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIHBkYWNmX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBwZGFjZl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3Qgc25kX3BkYWNmICpwZGFjZiA9IGxpbmstPnByaXY7CiAJdHVwbGVfdCB0dXBsZTsKIAljaXNwYXJzZV90ICpwYXJzZSA9IE5VTEw7Ci0JY29uZmlnX2luZm9fdCBjb25mOwogCXVfc2hvcnQgYnVmWzMyXTsKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CiAKQEAgLTI0NCw3ICsyMjgsNyBAQAogCXBhcnNlID0ga21hbGxvYyhzaXplb2YoKnBhcnNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgcGFyc2UpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAicGRhY2ZfY29uZmlnOiBjYW5ub3QgYWxsb2NhdGVcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKQEAgLTI1Miw3MSArMjM2LDUxIEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCBwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgcGFyc2UpKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NTsKIAlrZnJlZShwYXJzZSk7CiAKLQlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotCWxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7Ci0KLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGhhbmRsZSwgJmxpbmstPmlvKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCWlmIChzbmRfcGRhY2ZfYXNzaWduX3Jlc291cmNlcyhwZGFjZiwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpIDwgMCkKIAkJZ290byBmYWlsZWQ7CiAKLQlsaW5rLT5kZXYgPSAmcGRhY2YtPm5vZGU7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlyZXR1cm47CisJbGluay0+ZGV2X25vZGUgPSAmcGRhY2YtPm5vZGU7CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6Ci0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBwZGFjZl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHBkYWNmX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXN0cnVjdCBzbmRfcGRhY2YgKmNoaXAgPSBsaW5rLT5wcml2OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiU1VTUEVORFxuIik7Ci0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CiAJaWYgKGNoaXApIHsKIAkJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAic25kX3BkYWNmX3N1c3BlbmQgY2FsbGluZ1xuIik7CiAJCXNuZF9wZGFjZl9zdXNwZW5kKGNoaXAsIFBNU0dfU1VTUEVORCk7CiAJfQogCi0Jc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiUkVTRVRfUEhZU0lDQUxcbiIpOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBkYWNmX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBwZGFjZl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXN0cnVjdCBzbmRfcGRhY2YgKmNoaXAgPSBsaW5rLT5wcml2OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiUkVTVU1FXG4iKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0KLQlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJDQVJEX1JFU0VUXG4iKTsKLQlpZiAoREVWX09LKGxpbmspKSB7Ci0JCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInJlcXVlc3Rjb25maWcuLi5cbiIpOwotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCWlmIChwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKIAkJaWYgKGNoaXApIHsKIAkJCXNuZF9wcmludGRkKEtFUk5fREVCVUcgImNhbGxpbmcgc25kX3BkYWNmX3Jlc3VtZVxuIik7CiAJCQlzbmRfcGRhY2ZfcmVzdW1lKGNoaXApOwpAQCAtMzQzLDcgKzMwNyw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gInNuZC1wZGF1ZGlvY2YiLAogCX0sCi0JLnByb2JlCQk9IHNuZF9wZGFjZl9hdHRhY2gsCisJLnByb2JlCQk9IHNuZF9wZGFjZl9wcm9iZSwKIAkucmVtb3ZlCQk9IHNuZF9wZGFjZl9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gc25kX3BkYWNmX2lkcywKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmggYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCmluZGV4IDI3NDRmMTguLjlhMTRhNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaApAQCAtMTE2LDcgKzExNiw3IEBACiAJdm9pZCAqcGNtX2FyZWE7CiAJCiAJLyogcGNtY2lhIHN0dWZmICovCi0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCmluZGV4IDY2OTAwZDIuLjdlMGNkYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCkBAIC01OSwxNSArNTksOSBAQAogCiAvKgogICovCi1zdGF0aWMgdm9pZCB2eHBvY2tldF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCB2eHBvY2tldF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJLyogcmVsZWFzZSBjcyByZXNvdXJjZXMgKi8KLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLQl9CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiAvKgpAQCAtMTMyLDkgKzEyNiw5IEBACiAvKgogICogY3JlYXRlIHZ4cG9ja2V0IGluc3RhbmNlCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICpzbmRfdnhwb2NrZXRfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGlibCkKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICpzbmRfdnhwb2NrZXRfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGlibCwKKwkJCQkJICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rOwkJLyogSW5mbyBmb3IgY2FyZG1nciAqLwogCXN0cnVjdCB2eF9jb3JlICpjaGlwOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cDsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKQEAgLTE1NCw3ICsxNDgsNyBAQAogCiAJdnhwID0gKHN0cnVjdCBzbmRfdnhwb2NrZXQgKiljaGlwOwogCi0JbGluayA9ICZ2eHAtPmxpbms7CisJdnhwLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGNoaXA7CiAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwpAQCAtMTY3LDcgKzE2MSw2IEBACiAJbGluay0+aXJxLkluc3RhbmNlID0gY2hpcDsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwpAQCAtMjE1LDkgKzIwOCw4IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIHZ4cG9ja2V0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCB2eHBvY2tldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcCA9IGxpbmstPnByaXY7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwID0gKHN0cnVjdCBzbmRfdnhwb2NrZXQgKiljaGlwOwogCXR1cGxlX3QgdHVwbGU7CkBAIC0yMjksMjQgKzIyMSwyNCBAQAogCXBhcnNlID0ga21hbGxvYyhzaXplb2YoKnBhcnNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgcGFyc2UpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidng6IGNhbm5vdCBhbGxvY2F0ZVxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCBwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgcGFyc2UpKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UtPmNvbmZpZy5ybWFza1swXTsKIAogCS8qIHJlZGVmaW5lIGhhcmR3YXJlIHJlY29yZCBhY2NvcmRpbmcgdG8gdGhlIFZFUlNJT04xIHN0cmluZyAqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCBwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgcGFyc2UpKTsKIAlpZiAoISBzdHJjbXAocGFyc2UtPnZlcnNpb25fMS5zdHIgKyBwYXJzZS0+dmVyc2lvbl8xLm9mc1sxXSwgIlZYLVBPQ0tFVCIpKSB7CiAJCXNuZF9wcmludGRkKCJWWC1wb2NrZXQgaXMgZGV0ZWN0ZWRcbiIpOwogCX0gZWxzZSB7CkBAIC0yNTcsNjcgKzI0OSw1MCBAQAogCQlzdHJjcHkoY2hpcC0+Y2FyZC0+ZHJpdmVyLCB2eHA0NDBfaHcubmFtZSk7CiAJfQogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOworCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCi0JQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsICZsaW5rLT5pbykpOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7Ci0KLQljaGlwLT5kZXYgPSAmaGFuZGxlX3RvX2RldihsaW5rLT5oYW5kbGUpOworCWNoaXAtPmRldiA9ICZoYW5kbGVfdG9fZGV2KGxpbmspOwogCXNuZF9jYXJkX3NldF9kZXYoY2hpcC0+Y2FyZCwgY2hpcC0+ZGV2KTsKIAogCWlmIChzbmRfdnhwb2NrZXRfYXNzaWduX3Jlc291cmNlcyhjaGlwLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSkgPCAwKQogCQlnb3RvIGZhaWxlZDsKIAotCWxpbmstPmRldiA9ICZ2eHAtPm5vZGU7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlsaW5rLT5kZXZfbm9kZSA9ICZ2eHAtPm5vZGU7CiAJa2ZyZWUocGFyc2UpOwotCXJldHVybjsKKwlyZXR1cm4gOTsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlrZnJlZShwYXJzZSk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCB2eHBfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCB2eHBfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBsaW5rLT5wcml2OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiU1VTUEVORFxuIik7Ci0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CiAJaWYgKGNoaXApIHsKIAkJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAic25kX3Z4X3N1c3BlbmQgY2FsbGluZ1xuIik7CiAJCXNuZF92eF9zdXNwZW5kKGNoaXAsIFBNU0dfU1VTUEVORCk7CiAJfQotCXNuZF9wcmludGRkKEtFUk5fREVCVUcgIlJFU0VUX1BIWVNJQ0FMXG4iKTsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2eHBfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHZ4cF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXN0cnVjdCB2eF9jb3JlICpjaGlwID0gbGluay0+cHJpdjsKIAogCXNuZF9wcmludGRkKEtFUk5fREVCVUcgIlJFU1VNRVxuIik7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCi0Jc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiQ0FSRF9SRVNFVFxuIik7Ci0JaWYgKERFVl9PSyhsaW5rKSkgeworCWlmIChwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKIAkJLy9zdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHAgPSAoc3RydWN0IHNuZF92eHBvY2tldCAqKWNoaXA7Ci0JCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInJlcXVlc3Rjb25maWcuLi5cbiIpOwotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwogCQlpZiAoY2hpcCkgewogCQkJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiY2FsbGluZyBzbmRfdnhfcmVzdW1lXG4iKTsKIAkJCXNuZF92eF9yZXN1bWUoY2hpcCk7CkBAIC0zMzMsNyArMzA4LDcgQEAKIAogLyoKICAqLwotc3RhdGljIGludCB2eHBvY2tldF9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB2eHBvY2tldF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cDsKQEAgLTM1OCw3ICszMzMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl2eHAgPSBzbmRfdnhwb2NrZXRfbmV3KGNhcmQsIGlibFtpXSk7CisJdnhwID0gc25kX3Z4cG9ja2V0X25ldyhjYXJkLCBpYmxbaV0sIHBfZGV2KTsKIAlpZiAoISB2eHApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zNjgsMjAgKzM0MywxMyBAQAogCXZ4cC0+aW5kZXggPSBpOwogCWNhcmRfYWxsb2MgfD0gMSA8PCBpOwogCi0JLyogQ2hhaW4gZHJpdmVycyAqLwotCXZ4cC0+bGluay5uZXh0ID0gTlVMTDsKKwl2eHAtPnBfZGV2ID0gcF9kZXY7CiAKLQl2eHAtPmxpbmsuaGFuZGxlID0gcF9kZXY7Ci0JdnhwLT5saW5rLnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXBfZGV2LT5pbnN0YW5jZSA9ICZ2eHAtPmxpbms7Ci0Jdnhwb2NrZXRfY29uZmlnKCZ2eHAtPmxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHZ4cG9ja2V0X2NvbmZpZyhwX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHZ4cG9ja2V0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCB2eHBvY2tldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwOwogCXN0cnVjdCB2eF9jb3JlICpjaGlwOwogCkBAIC00MTMsNyArMzgxLDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAic25kLXZ4cG9ja2V0IiwKIAl9LAotCS5wcm9iZQkJPSB2eHBvY2tldF9hdHRhY2gsCisJLnByb2JlCQk9IHZ4cG9ja2V0X3Byb2JlLAogCS5yZW1vdmUJCT0gdnhwb2NrZXRfZGV0YWNoLAogCS5pZF90YWJsZQk9IHZ4cF9pZHMsCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuaCBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5oCmluZGV4IDY3ZWZhZTMuLjI3ZWEwMDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5oCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5oCkBAIC00Miw3ICs0Miw3IEBACiAJaW50IGluZGV4OwkvKiBjYXJkIGluZGV4ICovCiAKIAkvKiBwY21jaWEgc3R1ZmYgKi8KLQlkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9kYWNhLmMgYi9zb3VuZC9wcGMvZGFjYS5jCmluZGV4IGFhMDllYmQuLjQ2ZWViZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9kYWNhLmMKKysrIGIvc291bmQvcHBjL2RhY2EuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAKICNpZmRlZiBDT05GSUdfS01PRAogCWlmIChjdXJyZW50LT5mcy0+cm9vdCkKLQkJcmVxdWVzdF9tb2R1bGUoImkyYy1rZXl3ZXN0Iik7CisJCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKICNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwkKIAogCW1peCA9IGttYWxsb2Moc2l6ZW9mKCptaXgpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy90b29uaWUuYyBiL3NvdW5kL3BwYy90b29uaWUuYwppbmRleCA0ZTU5NTE3Li4xYWM3Yzg1IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdG9vbmllLmMKKysrIGIvc291bmQvcHBjL3Rvb25pZS5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAljaGlwLT5taXhlcl9kYXRhID0gTlVMTDsKIH0KIAotaW50IHNuZF9wbWFjX3Rvb25pZV9pbml0KHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKK2ludCBfX2luaXQgc25kX3BtYWNfdG9vbmllX2luaXQoc3RydWN0IHNuZF9wbWFjICpjaGlwKQogewogCXN0cnVjdCBwbWFjX3Rvb25pZSAqbWl4OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdHVtYmxlci5jIGIvc291bmQvcHBjL3R1bWJsZXIuYwppbmRleCAxMTQ2ZGQ4Li43MGU0ZWJjIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdHVtYmxlci5jCisrKyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKQEAgLTEzMTMsNyArMTMxMyw3IEBACiAKICNpZmRlZiBDT05GSUdfS01PRAogCWlmIChjdXJyZW50LT5mcy0+cm9vdCkKLQkJcmVxdWVzdF9tb2R1bGUoImkyYy1rZXl3ZXN0Iik7CisJCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKICNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwkKIAogCW1peCA9IGttYWxsb2Moc2l6ZW9mKCptaXgpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlci5jIGIvc291bmQvdXNiL3VzYm1peGVyLmMKaW5kZXggOGQwOGIzNC4uY2U4NjI4MyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTMwNiw4ICszMDYsOCBAQAogCQljdmFsLT5yZXMgPSAxOwogCWlmICh2YWwgPCBjdmFsLT5taW4pCiAJCXJldHVybiAwOwotCWVsc2UgaWYgKHZhbCA+IGN2YWwtPm1heCkKLQkJcmV0dXJuIChjdmFsLT5tYXggLSBjdmFsLT5taW4pIC8gY3ZhbC0+cmVzOworCWVsc2UgaWYgKHZhbCA+PSBjdmFsLT5tYXgpCisJCXJldHVybiAoY3ZhbC0+bWF4IC0gY3ZhbC0+bWluICsgY3ZhbC0+cmVzIC0gMSkgLyBjdmFsLT5yZXM7CiAJZWxzZQogCQlyZXR1cm4gKHZhbCAtIGN2YWwtPm1pbikgLyBjdmFsLT5yZXM7CiB9CkBAIC02NzAsNiArNjcwLDM2IEBACiAJCX0KIAkJaWYgKGN2YWwtPnJlcyA9PSAwKQogCQkJY3ZhbC0+cmVzID0gMTsKKworCQkvKiBBZGRpdGlvbmFsIGNoZWNrcyBmb3IgdGhlIHByb3BlciByZXNvbHV0aW9uCisJCSAqCisJCSAqIFNvbWUgZGV2aWNlcyByZXBvcnQgc21hbGxlciByZXNvbHV0aW9ucyB0aGFuIGFjdHVhbGx5CisJCSAqIHJlYWN0aW5nLiAgVGhleSBkb24ndCByZXR1cm4gZXJyb3JzIGJ1dCBzaW1wbHkgY2xpcAorCQkgKiB0byB0aGUgbG93ZXIgYWxpZ25lZCB2YWx1ZS4KKwkJICovCisJCWlmIChjdmFsLT5taW4gKyBjdmFsLT5yZXMgPCBjdmFsLT5tYXgpIHsKKwkJCWludCBsYXN0X3ZhbGlkX3JlcyA9IGN2YWwtPnJlczsKKwkJCWludCBzYXZlZCwgdGVzdCwgY2hlY2s7CisJCQlnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZzYXZlZCk7CisJCQlmb3IgKDs7KSB7CisJCQkJdGVzdCA9IHNhdmVkOworCQkJCWlmICh0ZXN0IDwgY3ZhbC0+bWF4KQorCQkJCQl0ZXN0ICs9IGN2YWwtPnJlczsKKwkJCQllbHNlCisJCQkJCXRlc3QgLT0gY3ZhbC0+cmVzOworCQkJCWlmICh0ZXN0IDwgY3ZhbC0+bWluIHx8IHRlc3QgPiBjdmFsLT5tYXggfHwKKwkJCQkgICAgc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCB0ZXN0KSB8fAorCQkJCSAgICBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZjaGVjaykpIHsKKwkJCQkJY3ZhbC0+cmVzID0gbGFzdF92YWxpZF9yZXM7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAodGVzdCA9PSBjaGVjaykKKwkJCQkJYnJlYWs7CisJCQkJY3ZhbC0+cmVzICo9IDI7CisJCQl9CisJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIHNhdmVkKTsKKwkJfQorCiAJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC02OTUsNyArNzI1LDggQEAKIAkJaWYgKCEgY3ZhbC0+aW5pdGlhbGl6ZWQpCiAJCQlnZXRfbWluX21heChjdmFsLCAgMCk7CiAJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IChjdmFsLT5tYXggLSBjdmFsLT5taW4pIC8gY3ZhbC0+cmVzOworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPQorCQkJKGN2YWwtPm1heCAtIGN2YWwtPm1pbiArIGN2YWwtPnJlcyAtIDEpIC8gY3ZhbC0+cmVzOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JxdWlya3MuaCBiL3NvdW5kL3VzYi91c2JxdWlya3MuaAppbmRleCAwOTkyYTA5Li45MzUxODQ2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNicXVpcmtzLmgKKysrIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCkBAIC0xNTMxLDYgKzE1MzEsMTUgQEAKIAl9CiB9LAogeworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgwY2NkLCAweDAwMTQpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiVGVycmFUZWMiLAorCQkucHJvZHVjdF9uYW1lID0gIlBIQVNFIDI2IiwKKwkJLmlmbnVtID0gMywKKwkJLnR5cGUgPSBRVUlSS19NSURJX1NUQU5EQVJEX0lOVEVSRkFDRQorCX0KK30sCit7CiAJVVNCX0RFVklDRSgweDBjY2QsIDB4MDAzNSksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CiAJCS52ZW5kb3JfbmFtZSA9ICJNaWRpdGVjaCIsCmRpZmYgLS1naXQgYS91c3IvTWFrZWZpbGUgYi91c3IvTWFrZWZpbGUKaW5kZXggZTIxMjljYi4uMTlkNzRlNiAxMDA2NDQKLS0tIGEvdXNyL01ha2VmaWxlCisrKyBiL3Vzci9NYWtlZmlsZQpAQCAtMSw2NSArMSw0OCBAQAorIworIyBrYnVpbGQgZmlsZSBmb3IgdXNyLyAtIGluY2x1ZGluZyBpbml0cmFtZnMgaW1hZ2UKKyMKIAora2xpYmNkaXJzOjsKKworIyBHZW5lcmF0ZSBidWlsdGluLm8gYmFzZWQgb24gaW5pdHJhbWZzX2RhdGEubwogb2JqLXkgOj0gaW5pdHJhbWZzX2RhdGEubwogCi1ob3N0cHJvZ3MteSAgOj0gZ2VuX2luaXRfY3BpbwotCi1jbGVhbi1maWxlcyA6PSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6IGluaXRyYW1mc19saXN0Ci0KICMgaW5pdHJhbWZzX2RhdGEubyBjb250YWlucyB0aGUgaW5pdHJhbWZzX2RhdGEuY3Bpby5neiBpbWFnZS4KICMgVGhlIGltYWdlIGlzIGluY2x1ZGVkIHVzaW5nIC5pbmNiaW4sIGEgZGVwZW5kZW5jeSB3aGljaCBpcyBub3QKICMgdHJhY2tlZCBhdXRvbWF0aWNhbGx5LgogJChvYmopL2luaXRyYW1mc19kYXRhLm86ICQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvLmd6IEZPUkNFCiAKLWlmZGVmIENPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQKLWdlbl9pbml0cmFtZnNfYXJncyArPSAtdSAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQpCisjIyMjIworIyBHZW5lcmF0ZSB0aGUgaW5pdHJhbWZzIGNwaW8gYXJjaGl2ZQorCitob3N0cHJvZ3MteSA6PSBnZW5faW5pdF9jcGlvCitpbml0cmFtZnMgICA6PSAkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAorcmFtZnMtaW5wdXQgOj0gJChpZiAkKGZpbHRlci1vdXQgIiIsJChDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSkpLCBcCisgICAgICAgICAgICAgICAgICAgICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpLC1kKQorcmFtZnMtYXJncyAgOj0gXAorICAgICAgICAkKGlmICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCksIC11ICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCkpIFwKKyAgICAgICAgJChpZiAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQpLCAtZyAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQpKSBcCisgICAgICAgICQocmFtZnMtaW5wdXQpCisKKyMgLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZCBpcyB1c2VkIHRvIGlkZW50aWZ5IGFsbCBmaWxlcyBpbmNsdWRlZAorIyBpbiBpbml0cmFtZnMgYW5kIHRvIGRldGVjdCBpZiBhbnkgZmlsZXMgYXJlIGFkZGVkL3JlbW92ZWQuCisjIFJlbW92ZWQgZmlsZXMgYXJlIGlkZW50aWZpZWQgYnkgZGlyZWN0b3J5IHRpbWVzdGFtcCBiZWluZyB1cGRhdGVkCisjIFRoZSBkZXBlbmRlbmN5IGxpc3QgaXMgZ2VuZXJhdGVkIGJ5IGdlbl9pbml0cmFtZnMuc2ggLWwKK2lmbmVxICgkKHdpbGRjYXJkICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kKSwpCisJaW5jbHVkZSAkKG9iaikvLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZAogZW5kaWYKIAotaWZkZWYgQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRAotZ2VuX2luaXRyYW1mc19hcmdzICs9IC1nICQoQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRCkKLWVuZGlmCitxdWlldF9jbWRfaW5pdGZzID0gR0VOICAgICAkQAorICAgICAgY21kX2luaXRmcyA9ICQoaW5pdHJhbWZzKSAtbyAkQCAkKHJhbWZzLWFyZ3MpICQocmFtZnMtaW5wdXQpCiAKLSMgVGhlICQoc2hlbGwgZWNobyAkKENPTkZJR19JTklUUkFNRlNfU09VUkNFKSkgaXMgdG8gcmVtb3ZlIHRoZQotIyBncmF0dWl0b3VzIGJlZ2luIGFuZCBlbmQgcXVvdGVzIGZyb20gdGhlIEtjb25maWcgc3RyaW5nIHR5cGUuCi0jIEludGVybmFsLCBlc2NhcGVkIHF1b3RlcyBpbiB0aGUgS2NvbmZpZyBzdHJpbmcgd2lsbCBsb29zZSB0aGUKLSMgZXNjYXBlIGFuZCBiZWNvbWUgYWN0aXZlIHF1b3Rlcy4KLXF1b3RlZml4ZWRfaW5pdHJhbWZzX3NvdXJjZSA6PSAkKHNoZWxsIGVjaG8gJChDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSkpCi0KLWZpbGVjaGtfaW5pdHJhbWZzX2xpc3QgPSAkKENPTkZJR19TSEVMTCkgXAotICQoc3JjdHJlZSkvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2ggJChnZW5faW5pdHJhbWZzX2FyZ3MpICQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKQotCi0kKG9iaikvaW5pdHJhbWZzX2xpc3Q6ICQob2JqKS9NYWtlZmlsZSBGT1JDRQotCSQoY2FsbCBmaWxlY2hrLGluaXRyYW1mc19saXN0KQotCi1xdWlldF9jbWRfY3BpbyA9IENQSU8gICAgJEAKLSAgICAgIGNtZF9jcGlvID0gLi8kPCAkKG9iaikvaW5pdHJhbWZzX2xpc3QgPiAkQAotCi0KLSMgQ2hlY2sgaWYgdGhlIElOSVRSQU1GU19TT1VSQ0UgaXMgYSBjcGlvIGFyY2hpdmUKLWlmbmVxICgsJChmaW5kc3RyaW5nIC5jcGlvLCQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKSkpCi0KLSMgSU5JVFJBTUZTX1NPVVJDRSBoYXMgYSBjcGlvIGFyY2hpdmUgLSB2ZXJpZnkgdGhhdCBpdCdzIGEgc2luZ2xlIGZpbGUKLWlmbmVxICgxLCQod29yZHMgJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpKSkKLSQoZXJyb3IgT25seSBhIHNpbmdsZSBmaWxlIG1heSBiZSBzcGVjaWZpZWQgaW4gQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UgKD0iJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpIikgd2hlbiBhIGNwaW8gYXJjaGl2ZSBpcyBkaXJlY3RseSBzcGVjaWZpZWQuKQotZW5kaWYKLSMgTm93IHVzZSB0aGUgY3BpbyBhcmNoaXZlIGRpcmVjdGx5Ci1pbml0cmFtZnNfZGF0YV9jcGlvID0gJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpCi10YXJnZXRzICs9ICQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKQotCi1lbHNlCi0KLSMgSU5JVFJBTUZTX1NPVVJDRSBpcyBub3QgYSBjcGlvIGFyY2hpdmUgLSBjcmVhdGUgb25lCi0kKG9iaikvaW5pdHJhbWZzX2RhdGEuY3BpbzogJChvYmopL2dlbl9pbml0X2NwaW8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5pdHJhbWZzLXkpICQob2JqKS9pbml0cmFtZnNfbGlzdCBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGNwaW8pCi0KLXRhcmdldHMgKz0gaW5pdHJhbWZzX2RhdGEuY3BpbwotaW5pdHJhbWZzX2RhdGFfY3BpbyA9ICQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvCi0KLWVuZGlmCi0KLQotJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8uZ3o6ICQoaW5pdHJhbWZzX2RhdGFfY3BpbykgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQotCi10YXJnZXRzICs9IGluaXRyYW1mc19kYXRhLmNwaW8uZ3oKK3RhcmdldHMgOj0gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorJChkZXBzX2luaXRyYW1mcyk6IGtsaWJjZGlycworIyBXZSByZWJ1aWxkIGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogaWY6CisjIDEpIEFueSBpbmNsdWRlZCBmaWxlIGlzIG5ld2VyIHRoZW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorIyAyKSBUaGVyZSBhcmUgY2hhbmdlcyBpbiB3aGljaCBmaWxlcyBhcmUgaW5jbHVkZWQgKGFkZGVkIG9yIGRlbGV0ZWQpCisjIDMpIElmIGdlbl9pbml0X2NwaW8gYXJlIG5ld2VyIHRoYW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorIyA0KSBhcmd1bWVudHMgdG8gZ2VuX2luaXRyYW1mcy5zaCBjaGFuZ2VzCiskKG9iaikvaW5pdHJhbWZzX2RhdGEuY3Bpby5nejogJChvYmopL2dlbl9pbml0X2NwaW8gJChkZXBzX2luaXRyYW1mcykga2xpYmNkaXJzCisJJChRKSQoaW5pdHJhbWZzKSAtbCAkKHJhbWZzLWlucHV0KSA+ICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kCisJJChjYWxsIGlmX2NoYW5nZWQsaW5pdGZzKQogCmRpZmYgLS1naXQgYS91c3IvZ2VuX2luaXRfY3Bpby5jIGIvdXNyL2dlbl9pbml0X2NwaW8uYwppbmRleCAzM2RiY2JmLi44M2FjZDZjIDEwMDY0NAotLS0gYS91c3IvZ2VuX2luaXRfY3Bpby5jCisrKyBiL3Vzci9nZW5faW5pdF9jcGlvLmMKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCQkJCSJFUlJPUjogaW5jb3JyZWN0IGZvcm1hdCwgY291bGQgbm90IGxvY2F0ZSBmaWxlIHR5cGUgbGluZSAlZDogJyVzJ1xuIiwKIAkJCQlsaW5lX25yLCBsaW5lKTsKIAkJCWVjID0gLTE7CisJCQlicmVhazsKIAkJfQogCiAJCWlmICgnXG4nID09ICp0eXBlKSB7CkBAIC01MDYsNyArNTA3LDggQEAKIAkJCQlsaW5lX25yLCBsaW5lKTsKIAkJfQogCX0KLQljcGlvX3RyYWlsZXIoKTsKKwlpZiAoZWMgPT0gMCkKKwkJY3Bpb190cmFpbGVyKCk7CiAKIAlleGl0KGVjKTsKIH0K